<feed xmlns='http://www.w3.org/2005/Atom'>
<title>glusterfs.git/cli/src, branch v3.12.14</title>
<subtitle></subtitle>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/'/>
<entry>
<title>cli: Fixed a use_after_free</title>
<updated>2018-01-10T06:56:27+00:00</updated>
<author>
<name>N Balachandran</name>
<email>nbalacha@redhat.com</email>
</author>
<published>2018-01-05T03:18:15+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=c5e4d2c6ff1b2f4451f2c9e79ebc8533a162c8d3'/>
<id>c5e4d2c6ff1b2f4451f2c9e79ebc8533a162c8d3</id>
<content type='text'>
gf_event in cli_cmd_volume_create_cbk was accessing
memory that had already been freed.

&gt; Change-Id: I447c939fa9b31e18819a62c3b356c14cca390787
&gt; BUG: 1530910
&gt; Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
(cherry picked from commit fa903173540df5b82c295a8f7b24848098e49a41)

Change-Id: I447c939fa9b31e18819a62c3b356c14cca390787
BUG: 1531372
Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
gf_event in cli_cmd_volume_create_cbk was accessing
memory that had already been freed.

&gt; Change-Id: I447c939fa9b31e18819a62c3b356c14cca390787
&gt; BUG: 1530910
&gt; Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
(cherry picked from commit fa903173540df5b82c295a8f7b24848098e49a41)

Change-Id: I447c939fa9b31e18819a62c3b356c14cca390787
BUG: 1531372
Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli: remove summary option from heal info command</title>
<updated>2017-12-01T04:49:28+00:00</updated>
<author>
<name>Ravishankar N</name>
<email>ravishankar@redhat.com</email>
</author>
<published>2017-11-28T05:22:29+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=f4867128fe36e4521c56e4d1e8afd7ad1b3f621e'/>
<id>f4867128fe36e4521c56e4d1e8afd7ad1b3f621e</id>
<content type='text'>
commit c49fcf570439e47a5e1224436bbaf3f8dd580105 was a straight forward backport
from its corresponding master patch but in doing so, also added the 'summary'
option to the CLI. The heal info summary command is present only in
glusterfs-3.13. So remove it from the CLI in 3.12

Change-Id: Idb742f0b9752726c94619c0528fe792e4f5134fd
BUG: 1518061
Signed-off-by: Ravishankar N &lt;ravishankar@redhat.com&gt;
Reported-by: Shubhendu Tripathi &lt;shtripat@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit c49fcf570439e47a5e1224436bbaf3f8dd580105 was a straight forward backport
from its corresponding master patch but in doing so, also added the 'summary'
option to the CLI. The heal info summary command is present only in
glusterfs-3.13. So remove it from the CLI in 3.12

Change-Id: Idb742f0b9752726c94619c0528fe792e4f5134fd
BUG: 1518061
Signed-off-by: Ravishankar N &lt;ravishankar@redhat.com&gt;
Reported-by: Shubhendu Tripathi &lt;shtripat@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli: correct rebalance status elapsed check</title>
<updated>2017-11-10T08:51:04+00:00</updated>
<author>
<name>N Balachandran</name>
<email>nbalacha@redhat.com</email>
</author>
<published>2017-08-08T17:41:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=c8fd28becaa02b248f4bb5c9ea6fdd021579a45f'/>
<id>c8fd28becaa02b248f4bb5c9ea6fdd021579a45f</id>
<content type='text'>
Check that elapsed time has crossed 10 mins for at least
one rebalance process before displaying the estimates.

&gt; BUG: 1479528
&gt; Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
(cherry picked from commit 56aef68530b3bab27730aa62e4fbc513d3dba65f)
Change-Id: Ib357a6f0d0125a178e94ede1e31514fdc6ce3593
BUG: 1511271
Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Check that elapsed time has crossed 10 mins for at least
one rebalance process before displaying the estimates.

&gt; BUG: 1479528
&gt; Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
(cherry picked from commit 56aef68530b3bab27730aa62e4fbc513d3dba65f)
Change-Id: Ib357a6f0d0125a178e94ede1e31514fdc6ce3593
BUG: 1511271
Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli: gluster help changes</title>
<updated>2017-11-08T06:14:38+00:00</updated>
<author>
<name>N Balachandran</name>
<email>nbalacha@redhat.com</email>
</author>
<published>2017-11-06T04:00:54+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=3654ddc269a366d786cdef2a799a8b95025f1c8a'/>
<id>3654ddc269a366d786cdef2a799a8b95025f1c8a</id>
<content type='text'>
gluster cli help now shows only the top level
help commands. gluster &lt;component&gt; help will now show
help commands for &lt;component&gt;.

Change-Id: I263f53a0870d80ef4cfaad455fdaa47e2ac4423b
BUG: 1509786
&gt; BUG: 1474768
&gt; Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
(cherry picked from commit 89dc54f50c9f800ca4446ea8fe736e4860588845)
Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
gluster cli help now shows only the top level
help commands. gluster &lt;component&gt; help will now show
help commands for &lt;component&gt;.

Change-Id: I263f53a0870d80ef4cfaad455fdaa47e2ac4423b
BUG: 1509786
&gt; BUG: 1474768
&gt; Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
(cherry picked from commit 89dc54f50c9f800ca4446ea8fe736e4860588845)
Signed-off-by: N Balachandran &lt;nbalacha@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>geo-rep/scheduler: Add validation for session existence</title>
<updated>2017-10-12T18:44:40+00:00</updated>
<author>
<name>Kotresh HR</name>
<email>khiremat@redhat.com</email>
</author>
<published>2017-10-06T09:33:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=1e425a3aea627f902434ca5b8252ee64cfa32c3d'/>
<id>1e425a3aea627f902434ca5b8252ee64cfa32c3d</id>
<content type='text'>
Added validation to check for session existence
to give out proper error message out.

&gt; Change-Id: I13c5f6ef29c1395cff092a14e1bd2c197a39f058
&gt; BUG: 1499159
&gt; Signed-off-by: Kotresh HR &lt;khiremat@redhat.com&gt;
(cherry picked from commit 938addeb7ec634e431c2c8c0a768a2a9ed056c0d)


Change-Id: I13c5f6ef29c1395cff092a14e1bd2c197a39f058
BUG: 1499392
Signed-off-by: Kotresh HR &lt;khiremat@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Added validation to check for session existence
to give out proper error message out.

&gt; Change-Id: I13c5f6ef29c1395cff092a14e1bd2c197a39f058
&gt; BUG: 1499159
&gt; Signed-off-by: Kotresh HR &lt;khiremat@redhat.com&gt;
(cherry picked from commit 938addeb7ec634e431c2c8c0a768a2a9ed056c0d)


Change-Id: I13c5f6ef29c1395cff092a14e1bd2c197a39f058
BUG: 1499392
Signed-off-by: Kotresh HR &lt;khiremat@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli/afr: gluster volume heal info "healed" command output is not appropriate</title>
<updated>2017-10-11T10:02:57+00:00</updated>
<author>
<name>Mohit Agrawal</name>
<email>moagrawa@redhat.com</email>
</author>
<published>2016-10-25T14:27:02+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=c49fcf570439e47a5e1224436bbaf3f8dd580105'/>
<id>c49fcf570439e47a5e1224436bbaf3f8dd580105</id>
<content type='text'>
Problem: "gluster volume heal info [healed] [heal-failed]" command
          output on terminal is not appropriate in case of down any volume.

Solution: To make message more appropriate change the condition
          in function "gd_syncop_mgmt_brick_op".

Test : To verify the fix followed below procedure
       1) Create 2*3 distribute replicate volume
       2) set self-heal daemon off
       3) kill two bricks (3, 6)
       4) create some file on mount point
       5) bring brick 3,6 up
       6) kill other two brick (2 and 4)
       7) make self heal daemon on
       8) run "gluster v heal &lt;vol-name&gt;"

Note: After apply the patch options (healed | heal-failed) will deprecate
      from command line.

&gt; BUG: 1388509
&gt; Change-Id: I229c320c9caeb2525c76b78b44a53a64b088545a
&gt; Signed-off-by: Mohit Agrawal &lt;moagrawa@redhat.com&gt;
&gt; (Cherry pick from commit d1f15cdeb609a1b720a04a502f7a63b2d3922f41)

BUG: 1500662
Change-Id: I229c320c9caeb2525c76b78b44a53a64b088545a
Signed-off-by: Mohit Agrawal &lt;moagrawa@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem: "gluster volume heal info [healed] [heal-failed]" command
          output on terminal is not appropriate in case of down any volume.

Solution: To make message more appropriate change the condition
          in function "gd_syncop_mgmt_brick_op".

Test : To verify the fix followed below procedure
       1) Create 2*3 distribute replicate volume
       2) set self-heal daemon off
       3) kill two bricks (3, 6)
       4) create some file on mount point
       5) bring brick 3,6 up
       6) kill other two brick (2 and 4)
       7) make self heal daemon on
       8) run "gluster v heal &lt;vol-name&gt;"

Note: After apply the patch options (healed | heal-failed) will deprecate
      from command line.

&gt; BUG: 1388509
&gt; Change-Id: I229c320c9caeb2525c76b78b44a53a64b088545a
&gt; Signed-off-by: Mohit Agrawal &lt;moagrawa@redhat.com&gt;
&gt; (Cherry pick from commit d1f15cdeb609a1b720a04a502f7a63b2d3922f41)

BUG: 1500662
Change-Id: I229c320c9caeb2525c76b78b44a53a64b088545a
Signed-off-by: Mohit Agrawal &lt;moagrawa@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli: Bypass the confirmation question creating replica 2 volume with force</title>
<updated>2017-10-06T06:31:49+00:00</updated>
<author>
<name>Niels de Vos</name>
<email>ndevos@redhat.com</email>
</author>
<published>2017-09-26T12:51:27+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=0aa823e3f52276f67591b00f364e6b8e139be036'/>
<id>0aa823e3f52276f67591b00f364e6b8e139be036</id>
<content type='text'>
When a replica 2 volume is created with the force option,
remove the warning message with the confirmation question,
whether they want to continue or not and Succeed the
volume creation.

Cherry picked from commit f449e53df7c07301b495b4ff688d165026dfd2d0:
&gt; Change-Id: I4f3306659fa4cbf53dd8d45269a32d19ce86ac88
&gt; BUG: 1493893
&gt; Signed-off-by: karthik-us &lt;ksubrahm@redhat.com&gt;

While backporting the URL for the documentation has been adjusted as
well. This comes from commit eb2f1ab4cd which also corrects other URLs
(those are not included in this backport).

Change-Id: I4f3306659fa4cbf53dd8d45269a32d19ce86ac88
BUG: 1495858
Signed-off-by: Niels de Vos &lt;ndevos@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a replica 2 volume is created with the force option,
remove the warning message with the confirmation question,
whether they want to continue or not and Succeed the
volume creation.

Cherry picked from commit f449e53df7c07301b495b4ff688d165026dfd2d0:
&gt; Change-Id: I4f3306659fa4cbf53dd8d45269a32d19ce86ac88
&gt; BUG: 1493893
&gt; Signed-off-by: karthik-us &lt;ksubrahm@redhat.com&gt;

While backporting the URL for the documentation has been adjusted as
well. This comes from commit eb2f1ab4cd which also corrects other URLs
(those are not included in this backport).

Change-Id: I4f3306659fa4cbf53dd8d45269a32d19ce86ac88
BUG: 1495858
Signed-off-by: Niels de Vos &lt;ndevos@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>events : Add brick list in EVENT_VOLUME_CREATE</title>
<updated>2017-09-28T20:56:21+00:00</updated>
<author>
<name>Atin Mukherjee</name>
<email>amukherj@redhat.com</email>
</author>
<published>2017-09-15T13:31:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=b49e9c78659c3912a732789ef39d5ef14cefcf48'/>
<id>b49e9c78659c3912a732789ef39d5ef14cefcf48</id>
<content type='text'>
&gt;Reviewed-on: https://review.gluster.org/18306
&gt;Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
&gt;Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt;Reviewed-by: Aravinda VK &lt;avishwan@redhat.com&gt;
&gt;CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt;(cherry picked from commit f6775423d7fbe71fe35e6154388e77aae2e264ad)

Change-Id: Ibf87ae5ca57f9d27c036f329a30c8f81b51c52bf
BUG: 1491292
Signed-off-by: Atin Mukherjee &lt;amukherj@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
&gt;Reviewed-on: https://review.gluster.org/18306
&gt;Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
&gt;Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt;Reviewed-by: Aravinda VK &lt;avishwan@redhat.com&gt;
&gt;CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt;(cherry picked from commit f6775423d7fbe71fe35e6154388e77aae2e264ad)

Change-Id: Ibf87ae5ca57f9d27c036f329a30c8f81b51c52bf
BUG: 1491292
Signed-off-by: Atin Mukherjee &lt;amukherj@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tier: separation of attach-tier from add-brick</title>
<updated>2017-08-04T20:34:03+00:00</updated>
<author>
<name>hari gowtham</name>
<email>hgowtham@redhat.com</email>
</author>
<published>2017-01-23T11:08:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=098801ba723d8dae49ea104144d007f23a8e0a4f'/>
<id>098801ba723d8dae49ea104144d007f23a8e0a4f</id>
<content type='text'>
PROBLEM: Both attach tier and add brick have the same RPC
and set of code. This becomes a hurdle while tring to implement
add brick on a tiered volume.

FIX: This patch separates the add brick and attach tier
giving them separate RPCs.

&gt;Change-Id: Iec57e972be968a9ff00b15b507e56a4f6dc398a2
&gt;BUG: 1376326
&gt;Signed-off-by: hari gowtham &lt;hgowtham@redhat.com&gt;
&gt;Reviewed-on: https://review.gluster.org/15503
&gt;Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt;Tested-by: hari gowtham &lt;hari.gowtham005@gmail.com&gt;
&gt;Reviewed-by: Samikshan Bairagya &lt;samikshan@gmail.com&gt;
&gt;CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;

Signed-off-by: hari gowtham &lt;hgowtham@redhat.com&gt;
Change-Id: Iec57e972be968a9ff00b15b507e56a4f6dc398a2
BUG: 1478276
Reviewed-on: https://review.gluster.org/17974
Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
Tested-by: hari gowtham &lt;hari.gowtham005@gmail.com&gt;
Reviewed-by: Shyamsundar Ranganathan &lt;srangana@redhat.com&gt;
CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
PROBLEM: Both attach tier and add brick have the same RPC
and set of code. This becomes a hurdle while tring to implement
add brick on a tiered volume.

FIX: This patch separates the add brick and attach tier
giving them separate RPCs.

&gt;Change-Id: Iec57e972be968a9ff00b15b507e56a4f6dc398a2
&gt;BUG: 1376326
&gt;Signed-off-by: hari gowtham &lt;hgowtham@redhat.com&gt;
&gt;Reviewed-on: https://review.gluster.org/15503
&gt;Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt;Tested-by: hari gowtham &lt;hari.gowtham005@gmail.com&gt;
&gt;Reviewed-by: Samikshan Bairagya &lt;samikshan@gmail.com&gt;
&gt;CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;

Signed-off-by: hari gowtham &lt;hgowtham@redhat.com&gt;
Change-Id: Iec57e972be968a9ff00b15b507e56a4f6dc398a2
BUG: 1478276
Reviewed-on: https://review.gluster.org/17974
Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
Tested-by: hari gowtham &lt;hari.gowtham005@gmail.com&gt;
Reviewed-by: Shyamsundar Ranganathan &lt;srangana@redhat.com&gt;
CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>glusterd: Add geo-replication session details to get-state output</title>
<updated>2017-08-04T13:32:52+00:00</updated>
<author>
<name>Samikshan Bairagya</name>
<email>samikshan@gmail.com</email>
</author>
<published>2017-07-31T05:21:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/glusterfs.git/commit/?id=9bc0cf820ace2df58fc666f4ff4c7c50973b60a3'/>
<id>9bc0cf820ace2df58fc666f4ff4c7c50973b60a3</id>
<content type='text'>
This commit adds support to the get-state CLI to capture details
on geo-replication session as obtained in
`gluster volume geo-replication status detail` in its output.

&gt; Reviewed-on: https://review.gluster.org/17941
&gt; Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt; Reviewed-by: Shubhendu Tripathi &lt;shtripat@redhat.com&gt;
&gt; CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt; Reviewed-by: Atin Mukherjee &lt;amukherj@redhat.com&gt;

(cherry picked from commit 2e7daeffef05c6100cbcc39f1be62935711db3eb)

Fixes: #291
Change-Id: I2fbcba70bfdaf439522637234805545194777ed4
Signed-off-by: Samikshan Bairagya &lt;samikshan@gmail.com&gt;
Reviewed-on: https://review.gluster.org/17971
CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
Reviewed-by: Shyamsundar Ranganathan &lt;srangana@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit adds support to the get-state CLI to capture details
on geo-replication session as obtained in
`gluster volume geo-replication status detail` in its output.

&gt; Reviewed-on: https://review.gluster.org/17941
&gt; Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt; Reviewed-by: Shubhendu Tripathi &lt;shtripat@redhat.com&gt;
&gt; CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
&gt; Reviewed-by: Atin Mukherjee &lt;amukherj@redhat.com&gt;

(cherry picked from commit 2e7daeffef05c6100cbcc39f1be62935711db3eb)

Fixes: #291
Change-Id: I2fbcba70bfdaf439522637234805545194777ed4
Signed-off-by: Samikshan Bairagya &lt;samikshan@gmail.com&gt;
Reviewed-on: https://review.gluster.org/17971
CentOS-regression: Gluster Build System &lt;jenkins@build.gluster.org&gt;
Smoke: Gluster Build System &lt;jenkins@build.gluster.org&gt;
Reviewed-by: Shyamsundar Ranganathan &lt;srangana@redhat.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
git/diff/geo-replication/src/gsyncd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>geo-replication/src/gsyncd.c</a></td><td class='right'>585</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/geo-replication/src/procdiggy.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>geo-replication/src/procdiggy.c</a></td><td class='right'>196</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/glusterfsd/src/gf_attach.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>glusterfsd/src/gf_attach.c</a></td><td class='right'>293</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/glusterfsd/src/glusterfsd-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>glusterfsd/src/glusterfsd-mgmt.c</a></td><td class='right'>4845</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.3%;'/><td class='rem' style='width: 10.3%;'/><td class='none' style='width: 79.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/glusterfsd/src/glusterfsd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>glusterfsd/src/glusterfsd.c</a></td><td class='right'>4226</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.8%;'/><td class='rem' style='width: 9.1%;'/><td class='none' style='width: 82.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/heal/src/glfs-heal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>heal/src/glfs-heal.c</a></td><td class='right'>2855</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.0%;'/><td class='rem' style='width: 6.1%;'/><td class='none' style='width: 87.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/atomic.h?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/atomic.h</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/call-stub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/call-stub.c</a></td><td class='right'>3231</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.4%;'/><td class='rem' style='width: 7.3%;'/><td class='none' style='width: 86.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/checksum.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/checksum.c</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/circ-buff.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/circ-buff.c</a></td><td class='right'>294</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/client_t.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/client_t.c</a></td><td class='right'>1390</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.9%;'/><td class='rem' style='width: 3.0%;'/><td class='none' style='width: 94.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/cluster-syncop.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/cluster-syncop.c</a></td><td class='right'>1670</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.4%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/common-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/common-utils.c</a></td><td class='right'>7053</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 15.0%;'/><td class='rem' style='width: 14.9%;'/><td class='none' style='width: 70.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/compat-errno.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/compat-errno.c</a></td><td class='right'>1726</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.6%;'/><td class='none' style='width: 92.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/compat.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/compat.c</a></td><td class='right'>906</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/compound-fop-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/compound-fop-utils.c</a></td><td class='right'>164</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/ctx.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/ctx.c</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/daemon.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/daemon.c</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/default-args.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/default-args.c</a></td><td class='right'>2147</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.4%;'/><td class='rem' style='width: 4.7%;'/><td class='none' style='width: 90.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/defaults-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/defaults-tmpl.c</a></td><td class='right'>313</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/dict.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/dict.c</a></td><td class='right'>4481</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.3%;'/><td class='rem' style='width: 9.7%;'/><td class='none' style='width: 81.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/event-epoll.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event-epoll.c</a></td><td class='right'>1518</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.2%;'/><td class='rem' style='width: 3.3%;'/><td class='none' style='width: 93.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/event-history.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event-history.c</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/event-poll.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event-poll.c</a></td><td class='right'>760</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/event.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event.c</a></td><td class='right'>367</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/events.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/events.c</a></td><td class='right'>197</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/fd-lk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/fd-lk.c</a></td><td class='right'>617</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/fd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/fd.c</a></td><td class='right'>1693</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/gf-dirent.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gf-dirent.c</a></td><td class='right'>413</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/gfdb/gfdb_data_store.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_data_store.c</a></td><td class='right'>1005</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/gfdb/gfdb_data_store_helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_data_store_helper.c</a></td><td class='right'>773</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/gfdb/gfdb_sqlite3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_sqlite3.c</a></td><td class='right'>2355</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.9%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 90.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_sqlite3_helper.c</a></td><td class='right'>2361</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.8%;'/><td class='rem' style='width: 5.2%;'/><td class='none' style='width: 90.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/gidcache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gidcache.c</a></td><td class='right'>306</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/globals.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/globals.c</a></td><td class='right'>669</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/graph-print.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/graph-print.c</a></td><td class='right'>241</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/graph.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/graph.c</a></td><td class='right'>1748</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/hashfn.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/hashfn.c</a></td><td class='right'>262</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/inode.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/inode.c</a></td><td class='right'>3562</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.4%;'/><td class='rem' style='width: 7.7%;'/><td class='none' style='width: 84.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/iobuf.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/iobuf.c</a></td><td class='right'>1701</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/latency.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/latency.c</a></td><td class='right'>106</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/locking.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/locking.c</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/logging.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/logging.c</a></td><td class='right'>4038</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.6%;'/><td class='rem' style='width: 8.6%;'/><td class='none' style='width: 82.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/mem-pool.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/mem-pool.c</a></td><td class='right'>1354</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.9%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 94.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/monitoring.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/monitoring.c</a></td><td class='right'>420</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/options.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/options.c</a></td><td class='right'>1947</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.1%;'/><td class='rem' style='width: 4.2%;'/><td class='none' style='width: 91.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/options.h?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/options.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/parse-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/parse-utils.c</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/quota-common-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/quota-common-utils.c</a></td><td class='right'>332</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/rbthash.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/rbthash.c</a></td><td class='right'>663</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/refcount.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/refcount.c</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/rot-buffs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/rot-buffs.c</a></td><td class='right'>616</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/run.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/run.c</a></td><td class='right'>766</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/stack.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/stack.c</a></td><td class='right'>720</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 96.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/statedump.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/statedump.c</a></td><td class='right'>1496</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.1%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 93.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/store.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/store.c</a></td><td class='right'>1167</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.5%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 95.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/strfd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/strfd.c</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/syncop-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/syncop-utils.c</a></td><td class='right'>1025</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 95.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/syncop.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/syncop.c</a></td><td class='right'>4679</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.9%;'/><td class='rem' style='width: 9.9%;'/><td class='none' style='width: 80.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/syscall.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/syscall.c</a></td><td class='right'>743</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/throttle-tbf.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/throttle-tbf.c</a></td><td class='right'>375</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/timer.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/timer.c</a></td><td class='right'>440</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/timespec.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/timespec.c</a></td><td class='right'>94</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/trie.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/trie.c</a></td><td class='right'>483</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/unittest/global_mock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/unittest/global_mock.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/unittest/log_mock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/unittest/log_mock.c</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/unittest/mem_pool_unittest.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/unittest/mem_pool_unittest.c</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/libglusterfs/src/xlator.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/xlator.c</a></td><td class='right'>2270</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.8%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 90.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/auth-glusterfs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/auth-glusterfs.c</a></td><td class='right'>615</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/auth-null.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/auth-null.c</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/auth-unix.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/auth-unix.c</a></td><td class='right'>75</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/autoscale-threads.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/autoscale-threads.c</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/mgmt-pmap.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/mgmt-pmap.c</a></td><td class='right'>212</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/rpc-clnt-ping.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-clnt-ping.c</a></td><td class='right'>569</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/rpc-clnt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-clnt.c</a></td><td class='right'>3376</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.0%;'/><td class='rem' style='width: 7.3%;'/><td class='none' style='width: 85.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/rpc-drc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-drc.c</a></td><td class='right'>1100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.3%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/rpc-transport.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-transport.c</a></td><td class='right'>1000</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.1%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 95.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/rpcsvc-auth.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpcsvc-auth.c</a></td><td class='right'>790</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/rpcsvc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpcsvc.c</a></td><td class='right'>4525</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.6%;'/><td class='rem' style='width: 9.6%;'/><td class='none' style='width: 80.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/xdr-rpc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/xdr-rpc.c</a></td><td class='right'>259</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-lib/src/xdr-rpcclnt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/xdr-rpcclnt.c</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-transport/rdma/src/name.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/rdma/src/name.c</a></td><td class='right'>1002</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.1%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 95.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-transport/rdma/src/rdma.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/rdma/src/rdma.c</a></td><td class='right'>8091</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 16.8%;'/><td class='rem' style='width: 17.6%;'/><td class='none' style='width: 65.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-transport/socket/src/name.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/socket/src/name.c</a></td><td class='right'>1151</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 95.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/rpc-transport/socket/src/socket.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/socket/src/socket.c</a></td><td class='right'>7444</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 15.3%;'/><td class='rem' style='width: 16.3%;'/><td class='none' style='width: 68.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/xdr/src/msg-nfs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/xdr/src/msg-nfs3.c</a></td><td class='right'>442</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/xdr/src/xdr-generic.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/xdr/src/xdr-generic.c</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/rpc/xdr/src/xdr-nfs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/xdr/src/xdr-nfs3.c</a></td><td class='right'>2572</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.5%;'/><td class='rem' style='width: 5.4%;'/><td class='none' style='width: 89.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/ctime/ctime-glfs-init.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/ctime/ctime-glfs-init.c</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/ec/ec-fast-fgetxattr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/ec/ec-fast-fgetxattr.c</a></td><td class='right'>191</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/ec/seek.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/ec/seek.c</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/fops-sanity.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/fops-sanity.c</a></td><td class='right'>1811</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.9%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/fuse/seek.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/fuse/seek.c</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/anonymous_fd_read_write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/anonymous_fd_read_write.c</a></td><td class='right'>177</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/bug-1241104.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug-1241104.c</a></td><td class='right'>141</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/bug1283983.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug1283983.c</a></td><td class='right'>205</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/bug1291259.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug1291259.c</a></td><td class='right'>300</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/bug1613098.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug1613098.c</a></td><td class='right'>157</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/gfapi-async-calls-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-async-calls-test.c</a></td><td class='right'>272</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/gfapi-dup.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-dup.c</a></td><td class='right'>144</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/gfapi-load-volfile.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-load-volfile.c</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/gfapi-ssl-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-ssl-test.c</a></td><td class='right'>194</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/gfapi-trunc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-trunc.c</a></td><td class='right'>151</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/glfd-lkowner.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/glfd-lkowner.c</a></td><td class='right'>350</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/glfs_sysrq.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/glfs_sysrq.c</a></td><td class='right'>93</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/glfs_xreaddirplus_r.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/glfs_xreaddirplus_r.c</a></td><td class='right'>346</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/libgfapi-fini-hang.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/libgfapi-fini-hang.c</a></td><td class='right'>97</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/mandatory-lock-optimal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/mandatory-lock-optimal.c</a></td><td class='right'>765</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/seek.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/seek.c</a></td><td class='right'>138</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/upcall-cache-invalidate.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/upcall-cache-invalidate.c</a></td><td class='right'>359</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/gfapi/upcall-register-api.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/upcall-register-api.c</a></td><td class='right'>477</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/logchecks.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/logchecks.c</a></td><td class='right'>350</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/posix/zero-fill-enospace.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/posix/zero-fill-enospace.c</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/quota.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/quota.c</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/basic/tier/file_lock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/tier/file_lock.c</a></td><td class='right'>127</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bitrot/br-stub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bitrot/br-stub.c</a></td><td class='right'>304</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/access-control/bug-1051896.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/access-control/bug-1051896.c</a></td><td class='right'>147</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/access-control/bug-1387241.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/access-control/bug-1387241.c</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/cli/bug-1169302.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/cli/bug-1169302.c</a></td><td class='right'>127</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/core/bug-834465.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/core/bug-834465.c</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/distribute/bug-1193636.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/distribute/bug-1193636.c</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/distribute/bug-860663.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/distribute/bug-860663.c</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/ec/bug-1161886.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/ec/bug-1161886.c</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/fuse/bug-1126048.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/fuse/bug-1126048.c</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/gfapi/bug-1093594.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1093594.c</a></td><td class='right'>508</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/gfapi/bug-1319374.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1319374.c</a></td><td class='right'>220</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/gfapi/bug-1447266/1460514.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1447266/1460514.c</a></td><td class='right'>259</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/gfapi/bug-1447266/bug-1447266.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1447266/bug-1447266.c</a></td><td class='right'>194</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/gfapi/glfs_vol_set_IO_ERR.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/glfs_vol_set_IO_ERR.c</a></td><td class='right'>260</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/glusterd/bug-824753-file-locker.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/glusterd/bug-824753-file-locker.c</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/glusterfs-server/bug-905864.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/glusterfs-server/bug-905864.c</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/glusterfs/getlk_owner.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/glusterfs/getlk_owner.c</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/io-cache/bug-858242.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/io-cache/bug-858242.c</a></td><td class='right'>113</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/io-cache/bug-read-hang.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/io-cache/bug-read-hang.c</a></td><td class='right'>200</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/nfs/bug-1210338.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/nfs/bug-1210338.c</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/posix/bug-1175711.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/posix/bug-1175711.c</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c</a></td><td class='right'>160</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/protocol/bug-808400-fcntl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/protocol/bug-808400-fcntl.c</a></td><td class='right'>191</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/protocol/bug-808400-flock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/protocol/bug-808400-flock.c</a></td><td class='right'>124</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/quick-read/bz1523599/test_bz1523599.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/quick-read/bz1523599/test_bz1523599.c</a></td><td class='right'>322</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/readdir-ahead/bug-1390050.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/readdir-ahead/bug-1390050.c</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/replicate/bug-1250170-fsync.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/replicate/bug-1250170-fsync.c</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/shard/bug-shard-discard.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/bug-shard-discard.c</a></td><td class='right'>97</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/shard/bug-shard-zerofill.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/bug-shard-zerofill.c</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/shard/shard-append-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/shard-append-test.c</a></td><td class='right'>276</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/shard/shard-fallocate.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/shard-fallocate.c</a></td><td class='right'>151</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/write-behind/bug-1058663.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/write-behind/bug-1058663.c</a></td><td class='right'>158</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/bugs/write-behind/bug-1279730.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/write-behind/bug-1279730.c</a></td><td class='right'>232</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/encryption/frag.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/encryption/frag.c</a></td><td class='right'>478</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/features/glfs-lease.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/features/glfs-lease.c</a></td><td class='right'>970</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.1%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 95.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/features/mandatory-lock-forced.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/features/mandatory-lock-forced.c</a></td><td class='right'>249</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/utils/arequal-checksum.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/utils/arequal-checksum.c</a></td><td class='right'>876</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tests/utils/changelog/get-history.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/utils/changelog/get-history.c</a></td><td class='right'>70</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tools/gfind_missing_files/gcrawler.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tools/gfind_missing_files/gcrawler.c</a></td><td class='right'>780</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/tools/setgfid2path/src/main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tools/setgfid2path/src/main.c</a></td><td class='right'>202</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-common.c</a></td><td class='right'>10685</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 22.3%;'/><td class='rem' style='width: 23.0%;'/><td class='none' style='width: 54.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-dir-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-dir-read.c</a></td><td class='right'>493</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-dir-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-dir-write.c</a></td><td class='right'>2270</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.7%;'/><td class='rem' style='width: 5.0%;'/><td class='none' style='width: 90.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-inode-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-inode-read.c</a></td><td class='right'>2873</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.9%;'/><td class='rem' style='width: 6.3%;'/><td class='none' style='width: 87.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-inode-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-inode-write.c</a></td><td class='right'>3534</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.3%;'/><td class='rem' style='width: 7.7%;'/><td class='none' style='width: 85.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-lk-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-lk-common.c</a></td><td class='right'>1683</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-open.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-open.c</a></td><td class='right'>526</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-read-txn.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-read-txn.c</a></td><td class='right'>752</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-self-heal-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-common.c</a></td><td class='right'>4108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.7%;'/><td class='rem' style='width: 8.8%;'/><td class='none' style='width: 82.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-self-heal-data.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-data.c</a></td><td class='right'>1469</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.0%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 93.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-self-heal-entry.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-entry.c</a></td><td class='right'>1902</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.0%;'/><td class='rem' style='width: 4.1%;'/><td class='none' style='width: 91.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-self-heal-metadata.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-metadata.c</a></td><td class='right'>820</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-self-heal-name.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-name.c</a></td><td class='right'>1091</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.3%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-self-heald.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heald.c</a></td><td class='right'>2151</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.5%;'/><td class='rem' style='width: 4.7%;'/><td class='none' style='width: 90.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr-transaction.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-transaction.c</a></td><td class='right'>3887</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.1%;'/><td class='rem' style='width: 8.4%;'/><td class='none' style='width: 83.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/afr/src/afr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr.c</a></td><td class='right'>2045</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.2%;'/><td class='rem' style='width: 4.5%;'/><td class='none' style='width: 91.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-common.c</a></td><td class='right'>18101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 36.9%;'/><td class='rem' style='width: 39.9%;'/><td class='none' style='width: 23.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-diskusage.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-diskusage.c</a></td><td class='right'>853</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-hashfn.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-hashfn.c</a></td><td class='right'>142</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-helper.c</a></td><td class='right'>3382</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.0%;'/><td class='rem' style='width: 7.4%;'/><td class='none' style='width: 85.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-inode-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-inode-read.c</a></td><td class='right'>2453</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.0%;'/><td class='rem' style='width: 5.4%;'/><td class='none' style='width: 89.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-inode-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-inode-write.c</a></td><td class='right'>2316</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.7%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 90.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-layout.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-layout.c</a></td><td class='right'>1275</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 94.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-linkfile.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-linkfile.c</a></td><td class='right'>515</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-lock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-lock.c</a></td><td class='right'>2141</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.6%;'/><td class='rem' style='width: 4.5%;'/><td class='none' style='width: 90.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-rebalance.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-rebalance.c</a></td><td class='right'>8900</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 18.5%;'/><td class='rem' style='width: 19.3%;'/><td class='none' style='width: 62.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-rename.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-rename.c</a></td><td class='right'>3322</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.8%;'/><td class='rem' style='width: 7.3%;'/><td class='none' style='width: 85.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-selfheal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-selfheal.c</a></td><td class='right'>4568</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.5%;'/><td class='rem' style='width: 9.9%;'/><td class='none' style='width: 80.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht-shared.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-shared.c</a></td><td class='right'>1999</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.2%;'/><td class='rem' style='width: 4.3%;'/><td class='none' style='width: 91.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/dht.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht.c</a></td><td class='right'>118</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/nufa.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/nufa.c</a></td><td class='right'>1091</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/switch.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/switch.c</a></td><td class='right'>1477</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.0%;'/><td class='rem' style='width: 3.3%;'/><td class='none' style='width: 93.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/tier-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/tier-common.c</a></td><td class='right'>1988</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.1%;'/><td class='rem' style='width: 4.3%;'/><td class='none' style='width: 91.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/tier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/tier.c</a></td><td class='right'>5206</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.5%;'/><td class='rem' style='width: 11.6%;'/><td class='none' style='width: 77.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/unittest/dht_layout_mock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/unittest/dht_layout_mock.c</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/dht/src/unittest/dht_layout_unittest.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/unittest/dht_layout_unittest.c</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-code-avx.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-avx.c</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-code-c.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-c.c</a></td><td class='right'>902</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-code-intel.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-intel.c</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-code-sse.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-sse.c</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-code-x64.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-x64.c</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-code.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code.c</a></td><td class='right'>391</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-combine.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-combine.c</a></td><td class='right'>495</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-common.c</a></td><td class='right'>1785</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.8%;'/><td class='none' style='width: 92.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-data.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-data.c</a></td><td class='right'>186</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-dir-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-dir-read.c</a></td><td class='right'>339</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-dir-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-dir-write.c</a></td><td class='right'>607</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-generic.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-generic.c</a></td><td class='right'>805</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-gf8.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-gf8.c</a></td><td class='right'>10679</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 22.5%;'/><td class='rem' style='width: 22.8%;'/><td class='none' style='width: 54.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-heal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-heal.c</a></td><td class='right'>4909</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.4%;'/><td class='rem' style='width: 10.5%;'/><td class='none' style='width: 79.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-heald.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-heald.c</a></td><td class='right'>814</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-helpers.c</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-inode-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-inode-read.c</a></td><td class='right'>1068</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.1%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 95.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-inode-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-inode-write.c</a></td><td class='right'>1740</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.6%;'/><td class='rem' style='width: 3.8%;'/><td class='none' style='width: 92.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-locks.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-locks.c</a></td><td class='right'>612</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec-method.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-method.c</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/ec/src/ec.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec.c</a></td><td class='right'>1880</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.0%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 92.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/stripe/src/stripe-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/stripe/src/stripe-helpers.c</a></td><td class='right'>1043</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/cluster/stripe/src/stripe.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/stripe/src/stripe.c</a></td><td class='right'>9256</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 19.3%;'/><td class='rem' style='width: 20.0%;'/><td class='none' style='width: 60.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/debug/delay-gen/src/delay-gen.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/delay-gen/src/delay-gen.c</a></td><td class='right'>858</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 96.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/debug/error-gen/src/error-gen.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/error-gen/src/error-gen.c</a></td><td class='right'>2534</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.2%;'/><td class='rem' style='width: 5.5%;'/><td class='none' style='width: 89.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/debug/io-stats/src/io-stats.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/io-stats/src/io-stats.c</a></td><td class='right'>6842</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 14.0%;'/><td class='rem' style='width: 15.1%;'/><td class='none' style='width: 71.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/debug/sink/src/sink.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/sink/src/sink.c</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/debug/trace/src/trace.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/trace/src/trace.c</a></td><td class='right'>5447</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 11.9%;'/><td class='rem' style='width: 11.2%;'/><td class='none' style='width: 76.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/encryption/crypt/src/atom.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/atom.c</a></td><td class='right'>1210</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 94.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/encryption/crypt/src/crypt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/crypt.c</a></td><td class='right'>7571</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 14.8%;'/><td class='rem' style='width: 17.4%;'/><td class='none' style='width: 67.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/encryption/crypt/src/data.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/data.c</a></td><td class='right'>1131</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.3%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 95.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/encryption/crypt/src/keys.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/keys.c</a></td><td class='right'>368</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/encryption/crypt/src/metadata.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/metadata.c</a></td><td class='right'>875</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/encryption/rot-13/src/rot-13.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/rot-13/src/rot-13.c</a></td><td class='right'>230</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/dht2/dht2-client/src/dht2-client-main.c</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/dht2/dht2-server/src/dht2-server-main.c</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/fdl/src/dump-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/dump-tmpl.c</a></td><td class='right'>223</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/fdl/src/fdl-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/fdl-tmpl.c</a></td><td class='right'>788</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/fdl/src/logdump.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/logdump.c</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/fdl/src/recon-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/recon-tmpl.c</a></td><td class='right'>423</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/fdl/src/recon.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/recon.c</a></td><td class='right'>120</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/jbr-client/src/fop-template.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-client/src/fop-template.c</a></td><td class='right'>171</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/jbr-client/src/jbrc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-client/src/jbrc.c</a></td><td class='right'>373</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/jbr-server/src/all-templates.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-server/src/all-templates.c</a></td><td class='right'>824</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/jbr-server/src/jbr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-server/src/jbr.c</a></td><td class='right'>2739</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.6%;'/><td class='rem' style='width: 6.0%;'/><td class='none' style='width: 88.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/posix2/ds/src/posix2-ds-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/posix2/ds/src/posix2-ds-main.c</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/experimental/posix2/mds/src/posix2-mds-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/posix2/mds/src/posix2-mds-main.c</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/arbiter/src/arbiter.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/arbiter/src/arbiter.c</a></td><td class='right'>514</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/barrier/src/barrier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/barrier/src/barrier.c</a></td><td class='right'>1069</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.3%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot-scrub.c</a></td><td class='right'>3171</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.8%;'/><td class='rem' style='width: 6.7%;'/><td class='none' style='width: 86.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/bit-rot/src/bitd/bit-rot-ssm.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot-ssm.c</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/bit-rot/src/bitd/bit-rot.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot.c</a></td><td class='right'>3282</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.0%;'/><td class='rem' style='width: 6.9%;'/><td class='none' style='width: 86.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c</a></td><td class='right'>1202</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 94.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/bit-rot/src/stub/bit-rot-stub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/stub/bit-rot-stub.c</a></td><td class='right'>5023</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.5%;'/><td class='rem' style='width: 10.8%;'/><td class='none' style='width: 78.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/examples/c/get-changes-multi.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/examples/c/get-changes-multi.c</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/examples/c/get-changes.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/examples/c/get-changes.c</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/examples/c/get-history.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/examples/c/get-history.c</a></td><td class='right'>148</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-changelog-api.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-api.c</a></td><td class='right'>305</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-changelog-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-helpers.c</a></td><td class='right'>256</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-changelog-journal-handler.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-journal-handler.c</a></td><td class='right'>1635</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.4%;'/><td class='rem' style='width: 3.5%;'/><td class='none' style='width: 93.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-changelog-reborp.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-reborp.c</a></td><td class='right'>581</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-changelog-rpc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-rpc.c</a></td><td class='right'>90</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-changelog.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog.c</a></td><td class='right'>859</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/lib/src/gf-history-changelog.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-history-changelog.c</a></td><td class='right'>1551</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.2%;'/><td class='rem' style='width: 3.4%;'/><td class='none' style='width: 93.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-barrier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-barrier.c</a></td><td class='right'>140</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-encoders.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-encoders.c</a></td><td class='right'>298</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-ev-handle.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-ev-handle.c</a></td><td class='right'>570</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-helpers.c</a></td><td class='right'>2987</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.2%;'/><td class='rem' style='width: 6.5%;'/><td class='none' style='width: 87.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-rpc-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-rpc-common.c</a></td><td class='right'>525</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-rpc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-rpc.c</a></td><td class='right'>548</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog-rt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-rt.c</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changelog/src/changelog.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog.c</a></td><td class='right'>4631</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.5%;'/><td class='rem' style='width: 10.1%;'/><td class='none' style='width: 80.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changetimerecorder/src/changetimerecorder.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changetimerecorder/src/changetimerecorder.c</a></td><td class='right'>3705</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.4%;'/><td class='rem' style='width: 8.3%;'/><td class='none' style='width: 84.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changetimerecorder/src/ctr-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changetimerecorder/src/ctr-helper.c</a></td><td class='right'>450</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/changetimerecorder/src/ctr-xlator-ctx.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changetimerecorder/src/ctr-xlator-ctx.c</a></td><td class='right'>557</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/cloudsync/src/cloudsync-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/cloudsync/src/cloudsync-common.c</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c</a></td><td class='right'>896</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.9%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/cloudsync/src/cloudsync.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/cloudsync/src/cloudsync.c</a></td><td class='right'>2460</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.1%;'/><td class='rem' style='width: 5.4%;'/><td class='none' style='width: 89.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/compress/src/cdc-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/compress/src/cdc-helper.c</a></td><td class='right'>756</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/compress/src/cdc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/compress/src/cdc.c</a></td><td class='right'>557</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/gfid-access/src/gfid-access.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/gfid-access/src/gfid-access.c</a></td><td class='right'>2135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.5%;'/><td class='rem' style='width: 4.6%;'/><td class='none' style='width: 90.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/glupy/src/glupy.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/glupy/src/glupy.c</a></td><td class='right'>2987</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.1%;'/><td class='rem' style='width: 6.5%;'/><td class='none' style='width: 87.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/index/src/index.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/index/src/index.c</a></td><td class='right'>4050</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.6%;'/><td class='rem' style='width: 8.6%;'/><td class='none' style='width: 82.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/leases/src/leases-internal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/leases/src/leases-internal.c</a></td><td class='right'>2013</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.3%;'/><td class='rem' style='width: 4.3%;'/><td class='none' style='width: 91.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/leases/src/leases.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/leases/src/leases.c</a></td><td class='right'>1526</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.1%;'/><td class='rem' style='width: 3.4%;'/><td class='none' style='width: 93.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/src/clear.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/clear.c</a></td><td class='right'>701</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/src/common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/common.c</a></td><td class='right'>1437</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.0%;'/><td class='rem' style='width: 3.1%;'/><td class='none' style='width: 93.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/src/entrylk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/entrylk.c</a></td><td class='right'>1627</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.4%;'/><td class='rem' style='width: 3.5%;'/><td class='none' style='width: 93.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/src/inodelk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/inodelk.c</a></td><td class='right'>1669</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 3.6%;'/><td class='none' style='width: 92.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/src/posix.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/posix.c</a></td><td class='right'>6649</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 13.8%;'/><td class='rem' style='width: 14.4%;'/><td class='none' style='width: 71.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/src/reservelk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/reservelk.c</a></td><td class='right'>555</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/locks/tests/unit-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/tests/unit-test.c</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/marker/src/marker-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker-common.c</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/marker/src/marker-quota-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker-quota-helper.c</a></td><td class='right'>651</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/marker/src/marker-quota.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker-quota.c</a></td><td class='right'>3491</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.6%;'/><td class='rem' style='width: 7.2%;'/><td class='none' style='width: 85.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/marker/src/marker.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker.c</a></td><td class='right'>4781</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.2%;'/><td class='rem' style='width: 10.1%;'/><td class='none' style='width: 79.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/namespace/src/namespace.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/namespace/src/namespace.c</a></td><td class='right'>1784</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.9%;'/><td class='none' style='width: 92.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/quiesce/src/quiesce.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/quiesce/src/quiesce.c</a></td><td class='right'>3506</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.9%;'/><td class='rem' style='width: 8.0%;'/><td class='none' style='width: 85.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/quota/src/quota-enforcer-client.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/quota/src/quota-enforcer-client.c</a></td><td class='right'>702</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/quota/src/quota.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/quota/src/quota.c</a></td><td class='right'>8233</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 17.2%;'/><td class='rem' style='width: 17.8%;'/><td class='none' style='width: 65.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/quota/src/quotad-aggregator.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/quota/src/quotad-aggregator.c</a></td><td class='right'>696</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/quota/src/quotad-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/quota/src/quotad-helpers.c</a></td><td class='right'>114</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/quota/src/quotad.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/quota/src/quotad.c</a></td><td class='right'>316</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/read-only/src/read-only-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/read-only/src/read-only-common.c</a></td><td class='right'>555</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/read-only/src/read-only.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/read-only/src/read-only.c</a></td><td class='right'>167</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/read-only/src/worm-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/read-only/src/worm-helper.c</a></td><td class='right'>604</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/read-only/src/worm.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/read-only/src/worm.c</a></td><td class='right'>1069</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 95.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/sdfs/src/sdfs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/sdfs/src/sdfs.c</a></td><td class='right'>2188</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.5%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 90.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/selinux/src/selinux.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/selinux/src/selinux.c</a></td><td class='right'>407</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/shard/src/shard.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/shard/src/shard.c</a></td><td class='right'>10962</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 23.1%;'/><td class='rem' style='width: 23.4%;'/><td class='none' style='width: 53.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/snapview-client/src/snapview-client.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/snapview-client/src/snapview-client.c</a></td><td class='right'>3892</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.3%;'/><td class='rem' style='width: 8.2%;'/><td class='none' style='width: 83.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/snapview-server/src/snapview-server-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/snapview-server/src/snapview-server-helpers.c</a></td><td class='right'>869</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.9%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/snapview-server/src/snapview-server-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/snapview-server/src/snapview-server-mgmt.c</a></td><td class='right'>817</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/snapview-server/src/snapview-server.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/snapview-server/src/snapview-server.c</a></td><td class='right'>4240</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.2%;'/><td class='rem' style='width: 8.8%;'/><td class='none' style='width: 82.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/thin-arbiter/src/thin-arbiter.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/thin-arbiter/src/thin-arbiter.c</a></td><td class='right'>433</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/trash/src/trash.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/trash/src/trash.c</a></td><td class='right'>4338</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.0%;'/><td class='rem' style='width: 9.4%;'/><td class='none' style='width: 81.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/upcall/src/upcall-internal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/upcall/src/upcall-internal.c</a></td><td class='right'>987</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 95.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/upcall/src/upcall.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/upcall/src/upcall.c</a></td><td class='right'>3205</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.6%;'/><td class='rem' style='width: 7.0%;'/><td class='none' style='width: 86.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/utime/src/utime-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/utime/src/utime-helpers.c</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/features/utime/src/utime.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/utime/src/utime.c</a></td><td class='right'>198</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/lib/src/libxlator.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/lib/src/libxlator.c</a></td><td class='right'>791</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/active-link.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/active-link.c</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/cmdline-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/cmdline-file.c</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/frames-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/frames-file.c</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/graph-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/graph-dir.c</a></td><td class='right'>125</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/graphs-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/graphs-dir.c</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/history-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/history-file.c</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/logfile-link.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/logfile-link.c</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/logging-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/logging-dir.c</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/loglevel-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/loglevel-file.c</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/mallinfo-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/mallinfo-file.c</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/measure-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/measure-file.c</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/meminfo-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/meminfo-file.c</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/meta-defaults.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/meta-defaults.c</a></td><td class='right'>771</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/meta-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/meta-helpers.c</a></td><td class='right'>425</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/meta.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/meta.c</a></td><td class='right'>279</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/name-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/name-file.c</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/option-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/option-file.c</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/options-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/options-dir.c</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/private-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/private-file.c</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/process_uuid-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/process_uuid-file.c</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/profile-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/profile-file.c</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/root-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/root-dir.c</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/subvolume-link.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/subvolume-link.c</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/subvolumes-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/subvolumes-dir.c</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/top-link.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/top-link.c</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/type-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/type-file.c</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/version-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/version-file.c</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/view-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/view-dir.c</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/volfile-file.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/volfile-file.c</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/meta/src/xlator-dir.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/meta/src/xlator-dir.c</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-bitd-svc.c</a></td><td class='right'>283</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-bitrot.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-bitrot.c</a></td><td class='right'>1209</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 94.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-brick-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-brick-ops.c</a></td><td class='right'>5931</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 12.5%;'/><td class='rem' style='width: 12.7%;'/><td class='none' style='width: 74.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-conn-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-conn-helper.c</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-conn-mgmt.c</a></td><td class='right'>169</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-geo-rep.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-geo-rep.c</a></td><td class='right'>11556</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 24.5%;'/><td class='rem' style='width: 24.6%;'/><td class='none' style='width: 51.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc-helper.c</a></td><td class='right'>288</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-gfproxyd-svc.c</a></td><td class='right'>770</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-handler.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-handler.c</a></td><td class='right'>11146</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 23.8%;'/><td class='rem' style='width: 23.5%;'/><td class='none' style='width: 52.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-handshake.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-handshake.c</a></td><td class='right'>3973</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.3%;'/><td class='rem' style='width: 8.5%;'/><td class='none' style='width: 83.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-hooks.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-hooks.c</a></td><td class='right'>904</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.9%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-locks.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-locks.c</a></td><td class='right'>1389</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.8%;'/><td class='rem' style='width: 3.1%;'/><td class='none' style='width: 94.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-log-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-log-ops.c</a></td><td class='right'>450</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-mgmt-handler.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-mgmt-handler.c</a></td><td class='right'>1647</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.4%;'/><td class='rem' style='width: 3.6%;'/><td class='none' style='width: 93.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-mgmt.c</a></td><td class='right'>4550</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.4%;'/><td class='rem' style='width: 9.9%;'/><td class='none' style='width: 80.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-mountbroker.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-mountbroker.c</a></td><td class='right'>1224</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 94.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-nfs-svc.c</a></td><td class='right'>317</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-op-sm.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-op-sm.c</a></td><td class='right'>14005</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 29.0%;'/><td class='rem' style='width: 30.4%;'/><td class='none' style='width: 40.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-peer-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-peer-utils.c</a></td><td class='right'>1488</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.1%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 93.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-pmap.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-pmap.c</a></td><td class='right'>953</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 96.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-proc-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-proc-mgmt.c</a></td><td class='right'>180</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-quota.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-quota.c</a></td><td class='right'>3671</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.9%;'/><td class='rem' style='width: 7.7%;'/><td class='none' style='width: 84.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-quotad-svc.c</a></td><td class='right'>311</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-rebalance.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-rebalance.c</a></td><td class='right'>1862</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.9%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 92.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-replace-brick.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-replace-brick.c</a></td><td class='right'>1195</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 94.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-reset-brick.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-reset-brick.c</a></td><td class='right'>653</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-rpc-ops.c</a></td><td class='right'>4101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.5%;'/><td class='rem' style='width: 8.9%;'/><td class='none' style='width: 82.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-scrub-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-scrub-svc.c</a></td><td class='right'>280</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-server-quorum.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-server-quorum.c</a></td><td class='right'>732</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-shd-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-shd-svc.c</a></td><td class='right'>379</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-sm.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-sm.c</a></td><td class='right'>2515</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.4%;'/><td class='rem' style='width: 5.3%;'/><td class='none' style='width: 89.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-snapd-svc-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-snapd-svc-helper.c</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-snapd-svc.c</a></td><td class='right'>749</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c</a></td><td class='right'>6987</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 14.6%;'/><td class='rem' style='width: 15.1%;'/><td class='none' style='width: 70.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-snapshot.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-snapshot.c</a></td><td class='right'>17855</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 37.0%;'/><td class='rem' style='width: 38.7%;'/><td class='none' style='width: 24.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-statedump.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-statedump.c</a></td><td class='right'>388</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-store.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-store.c</a></td><td class='right'>8385</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 17.7%;'/><td class='rem' style='width: 17.9%;'/><td class='none' style='width: 64.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-svc-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-svc-helper.c</a></td><td class='right'>408</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c</a></td><td class='right'>523</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-syncop.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-syncop.c</a></td><td class='right'>3299</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.9%;'/><td class='rem' style='width: 7.1%;'/><td class='none' style='width: 86.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-tier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-tier.c</a></td><td class='right'>2377</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 5.0%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 89.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-tierd-svc-helper.c</a></td><td class='right'>284</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-tierd-svc.c</a></td><td class='right'>815</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.7%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-utils.c</a></td><td class='right'>23563</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 49.1%;'/><td class='rem' style='width: 50.9%;'/><td class='none' style='width: 0.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-volgen.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-volgen.c</a></td><td class='right'>10876</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 22.6%;'/><td class='rem' style='width: 23.5%;'/><td class='none' style='width: 53.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-volume-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-volume-ops.c</a></td><td class='right'>5688</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 12.1%;'/><td class='rem' style='width: 12.0%;'/><td class='none' style='width: 75.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd-volume-set.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd-volume-set.c</a></td><td class='right'>6986</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 14.4%;'/><td class='rem' style='width: 15.2%;'/><td class='none' style='width: 70.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mgmt/glusterd/src/glusterd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mgmt/glusterd/src/glusterd.c</a></td><td class='right'>3714</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.8%;'/><td class='rem' style='width: 7.9%;'/><td class='none' style='width: 84.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mount/fuse/src/fuse-bridge.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mount/fuse/src/fuse-bridge.c</a></td><td class='right'>9339</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 19.5%;'/><td class='rem' style='width: 20.1%;'/><td class='none' style='width: 60.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mount/fuse/src/fuse-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mount/fuse/src/fuse-helpers.c</a></td><td class='right'>1065</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/mount/fuse/src/fuse-resolve.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/mount/fuse/src/fuse-resolve.c</a></td><td class='right'>1036</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.1%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/acl3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/acl3.c</a></td><td class='right'>1560</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.2%;'/><td class='rem' style='width: 3.4%;'/><td class='none' style='width: 93.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/auth-cache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/auth-cache.c</a></td><td class='right'>543</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/exports.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/exports.c</a></td><td class='right'>1609</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.4%;'/><td class='rem' style='width: 3.4%;'/><td class='none' style='width: 93.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/mount3-auth.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/mount3-auth.c</a></td><td class='right'>680</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/mount3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/mount3.c</a></td><td class='right'>6426</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 13.5%;'/><td class='rem' style='width: 13.7%;'/><td class='none' style='width: 72.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/mount3udp_svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/mount3udp_svc.c</a></td><td class='right'>344</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/netgroups.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/netgroups.c</a></td><td class='right'>1018</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 95.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs-common.c</a></td><td class='right'>643</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs-fops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs-fops.c</a></td><td class='right'>2349</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.8%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 90.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs-generics.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs-generics.c</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs-inodes.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs-inodes.c</a></td><td class='right'>764</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs.c</a></td><td class='right'>3417</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.0%;'/><td class='rem' style='width: 7.5%;'/><td class='none' style='width: 85.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs3-fh.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs3-fh.c</a></td><td class='right'>206</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs3-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs3-helpers.c</a></td><td class='right'>5055</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.5%;'/><td class='rem' style='width: 11.0%;'/><td class='none' style='width: 78.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nfs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nfs3.c</a></td><td class='right'>9208</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 19.2%;'/><td class='rem' style='width: 19.9%;'/><td class='none' style='width: 60.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nlm4.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nlm4.c</a></td><td class='right'>4315</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.1%;'/><td class='rem' style='width: 9.2%;'/><td class='none' style='width: 81.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/nfs/server/src/nlmcbk_svc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/nfs/server/src/nlmcbk_svc.c</a></td><td class='right'>157</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/decompounder/src/decompounder.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/decompounder/src/decompounder.c</a></td><td class='right'>1182</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 95.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/io-cache/src/io-cache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/io-cache/src/io-cache.c</a></td><td class='right'>3023</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.3%;'/><td class='rem' style='width: 6.5%;'/><td class='none' style='width: 87.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/io-cache/src/ioc-inode.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/io-cache/src/ioc-inode.c</a></td><td class='right'>300</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/io-cache/src/page.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/io-cache/src/page.c</a></td><td class='right'>1436</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.0%;'/><td class='rem' style='width: 3.1%;'/><td class='none' style='width: 93.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/io-threads/src/io-threads.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/io-threads/src/io-threads.c</a></td><td class='right'>1968</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.1%;'/><td class='rem' style='width: 4.2%;'/><td class='none' style='width: 91.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/md-cache/src/md-cache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/md-cache/src/md-cache.c</a></td><td class='right'>5261</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.9%;'/><td class='rem' style='width: 11.4%;'/><td class='none' style='width: 77.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/nl-cache/src/nl-cache-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/nl-cache/src/nl-cache-helper.c</a></td><td class='right'>1725</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.6%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 92.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/nl-cache/src/nl-cache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/nl-cache/src/nl-cache.c</a></td><td class='right'>1263</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 94.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/open-behind/src/open-behind.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/open-behind/src/open-behind.c</a></td><td class='right'>1788</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.9%;'/><td class='none' style='width: 92.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/quick-read/src/quick-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/quick-read/src/quick-read.c</a></td><td class='right'>2372</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.9%;'/><td class='rem' style='width: 5.2%;'/><td class='none' style='width: 89.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/read-ahead/src/page.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/read-ahead/src/page.c</a></td><td class='right'>857</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 96.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/read-ahead/src/read-ahead.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/read-ahead/src/read-ahead.c</a></td><td class='right'>1840</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.8%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 92.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/readdir-ahead/src/readdir-ahead.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/readdir-ahead/src/readdir-ahead.c</a></td><td class='right'>1793</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.8%;'/><td class='rem' style='width: 3.8%;'/><td class='none' style='width: 92.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/symlink-cache/src/symlink-cache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/symlink-cache/src/symlink-cache.c</a></td><td class='right'>508</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/performance/write-behind/src/write-behind.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/performance/write-behind/src/write-behind.c</a></td><td class='right'>4742</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.9%;'/><td class='rem' style='width: 10.2%;'/><td class='none' style='width: 79.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/playground/template/src/template.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/playground/template/src/template.c</a></td><td class='right'>227</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/auth/addr/src/addr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/auth/addr/src/addr.c</a></td><td class='right'>520</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/auth/login/src/login.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/auth/login/src/login.c</a></td><td class='right'>351</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-callback.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-callback.c</a></td><td class='right'>447</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-common.c</a></td><td class='right'>4530</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.4%;'/><td class='rem' style='width: 9.8%;'/><td class='none' style='width: 80.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-handshake.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-handshake.c</a></td><td class='right'>2809</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.0%;'/><td class='rem' style='width: 5.9%;'/><td class='none' style='width: 88.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-helpers.c</a></td><td class='right'>5463</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 11.0%;'/><td class='rem' style='width: 12.1%;'/><td class='none' style='width: 76.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-lk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-lk.c</a></td><td class='right'>701</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-rpc-fops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-rpc-fops.c</a></td><td class='right'>10503</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 22.5%;'/><td class='rem' style='width: 22.1%;'/><td class='none' style='width: 55.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client-rpc-fops_v2.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client-rpc-fops_v2.c</a></td><td class='right'>10469</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 22.5%;'/><td class='rem' style='width: 21.9%;'/><td class='none' style='width: 55.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/client/src/client.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/client/src/client.c</a></td><td class='right'>4377</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.3%;'/><td class='rem' style='width: 9.3%;'/><td class='none' style='width: 81.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/authenticate.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/authenticate.c</a></td><td class='right'>327</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server-common.c</a></td><td class='right'>1166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 95.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server-handshake.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server-handshake.c</a></td><td class='right'>1730</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.6%;'/><td class='none' style='width: 92.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server-helpers.c</a></td><td class='right'>9811</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 19.7%;'/><td class='rem' style='width: 21.9%;'/><td class='none' style='width: 58.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server-resolve.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server-resolve.c</a></td><td class='right'>955</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 95.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server-rpc-fops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server-rpc-fops.c</a></td><td class='right'>8890</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 19.0%;'/><td class='rem' style='width: 18.7%;'/><td class='none' style='width: 62.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server-rpc-fops_v2.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server-rpc-fops_v2.c</a></td><td class='right'>8434</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 18.2%;'/><td class='rem' style='width: 17.5%;'/><td class='none' style='width: 64.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/protocol/server/src/server.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/protocol/server/src/server.c</a></td><td class='right'>3086</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.4%;'/><td class='rem' style='width: 6.7%;'/><td class='none' style='width: 86.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/bd/src/bd-aio.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/bd/src/bd-aio.c</a></td><td class='right'>835</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/bd/src/bd-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/bd/src/bd-helper.c</a></td><td class='right'>1685</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 3.5%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/bd/src/bd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/bd/src/bd.c</a></td><td class='right'>3593</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.6%;'/><td class='rem' style='width: 7.7%;'/><td class='none' style='width: 84.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-aio.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-aio.c</a></td><td class='right'>970</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 95.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-common.c</a></td><td class='right'>2208</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.5%;'/><td class='rem' style='width: 4.9%;'/><td class='none' style='width: 90.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-entry-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-entry-ops.c</a></td><td class='right'>3943</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.3%;'/><td class='rem' style='width: 8.4%;'/><td class='none' style='width: 83.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-gfid-path.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-gfid-path.c</a></td><td class='right'>501</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-handle.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-handle.c</a></td><td class='right'>1607</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.3%;'/><td class='rem' style='width: 3.5%;'/><td class='none' style='width: 93.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-helpers.c</a></td><td class='right'>5180</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 10.9%;'/><td class='rem' style='width: 11.1%;'/><td class='none' style='width: 78.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-inode-fd-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-inode-fd-ops.c</a></td><td class='right'>8575</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 18.2%;'/><td class='rem' style='width: 18.2%;'/><td class='none' style='width: 63.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix-metadata.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix-metadata.c</a></td><td class='right'>1063</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 95.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/storage/posix/src/posix.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/storage/posix/src/posix.c</a></td><td class='right'>118</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/system/posix-acl/src/posix-acl-xattr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/system/posix-acl/src/posix-acl-xattr.c</a></td><td class='right'>229</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit/glusterfs.git/diff/xlators/system/posix-acl/src/posix-acl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/system/posix-acl/src/posix-acl.c</a></td><td class='right'>3373</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.9%;'/><td class='rem' style='width: 7.4%;'/><td class='none' style='width: 85.7%;'/></tr></table></td></tr>
</table><div class='diffstat-summary'>490 files changed, 426792 insertions, 439790 deletions</div><table summary='diff' class='diff'><tr><td><div class='head'>diff --git a/api/examples/glfsxmp.c b/api/examples/glfsxmp.c<br/>index 9bfb1d2a81f..9d96eea1d87 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/examples/glfsxmp.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/examples/glfsxmp.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/examples/glfsxmp.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/examples/glfsxmp.c</a></div><div class='hunk'>@@ -6,1593 +6,1633 @@</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> #include &lt;time.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-test_dirops (glfs_t *fs)</div><div class='add'>+test_dirops(glfs_t *fs)</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        char buf[512];</div><div class='del'>-        struct dirent *entry = NULL;</div><div class='del'>-</div><div class='del'>-        fd = glfs_opendir (fs, "/");</div><div class='del'>-        if (!fd) {</div><div class='del'>-                fprintf (stderr, "/: %s\n", strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fprintf (stderr, "Entries:\n");</div><div class='del'>-        while (glfs_readdir_r (fd, (struct dirent *)buf, &amp;entry), entry) {</div><div class='del'>-                fprintf (stderr, "%s: %lu\n", entry-&gt;d_name, glfs_telldir (fd));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_closedir (fd);</div><div class='del'>-        return 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char buf[512];</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+</div><div class='add'>+    fd = glfs_opendir(fs, "/");</div><div class='add'>+    if (!fd) {</div><div class='add'>+        fprintf(stderr, "/: %s\n", strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fprintf(stderr, "Entries:\n");</div><div class='add'>+    while (glfs_readdir_r(fd, (struct dirent *)buf, &amp;entry), entry) {</div><div class='add'>+        fprintf(stderr, "%s: %lu\n", entry-&gt;d_name, glfs_telldir(fd));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_closedir(fd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-test_xattr (glfs_t *fs)</div><div class='add'>+test_xattr(glfs_t *fs)</div><div class='ctx'> {</div><div class='del'>-        char *filename = "/filename2";</div><div class='del'>-        char buf[512];</div><div class='del'>-        char *ptr;</div><div class='del'>-        int ret;</div><div class='del'>-</div><div class='del'>-        ret = glfs_setxattr (fs, filename, "user.testkey", "testval", 8, 0);</div><div class='del'>-        fprintf (stderr, "setxattr(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                 strerror (errno));</div><div class='del'>-</div><div class='del'>-        ret = glfs_setxattr (fs, filename, "user.testkey2", "testval", 8, 0);</div><div class='del'>-        fprintf (stderr, "setxattr(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                 strerror (errno));</div><div class='del'>-</div><div class='del'>-        ret = glfs_listxattr (fs, filename, buf, 512);</div><div class='del'>-        fprintf (stderr, "listxattr(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                 strerror (errno));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        for (ptr = buf; ptr &lt; buf + ret; ptr++) {</div><div class='del'>-                printf ("key=%s\n", ptr);</div><div class='del'>-                ptr += strlen (ptr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_chdir (glfs_t *fs)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *topdir = "/topdir";</div><div class='del'>-        char *linkdir = "/linkdir";</div><div class='del'>-        char *subdir = "./subdir";</div><div class='del'>-        char *respath = NULL;</div><div class='del'>-        char pathbuf[4096];</div><div class='del'>-</div><div class='del'>-        ret = glfs_mkdir (fs, topdir, 0755);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "mkdir(%s): %s\n", topdir, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        respath = glfs_getcwd (fs, pathbuf, 4096);</div><div class='del'>-        fprintf (stdout, "getcwd() = %s\n", respath);</div><div class='del'>-</div><div class='del'>-        ret = glfs_symlink (fs, topdir, linkdir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "symlink(%s, %s): %s\n", topdir, linkdir, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    char *filename = "/filename2";</div><div class='add'>+    char buf[512];</div><div class='add'>+    char *ptr;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_chdir (fs, linkdir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "chdir(%s): %s\n", linkdir, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_setxattr(fs, filename, "user.testkey", "testval", 8, 0);</div><div class='add'>+    fprintf(stderr, "setxattr(%s): %d (%s)\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        respath = glfs_getcwd (fs, pathbuf, 4096);</div><div class='del'>-        fprintf (stdout, "getcwd() = %s\n", respath);</div><div class='add'>+    ret = glfs_setxattr(fs, filename, "user.testkey2", "testval", 8, 0);</div><div class='add'>+    fprintf(stderr, "setxattr(%s): %d (%s)\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        respath = glfs_realpath (fs, subdir, pathbuf);</div><div class='del'>-        if (respath) {</div><div class='del'>-                fprintf (stderr, "realpath(%s) worked unexpectedly: %s\n", subdir, respath);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_listxattr(fs, filename, buf, 512);</div><div class='add'>+    fprintf(stderr, "listxattr(%s): %d (%s)\n", filename, ret, strerror(errno));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_mkdir (fs, subdir, 0755);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "mkdir(%s): %s\n", subdir, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        respath = glfs_realpath (fs, subdir, pathbuf);</div><div class='del'>-        if (!respath) {</div><div class='del'>-                fprintf (stderr, "realpath(%s): %s\n", subdir, strerror (errno));</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "realpath(%s) = %s\n", subdir, respath);</div><div class='del'>-        }</div><div class='add'>+    for (ptr = buf; ptr &lt; buf + ret; ptr++) {</div><div class='add'>+        printf("key=%s\n", ptr);</div><div class='add'>+        ptr += strlen(ptr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_chdir (fs, subdir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "chdir(%s): %s\n", subdir, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        respath = glfs_getcwd (fs, pathbuf, 4096);</div><div class='del'>-        fprintf (stdout, "getcwd() = %s\n", respath);</div><div class='del'>-</div><div class='del'>-        respath = glfs_realpath (fs, "/linkdir/subdir", pathbuf);</div><div class='del'>-        if (!respath) {</div><div class='del'>-                fprintf (stderr, "realpath(/linkdir/subdir): %s\n", strerror (errno));</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "realpath(/linkdir/subdir) = %s\n", respath);</div><div class='del'>-        }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+int</div><div class='add'>+test_chdir(glfs_t *fs)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *topdir = "/topdir";</div><div class='add'>+    char *linkdir = "/linkdir";</div><div class='add'>+    char *subdir = "./subdir";</div><div class='add'>+    char *respath = NULL;</div><div class='add'>+    char pathbuf[4096];</div><div class='add'>+</div><div class='add'>+    ret = glfs_mkdir(fs, topdir, 0755);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "mkdir(%s): %s\n", topdir, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    respath = glfs_getcwd(fs, pathbuf, 4096);</div><div class='add'>+    fprintf(stdout, "getcwd() = %s\n", respath);</div><div class='add'>+</div><div class='add'>+    ret = glfs_symlink(fs, topdir, linkdir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "symlink(%s, %s): %s\n", topdir, linkdir,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_chdir(fs, linkdir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "chdir(%s): %s\n", linkdir, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    respath = glfs_getcwd(fs, pathbuf, 4096);</div><div class='add'>+    fprintf(stdout, "getcwd() = %s\n", respath);</div><div class='add'>+</div><div class='add'>+    respath = glfs_realpath(fs, subdir, pathbuf);</div><div class='add'>+    if (respath) {</div><div class='add'>+        fprintf(stderr, "realpath(%s) worked unexpectedly: %s\n", subdir,</div><div class='add'>+                respath);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_mkdir(fs, subdir, 0755);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "mkdir(%s): %s\n", subdir, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    respath = glfs_realpath(fs, subdir, pathbuf);</div><div class='add'>+    if (!respath) {</div><div class='add'>+        fprintf(stderr, "realpath(%s): %s\n", subdir, strerror(errno));</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "realpath(%s) = %s\n", subdir, respath);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_chdir(fs, subdir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "chdir(%s): %s\n", subdir, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    respath = glfs_getcwd(fs, pathbuf, 4096);</div><div class='add'>+    fprintf(stdout, "getcwd() = %s\n", respath);</div><div class='add'>+</div><div class='add'>+    respath = glfs_realpath(fs, "/linkdir/subdir", pathbuf);</div><div class='add'>+    if (!respath) {</div><div class='add'>+        fprintf(stderr, "realpath(/linkdir/subdir): %s\n", strerror(errno));</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "realpath(/linkdir/subdir) = %s\n", respath);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifdef DEBUG</div><div class='ctx'> static void</div><div class='del'>-peek_stat (struct stat *sb)</div><div class='add'>+peek_stat(struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        printf ("Dumping stat information:\n");</div><div class='del'>-        printf ("File type:                ");</div><div class='del'>-</div><div class='del'>-        switch (sb-&gt;st_mode &amp; S_IFMT) {</div><div class='del'>-                case S_IFBLK:  printf ("block device\n");            break;</div><div class='del'>-                case S_IFCHR:  printf ("character device\n");        break;</div><div class='del'>-                case S_IFDIR:  printf ("directory\n");               break;</div><div class='del'>-                case S_IFIFO:  printf ("FIFO/pipe\n");               break;</div><div class='del'>-                case S_IFLNK:  printf ("symlink\n");                 break;</div><div class='del'>-                case S_IFREG:  printf ("regular file\n");            break;</div><div class='del'>-                case S_IFSOCK: printf ("socket\n");                  break;</div><div class='del'>-                default:       printf ("unknown?\n");                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        printf ("I-node number:            %ld\n", (long) sb-&gt;st_ino);</div><div class='del'>-</div><div class='del'>-        printf ("Mode:                     %lo (octal)\n",</div><div class='del'>-                (unsigned long) sb-&gt;st_mode);</div><div class='del'>-</div><div class='del'>-        printf ("Link count:               %ld\n", (long) sb-&gt;st_nlink);</div><div class='del'>-        printf ("Ownership:                UID=%ld   GID=%ld\n",</div><div class='del'>-                (long) sb-&gt;st_uid, (long) sb-&gt;st_gid);</div><div class='del'>-</div><div class='del'>-        printf ("Preferred I/O block size: %ld bytes\n",</div><div class='del'>-                (long) sb-&gt;st_blksize);</div><div class='del'>-        printf ("File size:                %lld bytes\n",</div><div class='del'>-                (long long) sb-&gt;st_size);</div><div class='del'>-        printf ("Blocks allocated:         %lld\n",</div><div class='del'>-                (long long) sb-&gt;st_blocks);</div><div class='del'>-</div><div class='del'>-        printf ("Last status change:       %s", ctime(&amp;sb-&gt;st_ctime));</div><div class='del'>-        printf ("Last file access:         %s", ctime(&amp;sb-&gt;st_atime));</div><div class='del'>-        printf ("Last file modification:   %s", ctime(&amp;sb-&gt;st_mtime));</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    printf("Dumping stat information:\n");</div><div class='add'>+    printf("File type:                ");</div><div class='add'>+</div><div class='add'>+    switch (sb-&gt;st_mode &amp; S_IFMT) {</div><div class='add'>+        case S_IFBLK:</div><div class='add'>+            printf("block device\n");</div><div class='add'>+            break;</div><div class='add'>+        case S_IFCHR:</div><div class='add'>+            printf("character device\n");</div><div class='add'>+            break;</div><div class='add'>+        case S_IFDIR:</div><div class='add'>+            printf("directory\n");</div><div class='add'>+            break;</div><div class='add'>+        case S_IFIFO:</div><div class='add'>+            printf("FIFO/pipe\n");</div><div class='add'>+            break;</div><div class='add'>+        case S_IFLNK:</div><div class='add'>+            printf("symlink\n");</div><div class='add'>+            break;</div><div class='add'>+        case S_IFREG:</div><div class='add'>+            printf("regular file\n");</div><div class='add'>+            break;</div><div class='add'>+        case S_IFSOCK:</div><div class='add'>+            printf("socket\n");</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            printf("unknown?\n");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("I-node number:            %ld\n", (long)sb-&gt;st_ino);</div><div class='add'>+</div><div class='add'>+    printf("Mode:                     %lo (octal)\n",</div><div class='add'>+           (unsigned long)sb-&gt;st_mode);</div><div class='add'>+</div><div class='add'>+    printf("Link count:               %ld\n", (long)sb-&gt;st_nlink);</div><div class='add'>+    printf("Ownership:                UID=%ld   GID=%ld\n", (long)sb-&gt;st_uid,</div><div class='add'>+           (long)sb-&gt;st_gid);</div><div class='add'>+</div><div class='add'>+    printf("Preferred I/O block size: %ld bytes\n", (long)sb-&gt;st_blksize);</div><div class='add'>+    printf("File size:                %lld bytes\n", (long long)sb-&gt;st_size);</div><div class='add'>+    printf("Blocks allocated:         %lld\n", (long long)sb-&gt;st_blocks);</div><div class='add'>+</div><div class='add'>+    printf("Last status change:       %s", ctime(&amp;sb-&gt;st_ctime));</div><div class='add'>+    printf("Last file access:         %s", ctime(&amp;sb-&gt;st_atime));</div><div class='add'>+    printf("Last file modification:   %s", ctime(&amp;sb-&gt;st_mtime));</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-peek_handle (unsigned char *glid)</div><div class='add'>+peek_handle(unsigned char *glid)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GFAPI_HANDLE_LENGTH; i++)</div><div class='del'>-        {</div><div class='del'>-                printf (":%02x:", glid[i]);</div><div class='del'>-        }</div><div class='del'>-        printf ("\n");</div><div class='add'>+    for (i = 0; i &lt; GFAPI_HANDLE_LENGTH; i++) {</div><div class='add'>+        printf(":%02x:", glid[i]);</div><div class='add'>+    }</div><div class='add'>+    printf("\n");</div><div class='ctx'> }</div><div class='del'>-#else /* DEBUG */</div><div class='add'>+#else  /* DEBUG */</div><div class='ctx'> static void</div><div class='del'>-peek_stat (struct stat *sb)</div><div class='add'>+peek_stat(struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-peek_handle (unsigned char *id)</div><div class='add'>+peek_handle(unsigned char *id)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> #endif /* DEBUG */</div><div class='ctx'> </div><div class='del'>-glfs_t    *fs = NULL;</div><div class='del'>-char      *full_parent_name = "/testdir", *parent_name = "testdir";</div><div class='add'>+glfs_t *fs = NULL;</div><div class='add'>+char *full_parent_name = "/testdir", *parent_name = "testdir";</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-test_h_unlink (void)</div><div class='add'>+test_h_unlink(void)</div><div class='ctx'> {</div><div class='del'>-        char               *my_dir = "unlinkdir";</div><div class='del'>-        char               *my_file = "file.txt";</div><div class='del'>-        char               *my_subdir = "dir1";</div><div class='del'>-        struct glfs_object *parent = NULL, *leaf = NULL, *dir = NULL,</div><div class='del'>-                           *subdir = NULL, *subleaf = NULL;</div><div class='del'>-        struct stat         sb;</div><div class='del'>-        int                 ret;</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_unlink tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        /* Prepare tests */</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dir = glfs_h_mkdir (fs, parent, my_dir, 0644, &amp;sb);</div><div class='del'>-        if (dir == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, dir, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subdir = glfs_h_mkdir (fs, dir, my_subdir, 0644, &amp;sb);</div><div class='del'>-        if (subdir == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_subdir, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subleaf = glfs_h_creat (fs, subdir, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (subleaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, subdir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink non empty directory */</div><div class='del'>-        ret = glfs_h_unlink (fs, dir, my_subdir);</div><div class='del'>-        if ((ret &amp;&amp; errno != ENOTEMPTY) || (ret == 0)) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking %s: it is non empty: %s\n",</div><div class='del'>-                         my_subdir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink regular file */</div><div class='del'>-        ret = glfs_h_unlink (fs, subdir, my_file);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='del'>-                         my_file, subdir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink directory */</div><div class='del'>-        ret = glfs_h_unlink (fs, dir, my_subdir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='del'>-                         my_subdir, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink regular file */</div><div class='del'>-        ret = glfs_h_unlink (fs, dir, my_file);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='del'>-                         my_file, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink non-existent regular file */</div><div class='del'>-        ret = glfs_h_unlink (fs, dir, my_file);</div><div class='del'>-        if ((ret &amp;&amp; errno != ENOENT) || (ret == 0)) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking non-existent %s: invalid errno ,%d, %s\n",</div><div class='del'>-                         my_file, ret, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink non-existent directory */</div><div class='del'>-        ret = glfs_h_unlink (fs, dir, my_subdir);</div><div class='del'>-        if ((ret &amp;&amp; errno != ENOENT) || (ret == 0)) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking non-existent %s:  invalid errno ,%d, %s\n",</div><div class='del'>-                         my_subdir, ret, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* unlink directory */</div><div class='del'>-        ret = glfs_h_unlink (fs, parent, my_dir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_unlink tests: PASSED\n");</div><div class='add'>+    char *my_dir = "unlinkdir";</div><div class='add'>+    char *my_file = "file.txt";</div><div class='add'>+    char *my_subdir = "dir1";</div><div class='add'>+    struct glfs_object *parent = NULL, *leaf = NULL, *dir = NULL,</div><div class='add'>+                       *subdir = NULL, *subleaf = NULL;</div><div class='add'>+    struct stat sb;</div><div class='add'>+    int ret;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_unlink tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    /* Prepare tests */</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dir = glfs_h_mkdir(fs, parent, my_dir, 0644, &amp;sb);</div><div class='add'>+    if (dir == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, dir, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subdir = glfs_h_mkdir(fs, dir, my_subdir, 0644, &amp;sb);</div><div class='add'>+    if (subdir == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_subdir, dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subleaf = glfs_h_creat(fs, subdir, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (subleaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, subdir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink non empty directory */</div><div class='add'>+    ret = glfs_h_unlink(fs, dir, my_subdir);</div><div class='add'>+    if ((ret &amp;&amp; errno != ENOTEMPTY) || (ret == 0)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_unlink: error unlinking %s: it is non empty: %s\n",</div><div class='add'>+                my_subdir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink regular file */</div><div class='add'>+    ret = glfs_h_unlink(fs, subdir, my_file);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='add'>+                my_file, subdir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink directory */</div><div class='add'>+    ret = glfs_h_unlink(fs, dir, my_subdir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='add'>+                my_subdir, dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink regular file */</div><div class='add'>+    ret = glfs_h_unlink(fs, dir, my_file);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='add'>+                my_file, dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink non-existent regular file */</div><div class='add'>+    ret = glfs_h_unlink(fs, dir, my_file);</div><div class='add'>+    if ((ret &amp;&amp; errno != ENOENT) || (ret == 0)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_unlink: error unlinking non-existent %s: invalid errno "</div><div class='add'>+                ",%d, %s\n",</div><div class='add'>+                my_file, ret, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink non-existent directory */</div><div class='add'>+    ret = glfs_h_unlink(fs, dir, my_subdir);</div><div class='add'>+    if ((ret &amp;&amp; errno != ENOENT) || (ret == 0)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_unlink: error unlinking non-existent %s:  invalid "</div><div class='add'>+                "errno ,%d, %s\n",</div><div class='add'>+                my_subdir, ret, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* unlink directory */</div><div class='add'>+    ret = glfs_h_unlink(fs, parent, my_dir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "glfs_h_unlink: error unlinking %s: from (%p),%s\n",</div><div class='add'>+                my_dir, dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_unlink tests: PASSED\n");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dir)</div><div class='del'>-                glfs_h_close (dir);</div><div class='del'>-        if (leaf)</div><div class='del'>-                glfs_h_close (leaf);</div><div class='del'>-        if (subdir)</div><div class='del'>-                glfs_h_close (subdir);</div><div class='del'>-        if (subleaf)</div><div class='del'>-                glfs_h_close (subleaf);</div><div class='del'>-        if (parent)</div><div class='del'>-                glfs_h_close (parent);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (dir)</div><div class='add'>+        glfs_h_close(dir);</div><div class='add'>+    if (leaf)</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+    if (subdir)</div><div class='add'>+        glfs_h_close(subdir);</div><div class='add'>+    if (subleaf)</div><div class='add'>+        glfs_h_close(subleaf);</div><div class='add'>+    if (parent)</div><div class='add'>+        glfs_h_close(parent);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-test_h_getsetattrs (void)</div><div class='add'>+test_h_getsetattrs(void)</div><div class='ctx'> {</div><div class='del'>-        char               *my_dir = "attrdir";</div><div class='del'>-        char               *my_file = "attrfile.txt";</div><div class='del'>-        struct glfs_object *parent = NULL, *leaf = NULL, *dir = NULL;</div><div class='del'>-        struct stat         sb, retsb;</div><div class='del'>-        int                 ret, valid;</div><div class='del'>-        struct timespec     timestamp;</div><div class='del'>-</div><div class='del'>-        printf("glfs_h_getattrs and setattrs tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        /* Prepare tests */</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dir = glfs_h_mkdir (fs, parent, my_dir, 0644, &amp;sb);</div><div class='del'>-        if (dir == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, dir, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_unlink tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_getattrs (fs, dir, &amp;retsb);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_getattrs: error %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;retsb);</div><div class='del'>-        /* TODO: Compare stat information */</div><div class='del'>-</div><div class='del'>-        retsb.st_mode = 00666;</div><div class='del'>-        retsb.st_uid = 1000;</div><div class='del'>-        retsb.st_gid = 1001;</div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;timestamp);</div><div class='del'>-        if(ret != 0) {</div><div class='del'>-                fprintf (stderr, "clock_gettime: error %s\n", strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        retsb.st_atim = timestamp;</div><div class='del'>-        retsb.st_mtim = timestamp;</div><div class='del'>-        valid = GFAPI_SET_ATTR_MODE | GFAPI_SET_ATTR_UID | GFAPI_SET_ATTR_GID |</div><div class='del'>-        GFAPI_SET_ATTR_ATIME | GFAPI_SET_ATTR_MTIME;</div><div class='del'>-        peek_stat (&amp;retsb);</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_setattrs (fs, dir, &amp;retsb, valid);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_setattrs: error %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset(&amp;retsb, 0, sizeof (struct stat));</div><div class='del'>-        ret = glfs_h_stat (fs, dir, &amp;retsb);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_stat: error %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, dir, strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;retsb);</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_getattrs and setattrs tests: PASSED\n");</div><div class='add'>+    char *my_dir = "attrdir";</div><div class='add'>+    char *my_file = "attrfile.txt";</div><div class='add'>+    struct glfs_object *parent = NULL, *leaf = NULL, *dir = NULL;</div><div class='add'>+    struct stat sb, retsb;</div><div class='add'>+    int ret, valid;</div><div class='add'>+    struct timespec timestamp;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_getattrs and setattrs tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    /* Prepare tests */</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dir = glfs_h_mkdir(fs, parent, my_dir, 0644, &amp;sb);</div><div class='add'>+    if (dir == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, dir, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_unlink tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_getattrs(fs, dir, &amp;retsb);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_getattrs: error %s: from (%p),%s\n", my_dir,</div><div class='add'>+                dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;retsb);</div><div class='add'>+    /* TODO: Compare stat information */</div><div class='add'>+</div><div class='add'>+    retsb.st_mode = 00666;</div><div class='add'>+    retsb.st_uid = 1000;</div><div class='add'>+    retsb.st_gid = 1001;</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;timestamp);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    retsb.st_atim = timestamp;</div><div class='add'>+    retsb.st_mtim = timestamp;</div><div class='add'>+    valid = GFAPI_SET_ATTR_MODE | GFAPI_SET_ATTR_UID | GFAPI_SET_ATTR_GID |</div><div class='add'>+            GFAPI_SET_ATTR_ATIME | GFAPI_SET_ATTR_MTIME;</div><div class='add'>+    peek_stat(&amp;retsb);</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_setattrs(fs, dir, &amp;retsb, valid);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_setattrs: error %s: from (%p),%s\n", my_dir,</div><div class='add'>+                dir, strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(&amp;retsb, 0, sizeof(struct stat));</div><div class='add'>+    ret = glfs_h_stat(fs, dir, &amp;retsb);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_stat: error %s: from (%p),%s\n", my_dir, dir,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;retsb);</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_getattrs and setattrs tests: PASSED\n");</div><div class='ctx'> out:</div><div class='del'>-        if (parent)</div><div class='del'>-                glfs_h_close (parent);</div><div class='del'>-        if (leaf)</div><div class='del'>-                glfs_h_close (leaf);</div><div class='del'>-        if (dir)</div><div class='del'>-                glfs_h_close (dir);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (parent)</div><div class='add'>+        glfs_h_close(parent);</div><div class='add'>+    if (leaf)</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+    if (dir)</div><div class='add'>+        glfs_h_close(dir);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-test_h_truncate (void)</div><div class='add'>+test_h_truncate(void)</div><div class='ctx'> {</div><div class='del'>-        char               *my_dir = "truncatedir";</div><div class='del'>-        char               *my_file = "file.txt";</div><div class='del'>-        struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL;</div><div class='del'>-        struct stat         sb;</div><div class='del'>-        glfs_fd_t          *fd = NULL;</div><div class='del'>-        char                buf[32];</div><div class='del'>-        off_t               offset = 0;</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-</div><div class='del'>-        printf("glfs_h_truncate tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        /* Prepare tests */</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        parent = glfs_h_mkdir (fs, root, my_dir, 0644, &amp;sb);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, parent, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        fd = glfs_h_open (fs, leaf, O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_open: error on open of %s: %s\n",</div><div class='del'>-                         my_file, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (buf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='del'>-        ret = glfs_write (fd, buf, 32, 0);</div><div class='del'>-</div><div class='del'>-        /* run tests */</div><div class='del'>-        /* truncate lower */</div><div class='del'>-        offset = 30;</div><div class='del'>-        ret = glfs_h_truncate (fs, leaf, offset);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_truncate: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_h_getattrs (fs, leaf, &amp;sb);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_getattrs: error for %s (%p),%s\n",</div><div class='del'>-                         my_file, leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (sb.st_size != offset) {</div><div class='del'>-                fprintf (stderr, "glfs_h_truncate: post size mismatch\n");</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* truncate higher */</div><div class='del'>-        offset = 32;</div><div class='del'>-        ret = glfs_h_truncate (fs, leaf, offset);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_truncate: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_h_getattrs (fs, leaf, &amp;sb);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_getattrs: error for %s (%p),%s\n",</div><div class='del'>-                         my_file, leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (sb.st_size != offset) {</div><div class='del'>-                fprintf (stderr, "glfs_h_truncate: post size mismatch\n");</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* truncate equal */</div><div class='del'>-        offset = 30;</div><div class='del'>-        ret = glfs_h_truncate (fs, leaf, offset);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_truncate: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_h_getattrs (fs, leaf, &amp;sb);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_getattrs: error for %s (%p),%s\n",</div><div class='del'>-                         my_file, leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (sb.st_size != offset) {</div><div class='del'>-                fprintf (stderr, "glfs_h_truncate: post size mismatch\n");</div><div class='del'>-                printf ("glfs_h_truncate tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_truncate tests: PASSED\n");</div><div class='add'>+    char *my_dir = "truncatedir";</div><div class='add'>+    char *my_file = "file.txt";</div><div class='add'>+    struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL;</div><div class='add'>+    struct stat sb;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char buf[32];</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_truncate tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    /* Prepare tests */</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    parent = glfs_h_mkdir(fs, root, my_dir, 0644, &amp;sb);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_dir, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, parent, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    fd = glfs_h_open(fs, leaf, O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_open: error on open of %s: %s\n", my_file,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(buf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='add'>+    ret = glfs_write(fd, buf, 32, 0);</div><div class='add'>+</div><div class='add'>+    /* run tests */</div><div class='add'>+    /* truncate lower */</div><div class='add'>+    offset = 30;</div><div class='add'>+    ret = glfs_h_truncate(fs, leaf, offset);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_truncate: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_h_getattrs(fs, leaf, &amp;sb);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_getattrs: error for %s (%p),%s\n", my_file,</div><div class='add'>+                leaf, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (sb.st_size != offset) {</div><div class='add'>+        fprintf(stderr, "glfs_h_truncate: post size mismatch\n");</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* truncate higher */</div><div class='add'>+    offset = 32;</div><div class='add'>+    ret = glfs_h_truncate(fs, leaf, offset);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_truncate: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_h_getattrs(fs, leaf, &amp;sb);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_getattrs: error for %s (%p),%s\n", my_file,</div><div class='add'>+                leaf, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (sb.st_size != offset) {</div><div class='add'>+        fprintf(stderr, "glfs_h_truncate: post size mismatch\n");</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* truncate equal */</div><div class='add'>+    offset = 30;</div><div class='add'>+    ret = glfs_h_truncate(fs, leaf, offset);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_truncate: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_h_getattrs(fs, leaf, &amp;sb);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_getattrs: error for %s (%p),%s\n", my_file,</div><div class='add'>+                leaf, strerror(errno));</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (sb.st_size != offset) {</div><div class='add'>+        fprintf(stderr, "glfs_h_truncate: post size mismatch\n");</div><div class='add'>+        printf("glfs_h_truncate tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_truncate tests: PASSED\n");</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                glfs_close (fd);</div><div class='del'>-        if (root)</div><div class='del'>-                glfs_h_close (root);</div><div class='del'>-        if (parent)</div><div class='del'>-                glfs_h_close (parent);</div><div class='del'>-        if (leaf)</div><div class='del'>-                glfs_h_close (leaf);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    if (root)</div><div class='add'>+        glfs_h_close(root);</div><div class='add'>+    if (parent)</div><div class='add'>+        glfs_h_close(parent);</div><div class='add'>+    if (leaf)</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-test_h_links (void)</div><div class='add'>+test_h_links(void)</div><div class='ctx'> {</div><div class='del'>-        char               *my_dir = "linkdir";</div><div class='del'>-        char               *my_file = "file.txt";</div><div class='del'>-        char               *my_symlnk = "slnk.txt";</div><div class='del'>-        char               *my_lnk = "lnk.txt";</div><div class='del'>-        char               *linksrc_dir = "dir1";</div><div class='del'>-        char               *linktgt_dir = "dir2";</div><div class='del'>-        struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL,</div><div class='del'>-                           *dirsrc = NULL, *dirtgt = NULL, *dleaf = NULL;</div><div class='del'>-        struct glfs_object *ln1 = NULL;</div><div class='del'>-        struct stat         sb;</div><div class='del'>-        int                 ret;</div><div class='del'>-        char               *buf = NULL;</div><div class='del'>-</div><div class='del'>-        printf("glfs_h_link(s) tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        /* Prepare tests */</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        parent = glfs_h_mkdir (fs, root, my_dir, 0644, &amp;sb);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, parent, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dirsrc = glfs_h_mkdir (fs, parent, linksrc_dir, 0644, &amp;sb);</div><div class='del'>-        if (dirsrc == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         linksrc_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dirtgt = glfs_h_mkdir (fs, parent, linktgt_dir, 0644, &amp;sb);</div><div class='del'>-        if (dirtgt == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         linktgt_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dleaf = glfs_h_creat (fs, dirsrc, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (dleaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, dirsrc, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* run tests */</div><div class='del'>-        /* sym link: /testdir/linkdir/file.txt to ./slnk.txt */</div><div class='del'>-        ln1 = glfs_h_symlink (fs, parent, my_symlnk, "./file.txt", &amp;sb);</div><div class='del'>-        if (ln1 == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_symlink: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_symlnk, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        buf = calloc (1024, sizeof(char));</div><div class='del'>-        if (buf == NULL) {</div><div class='del'>-                fprintf (stderr, "Error allocating memory\n");</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_readlink (fs, ln1, buf, 1024);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_readlink: error reading %s: from (%p),%s\n",</div><div class='del'>-                         my_symlnk, ln1, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!(strncmp (buf, my_symlnk, strlen (my_symlnk)))) {</div><div class='del'>-                fprintf (stderr, "glfs_h_readlink: error mismatch in link name: actual %s: retrieved %s\n",</div><div class='del'>-                         my_symlnk, buf);</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* link: /testdir/linkdir/file.txt to ./lnk.txt */</div><div class='del'>-        ret = glfs_h_link (fs, leaf, parent, my_lnk);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_link: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_lnk, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* TODO: Should write content to a file and read from the link */</div><div class='del'>-</div><div class='del'>-        /* link: /testdir/linkdir/dir1/file.txt to ../dir2/slnk.txt */</div><div class='del'>-        ret = glfs_h_link (fs, dleaf, dirtgt, my_lnk);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_link: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_lnk, dirtgt, strerror (errno));</div><div class='del'>-                printf ("glfs_h_link(s) tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* TODO: Should write content to a file and read from the link */</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_link(s) tests: PASSED\n");</div><div class='add'>+    char *my_dir = "linkdir";</div><div class='add'>+    char *my_file = "file.txt";</div><div class='add'>+    char *my_symlnk = "slnk.txt";</div><div class='add'>+    char *my_lnk = "lnk.txt";</div><div class='add'>+    char *linksrc_dir = "dir1";</div><div class='add'>+    char *linktgt_dir = "dir2";</div><div class='add'>+    struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL,</div><div class='add'>+                       *dirsrc = NULL, *dirtgt = NULL, *dleaf = NULL;</div><div class='add'>+    struct glfs_object *ln1 = NULL;</div><div class='add'>+    struct stat sb;</div><div class='add'>+    int ret;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_link(s) tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    /* Prepare tests */</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    parent = glfs_h_mkdir(fs, root, my_dir, 0644, &amp;sb);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_dir, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, parent, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dirsrc = glfs_h_mkdir(fs, parent, linksrc_dir, 0644, &amp;sb);</div><div class='add'>+    if (dirsrc == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                linksrc_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dirtgt = glfs_h_mkdir(fs, parent, linktgt_dir, 0644, &amp;sb);</div><div class='add'>+    if (dirtgt == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                linktgt_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dleaf = glfs_h_creat(fs, dirsrc, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (dleaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, dirsrc, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* run tests */</div><div class='add'>+    /* sym link: /testdir/linkdir/file.txt to ./slnk.txt */</div><div class='add'>+    ln1 = glfs_h_symlink(fs, parent, my_symlnk, "./file.txt", &amp;sb);</div><div class='add'>+    if (ln1 == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_symlink: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_symlnk, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    buf = calloc(1024, sizeof(char));</div><div class='add'>+    if (buf == NULL) {</div><div class='add'>+        fprintf(stderr, "Error allocating memory\n");</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_readlink(fs, ln1, buf, 1024);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_readlink: error reading %s: from (%p),%s\n",</div><div class='add'>+                my_symlnk, ln1, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!(strncmp(buf, my_symlnk, strlen(my_symlnk)))) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_readlink: error mismatch in link name: actual %s: "</div><div class='add'>+                "retrieved %s\n",</div><div class='add'>+                my_symlnk, buf);</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* link: /testdir/linkdir/file.txt to ./lnk.txt */</div><div class='add'>+    ret = glfs_h_link(fs, leaf, parent, my_lnk);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_link: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_lnk, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* TODO: Should write content to a file and read from the link */</div><div class='add'>+</div><div class='add'>+    /* link: /testdir/linkdir/dir1/file.txt to ../dir2/slnk.txt */</div><div class='add'>+    ret = glfs_h_link(fs, dleaf, dirtgt, my_lnk);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_link: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_lnk, dirtgt, strerror(errno));</div><div class='add'>+        printf("glfs_h_link(s) tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* TODO: Should write content to a file and read from the link */</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_link(s) tests: PASSED\n");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (root)</div><div class='del'>-                glfs_h_close (root);</div><div class='del'>-        if (parent)</div><div class='del'>-                glfs_h_close (parent);</div><div class='del'>-        if (leaf)</div><div class='del'>-                glfs_h_close (leaf);</div><div class='del'>-        if (dirsrc)</div><div class='del'>-                glfs_h_close (dirsrc);</div><div class='del'>-        if (dirtgt)</div><div class='del'>-                glfs_h_close (dirtgt);</div><div class='del'>-        if (dleaf)</div><div class='del'>-                glfs_h_close (dleaf);</div><div class='del'>-        if (ln1)</div><div class='del'>-                glfs_h_close (ln1);</div><div class='del'>-        if (buf)</div><div class='del'>-                free (buf);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (root)</div><div class='add'>+        glfs_h_close(root);</div><div class='add'>+    if (parent)</div><div class='add'>+        glfs_h_close(parent);</div><div class='add'>+    if (leaf)</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+    if (dirsrc)</div><div class='add'>+        glfs_h_close(dirsrc);</div><div class='add'>+    if (dirtgt)</div><div class='add'>+        glfs_h_close(dirtgt);</div><div class='add'>+    if (dleaf)</div><div class='add'>+        glfs_h_close(dleaf);</div><div class='add'>+    if (ln1)</div><div class='add'>+        glfs_h_close(ln1);</div><div class='add'>+    if (buf)</div><div class='add'>+        free(buf);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-test_h_rename (void)</div><div class='add'>+test_h_rename(void)</div><div class='ctx'> {</div><div class='del'>-        char               *my_dir = "renamedir";</div><div class='del'>-        char               *my_file = "file.txt";</div><div class='del'>-        char               *src_dir = "dir1";</div><div class='del'>-        char               *tgt_dir = "dir2";</div><div class='del'>-        struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL,</div><div class='del'>-                           *dirsrc = NULL, *dirtgt = NULL, *dleaf = NULL;</div><div class='del'>-        struct stat         sb;</div><div class='del'>-        int                 ret;</div><div class='del'>-</div><div class='del'>-        printf("glfs_h_rename tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        /* Prepare tests */</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        parent = glfs_h_mkdir (fs, root, my_dir, 0644, &amp;sb);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, parent, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dirsrc = glfs_h_mkdir (fs, parent, src_dir, 0644, &amp;sb);</div><div class='del'>-        if (dirsrc == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         src_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dirtgt = glfs_h_mkdir (fs, parent, tgt_dir, 0644, &amp;sb);</div><div class='del'>-        if (dirtgt == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         tgt_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        dleaf = glfs_h_creat (fs, dirsrc, my_file, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (dleaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_file, dirsrc, strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* run tests */</div><div class='del'>-        /* Rename file.txt -&gt; file1.txt */</div><div class='del'>-        ret = glfs_h_rename (fs, parent, "file.txt", parent, "file1.txt");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: error renaming %s to %s (%s)\n",</div><div class='del'>-                         "file.txt", "file1.txt", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rename dir1/file.txt -&gt; file.txt */</div><div class='del'>-        ret = glfs_h_rename (fs, dirsrc, "file.txt", parent, "file.txt");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: error renaming %s/%s to %s (%s)\n",</div><div class='del'>-                         src_dir, "file.txt", "file.txt", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rename file1.txt -&gt; file.txt (exists) */</div><div class='del'>-        ret = glfs_h_rename (fs, parent, "file1.txt", parent, "file.txt");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: error renaming %s to %s (%s)\n",</div><div class='del'>-                         "file.txt", "file.txt", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rename dir1 -&gt; dir3 */</div><div class='del'>-        ret = glfs_h_rename (fs, parent, "dir1", parent, "dir3");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: error renaming %s to %s (%s)\n",</div><div class='del'>-                         "dir1", "dir3", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rename dir2 -&gt;dir3 (exists) */</div><div class='del'>-        ret = glfs_h_rename (fs, parent, "dir2", parent, "dir3");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: error renaming %s to %s (%s)\n",</div><div class='del'>-                         "dir2", "dir3", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rename file.txt -&gt; dir3 (fail) */</div><div class='del'>-        ret = glfs_h_rename (fs, parent, "file.txt", parent, "dir3");</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: NO error renaming %s to %s (%s)\n",</div><div class='del'>-                         "file.txt", "dir3", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rename dir3 -&gt; file.txt (fail) */</div><div class='del'>-        ret = glfs_h_rename (fs, parent, "dir3", parent, "file.txt");</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_rename: NO error renaming %s to %s (%s)\n",</div><div class='del'>-                         "dir3", "file.txt", strerror (errno));</div><div class='del'>-                printf ("glfs_h_rename tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_rename tests: PASSED\n");</div><div class='add'>+    char *my_dir = "renamedir";</div><div class='add'>+    char *my_file = "file.txt";</div><div class='add'>+    char *src_dir = "dir1";</div><div class='add'>+    char *tgt_dir = "dir2";</div><div class='add'>+    struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL,</div><div class='add'>+                       *dirsrc = NULL, *dirtgt = NULL, *dleaf = NULL;</div><div class='add'>+    struct stat sb;</div><div class='add'>+    int ret;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_rename tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    /* Prepare tests */</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    parent = glfs_h_mkdir(fs, root, my_dir, 0644, &amp;sb);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_dir, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, parent, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dirsrc = glfs_h_mkdir(fs, parent, src_dir, 0644, &amp;sb);</div><div class='add'>+    if (dirsrc == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                src_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dirtgt = glfs_h_mkdir(fs, parent, tgt_dir, 0644, &amp;sb);</div><div class='add'>+    if (dirtgt == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                tgt_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    dleaf = glfs_h_creat(fs, dirsrc, my_file, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (dleaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_file, dirsrc, strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* run tests */</div><div class='add'>+    /* Rename file.txt -&gt; file1.txt */</div><div class='add'>+    ret = glfs_h_rename(fs, parent, "file.txt", parent, "file1.txt");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: error renaming %s to %s (%s)\n",</div><div class='add'>+                "file.txt", "file1.txt", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rename dir1/file.txt -&gt; file.txt */</div><div class='add'>+    ret = glfs_h_rename(fs, dirsrc, "file.txt", parent, "file.txt");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: error renaming %s/%s to %s (%s)\n",</div><div class='add'>+                src_dir, "file.txt", "file.txt", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rename file1.txt -&gt; file.txt (exists) */</div><div class='add'>+    ret = glfs_h_rename(fs, parent, "file1.txt", parent, "file.txt");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: error renaming %s to %s (%s)\n",</div><div class='add'>+                "file.txt", "file.txt", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rename dir1 -&gt; dir3 */</div><div class='add'>+    ret = glfs_h_rename(fs, parent, "dir1", parent, "dir3");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: error renaming %s to %s (%s)\n", "dir1",</div><div class='add'>+                "dir3", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rename dir2 -&gt;dir3 (exists) */</div><div class='add'>+    ret = glfs_h_rename(fs, parent, "dir2", parent, "dir3");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: error renaming %s to %s (%s)\n", "dir2",</div><div class='add'>+                "dir3", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rename file.txt -&gt; dir3 (fail) */</div><div class='add'>+    ret = glfs_h_rename(fs, parent, "file.txt", parent, "dir3");</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: NO error renaming %s to %s (%s)\n",</div><div class='add'>+                "file.txt", "dir3", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rename dir3 -&gt; file.txt (fail) */</div><div class='add'>+    ret = glfs_h_rename(fs, parent, "dir3", parent, "file.txt");</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        fprintf(stderr, "glfs_h_rename: NO error renaming %s to %s (%s)\n",</div><div class='add'>+                "dir3", "file.txt", strerror(errno));</div><div class='add'>+        printf("glfs_h_rename tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_rename tests: PASSED\n");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (root)</div><div class='del'>-                glfs_h_close (root);</div><div class='del'>-        if (parent)</div><div class='del'>-                glfs_h_close (parent);</div><div class='del'>-        if (leaf)</div><div class='del'>-                glfs_h_close (leaf);</div><div class='del'>-        if (dirsrc)</div><div class='del'>-                glfs_h_close (dirsrc);</div><div class='del'>-        if (dirtgt)</div><div class='del'>-                glfs_h_close (dirtgt);</div><div class='del'>-        if (dleaf)</div><div class='del'>-                glfs_h_close (dleaf);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (root)</div><div class='add'>+        glfs_h_close(root);</div><div class='add'>+    if (parent)</div><div class='add'>+        glfs_h_close(parent);</div><div class='add'>+    if (leaf)</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+    if (dirsrc)</div><div class='add'>+        glfs_h_close(dirsrc);</div><div class='add'>+    if (dirtgt)</div><div class='add'>+        glfs_h_close(dirtgt);</div><div class='add'>+    if (dleaf)</div><div class='add'>+        glfs_h_close(dleaf);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-assimilatetime (struct timespec *ts, struct timespec ts_st,</div><div class='del'>-                struct timespec ts_ed)</div><div class='add'>+assimilatetime(struct timespec *ts, struct timespec ts_st,</div><div class='add'>+               struct timespec ts_ed)</div><div class='ctx'> {</div><div class='del'>-        if ((ts_ed.tv_nsec - ts_st.tv_nsec) &lt; 0) {</div><div class='del'>-                ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec - 1;</div><div class='del'>-                ts-&gt;tv_nsec += 1000000000 + ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='del'>-        } else {</div><div class='del'>-                ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec;</div><div class='del'>-                ts-&gt;tv_nsec += ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ts-&gt;tv_nsec &gt; 1000000000) {</div><div class='del'>-                ts-&gt;tv_nsec = ts-&gt;tv_nsec - 1000000000;</div><div class='del'>-                ts-&gt;tv_sec += 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if ((ts_ed.tv_nsec - ts_st.tv_nsec) &lt; 0) {</div><div class='add'>+        ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec - 1;</div><div class='add'>+        ts-&gt;tv_nsec += 1000000000 + ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='add'>+    } else {</div><div class='add'>+        ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec;</div><div class='add'>+        ts-&gt;tv_nsec += ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ts-&gt;tv_nsec &gt; 1000000000) {</div><div class='add'>+        ts-&gt;tv_nsec = ts-&gt;tv_nsec - 1000000000;</div><div class='add'>+        ts-&gt;tv_sec += 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define MAX_FILES_CREATE 10</div><div class='del'>-#define MAXPATHNAME      512</div><div class='add'>+#define MAXPATHNAME 512</div><div class='ctx'> void</div><div class='del'>-test_h_performance (void)</div><div class='add'>+test_h_performance(void)</div><div class='ctx'> {</div><div class='del'>-        char               *my_dir = "perftest",</div><div class='del'>-                           *full_dir_path="/testdir/perftest";</div><div class='del'>-        char               *my_file = "file_", my_file_name[MAXPATHNAME];</div><div class='del'>-        struct glfs_object *parent = NULL, *leaf = NULL, *dir = NULL;</div><div class='del'>-        struct stat         sb;</div><div class='del'>-        int                 ret, i;</div><div class='del'>-        struct glfs_fd     *fd;</div><div class='del'>-        struct timespec     c_ts = {0, 0}, c_ts_st, c_ts_ed;</div><div class='del'>-        struct timespec     o_ts = {0, 0}, o_ts_st, o_ts_ed;</div><div class='del'>-</div><div class='del'>-        printf("glfs_h_performance tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        /* Prepare tests */</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dir = glfs_h_mkdir (fs, parent, my_dir, 0644, &amp;sb);</div><div class='del'>-        if (dir == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* create performance */</div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;o_ts_st);</div><div class='del'>-        if(ret != 0) {</div><div class='del'>-                fprintf (stderr, "clock_gettime: error %s\n", strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='add'>+    char *my_dir = "perftest", *full_dir_path = "/testdir/perftest";</div><div class='add'>+    char *my_file = "file_", my_file_name[MAXPATHNAME];</div><div class='add'>+    struct glfs_object *parent = NULL, *leaf = NULL, *dir = NULL;</div><div class='add'>+    struct stat sb;</div><div class='add'>+    int ret, i;</div><div class='add'>+    struct glfs_fd *fd;</div><div class='add'>+    struct timespec c_ts = {0, 0}, c_ts_st, c_ts_ed;</div><div class='add'>+    struct timespec o_ts = {0, 0}, o_ts_st, o_ts_ed;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_performance tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    /* Prepare tests */</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dir = glfs_h_mkdir(fs, parent, my_dir, 0644, &amp;sb);</div><div class='add'>+    if (dir == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error creating %s: from (%p),%s\n",</div><div class='add'>+                my_dir, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* create performance */</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;o_ts_st);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; MAX_FILES_CREATE; i++) {</div><div class='add'>+        sprintf(my_file_name, "%s%d", my_file, i);</div><div class='add'>+</div><div class='add'>+        ret = clock_gettime(CLOCK_REALTIME, &amp;c_ts_st);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+            printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; MAX_FILES_CREATE; i++) {</div><div class='del'>-                sprintf (my_file_name, "%s%d", my_file, i);</div><div class='del'>-</div><div class='del'>-                ret = clock_gettime (CLOCK_REALTIME, &amp;c_ts_st);</div><div class='del'>-                if(ret != 0) {</div><div class='del'>-                        fprintf (stderr, "clock_gettime: error %s\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                leaf = glfs_h_lookupat (fs, dir, my_file_name, &amp;sb, 0);</div><div class='del'>-                if (leaf != NULL) {</div><div class='del'>-                        fprintf (stderr, "glfs_h_lookup: exists %s\n",</div><div class='del'>-                                 my_file_name);</div><div class='del'>-                        printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                leaf = glfs_h_creat (fs, dir, my_file_name, O_CREAT, 0644, &amp;sb);</div><div class='del'>-                if (leaf == NULL) {</div><div class='del'>-                        fprintf (stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                                 my_file, dir, strerror (errno));</div><div class='del'>-                        printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = clock_gettime (CLOCK_REALTIME, &amp;c_ts_ed);</div><div class='del'>-                if(ret != 0) {</div><div class='del'>-                        fprintf (stderr, "clock_gettime: error %s\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                assimilatetime (&amp;c_ts, c_ts_st, c_ts_ed);</div><div class='del'>-                glfs_h_close (leaf); leaf = NULL;</div><div class='add'>+        leaf = glfs_h_lookupat(fs, dir, my_file_name, &amp;sb, 0);</div><div class='add'>+        if (leaf != NULL) {</div><div class='add'>+            fprintf(stderr, "glfs_h_lookup: exists %s\n", my_file_name);</div><div class='add'>+            printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;o_ts_ed);</div><div class='del'>-        if(ret != 0) {</div><div class='del'>-                fprintf (stderr, "clock_gettime: error %s\n", strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='add'>+        leaf = glfs_h_creat(fs, dir, my_file_name, O_CREAT, 0644, &amp;sb);</div><div class='add'>+        if (leaf == NULL) {</div><div class='add'>+            fprintf(stderr, "glfs_h_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                    my_file, dir, strerror(errno));</div><div class='add'>+            printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        assimilatetime (&amp;o_ts, o_ts_st, o_ts_ed);</div><div class='del'>-</div><div class='del'>-        printf ("Creation performance (handle based):\n\t# empty files:%d\n",</div><div class='del'>-                MAX_FILES_CREATE);</div><div class='del'>-        printf ("\tOverall time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='del'>-                o_ts.tv_sec, o_ts.tv_nsec);</div><div class='del'>-        printf ("\tcreate call time time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='del'>-                c_ts.tv_sec, c_ts.tv_nsec);</div><div class='del'>-</div><div class='del'>-        /* create using path */</div><div class='del'>-        c_ts.tv_sec = o_ts.tv_sec = 0;</div><div class='del'>-        c_ts.tv_nsec = o_ts.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-        sprintf (my_file_name, "%s1", full_dir_path);</div><div class='del'>-        ret = glfs_mkdir (fs, my_file_name, 0644);</div><div class='add'>+        ret = clock_gettime(CLOCK_REALTIME, &amp;c_ts_ed);</div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_mkdir: error creating %s: from (%p),%s\n",</div><div class='del'>-                         my_dir, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;o_ts_st);</div><div class='del'>-        if(ret != 0) {</div><div class='del'>-                fprintf (stderr, "clock_gettime: error %s\n", strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='add'>+            fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+            printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        assimilatetime(&amp;c_ts, c_ts_st, c_ts_ed);</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+        leaf = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;o_ts_ed);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    assimilatetime(&amp;o_ts, o_ts_st, o_ts_ed);</div><div class='add'>+</div><div class='add'>+    printf("Creation performance (handle based):\n\t# empty files:%d\n",</div><div class='add'>+           MAX_FILES_CREATE);</div><div class='add'>+    printf("\tOverall time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n", o_ts.tv_sec,</div><div class='add'>+           o_ts.tv_nsec);</div><div class='add'>+    printf("\tcreate call time time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='add'>+           c_ts.tv_sec, c_ts.tv_nsec);</div><div class='add'>+</div><div class='add'>+    /* create using path */</div><div class='add'>+    c_ts.tv_sec = o_ts.tv_sec = 0;</div><div class='add'>+    c_ts.tv_nsec = o_ts.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+    sprintf(my_file_name, "%s1", full_dir_path);</div><div class='add'>+    ret = glfs_mkdir(fs, my_file_name, 0644);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_mkdir: error creating %s: from (%p),%s\n", my_dir,</div><div class='add'>+                parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;o_ts_st);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; MAX_FILES_CREATE; i++) {</div><div class='add'>+        sprintf(my_file_name, "%s1/%sn%d", full_dir_path, my_file, i);</div><div class='add'>+</div><div class='add'>+        ret = clock_gettime(CLOCK_REALTIME, &amp;c_ts_st);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+            printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; MAX_FILES_CREATE; i++) {</div><div class='del'>-                sprintf (my_file_name, "%s1/%sn%d", full_dir_path, my_file, i);</div><div class='del'>-</div><div class='del'>-                ret = clock_gettime (CLOCK_REALTIME, &amp;c_ts_st);</div><div class='del'>-                if(ret != 0) {</div><div class='del'>-                        fprintf (stderr, "clock_gettime: error %s\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_stat (fs, my_file_name, &amp;sb);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_stat: exists %s\n",</div><div class='del'>-                                 my_file_name);</div><div class='del'>-                        printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd = glfs_creat (fs, my_file_name, O_CREAT, 0644);</div><div class='del'>-                if (fd == NULL) {</div><div class='del'>-                        fprintf (stderr, "glfs_creat: error creating %s: from (%p),%s\n",</div><div class='del'>-                                 my_file, dir, strerror (errno));</div><div class='del'>-                        printf ("glfs_h_performance tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = clock_gettime (CLOCK_REALTIME, &amp;c_ts_ed);</div><div class='del'>-                if(ret != 0) {</div><div class='del'>-                        fprintf (stderr, "clock_gettime: error %s\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                assimilatetime (&amp;c_ts, c_ts_st, c_ts_ed);</div><div class='del'>-                glfs_close (fd);</div><div class='add'>+        ret = glfs_stat(fs, my_file_name, &amp;sb);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            fprintf(stderr, "glfs_stat: exists %s\n", my_file_name);</div><div class='add'>+            printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;o_ts_ed);</div><div class='del'>-        if(ret != 0) {</div><div class='del'>-                fprintf (stderr, "clock_gettime: error %s\n", strerror (errno));</div><div class='del'>-                printf ("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='add'>+        fd = glfs_creat(fs, my_file_name, O_CREAT, 0644);</div><div class='add'>+        if (fd == NULL) {</div><div class='add'>+            fprintf(stderr, "glfs_creat: error creating %s: from (%p),%s\n",</div><div class='add'>+                    my_file, dir, strerror(errno));</div><div class='add'>+            printf("glfs_h_performance tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        assimilatetime (&amp;o_ts, o_ts_st, o_ts_ed);</div><div class='del'>-</div><div class='del'>-        printf ("Creation performance (path based):\n\t# empty files:%d\n",</div><div class='del'>-                MAX_FILES_CREATE);</div><div class='del'>-        printf ("\tOverall time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='del'>-                o_ts.tv_sec, o_ts.tv_nsec);</div><div class='del'>-        printf ("\tcreate call time time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='del'>-                c_ts.tv_sec, c_ts.tv_nsec);</div><div class='add'>+        ret = clock_gettime(CLOCK_REALTIME, &amp;c_ts_ed);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+            printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        assimilatetime(&amp;c_ts, c_ts_st, c_ts_ed);</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;o_ts_ed);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "clock_gettime: error %s\n", strerror(errno));</div><div class='add'>+        printf("glfs_h_getattrs and setattrs tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    assimilatetime(&amp;o_ts, o_ts_st, o_ts_ed);</div><div class='add'>+</div><div class='add'>+    printf("Creation performance (path based):\n\t# empty files:%d\n",</div><div class='add'>+           MAX_FILES_CREATE);</div><div class='add'>+    printf("\tOverall time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n", o_ts.tv_sec,</div><div class='add'>+           o_ts.tv_nsec);</div><div class='add'>+    printf("\tcreate call time time:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='add'>+           c_ts.tv_sec, c_ts.tv_nsec);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-test_handleops (int argc, char *argv[])</div><div class='add'>+test_handleops(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-        glfs_fd_t          *fd = NULL;</div><div class='del'>-        struct stat         sb = {0, };</div><div class='del'>-        struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL,</div><div class='del'>-                           *tmp = NULL;</div><div class='del'>-        char                readbuf[32], writebuf[32];</div><div class='del'>-        unsigned char       leaf_handle[GFAPI_HANDLE_LENGTH];</div><div class='del'>-</div><div class='del'>-        char *full_leaf_name = "/testdir/testfile.txt",</div><div class='del'>-             *leaf_name = "testfile.txt",</div><div class='del'>-             *relative_leaf_name = "testdir/testfile.txt";</div><div class='del'>-        char *leaf_name1 = "testfile1.txt";</div><div class='del'>-        char *full_newparent_name = "/testdir/dir1",</div><div class='del'>-             *newparent_name = "dir1";</div><div class='del'>-        char *full_newnod_name = "/testdir/nod1",</div><div class='del'>-             *newnod_name = "nod1";</div><div class='del'>-</div><div class='del'>-        /* Initialize test area */</div><div class='del'>-        ret = glfs_mkdir (fs, full_parent_name, 0644);</div><div class='del'>-        if (ret != 0 &amp;&amp; errno != EEXIST) {</div><div class='del'>-                fprintf (stderr, "%s: (%p) %s\n", full_parent_name, fd,</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                printf ("Test initialization failed on volume %s\n", argv[1]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        else if (ret != 0) {</div><div class='del'>-                printf ("Found test directory %s to be existing\n",</div><div class='del'>-                        full_parent_name);</div><div class='del'>-                printf ("Cleanup test directory and restart tests\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat (fs, full_leaf_name, O_CREAT, 0644);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "%s: (%p) %s\n", full_leaf_name, fd,</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                printf ("Test initialization failed on volume %s\n", argv[1]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        glfs_close (fd);</div><div class='del'>-</div><div class='del'>-        printf ("Initialized the test area, within volume %s\n", argv[1]);</div><div class='del'>-</div><div class='del'>-        /* Handle based APIs test area */</div><div class='del'>-</div><div class='del'>-        /* glfs_lookupat test */</div><div class='del'>-        printf ("glfs_h_lookupat tests: In Progress\n");</div><div class='del'>-        /* start at root of the volume */</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         "/", NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* lookup a parent within root */</div><div class='del'>-        parent = glfs_h_lookupat (fs, root, parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         parent_name, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* lookup a leaf/child within the parent */</div><div class='del'>-        leaf = glfs_h_lookupat (fs, parent, leaf_name, &amp;sb, 0);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         leaf_name, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* reset */</div><div class='del'>-        glfs_h_close (root); root = NULL;</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-        glfs_h_close (parent); parent = NULL;</div><div class='del'>-</div><div class='del'>-        /* check absolute paths */</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         "/", NULL, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_lookupat (fs, NULL, full_leaf_name, &amp;sb, 0);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_leaf_name, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_lookupat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* reset */</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-</div><div class='del'>-        /* check multiple component paths */</div><div class='del'>-        leaf = glfs_h_lookupat (fs, root, relative_leaf_name, &amp;sb, 0);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         relative_leaf_name, parent, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* reset */</div><div class='del'>-        glfs_h_close (root); root = NULL;</div><div class='del'>-        glfs_h_close (parent); parent = NULL;</div><div class='del'>-</div><div class='del'>-        /* check symlinks in path */</div><div class='del'>-</div><div class='del'>-        /* TODO: -ve test cases */</div><div class='del'>-        /* parent invalid</div><div class='del'>-        * path invalid</div><div class='del'>-        * path does not exist after some components</div><div class='del'>-        * no parent, but relative path</div><div class='del'>-        * parent and full path? -ve?</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_lookupat tests: PASSED\n");</div><div class='del'>-</div><div class='del'>-        /* glfs_openat test */</div><div class='del'>-        printf ("glfs_h_open tests: In Progress\n");</div><div class='del'>-        fd = glfs_h_open (fs, leaf, O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_open: error on open of %s: %s\n",</div><div class='del'>-                         full_leaf_name, strerror (errno));</div><div class='del'>-                printf ("glfs_h_open tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* test read/write based on fd */</div><div class='del'>-        memcpy (writebuf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='del'>-        ret = glfs_write (fd, writebuf, 32, 0);</div><div class='del'>-</div><div class='del'>-        glfs_lseek (fd, 0, SEEK_SET);</div><div class='del'>-</div><div class='del'>-        ret = glfs_read (fd, readbuf, 32, 0);</div><div class='del'>-        if (memcmp (readbuf, writebuf, 32)) {</div><div class='del'>-                printf ("Failed to read what I wrote: %s %s\n", readbuf,</div><div class='del'>-                        writebuf);</div><div class='del'>-                glfs_close (fd);</div><div class='del'>-                printf ("glfs_h_open tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-        glfs_close (fd);</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_open tests: PASSED\n");</div><div class='del'>-</div><div class='del'>-        /* Create tests */</div><div class='del'>-        printf ("glfs_h_creat tests: In Progress\n");</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_creat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, parent, leaf_name1, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error on create of %s: from (%p),%s\n",</div><div class='del'>-                         leaf_name1, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_creat tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, parent, leaf_name1, O_CREAT | O_EXCL, 0644,</div><div class='del'>-                            &amp;sb);</div><div class='del'>-        if (leaf != NULL || errno != EEXIST) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: existing file, leaf = (%p), errno = %s\n",</div><div class='del'>-                        leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_creat tests: FAILED\n");</div><div class='del'>-                if (leaf != NULL) {</div><div class='del'>-                        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tmp = glfs_h_creat (fs, root, parent_name, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (tmp != NULL || !(errno == EISDIR || errno == EINVAL)) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: dir create, tmp = (%p), errno = %s\n",</div><div class='del'>-                        leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_creat tests: FAILED\n");</div><div class='del'>-                if (tmp != NULL) {</div><div class='del'>-                        glfs_h_close (tmp); tmp = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: Other combinations and -ve cases as applicable */</div><div class='del'>-        printf ("glfs_h_creat tests: PASSED\n");</div><div class='del'>-</div><div class='del'>-        /* extract handle and create from handle test */</div><div class='del'>-        printf ("glfs_h_extract_handle and glfs_h_create_from_handle tests: In Progress\n");</div><div class='del'>-        /* TODO: Change the lookup to create below for a GIFD recovery failure,</div><div class='del'>-         * that needs to be fixed */</div><div class='del'>-        leaf = glfs_h_lookupat (fs, parent, leaf_name1, &amp;sb, 0);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         leaf_name1, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_extract_handle tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_extract_handle (leaf, leaf_handle,</div><div class='del'>-                                             GFAPI_HANDLE_LENGTH);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_extract_handle: error extracting handle of %s: %s\n",</div><div class='del'>-                         full_leaf_name, strerror (errno));</div><div class='del'>-                printf ("glfs_h_extract_handle tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_handle (leaf_handle);</div><div class='del'>-</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_create_from_handle (fs, leaf_handle, GFAPI_HANDLE_LENGTH,</div><div class='del'>-                                          &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_create_from_handle: error on create of %s: from (%p),%s\n",</div><div class='del'>-                         leaf_name1, leaf_handle, strerror (errno));</div><div class='del'>-                printf ("glfs_h_create_from_handle tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        fd = glfs_h_open (fs, leaf, O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_open: error on open of %s: %s\n",</div><div class='del'>-                         full_leaf_name, strerror (errno));</div><div class='del'>-                printf ("glfs_h_create_from_handle tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* test read/write based on fd */</div><div class='del'>-        memcpy (writebuf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='del'>-        ret = glfs_write (fd, writebuf, 32, 0);</div><div class='del'>-</div><div class='del'>-        glfs_lseek (fd, 0, SEEK_SET);</div><div class='del'>-</div><div class='del'>-        ret = glfs_read (fd, readbuf, 32, 0);</div><div class='del'>-        if (memcmp (readbuf, writebuf, 32)) {</div><div class='del'>-                printf ("Failed to read what I wrote: %s %s\n", writebuf,</div><div class='del'>-                        writebuf);</div><div class='del'>-                printf ("glfs_h_create_from_handle tests: FAILED\n");</div><div class='del'>-                glfs_close (fd);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_close (fd);</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-        glfs_h_close (parent); parent = NULL;</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_extract_handle and glfs_h_create_from_handle tests: PASSED\n");</div><div class='del'>-</div><div class='del'>-        /* Mkdir tests */</div><div class='del'>-        printf ("glfs_h_mkdir tests: In Progress\n");</div><div class='del'>-</div><div class='del'>-        ret = glfs_rmdir (fs, full_newparent_name);</div><div class='del'>-        if (ret &amp;&amp; errno != ENOENT) {</div><div class='del'>-                fprintf (stderr, "glfs_rmdir: Failed for %s: %s\n",</div><div class='del'>-                         full_newparent_name, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mkdir tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mkdir tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_mkdir (fs, parent, newparent_name, 0644, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error on mkdir of %s: from (%p),%s\n",</div><div class='del'>-                         newparent_name, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mkdir tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_mkdir (fs, parent, newparent_name, 0644, &amp;sb);</div><div class='del'>-        if (leaf != NULL || errno != EEXIST) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: existing directory, leaf = (%p), errno = %s\n",</div><div class='del'>-                         leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mkdir tests: FAILED\n");</div><div class='del'>-                if (leaf != NULL) {</div><div class='del'>-                        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_h_close (parent); parent = NULL;</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_mkdir tests: PASSED\n");</div><div class='del'>-</div><div class='del'>-        /* Mknod tests */</div><div class='del'>-        printf ("glfs_h_mknod tests: In Progress\n");</div><div class='del'>-        ret = glfs_unlink (fs, full_newnod_name);</div><div class='del'>-        if (ret &amp;&amp; errno != ENOENT) {</div><div class='del'>-                fprintf (stderr, "glfs_unlink: Failed for %s: %s\n",</div><div class='del'>-                         full_newnod_name, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mknod tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        parent = glfs_h_lookupat (fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='del'>-                         full_parent_name, root, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mknod tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_mknod (fs, parent, newnod_name, S_IFIFO, 0, &amp;sb);</div><div class='del'>-        if (leaf == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mkdir: error on mkdir of %s: from (%p),%s\n",</div><div class='del'>-                         newnod_name, parent, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mknod tests: FAILED\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        peek_stat (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* TODO: create op on a FIFO node hangs, need to check and fix</div><div class='del'>-        tmp = glfs_h_creat (fs, parent, newnod_name, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (tmp != NULL || errno != EINVAL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: node create, tmp = (%p), errno = %s\n",</div><div class='del'>-                        tmp, strerror (errno));</div><div class='del'>-                printf ("glfs_h_creat/mknod tests: FAILED\n");</div><div class='del'>-                if (tmp != NULL) {</div><div class='del'>-                        glfs_h_close(tmp); tmp = NULL;</div><div class='del'>-                }</div><div class='del'>-        } */</div><div class='del'>-</div><div class='del'>-        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_mknod (fs, parent, newnod_name, 0644, 0, &amp;sb);</div><div class='del'>-        if (leaf != NULL || errno != EEXIST) {</div><div class='del'>-                fprintf (stderr, "glfs_h_mknod: existing node, leaf = (%p), errno = %s\n",</div><div class='del'>-                         leaf, strerror (errno));</div><div class='del'>-                printf ("glfs_h_mknod tests: FAILED\n");</div><div class='del'>-                if (leaf != NULL) {</div><div class='del'>-                        glfs_h_close (leaf); leaf = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_h_close (parent); parent = NULL;</div><div class='del'>-</div><div class='del'>-        printf ("glfs_h_mknod tests: PASSED\n");</div><div class='del'>-</div><div class='del'>-        /* unlink tests */</div><div class='del'>-        test_h_unlink ();</div><div class='del'>-</div><div class='del'>-        /* TODO: opendir tests */</div><div class='del'>-</div><div class='del'>-        /* getattr tests */</div><div class='del'>-        test_h_getsetattrs ();</div><div class='del'>-</div><div class='del'>-        /* TODO: setattr tests */</div><div class='del'>-</div><div class='del'>-        /* truncate tests */</div><div class='del'>-        test_h_truncate();</div><div class='del'>-</div><div class='del'>-        /* link tests */</div><div class='del'>-        test_h_links ();</div><div class='del'>-</div><div class='del'>-        /* rename tests */</div><div class='del'>-        test_h_rename ();</div><div class='del'>-</div><div class='del'>-        /* performance tests */</div><div class='del'>-        test_h_performance ();</div><div class='del'>-</div><div class='del'>-        /* END: New APIs test area */</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct glfs_object *root = NULL, *parent = NULL, *leaf = NULL, *tmp = NULL;</div><div class='add'>+    char readbuf[32], writebuf[32];</div><div class='add'>+    unsigned char leaf_handle[GFAPI_HANDLE_LENGTH];</div><div class='add'>+</div><div class='add'>+    char *full_leaf_name = "/testdir/testfile.txt", *leaf_name = "testfile.txt",</div><div class='add'>+         *relative_leaf_name = "testdir/testfile.txt";</div><div class='add'>+    char *leaf_name1 = "testfile1.txt";</div><div class='add'>+    char *full_newparent_name = "/testdir/dir1", *newparent_name = "dir1";</div><div class='add'>+    char *full_newnod_name = "/testdir/nod1", *newnod_name = "nod1";</div><div class='add'>+</div><div class='add'>+    /* Initialize test area */</div><div class='add'>+    ret = glfs_mkdir(fs, full_parent_name, 0644);</div><div class='add'>+    if (ret != 0 &amp;&amp; errno != EEXIST) {</div><div class='add'>+        fprintf(stderr, "%s: (%p) %s\n", full_parent_name, fd, strerror(errno));</div><div class='add'>+        printf("Test initialization failed on volume %s\n", argv[1]);</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret != 0) {</div><div class='add'>+        printf("Found test directory %s to be existing\n", full_parent_name);</div><div class='add'>+        printf("Cleanup test directory and restart tests\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, full_leaf_name, O_CREAT, 0644);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "%s: (%p) %s\n", full_leaf_name, fd, strerror(errno));</div><div class='add'>+        printf("Test initialization failed on volume %s\n", argv[1]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+</div><div class='add'>+    printf("Initialized the test area, within volume %s\n", argv[1]);</div><div class='add'>+</div><div class='add'>+    /* Handle based APIs test area */</div><div class='add'>+</div><div class='add'>+    /* glfs_lookupat test */</div><div class='add'>+    printf("glfs_h_lookupat tests: In Progress\n");</div><div class='add'>+    /* start at root of the volume */</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n", "/",</div><div class='add'>+                NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* lookup a parent within root */</div><div class='add'>+    parent = glfs_h_lookupat(fs, root, parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                parent_name, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* lookup a leaf/child within the parent */</div><div class='add'>+    leaf = glfs_h_lookupat(fs, parent, leaf_name, &amp;sb, 0);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                leaf_name, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* reset */</div><div class='add'>+    glfs_h_close(root);</div><div class='add'>+    root = NULL;</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+    glfs_h_close(parent);</div><div class='add'>+    parent = NULL;</div><div class='add'>+</div><div class='add'>+    /* check absolute paths */</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n", "/",</div><div class='add'>+                NULL, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_lookupat(fs, NULL, full_leaf_name, &amp;sb, 0);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_leaf_name, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_lookupat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* reset */</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+</div><div class='add'>+    /* check multiple component paths */</div><div class='add'>+    leaf = glfs_h_lookupat(fs, root, relative_leaf_name, &amp;sb, 0);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                relative_leaf_name, parent, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* reset */</div><div class='add'>+    glfs_h_close(root);</div><div class='add'>+    root = NULL;</div><div class='add'>+    glfs_h_close(parent);</div><div class='add'>+    parent = NULL;</div><div class='add'>+</div><div class='add'>+    /* check symlinks in path */</div><div class='add'>+</div><div class='add'>+    /* TODO: -ve test cases */</div><div class='add'>+    /* parent invalid</div><div class='add'>+     * path invalid</div><div class='add'>+     * path does not exist after some components</div><div class='add'>+     * no parent, but relative path</div><div class='add'>+     * parent and full path? -ve?</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_lookupat tests: PASSED\n");</div><div class='add'>+</div><div class='add'>+    /* glfs_openat test */</div><div class='add'>+    printf("glfs_h_open tests: In Progress\n");</div><div class='add'>+    fd = glfs_h_open(fs, leaf, O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_open: error on open of %s: %s\n",</div><div class='add'>+                full_leaf_name, strerror(errno));</div><div class='add'>+        printf("glfs_h_open tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* test read/write based on fd */</div><div class='add'>+    memcpy(writebuf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='add'>+    ret = glfs_write(fd, writebuf, 32, 0);</div><div class='add'>+</div><div class='add'>+    glfs_lseek(fd, 0, SEEK_SET);</div><div class='add'>+</div><div class='add'>+    ret = glfs_read(fd, readbuf, 32, 0);</div><div class='add'>+    if (memcmp(readbuf, writebuf, 32)) {</div><div class='add'>+        printf("Failed to read what I wrote: %s %s\n", readbuf, writebuf);</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+        printf("glfs_h_open tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_open tests: PASSED\n");</div><div class='add'>+</div><div class='add'>+    /* Create tests */</div><div class='add'>+    printf("glfs_h_creat tests: In Progress\n");</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_creat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, parent, leaf_name1, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error on create of %s: from (%p),%s\n",</div><div class='add'>+                leaf_name1, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_creat tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, parent, leaf_name1, O_CREAT | O_EXCL, 0644, &amp;sb);</div><div class='add'>+    if (leaf != NULL || errno != EEXIST) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_creat: existing file, leaf = (%p), errno = %s\n", leaf,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        printf("glfs_h_creat tests: FAILED\n");</div><div class='add'>+        if (leaf != NULL) {</div><div class='add'>+            glfs_h_close(leaf);</div><div class='add'>+            leaf = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmp = glfs_h_creat(fs, root, parent_name, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (tmp != NULL || !(errno == EISDIR || errno == EINVAL)) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: dir create, tmp = (%p), errno = %s\n",</div><div class='add'>+                leaf, strerror(errno));</div><div class='add'>+        printf("glfs_h_creat tests: FAILED\n");</div><div class='add'>+        if (tmp != NULL) {</div><div class='add'>+            glfs_h_close(tmp);</div><div class='add'>+            tmp = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: Other combinations and -ve cases as applicable */</div><div class='add'>+    printf("glfs_h_creat tests: PASSED\n");</div><div class='add'>+</div><div class='add'>+    /* extract handle and create from handle test */</div><div class='add'>+    printf(</div><div class='add'>+        "glfs_h_extract_handle and glfs_h_create_from_handle tests: In "</div><div class='add'>+        "Progress\n");</div><div class='add'>+    /* TODO: Change the lookup to create below for a GIFD recovery failure,</div><div class='add'>+     * that needs to be fixed */</div><div class='add'>+    leaf = glfs_h_lookupat(fs, parent, leaf_name1, &amp;sb, 0);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                leaf_name1, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_extract_handle tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_extract_handle(leaf, leaf_handle, GFAPI_HANDLE_LENGTH);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_extract_handle: error extracting handle of %s: %s\n",</div><div class='add'>+                full_leaf_name, strerror(errno));</div><div class='add'>+        printf("glfs_h_extract_handle tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_handle(leaf_handle);</div><div class='add'>+</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_create_from_handle(fs, leaf_handle, GFAPI_HANDLE_LENGTH, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "glfs_h_create_from_handle: error on create of %s: from (%p),%s\n",</div><div class='add'>+            leaf_name1, leaf_handle, strerror(errno));</div><div class='add'>+        printf("glfs_h_create_from_handle tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    fd = glfs_h_open(fs, leaf, O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_open: error on open of %s: %s\n",</div><div class='add'>+                full_leaf_name, strerror(errno));</div><div class='add'>+        printf("glfs_h_create_from_handle tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* test read/write based on fd */</div><div class='add'>+    memcpy(writebuf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='add'>+    ret = glfs_write(fd, writebuf, 32, 0);</div><div class='add'>+</div><div class='add'>+    glfs_lseek(fd, 0, SEEK_SET);</div><div class='add'>+</div><div class='add'>+    ret = glfs_read(fd, readbuf, 32, 0);</div><div class='add'>+    if (memcmp(readbuf, writebuf, 32)) {</div><div class='add'>+        printf("Failed to read what I wrote: %s %s\n", writebuf, writebuf);</div><div class='add'>+        printf("glfs_h_create_from_handle tests: FAILED\n");</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+    glfs_h_close(parent);</div><div class='add'>+    parent = NULL;</div><div class='add'>+</div><div class='add'>+    printf(</div><div class='add'>+        "glfs_h_extract_handle and glfs_h_create_from_handle tests: PASSED\n");</div><div class='add'>+</div><div class='add'>+    /* Mkdir tests */</div><div class='add'>+    printf("glfs_h_mkdir tests: In Progress\n");</div><div class='add'>+</div><div class='add'>+    ret = glfs_rmdir(fs, full_newparent_name);</div><div class='add'>+    if (ret &amp;&amp; errno != ENOENT) {</div><div class='add'>+        fprintf(stderr, "glfs_rmdir: Failed for %s: %s\n", full_newparent_name,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        printf("glfs_h_mkdir tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_mkdir tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_mkdir(fs, parent, newparent_name, 0644, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error on mkdir of %s: from (%p),%s\n",</div><div class='add'>+                newparent_name, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_mkdir tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_mkdir(fs, parent, newparent_name, 0644, &amp;sb);</div><div class='add'>+    if (leaf != NULL || errno != EEXIST) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_mkdir: existing directory, leaf = (%p), errno = %s\n",</div><div class='add'>+                leaf, strerror(errno));</div><div class='add'>+        printf("glfs_h_mkdir tests: FAILED\n");</div><div class='add'>+        if (leaf != NULL) {</div><div class='add'>+            glfs_h_close(leaf);</div><div class='add'>+            leaf = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_h_close(parent);</div><div class='add'>+    parent = NULL;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_mkdir tests: PASSED\n");</div><div class='add'>+</div><div class='add'>+    /* Mknod tests */</div><div class='add'>+    printf("glfs_h_mknod tests: In Progress\n");</div><div class='add'>+    ret = glfs_unlink(fs, full_newnod_name);</div><div class='add'>+    if (ret &amp;&amp; errno != ENOENT) {</div><div class='add'>+        fprintf(stderr, "glfs_unlink: Failed for %s: %s\n", full_newnod_name,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        printf("glfs_h_mknod tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent = glfs_h_lookupat(fs, NULL, full_parent_name, &amp;sb, 0);</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on lookup of %s: from (%p),%s\n",</div><div class='add'>+                full_parent_name, root, strerror(errno));</div><div class='add'>+        printf("glfs_h_mknod tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_mknod(fs, parent, newnod_name, S_IFIFO, 0, &amp;sb);</div><div class='add'>+    if (leaf == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error on mkdir of %s: from (%p),%s\n",</div><div class='add'>+                newnod_name, parent, strerror(errno));</div><div class='add'>+        printf("glfs_h_mknod tests: FAILED\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    peek_stat(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* TODO: create op on a FIFO node hangs, need to check and fix</div><div class='add'>+    tmp = glfs_h_creat (fs, parent, newnod_name, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (tmp != NULL || errno != EINVAL) {</div><div class='add'>+            fprintf (stderr, "glfs_h_creat: node create, tmp = (%p), errno =</div><div class='add'>+    %s\n", tmp, strerror (errno)); printf ("glfs_h_creat/mknod tests:</div><div class='add'>+    FAILED\n"); if (tmp != NULL) { glfs_h_close(tmp); tmp = NULL;</div><div class='add'>+            }</div><div class='add'>+    } */</div><div class='add'>+</div><div class='add'>+    glfs_h_close(leaf);</div><div class='add'>+    leaf = NULL;</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_mknod(fs, parent, newnod_name, 0644, 0, &amp;sb);</div><div class='add'>+    if (leaf != NULL || errno != EEXIST) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_mknod: existing node, leaf = (%p), errno = %s\n", leaf,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        printf("glfs_h_mknod tests: FAILED\n");</div><div class='add'>+        if (leaf != NULL) {</div><div class='add'>+            glfs_h_close(leaf);</div><div class='add'>+            leaf = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_h_close(parent);</div><div class='add'>+    parent = NULL;</div><div class='add'>+</div><div class='add'>+    printf("glfs_h_mknod tests: PASSED\n");</div><div class='add'>+</div><div class='add'>+    /* unlink tests */</div><div class='add'>+    test_h_unlink();</div><div class='add'>+</div><div class='add'>+    /* TODO: opendir tests */</div><div class='add'>+</div><div class='add'>+    /* getattr tests */</div><div class='add'>+    test_h_getsetattrs();</div><div class='add'>+</div><div class='add'>+    /* TODO: setattr tests */</div><div class='add'>+</div><div class='add'>+    /* truncate tests */</div><div class='add'>+    test_h_truncate();</div><div class='add'>+</div><div class='add'>+    /* link tests */</div><div class='add'>+    test_h_links();</div><div class='add'>+</div><div class='add'>+    /* rename tests */</div><div class='add'>+    test_h_rename();</div><div class='add'>+</div><div class='add'>+    /* performance tests */</div><div class='add'>+    test_h_performance();</div><div class='add'>+</div><div class='add'>+    /* END: New APIs test area */</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /* Cleanup glfs handles */</div><div class='del'>-        if (root)</div><div class='del'>-                glfs_h_close (root);</div><div class='del'>-        if (parent)</div><div class='del'>-                glfs_h_close (parent);</div><div class='del'>-        if (leaf)</div><div class='del'>-                glfs_h_close (leaf);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    /* Cleanup glfs handles */</div><div class='add'>+    if (root)</div><div class='add'>+        glfs_h_close(root);</div><div class='add'>+    if (parent)</div><div class='add'>+        glfs_h_close(parent);</div><div class='add'>+    if (leaf)</div><div class='add'>+        glfs_h_close(leaf);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs2 = NULL;</div><div class='del'>-        int        ret = 0;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        glfs_fd_t *fd2 = NULL;</div><div class='del'>-        struct stat sb = {0, };</div><div class='del'>-        char       readbuf[32];</div><div class='del'>-        char       writebuf[32];</div><div class='del'>-</div><div class='del'>-        char      *filename = "/filename2";</div><div class='del'>-</div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                printf ("Expect following args\n\t%s &lt;volname&gt; &lt;hostname&gt;\n", argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    glfs_t *fs2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char readbuf[32];</div><div class='add'>+    char writebuf[32];</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (argv[1]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    char *filename = "/filename2";</div><div class='ctx'> </div><div class='del'>-//      ret = glfs_set_volfile (fs, "/tmp/posix.vol");</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        printf("Expect following args\n\t%s &lt;volname&gt; &lt;hostname&gt;\n", argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[2], 24007);</div><div class='add'>+    fs = glfs_new(argv[1]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-//      ret = glfs_set_volfile_server (fs, "unix", "/tmp/gluster.sock", 0);</div><div class='add'>+    //      ret = glfs_set_volfile (fs, "/tmp/posix.vol");</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, "/dev/stderr", 7);</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[2], 24007);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='add'>+    //      ret = glfs_set_volfile_server (fs, "unix", "/tmp/gluster.sock", 0);</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+    ret = glfs_set_logging(fs, "/dev/stderr", 7);</div><div class='ctx'> </div><div class='del'>-        sleep (2);</div><div class='add'>+    ret = glfs_init(fs);</div><div class='ctx'> </div><div class='del'>-        fs2 = glfs_new (argv[1]);</div><div class='del'>-        if (!fs2) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='ctx'> </div><div class='add'>+    sleep(2);</div><div class='ctx'> </div><div class='del'>-//      ret = glfs_set_volfile (fs2, "/tmp/posix.vol");</div><div class='add'>+    fs2 = glfs_new(argv[1]);</div><div class='add'>+    if (!fs2) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs2, "tcp", argv[2], 24007);</div><div class='add'>+    //      ret = glfs_set_volfile (fs2, "/tmp/posix.vol");</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs2, "/dev/stderr", 7);</div><div class='add'>+    ret = glfs_set_volfile_server(fs2, "tcp", argv[2], 24007);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs2);</div><div class='add'>+    ret = glfs_set_logging(fs2, "/dev/stderr", 7);</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+    ret = glfs_init(fs2);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_lstat (fs, filename, &amp;sb);</div><div class='del'>-        fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno));</div><div class='add'>+    fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='ctx'> </div><div class='del'>-        fd = glfs_creat (fs, filename, O_RDWR, 0644);</div><div class='del'>-        fprintf (stderr, "%s: (%p) %s\n", filename, fd, strerror (errno));</div><div class='add'>+    ret = glfs_lstat(fs, filename, &amp;sb);</div><div class='add'>+    fprintf(stderr, "%s: (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open (fs2, filename, O_RDWR);</div><div class='del'>-        fprintf (stderr, "%s: (%p) %s\n", filename, fd, strerror (errno));</div><div class='add'>+    fd = glfs_creat(fs, filename, O_RDWR, 0644);</div><div class='add'>+    fprintf(stderr, "%s: (%p) %s\n", filename, fd, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        sprintf (writebuf, "hi there\n");</div><div class='del'>-        ret = glfs_write (fd, writebuf, 32, 0);</div><div class='add'>+    fd2 = glfs_open(fs2, filename, O_RDWR);</div><div class='add'>+    fprintf(stderr, "%s: (%p) %s\n", filename, fd, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        glfs_lseek (fd2, 0, SEEK_SET);</div><div class='add'>+    sprintf(writebuf, "hi there\n");</div><div class='add'>+    ret = glfs_write(fd, writebuf, 32, 0);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_read (fd2, readbuf, 32, 0);</div><div class='add'>+    glfs_lseek(fd2, 0, SEEK_SET);</div><div class='ctx'> </div><div class='del'>-        printf ("read %d, %s", ret, readbuf);</div><div class='add'>+    ret = glfs_read(fd2, readbuf, 32, 0);</div><div class='ctx'> </div><div class='del'>-        glfs_close (fd);</div><div class='del'>-        glfs_close (fd2);</div><div class='add'>+    printf("read %d, %s", ret, readbuf);</div><div class='ctx'> </div><div class='del'>-        filename = "/filename3";</div><div class='del'>-        ret = glfs_mknod (fs, filename, S_IFIFO, 0);</div><div class='del'>-        fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno));</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+    glfs_close(fd2);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_lstat (fs, filename, &amp;sb);</div><div class='del'>-        fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno));</div><div class='add'>+    filename = "/filename3";</div><div class='add'>+    ret = glfs_mknod(fs, filename, S_IFIFO, 0);</div><div class='add'>+    fprintf(stderr, "%s: (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='add'>+    ret = glfs_lstat(fs, filename, &amp;sb);</div><div class='add'>+    fprintf(stderr, "%s: (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        ret = glfs_rename (fs, filename, "/filename4");</div><div class='del'>-        fprintf (stderr, "rename(%s): (%d) %s\n", filename, ret,</div><div class='del'>-                 strerror (errno));</div><div class='add'>+    ret = glfs_rename(fs, filename, "/filename4");</div><div class='add'>+    fprintf(stderr, "rename(%s): (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        ret = glfs_unlink (fs, "/filename4");</div><div class='del'>-        fprintf (stderr, "unlink(%s): (%d) %s\n", "/filename4", ret,</div><div class='del'>-                 strerror (errno));</div><div class='add'>+    ret = glfs_unlink(fs, "/filename4");</div><div class='add'>+    fprintf(stderr, "unlink(%s): (%d) %s\n", "/filename4", ret,</div><div class='add'>+            strerror(errno));</div><div class='ctx'> </div><div class='del'>-        filename = "/dirname2";</div><div class='del'>-        ret = glfs_mkdir (fs, filename, 0);</div><div class='del'>-        fprintf (stderr, "%s: (%d) %s\n", filename, ret, strerror (errno));</div><div class='add'>+    filename = "/dirname2";</div><div class='add'>+    ret = glfs_mkdir(fs, filename, 0);</div><div class='add'>+    fprintf(stderr, "%s: (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        ret = glfs_lstat (fs, filename, &amp;sb);</div><div class='del'>-        fprintf (stderr, "lstat(%s): (%d) %s\n", filename, ret, strerror (errno));</div><div class='add'>+    ret = glfs_lstat(fs, filename, &amp;sb);</div><div class='add'>+    fprintf(stderr, "lstat(%s): (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        ret = glfs_rmdir (fs, filename);</div><div class='del'>-        fprintf (stderr, "rmdir(%s): (%d) %s\n", filename, ret, strerror (errno));</div><div class='add'>+    ret = glfs_rmdir(fs, filename);</div><div class='add'>+    fprintf(stderr, "rmdir(%s): (%d) %s\n", filename, ret, strerror(errno));</div><div class='ctx'> </div><div class='del'>-        test_dirops (fs);</div><div class='add'>+    test_dirops(fs);</div><div class='ctx'> </div><div class='del'>-        test_xattr (fs);</div><div class='add'>+    test_xattr(fs);</div><div class='ctx'> </div><div class='del'>-        test_chdir (fs);</div><div class='add'>+    test_chdir(fs);</div><div class='ctx'> </div><div class='del'>-        test_handleops (argc, argv);</div><div class='del'>-        // done</div><div class='add'>+    test_handleops(argc, argv);</div><div class='add'>+    // done</div><div class='ctx'> </div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        glfs_fini (fs2);</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    glfs_fini(fs2);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c<br/>index 611cb14d9eb..f6786845a4f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/src/glfs-fops.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/src/glfs-fops.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/src/glfs-fops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/src/glfs-fops.c</a></div><div class='hunk'>@@ -33,23 +33,23 @@</div><div class='ctx'> </div><div class='ctx'> #define READDIRBUF_SIZE (sizeof(struct dirent) + GF_NAME_MAX + 1)</div><div class='ctx'> </div><div class='del'>-typedef void (*glfs_io_cbk34) (glfs_fd_t *fd, ssize_t ret, void *data);</div><div class='add'>+typedef void (*glfs_io_cbk34)(glfs_fd_t *fd, ssize_t ret, void *data);</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * This function will mark glfd for deletion and decrement its refcount.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-glfs_mark_glfd_for_deletion (struct glfs_fd *glfd)</div><div class='add'>+glfs_mark_glfd_for_deletion(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;glfd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                glfd-&gt;state = GLFD_CLOSE;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;glfd-&gt;lock);</div><div class='add'>+    LOCK(&amp;glfd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        glfd-&gt;state = GLFD_CLOSE;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;glfd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_REF_PUT (glfd);</div><div class='add'>+    GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is useful for all async fops. There is chance that glfd is</div><div class='hunk'>@@ -60,33 +60,33 @@ glfs_mark_glfd_for_deletion (struct glfs_fd *glfd)</div><div class='ctx'>  * _gf_false.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-glfs_is_glfd_still_valid (struct glfs_fd *glfd)</div><div class='add'>+glfs_is_glfd_still_valid(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t ret = _gf_false;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;glfd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (glfd-&gt;state != GLFD_CLOSE)</div><div class='del'>-                        ret = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;glfd-&gt;lock);</div><div class='add'>+    LOCK(&amp;glfd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (glfd-&gt;state != GLFD_CLOSE)</div><div class='add'>+            ret = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;glfd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glfd_set_state_bind (struct glfs_fd *glfd)</div><div class='add'>+glfd_set_state_bind(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;glfd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                glfd-&gt;state = GLFD_OPEN;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;glfd-&gt;lock);</div><div class='add'>+    LOCK(&amp;glfd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        glfd-&gt;state = GLFD_OPEN;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;glfd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        fd_bind (glfd-&gt;fd);</div><div class='del'>-        glfs_fd_bind (glfd);</div><div class='add'>+    fd_bind(glfd-&gt;fd);</div><div class='add'>+    glfs_fd_bind(glfd);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -97,4528 +97,4581 @@ glfd_set_state_bind (struct glfs_fd *glfd)</div><div class='ctx'>  * maintained by gfapi.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-glfs_get_upcall_cache_invalidation (struct gf_upcall *to_up_data,</div><div class='del'>-                                    struct gf_upcall *from_up_data)</div><div class='add'>+glfs_get_upcall_cache_invalidation(struct gf_upcall *to_up_data,</div><div class='add'>+                                   struct gf_upcall *from_up_data)</div><div class='ctx'> {</div><div class='add'>+    struct gf_upcall_cache_invalidation *ca_data = NULL;</div><div class='add'>+    struct gf_upcall_cache_invalidation *f_ca_data = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        struct gf_upcall_cache_invalidation *ca_data = NULL;</div><div class='del'>-        struct gf_upcall_cache_invalidation *f_ca_data = NULL;</div><div class='del'>-        int                                 ret      = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, to_up_data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, from_up_data, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, to_up_data, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, from_up_data, out);</div><div class='add'>+    f_ca_data = from_up_data-&gt;data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, f_ca_data, out);</div><div class='ctx'> </div><div class='del'>-        f_ca_data = from_up_data-&gt;data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, f_ca_data, out);</div><div class='add'>+    ca_data = GF_CALLOC(1, sizeof(*ca_data), glfs_mt_upcall_entry_t);</div><div class='ctx'> </div><div class='del'>-        ca_data = GF_CALLOC (1, sizeof(*ca_data),</div><div class='del'>-                            glfs_mt_upcall_entry_t);</div><div class='add'>+    if (!ca_data) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, API_MSG_ALLOC_FAILED,</div><div class='add'>+               "Upcall entry allocation failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ca_data) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_ALLOC_FAILED,</div><div class='del'>-                        "Upcall entry allocation failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        to_up_data-&gt;data = ca_data;</div><div class='add'>+    to_up_data-&gt;data = ca_data;</div><div class='ctx'> </div><div class='del'>-        ca_data-&gt;flags      = f_ca_data-&gt;flags;</div><div class='del'>-        ca_data-&gt;expire_time_attr = f_ca_data-&gt;expire_time_attr;</div><div class='del'>-        ca_data-&gt;stat       = f_ca_data-&gt;stat;</div><div class='del'>-        ca_data-&gt;p_stat     = f_ca_data-&gt;p_stat;</div><div class='del'>-        ca_data-&gt;oldp_stat  = f_ca_data-&gt;oldp_stat;</div><div class='add'>+    ca_data-&gt;flags = f_ca_data-&gt;flags;</div><div class='add'>+    ca_data-&gt;expire_time_attr = f_ca_data-&gt;expire_time_attr;</div><div class='add'>+    ca_data-&gt;stat = f_ca_data-&gt;stat;</div><div class='add'>+    ca_data-&gt;p_stat = f_ca_data-&gt;p_stat;</div><div class='add'>+    ca_data-&gt;oldp_stat = f_ca_data-&gt;oldp_stat;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_get_upcall_lease (struct gf_upcall *to_up_data,</div><div class='del'>-                             struct gf_upcall *from_up_data)</div><div class='add'>+glfs_get_upcall_lease(struct gf_upcall *to_up_data,</div><div class='add'>+                      struct gf_upcall *from_up_data)</div><div class='ctx'> {</div><div class='add'>+    struct gf_upcall_recall_lease *ca_data = NULL;</div><div class='add'>+    struct gf_upcall_recall_lease *f_ca_data = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        struct gf_upcall_recall_lease *ca_data = NULL;</div><div class='del'>-        struct gf_upcall_recall_lease *f_ca_data = NULL;</div><div class='del'>-        int                                 ret      = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, to_up_data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, from_up_data, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, to_up_data, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, from_up_data, out);</div><div class='add'>+    f_ca_data = from_up_data-&gt;data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, f_ca_data, out);</div><div class='ctx'> </div><div class='del'>-        f_ca_data = from_up_data-&gt;data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, f_ca_data, out);</div><div class='add'>+    ca_data = GF_CALLOC(1, sizeof(*ca_data), glfs_mt_upcall_entry_t);</div><div class='ctx'> </div><div class='del'>-        ca_data = GF_CALLOC (1, sizeof(*ca_data),</div><div class='del'>-                            glfs_mt_upcall_entry_t);</div><div class='add'>+    if (!ca_data) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, API_MSG_ALLOC_FAILED,</div><div class='add'>+               "Upcall entry allocation failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ca_data) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_ALLOC_FAILED,</div><div class='del'>-                        "Upcall entry allocation failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    to_up_data-&gt;data = ca_data;</div><div class='ctx'> </div><div class='del'>-        to_up_data-&gt;data = ca_data;</div><div class='add'>+    ca_data-&gt;lease_type = f_ca_data-&gt;lease_type;</div><div class='add'>+    gf_uuid_copy(ca_data-&gt;tid, f_ca_data-&gt;tid);</div><div class='add'>+    ca_data-&gt;dict = f_ca_data-&gt;dict;</div><div class='ctx'> </div><div class='del'>-        ca_data-&gt;lease_type   = f_ca_data-&gt;lease_type;</div><div class='del'>-        gf_uuid_copy (ca_data-&gt;tid, f_ca_data-&gt;tid);</div><div class='del'>-        ca_data-&gt;dict       = f_ca_data-&gt;dict;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-glfs_loc_link (loc_t *loc, struct iatt *iatt)</div><div class='add'>+glfs_loc_link(loc_t *loc, struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-        inode_t *old_inode = NULL;</div><div class='del'>-        uint64_t ctx_value = LOOKUP_NOT_NEEDED;</div><div class='del'>-</div><div class='del'>-	if (!loc-&gt;inode) {</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *old_inode = NULL;</div><div class='add'>+    uint64_t ctx_value = LOOKUP_NOT_NEEDED;</div><div class='ctx'> </div><div class='del'>-        old_inode = loc-&gt;inode;</div><div class='del'>-</div><div class='del'>-        /* If the inode already exists in the cache, the inode</div><div class='del'>-         * returned here points to the existing one. We need</div><div class='del'>-         * to update loc.inode accordingly.</div><div class='del'>-         */</div><div class='del'>-	loc-&gt;inode = inode_link (loc-&gt;inode, loc-&gt;parent, loc-&gt;name, iatt);</div><div class='del'>-	if (loc-&gt;inode) {</div><div class='del'>-                inode_ctx_set (loc-&gt;inode, THIS, &amp;ctx_value);</div><div class='del'>-		inode_lookup (loc-&gt;inode);</div><div class='del'>-                inode_unref (old_inode);</div><div class='del'>-		ret = 0;</div><div class='del'>-	} else {</div><div class='del'>-		ret = -1;</div><div class='del'>-	}</div><div class='add'>+    if (!loc-&gt;inode) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_inode = loc-&gt;inode;</div><div class='add'>+</div><div class='add'>+    /* If the inode already exists in the cache, the inode</div><div class='add'>+     * returned here points to the existing one. We need</div><div class='add'>+     * to update loc.inode accordingly.</div><div class='add'>+     */</div><div class='add'>+    loc-&gt;inode = inode_link(loc-&gt;inode, loc-&gt;parent, loc-&gt;name, iatt);</div><div class='add'>+    if (loc-&gt;inode) {</div><div class='add'>+        inode_ctx_set(loc-&gt;inode, THIS, &amp;ctx_value);</div><div class='add'>+        inode_lookup(loc-&gt;inode);</div><div class='add'>+        inode_unref(old_inode);</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-glfs_iatt_to_stat (struct glfs *fs, struct iatt *iatt, struct stat *stat)</div><div class='add'>+glfs_iatt_to_stat(struct glfs *fs, struct iatt *iatt, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-	iatt_to_stat (iatt, stat);</div><div class='del'>-	stat-&gt;st_dev = fs-&gt;dev_id;</div><div class='add'>+    iatt_to_stat(iatt, stat);</div><div class='add'>+    stat-&gt;st_dev = fs-&gt;dev_id;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_loc_unlink (loc_t *loc)</div><div class='add'>+glfs_loc_unlink(loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-	inode_unlink (loc-&gt;inode, loc-&gt;parent, loc-&gt;name);</div><div class='add'>+    inode_unlink(loc-&gt;inode, loc-&gt;parent, loc-&gt;name);</div><div class='ctx'> </div><div class='del'>-	/* since glfs_h_* objects hold a reference to inode</div><div class='del'>-	 * it is safe to keep lookup count to '0' */</div><div class='del'>-	if (!inode_has_dentry (loc-&gt;inode))</div><div class='del'>-		inode_forget (loc-&gt;inode, 0);</div><div class='add'>+    /* since glfs_h_* objects hold a reference to inode</div><div class='add'>+     * it is safe to keep lookup count to '0' */</div><div class='add'>+    if (!inode_has_dentry(loc-&gt;inode))</div><div class='add'>+        inode_forget(loc-&gt;inode, 0);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_fd *</div><div class='del'>-pub_glfs_open (struct glfs *fs, const char *path, int flags)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	struct glfs_fd  *glfd = NULL;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-        dict_t          *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfd = glfs_fd_new (fs);</div><div class='del'>-	if (!glfd)</div><div class='del'>-		goto out;</div><div class='add'>+pub_glfs_open(struct glfs *fs, const char *path, int flags)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_fd_new(fs);</div><div class='add'>+    if (!glfd)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='del'>-</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (IA_ISDIR (iatt.ia_type)) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EISDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!IA_ISREG (iatt.ia_type)) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (glfd-&gt;fd) {</div><div class='del'>-		/* Retry. Safe to touch glfd-&gt;fd as we</div><div class='del'>-		   still have not glfs_fd_bind() yet.</div><div class='del'>-		*/</div><div class='del'>-		fd_unref (glfd-&gt;fd);</div><div class='del'>-		glfd-&gt;fd = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfd-&gt;fd = fd_create (loc.inode, getpid());</div><div class='del'>-	if (!glfd-&gt;fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-        glfd-&gt;fd-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	ret = syncop_open (subvol, &amp;loc, flags, glfd-&gt;fd, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    if (IA_ISDIR(iatt.ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EISDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISREG(iatt.ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfd-&gt;fd) {</div><div class='add'>+        /* Retry. Safe to touch glfd-&gt;fd as we</div><div class='add'>+           still have not glfs_fd_bind() yet.</div><div class='add'>+        */</div><div class='add'>+        fd_unref(glfd-&gt;fd);</div><div class='add'>+        glfd-&gt;fd = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd-&gt;fd = fd_create(loc.inode, getpid());</div><div class='add'>+    if (!glfd-&gt;fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    glfd-&gt;fd-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_open(subvol, &amp;loc, flags, glfd-&gt;fd, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	if (ret &amp;&amp; glfd) {</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-		glfd = NULL;</div><div class='del'>-	} else if (glfd) {</div><div class='del'>-                glfd_set_state_bind (glfd);</div><div class='del'>-	}</div><div class='add'>+    if (ret &amp;&amp; glfd) {</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+        glfd = NULL;</div><div class='add'>+    } else if (glfd) {</div><div class='add'>+        glfd_set_state_bind(glfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return glfd;</div><div class='add'>+    return glfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_open, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_close (struct glfs_fd *glfd)</div><div class='del'>-{</div><div class='del'>-	xlator_t  *subvol = NULL;</div><div class='del'>-	int        ret = -1;</div><div class='del'>-	fd_t      *fd = NULL;</div><div class='del'>-	struct glfs *fs = NULL;</div><div class='del'>-        dict_t    *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (glfd-&gt;lk_owner.len != 0) {</div><div class='del'>-                ret = syncopctx_setfslkowner (&amp;glfd-&gt;lk_owner);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='add'>+pub_glfs_close(struct glfs_fd *glfd)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfd-&gt;lk_owner.len != 0) {</div><div class='add'>+        ret = syncopctx_setfslkowner(&amp;glfd-&gt;lk_owner);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	ret = syncop_flush (subvol, fd, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_flush(subvol, fd, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	fs = glfd-&gt;fs;</div><div class='add'>+    fs = glfd-&gt;fs;</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='add'>+    glfs_mark_glfd_for_deletion(glfd);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        glfs_mark_glfd_for_deletion (glfd);</div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='del'>-</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_close, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_lstat (struct glfs *fs, const char *path, struct stat *stat)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_lstat(struct glfs *fs, const char *path, struct stat *stat)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0 &amp;&amp; stat)</div><div class='del'>-		glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+    if (ret == 0 &amp;&amp; stat)</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lstat, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_stat (struct glfs *fs, const char *path, struct stat *stat)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_stat(struct glfs *fs, const char *path, struct stat *stat)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0 &amp;&amp; stat)</div><div class='del'>-		glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+    if (ret == 0 &amp;&amp; stat)</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_stat, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fstat (struct glfs_fd *glfd, struct stat *stat)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='add'>+pub_glfs_fstat(struct glfs_fd *glfd, struct stat *stat)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fstat(subvol, fd, &amp;iatt, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret == 0 &amp;&amp; stat)</div><div class='add'>+        glfs_iatt_to_stat(glfd-&gt;fs, &amp;iatt, stat);</div><div class='add'>+out:</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        GF_REF_GET (glfd);</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+invalid_fs:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fstat, 3.4.0);</div><div class='ctx'> </div><div class='del'>-	ret = syncop_fstat (subvol, fd, &amp;iatt, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+struct glfs_fd *</div><div class='add'>+pub_glfs_creat(struct glfs *fs, const char *path, int flags, mode_t mode)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_fd_new(fs);</div><div class='add'>+    if (!glfd)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* This must be glfs_resolve() and NOT glfs_lresolve().</div><div class='add'>+       That is because open("name", O_CREAT) where "name"</div><div class='add'>+       is a danging symlink must create the dangling</div><div class='add'>+       destination.</div><div class='add'>+    */</div><div class='add'>+retry:</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0 &amp;&amp; stat)</div><div class='del'>-		glfs_iatt_to_stat (glfd-&gt;fs, &amp;iatt, stat);</div><div class='del'>-out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='add'>+        /* Any other type of error is fatal */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='add'>+        /* The parent directory or an ancestor even</div><div class='add'>+           higher does not exist</div><div class='add'>+        */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-invalid_fs:</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+    if (loc.inode) {</div><div class='add'>+        if (flags &amp; O_EXCL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = EEXIST;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fstat, 3.4.0);</div><div class='add'>+        if (IA_ISDIR(iatt.ia_type)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = EISDIR;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        if (!IA_ISREG(iatt.ia_type)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ENOENT) {</div><div class='add'>+        loc.inode = inode_new(loc.parent-&gt;table);</div><div class='add'>+        if (!loc.inode) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-struct glfs_fd *</div><div class='del'>-pub_glfs_creat (struct glfs *fs, const char *path, int flags, mode_t mode)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	struct glfs_fd  *glfd = NULL;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	uuid_t           gfid;</div><div class='del'>-	dict_t          *xattr_req = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	xattr_req = dict_new ();</div><div class='del'>-	if (!xattr_req) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gf_uuid_generate (gfid);</div><div class='del'>-	ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-	if (ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfd = glfs_fd_new (fs);</div><div class='del'>-	if (!glfd)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	/* This must be glfs_resolve() and NOT glfs_lresolve().</div><div class='del'>-	   That is because open("name", O_CREAT) where "name"</div><div class='del'>-	   is a danging symlink must create the dangling</div><div class='del'>-	   destination.</div><div class='del'>-	*/</div><div class='del'>-retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='del'>-</div><div class='del'>-	if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='del'>-		/* Any other type of error is fatal */</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='del'>-		/* The parent directory or an ancestor even</div><div class='del'>-		   higher does not exist</div><div class='del'>-		*/</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (loc.inode) {</div><div class='del'>-		if (flags &amp; O_EXCL) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			errno = EEXIST;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (IA_ISDIR (iatt.ia_type)) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			errno = EISDIR;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!IA_ISREG (iatt.ia_type)) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			errno = EINVAL;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ENOENT) {</div><div class='del'>-		loc.inode = inode_new (loc.parent-&gt;table);</div><div class='del'>-		if (!loc.inode) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			errno = ENOMEM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (glfd-&gt;fd) {</div><div class='del'>-		/* Retry. Safe to touch glfd-&gt;fd as we</div><div class='del'>-		   still have not glfs_fd_bind() yet.</div><div class='del'>-		*/</div><div class='del'>-		fd_unref (glfd-&gt;fd);</div><div class='del'>-		glfd-&gt;fd = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfd-&gt;fd = fd_create (loc.inode, getpid());</div><div class='del'>-	if (!glfd-&gt;fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-        glfd-&gt;fd-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-        if (get_fop_attr_thrd_key (&amp;xattr_req))</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-	if (ret == 0) {</div><div class='del'>-		ret = syncop_open (subvol, &amp;loc, flags, glfd-&gt;fd, xattr_req, NULL);</div><div class='del'>-                DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	} else {</div><div class='del'>-		ret = syncop_create (subvol, &amp;loc, flags, mode, glfd-&gt;fd,</div><div class='del'>-				     &amp;iatt, xattr_req, NULL);</div><div class='del'>-                DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='del'>-</div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='add'>+    if (glfd-&gt;fd) {</div><div class='add'>+        /* Retry. Safe to touch glfd-&gt;fd as we</div><div class='add'>+           still have not glfs_fd_bind() yet.</div><div class='add'>+        */</div><div class='add'>+        fd_unref(glfd-&gt;fd);</div><div class='add'>+        glfd-&gt;fd = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd-&gt;fd = fd_create(loc.inode, getpid());</div><div class='add'>+    if (!glfd-&gt;fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    glfd-&gt;fd-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    if (get_fop_attr_thrd_key(&amp;xattr_req))</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = syncop_open(subvol, &amp;loc, flags, glfd-&gt;fd, xattr_req, NULL);</div><div class='add'>+        DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    } else {</div><div class='add'>+        ret = syncop_create(subvol, &amp;loc, flags, mode, glfd-&gt;fd, &amp;iatt,</div><div class='add'>+                            xattr_req, NULL);</div><div class='add'>+        DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='add'>+</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	if (xattr_req)</div><div class='del'>-		dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	if (ret &amp;&amp; glfd) {</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-		glfd = NULL;</div><div class='del'>-	} else if (glfd) {</div><div class='del'>-                glfd_set_state_bind (glfd);</div><div class='del'>-	}</div><div class='add'>+    if (ret &amp;&amp; glfd) {</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+        glfd = NULL;</div><div class='add'>+    } else if (glfd) {</div><div class='add'>+        glfd_set_state_bind(glfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return glfd;</div><div class='add'>+    return glfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_creat, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_SEEK_HOLE</div><div class='ctx'> static int</div><div class='del'>-glfs_seek (struct glfs_fd *glfd, off_t offset, int whence)</div><div class='add'>+glfs_seek(struct glfs_fd *glfd, off_t offset, int whence)</div><div class='ctx'> {</div><div class='del'>-        int               ret             = -1;</div><div class='del'>-        xlator_t         *subvol          = NULL;</div><div class='del'>-        fd_t             *fd              = NULL;</div><div class='del'>-        gf_seek_what_t    what            = 0;</div><div class='del'>-        off_t             off             = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    gf_seek_what_t what = 0;</div><div class='add'>+    off_t off = -1;</div><div class='ctx'> </div><div class='del'>-        switch (whence) {</div><div class='add'>+    switch (whence) {</div><div class='ctx'>         case SEEK_DATA:</div><div class='del'>-                what = GF_SEEK_DATA;</div><div class='del'>-                break;</div><div class='add'>+            what = GF_SEEK_DATA;</div><div class='add'>+            break;</div><div class='ctx'>         case SEEK_HOLE:</div><div class='del'>-                what = GF_SEEK_HOLE;</div><div class='del'>-                break;</div><div class='add'>+            what = GF_SEEK_HOLE;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                /* other SEEK_* do not make sense, all operations get an offset</div><div class='del'>-                 * and the position in the fd is not tracked */</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_seek (subvol, fd, offset, what, NULL, &amp;off);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret != -1)</div><div class='del'>-                glfd-&gt;offset = off;</div><div class='add'>+            /* other SEEK_* do not make sense, all operations get an offset</div><div class='add'>+             * and the position in the fd is not tracked */</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_seek(subvol, fd, offset, what, NULL, &amp;off);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        glfd-&gt;offset = off;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='del'>-pub_glfs_lseek (struct glfs_fd *glfd, off_t offset, int whence)</div><div class='del'>-{</div><div class='del'>-	struct stat sb  = {0, };</div><div class='del'>-	int         ret = -1;</div><div class='del'>-        off_t       off = -1;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	switch (whence) {</div><div class='del'>-	case SEEK_SET:</div><div class='del'>-		glfd-&gt;offset = offset;</div><div class='del'>-                ret = 0;</div><div class='del'>-		break;</div><div class='del'>-	case SEEK_CUR:</div><div class='del'>-		glfd-&gt;offset += offset;</div><div class='del'>-                ret = 0;</div><div class='del'>-		break;</div><div class='del'>-	case SEEK_END:</div><div class='del'>-		ret = pub_glfs_fstat (glfd, &amp;sb);</div><div class='del'>-		if (ret) {</div><div class='del'>-			/* seek cannot fail :O */</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-		glfd-&gt;offset = sb.st_size + offset;</div><div class='del'>-		break;</div><div class='add'>+pub_glfs_lseek(struct glfs_fd *glfd, off_t offset, int whence)</div><div class='add'>+{</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    off_t off = -1;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    switch (whence) {</div><div class='add'>+        case SEEK_SET:</div><div class='add'>+            glfd-&gt;offset = offset;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+        case SEEK_CUR:</div><div class='add'>+            glfd-&gt;offset += offset;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+        case SEEK_END:</div><div class='add'>+            ret = pub_glfs_fstat(glfd, &amp;sb);</div><div class='add'>+            if (ret) {</div><div class='add'>+                /* seek cannot fail :O */</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            glfd-&gt;offset = sb.st_size + offset;</div><div class='add'>+            break;</div><div class='ctx'> #ifdef HAVE_SEEK_HOLE</div><div class='ctx'>         case SEEK_DATA:</div><div class='ctx'>         case SEEK_HOLE:</div><div class='del'>-                ret = glfs_seek (glfd, offset, whence);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfs_seek(glfd, offset, whence);</div><div class='add'>+            break;</div><div class='ctx'> #endif</div><div class='ctx'>         default:</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-	}</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-        if (ret != -1)</div><div class='del'>-                off = glfd-&gt;offset;</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        off = glfd-&gt;offset;</div><div class='ctx'> </div><div class='del'>-        return off;</div><div class='add'>+    return off;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lseek, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static ssize_t</div><div class='del'>-glfs_preadv_common (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                    int iovcnt, off_t offset, int flags, struct stat *poststat)</div><div class='del'>-{</div><div class='del'>-	xlator_t       *subvol = NULL;</div><div class='del'>-	ssize_t         ret = -1;</div><div class='del'>-	ssize_t         size = -1;</div><div class='del'>-	struct iovec   *iov = NULL;</div><div class='del'>-	int             cnt = 0;</div><div class='del'>-	struct iobref  *iobref = NULL;</div><div class='del'>-	fd_t           *fd = NULL;</div><div class='del'>-        struct iatt     iatt = {0, };</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	size = iov_length (iovec, iovcnt);</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+glfs_preadv_common(struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt,</div><div class='add'>+                   off_t offset, int flags, struct stat *poststat)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    ssize_t size = -1;</div><div class='add'>+    struct iovec *iov = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_readv (subvol, fd, size, offset, 0, &amp;iov, &amp;cnt, &amp;iobref,</div><div class='del'>-                            &amp;iatt, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    size = iov_length(iovec, iovcnt);</div><div class='ctx'> </div><div class='del'>-        if (ret &gt;= 0 &amp;&amp; poststat)</div><div class='del'>-                glfs_iatt_to_stat (glfd-&gt;fs, &amp;iatt, poststat);</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='ctx'> </div><div class='del'>-	if (ret &lt;= 0)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = syncop_readv(subvol, fd, size, offset, 0, &amp;iov, &amp;cnt, &amp;iobref, &amp;iatt,</div><div class='add'>+                       fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	size = iov_copy (iovec, iovcnt, iov, cnt); /* FIXME!!! */</div><div class='add'>+    if (ret &gt;= 0 &amp;&amp; poststat)</div><div class='add'>+        glfs_iatt_to_stat(glfd-&gt;fs, &amp;iatt, poststat);</div><div class='ctx'> </div><div class='del'>-	glfd-&gt;offset = (offset + size);</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = size;</div><div class='add'>+    size = iov_copy(iovec, iovcnt, iov, cnt); /* FIXME!!! */</div><div class='add'>+</div><div class='add'>+    glfd-&gt;offset = (offset + size);</div><div class='add'>+</div><div class='add'>+    ret = size;</div><div class='ctx'> out:</div><div class='del'>-        if (iov)</div><div class='del'>-                GF_FREE (iov);</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iov)</div><div class='add'>+        GF_FREE(iov);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_preadv (struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt,</div><div class='del'>-                 off_t offset, int flags)</div><div class='add'>+pub_glfs_preadv(struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt,</div><div class='add'>+                off_t offset, int flags)</div><div class='ctx'> {</div><div class='del'>-        return glfs_preadv_common (glfd, iovec, iovcnt, offset, flags, NULL);</div><div class='add'>+    return glfs_preadv_common(glfd, iovec, iovcnt, offset, flags, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_preadv, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_read (struct glfs_fd *glfd, void *buf, size_t count, int flags)</div><div class='add'>+pub_glfs_read(struct glfs_fd *glfd, void *buf, size_t count, int flags)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = pub_glfs_preadv (glfd, &amp;iov, 1, glfd-&gt;offset, flags);</div><div class='add'>+    ret = pub_glfs_preadv(glfd, &amp;iov, 1, glfd-&gt;offset, flags);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_read, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_pread34 (struct glfs_fd *glfd, void *buf, size_t count, off_t offset,</div><div class='del'>-                  int flags)</div><div class='add'>+pub_glfs_pread34(struct glfs_fd *glfd, void *buf, size_t count, off_t offset,</div><div class='add'>+                 int flags)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = pub_glfs_preadv (glfd, &amp;iov, 1, offset, flags);</div><div class='add'>+    ret = pub_glfs_preadv(glfd, &amp;iov, 1, offset, flags);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_pread34, glfs_pread, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_pread (struct glfs_fd *glfd, void *buf, size_t count, off_t offset,</div><div class='del'>-                int flags, struct stat *poststat)</div><div class='add'>+pub_glfs_pread(struct glfs_fd *glfd, void *buf, size_t count, off_t offset,</div><div class='add'>+               int flags, struct stat *poststat)</div><div class='ctx'> {</div><div class='del'>-        struct iovec iov = {0, };</div><div class='del'>-        ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_preadv_common (glfd, &amp;iov, 1, offset, flags, poststat);</div><div class='add'>+    ret = glfs_preadv_common(glfd, &amp;iov, 1, offset, flags, poststat);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pread, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_readv (struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='del'>-                int flags)</div><div class='add'>+pub_glfs_readv(struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='add'>+               int flags)</div><div class='ctx'> {</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = pub_glfs_preadv (glfd, iov, count, glfd-&gt;offset, flags);</div><div class='add'>+    ret = pub_glfs_preadv(glfd, iov, count, glfd-&gt;offset, flags);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readv, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_io {</div><div class='del'>-	struct glfs_fd      *glfd;</div><div class='del'>-	int                  op;</div><div class='del'>-	off_t                offset;</div><div class='del'>-	struct iovec        *iov;</div><div class='del'>-	int                  count;</div><div class='del'>-	int                  flags;</div><div class='del'>-	gf_boolean_t         oldcb;</div><div class='del'>-	union {</div><div class='del'>-		glfs_io_cbk34      fn34;</div><div class='del'>-		glfs_io_cbk        fn;</div><div class='del'>-	};</div><div class='del'>-	void                *data;</div><div class='add'>+    struct glfs_fd *glfd;</div><div class='add'>+    int op;</div><div class='add'>+    off_t offset;</div><div class='add'>+    struct iovec *iov;</div><div class='add'>+    int count;</div><div class='add'>+    int flags;</div><div class='add'>+    gf_boolean_t oldcb;</div><div class='add'>+    union {</div><div class='add'>+        glfs_io_cbk34 fn34;</div><div class='add'>+        glfs_io_cbk fn;</div><div class='add'>+    };</div><div class='add'>+    void *data;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_io_async_cbk (int op_ret, int op_errno, call_frame_t *frame,</div><div class='del'>-                   void *cookie, struct iovec *iovec, int count,</div><div class='del'>-                   struct iatt *prebuf, struct iatt *postbuf)</div><div class='del'>-{</div><div class='del'>-        struct glfs_io *gio = NULL;</div><div class='del'>-        xlator_t       *subvol = NULL;</div><div class='del'>-        struct glfs    *fs = NULL;</div><div class='del'>-        struct glfs_fd *glfd = NULL;</div><div class='del'>-        int             ret  = -1;</div><div class='del'>-        struct stat     prestat = {}, *prestatp = NULL;</div><div class='del'>-        struct stat     poststat = {}, *poststatp = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", frame, inval);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", cookie, inval);</div><div class='del'>-</div><div class='del'>-        gio = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        subvol = cookie;</div><div class='del'>-        glfd = gio-&gt;glfd;</div><div class='del'>-        fs = glfd-&gt;fs;</div><div class='del'>-</div><div class='del'>-        if (!glfs_is_glfd_still_valid (glfd))</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (gio-&gt;op == GF_FOP_READ) {</div><div class='del'>-                if (!iovec) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                op_ret = iov_copy (gio-&gt;iov, gio-&gt;count, iovec, count);</div><div class='del'>-                glfd-&gt;offset = gio-&gt;offset + op_ret;</div><div class='del'>-        } else if (gio-&gt;op == GF_FOP_WRITE) {</div><div class='del'>-                glfd-&gt;offset = gio-&gt;offset + gio-&gt;iov-&gt;iov_len;</div><div class='add'>+glfs_io_async_cbk(int op_ret, int op_errno, call_frame_t *frame, void *cookie,</div><div class='add'>+                  struct iovec *iovec, int count, struct iatt *prebuf,</div><div class='add'>+                  struct iatt *postbuf)</div><div class='add'>+{</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat prestat = {}, *prestatp = NULL;</div><div class='add'>+    struct stat poststat = {}, *poststatp = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", frame, inval);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", cookie, inval);</div><div class='add'>+</div><div class='add'>+    gio = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    subvol = cookie;</div><div class='add'>+    glfd = gio-&gt;glfd;</div><div class='add'>+    fs = glfd-&gt;fs;</div><div class='add'>+</div><div class='add'>+    if (!glfs_is_glfd_still_valid(glfd))</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (gio-&gt;op == GF_FOP_READ) {</div><div class='add'>+        if (!iovec) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        errno = op_errno;</div><div class='del'>-        if (gio-&gt;oldcb) {</div><div class='del'>-                gio-&gt;fn34 (gio-&gt;glfd, op_ret, gio-&gt;data);</div><div class='del'>-        } else {</div><div class='del'>-                if (prebuf) {</div><div class='del'>-                       prestatp = &amp;prestat;</div><div class='del'>-                       glfs_iatt_to_stat (fs, prebuf, prestatp);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (postbuf) {</div><div class='del'>-                       poststatp = &amp;poststat;</div><div class='del'>-                       glfs_iatt_to_stat (fs, postbuf, poststatp);</div><div class='del'>-                }</div><div class='add'>+        op_ret = iov_copy(gio-&gt;iov, gio-&gt;count, iovec, count);</div><div class='add'>+        glfd-&gt;offset = gio-&gt;offset + op_ret;</div><div class='add'>+    } else if (gio-&gt;op == GF_FOP_WRITE) {</div><div class='add'>+        glfd-&gt;offset = gio-&gt;offset + gio-&gt;iov-&gt;iov_len;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gio-&gt;fn (gio-&gt;glfd, op_ret, prestatp, poststatp, gio-&gt;data);</div><div class='add'>+out:</div><div class='add'>+    errno = op_errno;</div><div class='add'>+    if (gio-&gt;oldcb) {</div><div class='add'>+        gio-&gt;fn34(gio-&gt;glfd, op_ret, gio-&gt;data);</div><div class='add'>+    } else {</div><div class='add'>+        if (prebuf) {</div><div class='add'>+            prestatp = &amp;prestat;</div><div class='add'>+            glfs_iatt_to_stat(fs, prebuf, prestatp);</div><div class='ctx'>         }</div><div class='del'>-err:</div><div class='del'>-        fd_unref (glfd-&gt;fd);</div><div class='del'>-        /* Since the async operation is complete</div><div class='del'>-         * release the ref taken during the start</div><div class='del'>-         * of async operation</div><div class='del'>-         */</div><div class='del'>-        GF_REF_PUT (glfd);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (gio-&gt;iov);</div><div class='del'>-        GF_FREE (gio);</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+        if (postbuf) {</div><div class='add'>+            poststatp = &amp;poststat;</div><div class='add'>+            glfs_iatt_to_stat(fs, postbuf, poststatp);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        gio-&gt;fn(gio-&gt;glfd, op_ret, prestatp, poststatp, gio-&gt;data);</div><div class='add'>+    }</div><div class='add'>+err:</div><div class='add'>+    fd_unref(glfd-&gt;fd);</div><div class='add'>+    /* Since the async operation is complete</div><div class='add'>+     * release the ref taken during the start</div><div class='add'>+     * of async operation</div><div class='add'>+     */</div><div class='add'>+    GF_REF_PUT(glfd);</div><div class='add'>+</div><div class='add'>+    GF_FREE(gio-&gt;iov);</div><div class='add'>+    GF_FREE(gio);</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> inval:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_preadv_async_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno, struct iovec *iovec,</div><div class='del'>-                       int count, struct iatt *stbuf, struct iobref *iobref,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+glfs_preadv_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, struct iovec *iovec, int count,</div><div class='add'>+                      struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glfs_io_async_cbk (op_ret, op_errno, frame, cookie, iovec, count,</div><div class='del'>-                           NULL, stbuf);</div><div class='add'>+    glfs_io_async_cbk(op_ret, op_errno, frame, cookie, iovec, count, NULL,</div><div class='add'>+                      stbuf);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_preadv_async_common (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                          int count, off_t offset, int flags,</div><div class='del'>-                          gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='add'>+glfs_preadv_async_common(struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='add'>+                         int count, off_t offset, int flags, gf_boolean_t oldcb,</div><div class='add'>+                         glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_io *gio = NULL;</div><div class='del'>-	int             ret = 0;</div><div class='del'>-	call_frame_t   *frame = NULL;</div><div class='del'>-	xlator_t       *subvol = NULL;</div><div class='del'>-	struct glfs    *fs = NULL;</div><div class='del'>-	fd_t           *fd = NULL;</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fs = glfd-&gt;fs;</div><div class='del'>-</div><div class='del'>-	frame = syncop_create_frame (THIS);</div><div class='del'>-	if (!frame) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gio = GF_CALLOC (1, sizeof (*gio), glfs_mt_glfs_io_t);</div><div class='del'>-	if (!gio) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gio-&gt;iov = iov_dup (iovec, count);</div><div class='del'>-	if (!gio-&gt;iov) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gio-&gt;op     = GF_FOP_READ;</div><div class='del'>-	gio-&gt;glfd   = glfd;</div><div class='del'>-	gio-&gt;count  = count;</div><div class='del'>-	gio-&gt;offset = offset;</div><div class='del'>-	gio-&gt;flags  = flags;</div><div class='del'>-	gio-&gt;oldcb  = oldcb;</div><div class='del'>-	gio-&gt;fn     = fn;</div><div class='del'>-	gio-&gt;data   = data;</div><div class='del'>-</div><div class='del'>-	frame-&gt;local = gio;</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, glfs_preadv_async_cbk, subvol, subvol,</div><div class='del'>-			   subvol-&gt;fops-&gt;readv, fd, iov_length (iovec, count),</div><div class='del'>-			   offset, flags, fop_attr);</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = glfd-&gt;fs;</div><div class='add'>+</div><div class='add'>+    frame = syncop_create_frame(THIS);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio = GF_CALLOC(1, sizeof(*gio), glfs_mt_glfs_io_t);</div><div class='add'>+    if (!gio) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;iov = iov_dup(iovec, count);</div><div class='add'>+    if (!gio-&gt;iov) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;op = GF_FOP_READ;</div><div class='add'>+    gio-&gt;glfd = glfd;</div><div class='add'>+    gio-&gt;count = count;</div><div class='add'>+    gio-&gt;offset = offset;</div><div class='add'>+    gio-&gt;flags = flags;</div><div class='add'>+    gio-&gt;oldcb = oldcb;</div><div class='add'>+    gio-&gt;fn = fn;</div><div class='add'>+    gio-&gt;data = data;</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = gio;</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, glfs_preadv_async_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;readv, fd, iov_length(iovec, count), offset,</div><div class='add'>+                      flags, fop_attr);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd)</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                if (glfd)</div><div class='del'>-                        GF_REF_PUT (glfd);</div><div class='del'>-                if (gio) {</div><div class='del'>-                        GF_FREE (gio-&gt;iov);</div><div class='del'>-                        GF_FREE (gio);</div><div class='del'>-                }</div><div class='del'>-                if (frame) {</div><div class='del'>-                        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-                }</div><div class='del'>-		glfs_subvol_done (fs, subvol);</div><div class='del'>-	}</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd)</div><div class='add'>+            fd_unref(fd);</div><div class='add'>+        if (glfd)</div><div class='add'>+            GF_REF_PUT(glfd);</div><div class='add'>+        if (gio) {</div><div class='add'>+            GF_FREE(gio-&gt;iov);</div><div class='add'>+            GF_FREE(gio);</div><div class='add'>+        }</div><div class='add'>+        if (frame) {</div><div class='add'>+            STACK_DESTROY(frame-&gt;root);</div><div class='add'>+        }</div><div class='add'>+        glfs_subvol_done(fs, subvol);</div><div class='add'>+    }</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_preadv_async34 (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                         int count, off_t offset, int flags, glfs_io_cbk34 fn,</div><div class='del'>-                         void *data)</div><div class='add'>+pub_glfs_preadv_async34(struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='add'>+                        int count, off_t offset, int flags, glfs_io_cbk34 fn,</div><div class='add'>+                        void *data)</div><div class='ctx'> {</div><div class='del'>-       return glfs_preadv_async_common (glfd, iovec, count, offset, flags,</div><div class='del'>-                                        _gf_true, (void *)fn, data);</div><div class='add'>+    return glfs_preadv_async_common(glfd, iovec, count, offset, flags, _gf_true,</div><div class='add'>+                                    (void *)fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_preadv_async34, glfs_preadv_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_preadv_async (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                       int count, off_t offset, int flags, glfs_io_cbk fn,</div><div class='del'>-                       void *data)</div><div class='add'>+pub_glfs_preadv_async(struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='add'>+                      int count, off_t offset, int flags, glfs_io_cbk fn,</div><div class='add'>+                      void *data)</div><div class='ctx'> {</div><div class='del'>-       return glfs_preadv_async_common (glfd, iovec, count, offset, flags,</div><div class='del'>-                                        _gf_false, fn, data);</div><div class='add'>+    return glfs_preadv_async_common(glfd, iovec, count, offset, flags,</div><div class='add'>+                                    _gf_false, fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_preadv_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_read_async34 (struct glfs_fd *glfd, void *buf, size_t count, int flags,</div><div class='del'>-                       glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_read_async34(struct glfs_fd *glfd, void *buf, size_t count, int flags,</div><div class='add'>+                      glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_preadv_async_common (glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='del'>-                                        _gf_true, (void *)fn, data);</div><div class='add'>+    ret = glfs_preadv_async_common(glfd, &amp;iov, 1, glfd-&gt;offset, flags, _gf_true,</div><div class='add'>+                                   (void *)fn, data);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_read_async34, glfs_read_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_read_async (struct glfs_fd *glfd, void *buf, size_t count, int flags,</div><div class='del'>-                     glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_read_async(struct glfs_fd *glfd, void *buf, size_t count, int flags,</div><div class='add'>+                    glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_preadv_async_common (glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='del'>-                                        _gf_false, fn, data);</div><div class='add'>+    ret = glfs_preadv_async_common(glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='add'>+                                   _gf_false, fn, data);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_read_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_pread_async34 (struct glfs_fd *glfd, void *buf, size_t count,</div><div class='del'>-                        off_t offset, int flags, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_pread_async34(struct glfs_fd *glfd, void *buf, size_t count,</div><div class='add'>+                       off_t offset, int flags, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_preadv_async_common (glfd, &amp;iov, 1, offset, flags,</div><div class='del'>-                                        _gf_true, (void *)fn, data);</div><div class='add'>+    ret = glfs_preadv_async_common(glfd, &amp;iov, 1, offset, flags, _gf_true,</div><div class='add'>+                                   (void *)fn, data);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_pread_async34, glfs_pread_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_pread_async (struct glfs_fd *glfd, void *buf, size_t count,</div><div class='del'>-                      off_t offset, int flags, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_pread_async(struct glfs_fd *glfd, void *buf, size_t count,</div><div class='add'>+                     off_t offset, int flags, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct iovec iov = {0, };</div><div class='del'>-        ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_preadv_async_common (glfd, &amp;iov, 1, offset, flags,</div><div class='del'>-                                        _gf_false, fn, data);</div><div class='add'>+    ret = glfs_preadv_async_common(glfd, &amp;iov, 1, offset, flags, _gf_false, fn,</div><div class='add'>+                                   data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pread_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_readv_async34 (struct glfs_fd *glfd, const struct iovec *iov,</div><div class='del'>-                        int count, int flags, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_readv_async34(struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='add'>+                       int flags, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_preadv_async_common (glfd, iov, count, glfd-&gt;offset, flags,</div><div class='del'>-                                        _gf_true, (void *)fn, data);</div><div class='del'>-	return ret;</div><div class='add'>+    ret = glfs_preadv_async_common(glfd, iov, count, glfd-&gt;offset, flags,</div><div class='add'>+                                   _gf_true, (void *)fn, data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_readv_async34, glfs_readv_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_readv_async (struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='del'>-                      int flags, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_readv_async(struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='add'>+                     int flags, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_preadv_async_common (glfd, iov, count, glfd-&gt;offset, flags,</div><div class='del'>-                                        _gf_false, fn, data);</div><div class='del'>-	return ret;</div><div class='add'>+    ret = glfs_preadv_async_common(glfd, iov, count, glfd-&gt;offset, flags,</div><div class='add'>+                                   _gf_false, fn, data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readv_async, future);</div><div class='ctx'> </div><div class='ctx'> static ssize_t</div><div class='del'>-glfs_pwritev_common (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                     int iovcnt, off_t offset, int flags,</div><div class='del'>-                     struct stat *prestat, struct stat *poststat)</div><div class='del'>-{</div><div class='del'>-	xlator_t       *subvol = NULL;</div><div class='del'>-	int             ret = -1;</div><div class='del'>-	struct iobref  *iobref = NULL;</div><div class='del'>-	struct iobuf   *iobuf = NULL;</div><div class='del'>-	struct iovec    iov = {0, };</div><div class='del'>-	fd_t           *fd = NULL;</div><div class='del'>-        struct iatt     preiatt = {0, }, postiatt = {0, };</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = iobuf_copy (subvol-&gt;ctx-&gt;iobuf_pool, iovec, iovcnt, &amp;iobref,</div><div class='del'>-                          &amp;iobuf, &amp;iov);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-        ret = syncop_writev (subvol, fd, &amp;iov, 1, offset, iobref, flags,</div><div class='del'>-                             &amp;preiatt, &amp;postiatt, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                if (prestat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='del'>-                if (poststat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (ret &lt;= 0)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	glfd-&gt;offset = (offset + iov.iov_len);</div><div class='add'>+glfs_pwritev_common(struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt,</div><div class='add'>+                    off_t offset, int flags, struct stat *prestat,</div><div class='add'>+                    struct stat *poststat)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt preiatt =</div><div class='add'>+                    {</div><div class='add'>+                        0,</div><div class='add'>+                    },</div><div class='add'>+                postiatt = {</div><div class='add'>+                    0,</div><div class='add'>+                };</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = iobuf_copy(subvol-&gt;ctx-&gt;iobuf_pool, iovec, iovcnt, &amp;iobref, &amp;iobuf,</div><div class='add'>+                     &amp;iov);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_writev(subvol, fd, &amp;iov, 1, offset, iobref, flags, &amp;preiatt,</div><div class='add'>+                        &amp;postiatt, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        if (prestat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='add'>+        if (poststat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    glfd-&gt;offset = (offset + iov.iov_len);</div><div class='ctx'> out:</div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_pwritev (struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt,</div><div class='del'>-                  off_t offset, int flags)</div><div class='add'>+pub_glfs_pwritev(struct glfs_fd *glfd, const struct iovec *iovec, int iovcnt,</div><div class='add'>+                 off_t offset, int flags)</div><div class='ctx'> {</div><div class='del'>-        return glfs_pwritev_common (glfd, iovec, iovcnt, offset, flags,</div><div class='del'>-                                    NULL, NULL);</div><div class='add'>+    return glfs_pwritev_common(glfd, iovec, iovcnt, offset, flags, NULL, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwritev, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_write (struct glfs_fd *glfd, const void *buf, size_t count, int flags)</div><div class='add'>+pub_glfs_write(struct glfs_fd *glfd, const void *buf, size_t count, int flags)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = (void *) buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = pub_glfs_pwritev (glfd, &amp;iov, 1, glfd-&gt;offset, flags);</div><div class='add'>+    ret = pub_glfs_pwritev(glfd, &amp;iov, 1, glfd-&gt;offset, flags);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_write, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_writev (struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='del'>-                 int flags)</div><div class='add'>+pub_glfs_writev(struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='add'>+                int flags)</div><div class='ctx'> {</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = pub_glfs_pwritev (glfd, iov, count, glfd-&gt;offset, flags);</div><div class='add'>+    ret = pub_glfs_pwritev(glfd, iov, count, glfd-&gt;offset, flags);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_writev, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_pwrite34 (struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='del'>-                   off_t offset, int flags)</div><div class='add'>+pub_glfs_pwrite34(struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='add'>+                  off_t offset, int flags)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = (void *) buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = pub_glfs_pwritev (glfd, &amp;iov, 1, offset, flags);</div><div class='add'>+    ret = pub_glfs_pwritev(glfd, &amp;iov, 1, offset, flags);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_pwrite34, glfs_pwrite, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_pwrite (struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='del'>-                 off_t offset, int flags, struct stat *prestat,</div><div class='del'>-                 struct stat *poststat)</div><div class='add'>+pub_glfs_pwrite(struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='add'>+                off_t offset, int flags, struct stat *prestat,</div><div class='add'>+                struct stat *poststat)</div><div class='ctx'> {</div><div class='del'>-        struct iovec iov = {0, };</div><div class='del'>-        ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = (void *) buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_pwritev_common (glfd, &amp;iov, 1, offset, flags,</div><div class='del'>-                                   prestat, poststat);</div><div class='add'>+    ret = glfs_pwritev_common(glfd, &amp;iov, 1, offset, flags, prestat, poststat);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwrite, future);</div><div class='ctx'> </div><div class='del'>-extern glfs_t *pub_glfs_from_glfd (glfs_fd_t *);</div><div class='del'>-</div><div class='add'>+extern glfs_t *</div><div class='add'>+pub_glfs_from_glfd(glfs_fd_t *);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_pwritev_async_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+glfs_pwritev_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glfs_io_async_cbk (op_ret, op_errno, frame, cookie, NULL, 0,</div><div class='del'>-                           prebuf, postbuf);</div><div class='add'>+    glfs_io_async_cbk(op_ret, op_errno, frame, cookie, NULL, 0, prebuf,</div><div class='add'>+                      postbuf);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_pwritev_async_common (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                           int count, off_t offset, int flags,</div><div class='del'>-                           gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='add'>+glfs_pwritev_async_common(struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='add'>+                          int count, off_t offset, int flags,</div><div class='add'>+                          gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_io *gio = NULL;</div><div class='del'>-	int             ret = -1;</div><div class='del'>-        call_frame_t   *frame = NULL;</div><div class='del'>-        xlator_t       *subvol = NULL;</div><div class='del'>-        fd_t           *fd = NULL;</div><div class='del'>-        struct iobref  *iobref = NULL;</div><div class='del'>-        struct iobuf   *iobuf = NULL;</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* Need to take explicit ref so that the fd</div><div class='del'>-         * is not destroyed before the fop is complete</div><div class='del'>-         */</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gio = GF_CALLOC (1, sizeof (*gio), glfs_mt_glfs_io_t);</div><div class='del'>-        if (!gio) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gio-&gt;op     = GF_FOP_WRITE;</div><div class='del'>-        gio-&gt;glfd   = glfd;</div><div class='del'>-        gio-&gt;offset = offset;</div><div class='del'>-        gio-&gt;flags  = flags;</div><div class='del'>-        gio-&gt;oldcb  = oldcb;</div><div class='del'>-        gio-&gt;fn     = fn;</div><div class='del'>-        gio-&gt;data   = data;</div><div class='del'>-        gio-&gt;count  = 1;</div><div class='del'>-        gio-&gt;iov = GF_CALLOC (gio-&gt;count, sizeof (*(gio-&gt;iov)),</div><div class='del'>-                              gf_common_mt_iovec);</div><div class='del'>-        if (!gio-&gt;iov) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = iobuf_copy (subvol-&gt;ctx-&gt;iobuf_pool, iovec, count, &amp;iobref,</div><div class='del'>-                          &amp;iobuf, gio-&gt;iov);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        frame = syncop_create_frame (THIS);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = gio;</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, glfs_pwritev_async_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;writev, fd, gio-&gt;iov,</div><div class='del'>-                           gio-&gt;count, offset, flags, iobref, fop_attr);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* Need to take explicit ref so that the fd</div><div class='add'>+     * is not destroyed before the fop is complete</div><div class='add'>+     */</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio = GF_CALLOC(1, sizeof(*gio), glfs_mt_glfs_io_t);</div><div class='add'>+    if (!gio) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;op = GF_FOP_WRITE;</div><div class='add'>+    gio-&gt;glfd = glfd;</div><div class='add'>+    gio-&gt;offset = offset;</div><div class='add'>+    gio-&gt;flags = flags;</div><div class='add'>+    gio-&gt;oldcb = oldcb;</div><div class='add'>+    gio-&gt;fn = fn;</div><div class='add'>+    gio-&gt;data = data;</div><div class='add'>+    gio-&gt;count = 1;</div><div class='add'>+    gio-&gt;iov = GF_CALLOC(gio-&gt;count, sizeof(*(gio-&gt;iov)), gf_common_mt_iovec);</div><div class='add'>+    if (!gio-&gt;iov) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = iobuf_copy(subvol-&gt;ctx-&gt;iobuf_pool, iovec, count, &amp;iobref, &amp;iobuf,</div><div class='add'>+                     gio-&gt;iov);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    frame = syncop_create_frame(THIS);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = gio;</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, glfs_pwritev_async_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;writev, fd, gio-&gt;iov, gio-&gt;count, offset,</div><div class='add'>+                      flags, iobref, fop_attr);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd)</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                if (glfd)</div><div class='del'>-                        GF_REF_PUT (glfd);</div><div class='del'>-                GF_FREE (gio);</div><div class='del'>-                /*</div><div class='del'>-                 * If there is any error condition check after the frame</div><div class='del'>-                 * creation, we have to destroy the frame root.</div><div class='del'>-                 */</div><div class='del'>-                glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='del'>-        }</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd)</div><div class='add'>+            fd_unref(fd);</div><div class='add'>+        if (glfd)</div><div class='add'>+            GF_REF_PUT(glfd);</div><div class='add'>+        GF_FREE(gio);</div><div class='add'>+        /*</div><div class='add'>+         * If there is any error condition check after the frame</div><div class='add'>+         * creation, we have to destroy the frame root.</div><div class='add'>+         */</div><div class='add'>+        glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='add'>+    }</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_pwritev_async34 (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                          int count, off_t offset, int flags, glfs_io_cbk34 fn,</div><div class='del'>-                          void *data)</div><div class='add'>+pub_glfs_pwritev_async34(struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='add'>+                         int count, off_t offset, int flags, glfs_io_cbk34 fn,</div><div class='add'>+                         void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_pwritev_async_common (glfd, iovec, count, offset, flags,</div><div class='del'>-                                          _gf_true, (void *)fn, data);</div><div class='add'>+    return glfs_pwritev_async_common(glfd, iovec, count, offset, flags,</div><div class='add'>+                                     _gf_true, (void *)fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_pwritev_async34, glfs_pwritev_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_pwritev_async (struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='del'>-                        int count, off_t offset, int flags, glfs_io_cbk fn,</div><div class='del'>-                        void *data)</div><div class='add'>+pub_glfs_pwritev_async(struct glfs_fd *glfd, const struct iovec *iovec,</div><div class='add'>+                       int count, off_t offset, int flags, glfs_io_cbk fn,</div><div class='add'>+                       void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_pwritev_async_common (glfd, iovec, count, offset, flags,</div><div class='del'>-                                          _gf_false, fn, data);</div><div class='add'>+    return glfs_pwritev_async_common(glfd, iovec, count, offset, flags,</div><div class='add'>+                                     _gf_false, fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwritev_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_write_async34 (struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='del'>-                        int flags, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_write_async34(struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='add'>+                       int flags, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = (void *) buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_pwritev_async_common (glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='del'>-                                         _gf_true, (void *)fn, data);</div><div class='add'>+    ret = glfs_pwritev_async_common(glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='add'>+                                    _gf_true, (void *)fn, data);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_write_async34, glfs_write_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_write_async (struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='del'>-                      int flags, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_write_async(struct glfs_fd *glfd, const void *buf, size_t count,</div><div class='add'>+                     int flags, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = (void *) buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_pwritev_async_common (glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='del'>-                                         _gf_false, fn, data);</div><div class='add'>+    ret = glfs_pwritev_async_common(glfd, &amp;iov, 1, glfd-&gt;offset, flags,</div><div class='add'>+                                    _gf_false, fn, data);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_write_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_pwrite_async34 (struct glfs_fd *glfd, const void *buf, int count,</div><div class='del'>-                         off_t offset, int flags, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_pwrite_async34(struct glfs_fd *glfd, const void *buf, int count,</div><div class='add'>+                        off_t offset, int flags, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct iovec iov = {0, };</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	iov.iov_base = (void *) buf;</div><div class='del'>-	iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_pwritev_async_common (glfd, &amp;iov, 1, offset, flags,</div><div class='del'>-                                         _gf_true, (void *)fn, data);</div><div class='add'>+    ret = glfs_pwritev_async_common(glfd, &amp;iov, 1, offset, flags, _gf_true,</div><div class='add'>+                                    (void *)fn, data);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_pwrite_async34, glfs_pwrite_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_pwrite_async (struct glfs_fd *glfd, const void *buf, int count,</div><div class='del'>-                       off_t offset, int flags, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_pwrite_async(struct glfs_fd *glfd, const void *buf, int count,</div><div class='add'>+                      off_t offset, int flags, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct iovec iov = {0, };</div><div class='del'>-        ssize_t      ret = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = (void *) buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_pwritev_async_common (glfd, &amp;iov, 1, offset, flags,</div><div class='del'>-                                         _gf_false, fn, data);</div><div class='add'>+    ret = glfs_pwritev_async_common(glfd, &amp;iov, 1, offset, flags, _gf_false, fn,</div><div class='add'>+                                    data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_pwrite_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_writev_async34 (struct glfs_fd *glfd, const struct iovec *iov,</div><div class='del'>-                         int count, int flags, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_writev_async34(struct glfs_fd *glfd, const struct iovec *iov,</div><div class='add'>+                        int count, int flags, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_pwritev_async_common (glfd, iov, count, glfd-&gt;offset, flags,</div><div class='del'>-                                         _gf_true, (void *)fn, data);</div><div class='del'>-	return ret;</div><div class='add'>+    ret = glfs_pwritev_async_common(glfd, iov, count, glfd-&gt;offset, flags,</div><div class='add'>+                                    _gf_true, (void *)fn, data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_writev_async34, glfs_writev_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_writev_async (struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='del'>-                       int flags, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_writev_async(struct glfs_fd *glfd, const struct iovec *iov, int count,</div><div class='add'>+                      int flags, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	ssize_t      ret = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_pwritev_async_common (glfd, iov, count, glfd-&gt;offset, flags,</div><div class='del'>-                                         _gf_false, fn, data);</div><div class='del'>-	return ret;</div><div class='add'>+    ret = glfs_pwritev_async_common(glfd, iov, count, glfd-&gt;offset, flags,</div><div class='add'>+                                    _gf_false, fn, data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_writev_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_fsync_common (struct glfs_fd *glfd, struct stat *prestat,</div><div class='del'>-                   struct stat *poststat)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-        struct iatt      preiatt = {0, }, postiatt = {0, };</div><div class='del'>-        dict_t          *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	ret = syncop_fsync (subvol, fd, 0, &amp;preiatt, &amp;postiatt, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                if (prestat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='del'>-                if (poststat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='del'>-        }</div><div class='add'>+glfs_fsync_common(struct glfs_fd *glfd, struct stat *prestat,</div><div class='add'>+                  struct stat *poststat)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt preiatt =</div><div class='add'>+                    {</div><div class='add'>+                        0,</div><div class='add'>+                    },</div><div class='add'>+                postiatt = {</div><div class='add'>+                    0,</div><div class='add'>+                };</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsync(subvol, fd, 0, &amp;preiatt, &amp;postiatt, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        if (prestat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='add'>+        if (poststat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_fsync34 (struct glfs_fd *glfd)</div><div class='add'>+pub_glfs_fsync34(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-	return glfs_fsync_common (glfd, NULL, NULL);</div><div class='add'>+    return glfs_fsync_common(glfd, NULL, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_fsync34, glfs_fsync, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fsync (struct glfs_fd *glfd, struct stat *prestat,</div><div class='del'>-                struct stat *poststat)</div><div class='add'>+pub_glfs_fsync(struct glfs_fd *glfd, struct stat *prestat,</div><div class='add'>+               struct stat *poststat)</div><div class='ctx'> {</div><div class='del'>-	return glfs_fsync_common (glfd, prestat, poststat);</div><div class='add'>+    return glfs_fsync_common(glfd, prestat, poststat);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsync, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_fsync_async_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int32_t op_ret,</div><div class='del'>-                      int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+glfs_fsync_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glfs_io_async_cbk (op_ret, op_errno, frame, cookie, NULL, 0,</div><div class='del'>-                           prebuf, postbuf);</div><div class='add'>+    glfs_io_async_cbk(op_ret, op_errno, frame, cookie, NULL, 0, prebuf,</div><div class='add'>+                      postbuf);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_fsync_async_common (struct glfs_fd *glfd, gf_boolean_t oldcb,</div><div class='del'>-                         glfs_io_cbk fn, void *data, int dataonly)</div><div class='del'>-{</div><div class='del'>-	struct glfs_io *gio = NULL;</div><div class='del'>-	int             ret = 0;</div><div class='del'>-        call_frame_t   *frame = NULL;</div><div class='del'>-        xlator_t       *subvol = NULL;</div><div class='del'>-        fd_t           *fd = NULL;</div><div class='del'>-</div><div class='del'>-        /* Need to take explicit ref so that the fd</div><div class='del'>-         * is not destroyed before the fop is complete</div><div class='del'>-         */</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = syncop_create_frame (THIS);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gio = GF_CALLOC (1, sizeof (*gio), glfs_mt_glfs_io_t);</div><div class='del'>-        if (!gio) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	gio-&gt;op     = GF_FOP_FSYNC;</div><div class='del'>-	gio-&gt;glfd   = glfd;</div><div class='del'>-	gio-&gt;flags  = dataonly;</div><div class='del'>-	gio-&gt;oldcb  = oldcb;</div><div class='del'>-	gio-&gt;fn     = fn;</div><div class='del'>-	gio-&gt;data   = data;</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = gio;</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, glfs_fsync_async_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;fsync, fd, dataonly, NULL);</div><div class='add'>+glfs_fsync_async_common(struct glfs_fd *glfd, gf_boolean_t oldcb,</div><div class='add'>+                        glfs_io_cbk fn, void *data, int dataonly)</div><div class='add'>+{</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    /* Need to take explicit ref so that the fd</div><div class='add'>+     * is not destroyed before the fop is complete</div><div class='add'>+     */</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = syncop_create_frame(THIS);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio = GF_CALLOC(1, sizeof(*gio), glfs_mt_glfs_io_t);</div><div class='add'>+    if (!gio) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;op = GF_FOP_FSYNC;</div><div class='add'>+    gio-&gt;glfd = glfd;</div><div class='add'>+    gio-&gt;flags = dataonly;</div><div class='add'>+    gio-&gt;oldcb = oldcb;</div><div class='add'>+    gio-&gt;fn = fn;</div><div class='add'>+    gio-&gt;data = data;</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = gio;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, glfs_fsync_async_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;fsync, fd, dataonly, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd)</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-                GF_FREE (gio);</div><div class='del'>-                if (frame)</div><div class='del'>-                        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-                glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd)</div><div class='add'>+            fd_unref(fd);</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+        GF_FREE(gio);</div><div class='add'>+        if (frame)</div><div class='add'>+            STACK_DESTROY(frame-&gt;root);</div><div class='add'>+        glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fsync_async34 (struct glfs_fd *glfd, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_fsync_async34(struct glfs_fd *glfd, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fsync_async_common (glfd, _gf_true, (void *)fn, data, 0);</div><div class='add'>+    ret = glfs_fsync_async_common(glfd, _gf_true, (void *)fn, data, 0);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_fsync_async34, glfs_fsync_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fsync_async (struct glfs_fd *glfd, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_fsync_async(struct glfs_fd *glfd, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fsync_async_common (glfd, _gf_false, fn, data, 0);</div><div class='add'>+    ret = glfs_fsync_async_common(glfd, _gf_false, fn, data, 0);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsync_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_fdatasync_common (struct glfs_fd *glfd, struct stat *prestat,</div><div class='del'>-                       struct stat *poststat)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-        struct iatt      preiatt = {0, }, postiatt = {0, };</div><div class='del'>-        dict_t          *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	ret = syncop_fsync (subvol, fd, 1, &amp;preiatt, &amp;postiatt, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                if (prestat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='del'>-                if (poststat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='del'>-        }</div><div class='add'>+glfs_fdatasync_common(struct glfs_fd *glfd, struct stat *prestat,</div><div class='add'>+                      struct stat *poststat)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt preiatt =</div><div class='add'>+                    {</div><div class='add'>+                        0,</div><div class='add'>+                    },</div><div class='add'>+                postiatt = {</div><div class='add'>+                    0,</div><div class='add'>+                };</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsync(subvol, fd, 1, &amp;preiatt, &amp;postiatt, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        if (prestat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='add'>+        if (poststat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_fdatasync34 (struct glfs_fd *glfd)</div><div class='add'>+pub_glfs_fdatasync34(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        return glfs_fdatasync_common (glfd, NULL, NULL);</div><div class='add'>+    return glfs_fdatasync_common(glfd, NULL, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_fdatasync34, glfs_fdatasync, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fdatasync (struct glfs_fd *glfd, struct stat *prestat,</div><div class='del'>-                    struct stat *poststat)</div><div class='add'>+pub_glfs_fdatasync(struct glfs_fd *glfd, struct stat *prestat,</div><div class='add'>+                   struct stat *poststat)</div><div class='ctx'> {</div><div class='del'>-       return glfs_fdatasync_common (glfd, prestat, poststat);</div><div class='add'>+    return glfs_fdatasync_common(glfd, prestat, poststat);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fdatasync, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fdatasync_async34 (struct glfs_fd *glfd, glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_fdatasync_async34(struct glfs_fd *glfd, glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	ret = glfs_fsync_async_common (glfd, _gf_true, (void *)fn, data, 1);</div><div class='add'>+    ret = glfs_fsync_async_common(glfd, _gf_true, (void *)fn, data, 1);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_fdatasync_async34, glfs_fdatasync_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fdatasync_async (struct glfs_fd *glfd, glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_fdatasync_async(struct glfs_fd *glfd, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	ret = glfs_fsync_async_common (glfd, _gf_false, fn, data, 1);</div><div class='add'>+    ret = glfs_fsync_async_common(glfd, _gf_false, fn, data, 1);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fdatasync_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_ftruncate_common (struct glfs_fd *glfd, off_t offset,</div><div class='del'>-                       struct stat *prestat, struct stat *poststat)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-        struct iatt      preiatt = {0, }, postiatt = {0, };</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	ret = syncop_ftruncate (subvol, fd, offset, &amp;preiatt, &amp;postiatt,</div><div class='del'>-                                fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                if (prestat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='del'>-                if (poststat)</div><div class='del'>-                        glfs_iatt_to_stat (glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='del'>-        }</div><div class='add'>+glfs_ftruncate_common(struct glfs_fd *glfd, off_t offset, struct stat *prestat,</div><div class='add'>+                      struct stat *poststat)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt preiatt =</div><div class='add'>+                    {</div><div class='add'>+                        0,</div><div class='add'>+                    },</div><div class='add'>+                postiatt = {</div><div class='add'>+                    0,</div><div class='add'>+                };</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_ftruncate(subvol, fd, offset, &amp;preiatt, &amp;postiatt, fop_attr,</div><div class='add'>+                           NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        if (prestat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;preiatt, prestat);</div><div class='add'>+        if (poststat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;postiatt, poststat);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_ftruncate34 (struct glfs_fd *glfd, off_t offset)</div><div class='add'>+pub_glfs_ftruncate34(struct glfs_fd *glfd, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        return glfs_ftruncate_common (glfd, offset, NULL, NULL);</div><div class='add'>+    return glfs_ftruncate_common(glfd, offset, NULL, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_ftruncate34, glfs_ftruncate, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_ftruncate (struct glfs_fd *glfd, off_t offset, struct stat *prestat,</div><div class='del'>-                    struct stat *poststat)</div><div class='add'>+pub_glfs_ftruncate(struct glfs_fd *glfd, off_t offset, struct stat *prestat,</div><div class='add'>+                   struct stat *poststat)</div><div class='ctx'> {</div><div class='del'>-        return glfs_ftruncate_common (glfd, offset, prestat, poststat);</div><div class='add'>+    return glfs_ftruncate_common(glfd, offset, prestat, poststat);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_ftruncate, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_truncate (struct glfs *fs, const char *path, off_t length)</div><div class='del'>-{</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        struct iatt      iatt = {0, };</div><div class='del'>-        int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+pub_glfs_truncate(struct glfs *fs, const char *path, off_t length)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-        ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-        ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_truncate (subvol, &amp;loc, length, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_truncate(subvol, &amp;loc, length, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-        ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_truncate, 3.7.15);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_ftruncate_async_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                          dict_t *xdata)</div><div class='add'>+glfs_ftruncate_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                         struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glfs_io_async_cbk (op_ret, op_errno, frame, cookie, NULL, 0,</div><div class='del'>-                           prebuf, postbuf);</div><div class='add'>+    glfs_io_async_cbk(op_ret, op_errno, frame, cookie, NULL, 0, prebuf,</div><div class='add'>+                      postbuf);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_ftruncate_async_common (struct glfs_fd *glfd, off_t offset,</div><div class='del'>-                             gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='add'>+glfs_ftruncate_async_common(struct glfs_fd *glfd, off_t offset,</div><div class='add'>+                            gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_io *gio = NULL;</div><div class='del'>-	int             ret = -1;</div><div class='del'>-        call_frame_t   *frame = NULL;</div><div class='del'>-        xlator_t       *subvol = NULL;</div><div class='del'>-        fd_t           *fd = NULL;</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* Need to take explicit ref so that the fd</div><div class='del'>-         * is not destroyed before the fop is complete</div><div class='del'>-         */</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = syncop_create_frame (THIS);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	gio = GF_CALLOC (1, sizeof (*gio), glfs_mt_glfs_io_t);</div><div class='del'>-	if (!gio) {</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gio-&gt;op     = GF_FOP_FTRUNCATE;</div><div class='del'>-	gio-&gt;glfd   = glfd;</div><div class='del'>-	gio-&gt;offset = offset;</div><div class='del'>-	gio-&gt;oldcb  = oldcb;</div><div class='del'>-	gio-&gt;fn     = fn;</div><div class='del'>-	gio-&gt;data   = data;</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = gio;</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, glfs_ftruncate_async_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;ftruncate, fd, offset, fop_attr);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* Need to take explicit ref so that the fd</div><div class='add'>+     * is not destroyed before the fop is complete</div><div class='add'>+     */</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = syncop_create_frame(THIS);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio = GF_CALLOC(1, sizeof(*gio), glfs_mt_glfs_io_t);</div><div class='add'>+    if (!gio) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;op = GF_FOP_FTRUNCATE;</div><div class='add'>+    gio-&gt;glfd = glfd;</div><div class='add'>+    gio-&gt;offset = offset;</div><div class='add'>+    gio-&gt;oldcb = oldcb;</div><div class='add'>+    gio-&gt;fn = fn;</div><div class='add'>+    gio-&gt;data = data;</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = gio;</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, glfs_ftruncate_async_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;ftruncate, fd, offset, fop_attr);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd)</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                if (glfd)</div><div class='del'>-                        GF_REF_PUT (glfd);</div><div class='del'>-                GF_FREE (gio);</div><div class='del'>-                if (frame)</div><div class='del'>-                        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-                glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='del'>-        }</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd)</div><div class='add'>+            fd_unref(fd);</div><div class='add'>+        if (glfd)</div><div class='add'>+            GF_REF_PUT(glfd);</div><div class='add'>+        GF_FREE(gio);</div><div class='add'>+        if (frame)</div><div class='add'>+            STACK_DESTROY(frame-&gt;root);</div><div class='add'>+        glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='add'>+    }</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_ftruncate_async34 (struct glfs_fd *glfd, off_t offset,</div><div class='del'>-                            glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_ftruncate_async34(struct glfs_fd *glfd, off_t offset, glfs_io_cbk34 fn,</div><div class='add'>+                           void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_ftruncate_async_common (glfd, offset, _gf_true,</div><div class='del'>-                                            (void *)fn, data);</div><div class='add'>+    return glfs_ftruncate_async_common(glfd, offset, _gf_true, (void *)fn,</div><div class='add'>+                                       data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_ftruncate_async34, glfs_ftruncate_async, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_ftruncate_async (struct glfs_fd *glfd, off_t offset,</div><div class='del'>-                          glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_ftruncate_async(struct glfs_fd *glfd, off_t offset, glfs_io_cbk fn,</div><div class='add'>+                         void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_ftruncate_async_common (glfd, offset, _gf_false, fn, data);</div><div class='add'>+    return glfs_ftruncate_async_common(glfd, offset, _gf_false, fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_ftruncate_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_access (struct glfs *fs, const char *path, int mode)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_access(struct glfs *fs, const char *path, int mode)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = syncop_access (subvol, &amp;loc, mode, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_access(subvol, &amp;loc, mode, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_access, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_symlink (struct glfs *fs, const char *data, const char *path)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	uuid_t           gfid;</div><div class='del'>-	dict_t          *xattr_req = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	xattr_req = dict_new ();</div><div class='del'>-	if (!xattr_req) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gf_uuid_generate (gfid);</div><div class='del'>-	ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-	if (ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_symlink(struct glfs *fs, const char *data, const char *path)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (loc.inode) {</div><div class='del'>-		errno = EEXIST;</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (loc.inode) {</div><div class='add'>+        errno = EEXIST;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='del'>-		/* Any other type of error is fatal */</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='add'>+        /* Any other type of error is fatal */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='del'>-		/* The parent directory or an ancestor even</div><div class='del'>-		   higher does not exist</div><div class='del'>-		*/</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='add'>+        /* The parent directory or an ancestor even</div><div class='add'>+           higher does not exist</div><div class='add'>+        */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	/* ret == -1 &amp;&amp; errno == ENOENT */</div><div class='del'>-	loc.inode = inode_new (loc.parent-&gt;table);</div><div class='del'>-	if (!loc.inode) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    /* ret == -1 &amp;&amp; errno == ENOENT */</div><div class='add'>+    loc.inode = inode_new(loc.parent-&gt;table);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_symlink (subvol, &amp;loc, data, &amp;iatt, xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_symlink(subvol, &amp;loc, data, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	if (xattr_req)</div><div class='del'>-		dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_symlink, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_readlink (struct glfs *fs, const char *path, char *buf, size_t bufsiz)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-	char            *linkval = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_readlink(struct glfs *fs, const char *path, char *buf, size_t bufsiz)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+    char *linkval = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (iatt.ia_type != IA_IFLNK) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (iatt.ia_type != IA_IFLNK) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_readlink (subvol, &amp;loc, &amp;linkval, bufsiz, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret &gt; 0) {</div><div class='del'>-		memcpy (buf, linkval, ret);</div><div class='del'>-		GF_FREE (linkval);</div><div class='del'>-	}</div><div class='add'>+    ret = syncop_readlink(subvol, &amp;loc, &amp;linkval, bufsiz, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret &gt; 0) {</div><div class='add'>+        memcpy(buf, linkval, ret);</div><div class='add'>+        GF_FREE(linkval);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readlink, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_mknod (struct glfs *fs, const char *path, mode_t mode, dev_t dev)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	uuid_t           gfid;</div><div class='del'>-	dict_t          *xattr_req = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	xattr_req = dict_new ();</div><div class='del'>-	if (!xattr_req) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gf_uuid_generate (gfid);</div><div class='del'>-	ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-	if (ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_mknod(struct glfs *fs, const char *path, mode_t mode, dev_t dev)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (loc.inode) {</div><div class='del'>-		errno = EEXIST;</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (loc.inode) {</div><div class='add'>+        errno = EEXIST;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='del'>-		/* Any other type of error is fatal */</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='add'>+        /* Any other type of error is fatal */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='del'>-		/* The parent directory or an ancestor even</div><div class='del'>-		   higher does not exist</div><div class='del'>-		*/</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='add'>+        /* The parent directory or an ancestor even</div><div class='add'>+           higher does not exist</div><div class='add'>+        */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	/* ret == -1 &amp;&amp; errno == ENOENT */</div><div class='del'>-	loc.inode = inode_new (loc.parent-&gt;table);</div><div class='del'>-	if (!loc.inode) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    /* ret == -1 &amp;&amp; errno == ENOENT */</div><div class='add'>+    loc.inode = inode_new(loc.parent-&gt;table);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_mknod (subvol, &amp;loc, mode, dev, &amp;iatt, xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_mknod(subvol, &amp;loc, mode, dev, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	if (xattr_req)</div><div class='del'>-		dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_mknod, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_mkdir (struct glfs *fs, const char *path, mode_t mode)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	uuid_t           gfid;</div><div class='del'>-	dict_t          *xattr_req = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	xattr_req = dict_new ();</div><div class='del'>-	if (!xattr_req) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gf_uuid_generate (gfid);</div><div class='del'>-	ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-	if (ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_mkdir(struct glfs *fs, const char *path, mode_t mode)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (loc.inode) {</div><div class='del'>-		errno = EEXIST;</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (loc.inode) {</div><div class='add'>+        errno = EEXIST;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='del'>-		/* Any other type of error is fatal */</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno != ENOENT)</div><div class='add'>+        /* Any other type of error is fatal */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='del'>-		/* The parent directory or an ancestor even</div><div class='del'>-		   higher does not exist</div><div class='del'>-		*/</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; !loc.parent)</div><div class='add'>+        /* The parent directory or an ancestor even</div><div class='add'>+           higher does not exist</div><div class='add'>+        */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	/* ret == -1 &amp;&amp; errno == ENOENT */</div><div class='del'>-	loc.inode = inode_new (loc.parent-&gt;table);</div><div class='del'>-	if (!loc.inode) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    /* ret == -1 &amp;&amp; errno == ENOENT */</div><div class='add'>+    loc.inode = inode_new(loc.parent-&gt;table);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_mkdir (subvol, &amp;loc, mode, &amp;iatt, xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_mkdir(subvol, &amp;loc, mode, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	if (xattr_req)</div><div class='del'>-		dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_mkdir, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_unlink (struct glfs *fs, const char *path)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_unlink(struct glfs *fs, const char *path)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (iatt.ia_type == IA_IFDIR) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EISDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (iatt.ia_type == IA_IFDIR) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EISDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: Add leaseid */</div><div class='del'>-	ret = syncop_unlink (subvol, &amp;loc, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    /* TODO: Add leaseid */</div><div class='add'>+    ret = syncop_unlink(subvol, &amp;loc, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_unlink (&amp;loc);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_unlink(&amp;loc);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_unlink, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_rmdir (struct glfs *fs, const char *path)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_rmdir(struct glfs *fs, const char *path)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (iatt.ia_type != IA_IFDIR) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOTDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (iatt.ia_type != IA_IFDIR) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOTDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_rmdir (subvol, &amp;loc, 0, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_rmdir(subvol, &amp;loc, 0, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_unlink (&amp;loc);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_unlink(&amp;loc);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_rmdir, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_rename (struct glfs *fs, const char *oldpath, const char *newpath)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            oldloc = {0, };</div><div class='del'>-	loc_t            newloc = {0, };</div><div class='del'>-	struct iatt      oldiatt = {0, };</div><div class='del'>-	struct iatt      newiatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_rename(struct glfs *fs, const char *oldpath, const char *newpath)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t oldloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt oldiatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt newiatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, oldpath, &amp;oldloc, &amp;oldiatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, oldpath, &amp;oldloc, &amp;oldiatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;oldloc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;oldloc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> retrynew:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, newpath, &amp;newloc, &amp;newiatt, reval);</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;newloc, retrynew);</div><div class='del'>-</div><div class='del'>-	if (ret &amp;&amp; errno != ENOENT &amp;&amp; newloc.parent)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (newiatt.ia_type != IA_INVAL) {</div><div class='del'>-                if ((oldiatt.ia_type == IA_IFDIR) !=</div><div class='del'>-                    (newiatt.ia_type == IA_IFDIR)) {</div><div class='del'>-                       /* Either both old and new must be dirs,</div><div class='del'>-                        * or both must be non-dirs. Else, fail.</div><div class='del'>-                        */</div><div class='del'>-                       ret = -1;</div><div class='del'>-                       errno = EISDIR;</div><div class='del'>-                       goto out;</div><div class='del'>-                }</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, newpath, &amp;newloc, &amp;newiatt, reval);</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;newloc, retrynew);</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; errno != ENOENT &amp;&amp; newloc.parent)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (newiatt.ia_type != IA_INVAL) {</div><div class='add'>+        if ((oldiatt.ia_type == IA_IFDIR) != (newiatt.ia_type == IA_IFDIR)) {</div><div class='add'>+            /* Either both old and new must be dirs,</div><div class='add'>+             * or both must be non-dirs. Else, fail.</div><div class='add'>+             */</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = EISDIR;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: - check if new or old is a prefix of the other, and fail EINVAL</div><div class='add'>+     *       - Add leaseid */</div><div class='add'>+</div><div class='add'>+    ret = syncop_rename(subvol, &amp;oldloc, &amp;newloc, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ESTALE) {</div><div class='add'>+        if (reval &lt; DEFAULT_REVAL_COUNT) {</div><div class='add'>+            reval++;</div><div class='add'>+            loc_wipe(&amp;oldloc);</div><div class='add'>+            loc_wipe(&amp;newloc);</div><div class='add'>+            goto retry;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* TODO: - check if new or old is a prefix of the other, and fail EINVAL</div><div class='del'>-         *       - Add leaseid */</div><div class='del'>-</div><div class='del'>-	ret = syncop_rename (subvol, &amp;oldloc, &amp;newloc, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ESTALE) {</div><div class='del'>-		if (reval &lt; DEFAULT_REVAL_COUNT) {</div><div class='del'>-			reval++;</div><div class='del'>-			loc_wipe (&amp;oldloc);</div><div class='del'>-			loc_wipe (&amp;newloc);</div><div class='del'>-			goto retry;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (ret == 0) {</div><div class='del'>-		inode_rename (oldloc.parent-&gt;table, oldloc.parent, oldloc.name,</div><div class='del'>-			      newloc.parent, newloc.name, oldloc.inode,</div><div class='del'>-			      &amp;oldiatt);</div><div class='del'>-</div><div class='del'>-		if (newloc.inode &amp;&amp; !inode_has_dentry (newloc.inode))</div><div class='del'>-			inode_forget (newloc.inode, 0);</div><div class='del'>-	}</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        inode_rename(oldloc.parent-&gt;table, oldloc.parent, oldloc.name,</div><div class='add'>+                     newloc.parent, newloc.name, oldloc.inode, &amp;oldiatt);</div><div class='add'>+</div><div class='add'>+        if (newloc.inode &amp;&amp; !inode_has_dentry(newloc.inode))</div><div class='add'>+            inode_forget(newloc.inode, 0);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;oldloc);</div><div class='del'>-	loc_wipe (&amp;newloc);</div><div class='add'>+    loc_wipe(&amp;oldloc);</div><div class='add'>+    loc_wipe(&amp;newloc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_rename, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_link (struct glfs *fs, const char *oldpath, const char *newpath)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            oldloc = {0, };</div><div class='del'>-	loc_t            newloc = {0, };</div><div class='del'>-	struct iatt      oldiatt = {0, };</div><div class='del'>-	struct iatt      newiatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_link(struct glfs *fs, const char *oldpath, const char *newpath)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t oldloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt oldiatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt newiatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, oldpath, &amp;oldloc, &amp;oldiatt, reval);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, oldpath, &amp;oldloc, &amp;oldiatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;oldloc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;oldloc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> retrynew:</div><div class='del'>-	ret = glfs_lresolve (fs, subvol, newpath, &amp;newloc, &amp;newiatt, reval);</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;newloc, retrynew);</div><div class='del'>-</div><div class='del'>-	if (ret == 0) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EEXIST;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (oldiatt.ia_type == IA_IFDIR) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EISDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* Filling the inode of the hard link to be same as that of the</div><div class='del'>-           original file</div><div class='del'>-        */</div><div class='del'>-	if (newloc.inode) {</div><div class='del'>-		inode_unref (newloc.inode);</div><div class='del'>-		newloc.inode = NULL;</div><div class='del'>-	}</div><div class='del'>-        newloc.inode = inode_ref (oldloc.inode);</div><div class='del'>-</div><div class='del'>-	ret = syncop_link (subvol, &amp;oldloc, &amp;newloc, &amp;newiatt, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-	if (ret == -1 &amp;&amp; errno == ESTALE) {</div><div class='del'>-		loc_wipe (&amp;oldloc);</div><div class='del'>-		loc_wipe (&amp;newloc);</div><div class='del'>-		if (reval--)</div><div class='del'>-			goto retry;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (ret == 0)</div><div class='del'>-		ret = glfs_loc_link (&amp;newloc, &amp;newiatt);</div><div class='add'>+    ret = glfs_lresolve(fs, subvol, newpath, &amp;newloc, &amp;newiatt, reval);</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;newloc, retrynew);</div><div class='add'>+</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EEXIST;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (oldiatt.ia_type == IA_IFDIR) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EISDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Filling the inode of the hard link to be same as that of the</div><div class='add'>+       original file</div><div class='add'>+    */</div><div class='add'>+    if (newloc.inode) {</div><div class='add'>+        inode_unref(newloc.inode);</div><div class='add'>+        newloc.inode = NULL;</div><div class='add'>+    }</div><div class='add'>+    newloc.inode = inode_ref(oldloc.inode);</div><div class='add'>+</div><div class='add'>+    ret = syncop_link(subvol, &amp;oldloc, &amp;newloc, &amp;newiatt, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret == -1 &amp;&amp; errno == ESTALE) {</div><div class='add'>+        loc_wipe(&amp;oldloc);</div><div class='add'>+        loc_wipe(&amp;newloc);</div><div class='add'>+        if (reval--)</div><div class='add'>+            goto retry;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_link(&amp;newloc, &amp;newiatt);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;oldloc);</div><div class='del'>-	loc_wipe (&amp;newloc);</div><div class='add'>+    loc_wipe(&amp;oldloc);</div><div class='add'>+    loc_wipe(&amp;newloc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_link, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_fd *</div><div class='del'>-pub_glfs_opendir (struct glfs *fs, const char *path)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	struct glfs_fd  *glfd = NULL;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfd = glfs_fd_new (fs);</div><div class='del'>-	if (!glfd)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	INIT_LIST_HEAD (&amp;glfd-&gt;entries);</div><div class='add'>+pub_glfs_opendir(struct glfs *fs, const char *path)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_fd_new(fs);</div><div class='add'>+    if (!glfd)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;glfd-&gt;entries);</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='del'>-</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (!IA_ISDIR (iatt.ia_type)) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOTDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (glfd-&gt;fd) {</div><div class='del'>-		/* Retry. Safe to touch glfd-&gt;fd as we</div><div class='del'>-		   still have not glfs_fd_bind() yet.</div><div class='del'>-		*/</div><div class='del'>-		fd_unref (glfd-&gt;fd);</div><div class='del'>-		glfd-&gt;fd = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfd-&gt;fd = fd_create (loc.inode, getpid());</div><div class='del'>-	if (!glfd-&gt;fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = syncop_opendir (subvol, &amp;loc, glfd-&gt;fd, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!IA_ISDIR(iatt.ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOTDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfd-&gt;fd) {</div><div class='add'>+        /* Retry. Safe to touch glfd-&gt;fd as we</div><div class='add'>+           still have not glfs_fd_bind() yet.</div><div class='add'>+        */</div><div class='add'>+        fd_unref(glfd-&gt;fd);</div><div class='add'>+        glfd-&gt;fd = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd-&gt;fd = fd_create(loc.inode, getpid());</div><div class='add'>+    if (!glfd-&gt;fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_opendir(subvol, &amp;loc, glfd-&gt;fd, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	if (ret &amp;&amp; glfd) {</div><div class='del'>-		GF_REF_PUT (glfd);</div><div class='del'>-		glfd = NULL;</div><div class='del'>-	} else if (glfd) {</div><div class='del'>-                glfd_set_state_bind (glfd);</div><div class='del'>-	}</div><div class='add'>+    if (ret &amp;&amp; glfd) {</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+        glfd = NULL;</div><div class='add'>+    } else if (glfd) {</div><div class='add'>+        glfd_set_state_bind(glfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return glfd;</div><div class='add'>+    return glfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_opendir, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_closedir (struct glfs_fd *glfd)</div><div class='add'>+pub_glfs_closedir(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	gf_dirent_free (list_entry (&amp;glfd-&gt;entries, gf_dirent_t, list));</div><div class='add'>+    gf_dirent_free(list_entry(&amp;glfd-&gt;entries, gf_dirent_t, list));</div><div class='ctx'> </div><div class='del'>-        glfs_mark_glfd_for_deletion (glfd);</div><div class='add'>+    glfs_mark_glfd_for_deletion(glfd);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_closedir, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> long</div><div class='del'>-pub_glfs_telldir (struct glfs_fd *fd)</div><div class='add'>+pub_glfs_telldir(struct glfs_fd *fd)</div><div class='ctx'> {</div><div class='del'>-	return fd-&gt;offset;</div><div class='add'>+    return fd-&gt;offset;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_telldir, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pub_glfs_seekdir (struct glfs_fd *fd, long offset)</div><div class='add'>+pub_glfs_seekdir(struct glfs_fd *fd, long offset)</div><div class='ctx'> {</div><div class='del'>-	gf_dirent_t *entry = NULL;</div><div class='del'>-	gf_dirent_t *tmp = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-	if (fd-&gt;offset == offset)</div><div class='del'>-		return;</div><div class='add'>+    if (fd-&gt;offset == offset)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	fd-&gt;offset = offset;</div><div class='del'>-	fd-&gt;next = NULL;</div><div class='add'>+    fd-&gt;offset = offset;</div><div class='add'>+    fd-&gt;next = NULL;</div><div class='ctx'> </div><div class='del'>-	list_for_each_entry_safe (entry, tmp, &amp;fd-&gt;entries, list) {</div><div class='del'>-		if (entry-&gt;d_off != offset)</div><div class='del'>-			continue;</div><div class='add'>+    list_for_each_entry_safe(entry, tmp, &amp;fd-&gt;entries, list)</div><div class='add'>+    {</div><div class='add'>+        if (entry-&gt;d_off != offset)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		if (&amp;tmp-&gt;list != &amp;fd-&gt;entries) {</div><div class='del'>-			/* found! */</div><div class='del'>-			fd-&gt;next = tmp;</div><div class='del'>-			return;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	/* could not find entry at requested offset in the cache.</div><div class='del'>-	   next readdir_r() will result in glfd_entry_refresh()</div><div class='del'>-	*/</div><div class='add'>+        if (&amp;tmp-&gt;list != &amp;fd-&gt;entries) {</div><div class='add'>+            /* found! */</div><div class='add'>+            fd-&gt;next = tmp;</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    /* could not find entry at requested offset in the cache.</div><div class='add'>+       next readdir_r() will result in glfd_entry_refresh()</div><div class='add'>+    */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_seekdir, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_discard_async_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                        xlator_t *this, int32_t op_ret,</div><div class='del'>-                        int32_t op_errno, struct iatt *preop_stbuf,</div><div class='del'>-                        struct iatt *postop_stbuf, dict_t *xdata)</div><div class='add'>+glfs_discard_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno,</div><div class='add'>+                       struct iatt *preop_stbuf, struct iatt *postop_stbuf,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glfs_io_async_cbk (op_ret, op_errno, frame, cookie, NULL, 0,</div><div class='del'>-                           preop_stbuf, postop_stbuf);</div><div class='add'>+    glfs_io_async_cbk(op_ret, op_errno, frame, cookie, NULL, 0, preop_stbuf,</div><div class='add'>+                      postop_stbuf);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_discard_async_common (struct glfs_fd *glfd, off_t offset, size_t len,</div><div class='del'>-                           gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='add'>+glfs_discard_async_common(struct glfs_fd *glfd, off_t offset, size_t len,</div><div class='add'>+                          gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_io *gio = NULL;</div><div class='del'>-	int             ret = -1;</div><div class='del'>-        call_frame_t   *frame = NULL;</div><div class='del'>-        xlator_t       *subvol = NULL;</div><div class='del'>-        fd_t           *fd = NULL;</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* Need to take explicit ref so that the fd</div><div class='del'>-         * is not destroyed before the fop is complete</div><div class='del'>-         */</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = syncop_create_frame (THIS);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	gio = GF_CALLOC (1, sizeof (*gio), glfs_mt_glfs_io_t);</div><div class='del'>-	if (!gio) {</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gio-&gt;op     = GF_FOP_DISCARD;</div><div class='del'>-	gio-&gt;glfd   = glfd;</div><div class='del'>-	gio-&gt;offset = offset;</div><div class='del'>-	gio-&gt;count  = len;</div><div class='del'>-	gio-&gt;oldcb  = oldcb;</div><div class='del'>-	gio-&gt;fn     = fn;</div><div class='del'>-	gio-&gt;data   = data;</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = gio;</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, glfs_discard_async_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;discard, fd, offset, len, fop_attr);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* Need to take explicit ref so that the fd</div><div class='add'>+     * is not destroyed before the fop is complete</div><div class='add'>+     */</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = syncop_create_frame(THIS);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio = GF_CALLOC(1, sizeof(*gio), glfs_mt_glfs_io_t);</div><div class='add'>+    if (!gio) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;op = GF_FOP_DISCARD;</div><div class='add'>+    gio-&gt;glfd = glfd;</div><div class='add'>+    gio-&gt;offset = offset;</div><div class='add'>+    gio-&gt;count = len;</div><div class='add'>+    gio-&gt;oldcb = oldcb;</div><div class='add'>+    gio-&gt;fn = fn;</div><div class='add'>+    gio-&gt;data = data;</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = gio;</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, glfs_discard_async_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;discard, fd, offset, len, fop_attr);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd)</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                if (glfd)</div><div class='del'>-                        GF_REF_PUT (glfd);</div><div class='del'>-                GF_FREE (gio);</div><div class='del'>-                if (frame)</div><div class='del'>-                        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-                glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd)</div><div class='add'>+            fd_unref(fd);</div><div class='add'>+        if (glfd)</div><div class='add'>+            GF_REF_PUT(glfd);</div><div class='add'>+        GF_FREE(gio);</div><div class='add'>+        if (frame)</div><div class='add'>+            STACK_DESTROY(frame-&gt;root);</div><div class='add'>+        glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_discard_async35 (struct glfs_fd *glfd, off_t offset, size_t len,</div><div class='del'>-                          glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_discard_async35(struct glfs_fd *glfd, off_t offset, size_t len,</div><div class='add'>+                         glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_discard_async_common (glfd, offset, len, _gf_true,</div><div class='del'>-                                          (void *)fn, data);</div><div class='add'>+    return glfs_discard_async_common(glfd, offset, len, _gf_true, (void *)fn,</div><div class='add'>+                                     data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_discard_async35, glfs_discard_async, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_discard_async (struct glfs_fd *glfd, off_t offset, size_t len,</div><div class='del'>-                        glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_discard_async(struct glfs_fd *glfd, off_t offset, size_t len,</div><div class='add'>+                       glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_discard_async_common (glfd, offset, len, _gf_false, fn,</div><div class='del'>-                                          data);</div><div class='add'>+    return glfs_discard_async_common(glfd, offset, len, _gf_false, fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_discard_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_zerofill_async_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this, int32_t op_ret,</div><div class='del'>-                         int32_t op_errno, struct iatt *preop_stbuf,</div><div class='del'>-                         struct iatt *postop_stbuf, dict_t *xdata)</div><div class='add'>+glfs_zerofill_async_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno,</div><div class='add'>+                        struct iatt *preop_stbuf, struct iatt *postop_stbuf,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glfs_io_async_cbk (op_ret, op_errno, frame, cookie, NULL, 0,</div><div class='del'>-                           preop_stbuf, postop_stbuf);</div><div class='add'>+    glfs_io_async_cbk(op_ret, op_errno, frame, cookie, NULL, 0, preop_stbuf,</div><div class='add'>+                      postop_stbuf);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glfs_zerofill_async_common (struct glfs_fd *glfd, off_t offset, off_t len,</div><div class='del'>-                            gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='add'>+glfs_zerofill_async_common(struct glfs_fd *glfd, off_t offset, off_t len,</div><div class='add'>+                           gf_boolean_t oldcb, glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_io *gio  = NULL;</div><div class='del'>-        int             ret  = -1;</div><div class='del'>-        call_frame_t   *frame = NULL;</div><div class='del'>-        xlator_t       *subvol = NULL;</div><div class='del'>-        fd_t           *fd = NULL;</div><div class='del'>-        dict_t         *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* Need to take explicit ref so that the fd</div><div class='del'>-         * is not destroyed before the fop is complete</div><div class='del'>-         */</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = syncop_create_frame (THIS);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gio = GF_CALLOC (1, sizeof (*gio), glfs_mt_glfs_io_t);</div><div class='del'>-        if (!gio) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gio-&gt;op     = GF_FOP_ZEROFILL;</div><div class='del'>-        gio-&gt;glfd   = glfd;</div><div class='del'>-        gio-&gt;offset = offset;</div><div class='del'>-        gio-&gt;count  = len;</div><div class='del'>-	gio-&gt;oldcb  = oldcb;</div><div class='del'>-        gio-&gt;fn     = fn;</div><div class='del'>-        gio-&gt;data   = data;</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = gio;</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, glfs_zerofill_async_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;zerofill, fd, offset, len, fop_attr);</div><div class='del'>-        ret = 0;</div><div class='add'>+    struct glfs_io *gio = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* Need to take explicit ref so that the fd</div><div class='add'>+     * is not destroyed before the fop is complete</div><div class='add'>+     */</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = syncop_create_frame(THIS);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio = GF_CALLOC(1, sizeof(*gio), glfs_mt_glfs_io_t);</div><div class='add'>+    if (!gio) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gio-&gt;op = GF_FOP_ZEROFILL;</div><div class='add'>+    gio-&gt;glfd = glfd;</div><div class='add'>+    gio-&gt;offset = offset;</div><div class='add'>+    gio-&gt;count = len;</div><div class='add'>+    gio-&gt;oldcb = oldcb;</div><div class='add'>+    gio-&gt;fn = fn;</div><div class='add'>+    gio-&gt;data = data;</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = gio;</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, glfs_zerofill_async_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;zerofill, fd, offset, len, fop_attr);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd)</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                if (glfd)</div><div class='del'>-                        GF_REF_PUT (glfd);</div><div class='del'>-                GF_FREE (gio);</div><div class='del'>-                if (frame)</div><div class='del'>-                        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-                glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='del'>-        }</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd)</div><div class='add'>+            fd_unref(fd);</div><div class='add'>+        if (glfd)</div><div class='add'>+            GF_REF_PUT(glfd);</div><div class='add'>+        GF_FREE(gio);</div><div class='add'>+        if (frame)</div><div class='add'>+            STACK_DESTROY(frame-&gt;root);</div><div class='add'>+        glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='add'>+    }</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_zerofill_async35 (struct glfs_fd *glfd, off_t offset, off_t len,</div><div class='del'>-                           glfs_io_cbk34 fn, void *data)</div><div class='add'>+pub_glfs_zerofill_async35(struct glfs_fd *glfd, off_t offset, off_t len,</div><div class='add'>+                          glfs_io_cbk34 fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_zerofill_async_common (glfd, offset, len, _gf_true,</div><div class='del'>-                                           (void *)fn, data);</div><div class='add'>+    return glfs_zerofill_async_common(glfd, offset, len, _gf_true, (void *)fn,</div><div class='add'>+                                      data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_zerofill_async35, glfs_zerofill_async, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_zerofill_async (struct glfs_fd *glfd, off_t offset, off_t len,</div><div class='del'>-                         glfs_io_cbk fn, void *data)</div><div class='add'>+pub_glfs_zerofill_async(struct glfs_fd *glfd, off_t offset, off_t len,</div><div class='add'>+                        glfs_io_cbk fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        return glfs_zerofill_async_common (glfd, offset, len, _gf_false,</div><div class='del'>-                                           fn, data);</div><div class='add'>+    return glfs_zerofill_async_common(glfd, offset, len, _gf_false, fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_zerofill_async, future);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_dirent_to_dirent (gf_dirent_t *gf_dirent, struct dirent *dirent)</div><div class='add'>+gf_dirent_to_dirent(gf_dirent_t *gf_dirent, struct dirent *dirent)</div><div class='ctx'> {</div><div class='del'>-	dirent-&gt;d_ino = gf_dirent-&gt;d_ino;</div><div class='add'>+    dirent-&gt;d_ino = gf_dirent-&gt;d_ino;</div><div class='ctx'> </div><div class='ctx'> #ifdef _DIRENT_HAVE_D_OFF</div><div class='del'>-	dirent-&gt;d_off = gf_dirent-&gt;d_off;</div><div class='add'>+    dirent-&gt;d_off = gf_dirent-&gt;d_off;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef _DIRENT_HAVE_D_TYPE</div><div class='del'>-	dirent-&gt;d_type = gf_dirent-&gt;d_type;</div><div class='add'>+    dirent-&gt;d_type = gf_dirent-&gt;d_type;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef _DIRENT_HAVE_D_NAMLEN</div><div class='del'>-	dirent-&gt;d_namlen = strlen (gf_dirent-&gt;d_name);</div><div class='add'>+    dirent-&gt;d_namlen = strlen(gf_dirent-&gt;d_name);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        snprintf (dirent-&gt;d_name, NAME_MAX, "%s", gf_dirent-&gt;d_name);</div><div class='add'>+    snprintf(dirent-&gt;d_name, NAME_MAX, "%s", gf_dirent-&gt;d_name);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfd_entry_refresh (struct glfs_fd *glfd, int plus)</div><div class='del'>-{</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	gf_dirent_t      entries;</div><div class='del'>-	gf_dirent_t      old;</div><div class='del'>-        gf_dirent_t     *entry = NULL;</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (fd-&gt;inode-&gt;ia_type != IA_IFDIR) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADF;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-	INIT_LIST_HEAD (&amp;old.list);</div><div class='del'>-</div><div class='del'>-	if (plus)</div><div class='del'>-		ret = syncop_readdirp (subvol, fd, 131072, glfd-&gt;offset,</div><div class='del'>-				       &amp;entries, NULL, NULL);</div><div class='del'>-	else</div><div class='del'>-		ret = syncop_readdir (subvol, fd, 131072, glfd-&gt;offset,</div><div class='del'>-				      &amp;entries, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret &gt;= 0) {</div><div class='del'>-		if (plus) {</div><div class='del'>-                        list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                                if (!entry-&gt;inode &amp;&amp;</div><div class='del'>-                                    !IA_ISDIR (entry-&gt;d_stat.ia_type)) {</div><div class='del'>-                                        /* entry-&gt;inode for directories will be</div><div class='del'>-                                         * always set to null to force a lookup</div><div class='del'>-                                         * on the dentry. Also we will have</div><div class='del'>-                                         * proper stat if directory present on</div><div class='del'>-                                         * hashed subvolume.</div><div class='del'>-                                         */</div><div class='del'>-                                        gf_fill_iatt_for_dirent (entry,</div><div class='del'>-                                                                 fd-&gt;inode,</div><div class='del'>-                                                                 subvol);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-			gf_link_inodes_from_dirent (THIS, fd-&gt;inode, &amp;entries);</div><div class='add'>+glfd_entry_refresh(struct glfs_fd *glfd, int plus)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t old;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd-&gt;inode-&gt;ia_type != IA_IFDIR) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADF;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;old.list);</div><div class='add'>+</div><div class='add'>+    if (plus)</div><div class='add'>+        ret = syncop_readdirp(subvol, fd, 131072, glfd-&gt;offset, &amp;entries, NULL,</div><div class='add'>+                              NULL);</div><div class='add'>+    else</div><div class='add'>+        ret = syncop_readdir(subvol, fd, 131072, glfd-&gt;offset, &amp;entries, NULL,</div><div class='add'>+                             NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        if (plus) {</div><div class='add'>+            list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+            {</div><div class='add'>+                if (!entry-&gt;inode &amp;&amp; !IA_ISDIR(entry-&gt;d_stat.ia_type)) {</div><div class='add'>+                    /* entry-&gt;inode for directories will be</div><div class='add'>+                     * always set to null to force a lookup</div><div class='add'>+                     * on the dentry. Also we will have</div><div class='add'>+                     * proper stat if directory present on</div><div class='add'>+                     * hashed subvolume.</div><div class='add'>+                     */</div><div class='add'>+                    gf_fill_iatt_for_dirent(entry, fd-&gt;inode, subvol);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-		list_splice_init (&amp;glfd-&gt;entries, &amp;old.list);</div><div class='del'>-		list_splice_init (&amp;entries.list, &amp;glfd-&gt;entries);</div><div class='add'>+            gf_link_inodes_from_dirent(THIS, fd-&gt;inode, &amp;entries);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		/* spurious errno is dangerous for glfd_entry_next() */</div><div class='del'>-		errno = 0;</div><div class='del'>-	}</div><div class='add'>+        list_splice_init(&amp;glfd-&gt;entries, &amp;old.list);</div><div class='add'>+        list_splice_init(&amp;entries.list, &amp;glfd-&gt;entries);</div><div class='ctx'> </div><div class='add'>+        /* spurious errno is dangerous for glfd_entry_next() */</div><div class='add'>+        errno = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (ret &gt; 0)</div><div class='del'>-		glfd-&gt;next = list_entry (glfd-&gt;entries.next, gf_dirent_t, list);</div><div class='add'>+    if (ret &gt; 0)</div><div class='add'>+        glfd-&gt;next = list_entry(glfd-&gt;entries.next, gf_dirent_t, list);</div><div class='ctx'> </div><div class='del'>-	gf_dirent_free (&amp;old);</div><div class='add'>+    gf_dirent_free(&amp;old);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_dirent_t *</div><div class='del'>-glfd_entry_next (struct glfs_fd *glfd, int plus)</div><div class='add'>+glfd_entry_next(struct glfs_fd *glfd, int plus)</div><div class='ctx'> {</div><div class='del'>-	gf_dirent_t     *entry = NULL;</div><div class='del'>-	int              ret = -1;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	if (!glfd-&gt;offset || !glfd-&gt;next) {</div><div class='del'>-		ret = glfd_entry_refresh (glfd, plus);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			return NULL;</div><div class='del'>-	}</div><div class='add'>+    if (!glfd-&gt;offset || !glfd-&gt;next) {</div><div class='add'>+        ret = glfd_entry_refresh(glfd, plus);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	entry = glfd-&gt;next;</div><div class='del'>-	if (!entry)</div><div class='del'>-		return NULL;</div><div class='add'>+    entry = glfd-&gt;next;</div><div class='add'>+    if (!entry)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	if (&amp;entry-&gt;next-&gt;list == &amp;glfd-&gt;entries)</div><div class='del'>-		glfd-&gt;next = NULL;</div><div class='del'>-	else</div><div class='del'>-		glfd-&gt;next = entry-&gt;next;</div><div class='add'>+    if (&amp;entry-&gt;next-&gt;list == &amp;glfd-&gt;entries)</div><div class='add'>+        glfd-&gt;next = NULL;</div><div class='add'>+    else</div><div class='add'>+        glfd-&gt;next = entry-&gt;next;</div><div class='ctx'> </div><div class='del'>-	glfd-&gt;offset = entry-&gt;d_off;</div><div class='add'>+    glfd-&gt;offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-	return entry;</div><div class='add'>+    return entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirent *</div><div class='del'>-glfs_readdirbuf_get (struct glfs_fd *glfd)</div><div class='add'>+glfs_readdirbuf_get(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        struct dirent *buf = NULL;</div><div class='add'>+    struct dirent *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;glfd-&gt;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                buf = glfd-&gt;readdirbuf;</div><div class='del'>-                if (buf) {</div><div class='del'>-                        memset (buf, 0, READDIRBUF_SIZE);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                buf = GF_CALLOC (1, READDIRBUF_SIZE, glfs_mt_readdirbuf_t);</div><div class='del'>-                if (!buf) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;glfd-&gt;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        buf = glfd-&gt;readdirbuf;</div><div class='add'>+        if (buf) {</div><div class='add'>+            memset(buf, 0, READDIRBUF_SIZE);</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                glfd-&gt;readdirbuf = buf;</div><div class='add'>+        buf = GF_CALLOC(1, READDIRBUF_SIZE, glfs_mt_readdirbuf_t);</div><div class='add'>+        if (!buf) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        glfd-&gt;readdirbuf = buf;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;glfd-&gt;fd-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;glfd-&gt;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return buf;</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_readdirplus_r (struct glfs_fd *glfd, struct stat *stat,</div><div class='del'>-                        struct dirent *ext, struct dirent **res)</div><div class='add'>+pub_glfs_readdirplus_r(struct glfs_fd *glfd, struct stat *stat,</div><div class='add'>+                       struct dirent *ext, struct dirent **res)</div><div class='ctx'> {</div><div class='del'>-	int              ret = 0;</div><div class='del'>-	gf_dirent_t     *entry = NULL;</div><div class='del'>-	struct dirent   *buf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    struct dirent *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        GF_REF_GET (glfd);</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='ctx'> </div><div class='del'>-	errno = 0;</div><div class='add'>+    errno = 0;</div><div class='ctx'> </div><div class='del'>-	if (ext)</div><div class='del'>-		buf = ext;</div><div class='del'>-	else</div><div class='del'>-		buf = glfs_readdirbuf_get (glfd);</div><div class='add'>+    if (ext)</div><div class='add'>+        buf = ext;</div><div class='add'>+    else</div><div class='add'>+        buf = glfs_readdirbuf_get(glfd);</div><div class='ctx'> </div><div class='del'>-	if (!buf) {</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='add'>+    if (!buf) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	entry = glfd_entry_next (glfd, !!stat);</div><div class='del'>-	if (errno)</div><div class='del'>-		ret = -1;</div><div class='add'>+    entry = glfd_entry_next(glfd, !!stat);</div><div class='add'>+    if (errno)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-	if (res) {</div><div class='del'>-		if (entry)</div><div class='del'>-			*res = buf;</div><div class='del'>-		else</div><div class='del'>-			*res = NULL;</div><div class='del'>-	}</div><div class='add'>+    if (res) {</div><div class='add'>+        if (entry)</div><div class='add'>+            *res = buf;</div><div class='add'>+        else</div><div class='add'>+            *res = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (entry) {</div><div class='del'>-		gf_dirent_to_dirent (entry, buf);</div><div class='del'>-		if (stat)</div><div class='del'>-			glfs_iatt_to_stat (glfd-&gt;fs, &amp;entry-&gt;d_stat, stat);</div><div class='del'>-	}</div><div class='add'>+    if (entry) {</div><div class='add'>+        gf_dirent_to_dirent(entry, buf);</div><div class='add'>+        if (stat)</div><div class='add'>+            glfs_iatt_to_stat(glfd-&gt;fs, &amp;entry-&gt;d_stat, stat);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readdirplus_r, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_readdir_r (struct glfs_fd *glfd, struct dirent *buf,</div><div class='del'>-                    struct dirent **res)</div><div class='add'>+pub_glfs_readdir_r(struct glfs_fd *glfd, struct dirent *buf,</div><div class='add'>+                   struct dirent **res)</div><div class='ctx'> {</div><div class='del'>-	return pub_glfs_readdirplus_r (glfd, 0, buf, res);</div><div class='add'>+    return pub_glfs_readdirplus_r(glfd, 0, buf, res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readdir_r, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirent *</div><div class='del'>-pub_glfs_readdirplus (struct glfs_fd *glfd, struct stat *stat)</div><div class='add'>+pub_glfs_readdirplus(struct glfs_fd *glfd, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        struct dirent *res = NULL;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    struct dirent *res = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = pub_glfs_readdirplus_r (glfd, stat, NULL, &amp;res);</div><div class='del'>-        if (ret)</div><div class='del'>-                return NULL;</div><div class='add'>+    ret = pub_glfs_readdirplus_r(glfd, stat, NULL, &amp;res);</div><div class='add'>+    if (ret)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        return res;</div><div class='add'>+    return res;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readdirplus, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirent *</div><div class='del'>-pub_glfs_readdir (struct glfs_fd *glfd)</div><div class='add'>+pub_glfs_readdir(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        return pub_glfs_readdirplus (glfd, NULL);</div><div class='add'>+    return pub_glfs_readdirplus(glfd, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_readdir, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_statvfs (struct glfs *fs, const char *path, struct statvfs *buf)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_statvfs(struct glfs *fs, const char *path, struct statvfs *buf)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = syncop_statfs (subvol, &amp;loc, buf, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_statfs(subvol, &amp;loc, buf, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_statvfs, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_setattr (struct glfs *fs, const char *path, struct iatt *iatt,</div><div class='del'>-	      int valid, int follow)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      riatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+glfs_setattr(struct glfs *fs, const char *path, struct iatt *iatt, int valid,</div><div class='add'>+             int follow)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt riatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	if (follow)</div><div class='del'>-		ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;riatt, reval);</div><div class='del'>-	else</div><div class='del'>-		ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;riatt, reval);</div><div class='add'>+    if (follow)</div><div class='add'>+        ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;riatt, reval);</div><div class='add'>+    else</div><div class='add'>+        ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;riatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* TODO : Add leaseid */</div><div class='del'>-	ret = syncop_setattr (subvol, &amp;loc, iatt, valid, 0, 0, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    /* TODO : Add leaseid */</div><div class='add'>+    ret = syncop_setattr(subvol, &amp;loc, iatt, valid, 0, 0, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_fsetattr (struct glfs_fd *glfd, struct iatt *iatt, int valid)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* TODO : Add leaseid */</div><div class='del'>-	ret = syncop_fsetattr (subvol, fd, iatt, valid, 0, 0, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+glfs_fsetattr(struct glfs_fd *glfd, struct iatt *iatt, int valid)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO : Add leaseid */</div><div class='add'>+    ret = syncop_fsetattr(subvol, fd, iatt, valid, 0, 0, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_chmod (struct glfs *fs, const char *path, mode_t mode)</div><div class='add'>+pub_glfs_chmod(struct glfs *fs, const char *path, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              valid = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int valid = 0;</div><div class='ctx'> </div><div class='del'>-	iatt.ia_prot = ia_prot_from_st_mode (mode);</div><div class='del'>-	valid = GF_SET_ATTR_MODE;</div><div class='add'>+    iatt.ia_prot = ia_prot_from_st_mode(mode);</div><div class='add'>+    valid = GF_SET_ATTR_MODE;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_setattr (fs, path, &amp;iatt, valid, 1);</div><div class='add'>+    ret = glfs_setattr(fs, path, &amp;iatt, valid, 1);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_chmod, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fchmod (struct glfs_fd *glfd, mode_t mode)</div><div class='add'>+pub_glfs_fchmod(struct glfs_fd *glfd, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              valid = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int valid = 0;</div><div class='ctx'> </div><div class='del'>-	iatt.ia_prot = ia_prot_from_st_mode (mode);</div><div class='del'>-	valid = GF_SET_ATTR_MODE;</div><div class='add'>+    iatt.ia_prot = ia_prot_from_st_mode(mode);</div><div class='add'>+    valid = GF_SET_ATTR_MODE;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_fsetattr (glfd, &amp;iatt, valid);</div><div class='add'>+    ret = glfs_fsetattr(glfd, &amp;iatt, valid);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fchmod, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_chown (struct glfs *fs, const char *path, uid_t uid, gid_t gid)</div><div class='add'>+pub_glfs_chown(struct glfs *fs, const char *path, uid_t uid, gid_t gid)</div><div class='ctx'> {</div><div class='del'>-	int              ret = 0;</div><div class='del'>-	int              valid = 0;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int valid = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (uid != (uid_t) -1) {</div><div class='del'>-                iatt.ia_uid = uid;</div><div class='del'>-                valid = GF_SET_ATTR_UID;</div><div class='del'>-        }</div><div class='add'>+    if (uid != (uid_t)-1) {</div><div class='add'>+        iatt.ia_uid = uid;</div><div class='add'>+        valid = GF_SET_ATTR_UID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (gid != (uid_t) -1) {</div><div class='del'>-                iatt.ia_gid = gid;</div><div class='del'>-                valid = valid | GF_SET_ATTR_GID;</div><div class='del'>-        }</div><div class='add'>+    if (gid != (uid_t)-1) {</div><div class='add'>+        iatt.ia_gid = gid;</div><div class='add'>+        valid = valid | GF_SET_ATTR_GID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (valid)</div><div class='del'>-	        ret = glfs_setattr (fs, path, &amp;iatt, valid, 1);</div><div class='add'>+    if (valid)</div><div class='add'>+        ret = glfs_setattr(fs, path, &amp;iatt, valid, 1);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_chown, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_lchown (struct glfs *fs, const char *path, uid_t uid, gid_t gid)</div><div class='add'>+pub_glfs_lchown(struct glfs *fs, const char *path, uid_t uid, gid_t gid)</div><div class='ctx'> {</div><div class='del'>-	int              ret = 0;</div><div class='del'>-	int              valid = 0;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int valid = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (uid != (uid_t) -1) {</div><div class='del'>-	        iatt.ia_uid = uid;</div><div class='del'>-	        valid = GF_SET_ATTR_UID;</div><div class='del'>-        }</div><div class='add'>+    if (uid != (uid_t)-1) {</div><div class='add'>+        iatt.ia_uid = uid;</div><div class='add'>+        valid = GF_SET_ATTR_UID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (gid != (uid_t) -1) {</div><div class='del'>-                iatt.ia_gid = gid;</div><div class='del'>-                valid = valid | GF_SET_ATTR_GID;</div><div class='del'>-        }</div><div class='add'>+    if (gid != (uid_t)-1) {</div><div class='add'>+        iatt.ia_gid = gid;</div><div class='add'>+        valid = valid | GF_SET_ATTR_GID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (valid)</div><div class='del'>-	        ret = glfs_setattr (fs, path, &amp;iatt, valid, 0);</div><div class='add'>+    if (valid)</div><div class='add'>+        ret = glfs_setattr(fs, path, &amp;iatt, valid, 0);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lchown, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fchown (struct glfs_fd *glfd, uid_t uid, gid_t gid)</div><div class='add'>+pub_glfs_fchown(struct glfs_fd *glfd, uid_t uid, gid_t gid)</div><div class='ctx'> {</div><div class='del'>-	int              ret = 0;</div><div class='del'>-	int              valid = 0;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int valid = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (uid != (uid_t) -1) {</div><div class='del'>-                iatt.ia_uid = uid;</div><div class='del'>-                valid = GF_SET_ATTR_UID;</div><div class='del'>-        }</div><div class='add'>+    if (uid != (uid_t)-1) {</div><div class='add'>+        iatt.ia_uid = uid;</div><div class='add'>+        valid = GF_SET_ATTR_UID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (gid != (uid_t) -1) {</div><div class='del'>-                iatt.ia_gid = gid;</div><div class='del'>-                valid = valid | GF_SET_ATTR_GID;</div><div class='del'>-        }</div><div class='add'>+    if (gid != (uid_t)-1) {</div><div class='add'>+        iatt.ia_gid = gid;</div><div class='add'>+        valid = valid | GF_SET_ATTR_GID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (valid)</div><div class='del'>-	        ret = glfs_fsetattr (glfd, &amp;iatt, valid);</div><div class='add'>+    if (valid)</div><div class='add'>+        ret = glfs_fsetattr(glfd, &amp;iatt, valid);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fchown, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_utimens (struct glfs *fs, const char *path,</div><div class='del'>-                  const struct timespec times[2])</div><div class='add'>+pub_glfs_utimens(struct glfs *fs, const char *path,</div><div class='add'>+                 const struct timespec times[2])</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	int              valid = 0;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int valid = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	iatt.ia_atime = times[0].tv_sec;</div><div class='del'>-	iatt.ia_atime_nsec = times[0].tv_nsec;</div><div class='del'>-	iatt.ia_mtime = times[1].tv_sec;</div><div class='del'>-	iatt.ia_mtime_nsec = times[1].tv_nsec;</div><div class='add'>+    iatt.ia_atime = times[0].tv_sec;</div><div class='add'>+    iatt.ia_atime_nsec = times[0].tv_nsec;</div><div class='add'>+    iatt.ia_mtime = times[1].tv_sec;</div><div class='add'>+    iatt.ia_mtime_nsec = times[1].tv_nsec;</div><div class='ctx'> </div><div class='del'>-	valid = GF_SET_ATTR_ATIME|GF_SET_ATTR_MTIME;</div><div class='add'>+    valid = GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_setattr (fs, path, &amp;iatt, valid, 1);</div><div class='add'>+    ret = glfs_setattr(fs, path, &amp;iatt, valid, 1);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_utimens, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_lutimens (struct glfs *fs, const char *path,</div><div class='del'>-                   const struct timespec times[2])</div><div class='add'>+pub_glfs_lutimens(struct glfs *fs, const char *path,</div><div class='add'>+                  const struct timespec times[2])</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	int              valid = 0;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int valid = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	iatt.ia_atime = times[0].tv_sec;</div><div class='del'>-	iatt.ia_atime_nsec = times[0].tv_nsec;</div><div class='del'>-	iatt.ia_mtime = times[1].tv_sec;</div><div class='del'>-	iatt.ia_mtime_nsec = times[1].tv_nsec;</div><div class='add'>+    iatt.ia_atime = times[0].tv_sec;</div><div class='add'>+    iatt.ia_atime_nsec = times[0].tv_nsec;</div><div class='add'>+    iatt.ia_mtime = times[1].tv_sec;</div><div class='add'>+    iatt.ia_mtime_nsec = times[1].tv_nsec;</div><div class='ctx'> </div><div class='del'>-	valid = GF_SET_ATTR_ATIME|GF_SET_ATTR_MTIME;</div><div class='add'>+    valid = GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_setattr (fs, path, &amp;iatt, valid, 0);</div><div class='add'>+    ret = glfs_setattr(fs, path, &amp;iatt, valid, 0);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lutimens, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_futimens (struct glfs_fd *glfd, const struct timespec times[2])</div><div class='add'>+pub_glfs_futimens(struct glfs_fd *glfd, const struct timespec times[2])</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	int              valid = 0;</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int valid = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	iatt.ia_atime = times[0].tv_sec;</div><div class='del'>-	iatt.ia_atime_nsec = times[0].tv_nsec;</div><div class='del'>-	iatt.ia_mtime = times[1].tv_sec;</div><div class='del'>-	iatt.ia_mtime_nsec = times[1].tv_nsec;</div><div class='add'>+    iatt.ia_atime = times[0].tv_sec;</div><div class='add'>+    iatt.ia_atime_nsec = times[0].tv_nsec;</div><div class='add'>+    iatt.ia_mtime = times[1].tv_sec;</div><div class='add'>+    iatt.ia_mtime_nsec = times[1].tv_nsec;</div><div class='ctx'> </div><div class='del'>-	valid = GF_SET_ATTR_ATIME|GF_SET_ATTR_MTIME;</div><div class='add'>+    valid = GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_fsetattr (glfd, &amp;iatt, valid);</div><div class='add'>+    ret = glfs_fsetattr(glfd, &amp;iatt, valid);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_futimens, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_getxattr_process (void *value, size_t size, dict_t *xattr,</div><div class='del'>-		       const char *name)</div><div class='del'>-{</div><div class='del'>-	data_t *data = NULL;</div><div class='del'>-	int     ret = -1;</div><div class='del'>-</div><div class='del'>-	data = dict_get (xattr, (char *)name);</div><div class='del'>-	if (!data) {</div><div class='del'>-		errno = ENODATA;</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = data-&gt;len;</div><div class='del'>-	if (!value || !size)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (size &lt; ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ERANGE;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	memcpy (value, data-&gt;data, ret);</div><div class='del'>-out:</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-ssize_t</div><div class='del'>-glfs_getxattr_common (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-		      void *value, size_t size, int follow)</div><div class='add'>+glfs_getxattr_process(void *value, size_t size, dict_t *xattr, const char *name)</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	dict_t          *xattr = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    data = dict_get(xattr, (char *)name);</div><div class='add'>+    if (!data) {</div><div class='add'>+        errno = ENODATA;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!name || *name == '\0') {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = data-&gt;len;</div><div class='add'>+    if (!value || !size)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENAMETOOLONG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (size &lt; ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(value, data-&gt;data, ret);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+ssize_t</div><div class='add'>+glfs_getxattr_common(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                     void *value, size_t size, int follow)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    if (!name || *name == '\0') {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENAMETOOLONG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> retry:</div><div class='del'>-	if (follow)</div><div class='del'>-		ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-	else</div><div class='del'>-		ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    if (follow)</div><div class='add'>+        ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    else</div><div class='add'>+        ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = syncop_getxattr (subvol, &amp;loc, &amp;xattr, name, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;loc, &amp;xattr, name, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_getxattr_process (value, size, xattr, name);</div><div class='add'>+    ret = glfs_getxattr_process(value, size, xattr, name);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_getxattr (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-                   void *value, size_t size)</div><div class='add'>+pub_glfs_getxattr(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                  void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-	return glfs_getxattr_common (fs, path, name, value, size, 1);</div><div class='add'>+    return glfs_getxattr_common(fs, path, name, value, size, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_getxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_lgetxattr (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-                    void *value, size_t size)</div><div class='add'>+pub_glfs_lgetxattr(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                   void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-	return glfs_getxattr_common (fs, path, name, value, size, 0);</div><div class='add'>+    return glfs_getxattr_common(fs, path, name, value, size, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lgetxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_fgetxattr (struct glfs_fd *glfd, const char *name, void *value,</div><div class='del'>-                    size_t size)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	dict_t          *xattr = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        if (!name || *name == '\0') {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENAMETOOLONG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = syncop_fgetxattr (subvol, fd, &amp;xattr, name, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	ret = glfs_getxattr_process (value, size, xattr, name);</div><div class='add'>+pub_glfs_fgetxattr(struct glfs_fd *glfd, const char *name, void *value,</div><div class='add'>+                   size_t size)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    if (!name || *name == '\0') {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENAMETOOLONG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fgetxattr(subvol, fd, &amp;xattr, name, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfs_getxattr_process(value, size, xattr, name);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fgetxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_listxattr_process (void *value, size_t size, dict_t *xattr)</div><div class='add'>+glfs_listxattr_process(void *value, size_t size, dict_t *xattr)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	if (!xattr)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!xattr)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = dict_keys_join (NULL, 0, xattr, NULL);</div><div class='add'>+    ret = dict_keys_join(NULL, 0, xattr, NULL);</div><div class='ctx'> </div><div class='del'>-        if (!value || !size)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!value || !size)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (size &lt; ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ERANGE;</div><div class='del'>-	} else {</div><div class='del'>-		dict_keys_join (value, size, xattr, NULL);</div><div class='del'>-	}</div><div class='add'>+    if (size &lt; ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+    } else {</div><div class='add'>+        dict_keys_join(value, size, xattr, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-glfs_listxattr_common (struct glfs *fs, const char *path, void *value,</div><div class='del'>-		       size_t size, int follow)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	dict_t          *xattr = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+glfs_listxattr_common(struct glfs *fs, const char *path, void *value,</div><div class='add'>+                      size_t size, int follow)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> retry:</div><div class='del'>-	if (follow)</div><div class='del'>-		ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-	else</div><div class='del'>-		ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    if (follow)</div><div class='add'>+        ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    else</div><div class='add'>+        ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = syncop_getxattr (subvol, &amp;loc, &amp;xattr, NULL, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;loc, &amp;xattr, NULL, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_listxattr_process (value, size, xattr);</div><div class='add'>+    ret = glfs_listxattr_process(value, size, xattr);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_listxattr (struct glfs *fs, const char *path, void *value, size_t size)</div><div class='add'>+pub_glfs_listxattr(struct glfs *fs, const char *path, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-	return glfs_listxattr_common (fs, path, value, size, 1);</div><div class='add'>+    return glfs_listxattr_common(fs, path, value, size, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_listxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_llistxattr (struct glfs *fs, const char *path, void *value, size_t size)</div><div class='add'>+pub_glfs_llistxattr(struct glfs *fs, const char *path, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-	return glfs_listxattr_common (fs, path, value, size, 0);</div><div class='add'>+    return glfs_listxattr_common(fs, path, value, size, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_llistxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_flistxattr (struct glfs_fd *glfd, void *value, size_t size)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	dict_t          *xattr = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = syncop_fgetxattr (subvol, fd, &amp;xattr, NULL, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	ret = glfs_listxattr_process (value, size, xattr);</div><div class='add'>+pub_glfs_flistxattr(struct glfs_fd *glfd, void *value, size_t size)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fgetxattr(subvol, fd, &amp;xattr, NULL, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfs_listxattr_process(value, size, xattr);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_flistxattr, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_setxattr_common (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-		      const void *value, size_t size, int flags, int follow)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	dict_t          *xattr = NULL;</div><div class='del'>-	int              reval = 0;</div><div class='del'>-        void            *value_cp = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        if (!name || *name == '\0') {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENAMETOOLONG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+glfs_setxattr_common(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                     const void *value, size_t size, int flags, int follow)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+    void *value_cp = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    if (!name || *name == '\0') {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENAMETOOLONG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> retry:</div><div class='del'>-	if (follow)</div><div class='del'>-		ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-	else</div><div class='del'>-		ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    if (follow)</div><div class='add'>+        ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    else</div><div class='add'>+        ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        value_cp = gf_memdup (value, size);</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG (subvol-&gt;name, value_cp, ret, "Failed to"</div><div class='del'>-                                " duplicate setxattr value", out);</div><div class='add'>+    value_cp = gf_memdup(value, size);</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG(subvol-&gt;name, value_cp, ret,</div><div class='add'>+                           "Failed to"</div><div class='add'>+                           " duplicate setxattr value",</div><div class='add'>+                           out);</div><div class='ctx'> </div><div class='del'>-	xattr = dict_for_key_value (name, value_cp, size, _gf_false);</div><div class='del'>-	if (!xattr) {</div><div class='del'>-                GF_FREE (value_cp);</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    xattr = dict_for_key_value(name, value_cp, size, _gf_false);</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        GF_FREE(value_cp);</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_setxattr (subvol, &amp;loc, xattr, flags, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_setxattr(subvol, &amp;loc, xattr, flags, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref (xattr);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_setxattr (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-                   const void *value, size_t size, int flags)</div><div class='add'>+pub_glfs_setxattr(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                  const void *value, size_t size, int flags)</div><div class='ctx'> {</div><div class='del'>-	return glfs_setxattr_common (fs, path, name, value, size, flags, 1);</div><div class='add'>+    return glfs_setxattr_common(fs, path, name, value, size, flags, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_lsetxattr (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-                    const void *value, size_t size, int flags)</div><div class='add'>+pub_glfs_lsetxattr(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                   const void *value, size_t size, int flags)</div><div class='ctx'> {</div><div class='del'>-	return glfs_setxattr_common (fs, path, name, value, size, flags, 0);</div><div class='add'>+    return glfs_setxattr_common(fs, path, name, value, size, flags, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lsetxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fsetxattr (struct glfs_fd *glfd, const char *name, const void *value,</div><div class='del'>-                    size_t size, int flags)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	dict_t          *xattr = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='del'>-        void            *value_cp = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        if (!name || *name == '\0') {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENAMETOOLONG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        value_cp = gf_memdup (value, size);</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG (subvol-&gt;name, value_cp, ret, "Failed to"</div><div class='del'>-                                " duplicate setxattr value", out);</div><div class='del'>-</div><div class='del'>-	xattr = dict_for_key_value (name, value_cp, size, _gf_false);</div><div class='del'>-	if (!xattr) {</div><div class='del'>-                GF_FREE (value_cp);</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = syncop_fsetxattr (subvol, fd, xattr, flags, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+pub_glfs_fsetxattr(struct glfs_fd *glfd, const char *name, const void *value,</div><div class='add'>+                   size_t size, int flags)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    void *value_cp = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    if (!name || *name == '\0') {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENAMETOOLONG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    value_cp = gf_memdup(value, size);</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG(subvol-&gt;name, value_cp, ret,</div><div class='add'>+                           "Failed to"</div><div class='add'>+                           " duplicate setxattr value",</div><div class='add'>+                           out);</div><div class='add'>+</div><div class='add'>+    xattr = dict_for_key_value(name, value_cp, size, _gf_false);</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        GF_FREE(value_cp);</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetxattr(subvol, fd, xattr, flags, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fsetxattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_removexattr_common (struct glfs *fs, const char *path, const char *name,</div><div class='del'>-			 int follow)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+glfs_removexattr_common(struct glfs *fs, const char *path, const char *name,</div><div class='add'>+                        int follow)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	if (follow)</div><div class='del'>-		ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-	else</div><div class='del'>-		ret = glfs_lresolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    if (follow)</div><div class='add'>+        ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    else</div><div class='add'>+        ret = glfs_lresolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = syncop_removexattr (subvol, &amp;loc, name, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_removexattr(subvol, &amp;loc, name, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_removexattr (struct glfs *fs, const char *path, const char *name)</div><div class='add'>+pub_glfs_removexattr(struct glfs *fs, const char *path, const char *name)</div><div class='ctx'> {</div><div class='del'>-	return glfs_removexattr_common (fs, path, name, 1);</div><div class='add'>+    return glfs_removexattr_common(fs, path, name, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_removexattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_lremovexattr (struct glfs *fs, const char *path, const char *name)</div><div class='add'>+pub_glfs_lremovexattr(struct glfs *fs, const char *path, const char *name)</div><div class='ctx'> {</div><div class='del'>-	return glfs_removexattr_common (fs, path, name, 0);</div><div class='add'>+    return glfs_removexattr_common(fs, path, name, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lremovexattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fremovexattr (struct glfs_fd *glfd, const char *name)</div><div class='add'>+pub_glfs_fremovexattr(struct glfs_fd *glfd, const char *name)</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t            *fd = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        GF_REF_GET (glfd);</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='ctx'> </div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_fremovexattr (subvol, fd, name, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_fremovexattr(subvol, fd, name, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fremovexattr, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fallocate (struct glfs_fd *glfd, int keep_size, off_t offset, size_t len)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t		*fd = NULL;</div><div class='del'>-        dict_t          *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	ret = syncop_fallocate (subvol, fd, keep_size, offset, len, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+pub_glfs_fallocate(struct glfs_fd *glfd, int keep_size, off_t offset,</div><div class='add'>+                   size_t len)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_fallocate(subvol, fd, keep_size, offset, len, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fallocate, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_discard (struct glfs_fd *glfd, off_t offset, size_t len)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	fd_t		*fd = NULL;</div><div class='del'>-        dict_t          *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-	ret = syncop_discard (subvol, fd, offset, len, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+pub_glfs_discard(struct glfs_fd *glfd, off_t offset, size_t len)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_discard(subvol, fd, offset, len, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_discard, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_zerofill (struct glfs_fd *glfd, off_t offset, off_t len)</div><div class='add'>+pub_glfs_zerofill(struct glfs_fd *glfd, off_t offset, off_t len)</div><div class='ctx'> {</div><div class='del'>-        int               ret             = -1;</div><div class='del'>-        xlator_t         *subvol          = NULL;</div><div class='del'>-        fd_t             *fd              = NULL;</div><div class='del'>-        dict_t           *fop_attr         = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        GF_REF_GET (glfd);</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='ctx'> </div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='ctx'> </div><div class='del'>-        ret = syncop_zerofill (subvol, fd, offset, len, fop_attr, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_zerofill(subvol, fd, offset, len, fop_attr, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref(fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_zerofill, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_chdir (struct glfs *fs, const char *path)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+pub_glfs_chdir(struct glfs *fs, const char *path)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (!IA_ISDIR (iatt.ia_type)) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOTDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (!IA_ISDIR(iatt.ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOTDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	glfs_cwd_set (fs, loc.inode);</div><div class='add'>+    glfs_cwd_set(fs, loc.inode);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_chdir, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_fchdir (struct glfs_fd *glfd)</div><div class='del'>-{</div><div class='del'>-	int       ret = -1;</div><div class='del'>-	inode_t  *inode = NULL;</div><div class='del'>-	xlator_t *subvol = NULL;</div><div class='del'>-	fd_t     *fd = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	inode = fd-&gt;inode;</div><div class='del'>-</div><div class='del'>-	if (!IA_ISDIR (inode-&gt;ia_type)) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOTDIR;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glfs_cwd_set (glfd-&gt;fs, inode);</div><div class='del'>-	ret = 0;</div><div class='add'>+pub_glfs_fchdir(struct glfs_fd *glfd)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode = fd-&gt;inode;</div><div class='add'>+</div><div class='add'>+    if (!IA_ISDIR(inode-&gt;ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOTDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_cwd_set(glfd-&gt;fs, inode);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fchdir, 3.4.0);</div><div class='hunk'>@@ -4626,680 +4679,673 @@ GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fchdir, 3.4.0);</div><div class='ctx'> static gf_boolean_t warn_realpath = _gf_true; /* log once */</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-glfs_realpath_common (struct glfs *fs, const char *path, char *resolved_path,</div><div class='del'>-                      gf_boolean_t warn_deprecated)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	char            *retpath = NULL;</div><div class='del'>-	char            *allocpath = NULL;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-	struct iatt      iatt = {0, };</div><div class='del'>-	int              reval = 0;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	if (resolved_path)</div><div class='del'>-		retpath = resolved_path;</div><div class='del'>-        else if (warn_deprecated) {</div><div class='del'>-                retpath = allocpath = malloc (PATH_MAX + 1);</div><div class='del'>-                if (warn_realpath) {</div><div class='del'>-                        warn_realpath = _gf_false;</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_WARNING, "this application "</div><div class='del'>-                                "is compiled against an old version of "</div><div class='del'>-                                "libgfapi, it should use glfs_free() to "</div><div class='del'>-                                "release the path returned by "</div><div class='del'>-                                "glfs_realpath()");</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                retpath = allocpath = GLFS_CALLOC (1, PATH_MAX + 1, NULL,</div><div class='del'>-                                                   glfs_mt_realpath_t);</div><div class='add'>+glfs_realpath_common(struct glfs *fs, const char *path, char *resolved_path,</div><div class='add'>+                     gf_boolean_t warn_deprecated)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *retpath = NULL;</div><div class='add'>+    char *allocpath = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int reval = 0;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    if (resolved_path)</div><div class='add'>+        retpath = resolved_path;</div><div class='add'>+    else if (warn_deprecated) {</div><div class='add'>+        retpath = allocpath = malloc(PATH_MAX + 1);</div><div class='add'>+        if (warn_realpath) {</div><div class='add'>+            warn_realpath = _gf_false;</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "this application "</div><div class='add'>+                   "is compiled against an old version of "</div><div class='add'>+                   "libgfapi, it should use glfs_free() to "</div><div class='add'>+                   "release the path returned by "</div><div class='add'>+                   "glfs_realpath()");</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-	if (!retpath) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    } else {</div><div class='add'>+        retpath = allocpath = GLFS_CALLOC(1, PATH_MAX + 1, NULL,</div><div class='add'>+                                          glfs_mt_realpath_t);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!retpath) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> retry:</div><div class='del'>-	ret = glfs_resolve (fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+    ret = glfs_resolve(fs, subvol, path, &amp;loc, &amp;iatt, reval);</div><div class='ctx'> </div><div class='del'>-	ESTALE_RETRY (ret, errno, reval, &amp;loc, retry);</div><div class='add'>+    ESTALE_RETRY(ret, errno, reval, &amp;loc, retry);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (loc.path) {</div><div class='del'>-                snprintf (retpath, PATH_MAX, "%s", loc.path);</div><div class='del'>-	}</div><div class='add'>+    if (loc.path) {</div><div class='add'>+        snprintf(retpath, PATH_MAX, "%s", loc.path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	if (ret == -1) {</div><div class='del'>-                if (warn_deprecated &amp;&amp; allocpath)</div><div class='del'>-                        free (allocpath);</div><div class='del'>-                else if (allocpath)</div><div class='del'>-                        GLFS_FREE (allocpath);</div><div class='del'>-                retpath = NULL;</div><div class='del'>-	}</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (warn_deprecated &amp;&amp; allocpath)</div><div class='add'>+            free(allocpath);</div><div class='add'>+        else if (allocpath)</div><div class='add'>+            GLFS_FREE(allocpath);</div><div class='add'>+        retpath = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return retpath;</div><div class='add'>+    return retpath;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-pub_glfs_realpath34 (struct glfs *fs, const char *path, char *resolved_path)</div><div class='add'>+pub_glfs_realpath34(struct glfs *fs, const char *path, char *resolved_path)</div><div class='ctx'> {</div><div class='del'>-        return glfs_realpath_common (fs, path, resolved_path, _gf_true);</div><div class='add'>+    return glfs_realpath_common(fs, path, resolved_path, _gf_true);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_realpath34, glfs_realpath, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-pub_glfs_realpath (struct glfs *fs, const char *path, char *resolved_path)</div><div class='add'>+pub_glfs_realpath(struct glfs *fs, const char *path, char *resolved_path)</div><div class='ctx'> {</div><div class='del'>-        return glfs_realpath_common (fs, path, resolved_path, _gf_false);</div><div class='add'>+    return glfs_realpath_common(fs, path, resolved_path, _gf_false);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_realpath, 3.7.17);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-pub_glfs_getcwd (struct glfs *fs, char *buf, size_t n)</div><div class='del'>-{</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	inode_t         *inode = NULL;</div><div class='del'>-	char            *path = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-	if (!buf || n &lt; 2) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	inode = glfs_cwd_get (fs);</div><div class='del'>-</div><div class='del'>-	if (!inode) {</div><div class='del'>-		strncpy (buf, "/", n);</div><div class='del'>-		ret = 0;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = inode_path (inode, 0, &amp;path);</div><div class='del'>-	if (n &lt;= ret) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = ERANGE;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	strncpy (buf, path, n);</div><div class='del'>-	ret = 0;</div><div class='add'>+pub_glfs_getcwd(struct glfs *fs, char *buf, size_t n)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    if (!buf || n &lt; 2) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode = glfs_cwd_get(fs);</div><div class='add'>+</div><div class='add'>+    if (!inode) {</div><div class='add'>+        strncpy(buf, "/", n);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = inode_path(inode, 0, &amp;path);</div><div class='add'>+    if (n &lt;= ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strncpy(buf, path, n);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	GF_FREE (path);</div><div class='add'>+    GF_FREE(path);</div><div class='ctx'> </div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		return NULL;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	return buf;</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_getcwd, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_flock_to_flock (struct gf_flock *gf_flock, struct flock *flock)</div><div class='add'>+gf_flock_to_flock(struct gf_flock *gf_flock, struct flock *flock)</div><div class='ctx'> {</div><div class='del'>-	flock-&gt;l_type   = gf_flock-&gt;l_type;</div><div class='del'>-	flock-&gt;l_whence = gf_flock-&gt;l_whence;</div><div class='del'>-	flock-&gt;l_start  = gf_flock-&gt;l_start;</div><div class='del'>-	flock-&gt;l_len    = gf_flock-&gt;l_len;</div><div class='del'>-	flock-&gt;l_pid    = gf_flock-&gt;l_pid;</div><div class='add'>+    flock-&gt;l_type = gf_flock-&gt;l_type;</div><div class='add'>+    flock-&gt;l_whence = gf_flock-&gt;l_whence;</div><div class='add'>+    flock-&gt;l_start = gf_flock-&gt;l_start;</div><div class='add'>+    flock-&gt;l_len = gf_flock-&gt;l_len;</div><div class='add'>+    flock-&gt;l_pid = gf_flock-&gt;l_pid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_flock_from_flock (struct gf_flock *gf_flock, struct flock *flock)</div><div class='add'>+gf_flock_from_flock(struct gf_flock *gf_flock, struct flock *flock)</div><div class='ctx'> {</div><div class='del'>-	gf_flock-&gt;l_type   = flock-&gt;l_type;</div><div class='del'>-	gf_flock-&gt;l_whence = flock-&gt;l_whence;</div><div class='del'>-	gf_flock-&gt;l_start  = flock-&gt;l_start;</div><div class='del'>-	gf_flock-&gt;l_len    = flock-&gt;l_len;</div><div class='del'>-	gf_flock-&gt;l_pid    = flock-&gt;l_pid;</div><div class='add'>+    gf_flock-&gt;l_type = flock-&gt;l_type;</div><div class='add'>+    gf_flock-&gt;l_whence = flock-&gt;l_whence;</div><div class='add'>+    gf_flock-&gt;l_start = flock-&gt;l_start;</div><div class='add'>+    gf_flock-&gt;l_len = flock-&gt;l_len;</div><div class='add'>+    gf_flock-&gt;l_pid = flock-&gt;l_pid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_lock_common (struct glfs_fd *glfd, int cmd, struct flock *flock,</div><div class='del'>-                  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        struct gf_flock  gf_flock = {0, };</div><div class='del'>-        struct gf_flock  saved_flock = {0, };</div><div class='del'>-        fd_t            *fd = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        if (!flock) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+glfs_lock_common(struct glfs_fd *glfd, int cmd, struct flock *flock,</div><div class='add'>+                 dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct gf_flock gf_flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock saved_flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    if (!flock) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Generate glusterfs flock structure from client flock</div><div class='add'>+     * structure to be processed by server */</div><div class='add'>+    gf_flock_from_flock(&amp;gf_flock, flock);</div><div class='add'>+</div><div class='add'>+    /* Keep another copy of flock for split/merge of locks</div><div class='add'>+     * at client side */</div><div class='add'>+    gf_flock_from_flock(&amp;saved_flock, flock);</div><div class='add'>+</div><div class='add'>+    if (glfd-&gt;lk_owner.len != 0) {</div><div class='add'>+        ret = syncopctx_setfslkowner(&amp;glfd-&gt;lk_owner);</div><div class='ctx'> </div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Generate glusterfs flock structure from client flock</div><div class='del'>-         * structure to be processed by server */</div><div class='del'>-        gf_flock_from_flock (&amp;gf_flock, flock);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Keep another copy of flock for split/merge of locks</div><div class='del'>-         * at client side */</div><div class='del'>-        gf_flock_from_flock (&amp;saved_flock, flock);</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;xdata);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='ctx'> </div><div class='del'>-        if (glfd-&gt;lk_owner.len != 0) {</div><div class='del'>-                ret = syncopctx_setfslkowner (&amp;glfd-&gt;lk_owner);</div><div class='add'>+    ret = syncop_lk(subvol, fd, cmd, &amp;gf_flock, xdata, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Convert back from gf_flock to flock as expected by application */</div><div class='add'>+    gf_flock_to_flock(&amp;gf_flock, flock);</div><div class='ctx'> </div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;xdata);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='del'>-</div><div class='del'>-        ret = syncop_lk (subvol, fd, cmd, &amp;gf_flock, xdata, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        /* Convert back from gf_flock to flock as expected by application */</div><div class='del'>-        gf_flock_to_flock (&amp;gf_flock, flock);</div><div class='del'>-</div><div class='del'>-        if (ret == 0 &amp;&amp; (cmd == F_SETLK || cmd == F_SETLKW)) {</div><div class='del'>-                ret = fd_lk_insert_and_merge (fd, cmd, &amp;saved_flock);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                API_MSG_LOCK_INSERT_MERGE_FAILED,</div><div class='del'>-                                "Lock insertion and splitting/merging failed "</div><div class='del'>-                                "on gfid %s", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+    if (ret == 0 &amp;&amp; (cmd == F_SETLK || cmd == F_SETLKW)) {</div><div class='add'>+        ret = fd_lk_insert_and_merge(fd, cmd, &amp;saved_flock);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   API_MSG_LOCK_INSERT_MERGE_FAILED,</div><div class='add'>+                   "Lock insertion and splitting/merging failed "</div><div class='add'>+                   "on gfid %s",</div><div class='add'>+                   uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_file_lock (struct glfs_fd *glfd, int cmd, struct flock *flock,</div><div class='del'>-                    glfs_lock_mode_t lk_mode)</div><div class='del'>-{</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        dict_t          *xdata_in       = NULL;</div><div class='del'>-</div><div class='del'>-        if (lk_mode == GLFS_LK_MANDATORY) {</div><div class='del'>-                /* Create a new dictionary */</div><div class='del'>-                xdata_in = dict_new ();</div><div class='del'>-                if (xdata_in == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+pub_glfs_file_lock(struct glfs_fd *glfd, int cmd, struct flock *flock,</div><div class='add'>+                   glfs_lock_mode_t lk_mode)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *xdata_in = NULL;</div><div class='add'>+</div><div class='add'>+    if (lk_mode == GLFS_LK_MANDATORY) {</div><div class='add'>+        /* Create a new dictionary */</div><div class='add'>+        xdata_in = dict_new();</div><div class='add'>+        if (xdata_in == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* Set GF_LK_MANDATORY internally within dictionary to map</div><div class='del'>-                 * GLFS_LK_MANDATORY */</div><div class='del'>-                ret = dict_set_uint32 (xdata_in, GF_LOCK_MODE, GF_LK_MANDATORY);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                API_MSG_SETTING_LOCK_TYPE_FAILED,</div><div class='del'>-                                "Setting lock type failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        /* Set GF_LK_MANDATORY internally within dictionary to map</div><div class='add'>+         * GLFS_LK_MANDATORY */</div><div class='add'>+        ret = dict_set_uint32(xdata_in, GF_LOCK_MODE, GF_LK_MANDATORY);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   API_MSG_SETTING_LOCK_TYPE_FAILED,</div><div class='add'>+                   "Setting lock type failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_lock_common (glfd, cmd, flock, xdata_in);</div><div class='add'>+    ret = glfs_lock_common(glfd, cmd, flock, xdata_in);</div><div class='ctx'> out:</div><div class='del'>-        if (xdata_in)</div><div class='del'>-                dict_unref (xdata_in);</div><div class='add'>+    if (xdata_in)</div><div class='add'>+        dict_unref(xdata_in);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_file_lock, 4.0.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_posix_lock (struct glfs_fd *glfd, int cmd, struct flock *flock)</div><div class='add'>+pub_glfs_posix_lock(struct glfs_fd *glfd, int cmd, struct flock *flock)</div><div class='ctx'> {</div><div class='del'>-        return glfs_lock_common (glfd, cmd, flock, NULL);</div><div class='add'>+    return glfs_lock_common(glfd, cmd, flock, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_posix_lock, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_fd_set_lkowner (struct glfs_fd *glfd, void *data, int len)</div><div class='add'>+pub_glfs_fd_set_lkowner(struct glfs_fd *glfd, void *data, int len)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        if (!GF_REF_GET (glfd)) {</div><div class='del'>-                goto invalid_fs;</div><div class='del'>-        }</div><div class='add'>+    if (!GF_REF_GET(glfd)) {</div><div class='add'>+        goto invalid_fs;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, data, out);</div><div class='ctx'> </div><div class='del'>-        if ((len &lt;= 0) || (len &gt; GFAPI_MAX_LOCK_OWNER_LEN)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_INVALID_ARG,</div><div class='del'>-                        "Invalid lk_owner len (%d)", len);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((len &lt;= 0) || (len &gt; GFAPI_MAX_LOCK_OWNER_LEN)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='add'>+               "Invalid lk_owner len (%d)", len);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfd-&gt;lk_owner.len = len;</div><div class='add'>+    glfd-&gt;lk_owner.len = len;</div><div class='ctx'> </div><div class='del'>-        memcpy (glfd-&gt;lk_owner.data, data, len);</div><div class='add'>+    memcpy(glfd-&gt;lk_owner.data, data, len);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fd_set_lkowner, 3.10.7);</div><div class='ctx'> </div><div class='ctx'> struct glfs_fd *</div><div class='del'>-pub_glfs_dup (struct glfs_fd *glfd)</div><div class='del'>-{</div><div class='del'>-	xlator_t  *subvol = NULL;</div><div class='del'>-	fd_t      *fd = NULL;</div><div class='del'>-	struct glfs_fd *dupfd = NULL;</div><div class='del'>-	struct glfs *fs = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-	fs = glfd-&gt;fs;</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_resolve_fd (fs, subvol, glfd);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		errno = EBADFD;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	dupfd = glfs_fd_new (fs);</div><div class='del'>-	if (!dupfd) {</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	dupfd-&gt;fd = fd_ref (fd);</div><div class='del'>-        dupfd-&gt;state = glfd-&gt;state;</div><div class='add'>+pub_glfs_dup(struct glfs_fd *glfd)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct glfs_fd *dupfd = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    fs = glfd-&gt;fs;</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dupfd = glfs_fd_new(fs);</div><div class='add'>+    if (!dupfd) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dupfd-&gt;fd = fd_ref(fd);</div><div class='add'>+    dupfd-&gt;state = glfd-&gt;state;</div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-	if (dupfd)</div><div class='del'>-		glfs_fd_bind (dupfd);</div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (dupfd)</div><div class='add'>+        glfs_fd_bind(dupfd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return dupfd;</div><div class='add'>+    return dupfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_dup, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_enqueue_upcall_data (struct glfs *fs, struct gf_upcall *upcall_data)</div><div class='add'>+glfs_enqueue_upcall_data(struct glfs *fs, struct gf_upcall *upcall_data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        upcall_entry *u_list = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    upcall_entry *u_list = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!fs || !upcall_data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!fs || !upcall_data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        u_list = GF_CALLOC (1, sizeof(*u_list),</div><div class='del'>-                            glfs_mt_upcall_entry_t);</div><div class='add'>+    u_list = GF_CALLOC(1, sizeof(*u_list), glfs_mt_upcall_entry_t);</div><div class='ctx'> </div><div class='del'>-        if (!u_list) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_ALLOC_FAILED,</div><div class='del'>-                        "Upcall entry allocation failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!u_list) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_ALLOC_FAILED,</div><div class='add'>+               "Upcall entry allocation failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;u_list-&gt;upcall_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;u_list-&gt;upcall_list);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (u_list-&gt;upcall_data.gfid, upcall_data-&gt;gfid);</div><div class='del'>-        u_list-&gt;upcall_data.event_type = upcall_data-&gt;event_type;</div><div class='add'>+    gf_uuid_copy(u_list-&gt;upcall_data.gfid, upcall_data-&gt;gfid);</div><div class='add'>+    u_list-&gt;upcall_data.event_type = upcall_data-&gt;event_type;</div><div class='ctx'> </div><div class='del'>-        switch (upcall_data-&gt;event_type) {</div><div class='add'>+    switch (upcall_data-&gt;event_type) {</div><div class='ctx'>         case GF_UPCALL_CACHE_INVALIDATION:</div><div class='del'>-                ret = glfs_get_upcall_cache_invalidation (&amp;u_list-&gt;upcall_data,</div><div class='del'>-                                                          upcall_data);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfs_get_upcall_cache_invalidation(&amp;u_list-&gt;upcall_data,</div><div class='add'>+                                                     upcall_data);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_UPCALL_RECALL_LEASE:</div><div class='del'>-                ret = glfs_get_upcall_lease (&amp;u_list-&gt;upcall_data,</div><div class='del'>-                                                   upcall_data);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfs_get_upcall_lease(&amp;u_list-&gt;upcall_data, upcall_data);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Upcall entry validation failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "Upcall entry validation failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;upcall_list_mutex);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;u_list-&gt;upcall_list,</div><div class='del'>-                               &amp;fs-&gt;upcall_list);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;upcall_list_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;upcall_list_mutex);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;u_list-&gt;upcall_list, &amp;fs-&gt;upcall_list);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;upcall_list_mutex);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; u_list) {</div><div class='del'>-                GF_FREE (u_list-&gt;upcall_data.data);</div><div class='del'>-                GF_FREE(u_list);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; u_list) {</div><div class='add'>+        GF_FREE(u_list-&gt;upcall_data.data);</div><div class='add'>+        GF_FREE(u_list);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_free_upcall_lease (void *to_free)</div><div class='add'>+glfs_free_upcall_lease(void *to_free)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_upcall_lease *arg = to_free;</div><div class='add'>+    struct glfs_upcall_lease *arg = to_free;</div><div class='ctx'> </div><div class='del'>-        if (!arg)</div><div class='del'>-                return;</div><div class='add'>+    if (!arg)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (arg-&gt;object)</div><div class='del'>-                glfs_h_close (arg-&gt;object);</div><div class='add'>+    if (arg-&gt;object)</div><div class='add'>+        glfs_h_close(arg-&gt;object);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (arg);</div><div class='add'>+    GF_FREE(arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_recall_lease_fd (struct glfs *fs,</div><div class='del'>-                      struct gf_upcall *up_data)</div><div class='del'>-{</div><div class='del'>-        struct gf_upcall_recall_lease *recall_lease = NULL;</div><div class='del'>-        xlator_t                      *subvol       = NULL;</div><div class='del'>-        int                            ret          = 0;</div><div class='del'>-        inode_t                       *inode        = NULL;</div><div class='del'>-        struct glfs_fd                *glfd         = NULL;</div><div class='del'>-        struct glfs_fd                *tmp          = NULL;</div><div class='del'>-        struct list_head               glfd_list    = { 0, };</div><div class='del'>-        fd_t                          *fd           = NULL;</div><div class='del'>-        uint64_t                       value        = 0;</div><div class='del'>-        struct glfs_lease              lease        = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", up_data, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", fs, out);</div><div class='del'>-</div><div class='del'>-        recall_lease = up_data-&gt;data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", recall_lease, out);</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD(&amp;glfd_list);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0,</div><div class='del'>-                      "Recall lease received for gfid:%s",</div><div class='del'>-                      uuid_utoa(up_data-&gt;gfid));</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        inode = inode_find (subvol-&gt;itable, up_data-&gt;gfid);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_INODE_FIND_FAILED,</div><div class='del'>-                        "Unable to find inode entry for gfid:%s graph id:%d",</div><div class='del'>-                        uuid_utoa(up_data-&gt;gfid), subvol-&gt;graph-&gt;id);</div><div class='del'>-                goto out;</div><div class='add'>+glfs_recall_lease_fd(struct glfs *fs, struct gf_upcall *up_data)</div><div class='add'>+{</div><div class='add'>+    struct gf_upcall_recall_lease *recall_lease = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    struct glfs_fd *tmp = NULL;</div><div class='add'>+    struct list_head glfd_list = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", up_data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", fs, out);</div><div class='add'>+</div><div class='add'>+    recall_lease = up_data-&gt;data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", recall_lease, out);</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;glfd_list);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0, "Recall lease received for gfid:%s",</div><div class='add'>+                 uuid_utoa(up_data-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    inode = inode_find(subvol-&gt;itable, up_data-&gt;gfid);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, API_MSG_INODE_FIND_FAILED,</div><div class='add'>+               "Unable to find inode entry for gfid:%s graph id:%d",</div><div class='add'>+               uuid_utoa(up_data-&gt;gfid), subvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(fd, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+        {</div><div class='add'>+            ret = fd_ctx_get(fd, subvol, &amp;value);</div><div class='add'>+            glfd = (struct glfs_fd *)value;</div><div class='add'>+            if (glfd) {</div><div class='add'>+                gf_msg_trace(THIS-&gt;name, 0, "glfd (%p) has held lease", glfd);</div><div class='add'>+                GF_REF_GET(glfd);</div><div class='add'>+                list_add_tail(&amp;glfd-&gt;list, &amp;glfd_list);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='add'>+    list_for_each_entry_safe(glfd, tmp, &amp;glfd_list, list)</div><div class='add'>+    {</div><div class='add'>+        LOCK(&amp;glfd-&gt;lock);</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (fd, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-                        ret = fd_ctx_get (fd, subvol, &amp;value);</div><div class='del'>-                        glfd = (struct glfs_fd *) value;</div><div class='del'>-                        if (glfd) {</div><div class='del'>-                                gf_msg_trace (THIS-&gt;name, 0,</div><div class='del'>-                                              "glfd (%p) has held lease", glfd);</div><div class='del'>-                                GF_REF_GET (glfd);</div><div class='del'>-                                list_add_tail (&amp;glfd-&gt;list, &amp;glfd_list);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (glfd-&gt;state != GLFD_CLOSE) {</div><div class='add'>+                gf_msg_trace(THIS-&gt;name, 0,</div><div class='add'>+                             "glfd (%p) has held lease, "</div><div class='add'>+                             "calling recall cbk",</div><div class='add'>+                             glfd);</div><div class='add'>+                glfd-&gt;cbk(lease, glfd-&gt;cookie);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (glfd, tmp, &amp;glfd_list, list) {</div><div class='del'>-                LOCK (&amp;glfd-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (glfd-&gt;state != GLFD_CLOSE) {</div><div class='del'>-                                gf_msg_trace (THIS-&gt;name, 0,</div><div class='del'>-                                              "glfd (%p) has held lease, "</div><div class='del'>-                                              "calling recall cbk", glfd);</div><div class='del'>-                                glfd-&gt;cbk (lease, glfd-&gt;cookie);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;glfd-&gt;lock);</div><div class='add'>+        UNLOCK(&amp;glfd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;glfd-&gt;list);</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-        }</div><div class='add'>+        list_del_init(&amp;glfd-&gt;list);</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_recall_lease_upcall (struct glfs *fs,</div><div class='del'>-                          struct glfs_upcall *up_arg,</div><div class='del'>-                          struct gf_upcall *up_data)</div><div class='del'>-{</div><div class='del'>-        struct gf_upcall_recall_lease *recall_lease = NULL;</div><div class='del'>-        struct glfs_object                  *object       = NULL;</div><div class='del'>-        xlator_t                      *subvol       = NULL;</div><div class='del'>-        int                            ret          = -1;</div><div class='del'>-        struct glfs_upcall_lease      *up_lease_arg = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", up_data, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", fs, out);</div><div class='del'>-</div><div class='del'>-        recall_lease = up_data-&gt;data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("gfapi", recall_lease, out);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0,</div><div class='del'>-                      "Recall lease received for gfid:%s",</div><div class='del'>-                      uuid_utoa(up_data-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        object = glfs_h_find_handle (fs, up_data-&gt;gfid,</div><div class='del'>-                                     GFAPI_HANDLE_LENGTH);</div><div class='del'>-        if (!object) {</div><div class='del'>-                /* The reason handle creation will fail is because we</div><div class='del'>-                 * couldn't find the inode in the gfapi inode table.</div><div class='del'>-                 *</div><div class='del'>-                 * But since application would have taken inode_ref, the</div><div class='del'>-                 * only case when this can happen is when it has closed</div><div class='del'>-                 * the handle and hence will no more be interested in</div><div class='del'>-                 * the upcall for this particular gfid.</div><div class='del'>-                 */</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='del'>-                        API_MSG_CREATE_HANDLE_FAILED,</div><div class='del'>-                        "handle creation of %s failed",</div><div class='del'>-                         uuid_utoa (up_data-&gt;gfid));</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        up_lease_arg = GF_CALLOC (1, sizeof (struct glfs_upcall_lease),</div><div class='del'>-                                  glfs_mt_upcall_inode_t);</div><div class='del'>-        up_lease_arg-&gt;object = object;</div><div class='add'>+glfs_recall_lease_upcall(struct glfs *fs, struct glfs_upcall *up_arg,</div><div class='add'>+                         struct gf_upcall *up_data)</div><div class='add'>+{</div><div class='add'>+    struct gf_upcall_recall_lease *recall_lease = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_upcall_lease *up_lease_arg = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", up_data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", fs, out);</div><div class='add'>+</div><div class='add'>+    recall_lease = up_data-&gt;data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("gfapi", recall_lease, out);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0, "Recall lease received for gfid:%s",</div><div class='add'>+                 uuid_utoa(up_data-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    object = glfs_h_find_handle(fs, up_data-&gt;gfid, GFAPI_HANDLE_LENGTH);</div><div class='add'>+    if (!object) {</div><div class='add'>+        /* The reason handle creation will fail is because we</div><div class='add'>+         * couldn't find the inode in the gfapi inode table.</div><div class='add'>+         *</div><div class='add'>+         * But since application would have taken inode_ref, the</div><div class='add'>+         * only case when this can happen is when it has closed</div><div class='add'>+         * the handle and hence will no more be interested in</div><div class='add'>+         * the upcall for this particular gfid.</div><div class='add'>+         */</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_DEBUG, errno, API_MSG_CREATE_HANDLE_FAILED,</div><div class='add'>+               "handle creation of %s failed", uuid_utoa(up_data-&gt;gfid));</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_recall_lease",</div><div class='del'>-                             up_lease_arg, out);</div><div class='add'>+    up_lease_arg = GF_CALLOC(1, sizeof(struct glfs_upcall_lease),</div><div class='add'>+                             glfs_mt_upcall_inode_t);</div><div class='add'>+    up_lease_arg-&gt;object = object;</div><div class='ctx'> </div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_recall_lease", up_lease_arg, out);</div><div class='ctx'> </div><div class='del'>-        up_lease_arg-&gt;lease_type = recall_lease-&gt;lease_type;</div><div class='add'>+    up_lease_arg-&gt;lease_type = recall_lease-&gt;lease_type;</div><div class='ctx'> </div><div class='del'>-        up_arg-&gt;reason = GF_UPCALL_RECALL_LEASE;</div><div class='del'>-        up_arg-&gt;event = up_lease_arg;</div><div class='del'>-        up_arg-&gt;free_event = glfs_free_upcall_lease;</div><div class='add'>+    up_arg-&gt;reason = GF_UPCALL_RECALL_LEASE;</div><div class='add'>+    up_arg-&gt;event = up_lease_arg;</div><div class='add'>+    up_arg-&gt;free_event = glfs_free_upcall_lease;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* Close p_object and oldp_object as well if being referenced.*/</div><div class='del'>-                if (object)</div><div class='del'>-                        glfs_h_close (object);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* Close p_object and oldp_object as well if being referenced.*/</div><div class='add'>+        if (object)</div><div class='add'>+            glfs_h_close(object);</div><div class='ctx'> </div><div class='del'>-                /* Set reason to prevent applications from using -&gt;event */</div><div class='del'>-                up_arg-&gt;reason = GF_UPCALL_EVENT_NULL;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+        /* Set reason to prevent applications from using -&gt;event */</div><div class='add'>+        up_arg-&gt;reason = GF_UPCALL_EVENT_NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_cbk_upcall_data (struct glfs *fs, struct gf_upcall *upcall_data)</div><div class='add'>+glfs_cbk_upcall_data(struct glfs *fs, struct gf_upcall *upcall_data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        struct glfs_upcall *up_arg = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_upcall *up_arg = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!fs || !upcall_data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!fs || !upcall_data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!(fs-&gt;upcall_events &amp; upcall_data-&gt;event_type)) {</div><div class='del'>-                /* ignore events which application hasn't registered*/</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!(fs-&gt;upcall_events &amp; upcall_data-&gt;event_type)) {</div><div class='add'>+        /* ignore events which application hasn't registered*/</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        up_arg = GLFS_CALLOC (1, sizeof (struct gf_upcall),</div><div class='del'>-                              glfs_release_upcall,</div><div class='del'>-                              glfs_mt_upcall_entry_t);</div><div class='del'>-        if (!up_arg) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_ALLOC_FAILED,</div><div class='del'>-                        "Upcall entry allocation failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    up_arg = GLFS_CALLOC(1, sizeof(struct gf_upcall), glfs_release_upcall,</div><div class='add'>+                         glfs_mt_upcall_entry_t);</div><div class='add'>+    if (!up_arg) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_ALLOC_FAILED,</div><div class='add'>+               "Upcall entry allocation failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (upcall_data-&gt;event_type) {</div><div class='add'>+    switch (upcall_data-&gt;event_type) {</div><div class='ctx'>         case GF_UPCALL_CACHE_INVALIDATION:</div><div class='del'>-                ret = glfs_h_poll_cache_invalidation (fs, up_arg, upcall_data);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfs_h_poll_cache_invalidation(fs, up_arg, upcall_data);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_UPCALL_RECALL_LEASE:</div><div class='del'>-                ret = glfs_recall_lease_upcall (fs, up_arg, upcall_data);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfs_recall_lease_upcall(fs, up_arg, upcall_data);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!ret &amp;&amp; (up_arg-&gt;reason != GLFS_UPCALL_EVENT_NULL)) {</div><div class='del'>-                /* It could so happen that the file which got</div><div class='del'>-                 * upcall notification may have got deleted by</div><div class='del'>-                 * the same client. In such cases up_arg-&gt;reason</div><div class='del'>-                 * is set to GLFS_UPCALL_EVENT_NULL. No need to</div><div class='del'>-                 * send upcall then */</div><div class='del'>-                (fs-&gt;up_cbk) (up_arg, fs-&gt;up_data);</div><div class='del'>-        } else if (up_arg-&gt;reason == GLFS_UPCALL_EVENT_NULL) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='del'>-                        API_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Upcall_EVENT_NULL received. Skipping it.");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Upcall entry validation failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* application takes care of calling glfs_free on up_arg post</div><div class='del'>-         * their processing */</div><div class='del'>-        ret = 0;</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!ret &amp;&amp; (up_arg-&gt;reason != GLFS_UPCALL_EVENT_NULL)) {</div><div class='add'>+        /* It could so happen that the file which got</div><div class='add'>+         * upcall notification may have got deleted by</div><div class='add'>+         * the same client. In such cases up_arg-&gt;reason</div><div class='add'>+         * is set to GLFS_UPCALL_EVENT_NULL. No need to</div><div class='add'>+         * send upcall then */</div><div class='add'>+        (fs-&gt;up_cbk)(up_arg, fs-&gt;up_data);</div><div class='add'>+    } else if (up_arg-&gt;reason == GLFS_UPCALL_EVENT_NULL) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_DEBUG, errno, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "Upcall_EVENT_NULL received. Skipping it.");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "Upcall entry validation failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* application takes care of calling glfs_free on up_arg post</div><div class='add'>+     * their processing */</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; up_arg) {</div><div class='del'>-                GLFS_FREE (up_arg);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; up_arg) {</div><div class='add'>+        GLFS_FREE(up_arg);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -5317,251 +5363,254 @@ out:</div><div class='ctx'>  * to be read/polled by the applications.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-priv_glfs_process_upcall_event (struct glfs *fs, void *data)</div><div class='add'>+priv_glfs_process_upcall_event(struct glfs *fs, void *data)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t    *ctx            = NULL;</div><div class='del'>-        struct gf_upcall   *upcall_data    = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0,</div><div class='del'>-                      "Upcall gfapi callback is called");</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    struct gf_upcall *upcall_data = NULL;</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, err);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='ctx'> </div><div class='del'>-        if (!data)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Unlike in I/O path, "glfs_fini" would not have freed</div><div class='del'>-         * 'fs' by the time we take lock as it waits for all epoll</div><div class='del'>-         * threads to exit including this</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                ctx = fs-&gt;ctx;</div><div class='del'>-</div><div class='del'>-                /* if we're not interested in upcalls (anymore), skip them */</div><div class='del'>-                if (ctx-&gt;cleanup_started || !fs-&gt;cache_upcalls) {</div><div class='del'>-                        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0, "Upcall gfapi callback is called");</div><div class='ctx'> </div><div class='del'>-                fs-&gt;pin_refcnt++;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, err);</div><div class='ctx'> </div><div class='del'>-        upcall_data = (struct gf_upcall *)data;</div><div class='add'>+    if (!data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (THIS-&gt;name, 0, "Upcall gfapi gfid = %s" ,</div><div class='del'>-                      (char *)(upcall_data-&gt;gfid));</div><div class='add'>+    /* Unlike in I/O path, "glfs_fini" would not have freed</div><div class='add'>+     * 'fs' by the time we take lock as it waits for all epoll</div><div class='add'>+     * threads to exit including this</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        ctx = fs-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        /* *</div><div class='del'>-         * TODO: RECALL LEASE for each glfd</div><div class='del'>-         *</div><div class='del'>-         * In case of RECALL_LEASE, we could associate separate</div><div class='del'>-         * cbk function for each glfd either by</div><div class='del'>-         * - extending pub_glfs_lease to accept new args (recall_cbk_fn, cookie)</div><div class='del'>-         * - or by defining new API "glfs_register_recall_cbk_fn (glfd, recall_cbk_fn, cookie)</div><div class='del'>-         * . In such cases, flag it and instead of calling below upcall functions, define</div><div class='del'>-         * a new one to go through the glfd list and invoke each of theirs recall_cbk_fn.</div><div class='del'>-         * */</div><div class='del'>-</div><div class='del'>-        if (fs-&gt;up_cbk) { /* upcall cbk registered */</div><div class='del'>-                (void) glfs_cbk_upcall_data (fs, upcall_data);</div><div class='del'>-        } else {</div><div class='del'>-                (void) glfs_enqueue_upcall_data (fs, upcall_data);</div><div class='add'>+        /* if we're not interested in upcalls (anymore), skip them */</div><div class='add'>+        if (ctx-&gt;cleanup_started || !fs-&gt;cache_upcalls) {</div><div class='add'>+            pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                fs-&gt;pin_refcnt--;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+        fs-&gt;pin_refcnt++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    upcall_data = (struct gf_upcall *)data;</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(THIS-&gt;name, 0, "Upcall gfapi gfid = %s",</div><div class='add'>+                 (char *)(upcall_data-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    /* *</div><div class='add'>+     * TODO: RECALL LEASE for each glfd</div><div class='add'>+     *</div><div class='add'>+     * In case of RECALL_LEASE, we could associate separate</div><div class='add'>+     * cbk function for each glfd either by</div><div class='add'>+     * - extending pub_glfs_lease to accept new args (recall_cbk_fn, cookie)</div><div class='add'>+     * - or by defining new API "glfs_register_recall_cbk_fn (glfd,</div><div class='add'>+     * recall_cbk_fn, cookie) . In such cases, flag it and instead of calling</div><div class='add'>+     * below upcall functions, define a new one to go through the glfd list and</div><div class='add'>+     * invoke each of theirs recall_cbk_fn.</div><div class='add'>+     * */</div><div class='add'>+</div><div class='add'>+    if (fs-&gt;up_cbk) { /* upcall cbk registered */</div><div class='add'>+        (void)glfs_cbk_upcall_data(fs, upcall_data);</div><div class='add'>+    } else {</div><div class='add'>+        (void)glfs_enqueue_upcall_data(fs, upcall_data);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        fs-&gt;pin_refcnt--;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> err:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_process_upcall_event, 3.7.0);</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-glfs_anonymous_pwritev (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                        const struct iovec *iovec, int iovcnt,</div><div class='del'>-                        off_t offset, int flags)</div><div class='del'>-{</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        struct iobref   *iobref = NULL;</div><div class='del'>-        struct iobuf    *iobuf  = NULL;</div><div class='del'>-        struct iovec    iov     = {0, };</div><div class='del'>-        inode_t         *inode  = NULL;</div><div class='del'>-        fd_t            *fd     = NULL;</div><div class='del'>-        int             ret     = -1;</div><div class='del'>-        size_t          size    = -1;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = fd_anonymous (inode);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg ("gfapi", GF_LOG_ERROR, ENOMEM, API_MSG_FDCREATE_FAILED,</div><div class='del'>-                        "Allocating anonymous fd failed");</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        size = iov_length (iovec, iovcnt);</div><div class='del'>-</div><div class='del'>-        iobuf = iobuf_get2 (subvol-&gt;ctx-&gt;iobuf_pool, size);</div><div class='del'>-        if (!iobuf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iobref = iobref_new ();</div><div class='del'>-        if (!iobref) {</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = iobref_add (iobref, iobuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iov_unload (iobuf_ptr (iobuf), iovec, iovcnt);</div><div class='del'>-</div><div class='del'>-        iov.iov_base = iobuf_ptr (iobuf);</div><div class='del'>-        iov.iov_len = size;</div><div class='del'>-</div><div class='del'>-        /* TODO : set leaseid */</div><div class='del'>-        ret = syncop_writev (subvol, fd, &amp;iov, 1, offset, iobref, flags,</div><div class='del'>-                             NULL, NULL, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        iobuf_unref (iobuf);</div><div class='del'>-        iobref_unref (iobref);</div><div class='del'>-</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto out;</div><div class='add'>+glfs_anonymous_pwritev(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                       const struct iovec *iovec, int iovcnt, off_t offset,</div><div class='add'>+                       int flags)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t size = -1;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = fd_anonymous(inode);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg("gfapi", GF_LOG_ERROR, ENOMEM, API_MSG_FDCREATE_FAILED,</div><div class='add'>+               "Allocating anonymous fd failed");</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    size = iov_length(iovec, iovcnt);</div><div class='add'>+</div><div class='add'>+    iobuf = iobuf_get2(subvol-&gt;ctx-&gt;iobuf_pool, size);</div><div class='add'>+    if (!iobuf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iobref = iobref_new();</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = iobref_add(iobref, iobuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iov_unload(iobuf_ptr(iobuf), iovec, iovcnt);</div><div class='add'>+</div><div class='add'>+    iov.iov_base = iobuf_ptr(iobuf);</div><div class='add'>+    iov.iov_len = size;</div><div class='add'>+</div><div class='add'>+    /* TODO : set leaseid */</div><div class='add'>+    ret = syncop_writev(subvol, fd, &amp;iov, 1, offset, iobref, flags, NULL, NULL,</div><div class='add'>+                        NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    iobuf_unref(iobuf);</div><div class='add'>+    iobref_unref(iobref);</div><div class='add'>+</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref(fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-glfs_anonymous_preadv (struct glfs *fs,  struct glfs_object *object,</div><div class='del'>-                       const struct iovec *iovec, int iovcnt,</div><div class='del'>-                       off_t offset, int flags)</div><div class='del'>-{</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        struct iovec    *iov    = NULL;</div><div class='del'>-        struct iobref   *iobref = NULL;</div><div class='del'>-        inode_t         *inode  = NULL;</div><div class='del'>-        fd_t            *fd     = NULL;</div><div class='del'>-        int             cnt     = 0;</div><div class='del'>-        ssize_t         ret     = -1;</div><div class='del'>-        ssize_t         size    = -1;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = fd_anonymous (inode);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg ("gfapi", GF_LOG_ERROR, ENOMEM, API_MSG_FDCREATE_FAILED,</div><div class='del'>-                        "Allocating anonymous fd failed");</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        size = iov_length (iovec, iovcnt);</div><div class='del'>-</div><div class='del'>-        /* TODO : set leaseid */</div><div class='del'>-	ret = syncop_readv (subvol, fd, size, offset, flags, &amp;iov, &amp;cnt,</div><div class='del'>-                            &amp;iobref, NULL, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        size = iov_copy (iovec, iovcnt, iov, cnt);</div><div class='del'>-</div><div class='del'>-        ret = size;</div><div class='add'>+glfs_anonymous_preadv(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                      const struct iovec *iovec, int iovcnt, off_t offset,</div><div class='add'>+                      int flags)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct iovec *iov = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    ssize_t size = -1;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = fd_anonymous(inode);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg("gfapi", GF_LOG_ERROR, ENOMEM, API_MSG_FDCREATE_FAILED,</div><div class='add'>+               "Allocating anonymous fd failed");</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    size = iov_length(iovec, iovcnt);</div><div class='add'>+</div><div class='add'>+    /* TODO : set leaseid */</div><div class='add'>+    ret = syncop_readv(subvol, fd, size, offset, flags, &amp;iov, &amp;cnt, &amp;iobref,</div><div class='add'>+                       NULL, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    size = iov_copy(iovec, iovcnt, iov, cnt);</div><div class='add'>+</div><div class='add'>+    ret = size;</div><div class='ctx'> out:</div><div class='del'>-        if (iov)</div><div class='del'>-                GF_FREE (iov);</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref(fd);</div><div class='add'>+    if (iov)</div><div class='add'>+        GF_FREE(iov);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void glfs_release_xreaddirp_stat (void *ptr)</div><div class='add'>+static void</div><div class='add'>+glfs_release_xreaddirp_stat(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_xreaddirp_stat *to_free = ptr;</div><div class='add'>+    struct glfs_xreaddirp_stat *to_free = ptr;</div><div class='ctx'> </div><div class='del'>-        if (to_free-&gt;object)</div><div class='del'>-                glfs_h_close (to_free-&gt;object);</div><div class='add'>+    if (to_free-&gt;object)</div><div class='add'>+        glfs_h_close(to_free-&gt;object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -5569,253 +5618,248 @@ static void glfs_release_xreaddirp_stat (void *ptr)</div><div class='ctx'>  * xstat along with dirents.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-pub_glfs_xreaddirplus_r (struct glfs_fd *glfd, uint32_t flags,</div><div class='del'>-                         struct glfs_xreaddirp_stat **xstat_p,</div><div class='del'>-                         struct dirent *ext,</div><div class='del'>-                         struct dirent **res)</div><div class='add'>+pub_glfs_xreaddirplus_r(struct glfs_fd *glfd, uint32_t flags,</div><div class='add'>+                        struct glfs_xreaddirp_stat **xstat_p,</div><div class='add'>+                        struct dirent *ext, struct dirent **res)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        gf_dirent_t     *entry = NULL;</div><div class='del'>-        struct dirent   *buf = NULL;</div><div class='del'>-        struct glfs_xreaddirp_stat *xstat = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    struct dirent *buf = NULL;</div><div class='add'>+    struct glfs_xreaddirp_stat *xstat = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        GF_REF_GET (glfd);</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, xstat_p, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, res, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, xstat_p, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, res, out);</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='add'>+    errno = 0;</div><div class='ctx'> </div><div class='del'>-        if (ext)</div><div class='del'>-                buf = ext;</div><div class='del'>-        else</div><div class='del'>-                buf = glfs_readdirbuf_get (glfd);</div><div class='add'>+    if (ext)</div><div class='add'>+        buf = ext;</div><div class='add'>+    else</div><div class='add'>+        buf = glfs_readdirbuf_get(glfd);</div><div class='ctx'> </div><div class='del'>-        if (!buf)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!buf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        xstat = GLFS_CALLOC(1, sizeof(struct glfs_xreaddirp_stat),</div><div class='del'>-                            glfs_release_xreaddirp_stat,</div><div class='del'>-                            glfs_mt_xreaddirp_stat_t);</div><div class='add'>+    xstat = GLFS_CALLOC(1, sizeof(struct glfs_xreaddirp_stat),</div><div class='add'>+                        glfs_release_xreaddirp_stat, glfs_mt_xreaddirp_stat_t);</div><div class='ctx'> </div><div class='del'>-        if (!xstat)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!xstat)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* this is readdirplus operation */</div><div class='del'>-        entry = glfd_entry_next (glfd, 1);</div><div class='add'>+    /* this is readdirplus operation */</div><div class='add'>+    entry = glfd_entry_next(glfd, 1);</div><div class='ctx'> </div><div class='del'>-        /* XXX: Ideally when we reach EOD, errno should have been</div><div class='del'>-         * set to ENOENT. But that doesn't seem to be the case.</div><div class='del'>-         *</div><div class='del'>-         * The only way to confirm if its EOD at this point is that</div><div class='del'>-         * errno == 0 and entry == NULL</div><div class='del'>-         */</div><div class='del'>-        if (errno)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!entry) {</div><div class='del'>-                /* reached EOD, ret = 0  */</div><div class='del'>-                ret = 0;</div><div class='del'>-                *res = NULL;</div><div class='del'>-                *xstat_p = NULL;</div><div class='del'>-</div><div class='del'>-                /* free xstat as applications shall not be using it */</div><div class='del'>-                GLFS_FREE (xstat);</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: Ideally when we reach EOD, errno should have been</div><div class='add'>+     * set to ENOENT. But that doesn't seem to be the case.</div><div class='add'>+     *</div><div class='add'>+     * The only way to confirm if its EOD at this point is that</div><div class='add'>+     * errno == 0 and entry == NULL</div><div class='add'>+     */</div><div class='add'>+    if (errno)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *res = buf;</div><div class='del'>-        gf_dirent_to_dirent (entry, buf);</div><div class='del'>-</div><div class='del'>-        if (flags &amp; GFAPI_XREADDIRP_STAT) {</div><div class='del'>-                glfs_iatt_to_stat (glfd-&gt;fs, &amp;entry-&gt;d_stat, &amp;xstat-&gt;st);</div><div class='del'>-                xstat-&gt;flags_handled |= GFAPI_XREADDIRP_STAT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((flags &amp; GFAPI_XREADDIRP_HANDLE) &amp;&amp;</div><div class='del'>-                /* skip . and .. */</div><div class='del'>-                strcmp(buf-&gt;d_name, ".")</div><div class='del'>-                     &amp;&amp; strcmp(buf-&gt;d_name, "..")) {</div><div class='del'>-</div><div class='del'>-                /* Now create object.</div><div class='del'>-                 * We can use "glfs_h_find_handle" as well as inodes would have</div><div class='del'>-                 * already got linked as part of 'gf_link_inodes_from_dirent' */</div><div class='del'>-                xstat-&gt;object = glfs_h_create_from_handle (glfd-&gt;fs,</div><div class='del'>-                                                        entry-&gt;d_stat.ia_gfid,</div><div class='del'>-                                                        GFAPI_HANDLE_LENGTH,</div><div class='del'>-                                                        NULL);</div><div class='del'>-</div><div class='del'>-                if (xstat-&gt;object) { /* success */</div><div class='del'>-                        /* note: xstat-&gt;object-&gt;inode-&gt;ref is taken</div><div class='del'>-                         * This shall be unref'ed when application does</div><div class='del'>-                         * glfs_free(xstat) */</div><div class='del'>-                        xstat-&gt;flags_handled |= GFAPI_XREADDIRP_HANDLE;</div><div class='del'>-                }</div><div class='add'>+    if (!entry) {</div><div class='add'>+        /* reached EOD, ret = 0  */</div><div class='add'>+        ret = 0;</div><div class='add'>+        *res = NULL;</div><div class='add'>+        *xstat_p = NULL;</div><div class='add'>+</div><div class='add'>+        /* free xstat as applications shall not be using it */</div><div class='add'>+        GLFS_FREE(xstat);</div><div class='add'>+</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *res = buf;</div><div class='add'>+    gf_dirent_to_dirent(entry, buf);</div><div class='add'>+</div><div class='add'>+    if (flags &amp; GFAPI_XREADDIRP_STAT) {</div><div class='add'>+        glfs_iatt_to_stat(glfd-&gt;fs, &amp;entry-&gt;d_stat, &amp;xstat-&gt;st);</div><div class='add'>+        xstat-&gt;flags_handled |= GFAPI_XREADDIRP_STAT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((flags &amp; GFAPI_XREADDIRP_HANDLE) &amp;&amp;</div><div class='add'>+        /* skip . and .. */</div><div class='add'>+        strcmp(buf-&gt;d_name, ".") &amp;&amp; strcmp(buf-&gt;d_name, "..")) {</div><div class='add'>+        /* Now create object.</div><div class='add'>+         * We can use "glfs_h_find_handle" as well as inodes would have</div><div class='add'>+         * already got linked as part of 'gf_link_inodes_from_dirent' */</div><div class='add'>+        xstat-&gt;object = glfs_h_create_from_handle(</div><div class='add'>+            glfd-&gt;fs, entry-&gt;d_stat.ia_gfid, GFAPI_HANDLE_LENGTH, NULL);</div><div class='add'>+</div><div class='add'>+        if (xstat-&gt;object) { /* success */</div><div class='add'>+            /* note: xstat-&gt;object-&gt;inode-&gt;ref is taken</div><div class='add'>+             * This shall be unref'ed when application does</div><div class='add'>+             * glfs_free(xstat) */</div><div class='add'>+            xstat-&gt;flags_handled |= GFAPI_XREADDIRP_HANDLE;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xstat-&gt;flags_handled;</div><div class='del'>-        *xstat_p = xstat;</div><div class='add'>+    ret = xstat-&gt;flags_handled;</div><div class='add'>+    *xstat_p = xstat;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0,</div><div class='del'>-                      "xreaddirp- requested_flags (%x) , processed_flags (%x)",</div><div class='del'>-                      flags, xstat-&gt;flags_handled);</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0,</div><div class='add'>+                 "xreaddirp- requested_flags (%x) , processed_flags (%x)",</div><div class='add'>+                 flags, xstat-&gt;flags_handled);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_REF_PUT (glfd);</div><div class='add'>+    GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_XREADDIRP_R_FAILED,</div><div class='del'>-                        "glfs_x_readdirp_r failed - reason (%s)",</div><div class='del'>-                        strerror(errno));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, API_MSG_XREADDIRP_R_FAILED,</div><div class='add'>+               "glfs_x_readdirp_r failed - reason (%s)", strerror(errno));</div><div class='ctx'> </div><div class='del'>-                if (xstat)</div><div class='del'>-                        GLFS_FREE (xstat);</div><div class='del'>-        }</div><div class='add'>+        if (xstat)</div><div class='add'>+            GLFS_FREE(xstat);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_xreaddirplus_r, 3.11.0);</div><div class='ctx'> </div><div class='del'>-struct stat*</div><div class='del'>-pub_glfs_xreaddirplus_get_stat (struct glfs_xreaddirp_stat *xstat)</div><div class='add'>+struct stat *</div><div class='add'>+pub_glfs_xreaddirplus_get_stat(struct glfs_xreaddirp_stat *xstat)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_xreaddirplus_get_stat", xstat, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_xreaddirplus_get_stat", xstat, out);</div><div class='ctx'> </div><div class='del'>-        if (!xstat-&gt;flags_handled &amp; GFAPI_XREADDIRP_STAT)</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_INVALID_ARG,</div><div class='del'>-                        "GFAPI_XREADDIRP_STAT is not set. Flags"</div><div class='del'>-                        "handled for xstat(%p) are (%x)",</div><div class='del'>-                        xstat, xstat-&gt;flags_handled);</div><div class='del'>-        return &amp;xstat-&gt;st;</div><div class='add'>+    if (!xstat-&gt;flags_handled &amp; GFAPI_XREADDIRP_STAT)</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='add'>+               "GFAPI_XREADDIRP_STAT is not set. Flags"</div><div class='add'>+               "handled for xstat(%p) are (%x)",</div><div class='add'>+               xstat, xstat-&gt;flags_handled);</div><div class='add'>+    return &amp;xstat-&gt;st;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_xreaddirplus_get_stat, 3.11.0);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_lease_to_glfs_lease (struct gf_lease *gf_lease, struct glfs_lease *lease)</div><div class='add'>+gf_lease_to_glfs_lease(struct gf_lease *gf_lease, struct glfs_lease *lease)</div><div class='ctx'> {</div><div class='del'>-        lease-&gt;cmd = gf_lease-&gt;cmd;</div><div class='del'>-        lease-&gt;lease_type = gf_lease-&gt;lease_type;</div><div class='del'>-        memcpy (lease-&gt;lease_id, gf_lease-&gt;lease_id, LEASE_ID_SIZE);</div><div class='add'>+    lease-&gt;cmd = gf_lease-&gt;cmd;</div><div class='add'>+    lease-&gt;lease_type = gf_lease-&gt;lease_type;</div><div class='add'>+    memcpy(lease-&gt;lease_id, gf_lease-&gt;lease_id, LEASE_ID_SIZE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glfs_lease_to_gf_lease (struct glfs_lease *lease, struct gf_lease *gf_lease)</div><div class='add'>+glfs_lease_to_gf_lease(struct glfs_lease *lease, struct gf_lease *gf_lease)</div><div class='ctx'> {</div><div class='del'>-        gf_lease-&gt;cmd = lease-&gt;cmd;</div><div class='del'>-        gf_lease-&gt;lease_type = lease-&gt;lease_type;</div><div class='del'>-        memcpy (gf_lease-&gt;lease_id, lease-&gt;lease_id, LEASE_ID_SIZE);</div><div class='add'>+    gf_lease-&gt;cmd = lease-&gt;cmd;</div><div class='add'>+    gf_lease-&gt;lease_type = lease-&gt;lease_type;</div><div class='add'>+    memcpy(gf_lease-&gt;lease_id, lease-&gt;lease_id, LEASE_ID_SIZE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_lease (struct glfs_fd *glfd, struct glfs_lease *lease,</div><div class='del'>-                glfs_recall_cbk fn, void *data)</div><div class='del'>-{</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        fd_t            *fd = NULL;</div><div class='del'>-        struct gf_lease  gf_lease = {0, };</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FD (glfd, invalid_fs);</div><div class='del'>-</div><div class='del'>-        GF_REF_GET (glfd);</div><div class='del'>-</div><div class='del'>-        if (!is_valid_lease_id (lease-&gt;lease_id)) {</div><div class='add'>+pub_glfs_lease(struct glfs_fd *glfd, struct glfs_lease *lease,</div><div class='add'>+               glfs_recall_cbk fn, void *data)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct gf_lease gf_lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FD(glfd, invalid_fs);</div><div class='add'>+</div><div class='add'>+    GF_REF_GET(glfd);</div><div class='add'>+</div><div class='add'>+    if (!is_valid_lease_id(lease-&gt;lease_id)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(glfd-&gt;fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_resolve_fd(glfd-&gt;fs, subvol, glfd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (lease-&gt;lease_type) {</div><div class='add'>+        case GLFS_RD_LEASE:</div><div class='add'>+            if ((fd-&gt;flags != O_RDONLY) &amp;&amp; !(fd-&gt;flags &amp; O_RDWR)) {</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 errno = EINVAL;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (glfd-&gt;fs);</div><div class='del'>-        if (!subvol) {</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case GLFS_RW_LEASE:</div><div class='add'>+            if (!((fd-&gt;flags &amp; O_WRONLY) || (fd-&gt;flags &amp; O_RDWR))) {</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='add'>+                errno = EINVAL;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_resolve_fd (glfd-&gt;fs, subvol, glfd);</div><div class='del'>-        if (!fd) {</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (lease-&gt;cmd != GLFS_GET_LEASE) {</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                errno = EBADFD;</div><div class='add'>+                errno = EINVAL;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (lease-&gt;lease_type) {</div><div class='del'>-        case GLFS_RD_LEASE:</div><div class='del'>-                if ((fd-&gt;flags != O_RDONLY) &amp;&amp; !(fd-&gt;flags &amp; O_RDWR)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        case GLFS_RW_LEASE:</div><div class='del'>-                if (!((fd-&gt;flags &amp; O_WRONLY) || (fd-&gt;flags &amp; O_RDWR))) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        default:</div><div class='del'>-                if (lease-&gt;cmd != GLFS_GET_LEASE) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (fd-&gt;inode, loc, out);</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(fd-&gt;inode, loc, out);</div><div class='ctx'> </div><div class='del'>-        glfs_lease_to_gf_lease (lease, &amp;gf_lease);</div><div class='add'>+    glfs_lease_to_gf_lease(lease, &amp;gf_lease);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lease (subvol, &amp;loc, &amp;gf_lease, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_lease(subvol, &amp;loc, &amp;gf_lease, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-        gf_lease_to_glfs_lease (&amp;gf_lease, lease);</div><div class='add'>+    gf_lease_to_glfs_lease(&amp;gf_lease, lease);</div><div class='ctx'> </div><div class='del'>-        /* TODO: Add leases for client replay</div><div class='del'>-        if (ret == 0 &amp;&amp; (cmd == F_SETLK || cmd == F_SETLKW))</div><div class='del'>-                fd_lk_insert_and_merge (fd, cmd, &amp;saved_flock);</div><div class='del'>-        */</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                   ret = fd_ctx_set (glfd-&gt;fd, subvol, (uint64_t)(long)glfd);</div><div class='del'>-                   if (ret) {</div><div class='del'>-                           gf_msg (subvol-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_FDCTX_SET_FAILED,</div><div class='del'>-                                           "Setting fd ctx failed for fd(%p)", glfd-&gt;fd);</div><div class='del'>-                           goto out;</div><div class='del'>-                   }</div><div class='del'>-                   glfd-&gt;cbk = fn;</div><div class='del'>-                   glfd-&gt;cookie = data;</div><div class='add'>+    /* TODO: Add leases for client replay</div><div class='add'>+    if (ret == 0 &amp;&amp; (cmd == F_SETLK || cmd == F_SETLKW))</div><div class='add'>+            fd_lk_insert_and_merge (fd, cmd, &amp;saved_flock);</div><div class='add'>+    */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = fd_ctx_set(glfd-&gt;fd, subvol, (uint64_t)(long)glfd);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(subvol-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_FDCTX_SET_FAILED,</div><div class='add'>+                   "Setting fd ctx failed for fd(%p)", glfd-&gt;fd);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        glfd-&gt;cbk = fn;</div><div class='add'>+        glfd-&gt;cookie = data;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (glfd)</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='add'>+    if (glfd)</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='ctx'> </div><div class='del'>-        if (subvol)</div><div class='del'>-                glfs_subvol_done (glfd-&gt;fs, subvol);</div><div class='add'>+    if (subvol)</div><div class='add'>+        glfs_subvol_done(glfd-&gt;fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_lease, 4.0.0);</div><div class='head'>diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c<br/>index 343fc384ddf..7e9f4c5c915 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/src/glfs-handleops.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/src/glfs-handleops.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/src/glfs-handleops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/src/glfs-handleops.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>  *  cases as published by the Free Software Foundation.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "glfs-internal.h"</div><div class='ctx'> #include "glfs-mem-types.h"</div><div class='ctx'> #include "syncop.h"</div><div class='hunk'>@@ -17,1809 +16,1844 @@</div><div class='ctx'> #include "gfapi-messages.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_listxattr_process (void *value, size_t size, dict_t *xattr);</div><div class='add'>+glfs_listxattr_process(void *value, size_t size, dict_t *xattr);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_iatt_from_stat (struct stat *stat, int valid, struct iatt *iatt,</div><div class='del'>-                     int *glvalid)</div><div class='add'>+glfs_iatt_from_stat(struct stat *stat, int valid, struct iatt *iatt,</div><div class='add'>+                    int *glvalid)</div><div class='ctx'> {</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((stat == NULL) || (iatt == NULL) || (glvalid == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *glvalid = 0;</div><div class='del'>-</div><div class='del'>-        if (valid &amp; GFAPI_SET_ATTR_MODE) {</div><div class='del'>-                iatt-&gt;ia_prot = ia_prot_from_st_mode (stat-&gt;st_mode);</div><div class='del'>-                *glvalid |= GF_SET_ATTR_MODE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (valid &amp; GFAPI_SET_ATTR_UID) {</div><div class='del'>-                iatt-&gt;ia_uid = stat-&gt;st_uid;</div><div class='del'>-                *glvalid |= GF_SET_ATTR_UID;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (valid &amp; GFAPI_SET_ATTR_GID) {</div><div class='del'>-                iatt-&gt;ia_gid = stat-&gt;st_gid;</div><div class='del'>-                *glvalid |= GF_SET_ATTR_GID;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (valid &amp; GFAPI_SET_ATTR_ATIME) {</div><div class='del'>-                iatt-&gt;ia_atime = stat-&gt;st_atime;</div><div class='del'>-                iatt-&gt;ia_atime_nsec = ST_ATIM_NSEC (stat);</div><div class='del'>-                *glvalid |= GF_SET_ATTR_ATIME;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (valid &amp; GFAPI_SET_ATTR_MTIME) {</div><div class='del'>-                iatt-&gt;ia_mtime = stat-&gt;st_mtime;</div><div class='del'>-                iatt-&gt;ia_mtime_nsec = ST_MTIM_NSEC (stat);</div><div class='del'>-                *glvalid |= GF_SET_ATTR_MTIME;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((stat == NULL) || (iatt == NULL) || (glvalid == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='ctx'>         return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *glvalid = 0;</div><div class='add'>+</div><div class='add'>+    if (valid &amp; GFAPI_SET_ATTR_MODE) {</div><div class='add'>+        iatt-&gt;ia_prot = ia_prot_from_st_mode(stat-&gt;st_mode);</div><div class='add'>+        *glvalid |= GF_SET_ATTR_MODE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (valid &amp; GFAPI_SET_ATTR_UID) {</div><div class='add'>+        iatt-&gt;ia_uid = stat-&gt;st_uid;</div><div class='add'>+        *glvalid |= GF_SET_ATTR_UID;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (valid &amp; GFAPI_SET_ATTR_GID) {</div><div class='add'>+        iatt-&gt;ia_gid = stat-&gt;st_gid;</div><div class='add'>+        *glvalid |= GF_SET_ATTR_GID;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (valid &amp; GFAPI_SET_ATTR_ATIME) {</div><div class='add'>+        iatt-&gt;ia_atime = stat-&gt;st_atime;</div><div class='add'>+        iatt-&gt;ia_atime_nsec = ST_ATIM_NSEC(stat);</div><div class='add'>+        *glvalid |= GF_SET_ATTR_ATIME;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (valid &amp; GFAPI_SET_ATTR_MTIME) {</div><div class='add'>+        iatt-&gt;ia_mtime = stat-&gt;st_mtime;</div><div class='add'>+        iatt-&gt;ia_mtime_nsec = ST_MTIM_NSEC(stat);</div><div class='add'>+        *glvalid |= GF_SET_ATTR_MTIME;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_lookupat (struct glfs *fs, struct glfs_object *parent,</div><div class='del'>-                     const char *path, struct stat *stat, int follow)</div><div class='add'>+pub_glfs_h_lookupat(struct glfs *fs, struct glfs_object *parent,</div><div class='add'>+                    const char *path, struct stat *stat, int follow)</div><div class='ctx'> {</div><div class='del'>-        int                      ret = 0;</div><div class='del'>-        xlator_t                *subvol = NULL;</div><div class='del'>-        inode_t                 *inode = NULL;</div><div class='del'>-        struct iatt              iatt = {0, };</div><div class='del'>-        struct glfs_object      *object = NULL;</div><div class='del'>-        loc_t                    loc = {0, };</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if (path == NULL) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if (path == NULL) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        if (parent) {</div><div class='del'>-                inode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-                if (!inode) {</div><div class='del'>-                        errno = ESTALE;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    if (parent) {</div><div class='add'>+        inode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+        if (!inode) {</div><div class='add'>+            errno = ESTALE;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = glfs_resolve_at (fs, subvol, inode, path, &amp;loc, &amp;iatt,</div><div class='del'>-                                    follow, 0);</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = glfs_resolve_at(fs, subvol, inode, path, &amp;loc, &amp;iatt, follow, 0);</div><div class='ctx'> </div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (!ret) {</div><div class='del'>-                if (stat)</div><div class='del'>-                        glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (!ret) {</div><div class='add'>+        if (stat)</div><div class='add'>+            glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> </div><div class='del'>-                ret = glfs_create_object (&amp;loc, &amp;object);</div><div class='del'>-        }</div><div class='add'>+        ret = glfs_create_object(&amp;loc, &amp;object);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_lookupat, 3.7.4);</div><div class='ctx'> </div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_lookupat34 (struct glfs *fs, struct glfs_object *parent,</div><div class='del'>-                       const char *path, struct stat *stat)</div><div class='add'>+pub_glfs_h_lookupat34(struct glfs *fs, struct glfs_object *parent,</div><div class='add'>+                      const char *path, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        return pub_glfs_h_lookupat (fs, parent, path, stat, 0);</div><div class='add'>+    return pub_glfs_h_lookupat(fs, parent, path, stat, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_h_lookupat34, glfs_h_lookupat, 3.4.2);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_statfs (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                   struct statvfs *statvfs)</div><div class='add'>+pub_glfs_h_statfs(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                  struct statvfs *statvfs)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL || statvfs == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL || statvfs == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_statfs(subvol, &amp;loc, statvfs, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_statfs (subvol, &amp;loc, statvfs, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_statfs, 3.7.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_stat (struct glfs *fs, struct glfs_object *object, struct stat *stat)</div><div class='add'>+pub_glfs_h_stat(struct glfs *fs, struct glfs_object *object, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        struct iatt      iatt = {0, };</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_stat (subvol, &amp;loc, &amp;iatt, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (!ret &amp;&amp; stat) {</div><div class='del'>-                glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_stat(subvol, &amp;loc, &amp;iatt, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (!ret &amp;&amp; stat) {</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_stat, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_getattrs (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                     struct stat *stat)</div><div class='add'>+pub_glfs_h_getattrs(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                    struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        xlator_t                *subvol = NULL;</div><div class='del'>-        inode_t                 *inode = NULL;</div><div class='del'>-        struct iatt              iatt = {0, };</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = glfs_resolve_base(fs, subvol, inode, &amp;iatt);</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = glfs_resolve_base (fs, subvol, inode, &amp;iatt);</div><div class='del'>-</div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (!ret &amp;&amp; stat) {</div><div class='del'>-                glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='del'>-        }</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (!ret &amp;&amp; stat) {</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_getattrs, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_h_getxattrs_common (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                         dict_t **xattr, const char *name,</div><div class='del'>-                         gf_boolean_t is_listxattr)</div><div class='add'>+glfs_h_getxattrs_common(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                        dict_t **xattr, const char *name,</div><div class='add'>+                        gf_boolean_t is_listxattr)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!is_listxattr) {</div><div class='del'>-                if (!name || *name == '\0') {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='del'>-                        errno = ENAMETOOLONG;</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='add'>+    if (!is_listxattr) {</div><div class='add'>+        if (!name || *name == '\0') {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (subvol, &amp;loc, xattr, name, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+        if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='add'>+            errno = ENAMETOOLONG;</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;loc, xattr, name, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_getxattrs (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                      const char *name, void *value, size_t size)</div><div class='add'>+pub_glfs_h_getxattrs(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                     const char *name, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-        int                    ret   = -1;</div><div class='del'>-        dict_t                *xattr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='ctx'> </div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_h_getxattrs_common (fs, object, &amp;xattr, name,</div><div class='del'>-                                       (name == NULL));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glfs_h_getxattrs_common(fs, object, &amp;xattr, name, (name == NULL));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* If @name is NULL, means get all the xattrs (i.e listxattr). */</div><div class='del'>-        if (name)</div><div class='del'>-                ret = glfs_getxattr_process (value, size, xattr, name);</div><div class='del'>-        else</div><div class='del'>-                ret = glfs_listxattr_process (value, size, xattr);</div><div class='add'>+    /* If @name is NULL, means get all the xattrs (i.e listxattr). */</div><div class='add'>+    if (name)</div><div class='add'>+        ret = glfs_getxattr_process(value, size, xattr, name);</div><div class='add'>+    else</div><div class='add'>+        ret = glfs_listxattr_process(value, size, xattr);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_getxattrs, 3.5.1);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_setattrs (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                     struct stat *stat, int valid)</div><div class='add'>+pub_glfs_h_setattrs(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                    struct stat *stat, int valid)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        struct iatt      iatt = {0, };</div><div class='del'>-        int              glvalid = 0;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL) || (stat == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* map valid masks from in args */</div><div class='del'>-        glfs_iatt_from_stat (stat, valid, &amp;iatt, &amp;glvalid);</div><div class='del'>-</div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_setattr (subvol, &amp;loc, &amp;iatt, glvalid, 0, 0, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int glvalid = 0;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL) || (stat == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* map valid masks from in args */</div><div class='add'>+    glfs_iatt_from_stat(stat, valid, &amp;iatt, &amp;glvalid);</div><div class='add'>+</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_setattr(subvol, &amp;loc, &amp;iatt, glvalid, 0, 0, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_setattrs, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_setxattrs (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                      const char *name, const void *value, size_t size,</div><div class='del'>-                      int flags)</div><div class='add'>+pub_glfs_h_setxattrs(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                     const char *name, const void *value, size_t size,</div><div class='add'>+                     int flags)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        dict_t          *xattr = NULL;</div><div class='del'>-        void            *value_cp = NULL;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL) ||</div><div class='del'>-                 (name == NULL) || (value == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!name || *name == '\0') {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='del'>-                errno = ENAMETOOLONG;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        value_cp = gf_memdup (value, size);</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG (subvol-&gt;name, value_cp, ret, "Failed to"</div><div class='del'>-                                " duplicate setxattr value", out);</div><div class='del'>-</div><div class='del'>-        xattr = dict_for_key_value (name, value_cp, size, _gf_false);</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                GF_FREE (value_cp);</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    void *value_cp = NULL;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL) || (name == NULL) || (value == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    if (!name || *name == '\0') {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_setxattr (subvol, &amp;loc, xattr, flags, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    if (strlen(name) &gt; GF_XATTR_NAME_MAX) {</div><div class='add'>+        errno = ENAMETOOLONG;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    value_cp = gf_memdup(value, size);</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG(subvol-&gt;name, value_cp, ret,</div><div class='add'>+                           "Failed to"</div><div class='add'>+                           " duplicate setxattr value",</div><div class='add'>+                           out);</div><div class='add'>+</div><div class='add'>+    xattr = dict_for_key_value(name, value_cp, size, _gf_false);</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        GF_FREE(value_cp);</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_setxattr(subvol, &amp;loc, xattr, flags, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_setxattrs, 3.5.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_removexattrs (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                         const char *name)</div><div class='add'>+pub_glfs_h_removexattrs(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                        const char *name)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL) || (name == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL) || (name == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_removexattr (subvol, &amp;loc, name, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_removexattr(subvol, &amp;loc, name, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_removexattrs, 3.5.1);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_fd *</div><div class='del'>-pub_glfs_h_open (struct glfs *fs, struct glfs_object *object, int flags)</div><div class='add'>+pub_glfs_h_open(struct glfs *fs, struct glfs_object *object, int flags)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        struct glfs_fd  *glfd = NULL;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        dict_t          *fop_attr = NULL;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* check types to open */</div><div class='del'>-        if (IA_ISDIR (inode-&gt;ia_type)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EISDIR;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!IA_ISREG (inode-&gt;ia_type)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfd = glfs_fd_new (fs);</div><div class='del'>-        if (!glfd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfd-&gt;fd = fd_create (inode, getpid());</div><div class='del'>-        if (!glfd-&gt;fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        glfd-&gt;fd-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = get_fop_attr_thrd_key (&amp;fop_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug ("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *fop_attr = NULL;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* check types to open */</div><div class='add'>+    if (IA_ISDIR(inode-&gt;ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EISDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISREG(inode-&gt;ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_fd_new(fs);</div><div class='add'>+    if (!glfd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd-&gt;fd = fd_create(inode, getpid());</div><div class='add'>+    if (!glfd-&gt;fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    glfd-&gt;fd-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = get_fop_attr_thrd_key(&amp;fop_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug("gfapi", 0, "Getting leaseid from thread failed");</div><div class='add'>+</div><div class='add'>+    ret = syncop_open(subvol, &amp;loc, flags, glfd-&gt;fd, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    glfd-&gt;fd-&gt;flags = flags;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_open (subvol, &amp;loc, flags, glfd-&gt;fd, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+out:</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        glfd-&gt;fd-&gt;flags = flags;</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (fop_attr)</div><div class='add'>+        dict_unref(fop_attr);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        if (fop_attr)</div><div class='del'>-                dict_unref (fop_attr);</div><div class='del'>-</div><div class='del'>-        if (ret &amp;&amp; glfd) {</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-                glfd = NULL;</div><div class='del'>-        } else if (glfd) {</div><div class='del'>-                glfd_set_state_bind (glfd);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; glfd) {</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+        glfd = NULL;</div><div class='add'>+    } else if (glfd) {</div><div class='add'>+        glfd_set_state_bind(glfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return glfd;</div><div class='add'>+    return glfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_open, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_creat (struct glfs *fs, struct glfs_object *parent, const char *path,</div><div class='del'>-                  int flags, mode_t mode, struct stat *stat)</div><div class='add'>+pub_glfs_h_creat(struct glfs *fs, struct glfs_object *parent, const char *path,</div><div class='add'>+                 int flags, mode_t mode, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        fd_t               *fd = NULL;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        struct iatt         iatt = {0, };</div><div class='del'>-        uuid_t              gfid;</div><div class='del'>-        dict_t             *xattr_req = NULL;</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new ();</div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_generate (gfid);</div><div class='del'>-        ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GLFS_LOC_FILL_PINODE (inode, loc, ret, errno, out, path);</div><div class='del'>-</div><div class='del'>-        fd = fd_create (loc.inode, getpid());</div><div class='del'>-        if (!fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GLFS_LOC_FILL_PINODE(inode, loc, ret, errno, out, path);</div><div class='add'>+</div><div class='add'>+    fd = fd_create(loc.inode, getpid());</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    fd-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_create(subvol, &amp;loc, flags, mode, fd, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        fd-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_create (subvol, &amp;loc, flags, mode, fd, &amp;iatt,</div><div class='del'>-                             xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='ctx'> </div><div class='del'>-                if (stat)</div><div class='del'>-                        glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+        if (stat)</div><div class='add'>+            glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> </div><div class='del'>-                ret = glfs_create_object (&amp;loc, &amp;object);</div><div class='del'>-        }</div><div class='add'>+        ret = glfs_create_object(&amp;loc, &amp;object);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; object != NULL) {</div><div class='del'>-                /* Release the held reference */</div><div class='del'>-                glfs_h_close (object);</div><div class='del'>-                object = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; object != NULL) {</div><div class='add'>+        /* Release the held reference */</div><div class='add'>+        glfs_h_close(object);</div><div class='add'>+        object = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref(fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_creat, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_mkdir (struct glfs *fs, struct glfs_object *parent, const char *path,</div><div class='del'>-                  mode_t mode, struct stat *stat)</div><div class='add'>+pub_glfs_h_mkdir(struct glfs *fs, struct glfs_object *parent, const char *path,</div><div class='add'>+                 mode_t mode, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        struct iatt         iatt = {0, };</div><div class='del'>-        uuid_t              gfid;</div><div class='del'>-        dict_t             *xattr_req = NULL;</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new ();</div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_generate (gfid);</div><div class='del'>-        ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GLFS_LOC_FILL_PINODE(inode, loc, ret, errno, out, path);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_mkdir(subvol, &amp;loc, mode, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        GLFS_LOC_FILL_PINODE (inode, loc, ret, errno, out, path);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_mkdir (subvol, &amp;loc, mode, &amp;iatt, xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        /* populate out args */</div><div class='del'>-        if ( ret == 0 )  {</div><div class='del'>-                ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (stat)</div><div class='del'>-                        glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+        if (stat)</div><div class='add'>+            glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> </div><div class='del'>-                ret = glfs_create_object (&amp;loc, &amp;object);</div><div class='del'>-        }</div><div class='add'>+        ret = glfs_create_object(&amp;loc, &amp;object);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; object != NULL) {</div><div class='del'>-                glfs_h_close (object);</div><div class='del'>-                object = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; object != NULL) {</div><div class='add'>+        glfs_h_close(object);</div><div class='add'>+        object = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_mkdir, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_mknod (struct glfs *fs, struct glfs_object *parent, const char *path,</div><div class='del'>-                  mode_t mode, dev_t dev, struct stat *stat)</div><div class='add'>+pub_glfs_h_mknod(struct glfs *fs, struct glfs_object *parent, const char *path,</div><div class='add'>+                 mode_t mode, dev_t dev, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        struct iatt         iatt = {0, };</div><div class='del'>-        uuid_t              gfid;</div><div class='del'>-        dict_t             *xattr_req = NULL;</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new ();</div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_generate (gfid);</div><div class='del'>-        ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GLFS_LOC_FILL_PINODE(inode, loc, ret, errno, out, path);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_mknod(subvol, &amp;loc, mode, dev, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        GLFS_LOC_FILL_PINODE (inode, loc, ret, errno, out, path);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_mknod (subvol, &amp;loc, mode, dev, &amp;iatt, xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (stat)</div><div class='del'>-                        glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+        if (stat)</div><div class='add'>+            glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> </div><div class='del'>-                ret = glfs_create_object (&amp;loc, &amp;object);</div><div class='del'>-        }</div><div class='add'>+        ret = glfs_create_object(&amp;loc, &amp;object);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; object != NULL) {</div><div class='del'>-                glfs_h_close (object);</div><div class='del'>-                object = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; object != NULL) {</div><div class='add'>+        glfs_h_close(object);</div><div class='add'>+        object = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_mknod, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_unlink (struct glfs *fs, struct glfs_object *parent, const char *path)</div><div class='add'>+pub_glfs_h_unlink(struct glfs *fs, struct glfs_object *parent, const char *path)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if ( !subvol ) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_resolve_at (fs, subvol, inode, path, &amp;loc, NULL, 0 , 0);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (parent == NULL) || (path == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_resolve_at(fs, subvol, inode, path, &amp;loc, NULL, 0, 0);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISDIR(loc.inode-&gt;ia_type)) {</div><div class='add'>+        ret = syncop_unlink(subvol, &amp;loc, NULL, NULL);</div><div class='add'>+        DECODE_SYNCOP_ERR(ret);</div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!IA_ISDIR(loc.inode-&gt;ia_type)) {</div><div class='del'>-                ret = syncop_unlink (subvol, &amp;loc, NULL, NULL);</div><div class='del'>-                DECODE_SYNCOP_ERR (ret);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = syncop_rmdir (subvol, &amp;loc, 0, NULL, NULL);</div><div class='del'>-                DECODE_SYNCOP_ERR (ret);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    } else {</div><div class='add'>+        ret = syncop_rmdir(subvol, &amp;loc, 0, NULL, NULL);</div><div class='add'>+        DECODE_SYNCOP_ERR(ret);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = glfs_loc_unlink (&amp;loc);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_unlink(&amp;loc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_unlink, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_fd *</div><div class='del'>-pub_glfs_h_opendir (struct glfs *fs, struct glfs_object *object)</div><div class='add'>+pub_glfs_h_opendir(struct glfs *fs, struct glfs_object *object)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        struct glfs_fd  *glfd = NULL;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!IA_ISDIR (inode-&gt;ia_type)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOTDIR;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfd = glfs_fd_new (fs);</div><div class='del'>-        if (!glfd)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;glfd-&gt;entries);</div><div class='del'>-</div><div class='del'>-        glfd-&gt;fd = fd_create (inode, getpid());</div><div class='del'>-        if (!glfd-&gt;fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_opendir (subvol, &amp;loc, glfd-&gt;fd, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISDIR(inode-&gt;ia_type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOTDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_fd_new(fs);</div><div class='add'>+    if (!glfd)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;glfd-&gt;entries);</div><div class='add'>+</div><div class='add'>+    glfd-&gt;fd = fd_create(inode, getpid());</div><div class='add'>+    if (!glfd-&gt;fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_opendir(subvol, &amp;loc, glfd-&gt;fd, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (ret &amp;&amp; glfd) {</div><div class='del'>-                GF_REF_PUT (glfd);</div><div class='del'>-                glfd = NULL;</div><div class='del'>-        } else if (glfd) {</div><div class='del'>-                glfd_set_state_bind (glfd);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; glfd) {</div><div class='add'>+        GF_REF_PUT(glfd);</div><div class='add'>+        glfd = NULL;</div><div class='add'>+    } else if (glfd) {</div><div class='add'>+        glfd_set_state_bind(glfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return glfd;</div><div class='add'>+    return glfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_opendir, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_access (struct glfs *fs, struct glfs_object *object, int mask)</div><div class='add'>+pub_glfs_h_access(struct glfs *fs, struct glfs_object *object, int mask)</div><div class='ctx'> {</div><div class='del'>-	int              ret = -1;</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-	inode_t         *inode = NULL;</div><div class='del'>-	loc_t            loc = {0, };</div><div class='del'>-</div><div class='del'>-	DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-	/* validate in args */</div><div class='del'>-	if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* get the active volume */</div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	/* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-	inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-	if (!inode) {</div><div class='del'>-		errno = ESTALE;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='ctx'> </div><div class='del'>-	/* fop/op */</div><div class='add'>+    /* fop/op */</div><div class='ctx'> </div><div class='del'>-	ret = syncop_access (subvol, &amp;loc, mask, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_access(subvol, &amp;loc, mask, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref (inode);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-	glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_access, 3.6.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_h_extract_handle (struct glfs_object *object, unsigned char *handle,</div><div class='del'>-                           int len)</div><div class='add'>+pub_glfs_h_extract_handle(struct glfs_object *object, unsigned char *handle,</div><div class='add'>+                          int len)</div><div class='ctx'> {</div><div class='del'>-        ssize_t ret = -1;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* validate in args */</div><div class='del'>-        if (object == NULL) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!handle || !len) {</div><div class='del'>-                ret = GFAPI_HANDLE_LENGTH;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!handle || !len) {</div><div class='add'>+        ret = GFAPI_HANDLE_LENGTH;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (len &lt; GFAPI_HANDLE_LENGTH)</div><div class='del'>-        {</div><div class='del'>-                errno = ERANGE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (len &lt; GFAPI_HANDLE_LENGTH) {</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (handle, object-&gt;gfid, GFAPI_HANDLE_LENGTH);</div><div class='add'>+    memcpy(handle, object-&gt;gfid, GFAPI_HANDLE_LENGTH);</div><div class='ctx'> </div><div class='del'>-        ret = GFAPI_HANDLE_LENGTH;</div><div class='add'>+    ret = GFAPI_HANDLE_LENGTH;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_extract_handle, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_create_from_handle (struct glfs *fs, unsigned char *handle, int len,</div><div class='del'>-                               struct stat *stat)</div><div class='add'>+pub_glfs_h_create_from_handle(struct glfs *fs, unsigned char *handle, int len,</div><div class='add'>+                              struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        struct iatt         iatt = {0, };</div><div class='del'>-        inode_t            *newinode = NULL;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-        uint64_t            ctx_value = LOOKUP_NOT_NEEDED;</div><div class='del'>-        gf_boolean_t        lookup_needed = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (handle == NULL) || (len != GFAPI_HANDLE_LENGTH)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *newinode = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    uint64_t ctx_value = LOOKUP_NOT_NEEDED;</div><div class='add'>+    gf_boolean_t lookup_needed = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (handle == NULL) || (len != GFAPI_HANDLE_LENGTH)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (loc.gfid, handle, GFAPI_HANDLE_LENGTH);</div><div class='del'>-</div><div class='del'>-        /* make sure the gfid received is valid */</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_h_create_from_handle",</div><div class='del'>-                             !(gf_uuid_is_null (loc.gfid)), out);</div><div class='del'>-</div><div class='del'>-        newinode = inode_find (subvol-&gt;itable, loc.gfid);</div><div class='del'>-        if (newinode) {</div><div class='del'>-                if (!stat)  /* No need of lookup */</div><div class='del'>-                        goto found;</div><div class='del'>-</div><div class='del'>-                lookup_needed = inode_needs_lookup (newinode, THIS);</div><div class='del'>-                if (lookup_needed) {</div><div class='del'>-                        loc.inode = newinode;</div><div class='del'>-                } else {</div><div class='del'>-                        /* populate loc */</div><div class='del'>-                        GLFS_LOC_FILL_INODE (newinode, loc, fill_out);</div><div class='del'>-</div><div class='del'>-                        /* fop/op */</div><div class='del'>-                        ret = syncop_stat (subvol, &amp;loc, &amp;iatt, NULL, NULL);</div><div class='del'>-                        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-                        if (ret) {</div><div class='del'>-fill_out:</div><div class='del'>-                                /* Drop the reference hold in inode_find */</div><div class='del'>-                                inode_unref (newinode);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='del'>-                        goto found;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                loc.inode = inode_new (subvol-&gt;itable);</div><div class='del'>-                if (!loc.inode) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    memcpy(loc.gfid, handle, GFAPI_HANDLE_LENGTH);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (subvol, &amp;loc, &amp;iatt, 0, 0, 0);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_INODE_REFRESH_FAILED,</div><div class='del'>-                        "inode refresh of %s failed: %s",</div><div class='del'>-                        uuid_utoa (loc.gfid), strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* make sure the gfid received is valid */</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_h_create_from_handle",</div><div class='add'>+                        !(gf_uuid_is_null(loc.gfid)), out);</div><div class='ctx'> </div><div class='del'>-        newinode = inode_link (loc.inode, 0, 0, &amp;iatt);</div><div class='del'>-        if (newinode) {</div><div class='del'>-                if (newinode == loc.inode) {</div><div class='del'>-                        inode_ctx_set (newinode, THIS, &amp;ctx_value);</div><div class='del'>-                }</div><div class='del'>-                inode_lookup (newinode);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_INODE_LINK_FAILED,</div><div class='del'>-                        "inode linking of %s failed", uuid_utoa (loc.gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newinode = inode_find(subvol-&gt;itable, loc.gfid);</div><div class='add'>+    if (newinode) {</div><div class='add'>+        if (!stat) /* No need of lookup */</div><div class='add'>+            goto found;</div><div class='ctx'> </div><div class='del'>-        /* populate stat */</div><div class='del'>-        if (stat)</div><div class='del'>-                glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+        lookup_needed = inode_needs_lookup(newinode, THIS);</div><div class='add'>+        if (lookup_needed) {</div><div class='add'>+            loc.inode = newinode;</div><div class='add'>+        } else {</div><div class='add'>+            /* populate loc */</div><div class='add'>+            GLFS_LOC_FILL_INODE(newinode, loc, fill_out);</div><div class='add'>+</div><div class='add'>+            /* fop/op */</div><div class='add'>+            ret = syncop_stat(subvol, &amp;loc, &amp;iatt, NULL, NULL);</div><div class='add'>+            DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+            if (ret) {</div><div class='add'>+            fill_out:</div><div class='add'>+                /* Drop the reference hold in inode_find */</div><div class='add'>+                inode_unref(newinode);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='add'>+            goto found;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        loc.inode = inode_new(subvol-&gt;itable);</div><div class='add'>+        if (!loc.inode) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, &amp;iatt, 0, 0, 0);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+               API_MSG_INODE_REFRESH_FAILED, "inode refresh of %s failed: %s",</div><div class='add'>+               uuid_utoa(loc.gfid), strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newinode = inode_link(loc.inode, 0, 0, &amp;iatt);</div><div class='add'>+    if (newinode) {</div><div class='add'>+        if (newinode == loc.inode) {</div><div class='add'>+            inode_ctx_set(newinode, THIS, &amp;ctx_value);</div><div class='add'>+        }</div><div class='add'>+        inode_lookup(newinode);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_WARNING, errno, API_MSG_INODE_LINK_FAILED,</div><div class='add'>+               "inode linking of %s failed", uuid_utoa(loc.gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* populate stat */</div><div class='add'>+    if (stat)</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> </div><div class='ctx'> found:</div><div class='del'>-        object = GF_CALLOC (1, sizeof(struct glfs_object),</div><div class='del'>-                            glfs_mt_glfs_object_t);</div><div class='del'>-        if (object == NULL) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    object = GF_CALLOC(1, sizeof(struct glfs_object), glfs_mt_glfs_object_t);</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* populate the return object */</div><div class='del'>-        object-&gt;inode = newinode;</div><div class='del'>-        gf_uuid_copy (object-&gt;gfid, object-&gt;inode-&gt;gfid);</div><div class='add'>+    /* populate the return object */</div><div class='add'>+    object-&gt;inode = newinode;</div><div class='add'>+    gf_uuid_copy(object-&gt;gfid, object-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /* TODO: Check where the inode ref is being held? */</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    /* TODO: Check where the inode ref is being held? */</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_create_from_handle, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_close (struct glfs_object *object)</div><div class='add'>+pub_glfs_h_close(struct glfs_object *object)</div><div class='ctx'> {</div><div class='del'>-        /* since glfs_h_* objects hold a reference to inode</div><div class='del'>-         * it is safe to keep lookup count to '0' */</div><div class='del'>-        inode_forget (object-&gt;inode, 0);</div><div class='del'>-        inode_unref (object-&gt;inode);</div><div class='del'>-        GF_FREE (object);</div><div class='add'>+    /* since glfs_h_* objects hold a reference to inode</div><div class='add'>+     * it is safe to keep lookup count to '0' */</div><div class='add'>+    inode_forget(object-&gt;inode, 0);</div><div class='add'>+    inode_unref(object-&gt;inode);</div><div class='add'>+    GF_FREE(object);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_close, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_truncate (struct glfs *fs, struct glfs_object *object, off_t offset)</div><div class='add'>+pub_glfs_h_truncate(struct glfs *fs, struct glfs_object *object, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* validate in args */</div><div class='del'>-        if (object == NULL) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_truncate (subvol, &amp;loc, (off_t)offset, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_truncate(subvol, &amp;loc, (off_t)offset, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = glfs_loc_unlink (&amp;loc);</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_unlink(&amp;loc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_truncate, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_object *</div><div class='del'>-pub_glfs_h_symlink (struct glfs *fs, struct glfs_object *parent,</div><div class='del'>-                    const char *name, const char *data, struct stat *stat)</div><div class='add'>+pub_glfs_h_symlink(struct glfs *fs, struct glfs_object *parent,</div><div class='add'>+                   const char *name, const char *data, struct stat *stat)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        struct iatt         iatt = {0, };</div><div class='del'>-        uuid_t              gfid;</div><div class='del'>-        dict_t             *xattr_req = NULL;</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((parent == NULL) || (name == NULL) ||</div><div class='del'>-                (data == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new ();</div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_generate (gfid);</div><div class='del'>-        ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((parent == NULL) || (name == NULL) || (data == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_generate(gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GLFS_LOC_FILL_PINODE(inode, loc, ret, errno, out, name);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_symlink(subvol, &amp;loc, data, &amp;iatt, xattr_req, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = glfs_loc_link(&amp;loc, &amp;iatt);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        GLFS_LOC_FILL_PINODE (inode, loc, ret, errno, out, name);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_symlink (subvol, &amp;loc, data, &amp;iatt, xattr_req, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = glfs_loc_link (&amp;loc, &amp;iatt);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (stat)</div><div class='del'>-                        glfs_iatt_to_stat (fs, &amp;iatt, stat);</div><div class='add'>+        if (stat)</div><div class='add'>+            glfs_iatt_to_stat(fs, &amp;iatt, stat);</div><div class='ctx'> </div><div class='del'>-                ret = glfs_create_object (&amp;loc, &amp;object);</div><div class='del'>-        }</div><div class='add'>+        ret = glfs_create_object(&amp;loc, &amp;object);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; object != NULL) {</div><div class='del'>-                pub_glfs_h_close (object);</div><div class='del'>-                object = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; object != NULL) {</div><div class='add'>+        pub_glfs_h_close(object);</div><div class='add'>+        object = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_symlink, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_readlink (struct glfs *fs, struct glfs_object *object, char *buf,</div><div class='del'>-                     size_t bufsiz)</div><div class='add'>+pub_glfs_h_readlink(struct glfs *fs, struct glfs_object *object, char *buf,</div><div class='add'>+                    size_t bufsiz)</div><div class='ctx'> {</div><div class='del'>-        loc_t               loc = {0, };</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        char               *linkval = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((object == NULL) || (buf == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    char *linkval = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((object == NULL) || (buf == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='ctx'> </div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_readlink (subvol, &amp;loc, &amp;linkval, bufsiz, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_readlink(subvol, &amp;loc, &amp;linkval, bufsiz, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-        /* populate out args */</div><div class='del'>-        if (ret &gt; 0)</div><div class='del'>-                memcpy (buf, linkval, ret);</div><div class='add'>+    /* populate out args */</div><div class='add'>+    if (ret &gt; 0)</div><div class='add'>+        memcpy(buf, linkval, ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (linkval)</div><div class='del'>-                GF_FREE (linkval);</div><div class='add'>+    if (linkval)</div><div class='add'>+        GF_FREE(linkval);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_readlink, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_link (struct glfs *fs, struct glfs_object *linksrc,</div><div class='del'>-             struct glfs_object *parent, const char *name)</div><div class='add'>+pub_glfs_h_link(struct glfs *fs, struct glfs_object *linksrc,</div><div class='add'>+                struct glfs_object *parent, const char *name)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *inode = NULL;</div><div class='del'>-        inode_t            *pinode = NULL;</div><div class='del'>-        loc_t               oldloc = {0, };</div><div class='del'>-        loc_t               newloc = {0, };</div><div class='del'>-        struct iatt         iatt = {0, };</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((linksrc == NULL) || (parent == NULL) ||</div><div class='del'>-                (name == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, linksrc);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EISDIR;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, oldloc, out);</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        pinode = glfs_resolve_inode (fs, subvol, parent);</div><div class='del'>-        if (!pinode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* setup newloc based on parent */</div><div class='del'>-        newloc.parent = inode_ref (pinode);</div><div class='del'>-        newloc.name = name;</div><div class='del'>-        ret = glfs_loc_touchup (&amp;newloc);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Filling the inode of the hard link to be same as that of the</div><div class='del'>-         * original file</div><div class='del'>-         */</div><div class='del'>-        newloc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-        /* fop/op */</div><div class='del'>-        ret = syncop_link (subvol, &amp;oldloc, &amp;newloc, &amp;iatt, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = glfs_loc_link (&amp;newloc, &amp;iatt);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *pinode = NULL;</div><div class='add'>+    loc_t oldloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((linksrc == NULL) || (parent == NULL) || (name == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, linksrc);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EISDIR;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, oldloc, out);</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    pinode = glfs_resolve_inode(fs, subvol, parent);</div><div class='add'>+    if (!pinode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* setup newloc based on parent */</div><div class='add'>+    newloc.parent = inode_ref(pinode);</div><div class='add'>+    newloc.name = name;</div><div class='add'>+    ret = glfs_loc_touchup(&amp;newloc);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Filling the inode of the hard link to be same as that of the</div><div class='add'>+     * original file</div><div class='add'>+     */</div><div class='add'>+    newloc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    /* fop/op */</div><div class='add'>+    ret = syncop_link(subvol, &amp;oldloc, &amp;newloc, &amp;iatt, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_loc_link(&amp;newloc, &amp;iatt);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;oldloc);</div><div class='del'>-        loc_wipe (&amp;newloc);</div><div class='add'>+    loc_wipe(&amp;oldloc);</div><div class='add'>+    loc_wipe(&amp;newloc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (pinode)</div><div class='del'>-                inode_unref (pinode);</div><div class='add'>+    if (pinode)</div><div class='add'>+        inode_unref(pinode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_link, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_rename (struct glfs *fs, struct glfs_object *olddir,</div><div class='del'>-                   const char *oldname, struct glfs_object *newdir,</div><div class='del'>-                   const char *newname)</div><div class='add'>+pub_glfs_h_rename(struct glfs *fs, struct glfs_object *olddir,</div><div class='add'>+                  const char *oldname, struct glfs_object *newdir,</div><div class='add'>+                  const char *newname)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        inode_t            *oldpinode = NULL;</div><div class='del'>-        inode_t            *newpinode = NULL;</div><div class='del'>-        loc_t               oldloc = {0, };</div><div class='del'>-        loc_t               newloc = {0, };</div><div class='del'>-        struct iatt         oldiatt = {0, };</div><div class='del'>-        struct iatt         newiatt = {0, };</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((olddir == NULL) || (oldname == NULL) ||</div><div class='del'>-                (newdir == NULL) || (newname == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if ( !subvol ) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        oldpinode = glfs_resolve_inode (fs, subvol, olddir);</div><div class='del'>-        if (!oldpinode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_resolve_at (fs, subvol, oldpinode, oldname, &amp;oldloc,</div><div class='del'>-                                    &amp;oldiatt, 0 , 0);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        newpinode = glfs_resolve_inode (fs, subvol, newdir);</div><div class='del'>-        if (!newpinode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_resolve_at (fs, subvol, newpinode, newname, &amp;newloc,</div><div class='del'>-                                    &amp;newiatt, 0, 0);</div><div class='del'>-</div><div class='del'>-        if (ret &amp;&amp; errno != ENOENT &amp;&amp; newloc.parent)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (newiatt.ia_type != IA_INVAL) {</div><div class='del'>-                if ((oldiatt.ia_type == IA_IFDIR) !=</div><div class='del'>-                        (newiatt.ia_type == IA_IFDIR)) {</div><div class='del'>-                        /* Either both old and new must be dirs,</div><div class='del'>-                         * or both must be non-dirs. Else, fail.</div><div class='del'>-                         */</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = EEXIST;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: check if new or old is a prefix of the other, and fail EINVAL */</div><div class='del'>-</div><div class='del'>-        ret = syncop_rename (subvol, &amp;oldloc, &amp;newloc, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                inode_rename (oldloc.parent-&gt;table, oldloc.parent, oldloc.name,</div><div class='del'>-                              newloc.parent, newloc.name, oldloc.inode,</div><div class='del'>-                              &amp;oldiatt);</div><div class='del'>-</div><div class='del'>-                if (newloc.inode &amp;&amp; !inode_has_dentry (newloc.inode))</div><div class='del'>-                        inode_forget (newloc.inode, 0);</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *oldpinode = NULL;</div><div class='add'>+    inode_t *newpinode = NULL;</div><div class='add'>+    loc_t oldloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt oldiatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt newiatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((olddir == NULL) || (oldname == NULL) || (newdir == NULL) ||</div><div class='add'>+        (newname == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    oldpinode = glfs_resolve_inode(fs, subvol, olddir);</div><div class='add'>+    if (!oldpinode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_resolve_at(fs, subvol, oldpinode, oldname, &amp;oldloc, &amp;oldiatt, 0,</div><div class='add'>+                          0);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    newpinode = glfs_resolve_inode(fs, subvol, newdir);</div><div class='add'>+    if (!newpinode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_resolve_at(fs, subvol, newpinode, newname, &amp;newloc, &amp;newiatt, 0,</div><div class='add'>+                          0);</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; errno != ENOENT &amp;&amp; newloc.parent)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (newiatt.ia_type != IA_INVAL) {</div><div class='add'>+        if ((oldiatt.ia_type == IA_IFDIR) != (newiatt.ia_type == IA_IFDIR)) {</div><div class='add'>+            /* Either both old and new must be dirs,</div><div class='add'>+             * or both must be non-dirs. Else, fail.</div><div class='add'>+             */</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = EEXIST;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: check if new or old is a prefix of the other, and fail EINVAL */</div><div class='add'>+</div><div class='add'>+    ret = syncop_rename(subvol, &amp;oldloc, &amp;newloc, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        inode_rename(oldloc.parent-&gt;table, oldloc.parent, oldloc.name,</div><div class='add'>+                     newloc.parent, newloc.name, oldloc.inode, &amp;oldiatt);</div><div class='add'>+</div><div class='add'>+        if (newloc.inode &amp;&amp; !inode_has_dentry(newloc.inode))</div><div class='add'>+            inode_forget(newloc.inode, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;oldloc);</div><div class='del'>-        loc_wipe (&amp;newloc);</div><div class='add'>+    loc_wipe(&amp;oldloc);</div><div class='add'>+    loc_wipe(&amp;newloc);</div><div class='ctx'> </div><div class='del'>-        if (oldpinode)</div><div class='del'>-                inode_unref (oldpinode);</div><div class='add'>+    if (oldpinode)</div><div class='add'>+        inode_unref(oldpinode);</div><div class='ctx'> </div><div class='del'>-        if (newpinode)</div><div class='del'>-                inode_unref (newpinode);</div><div class='add'>+    if (newpinode)</div><div class='add'>+        inode_unref(newpinode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_rename, 3.4.2);</div><div class='hunk'>@@ -1829,199 +1863,186 @@ GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_rename, 3.4.2);</div><div class='ctx'>  * the inode table. If yes create and return the corresponding glfs_object.</div><div class='ctx'>  */</div><div class='ctx'> struct glfs_object *</div><div class='del'>-glfs_h_find_handle (struct glfs *fs, unsigned char *handle, int len)</div><div class='add'>+glfs_h_find_handle(struct glfs *fs, unsigned char *handle, int len)</div><div class='ctx'> {</div><div class='del'>-        inode_t            *newinode = NULL;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-        uuid_t gfid;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (handle == NULL) || (len != GFAPI_HANDLE_LENGTH)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    inode_t *newinode = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (handle == NULL) || (len != GFAPI_HANDLE_LENGTH)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (gfid, handle, GFAPI_HANDLE_LENGTH);</div><div class='add'>+    memcpy(gfid, handle, GFAPI_HANDLE_LENGTH);</div><div class='ctx'> </div><div class='del'>-        /* make sure the gfid received is valid */</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_h_find_handle",</div><div class='del'>-                             !(gf_uuid_is_null (gfid)), out);</div><div class='add'>+    /* make sure the gfid received is valid */</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_h_find_handle", !(gf_uuid_is_null(gfid)), out);</div><div class='ctx'> </div><div class='del'>-        newinode = inode_find (subvol-&gt;itable, gfid);</div><div class='del'>-        if (!newinode) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newinode = inode_find(subvol-&gt;itable, gfid);</div><div class='add'>+    if (!newinode) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        object = GF_CALLOC (1, sizeof(struct glfs_object),</div><div class='del'>-                            glfs_mt_glfs_object_t);</div><div class='del'>-        if (object == NULL) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    object = GF_CALLOC(1, sizeof(struct glfs_object), glfs_mt_glfs_object_t);</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* populate the return object. The ref taken here</div><div class='del'>-         * is un'refed when the application does glfs_h_close() */</div><div class='del'>-        object-&gt;inode = inode_ref(newinode);</div><div class='del'>-        gf_uuid_copy (object-&gt;gfid, object-&gt;inode-&gt;gfid);</div><div class='add'>+    /* populate the return object. The ref taken here</div><div class='add'>+     * is un'refed when the application does glfs_h_close() */</div><div class='add'>+    object-&gt;inode = inode_ref(newinode);</div><div class='add'>+    gf_uuid_copy(object-&gt;gfid, object-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /* inode_find takes a reference. Unref it. */</div><div class='del'>-        if (newinode)</div><div class='del'>-                inode_unref (newinode);</div><div class='add'>+    /* inode_find takes a reference. Unref it. */</div><div class='add'>+    if (newinode)</div><div class='add'>+        inode_unref(newinode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return object;</div><div class='del'>-</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_free_upcall_inode (void *to_free)</div><div class='add'>+glfs_free_upcall_inode(void *to_free)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_upcall_inode *arg = to_free;</div><div class='add'>+    struct glfs_upcall_inode *arg = to_free;</div><div class='ctx'> </div><div class='del'>-        if (!arg)</div><div class='del'>-                return;</div><div class='add'>+    if (!arg)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (arg-&gt;object)</div><div class='del'>-                glfs_h_close (arg-&gt;object);</div><div class='del'>-        if (arg-&gt;p_object)</div><div class='del'>-                glfs_h_close (arg-&gt;p_object);</div><div class='del'>-        if (arg-&gt;oldp_object)</div><div class='del'>-                glfs_h_close (arg-&gt;oldp_object);</div><div class='add'>+    if (arg-&gt;object)</div><div class='add'>+        glfs_h_close(arg-&gt;object);</div><div class='add'>+    if (arg-&gt;p_object)</div><div class='add'>+        glfs_h_close(arg-&gt;p_object);</div><div class='add'>+    if (arg-&gt;oldp_object)</div><div class='add'>+        glfs_h_close(arg-&gt;oldp_object);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (arg);</div><div class='add'>+    GF_FREE(arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_h_poll_cache_invalidation (struct glfs *fs,</div><div class='del'>-                                struct glfs_upcall *up_arg,</div><div class='del'>-                                struct gf_upcall *upcall_data)</div><div class='add'>+glfs_h_poll_cache_invalidation(struct glfs *fs, struct glfs_upcall *up_arg,</div><div class='add'>+                               struct gf_upcall *upcall_data)</div><div class='ctx'> {</div><div class='del'>-        int                                 ret           = -1;</div><div class='del'>-        struct glfs_object                  *p_object     = NULL;</div><div class='del'>-        struct glfs_object                  *oldp_object  = NULL;</div><div class='del'>-        struct glfs_object                  *object       = NULL;</div><div class='del'>-        struct gf_upcall_cache_invalidation *ca_data      = NULL;</div><div class='del'>-        struct glfs_upcall_inode            *up_inode_arg = NULL;</div><div class='del'>-</div><div class='del'>-        ca_data = upcall_data-&gt;data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_h_poll_cache_invalidation",</div><div class='del'>-                             ca_data, out);</div><div class='del'>-</div><div class='del'>-        object = glfs_h_find_handle (fs, upcall_data-&gt;gfid,</div><div class='del'>-                                     GFAPI_HANDLE_LENGTH);</div><div class='del'>-        if (!object) {</div><div class='del'>-                /* The reason handle creation will fail is because we</div><div class='del'>-                 * couldn't find the inode in the gfapi inode table.</div><div class='del'>-                 *</div><div class='del'>-                 * But since application would have taken inode_ref, the</div><div class='del'>-                 * only case when this can happen is when it has closed</div><div class='del'>-                 * the handle and hence will no more be interested in</div><div class='del'>-                 * the upcall for this particular gfid.</div><div class='del'>-                 */</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='del'>-                        API_MSG_CREATE_HANDLE_FAILED,</div><div class='del'>-                        "handle creation of %s failed",</div><div class='del'>-                         uuid_utoa (upcall_data-&gt;gfid));</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        up_inode_arg = GF_CALLOC (1, sizeof (struct glfs_upcall_inode),</div><div class='del'>-                                  glfs_mt_upcall_inode_t);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_h_poll_cache_invalidation",</div><div class='del'>-                             up_inode_arg, out);</div><div class='del'>-</div><div class='del'>-        up_inode_arg-&gt;object = object;</div><div class='del'>-        up_inode_arg-&gt;flags = ca_data-&gt;flags;</div><div class='del'>-        up_inode_arg-&gt;expire_time_attr = ca_data-&gt;expire_time_attr;</div><div class='del'>-</div><div class='del'>-        /* XXX: Update stat as well in case of UP_*_TIMES.</div><div class='del'>-         * This will be addressed as part of INODE_UPDATE */</div><div class='del'>-        if (ca_data-&gt;flags &amp; GFAPI_INODE_UPDATE_FLAGS) {</div><div class='del'>-                glfs_iatt_to_stat (fs, &amp;ca_data-&gt;stat, &amp;up_inode_arg-&gt;buf);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ca_data-&gt;flags &amp; GFAPI_UP_PARENT_TIMES) {</div><div class='del'>-                p_object = glfs_h_find_handle (fs,</div><div class='del'>-                                               ca_data-&gt;p_stat.ia_gfid,</div><div class='del'>-                                               GFAPI_HANDLE_LENGTH);</div><div class='del'>-                if (!p_object) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='del'>-                                API_MSG_CREATE_HANDLE_FAILED,</div><div class='del'>-                                "handle creation of %s failed",</div><div class='del'>-                                 uuid_utoa (ca_data-&gt;p_stat.ia_gfid));</div><div class='del'>-                        errno = ESTALE;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                glfs_iatt_to_stat (fs, &amp;ca_data-&gt;p_stat, &amp;up_inode_arg-&gt;p_buf);</div><div class='del'>-        }</div><div class='del'>-        up_inode_arg-&gt;p_object = p_object;</div><div class='del'>-</div><div class='del'>-        /* In case of RENAME, update old parent as well */</div><div class='del'>-        if (ca_data-&gt;flags &amp; GFAPI_UP_RENAME) {</div><div class='del'>-                oldp_object = glfs_h_find_handle (fs,</div><div class='del'>-                                                  ca_data-&gt;oldp_stat.ia_gfid,</div><div class='del'>-                                                  GFAPI_HANDLE_LENGTH);</div><div class='del'>-                if (!oldp_object) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='del'>-                                API_MSG_CREATE_HANDLE_FAILED,</div><div class='del'>-                                "handle creation of %s failed",</div><div class='del'>-                                 uuid_utoa (ca_data-&gt;oldp_stat.ia_gfid));</div><div class='del'>-                        errno = ESTALE;</div><div class='del'>-                        /* By the time we receive upcall old parent_dir may</div><div class='del'>-                         * have got removed. We still need to send upcall</div><div class='del'>-                         * for the file/dir and current parent handles. */</div><div class='del'>-                        up_inode_arg-&gt;oldp_object = NULL;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                glfs_iatt_to_stat (fs, &amp;ca_data-&gt;oldp_stat,</div><div class='del'>-                                   &amp;up_inode_arg-&gt;oldp_buf);</div><div class='del'>-        }</div><div class='del'>-        up_inode_arg-&gt;oldp_object = oldp_object;</div><div class='del'>-</div><div class='del'>-        up_arg-&gt;reason = GLFS_UPCALL_INODE_INVALIDATE;</div><div class='del'>-        up_arg-&gt;event = up_inode_arg;</div><div class='del'>-        up_arg-&gt;free_event = glfs_free_upcall_inode;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_object *p_object = NULL;</div><div class='add'>+    struct glfs_object *oldp_object = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    struct gf_upcall_cache_invalidation *ca_data = NULL;</div><div class='add'>+    struct glfs_upcall_inode *up_inode_arg = NULL;</div><div class='add'>+</div><div class='add'>+    ca_data = upcall_data-&gt;data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_h_poll_cache_invalidation", ca_data, out);</div><div class='add'>+</div><div class='add'>+    object = glfs_h_find_handle(fs, upcall_data-&gt;gfid, GFAPI_HANDLE_LENGTH);</div><div class='add'>+    if (!object) {</div><div class='add'>+        /* The reason handle creation will fail is because we</div><div class='add'>+         * couldn't find the inode in the gfapi inode table.</div><div class='add'>+         *</div><div class='add'>+         * But since application would have taken inode_ref, the</div><div class='add'>+         * only case when this can happen is when it has closed</div><div class='add'>+         * the handle and hence will no more be interested in</div><div class='add'>+         * the upcall for this particular gfid.</div><div class='add'>+         */</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_DEBUG, errno, API_MSG_CREATE_HANDLE_FAILED,</div><div class='add'>+               "handle creation of %s failed", uuid_utoa(upcall_data-&gt;gfid));</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    up_inode_arg = GF_CALLOC(1, sizeof(struct glfs_upcall_inode),</div><div class='add'>+                             glfs_mt_upcall_inode_t);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_h_poll_cache_invalidation", up_inode_arg, out);</div><div class='add'>+</div><div class='add'>+    up_inode_arg-&gt;object = object;</div><div class='add'>+    up_inode_arg-&gt;flags = ca_data-&gt;flags;</div><div class='add'>+    up_inode_arg-&gt;expire_time_attr = ca_data-&gt;expire_time_attr;</div><div class='add'>+</div><div class='add'>+    /* XXX: Update stat as well in case of UP_*_TIMES.</div><div class='add'>+     * This will be addressed as part of INODE_UPDATE */</div><div class='add'>+    if (ca_data-&gt;flags &amp; GFAPI_INODE_UPDATE_FLAGS) {</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;ca_data-&gt;stat, &amp;up_inode_arg-&gt;buf);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ca_data-&gt;flags &amp; GFAPI_UP_PARENT_TIMES) {</div><div class='add'>+        p_object = glfs_h_find_handle(fs, ca_data-&gt;p_stat.ia_gfid,</div><div class='add'>+                                      GFAPI_HANDLE_LENGTH);</div><div class='add'>+        if (!p_object) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='add'>+                   API_MSG_CREATE_HANDLE_FAILED, "handle creation of %s failed",</div><div class='add'>+                   uuid_utoa(ca_data-&gt;p_stat.ia_gfid));</div><div class='add'>+            errno = ESTALE;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;ca_data-&gt;p_stat, &amp;up_inode_arg-&gt;p_buf);</div><div class='add'>+    }</div><div class='add'>+    up_inode_arg-&gt;p_object = p_object;</div><div class='add'>+</div><div class='add'>+    /* In case of RENAME, update old parent as well */</div><div class='add'>+    if (ca_data-&gt;flags &amp; GFAPI_UP_RENAME) {</div><div class='add'>+        oldp_object = glfs_h_find_handle(fs, ca_data-&gt;oldp_stat.ia_gfid,</div><div class='add'>+                                         GFAPI_HANDLE_LENGTH);</div><div class='add'>+        if (!oldp_object) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_DEBUG, errno,</div><div class='add'>+                   API_MSG_CREATE_HANDLE_FAILED, "handle creation of %s failed",</div><div class='add'>+                   uuid_utoa(ca_data-&gt;oldp_stat.ia_gfid));</div><div class='add'>+            errno = ESTALE;</div><div class='add'>+            /* By the time we receive upcall old parent_dir may</div><div class='add'>+             * have got removed. We still need to send upcall</div><div class='add'>+             * for the file/dir and current parent handles. */</div><div class='add'>+            up_inode_arg-&gt;oldp_object = NULL;</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        glfs_iatt_to_stat(fs, &amp;ca_data-&gt;oldp_stat, &amp;up_inode_arg-&gt;oldp_buf);</div><div class='add'>+    }</div><div class='add'>+    up_inode_arg-&gt;oldp_object = oldp_object;</div><div class='add'>+</div><div class='add'>+    up_arg-&gt;reason = GLFS_UPCALL_INODE_INVALIDATE;</div><div class='add'>+    up_arg-&gt;event = up_inode_arg;</div><div class='add'>+    up_arg-&gt;free_event = glfs_free_upcall_inode;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* Close p_object and oldp_object as well if being referenced.*/</div><div class='del'>-                if (object)</div><div class='del'>-                        glfs_h_close (object);</div><div class='del'>-</div><div class='del'>-                /* Set reason to prevent applications from using -&gt;event */</div><div class='del'>-                up_arg-&gt;reason = GLFS_UPCALL_EVENT_NULL;</div><div class='del'>-                GF_FREE (up_inode_arg);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* Close p_object and oldp_object as well if being referenced.*/</div><div class='add'>+        if (object)</div><div class='add'>+            glfs_h_close(object);</div><div class='add'>+</div><div class='add'>+        /* Set reason to prevent applications from using -&gt;event */</div><div class='add'>+        up_arg-&gt;reason = GLFS_UPCALL_EVENT_NULL;</div><div class='add'>+        GF_FREE(up_inode_arg);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void glfs_release_upcall (void *ptr)</div><div class='add'>+void</div><div class='add'>+glfs_release_upcall(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_upcall *to_free = ptr;</div><div class='add'>+    struct glfs_upcall *to_free = ptr;</div><div class='ctx'> </div><div class='del'>-        if (to_free-&gt;event)</div><div class='del'>-                to_free-&gt;free_event (to_free-&gt;event);</div><div class='add'>+    if (to_free-&gt;event)</div><div class='add'>+        to_free-&gt;free_event(to_free-&gt;event);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2045,123 +2066,120 @@ void glfs_release_upcall (void *ptr)</div><div class='ctx'>  * cannot be freed while in this routine.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_poll_upcall (struct glfs *fs, struct glfs_upcall **up_arg)</div><div class='add'>+pub_glfs_h_poll_upcall(struct glfs *fs, struct glfs_upcall **up_arg)</div><div class='ctx'> {</div><div class='del'>-        upcall_entry       *u_list         = NULL;</div><div class='del'>-        upcall_entry       *tmp            = NULL;</div><div class='del'>-        xlator_t           *subvol         = NULL;</div><div class='del'>-        glusterfs_ctx_t    *ctx            = NULL;</div><div class='del'>-        int                 ret            = -1;</div><div class='del'>-        struct gf_upcall   *upcall_data    = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        if (!up_arg) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, err);</div><div class='del'>-</div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto restore;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Ideally applications should stop polling before calling</div><div class='del'>-         * 'glfs_fini'. Yet cross check if cleanup has started. */</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='add'>+    upcall_entry *u_list = NULL;</div><div class='add'>+    upcall_entry *tmp = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct gf_upcall *upcall_data = NULL;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    if (!up_arg) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, err);</div><div class='add'>+</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto restore;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Ideally applications should stop polling before calling</div><div class='add'>+     * 'glfs_fini'. Yet cross check if cleanup has started. */</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        ctx = fs-&gt;ctx;</div><div class='add'>+</div><div class='add'>+        if (ctx-&gt;cleanup_started) {</div><div class='add'>+            pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        fs-&gt;pin_refcnt++;</div><div class='add'>+</div><div class='add'>+        /* once we call this function, the applications seems to be</div><div class='add'>+         * interested in events, enable caching them */</div><div class='add'>+        fs-&gt;cache_upcalls = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;upcall_list_mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(u_list, tmp, &amp;fs-&gt;upcall_list, upcall_list)</div><div class='ctx'>         {</div><div class='del'>-                ctx = fs-&gt;ctx;</div><div class='del'>-</div><div class='del'>-                if (ctx-&gt;cleanup_started) {</div><div class='del'>-                        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-                        goto out;</div><div class='add'>+            list_del_init(&amp;u_list-&gt;upcall_list);</div><div class='add'>+            upcall_data = &amp;u_list-&gt;upcall_data;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    /* No other thread can delete this entry. So unlock it */</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;upcall_list_mutex);</div><div class='add'>+</div><div class='add'>+    if (upcall_data) {</div><div class='add'>+        switch (upcall_data-&gt;event_type) {</div><div class='add'>+            case GF_UPCALL_CACHE_INVALIDATION:</div><div class='add'>+                *up_arg = GLFS_CALLOC(1, sizeof(struct gf_upcall),</div><div class='add'>+                                      glfs_release_upcall,</div><div class='add'>+                                      glfs_mt_upcall_entry_t);</div><div class='add'>+                if (!*up_arg) {</div><div class='add'>+                    errno = ENOMEM;</div><div class='add'>+                    break; /* goto free u_list */</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                fs-&gt;pin_refcnt++;</div><div class='del'>-</div><div class='del'>-                /* once we call this function, the applications seems to be</div><div class='del'>-                 * interested in events, enable caching them */</div><div class='del'>-                fs-&gt;cache_upcalls = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+                /* XXX: Need to revisit this to support</div><div class='add'>+                 * GLFS_UPCALL_INODE_UPDATE if required. */</div><div class='add'>+                ret = glfs_h_poll_cache_invalidation(fs, *up_arg, upcall_data);</div><div class='add'>+                if (ret || (*up_arg)-&gt;reason == GLFS_UPCALL_EVENT_NULL) {</div><div class='add'>+                    /* It could so happen that the file which got</div><div class='add'>+                     * upcall notification may have got deleted by</div><div class='add'>+                     * the same client. Irrespective of the error,</div><div class='add'>+                     * return with an error or success+ENOENT. */</div><div class='add'>+                    if ((*up_arg)-&gt;reason == GLFS_UPCALL_EVENT_NULL)</div><div class='add'>+                        errno = ENOENT;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;upcall_list_mutex);</div><div class='del'>-        {</div><div class='del'>-                list_for_each_entry_safe (u_list, tmp,</div><div class='del'>-                                          &amp;fs-&gt;upcall_list,</div><div class='del'>-                                          upcall_list) {</div><div class='del'>-                        list_del_init (&amp;u_list-&gt;upcall_list);</div><div class='del'>-                        upcall_data = &amp;u_list-&gt;upcall_data;</div><div class='del'>-                        break;</div><div class='add'>+                    GLFS_FREE(*up_arg);</div><div class='add'>+                    *up_arg = NULL;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='del'>-        /* No other thread can delete this entry. So unlock it */</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;upcall_list_mutex);</div><div class='del'>-</div><div class='del'>-        if (upcall_data) {</div><div class='del'>-                switch (upcall_data-&gt;event_type) {</div><div class='del'>-                case GF_UPCALL_CACHE_INVALIDATION:</div><div class='del'>-                        *up_arg = GLFS_CALLOC (1, sizeof (struct gf_upcall),</div><div class='del'>-                                               glfs_release_upcall,</div><div class='del'>-                                               glfs_mt_upcall_entry_t);</div><div class='del'>-                        if (!*up_arg) {</div><div class='del'>-                                errno = ENOMEM;</div><div class='del'>-                                break; /* goto free u_list */</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* XXX: Need to revisit this to support</div><div class='del'>-                         * GLFS_UPCALL_INODE_UPDATE if required. */</div><div class='del'>-                        ret = glfs_h_poll_cache_invalidation (fs, *up_arg,</div><div class='del'>-                                                              upcall_data);</div><div class='del'>-                        if (ret</div><div class='del'>-                            || (*up_arg)-&gt;reason == GLFS_UPCALL_EVENT_NULL) {</div><div class='del'>-                                /* It could so happen that the file which got</div><div class='del'>-                                 * upcall notification may have got deleted by</div><div class='del'>-                                 * the same client. Irrespective of the error,</div><div class='del'>-                                 * return with an error or success+ENOENT. */</div><div class='del'>-                                if ((*up_arg)-&gt;reason == GLFS_UPCALL_EVENT_NULL)</div><div class='del'>-                                        errno = ENOENT;</div><div class='del'>-</div><div class='del'>-                                GLFS_FREE (*up_arg);</div><div class='del'>-                                *up_arg = NULL;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                case GF_UPCALL_RECALL_LEASE:</div><div class='del'>-                        gf_log ("glfs_h_poll_upcall", GF_LOG_DEBUG,</div><div class='del'>-                                "UPCALL_RECALL_LEASE is not implemented yet");</div><div class='del'>-                /* fallthrough till we support leases */</div><div class='del'>-                case GF_UPCALL_EVENT_NULL:</div><div class='add'>+                break;</div><div class='add'>+            case GF_UPCALL_RECALL_LEASE:</div><div class='add'>+                gf_log("glfs_h_poll_upcall", GF_LOG_DEBUG,</div><div class='add'>+                       "UPCALL_RECALL_LEASE is not implemented yet");</div><div class='add'>+            /* fallthrough till we support leases */</div><div class='add'>+            case GF_UPCALL_EVENT_NULL:</div><div class='ctx'>                 /* no 'default:' label, to force handling all upcall events */</div><div class='del'>-                        errno = ENOENT;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_FREE (u_list-&gt;upcall_data.data);</div><div class='del'>-                GF_FREE (u_list);</div><div class='del'>-        } else {</div><div class='del'>-                /* fs-&gt;upcall_list was empty, no upcall events cached */</div><div class='ctx'>                 errno = ENOENT;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        GF_FREE(u_list-&gt;upcall_data.data);</div><div class='add'>+        GF_FREE(u_list);</div><div class='add'>+    } else {</div><div class='add'>+        /* fs-&gt;upcall_list was empty, no upcall events cached */</div><div class='add'>+        errno = ENOENT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                fs-&gt;pin_refcnt--;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        fs-&gt;pin_refcnt--;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='ctx'> restore:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_poll_upcall, 3.7.16);</div><div class='hunk'>@@ -2180,72 +2198,70 @@ static gf_boolean_t log_upcall370 = _gf_true; /* log once */</div><div class='ctx'>  * WARNING: this function will be removed in the future.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_poll_upcall370 (struct glfs *fs, struct glfs_callback_arg *up_arg)</div><div class='add'>+pub_glfs_h_poll_upcall370(struct glfs *fs, struct glfs_callback_arg *up_arg)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_upcall    *upcall        = NULL;</div><div class='del'>-        int                    ret           = -1;</div><div class='del'>-</div><div class='del'>-        if (log_upcall370) {</div><div class='del'>-                log_upcall370 = _gf_false;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING, "this application is "</div><div class='del'>-                        "compiled against an old version of libgfapi, it "</div><div class='del'>-                        "should use glfs_free() to release the structure "</div><div class='del'>-                        "returned by glfs_h_poll_upcall() - for more details, "</div><div class='del'>-                        "see http://review.gluster.org/14701");</div><div class='del'>-        }</div><div class='add'>+    struct glfs_upcall *upcall = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (log_upcall370) {</div><div class='add'>+        log_upcall370 = _gf_false;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "this application is "</div><div class='add'>+               "compiled against an old version of libgfapi, it "</div><div class='add'>+               "should use glfs_free() to release the structure "</div><div class='add'>+               "returned by glfs_h_poll_upcall() - for more details, "</div><div class='add'>+               "see http://review.gluster.org/14701");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pub_glfs_h_poll_upcall(fs, &amp;upcall);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        up_arg-&gt;fs = fs;</div><div class='add'>+        if (errno == ENOENT || upcall-&gt;event == NULL) {</div><div class='add'>+            up_arg-&gt;reason = GLFS_UPCALL_EVENT_NULL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        up_arg-&gt;reason = upcall-&gt;reason;</div><div class='add'>+</div><div class='add'>+        if (upcall-&gt;reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='add'>+            struct glfs_callback_inode_arg *cb_inode = NULL;</div><div class='add'>+            struct glfs_upcall_inode *up_inode = NULL;</div><div class='add'>+</div><div class='add'>+            cb_inode = GF_CALLOC(1, sizeof(struct glfs_callback_inode_arg),</div><div class='add'>+                                 glfs_mt_upcall_inode_t);</div><div class='add'>+            if (!cb_inode) {</div><div class='add'>+                errno = ENOMEM;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = pub_glfs_h_poll_upcall (fs, &amp;upcall);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                up_arg-&gt;fs = fs;</div><div class='del'>-                if (errno == ENOENT || upcall-&gt;event == NULL) {</div><div class='del'>-                        up_arg-&gt;reason = GLFS_UPCALL_EVENT_NULL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            up_inode = upcall-&gt;event;</div><div class='ctx'> </div><div class='del'>-                up_arg-&gt;reason = upcall-&gt;reason;</div><div class='del'>-</div><div class='del'>-                if (upcall-&gt;reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='del'>-                        struct glfs_callback_inode_arg *cb_inode = NULL;</div><div class='del'>-                        struct glfs_upcall_inode       *up_inode = NULL;</div><div class='del'>-</div><div class='del'>-                        cb_inode = GF_CALLOC (1,</div><div class='del'>-                                              sizeof (struct glfs_callback_inode_arg),</div><div class='del'>-                                              glfs_mt_upcall_inode_t);</div><div class='del'>-                        if (!cb_inode) {</div><div class='del'>-                                errno = ENOMEM;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        up_inode = upcall-&gt;event;</div><div class='del'>-</div><div class='del'>-                        /* copy attributes one by one, the memory layout might</div><div class='del'>-                         * be different between the old glfs_callback_inode_arg</div><div class='del'>-                         * and new glfs_upcall_inode */</div><div class='del'>-                        cb_inode-&gt;object = up_inode-&gt;object;</div><div class='del'>-                        cb_inode-&gt;flags = up_inode-&gt;flags;</div><div class='del'>-                        memcpy (&amp;cb_inode-&gt;buf, &amp;up_inode-&gt;buf,</div><div class='del'>-                                sizeof (struct stat));</div><div class='del'>-                        cb_inode-&gt;expire_time_attr = up_inode-&gt;expire_time_attr;</div><div class='del'>-                        cb_inode-&gt;p_object = up_inode-&gt;p_object;</div><div class='del'>-                        memcpy (&amp;cb_inode-&gt;p_buf, &amp;up_inode-&gt;p_buf,</div><div class='del'>-                                sizeof (struct stat));</div><div class='del'>-                        cb_inode-&gt;oldp_object = up_inode-&gt;oldp_object;</div><div class='del'>-                        memcpy (&amp;cb_inode-&gt;oldp_buf, &amp;up_inode-&gt;oldp_buf,</div><div class='del'>-                                sizeof (struct stat));</div><div class='del'>-</div><div class='del'>-                        up_arg-&gt;event_arg = cb_inode;</div><div class='del'>-                }</div><div class='add'>+            /* copy attributes one by one, the memory layout might</div><div class='add'>+             * be different between the old glfs_callback_inode_arg</div><div class='add'>+             * and new glfs_upcall_inode */</div><div class='add'>+            cb_inode-&gt;object = up_inode-&gt;object;</div><div class='add'>+            cb_inode-&gt;flags = up_inode-&gt;flags;</div><div class='add'>+            memcpy(&amp;cb_inode-&gt;buf, &amp;up_inode-&gt;buf, sizeof(struct stat));</div><div class='add'>+            cb_inode-&gt;expire_time_attr = up_inode-&gt;expire_time_attr;</div><div class='add'>+            cb_inode-&gt;p_object = up_inode-&gt;p_object;</div><div class='add'>+            memcpy(&amp;cb_inode-&gt;p_buf, &amp;up_inode-&gt;p_buf, sizeof(struct stat));</div><div class='add'>+            cb_inode-&gt;oldp_object = up_inode-&gt;oldp_object;</div><div class='add'>+            memcpy(&amp;cb_inode-&gt;oldp_buf, &amp;up_inode-&gt;oldp_buf,</div><div class='add'>+                   sizeof(struct stat));</div><div class='add'>+</div><div class='add'>+            up_arg-&gt;event_arg = cb_inode;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (upcall) {</div><div class='del'>-                /* we can not use glfs_free() here, objects need to stay */</div><div class='del'>-                GF_FREE (upcall-&gt;event);</div><div class='del'>-                GF_FREE (upcall);</div><div class='del'>-        }</div><div class='add'>+    if (upcall) {</div><div class='add'>+        /* we can not use glfs_free() here, objects need to stay */</div><div class='add'>+        GF_FREE(upcall-&gt;event);</div><div class='add'>+        GF_FREE(upcall);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC(glfs_h_poll_upcall370, glfs_h_poll_upcall, 3.7.0);</div><div class='hunk'>@@ -2255,123 +2271,121 @@ GFAPI_SYMVER_PUBLIC(glfs_h_poll_upcall370, glfs_h_poll_upcall, 3.7.0);</div><div class='ctx'> #include &lt;acl/libacl.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_acl_set (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                    const acl_type_t type, const acl_t acl)</div><div class='add'>+pub_glfs_h_acl_set(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                   const acl_type_t type, const acl_t acl)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *acl_s = NULL;</div><div class='del'>-        const char *acl_key = NULL;</div><div class='del'>-        struct glfs_object *new_object = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *acl_s = NULL;</div><div class='add'>+    const char *acl_key = NULL;</div><div class='add'>+    struct glfs_object *new_object = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='ctx'> </div><div class='del'>-        if (!object || !acl) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (!object || !acl) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        acl_key = gf_posix_acl_get_key (type);</div><div class='del'>-        if (!acl_key)</div><div class='del'>-                goto out;</div><div class='add'>+    acl_key = gf_posix_acl_get_key(type);</div><div class='add'>+    if (!acl_key)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        acl_s = acl_to_any_text (acl, NULL, ',',</div><div class='del'>-                                 TEXT_ABBREVIATE | TEXT_NUMERIC_IDS);</div><div class='del'>-        if (!acl_s)</div><div class='del'>-                goto out;</div><div class='add'>+    acl_s = acl_to_any_text(acl, NULL, ',', TEXT_ABBREVIATE | TEXT_NUMERIC_IDS);</div><div class='add'>+    if (!acl_s)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (IA_ISLNK (object-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                new_object = glfs_h_resolve_symlink (fs, object);</div><div class='del'>-                if (new_object == NULL)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else</div><div class='del'>-                new_object = object;</div><div class='add'>+    if (IA_ISLNK(object-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        new_object = glfs_h_resolve_symlink(fs, object);</div><div class='add'>+        if (new_object == NULL)</div><div class='add'>+            goto out;</div><div class='add'>+    } else</div><div class='add'>+        new_object = object;</div><div class='ctx'> </div><div class='del'>-        ret = pub_glfs_h_setxattrs (fs, new_object, acl_key, acl_s,</div><div class='del'>-                                    strlen (acl_s) + 1, 0);</div><div class='add'>+    ret = pub_glfs_h_setxattrs(fs, new_object, acl_key, acl_s,</div><div class='add'>+                               strlen(acl_s) + 1, 0);</div><div class='ctx'> </div><div class='del'>-        acl_free (acl_s);</div><div class='add'>+    acl_free(acl_s);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (IA_ISLNK (object-&gt;inode-&gt;ia_type) &amp;&amp; new_object)</div><div class='del'>-                glfs_h_close (new_object);</div><div class='add'>+    if (IA_ISLNK(object-&gt;inode-&gt;ia_type) &amp;&amp; new_object)</div><div class='add'>+        glfs_h_close(new_object);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> acl_t</div><div class='del'>-pub_glfs_h_acl_get (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                    const acl_type_t type)</div><div class='add'>+pub_glfs_h_acl_get(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                   const acl_type_t type)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-        acl_t acl = NULL;</div><div class='del'>-        char *acl_s = NULL;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-        const char *acl_key = NULL;</div><div class='del'>-        struct glfs_object *new_object = NULL;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        if (!object) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    acl_t acl = NULL;</div><div class='add'>+    char *acl_s = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    const char *acl_key = NULL;</div><div class='add'>+    struct glfs_object *new_object = NULL;</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='ctx'> </div><div class='del'>-        acl_key = gf_posix_acl_get_key (type);</div><div class='del'>-        if (!acl_key)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!object) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (IA_ISLNK (object-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                new_object = glfs_h_resolve_symlink (fs, object);</div><div class='del'>-                if (new_object == NULL)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else</div><div class='del'>-                new_object = object;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_h_getxattrs_common (fs, new_object, &amp;xattr, acl_key,</div><div class='del'>-                                       _gf_false);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    acl_key = gf_posix_acl_get_key(type);</div><div class='add'>+    if (!acl_key)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xattr, (char *)acl_key, &amp;acl_s);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (IA_ISLNK(object-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        new_object = glfs_h_resolve_symlink(fs, object);</div><div class='add'>+        if (new_object == NULL)</div><div class='add'>+            goto out;</div><div class='add'>+    } else</div><div class='add'>+        new_object = object;</div><div class='ctx'> </div><div class='del'>-        acl = acl_from_text (acl_s);</div><div class='add'>+    ret = glfs_h_getxattrs_common(fs, new_object, &amp;xattr, acl_key, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(xattr, (char *)acl_key, &amp;acl_s);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    acl = acl_from_text(acl_s);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref(xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        if (IA_ISLNK (object-&gt;inode-&gt;ia_type) &amp;&amp; new_object)</div><div class='del'>-                glfs_h_close (new_object);</div><div class='add'>+    if (IA_ISLNK(object-&gt;inode-&gt;ia_type) &amp;&amp; new_object)</div><div class='add'>+        glfs_h_close(new_object);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return acl;</div><div class='add'>+    return acl;</div><div class='ctx'> }</div><div class='ctx'> #else /* !HAVE_ACL_LIBACL_H */</div><div class='ctx'> acl_t</div><div class='del'>-pub_glfs_h_acl_get (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                    const acl_type_t type)</div><div class='add'>+pub_glfs_h_acl_get(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                   const acl_type_t type)</div><div class='ctx'> {</div><div class='del'>-        errno = ENOTSUP;</div><div class='del'>-        return NULL;</div><div class='add'>+    errno = ENOTSUP;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_acl_set (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                    const acl_type_t type, const acl_t acl)</div><div class='add'>+pub_glfs_h_acl_set(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                   const acl_type_t type, const acl_t acl)</div><div class='ctx'> {</div><div class='del'>-        errno = ENOTSUP;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ENOTSUP;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_acl_set, 3.7.0);</div><div class='hunk'>@@ -2379,153 +2393,158 @@ GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_acl_get, 3.7.0);</div><div class='ctx'> </div><div class='ctx'> /* The API to perform read using anonymous fd */</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_h_anonymous_read (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                           const void *buf, size_t count, off_t offset)</div><div class='add'>+pub_glfs_h_anonymous_read(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                          const void *buf, size_t count, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        struct iovec    iov     = {0, };</div><div class='del'>-        ssize_t         ret     = 0;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = (void *) buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_anonymous_preadv (fs, object, &amp;iov, 1, offset, 0);</div><div class='add'>+    ret = glfs_anonymous_preadv(fs, object, &amp;iov, 1, offset, 0);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_anonymous_read, 3.7.0);</div><div class='ctx'> </div><div class='ctx'> /* The API to perform write using anonymous fd */</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_h_anonymous_write (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                            const void *buf, size_t count, off_t offset)</div><div class='add'>+pub_glfs_h_anonymous_write(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                           const void *buf, size_t count, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        struct iovec iov        = {0, };</div><div class='del'>-        ssize_t      ret        = 0;</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret = 0;</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = (void *) buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = (void *)buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_anonymous_pwritev (fs, object, &amp;iov, 1, offset, 0);</div><div class='add'>+    ret = glfs_anonymous_pwritev(fs, object, &amp;iov, 1, offset, 0);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_anonymous_write, 3.7.0);</div><div class='ctx'> </div><div class='del'>-struct glfs_object*</div><div class='del'>-pub_glfs_object_copy (struct glfs_object *src)</div><div class='add'>+struct glfs_object *</div><div class='add'>+pub_glfs_object_copy(struct glfs_object *src)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_dup_object", src, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_dup_object", src, out);</div><div class='ctx'> </div><div class='del'>-        object = GF_CALLOC (1, sizeof(struct glfs_object),</div><div class='del'>-                            glfs_mt_glfs_object_t);</div><div class='del'>-        if (object == NULL) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                         API_MSG_CREATE_HANDLE_FAILED,</div><div class='del'>-                        "glfs_dup_object for gfid-%s failed",</div><div class='del'>-                        uuid_utoa (src-&gt;inode-&gt;gfid));</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    object = GF_CALLOC(1, sizeof(struct glfs_object), glfs_mt_glfs_object_t);</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, API_MSG_CREATE_HANDLE_FAILED,</div><div class='add'>+               "glfs_dup_object for gfid-%s failed",</div><div class='add'>+               uuid_utoa(src-&gt;inode-&gt;gfid));</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        object-&gt;inode = inode_ref (src-&gt;inode);</div><div class='del'>-        gf_uuid_copy (object-&gt;gfid, src-&gt;inode-&gt;gfid);</div><div class='add'>+    object-&gt;inode = inode_ref(src-&gt;inode);</div><div class='add'>+    gf_uuid_copy(object-&gt;gfid, src-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_object_copy, 3.11.0);</div><div class='ctx'> </div><div class='del'>-struct glfs_object*</div><div class='del'>-pub_glfs_xreaddirplus_get_object (struct glfs_xreaddirp_stat *xstat)</div><div class='add'>+struct glfs_object *</div><div class='add'>+pub_glfs_xreaddirplus_get_object(struct glfs_xreaddirp_stat *xstat)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("glfs_xreaddirplus_get_object", xstat, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("glfs_xreaddirplus_get_object", xstat, out);</div><div class='ctx'> </div><div class='del'>-        if (!(xstat-&gt;flags_handled &amp; GFAPI_XREADDIRP_HANDLE))</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_INVALID_ARG,</div><div class='del'>-                        "GFAPI_XREADDIRP_HANDLE is not set. Flags"</div><div class='del'>-                        "handled for xstat(%p) are (%x)",</div><div class='del'>-                        xstat, xstat-&gt;flags_handled);</div><div class='add'>+    if (!(xstat-&gt;flags_handled &amp; GFAPI_XREADDIRP_HANDLE))</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='add'>+               "GFAPI_XREADDIRP_HANDLE is not set. Flags"</div><div class='add'>+               "handled for xstat(%p) are (%x)",</div><div class='add'>+               xstat, xstat-&gt;flags_handled);</div><div class='ctx'> </div><div class='del'>-        return xstat-&gt;object;</div><div class='add'>+    return xstat-&gt;object;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_xreaddirplus_get_object, 3.11.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_h_lease (struct glfs *fs, struct glfs_object *object,</div><div class='del'>-                  struct glfs_lease *lease)</div><div class='add'>+pub_glfs_h_lease(struct glfs *fs, struct glfs_object *object,</div><div class='add'>+                 struct glfs_lease *lease)</div><div class='ctx'> {</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        loc_t            loc = {0, };</div><div class='del'>-        struct gf_lease  gf_lease = {0, };</div><div class='del'>-</div><div class='del'>-        /* validate in args */</div><div class='del'>-        if ((fs == NULL) || (object == NULL)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_lease gf_lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* validate in args */</div><div class='add'>+    if ((fs == NULL) || (object == NULL)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* get the active volume */</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get the active volume */</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='del'>-        inode = glfs_resolve_inode (fs, subvol, object);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = ESTALE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* get/refresh the in arg objects inode in correlation to the xlator */</div><div class='add'>+    inode = glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = ESTALE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* populate loc */</div><div class='del'>-        GLFS_LOC_FILL_INODE (inode, loc, out);</div><div class='add'>+    /* populate loc */</div><div class='add'>+    GLFS_LOC_FILL_INODE(inode, loc, out);</div><div class='ctx'> </div><div class='del'>-        glfs_lease_to_gf_lease (lease, &amp;gf_lease);</div><div class='add'>+    glfs_lease_to_gf_lease(lease, &amp;gf_lease);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lease (subvol, &amp;loc, &amp;gf_lease, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_lease(subvol, &amp;loc, &amp;gf_lease, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-        gf_lease_to_glfs_lease (&amp;gf_lease, lease);</div><div class='add'>+    gf_lease_to_glfs_lease(&amp;gf_lease, lease);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_lease, 4.0.0);</div><div class='head'>diff --git a/api/src/glfs-master.c b/api/src/glfs-master.c<br/>index 9648bbbc03a..969095a8224 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/src/glfs-master.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/src/glfs-master.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/src/glfs-master.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/src/glfs-master.c</a></div><div class='hunk'>@@ -22,166 +22,153 @@</div><div class='ctx'> #include "glfs-mem-types.h"</div><div class='ctx'> #include "gfapi-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-graph_setup (struct glfs *fs, glusterfs_graph_t *graph)</div><div class='add'>+graph_setup(struct glfs *fs, glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-	xlator_t      *new_subvol = NULL;</div><div class='del'>-	xlator_t      *old_subvol = NULL;</div><div class='del'>-	inode_table_t *itable = NULL;</div><div class='del'>-	int            ret = -1;</div><div class='del'>-</div><div class='del'>-	new_subvol = graph-&gt;top;</div><div class='del'>-</div><div class='del'>-	/* This is called in a bottom-up context, it should specifically</div><div class='del'>-	   NOT be glfs_lock()</div><div class='del'>-	*/</div><div class='del'>-	pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		if (new_subvol-&gt;switched ||</div><div class='del'>-		    new_subvol == fs-&gt;active_subvol ||</div><div class='del'>-		    new_subvol == fs-&gt;next_subvol ||</div><div class='del'>-                    new_subvol == fs-&gt;mip_subvol) {</div><div class='del'>-			/* Spurious CHILD_UP event on old graph */</div><div class='del'>-			ret = 0;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!new_subvol-&gt;itable) {</div><div class='del'>-			itable = inode_table_new (131072, new_subvol);</div><div class='del'>-			if (!itable) {</div><div class='del'>-				errno = ENOMEM;</div><div class='del'>-				ret = -1;</div><div class='del'>-				goto unlock;</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-			new_subvol-&gt;itable = itable;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		old_subvol = fs-&gt;next_subvol;</div><div class='del'>-		fs-&gt;next_subvol = new_subvol;</div><div class='del'>-		fs-&gt;next_subvol-&gt;winds++; /* first ref */</div><div class='del'>-		ret = 0;</div><div class='del'>-	}</div><div class='add'>+    xlator_t *new_subvol = NULL;</div><div class='add'>+    xlator_t *old_subvol = NULL;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    new_subvol = graph-&gt;top;</div><div class='add'>+</div><div class='add'>+    /* This is called in a bottom-up context, it should specifically</div><div class='add'>+       NOT be glfs_lock()</div><div class='add'>+    */</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (new_subvol-&gt;switched || new_subvol == fs-&gt;active_subvol ||</div><div class='add'>+            new_subvol == fs-&gt;next_subvol || new_subvol == fs-&gt;mip_subvol) {</div><div class='add'>+            /* Spurious CHILD_UP event on old graph */</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!new_subvol-&gt;itable) {</div><div class='add'>+            itable = inode_table_new(131072, new_subvol);</div><div class='add'>+            if (!itable) {</div><div class='add'>+                errno = ENOMEM;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            new_subvol-&gt;itable = itable;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        old_subvol = fs-&gt;next_subvol;</div><div class='add'>+        fs-&gt;next_subvol = new_subvol;</div><div class='add'>+        fs-&gt;next_subvol-&gt;winds++; /* first ref */</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	if (old_subvol)</div><div class='del'>-		/* wasn't picked up so far, skip */</div><div class='del'>-		glfs_subvol_done (fs, old_subvol);</div><div class='add'>+    if (old_subvol)</div><div class='add'>+        /* wasn't picked up so far, skip */</div><div class='add'>+        glfs_subvol_done(fs, old_subvol);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-	glusterfs_graph_t   *graph = NULL;</div><div class='del'>-	struct glfs	    *fs = NULL;</div><div class='del'>-</div><div class='del'>-	graph = data;</div><div class='del'>-	fs = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	switch (event) {</div><div class='del'>-	case GF_EVENT_GRAPH_NEW:</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_INFO, 0, API_MSG_NEW_GRAPH,</div><div class='del'>-                        "New graph %s (%d) coming up",</div><div class='del'>-			uuid_utoa ((unsigned char *)graph-&gt;graph_uuid),</div><div class='del'>-			graph-&gt;id);</div><div class='del'>-		break;</div><div class='del'>-	case GF_EVENT_CHILD_UP:</div><div class='del'>-                pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        graph-&gt;used = 1;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-		graph_setup (fs, graph);</div><div class='del'>-		glfs_init_done (fs, 0);</div><div class='del'>-		break;</div><div class='del'>-	case GF_EVENT_CHILD_DOWN:</div><div class='del'>-                pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        graph-&gt;used = 0;</div><div class='del'>-                        pthread_cond_broadcast (&amp;fs-&gt;child_down_cond);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-		glfs_init_done (fs, 1);</div><div class='del'>-		break;</div><div class='del'>-	case GF_EVENT_CHILD_CONNECTING:</div><div class='del'>-		break;</div><div class='add'>+    glusterfs_graph_t *graph = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+</div><div class='add'>+    graph = data;</div><div class='add'>+    fs = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    switch (event) {</div><div class='add'>+        case GF_EVENT_GRAPH_NEW:</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, API_MSG_NEW_GRAPH,</div><div class='add'>+                   "New graph %s (%d) coming up",</div><div class='add'>+                   uuid_utoa((unsigned char *)graph-&gt;graph_uuid), graph-&gt;id);</div><div class='add'>+            break;</div><div class='add'>+        case GF_EVENT_CHILD_UP:</div><div class='add'>+            pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                graph-&gt;used = 1;</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+            graph_setup(fs, graph);</div><div class='add'>+            glfs_init_done(fs, 0);</div><div class='add'>+            break;</div><div class='add'>+        case GF_EVENT_CHILD_DOWN:</div><div class='add'>+            pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                graph-&gt;used = 0;</div><div class='add'>+                pthread_cond_broadcast(&amp;fs-&gt;child_down_cond);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+            glfs_init_done(fs, 1);</div><div class='add'>+            break;</div><div class='add'>+        case GF_EVENT_CHILD_CONNECTING:</div><div class='add'>+            break;</div><div class='ctx'>         case GF_EVENT_UPCALL:</div><div class='del'>-                glfs_process_upcall_event (fs, data);</div><div class='del'>-                break;</div><div class='del'>-	default:</div><div class='del'>-		gf_msg_debug (this-&gt;name, 0, "got notify event %d", event);</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+            glfs_process_upcall_event(fs, data);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "got notify event %d", event);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	if (!this)</div><div class='del'>-		return ret;</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	ret = xlator_mem_acct_init (this, glfs_mt_end + 1);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        API_MSG_MEM_ACCT_INIT_FAILED, "Failed to initialise "</div><div class='del'>-                        "memory accounting");</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='add'>+    ret = xlator_mem_acct_init(this, glfs_mt_end + 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_MEM_ACCT_INIT_FAILED,</div><div class='add'>+               "Failed to initialise "</div><div class='add'>+               "memory accounting");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* place-holder fops */</div><div class='ctx'> int</div><div class='del'>-glfs_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+glfs_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_release (xlator_t *this, fd_t *fd)</div><div class='add'>+glfs_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+glfs_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_fops fops;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-	.forget	    = glfs_forget,</div><div class='del'>-	.release    = glfs_release,</div><div class='del'>-	.releasedir = glfs_releasedir</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.forget = glfs_forget,</div><div class='add'>+                           .release = glfs_release,</div><div class='add'>+                           .releasedir = glfs_releasedir};</div><div class='head'>diff --git a/api/src/glfs-mgmt.c b/api/src/glfs-mgmt.c<br/>index fac903b805a..87b62173689 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/src/glfs-mgmt.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/src/glfs-mgmt.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/src/glfs-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/src/glfs-mgmt.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='ctx'> #include &lt;sys/wait.h&gt;</div><div class='hunk'>@@ -38,1063 +37,1034 @@</div><div class='ctx'> #include "gfapi-messages.h"</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> </div><div class='del'>-int glfs_volfile_fetch (struct glfs *fs);</div><div class='del'>-int32_t glfs_get_volume_info_rpc (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                  struct glfs *fs);</div><div class='add'>+int</div><div class='add'>+glfs_volfile_fetch(struct glfs *fs);</div><div class='add'>+int32_t</div><div class='add'>+glfs_get_volume_info_rpc(call_frame_t *frame, xlator_t *this, struct glfs *fs);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_process_volfp (struct glfs *fs, FILE *fp)</div><div class='add'>+glfs_process_volfp(struct glfs *fs, FILE *fp)</div><div class='ctx'> {</div><div class='del'>-	glusterfs_graph_t  *graph = NULL;</div><div class='del'>-	int		    ret = -1;</div><div class='del'>-	xlator_t	   *trav = NULL;</div><div class='del'>-	glusterfs_ctx_t	   *ctx = NULL;</div><div class='del'>-</div><div class='del'>-	ctx = fs-&gt;ctx;</div><div class='del'>-	graph = glusterfs_graph_construct (fp);</div><div class='del'>-	if (!graph) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_GRAPH_CONSTRUCT_FAILED,</div><div class='del'>-                        "failed to construct the graph");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='del'>-		if (strcmp (trav-&gt;type, "mount/api") == 0) {</div><div class='del'>-			gf_msg ("glfs", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                API_MSG_API_XLATOR_ERROR,</div><div class='del'>-				"api master xlator cannot be specified "</div><div class='del'>-				"in volume file");</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glusterfs_graph_prepare (graph, ctx, fs-&gt;volname);</div><div class='del'>-	if (ret) {</div><div class='del'>-		glusterfs_graph_destroy (graph);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glusterfs_graph_activate (graph, ctx);</div><div class='del'>-</div><div class='del'>-	if (ret) {</div><div class='del'>-		glusterfs_graph_destroy (graph);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        gf_log_dump_graph (fp, graph);</div><div class='del'>-</div><div class='del'>-	ret = 0;</div><div class='add'>+    glusterfs_graph_t *graph = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='add'>+    graph = glusterfs_graph_construct(fp);</div><div class='add'>+    if (!graph) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, errno, API_MSG_GRAPH_CONSTRUCT_FAILED,</div><div class='add'>+               "failed to construct the graph");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='add'>+        if (strcmp(trav-&gt;type, "mount/api") == 0) {</div><div class='add'>+            gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_API_XLATOR_ERROR,</div><div class='add'>+                   "api master xlator cannot be specified "</div><div class='add'>+                   "in volume file");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_graph_prepare(graph, ctx, fs-&gt;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        glusterfs_graph_destroy(graph);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_graph_activate(graph, ctx);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        glusterfs_graph_destroy(graph);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log_dump_graph(fp, graph);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	if (fp)</div><div class='del'>-		fclose (fp);</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='ctx'> </div><div class='del'>-	if (!ctx-&gt;active) {</div><div class='del'>-		ret = -1;</div><div class='del'>-	}</div><div class='add'>+    if (!ctx-&gt;active) {</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-mgmt_cbk_spec (struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='add'>+mgmt_cbk_spec(struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='ctx'> {</div><div class='del'>-	struct glfs *fs = NULL;</div><div class='del'>-	xlator_t    *this = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-	this = mydata;</div><div class='del'>-	fs = this-&gt;private;</div><div class='add'>+    this = mydata;</div><div class='add'>+    fs = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	glfs_volfile_fetch (fs);</div><div class='add'>+    glfs_volfile_fetch(fs);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-mgmt_cbk_event (struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='add'>+mgmt_cbk_event(struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-mgmt_cbk_statedump (struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='add'>+mgmt_cbk_statedump(struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct glfs      *fs          = NULL;</div><div class='del'>-        xlator_t         *this        = NULL;</div><div class='del'>-        gf_statedump      target_pid  = {0, };</div><div class='del'>-        struct iovec     *iov         = NULL;</div><div class='del'>-        int               ret         = -1;</div><div class='del'>-</div><div class='del'>-        this = mydata;</div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg ("glfs", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_STATEDUMP_FAILED, "NULL mydata");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = this-&gt;private;</div><div class='del'>-        if (!fs) {</div><div class='del'>-                gf_msg ("glfs", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_STATEDUMP_FAILED, "NULL glfs");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iov = (struct iovec *)data;</div><div class='del'>-        if (!iov) {</div><div class='del'>-                gf_msg ("glfs", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_STATEDUMP_FAILED, "NULL iovec data");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;target_pid,</div><div class='del'>-                              (xdrproc_t)xdr_gf_statedump);</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_statedump target_pid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec *iov = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    this = mydata;</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_STATEDUMP_FAILED,</div><div class='add'>+               "NULL mydata");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = this-&gt;private;</div><div class='add'>+    if (!fs) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_STATEDUMP_FAILED,</div><div class='add'>+               "NULL glfs");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iov = (struct iovec *)data;</div><div class='add'>+    if (!iov) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_STATEDUMP_FAILED,</div><div class='add'>+               "NULL iovec data");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;target_pid, (xdrproc_t)xdr_gf_statedump);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_STATEDUMP_FAILED,</div><div class='add'>+               "Failed to decode xdr response for GF_CBK_STATEDUMP");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_trace("glfs", 0, "statedump requested for pid: %d", target_pid.pid);</div><div class='add'>+</div><div class='add'>+    if ((uint64_t)getpid() == target_pid.pid) {</div><div class='add'>+        gf_msg_debug("glfs", 0, "Taking statedump for pid: %d", target_pid.pid);</div><div class='add'>+</div><div class='add'>+        ret = glfs_sysrq(fs, GLFS_SYSRQ_STATEDUMP);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("glfs", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_STATEDUMP_FAILED,</div><div class='del'>-                        "Failed to decode xdr response for GF_CBK_STATEDUMP");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_trace ("glfs", 0, "statedump requested for pid: %d",</div><div class='del'>-                      target_pid.pid);</div><div class='del'>-</div><div class='del'>-        if ((uint64_t)getpid() == target_pid.pid) {</div><div class='del'>-                gf_msg_debug ("glfs", 0, "Taking statedump for pid: %d",</div><div class='del'>-                              target_pid.pid);</div><div class='del'>-</div><div class='del'>-                ret = glfs_sysrq (fs, GLFS_SYSRQ_STATEDUMP);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glfs", GF_LOG_INFO, 0,</div><div class='del'>-                                API_MSG_STATEDUMP_FAILED,</div><div class='del'>-                                "statedump failed");</div><div class='del'>-                }</div><div class='add'>+            gf_msg("glfs", GF_LOG_INFO, 0, API_MSG_STATEDUMP_FAILED,</div><div class='add'>+                   "statedump failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcclnt_cb_actor_t mgmt_cbk_actors[GF_CBK_MAXVALUE] = {</div><div class='del'>-	[GF_CBK_FETCHSPEC] = {"FETCHSPEC", GF_CBK_FETCHSPEC, mgmt_cbk_spec },</div><div class='del'>-	[GF_CBK_EVENT_NOTIFY] = {"EVENTNOTIFY", GF_CBK_EVENT_NOTIFY,</div><div class='del'>-				 mgmt_cbk_event},</div><div class='del'>-        [GF_CBK_STATEDUMP] = {"STATEDUMP", GF_CBK_STATEDUMP, mgmt_cbk_statedump},</div><div class='add'>+    [GF_CBK_FETCHSPEC] = {"FETCHSPEC", GF_CBK_FETCHSPEC, mgmt_cbk_spec},</div><div class='add'>+    [GF_CBK_EVENT_NOTIFY] = {"EVENTNOTIFY", GF_CBK_EVENT_NOTIFY,</div><div class='add'>+                             mgmt_cbk_event},</div><div class='add'>+    [GF_CBK_STATEDUMP] = {"STATEDUMP", GF_CBK_STATEDUMP, mgmt_cbk_statedump},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct rpcclnt_cb_program mgmt_cbk_prog = {</div><div class='del'>-	.progname  = "GlusterFS Callback",</div><div class='del'>-	.prognum   = GLUSTER_CBK_PROGRAM,</div><div class='del'>-	.progver   = GLUSTER_CBK_VERSION,</div><div class='del'>-	.actors	   = mgmt_cbk_actors,</div><div class='del'>-	.numactors = GF_CBK_MAXVALUE,</div><div class='add'>+    .progname = "GlusterFS Callback",</div><div class='add'>+    .prognum = GLUSTER_CBK_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_CBK_VERSION,</div><div class='add'>+    .actors = mgmt_cbk_actors,</div><div class='add'>+    .numactors = GF_CBK_MAXVALUE,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> char *clnt_handshake_procs[GF_HNDSK_MAXVALUE] = {</div><div class='del'>-	[GF_HNDSK_NULL]		= "NULL",</div><div class='del'>-	[GF_HNDSK_SETVOLUME]	= "SETVOLUME",</div><div class='del'>-	[GF_HNDSK_GETSPEC]	= "GETSPEC",</div><div class='del'>-	[GF_HNDSK_PING]		= "PING",</div><div class='del'>-	[GF_HNDSK_EVENT_NOTIFY] = "EVENTNOTIFY",</div><div class='del'>-        [GF_HNDSK_GET_VOLUME_INFO] = "GETVOLUMEINFO",</div><div class='add'>+    [GF_HNDSK_NULL] = "NULL",</div><div class='add'>+    [GF_HNDSK_SETVOLUME] = "SETVOLUME",</div><div class='add'>+    [GF_HNDSK_GETSPEC] = "GETSPEC",</div><div class='add'>+    [GF_HNDSK_PING] = "PING",</div><div class='add'>+    [GF_HNDSK_EVENT_NOTIFY] = "EVENTNOTIFY",</div><div class='add'>+    [GF_HNDSK_GET_VOLUME_INFO] = "GETVOLUMEINFO",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> rpc_clnt_prog_t clnt_handshake_prog = {</div><div class='del'>-	.progname  = "GlusterFS Handshake",</div><div class='del'>-	.prognum   = GLUSTER_HNDSK_PROGRAM,</div><div class='del'>-	.progver   = GLUSTER_HNDSK_VERSION,</div><div class='del'>-	.procnames = clnt_handshake_procs,</div><div class='add'>+    .progname = "GlusterFS Handshake",</div><div class='add'>+    .prognum = GLUSTER_HNDSK_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_HNDSK_VERSION,</div><div class='add'>+    .procnames = clnt_handshake_procs,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-mgmt_submit_request (void *req, call_frame_t *frame,</div><div class='del'>-		     glusterfs_ctx_t *ctx,</div><div class='del'>-		     rpc_clnt_prog_t *prog, int procnum,</div><div class='del'>-		     fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='add'>+mgmt_submit_request(void *req, call_frame_t *frame, glusterfs_ctx_t *ctx,</div><div class='add'>+                    rpc_clnt_prog_t *prog, int procnum, fop_cbk_fn_t cbkfn,</div><div class='add'>+                    xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-	int			ret	    = -1;</div><div class='del'>-	int			count	   = 0;</div><div class='del'>-	struct iovec		iov	    = {0, };</div><div class='del'>-	struct iobuf		*iobuf = NULL;</div><div class='del'>-	struct iobref		*iobref = NULL;</div><div class='del'>-	ssize_t			xdr_size = 0;</div><div class='del'>-</div><div class='del'>-	iobref = iobref_new ();</div><div class='del'>-	if (!iobref) {</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (req) {</div><div class='del'>-		xdr_size = xdr_sizeof (xdrproc, req);</div><div class='del'>-</div><div class='del'>-		iobuf = iobuf_get2 (ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-		if (!iobuf) {</div><div class='del'>-			goto out;</div><div class='del'>-		};</div><div class='del'>-</div><div class='del'>-		iobref_add (iobref, iobuf);</div><div class='del'>-</div><div class='del'>-		iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-		iov.iov_len  = iobuf_pagesize (iobuf);</div><div class='del'>-</div><div class='del'>-		/* Create the xdr payload */</div><div class='del'>-		ret = xdr_serialize_generic (iov, req, xdrproc);</div><div class='del'>-		if (ret == -1) {</div><div class='del'>-			gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                API_MSG_XDR_PAYLOAD_FAILED,</div><div class='del'>-				"failed to create XDR payload");</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-		iov.iov_len = ret;</div><div class='del'>-		count = 1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Send the msg */</div><div class='del'>-	ret = rpc_clnt_submit (ctx-&gt;mgmt, prog, procnum, cbkfn,</div><div class='del'>-			       &amp;iov, count,</div><div class='del'>-			       NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+</div><div class='add'>+    iobref = iobref_new();</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req) {</div><div class='add'>+        xdr_size = xdr_sizeof(xdrproc, req);</div><div class='add'>+</div><div class='add'>+        iobuf = iobuf_get2(ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+        if (!iobuf) {</div><div class='add'>+            goto out;</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        iobref_add(iobref, iobuf);</div><div class='add'>+</div><div class='add'>+        iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+        iov.iov_len = iobuf_pagesize(iobuf);</div><div class='add'>+</div><div class='add'>+        /* Create the xdr payload */</div><div class='add'>+        ret = xdr_serialize_generic(iov, req, xdrproc);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, API_MSG_XDR_PAYLOAD_FAILED,</div><div class='add'>+                   "failed to create XDR payload");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        iov.iov_len = ret;</div><div class='add'>+        count = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Send the msg */</div><div class='add'>+    ret = rpc_clnt_submit(ctx-&gt;mgmt, prog, procnum, cbkfn, &amp;iov, count, NULL, 0,</div><div class='add'>+                          iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	if (iobref)</div><div class='del'>-		iobref_unref (iobref);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-	if (iobuf)</div><div class='del'>-		iobuf_unref (iobuf);</div><div class='del'>-	return ret;</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Callback routine for 'GF_HNDSK_GET_VOLUME_INFO' rpc request</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-mgmt_get_volinfo_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                      int count, void *myframe)</div><div class='add'>+mgmt_get_volinfo_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                     void *myframe)</div><div class='ctx'> {</div><div class='del'>-        int                        ret                  = 0;</div><div class='del'>-        char                       *volume_id_str       = NULL;</div><div class='del'>-        dict_t                     *dict                = NULL;</div><div class='del'>-        char                       key[1024]            = {0};</div><div class='del'>-        gf_get_volume_info_rsp     rsp                  = {0,};</div><div class='del'>-        call_frame_t               *frame               = NULL;</div><div class='del'>-        glusterfs_ctx_t            *ctx                 = NULL;</div><div class='del'>-        struct glfs                *fs                  = NULL;</div><div class='del'>-        struct syncargs            *args;</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-        ctx = frame-&gt;this-&gt;ctx;</div><div class='del'>-        args = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_INVALID_ENTRY, "NULL context");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = ((xlator_t *)ctx-&gt;master)-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_INVALID_ENTRY,</div><div class='del'>-                        "GET_VOLUME_INFO RPC call is not successful");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_get_volume_info_rsp);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        API_MSG_XDR_RESPONSE_DECODE_FAILED,</div><div class='del'>-                        "Failed to decode xdr response for GET_VOLUME_INFO");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (frame-&gt;this-&gt;name, 0, "Received resp to GET_VOLUME_INFO "</div><div class='del'>-                      "RPC: %d", rsp.op_ret);</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret == -1) {</div><div class='del'>-                errno = rsp.op_errno;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!rsp.dict.dict_len) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_INVALID_ENTRY, "Response received for "</div><div class='del'>-                        "GET_VOLUME_INFO RPC call is not valid");</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume_id");</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;volume_id_str);</div><div class='del'>-        if (ret) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *volume_id_str = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char key[1024] = {0};</div><div class='add'>+    gf_get_volume_info_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    struct syncargs *args;</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+    ctx = frame-&gt;this-&gt;ctx;</div><div class='add'>+    args = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "NULL context");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = ((xlator_t *)ctx-&gt;master)-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "GET_VOLUME_INFO RPC call is not successful");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_get_volume_info_rsp);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               API_MSG_XDR_RESPONSE_DECODE_FAILED,</div><div class='add'>+               "Failed to decode xdr response for GET_VOLUME_INFO");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(frame-&gt;this-&gt;name, 0,</div><div class='add'>+                 "Received resp to GET_VOLUME_INFO "</div><div class='add'>+                 "RPC: %d",</div><div class='add'>+                 rsp.op_ret);</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret == -1) {</div><div class='add'>+        errno = rsp.op_errno;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!rsp.dict.dict_len) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "Response received for "</div><div class='add'>+               "GET_VOLUME_INFO RPC call is not valid");</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume_id");</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;volume_id_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (volume_id_str) {</div><div class='del'>-                gf_msg_debug (frame-&gt;this-&gt;name, 0,</div><div class='del'>-                              "Volume Id: %s", volume_id_str);</div><div class='del'>-                pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-                gf_uuid_parse (volume_id_str, fs-&gt;vol_uuid);</div><div class='del'>-                pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-        }</div><div class='add'>+    if (volume_id_str) {</div><div class='add'>+        gf_msg_debug(frame-&gt;this-&gt;name, 0, "Volume Id: %s", volume_id_str);</div><div class='add'>+        pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+        gf_uuid_parse(volume_id_str, fs-&gt;vol_uuid);</div><div class='add'>+        pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_GET_VOLINFO_CBK_FAILED, "In GET_VOLUME_INFO "</div><div class='del'>-                        "cbk, received error: %s", strerror(errno));</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               API_MSG_GET_VOLINFO_CBK_FAILED,</div><div class='add'>+               "In GET_VOLUME_INFO "</div><div class='add'>+               "cbk, received error: %s",</div><div class='add'>+               strerror(errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (rsp.dict.dict_val)</div><div class='del'>-                free (rsp.dict.dict_val);</div><div class='add'>+    if (rsp.dict.dict_val)</div><div class='add'>+        free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_errstr)</div><div class='del'>-                free (rsp.op_errstr);</div><div class='add'>+    if (rsp.op_errstr)</div><div class='add'>+        free(rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (frame-&gt;this-&gt;name, 0, "Returning: %d", ret);</div><div class='add'>+    gf_msg_debug(frame-&gt;this-&gt;name, 0, "Returning: %d", ret);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_get_volumeid (struct glfs *fs, char *volid, size_t size)</div><div class='add'>+pub_glfs_get_volumeid(struct glfs *fs, char *volid, size_t size)</div><div class='ctx'> {</div><div class='del'>-        /* TODO: Define a global macro to store UUID size */</div><div class='del'>-        size_t uuid_size = 16;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* check if the volume uuid is initialized */</div><div class='del'>-                if (!gf_uuid_is_null (fs-&gt;vol_uuid)) {</div><div class='del'>-                        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='add'>+    /* TODO: Define a global macro to store UUID size */</div><div class='add'>+    size_t uuid_size = 16;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* check if the volume uuid is initialized */</div><div class='add'>+        if (!gf_uuid_is_null(fs-&gt;vol_uuid)) {</div><div class='add'>+            pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        /* Need to fetch volume_uuid */</div><div class='del'>-        glfs_get_volume_info (fs);</div><div class='add'>+    /* Need to fetch volume_uuid */</div><div class='add'>+    glfs_get_volume_info(fs);</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (fs-&gt;vol_uuid)) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_FETCH_VOLUUID_FAILED, "Unable to fetch "</div><div class='del'>-                        "volume UUID");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (gf_uuid_is_null(fs-&gt;vol_uuid)) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_FETCH_VOLUUID_FAILED,</div><div class='add'>+               "Unable to fetch "</div><div class='add'>+               "volume UUID");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (!volid || !size) {</div><div class='del'>-                gf_msg_debug (THIS-&gt;name, 0, "volumeid/size is null");</div><div class='del'>-                __GLFS_EXIT_FS;</div><div class='del'>-                return uuid_size;</div><div class='del'>-        }</div><div class='add'>+    if (!volid || !size) {</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, 0, "volumeid/size is null");</div><div class='add'>+        __GLFS_EXIT_FS;</div><div class='add'>+        return uuid_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (size &lt; uuid_size) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ERANGE, API_MSG_INSUFF_SIZE,</div><div class='del'>-                        "Insufficient size passed");</div><div class='del'>-                errno = ERANGE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (size &lt; uuid_size) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ERANGE, API_MSG_INSUFF_SIZE,</div><div class='add'>+               "Insufficient size passed");</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (volid, fs-&gt;vol_uuid, uuid_size);</div><div class='add'>+    memcpy(volid, fs-&gt;vol_uuid, uuid_size);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-        return uuid_size;</div><div class='add'>+    return uuid_size;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_get_volumeid, 3.5.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_get_volume_info (struct glfs *fs)</div><div class='add'>+glfs_get_volume_info(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t     *frame = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx   = NULL;</div><div class='del'>-        struct syncargs  args   = {0, };</div><div class='del'>-        int              ret    = 0;</div><div class='del'>-</div><div class='del'>-        ctx = fs-&gt;ctx;</div><div class='del'>-        frame = create_frame (THIS, ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                gf_msg ("glfs", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        API_MSG_FRAME_CREAT_FAILED,</div><div class='del'>-                        "failed to create the frame");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = &amp;args;</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='add'>+    frame = create_frame(THIS, ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, ENOMEM, API_MSG_FRAME_CREAT_FAILED,</div><div class='add'>+               "failed to create the frame");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __yawn ((&amp;args));</div><div class='add'>+    frame-&gt;local = &amp;args;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_get_volume_info_rpc (frame, THIS, fs);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    __yawn((&amp;args));</div><div class='ctx'> </div><div class='del'>-        __yield ((&amp;args));</div><div class='add'>+    ret = glfs_get_volume_info_rpc(frame, THIS, fs);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='add'>+    __yield((&amp;args));</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glfs_get_volume_info_rpc (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                          struct glfs *fs)</div><div class='add'>+glfs_get_volume_info_rpc(call_frame_t *frame, xlator_t *this, struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-        gf_get_volume_info_req  req       = {{0,}};</div><div class='del'>-        int                     ret       = 0;</div><div class='del'>-        glusterfs_ctx_t         *ctx      = NULL;</div><div class='del'>-        dict_t                  *dict     = NULL;</div><div class='del'>-        int32_t                 flags     = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this || !fs) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = fs-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fs-&gt;volname) {</div><div class='del'>-                ret = dict_set_str (dict, "volname", fs-&gt;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        // Set the flags for the fields which we are interested in</div><div class='del'>-        flags = (int32_t)GF_GET_VOLUME_UUID; //ctx-&gt;flags;</div><div class='del'>-        ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_DICT_SET_FAILED, "failed to set flags");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.dict.dict_val,</div><div class='del'>-                                           &amp;req.dict.dict_len);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = mgmt_submit_request (&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='del'>-                                   GF_HNDSK_GET_VOLUME_INFO,</div><div class='del'>-                                   mgmt_get_volinfo_cbk,</div><div class='del'>-                                   (xdrproc_t)xdr_gf_get_volume_info_req);</div><div class='add'>+    gf_get_volume_info_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t flags = 0;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !fs) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fs-&gt;volname) {</div><div class='add'>+        ret = dict_set_str(dict, "volname", fs-&gt;volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // Set the flags for the fields which we are interested in</div><div class='add'>+    flags = (int32_t)GF_GET_VOLUME_UUID;  // ctx-&gt;flags;</div><div class='add'>+    ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_DICT_SET_FAILED,</div><div class='add'>+               "failed to set flags");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.dict.dict_val,</div><div class='add'>+                                      &amp;req.dict.dict_len);</div><div class='add'>+</div><div class='add'>+    ret = mgmt_submit_request(&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='add'>+                              GF_HNDSK_GET_VOLUME_INFO, mgmt_get_volinfo_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_gf_get_volume_info_req);</div><div class='ctx'> out:</div><div class='del'>-        if (dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glusterfs_oldvolfile_update (struct glfs *fs, char *volfile, ssize_t size)</div><div class='add'>+glusterfs_oldvolfile_update(struct glfs *fs, char *volfile, ssize_t size)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-</div><div class='del'>-	fs-&gt;oldvollen = size;</div><div class='del'>-	if (!fs-&gt;oldvolfile) {</div><div class='del'>-		fs-&gt;oldvolfile = CALLOC (1, size+1);</div><div class='del'>-	} else {</div><div class='del'>-		fs-&gt;oldvolfile = REALLOC (fs-&gt;oldvolfile, size+1);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!fs-&gt;oldvolfile) {</div><div class='del'>-		fs-&gt;oldvollen = 0;</div><div class='del'>-	} else {</div><div class='del'>-		memcpy (fs-&gt;oldvolfile, volfile, size);</div><div class='del'>-		fs-&gt;oldvollen = size;</div><div class='del'>-		ret = 0;</div><div class='del'>-	}</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    fs-&gt;oldvollen = size;</div><div class='add'>+    if (!fs-&gt;oldvolfile) {</div><div class='add'>+        fs-&gt;oldvolfile = CALLOC(1, size + 1);</div><div class='add'>+    } else {</div><div class='add'>+        fs-&gt;oldvolfile = REALLOC(fs-&gt;oldvolfile, size + 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!fs-&gt;oldvolfile) {</div><div class='add'>+        fs-&gt;oldvollen = 0;</div><div class='add'>+    } else {</div><div class='add'>+        memcpy(fs-&gt;oldvolfile, volfile, size);</div><div class='add'>+        fs-&gt;oldvollen = size;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                       void *myframe)</div><div class='add'>+glfs_mgmt_getspec_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='ctx'> {</div><div class='del'>-	gf_getspec_rsp		 rsp   = {0,};</div><div class='del'>-	call_frame_t		*frame = NULL;</div><div class='del'>-	glusterfs_ctx_t		*ctx = NULL;</div><div class='del'>-	int			 ret   = 0;</div><div class='del'>-	ssize_t			 size = 0;</div><div class='del'>-	FILE			*tmpfp = NULL;</div><div class='del'>-	int			 need_retry = 0;</div><div class='del'>-	struct glfs		*fs = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        char                    *servers_list = NULL;</div><div class='del'>-        int                      tmp_fd = -1;</div><div class='del'>-        char                     template[] = "/tmp/gfapi.volfile.XXXXXX";</div><div class='del'>-</div><div class='del'>-	frame = myframe;</div><div class='del'>-	ctx = frame-&gt;this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-	if (!ctx) {</div><div class='del'>-		gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_INVALID_ENTRY, "NULL context");</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fs = ((xlator_t *)ctx-&gt;master)-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (-1 == req-&gt;rpc_status) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		need_retry = 1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_getspec_rsp);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        API_MSG_XDR_DECODE_FAILED, "XDR decoding error");</div><div class='del'>-		ret   = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (-1 == rsp.op_ret) {</div><div class='del'>-		gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, rsp.op_errno,</div><div class='del'>-                        API_MSG_GET_VOLFILE_FAILED,</div><div class='del'>-			"failed to get the 'volume file' from server");</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = rsp.op_errno;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (!rsp.xdata.xdata_len) {</div><div class='del'>-                goto volfile;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.xdata.xdata_val, rsp.xdata.xdata_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to unserialize xdata to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict-&gt;extra_stdfree = rsp.xdata.xdata_val;</div><div class='del'>-</div><div class='del'>-        /* glusterd2 only */</div><div class='del'>-        ret = dict_get_str (dict, "servers-list", &amp;servers_list);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto volfile;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (frame-&gt;this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "Received list of available volfile servers: %s",</div><div class='del'>-                servers_list);</div><div class='del'>-</div><div class='del'>-        ret = gf_process_getspec_servers_list(&amp;ctx-&gt;cmd_args, servers_list);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed (%s) to process servers list: %s",</div><div class='del'>-                        strerror (errno), servers_list);</div><div class='del'>-        }</div><div class='add'>+    gf_getspec_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    FILE *tmpfp = NULL;</div><div class='add'>+    int need_retry = 0;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *servers_list = NULL;</div><div class='add'>+    int tmp_fd = -1;</div><div class='add'>+    char template[] = "/tmp/gfapi.volfile.XXXXXX";</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+    ctx = frame-&gt;this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "NULL context");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = ((xlator_t *)ctx-&gt;master)-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        need_retry = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_getspec_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, 0, API_MSG_XDR_DECODE_FAILED,</div><div class='add'>+               "XDR decoding error");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, rsp.op_errno,</div><div class='add'>+               API_MSG_GET_VOLFILE_FAILED,</div><div class='add'>+               "failed to get the 'volume file' from server");</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = rsp.op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!rsp.xdata.xdata_len) {</div><div class='add'>+        goto volfile;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.xdata.xdata_val, rsp.xdata.xdata_len, &amp;dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to unserialize xdata to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict-&gt;extra_stdfree = rsp.xdata.xdata_val;</div><div class='add'>+</div><div class='add'>+    /* glusterd2 only */</div><div class='add'>+    ret = dict_get_str(dict, "servers-list", &amp;servers_list);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto volfile;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(frame-&gt;this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "Received list of available volfile servers: %s", servers_list);</div><div class='add'>+</div><div class='add'>+    ret = gf_process_getspec_servers_list(&amp;ctx-&gt;cmd_args, servers_list);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed (%s) to process servers list: %s", strerror(errno),</div><div class='add'>+               servers_list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> volfile:</div><div class='del'>-	ret = 0;</div><div class='del'>-	size = rsp.op_ret;</div><div class='del'>-</div><div class='del'>-	if ((size == fs-&gt;oldvollen) &amp;&amp;</div><div class='del'>-	    (memcmp (fs-&gt;oldvolfile, rsp.spec, size) == 0)) {</div><div class='del'>-		gf_msg (frame-&gt;this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        API_MSG_VOLFILE_INFO,</div><div class='del'>-			"No change in volfile, continuing");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='del'>-        tmp_fd = mkstemp (template);</div><div class='del'>-        if (-1 == tmp_fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Calling unlink so that when the file is closed or program</div><div class='del'>-         * terminates the temporary file is deleted.</div><div class='del'>-         */</div><div class='del'>-        ret = sys_unlink (template);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_INFO, 0, API_MSG_VOLFILE_INFO,</div><div class='del'>-                        "Unable to delete file: %s", template);</div><div class='del'>-                ret = 0;</div><div class='add'>+    ret = 0;</div><div class='add'>+    size = rsp.op_ret;</div><div class='add'>+</div><div class='add'>+    if ((size == fs-&gt;oldvollen) &amp;&amp;</div><div class='add'>+        (memcmp(fs-&gt;oldvolfile, rsp.spec, size) == 0)) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_INFO, 0, API_MSG_VOLFILE_INFO,</div><div class='add'>+               "No change in volfile, continuing");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='add'>+    tmp_fd = mkstemp(template);</div><div class='add'>+    if (-1 == tmp_fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Calling unlink so that when the file is closed or program</div><div class='add'>+     * terminates the temporary file is deleted.</div><div class='add'>+     */</div><div class='add'>+    ret = sys_unlink(template);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_INFO, 0, API_MSG_VOLFILE_INFO,</div><div class='add'>+               "Unable to delete file: %s", template);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmpfp = fdopen(tmp_fd, "w+b");</div><div class='add'>+    if (!tmpfp) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fwrite(rsp.spec, size, 1, tmpfp);</div><div class='add'>+    fflush(tmpfp);</div><div class='add'>+    if (ferror(tmpfp)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*  Check if only options have changed. No need to reload the</div><div class='add'>+     *  volfile if topology hasn't changed.</div><div class='add'>+     *  glusterfs_volfile_reconfigure returns 3 possible return states</div><div class='add'>+     *  return 0	     =======&gt; reconfiguration of options has succeeded</div><div class='add'>+     *  return 1	     =======&gt; the graph has to be reconstructed and all the</div><div class='add'>+     * xlators should be inited return -1(or -ve) =======&gt; Some Internal Error</div><div class='add'>+     * occurred during the operation</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = gf_volfile_reconfigure(fs-&gt;oldvollen, tmpfp, fs-&gt;ctx, fs-&gt;oldvolfile);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                     "No need to re-load "</div><div class='add'>+                     "volfile, reconfigure done");</div><div class='add'>+        ret = glusterfs_oldvolfile_update(fs, rsp.spec, size);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0, "Reconfigure failed !!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_process_volfp(fs, tmpfp);</div><div class='add'>+    /* tmpfp closed */</div><div class='add'>+    tmpfp = NULL;</div><div class='add'>+    tmp_fd = -1;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_oldvolfile_update(fs, rsp.spec, size);</div><div class='add'>+out:</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+</div><div class='add'>+    if (rsp.spec)</div><div class='add'>+        free(rsp.spec);</div><div class='add'>+</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+</div><div class='add'>+    // Stop if server is running at an unsupported op-version</div><div class='add'>+    if (ENOTSUP == ret) {</div><div class='add'>+        gf_msg("mgmt", GF_LOG_ERROR, ENOTSUP, API_MSG_WRONG_OPVERSION,</div><div class='add'>+               "Server is operating at an op-version which is not "</div><div class='add'>+               "supported");</div><div class='add'>+        errno = ENOTSUP;</div><div class='add'>+        glfs_init_done(fs, -1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; ctx &amp;&amp; !ctx-&gt;active) {</div><div class='add'>+        /* Do it only for the first time */</div><div class='add'>+        /* Failed to get the volume file, something wrong,</div><div class='add'>+           restart the process */</div><div class='add'>+        gf_msg("glfs-mgmt", GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "failed to fetch volume file (key:%s)",</div><div class='add'>+               ctx-&gt;cmd_args.volfile_id);</div><div class='add'>+        if (!need_retry) {</div><div class='add'>+            if (!errno)</div><div class='add'>+                errno = EINVAL;</div><div class='add'>+            glfs_init_done(fs, -1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmpfp = fdopen (tmp_fd, "w+b");</div><div class='del'>-        if (!tmpfp) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (tmpfp)</div><div class='add'>+        fclose(tmpfp);</div><div class='add'>+    else if (tmp_fd != -1)</div><div class='add'>+        sys_close(tmp_fd);</div><div class='ctx'> </div><div class='del'>-	fwrite (rsp.spec, size, 1, tmpfp);</div><div class='del'>-	fflush (tmpfp);</div><div class='del'>-	if (ferror (tmpfp)) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/*  Check if only options have changed. No need to reload the</div><div class='del'>-	*  volfile if topology hasn't changed.</div><div class='del'>-	*  glusterfs_volfile_reconfigure returns 3 possible return states</div><div class='del'>-	*  return 0	     =======&gt; reconfiguration of options has succeeded</div><div class='del'>-	*  return 1	     =======&gt; the graph has to be reconstructed and all the xlators should be inited</div><div class='del'>-	*  return -1(or -ve) =======&gt; Some Internal Error occurred during the operation</div><div class='del'>-	*/</div><div class='del'>-</div><div class='del'>-        ret = gf_volfile_reconfigure (fs-&gt;oldvollen, tmpfp, fs-&gt;ctx,</div><div class='del'>-                                      fs-&gt;oldvolfile);</div><div class='del'>-	if (ret == 0) {</div><div class='del'>-		gf_msg_debug ("glusterfsd-mgmt", 0, "No need to re-load "</div><div class='del'>-                              "volfile, reconfigure done");</div><div class='del'>-		ret = glusterfs_oldvolfile_update (fs, rsp.spec, size);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_msg_debug ("glusterfsd-mgmt", 0, "Reconfigure failed !!");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glfs_process_volfp (fs, tmpfp);</div><div class='del'>-	/* tmpfp closed */</div><div class='del'>-	tmpfp = NULL;</div><div class='del'>-        tmp_fd = -1;</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	ret = glusterfs_oldvolfile_update (fs, rsp.spec, size);</div><div class='del'>-out:</div><div class='del'>-	STACK_DESTROY (frame-&gt;root);</div><div class='del'>-</div><div class='del'>-	if (rsp.spec)</div><div class='del'>-		free (rsp.spec);</div><div class='del'>-</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-</div><div class='del'>-	// Stop if server is running at an unsupported op-version</div><div class='del'>-	if (ENOTSUP == ret) {</div><div class='del'>-		gf_msg ("mgmt", GF_LOG_ERROR, ENOTSUP, API_MSG_WRONG_OPVERSION,</div><div class='del'>-                        "Server is operating at an op-version which is not "</div><div class='del'>-                        "supported");</div><div class='del'>-		errno = ENOTSUP;</div><div class='del'>-		glfs_init_done (fs, -1);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (ret &amp;&amp; ctx &amp;&amp; !ctx-&gt;active) {</div><div class='del'>-		/* Do it only for the first time */</div><div class='del'>-		/* Failed to get the volume file, something wrong,</div><div class='del'>-		   restart the process */</div><div class='del'>-		gf_msg ("glfs-mgmt", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_INVALID_ENTRY,</div><div class='del'>-			"failed to fetch volume file (key:%s)",</div><div class='del'>-			ctx-&gt;cmd_args.volfile_id);</div><div class='del'>-		if (!need_retry) {</div><div class='del'>-			if (!errno)</div><div class='del'>-				errno = EINVAL;</div><div class='del'>-			glfs_init_done (fs, -1);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (tmpfp)</div><div class='del'>-		fclose (tmpfp);</div><div class='del'>-        else if (tmp_fd != -1)</div><div class='del'>-                sys_close (tmp_fd);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_volfile_fetch (struct glfs *fs)</div><div class='add'>+glfs_volfile_fetch(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	cmd_args_t	 *cmd_args = NULL;</div><div class='del'>-	gf_getspec_req	  req = {0, };</div><div class='del'>-	int		  ret = 0;</div><div class='del'>-	call_frame_t	 *frame = NULL;</div><div class='del'>-	glusterfs_ctx_t	 *ctx = NULL;</div><div class='del'>-        dict_t           *dict = NULL;</div><div class='del'>-</div><div class='del'>-	ctx = fs-&gt;ctx;</div><div class='del'>-	cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-	frame = create_frame (THIS, ctx-&gt;pool);</div><div class='del'>-</div><div class='del'>-	req.key = cmd_args-&gt;volfile_id;</div><div class='del'>-	req.flags = 0;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        // Set the supported min and max op-versions, so glusterd can make a</div><div class='del'>-        // decision</div><div class='del'>-        ret = dict_set_int32 (dict, "min-op-version", GD_OP_VERSION_MIN);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set min-op-version in request dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "max-op-version", GD_OP_VERSION_MAX);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        API_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set max-op-version in request dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Ask for a list of volfile (glusterd2 only) servers */</div><div class='del'>-        if (GF_CLIENT_PROCESS == ctx-&gt;process_mode) {</div><div class='del'>-                req.flags = req.flags | GF_GETSPEC_FLAG_SERVERS_LIST;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.xdata.xdata_val,</div><div class='del'>-                                           &amp;req.xdata.xdata_len);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        API_MSG_DICT_SERIALIZE_FAILED,</div><div class='del'>-                        "Failed to serialize dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	ret = mgmt_submit_request (&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='del'>-				   GF_HNDSK_GETSPEC, glfs_mgmt_getspec_cbk,</div><div class='del'>-				   (xdrproc_t)xdr_gf_getspec_req);</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    gf_getspec_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, ctx-&gt;pool);</div><div class='add'>+</div><div class='add'>+    req.key = cmd_args-&gt;volfile_id;</div><div class='add'>+    req.flags = 0;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // Set the supported min and max op-versions, so glusterd can make a</div><div class='add'>+    // decision</div><div class='add'>+    ret = dict_set_int32(dict, "min-op-version", GD_OP_VERSION_MIN);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set min-op-version in request dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "max-op-version", GD_OP_VERSION_MAX);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, EINVAL, API_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set max-op-version in request dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Ask for a list of volfile (glusterd2 only) servers */</div><div class='add'>+    if (GF_CLIENT_PROCESS == ctx-&gt;process_mode) {</div><div class='add'>+        req.flags = req.flags | GF_GETSPEC_FLAG_SERVERS_LIST;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.xdata.xdata_val,</div><div class='add'>+                                      &amp;req.xdata.xdata_len);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, API_MSG_DICT_SERIALIZE_FAILED,</div><div class='add'>+               "Failed to serialize dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = mgmt_submit_request(&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='add'>+                              GF_HNDSK_GETSPEC, glfs_mgmt_getspec_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_gf_getspec_req);</div><div class='ctx'> out:</div><div class='del'>-        if (req.xdata.xdata_val)</div><div class='del'>-                GF_FREE(req.xdata.xdata_val);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (req.xdata.xdata_val)</div><div class='add'>+        GF_FREE(req.xdata.xdata_val);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-mgmt_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='del'>-		 void *data)</div><div class='add'>+mgmt_rpc_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='add'>+                void *data)</div><div class='ctx'> {</div><div class='del'>-	xlator_t	*this = NULL;</div><div class='del'>-	glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-        server_cmdline_t *server = NULL;</div><div class='del'>-        rpc_transport_t  *rpc_trans = NULL;</div><div class='del'>-	struct glfs	 *fs = NULL;</div><div class='del'>-	int		 ret = 0;</div><div class='del'>-	struct dnscache6 *dnscache = NULL;</div><div class='del'>-</div><div class='del'>-	this = mydata;</div><div class='del'>-        rpc_trans = rpc-&gt;conn.trans;</div><div class='del'>-</div><div class='del'>-	ctx = this-&gt;ctx;</div><div class='del'>-	if (!ctx)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	fs = ((xlator_t *)ctx-&gt;master)-&gt;private;</div><div class='del'>-</div><div class='del'>-	switch (event) {</div><div class='del'>-	case RPC_CLNT_DISCONNECT:</div><div class='del'>-		if (!ctx-&gt;active) {</div><div class='del'>-                        if (rpc_trans-&gt;connect_failed)</div><div class='del'>-                                gf_msg ("glfs-mgmt", GF_LOG_ERROR, 0,</div><div class='del'>-                                        API_MSG_REMOTE_HOST_CONN_FAILED,</div><div class='del'>-                                        "failed to connect to remote-host: %s",</div><div class='del'>-                                        ctx-&gt;cmd_args.volfile_server);</div><div class='del'>-                        else</div><div class='del'>-                                gf_msg ("glfs-mgmt", GF_LOG_INFO, 0,</div><div class='del'>-                                        API_MSG_REMOTE_HOST_CONN_FAILED,</div><div class='del'>-                                        "disconnected from remote-host: %s",</div><div class='del'>-                                        ctx-&gt;cmd_args.volfile_server);</div><div class='del'>-</div><div class='del'>-                        if (!rpc-&gt;disabled) {</div><div class='del'>-                                /*</div><div class='del'>-                                 * Check if dnscache is exhausted for current server</div><div class='del'>-                                 * and continue until cache is exhausted</div><div class='del'>-                                 */</div><div class='del'>-                                dnscache = rpc_trans-&gt;dnscache;</div><div class='del'>-                                if (dnscache &amp;&amp; dnscache-&gt;next) {</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        server = ctx-&gt;cmd_args.curr_server;</div><div class='del'>-                        if (server-&gt;list.next == &amp;ctx-&gt;cmd_args.volfile_servers) {</div><div class='del'>-                                errno = ENOTCONN;</div><div class='del'>-                                gf_msg ("glfs-mgmt", GF_LOG_INFO, ENOTCONN,</div><div class='del'>-                                        API_MSG_VOLFILE_SERVER_EXHAUST,</div><div class='del'>-                                        "Exhausted all volfile servers");</div><div class='del'>-                                glfs_init_done (fs, -1);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        server = list_entry (server-&gt;list.next, typeof(*server),</div><div class='del'>-                                             list);</div><div class='del'>-                        ctx-&gt;cmd_args.curr_server = server;</div><div class='del'>-                        ctx-&gt;cmd_args.volfile_server_port = server-&gt;port;</div><div class='del'>-                        ctx-&gt;cmd_args.volfile_server = server-&gt;volfile_server;</div><div class='del'>-                        ctx-&gt;cmd_args.volfile_server_transport = server-&gt;transport;</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_str (rpc_trans-&gt;options,</div><div class='del'>-                                            "transport-type",</div><div class='del'>-                                            server-&gt;transport);</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                gf_msg ("glfs-mgmt", GF_LOG_ERROR, ENOTCONN,</div><div class='del'>-                                        API_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "failed to set transport-type: %s",</div><div class='del'>-                                        server-&gt;transport);</div><div class='del'>-                                errno = ENOTCONN;</div><div class='del'>-                                glfs_init_done (fs, -1);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (strcmp(server-&gt;transport, "unix") == 0) {</div><div class='del'>-                                ret = dict_set_str (rpc_trans-&gt;options,</div><div class='del'>-                                                    "transport.socket.connect-path",</div><div class='del'>-                                                    server-&gt;volfile_server);</div><div class='del'>-                                if (ret != 0) {</div><div class='del'>-                                        gf_msg ("glfs-mgmt", GF_LOG_ERROR,</div><div class='del'>-                                                ENOTCONN,</div><div class='del'>-                                                API_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "failed to set socket.connect-path: %s",</div><div class='del'>-                                                server-&gt;volfile_server);</div><div class='del'>-                                        errno = ENOTCONN;</div><div class='del'>-                                        glfs_init_done (fs, -1);</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                                /* delete the remote-host and remote-port keys</div><div class='del'>-                                 * in case they were set while looping through</div><div class='del'>-                                 * list of volfile servers previously</div><div class='del'>-                                 */</div><div class='del'>-                                dict_del (rpc_trans-&gt;options, "remote-host");</div><div class='del'>-                                dict_del (rpc_trans-&gt;options, "remote-port");</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = dict_set_int32 (rpc_trans-&gt;options,</div><div class='del'>-                                                      "remote-port",</div><div class='del'>-                                                      server-&gt;port);</div><div class='del'>-                                if (ret != 0) {</div><div class='del'>-                                        gf_msg ("glfs-mgmt", GF_LOG_ERROR,</div><div class='del'>-                                                ENOTCONN,</div><div class='del'>-                                                API_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "failed to set remote-port: %d",</div><div class='del'>-                                                server-&gt;port);</div><div class='del'>-                                        errno = ENOTCONN;</div><div class='del'>-                                        glfs_init_done (fs, -1);</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                ret = dict_set_str (rpc_trans-&gt;options,</div><div class='del'>-                                                    "remote-host",</div><div class='del'>-                                                    server-&gt;volfile_server);</div><div class='del'>-                                if (ret != 0) {</div><div class='del'>-                                        gf_msg ("glfs-mgmt", GF_LOG_ERROR,</div><div class='del'>-                                                ENOTCONN,</div><div class='del'>-                                                API_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "failed to set remote-host: %s",</div><div class='del'>-                                                server-&gt;volfile_server);</div><div class='del'>-                                        errno = ENOTCONN;</div><div class='del'>-                                        glfs_init_done (fs, -1);</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                                /* delete the "transport.socket.connect-path"</div><div class='del'>-                                 * key in case if it was set while looping</div><div class='del'>-                                 * through list of volfile servers previously</div><div class='del'>-                                 */</div><div class='del'>-                                dict_del (rpc_trans-&gt;options,</div><div class='del'>-                                          "transport.socket.connect-path");</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        gf_msg ("glfs-mgmt", GF_LOG_INFO, 0,</div><div class='del'>-                                API_MSG_VOLFILE_CONNECTING,</div><div class='del'>-                                "connecting to next volfile server %s"</div><div class='del'>-                                " at port %d with transport: %s",</div><div class='del'>-                                server-&gt;volfile_server, server-&gt;port,</div><div class='del'>-                                server-&gt;transport);</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    server_cmdline_t *server = NULL;</div><div class='add'>+    rpc_transport_t *rpc_trans = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct dnscache6 *dnscache = NULL;</div><div class='add'>+</div><div class='add'>+    this = mydata;</div><div class='add'>+    rpc_trans = rpc-&gt;conn.trans;</div><div class='add'>+</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fs = ((xlator_t *)ctx-&gt;master)-&gt;private;</div><div class='add'>+</div><div class='add'>+    switch (event) {</div><div class='add'>+        case RPC_CLNT_DISCONNECT:</div><div class='add'>+            if (!ctx-&gt;active) {</div><div class='add'>+                if (rpc_trans-&gt;connect_failed)</div><div class='add'>+                    gf_msg("glfs-mgmt", GF_LOG_ERROR, 0,</div><div class='add'>+                           API_MSG_REMOTE_HOST_CONN_FAILED,</div><div class='add'>+                           "failed to connect to remote-host: %s",</div><div class='add'>+                           ctx-&gt;cmd_args.volfile_server);</div><div class='add'>+                else</div><div class='add'>+                    gf_msg("glfs-mgmt", GF_LOG_INFO, 0,</div><div class='add'>+                           API_MSG_REMOTE_HOST_CONN_FAILED,</div><div class='add'>+                           "disconnected from remote-host: %s",</div><div class='add'>+                           ctx-&gt;cmd_args.volfile_server);</div><div class='add'>+</div><div class='add'>+                if (!rpc-&gt;disabled) {</div><div class='add'>+                    /*</div><div class='add'>+                     * Check if dnscache is exhausted for current server</div><div class='add'>+                     * and continue until cache is exhausted</div><div class='add'>+                     */</div><div class='add'>+                    dnscache = rpc_trans-&gt;dnscache;</div><div class='add'>+                    if (dnscache &amp;&amp; dnscache-&gt;next) {</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='del'>-	case RPC_CLNT_CONNECT:</div><div class='del'>-		ret = glfs_volfile_fetch (fs);</div><div class='del'>-		if (ret &amp;&amp; (ctx-&gt;active == NULL)) {</div><div class='del'>-			/* Do it only for the first time */</div><div class='del'>-			/* Exit the process.. there are some wrong options */</div><div class='del'>-			gf_msg ("glfs-mgmt", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                API_MSG_INVALID_ENTRY,</div><div class='del'>-				"failed to fetch volume file (key:%s)",</div><div class='del'>-                                ctx-&gt;cmd_args.volfile_id);</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        glfs_init_done (fs, -1);</div><div class='add'>+                server = ctx-&gt;cmd_args.curr_server;</div><div class='add'>+                if (server-&gt;list.next == &amp;ctx-&gt;cmd_args.volfile_servers) {</div><div class='add'>+                    errno = ENOTCONN;</div><div class='add'>+                    gf_msg("glfs-mgmt", GF_LOG_INFO, ENOTCONN,</div><div class='add'>+                           API_MSG_VOLFILE_SERVER_EXHAUST,</div><div class='add'>+                           "Exhausted all volfile servers");</div><div class='add'>+                    glfs_init_done(fs, -1);</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+                server = list_entry(server-&gt;list.next, typeof(*server), list);</div><div class='add'>+                ctx-&gt;cmd_args.curr_server = server;</div><div class='add'>+                ctx-&gt;cmd_args.volfile_server_port = server-&gt;port;</div><div class='add'>+                ctx-&gt;cmd_args.volfile_server = server-&gt;volfile_server;</div><div class='add'>+                ctx-&gt;cmd_args.volfile_server_transport = server-&gt;transport;</div><div class='add'>+</div><div class='add'>+                ret = dict_set_str(rpc_trans-&gt;options, "transport-type",</div><div class='add'>+                                   server-&gt;transport);</div><div class='add'>+                if (ret != 0) {</div><div class='add'>+                    gf_msg("glfs-mgmt", GF_LOG_ERROR, ENOTCONN,</div><div class='add'>+                           API_MSG_DICT_SET_FAILED,</div><div class='add'>+                           "failed to set transport-type: %s",</div><div class='add'>+                           server-&gt;transport);</div><div class='add'>+                    errno = ENOTCONN;</div><div class='add'>+                    glfs_init_done(fs, -1);</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='add'>+                if (strcmp(server-&gt;transport, "unix") == 0) {</div><div class='add'>+                    ret = dict_set_str(rpc_trans-&gt;options,</div><div class='add'>+                                       "transport.socket.connect-path",</div><div class='add'>+                                       server-&gt;volfile_server);</div><div class='add'>+                    if (ret != 0) {</div><div class='add'>+                        gf_msg("glfs-mgmt", GF_LOG_ERROR, ENOTCONN,</div><div class='add'>+                               API_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "failed to set socket.connect-path: %s",</div><div class='add'>+                               server-&gt;volfile_server);</div><div class='add'>+                        errno = ENOTCONN;</div><div class='add'>+                        glfs_init_done(fs, -1);</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='add'>+                    /* delete the remote-host and remote-port keys</div><div class='add'>+                     * in case they were set while looping through</div><div class='add'>+                     * list of volfile servers previously</div><div class='add'>+                     */</div><div class='add'>+                    dict_del(rpc_trans-&gt;options, "remote-host");</div><div class='add'>+                    dict_del(rpc_trans-&gt;options, "remote-port");</div><div class='add'>+                } else {</div><div class='add'>+                    ret = dict_set_int32(rpc_trans-&gt;options, "remote-port",</div><div class='add'>+                                         server-&gt;port);</div><div class='add'>+                    if (ret != 0) {</div><div class='add'>+                        gf_msg("glfs-mgmt", GF_LOG_ERROR, ENOTCONN,</div><div class='add'>+                               API_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "failed to set remote-port: %d", server-&gt;port);</div><div class='add'>+                        errno = ENOTCONN;</div><div class='add'>+                        glfs_init_done(fs, -1);</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    ret = dict_set_str(rpc_trans-&gt;options, "remote-host",</div><div class='add'>+                                       server-&gt;volfile_server);</div><div class='add'>+                    if (ret != 0) {</div><div class='add'>+                        gf_msg("glfs-mgmt", GF_LOG_ERROR, ENOTCONN,</div><div class='add'>+                               API_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "failed to set remote-host: %s",</div><div class='add'>+                               server-&gt;volfile_server);</div><div class='add'>+                        errno = ENOTCONN;</div><div class='add'>+                        glfs_init_done(fs, -1);</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='add'>+                    /* delete the "transport.socket.connect-path"</div><div class='add'>+                     * key in case if it was set while looping</div><div class='add'>+                     * through list of volfile servers previously</div><div class='add'>+                     */</div><div class='add'>+                    dict_del(rpc_trans-&gt;options,</div><div class='add'>+                             "transport.socket.connect-path");</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                gf_msg("glfs-mgmt", GF_LOG_INFO, 0, API_MSG_VOLFILE_CONNECTING,</div><div class='add'>+                       "connecting to next volfile server %s"</div><div class='add'>+                       " at port %d with transport: %s",</div><div class='add'>+                       server-&gt;volfile_server, server-&gt;port, server-&gt;transport);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case RPC_CLNT_CONNECT:</div><div class='add'>+            ret = glfs_volfile_fetch(fs);</div><div class='add'>+            if (ret &amp;&amp; (ctx-&gt;active == NULL)) {</div><div class='add'>+                /* Do it only for the first time */</div><div class='add'>+                /* Exit the process.. there are some wrong options */</div><div class='add'>+                gf_msg("glfs-mgmt", GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+                       "failed to fetch volume file (key:%s)",</div><div class='add'>+                       ctx-&gt;cmd_args.volfile_id);</div><div class='add'>+                errno = EINVAL;</div><div class='add'>+                glfs_init_done(fs, -1);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_mgmt_notify (int32_t op, void *data, ...)</div><div class='add'>+glusterfs_mgmt_notify(int32_t op, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	switch (op)</div><div class='del'>-	{</div><div class='del'>-		case GF_EN_DEFRAG_STATUS:</div><div class='del'>-			break;</div><div class='add'>+    switch (op) {</div><div class='add'>+        case GF_EN_DEFRAG_STATUS:</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-		default:</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_mgmt_init (struct glfs *fs)</div><div class='add'>+glfs_mgmt_init(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	cmd_args_t		*cmd_args = NULL;</div><div class='del'>-	struct rpc_clnt		*rpc = NULL;</div><div class='del'>-	dict_t			*options = NULL;</div><div class='del'>-	int			ret = -1;</div><div class='del'>-	int			port = GF_DEFAULT_BASE_PORT;</div><div class='del'>-	char			*host = NULL;</div><div class='del'>-	glusterfs_ctx_t		*ctx = NULL;</div><div class='del'>-</div><div class='del'>-	ctx = fs-&gt;ctx;</div><div class='del'>-	cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-	if (ctx-&gt;mgmt)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	if (cmd_args-&gt;volfile_server_port)</div><div class='del'>-		port = cmd_args-&gt;volfile_server_port;</div><div class='del'>-</div><div class='del'>-	if (cmd_args-&gt;volfile_server) {</div><div class='del'>-		host = cmd_args-&gt;volfile_server;</div><div class='del'>-        } else if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='del'>-                   !strcmp (cmd_args-&gt;volfile_server_transport, "unix")) {</div><div class='del'>-                host = DEFAULT_GLUSTERD_SOCKFILE;</div><div class='del'>-        } else {</div><div class='del'>-                host = "localhost";</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='del'>-            !strcmp (cmd_args-&gt;volfile_server_transport, "unix")) {</div><div class='del'>-                ret = rpc_transport_unix_options_build (&amp;options, host, 0);</div><div class='del'>-        } else {</div><div class='del'>-                ret = rpc_transport_inet_options_build (&amp;options, host, port);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        if (sys_access (SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='del'>-                ctx-&gt;secure_mgmt = 1;</div><div class='del'>-                ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file ();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	rpc = rpc_clnt_new (options, THIS, THIS-&gt;name, 8);</div><div class='del'>-	if (!rpc) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        API_MSG_CREATE_RPC_CLIENT_FAILED,</div><div class='del'>-			"failed to create rpc clnt");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = rpc_clnt_register_notify (rpc, mgmt_rpc_notify, THIS);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        API_MSG_REG_NOTIFY_FUNC_FAILED,</div><div class='del'>-			"failed to register notify function");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = rpcclnt_cbk_program_register (rpc, &amp;mgmt_cbk_prog, THIS);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        API_MSG_REG_CBK_FUNC_FAILED,</div><div class='del'>-			"failed to register callback function");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ctx-&gt;notify = glusterfs_mgmt_notify;</div><div class='del'>-</div><div class='del'>-	/* This value should be set before doing the 'rpc_clnt_start()' as</div><div class='del'>-	   the notify function uses this variable */</div><div class='del'>-	ctx-&gt;mgmt = rpc;</div><div class='del'>-</div><div class='del'>-	ret = rpc_clnt_start (rpc);</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int port = GF_DEFAULT_BASE_PORT;</div><div class='add'>+    char *host = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;mgmt)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server_port)</div><div class='add'>+        port = cmd_args-&gt;volfile_server_port;</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server) {</div><div class='add'>+        host = cmd_args-&gt;volfile_server;</div><div class='add'>+    } else if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='add'>+               !strcmp(cmd_args-&gt;volfile_server_transport, "unix")) {</div><div class='add'>+        host = DEFAULT_GLUSTERD_SOCKFILE;</div><div class='add'>+    } else {</div><div class='add'>+        host = "localhost";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='add'>+        !strcmp(cmd_args-&gt;volfile_server_transport, "unix")) {</div><div class='add'>+        ret = rpc_transport_unix_options_build(&amp;options, host, 0);</div><div class='add'>+    } else {</div><div class='add'>+        ret = rpc_transport_inet_options_build(&amp;options, host, port);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (sys_access(SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='add'>+        ctx-&gt;secure_mgmt = 1;</div><div class='add'>+        ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file();</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc = rpc_clnt_new(options, THIS, THIS-&gt;name, 8);</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, API_MSG_CREATE_RPC_CLIENT_FAILED,</div><div class='add'>+               "failed to create rpc clnt");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_register_notify(rpc, mgmt_rpc_notify, THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, API_MSG_REG_NOTIFY_FUNC_FAILED,</div><div class='add'>+               "failed to register notify function");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcclnt_cbk_program_register(rpc, &amp;mgmt_cbk_prog, THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, API_MSG_REG_CBK_FUNC_FAILED,</div><div class='add'>+               "failed to register callback function");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;notify = glusterfs_mgmt_notify;</div><div class='add'>+</div><div class='add'>+    /* This value should be set before doing the 'rpc_clnt_start()' as</div><div class='add'>+       the notify function uses this variable */</div><div class='add'>+    ctx-&gt;mgmt = rpc;</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_start(rpc);</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c<br/>index 0c4b9651bd4..34794b605e4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/src/glfs-resolve.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/src/glfs-resolve.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/src/glfs-resolve.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/src/glfs-resolve.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='hunk'>@@ -28,46 +27,47 @@</div><div class='ctx'> #include "inode.h"</div><div class='ctx'> #include "glfs-internal.h"</div><div class='ctx'> </div><div class='del'>-#define graphid_str(subvol) (uuid_utoa((unsigned char *)subvol-&gt;graph-&gt;graph_uuid))</div><div class='add'>+#define graphid_str(subvol)                                                    \</div><div class='add'>+    (uuid_utoa((unsigned char *)subvol-&gt;graph-&gt;graph_uuid))</div><div class='ctx'> int</div><div class='del'>-glfs_first_lookup_safe (xlator_t *subvol)</div><div class='add'>+glfs_first_lookup_safe(xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-	loc_t  loc = {0, };</div><div class='del'>-	int    ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	loc.inode = subvol-&gt;itable-&gt;root;</div><div class='del'>-	memset (loc.gfid, 0, 16);</div><div class='del'>-	loc.gfid[15] = 1;</div><div class='del'>-	loc.path = "/";</div><div class='del'>-	loc.name = "";</div><div class='add'>+    loc.inode = subvol-&gt;itable-&gt;root;</div><div class='add'>+    memset(loc.gfid, 0, 16);</div><div class='add'>+    loc.gfid[15] = 1;</div><div class='add'>+    loc.path = "/";</div><div class='add'>+    loc.name = "";</div><div class='ctx'> </div><div class='del'>-	ret = syncop_lookup (subvol, &amp;loc, 0, 0, 0, 0);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, 0, 0, 0, 0);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='del'>-	gf_msg_debug (subvol-&gt;name, 0, "first lookup complete %d", ret);</div><div class='add'>+    gf_msg_debug(subvol-&gt;name, 0, "first lookup complete %d", ret);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__glfs_first_lookup (struct glfs *fs, xlator_t *subvol)</div><div class='add'>+__glfs_first_lookup(struct glfs *fs, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-</div><div class='del'>-	fs-&gt;migration_in_progress = 1;</div><div class='del'>-	pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		ret = glfs_first_lookup_safe (subvol);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-	fs-&gt;migration_in_progress = 0;</div><div class='del'>-	pthread_cond_broadcast (&amp;fs-&gt;cond);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    fs-&gt;migration_in_progress = 1;</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = glfs_first_lookup_safe(subvol);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    fs-&gt;migration_in_progress = 0;</div><div class='add'>+    pthread_cond_broadcast(&amp;fs-&gt;cond);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * We have to check if need_lookup flag is set in both old and the new inodes.</div><div class='ctx'>  * If its set in oldinode, then directly go ahead and do an explicit lookup.</div><div class='hunk'>@@ -76,842 +76,819 @@ __glfs_first_lookup (struct glfs *fs, xlator_t *subvol)</div><div class='ctx'>  * below xlators can set their respective contexts.</div><div class='ctx'>  */</div><div class='ctx'> inode_t *</div><div class='del'>-glfs_refresh_inode_safe (xlator_t *subvol, inode_t *oldinode,</div><div class='del'>-                         gf_boolean_t need_lookup)</div><div class='add'>+glfs_refresh_inode_safe(xlator_t *subvol, inode_t *oldinode,</div><div class='add'>+                        gf_boolean_t need_lookup)</div><div class='ctx'> {</div><div class='del'>-	loc_t        loc = {0, };</div><div class='del'>-	int          ret = -1;</div><div class='del'>-	struct iatt  iatt = {0, };</div><div class='del'>-	inode_t     *newinode = NULL;</div><div class='del'>-        gf_boolean_t lookup_needed = _gf_false;</div><div class='del'>-        uint64_t     ctx_value = LOOKUP_NOT_NEEDED;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	if (!oldinode)</div><div class='del'>-		return NULL;</div><div class='del'>-</div><div class='del'>-	if (!need_lookup &amp;&amp; oldinode-&gt;table-&gt;xl == subvol)</div><div class='del'>-		return inode_ref (oldinode);</div><div class='del'>-</div><div class='del'>-	newinode = inode_find (subvol-&gt;itable, oldinode-&gt;gfid);</div><div class='del'>-	if (!need_lookup &amp;&amp; newinode) {</div><div class='del'>-</div><div class='del'>-                lookup_needed = inode_needs_lookup (newinode, THIS);</div><div class='del'>-                if (!lookup_needed)</div><div class='del'>-                        return newinode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	gf_uuid_copy (loc.gfid, oldinode-&gt;gfid);</div><div class='del'>-        if (!newinode)</div><div class='del'>-                loc.inode = inode_new (subvol-&gt;itable);</div><div class='del'>-        else</div><div class='del'>-                loc.inode = newinode;</div><div class='del'>-</div><div class='del'>-	if (!loc.inode)</div><div class='del'>-		return NULL;</div><div class='del'>-</div><div class='del'>-	ret = syncop_lookup (subvol, &amp;loc, &amp;iatt, 0, 0, 0);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_INODE_REFRESH_FAILED,</div><div class='del'>-			"inode refresh of %s failed: %s",</div><div class='del'>-			uuid_utoa (oldinode-&gt;gfid), strerror (errno));</div><div class='del'>-		loc_wipe (&amp;loc);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	newinode = inode_link (loc.inode, 0, 0, &amp;iatt);</div><div class='del'>-        if (newinode) {</div><div class='del'>-                if (newinode == loc.inode)</div><div class='del'>-                        inode_ctx_set (newinode, THIS, &amp;ctx_value);</div><div class='del'>-                inode_lookup (newinode);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_INODE_LINK_FAILED,</div><div class='del'>-                        "inode linking of %s failed",</div><div class='del'>-                        uuid_utoa ((unsigned char *)&amp;iatt.ia_gfid));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	return newinode;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *newinode = NULL;</div><div class='add'>+    gf_boolean_t lookup_needed = _gf_false;</div><div class='add'>+    uint64_t ctx_value = LOOKUP_NOT_NEEDED;</div><div class='add'>+</div><div class='add'>+    if (!oldinode)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    if (!need_lookup &amp;&amp; oldinode-&gt;table-&gt;xl == subvol)</div><div class='add'>+        return inode_ref(oldinode);</div><div class='add'>+</div><div class='add'>+    newinode = inode_find(subvol-&gt;itable, oldinode-&gt;gfid);</div><div class='add'>+    if (!need_lookup &amp;&amp; newinode) {</div><div class='add'>+        lookup_needed = inode_needs_lookup(newinode, THIS);</div><div class='add'>+        if (!lookup_needed)</div><div class='add'>+            return newinode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, oldinode-&gt;gfid);</div><div class='add'>+    if (!newinode)</div><div class='add'>+        loc.inode = inode_new(subvol-&gt;itable);</div><div class='add'>+    else</div><div class='add'>+        loc.inode = newinode;</div><div class='add'>+</div><div class='add'>+    if (!loc.inode)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, &amp;iatt, 0, 0, 0);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+               API_MSG_INODE_REFRESH_FAILED, "inode refresh of %s failed: %s",</div><div class='add'>+               uuid_utoa(oldinode-&gt;gfid), strerror(errno));</div><div class='add'>+        loc_wipe(&amp;loc);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newinode = inode_link(loc.inode, 0, 0, &amp;iatt);</div><div class='add'>+    if (newinode) {</div><div class='add'>+        if (newinode == loc.inode)</div><div class='add'>+            inode_ctx_set(newinode, THIS, &amp;ctx_value);</div><div class='add'>+        inode_lookup(newinode);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_WARNING, errno, API_MSG_INODE_LINK_FAILED,</div><div class='add'>+               "inode linking of %s failed",</div><div class='add'>+               uuid_utoa((unsigned char *)&amp;iatt.ia_gfid));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+    return newinode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-__glfs_refresh_inode (struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='del'>-                      gf_boolean_t need_lookup)</div><div class='add'>+__glfs_refresh_inode(struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='add'>+                     gf_boolean_t need_lookup)</div><div class='ctx'> {</div><div class='del'>-	inode_t *newinode = NULL;</div><div class='del'>-</div><div class='del'>-	fs-&gt;migration_in_progress = 1;</div><div class='del'>-	pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		newinode = glfs_refresh_inode_safe (subvol, inode, need_lookup);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-	fs-&gt;migration_in_progress = 0;</div><div class='del'>-	pthread_cond_broadcast (&amp;fs-&gt;cond);</div><div class='del'>-</div><div class='del'>-	return newinode;</div><div class='add'>+    inode_t *newinode = NULL;</div><div class='add'>+</div><div class='add'>+    fs-&gt;migration_in_progress = 1;</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        newinode = glfs_refresh_inode_safe(subvol, inode, need_lookup);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    fs-&gt;migration_in_progress = 0;</div><div class='add'>+    pthread_cond_broadcast(&amp;fs-&gt;cond);</div><div class='add'>+</div><div class='add'>+    return newinode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-priv_glfs_loc_touchup (loc_t *loc)</div><div class='add'>+priv_glfs_loc_touchup(loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = loc_touchup (loc, loc-&gt;name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    ret = loc_touchup(loc, loc-&gt;name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_loc_touchup, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_resolve_symlink (struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='del'>-		      char **lpath)</div><div class='add'>+glfs_resolve_symlink(struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='add'>+                     char **lpath)</div><div class='ctx'> {</div><div class='del'>-	loc_t  loc = {0, };</div><div class='del'>-	char  *path = NULL;</div><div class='del'>-	char  *rpath = NULL;</div><div class='del'>-	int    ret = -1;</div><div class='del'>-</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-	ret = inode_path (inode, NULL, &amp;rpath);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='del'>-	loc.path = rpath;</div><div class='del'>-</div><div class='del'>-	ret = syncop_readlink (subvol, &amp;loc, &amp;path, 4096, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (lpath)</div><div class='del'>-		*lpath = path;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *rpath = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    ret = inode_path(inode, NULL, &amp;rpath);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    loc.path = rpath;</div><div class='add'>+</div><div class='add'>+    ret = syncop_readlink(subvol, &amp;loc, &amp;path, 4096, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (lpath)</div><div class='add'>+        *lpath = path;</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_resolve_base (struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='del'>-		   struct iatt *iatt)</div><div class='add'>+glfs_resolve_base(struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='add'>+                  struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-	loc_t       loc = {0, };</div><div class='del'>-	int         ret = -1;</div><div class='del'>-	char       *path = NULL;</div><div class='del'>-</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-	ret = inode_path (loc.inode, NULL, &amp;path);</div><div class='del'>-	loc.path = path;</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	ret = syncop_lookup (subvol, &amp;loc, iatt, NULL, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = inode_path(loc.inode, NULL, &amp;path);</div><div class='add'>+    loc.path = path;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, iatt, NULL, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> /*</div><div class='ctx'>  * This function can be used to call named lookup on root.</div><div class='ctx'>  * If you use glfs_resolve_base, that will be a nameless lookup.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-glfs_resolve_root (struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='del'>-                   struct iatt *iatt)</div><div class='add'>+glfs_resolve_root(struct glfs *fs, xlator_t *subvol, inode_t *inode,</div><div class='add'>+                  struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-        loc_t       loc = {0, };</div><div class='del'>-        int         ret = -1;</div><div class='del'>-        char       *path = NULL;</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-        ret = inode_path (loc.inode, ".", &amp;path);</div><div class='del'>-        loc.path = path;</div><div class='del'>-        loc.name = ".";</div><div class='del'>-        /* Having a value in loc.name will help to bypass md-cache check for</div><div class='del'>-         * nameless lookup.</div><div class='del'>-         * TODO: Re-visit on nameless lookup and md-cache.</div><div class='del'>-         * Github issue : https://github.com/gluster/glusterfs/issues/232</div><div class='del'>-         */</div><div class='del'>-        loc.parent = inode_ref (inode);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (subvol, &amp;loc, iatt, NULL, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    ret = inode_path(loc.inode, ".", &amp;path);</div><div class='add'>+    loc.path = path;</div><div class='add'>+    loc.name = ".";</div><div class='add'>+    /* Having a value in loc.name will help to bypass md-cache check for</div><div class='add'>+     * nameless lookup.</div><div class='add'>+     * TODO: Re-visit on nameless lookup and md-cache.</div><div class='add'>+     * Github issue : https://github.com/gluster/glusterfs/issues/232</div><div class='add'>+     */</div><div class='add'>+    loc.parent = inode_ref(inode);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, iatt, NULL, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-glfs_resolve_component (struct glfs *fs, xlator_t *subvol, inode_t *parent,</div><div class='del'>-			const char *component, struct iatt *iatt,</div><div class='del'>-			int force_lookup)</div><div class='add'>+glfs_resolve_component(struct glfs *fs, xlator_t *subvol, inode_t *parent,</div><div class='add'>+                       const char *component, struct iatt *iatt,</div><div class='add'>+                       int force_lookup)</div><div class='ctx'> {</div><div class='del'>-	loc_t        loc = {0, };</div><div class='del'>-	inode_t     *inode = NULL;</div><div class='del'>-        inode_t     *temp_parent = NULL;</div><div class='del'>-	int          reval = 0;</div><div class='del'>-	int          ret = -1;</div><div class='del'>-	int          glret = -1;</div><div class='del'>-	struct iatt  ciatt = {0, };</div><div class='del'>-	uuid_t       gfid;</div><div class='del'>-	dict_t      *xattr_req = NULL;</div><div class='del'>-        uint64_t     ctx_value = LOOKUP_NOT_NEEDED;</div><div class='del'>-</div><div class='del'>-	loc.parent = inode_ref (parent);</div><div class='del'>-	gf_uuid_copy (loc.pargfid, parent-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        if (__is_root_gfid (parent-&gt;gfid) &amp;&amp;</div><div class='del'>-            ((strcmp (component, ".") == 0) ||</div><div class='del'>-             (strcmp (component, "..") == 0) ||</div><div class='del'>-             (strcmp (component, "") == 0))) {</div><div class='del'>-                if (!force_lookup) {</div><div class='del'>-                        inode = inode_ref (parent);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = glfs_resolve_root (fs, subvol, parent, &amp;ciatt);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                inode = inode_ref (parent);</div><div class='del'>-                }</div><div class='del'>-                goto found;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *temp_parent = NULL;</div><div class='add'>+    int reval = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int glret = -1;</div><div class='add'>+    struct iatt ciatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    uint64_t ctx_value = LOOKUP_NOT_NEEDED;</div><div class='add'>+</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, parent-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    if (__is_root_gfid(parent-&gt;gfid) &amp;&amp;</div><div class='add'>+        ((strcmp(component, ".") == 0) || (strcmp(component, "..") == 0) ||</div><div class='add'>+         (strcmp(component, "") == 0))) {</div><div class='add'>+        if (!force_lookup) {</div><div class='add'>+            inode = inode_ref(parent);</div><div class='add'>+        } else {</div><div class='add'>+            ret = glfs_resolve_root(fs, subvol, parent, &amp;ciatt);</div><div class='add'>+            if (!ret)</div><div class='add'>+                inode = inode_ref(parent);</div><div class='add'>+        }</div><div class='add'>+        goto found;</div><div class='add'>+    }</div><div class='add'>+    /* *</div><div class='add'>+     * if the component name is either "." or "..", it will try to</div><div class='add'>+     * resolve that if inode has a proper parent (named lookup).</div><div class='add'>+     *</div><div class='add'>+     * Below condition works like this</div><div class='add'>+     *</div><div class='add'>+     * Example 1 :</div><div class='add'>+     * Path /out_dir/dir/in_dir/.</div><div class='add'>+     *     In put values :</div><div class='add'>+     *         parent = in_dir</div><div class='add'>+     *         component : "."</div><div class='add'>+     *</div><div class='add'>+     *      Out put values:</div><div class='add'>+     *         parent : dir</div><div class='add'>+     *         component : "in_dir"</div><div class='add'>+     *</div><div class='add'>+     * Example 2 :</div><div class='add'>+     * Path /out_dir/dir/in_dir/..</div><div class='add'>+     *     In put values :</div><div class='add'>+     *         parent = in_dir</div><div class='add'>+     *         component : ".."</div><div class='add'>+     *</div><div class='add'>+     *     Out put values:</div><div class='add'>+     *         parent : output_dir</div><div class='add'>+     *         component : "dir"</div><div class='add'>+     *</div><div class='add'>+     * In case of nameless lookup, both "." and ".." retained</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (strcmp(component, ".") == 0) {</div><div class='add'>+        loc.inode = inode_ref(parent);</div><div class='add'>+        temp_parent = inode_parent(loc.inode, 0, 0);</div><div class='add'>+        if (temp_parent) {</div><div class='add'>+            inode_unref(loc.parent);</div><div class='add'>+            loc.parent = temp_parent;</div><div class='add'>+            inode_find_directory_name(loc.inode, &amp;loc.name);</div><div class='ctx'>         }</div><div class='del'>-        /* *</div><div class='del'>-        * if the component name is either "." or "..", it will try to</div><div class='del'>-        * resolve that if inode has a proper parent (named lookup).</div><div class='del'>-        *</div><div class='del'>-        * Below condition works like this</div><div class='del'>-        *</div><div class='del'>-        * Example 1 :</div><div class='del'>-        * Path /out_dir/dir/in_dir/.</div><div class='del'>-        *     In put values :</div><div class='del'>-        *         parent = in_dir</div><div class='del'>-        *         component : "."</div><div class='del'>-        *</div><div class='del'>-        *      Out put values:</div><div class='del'>-        *         parent : dir</div><div class='del'>-        *         component : "in_dir"</div><div class='del'>-        *</div><div class='del'>-        * Example 2 :</div><div class='del'>-        * Path /out_dir/dir/in_dir/..</div><div class='del'>-        *     In put values :</div><div class='del'>-        *         parent = in_dir</div><div class='del'>-        *         component : ".."</div><div class='del'>-        *</div><div class='del'>-        *     Out put values:</div><div class='del'>-        *         parent : output_dir</div><div class='del'>-        *         component : "dir"</div><div class='del'>-        *</div><div class='del'>-        * In case of nameless lookup, both "." and ".." retained</div><div class='del'>-        */</div><div class='ctx'> </div><div class='del'>-        if (strcmp (component, ".") == 0) {</div><div class='del'>-                loc.inode = inode_ref (parent);</div><div class='del'>-                temp_parent = inode_parent (loc.inode, 0, 0);</div><div class='del'>-                if (temp_parent) {</div><div class='del'>-                        inode_unref (loc.parent);</div><div class='del'>-                        loc.parent = temp_parent;</div><div class='del'>-                        inode_find_directory_name (loc.inode, &amp;loc.name);</div><div class='del'>-                }</div><div class='add'>+    } else if (strcmp(component, "..") == 0) {</div><div class='add'>+        loc.inode = inode_parent(parent, 0, 0);</div><div class='add'>+        if (loc.inode) {</div><div class='add'>+            temp_parent = inode_parent(loc.inode, 0, 0);</div><div class='add'>+            if (temp_parent) {</div><div class='add'>+                inode_unref(loc.parent);</div><div class='add'>+                loc.parent = temp_parent;</div><div class='add'>+                inode_find_directory_name(loc.inode, &amp;loc.name);</div><div class='add'>+            } else if (__is_root_gfid(loc.inode-&gt;gfid)) {</div><div class='add'>+                inode_unref(loc.parent);</div><div class='add'>+                loc.parent = inode_ref(loc.inode);</div><div class='add'>+                loc.name = "";</div><div class='add'>+            } else {</div><div class='add'>+                inode_unref(loc.inode);</div><div class='add'>+                loc.inode = NULL;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else</div><div class='add'>+        loc.inode = inode_grep(parent-&gt;table, parent, component);</div><div class='ctx'> </div><div class='del'>-        } else if (strcmp (component, "..") == 0) {</div><div class='del'>-                loc.inode = inode_parent (parent, 0, 0);</div><div class='del'>-                if (loc.inode) {</div><div class='del'>-                        temp_parent = inode_parent (loc.inode, 0, 0);</div><div class='del'>-                        if (temp_parent) {</div><div class='del'>-                                inode_unref (loc.parent);</div><div class='del'>-                                loc.parent = temp_parent;</div><div class='del'>-                                inode_find_directory_name (loc.inode, &amp;loc.name);</div><div class='del'>-                        } else if (__is_root_gfid (loc.inode-&gt;gfid)) {</div><div class='del'>-                                inode_unref (loc.parent);</div><div class='del'>-                                loc.parent = inode_ref (loc.inode);</div><div class='del'>-                                loc.name = "";</div><div class='del'>-                        } else {</div><div class='del'>-                                inode_unref (loc.inode);</div><div class='del'>-                                loc.inode = NULL;</div><div class='del'>-                        }</div><div class='add'>+    if (!loc.name)</div><div class='add'>+        loc.name = component;</div><div class='ctx'> </div><div class='del'>-                }</div><div class='del'>-        } else</div><div class='del'>-                loc.inode = inode_grep (parent-&gt;table, parent, component);</div><div class='del'>-</div><div class='del'>-        if (!loc.name)</div><div class='del'>-                loc.name = component;</div><div class='del'>-</div><div class='del'>-	if (loc.inode) {</div><div class='del'>-		gf_uuid_copy (loc.gfid, loc.inode-&gt;gfid);</div><div class='del'>-		reval = 1;</div><div class='del'>-</div><div class='del'>-                if (!(force_lookup || inode_needs_lookup (loc.inode, THIS))) {</div><div class='del'>-			inode = inode_ref (loc.inode);</div><div class='del'>-			goto found;</div><div class='del'>-		}</div><div class='del'>-	} else {</div><div class='del'>-		gf_uuid_generate (gfid);</div><div class='del'>-		loc.inode = inode_new (parent-&gt;table);</div><div class='del'>-                if (!loc.inode) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (loc.inode) {</div><div class='add'>+        gf_uuid_copy(loc.gfid, loc.inode-&gt;gfid);</div><div class='add'>+        reval = 1;</div><div class='ctx'> </div><div class='del'>-                xattr_req = dict_new ();</div><div class='del'>-                if (!xattr_req) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!(force_lookup || inode_needs_lookup(loc.inode, THIS))) {</div><div class='add'>+            inode = inode_ref(loc.inode);</div><div class='add'>+            goto found;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_uuid_generate(gfid);</div><div class='add'>+        loc.inode = inode_new(parent-&gt;table);</div><div class='add'>+        if (!loc.inode) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        xattr_req = dict_new();</div><div class='add'>+        if (!xattr_req) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	glret = priv_glfs_loc_touchup (&amp;loc);</div><div class='del'>-	if (glret &lt; 0) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (subvol, &amp;loc, &amp;ciatt, NULL, xattr_req, NULL);</div><div class='del'>-        if (ret &amp;&amp; reval) {</div><div class='del'>-                /*</div><div class='del'>-                 * A stale mapping might exist for a dentry/inode that has been</div><div class='del'>-                 * removed from another client.</div><div class='del'>-                 */</div><div class='del'>-                if (-ret == ENOENT) {</div><div class='del'>-                        inode_unlink(loc.inode, loc.parent,</div><div class='del'>-                                     loc.name);</div><div class='del'>-                        if (!inode_has_dentry (loc.inode))</div><div class='del'>-                                inode_forget (loc.inode, 0);</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glret = priv_glfs_loc_touchup(&amp;loc);</div><div class='add'>+    if (glret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, &amp;ciatt, NULL, xattr_req, NULL);</div><div class='add'>+    if (ret &amp;&amp; reval) {</div><div class='add'>+        /*</div><div class='add'>+         * A stale mapping might exist for a dentry/inode that has been</div><div class='add'>+         * removed from another client.</div><div class='add'>+         */</div><div class='add'>+        if (-ret == ENOENT) {</div><div class='add'>+            inode_unlink(loc.inode, loc.parent, loc.name);</div><div class='add'>+            if (!inode_has_dentry(loc.inode))</div><div class='add'>+                inode_forget(loc.inode, 0);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		inode_unref (loc.inode);</div><div class='del'>-	        gf_uuid_clear (loc.gfid);</div><div class='del'>-		loc.inode = inode_new (parent-&gt;table);</div><div class='del'>-		if (!loc.inode) {</div><div class='del'>-			errno = ENOMEM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		xattr_req = dict_new ();</div><div class='del'>-		if (!xattr_req) {</div><div class='del'>-			errno = ENOMEM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		gf_uuid_generate (gfid);</div><div class='del'>-</div><div class='del'>-		ret = dict_set_gfuuid (xattr_req, "gfid-req", gfid, true);</div><div class='del'>-		if (ret) {</div><div class='del'>-			errno = ENOMEM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = syncop_lookup (subvol, &amp;loc, &amp;ciatt, NULL,</div><div class='del'>-				     xattr_req, NULL);</div><div class='del'>-	}</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	inode = inode_link (loc.inode, loc.parent, component, &amp;ciatt);</div><div class='add'>+        inode_unref(loc.inode);</div><div class='add'>+        gf_uuid_clear(loc.gfid);</div><div class='add'>+        loc.inode = inode_new(parent-&gt;table);</div><div class='add'>+        if (!loc.inode) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_INODE_LINK_FAILED,</div><div class='del'>-                        "inode linking of %s failed",</div><div class='del'>-                        uuid_utoa ((unsigned char *)&amp;ciatt.ia_gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (inode == loc.inode)</div><div class='del'>-                inode_ctx_set (inode, THIS, &amp;ctx_value);</div><div class='del'>-found:</div><div class='del'>-	if (inode) {</div><div class='del'>-                ciatt.ia_type = inode-&gt;ia_type;</div><div class='del'>-		inode_lookup (inode);</div><div class='add'>+        xattr_req = dict_new();</div><div class='add'>+        if (!xattr_req) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_uuid_generate(gfid);</div><div class='add'>+</div><div class='add'>+        ret = dict_set_gfuuid(xattr_req, "gfid-req", gfid, true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-	if (iatt)</div><div class='del'>-		*iatt = ciatt;</div><div class='add'>+</div><div class='add'>+        ret = syncop_lookup(subvol, &amp;loc, &amp;ciatt, NULL, xattr_req, NULL);</div><div class='add'>+    }</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    inode = inode_link(loc.inode, loc.parent, component, &amp;ciatt);</div><div class='add'>+</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_WARNING, errno, API_MSG_INODE_LINK_FAILED,</div><div class='add'>+               "inode linking of %s failed",</div><div class='add'>+               uuid_utoa((unsigned char *)&amp;ciatt.ia_gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (inode == loc.inode)</div><div class='add'>+        inode_ctx_set(inode, THIS, &amp;ctx_value);</div><div class='add'>+found:</div><div class='add'>+    if (inode) {</div><div class='add'>+        ciatt.ia_type = inode-&gt;ia_type;</div><div class='add'>+        inode_lookup(inode);</div><div class='add'>+    }</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = ciatt;</div><div class='ctx'> out:</div><div class='del'>-	if (xattr_req)</div><div class='del'>-		dict_unref (xattr_req);</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at,</div><div class='del'>-		 const char *origpath, loc_t *loc, struct iatt *iatt,</div><div class='del'>-		 int follow, int reval)</div><div class='add'>+priv_glfs_resolve_at(struct glfs *fs, xlator_t *subvol, inode_t *at,</div><div class='add'>+                     const char *origpath, loc_t *loc, struct iatt *iatt,</div><div class='add'>+                     int follow, int reval)</div><div class='ctx'> {</div><div class='del'>-	inode_t    *inode = NULL;</div><div class='del'>-	inode_t    *parent = NULL;</div><div class='del'>-	char       *saveptr = NULL;</div><div class='del'>-	char       *path = NULL;</div><div class='del'>-	char       *component = NULL;</div><div class='del'>-	char       *next_component = NULL;</div><div class='del'>-	int         ret = -1;</div><div class='del'>-	struct iatt ciatt = {0, };</div><div class='del'>-</div><div class='del'>-	DECLARE_OLD_THIS;</div><div class='del'>-	__GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        if (origpath[0] == '\0') {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto invalid_fs;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *component = NULL;</div><div class='add'>+    char *next_component = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt ciatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    if (origpath[0] == '\0') {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto invalid_fs;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent = NULL;</div><div class='add'>+    if (at &amp;&amp; origpath[0] != '/') {</div><div class='add'>+        /* A relative resolution of a path which starts with '/'</div><div class='add'>+           is equal to an absolute path resolution.</div><div class='add'>+        */</div><div class='add'>+        inode = inode_ref(at);</div><div class='add'>+    } else {</div><div class='add'>+        inode = inode_ref(subvol-&gt;itable-&gt;root);</div><div class='add'>+</div><div class='add'>+        if (strcmp(origpath, "/") == 0)</div><div class='add'>+            glfs_resolve_root(fs, subvol, inode, &amp;ciatt);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    path = gf_strdup(origpath);</div><div class='add'>+    if (!path)</div><div class='add'>+        goto invalid_fs;</div><div class='add'>+</div><div class='add'>+    for (component = strtok_r(path, "/", &amp;saveptr); component;</div><div class='add'>+         component = next_component) {</div><div class='add'>+        next_component = strtok_r(NULL, "/", &amp;saveptr);</div><div class='add'>+</div><div class='add'>+        if (parent)</div><div class='add'>+            inode_unref(parent);</div><div class='add'>+        parent = inode;</div><div class='add'>+        inode = glfs_resolve_component(fs, subvol, parent, component, &amp;ciatt,</div><div class='add'>+                                       /* force hard lookup on the last</div><div class='add'>+                                          component, as the caller</div><div class='add'>+                                          wants proper iatt filled</div><div class='add'>+                                       */</div><div class='add'>+                                       (reval || (!next_component &amp;&amp; iatt)));</div><div class='add'>+        if (!inode) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	parent = NULL;</div><div class='del'>-	if (at &amp;&amp; origpath[0] != '/') {</div><div class='del'>-		/* A relative resolution of a path which starts with '/'</div><div class='del'>-		   is equal to an absolute path resolution.</div><div class='del'>-		*/</div><div class='del'>-		inode = inode_ref (at);</div><div class='del'>-	} else {</div><div class='del'>-		inode = inode_ref (subvol-&gt;itable-&gt;root);</div><div class='del'>-</div><div class='del'>-		if (strcmp (origpath, "/") == 0)</div><div class='del'>-                        glfs_resolve_root (fs, subvol, inode, &amp;ciatt);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        path = gf_strdup (origpath);</div><div class='del'>-	if (!path)</div><div class='del'>-		goto invalid_fs;</div><div class='del'>-</div><div class='del'>-	for (component = strtok_r (path, "/", &amp;saveptr);</div><div class='del'>-	     component; component = next_component) {</div><div class='del'>-</div><div class='del'>-		next_component = strtok_r (NULL, "/", &amp;saveptr);</div><div class='del'>-</div><div class='del'>-		if (parent)</div><div class='del'>-			inode_unref (parent);</div><div class='del'>-		parent = inode;</div><div class='del'>-		inode = glfs_resolve_component (fs, subvol, parent,</div><div class='del'>-						component, &amp;ciatt,</div><div class='del'>-						/* force hard lookup on the last</div><div class='del'>-						   component, as the caller</div><div class='del'>-						   wants proper iatt filled</div><div class='del'>-						*/</div><div class='del'>-						(reval || (!next_component &amp;&amp;</div><div class='del'>-						iatt)));</div><div class='del'>-		if (!inode) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-			break;</div><div class='add'>+        if (IA_ISLNK(ciatt.ia_type) &amp;&amp; (next_component || follow)) {</div><div class='add'>+            /* If the component is not the last piece,</div><div class='add'>+               then following it is necessary even if</div><div class='add'>+               not requested by the caller</div><div class='add'>+            */</div><div class='add'>+            char *lpath = NULL;</div><div class='add'>+            loc_t sym_loc = {</div><div class='add'>+                0,</div><div class='add'>+            };</div><div class='add'>+</div><div class='add'>+            if (follow &gt; GLFS_SYMLINK_MAX_FOLLOW) {</div><div class='add'>+                errno = ELOOP;</div><div class='add'>+                ret = -1;</div><div class='add'>+                if (inode) {</div><div class='add'>+                    inode_unref(inode);</div><div class='add'>+                    inode = NULL;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = glfs_resolve_symlink(fs, subvol, inode, &amp;lpath);</div><div class='add'>+            inode_unref(inode);</div><div class='add'>+            inode = NULL;</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            ret = priv_glfs_resolve_at(fs, subvol, parent, lpath, &amp;sym_loc,</div><div class='add'>+                                       /* followed iatt becomes the</div><div class='add'>+                                          component iatt</div><div class='add'>+                                       */</div><div class='add'>+                                       &amp;ciatt,</div><div class='add'>+                                       /* always recurisvely follow while</div><div class='add'>+                                          following symlink</div><div class='add'>+                                       */</div><div class='add'>+                                       follow + 1, reval);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                inode = inode_ref(sym_loc.inode);</div><div class='add'>+            loc_wipe(&amp;sym_loc);</div><div class='add'>+            GF_FREE(lpath);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (IA_ISLNK (ciatt.ia_type) &amp;&amp; (next_component || follow)) {</div><div class='del'>-			/* If the component is not the last piece,</div><div class='del'>-			   then following it is necessary even if</div><div class='del'>-			   not requested by the caller</div><div class='del'>-			*/</div><div class='del'>-			char *lpath = NULL;</div><div class='del'>-			loc_t sym_loc = {0,};</div><div class='del'>-</div><div class='del'>-			if (follow &gt; GLFS_SYMLINK_MAX_FOLLOW) {</div><div class='del'>-				errno = ELOOP;</div><div class='del'>-				ret = -1;</div><div class='del'>-				if (inode) {</div><div class='del'>-					inode_unref (inode);</div><div class='del'>-					inode = NULL;</div><div class='del'>-				}</div><div class='del'>-				break;</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-			ret = glfs_resolve_symlink (fs, subvol, inode, &amp;lpath);</div><div class='del'>-			inode_unref (inode);</div><div class='del'>-			inode = NULL;</div><div class='del'>-			if (ret &lt; 0)</div><div class='del'>-				break;</div><div class='del'>-</div><div class='del'>-			ret = priv_glfs_resolve_at (fs, subvol, parent, lpath,</div><div class='del'>-					       &amp;sym_loc,</div><div class='del'>-					       /* followed iatt becomes the</div><div class='del'>-						  component iatt</div><div class='del'>-					       */</div><div class='del'>-					       &amp;ciatt,</div><div class='del'>-					       /* always recurisvely follow while</div><div class='del'>-						  following symlink</div><div class='del'>-					       */</div><div class='del'>-					       follow + 1, reval);</div><div class='del'>-			if (ret == 0)</div><div class='del'>-				inode = inode_ref (sym_loc.inode);</div><div class='del'>-			loc_wipe (&amp;sym_loc);</div><div class='del'>-			GF_FREE (lpath);</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!next_component)</div><div class='del'>-			break;</div><div class='del'>-</div><div class='del'>-		if (!IA_ISDIR (ciatt.ia_type)) {</div><div class='del'>-			/* next_component exists and this component is</div><div class='del'>-			   not a directory</div><div class='del'>-			*/</div><div class='del'>-			inode_unref (inode);</div><div class='del'>-			inode = NULL;</div><div class='del'>-			ret = -1;</div><div class='del'>-			errno = ENOTDIR;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (parent &amp;&amp; next_component)</div><div class='del'>-		/* resolution failed mid-way */</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	/* At this point, all components up to the last parent directory</div><div class='del'>-	   have been resolved successfully (@parent). Resolution of basename</div><div class='del'>-	   might have failed (@inode) if at all.</div><div class='del'>-	*/</div><div class='del'>-</div><div class='del'>-	loc-&gt;parent = parent;</div><div class='del'>-	if (parent) {</div><div class='del'>-		gf_uuid_copy (loc-&gt;pargfid, parent-&gt;gfid);</div><div class='del'>-		loc-&gt;name = component;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	loc-&gt;inode = inode;</div><div class='del'>-	if (inode) {</div><div class='del'>-		gf_uuid_copy (loc-&gt;gfid, inode-&gt;gfid);</div><div class='del'>-		if (iatt)</div><div class='del'>-			*iatt = ciatt;</div><div class='del'>-		ret = 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (priv_glfs_loc_touchup (loc) &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='add'>+        if (!next_component)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (!IA_ISDIR(ciatt.ia_type)) {</div><div class='add'>+            /* next_component exists and this component is</div><div class='add'>+               not a directory</div><div class='add'>+            */</div><div class='add'>+            inode_unref(inode);</div><div class='add'>+            inode = NULL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = ENOTDIR;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (parent &amp;&amp; next_component)</div><div class='add'>+        /* resolution failed mid-way */</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* At this point, all components up to the last parent directory</div><div class='add'>+       have been resolved successfully (@parent). Resolution of basename</div><div class='add'>+       might have failed (@inode) if at all.</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    loc-&gt;parent = parent;</div><div class='add'>+    if (parent) {</div><div class='add'>+        gf_uuid_copy(loc-&gt;pargfid, parent-&gt;gfid);</div><div class='add'>+        loc-&gt;name = component;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc-&gt;inode = inode;</div><div class='add'>+    if (inode) {</div><div class='add'>+        gf_uuid_copy(loc-&gt;gfid, inode-&gt;gfid);</div><div class='add'>+        if (iatt)</div><div class='add'>+            *iatt = ciatt;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv_glfs_loc_touchup(loc) &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	GF_FREE (path);</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    GF_FREE(path);</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-	/* do NOT loc_wipe here as only last component might be missing */</div><div class='add'>+    /* do NOT loc_wipe here as only last component might be missing */</div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_resolve_at, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_resolve_path (struct glfs *fs, xlator_t *subvol, const char *origpath,</div><div class='del'>-		   loc_t *loc, struct iatt *iatt, int follow, int reval)</div><div class='add'>+glfs_resolve_path(struct glfs *fs, xlator_t *subvol, const char *origpath,</div><div class='add'>+                  loc_t *loc, struct iatt *iatt, int follow, int reval)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	inode_t *cwd = NULL;</div><div class='del'>-</div><div class='del'>-	if (origpath[0] == '/')</div><div class='del'>-		return priv_glfs_resolve_at (fs, subvol, NULL, origpath, loc,</div><div class='del'>-                                             iatt, follow, reval);</div><div class='del'>-</div><div class='del'>-	cwd = glfs_cwd_get (fs);</div><div class='del'>-        if (NULL == cwd) {</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_WARNING, EIO,</div><div class='del'>-                        API_MSG_GET_CWD_FAILED, "Failed to get cwd");</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *cwd = NULL;</div><div class='ctx'> </div><div class='del'>-	ret = priv_glfs_resolve_at (fs, subvol, cwd, origpath, loc, iatt,</div><div class='add'>+    if (origpath[0] == '/')</div><div class='add'>+        return priv_glfs_resolve_at(fs, subvol, NULL, origpath, loc, iatt,</div><div class='ctx'>                                     follow, reval);</div><div class='del'>-	if (cwd)</div><div class='del'>-		inode_unref (cwd);</div><div class='add'>+</div><div class='add'>+    cwd = glfs_cwd_get(fs);</div><div class='add'>+    if (NULL == cwd) {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_WARNING, EIO, API_MSG_GET_CWD_FAILED,</div><div class='add'>+               "Failed to get cwd");</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = priv_glfs_resolve_at(fs, subvol, cwd, origpath, loc, iatt, follow,</div><div class='add'>+                               reval);</div><div class='add'>+    if (cwd)</div><div class='add'>+        inode_unref(cwd);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-priv_glfs_resolve (struct glfs *fs, xlator_t *subvol, const char *origpath,</div><div class='del'>-	      loc_t *loc, struct iatt *iatt, int reval)</div><div class='add'>+priv_glfs_resolve(struct glfs *fs, xlator_t *subvol, const char *origpath,</div><div class='add'>+                  loc_t *loc, struct iatt *iatt, int reval)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_resolve_path (fs, subvol, origpath, loc, iatt, 1, reval);</div><div class='add'>+    ret = glfs_resolve_path(fs, subvol, origpath, loc, iatt, 1, reval);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_resolve, 3.7.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_lresolve (struct glfs *fs, xlator_t *subvol, const char *origpath,</div><div class='del'>-	       loc_t *loc, struct iatt *iatt, int reval)</div><div class='add'>+glfs_lresolve(struct glfs *fs, xlator_t *subvol, const char *origpath,</div><div class='add'>+              loc_t *loc, struct iatt *iatt, int reval)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_resolve_path (fs, subvol, origpath, loc, iatt, 0, reval);</div><div class='add'>+    ret = glfs_resolve_path(fs, subvol, origpath, loc, iatt, 0, reval);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_migrate_fd_locks_safe (struct glfs *fs, xlator_t *oldsubvol, fd_t *oldfd,</div><div class='del'>-			    xlator_t *newsubvol, fd_t *newfd)</div><div class='add'>+glfs_migrate_fd_locks_safe(struct glfs *fs, xlator_t *oldsubvol, fd_t *oldfd,</div><div class='add'>+                           xlator_t *newsubvol, fd_t *newfd)</div><div class='ctx'> {</div><div class='del'>-	dict_t *lockinfo = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	char uuid1[64];</div><div class='del'>-</div><div class='del'>-	if (!oldfd-&gt;lk_ctx || fd_lk_ctx_empty (oldfd-&gt;lk_ctx))</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	newfd-&gt;lk_ctx = fd_lk_ctx_ref (oldfd-&gt;lk_ctx);</div><div class='del'>-</div><div class='del'>-	ret = syncop_fgetxattr (oldsubvol, oldfd, &amp;lockinfo,</div><div class='del'>-				GF_XATTR_LOCKINFO_KEY, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_FGETXATTR_FAILED,</div><div class='del'>-			"fgetxattr (%s) failed (%s) on graph %s (%d)",</div><div class='del'>-			uuid_utoa_r (oldfd-&gt;inode-&gt;gfid, uuid1),</div><div class='del'>-			strerror (errno),</div><div class='del'>-			graphid_str (oldsubvol), oldsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!dict_get (lockinfo, GF_XATTR_LOCKINFO_KEY)) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, 0,</div><div class='del'>-                        API_MSG_LOCKINFO_KEY_MISSING,</div><div class='del'>-			"missing lockinfo key (%s) on graph %s (%d)",</div><div class='del'>-			uuid_utoa_r (oldfd-&gt;inode-&gt;gfid, uuid1),</div><div class='del'>-			graphid_str (oldsubvol), oldsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = syncop_fsetxattr (newsubvol, newfd, lockinfo, 0, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, 0,</div><div class='del'>-                        API_MSG_FSETXATTR_FAILED,</div><div class='del'>-			"fsetxattr (%s) failed (%s) on graph %s (%d)",</div><div class='del'>-			uuid_utoa_r (newfd-&gt;inode-&gt;gfid, uuid1),</div><div class='del'>-			strerror (errno),</div><div class='del'>-			graphid_str (newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    dict_t *lockinfo = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char uuid1[64];</div><div class='add'>+</div><div class='add'>+    if (!oldfd-&gt;lk_ctx || fd_lk_ctx_empty(oldfd-&gt;lk_ctx))</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    newfd-&gt;lk_ctx = fd_lk_ctx_ref(oldfd-&gt;lk_ctx);</div><div class='add'>+</div><div class='add'>+    ret = syncop_fgetxattr(oldsubvol, oldfd, &amp;lockinfo, GF_XATTR_LOCKINFO_KEY,</div><div class='add'>+                           NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, errno, API_MSG_FGETXATTR_FAILED,</div><div class='add'>+               "fgetxattr (%s) failed (%s) on graph %s (%d)",</div><div class='add'>+               uuid_utoa_r(oldfd-&gt;inode-&gt;gfid, uuid1), strerror(errno),</div><div class='add'>+               graphid_str(oldsubvol), oldsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!dict_get(lockinfo, GF_XATTR_LOCKINFO_KEY)) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, 0, API_MSG_LOCKINFO_KEY_MISSING,</div><div class='add'>+               "missing lockinfo key (%s) on graph %s (%d)",</div><div class='add'>+               uuid_utoa_r(oldfd-&gt;inode-&gt;gfid, uuid1), graphid_str(oldsubvol),</div><div class='add'>+               oldsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetxattr(newsubvol, newfd, lockinfo, 0, NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, 0, API_MSG_FSETXATTR_FAILED,</div><div class='add'>+               "fsetxattr (%s) failed (%s) on graph %s (%d)",</div><div class='add'>+               uuid_utoa_r(newfd-&gt;inode-&gt;gfid, uuid1), strerror(errno),</div><div class='add'>+               graphid_str(newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	if (lockinfo)</div><div class='del'>-		dict_unref (lockinfo);</div><div class='del'>-	return ret;</div><div class='add'>+    if (lockinfo)</div><div class='add'>+        dict_unref(lockinfo);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-glfs_migrate_fd_safe (struct glfs *fs, xlator_t *newsubvol, fd_t *oldfd)</div><div class='add'>+glfs_migrate_fd_safe(struct glfs *fs, xlator_t *newsubvol, fd_t *oldfd)</div><div class='ctx'> {</div><div class='del'>-	fd_t *newfd = NULL;</div><div class='del'>-	inode_t *oldinode = NULL;</div><div class='del'>-	inode_t *newinode = NULL;</div><div class='del'>-	xlator_t *oldsubvol = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-	char uuid1[64];</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	oldinode = oldfd-&gt;inode;</div><div class='del'>-	oldsubvol = oldinode-&gt;table-&gt;xl;</div><div class='del'>-</div><div class='del'>-	if (oldsubvol == newsubvol)</div><div class='del'>-		return fd_ref (oldfd);</div><div class='del'>-</div><div class='del'>-	if (!oldsubvol-&gt;switched) {</div><div class='del'>-		ret = syncop_fsync (oldsubvol, oldfd, 0, NULL, NULL, NULL, NULL);</div><div class='del'>-                DECODE_SYNCOP_ERR (ret);</div><div class='del'>-		if (ret) {</div><div class='del'>-			gf_msg (fs-&gt;volname, GF_LOG_WARNING, errno,</div><div class='del'>-                                API_MSG_FSYNC_FAILED, "fsync() failed "</div><div class='del'>-                                "(%s) on %s graph %s (%d)", strerror (errno),</div><div class='del'>-				uuid_utoa_r (oldfd-&gt;inode-&gt;gfid, uuid1),</div><div class='del'>-				graphid_str (oldsubvol), oldsubvol-&gt;graph-&gt;id);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	newinode = glfs_refresh_inode_safe (newsubvol, oldinode, _gf_false);</div><div class='del'>-	if (!newinode) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_INODE_REFRESH_FAILED,</div><div class='del'>-			"inode (%s) refresh failed (%s) on graph %s (%d)",</div><div class='del'>-			uuid_utoa_r (oldinode-&gt;gfid, uuid1),</div><div class='del'>-			strerror (errno),</div><div class='del'>-			graphid_str (newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	newfd = fd_create (newinode, getpid());</div><div class='del'>-	if (!newfd) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_FDCREATE_FAILED,</div><div class='del'>-			"fd_create (%s) failed (%s) on graph %s (%d)",</div><div class='del'>-			uuid_utoa_r (newinode-&gt;gfid, uuid1),</div><div class='del'>-			strerror (errno),</div><div class='del'>-			graphid_str (newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	loc.inode = inode_ref (newinode);</div><div class='del'>-</div><div class='del'>-        ret = inode_path (oldfd-&gt;inode, NULL, (char **)&amp;loc.path);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (fs-&gt;volname, GF_LOG_INFO, 0, API_MSG_INODE_PATH_FAILED,</div><div class='del'>-                        "inode_path failed");</div><div class='del'>-                goto out;</div><div class='add'>+    fd_t *newfd = NULL;</div><div class='add'>+    inode_t *oldinode = NULL;</div><div class='add'>+    inode_t *newinode = NULL;</div><div class='add'>+    xlator_t *oldsubvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char uuid1[64];</div><div class='add'>+</div><div class='add'>+    oldinode = oldfd-&gt;inode;</div><div class='add'>+    oldsubvol = oldinode-&gt;table-&gt;xl;</div><div class='add'>+</div><div class='add'>+    if (oldsubvol == newsubvol)</div><div class='add'>+        return fd_ref(oldfd);</div><div class='add'>+</div><div class='add'>+    if (!oldsubvol-&gt;switched) {</div><div class='add'>+        ret = syncop_fsync(oldsubvol, oldfd, 0, NULL, NULL, NULL, NULL);</div><div class='add'>+        DECODE_SYNCOP_ERR(ret);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(fs-&gt;volname, GF_LOG_WARNING, errno, API_MSG_FSYNC_FAILED,</div><div class='add'>+                   "fsync() failed "</div><div class='add'>+                   "(%s) on %s graph %s (%d)",</div><div class='add'>+                   strerror(errno), uuid_utoa_r(oldfd-&gt;inode-&gt;gfid, uuid1),</div><div class='add'>+                   graphid_str(oldsubvol), oldsubvol-&gt;graph-&gt;id);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (loc.gfid, oldinode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	if (IA_ISDIR (oldinode-&gt;ia_type))</div><div class='del'>-		ret = syncop_opendir (newsubvol, &amp;loc, newfd, NULL, NULL);</div><div class='del'>-	else</div><div class='del'>-		ret = syncop_open (newsubvol, &amp;loc,</div><div class='del'>-				   oldfd-&gt;flags &amp; ~(O_TRUNC|O_EXCL|O_CREAT),</div><div class='del'>-				   newfd, NULL, NULL);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_SYNCOP_OPEN_FAILED,</div><div class='del'>-			"syncop_open%s (%s) failed (%s) on graph %s (%d)",</div><div class='del'>-			IA_ISDIR (oldinode-&gt;ia_type) ? "dir" : "",</div><div class='del'>-			uuid_utoa_r (newinode-&gt;gfid, uuid1),</div><div class='del'>-			strerror (errno),</div><div class='del'>-			graphid_str (newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glfs_migrate_fd_locks_safe (fs, oldsubvol, oldfd, newsubvol,</div><div class='del'>-					  newfd);</div><div class='del'>-</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_WARNING, errno,</div><div class='del'>-                        API_MSG_LOCK_MIGRATE_FAILED,</div><div class='del'>-			"lock migration (%s) failed (%s) on graph %s (%d)",</div><div class='del'>-			uuid_utoa_r (newinode-&gt;gfid, uuid1),</div><div class='del'>-			strerror (errno),</div><div class='del'>-			graphid_str (newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        newfd-&gt;flags = oldfd-&gt;flags;</div><div class='del'>-	fd_bind (newfd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newinode = glfs_refresh_inode_safe(newsubvol, oldinode, _gf_false);</div><div class='add'>+    if (!newinode) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, errno, API_MSG_INODE_REFRESH_FAILED,</div><div class='add'>+               "inode (%s) refresh failed (%s) on graph %s (%d)",</div><div class='add'>+               uuid_utoa_r(oldinode-&gt;gfid, uuid1), strerror(errno),</div><div class='add'>+               graphid_str(newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newfd = fd_create(newinode, getpid());</div><div class='add'>+    if (!newfd) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, errno, API_MSG_FDCREATE_FAILED,</div><div class='add'>+               "fd_create (%s) failed (%s) on graph %s (%d)",</div><div class='add'>+               uuid_utoa_r(newinode-&gt;gfid, uuid1), strerror(errno),</div><div class='add'>+               graphid_str(newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(newinode);</div><div class='add'>+</div><div class='add'>+    ret = inode_path(oldfd-&gt;inode, NULL, (char **)&amp;loc.path);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_INFO, 0, API_MSG_INODE_PATH_FAILED,</div><div class='add'>+               "inode_path failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, oldinode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(oldinode-&gt;ia_type))</div><div class='add'>+        ret = syncop_opendir(newsubvol, &amp;loc, newfd, NULL, NULL);</div><div class='add'>+    else</div><div class='add'>+        ret = syncop_open(newsubvol, &amp;loc,</div><div class='add'>+                          oldfd-&gt;flags &amp; ~(O_TRUNC | O_EXCL | O_CREAT), newfd,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, errno, API_MSG_SYNCOP_OPEN_FAILED,</div><div class='add'>+               "syncop_open%s (%s) failed (%s) on graph %s (%d)",</div><div class='add'>+               IA_ISDIR(oldinode-&gt;ia_type) ? "dir" : "",</div><div class='add'>+               uuid_utoa_r(newinode-&gt;gfid, uuid1), strerror(errno),</div><div class='add'>+               graphid_str(newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_migrate_fd_locks_safe(fs, oldsubvol, oldfd, newsubvol, newfd);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_WARNING, errno, API_MSG_LOCK_MIGRATE_FAILED,</div><div class='add'>+               "lock migration (%s) failed (%s) on graph %s (%d)",</div><div class='add'>+               uuid_utoa_r(newinode-&gt;gfid, uuid1), strerror(errno),</div><div class='add'>+               graphid_str(newsubvol), newsubvol-&gt;graph-&gt;id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newfd-&gt;flags = oldfd-&gt;flags;</div><div class='add'>+    fd_bind(newfd);</div><div class='ctx'> out:</div><div class='del'>-	if (newinode)</div><div class='del'>-		inode_unref (newinode);</div><div class='add'>+    if (newinode)</div><div class='add'>+        inode_unref(newinode);</div><div class='ctx'> </div><div class='del'>-	if (ret) {</div><div class='del'>-		fd_unref (newfd);</div><div class='del'>-		newfd = NULL;</div><div class='del'>-	}</div><div class='add'>+    if (ret) {</div><div class='add'>+        fd_unref(newfd);</div><div class='add'>+        newfd = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return newfd;</div><div class='add'>+    return newfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-__glfs_migrate_fd (struct glfs *fs, xlator_t *newsubvol, struct glfs_fd *glfd)</div><div class='add'>+__glfs_migrate_fd(struct glfs *fs, xlator_t *newsubvol, struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-	fd_t *oldfd = NULL;</div><div class='del'>-	fd_t *newfd = NULL;</div><div class='add'>+    fd_t *oldfd = NULL;</div><div class='add'>+    fd_t *newfd = NULL;</div><div class='ctx'> </div><div class='del'>-	oldfd = glfd-&gt;fd;</div><div class='add'>+    oldfd = glfd-&gt;fd;</div><div class='ctx'> </div><div class='del'>-	fs-&gt;migration_in_progress = 1;</div><div class='del'>-	pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		newfd = glfs_migrate_fd_safe (fs, newsubvol, oldfd);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-	fs-&gt;migration_in_progress = 0;</div><div class='del'>-	pthread_cond_broadcast (&amp;fs-&gt;cond);</div><div class='add'>+    fs-&gt;migration_in_progress = 1;</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        newfd = glfs_migrate_fd_safe(fs, newsubvol, oldfd);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    fs-&gt;migration_in_progress = 0;</div><div class='add'>+    pthread_cond_broadcast(&amp;fs-&gt;cond);</div><div class='ctx'> </div><div class='del'>-	return newfd;</div><div class='add'>+    return newfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-__glfs_resolve_fd (struct glfs *fs, xlator_t *subvol, struct glfs_fd *glfd)</div><div class='add'>+__glfs_resolve_fd(struct glfs *fs, xlator_t *subvol, struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-	fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-	if (glfd-&gt;fd-&gt;inode-&gt;table-&gt;xl == subvol)</div><div class='del'>-		return fd_ref (glfd-&gt;fd);</div><div class='add'>+    if (glfd-&gt;fd-&gt;inode-&gt;table-&gt;xl == subvol)</div><div class='add'>+        return fd_ref(glfd-&gt;fd);</div><div class='ctx'> </div><div class='del'>-	fd = __glfs_migrate_fd (fs, subvol, glfd);</div><div class='del'>-	if (!fd)</div><div class='del'>-		return NULL;</div><div class='add'>+    fd = __glfs_migrate_fd(fs, subvol, glfd);</div><div class='add'>+    if (!fd)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	if (subvol == fs-&gt;active_subvol) {</div><div class='del'>-		fd_unref (glfd-&gt;fd);</div><div class='del'>-		glfd-&gt;fd = fd_ref (fd);</div><div class='del'>-	}</div><div class='add'>+    if (subvol == fs-&gt;active_subvol) {</div><div class='add'>+        fd_unref(glfd-&gt;fd);</div><div class='add'>+        glfd-&gt;fd = fd_ref(fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-glfs_resolve_fd (struct glfs *fs, xlator_t *subvol, struct glfs_fd *glfd)</div><div class='add'>+glfs_resolve_fd(struct glfs *fs, xlator_t *subvol, struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-	fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		fd = __glfs_resolve_fd (fs, subvol, glfd);</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        fd = __glfs_resolve_fd(fs, subvol, glfd);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> </div><div class='del'>-	return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-__glfs_migrate_openfds (struct glfs *fs, xlator_t *subvol)</div><div class='add'>+__glfs_migrate_openfds(struct glfs *fs, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_fd *glfd = NULL;</div><div class='del'>-	fd_t *fd = NULL;</div><div class='del'>-</div><div class='del'>-	list_for_each_entry (glfd, &amp;fs-&gt;openfds, openfds) {</div><div class='del'>-		if (gf_uuid_is_null (glfd-&gt;fd-&gt;inode-&gt;gfid)) {</div><div class='del'>-			gf_msg (fs-&gt;volname, GF_LOG_INFO, 0,</div><div class='del'>-                                API_MSG_OPENFD_SKIPPED,</div><div class='del'>-				"skipping openfd %p/%p in graph %s (%d)",</div><div class='del'>-				glfd, glfd-&gt;fd,	graphid_str(subvol),</div><div class='del'>-				subvol-&gt;graph-&gt;id);</div><div class='del'>-			/* create in progress, defer */</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		fd = __glfs_migrate_fd (fs, subvol, glfd);</div><div class='del'>-		if (fd) {</div><div class='del'>-			fd_unref (glfd-&gt;fd);</div><div class='del'>-			glfd-&gt;fd = fd;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-}</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(glfd, &amp;fs-&gt;openfds, openfds)</div><div class='add'>+    {</div><div class='add'>+        if (gf_uuid_is_null(glfd-&gt;fd-&gt;inode-&gt;gfid)) {</div><div class='add'>+            gf_msg(fs-&gt;volname, GF_LOG_INFO, 0, API_MSG_OPENFD_SKIPPED,</div><div class='add'>+                   "skipping openfd %p/%p in graph %s (%d)", glfd, glfd-&gt;fd,</div><div class='add'>+                   graphid_str(subvol), subvol-&gt;graph-&gt;id);</div><div class='add'>+            /* create in progress, defer */</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        fd = __glfs_migrate_fd(fs, subvol, glfd);</div><div class='add'>+        if (fd) {</div><div class='add'>+            fd_unref(glfd-&gt;fd);</div><div class='add'>+            glfd-&gt;fd = fd;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* Note that though it appears that this function executes under fs-&gt;mutex,</div><div class='ctx'>  * it is not fully executed under fs-&gt;mutex. i.e. there are functions like</div><div class='hunk'>@@ -921,290 +898,284 @@ __glfs_migrate_openfds (struct glfs *fs, xlator_t *subvol)</div><div class='ctx'>  * function need not have the same value by the end of the function.</div><div class='ctx'>  */</div><div class='ctx'> xlator_t *</div><div class='del'>-__glfs_active_subvol (struct glfs *fs)</div><div class='add'>+__glfs_active_subvol(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	xlator_t      *new_subvol = NULL;</div><div class='del'>-	int            ret = -1;</div><div class='del'>-	inode_t       *new_cwd = NULL;</div><div class='del'>-</div><div class='del'>-	if (!fs-&gt;next_subvol)</div><div class='del'>-		return fs-&gt;active_subvol;</div><div class='del'>-</div><div class='del'>-	new_subvol = fs-&gt;mip_subvol = fs-&gt;next_subvol;</div><div class='del'>-        fs-&gt;next_subvol = NULL;</div><div class='del'>-</div><div class='del'>-	ret = __glfs_first_lookup (fs, new_subvol);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg (fs-&gt;volname, GF_LOG_INFO, errno,</div><div class='del'>-                        API_MSG_FIRST_LOOKUP_GRAPH_FAILED,</div><div class='del'>-			"first lookup on graph %s (%d) failed (%s)",</div><div class='del'>-			graphid_str (new_subvol), new_subvol-&gt;graph-&gt;id,</div><div class='del'>-			strerror (errno));</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (fs-&gt;cwd) {</div><div class='del'>-		new_cwd = __glfs_refresh_inode (fs, new_subvol, fs-&gt;cwd,</div><div class='del'>-                                                _gf_false);</div><div class='del'>-</div><div class='del'>-		if (!new_cwd) {</div><div class='del'>-			char buf1[64];</div><div class='del'>-			gf_msg (fs-&gt;volname, GF_LOG_INFO, errno,</div><div class='del'>-                                API_MSG_CWD_GRAPH_REF_FAILED,</div><div class='del'>-				"cwd refresh of %s graph %s (%d) failed (%s)",</div><div class='del'>-				uuid_utoa_r (fs-&gt;cwd-&gt;gfid, buf1),</div><div class='del'>-				graphid_str (new_subvol),</div><div class='del'>-				new_subvol-&gt;graph-&gt;id, strerror (errno));</div><div class='del'>-			return NULL;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	__glfs_migrate_openfds (fs, new_subvol);</div><div class='del'>-        /* TODO: Migrate the fds and inodes which have leases to the new graph (issue #350)*/</div><div class='del'>-</div><div class='del'>-	/* switching @active_subvol and @cwd</div><div class='del'>-	   should be atomic</div><div class='del'>-	*/</div><div class='del'>-	fs-&gt;old_subvol = fs-&gt;active_subvol;</div><div class='del'>-	fs-&gt;active_subvol = fs-&gt;mip_subvol;</div><div class='del'>-	fs-&gt;mip_subvol = NULL;</div><div class='del'>-</div><div class='del'>-	if (new_cwd) {</div><div class='del'>-		__glfs_cwd_set (fs, new_cwd);</div><div class='del'>-		inode_unref (new_cwd);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	gf_msg (fs-&gt;volname, GF_LOG_INFO, 0, API_MSG_SWITCHED_GRAPH,</div><div class='del'>-                "switched to graph %s (%d)",</div><div class='del'>-		graphid_str (new_subvol), new_subvol-&gt;graph-&gt;id);</div><div class='del'>-</div><div class='del'>-	return new_subvol;</div><div class='del'>-}</div><div class='add'>+    xlator_t *new_subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *new_cwd = NULL;</div><div class='add'>+</div><div class='add'>+    if (!fs-&gt;next_subvol)</div><div class='add'>+        return fs-&gt;active_subvol;</div><div class='add'>+</div><div class='add'>+    new_subvol = fs-&gt;mip_subvol = fs-&gt;next_subvol;</div><div class='add'>+    fs-&gt;next_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    ret = __glfs_first_lookup(fs, new_subvol);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(fs-&gt;volname, GF_LOG_INFO, errno,</div><div class='add'>+               API_MSG_FIRST_LOOKUP_GRAPH_FAILED,</div><div class='add'>+               "first lookup on graph %s (%d) failed (%s)",</div><div class='add'>+               graphid_str(new_subvol), new_subvol-&gt;graph-&gt;id, strerror(errno));</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fs-&gt;cwd) {</div><div class='add'>+        new_cwd = __glfs_refresh_inode(fs, new_subvol, fs-&gt;cwd, _gf_false);</div><div class='add'>+</div><div class='add'>+        if (!new_cwd) {</div><div class='add'>+            char buf1[64];</div><div class='add'>+            gf_msg(fs-&gt;volname, GF_LOG_INFO, errno,</div><div class='add'>+                   API_MSG_CWD_GRAPH_REF_FAILED,</div><div class='add'>+                   "cwd refresh of %s graph %s (%d) failed (%s)",</div><div class='add'>+                   uuid_utoa_r(fs-&gt;cwd-&gt;gfid, buf1), graphid_str(new_subvol),</div><div class='add'>+                   new_subvol-&gt;graph-&gt;id, strerror(errno));</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    __glfs_migrate_openfds(fs, new_subvol);</div><div class='add'>+    /* TODO: Migrate the fds and inodes which have leases to the new graph</div><div class='add'>+     * (issue #350)*/</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-priv_glfs_subvol_done (struct glfs *fs, xlator_t *subvol)</div><div class='del'>-{</div><div class='del'>-	int ref = 0;</div><div class='del'>-	xlator_t *active_subvol = NULL;</div><div class='add'>+    /* switching @active_subvol and @cwd</div><div class='add'>+       should be atomic</div><div class='add'>+    */</div><div class='add'>+    fs-&gt;old_subvol = fs-&gt;active_subvol;</div><div class='add'>+    fs-&gt;active_subvol = fs-&gt;mip_subvol;</div><div class='add'>+    fs-&gt;mip_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-	if (!subvol)</div><div class='del'>-		return;</div><div class='add'>+    if (new_cwd) {</div><div class='add'>+        __glfs_cwd_set(fs, new_cwd);</div><div class='add'>+        inode_unref(new_cwd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* For decrementing subvol-&gt;wind ref count we need not check/wait for</div><div class='del'>-         * migration-in-progress flag.</div><div class='del'>-         * Also glfs_subvol_done is called in call-back path therefore waiting</div><div class='del'>-         * for migration-in-progress flag can lead to dead-lock.</div><div class='del'>-         */</div><div class='del'>-        glfs_lock (fs, _gf_false);</div><div class='del'>-	{</div><div class='del'>-		ref = (--subvol-&gt;winds);</div><div class='del'>-		active_subvol = fs-&gt;active_subvol;</div><div class='del'>-	}</div><div class='del'>-        glfs_unlock (fs);</div><div class='del'>-</div><div class='del'>-	if (ref == 0) {</div><div class='del'>-		assert (subvol != active_subvol);</div><div class='del'>-		xlator_notify (subvol, GF_EVENT_PARENT_DOWN, subvol, NULL);</div><div class='del'>-	}</div><div class='add'>+    gf_msg(fs-&gt;volname, GF_LOG_INFO, 0, API_MSG_SWITCHED_GRAPH,</div><div class='add'>+           "switched to graph %s (%d)", graphid_str(new_subvol),</div><div class='add'>+           new_subvol-&gt;graph-&gt;id);</div><div class='add'>+</div><div class='add'>+    return new_subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_subvol_done, 3.4.0);</div><div class='add'>+void</div><div class='add'>+priv_glfs_subvol_done(struct glfs *fs, xlator_t *subvol)</div><div class='add'>+{</div><div class='add'>+    int ref = 0;</div><div class='add'>+    xlator_t *active_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    if (!subvol)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    /* For decrementing subvol-&gt;wind ref count we need not check/wait for</div><div class='add'>+     * migration-in-progress flag.</div><div class='add'>+     * Also glfs_subvol_done is called in call-back path therefore waiting</div><div class='add'>+     * for migration-in-progress flag can lead to dead-lock.</div><div class='add'>+     */</div><div class='add'>+    glfs_lock(fs, _gf_false);</div><div class='add'>+    {</div><div class='add'>+        ref = (--subvol-&gt;winds);</div><div class='add'>+        active_subvol = fs-&gt;active_subvol;</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='add'>+</div><div class='add'>+    if (ref == 0) {</div><div class='add'>+        assert(subvol != active_subvol);</div><div class='add'>+        xlator_notify(subvol, GF_EVENT_PARENT_DOWN, subvol, NULL);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='add'>+GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_subvol_done, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-priv_glfs_active_subvol (struct glfs *fs)</div><div class='add'>+priv_glfs_active_subvol(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	xlator_t      *subvol = NULL;</div><div class='del'>-	xlator_t      *old_subvol = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *old_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		subvol = __glfs_active_subvol (fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        subvol = __glfs_active_subvol(fs);</div><div class='ctx'> </div><div class='del'>-		if (subvol)</div><div class='del'>-			subvol-&gt;winds++;</div><div class='add'>+        if (subvol)</div><div class='add'>+            subvol-&gt;winds++;</div><div class='ctx'> </div><div class='del'>-		if (fs-&gt;old_subvol) {</div><div class='del'>-			old_subvol = fs-&gt;old_subvol;</div><div class='del'>-			fs-&gt;old_subvol = NULL;</div><div class='del'>-			old_subvol-&gt;switched = 1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='add'>+        if (fs-&gt;old_subvol) {</div><div class='add'>+            old_subvol = fs-&gt;old_subvol;</div><div class='add'>+            fs-&gt;old_subvol = NULL;</div><div class='add'>+            old_subvol-&gt;switched = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> </div><div class='del'>-	if (old_subvol)</div><div class='del'>-		priv_glfs_subvol_done (fs, old_subvol);</div><div class='add'>+    if (old_subvol)</div><div class='add'>+        priv_glfs_subvol_done(fs, old_subvol);</div><div class='ctx'> </div><div class='del'>-	return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_active_subvol, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__glfs_cwd_set (struct glfs *fs, inode_t *inode)</div><div class='add'>+__glfs_cwd_set(struct glfs *fs, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-	if (inode-&gt;table-&gt;xl != fs-&gt;active_subvol) {</div><div class='del'>-		inode = __glfs_refresh_inode (fs, fs-&gt;active_subvol, inode,</div><div class='del'>-                                              _gf_false);</div><div class='del'>-		if (!inode)</div><div class='del'>-			return -1;</div><div class='del'>-	} else {</div><div class='del'>-		inode_ref (inode);</div><div class='del'>-	}</div><div class='add'>+    if (inode-&gt;table-&gt;xl != fs-&gt;active_subvol) {</div><div class='add'>+        inode = __glfs_refresh_inode(fs, fs-&gt;active_subvol, inode, _gf_false);</div><div class='add'>+        if (!inode)</div><div class='add'>+            return -1;</div><div class='add'>+    } else {</div><div class='add'>+        inode_ref(inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (fs-&gt;cwd)</div><div class='del'>-		inode_unref (fs-&gt;cwd);</div><div class='add'>+    if (fs-&gt;cwd)</div><div class='add'>+        inode_unref(fs-&gt;cwd);</div><div class='ctx'> </div><div class='del'>-	fs-&gt;cwd = inode;</div><div class='add'>+    fs-&gt;cwd = inode;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_cwd_set (struct glfs *fs, inode_t *inode)</div><div class='add'>+glfs_cwd_set(struct glfs *fs, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		ret = __glfs_cwd_set (fs, inode);</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        ret = __glfs_cwd_set(fs, inode);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-__glfs_cwd_get (struct glfs *fs)</div><div class='add'>+__glfs_cwd_get(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	inode_t *cwd = NULL;</div><div class='add'>+    inode_t *cwd = NULL;</div><div class='ctx'> </div><div class='del'>-	if (!fs-&gt;cwd)</div><div class='del'>-		return NULL;</div><div class='add'>+    if (!fs-&gt;cwd)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	if (fs-&gt;cwd-&gt;table-&gt;xl == fs-&gt;active_subvol) {</div><div class='del'>-		cwd = inode_ref (fs-&gt;cwd);</div><div class='del'>-		return cwd;</div><div class='del'>-	}</div><div class='add'>+    if (fs-&gt;cwd-&gt;table-&gt;xl == fs-&gt;active_subvol) {</div><div class='add'>+        cwd = inode_ref(fs-&gt;cwd);</div><div class='add'>+        return cwd;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	cwd = __glfs_refresh_inode (fs, fs-&gt;active_subvol, fs-&gt;cwd, _gf_false);</div><div class='add'>+    cwd = __glfs_refresh_inode(fs, fs-&gt;active_subvol, fs-&gt;cwd, _gf_false);</div><div class='ctx'> </div><div class='del'>-	return cwd;</div><div class='add'>+    return cwd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-glfs_cwd_get (struct glfs *fs)</div><div class='add'>+glfs_cwd_get(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	inode_t *cwd = NULL;</div><div class='add'>+    inode_t *cwd = NULL;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		cwd = __glfs_cwd_get (fs);</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        cwd = __glfs_cwd_get(fs);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> </div><div class='del'>-	return cwd;</div><div class='add'>+    return cwd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-__glfs_resolve_inode (struct glfs *fs, xlator_t *subvol,</div><div class='del'>-		    struct glfs_object *object)</div><div class='add'>+__glfs_resolve_inode(struct glfs *fs, xlator_t *subvol,</div><div class='add'>+                     struct glfs_object *object)</div><div class='ctx'> {</div><div class='del'>-	inode_t *inode = NULL;</div><div class='del'>-        gf_boolean_t lookup_needed = _gf_false;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    gf_boolean_t lookup_needed = _gf_false;</div><div class='ctx'> </div><div class='del'>-        lookup_needed = inode_needs_lookup (object-&gt;inode, THIS);</div><div class='add'>+    lookup_needed = inode_needs_lookup(object-&gt;inode, THIS);</div><div class='ctx'> </div><div class='del'>-	if (!lookup_needed &amp;&amp; object-&gt;inode-&gt;table-&gt;xl == subvol)</div><div class='del'>-		return inode_ref (object-&gt;inode);</div><div class='add'>+    if (!lookup_needed &amp;&amp; object-&gt;inode-&gt;table-&gt;xl == subvol)</div><div class='add'>+        return inode_ref(object-&gt;inode);</div><div class='ctx'> </div><div class='del'>-	inode = __glfs_refresh_inode (fs, fs-&gt;active_subvol,</div><div class='del'>-                                      object-&gt;inode, lookup_needed);</div><div class='del'>-	if (!inode)</div><div class='del'>-		return NULL;</div><div class='add'>+    inode = __glfs_refresh_inode(fs, fs-&gt;active_subvol, object-&gt;inode,</div><div class='add'>+                                 lookup_needed);</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	if (subvol == fs-&gt;active_subvol) {</div><div class='del'>-		inode_unref (object-&gt;inode);</div><div class='del'>-		object-&gt;inode = inode_ref (inode);</div><div class='del'>-	}</div><div class='add'>+    if (subvol == fs-&gt;active_subvol) {</div><div class='add'>+        inode_unref(object-&gt;inode);</div><div class='add'>+        object-&gt;inode = inode_ref(inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-glfs_resolve_inode (struct glfs *fs, xlator_t *subvol,</div><div class='del'>-		    struct glfs_object *object)</div><div class='add'>+glfs_resolve_inode(struct glfs *fs, xlator_t *subvol,</div><div class='add'>+                   struct glfs_object *object)</div><div class='ctx'> {</div><div class='del'>-	inode_t *inode = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		inode = __glfs_resolve_inode(fs, subvol, object);</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        inode = __glfs_resolve_inode(fs, subvol, object);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> </div><div class='del'>-	return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_create_object (loc_t *loc, struct glfs_object **retobject)</div><div class='add'>+glfs_create_object(loc_t *loc, struct glfs_object **retobject)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_object *object = NULL;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='ctx'> </div><div class='del'>-	object = GF_CALLOC (1, sizeof(struct glfs_object),</div><div class='del'>-			    glfs_mt_glfs_object_t);</div><div class='del'>-	if (object == NULL) {</div><div class='del'>-		errno = ENOMEM;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    object = GF_CALLOC(1, sizeof(struct glfs_object), glfs_mt_glfs_object_t);</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	object-&gt;inode = loc-&gt;inode;</div><div class='del'>-	gf_uuid_copy (object-&gt;gfid, object-&gt;inode-&gt;gfid);</div><div class='add'>+    object-&gt;inode = loc-&gt;inode;</div><div class='add'>+    gf_uuid_copy(object-&gt;gfid, object-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	/* we hold the reference */</div><div class='del'>-	loc-&gt;inode = NULL;</div><div class='add'>+    /* we hold the reference */</div><div class='add'>+    loc-&gt;inode = NULL;</div><div class='ctx'> </div><div class='del'>-	*retobject = object;</div><div class='add'>+    *retobject = object;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct glfs_object *</div><div class='del'>-glfs_h_resolve_symlink (struct glfs *fs, struct glfs_object *object)</div><div class='add'>+glfs_h_resolve_symlink(struct glfs *fs, struct glfs_object *object)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        xlator_t                *subvol         = NULL;</div><div class='del'>-        loc_t                   sym_loc         = {0,};</div><div class='del'>-        struct iatt             iatt            = {0,};</div><div class='del'>-        char                    *lpath          = NULL;</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        struct glfs_object      *target_object  = NULL;</div><div class='del'>-</div><div class='del'>-        subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_resolve_symlink (fs, subvol, object-&gt;inode, &amp;lpath);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = glfs_resolve_at (fs, subvol, NULL, lpath,</div><div class='del'>-                               &amp;sym_loc, &amp;iatt,</div><div class='del'>-                              /* always recurisvely follow while</div><div class='del'>-                                following symlink</div><div class='del'>-                              */</div><div class='del'>-                               1, 0);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = glfs_create_object (&amp;sym_loc, &amp;target_object);</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t sym_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *lpath = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct glfs_object *target_object = NULL;</div><div class='add'>+</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_resolve_symlink(fs, subvol, object-&gt;inode, &amp;lpath);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfs_resolve_at(fs, subvol, NULL, lpath, &amp;sym_loc, &amp;iatt,</div><div class='add'>+                          /* always recurisvely follow while</div><div class='add'>+                            following symlink</div><div class='add'>+                          */</div><div class='add'>+                          1, 0);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glfs_create_object(&amp;sym_loc, &amp;target_object);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;sym_loc);</div><div class='del'>-        GF_FREE (lpath);</div><div class='del'>-        return target_object;</div><div class='add'>+    loc_wipe(&amp;sym_loc);</div><div class='add'>+    GF_FREE(lpath);</div><div class='add'>+    return target_object;</div><div class='ctx'> }</div><div class='head'>diff --git a/api/src/glfs.c b/api/src/glfs.c<br/>index 8ae3af61edb..d21cb8b334f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/api/src/glfs.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>api/src/glfs.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/api/src/glfs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>api/src/glfs.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>   TODO:</div><div class='ctx'>   - set proper pid/lk_owner to call frames (currently buried in syncop)</div><div class='hunk'>@@ -51,444 +50,422 @@</div><div class='ctx'> #include "glfs.h"</div><div class='ctx'> #include "glfs-internal.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-vol_assigned (cmd_args_t *args)</div><div class='add'>+vol_assigned(cmd_args_t *args)</div><div class='ctx'> {</div><div class='del'>-	return args-&gt;volfile || args-&gt;volfile_server;</div><div class='add'>+    return args-&gt;volfile || args-&gt;volfile_server;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_ctx_defaults_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-	call_pool_t   *pool = NULL;</div><div class='del'>-	int	       ret = -1;</div><div class='del'>-</div><div class='del'>-	if (!ctx) {</div><div class='del'>-		goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (THIS, glfs_mt_end + 1);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        API_MSG_MEM_ACCT_INIT_FAILED,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* reset ret to -1 so that we don't need to explicitly</div><div class='del'>-         * set it in all error paths before "goto err"</div><div class='del'>-         */</div><div class='add'>+    call_pool_t *pool = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ctx-&gt;process_uuid = generate_glusterfs_ctx_id ();</div><div class='del'>-	if (!ctx-&gt;process_uuid) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ctx-&gt;page_size	= 128 * GF_UNIT_KB;</div><div class='del'>-</div><div class='del'>-	ctx-&gt;iobuf_pool = iobuf_pool_new ();</div><div class='del'>-	if (!ctx-&gt;iobuf_pool) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ctx-&gt;event_pool = event_pool_new (DEFAULT_EVENT_POOL_SIZE,</div><div class='del'>-                                          STARTING_EVENT_THREADS);</div><div class='del'>-	if (!ctx-&gt;event_pool) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ctx-&gt;env = syncenv_new (0, 0, 0);</div><div class='del'>-	if (!ctx-&gt;env) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	pool = GF_CALLOC (1, sizeof (call_pool_t),</div><div class='del'>-			  glfs_mt_call_pool_t);</div><div class='del'>-	if (!pool) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* frame_mem_pool size 112 * 4k */</div><div class='del'>-	pool-&gt;frame_mem_pool = mem_pool_new (call_frame_t, 4096);</div><div class='del'>-	if (!pool-&gt;frame_mem_pool) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-	/* stack_mem_pool size 256 * 1024 */</div><div class='del'>-	pool-&gt;stack_mem_pool = mem_pool_new (call_stack_t, 1024);</div><div class='del'>-	if (!pool-&gt;stack_mem_pool) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ctx-&gt;stub_mem_pool = mem_pool_new (call_stub_t, 1024);</div><div class='del'>-	if (!ctx-&gt;stub_mem_pool) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ctx-&gt;dict_pool = mem_pool_new (dict_t, GF_MEMPOOL_COUNT_OF_DICT_T);</div><div class='del'>-	if (!ctx-&gt;dict_pool)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	ctx-&gt;dict_pair_pool = mem_pool_new (data_pair_t,</div><div class='del'>-					    GF_MEMPOOL_COUNT_OF_DATA_PAIR_T);</div><div class='del'>-	if (!ctx-&gt;dict_pair_pool)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	ctx-&gt;dict_data_pool = mem_pool_new (data_t, GF_MEMPOOL_COUNT_OF_DATA_T);</div><div class='del'>-	if (!ctx-&gt;dict_data_pool)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;logbuf_pool = mem_pool_new (log_buf_t,</div><div class='del'>-                                         GF_MEMPOOL_COUNT_OF_LRU_BUF_T);</div><div class='del'>-        if (!ctx-&gt;logbuf_pool)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-	INIT_LIST_HEAD (&amp;pool-&gt;all_frames);</div><div class='del'>-	INIT_LIST_HEAD (&amp;ctx-&gt;cmd_args.xlator_options);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;cmd_args.volfile_servers);</div><div class='del'>-</div><div class='del'>-	LOCK_INIT (&amp;pool-&gt;lock);</div><div class='del'>-	ctx-&gt;pool = pool;</div><div class='del'>-</div><div class='del'>-	ret = 0;</div><div class='add'>+    ret = xlator_mem_acct_init(THIS, glfs_mt_end + 1);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ENOMEM, API_MSG_MEM_ACCT_INIT_FAILED,</div><div class='add'>+               "Memory accounting init failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* reset ret to -1 so that we don't need to explicitly</div><div class='add'>+     * set it in all error paths before "goto err"</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;process_uuid = generate_glusterfs_ctx_id();</div><div class='add'>+    if (!ctx-&gt;process_uuid) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;page_size = 128 * GF_UNIT_KB;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;iobuf_pool = iobuf_pool_new();</div><div class='add'>+    if (!ctx-&gt;iobuf_pool) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;event_pool = event_pool_new(DEFAULT_EVENT_POOL_SIZE,</div><div class='add'>+                                     STARTING_EVENT_THREADS);</div><div class='add'>+    if (!ctx-&gt;event_pool) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;env = syncenv_new(0, 0, 0);</div><div class='add'>+    if (!ctx-&gt;env) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pool = GF_CALLOC(1, sizeof(call_pool_t), glfs_mt_call_pool_t);</div><div class='add'>+    if (!pool) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* frame_mem_pool size 112 * 4k */</div><div class='add'>+    pool-&gt;frame_mem_pool = mem_pool_new(call_frame_t, 4096);</div><div class='add'>+    if (!pool-&gt;frame_mem_pool) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    /* stack_mem_pool size 256 * 1024 */</div><div class='add'>+    pool-&gt;stack_mem_pool = mem_pool_new(call_stack_t, 1024);</div><div class='add'>+    if (!pool-&gt;stack_mem_pool) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;stub_mem_pool = mem_pool_new(call_stub_t, 1024);</div><div class='add'>+    if (!ctx-&gt;stub_mem_pool) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;dict_pool = mem_pool_new(dict_t, GF_MEMPOOL_COUNT_OF_DICT_T);</div><div class='add'>+    if (!ctx-&gt;dict_pool)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;dict_pair_pool = mem_pool_new(data_pair_t,</div><div class='add'>+                                       GF_MEMPOOL_COUNT_OF_DATA_PAIR_T);</div><div class='add'>+    if (!ctx-&gt;dict_pair_pool)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;dict_data_pool = mem_pool_new(data_t, GF_MEMPOOL_COUNT_OF_DATA_T);</div><div class='add'>+    if (!ctx-&gt;dict_data_pool)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;logbuf_pool = mem_pool_new(log_buf_t, GF_MEMPOOL_COUNT_OF_LRU_BUF_T);</div><div class='add'>+    if (!ctx-&gt;logbuf_pool)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;pool-&gt;all_frames);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;cmd_args.xlator_options);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;cmd_args.volfile_servers);</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;pool-&gt;lock);</div><div class='add'>+    ctx-&gt;pool = pool;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-	if (ret &amp;&amp; pool) {</div><div class='del'>-		if (pool-&gt;frame_mem_pool)</div><div class='del'>-			mem_pool_destroy (pool-&gt;frame_mem_pool);</div><div class='del'>-		if (pool-&gt;stack_mem_pool)</div><div class='del'>-			mem_pool_destroy (pool-&gt;stack_mem_pool);</div><div class='del'>-		GF_FREE (pool);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (ret &amp;&amp; ctx) {</div><div class='del'>-		if (ctx-&gt;stub_mem_pool)</div><div class='del'>-			mem_pool_destroy (ctx-&gt;stub_mem_pool);</div><div class='del'>-		if (ctx-&gt;dict_pool)</div><div class='del'>-			mem_pool_destroy (ctx-&gt;dict_pool);</div><div class='del'>-		if (ctx-&gt;dict_data_pool)</div><div class='del'>-			mem_pool_destroy (ctx-&gt;dict_data_pool);</div><div class='del'>-		if (ctx-&gt;dict_pair_pool)</div><div class='del'>-			mem_pool_destroy (ctx-&gt;dict_pair_pool);</div><div class='del'>-                if (ctx-&gt;logbuf_pool)</div><div class='del'>-                        mem_pool_destroy (ctx-&gt;logbuf_pool);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+    if (ret &amp;&amp; pool) {</div><div class='add'>+        if (pool-&gt;frame_mem_pool)</div><div class='add'>+            mem_pool_destroy(pool-&gt;frame_mem_pool);</div><div class='add'>+        if (pool-&gt;stack_mem_pool)</div><div class='add'>+            mem_pool_destroy(pool-&gt;stack_mem_pool);</div><div class='add'>+        GF_FREE(pool);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; ctx) {</div><div class='add'>+        if (ctx-&gt;stub_mem_pool)</div><div class='add'>+            mem_pool_destroy(ctx-&gt;stub_mem_pool);</div><div class='add'>+        if (ctx-&gt;dict_pool)</div><div class='add'>+            mem_pool_destroy(ctx-&gt;dict_pool);</div><div class='add'>+        if (ctx-&gt;dict_data_pool)</div><div class='add'>+            mem_pool_destroy(ctx-&gt;dict_data_pool);</div><div class='add'>+        if (ctx-&gt;dict_pair_pool)</div><div class='add'>+            mem_pool_destroy(ctx-&gt;dict_pair_pool);</div><div class='add'>+        if (ctx-&gt;logbuf_pool)</div><div class='add'>+            mem_pool_destroy(ctx-&gt;logbuf_pool);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-create_master (struct glfs *fs)</div><div class='add'>+create_master(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	int		 ret = 0;</div><div class='del'>-	xlator_t	*master = NULL;</div><div class='del'>-</div><div class='del'>-	master = GF_CALLOC (1, sizeof (*master),</div><div class='del'>-			    glfs_mt_xlator_t);</div><div class='del'>-	if (!master)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	master-&gt;name = gf_strdup ("gfapi");</div><div class='del'>-	if (!master-&gt;name)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	if (xlator_set_type (master, "mount/api") == -1) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, 0,</div><div class='del'>-                        API_MSG_MASTER_XLATOR_INIT_FAILED, "master xlator "</div><div class='del'>-                        "for %s initialization failed", fs-&gt;volname);</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	master-&gt;ctx	 = fs-&gt;ctx;</div><div class='del'>-	master-&gt;private	 = fs;</div><div class='del'>-	master-&gt;options	 = get_new_dict ();</div><div class='del'>-	if (!master-&gt;options)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	ret = xlator_init (master);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, 0,</div><div class='del'>-                        API_MSG_GFAPI_XLATOR_INIT_FAILED,</div><div class='del'>-			"failed to initialize gfapi translator");</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fs-&gt;ctx-&gt;master = master;</div><div class='del'>-	THIS = master;</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *master = NULL;</div><div class='add'>+</div><div class='add'>+    master = GF_CALLOC(1, sizeof(*master), glfs_mt_xlator_t);</div><div class='add'>+    if (!master)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    master-&gt;name = gf_strdup("gfapi");</div><div class='add'>+    if (!master-&gt;name)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (xlator_set_type(master, "mount/api") == -1) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, 0, API_MSG_MASTER_XLATOR_INIT_FAILED,</div><div class='add'>+               "master xlator "</div><div class='add'>+               "for %s initialization failed",</div><div class='add'>+               fs-&gt;volname);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    master-&gt;ctx = fs-&gt;ctx;</div><div class='add'>+    master-&gt;private = fs;</div><div class='add'>+    master-&gt;options = get_new_dict();</div><div class='add'>+    if (!master-&gt;options)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = xlator_init(master);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, 0, API_MSG_GFAPI_XLATOR_INIT_FAILED,</div><div class='add'>+               "failed to initialize gfapi translator");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs-&gt;ctx-&gt;master = master;</div><div class='add'>+    THIS = master;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-	if (master) {</div><div class='del'>-		xlator_destroy (master);</div><div class='del'>-	}</div><div class='add'>+    if (master) {</div><div class='add'>+        xlator_destroy(master);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static FILE *</div><div class='del'>-get_volfp (struct glfs *fs)</div><div class='add'>+get_volfp(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	cmd_args_t  *cmd_args = NULL;</div><div class='del'>-	FILE	    *specfp = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    FILE *specfp = NULL;</div><div class='ctx'> </div><div class='del'>-	cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-	if ((specfp = fopen (cmd_args-&gt;volfile, "r")) == NULL) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, errno,</div><div class='del'>-                        API_MSG_VOLFILE_OPEN_FAILED,</div><div class='del'>-			"volume file %s open failed: %s",</div><div class='del'>-			cmd_args-&gt;volfile,</div><div class='del'>-			strerror (errno));</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    if ((specfp = fopen(cmd_args-&gt;volfile, "r")) == NULL) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, errno, API_MSG_VOLFILE_OPEN_FAILED,</div><div class='add'>+               "volume file %s open failed: %s", cmd_args-&gt;volfile,</div><div class='add'>+               strerror(errno));</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	gf_msg_debug ("glfs", 0, "loading volume file %s", cmd_args-&gt;volfile);</div><div class='add'>+    gf_msg_debug("glfs", 0, "loading volume file %s", cmd_args-&gt;volfile);</div><div class='ctx'> </div><div class='del'>-	return specfp;</div><div class='add'>+    return specfp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_volumes_init (struct glfs *fs)</div><div class='add'>+glfs_volumes_init(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	FILE		   *fp = NULL;</div><div class='del'>-	cmd_args_t	   *cmd_args = NULL;</div><div class='del'>-	int		    ret = 0;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-	if (!vol_assigned (cmd_args))</div><div class='del'>-		return -1;</div><div class='add'>+    if (!vol_assigned(cmd_args))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	if (cmd_args-&gt;volfile_server) {</div><div class='del'>-		ret = glfs_mgmt_init (fs);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (cmd_args-&gt;volfile_server) {</div><div class='add'>+        ret = glfs_mgmt_init(fs);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	fp = get_volfp (fs);</div><div class='add'>+    fp = get_volfp(fs);</div><div class='ctx'> </div><div class='del'>-	if (!fp) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, ENOENT,</div><div class='del'>-                        API_MSG_VOL_SPEC_FILE_ERROR,</div><div class='del'>-			"Cannot reach volume specification file");</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (!fp) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, ENOENT, API_MSG_VOL_SPEC_FILE_ERROR,</div><div class='add'>+               "Cannot reach volume specification file");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = glfs_process_volfp (fs, fp);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = glfs_process_volfp(fs, fp);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ///////////////////////////////////////////////////////////////////////////////</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_set_xlator_option (struct glfs *fs, const char *xlator,</div><div class='del'>-                            const char *key, const char *value)</div><div class='add'>+pub_glfs_set_xlator_option(struct glfs *fs, const char *xlator, const char *key,</div><div class='add'>+                           const char *value)</div><div class='ctx'> {</div><div class='del'>-	xlator_cmdline_option_t *option = NULL;</div><div class='add'>+    xlator_cmdline_option_t *option = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	option = GF_CALLOC (1, sizeof (*option),</div><div class='del'>-			    glfs_mt_xlator_cmdline_option_t);</div><div class='del'>-	if (!option)</div><div class='del'>-		goto enomem;</div><div class='add'>+    option = GF_CALLOC(1, sizeof(*option), glfs_mt_xlator_cmdline_option_t);</div><div class='add'>+    if (!option)</div><div class='add'>+        goto enomem;</div><div class='ctx'> </div><div class='del'>-	INIT_LIST_HEAD (&amp;option-&gt;cmd_args);</div><div class='add'>+    INIT_LIST_HEAD(&amp;option-&gt;cmd_args);</div><div class='ctx'> </div><div class='del'>-	option-&gt;volume = gf_strdup (xlator);</div><div class='del'>-	if (!option-&gt;volume)</div><div class='del'>-		goto enomem;</div><div class='del'>-	option-&gt;key = gf_strdup (key);</div><div class='del'>-	if (!option-&gt;key)</div><div class='del'>-		goto enomem;</div><div class='del'>-	option-&gt;value = gf_strdup (value);</div><div class='del'>-	if (!option-&gt;value)</div><div class='del'>-		goto enomem;</div><div class='add'>+    option-&gt;volume = gf_strdup(xlator);</div><div class='add'>+    if (!option-&gt;volume)</div><div class='add'>+        goto enomem;</div><div class='add'>+    option-&gt;key = gf_strdup(key);</div><div class='add'>+    if (!option-&gt;key)</div><div class='add'>+        goto enomem;</div><div class='add'>+    option-&gt;value = gf_strdup(value);</div><div class='add'>+    if (!option-&gt;value)</div><div class='add'>+        goto enomem;</div><div class='ctx'> </div><div class='del'>-	list_add (&amp;option-&gt;cmd_args, &amp;fs-&gt;ctx-&gt;cmd_args.xlator_options);</div><div class='add'>+    list_add(&amp;option-&gt;cmd_args, &amp;fs-&gt;ctx-&gt;cmd_args.xlator_options);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> enomem:</div><div class='del'>-	errno = ENOMEM;</div><div class='add'>+    errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-	if (!option) {</div><div class='del'>-                __GLFS_EXIT_FS;</div><div class='del'>-		return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!option) {</div><div class='add'>+        __GLFS_EXIT_FS;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	GF_FREE (option-&gt;volume);</div><div class='del'>-	GF_FREE (option-&gt;key);</div><div class='del'>-	GF_FREE (option-&gt;value);</div><div class='del'>-	GF_FREE (option);</div><div class='add'>+    GF_FREE(option-&gt;volume);</div><div class='add'>+    GF_FREE(option-&gt;key);</div><div class='add'>+    GF_FREE(option-&gt;value);</div><div class='add'>+    GF_FREE(option);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_set_xlator_option, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_unset_volfile_server (struct glfs *fs, const char *transport,</div><div class='del'>-                               const char *host, const int port)</div><div class='add'>+pub_glfs_unset_volfile_server(struct glfs *fs, const char *transport,</div><div class='add'>+                              const char *host, const int port)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t       *cmd_args = NULL;</div><div class='del'>-        server_cmdline_t *server = NULL;</div><div class='del'>-        server_cmdline_t *tmp = NULL;</div><div class='del'>-        char             *transport_val = NULL;</div><div class='del'>-        int               port_val = 0;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!fs || !host) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        if (transport) {</div><div class='del'>-                transport_val = gf_strdup (transport);</div><div class='del'>-        } else {</div><div class='del'>-                transport_val = gf_strdup (GF_DEFAULT_VOLFILE_TRANSPORT);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!transport_val) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (port) {</div><div class='del'>-                port_val = port;</div><div class='del'>-        } else {</div><div class='del'>-                port_val = GF_DEFAULT_BASE_PORT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (server, tmp,</div><div class='del'>-                                  &amp;cmd_args-&gt;curr_server-&gt;list,</div><div class='del'>-                                  list) {</div><div class='del'>-                if ((!strcmp(server-&gt;volfile_server, host) &amp;&amp;</div><div class='del'>-                     !strcmp(server-&gt;transport, transport_val) &amp;&amp;</div><div class='del'>-                     (server-&gt;port == port_val))) {</div><div class='del'>-                        list_del (&amp;server-&gt;list);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    server_cmdline_t *server = NULL;</div><div class='add'>+    server_cmdline_t *tmp = NULL;</div><div class='add'>+    char *transport_val = NULL;</div><div class='add'>+    int port_val = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!fs || !host) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (transport) {</div><div class='add'>+        transport_val = gf_strdup(transport);</div><div class='add'>+    } else {</div><div class='add'>+        transport_val = gf_strdup(GF_DEFAULT_VOLFILE_TRANSPORT);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!transport_val) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (port) {</div><div class='add'>+        port_val = port;</div><div class='add'>+    } else {</div><div class='add'>+        port_val = GF_DEFAULT_BASE_PORT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(server, tmp, &amp;cmd_args-&gt;curr_server-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if ((!strcmp(server-&gt;volfile_server, host) &amp;&amp;</div><div class='add'>+             !strcmp(server-&gt;transport, transport_val) &amp;&amp;</div><div class='add'>+             (server-&gt;port == port_val))) {</div><div class='add'>+            list_del(&amp;server-&gt;list);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (transport_val);</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    GF_FREE(transport_val);</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_unset_volfile_server, 3.5.1);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_set_volfile_server (struct glfs *fs, const char *transport,</div><div class='del'>-                             const char *host, int port)</div><div class='add'>+pub_glfs_set_volfile_server(struct glfs *fs, const char *transport,</div><div class='add'>+                            const char *host, int port)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t            *cmd_args = NULL;</div><div class='del'>-        int                    ret = -1;</div><div class='del'>-        char                  *server_host = NULL;</div><div class='del'>-        char                  *server_transport = NULL;</div><div class='del'>-</div><div class='del'>-        if (!fs || !host) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *server_host = NULL;</div><div class='add'>+    char *server_transport = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='del'>-        cmd_args-&gt;max_connect_attempts = 1;</div><div class='del'>-</div><div class='del'>-        server_host = gf_strdup (host);</div><div class='del'>-        if (!server_host) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (transport) {</div><div class='del'>-                /* volfile fetch support over tcp|unix only */</div><div class='del'>-                if (!strcmp(transport, "tcp") || !strcmp(transport, "unix")) {</div><div class='del'>-                        server_transport = gf_strdup (transport);</div><div class='del'>-                } else if (!strcmp(transport, "rdma")) {</div><div class='del'>-                        server_transport =</div><div class='del'>-                                gf_strdup (GF_DEFAULT_VOLFILE_TRANSPORT);</div><div class='del'>-                        gf_msg ("glfs", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                API_MSG_INVALID_ENTRY,</div><div class='del'>-                                "transport RDMA is deprecated, "</div><div class='del'>-                                "falling back to tcp");</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg ("glfs", GF_LOG_TRACE, EINVAL,</div><div class='del'>-                                API_MSG_INVALID_ENTRY,</div><div class='del'>-                                "transport %s is not supported, "</div><div class='del'>-                                "possible values tcp|unix",</div><div class='del'>-                                transport);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (!fs || !host) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args-&gt;max_connect_attempts = 1;</div><div class='add'>+</div><div class='add'>+    server_host = gf_strdup(host);</div><div class='add'>+    if (!server_host) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (transport) {</div><div class='add'>+        /* volfile fetch support over tcp|unix only */</div><div class='add'>+        if (!strcmp(transport, "tcp") || !strcmp(transport, "unix")) {</div><div class='add'>+            server_transport = gf_strdup(transport);</div><div class='add'>+        } else if (!strcmp(transport, "rdma")) {</div><div class='add'>+            server_transport = gf_strdup(GF_DEFAULT_VOLFILE_TRANSPORT);</div><div class='add'>+            gf_msg("glfs", GF_LOG_WARNING, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+                   "transport RDMA is deprecated, "</div><div class='add'>+                   "falling back to tcp");</div><div class='ctx'>         } else {</div><div class='del'>-                server_transport = gf_strdup (GF_DEFAULT_VOLFILE_TRANSPORT);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!server_transport) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!port) {</div><div class='del'>-                port = GF_DEFAULT_BASE_PORT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!strcmp(server_transport, "unix")) {</div><div class='del'>-                port = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_set_volfile_server_common(cmd_args, server_host,</div><div class='del'>-                                           server_transport, port);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("glfs", GF_LOG_ERROR,</div><div class='del'>-                        "failed to set volfile server: %s", strerror (errno));</div><div class='add'>+            gf_msg("glfs", GF_LOG_TRACE, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+                   "transport %s is not supported, "</div><div class='add'>+                   "possible values tcp|unix",</div><div class='add'>+                   transport);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        server_transport = gf_strdup(GF_DEFAULT_VOLFILE_TRANSPORT);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!server_transport) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!port) {</div><div class='add'>+        port = GF_DEFAULT_BASE_PORT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(server_transport, "unix")) {</div><div class='add'>+        port = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_set_volfile_server_common(cmd_args, server_host, server_transport,</div><div class='add'>+                                       port);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("glfs", GF_LOG_ERROR, "failed to set volfile server: %s",</div><div class='add'>+               strerror(errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (server_host) {</div><div class='del'>-                GF_FREE (server_host);</div><div class='del'>-        }</div><div class='add'>+    if (server_host) {</div><div class='add'>+        GF_FREE(server_host);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (server_transport) {</div><div class='del'>-                GF_FREE (server_transport);</div><div class='del'>-        }</div><div class='add'>+    if (server_transport) {</div><div class='add'>+        GF_FREE(server_transport);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_set_volfile_server, 3.4.0);</div><div class='hunk'>@@ -497,294 +474,288 @@ GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_set_volfile_server, 3.4.0);</div><div class='ctx'>  * Used to free the arguments allocated by glfs_set_volfile_server()</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-glfs_free_volfile_servers (cmd_args_t *cmd_args)</div><div class='add'>+glfs_free_volfile_servers(cmd_args_t *cmd_args)</div><div class='ctx'> {</div><div class='del'>-        server_cmdline_t *server = NULL;</div><div class='del'>-        server_cmdline_t *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, cmd_args, out);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (server, tmp, &amp;cmd_args-&gt;volfile_servers,</div><div class='del'>-                                  list) {</div><div class='del'>-                list_del_init (&amp;server-&gt;list);</div><div class='del'>-                GF_FREE (server-&gt;volfile_server);</div><div class='del'>-                GF_FREE (server-&gt;transport);</div><div class='del'>-                GF_FREE (server);</div><div class='del'>-        }</div><div class='del'>-        cmd_args-&gt;curr_server = NULL;</div><div class='add'>+    server_cmdline_t *server = NULL;</div><div class='add'>+    server_cmdline_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, cmd_args, out);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(server, tmp, &amp;cmd_args-&gt;volfile_servers, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;server-&gt;list);</div><div class='add'>+        GF_FREE(server-&gt;volfile_server);</div><div class='add'>+        GF_FREE(server-&gt;transport);</div><div class='add'>+        GF_FREE(server);</div><div class='add'>+    }</div><div class='add'>+    cmd_args-&gt;curr_server = NULL;</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_free_xlator_options (cmd_args_t *cmd_args)</div><div class='add'>+glfs_free_xlator_options(cmd_args_t *cmd_args)</div><div class='ctx'> {</div><div class='del'>-        xlator_cmdline_option_t *xo     = NULL;</div><div class='del'>-        xlator_cmdline_option_t *tmp_xo = NULL;</div><div class='del'>-</div><div class='del'>-        if (!&amp;(cmd_args-&gt;xlator_options))</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (xo, tmp_xo, &amp;cmd_args-&gt;xlator_options,</div><div class='del'>-                                  cmd_args) {</div><div class='del'>-                list_del_init (&amp;xo-&gt;cmd_args);</div><div class='del'>-                GF_FREE (xo-&gt;volume);</div><div class='del'>-                GF_FREE (xo-&gt;key);</div><div class='del'>-                GF_FREE (xo-&gt;value);</div><div class='del'>-                GF_FREE (xo);</div><div class='del'>-        }</div><div class='add'>+    xlator_cmdline_option_t *xo = NULL;</div><div class='add'>+    xlator_cmdline_option_t *tmp_xo = NULL;</div><div class='add'>+</div><div class='add'>+    if (!&amp;(cmd_args-&gt;xlator_options))</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(xo, tmp_xo, &amp;cmd_args-&gt;xlator_options, cmd_args)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;xo-&gt;cmd_args);</div><div class='add'>+        GF_FREE(xo-&gt;volume);</div><div class='add'>+        GF_FREE(xo-&gt;key);</div><div class='add'>+        GF_FREE(xo-&gt;value);</div><div class='add'>+        GF_FREE(xo);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_setfsuid (uid_t fsuid)</div><div class='add'>+pub_glfs_setfsuid(uid_t fsuid)</div><div class='ctx'> {</div><div class='del'>-         /* TODO:</div><div class='del'>-         * - Set the THIS and restore it appropriately</div><div class='del'>-         */</div><div class='del'>-	return syncopctx_setfsuid (&amp;fsuid);</div><div class='add'>+    /* TODO:</div><div class='add'>+     * - Set the THIS and restore it appropriately</div><div class='add'>+     */</div><div class='add'>+    return syncopctx_setfsuid(&amp;fsuid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setfsuid, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_setfsgid (gid_t fsgid)</div><div class='add'>+pub_glfs_setfsgid(gid_t fsgid)</div><div class='ctx'> {</div><div class='del'>-         /* TODO:</div><div class='del'>-         * - Set the THIS and restore it appropriately</div><div class='del'>-         */</div><div class='del'>-	return syncopctx_setfsgid (&amp;fsgid);</div><div class='add'>+    /* TODO:</div><div class='add'>+     * - Set the THIS and restore it appropriately</div><div class='add'>+     */</div><div class='add'>+    return syncopctx_setfsgid(&amp;fsgid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setfsgid, 3.4.2);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_setfsgroups (size_t size, const gid_t *list)</div><div class='add'>+pub_glfs_setfsgroups(size_t size, const gid_t *list)</div><div class='ctx'> {</div><div class='del'>-         /* TODO:</div><div class='del'>-         * - Set the THIS and restore it appropriately</div><div class='del'>-         */</div><div class='del'>-	return syncopctx_setfsgroups(size, list);</div><div class='add'>+    /* TODO:</div><div class='add'>+     * - Set the THIS and restore it appropriately</div><div class='add'>+     */</div><div class='add'>+    return syncopctx_setfsgroups(size, list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setfsgroups, 3.4.2);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_setfsleaseid (glfs_leaseid_t leaseid)</div><div class='add'>+pub_glfs_setfsleaseid(glfs_leaseid_t leaseid)</div><div class='ctx'> {</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-        char         *gleaseid = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *gleaseid = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, leaseid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, leaseid, out);</div><div class='ctx'> </div><div class='del'>-        gleaseid = gf_leaseid_get();</div><div class='del'>-        if (gleaseid) {</div><div class='del'>-                memcpy (gleaseid, leaseid, LEASE_ID_SIZE);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    gleaseid = gf_leaseid_get();</div><div class='add'>+    if (gleaseid) {</div><div class='add'>+        memcpy(gleaseid, leaseid, LEASE_ID_SIZE);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setfsleaseid, 4.0.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-get_fop_attr_glfd (dict_t **fop_attr, struct glfs_fd *glfd)</div><div class='add'>+get_fop_attr_glfd(dict_t **fop_attr, struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        char *leaseid            = NULL;</div><div class='del'>-        int   ret                = 0;</div><div class='del'>-        gf_boolean_t dict_create = _gf_false;</div><div class='del'>-</div><div class='del'>-        leaseid = GF_MALLOC (LEASE_ID_SIZE, gf_common_mt_char);</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG("gfapi", leaseid, ret, "lease id alloc failed", out);</div><div class='del'>-        memcpy (leaseid, glfd-&gt;lease_id, LEASE_ID_SIZE);</div><div class='del'>-        if (*fop_attr == NULL) {</div><div class='del'>-                *fop_attr = dict_new ();</div><div class='del'>-                dict_create = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG("gfapi", *fop_attr, ret, "dict_new failed", out);</div><div class='del'>-        ret = dict_set_static_bin (*fop_attr, "lease-id", leaseid, LEASE_ID_SIZE);</div><div class='add'>+    char *leaseid = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t dict_create = _gf_false;</div><div class='add'>+</div><div class='add'>+    leaseid = GF_MALLOC(LEASE_ID_SIZE, gf_common_mt_char);</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG("gfapi", leaseid, ret, "lease id alloc failed", out);</div><div class='add'>+    memcpy(leaseid, glfd-&gt;lease_id, LEASE_ID_SIZE);</div><div class='add'>+    if (*fop_attr == NULL) {</div><div class='add'>+        *fop_attr = dict_new();</div><div class='add'>+        dict_create = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG("gfapi", *fop_attr, ret, "dict_new failed", out);</div><div class='add'>+    ret = dict_set_static_bin(*fop_attr, "lease-id", leaseid, LEASE_ID_SIZE);</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (leaseid);</div><div class='del'>-                if (dict_create) {</div><div class='del'>-                        if (*fop_attr)</div><div class='del'>-                                dict_unref (*fop_attr);</div><div class='del'>-                        *fop_attr = NULL;</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(leaseid);</div><div class='add'>+        if (dict_create) {</div><div class='add'>+            if (*fop_attr)</div><div class='add'>+                dict_unref(*fop_attr);</div><div class='add'>+            *fop_attr = NULL;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-set_fop_attr_glfd (struct glfs_fd *glfd)</div><div class='add'>+set_fop_attr_glfd(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        char     *lease_id = NULL;</div><div class='del'>-        int       ret      = -1;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        lease_id = gf_existing_leaseid ();</div><div class='del'>-        if (lease_id) {</div><div class='del'>-                memcpy (glfd-&gt;lease_id, lease_id, LEASE_ID_SIZE);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    lease_id = gf_existing_leaseid();</div><div class='add'>+    if (lease_id) {</div><div class='add'>+        memcpy(glfd-&gt;lease_id, lease_id, LEASE_ID_SIZE);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-get_fop_attr_thrd_key (dict_t **fop_attr)</div><div class='add'>+get_fop_attr_thrd_key(dict_t **fop_attr)</div><div class='ctx'> {</div><div class='del'>-        char     *lease_id       = NULL;</div><div class='del'>-        int       ret            = 0;</div><div class='del'>-        gf_boolean_t dict_create = _gf_false;</div><div class='del'>-</div><div class='del'>-        lease_id = gf_existing_leaseid ();</div><div class='del'>-        if (lease_id) {</div><div class='del'>-                if (*fop_attr == NULL) {</div><div class='del'>-                        *fop_attr = dict_new ();</div><div class='del'>-                        dict_create = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                GF_CHECK_ALLOC_AND_LOG("gfapi", *fop_attr, ret, "dict_new failed", out);</div><div class='del'>-                ret = dict_set_bin (*fop_attr, "lease-id", gf_strdup (lease_id),</div><div class='del'>-                                    LEASE_ID_SIZE);</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t dict_create = _gf_false;</div><div class='add'>+</div><div class='add'>+    lease_id = gf_existing_leaseid();</div><div class='add'>+    if (lease_id) {</div><div class='add'>+        if (*fop_attr == NULL) {</div><div class='add'>+            *fop_attr = dict_new();</div><div class='add'>+            dict_create = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+        GF_CHECK_ALLOC_AND_LOG("gfapi", *fop_attr, ret, "dict_new failed", out);</div><div class='add'>+        ret = dict_set_bin(*fop_attr, "lease-id", gf_strdup(lease_id),</div><div class='add'>+                           LEASE_ID_SIZE);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict_create) {</div><div class='del'>-                if (*fop_attr)</div><div class='del'>-                        dict_unref (*fop_attr);</div><div class='del'>-                *fop_attr = NULL;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; dict_create) {</div><div class='add'>+        if (*fop_attr)</div><div class='add'>+            dict_unref(*fop_attr);</div><div class='add'>+        *fop_attr = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unset_fop_attr (dict_t **fop_attr)</div><div class='add'>+unset_fop_attr(dict_t **fop_attr)</div><div class='ctx'> {</div><div class='del'>-        char     *lease_id = NULL;</div><div class='del'>-        lease_id = gf_existing_leaseid ();</div><div class='del'>-        if (lease_id)</div><div class='del'>-                memset (lease_id, 0, LEASE_ID_SIZE);</div><div class='del'>-        if (*fop_attr) {</div><div class='del'>-                dict_unref (*fop_attr);</div><div class='del'>-                *fop_attr = NULL;</div><div class='del'>-        }</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    lease_id = gf_existing_leaseid();</div><div class='add'>+    if (lease_id)</div><div class='add'>+        memset(lease_id, 0, LEASE_ID_SIZE);</div><div class='add'>+    if (*fop_attr) {</div><div class='add'>+        dict_unref(*fop_attr);</div><div class='add'>+        *fop_attr = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> struct glfs *</div><div class='del'>-pub_glfs_from_glfd (struct glfs_fd *glfd)</div><div class='add'>+pub_glfs_from_glfd(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-	return glfd-&gt;fs;</div><div class='add'>+    return glfd-&gt;fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_from_glfd, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfs_fd_destroy (struct glfs_fd *glfd)</div><div class='add'>+glfs_fd_destroy(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-        if (!glfd)</div><div class='del'>-                return;</div><div class='add'>+    if (!glfd)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (glfd-&gt;fs, _gf_true);</div><div class='del'>-        {</div><div class='del'>-                list_del_init (&amp;glfd-&gt;openfds);</div><div class='del'>-        }</div><div class='del'>-        glfs_unlock (glfd-&gt;fs);</div><div class='add'>+    glfs_lock(glfd-&gt;fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;glfd-&gt;openfds);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(glfd-&gt;fs);</div><div class='ctx'> </div><div class='del'>-        if (glfd-&gt;fd) {</div><div class='del'>-                fd_unref (glfd-&gt;fd);</div><div class='del'>-                glfd-&gt;fd = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (glfd-&gt;fd) {</div><div class='add'>+        fd_unref(glfd-&gt;fd);</div><div class='add'>+        glfd-&gt;fd = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (glfd-&gt;readdirbuf);</div><div class='add'>+    GF_FREE(glfd-&gt;readdirbuf);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (glfd);</div><div class='add'>+    GF_FREE(glfd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs_fd *</div><div class='del'>-glfs_fd_new (struct glfs *fs)</div><div class='add'>+glfs_fd_new(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	struct glfs_fd  *glfd = NULL;</div><div class='add'>+    struct glfs_fd *glfd = NULL;</div><div class='ctx'> </div><div class='del'>-	glfd = GF_CALLOC (1, sizeof (*glfd), glfs_mt_glfs_fd_t);</div><div class='del'>-	if (!glfd)</div><div class='del'>-		return NULL;</div><div class='add'>+    glfd = GF_CALLOC(1, sizeof(*glfd), glfs_mt_glfs_fd_t);</div><div class='add'>+    if (!glfd)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	glfd-&gt;fs = fs;</div><div class='add'>+    glfd-&gt;fs = fs;</div><div class='ctx'> </div><div class='del'>-	INIT_LIST_HEAD (&amp;glfd-&gt;openfds);</div><div class='add'>+    INIT_LIST_HEAD(&amp;glfd-&gt;openfds);</div><div class='ctx'> </div><div class='del'>-        GF_REF_INIT (glfd, glfs_fd_destroy);</div><div class='add'>+    GF_REF_INIT(glfd, glfs_fd_destroy);</div><div class='ctx'> </div><div class='del'>-	return glfd;</div><div class='add'>+    return glfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-glfs_fd_bind (struct glfs_fd *glfd)</div><div class='add'>+glfs_fd_bind(struct glfs_fd *glfd)</div><div class='ctx'> {</div><div class='del'>-	struct glfs *fs = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='ctx'> </div><div class='del'>-	fs = glfd-&gt;fs;</div><div class='add'>+    fs = glfd-&gt;fs;</div><div class='ctx'> </div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		list_add_tail (&amp;glfd-&gt;openfds, &amp;fs-&gt;openfds);</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;glfd-&gt;openfds, &amp;fs-&gt;openfds);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void *</div><div class='del'>-glfs_poller (void *data)</div><div class='add'>+glfs_poller(void *data)</div><div class='ctx'> {</div><div class='del'>-	struct glfs  *fs = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='ctx'> </div><div class='del'>-	fs = data;</div><div class='add'>+    fs = data;</div><div class='ctx'> </div><div class='del'>-	event_dispatch (fs-&gt;ctx-&gt;event_pool);</div><div class='add'>+    event_dispatch(fs-&gt;ctx-&gt;event_pool);</div><div class='ctx'> </div><div class='del'>-	return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct glfs *</div><div class='del'>-glfs_new_fs (const char *volname)</div><div class='add'>+glfs_new_fs(const char *volname)</div><div class='ctx'> {</div><div class='del'>-        struct glfs     *fs             = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='ctx'> </div><div class='del'>-        fs = CALLOC (1, sizeof (*fs));</div><div class='del'>-        if (!fs)</div><div class='del'>-                return NULL;</div><div class='add'>+    fs = CALLOC(1, sizeof(*fs));</div><div class='add'>+    if (!fs)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;fs-&gt;openfds);</div><div class='del'>-        INIT_LIST_HEAD (&amp;fs-&gt;upcall_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fs-&gt;openfds);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fs-&gt;upcall_list);</div><div class='ctx'> </div><div class='del'>-        PTHREAD_MUTEX_INIT (&amp;fs-&gt;mutex, NULL, fs-&gt;pthread_flags,</div><div class='del'>-                            GLFS_INIT_MUTEX, err);</div><div class='add'>+    PTHREAD_MUTEX_INIT(&amp;fs-&gt;mutex, NULL, fs-&gt;pthread_flags, GLFS_INIT_MUTEX,</div><div class='add'>+                       err);</div><div class='ctx'> </div><div class='del'>-        PTHREAD_COND_INIT (&amp;fs-&gt;cond, NULL, fs-&gt;pthread_flags,</div><div class='del'>-                           GLFS_INIT_COND, err);</div><div class='add'>+    PTHREAD_COND_INIT(&amp;fs-&gt;cond, NULL, fs-&gt;pthread_flags, GLFS_INIT_COND, err);</div><div class='ctx'> </div><div class='del'>-        PTHREAD_COND_INIT (&amp;fs-&gt;child_down_cond, NULL, fs-&gt;pthread_flags,</div><div class='del'>-                           GLFS_INIT_COND_CHILD, err);</div><div class='add'>+    PTHREAD_COND_INIT(&amp;fs-&gt;child_down_cond, NULL, fs-&gt;pthread_flags,</div><div class='add'>+                      GLFS_INIT_COND_CHILD, err);</div><div class='ctx'> </div><div class='del'>-        PTHREAD_MUTEX_INIT (&amp;fs-&gt;upcall_list_mutex, NULL, fs-&gt;pthread_flags,</div><div class='del'>-                            GLFS_INIT_MUTEX_UPCALL, err);</div><div class='add'>+    PTHREAD_MUTEX_INIT(&amp;fs-&gt;upcall_list_mutex, NULL, fs-&gt;pthread_flags,</div><div class='add'>+                       GLFS_INIT_MUTEX_UPCALL, err);</div><div class='ctx'> </div><div class='del'>-        fs-&gt;volname = strdup (volname);</div><div class='del'>-        if (!fs-&gt;volname)</div><div class='del'>-                goto err;</div><div class='add'>+    fs-&gt;volname = strdup(volname);</div><div class='add'>+    if (!fs-&gt;volname)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        fs-&gt;pin_refcnt = 0;</div><div class='del'>-        fs-&gt;upcall_events = 0;</div><div class='del'>-        fs-&gt;up_cbk = NULL;</div><div class='del'>-        fs-&gt;up_data = NULL;</div><div class='add'>+    fs-&gt;pin_refcnt = 0;</div><div class='add'>+    fs-&gt;upcall_events = 0;</div><div class='add'>+    fs-&gt;up_cbk = NULL;</div><div class='add'>+    fs-&gt;up_data = NULL;</div><div class='ctx'> </div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        glfs_free_from_ctx (fs);</div><div class='del'>-        return NULL;</div><div class='add'>+    glfs_free_from_ctx(fs);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> extern xlator_t global_xlator;</div><div class='hunk'>@@ -792,785 +763,769 @@ extern glusterfs_ctx_t *global_ctx;</div><div class='ctx'> extern pthread_mutex_t global_ctx_mutex;</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfs_init_global_ctx ()</div><div class='add'>+glfs_init_global_ctx()</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;global_ctx_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (global_xlator.ctx)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    pthread_mutex_lock(&amp;global_ctx_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (global_xlator.ctx)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                ctx = glusterfs_ctx_new ();</div><div class='del'>-                if (!ctx) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        ctx = glusterfs_ctx_new();</div><div class='add'>+        if (!ctx) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_log_globals_init (ctx, GF_LOG_NONE);</div><div class='add'>+        gf_log_globals_init(ctx, GF_LOG_NONE);</div><div class='ctx'> </div><div class='del'>-                global_ctx = ctx;</div><div class='del'>-                global_xlator.ctx = global_ctx;</div><div class='add'>+        global_ctx = ctx;</div><div class='add'>+        global_xlator.ctx = global_ctx;</div><div class='ctx'> </div><div class='del'>-                ret = glusterfs_ctx_defaults_init (ctx);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        global_ctx = NULL;</div><div class='del'>-                        global_xlator.ctx = NULL;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        ret = glusterfs_ctx_defaults_init(ctx);</div><div class='add'>+        if (ret) {</div><div class='add'>+            global_ctx = NULL;</div><div class='add'>+            global_xlator.ctx = NULL;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;global_ctx_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;global_ctx_mutex);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                FREE (ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        FREE(ctx);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs *</div><div class='del'>-pub_glfs_new (const char *volname)</div><div class='add'>+pub_glfs_new(const char *volname)</div><div class='ctx'> {</div><div class='del'>-	struct glfs     *fs             = NULL;</div><div class='del'>-	int              ret            = -1;</div><div class='del'>-	glusterfs_ctx_t *ctx            = NULL;</div><div class='del'>-        xlator_t        *old_THIS       = NULL;</div><div class='del'>-        char            pname[16]       = "";</div><div class='del'>-        char            msg[32]         = "";</div><div class='del'>-</div><div class='del'>-        if (!volname) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Do this as soon as possible in case something else depends on</div><div class='del'>-         * pool allocations.</div><div class='del'>-         */</div><div class='del'>-        mem_pools_init_early ();</div><div class='del'>-        mem_pools_init_late ();</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+    char pname[16] = "";</div><div class='add'>+    char msg[32] = "";</div><div class='add'>+</div><div class='add'>+    if (!volname) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new_fs (volname);</div><div class='del'>-        if (!fs)</div><div class='del'>-                goto out;</div><div class='add'>+    /*</div><div class='add'>+     * Do this as soon as possible in case something else depends on</div><div class='add'>+     * pool allocations.</div><div class='add'>+     */</div><div class='add'>+    mem_pools_init_early();</div><div class='add'>+    mem_pools_init_late();</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfs_ctx_new ();</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    fs = glfs_new_fs(volname);</div><div class='add'>+    if (!fs)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* first globals init, for gf_mem_acct_enable_set () */</div><div class='add'>+    ctx = glusterfs_ctx_new();</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_globals_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* first globals init, for gf_mem_acct_enable_set () */</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        ret = glfs_init_global_ctx ();</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glusterfs_globals_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* then ctx_defaults_init, for xlator_mem_acct_init(THIS) */</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    ret = glfs_init_global_ctx();</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_ctx_defaults_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* then ctx_defaults_init, for xlator_mem_acct_init(THIS) */</div><div class='ctx'> </div><div class='del'>-        fs-&gt;ctx = ctx;</div><div class='del'>-        fs-&gt;ctx-&gt;process_mode = GF_CLIENT_PROCESS;</div><div class='add'>+    ret = glusterfs_ctx_defaults_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, "/dev/null", 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    fs-&gt;ctx = ctx;</div><div class='add'>+    fs-&gt;ctx-&gt;process_mode = GF_CLIENT_PROCESS;</div><div class='ctx'> </div><div class='del'>-        fs-&gt;ctx-&gt;cmd_args.volfile_id = gf_strdup (volname);</div><div class='del'>-        if (!(fs-&gt;ctx-&gt;cmd_args.volfile_id)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_logging(fs, "/dev/null", 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    fs-&gt;ctx-&gt;cmd_args.volfile_id = gf_strdup(volname);</div><div class='add'>+    if (!(fs-&gt;ctx-&gt;cmd_args.volfile_id)) {</div><div class='ctx'>         ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        ret = prctl (PR_GET_NAME, (unsigned long) pname, 0, 0, 0);</div><div class='add'>+    ret = prctl(PR_GET_NAME, (unsigned long)pname, 0, 0, 0);</div><div class='ctx'> #endif</div><div class='del'>-        if (ret)</div><div class='del'>-                fs-&gt;ctx-&gt;cmd_args.process_name = gf_strdup ("gfapi");</div><div class='del'>-        else {</div><div class='del'>-                snprintf (msg, sizeof(msg), "gfapi.%s", pname);</div><div class='del'>-                fs-&gt;ctx-&gt;cmd_args.process_name = gf_strdup (msg);</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (ret)</div><div class='add'>+        fs-&gt;ctx-&gt;cmd_args.process_name = gf_strdup("gfapi");</div><div class='add'>+    else {</div><div class='add'>+        snprintf(msg, sizeof(msg), "gfapi.%s", pname);</div><div class='add'>+        fs-&gt;ctx-&gt;cmd_args.process_name = gf_strdup(msg);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fs) {</div><div class='del'>-                        glfs_fini (fs);</div><div class='del'>-                        fs = NULL;</div><div class='del'>-                } else {</div><div class='del'>-                        /* glfs_fini() calls mem_pools_fini() too */</div><div class='del'>-                        mem_pools_fini ();</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fs) {</div><div class='add'>+            glfs_fini(fs);</div><div class='add'>+            fs = NULL;</div><div class='add'>+        } else {</div><div class='add'>+            /* glfs_fini() calls mem_pools_fini() too */</div><div class='add'>+            mem_pools_fini();</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (old_THIS)</div><div class='del'>-                THIS = old_THIS;</div><div class='add'>+    if (old_THIS)</div><div class='add'>+        THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_new, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct glfs *</div><div class='del'>-priv_glfs_new_from_ctx (glusterfs_ctx_t *ctx)</div><div class='add'>+priv_glfs_new_from_ctx(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        struct glfs    *fs = NULL;</div><div class='add'>+    struct glfs *fs = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new_fs ("");</div><div class='del'>-        if (!fs)</div><div class='del'>-                goto out;</div><div class='add'>+    fs = glfs_new_fs("");</div><div class='add'>+    if (!fs)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fs-&gt;ctx = ctx;</div><div class='add'>+    fs-&gt;ctx = ctx;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_new_from_ctx, 3.7.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-priv_glfs_free_from_ctx (struct glfs *fs)</div><div class='add'>+priv_glfs_free_from_ctx(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-        upcall_entry       *u_list   = NULL;</div><div class='del'>-        upcall_entry       *tmp      = NULL;</div><div class='del'>-</div><div class='del'>-        if (!fs)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /* cleanup upcall structures */</div><div class='del'>-        list_for_each_entry_safe (u_list, tmp,</div><div class='del'>-                                  &amp;fs-&gt;upcall_list,</div><div class='del'>-                                  upcall_list) {</div><div class='del'>-                list_del_init (&amp;u_list-&gt;upcall_list);</div><div class='del'>-                GF_FREE (u_list-&gt;upcall_data.data);</div><div class='del'>-                GF_FREE (u_list);</div><div class='del'>-        }</div><div class='add'>+    upcall_entry *u_list = NULL;</div><div class='add'>+    upcall_entry *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if (!fs)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        PTHREAD_MUTEX_DESTROY (&amp;fs-&gt;mutex, fs-&gt;pthread_flags, GLFS_INIT_MUTEX);</div><div class='add'>+    /* cleanup upcall structures */</div><div class='add'>+    list_for_each_entry_safe(u_list, tmp, &amp;fs-&gt;upcall_list, upcall_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;u_list-&gt;upcall_list);</div><div class='add'>+        GF_FREE(u_list-&gt;upcall_data.data);</div><div class='add'>+        GF_FREE(u_list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        PTHREAD_COND_DESTROY (&amp;fs-&gt;cond, fs-&gt;pthread_flags, GLFS_INIT_COND);</div><div class='add'>+    PTHREAD_MUTEX_DESTROY(&amp;fs-&gt;mutex, fs-&gt;pthread_flags, GLFS_INIT_MUTEX);</div><div class='ctx'> </div><div class='del'>-        PTHREAD_COND_DESTROY (&amp;fs-&gt;child_down_cond, fs-&gt;pthread_flags,</div><div class='del'>-                              GLFS_INIT_COND_CHILD);</div><div class='add'>+    PTHREAD_COND_DESTROY(&amp;fs-&gt;cond, fs-&gt;pthread_flags, GLFS_INIT_COND);</div><div class='ctx'> </div><div class='del'>-        PTHREAD_MUTEX_DESTROY (&amp;fs-&gt;upcall_list_mutex, fs-&gt;pthread_flags,</div><div class='del'>-                               GLFS_INIT_MUTEX_UPCALL);</div><div class='add'>+    PTHREAD_COND_DESTROY(&amp;fs-&gt;child_down_cond, fs-&gt;pthread_flags,</div><div class='add'>+                         GLFS_INIT_COND_CHILD);</div><div class='ctx'> </div><div class='del'>-        if (fs-&gt;oldvolfile)</div><div class='del'>-                FREE (fs-&gt;oldvolfile);</div><div class='add'>+    PTHREAD_MUTEX_DESTROY(&amp;fs-&gt;upcall_list_mutex, fs-&gt;pthread_flags,</div><div class='add'>+                          GLFS_INIT_MUTEX_UPCALL);</div><div class='ctx'> </div><div class='del'>-        FREE (fs-&gt;volname);</div><div class='add'>+    if (fs-&gt;oldvolfile)</div><div class='add'>+        FREE(fs-&gt;oldvolfile);</div><div class='ctx'> </div><div class='del'>-        FREE (fs);</div><div class='add'>+    FREE(fs-&gt;volname);</div><div class='add'>+</div><div class='add'>+    FREE(fs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_free_from_ctx, 3.7.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_set_volfile (struct glfs *fs, const char *volfile)</div><div class='add'>+pub_glfs_set_volfile(struct glfs *fs, const char *volfile)</div><div class='ctx'> {</div><div class='del'>-	cmd_args_t  *cmd_args = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='ctx'> </div><div class='del'>-	cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;fs-&gt;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-	if (vol_assigned (cmd_args))</div><div class='del'>-		return -1;</div><div class='add'>+    if (vol_assigned(cmd_args))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	cmd_args-&gt;volfile = gf_strdup (volfile);</div><div class='del'>-        if (!cmd_args-&gt;volfile)</div><div class='del'>-                return -1;</div><div class='del'>-	return 0;</div><div class='add'>+    cmd_args-&gt;volfile = gf_strdup(volfile);</div><div class='add'>+    if (!cmd_args-&gt;volfile)</div><div class='add'>+        return -1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_set_volfile, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_set_logging (struct glfs *fs, const char *logfile, int loglevel)</div><div class='add'>+pub_glfs_set_logging(struct glfs *fs, const char *logfile, int loglevel)</div><div class='ctx'> {</div><div class='del'>-        int              ret     = -1;</div><div class='del'>-        char            *tmplog  = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *tmplog = NULL;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        if (!logfile) {</div><div class='del'>-                ret = gf_set_log_file_path (&amp;fs-&gt;ctx-&gt;cmd_args, fs-&gt;ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                tmplog = fs-&gt;ctx-&gt;cmd_args.log_file;</div><div class='del'>-        } else {</div><div class='del'>-                tmplog = (char *)logfile;</div><div class='del'>-        }</div><div class='add'>+    if (!logfile) {</div><div class='add'>+        ret = gf_set_log_file_path(&amp;fs-&gt;ctx-&gt;cmd_args, fs-&gt;ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        tmplog = fs-&gt;ctx-&gt;cmd_args.log_file;</div><div class='add'>+    } else {</div><div class='add'>+        tmplog = (char *)logfile;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* finish log set parameters before init */</div><div class='del'>-        if (loglevel &gt;= 0)</div><div class='del'>-                gf_log_set_loglevel (fs-&gt;ctx, loglevel);</div><div class='add'>+    /* finish log set parameters before init */</div><div class='add'>+    if (loglevel &gt;= 0)</div><div class='add'>+        gf_log_set_loglevel(fs-&gt;ctx, loglevel);</div><div class='ctx'> </div><div class='del'>-        ret = gf_log_init (fs-&gt;ctx, tmplog, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = gf_log_init(fs-&gt;ctx, tmplog, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = gf_log_inject_timer_event (fs-&gt;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = gf_log_inject_timer_event(fs-&gt;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_set_logging, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_init_wait (struct glfs *fs)</div><div class='add'>+glfs_init_wait(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	int   ret = -1;</div><div class='del'>-</div><div class='del'>-	/* Always a top-down call, use glfs_lock() */</div><div class='del'>-        glfs_lock (fs, _gf_true);</div><div class='del'>-	{</div><div class='del'>-		while (!fs-&gt;init)</div><div class='del'>-			pthread_cond_wait (&amp;fs-&gt;cond,</div><div class='del'>-					   &amp;fs-&gt;mutex);</div><div class='del'>-		ret = fs-&gt;ret;</div><div class='del'>-		errno = fs-&gt;err;</div><div class='del'>-	}</div><div class='del'>-	glfs_unlock (fs);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    /* Always a top-down call, use glfs_lock() */</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    {</div><div class='add'>+        while (!fs-&gt;init)</div><div class='add'>+            pthread_cond_wait(&amp;fs-&gt;cond, &amp;fs-&gt;mutex);</div><div class='add'>+        ret = fs-&gt;ret;</div><div class='add'>+        errno = fs-&gt;err;</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-priv_glfs_init_done (struct glfs *fs, int ret)</div><div class='add'>+priv_glfs_init_done(struct glfs *fs, int ret)</div><div class='ctx'> {</div><div class='del'>-	glfs_init_cbk init_cbk;</div><div class='del'>-</div><div class='del'>-	if (!fs) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, EINVAL, API_MSG_GLFS_FSOBJ_NULL,</div><div class='del'>-			"fs is NULL");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	init_cbk = fs-&gt;init_cbk;</div><div class='del'>-</div><div class='del'>-	/* Always a bottom-up call, use mutex_lock() */</div><div class='del'>-	pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		fs-&gt;init = 1;</div><div class='del'>-		fs-&gt;ret = ret;</div><div class='del'>-		fs-&gt;err = errno;</div><div class='del'>-</div><div class='del'>-		if (!init_cbk)</div><div class='del'>-			pthread_cond_broadcast (&amp;fs-&gt;cond);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-</div><div class='del'>-	if (init_cbk)</div><div class='del'>-		init_cbk (fs, ret);</div><div class='add'>+    glfs_init_cbk init_cbk;</div><div class='add'>+</div><div class='add'>+    if (!fs) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_GLFS_FSOBJ_NULL,</div><div class='add'>+               "fs is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    init_cbk = fs-&gt;init_cbk;</div><div class='add'>+</div><div class='add'>+    /* Always a bottom-up call, use mutex_lock() */</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        fs-&gt;init = 1;</div><div class='add'>+        fs-&gt;ret = ret;</div><div class='add'>+        fs-&gt;err = errno;</div><div class='add'>+</div><div class='add'>+        if (!init_cbk)</div><div class='add'>+            pthread_cond_broadcast(&amp;fs-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    if (init_cbk)</div><div class='add'>+        init_cbk(fs, ret);</div><div class='ctx'> out:</div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_init_done, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_init_common (struct glfs *fs)</div><div class='add'>+glfs_init_common(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	int  ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = create_master (fs);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='add'>+    ret = create_master(fs);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	ret = gf_thread_create (&amp;fs-&gt;poller, NULL, glfs_poller, fs, "glfspoll");</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='add'>+    ret = gf_thread_create(&amp;fs-&gt;poller, NULL, glfs_poller, fs, "glfspoll");</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_volumes_init (fs);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='add'>+    ret = glfs_volumes_init(fs);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	fs-&gt;dev_id = gf_dm_hashfn (fs-&gt;volname, strlen (fs-&gt;volname));</div><div class='del'>-	return ret;</div><div class='add'>+    fs-&gt;dev_id = gf_dm_hashfn(fs-&gt;volname, strlen(fs-&gt;volname));</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glfs_init_async (struct glfs *fs, glfs_init_cbk cbk)</div><div class='add'>+glfs_init_async(struct glfs *fs, glfs_init_cbk cbk)</div><div class='ctx'> {</div><div class='del'>-	int  ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	if (!fs || !fs-&gt;ctx) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='del'>-			"fs is not properly initialized.");</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='add'>+    if (!fs || !fs-&gt;ctx) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "fs is not properly initialized.");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	fs-&gt;init_cbk = cbk;</div><div class='add'>+    fs-&gt;init_cbk = cbk;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_init_common (fs);</div><div class='add'>+    ret = glfs_init_common(fs);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pub_glfs_init (struct glfs *fs)</div><div class='add'>+pub_glfs_init(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-	int  ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='ctx'> </div><div class='del'>-	if (!fs || !fs-&gt;ctx) {</div><div class='del'>-		gf_msg ("glfs", GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='del'>-			"fs is not properly initialized.");</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='add'>+    if (!fs || !fs-&gt;ctx) {</div><div class='add'>+        gf_msg("glfs", GF_LOG_ERROR, EINVAL, API_MSG_INVALID_ENTRY,</div><div class='add'>+               "fs is not properly initialized.");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	ret = glfs_init_common (fs);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = glfs_init_common(fs);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = glfs_init_wait (fs);</div><div class='add'>+    ret = glfs_init_wait(fs);</div><div class='ctx'> out:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='del'>-        /* Set the initial current working directory to "/" */</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                ret = glfs_chdir (fs, "/");</div><div class='del'>-        }</div><div class='add'>+    /* Set the initial current working directory to "/" */</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        ret = glfs_chdir(fs, "/");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_init, 3.4.0);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glusterfs_ctx_destroy (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_ctx_destroy(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        call_pool_t       *pool            = NULL;</div><div class='del'>-        int               ret              = 0;</div><div class='del'>-        glusterfs_graph_t *trav_graph      = NULL;</div><div class='del'>-        glusterfs_graph_t *tmp             = NULL;</div><div class='del'>-</div><div class='del'>-        if (ctx == NULL)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;cmd_args.curr_server)</div><div class='del'>-                glfs_free_volfile_servers (&amp;ctx-&gt;cmd_args);</div><div class='del'>-</div><div class='del'>-        glfs_free_xlator_options (&amp;ctx-&gt;cmd_args);</div><div class='del'>-</div><div class='del'>-        /* For all the graphs, crawl through the xlator_t structs and free</div><div class='del'>-         * all its members except for the mem_acct member,</div><div class='del'>-         * as GF_FREE will be referencing it.</div><div class='del'>-         */</div><div class='del'>-        list_for_each_entry_safe (trav_graph, tmp, &amp;ctx-&gt;graphs, list) {</div><div class='del'>-                xlator_tree_free_members (trav_graph-&gt;first);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Free the memory pool */</div><div class='del'>-        if (ctx-&gt;stub_mem_pool)</div><div class='del'>-                mem_pool_destroy (ctx-&gt;stub_mem_pool);</div><div class='del'>-        if (ctx-&gt;dict_pool)</div><div class='del'>-                mem_pool_destroy (ctx-&gt;dict_pool);</div><div class='del'>-        if (ctx-&gt;dict_data_pool)</div><div class='del'>-                mem_pool_destroy (ctx-&gt;dict_data_pool);</div><div class='del'>-        if (ctx-&gt;dict_pair_pool)</div><div class='del'>-                mem_pool_destroy (ctx-&gt;dict_pair_pool);</div><div class='del'>-        if (ctx-&gt;logbuf_pool)</div><div class='del'>-                mem_pool_destroy (ctx-&gt;logbuf_pool);</div><div class='del'>-</div><div class='del'>-        pool = ctx-&gt;pool;</div><div class='del'>-        if (pool) {</div><div class='del'>-                if (pool-&gt;frame_mem_pool)</div><div class='del'>-                        mem_pool_destroy (pool-&gt;frame_mem_pool);</div><div class='del'>-                if (pool-&gt;stack_mem_pool)</div><div class='del'>-                        mem_pool_destroy (pool-&gt;stack_mem_pool);</div><div class='del'>-                LOCK_DESTROY (&amp;pool-&gt;lock);</div><div class='del'>-                GF_FREE (pool);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Free the event pool */</div><div class='del'>-        ret = event_pool_destroy (ctx-&gt;event_pool);</div><div class='del'>-</div><div class='del'>-        /* Free the iobuf pool */</div><div class='del'>-        iobuf_pool_destroy (ctx-&gt;iobuf_pool);</div><div class='del'>-</div><div class='del'>-        GF_FREE (ctx-&gt;process_uuid);</div><div class='del'>-        GF_FREE (ctx-&gt;cmd_args.volfile_id);</div><div class='del'>-        GF_FREE (ctx-&gt;cmd_args.process_name);</div><div class='del'>-</div><div class='del'>-        LOCK_DESTROY (&amp;ctx-&gt;lock);</div><div class='del'>-        pthread_mutex_destroy (&amp;ctx-&gt;notify_lock);</div><div class='del'>-        pthread_cond_destroy (&amp;ctx-&gt;notify_cond);</div><div class='del'>-</div><div class='del'>-        /* Free all the graph structs and its containing xlator_t structs</div><div class='del'>-         * from this point there should be no reference to GF_FREE/GF_CALLOC</div><div class='del'>-         * as it will try to access mem_acct and the below function would</div><div class='del'>-         * have freed the same.</div><div class='del'>-         */</div><div class='del'>-        list_for_each_entry_safe (trav_graph, tmp, &amp;ctx-&gt;graphs, list) {</div><div class='del'>-                glusterfs_graph_destroy_residual (trav_graph);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        FREE (ctx);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    call_pool_t *pool = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_graph_t *trav_graph = NULL;</div><div class='add'>+    glusterfs_graph_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if (ctx == NULL)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;cmd_args.curr_server)</div><div class='add'>+        glfs_free_volfile_servers(&amp;ctx-&gt;cmd_args);</div><div class='add'>+</div><div class='add'>+    glfs_free_xlator_options(&amp;ctx-&gt;cmd_args);</div><div class='add'>+</div><div class='add'>+    /* For all the graphs, crawl through the xlator_t structs and free</div><div class='add'>+     * all its members except for the mem_acct member,</div><div class='add'>+     * as GF_FREE will be referencing it.</div><div class='add'>+     */</div><div class='add'>+    list_for_each_entry_safe(trav_graph, tmp, &amp;ctx-&gt;graphs, list)</div><div class='add'>+    {</div><div class='add'>+        xlator_tree_free_members(trav_graph-&gt;first);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Free the memory pool */</div><div class='add'>+    if (ctx-&gt;stub_mem_pool)</div><div class='add'>+        mem_pool_destroy(ctx-&gt;stub_mem_pool);</div><div class='add'>+    if (ctx-&gt;dict_pool)</div><div class='add'>+        mem_pool_destroy(ctx-&gt;dict_pool);</div><div class='add'>+    if (ctx-&gt;dict_data_pool)</div><div class='add'>+        mem_pool_destroy(ctx-&gt;dict_data_pool);</div><div class='add'>+    if (ctx-&gt;dict_pair_pool)</div><div class='add'>+        mem_pool_destroy(ctx-&gt;dict_pair_pool);</div><div class='add'>+    if (ctx-&gt;logbuf_pool)</div><div class='add'>+        mem_pool_destroy(ctx-&gt;logbuf_pool);</div><div class='add'>+</div><div class='add'>+    pool = ctx-&gt;pool;</div><div class='add'>+    if (pool) {</div><div class='add'>+        if (pool-&gt;frame_mem_pool)</div><div class='add'>+            mem_pool_destroy(pool-&gt;frame_mem_pool);</div><div class='add'>+        if (pool-&gt;stack_mem_pool)</div><div class='add'>+            mem_pool_destroy(pool-&gt;stack_mem_pool);</div><div class='add'>+        LOCK_DESTROY(&amp;pool-&gt;lock);</div><div class='add'>+        GF_FREE(pool);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Free the event pool */</div><div class='add'>+    ret = event_pool_destroy(ctx-&gt;event_pool);</div><div class='add'>+</div><div class='add'>+    /* Free the iobuf pool */</div><div class='add'>+    iobuf_pool_destroy(ctx-&gt;iobuf_pool);</div><div class='add'>+</div><div class='add'>+    GF_FREE(ctx-&gt;process_uuid);</div><div class='add'>+    GF_FREE(ctx-&gt;cmd_args.volfile_id);</div><div class='add'>+    GF_FREE(ctx-&gt;cmd_args.process_name);</div><div class='add'>+</div><div class='add'>+    LOCK_DESTROY(&amp;ctx-&gt;lock);</div><div class='add'>+    pthread_mutex_destroy(&amp;ctx-&gt;notify_lock);</div><div class='add'>+    pthread_cond_destroy(&amp;ctx-&gt;notify_cond);</div><div class='add'>+</div><div class='add'>+    /* Free all the graph structs and its containing xlator_t structs</div><div class='add'>+     * from this point there should be no reference to GF_FREE/GF_CALLOC</div><div class='add'>+     * as it will try to access mem_acct and the below function would</div><div class='add'>+     * have freed the same.</div><div class='add'>+     */</div><div class='add'>+    list_for_each_entry_safe(trav_graph, tmp, &amp;ctx-&gt;graphs, list)</div><div class='add'>+    {</div><div class='add'>+        glusterfs_graph_destroy_residual(trav_graph);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    FREE(ctx);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_fini (struct glfs *fs)</div><div class='add'>+pub_glfs_fini(struct glfs *fs)</div><div class='ctx'> {</div><div class='del'>-        int                ret = -1;</div><div class='del'>-        int                countdown = 100;</div><div class='del'>-        xlator_t           *subvol = NULL;</div><div class='del'>-        glusterfs_ctx_t    *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t  *graph = NULL;</div><div class='del'>-        call_pool_t        *call_pool = NULL;</div><div class='del'>-        int                fs_init = 0;</div><div class='del'>-        int                err = -1;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        ctx = fs-&gt;ctx;</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                goto free_fs;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;mgmt) {</div><div class='del'>-                rpc_clnt_disable (ctx-&gt;mgmt);</div><div class='del'>-                rpc_clnt_unref (ctx-&gt;mgmt);</div><div class='del'>-                ctx-&gt;mgmt = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        call_pool = fs-&gt;ctx-&gt;pool;</div><div class='del'>-</div><div class='del'>-        while (countdown--) {</div><div class='del'>-                /* give some time for background frames to finish */</div><div class='del'>-                pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        /* Do we need to increase countdown? */</div><div class='del'>-                        if ((!call_pool-&gt;cnt) &amp;&amp; (!fs-&gt;pin_refcnt)) {</div><div class='del'>-                                gf_msg_trace ("glfs", 0,</div><div class='del'>-                                        "call_pool_cnt - %"PRId64","</div><div class='del'>-                                        "pin_refcnt - %d",</div><div class='del'>-                                        call_pool-&gt;cnt, fs-&gt;pin_refcnt);</div><div class='del'>-</div><div class='del'>-                                ctx-&gt;cleanup_started = 1;</div><div class='del'>-                                pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-                usleep (100000);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* leaked frames may exist, we ignore */</div><div class='del'>-</div><div class='del'>-        /*We deem glfs_fini as successful if there are no pending frames in the call</div><div class='del'>-         *pool*/</div><div class='del'>-        ret = (call_pool-&gt;cnt == 0)? 0: -1;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int countdown = 100;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *graph = NULL;</div><div class='add'>+    call_pool_t *call_pool = NULL;</div><div class='add'>+    int fs_init = 0;</div><div class='add'>+    int err = -1;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        goto free_fs;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;mgmt) {</div><div class='add'>+        rpc_clnt_disable(ctx-&gt;mgmt);</div><div class='add'>+        rpc_clnt_unref(ctx-&gt;mgmt);</div><div class='add'>+        ctx-&gt;mgmt = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_pool = fs-&gt;ctx-&gt;pool;</div><div class='add'>+</div><div class='add'>+    while (countdown--) {</div><div class='add'>+        /* give some time for background frames to finish */</div><div class='add'>+        pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='ctx'>         {</div><div class='del'>-                fs_init = fs-&gt;init;</div><div class='add'>+            /* Do we need to increase countdown? */</div><div class='add'>+            if ((!call_pool-&gt;cnt) &amp;&amp; (!fs-&gt;pin_refcnt)) {</div><div class='add'>+                gf_msg_trace("glfs", 0,</div><div class='add'>+                             "call_pool_cnt - %" PRId64</div><div class='add'>+                             ","</div><div class='add'>+                             "pin_refcnt - %d",</div><div class='add'>+                             call_pool-&gt;cnt, fs-&gt;pin_refcnt);</div><div class='add'>+</div><div class='add'>+                ctx-&gt;cleanup_started = 1;</div><div class='add'>+                pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        if (fs_init != 0) {</div><div class='del'>-                subvol = glfs_active_subvol (fs);</div><div class='del'>-                if (subvol) {</div><div class='del'>-                        /* PARENT_DOWN within glfs_subvol_done() is issued</div><div class='del'>-                           only on graph switch (new graph should activiate</div><div class='del'>-                           and decrement the extra @winds count taken in</div><div class='del'>-                           glfs_graph_setup()</div><div class='del'>-</div><div class='del'>-                           Since we are explicitly destroying,</div><div class='del'>-                           PARENT_DOWN is necessary</div><div class='del'>-                        */</div><div class='del'>-                        xlator_notify (subvol, GF_EVENT_PARENT_DOWN, subvol, 0);</div><div class='del'>-                        /* Here we wait for GF_EVENT_CHILD_DOWN before exiting,</div><div class='del'>-                           in case of asynchrnous cleanup</div><div class='del'>-                        */</div><div class='del'>-                        graph = subvol-&gt;graph;</div><div class='del'>-                        err = pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-                        if (err != 0) {</div><div class='del'>-                                gf_msg ("glfs", GF_LOG_ERROR, err,</div><div class='del'>-                                        API_MSG_FSMUTEX_LOCK_FAILED,</div><div class='del'>-                                        "pthread lock on glfs mutex, "</div><div class='del'>-                                        "returned error: (%s)", strerror (err));</div><div class='del'>-                                goto fail;</div><div class='del'>-                        }</div><div class='del'>-                        /* check and wait for CHILD_DOWN for active subvol*/</div><div class='del'>-                        {</div><div class='del'>-                                while (graph-&gt;used) {</div><div class='del'>-                                        err = pthread_cond_wait (&amp;fs-&gt;child_down_cond,</div><div class='del'>-                                                                 &amp;fs-&gt;mutex);</div><div class='del'>-                                        if (err != 0)</div><div class='del'>-                                                gf_msg ("glfs", GF_LOG_INFO, err,</div><div class='del'>-                                                        API_MSG_COND_WAIT_FAILED,</div><div class='del'>-                                                        "%s cond wait failed %s",</div><div class='del'>-                                                        subvol-&gt;name,</div><div class='del'>-                                                        strerror (err));</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        err = pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='del'>-                        if (err != 0) {</div><div class='del'>-                                gf_msg ("glfs", GF_LOG_ERROR, err,</div><div class='del'>-                                        API_MSG_FSMUTEX_UNLOCK_FAILED,</div><div class='del'>-                                        "pthread unlock on glfs mutex, "</div><div class='del'>-                                        "returned error: (%s)", strerror (err));</div><div class='del'>-                                goto fail;</div><div class='del'>-                        }</div><div class='add'>+        pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+        usleep(100000);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* leaked frames may exist, we ignore */</div><div class='add'>+</div><div class='add'>+    /*We deem glfs_fini as successful if there are no pending frames in the call</div><div class='add'>+     *pool*/</div><div class='add'>+    ret = (call_pool-&gt;cnt == 0) ? 0 : -1;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        fs_init = fs-&gt;init;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    if (fs_init != 0) {</div><div class='add'>+        subvol = glfs_active_subvol(fs);</div><div class='add'>+        if (subvol) {</div><div class='add'>+            /* PARENT_DOWN within glfs_subvol_done() is issued</div><div class='add'>+               only on graph switch (new graph should activiate</div><div class='add'>+               and decrement the extra @winds count taken in</div><div class='add'>+               glfs_graph_setup()</div><div class='add'>+</div><div class='add'>+               Since we are explicitly destroying,</div><div class='add'>+               PARENT_DOWN is necessary</div><div class='add'>+            */</div><div class='add'>+            xlator_notify(subvol, GF_EVENT_PARENT_DOWN, subvol, 0);</div><div class='add'>+            /* Here we wait for GF_EVENT_CHILD_DOWN before exiting,</div><div class='add'>+               in case of asynchrnous cleanup</div><div class='add'>+            */</div><div class='add'>+            graph = subvol-&gt;graph;</div><div class='add'>+            err = pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+            if (err != 0) {</div><div class='add'>+                gf_msg("glfs", GF_LOG_ERROR, err, API_MSG_FSMUTEX_LOCK_FAILED,</div><div class='add'>+                       "pthread lock on glfs mutex, "</div><div class='add'>+                       "returned error: (%s)",</div><div class='add'>+                       strerror(err));</div><div class='add'>+                goto fail;</div><div class='add'>+            }</div><div class='add'>+            /* check and wait for CHILD_DOWN for active subvol*/</div><div class='add'>+            {</div><div class='add'>+                while (graph-&gt;used) {</div><div class='add'>+                    err = pthread_cond_wait(&amp;fs-&gt;child_down_cond, &amp;fs-&gt;mutex);</div><div class='add'>+                    if (err != 0)</div><div class='add'>+                        gf_msg("glfs", GF_LOG_INFO, err,</div><div class='add'>+                               API_MSG_COND_WAIT_FAILED,</div><div class='add'>+                               "%s cond wait failed %s", subvol-&gt;name,</div><div class='add'>+                               strerror(err));</div><div class='ctx'>                 }</div><div class='del'>-                glfs_subvol_done (fs, subvol);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;cleanup_started = 1;</div><div class='del'>-</div><div class='del'>-        if (fs_init != 0) {</div><div class='del'>-                /* Destroy all the inode tables of all the graphs.</div><div class='del'>-                 * NOTE:</div><div class='del'>-                 * - inode objects should be destroyed before calling fini()</div><div class='del'>-                 *   of each xlator, as fini() and forget() of the xlators</div><div class='del'>-                 *   can share few common locks or data structures, calling</div><div class='del'>-                 *   fini first might destroy those required by forget</div><div class='del'>-                 *   ( eg: in quick-read)</div><div class='del'>-                 * - The call to inode_table_destroy_all is not required when</div><div class='del'>-                 *   the cleanup during graph switch is implemented to perform</div><div class='del'>-                 *   inode table destroy.</div><div class='del'>-                 */</div><div class='del'>-                inode_table_destroy_all (ctx);</div><div class='del'>-</div><div class='del'>-                /* Call fini() of all the xlators in the active graph</div><div class='del'>-                 * NOTE:</div><div class='del'>-                 * - xlator fini() should be called before destroying any of</div><div class='del'>-                 *   the threads. (eg: fini() in protocol-client uses timer</div><div class='del'>-                 *   thread) */</div><div class='del'>-                glusterfs_graph_deactivate (ctx-&gt;active);</div><div class='del'>-</div><div class='del'>-                /* Join the syncenv_processor threads and cleanup</div><div class='del'>-                 * syncenv resources*/</div><div class='del'>-                syncenv_destroy (ctx-&gt;env);</div><div class='del'>-</div><div class='del'>-                /* Join the poller thread */</div><div class='del'>-                if (event_dispatch_destroy (ctx-&gt;event_pool) &lt; 0)</div><div class='del'>-                        ret = -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            err = pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='add'>+            if (err != 0) {</div><div class='add'>+                gf_msg("glfs", GF_LOG_ERROR, err, API_MSG_FSMUTEX_UNLOCK_FAILED,</div><div class='add'>+                       "pthread unlock on glfs mutex, "</div><div class='add'>+                       "returned error: (%s)",</div><div class='add'>+                       strerror(err));</div><div class='add'>+                goto fail;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* log infra has to be brought down before destroying</div><div class='del'>-         * timer registry, as logging uses timer infra</div><div class='add'>+        glfs_subvol_done(fs, subvol);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;cleanup_started = 1;</div><div class='add'>+</div><div class='add'>+    if (fs_init != 0) {</div><div class='add'>+        /* Destroy all the inode tables of all the graphs.</div><div class='add'>+         * NOTE:</div><div class='add'>+         * - inode objects should be destroyed before calling fini()</div><div class='add'>+         *   of each xlator, as fini() and forget() of the xlators</div><div class='add'>+         *   can share few common locks or data structures, calling</div><div class='add'>+         *   fini first might destroy those required by forget</div><div class='add'>+         *   ( eg: in quick-read)</div><div class='add'>+         * - The call to inode_table_destroy_all is not required when</div><div class='add'>+         *   the cleanup during graph switch is implemented to perform</div><div class='add'>+         *   inode table destroy.</div><div class='ctx'>          */</div><div class='del'>-        if (gf_log_fini (ctx) != 0)</div><div class='del'>-                ret = -1;</div><div class='add'>+        inode_table_destroy_all(ctx);</div><div class='add'>+</div><div class='add'>+        /* Call fini() of all the xlators in the active graph</div><div class='add'>+         * NOTE:</div><div class='add'>+         * - xlator fini() should be called before destroying any of</div><div class='add'>+         *   the threads. (eg: fini() in protocol-client uses timer</div><div class='add'>+         *   thread) */</div><div class='add'>+        glusterfs_graph_deactivate(ctx-&gt;active);</div><div class='add'>+</div><div class='add'>+        /* Join the syncenv_processor threads and cleanup</div><div class='add'>+         * syncenv resources*/</div><div class='add'>+        syncenv_destroy(ctx-&gt;env);</div><div class='add'>+</div><div class='add'>+        /* Join the poller thread */</div><div class='add'>+        if (event_dispatch_destroy(ctx-&gt;event_pool) &lt; 0)</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* log infra has to be brought down before destroying</div><div class='add'>+     * timer registry, as logging uses timer infra</div><div class='add'>+     */</div><div class='add'>+    if (gf_log_fini(ctx) != 0)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* Join the timer thread */</div><div class='del'>-        if (fs_init != 0) {</div><div class='del'>-                gf_timer_registry_destroy (ctx);</div><div class='del'>-        }</div><div class='add'>+    /* Join the timer thread */</div><div class='add'>+    if (fs_init != 0) {</div><div class='add'>+        gf_timer_registry_destroy(ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Destroy the context and the global pools */</div><div class='del'>-        if (glusterfs_ctx_destroy (ctx) != 0)</div><div class='del'>-                ret = -1;</div><div class='add'>+    /* Destroy the context and the global pools */</div><div class='add'>+    if (glusterfs_ctx_destroy(ctx) != 0)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='ctx'> free_fs:</div><div class='del'>-        glfs_free_from_ctx (fs);</div><div class='add'>+    glfs_free_from_ctx(fs);</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Do this as late as possible in case anything else has (or</div><div class='del'>-         * grows) a dependency on mem-pool allocations.</div><div class='del'>-         */</div><div class='del'>-        mem_pools_fini ();</div><div class='add'>+    /*</div><div class='add'>+     * Do this as late as possible in case anything else has (or</div><div class='add'>+     * grows) a dependency on mem-pool allocations.</div><div class='add'>+     */</div><div class='add'>+    mem_pools_fini();</div><div class='ctx'> </div><div class='ctx'> fail:</div><div class='del'>-        if (!ret)</div><div class='del'>-                ret = err;</div><div class='add'>+    if (!ret)</div><div class='add'>+        ret = err;</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_fini, 3.4.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pub_glfs_get_volfile (struct glfs *fs, void *buf, size_t len)</div><div class='add'>+pub_glfs_get_volfile(struct glfs *fs, void *buf, size_t len)</div><div class='ctx'> {</div><div class='del'>-        ssize_t         res = -1;</div><div class='add'>+    ssize_t res = -1;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        glfs_lock(fs, _gf_true);</div><div class='del'>-        if (len &gt;= fs-&gt;oldvollen) {</div><div class='del'>-                gf_msg_trace ("glfs", 0, "copying %zu to %p", len, buf);</div><div class='del'>-                memcpy(buf,fs-&gt;oldvolfile,len);</div><div class='del'>-                res = len;</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                res = len - fs-&gt;oldvollen;</div><div class='del'>-                gf_msg_trace ("glfs", 0, "buffer is %zd too short", -res);</div><div class='del'>-        }</div><div class='del'>-        glfs_unlock(fs);</div><div class='add'>+    glfs_lock(fs, _gf_true);</div><div class='add'>+    if (len &gt;= fs-&gt;oldvollen) {</div><div class='add'>+        gf_msg_trace("glfs", 0, "copying %zu to %p", len, buf);</div><div class='add'>+        memcpy(buf, fs-&gt;oldvolfile, len);</div><div class='add'>+        res = len;</div><div class='add'>+    } else {</div><div class='add'>+        res = len - fs-&gt;oldvollen;</div><div class='add'>+        gf_msg_trace("glfs", 0, "buffer is %zd too short", -res);</div><div class='add'>+    }</div><div class='add'>+    glfs_unlock(fs);</div><div class='ctx'> </div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return res;</div><div class='add'>+    return res;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_get_volfile, 3.6.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-priv_glfs_ipc (struct glfs *fs, int opcode, void *xd_in, void **xd_out)</div><div class='add'>+priv_glfs_ipc(struct glfs *fs, int opcode, void *xd_in, void **xd_out)</div><div class='ctx'> {</div><div class='del'>-	xlator_t        *subvol = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-	subvol = glfs_active_subvol (fs);</div><div class='del'>-	if (!subvol) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = syncop_ipc (subvol, opcode, (dict_t *) xd_in, (dict_t **) xd_out);</div><div class='del'>-        DECODE_SYNCOP_ERR (ret);</div><div class='add'>+    ret = syncop_ipc(subvol, opcode, (dict_t *)xd_in, (dict_t **)xd_out);</div><div class='add'>+    DECODE_SYNCOP_ERR(ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        glfs_subvol_done (fs, subvol);</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    glfs_subvol_done(fs, subvol);</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PRIVATE_DEFAULT(glfs_ipc, 3.12.0);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pub_glfs_free (void *ptr)</div><div class='add'>+pub_glfs_free(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        GLFS_FREE (ptr);</div><div class='add'>+    GLFS_FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_free, 3.7.16);</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-struct glfs*</div><div class='del'>-pub_glfs_upcall_get_fs (struct glfs_upcall *arg)</div><div class='add'>+struct glfs *</div><div class='add'>+pub_glfs_upcall_get_fs(struct glfs_upcall *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;fs;</div><div class='add'>+    return arg-&gt;fs;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_get_fs, 3.7.16);</div><div class='ctx'> </div><div class='ctx'> enum glfs_upcall_reason</div><div class='del'>-pub_glfs_upcall_get_reason (struct glfs_upcall *arg)</div><div class='add'>+pub_glfs_upcall_get_reason(struct glfs_upcall *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;reason;</div><div class='add'>+    return arg-&gt;reason;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_get_reason, 3.7.16);</div><div class='ctx'> </div><div class='del'>-void*</div><div class='del'>-pub_glfs_upcall_get_event (struct glfs_upcall *arg)</div><div class='add'>+void *</div><div class='add'>+pub_glfs_upcall_get_event(struct glfs_upcall *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;event;</div><div class='add'>+    return arg-&gt;event;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_get_event, 3.7.16);</div><div class='ctx'> </div><div class='del'>-struct glfs_object*</div><div class='del'>-pub_glfs_upcall_inode_get_object (struct glfs_upcall_inode *arg)</div><div class='add'>+struct glfs_object *</div><div class='add'>+pub_glfs_upcall_inode_get_object(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;object;</div><div class='add'>+    return arg-&gt;object;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_object, 3.7.16);</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-pub_glfs_upcall_inode_get_flags (struct glfs_upcall_inode *arg)</div><div class='add'>+pub_glfs_upcall_inode_get_flags(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;flags;</div><div class='add'>+    return arg-&gt;flags;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_flags, 3.7.16);</div><div class='ctx'> </div><div class='del'>-struct stat*</div><div class='del'>-pub_glfs_upcall_inode_get_stat (struct glfs_upcall_inode *arg)</div><div class='add'>+struct stat *</div><div class='add'>+pub_glfs_upcall_inode_get_stat(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return &amp;arg-&gt;buf;</div><div class='add'>+    return &amp;arg-&gt;buf;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_stat, 3.7.16);</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-pub_glfs_upcall_inode_get_expire (struct glfs_upcall_inode *arg)</div><div class='add'>+pub_glfs_upcall_inode_get_expire(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;expire_time_attr;</div><div class='add'>+    return arg-&gt;expire_time_attr;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_expire, 3.7.16);</div><div class='ctx'> </div><div class='del'>-struct glfs_object*</div><div class='del'>-pub_glfs_upcall_inode_get_pobject (struct glfs_upcall_inode *arg)</div><div class='add'>+struct glfs_object *</div><div class='add'>+pub_glfs_upcall_inode_get_pobject(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;p_object;</div><div class='add'>+    return arg-&gt;p_object;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_pobject, 3.7.16);</div><div class='ctx'> </div><div class='del'>-struct stat*</div><div class='del'>-pub_glfs_upcall_inode_get_pstat (struct glfs_upcall_inode *arg)</div><div class='add'>+struct stat *</div><div class='add'>+pub_glfs_upcall_inode_get_pstat(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return &amp;arg-&gt;p_buf;</div><div class='add'>+    return &amp;arg-&gt;p_buf;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_pstat, 3.7.16);</div><div class='ctx'> </div><div class='del'>-struct glfs_object*</div><div class='del'>-pub_glfs_upcall_inode_get_oldpobject (struct glfs_upcall_inode *arg)</div><div class='add'>+struct glfs_object *</div><div class='add'>+pub_glfs_upcall_inode_get_oldpobject(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;oldp_object;</div><div class='add'>+    return arg-&gt;oldp_object;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_oldpobject, 3.7.16);</div><div class='ctx'> </div><div class='del'>-struct stat*</div><div class='del'>-pub_glfs_upcall_inode_get_oldpstat (struct glfs_upcall_inode *arg)</div><div class='add'>+struct stat *</div><div class='add'>+pub_glfs_upcall_inode_get_oldpstat(struct glfs_upcall_inode *arg)</div><div class='ctx'> {</div><div class='del'>-        return &amp;arg-&gt;oldp_buf;</div><div class='add'>+    return &amp;arg-&gt;oldp_buf;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_oldpstat, 3.7.16);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*struct glfs_object*</div><div class='ctx'> pub_glfs_upcall_lease_get_object (struct glfs_upcall_recall_inode *arg)</div><div class='ctx'> {</div><div class='hunk'>@@ -1581,169 +1536,166 @@ GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_lease_get_object, 4.0.0);</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-pub_glfs_upcall_lease_get_lease_type (struct glfs_upcall_lease *arg)</div><div class='add'>+pub_glfs_upcall_lease_get_lease_type(struct glfs_upcall_lease *arg)</div><div class='ctx'> {</div><div class='del'>-        return arg-&gt;lease_type;</div><div class='add'>+    return arg-&gt;lease_type;</div><div class='ctx'> }</div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_lease_get_lease_type, 4.0.0);</div><div class='ctx'> </div><div class='ctx'> /* definitions of the GLFS_SYSRQ_* chars are in glfs.h */</div><div class='ctx'> static struct glfs_sysrq_help {</div><div class='del'>-        char  sysrq;</div><div class='del'>-        char *msg;</div><div class='del'>-} glfs_sysrq_help[] = {</div><div class='del'>-        { GLFS_SYSRQ_HELP,      "(H)elp" },</div><div class='del'>-        { GLFS_SYSRQ_STATEDUMP, "(S)tatedump" },</div><div class='del'>-        { 0,                    NULL }</div><div class='del'>-};</div><div class='add'>+    char sysrq;</div><div class='add'>+    char *msg;</div><div class='add'>+} glfs_sysrq_help[] = {{GLFS_SYSRQ_HELP, "(H)elp"},</div><div class='add'>+                       {GLFS_SYSRQ_STATEDUMP, "(S)tatedump"},</div><div class='add'>+                       {0, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_sysrq (struct glfs *fs, char sysrq)</div><div class='add'>+pub_glfs_sysrq(struct glfs *fs, char sysrq)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t  *ctx = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        int               msg_len;</div><div class='del'>-        char              msg[1024] = {0,}; /* should not exceed 1024 chars */</div><div class='del'>-</div><div class='del'>-        if (!fs || !fs-&gt;ctx) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int msg_len;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    }; /* should not exceed 1024 chars */</div><div class='add'>+</div><div class='add'>+    if (!fs || !fs-&gt;ctx) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx = fs-&gt;ctx;</div><div class='add'>+    ctx = fs-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        switch (sysrq) {</div><div class='del'>-        case GLFS_SYSRQ_HELP:</div><div class='del'>-        {</div><div class='del'>-                struct glfs_sysrq_help *usage = NULL;</div><div class='del'>-</div><div class='del'>-                for (usage = glfs_sysrq_help; usage-&gt;sysrq; usage++) {</div><div class='del'>-                        msg_len = strlen(msg);</div><div class='del'>-                        snprintf (msg + msg_len, /* append to msg */</div><div class='del'>-                                  sizeof (msg) - msg_len - 2,</div><div class='del'>-                                  /* - 2 for the " " + terminating \0 */</div><div class='del'>-                                  " %s", usage-&gt;msg);</div><div class='del'>-                }</div><div class='add'>+    switch (sysrq) {</div><div class='add'>+        case GLFS_SYSRQ_HELP: {</div><div class='add'>+            struct glfs_sysrq_help *usage = NULL;</div><div class='ctx'> </div><div class='del'>-                /* not really an 'error', but make sure it gets logged */</div><div class='del'>-                gf_log ("glfs", GF_LOG_ERROR, "available events: %s", msg);</div><div class='add'>+            for (usage = glfs_sysrq_help; usage-&gt;sysrq; usage++) {</div><div class='add'>+                msg_len = strlen(msg);</div><div class='add'>+                snprintf(msg + msg_len, /* append to msg */</div><div class='add'>+                         sizeof(msg) - msg_len - 2,</div><div class='add'>+                         /* - 2 for the " " + terminating \0 */</div><div class='add'>+                         " %s", usage-&gt;msg);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            /* not really an 'error', but make sure it gets logged */</div><div class='add'>+            gf_log("glfs", GF_LOG_ERROR, "available events: %s", msg);</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'>         case GLFS_SYSRQ_STATEDUMP:</div><div class='del'>-                gf_proc_dump_info (SIGUSR1, ctx);</div><div class='del'>-                break;</div><div class='add'>+            gf_proc_dump_info(SIGUSR1, ctx);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_msg ("glfs", GF_LOG_ERROR, ENOTSUP, API_MSG_INVALID_ENTRY,</div><div class='del'>-                        "'%c' is not a valid sysrq", sysrq);</div><div class='del'>-                errno = ENOTSUP;</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+            gf_msg("glfs", GF_LOG_ERROR, ENOTSUP, API_MSG_INVALID_ENTRY,</div><div class='add'>+                   "'%c' is not a valid sysrq", sysrq);</div><div class='add'>+            errno = ENOTSUP;</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_sysrq, 3.10.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_upcall_register (struct glfs *fs, uint32_t event_list,</div><div class='del'>-                          glfs_upcall_cbk cbk, void *data)</div><div class='add'>+pub_glfs_upcall_register(struct glfs *fs, uint32_t event_list,</div><div class='add'>+                         glfs_upcall_cbk cbk, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        /* list of supported upcall events */</div><div class='del'>-        uint32_t up_events = GLFS_EVENT_INODE_INVALIDATE;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='add'>+    /* list of supported upcall events */</div><div class='add'>+    uint32_t up_events = GLFS_EVENT_INODE_INVALIDATE;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, cbk, out);</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='ctx'> </div><div class='del'>-        /* Event list should be either GLFS_EVENT_ANY</div><div class='del'>-         * or list of supported individual events (up_events)</div><div class='del'>-         */</div><div class='del'>-        if ((event_list != GLFS_EVENT_ANY) &amp;&amp;</div><div class='del'>-            (event_list &amp; ~up_events)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='del'>-                        "invalid event_list (0x%08x)", event_list);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, cbk, out);</div><div class='ctx'> </div><div class='del'>-        /* in case other thread does unregister */</div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (event_list &amp; GLFS_EVENT_INODE_INVALIDATE) {</div><div class='del'>-                        /* @todo: Check if features.cache-invalidation is</div><div class='del'>-                         * enabled.</div><div class='del'>-                         */</div><div class='del'>-                        fs-&gt;upcall_events |=  GF_UPCALL_CACHE_INVALIDATION;</div><div class='del'>-                        ret |= GF_UPCALL_CACHE_INVALIDATION;</div><div class='del'>-                } else if (event_list &amp; GLFS_EVENT_INODE_INVALIDATE) {</div><div class='del'>-                        fs-&gt;upcall_events |=  GF_UPCALL_RECALL_LEASE;</div><div class='del'>-                        ret |= GF_UPCALL_RECALL_LEASE;</div><div class='del'>-                }</div><div class='del'>-                /* Override cbk function if existing */</div><div class='del'>-                fs-&gt;up_cbk = cbk;</div><div class='del'>-                fs-&gt;up_data = data;</div><div class='del'>-                fs-&gt;cache_upcalls = _gf_true;</div><div class='add'>+    /* Event list should be either GLFS_EVENT_ANY</div><div class='add'>+     * or list of supported individual events (up_events)</div><div class='add'>+     */</div><div class='add'>+    if ((event_list != GLFS_EVENT_ANY) &amp;&amp; (event_list &amp; ~up_events)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='add'>+               "invalid event_list (0x%08x)", event_list);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* in case other thread does unregister */</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (event_list &amp; GLFS_EVENT_INODE_INVALIDATE) {</div><div class='add'>+            /* @todo: Check if features.cache-invalidation is</div><div class='add'>+             * enabled.</div><div class='add'>+             */</div><div class='add'>+            fs-&gt;upcall_events |= GF_UPCALL_CACHE_INVALIDATION;</div><div class='add'>+            ret |= GF_UPCALL_CACHE_INVALIDATION;</div><div class='add'>+        } else if (event_list &amp; GLFS_EVENT_INODE_INVALIDATE) {</div><div class='add'>+            fs-&gt;upcall_events |= GF_UPCALL_RECALL_LEASE;</div><div class='add'>+            ret |= GF_UPCALL_RECALL_LEASE;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+        /* Override cbk function if existing */</div><div class='add'>+        fs-&gt;up_cbk = cbk;</div><div class='add'>+        fs-&gt;up_data = data;</div><div class='add'>+        fs-&gt;cache_upcalls = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_register, 3.13.0);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pub_glfs_upcall_unregister (struct glfs *fs, uint32_t event_list)</div><div class='add'>+pub_glfs_upcall_unregister(struct glfs *fs, uint32_t event_list)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        /* list of supported upcall events */</div><div class='del'>-        uint32_t up_events = GLFS_EVENT_INODE_INVALIDATE;</div><div class='del'>-</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-        __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);</div><div class='del'>-</div><div class='del'>-        /* Event list should be either GLFS_EVENT_ANY</div><div class='del'>-         * or list of supported individual events (up_events)</div><div class='del'>-         */</div><div class='del'>-        if ((event_list != GLFS_EVENT_ANY) &amp;&amp;</div><div class='del'>-            (event_list &amp; ~up_events)) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='del'>-                        "invalid event_list (0x%08x)", event_list);</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    /* list of supported upcall events */</div><div class='add'>+    uint32_t up_events = GLFS_EVENT_INODE_INVALIDATE;</div><div class='add'>+</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+    __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);</div><div class='add'>+</div><div class='add'>+    /* Event list should be either GLFS_EVENT_ANY</div><div class='add'>+     * or list of supported individual events (up_events)</div><div class='add'>+     */</div><div class='add'>+    if ((event_list != GLFS_EVENT_ANY) &amp;&amp; (event_list &amp; ~up_events)) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_INVALID_ARG,</div><div class='add'>+               "invalid event_list (0x%08x)", event_list);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;fs-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (event_list &amp; GLFS_EVENT_INODE_INVALIDATE) {</div><div class='add'>+            fs-&gt;upcall_events &amp;= ~GF_UPCALL_CACHE_INVALIDATION;</div><div class='add'>+            ret |= GF_UPCALL_CACHE_INVALIDATION;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;fs-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (event_list &amp; GLFS_EVENT_INODE_INVALIDATE) {</div><div class='del'>-                        fs-&gt;upcall_events &amp;=  ~GF_UPCALL_CACHE_INVALIDATION;</div><div class='del'>-                        ret |= GF_UPCALL_CACHE_INVALIDATION;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* If there are no upcall events registered, reset cbk */</div><div class='del'>-                if (fs-&gt;upcall_events == 0) {</div><div class='del'>-                        fs-&gt;up_cbk = NULL;</div><div class='del'>-                        fs-&gt;up_data = NULL;</div><div class='del'>-                        fs-&gt;cache_upcalls = _gf_false;</div><div class='del'>-                }</div><div class='add'>+        /* If there are no upcall events registered, reset cbk */</div><div class='add'>+        if (fs-&gt;upcall_events == 0) {</div><div class='add'>+            fs-&gt;up_cbk = NULL;</div><div class='add'>+            fs-&gt;up_data = NULL;</div><div class='add'>+            fs-&gt;cache_upcalls = _gf_false;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;fs-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fs-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        __GLFS_EXIT_FS;</div><div class='add'>+    __GLFS_EXIT_FS;</div><div class='ctx'> </div><div class='ctx'> invalid_fs:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_unregister, 3.13.0);</div><div class='head'>diff --git a/cli/src/cli-cmd-global.c b/cli/src/cli-cmd-global.c<br/>index 3c8ae227ca7..e1bedf13542 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-global.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-global.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-global.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-global.c</a></div><div class='hunk'>@@ -30,111 +30,109 @@</div><div class='ctx'> extern rpc_clnt_prog_t *cli_rpc_prog;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_global_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                         const char **words, int wordcount);</div><div class='add'>+cli_cmd_global_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount);</div><div class='ctx'> int</div><div class='del'>-cli_cmd_get_state_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                              const char **words, int wordcount);</div><div class='add'>+cli_cmd_get_state_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                      const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd global_cmds[] = {</div><div class='del'>-        { "global help",</div><div class='del'>-           cli_cmd_global_help_cbk,</div><div class='del'>-           "list global commands",</div><div class='del'>-        },</div><div class='del'>-        { "get-state [&lt;daemon&gt;] [[odir &lt;/path/to/output/dir/&gt;] "</div><div class='del'>-          "[file &lt;filename&gt;]] [detail|volumeoptions]",</div><div class='del'>-          cli_cmd_get_state_cbk,</div><div class='del'>-          "Get local state representation of mentioned daemon",</div><div class='del'>-        },</div><div class='del'>-        {NULL,  NULL,  NULL}</div><div class='del'>-};</div><div class='add'>+    {</div><div class='add'>+        "global help",</div><div class='add'>+        cli_cmd_global_help_cbk,</div><div class='add'>+        "list global commands",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        "get-state [&lt;daemon&gt;] [[odir &lt;/path/to/output/dir/&gt;] "</div><div class='add'>+        "[file &lt;filename&gt;]] [detail|volumeoptions]",</div><div class='add'>+        cli_cmd_get_state_cbk,</div><div class='add'>+        "Get local state representation of mentioned daemon",</div><div class='add'>+    },</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_global_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                      const char **words, int wordcount)</div><div class='add'>+cli_cmd_global_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd = NULL;</div><div class='del'>-        struct cli_cmd        *global_cmd = NULL;</div><div class='del'>-        int                   count     = 0;</div><div class='del'>-</div><div class='del'>-        cmd = GF_MALLOC (sizeof (global_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, global_cmds, sizeof (global_cmds));</div><div class='del'>-        count = (sizeof (global_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='del'>-</div><div class='del'>-        cli_out ("\ngluster global commands");</div><div class='del'>-        cli_out ("========================\n");</div><div class='del'>-        for (global_cmd = cmd; global_cmd-&gt;pattern; global_cmd++)</div><div class='del'>-                if (_gf_false == global_cmd-&gt;disable)</div><div class='del'>-                        cli_out ("%s - %s", global_cmd-&gt;pattern,</div><div class='del'>-                                 global_cmd-&gt;desc);</div><div class='del'>-</div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        GF_FREE (cmd);</div><div class='del'>-        return 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *global_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    cmd = GF_MALLOC(sizeof(global_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, global_cmds, sizeof(global_cmds));</div><div class='add'>+    count = (sizeof(global_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='add'>+</div><div class='add'>+    cli_out("\ngluster global commands");</div><div class='add'>+    cli_out("========================\n");</div><div class='add'>+    for (global_cmd = cmd; global_cmd-&gt;pattern; global_cmd++)</div><div class='add'>+        if (_gf_false == global_cmd-&gt;disable)</div><div class='add'>+            cli_out("%s - %s", global_cmd-&gt;pattern, global_cmd-&gt;desc);</div><div class='add'>+</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    GF_FREE(cmd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_global_register (struct cli_state *state)</div><div class='add'>+cli_cmd_global_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        struct cli_cmd *cmd =  NULL;</div><div class='del'>-        for (cmd = global_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    for (cmd = global_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_get_state_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                       const char **words, int wordcount)</div><div class='add'>+cli_cmd_get_state_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                      const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     sent        =   0;</div><div class='del'>-        int                     parse_error =   0;</div><div class='del'>-        int                     ret         =  -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc       =  NULL;</div><div class='del'>-        call_frame_t            *frame      =  NULL;</div><div class='del'>-        dict_t                  *options    =  NULL;</div><div class='del'>-        cli_local_t             *local      =  NULL;</div><div class='del'>-        char                    *op_errstr  =  NULL;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_get_state_parse (state, words, wordcount, &amp;options,</div><div class='del'>-                                       &amp;op_errstr);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (op_errstr) {</div><div class='del'>-                        cli_err ("%s", op_errstr);</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        GF_FREE (op_errstr);</div><div class='del'>-                } else</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_STATE];</div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *op_errstr = NULL;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_get_state_parse(state, words, wordcount, &amp;options,</div><div class='add'>+                                  &amp;op_errstr);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (op_errstr) {</div><div class='add'>+            cli_err("%s", op_errstr);</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            GF_FREE(op_errstr);</div><div class='add'>+        } else</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_STATE];</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Getting daemon state failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Getting daemon state failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/cli/src/cli-cmd-misc.c b/cli/src/cli-cmd-misc.c<br/>index c887515af85..04dd2efc220 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-misc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-misc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-misc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-misc.c</a></div><div class='hunk'>@@ -35,107 +35,98 @@ extern struct cli_cmd global_cmds[];</div><div class='ctx'> struct cli_cmd cli_misc_cmds[];</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_quit_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                   const char **words, int wordcount)</div><div class='add'>+cli_cmd_quit_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                 const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        exit (0);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-cli_is_help_command (const char *pattern)</div><div class='add'>+cli_is_help_command(const char *pattern)</div><div class='ctx'> {</div><div class='del'>-        /* FixFixFix</div><div class='del'>-         * This is not the best way to determine whether</div><div class='del'>-         * this is a help command</div><div class='del'>-         */</div><div class='del'>-        if (strstr (pattern, "help"))</div><div class='del'>-                return _gf_true;</div><div class='del'>-</div><div class='del'>-        return _gf_false;</div><div class='add'>+    /* FixFixFix</div><div class='add'>+     * This is not the best way to determine whether</div><div class='add'>+     * this is a help command</div><div class='add'>+     */</div><div class='add'>+    if (strstr(pattern, "help"))</div><div class='add'>+        return _gf_true;</div><div class='add'>+</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_display_help (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                      const char **words, int wordcount)</div><div class='add'>+cli_cmd_display_help(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                     const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd[] = {cli_misc_cmds, cli_probe_cmds,</div><div class='del'>-                                        volume_cmds, bitrot_cmds, quota_cmds,</div><div class='add'>+    struct cli_cmd *cmd[] = {</div><div class='add'>+        cli_misc_cmds,</div><div class='add'>+        cli_probe_cmds,</div><div class='add'>+        volume_cmds,</div><div class='add'>+        bitrot_cmds,</div><div class='add'>+        quota_cmds,</div><div class='ctx'> #if !defined(__NetBSD__)</div><div class='del'>-                                        tier_cmds,</div><div class='add'>+        tier_cmds,</div><div class='ctx'> #endif</div><div class='del'>-                                        snapshot_cmds, global_cmds, NULL};</div><div class='del'>-        struct cli_cmd        *cmd_ind      = NULL;</div><div class='del'>-        int                    i            = 0;</div><div class='del'>-        gf_boolean_t           list_all     = _gf_false;</div><div class='del'>-</div><div class='del'>-         /* cli_system_cmds commands for internal usage</div><div class='del'>-           they are not exposed</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /* If "help all" */</div><div class='del'>-        if (wordcount == 2)</div><div class='del'>-                list_all = _gf_true;</div><div class='del'>-</div><div class='del'>-        for (i = 0; cmd[i] != NULL; i++) {</div><div class='del'>-                for (cmd_ind = cmd[i]; cmd_ind-&gt;pattern; cmd_ind++) {</div><div class='del'>-                        if ((_gf_false == cmd_ind-&gt;disable) &amp;&amp;</div><div class='del'>-                            cli_is_help_command (cmd_ind-&gt;pattern)) {</div><div class='del'>-                                if (list_all &amp;&amp; (cmd_ind-&gt;cbk)) {</div><div class='del'>-                                        cmd_ind-&gt;cbk (state, in_word, words,</div><div class='del'>-                                                      wordcount);</div><div class='del'>-                                } else {</div><div class='del'>-                                        cli_out (" %-25s- %s", cmd_ind-&gt;pattern,</div><div class='del'>-                                                 cmd_ind-&gt;desc);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        snapshot_cmds,</div><div class='add'>+        global_cmds,</div><div class='add'>+        NULL</div><div class='add'>+    };</div><div class='add'>+    struct cli_cmd *cmd_ind = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t list_all = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* cli_system_cmds commands for internal usage</div><div class='add'>+      they are not exposed</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    /* If "help all" */</div><div class='add'>+    if (wordcount == 2)</div><div class='add'>+        list_all = _gf_true;</div><div class='add'>+</div><div class='add'>+    for (i = 0; cmd[i] != NULL; i++) {</div><div class='add'>+        for (cmd_ind = cmd[i]; cmd_ind-&gt;pattern; cmd_ind++) {</div><div class='add'>+            if ((_gf_false == cmd_ind-&gt;disable) &amp;&amp;</div><div class='add'>+                cli_is_help_command(cmd_ind-&gt;pattern)) {</div><div class='add'>+                if (list_all &amp;&amp; (cmd_ind-&gt;cbk)) {</div><div class='add'>+                    cmd_ind-&gt;cbk(state, in_word, words, wordcount);</div><div class='add'>+                } else {</div><div class='add'>+                    cli_out(" %-25s- %s", cmd_ind-&gt;pattern, cmd_ind-&gt;desc);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        return 0;</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct cli_cmd cli_help_cmds[] = {</div><div class='del'>-        { "help [all]",</div><div class='del'>-           cli_cmd_display_help,</div><div class='del'>-           "display help for command classes"},</div><div class='del'>-</div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='del'>-</div><div class='add'>+    {"help [all]", cli_cmd_display_help, "display help for command classes"},</div><div class='ctx'> </div><div class='del'>-struct cli_cmd cli_misc_cmds[] = {</div><div class='del'>-        { "quit",</div><div class='del'>-          cli_cmd_quit_cbk,</div><div class='del'>-          "quit"},</div><div class='del'>-        { "exit",</div><div class='del'>-          cli_cmd_quit_cbk,</div><div class='del'>-          "exit"},</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+struct cli_cmd cli_misc_cmds[] = {{"quit", cli_cmd_quit_cbk, "quit"},</div><div class='add'>+                                  {"exit", cli_cmd_quit_cbk, "exit"},</div><div class='ctx'> </div><div class='add'>+                                  {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_misc_register (struct cli_state *state)</div><div class='add'>+cli_cmd_misc_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        struct cli_cmd *cmd = NULL;</div><div class='del'>-</div><div class='del'>-        for (cmd = cli_misc_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (cmd = cli_help_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+</div><div class='add'>+    for (cmd = cli_misc_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (cmd = cli_help_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c<br/>index 48d6ebd64a7..3f9056b5d9e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-parser.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-parser.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-parser.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-parser.c</a></div><div class='hunk'>@@ -27,2726 +27,2794 @@</div><div class='ctx'> #define MAX_SNAP_DESCRIPTION_LEN 1024</div><div class='ctx'> </div><div class='ctx'> struct snap_config_opt_vals_ snap_confopt_vals[] = {</div><div class='del'>-        {.op_name        = "snap-max-hard-limit",</div><div class='del'>-         .question       = "Changing snapshot-max-hard-limit "</div><div class='del'>-                           "will limit the creation of new snapshots "</div><div class='del'>-                           "if they exceed the new limit.\n"</div><div class='del'>-                           "Do you want to continue?"</div><div class='del'>-        },</div><div class='del'>-        {.op_name        = "snap-max-soft-limit",</div><div class='del'>-         .question       = "If Auto-delete is enabled, snap-max-soft-limit will"</div><div class='del'>-                           " trigger deletion of oldest snapshot, on the "</div><div class='del'>-                           "creation of new snapshot, when the "</div><div class='del'>-                           "snap-max-soft-limit is reached.\n"</div><div class='del'>-                           "Do you want to change the snap-max-soft-limit?"</div><div class='del'>-        },</div><div class='del'>-        {.op_name        = "both",</div><div class='del'>-        .question        = "Changing snapshot-max-hard-limit "</div><div class='del'>-                           "will limit the creation of new snapshots "</div><div class='del'>-                           "if they exceed the new snapshot-max-hard-limit.\n"</div><div class='del'>-                           "If Auto-delete is enabled, snap-max-soft-limit will"</div><div class='del'>-                           " trigger deletion of oldest snapshot, on the "</div><div class='del'>-                           "creation of new snapshot, when the "</div><div class='del'>-                           "snap-max-soft-limit is reached.\n"</div><div class='del'>-                           "Do you want to continue?"</div><div class='del'>-        },</div><div class='del'>-        {.op_name        = NULL,</div><div class='del'>-        }</div><div class='del'>-};</div><div class='add'>+    {.op_name = "snap-max-hard-limit",</div><div class='add'>+     .question = "Changing snapshot-max-hard-limit "</div><div class='add'>+                 "will limit the creation of new snapshots "</div><div class='add'>+                 "if they exceed the new limit.\n"</div><div class='add'>+                 "Do you want to continue?"},</div><div class='add'>+    {.op_name = "snap-max-soft-limit",</div><div class='add'>+     .question = "If Auto-delete is enabled, snap-max-soft-limit will"</div><div class='add'>+                 " trigger deletion of oldest snapshot, on the "</div><div class='add'>+                 "creation of new snapshot, when the "</div><div class='add'>+                 "snap-max-soft-limit is reached.\n"</div><div class='add'>+                 "Do you want to change the snap-max-soft-limit?"},</div><div class='add'>+    {.op_name = "both",</div><div class='add'>+     .question = "Changing snapshot-max-hard-limit "</div><div class='add'>+                 "will limit the creation of new snapshots "</div><div class='add'>+                 "if they exceed the new snapshot-max-hard-limit.\n"</div><div class='add'>+                 "If Auto-delete is enabled, snap-max-soft-limit will"</div><div class='add'>+                 " trigger deletion of oldest snapshot, on the "</div><div class='add'>+                 "creation of new snapshot, when the "</div><div class='add'>+                 "snap-max-soft-limit is reached.\n"</div><div class='add'>+                 "Do you want to continue?"},</div><div class='add'>+    {</div><div class='add'>+        .op_name = NULL,</div><div class='add'>+    }};</div><div class='ctx'> </div><div class='ctx'> enum cli_snap_config_set_types {</div><div class='del'>-        GF_SNAP_CONFIG_SET_HARD = 0,</div><div class='del'>-        GF_SNAP_CONFIG_SET_SOFT = 1,</div><div class='del'>-        GF_SNAP_CONFIG_SET_BOTH = 2,</div><div class='add'>+    GF_SNAP_CONFIG_SET_HARD = 0,</div><div class='add'>+    GF_SNAP_CONFIG_SET_SOFT = 1,</div><div class='add'>+    GF_SNAP_CONFIG_SET_BOTH = 2,</div><div class='ctx'> };</div><div class='ctx'> typedef enum cli_snap_config_set_types cli_snap_config_set_types;</div><div class='ctx'> </div><div class='ctx'> typedef struct _cli_brick {</div><div class='del'>-        struct list_head  list;</div><div class='del'>-        const char       *name;</div><div class='del'>-        int32_t           len;</div><div class='add'>+    struct list_head list;</div><div class='add'>+    const char *name;</div><div class='add'>+    int32_t len;</div><div class='ctx'> } cli_brick_t;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_validate_volume (char *volname);</div><div class='add'>+cli_cmd_validate_volume(char *volname);</div><div class='ctx'> </div><div class='ctx'> static const char *</div><div class='del'>-id_sel (void *wcon)</div><div class='add'>+id_sel(void *wcon)</div><div class='ctx'> {</div><div class='del'>-        return (const char *)wcon;</div><div class='add'>+    return (const char *)wcon;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-str_getunamb (const char *tok, char **opwords)</div><div class='add'>+str_getunamb(const char *tok, char **opwords)</div><div class='ctx'> {</div><div class='del'>-        return (char *)cli_getunamb (tok, (void **)opwords, id_sel);</div><div class='add'>+    return (char *)cli_getunamb(tok, (void **)opwords, id_sel);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_bricks_parse (const char **words, int wordcount, int brick_index,</div><div class='del'>-                      char **bricks, int *brick_count)</div><div class='add'>+cli_cmd_bricks_parse(const char **words, int wordcount, int brick_index,</div><div class='add'>+                     char **bricks, int *brick_count)</div><div class='ctx'> {</div><div class='del'>-        int                         ret = 0;</div><div class='del'>-        char                 *delimiter = NULL;</div><div class='del'>-        char                 *host_name = NULL;</div><div class='del'>-        char                  *tmp_host = NULL;</div><div class='del'>-        char                *bricks_str = NULL;</div><div class='del'>-        int                         len = 0;</div><div class='del'>-        int              brick_list_len = 1; /* For initial space */</div><div class='del'>-        struct list_head     brick_list = { 0, };</div><div class='del'>-        cli_brick_t              *brick = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (wordcount);</div><div class='del'>-        GF_ASSERT (bricks);</div><div class='del'>-        GF_ASSERT (brick_index &gt; 0);</div><div class='del'>-        GF_ASSERT (brick_index &lt; wordcount);</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD(&amp;brick_list);</div><div class='del'>-</div><div class='del'>-        while (brick_index &lt; wordcount) {</div><div class='del'>-                if (validate_brick_name ((char *)words[brick_index])) {</div><div class='del'>-                        cli_err ("Wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                                 "&lt;export-dir-abs-path&gt;", words[brick_index]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        delimiter = strrchr (words[brick_index], ':');</div><div class='del'>-                        ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                tmp_host = gf_strdup ((char *)words[brick_index]);</div><div class='del'>-                if (!tmp_host) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Out of memory");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                get_host_name (tmp_host, &amp;host_name);</div><div class='del'>-                if (!host_name) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log("cli",GF_LOG_ERROR, "Unable to allocate "</div><div class='del'>-                               "memory");</div><div class='del'>-                        GF_FREE (tmp_host);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!(strcmp (host_name, "localhost") &amp;&amp;</div><div class='del'>-                      strcmp (host_name, "127.0.0.1") &amp;&amp;</div><div class='del'>-                      strncmp (host_name, "0.", 2))) {</div><div class='del'>-                        cli_err ("Please provide a valid hostname/ip other "</div><div class='del'>-                                 "than localhost, 127.0.0.1 or loopback "</div><div class='del'>-                                 "address (0.0.0.0 to 0.255.255.255).");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        GF_FREE (tmp_host);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (!valid_internet_address (host_name, _gf_false)) {</div><div class='del'>-                        cli_err ("internet address '%s' does not conform to "</div><div class='del'>-                                 "standards", host_name);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (tmp_host);</div><div class='del'>-                list_for_each_entry(brick, &amp;brick_list, list) {</div><div class='del'>-                        if (strcmp(brick-&gt;name, words[brick_index]) == 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                cli_err("Found duplicate exports %s",</div><div class='del'>-                                        words[brick_index]);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                brick = GF_MALLOC(sizeof(cli_brick_t), gf_common_list_node);</div><div class='del'>-                if (brick == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log("cli", GF_LOG_ERROR, "Out of memory");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                len = strlen(words[brick_index]);</div><div class='del'>-                brick-&gt;name = words[brick_index];</div><div class='del'>-                brick-&gt;len = len;</div><div class='del'>-                list_add_tail(&amp;brick-&gt;list, &amp;brick_list);</div><div class='del'>-</div><div class='del'>-                brick_list_len += len + 1; /* Brick name + space */</div><div class='del'>-                ++(*brick_count);</div><div class='del'>-                ++brick_index;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* If brick count is not valid exit here */</div><div class='del'>-        if (!*brick_count) {</div><div class='del'>-                cli_err ("No bricks specified");</div><div class='del'>-                ret = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    char *host_name = NULL;</div><div class='add'>+    char *tmp_host = NULL;</div><div class='add'>+    char *bricks_str = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    int brick_list_len = 1; /* For initial space */</div><div class='add'>+    struct list_head brick_list = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    cli_brick_t *brick = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(wordcount);</div><div class='add'>+    GF_ASSERT(bricks);</div><div class='add'>+    GF_ASSERT(brick_index &gt; 0);</div><div class='add'>+    GF_ASSERT(brick_index &lt; wordcount);</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;brick_list);</div><div class='add'>+</div><div class='add'>+    while (brick_index &lt; wordcount) {</div><div class='add'>+        if (validate_brick_name((char *)words[brick_index])) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+                "&lt;export-dir-abs-path&gt;",</div><div class='add'>+                words[brick_index]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            delimiter = strrchr(words[brick_index], ':');</div><div class='add'>+            ret = gf_canonicalize_path(delimiter + 1);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        brick_list_len++; /* For terminating null char */</div><div class='del'>-</div><div class='del'>-        bricks_str = GF_MALLOC(brick_list_len, gf_common_mt_char);</div><div class='del'>-        if (bricks_str == NULL) {</div><div class='add'>+        tmp_host = gf_strdup((char *)words[brick_index]);</div><div class='add'>+        if (!tmp_host) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Out of memory");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        get_host_name(tmp_host, &amp;host_name);</div><div class='add'>+        if (!host_name) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to allocate "</div><div class='add'>+                   "memory");</div><div class='add'>+            GF_FREE(tmp_host);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!(strcmp(host_name, "localhost") &amp;&amp;</div><div class='add'>+              strcmp(host_name, "127.0.0.1") &amp;&amp; strncmp(host_name, "0.", 2))) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Please provide a valid hostname/ip other "</div><div class='add'>+                "than localhost, 127.0.0.1 or loopback "</div><div class='add'>+                "address (0.0.0.0 to 0.255.255.255).");</div><div class='add'>+            ret = -1;</div><div class='add'>+            GF_FREE(tmp_host);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (!valid_internet_address(host_name, _gf_false)) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "internet address '%s' does not conform to "</div><div class='add'>+                "standards",</div><div class='add'>+                host_name);</div><div class='add'>+        }</div><div class='add'>+        GF_FREE(tmp_host);</div><div class='add'>+        list_for_each_entry(brick, &amp;brick_list, list)</div><div class='add'>+        {</div><div class='add'>+            if (strcmp(brick-&gt;name, words[brick_index]) == 0) {</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                gf_log("cli", GF_LOG_ERROR, "Out of memory");</div><div class='add'>+                cli_err("Found duplicate exports %s", words[brick_index]);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        *bricks = bricks_str;</div><div class='del'>-        *bricks_str = ' ';</div><div class='del'>-        bricks_str++;</div><div class='del'>-        while (!list_empty(&amp;brick_list)) {</div><div class='del'>-                brick = list_first_entry(&amp;brick_list, cli_brick_t, list);</div><div class='del'>-                list_del_init(&amp;brick-&gt;list);</div><div class='del'>-                memcpy(bricks_str, brick-&gt;name, brick-&gt;len);</div><div class='del'>-                bricks_str[brick-&gt;len] = ' ';</div><div class='del'>-                bricks_str += brick-&gt;len + 1;</div><div class='del'>-                GF_FREE(brick);</div><div class='add'>+</div><div class='add'>+        brick = GF_MALLOC(sizeof(cli_brick_t), gf_common_list_node);</div><div class='add'>+        if (brick == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Out of memory");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        *bricks_str = 0;</div><div class='add'>+        len = strlen(words[brick_index]);</div><div class='add'>+        brick-&gt;name = words[brick_index];</div><div class='add'>+        brick-&gt;len = len;</div><div class='add'>+        list_add_tail(&amp;brick-&gt;list, &amp;brick_list);</div><div class='add'>+</div><div class='add'>+        brick_list_len += len + 1; /* Brick name + space */</div><div class='add'>+        ++(*brick_count);</div><div class='add'>+        ++brick_index;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If brick count is not valid exit here */</div><div class='add'>+    if (!*brick_count) {</div><div class='add'>+        cli_err("No bricks specified");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    brick_list_len++; /* For terminating null char */</div><div class='add'>+</div><div class='add'>+    bricks_str = GF_MALLOC(brick_list_len, gf_common_mt_char);</div><div class='add'>+    if (bricks_str == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Out of memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    *bricks = bricks_str;</div><div class='add'>+    *bricks_str = ' ';</div><div class='add'>+    bricks_str++;</div><div class='add'>+    while (!list_empty(&amp;brick_list)) {</div><div class='add'>+        brick = list_first_entry(&amp;brick_list, cli_brick_t, list);</div><div class='add'>+        list_del_init(&amp;brick-&gt;list);</div><div class='add'>+        memcpy(bricks_str, brick-&gt;name, brick-&gt;len);</div><div class='add'>+        bricks_str[brick-&gt;len] = ' ';</div><div class='add'>+        bricks_str += brick-&gt;len + 1;</div><div class='add'>+        GF_FREE(brick);</div><div class='add'>+    }</div><div class='add'>+    *bricks_str = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        while (!list_empty(&amp;brick_list)) {</div><div class='del'>-                brick = list_first_entry(&amp;brick_list, cli_brick_t, list);</div><div class='del'>-                list_del_init(&amp;brick-&gt;list);</div><div class='del'>-                GF_FREE(brick);</div><div class='del'>-        }</div><div class='add'>+    while (!list_empty(&amp;brick_list)) {</div><div class='add'>+        brick = list_first_entry(&amp;brick_list, cli_brick_t, list);</div><div class='add'>+        list_del_init(&amp;brick-&gt;list);</div><div class='add'>+        GF_FREE(brick);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_create_disperse_check (struct cli_state *state, int *disperse,</div><div class='del'>-                               int *redundancy, int *data, int count)</div><div class='add'>+cli_cmd_create_disperse_check(struct cli_state *state, int *disperse,</div><div class='add'>+                              int *redundancy, int *data, int count)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int tmp = 0;</div><div class='del'>-        gf_answer_t answer = GF_ANSWER_NO;</div><div class='del'>-        char question[128];</div><div class='del'>-</div><div class='del'>-        const char *question1 = "There isn't an optimal redundancy value "</div><div class='del'>-                                "for this configuration. Do you want to "</div><div class='del'>-                                "create the volume with redundancy 1 ?";</div><div class='del'>-</div><div class='del'>-        const char *question2 = "The optimal redundancy for this "</div><div class='del'>-                                "configuration is %d. Do you want to create "</div><div class='del'>-                                "the volume with this value ?";</div><div class='del'>-</div><div class='del'>-        const char *question3 = "This configuration is not optimal on most "</div><div class='del'>-                                "workloads. Do you want to use it ?";</div><div class='del'>-</div><div class='del'>-        const char *question4 = "Redundancy for this configuration is %d. "</div><div class='del'>-                                "Do you want to create "</div><div class='del'>-                                "the volume with this value ?";</div><div class='del'>-</div><div class='del'>-        if (*data &gt; 0) {</div><div class='del'>-                if (*disperse &gt; 0 &amp;&amp; *redundancy &gt; 0) {</div><div class='del'>-                        if (*disperse != (*data + *redundancy)) {</div><div class='del'>-                                cli_err ("Disperse count(%d) should be equal "</div><div class='del'>-                                         "to sum of disperse-data count(%d) and "</div><div class='del'>-                                         "redundancy count(%d)", *disperse,</div><div class='del'>-                                         *data, *redundancy);</div><div class='del'>-                                return -1;</div><div class='del'>-                        }</div><div class='del'>-                } else if (*redundancy &gt; 0) {</div><div class='del'>-                        *disperse = *data + *redundancy;</div><div class='del'>-                } else if (*disperse &gt; 0) {</div><div class='del'>-                        *redundancy = *disperse - *data;</div><div class='del'>-                } else {</div><div class='del'>-                        if ((count - *data) &gt;= *data) {</div><div class='del'>-                                cli_err ("Please provide redundancy count "</div><div class='del'>-                                         "along with disperse-data count");</div><div class='del'>-                                return -1;</div><div class='del'>-                        } else {</div><div class='del'>-                                sprintf (question, question4, count - *data);</div><div class='del'>-                                answer = cli_cmd_get_confirmation (state,</div><div class='del'>-                                                                   question);</div><div class='del'>-                                if (answer == GF_ANSWER_NO)</div><div class='del'>-                                        return -1;</div><div class='del'>-                                *redundancy = count - *data;</div><div class='del'>-                                *disperse = count;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int tmp = 0;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    char question[128];</div><div class='add'>+</div><div class='add'>+    const char *question1 =</div><div class='add'>+        "There isn't an optimal redundancy value "</div><div class='add'>+        "for this configuration. Do you want to "</div><div class='add'>+        "create the volume with redundancy 1 ?";</div><div class='add'>+</div><div class='add'>+    const char *question2 =</div><div class='add'>+        "The optimal redundancy for this "</div><div class='add'>+        "configuration is %d. Do you want to create "</div><div class='add'>+        "the volume with this value ?";</div><div class='add'>+</div><div class='add'>+    const char *question3 =</div><div class='add'>+        "This configuration is not optimal on most "</div><div class='add'>+        "workloads. Do you want to use it ?";</div><div class='add'>+</div><div class='add'>+    const char *question4 =</div><div class='add'>+        "Redundancy for this configuration is %d. "</div><div class='add'>+        "Do you want to create "</div><div class='add'>+        "the volume with this value ?";</div><div class='add'>+</div><div class='add'>+    if (*data &gt; 0) {</div><div class='add'>+        if (*disperse &gt; 0 &amp;&amp; *redundancy &gt; 0) {</div><div class='add'>+            if (*disperse != (*data + *redundancy)) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Disperse count(%d) should be equal "</div><div class='add'>+                    "to sum of disperse-data count(%d) and "</div><div class='add'>+                    "redundancy count(%d)",</div><div class='add'>+                    *disperse, *data, *redundancy);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+        } else if (*redundancy &gt; 0) {</div><div class='add'>+            *disperse = *data + *redundancy;</div><div class='add'>+        } else if (*disperse &gt; 0) {</div><div class='add'>+            *redundancy = *disperse - *data;</div><div class='add'>+        } else {</div><div class='add'>+            if ((count - *data) &gt;= *data) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Please provide redundancy count "</div><div class='add'>+                    "along with disperse-data count");</div><div class='add'>+                return -1;</div><div class='add'>+            } else {</div><div class='add'>+                sprintf(question, question4, count - *data);</div><div class='add'>+                answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+                if (answer == GF_ANSWER_NO)</div><div class='add'>+                    return -1;</div><div class='add'>+                *redundancy = count - *data;</div><div class='add'>+                *disperse = count;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (*disperse &lt;= 0) {</div><div class='del'>-                if (count &lt; 3) {</div><div class='del'>-                        cli_err ("number of bricks must be greater "</div><div class='del'>-                                 "than 2");</div><div class='add'>+    if (*disperse &lt;= 0) {</div><div class='add'>+        if (count &lt; 3) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks must be greater "</div><div class='add'>+                "than 2");</div><div class='ctx'> </div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                *disperse = count;</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        *disperse = count;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (*redundancy == -1) {</div><div class='del'>-                tmp = *disperse - 1;</div><div class='del'>-                for (i = tmp / 2;</div><div class='del'>-                     (i &gt; 0) &amp;&amp; ((tmp &amp; -tmp) != tmp);</div><div class='del'>-                     i--, tmp--);</div><div class='del'>-</div><div class='del'>-                if (i == 0) {</div><div class='del'>-                        answer = cli_cmd_get_confirmation(state, question1);</div><div class='del'>-                        if (answer == GF_ANSWER_NO)</div><div class='del'>-                                return -1;</div><div class='add'>+    if (*redundancy == -1) {</div><div class='add'>+        tmp = *disperse - 1;</div><div class='add'>+        for (i = tmp / 2; (i &gt; 0) &amp;&amp; ((tmp &amp; -tmp) != tmp); i--, tmp--)</div><div class='add'>+            ;</div><div class='ctx'> </div><div class='del'>-                        *redundancy = 1;</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                {</div><div class='del'>-                        *redundancy = *disperse - tmp;</div><div class='del'>-                        if (*redundancy &gt; 1) {</div><div class='del'>-                                sprintf(question, question2, *redundancy);</div><div class='del'>-                                answer = cli_cmd_get_confirmation(state,</div><div class='del'>-                                                                  question);</div><div class='del'>-                                if (answer == GF_ANSWER_NO)</div><div class='del'>-                                        return -1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (i == 0) {</div><div class='add'>+            answer = cli_cmd_get_confirmation(state, question1);</div><div class='add'>+            if (answer == GF_ANSWER_NO)</div><div class='add'>+                return -1;</div><div class='ctx'> </div><div class='del'>-                tmp = 0;</div><div class='add'>+            *redundancy = 1;</div><div class='ctx'>         } else {</div><div class='del'>-                tmp = *disperse - *redundancy;</div><div class='add'>+            *redundancy = *disperse - tmp;</div><div class='add'>+            if (*redundancy &gt; 1) {</div><div class='add'>+                sprintf(question, question2, *redundancy);</div><div class='add'>+                answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+                if (answer == GF_ANSWER_NO)</div><div class='add'>+                    return -1;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (*redundancy &gt; (*disperse - 1) / 2) {</div><div class='del'>-                cli_err ("redundancy must be less than %d for a "</div><div class='del'>-                         "disperse %d volume",</div><div class='del'>-                         (*disperse + 1) / 2, *disperse);</div><div class='add'>+        tmp = 0;</div><div class='add'>+    } else {</div><div class='add'>+        tmp = *disperse - *redundancy;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (*redundancy &gt; (*disperse - 1) / 2) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "redundancy must be less than %d for a "</div><div class='add'>+            "disperse %d volume",</div><div class='add'>+            (*disperse + 1) / 2, *disperse);</div><div class='ctx'> </div><div class='del'>-        if ((tmp &amp; -tmp) != tmp) {</div><div class='del'>-                answer = cli_cmd_get_confirmation(state, question3);</div><div class='del'>-                if (answer == GF_ANSWER_NO)</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if ((tmp &amp; -tmp) != tmp) {</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question3);</div><div class='add'>+        if (answer == GF_ANSWER_NO)</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-cli_validate_disperse_volume (char *word, gf1_cluster_type type,</div><div class='del'>-                              const char **words, int32_t wordcount,</div><div class='del'>-                              int32_t index, int32_t *disperse_count,</div><div class='del'>-                              int32_t *redundancy_count,</div><div class='del'>-                              int32_t *data_count)</div><div class='add'>+cli_validate_disperse_volume(char *word, gf1_cluster_type type,</div><div class='add'>+                             const char **words, int32_t wordcount,</div><div class='add'>+                             int32_t index, int32_t *disperse_count,</div><div class='add'>+                             int32_t *redundancy_count, int32_t *data_count)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case GF_CLUSTER_TYPE_NONE:</div><div class='ctx'>         case GF_CLUSTER_TYPE_DISPERSE:</div><div class='del'>-                if (strcmp (word, "disperse") == 0) {</div><div class='del'>-                        if (*disperse_count &gt;= 0) {</div><div class='del'>-                                cli_err ("disperse option given twice");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if (wordcount &lt; (index+2)) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_string2int (words[index + 1], disperse_count);</div><div class='del'>-                        if (ret == -1 &amp;&amp; errno == EINVAL) {</div><div class='del'>-                                *disperse_count = 0;</div><div class='del'>-                                ret = 1;</div><div class='del'>-                        } else if (ret == -1) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                if (*disperse_count &lt; 3) {</div><div class='del'>-                                        cli_err ("disperse count must "</div><div class='del'>-                                                 "be greater than 2");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                ret = 2;</div><div class='del'>-                        }</div><div class='del'>-                } else if (strcmp (word, "disperse-data") == 0) {</div><div class='del'>-                        if (*data_count &gt;= 0) {</div><div class='del'>-                                cli_err ("disperse-data option given twice");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if (wordcount &lt; (index+2)) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_string2int (words[index+1], data_count);</div><div class='del'>-                        if (ret == -1 || *data_count &lt; 2) {</div><div class='del'>-                                cli_err ("disperse-data must be greater than 1");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 2;</div><div class='del'>-                } else if (strcmp (word, "redundancy") == 0) {</div><div class='del'>-                        if (*redundancy_count &gt;= 0) {</div><div class='del'>-                                cli_err ("redundancy option given twice");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if (wordcount &lt; (index+2)) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_string2int (words[index+1], redundancy_count);</div><div class='del'>-                        if (ret == -1 || *redundancy_count &lt; 1) {</div><div class='del'>-                                cli_err ("redundancy must be greater than 0");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 2;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (strcmp(word, "disperse") == 0) {</div><div class='add'>+                if (*disperse_count &gt;= 0) {</div><div class='add'>+                    cli_err("disperse option given twice");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                if (wordcount &lt; (index + 2)) {</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                ret = gf_string2int(words[index + 1], disperse_count);</div><div class='add'>+                if (ret == -1 &amp;&amp; errno == EINVAL) {</div><div class='add'>+                    *disperse_count = 0;</div><div class='add'>+                    ret = 1;</div><div class='add'>+                } else if (ret == -1) {</div><div class='add'>+                    goto out;</div><div class='add'>+                } else {</div><div class='add'>+                    if (*disperse_count &lt; 3) {</div><div class='add'>+                        cli_err(</div><div class='add'>+                            "disperse count must "</div><div class='add'>+                            "be greater than 2");</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                    ret = 2;</div><div class='add'>+                }</div><div class='add'>+            } else if (strcmp(word, "disperse-data") == 0) {</div><div class='add'>+                if (*data_count &gt;= 0) {</div><div class='add'>+                    cli_err("disperse-data option given twice");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                if (wordcount &lt; (index + 2)) {</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                ret = gf_string2int(words[index + 1], data_count);</div><div class='add'>+                if (ret == -1 || *data_count &lt; 2) {</div><div class='add'>+                    cli_err("disperse-data must be greater than 1");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                ret = 2;</div><div class='add'>+            } else if (strcmp(word, "redundancy") == 0) {</div><div class='add'>+                if (*redundancy_count &gt;= 0) {</div><div class='add'>+                    cli_err("redundancy option given twice");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                if (wordcount &lt; (index + 2)) {</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                ret = gf_string2int(words[index + 1], redundancy_count);</div><div class='add'>+                if (ret == -1 || *redundancy_count &lt; 1) {</div><div class='add'>+                    cli_err("redundancy must be greater than 0");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                ret = 2;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_CLUSTER_TYPE_STRIPE_REPLICATE:</div><div class='del'>-                cli_err ("striped-replicated-dispersed volume "</div><div class='del'>-                         "is not supported");</div><div class='del'>-                goto out;</div><div class='add'>+            cli_err(</div><div class='add'>+                "striped-replicated-dispersed volume "</div><div class='add'>+                "is not supported");</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_CLUSTER_TYPE_TIER:</div><div class='del'>-                cli_err ("tier-dispersed volume is not "</div><div class='del'>-                         "supported");</div><div class='del'>-                goto out;</div><div class='add'>+            cli_err(</div><div class='add'>+                "tier-dispersed volume is not "</div><div class='add'>+                "supported");</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_CLUSTER_TYPE_STRIPE:</div><div class='del'>-                cli_err ("striped-dispersed volume is not "</div><div class='del'>-                         "supported");</div><div class='del'>-                goto out;</div><div class='add'>+            cli_err(</div><div class='add'>+                "striped-dispersed volume is not "</div><div class='add'>+                "supported");</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_CLUSTER_TYPE_REPLICATE:</div><div class='del'>-                cli_err ("replicated-dispersed volume is not "</div><div class='del'>-                         "supported");</div><div class='del'>-                goto out;</div><div class='add'>+            cli_err(</div><div class='add'>+                "replicated-dispersed volume is not "</div><div class='add'>+                "supported");</div><div class='add'>+            goto out;</div><div class='ctx'>         default:</div><div class='del'>-                cli_err ("Invalid type given");</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            cli_err("Invalid type given");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_validate_volname (const char *volname)</div><div class='add'>+cli_validate_volname(const char *volname)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret                       = -1;</div><div class='del'>-        int32_t            i                         = -1;</div><div class='del'>-        int                volname_len;</div><div class='del'>-        static const char * const invalid_volnames[] = {</div><div class='del'>-                                      "volume", "type", "subvolumes", "option",</div><div class='del'>-                                      "end-volume", "all", "volume_not_in_ring",</div><div class='del'>-                                      "description", "force",</div><div class='del'>-                                      "snap-max-hard-limit",</div><div class='del'>-                                      "snap-max-soft-limit", "auto-delete",</div><div class='del'>-                                      "activate-on-create", NULL};</div><div class='del'>-</div><div class='del'>-        if (volname[0] == '-')</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; invalid_volnames[i]; i++) {</div><div class='del'>-                if (!strcmp (volname, invalid_volnames[i])) {</div><div class='del'>-                        cli_err ("\"%s\" cannot be the name of a volume.",</div><div class='del'>-                                 volname);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t i = -1;</div><div class='add'>+    int volname_len;</div><div class='add'>+    static const char *const invalid_volnames[] = {"volume",</div><div class='add'>+                                                   "type",</div><div class='add'>+                                                   "subvolumes",</div><div class='add'>+                                                   "option",</div><div class='add'>+                                                   "end-volume",</div><div class='add'>+                                                   "all",</div><div class='add'>+                                                   "volume_not_in_ring",</div><div class='add'>+                                                   "description",</div><div class='add'>+                                                   "force",</div><div class='add'>+                                                   "snap-max-hard-limit",</div><div class='add'>+                                                   "snap-max-soft-limit",</div><div class='add'>+                                                   "auto-delete",</div><div class='add'>+                                                   "activate-on-create",</div><div class='add'>+                                                   NULL};</div><div class='ctx'> </div><div class='del'>-        if (strchr (volname, '/'))</div><div class='del'>-                goto out;</div><div class='add'>+    if (volname[0] == '-')</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname_len = strlen (volname);</div><div class='del'>-        if (volname_len &gt; GD_VOLUME_NAME_MAX) {</div><div class='del'>-                cli_err("Volume name exceeds %d characters.",</div><div class='del'>-                        GD_VOLUME_NAME_MAX);</div><div class='del'>-                goto out;</div><div class='add'>+    for (i = 0; invalid_volnames[i]; i++) {</div><div class='add'>+        if (!strcmp(volname, invalid_volnames[i])) {</div><div class='add'>+            cli_err("\"%s\" cannot be the name of a volume.", volname);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; volname_len; i++) {</div><div class='del'>-                if (!isalnum (volname[i]) &amp;&amp; (volname[i] != '_') &amp;&amp;</div><div class='del'>-                   (volname[i] != '-')) {</div><div class='del'>-                        cli_err ("Volume name should not contain \"%c\""</div><div class='del'>-                                 " character.\nVolume names can only"</div><div class='del'>-                                 "contain alphanumeric, '-' and '_' "</div><div class='del'>-                                 "characters.", volname[i]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (strchr(volname, '/'))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    volname_len = strlen(volname);</div><div class='add'>+    if (volname_len &gt; GD_VOLUME_NAME_MAX) {</div><div class='add'>+        cli_err("Volume name exceeds %d characters.", GD_VOLUME_NAME_MAX);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; volname_len; i++) {</div><div class='add'>+        if (!isalnum(volname[i]) &amp;&amp; (volname[i] != '_') &amp;&amp;</div><div class='add'>+            (volname[i] != '-')) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Volume name should not contain \"%c\""</div><div class='add'>+                " character.\nVolume names can only"</div><div class='add'>+                "contain alphanumeric, '-' and '_' "</div><div class='add'>+                "characters.",</div><div class='add'>+                volname[i]);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_create_parse (struct cli_state *state, const char **words,</div><div class='del'>-                             int wordcount, dict_t **options, char **brick_list)</div><div class='add'>+cli_cmd_volume_create_parse(struct cli_state *state, const char **words,</div><div class='add'>+                            int wordcount, dict_t **options, char **brick_list)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;</div><div class='del'>-        int     sub_count = 1;</div><div class='del'>-        int     brick_index = 0;</div><div class='del'>-        char    *trans_type = NULL;</div><div class='del'>-        int32_t index = 0;</div><div class='del'>-        char    *bricks = NULL;</div><div class='del'>-        int32_t brick_count = 0;</div><div class='del'>-        char    *opwords[] = { "replica", "stripe", "transport", "disperse",</div><div class='del'>-                               "redundancy", "disperse-data", "arbiter", NULL };</div><div class='del'>-</div><div class='del'>-        char    *w = NULL;</div><div class='del'>-        int      op_count = 0;</div><div class='del'>-        int32_t  replica_count = 1;</div><div class='del'>-        int32_t  arbiter_count = 0;</div><div class='del'>-        int32_t  stripe_count = 1;</div><div class='del'>-        int32_t  disperse_count = -1;</div><div class='del'>-        int32_t  redundancy_count = -1;</div><div class='del'>-        int32_t  disperse_data_count = -1;</div><div class='del'>-        gf_boolean_t is_force = _gf_false;</div><div class='del'>-        int wc = wordcount;</div><div class='del'>-        gf_answer_t answer = GF_ANSWER_NO;</div><div class='del'>-        const char *question = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;</div><div class='add'>+    int sub_count = 1;</div><div class='add'>+    int brick_index = 0;</div><div class='add'>+    char *trans_type = NULL;</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    char *bricks = NULL;</div><div class='add'>+    int32_t brick_count = 0;</div><div class='add'>+    char *opwords[] = {"replica",    "stripe",        "transport", "disperse",</div><div class='add'>+                       "redundancy", "disperse-data", "arbiter",   NULL};</div><div class='add'>+</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    int op_count = 0;</div><div class='add'>+    int32_t replica_count = 1;</div><div class='add'>+    int32_t arbiter_count = 0;</div><div class='add'>+    int32_t stripe_count = 1;</div><div class='add'>+    int32_t disperse_count = -1;</div><div class='add'>+    int32_t redundancy_count = -1;</div><div class='add'>+    int32_t disperse_data_count = -1;</div><div class='add'>+    gf_boolean_t is_force = _gf_false;</div><div class='add'>+    int wc = wordcount;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 3)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        /* Validate the volume name here itself */</div><div class='del'>-        if (cli_validate_volname (volname) &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Validate the volume name here itself */</div><div class='add'>+    if (cli_validate_volname(volname) &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 4) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount &lt; 4) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        type = GF_CLUSTER_TYPE_NONE;</div><div class='del'>-        index = 3;</div><div class='add'>+    type = GF_CLUSTER_TYPE_NONE;</div><div class='add'>+    index = 3;</div><div class='ctx'> </div><div class='del'>-        while (op_count &lt; 3) {</div><div class='add'>+    while (op_count &lt; 3) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        w = str_getunamb(words[index], opwords);</div><div class='add'>+        if (!w) {</div><div class='add'>+            break;</div><div class='add'>+        } else if ((strcmp(w, "replica")) == 0) {</div><div class='add'>+            switch (type) {</div><div class='add'>+                case GF_CLUSTER_TYPE_STRIPE_REPLICATE:</div><div class='add'>+                case GF_CLUSTER_TYPE_REPLICATE:</div><div class='add'>+                    cli_err("replica option given twice");</div><div class='add'>+                    goto out;</div><div class='add'>+                case GF_CLUSTER_TYPE_NONE:</div><div class='add'>+                    type = GF_CLUSTER_TYPE_REPLICATE;</div><div class='add'>+                    break;</div><div class='add'>+                case GF_CLUSTER_TYPE_STRIPE:</div><div class='add'>+                    type = GF_CLUSTER_TYPE_STRIPE_REPLICATE;</div><div class='add'>+                    break;</div><div class='add'>+                case GF_CLUSTER_TYPE_TIER:</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "replicated-tiered volume is not "</div><div class='add'>+                        "supported");</div><div class='add'>+                    goto out;</div><div class='add'>+                    break;</div><div class='add'>+                case GF_CLUSTER_TYPE_DISPERSE:</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "replicated-dispersed volume is not "</div><div class='add'>+                        "supported");</div><div class='add'>+                    goto out;</div><div class='add'>+                default:</div><div class='add'>+                    cli_err("Invalid type given");</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (wordcount &lt; (index + 2)) {</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                w = str_getunamb (words[index], opwords);</div><div class='del'>-                if (!w) {</div><div class='del'>-                        break;</div><div class='del'>-                } else if ((strcmp (w, "replica")) == 0) {</div><div class='del'>-                        switch (type) {</div><div class='del'>-                        case GF_CLUSTER_TYPE_STRIPE_REPLICATE:</div><div class='del'>-                        case GF_CLUSTER_TYPE_REPLICATE:</div><div class='del'>-                                cli_err ("replica option given twice");</div><div class='del'>-                                goto out;</div><div class='del'>-                        case GF_CLUSTER_TYPE_NONE:</div><div class='del'>-                                type = GF_CLUSTER_TYPE_REPLICATE;</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_CLUSTER_TYPE_STRIPE:</div><div class='del'>-                                type = GF_CLUSTER_TYPE_STRIPE_REPLICATE;</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_CLUSTER_TYPE_TIER:</div><div class='del'>-                                cli_err ("replicated-tiered volume is not "</div><div class='del'>-                                         "supported");</div><div class='del'>-                                goto out;</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_CLUSTER_TYPE_DISPERSE:</div><div class='del'>-                                cli_err ("replicated-dispersed volume is not "</div><div class='del'>-                                         "supported");</div><div class='del'>-                                goto out;</div><div class='del'>-                        default:</div><div class='del'>-                                cli_err ("Invalid type given");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (wordcount &lt; (index+2)) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        replica_count = strtol (words[index+1], NULL, 0);</div><div class='del'>-                        if (replica_count &lt; 2) {</div><div class='del'>-                                cli_err ("replica count should be greater"</div><div class='del'>-                                         " than 1");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        index += 2;</div><div class='del'>-                        if (words[index]) {</div><div class='del'>-                                if (!strcmp (words[index], "arbiter")) {</div><div class='del'>-                                        ret = gf_string2int (words[index+1],</div><div class='del'>-                                                             &amp;arbiter_count);</div><div class='del'>-                                        if ((ret == -1) || (arbiter_count != 1)) {</div><div class='del'>-                                                cli_err ("For arbiter "</div><div class='del'>-                                                         "configuration, "</div><div class='del'>-                                                         "replica count must be"</div><div class='del'>-                                                         " 2 and arbiter count "</div><div class='del'>-                                                         "must be 1. The 3rd "</div><div class='del'>-                                                         "brick of the replica "</div><div class='del'>-                                                         "will be the arbiter");</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-                                        ret = dict_set_int32 (dict, "arbiter-count",</div><div class='del'>-                                                              arbiter_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        index += 2;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Do this to keep glusterd happy with sending</div><div class='del'>-                           "replica 3 arbiter 1" options to server */</div><div class='del'>-                        if ((arbiter_count == 1) &amp;&amp; (replica_count == 2))</div><div class='del'>-                                replica_count += arbiter_count;</div><div class='del'>-</div><div class='del'>-                        if (replica_count == 2) {</div><div class='del'>-                                if (strcmp (words[wordcount - 1], "force")) {</div><div class='del'>-                                        question = "Replica 2 volumes are prone"</div><div class='del'>-                                                   " to split-brain. Use "</div><div class='del'>-                                                   "Arbiter or Replica 3 to "</div><div class='del'>-                                                   "avoid this. See: "</div><div class='del'>-                                                   "http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/."</div><div class='del'>-                                                   "\nDo you still want to "</div><div class='del'>-                                                   "continue?\n";</div><div class='del'>-                                        answer = cli_cmd_get_confirmation (state,</div><div class='del'>-                                                 question);</div><div class='del'>-                                        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                                        "Volume create "</div><div class='del'>-                                                        "cancelled, exiting");</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_int32 (dict, "replica-count", replica_count);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                } else if ((strcmp (w, "stripe")) == 0) {</div><div class='del'>-                        switch (type) {</div><div class='del'>-                        case GF_CLUSTER_TYPE_STRIPE_REPLICATE:</div><div class='del'>-                        case GF_CLUSTER_TYPE_STRIPE:</div><div class='del'>-                                cli_err ("stripe option given twice");</div><div class='del'>-                                goto out;</div><div class='del'>-                        case GF_CLUSTER_TYPE_NONE:</div><div class='del'>-                                type = GF_CLUSTER_TYPE_STRIPE;</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_CLUSTER_TYPE_REPLICATE:</div><div class='del'>-                                type = GF_CLUSTER_TYPE_STRIPE_REPLICATE;</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_CLUSTER_TYPE_DISPERSE:</div><div class='del'>-                                cli_err ("striped-dispersed volume is not "</div><div class='del'>-                                         "supported");</div><div class='del'>-                                goto out;</div><div class='del'>-                        case GF_CLUSTER_TYPE_TIER:</div><div class='del'>-                                cli_err ("striped-tier volume is not "</div><div class='del'>-                                         "supported");</div><div class='del'>-                                goto out;</div><div class='del'>-                        default:</div><div class='del'>-                                cli_err ("Invalid type given");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if (wordcount &lt; (index + 2)) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        stripe_count = strtol (words[index+1], NULL, 0);</div><div class='del'>-                        if (stripe_count &lt; 2) {</div><div class='del'>-                                cli_err ("stripe count should be greater"</div><div class='del'>-                                         " than 1");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_int32 (dict, "stripe-count", stripe_count);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        index += 2;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                } else if ((strcmp (w, "transport")) == 0) {</div><div class='del'>-                        if (trans_type) {</div><div class='del'>-                                cli_err ("'transport' option given more"</div><div class='del'>-                                         " than one time");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if ((strcasecmp (words[index+1], "tcp") == 0)) {</div><div class='del'>-                                trans_type = gf_strdup ("tcp");</div><div class='del'>-                        } else if ((strcasecmp (words[index+1], "rdma") == 0)) {</div><div class='del'>-                                trans_type = gf_strdup ("rdma");</div><div class='del'>-                        } else if ((strcasecmp (words[index+1], "tcp,rdma") == 0) ||</div><div class='del'>-                                   (strcasecmp (words[index+1], "rdma,tcp") == 0)) {</div><div class='del'>-                                trans_type = gf_strdup ("tcp,rdma");</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_log ("", GF_LOG_ERROR, "incorrect transport"</div><div class='del'>-                                        " protocol specified");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        index += 2;</div><div class='del'>-</div><div class='del'>-                } else if ((strcmp (w, "disperse") == 0) ||</div><div class='del'>-                           (strcmp (w, "redundancy") == 0) ||</div><div class='del'>-                           (strcmp (w, "disperse-data") == 0)) {</div><div class='del'>-                        ret = cli_validate_disperse_volume (w, type, words,</div><div class='del'>-                                      wordcount, index, &amp;disperse_count,</div><div class='del'>-                                      &amp;redundancy_count, &amp;disperse_data_count);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                        index += ret;</div><div class='del'>-                        type = GF_CLUSTER_TYPE_DISPERSE;</div><div class='del'>-                } else if ((strcmp (w, "arbiter") == 0)) {</div><div class='del'>-                        cli_err ("arbiter option must be preceded by replica "</div><div class='del'>-                                 "option.");</div><div class='add'>+            replica_count = strtol(words[index + 1], NULL, 0);</div><div class='add'>+            if (replica_count &lt; 2) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "replica count should be greater"</div><div class='add'>+                    " than 1");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            index += 2;</div><div class='add'>+            if (words[index]) {</div><div class='add'>+                if (!strcmp(words[index], "arbiter")) {</div><div class='add'>+                    ret = gf_string2int(words[index + 1], &amp;arbiter_count);</div><div class='add'>+                    if ((ret == -1) || (arbiter_count != 1)) {</div><div class='add'>+                        cli_err(</div><div class='add'>+                            "For arbiter "</div><div class='add'>+                            "configuration, "</div><div class='add'>+                            "replica count must be"</div><div class='add'>+                            " 2 and arbiter count "</div><div class='add'>+                            "must be 1. The 3rd "</div><div class='add'>+                            "brick of the replica "</div><div class='add'>+                            "will be the arbiter");</div><div class='ctx'>                         ret = -1;</div><div class='ctx'>                         goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        GF_ASSERT (!"opword mismatch");</div><div class='add'>+                    }</div><div class='add'>+                    ret = dict_set_int32(dict, "arbiter-count", arbiter_count);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        goto out;</div><div class='add'>+                    index += 2;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Do this to keep glusterd happy with sending</div><div class='add'>+               "replica 3 arbiter 1" options to server */</div><div class='add'>+            if ((arbiter_count == 1) &amp;&amp; (replica_count == 2))</div><div class='add'>+                replica_count += arbiter_count;</div><div class='add'>+</div><div class='add'>+            if (replica_count == 2) {</div><div class='add'>+                if (strcmp(words[wordcount - 1], "force")) {</div><div class='add'>+                    question =</div><div class='add'>+                        "Replica 2 volumes are prone"</div><div class='add'>+                        " to split-brain. Use "</div><div class='add'>+                        "Arbiter or Replica 3 to "</div><div class='add'>+                        "avoid this. See: "</div><div class='add'>+                        "http://docs.gluster.org/en/latest/"</div><div class='add'>+                        "Administrator%20Guide/"</div><div class='add'>+                        "Split%20brain%20and%20ways%20to%20deal%20with%20it/."</div><div class='add'>+                        "\nDo you still want to "</div><div class='add'>+                        "continue?\n";</div><div class='add'>+                    answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+                    if (GF_ANSWER_NO == answer) {</div><div class='add'>+                        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                               "Volume create "</div><div class='add'>+                               "cancelled, exiting");</div><div class='ctx'>                         ret = -1;</div><div class='ctx'>                         goto out;</div><div class='del'>-                }</div><div class='del'>-                op_count++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!trans_type)</div><div class='del'>-                trans_type = gf_strdup ("tcp");</div><div class='del'>-</div><div class='del'>-        if (index &gt;= wordcount) {</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_int32(dict, "replica-count", replica_count);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+        } else if ((strcmp(w, "stripe")) == 0) {</div><div class='add'>+            switch (type) {</div><div class='add'>+                case GF_CLUSTER_TYPE_STRIPE_REPLICATE:</div><div class='add'>+                case GF_CLUSTER_TYPE_STRIPE:</div><div class='add'>+                    cli_err("stripe option given twice");</div><div class='add'>+                    goto out;</div><div class='add'>+                case GF_CLUSTER_TYPE_NONE:</div><div class='add'>+                    type = GF_CLUSTER_TYPE_STRIPE;</div><div class='add'>+                    break;</div><div class='add'>+                case GF_CLUSTER_TYPE_REPLICATE:</div><div class='add'>+                    type = GF_CLUSTER_TYPE_STRIPE_REPLICATE;</div><div class='add'>+                    break;</div><div class='add'>+                case GF_CLUSTER_TYPE_DISPERSE:</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "striped-dispersed volume is not "</div><div class='add'>+                        "supported");</div><div class='add'>+                    goto out;</div><div class='add'>+                case GF_CLUSTER_TYPE_TIER:</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "striped-tier volume is not "</div><div class='add'>+                        "supported");</div><div class='add'>+                    goto out;</div><div class='add'>+                default:</div><div class='add'>+                    cli_err("Invalid type given");</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='add'>+            if (wordcount &lt; (index + 2)) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            stripe_count = strtol(words[index + 1], NULL, 0);</div><div class='add'>+            if (stripe_count &lt; 2) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "stripe count should be greater"</div><div class='add'>+                    " than 1");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_int32(dict, "stripe-count", stripe_count);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            index += 2;</div><div class='add'>+</div><div class='add'>+        } else if ((strcmp(w, "transport")) == 0) {</div><div class='add'>+            if (trans_type) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "'transport' option given more"</div><div class='add'>+                    " than one time");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            if ((strcasecmp(words[index + 1], "tcp") == 0)) {</div><div class='add'>+                trans_type = gf_strdup("tcp");</div><div class='add'>+            } else if ((strcasecmp(words[index + 1], "rdma") == 0)) {</div><div class='add'>+                trans_type = gf_strdup("rdma");</div><div class='add'>+            } else if ((strcasecmp(words[index + 1], "tcp,rdma") == 0) ||</div><div class='add'>+                       (strcasecmp(words[index + 1], "rdma,tcp") == 0)) {</div><div class='add'>+                trans_type = gf_strdup("tcp,rdma");</div><div class='add'>+            } else {</div><div class='add'>+                gf_log("", GF_LOG_ERROR,</div><div class='add'>+                       "incorrect transport"</div><div class='add'>+                       " protocol specified");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            index += 2;</div><div class='add'>+</div><div class='add'>+        } else if ((strcmp(w, "disperse") == 0) ||</div><div class='add'>+                   (strcmp(w, "redundancy") == 0) ||</div><div class='add'>+                   (strcmp(w, "disperse-data") == 0)) {</div><div class='add'>+            ret = cli_validate_disperse_volume(</div><div class='add'>+                w, type, words, wordcount, index, &amp;disperse_count,</div><div class='add'>+                &amp;redundancy_count, &amp;disperse_data_count);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+            index += ret;</div><div class='add'>+            type = GF_CLUSTER_TYPE_DISPERSE;</div><div class='add'>+        } else if ((strcmp(w, "arbiter") == 0)) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "arbiter option must be preceded by replica "</div><div class='add'>+                "option.");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            GF_ASSERT(!"opword mismatch");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        op_count++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        brick_index = index;</div><div class='del'>-</div><div class='del'>-        if (strcmp (words[wordcount - 1], "force") == 0) {</div><div class='del'>-                is_force = _gf_true;</div><div class='del'>-                wc = wordcount - 1;</div><div class='del'>-        }</div><div class='add'>+    if (!trans_type)</div><div class='add'>+        trans_type = gf_strdup("tcp");</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_bricks_parse (words, wc, brick_index, &amp;bricks,</div><div class='del'>-                                    &amp;brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (index &gt;= wordcount) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (type == GF_CLUSTER_TYPE_DISPERSE) {</div><div class='del'>-                ret = cli_cmd_create_disperse_check (state, &amp;disperse_count,</div><div class='del'>-                                                     &amp;redundancy_count,</div><div class='del'>-                                                     &amp;disperse_data_count,</div><div class='del'>-                                                     brick_count);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        ret = dict_set_int32 (dict, "disperse-count",</div><div class='del'>-                                              disperse_count);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        ret = dict_set_int32 (dict, "redundancy-count",</div><div class='del'>-                                              redundancy_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    brick_index = index;</div><div class='ctx'> </div><div class='del'>-                sub_count = disperse_count;</div><div class='del'>-        } else</div><div class='del'>-                sub_count = stripe_count * replica_count;</div><div class='del'>-</div><div class='del'>-        if (brick_count % sub_count) {</div><div class='del'>-                if (type == GF_CLUSTER_TYPE_STRIPE)</div><div class='del'>-                        cli_err ("number of bricks is not a multiple of "</div><div class='del'>-                                 "stripe count");</div><div class='del'>-                else if (type == GF_CLUSTER_TYPE_REPLICATE)</div><div class='del'>-                        cli_err ("number of bricks is not a multiple of "</div><div class='del'>-                                 "replica count");</div><div class='del'>-                else if (type == GF_CLUSTER_TYPE_DISPERSE)</div><div class='del'>-                        cli_err ("number of bricks is not a multiple of "</div><div class='del'>-                                 "disperse count");</div><div class='del'>-                else</div><div class='del'>-                        cli_err ("number of bricks given doesn't match "</div><div class='del'>-                                 "required count");</div><div class='add'>+    if (strcmp(words[wordcount - 1], "force") == 0) {</div><div class='add'>+        is_force = _gf_true;</div><div class='add'>+        wc = wordcount - 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_bricks_parse(words, wc, brick_index, &amp;bricks, &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* Everything is parsed fine. start setting info in dict */</div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='add'>+    if (type == GF_CLUSTER_TYPE_DISPERSE) {</div><div class='add'>+        ret = cli_cmd_create_disperse_check(state, &amp;disperse_count,</div><div class='add'>+                                            &amp;redundancy_count,</div><div class='add'>+                                            &amp;disperse_data_count, brick_count);</div><div class='add'>+        if (!ret)</div><div class='add'>+            ret = dict_set_int32(dict, "disperse-count", disperse_count);</div><div class='add'>+        if (!ret)</div><div class='add'>+            ret = dict_set_int32(dict, "redundancy-count", redundancy_count);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        sub_count = disperse_count;</div><div class='add'>+    } else</div><div class='add'>+        sub_count = stripe_count * replica_count;</div><div class='add'>+</div><div class='add'>+    if (brick_count % sub_count) {</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_STRIPE)</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks is not a multiple of "</div><div class='add'>+                "stripe count");</div><div class='add'>+        else if (type == GF_CLUSTER_TYPE_REPLICATE)</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks is not a multiple of "</div><div class='add'>+                "replica count");</div><div class='add'>+        else if (type == GF_CLUSTER_TYPE_DISPERSE)</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks is not a multiple of "</div><div class='add'>+                "disperse count");</div><div class='add'>+        else</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks given doesn't match "</div><div class='add'>+                "required count");</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "type", type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (dict, "transport", trans_type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        trans_type = NULL;</div><div class='add'>+    /* Everything is parsed fine. start setting info in dict */</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (dict, "bricks", bricks);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "type", type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "count", brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_dynstr(dict, "transport", trans_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    trans_type = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "force", is_force);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_dynstr(dict, "bricks", bricks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='del'>-        *brick_list = bricks;</div><div class='add'>+    ret = dict_set_int32(dict, "count", brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "force", is_force);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    *options = dict;</div><div class='add'>+    *brick_list = bricks;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse create volume CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse create volume CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (trans_type);</div><div class='add'>+    GF_FREE(trans_type);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_reset_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_volume_reset_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 3)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt; 5)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &gt; 5)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        if (!volname) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!volname) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 3) {</div><div class='del'>-                ret = dict_set_str (dict, "key", "all");</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == 3) {</div><div class='add'>+        ret = dict_set_str(dict, "key", "all");</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt;= 4) {</div><div class='del'>-                if (!strcmp ("force", (char*)words[3])) {</div><div class='del'>-                        ret = dict_set_int32 (dict, "force", 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = dict_set_str (dict, "key", "all");</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dict_set_str (dict, "key", (char *)words[3]);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+    if (wordcount &gt;= 4) {</div><div class='add'>+        if (!strcmp("force", (char *)words[3])) {</div><div class='add'>+            ret = dict_set_int32(dict, "force", 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            ret = dict_set_str(dict, "key", "all");</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = dict_set_str(dict, "key", (char *)words[3]);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 5) {</div><div class='del'>-                if (strcmp ("force", (char*)words[4])) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dict_set_int32 (dict, "force", 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+    if (wordcount == 5) {</div><div class='add'>+        if (strcmp("force", (char *)words[4])) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = dict_set_int32(dict, "force", 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_get_state_parse (struct cli_state *state,</div><div class='del'>-                         const char **words, int wordcount,</div><div class='del'>-                         dict_t **options, char **op_errstr)</div><div class='add'>+cli_cmd_get_state_parse(struct cli_state *state, const char **words,</div><div class='add'>+                        int wordcount, dict_t **options, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        dict_t    *dict                 = NULL;</div><div class='del'>-        int        ret                  = -1;</div><div class='del'>-        char      *odir                 = NULL;</div><div class='del'>-        char      *filename             = NULL;</div><div class='del'>-        char      *daemon_name          = NULL;</div><div class='del'>-        int        count                = 0;</div><div class='del'>-        uint32_t   cmd                  = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", options, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", words, out);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 1 || wordcount &gt; 7) {</div><div class='del'>-                *op_errstr = gf_strdup ("Problem parsing arguments."</div><div class='del'>-                                        " Check usage.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *odir = NULL;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    char *daemon_name = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", options, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", words, out);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt;= 1) {</div><div class='del'>-                gf_asprintf (&amp;daemon_name, "%s", "glusterd");</div><div class='del'>-</div><div class='del'>-                for (count = 1; count &lt; wordcount; count++) {</div><div class='del'>-                        if (strcmp (words[count], "odir") == 0 ||</div><div class='del'>-                                        strcmp (words[count], "file") == 0) {</div><div class='del'>-                                if (strcmp (words[count], "odir") == 0) {</div><div class='del'>-                                        if (++count &lt; wordcount) {</div><div class='del'>-                                                odir = (char *) words[count];</div><div class='del'>-                                                continue;</div><div class='del'>-                                        } else {</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-                                } else if (strcmp (words[count], "file") == 0) {</div><div class='del'>-                                        if (++count &lt; wordcount) {</div><div class='del'>-                                                filename = (char *) words[count];</div><div class='del'>-                                                continue;</div><div class='del'>-                                        } else {</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        } else {</div><div class='del'>-                                if (count &gt; 1) {</div><div class='del'>-                                        if (count == wordcount-1) {</div><div class='del'>-                                                if (strcmp (words[count],</div><div class='del'>-                                                            "detail") == 0) {</div><div class='del'>-                                                        cmd = GF_CLI_GET_STATE_DETAIL;</div><div class='del'>-                                                        continue;</div><div class='del'>-                                                } else if (strcmp (words[count],</div><div class='del'>-                                                                   "volumeoptions") == 0) {</div><div class='del'>-                                                        cmd = GF_CLI_GET_STATE_VOLOPTS;</div><div class='del'>-                                                        continue;</div><div class='del'>-                                                }</div><div class='del'>-                                        } else {</div><div class='del'>-                                                *op_errstr = gf_strdup ("Problem"</div><div class='del'>-                                                        " parsing arguments. "</div><div class='del'>-                                                        "Check usage.");</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-</div><div class='del'>-                                }</div><div class='del'>-                                if (strcmp (words[count], "glusterd") == 0) {</div><div class='del'>-                                        continue;</div><div class='del'>-                                } else {</div><div class='del'>-                                        if (count == wordcount-1) {</div><div class='del'>-                                                if (strcmp (words[count],</div><div class='del'>-                                                            "detail") == 0) {</div><div class='del'>-                                                        cmd = GF_CLI_GET_STATE_DETAIL;</div><div class='del'>-                                                        continue;</div><div class='del'>-                                                } else if (strcmp (words[count],</div><div class='del'>-                                                                   "volumeoptions") == 0) {</div><div class='del'>-                                                        cmd = GF_CLI_GET_STATE_VOLOPTS;</div><div class='del'>-                                                        continue;</div><div class='del'>-                                                }</div><div class='del'>-                                        }</div><div class='del'>-</div><div class='del'>-                                        *op_errstr = gf_strdup ("glusterd is "</div><div class='del'>-                                                 "the only supported daemon.");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='add'>+    if (wordcount &lt; 1 || wordcount &gt; 7) {</div><div class='add'>+        *op_errstr = gf_strdup(</div><div class='add'>+            "Problem parsing arguments."</div><div class='add'>+            " Check usage.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (wordcount &gt;= 1) {</div><div class='add'>+        gf_asprintf(&amp;daemon_name, "%s", "glusterd");</div><div class='add'>+</div><div class='add'>+        for (count = 1; count &lt; wordcount; count++) {</div><div class='add'>+            if (strcmp(words[count], "odir") == 0 ||</div><div class='add'>+                strcmp(words[count], "file") == 0) {</div><div class='add'>+                if (strcmp(words[count], "odir") == 0) {</div><div class='add'>+                    if (++count &lt; wordcount) {</div><div class='add'>+                        odir = (char *)words[count];</div><div class='add'>+                        continue;</div><div class='add'>+                    } else {</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                } else if (strcmp(words[count], "file") == 0) {</div><div class='add'>+                    if (++count &lt; wordcount) {</div><div class='add'>+                        filename = (char *)words[count];</div><div class='add'>+                        continue;</div><div class='add'>+                    } else {</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                if (count &gt; 1) {</div><div class='add'>+                    if (count == wordcount - 1) {</div><div class='add'>+                        if (strcmp(words[count], "detail") == 0) {</div><div class='add'>+                            cmd = GF_CLI_GET_STATE_DETAIL;</div><div class='add'>+                            continue;</div><div class='add'>+                        } else if (strcmp(words[count], "volumeoptions") == 0) {</div><div class='add'>+                            cmd = GF_CLI_GET_STATE_VOLOPTS;</div><div class='add'>+                            continue;</div><div class='ctx'>                         }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_dynstr (dict, "daemon", daemon_name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        *op_errstr = gf_strdup ("Command failed. Please check "</div><div class='del'>-                                                " log file for more details.");</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Setting daemon name to dictionary failed");</div><div class='add'>+                    } else {</div><div class='add'>+                        *op_errstr = gf_strdup(</div><div class='add'>+                            "Problem"</div><div class='add'>+                            " parsing arguments. "</div><div class='add'>+                            "Check usage.");</div><div class='add'>+                        ret = -1;</div><div class='ctx'>                         goto out;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                daemon_name = NULL;</div><div class='del'>-</div><div class='del'>-                if (odir) {</div><div class='del'>-                        ret = dict_set_str (dict, "odir", odir);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                *op_errstr = gf_strdup ("Command failed. Please"</div><div class='del'>-                                                        " check log file for"</div><div class='del'>-                                                        " more details.");</div><div class='del'>-                                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Setting output directory to"</div><div class='del'>-                                        "dictionary failed");</div><div class='del'>-                                goto out;</div><div class='add'>+                if (strcmp(words[count], "glusterd") == 0) {</div><div class='add'>+                    continue;</div><div class='add'>+                } else {</div><div class='add'>+                    if (count == wordcount - 1) {</div><div class='add'>+                        if (strcmp(words[count], "detail") == 0) {</div><div class='add'>+                            cmd = GF_CLI_GET_STATE_DETAIL;</div><div class='add'>+                            continue;</div><div class='add'>+                        } else if (strcmp(words[count], "volumeoptions") == 0) {</div><div class='add'>+                            cmd = GF_CLI_GET_STATE_VOLOPTS;</div><div class='add'>+                            continue;</div><div class='ctx'>                         }</div><div class='del'>-                }</div><div class='add'>+                    }</div><div class='ctx'> </div><div class='del'>-                if (filename) {</div><div class='del'>-                        ret = dict_set_str (dict, "filename", filename);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                *op_errstr = gf_strdup ("Command failed. Please"</div><div class='del'>-                                                        " check log file for"</div><div class='del'>-                                                        " more  details.");</div><div class='del'>-                                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Setting filename to dictionary failed");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (cmd) {</div><div class='del'>-                        ret = dict_set_uint32 (dict, "getstate-cmd", cmd);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                *op_errstr = gf_strdup ("Command failed. Please"</div><div class='del'>-                                                        " check log file for"</div><div class='del'>-                                                        " more details.");</div><div class='del'>-                                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Setting "</div><div class='del'>-                                        "get-state command type to dictionary "</div><div class='del'>-                                        "failed");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                    *op_errstr = gf_strdup(</div><div class='add'>+                        "glusterd is "</div><div class='add'>+                        "the only supported daemon.");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (dict)</div><div class='del'>-                *options = dict;</div><div class='add'>+        ret = dict_set_dynstr(dict, "daemon", daemon_name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            *op_errstr = gf_strdup(</div><div class='add'>+                "Command failed. Please check "</div><div class='add'>+                " log file for more details.");</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Setting daemon name to dictionary failed");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        daemon_name = NULL;</div><div class='add'>+</div><div class='add'>+        if (odir) {</div><div class='add'>+            ret = dict_set_str(dict, "odir", odir);</div><div class='add'>+            if (ret) {</div><div class='add'>+                *op_errstr = gf_strdup(</div><div class='add'>+                    "Command failed. Please"</div><div class='add'>+                    " check log file for"</div><div class='add'>+                    " more details.");</div><div class='add'>+                gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Setting output directory to"</div><div class='add'>+                       "dictionary failed");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (filename) {</div><div class='add'>+            ret = dict_set_str(dict, "filename", filename);</div><div class='add'>+            if (ret) {</div><div class='add'>+                *op_errstr = gf_strdup(</div><div class='add'>+                    "Command failed. Please"</div><div class='add'>+                    " check log file for"</div><div class='add'>+                    " more  details.");</div><div class='add'>+                gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Setting filename to dictionary failed");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (cmd) {</div><div class='add'>+            ret = dict_set_uint32(dict, "getstate-cmd", cmd);</div><div class='add'>+            if (ret) {</div><div class='add'>+                *op_errstr = gf_strdup(</div><div class='add'>+                    "Command failed. Please"</div><div class='add'>+                    " check log file for"</div><div class='add'>+                    " more details.");</div><div class='add'>+                gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Setting "</div><div class='add'>+                       "get-state command type to dictionary "</div><div class='add'>+                       "failed");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+out:</div><div class='add'>+    if (dict)</div><div class='add'>+        *options = dict;</div><div class='ctx'> </div><div class='del'>-        GF_FREE(daemon_name);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(daemon_name);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_inode_quota_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_inode_quota_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t          *dict    = NULL;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        int              ret     = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 4)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount != 4)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='del'>-        if (!volname) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    volname = (char *)words[2];</div><div class='add'>+    if (!volname) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Validate the volume name here itself */</div><div class='del'>-        if (cli_validate_volname (volname) &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Validate the volume name here itself */</div><div class='add'>+    if (cli_validate_volname(volname) &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words[3], "enable") != 0) {</div><div class='del'>-                cli_out ("Invalid quota option : %s", words[3]);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (strcmp(words[3], "enable") != 0) {</div><div class='add'>+        cli_out("Invalid quota option : %s", words[3]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "type",</div><div class='del'>-                              GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "type", GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_quota_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_quota_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t          *dict    = NULL;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        int              ret     = -1;</div><div class='del'>-        int              i       = -1;</div><div class='del'>-        char             key[20] = {0, };</div><div class='del'>-        int64_t          value   = 0;</div><div class='del'>-        gf_quota_type    type    = GF_QUOTA_OPTION_TYPE_NONE;</div><div class='del'>-        char           *opwords[] = { "enable", "disable", "limit-usage",</div><div class='del'>-                                      "remove", "list", "alert-time",</div><div class='del'>-                                      "soft-timeout", "hard-timeout",</div><div class='del'>-                                      "default-soft-limit", "limit-objects",</div><div class='del'>-                                      "list-objects", "remove-objects", NULL};</div><div class='del'>-        char            *w       = NULL;</div><div class='del'>-        uint32_t         time    = 0;</div><div class='del'>-        double           percent = 0;</div><div class='del'>-        char            *end_ptr = NULL;</div><div class='del'>-        int64_t          limit   = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 4) {</div><div class='del'>-</div><div class='del'>-                if ((wordcount == 3) &amp;&amp; !(strcmp (words[2], "help"))) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    char key[20] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int64_t value = 0;</div><div class='add'>+    gf_quota_type type = GF_QUOTA_OPTION_TYPE_NONE;</div><div class='add'>+    char *opwords[] = {"enable",</div><div class='add'>+                       "disable",</div><div class='add'>+                       "limit-usage",</div><div class='add'>+                       "remove",</div><div class='add'>+                       "list",</div><div class='add'>+                       "alert-time",</div><div class='add'>+                       "soft-timeout",</div><div class='add'>+                       "hard-timeout",</div><div class='add'>+                       "default-soft-limit",</div><div class='add'>+                       "limit-objects",</div><div class='add'>+                       "list-objects",</div><div class='add'>+                       "remove-objects",</div><div class='add'>+                       NULL};</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    uint32_t time = 0;</div><div class='add'>+    double percent = 0;</div><div class='add'>+    char *end_ptr = NULL;</div><div class='add'>+    int64_t limit = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='del'>-        if (!volname) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 4) {</div><div class='add'>+        if ((wordcount == 3) &amp;&amp; !(strcmp(words[2], "help"))) {</div><div class='add'>+            ret = 1;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Validate the volume name here itself */</div><div class='del'>-        if (cli_validate_volname (volname) &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    volname = (char *)words[2];</div><div class='add'>+    if (!volname) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Validate the volume name here itself */</div><div class='add'>+    if (cli_validate_volname(volname) &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[3], opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                cli_out ("Invalid quota option : %s", words[3]);</div><div class='del'>-                ret = - 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "enable") == 0) {</div><div class='del'>-                if (wordcount == 4) {</div><div class='del'>-                        type = GF_QUOTA_OPTION_TYPE_ENABLE;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto set_type;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    w = str_getunamb(words[3], opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        cli_out("Invalid quota option : %s", words[3]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "disable") == 0) {</div><div class='del'>-                if (wordcount == 4) {</div><div class='del'>-                        type = GF_QUOTA_OPTION_TYPE_DISABLE;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto set_type;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "enable") == 0) {</div><div class='add'>+        if (wordcount == 4) {</div><div class='add'>+            type = GF_QUOTA_OPTION_TYPE_ENABLE;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto set_type;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "limit-usage") == 0) {</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_LIMIT_USAGE;</div><div class='del'>-        } else if (strcmp (w, "limit-objects") == 0) {</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS;</div><div class='add'>+    if (strcmp(w, "disable") == 0) {</div><div class='add'>+        if (wordcount == 4) {</div><div class='add'>+            type = GF_QUOTA_OPTION_TYPE_DISABLE;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto set_type;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE ||</div><div class='del'>-            type == GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS) {</div><div class='add'>+    if (strcmp(w, "limit-usage") == 0) {</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_LIMIT_USAGE;</div><div class='add'>+    } else if (strcmp(w, "limit-objects") == 0) {</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (wordcount &lt; 6 || wordcount &gt; 7) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE ||</div><div class='add'>+        type == GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS) {</div><div class='add'>+        if (wordcount &lt; 6 || wordcount &gt; 7) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (words[4][0] != '/') {</div><div class='del'>-                        cli_err ("Please enter absolute path");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_str (dict, "path", (char *) words[4]);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (words[4][0] != '/') {</div><div class='add'>+            cli_err("Please enter absolute path");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_str(dict, "path", (char *)words[4]);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if (!words[5]) {</div><div class='add'>+            cli_err("Please enter the limit value to be set");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE) {</div><div class='add'>+            ret = gf_string2bytesize_int64(words[5], &amp;value);</div><div class='add'>+            if (ret != 0 || value &lt;= 0) {</div><div class='add'>+                if (errno == ERANGE || value &lt;= 0) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Please enter an integer "</div><div class='add'>+                        "value in the range of "</div><div class='add'>+                        "(1 - %" PRId64 ")",</div><div class='add'>+                        INT64_MAX);</div><div class='add'>+                } else</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Please enter a correct "</div><div class='add'>+                        "value");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            errno = 0;</div><div class='add'>+            limit = strtol(words[5], &amp;end_ptr, 10);</div><div class='add'>+            if (errno == ERANGE || errno == EINVAL || limit &lt;= 0 ||</div><div class='add'>+                strcmp(end_ptr, "") != 0) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Please enter an integer value in "</div><div class='add'>+                    "the range 1 - %" PRId64,</div><div class='add'>+                    INT64_MAX);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!words[5]) {</div><div class='del'>-                        cli_err ("Please enter the limit value to be set");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_str(dict, "hard-limit", (char *)words[5]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE) {</div><div class='del'>-                        ret = gf_string2bytesize_int64 (words[5], &amp;value);</div><div class='del'>-                        if (ret != 0 || value &lt;= 0) {</div><div class='del'>-                                if (errno == ERANGE || value &lt;= 0) {</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        cli_err ("Please enter an integer "</div><div class='del'>-                                                 "value in the range of "</div><div class='del'>-                                                 "(1 - %"PRId64 ")",</div><div class='del'>-                                                 INT64_MAX);</div><div class='del'>-                                } else</div><div class='del'>-                                        cli_err ("Please enter a correct "</div><div class='del'>-                                                 "value");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        errno = 0;</div><div class='del'>-                        limit = strtol (words[5], &amp;end_ptr, 10);</div><div class='del'>-                        if (errno == ERANGE || errno == EINVAL || limit &lt;= 0</div><div class='del'>-                                            || strcmp (end_ptr, "") != 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                cli_err ("Please enter an integer value in "</div><div class='del'>-                                         "the range 1 - %"PRId64, INT64_MAX);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (wordcount == 7) {</div><div class='add'>+            ret = gf_string2percent(words[6], &amp;percent);</div><div class='add'>+            if (ret != 0 || percent &gt; 100) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Please enter a correct value "</div><div class='add'>+                    "in the range of 0 to 100");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret  = dict_set_str (dict, "hard-limit", (char *) words[5]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+            ret = dict_set_str(dict, "soft-limit", (char *)words[6]);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (wordcount == 7) {</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        ret = gf_string2percent (words[6], &amp;percent);</div><div class='del'>-                        if (ret != 0 || percent &gt; 100) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                cli_err ("Please enter a correct value "</div><div class='del'>-                                         "in the range of 0 to 100");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+    if (strcmp(w, "remove") == 0) {</div><div class='add'>+        if (wordcount != 5) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        ret = dict_set_str (dict, "soft-limit",</div><div class='del'>-                                            (char *) words[6]);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_REMOVE;</div><div class='ctx'> </div><div class='del'>-                goto set_type;</div><div class='add'>+        if (words[4][0] != '/') {</div><div class='add'>+            cli_err("Please enter absolute path");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "remove") == 0) {</div><div class='del'>-                if (wordcount != 5) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_str(dict, "path", (char *)words[4]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_REMOVE;</div><div class='add'>+    if (strcmp(w, "remove-objects") == 0) {</div><div class='add'>+        if (wordcount != 5) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (words[4][0] != '/') {</div><div class='del'>-                        cli_err ("Please enter absolute path");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "path", (char *) words[4]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto set_type;</div><div class='add'>+        if (words[4][0] != '/') {</div><div class='add'>+            cli_err("Please enter absolute path");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "remove-objects") == 0) {</div><div class='del'>-                if (wordcount != 5) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS;</div><div class='add'>+        ret = dict_set_str(dict, "path", (char *)words[4]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (words[4][0] != '/') {</div><div class='del'>-                        cli_err ("Please enter absolute path");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "list") == 0) {</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_LIST;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "path", (char *) words[4]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto set_type;</div><div class='add'>+        if (words[4] &amp;&amp; words[4][0] != '/') {</div><div class='add'>+            cli_err("Please enter absolute path");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "list") == 0) {</div><div class='add'>+        i = 4;</div><div class='add'>+        while (i &lt; wordcount) {</div><div class='add'>+            snprintf(key, 20, "path%d", i - 4);</div><div class='ctx'> </div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_LIST;</div><div class='add'>+            ret = dict_set_str(dict, key, (char *)words[i++]);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (words[4] &amp;&amp; words[4][0] != '/') {</div><div class='del'>-                        cli_err ("Please enter absolute path");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_int32(dict, "count", i - 4);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                i = 4;</div><div class='del'>-                while (i &lt; wordcount) {</div><div class='del'>-                        snprintf (key, 20, "path%d", i-4);</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        ret = dict_set_str (dict, key, (char *) words [i++]);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "list-objects") == 0) {</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_LIST_OBJECTS;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int32 (dict, "count", i - 4);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+        i = 4;</div><div class='add'>+        while (i &lt; wordcount) {</div><div class='add'>+            snprintf(key, 20, "path%d", i - 4);</div><div class='ctx'> </div><div class='del'>-                goto set_type;</div><div class='add'>+            ret = dict_set_str(dict, key, (char *)words[i++]);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to set "</div><div class='add'>+                       "quota patch in request dictionary");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "list-objects") == 0) {</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_LIST_OBJECTS;</div><div class='del'>-</div><div class='del'>-                i = 4;</div><div class='del'>-                while (i &lt; wordcount) {</div><div class='del'>-                        snprintf (key, 20, "path%d", i-4);</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_str (dict, key, (char *) words[i++]);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Failed to set "</div><div class='del'>-                                        "quota patch in request dictionary");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (dict, "count", i - 4);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set quota "</div><div class='del'>-                                "limit count in request dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                goto set_type;</div><div class='add'>+        ret = dict_set_int32(dict, "count", i - 4);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set quota "</div><div class='add'>+                   "limit count in request dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "alert-time") == 0) {</div><div class='del'>-                if (wordcount != 5) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_ALERT_TIME;</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = gf_string2time (words[4], &amp;time);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        cli_err ("Invalid argument %s. Please enter a valid "</div><div class='del'>-                                 "string", words[4]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "alert-time") == 0) {</div><div class='add'>+        if (wordcount != 5) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_ALERT_TIME;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "value", (char *)words[4]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto set_type;</div><div class='add'>+        ret = gf_string2time(words[4], &amp;time);</div><div class='add'>+        if (ret) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Invalid argument %s. Please enter a valid "</div><div class='add'>+                "string",</div><div class='add'>+                words[4]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "soft-timeout") == 0) {</div><div class='del'>-                if (wordcount != 5) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT;</div><div class='add'>+        ret = dict_set_str(dict, "value", (char *)words[4]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = gf_string2time (words[4], &amp;time);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        cli_err ("Invalid argument %s. Please enter a valid "</div><div class='del'>-                                 "string", words[4]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "soft-timeout") == 0) {</div><div class='add'>+        if (wordcount != 5) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "value", (char *)words[4]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto set_type;</div><div class='add'>+        ret = gf_string2time(words[4], &amp;time);</div><div class='add'>+        if (ret) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Invalid argument %s. Please enter a valid "</div><div class='add'>+                "string",</div><div class='add'>+                words[4]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "hard-timeout") == 0) {</div><div class='del'>-                if(wordcount != 5) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT;</div><div class='add'>+        ret = dict_set_str(dict, "value", (char *)words[4]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = gf_string2time (words[4], &amp;time);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        cli_err ("Invalid argument %s. Please enter a valid "</div><div class='del'>-                                 "string", words[4]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "hard-timeout") == 0) {</div><div class='add'>+        if (wordcount != 5) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "value", (char *)words[4]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto set_type;</div><div class='add'>+        ret = gf_string2time(words[4], &amp;time);</div><div class='add'>+        if (ret) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Invalid argument %s. Please enter a valid "</div><div class='add'>+                "string",</div><div class='add'>+                words[4]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        if (strcmp (w, "default-soft-limit") == 0) {</div><div class='del'>-                if(wordcount != 5) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                type = GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "value", (char *)words[4]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto set_type;</div><div class='del'>-        } else {</div><div class='del'>-                GF_ASSERT (!"opword mismatch");</div><div class='add'>+        ret = dict_set_str(dict, "value", (char *)words[4]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        goto set_type;</div><div class='add'>+    }</div><div class='add'>+    if (strcmp(w, "default-soft-limit") == 0) {</div><div class='add'>+        if (wordcount != 5) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        type = GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT;</div><div class='ctx'> </div><div class='del'>-set_type:</div><div class='del'>-        ret = dict_set_int32 (dict, "type", type);</div><div class='add'>+        ret = dict_set_str(dict, "value", (char *)words[4]);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+        goto set_type;</div><div class='add'>+    } else {</div><div class='add'>+        GF_ASSERT(!"opword mismatch");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+set_type:</div><div class='add'>+    ret = dict_set_int32(dict, "type", type);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-cli_is_key_spl (char *key)</div><div class='add'>+cli_is_key_spl(char *key)</div><div class='ctx'> {</div><div class='del'>-        return (strcmp (key, "group") == 0);</div><div class='add'>+    return (strcmp(key, "group") == 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='ctx'> cli_add_key_group_value(dict_t *dict, const char *name, const char *value,</div><div class='ctx'>                         int32_t id, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        char         *key  = NULL;</div><div class='del'>-        char         *data = NULL;</div><div class='del'>-        int32_t       ret  = -1;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *data = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf(&amp;key, "%s%d", name, id);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        data = gf_strdup(value);</div><div class='del'>-        if (data == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;key, "%s%d", name, id);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    data = gf_strdup(value);</div><div class='add'>+    if (data == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr(dict, key, data);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                data = NULL;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_dynstr(dict, key, data);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        data = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE(key);</div><div class='del'>-        GF_FREE(data);</div><div class='add'>+    GF_FREE(key);</div><div class='add'>+    GF_FREE(data);</div><div class='ctx'> </div><div class='del'>-        if ((ret != 0) &amp;&amp; (op_errstr != NULL)) {</div><div class='del'>-                *op_errstr = gf_strdup("Failed to allocate memory");</div><div class='del'>-        }</div><div class='add'>+    if ((ret != 0) &amp;&amp; (op_errstr != NULL)) {</div><div class='add'>+        *op_errstr = gf_strdup("Failed to allocate memory");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-cli_add_key_group (dict_t *dict, char *key, char *value, char **op_errstr)</div><div class='add'>+cli_add_key_group(dict_t *dict, char *key, char *value, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             opt_count = 0;</div><div class='del'>-        char            *saveptr = NULL;</div><div class='del'>-        char            *tok_key = NULL;</div><div class='del'>-        char            *tok_val = NULL;</div><div class='del'>-        char            *tagpath = NULL;</div><div class='del'>-        char            line[PATH_MAX + 256] = {0,};</div><div class='del'>-        FILE            *fp = NULL;</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;tagpath, "%s/groups/%s",</div><div class='del'>-                           GLUSTERD_DEFAULT_WORKDIR, value);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                tagpath = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fp = fopen (tagpath, "r");</div><div class='del'>-        if (!fp) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                if (op_errstr) {</div><div class='del'>-                        gf_asprintf(op_errstr, "Unable to open file '%s'. "</div><div class='del'>-                                               "Error: %s",</div><div class='del'>-                                    tagpath, strerror(errno));</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        opt_count = 0;</div><div class='del'>-        while (fgets(line, sizeof(line), fp) != NULL) {</div><div class='del'>-                if (strlen(line) &gt;= sizeof(line) - 1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        if (op_errstr != NULL) {</div><div class='del'>-                                *op_errstr = gf_strdup("Line too long");</div><div class='del'>-                        }</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                opt_count++;</div><div class='del'>-                tok_key = strtok_r (line, "=", &amp;saveptr);</div><div class='del'>-                tok_val = strtok_r (NULL, "\r\n", &amp;saveptr);</div><div class='del'>-                if (!tok_key || !tok_val) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        if (op_errstr) {</div><div class='del'>-                                gf_asprintf(op_errstr, "'%s' file format "</div><div class='del'>-                                                       "not valid.",</div><div class='del'>-                                            tagpath);</div><div class='del'>-                        }</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int opt_count = 0;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char *tok_key = NULL;</div><div class='add'>+    char *tok_val = NULL;</div><div class='add'>+    char *tagpath = NULL;</div><div class='add'>+    char line[PATH_MAX + 256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;tagpath, "%s/groups/%s", GLUSTERD_DEFAULT_WORKDIR,</div><div class='add'>+                      value);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        tagpath = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = cli_add_key_group_value(dict, "key", tok_key, opt_count,</div><div class='del'>-                                              op_errstr);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = cli_add_key_group_value(dict, "value", tok_val,</div><div class='del'>-                                              opt_count, op_errstr);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    fp = fopen(tagpath, "r");</div><div class='add'>+    if (!fp) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        if (op_errstr) {</div><div class='add'>+            gf_asprintf(op_errstr,</div><div class='add'>+                        "Unable to open file '%s'. "</div><div class='add'>+                        "Error: %s",</div><div class='add'>+                        tagpath, strerror(errno));</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!opt_count) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                if (op_errstr) {</div><div class='del'>-                        gf_asprintf(op_errstr, "'%s' file format not valid.",</div><div class='del'>-                                    tagpath);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    opt_count = 0;</div><div class='add'>+    while (fgets(line, sizeof(line), fp) != NULL) {</div><div class='add'>+        if (strlen(line) &gt;= sizeof(line) - 1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            if (op_errstr != NULL) {</div><div class='add'>+                *op_errstr = gf_strdup("Line too long");</div><div class='add'>+            }</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        opt_count++;</div><div class='add'>+        tok_key = strtok_r(line, "=", &amp;saveptr);</div><div class='add'>+        tok_val = strtok_r(NULL, "\r\n", &amp;saveptr);</div><div class='add'>+        if (!tok_key || !tok_val) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            if (op_errstr) {</div><div class='add'>+                gf_asprintf(op_errstr,</div><div class='add'>+                            "'%s' file format "</div><div class='add'>+                            "not valid.",</div><div class='add'>+                            tagpath);</div><div class='add'>+            }</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = cli_add_key_group_value(dict, "key", tok_key, opt_count,</div><div class='add'>+                                      op_errstr);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = cli_add_key_group_value(dict, "value", tok_val, opt_count,</div><div class='add'>+                                      op_errstr);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!opt_count) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        if (op_errstr) {</div><div class='add'>+            gf_asprintf(op_errstr, "'%s' file format not valid.", tagpath);</div><div class='ctx'>         }</div><div class='del'>-        ret = dict_set_int32 (dict, "count", opt_count);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, "count", opt_count);</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        GF_FREE (tagpath);</div><div class='add'>+    GF_FREE(tagpath);</div><div class='ctx'> </div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_set_parse (struct cli_state *state, const char **words,</div><div class='del'>-                          int wordcount, dict_t **options, char **op_errstr)</div><div class='add'>+cli_cmd_volume_set_parse(struct cli_state *state, const char **words,</div><div class='add'>+                         int wordcount, dict_t **options, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        dict_t                 *dict      = NULL;</div><div class='del'>-        char                   *volname   = NULL;</div><div class='del'>-        int                     ret       = -1;</div><div class='del'>-        int                     count     = 0;</div><div class='del'>-        char                   *key       = NULL;</div><div class='del'>-        char                   *value     = NULL;</div><div class='del'>-        int                     i         = 0;</div><div class='del'>-        char                    str[50]   = {0,};</div><div class='del'>-        const char             *question  = NULL;</div><div class='del'>-        gf_answer_t             answer    = GF_ANSWER_NO;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 3)</div><div class='del'>-                goto out;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char str[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    if (wordcount &lt; 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (volname, "all")) {</div><div class='del'>-                ret = dict_set_str (dict, "globalname", "All");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "dict set on global key failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int32 (dict, "hold_global_locks", _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "dict set on global key failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (!strcmp(volname, "all")) {</div><div class='add'>+        ret = dict_set_str(dict, "globalname", "All");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR, "dict set on global key failed.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((!strcmp (volname, "help") || !strcmp (volname, "help-xml"))</div><div class='del'>-            &amp;&amp; wordcount == 3 ) {</div><div class='del'>-                ret = dict_set_str (dict, volname, volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = dict_set_int32(dict, "hold_global_locks", _gf_true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR, "dict set on global key failed.");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        } else if (wordcount &lt; 5) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    if ((!strcmp(volname, "help") || !strcmp(volname, "help-xml")) &amp;&amp;</div><div class='add'>+        wordcount == 3) {</div><div class='add'>+        ret = dict_set_str(dict, volname, volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        } else if (wordcount == 5  &amp;&amp; cli_is_key_spl ((char *)words[3])) {</div><div class='del'>-                key = (char *) words[3];</div><div class='del'>-                value = (char *) words[4];</div><div class='del'>-                if ( !key || !value) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    } else if (wordcount &lt; 5) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                ret = gf_strip_whitespace (value, strlen (value));</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='add'>+    } else if (wordcount == 5 &amp;&amp; cli_is_key_spl((char *)words[3])) {</div><div class='add'>+        key = (char *)words[3];</div><div class='add'>+        value = (char *)words[4];</div><div class='add'>+        if (!key || !value) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (strlen (value) == 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = gf_strip_whitespace(value, strlen(value));</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = cli_add_key_group (dict, key, value, op_errstr);</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        *options = dict;</div><div class='del'>-                goto out;</div><div class='add'>+        if (strlen(value) == 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 3; i &lt; wordcount; i+=2) {</div><div class='del'>-</div><div class='del'>-                key = (char *) words[i];</div><div class='del'>-                value = (char *) words[i+1];</div><div class='add'>+        ret = cli_add_key_group(dict, key, value, op_errstr);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            *options = dict;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if ( !key || !value) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 3; i &lt; wordcount; i += 2) {</div><div class='add'>+        key = (char *)words[i];</div><div class='add'>+        value = (char *)words[i + 1];</div><div class='ctx'> </div><div class='del'>-                count++;</div><div class='add'>+        if (!key || !value) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (fnmatch ("user.*", key, FNM_NOESCAPE) != 0) {</div><div class='del'>-                        ret = gf_strip_whitespace (value, strlen (value));</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+        count++;</div><div class='ctx'> </div><div class='del'>-                if (strlen (value) == 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (fnmatch("user.*", key, FNM_NOESCAPE) != 0) {</div><div class='add'>+            ret = gf_strip_whitespace(value, strlen(value));</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (cli_is_key_spl (key)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (strlen(value) == 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                sprintf (str, "key%d", count);</div><div class='del'>-                ret = dict_set_str (dict, str, key);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (cli_is_key_spl(key)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                sprintf (str, "value%d", count);</div><div class='del'>-                ret = dict_set_str (dict, str, value);</div><div class='add'>+        sprintf(str, "key%d", count);</div><div class='add'>+        ret = dict_set_str(dict, str, key);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        sprintf(str, "value%d", count);</div><div class='add'>+        ret = dict_set_str(dict, str, value);</div><div class='ctx'> </div><div class='del'>-                if ((!strcmp (key, "cluster.enable-shared-storage")) &amp;&amp;</div><div class='del'>-                    (!strcmp (value, "disable"))) {</div><div class='del'>-                        question = "Disabling cluster.enable-shared-storage "</div><div class='del'>-                                   "will delete the shared storage volume"</div><div class='del'>-                                   "(gluster_shared_storage), which is used "</div><div class='del'>-                                   "by snapshot scheduler, geo-replication "</div><div class='del'>-                                   "and NFS-Ganesha. Do you still want to "</div><div class='del'>-                                   "continue?";</div><div class='del'>-                        answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Operation "</div><div class='del'>-                                        "cancelled, exiting");</div><div class='del'>-                                *op_errstr = gf_strdup ("Aborted by user.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if ((!strcmp (key, "nfs.disable")) &amp;&amp;</div><div class='del'>-                            (!strcmp (value, "off"))) {</div><div class='del'>-                        question = "Gluster NFS is being deprecated in favor "</div><div class='del'>-                                   "of NFS-Ganesha Enter \"yes\" to continue "</div><div class='del'>-                                   "using Gluster NFS";</div><div class='del'>-                        answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Operation "</div><div class='del'>-                                        "cancelled, exiting");</div><div class='del'>-                                *op_errstr = gf_strdup ("Aborted by user.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if ((!strcmp(key, "cluster.enable-shared-storage")) &amp;&amp;</div><div class='add'>+            (!strcmp(value, "disable"))) {</div><div class='add'>+            question =</div><div class='add'>+                "Disabling cluster.enable-shared-storage "</div><div class='add'>+                "will delete the shared storage volume"</div><div class='add'>+                "(gluster_shared_storage), which is used "</div><div class='add'>+                "by snapshot scheduler, geo-replication "</div><div class='add'>+                "and NFS-Ganesha. Do you still want to "</div><div class='add'>+                "continue?";</div><div class='add'>+            answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+            if (GF_ANSWER_NO == answer) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Operation "</div><div class='add'>+                       "cancelled, exiting");</div><div class='add'>+                *op_errstr = gf_strdup("Aborted by user.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if ((!strcmp(key, "nfs.disable")) &amp;&amp; (!strcmp(value, "off"))) {</div><div class='add'>+            question =</div><div class='add'>+                "Gluster NFS is being deprecated in favor "</div><div class='add'>+                "of NFS-Ganesha Enter \"yes\" to continue "</div><div class='add'>+                "using Gluster NFS";</div><div class='add'>+            answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+            if (GF_ANSWER_NO == answer) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Operation "</div><div class='add'>+                       "cancelled, exiting");</div><div class='add'>+                *op_errstr = gf_strdup("Aborted by user.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "count", wordcount-3);</div><div class='add'>+    ret = dict_set_int32(dict, "count", wordcount - 3);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_add_brick_parse (struct cli_state *state, const char **words,</div><div class='del'>-                                int wordcount, dict_t **options, int *ret_type)</div><div class='add'>+cli_cmd_volume_add_brick_parse(struct cli_state *state, const char **words,</div><div class='add'>+                               int wordcount, dict_t **options, int *ret_type)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        int     brick_count = 0, brick_index = 0;</div><div class='del'>-        char    *bricks = NULL;</div><div class='del'>-        char    *opwords_cl[] = { "replica", "stripe", NULL };</div><div class='del'>-        gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;</div><div class='del'>-        int     count = 1;</div><div class='del'>-        int     arbiter_count = 0;</div><div class='del'>-        char    *w = NULL;</div><div class='del'>-        int     index;</div><div class='del'>-        gf_boolean_t is_force = _gf_false;</div><div class='del'>-        int wc = wordcount;</div><div class='del'>-        gf_answer_t answer = GF_ANSWER_NO;</div><div class='del'>-        const char *question = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 3)</div><div class='del'>-                goto out;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int brick_count = 0, brick_index = 0;</div><div class='add'>+    char *bricks = NULL;</div><div class='add'>+    char *opwords_cl[] = {"replica", "stripe", NULL};</div><div class='add'>+    gf1_cluster_type type = GF_CLUSTER_TYPE_NONE;</div><div class='add'>+    int count = 1;</div><div class='add'>+    int arbiter_count = 0;</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    int index;</div><div class='add'>+    gf_boolean_t is_force = _gf_false;</div><div class='add'>+    int wc = wordcount;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    if (wordcount &lt; 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 4) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (wordcount &lt; 6) {</div><div class='del'>-                /* seems no options are given, go directly to the parse_brick */</div><div class='del'>-                brick_index = 3;</div><div class='del'>-                type = GF_CLUSTER_TYPE_NONE;</div><div class='del'>-                goto parse_bricks;</div><div class='del'>-        }</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[3], opwords_cl);</div><div class='del'>-        if (!w) {</div><div class='del'>-                type = GF_CLUSTER_TYPE_NONE;</div><div class='del'>-                index = 3;</div><div class='del'>-        } else if ((strcmp (w, "replica")) == 0) {</div><div class='del'>-                type = GF_CLUSTER_TYPE_REPLICATE;</div><div class='del'>-                count = strtol (words[4], NULL, 0);</div><div class='del'>-                if (!count || (count &lt; 2)) {</div><div class='del'>-                        cli_err ("replica count should be greater than 1");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_int32 (dict, "replica-count", count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                index = 5;</div><div class='del'>-                if (words[index] &amp;&amp; !strcmp (words[index], "arbiter")) {</div><div class='del'>-                        arbiter_count = strtol (words[6], NULL, 0);</div><div class='del'>-                        if (arbiter_count != 1 || count != 3) {</div><div class='del'>-                                cli_err ("For arbiter configuration, replica "</div><div class='del'>-                                         "count must be 3 and arbiter count "</div><div class='del'>-                                         "must be 1. The 3rd brick of the "</div><div class='del'>-                                         "replica will be the arbiter");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_int32 (dict, "arbiter-count",</div><div class='del'>-                                              arbiter_count);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        index = 7;</div><div class='del'>-                }</div><div class='add'>+    if (wordcount &lt; 4) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (wordcount &lt; 6) {</div><div class='add'>+        /* seems no options are given, go directly to the parse_brick */</div><div class='add'>+        brick_index = 3;</div><div class='add'>+        type = GF_CLUSTER_TYPE_NONE;</div><div class='add'>+        goto parse_bricks;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (count == 2) {</div><div class='del'>-                        if (strcmp (words[wordcount - 1], "force")) {</div><div class='del'>-                                question = "Replica 2 volumes are prone to "</div><div class='del'>-                                           "split-brain. Use Arbiter or "</div><div class='del'>-                                           "Replica 3 to avaoid this. See: "</div><div class='del'>-                                           "http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/."</div><div class='del'>-                                           "\nDo you still want to continue?\n";</div><div class='del'>-                                answer = cli_cmd_get_confirmation (state,</div><div class='del'>-                                                                   question);</div><div class='del'>-                                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                                        gf_log ("cli", GF_LOG_ERROR, "Add brick"</div><div class='del'>-                                                " cancelled, exiting");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else if ((strcmp (w, "stripe")) == 0) {</div><div class='del'>-                type = GF_CLUSTER_TYPE_STRIPE;</div><div class='del'>-                count = strtol (words[4], NULL, 0);</div><div class='del'>-                if (!count || (count &lt; 2)) {</div><div class='del'>-                        cli_err ("stripe count should be greater than 1");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_int32 (dict, "stripe-count", count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                index = 5;</div><div class='del'>-        } else {</div><div class='del'>-                GF_ASSERT (!"opword mismatch");</div><div class='add'>+    w = str_getunamb(words[3], opwords_cl);</div><div class='add'>+    if (!w) {</div><div class='add'>+        type = GF_CLUSTER_TYPE_NONE;</div><div class='add'>+        index = 3;</div><div class='add'>+    } else if ((strcmp(w, "replica")) == 0) {</div><div class='add'>+        type = GF_CLUSTER_TYPE_REPLICATE;</div><div class='add'>+        count = strtol(words[4], NULL, 0);</div><div class='add'>+        if (!count || (count &lt; 2)) {</div><div class='add'>+            cli_err("replica count should be greater than 1");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_int32(dict, "replica-count", count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        index = 5;</div><div class='add'>+        if (words[index] &amp;&amp; !strcmp(words[index], "arbiter")) {</div><div class='add'>+            arbiter_count = strtol(words[6], NULL, 0);</div><div class='add'>+            if (arbiter_count != 1 || count != 3) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "For arbiter configuration, replica "</div><div class='add'>+                    "count must be 3 and arbiter count "</div><div class='add'>+                    "must be 1. The 3rd brick of the "</div><div class='add'>+                    "replica will be the arbiter");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_int32(dict, "arbiter-count", arbiter_count);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            index = 7;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        brick_index = index;</div><div class='add'>+        if (count == 2) {</div><div class='add'>+            if (strcmp(words[wordcount - 1], "force")) {</div><div class='add'>+                question =</div><div class='add'>+                    "Replica 2 volumes are prone to "</div><div class='add'>+                    "split-brain. Use Arbiter or "</div><div class='add'>+                    "Replica 3 to avaoid this. See: "</div><div class='add'>+                    "http://docs.gluster.org/en/latest/Administrator%20Guide/"</div><div class='add'>+                    "Split%20brain%20and%20ways%20to%20deal%20with%20it/."</div><div class='add'>+                    "\nDo you still want to continue?\n";</div><div class='add'>+                answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+                if (GF_ANSWER_NO == answer) {</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Add brick"</div><div class='add'>+                           " cancelled, exiting");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else if ((strcmp(w, "stripe")) == 0) {</div><div class='add'>+        type = GF_CLUSTER_TYPE_STRIPE;</div><div class='add'>+        count = strtol(words[4], NULL, 0);</div><div class='add'>+        if (!count || (count &lt; 2)) {</div><div class='add'>+            cli_err("stripe count should be greater than 1");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_int32(dict, "stripe-count", count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        index = 5;</div><div class='add'>+    } else {</div><div class='add'>+        GF_ASSERT(!"opword mismatch");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    brick_index = index;</div><div class='ctx'> </div><div class='ctx'> parse_bricks:</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words[wordcount - 1], "force") == 0) {</div><div class='del'>-                is_force = _gf_true;</div><div class='del'>-                wc = wordcount - 1;</div><div class='del'>-        }</div><div class='add'>+    if (strcmp(words[wordcount - 1], "force") == 0) {</div><div class='add'>+        is_force = _gf_true;</div><div class='add'>+        wc = wordcount - 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_bricks_parse (words, wc, brick_index, &amp;bricks,</div><div class='del'>-                                    &amp;brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_cmd_bricks_parse(words, wc, brick_index, &amp;bricks, &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (dict, "bricks", bricks);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_dynstr(dict, "bricks", bricks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "count", brick_count);</div><div class='add'>+    ret = dict_set_int32(dict, "count", brick_count);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "force", is_force);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "force", is_force);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret_type)</div><div class='del'>-                *ret_type = type;</div><div class='add'>+    if (ret_type)</div><div class='add'>+        *ret_type = type;</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse add-brick CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse add-brick CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_tier_parse (const char **words, int wordcount,</div><div class='del'>-                           dict_t **options)</div><div class='add'>+cli_cmd_volume_tier_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict    = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        int      ret     = -1;</div><div class='del'>-        int32_t  command = GF_DEFRAG_CMD_NONE;</div><div class='del'>-        int32_t  is_force    = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t command = GF_DEFRAG_CMD_NONE;</div><div class='add'>+    int32_t is_force = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!(wordcount == 4 || wordcount == 5)) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!(wordcount == 4 || wordcount == 5)) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_validate_volume (volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to validate volume name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_validate_volume(volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to validate volume name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                if (!strcmp(words[3], "status"))</div><div class='del'>-                        command = GF_DEFRAG_CMD_STATUS_TIER;</div><div class='del'>-                else if (!strcmp(words[3], "start"))</div><div class='del'>-                        command = GF_DEFRAG_CMD_START_TIER;</div><div class='del'>-                else if (!strcmp(words[3], "stop"))</div><div class='del'>-                        command = GF_DEFRAG_CMD_STOP_TIER;</div><div class='del'>-                else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (wordcount == 5) {</div><div class='del'>-                if ((!strcmp (words[3], "start")) &amp;&amp;</div><div class='del'>-                    (!strcmp (words[4], "force"))) {</div><div class='del'>-                        command = GF_DEFRAG_CMD_START_TIER;</div><div class='del'>-                        is_force = 1;</div><div class='del'>-                        ret = dict_set_int32 (dict, "force", is_force);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    volname = (char *)words[2];</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        if (!strcmp(words[3], "status"))</div><div class='add'>+            command = GF_DEFRAG_CMD_STATUS_TIER;</div><div class='add'>+        else if (!strcmp(words[3], "start"))</div><div class='add'>+            command = GF_DEFRAG_CMD_START_TIER;</div><div class='add'>+        else if (!strcmp(words[3], "stop"))</div><div class='add'>+            command = GF_DEFRAG_CMD_STOP_TIER;</div><div class='add'>+        else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (wordcount == 5) {</div><div class='add'>+        if ((!strcmp(words[3], "start")) &amp;&amp; (!strcmp(words[4], "force"))) {</div><div class='add'>+            command = GF_DEFRAG_CMD_START_TIER;</div><div class='add'>+            is_force = 1;</div><div class='add'>+            ret = dict_set_int32(dict, "force", is_force);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "rebalance-command", command);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "rebalance-command", command);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse tier CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse tier CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_detach_tier_parse (const char **words, int wordcount,</div><div class='del'>-                                  dict_t **options, int *question)</div><div class='add'>+cli_cmd_volume_detach_tier_parse(const char **words, int wordcount,</div><div class='add'>+                                 dict_t **options, int *question)</div><div class='ctx'> {</div><div class='del'>-        int      ret = -1;</div><div class='del'>-        char    *word = NULL;</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        int32_t  command = GF_DEFRAG_CMD_NONE;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *word = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t command = GF_DEFRAG_CMD_NONE;</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 3 &amp;&amp; !strcmp ((char *)words[2], "help")) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 4) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        word = (char *)words[3];</div><div class='add'>+    if (wordcount == 3 &amp;&amp; !strcmp((char *)words[2], "help")) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (wordcount != 4) {</div><div class='ctx'>         ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    word = (char *)words[3];</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(word, "start")) {</div><div class='add'>+        command = GF_DEFRAG_CMD_DETACH_START;</div><div class='add'>+    } else if (!strcmp(word, "commit")) {</div><div class='add'>+        *question = 1;</div><div class='add'>+        command = GF_DEFRAG_CMD_DETACH_COMMIT;</div><div class='add'>+    } else if (!strcmp(word, "force")) {</div><div class='add'>+        *question = 1;</div><div class='add'>+        command = GF_DEFRAG_CMD_DETACH_COMMIT_FORCE;</div><div class='add'>+    } else if (!strcmp(word, "stop"))</div><div class='add'>+        command = GF_DEFRAG_CMD_DETACH_STOP;</div><div class='add'>+    else if (!strcmp(word, "status"))</div><div class='add'>+        command = GF_DEFRAG_CMD_DETACH_STATUS;</div><div class='add'>+    else</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp(word, "start")) {</div><div class='del'>-                command = GF_DEFRAG_CMD_DETACH_START;</div><div class='del'>-        } else if (!strcmp(word, "commit")) {</div><div class='del'>-                *question = 1;</div><div class='del'>-                command = GF_DEFRAG_CMD_DETACH_COMMIT;</div><div class='del'>-        } else if (!strcmp(word, "force")) {</div><div class='del'>-                *question = 1;</div><div class='del'>-                command = GF_DEFRAG_CMD_DETACH_COMMIT_FORCE;</div><div class='del'>-        } else if (!strcmp(word, "stop"))</div><div class='del'>-                command = GF_DEFRAG_CMD_DETACH_STOP;</div><div class='del'>-        else if (!strcmp(word, "status"))</div><div class='del'>-                command = GF_DEFRAG_CMD_DETACH_STATUS;</div><div class='del'>-        else</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "command", command);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "command", command);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='del'>-        ret = 0;</div><div class='add'>+    *options = dict;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse detach tier CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse detach tier CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_remove_brick_parse (struct cli_state *state, const char **words,</div><div class='del'>-                                   int wordcount, dict_t **options,</div><div class='del'>-                                   int *question, int *brick_count,</div><div class='del'>-                                   int32_t *comm)</div><div class='add'>+cli_cmd_volume_remove_brick_parse(struct cli_state *state, const char **words,</div><div class='add'>+                                  int wordcount, dict_t **options,</div><div class='add'>+                                  int *question, int *brick_count,</div><div class='add'>+                                  int32_t *comm)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        char    *delimiter = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char    key[50];</div><div class='del'>-        int     brick_index = 0;</div><div class='del'>-        int32_t tmp_index = 0;</div><div class='del'>-        int32_t j = 0;</div><div class='del'>-        char    *tmp_brick = NULL;</div><div class='del'>-        char    *tmp_brick1 = NULL;</div><div class='del'>-        char    *type_opword[] = { "replica", NULL };</div><div class='del'>-        char    *opwords[] = { "start", "commit", "stop", "status",</div><div class='del'>-                               "force", NULL };</div><div class='del'>-        char    *w = NULL;</div><div class='del'>-        int32_t  command = GF_OP_CMD_NONE;</div><div class='del'>-        long     count = 0;</div><div class='del'>-        gf_answer_t answer = GF_ANSWER_NO;</div><div class='del'>-        const char *ques = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 5)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[50];</div><div class='add'>+    int brick_index = 0;</div><div class='add'>+    int32_t tmp_index = 0;</div><div class='add'>+    int32_t j = 0;</div><div class='add'>+    char *tmp_brick = NULL;</div><div class='add'>+    char *tmp_brick1 = NULL;</div><div class='add'>+    char *type_opword[] = {"replica", NULL};</div><div class='add'>+    char *opwords[] = {"start", "commit", "stop", "status", "force", NULL};</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    int32_t command = GF_OP_CMD_NONE;</div><div class='add'>+    long count = 0;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    const char *ques = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    if (wordcount &lt; 5)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        brick_index = 3;</div><div class='del'>-        w = str_getunamb (words[3], type_opword);</div><div class='del'>-        if (w &amp;&amp; !strcmp ("replica", w)) {</div><div class='del'>-                if (wordcount &lt; 6) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                count = strtol (words[4], NULL, 0);</div><div class='del'>-                if (count &lt; 1) {</div><div class='del'>-                        cli_err ("replica count should be greater than 0 in "</div><div class='del'>-                                 "case of remove-brick");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (count == 2) {</div><div class='del'>-                        if (strcmp (words[wordcount - 1], "force")) {</div><div class='del'>-                                ques = "Replica 2 volumes are prone to "</div><div class='del'>-                                       "split-brain. Use Arbiter or Replica 3 "</div><div class='del'>-                                       "to avaoid this. See: "</div><div class='del'>-                                       "http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/."</div><div class='del'>-                                       "\nDo you still want to continue?\n";</div><div class='del'>-                                answer = cli_cmd_get_confirmation (state,</div><div class='del'>-                                                                   ques);</div><div class='del'>-                                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                                        gf_log ("cli", GF_LOG_ERROR, "Remove "</div><div class='del'>-                                                "brick cancelled, exiting");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    brick_index = 3;</div><div class='add'>+    w = str_getunamb(words[3], type_opword);</div><div class='add'>+    if (w &amp;&amp; !strcmp("replica", w)) {</div><div class='add'>+        if (wordcount &lt; 6) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        count = strtol(words[4], NULL, 0);</div><div class='add'>+        if (count &lt; 1) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "replica count should be greater than 0 in "</div><div class='add'>+                "case of remove-brick");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (count == 2) {</div><div class='add'>+            if (strcmp(words[wordcount - 1], "force")) {</div><div class='add'>+                ques =</div><div class='add'>+                    "Replica 2 volumes are prone to "</div><div class='add'>+                    "split-brain. Use Arbiter or Replica 3 "</div><div class='add'>+                    "to avaoid this. See: "</div><div class='add'>+                    "http://docs.gluster.org/en/latest/Administrator%20Guide/"</div><div class='add'>+                    "Split%20brain%20and%20ways%20to%20deal%20with%20it/."</div><div class='add'>+                    "\nDo you still want to continue?\n";</div><div class='add'>+                answer = cli_cmd_get_confirmation(state, ques);</div><div class='add'>+                if (GF_ANSWER_NO == answer) {</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Remove "</div><div class='add'>+                           "brick cancelled, exiting");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (dict, "replica-count", count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                brick_index = 5;</div><div class='del'>-        } else if (w) {</div><div class='del'>-                GF_ASSERT (!"opword mismatch");</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[wordcount - 1], opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dict_set_int32(dict, "replica-count", count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        brick_index = 5;</div><div class='add'>+    } else if (w) {</div><div class='add'>+        GF_ASSERT(!"opword mismatch");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    w = str_getunamb(words[wordcount - 1], opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        /* handled this option */</div><div class='add'>+        wordcount--;</div><div class='add'>+        if (!strcmp("start", w)) {</div><div class='add'>+            command = GF_OP_CMD_START;</div><div class='add'>+            if (question)</div><div class='add'>+                *question = 1;</div><div class='add'>+        } else if (!strcmp("commit", w)) {</div><div class='add'>+            command = GF_OP_CMD_COMMIT;</div><div class='add'>+        } else if (!strcmp("stop", w)) {</div><div class='add'>+            command = GF_OP_CMD_STOP;</div><div class='add'>+        } else if (!strcmp("status", w)) {</div><div class='add'>+            command = GF_OP_CMD_STATUS;</div><div class='add'>+        } else if (!strcmp("force", w)) {</div><div class='add'>+            command = GF_OP_CMD_COMMIT_FORCE;</div><div class='add'>+            if (question)</div><div class='add'>+                *question = 1;</div><div class='ctx'>         } else {</div><div class='del'>-                /* handled this option */</div><div class='del'>-                wordcount--;</div><div class='del'>-                if (!strcmp ("start", w)) {</div><div class='del'>-                        command = GF_OP_CMD_START;</div><div class='del'>-                        if (question)</div><div class='del'>-                                *question = 1;</div><div class='del'>-                } else if (!strcmp ("commit", w)) {</div><div class='del'>-                        command = GF_OP_CMD_COMMIT;</div><div class='del'>-                } else if (!strcmp ("stop", w)) {</div><div class='del'>-                        command = GF_OP_CMD_STOP;</div><div class='del'>-                } else if (!strcmp ("status", w)) {</div><div class='del'>-                        command = GF_OP_CMD_STATUS;</div><div class='del'>-                } else if (!strcmp ("force", w)) {</div><div class='del'>-                        command = GF_OP_CMD_COMMIT_FORCE;</div><div class='del'>-                        if (question)</div><div class='del'>-                                *question = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        GF_ASSERT (!"opword mismatch");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            GF_ASSERT(!"opword mismatch");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "command", command);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_INFO, "failed to set 'command' %d",</div><div class='del'>-                        command);</div><div class='del'>-</div><div class='add'>+    ret = dict_set_int32(dict, "command", command);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_INFO, "failed to set 'command' %d", command);</div><div class='ctx'> </div><div class='del'>-        tmp_index = brick_index;</div><div class='del'>-        tmp_brick = GF_MALLOC(2048 * sizeof(*tmp_brick), gf_common_mt_char);</div><div class='add'>+    tmp_index = brick_index;</div><div class='add'>+    tmp_brick = GF_MALLOC(2048 * sizeof(*tmp_brick), gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-        if (!tmp_brick) {</div><div class='del'>-                gf_log ("",GF_LOG_ERROR,"cli_cmd_volume_remove_brick_parse: "</div><div class='del'>-                        "Unable to get memory");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!tmp_brick) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR,</div><div class='add'>+               "cli_cmd_volume_remove_brick_parse: "</div><div class='add'>+               "Unable to get memory");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp_brick1 = GF_MALLOC(2048 * sizeof(*tmp_brick1), gf_common_mt_char);</div><div class='add'>+    tmp_brick1 = GF_MALLOC(2048 * sizeof(*tmp_brick1), gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-        if (!tmp_brick1) {</div><div class='del'>-                gf_log ("",GF_LOG_ERROR,"cli_cmd_volume_remove_brick_parse: "</div><div class='del'>-                        "Unable to get memory");</div><div class='add'>+    if (!tmp_brick1) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR,</div><div class='add'>+               "cli_cmd_volume_remove_brick_parse: "</div><div class='add'>+               "Unable to get memory");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (brick_index &lt; wordcount) {</div><div class='add'>+        if (validate_brick_name((char *)words[brick_index])) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+                "&lt;export-dir-abs-path&gt;",</div><div class='add'>+                words[brick_index]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            delimiter = strrchr(words[brick_index], ':');</div><div class='add'>+            ret = gf_canonicalize_path(delimiter + 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        j = tmp_index;</div><div class='add'>+        strcpy(tmp_brick, words[brick_index]);</div><div class='add'>+        while (j &lt; brick_index) {</div><div class='add'>+            strcpy(tmp_brick1, words[j]);</div><div class='add'>+            if (!(strcmp(tmp_brick, tmp_brick1))) {</div><div class='add'>+                gf_log("", GF_LOG_ERROR,</div><div class='add'>+                       "Duplicate bricks"</div><div class='add'>+                       " found %s",</div><div class='add'>+                       words[brick_index]);</div><div class='add'>+                cli_err("Duplicate bricks found %s", words[brick_index]);</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            j++;</div><div class='ctx'>         }</div><div class='add'>+        snprintf(key, 50, "brick%d", ++(*brick_count));</div><div class='add'>+        ret = dict_set_str(dict, key, (char *)words[brick_index++]);</div><div class='ctx'> </div><div class='del'>-        while (brick_index &lt; wordcount) {</div><div class='del'>-                if (validate_brick_name ((char *)words[brick_index])) {</div><div class='del'>-                        cli_err ("wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                                 "&lt;export-dir-abs-path&gt;", words[brick_index]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        delimiter = strrchr(words[brick_index], ':');</div><div class='del'>-                        ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                j = tmp_index;</div><div class='del'>-                strcpy(tmp_brick, words[brick_index]);</div><div class='del'>-                while ( j &lt; brick_index) {</div><div class='del'>-                        strcpy(tmp_brick1, words[j]);</div><div class='del'>-                        if (!(strcmp (tmp_brick, tmp_brick1))) {</div><div class='del'>-                                gf_log("",GF_LOG_ERROR, "Duplicate bricks"</div><div class='del'>-                                       " found %s", words[brick_index]);</div><div class='del'>-                                cli_err("Duplicate bricks found %s",</div><div class='del'>-                                        words[brick_index]);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        j++;</div><div class='del'>-                }</div><div class='del'>-                snprintf (key, 50, "brick%d", ++(*brick_count));</div><div class='del'>-                ret = dict_set_str (dict, key, (char *)words[brick_index++]);</div><div class='del'>-</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (command != GF_OP_CMD_STATUS &amp;&amp; command != GF_OP_CMD_STOP) {</div><div class='del'>-                ret = dict_set_int32 (dict, "count", *brick_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (command != GF_OP_CMD_STATUS &amp;&amp; command != GF_OP_CMD_STOP) {</div><div class='add'>+        ret = dict_set_int32(dict, "count", *brick_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse remove-brick CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse remove-brick CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (tmp_brick);</div><div class='del'>-        GF_FREE (tmp_brick1);</div><div class='add'>+    GF_FREE(tmp_brick);</div><div class='add'>+    GF_FREE(tmp_brick1);</div><div class='ctx'> </div><div class='del'>-        *comm = command;</div><div class='add'>+    *comm = command;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_brick_op_validate_bricks (const char **words, dict_t *dict,</div><div class='del'>-				  int src, int dst)</div><div class='add'>+cli_cmd_brick_op_validate_bricks(const char **words, dict_t *dict, int src,</div><div class='add'>+                                 int dst)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *delimiter  = NULL;</div><div class='del'>-</div><div class='del'>-        if (validate_brick_name ((char *)words[src])) {</div><div class='del'>-                cli_err ("wrong brick type: %s, use "</div><div class='del'>-                         "&lt;HOSTNAME&gt;:&lt;export-dir-abs-path&gt;", words[3]);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                delimiter = strrchr ((char *)words[src], '/');</div><div class='del'>-                ret = gf_canonicalize_path (delimiter);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "src-brick", (char *)words[src]);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+</div><div class='add'>+    if (validate_brick_name((char *)words[src])) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "wrong brick type: %s, use "</div><div class='add'>+            "&lt;HOSTNAME&gt;:&lt;export-dir-abs-path&gt;",</div><div class='add'>+            words[3]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        delimiter = strrchr((char *)words[src], '/');</div><div class='add'>+        ret = gf_canonicalize_path(delimiter);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dst == -1) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "src-brick", (char *)words[src]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (validate_brick_name ((char *)words[dst])) {</div><div class='del'>-                cli_err ("wrong brick type: %s, use "</div><div class='del'>-                         "&lt;HOSTNAME&gt;:&lt;export-dir-abs-path&gt;", words[dst]);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                delimiter = strrchr ((char *)words[dst], '/');</div><div class='del'>-                ret = gf_canonicalize_path (delimiter);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dst == -1) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "dst-brick", (char *)words[dst]);</div><div class='add'>+    if (validate_brick_name((char *)words[dst])) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "wrong brick type: %s, use "</div><div class='add'>+            "&lt;HOSTNAME&gt;:&lt;export-dir-abs-path&gt;",</div><div class='add'>+            words[dst]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        delimiter = strrchr((char *)words[dst], '/');</div><div class='add'>+        ret = gf_canonicalize_path(delimiter);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "dst-brick", (char *)words[dst]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_reset_brick_parse (const char **words, int wordcount,</div><div class='del'>-                                  dict_t **options)</div><div class='add'>+cli_cmd_volume_reset_brick_parse(const char **words, int wordcount,</div><div class='add'>+                                 dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int                   ret        = -1;</div><div class='del'>-        char                 *volname    = NULL;</div><div class='del'>-        dict_t               *dict       = NULL;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 5 || wordcount &gt; 7)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 5 || wordcount &gt; 7)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 5) {</div><div class='del'>-                if (strcmp (words[4], "start")) {</div><div class='del'>-                        cli_err ("Invalid option '%s' for reset-brick. Please "</div><div class='del'>-                                 "enter valid reset-brick command", words[4]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-                ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, -1);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "operation", "GF_RESET_OP_START");</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (wordcount == 6) {</div><div class='del'>-                if (strcmp (words[5], "commit")) {</div><div class='del'>-                        cli_err ("Invalid option '%s' for reset-brick. Please "</div><div class='del'>-                                 "enter valid reset-brick command", words[5]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (wordcount == 5) {</div><div class='add'>+        if (strcmp(words[4], "start")) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Invalid option '%s' for reset-brick. Please "</div><div class='add'>+                "enter valid reset-brick command",</div><div class='add'>+                words[4]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, 4);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, -1);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "operation", "GF_RESET_OP_COMMIT");</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (wordcount == 7) {</div><div class='del'>-                if (strcmp (words[5], "commit") || strcmp (words[6], "force")) {</div><div class='del'>-                        cli_err ("Invalid option '%s %s' for reset-brick. Please "</div><div class='del'>-                                 "enter valid reset-brick command",</div><div class='del'>-                                  words[5], words[6]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_str(dict, "operation", "GF_RESET_OP_START");</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (wordcount == 6) {</div><div class='add'>+        if (strcmp(words[5], "commit")) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Invalid option '%s' for reset-brick. Please "</div><div class='add'>+                "enter valid reset-brick command",</div><div class='add'>+                words[5]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, 4);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, 4);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = dict_set_str(dict, "operation", "GF_RESET_OP_COMMIT");</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (wordcount == 7) {</div><div class='add'>+        if (strcmp(words[5], "commit") || strcmp(words[6], "force")) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Invalid option '%s %s' for reset-brick. Please "</div><div class='add'>+                "enter valid reset-brick command",</div><div class='add'>+                words[5], words[6]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, 4);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "operation",</div><div class='del'>-                                    "GF_RESET_OP_COMMIT_FORCE");</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = dict_set_str(dict, "operation", "GF_RESET_OP_COMMIT_FORCE");</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Unable to parse reset-brick CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse reset-brick CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_replace_brick_parse (const char **words, int wordcount,</div><div class='del'>-                                    dict_t **options)</div><div class='add'>+cli_cmd_volume_replace_brick_parse(const char **words, int wordcount,</div><div class='add'>+                                   dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int                   ret        = -1;</div><div class='del'>-        char                 *volname    = NULL;</div><div class='del'>-        dict_t               *dict       = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 7) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount != 7) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to allocate dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to allocate dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_brick_op_validate_bricks (words, dict, 3, 4);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_cmd_brick_op_validate_bricks(words, dict, 3, 4);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* commit force option */</div><div class='del'>-        if (strcmp ("commit", words[5]) || strcmp ("force", words[6])) {</div><div class='del'>-                cli_err ("Invalid option '%s' '%s' for replace-brick. Please "</div><div class='del'>-                         "enter valid replace-brick command", words[5],</div><div class='del'>-                         words[6]);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* commit force option */</div><div class='add'>+    if (strcmp("commit", words[5]) || strcmp("force", words[6])) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "Invalid option '%s' '%s' for replace-brick. Please "</div><div class='add'>+            "enter valid replace-brick command",</div><div class='add'>+            words[5], words[6]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "operation", "GF_REPLACE_OP_COMMIT_FORCE");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "operation", "GF_REPLACE_OP_COMMIT_FORCE");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse reset-brick CLI");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse reset-brick CLI");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_log_filename_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_log_filename_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        char    *str = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char    *delimiter = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *delimiter = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[3];</div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    volname = (char *)words[3];</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        str = (char *)words[4];</div><div class='del'>-        if (strchr (str, ':')) {</div><div class='del'>-                delimiter = strchr (words[4], ':');</div><div class='del'>-                if (!delimiter || delimiter == words[4]</div><div class='del'>-                    || *(delimiter+1) != '/') {</div><div class='del'>-                        cli_err ("wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                                 "&lt;export-dir-abs-path&gt;", words[4]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_str (dict, "brick", str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                /* Path */</div><div class='del'>-                str = (char *)words[5];</div><div class='del'>-                ret = dict_set_str (dict, "path", str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    str = (char *)words[4];</div><div class='add'>+    if (strchr(str, ':')) {</div><div class='add'>+        delimiter = strchr(words[4], ':');</div><div class='add'>+        if (!delimiter || delimiter == words[4] || *(delimiter + 1) != '/') {</div><div class='add'>+            cli_err(</div><div class='add'>+                "wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+                "&lt;export-dir-abs-path&gt;",</div><div class='add'>+                words[4]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         } else {</div><div class='del'>-                ret = dict_set_str (dict, "path", str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+            ret = gf_canonicalize_path(delimiter + 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = dict_set_str(dict, "brick", str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        /* Path */</div><div class='add'>+        str = (char *)words[5];</div><div class='add'>+        ret = dict_set_str(dict, "path", str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_set_str(dict, "path", str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_log_level_parse (const char **words, int worcount, dict_t **options)</div><div class='add'>+cli_cmd_log_level_parse(const char **words, int worcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t *dict            = NULL;</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * loglevel command format:</div><div class='del'>-         *  &gt; volume log level &lt;VOL&gt; &lt;XLATOR[*]&gt; &lt;LOGLEVEL&gt;</div><div class='del'>-         *  &gt; volume log level colon-o posix WARNING</div><div class='del'>-         *  &gt; volume log level colon-o replicate* DEBUG</div><div class='del'>-         *  &gt; volume log level coon-o * TRACE</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        GF_ASSERT ((strncmp(words[0], "volume", 6) == 0));</div><div class='del'>-        GF_ASSERT ((strncmp(words[1], "log", 3) == 0));</div><div class='del'>-        GF_ASSERT ((strncmp(words[2], "level", 5) == 0));</div><div class='del'>-</div><div class='del'>-        ret = glusterd_check_log_level(words[5]);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                cli_err("Invalid log level [%s] specified", words[5]);</div><div class='del'>-                cli_err("Valid values for loglevel: (DEBUG|WARNING|ERROR"</div><div class='del'>-                        "|CRITICAL|NONE|TRACE)");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * loglevel command format:</div><div class='add'>+     *  &gt; volume log level &lt;VOL&gt; &lt;XLATOR[*]&gt; &lt;LOGLEVEL&gt;</div><div class='add'>+     *  &gt; volume log level colon-o posix WARNING</div><div class='add'>+     *  &gt; volume log level colon-o replicate* DEBUG</div><div class='add'>+     *  &gt; volume log level coon-o * TRACE</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    GF_ASSERT((strncmp(words[0], "volume", 6) == 0));</div><div class='add'>+    GF_ASSERT((strncmp(words[1], "log", 3) == 0));</div><div class='add'>+    GF_ASSERT((strncmp(words[2], "level", 5) == 0));</div><div class='add'>+</div><div class='add'>+    ret = glusterd_check_log_level(words[5]);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        cli_err("Invalid log level [%s] specified", words[5]);</div><div class='add'>+        cli_err(</div><div class='add'>+            "Valid values for loglevel: (DEBUG|WARNING|ERROR"</div><div class='add'>+            "|CRITICAL|NONE|TRACE)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(words[3]);</div><div class='del'>-        GF_ASSERT(words[4]);</div><div class='add'>+    GF_ASSERT(words[3]);</div><div class='add'>+    GF_ASSERT(words[4]);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *)words[3]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[3]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "xlator", (char *)words[4]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "xlator", (char *)words[4]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "loglevel", (char *)words[5]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "loglevel", (char *)words[5]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+out:</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_log_locate_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_log_locate_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        char    *str = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char    *delimiter = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *delimiter = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[3];</div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    volname = (char *)words[3];</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (words[4]) {</div><div class='del'>-                delimiter = strchr (words[4], ':');</div><div class='del'>-                if (!delimiter || delimiter == words[4]</div><div class='del'>-                    || *(delimiter+1) != '/') {</div><div class='del'>-                        cli_err ("wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                                 "&lt;export-dir-abs-path&gt;", words[4]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                str = (char *)words[4];</div><div class='del'>-                ret = dict_set_str (dict, "brick", str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (words[4]) {</div><div class='add'>+        delimiter = strchr(words[4], ':');</div><div class='add'>+        if (!delimiter || delimiter == words[4] || *(delimiter + 1) != '/') {</div><div class='add'>+            cli_err(</div><div class='add'>+                "wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+                "&lt;export-dir-abs-path&gt;",</div><div class='add'>+                words[4]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_canonicalize_path(delimiter + 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+        str = (char *)words[4];</div><div class='add'>+        ret = dict_set_str(dict, "brick", str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_log_rotate_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_log_rotate_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *volname = NULL;</div><div class='del'>-        char    *str = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char    *delimiter = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *delimiter = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp ("rotate", words[3]) == 0)</div><div class='del'>-                volname = (char *)words[2];</div><div class='del'>-        else if (strcmp ("rotate", words[2]) == 0)</div><div class='del'>-                volname = (char *)words[3];</div><div class='del'>-        GF_ASSERT (volname);</div><div class='add'>+    if (strcmp("rotate", words[3]) == 0)</div><div class='add'>+        volname = (char *)words[2];</div><div class='add'>+    else if (strcmp("rotate", words[2]) == 0)</div><div class='add'>+        volname = (char *)words[3];</div><div class='add'>+    GF_ASSERT(volname);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (words[4]) {</div><div class='del'>-                delimiter = strchr (words[4], ':');</div><div class='del'>-                if (!delimiter || delimiter == words[4]</div><div class='del'>-                    || *(delimiter+1) != '/') {</div><div class='del'>-                        cli_err ("wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                                 "&lt;export-dir-abs-path&gt;", words[4]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                str = (char *)words[4];</div><div class='del'>-                ret = dict_set_str (dict, "brick", str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (words[4]) {</div><div class='add'>+        delimiter = strchr(words[4], ':');</div><div class='add'>+        if (!delimiter || delimiter == words[4] || *(delimiter + 1) != '/') {</div><div class='add'>+            cli_err(</div><div class='add'>+                "wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+                "&lt;export-dir-abs-path&gt;",</div><div class='add'>+                words[4]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_canonicalize_path(delimiter + 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+        str = (char *)words[4];</div><div class='add'>+        ret = dict_set_str(dict, "brick", str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-gsyncd_url_check (const char *w)</div><div class='add'>+gsyncd_url_check(const char *w)</div><div class='ctx'> {</div><div class='del'>-        return !!strpbrk (w, ":/");</div><div class='add'>+    return !!strpbrk(w, ":/");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-gsyncd_glob_check (const char *w)</div><div class='add'>+gsyncd_glob_check(const char *w)</div><div class='ctx'> {</div><div class='del'>-        return !!strpbrk (w, "*?[");</div><div class='add'>+    return !!strpbrk(w, "*?[");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-config_parse (const char **words, int wordcount, dict_t *dict,</div><div class='del'>-              unsigned cmdi, unsigned glob)</div><div class='add'>+config_parse(const char **words, int wordcount, dict_t *dict, unsigned cmdi,</div><div class='add'>+             unsigned glob)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret     = -1;</div><div class='del'>-        int32_t            i       = -1;</div><div class='del'>-        char               *append_str = NULL;</div><div class='del'>-        size_t             append_len = 0;</div><div class='del'>-        char               *subop = NULL;</div><div class='del'>-        char               *ret_chkpt = NULL;</div><div class='del'>-        struct tm           checkpoint_time;</div><div class='del'>-        char                chkpt_buf[20] = "";</div><div class='del'>-</div><div class='del'>-        switch ((wordcount - 1) - cmdi) {</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t i = -1;</div><div class='add'>+    char *append_str = NULL;</div><div class='add'>+    size_t append_len = 0;</div><div class='add'>+    char *subop = NULL;</div><div class='add'>+    char *ret_chkpt = NULL;</div><div class='add'>+    struct tm checkpoint_time;</div><div class='add'>+    char chkpt_buf[20] = "";</div><div class='add'>+</div><div class='add'>+    switch ((wordcount - 1) - cmdi) {</div><div class='ctx'>         case 0:</div><div class='del'>-                subop = gf_strdup ("get-all");</div><div class='del'>-                break;</div><div class='add'>+            subop = gf_strdup("get-all");</div><div class='add'>+            break;</div><div class='ctx'>         case 1:</div><div class='del'>-                if (words[cmdi + 1][0] == '!') {</div><div class='del'>-                        (words[cmdi + 1])++;</div><div class='del'>-                        if (gf_asprintf (&amp;subop, "del%s",</div><div class='del'>-                                         glob ? "-glob" : "") == -1)</div><div class='del'>-                                subop = NULL;</div><div class='del'>-                } else</div><div class='del'>-                        subop = gf_strdup ("get");</div><div class='add'>+            if (words[cmdi + 1][0] == '!') {</div><div class='add'>+                (words[cmdi + 1])++;</div><div class='add'>+                if (gf_asprintf(&amp;subop, "del%s", glob ? "-glob" : "") == -1)</div><div class='add'>+                    subop = NULL;</div><div class='add'>+            } else</div><div class='add'>+                subop = gf_strdup("get");</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "op_name", ((char *)words[cmdi + 1]));</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_str(dict, "op_name", ((char *)words[cmdi + 1]));</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                if (gf_asprintf (&amp;subop, "set%s", glob ? "-glob" : "") == -1)</div><div class='del'>-                        subop = NULL;</div><div class='add'>+            if (gf_asprintf(&amp;subop, "set%s", glob ? "-glob" : "") == -1)</div><div class='add'>+                subop = NULL;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "op_name", ((char *)words[cmdi + 1]));</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+            ret = dict_set_str(dict, "op_name", ((char *)words[cmdi + 1]));</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                /* join the varargs by spaces to get the op_value */</div><div class='add'>+            /* join the varargs by spaces to get the op_value */</div><div class='ctx'> </div><div class='del'>-                for (i = cmdi + 2; i &lt; wordcount; i++)</div><div class='del'>-                        append_len += (strlen (words[i]) + 1);</div><div class='del'>-                /* trailing strcat will add two bytes, make space for that */</div><div class='del'>-                append_len++;</div><div class='add'>+            for (i = cmdi + 2; i &lt; wordcount; i++)</div><div class='add'>+                append_len += (strlen(words[i]) + 1);</div><div class='add'>+            /* trailing strcat will add two bytes, make space for that */</div><div class='add'>+            append_len++;</div><div class='ctx'> </div><div class='del'>-                append_str = GF_MALLOC (append_len, cli_mt_append_str);</div><div class='del'>-                if (!append_str) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            append_str = GF_MALLOC(append_len, cli_mt_append_str);</div><div class='add'>+            if (!append_str) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            for (i = cmdi + 2; i &lt; wordcount; i++) {</div><div class='add'>+                strcat(append_str, words[i]);</div><div class='add'>+                strcat(append_str, " ");</div><div class='add'>+            }</div><div class='add'>+            append_str[append_len - 2] = '\0';</div><div class='add'>+            /* "checkpoint now" is special: we resolve that "now" */</div><div class='add'>+            if ((strcmp(words[cmdi + 1], "checkpoint") == 0) &amp;&amp;</div><div class='add'>+                (strcmp(append_str, "now") == 0)) {</div><div class='add'>+                struct timeval tv = {</div><div class='add'>+                    0,</div><div class='add'>+                };</div><div class='add'>+</div><div class='add'>+                ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+                if (ret == -1)</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                for (i = cmdi + 2; i &lt; wordcount; i++) {</div><div class='del'>-                        strcat (append_str, words[i]);</div><div class='del'>-                        strcat (append_str, " ");</div><div class='del'>-                }</div><div class='del'>-                append_str[append_len - 2] = '\0';</div><div class='del'>-                /* "checkpoint now" is special: we resolve that "now" */</div><div class='del'>-                if ((strcmp (words[cmdi + 1], "checkpoint") == 0) &amp;&amp;</div><div class='del'>-                    (strcmp (append_str, "now") == 0)) {</div><div class='del'>-                        struct timeval tv = {0,};</div><div class='del'>-</div><div class='del'>-                        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        GF_FREE (append_str);</div><div class='del'>-                        append_str = GF_MALLOC (300, cli_mt_append_str);</div><div class='del'>-                        if (!append_str) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        snprintf (append_str, 300, "%" GF_PRI_SECOND,</div><div class='del'>-                                  tv.tv_sec);</div><div class='del'>-                } else if ((strcmp (words[cmdi + 1], "checkpoint") == 0) &amp;&amp;</div><div class='del'>-                           (strcmp (append_str, "now") != 0)) {</div><div class='del'>-                        memset(&amp;checkpoint_time, 0, sizeof(struct tm));</div><div class='del'>-                        ret_chkpt = strptime(append_str, "%Y-%m-%d %H:%M:%S",</div><div class='del'>-                                             &amp;checkpoint_time);</div><div class='del'>-</div><div class='del'>-                        if (ret_chkpt == NULL) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                cli_err ("Invalid Checkpoint label. Use format "</div><div class='del'>-                                         "\"Y-m-d H:M:S\", Example: 2016-10-25 15:30:45");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        GF_FREE (append_str);</div><div class='del'>-                        append_str = GF_MALLOC (300, cli_mt_append_str);</div><div class='del'>-                        if (!append_str) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        strftime (chkpt_buf, sizeof(chkpt_buf), "%s",</div><div class='del'>-                                  &amp;checkpoint_time);</div><div class='del'>-                        snprintf (append_str, 300, "%s", chkpt_buf);</div><div class='add'>+                GF_FREE(append_str);</div><div class='add'>+                append_str = GF_MALLOC(300, cli_mt_append_str);</div><div class='add'>+                if (!append_str) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                snprintf(append_str, 300, "%" GF_PRI_SECOND, tv.tv_sec);</div><div class='add'>+            } else if ((strcmp(words[cmdi + 1], "checkpoint") == 0) &amp;&amp;</div><div class='add'>+                       (strcmp(append_str, "now") != 0)) {</div><div class='add'>+                memset(&amp;checkpoint_time, 0, sizeof(struct tm));</div><div class='add'>+                ret_chkpt = strptime(append_str, "%Y-%m-%d %H:%M:%S",</div><div class='add'>+                                     &amp;checkpoint_time);</div><div class='add'>+</div><div class='add'>+                if (ret_chkpt == NULL) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Invalid Checkpoint label. Use format "</div><div class='add'>+                        "\"Y-m-d H:M:S\", Example: 2016-10-25 15:30:45");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                GF_FREE(append_str);</div><div class='add'>+                append_str = GF_MALLOC(300, cli_mt_append_str);</div><div class='add'>+                if (!append_str) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                strftime(chkpt_buf, sizeof(chkpt_buf), "%s", &amp;checkpoint_time);</div><div class='add'>+                snprintf(append_str, 300, "%s", chkpt_buf);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_dynstr (dict, "op_value", append_str);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                append_str = NULL;</div><div class='del'>-        }</div><div class='add'>+            ret = dict_set_dynstr(dict, "op_value", append_str);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            append_str = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='del'>-        if (subop) {</div><div class='del'>-                ret = dict_set_dynstr (dict, "subop", subop);</div><div class='del'>-                if (!ret)</div><div class='del'>-                      subop = NULL;</div><div class='del'>-        }</div><div class='add'>+    ret = -1;</div><div class='add'>+    if (subop) {</div><div class='add'>+        ret = dict_set_dynstr(dict, "subop", subop);</div><div class='add'>+        if (!ret)</div><div class='add'>+            subop = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (append_str);</div><div class='del'>-        GF_FREE (subop);</div><div class='add'>+    GF_FREE(append_str);</div><div class='add'>+    GF_FREE(subop);</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* ssh_port_parse: Parses and validates when ssh_port is given.</div><div class='hunk'>@@ -2755,1529 +2823,1493 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-parse_ssh_port (const char **words, int wordcount, dict_t *dict,</div><div class='del'>-                unsigned *cmdi, int ssh_index, char *type) {</div><div class='del'>-</div><div class='del'>-        int        ret         = 0;</div><div class='del'>-        char      *end_ptr     = NULL;</div><div class='del'>-        int64_t    limit       = 0;</div><div class='del'>-</div><div class='del'>-        if (!strcmp ((char *)words[ssh_index], "ssh-port")) {</div><div class='del'>-                if (strcmp ((char *)words[ssh_index-1], "create")) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                (*cmdi)++;</div><div class='del'>-                limit = strtol (words[ssh_index+1], &amp;end_ptr, 10);</div><div class='del'>-                if (errno == ERANGE || errno == EINVAL || limit &lt;= 0</div><div class='del'>-                                    || strcmp (end_ptr, "") != 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_err ("Please enter an integer value for ssh_port ");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+parse_ssh_port(const char **words, int wordcount, dict_t *dict, unsigned *cmdi,</div><div class='add'>+               int ssh_index, char *type)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *end_ptr = NULL;</div><div class='add'>+    int64_t limit = 0;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int32 (dict, "ssh_port", limit);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                (*cmdi)++;</div><div class='del'>-        } else if (strcmp ((char *)words[ssh_index+1], "create")) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    if (!strcmp((char *)words[ssh_index], "ssh-port")) {</div><div class='add'>+        if (strcmp((char *)words[ssh_index - 1], "create")) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        (*cmdi)++;</div><div class='add'>+        limit = strtol(words[ssh_index + 1], &amp;end_ptr, 10);</div><div class='add'>+        if (errno == ERANGE || errno == EINVAL || limit &lt;= 0 ||</div><div class='add'>+            strcmp(end_ptr, "") != 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_err("Please enter an integer value for ssh_port ");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, type, 1);</div><div class='add'>+        ret = dict_set_int32(dict, "ssh_port", limit);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         (*cmdi)++;</div><div class='add'>+    } else if (strcmp((char *)words[ssh_index + 1], "create")) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    ret = dict_set_int32(dict, type, 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    (*cmdi)++;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-force_push_pem_no_verify_parse (const char **words, int wordcount,</div><div class='del'>-                      dict_t *dict, unsigned *cmdi)</div><div class='add'>+force_push_pem_no_verify_parse(const char **words, int wordcount, dict_t *dict,</div><div class='add'>+                               unsigned *cmdi)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret     = 0;</div><div class='del'>-</div><div class='del'>-        if (!strcmp ((char *)words[wordcount-1], "force")) {</div><div class='del'>-                if ((strcmp ((char *)words[wordcount-2], "start")) &amp;&amp;</div><div class='del'>-                    (strcmp ((char *)words[wordcount-2], "stop")) &amp;&amp;</div><div class='del'>-                    (strcmp ((char *)words[wordcount-2], "create")) &amp;&amp;</div><div class='del'>-                    (strcmp ((char *)words[wordcount-2], "no-verify")) &amp;&amp;</div><div class='del'>-                    (strcmp ((char *)words[wordcount-2], "push-pem")) &amp;&amp;</div><div class='del'>-                    (strcmp ((char *)words[wordcount-2], "pause")) &amp;&amp;</div><div class='del'>-                    (strcmp ((char *)words[wordcount-2], "resume"))) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_uint32 (dict, "force",</div><div class='del'>-                                       _gf_true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                (*cmdi)++;</div><div class='del'>-</div><div class='del'>-                if (!strcmp ((char *)words[wordcount-2], "push-pem")) {</div><div class='del'>-                        ret = parse_ssh_port (words, wordcount, dict, cmdi,</div><div class='del'>-                                              wordcount-4, "push_pem");</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                } else if (!strcmp ((char *)words[wordcount-2], "no-verify")) {</div><div class='del'>-                        ret = parse_ssh_port (words, wordcount, dict, cmdi,</div><div class='del'>-                                              wordcount-4, "no_verify");</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (!strcmp ((char *)words[wordcount-1], "push-pem")) {</div><div class='del'>-                ret = parse_ssh_port (words, wordcount, dict, cmdi, wordcount-3,</div><div class='del'>-                                      "push_pem");</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (!strcmp ((char *)words[wordcount-1], "no-verify")) {</div><div class='del'>-                ret = parse_ssh_port (words, wordcount, dict, cmdi, wordcount-3,</div><div class='del'>-                                      "no_verify");</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!strcmp((char *)words[wordcount - 1], "force")) {</div><div class='add'>+        if ((strcmp((char *)words[wordcount - 2], "start")) &amp;&amp;</div><div class='add'>+            (strcmp((char *)words[wordcount - 2], "stop")) &amp;&amp;</div><div class='add'>+            (strcmp((char *)words[wordcount - 2], "create")) &amp;&amp;</div><div class='add'>+            (strcmp((char *)words[wordcount - 2], "no-verify")) &amp;&amp;</div><div class='add'>+            (strcmp((char *)words[wordcount - 2], "push-pem")) &amp;&amp;</div><div class='add'>+            (strcmp((char *)words[wordcount - 2], "pause")) &amp;&amp;</div><div class='add'>+            (strcmp((char *)words[wordcount - 2], "resume"))) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_uint32(dict, "force", _gf_true);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        (*cmdi)++;</div><div class='add'>+</div><div class='add'>+        if (!strcmp((char *)words[wordcount - 2], "push-pem")) {</div><div class='add'>+            ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 4,</div><div class='add'>+                                 "push_pem");</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+        } else if (!strcmp((char *)words[wordcount - 2], "no-verify")) {</div><div class='add'>+            ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 4,</div><div class='add'>+                                 "no_verify");</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else if (!strcmp((char *)words[wordcount - 1], "push-pem")) {</div><div class='add'>+        ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 3,</div><div class='add'>+                             "push_pem");</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (!strcmp((char *)words[wordcount - 1], "no-verify")) {</div><div class='add'>+        ret = parse_ssh_port(words, wordcount, dict, cmdi, wordcount - 3,</div><div class='add'>+                             "no_verify");</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_gsync_set_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_gsync_set_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret     = -1;</div><div class='del'>-        dict_t             *dict   = NULL;</div><div class='del'>-        gf1_cli_gsync_set  type    = GF_GSYNC_OPTION_TYPE_NONE;</div><div class='del'>-        int                i       = 0;</div><div class='del'>-        unsigned           masteri = 0;</div><div class='del'>-        unsigned           slavei  = 0;</div><div class='del'>-        unsigned           glob    = 0;</div><div class='del'>-        unsigned           cmdi    = 0;</div><div class='del'>-        char               *opwords[] = { "create", "status", "start", "stop",</div><div class='del'>-                                          "config", "force", "delete",</div><div class='del'>-                                          "ssh-port", "no-verify", "push-pem",</div><div class='del'>-                                          "detail", "pause", "resume", NULL };</div><div class='del'>-        char               *w = NULL;</div><div class='del'>-        char               *save_ptr   = NULL;</div><div class='del'>-        char               *slave_temp = NULL;</div><div class='del'>-        char               *token      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* new syntax:</div><div class='del'>-         *</div><div class='del'>-         * volume geo-replication $m $s create [[ssh-port n] [[no-verify] | [push-pem]]] [force]</div><div class='del'>-         * volume geo-replication [$m [$s]] status [detail]</div><div class='del'>-         * volume geo-replication [$m] $s config [[!]$opt [$val]]</div><div class='del'>-         * volume geo-replication $m $s start|stop [force]</div><div class='del'>-         * volume geo-replication $m $s delete [reset-sync-time]</div><div class='del'>-         * volume geo-replication $m $s pause [force]</div><div class='del'>-         * volume geo-replication $m $s resume [force]</div><div class='del'>-         */</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf1_cli_gsync_set type = GF_GSYNC_OPTION_TYPE_NONE;</div><div class='add'>+    int i = 0;</div><div class='add'>+    unsigned masteri = 0;</div><div class='add'>+    unsigned slavei = 0;</div><div class='add'>+    unsigned glob = 0;</div><div class='add'>+    unsigned cmdi = 0;</div><div class='add'>+    char *opwords[] = {"create", "status", "start",    "stop",      "config",</div><div class='add'>+                       "force",  "delete", "ssh-port", "no-verify", "push-pem",</div><div class='add'>+                       "detail", "pause",  "resume",   NULL};</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='add'>+    char *slave_temp = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 3)</div><div class='del'>-                goto out;</div><div class='add'>+    /* new syntax:</div><div class='add'>+     *</div><div class='add'>+     * volume geo-replication $m $s create [[ssh-port n] [[no-verify] |</div><div class='add'>+     * [push-pem]]] [force] volume geo-replication [$m [$s]] status [detail]</div><div class='add'>+     * volume geo-replication [$m] $s config [[!]$opt [$val]]</div><div class='add'>+     * volume geo-replication $m $s start|stop [force]</div><div class='add'>+     * volume geo-replication $m $s delete [reset-sync-time]</div><div class='add'>+     * volume geo-replication $m $s pause [force]</div><div class='add'>+     * volume geo-replication $m $s resume [force]</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (wordcount &lt; 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 2; i &lt;= 3 &amp;&amp; i &lt; wordcount - 1; i++) {</div><div class='del'>-                if (gsyncd_glob_check (words[i]))</div><div class='del'>-                        glob = i;</div><div class='del'>-                if (gsyncd_url_check (words[i])) {</div><div class='del'>-                        slavei = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 2; i &lt;= 3 &amp;&amp; i &lt; wordcount - 1; i++) {</div><div class='add'>+        if (gsyncd_glob_check(words[i]))</div><div class='add'>+            glob = i;</div><div class='add'>+        if (gsyncd_url_check(words[i])) {</div><div class='add'>+            slavei = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (glob &amp;&amp; !slavei)</div><div class='del'>-                /* glob is allowed only for config, thus it implies there is a</div><div class='del'>-                 * slave argument; but that might have not been recognized on</div><div class='del'>-                 * the first scan as it's url characteristics has been covered</div><div class='del'>-                 * by the glob syntax.</div><div class='del'>-                 *</div><div class='del'>-                 * In this case, the slave is perforce the last glob-word -- the</div><div class='del'>-                 * upcoming one is neither glob, nor url, so it's definitely not</div><div class='del'>-                 * the slave.</div><div class='del'>-                 */</div><div class='del'>-                slavei = glob;</div><div class='del'>-        if (slavei) {</div><div class='del'>-                cmdi = slavei + 1;</div><div class='del'>-                if (slavei == 3)</div><div class='del'>-                        masteri = 2;</div><div class='del'>-        } else if (i &lt;= 4) {</div><div class='del'>-                if (strtail ("detail", (char *)words[wordcount-1])) {</div><div class='del'>-                        cmdi = wordcount - 2;</div><div class='del'>-                        if (i == 4)</div><div class='del'>-                                masteri = 2;</div><div class='del'>-                } else {</div><div class='del'>-                        /* no $s, can only be status cmd</div><div class='del'>-                         * (with either a single $m before it or nothing)</div><div class='del'>-                         * -- these conditions imply that i &lt;= 3 after</div><div class='del'>-                         * the iteration and that i is the successor of</div><div class='del'>-                         * the (0 or 1 length) sequence of $m-s.</div><div class='del'>-                         */</div><div class='del'>-                        cmdi = i;</div><div class='del'>-                        if (i == 3)</div><div class='del'>-                                masteri = 2;</div><div class='del'>-                }</div><div class='del'>-        } else</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* now check if input really complies syntax</div><div class='del'>-         * (in a somewhat redundant way, in favor</div><div class='del'>-         * transparent soundness)</div><div class='add'>+    if (glob &amp;&amp; !slavei)</div><div class='add'>+        /* glob is allowed only for config, thus it implies there is a</div><div class='add'>+         * slave argument; but that might have not been recognized on</div><div class='add'>+         * the first scan as it's url characteristics has been covered</div><div class='add'>+         * by the glob syntax.</div><div class='add'>+         *</div><div class='add'>+         * In this case, the slave is perforce the last glob-word -- the</div><div class='add'>+         * upcoming one is neither glob, nor url, so it's definitely not</div><div class='add'>+         * the slave.</div><div class='ctx'>          */</div><div class='add'>+        slavei = glob;</div><div class='add'>+    if (slavei) {</div><div class='add'>+        cmdi = slavei + 1;</div><div class='add'>+        if (slavei == 3)</div><div class='add'>+            masteri = 2;</div><div class='add'>+    } else if (i &lt;= 4) {</div><div class='add'>+        if (strtail("detail", (char *)words[wordcount - 1])) {</div><div class='add'>+            cmdi = wordcount - 2;</div><div class='add'>+            if (i == 4)</div><div class='add'>+                masteri = 2;</div><div class='add'>+        } else {</div><div class='add'>+            /* no $s, can only be status cmd</div><div class='add'>+             * (with either a single $m before it or nothing)</div><div class='add'>+             * -- these conditions imply that i &lt;= 3 after</div><div class='add'>+             * the iteration and that i is the successor of</div><div class='add'>+             * the (0 or 1 length) sequence of $m-s.</div><div class='add'>+             */</div><div class='add'>+            cmdi = i;</div><div class='add'>+            if (i == 3)</div><div class='add'>+                masteri = 2;</div><div class='add'>+        }</div><div class='add'>+    } else</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (masteri &amp;&amp; gsyncd_url_check (words[masteri]))</div><div class='del'>-                goto out;</div><div class='del'>-        if (slavei &amp;&amp; !glob &amp;&amp; !gsyncd_url_check (words[slavei]))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        w = str_getunamb (words[cmdi], opwords);</div><div class='del'>-        if (!w)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (strcmp (w, "create") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_CREATE;</div><div class='del'>-</div><div class='del'>-                if (!masteri || !slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "status") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_STATUS;</div><div class='del'>-</div><div class='del'>-                if (slavei &amp;&amp; !masteri)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "config") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_CONFIG;</div><div class='del'>-</div><div class='del'>-                if (!slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "start") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_START;</div><div class='del'>-</div><div class='del'>-                if (!masteri || !slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "stop") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_STOP;</div><div class='add'>+    /* now check if input really complies syntax</div><div class='add'>+     * (in a somewhat redundant way, in favor</div><div class='add'>+     * transparent soundness)</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-                if (!masteri || !slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "delete") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_DELETE;</div><div class='add'>+    if (masteri &amp;&amp; gsyncd_url_check(words[masteri]))</div><div class='add'>+        goto out;</div><div class='add'>+    if (slavei &amp;&amp; !glob &amp;&amp; !gsyncd_url_check(words[slavei]))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (!masteri || !slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "pause") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_PAUSE;</div><div class='add'>+    w = str_getunamb(words[cmdi], opwords);</div><div class='add'>+    if (!w)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (!masteri || !slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (w, "resume") == 0) {</div><div class='del'>-                type = GF_GSYNC_OPTION_TYPE_RESUME;</div><div class='add'>+    if (strcmp(w, "create") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_CREATE;</div><div class='add'>+</div><div class='add'>+        if (!masteri || !slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "status") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_STATUS;</div><div class='add'>+</div><div class='add'>+        if (slavei &amp;&amp; !masteri)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "config") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_CONFIG;</div><div class='add'>+</div><div class='add'>+        if (!slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "start") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_START;</div><div class='add'>+</div><div class='add'>+        if (!masteri || !slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "stop") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_STOP;</div><div class='add'>+</div><div class='add'>+        if (!masteri || !slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "delete") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_DELETE;</div><div class='add'>+</div><div class='add'>+        if (!masteri || !slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "pause") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_PAUSE;</div><div class='add'>+</div><div class='add'>+        if (!masteri || !slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(w, "resume") == 0) {</div><div class='add'>+        type = GF_GSYNC_OPTION_TYPE_RESUME;</div><div class='add'>+</div><div class='add'>+        if (!masteri || !slavei)</div><div class='add'>+            goto out;</div><div class='add'>+    } else</div><div class='add'>+        GF_ASSERT(!"opword mismatch");</div><div class='add'>+</div><div class='add'>+    ret = force_push_pem_no_verify_parse(words, wordcount, dict, &amp;cmdi);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (!masteri || !slavei)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else</div><div class='del'>-                GF_ASSERT (!"opword mismatch");</div><div class='add'>+    if (strtail("detail", (char *)words[wordcount - 1])) {</div><div class='add'>+        if (!strtail("status", (char *)words[wordcount - 2])) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = force_push_pem_no_verify_parse (words, wordcount, dict, &amp;cmdi);</div><div class='add'>+        ret = dict_set_uint32(dict, "status-detail", _gf_true);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (strtail ("detail", (char *)words[wordcount-1])) {</div><div class='del'>-                if (!strtail ("status", (char *)words[wordcount-2])) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_uint32 (dict, "status-detail", _gf_true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cmdi++;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+        cmdi++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (type == GF_GSYNC_OPTION_TYPE_DELETE &amp;&amp;</div><div class='del'>-            !strcmp ((char *)words[wordcount-1], "reset-sync-time")) {</div><div class='del'>-                if (strcmp ((char *)words[wordcount-2], "delete")) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_uint32 (dict, "reset-sync-time", _gf_true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cmdi++;</div><div class='add'>+    if (type == GF_GSYNC_OPTION_TYPE_DELETE &amp;&amp;</div><div class='add'>+        !strcmp((char *)words[wordcount - 1], "reset-sync-time")) {</div><div class='add'>+        if (strcmp((char *)words[wordcount - 2], "delete")) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = dict_set_uint32(dict, "reset-sync-time", _gf_true);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cmdi++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (type != GF_GSYNC_OPTION_TYPE_CONFIG &amp;&amp;</div><div class='del'>-            (cmdi &lt; wordcount - 1 || glob))</div><div class='del'>-                goto out;</div><div class='add'>+    if (type != GF_GSYNC_OPTION_TYPE_CONFIG &amp;&amp; (cmdi &lt; wordcount - 1 || glob))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* If got so far, input is valid, assemble the message */</div><div class='add'>+    /* If got so far, input is valid, assemble the message */</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (masteri) {</div><div class='del'>-                ret = dict_set_str (dict, "master", (char *)words[masteri]);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        ret = dict_set_str (dict, "volname",</div><div class='del'>-                                            (char *)words[masteri]);</div><div class='del'>-        }</div><div class='del'>-        if (!ret &amp;&amp; slavei) {</div><div class='del'>-                /* If geo-rep is created with root user using the syntax</div><div class='del'>-                 * gluster vol geo-rep &lt;mastervol&gt; root@&lt;slavehost&gt; ...</div><div class='del'>-                 * pass down only &lt;slavehost&gt; else pass as it is.</div><div class='del'>-                 */</div><div class='del'>-                slave_temp = gf_strdup (words[slavei]);</div><div class='del'>-                if (slave_temp == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                token = strtok_r (slave_temp, "@", &amp;save_ptr);</div><div class='del'>-                if (token &amp;&amp; !strcmp (token, "root")) {</div><div class='del'>-                        ret = dict_set_str (dict, "slave",</div><div class='del'>-                                            (char *)words[slavei]+5);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dict_set_str (dict, "slave",</div><div class='del'>-                                            (char *)words[slavei]);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (masteri) {</div><div class='add'>+        ret = dict_set_str(dict, "master", (char *)words[masteri]);</div><div class='ctx'>         if (!ret)</div><div class='del'>-                ret = dict_set_int32 (dict, "type", type);</div><div class='del'>-        if (!ret &amp;&amp; type == GF_GSYNC_OPTION_TYPE_CONFIG)</div><div class='del'>-                ret = config_parse (words, wordcount, dict, cmdi, glob);</div><div class='add'>+            ret = dict_set_str(dict, "volname", (char *)words[masteri]);</div><div class='add'>+    }</div><div class='add'>+    if (!ret &amp;&amp; slavei) {</div><div class='add'>+        /* If geo-rep is created with root user using the syntax</div><div class='add'>+         * gluster vol geo-rep &lt;mastervol&gt; root@&lt;slavehost&gt; ...</div><div class='add'>+         * pass down only &lt;slavehost&gt; else pass as it is.</div><div class='add'>+         */</div><div class='add'>+        slave_temp = gf_strdup(words[slavei]);</div><div class='add'>+        if (slave_temp == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        token = strtok_r(slave_temp, "@", &amp;save_ptr);</div><div class='add'>+        if (token &amp;&amp; !strcmp(token, "root")) {</div><div class='add'>+            ret = dict_set_str(dict, "slave", (char *)words[slavei] + 5);</div><div class='add'>+        } else {</div><div class='add'>+            ret = dict_set_str(dict, "slave", (char *)words[slavei]);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (!ret)</div><div class='add'>+        ret = dict_set_int32(dict, "type", type);</div><div class='add'>+    if (!ret &amp;&amp; type == GF_GSYNC_OPTION_TYPE_CONFIG)</div><div class='add'>+        ret = config_parse(words, wordcount, dict, cmdi, glob);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (slave_temp)</div><div class='del'>-                GF_FREE (slave_temp);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        } else</div><div class='del'>-                *options = dict;</div><div class='del'>-</div><div class='add'>+    if (slave_temp)</div><div class='add'>+        GF_FREE(slave_temp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    } else</div><div class='add'>+        *options = dict;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_profile_parse (const char **words, int wordcount,</div><div class='del'>-                              dict_t **options)</div><div class='add'>+cli_cmd_volume_profile_parse(const char **words, int wordcount,</div><div class='add'>+                             dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t              *dict       = NULL;</div><div class='del'>-        char                *volname    = NULL;</div><div class='del'>-        int                 ret         = -1;</div><div class='del'>-        gf1_cli_stats_op    op          = GF_CLI_STATS_NONE;</div><div class='del'>-        gf1_cli_info_op     info_op     = GF_CLI_INFO_NONE;</div><div class='del'>-        gf_boolean_t        is_peek     = _gf_false;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf1_cli_stats_op op = GF_CLI_STATS_NONE;</div><div class='add'>+    gf1_cli_info_op info_op = GF_CLI_INFO_NONE;</div><div class='add'>+    gf_boolean_t is_peek = _gf_false;</div><div class='ctx'> </div><div class='del'>-        char      *opwords[] = { "start", "stop", "info", NULL };</div><div class='del'>-        char      *w = NULL;</div><div class='add'>+    char *opwords[] = {"start", "stop", "info", NULL};</div><div class='add'>+    char *w = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 4)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 4)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[3], opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    w = str_getunamb(words[3], opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((strcmp (w, "start") == 0 || strcmp (w, "stop") == 0) &amp;&amp;</div><div class='del'>-            wordcount &gt; 5)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((strcmp(w, "start") == 0 || strcmp(w, "stop") == 0) &amp;&amp; wordcount &gt; 5)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "info") == 0 &amp;&amp; wordcount &gt; 7)</div><div class='del'>-                goto out;</div><div class='add'>+    if (strcmp(w, "info") == 0 &amp;&amp; wordcount &gt; 7)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "start") == 0) {</div><div class='del'>-                op = GF_CLI_STATS_START;</div><div class='del'>-        } else if (strcmp (w, "stop") == 0) {</div><div class='del'>-                op = GF_CLI_STATS_STOP;</div><div class='del'>-        } else if (strcmp (w, "info") == 0) {</div><div class='del'>-                op = GF_CLI_STATS_INFO;</div><div class='del'>-                info_op = GF_CLI_INFO_ALL;</div><div class='del'>-                if (wordcount &gt; 4) {</div><div class='del'>-                        if (strcmp (words[4], "incremental") == 0) {</div><div class='del'>-                                info_op = GF_CLI_INFO_INCREMENTAL;</div><div class='del'>-                                if (wordcount &gt; 5 &amp;&amp;</div><div class='del'>-                                    strcmp (words[5], "peek") == 0) {</div><div class='del'>-                                        is_peek = _gf_true;</div><div class='del'>-                                }</div><div class='del'>-                        } else if (strcmp (words[4], "cumulative") == 0) {</div><div class='del'>-                                info_op = GF_CLI_INFO_CUMULATIVE;</div><div class='del'>-                        } else if (strcmp (words[4], "clear") == 0) {</div><div class='del'>-                                info_op = GF_CLI_INFO_CLEAR;</div><div class='del'>-                        } else if (strcmp (words[4], "peek") == 0) {</div><div class='del'>-                                is_peek = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else</div><div class='del'>-                GF_ASSERT (!"opword mismatch");</div><div class='add'>+    if (strcmp(w, "start") == 0) {</div><div class='add'>+        op = GF_CLI_STATS_START;</div><div class='add'>+    } else if (strcmp(w, "stop") == 0) {</div><div class='add'>+        op = GF_CLI_STATS_STOP;</div><div class='add'>+    } else if (strcmp(w, "info") == 0) {</div><div class='add'>+        op = GF_CLI_STATS_INFO;</div><div class='add'>+        info_op = GF_CLI_INFO_ALL;</div><div class='add'>+        if (wordcount &gt; 4) {</div><div class='add'>+            if (strcmp(words[4], "incremental") == 0) {</div><div class='add'>+                info_op = GF_CLI_INFO_INCREMENTAL;</div><div class='add'>+                if (wordcount &gt; 5 &amp;&amp; strcmp(words[5], "peek") == 0) {</div><div class='add'>+                    is_peek = _gf_true;</div><div class='add'>+                }</div><div class='add'>+            } else if (strcmp(words[4], "cumulative") == 0) {</div><div class='add'>+                info_op = GF_CLI_INFO_CUMULATIVE;</div><div class='add'>+            } else if (strcmp(words[4], "clear") == 0) {</div><div class='add'>+                info_op = GF_CLI_INFO_CLEAR;</div><div class='add'>+            } else if (strcmp(words[4], "peek") == 0) {</div><div class='add'>+                is_peek = _gf_true;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else</div><div class='add'>+        GF_ASSERT(!"opword mismatch");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "op", (int32_t)op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "op", (int32_t)op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "info-op", (int32_t)info_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "info-op", (int32_t)info_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "peek", is_peek);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "peek", is_peek);</div><div class='add'>+    if (!strcmp(words[wordcount - 1], "nfs")) {</div><div class='add'>+        ret = dict_set_int32(dict, "nfs", _gf_true);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!strcmp (words[wordcount - 1], "nfs")) {</div><div class='del'>-                ret = dict_set_int32 (dict, "nfs", _gf_true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_volume_top_parse (const char **words, int wordcount,</div><div class='del'>-                              dict_t **options)</div><div class='add'>+cli_cmd_volume_top_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict           = NULL;</div><div class='del'>-        char    *volname        = NULL;</div><div class='del'>-        char    *value          = NULL;</div><div class='del'>-        char    *key            = NULL;</div><div class='del'>-        int      ret            = -1;</div><div class='del'>-        gf1_cli_stats_op op = GF_CLI_STATS_NONE;</div><div class='del'>-        gf1_cli_top_op    top_op = GF_CLI_TOP_NONE;</div><div class='del'>-        int32_t  list_cnt       = -1;</div><div class='del'>-        int      index          = 0;</div><div class='del'>-        int      perf           = 0;</div><div class='del'>-        int32_t  blk_size       = 0;</div><div class='del'>-        int      count          = 0;</div><div class='del'>-        gf_boolean_t nfs        = _gf_false;</div><div class='del'>-        char    *delimiter      = NULL;</div><div class='del'>-        char    *opwords[]      = { "open", "read", "write", "opendir",</div><div class='del'>-                                    "readdir", "read-perf", "write-perf",</div><div class='del'>-                                    "clear", NULL };</div><div class='del'>-        char    *w = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf1_cli_stats_op op = GF_CLI_STATS_NONE;</div><div class='add'>+    gf1_cli_top_op top_op = GF_CLI_TOP_NONE;</div><div class='add'>+    int32_t list_cnt = -1;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int perf = 0;</div><div class='add'>+    int32_t blk_size = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    gf_boolean_t nfs = _gf_false;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    char *opwords[] = {"open",      "read",       "write", "opendir", "readdir",</div><div class='add'>+                       "read-perf", "write-perf", "clear", NULL};</div><div class='add'>+    char *w = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 4)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 4)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        op = GF_CLI_STATS_TOP;</div><div class='del'>-        ret = dict_set_int32 (dict, "op", (int32_t)op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    op = GF_CLI_STATS_TOP;</div><div class='add'>+    ret = dict_set_int32(dict, "op", (int32_t)op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[3], opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    w = str_getunamb(words[3], opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (strcmp(w, "open") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_OPEN;</div><div class='add'>+    } else if (strcmp(w, "read") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_READ;</div><div class='add'>+    } else if (strcmp(w, "write") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_WRITE;</div><div class='add'>+    } else if (strcmp(w, "opendir") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_OPENDIR;</div><div class='add'>+    } else if (strcmp(w, "readdir") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_READDIR;</div><div class='add'>+    } else if (strcmp(w, "read-perf") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_READ_PERF;</div><div class='add'>+        perf = 1;</div><div class='add'>+    } else if (strcmp(w, "write-perf") == 0) {</div><div class='add'>+        top_op = GF_CLI_TOP_WRITE_PERF;</div><div class='add'>+        perf = 1;</div><div class='add'>+    } else if (strcmp(w, "clear") == 0) {</div><div class='add'>+        ret = dict_set_int32(dict, "clear-stats", 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not set clear-stats in dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        if (strcmp (w, "open") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_OPEN;</div><div class='del'>-        } else if (strcmp (w, "read") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_READ;</div><div class='del'>-        } else if (strcmp (w, "write") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_WRITE;</div><div class='del'>-        } else if (strcmp (w, "opendir") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_OPENDIR;</div><div class='del'>-        } else if (strcmp (w, "readdir") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_READDIR;</div><div class='del'>-        } else if (strcmp (w, "read-perf") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_READ_PERF;</div><div class='del'>-                perf = 1;</div><div class='del'>-        } else if (strcmp (w, "write-perf") == 0) {</div><div class='del'>-                top_op = GF_CLI_TOP_WRITE_PERF;</div><div class='del'>-                perf = 1;</div><div class='del'>-        } else if (strcmp (w, "clear") == 0) {</div><div class='del'>-                ret = dict_set_int32 (dict, "clear-stats", 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Could not set clear-stats in dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else</div><div class='del'>-                GF_ASSERT (!"opword mismatch");</div><div class='del'>-        ret = dict_set_int32 (dict, "top-op", (int32_t)top_op);</div><div class='add'>+    } else</div><div class='add'>+        GF_ASSERT(!"opword mismatch");</div><div class='add'>+    ret = dict_set_int32(dict, "top-op", (int32_t)top_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if ((wordcount &gt; 4) &amp;&amp; !strcmp(words[4], "nfs")) {</div><div class='add'>+        nfs = _gf_true;</div><div class='add'>+        ret = dict_set_int32(dict, "nfs", nfs);</div><div class='ctx'>         if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        index = 5;</div><div class='add'>+    } else {</div><div class='add'>+        index = 4;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (; index &lt; wordcount; index += 2) {</div><div class='add'>+        key = (char *)words[index];</div><div class='add'>+        value = (char *)words[index + 1];</div><div class='add'>+</div><div class='add'>+        if (!key || !value) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (!strcmp(key, "brick")) {</div><div class='add'>+            delimiter = strchr(value, ':');</div><div class='add'>+            if (!delimiter || delimiter == value || *(delimiter + 1) != '/') {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+                    "&lt;export-dir-abs-path&gt;",</div><div class='add'>+                    value);</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        if ((wordcount &gt; 4) &amp;&amp; !strcmp (words[4], "nfs")) {</div><div class='del'>-                nfs = _gf_true;</div><div class='del'>-                ret = dict_set_int32 (dict, "nfs", nfs);</div><div class='add'>+            } else {</div><div class='add'>+                ret = gf_canonicalize_path(delimiter + 1);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                index = 5;</div><div class='del'>-        } else {</div><div class='del'>-                index = 4;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (; index &lt; wordcount; index+=2) {</div><div class='del'>-</div><div class='del'>-                key = (char *) words[index];</div><div class='del'>-                value = (char *) words[index+1];</div><div class='del'>-</div><div class='del'>-                if (!key || !value) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (!strcmp (key, "brick")) {</div><div class='del'>-                        delimiter = strchr (value, ':');</div><div class='del'>-                        if (!delimiter || delimiter == value</div><div class='del'>-                            || *(delimiter+1) != '/') {</div><div class='del'>-                                cli_err ("wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                                         "&lt;export-dir-abs-path&gt;", value);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_str (dict, "brick", value);</div><div class='del'>-</div><div class='del'>-                } else if (!strcmp (key, "list-cnt")) {</div><div class='del'>-                        ret = gf_is_str_int (value);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                list_cnt = atoi (value);</div><div class='del'>-                        if (ret || (list_cnt &lt; 0) || (list_cnt &gt; 100)) {</div><div class='del'>-                                cli_err ("list-cnt should be between 0 to 100");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else if (perf &amp;&amp; !nfs &amp;&amp; !strcmp (key, "bs")) {</div><div class='del'>-                        ret = gf_is_str_int (value);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                blk_size = atoi (value);</div><div class='del'>-                        if (ret || (blk_size &lt;= 0)) {</div><div class='del'>-                                if (blk_size &lt; 0)</div><div class='del'>-                                        cli_err ("block size is an invalid"</div><div class='del'>-                                                 " number");</div><div class='del'>-                                else</div><div class='del'>-                                        cli_err ("block size should be an "</div><div class='del'>-                                                 "integer greater than zero");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_uint32 (dict, "blk-size",</div><div class='del'>-                                                        (uint32_t)blk_size);</div><div class='del'>-                } else if (perf &amp;&amp; !nfs &amp;&amp; !strcmp (key, "count")) {</div><div class='del'>-                        ret = gf_is_str_int (value);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                count = atoi(value);</div><div class='del'>-                        if (ret || (count &lt;= 0)) {</div><div class='del'>-                                if (count &lt; 0)</div><div class='del'>-                                        cli_err ("count is an invalid number");</div><div class='del'>-                                else</div><div class='del'>-                                        cli_err ("count should be an integer "</div><div class='del'>-                                                 "greater than zero");</div><div class='del'>-</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_uint32 (dict, "blk-cnt", count);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_WARNING, "Dict set failed for "</div><div class='del'>-                                "key %s", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (list_cnt == -1)</div><div class='del'>-                list_cnt = 100;</div><div class='del'>-        ret = dict_set_int32 (dict, "list-cnt", list_cnt);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING, "Dict set failed for list_cnt");</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_str(dict, "brick", value);</div><div class='add'>+</div><div class='add'>+        } else if (!strcmp(key, "list-cnt")) {</div><div class='add'>+            ret = gf_is_str_int(value);</div><div class='add'>+            if (!ret)</div><div class='add'>+                list_cnt = atoi(value);</div><div class='add'>+            if (ret || (list_cnt &lt; 0) || (list_cnt &gt; 100)) {</div><div class='add'>+                cli_err("list-cnt should be between 0 to 100");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((blk_size &gt; 0) ^ (count &gt; 0)) {</div><div class='del'>-                cli_err ("Need to give both 'bs' and 'count'");</div><div class='add'>+            }</div><div class='add'>+        } else if (perf &amp;&amp; !nfs &amp;&amp; !strcmp(key, "bs")) {</div><div class='add'>+            ret = gf_is_str_int(value);</div><div class='add'>+            if (!ret)</div><div class='add'>+                blk_size = atoi(value);</div><div class='add'>+            if (ret || (blk_size &lt;= 0)) {</div><div class='add'>+                if (blk_size &lt; 0)</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "block size is an invalid"</div><div class='add'>+                        " number");</div><div class='add'>+                else</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "block size should be an "</div><div class='add'>+                        "integer greater than zero");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        } else if (((uint64_t)blk_size * count) &gt; (10 * GF_UNIT_GB)) {</div><div class='del'>-                cli_err ("'bs * count' value %"PRIu64" is greater than "</div><div class='del'>-                         "maximum allowed value of 10GB",</div><div class='del'>-                         ((uint64_t)blk_size * count));</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_uint32(dict, "blk-size", (uint32_t)blk_size);</div><div class='add'>+        } else if (perf &amp;&amp; !nfs &amp;&amp; !strcmp(key, "count")) {</div><div class='add'>+            ret = gf_is_str_int(value);</div><div class='add'>+            if (!ret)</div><div class='add'>+                count = atoi(value);</div><div class='add'>+            if (ret || (count &lt;= 0)) {</div><div class='add'>+                if (count &lt; 0)</div><div class='add'>+                    cli_err("count is an invalid number");</div><div class='add'>+                else</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "count should be an integer "</div><div class='add'>+                        "greater than zero");</div><div class='add'>+</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_uint32(dict, "blk-cnt", count);</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("", GF_LOG_WARNING,</div><div class='add'>+                   "Dict set failed for "</div><div class='add'>+                   "key %s",</div><div class='add'>+                   key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (list_cnt == -1)</div><div class='add'>+        list_cnt = 100;</div><div class='add'>+    ret = dict_set_int32(dict, "list-cnt", list_cnt);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "Dict set failed for list_cnt");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    if ((blk_size &gt; 0) ^ (count &gt; 0)) {</div><div class='add'>+        cli_err("Need to give both 'bs' and 'count'");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (((uint64_t)blk_size * count) &gt; (10 * GF_UNIT_GB)) {</div><div class='add'>+        cli_err("'bs * count' value %" PRIu64</div><div class='add'>+                " is greater than "</div><div class='add'>+                "maximum allowed value of 10GB",</div><div class='add'>+                ((uint64_t)blk_size * count));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-cli_cmd_get_statusop (const char *arg)</div><div class='add'>+cli_cmd_get_statusop(const char *arg)</div><div class='ctx'> {</div><div class='del'>-        int        i         = 0;</div><div class='del'>-        uint32_t   ret       = GF_CLI_STATUS_NONE;</div><div class='del'>-        char      *w         = NULL;</div><div class='del'>-        char      *opwords[] = {"detail", "mem", "clients", "fd",</div><div class='del'>-                                "inode", "callpool", "tasks", "client-list",</div><div class='del'>-                                NULL};</div><div class='del'>-        struct {</div><div class='del'>-                char      *opname;</div><div class='del'>-                uint32_t   opcode;</div><div class='del'>-        } optable[] = {</div><div class='del'>-                { "detail",   GF_CLI_STATUS_DETAIL   },</div><div class='del'>-                { "mem",      GF_CLI_STATUS_MEM      },</div><div class='del'>-                { "clients",  GF_CLI_STATUS_CLIENTS  },</div><div class='del'>-                { "fd",       GF_CLI_STATUS_FD       },</div><div class='del'>-                { "inode",    GF_CLI_STATUS_INODE    },</div><div class='del'>-                { "callpool", GF_CLI_STATUS_CALLPOOL },</div><div class='del'>-                { "tasks",    GF_CLI_STATUS_TASKS    },</div><div class='del'>-                { "client-list",  GF_CLI_STATUS_CLIENT_LIST },</div><div class='del'>-                { NULL }</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        w = str_getunamb (arg, opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                        "Not a status op  %s", arg);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t ret = GF_CLI_STATUS_NONE;</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    char *opwords[] = {"detail",   "mem",   "clients",     "fd", "inode",</div><div class='add'>+                       "callpool", "tasks", "client-list", NULL};</div><div class='add'>+    struct {</div><div class='add'>+        char *opname;</div><div class='add'>+        uint32_t opcode;</div><div class='add'>+    } optable[] = {{"detail", GF_CLI_STATUS_DETAIL},</div><div class='add'>+                   {"mem", GF_CLI_STATUS_MEM},</div><div class='add'>+                   {"clients", GF_CLI_STATUS_CLIENTS},</div><div class='add'>+                   {"fd", GF_CLI_STATUS_FD},</div><div class='add'>+                   {"inode", GF_CLI_STATUS_INODE},</div><div class='add'>+                   {"callpool", GF_CLI_STATUS_CALLPOOL},</div><div class='add'>+                   {"tasks", GF_CLI_STATUS_TASKS},</div><div class='add'>+                   {"client-list", GF_CLI_STATUS_CLIENT_LIST},</div><div class='add'>+                   {NULL}};</div><div class='add'>+</div><div class='add'>+    w = str_getunamb(arg, opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG, "Not a status op  %s", arg);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; optable[i].opname; i++) {</div><div class='del'>-                if (!strcmp (w, optable[i].opname)) {</div><div class='del'>-                        ret = optable[i].opcode;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; optable[i].opname; i++) {</div><div class='add'>+        if (!strcmp(w, optable[i].opname)) {</div><div class='add'>+            ret = optable[i].opcode;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_status_parse (const char **words, int wordcount,</div><div class='del'>-                             dict_t **options)</div><div class='add'>+cli_cmd_volume_status_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t    *dict            = NULL;</div><div class='del'>-        int        ret             = -1;</div><div class='del'>-        uint32_t   cmd             = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        switch (wordcount) {</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    switch (wordcount) {</div><div class='ctx'>         case 2:</div><div class='del'>-                cmd = GF_CLI_STATUS_ALL;</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            cmd = GF_CLI_STATUS_ALL;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case 3:</div><div class='del'>-                if (!strcmp (words[2], "all")) {</div><div class='del'>-                        cmd = GF_CLI_STATUS_ALL;</div><div class='del'>-                        ret = 0;</div><div class='add'>+            if (!strcmp(words[2], "all")) {</div><div class='add'>+                cmd = GF_CLI_STATUS_ALL;</div><div class='add'>+                ret = 0;</div><div class='ctx'> </div><div class='del'>-                } else {</div><div class='del'>-                        cmd = GF_CLI_STATUS_VOL;</div><div class='del'>-                        ret = dict_set_str (dict, "volname", (char *)words[2]);</div><div class='del'>-                }</div><div class='add'>+            } else {</div><div class='add'>+                cmd = GF_CLI_STATUS_VOL;</div><div class='add'>+                ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case 4:</div><div class='del'>-                cmd = cli_cmd_get_statusop (words[3]);</div><div class='del'>-</div><div class='del'>-                if (!strcmp (words[2], "all")) {</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_NONE) {</div><div class='del'>-                                cli_err ("%s is not a valid status option",</div><div class='del'>-                                         words[3]);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cmd |= GF_CLI_STATUS_ALL;</div><div class='del'>-                        ret  = 0;</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dict_set_str (dict, "volname",</div><div class='del'>-                                            (char *)words[2]);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_NONE) {</div><div class='del'>-                                if (!strcmp (words[3], "nfs")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_NFS;</div><div class='del'>-                                } else if (!strcmp (words[3], "shd")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_SHD;</div><div class='del'>-                                } else if (!strcmp (words[3], "quotad")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_QUOTAD;</div><div class='del'>-                                } else if (!strcmp (words[3], "snapd")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_SNAPD;</div><div class='del'>-                                } else if (!strcmp (words[3], "tierd")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_TIERD;</div><div class='del'>-                                } else if (!strcmp (words[3], "bitd")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_BITD;</div><div class='del'>-                                } else if (!strcmp (words[3], "scrub")) {</div><div class='del'>-                                        cmd |= GF_CLI_STATUS_SCRUB;</div><div class='del'>-                                } else {</div><div class='del'>-                                        cmd = GF_CLI_STATUS_BRICK;</div><div class='del'>-                                        ret = dict_set_str (dict, "brick",</div><div class='del'>-                                                            (char *)words[3]);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                        } else {</div><div class='del'>-                                cmd |= GF_CLI_STATUS_VOL;</div><div class='del'>-                                ret  = 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case 5:</div><div class='del'>-                if (!strcmp (words[2], "all")) {</div><div class='del'>-                        cli_err ("Cannot specify brick/nfs for \"all\"");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            cmd = cli_cmd_get_statusop(words[3]);</div><div class='ctx'> </div><div class='del'>-                cmd = cli_cmd_get_statusop (words[4]);</div><div class='add'>+            if (!strcmp(words[2], "all")) {</div><div class='ctx'>                 if (cmd == GF_CLI_STATUS_NONE) {</div><div class='del'>-                        cli_err ("%s is not a valid status option",</div><div class='del'>-                                 words[4]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+                    cli_err("%s is not a valid status option", words[3]);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                cmd |= GF_CLI_STATUS_ALL;</div><div class='add'>+                ret = 0;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-                ret = dict_set_str (dict, "volname", (char *)words[2]);</div><div class='add'>+            } else {</div><div class='add'>+                ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                if (!strcmp (words[3], "nfs")) {</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_FD ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_DETAIL ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_TASKS) {</div><div class='del'>-                                cli_err ("Detail/FD/Tasks status not available"</div><div class='del'>-                                         " for NFS Servers");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                if (cmd == GF_CLI_STATUS_NONE) {</div><div class='add'>+                    if (!strcmp(words[3], "nfs")) {</div><div class='ctx'>                         cmd |= GF_CLI_STATUS_NFS;</div><div class='del'>-                } else if (!strcmp (words[3], "shd")){</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_FD ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_DETAIL ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_TASKS) {</div><div class='del'>-                                cli_err ("Detail/FD/Clients/Tasks status not "</div><div class='del'>-                                         "available for Self-heal Daemons");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                    } else if (!strcmp(words[3], "shd")) {</div><div class='ctx'>                         cmd |= GF_CLI_STATUS_SHD;</div><div class='del'>-                } else if (!strcmp (words[3], "quotad")) {</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_FD ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_DETAIL ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_INODE) {</div><div class='del'>-                                cli_err ("Detail/FD/Clients/Inode status not "</div><div class='del'>-                                         "available for Quota Daemon");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                    } else if (!strcmp(words[3], "quotad")) {</div><div class='ctx'>                         cmd |= GF_CLI_STATUS_QUOTAD;</div><div class='del'>-                } else if  (!strcmp (words[3], "snapd")) {</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_FD ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_DETAIL ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_INODE) {</div><div class='del'>-                                cli_err ("Detail/FD/Clients/Inode status not "</div><div class='del'>-                                         "available for snap daemon");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                    } else if (!strcmp(words[3], "snapd")) {</div><div class='ctx'>                         cmd |= GF_CLI_STATUS_SNAPD;</div><div class='del'>-                } else if  (!strcmp (words[3], "tierd")) {</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_FD ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_DETAIL ||</div><div class='del'>-                            cmd == GF_CLI_STATUS_INODE) {</div><div class='del'>-                                cli_err ("Detail/FD/Clients/Inode status not "</div><div class='del'>-                                         "available for tier daemon");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                    } else if (!strcmp(words[3], "tierd")) {</div><div class='ctx'>                         cmd |= GF_CLI_STATUS_TIERD;</div><div class='add'>+                    } else if (!strcmp(words[3], "bitd")) {</div><div class='add'>+                        cmd |= GF_CLI_STATUS_BITD;</div><div class='add'>+                    } else if (!strcmp(words[3], "scrub")) {</div><div class='add'>+                        cmd |= GF_CLI_STATUS_SCRUB;</div><div class='add'>+                    } else {</div><div class='add'>+                        cmd = GF_CLI_STATUS_BRICK;</div><div class='add'>+                        ret = dict_set_str(dict, "brick", (char *)words[3]);</div><div class='add'>+                    }</div><div class='add'>+</div><div class='ctx'>                 } else {</div><div class='del'>-                        if (cmd == GF_CLI_STATUS_TASKS) {</div><div class='del'>-                                cli_err ("Tasks status not available for "</div><div class='del'>-                                         "bricks");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cmd |= GF_CLI_STATUS_BRICK;</div><div class='del'>-                        ret = dict_set_str (dict, "brick", (char *)words[3]);</div><div class='add'>+                    cmd |= GF_CLI_STATUS_VOL;</div><div class='add'>+                    ret = 0;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        default:</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='add'>+        case 5:</div><div class='add'>+            if (!strcmp(words[2], "all")) {</div><div class='add'>+                cli_err("Cannot specify brick/nfs for \"all\"");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "cmd", cmd);</div><div class='del'>-        if (ret)</div><div class='add'>+            cmd = cli_cmd_get_statusop(words[4]);</div><div class='add'>+            if (cmd == GF_CLI_STATUS_NONE) {</div><div class='add'>+                cli_err("%s is not a valid status option", words[4]);</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            if (!strcmp(words[3], "nfs")) {</div><div class='add'>+                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_DETAIL ||</div><div class='add'>+                    cmd == GF_CLI_STATUS_TASKS) {</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Detail/FD/Tasks status not available"</div><div class='add'>+                        " for NFS Servers");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cmd |= GF_CLI_STATUS_NFS;</div><div class='add'>+            } else if (!strcmp(words[3], "shd")) {</div><div class='add'>+                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='add'>+                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_TASKS) {</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Detail/FD/Clients/Tasks status not "</div><div class='add'>+                        "available for Self-heal Daemons");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cmd |= GF_CLI_STATUS_SHD;</div><div class='add'>+            } else if (!strcmp(words[3], "quotad")) {</div><div class='add'>+                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='add'>+                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_INODE) {</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Detail/FD/Clients/Inode status not "</div><div class='add'>+                        "available for Quota Daemon");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cmd |= GF_CLI_STATUS_QUOTAD;</div><div class='add'>+            } else if (!strcmp(words[3], "snapd")) {</div><div class='add'>+                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='add'>+                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_INODE) {</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Detail/FD/Clients/Inode status not "</div><div class='add'>+                        "available for snap daemon");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cmd |= GF_CLI_STATUS_SNAPD;</div><div class='add'>+            } else if (!strcmp(words[3], "tierd")) {</div><div class='add'>+                if (cmd == GF_CLI_STATUS_FD || cmd == GF_CLI_STATUS_CLIENTS ||</div><div class='add'>+                    cmd == GF_CLI_STATUS_DETAIL || cmd == GF_CLI_STATUS_INODE) {</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Detail/FD/Clients/Inode status not "</div><div class='add'>+                        "available for tier daemon");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cmd |= GF_CLI_STATUS_TIERD;</div><div class='add'>+            } else {</div><div class='add'>+                if (cmd == GF_CLI_STATUS_TASKS) {</div><div class='add'>+                    cli_err(</div><div class='add'>+                        "Tasks status not available for "</div><div class='add'>+                        "bricks");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cmd |= GF_CLI_STATUS_BRICK;</div><div class='add'>+                ret = dict_set_str(dict, "brick", (char *)words[3]);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+        default:</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "cmd", cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-cli_cmd_validate_dumpoption (const char *arg, char **option)</div><div class='add'>+cli_cmd_validate_dumpoption(const char *arg, char **option)</div><div class='ctx'> {</div><div class='del'>-        char    *opwords[] = {"all", "nfs", "mem", "iobuf", "callpool", "priv",</div><div class='del'>-                              "fd", "inode", "history", "inodectx", "fdctx",</div><div class='del'>-                              "quotad", NULL};</div><div class='del'>-        char    *w = NULL;</div><div class='del'>-</div><div class='del'>-        w = str_getunamb (arg, opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "Unknown statedump option  %s",</div><div class='del'>-                        arg);</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-        *option = w;</div><div class='del'>-        return _gf_true;</div><div class='add'>+    char *opwords[] = {"all",   "nfs",    "mem",   "iobuf",   "callpool",</div><div class='add'>+                       "priv",  "fd",     "inode", "history", "inodectx",</div><div class='add'>+                       "fdctx", "quotad", NULL};</div><div class='add'>+    char *w = NULL;</div><div class='add'>+</div><div class='add'>+    w = str_getunamb(arg, opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG, "Unknown statedump option  %s", arg);</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='add'>+    *option = w;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_statedump_options_parse (const char **words, int wordcount,</div><div class='del'>-                                        dict_t **options)</div><div class='add'>+cli_cmd_volume_statedump_options_parse(const char **words, int wordcount,</div><div class='add'>+                                       dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='del'>-        int     i = 0;</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        int     option_cnt = 0;</div><div class='del'>-        char    *option = NULL;</div><div class='del'>-        char    *option_str = NULL;</div><div class='del'>-        char    *tmp_str = NULL;</div><div class='del'>-        char    *tmp = NULL;</div><div class='del'>-        char    *ip_addr = NULL;</div><div class='del'>-        char    *pid = NULL;</div><div class='del'>-</div><div class='del'>-        if ((wordcount &gt;= 5) &amp;&amp; ((strcmp (words[3], "client")) == 0)) {</div><div class='del'>-                tmp = gf_strdup(words[4]);</div><div class='del'>-                if (!tmp) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ip_addr = strtok(tmp, ":");</div><div class='del'>-                pid = strtok(NULL, ":");</div><div class='del'>-                if (valid_internet_address (ip_addr, _gf_true)</div><div class='del'>-                   &amp;&amp; pid &amp;&amp; gf_valid_pid (pid, strlen(pid))) {</div><div class='del'>-                        ret = gf_asprintf(&amp;option_str, "%s %s %s", words[3],</div><div class='del'>-                                          ip_addr, pid);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        option_cnt = 3;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int option_cnt = 0;</div><div class='add'>+    char *option = NULL;</div><div class='add'>+    char *option_str = NULL;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *ip_addr = NULL;</div><div class='add'>+    char *pid = NULL;</div><div class='add'>+</div><div class='add'>+    if ((wordcount &gt;= 5) &amp;&amp; ((strcmp(words[3], "client")) == 0)) {</div><div class='add'>+        tmp = gf_strdup(words[4]);</div><div class='add'>+        if (!tmp) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ip_addr = strtok(tmp, ":");</div><div class='add'>+        pid = strtok(NULL, ":");</div><div class='add'>+        if (valid_internet_address(ip_addr, _gf_true) &amp;&amp; pid &amp;&amp;</div><div class='add'>+            gf_valid_pid(pid, strlen(pid))) {</div><div class='add'>+            ret = gf_asprintf(&amp;option_str, "%s %s %s", words[3], ip_addr, pid);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            option_cnt = 3;</div><div class='ctx'>         } else {</div><div class='del'>-                for (i = 3; i &lt; wordcount; i++, option_cnt++) {</div><div class='del'>-                        if (!cli_cmd_validate_dumpoption (words[i], &amp;option)) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        tmp_str = option_str;</div><div class='del'>-                        option_str = NULL;</div><div class='del'>-                        ret = gf_asprintf(&amp;option_str, "%s%s ",</div><div class='del'>-                                          tmp_str ? tmp_str : "", option);</div><div class='del'>-                        GF_FREE(tmp_str);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (option_str &amp;&amp;</div><div class='del'>-                    (strstr (option_str, "nfs")) &amp;&amp;</div><div class='del'>-                     strstr (option_str, "quotad")) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='add'>+    } else {</div><div class='add'>+        for (i = 3; i &lt; wordcount; i++, option_cnt++) {</div><div class='add'>+            if (!cli_cmd_validate_dumpoption(words[i], &amp;option)) {</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            tmp_str = option_str;</div><div class='add'>+            option_str = NULL;</div><div class='add'>+            ret = gf_asprintf(&amp;option_str, "%s%s ", tmp_str ? tmp_str : "",</div><div class='add'>+                              option);</div><div class='add'>+            GF_FREE(tmp_str);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (option_str &amp;&amp; (strstr(option_str, "nfs")) &amp;&amp;</div><div class='add'>+            strstr(option_str, "quotad")) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* dynamic string in dict is freed up when dict is freed up, and hence</div><div class='del'>-        if option_str is NULL pass in an duplicate empty string to the same */</div><div class='del'>-        ret = dict_set_dynstr (dict, "options",</div><div class='del'>-                               (option_str ? option_str : gf_strdup("")));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        option_str = NULL;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "option_cnt", option_cnt);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* dynamic string in dict is freed up when dict is freed up, and hence</div><div class='add'>+    if option_str is NULL pass in an duplicate empty string to the same */</div><div class='add'>+    ret = dict_set_dynstr(dict, "options",</div><div class='add'>+                          (option_str ? option_str : gf_strdup("")));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    option_str = NULL;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    ret = dict_set_int32(dict, "option_cnt", option_cnt);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (tmp);</div><div class='del'>-        GF_FREE (option_str);</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Error parsing dumpoptions");</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(tmp);</div><div class='add'>+    GF_FREE(option_str);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Error parsing dumpoptions");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_clrlks_opts_parse (const char **words, int wordcount,</div><div class='del'>-                                  dict_t **options)</div><div class='add'>+cli_cmd_volume_clrlks_opts_parse(const char **words, int wordcount,</div><div class='add'>+                                 dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        int     i = 0;</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        char    *kind_opts[4] = {"blocked", "granted", "all", NULL};</div><div class='del'>-        char    *types[4] = {"inode", "entry", "posix", NULL};</div><div class='del'>-        char    *free_ptr = NULL;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *kind_opts[4] = {"blocked", "granted", "all", NULL};</div><div class='add'>+    char *types[4] = {"inode", "entry", "posix", NULL};</div><div class='add'>+    char *free_ptr = NULL;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words[4], "kind"))</div><div class='del'>-                goto out;</div><div class='add'>+    if (strcmp(words[4], "kind"))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; kind_opts[i]; i++) {</div><div class='del'>-               if (!strcmp (words[5], kind_opts[i])) {</div><div class='del'>-                       free_ptr = gf_strdup (words[5]);</div><div class='del'>-                       ret = dict_set_dynstr (dict, "kind", free_ptr);</div><div class='del'>-                       if (ret)</div><div class='del'>-                               goto out;</div><div class='del'>-                       free_ptr = NULL;</div><div class='del'>-                       break;</div><div class='del'>-               }</div><div class='del'>-        }</div><div class='del'>-        if (i == 3)</div><div class='add'>+    for (i = 0; kind_opts[i]; i++) {</div><div class='add'>+        if (!strcmp(words[5], kind_opts[i])) {</div><div class='add'>+            free_ptr = gf_strdup(words[5]);</div><div class='add'>+            ret = dict_set_dynstr(dict, "kind", free_ptr);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='add'>+            free_ptr = NULL;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (i == 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='del'>-        for (i = 0; types[i]; i++) {</div><div class='del'>-               if (!strcmp (words[6], types[i])) {</div><div class='del'>-                       free_ptr = gf_strdup (words[6]);</div><div class='del'>-                       ret = dict_set_dynstr (dict, "type", free_ptr);</div><div class='del'>-                       if (ret)</div><div class='del'>-                               goto out;</div><div class='del'>-                       free_ptr = NULL;</div><div class='del'>-                       break;</div><div class='del'>-               }</div><div class='del'>-        }</div><div class='del'>-        if (i == 3)</div><div class='add'>+    ret = -1;</div><div class='add'>+    for (i = 0; types[i]; i++) {</div><div class='add'>+        if (!strcmp(words[6], types[i])) {</div><div class='add'>+            free_ptr = gf_strdup(words[6]);</div><div class='add'>+            ret = dict_set_dynstr(dict, "type", free_ptr);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount == 8) {</div><div class='del'>-                free_ptr = gf_strdup (words[7]);</div><div class='del'>-                ret = dict_set_dynstr (dict, "opts", free_ptr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                free_ptr = NULL;</div><div class='add'>+            free_ptr = NULL;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    if (i == 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        *options = dict;</div><div class='add'>+    if (wordcount == 8) {</div><div class='add'>+        free_ptr = gf_strdup(words[7]);</div><div class='add'>+        ret = dict_set_dynstr(dict, "opts", free_ptr);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        free_ptr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-       if (ret) {</div><div class='del'>-               GF_FREE (free_ptr);</div><div class='del'>-               dict_unref (dict);</div><div class='del'>-       }</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(free_ptr);</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-       return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-extract_hostname_path_from_token (const char *tmp_words, char **hostname,</div><div class='del'>-                                  char **path)</div><div class='add'>+extract_hostname_path_from_token(const char *tmp_words, char **hostname,</div><div class='add'>+                                 char **path)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *delimiter = NULL;</div><div class='del'>-        char *tmp_host = NULL;</div><div class='del'>-        char *host_name = NULL;</div><div class='del'>-        char *words = NULL;</div><div class='del'>-        int str_len = 0;</div><div class='del'>-        *hostname = NULL;</div><div class='del'>-        *path = NULL;</div><div class='del'>-</div><div class='del'>-        str_len = strlen (tmp_words) + 1;</div><div class='del'>-        words = GF_MALLOC (str_len, gf_common_mt_char);</div><div class='del'>-        if (!words){</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    char *tmp_host = NULL;</div><div class='add'>+    char *host_name = NULL;</div><div class='add'>+    char *words = NULL;</div><div class='add'>+    int str_len = 0;</div><div class='add'>+    *hostname = NULL;</div><div class='add'>+    *path = NULL;</div><div class='add'>+</div><div class='add'>+    str_len = strlen(tmp_words) + 1;</div><div class='add'>+    words = GF_MALLOC(str_len, gf_common_mt_char);</div><div class='add'>+    if (!words) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (words, str_len, "%s", tmp_words);</div><div class='add'>+    snprintf(words, str_len, "%s", tmp_words);</div><div class='ctx'> </div><div class='del'>-        if (validate_brick_name (words)) {</div><div class='del'>-                cli_err ("Wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='del'>-                        "&lt;export-dir-abs-path&gt;", words);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    if (validate_brick_name(words)) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "Wrong brick type: %s, use &lt;HOSTNAME&gt;:"</div><div class='add'>+            "&lt;export-dir-abs-path&gt;",</div><div class='add'>+            words);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        delimiter = strrchr(words, ':');</div><div class='add'>+        ret = gf_canonicalize_path(delimiter + 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='ctx'>         } else {</div><div class='del'>-                delimiter = strrchr (words, ':');</div><div class='del'>-                ret = gf_canonicalize_path (delimiter + 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        str_len = strlen (delimiter + 1) + 1;</div><div class='del'>-                        *path = GF_MALLOC (str_len,</div><div class='del'>-                                           gf_common_mt_char);</div><div class='del'>-                        if (!*path) {</div><div class='del'>-                           ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                        snprintf (*path, str_len, "%s", delimiter +1);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tmp_host = gf_strdup (words);</div><div class='del'>-        if (!tmp_host) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Out of memory");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        get_host_name (tmp_host, &amp;host_name);</div><div class='del'>-        if (!host_name) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log("cli",GF_LOG_ERROR, "Unable to allocate "</div><div class='del'>-                        "memory");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!(strcmp (host_name, "localhost") &amp;&amp;</div><div class='del'>-            strcmp (host_name, "127.0.0.1") &amp;&amp;</div><div class='del'>-            strncmp (host_name, "0.", 2))) {</div><div class='del'>-                cli_err ("Please provide a valid hostname/ip other "</div><div class='del'>-                         "than localhost, 127.0.0.1 or loopback "</div><div class='del'>-                         "address (0.0.0.0 to 0.255.255.255).");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!valid_internet_address (host_name, _gf_false)) {</div><div class='del'>-                cli_err ("internet address '%s' does not conform to "</div><div class='del'>-                          "standards", host_name);</div><div class='add'>+            str_len = strlen(delimiter + 1) + 1;</div><div class='add'>+            *path = GF_MALLOC(str_len, gf_common_mt_char);</div><div class='add'>+            if (!*path) {</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            snprintf(*path, str_len, "%s", delimiter + 1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        str_len = strlen (host_name) + 1;</div><div class='del'>-        *hostname = GF_MALLOC (str_len, gf_common_mt_char);</div><div class='del'>-        if (!*hostname) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        snprintf (*hostname, str_len, "%s", host_name);</div><div class='del'>-        ret = 0;</div><div class='add'>+    tmp_host = gf_strdup(words);</div><div class='add'>+    if (!tmp_host) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Out of memory");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    get_host_name(tmp_host, &amp;host_name);</div><div class='add'>+    if (!host_name) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Unable to allocate "</div><div class='add'>+               "memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!(strcmp(host_name, "localhost") &amp;&amp; strcmp(host_name, "127.0.0.1") &amp;&amp;</div><div class='add'>+          strncmp(host_name, "0.", 2))) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "Please provide a valid hostname/ip other "</div><div class='add'>+            "than localhost, 127.0.0.1 or loopback "</div><div class='add'>+            "address (0.0.0.0 to 0.255.255.255).");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!valid_internet_address(host_name, _gf_false)) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "internet address '%s' does not conform to "</div><div class='add'>+            "standards",</div><div class='add'>+            host_name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    str_len = strlen(host_name) + 1;</div><div class='add'>+    *hostname = GF_MALLOC(str_len, gf_common_mt_char);</div><div class='add'>+    if (!*hostname) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    snprintf(*hostname, str_len, "%s", host_name);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (words);</div><div class='del'>-        GF_FREE (tmp_host);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(words);</div><div class='add'>+    GF_FREE(tmp_host);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-set_hostname_path_in_dict (const char *token, dict_t *dict, int heal_op)</div><div class='add'>+set_hostname_path_in_dict(const char *token, dict_t *dict, int heal_op)</div><div class='ctx'> {</div><div class='del'>-        char *hostname = NULL;</div><div class='del'>-        char *path     = NULL;</div><div class='del'>-        int   ret      = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = extract_hostname_path_from_token (token, &amp;hostname, &amp;path);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = extract_hostname_path_from_token(token, &amp;hostname, &amp;path);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        switch (heal_op) {</div><div class='add'>+    switch (heal_op) {</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='del'>-                ret = dict_set_dynstr (dict, "heal-source-hostname",</div><div class='del'>-                                       hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                hostname = NULL;</div><div class='del'>-                ret = dict_set_dynstr (dict, "heal-source-brickpath",</div><div class='del'>-                                       path);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                path = NULL;</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_dynstr(dict, "heal-source-hostname", hostname);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            hostname = NULL;</div><div class='add'>+            ret = dict_set_dynstr(dict, "heal-source-brickpath", path);</div><div class='add'>+            if (ret) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            path = NULL;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA:</div><div class='del'>-                ret = dict_set_dynstr (dict, "per-replica-cmd-hostname",</div><div class='del'>-                                       hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                hostname = NULL;</div><div class='del'>-                ret = dict_set_dynstr (dict, "per-replica-cmd-path",</div><div class='del'>-                                       path);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                path = NULL;</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_dynstr(dict, "per-replica-cmd-hostname", hostname);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            hostname = NULL;</div><div class='add'>+            ret = dict_set_dynstr(dict, "per-replica-cmd-path", path);</div><div class='add'>+            if (ret) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            path = NULL;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE(hostname);</div><div class='del'>-        GF_FREE(path);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(hostname);</div><div class='add'>+    GF_FREE(path);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-heal_command_type_get (const char *command)</div><div class='add'>+heal_command_type_get(const char *command)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-        /* subcommands are set as NULL */</div><div class='del'>-        char    *heal_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = {</div><div class='del'>-                [GF_SHD_OP_INVALID]                            = NULL,</div><div class='del'>-                [GF_SHD_OP_HEAL_INDEX]                         = NULL,</div><div class='del'>-                [GF_SHD_OP_HEAL_FULL]                          = "full",</div><div class='del'>-                [GF_SHD_OP_INDEX_SUMMARY]                      = "info",</div><div class='del'>-                [GF_SHD_OP_HEALED_FILES]                       = NULL,</div><div class='del'>-                [GF_SHD_OP_HEAL_FAILED_FILES]                  = NULL,</div><div class='del'>-                [GF_SHD_OP_SPLIT_BRAIN_FILES]                  = NULL,</div><div class='del'>-                [GF_SHD_OP_STATISTICS]                         = "statistics",</div><div class='del'>-                [GF_SHD_OP_STATISTICS_HEAL_COUNT]              = NULL,</div><div class='del'>-                [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA]  = NULL,</div><div class='del'>-                [GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE]       = NULL,</div><div class='del'>-                [GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK]             = NULL,</div><div class='del'>-                [GF_SHD_OP_HEAL_ENABLE]                        = "enable",</div><div class='del'>-                [GF_SHD_OP_HEAL_DISABLE]                       = "disable",</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt;= GF_SHD_OP_HEAL_DISABLE; i++) {</div><div class='del'>-                if (heal_cmds[i] &amp;&amp; (strcmp (heal_cmds[i], command) == 0))</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return GF_SHD_OP_INVALID;</div><div class='add'>+    int i = 0;</div><div class='add'>+    /* subcommands are set as NULL */</div><div class='add'>+    char *heal_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = {</div><div class='add'>+        [GF_SHD_OP_INVALID] = NULL,</div><div class='add'>+        [GF_SHD_OP_HEAL_INDEX] = NULL,</div><div class='add'>+        [GF_SHD_OP_HEAL_FULL] = "full",</div><div class='add'>+        [GF_SHD_OP_INDEX_SUMMARY] = "info",</div><div class='add'>+        [GF_SHD_OP_HEALED_FILES] = NULL,</div><div class='add'>+        [GF_SHD_OP_HEAL_FAILED_FILES] = NULL,</div><div class='add'>+        [GF_SHD_OP_SPLIT_BRAIN_FILES] = NULL,</div><div class='add'>+        [GF_SHD_OP_STATISTICS] = "statistics",</div><div class='add'>+        [GF_SHD_OP_STATISTICS_HEAL_COUNT] = NULL,</div><div class='add'>+        [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA] = NULL,</div><div class='add'>+        [GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE] = NULL,</div><div class='add'>+        [GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK] = NULL,</div><div class='add'>+        [GF_SHD_OP_HEAL_ENABLE] = "enable",</div><div class='add'>+        [GF_SHD_OP_HEAL_DISABLE] = "disable",</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt;= GF_SHD_OP_HEAL_DISABLE; i++) {</div><div class='add'>+        if (heal_cmds[i] &amp;&amp; (strcmp(heal_cmds[i], command) == 0))</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return GF_SHD_OP_INVALID;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_heal_options_parse (const char **words, int wordcount,</div><div class='del'>-                                   dict_t **options)</div><div class='add'>+cli_cmd_volume_heal_options_parse(const char **words, int wordcount,</div><div class='add'>+                                  dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='del'>-        dict_t  *dict = NULL;</div><div class='del'>-        gf_xl_afr_op_t op = GF_SHD_OP_INVALID;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_xl_afr_op_t op = GF_SHD_OP_INVALID;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *) words[2]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set volname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to set volname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 3) {</div><div class='del'>-                ret = dict_set_int32 (dict, "heal-op", GF_SHD_OP_HEAL_INDEX);</div><div class='del'>-                goto done;</div><div class='add'>+    if (wordcount == 3) {</div><div class='add'>+        ret = dict_set_int32(dict, "heal-op", GF_SHD_OP_HEAL_INDEX);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        op = heal_command_type_get(words[3]);</div><div class='add'>+        if (op == GF_SHD_OP_INVALID) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                op = heal_command_type_get (words[3]);</div><div class='del'>-                if (op == GF_SHD_OP_INVALID) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_int32(dict, "heal-op", op);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int32 (dict, "heal-op", op);</div><div class='del'>-                goto done;</div><div class='add'>+    if (wordcount == 5) {</div><div class='add'>+        if (strcmp(words[3], "info") &amp;&amp; strcmp(words[3], "statistics") &amp;&amp;</div><div class='add'>+            strcmp(words[3], "granular-entry-heal")) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 5) {</div><div class='del'>-                if (strcmp (words[3], "info") &amp;&amp;</div><div class='del'>-                    strcmp (words[3], "statistics") &amp;&amp;</div><div class='del'>-                    strcmp (words[3], "granular-entry-heal")) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!strcmp (words[3], "info")) {</div><div class='del'>-                        if (!strcmp (words[4], "split-brain")) {</div><div class='del'>-                                ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                                   GF_SHD_OP_SPLIT_BRAIN_FILES);</div><div class='del'>-                                goto done;</div><div class='del'>-                        }</div><div class='del'>-                        if (!strcmp (words[4], "summary")) {</div><div class='del'>-                                ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                                   GF_SHD_OP_HEAL_SUMMARY);</div><div class='del'>-                                goto done;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!strcmp(words[3], "info")) {</div><div class='add'>+            if (!strcmp(words[4], "split-brain")) {</div><div class='add'>+                ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                     GF_SHD_OP_SPLIT_BRAIN_FILES);</div><div class='add'>+                goto done;</div><div class='add'>+            }</div><div class='add'>+            if (!strcmp(words[4], "summary")) {</div><div class='add'>+                ret = dict_set_int32(dict, "heal-op", GF_SHD_OP_HEAL_SUMMARY);</div><div class='add'>+                goto done;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!strcmp (words[3], "statistics")) {</div><div class='del'>-                        if (!strcmp (words[4], "heal-count")) {</div><div class='del'>-                                ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                               GF_SHD_OP_STATISTICS_HEAL_COUNT);</div><div class='del'>-                                goto done;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!strcmp(words[3], "statistics")) {</div><div class='add'>+            if (!strcmp(words[4], "heal-count")) {</div><div class='add'>+                ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                     GF_SHD_OP_STATISTICS_HEAL_COUNT);</div><div class='add'>+                goto done;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!strcmp (words[3], "granular-entry-heal")) {</div><div class='del'>-                        if (!strcmp (words[4], "enable")) {</div><div class='del'>-                                ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                          GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE);</div><div class='del'>-                                goto done;</div><div class='del'>-                        } else if (!strcmp (words[4], "disable")) {</div><div class='del'>-                                ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                         GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE);</div><div class='del'>-                                goto done;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!strcmp(words[3], "granular-entry-heal")) {</div><div class='add'>+            if (!strcmp(words[4], "enable")) {</div><div class='add'>+                ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                     GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE);</div><div class='add'>+                goto done;</div><div class='add'>+            } else if (!strcmp(words[4], "disable")) {</div><div class='add'>+                ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                     GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE);</div><div class='add'>+                goto done;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = -1;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (wordcount == 6) {</div><div class='add'>+        if (strcmp(words[3], "split-brain")) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (!strcmp(words[4], "bigger-file")) {</div><div class='add'>+            ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                 GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='add'>+            ret = dict_set_str(dict, "file", (char *)words[5]);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='del'>-        if (wordcount == 6) {</div><div class='del'>-                if (strcmp (words[3], "split-brain")) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (!strcmp (words[4], "bigger-file")) {</div><div class='del'>-                        ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                        GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = dict_set_str (dict, "file", (char *)words[5]);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-                if (!strcmp (words[4], "latest-mtime")) {</div><div class='del'>-                        ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                       GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = dict_set_str (dict, "file", (char *)words[5]);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-                if (!strcmp (words[4], "source-brick")) {</div><div class='del'>-                        ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = set_hostname_path_in_dict (words[5], dict,</div><div class='del'>-                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-                ret = -1;</div><div class='add'>+        if (!strcmp(words[4], "latest-mtime")) {</div><div class='add'>+            ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                 GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='add'>+            ret = dict_set_str(dict, "file", (char *)words[5]);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='del'>-        if (wordcount == 7) {</div><div class='del'>-                if (!strcmp (words[3], "statistics")</div><div class='del'>-                    &amp;&amp; !strcmp (words[4], "heal-count")</div><div class='del'>-                    &amp;&amp; !strcmp (words[5], "replica")) {</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                   GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = set_hostname_path_in_dict (words[6], dict,</div><div class='del'>-                                   GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        goto done;</div><div class='del'>-</div><div class='del'>-                }</div><div class='del'>-                if (!strcmp (words[3], "split-brain") &amp;&amp;</div><div class='del'>-                    !strcmp (words[4], "source-brick")) {</div><div class='del'>-                        ret = dict_set_int32 (dict, "heal-op",</div><div class='del'>-                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='del'>-                        ret = set_hostname_path_in_dict (words[5], dict,</div><div class='del'>-                                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = dict_set_str (dict, "file",</div><div class='del'>-                                            (char *) words[6]);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='add'>+        if (!strcmp(words[4], "source-brick")) {</div><div class='add'>+            ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                 GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            ret = set_hostname_path_in_dict(words[5], dict,</div><div class='add'>+                                            GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='ctx'>         ret = -1;</div><div class='ctx'>         goto out;</div><div class='add'>+    }</div><div class='add'>+    if (wordcount == 7) {</div><div class='add'>+        if (!strcmp(words[3], "statistics") &amp;&amp;</div><div class='add'>+            !strcmp(words[4], "heal-count") &amp;&amp; !strcmp(words[5], "replica")) {</div><div class='add'>+            ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                 GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            ret = set_hostname_path_in_dict(</div><div class='add'>+                words[6], dict, GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+        if (!strcmp(words[3], "split-brain") &amp;&amp;</div><div class='add'>+            !strcmp(words[4], "source-brick")) {</div><div class='add'>+            ret = dict_set_int32(dict, "heal-op",</div><div class='add'>+                                 GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+            ret = set_hostname_path_in_dict(words[5], dict,</div><div class='add'>+                                            GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            ret = dict_set_str(dict, "file", (char *)words[6]);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = -1;</div><div class='add'>+    goto out;</div><div class='ctx'> done:</div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-                *options = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        *options = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_old_tier_parse (const char **words, int wordcount,</div><div class='del'>-                             dict_t **options)</div><div class='add'>+cli_cmd_volume_old_tier_parse(const char **words, int wordcount,</div><div class='add'>+                              dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t                 *dict = NULL;</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        char                *volname = NULL;</div><div class='del'>-        gf_cli_defrag_type       cmd = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    gf_cli_defrag_type cmd = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 4)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount != 4)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if ((strcmp (words[1], "tier") == 0) &amp;&amp;</div><div class='del'>-            (strcmp (words[3], "start") == 0)) {</div><div class='del'>-                cmd = GF_DEFRAG_CMD_START_TIER;</div><div class='del'>-        } else</div><div class='del'>-                goto out;</div><div class='add'>+    if ((strcmp(words[1], "tier") == 0) &amp;&amp; (strcmp(words[3], "start") == 0)) {</div><div class='add'>+        cmd = GF_DEFRAG_CMD_START_TIER;</div><div class='add'>+    } else</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *) words[2];</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "rebalance-command", (int32_t) cmd);</div><div class='add'>+    ret = dict_set_int32(dict, "rebalance-command", (int32_t)cmd);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_defrag_parse (const char **words, int wordcount,</div><div class='del'>-                             dict_t **options)</div><div class='add'>+cli_cmd_volume_defrag_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        dict_t                 *dict = NULL;</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        char                *option  = NULL;</div><div class='del'>-        char                *volname = NULL;</div><div class='del'>-        char                *command = NULL;</div><div class='del'>-        gf_cli_defrag_type       cmd = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!((wordcount == 4) || (wordcount == 5)))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                if (strcmp (words[3], "start") &amp;&amp; strcmp (words[3], "stop") &amp;&amp;</div><div class='del'>-                    strcmp (words[3], "status"))</div><div class='del'>-                            goto out;</div><div class='del'>-        } else {</div><div class='del'>-                if (strcmp (words[3], "fix-layout") &amp;&amp;</div><div class='del'>-                    strcmp (words[3], "start"))</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        volname = (char *) words[2];</div><div class='del'>-</div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                command = (char *) words[3];</div><div class='del'>-        }</div><div class='del'>-        if (wordcount == 5) {</div><div class='del'>-               if ((strcmp (words[3], "fix-layout") ||</div><div class='del'>-                    strcmp (words[4], "start")) &amp;&amp;</div><div class='del'>-                    (strcmp (words[3], "start") ||</div><div class='del'>-                    strcmp (words[4], "force"))) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                command = (char *) words[3];</div><div class='del'>-                option = (char *) words[4];</div><div class='del'>-        }</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *option = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *command = NULL;</div><div class='add'>+    gf_cli_defrag_type cmd = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (command, "start") == 0) {</div><div class='del'>-                cmd = GF_DEFRAG_CMD_START;</div><div class='del'>-                if (option &amp;&amp; strcmp (option, "force") == 0) {</div><div class='del'>-                                cmd = GF_DEFRAG_CMD_START_FORCE;</div><div class='del'>-                        }</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    if (!((wordcount == 4) || (wordcount == 5)))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (command, "fix-layout") == 0) {</div><div class='del'>-                cmd = GF_DEFRAG_CMD_START_LAYOUT_FIX;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-        if (strcmp (command, "stop") == 0) {</div><div class='del'>-                cmd = GF_DEFRAG_CMD_STOP;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-        if (strcmp (command, "status") == 0) {</div><div class='del'>-                cmd = GF_DEFRAG_CMD_STATUS;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        if (strcmp(words[3], "start") &amp;&amp; strcmp(words[3], "stop") &amp;&amp;</div><div class='add'>+            strcmp(words[3], "status"))</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        if (strcmp(words[3], "fix-layout") &amp;&amp; strcmp(words[3], "start"))</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    volname = (char *)words[2];</div><div class='add'>+</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        command = (char *)words[3];</div><div class='add'>+    }</div><div class='add'>+    if (wordcount == 5) {</div><div class='add'>+        if ((strcmp(words[3], "fix-layout") || strcmp(words[4], "start")) &amp;&amp;</div><div class='add'>+            (strcmp(words[3], "start") || strcmp(words[4], "force"))) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        command = (char *)words[3];</div><div class='add'>+        option = (char *)words[4];</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(command, "start") == 0) {</div><div class='add'>+        cmd = GF_DEFRAG_CMD_START;</div><div class='add'>+        if (option &amp;&amp; strcmp(option, "force") == 0) {</div><div class='add'>+            cmd = GF_DEFRAG_CMD_START_FORCE;</div><div class='add'>+        }</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(command, "fix-layout") == 0) {</div><div class='add'>+        cmd = GF_DEFRAG_CMD_START_LAYOUT_FIX;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+    if (strcmp(command, "stop") == 0) {</div><div class='add'>+        cmd = GF_DEFRAG_CMD_STOP;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+    if (strcmp(command, "status") == 0) {</div><div class='add'>+        cmd = GF_DEFRAG_CMD_STATUS;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "rebalance-command", (int32_t) cmd);</div><div class='add'>+    ret = dict_set_int32(dict, "rebalance-command", (int32_t)cmd);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to set dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_snap_create_desc_parse (dict_t *dict, const char **words,</div><div class='del'>-                            size_t wordcount, int32_t desc_opt_loc)</div><div class='add'>+cli_snap_create_desc_parse(dict_t *dict, const char **words, size_t wordcount,</div><div class='add'>+                           int32_t desc_opt_loc)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret      = -1;</div><div class='del'>-        char          *desc     = NULL;</div><div class='del'>-        int32_t        desc_len = 0;</div><div class='del'>-        int            len;</div><div class='del'>-</div><div class='del'>-        desc = GF_MALLOC (MAX_SNAP_DESCRIPTION_LEN + 1,</div><div class='del'>-                          gf_common_mt_char);</div><div class='del'>-        if (!desc) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        len = strlen (words[desc_opt_loc]);</div><div class='del'>-        if (len &gt;= MAX_SNAP_DESCRIPTION_LEN) {</div><div class='del'>-                cli_out ("snapshot create: description truncated: "</div><div class='del'>-                         "Description provided is longer than 1024 characters");</div><div class='del'>-                desc_len = MAX_SNAP_DESCRIPTION_LEN;</div><div class='del'>-        } else {</div><div class='del'>-                desc_len = len;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *desc = NULL;</div><div class='add'>+    int32_t desc_len = 0;</div><div class='add'>+    int len;</div><div class='ctx'> </div><div class='del'>-        snprintf (desc, desc_len + 1, "%s", words[desc_opt_loc]);</div><div class='del'>-        /* Calculating the size of the description as given by the user */</div><div class='del'>-</div><div class='del'>-        ret = dict_set_dynstr (dict, "description", desc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap "</div><div class='del'>-                        "description");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    desc = GF_MALLOC(MAX_SNAP_DESCRIPTION_LEN + 1, gf_common_mt_char);</div><div class='add'>+    if (!desc) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = strlen(words[desc_opt_loc]);</div><div class='add'>+    if (len &gt;= MAX_SNAP_DESCRIPTION_LEN) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "snapshot create: description truncated: "</div><div class='add'>+            "Description provided is longer than 1024 characters");</div><div class='add'>+        desc_len = MAX_SNAP_DESCRIPTION_LEN;</div><div class='add'>+    } else {</div><div class='add'>+        desc_len = len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(desc, desc_len + 1, "%s", words[desc_opt_loc]);</div><div class='add'>+    /* Calculating the size of the description as given by the user */</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr(dict, "description", desc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Unable to save snap "</div><div class='add'>+               "description");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; desc)</div><div class='del'>-                GF_FREE (desc);</div><div class='add'>+    if (ret &amp;&amp; desc)</div><div class='add'>+        GF_FREE(desc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function to check whether the Volume name is repeated */</div><div class='ctx'> int</div><div class='del'>-cli_check_if_volname_repeated (const char **words, unsigned int start_index,</div><div class='del'>-                           uint64_t cur_index) {</div><div class='del'>-        uint64_t        i       =       -1;</div><div class='del'>-        int             ret     =        0;</div><div class='add'>+cli_check_if_volname_repeated(const char **words, unsigned int start_index,</div><div class='add'>+                              uint64_t cur_index)</div><div class='add'>+{</div><div class='add'>+    uint64_t i = -1;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='add'>+    GF_ASSERT(words);</div><div class='ctx'> </div><div class='del'>-        for (i = start_index ; i &lt; cur_index ; i++) {</div><div class='del'>-                if (strcmp (words[i], words[cur_index]) == 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = start_index; i &lt; cur_index; i++) {</div><div class='add'>+        if (strcmp(words[i], words[cur_index]) == 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot clone &lt;clonename&gt; &lt;snapname&gt;</div><div class='hunk'>@@ -4289,72 +4321,77 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_clone_parse (dict_t *dict, const char **words, int wordcount) {</div><div class='del'>-        uint64_t        i               =       0;</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        char            *clonename      =       NULL;</div><div class='del'>-        unsigned int    cmdi            =       2;</div><div class='del'>-        /* cmdi is command index, here cmdi is "2" (gluster snapshot clone)*/</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        if (wordcount == cmdi + 1) {</div><div class='del'>-                cli_err ("Invalid Syntax.");</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Invalid number of  words for snap clone command");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strlen(words[cmdi]) &gt;= GLUSTERD_MAX_SNAP_NAME) {</div><div class='del'>-                cli_err ("snapshot clone: failed: clonename cannot exceed "</div><div class='del'>-                         "255 characters.");</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Clone name too long");</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        clonename = (char *) words[cmdi];</div><div class='del'>-        for (i = 0 ; i &lt; strlen (clonename); i++) {</div><div class='del'>-                /* Following volume name convention */</div><div class='del'>-                if (!isalnum (clonename[i]) &amp;&amp; (clonename[i] != '_'</div><div class='del'>-                                           &amp;&amp; (clonename[i] != '-'))) {</div><div class='del'>-                        /* TODO : Is this message enough?? */</div><div class='del'>-                        cli_err ("Clonename can contain only alphanumeric, "</div><div class='del'>-                                 "\"-\" and \"_\" characters");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "volcount", 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save volcount");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "clonename", (char *)words[cmdi]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save clone "</div><div class='del'>-                        "name(%s)", (char *)words[cmdi]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+cli_snap_clone_parse(dict_t *dict, const char **words, int wordcount)</div><div class='add'>+{</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *clonename = NULL;</div><div class='add'>+    unsigned int cmdi = 2;</div><div class='add'>+    /* cmdi is command index, here cmdi is "2" (gluster snapshot clone)*/</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    if (wordcount == cmdi + 1) {</div><div class='add'>+        cli_err("Invalid Syntax.");</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Invalid number of  words for snap clone command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Filling snap name in the dictionary */</div><div class='del'>-        ret = dict_set_str (dict, "snapname", (char *)words[cmdi+1]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not "</div><div class='del'>-                        "save snap name(%s)", (char *)words[cmdi+1]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (strlen(words[cmdi]) &gt;= GLUSTERD_MAX_SNAP_NAME) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "snapshot clone: failed: clonename cannot exceed "</div><div class='add'>+            "255 characters.");</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Clone name too long");</div><div class='ctx'> </div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    clonename = (char *)words[cmdi];</div><div class='add'>+    for (i = 0; i &lt; strlen(clonename); i++) {</div><div class='add'>+        /* Following volume name convention */</div><div class='add'>+        if (!isalnum(clonename[i]) &amp;&amp;</div><div class='add'>+            (clonename[i] != '_' &amp;&amp; (clonename[i] != '-'))) {</div><div class='add'>+            /* TODO : Is this message enough?? */</div><div class='add'>+            cli_err(</div><div class='add'>+                "Clonename can contain only alphanumeric, "</div><div class='add'>+                "\"-\" and \"_\" characters");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "volcount", 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not save volcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "clonename", (char *)words[cmdi]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save clone "</div><div class='add'>+               "name(%s)",</div><div class='add'>+               (char *)words[cmdi]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Filling snap name in the dictionary */</div><div class='add'>+    ret = dict_set_str(dict, "snapname", (char *)words[cmdi + 1]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not "</div><div class='add'>+               "save snap name(%s)",</div><div class='add'>+               (char *)words[cmdi + 1]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* snapshot create &lt;snapname&gt; &lt;vol-name(s)&gt; [description &lt;description&gt;]</div><div class='ctx'>  *                                           [force]</div><div class='ctx'>  * @arg-0, dict     : Request Dictionary to be sent to server side.</div><div class='hunk'>@@ -4365,172 +4402,181 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_create_parse (dict_t *dict, const char **words, int wordcount) {</div><div class='del'>-        uint64_t        i               =       0;</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        uint64_t        volcount        =       0;</div><div class='del'>-        char            key[PATH_MAX]   =       "";</div><div class='del'>-        char            *snapname       =       NULL;</div><div class='del'>-        unsigned int    cmdi            =       2;</div><div class='del'>-        int             flags           =       0;</div><div class='del'>-        /* cmdi is command index, here cmdi is "2" (gluster snapshot create)*/</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt;= cmdi + 1) {</div><div class='del'>-                cli_err ("Invalid Syntax.");</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Too less words for snap create command");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+cli_snap_create_parse(dict_t *dict, const char **words, int wordcount)</div><div class='add'>+{</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t volcount = 0;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *snapname = NULL;</div><div class='add'>+    unsigned int cmdi = 2;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    /* cmdi is command index, here cmdi is "2" (gluster snapshot create)*/</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    if (wordcount &lt;= cmdi + 1) {</div><div class='add'>+        cli_err("Invalid Syntax.");</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Too less words for snap create command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strlen(words[cmdi]) &gt;= GLUSTERD_MAX_SNAP_NAME) {</div><div class='del'>-                cli_err ("snapshot create: failed: snapname cannot exceed "</div><div class='del'>-                         "255 characters.");</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Snapname too long");</div><div class='add'>+    if (strlen(words[cmdi]) &gt;= GLUSTERD_MAX_SNAP_NAME) {</div><div class='add'>+        cli_err(</div><div class='add'>+            "snapshot create: failed: snapname cannot exceed "</div><div class='add'>+            "255 characters.");</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Snapname too long");</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snapname = (char *)words[cmdi];</div><div class='add'>+    for (i = 0; i &lt; strlen(snapname); i++) {</div><div class='add'>+        /* Following volume name convention */</div><div class='add'>+        if (!isalnum(snapname[i]) &amp;&amp;</div><div class='add'>+            (snapname[i] != '_' &amp;&amp; (snapname[i] != '-'))) {</div><div class='add'>+            /* TODO : Is this message enough?? */</div><div class='add'>+            cli_err(</div><div class='add'>+                "Snapname can contain only alphanumeric, "</div><div class='add'>+                "\"-\" and \"_\" characters");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "snapname", (char *)words[cmdi]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save snap "</div><div class='add'>+               "name(%s)",</div><div class='add'>+               (char *)words[cmdi]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Filling volume name in the dictionary */</div><div class='add'>+    for (i = cmdi + 1;</div><div class='add'>+         i &lt; wordcount &amp;&amp; (strcmp(words[i], "description")) != 0 &amp;&amp;</div><div class='add'>+         (strcmp(words[i], "force") != 0) &amp;&amp;</div><div class='add'>+         (strcmp(words[i], "no-timestamp") != 0);</div><div class='add'>+         i++) {</div><div class='add'>+        volcount++;</div><div class='add'>+        /* volume index starts from 1 */</div><div class='add'>+        ret = snprintf(key, sizeof(key), "volname%" PRIu64, volcount);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        snapname = (char *) words[cmdi];</div><div class='del'>-        for (i = 0 ; i &lt; strlen (snapname); i++) {</div><div class='del'>-                /* Following volume name convention */</div><div class='del'>-                if (!isalnum (snapname[i]) &amp;&amp; (snapname[i] != '_'</div><div class='del'>-                                           &amp;&amp; (snapname[i] != '-'))) {</div><div class='del'>-                        /* TODO : Is this message enough?? */</div><div class='del'>-                        cli_err ("Snapname can contain only alphanumeric, "</div><div class='del'>-                                 "\"-\" and \"_\" characters");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_str(dict, key, (char *)words[i]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not "</div><div class='add'>+                   "save volume name(%s)",</div><div class='add'>+                   (char *)words[i]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "snapname", (char *)words[cmdi]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save snap "</div><div class='del'>-                        "name(%s)", (char *)words[cmdi]);</div><div class='del'>-                goto out;</div><div class='add'>+        if (i &gt;= cmdi + 2) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_err(</div><div class='add'>+                "Creating multiple volume snapshot is not "</div><div class='add'>+                "supported as of now");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        /* TODO : remove this above condition check once</div><div class='add'>+         * multiple volume snapshot is supported */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Filling volume name in the dictionary */</div><div class='del'>-        for (i = cmdi + 1 ; i &lt; wordcount</div><div class='del'>-                            &amp;&amp; (strcmp (words[i], "description")) != 0</div><div class='del'>-                            &amp;&amp; (strcmp (words[i], "force") != 0)</div><div class='del'>-                            &amp;&amp; (strcmp (words[i], "no-timestamp") != 0);</div><div class='del'>-                            i++) {</div><div class='del'>-                volcount++;</div><div class='del'>-                /* volume index starts from 1 */</div><div class='del'>-                ret = snprintf (key, sizeof (key), "volname%"PRIu64, volcount);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (volcount == 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        cli_err("Please provide the volume name");</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, key, (char *)words[i]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not "</div><div class='del'>-                                "save volume name(%s)", (char *)words[i]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    ret = dict_set_int32(dict, "volcount", volcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not save volcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Verify how we got out of "for" loop,</div><div class='add'>+     * if it is by reaching wordcount limit then goto "out",</div><div class='add'>+     * because we need not parse for "description","force" and</div><div class='add'>+     * "no-timestamp" after this.</div><div class='add'>+     */</div><div class='add'>+    if (i == wordcount) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (i &gt;= cmdi + 2) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_err("Creating multiple volume snapshot is not "</div><div class='del'>-                                "supported as of now");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* TODO : remove this above condition check once</div><div class='del'>-                 * multiple volume snapshot is supported */</div><div class='add'>+    if (strcmp(words[i], "no-timestamp") == 0) {</div><div class='add'>+        ret = dict_set_str(dict, "no-timestamp", "true");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not save "</div><div class='add'>+                   "time-stamp option");</div><div class='ctx'>         }</div><div class='add'>+        if (i == (wordcount - 1))</div><div class='add'>+            goto out;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (volcount == 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                cli_err ("Please provide the volume name");</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='add'>+    if ((strcmp(words[i], "description")) == 0) {</div><div class='add'>+        ++i;</div><div class='add'>+        if (i &gt; (wordcount - 1)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_err("Please provide a description");</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Description not provided");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "volcount", volcount);</div><div class='add'>+        ret = cli_snap_create_desc_parse(dict, words, wordcount, i);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save volcount");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Verify how we got out of "for" loop,</div><div class='del'>-         * if it is by reaching wordcount limit then goto "out",</div><div class='del'>-         * because we need not parse for "description","force" and</div><div class='del'>-         * "no-timestamp" after this.</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not save snap "</div><div class='add'>+                   "description");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (i == (wordcount - 1))</div><div class='add'>+            goto out;</div><div class='add'>+        i++;</div><div class='add'>+        /* point the index to next word.</div><div class='add'>+         * As description might be follwed by force option.</div><div class='add'>+         * Before that, check if wordcount limit is reached</div><div class='ctx'>          */</div><div class='del'>-        if (i == wordcount) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (words[i], "no-timestamp") == 0) {</div><div class='del'>-                ret = dict_set_str (dict, "no-timestamp", "true");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not save "</div><div class='del'>-                                "time-stamp option");</div><div class='del'>-                }</div><div class='del'>-                if (i == (wordcount-1))</div><div class='del'>-                        goto out;</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((strcmp (words[i], "description")) == 0) {</div><div class='del'>-                ++i;</div><div class='del'>-                if (i &gt; (wordcount - 1)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_err ("Please provide a description");</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Description not provided");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = cli_snap_create_desc_parse(dict, words, wordcount, i);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not save snap "</div><div class='del'>-                                "description");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (i == (wordcount - 1))</div><div class='del'>-                        goto out;</div><div class='del'>-                i++;</div><div class='del'>-                /* point the index to next word.</div><div class='del'>-                 * As description might be follwed by force option.</div><div class='del'>-                 * Before that, check if wordcount limit is reached</div><div class='del'>-                 */</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words[i], "force") == 0) {</div><div class='del'>-                flags = GF_CLI_FLAG_OP_FORCE;</div><div class='add'>+    if (strcmp(words[i], "force") == 0) {</div><div class='add'>+        flags = GF_CLI_FLAG_OP_FORCE;</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                ret = -1;</div><div class='del'>-                cli_err ("Invalid Syntax.");</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = -1;</div><div class='add'>+        cli_err("Invalid Syntax.");</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Check if the command has anything after "force" keyword */</div><div class='del'>-        if (++i &lt; wordcount) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Check if the command has anything after "force" keyword */</div><div class='add'>+    if (++i &lt; wordcount) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if(ret == 0) {</div><div class='del'>-                /*Adding force flag in either of the case i.e force set</div><div class='del'>-                 * or unset*/</div><div class='del'>-                ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not save "</div><div class='del'>-                                "snap force option");</div><div class='del'>-                }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        /*Adding force flag in either of the case i.e force set</div><div class='add'>+         * or unset*/</div><div class='add'>+        ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not save "</div><div class='add'>+                   "snap force option");</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot list [volname]</div><div class='hunk'>@@ -4542,30 +4588,30 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_list_parse (dict_t *dict, const char **words, int wordcount) {</div><div class='del'>-        int             ret     =       -1;</div><div class='add'>+cli_snap_list_parse(dict_t *dict, const char **words, int wordcount)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 2 || wordcount &gt; 3) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount &lt; 2 || wordcount &gt; 3) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 2) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == 2) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *)words[2]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Failed to save volname in dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to save volname in dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot info [(snapname |  volume &lt;volname&gt;)]</div><div class='hunk'>@@ -4577,87 +4623,88 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_info_parse (dict_t *dict, const char **words, int wordcount)</div><div class='add'>+cli_snap_info_parse(dict_t *dict, const char **words, int wordcount)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t cmd = GF_SNAP_INFO_TYPE_ALL;</div><div class='add'>+    unsigned int cmdi = 2;</div><div class='add'>+    /* cmdi is command index, here cmdi is "2" (gluster snapshot info)*/</div><div class='ctx'> </div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        int32_t         cmd             =       GF_SNAP_INFO_TYPE_ALL;</div><div class='del'>-        unsigned int    cmdi            =        2;</div><div class='del'>-        /* cmdi is command index, here cmdi is "2" (gluster snapshot info)*/</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    if (wordcount &gt; 4 || wordcount &lt; cmdi) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt; 4 || wordcount &lt; cmdi) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == cmdi) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == cmdi) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    /* If 3rd word is not "volume", then it must</div><div class='add'>+     * be snapname.</div><div class='add'>+     */</div><div class='add'>+    if (strcmp(words[cmdi], "volume") != 0) {</div><div class='add'>+        ret = dict_set_str(dict, "snapname", (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to save "</div><div class='add'>+                   "snapname %s",</div><div class='add'>+                   words[cmdi]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* If 3rd word is not "volume", then it must</div><div class='del'>-         * be snapname.</div><div class='add'>+        /* Once snap name is parsed, if we encounter any other</div><div class='add'>+         * word then fail it. Invalid Syntax.</div><div class='add'>+         * example : snapshot info &lt;snapname&gt; word</div><div class='ctx'>          */</div><div class='del'>-        if (strcmp (words[cmdi], "volume") != 0) {</div><div class='del'>-                ret = dict_set_str (dict, "snapname",</div><div class='del'>-                                   (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to save "</div><div class='del'>-                                "snapname %s", words[cmdi]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Once snap name is parsed, if we encounter any other</div><div class='del'>-                 * word then fail it. Invalid Syntax.</div><div class='del'>-                 * example : snapshot info &lt;snapname&gt; word</div><div class='del'>-                 */</div><div class='del'>-                if ((cmdi + 1) != wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                cmd = GF_SNAP_INFO_TYPE_SNAP;</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-                /* No need to continue the parsing once we</div><div class='del'>-                 * get the snapname</div><div class='del'>-                 */</div><div class='add'>+        if ((cmdi + 1) != wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* If 3rd word is "volume", then check if next word</div><div class='del'>-         * is present. As, "snapshot info volume" is an</div><div class='del'>-         * invalid command.</div><div class='add'>+        cmd = GF_SNAP_INFO_TYPE_SNAP;</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+        /* No need to continue the parsing once we</div><div class='add'>+         * get the snapname</div><div class='ctx'>          */</div><div class='del'>-        if ((cmdi + 1) == wordcount) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *)words[wordcount - 1]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save "</div><div class='del'>-                        "volume name %s", words[wordcount - 1]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cmd = GF_SNAP_INFO_TYPE_VOL;</div><div class='add'>+    /* If 3rd word is "volume", then check if next word</div><div class='add'>+     * is present. As, "snapshot info volume" is an</div><div class='add'>+     * invalid command.</div><div class='add'>+     */</div><div class='add'>+    if ((cmdi + 1) == wordcount) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[wordcount - 1]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save "</div><div class='add'>+               "volume name %s",</div><div class='add'>+               words[wordcount - 1]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cmd = GF_SNAP_INFO_TYPE_VOL;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = dict_set_int32 (dict, "sub-cmd", cmd);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not save "</div><div class='del'>-                                "type of snapshot info");</div><div class='del'>-                }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = dict_set_int32(dict, "sub-cmd", cmd);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not save "</div><div class='add'>+                   "type of snapshot info");</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* snapshot restore &lt;snapname&gt;</div><div class='ctx'>  * @arg-0, dict     : Request Dictionary to be sent to server side.</div><div class='ctx'>  * @arg-1, words    : Contains individual words of CLI command.</div><div class='hunk'>@@ -4667,42 +4714,43 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_restore_parse (dict_t *dict, const char **words, int wordcount,</div><div class='del'>-                        struct cli_state *state)</div><div class='add'>+cli_snap_restore_parse(dict_t *dict, const char **words, int wordcount,</div><div class='add'>+                       struct cli_state *state)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='ctx'> </div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        const char      *question       =       NULL;</div><div class='del'>-        gf_answer_t     answer          =       GF_ANSWER_NO;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        if (wordcount != 3) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "snapname", (char *)words[2]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap-name %s",</div><div class='del'>-                        words[2]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        question = "Restore operation will replace the "</div><div class='del'>-                   "original volume with the snapshotted volume. "</div><div class='del'>-                   "Do you still want to continue?";</div><div class='add'>+    if (wordcount != 3) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                ret = 1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "User cancelled a snapshot "</div><div class='del'>-                        "restore operation for snap %s", (char *)words[2]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "snapname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to save snap-name %s", words[2]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    question =</div><div class='add'>+        "Restore operation will replace the "</div><div class='add'>+        "original volume with the snapshotted volume. "</div><div class='add'>+        "Do you still want to continue?";</div><div class='add'>+</div><div class='add'>+    answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+    if (GF_ANSWER_NO == answer) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "User cancelled a snapshot "</div><div class='add'>+               "restore operation for snap %s",</div><div class='add'>+               (char *)words[2]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot activate &lt;snapname&gt; [force]</div><div class='hunk'>@@ -4714,43 +4762,41 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_activate_parse (dict_t *dict, const char **words, int wordcount)</div><div class='add'>+cli_snap_activate_parse(dict_t *dict, const char **words, int wordcount)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int flags = 0;</div><div class='ctx'> </div><div class='del'>-        int ret = -1;</div><div class='del'>-        int flags = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        if ((wordcount &lt; 3) || (wordcount &gt; 4)) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((wordcount &lt; 3) || (wordcount &gt; 4)) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "snapname", (char *)words[2]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap-name %s",</div><div class='del'>-                        words[2]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "snapname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to save snap-name %s", words[2]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                if (!strcmp("force", (char *)words[3])) {</div><div class='del'>-                        flags = GF_CLI_FLAG_OP_FORCE;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid option");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to save force option");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        if (!strcmp("force", (char *)words[3])) {</div><div class='add'>+            flags = GF_CLI_FLAG_OP_FORCE;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid option");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to save force option");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot deactivate &lt;snapname&gt;</div><div class='hunk'>@@ -4763,42 +4809,41 @@ out:</div><div class='ctx'>  *                 1 if user cancelled the request</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_deactivate_parse (dict_t *dict, const char **words, int wordcount,</div><div class='del'>-                        struct cli_state *state)</div><div class='add'>+cli_snap_deactivate_parse(dict_t *dict, const char **words, int wordcount,</div><div class='add'>+                          struct cli_state *state)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    const char *question =</div><div class='add'>+        "Deactivating snap will make its "</div><div class='add'>+        "data inaccessible. Do you want to "</div><div class='add'>+        "continue?";</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    if ((wordcount != 3)) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        gf_answer_t     answer          = GF_ANSWER_NO;</div><div class='del'>-        const char     *question        = "Deactivating snap will make its "</div><div class='del'>-                                          "data inaccessible. Do you want to "</div><div class='del'>-                                          "continue?";</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        if ((wordcount != 3)) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "snapname", (char *)words[2]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to save snap-name %s",</div><div class='del'>-                        words[2]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                ret = 1;</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "User cancelled "</div><div class='del'>-                        "snapshot deactivate operation");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "snapname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to save snap-name %s", words[2]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+    if (GF_ANSWER_NO == answer) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+               "User cancelled "</div><div class='add'>+               "snapshot deactivate operation");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot delete (all | snapname | volume &lt;volname&gt;)</div><div class='hunk'>@@ -4811,78 +4856,84 @@ out:</div><div class='ctx'>  *                 1 if user cancel the operation</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_delete_parse (dict_t *dict, const char **words, int wordcount,</div><div class='del'>-                       struct cli_state *state) {</div><div class='del'>-</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        const char      *question       =       NULL;</div><div class='del'>-        int32_t         cmd             =       -1;</div><div class='del'>-        unsigned int    cmdi            =       2;</div><div class='del'>-        gf_answer_t     answer          =       GF_ANSWER_NO;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+cli_snap_delete_parse(dict_t *dict, const char **words, int wordcount,</div><div class='add'>+                      struct cli_state *state)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+    int32_t cmd = -1;</div><div class='add'>+    unsigned int cmdi = 2;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt; 4 || wordcount &lt;= cmdi) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        question = "Deleting snap will erase all the information about "</div><div class='del'>-                   "the snap. Do you still want to continue?";</div><div class='add'>+    if (wordcount &gt; 4 || wordcount &lt;= cmdi) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words [cmdi], "all") == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                cmd = GF_SNAP_DELETE_TYPE_ALL;</div><div class='del'>-        } else if (strcmp (words [cmdi], "volume") == 0) {</div><div class='del'>-                if (++cmdi == wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    question =</div><div class='add'>+        "Deleting snap will erase all the information about "</div><div class='add'>+        "the snap. Do you still want to continue?";</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "volname",</div><div class='del'>-                                    (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not save "</div><div class='del'>-                                "volume name %s", words[wordcount - 1]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cmd = GF_SNAP_DELETE_TYPE_VOL;</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_set_str (dict, "snapname", (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to save "</div><div class='del'>-                                "snapname %s", words[2]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cmd = GF_SNAP_DELETE_TYPE_SNAP;</div><div class='add'>+    if (strcmp(words[cmdi], "all") == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        cmd = GF_SNAP_DELETE_TYPE_ALL;</div><div class='add'>+    } else if (strcmp(words[cmdi], "volume") == 0) {</div><div class='add'>+        if (++cmdi == wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((cmdi + 1) != wordcount) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dict_set_str(dict, "volname", (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not save "</div><div class='add'>+                   "volume name %s",</div><div class='add'>+                   words[wordcount - 1]);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        cmd = GF_SNAP_DELETE_TYPE_VOL;</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_set_str(dict, "snapname", (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to save "</div><div class='add'>+                   "snapname %s",</div><div class='add'>+                   words[2]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        cmd = GF_SNAP_DELETE_TYPE_SNAP;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd == GF_SNAP_DELETE_TYPE_SNAP) {</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG, "User cancelled "</div><div class='del'>-                                "snapshot delete operation for snap %s",</div><div class='del'>-                                (char *)words[2]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if ((cmdi + 1) != wordcount) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "sub-cmd", cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save "</div><div class='del'>-                        "type of snapshot delete");</div><div class='del'>-        }</div><div class='add'>+    if (cmd == GF_SNAP_DELETE_TYPE_SNAP) {</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+                   "User cancelled "</div><div class='add'>+                   "snapshot delete operation for snap %s",</div><div class='add'>+                   (char *)words[2]);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "sub-cmd", cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save "</div><div class='add'>+               "type of snapshot delete");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* snapshot status [(snapname | volume &lt;volname&gt;)]</div><div class='hunk'>@@ -4894,132 +4945,138 @@ out:</div><div class='ctx'>  *                 0 on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_snap_status_parse (dict_t *dict, const char **words, int wordcount)</div><div class='add'>+cli_snap_status_parse(dict_t *dict, const char **words, int wordcount)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t cmd = GF_SNAP_STATUS_TYPE_ALL;</div><div class='add'>+    unsigned int cmdi = 2;</div><div class='add'>+    /* cmdi is command index, here cmdi is "2" (gluster snapshot status)*/</div><div class='ctx'> </div><div class='del'>-        int             ret  =        -1;</div><div class='del'>-        int32_t         cmd  =       GF_SNAP_STATUS_TYPE_ALL;</div><div class='del'>-        unsigned int    cmdi =        2;</div><div class='del'>-        /* cmdi is command index, here cmdi is "2" (gluster snapshot status)*/</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    if (wordcount &gt; 4 || wordcount &lt; cmdi) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt; 4 || wordcount &lt; cmdi) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == cmdi) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == cmdi) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    /* if 3rd word is not "volume", then it must be "snapname"</div><div class='add'>+     */</div><div class='add'>+    if (strcmp(words[cmdi], "volume") != 0) {</div><div class='add'>+        ret = dict_set_str(dict, "snapname", (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Count not save "</div><div class='add'>+                   "snap name %s",</div><div class='add'>+                   words[cmdi]);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* if 3rd word is not "volume", then it must be "snapname"</div><div class='del'>-        */</div><div class='del'>-        if (strcmp (words[cmdi], "volume") != 0) {</div><div class='del'>-                ret = dict_set_str (dict, "snapname",</div><div class='del'>-                                   (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Count not save "</div><div class='del'>-                                "snap name %s", words[cmdi]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((cmdi + 1) != wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = 0;</div><div class='del'>-                cmd = GF_SNAP_STATUS_TYPE_SNAP;</div><div class='del'>-                goto out;</div><div class='add'>+        if ((cmdi + 1) != wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* If 3rd word is "volume", then check if next word is present.</div><div class='del'>-         * As, "snapshot info volume" is an invalid command</div><div class='del'>-         */</div><div class='del'>-        if ((cmdi + 1) == wordcount) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = 0;</div><div class='add'>+        cmd = GF_SNAP_STATUS_TYPE_SNAP;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *)words [wordcount - 1]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Count not save "</div><div class='del'>-                        "volume name %s", words[wordcount - 1]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cmd = GF_SNAP_STATUS_TYPE_VOL;</div><div class='add'>+    /* If 3rd word is "volume", then check if next word is present.</div><div class='add'>+     * As, "snapshot info volume" is an invalid command</div><div class='add'>+     */</div><div class='add'>+    if ((cmdi + 1) == wordcount) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[wordcount - 1]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Count not save "</div><div class='add'>+               "volume name %s",</div><div class='add'>+               words[wordcount - 1]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cmd = GF_SNAP_STATUS_TYPE_VOL;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = dict_set_int32 (dict, "sub-cmd", cmd);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not save cmd "</div><div class='del'>-                                "of snapshot status");</div><div class='del'>-                }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = dict_set_int32(dict, "sub-cmd", cmd);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not save cmd "</div><div class='add'>+                   "of snapshot status");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* return value:</div><div class='ctx'>  *      -1  in case of failure.</div><div class='ctx'>  *       0  in case of success.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-cli_snap_config_limit_parse (const char **words, dict_t *dict,</div><div class='del'>-                             unsigned int wordcount, unsigned int index,</div><div class='del'>-                             char *key)</div><div class='add'>+cli_snap_config_limit_parse(const char **words, dict_t *dict,</div><div class='add'>+                            unsigned int wordcount, unsigned int index,</div><div class='add'>+                            char *key)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        int             limit           = 0;</div><div class='del'>-        char            *end_ptr        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (key);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int limit = 0;</div><div class='add'>+    char *end_ptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (index &gt;= wordcount) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                cli_err ("Please provide a value for %s.", key);</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Value not provided for %s", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(key);</div><div class='ctx'> </div><div class='del'>-        limit = strtol (words[index], &amp;end_ptr, 10);</div><div class='add'>+    if (index &gt;= wordcount) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        cli_err("Please provide a value for %s.", key);</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Value not provided for %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (limit &lt;= 0 || strcmp (end_ptr, "") != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                cli_err("Please enter an integer value "</div><div class='del'>-                        "greater than zero for %s", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    limit = strtol(words[index], &amp;end_ptr, 10);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, key, limit);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not set "</div><div class='del'>-                        "%s in dictionary", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (limit &lt;= 0 || strcmp(end_ptr, "") != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        cli_err(</div><div class='add'>+            "Please enter an integer value "</div><div class='add'>+            "greater than zero for %s",</div><div class='add'>+            key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, key, limit);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not set "</div><div class='add'>+               "%s in dictionary",</div><div class='add'>+               key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr_with_alloc (dict, "globalname", "All");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not set global key");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, "hold_global_locks", _gf_true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not set global locks");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_dynstr_with_alloc(dict, "globalname", "All");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not set global key");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, "hold_global_locks", _gf_true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not set global locks");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* function cli_snap_config_parse</div><div class='hunk'>@@ -5035,775 +5092,787 @@ out:</div><div class='ctx'>   NOTE : snap-max-soft-limit can only be set for system.</div><div class='ctx'> */</div><div class='ctx'> int32_t</div><div class='del'>-cli_snap_config_parse (const char **words, int wordcount, dict_t *dict,</div><div class='del'>-                       struct cli_state *state)</div><div class='add'>+cli_snap_config_parse(const char **words, int wordcount, dict_t *dict,</div><div class='add'>+                      struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int                            ret                 = -1;</div><div class='del'>-        gf_answer_t                    answer              = GF_ANSWER_NO;</div><div class='del'>-        gf_boolean_t                   vol_presence        = _gf_false;</div><div class='del'>-        struct snap_config_opt_vals_  *conf_vals           = NULL;</div><div class='del'>-        int8_t                         hard_limit          = 0;</div><div class='del'>-        int8_t                         soft_limit          = 0;</div><div class='del'>-        int8_t                         config_type         = -1;</div><div class='del'>-        const char                    *question            = NULL;</div><div class='del'>-        unsigned int                   cmdi                = 2;</div><div class='del'>-        /* cmdi is command index, here cmdi is "2" (gluster snapshot config)*/</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (state);</div><div class='del'>-</div><div class='del'>-        if ((wordcount &lt; 2) || (wordcount &gt; 7)) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Invalid wordcount(%d)", wordcount);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    gf_boolean_t vol_presence = _gf_false;</div><div class='add'>+    struct snap_config_opt_vals_ *conf_vals = NULL;</div><div class='add'>+    int8_t hard_limit = 0;</div><div class='add'>+    int8_t soft_limit = 0;</div><div class='add'>+    int8_t config_type = -1;</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+    unsigned int cmdi = 2;</div><div class='add'>+    /* cmdi is command index, here cmdi is "2" (gluster snapshot config)*/</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(state);</div><div class='add'>+</div><div class='add'>+    if ((wordcount &lt; 2) || (wordcount &gt; 7)) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid wordcount(%d)", wordcount);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 2) {</div><div class='del'>-                config_type = GF_SNAP_CONFIG_DISPLAY;</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto set;</div><div class='add'>+    if (wordcount == 2) {</div><div class='add'>+        config_type = GF_SNAP_CONFIG_DISPLAY;</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto set;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* auto-delete cannot be a volume name */</div><div class='add'>+    /* Check whether the 3rd word is volname */</div><div class='add'>+    if (strcmp(words[cmdi], "snap-max-hard-limit") != 0 &amp;&amp;</div><div class='add'>+        strcmp(words[cmdi], "snap-max-soft-limit") != 0 &amp;&amp;</div><div class='add'>+        strcmp(words[cmdi], "auto-delete") != 0 &amp;&amp;</div><div class='add'>+        strcmp(words[cmdi], "activate-on-create") != 0) {</div><div class='add'>+        ret = dict_set_str(dict, "volname", (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to set volname");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        cmdi++;</div><div class='add'>+        vol_presence = _gf_true;</div><div class='ctx'> </div><div class='del'>-        /* auto-delete cannot be a volume name */</div><div class='del'>-        /* Check whether the 3rd word is volname */</div><div class='del'>-        if (strcmp (words[cmdi], "snap-max-hard-limit") != 0</div><div class='del'>-             &amp;&amp; strcmp (words[cmdi], "snap-max-soft-limit") != 0</div><div class='del'>-             &amp;&amp; strcmp (words[cmdi], "auto-delete") != 0</div><div class='del'>-             &amp;&amp; strcmp (words[cmdi], "activate-on-create") != 0) {</div><div class='del'>-                ret = dict_set_str (dict, "volname", (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set volname");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cmdi++;</div><div class='del'>-                vol_presence = _gf_true;</div><div class='del'>-</div><div class='del'>-                if (cmdi == wordcount) {</div><div class='del'>-                        config_type = GF_SNAP_CONFIG_DISPLAY;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto set;</div><div class='del'>-                }</div><div class='add'>+        if (cmdi == wordcount) {</div><div class='add'>+            config_type = GF_SNAP_CONFIG_DISPLAY;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto set;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        config_type = GF_SNAP_CONFIG_TYPE_SET;</div><div class='add'>+    config_type = GF_SNAP_CONFIG_TYPE_SET;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words[cmdi], "snap-max-hard-limit") == 0) {</div><div class='del'>-                ret = cli_snap_config_limit_parse (words, dict, wordcount,</div><div class='del'>-                                                ++cmdi, "snap-max-hard-limit");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse snap "</div><div class='del'>-                                "config hard limit");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                hard_limit = 1;</div><div class='del'>-</div><div class='del'>-                if (++cmdi == wordcount) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto set;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(words[cmdi], "snap-max-hard-limit") == 0) {</div><div class='add'>+        ret = cli_snap_config_limit_parse(words, dict, wordcount, ++cmdi,</div><div class='add'>+                                          "snap-max-hard-limit");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to parse snap "</div><div class='add'>+                   "config hard limit");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        hard_limit = 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (words[cmdi], "snap-max-soft-limit") == 0) {</div><div class='del'>-                if (vol_presence == 1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_err ("Soft limit cannot be set to individual "</div><div class='del'>-                                  "volumes.");</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Soft limit cannot be "</div><div class='del'>-                                "set to volumes");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = cli_snap_config_limit_parse (words, dict, wordcount,</div><div class='del'>-                                                ++cmdi, "snap-max-soft-limit");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse snap "</div><div class='del'>-                                "config soft limit");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (++cmdi != wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                soft_limit = 1;</div><div class='add'>+        if (++cmdi == wordcount) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto set;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (hard_limit || soft_limit)</div><div class='del'>-                goto set;</div><div class='add'>+    if (strcmp(words[cmdi], "snap-max-soft-limit") == 0) {</div><div class='add'>+        if (vol_presence == 1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_err(</div><div class='add'>+                "Soft limit cannot be set to individual "</div><div class='add'>+                "volumes.");</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Soft limit cannot be "</div><div class='add'>+                   "set to volumes");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (strcmp(words[cmdi], "auto-delete") == 0) {</div><div class='del'>-                if (vol_presence == 1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_err ("As of now, auto-delete option cannot be set "</div><div class='del'>-                                "to volumes");</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "auto-delete option "</div><div class='del'>-                                "cannot be set to volumes");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = cli_snap_config_limit_parse(words, dict, wordcount, ++cmdi,</div><div class='add'>+                                          "snap-max-soft-limit");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to parse snap "</div><div class='add'>+                   "config soft limit");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (++cmdi &gt;= wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (++cmdi != wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        soft_limit = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "auto-delete", (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set "</div><div class='del'>-                                "value of auto-delete in request "</div><div class='del'>-                                "dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (hard_limit || soft_limit)</div><div class='add'>+        goto set;</div><div class='ctx'> </div><div class='del'>-                if (++cmdi != wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (strcmp(words[cmdi], "activate-on-create") == 0) {</div><div class='del'>-                if (vol_presence == 1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_err ("As of now, activate-on-create option "</div><div class='del'>-                                 "cannot be set to volumes");</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "activate-on-create "</div><div class='del'>-                                "option cannot be set to volumes");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(words[cmdi], "auto-delete") == 0) {</div><div class='add'>+        if (vol_presence == 1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_err(</div><div class='add'>+                "As of now, auto-delete option cannot be set "</div><div class='add'>+                "to volumes");</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "auto-delete option "</div><div class='add'>+                   "cannot be set to volumes");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (++cmdi &gt;= wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (++cmdi &gt;= wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "snap-activate-on-create",</div><div class='del'>-                                    (char *)words[cmdi]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set value "</div><div class='del'>-                                "of activate-on-create in request dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_set_str(dict, "auto-delete", (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set "</div><div class='add'>+                   "value of auto-delete in request "</div><div class='add'>+                   "dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (++cmdi != wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (strcmp(words[cmdi], "activate-on-create") == 0) {</div><div class='add'>+        if (vol_presence == 1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_err(</div><div class='add'>+                "As of now, activate-on-create option "</div><div class='add'>+                "cannot be set to volumes");</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "activate-on-create "</div><div class='add'>+                   "option cannot be set to volumes");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (++cmdi &gt;= wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = dict_set_str(dict, "snap-activate-on-create",</div><div class='add'>+                           (char *)words[cmdi]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set value "</div><div class='add'>+                   "of activate-on-create in request dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (++cmdi != wordcount) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                goto out;</div><div class='add'>+        if (++cmdi != wordcount) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0; /* Success */</div><div class='add'>+    ret = 0; /* Success */</div><div class='ctx'> </div><div class='ctx'> set:</div><div class='del'>-        ret = dict_set_int32 (dict, "config-command", config_type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to set "</div><div class='del'>-                        "config-command");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(dict, "config-command", config_type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Unable to set "</div><div class='add'>+               "config-command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (config_type == GF_SNAP_CONFIG_TYPE_SET &amp;&amp;</div><div class='del'>-           (hard_limit || soft_limit)) {</div><div class='del'>-                conf_vals = snap_confopt_vals;</div><div class='del'>-                if (hard_limit &amp;&amp; soft_limit) {</div><div class='del'>-                        question = conf_vals[GF_SNAP_CONFIG_SET_BOTH].question;</div><div class='del'>-                } else if (soft_limit) {</div><div class='del'>-                        question = conf_vals[GF_SNAP_CONFIG_SET_SOFT].question;</div><div class='del'>-                } else if (hard_limit) {</div><div class='del'>-                        question = conf_vals[GF_SNAP_CONFIG_SET_HARD].question;</div><div class='del'>-                }</div><div class='add'>+    if (config_type == GF_SNAP_CONFIG_TYPE_SET &amp;&amp; (hard_limit || soft_limit)) {</div><div class='add'>+        conf_vals = snap_confopt_vals;</div><div class='add'>+        if (hard_limit &amp;&amp; soft_limit) {</div><div class='add'>+            question = conf_vals[GF_SNAP_CONFIG_SET_BOTH].question;</div><div class='add'>+        } else if (soft_limit) {</div><div class='add'>+            question = conf_vals[GF_SNAP_CONFIG_SET_SOFT].question;</div><div class='add'>+        } else if (hard_limit) {</div><div class='add'>+            question = conf_vals[GF_SNAP_CONFIG_SET_HARD].question;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG, "User cancelled "</div><div class='del'>-                        "snapshot config operation");</div><div class='del'>-                }</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+                   "User cancelled "</div><div class='add'>+                   "snapshot config operation");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-validate_op_name (const char *op, const char *opname, char **opwords) {</div><div class='del'>-        int     ret     =       -1;</div><div class='del'>-        int     i       =       0;</div><div class='add'>+validate_op_name(const char *op, const char *opname, char **opwords)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (opname);</div><div class='del'>-        GF_ASSERT (opwords);</div><div class='add'>+    GF_ASSERT(opname);</div><div class='add'>+    GF_ASSERT(opwords);</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; opwords[i] != NULL; i++) {</div><div class='del'>-                if (strcmp (opwords[i], opname) == 0) {</div><div class='del'>-                        cli_out ("\"%s\" cannot be a %s", opname, op);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; opwords[i] != NULL; i++) {</div><div class='add'>+        if (strcmp(opwords[i], opname) == 0) {</div><div class='add'>+            cli_out("\"%s\" cannot be a %s", opname, op);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_snapshot_parse (const char **words, int wordcount, dict_t **options,</div><div class='del'>-                        struct cli_state *state)</div><div class='add'>+cli_cmd_snapshot_parse(const char **words, int wordcount, dict_t **options,</div><div class='add'>+                       struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret        = -1;</div><div class='del'>-        dict_t             *dict      = NULL;</div><div class='del'>-        gf1_cli_snapshot   type       = GF_SNAP_OPTION_TYPE_NONE;</div><div class='del'>-        char               *w         = NULL;</div><div class='del'>-        char               *opwords[] = {"create", "delete", "restore",</div><div class='del'>-                                        "activate", "deactivate", "list",</div><div class='del'>-                                        "status", "config", "info", "clone",</div><div class='del'>-                                        NULL};</div><div class='del'>-        char               *invalid_snapnames[] = {"description", "force",</div><div class='del'>-                                                  "volume", "all", NULL};</div><div class='del'>-        char               *invalid_volnames[]  = {"volume", "type",</div><div class='del'>-                                                   "subvolumes", "option",</div><div class='del'>-                                                   "end-volume", "all",</div><div class='del'>-                                                   "volume_not_in_ring",</div><div class='del'>-                                                   "description", "force",</div><div class='del'>-                                                   "snap-max-hard-limit",</div><div class='del'>-                                                   "snap-max-soft-limit",</div><div class='del'>-                                                   "auto-delete",</div><div class='del'>-                                                   "activate-on-create", NULL};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-        GF_ASSERT (state);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf1_cli_snapshot type = GF_SNAP_OPTION_TYPE_NONE;</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    char *opwords[] = {"create",     "delete", "restore", "activate",</div><div class='add'>+                       "deactivate", "list",   "status",  "config",</div><div class='add'>+                       "info",       "clone",  NULL};</div><div class='add'>+    char *invalid_snapnames[] = {"description", "force", "volume", "all", NULL};</div><div class='add'>+    char *invalid_volnames[] = {"volume",</div><div class='add'>+                                "type",</div><div class='add'>+                                "subvolumes",</div><div class='add'>+                                "option",</div><div class='add'>+                                "end-volume",</div><div class='add'>+                                "all",</div><div class='add'>+                                "volume_not_in_ring",</div><div class='add'>+                                "description",</div><div class='add'>+                                "force",</div><div class='add'>+                                "snap-max-hard-limit",</div><div class='add'>+                                "snap-max-soft-limit",</div><div class='add'>+                                "auto-delete",</div><div class='add'>+                                "activate-on-create",</div><div class='add'>+                                NULL};</div><div class='ctx'> </div><div class='del'>-        /* Lowest wordcount possible */</div><div class='del'>-        if (wordcount &lt; 2) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                        "Invalid command: Not enough arguments");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+    GF_ASSERT(state);</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[1], opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                /* Checks if the operation is a valid operation */</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Opword Mismatch");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (w, "create")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_CREATE;</div><div class='del'>-        } else if (!strcmp (w, "list")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_LIST;</div><div class='del'>-        } else if (!strcmp (w, "info")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_INFO;</div><div class='del'>-        } else if (!strcmp (w, "delete")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_DELETE;</div><div class='del'>-        } else if (!strcmp (w, "config")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_CONFIG;</div><div class='del'>-        } else if (!strcmp (w, "restore")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_RESTORE;</div><div class='del'>-        } else if (!strcmp (w, "status")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_STATUS;</div><div class='del'>-        } else if (!strcmp (w, "activate")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_ACTIVATE;</div><div class='del'>-        } else if (!strcmp (w, "deactivate")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_DEACTIVATE;</div><div class='del'>-        } else if (!strcmp(w, "clone")) {</div><div class='del'>-                type = GF_SNAP_OPTION_TYPE_CLONE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (type != GF_SNAP_OPTION_TYPE_CONFIG &amp;&amp;</div><div class='del'>-            type != GF_SNAP_OPTION_TYPE_STATUS) {</div><div class='del'>-                ret = dict_set_int32 (dict, "hold_snap_locks", _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to set hold-snap-locks value "</div><div class='del'>-                                "as _gf_true");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    /* Lowest wordcount possible */</div><div class='add'>+    if (wordcount &lt; 2) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Invalid command: Not enough arguments");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Following commands does not require volume locks  */</div><div class='del'>-        if (type == GF_SNAP_OPTION_TYPE_STATUS ||</div><div class='del'>-            type == GF_SNAP_OPTION_TYPE_ACTIVATE ||</div><div class='del'>-            type == GF_SNAP_OPTION_TYPE_DEACTIVATE) {</div><div class='del'>-                ret = dict_set_int32 (dict, "hold_vol_locks", _gf_false);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Setting volume lock "</div><div class='del'>-                                "flag failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    w = str_getunamb(words[1], opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        /* Checks if the operation is a valid operation */</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Opword Mismatch");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(w, "create")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_CREATE;</div><div class='add'>+    } else if (!strcmp(w, "list")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_LIST;</div><div class='add'>+    } else if (!strcmp(w, "info")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_INFO;</div><div class='add'>+    } else if (!strcmp(w, "delete")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_DELETE;</div><div class='add'>+    } else if (!strcmp(w, "config")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_CONFIG;</div><div class='add'>+    } else if (!strcmp(w, "restore")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_RESTORE;</div><div class='add'>+    } else if (!strcmp(w, "status")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_STATUS;</div><div class='add'>+    } else if (!strcmp(w, "activate")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_ACTIVATE;</div><div class='add'>+    } else if (!strcmp(w, "deactivate")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_DEACTIVATE;</div><div class='add'>+    } else if (!strcmp(w, "clone")) {</div><div class='add'>+        type = GF_SNAP_OPTION_TYPE_CLONE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (type != GF_SNAP_OPTION_TYPE_CONFIG &amp;&amp;</div><div class='add'>+        type != GF_SNAP_OPTION_TYPE_STATUS) {</div><div class='add'>+        ret = dict_set_int32(dict, "hold_snap_locks", _gf_true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to set hold-snap-locks value "</div><div class='add'>+                   "as _gf_true");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Following commands does not require volume locks  */</div><div class='add'>+    if (type == GF_SNAP_OPTION_TYPE_STATUS ||</div><div class='add'>+        type == GF_SNAP_OPTION_TYPE_ACTIVATE ||</div><div class='add'>+        type == GF_SNAP_OPTION_TYPE_DEACTIVATE) {</div><div class='add'>+        ret = dict_set_int32(dict, "hold_vol_locks", _gf_false);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Setting volume lock "</div><div class='add'>+                   "flag failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Check which op is intended */</div><div class='del'>-        switch (type) {</div><div class='add'>+    /* Check which op is intended */</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CREATE:</div><div class='del'>-                /* Syntax :</div><div class='del'>-                 * gluster snapshot create &lt;snapname&gt; &lt;vol-name(s)&gt;</div><div class='del'>-                 *                         [no-timestamp]</div><div class='del'>-                 *                         [description &lt;description&gt;]</div><div class='del'>-                 *                         [force]</div><div class='del'>-                 */</div><div class='del'>-                /* In cases where the snapname is not given then</div><div class='del'>-                 * parsing fails &amp; snapname cannot be "description",</div><div class='del'>-                 * "force" and "volume", that check is made here</div><div class='del'>-                 */</div><div class='del'>-                if (wordcount == 2){</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            /* Syntax :</div><div class='add'>+             * gluster snapshot create &lt;snapname&gt; &lt;vol-name(s)&gt;</div><div class='add'>+             *                         [no-timestamp]</div><div class='add'>+             *                         [description &lt;description&gt;]</div><div class='add'>+             *                         [force]</div><div class='add'>+             */</div><div class='add'>+            /* In cases where the snapname is not given then</div><div class='add'>+             * parsing fails &amp; snapname cannot be "description",</div><div class='add'>+             * "force" and "volume", that check is made here</div><div class='add'>+             */</div><div class='add'>+            if (wordcount == 2) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = validate_op_name ("snapname", words[2],</div><div class='del'>-                                        invalid_snapnames);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = validate_op_name("snapname", words[2], invalid_snapnames);</div><div class='add'>+            if (ret) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = cli_snap_create_parse (dict, words, wordcount);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "create command parsing failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_snap_create_parse(dict, words, wordcount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "create command parsing failed.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CLONE:</div><div class='del'>-                /* Syntax :</div><div class='del'>-                 * gluster snapshot clone &lt;clonename&gt; &lt;snapname&gt;</div><div class='del'>-                 */</div><div class='del'>-                /* In cases where the clonename is not given then</div><div class='del'>-                 * parsing fails &amp; snapname cannot be "description",</div><div class='del'>-                 * "force" and "volume", that check is made here</div><div class='del'>-                 */</div><div class='del'>-                if (wordcount == 2) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = validate_op_name ("clonename", words[2],</div><div class='del'>-                                        invalid_volnames);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            /* Syntax :</div><div class='add'>+             * gluster snapshot clone &lt;clonename&gt; &lt;snapname&gt;</div><div class='add'>+             */</div><div class='add'>+            /* In cases where the clonename is not given then</div><div class='add'>+             * parsing fails &amp; snapname cannot be "description",</div><div class='add'>+             * "force" and "volume", that check is made here</div><div class='add'>+             */</div><div class='add'>+            if (wordcount == 2) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Invalid Syntax");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = cli_snap_clone_parse (dict, words, wordcount);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "clone command parsing failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = validate_op_name("clonename", words[2], invalid_volnames);</div><div class='add'>+            if (ret) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            ret = cli_snap_clone_parse(dict, words, wordcount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "clone command parsing failed.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_INFO:</div><div class='del'>-                /* Syntax :</div><div class='del'>-                 * gluster snapshot info [(snapname] | [vol &lt;volname&gt;)]</div><div class='del'>-                 */</div><div class='del'>-                ret = cli_snap_info_parse (dict, words, wordcount);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                "snapshot info command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            /* Syntax :</div><div class='add'>+             * gluster snapshot info [(snapname] | [vol &lt;volname&gt;)]</div><div class='add'>+             */</div><div class='add'>+            ret = cli_snap_info_parse(dict, words, wordcount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "snapshot info command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_LIST:</div><div class='del'>-                /* Syntax :</div><div class='del'>-                 * gluster snaphsot list [volname]</div><div class='del'>-                 */</div><div class='add'>+            /* Syntax :</div><div class='add'>+             * gluster snaphsot list [volname]</div><div class='add'>+             */</div><div class='ctx'> </div><div class='del'>-                ret = cli_snap_list_parse (dict, words, wordcount);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                "snapshot list command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_snap_list_parse(dict, words, wordcount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "snapshot list command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_DELETE:</div><div class='del'>-                /* Syntax :</div><div class='del'>-                 * snapshot delete (all | snapname | volume &lt;volname&gt;)</div><div class='del'>-                 */</div><div class='del'>-                ret = cli_snap_delete_parse (dict, words, wordcount, state);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        /* A positive ret value means user cancelled</div><div class='del'>-                        * the command */</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                        "snapshot delete command");</div><div class='del'>-                        }</div><div class='del'>-                        goto out;</div><div class='add'>+            /* Syntax :</div><div class='add'>+             * snapshot delete (all | snapname | volume &lt;volname&gt;)</div><div class='add'>+             */</div><div class='add'>+            ret = cli_snap_delete_parse(dict, words, wordcount, state);</div><div class='add'>+            if (ret) {</div><div class='add'>+                /* A positive ret value means user cancelled</div><div class='add'>+                 * the command */</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Failed to parse "</div><div class='add'>+                           "snapshot delete command");</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CONFIG:</div><div class='del'>-                /* snapshot config [volname]  [snap-max-hard-limit &lt;count&gt;]</div><div class='del'>-                 *                            [snap-max-soft-limit &lt;percent&gt;] */</div><div class='del'>-                ret = cli_snap_config_parse (words, wordcount, dict, state);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "config command parsing failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            /* snapshot config [volname]  [snap-max-hard-limit &lt;count&gt;]</div><div class='add'>+             *                            [snap-max-soft-limit &lt;percent&gt;] */</div><div class='add'>+            ret = cli_snap_config_parse(words, wordcount, dict, state);</div><div class='add'>+            if (ret) {</div><div class='add'>+                if (ret &lt; 0)</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "config command parsing failed.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int32 (dict, "type", GF_SNAP_OPTION_TYPE_CONFIG);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to set "</div><div class='del'>-                                "config type");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case GF_SNAP_OPTION_TYPE_STATUS:</div><div class='del'>-                {</div><div class='del'>-                        /* Syntax :</div><div class='del'>-                         * gluster snapshot status [(snapname |</div><div class='del'>-                         *                         volume &lt;volname&gt;)]</div><div class='del'>-                         */</div><div class='del'>-                        ret = cli_snap_status_parse (dict, words, wordcount);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                        "snapshot status command");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            ret = dict_set_int32(dict, "type", GF_SNAP_OPTION_TYPE_CONFIG);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Unable to set "</div><div class='add'>+                       "config type");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_STATUS: {</div><div class='add'>+            /* Syntax :</div><div class='add'>+             * gluster snapshot status [(snapname |</div><div class='add'>+             *                         volume &lt;volname&gt;)]</div><div class='add'>+             */</div><div class='add'>+            ret = cli_snap_status_parse(dict, words, wordcount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "snapshot status command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_RESTORE:</div><div class='del'>-                /* Syntax:</div><div class='del'>-                 * snapshot restore &lt;snapname&gt;</div><div class='del'>-                 */</div><div class='del'>-                ret = cli_snap_restore_parse (dict, words, wordcount, state);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                "restore command");</div><div class='del'>-                        goto out;</div><div class='add'>+            /* Syntax:</div><div class='add'>+             * snapshot restore &lt;snapname&gt;</div><div class='add'>+             */</div><div class='add'>+            ret = cli_snap_restore_parse(dict, words, wordcount, state);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "restore command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_ACTIVATE:</div><div class='add'>+            /* Syntax:</div><div class='add'>+             * snapshot activate &lt;snapname&gt; [force]</div><div class='add'>+             */</div><div class='add'>+            ret = cli_snap_activate_parse(dict, words, wordcount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "start command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_DEACTIVATE:</div><div class='add'>+            /* Syntax:</div><div class='add'>+             * snapshot deactivate &lt;snapname&gt;</div><div class='add'>+             */</div><div class='add'>+            ret = cli_snap_deactivate_parse(dict, words, wordcount, state);</div><div class='add'>+            if (ret) {</div><div class='add'>+                /* A positive ret value means user cancelled</div><div class='add'>+                 * the command */</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Failed to parse deactivate "</div><div class='add'>+                           "command");</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                case GF_SNAP_OPTION_TYPE_ACTIVATE:</div><div class='del'>-                        /* Syntax:</div><div class='del'>-                        * snapshot activate &lt;snapname&gt; [force]</div><div class='del'>-                        */</div><div class='del'>-                        ret = cli_snap_activate_parse (dict, words, wordcount);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                        "start command");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                case GF_SNAP_OPTION_TYPE_DEACTIVATE:</div><div class='del'>-                        /* Syntax:</div><div class='del'>-                        * snapshot deactivate &lt;snapname&gt;</div><div class='del'>-                        */</div><div class='del'>-                        ret = cli_snap_deactivate_parse (dict, words, wordcount,</div><div class='del'>-                                state);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                /* A positive ret value means user cancelled</div><div class='del'>-                                 * the command */</div><div class='del'>-                                if (ret &lt; 0) {</div><div class='del'>-                                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                                "Failed to parse deactivate "</div><div class='del'>-                                                "command");</div><div class='del'>-                                }</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Opword Mismatch");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "Opword Mismatch");</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "type", type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set type.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* If you got so far, input is valid */</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = dict_set_int32(dict, "type", type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Failed to set type.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* If you got so far, input is valid */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        } else</div><div class='del'>-                *options = dict;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    } else</div><div class='add'>+        *options = dict;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_validate_volume (char *volname)</div><div class='add'>+cli_cmd_validate_volume(char *volname)</div><div class='ctx'> {</div><div class='del'>-        int       i        =  0;</div><div class='del'>-        int       ret      = -1;</div><div class='del'>-        int       volname_len;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int volname_len;</div><div class='ctx'> </div><div class='add'>+    if (volname[0] == '-')</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (volname[0] == '-')</div><div class='del'>-                return ret;</div><div class='add'>+    if (!strcmp(volname, "all")) {</div><div class='add'>+        cli_err("\"all\" cannot be the name of a volume.");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (volname, "all")) {</div><div class='del'>-                cli_err ("\"all\" cannot be the name of a volume.");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (strchr(volname, '/')) {</div><div class='add'>+        cli_err("Volume name should not contain \"/\" character.");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strchr (volname, '/')) {</div><div class='del'>-                cli_err ("Volume name should not contain \"/\" character.");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    volname_len = strlen(volname);</div><div class='add'>+    if (volname_len &gt; GD_VOLUME_NAME_MAX) {</div><div class='add'>+        cli_err("Volname can not exceed %d characters.", GD_VOLUME_NAME_MAX);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        volname_len = strlen (volname);</div><div class='del'>-        if (volname_len &gt; GD_VOLUME_NAME_MAX) {</div><div class='del'>-                cli_err ("Volname can not exceed %d characters.",</div><div class='del'>-                        GD_VOLUME_NAME_MAX);</div><div class='del'>-                return ret;</div><div class='add'>+    for (i = 0; i &lt; volname_len; i++)</div><div class='add'>+        if (!isalnum(volname[i]) &amp;&amp; (volname[i] != '_') &amp;&amp;</div><div class='add'>+            (volname[i] != '-')) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Volume name should not contain \"%c\""</div><div class='add'>+                " character.\nVolume names can only"</div><div class='add'>+                "contain alphanumeric, '-' and '_' "</div><div class='add'>+                "characters.",</div><div class='add'>+                volname[i]);</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; volname_len ; i++)</div><div class='del'>-                if (!isalnum (volname[i]) &amp;&amp; (volname[i] != '_') &amp;&amp;</div><div class='del'>-                    (volname[i] != '-')) {</div><div class='del'>-                        cli_err ("Volume name should not contain \"%c\""</div><div class='del'>-                                 " character.\nVolume names can only"</div><div class='del'>-                                 "contain alphanumeric, '-' and '_' "</div><div class='del'>-                                 "characters.", volname[i]);</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_bitrot_parse (const char **words, int wordcount, dict_t **options)</div><div class='add'>+cli_cmd_bitrot_parse(const char **words, int wordcount, dict_t **options)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret                    = -1;</div><div class='del'>-        char               *w                     = NULL;</div><div class='del'>-        char               *volname               = NULL;</div><div class='del'>-        char               *opwords[]             = {"enable", "disable",</div><div class='del'>-                                                     "scrub-throttle",</div><div class='del'>-                                                     "scrub-frequency", "scrub",</div><div class='del'>-                                                     "signing-time", NULL};</div><div class='del'>-        char               *scrub_throt_values[]  = {"lazy", "normal",</div><div class='del'>-                                                     "aggressive", NULL};</div><div class='del'>-        char               *scrub_freq_values[]   = {"hourly",</div><div class='del'>-                                                     "daily", "weekly",</div><div class='del'>-                                                     "biweekly", "monthly",</div><div class='del'>-                                                     "minute",  NULL};</div><div class='del'>-        char               *scrub_values[]        = {"pause", "resume",</div><div class='del'>-                                                     "status", "ondemand",</div><div class='del'>-                                                     NULL};</div><div class='del'>-        dict_t             *dict                  = NULL;</div><div class='del'>-        gf_bitrot_type     type                   = GF_BITROT_OPTION_TYPE_NONE;</div><div class='del'>-        int32_t            expiry_time            = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (words);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Hack to print out bitrot help properly */</div><div class='del'>-        if ((wordcount == 3) &amp;&amp; !(strcmp (words[2], "help"))) {</div><div class='del'>-                ret = 1;</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 4 || wordcount &gt; 5) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid syntax");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *opwords[] = {</div><div class='add'>+        "enable",       "disable", "scrub-throttle", "scrub-frequency", "scrub",</div><div class='add'>+        "signing-time", NULL};</div><div class='add'>+    char *scrub_throt_values[] = {"lazy", "normal", "aggressive", NULL};</div><div class='add'>+    char *scrub_freq_values[] = {"hourly",  "daily",  "weekly", "biweekly",</div><div class='add'>+                                 "monthly", "minute", NULL};</div><div class='add'>+    char *scrub_values[] = {"pause", "resume", "status", "ondemand", NULL};</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_bitrot_type type = GF_BITROT_OPTION_TYPE_NONE;</div><div class='add'>+    int32_t expiry_time = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(words);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    /* Hack to print out bitrot help properly */</div><div class='add'>+    if ((wordcount == 3) &amp;&amp; !(strcmp(words[2], "help"))) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 4 || wordcount &gt; 5) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid syntax");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='del'>-        if (!volname) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_validate_volume (volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to validate volume name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    volname = (char *)words[2];</div><div class='add'>+    if (!volname) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_out ("Failed to set volume name in dictionary ");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_validate_volume(volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to validate volume name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        w = str_getunamb (words[3], opwords);</div><div class='del'>-        if (!w) {</div><div class='del'>-                cli_out ("Invalid bit rot option : %s", words[3]);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_out("Failed to set volume name in dictionary ");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "enable") == 0) {</div><div class='del'>-                if (wordcount == 4) {</div><div class='del'>-                        type = GF_BITROT_OPTION_TYPE_ENABLE;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto set_type;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    w = str_getunamb(words[3], opwords);</div><div class='add'>+    if (!w) {</div><div class='add'>+        cli_out("Invalid bit rot option : %s", words[3]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (w, "disable") == 0) {</div><div class='del'>-                if (wordcount == 4) {</div><div class='del'>-                        type = GF_BITROT_OPTION_TYPE_DISABLE;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto set_type;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(w, "enable") == 0) {</div><div class='add'>+        if (wordcount == 4) {</div><div class='add'>+            type = GF_BITROT_OPTION_TYPE_ENABLE;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto set_type;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (w, "scrub-throttle")) {</div><div class='del'>-                if (!words[4]) {</div><div class='del'>-                        cli_err ("Missing scrub-throttle value for bitrot "</div><div class='del'>-                                 "option");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        w = str_getunamb (words[4], scrub_throt_values);</div><div class='del'>-                        if (!w) {</div><div class='del'>-                                cli_err ("Invalid scrub-throttle option for "</div><div class='del'>-                                         "bitrot");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                type = GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE;</div><div class='del'>-                                ret =  dict_set_str (dict,</div><div class='del'>-                                                     "scrub-throttle-value",</div><div class='del'>-                                                     (char *) words[4]);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        cli_out ("Failed to set scrub-throttle "</div><div class='del'>-                                                 "value in the dict");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                goto set_type;</div><div class='del'>-                        }</div><div class='add'>+    if (strcmp(w, "disable") == 0) {</div><div class='add'>+        if (wordcount == 4) {</div><div class='add'>+            type = GF_BITROT_OPTION_TYPE_DISABLE;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto set_type;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(w, "scrub-throttle")) {</div><div class='add'>+        if (!words[4]) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Missing scrub-throttle value for bitrot "</div><div class='add'>+                "option");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            w = str_getunamb(words[4], scrub_throt_values);</div><div class='add'>+            if (!w) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Invalid scrub-throttle option for "</div><div class='add'>+                    "bitrot");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                type = GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE;</div><div class='add'>+                ret = dict_set_str(dict, "scrub-throttle-value",</div><div class='add'>+                                   (char *)words[4]);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    cli_out(</div><div class='add'>+                        "Failed to set scrub-throttle "</div><div class='add'>+                        "value in the dict");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                goto set_type;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (words[3], "scrub-frequency")) {</div><div class='del'>-                if (!words[4]) {</div><div class='del'>-                        cli_err ("Missing scrub-frequency value");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        w = str_getunamb (words[4], scrub_freq_values);</div><div class='del'>-                        if (!w) {</div><div class='del'>-                                cli_err ("Invalid frequency option for bitrot");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                type = GF_BITROT_OPTION_TYPE_SCRUB_FREQ;</div><div class='del'>-                                ret = dict_set_str (dict,</div><div class='del'>-                                                    "scrub-frequency-value",</div><div class='del'>-                                                    (char *) words[4]);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        cli_out ("Failed to set dict for "</div><div class='del'>-                                                 "bitrot");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                goto set_type;</div><div class='del'>-                        }</div><div class='add'>+    if (!strcmp(words[3], "scrub-frequency")) {</div><div class='add'>+        if (!words[4]) {</div><div class='add'>+            cli_err("Missing scrub-frequency value");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            w = str_getunamb(words[4], scrub_freq_values);</div><div class='add'>+            if (!w) {</div><div class='add'>+                cli_err("Invalid frequency option for bitrot");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                type = GF_BITROT_OPTION_TYPE_SCRUB_FREQ;</div><div class='add'>+                ret = dict_set_str(dict, "scrub-frequency-value",</div><div class='add'>+                                   (char *)words[4]);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    cli_out(</div><div class='add'>+                        "Failed to set dict for "</div><div class='add'>+                        "bitrot");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                goto set_type;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (words[3], "scrub")) {</div><div class='del'>-                if (!words[4]) {</div><div class='del'>-                        cli_err ("Missing scrub value for bitrot option");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+    if (!strcmp(words[3], "scrub")) {</div><div class='add'>+        if (!words[4]) {</div><div class='add'>+            cli_err("Missing scrub value for bitrot option");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            w = str_getunamb(words[4], scrub_values);</div><div class='add'>+            if (!w) {</div><div class='add'>+                cli_err("Invalid scrub option for bitrot");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                if (strcmp(words[4], "status") == 0) {</div><div class='add'>+                    type = GF_BITROT_CMD_SCRUB_STATUS;</div><div class='add'>+                } else if (strcmp(words[4], "ondemand") == 0) {</div><div class='add'>+                    type = GF_BITROT_CMD_SCRUB_ONDEMAND;</div><div class='ctx'>                 } else {</div><div class='del'>-                        w = str_getunamb (words[4], scrub_values);</div><div class='del'>-                        if (!w) {</div><div class='del'>-                                cli_err ("Invalid scrub option for bitrot");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                if (strcmp (words[4], "status") == 0) {</div><div class='del'>-                                        type = GF_BITROT_CMD_SCRUB_STATUS;</div><div class='del'>-                                } else if (strcmp (words[4], "ondemand") == 0) {</div><div class='del'>-                                        type = GF_BITROT_CMD_SCRUB_ONDEMAND;</div><div class='del'>-                                } else {</div><div class='del'>-                                        type = GF_BITROT_OPTION_TYPE_SCRUB;</div><div class='del'>-                                }</div><div class='del'>-                                ret =  dict_set_str (dict, "scrub-value",</div><div class='del'>-                                                    (char *) words[4]);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        cli_out ("Failed to set dict for "</div><div class='del'>-                                                 "bitrot");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                goto set_type;</div><div class='del'>-                        }</div><div class='add'>+                    type = GF_BITROT_OPTION_TYPE_SCRUB;</div><div class='ctx'>                 }</div><div class='add'>+                ret = dict_set_str(dict, "scrub-value", (char *)words[4]);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    cli_out(</div><div class='add'>+                        "Failed to set dict for "</div><div class='add'>+                        "bitrot");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                goto set_type;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (words[3], "signing-time")) {</div><div class='del'>-                if (!words[4]) {</div><div class='del'>-                        cli_err ("Missing signing-time value for bitrot "</div><div class='del'>-                                 "option");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        type = GF_BITROT_OPTION_TYPE_EXPIRY_TIME;</div><div class='del'>-</div><div class='del'>-                        expiry_time = strtol (words[4], NULL, 0);</div><div class='del'>-                        if (expiry_time &lt; 1) {</div><div class='del'>-                                cli_err ("Expiry time  value should not be less"</div><div class='del'>-                                         " than 1");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_uint32 (dict, "expiry-time",</div><div class='del'>-                                               (unsigned int) expiry_time);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                cli_out ("Failed to set dict for bitrot");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        goto set_type;</div><div class='del'>-                }</div><div class='add'>+    if (!strcmp(words[3], "signing-time")) {</div><div class='add'>+        if (!words[4]) {</div><div class='add'>+            cli_err(</div><div class='add'>+                "Missing signing-time value for bitrot "</div><div class='add'>+                "option");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         } else {</div><div class='del'>-                cli_err ("Invalid option %s for bitrot. Please enter valid "</div><div class='del'>-                         "bitrot option", words[3]);</div><div class='add'>+            type = GF_BITROT_OPTION_TYPE_EXPIRY_TIME;</div><div class='add'>+</div><div class='add'>+            expiry_time = strtol(words[4], NULL, 0);</div><div class='add'>+            if (expiry_time &lt; 1) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Expiry time  value should not be less"</div><div class='add'>+                    " than 1");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = dict_set_uint32(dict, "expiry-time",</div><div class='add'>+                                  (unsigned int)expiry_time);</div><div class='add'>+            if (ret) {</div><div class='add'>+                cli_out("Failed to set dict for bitrot");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            goto set_type;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        cli_err(</div><div class='add'>+            "Invalid option %s for bitrot. Please enter valid "</div><div class='add'>+            "bitrot option",</div><div class='add'>+            words[3]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> set_type:</div><div class='del'>-        ret = dict_set_int32 (dict, "type", type);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "type", type);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to parse bitrot command");</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to parse bitrot command");</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-cmd-peer.c b/cli/src/cli-cmd-peer.c<br/>index a50ea7c66b5..e0a38904a81 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-peer.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-peer.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-peer.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-peer.c</a></div><div class='hunk'>@@ -24,292 +24,282 @@ extern struct rpc_clnt *global_rpc;</div><div class='ctx'> </div><div class='ctx'> extern rpc_clnt_prog_t *cli_rpc_prog;</div><div class='ctx'> </div><div class='del'>-int cli_cmd_peer_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+int</div><div class='add'>+cli_cmd_peer_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='ctx'>                       const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_peer_probe_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                   const char **words, int wordcount)</div><div class='add'>+cli_cmd_peer_probe_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-</div><div class='del'>-        if (!(wordcount == 3)) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_PROBE];</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "hostname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = valid_internet_address ((char *) words[2], _gf_false);</div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                ret = 0;</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%s is an invalid address", words[2]);</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-/*        if (words[3]) {</div><div class='del'>-                ret = dict_set_str (dict, "port", (char *)words[3]);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    if (!(wordcount == 3)) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_PROBE];</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "hostname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = valid_internet_address((char *)words[2], _gf_false);</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%s is an invalid address", words[2]);</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*        if (words[3]) {</div><div class='add'>+                    ret = dict_set_str (dict, "port", (char *)words[3]);</div><div class='add'>+                    if (ret)</div><div class='add'>+                            goto out;</div><div class='add'>+            }</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='add'>+</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Peer probe failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Peer probe failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                gf_event (EVENT_PEER_ATTACH, "host=%s", (char *)words[2]);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        gf_event(EVENT_PEER_ATTACH, "host=%s", (char *)words[2]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_peer_deprobe_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount)</div><div class='add'>+cli_cmd_peer_deprobe_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                         const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                   ret   = -1;</div><div class='del'>-        rpc_clnt_procedure_t *proc  = NULL;</div><div class='del'>-        call_frame_t         *frame = NULL;</div><div class='del'>-        dict_t               *dict  = NULL;</div><div class='del'>-        int                  flags = 0;</div><div class='del'>-        int                  sent = 0;</div><div class='del'>-        int                  parse_error = 0;</div><div class='del'>-        cli_local_t          *local = NULL;</div><div class='del'>-</div><div class='del'>-        if ((wordcount &lt; 3) || (wordcount &gt; 4)) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    if ((wordcount &lt; 3) || (wordcount &gt; 4)) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_DEPROBE];</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "hostname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*        if (words[3]) {</div><div class='add'>+                    ret = dict_set_str (dict, "port", (char *)words[3]);</div><div class='add'>+                    if (ret)</div><div class='add'>+                            goto out;</div><div class='add'>+            }</div><div class='add'>+    */</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        if (!strcmp("force", words[3]))</div><div class='add'>+            flags |= GF_CLI_FLAG_OP_FORCE;</div><div class='add'>+        else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            parse_error = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_DEPROBE];</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "hostname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-/*        if (words[3]) {</div><div class='del'>-                ret = dict_set_str (dict, "port", (char *)words[3]);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-*/</div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                if (!strcmp("force", words[3]))</div><div class='del'>-                        flags |= GF_CLI_FLAG_OP_FORCE;</div><div class='del'>-                else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        parse_error = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Peer detach failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Peer detach failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                gf_event (EVENT_PEER_DETACH, "host=%s", (char *)words[2]);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        gf_event(EVENT_PEER_DETACH, "host=%s", (char *)words[2]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_peer_status_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+cli_cmd_peer_status_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='ctx'>                         const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-</div><div class='del'>-        if (wordcount != 2) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LIST_FRIENDS];</div><div class='add'>+    if (wordcount != 2) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LIST_FRIENDS];</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, (void *)GF_CLI_LIST_PEERS);</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, (void *)GF_CLI_LIST_PEERS);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Peer status failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Peer status failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_pool_list_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                       const char **words, int wordcount)</div><div class='add'>+cli_cmd_pool_list_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                      const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-</div><div class='del'>-        if (wordcount != 2) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LIST_FRIENDS];</div><div class='add'>+    if (wordcount != 2) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LIST_FRIENDS];</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS,</div><div class='del'>-                                (void *)GF_CLI_LIST_POOL_NODES);</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, (void *)GF_CLI_LIST_POOL_NODES);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_err ("pool list: command execution failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_err("pool list: command execution failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd cli_probe_cmds[] = {</div><div class='del'>-        { "peer probe { &lt;HOSTNAME&gt; | &lt;IP-address&gt; }",</div><div class='del'>-          cli_cmd_peer_probe_cbk,</div><div class='del'>-          "probe peer specified by &lt;HOSTNAME&gt;"},</div><div class='add'>+    {"peer probe { &lt;HOSTNAME&gt; | &lt;IP-address&gt; }", cli_cmd_peer_probe_cbk,</div><div class='add'>+     "probe peer specified by &lt;HOSTNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "peer detach { &lt;HOSTNAME&gt; | &lt;IP-address&gt; } [force]",</div><div class='del'>-          cli_cmd_peer_deprobe_cbk,</div><div class='del'>-          "detach peer specified by &lt;HOSTNAME&gt;"},</div><div class='add'>+    {"peer detach { &lt;HOSTNAME&gt; | &lt;IP-address&gt; } [force]",</div><div class='add'>+     cli_cmd_peer_deprobe_cbk, "detach peer specified by &lt;HOSTNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "peer status",</div><div class='del'>-          cli_cmd_peer_status_cbk,</div><div class='del'>-          "list status of peers"},</div><div class='add'>+    {"peer status", cli_cmd_peer_status_cbk, "list status of peers"},</div><div class='ctx'> </div><div class='del'>-	{ "peer help",</div><div class='del'>-           cli_cmd_peer_help_cbk,</div><div class='del'>-           "display help for peer commands"},</div><div class='add'>+    {"peer help", cli_cmd_peer_help_cbk, "display help for peer commands"},</div><div class='ctx'> </div><div class='del'>-        { "pool list",</div><div class='del'>-          cli_cmd_pool_list_cbk,</div><div class='del'>-          "list all the nodes in the pool (including localhost)"},</div><div class='add'>+    {"pool list", cli_cmd_pool_list_cbk,</div><div class='add'>+     "list all the nodes in the pool (including localhost)"},</div><div class='ctx'> </div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_peer_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+cli_cmd_peer_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='ctx'>                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd = NULL;</div><div class='del'>-        struct cli_cmd        *probe_cmd = NULL;</div><div class='del'>-        int                   count     = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *probe_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        cli_out ("\ngluster peer commands");</div><div class='del'>-        cli_out ("======================\n");</div><div class='add'>+    cli_out("\ngluster peer commands");</div><div class='add'>+    cli_out("======================\n");</div><div class='ctx'> </div><div class='del'>-        cmd = GF_MALLOC (sizeof (cli_probe_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, cli_probe_cmds, sizeof (cli_probe_cmds));</div><div class='del'>-        count = (sizeof (cli_probe_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='add'>+    cmd = GF_MALLOC(sizeof(cli_probe_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, cli_probe_cmds, sizeof(cli_probe_cmds));</div><div class='add'>+    count = (sizeof(cli_probe_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='ctx'> </div><div class='del'>-        for (probe_cmd = cmd; probe_cmd-&gt;pattern; probe_cmd++)</div><div class='del'>-                cli_out ("%s - %s", probe_cmd-&gt;pattern, probe_cmd-&gt;desc);</div><div class='add'>+    for (probe_cmd = cmd; probe_cmd-&gt;pattern; probe_cmd++)</div><div class='add'>+        cli_out("%s - %s", probe_cmd-&gt;pattern, probe_cmd-&gt;desc);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (cmd);</div><div class='add'>+    GF_FREE(cmd);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        return 0;</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_probe_register (struct cli_state *state)</div><div class='add'>+cli_cmd_probe_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        struct cli_cmd *cmd = NULL;</div><div class='del'>-</div><div class='del'>-        for (cmd = cli_probe_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='ctx'> </div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    for (cmd = cli_probe_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-cmd-snapshot.c b/cli/src/cli-cmd-snapshot.c<br/>index 64cbd42ce5a..814ab82f6eb 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-snapshot.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-snapshot.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-snapshot.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-snapshot.c</a></div><div class='hunk'>@@ -20,146 +20,118 @@</div><div class='ctx'> extern rpc_clnt_prog_t *cli_rpc_prog;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_snapshot_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                           const char **words, int wordcount);</div><div class='add'>+cli_cmd_snapshot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                          const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_snapshot_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                      const char **words, int wordcount)</div><div class='add'>+cli_cmd_snapshot_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                     const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                      ret       = 0;</div><div class='del'>-        int                      parse_err = 0;</div><div class='del'>-        dict_t                  *options   = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc      = NULL;</div><div class='del'>-        call_frame_t            *frame     = NULL;</div><div class='del'>-        cli_local_t             *local     = NULL;</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable [GLUSTER_CLI_SNAP];</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (frame == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SNAP];</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (frame == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Parses the command entered by the user */</div><div class='add'>+    ret = cli_cmd_snapshot_parse(words, wordcount, &amp;options, state);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            parse_err = 1;</div><div class='add'>+        } else {</div><div class='add'>+            /* User might have cancelled the snapshot operation */</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Parses the command entered by the user */</div><div class='del'>-        ret = cli_cmd_snapshot_parse (words, wordcount, &amp;options, state);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        parse_err = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        /* User might have cancelled the snapshot operation */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; parse_err == 0)</div><div class='del'>-                cli_out ("Snapshot command failed");</div><div class='add'>+    if (ret &amp;&amp; parse_err == 0)</div><div class='add'>+        cli_out("Snapshot command failed");</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd snapshot_cmds[] = {</div><div class='del'>-        { "snapshot help",</div><div class='del'>-          cli_cmd_snapshot_help_cbk,</div><div class='del'>-          "display help for snapshot commands"</div><div class='del'>-        },</div><div class='del'>-        { "snapshot create &lt;snapname&gt; &lt;volname&gt; [no-timestamp] "</div><div class='del'>-                "[description &lt;description&gt;] [force]",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Create."</div><div class='del'>-        },</div><div class='del'>-        { "snapshot clone &lt;clonename&gt; &lt;snapname&gt;",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Clone."</div><div class='del'>-        },</div><div class='del'>-        { "snapshot restore &lt;snapname&gt;",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Restore."</div><div class='del'>-        },</div><div class='del'>-        { "snapshot status [(snapname | volume &lt;volname&gt;)]",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Status."</div><div class='del'>-        },</div><div class='del'>-        { "snapshot info [(snapname | volume &lt;volname&gt;)]",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Info."</div><div class='del'>-        },</div><div class='del'>-        { "snapshot list [volname]",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot List."</div><div class='del'>-        },</div><div class='del'>-        {"snapshot config [volname] ([snap-max-hard-limit &lt;count&gt;] "</div><div class='del'>-         "[snap-max-soft-limit &lt;percent&gt;]) "</div><div class='del'>-         "| ([auto-delete &lt;enable|disable&gt;])"</div><div class='del'>-         "| ([activate-on-create &lt;enable|disable&gt;])",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Config."</div><div class='del'>-        },</div><div class='del'>-        {"snapshot delete (all | snapname | volume &lt;volname&gt;)",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Snapshot Delete."</div><div class='del'>-        },</div><div class='del'>-        {"snapshot activate &lt;snapname&gt; [force]",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Activate snapshot volume."</div><div class='del'>-        },</div><div class='del'>-        {"snapshot deactivate &lt;snapname&gt;",</div><div class='del'>-          cli_cmd_snapshot_cbk,</div><div class='del'>-          "Deactivate snapshot volume."</div><div class='del'>-        },</div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+    {"snapshot help", cli_cmd_snapshot_help_cbk,</div><div class='add'>+     "display help for snapshot commands"},</div><div class='add'>+    {"snapshot create &lt;snapname&gt; &lt;volname&gt; [no-timestamp] "</div><div class='add'>+     "[description &lt;description&gt;] [force]",</div><div class='add'>+     cli_cmd_snapshot_cbk, "Snapshot Create."},</div><div class='add'>+    {"snapshot clone &lt;clonename&gt; &lt;snapname&gt;", cli_cmd_snapshot_cbk,</div><div class='add'>+     "Snapshot Clone."},</div><div class='add'>+    {"snapshot restore &lt;snapname&gt;", cli_cmd_snapshot_cbk, "Snapshot Restore."},</div><div class='add'>+    {"snapshot status [(snapname | volume &lt;volname&gt;)]", cli_cmd_snapshot_cbk,</div><div class='add'>+     "Snapshot Status."},</div><div class='add'>+    {"snapshot info [(snapname | volume &lt;volname&gt;)]", cli_cmd_snapshot_cbk,</div><div class='add'>+     "Snapshot Info."},</div><div class='add'>+    {"snapshot list [volname]", cli_cmd_snapshot_cbk, "Snapshot List."},</div><div class='add'>+    {"snapshot config [volname] ([snap-max-hard-limit &lt;count&gt;] "</div><div class='add'>+     "[snap-max-soft-limit &lt;percent&gt;]) "</div><div class='add'>+     "| ([auto-delete &lt;enable|disable&gt;])"</div><div class='add'>+     "| ([activate-on-create &lt;enable|disable&gt;])",</div><div class='add'>+     cli_cmd_snapshot_cbk, "Snapshot Config."},</div><div class='add'>+    {"snapshot delete (all | snapname | volume &lt;volname&gt;)",</div><div class='add'>+     cli_cmd_snapshot_cbk, "Snapshot Delete."},</div><div class='add'>+    {"snapshot activate &lt;snapname&gt; [force]", cli_cmd_snapshot_cbk,</div><div class='add'>+     "Activate snapshot volume."},</div><div class='add'>+    {"snapshot deactivate &lt;snapname&gt;", cli_cmd_snapshot_cbk,</div><div class='add'>+     "Deactivate snapshot volume."},</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_snapshot_help_cbk (struct cli_state *state,</div><div class='del'>-                           struct cli_cmd_word *in_word,</div><div class='del'>-                           const char **words,</div><div class='del'>-                           int wordcount)</div><div class='add'>+cli_cmd_snapshot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd      = NULL;</div><div class='del'>-        struct cli_cmd        *snap_cmd = NULL;</div><div class='del'>-        int                   count     = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *snap_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        cmd = GF_MALLOC (sizeof (snapshot_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, snapshot_cmds, sizeof (snapshot_cmds));</div><div class='del'>-        count = (sizeof (snapshot_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='add'>+    cmd = GF_MALLOC(sizeof(snapshot_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, snapshot_cmds, sizeof(snapshot_cmds));</div><div class='add'>+    count = (sizeof(snapshot_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\ngluster snapshot commands");</div><div class='del'>-        cli_out ("=========================\n");</div><div class='add'>+    cli_out("\ngluster snapshot commands");</div><div class='add'>+    cli_out("=========================\n");</div><div class='ctx'> </div><div class='del'>-        for (snap_cmd = cmd; snap_cmd-&gt;pattern; snap_cmd++)</div><div class='del'>-                if (_gf_false == snap_cmd-&gt;disable)</div><div class='del'>-                        cli_out ("%s - %s", snap_cmd-&gt;pattern, snap_cmd-&gt;desc);</div><div class='del'>-        cli_out ("\n");</div><div class='add'>+    for (snap_cmd = cmd; snap_cmd-&gt;pattern; snap_cmd++)</div><div class='add'>+        if (_gf_false == snap_cmd-&gt;disable)</div><div class='add'>+            cli_out("%s - %s", snap_cmd-&gt;pattern, snap_cmd-&gt;desc);</div><div class='add'>+    cli_out("\n");</div><div class='ctx'> </div><div class='del'>-        GF_FREE (cmd);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(cmd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_snapshot_register (struct cli_state *state)</div><div class='add'>+cli_cmd_snapshot_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        struct cli_cmd *cmd = NULL;</div><div class='del'>-</div><div class='del'>-        for (cmd = snapshot_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+</div><div class='add'>+    for (cmd = snapshot_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-cmd-system.c b/cli/src/cli-cmd-system.c<br/>index 995e1b1ad5c..96b229582fb 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-system.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-system.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-system.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-system.c</a></div><div class='hunk'>@@ -18,604 +18,587 @@</div><div class='ctx'> #include "cli-mem-types.h"</div><div class='ctx'> #include "protocol-common.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> extern struct rpc_clnt *global_rpc;</div><div class='ctx'> </div><div class='ctx'> extern rpc_clnt_prog_t *cli_rpc_prog;</div><div class='ctx'> </div><div class='del'>-int cli_cmd_system_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                             const char **words, int wordcount);</div><div class='add'>+int</div><div class='add'>+cli_cmd_system_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount);</div><div class='ctx'> </div><div class='del'>-int cli_cmd_copy_file_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount);</div><div class='add'>+int</div><div class='add'>+cli_cmd_copy_file_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                      const char **words, int wordcount);</div><div class='ctx'> </div><div class='del'>-int cli_cmd_sys_exec_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount);</div><div class='add'>+int</div><div class='add'>+cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                     const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_getspec_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                     const char **words, int wordcount)</div><div class='add'>+cli_cmd_getspec_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                    const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 3) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount != 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volid", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "volid", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GETSPEC];</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GETSPEC];</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (!proc &amp;&amp; ret) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-                if (wordcount &gt; 1)</div><div class='del'>-                        cli_out ("Fetching spec for volume %s failed",</div><div class='del'>-                                 (char *)words[2]);</div><div class='del'>-        }</div><div class='add'>+    if (!proc &amp;&amp; ret) {</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+        if (wordcount &gt; 1)</div><div class='add'>+            cli_out("Fetching spec for volume %s failed", (char *)words[2]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_pmap_b2p_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                 const char **words, int wordcount)</div><div class='add'>+cli_cmd_pmap_b2p_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                     const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount != 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "brick", (char *)words[3]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "brick", (char *)words[3]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_PMAP_PORTBYBRICK];</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_PMAP_PORTBYBRICK];</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (!proc &amp;&amp; ret) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-                if (wordcount &gt; 1)</div><div class='del'>-                        cli_out ("Fetching spec for volume %s failed",</div><div class='del'>-                                 (char *)words[3]);</div><div class='del'>-        }</div><div class='add'>+    if (!proc &amp;&amp; ret) {</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+        if (wordcount &gt; 1)</div><div class='add'>+            cli_out("Fetching spec for volume %s failed", (char *)words[3]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_fsm_log_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                     const char **words, int wordcount)</div><div class='add'>+cli_cmd_fsm_log_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                    const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t            *proc = NULL;</div><div class='del'>-        call_frame_t                    *frame = NULL;</div><div class='del'>-        char                            *name = "";</div><div class='del'>-</div><div class='del'>-        if ((wordcount != 4) &amp;&amp; (wordcount != 3)) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (wordcount == 4)</div><div class='del'>-                name = (char*)words[3];</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_FSM_LOG];</div><div class='del'>-        if (proc &amp;&amp; proc-&gt;fn) {</div><div class='del'>-                frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!frame)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, (void*)name);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *name = "";</div><div class='add'>+</div><div class='add'>+    if ((wordcount != 4) &amp;&amp; (wordcount != 3)) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (wordcount == 4)</div><div class='add'>+        name = (char *)words[3];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_FSM_LOG];</div><div class='add'>+    if (proc &amp;&amp; proc-&gt;fn) {</div><div class='add'>+        frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!frame)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, (void *)name);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_getwd_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                   const char **words, int wordcount)</div><div class='add'>+cli_cmd_getwd_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                  const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t            *proc = NULL;</div><div class='del'>-        call_frame_t                    *frame = NULL;</div><div class='del'>-</div><div class='del'>-        if (wordcount != 2) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GETWD];</div><div class='del'>-        if (proc &amp;&amp; proc-&gt;fn) {</div><div class='del'>-                frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!frame)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, NULL);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+</div><div class='add'>+    if (wordcount != 2) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GETWD];</div><div class='add'>+    if (proc &amp;&amp; proc-&gt;fn) {</div><div class='add'>+        frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!frame)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static dict_t *</div><div class='del'>-make_seq_dict (int argc, char **argv)</div><div class='add'>+make_seq_dict(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        char index[] = "4294967296"; // 1&lt;&lt;32</div><div class='del'>-        int i        = 0;</div><div class='del'>-        int ret      = 0;</div><div class='del'>-        dict_t *dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; argc; i++) {</div><div class='del'>-                snprintf(index, sizeof(index), "%d", i);</div><div class='del'>-                ret = dict_set_str (dict, index, argv[i]);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-                dict = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return dict;</div><div class='add'>+    char index[] = "4294967296";  // 1&lt;&lt;32</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; argc; i++) {</div><div class='add'>+        snprintf(index, sizeof(index), "%d", i);</div><div class='add'>+        ret = dict_set_str(dict, index, argv[i]);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        dict = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return dict;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_mount_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                   const char **words, int wordcount)</div><div class='add'>+cli_cmd_mount_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                  const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_procedure_t *proc = NULL;</div><div class='del'>-        call_frame_t *frame        = NULL;</div><div class='del'>-        int ret                    = -1;</div><div class='del'>-        dict_t *dict               = NULL;</div><div class='del'>-        void *dataa[]              = {NULL, NULL};</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = make_seq_dict (wordcount - 3, (char **)words + 3);</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dataa[0] = (void *)words[2];</div><div class='del'>-        dataa[1] = dict;</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_MOUNT];</div><div class='del'>-        if (proc &amp;&amp; proc-&gt;fn) {</div><div class='del'>-                frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!frame)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dataa);</div><div class='del'>-        }</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    void *dataa[] = {NULL, NULL};</div><div class='add'>+</div><div class='add'>+    if (wordcount &lt; 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = make_seq_dict(wordcount - 3, (char **)words + 3);</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dataa[0] = (void *)words[2];</div><div class='add'>+    dataa[1] = dict;</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_MOUNT];</div><div class='add'>+    if (proc &amp;&amp; proc-&gt;fn) {</div><div class='add'>+        frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!frame)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dataa);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+out:</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (!proc &amp;&amp; ret)</div><div class='del'>-                cli_out ("Mount command failed");</div><div class='add'>+    if (!proc &amp;&amp; ret)</div><div class='add'>+        cli_out("Mount command failed");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_umount_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+cli_cmd_umount_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='ctx'>                    const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_procedure_t *proc = NULL;</div><div class='del'>-        call_frame_t *frame        = NULL;</div><div class='del'>-        int ret                    = -1;</div><div class='del'>-        dict_t *dict               = NULL;</div><div class='del'>-</div><div class='del'>-        if (!(wordcount == 3 ||</div><div class='del'>-              (wordcount == 4 &amp;&amp; strcmp (words[3], "lazy") == 0))) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "path", (char *)words[2]);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_int32 (dict, "lazy", wordcount == 4);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_UMOUNT];</div><div class='del'>-        if (proc &amp;&amp; proc-&gt;fn) {</div><div class='del'>-                frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!frame)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    if (!(wordcount == 3 ||</div><div class='add'>+          (wordcount == 4 &amp;&amp; strcmp(words[3], "lazy") == 0))) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "path", (char *)words[2]);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_int32(dict, "lazy", wordcount == 4);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_UMOUNT];</div><div class='add'>+    if (proc &amp;&amp; proc-&gt;fn) {</div><div class='add'>+        frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!frame)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+out:</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (!proc &amp;&amp; ret)</div><div class='del'>-                cli_out ("Umount command failed");</div><div class='add'>+    if (!proc &amp;&amp; ret)</div><div class='add'>+        cli_out("Umount command failed");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_uuid_get_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                      const char **words, int wordcount)</div><div class='add'>+cli_cmd_uuid_get_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                     const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        dict_t                  *dict  = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        xlator_t                *this  = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (wordcount != 3) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_UUID_GET];</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, this, dict);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (wordcount != 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_UUID_GET];</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, this, dict);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("uuid get failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("uuid get failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_uuid_reset_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                        const char **words, int wordcount)</div><div class='add'>+cli_cmd_uuid_reset_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        char                    *question = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        dict_t                  *dict  = NULL;</div><div class='del'>-        xlator_t                *this  = NULL;</div><div class='del'>-</div><div class='del'>-        question = "Resetting uuid changes the uuid of local glusterd. "</div><div class='del'>-                   "Do you want to continue?";</div><div class='del'>-</div><div class='del'>-        if (wordcount != 3) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_UUID_RESET];</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-        answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-</div><div class='del'>-        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        //send NULL as argument since no dictionary is sent to glusterd</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, this, dict);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    char *question = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    question =</div><div class='add'>+        "Resetting uuid changes the uuid of local glusterd. "</div><div class='add'>+        "Do you want to continue?";</div><div class='add'>+</div><div class='add'>+    if (wordcount != 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_UUID_RESET];</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='add'>+    answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+</div><div class='add'>+    if (GF_ANSWER_NO == answer) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // send NULL as argument since no dictionary is sent to glusterd</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, this, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("uuid reset failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("uuid reset failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd cli_system_cmds[] = {</div><div class='del'>-        { "system:: getspec &lt;VOLNAME&gt;",</div><div class='del'>-          cli_cmd_getspec_cbk,</div><div class='del'>-          "fetch the volume file for the volume &lt;VOLNAME&gt;"},</div><div class='add'>+    {"system:: getspec &lt;VOLNAME&gt;", cli_cmd_getspec_cbk,</div><div class='add'>+     "fetch the volume file for the volume &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "system:: portmap brick2port &lt;BRICK&gt;",</div><div class='del'>-          cli_cmd_pmap_b2p_cbk,</div><div class='del'>-          "query which port &lt;BRICK&gt; listens on"},</div><div class='add'>+    {"system:: portmap brick2port &lt;BRICK&gt;", cli_cmd_pmap_b2p_cbk,</div><div class='add'>+     "query which port &lt;BRICK&gt; listens on"},</div><div class='ctx'> </div><div class='del'>-        { "system:: fsm log [&lt;peer-name&gt;]",</div><div class='del'>-          cli_cmd_fsm_log_cbk,</div><div class='del'>-          "display fsm transitions"},</div><div class='add'>+    {"system:: fsm log [&lt;peer-name&gt;]", cli_cmd_fsm_log_cbk,</div><div class='add'>+     "display fsm transitions"},</div><div class='ctx'> </div><div class='del'>-        { "system:: getwd",</div><div class='del'>-          cli_cmd_getwd_cbk,</div><div class='del'>-          "query glusterd work directory"},</div><div class='add'>+    {"system:: getwd", cli_cmd_getwd_cbk, "query glusterd work directory"},</div><div class='ctx'> </div><div class='del'>-        { "system:: mount &lt;label&gt; &lt;args...&gt;",</div><div class='del'>-          cli_cmd_mount_cbk,</div><div class='del'>-          "request a mount"},</div><div class='add'>+    {"system:: mount &lt;label&gt; &lt;args...&gt;", cli_cmd_mount_cbk, "request a mount"},</div><div class='ctx'> </div><div class='del'>-        { "system:: umount &lt;path&gt; [lazy]",</div><div class='del'>-          cli_cmd_umount_cbk,</div><div class='del'>-          "request an umount"},</div><div class='add'>+    {"system:: umount &lt;path&gt; [lazy]", cli_cmd_umount_cbk, "request an umount"},</div><div class='ctx'> </div><div class='del'>-        { "system:: uuid get",</div><div class='del'>-          cli_cmd_uuid_get_cbk,</div><div class='del'>-          "get uuid of glusterd"},</div><div class='add'>+    {"system:: uuid get", cli_cmd_uuid_get_cbk, "get uuid of glusterd"},</div><div class='ctx'> </div><div class='del'>-        { "system:: uuid reset",</div><div class='del'>-          cli_cmd_uuid_reset_cbk,</div><div class='del'>-          "reset the uuid of glusterd"},</div><div class='add'>+    {"system:: uuid reset", cli_cmd_uuid_reset_cbk,</div><div class='add'>+     "reset the uuid of glusterd"},</div><div class='ctx'> </div><div class='del'>-        { "system:: help",</div><div class='del'>-           cli_cmd_system_help_cbk,</div><div class='del'>-           "display help for system commands"},</div><div class='add'>+    {"system:: help", cli_cmd_system_help_cbk,</div><div class='add'>+     "display help for system commands"},</div><div class='ctx'> </div><div class='del'>-        { "system:: copy file [&lt;filename&gt;]",</div><div class='del'>-           cli_cmd_copy_file_cbk,</div><div class='del'>-           "Copy file from current node's $working_dir to "</div><div class='del'>-           "$working_dir of all cluster nodes"},</div><div class='add'>+    {"system:: copy file [&lt;filename&gt;]", cli_cmd_copy_file_cbk,</div><div class='add'>+     "Copy file from current node's $working_dir to "</div><div class='add'>+     "$working_dir of all cluster nodes"},</div><div class='ctx'> </div><div class='del'>-        { "system:: execute &lt;command&gt; &lt;args&gt;",</div><div class='del'>-           cli_cmd_sys_exec_cbk,</div><div class='del'>-           "Execute the command on all the nodes "</div><div class='del'>-           "in the cluster and display their output."},</div><div class='add'>+    {"system:: execute &lt;command&gt; &lt;args&gt;", cli_cmd_sys_exec_cbk,</div><div class='add'>+     "Execute the command on all the nodes "</div><div class='add'>+     "in the cluster and display their output."},</div><div class='ctx'> </div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_sys_exec_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                      const char **words, int wordcount)</div><div class='add'>+cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                     const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        char                   cmd_arg_name[PATH_MAX] = "";</div><div class='del'>-        char                  *command                = NULL;</div><div class='del'>-        char                  *saveptr                = NULL;</div><div class='del'>-        char                  *tmp                    = NULL;</div><div class='del'>-        int                    ret                    = -1;</div><div class='del'>-        int                    i                      = -1;</div><div class='del'>-        int                    cmd_args_count         = 0;</div><div class='del'>-        int                    in_cmd_args_count      = 0;</div><div class='del'>-        rpc_clnt_procedure_t  *proc                   = NULL;</div><div class='del'>-        call_frame_t          *frame                  = NULL;</div><div class='del'>-        dict_t                *dict                   = NULL;</div><div class='del'>-        cli_local_t           *local                  = NULL;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 3) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='add'>+    char cmd_arg_name[PATH_MAX] = "";</div><div class='add'>+    char *command = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int cmd_args_count = 0;</div><div class='add'>+    int in_cmd_args_count = 0;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    if (wordcount &lt; 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    command = strtok_r((char *)words[2], " ", &amp;saveptr);</div><div class='add'>+    if (command == NULL) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to parse command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    do {</div><div class='add'>+        tmp = strtok_r(NULL, " ", &amp;saveptr);</div><div class='add'>+        if (tmp) {</div><div class='add'>+            in_cmd_args_count++;</div><div class='add'>+            snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d",</div><div class='add'>+                     in_cmd_args_count);</div><div class='add'>+            ret = dict_set_str(dict, cmd_arg_name, tmp);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("", GF_LOG_ERROR,</div><div class='add'>+                       "Unable to set "</div><div class='add'>+                       "%s in dict",</div><div class='add'>+                       cmd_arg_name);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    } while (tmp);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    cmd_args_count = wordcount - 3;</div><div class='ctx'> </div><div class='del'>-        command = strtok_r ((char *)words[2], " ", &amp;saveptr);</div><div class='del'>-        if (command == NULL) {</div><div class='del'>-                gf_log("cli", GF_LOG_ERROR, "Failed to parse command");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        do {</div><div class='del'>-                tmp = strtok_r (NULL, " ", &amp;saveptr);</div><div class='del'>-                if (tmp) {</div><div class='del'>-                        in_cmd_args_count++;</div><div class='del'>-                        snprintf (cmd_arg_name, sizeof(cmd_arg_name),</div><div class='del'>-                                  "cmd_arg_%d", in_cmd_args_count);</div><div class='del'>-                        ret = dict_set_str (dict, cmd_arg_name, tmp);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("", GF_LOG_ERROR, "Unable to set "</div><div class='del'>-                                        "%s in dict", cmd_arg_name);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } while (tmp);</div><div class='del'>-</div><div class='del'>-        cmd_args_count = wordcount - 3;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "command", command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Unable to set command in dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "command", command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to set command in dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i=1; i &lt;= cmd_args_count; i++) {</div><div class='del'>-                in_cmd_args_count++;</div><div class='del'>-                snprintf (cmd_arg_name, sizeof(cmd_arg_name),</div><div class='del'>-                          "cmd_arg_%d", in_cmd_args_count);</div><div class='del'>-                ret = dict_set_str (dict, cmd_arg_name,</div><div class='del'>-                                    (char *)words[2+i]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR, "Unable to set %s in dict",</div><div class='del'>-                               cmd_arg_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "cmd_args_count", in_cmd_args_count);</div><div class='add'>+    for (i = 1; i &lt;= cmd_args_count; i++) {</div><div class='add'>+        in_cmd_args_count++;</div><div class='add'>+        snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d",</div><div class='add'>+                 in_cmd_args_count);</div><div class='add'>+        ret = dict_set_str(dict, cmd_arg_name, (char *)words[2 + i]);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                        "Unable to set cmd_args_count in dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "volname", "N/A");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Unable to set volname in dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SYS_EXEC];</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!frame)</div><div class='del'>-                        goto out;</div><div class='del'>-                CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, (void*)dict);</div><div class='del'>-</div><div class='del'>-                /* proc-&gt;fn is processed synchronously, which means that the</div><div class='del'>-                 * execution flow won't return here until the operation is</div><div class='del'>-                 * fully processed, including any related callback. For this</div><div class='del'>-                 * reason, it's safe to destroy the stack here, since no one</div><div class='del'>-                 * can still be using it. Additionally, it's not easy to move</div><div class='del'>-                 * the stack destroy to the callback executed after completion</div><div class='del'>-                 * of the operation because there are multiple things than can</div><div class='del'>-                 * fail even before having queued the callback, so we would</div><div class='del'>-                 * still need to destroy the stack if proc-&gt;fn returns an</div><div class='del'>-                 * error. */</div><div class='del'>-                CLI_STACK_DESTROY(frame);</div><div class='del'>-                dict = NULL;</div><div class='del'>-        }</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "Unable to set %s in dict", cmd_arg_name);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "cmd_args_count", in_cmd_args_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to set cmd_args_count in dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "volname", "N/A");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to set volname in dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SYS_EXEC];</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!frame)</div><div class='add'>+            goto out;</div><div class='add'>+        CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, (void *)dict);</div><div class='add'>+</div><div class='add'>+        /* proc-&gt;fn is processed synchronously, which means that the</div><div class='add'>+         * execution flow won't return here until the operation is</div><div class='add'>+         * fully processed, including any related callback. For this</div><div class='add'>+         * reason, it's safe to destroy the stack here, since no one</div><div class='add'>+         * can still be using it. Additionally, it's not easy to move</div><div class='add'>+         * the stack destroy to the callback executed after completion</div><div class='add'>+         * of the operation because there are multiple things than can</div><div class='add'>+         * fail even before having queued the callback, so we would</div><div class='add'>+         * still need to destroy the stack if proc-&gt;fn returns an</div><div class='add'>+         * error. */</div><div class='add'>+        CLI_STACK_DESTROY(frame);</div><div class='add'>+        dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (dict != NULL) {</div><div class='del'>-                dict_unref(dict);</div><div class='del'>-        }</div><div class='add'>+    if (dict != NULL) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_copy_file_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                       const char **words, int wordcount)</div><div class='add'>+cli_cmd_copy_file_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                      const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                    ret      = -1;</div><div class='del'>-        rpc_clnt_procedure_t  *proc     = NULL;</div><div class='del'>-        call_frame_t          *frame    = NULL;</div><div class='del'>-        char                  *filename = "";</div><div class='del'>-        dict_t                *dict     = NULL;</div><div class='del'>-        cli_local_t           *local    = NULL;</div><div class='del'>-</div><div class='del'>-        if (wordcount != 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        filename = (char*)words[3];</div><div class='del'>-        ret = dict_set_str (dict, "source", filename);</div><div class='del'>-        if (ret)</div><div class='del'>-                 gf_log ("", GF_LOG_ERROR, "Unable to set filename in dict");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "volname", "N/A");</div><div class='del'>-        if (ret)</div><div class='del'>-                 gf_log ("", GF_LOG_ERROR, "Unable to set volname in dict");</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_COPY_FILE];</div><div class='del'>-        if (proc &amp;&amp; proc-&gt;fn) {</div><div class='del'>-                frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!frame)</div><div class='del'>-                        goto out;</div><div class='del'>-                CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, (void*)dict);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *filename = "";</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    if (wordcount != 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    filename = (char *)words[3];</div><div class='add'>+    ret = dict_set_str(dict, "source", filename);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to set filename in dict");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "volname", "N/A");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to set volname in dict");</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_COPY_FILE];</div><div class='add'>+    if (proc &amp;&amp; proc-&gt;fn) {</div><div class='add'>+        frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!frame)</div><div class='add'>+            goto out;</div><div class='add'>+        CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, (void *)dict);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_system_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                         const char **words, int wordcount)</div><div class='add'>+cli_cmd_system_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd = NULL;</div><div class='del'>-        struct cli_cmd        *system_cmd = NULL;</div><div class='del'>-        int                   count     = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *system_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        cmd = GF_MALLOC (sizeof (cli_system_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, cli_system_cmds, sizeof (cli_system_cmds));</div><div class='del'>-        count = (sizeof (cli_system_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='add'>+    cmd = GF_MALLOC(sizeof(cli_system_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, cli_system_cmds, sizeof(cli_system_cmds));</div><div class='add'>+    count = (sizeof(cli_system_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='ctx'> </div><div class='del'>-        for (system_cmd = cmd; system_cmd-&gt;pattern; system_cmd++)</div><div class='del'>-                cli_out ("%s - %s", system_cmd-&gt;pattern, system_cmd-&gt;desc);</div><div class='add'>+    for (system_cmd = cmd; system_cmd-&gt;pattern; system_cmd++)</div><div class='add'>+        cli_out("%s - %s", system_cmd-&gt;pattern, system_cmd-&gt;desc);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (cmd);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(cmd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_system_register (struct cli_state *state)</div><div class='add'>+cli_cmd_system_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        struct cli_cmd *cmd = NULL;</div><div class='del'>-</div><div class='del'>-        for (cmd = cli_system_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='ctx'> </div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    for (cmd = cli_system_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c<br/>index 3d075a326bf..ab17729d182 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-volume.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd-volume.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd-volume.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd-volume.c</a></div><div class='hunk'>@@ -35,1433 +35,1431 @@ extern rpc_clnt_prog_t *cli_rpc_prog;</div><div class='ctx'> extern rpc_clnt_prog_t cli_quotad_clnt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                         const char **words, int wordcount);</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-cli_cmd_bitrot_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                         const char **words, int wordcount);</div><div class='add'>+cli_cmd_volume_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_quota_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+cli_cmd_bitrot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='ctx'>                         const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_tier_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+cli_cmd_quota_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='ctx'>                        const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_info_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                         const char **words, int wordcount)</div><div class='del'>-{</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t            *proc = NULL;</div><div class='del'>-        call_frame_t                    *frame = NULL;</div><div class='del'>-        cli_cmd_volume_get_ctx_t        ctx = {0,};</div><div class='del'>-        cli_local_t                     *local = NULL;</div><div class='del'>-        int                             sent = 0;</div><div class='del'>-        int                             parse_error = 0;</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_VOLUME];</div><div class='add'>+cli_cmd_tier_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                      const char **words, int wordcount);</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+int</div><div class='add'>+cli_cmd_volume_info_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_cmd_volume_get_ctx_t ctx = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_VOLUME];</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if ((wordcount == 2)  || (wordcount == 3 &amp;&amp;</div><div class='del'>-                                  !strcmp (words[2], "all"))) {</div><div class='del'>-                ctx.flags = GF_CLI_GET_NEXT_VOLUME;</div><div class='del'>-                proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_NEXT_VOLUME];</div><div class='del'>-        } else if (wordcount == 3) {</div><div class='del'>-                ctx.flags = GF_CLI_GET_VOLUME;</div><div class='del'>-                ctx.volname = (char *)words[2];</div><div class='del'>-                if (strlen (ctx.volname) &gt; GD_VOLUME_NAME_MAX) {</div><div class='del'>-                        cli_out ("Invalid volume name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_VOLUME];</div><div class='del'>-        } else {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                return -1;</div><div class='add'>+    if ((wordcount == 2) || (wordcount == 3 &amp;&amp; !strcmp(words[2], "all"))) {</div><div class='add'>+        ctx.flags = GF_CLI_GET_NEXT_VOLUME;</div><div class='add'>+        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_NEXT_VOLUME];</div><div class='add'>+    } else if (wordcount == 3) {</div><div class='add'>+        ctx.flags = GF_CLI_GET_VOLUME;</div><div class='add'>+        ctx.volname = (char *)words[2];</div><div class='add'>+        if (strlen(ctx.volname) &gt; GD_VOLUME_NAME_MAX) {</div><div class='add'>+            cli_out("Invalid volume name");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_VOLUME];</div><div class='add'>+    } else {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = cli_local_get ();</div><div class='add'>+    local = cli_local_get();</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;get_vol.flags = ctx.flags;</div><div class='del'>-        if (ctx.volname)</div><div class='del'>-                local-&gt;get_vol.volname = gf_strdup (ctx.volname);</div><div class='add'>+    local-&gt;get_vol.flags = ctx.flags;</div><div class='add'>+    if (ctx.volname)</div><div class='add'>+        local-&gt;get_vol.volname = gf_strdup(ctx.volname);</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, &amp;ctx);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, &amp;ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Getting Volume information failed!");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Getting Volume information failed!");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_sync_volume_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                         const char **words, int wordcount)</div><div class='add'>+cli_cmd_sync_volume_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        const char              *question = "Sync volume may make data "</div><div class='del'>-                                            "inaccessible while the sync "</div><div class='del'>-                                            "is in progress. Do you want "</div><div class='del'>-                                            "to continue?";</div><div class='del'>-</div><div class='del'>-        if ((wordcount &lt; 3) || (wordcount &gt; 4)) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    const char *question =</div><div class='add'>+        "Sync volume may make data "</div><div class='add'>+        "inaccessible while the sync "</div><div class='add'>+        "is in progress. Do you want "</div><div class='add'>+        "to continue?";</div><div class='add'>+</div><div class='add'>+    if ((wordcount &lt; 3) || (wordcount &gt; 4)) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if ((wordcount == 3) || !strcmp(words[3], "all")) {</div><div class='del'>-                ret = dict_set_int32 (dict, "flags", (int32_t)</div><div class='del'>-                                      GF_CLI_SYNC_ALL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set"</div><div class='del'>-                                "flag");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_set_str (dict, "volname", (char *) words[3]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set "</div><div class='del'>-                                "volume");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if ((wordcount == 3) || !strcmp(words[3], "all")) {</div><div class='add'>+        ret = dict_set_int32(dict, "flags", (int32_t)GF_CLI_SYNC_ALL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set"</div><div class='add'>+                   "flag");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "hostname", (char *) words[2]);</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_set_str(dict, "volname", (char *)words[3]);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to set hostname");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set "</div><div class='add'>+                   "volume");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!(state-&gt;mode &amp; GLUSTER_MODE_SCRIPT)) {</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    ret = dict_set_str(dict, "hostname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to set hostname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(state-&gt;mode &amp; GLUSTER_MODE_SCRIPT)) {</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SYNC_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SYNC_VOLUME];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume sync failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume sync failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_create_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        char                    *trans_type = NULL;</div><div class='del'>-        char                    *bricks = NULL;</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_CREATE_VOLUME];</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *trans_type = NULL;</div><div class='add'>+    char *bricks = NULL;</div><div class='add'>+</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_CREATE_VOLUME];</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_create_parse (state, words, wordcount, &amp;options,</div><div class='del'>-                                           &amp;bricks);</div><div class='add'>+    ret = cli_cmd_volume_create_parse(state, words, wordcount, &amp;options,</div><div class='add'>+                                      &amp;bricks);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "transport", &amp;trans_type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log("cli", GF_LOG_ERROR, "Unable to get transport type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(options, "transport", &amp;trans_type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get transport type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE) {</div><div class='del'>-                ret = dict_set_int32 (options, "force", _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force "</div><div class='del'>-                                "option");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE) {</div><div class='add'>+        ret = dict_set_int32(options, "force", _gf_true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set force "</div><div class='add'>+                   "option");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume create failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                gf_event (EVENT_VOLUME_CREATE, "name=%s;bricks=%s",</div><div class='del'>-                          (char *)words[2], bricks);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume create failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        gf_event(EVENT_VOLUME_CREATE, "name=%s;bricks=%s", (char *)words[2],</div><div class='add'>+                 bricks);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_delete_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_delete_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        const char              *question = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-</div><div class='del'>-        question = "Deleting volume will erase all information about the volume. "</div><div class='del'>-                   "Do you want to continue?";</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_DELETE_VOLUME];</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    const char *question = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    question =</div><div class='add'>+        "Deleting volume will erase all information about the volume. "</div><div class='add'>+        "Do you want to continue?";</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_DELETE_VOLUME];</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 3) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        volname = (char *)words[2];</div><div class='add'>+    if (wordcount != 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING, "dict set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (volname, GLUSTER_SHARED_STORAGE)) {</div><div class='del'>-                question = "Deleting the shared storage volume"</div><div class='del'>-                           "(gluster_shared_storage), will affect features "</div><div class='del'>-                           "like snapshot scheduler, geo-replication "</div><div class='del'>-                           "and NFS-Ganesha. Do you still want to "</div><div class='del'>-                           "continue?";</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "dict set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(volname, GLUSTER_SHARED_STORAGE)) {</div><div class='add'>+        question =</div><div class='add'>+            "Deleting the shared storage volume"</div><div class='add'>+            "(gluster_shared_storage), will affect features "</div><div class='add'>+            "like snapshot scheduler, geo-replication "</div><div class='add'>+            "and NFS-Ganesha. Do you still want to "</div><div class='add'>+            "continue?";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+    if (GF_ANSWER_NO == answer) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='del'>-</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume delete failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume delete failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0 &amp;&amp; GF_ANSWER_YES == answer) {</div><div class='del'>-                gf_event (EVENT_VOLUME_DELETE, "name=%s", (char *)words[2]);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0 &amp;&amp; GF_ANSWER_YES == answer) {</div><div class='add'>+        gf_event(EVENT_VOLUME_DELETE, "name=%s", (char *)words[2]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_start_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_start_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                         const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        int                     flags = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 3 || wordcount &gt; 4) {</div><div class='del'>-               cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount &lt; 3 || wordcount &gt; 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!words[2])</div><div class='del'>-                goto out;</div><div class='add'>+    if (!words[2])</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "volname", (char *)words[2]);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "dict set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(dict, "volname", (char *)words[2]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "dict set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                if (!strcmp("force", words[3])) {</div><div class='del'>-                        flags |= GF_CLI_FLAG_OP_FORCE;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        parse_error = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-        if (ret) {</div><div class='del'>-                 gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                         "dict set failed");</div><div class='del'>-                 goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        if (!strcmp("force", words[3])) {</div><div class='add'>+            flags |= GF_CLI_FLAG_OP_FORCE;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            parse_error = 1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "dict set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_START_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_START_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume start failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume start failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                gf_event (EVENT_VOLUME_START, "name=%s;force=%d",</div><div class='del'>-                          (char *)words[2], (flags &amp; GF_CLI_FLAG_OP_FORCE));</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        gf_event(EVENT_VOLUME_START, "name=%s;force=%d", (char *)words[2],</div><div class='add'>+                 (flags &amp; GF_CLI_FLAG_OP_FORCE));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_answer_t</div><div class='del'>-cli_cmd_get_confirmation (struct cli_state *state, const char *question)</div><div class='add'>+cli_cmd_get_confirmation(struct cli_state *state, const char *question)</div><div class='ctx'> {</div><div class='del'>-        char                    answer[5] = {'\0', };</div><div class='del'>-        int                     flush = '\0';</div><div class='del'>-        size_t			len;</div><div class='add'>+    char answer[5] = {</div><div class='add'>+        '\0',</div><div class='add'>+    };</div><div class='add'>+    int flush = '\0';</div><div class='add'>+    size_t len;</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;mode &amp; GLUSTER_MODE_SCRIPT)</div><div class='del'>-                return GF_ANSWER_YES;</div><div class='add'>+    if (state-&gt;mode &amp; GLUSTER_MODE_SCRIPT)</div><div class='add'>+        return GF_ANSWER_YES;</div><div class='ctx'> </div><div class='del'>-	printf ("%s (y/n) ", question);</div><div class='add'>+    printf("%s (y/n) ", question);</div><div class='ctx'> </div><div class='del'>-        if (fgets (answer, 4, stdin) == NULL) {</div><div class='del'>-                cli_out("gluster cli read error");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fgets(answer, 4, stdin) == NULL) {</div><div class='add'>+        cli_out("gluster cli read error");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	len = strlen (answer);</div><div class='add'>+    len = strlen(answer);</div><div class='ctx'> </div><div class='del'>-	if (len &amp;&amp; answer [len - 1] == '\n'){</div><div class='del'>-		answer [--len] = '\0';</div><div class='del'>-	} else {</div><div class='del'>-		do{</div><div class='del'>-			flush = getchar ();</div><div class='del'>-		}while (flush != '\n');</div><div class='del'>-	}</div><div class='add'>+    if (len &amp;&amp; answer[len - 1] == '\n') {</div><div class='add'>+        answer[--len] = '\0';</div><div class='add'>+    } else {</div><div class='add'>+        do {</div><div class='add'>+            flush = getchar();</div><div class='add'>+        } while (flush != '\n');</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (len &gt; 3)</div><div class='del'>-		goto out;</div><div class='add'>+    if (len &gt; 3)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (!strcasecmp (answer, "y") || !strcasecmp (answer, "yes"))</div><div class='del'>-		return GF_ANSWER_YES;</div><div class='add'>+    if (!strcasecmp(answer, "y") || !strcasecmp(answer, "yes"))</div><div class='add'>+        return GF_ANSWER_YES;</div><div class='ctx'> </div><div class='del'>-	else if (!strcasecmp (answer, "n") || !strcasecmp (answer, "no"))</div><div class='del'>-		return GF_ANSWER_NO;</div><div class='add'>+    else if (!strcasecmp(answer, "n") || !strcasecmp(answer, "no"))</div><div class='add'>+        return GF_ANSWER_NO;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	cli_out ("Invalid input, please enter y/n");</div><div class='add'>+    cli_out("Invalid input, please enter y/n");</div><div class='ctx'> </div><div class='del'>-	return GF_ANSWER_NO;</div><div class='add'>+    return GF_ANSWER_NO;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_stop_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_stop_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     flags   = 0;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-</div><div class='del'>-        const char *question = "Stopping volume will make its data inaccessible. "</div><div class='del'>-                               "Do you want to continue?";</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 3 || wordcount &gt; 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        volname = (char*) words[2];</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    const char *question =</div><div class='add'>+        "Stopping volume will make its data inaccessible. "</div><div class='add'>+        "Do you want to continue?";</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "dict set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount &lt; 3 || wordcount &gt; 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (volname, GLUSTER_SHARED_STORAGE)) {</div><div class='del'>-                question = "Stopping the shared storage volume"</div><div class='del'>-                           "(gluster_shared_storage), will affect features "</div><div class='del'>-                           "like snapshot scheduler, geo-replication "</div><div class='del'>-                           "and NFS-Ganesha. Do you still want to "</div><div class='del'>-                           "continue?";</div><div class='del'>-        }</div><div class='add'>+    volname = (char *)words[2];</div><div class='ctx'> </div><div class='del'>-        if (wordcount == 4) {</div><div class='del'>-                if (!strcmp("force", words[3])) {</div><div class='del'>-                        flags |= GF_CLI_FLAG_OP_FORCE;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        parse_error = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "dict set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(volname, GLUSTER_SHARED_STORAGE)) {</div><div class='add'>+        question =</div><div class='add'>+            "Stopping the shared storage volume"</div><div class='add'>+            "(gluster_shared_storage), will affect features "</div><div class='add'>+            "like snapshot scheduler, geo-replication "</div><div class='add'>+            "and NFS-Ganesha. Do you still want to "</div><div class='add'>+            "continue?";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (wordcount == 4) {</div><div class='add'>+        if (!strcmp("force", words[3])) {</div><div class='add'>+            flags |= GF_CLI_FLAG_OP_FORCE;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            parse_error = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dict set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "dict set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        answer = cli_cmd_get_confirmation (state, question);</div><div class='add'>+    answer = cli_cmd_get_confirmation(state, question);</div><div class='ctx'> </div><div class='del'>-        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (GF_ANSWER_NO == answer) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STOP_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STOP_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume stop on '%s' failed", volname);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume stop on '%s' failed", volname);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0 &amp;&amp; GF_ANSWER_YES == answer) {</div><div class='del'>-                gf_event (EVENT_VOLUME_STOP, "name=%s;force=%d",</div><div class='del'>-                          (char *)words[2], (flags &amp; GF_CLI_FLAG_OP_FORCE));</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0 &amp;&amp; GF_ANSWER_YES == answer) {</div><div class='add'>+        gf_event(EVENT_VOLUME_STOP, "name=%s;force=%d", (char *)words[2],</div><div class='add'>+                 (flags &amp; GF_CLI_FLAG_OP_FORCE));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_rename_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_rename_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount != 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "old-volname", (char *)words[2]);</div><div class='add'>+    ret = dict_set_str(dict, "old-volname", (char *)words[2]);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "new-volname", (char *)words[3]);</div><div class='add'>+    ret = dict_set_str(dict, "new-volname", (char *)words[3]);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_RENAME_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_RENAME_VOLUME];</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume rename on '%s' failed", (char *)words[2]);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume rename on '%s' failed", (char *)words[2]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_defrag_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_defrag_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                   ret     = -1;</div><div class='del'>-        rpc_clnt_procedure_t *proc    = NULL;</div><div class='del'>-        call_frame_t         *frame   = NULL;</div><div class='del'>-        dict_t               *dict = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t          *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        eventtypes_t         event = EVENT_LAST;</div><div class='add'>+    eventtypes_t event = EVENT_LAST;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        cli_out ("Command not supported on Solaris");</div><div class='del'>-        goto out;</div><div class='add'>+    cli_out("Command not supported on Solaris");</div><div class='add'>+    goto out;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_defrag_parse (words, wordcount, &amp;dict);</div><div class='add'>+    ret = cli_cmd_volume_defrag_parse(words, wordcount, &amp;dict);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_DEFRAG_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_DEFRAG_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, dict);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume rebalance failed");</div><div class='del'>-        } else {</div><div class='del'>-</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume rebalance failed");</div><div class='add'>+    } else {</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-                if (!(strcmp (words[wordcount-1], "start")) ||</div><div class='del'>-                        !(strcmp (words[wordcount-1], "force")))  {</div><div class='del'>-                        event = EVENT_VOLUME_REBALANCE_START;</div><div class='del'>-                } else if (!strcmp (words[wordcount-1], "stop")) {</div><div class='del'>-                        event = EVENT_VOLUME_REBALANCE_STOP;</div><div class='del'>-                }</div><div class='add'>+        if (!(strcmp(words[wordcount - 1], "start")) ||</div><div class='add'>+            !(strcmp(words[wordcount - 1], "force"))) {</div><div class='add'>+            event = EVENT_VOLUME_REBALANCE_START;</div><div class='add'>+        } else if (!strcmp(words[wordcount - 1], "stop")) {</div><div class='add'>+            event = EVENT_VOLUME_REBALANCE_STOP;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (event != EVENT_LAST)</div><div class='del'>-                        gf_event (event, "volume=%s", (char *)words[2]);</div><div class='add'>+        if (event != EVENT_LAST)</div><div class='add'>+            gf_event(event, "volume=%s", (char *)words[2]);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_reset_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_reset_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                         const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        int                      ret1    = -1;</div><div class='del'>-        char                    *tmp_opt = NULL;</div><div class='add'>+    int ret1 = -1;</div><div class='add'>+    char *tmp_opt = NULL;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_RESET_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_RESET_VOLUME];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_reset_parse (words, wordcount, &amp;options);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_volume_reset_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume reset failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume reset failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret1 = dict_get_str (options, "key", &amp;tmp_opt);</div><div class='del'>-                if (ret1)</div><div class='del'>-                        tmp_opt = "";</div><div class='del'>-</div><div class='del'>-                gf_event (EVENT_VOLUME_RESET, "name=%s;option=%s",</div><div class='del'>-                          (char *)words[2],</div><div class='del'>-                          tmp_opt);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret1 = dict_get_str(options, "key", &amp;tmp_opt);</div><div class='add'>+        if (ret1)</div><div class='add'>+            tmp_opt = "";</div><div class='add'>+</div><div class='add'>+        gf_event(EVENT_VOLUME_RESET, "name=%s;option=%s", (char *)words[2],</div><div class='add'>+                 tmp_opt);</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_profile_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_profile_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                           const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='ctx'> </div><div class='del'>-        int                     ret      = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc    = NULL;</div><div class='del'>-        call_frame_t            *frame   = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_profile_parse (words, wordcount, &amp;options);</div><div class='add'>+    ret = cli_cmd_volume_profile_parse(words, wordcount, &amp;options);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_PROFILE_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_PROFILE_VOLUME];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume profile failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume profile failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_set_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                        const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_set_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='ctx'> </div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        char                    *op_errstr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *op_errstr = NULL;</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        int                      ret1          = -1;</div><div class='del'>-        int                      i             = 1;</div><div class='del'>-        char                     dict_key[50]  = {0,};</div><div class='del'>-        char                    *tmp_opt       = NULL;</div><div class='del'>-        char                    *opts_str      = NULL;</div><div class='del'>-        int                      num_options   = 0;</div><div class='add'>+    int ret1 = -1;</div><div class='add'>+    int i = 1;</div><div class='add'>+    char dict_key[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *tmp_opt = NULL;</div><div class='add'>+    char *opts_str = NULL;</div><div class='add'>+    int num_options = 0;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SET_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_SET_VOLUME];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_set_parse (state, words, wordcount,</div><div class='del'>-                                        &amp;options, &amp;op_errstr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (op_errstr) {</div><div class='del'>-                    cli_err ("%s", op_errstr);</div><div class='del'>-                    GF_FREE (op_errstr);</div><div class='del'>-                } else</div><div class='del'>-                    cli_usage_out (word-&gt;pattern);</div><div class='add'>+    ret = cli_cmd_volume_set_parse(state, words, wordcount, &amp;options,</div><div class='add'>+                                   &amp;op_errstr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (op_errstr) {</div><div class='add'>+            cli_err("%s", op_errstr);</div><div class='add'>+            GF_FREE(op_errstr);</div><div class='add'>+        } else</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='ctx'> </div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume set failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume set failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        if (ret == 0 &amp;&amp; strcmp(words[2], "help") != 0) {</div><div class='del'>-                ret1 = dict_get_int32 (options, "count", &amp;num_options);</div><div class='del'>-                if (ret1)</div><div class='del'>-                        num_options = 0;</div><div class='del'>-                else</div><div class='del'>-                        num_options = num_options/2;</div><div class='add'>+    if (ret == 0 &amp;&amp; strcmp(words[2], "help") != 0) {</div><div class='add'>+        ret1 = dict_get_int32(options, "count", &amp;num_options);</div><div class='add'>+        if (ret1)</div><div class='add'>+            num_options = 0;</div><div class='add'>+        else</div><div class='add'>+            num_options = num_options / 2;</div><div class='ctx'> </div><div class='del'>-                /* Initialize opts_str */</div><div class='del'>-                opts_str = gf_strdup ("");</div><div class='add'>+        /* Initialize opts_str */</div><div class='add'>+        opts_str = gf_strdup("");</div><div class='ctx'> </div><div class='del'>-                /* Prepare String in format options=KEY1,VALUE1,KEY2,VALUE2 */</div><div class='del'>-                for (i = 1; i &lt;= num_options; i++) {</div><div class='del'>-                        sprintf (dict_key, "key%d", i);</div><div class='del'>-                        ret1 = dict_get_str (options, dict_key, &amp;tmp_opt);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp_opt = "";</div><div class='add'>+        /* Prepare String in format options=KEY1,VALUE1,KEY2,VALUE2 */</div><div class='add'>+        for (i = 1; i &lt;= num_options; i++) {</div><div class='add'>+            sprintf(dict_key, "key%d", i);</div><div class='add'>+            ret1 = dict_get_str(options, dict_key, &amp;tmp_opt);</div><div class='add'>+            if (ret1)</div><div class='add'>+                tmp_opt = "";</div><div class='ctx'> </div><div class='del'>-                        gf_asprintf (&amp;opts_str, "%s,%s", opts_str, tmp_opt);</div><div class='add'>+            gf_asprintf(&amp;opts_str, "%s,%s", opts_str, tmp_opt);</div><div class='ctx'> </div><div class='del'>-                        sprintf (dict_key, "value%d", i);</div><div class='del'>-                        ret1 = dict_get_str (options, dict_key, &amp;tmp_opt);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp_opt = "";</div><div class='add'>+            sprintf(dict_key, "value%d", i);</div><div class='add'>+            ret1 = dict_get_str(options, dict_key, &amp;tmp_opt);</div><div class='add'>+            if (ret1)</div><div class='add'>+                tmp_opt = "";</div><div class='ctx'> </div><div class='del'>-                        gf_asprintf (&amp;opts_str, "%s,%s", opts_str, tmp_opt);</div><div class='del'>-                }</div><div class='add'>+            gf_asprintf(&amp;opts_str, "%s,%s", opts_str, tmp_opt);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_VOLUME_SET, "name=%s;options=%s",</div><div class='del'>-                          (char *)words[2],</div><div class='del'>-                          opts_str);</div><div class='add'>+        gf_event(EVENT_VOLUME_SET, "name=%s;options=%s", (char *)words[2],</div><div class='add'>+                 opts_str);</div><div class='ctx'> </div><div class='del'>-                /* Allocated by gf_strdup and gf_asprintf */</div><div class='del'>-                GF_FREE (opts_str);</div><div class='del'>-        }</div><div class='add'>+        /* Allocated by gf_strdup and gf_asprintf */</div><div class='add'>+        GF_FREE(opts_str);</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-int</div><div class='del'>-cli_event_remove_brick_str (dict_t *options, char **event_str,</div><div class='del'>-                            eventtypes_t *event)</div><div class='add'>+static int</div><div class='add'>+cli_event_remove_brick_str(dict_t *options, char **event_str,</div><div class='add'>+                           eventtypes_t *event)</div><div class='ctx'> {</div><div class='del'>-        int           ret             = -1;</div><div class='del'>-        char          *bricklist      = NULL;</div><div class='del'>-        char          *brick          = NULL;</div><div class='del'>-        char          *volname        = NULL;</div><div class='del'>-        char           key[256]       = {0,};</div><div class='del'>-        const char    *eventstrformat = "volume=%s;bricks=%s";</div><div class='del'>-        int32_t        command        = 0;</div><div class='del'>-        int32_t        i              = 1;</div><div class='del'>-        int32_t        count          = 0;</div><div class='del'>-        int32_t        eventstrlen    = 1;</div><div class='del'>-        int            bricklen      = 0;</div><div class='del'>-        char          *tmp_ptr        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!options || !event_str || !event)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *bricklist = NULL;</div><div class='add'>+    char *brick = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    const char *eventstrformat = "volume=%s;bricks=%s";</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+    int32_t i = 1;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    int32_t eventstrlen = 1;</div><div class='add'>+    int bricklen = 0;</div><div class='add'>+    char *tmp_ptr = NULL;</div><div class='add'>+</div><div class='add'>+    if (!options || !event_str || !event)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "volname", &amp;volname);</div><div class='del'>-        if (ret || !volname) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch volname");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* Get the list of bricks for the event */</div><div class='del'>-        ret = dict_get_int32 (options, "command", &amp;command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch command");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(options, "volname", &amp;volname);</div><div class='add'>+    if (ret || !volname) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to fetch volname");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* Get the list of bricks for the event */</div><div class='add'>+    ret = dict_get_int32(options, "command", &amp;command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to fetch command");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (command) {</div><div class='add'>+    switch (command) {</div><div class='ctx'>         case GF_OP_CMD_START:</div><div class='del'>-                *event = EVENT_VOLUME_REMOVE_BRICK_START;</div><div class='del'>-                break;</div><div class='add'>+            *event = EVENT_VOLUME_REMOVE_BRICK_START;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_COMMIT:</div><div class='del'>-                *event = EVENT_VOLUME_REMOVE_BRICK_COMMIT;</div><div class='del'>-                break;</div><div class='add'>+            *event = EVENT_VOLUME_REMOVE_BRICK_COMMIT;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_COMMIT_FORCE:</div><div class='del'>-                *event = EVENT_VOLUME_REMOVE_BRICK_FORCE;</div><div class='del'>-                break;</div><div class='add'>+            *event = EVENT_VOLUME_REMOVE_BRICK_FORCE;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_STOP:</div><div class='del'>-                *event = EVENT_VOLUME_REMOVE_BRICK_STOP;</div><div class='del'>-                break;</div><div class='add'>+            *event = EVENT_VOLUME_REMOVE_BRICK_STOP;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                *event = EVENT_LAST;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            *event = EVENT_LAST;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='add'>+    ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (*event == EVENT_LAST) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (*event == EVENT_LAST) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* I could just get this from words[] but this is cleaner in case the</div><div class='del'>-         * format changes  */</div><div class='del'>-        while (i) {</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d", i);</div><div class='del'>-                ret = dict_get_str (options, key, &amp;brick);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                eventstrlen += strlen (brick) + 1;</div><div class='del'>-                i++;</div><div class='add'>+    /* I could just get this from words[] but this is cleaner in case the</div><div class='add'>+     * format changes  */</div><div class='add'>+    while (i) {</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d", i);</div><div class='add'>+        ret = dict_get_str(options, key, &amp;brick);</div><div class='add'>+        if (ret) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        eventstrlen += strlen(brick) + 1;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        count = --i;</div><div class='add'>+    count = --i;</div><div class='ctx'> </div><div class='del'>-        eventstrlen += 1;</div><div class='add'>+    eventstrlen += 1;</div><div class='ctx'> </div><div class='del'>-        bricklist = GF_CALLOC (eventstrlen, sizeof (char), gf_common_mt_char);</div><div class='del'>-        if (!bricklist) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    bricklist = GF_CALLOC(eventstrlen, sizeof(char), gf_common_mt_char);</div><div class='add'>+    if (!bricklist) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp_ptr = bricklist;</div><div class='add'>+    tmp_ptr = bricklist;</div><div class='ctx'> </div><div class='del'>-        i = 1;</div><div class='del'>-        while (i &lt;= count) {</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d", i);</div><div class='del'>-                ret = dict_get_str (options, key, &amp;brick);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                snprintf (tmp_ptr, eventstrlen, "%s ", brick);</div><div class='del'>-                bricklen = strlen (brick);</div><div class='del'>-                eventstrlen -= (bricklen + 1);</div><div class='del'>-                tmp_ptr += (bricklen + 1);</div><div class='del'>-                i++;</div><div class='add'>+    i = 1;</div><div class='add'>+    while (i &lt;= count) {</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d", i);</div><div class='add'>+        ret = dict_get_str(options, key, &amp;brick);</div><div class='add'>+        if (ret) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        snprintf(tmp_ptr, eventstrlen, "%s ", brick);</div><div class='add'>+        bricklen = strlen(brick);</div><div class='add'>+        eventstrlen -= (bricklen + 1);</div><div class='add'>+        tmp_ptr += (bricklen + 1);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                gf_asprintf (event_str, eventstrformat, volname,</div><div class='del'>-                             bricklist);</div><div class='del'>-        } else {</div><div class='del'>-                gf_asprintf (event_str, eventstrformat, volname,</div><div class='del'>-                             "&lt;unavailable&gt;");</div><div class='del'>-        }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_asprintf(event_str, eventstrformat, volname, bricklist);</div><div class='add'>+    } else {</div><div class='add'>+        gf_asprintf(event_str, eventstrformat, volname, "&lt;unavailable&gt;");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (bricklist);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(bricklist);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_add_brick_cbk (struct cli_state *state,</div><div class='del'>-                              struct cli_cmd_word *word, const char **words,</div><div class='del'>-                              int wordcount)</div><div class='add'>+cli_cmd_volume_add_brick_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                             const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        char                    *event_str = NULL;</div><div class='del'>-        char                    *bricks = NULL;</div><div class='del'>-        const char              *eventstrformat = "volume=%s;bricks=%s";</div><div class='add'>+    char *event_str = NULL;</div><div class='add'>+    char *bricks = NULL;</div><div class='add'>+    const char *eventstrformat = "volume=%s;bricks=%s";</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        const char *question = "Changing the 'stripe count' of the volume is "</div><div class='del'>-                "not a supported feature. In some cases it may result in data "</div><div class='del'>-                "loss on the volume. Also there may be issues with regular "</div><div class='del'>-                "filesystem operations on the volume after the change. Do you "</div><div class='del'>-                "really want to continue with 'stripe' count option ? ";</div><div class='add'>+    const char *question =</div><div class='add'>+        "Changing the 'stripe count' of the volume is "</div><div class='add'>+        "not a supported feature. In some cases it may result in data "</div><div class='add'>+        "loss on the volume. Also there may be issues with regular "</div><div class='add'>+        "filesystem operations on the volume after the change. Do you "</div><div class='add'>+        "really want to continue with 'stripe' count option ? ";</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_add_brick_parse (state, words, wordcount, &amp;options,</div><div class='del'>-                                              0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_volume_add_brick_parse(state, words, wordcount, &amp;options, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: there are challenges in supporting changing of</div><div class='del'>-           stripe-count, until it is properly supported give warning to user */</div><div class='del'>-        if (dict_get (options, "stripe-count")) {</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='add'>+    /* TODO: there are challenges in supporting changing of</div><div class='add'>+       stripe-count, until it is properly supported give warning to user */</div><div class='add'>+    if (dict_get(options, "stripe-count")) {</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question);</div><div class='ctx'> </div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        /* Get the list of bricks for the event */</div><div class='add'>+    /* Get the list of bricks for the event */</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "bricks", &amp;bricks);</div><div class='add'>+    ret = dict_get_str(options, "bricks", &amp;bricks);</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                gf_asprintf (&amp;event_str, eventstrformat, (char *)words[2],</div><div class='del'>-                            &amp;bricks[1] /*Skip leading space*/);</div><div class='del'>-        } else {</div><div class='del'>-                gf_asprintf (&amp;event_str, eventstrformat, (char *)words[2],</div><div class='del'>-                            "&lt;unavailable&gt;");</div><div class='del'>-        }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_asprintf(&amp;event_str, eventstrformat, (char *)words[2],</div><div class='add'>+                    &amp;bricks[1] /*Skip leading space*/);</div><div class='add'>+    } else {</div><div class='add'>+        gf_asprintf(&amp;event_str, eventstrformat, (char *)words[2],</div><div class='add'>+                    "&lt;unavailable&gt;");</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE) {</div><div class='del'>-                ret = dict_set_int32 (options, "force", _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force "</div><div class='del'>-                                "option");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE) {</div><div class='add'>+        ret = dict_set_int32(options, "force", _gf_true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set force "</div><div class='add'>+                   "option");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_ADD_BRICK];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_ADD_BRICK];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume add-brick failed");</div><div class='del'>-        } else {</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume add-brick failed");</div><div class='add'>+    } else {</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-                gf_event (EVENT_VOLUME_ADD_BRICK, "%s", event_str);</div><div class='add'>+        gf_event(EVENT_VOLUME_ADD_BRICK, "%s", event_str);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        GF_FREE(event_str);</div><div class='add'>+    GF_FREE(event_str);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_tier_validate_replica_type (dict_t *dict, int type)</div><div class='add'>+cli_tier_validate_replica_type(dict_t *dict, int type)</div><div class='ctx'> {</div><div class='add'>+    int brick_count = -1;</div><div class='add'>+    int replica_count = 1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        int             brick_count             = -1;</div><div class='del'>-        int             replica_count           = 1;</div><div class='del'>-        int             ret                     = -1;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get brick count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "replica-count", &amp;replica_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "Failed to get replica count. "</div><div class='del'>-                        "Defaulting to one");</div><div class='del'>-                replica_count = 1;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get brick count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "replica-count", &amp;replica_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+               "Failed to get replica count. "</div><div class='add'>+               "Defaulting to one");</div><div class='add'>+        replica_count = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Change the calculation of sub_count once attach-tier support</div><div class='add'>+     * disperse volume.</div><div class='add'>+     * sub_count = disperse_count for disperse volume</div><div class='add'>+     * */</div><div class='add'>+</div><div class='add'>+    if (brick_count % replica_count) {</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_REPLICATE)</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks is not a multiple of "</div><div class='add'>+                "replica count");</div><div class='add'>+        else if (type == GF_CLUSTER_TYPE_DISPERSE)</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks is not a multiple of "</div><div class='add'>+                "disperse count");</div><div class='add'>+        else</div><div class='add'>+            cli_err(</div><div class='add'>+                "number of bricks given doesn't match "</div><div class='add'>+                "required count");</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Change the calculation of sub_count once attach-tier support</div><div class='del'>-         * disperse volume.</div><div class='del'>-         * sub_count = disperse_count for disperse volume</div><div class='del'>-         * */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (brick_count % replica_count) {</div><div class='del'>-             if (type == GF_CLUSTER_TYPE_REPLICATE)</div><div class='del'>-                     cli_err ("number of bricks is not a multiple of "</div><div class='del'>-                              "replica count");</div><div class='del'>-             else if (type == GF_CLUSTER_TYPE_DISPERSE)</div><div class='del'>-                     cli_err ("number of bricks is not a multiple of "</div><div class='del'>-                              "disperse count");</div><div class='del'>-             else</div><div class='del'>-                     cli_err ("number of bricks given doesn't match "</div><div class='del'>-                              "required count");</div><div class='del'>-</div><div class='del'>-             ret = -1;</div><div class='del'>-             goto out;</div><div class='del'>-     }</div><div class='del'>-        ret = 0;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-do_cli_cmd_volume_attach_tier (struct cli_state *state,</div><div class='del'>-                                struct cli_cmd_word *word, const char **words,</div><div class='del'>-                                int wordcount)</div><div class='add'>+do_cli_cmd_volume_attach_tier(struct cli_state *state,</div><div class='add'>+                              struct cli_cmd_word *word, const char **words,</div><div class='add'>+                              int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        int                     type = 0;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int type = 0;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_add_brick_parse (state, words, wordcount, &amp;options,</div><div class='del'>-                                              &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_volume_add_brick_parse(state, words, wordcount, &amp;options,</div><div class='add'>+                                         &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Merge this check when attach-tier has it's own cli parse function.</div><div class='add'>+     */</div><div class='add'>+    ret = cli_tier_validate_replica_type(options, type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Merge this check when attach-tier has it's own cli parse function.</div><div class='del'>-         */</div><div class='del'>-        ret = cli_tier_validate_replica_type (options, type);</div><div class='add'>+    if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE) {</div><div class='add'>+        ret = dict_set_int32(options, "force", _gf_true);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set force "</div><div class='add'>+                   "option");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE) {</div><div class='del'>-                ret = dict_set_int32 (options, "force", _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set force "</div><div class='del'>-                                "option");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (options, "attach-tier", 1);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "attach-tier", 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (options, "hot-type", type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "hot-type", type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_ADD_TIER_BRICK];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_ADD_TIER_BRICK];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("attach-tier failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("attach-tier failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-do_cli_cmd_volume_detach_tier (struct cli_state *state,</div><div class='add'>+do_cli_cmd_volume_detach_tier(struct cli_state *state,</div><div class='ctx'>                               struct cli_cmd_word *word, const char **words,</div><div class='ctx'>                               int wordcount, gf_boolean_t *aborted)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        int                     need_question = 0;</div><div class='del'>-</div><div class='del'>-        const char *question = "Removing tier can result in data loss. "</div><div class='del'>-                               "Do you want to Continue?";</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int need_question = 0;</div><div class='add'>+</div><div class='add'>+    const char *question =</div><div class='add'>+        "Removing tier can result in data loss. "</div><div class='add'>+        "Do you want to Continue?";</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_detach_tier_parse(words, wordcount, &amp;options,</div><div class='del'>-                                               &amp;need_question);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_volume_detach_tier_parse(words, wordcount, &amp;options,</div><div class='add'>+                                           &amp;need_question);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (options, "force", 1);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "force", 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (options, "count", 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "count", 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *aborted = _gf_false;</div><div class='add'>+    *aborted = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!(state-&gt;mode &amp; GLUSTER_MODE_SCRIPT) &amp;&amp; need_question) {</div><div class='del'>-                /* we need to ask question only in case of 'commit or force' */</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        *aborted = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (!(state-&gt;mode &amp; GLUSTER_MODE_SCRIPT) &amp;&amp; need_question) {</div><div class='add'>+        /* we need to ask question only in case of 'commit or force' */</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            *aborted = _gf_true;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_REMOVE_TIER_BRICK];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_REMOVE_TIER_BRICK];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume detach tier failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume detach tier failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_tier_cbk (struct cli_state *state,</div><div class='del'>-                         struct cli_cmd_word *word, const char **words,</div><div class='del'>-                         int wordcount)</div><div class='add'>+cli_cmd_volume_tier_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                      ret     = -1;</div><div class='del'>-        call_frame_t            *frame   = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc    = NULL;</div><div class='del'>-        cli_local_t             *local   = NULL;</div><div class='del'>-        int                      i       = 0;</div><div class='del'>-        eventtypes_t            event    = EVENT_LAST;</div><div class='del'>-        gf_boolean_t            aborted  = _gf_false;</div><div class='del'>-        gf_answer_t             answer   = GF_ANSWER_NO;</div><div class='del'>-</div><div class='del'>-        const char *detach_question = "gluster volume detach-tier &lt;VOLNAME&gt; "</div><div class='del'>-                               "&lt;start|stop|status|commit|force&gt; is "</div><div class='del'>-                               "deprecated. Use the new command \'"</div><div class='del'>-                               "gluster volume tier &lt;VOLNAME&gt; detach &lt;start|"</div><div class='del'>-                               "stop|status|commit|force&gt;\'\n"</div><div class='del'>-                               "Do you want to Continue?";</div><div class='del'>-</div><div class='del'>-        const char *attach_question = "gluster volume attach-tier &lt;VOLNAME&gt; "</div><div class='del'>-                               "[&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;... is "</div><div class='del'>-                               "deprecated. Use the new command \'"</div><div class='del'>-                               "gluster volume tier &lt;VOLNAME&gt; attach [&lt;replica"</div><div class='del'>-                               " COUNT&gt;] &lt;NEW-BRICK&gt;... [force]\'\n"</div><div class='del'>-                               "Do you want to Continue?";</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 4) {</div><div class='del'>-                if (wordcount == 3 &amp;&amp; !strcmp(words[2], "help")) {</div><div class='del'>-                        cli_cmd_tier_help_cbk (state, word, words, wordcount);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    eventtypes_t event = EVENT_LAST;</div><div class='add'>+    gf_boolean_t aborted = _gf_false;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+</div><div class='add'>+    const char *detach_question =</div><div class='add'>+        "gluster volume detach-tier &lt;VOLNAME&gt; "</div><div class='add'>+        "&lt;start|stop|status|commit|force&gt; is "</div><div class='add'>+        "deprecated. Use the new command \'"</div><div class='add'>+        "gluster volume tier &lt;VOLNAME&gt; detach &lt;start|"</div><div class='add'>+        "stop|status|commit|force&gt;\'\n"</div><div class='add'>+        "Do you want to Continue?";</div><div class='add'>+</div><div class='add'>+    const char *attach_question =</div><div class='add'>+        "gluster volume attach-tier &lt;VOLNAME&gt; "</div><div class='add'>+        "[&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;... is "</div><div class='add'>+        "deprecated. Use the new command \'"</div><div class='add'>+        "gluster volume tier &lt;VOLNAME&gt; attach [&lt;replica"</div><div class='add'>+        " COUNT&gt;] &lt;NEW-BRICK&gt;... [force]\'\n"</div><div class='add'>+        "Do you want to Continue?";</div><div class='add'>+</div><div class='add'>+    if (wordcount &lt; 4) {</div><div class='add'>+        if (wordcount == 3 &amp;&amp; !strcmp(words[2], "help")) {</div><div class='add'>+            cli_cmd_tier_help_cbk(state, word, words, wordcount);</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp(words[1], "detach-tier")) {</div><div class='del'>-                /* we need to ask question when older command is used */</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, detach_question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = do_cli_cmd_volume_detach_tier (state, word,</div><div class='del'>-                                                     words, wordcount,</div><div class='del'>-                                                     &amp;aborted);</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (!strcmp(words[3], "detach")) {</div><div class='del'>-                for (i = 3; i &lt; wordcount; i++)</div><div class='del'>-                        words[i] = words[i+1];</div><div class='del'>-</div><div class='del'>-                ret = do_cli_cmd_volume_detach_tier (state, word,</div><div class='del'>-                                                     words, wordcount-1,</div><div class='del'>-                                                     &amp;aborted);</div><div class='del'>-                if (!aborted) {</div><div class='del'>-                        if (!strcmp (words[wordcount-2], "commit")) {</div><div class='del'>-                                event = EVENT_TIER_DETACH_COMMIT;</div><div class='del'>-                        } else if (!strcmp (words[wordcount-2], "start")) {</div><div class='del'>-                                event = EVENT_TIER_DETACH_START;</div><div class='del'>-                        } else if (!strcmp (words[wordcount-2], "stop")) {</div><div class='del'>-                                event = EVENT_TIER_DETACH_STOP;</div><div class='del'>-                        } else if (!strcmp (words[wordcount-2], "force")) {</div><div class='del'>-                                event = EVENT_TIER_DETACH_FORCE;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        } else if (!strcmp(words[1], "attach-tier")) {</div><div class='del'>-                /* we need to ask question when the older command is used */</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, attach_question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = do_cli_cmd_volume_attach_tier (state, word,</div><div class='del'>-                                                     words, wordcount);</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (!strcmp(words[3], "attach")) {</div><div class='del'>-                for (i = 3; i &lt; wordcount; i++)</div><div class='del'>-                        words[i] = words[i+1];</div><div class='del'>-</div><div class='del'>-                ret = do_cli_cmd_volume_attach_tier (state, word,</div><div class='del'>-                                                     words, wordcount-1);</div><div class='del'>-                if (!strcmp (words[wordcount-2], "force")) {</div><div class='del'>-                        event = EVENT_TIER_ATTACH_FORCE;</div><div class='del'>-                } else {</div><div class='del'>-                        event = EVENT_TIER_ATTACH;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    if (!strcmp(words[1], "detach-tier")) {</div><div class='add'>+        /* we need to ask question when older command is used */</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, detach_question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = do_cli_cmd_volume_detach_tier(state, word, words, wordcount,</div><div class='add'>+                                            &amp;aborted);</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (!strcmp(words[3], "detach")) {</div><div class='add'>+        for (i = 3; i &lt; wordcount; i++)</div><div class='add'>+            words[i] = words[i + 1];</div><div class='add'>+</div><div class='add'>+        ret = do_cli_cmd_volume_detach_tier(state, word, words, wordcount - 1,</div><div class='add'>+                                            &amp;aborted);</div><div class='add'>+        if (!aborted) {</div><div class='add'>+            if (!strcmp(words[wordcount - 2], "commit")) {</div><div class='add'>+                event = EVENT_TIER_DETACH_COMMIT;</div><div class='add'>+            } else if (!strcmp(words[wordcount - 2], "start")) {</div><div class='add'>+                event = EVENT_TIER_DETACH_START;</div><div class='add'>+            } else if (!strcmp(words[wordcount - 2], "stop")) {</div><div class='add'>+                event = EVENT_TIER_DETACH_STOP;</div><div class='add'>+            } else if (!strcmp(words[wordcount - 2], "force")) {</div><div class='add'>+                event = EVENT_TIER_DETACH_FORCE;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_tier_parse (words, wordcount, &amp;options);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='add'>+    } else if (!strcmp(words[1], "attach-tier")) {</div><div class='add'>+        /* we need to ask question when the older command is used */</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, attach_question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = do_cli_cmd_volume_attach_tier(state, word, words, wordcount);</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (!strcmp(words[3], "attach")) {</div><div class='add'>+        for (i = 3; i &lt; wordcount; i++)</div><div class='add'>+            words[i] = words[i + 1];</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (words[wordcount-1], "start")) {</div><div class='del'>-                event = EVENT_TIER_START;</div><div class='add'>+        ret = do_cli_cmd_volume_attach_tier(state, word, words, wordcount - 1);</div><div class='add'>+        if (!strcmp(words[wordcount - 2], "force")) {</div><div class='add'>+            event = EVENT_TIER_ATTACH_FORCE;</div><div class='ctx'>         } else {</div><div class='del'>-                if (!strcmp (words[wordcount-2], "start") &amp;&amp;</div><div class='del'>-                    !strcmp (words[wordcount-1], "force")) {</div><div class='del'>-                        event = EVENT_TIER_START_FORCE;</div><div class='del'>-                }</div><div class='add'>+            event = EVENT_TIER_ATTACH;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_TIER];</div><div class='add'>+    ret = cli_cmd_volume_tier_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!strcmp(words[wordcount - 1], "start")) {</div><div class='add'>+        event = EVENT_TIER_START;</div><div class='add'>+    } else {</div><div class='add'>+        if (!strcmp(words[wordcount - 2], "start") &amp;&amp;</div><div class='add'>+            !strcmp(words[wordcount - 1], "force")) {</div><div class='add'>+            event = EVENT_TIER_START_FORCE;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_TIER];</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='add'>+</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_out ("Tier command failed");</div><div class='del'>-        } else {</div><div class='del'>-                if (event != EVENT_LAST) {</div><div class='del'>-                        gf_event (event, "vol=%s", words[2]);</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_out("Tier command failed");</div><div class='add'>+    } else {</div><div class='add'>+        if (event != EVENT_LAST) {</div><div class='add'>+            gf_event(event, "vol=%s", words[2]);</div><div class='ctx'>         }</div><div class='del'>-        if (options)</div><div class='del'>-                dict_unref (options);</div><div class='add'>+    }</div><div class='add'>+    if (options)</div><div class='add'>+        dict_unref(options);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_get_soft_limit (dict_t *options, const char **words, dict_t *xdata)</div><div class='add'>+cli_get_soft_limit(dict_t *options, const char **words, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t            *frame          = NULL;</div><div class='del'>-        cli_local_t             *local          = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc           = NULL;</div><div class='del'>-        char                    *default_sl     = NULL;</div><div class='del'>-        char                    *default_sl_dup = NULL;</div><div class='del'>-        int                      ret  = -1;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        //We need a ref on @options to prevent CLI_STACK_DESTROY</div><div class='del'>-        //from destroying it prematurely.</div><div class='del'>-        dict_ref (options);</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_QUOTA];</div><div class='del'>-        ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (options, "default-soft-limit", &amp;default_sl);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get default soft limit");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    char *default_sl = NULL;</div><div class='add'>+    char *default_sl_dup = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // We need a ref on @options to prevent CLI_STACK_DESTROY</div><div class='add'>+    // from destroying it prematurely.</div><div class='add'>+    dict_ref(options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_QUOTA];</div><div class='add'>+    ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(options, "default-soft-limit", &amp;default_sl);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get default soft limit");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        default_sl_dup = gf_strdup (default_sl);</div><div class='del'>-        if (!default_sl_dup) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    default_sl_dup = gf_strdup(default_sl);</div><div class='add'>+    if (!default_sl_dup) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (xdata, "default-soft-limit", default_sl_dup);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to set default soft limit");</div><div class='del'>-                GF_FREE (default_sl_dup);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_dynstr(xdata, "default-soft-limit", default_sl_dup);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to set default soft limit");</div><div class='add'>+        GF_FREE(default_sl_dup);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Checks if at least one limit has been set on the volume</div><div class='hunk'>@@ -1469,1743 +1467,1728 @@ out:</div><div class='ctx'>  * Returns true if at least one limit is set. Returns false otherwise.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-_limits_set_on_volume (char *volname, int type) {</div><div class='del'>-        gf_boolean_t    limits_set                = _gf_false;</div><div class='del'>-        int             ret                       = -1;</div><div class='del'>-        char            quota_conf_file[PATH_MAX] = {0,};</div><div class='del'>-        int             fd                        = -1;</div><div class='del'>-        char            buf[16]                   = {0,};</div><div class='del'>-        float           version                   = 0.0f;</div><div class='del'>-        char            gfid_type_stored          = 0;</div><div class='del'>-        char            gfid_type                 = 0;</div><div class='del'>-</div><div class='del'>-        /* TODO: fix hardcoding; Need to perform an RPC call to glusterd</div><div class='del'>-         * to fetch working directory</div><div class='del'>-         */</div><div class='del'>-        snprintf (quota_conf_file, sizeof quota_conf_file,</div><div class='del'>-                  "%s/vols/%s/quota.conf",</div><div class='del'>-                  GLUSTERD_DEFAULT_WORKDIR,</div><div class='del'>-                  volname);</div><div class='del'>-        fd = open (quota_conf_file, O_RDONLY);</div><div class='del'>-        if (fd == -1)</div><div class='del'>-                goto out;</div><div class='add'>+_limits_set_on_volume(char *volname, int type)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t limits_set = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char quota_conf_file[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char buf[16] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    float version = 0.0f;</div><div class='add'>+    char gfid_type_stored = 0;</div><div class='add'>+    char gfid_type = 0;</div><div class='add'>+</div><div class='add'>+    /* TODO: fix hardcoding; Need to perform an RPC call to glusterd</div><div class='add'>+     * to fetch working directory</div><div class='add'>+     */</div><div class='add'>+    snprintf(quota_conf_file, sizeof quota_conf_file, "%s/vols/%s/quota.conf",</div><div class='add'>+             GLUSTERD_DEFAULT_WORKDIR, volname);</div><div class='add'>+    fd = open(quota_conf_file, O_RDONLY);</div><div class='add'>+    if (fd == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = quota_conf_read_version (fd, &amp;version);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = quota_conf_read_version(fd, &amp;version);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-                gfid_type = GF_QUOTA_CONF_TYPE_USAGE;</div><div class='del'>-        else</div><div class='del'>-                gfid_type = GF_QUOTA_CONF_TYPE_OBJECTS;</div><div class='del'>-</div><div class='del'>-        /* Try to read at least one gfid  of type 'gfid_type' */</div><div class='del'>-        while (1) {</div><div class='del'>-                ret = quota_conf_read_gfid (fd, buf, &amp;gfid_type_stored,</div><div class='del'>-                                            version);</div><div class='del'>-                if (ret &lt;= 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                if (gfid_type_stored == gfid_type) {</div><div class='del'>-                        limits_set = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='add'>+        gfid_type = GF_QUOTA_CONF_TYPE_USAGE;</div><div class='add'>+    else</div><div class='add'>+        gfid_type = GF_QUOTA_CONF_TYPE_OBJECTS;</div><div class='add'>+</div><div class='add'>+    /* Try to read at least one gfid  of type 'gfid_type' */</div><div class='add'>+    while (1) {</div><div class='add'>+        ret = quota_conf_read_gfid(fd, buf, &amp;gfid_type_stored, version);</div><div class='add'>+        if (ret &lt;= 0)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (gfid_type_stored == gfid_type) {</div><div class='add'>+            limits_set = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (fd != -1)</div><div class='del'>-                sys_close (fd);</div><div class='add'>+    if (fd != -1)</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        return limits_set;</div><div class='add'>+    return limits_set;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_quota_handle_list_all (const char **words, dict_t *options)</div><div class='add'>+cli_cmd_quota_handle_list_all(const char **words, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int                      all_failed = 1;</div><div class='del'>-        int                      count      = 0;</div><div class='del'>-        int                      ret        = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc       = NULL;</div><div class='del'>-        cli_local_t             *local      = NULL;</div><div class='del'>-        call_frame_t            *frame      = NULL;</div><div class='del'>-        dict_t                  *xdata      = NULL;</div><div class='del'>-        char                    *gfid_str   = NULL;</div><div class='del'>-        char                    *volname    = NULL;</div><div class='del'>-        char                    *volname_dup = NULL;</div><div class='del'>-        unsigned char            buf[16]   = {0};</div><div class='del'>-        int                      fd        = -1;</div><div class='del'>-        char                     quota_conf_file[PATH_MAX] = {0};</div><div class='del'>-        gf_boolean_t             xml_err_flag   = _gf_false;</div><div class='del'>-        char                     err_str[NAME_MAX] = {0,};</div><div class='del'>-        int32_t                  type       = 0;</div><div class='del'>-        char                     gfid_type  = 0;</div><div class='del'>-        float                    version    = 0.0f;</div><div class='del'>-        int32_t                  max_count  = 0;</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int all_failed = 1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *volname_dup = NULL;</div><div class='add'>+    unsigned char buf[16] = {0};</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char quota_conf_file[PATH_MAX] = {0};</div><div class='add'>+    gf_boolean_t xml_err_flag = _gf_false;</div><div class='add'>+    char err_str[NAME_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    char gfid_type = 0;</div><div class='add'>+    float version = 0.0f;</div><div class='add'>+    int32_t max_count = 0;</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(options, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (options, "type", &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get quota option type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(options, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get quota option type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, "type", type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to set type in xdata");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(xdata, "type", type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to set type in xdata");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_get_soft_limit (options, words, xdata);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch default "</div><div class='del'>-                        "soft-limit");</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_get_soft_limit(options, words, xdata);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to fetch default "</div><div class='add'>+               "soft-limit");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if at least one limit is set on volume. No need to check for</div><div class='add'>+     * quota enabled as cli_get_soft_limit() handles that</div><div class='add'>+     */</div><div class='add'>+    if (!_limits_set_on_volume(volname, type)) {</div><div class='add'>+        snprintf(err_str, sizeof(err_str),</div><div class='add'>+                 "No%s quota configured on"</div><div class='add'>+                 " volume %s",</div><div class='add'>+                 (type == GF_QUOTA_OPTION_TYPE_LIST) ? "" : " inode", volname);</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+            xml_err_flag = _gf_true;</div><div class='add'>+        } else {</div><div class='add'>+            cli_out("quota: %s", err_str);</div><div class='ctx'>         }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Check if at least one limit is set on volume. No need to check for</div><div class='del'>-         * quota enabled as cli_get_soft_limit() handles that</div><div class='del'>-         */</div><div class='del'>-        if (!_limits_set_on_volume (volname, type)) {</div><div class='del'>-                snprintf (err_str, sizeof (err_str), "No%s quota configured on"</div><div class='del'>-                          " volume %s",</div><div class='del'>-                          (type == GF_QUOTA_OPTION_TYPE_LIST) ? "" : " inode",</div><div class='del'>-                          volname);</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        xml_err_flag = _gf_true;</div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("quota: %s", err_str);</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    volname_dup = gf_strdup(volname);</div><div class='add'>+    if (!volname_dup) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        volname_dup = gf_strdup (volname);</div><div class='del'>-        if (!volname_dup) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_dynstr(xdata, "volume-uuid", volname_dup);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to set volume-uuid");</div><div class='add'>+        GF_FREE(volname_dup);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // TODO: fix hardcoding; Need to perform an RPC call to glusterd</div><div class='add'>+    // to fetch working directory</div><div class='add'>+    snprintf(quota_conf_file, sizeof quota_conf_file, "%s/vols/%s/quota.conf",</div><div class='add'>+             GLUSTERD_DEFAULT_WORKDIR, volname);</div><div class='add'>+    fd = open(quota_conf_file, O_RDONLY);</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        // This may because no limits were yet set on the volume</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+               "Unable to open "</div><div class='add'>+               "quota.conf");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (xdata, "volume-uuid", volname_dup);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to set volume-uuid");</div><div class='del'>-                GF_FREE (volname_dup);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = quota_conf_read_version(fd, &amp;version);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        //TODO: fix hardcoding; Need to perform an RPC call to glusterd</div><div class='del'>-        //to fetch working directory</div><div class='del'>-        snprintf (quota_conf_file, sizeof quota_conf_file,</div><div class='del'>-                  "%s/vols/%s/quota.conf",</div><div class='del'>-                  GLUSTERD_DEFAULT_WORKDIR,</div><div class='del'>-                  volname);</div><div class='del'>-        fd = open (quota_conf_file, O_RDONLY);</div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                //This may because no limits were yet set on the volume</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "Unable to open "</div><div class='del'>-                        "quota.conf");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-         }</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, xdata);</div><div class='add'>+    proc = &amp;cli_quotad_clnt.proctable[GF_AGGREGATOR_GETLIMIT];</div><div class='ctx'> </div><div class='del'>-        ret = quota_conf_read_version (fd, &amp;version);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    gfid_str = GF_CALLOC(1, gf_common_mt_char, 64);</div><div class='add'>+    if (!gfid_str) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, xdata);</div><div class='del'>-        proc = &amp;cli_quotad_clnt.proctable[GF_AGGREGATOR_GETLIMIT];</div><div class='add'>+    for (count = 0;; count++) {</div><div class='add'>+        ret = quota_conf_read_gfid(fd, buf, &amp;gfid_type, version);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            break;</div><div class='add'>+        } else if (ret &lt; 0) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+                   "Quota "</div><div class='add'>+                   "configuration store may be corrupt.");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if ((type == GF_QUOTA_OPTION_TYPE_LIST &amp;&amp;</div><div class='add'>+             gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) ||</div><div class='add'>+            (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS &amp;&amp;</div><div class='add'>+             gfid_type == GF_QUOTA_CONF_TYPE_USAGE))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        max_count++;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(xdata, "max_count", max_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to set max_count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_lseek(fd, 0L, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to move offset to "</div><div class='add'>+               "the beginning: %s",</div><div class='add'>+               strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = quota_conf_read_version(fd, &amp;version);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gfid_str = GF_CALLOC (1, gf_common_mt_char, 64);</div><div class='del'>-        if (!gfid_str) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    for (count = 0;; count++) {</div><div class='add'>+        ret = quota_conf_read_gfid(fd, buf, &amp;gfid_type, version);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            break;</div><div class='add'>+        } else if (ret &lt; 0) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+                   "Quota "</div><div class='add'>+                   "configuration store may be corrupt.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (count = 0;; count++) {</div><div class='del'>-                ret = quota_conf_read_gfid (fd, buf, &amp;gfid_type, version);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        break;</div><div class='del'>-                } else if (ret &lt; 0) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_CRITICAL, "Quota "</div><div class='del'>-                                "configuration store may be corrupt.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((type == GF_QUOTA_OPTION_TYPE_LIST &amp;&amp;</div><div class='del'>-                     gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) ||</div><div class='del'>-                    (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS &amp;&amp;</div><div class='del'>-                     gfid_type == GF_QUOTA_CONF_TYPE_USAGE))</div><div class='del'>-                        continue;</div><div class='add'>+        if ((type == GF_QUOTA_OPTION_TYPE_LIST &amp;&amp;</div><div class='add'>+             gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) ||</div><div class='add'>+            (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS &amp;&amp;</div><div class='add'>+             gfid_type == GF_QUOTA_CONF_TYPE_USAGE))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                max_count++;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (xdata, "max_count", max_count);</div><div class='add'>+        uuid_utoa_r(buf, gfid_str);</div><div class='add'>+        ret = dict_set_str(xdata, "gfid", gfid_str);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to set max_count");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to set gfid");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = sys_lseek (fd, 0L, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to move offset to "</div><div class='del'>-                        "the beginning: %s", strerror (errno));</div><div class='del'>-                goto out;</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, xdata);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to get quota "</div><div class='add'>+                   "limits for %s",</div><div class='add'>+                   uuid_utoa((unsigned char *)buf));</div><div class='ctx'>         }</div><div class='del'>-        ret = quota_conf_read_version (fd, &amp;version);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='ctx'> </div><div class='del'>-        for (count = 0;; count++) {</div><div class='del'>-                ret = quota_conf_read_gfid (fd, buf, &amp;gfid_type, version);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        break;</div><div class='del'>-                } else if (ret &lt; 0) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_CRITICAL, "Quota "</div><div class='del'>-                                "configuration store may be corrupt.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        dict_del(xdata, "gfid");</div><div class='add'>+        all_failed = all_failed &amp;&amp; ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if ((type == GF_QUOTA_OPTION_TYPE_LIST &amp;&amp;</div><div class='del'>-                     gfid_type == GF_QUOTA_CONF_TYPE_OBJECTS) ||</div><div class='del'>-                    (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS &amp;&amp;</div><div class='del'>-                     gfid_type == GF_QUOTA_CONF_TYPE_USAGE))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                uuid_utoa_r (buf, gfid_str);</div><div class='del'>-                ret = dict_set_str (xdata, "gfid", gfid_str);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set gfid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, xdata);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get quota "</div><div class='del'>-                                "limits for %s", uuid_utoa ((unsigned char*)buf));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dict_del (xdata, "gfid");</div><div class='del'>-                all_failed = all_failed &amp;&amp; ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_quota_limit_list_end (local);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Error in printing "</div><div class='del'>-                                "xml output");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (count &gt; 0) {</div><div class='del'>-                ret = all_failed? -1: 0;</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_quota_limit_list_end(local);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Error in printing "</div><div class='add'>+                   "xml output");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (count &gt; 0) {</div><div class='add'>+        ret = all_failed ? -1 : 0;</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xml_err_flag) {</div><div class='del'>-                ret = cli_xml_output_str ("volQuota", NULL, -1, 0, err_str);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Error outputting in "</div><div class='del'>-                                "xml format");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fd != -1) {</div><div class='del'>-                sys_close (fd);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (gfid_str);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch and display quota"</div><div class='del'>-                        " limits");</div><div class='del'>-        }</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xml_err_flag) {</div><div class='add'>+        ret = cli_xml_output_str("volQuota", NULL, -1, 0, err_str);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Error outputting in "</div><div class='add'>+                   "xml format");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd != -1) {</div><div class='add'>+        sys_close(fd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(gfid_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not fetch and display quota"</div><div class='add'>+               " limits");</div><div class='add'>+    }</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_bitrot_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                    const char **words, int wordcount)</div><div class='add'>+cli_cmd_bitrot_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                   const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int                     ret        = -1;</div><div class='del'>-        int                     parse_err  = 0;</div><div class='del'>-        call_frame_t            *frame     = NULL;</div><div class='del'>-        dict_t                  *options   = NULL;</div><div class='del'>-        cli_local_t             *local     = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc      = NULL;</div><div class='del'>-        int                     sent       = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    int sent = 0;</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        int                     cmd_type        = -1;</div><div class='del'>-        int                     ret1            = -1;</div><div class='del'>-        int                     event_type      = -1;</div><div class='del'>-        char                    *tmp            = NULL;</div><div class='del'>-        char                    *events_str     = NULL;</div><div class='add'>+    int cmd_type = -1;</div><div class='add'>+    int ret1 = -1;</div><div class='add'>+    int event_type = -1;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *events_str = NULL;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_bitrot_parse (words, wordcount, &amp;options);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_err = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_bitrot_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_err = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                /* this is 'volume bitrot help' */</div><div class='del'>-                cli_cmd_bitrot_help_cbk (state, word, words, wordcount);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out2;</div><div class='del'>-        }</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        /* this is 'volume bitrot help' */</div><div class='add'>+        cli_cmd_bitrot_help_cbk(state, word, words, wordcount);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out2;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_BITROT];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_BITROT];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_err == 0))</div><div class='del'>-                    cli_err ("Bit rot command failed. Please check the cli "</div><div class='del'>-                             "logs for more details");</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_err == 0))</div><div class='add'>+            cli_err(</div><div class='add'>+                "Bit rot command failed. Please check the cli "</div><div class='add'>+                "logs for more details");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret1 = dict_get_int32 (options, "type", &amp;cmd_type);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret1 = dict_get_int32(options, "type", &amp;cmd_type);</div><div class='add'>+        if (ret1)</div><div class='add'>+            cmd_type = -1;</div><div class='add'>+        else {</div><div class='add'>+            ret1 = dict_get_str(options, "volname", &amp;tmp);</div><div class='add'>+            if (ret1)</div><div class='add'>+                tmp = "";</div><div class='add'>+            gf_asprintf(&amp;events_str, "name=%s", tmp);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        switch (cmd_type) {</div><div class='add'>+            case GF_BITROT_OPTION_TYPE_ENABLE:</div><div class='add'>+                event_type = EVENT_BITROT_ENABLE;</div><div class='add'>+                break;</div><div class='add'>+            case GF_BITROT_OPTION_TYPE_DISABLE:</div><div class='add'>+                event_type = EVENT_BITROT_DISABLE;</div><div class='add'>+                break;</div><div class='add'>+            case GF_BITROT_CMD_SCRUB_ONDEMAND:</div><div class='add'>+                event_type = EVENT_BITROT_SCRUB_ONDEMAND;</div><div class='add'>+                break;</div><div class='add'>+            case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE:</div><div class='add'>+                event_type = EVENT_BITROT_SCRUB_THROTTLE;</div><div class='add'>+                ret1 = dict_get_str(options, "scrub-throttle-value", &amp;tmp);</div><div class='ctx'>                 if (ret1)</div><div class='del'>-                        cmd_type = -1;</div><div class='del'>-                else {</div><div class='del'>-                        ret1 = dict_get_str (options, "volname", &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-                        gf_asprintf (&amp;events_str, "name=%s", tmp);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (cmd_type) {</div><div class='del'>-                case GF_BITROT_OPTION_TYPE_ENABLE:</div><div class='del'>-                        event_type = EVENT_BITROT_ENABLE;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_BITROT_OPTION_TYPE_DISABLE:</div><div class='del'>-                        event_type = EVENT_BITROT_DISABLE;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_BITROT_CMD_SCRUB_ONDEMAND:</div><div class='del'>-                        event_type = EVENT_BITROT_SCRUB_ONDEMAND;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE:</div><div class='del'>-                        event_type = EVENT_BITROT_SCRUB_THROTTLE;</div><div class='del'>-                        ret1 = dict_get_str (options, "scrub-throttle-value",</div><div class='del'>-                                             &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-                        gf_asprintf (&amp;events_str, "%s;value=%s", events_str,</div><div class='del'>-                                     tmp);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_BITROT_OPTION_TYPE_SCRUB_FREQ:</div><div class='del'>-                        event_type = EVENT_BITROT_SCRUB_FREQ;</div><div class='del'>-                        ret1 = dict_get_str (options, "scrub-frequency-value",</div><div class='del'>-                                             &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-                        gf_asprintf (&amp;events_str, "%s;value=%s", events_str,</div><div class='del'>-                                     tmp);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_BITROT_OPTION_TYPE_SCRUB:</div><div class='del'>-                        event_type = EVENT_BITROT_SCRUB_OPTION;</div><div class='del'>-                        ret1 = dict_get_str (options, "scrub-value", &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-                        gf_asprintf (&amp;events_str, "%s;value=%s", events_str,</div><div class='del'>-                                     tmp);</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                    tmp = "";</div><div class='add'>+                gf_asprintf(&amp;events_str, "%s;value=%s", events_str, tmp);</div><div class='add'>+                break;</div><div class='add'>+            case GF_BITROT_OPTION_TYPE_SCRUB_FREQ:</div><div class='add'>+                event_type = EVENT_BITROT_SCRUB_FREQ;</div><div class='add'>+                ret1 = dict_get_str(options, "scrub-frequency-value", &amp;tmp);</div><div class='add'>+                if (ret1)</div><div class='add'>+                    tmp = "";</div><div class='add'>+                gf_asprintf(&amp;events_str, "%s;value=%s", events_str, tmp);</div><div class='add'>+                break;</div><div class='add'>+            case GF_BITROT_OPTION_TYPE_SCRUB:</div><div class='add'>+                event_type = EVENT_BITROT_SCRUB_OPTION;</div><div class='add'>+                ret1 = dict_get_str(options, "scrub-value", &amp;tmp);</div><div class='add'>+                if (ret1)</div><div class='add'>+                    tmp = "";</div><div class='add'>+                gf_asprintf(&amp;events_str, "%s;value=%s", events_str, tmp);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (event_type &gt; -1)</div><div class='del'>-                        gf_event (event_type, "%s", events_str);</div><div class='add'>+        if (event_type &gt; -1)</div><div class='add'>+            gf_event(event_type, "%s", events_str);</div><div class='ctx'> </div><div class='del'>-                if (events_str)</div><div class='del'>-                        GF_FREE (events_str);</div><div class='del'>-        }</div><div class='add'>+        if (events_str)</div><div class='add'>+            GF_FREE(events_str);</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> out2:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_quota_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                   const char **words, int wordcount)</div><div class='add'>+cli_cmd_quota_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                  const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int                      ret       = 0;</div><div class='del'>-        int                      parse_err = 0;</div><div class='del'>-        int32_t                  type      = 0;</div><div class='del'>-        rpc_clnt_procedure_t    *proc      = NULL;</div><div class='del'>-        call_frame_t            *frame     = NULL;</div><div class='del'>-        dict_t                  *options   = NULL;</div><div class='del'>-        gf_answer_t              answer    = GF_ANSWER_NO;</div><div class='del'>-        cli_local_t             *local     = NULL;</div><div class='del'>-        int                      sent      = 0;</div><div class='del'>-        char                    *volname   = NULL;</div><div class='del'>-        const char *question = "Disabling quota will delete all the quota "</div><div class='del'>-                               "configuration. Do you want to continue?";</div><div class='del'>-</div><div class='del'>-        //parse **words into options dictionary</div><div class='del'>-        if (strcmp (words[1], "inode-quota") == 0) {</div><div class='del'>-                ret = cli_cmd_inode_quota_parse (words, wordcount, &amp;options);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        parse_err = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = cli_cmd_quota_parse (words, wordcount, &amp;options);</div><div class='del'>-</div><div class='del'>-                if (ret == 1) {</div><div class='del'>-                        cli_cmd_quota_help_cbk (state, word, words, wordcount);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        cli_usage_out (word-&gt;pattern);</div><div class='del'>-                        parse_err = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    const char *question =</div><div class='add'>+        "Disabling quota will delete all the quota "</div><div class='add'>+        "configuration. Do you want to continue?";</div><div class='add'>+</div><div class='add'>+    // parse **words into options dictionary</div><div class='add'>+    if (strcmp(words[1], "inode-quota") == 0) {</div><div class='add'>+        ret = cli_cmd_inode_quota_parse(words, wordcount, &amp;options);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            parse_err = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = cli_cmd_quota_parse(words, wordcount, &amp;options);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (options, "type", &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get opcode");</div><div class='del'>-                goto out;</div><div class='add'>+        if (ret == 1) {</div><div class='add'>+            cli_cmd_quota_help_cbk(state, word, words, wordcount);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='add'>+            parse_err = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        //handle quota-disable and quota-list-all different from others</div><div class='del'>-        switch (type) {</div><div class='add'>+    ret = dict_get_int32(options, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get opcode");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // handle quota-disable and quota-list-all different from others</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case GF_QUOTA_OPTION_TYPE_DISABLE:</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                if (answer == GF_ANSWER_NO)</div><div class='del'>-                        goto out;</div><div class='del'>-                break;</div><div class='add'>+            answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+            if (answer == GF_ANSWER_NO)</div><div class='add'>+                goto out;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_QUOTA_OPTION_TYPE_LIST:</div><div class='ctx'>         case GF_QUOTA_OPTION_TYPE_LIST_OBJECTS:</div><div class='del'>-                if (wordcount != 4)</div><div class='del'>-                        break;</div><div class='del'>-                ret = cli_cmd_quota_handle_list_all (words, options);</div><div class='del'>-                goto out;</div><div class='del'>-        default:</div><div class='add'>+            if (wordcount != 4)</div><div class='ctx'>                 break;</div><div class='del'>-        }</div><div class='add'>+            ret = cli_cmd_quota_handle_list_all(words, options);</div><div class='add'>+            goto out;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(options, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_QUOTA];</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_QUOTA];</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if (sent == 0 &amp;&amp; parse_err == 0)</div><div class='del'>-                        cli_out ("Quota command failed. Please check the cli "</div><div class='del'>-                                 "logs for more details");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Events for Quota */</div><div class='del'>-         if (ret == 0) {</div><div class='del'>-                switch (type) {</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_ENABLE:</div><div class='del'>-                        gf_event (EVENT_QUOTA_ENABLE, "volume=%s", volname);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_DISABLE:</div><div class='del'>-                        gf_event (EVENT_QUOTA_DISABLE, "volume=%s", volname);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_LIMIT_USAGE:</div><div class='del'>-                        gf_event (EVENT_QUOTA_SET_USAGE_LIMIT, "volume=%s;"</div><div class='del'>-                                  "path=%s;limit=%s", volname, words[4],</div><div class='del'>-                                  words[5]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS:</div><div class='del'>-                        gf_event (EVENT_QUOTA_SET_OBJECTS_LIMIT, "volume=%s;"</div><div class='del'>-                                  "path=%s;limit=%s", volname, words[4],</div><div class='del'>-                                  words[5]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_REMOVE:</div><div class='del'>-                        gf_event (EVENT_QUOTA_REMOVE_USAGE_LIMIT, "volume=%s;"</div><div class='del'>-                                  "path=%s", volname, words[4]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS:</div><div class='del'>-                        gf_event (EVENT_QUOTA_REMOVE_OBJECTS_LIMIT,</div><div class='del'>-                                  "volume=%s;" "path=%s", volname, words[4]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_ALERT_TIME:</div><div class='del'>-                        gf_event (EVENT_QUOTA_ALERT_TIME, "volume=%s;time=%s",</div><div class='del'>-                                  volname, words[4]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT:</div><div class='del'>-                        gf_event (EVENT_QUOTA_SOFT_TIMEOUT, "volume=%s;"</div><div class='del'>-                                  "soft-timeout=%s", volname, words[4]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT:</div><div class='del'>-                        gf_event (EVENT_QUOTA_HARD_TIMEOUT, "volume=%s;"</div><div class='del'>-                                  "hard-timeout=%s", volname, words[4]);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT:</div><div class='del'>-                        gf_event (EVENT_QUOTA_DEFAULT_SOFT_LIMIT, "volume=%s;"</div><div class='del'>-                                  "default-soft-limit=%s", volname, words[4]);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if (sent == 0 &amp;&amp; parse_err == 0)</div><div class='add'>+            cli_out(</div><div class='add'>+                "Quota command failed. Please check the cli "</div><div class='add'>+                "logs for more details");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Events for Quota */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        switch (type) {</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_ENABLE:</div><div class='add'>+                gf_event(EVENT_QUOTA_ENABLE, "volume=%s", volname);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_DISABLE:</div><div class='add'>+                gf_event(EVENT_QUOTA_DISABLE, "volume=%s", volname);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_LIMIT_USAGE:</div><div class='add'>+                gf_event(EVENT_QUOTA_SET_USAGE_LIMIT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "path=%s;limit=%s",</div><div class='add'>+                         volname, words[4], words[5]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS:</div><div class='add'>+                gf_event(EVENT_QUOTA_SET_OBJECTS_LIMIT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "path=%s;limit=%s",</div><div class='add'>+                         volname, words[4], words[5]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_REMOVE:</div><div class='add'>+                gf_event(EVENT_QUOTA_REMOVE_USAGE_LIMIT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "path=%s",</div><div class='add'>+                         volname, words[4]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS:</div><div class='add'>+                gf_event(EVENT_QUOTA_REMOVE_OBJECTS_LIMIT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "path=%s",</div><div class='add'>+                         volname, words[4]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_ALERT_TIME:</div><div class='add'>+                gf_event(EVENT_QUOTA_ALERT_TIME, "volume=%s;time=%s", volname,</div><div class='add'>+                         words[4]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_SOFT_TIMEOUT:</div><div class='add'>+                gf_event(EVENT_QUOTA_SOFT_TIMEOUT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "soft-timeout=%s",</div><div class='add'>+                         volname, words[4]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_HARD_TIMEOUT:</div><div class='add'>+                gf_event(EVENT_QUOTA_HARD_TIMEOUT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "hard-timeout=%s",</div><div class='add'>+                         volname, words[4]);</div><div class='add'>+                break;</div><div class='add'>+            case GF_QUOTA_OPTION_TYPE_DEFAULT_SOFT_LIMIT:</div><div class='add'>+                gf_event(EVENT_QUOTA_DEFAULT_SOFT_LIMIT,</div><div class='add'>+                         "volume=%s;"</div><div class='add'>+                         "default-soft-limit=%s",</div><div class='add'>+                         volname, words[4]);</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_remove_brick_cbk (struct cli_state *state,</div><div class='del'>-                                 struct cli_cmd_word *word, const char **words,</div><div class='del'>-                                 int wordcount)</div><div class='add'>+cli_cmd_volume_remove_brick_cbk(struct cli_state *state,</div><div class='add'>+                                struct cli_cmd_word *word, const char **words,</div><div class='add'>+                                int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        gf_answer_t             answer = GF_ANSWER_NO;</div><div class='del'>-        int                     brick_count = 0;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        int                     need_question = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    int need_question = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        eventtypes_t            event = EVENT_LAST;</div><div class='del'>-        char                    *event_str = NULL;</div><div class='del'>-        int                     event_ret = -1;</div><div class='add'>+    eventtypes_t event = EVENT_LAST;</div><div class='add'>+    char *event_str = NULL;</div><div class='add'>+    int event_ret = -1;</div><div class='ctx'> #endif</div><div class='del'>-        int32_t                 command = GF_OP_CMD_NONE;</div><div class='del'>-        char                    *question = NULL;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t command = GF_OP_CMD_NONE;</div><div class='add'>+    char *question = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_remove_brick_parse (state, words, wordcount,</div><div class='del'>-                                                 &amp;options, &amp;need_question,</div><div class='del'>-                                                 &amp;brick_count, &amp;command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (command == GF_OP_CMD_COMMIT_FORCE) {</div><div class='del'>-                question = "Remove-brick force will not migrate files from the "</div><div class='del'>-                           "removed bricks, so they will no longer be available"</div><div class='del'>-                           " on the volume.\nDo you want to continue?";</div><div class='del'>-        } else if (command == GF_OP_CMD_START) {</div><div class='del'>-                question = "Running remove-brick with cluster.force-migration"</div><div class='del'>-                           " enabled can result in data corruption. It is safer"</div><div class='del'>-                           " to disable this option so that files that receive "</div><div class='del'>-                           "writes during migration are not migrated.\nFiles "</div><div class='del'>-                           "that are not migrated can then be manually copied "</div><div class='del'>-                           "after the remove-brick commit operation.\nDo you "</div><div class='del'>-                           "want to continue with your current "</div><div class='del'>-                           "cluster.force-migration settings?";</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!brick_count) {</div><div class='del'>-                cli_err ("No bricks specified");</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_str (options, "volname", &amp;volname);</div><div class='del'>-        if (ret || !volname) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch volname");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_volume_remove_brick_parse(state, words, wordcount, &amp;options,</div><div class='add'>+                                            &amp;need_question, &amp;brick_count,</div><div class='add'>+                                            &amp;command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (command == GF_OP_CMD_COMMIT_FORCE) {</div><div class='add'>+        question =</div><div class='add'>+            "Remove-brick force will not migrate files from the "</div><div class='add'>+            "removed bricks, so they will no longer be available"</div><div class='add'>+            " on the volume.\nDo you want to continue?";</div><div class='add'>+    } else if (command == GF_OP_CMD_START) {</div><div class='add'>+        question =</div><div class='add'>+            "Running remove-brick with cluster.force-migration"</div><div class='add'>+            " enabled can result in data corruption. It is safer"</div><div class='add'>+            " to disable this option so that files that receive "</div><div class='add'>+            "writes during migration are not migrated.\nFiles "</div><div class='add'>+            "that are not migrated can then be manually copied "</div><div class='add'>+            "after the remove-brick commit operation.\nDo you "</div><div class='add'>+            "want to continue with your current "</div><div class='add'>+            "cluster.force-migration settings?";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!brick_count) {</div><div class='add'>+        cli_err("No bricks specified");</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_str(options, "volname", &amp;volname);</div><div class='add'>+    if (ret || !volname) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to fetch volname");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        event_ret = cli_event_remove_brick_str (options, &amp;event_str, &amp;event);</div><div class='add'>+    event_ret = cli_event_remove_brick_str(options, &amp;event_str, &amp;event);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (volname, GLUSTER_SHARED_STORAGE)) {</div><div class='del'>-                question = "Removing brick from the shared storage volume"</div><div class='del'>-                           "(gluster_shared_storage), will affect features "</div><div class='del'>-                           "like snapshot scheduler, geo-replication "</div><div class='del'>-                           "and NFS-Ganesha. Do you still want to "</div><div class='del'>-                           "continue?";</div><div class='del'>-                need_question = _gf_true;</div><div class='add'>+    if (!strcmp(volname, GLUSTER_SHARED_STORAGE)) {</div><div class='add'>+        question =</div><div class='add'>+            "Removing brick from the shared storage volume"</div><div class='add'>+            "(gluster_shared_storage), will affect features "</div><div class='add'>+            "like snapshot scheduler, geo-replication "</div><div class='add'>+            "and NFS-Ganesha. Do you still want to "</div><div class='add'>+            "continue?";</div><div class='add'>+        need_question = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(state-&gt;mode &amp; GLUSTER_MODE_SCRIPT) &amp;&amp; need_question) {</div><div class='add'>+        answer = cli_cmd_get_confirmation(state, question);</div><div class='add'>+        if (GF_ANSWER_NO == answer) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!(state-&gt;mode &amp; GLUSTER_MODE_SCRIPT) &amp;&amp; need_question) {</div><div class='del'>-                answer = cli_cmd_get_confirmation (state, question);</div><div class='del'>-                if (GF_ANSWER_NO == answer) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_REMOVE_BRICK];</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_REMOVE_BRICK];</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='del'>-</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume remove-brick failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume remove-brick failed");</div><div class='add'>+    }</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        if (!ret &amp;&amp; !event_ret)</div><div class='del'>-                gf_event (event, "%s", event_str);</div><div class='del'>-        if (event_str)</div><div class='del'>-                GF_FREE (event_str);</div><div class='add'>+    if (!ret &amp;&amp; !event_ret)</div><div class='add'>+        gf_event(event, "%s", event_str);</div><div class='add'>+    if (event_str)</div><div class='add'>+        GF_FREE(event_str);</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_reset_brick_cbk (struct cli_state *state,</div><div class='del'>-                                struct cli_cmd_word *word,</div><div class='del'>-                                const char **words,</div><div class='del'>-                                int wordcount)</div><div class='add'>+cli_cmd_volume_reset_brick_cbk(struct cli_state *state,</div><div class='add'>+                               struct cli_cmd_word *word, const char **words,</div><div class='add'>+                               int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                      ret          = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc         = NULL;</div><div class='del'>-        call_frame_t            *frame        = NULL;</div><div class='del'>-        dict_t                  *options      = NULL;</div><div class='del'>-        int                      sent         = 0;</div><div class='del'>-        int                      parse_error  = 0;</div><div class='del'>-        cli_local_t             *local        = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        cli_out ("Command not supported on Solaris");</div><div class='del'>-        goto out;</div><div class='add'>+    cli_out("Command not supported on Solaris");</div><div class='add'>+    goto out;</div><div class='ctx'> #endif</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_RESET_BRICK];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_RESET_BRICK];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    ret = cli_cmd_volume_reset_brick_parse(words, wordcount, &amp;options);</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_reset_brick_parse (words, wordcount, &amp;options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE_PARTITION) {</div><div class='add'>+        ret = dict_set_int32(options, "ignore-partition", _gf_true);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set ignore-"</div><div class='add'>+                   "partition option");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;mode &amp; GLUSTER_MODE_WIGNORE_PARTITION) {</div><div class='del'>-                ret = dict_set_int32 (options, "ignore-partition", _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to set ignore-"</div><div class='del'>-                                "partition option");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='del'>-</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume reset-brick failed");</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume reset-brick failed");</div><div class='add'>+    } else {</div><div class='add'>+        if (wordcount &gt; 5) {</div><div class='add'>+            gf_event(EVENT_BRICK_RESET_COMMIT,</div><div class='add'>+                     "Volume=%s;source-brick=%s;"</div><div class='add'>+                     "destination-brick=%s",</div><div class='add'>+                     (char *)words[2], (char *)words[3], (char *)words[4]);</div><div class='ctx'>         } else {</div><div class='del'>-                if (wordcount &gt; 5) {</div><div class='del'>-                        gf_event (EVENT_BRICK_RESET_COMMIT,</div><div class='del'>-                                  "Volume=%s;source-brick=%s;"</div><div class='del'>-                                  "destination-brick=%s",</div><div class='del'>-                                  (char *)words[2], (char *)words[3],</div><div class='del'>-                                  (char *)words[4]);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_event (EVENT_BRICK_RESET_START,</div><div class='del'>-                                  "Volume=%s;source-brick=%s",</div><div class='del'>-                                  (char *)words[2], (char *)words[3]);</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_BRICK_RESET_START, "Volume=%s;source-brick=%s",</div><div class='add'>+                     (char *)words[2], (char *)words[3]);</div><div class='ctx'>         }</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    }</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_replace_brick_cbk (struct cli_state *state,</div><div class='del'>-                                  struct cli_cmd_word *word,</div><div class='del'>-                                  const char **words,</div><div class='del'>-                                  int wordcount)</div><div class='add'>+cli_cmd_volume_replace_brick_cbk(struct cli_state *state,</div><div class='add'>+                                 struct cli_cmd_word *word, const char **words,</div><div class='add'>+                                 int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                      ret          = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc         = NULL;</div><div class='del'>-        call_frame_t            *frame        = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                      sent = 0;</div><div class='del'>-        int                      parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        cli_out ("Command not supported on Solaris");</div><div class='del'>-        goto out;</div><div class='add'>+    cli_out("Command not supported on Solaris");</div><div class='add'>+    goto out;</div><div class='ctx'> #endif</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_REPLACE_BRICK];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_REPLACE_BRICK];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_replace_brick_parse (words, wordcount, &amp;options);</div><div class='add'>+    ret = cli_cmd_volume_replace_brick_parse(words, wordcount, &amp;options);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume replace-brick failed");</div><div class='del'>-        } else {</div><div class='del'>-                gf_event (EVENT_BRICK_REPLACE,</div><div class='del'>-                          "Volume=%s;source-brick=%s;destination-brick=%s",</div><div class='del'>-                          (char *)words[2], (char *)words[3], (char *)words[4]);</div><div class='del'>-        }</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume replace-brick failed");</div><div class='add'>+    } else {</div><div class='add'>+        gf_event(EVENT_BRICK_REPLACE,</div><div class='add'>+                 "Volume=%s;source-brick=%s;destination-brick=%s",</div><div class='add'>+                 (char *)words[2], (char *)words[3], (char *)words[4]);</div><div class='add'>+    }</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_set_transport_cbk (struct cli_state *state,</div><div class='del'>-                                  struct cli_cmd_word *word,</div><div class='del'>-                                  const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_set_transport_cbk(struct cli_state *state,</div><div class='add'>+                                 struct cli_cmd_word *word, const char **words,</div><div class='add'>+                                 int wordcount)</div><div class='ctx'> {</div><div class='del'>-        cli_cmd_broadcast_response (0);</div><div class='del'>-        return 0;</div><div class='add'>+    cli_cmd_broadcast_response(0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_top_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_top_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_volume_top_parse(words, wordcount, &amp;options);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        int                     ret      = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc    = NULL;</div><div class='del'>-        call_frame_t            *frame   = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     sent     = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_volume_top_parse (words, wordcount, &amp;options);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_TOP_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_TOP_VOLUME];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume top failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume top failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_log_rotate_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                        const char **words, int wordcount)</div><div class='add'>+cli_cmd_log_rotate_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-</div><div class='del'>-        if (!((wordcount == 4) || (wordcount == 5))) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    if (!((wordcount == 4) || (wordcount == 5))) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!((strcmp ("rotate", words[2]) == 0) ||</div><div class='del'>-              (strcmp ("rotate", words[3]) == 0))) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!((strcmp("rotate", words[2]) == 0) ||</div><div class='add'>+          (strcmp("rotate", words[3]) == 0))) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LOG_ROTATE];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LOG_ROTATE];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_log_rotate_parse (words, wordcount, &amp;options);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_cmd_log_rotate_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume log rotate failed");</div><div class='del'>-        }</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume log rotate failed");</div><div class='add'>+    }</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (SYNCDAEMON_COMPILE)</div><div class='ctx'> static int</div><div class='del'>-cli_check_gsync_present ()</div><div class='add'>+cli_check_gsync_present()</div><div class='ctx'> {</div><div class='del'>-        char                buff[PATH_MAX] = {0, };</div><div class='del'>-        runner_t            runner = {0,};</div><div class='del'>-        char                *ptr = NULL;</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = setenv ("_GLUSTERD_CALLED_", "1", 1);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING, "setenv syscall failed, hence could"</div><div class='del'>-                        "not assert if geo-replication is installed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        runner_add_args (&amp;runner, GSYNCD_PREFIX"/gsyncd", "--version", NULL);</div><div class='del'>-        runner_redir (&amp;runner, STDOUT_FILENO, RUN_PIPE);</div><div class='del'>-        ret = runner_start (&amp;runner);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("", GF_LOG_INFO, "geo-replication not installed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    char buff[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    runner_t runner = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = setenv("_GLUSTERD_CALLED_", "1", 1);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING,</div><div class='add'>+               "setenv syscall failed, hence could"</div><div class='add'>+               "not assert if geo-replication is installed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    runner_add_args(&amp;runner, GSYNCD_PREFIX "/gsyncd", "--version", NULL);</div><div class='add'>+    runner_redir(&amp;runner, STDOUT_FILENO, RUN_PIPE);</div><div class='add'>+    ret = runner_start(&amp;runner);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("", GF_LOG_INFO, "geo-replication not installed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ptr = fgets(buff, sizeof(buff), runner_chio (&amp;runner, STDOUT_FILENO));</div><div class='del'>-        if (ptr) {</div><div class='del'>-                if (!strstr (buff, "gsyncd")) {</div><div class='del'>-                        ret  = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    ptr = fgets(buff, sizeof(buff), runner_chio(&amp;runner, STDOUT_FILENO));</div><div class='add'>+    if (ptr) {</div><div class='add'>+        if (!strstr(buff, "gsyncd")) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = runner_end (&amp;runner);</div><div class='add'>+    ret = runner_end(&amp;runner);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "geo-replication not installed");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "geo-replication not installed");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret ? -1 : 0;</div><div class='del'>-</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret ? -1 : 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_cmd_check_gsync_exists_cbk (struct cli_cmd *this)</div><div class='add'>+cli_cmd_check_gsync_exists_cbk(struct cli_cmd *this)</div><div class='ctx'> {</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        int             ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = cli_check_gsync_present ();</div><div class='del'>-        if (ret)</div><div class='del'>-                this-&gt;disable = _gf_true;</div><div class='del'>-</div><div class='add'>+    ret = cli_check_gsync_present();</div><div class='add'>+    if (ret)</div><div class='add'>+        this-&gt;disable = _gf_true;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_gsync_set_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                              const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_gsync_set_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                             const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                      ret     = 0;</div><div class='del'>-        int                      parse_err = 0;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc    = NULL;</div><div class='del'>-        call_frame_t            *frame   = NULL;</div><div class='del'>-        cli_local_t             *local   = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        int                      ret1       = -1;</div><div class='del'>-        int                      cmd_type   = -1;</div><div class='del'>-        int                      tmpi       = 0;</div><div class='del'>-        char                    *tmp        = NULL;</div><div class='del'>-        char                    *events_str = NULL;</div><div class='del'>-        int                      event_type = -1;</div><div class='add'>+    int ret1 = -1;</div><div class='add'>+    int cmd_type = -1;</div><div class='add'>+    int tmpi = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *events_str = NULL;</div><div class='add'>+    int event_type = -1;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable [GLUSTER_CLI_GSYNC_SET];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GSYNC_SET];</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (frame == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (frame == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_gsync_set_parse (words, wordcount, &amp;options);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_err = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_gsync_set_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_err = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; parse_err == 0)</div><div class='del'>-                cli_out (GEOREP" command failed");</div><div class='add'>+    if (ret &amp;&amp; parse_err == 0)</div><div class='add'>+        cli_out(GEOREP " command failed");</div><div class='ctx'> </div><div class='ctx'> #if (USE_EVENTS)</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                events_str = gf_strdup ("");</div><div class='del'>-</div><div class='del'>-                /* Type of Geo-rep Action - Create, Start etc */</div><div class='del'>-                ret1 = dict_get_int32 (options, "type", &amp;cmd_type);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        events_str = gf_strdup("");</div><div class='add'>+</div><div class='add'>+        /* Type of Geo-rep Action - Create, Start etc */</div><div class='add'>+        ret1 = dict_get_int32(options, "type", &amp;cmd_type);</div><div class='add'>+        if (ret1)</div><div class='add'>+            cmd_type = -1;</div><div class='add'>+</div><div class='add'>+        /* Only capture Events for modification commands */</div><div class='add'>+        switch (cmd_type) {</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_CREATE:</div><div class='add'>+                event_type = EVENT_GEOREP_CREATE;</div><div class='add'>+                break;</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_START:</div><div class='add'>+                event_type = EVENT_GEOREP_START;</div><div class='add'>+                break;</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_STOP:</div><div class='add'>+                event_type = EVENT_GEOREP_STOP;</div><div class='add'>+                break;</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_PAUSE:</div><div class='add'>+                event_type = EVENT_GEOREP_PAUSE;</div><div class='add'>+                break;</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_RESUME:</div><div class='add'>+                event_type = EVENT_GEOREP_RESUME;</div><div class='add'>+                break;</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_DELETE:</div><div class='add'>+                event_type = EVENT_GEOREP_DELETE;</div><div class='add'>+                break;</div><div class='add'>+            case GF_GSYNC_OPTION_TYPE_CONFIG:</div><div class='add'>+                ret1 = dict_get_str(options, "subop", &amp;tmp);</div><div class='ctx'>                 if (ret1)</div><div class='del'>-                        cmd_type = -1;</div><div class='del'>-</div><div class='del'>-                /* Only capture Events for modification commands */</div><div class='del'>-                switch (cmd_type) {</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_CREATE:</div><div class='del'>-                        event_type = EVENT_GEOREP_CREATE;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_START:</div><div class='del'>-                        event_type = EVENT_GEOREP_START;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_STOP:</div><div class='del'>-                        event_type = EVENT_GEOREP_STOP;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_PAUSE:</div><div class='del'>-                        event_type = EVENT_GEOREP_PAUSE;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_RESUME:</div><div class='del'>-                        event_type = EVENT_GEOREP_RESUME;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_DELETE:</div><div class='del'>-                        event_type = EVENT_GEOREP_DELETE;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_CONFIG:</div><div class='del'>-                        ret1 = dict_get_str (options, "subop", &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-</div><div class='del'>-                        /* For Config Set additionally capture key and value */</div><div class='del'>-                        /* For Config Reset capture key */</div><div class='del'>-                        if (strcmp (tmp, "set") == 0) {</div><div class='del'>-                                event_type = EVENT_GEOREP_CONFIG_SET;</div><div class='del'>-</div><div class='del'>-                                ret1 = dict_get_str (options, "op_name", &amp;tmp);</div><div class='del'>-                                if (ret1)</div><div class='del'>-                                        tmp = "";</div><div class='del'>-</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%soption=%s;",</div><div class='del'>-                                             events_str, tmp);</div><div class='del'>-</div><div class='del'>-                                ret1 = dict_get_str (options, "op_value", &amp;tmp);</div><div class='del'>-                                if (ret1)</div><div class='del'>-                                        tmp = "";</div><div class='del'>-</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%svalue=%s;",</div><div class='del'>-                                             events_str, tmp);</div><div class='del'>-                        } else if (strcmp (tmp, "del") == 0) {</div><div class='del'>-                                event_type = EVENT_GEOREP_CONFIG_RESET;</div><div class='del'>-</div><div class='del'>-                                ret1 = dict_get_str (options, "op_name", &amp;tmp);</div><div class='del'>-                                if (ret1)</div><div class='del'>-                                        tmp = "";</div><div class='del'>-</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%soption=%s;",</div><div class='del'>-                                             events_str, tmp);</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                    tmp = "";</div><div class='ctx'> </div><div class='del'>-                if (event_type &gt; -1) {</div><div class='del'>-                        /* Capture all optional arguments used */</div><div class='del'>-                        ret1 = dict_get_int32 (options, "force", &amp;tmpi);</div><div class='del'>-                        if (ret1 == 0)</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%sforce=%d;",</div><div class='del'>-                                             events_str, tmpi);</div><div class='del'>-</div><div class='del'>-                        ret1 = dict_get_int32 (options, "push_pem", &amp;tmpi);</div><div class='del'>-                        if (ret1 == 0)</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%spush_pem=%d;",</div><div class='del'>-                                             events_str, tmpi);</div><div class='del'>-</div><div class='del'>-                        ret1 = dict_get_int32 (options, "no_verify", &amp;tmpi);</div><div class='del'>-                        if (ret1 == 0)</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%sno_verify=%d;",</div><div class='del'>-                                             events_str, tmpi);</div><div class='del'>-</div><div class='del'>-                        ret1 = dict_get_int32 (options, "ssh_port", &amp;tmpi);</div><div class='del'>-                        if (ret1 == 0)</div><div class='del'>-                                gf_asprintf (&amp;events_str, "%sssh_port=%d;",</div><div class='del'>-                                             events_str, tmpi);</div><div class='del'>-</div><div class='del'>-                        ret1 = dict_get_int32 (options, "reset-sync-time",</div><div class='del'>-                                               &amp;tmpi);</div><div class='del'>-                        if (ret1 == 0)</div><div class='del'>-                                gf_asprintf (&amp;events_str,</div><div class='del'>-                                             "%sreset_sync_time=%d;",</div><div class='del'>-                                             events_str, tmpi);</div><div class='del'>-</div><div class='del'>-                        /* Capture Master and Slave Info */</div><div class='del'>-                        ret1 = dict_get_str (options, "master", &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-                        gf_asprintf (&amp;events_str, "%smaster=%s;",</div><div class='del'>-                                     events_str, tmp);</div><div class='del'>-</div><div class='del'>-                        ret1 = dict_get_str (options, "slave", &amp;tmp);</div><div class='del'>-                        if (ret1)</div><div class='del'>-                                tmp = "";</div><div class='del'>-                        gf_asprintf (&amp;events_str, "%sslave=%s",</div><div class='del'>-                                     events_str, tmp);</div><div class='del'>-</div><div class='del'>-                        gf_event (event_type, "%s", events_str);</div><div class='del'>-                }</div><div class='add'>+                /* For Config Set additionally capture key and value */</div><div class='add'>+                /* For Config Reset capture key */</div><div class='add'>+                if (strcmp(tmp, "set") == 0) {</div><div class='add'>+                    event_type = EVENT_GEOREP_CONFIG_SET;</div><div class='ctx'> </div><div class='del'>-                /* Allocated by gf_strdup and gf_asprintf */</div><div class='del'>-                GF_FREE (events_str);</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='add'>+                    ret1 = dict_get_str(options, "op_name", &amp;tmp);</div><div class='add'>+                    if (ret1)</div><div class='add'>+                        tmp = "";</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+                    gf_asprintf(&amp;events_str, "%soption=%s;", events_str, tmp);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+                    ret1 = dict_get_str(options, "op_value", &amp;tmp);</div><div class='add'>+                    if (ret1)</div><div class='add'>+                        tmp = "";</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-cli_cmd_volume_status_cbk (struct cli_state *state,</div><div class='del'>-                           struct cli_cmd_word *word,</div><div class='del'>-                           const char **words, int wordcount)</div><div class='del'>-{</div><div class='del'>-        int                   ret         = -1;</div><div class='del'>-        rpc_clnt_procedure_t *proc        = NULL;</div><div class='del'>-        call_frame_t         *frame       = NULL;</div><div class='del'>-        dict_t               *dict        = NULL;</div><div class='del'>-        uint32_t              cmd         = 0;</div><div class='del'>-        cli_local_t          *local       = NULL;</div><div class='add'>+                    gf_asprintf(&amp;events_str, "%svalue=%s;", events_str, tmp);</div><div class='add'>+                } else if (strcmp(tmp, "del") == 0) {</div><div class='add'>+                    event_type = EVENT_GEOREP_CONFIG_RESET;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_status_parse (words, wordcount, &amp;dict);</div><div class='add'>+                    ret1 = dict_get_str(options, "op_name", &amp;tmp);</div><div class='add'>+                    if (ret1)</div><div class='add'>+                        tmp = "";</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                goto out;</div><div class='add'>+                    gf_asprintf(&amp;events_str, "%soption=%s;", events_str, tmp);</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint32 (dict, "cmd", &amp;cmd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!(cmd &amp; GF_CLI_STATUS_ALL)) {</div><div class='del'>-                /* for one volume or brick */</div><div class='del'>-                proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STATUS_VOLUME];</div><div class='del'>-        } else {</div><div class='del'>-                /* volume status all or all detail */</div><div class='del'>-                proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STATUS_ALL];</div><div class='del'>-        }</div><div class='add'>+        if (event_type &gt; -1) {</div><div class='add'>+            /* Capture all optional arguments used */</div><div class='add'>+            ret1 = dict_get_int32(options, "force", &amp;tmpi);</div><div class='add'>+            if (ret1 == 0)</div><div class='add'>+                gf_asprintf(&amp;events_str, "%sforce=%d;", events_str, tmpi);</div><div class='ctx'> </div><div class='del'>-        if (!proc-&gt;fn)</div><div class='del'>-                goto out;</div><div class='add'>+            ret1 = dict_get_int32(options, "push_pem", &amp;tmpi);</div><div class='add'>+            if (ret1 == 0)</div><div class='add'>+                gf_asprintf(&amp;events_str, "%spush_pem=%d;", events_str, tmpi);</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+            ret1 = dict_get_int32(options, "no_verify", &amp;tmpi);</div><div class='add'>+            if (ret1 == 0)</div><div class='add'>+                gf_asprintf(&amp;events_str, "%sno_verify=%d;", events_str, tmpi);</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, dict);</div><div class='add'>+            ret1 = dict_get_int32(options, "ssh_port", &amp;tmpi);</div><div class='add'>+            if (ret1 == 0)</div><div class='add'>+                gf_asprintf(&amp;events_str, "%sssh_port=%d;", events_str, tmpi);</div><div class='ctx'> </div><div class='del'>-        ret = proc-&gt;fn (frame, THIS, dict);</div><div class='add'>+            ret1 = dict_get_int32(options, "reset-sync-time", &amp;tmpi);</div><div class='add'>+            if (ret1 == 0)</div><div class='add'>+                gf_asprintf(&amp;events_str, "%sreset_sync_time=%d;", events_str,</div><div class='add'>+                            tmpi);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+            /* Capture Master and Slave Info */</div><div class='add'>+            ret1 = dict_get_str(options, "master", &amp;tmp);</div><div class='add'>+            if (ret1)</div><div class='add'>+                tmp = "";</div><div class='add'>+            gf_asprintf(&amp;events_str, "%smaster=%s;", events_str, tmp);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+            ret1 = dict_get_str(options, "slave", &amp;tmp);</div><div class='add'>+            if (ret1)</div><div class='add'>+                tmp = "";</div><div class='add'>+            gf_asprintf(&amp;events_str, "%sslave=%s", events_str, tmp);</div><div class='ctx'> </div><div class='add'>+            gf_event(event_type, "%s", events_str);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-cli_get_detail_status (dict_t *dict, int i, cli_volume_status_t *status)</div><div class='del'>-{</div><div class='del'>-        uint64_t                   free            = 0;</div><div class='del'>-        uint64_t                   total           = 0;</div><div class='del'>-        char                       key[1024]       = {0};</div><div class='del'>-        int                        ret             = 0;</div><div class='add'>+        /* Allocated by gf_strdup and gf_asprintf */</div><div class='add'>+        GF_FREE(events_str);</div><div class='add'>+    }</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.free", i);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;free);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        status-&gt;free = gf_uint64_2human_readable (free);</div><div class='del'>-        if (!status-&gt;free)</div><div class='del'>-                goto out;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.total", i);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;total);</div><div class='add'>+int</div><div class='add'>+cli_cmd_volume_status_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        status-&gt;total = gf_uint64_2human_readable (total);</div><div class='del'>-        if (!status-&gt;total)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_cmd_volume_status_parse(words, wordcount, &amp;dict);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.device", i);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;(status-&gt;device));</div><div class='del'>-        if (ret)</div><div class='del'>-                status-&gt;device = NULL;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.block_size", i);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;(status-&gt;block_size));</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                status-&gt;block_size = 0;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_uint32(dict, "cmd", &amp;cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mnt_options", i);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;(status-&gt;mount_options));</div><div class='del'>-        if (ret)</div><div class='del'>-                status-&gt;mount_options = NULL;</div><div class='add'>+    if (!(cmd &amp; GF_CLI_STATUS_ALL)) {</div><div class='add'>+        /* for one volume or brick */</div><div class='add'>+        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STATUS_VOLUME];</div><div class='add'>+    } else {</div><div class='add'>+        /* volume status all or all detail */</div><div class='add'>+        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STATUS_ALL];</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.fs_name", i);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;(status-&gt;fs_name));</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                status-&gt;fs_name = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!proc-&gt;fn)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.inode_size", i);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;(status-&gt;inode_size));</div><div class='del'>-        if (ret)</div><div class='del'>-                status-&gt;inode_size = NULL;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.total_inodes", i);</div><div class='del'>-        ret = dict_get_uint64 (dict, key,</div><div class='del'>-                        &amp;(status-&gt;total_inodes));</div><div class='del'>-        if (ret)</div><div class='del'>-                status-&gt;total_inodes = 0;</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, dict);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.free_inodes", i);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;(status-&gt;free_inodes));</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                status-&gt;free_inodes = 0;</div><div class='del'>-        }</div><div class='add'>+    ret = proc-&gt;fn(frame, THIS, dict);</div><div class='ctx'> </div><div class='add'>+out:</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-cli_print_detailed_status (cli_volume_status_t *status)</div><div class='add'>+int</div><div class='add'>+cli_get_detail_status(dict_t *dict, int i, cli_volume_status_t *status)</div><div class='ctx'> {</div><div class='del'>-        cli_out ("%-20s : %-20s", "Brick", status-&gt;brick);</div><div class='add'>+    uint64_t free = 0;</div><div class='add'>+    uint64_t total = 0;</div><div class='add'>+    char key[1024] = {0};</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;online) {</div><div class='del'>-                cli_out ("%-20s : %-20d", "TCP Port", status-&gt;port);</div><div class='del'>-                cli_out ("%-20s : %-20d", "RDMA Port", status-&gt;rdma_port);</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%-20s : %-20s", "TCP Port", "N/A");</div><div class='del'>-                cli_out ("%-20s : %-20s", "RDMA Port", "N/A");</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.free", i);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;free);</div><div class='ctx'> </div><div class='del'>-        cli_out ("%-20s : %-20c", "Online", (status-&gt;online) ? 'Y' : 'N');</div><div class='del'>-        cli_out ("%-20s : %-20s", "Pid", status-&gt;pid_str);</div><div class='add'>+    status-&gt;free = gf_uint64_2human_readable(free);</div><div class='add'>+    if (!status-&gt;free)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;fs_name)</div><div class='del'>-                cli_out ("%-20s : %-20s", "File System", status-&gt;fs_name);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("%-20s : %-20s", "File System", "N/A");</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.total", i);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;total);</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;device)</div><div class='del'>-                cli_out ("%-20s : %-20s", "Device", status-&gt;device);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("%-20s : %-20s", "Device", "N/A");</div><div class='add'>+    status-&gt;total = gf_uint64_2human_readable(total);</div><div class='add'>+    if (!status-&gt;total)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;mount_options) {</div><div class='del'>-                cli_out ("%-20s : %-20s", "Mount Options",</div><div class='del'>-                         status-&gt;mount_options);</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%-20s : %-20s", "Mount Options", "N/A");</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.device", i);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;(status-&gt;device));</div><div class='add'>+    if (ret)</div><div class='add'>+        status-&gt;device = NULL;</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;inode_size) {</div><div class='del'>-                cli_out ("%-20s : %-20s", "Inode Size",</div><div class='del'>-                         status-&gt;inode_size);</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%-20s : %-20s", "Inode Size", "N/A");</div><div class='del'>-        }</div><div class='del'>-        if (status-&gt;free)</div><div class='del'>-                cli_out ("%-20s : %-20s", "Disk Space Free", status-&gt;free);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("%-20s : %-20s", "Disk Space Free", "N/A");</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.block_size", i);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;(status-&gt;block_size));</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        status-&gt;block_size = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;total)</div><div class='del'>-                cli_out ("%-20s : %-20s", "Total Disk Space", status-&gt;total);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("%-20s : %-20s", "Total Disk Space", "N/A");</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mnt_options", i);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;(status-&gt;mount_options));</div><div class='add'>+    if (ret)</div><div class='add'>+        status-&gt;mount_options = NULL;</div><div class='ctx'> </div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.fs_name", i);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;(status-&gt;fs_name));</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        status-&gt;fs_name = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.inode_size", i);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;(status-&gt;inode_size));</div><div class='add'>+    if (ret)</div><div class='add'>+        status-&gt;inode_size = NULL;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.total_inodes", i);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;(status-&gt;total_inodes));</div><div class='add'>+    if (ret)</div><div class='add'>+        status-&gt;total_inodes = 0;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.free_inodes", i);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;(status-&gt;free_inodes));</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        status-&gt;free_inodes = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;total_inodes) {</div><div class='del'>-                cli_out ("%-20s : %-20"GF_PRI_INODE, "Inode Count",</div><div class='del'>-                         status-&gt;total_inodes);</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%-20s : %-20s", "Inode Count", "N/A");</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (status-&gt;free_inodes) {</div><div class='del'>-                cli_out ("%-20s : %-20"GF_PRI_INODE, "Free Inodes",</div><div class='del'>-                         status-&gt;free_inodes);</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%-20s : %-20s", "Free Inodes", "N/A");</div><div class='del'>-        }</div><div class='add'>+void</div><div class='add'>+cli_print_detailed_status(cli_volume_status_t *status)</div><div class='add'>+{</div><div class='add'>+    cli_out("%-20s : %-20s", "Brick", status-&gt;brick);</div><div class='add'>+</div><div class='add'>+    if (status-&gt;online) {</div><div class='add'>+        cli_out("%-20s : %-20d", "TCP Port", status-&gt;port);</div><div class='add'>+        cli_out("%-20s : %-20d", "RDMA Port", status-&gt;rdma_port);</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-20s : %-20s", "TCP Port", "N/A");</div><div class='add'>+        cli_out("%-20s : %-20s", "RDMA Port", "N/A");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cli_out("%-20s : %-20c", "Online", (status-&gt;online) ? 'Y' : 'N');</div><div class='add'>+    cli_out("%-20s : %-20s", "Pid", status-&gt;pid_str);</div><div class='add'>+</div><div class='add'>+    if (status-&gt;fs_name)</div><div class='add'>+        cli_out("%-20s : %-20s", "File System", status-&gt;fs_name);</div><div class='add'>+    else</div><div class='add'>+        cli_out("%-20s : %-20s", "File System", "N/A");</div><div class='add'>+</div><div class='add'>+    if (status-&gt;device)</div><div class='add'>+        cli_out("%-20s : %-20s", "Device", status-&gt;device);</div><div class='add'>+    else</div><div class='add'>+        cli_out("%-20s : %-20s", "Device", "N/A");</div><div class='add'>+</div><div class='add'>+    if (status-&gt;mount_options) {</div><div class='add'>+        cli_out("%-20s : %-20s", "Mount Options", status-&gt;mount_options);</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-20s : %-20s", "Mount Options", "N/A");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (status-&gt;inode_size) {</div><div class='add'>+        cli_out("%-20s : %-20s", "Inode Size", status-&gt;inode_size);</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-20s : %-20s", "Inode Size", "N/A");</div><div class='add'>+    }</div><div class='add'>+    if (status-&gt;free)</div><div class='add'>+        cli_out("%-20s : %-20s", "Disk Space Free", status-&gt;free);</div><div class='add'>+    else</div><div class='add'>+        cli_out("%-20s : %-20s", "Disk Space Free", "N/A");</div><div class='add'>+</div><div class='add'>+    if (status-&gt;total)</div><div class='add'>+        cli_out("%-20s : %-20s", "Total Disk Space", status-&gt;total);</div><div class='add'>+    else</div><div class='add'>+        cli_out("%-20s : %-20s", "Total Disk Space", "N/A");</div><div class='add'>+</div><div class='add'>+    if (status-&gt;total_inodes) {</div><div class='add'>+        cli_out("%-20s : %-20" GF_PRI_INODE, "Inode Count",</div><div class='add'>+                status-&gt;total_inodes);</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-20s : %-20s", "Inode Count", "N/A");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (status-&gt;free_inodes) {</div><div class='add'>+        cli_out("%-20s : %-20" GF_PRI_INODE, "Free Inodes",</div><div class='add'>+                status-&gt;free_inodes);</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-20s : %-20s", "Free Inodes", "N/A");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_print_brick_status (cli_volume_status_t *status)</div><div class='add'>+cli_print_brick_status(cli_volume_status_t *status)</div><div class='ctx'> {</div><div class='del'>-        int  fieldlen = CLI_VOL_STATUS_BRICK_LEN;</div><div class='del'>-        int  bricklen = 0;</div><div class='del'>-        char *p = NULL;</div><div class='del'>-        int  num_spaces = 0;</div><div class='del'>-</div><div class='del'>-        p = status-&gt;brick;</div><div class='del'>-        bricklen = strlen (p);</div><div class='del'>-        while (bricklen &gt; 0) {</div><div class='del'>-                if (bricklen &gt; fieldlen) {</div><div class='del'>-                        cli_out ("%.*s", fieldlen, p);</div><div class='del'>-                        p += fieldlen;</div><div class='del'>-                        bricklen -= fieldlen;</div><div class='del'>-                } else {</div><div class='del'>-                        num_spaces = (fieldlen - bricklen) + 1;</div><div class='del'>-                        printf ("%s", p);</div><div class='del'>-                        while (num_spaces-- != 0)</div><div class='del'>-                                printf (" ");</div><div class='del'>-                        if (status-&gt;port || status-&gt;rdma_port) {</div><div class='del'>-                                if (status-&gt;online)</div><div class='del'>-                                        cli_out ("%-10d%-11d%-8c%-5s",</div><div class='del'>-                                                 status-&gt;port,</div><div class='del'>-                                                 status-&gt;rdma_port,</div><div class='del'>-                                                 status-&gt;online?'Y':'N',</div><div class='del'>-                                                 status-&gt;pid_str);</div><div class='del'>-                                else</div><div class='del'>-                                        cli_out ("%-10s%-11s%-8c%-5s",</div><div class='del'>-                                                 "N/A",</div><div class='del'>-                                                 "N/A",</div><div class='del'>-                                                 status-&gt;online?'Y':'N',</div><div class='del'>-                                                 status-&gt;pid_str);</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("%-10s%-11s%-8c%-5s",</div><div class='del'>-                                         "N/A", "N/A", status-&gt;online?'Y':'N',</div><div class='del'>-                                         status-&gt;pid_str);</div><div class='del'>-                        bricklen = 0;</div><div class='del'>-                }</div><div class='add'>+    int fieldlen = CLI_VOL_STATUS_BRICK_LEN;</div><div class='add'>+    int bricklen = 0;</div><div class='add'>+    char *p = NULL;</div><div class='add'>+    int num_spaces = 0;</div><div class='add'>+</div><div class='add'>+    p = status-&gt;brick;</div><div class='add'>+    bricklen = strlen(p);</div><div class='add'>+    while (bricklen &gt; 0) {</div><div class='add'>+        if (bricklen &gt; fieldlen) {</div><div class='add'>+            cli_out("%.*s", fieldlen, p);</div><div class='add'>+            p += fieldlen;</div><div class='add'>+            bricklen -= fieldlen;</div><div class='add'>+        } else {</div><div class='add'>+            num_spaces = (fieldlen - bricklen) + 1;</div><div class='add'>+            printf("%s", p);</div><div class='add'>+            while (num_spaces-- != 0)</div><div class='add'>+                printf(" ");</div><div class='add'>+            if (status-&gt;port || status-&gt;rdma_port) {</div><div class='add'>+                if (status-&gt;online)</div><div class='add'>+                    cli_out("%-10d%-11d%-8c%-5s", status-&gt;port,</div><div class='add'>+                            status-&gt;rdma_port, status-&gt;online ? 'Y' : 'N',</div><div class='add'>+                            status-&gt;pid_str);</div><div class='add'>+                else</div><div class='add'>+                    cli_out("%-10s%-11s%-8c%-5s", "N/A", "N/A",</div><div class='add'>+                            status-&gt;online ? 'Y' : 'N', status-&gt;pid_str);</div><div class='add'>+            } else</div><div class='add'>+                cli_out("%-10s%-11s%-8c%-5s", "N/A", "N/A",</div><div class='add'>+                        status-&gt;online ? 'Y' : 'N', status-&gt;pid_str);</div><div class='add'>+            bricklen = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define NEEDS_GLFS_HEAL(op) ((op == GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) || \</div><div class='del'>-                             (op == GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME) ||\</div><div class='del'>-                             (op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) ||      \</div><div class='del'>-                             (op == GF_SHD_OP_INDEX_SUMMARY) ||               \</div><div class='del'>-                             (op == GF_SHD_OP_SPLIT_BRAIN_FILES) ||           \</div><div class='del'>-                             (op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) || \</div><div class='del'>-                             (op == GF_SHD_OP_HEAL_SUMMARY))</div><div class='add'>+#define NEEDS_GLFS_HEAL(op)                                                    \</div><div class='add'>+    ((op == GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) ||                         \</div><div class='add'>+     (op == GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME) ||                        \</div><div class='add'>+     (op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) ||                               \</div><div class='add'>+     (op == GF_SHD_OP_INDEX_SUMMARY) || (op == GF_SHD_OP_SPLIT_BRAIN_FILES) || \</div><div class='add'>+     (op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) ||                           \</div><div class='add'>+     (op == GF_SHD_OP_HEAL_SUMMARY))</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_launch_glfs_heal (int heal_op, dict_t *options)</div><div class='add'>+cli_launch_glfs_heal(int heal_op, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        char      buff[PATH_MAX] = {0};</div><div class='del'>-        runner_t  runner         = {0};</div><div class='del'>-        char      *filename      = NULL;</div><div class='del'>-        char      *hostname      = NULL;</div><div class='del'>-        char      *path          = NULL;</div><div class='del'>-        char      *volname       = NULL;</div><div class='del'>-        char      *out           = NULL;</div><div class='del'>-        int        ret           = 0;</div><div class='del'>-</div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        ret = dict_get_str (options, "volname", &amp;volname);</div><div class='del'>-        runner_add_args (&amp;runner, SBIN_DIR"/glfsheal", volname, NULL);</div><div class='del'>-        runner_redir (&amp;runner, STDOUT_FILENO, RUN_PIPE);</div><div class='del'>-</div><div class='del'>-        switch (heal_op) {</div><div class='add'>+    char buff[PATH_MAX] = {0};</div><div class='add'>+    runner_t runner = {0};</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *out = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    ret = dict_get_str(options, "volname", &amp;volname);</div><div class='add'>+    runner_add_args(&amp;runner, SBIN_DIR "/glfsheal", volname, NULL);</div><div class='add'>+    runner_redir(&amp;runner, STDOUT_FILENO, RUN_PIPE);</div><div class='add'>+</div><div class='add'>+    switch (heal_op) {</div><div class='ctx'>         case GF_SHD_OP_INDEX_SUMMARY:</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        runner_add_args (&amp;runner, "xml", NULL);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+                runner_add_args(&amp;runner, "xml", NULL);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:</div><div class='del'>-                ret = dict_get_str (options, "file", &amp;filename);</div><div class='del'>-                runner_add_args (&amp;runner, "bigger-file", filename, NULL);</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_get_str(options, "file", &amp;filename);</div><div class='add'>+            runner_add_args(&amp;runner, "bigger-file", filename, NULL);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME:</div><div class='del'>-                ret = dict_get_str (options, "file", &amp;filename);</div><div class='del'>-                runner_add_args (&amp;runner, "latest-mtime", filename, NULL);</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_get_str(options, "file", &amp;filename);</div><div class='add'>+            runner_add_args(&amp;runner, "latest-mtime", filename, NULL);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='del'>-                ret = dict_get_str (options, "heal-source-hostname",</div><div class='del'>-                                    &amp;hostname);</div><div class='del'>-                ret = dict_get_str (options, "heal-source-brickpath",</div><div class='del'>-                                    &amp;path);</div><div class='del'>-                runner_add_args (&amp;runner, "source-brick", NULL);</div><div class='del'>-                runner_argprintf (&amp;runner, "%s:%s", hostname, path);</div><div class='del'>-                if (dict_get_str (options, "file", &amp;filename) == 0)</div><div class='del'>-                        runner_argprintf (&amp;runner, filename);</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_get_str(options, "heal-source-hostname", &amp;hostname);</div><div class='add'>+            ret = dict_get_str(options, "heal-source-brickpath", &amp;path);</div><div class='add'>+            runner_add_args(&amp;runner, "source-brick", NULL);</div><div class='add'>+            runner_argprintf(&amp;runner, "%s:%s", hostname, path);</div><div class='add'>+            if (dict_get_str(options, "file", &amp;filename) == 0)</div><div class='add'>+                runner_argprintf(&amp;runner, filename);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SPLIT_BRAIN_FILES:</div><div class='del'>-                runner_add_args (&amp;runner, "split-brain-info", NULL);</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        runner_add_args (&amp;runner, "xml", NULL);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            runner_add_args(&amp;runner, "split-brain-info", NULL);</div><div class='add'>+            if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+                runner_add_args(&amp;runner, "xml", NULL);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE:</div><div class='ctx'>         case GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE:</div><div class='del'>-                runner_add_args (&amp;runner, "granular-entry-heal-op", NULL);</div><div class='del'>-                break;</div><div class='add'>+            runner_add_args(&amp;runner, "granular-entry-heal-op", NULL);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_HEAL_SUMMARY:</div><div class='del'>-                runner_add_args (&amp;runner, "info-summary", NULL);</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        runner_add_args (&amp;runner, "xml", NULL);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            runner_add_args(&amp;runner, "info-summary", NULL);</div><div class='add'>+            if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+                runner_add_args(&amp;runner, "xml", NULL);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = runner_start (&amp;runner);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-        while ((out = fgets (buff, sizeof(buff),</div><div class='del'>-                             runner_chio (&amp;runner, STDOUT_FILENO)))) {</div><div class='del'>-                printf ("%s", out);</div><div class='del'>-        }</div><div class='del'>-        ret = runner_end (&amp;runner);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = runner_start(&amp;runner);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+    while ((</div><div class='add'>+        out = fgets(buff, sizeof(buff), runner_chio(&amp;runner, STDOUT_FILENO)))) {</div><div class='add'>+        printf("%s", out);</div><div class='add'>+    }</div><div class='add'>+    ret = runner_end(&amp;runner);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_heal_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                          const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_heal_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='del'>-        int                     parse_error = 0;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        int                     heal_op = 0;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int heal_op = 0;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 3) {</div><div class='del'>-               cli_usage_out (word-&gt;pattern);</div><div class='del'>-               parse_error = 1;</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount &lt; 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_volume_heal_options_parse (words, wordcount, &amp;options);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_int32 (options, "heal-op", &amp;heal_op);</div><div class='add'>+    ret = cli_cmd_volume_heal_options_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_int32(options, "heal-op", &amp;heal_op);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    if (NEEDS_GLFS_HEAL(heal_op)) {</div><div class='add'>+        ret = cli_launch_glfs_heal(heal_op, options);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        if (NEEDS_GLFS_HEAL (heal_op)) {</div><div class='del'>-                ret = cli_launch_glfs_heal (heal_op, options);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (heal_op != GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+        if (heal_op != GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_HEAL_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_HEAL_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0) &amp;&amp;</div><div class='del'>-                    !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                        cli_out ("Volume heal failed.");</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0) &amp;&amp;</div><div class='add'>+            !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+            cli_out("Volume heal failed.");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_statedump_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                              const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_statedump_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                             const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t            *proc = NULL;</div><div class='del'>-        call_frame_t                    *frame = NULL;</div><div class='del'>-        dict_t                          *options = NULL;</div><div class='del'>-        int                             sent = 0;</div><div class='del'>-        int                             parse_error = 0;</div><div class='del'>-        cli_local_t                     *local = NULL;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount &lt; 3) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount &lt; 3) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wordcount &gt;= 3) {</div><div class='del'>-               ret = cli_cmd_volume_statedump_options_parse (words, wordcount,</div><div class='del'>-                                                              &amp;options);</div><div class='del'>-               if (ret) {</div><div class='del'>-                       parse_error = 1;</div><div class='del'>-                       gf_log ("cli", GF_LOG_ERROR, "Error parsing "</div><div class='del'>-                               "statedump options");</div><div class='del'>-                       cli_out ("Error parsing options");</div><div class='del'>-                       cli_usage_out (word-&gt;pattern);</div><div class='del'>-               }</div><div class='add'>+    if (wordcount &gt;= 3) {</div><div class='add'>+        ret = cli_cmd_volume_statedump_options_parse(words, wordcount,</div><div class='add'>+                                                     &amp;options);</div><div class='add'>+        if (ret) {</div><div class='add'>+            parse_error = 1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Error parsing "</div><div class='add'>+                   "statedump options");</div><div class='add'>+            cli_out("Error parsing options");</div><div class='add'>+            cli_usage_out(word-&gt;pattern);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "volname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "volname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STATEDUMP_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_STATEDUMP_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume statedump failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume statedump failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_list_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                         const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_list_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        rpc_clnt_procedure_t    *proc = NULL;</div><div class='del'>-        int                     sent = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    int sent = 0;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LIST_VOLUME];</div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, NULL);</div><div class='del'>-        }</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_LIST_VOLUME];</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if (sent == 0)</div><div class='del'>-                        cli_out ("Volume list failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if (sent == 0)</div><div class='add'>+            cli_out("Volume list failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_clearlocks_cbk (struct cli_state *state,</div><div class='del'>-                               struct cli_cmd_word *word,</div><div class='del'>-                               const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_clearlocks_cbk(struct cli_state *state,</div><div class='add'>+                              struct cli_cmd_word *word, const char **words,</div><div class='add'>+                              int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t            *proc = NULL;</div><div class='del'>-        call_frame_t                    *frame = NULL;</div><div class='del'>-        dict_t                          *options = NULL;</div><div class='del'>-        int                             sent = 0;</div><div class='del'>-        int                             parse_error = 0;</div><div class='del'>-        cli_local_t                     *local = NULL;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (wordcount &lt; 7 || wordcount &gt; 8) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-       ret = cli_cmd_volume_clrlks_opts_parse (words, wordcount, &amp;options);</div><div class='del'>-       if (ret) {</div><div class='del'>-               parse_error = 1;</div><div class='del'>-               gf_log ("cli", GF_LOG_ERROR, "Error parsing "</div><div class='del'>-                       "clear-locks options");</div><div class='del'>-               cli_out ("Error parsing options");</div><div class='del'>-               cli_usage_out (word-&gt;pattern);</div><div class='del'>-       }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "volname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (wordcount &lt; 7 || wordcount &gt; 8) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_volume_clrlks_opts_parse(words, wordcount, &amp;options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Error parsing "</div><div class='add'>+               "clear-locks options");</div><div class='add'>+        cli_out("Error parsing options");</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(options, "volname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "path", (char *)words[3]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "path", (char *)words[3]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_CLRLOCKS_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_CLRLOCKS_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn) {</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='del'>-        }</div><div class='add'>+    if (proc-&gt;fn) {</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_out ("Volume clear-locks failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_out("Volume clear-locks failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_barrier_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                            const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_barrier_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                           const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        rpc_clnt_procedure_t *proc = NULL;</div><div class='del'>-        call_frame_t *frame = NULL;</div><div class='del'>-        dict_t *options = NULL;</div><div class='del'>-        int sent = 0;</div><div class='del'>-        int parse_error = 0;</div><div class='del'>-        cli_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_error = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (wordcount != 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_error = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (wordcount != 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_error = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        options = dict_new();</div><div class='del'>-        if (!options) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str(options, "volname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    options = dict_new();</div><div class='add'>+    if (!options) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(options, "volname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "barrier", (char *)words[3]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "barrier", (char *)words[3]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_BARRIER_VOLUME];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_BARRIER_VOLUME];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='del'>-                        cli_err ("Volume barrier failed");</div><div class='del'>-        }</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_error == 0))</div><div class='add'>+            cli_err("Volume barrier failed");</div><div class='add'>+    }</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_getopt_cbk (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                        const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_getopt_cbk(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                          const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        int                   ret       = -1;</div><div class='del'>-        rpc_clnt_procedure_t *proc      = NULL;</div><div class='del'>-        call_frame_t         *frame     = NULL;</div><div class='del'>-        dict_t               *options   = NULL;</div><div class='del'>-        int                   sent      = 0;</div><div class='del'>-        int                   parse_err = 0;</div><div class='del'>-        cli_local_t          *local     = NULL;</div><div class='del'>-</div><div class='del'>-        if (wordcount != 4) {</div><div class='del'>-                cli_usage_out (word-&gt;pattern);</div><div class='del'>-                parse_err = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int sent = 0;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    if (wordcount != 4) {</div><div class='add'>+        cli_usage_out(word-&gt;pattern);</div><div class='add'>+        parse_err = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = dict_new ();</div><div class='del'>-        if (!options)</div><div class='del'>-                goto out;</div><div class='add'>+    options = dict_new();</div><div class='add'>+    if (!options)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "volname", (char *)words[2]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "volname", (char *)words[2]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "key", (char *)words[3]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "key", (char *)words[3]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_VOL_OPT];</div><div class='add'>+    proc = &amp;cli_rpc_prog-&gt;proctable[GLUSTER_CLI_GET_VOL_OPT];</div><div class='ctx'> </div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, options);</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, options);</div><div class='ctx'> </div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, THIS, options);</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, THIS, options);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_cmd_sent_status_get (&amp;sent);</div><div class='del'>-                if ((sent == 0) &amp;&amp; (parse_err == 0))</div><div class='del'>-                        cli_err ("Volume get option failed");</div><div class='del'>-        }</div><div class='del'>-        CLI_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_cmd_sent_status_get(&amp;sent);</div><div class='add'>+        if ((sent == 0) &amp;&amp; (parse_err == 0))</div><div class='add'>+            cli_err("Volume get option failed");</div><div class='add'>+    }</div><div class='add'>+    CLI_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This is a bit of a hack to display the help. The current bitrot cmd</div><div class='ctx'>  * format does not work well when registering the cmds.</div><div class='ctx'>  * Ideally the should have been of the form</div><div class='hunk'>@@ -3214,430 +3197,372 @@ out:</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd bitrot_cmds[] = {</div><div class='ctx'> </div><div class='del'>-        {"volume bitrot help",</div><div class='del'>-         cli_cmd_bitrot_help_cbk,</div><div class='del'>-         "display help for volume bitrot commands"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume bitrot &lt;VOLNAME&gt; {enable|disable}",</div><div class='del'>-         NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='del'>-         "Enable/disable bitrot for volume &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume bitrot &lt;VOLNAME&gt; scrub-throttle {lazy|normal|aggressive}",</div><div class='del'>-         NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='del'>-         "Set the speed of the scrubber for volume &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume bitrot &lt;VOLNAME&gt; scrub-frequency {hourly|daily|weekly|biweekly"</div><div class='del'>-         "|monthly}",</div><div class='del'>-         NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='del'>-         "Set the frequency of the scrubber for volume &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume bitrot &lt;VOLNAME&gt; scrub {pause|resume|status|ondemand}",</div><div class='del'>-         NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='del'>-         "Pause/resume the scrubber for &lt;VOLNAME&gt;. Status displays the status of "</div><div class='del'>-         "the scrubber. ondemand starts the scrubber immediately."</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume bitrot &lt;VOLNAME&gt; {enable|disable}\n"</div><div class='del'>-         "volume bitrot &lt;volname&gt; scrub-throttle {lazy|normal|aggressive}\n"</div><div class='del'>-         "volume bitrot &lt;volname&gt; scrub-frequency {hourly|daily|weekly|biweekly"</div><div class='del'>-         "|monthly}\n"</div><div class='del'>-         "volume bitrot &lt;volname&gt; scrub {pause|resume|status|ondemand}",</div><div class='del'>-         cli_cmd_bitrot_cbk,</div><div class='del'>-         NULL</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+    {"volume bitrot help", cli_cmd_bitrot_help_cbk,</div><div class='add'>+     "display help for volume bitrot commands"},</div><div class='add'>+</div><div class='add'>+    {"volume bitrot &lt;VOLNAME&gt; {enable|disable}", NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='add'>+     "Enable/disable bitrot for volume &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume bitrot &lt;VOLNAME&gt; scrub-throttle {lazy|normal|aggressive}",</div><div class='add'>+     NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='add'>+     "Set the speed of the scrubber for volume &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume bitrot &lt;VOLNAME&gt; scrub-frequency {hourly|daily|weekly|biweekly"</div><div class='add'>+     "|monthly}",</div><div class='add'>+     NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='add'>+     "Set the frequency of the scrubber for volume &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='add'>+    {"volume bitrot &lt;VOLNAME&gt; scrub {pause|resume|status|ondemand}",</div><div class='add'>+     NULL, /*cli_cmd_bitrot_cbk,*/</div><div class='add'>+     "Pause/resume the scrubber for &lt;VOLNAME&gt;. Status displays the status of "</div><div class='add'>+     "the scrubber. ondemand starts the scrubber immediately."},</div><div class='add'>+</div><div class='add'>+    {"volume bitrot &lt;VOLNAME&gt; {enable|disable}\n"</div><div class='add'>+     "volume bitrot &lt;volname&gt; scrub-throttle {lazy|normal|aggressive}\n"</div><div class='add'>+     "volume bitrot &lt;volname&gt; scrub-frequency {hourly|daily|weekly|biweekly"</div><div class='add'>+     "|monthly}\n"</div><div class='add'>+     "volume bitrot &lt;volname&gt; scrub {pause|resume|status|ondemand}",</div><div class='add'>+     cli_cmd_bitrot_cbk, NULL},</div><div class='add'>+</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd quota_cmds[] = {</div><div class='ctx'> </div><div class='del'>-        /* Quota commands */</div><div class='del'>-        {"volume quota help",</div><div class='del'>-         cli_cmd_quota_help_cbk,</div><div class='del'>-         "display help for volume quota commands"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume quota &lt;VOLNAME&gt; {enable|disable|list [&lt;path&gt; ...]| "</div><div class='del'>-         "list-objects [&lt;path&gt; ...] | remove &lt;path&gt;| remove-objects &lt;path&gt; | "</div><div class='del'>-         "default-soft-limit &lt;percent&gt;}",</div><div class='del'>-         cli_cmd_quota_cbk,</div><div class='del'>-         "Enable/disable and configure quota for &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume quota &lt;VOLNAME&gt; {limit-usage &lt;path&gt; &lt;size&gt; [&lt;percent&gt;]}",</div><div class='del'>-         cli_cmd_quota_cbk,</div><div class='del'>-         "Set maximum size for &lt;path&gt; for &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume quota &lt;VOLNAME&gt; {limit-objects &lt;path&gt; &lt;number&gt; [&lt;percent&gt;]}",</div><div class='del'>-         cli_cmd_quota_cbk,</div><div class='del'>-         "Set the maximum number of entries allowed in &lt;path&gt; for &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        {"volume quota &lt;VOLNAME&gt; {alert-time|soft-timeout|hard-timeout} {&lt;time&gt;}",</div><div class='del'>-         cli_cmd_quota_cbk,</div><div class='del'>-         "Set quota timeout for &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { "volume inode-quota &lt;VOLNAME&gt; enable",</div><div class='del'>-          cli_cmd_quota_cbk,</div><div class='del'>-          "Enable/disable inode-quota for &lt;VOLNAME&gt;"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { "volume quota &lt;VOLNAME&gt; {enable|disable|list [&lt;path&gt; ...]| "</div><div class='del'>-          "list-objects [&lt;path&gt; ...] | remove &lt;path&gt;| remove-objects &lt;path&gt; | "</div><div class='del'>-          "default-soft-limit &lt;percent&gt;}\n"</div><div class='del'>-          "volume quota &lt;VOLNAME&gt; {limit-usage &lt;path&gt; &lt;size&gt; [&lt;percent&gt;]}\n"</div><div class='del'>-          "volume quota &lt;VOLNAME&gt; {limit-objects &lt;path&gt; &lt;number&gt; [&lt;percent&gt;]}\n"</div><div class='del'>-          "volume quota &lt;VOLNAME&gt; {alert-time|soft-timeout|hard-timeout} {&lt;time&gt;}",</div><div class='del'>-          cli_cmd_quota_cbk,</div><div class='del'>-          NULL</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+    /* Quota commands */</div><div class='add'>+    {"volume quota help", cli_cmd_quota_help_cbk,</div><div class='add'>+     "display help for volume quota commands"},</div><div class='add'>+</div><div class='add'>+    {"volume quota &lt;VOLNAME&gt; {enable|disable|list [&lt;path&gt; ...]| "</div><div class='add'>+     "list-objects [&lt;path&gt; ...] | remove &lt;path&gt;| remove-objects &lt;path&gt; | "</div><div class='add'>+     "default-soft-limit &lt;percent&gt;}",</div><div class='add'>+     cli_cmd_quota_cbk, "Enable/disable and configure quota for &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume quota &lt;VOLNAME&gt; {limit-usage &lt;path&gt; &lt;size&gt; [&lt;percent&gt;]}",</div><div class='add'>+     cli_cmd_quota_cbk, "Set maximum size for &lt;path&gt; for &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume quota &lt;VOLNAME&gt; {limit-objects &lt;path&gt; &lt;number&gt; [&lt;percent&gt;]}",</div><div class='add'>+     cli_cmd_quota_cbk,</div><div class='add'>+     "Set the maximum number of entries allowed in &lt;path&gt; for &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume quota &lt;VOLNAME&gt; {alert-time|soft-timeout|hard-timeout} {&lt;time&gt;}",</div><div class='add'>+     cli_cmd_quota_cbk, "Set quota timeout for &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume inode-quota &lt;VOLNAME&gt; enable", cli_cmd_quota_cbk,</div><div class='add'>+     "Enable/disable inode-quota for &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume quota &lt;VOLNAME&gt; {enable|disable|list [&lt;path&gt; ...]| "</div><div class='add'>+     "list-objects [&lt;path&gt; ...] | remove &lt;path&gt;| remove-objects &lt;path&gt; | "</div><div class='add'>+     "default-soft-limit &lt;percent&gt;}\n"</div><div class='add'>+     "volume quota &lt;VOLNAME&gt; {limit-usage &lt;path&gt; &lt;size&gt; [&lt;percent&gt;]}\n"</div><div class='add'>+     "volume quota &lt;VOLNAME&gt; {limit-objects &lt;path&gt; &lt;number&gt; [&lt;percent&gt;]}\n"</div><div class='add'>+     "volume quota &lt;VOLNAME&gt; {alert-time|soft-timeout|hard-timeout} {&lt;time&gt;}",</div><div class='add'>+     cli_cmd_quota_cbk, NULL},</div><div class='add'>+</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd tier_cmds[] = {</div><div class='ctx'> </div><div class='del'>-        { "volume tier help",</div><div class='del'>-          cli_cmd_tier_help_cbk,</div><div class='del'>-          "display help for volume tier commands"},</div><div class='add'>+    {"volume tier help", cli_cmd_tier_help_cbk,</div><div class='add'>+     "display help for volume tier commands"},</div><div class='ctx'> </div><div class='del'>-        { "volume tier &lt;VOLNAME&gt; status",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "Display tier status for &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume tier &lt;VOLNAME&gt; status", cli_cmd_volume_tier_cbk,</div><div class='add'>+     "Display tier status for &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume tier &lt;VOLNAME&gt; start [force]",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "Start the tier service for &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume tier &lt;VOLNAME&gt; start [force]", cli_cmd_volume_tier_cbk,</div><div class='add'>+     "Start the tier service for &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume tier &lt;VOLNAME&gt; stop [force]",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "Stop the tier service for &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume tier &lt;VOLNAME&gt; stop [force]", cli_cmd_volume_tier_cbk,</div><div class='add'>+     "Stop the tier service for &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume tier &lt;VOLNAME&gt; attach [&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;... [force]",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "Attach a hot tier to &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume tier &lt;VOLNAME&gt; attach [&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;... [force]",</div><div class='add'>+     cli_cmd_volume_tier_cbk, "Attach a hot tier to &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume tier &lt;VOLNAME&gt; detach &lt;start|stop|status|commit|[force]&gt;",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "Detach the hot tier from &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume tier &lt;VOLNAME&gt; detach &lt;start|stop|status|commit|[force]&gt;",</div><div class='add'>+     cli_cmd_volume_tier_cbk, "Detach the hot tier from &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume attach-tier &lt;VOLNAME&gt; [&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;...",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "NOTE: this is old syntax, will be deprecated in next release. "</div><div class='del'>-          "Please use gluster volume tier &lt;vol&gt; attach "</div><div class='del'>-          "[&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;..."},</div><div class='add'>+    {"volume attach-tier &lt;VOLNAME&gt; [&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;...",</div><div class='add'>+     cli_cmd_volume_tier_cbk,</div><div class='add'>+     "NOTE: this is old syntax, will be deprecated in next release. "</div><div class='add'>+     "Please use gluster volume tier &lt;vol&gt; attach "</div><div class='add'>+     "[&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;..."},</div><div class='ctx'> </div><div class='del'>-        { "volume detach-tier &lt;VOLNAME&gt; "</div><div class='del'>-          "&lt;start|stop|status|commit|force&gt;",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          "NOTE: this is old syntax, will be deprecated in next release. "</div><div class='del'>-          "Please use gluster volume tier &lt;vol&gt; detach "</div><div class='del'>-          "{start|stop|commit} [force]"},</div><div class='add'>+    {"volume detach-tier &lt;VOLNAME&gt; "</div><div class='add'>+     "&lt;start|stop|status|commit|force&gt;",</div><div class='add'>+     cli_cmd_volume_tier_cbk,</div><div class='add'>+     "NOTE: this is old syntax, will be deprecated in next release. "</div><div class='add'>+     "Please use gluster volume tier &lt;vol&gt; detach "</div><div class='add'>+     "{start|stop|commit} [force]"},</div><div class='ctx'> </div><div class='del'>-        { "volume tier &lt;VOLNAME&gt; status\n"</div><div class='del'>-          "volume tier &lt;VOLNAME&gt; start [force]\n"</div><div class='del'>-          "volume tier &lt;VOLNAME&gt; stop\n"</div><div class='del'>-          "volume tier &lt;VOLNAME&gt; attach [&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;... [force]\n"</div><div class='del'>-          "volume tier &lt;VOLNAME&gt; detach &lt;start|stop|status|commit|[force]&gt;\n",</div><div class='del'>-          cli_cmd_volume_tier_cbk,</div><div class='del'>-          NULL },</div><div class='add'>+    {"volume tier &lt;VOLNAME&gt; status\n"</div><div class='add'>+     "volume tier &lt;VOLNAME&gt; start [force]\n"</div><div class='add'>+     "volume tier &lt;VOLNAME&gt; stop\n"</div><div class='add'>+     "volume tier &lt;VOLNAME&gt; attach [&lt;replica COUNT&gt;] &lt;NEW-BRICK&gt;... [force]\n"</div><div class='add'>+     "volume tier &lt;VOLNAME&gt; detach &lt;start|stop|status|commit|[force]&gt;\n",</div><div class='add'>+     cli_cmd_volume_tier_cbk, NULL},</div><div class='ctx'> </div><div class='del'>-        {NULL, NULL, NULL}</div><div class='add'>+    {NULL, NULL, NULL}</div><div class='ctx'> </div><div class='del'>-        };</div><div class='add'>+};</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd volume_cmds[] = {</div><div class='del'>-        { "volume help",</div><div class='del'>-          cli_cmd_volume_help_cbk,</div><div class='del'>-          "display help for volume commands"},</div><div class='del'>-</div><div class='del'>-        { "volume info [all|&lt;VOLNAME&gt;]",</div><div class='del'>-          cli_cmd_volume_info_cbk,</div><div class='del'>-          "list information of all volumes"},</div><div class='del'>-</div><div class='del'>-        { "volume create &lt;NEW-VOLNAME&gt; [stripe &lt;COUNT&gt;] "</div><div class='del'>-          "[replica &lt;COUNT&gt; [arbiter &lt;COUNT&gt;]] "</div><div class='del'>-          "[disperse [&lt;COUNT&gt;]] [disperse-data &lt;COUNT&gt;] [redundancy &lt;COUNT&gt;] "</div><div class='del'>-          "[transport &lt;tcp|rdma|tcp,rdma&gt;] &lt;NEW-BRICK&gt;"</div><div class='add'>+    {"volume help", cli_cmd_volume_help_cbk,</div><div class='add'>+     "display help for volume commands"},</div><div class='add'>+</div><div class='add'>+    {"volume info [all|&lt;VOLNAME&gt;]", cli_cmd_volume_info_cbk,</div><div class='add'>+     "list information of all volumes"},</div><div class='add'>+</div><div class='add'>+    {"volume create &lt;NEW-VOLNAME&gt; [stripe &lt;COUNT&gt;] "</div><div class='add'>+     "[replica &lt;COUNT&gt; [arbiter &lt;COUNT&gt;]] "</div><div class='add'>+     "[disperse [&lt;COUNT&gt;]] [disperse-data &lt;COUNT&gt;] [redundancy &lt;COUNT&gt;] "</div><div class='add'>+     "[transport &lt;tcp|rdma|tcp,rdma&gt;] &lt;NEW-BRICK&gt;"</div><div class='ctx'> #ifdef HAVE_BD_XLATOR</div><div class='del'>-          "?&lt;vg_name&gt;"</div><div class='add'>+     "?&lt;vg_name&gt;"</div><div class='ctx'> #endif</div><div class='del'>-          "... [force]",</div><div class='del'>-</div><div class='del'>-          cli_cmd_volume_create_cbk,</div><div class='del'>-          "create a new volume of specified type with mentioned bricks"},</div><div class='add'>+     "... [force]",</div><div class='ctx'> </div><div class='del'>-        { "volume delete &lt;VOLNAME&gt;",</div><div class='del'>-          cli_cmd_volume_delete_cbk,</div><div class='del'>-          "delete volume specified by &lt;VOLNAME&gt;"},</div><div class='add'>+     cli_cmd_volume_create_cbk,</div><div class='add'>+     "create a new volume of specified type with mentioned bricks"},</div><div class='ctx'> </div><div class='del'>-        { "volume start &lt;VOLNAME&gt; [force]",</div><div class='del'>-          cli_cmd_volume_start_cbk,</div><div class='del'>-          "start volume specified by &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume delete &lt;VOLNAME&gt;", cli_cmd_volume_delete_cbk,</div><div class='add'>+     "delete volume specified by &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume stop &lt;VOLNAME&gt; [force]",</div><div class='del'>-          cli_cmd_volume_stop_cbk,</div><div class='del'>-          "stop volume specified by &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume start &lt;VOLNAME&gt; [force]", cli_cmd_volume_start_cbk,</div><div class='add'>+     "start volume specified by &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        /*{ "volume rename &lt;VOLNAME&gt; &lt;NEW-VOLNAME&gt;",</div><div class='del'>-          cli_cmd_volume_rename_cbk,</div><div class='del'>-          "rename volume &lt;VOLNAME&gt; to &lt;NEW-VOLNAME&gt;"},*/</div><div class='add'>+    {"volume stop &lt;VOLNAME&gt; [force]", cli_cmd_volume_stop_cbk,</div><div class='add'>+     "stop volume specified by &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume add-brick &lt;VOLNAME&gt; [&lt;stripe|replica&gt; &lt;COUNT&gt; "</div><div class='del'>-          "[arbiter &lt;COUNT&gt;]] &lt;NEW-BRICK&gt; ... [force]",</div><div class='del'>-          cli_cmd_volume_add_brick_cbk,</div><div class='del'>-          "add brick to volume &lt;VOLNAME&gt;"},</div><div class='add'>+    /*{ "volume rename &lt;VOLNAME&gt; &lt;NEW-VOLNAME&gt;",</div><div class='add'>+      cli_cmd_volume_rename_cbk,</div><div class='add'>+      "rename volume &lt;VOLNAME&gt; to &lt;NEW-VOLNAME&gt;"},*/</div><div class='ctx'> </div><div class='del'>-        { "volume remove-brick &lt;VOLNAME&gt; [replica &lt;COUNT&gt;] &lt;BRICK&gt; ..."</div><div class='del'>-          " &lt;start|stop|status|commit|force&gt;",</div><div class='del'>-          cli_cmd_volume_remove_brick_cbk,</div><div class='del'>-          "remove brick from volume &lt;VOLNAME&gt;"},</div><div class='add'>+    {"volume add-brick &lt;VOLNAME&gt; [&lt;stripe|replica&gt; &lt;COUNT&gt; "</div><div class='add'>+     "[arbiter &lt;COUNT&gt;]] &lt;NEW-BRICK&gt; ... [force]",</div><div class='add'>+     cli_cmd_volume_add_brick_cbk, "add brick to volume &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume rebalance &lt;VOLNAME&gt; {{fix-layout start} | {start [force]|stop|status}}",</div><div class='del'>-          cli_cmd_volume_defrag_cbk,</div><div class='del'>-          "rebalance operations"},</div><div class='add'>+    {"volume remove-brick &lt;VOLNAME&gt; [replica &lt;COUNT&gt;] &lt;BRICK&gt; ..."</div><div class='add'>+     " &lt;start|stop|status|commit|force&gt;",</div><div class='add'>+     cli_cmd_volume_remove_brick_cbk, "remove brick from volume &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume replace-brick &lt;VOLNAME&gt; &lt;SOURCE-BRICK&gt; &lt;NEW-BRICK&gt; "</div><div class='del'>-          "{commit force}",</div><div class='del'>-          cli_cmd_volume_replace_brick_cbk,</div><div class='del'>-          "replace-brick operations"},</div><div class='add'>+    {"volume rebalance &lt;VOLNAME&gt; {{fix-layout start} | {start "</div><div class='add'>+     "[force]|stop|status}}",</div><div class='add'>+     cli_cmd_volume_defrag_cbk, "rebalance operations"},</div><div class='ctx'> </div><div class='del'>-        /*{ "volume set-transport &lt;VOLNAME&gt; &lt;TRANSPORT-TYPE&gt; [&lt;TRANSPORT-TYPE&gt;] ...",</div><div class='del'>-          cli_cmd_volume_set_transport_cbk,</div><div class='del'>-          "set transport type for volume &lt;VOLNAME&gt;"},*/</div><div class='add'>+    {"volume replace-brick &lt;VOLNAME&gt; &lt;SOURCE-BRICK&gt; &lt;NEW-BRICK&gt; "</div><div class='add'>+     "{commit force}",</div><div class='add'>+     cli_cmd_volume_replace_brick_cbk, "replace-brick operations"},</div><div class='ctx'> </div><div class='del'>-        { "volume set &lt;VOLNAME&gt; &lt;KEY&gt; &lt;VALUE&gt;",</div><div class='del'>-          cli_cmd_volume_set_cbk,</div><div class='del'>-         "set options for volume &lt;VOLNAME&gt;"},</div><div class='add'>+    /*{ "volume set-transport &lt;VOLNAME&gt; &lt;TRANSPORT-TYPE&gt; [&lt;TRANSPORT-TYPE&gt;]</div><div class='add'>+      ...", cli_cmd_volume_set_transport_cbk, "set transport type for volume</div><div class='add'>+      &lt;VOLNAME&gt;"},*/</div><div class='ctx'> </div><div class='add'>+    {"volume set &lt;VOLNAME&gt; &lt;KEY&gt; &lt;VALUE&gt;", cli_cmd_volume_set_cbk,</div><div class='add'>+     "set options for volume &lt;VOLNAME&gt;"},</div><div class='ctx'> </div><div class='del'>-        { "volume log &lt;VOLNAME&gt; rotate [BRICK]",</div><div class='del'>-          cli_cmd_log_rotate_cbk,</div><div class='del'>-         "rotate the log file for corresponding volume/brick"},</div><div class='add'>+    {"volume log &lt;VOLNAME&gt; rotate [BRICK]", cli_cmd_log_rotate_cbk,</div><div class='add'>+     "rotate the log file for corresponding volume/brick"},</div><div class='ctx'> </div><div class='del'>-        { "volume log rotate &lt;VOLNAME&gt; [BRICK]",</div><div class='del'>-          cli_cmd_log_rotate_cbk,</div><div class='del'>-         "rotate the log file for corresponding volume/brick"</div><div class='del'>-         " NOTE: This is an old syntax, will be deprecated from next release."},</div><div class='add'>+    {"volume log rotate &lt;VOLNAME&gt; [BRICK]", cli_cmd_log_rotate_cbk,</div><div class='add'>+     "rotate the log file for corresponding volume/brick"</div><div class='add'>+     " NOTE: This is an old syntax, will be deprecated from next release."},</div><div class='ctx'> </div><div class='del'>-        { "volume sync &lt;HOSTNAME&gt; [all|&lt;VOLNAME&gt;]",</div><div class='del'>-          cli_cmd_sync_volume_cbk,</div><div class='del'>-         "sync the volume information from a peer"},</div><div class='add'>+    {"volume sync &lt;HOSTNAME&gt; [all|&lt;VOLNAME&gt;]", cli_cmd_sync_volume_cbk,</div><div class='add'>+     "sync the volume information from a peer"},</div><div class='ctx'> </div><div class='del'>-         { "volume reset &lt;VOLNAME&gt; [option] [force]",</div><div class='del'>-         cli_cmd_volume_reset_cbk,</div><div class='del'>-         "reset all the reconfigured options"},</div><div class='add'>+    {"volume reset &lt;VOLNAME&gt; [option] [force]", cli_cmd_volume_reset_cbk,</div><div class='add'>+     "reset all the reconfigured options"},</div><div class='ctx'> </div><div class='ctx'> #if (SYNCDAEMON_COMPILE)</div><div class='del'>-        {"volume "GEOREP" [&lt;VOLNAME&gt;] [&lt;SLAVE-URL&gt;] {create [[ssh-port n] [[no-verify]|[push-pem]]] [force]"</div><div class='del'>-         "|start [force]|stop [force]|pause [force]|resume [force]|config|status [detail]|delete [reset-sync-time]} [options...]",</div><div class='del'>-         cli_cmd_volume_gsync_set_cbk,</div><div class='del'>-         "Geo-sync operations",</div><div class='del'>-         cli_cmd_check_gsync_exists_cbk},</div><div class='add'>+    {"volume " GEOREP " [&lt;VOLNAME&gt;] [&lt;SLAVE-URL&gt;] {create [[ssh-port n] "</div><div class='add'>+                      "[[no-verify]|[push-pem]]] [force]"</div><div class='add'>+     "|start [force]|stop [force]|pause [force]|resume [force]|config|status "</div><div class='add'>+     "[detail]|delete [reset-sync-time]} [options...]",</div><div class='add'>+     cli_cmd_volume_gsync_set_cbk, "Geo-sync operations",</div><div class='add'>+     cli_cmd_check_gsync_exists_cbk},</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-         { "volume profile &lt;VOLNAME&gt; {start|info [peek|incremental [peek]|cumulative|clear]|stop} [nfs]",</div><div class='del'>-           cli_cmd_volume_profile_cbk,</div><div class='del'>-           "volume profile operations"},</div><div class='del'>-</div><div class='del'>-         { "volume top &lt;VOLNAME&gt; {open|read|write|opendir|readdir|clear} [nfs|brick &lt;brick&gt;] [list-cnt &lt;value&gt;] |\n"</div><div class='del'>-           "volume top &lt;VOLNAME&gt; {read-perf|write-perf} [bs &lt;size&gt; count &lt;count&gt;] [brick &lt;brick&gt;] [list-cnt &lt;value&gt;]",</div><div class='del'>-           cli_cmd_volume_top_cbk,</div><div class='del'>-           "volume top operations"},</div><div class='del'>-</div><div class='del'>-        { "volume status [all | &lt;VOLNAME&gt; [nfs|shd|&lt;BRICK&gt;|quotad|tierd]]"</div><div class='del'>-          " [detail|clients|mem|inode|fd|callpool|tasks|client-list]",</div><div class='del'>-          cli_cmd_volume_status_cbk,</div><div class='del'>-          "display status of all or specified volume(s)/brick"},</div><div class='del'>-</div><div class='del'>-        { "volume heal &lt;VOLNAME&gt; [enable | disable | full |"</div><div class='del'>-          "statistics [heal-count [replica &lt;HOSTNAME:BRICKNAME&gt;]] |"</div><div class='del'>-          "info [summary | split-brain] |"</div><div class='del'>-          "split-brain {bigger-file &lt;FILE&gt; | latest-mtime &lt;FILE&gt; |"</div><div class='del'>-                       "source-brick &lt;HOSTNAME:BRICKNAME&gt; [&lt;FILE&gt;]} |"</div><div class='del'>-          "granular-entry-heal {enable | disable}]",</div><div class='del'>-          cli_cmd_volume_heal_cbk,</div><div class='del'>-          "self-heal commands on volume specified by &lt;VOLNAME&gt;"},</div><div class='del'>-</div><div class='del'>-        {"volume statedump &lt;VOLNAME&gt; [[nfs|quotad] [all|mem|iobuf|callpool|"</div><div class='del'>-         "priv|fd|inode|history]... | [client &lt;hostname:process-id&gt;]]",</div><div class='del'>-         cli_cmd_volume_statedump_cbk,</div><div class='del'>-         "perform statedump on bricks"},</div><div class='del'>-</div><div class='del'>-        {"volume list",</div><div class='del'>-         cli_cmd_volume_list_cbk,</div><div class='del'>-         "list all volumes in cluster"},</div><div class='del'>-</div><div class='del'>-        {"volume clear-locks &lt;VOLNAME&gt; &lt;path&gt; kind {blocked|granted|all}"</div><div class='del'>-          "{inode [range]|entry [basename]|posix [range]}",</div><div class='del'>-          cli_cmd_volume_clearlocks_cbk,</div><div class='del'>-          "Clear locks held on path"</div><div class='del'>-        },</div><div class='del'>-        {"volume barrier &lt;VOLNAME&gt; {enable|disable}",</div><div class='del'>-         cli_cmd_volume_barrier_cbk,</div><div class='del'>-         "Barrier/unbarrier file operations on a volume"</div><div class='del'>-        },</div><div class='del'>-        {"volume get &lt;VOLNAME|all&gt; &lt;key|all&gt;",</div><div class='del'>-         cli_cmd_volume_getopt_cbk,</div><div class='del'>-         "Get the value of the all options or given option for volume &lt;VOLNAME&gt;"</div><div class='del'>-         " or all option. gluster volume get all all is to get all global "</div><div class='del'>-         "options"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { "volume reset-brick &lt;VOLNAME&gt; &lt;SOURCE-BRICK&gt; {{start} |"</div><div class='del'>-          " {&lt;NEW-BRICK&gt; commit}}",</div><div class='del'>-          cli_cmd_volume_reset_brick_cbk,</div><div class='del'>-          "reset-brick operations"},</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        { NULL, NULL, NULL }</div><div class='del'>-};</div><div class='add'>+    {"volume profile &lt;VOLNAME&gt; {start|info [peek|incremental "</div><div class='add'>+     "[peek]|cumulative|clear]|stop} [nfs]",</div><div class='add'>+     cli_cmd_volume_profile_cbk, "volume profile operations"},</div><div class='add'>+</div><div class='add'>+    {"volume top &lt;VOLNAME&gt; {open|read|write|opendir|readdir|clear} [nfs|brick "</div><div class='add'>+     "&lt;brick&gt;] [list-cnt &lt;value&gt;] |\n"</div><div class='add'>+     "volume top &lt;VOLNAME&gt; {read-perf|write-perf} [bs &lt;size&gt; count &lt;count&gt;] "</div><div class='add'>+     "[brick &lt;brick&gt;] [list-cnt &lt;value&gt;]",</div><div class='add'>+     cli_cmd_volume_top_cbk, "volume top operations"},</div><div class='add'>+</div><div class='add'>+    {"volume status [all | &lt;VOLNAME&gt; [nfs|shd|&lt;BRICK&gt;|quotad|tierd]]"</div><div class='add'>+     " [detail|clients|mem|inode|fd|callpool|tasks|client-list]",</div><div class='add'>+     cli_cmd_volume_status_cbk,</div><div class='add'>+     "display status of all or specified volume(s)/brick"},</div><div class='add'>+</div><div class='add'>+    {"volume heal &lt;VOLNAME&gt; [enable | disable | full |"</div><div class='add'>+     "statistics [heal-count [replica &lt;HOSTNAME:BRICKNAME&gt;]] |"</div><div class='add'>+     "info [summary | split-brain] |"</div><div class='add'>+     "split-brain {bigger-file &lt;FILE&gt; | latest-mtime &lt;FILE&gt; |"</div><div class='add'>+     "source-brick &lt;HOSTNAME:BRICKNAME&gt; [&lt;FILE&gt;]} |"</div><div class='add'>+     "granular-entry-heal {enable | disable}]",</div><div class='add'>+     cli_cmd_volume_heal_cbk,</div><div class='add'>+     "self-heal commands on volume specified by &lt;VOLNAME&gt;"},</div><div class='add'>+</div><div class='add'>+    {"volume statedump &lt;VOLNAME&gt; [[nfs|quotad] [all|mem|iobuf|callpool|"</div><div class='add'>+     "priv|fd|inode|history]... | [client &lt;hostname:process-id&gt;]]",</div><div class='add'>+     cli_cmd_volume_statedump_cbk, "perform statedump on bricks"},</div><div class='add'>+</div><div class='add'>+    {"volume list", cli_cmd_volume_list_cbk, "list all volumes in cluster"},</div><div class='add'>+</div><div class='add'>+    {"volume clear-locks &lt;VOLNAME&gt; &lt;path&gt; kind {blocked|granted|all}"</div><div class='add'>+     "{inode [range]|entry [basename]|posix [range]}",</div><div class='add'>+     cli_cmd_volume_clearlocks_cbk, "Clear locks held on path"},</div><div class='add'>+    {"volume barrier &lt;VOLNAME&gt; {enable|disable}", cli_cmd_volume_barrier_cbk,</div><div class='add'>+     "Barrier/unbarrier file operations on a volume"},</div><div class='add'>+    {"volume get &lt;VOLNAME|all&gt; &lt;key|all&gt;", cli_cmd_volume_getopt_cbk,</div><div class='add'>+     "Get the value of the all options or given option for volume &lt;VOLNAME&gt;"</div><div class='add'>+     " or all option. gluster volume get all all is to get all global "</div><div class='add'>+     "options"},</div><div class='add'>+</div><div class='add'>+    {"volume reset-brick &lt;VOLNAME&gt; &lt;SOURCE-BRICK&gt; {{start} |"</div><div class='add'>+     " {&lt;NEW-BRICK&gt; commit}}",</div><div class='add'>+     cli_cmd_volume_reset_brick_cbk, "reset-brick operations"},</div><div class='add'>+</div><div class='add'>+    {NULL, NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_quota_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                        const char **words, int wordcount)</div><div class='add'>+cli_cmd_quota_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                       const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd     = NULL;</div><div class='del'>-        struct cli_cmd        *quota_cmd = NULL;</div><div class='del'>-        int                   count    = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *quota_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        cmd = GF_MALLOC (sizeof (quota_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, quota_cmds, sizeof (quota_cmds));</div><div class='del'>-        count = (sizeof (quota_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='add'>+    cmd = GF_MALLOC(sizeof(quota_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, quota_cmds, sizeof(quota_cmds));</div><div class='add'>+    count = (sizeof(quota_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\ngluster quota commands");</div><div class='del'>-        cli_out ("=======================\n");</div><div class='add'>+    cli_out("\ngluster quota commands");</div><div class='add'>+    cli_out("=======================\n");</div><div class='ctx'> </div><div class='del'>-        for (quota_cmd = cmd; quota_cmd-&gt;pattern; quota_cmd++)</div><div class='del'>-                if ((_gf_false == quota_cmd-&gt;disable) &amp;&amp; (quota_cmd-&gt;desc))</div><div class='del'>-                        cli_out ("%s - %s", quota_cmd-&gt;pattern,</div><div class='del'>-                                 quota_cmd-&gt;desc);</div><div class='add'>+    for (quota_cmd = cmd; quota_cmd-&gt;pattern; quota_cmd++)</div><div class='add'>+        if ((_gf_false == quota_cmd-&gt;disable) &amp;&amp; (quota_cmd-&gt;desc))</div><div class='add'>+            cli_out("%s - %s", quota_cmd-&gt;pattern, quota_cmd-&gt;desc);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        GF_FREE (cmd);</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    GF_FREE(cmd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_bitrot_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                         const char **words, int wordcount)</div><div class='add'>+cli_cmd_bitrot_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd     = NULL;</div><div class='del'>-        struct cli_cmd        *bitrot_cmd = NULL;</div><div class='del'>-        int                   count    = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *bitrot_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        cmd = GF_MALLOC (sizeof (bitrot_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, bitrot_cmds, sizeof (bitrot_cmds));</div><div class='del'>-        count = (sizeof (bitrot_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='add'>+    cmd = GF_MALLOC(sizeof(bitrot_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, bitrot_cmds, sizeof(bitrot_cmds));</div><div class='add'>+    count = (sizeof(bitrot_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\ngluster bitrot commands");</div><div class='del'>-        cli_out ("========================\n");</div><div class='add'>+    cli_out("\ngluster bitrot commands");</div><div class='add'>+    cli_out("========================\n");</div><div class='ctx'> </div><div class='del'>-        for (bitrot_cmd = cmd; bitrot_cmd-&gt;pattern; bitrot_cmd++)</div><div class='del'>-                if ((_gf_false == bitrot_cmd-&gt;disable) &amp;&amp; (bitrot_cmd-&gt;desc))</div><div class='del'>-                        cli_out ("%s - %s", bitrot_cmd-&gt;pattern,</div><div class='del'>-                                 bitrot_cmd-&gt;desc);</div><div class='add'>+    for (bitrot_cmd = cmd; bitrot_cmd-&gt;pattern; bitrot_cmd++)</div><div class='add'>+        if ((_gf_false == bitrot_cmd-&gt;disable) &amp;&amp; (bitrot_cmd-&gt;desc))</div><div class='add'>+            cli_out("%s - %s", bitrot_cmd-&gt;pattern, bitrot_cmd-&gt;desc);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        GF_FREE (cmd);</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    GF_FREE(cmd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_tier_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                       const char **words, int wordcount)</div><div class='add'>+cli_cmd_tier_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                      const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd     = NULL;</div><div class='del'>-        struct cli_cmd        *tier_cmd = NULL;</div><div class='del'>-        int                   count    = 0;</div><div class='del'>-</div><div class='del'>-        cmd = GF_MALLOC (sizeof (tier_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, tier_cmds, sizeof (tier_cmds));</div><div class='del'>-        count = (sizeof (tier_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='del'>-</div><div class='del'>-        cli_out ("\ngluster tier commands");</div><div class='del'>-        cli_out ("======================\n");</div><div class='del'>-</div><div class='del'>-        for (tier_cmd = cmd; tier_cmd-&gt;pattern; tier_cmd++) {</div><div class='del'>-                if ((_gf_false == tier_cmd-&gt;disable) &amp;&amp; tier_cmd-&gt;desc) {</div><div class='del'>-                        cli_out ("%s - %s", tier_cmd-&gt;pattern, tier_cmd-&gt;desc);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        GF_FREE (cmd);</div><div class='del'>-        return 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *tier_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    cmd = GF_MALLOC(sizeof(tier_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, tier_cmds, sizeof(tier_cmds));</div><div class='add'>+    count = (sizeof(tier_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='add'>+</div><div class='add'>+    cli_out("\ngluster tier commands");</div><div class='add'>+    cli_out("======================\n");</div><div class='add'>+</div><div class='add'>+    for (tier_cmd = cmd; tier_cmd-&gt;pattern; tier_cmd++) {</div><div class='add'>+        if ((_gf_false == tier_cmd-&gt;disable) &amp;&amp; tier_cmd-&gt;desc) {</div><div class='add'>+            cli_out("%s - %s", tier_cmd-&gt;pattern, tier_cmd-&gt;desc);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    GF_FREE(cmd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                         const char **words, int wordcount)</div><div class='add'>+cli_cmd_volume_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                        const char **words, int wordcount)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd        *cmd     = NULL;</div><div class='del'>-        struct cli_cmd        *vol_cmd = NULL;</div><div class='del'>-        int                   count    = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='add'>+    struct cli_cmd *vol_cmd = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        cmd = GF_MALLOC (sizeof (volume_cmds), cli_mt_cli_cmd);</div><div class='del'>-        memcpy (cmd, volume_cmds, sizeof (volume_cmds));</div><div class='del'>-        count = (sizeof (volume_cmds) / sizeof (struct cli_cmd));</div><div class='del'>-        cli_cmd_sort (cmd, count);</div><div class='add'>+    cmd = GF_MALLOC(sizeof(volume_cmds), cli_mt_cli_cmd);</div><div class='add'>+    memcpy(cmd, volume_cmds, sizeof(volume_cmds));</div><div class='add'>+    count = (sizeof(volume_cmds) / sizeof(struct cli_cmd));</div><div class='add'>+    cli_cmd_sort(cmd, count);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\ngluster volume commands");</div><div class='del'>-        cli_out ("========================\n");</div><div class='add'>+    cli_out("\ngluster volume commands");</div><div class='add'>+    cli_out("========================\n");</div><div class='ctx'> </div><div class='del'>-        for (vol_cmd = cmd; vol_cmd-&gt;pattern; vol_cmd++)</div><div class='del'>-                if (_gf_false == vol_cmd-&gt;disable)</div><div class='del'>-                        cli_out ("%s - %s", vol_cmd-&gt;pattern, vol_cmd-&gt;desc);</div><div class='add'>+    for (vol_cmd = cmd; vol_cmd-&gt;pattern; vol_cmd++)</div><div class='add'>+        if (_gf_false == vol_cmd-&gt;disable)</div><div class='add'>+            cli_out("%s - %s", vol_cmd-&gt;pattern, vol_cmd-&gt;desc);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\n");</div><div class='del'>-        GF_FREE (cmd);</div><div class='del'>-        return 0;</div><div class='add'>+    cli_out("\n");</div><div class='add'>+    GF_FREE(cmd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_volume_register (struct cli_state *state)</div><div class='add'>+cli_cmd_volume_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        struct cli_cmd *cmd = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd *cmd = NULL;</div><div class='ctx'> </div><div class='del'>-        for (cmd = volume_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    for (cmd = volume_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (cmd = bitrot_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    for (cmd = bitrot_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (cmd = quota_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    for (cmd = quota_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if !defined(__NetBSD__)</div><div class='del'>-        for (cmd = tier_cmds; cmd-&gt;pattern; cmd++) {</div><div class='del'>-                ret = cli_cmd_register (&amp;state-&gt;tree, cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    for (cmd = tier_cmds; cmd-&gt;pattern; cmd++) {</div><div class='add'>+        ret = cli_cmd_register(&amp;state-&gt;tree, cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c<br/>index 236009b449e..396cabebbbe 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-cmd.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-cmd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-cmd.c</a></div><div class='hunk'>@@ -22,395 +22,390 @@</div><div class='ctx'> </div><div class='ctx'> static int cmd_done;</div><div class='ctx'> static int cmd_sent;</div><div class='del'>-static pthread_cond_t      cond  = PTHREAD_COND_INITIALIZER;</div><div class='del'>-static pthread_mutex_t     cond_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='del'>-static pthread_cond_t      conn  = PTHREAD_COND_INITIALIZER;</div><div class='del'>-static pthread_mutex_t     conn_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='add'>+static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;</div><div class='add'>+static pthread_mutex_t cond_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='add'>+static pthread_cond_t conn = PTHREAD_COND_INITIALIZER;</div><div class='add'>+static pthread_mutex_t conn_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='ctx'> </div><div class='del'>-int    cli_op_ret = 0;</div><div class='del'>-int    connected = 0;</div><div class='add'>+int cli_op_ret = 0;</div><div class='add'>+int connected = 0;</div><div class='ctx'> </div><div class='del'>-int cli_cmd_log_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='del'>-                      const char **words, int wordcount);</div><div class='add'>+int</div><div class='add'>+cli_cmd_log_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word,</div><div class='add'>+                     const char **words, int wordcount);</div><div class='ctx'> </div><div class='ctx'> static unsigned</div><div class='del'>-cli_cmd_needs_connection (struct cli_cmd_word *word)</div><div class='add'>+cli_cmd_needs_connection(struct cli_cmd_word *word)</div><div class='ctx'> {</div><div class='del'>-        if (!strcasecmp ("quit", word-&gt;word))</div><div class='del'>-                return 0;</div><div class='add'>+    if (!strcasecmp("quit", word-&gt;word))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!strcasecmp ("help", word-&gt;word))</div><div class='del'>-                return 0;</div><div class='add'>+    if (!strcasecmp("help", word-&gt;word))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!strcasecmp ("getwd", word-&gt;word))</div><div class='del'>-                return 1;</div><div class='add'>+    if (!strcasecmp("getwd", word-&gt;word))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (!strcasecmp ("exit", word-&gt;word))</div><div class='del'>-                return 0;</div><div class='add'>+    if (!strcasecmp("exit", word-&gt;word))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        return cli_default_conn_timeout;</div><div class='add'>+    return cli_default_conn_timeout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_status_reset (void)</div><div class='add'>+cli_cmd_status_reset(void)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_lock ();</div><div class='del'>-        {</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        cmd_sent = 0;</div><div class='del'>-                        cmd_done = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = cli_cmd_unlock ();</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='add'>+    ret = cli_cmd_lock();</div><div class='add'>+    {</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            cmd_sent = 0;</div><div class='add'>+            cmd_done = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = cli_cmd_unlock();</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_sent_status_get (int *status)</div><div class='add'>+cli_cmd_sent_status_get(int *status)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        GF_ASSERT (status);</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_lock ();</div><div class='del'>-        {</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        *status = cmd_sent;</div><div class='del'>-        }</div><div class='del'>-        ret = cli_cmd_unlock ();</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    GF_ASSERT(status);</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_lock();</div><div class='add'>+    {</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            *status = cmd_sent;</div><div class='add'>+    }</div><div class='add'>+    ret = cli_cmd_unlock();</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_process (struct cli_state *state, int argc, char **argv)</div><div class='add'>+cli_cmd_process(struct cli_state *state, int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int                  ret = 0;</div><div class='del'>-        struct cli_cmd_word *word = NULL;</div><div class='del'>-        struct cli_cmd_word *next = NULL;</div><div class='del'>-        int                  i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct cli_cmd_word *word = NULL;</div><div class='add'>+    struct cli_cmd_word *next = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        word = &amp;state-&gt;tree.root;</div><div class='add'>+    word = &amp;state-&gt;tree.root;</div><div class='ctx'> </div><div class='del'>-        if (!argc)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!argc)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; argc; i++) {</div><div class='del'>-                next = cli_cmd_nextword (word, argv[i]);</div><div class='add'>+    for (i = 0; i &lt; argc; i++) {</div><div class='add'>+        next = cli_cmd_nextword(word, argv[i]);</div><div class='ctx'> </div><div class='del'>-                word = next;</div><div class='del'>-                if (!word)</div><div class='del'>-                        break;</div><div class='add'>+        word = next;</div><div class='add'>+        if (!word)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (word-&gt;cbkfn)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        if (word-&gt;cbkfn)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!word) {</div><div class='del'>-                cli_out ("unrecognized word: %s (position %d)",</div><div class='del'>-                         argv[i], i);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!word) {</div><div class='add'>+        cli_out("unrecognized word: %s (position %d)", argv[i], i);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!word-&gt;cbkfn) {</div><div class='del'>-                cli_out ("unrecognized command");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!word-&gt;cbkfn) {</div><div class='add'>+        cli_out("unrecognized command");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if ( strcmp (word-&gt;word,"help")==0 )</div><div class='del'>-		goto callback;</div><div class='add'>+    if (strcmp(word-&gt;word, "help") == 0)</div><div class='add'>+        goto callback;</div><div class='ctx'> </div><div class='del'>-        state-&gt;await_connected = cli_cmd_needs_connection (word);</div><div class='add'>+    state-&gt;await_connected = cli_cmd_needs_connection(word);</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_await_connected (state-&gt;await_connected);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_out ("Connection failed. Please check if gluster "</div><div class='del'>-                          "daemon is operational.");</div><div class='del'>-                gf_log ("", GF_LOG_INFO, "Exiting with: %d", ret);</div><div class='del'>-                exit (ret);</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_await_connected(state-&gt;await_connected);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "Connection failed. Please check if gluster "</div><div class='add'>+            "daemon is operational.");</div><div class='add'>+        gf_log("", GF_LOG_INFO, "Exiting with: %d", ret);</div><div class='add'>+        exit(ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> callback:</div><div class='del'>-        ret = word-&gt;cbkfn (state, word, (const char **)argv, argc);</div><div class='del'>-        (void) cli_cmd_status_reset ();</div><div class='del'>-        return ret;</div><div class='add'>+    ret = word-&gt;cbkfn(state, word, (const char **)argv, argc);</div><div class='add'>+    (void)cli_cmd_status_reset();</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_input_token_count (const char *text)</div><div class='add'>+cli_cmd_input_token_count(const char *text)</div><div class='ctx'> {</div><div class='del'>-        int          count = 0;</div><div class='del'>-        const char  *trav = NULL;</div><div class='del'>-        int          is_spc = 1;</div><div class='del'>-</div><div class='del'>-        for (trav = text; *trav; trav++) {</div><div class='del'>-                if (*trav == ' ') {</div><div class='del'>-                        is_spc = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        if (is_spc) {</div><div class='del'>-                                count++;</div><div class='del'>-                                is_spc = 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int count = 0;</div><div class='add'>+    const char *trav = NULL;</div><div class='add'>+    int is_spc = 1;</div><div class='add'>+</div><div class='add'>+    for (trav = text; *trav; trav++) {</div><div class='add'>+        if (*trav == ' ') {</div><div class='add'>+            is_spc = 1;</div><div class='add'>+        } else {</div><div class='add'>+            if (is_spc) {</div><div class='add'>+                count++;</div><div class='add'>+                is_spc = 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_process_line (struct cli_state *state, const char *text)</div><div class='add'>+cli_cmd_process_line(struct cli_state *state, const char *text)</div><div class='ctx'> {</div><div class='del'>-        int     count = 0;</div><div class='del'>-        char  **tokens = NULL;</div><div class='del'>-        char  **tokenp = NULL;</div><div class='del'>-        char   *token = NULL;</div><div class='del'>-        char   *copy = NULL;</div><div class='del'>-        char   *saveptr = NULL;</div><div class='del'>-        int     i = 0;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        count = cli_cmd_input_token_count (text);</div><div class='del'>-</div><div class='del'>-        tokens = calloc (count + 1, sizeof (*tokens));</div><div class='del'>-        if (!tokens)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        copy = strdup (text);</div><div class='del'>-        if (!copy)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        tokenp = tokens;</div><div class='del'>-</div><div class='del'>-        for (token = strtok_r (copy, " \t\r\n", &amp;saveptr); token;</div><div class='del'>-             token = strtok_r (NULL, " \t\r\n", &amp;saveptr)) {</div><div class='del'>-                *tokenp = strdup (token);</div><div class='del'>-</div><div class='del'>-                if (!*tokenp)</div><div class='del'>-                        goto out;</div><div class='del'>-                tokenp++;</div><div class='del'>-                i++;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_process (state, count, tokens);</div><div class='add'>+    int count = 0;</div><div class='add'>+    char **tokens = NULL;</div><div class='add'>+    char **tokenp = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+    char *copy = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    count = cli_cmd_input_token_count(text);</div><div class='add'>+</div><div class='add'>+    tokens = calloc(count + 1, sizeof(*tokens));</div><div class='add'>+    if (!tokens)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    copy = strdup(text);</div><div class='add'>+    if (!copy)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    tokenp = tokens;</div><div class='add'>+</div><div class='add'>+    for (token = strtok_r(copy, " \t\r\n", &amp;saveptr); token;</div><div class='add'>+         token = strtok_r(NULL, " \t\r\n", &amp;saveptr)) {</div><div class='add'>+        *tokenp = strdup(token);</div><div class='add'>+</div><div class='add'>+        if (!*tokenp)</div><div class='add'>+            goto out;</div><div class='add'>+        tokenp++;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_process(state, count, tokens);</div><div class='ctx'> out:</div><div class='del'>-        free (copy);</div><div class='add'>+    free(copy);</div><div class='ctx'> </div><div class='del'>-        if (tokens)</div><div class='del'>-                cli_cmd_tokens_destroy (tokens);</div><div class='add'>+    if (tokens)</div><div class='add'>+        cli_cmd_tokens_destroy(tokens);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmds_register (struct cli_state *state)</div><div class='add'>+cli_cmds_register(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_volume_register (state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_probe_register (state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_system_register (state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_misc_register (state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_snapshot_register (state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = cli_cmd_global_register (state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_volume_register(state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_probe_register(state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_system_register(state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_misc_register(state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_snapshot_register(state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = cli_cmd_global_register(state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_cond_init ()</div><div class='add'>+cli_cmd_cond_init()</div><div class='ctx'> {</div><div class='add'>+    pthread_mutex_init(&amp;cond_mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;cond, NULL);</div><div class='ctx'> </div><div class='del'>-       pthread_mutex_init (&amp;cond_mutex, NULL);</div><div class='del'>-       pthread_cond_init (&amp;cond, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;conn_mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;conn, NULL);</div><div class='ctx'> </div><div class='del'>-       pthread_mutex_init (&amp;conn_mutex, NULL);</div><div class='del'>-       pthread_cond_init (&amp;conn, NULL);</div><div class='del'>-</div><div class='del'>-       return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_lock ()</div><div class='add'>+cli_cmd_lock()</div><div class='ctx'> {</div><div class='del'>-       pthread_mutex_lock (&amp;cond_mutex);</div><div class='del'>-       return 0;</div><div class='add'>+    pthread_mutex_lock(&amp;cond_mutex);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_unlock ()</div><div class='add'>+cli_cmd_unlock()</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_unlock (&amp;cond_mutex);</div><div class='del'>-        return 0;</div><div class='add'>+    pthread_mutex_unlock(&amp;cond_mutex);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-seconds_from_now (unsigned secs, struct timespec *ts)</div><div class='add'>+seconds_from_now(unsigned secs, struct timespec *ts)</div><div class='ctx'> {</div><div class='del'>-        struct timeval tv = {0,};</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;tv, NULL);</div><div class='add'>+    gettimeofday(&amp;tv, NULL);</div><div class='ctx'> </div><div class='del'>-        ts-&gt;tv_sec = tv.tv_sec + secs;</div><div class='del'>-        ts-&gt;tv_nsec = tv.tv_usec * 1000;</div><div class='add'>+    ts-&gt;tv_sec = tv.tv_sec + secs;</div><div class='add'>+    ts-&gt;tv_nsec = tv.tv_usec * 1000;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_await_response (unsigned time)</div><div class='add'>+cli_cmd_await_response(unsigned time)</div><div class='ctx'> {</div><div class='del'>-        struct  timespec        ts = {0,};</div><div class='del'>-        int                     ret = 0;</div><div class='add'>+    struct timespec ts = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        cli_op_ret = -1;</div><div class='add'>+    cli_op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        seconds_from_now (time, &amp;ts);</div><div class='del'>-        while (!cmd_done &amp;&amp; !ret) {</div><div class='del'>-                ret = pthread_cond_timedwait (&amp;cond, &amp;cond_mutex,</div><div class='del'>-                                        &amp;ts);</div><div class='del'>-        }</div><div class='add'>+    seconds_from_now(time, &amp;ts);</div><div class='add'>+    while (!cmd_done &amp;&amp; !ret) {</div><div class='add'>+        ret = pthread_cond_timedwait(&amp;cond, &amp;cond_mutex, &amp;ts);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!cmd_done) {</div><div class='del'>-                if (ret == ETIMEDOUT)</div><div class='del'>-                        cli_out ("Error : Request timed out");</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Error : Command returned with error code:%d",</div><div class='del'>-                                 ret);</div><div class='del'>-        }</div><div class='del'>-        cmd_done = 0;</div><div class='add'>+    if (!cmd_done) {</div><div class='add'>+        if (ret == ETIMEDOUT)</div><div class='add'>+            cli_out("Error : Request timed out");</div><div class='add'>+        else</div><div class='add'>+            cli_out("Error : Command returned with error code:%d", ret);</div><div class='add'>+    }</div><div class='add'>+    cmd_done = 0;</div><div class='ctx'> </div><div class='del'>-        return cli_op_ret;</div><div class='add'>+    return cli_op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function must be called _only_ after all actions associated with</div><div class='ctx'>  * command processing is complete. Otherwise, gluster process may exit before</div><div class='ctx'>  * reporting results to stdout/stderr. */</div><div class='ctx'> int</div><div class='del'>-cli_cmd_broadcast_response (int32_t status)</div><div class='add'>+cli_cmd_broadcast_response(int32_t status)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;cond_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (!cmd_sent)</div><div class='del'>-                        goto out;</div><div class='del'>-                cmd_done = 1;</div><div class='del'>-                cli_op_ret = status;</div><div class='del'>-                pthread_cond_broadcast (&amp;cond);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    pthread_mutex_lock(&amp;cond_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!cmd_sent)</div><div class='add'>+            goto out;</div><div class='add'>+        cmd_done = 1;</div><div class='add'>+        cli_op_ret = status;</div><div class='add'>+        pthread_cond_broadcast(&amp;cond);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        pthread_mutex_unlock (&amp;cond_mutex);</div><div class='del'>-        return 0;</div><div class='add'>+    pthread_mutex_unlock(&amp;cond_mutex);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_await_connected (unsigned conn_timo)</div><div class='add'>+cli_cmd_await_connected(unsigned conn_timo)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret = 0;</div><div class='del'>-        struct  timespec        ts = {0,};</div><div class='del'>-</div><div class='del'>-        if (!conn_timo)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn_mutex);</div><div class='del'>-        {</div><div class='del'>-                seconds_from_now (conn_timo, &amp;ts);</div><div class='del'>-                while (!connected &amp;&amp; !ret) {</div><div class='del'>-                        ret = pthread_cond_timedwait (&amp;conn, &amp;conn_mutex,</div><div class='del'>-                                                      &amp;ts);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn_mutex);</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct timespec ts = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='add'>+    if (!conn_timo)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn_mutex);</div><div class='add'>+    {</div><div class='add'>+        seconds_from_now(conn_timo, &amp;ts);</div><div class='add'>+        while (!connected &amp;&amp; !ret) {</div><div class='add'>+            ret = pthread_cond_timedwait(&amp;conn, &amp;conn_mutex, &amp;ts);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn_mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_cmd_broadcast_connected ()</div><div class='add'>+cli_cmd_broadcast_connected()</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;conn_mutex);</div><div class='del'>-        {</div><div class='del'>-                connected = 1;</div><div class='del'>-                pthread_cond_broadcast (&amp;conn);</div><div class='del'>-        }</div><div class='add'>+    pthread_mutex_lock(&amp;conn_mutex);</div><div class='add'>+    {</div><div class='add'>+        connected = 1;</div><div class='add'>+        pthread_cond_broadcast(&amp;conn);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock (&amp;conn_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;conn_mutex);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_submit (struct rpc_clnt* rpc, void *req, call_frame_t *frame,</div><div class='del'>-                rpc_clnt_prog_t *prog,</div><div class='del'>-                int procnum, struct iobref *iobref,</div><div class='del'>-                xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='add'>+cli_cmd_submit(struct rpc_clnt *rpc, void *req, call_frame_t *frame,</div><div class='add'>+               rpc_clnt_prog_t *prog, int procnum, struct iobref *iobref,</div><div class='add'>+               xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        unsigned        timeout = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned timeout = 0;</div><div class='ctx'> </div><div class='del'>-        if ((GLUSTER_CLI_PROFILE_VOLUME == procnum) ||</div><div class='del'>-            (GLUSTER_CLI_HEAL_VOLUME == procnum))</div><div class='del'>-                timeout = cli_ten_minutes_timeout;</div><div class='del'>-        else</div><div class='del'>-                timeout = cli_default_conn_timeout;</div><div class='add'>+    if ((GLUSTER_CLI_PROFILE_VOLUME == procnum) ||</div><div class='add'>+        (GLUSTER_CLI_HEAL_VOLUME == procnum))</div><div class='add'>+        timeout = cli_ten_minutes_timeout;</div><div class='add'>+    else</div><div class='add'>+        timeout = cli_default_conn_timeout;</div><div class='ctx'> </div><div class='del'>-        cli_cmd_lock ();</div><div class='del'>-        cmd_sent = 0;</div><div class='del'>-        ret = cli_submit_request (rpc, req, frame, prog,</div><div class='del'>-                                  procnum, NULL, this, cbkfn, xdrproc);</div><div class='add'>+    cli_cmd_lock();</div><div class='add'>+    cmd_sent = 0;</div><div class='add'>+    ret = cli_submit_request(rpc, req, frame, prog, procnum, NULL, this, cbkfn,</div><div class='add'>+                             xdrproc);</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                cmd_sent = 1;</div><div class='del'>-                ret = cli_cmd_await_response (timeout);</div><div class='del'>-        }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        cmd_sent = 1;</div><div class='add'>+        ret = cli_cmd_await_response(timeout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_cmd_unlock ();</div><div class='add'>+    cli_cmd_unlock();</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_pattern_cmp (void *a, void *b)</div><div class='add'>+cli_cmd_pattern_cmp(void *a, void *b)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd *ia = NULL;</div><div class='del'>-        struct cli_cmd *ib = NULL;</div><div class='del'>-        int            ret = 0;</div><div class='del'>-</div><div class='del'>-        ia = a;</div><div class='del'>-        ib = b;</div><div class='del'>-        if (strcmp (ia-&gt;pattern, ib-&gt;pattern) &gt; 0)</div><div class='del'>-                ret = 1;</div><div class='del'>-        else if (strcmp (ia-&gt;pattern, ib-&gt;pattern) &lt; 0)</div><div class='del'>-                ret = -1;</div><div class='del'>-        else</div><div class='del'>-                ret = 0;</div><div class='del'>-        return ret;</div><div class='add'>+    struct cli_cmd *ia = NULL;</div><div class='add'>+    struct cli_cmd *ib = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ia = a;</div><div class='add'>+    ib = b;</div><div class='add'>+    if (strcmp(ia-&gt;pattern, ib-&gt;pattern) &gt; 0)</div><div class='add'>+        ret = 1;</div><div class='add'>+    else if (strcmp(ia-&gt;pattern, ib-&gt;pattern) &lt; 0)</div><div class='add'>+        ret = -1;</div><div class='add'>+    else</div><div class='add'>+        ret = 0;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_cmd_sort (struct cli_cmd *cmd, int count)</div><div class='add'>+cli_cmd_sort(struct cli_cmd *cmd, int count)</div><div class='ctx'> {</div><div class='del'>-        gf_array_insertionsort (cmd, 1, count - 2, sizeof(struct cli_cmd),</div><div class='del'>-                                cli_cmd_pattern_cmp);</div><div class='add'>+    gf_array_insertionsort(cmd, 1, count - 2, sizeof(struct cli_cmd),</div><div class='add'>+                           cli_cmd_pattern_cmp);</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli-quotad-client.c b/cli/src/cli-quotad-client.c<br/>index 5be9c80c858..fbd2c0391ab 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-quotad-client.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-quotad-client.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-quotad-client.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-quotad-client.c</a></div><div class='hunk'>@@ -14,136 +14,131 @@ extern struct rpc_clnt global_quotad_rpc;</div><div class='ctx'> extern struct rpc_clnt_program cli_quotad_clnt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quotad_submit_request (void *req, call_frame_t *frame,</div><div class='del'>-                           rpc_clnt_prog_t *prog,</div><div class='del'>-                           int procnum, struct iobref *iobref,</div><div class='del'>-                           xlator_t *this, fop_cbk_fn_t cbkfn,</div><div class='del'>-                           xdrproc_t xdrproc)</div><div class='add'>+cli_quotad_submit_request(void *req, call_frame_t *frame, rpc_clnt_prog_t *prog,</div><div class='add'>+                          int procnum, struct iobref *iobref, xlator_t *this,</div><div class='add'>+                          fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        int           ret        = -1;</div><div class='del'>-        int           count      = 0;</div><div class='del'>-        struct iovec  iov        = {0, };</div><div class='del'>-        struct iobuf *iobuf      = NULL;</div><div class='del'>-        char          new_iobref = 0;</div><div class='del'>-        ssize_t       xdr_size   = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        if (req) {</div><div class='del'>-                xdr_size = xdr_sizeof (xdrproc, req);</div><div class='del'>-                iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-                if (!iobuf) {</div><div class='del'>-                        goto out;</div><div class='del'>-                };</div><div class='del'>-</div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        iobref = iobref_new ();</div><div class='del'>-                        if (!iobref) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        new_iobref = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                iobref_add (iobref, iobuf);</div><div class='del'>-</div><div class='del'>-                iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-                iov.iov_len  = iobuf_size (iobuf);</div><div class='del'>-</div><div class='del'>-                /* Create the xdr payload */</div><div class='del'>-                ret = xdr_serialize_generic (iov, req, xdrproc);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                iov.iov_len = ret;</div><div class='del'>-                count = 1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    if (req) {</div><div class='add'>+        xdr_size = xdr_sizeof(xdrproc, req);</div><div class='add'>+        iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+        if (!iobuf) {</div><div class='add'>+            goto out;</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        if (!iobref) {</div><div class='add'>+            iobref = iobref_new();</div><div class='add'>+            if (!iobref) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            new_iobref = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        iobref_add(iobref, iobuf);</div><div class='add'>+</div><div class='add'>+        iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+        iov.iov_len = iobuf_size(iobuf);</div><div class='add'>+</div><div class='add'>+        /* Create the xdr payload */</div><div class='add'>+        ret = xdr_serialize_generic(iov, req, xdrproc);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        iov.iov_len = ret;</div><div class='add'>+        count = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Send the msg */</div><div class='del'>-        ret = rpc_clnt_submit (&amp;global_quotad_rpc, prog, procnum, cbkfn,</div><div class='del'>-                               &amp;iov, count,</div><div class='del'>-                               NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='del'>-        ret = 0;</div><div class='add'>+    /* Send the msg */</div><div class='add'>+    ret = rpc_clnt_submit(&amp;global_quotad_rpc, prog, procnum, cbkfn, &amp;iov, count,</div><div class='add'>+                          NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (new_iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='add'>+    if (new_iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quotad_notify (struct rpc_clnt *rpc, void *mydata,</div><div class='del'>-                   rpc_clnt_event_t event, void *data)</div><div class='add'>+cli_quotad_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='add'>+                  void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        this = mydata;</div><div class='add'>+    this = mydata;</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='del'>-        case RPC_CLNT_CONNECT:</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT");</div><div class='del'>-                break;</div><div class='add'>+    switch (event) {</div><div class='add'>+        case RPC_CLNT_CONNECT: {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        case RPC_CLNT_DISCONNECT:</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT");</div><div class='del'>-                break;</div><div class='add'>+        case RPC_CLNT_DISCONNECT: {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "got some other RPC event %d", event);</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "got some other RPC event %d",</div><div class='add'>+                   event);</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-cli_quotad_clnt_init (xlator_t *this, dict_t *options)</div><div class='add'>+cli_quotad_clnt_init(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt *rpc  = NULL;</div><div class='del'>-        int              ret  = -1;</div><div class='del'>-</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "transport.address-family", "unix");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "transport.address-family", "unix");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "transport-type", "socket");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "transport-type", "socket");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (options, "transport.socket.connect-path",</div><div class='del'>-                            "/var/run/gluster/quotad.socket");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(options, "transport.socket.connect-path",</div><div class='add'>+                       "/var/run/gluster/quotad.socket");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        rpc = rpc_clnt_new (options, this, this-&gt;name, 16);</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto out;</div><div class='add'>+    rpc = rpc_clnt_new(options, this, this-&gt;name, 16);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = rpc_clnt_register_notify (rpc, cli_quotad_notify, this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "failed to register notify");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpc_clnt_register_notify(rpc, cli_quotad_notify, this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "failed to register notify");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_start (rpc);</div><div class='add'>+    rpc_clnt_start(rpc);</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (rpc)</div><div class='del'>-                        rpc_clnt_unref (rpc);</div><div class='del'>-                rpc = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (rpc)</div><div class='add'>+            rpc_clnt_unref(rpc);</div><div class='add'>+        rpc = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return rpc;</div><div class='add'>+    return rpc;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/cli/src/cli-rl.c b/cli/src/cli-rl.c<br/>index 4ddb2ab149f..dd0993b8646 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-rl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-rl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-rl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-rl.c</a></div><div class='hunk'>@@ -27,392 +27,374 @@</div><div class='ctx'> #include &lt;readline/readline.h&gt;</div><div class='ctx'> #include &lt;readline/history.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_rl_out (struct cli_state *state, const char *fmt, va_list ap)</div><div class='add'>+cli_rl_out(struct cli_state *state, const char *fmt, va_list ap)</div><div class='ctx'> {</div><div class='del'>-        int tmp_rl_point = rl_point;</div><div class='del'>-        int            n = rl_end;</div><div class='del'>-        int            ret = 0;</div><div class='add'>+    int tmp_rl_point = rl_point;</div><div class='add'>+    int n = rl_end;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (rl_end &gt;= 0 ) {</div><div class='del'>-                rl_kill_text (0, rl_end);</div><div class='del'>-                rl_redisplay ();</div><div class='del'>-        }</div><div class='add'>+    if (rl_end &gt;= 0) {</div><div class='add'>+        rl_kill_text(0, rl_end);</div><div class='add'>+        rl_redisplay();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        printf ("\r%*s\r", (int)strlen (state-&gt;prompt), "");</div><div class='add'>+    printf("\r%*s\r", (int)strlen(state-&gt;prompt), "");</div><div class='ctx'> </div><div class='del'>-        ret = vprintf (fmt, ap);</div><div class='add'>+    ret = vprintf(fmt, ap);</div><div class='ctx'> </div><div class='del'>-        printf ("\n");</div><div class='del'>-        fflush(stdout);</div><div class='add'>+    printf("\n");</div><div class='add'>+    fflush(stdout);</div><div class='ctx'> </div><div class='del'>-        if (n) {</div><div class='del'>-                rl_do_undo ();</div><div class='del'>-                rl_point = tmp_rl_point;</div><div class='del'>-                rl_reset_line_state ();</div><div class='del'>-        }</div><div class='add'>+    if (n) {</div><div class='add'>+        rl_do_undo();</div><div class='add'>+        rl_point = tmp_rl_point;</div><div class='add'>+        rl_reset_line_state();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_rl_err (struct cli_state *state, const char *fmt, va_list ap)</div><div class='add'>+cli_rl_err(struct cli_state *state, const char *fmt, va_list ap)</div><div class='ctx'> {</div><div class='del'>-        int tmp_rl_point = rl_point;</div><div class='del'>-        int            n = rl_end;</div><div class='del'>-        int            ret = 0;</div><div class='add'>+    int tmp_rl_point = rl_point;</div><div class='add'>+    int n = rl_end;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (rl_end &gt;= 0 ) {</div><div class='del'>-                rl_kill_text (0, rl_end);</div><div class='del'>-                rl_redisplay ();</div><div class='del'>-        }</div><div class='add'>+    if (rl_end &gt;= 0) {</div><div class='add'>+        rl_kill_text(0, rl_end);</div><div class='add'>+        rl_redisplay();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "\r%*s\r", (int)strlen (state-&gt;prompt), "");</div><div class='add'>+    fprintf(stderr, "\r%*s\r", (int)strlen(state-&gt;prompt), "");</div><div class='ctx'> </div><div class='del'>-        ret = vfprintf (stderr, fmt, ap);</div><div class='add'>+    ret = vfprintf(stderr, fmt, ap);</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "\n");</div><div class='del'>-        fflush(stderr);</div><div class='add'>+    fprintf(stderr, "\n");</div><div class='add'>+    fflush(stderr);</div><div class='ctx'> </div><div class='del'>-        if (n) {</div><div class='del'>-                rl_do_undo ();</div><div class='del'>-                rl_point = tmp_rl_point;</div><div class='del'>-                rl_reset_line_state ();</div><div class='del'>-        }</div><div class='add'>+    if (n) {</div><div class='add'>+        rl_do_undo();</div><div class='add'>+        rl_point = tmp_rl_point;</div><div class='add'>+        rl_reset_line_state();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-cli_rl_process_line (char *line)</div><div class='add'>+cli_rl_process_line(char *line)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state *state = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        state = global_state;</div><div class='add'>+    state = global_state;</div><div class='ctx'> </div><div class='del'>-        state-&gt;rl_processing = 1;</div><div class='del'>-        {</div><div class='del'>-                ret = cli_cmd_process_line (state, line);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to process line");</div><div class='del'>-</div><div class='del'>-                add_history (line);</div><div class='del'>-        }</div><div class='del'>-        state-&gt;rl_processing = 0;</div><div class='add'>+    state-&gt;rl_processing = 1;</div><div class='add'>+    {</div><div class='add'>+        ret = cli_cmd_process_line(state, line);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to process line");</div><div class='ctx'> </div><div class='add'>+        add_history(line);</div><div class='add'>+    }</div><div class='add'>+    state-&gt;rl_processing = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_rl_stdin (int fd, int idx, int gen, void *data,</div><div class='del'>-              int poll_out, int poll_in, int poll_err)</div><div class='add'>+cli_rl_stdin(int fd, int idx, int gen, void *data, int poll_out, int poll_in,</div><div class='add'>+             int poll_err)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state *state = NULL;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='ctx'> </div><div class='del'>-        state = data;</div><div class='add'>+    state = data;</div><div class='ctx'> </div><div class='del'>-        rl_callback_read_char ();</div><div class='add'>+    rl_callback_read_char();</div><div class='ctx'> </div><div class='del'>-        event_handled (state-&gt;ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+    event_handled(state-&gt;ctx-&gt;event_pool, fd, idx, gen);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-cli_rl_autocomplete_entry (const char *text, int times)</div><div class='add'>+cli_rl_autocomplete_entry(const char *text, int times)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state  *state = NULL;</div><div class='del'>-        char              *retp = NULL;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='add'>+    char *retp = NULL;</div><div class='ctx'> </div><div class='del'>-        state = global_state;</div><div class='add'>+    state = global_state;</div><div class='ctx'> </div><div class='del'>-        if (!state-&gt;matchesp)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!state-&gt;matchesp)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        retp = *state-&gt;matchesp;</div><div class='add'>+    retp = *state-&gt;matchesp;</div><div class='ctx'> </div><div class='del'>-        state-&gt;matchesp++;</div><div class='add'>+    state-&gt;matchesp++;</div><div class='ctx'> </div><div class='del'>-        return retp ? strdup (retp) : NULL;</div><div class='add'>+    return retp ? strdup(retp) : NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_rl_token_count (const char *text)</div><div class='add'>+cli_rl_token_count(const char *text)</div><div class='ctx'> {</div><div class='del'>-        int          count = 0;</div><div class='del'>-        const char  *trav = NULL;</div><div class='del'>-        int          is_spc = 1;</div><div class='del'>-</div><div class='del'>-        for (trav = text; *trav; trav++) {</div><div class='del'>-                if (*trav == ' ') {</div><div class='del'>-                        is_spc = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        if (is_spc) {</div><div class='del'>-                                count++;</div><div class='del'>-                                is_spc = 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int count = 0;</div><div class='add'>+    const char *trav = NULL;</div><div class='add'>+    int is_spc = 1;</div><div class='add'>+</div><div class='add'>+    for (trav = text; *trav; trav++) {</div><div class='add'>+        if (*trav == ' ') {</div><div class='add'>+            is_spc = 1;</div><div class='add'>+        } else {</div><div class='add'>+            if (is_spc) {</div><div class='add'>+                count++;</div><div class='add'>+                is_spc = 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (is_spc)</div><div class='del'>-                /* what needs to be autocompleted is a full</div><div class='del'>-                   new word, and not extend the last word</div><div class='del'>-                */</div><div class='del'>-                count++;</div><div class='add'>+    if (is_spc)</div><div class='add'>+        /* what needs to be autocompleted is a full</div><div class='add'>+           new word, and not extend the last word</div><div class='add'>+        */</div><div class='add'>+        count++;</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char **</div><div class='del'>-cli_rl_tokenize (const char *text)</div><div class='add'>+cli_rl_tokenize(const char *text)</div><div class='ctx'> {</div><div class='del'>-        int     count = 0;</div><div class='del'>-        char  **tokens = NULL;</div><div class='del'>-        char  **tokenp = NULL;</div><div class='del'>-        char   *token = NULL;</div><div class='del'>-        char   *copy = NULL;</div><div class='del'>-        char   *saveptr = NULL;</div><div class='del'>-        int     i = 0;</div><div class='del'>-</div><div class='del'>-        count = cli_rl_token_count (text);</div><div class='del'>-</div><div class='del'>-        tokens = calloc (count + 1, sizeof (*tokens));</div><div class='del'>-        if (!tokens)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        copy = strdup (text);</div><div class='del'>-        if (!copy)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        tokenp = tokens;</div><div class='del'>-</div><div class='del'>-        for (token = strtok_r (copy, " \t\r\n", &amp;saveptr); token;</div><div class='del'>-             token = strtok_r (NULL, " \t\r\n", &amp;saveptr)) {</div><div class='del'>-                *tokenp = strdup (token);</div><div class='del'>-</div><div class='del'>-                if (!*tokenp)</div><div class='del'>-                        goto out;</div><div class='del'>-                tokenp++;</div><div class='del'>-                i++;</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    int count = 0;</div><div class='add'>+    char **tokens = NULL;</div><div class='add'>+    char **tokenp = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+    char *copy = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    count = cli_rl_token_count(text);</div><div class='add'>+</div><div class='add'>+    tokens = calloc(count + 1, sizeof(*tokens));</div><div class='add'>+    if (!tokens)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        if (i &lt; count) {</div><div class='del'>-                /* symbolize that what needs to be autocompleted is</div><div class='del'>-                   the full set of possible nextwords, and not extend</div><div class='del'>-                   the last word</div><div class='del'>-                */</div><div class='del'>-                *tokenp = strdup ("");</div><div class='del'>-                if (!*tokenp)</div><div class='del'>-                        goto out;</div><div class='del'>-                tokenp++;</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+    copy = strdup(text);</div><div class='add'>+    if (!copy)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    tokenp = tokens;</div><div class='add'>+</div><div class='add'>+    for (token = strtok_r(copy, " \t\r\n", &amp;saveptr); token;</div><div class='add'>+         token = strtok_r(NULL, " \t\r\n", &amp;saveptr)) {</div><div class='add'>+        *tokenp = strdup(token);</div><div class='add'>+</div><div class='add'>+        if (!*tokenp)</div><div class='add'>+            goto out;</div><div class='add'>+        tokenp++;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (i &lt; count) {</div><div class='add'>+        /* symbolize that what needs to be autocompleted is</div><div class='add'>+           the full set of possible nextwords, and not extend</div><div class='add'>+           the last word</div><div class='add'>+        */</div><div class='add'>+        *tokenp = strdup("");</div><div class='add'>+        if (!*tokenp)</div><div class='add'>+            goto out;</div><div class='add'>+        tokenp++;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free (copy);</div><div class='add'>+    free(copy);</div><div class='ctx'> </div><div class='del'>-        if (i &lt; count) {</div><div class='del'>-                cli_cmd_tokens_destroy (tokens);</div><div class='del'>-                tokens = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (i &lt; count) {</div><div class='add'>+        cli_cmd_tokens_destroy(tokens);</div><div class='add'>+        tokens = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return tokens;</div><div class='add'>+    return tokens;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char **</div><div class='del'>-cli_rl_get_matches (struct cli_state *state, struct cli_cmd_word *word,</div><div class='del'>-                    const char *text)</div><div class='add'>+cli_rl_get_matches(struct cli_state *state, struct cli_cmd_word *word,</div><div class='add'>+                   const char *text)</div><div class='ctx'> {</div><div class='del'>-        char                 **matches = NULL;</div><div class='del'>-        char                 **matchesp = NULL;</div><div class='del'>-        struct cli_cmd_word  **next = NULL;</div><div class='del'>-        int                    count = 0;</div><div class='del'>-        int                    len = 0;</div><div class='add'>+    char **matches = NULL;</div><div class='add'>+    char **matchesp = NULL;</div><div class='add'>+    struct cli_cmd_word **next = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int len = 0;</div><div class='ctx'> </div><div class='del'>-        len = strlen (text);</div><div class='add'>+    len = strlen(text);</div><div class='ctx'> </div><div class='del'>-        if (!word-&gt;nextwords)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!word-&gt;nextwords)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        for (next = word-&gt;nextwords; *next; next++)</div><div class='del'>-                count++;</div><div class='add'>+    for (next = word-&gt;nextwords; *next; next++)</div><div class='add'>+        count++;</div><div class='ctx'> </div><div class='del'>-        matches = calloc (count + 1, sizeof (*matches));</div><div class='del'>-        matchesp = matches;</div><div class='add'>+    matches = calloc(count + 1, sizeof(*matches));</div><div class='add'>+    matchesp = matches;</div><div class='ctx'> </div><div class='del'>-        for (next = word-&gt;nextwords; *next; next++) {</div><div class='del'>-                if ((*next)-&gt;match) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    for (next = word-&gt;nextwords; *next; next++) {</div><div class='add'>+        if ((*next)-&gt;match) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (strncmp ((*next)-&gt;word, text, len) == 0) {</div><div class='del'>-                        *matchesp = strdup ((*next)-&gt;word);</div><div class='del'>-                        matchesp++;</div><div class='del'>-                }</div><div class='add'>+        if (strncmp((*next)-&gt;word, text, len) == 0) {</div><div class='add'>+            *matchesp = strdup((*next)-&gt;word);</div><div class='add'>+            matchesp++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return matches;</div><div class='add'>+    return matches;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_rl_autocomplete_prepare (struct cli_state *state, const char *text)</div><div class='add'>+cli_rl_autocomplete_prepare(struct cli_state *state, const char *text)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd_word   *word = NULL;</div><div class='del'>-        struct cli_cmd_word   *next = NULL;</div><div class='del'>-        char                 **tokens = NULL;</div><div class='del'>-        char                 **tokenp = NULL;</div><div class='del'>-        char                  *token = NULL;</div><div class='del'>-        char                 **matches = NULL;</div><div class='del'>-</div><div class='del'>-        tokens = cli_rl_tokenize (text);</div><div class='del'>-        if (!tokens)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        word = &amp;state-&gt;tree.root;</div><div class='del'>-</div><div class='del'>-        for (tokenp = tokens; (token = *tokenp); tokenp++) {</div><div class='del'>-                if (!*(tokenp+1)) {</div><div class='del'>-                        /* last word */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                next = cli_cmd_nextword (word, token);</div><div class='del'>-                word = next;</div><div class='del'>-                if (!word)</div><div class='del'>-                        break;</div><div class='add'>+    struct cli_cmd_word *word = NULL;</div><div class='add'>+    struct cli_cmd_word *next = NULL;</div><div class='add'>+    char **tokens = NULL;</div><div class='add'>+    char **tokenp = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+    char **matches = NULL;</div><div class='add'>+</div><div class='add'>+    tokens = cli_rl_tokenize(text);</div><div class='add'>+    if (!tokens)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    word = &amp;state-&gt;tree.root;</div><div class='add'>+</div><div class='add'>+    for (tokenp = tokens; (token = *tokenp); tokenp++) {</div><div class='add'>+        if (!*(tokenp + 1)) {</div><div class='add'>+            /* last word */</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        next = cli_cmd_nextword(word, token);</div><div class='add'>+        word = next;</div><div class='ctx'>         if (!word)</div><div class='del'>-                goto out;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!word)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!token)</div><div class='del'>-                return 0;</div><div class='del'>-        matches = cli_rl_get_matches (state, word, token);</div><div class='add'>+    if (!token)</div><div class='add'>+        return 0;</div><div class='add'>+    matches = cli_rl_get_matches(state, word, token);</div><div class='ctx'> </div><div class='del'>-        state-&gt;matches = matches;</div><div class='del'>-        state-&gt;matchesp = matches;</div><div class='add'>+    state-&gt;matches = matches;</div><div class='add'>+    state-&gt;matchesp = matches;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_tokens_destroy (tokens);</div><div class='del'>-        return 0;</div><div class='add'>+    cli_cmd_tokens_destroy(tokens);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_rl_autocomplete_cleanup (struct cli_state *state)</div><div class='add'>+cli_rl_autocomplete_cleanup(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        if (state-&gt;matches)</div><div class='del'>-                cli_cmd_tokens_destroy (state-&gt;matches);</div><div class='add'>+    if (state-&gt;matches)</div><div class='add'>+        cli_cmd_tokens_destroy(state-&gt;matches);</div><div class='ctx'> </div><div class='del'>-        state-&gt;matches = NULL;</div><div class='del'>-        state-&gt;matchesp = NULL;</div><div class='add'>+    state-&gt;matches = NULL;</div><div class='add'>+    state-&gt;matchesp = NULL;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char **</div><div class='del'>-cli_rl_autocomplete (const char *text, int start, int end)</div><div class='add'>+cli_rl_autocomplete(const char *text, int start, int end)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state  *state = NULL;</div><div class='del'>-        char             **matches = NULL;</div><div class='del'>-        char               save = 0;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='add'>+    char **matches = NULL;</div><div class='add'>+    char save = 0;</div><div class='ctx'> </div><div class='del'>-        state = global_state;</div><div class='add'>+    state = global_state;</div><div class='ctx'> </div><div class='del'>-        /* hack to make the autocompletion code neater */</div><div class='del'>-        /* fake it as though the cursor is at the end of line */</div><div class='add'>+    /* hack to make the autocompletion code neater */</div><div class='add'>+    /* fake it as though the cursor is at the end of line */</div><div class='ctx'> </div><div class='del'>-        save = rl_line_buffer[rl_point];</div><div class='del'>-        rl_line_buffer[rl_point] = 0;</div><div class='add'>+    save = rl_line_buffer[rl_point];</div><div class='add'>+    rl_line_buffer[rl_point] = 0;</div><div class='ctx'> </div><div class='del'>-        cli_rl_autocomplete_prepare (state, rl_line_buffer);</div><div class='add'>+    cli_rl_autocomplete_prepare(state, rl_line_buffer);</div><div class='ctx'> </div><div class='del'>-        matches = rl_completion_matches (text, cli_rl_autocomplete_entry);</div><div class='add'>+    matches = rl_completion_matches(text, cli_rl_autocomplete_entry);</div><div class='ctx'> </div><div class='del'>-        cli_rl_autocomplete_cleanup (state);</div><div class='add'>+    cli_rl_autocomplete_cleanup(state);</div><div class='ctx'> </div><div class='del'>-        rl_line_buffer[rl_point] = save;</div><div class='add'>+    rl_line_buffer[rl_point] = save;</div><div class='ctx'> </div><div class='del'>-        return matches;</div><div class='add'>+    return matches;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static char *</div><div class='del'>-complete_none (const char *txt, int times)</div><div class='add'>+complete_none(const char *txt, int times)</div><div class='ctx'> {</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-cli_rl_input (void *_data)</div><div class='add'>+cli_rl_input(void *_data)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state *state = NULL;</div><div class='del'>-        char             *line = NULL;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='add'>+    char *line = NULL;</div><div class='ctx'> </div><div class='del'>-        state = _data;</div><div class='add'>+    state = _data;</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                line = readline (state-&gt;prompt);</div><div class='del'>-                if (!line)</div><div class='del'>-                        exit(0);  //break;</div><div class='add'>+    for (;;) {</div><div class='add'>+        line = readline(state-&gt;prompt);</div><div class='add'>+        if (!line)</div><div class='add'>+            exit(0);  // break;</div><div class='ctx'> </div><div class='del'>-                if (*line)</div><div class='del'>-                        cli_rl_process_line (line);</div><div class='add'>+        if (*line)</div><div class='add'>+            cli_rl_process_line(line);</div><div class='ctx'> </div><div class='del'>-                free (line);</div><div class='del'>-        }</div><div class='add'>+        free(line);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_rl_enable (struct cli_state *state)</div><div class='add'>+cli_rl_enable(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        rl_pre_input_hook = NULL;</div><div class='del'>-        rl_attempted_completion_function = cli_rl_autocomplete;</div><div class='del'>-        rl_completion_entry_function = complete_none;</div><div class='del'>-</div><div class='del'>-        if (!state-&gt;rl_async) {</div><div class='del'>-                ret = pthread_create (&amp;state-&gt;input, NULL,</div><div class='del'>-                                      cli_rl_input, state);</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        state-&gt;rl_enabled = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = event_register (state-&gt;ctx-&gt;event_pool, 0, cli_rl_stdin, state,</div><div class='del'>-                              1, 0);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    rl_pre_input_hook = NULL;</div><div class='add'>+    rl_attempted_completion_function = cli_rl_autocomplete;</div><div class='add'>+    rl_completion_entry_function = complete_none;</div><div class='ctx'> </div><div class='del'>-        state-&gt;rl_enabled = 1;</div><div class='del'>-        rl_callback_handler_install (state-&gt;prompt, cli_rl_process_line);</div><div class='add'>+    if (!state-&gt;rl_async) {</div><div class='add'>+        ret = pthread_create(&amp;state-&gt;input, NULL, cli_rl_input, state);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            state-&gt;rl_enabled = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = event_register(state-&gt;ctx-&gt;event_pool, 0, cli_rl_stdin, state, 1, 0);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    state-&gt;rl_enabled = 1;</div><div class='add'>+    rl_callback_handler_install(state-&gt;prompt, cli_rl_process_line);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return state-&gt;rl_enabled;</div><div class='add'>+    return state-&gt;rl_enabled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #else /* HAVE_READLINE */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_rl_enable (struct cli_state *state)</div><div class='add'>+cli_rl_enable(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #endif /* HAVE_READLINE */</div><div class='head'>diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c<br/>index 40bd64b983c..fea74667e05 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-rpc-ops.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-rpc-ops.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-rpc-ops.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-rpc-ops.c</a></div><div class='hunk'>@@ -14,14 +14,14 @@</div><div class='ctx'>  */</div><div class='ctx'> #define VOL_TOP_PERF_FILENAME_DEF_WIDTH 47</div><div class='ctx'> #define VOL_TOP_PERF_FILENAME_ALT_WIDTH 44</div><div class='del'>-#define VOL_TOP_PERF_SPEED_WIDTH        4</div><div class='del'>-#define VOL_TOP_PERF_TIME_WIDTH         26</div><div class='add'>+#define VOL_TOP_PERF_SPEED_WIDTH 4</div><div class='add'>+#define VOL_TOP_PERF_TIME_WIDTH 26</div><div class='ctx'> </div><div class='ctx'> #define INDENT_MAIN_HEAD "%-25s %s "</div><div class='ctx'> </div><div class='ctx'> /* Do not show estimates if greater than this number */</div><div class='del'>-#define REBAL_ESTIMATE_SEC_UPPER_LIMIT    (60*24*3600)</div><div class='del'>-#define REBAL_ESTIMATE_START_TIME         600</div><div class='add'>+#define REBAL_ESTIMATE_SEC_UPPER_LIMIT (60 * 24 * 3600)</div><div class='add'>+#define REBAL_ESTIMATE_START_TIME 600</div><div class='ctx'> </div><div class='ctx'> #include "cli.h"</div><div class='ctx'> #include "compat-errno.h"</div><div class='hunk'>@@ -46,26 +46,22 @@</div><div class='ctx'> #include "quota-common-utils.h"</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='del'>-enum gf_task_types {</div><div class='del'>-        GF_TASK_TYPE_REBALANCE,</div><div class='del'>-        GF_TASK_TYPE_REMOVE_BRICK</div><div class='del'>-};</div><div class='add'>+enum gf_task_types { GF_TASK_TYPE_REBALANCE, GF_TASK_TYPE_REMOVE_BRICK };</div><div class='ctx'> </div><div class='ctx'> extern struct rpc_clnt *global_quotad_rpc;</div><div class='ctx'> extern rpc_clnt_prog_t cli_quotad_clnt;</div><div class='ctx'> extern rpc_clnt_prog_t *cli_rpc_prog;</div><div class='del'>-extern int              cli_op_ret;</div><div class='del'>-extern int              connected;</div><div class='add'>+extern int cli_op_ret;</div><div class='add'>+extern int connected;</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_remove_brick (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     void *data);</div><div class='del'>-</div><div class='add'>+gf_cli_remove_brick(call_frame_t *frame, xlator_t *this, void *data);</div><div class='ctx'> </div><div class='del'>-char *cli_vol_status_str[] = {"Created",</div><div class='del'>-                              "Started",</div><div class='del'>-                              "Stopped",</div><div class='del'>-                             };</div><div class='add'>+char *cli_vol_status_str[] = {</div><div class='add'>+    "Created",</div><div class='add'>+    "Started",</div><div class='add'>+    "Stopped",</div><div class='add'>+};</div><div class='ctx'> </div><div class='ctx'> char *cli_vol_task_status_str[] = {"not started",</div><div class='ctx'>                                    "in progress",</div><div class='hunk'>@@ -76,9670 +72,9631 @@ char *cli_vol_task_status_str[] = {"not started",</div><div class='ctx'>                                    "fix-layout stopped",</div><div class='ctx'>                                    "fix-layout completed",</div><div class='ctx'>                                    "fix-layout failed",</div><div class='del'>-                                   "unknown"</div><div class='del'>-};</div><div class='add'>+                                   "unknown"};</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_snapshot (call_frame_t *frame, xlator_t *this, void *data);</div><div class='add'>+gf_cli_snapshot(call_frame_t *frame, xlator_t *this, void *data);</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_get_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      void *data);</div><div class='add'>+gf_cli_get_volume(call_frame_t *frame, xlator_t *this, void *data);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_to_glusterd (gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn,</div><div class='del'>-                 xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this,</div><div class='del'>-                 rpc_clnt_prog_t *prog, struct iobref *iobref);</div><div class='add'>+cli_to_glusterd(gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn,</div><div class='add'>+                xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this,</div><div class='add'>+                rpc_clnt_prog_t *prog, struct iobref *iobref);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-add_cli_cmd_timeout_to_dict (dict_t *dict);</div><div class='add'>+add_cli_cmd_timeout_to_dict(dict_t *dict);</div><div class='ctx'> </div><div class='ctx'> rpc_clnt_prog_t cli_handshake_prog = {</div><div class='del'>-        .progname  = "cli handshake",</div><div class='del'>-        .prognum   = GLUSTER_HNDSK_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_HNDSK_VERSION,</div><div class='add'>+    .progname = "cli handshake",</div><div class='add'>+    .prognum = GLUSTER_HNDSK_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_HNDSK_VERSION,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> rpc_clnt_prog_t cli_pmap_prog = {</div><div class='del'>-        .progname   = "cli portmap",</div><div class='del'>-        .prognum    = GLUSTER_PMAP_PROGRAM,</div><div class='del'>-        .progver    = GLUSTER_PMAP_VERSION,</div><div class='add'>+    .progname = "cli portmap",</div><div class='add'>+    .prognum = GLUSTER_PMAP_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_PMAP_VERSION,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_probe_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                        int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp            rsp   = {0,};</div><div class='del'>-        int                   ret   = -1;</div><div class='del'>-        char                  msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                //rsp.op_ret   = -1;</div><div class='del'>-                //rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to probe");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_errstr &amp;&amp; (strlen (rsp.op_errstr) &gt; 0)) {</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-                if (rsp.op_ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "%s", msg);</div><div class='del'>-        }</div><div class='add'>+gf_cli_probe_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                 void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        // rsp.op_ret   = -1;</div><div class='add'>+        // rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to probe");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_errstr &amp;&amp; (strlen(rsp.op_errstr) &gt; 0)) {</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+        if (rsp.op_ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "%s", msg);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str (NULL,</div><div class='del'>-                                          (rsp.op_ret)? NULL : msg,</div><div class='del'>-                                          rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                          (rsp.op_ret)? msg : NULL);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str(NULL, (rsp.op_ret) ? NULL : msg, rsp.op_ret,</div><div class='add'>+                                 rsp.op_errno, (rsp.op_ret) ? msg : NULL);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rsp.op_ret)</div><div class='del'>-                cli_out ("peer probe: success. %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_err ("peer probe: failed: %s", msg);</div><div class='add'>+    if (!rsp.op_ret)</div><div class='add'>+        cli_out("peer probe: success. %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_err("peer probe: failed: %s", msg);</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_deprobe_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                       int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp            rsp   = {0,};</div><div class='del'>-        int                   ret   = -1;</div><div class='del'>-        char              msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                //rsp.op_ret   = -1;</div><div class='del'>-                //rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to deprobe");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strlen (rsp.op_errstr) &gt; 0) {</div><div class='del'>-                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "%s", rsp.op_errstr);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                snprintf (msg, sizeof (msg), "success");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str (NULL,</div><div class='del'>-                                          (rsp.op_ret)? NULL : msg,</div><div class='del'>-                                          rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                          (rsp.op_ret)? msg : NULL);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_deprobe_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                   void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        // rsp.op_ret   = -1;</div><div class='add'>+        // rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to deprobe");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strlen(rsp.op_errstr) &gt; 0) {</div><div class='add'>+            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "%s", rsp.op_errstr);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        snprintf(msg, sizeof(msg), "success");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str(NULL, (rsp.op_ret) ? NULL : msg, rsp.op_ret,</div><div class='add'>+                                 rsp.op_errno, (rsp.op_ret) ? msg : NULL);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rsp.op_ret)</div><div class='del'>-                cli_out ("peer detach: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_err ("peer detach: failed: %s", msg);</div><div class='add'>+    if (!rsp.op_ret)</div><div class='add'>+        cli_out("peer detach: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_err("peer detach: failed: %s", msg);</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_output_peer_hostnames (dict_t *dict, int count, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char key[256] = {0,};</div><div class='del'>-        int i = 0;</div><div class='del'>-        char *hostname = NULL;</div><div class='del'>-</div><div class='del'>-        cli_out ("Other names:");</div><div class='del'>-        /* Starting from friend.hostname1, as friend.hostname0 will be the same</div><div class='del'>-         * as friend.hostname</div><div class='del'>-         */</div><div class='del'>-        for (i = 1; i &lt; count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.hostname%d", prefix, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-                cli_out ("%s", hostname);</div><div class='del'>-                hostname = NULL;</div><div class='del'>-        }</div><div class='add'>+gf_cli_output_peer_hostnames(dict_t *dict, int count, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+</div><div class='add'>+    cli_out("Other names:");</div><div class='add'>+    /* Starting from friend.hostname1, as friend.hostname0 will be the same</div><div class='add'>+     * as friend.hostname</div><div class='add'>+     */</div><div class='add'>+    for (i = 1; i &lt; count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.hostname%d", prefix, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+        cli_out("%s", hostname);</div><div class='add'>+        hostname = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_output_peer_status (dict_t *dict, int count)</div><div class='del'>-{</div><div class='del'>-        int                        ret   = -1;</div><div class='del'>-        char                       *uuid_buf = NULL;</div><div class='del'>-        char                       *hostname_buf = NULL;</div><div class='del'>-        int32_t                    i = 1;</div><div class='del'>-        char                       key[256] = {0,};</div><div class='del'>-        char                       *state = NULL;</div><div class='del'>-        int32_t                    connected = 0;</div><div class='del'>-        char                       *connected_str = NULL;</div><div class='del'>-        int                        hostname_count = 0;</div><div class='del'>-</div><div class='del'>-        cli_out ("Number of Peers: %d", count);</div><div class='del'>-        i = 1;</div><div class='del'>-        while ( i &lt;= count) {</div><div class='del'>-                snprintf (key, 256, "friend%d.uuid", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;uuid_buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                snprintf (key, 256, "friend%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname_buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+gf_cli_output_peer_status(dict_t *dict, int count)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *uuid_buf = NULL;</div><div class='add'>+    char *hostname_buf = NULL;</div><div class='add'>+    int32_t i = 1;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *state = NULL;</div><div class='add'>+    int32_t connected = 0;</div><div class='add'>+    char *connected_str = NULL;</div><div class='add'>+    int hostname_count = 0;</div><div class='add'>+</div><div class='add'>+    cli_out("Number of Peers: %d", count);</div><div class='add'>+    i = 1;</div><div class='add'>+    while (i &lt;= count) {</div><div class='add'>+        snprintf(key, 256, "friend%d.uuid", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;uuid_buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "friend%d.connected", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;connected);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (connected)</div><div class='del'>-                        connected_str = "Connected";</div><div class='del'>-                else</div><div class='del'>-                        connected_str = "Disconnected";</div><div class='add'>+        snprintf(key, 256, "friend%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname_buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='add'>+        snprintf(key, 256, "friend%d.connected", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;connected);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        if (connected)</div><div class='add'>+            connected_str = "Connected";</div><div class='add'>+        else</div><div class='add'>+            connected_str = "Disconnected";</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "friend%d.state", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;state);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "friend%d.state", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;state);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                cli_out ("\nHostname: %s\nUuid: %s\nState: %s (%s)",</div><div class='del'>-                         hostname_buf, uuid_buf, state, connected_str);</div><div class='add'>+        cli_out("\nHostname: %s\nUuid: %s\nState: %s (%s)", hostname_buf,</div><div class='add'>+                uuid_buf, state, connected_str);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.hostname_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;hostname_count);</div><div class='del'>-                /* Print other addresses only if there are more than 1.</div><div class='del'>-                 */</div><div class='del'>-                if ((ret == 0) &amp;&amp; (hostname_count &gt; 1)) {</div><div class='del'>-                        snprintf (key, sizeof (key), "friend%d", i);</div><div class='del'>-                        ret = gf_cli_output_peer_hostnames (dict,</div><div class='del'>-                                                            hostname_count,</div><div class='del'>-                                                            key);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_WARNING,</div><div class='del'>-                                        "error outputting peer other names");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                i++;</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.hostname_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;hostname_count);</div><div class='add'>+        /* Print other addresses only if there are more than 1.</div><div class='add'>+         */</div><div class='add'>+        if ((ret == 0) &amp;&amp; (hostname_count &gt; 1)) {</div><div class='add'>+            snprintf(key, sizeof(key), "friend%d", i);</div><div class='add'>+            ret = gf_cli_output_peer_hostnames(dict, hostname_count, key);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_WARNING,</div><div class='add'>+                       "error outputting peer other names");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_output_pool_list (dict_t *dict, int count)</div><div class='del'>-{</div><div class='del'>-        int                         ret           = -1;</div><div class='del'>-        char                       *uuid_buf      = NULL;</div><div class='del'>-        char                       *hostname_buf  = NULL;</div><div class='del'>-        int32_t                     hostname_len  = 8; /*min len 8 chars*/</div><div class='del'>-        int32_t                     i             = 1;</div><div class='del'>-        char                        key[256]      = {0,};</div><div class='del'>-        int32_t                     connected     = 0;</div><div class='del'>-        char                       *connected_str = NULL;</div><div class='del'>-</div><div class='del'>-        if (count &lt;= 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        while (i &lt;= count) {</div><div class='del'>-                snprintf (key, 256, "friend%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname_buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+gf_cli_output_pool_list(dict_t *dict, int count)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *uuid_buf = NULL;</div><div class='add'>+    char *hostname_buf = NULL;</div><div class='add'>+    int32_t hostname_len = 8; /*min len 8 chars*/</div><div class='add'>+    int32_t i = 1;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t connected = 0;</div><div class='add'>+    char *connected_str = NULL;</div><div class='add'>+</div><div class='add'>+    if (count &lt;= 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    while (i &lt;= count) {</div><div class='add'>+        snprintf(key, 256, "friend%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname_buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = strlen(hostname_buf);</div><div class='del'>-                if (ret &gt; hostname_len)</div><div class='del'>-                        hostname_len = ret;</div><div class='add'>+        ret = strlen(hostname_buf);</div><div class='add'>+        if (ret &gt; hostname_len)</div><div class='add'>+            hostname_len = ret;</div><div class='ctx'> </div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_out ("UUID\t\t\t\t\t%-*s\tState", hostname_len, "Hostname");</div><div class='add'>+    cli_out("UUID\t\t\t\t\t%-*s\tState", hostname_len, "Hostname");</div><div class='ctx'> </div><div class='del'>-        i = 1;</div><div class='del'>-        while ( i &lt;= count) {</div><div class='del'>-                snprintf (key, 256, "friend%d.uuid", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;uuid_buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    i = 1;</div><div class='add'>+    while (i &lt;= count) {</div><div class='add'>+        snprintf(key, 256, "friend%d.uuid", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;uuid_buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "friend%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname_buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "friend%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname_buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "friend%d.connected", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;connected);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (connected)</div><div class='del'>-                        connected_str = "Connected";</div><div class='del'>-                else</div><div class='del'>-                        connected_str = "Disconnected";</div><div class='add'>+        snprintf(key, 256, "friend%d.connected", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;connected);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        if (connected)</div><div class='add'>+            connected_str = "Connected";</div><div class='add'>+        else</div><div class='add'>+            connected_str = "Disconnected";</div><div class='ctx'> </div><div class='del'>-                cli_out ("%s\t%-*s\t%s ", uuid_buf, hostname_len, hostname_buf,</div><div class='del'>-                         connected_str);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        cli_out("%s\t%-*s\t%s ", uuid_buf, hostname_len, hostname_buf,</div><div class='add'>+                connected_str);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* function pointer for gf_cli_output_{pool_list,peer_status} */</div><div class='del'>-typedef int (*cli_friend_output_fn) (dict_t*, int);</div><div class='add'>+typedef int (*cli_friend_output_fn)(dict_t *, int);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_list_friends_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli_list_friends_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                        void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_peer_list_rsp      rsp   = {0,};</div><div class='del'>-        int                        ret   = -1;</div><div class='del'>-        dict_t                    *dict = NULL;</div><div class='del'>-        char                       msg[1024] = {0,};</div><div class='del'>-        char                      *cmd = NULL;</div><div class='del'>-        cli_friend_output_fn       friend_output_fn;</div><div class='del'>-        call_frame_t              *frame = NULL;</div><div class='del'>-        unsigned long              flags = 0;</div><div class='add'>+    gf1_cli_peer_list_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *cmd = NULL;</div><div class='add'>+    cli_friend_output_fn friend_output_fn;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    unsigned long flags = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        flags = (long)frame-&gt;local;</div><div class='add'>+    flags = (long)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (flags == GF_CLI_LIST_POOL_NODES) {</div><div class='del'>-                cmd = "pool list";</div><div class='del'>-                friend_output_fn = &amp;gf_cli_output_pool_list;</div><div class='del'>-        } else {</div><div class='del'>-                cmd = "peer status";</div><div class='del'>-                friend_output_fn = &amp;gf_cli_output_peer_status;</div><div class='del'>-        }</div><div class='add'>+    if (flags == GF_CLI_LIST_POOL_NODES) {</div><div class='add'>+        cmd = "pool list";</div><div class='add'>+        friend_output_fn = &amp;gf_cli_output_pool_list;</div><div class='add'>+    } else {</div><div class='add'>+        cmd = "peer status";</div><div class='add'>+        friend_output_fn = &amp;gf_cli_output_peer_status;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* 'free' the flags set by gf_cli_list_friends */</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    /* 'free' the flags set by gf_cli_list_friends */</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_peer_list_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                //rsp.op_ret   = -1;</div><div class='del'>-                //rsp.op_errno = EINVAL;</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_peer_list_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        // rsp.op_ret   = -1;</div><div class='add'>+        // rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to list: %d", rsp.op_ret);</div><div class='add'>+</div><div class='add'>+    if (!rsp.op_ret) {</div><div class='add'>+        if (!rsp.friends.friends_len) {</div><div class='add'>+            snprintf(msg, sizeof(msg), "%s: No peers present", cmd);</div><div class='add'>+            if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+                ret = cli_xml_output_peer_status(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                                 msg);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            cli_err("%s", msg);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to list: %d",</div><div class='del'>-                rsp.op_ret);</div><div class='del'>-</div><div class='del'>-        if (!rsp.op_ret) {</div><div class='del'>-</div><div class='del'>-                if (!rsp.friends.friends_len) {</div><div class='del'>-                        snprintf (msg, sizeof (msg),</div><div class='del'>-                                  "%s: No peers present", cmd);</div><div class='del'>-                        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                                ret = cli_xml_output_peer_status (dict,</div><div class='del'>-                                                                  rsp.op_ret,</div><div class='del'>-                                                                  rsp.op_errno,</div><div class='del'>-                                                                  msg);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                                "Error outputting to xml");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cli_err ("%s", msg);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dict = dict_new ();</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-                if (!dict) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!dict) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_unserialize (rsp.friends.friends_val,</div><div class='del'>-                                        rsp.friends.friends_len,</div><div class='del'>-                                        &amp;dict);</div><div class='add'>+        ret = dict_unserialize(rsp.friends.friends_val, rsp.friends.friends_len,</div><div class='add'>+                               &amp;dict);</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                        "Unable to allocate memory");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        ret = cli_xml_output_peer_status (dict, rsp.op_ret,</div><div class='del'>-                                                          rsp.op_errno, msg);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+            ret = cli_xml_output_peer_status(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                             msg);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = friend_output_fn (dict, count);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = friend_output_fn(dict, count);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+            ret = cli_xml_output_peer_status(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                             NULL);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>         } else {</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        ret = cli_xml_output_peer_status (dict, rsp.op_ret,</div><div class='del'>-                                                          rsp.op_errno, NULL);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                cli_err ("%s: failed", cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        cli_err("%s: failed", cmd);</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_get_state_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                      int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp           rsp            = {0,};</div><div class='del'>-        int                  ret            = -1;</div><div class='del'>-        dict_t               *dict          = NULL;</div><div class='del'>-        char                 *daemon_name   = NULL;</div><div class='del'>-        char                 *ofilepath     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", myframe, out);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+gf_cli_get_state_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                     void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *daemon_name = NULL;</div><div class='add'>+    char *ofilepath = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", myframe, out);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            cli_err("Failed to get daemon state: %s", rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            cli_err(</div><div class='add'>+                "Failed to get daemon state. Check glusterd"</div><div class='add'>+                " log file for more details");</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_get_str(dict, "daemon", &amp;daemon_name);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Couldn't get daemon name");</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        cli_err ("Failed to get daemon state: %s", rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        cli_err ("Failed to get daemon state. Check glusterd"</div><div class='del'>-                                 " log file for more details");</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_get_str (dict, "daemon", &amp;daemon_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get daemon name");</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, "ofilepath", &amp;ofilepath);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get filepath");</div><div class='add'>+        ret = dict_get_str(dict, "ofilepath", &amp;ofilepath);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Couldn't get filepath");</div><div class='ctx'> </div><div class='del'>-                if (daemon_name &amp;&amp; ofilepath)</div><div class='del'>-                        cli_out ("%s state dumped to %s",</div><div class='del'>-                                 daemon_name, ofilepath);</div><div class='del'>-        }</div><div class='add'>+        if (daemon_name &amp;&amp; ofilepath)</div><div class='add'>+            cli_out("%s state dumped to %s", daemon_name, ofilepath);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_out_options ( char *substr, char *optstr, char *valstr)</div><div class='add'>+cli_out_options(char *substr, char *optstr, char *valstr)</div><div class='ctx'> {</div><div class='del'>-        char                    *ptr1 = NULL;</div><div class='del'>-        char                    *ptr2 = NULL;</div><div class='add'>+    char *ptr1 = NULL;</div><div class='add'>+    char *ptr2 = NULL;</div><div class='ctx'> </div><div class='del'>-        ptr1 = substr;</div><div class='del'>-        ptr2 = optstr;</div><div class='add'>+    ptr1 = substr;</div><div class='add'>+    ptr2 = optstr;</div><div class='ctx'> </div><div class='del'>-        while (ptr1)</div><div class='del'>-        {</div><div class='del'>- /* Avoiding segmentation fault. */</div><div class='del'>-                if (!ptr2)</div><div class='del'>-                        return;</div><div class='del'>-                if (*ptr1 != *ptr2)</div><div class='del'>-                        break;</div><div class='del'>-                ptr1++;</div><div class='del'>-                ptr2++;</div><div class='del'>-        }</div><div class='add'>+    while (ptr1) {</div><div class='add'>+        /* Avoiding segmentation fault. */</div><div class='add'>+        if (!ptr2)</div><div class='add'>+            return;</div><div class='add'>+        if (*ptr1 != *ptr2)</div><div class='add'>+            break;</div><div class='add'>+        ptr1++;</div><div class='add'>+        ptr2++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (*ptr2 == '\0')</div><div class='del'>-                return;</div><div class='del'>-        cli_out ("%s: %s",ptr2 , valstr);</div><div class='add'>+    if (*ptr2 == '\0')</div><div class='add'>+        return;</div><div class='add'>+    cli_out("%s: %s", ptr2, valstr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_cli_output_volinfo_opts (dict_t *d, char *k,</div><div class='del'>-                             data_t *v, void *tmp)</div><div class='del'>-{</div><div class='del'>-        int     ret   = 0;</div><div class='del'>-        char   *key   = NULL;</div><div class='del'>-        char   *ptr   = NULL;</div><div class='del'>-        data_t *value = NULL;</div><div class='del'>-</div><div class='del'>-        key = tmp;</div><div class='del'>-</div><div class='del'>-        ptr = strstr (k, "option.");</div><div class='del'>-        if (ptr) {</div><div class='del'>-                value = v;</div><div class='del'>-                if (!value) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out_options (key, k, v-&gt;data);</div><div class='add'>+_gf_cli_output_volinfo_opts(dict_t *d, char *k, data_t *v, void *tmp)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    data_t *value = NULL;</div><div class='add'>+</div><div class='add'>+    key = tmp;</div><div class='add'>+</div><div class='add'>+    ptr = strstr(k, "option.");</div><div class='add'>+    if (ptr) {</div><div class='add'>+        value = v;</div><div class='add'>+        if (!value) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        cli_out_options(key, k, v-&gt;data);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-print_brick_details (dict_t *dict, int volcount, int start_index,</div><div class='del'>-                     int end_index, int replica_count)</div><div class='del'>-{</div><div class='del'>-        char           key[1024]   = {0,};</div><div class='del'>-        int            index       = start_index;</div><div class='del'>-        int            isArbiter   = 0;</div><div class='del'>-        int            ret         = -1;</div><div class='del'>-        char          *brick       = NULL;</div><div class='add'>+print_brick_details(dict_t *dict, int volcount, int start_index, int end_index,</div><div class='add'>+                    int replica_count)</div><div class='add'>+{</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int index = start_index;</div><div class='add'>+    int isArbiter = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *brick = NULL;</div><div class='ctx'> #ifdef HAVE_BD_XLATOR</div><div class='del'>-        char          *caps        = NULL;</div><div class='add'>+    char *caps = NULL;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        while (index &lt;= end_index) {</div><div class='del'>-                snprintf (key, 1024, "volume%d.brick%d", volcount, index);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.brick%d.isArbiter",</div><div class='del'>-                          volcount, index);</div><div class='del'>-                if (dict_get (dict, key))</div><div class='del'>-                        isArbiter = 1;</div><div class='del'>-                else</div><div class='del'>-                        isArbiter = 0;</div><div class='add'>+    while (index &lt;= end_index) {</div><div class='add'>+        snprintf(key, 1024, "volume%d.brick%d", volcount, index);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;brick);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", volcount,</div><div class='add'>+                 index);</div><div class='add'>+        if (dict_get(dict, key))</div><div class='add'>+            isArbiter = 1;</div><div class='add'>+        else</div><div class='add'>+            isArbiter = 0;</div><div class='ctx'> </div><div class='del'>-                if (isArbiter)</div><div class='del'>-                        cli_out ("Brick%d: %s (arbiter)", index, brick);</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Brick%d: %s", index, brick);</div><div class='add'>+        if (isArbiter)</div><div class='add'>+            cli_out("Brick%d: %s (arbiter)", index, brick);</div><div class='add'>+        else</div><div class='add'>+            cli_out("Brick%d: %s", index, brick);</div><div class='ctx'> #ifdef HAVE_BD_XLATOR</div><div class='del'>-                snprintf (key, 1024, "volume%d.vg%d", volcount, index);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;caps);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        cli_out ("Brick%d VG: %s", index, caps);</div><div class='add'>+        snprintf(key, 1024, "volume%d.vg%d", volcount, index);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;caps);</div><div class='add'>+        if (!ret)</div><div class='add'>+            cli_out("Brick%d VG: %s", index, caps);</div><div class='ctx'> #endif</div><div class='del'>-                index++;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+        index++;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> void</div><div class='del'>-gf_cli_print_number_of_bricks (int type, int brick_count, int dist_count,</div><div class='del'>-                               int stripe_count, int replica_count,</div><div class='del'>-                               int disperse_count, int redundancy_count,</div><div class='del'>-                               int arbiter_count)</div><div class='del'>-{</div><div class='del'>-       if (type == GF_CLUSTER_TYPE_STRIPE_REPLICATE) {</div><div class='del'>-               if (arbiter_count == 0) {</div><div class='del'>-                       cli_out ("Number of Bricks: %d x %d x %d = %d",</div><div class='del'>-                                (brick_count / dist_count),</div><div class='del'>-                                stripe_count,</div><div class='del'>-                                replica_count,</div><div class='del'>-                                brick_count);</div><div class='del'>-               } else {</div><div class='del'>-                       cli_out ("Number of Bricks: %d x %d x (%d + %d) = %d",</div><div class='del'>-                                (brick_count / dist_count),</div><div class='del'>-                                stripe_count, replica_count - arbiter_count,</div><div class='del'>-                                arbiter_count, brick_count);</div><div class='del'>-               }</div><div class='del'>-       } else if (type == GF_CLUSTER_TYPE_NONE ||</div><div class='del'>-                  type == GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-               cli_out ("Number of Bricks: %d", brick_count);</div><div class='del'>-       } else if (type == GF_CLUSTER_TYPE_DISPERSE) {</div><div class='del'>-               cli_out ("Number of Bricks: %d x (%d + %d) = %d",</div><div class='del'>-                        (brick_count / dist_count),</div><div class='del'>-                        disperse_count - redundancy_count,</div><div class='del'>-                        redundancy_count, brick_count);</div><div class='del'>-       } else {</div><div class='del'>-               /* For both replicate and stripe, dist_count is</div><div class='del'>-                  good enough */</div><div class='del'>-               if (arbiter_count == 0) {</div><div class='del'>-                       cli_out ("Number of Bricks: %d x %d = %d",</div><div class='del'>-                                (brick_count / dist_count),</div><div class='del'>-                                dist_count, brick_count);</div><div class='del'>-               } else {</div><div class='del'>-                       cli_out ("Number of Bricks: %d x (%d + %d) = %d",</div><div class='del'>-                                (brick_count / dist_count),</div><div class='del'>-                                dist_count - arbiter_count, arbiter_count,</div><div class='del'>-                                brick_count);</div><div class='del'>-               }</div><div class='del'>-       }</div><div class='del'>-</div><div class='add'>+gf_cli_print_number_of_bricks(int type, int brick_count, int dist_count,</div><div class='add'>+                              int stripe_count, int replica_count,</div><div class='add'>+                              int disperse_count, int redundancy_count,</div><div class='add'>+                              int arbiter_count)</div><div class='add'>+{</div><div class='add'>+    if (type == GF_CLUSTER_TYPE_STRIPE_REPLICATE) {</div><div class='add'>+        if (arbiter_count == 0) {</div><div class='add'>+            cli_out("Number of Bricks: %d x %d x %d = %d",</div><div class='add'>+                    (brick_count / dist_count), stripe_count, replica_count,</div><div class='add'>+                    brick_count);</div><div class='add'>+        } else {</div><div class='add'>+            cli_out("Number of Bricks: %d x %d x (%d + %d) = %d",</div><div class='add'>+                    (brick_count / dist_count), stripe_count,</div><div class='add'>+                    replica_count - arbiter_count, arbiter_count, brick_count);</div><div class='add'>+        }</div><div class='add'>+    } else if (type == GF_CLUSTER_TYPE_NONE || type == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+        cli_out("Number of Bricks: %d", brick_count);</div><div class='add'>+    } else if (type == GF_CLUSTER_TYPE_DISPERSE) {</div><div class='add'>+        cli_out("Number of Bricks: %d x (%d + %d) = %d",</div><div class='add'>+                (brick_count / dist_count), disperse_count - redundancy_count,</div><div class='add'>+                redundancy_count, brick_count);</div><div class='add'>+    } else {</div><div class='add'>+        /* For both replicate and stripe, dist_count is</div><div class='add'>+           good enough */</div><div class='add'>+        if (arbiter_count == 0) {</div><div class='add'>+            cli_out("Number of Bricks: %d x %d = %d",</div><div class='add'>+                    (brick_count / dist_count), dist_count, brick_count);</div><div class='add'>+        } else {</div><div class='add'>+            cli_out("Number of Bricks: %d x (%d + %d) = %d",</div><div class='add'>+                    (brick_count / dist_count), dist_count - arbiter_count,</div><div class='add'>+                    arbiter_count, brick_count);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_print_tier_info (dict_t *dict, int i, int brick_count)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        int                  hot_brick_count        = -1;</div><div class='del'>-        int                  cold_type              = 0;</div><div class='del'>-        int                  cold_brick_count       = 0;</div><div class='del'>-        int                  cold_replica_count     = 0;</div><div class='del'>-        int                  cold_arbiter_count     = 0;</div><div class='del'>-        int                  cold_disperse_count    = 0;</div><div class='del'>-        int                  cold_redundancy_count  = 0;</div><div class='del'>-        int                  cold_dist_count        = 0;</div><div class='del'>-        int                  hot_type               = 0;</div><div class='del'>-        int                  hot_replica_count      = 0;</div><div class='del'>-        int                  hot_dist_count         = 0;</div><div class='del'>-        int                  ret                    = -1;</div><div class='del'>-        int                  vol_type               = -1;</div><div class='del'>-        char                 key[256]               = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.cold_brick_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;cold_brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.cold_type", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;cold_type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.cold_dist_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;cold_dist_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.cold_replica_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;cold_replica_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.cold_arbiter_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;cold_arbiter_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.cold_disperse_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;cold_disperse_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key),</div><div class='del'>-                  "volume%d.cold_redundancy_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key,</div><div class='del'>-                              &amp;cold_redundancy_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.hot_brick_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;hot_brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.hot_type", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;hot_type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        snprintf (key, sizeof (key), "volume%d.hot_replica_count", i);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;hot_replica_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        cli_out ("Hot Tier :");</div><div class='del'>-        hot_dist_count = (hot_replica_count ?</div><div class='del'>-                          hot_replica_count : 1);</div><div class='del'>-</div><div class='del'>-        vol_type = get_vol_type (hot_type, hot_dist_count, hot_brick_count);</div><div class='del'>-        cli_out ("Hot Tier Type : %s",</div><div class='del'>-                 vol_type_str[vol_type]);</div><div class='del'>-</div><div class='del'>-        gf_cli_print_number_of_bricks (hot_type,</div><div class='del'>-                        hot_brick_count, hot_dist_count, 0,</div><div class='del'>-                        hot_replica_count, 0, 0, 0);</div><div class='del'>-</div><div class='del'>-        ret = print_brick_details (dict, i, 1, hot_brick_count,</div><div class='del'>-                                   hot_replica_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        cli_out ("Cold Tier:");</div><div class='del'>-</div><div class='del'>-        vol_type = get_vol_type (cold_type, cold_dist_count, cold_brick_count);</div><div class='del'>-        cli_out ("Cold Tier Type : %s",</div><div class='del'>-                        vol_type_str[vol_type]);</div><div class='del'>-</div><div class='del'>-        gf_cli_print_number_of_bricks (cold_type,</div><div class='del'>-                cold_brick_count,</div><div class='del'>-                cold_dist_count, 0, cold_replica_count,</div><div class='del'>-                cold_disperse_count, cold_redundancy_count, cold_arbiter_count);</div><div class='del'>-</div><div class='del'>-        ret = print_brick_details (dict, i, hot_brick_count+1,</div><div class='del'>-                                   brick_count, cold_replica_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='add'>+gf_cli_print_tier_info(dict_t *dict, int i, int brick_count)</div><div class='add'>+{</div><div class='add'>+    int hot_brick_count = -1;</div><div class='add'>+    int cold_type = 0;</div><div class='add'>+    int cold_brick_count = 0;</div><div class='add'>+    int cold_replica_count = 0;</div><div class='add'>+    int cold_arbiter_count = 0;</div><div class='add'>+    int cold_disperse_count = 0;</div><div class='add'>+    int cold_redundancy_count = 0;</div><div class='add'>+    int cold_dist_count = 0;</div><div class='add'>+    int hot_type = 0;</div><div class='add'>+    int hot_replica_count = 0;</div><div class='add'>+    int hot_dist_count = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int vol_type = -1;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_brick_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_type", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_dist_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_dist_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_replica_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_replica_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_arbiter_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_arbiter_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_disperse_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_disperse_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.cold_redundancy_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;cold_redundancy_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.hot_brick_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;hot_brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.hot_type", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;hot_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "volume%d.hot_replica_count", i);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;hot_replica_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    cli_out("Hot Tier :");</div><div class='add'>+    hot_dist_count = (hot_replica_count ? hot_replica_count : 1);</div><div class='add'>+</div><div class='add'>+    vol_type = get_vol_type(hot_type, hot_dist_count, hot_brick_count);</div><div class='add'>+    cli_out("Hot Tier Type : %s", vol_type_str[vol_type]);</div><div class='add'>+</div><div class='add'>+    gf_cli_print_number_of_bricks(hot_type, hot_brick_count, hot_dist_count, 0,</div><div class='add'>+                                  hot_replica_count, 0, 0, 0);</div><div class='add'>+</div><div class='add'>+    ret = print_brick_details(dict, i, 1, hot_brick_count, hot_replica_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    cli_out("Cold Tier:");</div><div class='add'>+</div><div class='add'>+    vol_type = get_vol_type(cold_type, cold_dist_count, cold_brick_count);</div><div class='add'>+    cli_out("Cold Tier Type : %s", vol_type_str[vol_type]);</div><div class='add'>+</div><div class='add'>+    gf_cli_print_number_of_bricks(cold_type, cold_brick_count, cold_dist_count,</div><div class='add'>+                                  0, cold_replica_count, cold_disperse_count,</div><div class='add'>+                                  cold_redundancy_count, cold_arbiter_count);</div><div class='add'>+</div><div class='add'>+    ret = print_brick_details(dict, i, hot_brick_count + 1, brick_count,</div><div class='add'>+                              cold_replica_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_get_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                          int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int                        ret                  = -1;</div><div class='del'>-        int                        opt_count            = 0;</div><div class='del'>-        int32_t                    i                    = 0;</div><div class='del'>-        int32_t                    j                    = 1;</div><div class='del'>-        int32_t                    status               = 0;</div><div class='del'>-        int32_t                    type                 = 0;</div><div class='del'>-        int32_t                    brick_count          = 0;</div><div class='del'>-        int32_t                    dist_count           = 0;</div><div class='del'>-        int32_t                    stripe_count         = 0;</div><div class='del'>-        int32_t                    replica_count        = 0;</div><div class='del'>-        int32_t                    disperse_count       = 0;</div><div class='del'>-        int32_t                    redundancy_count     = 0;</div><div class='del'>-        int32_t                    arbiter_count        = 0;</div><div class='del'>-        int32_t                    snap_count           = 0;</div><div class='del'>-        int32_t                    vol_type             = 0;</div><div class='del'>-        int32_t                    transport            = 0;</div><div class='del'>-        char                      *volume_id_str        = NULL;</div><div class='del'>-        char                      *volname              = NULL;</div><div class='del'>-        dict_t                    *dict                 = NULL;</div><div class='del'>-        cli_local_t               *local                = NULL;</div><div class='del'>-        char                       key[1024]            = {0};</div><div class='del'>-        char                       err_str[2048]        = {0};</div><div class='del'>-        gf_cli_rsp                 rsp                  = {0};</div><div class='del'>-        char                      *caps __attribute__((unused)) = NULL;</div><div class='del'>-        int                        k __attribute__((unused)) = 0;</div><div class='del'>-        call_frame_t              *frame                = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='add'>+gf_cli_get_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int opt_count = 0;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t j = 1;</div><div class='add'>+    int32_t status = 0;</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    int32_t brick_count = 0;</div><div class='add'>+    int32_t dist_count = 0;</div><div class='add'>+    int32_t stripe_count = 0;</div><div class='add'>+    int32_t replica_count = 0;</div><div class='add'>+    int32_t disperse_count = 0;</div><div class='add'>+    int32_t redundancy_count = 0;</div><div class='add'>+    int32_t arbiter_count = 0;</div><div class='add'>+    int32_t snap_count = 0;</div><div class='add'>+    int32_t vol_type = 0;</div><div class='add'>+    int32_t transport = 0;</div><div class='add'>+    char *volume_id_str = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char key[1024] = {0};</div><div class='add'>+    char err_str[2048] = {0};</div><div class='add'>+    gf_cli_rsp rsp = {0};</div><div class='add'>+    char *caps __attribute__((unused)) = NULL;</div><div class='add'>+    int k __attribute__((unused)) = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to get vol: %d", rsp.op_ret);</div><div class='add'>+</div><div class='add'>+    if (!rsp.dict.dict_len) {</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+            goto xml_output;</div><div class='add'>+        cli_err("No volumes present");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to get vol: %d",</div><div class='del'>-                rsp.op_ret);</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!rsp.dict.dict_len) {</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                        goto xml_output;</div><div class='del'>-                cli_err ("No volumes present");</div><div class='add'>+    if (!count) {</div><div class='add'>+        switch (local-&gt;get_vol.flags) {</div><div class='add'>+            case GF_CLI_GET_NEXT_VOLUME:</div><div class='add'>+                GF_FREE(local-&gt;get_vol.volname);</div><div class='add'>+                local-&gt;get_vol.volname = NULL;</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='add'>+            case GF_CLI_GET_VOLUME:</div><div class='add'>+                snprintf(err_str, sizeof(err_str), "Volume %s does not exist",</div><div class='add'>+                         local-&gt;get_vol.volname);</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+                if (!(global_state-&gt;mode &amp; GLUSTER_MODE_XML))</div><div class='add'>+                    goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Unable to allocate memory");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+            goto xml_output;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret)</div><div class='add'>+xml_output:</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        /* For GET_NEXT_VOLUME output is already begun in</div><div class='add'>+         * and will also end in gf_cli_get_next_volume()</div><div class='add'>+         */</div><div class='add'>+        if (local-&gt;get_vol.flags == GF_CLI_GET_VOLUME) {</div><div class='add'>+            ret = cli_xml_output_vol_info_begin(local, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                                rsp.op_errstr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        if (!count) {</div><div class='del'>-                switch (local-&gt;get_vol.flags) {</div><div class='del'>-</div><div class='del'>-                case GF_CLI_GET_NEXT_VOLUME:</div><div class='del'>-                        GF_FREE (local-&gt;get_vol.volname);</div><div class='del'>-                        local-&gt;get_vol.volname = NULL;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_GET_VOLUME:</div><div class='del'>-                        snprintf (err_str, sizeof (err_str),</div><div class='del'>-                                  "Volume %s does not exist",</div><div class='del'>-                                  local-&gt;get_vol.volname);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        if (!(global_state-&gt;mode &amp; GLUSTER_MODE_XML))</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                        goto xml_output;</div><div class='del'>-                ret = -1;</div><div class='add'>+        if (dict) {</div><div class='add'>+            ret = cli_xml_output_vol_info(local, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-xml_output:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                /* For GET_NEXT_VOLUME output is already begun in</div><div class='del'>-                 * and will also end in gf_cli_get_next_volume()</div><div class='del'>-                 */</div><div class='del'>-                if (local-&gt;get_vol.flags == GF_CLI_GET_VOLUME) {</div><div class='del'>-                        ret = cli_xml_output_vol_info_begin</div><div class='del'>-                                (local, rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                 rsp.op_errstr);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (dict) {</div><div class='del'>-                        ret = cli_xml_output_vol_info (local, dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;get_vol.flags == GF_CLI_GET_VOLUME) {</div><div class='del'>-                        ret = cli_xml_output_vol_info_end (local);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+        if (local-&gt;get_vol.flags == GF_CLI_GET_VOLUME) {</div><div class='add'>+            ret = cli_xml_output_vol_info_end(local);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while ( i &lt; count) {</div><div class='del'>-                cli_out (" ");</div><div class='del'>-                snprintf (key, 256, "volume%d.name", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    while (i &lt; count) {</div><div class='add'>+        cli_out(" ");</div><div class='add'>+        snprintf(key, 256, "volume%d.name", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.type", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;type);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.type", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;type);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;status);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;status);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.brick_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;brick_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.brick_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;brick_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.dist_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;dist_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.dist_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;dist_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.stripe_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;stripe_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.stripe_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;stripe_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.replica_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;replica_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.replica_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;replica_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.disperse_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;disperse_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.disperse_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;disperse_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.redundancy_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;redundancy_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.redundancy_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;redundancy_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof(key), "volume%d.arbiter_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;arbiter_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.arbiter_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;arbiter_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.transport", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;transport);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.transport", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;transport);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.volume_id", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;volume_id_str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.volume_id", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;volume_id_str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.snap_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;snap_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.snap_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;snap_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                // Distributed (stripe/replicate/stripe-replica) setups</div><div class='del'>-                vol_type = get_vol_type (type, dist_count, brick_count);</div><div class='add'>+        // Distributed (stripe/replicate/stripe-replica) setups</div><div class='add'>+        vol_type = get_vol_type(type, dist_count, brick_count);</div><div class='ctx'> </div><div class='del'>-                cli_out ("Volume Name: %s", volname);</div><div class='del'>-                cli_out ("Type: %s", vol_type_str[vol_type]);</div><div class='del'>-                cli_out ("Volume ID: %s", volume_id_str);</div><div class='del'>-                cli_out ("Status: %s", cli_vol_status_str[status]);</div><div class='del'>-                cli_out ("Snapshot Count: %d", snap_count);</div><div class='add'>+        cli_out("Volume Name: %s", volname);</div><div class='add'>+        cli_out("Type: %s", vol_type_str[vol_type]);</div><div class='add'>+        cli_out("Volume ID: %s", volume_id_str);</div><div class='add'>+        cli_out("Status: %s", cli_vol_status_str[status]);</div><div class='add'>+        cli_out("Snapshot Count: %d", snap_count);</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_BD_XLATOR</div><div class='del'>-                k = 0;</div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.xlator%d", i, k);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;caps);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto next;</div><div class='del'>-                do {</div><div class='del'>-                        j = 0;</div><div class='del'>-                        cli_out ("Xlator %d: %s", k + 1, caps);</div><div class='del'>-                        do {</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.xlator%d.caps%d",</div><div class='del'>-                                          i, k, j++);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;caps);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        break;</div><div class='del'>-                                cli_out ("Capability %d: %s", j, caps);</div><div class='del'>-                        } while (1);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                  "volume%d.xlator%d", i, ++k);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;caps);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-                } while (1);</div><div class='del'>-</div><div class='del'>-next:</div><div class='del'>-#endif</div><div class='del'>-                gf_cli_print_number_of_bricks (type, brick_count,</div><div class='del'>-                                dist_count, stripe_count, replica_count,</div><div class='del'>-                                disperse_count, redundancy_count,</div><div class='del'>-                                arbiter_count);</div><div class='add'>+        k = 0;</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.xlator%d", i, k);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;caps);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto next;</div><div class='add'>+        do {</div><div class='add'>+            j = 0;</div><div class='add'>+            cli_out("Xlator %d: %s", k + 1, caps);</div><div class='add'>+            do {</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.xlator%d.caps%d", i, k,</div><div class='add'>+                         j++);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;caps);</div><div class='add'>+                if (ret)</div><div class='add'>+                    break;</div><div class='add'>+                cli_out("Capability %d: %s", j, caps);</div><div class='add'>+            } while (1);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "volume%d.xlator%d", i, ++k);</div><div class='add'>+            ret = dict_get_str(dict, key, &amp;caps);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='add'>+        } while (1);</div><div class='ctx'> </div><div class='del'>-                cli_out ("Transport-type: %s",</div><div class='del'>-                         ((transport == 0)?"tcp":</div><div class='del'>-                          (transport == 1)?"rdma":</div><div class='del'>-                          "tcp,rdma"));</div><div class='del'>-                j = 1;</div><div class='add'>+    next:</div><div class='add'>+#endif</div><div class='add'>+        gf_cli_print_number_of_bricks(</div><div class='add'>+            type, brick_count, dist_count, stripe_count, replica_count,</div><div class='add'>+            disperse_count, redundancy_count, arbiter_count);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (local-&gt;get_vol.volname);</div><div class='del'>-                local-&gt;get_vol.volname = gf_strdup (volname);</div><div class='add'>+        cli_out("Transport-type: %s",</div><div class='add'>+                ((transport == 0) ? "tcp"</div><div class='add'>+                                  : (transport == 1) ? "rdma" : "tcp,rdma"));</div><div class='add'>+        j = 1;</div><div class='ctx'> </div><div class='del'>-                if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-                        ret = gf_cli_print_tier_info (dict, i, brick_count);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='add'>+        GF_FREE(local-&gt;get_vol.volname);</div><div class='add'>+        local-&gt;get_vol.volname = gf_strdup(volname);</div><div class='ctx'> </div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("Bricks:");</div><div class='del'>-                        ret = print_brick_details (dict, i, j, brick_count,</div><div class='del'>-                                                  replica_count);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+            ret = gf_cli_print_tier_info(dict, i, brick_count);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.opt_count",i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;opt_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        } else {</div><div class='add'>+            cli_out("Bricks:");</div><div class='add'>+            ret = print_brick_details(dict, i, j, brick_count, replica_count);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!opt_count)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.opt_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;opt_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                cli_out ("Options Reconfigured:");</div><div class='add'>+        if (!opt_count)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "volume%d.option.",i);</div><div class='add'>+        cli_out("Options Reconfigured:");</div><div class='ctx'> </div><div class='del'>-                ret = dict_foreach (dict, _gf_cli_output_volinfo_opts, key);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, 256, "volume%d.option.", i);</div><div class='ctx'> </div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        ret = dict_foreach(dict, _gf_cli_output_volinfo_opts, key);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                cli_err ("%s", err_str);</div><div class='add'>+    if (ret)</div><div class='add'>+        cli_err("%s", err_str);</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        free (rsp.op_errstr);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning: %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning: %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_create_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli_create_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                         void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp              rsp       = {0,};</div><div class='del'>-        int                     ret       = -1;</div><div class='del'>-        cli_local_t             *local    = NULL;</div><div class='del'>-        char                    *volname  = NULL;</div><div class='del'>-        dict_t                  *rsp_dict = NULL;</div><div class='del'>-        call_frame_t            *frame    = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to create volume");</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to create volume");</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (rsp.op_ret == 0) {</div><div class='del'>-                        rsp_dict = dict_new ();</div><div class='del'>-                        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                                rsp.dict.dict_len,</div><div class='del'>-                                                &amp;rsp_dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Failed rsp_dict unserialization");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                ret = cli_xml_output_vol_create (rsp_dict, rsp.op_ret,</div><div class='del'>-                                                 rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (rsp.op_ret == 0) {</div><div class='add'>+            rsp_dict = dict_new();</div><div class='add'>+            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='add'>+                                   &amp;rsp_dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                cli_err ("volume create: %s: failed: %s", volname,</div><div class='del'>-                         rsp.op_errstr);</div><div class='del'>-        else if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume create: %s: failed", volname);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume create: %s: success: "</div><div class='del'>-                         "please start the volume to access data", volname);</div><div class='add'>+        ret = cli_xml_output_vol_create(rsp_dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                        rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        cli_err("volume create: %s: failed: %s", volname, rsp.op_errstr);</div><div class='add'>+    else if (rsp.op_ret)</div><div class='add'>+        cli_err("volume create: %s: failed", volname);</div><div class='add'>+    else</div><div class='add'>+        cli_out(</div><div class='add'>+            "volume create: %s: success: "</div><div class='add'>+            "please start the volume to access data",</div><div class='add'>+            volname);</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_delete_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli_delete_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                         void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp              rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *rsp_dict = NULL;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dict get failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "dict get failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to delete volume");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to delete volume");</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (rsp.op_ret == 0) {</div><div class='del'>-                        rsp_dict = dict_new ();</div><div class='del'>-                        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                                rsp.dict.dict_len,</div><div class='del'>-                                                &amp;rsp_dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Failed rsp_dict unserialization");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = cli_xml_output_generic_volume ("volDelete", rsp_dict,</div><div class='del'>-                                                     rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                                     rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (rsp.op_ret == 0) {</div><div class='add'>+            rsp_dict = dict_new();</div><div class='add'>+            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='add'>+                                   &amp;rsp_dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                cli_err ("volume delete: %s: failed: %s", volname,</div><div class='del'>-                         rsp.op_errstr);</div><div class='del'>-        else if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume delete: %s: failed", volname);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume delete: %s: success", volname);</div><div class='add'>+        ret = cli_xml_output_generic_volume("volDelete", rsp_dict, rsp.op_ret,</div><div class='add'>+                                            rsp.op_errno, rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        cli_err("volume delete: %s: failed: %s", volname, rsp.op_errstr);</div><div class='add'>+    else if (rsp.op_ret)</div><div class='add'>+        cli_err("volume delete: %s: failed", volname);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume delete: %s: success", volname);</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("", GF_LOG_DEBUG, "Returning with %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli3_1_uuid_get_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                        int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        char                    *uuid_str = NULL;</div><div class='del'>-        gf_cli_rsp              rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to uuid get");</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to unserialize "</div><div class='del'>-                        "response for uuid get");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "uuid", &amp;uuid_str);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get uuid "</div><div class='del'>-                        "from dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_dict ("uuidGenerate", dict, rsp.op_ret,</div><div class='del'>-                                           rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, "") == 0)</div><div class='del'>-                        cli_err ("Get uuid was unsuccessful");</div><div class='del'>-                else</div><div class='del'>-                        cli_err ("%s", rsp.op_errstr);</div><div class='add'>+gf_cli3_1_uuid_get_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    char *uuid_str = NULL;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to uuid get");</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to unserialize "</div><div class='add'>+               "response for uuid get");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "uuid", &amp;uuid_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get uuid "</div><div class='add'>+               "from dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_dict("uuidGenerate", dict, rsp.op_ret,</div><div class='add'>+                                  rsp.op_errno, rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("UUID: %s", uuid_str);</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, "") == 0)</div><div class='add'>+            cli_err("Get uuid was unsuccessful");</div><div class='add'>+        else</div><div class='add'>+            cli_err("%s", rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("UUID: %s", uuid_str);</div><div class='add'>+    }</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        cli_local_wipe (local);</div><div class='del'>-        if (rsp.dict.dict_val)</div><div class='del'>-                free (rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    cli_local_wipe(local);</div><div class='add'>+    if (rsp.dict.dict_val)</div><div class='add'>+        free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("", GF_LOG_DEBUG, "Returning with %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli3_1_uuid_reset_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli3_1_uuid_reset_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                         void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp              rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to uuid reset");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to uuid reset");</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_dict ("uuidReset", NULL, rsp.op_ret,</div><div class='del'>-                                           rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_dict("uuidReset", NULL, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                  rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                cli_err ("%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("resetting the peer uuid has been %s",</div><div class='del'>-                         (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        cli_err("%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        cli_out("resetting the peer uuid has been %s",</div><div class='add'>+                (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        cli_local_wipe (local);</div><div class='del'>-        if (rsp.dict.dict_val)</div><div class='del'>-                free (rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    cli_local_wipe(local);</div><div class='add'>+    if (rsp.dict.dict_val)</div><div class='add'>+        free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("", GF_LOG_DEBUG, "Returning with %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_start_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli_start_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                        void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp              rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *rsp_dict = NULL;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "dict get failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "dict get failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to start volume");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (rsp.op_ret == 0) {</div><div class='del'>-                        rsp_dict = dict_new ();</div><div class='del'>-                        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                                rsp.dict.dict_len,</div><div class='del'>-                                                &amp;rsp_dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Failed rsp_dict unserialization");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to start volume");</div><div class='ctx'> </div><div class='del'>-                ret = cli_xml_output_generic_volume ("volStart", rsp_dict,</div><div class='del'>-                                                     rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                                     rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (rsp.op_ret == 0) {</div><div class='add'>+            rsp_dict = dict_new();</div><div class='add'>+            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='add'>+                                   &amp;rsp_dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                cli_err ("volume start: %s: failed: %s", volname,</div><div class='del'>-                         rsp.op_errstr);</div><div class='del'>-        else if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume start: %s: failed", volname);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume start: %s: success", volname);</div><div class='add'>+        ret = cli_xml_output_generic_volume("volStart", rsp_dict, rsp.op_ret,</div><div class='add'>+                                            rsp.op_errno, rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        cli_err("volume start: %s: failed: %s", volname, rsp.op_errstr);</div><div class='add'>+    else if (rsp.op_ret)</div><div class='add'>+        cli_err("volume start: %s: failed", volname);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume start: %s: success", volname);</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_stop_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli_stop_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp            rsp   = {0,};</div><div class='del'>-        int                   ret   = -1;</div><div class='del'>-        cli_local_t           *local = NULL;</div><div class='del'>-        char                  *volname = NULL;</div><div class='del'>-        call_frame_t          *frame = NULL;</div><div class='del'>-        dict_t                *rsp_dict = NULL;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Unable to get volname from dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Unable to get volname from dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to stop volume");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to stop volume");</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (rsp.op_ret == 0) {</div><div class='del'>-                        rsp_dict = dict_new ();</div><div class='del'>-                        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                                rsp.dict.dict_len,</div><div class='del'>-                                                &amp;rsp_dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Failed rsp_dict unserialization");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = cli_xml_output_generic_volume ("volStop", rsp_dict,</div><div class='del'>-                                                     rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                                     rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (rsp.op_ret == 0) {</div><div class='add'>+            rsp_dict = dict_new();</div><div class='add'>+            ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='add'>+                                   &amp;rsp_dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                cli_err ("volume stop: %s: failed: %s", volname, rsp.op_errstr);</div><div class='del'>-        else if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume stop: %s: failed", volname);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume stop: %s: success", volname);</div><div class='add'>+        ret = cli_xml_output_generic_volume("volStop", rsp_dict, rsp.op_ret,</div><div class='add'>+                                            rsp.op_errno, rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        cli_err("volume stop: %s: failed: %s", volname, rsp.op_errstr);</div><div class='add'>+    else if (rsp.op_ret)</div><div class='add'>+        cli_err("volume stop: %s: failed", volname);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume stop: %s: success", volname);</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_print_rebalance_status (dict_t *dict, enum gf_task_types task_type,</div><div class='del'>-                               gf_boolean_t is_tier)</div><div class='del'>-{</div><div class='del'>-        int                ret            = -1;</div><div class='del'>-        int                count          = 0;</div><div class='del'>-        int                i              = 1;</div><div class='del'>-        char               key[256]       = {0,};</div><div class='del'>-        gf_defrag_status_t status_rcd     = GF_DEFRAG_STATUS_NOT_STARTED;</div><div class='del'>-        uint64_t           files          = 0;</div><div class='del'>-        uint64_t           size           = 0;</div><div class='del'>-        uint64_t           lookup         = 0;</div><div class='del'>-        char               *node_name     = NULL;</div><div class='del'>-        uint64_t           failures       = 0;</div><div class='del'>-        uint64_t           skipped        = 0;</div><div class='del'>-        double             elapsed        = 0;</div><div class='del'>-        char               *status_str    = NULL;</div><div class='del'>-        char               *size_str      = NULL;</div><div class='del'>-        int32_t            hrs            = 0;</div><div class='del'>-        uint32_t           min            = 0;</div><div class='del'>-        uint32_t           sec            = 0;</div><div class='del'>-        gf_boolean_t       down           = _gf_false;</div><div class='del'>-        gf_boolean_t       fix_layout     = _gf_false;</div><div class='del'>-        uint64_t           max_time       = 0;</div><div class='del'>-        uint64_t           max_elapsed    = 0;</div><div class='del'>-        uint64_t           time_left      = 0;</div><div class='del'>-        gf_boolean_t       show_estimates = _gf_false;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "count not set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "status-1");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, key, (int32_t *)&amp;status_rcd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "count %d %d", count, 1);</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get status");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Fix layout will be sent to all nodes for the volume</div><div class='del'>-           so every status should be of type</div><div class='del'>-           GF_DEFRAG_STATUS_LAYOUT_FIX*</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        if ((task_type == GF_TASK_TYPE_REBALANCE)</div><div class='del'>-           &amp;&amp; (status_rcd &gt;= GF_DEFRAG_STATUS_LAYOUT_FIX_STARTED)) {</div><div class='del'>-                fix_layout = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fix_layout) {</div><div class='del'>-                cli_out ("%35s %41s %27s", "Node", "status",</div><div class='del'>-                         "run time in h:m:s");</div><div class='del'>-                cli_out ("%35s %41s %27s", "---------", "-----------",</div><div class='del'>-                         "------------");</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%40s %16s %13s %13s %13s %13s %20s %18s",</div><div class='del'>-                         "Node", "Rebalanced-files", "size", "scanned",</div><div class='del'>-                         "failures", "skipped", "status", "run time in"</div><div class='del'>-                         " h:m:s");</div><div class='del'>-                cli_out ("%40s %16s %13s %13s %13s %13s %20s %18s",</div><div class='del'>-                         "---------", "-----------", "-----------",</div><div class='del'>-                         "-----------", "-----------", "-----------",</div><div class='del'>-                         "------------", "--------------");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 1; i &lt;= count; i++) {</div><div class='del'>-                /* Reset the variables to prevent carryover of values */</div><div class='del'>-                node_name = NULL;</div><div class='del'>-                files = 0;</div><div class='del'>-                size = 0;</div><div class='del'>-                lookup = 0;</div><div class='del'>-                skipped = 0;</div><div class='del'>-                status_str = NULL;</div><div class='del'>-                elapsed = 0;</div><div class='del'>-                time_left = 0;</div><div class='del'>-</div><div class='del'>-                /* Check if status is NOT_STARTED, and continue early */</div><div class='del'>-                snprintf (key, sizeof (key), "status-%d", i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_int32 (dict, key, (int32_t *)&amp;status_rcd);</div><div class='del'>-                if (ret == -ENOENT) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "count %d %d", count, i);</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get status");</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "node down and has failed"</div><div class='del'>-                                " to set dict");</div><div class='del'>-                        down = _gf_true;</div><div class='del'>-                        continue;</div><div class='del'>-                        /* skip this node if value not available*/</div><div class='del'>-                } else if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "count %d %d", count, i);</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get status");</div><div class='del'>-                        continue;</div><div class='del'>-                        /* skip this node if value not available*/</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (GF_DEFRAG_STATUS_STARTED == status_rcd)</div><div class='del'>-                        show_estimates = _gf_true;</div><div class='del'>-</div><div class='del'>-                snprintf (key, 256, "node-name-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;node_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get node-name");</div><div class='add'>+gf_cli_print_rebalance_status(dict_t *dict, enum gf_task_types task_type,</div><div class='add'>+                              gf_boolean_t is_tier)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 1;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED;</div><div class='add'>+    uint64_t files = 0;</div><div class='add'>+    uint64_t size = 0;</div><div class='add'>+    uint64_t lookup = 0;</div><div class='add'>+    char *node_name = NULL;</div><div class='add'>+    uint64_t failures = 0;</div><div class='add'>+    uint64_t skipped = 0;</div><div class='add'>+    double elapsed = 0;</div><div class='add'>+    char *status_str = NULL;</div><div class='add'>+    char *size_str = NULL;</div><div class='add'>+    int32_t hrs = 0;</div><div class='add'>+    uint32_t min = 0;</div><div class='add'>+    uint32_t sec = 0;</div><div class='add'>+    gf_boolean_t down = _gf_false;</div><div class='add'>+    gf_boolean_t fix_layout = _gf_false;</div><div class='add'>+    uint64_t max_time = 0;</div><div class='add'>+    uint64_t max_elapsed = 0;</div><div class='add'>+    uint64_t time_left = 0;</div><div class='add'>+    gf_boolean_t show_estimates = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "count not set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "status-1");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, key, (int32_t *)&amp;status_rcd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "count %d %d", count, 1);</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "failed to get status");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Fix layout will be sent to all nodes for the volume</div><div class='add'>+       so every status should be of type</div><div class='add'>+       GF_DEFRAG_STATUS_LAYOUT_FIX*</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    if ((task_type == GF_TASK_TYPE_REBALANCE) &amp;&amp;</div><div class='add'>+        (status_rcd &gt;= GF_DEFRAG_STATUS_LAYOUT_FIX_STARTED)) {</div><div class='add'>+        fix_layout = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fix_layout) {</div><div class='add'>+        cli_out("%35s %41s %27s", "Node", "status", "run time in h:m:s");</div><div class='add'>+        cli_out("%35s %41s %27s", "---------", "-----------", "------------");</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%40s %16s %13s %13s %13s %13s %20s %18s", "Node",</div><div class='add'>+                "Rebalanced-files", "size", "scanned", "failures", "skipped",</div><div class='add'>+                "status",</div><div class='add'>+                "run time in"</div><div class='add'>+                " h:m:s");</div><div class='add'>+        cli_out("%40s %16s %13s %13s %13s %13s %20s %18s", "---------",</div><div class='add'>+                "-----------", "-----------", "-----------", "-----------",</div><div class='add'>+                "-----------", "------------", "--------------");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        /* Reset the variables to prevent carryover of values */</div><div class='add'>+        node_name = NULL;</div><div class='add'>+        files = 0;</div><div class='add'>+        size = 0;</div><div class='add'>+        lookup = 0;</div><div class='add'>+        skipped = 0;</div><div class='add'>+        status_str = NULL;</div><div class='add'>+        elapsed = 0;</div><div class='add'>+        time_left = 0;</div><div class='add'>+</div><div class='add'>+        /* Check if status is NOT_STARTED, and continue early */</div><div class='add'>+        snprintf(key, sizeof(key), "status-%d", i);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_int32(dict, key, (int32_t *)&amp;status_rcd);</div><div class='add'>+        if (ret == -ENOENT) {</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "count %d %d", count, i);</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get status");</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "node down and has failed"</div><div class='add'>+                   " to set dict");</div><div class='add'>+            down = _gf_true;</div><div class='add'>+            continue;</div><div class='add'>+            /* skip this node if value not available*/</div><div class='add'>+        } else if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "count %d %d", count, i);</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get status");</div><div class='add'>+            continue;</div><div class='add'>+            /* skip this node if value not available*/</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (GF_DEFRAG_STATUS_STARTED == status_rcd)</div><div class='add'>+            show_estimates = _gf_true;</div><div class='add'>+</div><div class='add'>+        snprintf(key, 256, "node-name-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;node_name);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get node-name");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "files-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;files);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get file count");</div><div class='add'>+        snprintf(key, sizeof(key), "files-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;files);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get file count");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "size-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;size);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get size of xfer");</div><div class='add'>+        snprintf(key, sizeof(key), "size-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;size);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get size of xfer");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "lookups-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;lookup);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get lookedup file count");</div><div class='add'>+        snprintf(key, sizeof(key), "lookups-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;lookup);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get lookedup file count");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "failures-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;failures);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get failures count");</div><div class='add'>+        snprintf(key, sizeof(key), "failures-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;failures);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get failures count");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "skipped-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;skipped);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get skipped count");</div><div class='add'>+        snprintf(key, sizeof(key), "skipped-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;skipped);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get skipped count");</div><div class='ctx'> </div><div class='del'>-                /* For remove-brick include skipped count into failure count*/</div><div class='del'>-                if (task_type != GF_TASK_TYPE_REBALANCE) {</div><div class='del'>-                        failures += skipped;</div><div class='del'>-                        skipped = 0;</div><div class='del'>-                }</div><div class='add'>+        /* For remove-brick include skipped count into failure count*/</div><div class='add'>+        if (task_type != GF_TASK_TYPE_REBALANCE) {</div><div class='add'>+            failures += skipped;</div><div class='add'>+            skipped = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "run-time-%d", i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;elapsed);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get run-time");</div><div class='add'>+        snprintf(key, sizeof(key), "run-time-%d", i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;elapsed);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get run-time");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "time-left-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;time_left);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get time left");</div><div class='add'>+        snprintf(key, sizeof(key), "time-left-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;time_left);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get time left");</div><div class='ctx'> </div><div class='del'>-                if (elapsed &gt; max_elapsed)</div><div class='del'>-                        max_elapsed = elapsed;</div><div class='add'>+        if (elapsed &gt; max_elapsed)</div><div class='add'>+            max_elapsed = elapsed;</div><div class='ctx'> </div><div class='del'>-                if (time_left &gt; max_time)</div><div class='del'>-                        max_time = time_left;</div><div class='add'>+        if (time_left &gt; max_time)</div><div class='add'>+            max_time = time_left;</div><div class='ctx'> </div><div class='del'>-                /* Check for array bound */</div><div class='del'>-                if (status_rcd &gt;= GF_DEFRAG_STATUS_MAX)</div><div class='del'>-                        status_rcd = GF_DEFRAG_STATUS_MAX;</div><div class='add'>+        /* Check for array bound */</div><div class='add'>+        if (status_rcd &gt;= GF_DEFRAG_STATUS_MAX)</div><div class='add'>+            status_rcd = GF_DEFRAG_STATUS_MAX;</div><div class='ctx'> </div><div class='del'>-                status_str = cli_vol_task_status_str[status_rcd];</div><div class='del'>-                size_str = gf_uint64_2human_readable(size);</div><div class='del'>-                hrs = elapsed / 3600;</div><div class='del'>-                min = ((uint64_t) elapsed % 3600) / 60;</div><div class='del'>-                sec = ((uint64_t) elapsed % 3600) % 60;</div><div class='add'>+        status_str = cli_vol_task_status_str[status_rcd];</div><div class='add'>+        size_str = gf_uint64_2human_readable(size);</div><div class='add'>+        hrs = elapsed / 3600;</div><div class='add'>+        min = ((uint64_t)elapsed % 3600) / 60;</div><div class='add'>+        sec = ((uint64_t)elapsed % 3600) % 60;</div><div class='ctx'> </div><div class='del'>-                if (fix_layout) {</div><div class='del'>-                        cli_out ("%35s %50s %8d:%d:%d", node_name, status_str,</div><div class='del'>-                                 hrs, min, sec);</div><div class='del'>-                } else {</div><div class='del'>-                        if (size_str) {</div><div class='del'>-                                cli_out ("%40s %16"PRIu64 " %13s" " %13"PRIu64</div><div class='del'>-                                          " %13" PRIu64" %13"PRIu64 " %20s "</div><div class='del'>-                                         "%8d:%02d:%02d", node_name, files,</div><div class='del'>-                                         size_str, lookup, failures, skipped,</div><div class='del'>-                                         status_str, hrs, min, sec);</div><div class='del'>-                        } else {</div><div class='del'>-                                cli_out ("%40s %16"PRIu64 " %13"PRIu64 " %13"</div><div class='del'>-                                         PRIu64 " %13"PRIu64" %13"PRIu64 " %20s"</div><div class='del'>-                                         " %8d:%02d:%02d", node_name, files,</div><div class='del'>-                                         size, lookup, failures, skipped,</div><div class='del'>-                                         status_str, hrs, min, sec);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                GF_FREE(size_str);</div><div class='del'>-        }</div><div class='del'>-        if (is_tier &amp;&amp; down)</div><div class='del'>-                cli_out ("WARNING: glusterd might be down on one or more nodes."</div><div class='del'>-                         " Please check the nodes that are down using \'gluster"</div><div class='del'>-                         " peer status\' and start the glusterd on those nodes,"</div><div class='del'>-                         " else tier detach commit might fail!");</div><div class='del'>-</div><div class='del'>-        /* Max time will be non-zero if rebalance is still running */</div><div class='del'>-        if (max_time) {</div><div class='del'>-                hrs = max_time / 3600;</div><div class='del'>-                min = (max_time % 3600) / 60;</div><div class='del'>-                sec = (max_time % 3600) % 60;</div><div class='del'>-</div><div class='del'>-                if (hrs &lt; REBAL_ESTIMATE_SEC_UPPER_LIMIT) {</div><div class='del'>-                        cli_out ("Estimated time left for rebalance to "</div><div class='del'>-                                 "complete : %8d:%02d:%02d", hrs, min, sec);</div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("Estimated time left for rebalance to "</div><div class='del'>-                                 "complete : &gt; 2 months. Please try again "</div><div class='del'>-                                 "later.");</div><div class='del'>-                }</div><div class='add'>+        if (fix_layout) {</div><div class='add'>+            cli_out("%35s %50s %8d:%d:%d", node_name, status_str, hrs, min,</div><div class='add'>+                    sec);</div><div class='ctx'>         } else {</div><div class='del'>-                /* Rebalance will return 0 if it could not calculate the</div><div class='del'>-                 * estimates or if it is complete.</div><div class='del'>-                 */</div><div class='del'>-                if (!show_estimates) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (max_elapsed &lt;= REBAL_ESTIMATE_START_TIME) {</div><div class='del'>-                        cli_out ("The estimated time for rebalance to complete "</div><div class='del'>-                                 "will be unavailable for the first 10 "</div><div class='del'>-                                 "minutes.");</div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("Rebalance estimated time unavailable. Please "</div><div class='del'>-                                 "try again later.");</div><div class='del'>-                }</div><div class='add'>+            if (size_str) {</div><div class='add'>+                cli_out("%40s %16" PRIu64</div><div class='add'>+                        " %13s"</div><div class='add'>+                        " %13" PRIu64 " %13" PRIu64 " %13" PRIu64</div><div class='add'>+                        " %20s "</div><div class='add'>+                        "%8d:%02d:%02d",</div><div class='add'>+                        node_name, files, size_str, lookup, failures, skipped,</div><div class='add'>+                        status_str, hrs, min, sec);</div><div class='add'>+            } else {</div><div class='add'>+                cli_out("%40s %16" PRIu64 " %13" PRIu64 " %13" PRIu64</div><div class='add'>+                        " %13" PRIu64 " %13" PRIu64</div><div class='add'>+                        " %20s"</div><div class='add'>+                        " %8d:%02d:%02d",</div><div class='add'>+                        node_name, files, size, lookup, failures, skipped,</div><div class='add'>+                        status_str, hrs, min, sec);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        GF_FREE(size_str);</div><div class='add'>+    }</div><div class='add'>+    if (is_tier &amp;&amp; down)</div><div class='add'>+        cli_out(</div><div class='add'>+            "WARNING: glusterd might be down on one or more nodes."</div><div class='add'>+            " Please check the nodes that are down using \'gluster"</div><div class='add'>+            " peer status\' and start the glusterd on those nodes,"</div><div class='add'>+            " else tier detach commit might fail!");</div><div class='add'>+</div><div class='add'>+    /* Max time will be non-zero if rebalance is still running */</div><div class='add'>+    if (max_time) {</div><div class='add'>+        hrs = max_time / 3600;</div><div class='add'>+        min = (max_time % 3600) / 60;</div><div class='add'>+        sec = (max_time % 3600) % 60;</div><div class='add'>+</div><div class='add'>+        if (hrs &lt; REBAL_ESTIMATE_SEC_UPPER_LIMIT) {</div><div class='add'>+            cli_out(</div><div class='add'>+                "Estimated time left for rebalance to "</div><div class='add'>+                "complete : %8d:%02d:%02d",</div><div class='add'>+                hrs, min, sec);</div><div class='add'>+        } else {</div><div class='add'>+            cli_out(</div><div class='add'>+                "Estimated time left for rebalance to "</div><div class='add'>+                "complete : &gt; 2 months. Please try again "</div><div class='add'>+                "later.");</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        /* Rebalance will return 0 if it could not calculate the</div><div class='add'>+         * estimates or if it is complete.</div><div class='add'>+         */</div><div class='add'>+        if (!show_estimates) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (max_elapsed &lt;= REBAL_ESTIMATE_START_TIME) {</div><div class='add'>+            cli_out(</div><div class='add'>+                "The estimated time for rebalance to complete "</div><div class='add'>+                "will be unavailable for the first 10 "</div><div class='add'>+                "minutes.");</div><div class='add'>+        } else {</div><div class='add'>+            cli_out(</div><div class='add'>+                "Rebalance estimated time unavailable. Please "</div><div class='add'>+                "try again later.");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_print_tier_status (dict_t *dict, enum gf_task_types task_type)</div><div class='del'>-{</div><div class='del'>-        int                ret          = -1;</div><div class='del'>-        int                count        = 0;</div><div class='del'>-        int                i            = 1;</div><div class='del'>-        uint64_t           promoted     = 0;</div><div class='del'>-        uint64_t           demoted      = 0;</div><div class='del'>-        char               key[256]     = {0,};</div><div class='del'>-        char               *node_name   = NULL;</div><div class='del'>-        gf_defrag_status_t status_rcd   = GF_DEFRAG_STATUS_NOT_STARTED;</div><div class='del'>-        char               *status_str  = NULL;</div><div class='del'>-        gf_boolean_t       down         = _gf_false;</div><div class='del'>-        double             elapsed      = 0;</div><div class='del'>-        int                hrs          = 0;</div><div class='del'>-        int                min          = 0;</div><div class='del'>-        int                sec          = 0;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "count not set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cli_out ("%-20s %-20s %-20s %-20s %-20s", "Node", "Promoted files",</div><div class='del'>-                 "Demoted files", "Status", "run time in h:m:s");</div><div class='del'>-        cli_out ("%-20s %-20s %-20s %-20s %-20s", "---------", "---------",</div><div class='del'>-                 "---------", "---------", "---------");</div><div class='del'>-</div><div class='del'>-        for (i = 1; i &lt;= count; i++) {</div><div class='del'>-                /* Reset the variables to prevent carryover of values */</div><div class='del'>-                node_name = NULL;</div><div class='del'>-                promoted = 0;</div><div class='del'>-                demoted = 0;</div><div class='del'>-</div><div class='del'>-                /* Check if status is NOT_STARTED, and continue early */</div><div class='del'>-                snprintf (key, sizeof (key), "status-%d", i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_int32 (dict, key, (int32_t *)&amp;status_rcd);</div><div class='del'>-                if (ret == -ENOENT) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "count: %d, %d,"</div><div class='del'>-                                "failed to get status", count, i);</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "node down and has failed"</div><div class='del'>-                                " to set dict");</div><div class='del'>-                        down = _gf_true;</div><div class='del'>-                        continue;</div><div class='del'>-                        /*skipping this node as value unavailable*/</div><div class='del'>-                } else if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "count: %d, %d,"</div><div class='del'>-                                "failed to get status", count, i);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "node-name-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;node_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get node-name");</div><div class='add'>+gf_cli_print_tier_status(dict_t *dict, enum gf_task_types task_type)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 1;</div><div class='add'>+    uint64_t promoted = 0;</div><div class='add'>+    uint64_t demoted = 0;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *node_name = NULL;</div><div class='add'>+    gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED;</div><div class='add'>+    char *status_str = NULL;</div><div class='add'>+    gf_boolean_t down = _gf_false;</div><div class='add'>+    double elapsed = 0;</div><div class='add'>+    int hrs = 0;</div><div class='add'>+    int min = 0;</div><div class='add'>+    int sec = 0;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "count not set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cli_out("%-20s %-20s %-20s %-20s %-20s", "Node", "Promoted files",</div><div class='add'>+            "Demoted files", "Status", "run time in h:m:s");</div><div class='add'>+    cli_out("%-20s %-20s %-20s %-20s %-20s", "---------", "---------",</div><div class='add'>+            "---------", "---------", "---------");</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        /* Reset the variables to prevent carryover of values */</div><div class='add'>+        node_name = NULL;</div><div class='add'>+        promoted = 0;</div><div class='add'>+        demoted = 0;</div><div class='add'>+</div><div class='add'>+        /* Check if status is NOT_STARTED, and continue early */</div><div class='add'>+        snprintf(key, sizeof(key), "status-%d", i);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_int32(dict, key, (int32_t *)&amp;status_rcd);</div><div class='add'>+        if (ret == -ENOENT) {</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "count: %d, %d,"</div><div class='add'>+                   "failed to get status",</div><div class='add'>+                   count, i);</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "node down and has failed"</div><div class='add'>+                   " to set dict");</div><div class='add'>+            down = _gf_true;</div><div class='add'>+            continue;</div><div class='add'>+            /*skipping this node as value unavailable*/</div><div class='add'>+        } else if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "count: %d, %d,"</div><div class='add'>+                   "failed to get status",</div><div class='add'>+                   count, i);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "node-name-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;node_name);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get node-name");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "promoted-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;promoted);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get promoted count");</div><div class='add'>+        snprintf(key, sizeof(key), "promoted-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;promoted);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get promoted count");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "demoted-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;demoted);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE,</div><div class='del'>-                                "failed to get demoted count");</div><div class='add'>+        snprintf(key, sizeof(key), "demoted-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;demoted);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get demoted count");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "run-time-%d", i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;elapsed);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get run-time");</div><div class='add'>+        snprintf(key, sizeof(key), "run-time-%d", i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;elapsed);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get run-time");</div><div class='ctx'> </div><div class='del'>-                /* Check for array bound */</div><div class='del'>-                if (status_rcd &gt;= GF_DEFRAG_STATUS_MAX)</div><div class='del'>-                        status_rcd = GF_DEFRAG_STATUS_MAX;</div><div class='add'>+        /* Check for array bound */</div><div class='add'>+        if (status_rcd &gt;= GF_DEFRAG_STATUS_MAX)</div><div class='add'>+            status_rcd = GF_DEFRAG_STATUS_MAX;</div><div class='ctx'> </div><div class='del'>-                hrs = elapsed / 3600;</div><div class='del'>-                min = ((int) elapsed % 3600) / 60;</div><div class='del'>-                sec = ((int) elapsed % 3600) % 60;</div><div class='add'>+        hrs = elapsed / 3600;</div><div class='add'>+        min = ((int)elapsed % 3600) / 60;</div><div class='add'>+        sec = ((int)elapsed % 3600) % 60;</div><div class='ctx'> </div><div class='del'>-                status_str = cli_vol_task_status_str[status_rcd];</div><div class='del'>-                cli_out ("%-20s %-20"PRIu64" %-20"PRIu64" %-20s"</div><div class='del'>-                         " %d:%d:%d", node_name, promoted, demoted,</div><div class='del'>-                         status_str, hrs, min, sec);</div><div class='del'>-        }</div><div class='del'>-        if (down)</div><div class='del'>-                cli_out ("WARNING: glusterd might be down on one or more nodes."</div><div class='del'>-                         " Please check the nodes that are down using \'gluster"</div><div class='del'>-                         " peer status\' and start the glusterd on those nodes.");</div><div class='add'>+        status_str = cli_vol_task_status_str[status_rcd];</div><div class='add'>+        cli_out("%-20s %-20" PRIu64 " %-20" PRIu64</div><div class='add'>+                " %-20s"</div><div class='add'>+                " %d:%d:%d",</div><div class='add'>+                node_name, promoted, demoted, status_str, hrs, min, sec);</div><div class='add'>+    }</div><div class='add'>+    if (down)</div><div class='add'>+        cli_out(</div><div class='add'>+            "WARNING: glusterd might be down on one or more nodes."</div><div class='add'>+            " Please check the nodes that are down using \'gluster"</div><div class='add'>+            " peer status\' and start the glusterd on those nodes.");</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_defrag_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp   rsp          = {0,};</div><div class='del'>-        cli_local_t  *local       = NULL;</div><div class='del'>-        char         *volname     = NULL;</div><div class='del'>-        call_frame_t *frame       = NULL;</div><div class='del'>-        int          cmd          = 0;</div><div class='del'>-        int          ret          = -1;</div><div class='del'>-        dict_t       *dict        = NULL;</div><div class='del'>-        char         msg[1024]    = {0,};</div><div class='del'>-        char         *task_id_str = NULL;</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp,</div><div class='del'>-                              (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+gf_cli_defrag_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                         void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int cmd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "Failed to get volname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "rebalance-command", (int32_t *)&amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        dict = dict_new();</div><div class='add'>+</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("glusterd", GF_LOG_ERROR,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "unserialize req-buffer to dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (!((cmd == GF_DEFRAG_CMD_STOP) || (cmd == GF_DEFRAG_CMD_STATUS) ||</div><div class='add'>+          (cmd == GF_DEFRAG_CMD_STATUS_TIER)) &amp;&amp;</div><div class='add'>+        !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+        ret = dict_get_str(dict, GF_REBALANCE_TID_KEY, &amp;task_id_str);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get volname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "rebalance-command",</div><div class='del'>-                              (int32_t *)&amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get command");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                dict  = dict_new ();</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("glusterd", GF_LOG_ERROR,</div><div class='del'>-                                "failed to "</div><div class='del'>-                                "unserialize req-buffer to dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!((cmd == GF_DEFRAG_CMD_STOP) ||</div><div class='del'>-              (cmd == GF_DEFRAG_CMD_STATUS) ||</div><div class='del'>-              (cmd == GF_DEFRAG_CMD_STATUS_TIER)) &amp;&amp;</div><div class='del'>-             !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                ret = dict_get_str (dict, GF_REBALANCE_TID_KEY, &amp;task_id_str);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_WARNING,</div><div class='del'>-                                "failed to get %s from dict",</div><div class='del'>-                                GF_REBALANCE_TID_KEY);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, "")) {</div><div class='del'>-                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-                } else {</div><div class='del'>-                         if (!rsp.op_ret) {</div><div class='del'>-                                /* append errstr in the cli msg for successful</div><div class='del'>-                                 * case since unlock failures can be highlighted</div><div class='del'>-                                 * event though rebalance command was successful</div><div class='del'>-                                 */</div><div class='del'>-                                 if (cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='del'>-                                         snprintf (msg, sizeof (msg), "Tier "</div><div class='del'>-                                                  "start is successful on %s.",</div><div class='del'>-                                                  volname);</div><div class='del'>-                                 } else if (cmd == GF_DEFRAG_CMD_STOP_TIER) {</div><div class='del'>-                                         snprintf (msg, sizeof (msg), "Tier "</div><div class='del'>-                                                  "daemon stopped "</div><div class='del'>-                                                  "on %s.", volname);</div><div class='del'>-                                 } else {</div><div class='del'>-                                         snprintf (msg, sizeof (msg),</div><div class='del'>-                                                  "Rebalance on %s has been "</div><div class='del'>-                                                  "started successfully. Use "</div><div class='del'>-                                                  "rebalance status command to"</div><div class='del'>-                                                  " check status of the "</div><div class='del'>-                                                  "rebalance process.\nID: %s",</div><div class='del'>-                                                  volname, task_id_str);</div><div class='del'>-                                 }</div><div class='del'>-                         } else {</div><div class='del'>-                                snprintf (msg, sizeof (msg),</div><div class='del'>-                                          "Starting rebalance on volume %s has "</div><div class='del'>-                                          "been unsuccessful.", volname);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd == GF_DEFRAG_CMD_STOP) {</div><div class='del'>-                if (rsp.op_ret == -1) {</div><div class='del'>-                        if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                                snprintf (msg, sizeof (msg),</div><div class='del'>-                                          "%s", rsp.op_errstr);</div><div class='del'>-                        else</div><div class='del'>-                                snprintf (msg, sizeof (msg),</div><div class='del'>-                                          "rebalance volume %s stop failed",</div><div class='del'>-                                          volname);</div><div class='del'>-                        goto done;</div><div class='del'>-                } else {</div><div class='del'>-                        /* append errstr in the cli msg for successful case</div><div class='del'>-                         * since unlock failures can be highlighted event though</div><div class='del'>-                         * rebalance command was successful */</div><div class='del'>-                        snprintf (msg, sizeof (msg),</div><div class='del'>-                                  "rebalance process may be in the middle of a "</div><div class='del'>-                                  "file migration.\nThe process will be fully "</div><div class='del'>-                                  "stopped once the migration of the file is "</div><div class='del'>-                                  "complete.\nPlease check rebalance process "</div><div class='del'>-                                  "for completion before doing any further "</div><div class='del'>-                                  "brick related tasks on the volume.\n%s",</div><div class='del'>-                                  rsp.op_errstr);</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_WARNING, "failed to get %s from dict",</div><div class='add'>+                   GF_REBALANCE_TID_KEY);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        if (cmd == GF_DEFRAG_CMD_STATUS || cmd == GF_DEFRAG_CMD_STATUS_TIER) {</div><div class='del'>-                if (rsp.op_ret == -1) {</div><div class='del'>-                        if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                                snprintf (msg, sizeof (msg),</div><div class='del'>-                                          "%s", rsp.op_errstr);</div><div class='del'>-                        else</div><div class='del'>-                                snprintf (msg, sizeof (msg),</div><div class='del'>-                                          "Failed to get the status of "</div><div class='del'>-                                          "rebalance process");</div><div class='del'>-                        goto done;</div><div class='add'>+        if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, "")) {</div><div class='add'>+            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+        } else {</div><div class='add'>+            if (!rsp.op_ret) {</div><div class='add'>+                /* append errstr in the cli msg for successful</div><div class='add'>+                 * case since unlock failures can be highlighted</div><div class='add'>+                 * event though rebalance command was successful</div><div class='add'>+                 */</div><div class='add'>+                if (cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='add'>+                    snprintf(msg, sizeof(msg),</div><div class='add'>+                             "Tier "</div><div class='add'>+                             "start is successful on %s.",</div><div class='add'>+                             volname);</div><div class='add'>+                } else if (cmd == GF_DEFRAG_CMD_STOP_TIER) {</div><div class='add'>+                    snprintf(msg, sizeof(msg),</div><div class='add'>+                             "Tier "</div><div class='add'>+                             "daemon stopped "</div><div class='add'>+                             "on %s.",</div><div class='add'>+                             volname);</div><div class='ctx'>                 } else {</div><div class='del'>-                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-                }</div><div class='add'>+                    snprintf(msg, sizeof(msg),</div><div class='add'>+                             "Rebalance on %s has been "</div><div class='add'>+                             "started successfully. Use "</div><div class='add'>+                             "rebalance status command to"</div><div class='add'>+                             " check status of the "</div><div class='add'>+                             "rebalance process.\nID: %s",</div><div class='add'>+                             volname, task_id_str);</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                snprintf(msg, sizeof(msg),</div><div class='add'>+                         "Starting rebalance on volume %s has "</div><div class='add'>+                         "been unsuccessful.",</div><div class='add'>+                         volname);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd == GF_DEFRAG_CMD_STOP) {</div><div class='add'>+        if (rsp.op_ret == -1) {</div><div class='add'>+            if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+                snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+            else</div><div class='add'>+                snprintf(msg, sizeof(msg), "rebalance volume %s stop failed",</div><div class='add'>+                         volname);</div><div class='add'>+            goto done;</div><div class='add'>+        } else {</div><div class='add'>+            /* append errstr in the cli msg for successful case</div><div class='add'>+             * since unlock failures can be highlighted event though</div><div class='add'>+             * rebalance command was successful */</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "rebalance process may be in the middle of a "</div><div class='add'>+                     "file migration.\nThe process will be fully "</div><div class='add'>+                     "stopped once the migration of the file is "</div><div class='add'>+                     "complete.\nPlease check rebalance process "</div><div class='add'>+                     "for completion before doing any further "</div><div class='add'>+                     "brick related tasks on the volume.\n%s",</div><div class='add'>+                     rsp.op_errstr);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (cmd == GF_DEFRAG_CMD_STATUS || cmd == GF_DEFRAG_CMD_STATUS_TIER) {</div><div class='add'>+        if (rsp.op_ret == -1) {</div><div class='add'>+            if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+                snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+            else</div><div class='add'>+                snprintf(msg, sizeof(msg),</div><div class='add'>+                         "Failed to get the status of "</div><div class='add'>+                         "rebalance process");</div><div class='add'>+            goto done;</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_rebalance (cmd, dict, rsp.op_ret,</div><div class='del'>-                                                    rsp.op_errno,</div><div class='del'>-                                                    rsp.op_errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_rebalance(cmd, dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                           rsp.op_errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd == GF_DEFRAG_CMD_STATUS_TIER)</div><div class='del'>-                ret = gf_cli_print_tier_status (dict, GF_TASK_TYPE_REBALANCE);</div><div class='del'>-        else if (cmd == GF_DEFRAG_CMD_DETACH_STATUS)</div><div class='del'>-                ret = gf_cli_print_rebalance_status (dict,</div><div class='del'>-                                                     GF_TASK_TYPE_REBALANCE,</div><div class='del'>-                                                     _gf_true);</div><div class='del'>-        else</div><div class='del'>-                ret = gf_cli_print_rebalance_status (dict,</div><div class='del'>-                                                     GF_TASK_TYPE_REBALANCE,</div><div class='del'>-                                                     _gf_false);</div><div class='add'>+    if (cmd == GF_DEFRAG_CMD_STATUS_TIER)</div><div class='add'>+        ret = gf_cli_print_tier_status(dict, GF_TASK_TYPE_REBALANCE);</div><div class='add'>+    else if (cmd == GF_DEFRAG_CMD_DETACH_STATUS)</div><div class='add'>+        ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REBALANCE,</div><div class='add'>+                                            _gf_true);</div><div class='add'>+    else</div><div class='add'>+        ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REBALANCE,</div><div class='add'>+                                            _gf_false);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Failed to print rebalance status");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to print rebalance status");</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                cli_xml_output_str ("volRebalance", msg,</div><div class='del'>-                                    rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                    rsp.op_errstr);</div><div class='del'>-        else {</div><div class='del'>-                if (rsp.op_ret)</div><div class='del'>-</div><div class='del'>-                        if (cmd == GF_DEFRAG_CMD_START_TIER || cmd ==</div><div class='del'>-                            GF_DEFRAG_CMD_STATUS_TIER) {</div><div class='del'>-                                cli_err ("Tiering Migration Functionality: %s:"</div><div class='del'>-                                         " failed%s%s", volname,</div><div class='del'>-                                         strlen (msg) ? ": " : "", msg);</div><div class='del'>-                        } else</div><div class='del'>-                                cli_err ("volume rebalance: %s: failed%s%s",</div><div class='del'>-                                         volname, strlen (msg) ? ": " : "",</div><div class='del'>-                                         msg);</div><div class='del'>-                else</div><div class='del'>-                        if (cmd == GF_DEFRAG_CMD_START_TIER || cmd ==</div><div class='del'>-                            GF_DEFRAG_CMD_STATUS_TIER) {</div><div class='del'>-                                cli_out ("Tiering Migration Functionality: %s:"</div><div class='del'>-                                         " success%s%s", volname,</div><div class='del'>-                                         strlen (msg) ? ": " : "", msg);</div><div class='del'>-                        } else</div><div class='del'>-                                cli_out ("volume rebalance: %s: success%s%s",</div><div class='del'>-                                         volname, strlen (msg) ? ": " : "",</div><div class='del'>-                                         msg);</div><div class='del'>-        }</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+        cli_xml_output_str("volRebalance", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                           rsp.op_errstr);</div><div class='add'>+    else {</div><div class='add'>+        if (rsp.op_ret)</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        free (rsp.op_errstr); //malloced by xdr</div><div class='del'>-        free (rsp.dict.dict_val); //malloced by xdr</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+            if (cmd == GF_DEFRAG_CMD_START_TIER ||</div><div class='add'>+                cmd == GF_DEFRAG_CMD_STATUS_TIER) {</div><div class='add'>+                cli_err(</div><div class='add'>+                    "Tiering Migration Functionality: %s:"</div><div class='add'>+                    " failed%s%s",</div><div class='add'>+                    volname, strlen(msg) ? ": " : "", msg);</div><div class='add'>+            } else</div><div class='add'>+                cli_err("volume rebalance: %s: failed%s%s", volname,</div><div class='add'>+                        strlen(msg) ? ": " : "", msg);</div><div class='add'>+        else if (cmd == GF_DEFRAG_CMD_START_TIER ||</div><div class='add'>+                 cmd == GF_DEFRAG_CMD_STATUS_TIER) {</div><div class='add'>+            cli_out(</div><div class='add'>+                "Tiering Migration Functionality: %s:"</div><div class='add'>+                " success%s%s",</div><div class='add'>+                volname, strlen(msg) ? ": " : "", msg);</div><div class='add'>+        } else</div><div class='add'>+            cli_out("volume rebalance: %s: success%s%s", volname,</div><div class='add'>+                    strlen(msg) ? ": " : "", msg);</div><div class='add'>+    }</div><div class='add'>+    ret = rsp.op_ret;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    free(rsp.op_errstr);      // malloced by xdr</div><div class='add'>+    free(rsp.dict.dict_val);  // malloced by xdr</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_rename_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp              rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        char                    msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+gf_cli_rename_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                         void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to probe");</div><div class='add'>+    snprintf(msg, sizeof(msg), "Rename volume %s",</div><div class='add'>+             (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volRename", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to probe");</div><div class='del'>-        snprintf (msg, sizeof (msg), "Rename volume %s",</div><div class='del'>-                  (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume rename: failed");</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume rename: success");</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volRename", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume rename: failed");</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume rename: success");</div><div class='del'>-</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_reset_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli_reset_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                        void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp           rsp   = {0,};</div><div class='del'>-        int                  ret   = -1;</div><div class='del'>-        char                 msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to reset");</div><div class='del'>-</div><div class='del'>-        if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "reset volume %s",</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volReset", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to reset");</div><div class='add'>+</div><div class='add'>+    if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "reset volume %s",</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volReset", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume reset: failed: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume reset: success: %s", msg);</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume reset: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume reset: success: %s", msg);</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-is_server_debug_xlator (void *myframe)</div><div class='del'>-{</div><div class='del'>-        call_frame_t         *frame        = NULL;</div><div class='del'>-        cli_local_t          *local        = NULL;</div><div class='del'>-        char                 **words       = NULL;</div><div class='del'>-        char                 *key          = NULL;</div><div class='del'>-        char                 *value        = NULL;</div><div class='del'>-        char                 *debug_xlator = NULL;</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        words = (char **)local-&gt;words;</div><div class='del'>-</div><div class='del'>-        while (*words != NULL) {</div><div class='del'>-                if (strstr (*words, "trace") == NULL &amp;&amp;</div><div class='del'>-                    strstr (*words, "error-gen") == NULL) {</div><div class='del'>-                        words++;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                key = *words;</div><div class='add'>+is_server_debug_xlator(void *myframe)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char **words = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char *debug_xlator = NULL;</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    words = (char **)local-&gt;words;</div><div class='add'>+</div><div class='add'>+    while (*words != NULL) {</div><div class='add'>+        if (strstr(*words, "trace") == NULL &amp;&amp;</div><div class='add'>+            strstr(*words, "error-gen") == NULL) {</div><div class='add'>+            words++;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        key = *words;</div><div class='add'>+        words++;</div><div class='add'>+        value = *words;</div><div class='add'>+        if (value == NULL)</div><div class='add'>+            break;</div><div class='add'>+        if (strstr(value, "client")) {</div><div class='add'>+            words++;</div><div class='add'>+            continue;</div><div class='add'>+        } else {</div><div class='add'>+            if (!(strstr(value, "posix") || strstr(value, "acl") ||</div><div class='add'>+                  strstr(value, "locks") || strstr(value, "io-threads") ||</div><div class='add'>+                  strstr(value, "marker") || strstr(value, "index"))) {</div><div class='ctx'>                 words++;</div><div class='del'>-                value = *words;</div><div class='del'>-                if (value == NULL)</div><div class='del'>-                        break;</div><div class='del'>-                if (strstr (value, "client")) {</div><div class='del'>-                        words++;</div><div class='del'>-                        continue;</div><div class='del'>-                } else {</div><div class='del'>-                        if (!(strstr (value, "posix") || strstr (value, "acl")</div><div class='del'>-                              || strstr (value, "locks") ||</div><div class='del'>-                              strstr (value, "io-threads") ||</div><div class='del'>-                              strstr (value, "marker") ||</div><div class='del'>-                              strstr (value, "index"))) {</div><div class='del'>-                                words++;</div><div class='del'>-                                continue;</div><div class='del'>-                        } else {</div><div class='del'>-                                debug_xlator = gf_strdup (key);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                continue;</div><div class='add'>+            } else {</div><div class='add'>+                debug_xlator = gf_strdup(key);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return debug_xlator;</div><div class='add'>+    return debug_xlator;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_set_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp           rsp   = {0,};</div><div class='del'>-        int                  ret   = -1;</div><div class='del'>-        dict_t               *dict = NULL;</div><div class='del'>-        char                 *help_str = NULL;</div><div class='del'>-        char                 msg[1024] = {0,};</div><div class='del'>-        char                 *debug_xlator = NULL;</div><div class='del'>-        char                 tmp_str[512] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to set");</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "failed to unserialize volume set respone dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* For brick processes graph change does not happen on the fly.</div><div class='del'>-         * The process has to be restarted. So this is a check from the</div><div class='del'>-         * volume set option such that if debug xlators such as trace/errorgen</div><div class='del'>-         * are provided in the set command, warn the user.</div><div class='del'>-         */</div><div class='del'>-        debug_xlator = is_server_debug_xlator (myframe);</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (dict, "help-str", &amp;help_str) &amp;&amp; !msg[0])</div><div class='del'>-                snprintf (msg, sizeof (msg), "Set volume %s",</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-        if (rsp.op_ret == 0 &amp;&amp; debug_xlator) {</div><div class='del'>-                snprintf (tmp_str, sizeof (tmp_str), "\n%s translator has been "</div><div class='del'>-                          "added to the server volume file. Please restart the"</div><div class='del'>-                          " volume for enabling the translator", debug_xlator);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML) &amp;&amp; (help_str == NULL)) {</div><div class='del'>-                ret = cli_xml_output_str ("volSet", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_set_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *help_str = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *debug_xlator = NULL;</div><div class='add'>+    char tmp_str[512] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to set");</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "failed to unserialize volume set respone dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* For brick processes graph change does not happen on the fly.</div><div class='add'>+     * The process has to be restarted. So this is a check from the</div><div class='add'>+     * volume set option such that if debug xlators such as trace/errorgen</div><div class='add'>+     * are provided in the set command, warn the user.</div><div class='add'>+     */</div><div class='add'>+    debug_xlator = is_server_debug_xlator(myframe);</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(dict, "help-str", &amp;help_str) &amp;&amp; !msg[0])</div><div class='add'>+        snprintf(msg, sizeof(msg), "Set volume %s",</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+    if (rsp.op_ret == 0 &amp;&amp; debug_xlator) {</div><div class='add'>+        snprintf(tmp_str, sizeof(tmp_str),</div><div class='add'>+                 "\n%s translator has been "</div><div class='add'>+                 "added to the server volume file. Please restart the"</div><div class='add'>+                 " volume for enabling the translator",</div><div class='add'>+                 debug_xlator);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML) &amp;&amp; (help_str == NULL)) {</div><div class='add'>+        ret = cli_xml_output_str("volSet", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        cli_err ("volume set: failed: %s", rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        cli_err ("volume set: failed");</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            cli_err("volume set: failed: %s", rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            cli_err("volume set: failed");</div><div class='add'>+    } else {</div><div class='add'>+        if (help_str == NULL) {</div><div class='add'>+            if (debug_xlator == NULL)</div><div class='add'>+                cli_out("volume set: success");</div><div class='add'>+            else</div><div class='add'>+                cli_out("volume set: success%s", tmp_str);</div><div class='ctx'>         } else {</div><div class='del'>-                if (help_str == NULL) {</div><div class='del'>-                        if (debug_xlator == NULL)</div><div class='del'>-                                cli_out ("volume set: success");</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("volume set: success%s", tmp_str);</div><div class='del'>-                }else {</div><div class='del'>-                        cli_out ("%s", help_str);</div><div class='del'>-                }</div><div class='add'>+            cli_out("%s", help_str);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        GF_FREE (debug_xlator);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    GF_FREE(debug_xlator);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_add_tier_brick_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                           int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                  rsp   = {0,};</div><div class='del'>-        int                         ret   = -1;</div><div class='del'>-        char                        msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", myframe, out);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to attach tier");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "Attach tier %s",</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volAttachTier", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_add_tier_brick_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                          void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", myframe, out);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to attach tier");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "Attach tier %s",</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volAttachTier", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume attach-tier: failed: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume attach-tier: success");</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume attach-tier: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume attach-tier: success");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_attach_tier_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                  rsp   = {0,};</div><div class='del'>-        int                         ret   = -1;</div><div class='del'>-        char                        msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", myframe, out);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to attach tier");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "Attach tier %s",</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volAttachTier", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_attach_tier_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", myframe, out);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to attach tier");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "Attach tier %s",</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volAttachTier", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume attach-tier: failed: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume attach-tier: success");</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume attach-tier: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume attach-tier: success");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_remove_tier_brick_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        gf_cli_rsp                      rsp   = {0,};</div><div class='del'>-        int                             ret   = -1;</div><div class='del'>-        char                            msg[1024] = {0,};</div><div class='del'>-        char                           *cmd_str = "unknown";</div><div class='del'>-        cli_local_t                    *local = NULL;</div><div class='del'>-        call_frame_t                   *frame = NULL;</div><div class='del'>-        char                           *task_id_str = NULL;</div><div class='del'>-        dict_t                         *rsp_dict = NULL;</div><div class='del'>-        int32_t                         command = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "command", &amp;command);</div><div class='add'>+gf_cli_remove_tier_brick_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                             void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *cmd_str = "unknown";</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "command", &amp;command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "failed to get command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        rsp_dict = dict_new();</div><div class='add'>+        if (!rsp_dict) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;rsp_dict);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                 gf_log ("", GF_LOG_ERROR, "failed to get command");</div><div class='del'>-                 goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to unserialize rsp_dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                rsp_dict = dict_new ();</div><div class='del'>-                if (!rsp_dict) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='del'>-                                        &amp;rsp_dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to unserialize rsp_dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (command) {</div><div class='add'>+    switch (command) {</div><div class='ctx'>         case GF_DEFRAG_CMD_DETACH_START:</div><div class='del'>-                cmd_str = "start";</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (rsp_dict, GF_REMOVE_BRICK_TID_KEY,</div><div class='del'>-                                    &amp;task_id_str);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "remove-brick-id is not present in dict");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "start";</div><div class='add'>+</div><div class='add'>+            ret = dict_get_str(rsp_dict, GF_REMOVE_BRICK_TID_KEY, &amp;task_id_str);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "remove-brick-id is not present in dict");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_CMD_DETACH_COMMIT:</div><div class='del'>-                cmd_str = "commit";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "commit";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_CMD_DETACH_COMMIT_FORCE:</div><div class='del'>-                cmd_str = "commit force";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "commit force";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_CMD_DETACH_STOP:</div><div class='del'>-                cmd_str = "stop";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "stop";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_CMD_DETACH_STATUS:</div><div class='del'>-                cmd_str = "status";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "status";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                cmd_str = "unknown";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            cmd_str = "unknown";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to detach tier");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to detach tier");</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "Detach tier %s %s", cmd_str,</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "Detach tier %s %s", cmd_str,</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_remove_brick_detach_tier (</div><div class='del'>-                                _gf_true, rsp_dict,</div><div class='del'>-                                rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                msg, "volDetachTier");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_remove_brick_detach_tier(</div><div class='add'>+            _gf_true, rsp_dict, rsp.op_ret, rsp.op_errno, msg, "volDetachTier");</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                                snprintf (msg, sizeof (msg), "volume tier "</div><div class='del'>-                                          "detach %s: failed: %s", cmd_str,</div><div class='del'>-                                          rsp.op_errstr);</div><div class='del'>-                        else</div><div class='del'>-                                snprintf (msg, sizeof (msg), "volume tier "</div><div class='del'>-                                          "detach %s: failed", cmd_str);</div><div class='del'>-</div><div class='del'>-                        cli_err ("%s", msg);</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("volume detach tier %s: success", cmd_str);</div><div class='del'>-                        if (GF_DEFRAG_CMD_DETACH_START == command &amp;&amp;</div><div class='del'>-                            task_id_str != NULL)</div><div class='del'>-                                cli_out ("ID: %s", task_id_str);</div><div class='del'>-                        if (GF_DEFRAG_CMD_DETACH_COMMIT == command)</div><div class='del'>-                                cli_out ("Check the detached bricks to ensure "</div><div class='del'>-                                         "all files are migrated.\nIf files "</div><div class='del'>-                                         "with data are found on the brick "</div><div class='del'>-                                         "path, copy them via a gluster mount "</div><div class='del'>-                                         "point before re-purposing the "</div><div class='del'>-                                         "removed brick. ");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (command == GF_DEFRAG_CMD_DETACH_STOP ||</div><div class='del'>-            command == GF_DEFRAG_CMD_DETACH_STATUS)</div><div class='del'>-                ret = gf_cli_print_rebalance_status (rsp_dict,</div><div class='del'>-                                GF_TASK_TYPE_REMOVE_BRICK, _gf_true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to print remove-brick "</div><div class='del'>-                                "rebalance status");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((command == GF_DEFRAG_CMD_DETACH_STOP) &amp;&amp; (rsp.op_ret == 0)) {</div><div class='del'>-                cli_out ("'detach tier' process may be in the middle of a "</div><div class='del'>-                         "file migration.\nThe process will be fully stopped "</div><div class='del'>-                         "once the migration of the file is complete.\nPlease "</div><div class='del'>-                         "check detach tier process for completion before "</div><div class='del'>-                         "doing any further brick related tasks on the "</div><div class='del'>-                         "volume.");</div><div class='del'>-        }</div><div class='del'>-        ret = rsp.op_ret;</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        if (rsp.op_ret) {</div><div class='add'>+            if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+                snprintf(msg, sizeof(msg),</div><div class='add'>+                         "volume tier "</div><div class='add'>+                         "detach %s: failed: %s",</div><div class='add'>+                         cmd_str, rsp.op_errstr);</div><div class='add'>+            else</div><div class='add'>+                snprintf(msg, sizeof(msg),</div><div class='add'>+                         "volume tier "</div><div class='add'>+                         "detach %s: failed",</div><div class='add'>+                         cmd_str);</div><div class='add'>+</div><div class='add'>+            cli_err("%s", msg);</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+        } else {</div><div class='add'>+            cli_out("volume detach tier %s: success", cmd_str);</div><div class='add'>+            if (GF_DEFRAG_CMD_DETACH_START == command &amp;&amp; task_id_str != NULL)</div><div class='add'>+                cli_out("ID: %s", task_id_str);</div><div class='add'>+            if (GF_DEFRAG_CMD_DETACH_COMMIT == command)</div><div class='add'>+                cli_out(</div><div class='add'>+                    "Check the detached bricks to ensure "</div><div class='add'>+                    "all files are migrated.\nIf files "</div><div class='add'>+                    "with data are found on the brick "</div><div class='add'>+                    "path, copy them via a gluster mount "</div><div class='add'>+                    "point before re-purposing the "</div><div class='add'>+                    "removed brick. ");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (command == GF_DEFRAG_CMD_DETACH_STOP ||</div><div class='add'>+        command == GF_DEFRAG_CMD_DETACH_STATUS)</div><div class='add'>+        ret = gf_cli_print_rebalance_status(rsp_dict, GF_TASK_TYPE_REMOVE_BRICK,</div><div class='add'>+                                            _gf_true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to print remove-brick "</div><div class='add'>+               "rebalance status");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((command == GF_DEFRAG_CMD_DETACH_STOP) &amp;&amp; (rsp.op_ret == 0)) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "'detach tier' process may be in the middle of a "</div><div class='add'>+            "file migration.\nThe process will be fully stopped "</div><div class='add'>+            "once the migration of the file is complete.\nPlease "</div><div class='add'>+            "check detach tier process for completion before "</div><div class='add'>+            "doing any further brick related tasks on the "</div><div class='add'>+            "volume.");</div><div class='add'>+    }</div><div class='add'>+    ret = rsp.op_ret;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_detach_tier_status_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                 int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp               rsp     = {0,};</div><div class='del'>-        int                      ret     = -1;</div><div class='del'>-        dict_t                  *dict    = NULL;</div><div class='del'>-        char                     msg[1024] = {0,};</div><div class='del'>-        int32_t                  command = 0;</div><div class='del'>-        gf1_op_commands          cmd = GF_OP_CMD_NONE;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        char                    *cmd_str = "unknown";</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_detach_tier_status_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                              void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+    gf1_op_commands cmd = GF_OP_CMD_NONE;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *cmd_str = "unknown";</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp,</div><div class='del'>-                              (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "command", &amp;command);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "command", &amp;command);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        cmd = command;</div><div class='add'>+    cmd = command;</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case GF_OP_CMD_STOP_DETACH_TIER:</div><div class='del'>-                cmd_str = "stop";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "stop";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_STATUS:</div><div class='del'>-                cmd_str = "status";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "status";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rsp.op_ret;</div><div class='del'>-        if (rsp.op_ret == -1) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        snprintf (msg, sizeof (msg), "volume tier detach %s: "</div><div class='del'>-                                  "failed: %s", cmd_str, rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        snprintf (msg, sizeof (msg), "volume tier detach %s: "</div><div class='del'>-                                  "failed", cmd_str);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret == -1) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "volume tier detach %s: "</div><div class='add'>+                     "failed: %s",</div><div class='add'>+                     cmd_str, rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "volume tier detach %s: "</div><div class='add'>+                     "failed",</div><div class='add'>+                     cmd_str);</div><div class='ctx'> </div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                        goto xml_output;</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+            goto xml_output;</div><div class='ctx'> </div><div class='del'>-                cli_err ("%s", msg);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        cli_err("%s", msg);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                dict  = dict_new ();</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        strncpy (msg, "failed to unserialize req-buffer to "</div><div class='del'>-                                 "dictionary", sizeof (msg));</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            strncpy(msg,</div><div class='add'>+                    "failed to unserialize req-buffer to "</div><div class='add'>+                    "dictionary",</div><div class='add'>+                    sizeof(msg));</div><div class='ctx'> </div><div class='del'>-                        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                                rsp.op_ret = -1;</div><div class='del'>-                                goto xml_output;</div><div class='del'>-                        }</div><div class='add'>+            if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+                rsp.op_ret = -1;</div><div class='add'>+                goto xml_output;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "%s", msg);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "%s", msg);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> xml_output:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, "")) {</div><div class='del'>-                        ret = cli_xml_output_vol_remove_brick_detach_tier (</div><div class='del'>-                                                               _gf_true, dict,</div><div class='del'>-                                                               rsp.op_ret,</div><div class='del'>-                                                               rsp.op_errno,</div><div class='del'>-                                                               rsp.op_errstr,</div><div class='del'>-                                                               "volDetachTier");</div><div class='del'>-                } else {</div><div class='del'>-                        ret = cli_xml_output_vol_remove_brick_detach_tier</div><div class='del'>-                                                               (_gf_true, dict,</div><div class='del'>-                                                               rsp.op_ret,</div><div class='del'>-                                                               rsp.op_errno,</div><div class='del'>-                                                               msg,</div><div class='del'>-                                                               "volDetachTier");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, "")) {</div><div class='add'>+            ret = cli_xml_output_vol_remove_brick_detach_tier(</div><div class='add'>+                _gf_true, dict, rsp.op_ret, rsp.op_errno, rsp.op_errstr,</div><div class='add'>+                "volDetachTier");</div><div class='add'>+        } else {</div><div class='add'>+            ret = cli_xml_output_vol_remove_brick_detach_tier(</div><div class='add'>+                _gf_true, dict, rsp.op_ret, rsp.op_errno, msg, "volDetachTier");</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REMOVE_BRICK,</div><div class='add'>+                                        _gf_true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to print remove-brick "</div><div class='add'>+               "rebalance status");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((cmd == GF_OP_CMD_STOP_DETACH_TIER) &amp;&amp; (rsp.op_ret == 0)) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "'detach tier' process may be in the middle of a "</div><div class='add'>+            "file migration.\nThe process will be fully stopped "</div><div class='add'>+            "once the migration of the file is complete.\nPlease "</div><div class='add'>+            "check detach tier process for completion before "</div><div class='add'>+            "doing any further brick related tasks on the "</div><div class='add'>+            "volume.");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    free(rsp.dict.dict_val); /* malloced by xdr */</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = gf_cli_print_rebalance_status (dict, GF_TASK_TYPE_REMOVE_BRICK,</div><div class='del'>-                                             _gf_true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to print remove-brick "</div><div class='del'>-                        "rebalance status");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+gf_cli_add_brick_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                     void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to add brick");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "Add Brick %s",</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volAddBrick", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((cmd == GF_OP_CMD_STOP_DETACH_TIER) &amp;&amp; (rsp.op_ret == 0)) {</div><div class='del'>-                cli_out ("'detach tier' process may be in the middle of a "</div><div class='del'>-                         "file migration.\nThe process will be fully stopped "</div><div class='del'>-                         "once the migration of the file is complete.\nPlease "</div><div class='del'>-                         "check detach tier process for completion before "</div><div class='del'>-                         "doing any further brick related tasks on the "</div><div class='del'>-                         "volume.");</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume add-brick: failed: %s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume add-brick: success");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free (rsp.dict.dict_val); /* malloced by xdr */</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_cli_add_brick_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='add'>+gf_cli3_remove_brick_status_cbk(struct rpc_req *req, struct iovec *iov,</div><div class='add'>+                                int count, void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_rsp                  rsp   = {0,};</div><div class='del'>-        int                         ret   = -1;</div><div class='del'>-        char                        msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to add brick");</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+    gf1_op_commands cmd = GF_OP_CMD_NONE;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *cmd_str = "unknown";</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "Add Brick %s",</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volAddBrick", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume add-brick: failed: %s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume add-brick: success");</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-gf_cli3_remove_brick_status_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                 int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp               rsp     = {0,};</div><div class='del'>-        int                      ret     = -1;</div><div class='del'>-        dict_t                  *dict    = NULL;</div><div class='del'>-        char                     msg[1024] = {0,};</div><div class='del'>-        int32_t                  command = 0;</div><div class='del'>-        gf1_op_commands          cmd = GF_OP_CMD_NONE;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        char                    *cmd_str = "unknown";</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "command", &amp;command);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    cmd = command;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp,</div><div class='del'>-                              (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "command", &amp;command);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        cmd = command;</div><div class='del'>-</div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case GF_OP_CMD_STOP:</div><div class='del'>-                cmd_str = "stop";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "stop";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_STATUS:</div><div class='del'>-                cmd_str = "status";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "status";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret == -1) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "volume remove-brick %s: "</div><div class='add'>+                     "failed: %s",</div><div class='add'>+                     cmd_str, rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "volume remove-brick %s: "</div><div class='add'>+                     "failed",</div><div class='add'>+                     cmd_str);</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='del'>-        if (rsp.op_ret == -1) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        snprintf (msg, sizeof (msg), "volume remove-brick %s: "</div><div class='del'>-                                  "failed: %s", cmd_str, rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        snprintf (msg, sizeof (msg), "volume remove-brick %s: "</div><div class='del'>-                                  "failed", cmd_str);</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+            goto xml_output;</div><div class='ctx'> </div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                        goto xml_output;</div><div class='add'>+        cli_err("%s", msg);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                cli_err ("%s", msg);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                dict  = dict_new ();</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        strncpy (msg, "failed to unserialize req-buffer to "</div><div class='del'>-                                 "dictionary", sizeof (msg));</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            strncpy(msg,</div><div class='add'>+                    "failed to unserialize req-buffer to "</div><div class='add'>+                    "dictionary",</div><div class='add'>+                    sizeof(msg));</div><div class='ctx'> </div><div class='del'>-                        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                                rsp.op_ret = -1;</div><div class='del'>-                                goto xml_output;</div><div class='del'>-                        }</div><div class='add'>+            if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+                rsp.op_ret = -1;</div><div class='add'>+                goto xml_output;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "%s", msg);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "%s", msg);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> xml_output:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, "")) {</div><div class='del'>-                        ret = cli_xml_output_vol_remove_brick_detach_tier (</div><div class='del'>-                                                               _gf_true, dict,</div><div class='del'>-                                                               rsp.op_ret,</div><div class='del'>-                                                               rsp.op_errno,</div><div class='del'>-                                                               rsp.op_errstr,</div><div class='del'>-                                                               "volRemoveBrick");</div><div class='del'>-                } else {</div><div class='del'>-                        ret = cli_xml_output_vol_remove_brick_detach_tier (</div><div class='del'>-                                                               _gf_true, dict,</div><div class='del'>-                                                               rsp.op_ret,</div><div class='del'>-                                                               rsp.op_errno,</div><div class='del'>-                                                               msg,</div><div class='del'>-                                                               "volRemoveBrick");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_cli_print_rebalance_status (dict, GF_TASK_TYPE_REMOVE_BRICK,</div><div class='del'>-                                             _gf_false);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to print remove-brick "</div><div class='del'>-                        "rebalance status");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((cmd == GF_OP_CMD_STOP) &amp;&amp; (rsp.op_ret == 0)) {</div><div class='del'>-                cli_out ("'remove-brick' process may be in the middle of a "</div><div class='del'>-                         "file migration.\nThe process will be fully stopped "</div><div class='del'>-                         "once the migration of the file is complete.\nPlease "</div><div class='del'>-                         "check remove-brick process for completion before "</div><div class='del'>-                         "doing any further brick related tasks on the "</div><div class='del'>-                         "volume.");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        free (rsp.dict.dict_val); //malloced by xdr</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, "")) {</div><div class='add'>+            ret = cli_xml_output_vol_remove_brick_detach_tier(</div><div class='add'>+                _gf_true, dict, rsp.op_ret, rsp.op_errno, rsp.op_errstr,</div><div class='add'>+                "volRemoveBrick");</div><div class='add'>+        } else {</div><div class='add'>+            ret = cli_xml_output_vol_remove_brick_detach_tier(</div><div class='add'>+                _gf_true, dict, rsp.op_ret, rsp.op_errno, msg,</div><div class='add'>+                "volRemoveBrick");</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_cli_print_rebalance_status(dict, GF_TASK_TYPE_REMOVE_BRICK,</div><div class='add'>+                                        _gf_false);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to print remove-brick "</div><div class='add'>+               "rebalance status");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((cmd == GF_OP_CMD_STOP) &amp;&amp; (rsp.op_ret == 0)) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "'remove-brick' process may be in the middle of a "</div><div class='add'>+            "file migration.\nThe process will be fully stopped "</div><div class='add'>+            "once the migration of the file is complete.\nPlease "</div><div class='add'>+            "check remove-brick process for completion before "</div><div class='add'>+            "doing any further brick related tasks on the "</div><div class='add'>+            "volume.");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    free(rsp.dict.dict_val);  // malloced by xdr</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_cli_remove_brick_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                      rsp   = {0,};</div><div class='del'>-        int                             ret   = -1;</div><div class='del'>-        char                            msg[1024] = {0,};</div><div class='del'>-        gf1_op_commands                 cmd = GF_OP_CMD_NONE;</div><div class='del'>-        char                           *cmd_str = "unknown";</div><div class='del'>-        cli_local_t                    *local = NULL;</div><div class='del'>-        call_frame_t                   *frame = NULL;</div><div class='del'>-        char                           *task_id_str = NULL;</div><div class='del'>-        dict_t                         *rsp_dict = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "command", (int32_t *)&amp;cmd);</div><div class='add'>+gf_cli_remove_brick_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                        void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf1_op_commands cmd = GF_OP_CMD_NONE;</div><div class='add'>+    char *cmd_str = "unknown";</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "command", (int32_t *)&amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "failed to get command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        rsp_dict = dict_new();</div><div class='add'>+        if (!rsp_dict) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;rsp_dict);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                 gf_log ("", GF_LOG_ERROR, "failed to get command");</div><div class='del'>-                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                rsp_dict = dict_new ();</div><div class='del'>-                if (!rsp_dict) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len,</div><div class='del'>-                                        &amp;rsp_dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to unserialize rsp_dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to unserialize rsp_dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case GF_OP_CMD_DETACH_START:</div><div class='ctx'>         case GF_OP_CMD_START:</div><div class='del'>-                cmd_str = "start";</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (rsp_dict, GF_REMOVE_BRICK_TID_KEY, &amp;task_id_str);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "remove-brick-id is not present in dict");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "start";</div><div class='add'>+</div><div class='add'>+            ret = dict_get_str(rsp_dict, GF_REMOVE_BRICK_TID_KEY, &amp;task_id_str);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "remove-brick-id is not present in dict");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_COMMIT:</div><div class='del'>-                cmd_str = "commit";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "commit";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OP_CMD_COMMIT_FORCE:</div><div class='del'>-                cmd_str = "commit force";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "commit force";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                cmd_str = "unknown";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to remove brick");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "Remove Brick %s %s", cmd_str,</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_remove_brick_detach_tier (</div><div class='del'>-                                                       _gf_false, rsp_dict,</div><div class='del'>-                                                       rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                                       msg, "volRemoveBrick");</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            cmd_str = "unknown";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to remove brick");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "Remove Brick %s %s", cmd_str,</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_remove_brick_detach_tier(</div><div class='add'>+            _gf_false, rsp_dict, rsp.op_ret, rsp.op_errno, msg,</div><div class='add'>+            "volRemoveBrick");</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                cli_err ("volume remove-brick %s: failed: %s", cmd_str,</div><div class='del'>-                         msg);</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("volume remove-brick %s: success", cmd_str);</div><div class='del'>-                if (GF_OP_CMD_START == cmd &amp;&amp; task_id_str != NULL)</div><div class='del'>-                        cli_out ("ID: %s", task_id_str);</div><div class='del'>-                if (GF_OP_CMD_COMMIT == cmd)</div><div class='del'>-                        cli_out ("Check the removed bricks to ensure all files "</div><div class='del'>-                                 "are migrated.\nIf files with data are "</div><div class='del'>-                                 "found on the brick path, copy them via a "</div><div class='del'>-                                 "gluster mount point before re-purposing the "</div><div class='del'>-                                 "removed brick. ");</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        cli_err("volume remove-brick %s: failed: %s", cmd_str, msg);</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("volume remove-brick %s: success", cmd_str);</div><div class='add'>+        if (GF_OP_CMD_START == cmd &amp;&amp; task_id_str != NULL)</div><div class='add'>+            cli_out("ID: %s", task_id_str);</div><div class='add'>+        if (GF_OP_CMD_COMMIT == cmd)</div><div class='add'>+            cli_out(</div><div class='add'>+                "Check the removed bricks to ensure all files "</div><div class='add'>+                "are migrated.\nIf files with data are "</div><div class='add'>+                "found on the brick path, copy them via a "</div><div class='add'>+                "gluster mount point before re-purposing the "</div><div class='add'>+                "removed brick. ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_reset_brick_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                        int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                       rsp              = {0,};</div><div class='del'>-        int                              ret              = -1;</div><div class='del'>-        cli_local_t                     *local            = NULL;</div><div class='del'>-        call_frame_t                    *frame            = NULL;</div><div class='del'>-        char                            *rb_operation_str = NULL;</div><div class='del'>-        dict_t                          *rsp_dict         = NULL;</div><div class='del'>-        char                             msg[1024]        = {0,};</div><div class='del'>-        char                            *reset_op         = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+gf_cli_reset_brick_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *rb_operation_str = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *reset_op = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "operation", &amp;reset_op);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "dict_get on operation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        rsp_dict = dict_new();</div><div class='add'>+</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;rsp_dict);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "operation", &amp;reset_op);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dict_get on operation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                rsp_dict  = dict_new ();</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;rsp_dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                                "unserialize rsp buffer to dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (reset_op, "GF_RESET_OP_START") &amp;&amp;</div><div class='del'>-            strcmp (reset_op, "GF_RESET_OP_COMMIT") &amp;&amp;</div><div class='del'>-            strcmp (reset_op, "GF_RESET_OP_COMMIT_FORCE")) {</div><div class='del'>-                rb_operation_str = gf_strdup ("Unknown operation");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; (strcmp (rsp.op_errstr, ""))) {</div><div class='del'>-                rb_operation_str = gf_strdup (rsp.op_errstr);</div><div class='del'>-        } else {</div><div class='del'>-                if (!strcmp (reset_op, "GF_RESET_OP_START")) {</div><div class='del'>-                        if (rsp.op_ret)</div><div class='del'>-                                rb_operation_str = gf_strdup ("reset-brick "</div><div class='del'>-                                                              "start "</div><div class='del'>-                                                              "operation "</div><div class='del'>-                                                              "failed");</div><div class='del'>-                        else</div><div class='del'>-                                rb_operation_str = gf_strdup ("reset-brick "</div><div class='del'>-                                                              "start "</div><div class='del'>-                                                              "operation "</div><div class='del'>-                                                              "successful");</div><div class='del'>-                } else if (!strcmp (reset_op, "GF_RESET_OP_COMMIT")) {</div><div class='del'>-</div><div class='del'>-                        if (rsp.op_ret)</div><div class='del'>-                                rb_operation_str = gf_strdup ("reset-brick "</div><div class='del'>-                                                              "commit "</div><div class='del'>-                                                              "operation "</div><div class='del'>-                                                              "failed");</div><div class='del'>-                        else</div><div class='del'>-                                rb_operation_str = gf_strdup ("reset-brick "</div><div class='del'>-                                                              "commit "</div><div class='del'>-                                                              "operation "</div><div class='del'>-                                                              "successful");</div><div class='del'>-                } else if (!strcmp (reset_op, "GF_RESET_OP_COMMIT_FORCE")) {</div><div class='del'>-</div><div class='del'>-                        if (rsp.op_ret)</div><div class='del'>-                                rb_operation_str = gf_strdup ("reset-brick "</div><div class='del'>-                                                              "commit "</div><div class='del'>-                                                              "force operation "</div><div class='del'>-                                                              "failed");</div><div class='del'>-                        else</div><div class='del'>-                                rb_operation_str = gf_strdup ("reset-brick "</div><div class='del'>-                                                              "commit "</div><div class='del'>-                                                              "force operation "</div><div class='del'>-                                                              "successful");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to reset brick");</div><div class='del'>-        snprintf (msg, sizeof (msg), "%s",</div><div class='del'>-                  rb_operation_str ? rb_operation_str : "Unknown operation");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_replace_brick (rsp_dict,</div><div class='del'>-                                                        rsp.op_ret,</div><div class='del'>-                                                        rsp.op_errno, msg);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "unserialize rsp buffer to dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(reset_op, "GF_RESET_OP_START") &amp;&amp;</div><div class='add'>+        strcmp(reset_op, "GF_RESET_OP_COMMIT") &amp;&amp;</div><div class='add'>+        strcmp(reset_op, "GF_RESET_OP_COMMIT_FORCE")) {</div><div class='add'>+        rb_operation_str = gf_strdup("Unknown operation");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; (strcmp(rsp.op_errstr, ""))) {</div><div class='add'>+        rb_operation_str = gf_strdup(rsp.op_errstr);</div><div class='add'>+    } else {</div><div class='add'>+        if (!strcmp(reset_op, "GF_RESET_OP_START")) {</div><div class='add'>+            if (rsp.op_ret)</div><div class='add'>+                rb_operation_str = gf_strdup(</div><div class='add'>+                    "reset-brick "</div><div class='add'>+                    "start "</div><div class='add'>+                    "operation "</div><div class='add'>+                    "failed");</div><div class='add'>+            else</div><div class='add'>+                rb_operation_str = gf_strdup(</div><div class='add'>+                    "reset-brick "</div><div class='add'>+                    "start "</div><div class='add'>+                    "operation "</div><div class='add'>+                    "successful");</div><div class='add'>+        } else if (!strcmp(reset_op, "GF_RESET_OP_COMMIT")) {</div><div class='add'>+            if (rsp.op_ret)</div><div class='add'>+                rb_operation_str = gf_strdup(</div><div class='add'>+                    "reset-brick "</div><div class='add'>+                    "commit "</div><div class='add'>+                    "operation "</div><div class='add'>+                    "failed");</div><div class='add'>+            else</div><div class='add'>+                rb_operation_str = gf_strdup(</div><div class='add'>+                    "reset-brick "</div><div class='add'>+                    "commit "</div><div class='add'>+                    "operation "</div><div class='add'>+                    "successful");</div><div class='add'>+        } else if (!strcmp(reset_op, "GF_RESET_OP_COMMIT_FORCE")) {</div><div class='add'>+            if (rsp.op_ret)</div><div class='add'>+                rb_operation_str = gf_strdup(</div><div class='add'>+                    "reset-brick "</div><div class='add'>+                    "commit "</div><div class='add'>+                    "force operation "</div><div class='add'>+                    "failed");</div><div class='add'>+            else</div><div class='add'>+                rb_operation_str = gf_strdup(</div><div class='add'>+                    "reset-brick "</div><div class='add'>+                    "commit "</div><div class='add'>+                    "force operation "</div><div class='add'>+                    "successful");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to reset brick");</div><div class='add'>+    snprintf(msg, sizeof(msg), "%s",</div><div class='add'>+             rb_operation_str ? rb_operation_str : "Unknown operation");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_replace_brick(rsp_dict, rsp.op_ret,</div><div class='add'>+                                               rsp.op_errno, msg);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume reset-brick: failed: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume reset-brick: success: %s", msg);</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume reset-brick: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume reset-brick: success: %s", msg);</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='add'>+    if (frame)</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (local)</div><div class='del'>-                cli_local_wipe (local);</div><div class='add'>+    if (local)</div><div class='add'>+        cli_local_wipe(local);</div><div class='ctx'> </div><div class='del'>-        if (rb_operation_str)</div><div class='del'>-                GF_FREE (rb_operation_str);</div><div class='add'>+    if (rb_operation_str)</div><div class='add'>+        GF_FREE(rb_operation_str);</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-gf_cli_replace_brick_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                       rsp              = {0,};</div><div class='del'>-        int                              ret              = -1;</div><div class='del'>-        cli_local_t                     *local            = NULL;</div><div class='del'>-        call_frame_t                    *frame            = NULL;</div><div class='del'>-        char                            *rb_operation_str = NULL;</div><div class='del'>-        dict_t                          *rsp_dict         = NULL;</div><div class='del'>-        char                             msg[1024]        = {0,};</div><div class='del'>-        char                            *replace_op       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+gf_cli_replace_brick_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                         void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *rb_operation_str = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *replace_op = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "operation", &amp;replace_op);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "dict_get on operation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        rsp_dict = dict_new();</div><div class='add'>+</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;rsp_dict);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "operation", &amp;replace_op);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dict_get on operation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                rsp_dict  = dict_new ();</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;rsp_dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                                "unserialize rsp buffer to dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!strcmp (replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) {</div><div class='del'>-</div><div class='del'>-                if (rsp.op_ret || ret)</div><div class='del'>-                        rb_operation_str = gf_strdup ("replace-brick commit "</div><div class='del'>-                                                      "force operation failed");</div><div class='del'>-                else</div><div class='del'>-                        rb_operation_str = gf_strdup ("replace-brick commit "</div><div class='del'>-                                                      "force operation "</div><div class='del'>-                                                      "successful");</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_DEBUG, "Unknown operation");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; (strcmp (rsp.op_errstr, ""))) {</div><div class='del'>-                rb_operation_str = gf_strdup (rsp.op_errstr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to replace brick");</div><div class='del'>-        snprintf (msg, sizeof (msg), "%s",</div><div class='del'>-                  rb_operation_str ? rb_operation_str : "Unknown operation");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_replace_brick (rsp_dict,</div><div class='del'>-                                                        rsp.op_ret,</div><div class='del'>-                                                        rsp.op_errno, msg);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume replace-brick: failed: %s", msg);</div><div class='add'>+            gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "unserialize rsp buffer to dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) {</div><div class='add'>+        if (rsp.op_ret || ret)</div><div class='add'>+            rb_operation_str = gf_strdup(</div><div class='add'>+                "replace-brick commit "</div><div class='add'>+                "force operation failed");</div><div class='ctx'>         else</div><div class='del'>-                cli_out ("volume replace-brick: success: %s", msg);</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+            rb_operation_str = gf_strdup(</div><div class='add'>+                "replace-brick commit "</div><div class='add'>+                "force operation "</div><div class='add'>+                "successful");</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_DEBUG, "Unknown operation");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; (strcmp(rsp.op_errstr, ""))) {</div><div class='add'>+        rb_operation_str = gf_strdup(rsp.op_errstr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to replace brick");</div><div class='add'>+    snprintf(msg, sizeof(msg), "%s",</div><div class='add'>+             rb_operation_str ? rb_operation_str : "Unknown operation");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_replace_brick(rsp_dict, rsp.op_ret,</div><div class='add'>+                                               rsp.op_errno, msg);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume replace-brick: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume replace-brick: success: %s", msg);</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='add'>+    if (frame)</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (local)</div><div class='del'>-                cli_local_wipe (local);</div><div class='add'>+    if (local)</div><div class='add'>+        cli_local_wipe(local);</div><div class='ctx'> </div><div class='del'>-        if (rb_operation_str)</div><div class='del'>-                GF_FREE (rb_operation_str);</div><div class='add'>+    if (rb_operation_str)</div><div class='add'>+        GF_FREE(rb_operation_str);</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_cli_log_rotate_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                          int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp             rsp   = {0,};</div><div class='del'>-        int                    ret   = -1;</div><div class='del'>-        char                   msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to log rotate");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "log rotate %s",</div><div class='del'>-                          (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volLogRotate", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_log_rotate_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to log rotate");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "log rotate %s",</div><div class='add'>+                 (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volLogRotate", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume log-rotate: failed: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume log-rotate: success");</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume log-rotate: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume log-rotate: success");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_cli_sync_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                           int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                     rsp   = {0,};</div><div class='del'>-        int                            ret   = -1;</div><div class='del'>-        char                           msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to sync");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, ""))</div><div class='del'>-                snprintf (msg, sizeof (msg), "volume sync: failed: %s",</div><div class='del'>-                          rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "volume sync: %s",</div><div class='del'>-                          (rsp.op_ret) ? "failed": "success");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volSync", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_sync_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to sync");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, ""))</div><div class='add'>+        snprintf(msg, sizeof(msg), "volume sync: failed: %s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "volume sync: %s",</div><div class='add'>+                 (rsp.op_ret) ? "failed" : "success");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volSync", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("%s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("%s", msg);</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("%s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("%s", msg);</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-print_quota_list_usage_output (cli_local_t *local, char *path, int64_t avail,</div><div class='del'>-                               char *sl_str, quota_limits_t *limits,</div><div class='del'>-                               quota_meta_t *used_space, gf_boolean_t sl,</div><div class='del'>-                               gf_boolean_t hl, double sl_num,</div><div class='del'>-                               gf_boolean_t limit_set)</div><div class='del'>-{</div><div class='del'>-        int32_t         ret          = -1;</div><div class='del'>-        char           *used_str     = NULL;</div><div class='del'>-        char           *avail_str    = NULL;</div><div class='del'>-        char           *hl_str       = NULL;</div><div class='del'>-        char           *sl_val       = NULL;</div><div class='del'>-</div><div class='del'>-        used_str = gf_uint64_2human_readable (used_space-&gt;size);</div><div class='del'>-</div><div class='del'>-        if (limit_set) {</div><div class='del'>-                hl_str = gf_uint64_2human_readable (limits-&gt;hl);</div><div class='del'>-                avail_str = gf_uint64_2human_readable (avail);</div><div class='del'>-</div><div class='del'>-                sl_val = gf_uint64_2human_readable (sl_num);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_quota_xml_output (local, path, limits-&gt;hl,</div><div class='del'>-                                            sl_str, sl_num, used_space-&gt;size,</div><div class='del'>-                                            avail, sl ? "Yes" : "No",</div><div class='del'>-                                            hl ? "Yes" : "No", limit_set);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to "</div><div class='del'>-                                "output in xml format for quota "</div><div class='del'>-                                "list command");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (limit_set) {</div><div class='del'>-                if (!used_str) {</div><div class='del'>-                        cli_out ("%-40s %7s %7s(%s) %8"PRIu64 "%9"PRIu64""</div><div class='del'>-                                 "%15s %18s", path, hl_str, sl_str, sl_val,</div><div class='del'>-                                 used_space-&gt;size, avail,</div><div class='del'>-                                 sl ? "Yes" : "No", hl ? "Yes" : "No");</div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("%-40s %7s %7s(%s) %8s %7s %15s %20s",</div><div class='del'>-                                 path, hl_str, sl_str, sl_val, used_str,</div><div class='del'>-                                 avail_str, sl ? "Yes" : "No",</div><div class='del'>-                                 hl ? "Yes" : "No");</div><div class='del'>-                }</div><div class='add'>+print_quota_list_usage_output(cli_local_t *local, char *path, int64_t avail,</div><div class='add'>+                              char *sl_str, quota_limits_t *limits,</div><div class='add'>+                              quota_meta_t *used_space, gf_boolean_t sl,</div><div class='add'>+                              gf_boolean_t hl, double sl_num,</div><div class='add'>+                              gf_boolean_t limit_set)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *used_str = NULL;</div><div class='add'>+    char *avail_str = NULL;</div><div class='add'>+    char *hl_str = NULL;</div><div class='add'>+    char *sl_val = NULL;</div><div class='add'>+</div><div class='add'>+    used_str = gf_uint64_2human_readable(used_space-&gt;size);</div><div class='add'>+</div><div class='add'>+    if (limit_set) {</div><div class='add'>+        hl_str = gf_uint64_2human_readable(limits-&gt;hl);</div><div class='add'>+        avail_str = gf_uint64_2human_readable(avail);</div><div class='add'>+</div><div class='add'>+        sl_val = gf_uint64_2human_readable(sl_num);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_quota_xml_output(local, path, limits-&gt;hl, sl_str, sl_num,</div><div class='add'>+                                   used_space-&gt;size, avail, sl ? "Yes" : "No",</div><div class='add'>+                                   hl ? "Yes" : "No", limit_set);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "output in xml format for quota "</div><div class='add'>+                   "list command");</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (limit_set) {</div><div class='add'>+        if (!used_str) {</div><div class='add'>+            cli_out("%-40s %7s %7s(%s) %8" PRIu64 "%9" PRIu64</div><div class='add'>+                    ""</div><div class='add'>+                    "%15s %18s",</div><div class='add'>+                    path, hl_str, sl_str, sl_val, used_space-&gt;size, avail,</div><div class='add'>+                    sl ? "Yes" : "No", hl ? "Yes" : "No");</div><div class='ctx'>         } else {</div><div class='del'>-                        cli_out ("%-36s %10s %10s %14s %9s %15s %18s",</div><div class='del'>-                                 path, "N/A", "N/A", used_str, "N/A",</div><div class='del'>-                                 "N/A", "N/A");</div><div class='add'>+            cli_out("%-40s %7s %7s(%s) %8s %7s %15s %20s", path, hl_str, sl_str,</div><div class='add'>+                    sl_val, used_str, avail_str, sl ? "Yes" : "No",</div><div class='add'>+                    hl ? "Yes" : "No");</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-36s %10s %10s %14s %9s %15s %18s", path, "N/A", "N/A",</div><div class='add'>+                used_str, "N/A", "N/A", "N/A");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (hl_str);</div><div class='del'>-        GF_FREE (used_str);</div><div class='del'>-        GF_FREE (avail_str);</div><div class='del'>-        GF_FREE (sl_val);</div><div class='add'>+    GF_FREE(hl_str);</div><div class='add'>+    GF_FREE(used_str);</div><div class='add'>+    GF_FREE(avail_str);</div><div class='add'>+    GF_FREE(sl_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-print_quota_list_object_output (cli_local_t *local, char *path, int64_t avail,</div><div class='add'>+print_quota_list_object_output(cli_local_t *local, char *path, int64_t avail,</div><div class='ctx'>                                char *sl_str, quota_limits_t *limits,</div><div class='ctx'>                                quota_meta_t *used_space, gf_boolean_t sl,</div><div class='ctx'>                                gf_boolean_t hl, double sl_num,</div><div class='ctx'>                                gf_boolean_t limit_set)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret       = -1;</div><div class='del'>-        int64_t         sl_val    = sl_num;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int64_t sl_val = sl_num;</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_quota_object_xml_output (local, path, sl_str, sl_val,</div><div class='del'>-                                                   limits, used_space, avail,</div><div class='del'>-                                                   sl ? "Yes" : "No",</div><div class='del'>-                                                   hl ? "Yes" : "No",</div><div class='del'>-                                                   limit_set);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to "</div><div class='del'>-                                "output in xml format for quota "</div><div class='del'>-                                "list command");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_quota_object_xml_output(local, path, sl_str, sl_val, limits,</div><div class='add'>+                                          used_space, avail, sl ? "Yes" : "No",</div><div class='add'>+                                          hl ? "Yes" : "No", limit_set);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "output in xml format for quota "</div><div class='add'>+                   "list command");</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (limit_set) {</div><div class='del'>-                cli_out ("%-40s %9"PRIu64" %9s(%"PRId64") %10"PRIu64""</div><div class='del'>-                         "%10"PRIu64" %11"PRIu64" %15s %20s",</div><div class='del'>-                         path, limits-&gt;hl, sl_str, sl_val,</div><div class='del'>-                         used_space-&gt;file_count, used_space-&gt;dir_count,</div><div class='del'>-                         avail, sl ? "Yes" : "No", hl ? "Yes" : "No");</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%-40s %9s %9s %10"PRIu64" %10"PRIu64" %11s %15s %20s",</div><div class='del'>-                         path, "N/A", "N/A", used_space-&gt;file_count,</div><div class='del'>-                         used_space-&gt;dir_count, "N/A", "N/A", "N/A");</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (limit_set) {</div><div class='add'>+        cli_out("%-40s %9" PRIu64 " %9s(%" PRId64 ") %10" PRIu64</div><div class='add'>+                ""</div><div class='add'>+                "%10" PRIu64 " %11" PRIu64 " %15s %20s",</div><div class='add'>+                path, limits-&gt;hl, sl_str, sl_val, used_space-&gt;file_count,</div><div class='add'>+                used_space-&gt;dir_count, avail, sl ? "Yes" : "No",</div><div class='add'>+                hl ? "Yes" : "No");</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%-40s %9s %9s %10" PRIu64 " %10" PRIu64 " %11s %15s %20s",</div><div class='add'>+                path, "N/A", "N/A", used_space-&gt;file_count,</div><div class='add'>+                used_space-&gt;dir_count, "N/A", "N/A", "N/A");</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-print_quota_list_output (cli_local_t *local, char *path, char *default_sl,</div><div class='del'>-                         quota_limits_t *limits, quota_meta_t *used_space,</div><div class='del'>-                         int type, gf_boolean_t limit_set)</div><div class='del'>-{</div><div class='del'>-        int64_t         avail            = 0;</div><div class='del'>-        char            percent_str[20]  = {0};</div><div class='del'>-        char           *sl_final         = NULL;</div><div class='del'>-        int             ret              = -1;</div><div class='del'>-        double          sl_num           = 0;</div><div class='del'>-        gf_boolean_t    sl               = _gf_false;</div><div class='del'>-        gf_boolean_t    hl               = _gf_false;</div><div class='del'>-        int64_t         used_size        = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (local);</div><div class='del'>-        GF_ASSERT (path);</div><div class='del'>-</div><div class='del'>-        if (limit_set) {</div><div class='del'>-                if (limits-&gt;sl &lt; 0) {</div><div class='del'>-                        ret = gf_string2percent (default_sl, &amp;sl_num);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "could not convert default soft limit"</div><div class='del'>-                                        " to percent");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        sl_num = (sl_num * limits-&gt;hl) / 100;</div><div class='del'>-                        sl_final = default_sl;</div><div class='del'>-                } else {</div><div class='del'>-                        sl_num = (limits-&gt;sl * limits-&gt;hl) / 100;</div><div class='del'>-                        snprintf (percent_str, sizeof (percent_str), "%"PRIu64"%%",</div><div class='del'>-                                        limits-&gt;sl);</div><div class='del'>-                        sl_final = percent_str;</div><div class='del'>-                }</div><div class='del'>-                if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-                        used_size = used_space-&gt;size;</div><div class='del'>-                else</div><div class='del'>-                        used_size = used_space-&gt;file_count + used_space-&gt;dir_count;</div><div class='del'>-</div><div class='del'>-                if (limits-&gt;hl &gt; used_size) {</div><div class='del'>-                        avail = limits-&gt;hl - used_size;</div><div class='del'>-                        hl = _gf_false;</div><div class='del'>-                        if (used_size &gt; sl_num)</div><div class='del'>-                                sl = _gf_true;</div><div class='del'>-                        else</div><div class='del'>-                                sl = _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        avail = 0;</div><div class='del'>-                        hl = sl = _gf_true;</div><div class='del'>-                }</div><div class='add'>+print_quota_list_output(cli_local_t *local, char *path, char *default_sl,</div><div class='add'>+                        quota_limits_t *limits, quota_meta_t *used_space,</div><div class='add'>+                        int type, gf_boolean_t limit_set)</div><div class='add'>+{</div><div class='add'>+    int64_t avail = 0;</div><div class='add'>+    char percent_str[20] = {0};</div><div class='add'>+    char *sl_final = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    double sl_num = 0;</div><div class='add'>+    gf_boolean_t sl = _gf_false;</div><div class='add'>+    gf_boolean_t hl = _gf_false;</div><div class='add'>+    int64_t used_size = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(local);</div><div class='add'>+    GF_ASSERT(path);</div><div class='add'>+</div><div class='add'>+    if (limit_set) {</div><div class='add'>+        if (limits-&gt;sl &lt; 0) {</div><div class='add'>+            ret = gf_string2percent(default_sl, &amp;sl_num);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "could not convert default soft limit"</div><div class='add'>+                       " to percent");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            sl_num = (sl_num * limits-&gt;hl) / 100;</div><div class='add'>+            sl_final = default_sl;</div><div class='add'>+        } else {</div><div class='add'>+            sl_num = (limits-&gt;sl * limits-&gt;hl) / 100;</div><div class='add'>+            snprintf(percent_str, sizeof(percent_str), "%" PRIu64 "%%",</div><div class='add'>+                     limits-&gt;sl);</div><div class='add'>+            sl_final = percent_str;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='ctx'>         if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-                ret = print_quota_list_usage_output (local, path, avail,</div><div class='del'>-                                                     sl_final, limits,</div><div class='del'>-                                                     used_space, sl, hl,</div><div class='del'>-                                                     sl_num, limit_set);</div><div class='add'>+            used_size = used_space-&gt;size;</div><div class='ctx'>         else</div><div class='del'>-                ret = print_quota_list_object_output (local, path, avail,</div><div class='del'>-                                                      sl_final, limits,</div><div class='del'>-                                                      used_space, sl, hl,</div><div class='del'>-                                                      sl_num, limit_set);</div><div class='add'>+            used_size = used_space-&gt;file_count + used_space-&gt;dir_count;</div><div class='add'>+</div><div class='add'>+        if (limits-&gt;hl &gt; used_size) {</div><div class='add'>+            avail = limits-&gt;hl - used_size;</div><div class='add'>+            hl = _gf_false;</div><div class='add'>+            if (used_size &gt; sl_num)</div><div class='add'>+                sl = _gf_true;</div><div class='add'>+            else</div><div class='add'>+                sl = _gf_false;</div><div class='add'>+        } else {</div><div class='add'>+            avail = 0;</div><div class='add'>+            hl = sl = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='add'>+        ret = print_quota_list_usage_output(local, path, avail, sl_final,</div><div class='add'>+                                            limits, used_space, sl, hl, sl_num,</div><div class='add'>+                                            limit_set);</div><div class='add'>+    else</div><div class='add'>+        ret = print_quota_list_object_output(local, path, avail, sl_final,</div><div class='add'>+                                             limits, used_space, sl, hl, sl_num,</div><div class='add'>+                                             limit_set);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-print_quota_list_from_mountdir (cli_local_t *local, char *mountdir,</div><div class='del'>-                                char *default_sl, char *path, int type)</div><div class='del'>-{</div><div class='del'>-        int             ret              = -1;</div><div class='del'>-        ssize_t         xattr_size       = 0;</div><div class='del'>-        quota_limits_t  limits           = {0,};</div><div class='del'>-        quota_meta_t    used_space       = {0,};</div><div class='del'>-        char           *key              = NULL;</div><div class='del'>-        gf_boolean_t    limit_set        = _gf_true;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (local);</div><div class='del'>-        GF_ASSERT (mountdir);</div><div class='del'>-        GF_ASSERT (path);</div><div class='del'>-</div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-                key = QUOTA_LIMIT_KEY;</div><div class='del'>-        else</div><div class='del'>-                key = QUOTA_LIMIT_OBJECTS_KEY;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = sys_lgetxattr (mountdir, key, (void *)&amp;limits, sizeof (limits));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get the xattr %s "</div><div class='del'>-                        "on %s. Reason : %s", key, mountdir, strerror (errno));</div><div class='del'>-</div><div class='del'>-                switch (errno) {</div><div class='add'>+print_quota_list_from_mountdir(cli_local_t *local, char *mountdir,</div><div class='add'>+                               char *default_sl, char *path, int type)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ssize_t xattr_size = 0;</div><div class='add'>+    quota_limits_t limits = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t used_space = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    gf_boolean_t limit_set = _gf_true;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(local);</div><div class='add'>+    GF_ASSERT(mountdir);</div><div class='add'>+    GF_ASSERT(path);</div><div class='add'>+</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='add'>+        key = QUOTA_LIMIT_KEY;</div><div class='add'>+    else</div><div class='add'>+        key = QUOTA_LIMIT_OBJECTS_KEY;</div><div class='add'>+</div><div class='add'>+    ret = sys_lgetxattr(mountdir, key, (void *)&amp;limits, sizeof(limits));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get the xattr %s "</div><div class='add'>+               "on %s. Reason : %s",</div><div class='add'>+               key, mountdir, strerror(errno));</div><div class='add'>+</div><div class='add'>+        switch (errno) {</div><div class='ctx'> #if defined(ENODATA)</div><div class='del'>-                case ENODATA:</div><div class='add'>+            case ENODATA:</div><div class='ctx'> #endif</div><div class='ctx'> #if defined(ENOATTR) &amp;&amp; (ENOATTR != ENODATA)</div><div class='del'>-                case ENOATTR:</div><div class='add'>+            case ENOATTR:</div><div class='ctx'> #endif</div><div class='del'>-                        /* If it's an ENOATTR, quota/inode-quota is</div><div class='del'>-                         * configured(limit is set at least for one directory).</div><div class='del'>-                         * The user is trying to issue 'list/list-objects'</div><div class='del'>-                         * command for a directory on which quota limit is</div><div class='del'>-                         * not set and we are showing the used-space in case</div><div class='del'>-                         * of list-usage and showing (dir_count, file_count)</div><div class='del'>-                         * in case of list-objects. Other labels are</div><div class='del'>-                         * shown "N/A".</div><div class='del'>-                         */</div><div class='del'>-</div><div class='del'>-                        limit_set = _gf_false;</div><div class='del'>-                        goto enoattr;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        cli_err ("%-40s %s", path, strerror (errno));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                /* If it's an ENOATTR, quota/inode-quota is</div><div class='add'>+                 * configured(limit is set at least for one directory).</div><div class='add'>+                 * The user is trying to issue 'list/list-objects'</div><div class='add'>+                 * command for a directory on which quota limit is</div><div class='add'>+                 * not set and we are showing the used-space in case</div><div class='add'>+                 * of list-usage and showing (dir_count, file_count)</div><div class='add'>+                 * in case of list-objects. Other labels are</div><div class='add'>+                 * shown "N/A".</div><div class='add'>+                 */</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+                limit_set = _gf_false;</div><div class='add'>+                goto enoattr;</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            default:</div><div class='add'>+                cli_err("%-40s %s", path, strerror(errno));</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        limits.hl = ntoh64 (limits.hl);</div><div class='del'>-        limits.sl = ntoh64 (limits.sl);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    limits.hl = ntoh64(limits.hl);</div><div class='add'>+    limits.sl = ntoh64(limits.sl);</div><div class='ctx'> </div><div class='ctx'> enoattr:</div><div class='del'>-        xattr_size = sys_lgetxattr (mountdir, QUOTA_SIZE_KEY, NULL, 0);</div><div class='del'>-        if (xattr_size &lt; (sizeof (int64_t) * 2) &amp;&amp;</div><div class='del'>-            type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) {</div><div class='del'>-                ret = -1;</div><div class='add'>+    xattr_size = sys_lgetxattr(mountdir, QUOTA_SIZE_KEY, NULL, 0);</div><div class='add'>+    if (xattr_size &lt; (sizeof(int64_t) * 2) &amp;&amp;</div><div class='add'>+        type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) {</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-                /* This can happen when glusterfs is upgraded from 3.6 to 3.7</div><div class='del'>-                 * and the xattr healing is not completed.</div><div class='del'>-                 */</div><div class='del'>-        } else if (xattr_size &gt; (sizeof (int64_t) * 2)) {</div><div class='del'>-                ret = sys_lgetxattr (mountdir, QUOTA_SIZE_KEY,</div><div class='del'>-                                     &amp;used_space, sizeof (used_space));</div><div class='del'>-        } else if (xattr_size &gt; 0) {</div><div class='del'>-                /* This is for compatibility.</div><div class='del'>-                 * Older version had only file usage</div><div class='del'>-                 */</div><div class='del'>-                ret = sys_lgetxattr (mountdir, QUOTA_SIZE_KEY,</div><div class='del'>-                             &amp;(used_space.size), sizeof (used_space.size));</div><div class='del'>-                used_space.file_count = 0;</div><div class='del'>-                used_space.dir_count = 0;</div><div class='del'>-        } else {</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+        /* This can happen when glusterfs is upgraded from 3.6 to 3.7</div><div class='add'>+         * and the xattr healing is not completed.</div><div class='add'>+         */</div><div class='add'>+    } else if (xattr_size &gt; (sizeof(int64_t) * 2)) {</div><div class='add'>+        ret = sys_lgetxattr(mountdir, QUOTA_SIZE_KEY, &amp;used_space,</div><div class='add'>+                            sizeof(used_space));</div><div class='add'>+    } else if (xattr_size &gt; 0) {</div><div class='add'>+        /* This is for compatibility.</div><div class='add'>+         * Older version had only file usage</div><div class='add'>+         */</div><div class='add'>+        ret = sys_lgetxattr(mountdir, QUOTA_SIZE_KEY, &amp;(used_space.size),</div><div class='add'>+                            sizeof(used_space.size));</div><div class='add'>+        used_space.file_count = 0;</div><div class='add'>+        used_space.dir_count = 0;</div><div class='add'>+    } else {</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get quota size "</div><div class='del'>-                        "on path %s: %s", mountdir, strerror (errno));</div><div class='del'>-                print_quota_list_empty (path, type);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get quota size "</div><div class='add'>+               "on path %s: %s",</div><div class='add'>+               mountdir, strerror(errno));</div><div class='add'>+        print_quota_list_empty(path, type);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        used_space.size = ntoh64 (used_space.size);</div><div class='del'>-        used_space.file_count = ntoh64 (used_space.file_count);</div><div class='del'>-        used_space.dir_count = ntoh64 (used_space.dir_count);</div><div class='add'>+    used_space.size = ntoh64(used_space.size);</div><div class='add'>+    used_space.file_count = ntoh64(used_space.file_count);</div><div class='add'>+    used_space.dir_count = ntoh64(used_space.dir_count);</div><div class='ctx'> </div><div class='del'>-        ret = print_quota_list_output (local, path, default_sl, &amp;limits,</div><div class='del'>-                                       &amp;used_space, type, limit_set);</div><div class='add'>+    ret = print_quota_list_output(local, path, default_sl, &amp;limits, &amp;used_space,</div><div class='add'>+                                  type, limit_set);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gluster_remove_auxiliary_mount (char *volname)</div><div class='add'>+gluster_remove_auxiliary_mount(char *volname)</div><div class='ctx'> {</div><div class='del'>-        int       ret                = -1;</div><div class='del'>-        char      mountdir[PATH_MAX] = {0,};</div><div class='del'>-        xlator_t  *this               = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char mountdir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='ctx'> </div><div class='del'>-        GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, "/");</div><div class='del'>-        ret = gf_umount_lazy (this-&gt;name, mountdir, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log("cli", GF_LOG_ERROR, "umount on %s failed, "</div><div class='del'>-                        "reason : %s", mountdir, strerror (errno));</div><div class='del'>-        }</div><div class='add'>+    GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(mountdir, volname, "/");</div><div class='add'>+    ret = gf_umount_lazy(this-&gt;name, mountdir, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "umount on %s failed, "</div><div class='add'>+               "reason : %s",</div><div class='add'>+               mountdir, strerror(errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_print_limit_list_from_dict (cli_local_t *local, char *volname,</div><div class='del'>-                                   dict_t *dict, char *default_sl, int count,</div><div class='del'>-                                   int op_ret, int op_errno, char *op_errstr)</div><div class='del'>-{</div><div class='del'>-        int             ret                     = -1;</div><div class='del'>-        int             i                       = 0;</div><div class='del'>-        char            key[1024]               = {0,};</div><div class='del'>-        char            mountdir[PATH_MAX]      = {0,};</div><div class='del'>-        char            *path                   = NULL;</div><div class='del'>-        int             type                    = -1;</div><div class='del'>-</div><div class='del'>-        if (!dict|| count &lt;= 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='add'>+gf_cli_print_limit_list_from_dict(cli_local_t *local, char *volname,</div><div class='add'>+                                  dict_t *dict, char *default_sl, int count,</div><div class='add'>+                                  int op_ret, int op_errno, char *op_errstr)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char mountdir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int type = -1;</div><div class='add'>+</div><div class='add'>+    if (!dict || count &lt;= 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get quota type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_quota_limit_list_begin(local, op_ret, op_errno,</div><div class='add'>+                                                        op_errstr);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get quota type");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting xml begin");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        print_quota_list_header(type);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_quota_limit_list_begin</div><div class='del'>-                                (local, op_ret, op_errno, op_errstr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting xml begin");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                print_quota_list_header (type);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (count--) {</div><div class='del'>-                snprintf (key, sizeof (key), "path%d", i++);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG, "Path not present in limit"</div><div class='del'>-                                " list");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    while (count--) {</div><div class='add'>+        snprintf(key, sizeof(key), "path%d", i++);</div><div class='ctx'> </div><div class='del'>-                ret = gf_canonicalize_path (path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, path);</div><div class='del'>-                ret = print_quota_list_from_mountdir (local, mountdir,</div><div class='del'>-                                                      default_sl, path, type);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+                   "Path not present in limit"</div><div class='add'>+                   " list");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = gf_canonicalize_path(path);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(mountdir, volname, path);</div><div class='add'>+        ret = print_quota_list_from_mountdir(local, mountdir, default_sl, path,</div><div class='add'>+                                             type);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-print_quota_list_from_quotad (call_frame_t *frame, dict_t *rsp_dict)</div><div class='del'>-{</div><div class='del'>-        char             *path          = NULL;</div><div class='del'>-        char             *default_sl    = NULL;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        cli_local_t     *local          = NULL;</div><div class='del'>-        dict_t          *gd_rsp_dict    = NULL;</div><div class='del'>-        quota_meta_t     used_space     = {0, };</div><div class='del'>-        quota_limits_t   limits         = {0, };</div><div class='del'>-        quota_limits_t  *size_limits    = NULL;</div><div class='del'>-        int32_t          type           = 0;</div><div class='del'>-        int32_t          success_count  = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        gd_rsp_dict = local-&gt;dict;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (rsp_dict, "type", &amp;type);</div><div class='add'>+print_quota_list_from_quotad(call_frame_t *frame, dict_t *rsp_dict)</div><div class='add'>+{</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *default_sl = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    dict_t *gd_rsp_dict = NULL;</div><div class='add'>+    quota_meta_t used_space = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_limits_t limits = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_limits_t *size_limits = NULL;</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    int32_t success_count = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    gd_rsp_dict = local-&gt;dict;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(rsp_dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(rsp_dict, GET_ANCESTRY_PATH_KEY, &amp;path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_WARNING,</div><div class='add'>+               "path key is not present "</div><div class='add'>+               "in dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(gd_rsp_dict, "default-soft-limit", &amp;default_sl);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to "</div><div class='add'>+               "get default soft limit");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST) {</div><div class='add'>+        ret = dict_get_bin(rsp_dict, QUOTA_LIMIT_KEY, (void **)&amp;size_limits);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (rsp_dict, GET_ANCESTRY_PATH_KEY, &amp;path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_WARNING, "path key is not present "</div><div class='del'>-                        "in dict");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_WARNING, "limit key not present in dict on %s",</div><div class='add'>+                   path);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (gd_rsp_dict, "default-soft-limit", &amp;default_sl);</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_get_bin(rsp_dict, QUOTA_LIMIT_OBJECTS_KEY,</div><div class='add'>+                           (void **)&amp;size_limits);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                        "get default soft limit");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIST) {</div><div class='del'>-                ret = dict_get_bin (rsp_dict, QUOTA_LIMIT_KEY,</div><div class='del'>-                                    (void **)&amp;size_limits);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_WARNING,</div><div class='del'>-                                "limit key not present in dict on %s",</div><div class='del'>-                                path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_WARNING,</div><div class='add'>+                   "object limit key not present in dict on %s", path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    limits.hl = ntoh64(size_limits-&gt;hl);</div><div class='add'>+    limits.sl = ntoh64(size_limits-&gt;sl);</div><div class='add'>+</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='add'>+        ret = quota_dict_get_meta(rsp_dict, QUOTA_SIZE_KEY, &amp;used_space);</div><div class='add'>+    else</div><div class='add'>+        ret = quota_dict_get_inode_meta(rsp_dict, QUOTA_SIZE_KEY, &amp;used_space);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_WARNING, "size key not present in dict");</div><div class='add'>+        print_quota_list_empty(path, type);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;local-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = dict_get_int32(gd_rsp_dict, "quota-list-success-count",</div><div class='add'>+                             &amp;success_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            success_count = 0;</div><div class='add'>+</div><div class='add'>+        ret = dict_set_int32(gd_rsp_dict, "quota-list-success-count",</div><div class='add'>+                             success_count + 1);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to set "</div><div class='add'>+               "quota-list-success-count in dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (success_count == 0) {</div><div class='add'>+        if (!(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+            print_quota_list_header(type);</div><div class='ctx'>         } else {</div><div class='del'>-                ret = dict_get_bin (rsp_dict, QUOTA_LIMIT_OBJECTS_KEY,</div><div class='del'>-                                   (void **)&amp;size_limits);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_WARNING,</div><div class='del'>-                                "object limit key not present in dict on %s",</div><div class='del'>-                                path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        limits.hl = ntoh64 (size_limits-&gt;hl);</div><div class='del'>-        limits.sl = ntoh64 (size_limits-&gt;sl);</div><div class='del'>-</div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-                ret = quota_dict_get_meta (rsp_dict, QUOTA_SIZE_KEY,</div><div class='del'>-                                           &amp;used_space);</div><div class='del'>-        else</div><div class='del'>-                ret = quota_dict_get_inode_meta (rsp_dict, QUOTA_SIZE_KEY,</div><div class='del'>-                                                 &amp;used_space);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_WARNING,</div><div class='del'>-                        "size key not present in dict");</div><div class='del'>-                print_quota_list_empty (path, type);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;local-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = dict_get_int32 (gd_rsp_dict, "quota-list-success-count",</div><div class='del'>-                                      &amp;success_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        success_count = 0;</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (gd_rsp_dict,</div><div class='del'>-                                      "quota-list-success-count",</div><div class='del'>-                                      success_count + 1);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;lock);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to set "</div><div class='del'>-                        "quota-list-success-count in dict");</div><div class='add'>+            ret = cli_xml_output_vol_quota_limit_list_begin(local, 0, 0, NULL);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Error in "</div><div class='add'>+                       "printing xml output");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (success_count == 0) {</div><div class='del'>-                if (!(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                        print_quota_list_header (type);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = cli_xml_output_vol_quota_limit_list_begin</div><div class='del'>-                                (local, 0, 0, NULL);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Error in "</div><div class='del'>-                                        "printing xml output");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = print_quota_list_output (local, path, default_sl, &amp;limits,</div><div class='del'>-                                       &amp;used_space, type, _gf_true);</div><div class='add'>+    ret = print_quota_list_output(local, path, default_sl, &amp;limits, &amp;used_space,</div><div class='add'>+                                  type, _gf_true);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void*</div><div class='del'>-cli_cmd_broadcast_response_detached (void *opaque)</div><div class='add'>+void *</div><div class='add'>+cli_cmd_broadcast_response_detached(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = (intptr_t) opaque;</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    ret = (intptr_t)opaque;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_quota_compare_path (struct list_head *list1,</div><div class='del'>-                        struct list_head *list2)</div><div class='add'>+cli_quota_compare_path(struct list_head *list1, struct list_head *list2)</div><div class='ctx'> {</div><div class='del'>-        struct list_node  *node1  = NULL;</div><div class='del'>-        struct list_node  *node2  = NULL;</div><div class='del'>-        dict_t            *dict1  = NULL;</div><div class='del'>-        dict_t            *dict2  = NULL;</div><div class='del'>-        char              *path1  = NULL;</div><div class='del'>-        char              *path2  = NULL;</div><div class='del'>-        int                ret    = 0;</div><div class='add'>+    struct list_node *node1 = NULL;</div><div class='add'>+    struct list_node *node2 = NULL;</div><div class='add'>+    dict_t *dict1 = NULL;</div><div class='add'>+    dict_t *dict2 = NULL;</div><div class='add'>+    char *path1 = NULL;</div><div class='add'>+    char *path2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        node1 = list_entry (list1, struct list_node, list);</div><div class='del'>-        node2 = list_entry (list2, struct list_node, list);</div><div class='add'>+    node1 = list_entry(list1, struct list_node, list);</div><div class='add'>+    node2 = list_entry(list2, struct list_node, list);</div><div class='ctx'> </div><div class='del'>-        dict1 = node1-&gt;ptr;</div><div class='del'>-        dict2 = node2-&gt;ptr;</div><div class='add'>+    dict1 = node1-&gt;ptr;</div><div class='add'>+    dict2 = node2-&gt;ptr;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict1, GET_ANCESTRY_PATH_KEY, &amp;path1);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return 0;</div><div class='add'>+    ret = dict_get_str(dict1, GET_ANCESTRY_PATH_KEY, &amp;path1);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict2, GET_ANCESTRY_PATH_KEY, &amp;path2);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return 0;</div><div class='add'>+    ret = dict_get_str(dict2, GET_ANCESTRY_PATH_KEY, &amp;path2);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        return strcmp (path1, path2);</div><div class='add'>+    return strcmp(path1, path2);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quotad_getlimit_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                          int count, void *myframe)</div><div class='add'>+cli_quotad_getlimit_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                        void *myframe)</div><div class='ctx'> {</div><div class='ctx'>     /*TODO: we need to gather the path, hard-limit, soft-limit and used space*/</div><div class='del'>-        gf_cli_rsp         rsp         = {0,};</div><div class='del'>-        int                ret         = -1;</div><div class='del'>-        dict_t            *dict        = NULL;</div><div class='del'>-        struct list_node  *node        = NULL;</div><div class='del'>-        struct list_node  *tmpnode     = NULL;</div><div class='del'>-        call_frame_t      *frame       = NULL;</div><div class='del'>-        cli_local_t       *local       = NULL;</div><div class='del'>-        int32_t            list_count  = 0;</div><div class='del'>-        pthread_t          th_id       = {0, };</div><div class='del'>-        int32_t            max_count   = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;local-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = dict_get_int32 (local-&gt;dict, "quota-list-count",</div><div class='del'>-                                      &amp;list_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        list_count = 0;</div><div class='del'>-</div><div class='del'>-                list_count++;</div><div class='del'>-                ret = dict_set_int32 (local-&gt;dict, "quota-list-count",</div><div class='del'>-                                      list_count);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to set "</div><div class='del'>-                        "quota-list-count in dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                if (list_count == 0)</div><div class='del'>-                        cli_err ("Connection failed. Please check if quota "</div><div class='del'>-                                 "daemon is operational.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        cli_err ("quota command failed : %s", rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        cli_err ("quota command : failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                dict  = dict_new ();</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "failed to "</div><div class='del'>-                                "unserialize req-buffer to dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                node = list_node_add_order (dict, &amp;local-&gt;dict_list,</div><div class='del'>-                                            cli_quota_compare_path);</div><div class='del'>-                if (node == NULL) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "failed to add node to the list");</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    struct list_node *node = NULL;</div><div class='add'>+    struct list_node *tmpnode = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    int32_t list_count = 0;</div><div class='add'>+    pthread_t th_id = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t max_count = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;local-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = dict_get_int32(local-&gt;dict, "quota-list-count", &amp;list_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            list_count = 0;</div><div class='add'>+</div><div class='add'>+        list_count++;</div><div class='add'>+        ret = dict_set_int32(local-&gt;dict, "quota-list-count", list_count);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to set "</div><div class='add'>+               "quota-list-count in dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        if (list_count == 0)</div><div class='add'>+            cli_err(</div><div class='add'>+                "Connection failed. Please check if quota "</div><div class='add'>+                "daemon is operational.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            cli_err("quota command failed : %s", rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            cli_err("quota command : failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-       }</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "max_count",</div><div class='del'>-                              &amp;max_count);</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "failed to get max_count");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "unserialize req-buffer to dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (list_count == max_count) {</div><div class='del'>-                list_for_each_entry_safe (node, tmpnode,</div><div class='del'>-                                          &amp;local-&gt;dict_list, list) {</div><div class='del'>-                        dict = node-&gt;ptr;</div><div class='del'>-                        print_quota_list_from_quotad (frame, dict);</div><div class='del'>-                        list_node_del (node);</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-                }</div><div class='add'>+        node = list_node_add_order(dict, &amp;local-&gt;dict_list,</div><div class='add'>+                                   cli_quota_compare_path);</div><div class='add'>+        if (node == NULL) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "failed to add node to the list");</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "max_count", &amp;max_count);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "failed to get max_count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (list_count == max_count) {</div><div class='add'>+        list_for_each_entry_safe(node, tmpnode, &amp;local-&gt;dict_list, list)</div><div class='add'>+        {</div><div class='add'>+            dict = node-&gt;ptr;</div><div class='add'>+            print_quota_list_from_quotad(frame, dict);</div><div class='add'>+            list_node_del(node);</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    /* Bad Fix: CLI holds the lock to process a command.</div><div class='add'>+     * When processing quota list command, below sequence of steps executed</div><div class='add'>+     * in the same thread and causing deadlock</div><div class='add'>+     *</div><div class='add'>+     * 1) CLI holds the lock</div><div class='add'>+     * 2) Send rpc_clnt_submit request to quotad for quota usage</div><div class='add'>+     * 3) If quotad is down, rpc_clnt_submit invokes cbk function with error</div><div class='add'>+     * 4) cbk function cli_quotad_getlimit_cbk invokes</div><div class='add'>+     *    cli_cmd_broadcast_response which tries to hold lock to broadcast</div><div class='add'>+     *    the results and hangs, because same thread has already holding</div><div class='add'>+     *    the lock</div><div class='add'>+     *</div><div class='add'>+     * Broadcasting response in a separate thread which is not a</div><div class='add'>+     * good fix. This needs to be re-visted with better solution</div><div class='add'>+     */</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        ret = pthread_create(&amp;th_id, NULL, cli_cmd_broadcast_response_detached,</div><div class='add'>+                             (void *)-1);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "pthread_create failed: "</div><div class='add'>+                   "%s",</div><div class='add'>+                   strerror(errno));</div><div class='add'>+    } else {</div><div class='add'>+        cli_cmd_broadcast_response(ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        /* Bad Fix: CLI holds the lock to process a command.</div><div class='del'>-         * When processing quota list command, below sequence of steps executed</div><div class='del'>-         * in the same thread and causing deadlock</div><div class='del'>-         *</div><div class='del'>-         * 1) CLI holds the lock</div><div class='del'>-         * 2) Send rpc_clnt_submit request to quotad for quota usage</div><div class='del'>-         * 3) If quotad is down, rpc_clnt_submit invokes cbk function with error</div><div class='del'>-         * 4) cbk function cli_quotad_getlimit_cbk invokes</div><div class='del'>-         *    cli_cmd_broadcast_response which tries to hold lock to broadcast</div><div class='del'>-         *    the results and hangs, because same thread has already holding</div><div class='del'>-         *    the lock</div><div class='del'>-         *</div><div class='del'>-         * Broadcasting response in a separate thread which is not a</div><div class='del'>-         * good fix. This needs to be re-visted with better solution</div><div class='del'>-         */</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                ret = pthread_create (&amp;th_id, NULL,</div><div class='del'>-                                cli_cmd_broadcast_response_detached,</div><div class='del'>-                                (void *)-1);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "pthread_create failed: "</div><div class='del'>-                                "%s", strerror (errno));</div><div class='del'>-        } else {</div><div class='del'>-                cli_cmd_broadcast_response (ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quotad_getlimit (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+cli_quotad_getlimit(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req          req = {{0,}};</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-        dict_t             *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='del'>-        ret = add_cli_cmd_timeout_to_dict (dict);</div><div class='add'>+    dict = data;</div><div class='add'>+    ret = add_cli_cmd_timeout_to_dict(dict);</div><div class='ctx'> </div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.dict.dict_val,</div><div class='del'>-                                           &amp;req.dict.dict_len);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to serialize the data");</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.dict.dict_val,</div><div class='add'>+                                      &amp;req.dict.dict_len);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to serialize the data");</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (global_quotad_rpc, &amp;req, frame, &amp;cli_quotad_clnt,</div><div class='del'>-                              GF_AGGREGATOR_GETLIMIT, NULL,</div><div class='del'>-                              this, cli_quotad_getlimit_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf_cli_req);</div><div class='add'>+    ret = cli_cmd_submit(global_quotad_rpc, &amp;req, frame, &amp;cli_quotad_clnt,</div><div class='add'>+                         GF_AGGREGATOR_GETLIMIT, NULL, this,</div><div class='add'>+                         cli_quotad_getlimit_cbk, (xdrproc_t)xdr_gf_cli_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_cli_quota_list (cli_local_t *local, char *volname, dict_t *dict,</div><div class='del'>-                   char *default_sl, int count, int op_ret,</div><div class='del'>-                   int op_errno, char *op_errstr)</div><div class='add'>+gf_cli_quota_list(cli_local_t *local, char *volname, dict_t *dict,</div><div class='add'>+                  char *default_sl, int count, int op_ret, int op_errno,</div><div class='add'>+                  char *op_errstr)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", volname, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", volname, out);</div><div class='ctx'> </div><div class='del'>-        if (!connected)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!connected)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (count &gt; 0)</div><div class='del'>-                gf_cli_print_limit_list_from_dict (local, volname, dict,</div><div class='del'>-                                                   default_sl, count, op_ret,</div><div class='del'>-                                                   op_errno, op_errstr);</div><div class='add'>+    if (count &gt; 0)</div><div class='add'>+        gf_cli_print_limit_list_from_dict(local, volname, dict, default_sl,</div><div class='add'>+                                          count, op_ret, op_errno, op_errstr);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_quota_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                     int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp         rsp         = {0,};</div><div class='del'>-        int                ret         = -1;</div><div class='del'>-        dict_t            *dict        = NULL;</div><div class='del'>-        char              *volname     = NULL;</div><div class='del'>-        int32_t            type        = 0;</div><div class='del'>-        call_frame_t      *frame       = NULL;</div><div class='del'>-        char              *default_sl  = NULL;</div><div class='del'>-        cli_local_t       *local       = NULL;</div><div class='del'>-        char              *default_sl_dup  = NULL;</div><div class='del'>-        int32_t            entry_count      = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='add'>+gf_cli_quota_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                 void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char *default_sl = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *default_sl_dup = NULL;</div><div class='add'>+    int32_t entry_count = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+            goto xml_output;</div><div class='add'>+</div><div class='add'>+        if (strcmp(rsp.op_errstr, "")) {</div><div class='add'>+            cli_err("quota command failed : %s", rsp.op_errstr);</div><div class='add'>+            if (rsp.op_ret == -ENOENT)</div><div class='add'>+                cli_err(</div><div class='add'>+                    "please enter the path relative to "</div><div class='add'>+                    "the volume");</div><div class='add'>+        } else {</div><div class='add'>+            cli_err("quota command : failed");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                        goto xml_output;</div><div class='del'>-</div><div class='del'>-                if (strcmp (rsp.op_errstr, "")) {</div><div class='del'>-                        cli_err ("quota command failed : %s", rsp.op_errstr);</div><div class='del'>-                        if (rsp.op_ret == -ENOENT)</div><div class='del'>-                                cli_err ("please enter the path relative to "</div><div class='del'>-                                         "the volume");</div><div class='del'>-                } else {</div><div class='del'>-                        cli_err ("quota command : failed");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                dict  = dict_new ();</div><div class='del'>-</div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "failed to "</div><div class='del'>-                                "unserialize req-buffer to dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "unserialize req-buffer to dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to quota command");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to get volname");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "default-soft-limit", &amp;default_sl);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "failed to get "</div><div class='add'>+               "default soft limit");</div><div class='add'>+</div><div class='add'>+    // default-soft-limit is part of rsp_dict only iff we sent</div><div class='add'>+    // GLUSTER_CLI_QUOTA with type being GF_QUOTA_OPTION_TYPE_LIST</div><div class='add'>+    if (default_sl) {</div><div class='add'>+        default_sl_dup = gf_strdup(default_sl);</div><div class='add'>+        if (!default_sl_dup) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_dynstr(local-&gt;dict, "default-soft-limit",</div><div class='add'>+                              default_sl_dup);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(frame-&gt;this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "failed to set default soft limit");</div><div class='add'>+            GF_FREE(default_sl_dup);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to quota command");</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_TRACE, "failed to get type");</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to get volname");</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;entry_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_TRACE, "failed to get count");</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "default-soft-limit", &amp;default_sl);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_TRACE, "failed to get "</div><div class='del'>-                        "default soft limit");</div><div class='del'>-</div><div class='del'>-        // default-soft-limit is part of rsp_dict only iff we sent</div><div class='del'>-        // GLUSTER_CLI_QUOTA with type being GF_QUOTA_OPTION_TYPE_LIST</div><div class='del'>-        if (default_sl) {</div><div class='del'>-                default_sl_dup = gf_strdup (default_sl);</div><div class='del'>-                if (!default_sl_dup) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_dynstr (local-&gt;dict, "default-soft-limit",</div><div class='del'>-                                       default_sl_dup);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (frame-&gt;this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "failed to set default soft limit");</div><div class='del'>-                        GF_FREE (default_sl_dup);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "failed to get type");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;entry_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_TRACE, "failed to get count");</div><div class='add'>+    if ((type == GF_QUOTA_OPTION_TYPE_LIST) ||</div><div class='add'>+        (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) {</div><div class='add'>+        gf_cli_quota_list(local, volname, dict, default_sl, entry_count,</div><div class='add'>+                          rsp.op_ret, rsp.op_errno, rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        if ((type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-            || (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) {</div><div class='del'>-                gf_cli_quota_list (local, volname, dict, default_sl,</div><div class='del'>-                                   entry_count, rsp.op_ret,</div><div class='del'>-                                   rsp.op_errno, rsp.op_errstr);</div><div class='del'>-</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        ret = cli_xml_output_vol_quota_limit_list_end (local);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Error in printing"</div><div class='del'>-                                       " xml output");</div><div class='del'>-                        }</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+            ret = cli_xml_output_vol_quota_limit_list_end(local);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Error in printing"</div><div class='add'>+                       " xml output");</div><div class='add'>+            }</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> xml_output:</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volQuota", NULL, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volQuota", NULL, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rsp.op_ret &amp;&amp; type != GF_QUOTA_OPTION_TYPE_LIST</div><div class='del'>-                        &amp;&amp; type != GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)</div><div class='del'>-                cli_out ("volume quota : success");</div><div class='add'>+    if (!rsp.op_ret &amp;&amp; type != GF_QUOTA_OPTION_TYPE_LIST &amp;&amp;</div><div class='add'>+        type != GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)</div><div class='add'>+        cli_out("volume quota : success");</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if ((type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-            || (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) {</div><div class='del'>-                gluster_remove_auxiliary_mount (volname);</div><div class='del'>-        }</div><div class='add'>+    if ((type == GF_QUOTA_OPTION_TYPE_LIST) ||</div><div class='add'>+        (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) {</div><div class='add'>+        gluster_remove_auxiliary_mount(volname);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_getspec_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                       int count, void *myframe)</div><div class='add'>+gf_cli_getspec_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                   void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_getspec_rsp          rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        char                   *spec  = NULL;</div><div class='add'>+    gf_getspec_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *spec = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_getspec_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_getspec_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret == -1) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "getspec failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret == -1) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "getspec failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to getspec");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to getspec");</div><div class='ctx'> </div><div class='del'>-        spec = GF_MALLOC (rsp.op_ret + 1, cli_mt_char);</div><div class='del'>-        if (!spec) {</div><div class='del'>-                gf_log("", GF_LOG_ERROR, "out of memory");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        memcpy (spec, rsp.spec, rsp.op_ret);</div><div class='del'>-        spec[rsp.op_ret] = '\0';</div><div class='del'>-        cli_out ("%s", spec);</div><div class='del'>-        GF_FREE (spec);</div><div class='add'>+    spec = GF_MALLOC(rsp.op_ret + 1, cli_mt_char);</div><div class='add'>+    if (!spec) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "out of memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    memcpy(spec, rsp.spec, rsp.op_ret);</div><div class='add'>+    spec[rsp.op_ret] = '\0';</div><div class='add'>+    cli_out("%s", spec);</div><div class='add'>+    GF_FREE(spec);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_pmap_b2p_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                        int count, void *myframe)</div><div class='add'>+gf_cli_pmap_b2p_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                    void *myframe)</div><div class='ctx'> {</div><div class='del'>-        pmap_port_by_brick_rsp rsp = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        char                   *spec  = NULL;</div><div class='add'>+    pmap_port_by_brick_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *spec = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_pmap_port_by_brick_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_pmap_port_by_brick_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret == -1) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "pump_b2p failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret == -1) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "pump_b2p failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to pmap b2p");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to pmap b2p");</div><div class='ctx'> </div><div class='del'>-        cli_out ("%d", rsp.port);</div><div class='del'>-        GF_FREE (spec);</div><div class='add'>+    cli_out("%d", rsp.port);</div><div class='add'>+    GF_FREE(spec);</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_probe (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 void *data)</div><div class='add'>+gf_cli_probe(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req         req      = {{0,},};</div><div class='del'>-        int                ret      = 0;</div><div class='del'>-        dict_t            *dict     = NULL;</div><div class='del'>-        int                port     = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "port", &amp;port);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = dict_set_int32 (dict, "port", CLI_GLUSTERD_PORT);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_cli_req req = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int port = 0;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "port", &amp;port);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = dict_set_int32(dict, "port", CLI_GLUSTERD_PORT);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_probe_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_PROBE, this, cli_rpc_prog, NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_probe_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_PROBE,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_deprobe (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   void *data)</div><div class='add'>+gf_cli_deprobe(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req           req      = {{0,},};</div><div class='del'>-        int                  ret      = 0;</div><div class='del'>-        dict_t              *dict     = NULL;</div><div class='del'>-        int                  port     = 0;</div><div class='del'>-        int                  flags    = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-        ret = dict_get_int32 (dict, "port", &amp;port);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = dict_set_int32 (dict, "port", CLI_GLUSTERD_PORT);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_cli_req req = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int port = 0;</div><div class='add'>+    int flags = 0;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+    ret = dict_get_int32(dict, "port", &amp;port);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = dict_set_int32(dict, "port", CLI_GLUSTERD_PORT);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "flags", &amp;flags);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = dict_set_int32 (dict, "flags", 0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "flags", &amp;flags);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = dict_set_int32(dict, "flags", 0);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_deprobe_cbk,</div><div class='del'>-                               (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='del'>-                              GLUSTER_CLI_DEPROBE, this, cli_rpc_prog, NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_deprobe_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_DEPROBE,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_list_friends (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     void *data)</div><div class='add'>+gf_cli_list_friends(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_peer_list_req   req = {0,};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        unsigned long           flags = 0;</div><div class='add'>+    gf1_cli_peer_list_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned long flags = 0;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame-&gt;local == NULL);</div><div class='add'>+    GF_ASSERT(frame-&gt;local == NULL);</div><div class='ctx'> </div><div class='del'>-        flags = (long)data;</div><div class='del'>-        req.flags = flags;</div><div class='del'>-        frame-&gt;local = (void*)flags;</div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_LIST_FRIENDS, NULL,</div><div class='del'>-                              this, gf_cli_list_friends_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf1_cli_peer_list_req);</div><div class='add'>+    flags = (long)data;</div><div class='add'>+    req.flags = flags;</div><div class='add'>+    frame-&gt;local = (void *)flags;</div><div class='add'>+    ret = cli_cmd_submit(</div><div class='add'>+        NULL, &amp;req, frame, cli_rpc_prog, GLUSTER_CLI_LIST_FRIENDS, NULL, this,</div><div class='add'>+        gf_cli_list_friends_cbk, (xdrproc_t)xdr_gf1_cli_peer_list_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; frame) {</div><div class='del'>-                /*</div><div class='del'>-                 * If everything goes fine, gf_cli_list_friends_cbk()</div><div class='del'>-                 * [invoked through cli_cmd_submit()]resets the</div><div class='del'>-                 * frame-&gt;local to NULL. In case cli_cmd_submit()</div><div class='del'>-                 * fails in between, RESET frame-&gt;local here.</div><div class='del'>-                 */</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-        }</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; frame) {</div><div class='add'>+        /*</div><div class='add'>+         * If everything goes fine, gf_cli_list_friends_cbk()</div><div class='add'>+         * [invoked through cli_cmd_submit()]resets the</div><div class='add'>+         * frame-&gt;local to NULL. In case cli_cmd_submit()</div><div class='add'>+         * fails in between, RESET frame-&gt;local here.</div><div class='add'>+         */</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_get_state (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_get_state(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req =  {{0,},};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_get_state_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_GET_STATE, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_get_state_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_GET_STATE, this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_get_next_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                           void *data)</div><div class='add'>+gf_cli_get_next_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cli_cmd_volume_get_ctx_t *ctx = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        int                             ret = 0;</div><div class='del'>-        cli_cmd_volume_get_ctx_t        *ctx = NULL;</div><div class='del'>-        cli_local_t                     *local = NULL;</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ctx = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ctx = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_info_begin (local, 0, 0, "");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_info_begin(local, 0, 0, "");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_cli_get_volume (frame, this, data);</div><div class='del'>-</div><div class='add'>+    ret = gf_cli_get_volume(frame, this, data);</div><div class='ctx'> </div><div class='del'>-        if (!local || !local-&gt;get_vol.volname) {</div><div class='del'>-                if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML))</div><div class='del'>-                        goto end_xml;</div><div class='add'>+    if (!local || !local-&gt;get_vol.volname) {</div><div class='add'>+        if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML))</div><div class='add'>+            goto end_xml;</div><div class='ctx'> </div><div class='del'>-                cli_err ("No volumes present");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        cli_err("No volumes present");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ctx-&gt;volname = local-&gt;get_vol.volname;</div><div class='ctx'> </div><div class='add'>+    while (ctx-&gt;volname) {</div><div class='add'>+        ret = gf_cli_get_volume(frame, this, ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'>         ctx-&gt;volname = local-&gt;get_vol.volname;</div><div class='del'>-</div><div class='del'>-        while (ctx-&gt;volname) {</div><div class='del'>-                ret = gf_cli_get_volume (frame, this, ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ctx-&gt;volname = local-&gt;get_vol.volname;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> end_xml:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_info_end (local);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_info_end(local);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_get_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      void *data)</div><div class='add'>+gf_cli_get_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req = {{0,}};</div><div class='del'>-        int                             ret = 0;</div><div class='del'>-        cli_cmd_volume_get_ctx_t        *ctx = NULL;</div><div class='del'>-        dict_t                          *dict = NULL;</div><div class='del'>-        int32_t                         flags = 0;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cli_cmd_volume_get_ctx_t *ctx = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t flags = 0;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx = data;</div><div class='add'>+    ctx = data;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;volname) {</div><div class='del'>-                ret = dict_set_str (dict, "volname", ctx-&gt;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ctx-&gt;volname) {</div><div class='add'>+        ret = dict_set_str(dict, "volname", ctx-&gt;volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        flags = ctx-&gt;flags;</div><div class='del'>-        ret = dict_set_int32 (dict, "flags", flags);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to set flags");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    flags = ctx-&gt;flags;</div><div class='add'>+    ret = dict_set_int32(dict, "flags", flags);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to set flags");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.dict.dict_val,</div><div class='del'>-                                           &amp;req.dict.dict_len);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to serialize dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.dict.dict_val,</div><div class='add'>+                                      &amp;req.dict.dict_len);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to serialize dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_GET_VOLUME, NULL,</div><div class='del'>-                              this, gf_cli_get_volume_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf_cli_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog,</div><div class='add'>+                         GLUSTER_CLI_GET_VOLUME, NULL, this,</div><div class='add'>+                         gf_cli_get_volume_cbk, (xdrproc_t)xdr_gf_cli_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli3_1_uuid_get (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      void *data)</div><div class='add'>+gf_cli3_1_uuid_get(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req = {{0,}};</div><div class='del'>-        int                             ret = 0;</div><div class='del'>-        dict_t                          *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli3_1_uuid_get_cbk,</div><div class='del'>-                               (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_UUID_GET, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    dict = data;</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli3_1_uuid_get_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_UUID_GET,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli3_1_uuid_reset (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      void *data)</div><div class='add'>+gf_cli3_1_uuid_reset(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req = {{0,}};</div><div class='del'>-        int                             ret = 0;</div><div class='del'>-        dict_t                          *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli3_1_uuid_reset_cbk,</div><div class='del'>-                               (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_UUID_RESET, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    dict = data;</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli3_1_uuid_reset_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_UUID_RESET, this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_create_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_create_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req = {{0,}};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_create_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_CREATE_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_create_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_CREATE_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_delete_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_delete_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req = {{0,}};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_delete_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_DELETE_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_delete_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_DELETE_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_start_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_start_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req = {{0,}};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_start_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_START_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_start_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_START_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_stop_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_stop_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req             req = {{0,}};</div><div class='del'>-        int                    ret = 0;</div><div class='del'>-        dict_t                 *dict = data;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = data;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_stop_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_STOP_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_stop_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_STOP_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_defrag_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_defrag_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req     =  {{0,}};</div><div class='del'>-        int                     ret     = 0;</div><div class='del'>-        dict_t                 *dict    = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_defrag_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_DEFRAG_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_defrag_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_DEFRAG_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_rename_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_rename_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req = {{0,}};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.dict.dict_val,</div><div class='del'>-                                           &amp;req.dict.dict_len);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to serialize the data");</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.dict.dict_val,</div><div class='add'>+                                      &amp;req.dict.dict_len);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to serialize the data");</div><div class='ctx'> </div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_RENAME_VOLUME, NULL,</div><div class='del'>-                              this, gf_cli_rename_volume_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf_cli_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog,</div><div class='add'>+                         GLUSTER_CLI_RENAME_VOLUME, NULL, this,</div><div class='add'>+                         gf_cli_rename_volume_cbk, (xdrproc_t)xdr_gf_cli_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_reset_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        void *data)</div><div class='add'>+gf_cli_reset_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req =  {{0,} };</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_reset_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_RESET_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_reset_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_RESET_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_set_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_set_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req =  {{0,} };</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_set_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_SET_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_set_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_SET_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_add_brick (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_add_brick(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req =  {{0,} };</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        int32_t                 count = 0;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int32_t count = 0;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_add_brick_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_ADD_BRICK, this, cli_rpc_prog, NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_add_brick_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_ADD_BRICK, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_tier (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             void *data)</div><div class='add'>+gf_cli_tier(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        int32_t                 command = 0;</div><div class='del'>-        gf_cli_req              req =  { {0,} };</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict = data;</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "rebalance-command", &amp;command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get rebalance-command");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "rebalance-command", &amp;command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get rebalance-command");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_defrag_volume_cbk,</div><div class='del'>-                                (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                                GLUSTER_CLI_TIER, this, cli_rpc_prog,</div><div class='del'>-                                NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_defrag_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_TIER,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_add_tier_brick (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                       void *data)</div><div class='add'>+gf_cli_add_tier_brick(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req             = { {0,} };</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        dict_t                  *dict           = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_add_tier_brick_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_ADD_TIER_BRICK, this,</div><div class='del'>-                               cli_rpc_prog, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to send request to "</div><div class='del'>-                        "glusterd");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_add_tier_brick_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_ADD_TIER_BRICK, this, cli_rpc_prog, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to send request to "</div><div class='add'>+               "glusterd");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_attach_tier (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    void *data)</div><div class='del'>-{</div><div class='del'>-        gf_cli_req              req             =  {{0,} };</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        dict_t                  *dict           = NULL;</div><div class='del'>-        dict_t                  *newdict        = NULL;</div><div class='del'>-        char                    *tierwords[]    = {"volume", "tier", "",</div><div class='del'>-                                                   "start", NULL};</div><div class='del'>-        const char              **words         = (const char **)tierwords;</div><div class='del'>-        char                    *volname        = NULL;</div><div class='del'>-        cli_local_t             *local          = NULL;</div><div class='del'>-        cli_local_t             *oldlocal       = NULL;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-</div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_attach_tier_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_ATTACH_TIER, this,</div><div class='del'>-                               cli_rpc_prog, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='del'>-                goto notify_cli;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        words[2] = volname;</div><div class='del'>-        ret = cli_cmd_volume_old_tier_parse ((const char **)words,</div><div class='del'>-                                             4, &amp;newdict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to parse tier start "</div><div class='del'>-                        "command");</div><div class='del'>-                goto notify_cli;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Sending tier start");</div><div class='del'>-</div><div class='del'>-        oldlocal = frame-&gt;local;</div><div class='del'>-        CLI_LOCAL_INIT (local, words, frame, newdict);</div><div class='del'>-        ret = gf_cli_tier (frame, this, newdict);</div><div class='del'>-        frame-&gt;local = oldlocal;</div><div class='del'>-        cli_local_wipe (local);</div><div class='add'>+gf_cli_attach_tier(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *newdict = NULL;</div><div class='add'>+    char *tierwords[] = {"volume", "tier", "", "start", NULL};</div><div class='add'>+    const char **words = (const char **)tierwords;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    cli_local_t *oldlocal = NULL;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_attach_tier_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_ATTACH_TIER, this, cli_rpc_prog, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='add'>+        goto notify_cli;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    words[2] = volname;</div><div class='add'>+    ret = cli_cmd_volume_old_tier_parse((const char **)words, 4, &amp;newdict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to parse tier start "</div><div class='add'>+               "command");</div><div class='add'>+        goto notify_cli;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Sending tier start");</div><div class='add'>+</div><div class='add'>+    oldlocal = frame-&gt;local;</div><div class='add'>+    CLI_LOCAL_INIT(local, words, frame, newdict);</div><div class='add'>+    ret = gf_cli_tier(frame, this, newdict);</div><div class='add'>+    frame-&gt;local = oldlocal;</div><div class='add'>+    cli_local_wipe(local);</div><div class='ctx'> </div><div class='ctx'> notify_cli:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_out ("Failed to run tier start. Please execute tier start "</div><div class='del'>-                         "command explicitly");</div><div class='del'>-                cli_out ("Usage : gluster volume tier &lt;volname&gt; start");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "Failed to run tier start. Please execute tier start "</div><div class='add'>+            "command explicitly");</div><div class='add'>+        cli_out("Usage : gluster volume tier &lt;volname&gt; start");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_remove_tier_brick (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    void *data)</div><div class='add'>+gf_cli_remove_tier_brick(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                status_req = { {0,} };</div><div class='del'>-        int                       ret = 0;</div><div class='del'>-        dict_t                   *dict = NULL;</div><div class='del'>-        int32_t                   command = 0;</div><div class='del'>-        char                     *volname = NULL;</div><div class='add'>+    gf_cli_req status_req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "command", &amp;command);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "command", &amp;command);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "rebalance-command", (int32_t) command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Failed to set dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(dict, "rebalance-command", (int32_t)command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to set dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;status_req, frame,</div><div class='del'>-                        gf_cli_remove_tier_brick_cbk,</div><div class='del'>-                        (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                        GLUSTER_CLI_TIER, this,</div><div class='del'>-                        cli_rpc_prog, NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;status_req, frame, gf_cli_remove_tier_brick_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_TIER,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (status_req.dict.dict_val);</div><div class='add'>+    GF_FREE(status_req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_remove_brick (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     void *data)</div><div class='del'>-{</div><div class='del'>-        gf_cli_req                req =  {{0,}};;</div><div class='del'>-        gf_cli_req                status_req =  {{0,}};;</div><div class='del'>-        int                       ret = 0;</div><div class='del'>-        dict_t                   *dict = NULL;</div><div class='del'>-        int32_t                   command = 0;</div><div class='del'>-        char                     *volname = NULL;</div><div class='del'>-        int32_t                   cmd = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "command", &amp;command);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if ((command != GF_OP_CMD_STATUS) &amp;&amp;</div><div class='del'>-            (command != GF_OP_CMD_STOP)) {</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                ret = cli_to_glusterd (&amp;req, frame, gf_cli_remove_brick_cbk,</div><div class='del'>-                                       (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                                       GLUSTER_CLI_REMOVE_BRICK, this,</div><div class='del'>-                                       cli_rpc_prog, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                /* Need rebalance status to be sent :-) */</div><div class='del'>-                if (command == GF_OP_CMD_STATUS)</div><div class='del'>-                        cmd |= GF_DEFRAG_CMD_STATUS;</div><div class='del'>-                else</div><div class='del'>-                        cmd |= GF_DEFRAG_CMD_STOP;</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (dict, "rebalance-command", (int32_t) cmd);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Failed to set dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+gf_cli_remove_brick(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    ;</div><div class='add'>+    gf_cli_req status_req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    ;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t command = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int32_t cmd = 0;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "command", &amp;command);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if ((command != GF_OP_CMD_STATUS) &amp;&amp; (command != GF_OP_CMD_STOP)) {</div><div class='add'>+        ret = cli_to_glusterd(</div><div class='add'>+            &amp;req, frame, gf_cli_remove_brick_cbk, (xdrproc_t)xdr_gf_cli_req,</div><div class='add'>+            dict, GLUSTER_CLI_REMOVE_BRICK, this, cli_rpc_prog, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        /* Need rebalance status to be sent :-) */</div><div class='add'>+        if (command == GF_OP_CMD_STATUS)</div><div class='add'>+            cmd |= GF_DEFRAG_CMD_STATUS;</div><div class='add'>+        else</div><div class='add'>+            cmd |= GF_DEFRAG_CMD_STOP;</div><div class='ctx'> </div><div class='del'>-                ret = cli_to_glusterd (&amp;status_req, frame,</div><div class='del'>-                                       gf_cli3_remove_brick_status_cbk,</div><div class='del'>-                                       (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                                       GLUSTER_CLI_DEFRAG_VOLUME, this,</div><div class='del'>-                                       cli_rpc_prog, NULL);</div><div class='add'>+        ret = dict_set_int32(dict, "rebalance-command", (int32_t)cmd);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to set dict");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                }</div><div class='add'>+        ret = cli_to_glusterd(</div><div class='add'>+            &amp;status_req, frame, gf_cli3_remove_brick_status_cbk,</div><div class='add'>+            (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_DEFRAG_VOLUME, this,</div><div class='add'>+            cli_rpc_prog, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (status_req.dict.dict_val);</div><div class='add'>+    GF_FREE(status_req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_reset_brick (call_frame_t *frame, xlator_t *this, void *data)</div><div class='del'>-{</div><div class='del'>-        gf_cli_req                  req        =  { {0,} };</div><div class='del'>-        int                         ret        = 0;</div><div class='del'>-        dict_t                     *dict       = NULL;</div><div class='del'>-        char                       *dst_brick  = NULL;</div><div class='del'>-        char                       *src_brick  = NULL;</div><div class='del'>-        char                       *volname    = NULL;</div><div class='del'>-        char                       *op         = NULL;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "operation", &amp;op);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on operation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='add'>+gf_cli_reset_brick(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *dst_brick = NULL;</div><div class='add'>+    char *src_brick = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *op = NULL;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "operation", &amp;op);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on operation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on volname failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "src-brick", &amp;src_brick);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on src-brick failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(op, "GF_RESET_OP_COMMIT") ||</div><div class='add'>+        !strcmp(op, "GF_RESET_OP_COMMIT_FORCE")) {</div><div class='add'>+        ret = dict_get_str(dict, "dst-brick", &amp;dst_brick);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on volname failed");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on dst-brick failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "src-brick", &amp;src_brick);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on src-brick failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "Received command reset-brick %s on %s.",</div><div class='add'>+           op, src_brick);</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (op, "GF_RESET_OP_COMMIT") ||</div><div class='del'>-            !strcmp (op, "GF_RESET_OP_COMMIT_FORCE")) {</div><div class='del'>-                ret = dict_get_str (dict, "dst-brick", &amp;dst_brick);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "dict_get on dst-brick failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "Received command reset-brick %s on %s.", op, src_brick);</div><div class='del'>-</div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_reset_brick_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_RESET_BRICK, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_reset_brick_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_RESET_BRICK, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_replace_brick (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      void *data)</div><div class='del'>-{</div><div class='del'>-        gf_cli_req                  req        =  {{0,}};</div><div class='del'>-        int                         ret        = 0;</div><div class='del'>-        dict_t                     *dict       = NULL;</div><div class='del'>-        char                       *src_brick  = NULL;</div><div class='del'>-        char                       *dst_brick  = NULL;</div><div class='del'>-        char                       *volname    = NULL;</div><div class='del'>-        int32_t                     op         = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_replace_brick(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *src_brick = NULL;</div><div class='add'>+    char *dst_brick = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int32_t op = 0;</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "operation", &amp;op);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on operation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on volname failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "src-brick", &amp;src_brick);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on src-brick failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "operation", &amp;op);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on operation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on volname failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "dst-brick", &amp;dst_brick);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dict_get on dst-brick failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(dict, "src-brick", &amp;src_brick);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on src-brick failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "dst-brick", &amp;dst_brick);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_get on dst-brick failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "Received command replace-brick %s with "</div><div class='del'>-                "%s with operation=%d", src_brick,</div><div class='del'>-                dst_brick, op);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Received command replace-brick %s with "</div><div class='add'>+           "%s with operation=%d",</div><div class='add'>+           src_brick, dst_brick, op);</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_replace_brick_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_REPLACE_BRICK, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_replace_brick_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_REPLACE_BRICK, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_log_rotate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      void *data)</div><div class='add'>+gf_cli_log_rotate(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                req = {{0,}};</div><div class='del'>-        int                       ret = 0;</div><div class='del'>-        dict_t                   *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_log_rotate_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_LOG_ROTATE, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_log_rotate_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_LOG_ROTATE, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_sync_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                       void *data)</div><div class='add'>+gf_cli_sync_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        gf_cli_req        req = {{0,}};</div><div class='del'>-        dict_t            *dict = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_sync_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_SYNC_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_sync_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_SYNC_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_getspec (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='del'>-{</div><div class='del'>-        gf_getspec_req          req = {0,};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        dict_t                  *op_dict = NULL;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volid", &amp;req.key);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        op_dict = dict_new ();</div><div class='del'>-        if (!op_dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        // Set the supported min and max op-versions, so glusterd can make a</div><div class='del'>-        // decision</div><div class='del'>-        ret = dict_set_int32 (op_dict, "min-op-version", GD_OP_VERSION_MIN);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to set min-op-version"</div><div class='del'>-                        " in request dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (op_dict, "max-op-version", GD_OP_VERSION_MAX);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to set max-op-version"</div><div class='del'>-                        " in request dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_allocate_and_serialize (op_dict, &amp;req.xdata.xdata_val,</div><div class='del'>-                                           &amp;req.xdata.xdata_len);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to serialize dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, &amp;cli_handshake_prog,</div><div class='del'>-                              GF_HNDSK_GETSPEC, NULL,</div><div class='del'>-                              this, gf_cli_getspec_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf_getspec_req);</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        if (op_dict) {</div><div class='del'>-                dict_unref(op_dict);</div><div class='del'>-        }</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+gf_cli_getspec(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_getspec_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *op_dict = NULL;</div><div class='add'>+</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volid", &amp;req.key);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    op_dict = dict_new();</div><div class='add'>+    if (!op_dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // Set the supported min and max op-versions, so glusterd can make a</div><div class='add'>+    // decision</div><div class='add'>+    ret = dict_set_int32(op_dict, "min-op-version", GD_OP_VERSION_MIN);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set min-op-version"</div><div class='add'>+               " in request dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(op_dict, "max-op-version", GD_OP_VERSION_MAX);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set max-op-version"</div><div class='add'>+               " in request dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_allocate_and_serialize(op_dict, &amp;req.xdata.xdata_val,</div><div class='add'>+                                      &amp;req.xdata.xdata_len);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Failed to serialize dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, &amp;cli_handshake_prog,</div><div class='add'>+                         GF_HNDSK_GETSPEC, NULL, this, gf_cli_getspec_cbk,</div><div class='add'>+                         (xdrproc_t)xdr_gf_getspec_req);</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    if (op_dict) {</div><div class='add'>+        dict_unref(op_dict);</div><div class='add'>+    }</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_quota (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 void *data)</div><div class='add'>+gf_cli_quota(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req          req = {{0,}};</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-        dict_t             *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_quota_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_QUOTA, this, cli_rpc_prog, NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_quota_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_QUOTA,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_pmap_b2p (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_pmap_b2p(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        pmap_port_by_brick_req  req = {0,};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    pmap_port_by_brick_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "brick", &amp;req.brick);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(dict, "brick", &amp;req.brick);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, &amp;cli_pmap_prog,</div><div class='del'>-                              GF_PMAP_PORTBYBRICK, NULL,</div><div class='del'>-                              this, gf_cli_pmap_b2p_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_pmap_port_by_brick_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, &amp;cli_pmap_prog, GF_PMAP_PORTBYBRICK,</div><div class='add'>+                         NULL, this, gf_cli_pmap_b2p_cbk,</div><div class='add'>+                         (xdrproc_t)xdr_pmap_port_by_brick_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_cli_fsm_log_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                       int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf1_cli_fsm_log_rsp        rsp   = {0,};</div><div class='del'>-        int                        ret   = -1;</div><div class='del'>-        dict_t                     *dict = NULL;</div><div class='del'>-        int                        tr_count = 0;</div><div class='del'>-        char                       key[256] = {0};</div><div class='del'>-        int                        i = 0;</div><div class='del'>-        char                       *old_state = NULL;</div><div class='del'>-        char                       *new_state = NULL;</div><div class='del'>-        char                       *event = NULL;</div><div class='del'>-        char                       *time = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_fsm_log_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        cli_err ("%s", rsp.op_errstr);</div><div class='del'>-                cli_err ("fsm log unsuccessful");</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.fsm_log.fsm_log_val,</div><div class='del'>-                                rsp.fsm_log.fsm_log_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_err ("bad response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;tr_count);</div><div class='del'>-        if (tr_count)</div><div class='del'>-                cli_out("number of transitions: %d", tr_count);</div><div class='del'>-        else</div><div class='del'>-                cli_err("No transitions");</div><div class='del'>-        for (i = 0; i &lt; tr_count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "log%d-old-state", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;old_state);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+gf_cli_fsm_log_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                   void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf1_cli_fsm_log_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int tr_count = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *old_state = NULL;</div><div class='add'>+    char *new_state = NULL;</div><div class='add'>+    char *event = NULL;</div><div class='add'>+    char *time = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_fsm_log_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            cli_err("%s", rsp.op_errstr);</div><div class='add'>+        cli_err("fsm log unsuccessful");</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.fsm_log.fsm_log_val, rsp.fsm_log.fsm_log_len,</div><div class='add'>+                           &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_err("bad response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;tr_count);</div><div class='add'>+    if (tr_count)</div><div class='add'>+        cli_out("number of transitions: %d", tr_count);</div><div class='add'>+    else</div><div class='add'>+        cli_err("No transitions");</div><div class='add'>+    for (i = 0; i &lt; tr_count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "log%d-old-state", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;old_state);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "log%d-event", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;event);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "log%d-event", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;event);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "log%d-new-state", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;new_state);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "log%d-new-state", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;new_state);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "log%d-time", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;time);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("Old State: [%s]\n"</div><div class='del'>-                         "New State: [%s]\n"</div><div class='del'>-                         "Event    : [%s]\n"</div><div class='del'>-                         "timestamp: [%s]\n", old_state, new_state, event, time);</div><div class='del'>-        }</div><div class='add'>+        snprintf(key, sizeof(key), "log%d-time", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;time);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out(</div><div class='add'>+            "Old State: [%s]\n"</div><div class='add'>+            "New State: [%s]\n"</div><div class='add'>+            "Event    : [%s]\n"</div><div class='add'>+            "timestamp: [%s]\n",</div><div class='add'>+            old_state, new_state, event, time);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_fsm_log (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_fsm_log(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                        ret = -1;</div><div class='del'>-        gf1_cli_fsm_log_req        req = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf1_cli_fsm_log_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (data);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(data);</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='del'>-        req.name = data;</div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_FSM_LOG, NULL,</div><div class='del'>-                              this, gf_cli_fsm_log_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf1_cli_fsm_log_req);</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='add'>+    req.name = data;</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog, GLUSTER_CLI_FSM_LOG,</div><div class='add'>+                         NULL, this, gf_cli_fsm_log_cbk,</div><div class='add'>+                         (xdrproc_t)xdr_gf1_cli_fsm_log_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_gsync_config_command (dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        runner_t runner     = {0,};</div><div class='del'>-        char *subop         = NULL;</div><div class='del'>-        char *gwd           = NULL;</div><div class='del'>-        char *slave         = NULL;</div><div class='del'>-        char *confpath      = NULL;</div><div class='del'>-        char *master        = NULL;</div><div class='del'>-        char *op_name       = NULL;</div><div class='del'>-        int   ret           = -1;</div><div class='del'>-        char  conf_path[PATH_MAX] = "";</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (dict, "subop", &amp;subop) != 0)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (strcmp (subop, "get") != 0 &amp;&amp; strcmp (subop, "get-all") != 0) {</div><div class='del'>-                cli_out (GEOREP" config updated successfully");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (dict, "glusterd_workdir", &amp;gwd) != 0 ||</div><div class='del'>-            dict_get_str (dict, "slave", &amp;slave) != 0)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                master = NULL;</div><div class='del'>-        if (dict_get_str (dict, "op_name", &amp;op_name) != 0)</div><div class='del'>-                op_name = NULL;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "conf_path", &amp;confpath);</div><div class='del'>-        if (ret || !confpath) {</div><div class='del'>-                ret = snprintf (conf_path, sizeof(conf_path) - 1,</div><div class='del'>-                                "%s/"GEOREP"/gsyncd_template.conf", gwd);</div><div class='del'>-                conf_path[ret] = '\0';</div><div class='del'>-                confpath = conf_path;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        runner_add_args (&amp;runner, GSYNCD_PREFIX"/gsyncd", "-c", NULL);</div><div class='del'>-        runner_argprintf (&amp;runner, "%s", confpath);</div><div class='del'>-        runner_argprintf (&amp;runner, "--iprefix=%s", DATADIR);</div><div class='del'>-        if (master)</div><div class='del'>-                runner_argprintf (&amp;runner, ":%s", master);</div><div class='del'>-        runner_add_arg (&amp;runner, slave);</div><div class='del'>-        runner_argprintf (&amp;runner, "--config-%s", subop);</div><div class='del'>-        if (op_name)</div><div class='del'>-                runner_add_arg (&amp;runner, op_name);</div><div class='del'>-</div><div class='del'>-        return runner_run (&amp;runner);</div><div class='add'>+gf_cli_gsync_config_command(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    runner_t runner = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *subop = NULL;</div><div class='add'>+    char *gwd = NULL;</div><div class='add'>+    char *slave = NULL;</div><div class='add'>+    char *confpath = NULL;</div><div class='add'>+    char *master = NULL;</div><div class='add'>+    char *op_name = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char conf_path[PATH_MAX] = "";</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(dict, "subop", &amp;subop) != 0)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (strcmp(subop, "get") != 0 &amp;&amp; strcmp(subop, "get-all") != 0) {</div><div class='add'>+        cli_out(GEOREP " config updated successfully");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(dict, "glusterd_workdir", &amp;gwd) != 0 ||</div><div class='add'>+        dict_get_str(dict, "slave", &amp;slave) != 0)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+        master = NULL;</div><div class='add'>+    if (dict_get_str(dict, "op_name", &amp;op_name) != 0)</div><div class='add'>+        op_name = NULL;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "conf_path", &amp;confpath);</div><div class='add'>+    if (ret || !confpath) {</div><div class='add'>+        ret = snprintf(conf_path, sizeof(conf_path) - 1,</div><div class='add'>+                       "%s/" GEOREP "/gsyncd_template.conf", gwd);</div><div class='add'>+        conf_path[ret] = '\0';</div><div class='add'>+        confpath = conf_path;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    runner_add_args(&amp;runner, GSYNCD_PREFIX "/gsyncd", "-c", NULL);</div><div class='add'>+    runner_argprintf(&amp;runner, "%s", confpath);</div><div class='add'>+    runner_argprintf(&amp;runner, "--iprefix=%s", DATADIR);</div><div class='add'>+    if (master)</div><div class='add'>+        runner_argprintf(&amp;runner, ":%s", master);</div><div class='add'>+    runner_add_arg(&amp;runner, slave);</div><div class='add'>+    runner_argprintf(&amp;runner, "--config-%s", subop);</div><div class='add'>+    if (op_name)</div><div class='add'>+        runner_add_arg(&amp;runner, op_name);</div><div class='add'>+</div><div class='add'>+    return runner_run(&amp;runner);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_cli_print_status (char **title_values,</div><div class='del'>-                     gf_gsync_status_t **sts_vals,</div><div class='del'>-                     int *spacing, int gsync_count,</div><div class='del'>-                     int number_of_fields, int is_detail)</div><div class='del'>-{</div><div class='del'>-        int     i                        = 0;</div><div class='del'>-        int     j                        = 0;</div><div class='del'>-        int     ret                      = 0;</div><div class='del'>-        int     status_fields            = 8; /* Indexed at 0 */</div><div class='del'>-        int     total_spacing            = 0;</div><div class='del'>-        char  **output_values            = NULL;</div><div class='del'>-        char   *tmp                      = NULL;</div><div class='del'>-        char   *hyphens                  = NULL;</div><div class='del'>-</div><div class='del'>-        /* calculating spacing for hyphens */</div><div class='del'>-        for (i = 0; i &lt; number_of_fields; i++) {</div><div class='del'>-                /* Suppressing detail output for status */</div><div class='del'>-                if ((!is_detail) &amp;&amp; (i &gt; status_fields)) {</div><div class='del'>-                       /* Suppressing detailed output for</div><div class='del'>-                        * status */</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                spacing[i] += 3; /* Adding extra space to</div><div class='del'>-                                    distinguish between fields */</div><div class='del'>-                total_spacing += spacing[i];</div><div class='del'>-        }</div><div class='del'>-        total_spacing += 4; /* For the spacing between the fields */</div><div class='del'>-</div><div class='del'>-        /* char pointers for each field */</div><div class='del'>-        output_values = GF_CALLOC (number_of_fields, sizeof (char *),</div><div class='del'>-                                   gf_common_mt_char);</div><div class='del'>-        if (!output_values) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; number_of_fields; i++) {</div><div class='del'>-                output_values[i] = GF_CALLOC (spacing[i] + 1, sizeof (char),</div><div class='del'>-                                              gf_common_mt_char);</div><div class='del'>-                if (!output_values[i]) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hyphens = GF_CALLOC (total_spacing + 1, sizeof (char),</div><div class='del'>-                             gf_common_mt_char);</div><div class='del'>-        if (!hyphens) {</div><div class='add'>+gf_cli_print_status(char **title_values, gf_gsync_status_t **sts_vals,</div><div class='add'>+                    int *spacing, int gsync_count, int number_of_fields,</div><div class='add'>+                    int is_detail)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int status_fields = 8; /* Indexed at 0 */</div><div class='add'>+    int total_spacing = 0;</div><div class='add'>+    char **output_values = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *hyphens = NULL;</div><div class='add'>+</div><div class='add'>+    /* calculating spacing for hyphens */</div><div class='add'>+    for (i = 0; i &lt; number_of_fields; i++) {</div><div class='add'>+        /* Suppressing detail output for status */</div><div class='add'>+        if ((!is_detail) &amp;&amp; (i &gt; status_fields)) {</div><div class='add'>+            /* Suppressing detailed output for</div><div class='add'>+             * status */</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        spacing[i] += 3; /* Adding extra space to</div><div class='add'>+                            distinguish between fields */</div><div class='add'>+        total_spacing += spacing[i];</div><div class='add'>+    }</div><div class='add'>+    total_spacing += 4; /* For the spacing between the fields */</div><div class='add'>+</div><div class='add'>+    /* char pointers for each field */</div><div class='add'>+    output_values = GF_CALLOC(number_of_fields, sizeof(char *),</div><div class='add'>+                              gf_common_mt_char);</div><div class='add'>+    if (!output_values) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; number_of_fields; i++) {</div><div class='add'>+        output_values[i] = GF_CALLOC(spacing[i] + 1, sizeof(char),</div><div class='add'>+                                     gf_common_mt_char);</div><div class='add'>+        if (!output_values[i]) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hyphens = GF_CALLOC(total_spacing + 1, sizeof(char), gf_common_mt_char);</div><div class='add'>+    if (!hyphens) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cli_out(" ");</div><div class='add'>+</div><div class='add'>+    /* setting the title "NODE", "MASTER", etc. from title_values[]</div><div class='add'>+       and printing the same */</div><div class='add'>+    for (j = 0; j &lt; number_of_fields; j++) {</div><div class='add'>+        if ((!is_detail) &amp;&amp; (j &gt; status_fields)) {</div><div class='add'>+            /* Suppressing detailed output for</div><div class='add'>+             * status */</div><div class='add'>+            output_values[j][0] = '\0';</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        memset(output_values[j], ' ', spacing[j]);</div><div class='add'>+        memcpy(output_values[j], title_values[j], strlen(title_values[j]));</div><div class='add'>+        output_values[j][spacing[j]] = '\0';</div><div class='add'>+    }</div><div class='add'>+    cli_out("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", output_values[0],</div><div class='add'>+            output_values[1], output_values[2], output_values[3],</div><div class='add'>+            output_values[4], output_values[5], output_values[6],</div><div class='add'>+            output_values[7], output_values[8], output_values[9],</div><div class='add'>+            output_values[10], output_values[11], output_values[12],</div><div class='add'>+            output_values[13], output_values[14], output_values[15]);</div><div class='add'>+</div><div class='add'>+    /* setting and printing the hyphens */</div><div class='add'>+    memset(hyphens, '-', total_spacing);</div><div class='add'>+    hyphens[total_spacing] = '\0';</div><div class='add'>+    cli_out("%s", hyphens);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; gsync_count; i++) {</div><div class='add'>+        for (j = 0; j &lt; number_of_fields; j++) {</div><div class='add'>+            if ((!is_detail) &amp;&amp; (j &gt; status_fields)) {</div><div class='add'>+                /* Suppressing detailed output for</div><div class='add'>+                 * status */</div><div class='add'>+                output_values[j][0] = '\0';</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+            tmp = get_struct_variable(j, sts_vals[i]);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                gf_log("", GF_LOG_ERROR, "struct member empty.");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            memset(output_values[j], ' ', spacing[j]);</div><div class='add'>+            memcpy(output_values[j], tmp, strlen(tmp));</div><div class='add'>+            output_values[j][spacing[j]] = '\0';</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        cli_out (" ");</div><div class='del'>-</div><div class='del'>-        /* setting the title "NODE", "MASTER", etc. from title_values[]</div><div class='del'>-           and printing the same */</div><div class='del'>-        for (j = 0; j &lt; number_of_fields; j++) {</div><div class='del'>-                if ((!is_detail) &amp;&amp; (j &gt; status_fields)) {</div><div class='del'>-                       /* Suppressing detailed output for</div><div class='del'>-                        * status */</div><div class='del'>-                       output_values[j][0] = '\0';</div><div class='del'>-                       continue;</div><div class='del'>-                }</div><div class='del'>-                memset (output_values[j], ' ', spacing[j]);</div><div class='del'>-                memcpy (output_values[j], title_values[j],</div><div class='del'>-                        strlen(title_values[j]));</div><div class='del'>-                output_values[j][spacing[j]] = '\0';</div><div class='del'>-        }</div><div class='del'>-        cli_out ("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",</div><div class='del'>-                 output_values[0], output_values[1],</div><div class='del'>-                 output_values[2], output_values[3],</div><div class='del'>-                 output_values[4], output_values[5],</div><div class='del'>-                 output_values[6], output_values[7],</div><div class='del'>-                 output_values[8], output_values[9],</div><div class='del'>-                 output_values[10], output_values[11],</div><div class='del'>-                 output_values[12], output_values[13],</div><div class='del'>-                 output_values[14], output_values[15]);</div><div class='del'>-</div><div class='del'>-        /* setting and printing the hyphens */</div><div class='del'>-        memset (hyphens, '-', total_spacing);</div><div class='del'>-        hyphens[total_spacing] = '\0';</div><div class='del'>-        cli_out ("%s", hyphens);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; gsync_count; i++) {</div><div class='del'>-                for (j = 0; j &lt; number_of_fields; j++) {</div><div class='del'>-                        if ((!is_detail) &amp;&amp; (j &gt; status_fields)) {</div><div class='del'>-                                /* Suppressing detailed output for</div><div class='del'>-                                 * status */</div><div class='del'>-                                output_values[j][0] = '\0';</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        tmp = get_struct_variable(j, sts_vals[i]);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                        "struct member empty.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        memset (output_values[j], ' ', spacing[j]);</div><div class='del'>-                        memcpy (output_values[j], tmp, strlen (tmp));</div><div class='del'>-                        output_values[j][spacing[j]] = '\0';</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                cli_out ("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",</div><div class='del'>-                         output_values[0], output_values[1],</div><div class='del'>-                         output_values[2], output_values[3],</div><div class='del'>-                         output_values[4], output_values[5],</div><div class='del'>-                         output_values[6], output_values[7],</div><div class='del'>-                         output_values[8], output_values[9],</div><div class='del'>-                         output_values[10], output_values[11],</div><div class='del'>-                         output_values[12], output_values[13],</div><div class='del'>-                         output_values[14], output_values[15]);</div><div class='del'>-        }</div><div class='add'>+        cli_out("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",</div><div class='add'>+                output_values[0], output_values[1], output_values[2],</div><div class='add'>+                output_values[3], output_values[4], output_values[5],</div><div class='add'>+                output_values[6], output_values[7], output_values[8],</div><div class='add'>+                output_values[9], output_values[10], output_values[11],</div><div class='add'>+                output_values[12], output_values[13], output_values[14],</div><div class='add'>+                output_values[15]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (output_values) {</div><div class='del'>-                for (i = 0; i &lt; number_of_fields; i++) {</div><div class='del'>-                        if (output_values[i])</div><div class='del'>-                                GF_FREE (output_values[i]);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (output_values);</div><div class='add'>+    if (output_values) {</div><div class='add'>+        for (i = 0; i &lt; number_of_fields; i++) {</div><div class='add'>+            if (output_values[i])</div><div class='add'>+                GF_FREE(output_values[i]);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(output_values);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (hyphens)</div><div class='del'>-                GF_FREE (hyphens);</div><div class='add'>+    if (hyphens)</div><div class='add'>+        GF_FREE(hyphens);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_gsync_status_t_comparator (const void *p, const void *q)</div><div class='add'>+gf_gsync_status_t_comparator(const void *p, const void *q)</div><div class='ctx'> {</div><div class='del'>-        char *slavekey1 = NULL;</div><div class='del'>-        char *slavekey2 = NULL;</div><div class='del'>-</div><div class='del'>-        slavekey1 = get_struct_variable (20, (*(gf_gsync_status_t **)p));</div><div class='del'>-        slavekey2 = get_struct_variable (20, (*(gf_gsync_status_t **)q));</div><div class='del'>-        if (!slavekey1 || !slavekey2) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "struct member empty.");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return strcmp (slavekey1, slavekey2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-gf_cli_read_status_data (dict_t *dict,</div><div class='del'>-                         gf_gsync_status_t **sts_vals,</div><div class='del'>-                         int *spacing, int gsync_count,</div><div class='del'>-                         int number_of_fields)</div><div class='del'>-{</div><div class='del'>-        char   *tmp                    = NULL;</div><div class='del'>-        char    sts_val_name[PATH_MAX] = "";</div><div class='del'>-        int     ret                    = 0;</div><div class='del'>-        int     i                      = 0;</div><div class='del'>-        int     j                      = 0;</div><div class='del'>-</div><div class='del'>-        /* Storing per node status info in each object */</div><div class='del'>-        for (i = 0; i &lt; gsync_count; i++) {</div><div class='del'>-                snprintf (sts_val_name, sizeof(sts_val_name), "status_value%d", i);</div><div class='del'>-</div><div class='del'>-                /* Fetching the values from dict, and calculating</div><div class='del'>-                   the max length for each field */</div><div class='del'>-                ret = dict_get_bin (dict, sts_val_name, (void **)&amp;(sts_vals[i]));</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                for (j = 0; j &lt; number_of_fields; j++) {</div><div class='del'>-                        tmp = get_struct_variable(j, sts_vals[i]);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                        "struct member empty.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if (strlen (tmp) &gt; spacing[j])</div><div class='del'>-                                spacing[j] = strlen (tmp);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    char *slavekey1 = NULL;</div><div class='add'>+    char *slavekey2 = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Sort based on Session Slave */</div><div class='del'>-        qsort(sts_vals, gsync_count,</div><div class='del'>-              sizeof(gf_gsync_status_t *),</div><div class='del'>-              gf_gsync_status_t_comparator);</div><div class='add'>+    slavekey1 = get_struct_variable(20, (*(gf_gsync_status_t **)p));</div><div class='add'>+    slavekey2 = get_struct_variable(20, (*(gf_gsync_status_t **)q));</div><div class='add'>+    if (!slavekey1 || !slavekey2) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "struct member empty.");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='add'>+    return strcmp(slavekey1, slavekey2);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_gsync_status_output (dict_t *dict, gf_boolean_t is_detail)</div><div class='del'>-{</div><div class='del'>-        int                     gsync_count    = 0;</div><div class='del'>-        int                     i              = 0;</div><div class='del'>-        int                     ret            = 0;</div><div class='del'>-        int                     spacing[16]    = {0};</div><div class='del'>-        int                     num_of_fields  = 16;</div><div class='del'>-        char                    errmsg[1024]   = "";</div><div class='del'>-        char                   *master         = NULL;</div><div class='del'>-        char                   *slave          = NULL;</div><div class='del'>-        char                   *title_values[] = {"MASTER NODE", "MASTER VOL",</div><div class='del'>-                                                  "MASTER BRICK", "SLAVE USER",</div><div class='del'>-                                                  "SLAVE", "SLAVE NODE",</div><div class='del'>-                                                  "STATUS", "CRAWL STATUS",</div><div class='del'>-                                                  "LAST_SYNCED", "ENTRY",</div><div class='del'>-                                                  "DATA", "META", "FAILURES",</div><div class='del'>-                                                  "CHECKPOINT TIME",</div><div class='del'>-                                                  "CHECKPOINT COMPLETED",</div><div class='del'>-                                                  "CHECKPOINT COMPLETION TIME"};</div><div class='del'>-        gf_gsync_status_t     **sts_vals       = NULL;</div><div class='del'>-</div><div class='del'>-        /* Checks if any session is active or not */</div><div class='del'>-        ret = dict_get_int32 (dict, "gsync-count", &amp;gsync_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = dict_get_str (dict, "master", &amp;master);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, "slave", &amp;slave);</div><div class='del'>-</div><div class='del'>-                if (master) {</div><div class='del'>-                        if (slave)</div><div class='del'>-                                snprintf (errmsg, sizeof(errmsg), "No active "</div><div class='del'>-                                          "geo-replication sessions between %s"</div><div class='del'>-                                          " and %s", master, slave);</div><div class='del'>-                        else</div><div class='del'>-                                snprintf (errmsg, sizeof(errmsg), "No active "</div><div class='del'>-                                          "geo-replication sessions for %s",</div><div class='del'>-                                          master);</div><div class='del'>-                } else</div><div class='del'>-                        snprintf (errmsg, sizeof(errmsg), "No active "</div><div class='del'>-                                  "geo-replication sessions");</div><div class='del'>-</div><div class='del'>-                gf_log ("cli", GF_LOG_INFO, "%s", errmsg);</div><div class='del'>-                cli_out ("%s", errmsg);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; num_of_fields; i++)</div><div class='del'>-                spacing[i] = strlen(title_values[i]);</div><div class='add'>+gf_cli_read_status_data(dict_t *dict, gf_gsync_status_t **sts_vals,</div><div class='add'>+                        int *spacing, int gsync_count, int number_of_fields)</div><div class='add'>+{</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char sts_val_name[PATH_MAX] = "";</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    /* Storing per node status info in each object */</div><div class='add'>+    for (i = 0; i &lt; gsync_count; i++) {</div><div class='add'>+        snprintf(sts_val_name, sizeof(sts_val_name), "status_value%d", i);</div><div class='add'>+</div><div class='add'>+        /* Fetching the values from dict, and calculating</div><div class='add'>+           the max length for each field */</div><div class='add'>+        ret = dict_get_bin(dict, sts_val_name, (void **)&amp;(sts_vals[i]));</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        /* gsync_count = number of nodes reporting output.</div><div class='del'>-           each sts_val object will store output of each</div><div class='del'>-           node */</div><div class='del'>-        sts_vals = GF_MALLOC (gsync_count * sizeof (gf_gsync_status_t *),</div><div class='del'>-                              gf_common_mt_char);</div><div class='del'>-        if (!sts_vals) {</div><div class='add'>+        for (j = 0; j &lt; number_of_fields; j++) {</div><div class='add'>+            tmp = get_struct_variable(j, sts_vals[i]);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                gf_log("", GF_LOG_ERROR, "struct member empty.");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            if (strlen(tmp) &gt; spacing[j])</div><div class='add'>+                spacing[j] = strlen(tmp);</div><div class='ctx'>         }</div><div class='del'>-        for (i = 0; i &lt; gsync_count; i++) {</div><div class='del'>-                sts_vals[i] = GF_CALLOC (1, sizeof (gf_gsync_status_t),</div><div class='del'>-                                         gf_common_mt_char);</div><div class='del'>-                if (!sts_vals[i]) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_cli_read_status_data (dict, sts_vals, spacing,</div><div class='del'>-                                       gsync_count, num_of_fields);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Unable to read status data");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_cli_print_status (title_values, sts_vals, spacing, gsync_count,</div><div class='del'>-                                   num_of_fields, is_detail);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Unable to print status output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Sort based on Session Slave */</div><div class='add'>+    qsort(sts_vals, gsync_count, sizeof(gf_gsync_status_t *),</div><div class='add'>+          gf_gsync_status_t_comparator);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (sts_vals)</div><div class='del'>-                GF_FREE (sts_vals);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+int</div><div class='add'>+gf_cli_gsync_status_output(dict_t *dict, gf_boolean_t is_detail)</div><div class='add'>+{</div><div class='add'>+    int gsync_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int spacing[16] = {0};</div><div class='add'>+    int num_of_fields = 16;</div><div class='add'>+    char errmsg[1024] = "";</div><div class='add'>+    char *master = NULL;</div><div class='add'>+    char *slave = NULL;</div><div class='add'>+    char *title_values[] = {"MASTER NODE",</div><div class='add'>+                            "MASTER VOL",</div><div class='add'>+                            "MASTER BRICK",</div><div class='add'>+                            "SLAVE USER",</div><div class='add'>+                            "SLAVE",</div><div class='add'>+                            "SLAVE NODE",</div><div class='add'>+                            "STATUS",</div><div class='add'>+                            "CRAWL STATUS",</div><div class='add'>+                            "LAST_SYNCED",</div><div class='add'>+                            "ENTRY",</div><div class='add'>+                            "DATA",</div><div class='add'>+                            "META",</div><div class='add'>+                            "FAILURES",</div><div class='add'>+                            "CHECKPOINT TIME",</div><div class='add'>+                            "CHECKPOINT COMPLETED",</div><div class='add'>+                            "CHECKPOINT COMPLETION TIME"};</div><div class='add'>+    gf_gsync_status_t **sts_vals = NULL;</div><div class='add'>+</div><div class='add'>+    /* Checks if any session is active or not */</div><div class='add'>+    ret = dict_get_int32(dict, "gsync-count", &amp;gsync_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = dict_get_str(dict, "master", &amp;master);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_str(dict, "slave", &amp;slave);</div><div class='add'>+</div><div class='add'>+        if (master) {</div><div class='add'>+            if (slave)</div><div class='add'>+                snprintf(errmsg, sizeof(errmsg),</div><div class='add'>+                         "No active "</div><div class='add'>+                         "geo-replication sessions between %s"</div><div class='add'>+                         " and %s",</div><div class='add'>+                         master, slave);</div><div class='add'>+            else</div><div class='add'>+                snprintf(errmsg, sizeof(errmsg),</div><div class='add'>+                         "No active "</div><div class='add'>+                         "geo-replication sessions for %s",</div><div class='add'>+                         master);</div><div class='add'>+        } else</div><div class='add'>+            snprintf(errmsg, sizeof(errmsg),</div><div class='add'>+                     "No active "</div><div class='add'>+                     "geo-replication sessions");</div><div class='add'>+</div><div class='add'>+        gf_log("cli", GF_LOG_INFO, "%s", errmsg);</div><div class='add'>+        cli_out("%s", errmsg);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; num_of_fields; i++)</div><div class='add'>+        spacing[i] = strlen(title_values[i]);</div><div class='add'>+</div><div class='add'>+    /* gsync_count = number of nodes reporting output.</div><div class='add'>+       each sts_val object will store output of each</div><div class='add'>+       node */</div><div class='add'>+    sts_vals = GF_MALLOC(gsync_count * sizeof(gf_gsync_status_t *),</div><div class='add'>+                         gf_common_mt_char);</div><div class='add'>+    if (!sts_vals) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; gsync_count; i++) {</div><div class='add'>+        sts_vals[i] = GF_CALLOC(1, sizeof(gf_gsync_status_t),</div><div class='add'>+                                gf_common_mt_char);</div><div class='add'>+        if (!sts_vals[i]) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_cli_read_status_data(dict, sts_vals, spacing, gsync_count,</div><div class='add'>+                                  num_of_fields);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to read status data");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_cli_print_status(title_values, sts_vals, spacing, gsync_count,</div><div class='add'>+                              num_of_fields, is_detail);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to print status output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    if (sts_vals)</div><div class='add'>+        GF_FREE(sts_vals);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-write_contents_to_common_pem_file (dict_t *dict, int output_count)</div><div class='del'>-{</div><div class='del'>-        char            *workdir                   = NULL;</div><div class='del'>-        char             common_pem_file[PATH_MAX] = "";</div><div class='del'>-        char            *output                    = NULL;</div><div class='del'>-        char             output_name[PATH_MAX]     = "";</div><div class='del'>-        int              bytes_written             = 0;</div><div class='del'>-        int              fd                        = -1;</div><div class='del'>-        int              ret                       = -1;</div><div class='del'>-        int              i                         = -1;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "glusterd_workdir", &amp;workdir);</div><div class='del'>-        if (ret || !workdir) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Unable to fetch workdir");</div><div class='add'>+write_contents_to_common_pem_file(dict_t *dict, int output_count)</div><div class='add'>+{</div><div class='add'>+    char *workdir = NULL;</div><div class='add'>+    char common_pem_file[PATH_MAX] = "";</div><div class='add'>+    char *output = NULL;</div><div class='add'>+    char output_name[PATH_MAX] = "";</div><div class='add'>+    int bytes_written = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "glusterd_workdir", &amp;workdir);</div><div class='add'>+    if (ret || !workdir) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to fetch workdir");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(common_pem_file, sizeof(common_pem_file),</div><div class='add'>+             "%s/geo-replication/common_secret.pem.pub", workdir);</div><div class='add'>+</div><div class='add'>+    sys_unlink(common_pem_file);</div><div class='add'>+</div><div class='add'>+    fd = open(common_pem_file, O_WRONLY | O_CREAT, 0600);</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR,</div><div class='add'>+               "Failed to open %s"</div><div class='add'>+               " Error : %s",</div><div class='add'>+               common_pem_file, strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= output_count; i++) {</div><div class='add'>+        snprintf(output_name, sizeof(output_name), "output_%d", i);</div><div class='add'>+        ret = dict_get_str(dict, output_name, &amp;output);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "Failed to get %s.", output_name);</div><div class='add'>+            cli_out("Unable to fetch output.");</div><div class='add'>+        }</div><div class='add'>+        if (output) {</div><div class='add'>+            bytes_written = sys_write(fd, output, strlen(output));</div><div class='add'>+            if (bytes_written != strlen(output)) {</div><div class='add'>+                gf_log("", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to write "</div><div class='add'>+                       "to %s",</div><div class='add'>+                       common_pem_file);</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (common_pem_file, sizeof(common_pem_file),</div><div class='del'>-                  "%s/geo-replication/common_secret.pem.pub",</div><div class='del'>-                  workdir);</div><div class='del'>-</div><div class='del'>-        sys_unlink (common_pem_file);</div><div class='del'>-</div><div class='del'>-        fd = open (common_pem_file, O_WRONLY | O_CREAT, 0600);</div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Failed to open %s"</div><div class='del'>-                        " Error : %s", common_pem_file,</div><div class='del'>-                        strerror (errno));</div><div class='add'>+            }</div><div class='add'>+            /* Adding the new line character */</div><div class='add'>+            bytes_written = sys_write(fd, "\n", 1);</div><div class='add'>+            if (bytes_written != 1) {</div><div class='add'>+                gf_log("", GF_LOG_ERROR, "Failed to add new line char");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            output = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 1; i &lt;= output_count; i++) {</div><div class='del'>-                snprintf (output_name, sizeof (output_name),</div><div class='del'>-                          "output_%d", i);</div><div class='del'>-                ret = dict_get_str (dict, output_name, &amp;output);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR, "Failed to get %s.",</div><div class='del'>-                                output_name);</div><div class='del'>-                        cli_out ("Unable to fetch output.");</div><div class='del'>-                }</div><div class='del'>-                if (output) {</div><div class='del'>-                        bytes_written = sys_write (fd, output, strlen(output));</div><div class='del'>-                        if (bytes_written != strlen(output)) {</div><div class='del'>-                                gf_log ("", GF_LOG_ERROR, "Failed to write "</div><div class='del'>-                                        "to %s", common_pem_file);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        /* Adding the new line character */</div><div class='del'>-                        bytes_written = sys_write (fd, "\n", 1);</div><div class='del'>-                        if (bytes_written != 1) {</div><div class='del'>-                                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to add new line char");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        output = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cli_out ("Common secret pub file present at %s", common_pem_file);</div><div class='del'>-        ret = 0;</div><div class='add'>+    cli_out("Common secret pub file present at %s", common_pem_file);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                sys_close (fd);</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_sys_exec_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                     int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-        int                     output_count     = -1;</div><div class='del'>-        int                     i     = -1;</div><div class='del'>-        char                   *output  = NULL;</div><div class='del'>-        char                   *command = NULL;</div><div class='del'>-        char                    output_name[PATH_MAX] = "";</div><div class='del'>-        gf_cli_rsp              rsp     = {0, };</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;rpc_status == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-       }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+gf_cli_sys_exec_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                    void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int output_count = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    char *output = NULL;</div><div class='add'>+    char *command = NULL;</div><div class='add'>+    char output_name[PATH_MAX] = "";</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;rpc_status == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        cli_err("%s", rsp.op_errstr ? rsp.op_errstr : "Command failed.");</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "output_count", &amp;output_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_out("Command executed successfully.");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                cli_err ("%s", rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                         "Command failed.");</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(dict, "command", &amp;command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to get command from dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "output_count", &amp;output_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_out ("Command executed successfully.");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!strcmp(command, "gsec_create")) {</div><div class='add'>+        ret = write_contents_to_common_pem_file(dict, output_count);</div><div class='add'>+        if (!ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "command", &amp;command);</div><div class='add'>+    for (i = 1; i &lt;= output_count; i++) {</div><div class='add'>+        snprintf(output_name, sizeof(output_name), "output_%d", i);</div><div class='add'>+        ret = dict_get_str(dict, output_name, &amp;output);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                        "Unable to get command from dict");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "Failed to get %s.", output_name);</div><div class='add'>+            cli_out("Unable to fetch output.");</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!strcmp (command, "gsec_create")) {</div><div class='del'>-                ret = write_contents_to_common_pem_file (dict, output_count);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (output) {</div><div class='add'>+            cli_out("%s", output);</div><div class='add'>+            output = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 1; i &lt;= output_count; i++) {</div><div class='del'>-                snprintf (output_name, sizeof (output_name),</div><div class='del'>-                          "output_%d", i);</div><div class='del'>-                ret = dict_get_str (dict, output_name, &amp;output);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR, "Failed to get %s.",</div><div class='del'>-                                output_name);</div><div class='del'>-                        cli_out ("Unable to fetch output.");</div><div class='del'>-                }</div><div class='del'>-                if (output) {</div><div class='del'>-                        cli_out ("%s", output);</div><div class='del'>-                        output = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_copy_file_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                      int count, void *myframe)</div><div class='add'>+gf_cli_copy_file_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                     void *myframe)</div><div class='ctx'> {</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-        gf_cli_rsp              rsp     = {0, };</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (req-&gt;rpc_status == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (req-&gt;rpc_status == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-       }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'> </div><div class='del'>-       if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                cli_err ("%s", rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                         "Copy unsuccessful");</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        cli_err("%s", rsp.op_errstr ? rsp.op_errstr : "Copy unsuccessful");</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_out ("Successfully copied file.");</div><div class='add'>+    cli_out("Successfully copied file.");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_gsync_set_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                         int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-        gf_cli_rsp              rsp     = {0, };</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='del'>-        char                    *gsync_status = NULL;</div><div class='del'>-        char                    *master = NULL;</div><div class='del'>-        char                    *slave  = NULL;</div><div class='del'>-        int32_t                  type   = 0;</div><div class='del'>-        gf_boolean_t             status_detail = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;rpc_status == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='del'>-</div><div class='add'>+gf_cli_gsync_set_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                     void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *gsync_status = NULL;</div><div class='add'>+    char *master = NULL;</div><div class='add'>+    char *slave = NULL;</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    gf_boolean_t status_detail = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;rpc_status == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_gsync(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                       rsp.op_errstr);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_gsync (dict, rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                                rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                cli_err ("%s", rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                         GEOREP" command unsuccessful");</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "gsync-status", &amp;gsync_status);</div><div class='del'>-        if (!ret)</div><div class='del'>-                cli_out ("%s", gsync_status);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to get type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (type) {</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_START:</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_STOP:</div><div class='del'>-                        if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                                master = "???";</div><div class='del'>-                        if (dict_get_str (dict, "slave", &amp;slave) != 0)</div><div class='del'>-                                slave = "???";</div><div class='del'>-</div><div class='del'>-                        cli_out ("%s " GEOREP " session between %s &amp; %s"</div><div class='del'>-                                 " has been successful",</div><div class='del'>-                                 type == GF_GSYNC_OPTION_TYPE_START ?</div><div class='del'>-                                  "Starting" : "Stopping",</div><div class='del'>-                                 master, slave);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_PAUSE:</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_RESUME:</div><div class='del'>-                        if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                                master = "???";</div><div class='del'>-                        if (dict_get_str (dict, "slave", &amp;slave) != 0)</div><div class='del'>-                                slave = "???";</div><div class='del'>-</div><div class='del'>-                        cli_out ("%s " GEOREP " session between %s &amp; %s"</div><div class='del'>-                                 " has been successful",</div><div class='del'>-                                 type == GF_GSYNC_OPTION_TYPE_PAUSE ?</div><div class='del'>-                                  "Pausing" : "Resuming",</div><div class='del'>-                                 master, slave);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_CONFIG:</div><div class='del'>-                        ret = gf_cli_gsync_config_command (dict);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_STATUS:</div><div class='del'>-                        status_detail = dict_get_str_boolean (dict,</div><div class='del'>-                                                              "status-detail",</div><div class='del'>-                                                              _gf_false);</div><div class='del'>-                        ret = gf_cli_gsync_status_output (dict, status_detail);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_DELETE:</div><div class='del'>-                        if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                                master = "???";</div><div class='del'>-                        if (dict_get_str (dict, "slave", &amp;slave) != 0)</div><div class='del'>-                                slave = "???";</div><div class='del'>-                        cli_out ("Deleting " GEOREP " session between %s &amp; %s"</div><div class='del'>-                                 " has been successful", master, slave);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                case GF_GSYNC_OPTION_TYPE_CREATE:</div><div class='del'>-                        if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                                master = "???";</div><div class='del'>-                        if (dict_get_str (dict, "slave", &amp;slave) != 0)</div><div class='del'>-                                slave = "???";</div><div class='del'>-                        cli_out ("Creating " GEOREP " session between %s &amp; %s"</div><div class='del'>-                                 " has been successful", master, slave);</div><div class='del'>-                break;</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        cli_err("%s",</div><div class='add'>+                rsp.op_errstr ? rsp.op_errstr : GEOREP " command unsuccessful");</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "gsync-status", &amp;gsync_status);</div><div class='add'>+    if (!ret)</div><div class='add'>+        cli_out("%s", gsync_status);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (type) {</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_START:</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_STOP:</div><div class='add'>+            if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+                master = "???";</div><div class='add'>+            if (dict_get_str(dict, "slave", &amp;slave) != 0)</div><div class='add'>+                slave = "???";</div><div class='add'>+</div><div class='add'>+            cli_out(</div><div class='add'>+                "%s " GEOREP</div><div class='add'>+                " session between %s &amp; %s"</div><div class='add'>+                " has been successful",</div><div class='add'>+                type == GF_GSYNC_OPTION_TYPE_START ? "Starting" : "Stopping",</div><div class='add'>+                master, slave);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_PAUSE:</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_RESUME:</div><div class='add'>+            if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+                master = "???";</div><div class='add'>+            if (dict_get_str(dict, "slave", &amp;slave) != 0)</div><div class='add'>+                slave = "???";</div><div class='add'>+</div><div class='add'>+            cli_out("%s " GEOREP</div><div class='add'>+                    " session between %s &amp; %s"</div><div class='add'>+                    " has been successful",</div><div class='add'>+                    type == GF_GSYNC_OPTION_TYPE_PAUSE ? "Pausing" : "Resuming",</div><div class='add'>+                    master, slave);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_CONFIG:</div><div class='add'>+            ret = gf_cli_gsync_config_command(dict);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_STATUS:</div><div class='add'>+            status_detail = dict_get_str_boolean(dict, "status-detail",</div><div class='add'>+                                                 _gf_false);</div><div class='add'>+            ret = gf_cli_gsync_status_output(dict, status_detail);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_DELETE:</div><div class='add'>+            if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+                master = "???";</div><div class='add'>+            if (dict_get_str(dict, "slave", &amp;slave) != 0)</div><div class='add'>+                slave = "???";</div><div class='add'>+            cli_out("Deleting " GEOREP</div><div class='add'>+                    " session between %s &amp; %s"</div><div class='add'>+                    " has been successful",</div><div class='add'>+                    master, slave);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_GSYNC_OPTION_TYPE_CREATE:</div><div class='add'>+            if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+                master = "???";</div><div class='add'>+            if (dict_get_str(dict, "slave", &amp;slave) != 0)</div><div class='add'>+                slave = "???";</div><div class='add'>+            cli_out("Creating " GEOREP</div><div class='add'>+                    " session between %s &amp; %s"</div><div class='add'>+                    " has been successful",</div><div class='add'>+                    master, slave);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                default:</div><div class='del'>-                        cli_out (GEOREP" command executed successfully");</div><div class='del'>-        }</div><div class='add'>+        default:</div><div class='add'>+            cli_out(GEOREP " command executed successfully");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_sys_exec (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_sys_exec(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                      ret    = 0;</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='del'>-        gf_cli_req               req = {{0,}};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid data");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid data");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_sys_exec_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_SYS_EXEC, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_sys_exec_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict, GLUSTER_CLI_SYS_EXEC,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_copy_file (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_copy_file(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                      ret    = 0;</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='del'>-        gf_cli_req               req = {{0,}};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Invalid data");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Invalid data");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_copy_file_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_COPY_FILE, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_copy_file_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_COPY_FILE, this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_gsync_set (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     void *data)</div><div class='add'>+gf_cli_gsync_set(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                      ret    = 0;</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='del'>-        gf_cli_req               req = {{0,}};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_gsync_set_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_GSYNC_SET, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_gsync_set_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_GSYNC_SET, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_profile_info_percentage_cmp (void *a, void *b)</div><div class='del'>-{</div><div class='del'>-        cli_profile_info_t *ia = NULL;</div><div class='del'>-        cli_profile_info_t *ib = NULL;</div><div class='del'>-        int                ret = 0;</div><div class='del'>-</div><div class='del'>-        ia = a;</div><div class='del'>-        ib = b;</div><div class='del'>-        if (ia-&gt;percentage_avg_latency &lt; ib-&gt;percentage_avg_latency)</div><div class='del'>-                ret = -1;</div><div class='del'>-        else if (ia-&gt;percentage_avg_latency &gt; ib-&gt;percentage_avg_latency)</div><div class='del'>-                ret = 1;</div><div class='del'>-        else</div><div class='del'>-                ret = 0;</div><div class='del'>-        return ret;</div><div class='add'>+cli_profile_info_percentage_cmp(void *a, void *b)</div><div class='add'>+{</div><div class='add'>+    cli_profile_info_t *ia = NULL;</div><div class='add'>+    cli_profile_info_t *ib = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ia = a;</div><div class='add'>+    ib = b;</div><div class='add'>+    if (ia-&gt;percentage_avg_latency &lt; ib-&gt;percentage_avg_latency)</div><div class='add'>+        ret = -1;</div><div class='add'>+    else if (ia-&gt;percentage_avg_latency &gt; ib-&gt;percentage_avg_latency)</div><div class='add'>+        ret = 1;</div><div class='add'>+    else</div><div class='add'>+        ret = 0;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)</div><div class='del'>-{</div><div class='del'>-        char                    key[256] = {0};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        uint64_t                sec = 0;</div><div class='del'>-        uint64_t                r_count = 0;</div><div class='del'>-        uint64_t                w_count = 0;</div><div class='del'>-        uint64_t                rb_counts[32] = {0};</div><div class='del'>-        uint64_t                wb_counts[32] = {0};</div><div class='del'>-        cli_profile_info_t      profile_info[GF_FOP_MAXVALUE] = {{0}};</div><div class='del'>-        cli_profile_info_t      upcall_info[GF_UPCALL_FLAGS_MAXVALUE] = {{0},};</div><div class='del'>-        char                    output[128] = {0};</div><div class='del'>-        int                     per_line = 0;</div><div class='del'>-        char                    read_blocks[128] = {0};</div><div class='del'>-        char                    write_blocks[128] = {0};</div><div class='del'>-        int                     index = 0;</div><div class='del'>-        int                     is_header_printed = 0;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        double                  total_percentage_latency = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 32; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-read-%d", count,</div><div class='del'>-                          interval, (1 &lt;&lt; i));</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;rb_counts[i]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='add'>+cmd_profile_volume_brick_out(dict_t *dict, int count, int interval)</div><div class='add'>+{</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t sec = 0;</div><div class='add'>+    uint64_t r_count = 0;</div><div class='add'>+    uint64_t w_count = 0;</div><div class='add'>+    uint64_t rb_counts[32] = {0};</div><div class='add'>+    uint64_t wb_counts[32] = {0};</div><div class='add'>+    cli_profile_info_t profile_info[GF_FOP_MAXVALUE] = {{0}};</div><div class='add'>+    cli_profile_info_t upcall_info[GF_UPCALL_FLAGS_MAXVALUE] = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+    char output[128] = {0};</div><div class='add'>+    int per_line = 0;</div><div class='add'>+    char read_blocks[128] = {0};</div><div class='add'>+    char write_blocks[128] = {0};</div><div class='add'>+    int index = 0;</div><div class='add'>+    int is_header_printed = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    double total_percentage_latency = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 32; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-read-%d", count, interval, (1 &lt;&lt; i));</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;rb_counts[i]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 32; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-write-%d", count, interval,</div><div class='del'>-                          (1&lt;&lt;i));</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;wb_counts[i]);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; 32; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-write-%d", count, interval, (1 &lt;&lt; i));</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;wb_counts[i]);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-upcall-hits", count,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;upcall_info[i].fop_hits);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='del'>-                upcall_info[i].fop_name = (char *)gf_upcall_list[i];</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-upcall-hits", count, interval, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;upcall_info[i].fop_hits);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='add'>+        upcall_info[i].fop_name = (char *)gf_upcall_list[i];</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-hits", count,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;profile_info[i].fop_hits);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-avglatency", count,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;profile_info[i].avg_latency);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-minlatency", count,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;profile_info[i].min_latency);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-maxlatency", count,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;profile_info[i].max_latency);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get %s from dict", key);</div><div class='del'>-                }</div><div class='del'>-                profile_info[i].fop_name = (char *)gf_fop_list[i];</div><div class='del'>-</div><div class='del'>-                total_percentage_latency +=</div><div class='del'>-                       (profile_info[i].fop_hits * profile_info[i].avg_latency);</div><div class='del'>-        }</div><div class='del'>-        if (total_percentage_latency) {</div><div class='del'>-                for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                        profile_info[i].percentage_avg_latency = 100 * (</div><div class='del'>-                     (profile_info[i].avg_latency* profile_info[i].fop_hits) /</div><div class='del'>-                                total_percentage_latency);</div><div class='del'>-                }</div><div class='del'>-                gf_array_insertionsort (profile_info, 1, GF_FOP_MAXVALUE - 1,</div><div class='del'>-                                    sizeof (cli_profile_info_t),</div><div class='del'>-                                    cli_profile_info_percentage_cmp);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-duration", count, interval);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;sec);</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-hits", count, interval, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;profile_info[i].fop_hits);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-total-read", count, interval);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;r_count);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-avglatency", count, interval, i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;profile_info[i].avg_latency);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-total-write", count, interval);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;w_count);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-minlatency", count, interval, i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;profile_info[i].min_latency);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (interval == -1)</div><div class='del'>-                cli_out ("Cumulative Stats:");</div><div class='del'>-        else</div><div class='del'>-                cli_out ("Interval %d Stats:", interval);</div><div class='del'>-        snprintf (output, sizeof (output), "%14s", "Block Size:");</div><div class='del'>-        snprintf (read_blocks, sizeof (read_blocks), "%14s", "No. of Reads:");</div><div class='del'>-        snprintf (write_blocks, sizeof (write_blocks), "%14s", "No. of Writes:");</div><div class='del'>-        index = 14;</div><div class='del'>-        for (i = 0; i &lt; 32; i++) {</div><div class='del'>-                if ((rb_counts[i] == 0) &amp;&amp; (wb_counts[i] == 0))</div><div class='del'>-                        continue;</div><div class='del'>-                per_line++;</div><div class='del'>-                snprintf (output+index, sizeof (output)-index, "%19db+ ", (1&lt;&lt;i));</div><div class='del'>-                if (rb_counts[i]) {</div><div class='del'>-                        snprintf (read_blocks+index, sizeof (read_blocks)-index,</div><div class='del'>-                                  "%21"PRId64" ", rb_counts[i]);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (read_blocks+index, sizeof (read_blocks)-index,</div><div class='del'>-                                  "%21s ", "0");</div><div class='del'>-                }</div><div class='del'>-                if (wb_counts[i]) {</div><div class='del'>-                        snprintf (write_blocks+index, sizeof (write_blocks)-index,</div><div class='del'>-                                  "%21"PRId64" ", wb_counts[i]);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (write_blocks+index, sizeof (write_blocks)-index,</div><div class='del'>-                                  "%21s ", "0");</div><div class='del'>-                }</div><div class='del'>-                index += 22;</div><div class='del'>-                if (per_line == 3) {</div><div class='del'>-                        cli_out ("%s", output);</div><div class='del'>-                        cli_out ("%s", read_blocks);</div><div class='del'>-                        cli_out ("%s", write_blocks);</div><div class='del'>-                        cli_out (" ");</div><div class='del'>-                        per_line = 0;</div><div class='del'>-                        snprintf (output, sizeof (output), "%14s", "Block Size:");</div><div class='del'>-                        snprintf (read_blocks, sizeof (read_blocks), "%14s",</div><div class='del'>-                                  "No. of Reads:");</div><div class='del'>-                        snprintf (write_blocks, sizeof (write_blocks), "%14s",</div><div class='del'>-                                  "No. of Writes:");</div><div class='del'>-                        index = 14;</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-maxlatency", count, interval, i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;profile_info[i].max_latency);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='ctx'>         }</div><div class='add'>+        profile_info[i].fop_name = (char *)gf_fop_list[i];</div><div class='ctx'> </div><div class='del'>-        if (per_line != 0) {</div><div class='del'>-                cli_out ("%s", output);</div><div class='del'>-                cli_out ("%s", read_blocks);</div><div class='del'>-                cli_out ("%s", write_blocks);</div><div class='del'>-        }</div><div class='add'>+        total_percentage_latency += (profile_info[i].fop_hits *</div><div class='add'>+                                     profile_info[i].avg_latency);</div><div class='add'>+    }</div><div class='add'>+    if (total_percentage_latency) {</div><div class='ctx'>         for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                if (profile_info[i].fop_hits == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if (is_header_printed == 0) {</div><div class='del'>-                        cli_out ("%10s %13s %13s %13s %14s %11s", "%-latency",</div><div class='del'>-                                 "Avg-latency", "Min-Latency", "Max-Latency",</div><div class='del'>-                                 "No. of calls", "Fop");</div><div class='del'>-                        cli_out ("%10s %13s %13s %13s %14s %11s", "---------",</div><div class='del'>-                                 "-----------", "-----------", "-----------",</div><div class='del'>-                                 "------------", "----");</div><div class='del'>-                        is_header_printed = 1;</div><div class='del'>-                }</div><div class='del'>-                if (profile_info[i].fop_hits) {</div><div class='del'>-                        cli_out ("%10.2lf %10.2lf us %10.2lf us %10.2lf us"</div><div class='del'>-                                 " %14"PRId64" %11s",</div><div class='del'>-                                 profile_info[i].percentage_avg_latency,</div><div class='del'>-                                 profile_info[i].avg_latency,</div><div class='del'>-                                 profile_info[i].min_latency,</div><div class='del'>-                                 profile_info[i].max_latency,</div><div class='del'>-                                 profile_info[i].fop_hits,</div><div class='del'>-                                 profile_info[i].fop_name);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='del'>-                if (upcall_info[i].fop_hits == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if (upcall_info[i].fop_hits) {</div><div class='del'>-                        cli_out ("%10.2lf %10.2lf us %10.2lf us %10.2lf us"</div><div class='del'>-                                 " %14"PRId64" %11s",</div><div class='del'>-                                 upcall_info[i].percentage_avg_latency,</div><div class='del'>-                                 upcall_info[i].avg_latency,</div><div class='del'>-                                 upcall_info[i].min_latency,</div><div class='del'>-                                 upcall_info[i].max_latency,</div><div class='del'>-                                 upcall_info[i].fop_hits,</div><div class='del'>-                                 upcall_info[i].fop_name);</div><div class='del'>-                }</div><div class='add'>+            profile_info[i]</div><div class='add'>+                .percentage_avg_latency = 100 * ((profile_info[i].avg_latency *</div><div class='add'>+                                                  profile_info[i].fop_hits) /</div><div class='add'>+                                                 total_percentage_latency);</div><div class='add'>+        }</div><div class='add'>+        gf_array_insertionsort(profile_info, 1, GF_FOP_MAXVALUE - 1,</div><div class='add'>+                               sizeof(cli_profile_info_t),</div><div class='add'>+                               cli_profile_info_percentage_cmp);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-duration", count, interval);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;sec);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-total-read", count, interval);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;r_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-total-write", count, interval);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;w_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (interval == -1)</div><div class='add'>+        cli_out("Cumulative Stats:");</div><div class='add'>+    else</div><div class='add'>+        cli_out("Interval %d Stats:", interval);</div><div class='add'>+    snprintf(output, sizeof(output), "%14s", "Block Size:");</div><div class='add'>+    snprintf(read_blocks, sizeof(read_blocks), "%14s", "No. of Reads:");</div><div class='add'>+    snprintf(write_blocks, sizeof(write_blocks), "%14s", "No. of Writes:");</div><div class='add'>+    index = 14;</div><div class='add'>+    for (i = 0; i &lt; 32; i++) {</div><div class='add'>+        if ((rb_counts[i] == 0) &amp;&amp; (wb_counts[i] == 0))</div><div class='add'>+            continue;</div><div class='add'>+        per_line++;</div><div class='add'>+        snprintf(output + index, sizeof(output) - index, "%19db+ ", (1 &lt;&lt; i));</div><div class='add'>+        if (rb_counts[i]) {</div><div class='add'>+            snprintf(read_blocks + index, sizeof(read_blocks) - index,</div><div class='add'>+                     "%21" PRId64 " ", rb_counts[i]);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(read_blocks + index, sizeof(read_blocks) - index, "%21s ",</div><div class='add'>+                     "0");</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        cli_out (" ");</div><div class='del'>-        cli_out ("%12s: %"PRId64" seconds", "Duration", sec);</div><div class='del'>-        cli_out ("%12s: %"PRId64" bytes", "Data Read", r_count);</div><div class='del'>-        cli_out ("%12s: %"PRId64" bytes", "Data Written", w_count);</div><div class='del'>-        cli_out (" ");</div><div class='add'>+        if (wb_counts[i]) {</div><div class='add'>+            snprintf(write_blocks + index, sizeof(write_blocks) - index,</div><div class='add'>+                     "%21" PRId64 " ", wb_counts[i]);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(write_blocks + index, sizeof(write_blocks) - index,</div><div class='add'>+                     "%21s ", "0");</div><div class='add'>+        }</div><div class='add'>+        index += 22;</div><div class='add'>+        if (per_line == 3) {</div><div class='add'>+            cli_out("%s", output);</div><div class='add'>+            cli_out("%s", read_blocks);</div><div class='add'>+            cli_out("%s", write_blocks);</div><div class='add'>+            cli_out(" ");</div><div class='add'>+            per_line = 0;</div><div class='add'>+            snprintf(output, sizeof(output), "%14s", "Block Size:");</div><div class='add'>+            snprintf(read_blocks, sizeof(read_blocks), "%14s", "No. of Reads:");</div><div class='add'>+            snprintf(write_blocks, sizeof(write_blocks), "%14s",</div><div class='add'>+                     "No. of Writes:");</div><div class='add'>+            index = 14;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (per_line != 0) {</div><div class='add'>+        cli_out("%s", output);</div><div class='add'>+        cli_out("%s", read_blocks);</div><div class='add'>+        cli_out("%s", write_blocks);</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        if (profile_info[i].fop_hits == 0)</div><div class='add'>+            continue;</div><div class='add'>+        if (is_header_printed == 0) {</div><div class='add'>+            cli_out("%10s %13s %13s %13s %14s %11s", "%-latency", "Avg-latency",</div><div class='add'>+                    "Min-Latency", "Max-Latency", "No. of calls", "Fop");</div><div class='add'>+            cli_out("%10s %13s %13s %13s %14s %11s", "---------", "-----------",</div><div class='add'>+                    "-----------", "-----------", "------------", "----");</div><div class='add'>+            is_header_printed = 1;</div><div class='add'>+        }</div><div class='add'>+        if (profile_info[i].fop_hits) {</div><div class='add'>+            cli_out(</div><div class='add'>+                "%10.2lf %10.2lf us %10.2lf us %10.2lf us"</div><div class='add'>+                " %14" PRId64 " %11s",</div><div class='add'>+                profile_info[i].percentage_avg_latency,</div><div class='add'>+                profile_info[i].avg_latency, profile_info[i].min_latency,</div><div class='add'>+                profile_info[i].max_latency, profile_info[i].fop_hits,</div><div class='add'>+                profile_info[i].fop_name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='add'>+        if (upcall_info[i].fop_hits == 0)</div><div class='add'>+            continue;</div><div class='add'>+        if (upcall_info[i].fop_hits) {</div><div class='add'>+            cli_out(</div><div class='add'>+                "%10.2lf %10.2lf us %10.2lf us %10.2lf us"</div><div class='add'>+                " %14" PRId64 " %11s",</div><div class='add'>+                upcall_info[i].percentage_avg_latency,</div><div class='add'>+                upcall_info[i].avg_latency, upcall_info[i].min_latency,</div><div class='add'>+                upcall_info[i].max_latency, upcall_info[i].fop_hits,</div><div class='add'>+                upcall_info[i].fop_name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cli_out(" ");</div><div class='add'>+    cli_out("%12s: %" PRId64 " seconds", "Duration", sec);</div><div class='add'>+    cli_out("%12s: %" PRId64 " bytes", "Data Read", r_count);</div><div class='add'>+    cli_out("%12s: %" PRId64 " bytes", "Data Written", w_count);</div><div class='add'>+    cli_out(" ");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_profile_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                              int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                        rsp   = {0,};</div><div class='del'>-        int                               ret   = -1;</div><div class='del'>-        dict_t                            *dict = NULL;</div><div class='del'>-        gf1_cli_stats_op                  op = GF_CLI_STATS_NONE;</div><div class='del'>-        char                              key[256] = {0};</div><div class='del'>-        int                               interval = 0;</div><div class='del'>-        int                               i = 1;</div><div class='del'>-        int32_t                           brick_count = 0;</div><div class='del'>-        char                              *volname = NULL;</div><div class='del'>-        char                              *brick = NULL;</div><div class='del'>-        char                              str[1024] = {0,};</div><div class='del'>-        int                               stats_cleared = 0;</div><div class='del'>-        gf1_cli_info_op                   info_op = GF_CLI_INFO_NONE;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='add'>+gf_cli_profile_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                          void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf1_cli_stats_op op = GF_CLI_STATS_NONE;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    int interval = 0;</div><div class='add'>+    int i = 1;</div><div class='add'>+    int32_t brick_count = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *brick = NULL;</div><div class='add'>+    char str[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int stats_cleared = 0;</div><div class='add'>+    gf1_cli_info_op info_op = GF_CLI_INFO_NONE;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to profile");</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        dict-&gt;extra_stdfree = rsp.dict.dict_val;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_profile(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                         rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "op", (int32_t *)&amp;op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret &amp;&amp; strcmp(rsp.op_errstr, "")) {</div><div class='add'>+        cli_err("%s", rsp.op_errstr);</div><div class='add'>+    } else {</div><div class='add'>+        switch (op) {</div><div class='add'>+            case GF_CLI_STATS_START:</div><div class='add'>+                cli_out("Starting volume profile on %s has been %s ", volname,</div><div class='add'>+                        (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+                break;</div><div class='add'>+            case GF_CLI_STATS_STOP:</div><div class='add'>+                cli_out("Stopping volume profile on %s has been %s ", volname,</div><div class='add'>+                        (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+                break;</div><div class='add'>+            case GF_CLI_STATS_INFO:</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                cli_out("volume profile on %s has been %s ", volname,</div><div class='add'>+                        (rsp.op_ret) ? "unsuccessful" : "successful");</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to profile");</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    if (GF_CLI_STATS_INFO != op) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "info-op", (int32_t *)&amp;info_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='add'>+    if (!brick_count) {</div><div class='add'>+        cli_err("All bricks of volume %s are down.", volname);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    while (i &lt;= brick_count) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-brick", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;brick);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to allocate memory");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                dict-&gt;extra_stdfree = rsp.dict.dict_val;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Couldn't get brick name");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_profile (dict, rsp.op_ret,</div><div class='del'>-                                                  rsp.op_errno,</div><div class='del'>-                                                  rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = dict_get_str_boolean(dict, "nfs", _gf_false);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "op", (int32_t*)&amp;op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret &amp;&amp; strcmp (rsp.op_errstr, "")) {</div><div class='del'>-                cli_err ("%s", rsp.op_errstr);</div><div class='add'>+            snprintf(str, sizeof(str), "NFS Server : %s", brick);</div><div class='add'>+        else</div><div class='add'>+            snprintf(str, sizeof(str), "Brick: %s", brick);</div><div class='add'>+        cli_out("%s", str);</div><div class='add'>+        memset(str, '-', strlen(str));</div><div class='add'>+        cli_out("%s", str);</div><div class='add'>+</div><div class='add'>+        if (GF_CLI_INFO_CLEAR == info_op) {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-stats-cleared", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;stats_cleared);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            cli_out(stats_cleared ? "Cleared stats."</div><div class='add'>+                                  : "Failed to clear stats.");</div><div class='ctx'>         } else {</div><div class='del'>-                switch (op) {</div><div class='del'>-                case GF_CLI_STATS_START:</div><div class='del'>-                        cli_out ("Starting volume profile on %s has been %s ",</div><div class='del'>-                                 volname,</div><div class='del'>-                                 (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATS_STOP:</div><div class='del'>-                        cli_out ("Stopping volume profile on %s has been %s ",</div><div class='del'>-                                 volname,</div><div class='del'>-                                 (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATS_INFO:</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        cli_out ("volume profile on %s has been %s ",</div><div class='del'>-                                 volname,</div><div class='del'>-                                 (rsp.op_ret) ? "unsuccessful": "successful");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            snprintf(key, sizeof(key), "%d-cumulative", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;interval);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                cmd_profile_volume_brick_out(dict, i, interval);</div><div class='ctx'> </div><div class='del'>-        if (GF_CLI_STATS_INFO != op) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            snprintf(key, sizeof(key), "%d-interval", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;interval);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                cmd_profile_volume_brick_out(dict, i, interval);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "info-op", (int32_t*)&amp;info_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!brick_count) {</div><div class='del'>-                cli_err ("All bricks of volume %s are down.", volname);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (i &lt;= brick_count) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-brick", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get brick name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str_boolean (dict, "nfs", _gf_false);</div><div class='del'>-</div><div class='del'>-                if (ret)</div><div class='del'>-                        snprintf (str, sizeof (str), "NFS Server : %s", brick);</div><div class='del'>-                else</div><div class='del'>-                        snprintf (str, sizeof (str), "Brick: %s", brick);</div><div class='del'>-                cli_out ("%s", str);</div><div class='del'>-                memset (str, '-', strlen (str));</div><div class='del'>-                cli_out ("%s", str);</div><div class='del'>-</div><div class='del'>-                if (GF_CLI_INFO_CLEAR == info_op) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-stats-cleared", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;stats_cleared);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        cli_out (stats_cleared ? "Cleared stats." :</div><div class='del'>-                                                 "Failed to clear stats.");</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-cumulative", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;interval);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                cmd_profile_volume_brick_out (dict, i,</div><div class='del'>-                                                              interval);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-interval", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;interval);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                cmd_profile_volume_brick_out (dict, i,</div><div class='del'>-                                                              interval);</div><div class='del'>-                }</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_profile_volume (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_profile_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                        ret   = -1;</div><div class='del'>-        gf_cli_req                 req   = {{0,}};</div><div class='del'>-        dict_t                     *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (data);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(data);</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='del'>-        dict = data;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_profile_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_profile_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_top_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                              int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                        rsp   = {0,};</div><div class='del'>-        int                               ret   = -1;</div><div class='del'>-        dict_t                           *dict = NULL;</div><div class='del'>-        gf1_cli_stats_op                  op = GF_CLI_STATS_NONE;</div><div class='del'>-        char                              key[256] = {0};</div><div class='del'>-        int                               i = 0;</div><div class='del'>-        int32_t                           brick_count = 0;</div><div class='del'>-        char                              brick[1024];</div><div class='del'>-        int32_t                           members = 0;</div><div class='del'>-        char                             *filename;</div><div class='del'>-        char                             *bricks;</div><div class='del'>-        uint64_t                          value = 0;</div><div class='del'>-        int32_t                           j = 0;</div><div class='del'>-        gf1_cli_top_op                    top_op = GF_CLI_TOP_NONE;</div><div class='del'>-        uint64_t                          nr_open = 0;</div><div class='del'>-        uint64_t                          max_nr_open = 0;</div><div class='del'>-        double                            throughput = 0;</div><div class='del'>-        double                            time = 0;</div><div class='del'>-        int32_t                           time_sec = 0;</div><div class='del'>-        long int                          time_usec = 0;</div><div class='del'>-        char                              timestr[256] = {0, };</div><div class='del'>-        char                             *openfd_str = NULL;</div><div class='del'>-        gf_boolean_t                      nfs = _gf_false;</div><div class='del'>-        gf_boolean_t                      clear_stats = _gf_false;</div><div class='del'>-        int                               stats_cleared = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_top_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf1_cli_stats_op op = GF_CLI_STATS_NONE;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t brick_count = 0;</div><div class='add'>+    char brick[1024];</div><div class='add'>+    int32_t members = 0;</div><div class='add'>+    char *filename;</div><div class='add'>+    char *bricks;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int32_t j = 0;</div><div class='add'>+    gf1_cli_top_op top_op = GF_CLI_TOP_NONE;</div><div class='add'>+    uint64_t nr_open = 0;</div><div class='add'>+    uint64_t max_nr_open = 0;</div><div class='add'>+    double throughput = 0;</div><div class='add'>+    double time = 0;</div><div class='add'>+    int32_t time_sec = 0;</div><div class='add'>+    long int time_usec = 0;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *openfd_str = NULL;</div><div class='add'>+    gf_boolean_t nfs = _gf_false;</div><div class='add'>+    gf_boolean_t clear_stats = _gf_false;</div><div class='add'>+    int stats_cleared = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to top");</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            cli_err("%s", rsp.op_errstr);</div><div class='add'>+        cli_err("volume top unsuccessful");</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to top");</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        cli_err ("%s", rsp.op_errstr);</div><div class='del'>-                cli_err ("volume top unsuccessful");</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='add'>+    ret = dict_get_int32(dict, "op", (int32_t *)&amp;op);</div><div class='ctx'> </div><div class='add'>+    if (op != GF_CLI_STATS_TOP) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_top(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                     rsp.op_errstr);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to allocate memory");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "op", (int32_t*)&amp;op);</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%d-top-op", 1);</div><div class='add'>+    ret = dict_get_int32(dict, key, (int32_t *)&amp;top_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (op != GF_CLI_STATS_TOP) {</div><div class='del'>-                ret = 0;</div><div class='add'>+    clear_stats = dict_get_str_boolean(dict, "clear-stats", _gf_false);</div><div class='add'>+</div><div class='add'>+    while (i &lt; brick_count) {</div><div class='add'>+        i++;</div><div class='add'>+        snprintf(brick, sizeof(brick), "%d-brick", i);</div><div class='add'>+        ret = dict_get_str(dict, brick, &amp;bricks);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        nfs = dict_get_str_boolean(dict, "nfs", _gf_false);</div><div class='add'>+</div><div class='add'>+        if (clear_stats) {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-stats-cleared", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;stats_cleared);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='add'>+            cli_out(stats_cleared ? "Cleared stats for %s %s"</div><div class='add'>+                                  : "Failed to clear stats for %s %s",</div><div class='add'>+                    nfs ? "NFS server on" : "brick", bricks);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_top (dict, rsp.op_ret,</div><div class='del'>-                                              rsp.op_errno,</div><div class='del'>-                                              rsp.op_errstr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='add'>+        if (nfs)</div><div class='add'>+            cli_out("NFS Server : %s", bricks);</div><div class='add'>+        else</div><div class='add'>+            cli_out("Brick: %s", bricks);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "%d-members", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;members);</div><div class='add'>+</div><div class='add'>+        switch (top_op) {</div><div class='add'>+            case GF_CLI_TOP_OPEN:</div><div class='add'>+                snprintf(key, sizeof(key), "%d-current-open", i);</div><div class='add'>+                ret = dict_get_uint64(dict, key, &amp;nr_open);</div><div class='add'>+                if (ret)</div><div class='add'>+                    break;</div><div class='add'>+                snprintf(key, sizeof(key), "%d-max-open", i);</div><div class='add'>+                ret = dict_get_uint64(dict, key, &amp;max_nr_open);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                snprintf(key, sizeof(key), "%d-max-openfd-time", i);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;openfd_str);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                cli_out("Current open fds: %" PRIu64</div><div class='add'>+                        ", Max open"</div><div class='add'>+                        " fds: %" PRIu64 ", Max openfd time: %s",</div><div class='add'>+                        nr_open, max_nr_open, openfd_str);</div><div class='add'>+            case GF_CLI_TOP_READ:</div><div class='add'>+            case GF_CLI_TOP_WRITE:</div><div class='add'>+            case GF_CLI_TOP_OPENDIR:</div><div class='add'>+            case GF_CLI_TOP_READDIR:</div><div class='add'>+                if (!members) {</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+                cli_out("Count\t\tfilename\n=======================");</div><div class='add'>+                break;</div><div class='add'>+            case GF_CLI_TOP_READ_PERF:</div><div class='add'>+            case GF_CLI_TOP_WRITE_PERF:</div><div class='add'>+                snprintf(key, sizeof(key), "%d-throughput", i);</div><div class='add'>+                ret = dict_get_double(dict, key, &amp;throughput);</div><div class='add'>+                if (!ret) {</div><div class='add'>+                    snprintf(key, sizeof(key), "%d-time", i);</div><div class='add'>+                    ret = dict_get_double(dict, key, &amp;time);</div><div class='ctx'>                 }</div><div class='add'>+                if (!ret)</div><div class='add'>+                    cli_out("Throughput %.2f MBps time %.4f secs", throughput,</div><div class='add'>+                            time / 1e6);</div><div class='add'>+</div><div class='add'>+                if (!members) {</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+                cli_out("%*s %-*s %-*s", VOL_TOP_PERF_SPEED_WIDTH, "MBps",</div><div class='add'>+                        VOL_TOP_PERF_FILENAME_DEF_WIDTH, "Filename",</div><div class='add'>+                        VOL_TOP_PERF_TIME_WIDTH, "Time");</div><div class='add'>+                cli_out("%*s %-*s %-*s", VOL_TOP_PERF_SPEED_WIDTH,</div><div class='add'>+                        "====", VOL_TOP_PERF_FILENAME_DEF_WIDTH,</div><div class='add'>+                        "========", VOL_TOP_PERF_TIME_WIDTH, "====");</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='ctx'>                 goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        snprintf (key, sizeof (key), "%d-top-op", 1);</div><div class='del'>-        ret = dict_get_int32 (dict, key, (int32_t*)&amp;top_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        clear_stats = dict_get_str_boolean (dict, "clear-stats", _gf_false);</div><div class='del'>-</div><div class='del'>-        while (i &lt; brick_count) {</div><div class='del'>-                i++;</div><div class='del'>-                snprintf (brick, sizeof (brick), "%d-brick", i);</div><div class='del'>-                ret = dict_get_str (dict, brick, &amp;bricks);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                nfs = dict_get_str_boolean (dict, "nfs", _gf_false);</div><div class='del'>-</div><div class='del'>-                if (clear_stats) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-stats-cleared", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;stats_cleared);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        cli_out (stats_cleared ? "Cleared stats for %s %s" :</div><div class='del'>-                                 "Failed to clear stats for %s %s",</div><div class='del'>-                                 nfs ? "NFS server on" : "brick", bricks);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (nfs)</div><div class='del'>-                        cli_out ("NFS Server : %s", bricks);</div><div class='add'>+        for (j = 1; j &lt;= members; j++) {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-filename-%d", i, j);</div><div class='add'>+            ret = dict_get_str(dict, key, &amp;filename);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='add'>+            snprintf(key, sizeof(key), "%d-value-%d", i, j);</div><div class='add'>+            ret = dict_get_uint64(dict, key, &amp;value);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            if (top_op == GF_CLI_TOP_READ_PERF ||</div><div class='add'>+                top_op == GF_CLI_TOP_WRITE_PERF) {</div><div class='add'>+                snprintf(key, sizeof(key), "%d-time-sec-%d", i, j);</div><div class='add'>+                ret = dict_get_int32(dict, key, (int32_t *)&amp;time_sec);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                snprintf(key, sizeof(key), "%d-time-usec-%d", i, j);</div><div class='add'>+                ret = dict_get_int32(dict, key, (int32_t *)&amp;time_usec);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                gf_time_fmt(timestr, sizeof timestr, time_sec, gf_timefmt_FT);</div><div class='add'>+                snprintf(timestr + strlen(timestr),</div><div class='add'>+                         sizeof timestr - strlen(timestr), ".%ld", time_usec);</div><div class='add'>+                if (strlen(filename) &lt; VOL_TOP_PERF_FILENAME_DEF_WIDTH)</div><div class='add'>+                    cli_out("%*" PRIu64 " %-*s %-*s", VOL_TOP_PERF_SPEED_WIDTH,</div><div class='add'>+                            value, VOL_TOP_PERF_FILENAME_DEF_WIDTH, filename,</div><div class='add'>+                            VOL_TOP_PERF_TIME_WIDTH, timestr);</div><div class='ctx'>                 else</div><div class='del'>-                        cli_out ("Brick: %s", bricks);</div><div class='del'>-</div><div class='del'>-                snprintf(key, sizeof (key), "%d-members", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;members);</div><div class='del'>-</div><div class='del'>-                switch (top_op) {</div><div class='del'>-                case GF_CLI_TOP_OPEN:</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-current-open", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;nr_open);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-max-open", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;max_nr_open);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-max-openfd-time", i);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;openfd_str);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        cli_out ("Current open fds: %"PRIu64", Max open"</div><div class='del'>-                                " fds: %"PRIu64", Max openfd time: %s", nr_open,</div><div class='del'>-                                 max_nr_open, openfd_str);</div><div class='del'>-                case GF_CLI_TOP_READ:</div><div class='del'>-                case GF_CLI_TOP_WRITE:</div><div class='del'>-                case GF_CLI_TOP_OPENDIR:</div><div class='del'>-                case GF_CLI_TOP_READDIR:</div><div class='del'>-                        if (!members) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        cli_out ("Count\t\tfilename\n=======================");</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_TOP_READ_PERF:</div><div class='del'>-                case GF_CLI_TOP_WRITE_PERF:</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-throughput", i);</div><div class='del'>-                        ret = dict_get_double (dict, key, &amp;throughput);</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                snprintf (key, sizeof (key), "%d-time", i);</div><div class='del'>-                                ret = dict_get_double (dict, key, &amp;time);</div><div class='del'>-                        }</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                cli_out ("Throughput %.2f MBps time %.4f secs", throughput,</div><div class='del'>-                                          time / 1e6);</div><div class='del'>-</div><div class='del'>-                        if (!members) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        cli_out ("%*s %-*s %-*s",</div><div class='del'>-                                 VOL_TOP_PERF_SPEED_WIDTH, "MBps",</div><div class='del'>-                                 VOL_TOP_PERF_FILENAME_DEF_WIDTH, "Filename",</div><div class='del'>-                                 VOL_TOP_PERF_TIME_WIDTH, "Time");</div><div class='del'>-                        cli_out ("%*s %-*s %-*s",</div><div class='del'>-                                 VOL_TOP_PERF_SPEED_WIDTH, "====",</div><div class='del'>-                                 VOL_TOP_PERF_FILENAME_DEF_WIDTH, "========",</div><div class='del'>-                                 VOL_TOP_PERF_TIME_WIDTH, "====");</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for (j = 1; j &lt;= members; j++) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-filename-%d", i, j);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;filename);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-value-%d", i, j);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;value);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        if ( top_op == GF_CLI_TOP_READ_PERF ||</div><div class='del'>-                                top_op == GF_CLI_TOP_WRITE_PERF) {</div><div class='del'>-                                snprintf (key, sizeof (key), "%d-time-sec-%d", i, j);</div><div class='del'>-                                ret = dict_get_int32 (dict, key, (int32_t *)&amp;time_sec);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                snprintf (key, sizeof (key), "%d-time-usec-%d", i, j);</div><div class='del'>-                                ret = dict_get_int32 (dict, key, (int32_t *)&amp;time_usec);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                gf_time_fmt (timestr, sizeof timestr,</div><div class='del'>-                                             time_sec, gf_timefmt_FT);</div><div class='del'>-                                snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                                  ".%ld", time_usec);</div><div class='del'>-                                if (strlen (filename) &lt; VOL_TOP_PERF_FILENAME_DEF_WIDTH)</div><div class='del'>-                                        cli_out ("%*"PRIu64" %-*s %-*s",</div><div class='del'>-                                                 VOL_TOP_PERF_SPEED_WIDTH,</div><div class='del'>-                                                 value,</div><div class='del'>-                                                 VOL_TOP_PERF_FILENAME_DEF_WIDTH,</div><div class='del'>-                                                 filename,</div><div class='del'>-                                                 VOL_TOP_PERF_TIME_WIDTH,</div><div class='del'>-                                                 timestr);</div><div class='del'>-                                else</div><div class='del'>-                                        cli_out ("%*"PRIu64" ...%-*s %-*s",</div><div class='del'>-                                                 VOL_TOP_PERF_SPEED_WIDTH,</div><div class='del'>-                                                 value,</div><div class='del'>-                                                 VOL_TOP_PERF_FILENAME_ALT_WIDTH ,</div><div class='del'>-                                                 filename + strlen (filename) -</div><div class='del'>-                                                 VOL_TOP_PERF_FILENAME_ALT_WIDTH,</div><div class='del'>-                                                 VOL_TOP_PERF_TIME_WIDTH,</div><div class='del'>-                                                 timestr);</div><div class='del'>-                        } else {</div><div class='del'>-                                cli_out ("%"PRIu64"\t\t%s", value, filename);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                    cli_out("%*" PRIu64 " ...%-*s %-*s",</div><div class='add'>+                            VOL_TOP_PERF_SPEED_WIDTH, value,</div><div class='add'>+                            VOL_TOP_PERF_FILENAME_ALT_WIDTH,</div><div class='add'>+                            filename + strlen(filename) -</div><div class='add'>+                                VOL_TOP_PERF_FILENAME_ALT_WIDTH,</div><div class='add'>+                            VOL_TOP_PERF_TIME_WIDTH, timestr);</div><div class='add'>+            } else {</div><div class='add'>+                cli_out("%" PRIu64 "\t\t%s", value, filename);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    }</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_top_volume (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_top_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                        ret   = -1;</div><div class='del'>-        gf_cli_req                 req   = {{0,}};</div><div class='del'>-        dict_t                     *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (data);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(data);</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='del'>-        dict = data;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_top_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_top_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_PROFILE_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_cli_getwd_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                       int count, void *myframe)</div><div class='add'>+gf_cli_getwd_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                 void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_getwd_rsp rsp   = {0,};</div><div class='del'>-        int               ret   = -1;</div><div class='add'>+    gf1_cli_getwd_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_getwd_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_getwd_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret == -1) {</div><div class='del'>-                cli_err ("getwd failed");</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret == -1) {</div><div class='add'>+        cli_err("getwd failed");</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to getwd");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to getwd");</div><div class='ctx'> </div><div class='del'>-        cli_out ("%s", rsp.wd);</div><div class='add'>+    cli_out("%s", rsp.wd);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_getwd (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_getwd(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        gf1_cli_getwd_req        req = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf1_cli_getwd_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        GF_ASSERT (this);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(this);</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_GETWD, NULL,</div><div class='del'>-                              this, gf_cli_getwd_cbk,</div><div class='del'>-                              (xdrproc_t) xdr_gf1_cli_getwd_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog, GLUSTER_CLI_GETWD,</div><div class='add'>+                         NULL, this, gf_cli_getwd_cbk,</div><div class='add'>+                         (xdrproc_t)xdr_gf1_cli_getwd_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_mempool (dict_t *dict, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int32_t         mempool_count = 0;</div><div class='del'>-        char            *name = NULL;</div><div class='del'>-        int32_t         hotcount = 0;</div><div class='del'>-        int32_t         coldcount = 0;</div><div class='del'>-        uint64_t        paddedsizeof = 0;</div><div class='del'>-        uint64_t        alloccount = 0;</div><div class='del'>-        int32_t         maxalloc = 0;</div><div class='del'>-        uint64_t        pool_misses = 0;</div><div class='del'>-        int32_t         maxstdalloc = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (prefix);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.mempool-count",prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;mempool_count);</div><div class='add'>+cli_print_volume_status_mempool(dict_t *dict, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t mempool_count = 0;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    int32_t hotcount = 0;</div><div class='add'>+    int32_t coldcount = 0;</div><div class='add'>+    uint64_t paddedsizeof = 0;</div><div class='add'>+    uint64_t alloccount = 0;</div><div class='add'>+    int32_t maxalloc = 0;</div><div class='add'>+    uint64_t pool_misses = 0;</div><div class='add'>+    int32_t maxstdalloc = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(prefix);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.mempool-count", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;mempool_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    cli_out("Mempool Stats\n-------------");</div><div class='add'>+    cli_out("%-30s %9s %9s %12s %10s %8s %8s %12s", "Name", "HotCount",</div><div class='add'>+            "ColdCount", "PaddedSizeof", "AllocCount", "MaxAlloc", "Misses",</div><div class='add'>+            "Max-StdAlloc");</div><div class='add'>+    cli_out("%-30s %9s %9s %12s %10s %8s %8s %12s", "----", "--------",</div><div class='add'>+            "---------", "------------", "----------", "--------", "--------",</div><div class='add'>+            "------------");</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; mempool_count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.name", prefix, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;name);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        cli_out ("Mempool Stats\n-------------");</div><div class='del'>-        cli_out ("%-30s %9s %9s %12s %10s %8s %8s %12s", "Name", "HotCount",</div><div class='del'>-                 "ColdCount", "PaddedSizeof", "AllocCount", "MaxAlloc",</div><div class='del'>-                 "Misses", "Max-StdAlloc");</div><div class='del'>-        cli_out ("%-30s %9s %9s %12s %10s %8s %8s %12s", "----", "--------",</div><div class='del'>-                 "---------", "------------", "----------",</div><div class='del'>-                 "--------", "--------", "------------");</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; mempool_count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.name", prefix, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.hotcount", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;hotcount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.hotcount", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;hotcount);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.coldcount", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;coldcount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.coldcount", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;coldcount);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.paddedsizeof",</div><div class='del'>-                          prefix, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;paddedsizeof);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.paddedsizeof", prefix, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;paddedsizeof);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.alloccount", prefix, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;alloccount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.alloccount", prefix, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;alloccount);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.max_alloc", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;maxalloc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.max_alloc", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;maxalloc);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.max-stdalloc", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;maxstdalloc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.max-stdalloc", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;maxstdalloc);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.pool-misses", prefix, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;pool_misses);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.pool-misses", prefix, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;pool_misses);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                cli_out ("%-30s %9d %9d %12"PRIu64" %10"PRIu64" %8d %8"PRIu64</div><div class='del'>-                         " %12d", name, hotcount, coldcount, paddedsizeof,</div><div class='del'>-                         alloccount, maxalloc, pool_misses, maxstdalloc);</div><div class='del'>-        }</div><div class='add'>+        cli_out("%-30s %9d %9d %12" PRIu64 " %10" PRIu64 " %8d %8" PRIu64</div><div class='add'>+                " %12d",</div><div class='add'>+                name, hotcount, coldcount, paddedsizeof, alloccount, maxalloc,</div><div class='add'>+                pool_misses, maxstdalloc);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='del'>-</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_mem (dict_t *dict, gf_boolean_t notbrick)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        int             online = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             brick_index_max = -1;</div><div class='del'>-        int             other_count = 0;</div><div class='del'>-        int             index_max = 0;</div><div class='del'>-        int             val = 0;</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='add'>+cli_print_volume_status_mem(dict_t *dict, gf_boolean_t notbrick)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int online = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    int val = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("Memory status for volume : %s", volname);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        cli_out("----------------------------------------------");</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("Memory status for volume : %s", volname);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+            continue;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.path", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt;= index_max; i++) {</div><div class='del'>-                cli_out ("----------------------------------------------");</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.path", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-                if (notbrick)</div><div class='del'>-                        cli_out ("%s : %s", hostname, path);</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Brick : %s:%s", hostname, path);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;online);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (!online) {</div><div class='del'>-                        if (notbrick)</div><div class='del'>-                                cli_out ("%s is offline", hostname);</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("Brick is offline");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                cli_out ("Mallinfo\n--------");</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.arena", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d","Arena", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.ordblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if(ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d","Ordblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.smblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if(ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d","Smblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.hblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if(ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Hblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.hblkhd", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Hblkhd", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.usmblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Usmblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.fsmblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Fsmblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.uordblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Uordblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.fordblks", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Fordblks", val);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.mallinfo.keepcost", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("%-8s : %d", "Keepcost", val);</div><div class='add'>+            continue;</div><div class='add'>+        if (notbrick)</div><div class='add'>+            cli_out("%s : %s", hostname, path);</div><div class='add'>+        else</div><div class='add'>+            cli_out("Brick : %s:%s", hostname, path);</div><div class='ctx'> </div><div class='del'>-                cli_out (" ");</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d", i);</div><div class='del'>-                cli_print_volume_status_mempool (dict, key);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;online);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        if (!online) {</div><div class='add'>+            if (notbrick)</div><div class='add'>+                cli_out("%s is offline", hostname);</div><div class='add'>+            else</div><div class='add'>+                cli_out("Brick is offline");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='del'>-        cli_out ("----------------------------------------------\n");</div><div class='del'>-        return;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-cli_print_volume_status_client_list (dict_t *dict, gf_boolean_t notbrick)</div><div class='del'>-{</div><div class='del'>-        int             ret                     = -1;</div><div class='del'>-        char            *volname                = NULL;</div><div class='del'>-        int             client_count            = 0;</div><div class='del'>-        int             current_count           = 0;</div><div class='del'>-        char            key[1024]               = {0,};</div><div class='del'>-        int             i                       = 0;</div><div class='del'>-        int             total                   = 0;</div><div class='del'>-        char            *name                   = NULL;</div><div class='del'>-        gf_boolean_t    is_fuse_done            = _gf_false;</div><div class='del'>-        gf_boolean_t    is_gfapi_done           = _gf_false;</div><div class='del'>-        gf_boolean_t    is_tierd_done           = _gf_false;</div><div class='del'>-        gf_boolean_t    is_rebalance_done       = _gf_false;</div><div class='del'>-        gf_boolean_t    is_glustershd_done      = _gf_false;</div><div class='del'>-        gf_boolean_t    is_quotad_done          = _gf_false;</div><div class='del'>-        gf_boolean_t    is_snapd_done           = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("Client connections for volume %s", volname);</div><div class='add'>+        cli_out("Mallinfo\n--------");</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "client-count", &amp;client_count);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.arena", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Arena", val);</div><div class='ctx'> </div><div class='del'>-                cli_out ("%-48s %15s", "Name", "count");</div><div class='del'>-                cli_out ("%-48s %15s", "-----", "------");</div><div class='del'>-                for (i = 0; i &lt; client_count; i++) {</div><div class='del'>-                        name = NULL;</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                        "client%d.name", i);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;name);</div><div class='del'>-</div><div class='del'>-                        if (!strncmp (name, "fuse", 4)) {</div><div class='del'>-                                if (!is_fuse_done) {</div><div class='del'>-                                        is_fuse_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "fuse-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        } else if (!strncmp (name, "gfapi", 5)) {</div><div class='del'>-                                if (!is_gfapi_done) {</div><div class='del'>-                                        is_gfapi_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "gfapi-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        } else if (!strcmp(name, "tierd")) {</div><div class='del'>-                                if (!is_tierd_done) {</div><div class='del'>-                                        is_tierd_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "tierd-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        } else if (!strcmp(name, "rebalance")) {</div><div class='del'>-                                if (!is_rebalance_done) {</div><div class='del'>-                                        is_rebalance_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "rebalance-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        } else if (!strcmp(name, "glustershd")) {</div><div class='del'>-                                if (!is_glustershd_done) {</div><div class='del'>-                                        is_glustershd_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "glustershd-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        } else if (!strcmp(name, "quotad")) {</div><div class='del'>-                                if (!is_quotad_done) {</div><div class='del'>-                                        is_quotad_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "quotad-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        } else if (!strcmp(name, "snapd")) {</div><div class='del'>-                                if (!is_snapd_done) {</div><div class='del'>-                                        is_snapd_done = _gf_true;</div><div class='del'>-                                        ret = dict_get_int32 (dict,</div><div class='del'>-                                                        "snapd-count",</div><div class='del'>-                                                        &amp;current_count);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        total = total + current_count;</div><div class='del'>-                                        goto print;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-print:</div><div class='del'>-                cli_out ("%-48s %15d", name, current_count);</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-                cli_out ("\ntotal clients for volume %s : %d ", volname, total);</div><div class='del'>-                cli_out ("-----------------------------------------------------------------\n");</div><div class='del'>-        return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-cli_print_volume_status_clients (dict_t *dict, gf_boolean_t notbrick)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        int             brick_index_max = -1;</div><div class='del'>-        int             other_count = 0;</div><div class='del'>-        int             index_max = 0;</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        int             online = -1;</div><div class='del'>-        int             client_count = 0;</div><div class='del'>-        char            *clientname = NULL;</div><div class='del'>-        uint64_t        bytesread = 0;</div><div class='del'>-        uint64_t        byteswrite = 0;</div><div class='del'>-        uint32_t        opversion = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             j = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.ordblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("Client connections for volume %s", volname);</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Ordblks", val);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.smblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Smblks", val);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.hblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Hblks", val);</div><div class='ctx'> </div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.hblkhd", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Hblkhd", val);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt;= index_max; i++) {</div><div class='del'>-                hostname = NULL;</div><div class='del'>-                path = NULL;</div><div class='del'>-                online = -1;</div><div class='del'>-                client_count = 0;</div><div class='del'>-                clientname = NULL;</div><div class='del'>-                bytesread = 0;</div><div class='del'>-                byteswrite = 0;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.usmblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Usmblks", val);</div><div class='ctx'> </div><div class='del'>-                cli_out ("----------------------------------------------");</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.fsmblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Fsmblks", val);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.uordblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Uordblks", val);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.path", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.fordblks", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Fordblks", val);</div><div class='ctx'> </div><div class='del'>-                if (hostname &amp;&amp; path) {</div><div class='del'>-                        if (notbrick)</div><div class='del'>-                                cli_out ("%s : %s", hostname, path);</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("Brick : %s:%s", hostname, path);</div><div class='del'>-                }</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;online);</div><div class='del'>-                if (!online) {</div><div class='del'>-                        if (notbrick)</div><div class='del'>-                                cli_out ("%s is offline", hostname);</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("Brick is offline");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.mallinfo.keepcost", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;val);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("%-8s : %d", "Keepcost", val);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.clientcount", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;client_count);</div><div class='del'>-</div><div class='del'>-                if (hostname &amp;&amp; path)</div><div class='del'>-                        cli_out ("Clients connected : %d", client_count);</div><div class='del'>-                if (client_count == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                cli_out ("%-48s %15s %15s %15s", "Hostname", "BytesRead",</div><div class='del'>-                         "BytesWritten", "OpVersion");</div><div class='del'>-                cli_out ("%-48s %15s %15s %15s", "--------", "---------",</div><div class='del'>-                         "------------", "---------");</div><div class='del'>-                for (j =0; j &lt; client_count; j++) {</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                  "brick%d.client%d.hostname", i, j);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;clientname);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                  "brick%d.client%d.bytesread", i, j);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;bytesread);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                 "brick%d.client%d.byteswrite", i, j);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;byteswrite);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                 "brick%d.client%d.opversion", i, j);</div><div class='del'>-                        ret = dict_get_uint32 (dict, key, &amp;opversion);</div><div class='del'>-</div><div class='del'>-                        cli_out ("%-48s %15"PRIu64" %15"PRIu64" %15"PRIu32,</div><div class='del'>-                                  clientname, bytesread, byteswrite,</div><div class='del'>-                                  opversion);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        cli_out(" ");</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d", i);</div><div class='add'>+        cli_print_volume_status_mempool(dict, key);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        cli_out ("----------------------------------------------\n");</div><div class='del'>-        return;</div><div class='add'>+    cli_out("----------------------------------------------\n");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_inode_entry (dict_t *dict, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        char            *gfid = NULL;</div><div class='del'>-        uint64_t        nlookup = 0;</div><div class='del'>-        uint32_t        ref = 0;</div><div class='del'>-        int             ia_type = 0;</div><div class='del'>-        char            inode_type;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (prefix);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.gfid", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.nlookup", prefix);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;nlookup);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.ref", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;ref);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+cli_print_volume_status_client_list(dict_t *dict, gf_boolean_t notbrick)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int client_count = 0;</div><div class='add'>+    int current_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int total = 0;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    gf_boolean_t is_fuse_done = _gf_false;</div><div class='add'>+    gf_boolean_t is_gfapi_done = _gf_false;</div><div class='add'>+    gf_boolean_t is_tierd_done = _gf_false;</div><div class='add'>+    gf_boolean_t is_rebalance_done = _gf_false;</div><div class='add'>+    gf_boolean_t is_glustershd_done = _gf_false;</div><div class='add'>+    gf_boolean_t is_quotad_done = _gf_false;</div><div class='add'>+    gf_boolean_t is_snapd_done = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("Client connections for volume %s", volname);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "client-count", &amp;client_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    cli_out("%-48s %15s", "Name", "count");</div><div class='add'>+    cli_out("%-48s %15s", "-----", "------");</div><div class='add'>+    for (i = 0; i &lt; client_count; i++) {</div><div class='add'>+        name = NULL;</div><div class='add'>+        snprintf(key, sizeof(key), "client%d.name", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;name);</div><div class='add'>+</div><div class='add'>+        if (!strncmp(name, "fuse", 4)) {</div><div class='add'>+            if (!is_fuse_done) {</div><div class='add'>+                is_fuse_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "fuse-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strncmp(name, "gfapi", 5)) {</div><div class='add'>+            if (!is_gfapi_done) {</div><div class='add'>+                is_gfapi_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "gfapi-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strcmp(name, "tierd")) {</div><div class='add'>+            if (!is_tierd_done) {</div><div class='add'>+                is_tierd_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "tierd-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strcmp(name, "rebalance")) {</div><div class='add'>+            if (!is_rebalance_done) {</div><div class='add'>+                is_rebalance_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "rebalance-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strcmp(name, "glustershd")) {</div><div class='add'>+            if (!is_glustershd_done) {</div><div class='add'>+                is_glustershd_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "glustershd-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strcmp(name, "quotad")) {</div><div class='add'>+            if (!is_quotad_done) {</div><div class='add'>+                is_quotad_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "quotad-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strcmp(name, "snapd")) {</div><div class='add'>+            if (!is_snapd_done) {</div><div class='add'>+                is_snapd_done = _gf_true;</div><div class='add'>+                ret = dict_get_int32(dict, "snapd-count", &amp;current_count);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                total = total + current_count;</div><div class='add'>+                goto print;</div><div class='add'>+            }</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    print:</div><div class='add'>+        cli_out("%-48s %15d", name, current_count);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    cli_out("\ntotal clients for volume %s : %d ", volname, total);</div><div class='add'>+    cli_out(</div><div class='add'>+        "-----------------------------------------------------------------\n");</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.ia_type", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;ia_type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+void</div><div class='add'>+cli_print_volume_status_clients(dict_t *dict, gf_boolean_t notbrick)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int online = -1;</div><div class='add'>+    int client_count = 0;</div><div class='add'>+    char *clientname = NULL;</div><div class='add'>+    uint64_t bytesread = 0;</div><div class='add'>+    uint64_t byteswrite = 0;</div><div class='add'>+    uint32_t opversion = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("Client connections for volume %s", volname);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        hostname = NULL;</div><div class='add'>+        path = NULL;</div><div class='add'>+        online = -1;</div><div class='add'>+        client_count = 0;</div><div class='add'>+        clientname = NULL;</div><div class='add'>+        bytesread = 0;</div><div class='add'>+        byteswrite = 0;</div><div class='add'>+</div><div class='add'>+        cli_out("----------------------------------------------");</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.path", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+</div><div class='add'>+        if (hostname &amp;&amp; path) {</div><div class='add'>+            if (notbrick)</div><div class='add'>+                cli_out("%s : %s", hostname, path);</div><div class='add'>+            else</div><div class='add'>+                cli_out("Brick : %s:%s", hostname, path);</div><div class='add'>+        }</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;online);</div><div class='add'>+        if (!online) {</div><div class='add'>+            if (notbrick)</div><div class='add'>+                cli_out("%s is offline", hostname);</div><div class='add'>+            else</div><div class='add'>+                cli_out("Brick is offline");</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.clientcount", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;client_count);</div><div class='add'>+</div><div class='add'>+        if (hostname &amp;&amp; path)</div><div class='add'>+            cli_out("Clients connected : %d", client_count);</div><div class='add'>+        if (client_count == 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        cli_out("%-48s %15s %15s %15s", "Hostname", "BytesRead", "BytesWritten",</div><div class='add'>+                "OpVersion");</div><div class='add'>+        cli_out("%-48s %15s %15s %15s", "--------", "---------", "------------",</div><div class='add'>+                "---------");</div><div class='add'>+        for (j = 0; j &lt; client_count; j++) {</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.client%d.hostname", i, j);</div><div class='add'>+            ret = dict_get_str(dict, key, &amp;clientname);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.client%d.bytesread", i, j);</div><div class='add'>+            ret = dict_get_uint64(dict, key, &amp;bytesread);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.client%d.byteswrite", i, j);</div><div class='add'>+            ret = dict_get_uint64(dict, key, &amp;byteswrite);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.client%d.opversion", i, j);</div><div class='add'>+            ret = dict_get_uint32(dict, key, &amp;opversion);</div><div class='add'>+</div><div class='add'>+            cli_out("%-48s %15" PRIu64 " %15" PRIu64 " %15" PRIu32, clientname,</div><div class='add'>+                    bytesread, byteswrite, opversion);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    cli_out("----------------------------------------------\n");</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        switch (ia_type) {</div><div class='add'>+void</div><div class='add'>+cli_print_volume_status_inode_entry(dict_t *dict, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *gfid = NULL;</div><div class='add'>+    uint64_t nlookup = 0;</div><div class='add'>+    uint32_t ref = 0;</div><div class='add'>+    int ia_type = 0;</div><div class='add'>+    char inode_type;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(prefix);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.gfid", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.nlookup", prefix);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;nlookup);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.ref", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;ref);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.ia_type", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;ia_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    switch (ia_type) {</div><div class='ctx'>         case IA_IFREG:</div><div class='del'>-                inode_type = 'R';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'R';</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFDIR:</div><div class='del'>-                inode_type = 'D';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'D';</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFLNK:</div><div class='del'>-                inode_type = 'L';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'L';</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFBLK:</div><div class='del'>-                inode_type = 'B';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'B';</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFCHR:</div><div class='del'>-                inode_type = 'C';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'C';</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFIFO:</div><div class='del'>-                inode_type = 'F';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'F';</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFSOCK:</div><div class='del'>-                inode_type = 'S';</div><div class='del'>-                break;</div><div class='add'>+            inode_type = 'S';</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                inode_type = 'I';</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            inode_type = 'I';</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_out ("%-40s %14"PRIu64" %14"PRIu32" %9c",</div><div class='del'>-                 gfid, nlookup, ref, inode_type);</div><div class='add'>+    cli_out("%-40s %14" PRIu64 " %14" PRIu32 " %9c", gfid, nlookup, ref,</div><div class='add'>+            inode_type);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='del'>-</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_itables (dict_t *dict, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        uint32_t        active_size = 0;</div><div class='del'>-        uint32_t        lru_size = 0;</div><div class='del'>-        uint32_t        purge_size = 0;</div><div class='del'>-        int             i =0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (prefix);</div><div class='add'>+cli_print_volume_status_itables(dict_t *dict, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uint32_t active_size = 0;</div><div class='add'>+    uint32_t lru_size = 0;</div><div class='add'>+    uint32_t purge_size = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(prefix);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.active_size", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;active_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    if (active_size != 0) {</div><div class='add'>+        cli_out("Active inodes:");</div><div class='add'>+        cli_out("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", "IA type");</div><div class='add'>+        cli_out("%-40s %14s %14s %9s", "----", "-------", "---", "-------");</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; active_size; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.active%d", prefix, i);</div><div class='add'>+        cli_print_volume_status_inode_entry(dict, key);</div><div class='add'>+    }</div><div class='add'>+    cli_out(" ");</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.lru_size", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;lru_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    if (lru_size != 0) {</div><div class='add'>+        cli_out("LRU inodes:");</div><div class='add'>+        cli_out("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", "IA type");</div><div class='add'>+        cli_out("%-40s %14s %14s %9s", "----", "-------", "---", "-------");</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; lru_size; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.lru%d", prefix, i);</div><div class='add'>+        cli_print_volume_status_inode_entry(dict, key);</div><div class='add'>+    }</div><div class='add'>+    cli_out(" ");</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.purge_size", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;purge_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    if (purge_size != 0) {</div><div class='add'>+        cli_out("Purged inodes:");</div><div class='add'>+        cli_out("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref", "IA type");</div><div class='add'>+        cli_out("%-40s %14s %14s %9s", "----", "-------", "---", "-------");</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; purge_size; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.purge%d", prefix, i);</div><div class='add'>+        cli_print_volume_status_inode_entry(dict, key);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.active_size", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;active_size);</div><div class='add'>+void</div><div class='add'>+cli_print_volume_status_inode(dict_t *dict, gf_boolean_t notbrick)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int online = -1;</div><div class='add'>+    int conn_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("Inode tables for volume %s", volname);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        cli_out("----------------------------------------------");</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        if (active_size != 0) {</div><div class='del'>-                cli_out ("Active inodes:");</div><div class='del'>-                cli_out ("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref",</div><div class='del'>-                         "IA type");</div><div class='del'>-                cli_out ("%-40s %14s %14s %9s", "----", "-------", "---",</div><div class='del'>-                         "-------");</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; active_size; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.active%d", prefix, i);</div><div class='del'>-                cli_print_volume_status_inode_entry (dict, key);</div><div class='del'>-        }</div><div class='del'>-        cli_out (" ");</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.path", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        if (notbrick)</div><div class='add'>+            cli_out("%s : %s", hostname, path);</div><div class='add'>+        else</div><div class='add'>+            cli_out("Brick : %s:%s", hostname, path);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.lru_size", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;lru_size);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;online);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        if (lru_size != 0) {</div><div class='del'>-                cli_out ("LRU inodes:");</div><div class='del'>-                cli_out ("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref",</div><div class='del'>-                         "IA type");</div><div class='del'>-                cli_out ("%-40s %14s %14s %9s", "----", "-------", "---",</div><div class='del'>-                         "-------");</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; lru_size; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.lru%d", prefix, i);</div><div class='del'>-                cli_print_volume_status_inode_entry (dict, key);</div><div class='add'>+            goto out;</div><div class='add'>+        if (!online) {</div><div class='add'>+            if (notbrick)</div><div class='add'>+                cli_out("%s is offline", hostname);</div><div class='add'>+            else</div><div class='add'>+                cli_out("Brick is offline");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-        cli_out (" ");</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.purge_size", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;purge_size);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.conncount", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;conn_count);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        if (purge_size != 0) {</div><div class='del'>-                cli_out ("Purged inodes:");</div><div class='del'>-                cli_out ("%-40s %14s %14s %9s", "GFID", "Lookups", "Ref",</div><div class='del'>-                         "IA type");</div><div class='del'>-                cli_out ("%-40s %14s %14s %9s", "----", "-------", "---",</div><div class='del'>-                         "-------");</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; purge_size; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.purge%d", prefix, i);</div><div class='del'>-                cli_print_volume_status_inode_entry (dict, key);</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        for (j = 0; j &lt; conn_count; j++) {</div><div class='add'>+            if (conn_count &gt; 1)</div><div class='add'>+                cli_out("Connection %d:", j + 1);</div><div class='ctx'> </div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.conn%d.itable", i, j);</div><div class='add'>+            cli_print_volume_status_itables(dict, key);</div><div class='add'>+            cli_out(" ");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    cli_out("----------------------------------------------");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_inode (dict_t *dict, gf_boolean_t notbrick)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        int             brick_index_max = -1;</div><div class='del'>-        int             other_count = 0;</div><div class='del'>-        int             index_max = 0;</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        int             online = -1;</div><div class='del'>-        int             conn_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             j = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='add'>+cli_print_volume_status_fdtable(dict_t *dict, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int refcount = 0;</div><div class='add'>+    uint32_t maxfds = 0;</div><div class='add'>+    int firstfree = 0;</div><div class='add'>+    int openfds = 0;</div><div class='add'>+    int fd_pid = 0;</div><div class='add'>+    int fd_refcount = 0;</div><div class='add'>+    int fd_flags = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(prefix);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.refcount", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;refcount);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.maxfds", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;maxfds);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.firstfree", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;firstfree);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    cli_out("RefCount = %d  MaxFDs = %d  FirstFree = %d", refcount, maxfds,</div><div class='add'>+            firstfree);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.openfds", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;openfds);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    if (0 == openfds) {</div><div class='add'>+        cli_err("No open fds");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cli_out("%-19s %-19s %-19s %-19s", "FD Entry", "PID", "RefCount", "Flags");</div><div class='add'>+    cli_out("%-19s %-19s %-19s %-19s", "--------", "---", "--------", "-----");</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; maxfds; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.fdentry%d.pid", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;fd_pid);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("Inode tables for volume %s", volname);</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.fdentry%d.refcount", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;fd_refcount);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        for ( i = 0; i &lt;= index_max; i++) {</div><div class='del'>-                cli_out ("----------------------------------------------");</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.path", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (notbrick)</div><div class='del'>-                        cli_out ("%s : %s", hostname, path);</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Brick : %s:%s", hostname, path);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;online);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (!online) {</div><div class='del'>-                        if (notbrick)</div><div class='del'>-                                cli_out ("%s is offline", hostname);</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("Brick is offline");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.conncount", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;conn_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.fdentry%d.flags", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;fd_flags);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                for (j = 0; j &lt; conn_count; j++) {</div><div class='del'>-                        if (conn_count &gt; 1)</div><div class='del'>-                                cli_out ("Connection %d:", j+1);</div><div class='add'>+        cli_out("%-19d %-19d %-19d %-19d", i, fd_pid, fd_refcount, fd_flags);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        snprintf (key, sizeof (key), "brick%d.conn%d.itable",</div><div class='del'>-                                  i, j);</div><div class='del'>-                        cli_print_volume_status_itables (dict, key);</div><div class='del'>-                        cli_out (" ");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='ctx'> out:</div><div class='del'>-        cli_out ("----------------------------------------------");</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_fdtable (dict_t *dict, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             refcount = 0;</div><div class='del'>-        uint32_t        maxfds = 0;</div><div class='del'>-        int             firstfree = 0;</div><div class='del'>-        int             openfds = 0;</div><div class='del'>-        int             fd_pid = 0;</div><div class='del'>-        int             fd_refcount = 0;</div><div class='del'>-        int             fd_flags = 0;</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (prefix);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.refcount", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;refcount);</div><div class='add'>+cli_print_volume_status_fd(dict_t *dict, gf_boolean_t notbrick)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int online = -1;</div><div class='add'>+    int conn_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("FD tables for volume %s", volname);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        cli_out("----------------------------------------------");</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.maxfds", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;maxfds);</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.path", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.firstfree", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;firstfree);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        cli_out ("RefCount = %d  MaxFDs = %d  FirstFree = %d",</div><div class='del'>-                 refcount, maxfds, firstfree);</div><div class='add'>+        if (notbrick)</div><div class='add'>+            cli_out("%s : %s", hostname, path);</div><div class='add'>+        else</div><div class='add'>+            cli_out("Brick : %s:%s", hostname, path);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.openfds", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;openfds);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;online);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        if (0 == openfds) {</div><div class='del'>-                cli_err ("No open fds");</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+        if (!online) {</div><div class='add'>+            if (notbrick)</div><div class='add'>+                cli_out("%s is offline", hostname);</div><div class='add'>+            else</div><div class='add'>+                cli_out("Brick is offline");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        cli_out ("%-19s %-19s %-19s %-19s", "FD Entry", "PID",</div><div class='del'>-                 "RefCount", "Flags");</div><div class='del'>-        cli_out ("%-19s %-19s %-19s %-19s", "--------", "---",</div><div class='del'>-                 "--------", "-----");</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; maxfds ; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.fdentry%d.pid", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;fd_pid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.fdentry%d.refcount",</div><div class='del'>-                          prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;fd_refcount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.conncount", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;conn_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.fdentry%d.flags", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;fd_flags);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='add'>+        for (j = 0; j &lt; conn_count; j++) {</div><div class='add'>+            cli_out("Connection %d:", j + 1);</div><div class='ctx'> </div><div class='del'>-                cli_out ("%-19d %-19d %-19d %-19d", i, fd_pid, fd_refcount,</div><div class='del'>-                         fd_flags);</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.conn%d.fdtable", i, j);</div><div class='add'>+            cli_print_volume_status_fdtable(dict, key);</div><div class='add'>+            cli_out(" ");</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    cli_out("----------------------------------------------");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_fd (dict_t *dict, gf_boolean_t notbrick)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        int             brick_index_max = -1;</div><div class='del'>-        int             other_count = 0;</div><div class='del'>-        int             index_max = 0;</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        int             online = -1;</div><div class='del'>-        int             conn_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             j = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("FD tables for volume %s", volname);</div><div class='add'>+cli_print_volume_status_call_frame(dict_t *dict, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ref_count = 0;</div><div class='add'>+    char *translator = 0;</div><div class='add'>+    int complete = 0;</div><div class='add'>+    char *parent = NULL;</div><div class='add'>+    char *wind_from = NULL;</div><div class='add'>+    char *wind_to = NULL;</div><div class='add'>+    char *unwind_from = NULL;</div><div class='add'>+    char *unwind_to = NULL;</div><div class='add'>+</div><div class='add'>+    if (!dict || !prefix)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.refcount", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;ref_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.translator", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;translator);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt;= index_max; i++) {</div><div class='del'>-                cli_out ("----------------------------------------------");</div><div class='add'>+    snprintf(key, sizeof(key), "%s.complete", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;complete);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.path", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    cli_out("  Ref Count   = %d", ref_count);</div><div class='add'>+    cli_out("  Translator  = %s", translator);</div><div class='add'>+    cli_out("  Completed   = %s", (complete ? "Yes" : "No"));</div><div class='ctx'> </div><div class='del'>-                if (notbrick)</div><div class='del'>-                        cli_out ("%s : %s", hostname, path);</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Brick : %s:%s", hostname, path);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.parent", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;parent);</div><div class='add'>+    if (!ret)</div><div class='add'>+        cli_out("  Parent      = %s", parent);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;online);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (!online) {</div><div class='del'>-                        if (notbrick)</div><div class='del'>-                                cli_out ("%s is offline", hostname);</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("Brick is offline");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.windfrom", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;wind_from);</div><div class='add'>+    if (!ret)</div><div class='add'>+        cli_out("  Wind From   = %s", wind_from);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.conncount", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;conn_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.windto", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;wind_to);</div><div class='add'>+    if (!ret)</div><div class='add'>+        cli_out("  Wind To     = %s", wind_to);</div><div class='ctx'> </div><div class='del'>-                for (j = 0; j &lt; conn_count; j++) {</div><div class='del'>-                        cli_out ("Connection %d:", j+1);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unwindfrom", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;unwind_from);</div><div class='add'>+    if (!ret)</div><div class='add'>+        cli_out("  Unwind From = %s", unwind_from);</div><div class='ctx'> </div><div class='del'>-                        snprintf (key, sizeof (key), "brick%d.conn%d.fdtable",</div><div class='del'>-                                  i, j);</div><div class='del'>-                        cli_print_volume_status_fdtable (dict, key);</div><div class='del'>-                        cli_out (" ");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        cli_out ("----------------------------------------------");</div><div class='del'>-        return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unwindto", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;unwind_to);</div><div class='add'>+    if (!ret)</div><div class='add'>+        cli_out("  Unwind To   = %s", unwind_to);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_call_frame (dict_t *dict, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             ref_count = 0;</div><div class='del'>-        char            *translator = 0;</div><div class='del'>-        int             complete = 0;</div><div class='del'>-        char            *parent = NULL;</div><div class='del'>-        char            *wind_from = NULL;</div><div class='del'>-        char            *wind_to = NULL;</div><div class='del'>-        char            *unwind_from = NULL;</div><div class='del'>-        char            *unwind_to = NULL;</div><div class='add'>+cli_print_volume_status_call_stack(dict_t *dict, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int uid = 0;</div><div class='add'>+    int gid = 0;</div><div class='add'>+    int pid = 0;</div><div class='add'>+    uint64_t unique = 0;</div><div class='add'>+    // char            *op = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!dict || !prefix)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!dict || !prefix)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.uid", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;uid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.refcount", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;ref_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.gid", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;gid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.translator", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;translator);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.pid", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.complete", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;complete);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unique", prefix);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;unique);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        cli_out ("  Ref Count   = %d", ref_count);</div><div class='del'>-        cli_out ("  Translator  = %s", translator);</div><div class='del'>-        cli_out ("  Completed   = %s", (complete ? "Yes" : "No"));</div><div class='add'>+    /*</div><div class='add'>+    snprintf (key, sizeof (key), "%s.op", prefix);</div><div class='add'>+    ret = dict_get_str (dict, key, &amp;op);</div><div class='add'>+    if (ret)</div><div class='add'>+            return;</div><div class='add'>+    */</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.parent", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;parent);</div><div class='del'>-        if (!ret)</div><div class='del'>-                cli_out ("  Parent      = %s", parent);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.count", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.windfrom", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;wind_from);</div><div class='del'>-        if (!ret)</div><div class='del'>-                cli_out ("  Wind From   = %s", wind_from);</div><div class='add'>+    cli_out(" UID    : %d", uid);</div><div class='add'>+    cli_out(" GID    : %d", gid);</div><div class='add'>+    cli_out(" PID    : %d", pid);</div><div class='add'>+    cli_out(" Unique : %" PRIu64, unique);</div><div class='add'>+    // cli_out ("\tOp     : %s", op);</div><div class='add'>+    cli_out(" Frames : %d", count);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.windto", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;wind_to);</div><div class='del'>-        if (!ret)</div><div class='del'>-                cli_out ("  Wind To     = %s", wind_to);</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        cli_out(" Frame %d", i + 1);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.unwindfrom", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;unwind_from);</div><div class='del'>-        if (!ret)</div><div class='del'>-                cli_out ("  Unwind From = %s", unwind_from);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.frame%d", prefix, i);</div><div class='add'>+        cli_print_volume_status_call_frame(dict, key);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.unwindto", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;unwind_to);</div><div class='del'>-        if (!ret)</div><div class='del'>-                cli_out ("  Unwind To   = %s", unwind_to);</div><div class='add'>+    cli_out(" ");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_volume_status_call_stack (dict_t *dict, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             uid = 0;</div><div class='del'>-        int             gid = 0;</div><div class='del'>-        int             pid = 0;</div><div class='del'>-        uint64_t        unique = 0;</div><div class='del'>-        //char            *op = NULL;</div><div class='del'>-        int             count = 0;</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        if (!dict || !prefix)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.uid", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;uid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.gid", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;gid);</div><div class='add'>+cli_print_volume_status_callpool(dict_t *dict, gf_boolean_t notbrick)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int online = -1;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("Pending calls for volume %s", volname);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        cli_out("----------------------------------------------");</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.pid", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.unique", prefix);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;unique);</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.path", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-        snprintf (key, sizeof (key), "%s.op", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;op);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='del'>-        */</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='add'>+        if (notbrick)</div><div class='add'>+            cli_out("%s : %s", hostname, path);</div><div class='add'>+        else</div><div class='add'>+            cli_out("Brick : %s:%s", hostname, path);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.count", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;count);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;online);</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        cli_out (" UID    : %d", uid);</div><div class='del'>-        cli_out (" GID    : %d", gid);</div><div class='del'>-        cli_out (" PID    : %d", pid);</div><div class='del'>-        cli_out (" Unique : %"PRIu64, unique);</div><div class='del'>-        //cli_out ("\tOp     : %s", op);</div><div class='del'>-        cli_out (" Frames : %d", count);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                cli_out (" Frame %d", i+1);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.frame%d", prefix, i);</div><div class='del'>-                cli_print_volume_status_call_frame (dict, key);</div><div class='add'>+            goto out;</div><div class='add'>+        if (!online) {</div><div class='add'>+            if (notbrick)</div><div class='add'>+                cli_out("%s is offline", hostname);</div><div class='add'>+            else</div><div class='add'>+                cli_out("Brick is offline");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        cli_out (" ");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-cli_print_volume_status_callpool (dict_t *dict, gf_boolean_t notbrick)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        int             brick_index_max = -1;</div><div class='del'>-        int             other_count = 0;</div><div class='del'>-        int             index_max = 0;</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        int             online = -1;</div><div class='del'>-        int             call_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             j = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("Pending calls for volume %s", volname);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.callpool.count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;call_count);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+        cli_out("Pending calls: %d", call_count);</div><div class='ctx'> </div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='add'>+        if (0 == call_count)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt;= index_max; i++) {</div><div class='del'>-                cli_out ("----------------------------------------------");</div><div class='add'>+        for (j = 0; j &lt; call_count; j++) {</div><div class='add'>+            cli_out("Call Stack%d", j + 1);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.path", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (notbrick)</div><div class='del'>-                        cli_out ("%s : %s", hostname, path);</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Brick : %s:%s", hostname, path);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;online);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (!online) {</div><div class='del'>-                        if (notbrick)</div><div class='del'>-                                cli_out ("%s is offline", hostname);</div><div class='del'>-                        else</div><div class='del'>-                                cli_out ("Brick is offline");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.callpool.count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;call_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                cli_out ("Pending calls: %d", call_count);</div><div class='del'>-</div><div class='del'>-                if (0 == call_count)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                for (j = 0; j &lt; call_count; j++) {</div><div class='del'>-                        cli_out ("Call Stack%d", j+1);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                  "brick%d.callpool.stack%d", i, j);</div><div class='del'>-                        cli_print_volume_status_call_stack (dict, key);</div><div class='del'>-                }</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.callpool.stack%d", i, j);</div><div class='add'>+            cli_print_volume_status_call_stack(dict, key);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_out ("----------------------------------------------");</div><div class='del'>-        return;</div><div class='add'>+    cli_out("----------------------------------------------");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cli_print_volume_status_tasks (dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        int             ret         = -1;</div><div class='del'>-        int             i           = 0;</div><div class='del'>-        int             j           = 0;</div><div class='del'>-        int             count       = 0;</div><div class='del'>-        int             task_count  = 0;</div><div class='del'>-        int             status      = 0;</div><div class='del'>-        char           *op          = NULL;</div><div class='del'>-        char           *task_id_str = NULL;</div><div class='del'>-        char           *volname     = NULL;</div><div class='del'>-        char            key[64]     = {0,};</div><div class='del'>-        char            task[32]    = {0,};</div><div class='del'>-        char           *brick       = NULL;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "tasks", &amp;task_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get tasks count");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+cli_print_volume_status_tasks(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int task_count = 0;</div><div class='add'>+    int status = 0;</div><div class='add'>+    char *op = NULL;</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char key[64] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char task[32] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *brick = NULL;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "tasks", &amp;task_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get tasks count");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_out ("Task Status of Volume %s", volname);</div><div class='del'>-        cli_print_line (CLI_BRICK_STATUS_LINE_LEN);</div><div class='add'>+    cli_out("Task Status of Volume %s", volname);</div><div class='add'>+    cli_print_line(CLI_BRICK_STATUS_LINE_LEN);</div><div class='ctx'> </div><div class='del'>-        if (task_count == 0) {</div><div class='del'>-                cli_out ("There are no active volume tasks");</div><div class='del'>-                cli_out (" ");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (task_count == 0) {</div><div class='add'>+        cli_out("There are no active volume tasks");</div><div class='add'>+        cli_out(" ");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; task_count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "task%d.type", i);</div><div class='del'>-                ret = dict_get_str(dict, key, &amp;op);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-                cli_out ("%-20s : %-20s", "Task", op);</div><div class='add'>+    for (i = 0; i &lt; task_count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "task%d.type", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;op);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+        cli_out("%-20s : %-20s", "Task", op);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "task%d.id", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;task_id_str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-                cli_out ("%-20s : %-20s", "ID", task_id_str);</div><div class='add'>+        snprintf(key, sizeof(key), "task%d.id", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;task_id_str);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+        cli_out("%-20s : %-20s", "ID", task_id_str);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "task%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;status);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='add'>+        snprintf(key, sizeof(key), "task%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;status);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='ctx'> </div><div class='del'>-                snprintf (task, sizeof (task), "task%d", i);</div><div class='add'>+        snprintf(task, sizeof(task), "task%d", i);</div><div class='ctx'> </div><div class='del'>-                if (!strcmp (op, "Remove brick")) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%s.count", task);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;count);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='add'>+        if (!strcmp(op, "Remove brick")) {</div><div class='add'>+            snprintf(key, sizeof(key), "%s.count", task);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;count);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                        cli_out ("%-20s", "Removed bricks:");</div><div class='add'>+            cli_out("%-20s", "Removed bricks:");</div><div class='ctx'> </div><div class='del'>-                        for (j = 1; j &lt;= count; j++) {</div><div class='del'>-                                snprintf (key, sizeof (key),"%s.brick%d",</div><div class='del'>-                                          task, j);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='add'>+            for (j = 1; j &lt;= count; j++) {</div><div class='add'>+                snprintf(key, sizeof(key), "%s.brick%d", task, j);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;brick);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                                cli_out ("%-20s", brick);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                cli_out ("%-20s : %-20s", "Status",</div><div class='del'>-                         cli_vol_task_status_str[status]);</div><div class='del'>-                cli_out (" ");</div><div class='add'>+                cli_out("%-20s", brick);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        cli_out("%-20s : %-20s", "Status", cli_vol_task_status_str[status]);</div><div class='add'>+        cli_out(" ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_cli_status_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                      int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int                             ret             = -1;</div><div class='del'>-        int                             brick_index_max = -1;</div><div class='del'>-        int                             other_count     = 0;</div><div class='del'>-        int                             index_max       = 0;</div><div class='del'>-        int                             i               = 0;</div><div class='del'>-        int                             type            = -1;</div><div class='del'>-        int                             hot_brick_count = -1;</div><div class='del'>-        int                             pid             = -1;</div><div class='del'>-        uint32_t                        cmd             = 0;</div><div class='del'>-        gf_boolean_t                    notbrick        = _gf_false;</div><div class='del'>-        char                            key[1024]       = {0,};</div><div class='del'>-        char                           *hostname        = NULL;</div><div class='del'>-        char                           *path            = NULL;</div><div class='del'>-        char                           *volname         = NULL;</div><div class='del'>-        dict_t                         *dict            = NULL;</div><div class='del'>-        gf_cli_rsp                      rsp             = {0,};</div><div class='del'>-        cli_volume_status_t             status          = {0};</div><div class='del'>-        cli_local_t                    *local           = NULL;</div><div class='del'>-        gf_boolean_t                    wipe_local      = _gf_false;</div><div class='del'>-        char                            msg[1024]       = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;rpc_status == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received response to status cmd");</div><div class='del'>-</div><div class='del'>-        local = ((call_frame_t *) myframe)-&gt;local;</div><div class='add'>+gf_cli_status_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                  void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int type = -1;</div><div class='add'>+    int hot_brick_count = -1;</div><div class='add'>+    int pid = -1;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='add'>+    gf_boolean_t notbrick = _gf_false;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    cli_volume_status_t status = {0};</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    gf_boolean_t wipe_local = _gf_false;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;rpc_status == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received response to status cmd");</div><div class='add'>+</div><div class='add'>+    local = ((call_frame_t *)myframe)-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        local = cli_local_get();</div><div class='ctx'>         if (!local) {</div><div class='del'>-                local = cli_local_get ();</div><div class='del'>-                if (!local) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get local");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                wipe_local = _gf_true;</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to get local");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        wipe_local = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        snprintf (msg, sizeof (msg), "Unable to obtain volume "</div><div class='del'>-                                  "status information.");</div><div class='del'>-</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        if (!local-&gt;all)</div><div class='del'>-                                cli_xml_output_str ("volStatus", msg,</div><div class='del'>-                                                    rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                                    rsp.op_errstr);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "Unable to obtain volume "</div><div class='add'>+                     "status information.");</div><div class='ctx'> </div><div class='del'>-                cli_err ("%s", msg);</div><div class='del'>-                if (local &amp;&amp; local-&gt;all) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        cli_out (" ");</div><div class='del'>-                } else</div><div class='del'>-                        ret = -1;</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+            if (!local-&gt;all)</div><div class='add'>+                cli_xml_output_str("volStatus", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                   rsp.op_errstr);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        cli_err("%s", msg);</div><div class='add'>+        if (local &amp;&amp; local-&gt;all) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            cli_out(" ");</div><div class='add'>+        } else</div><div class='add'>+            ret = -1;</div><div class='add'>+</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(dict, "cmd", &amp;cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if ((cmd &amp; GF_CLI_STATUS_ALL)) {</div><div class='add'>+        if (local &amp;&amp; local-&gt;dict) {</div><div class='add'>+            dict_ref(dict);</div><div class='add'>+            ret = dict_set_static_ptr(local-&gt;dict, "rsp-dict", dict);</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "local not found");</div><div class='add'>+            ret = -1;</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((cmd &amp; GF_CLI_STATUS_NFS) || (cmd &amp; GF_CLI_STATUS_SHD) ||</div><div class='add'>+        (cmd &amp; GF_CLI_STATUS_QUOTAD) || (cmd &amp; GF_CLI_STATUS_SNAPD) ||</div><div class='add'>+        (cmd &amp; GF_CLI_STATUS_BITD) || (cmd &amp; GF_CLI_STATUS_SCRUB) ||</div><div class='add'>+        (cmd &amp; GF_CLI_STATUS_TIERD))</div><div class='add'>+        notbrick = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        if (!local-&gt;all) {</div><div class='add'>+            ret = cli_xml_output_vol_status_begin(local, rsp.op_ret,</div><div class='add'>+                                                  rsp.op_errno, rsp.op_errstr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+                goto xml_end;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (cmd &amp; GF_CLI_STATUS_TASKS) {</div><div class='add'>+            ret = cli_xml_output_vol_status_tasks_detail(local, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Error outputting "</div><div class='add'>+                       "to xml");</div><div class='add'>+                goto xml_end;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            ret = cli_xml_output_vol_status(local, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+                goto xml_end;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    xml_end:</div><div class='add'>+        if (!local-&gt;all) {</div><div class='add'>+            ret = cli_xml_output_vol_status_end(local);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    status.brick = GF_MALLOC(PATH_MAX + 256, gf_common_mt_strdup);</div><div class='add'>+    if (!status.brick) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='add'>+        case GF_CLI_STATUS_MEM:</div><div class='add'>+            cli_print_volume_status_mem(dict, notbrick);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        case GF_CLI_STATUS_CLIENTS:</div><div class='add'>+            cli_print_volume_status_clients(dict, notbrick);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        case GF_CLI_STATUS_CLIENT_LIST:</div><div class='add'>+            cli_print_volume_status_client_list(dict, notbrick);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        case GF_CLI_STATUS_INODE:</div><div class='add'>+            cli_print_volume_status_inode(dict, notbrick);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        case GF_CLI_STATUS_FD:</div><div class='add'>+            cli_print_volume_status_fd(dict, notbrick);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        case GF_CLI_STATUS_CALLPOOL:</div><div class='add'>+            cli_print_volume_status_callpool(dict, notbrick);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        case GF_CLI_STATUS_TASKS:</div><div class='add'>+            cli_print_volume_status_tasks(dict);</div><div class='add'>+            goto cont;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint32 (dict, "cmd", &amp;cmd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='ctx'> </div><div class='del'>-        if ((cmd &amp; GF_CLI_STATUS_ALL)) {</div><div class='del'>-                if (local &amp;&amp; local-&gt;dict) {</div><div class='del'>-                        dict_ref (dict);</div><div class='del'>-                        ret = dict_set_static_ptr (local-&gt;dict, "rsp-dict", dict);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "local not found");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((cmd &amp; GF_CLI_STATUS_NFS) || (cmd &amp; GF_CLI_STATUS_SHD) ||</div><div class='del'>-            (cmd &amp; GF_CLI_STATUS_QUOTAD) || (cmd &amp; GF_CLI_STATUS_SNAPD) ||</div><div class='del'>-            (cmd &amp; GF_CLI_STATUS_BITD) || (cmd &amp; GF_CLI_STATUS_SCRUB) ||</div><div class='del'>-            (cmd &amp; GF_CLI_STATUS_TIERD))</div><div class='del'>-                notbrick = _gf_true;</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                if (!local-&gt;all) {</div><div class='del'>-                        ret = cli_xml_output_vol_status_begin (local,</div><div class='del'>-                                                               rsp.op_ret,</div><div class='del'>-                                                               rsp.op_errno,</div><div class='del'>-                                                               rsp.op_errstr);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                                goto xml_end;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (cmd &amp; GF_CLI_STATUS_TASKS) {</div><div class='del'>-                        ret = cli_xml_output_vol_status_tasks_detail (local,</div><div class='del'>-                                                                      dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,"Error outputting "</div><div class='del'>-                                        "to xml");</div><div class='del'>-                                goto xml_end;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = cli_xml_output_vol_status (local, dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                                goto xml_end;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    ret = dict_get_int32(dict, "hot_brick_count", &amp;hot_brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-xml_end:</div><div class='del'>-                if (!local-&gt;all) {</div><div class='del'>-                        ret = cli_xml_output_vol_status_end (local);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    cli_out("Status of volume: %s", volname);</div><div class='ctx'> </div><div class='del'>-        status.brick = GF_MALLOC (PATH_MAX + 256, gf_common_mt_strdup);</div><div class='del'>-        if (!status.brick) {</div><div class='del'>-                errno   = ENOMEM;</div><div class='del'>-                ret     = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    if ((cmd &amp; GF_CLI_STATUS_DETAIL) == 0) {</div><div class='add'>+        cli_out("%-*s %s  %s  %s  %s", CLI_VOL_STATUS_BRICK_LEN,</div><div class='add'>+                "Gluster process", "TCP Port", "RDMA Port", "Online", "Pid");</div><div class='add'>+        cli_print_line(CLI_BRICK_STATUS_LINE_LEN);</div><div class='add'>+    }</div><div class='add'>+    if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+        cli_out("Hot Bricks:");</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_TIER &amp;&amp; i == hot_brick_count) {</div><div class='add'>+            cli_out("Cold Bricks:");</div><div class='ctx'>         }</div><div class='del'>-        switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='del'>-                case GF_CLI_STATUS_MEM:</div><div class='del'>-                        cli_print_volume_status_mem (dict, notbrick);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATUS_CLIENTS:</div><div class='del'>-                        cli_print_volume_status_clients (dict, notbrick);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATUS_CLIENT_LIST:</div><div class='del'>-                        cli_print_volume_status_client_list (dict, notbrick);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATUS_INODE:</div><div class='del'>-                        cli_print_volume_status_inode (dict, notbrick);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATUS_FD:</div><div class='del'>-                        cli_print_volume_status_fd (dict, notbrick);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATUS_CALLPOOL:</div><div class='del'>-                        cli_print_volume_status_callpool (dict, notbrick);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_CLI_STATUS_TASKS:</div><div class='del'>-                        cli_print_volume_status_tasks (dict);</div><div class='del'>-                        goto cont;</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        status.rdma_port = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.path", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;path);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='add'>+        /* Brick/not-brick is handled separately here as all</div><div class='add'>+         * types of nodes are contained in the default output</div><div class='add'>+         */</div><div class='add'>+        memset(status.brick, 0, PATH_MAX + 255);</div><div class='add'>+        if (!strcmp(hostname, "NFS Server") ||</div><div class='add'>+            !strcmp(hostname, "Self-heal Daemon") ||</div><div class='add'>+            !strcmp(hostname, "Quota Daemon") ||</div><div class='add'>+            !strcmp(hostname, "Snapshot Daemon") ||</div><div class='add'>+            !strcmp(hostname, "Scrubber Daemon") ||</div><div class='add'>+            !strcmp(hostname, "Bitrot Daemon") ||</div><div class='add'>+            !strcmp(hostname, "Tier Daemon"))</div><div class='add'>+            snprintf(status.brick, PATH_MAX + 255, "%s on %s", hostname, path);</div><div class='add'>+        else {</div><div class='add'>+            snprintf(key, sizeof(key), "brick%d.rdma_port", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;(status.rdma_port));</div><div class='add'>+            if (ret)</div><div class='add'>+                continue;</div><div class='add'>+            snprintf(status.brick, PATH_MAX + 255, "Brick %s:%s", hostname,</div><div class='add'>+                     path);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.port", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;(status.port));</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "hot_brick_count", &amp;hot_brick_count);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;(status.online));</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        cli_out ("Status of volume: %s", volname);</div><div class='del'>-</div><div class='del'>-        if ((cmd &amp; GF_CLI_STATUS_DETAIL) == 0) {</div><div class='del'>-                cli_out ("%-*s %s  %s  %s  %s", CLI_VOL_STATUS_BRICK_LEN,</div><div class='del'>-                         "Gluster process", "TCP Port", "RDMA Port",</div><div class='del'>-                         "Online", "Pid");</div><div class='del'>-                cli_print_line (CLI_BRICK_STATUS_LINE_LEN);</div><div class='del'>-        }</div><div class='del'>-        if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-                cli_out ("Hot Bricks:");</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt;= index_max; i++) {</div><div class='del'>-</div><div class='del'>-                if (type == GF_CLUSTER_TYPE_TIER &amp;&amp; i == hot_brick_count) {</div><div class='del'>-                        cli_out ("Cold Bricks:");</div><div class='del'>-                }</div><div class='del'>-                status.rdma_port = 0;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.path", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* Brick/not-brick is handled separately here as all</div><div class='del'>-                 * types of nodes are contained in the default output</div><div class='del'>-                 */</div><div class='del'>-                memset (status.brick, 0, PATH_MAX + 255);</div><div class='del'>-                if (!strcmp (hostname, "NFS Server") ||</div><div class='del'>-                    !strcmp (hostname, "Self-heal Daemon") ||</div><div class='del'>-                    !strcmp (hostname, "Quota Daemon") ||</div><div class='del'>-                    !strcmp (hostname, "Snapshot Daemon") ||</div><div class='del'>-                    !strcmp (hostname, "Scrubber Daemon") ||</div><div class='del'>-                    !strcmp (hostname, "Bitrot Daemon") ||</div><div class='del'>-                    !strcmp (hostname, "Tier Daemon"))</div><div class='del'>-                        snprintf (status.brick, PATH_MAX + 255, "%s on %s",</div><div class='del'>-                                  hostname, path);</div><div class='del'>-                else {</div><div class='del'>-                        snprintf (key, sizeof (key), "brick%d.rdma_port", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;(status.rdma_port));</div><div class='del'>-                        if (ret)</div><div class='del'>-                                continue;</div><div class='del'>-                        snprintf (status.brick, PATH_MAX + 255, "Brick %s:%s",</div><div class='del'>-                                  hostname, path);</div><div class='del'>-                }</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.port", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;(status.port));</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;(status.online));</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.pid", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;pid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-                if (pid == -1)</div><div class='del'>-                        ret = gf_asprintf (&amp;(status.pid_str), "%s", "N/A");</div><div class='del'>-                else</div><div class='del'>-                        ret = gf_asprintf (&amp;(status.pid_str), "%d", pid);</div><div class='del'>-</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.pid", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;pid);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='add'>+        if (pid == -1)</div><div class='add'>+            ret = gf_asprintf(&amp;(status.pid_str), "%s", "N/A");</div><div class='add'>+        else</div><div class='add'>+            ret = gf_asprintf(&amp;(status.pid_str), "%d", pid);</div><div class='ctx'> </div><div class='del'>-                if ((cmd &amp; GF_CLI_STATUS_DETAIL)) {</div><div class='del'>-                        ret = cli_get_detail_status (dict, i, &amp;status);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        cli_print_line (CLI_BRICK_STATUS_LINE_LEN);</div><div class='del'>-                        cli_print_detailed_status (&amp;status);</div><div class='del'>-                } else {</div><div class='del'>-                        cli_print_brick_status (&amp;status);</div><div class='del'>-                }</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='add'>+        if ((cmd &amp; GF_CLI_STATUS_DETAIL)) {</div><div class='add'>+            ret = cli_get_detail_status(dict, i, &amp;status);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            cli_print_line(CLI_BRICK_STATUS_LINE_LEN);</div><div class='add'>+            cli_print_detailed_status(&amp;status);</div><div class='add'>+        } else {</div><div class='add'>+            cli_print_brick_status(&amp;status);</div><div class='ctx'>         }</div><div class='del'>-        cli_out (" ");</div><div class='add'>+    }</div><div class='add'>+    cli_out(" ");</div><div class='ctx'> </div><div class='del'>-        if ((cmd &amp; GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE)</div><div class='del'>-                cli_print_volume_status_tasks (dict);</div><div class='add'>+    if ((cmd &amp; GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE)</div><div class='add'>+        cli_print_volume_status_tasks(dict);</div><div class='ctx'> cont:</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        GF_FREE (status.brick);</div><div class='del'>-        if (local &amp;&amp; wipe_local) {</div><div class='del'>-                cli_local_wipe (local);</div><div class='del'>-        }</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    GF_FREE(status.brick);</div><div class='add'>+    if (local &amp;&amp; wipe_local) {</div><div class='add'>+        cli_local_wipe(local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_status_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_status_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req  = {{0,}};</div><div class='del'>-        int                             ret  = -1;</div><div class='del'>-        dict_t                         *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_status_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_STATUS_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='del'>- out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning: %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_status_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_STATUS_VOLUME, this, cli_rpc_prog, NULL);</div><div class='add'>+out:</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning: %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_status_volume_all (call_frame_t *frame, xlator_t *this, void *data)</div><div class='del'>-{</div><div class='del'>-        int              i            = 0;</div><div class='del'>-        int              ret          = -1;</div><div class='del'>-        int              vol_count    = -1;</div><div class='del'>-        uint32_t         cmd          = 0;</div><div class='del'>-        char             key[1024]    = {0};</div><div class='del'>-        char            *volname      = NULL;</div><div class='del'>-        void            *vol_dict     = NULL;</div><div class='del'>-        dict_t          *dict         = NULL;</div><div class='del'>-        cli_local_t     *local        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+gf_cli_status_volume_all(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int vol_count = -1;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='add'>+    char key[1024] = {0};</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    void *vol_dict = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (!frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint32 (local-&gt;dict, "cmd", &amp;cmd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;all = _gf_true;</div><div class='add'>+    ret = dict_get_uint32(local-&gt;dict, "cmd", &amp;cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = gf_cli_status_volume (frame, this, data);</div><div class='add'>+    local-&gt;all = _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = gf_cli_status_volume(frame, this, data);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_ptr (local-&gt;dict, "rsp-dict", &amp;vol_dict);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 ((dict_t *)vol_dict, "vol_count", &amp;vol_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_err ("Failed to get names of volumes");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_ptr(local-&gt;dict, "rsp-dict", &amp;vol_dict);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* remove the "all" flag in cmd */</div><div class='del'>-        cmd &amp;= ~GF_CLI_STATUS_ALL;</div><div class='del'>-        cmd |= GF_CLI_STATUS_VOL;</div><div class='add'>+    ret = dict_get_int32((dict_t *)vol_dict, "vol_count", &amp;vol_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_err("Failed to get names of volumes");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                //TODO: Pass proper op_* values</div><div class='del'>-                ret = cli_xml_output_vol_status_begin (local, 0,0, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                        goto xml_end;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    /* remove the "all" flag in cmd */</div><div class='add'>+    cmd &amp;= ~GF_CLI_STATUS_ALL;</div><div class='add'>+    cmd |= GF_CLI_STATUS_VOL;</div><div class='ctx'> </div><div class='del'>-        if (vol_count == 0 &amp;&amp; !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                cli_err ("No volumes present");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        // TODO: Pass proper op_* values</div><div class='add'>+        ret = cli_xml_output_vol_status_begin(local, 0, 0, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+            goto xml_end;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; vol_count; i++) {</div><div class='add'>+    if (vol_count == 0 &amp;&amp; !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+        cli_err("No volumes present");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict)</div><div class='del'>-                        goto out;</div><div class='add'>+    for (i = 0; i &lt; vol_count; i++) {</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "vol%d", i);</div><div class='del'>-                ret = dict_get_str (vol_dict, key, &amp;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "vol%d", i);</div><div class='add'>+        ret = dict_get_str(vol_dict, key, &amp;volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (dict, "volname", volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = dict_set_str(dict, "volname", volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_uint32 (dict, "cmd", cmd);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = dict_set_uint32(dict, "cmd", cmd);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = gf_cli_status_volume (frame, this, dict);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = gf_cli_status_volume(frame, this, dict);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> xml_end:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_status_end (local);</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_status_end(local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "status all failed");</div><div class='add'>+out:</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "status all failed");</div><div class='ctx'> </div><div class='del'>-        if (vol_dict)</div><div class='del'>-                dict_unref (vol_dict);</div><div class='add'>+    if (vol_dict)</div><div class='add'>+        dict_unref(vol_dict);</div><div class='ctx'> </div><div class='del'>-        if (ret &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (ret &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (local)</div><div class='del'>-                cli_local_wipe (local);</div><div class='add'>+    if (local)</div><div class='add'>+        cli_local_wipe(local);</div><div class='ctx'> </div><div class='del'>-        if (frame)</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='add'>+    if (frame)</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_cli_mount_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                  int count, void *myframe)</div><div class='add'>+gf_cli_mount_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                 void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_mount_rsp rsp   = {0,};</div><div class='del'>-        int               ret   = -1;</div><div class='add'>+    gf1_cli_mount_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_mount_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_mount_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to mount");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to mount");</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                cli_out ("%s", rsp.path);</div><div class='del'>-        } else {</div><div class='del'>-                /* weird sounding but easy to parse... */</div><div class='del'>-                cli_err ("%d : failed with this errno (%s)",</div><div class='del'>-                         rsp.op_errno, strerror (rsp.op_errno));</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        cli_out("%s", rsp.path);</div><div class='add'>+    } else {</div><div class='add'>+        /* weird sounding but easy to parse... */</div><div class='add'>+        cli_err("%d : failed with this errno (%s)", rsp.op_errno,</div><div class='add'>+                strerror(rsp.op_errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_mount (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_mount(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_mount_req  req  = {0,};</div><div class='del'>-        int                ret  = -1;</div><div class='del'>-        void            **dataa = data;</div><div class='del'>-        char             *label = NULL;</div><div class='del'>-        dict_t            *dict = NULL;</div><div class='add'>+    gf1_cli_mount_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void **dataa = data;</div><div class='add'>+    char *label = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        label = dataa[0];</div><div class='del'>-        dict  = dataa[1];</div><div class='add'>+    label = dataa[0];</div><div class='add'>+    dict = dataa[1];</div><div class='ctx'> </div><div class='del'>-        req.label = label;</div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.dict.dict_val,</div><div class='del'>-                                           &amp;req.dict.dict_len);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    req.label = label;</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.dict.dict_val,</div><div class='add'>+                                      &amp;req.dict.dict_len);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_MOUNT, NULL,</div><div class='del'>-                              this, gf_cli_mount_cbk,</div><div class='del'>-                              (xdrproc_t)xdr_gf1_cli_mount_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog, GLUSTER_CLI_MOUNT,</div><div class='add'>+                         NULL, this, gf_cli_mount_cbk,</div><div class='add'>+                         (xdrproc_t)xdr_gf1_cli_mount_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_cli_umount_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                   int count, void *myframe)</div><div class='add'>+gf_cli_umount_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                  void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_umount_rsp rsp   = {0,};</div><div class='del'>-        int               ret   = -1;</div><div class='add'>+    gf1_cli_umount_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (myframe);</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_umount_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf1_cli_umount_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to mount");</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to mount");</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret == 0)</div><div class='del'>-                ret = 0;</div><div class='del'>-        else {</div><div class='del'>-                cli_err ("umount failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    if (rsp.op_ret == 0)</div><div class='add'>+        ret = 0;</div><div class='add'>+    else {</div><div class='add'>+        cli_err("umount failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_umount (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_umount(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf1_cli_umount_req  req  = {0,};</div><div class='del'>-        int                ret  = -1;</div><div class='del'>-        dict_t            *dict = NULL;</div><div class='add'>+    gf1_cli_umount_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "path", &amp;req.path);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = dict_get_int32 (dict, "lazy", &amp;req.lazy);</div><div class='add'>+    ret = dict_get_str(dict, "path", &amp;req.path);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = dict_get_int32(dict, "lazy", &amp;req.lazy);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_UMOUNT, NULL,</div><div class='del'>-                              this, gf_cli_umount_cbk,</div><div class='del'>-                              (xdrproc_t)xdr_gf1_cli_umount_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog, GLUSTER_CLI_UMOUNT,</div><div class='add'>+                         NULL, this, gf_cli_umount_cbk,</div><div class='add'>+                         (xdrproc_t)xdr_gf1_cli_umount_req);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cmd_heal_volume_statistics_out (dict_t *dict, int  brick)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        uint64_t        num_entries = 0;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        char            key[256] = {0};</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        uint64_t        i = 0;</div><div class='del'>-        uint64_t        healed_count = 0;</div><div class='del'>-        uint64_t        split_brain_count = 0;</div><div class='del'>-        uint64_t        heal_failed_count = 0;</div><div class='del'>-        char            *start_time_str = NULL;</div><div class='del'>-        char            *end_time_str = NULL;</div><div class='del'>-        char            *crawl_type = NULL;</div><div class='del'>-        int             progress = -1;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-hostname", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;hostname);</div><div class='add'>+cmd_heal_volume_statistics_out(dict_t *dict, int brick)</div><div class='add'>+{</div><div class='add'>+    uint64_t num_entries = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    uint64_t healed_count = 0;</div><div class='add'>+    uint64_t split_brain_count = 0;</div><div class='add'>+    uint64_t heal_failed_count = 0;</div><div class='add'>+    char *start_time_str = NULL;</div><div class='add'>+    char *end_time_str = NULL;</div><div class='add'>+    char *crawl_type = NULL;</div><div class='add'>+    int progress = -1;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-hostname", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("------------------------------------------------");</div><div class='add'>+    cli_out("\nCrawl statistics for brick no %d", brick);</div><div class='add'>+    cli_out("Hostname of brick %s", hostname);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "statistics-%d-count", brick);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;num_entries);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; num_entries; i++) {</div><div class='add'>+        snprintf(key, sizeof key, "statistics_crawl_type-%d-%" PRIu64, brick,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;crawl_type);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("------------------------------------------------");</div><div class='del'>-        cli_out ("\nCrawl statistics for brick no %d", brick);</div><div class='del'>-        cli_out ("Hostname of brick %s", hostname);</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof key, "statistics-%d-count", brick);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;num_entries);</div><div class='add'>+        snprintf(key, sizeof key, "statistics_healed_cnt-%d-%" PRIu64, brick,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;healed_count);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; num_entries; i++)</div><div class='del'>-        {</div><div class='del'>-                snprintf (key, sizeof key, "statistics_crawl_type-%d-%"PRIu64,</div><div class='del'>-                          brick, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;crawl_type);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof key, "statistics_healed_cnt-%d-%"PRIu64,</div><div class='del'>-                          brick,i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;healed_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof key, "statistics_sb_cnt-%d-%"PRIu64,</div><div class='del'>-                          brick, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;split_brain_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof key, "statistics_heal_failed_cnt-%d-%"PRIu64,</div><div class='del'>-                          brick, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;heal_failed_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof key, "statistics_strt_time-%d-%"PRIu64,</div><div class='del'>-                          brick, i);</div><div class='del'>-                ret = dict_get_str (dict, key,  &amp;start_time_str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof key, "statistics_end_time-%d-%"PRIu64,</div><div class='del'>-                          brick, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;end_time_str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                snprintf (key, sizeof key, "statistics_inprogress-%d-%"PRIu64,</div><div class='del'>-                          brick, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;progress);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                cli_out ("\nStarting time of crawl: %s", start_time_str);</div><div class='del'>-                if (progress == 1)</div><div class='del'>-                        cli_out ("Crawl is in progress");</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Ending time of crawl: %s", end_time_str);</div><div class='del'>-</div><div class='del'>-                cli_out ("Type of crawl: %s", crawl_type);</div><div class='del'>-                cli_out ("No. of entries healed: %"PRIu64,</div><div class='del'>-                         healed_count);</div><div class='del'>-                cli_out ("No. of entries in split-brain: %"PRIu64,</div><div class='del'>-                        split_brain_count);</div><div class='del'>-                cli_out ("No. of heal failed entries: %"PRIu64,</div><div class='del'>-                         heal_failed_count);</div><div class='add'>+        snprintf(key, sizeof key, "statistics_sb_cnt-%d-%" PRIu64, brick, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;split_brain_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof key, "statistics_heal_failed_cnt-%d-%" PRIu64,</div><div class='add'>+                 brick, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;heal_failed_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof key, "statistics_strt_time-%d-%" PRIu64, brick, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;start_time_str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof key, "statistics_end_time-%d-%" PRIu64, brick, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;end_time_str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        snprintf(key, sizeof key, "statistics_inprogress-%d-%" PRIu64, brick,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;progress);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+        cli_out("\nStarting time of crawl: %s", start_time_str);</div><div class='add'>+        if (progress == 1)</div><div class='add'>+            cli_out("Crawl is in progress");</div><div class='add'>+        else</div><div class='add'>+            cli_out("Ending time of crawl: %s", end_time_str);</div><div class='ctx'> </div><div class='add'>+        cli_out("Type of crawl: %s", crawl_type);</div><div class='add'>+        cli_out("No. of entries healed: %" PRIu64, healed_count);</div><div class='add'>+        cli_out("No. of entries in split-brain: %" PRIu64, split_brain_count);</div><div class='add'>+        cli_out("No. of heal failed entries: %" PRIu64, heal_failed_count);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cmd_heal_volume_brick_out (dict_t *dict, int brick)</div><div class='del'>-{</div><div class='del'>-        uint64_t        num_entries = 0;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        char            key[256] = {0};</div><div class='del'>-        char           *hostname = NULL;</div><div class='del'>-        char           *path = NULL;</div><div class='del'>-        char           *status = NULL;</div><div class='del'>-        uint64_t        i = 0;</div><div class='del'>-        uint32_t        time = 0;</div><div class='del'>-        char            timestr[32] = {0};</div><div class='del'>-        char            *shd_status = NULL;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-hostname", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        snprintf (key, sizeof key, "%d-path", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("\nBrick %s:%s", hostname, path);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-status", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;status);</div><div class='del'>-        if (status &amp;&amp; strlen (status))</div><div class='del'>-                cli_out ("Status: %s", status);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-shd-status",brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;shd_status);</div><div class='del'>-</div><div class='del'>-        if (!shd_status) {</div><div class='del'>-                snprintf (key, sizeof key, "%d-count", brick);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;num_entries);</div><div class='del'>-                cli_out ("Number of entries: %"PRIu64, num_entries);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; num_entries; i++) {</div><div class='del'>-                        snprintf (key, sizeof key, "%d-%"PRIu64, brick, i);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                continue;</div><div class='del'>-                        time = 0;</div><div class='del'>-                        snprintf (key, sizeof key, "%d-%"PRIu64"-time",</div><div class='del'>-                                  brick, i);</div><div class='del'>-                        ret = dict_get_uint32 (dict, key, &amp;time);</div><div class='del'>-                        if (ret || !time) {</div><div class='del'>-                                cli_out ("%s", path);</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_time_fmt (timestr, sizeof timestr,</div><div class='del'>-                                             time, gf_timefmt_FT);</div><div class='del'>-                                if (i == 0) {</div><div class='del'>-                                cli_out ("at                    path on brick");</div><div class='del'>-                                cli_out ("-----------------------------------");</div><div class='del'>-                                }</div><div class='del'>-                                cli_out ("%s %s", timestr, path);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        return;</div><div class='add'>+cmd_heal_volume_brick_out(dict_t *dict, int brick)</div><div class='add'>+{</div><div class='add'>+    uint64_t num_entries = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *status = NULL;</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    uint32_t time = 0;</div><div class='add'>+    char timestr[32] = {0};</div><div class='add'>+    char *shd_status = NULL;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-hostname", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    snprintf(key, sizeof key, "%d-path", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("\nBrick %s:%s", hostname, path);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-status", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;status);</div><div class='add'>+    if (status &amp;&amp; strlen(status))</div><div class='add'>+        cli_out("Status: %s", status);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-shd-status", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;shd_status);</div><div class='add'>+</div><div class='add'>+    if (!shd_status) {</div><div class='add'>+        snprintf(key, sizeof key, "%d-count", brick);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;num_entries);</div><div class='add'>+        cli_out("Number of entries: %" PRIu64, num_entries);</div><div class='add'>+</div><div class='add'>+        for (i = 0; i &lt; num_entries; i++) {</div><div class='add'>+            snprintf(key, sizeof key, "%d-%" PRIu64, brick, i);</div><div class='add'>+            ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+            if (ret)</div><div class='add'>+                continue;</div><div class='add'>+            time = 0;</div><div class='add'>+            snprintf(key, sizeof key, "%d-%" PRIu64 "-time", brick, i);</div><div class='add'>+            ret = dict_get_uint32(dict, key, &amp;time);</div><div class='add'>+            if (ret || !time) {</div><div class='add'>+                cli_out("%s", path);</div><div class='add'>+            } else {</div><div class='add'>+                gf_time_fmt(timestr, sizeof timestr, time, gf_timefmt_FT);</div><div class='add'>+                if (i == 0) {</div><div class='add'>+                    cli_out("at                    path on brick");</div><div class='add'>+                    cli_out("-----------------------------------");</div><div class='add'>+                }</div><div class='add'>+                cli_out("%s %s", timestr, path);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-cmd_heal_volume_statistics_heal_count_out (dict_t *dict, int brick)</div><div class='del'>-{</div><div class='del'>-        uint64_t        num_entries = 0;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        char            key[256] = {0};</div><div class='del'>-        char           *hostname = NULL;</div><div class='del'>-        char           *path = NULL;</div><div class='del'>-        char           *status = NULL;</div><div class='del'>-        char            *shd_status = NULL;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-hostname", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;hostname);</div><div class='add'>+cmd_heal_volume_statistics_heal_count_out(dict_t *dict, int brick)</div><div class='add'>+{</div><div class='add'>+    uint64_t num_entries = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *status = NULL;</div><div class='add'>+    char *shd_status = NULL;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-hostname", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    snprintf(key, sizeof key, "%d-path", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cli_out("\nBrick %s:%s", hostname, path);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-status", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;status);</div><div class='add'>+    if (status &amp;&amp; strlen(status))</div><div class='add'>+        cli_out("Status: %s", status);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof key, "%d-shd-status", brick);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;shd_status);</div><div class='add'>+</div><div class='add'>+    if (!shd_status) {</div><div class='add'>+        snprintf(key, sizeof key, "%d-hardlinks", brick);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;num_entries);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        snprintf (key, sizeof key, "%d-path", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cli_out ("\nBrick %s:%s", hostname, path);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-status", brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;status);</div><div class='del'>-        if (status &amp;&amp; strlen (status))</div><div class='del'>-                cli_out ("Status: %s", status);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof key, "%d-shd-status",brick);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;shd_status);</div><div class='del'>-</div><div class='del'>-        if(!shd_status)</div><div class='del'>-        {</div><div class='del'>-                snprintf (key, sizeof key, "%d-hardlinks", brick);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;num_entries);</div><div class='del'>-                if (ret)</div><div class='del'>-                        cli_out ("No gathered input for this brick");</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("Number of entries: %"PRIu64, num_entries);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+            cli_out("No gathered input for this brick");</div><div class='add'>+        else</div><div class='add'>+            cli_out("Number of entries: %" PRIu64, num_entries);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_is_cli_heal_get_command (gf_xl_afr_op_t heal_op)</div><div class='del'>-{</div><div class='del'>-        /* If the command is get command value is 1 otherwise 0, for</div><div class='del'>-           invalid commands -1 */</div><div class='del'>-        int    get_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = {</div><div class='del'>-                       [GF_SHD_OP_INVALID] = -1,</div><div class='del'>-                       [GF_SHD_OP_HEAL_INDEX] = 0,</div><div class='del'>-                       [GF_SHD_OP_HEAL_FULL] = 0,</div><div class='del'>-                       [GF_SHD_OP_INDEX_SUMMARY] = 1,</div><div class='del'>-                       [GF_SHD_OP_HEALED_FILES] = 1,</div><div class='del'>-                       [GF_SHD_OP_HEAL_FAILED_FILES] = 1,</div><div class='del'>-                       [GF_SHD_OP_SPLIT_BRAIN_FILES] = 1,</div><div class='del'>-                       [GF_SHD_OP_STATISTICS] = 1,</div><div class='del'>-                       [GF_SHD_OP_STATISTICS_HEAL_COUNT] = 1,</div><div class='del'>-                       [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA] = 1,</div><div class='del'>-                       [GF_SHD_OP_HEAL_ENABLE] = 0,</div><div class='del'>-                       [GF_SHD_OP_HEAL_DISABLE] = 0,</div><div class='del'>-                };</div><div class='del'>-</div><div class='del'>-        if (heal_op &gt; GF_SHD_OP_INVALID &amp;&amp; heal_op &lt;= GF_SHD_OP_HEAL_DISABLE)</div><div class='del'>-                return get_cmds[heal_op] == 1;</div><div class='del'>-        return _gf_false;</div><div class='add'>+gf_is_cli_heal_get_command(gf_xl_afr_op_t heal_op)</div><div class='add'>+{</div><div class='add'>+    /* If the command is get command value is 1 otherwise 0, for</div><div class='add'>+       invalid commands -1 */</div><div class='add'>+    int get_cmds[GF_SHD_OP_HEAL_DISABLE + 1] = {</div><div class='add'>+        [GF_SHD_OP_INVALID] = -1,</div><div class='add'>+        [GF_SHD_OP_HEAL_INDEX] = 0,</div><div class='add'>+        [GF_SHD_OP_HEAL_FULL] = 0,</div><div class='add'>+        [GF_SHD_OP_INDEX_SUMMARY] = 1,</div><div class='add'>+        [GF_SHD_OP_HEALED_FILES] = 1,</div><div class='add'>+        [GF_SHD_OP_HEAL_FAILED_FILES] = 1,</div><div class='add'>+        [GF_SHD_OP_SPLIT_BRAIN_FILES] = 1,</div><div class='add'>+        [GF_SHD_OP_STATISTICS] = 1,</div><div class='add'>+        [GF_SHD_OP_STATISTICS_HEAL_COUNT] = 1,</div><div class='add'>+        [GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA] = 1,</div><div class='add'>+        [GF_SHD_OP_HEAL_ENABLE] = 0,</div><div class='add'>+        [GF_SHD_OP_HEAL_DISABLE] = 0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (heal_op &gt; GF_SHD_OP_INVALID &amp;&amp; heal_op &lt;= GF_SHD_OP_HEAL_DISABLE)</div><div class='add'>+        return get_cmds[heal_op] == 1;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_heal_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                             int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp              rsp   = {0,};</div><div class='del'>-        int                     ret   = -1;</div><div class='del'>-        cli_local_t             *local = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        int                     brick_count = 0;</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        gf_xl_afr_op_t          heal_op = GF_SHD_OP_INVALID;</div><div class='del'>-        char                    *operation = NULL;</div><div class='del'>-        char                    *substr = NULL;</div><div class='del'>-        char                    *heal_op_str = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame-&gt;local);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "heal-op", (int32_t *)&amp;heal_op);</div><div class='del'>-//TODO: Proper XML output</div><div class='del'>-//#if (HAVE_LIB_XML)</div><div class='del'>-//        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-//                ret = cli_xml_output_dict ("volHeal", dict, rsp.op_ret,</div><div class='del'>-//                                           rsp.op_errno, rsp.op_errstr);</div><div class='del'>-//                if (ret)</div><div class='del'>-//                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-//                                "Error outputting to xml");</div><div class='del'>-//                goto out;</div><div class='del'>-//        }</div><div class='del'>-//#endif</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to get volname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Received resp to heal volume");</div><div class='del'>-</div><div class='del'>-        operation = "Gathering ";</div><div class='del'>-        substr = "";</div><div class='del'>-        switch (heal_op) {</div><div class='del'>-        case    GF_SHD_OP_HEAL_INDEX:</div><div class='del'>-                operation   = "Launching heal operation ";</div><div class='del'>-                heal_op_str = "to perform index self heal";</div><div class='del'>-                substr      = "\nUse heal info commands to check"</div><div class='del'>-                              " status.";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_HEAL_FULL:</div><div class='del'>-                operation   = "Launching heal operation ";</div><div class='del'>-                heal_op_str = "to perform full self heal";</div><div class='del'>-                substr      = "\nUse heal info commands to check"</div><div class='del'>-                              " status.";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_INDEX_SUMMARY:</div><div class='del'>-                heal_op_str = "list of entries to be healed";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_HEALED_FILES:</div><div class='del'>-                heal_op_str = "list of healed entries";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_HEAL_FAILED_FILES:</div><div class='del'>-                heal_op_str = "list of heal failed entries";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_SPLIT_BRAIN_FILES:</div><div class='del'>-                heal_op_str = "list of split brain entries";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_STATISTICS:</div><div class='del'>-                heal_op_str =  "crawl statistics";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_STATISTICS_HEAL_COUNT:</div><div class='del'>-                heal_op_str = "count of entries to be healed";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA:</div><div class='del'>-                heal_op_str = "count of entries to be healed per replica";</div><div class='del'>-                break;</div><div class='add'>+gf_cli_heal_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_xl_afr_op_t heal_op = GF_SHD_OP_INVALID;</div><div class='add'>+    char *operation = NULL;</div><div class='add'>+    char *substr = NULL;</div><div class='add'>+    char *heal_op_str = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame-&gt;local);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "heal-op", (int32_t *)&amp;heal_op);</div><div class='add'>+    // TODO: Proper XML output</div><div class='add'>+    //#if (HAVE_LIB_XML)</div><div class='add'>+    //        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+    //                ret = cli_xml_output_dict ("volHeal", dict, rsp.op_ret,</div><div class='add'>+    //                                           rsp.op_errno, rsp.op_errstr);</div><div class='add'>+    //                if (ret)</div><div class='add'>+    //                        gf_log ("cli", GF_LOG_ERROR,</div><div class='add'>+    //                                "Error outputting to xml");</div><div class='add'>+    //                goto out;</div><div class='add'>+    //        }</div><div class='add'>+    //#endif</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to get volname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Received resp to heal volume");</div><div class='add'>+</div><div class='add'>+    operation = "Gathering ";</div><div class='add'>+    substr = "";</div><div class='add'>+    switch (heal_op) {</div><div class='add'>+        case GF_SHD_OP_HEAL_INDEX:</div><div class='add'>+            operation = "Launching heal operation ";</div><div class='add'>+            heal_op_str = "to perform index self heal";</div><div class='add'>+            substr =</div><div class='add'>+                "\nUse heal info commands to check"</div><div class='add'>+                " status.";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_HEAL_FULL:</div><div class='add'>+            operation = "Launching heal operation ";</div><div class='add'>+            heal_op_str = "to perform full self heal";</div><div class='add'>+            substr =</div><div class='add'>+                "\nUse heal info commands to check"</div><div class='add'>+                " status.";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_INDEX_SUMMARY:</div><div class='add'>+            heal_op_str = "list of entries to be healed";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_HEALED_FILES:</div><div class='add'>+            heal_op_str = "list of healed entries";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_HEAL_FAILED_FILES:</div><div class='add'>+            heal_op_str = "list of heal failed entries";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_SPLIT_BRAIN_FILES:</div><div class='add'>+            heal_op_str = "list of split brain entries";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_STATISTICS:</div><div class='add'>+            heal_op_str = "crawl statistics";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_STATISTICS_HEAL_COUNT:</div><div class='add'>+            heal_op_str = "count of entries to be healed";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA:</div><div class='add'>+            heal_op_str = "count of entries to be healed per replica";</div><div class='add'>+            break;</div><div class='ctx'>         /* The below 4 cases are never hit; they're coded only to make</div><div class='ctx'>          * compiler warnings go away.*/</div><div class='del'>-        case    GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:</div><div class='del'>-        case    GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME:</div><div class='del'>-        case    GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='del'>-        case    GF_SHD_OP_HEAL_SUMMARY:</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case    GF_SHD_OP_INVALID:</div><div class='del'>-                heal_op_str = "invalid heal op";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_HEAL_ENABLE:</div><div class='del'>-                operation   = "";</div><div class='del'>-                heal_op_str = "Enable heal";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_HEAL_DISABLE:</div><div class='del'>-                operation   = "";</div><div class='del'>-                heal_op_str = "Disable heal";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE:</div><div class='del'>-                operation   = "";</div><div class='del'>-                heal_op_str = "Enable granular entry heal";</div><div class='del'>-                break;</div><div class='del'>-        case    GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE:</div><div class='del'>-                operation   = "";</div><div class='del'>-                heal_op_str = "Disable granular entry heal";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, "")) {</div><div class='del'>-                        cli_err ("%s%s on volume %s has been unsuccessful:",</div><div class='del'>-                                 operation, heal_op_str, volname);</div><div class='del'>-                        cli_err ("%s", rsp.op_errstr);</div><div class='del'>-                }</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("%s%s on volume %s has been successful %s", operation,</div><div class='del'>-                         heal_op_str, volname, substr);</div><div class='add'>+        case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:</div><div class='add'>+        case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME:</div><div class='add'>+        case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='add'>+        case GF_SHD_OP_HEAL_SUMMARY:</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_SHD_OP_INVALID:</div><div class='add'>+            heal_op_str = "invalid heal op";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_HEAL_ENABLE:</div><div class='add'>+            operation = "";</div><div class='add'>+            heal_op_str = "Enable heal";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_HEAL_DISABLE:</div><div class='add'>+            operation = "";</div><div class='add'>+            heal_op_str = "Disable heal";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE:</div><div class='add'>+            operation = "";</div><div class='add'>+            heal_op_str = "Enable granular entry heal";</div><div class='add'>+            break;</div><div class='add'>+        case GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE:</div><div class='add'>+            operation = "";</div><div class='add'>+            heal_op_str = "Disable granular entry heal";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, "")) {</div><div class='add'>+            cli_err("%s%s on volume %s has been unsuccessful:", operation,</div><div class='add'>+                    heal_op_str, volname);</div><div class='add'>+            cli_err("%s", rsp.op_errstr);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='ctx'>         ret = rsp.op_ret;</div><div class='del'>-        if (!gf_is_cli_heal_get_command (heal_op))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                rsp.dict.dict_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to allocate memory");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                dict-&gt;extra_stdfree = rsp.dict.dict_val;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!brick_count) {</div><div class='del'>-                cli_err ("All bricks of volume %s are down.", volname);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (heal_op) {</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("%s%s on volume %s has been successful %s", operation,</div><div class='add'>+                heal_op_str, volname, substr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rsp.op_ret;</div><div class='add'>+    if (!gf_is_cli_heal_get_command(heal_op))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        dict-&gt;extra_stdfree = rsp.dict.dict_val;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!brick_count) {</div><div class='add'>+        cli_err("All bricks of volume %s are down.", volname);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (heal_op) {</div><div class='ctx'>         case GF_SHD_OP_STATISTICS:</div><div class='del'>-                for (i = 0; i &lt; brick_count; i++)</div><div class='del'>-                        cmd_heal_volume_statistics_out (dict, i);</div><div class='del'>-                break;</div><div class='add'>+            for (i = 0; i &lt; brick_count; i++)</div><div class='add'>+                cmd_heal_volume_statistics_out(dict, i);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_STATISTICS_HEAL_COUNT:</div><div class='ctx'>         case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA:</div><div class='del'>-                for (i = 0; i &lt; brick_count; i++)</div><div class='del'>-                        cmd_heal_volume_statistics_heal_count_out (dict,</div><div class='del'>-                                                                   i);</div><div class='del'>-                break;</div><div class='add'>+            for (i = 0; i &lt; brick_count; i++)</div><div class='add'>+                cmd_heal_volume_statistics_heal_count_out(dict, i);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_INDEX_SUMMARY:</div><div class='ctx'>         case GF_SHD_OP_HEALED_FILES:</div><div class='ctx'>         case GF_SHD_OP_HEAL_FAILED_FILES:</div><div class='ctx'>         case GF_SHD_OP_SPLIT_BRAIN_FILES:</div><div class='del'>-                for (i = 0; i &lt; brick_count; i++)</div><div class='del'>-                        cmd_heal_volume_brick_out (dict, i);</div><div class='del'>-                break;</div><div class='add'>+            for (i = 0; i &lt; brick_count; i++)</div><div class='add'>+                cmd_heal_volume_brick_out(dict, i);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_heal_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         void *data)</div><div class='add'>+gf_cli_heal_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req              req = {{0,}};</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this ||  !data) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !this || !data) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = data;</div><div class='add'>+    dict = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_heal_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, dict,</div><div class='del'>-                               GLUSTER_CLI_HEAL_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_heal_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, dict,</div><div class='add'>+                          GLUSTER_CLI_HEAL_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_statedump_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                      rsp = {0,};</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        char                            msg[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received response to statedump");</div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                snprintf (msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='del'>-        else</div><div class='del'>-                snprintf (msg, sizeof (msg), "Volume statedump successful");</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_str ("volStatedump", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_statedump_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                            void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received response to statedump");</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        snprintf(msg, sizeof(msg), "%s", rsp.op_errstr);</div><div class='add'>+    else</div><div class='add'>+        snprintf(msg, sizeof(msg), "Volume statedump successful");</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_str("volStatedump", msg, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                 rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("volume statedump: failed: %s", msg);</div><div class='del'>-        else</div><div class='del'>-                cli_out ("volume statedump: success");</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("volume statedump: failed: %s", msg);</div><div class='add'>+    else</div><div class='add'>+        cli_out("volume statedump: success");</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_statedump_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                            void *data)</div><div class='add'>+gf_cli_statedump_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req = {{0,}};</div><div class='del'>-        dict_t                          *options = NULL;</div><div class='del'>-        int                             ret = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = data;</div><div class='add'>+    options = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_statedump_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, options,</div><div class='del'>-                               GLUSTER_CLI_STATEDUMP_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(</div><div class='add'>+        &amp;req, frame, gf_cli_statedump_volume_cbk, (xdrproc_t)xdr_gf_cli_req,</div><div class='add'>+        options, GLUSTER_CLI_STATEDUMP_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_list_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        gf_cli_rsp      rsp = {0,};</div><div class='del'>-        dict_t          *dict = NULL;</div><div class='del'>-        int             vol_count = 0;;</div><div class='del'>-        char            *volname = NULL;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp,</div><div class='del'>-                              (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_list_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int vol_count = 0;</div><div class='add'>+    ;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_list(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                      rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret)</div><div class='add'>+        cli_err("%s", rsp.op_errstr);</div><div class='add'>+    else {</div><div class='add'>+        ret = dict_get_int32(dict, "count", &amp;vol_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to allocate memory");</div><div class='del'>-                goto out;</div><div class='add'>+        if (vol_count == 0) {</div><div class='add'>+            cli_err("No volumes present in cluster");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_list (dict, rsp.op_ret, rsp.op_errno,</div><div class='del'>-                                               rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='add'>+        for (i = 0; i &lt; vol_count; i++) {</div><div class='add'>+            snprintf(key, sizeof(key), "volume%d", i);</div><div class='add'>+            ret = dict_get_str(dict, key, &amp;volname);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='add'>+            cli_out("%s", volname);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp.op_ret)</div><div class='del'>-                cli_err ("%s", rsp.op_errstr);</div><div class='del'>-        else {</div><div class='del'>-                ret = dict_get_int32 (dict, "count", &amp;vol_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (vol_count == 0) {</div><div class='del'>-                        cli_err ("No volumes present in cluster");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                for (i = 0; i &lt; vol_count; i++) {</div><div class='del'>-                        snprintf (key, sizeof (key), "volume%d", i);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;volname);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        cli_out ("%s", volname);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_list_volume (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_list_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        gf_cli_req      req = {{0,}};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, &amp;req, frame, cli_rpc_prog,</div><div class='del'>-                              GLUSTER_CLI_LIST_VOLUME, NULL,</div><div class='del'>-                              this, gf_cli_list_volume_cbk,</div><div class='del'>-                              (xdrproc_t)xdr_gf_cli_req);</div><div class='add'>+    ret = cli_cmd_submit(NULL, &amp;req, frame, cli_rpc_prog,</div><div class='add'>+                         GLUSTER_CLI_LIST_VOLUME, NULL, this,</div><div class='add'>+                         gf_cli_list_volume_cbk, (xdrproc_t)xdr_gf_cli_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_clearlocks_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                  int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                      rsp = {0,};</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-        char                            *lk_summary = NULL;</div><div class='del'>-        char                            *volname = NULL;</div><div class='del'>-        dict_t                          *dict = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp,</div><div class='del'>-                              (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='add'>+gf_cli_clearlocks_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                             void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *lk_summary = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received response to clear-locks");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        cli_err("Volume clear-locks unsuccessful");</div><div class='add'>+        cli_err("%s", rsp.op_errstr);</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        if (!rsp.dict.dict_len) {</div><div class='add'>+            cli_err("Possibly no locks cleared");</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received response to clear-locks");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                cli_err ("Volume clear-locks unsuccessful");</div><div class='del'>-                cli_err ("%s", rsp.op_errstr);</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                if (!rsp.dict.dict_len) {</div><div class='del'>-                        cli_err ("Possibly no locks cleared");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='ctx'> </div><div class='del'>-                dict = dict_new ();</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-                if (!dict) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!dict) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to serialize response dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to get volname "</div><div class='del'>-                                "from dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to serialize response dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, "lk-summary", &amp;lk_summary);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to get lock "</div><div class='del'>-                                "summary from dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("Volume clear-locks successful");</div><div class='del'>-                cli_out ("%s", lk_summary);</div><div class='add'>+        ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to get volname "</div><div class='add'>+                   "from dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        ret = dict_get_str(dict, "lk-summary", &amp;lk_summary);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to get lock "</div><div class='add'>+                   "summary from dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        cli_out("Volume clear-locks successful");</div><div class='add'>+        cli_out("%s", lk_summary);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_clearlocks_volume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                             void *data)</div><div class='add'>+gf_cli_clearlocks_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req = {{0,}};</div><div class='del'>-        dict_t                          *options = NULL;</div><div class='del'>-        int                             ret = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = data;</div><div class='add'>+    options = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_clearlocks_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, options,</div><div class='del'>-                               GLUSTER_CLI_CLRLOCKS_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(</div><div class='add'>+        &amp;req, frame, gf_cli_clearlocks_volume_cbk, (xdrproc_t)xdr_gf_cli_req,</div><div class='add'>+        options, GLUSTER_CLI_CLRLOCKS_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cli_snapshot_remove_reply (gf_cli_rsp *rsp, dict_t *dict, call_frame_t *frame)</div><div class='add'>+cli_snapshot_remove_reply(gf_cli_rsp *rsp, dict_t *dict, call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret             = -1;</div><div class='del'>-        char            *snap_name      = NULL;</div><div class='del'>-        int32_t         delete_cmd      = -1;</div><div class='del'>-        cli_local_t     *local          = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *snap_name = NULL;</div><div class='add'>+    int32_t delete_cmd = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        GF_ASSERT (rsp);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(rsp);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "sub-cmd", &amp;delete_cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not get sub-cmd");</div><div class='del'>-                goto end;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "sub-cmd", &amp;delete_cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not get sub-cmd");</div><div class='add'>+        goto end;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML) &amp;&amp;</div><div class='del'>-            (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) {</div><div class='del'>-                ret = cli_xml_output_snap_delete_begin (local, rsp-&gt;op_ret,</div><div class='del'>-                                                        rsp-&gt;op_errno,</div><div class='del'>-                                                        rsp-&gt;op_errstr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for delete");</div><div class='del'>-                        goto end;</div><div class='del'>-                }</div><div class='add'>+    if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML) &amp;&amp;</div><div class='add'>+        (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) {</div><div class='add'>+        ret = cli_xml_output_snap_delete_begin(local, rsp-&gt;op_ret,</div><div class='add'>+                                               rsp-&gt;op_errno, rsp-&gt;op_errstr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to create "</div><div class='add'>+                   "xml output for delete");</div><div class='add'>+            goto end;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp-&gt;op_ret &amp;&amp; !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+        cli_err("snapshot delete: failed: %s",</div><div class='add'>+                rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                               : "Please check log file for details");</div><div class='add'>+        ret = rsp-&gt;op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL ||</div><div class='add'>+        delete_cmd == GF_SNAP_DELETE_TYPE_VOL) {</div><div class='add'>+        local = ((call_frame_t *)frame)-&gt;local;</div><div class='add'>+        if (!local) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "frame-&gt;local is NULL");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        /* During first call back of snapshot delete of type</div><div class='add'>+         * ALL and VOL, We will get the snapcount and snapnames.</div><div class='add'>+         * Hence to make the subsequent rpc calls for individual</div><div class='add'>+         * snapshot delete, We need to save it in local dictionary.</div><div class='add'>+         */</div><div class='add'>+        dict_copy(dict, local-&gt;dict);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp-&gt;op_ret &amp;&amp; !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                        cli_err ("snapshot delete: failed: %s",</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                 "Please check log file for details");</div><div class='del'>-                ret = rsp-&gt;op_ret;</div><div class='del'>-                goto out;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_snapshot_delete(local, dict, rsp);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to create "</div><div class='add'>+                   "xml output for snapshot delete command");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL ||</div><div class='del'>-            delete_cmd == GF_SNAP_DELETE_TYPE_VOL) {</div><div class='del'>-                local = ((call_frame_t *) frame) -&gt; local;</div><div class='del'>-                if (!local) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "frame-&gt;local is NULL");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* During first call back of snapshot delete of type</div><div class='del'>-                 * ALL and VOL, We will get the snapcount and snapnames.</div><div class='del'>-                 * Hence to make the subsequent rpc calls for individual</div><div class='del'>-                 * snapshot delete, We need to save it in local dictionary.</div><div class='del'>-                 */</div><div class='del'>-                dict_copy (dict, local-&gt;dict);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+        /* Error out in case of the op already failed */</div><div class='add'>+        if (rsp-&gt;op_ret) {</div><div class='add'>+            ret = rsp-&gt;op_ret;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_snapshot_delete (local, dict, rsp);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot delete command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* Error out in case of the op already failed */</div><div class='del'>-                if (rsp-&gt;op_ret) {</div><div class='del'>-                        ret = rsp-&gt;op_ret;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_get_str (dict, "snapname", &amp;snap_name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snapname");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                cli_out ("snapshot delete: %s: snap removed successfully",</div><div class='del'>-                         snap_name);</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_get_str(dict, "snapname", &amp;snap_name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to get snapname");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='add'>+</div><div class='add'>+        cli_out("snapshot delete: %s: snap removed successfully", snap_name);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML) &amp;&amp;</div><div class='del'>-            (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) {</div><div class='del'>-                ret = cli_xml_output_snap_delete_end (local);</div><div class='del'>-        }</div><div class='add'>+    if ((global_state-&gt;mode &amp; GLUSTER_MODE_XML) &amp;&amp;</div><div class='add'>+        (delete_cmd == GF_SNAP_DELETE_TYPE_SNAP)) {</div><div class='add'>+        ret = cli_xml_output_snap_delete_end(local);</div><div class='add'>+    }</div><div class='ctx'> end:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_snapshot_config_display (dict_t *dict, gf_cli_rsp *rsp)</div><div class='del'>-{</div><div class='del'>-        char                buf[PATH_MAX]        = "";</div><div class='del'>-        char               *volname              = NULL;</div><div class='del'>-        int                 ret                  = -1;</div><div class='del'>-        int                 config_command       = 0;</div><div class='del'>-        uint64_t            value                = 0;</div><div class='del'>-        uint64_t            hard_limit           = 0;</div><div class='del'>-        uint64_t            soft_limit           = 0;</div><div class='del'>-        uint64_t            i                    = 0;</div><div class='del'>-        uint64_t            voldisplaycount      = 0;</div><div class='del'>-        char               *auto_delete          = NULL;</div><div class='del'>-        char               *snap_activate        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (rsp);</div><div class='add'>+cli_snapshot_config_display(dict_t *dict, gf_cli_rsp *rsp)</div><div class='add'>+{</div><div class='add'>+    char buf[PATH_MAX] = "";</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int config_command = 0;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    uint64_t hard_limit = 0;</div><div class='add'>+    uint64_t soft_limit = 0;</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    uint64_t voldisplaycount = 0;</div><div class='add'>+    char *auto_delete = NULL;</div><div class='add'>+    char *snap_activate = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(rsp);</div><div class='add'>+</div><div class='add'>+    if (rsp-&gt;op_ret) {</div><div class='add'>+        cli_err("Snapshot Config : failed: %s",</div><div class='add'>+                rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                               : "Please check log file for details");</div><div class='add'>+        ret = rsp-&gt;op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "config-command", &amp;config_command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch config type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    /* Ignore the error, as volname is optional */</div><div class='add'>+</div><div class='add'>+    if (!volname) {</div><div class='add'>+        volname = "System";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint64(dict, "snap-max-hard-limit", &amp;hard_limit);</div><div class='add'>+    /* Ignore the error, as the key specified is optional */</div><div class='add'>+    ret = dict_get_uint64(dict, "snap-max-soft-limit", &amp;soft_limit);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "auto-delete", &amp;auto_delete);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snap-activate-on-create", &amp;snap_activate);</div><div class='add'>+</div><div class='add'>+    if (!hard_limit &amp;&amp; !soft_limit &amp;&amp;</div><div class='add'>+        config_command != GF_SNAP_CONFIG_DISPLAY &amp;&amp; !auto_delete &amp;&amp;</div><div class='add'>+        !snap_activate) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Could not fetch config-key");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (config_command) {</div><div class='add'>+        case GF_SNAP_CONFIG_TYPE_SET:</div><div class='add'>+            if (hard_limit &amp;&amp; soft_limit) {</div><div class='add'>+                cli_out(</div><div class='add'>+                    "snapshot config: snap-max-hard-limit "</div><div class='add'>+                    "&amp; snap-max-soft-limit for system set "</div><div class='add'>+                    "successfully");</div><div class='add'>+            } else if (hard_limit) {</div><div class='add'>+                cli_out(</div><div class='add'>+                    "snapshot config: snap-max-hard-limit "</div><div class='add'>+                    "for %s set successfully",</div><div class='add'>+                    volname);</div><div class='add'>+            } else if (soft_limit) {</div><div class='add'>+                cli_out(</div><div class='add'>+                    "snapshot config: snap-max-soft-limit "</div><div class='add'>+                    "for %s set successfully",</div><div class='add'>+                    volname);</div><div class='add'>+            } else if (auto_delete) {</div><div class='add'>+                cli_out(</div><div class='add'>+                    "snapshot config: auto-delete "</div><div class='add'>+                    "successfully set");</div><div class='add'>+            } else if (snap_activate) {</div><div class='add'>+                cli_out(</div><div class='add'>+                    "snapshot config: activate-on-create "</div><div class='add'>+                    "successfully set");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        if (rsp-&gt;op_ret) {</div><div class='del'>-                cli_err ("Snapshot Config : failed: %s",</div><div class='del'>-                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                         "Please check log file for details");</div><div class='del'>-                ret = rsp-&gt;op_ret;</div><div class='add'>+        case GF_SNAP_CONFIG_DISPLAY:</div><div class='add'>+            cli_out("\nSnapshot System Configuration:");</div><div class='add'>+            ret = dict_get_uint64(dict, "snap-max-hard-limit", &amp;value);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Could not fetch "</div><div class='add'>+                       "snap_max_hard_limit for %s",</div><div class='add'>+                       volname);</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+            cli_out("snap-max-hard-limit : %" PRIu64, value);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "config-command", &amp;config_command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch config type");</div><div class='add'>+            ret = dict_get_uint64(dict, "snap-max-soft-limit", &amp;soft_limit);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Could not fetch "</div><div class='add'>+                       "snap-max-soft-limit for %s",</div><div class='add'>+                       volname);</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        /* Ignore the error, as volname is optional */</div><div class='add'>+            }</div><div class='add'>+            cli_out("snap-max-soft-limit : %" PRIu64 "%%", soft_limit);</div><div class='ctx'> </div><div class='del'>-        if (!volname) {</div><div class='del'>-                volname = "System";</div><div class='del'>-        }</div><div class='add'>+            cli_out("auto-delete : %s", auto_delete);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint64 (dict, "snap-max-hard-limit", &amp;hard_limit);</div><div class='del'>-        /* Ignore the error, as the key specified is optional */</div><div class='del'>-        ret = dict_get_uint64 (dict, "snap-max-soft-limit", &amp;soft_limit);</div><div class='add'>+            cli_out("activate-on-create : %s\n", snap_activate);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "auto-delete", &amp;auto_delete);</div><div class='add'>+            cli_out("Snapshot Volume Configuration:");</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "snap-activate-on-create", &amp;snap_activate);</div><div class='del'>-</div><div class='del'>-        if (!hard_limit &amp;&amp; !soft_limit</div><div class='del'>-                        &amp;&amp; config_command != GF_SNAP_CONFIG_DISPLAY</div><div class='del'>-                        &amp;&amp; !auto_delete &amp;&amp; !snap_activate) {</div><div class='add'>+            ret = dict_get_uint64(dict, "voldisplaycount", &amp;voldisplaycount);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Could not fetch voldisplaycount");</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                       "Could not fetch config-key");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (config_command) {</div><div class='del'>-        case GF_SNAP_CONFIG_TYPE_SET:</div><div class='del'>-                if (hard_limit &amp;&amp; soft_limit) {</div><div class='del'>-                        cli_out ("snapshot config: snap-max-hard-limit "</div><div class='del'>-                                "&amp; snap-max-soft-limit for system set "</div><div class='del'>-                                 "successfully");</div><div class='del'>-                } else if (hard_limit) {</div><div class='del'>-                        cli_out ("snapshot config: snap-max-hard-limit "</div><div class='del'>-                                 "for %s set successfully",</div><div class='del'>-                                 volname);</div><div class='del'>-                } else if (soft_limit) {</div><div class='del'>-                        cli_out ("snapshot config: snap-max-soft-limit "</div><div class='del'>-                                 "for %s set successfully",</div><div class='del'>-                                 volname);</div><div class='del'>-                } else if (auto_delete) {</div><div class='del'>-                        cli_out ("snapshot config: auto-delete "</div><div class='del'>-                                 "successfully set");</div><div class='del'>-                } else if (snap_activate) {</div><div class='del'>-                        cli_out ("snapshot config: activate-on-create "</div><div class='del'>-                                 "successfully set");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_CONFIG_DISPLAY:</div><div class='del'>-                cli_out ("\nSnapshot System Configuration:");</div><div class='del'>-                ret = dict_get_uint64 (dict, "snap-max-hard-limit",</div><div class='del'>-                                       &amp;value);</div><div class='add'>+            for (i = 0; i &lt; voldisplaycount; i++) {</div><div class='add'>+                snprintf(buf, sizeof(buf), "volume%" PRIu64 "-volname", i);</div><div class='add'>+                ret = dict_get_str(dict, buf, &amp;volname);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                                "snap_max_hard_limit for %s", volname);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("snap-max-hard-limit : %"PRIu64, value);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_uint64 (dict, "snap-max-soft-limit",</div><div class='del'>-                                       &amp;soft_limit);</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Could not fetch "</div><div class='add'>+                           " %s",</div><div class='add'>+                           buf);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cli_out("\nVolume : %s", volname);</div><div class='add'>+</div><div class='add'>+                snprintf(buf, sizeof(buf),</div><div class='add'>+                         "volume%" PRIu64 "-snap-max-hard-limit", i);</div><div class='add'>+                ret = dict_get_uint64(dict, buf, &amp;value);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                               "snap-max-soft-limit for %s", volname);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("snap-max-soft-limit : %"PRIu64"%%",</div><div class='del'>-                         soft_limit);</div><div class='del'>-</div><div class='del'>-                cli_out ("auto-delete : %s", auto_delete);</div><div class='del'>-</div><div class='del'>-                cli_out ("activate-on-create : %s\n", snap_activate);</div><div class='del'>-</div><div class='del'>-                cli_out ("Snapshot Volume Configuration:");</div><div class='del'>-</div><div class='del'>-                ret = dict_get_uint64 (dict, "voldisplaycount",</div><div class='del'>-                                       &amp;voldisplaycount);</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Could not fetch "</div><div class='add'>+                           " %s",</div><div class='add'>+                           buf);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cli_out("snap-max-hard-limit : %" PRIu64, value);</div><div class='add'>+</div><div class='add'>+                snprintf(buf, sizeof(buf),</div><div class='add'>+                         "volume%" PRIu64 "-active-hard-limit", i);</div><div class='add'>+                ret = dict_get_uint64(dict, buf, &amp;value);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                               "Could not fetch voldisplaycount");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; voldisplaycount; i++) {</div><div class='del'>-                        snprintf (buf, sizeof(buf), "volume%"PRIu64"-volname", i);</div><div class='del'>-                        ret = dict_get_str (dict, buf, &amp;volname);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                                       " %s", buf);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cli_out ("\nVolume : %s", volname);</div><div class='del'>-</div><div class='del'>-                        snprintf (buf, sizeof(buf),</div><div class='del'>-                                  "volume%"PRIu64"-snap-max-hard-limit", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, buf, &amp;value);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                                       " %s", buf);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cli_out ("snap-max-hard-limit : %"PRIu64, value);</div><div class='del'>-</div><div class='del'>-                        snprintf (buf, sizeof(buf),</div><div class='del'>-                                  "volume%"PRIu64"-active-hard-limit", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, buf, &amp;value);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                 gf_log ("cli", GF_LOG_ERROR, "Could not fetch"</div><div class='del'>-                                        " effective snap_max_hard_limit for "</div><div class='del'>-                                        "%s", volname);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cli_out ("Effective snap-max-hard-limit : %"PRIu64,</div><div class='del'>-                                 value);</div><div class='del'>-</div><div class='del'>-                        snprintf (buf, sizeof(buf),</div><div class='del'>-                                      "volume%"PRIu64"-snap-max-soft-limit", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, buf, &amp;value);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                                       " %s", buf);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        cli_out ("Effective snap-max-soft-limit : %"PRIu64" "</div><div class='del'>-                                 "(%"PRIu64"%%)", value, soft_limit);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Could not fetch"</div><div class='add'>+                           " effective snap_max_hard_limit for "</div><div class='add'>+                           "%s",</div><div class='add'>+                           volname);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cli_out("Effective snap-max-hard-limit : %" PRIu64, value);</div><div class='add'>+</div><div class='add'>+                snprintf(buf, sizeof(buf),</div><div class='add'>+                         "volume%" PRIu64 "-snap-max-soft-limit", i);</div><div class='add'>+                ret = dict_get_uint64(dict, buf, &amp;value);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                           "Could not fetch "</div><div class='add'>+                           " %s",</div><div class='add'>+                           buf);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cli_out("Effective snap-max-soft-limit : %" PRIu64</div><div class='add'>+                        " "</div><div class='add'>+                        "(%" PRIu64 "%%)",</div><div class='add'>+                        value, soft_limit);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is used to print the volume related information</div><div class='hunk'>@@ -9749,91 +9706,86 @@ out:</div><div class='ctx'>  * arg - 1, prefix str : snaplist.snap{0..}.vol{0..}.*</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_get_each_volinfo_in_snap (dict_t *dict, char *keyprefix,</div><div class='del'>-                              gf_boolean_t snap_driven) {</div><div class='del'>-        char             key[PATH_MAX]  =  "";</div><div class='del'>-        char            *get_buffer     =  NULL;</div><div class='del'>-        int              value          =  0;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        char             indent[5]      = "\t";</div><div class='del'>-        char            *volname        =  NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='del'>-</div><div class='del'>-        if (snap_driven) {</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.volname", keyprefix);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;get_buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("%s" INDENT_MAIN_HEAD "%s", indent,</div><div class='del'>-                        "Snap Volume Name", ":", get_buffer);</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key),</div><div class='del'>-                                "%s.origin-volname", keyprefix);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+cli_get_each_volinfo_in_snap(dict_t *dict, char *keyprefix,</div><div class='add'>+                             gf_boolean_t snap_driven)</div><div class='add'>+{</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *get_buffer = NULL;</div><div class='add'>+    int value = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char indent[5] = "\t";</div><div class='add'>+    char *volname = NULL;</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, key, &amp;volname);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_WARNING, "Failed to get %s", key);</div><div class='del'>-                        cli_out ("%-12s", "Origin:");</div><div class='del'>-                }</div><div class='del'>-                cli_out ("%s" INDENT_MAIN_HEAD "%s", indent,</div><div class='del'>-                        "Origin Volume name", ":", volname);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='ctx'> </div><div class='add'>+    if (snap_driven) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.volname", keyprefix);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.snapcount",</div><div class='del'>-                                keyprefix);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;get_buffer);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Snap Volume Name", ":",</div><div class='add'>+                get_buffer);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("%s%s %s      %s %d", indent, "Snaps taken for",</div><div class='del'>-                        volname, ":", value);</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.origin-volname", keyprefix);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.snaps-available",</div><div class='del'>-                                keyprefix);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;volname);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_WARNING, "Failed to get %s", key);</div><div class='add'>+            cli_out("%-12s", "Origin:");</div><div class='add'>+        }</div><div class='add'>+        cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Origin Volume name", ":",</div><div class='add'>+                volname);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("%s%s %s  %s %d", indent, "Snaps available for",</div><div class='del'>-                         volname, ":", value);</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.snapcount", keyprefix);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;value);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        cli_out("%s%s %s      %s %d", indent, "Snaps taken for", volname, ":",</div><div class='add'>+                value);</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "%s.vol-status", keyprefix);</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.snaps-available", keyprefix);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, key, &amp;get_buffer);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;value);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Status",</div><div class='del'>-                 ":", get_buffer);</div><div class='add'>+        cli_out("%s%s %s  %s %d", indent, "Snaps available for", volname, ":",</div><div class='add'>+                value);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "%s.vol-status", keyprefix);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Status", ":", get_buffer);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is used to print snap related information</div><div class='hunk'>@@ -9841,924 +9793,890 @@ out:</div><div class='ctx'>  * arg - 1, prefix_str : snaplist.snap{0..}.*</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_get_volinfo_in_snap (dict_t *dict, char *keyprefix) {</div><div class='add'>+cli_get_volinfo_in_snap(dict_t *dict, char *keyprefix)</div><div class='add'>+{</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    int i = 0;</div><div class='add'>+    int volcount = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        char            key[PATH_MAX]   = "";</div><div class='del'>-        int             i               = 0;</div><div class='del'>-        int             volcount        = 0;</div><div class='del'>-        int             ret             = -1;</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='add'>+    ret = snprintf(key, sizeof(key), "%s.vol-count", keyprefix);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "%s.vol-count", keyprefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;volcount);</div><div class='add'>+    for (i = 1; i &lt;= volcount; i++) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.vol%d", keyprefix, i);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;volcount);</div><div class='del'>-        for (i = 1 ; i &lt;= volcount ; i++) {</div><div class='del'>-                ret = snprintf (key, sizeof (key),</div><div class='del'>-                                "%s.vol%d", keyprefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = cli_get_each_volinfo_in_snap (dict, key, _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not list "</div><div class='del'>-                                "details of volume in a snap");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out (" ");</div><div class='add'>+        ret = cli_get_each_volinfo_in_snap(dict, key, _gf_true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not list "</div><div class='add'>+                   "details of volume in a snap");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        cli_out(" ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_get_each_snap_info (dict_t *dict, char *prefix_str,</div><div class='del'>-                        gf_boolean_t snap_driven) {</div><div class='del'>-        char            key_buffer[PATH_MAX] = "";</div><div class='del'>-        char           *get_buffer           = NULL;</div><div class='del'>-        int             ret                  = -1;</div><div class='del'>-        char            indent[5]            = "";</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (prefix_str);</div><div class='del'>-</div><div class='del'>-        if (!snap_driven)</div><div class='del'>-                strcat (indent, "\t");</div><div class='del'>-</div><div class='del'>-        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snapname",</div><div class='del'>-                        prefix_str);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;get_buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ",</div><div class='del'>-                        key_buffer);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Snapshot",</div><div class='del'>-                ":", get_buffer);</div><div class='del'>-</div><div class='del'>-        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snap-id",</div><div class='del'>-                        prefix_str);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;get_buffer);</div><div class='add'>+cli_get_each_snap_info(dict_t *dict, char *prefix_str, gf_boolean_t snap_driven)</div><div class='add'>+{</div><div class='add'>+    char key_buffer[PATH_MAX] = "";</div><div class='add'>+    char *get_buffer = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char indent[5] = "";</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(prefix_str);</div><div class='add'>+</div><div class='add'>+    if (!snap_driven)</div><div class='add'>+        strcat(indent, "\t");</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snapname", prefix_str);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ", key_buffer);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Snapshot", ":", get_buffer);</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-id", prefix_str);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ", key_buffer);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Snap UUID", ":", get_buffer);</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-desc", prefix_str);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;get_buffer);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        /* Ignore error for description */</div><div class='add'>+        cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Description", ":",</div><div class='add'>+                get_buffer);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key_buffer, sizeof(key_buffer), "%s.snap-time", prefix_str);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ",</div><div class='add'>+               prefix_str);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out("%s" INDENT_MAIN_HEAD "%s", indent, "Created", ":", get_buffer);</div><div class='add'>+</div><div class='add'>+    if (snap_driven) {</div><div class='add'>+        cli_out("%-12s", "Snap Volumes:\n");</div><div class='add'>+        ret = cli_get_volinfo_in_snap(dict, prefix_str);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ",</div><div class='del'>-                        key_buffer);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Snap UUID",</div><div class='del'>-                ":", get_buffer);</div><div class='del'>-</div><div class='del'>-        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snap-desc",</div><div class='del'>-                        prefix_str);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;get_buffer);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                /* Ignore error for description */</div><div class='del'>-                cli_out ("%s" INDENT_MAIN_HEAD "%s", indent,</div><div class='del'>-                         "Description", ":", get_buffer);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = snprintf (key_buffer, sizeof (key_buffer), "%s.snap-time",</div><div class='del'>-                        prefix_str);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;get_buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ",</div><div class='del'>-                        prefix_str);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cli_out ("%s" INDENT_MAIN_HEAD "%s", indent, "Created",</div><div class='del'>-                ":", get_buffer);</div><div class='del'>-</div><div class='del'>-        if (snap_driven) {</div><div class='del'>-                cli_out ("%-12s", "Snap Volumes:\n");</div><div class='del'>-                ret = cli_get_volinfo_in_snap (dict, prefix_str);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to list details "</div><div class='del'>-                                "of the snaps");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Unable to list details "</div><div class='add'>+                   "of the snaps");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This is a generic function to print snap related information.</div><div class='ctx'>  * arg - 0, dict : Response Dictionary</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_call_snapshot_info (dict_t *dict, gf_boolean_t bool_snap_driven) {</div><div class='del'>-        int             snap_count       =  0;</div><div class='del'>-        char            key[PATH_MAX]    =  "";</div><div class='del'>-        int             ret              =  -1;</div><div class='del'>-        int             i                =   0;</div><div class='add'>+cli_call_snapshot_info(dict_t *dict, gf_boolean_t bool_snap_driven)</div><div class='add'>+{</div><div class='add'>+    int snap_count = 0;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "snapcount", &amp;snap_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get snapcount");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "snapcount", &amp;snap_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get snapcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (snap_count == 0) {</div><div class='del'>-                cli_out ("No snapshots present");</div><div class='del'>-        }</div><div class='add'>+    if (snap_count == 0) {</div><div class='add'>+        cli_out("No snapshots present");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 1 ; i &lt;= snap_count ; i++) {</div><div class='del'>-                ret = snprintf (key, sizeof (key), "snap%d", i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = cli_get_each_snap_info (dict, key, bool_snap_driven);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to print snap details");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 1; i &lt;= snap_count; i++) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "snap%d", i);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = cli_get_each_snap_info(dict, key, bool_snap_driven);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unable to print snap details");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_get_snaps_in_volume (dict_t *dict) {</div><div class='del'>-        int      ret             =  -1;</div><div class='del'>-        int      i               =  0;</div><div class='del'>-        int      count           =  0;</div><div class='del'>-        int      avail           =  0;</div><div class='del'>-        char     key[PATH_MAX]   =  "";</div><div class='del'>-        char    *get_buffer      =  NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "origin-volname", &amp;get_buffer);</div><div class='add'>+cli_get_snaps_in_volume(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int avail = 0;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *get_buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "origin-volname", &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch origin-volname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out(INDENT_MAIN_HEAD "%s", "Volume Name", ":", get_buffer);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "snapcount", &amp;avail);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch snapcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out(INDENT_MAIN_HEAD "%d", "Snaps Taken", ":", avail);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "snaps-available", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch snaps-available");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out(INDENT_MAIN_HEAD "%d", "Snaps Available", ":", count);</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= avail; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "snap%d", i);</div><div class='add'>+        ret = cli_get_each_snap_info(dict, key, _gf_false);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch origin-volname");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unable to print snap details");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        cli_out (INDENT_MAIN_HEAD "%s", "Volume Name", ":", get_buffer);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "snapcount", &amp;avail);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch snapcount");</div><div class='del'>-                goto out;</div><div class='add'>+        ret = snprintf(key, sizeof(key), "snap%d.vol1", i);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        cli_out (INDENT_MAIN_HEAD "%d", "Snaps Taken", ":", avail);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "snaps-available", &amp;count);</div><div class='add'>+        ret = cli_get_each_volinfo_in_snap(dict, key, _gf_false);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch snaps-available");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not get volume "</div><div class='add'>+                   "related information");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        cli_out (INDENT_MAIN_HEAD "%d", "Snaps Available", ":", count);</div><div class='del'>-</div><div class='del'>-        for (i = 1 ; i &lt;= avail ; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "snap%d", i);</div><div class='del'>-                ret = cli_get_each_snap_info (dict, key, _gf_false);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to print snap details");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key), "snap%d.vol1", i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = cli_get_each_volinfo_in_snap (dict, key, _gf_false);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not get volume "</div><div class='del'>-                                "related information");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='ctx'> </div><div class='del'>-                cli_out (" ");</div><div class='del'>-        }</div><div class='add'>+        cli_out(" ");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_snapshot_list (dict_t *dict) {</div><div class='del'>-        int     snapcount       =       0;</div><div class='del'>-        char    key[PATH_MAX]   =       "";</div><div class='del'>-        int     ret             =       -1;</div><div class='del'>-        int     i               =       0;</div><div class='del'>-        char    *get_buffer     =       NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "snapcount", &amp;snapcount);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch snap count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (snapcount == 0) {</div><div class='del'>-                cli_out ("No snapshots present");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 1 ; i &lt;= snapcount ; i++) {</div><div class='del'>-                ret = snprintf (key, sizeof (key), "snapname%d", i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+cli_snapshot_list(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int snapcount = 0;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *get_buffer = NULL;</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, key, &amp;get_buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not get %s ", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        cli_out ("%s", get_buffer);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-cli_get_snap_volume_status (dict_t *dict, char *key_prefix)</div><div class='del'>-{</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        char            key[PATH_MAX]   =       "";</div><div class='del'>-        char            *buffer         =       NULL;</div><div class='del'>-        int             brickcount      =       0;</div><div class='del'>-        int             i               =       0;</div><div class='del'>-        int             pid             =       0;</div><div class='add'>+    ret = dict_get_int32(dict, "snapcount", &amp;snapcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch snap count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (key_prefix);</div><div class='add'>+    if (snapcount == 0) {</div><div class='add'>+        cli_out("No snapshots present");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "%s.brickcount", key_prefix);</div><div class='add'>+    for (i = 1; i &lt;= snapcount; i++) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "snapname%d", i);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;brickcount);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch brickcount");</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; brickcount ; i++) {</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.brick%d.path",</div><div class='del'>-                                key_prefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO,</div><div class='del'>-                                "Unable to get Brick Path");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("\n\t%-17s %s   %s", "Brick Path", ":", buffer);</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.brick%d.vgname",</div><div class='del'>-                                key_prefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO,</div><div class='del'>-                                "Unable to get Volume Group");</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Volume Group", ":",</div><div class='del'>-                                 "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Volume Group", ":",</div><div class='del'>-                                 buffer);</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.brick%d.status",</div><div class='del'>-                                key_prefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO,</div><div class='del'>-                                "Unable to get Brick Running");</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Brick Running", ":",</div><div class='del'>-                                 "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Brick Running", ":",</div><div class='del'>-                                 buffer);</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.brick%d.pid",</div><div class='del'>-                                key_prefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;pid);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO,</div><div class='del'>-                                "Unable to get pid");</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Brick PID", ":", "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        cli_out ("\t%-17s %s   %d", "Brick PID", ":", pid);</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.brick%d.data",</div><div class='del'>-                                key_prefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO,</div><div class='del'>-                                "Unable to get Data Percent");</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Data Percentage", ":",</div><div class='del'>-                                 "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "Data Percentage", ":",</div><div class='del'>-                                 buffer);</div><div class='del'>-</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.brick%d.lvsize",</div><div class='del'>-                                key_prefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO, "Unable to get LV Size");</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "LV Size", ":", "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        cli_out ("\t%-17s %s   %s", "LV Size", ":", buffer);</div><div class='del'>-</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;get_buffer);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not get %s ", key);</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            cli_out("%s", get_buffer);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_get_single_snap_status (dict_t *dict, char *keyprefix)</div><div class='del'>-{</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        char            key[PATH_MAX]   =       "";</div><div class='del'>-        int             i               =       0;</div><div class='del'>-        int             volcount        =       0;</div><div class='del'>-        char            *get_buffer     =       NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = snprintf (key, sizeof (key), "%s.snapname", keyprefix);</div><div class='add'>+cli_get_snap_volume_status(dict_t *dict, char *key_prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    int brickcount = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int pid = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(key_prefix);</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "%s.brickcount", key_prefix);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;brickcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to fetch brickcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; brickcount; i++) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.brick%d.path", key_prefix, i);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, key, &amp;get_buffer);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get snapname");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get Brick Path");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-        cli_out ("\nSnap Name : %s", get_buffer);</div><div class='add'>+        cli_out("\n\t%-17s %s   %s", "Brick Path", ":", buffer);</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "%s.uuid", keyprefix);</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.brick%d.vgname", key_prefix, i);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, key, &amp;get_buffer);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get snap UUID");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cli_out ("Snap UUID : %s", get_buffer);</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get Volume Group");</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Volume Group", ":", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Volume Group", ":", buffer);</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "%s.volcount", keyprefix);</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.brick%d.status", key_prefix, i);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;volcount);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get volume count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get Brick Running");</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Brick Running", ":", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Brick Running", ":", buffer);</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; volcount ; i++) {</div><div class='del'>-                ret = snprintf (key, sizeof (key), "%s.vol%d", keyprefix, i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = cli_get_snap_volume_status (dict, key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Could not get snap volume status");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.brick%d.pid", key_prefix, i);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-cli_populate_req_dict_for_delete (dict_t *snap_dict, dict_t *dict, size_t index)</div><div class='del'>-{</div><div class='del'>-        int32_t         ret             = -1;</div><div class='del'>-        char            key[PATH_MAX]   = "";</div><div class='del'>-        char            *buffer         = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (snap_dict);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (snap_dict, "sub-cmd",</div><div class='del'>-                              GF_SNAP_DELETE_TYPE_ITER);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;pid);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save command "</div><div class='del'>-                        "type in snap dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get pid");</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Brick PID", ":", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            cli_out("\t%-17s %s   %d", "Brick PID", ":", pid);</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "snapname%zu", index);</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.brick%d.data", key_prefix, i);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get Data Percent");</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Data Percentage", ":", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            cli_out("\t%-17s %s   %s", "Data Percentage", ":", buffer);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr_with_alloc (snap_dict, "snapname", buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to save snapname");</div><div class='del'>-                goto out;</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.brick%d.lvsize", key_prefix, i);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (snap_dict, "type", GF_SNAP_OPTION_TYPE_DELETE);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to save command type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get LV Size");</div><div class='add'>+            cli_out("\t%-17s %s   %s", "LV Size", ":", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            cli_out("\t%-17s %s   %s", "LV Size", ":", buffer);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr_with_alloc (snap_dict, "cmd-str",</div><div class='del'>-                                       "snapshot delete");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Could not save command string as delete");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_populate_req_dict_for_status (dict_t *snap_dict, dict_t *dict, int index)</div><div class='del'>-{</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        char            key[PATH_MAX]   =       "";</div><div class='del'>-        char            *buffer         =       NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (snap_dict);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (snap_dict, "sub-cmd",</div><div class='del'>-                               GF_SNAP_STATUS_TYPE_ITER);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save command "</div><div class='del'>-                        "type in snap dict");</div><div class='del'>-                goto out;</div><div class='add'>+cli_get_single_snap_status(dict_t *dict, char *keyprefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    int i = 0;</div><div class='add'>+    int volcount = 0;</div><div class='add'>+    char *get_buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "%s.snapname", keyprefix);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get snapname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out("\nSnap Name : %s", get_buffer);</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "%s.uuid", keyprefix);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;get_buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get snap UUID");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cli_out("Snap UUID : %s", get_buffer);</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "%s.volcount", keyprefix);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;volcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get volume count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; volcount; i++) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "%s.vol%d", keyprefix, i);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "status.snap%d.snapname", index);</div><div class='del'>-         if (ret &lt; 0) {</div><div class='del'>-                 goto out;</div><div class='del'>-         }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='add'>+        ret = cli_get_snap_volume_status(dict, key);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not get snapname");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not get snap volume status");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (snap_dict, "snapname", buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not save snapname "</div><div class='del'>-                        "in snap dict");</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+int32_t</div><div class='add'>+cli_populate_req_dict_for_delete(dict_t *snap_dict, dict_t *dict, size_t index)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(snap_dict);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(snap_dict, "sub-cmd", GF_SNAP_DELETE_TYPE_ITER);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save command "</div><div class='add'>+               "type in snap dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "snapname%zu", index);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snapname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr_with_alloc(snap_dict, "snapname", buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to save snapname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(snap_dict, "type", GF_SNAP_OPTION_TYPE_DELETE);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to save command type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr_with_alloc(snap_dict, "cmd-str", "snapshot delete");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not save command string as delete");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (snap_dict, "type", GF_SNAP_OPTION_TYPE_STATUS);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Could not save command type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+cli_populate_req_dict_for_status(dict_t *snap_dict, dict_t *dict, int index)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(snap_dict);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(snap_dict, "sub-cmd", GF_SNAP_STATUS_TYPE_ITER);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save command "</div><div class='add'>+               "type in snap dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "status.snap%d.snapname", index);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not get snapname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(snap_dict, "snapname", buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not save snapname "</div><div class='add'>+               "in snap dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(snap_dict, "type", GF_SNAP_OPTION_TYPE_STATUS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not save command type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr_with_alloc(snap_dict, "cmd-str", "snapshot status");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not save command string as status");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(snap_dict, "hold_vol_locks", _gf_false);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Setting volume lock flag failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr_with_alloc (snap_dict, "cmd-str",</div><div class='del'>-                                       "snapshot status");</div><div class='add'>+int</div><div class='add'>+cli_snapshot_status(dict_t *dict, gf_cli_rsp *rsp, call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int status_cmd = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(rsp);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+</div><div class='add'>+    local = ((call_frame_t *)frame)-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "frame-&gt;local is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp-&gt;op_ret) {</div><div class='add'>+        if (rsp-&gt;op_errstr) {</div><div class='add'>+            ret = dict_set_dynstr_with_alloc(local-&gt;dict, "op_err_str",</div><div class='add'>+                                             rsp-&gt;op_errstr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to set "</div><div class='add'>+                       "op_errstr in local dictionary");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        ret = rsp-&gt;op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "sub-cmd", &amp;status_cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch status type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((status_cmd != GF_SNAP_STATUS_TYPE_SNAP) &amp;&amp;</div><div class='add'>+        (status_cmd != GF_SNAP_STATUS_TYPE_ITER)) {</div><div class='add'>+        dict_copy(dict, local-&gt;dict);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = snprintf(key, sizeof(key), "status.snap0");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_snapshot_status_single_snap(local, dict, key);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Could not save command string as status");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to create "</div><div class='add'>+                   "xml output for snapshot status");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (snap_dict, "hold_vol_locks", _gf_false);</div><div class='add'>+    } else {</div><div class='add'>+        ret = cli_get_single_snap_status(dict, key);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Setting volume lock flag failed");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not fetch "</div><div class='add'>+                   "status of snap");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_snapshot_status (dict_t *dict, gf_cli_rsp *rsp,</div><div class='del'>-                             call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-        char            key[PATH_MAX]   =       "";</div><div class='del'>-        int             ret             =       -1;</div><div class='del'>-        int             status_cmd      =       -1;</div><div class='del'>-        cli_local_t     *local          =       NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (rsp);</div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-</div><div class='del'>-        local = ((call_frame_t *) frame) -&gt; local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "frame-&gt;local is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp-&gt;op_ret) {</div><div class='del'>-                if (rsp-&gt;op_errstr) {</div><div class='del'>-                        ret = dict_set_dynstr_with_alloc (local-&gt;dict,</div><div class='del'>-                                                          "op_err_str",</div><div class='del'>-                                                          rsp-&gt;op_errstr);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR, "Failed to set "</div><div class='del'>-                                        "op_errstr in local dictionary");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = rsp-&gt;op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "sub-cmd", &amp;status_cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch status type");</div><div class='add'>+gf_cli_generate_snapshot_event(gf_cli_rsp *rsp, dict_t *dict, int32_t type,</div><div class='add'>+                               char *snap_name, char *volname, char *snap_uuid,</div><div class='add'>+                               char *clone_name)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int config_command = 0;</div><div class='add'>+    int32_t delete_cmd = -1;</div><div class='add'>+    uint64_t hard_limit = 0;</div><div class='add'>+    uint64_t soft_limit = 0;</div><div class='add'>+    char *auto_delete = NULL;</div><div class='add'>+    char *snap_activate = NULL;</div><div class='add'>+    char msg[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char option[512] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", dict, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", rsp, out);</div><div class='add'>+</div><div class='add'>+    switch (type) {</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_CREATE:</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if ((status_cmd != GF_SNAP_STATUS_TYPE_SNAP) &amp;&amp;</div><div class='del'>-            (status_cmd != GF_SNAP_STATUS_TYPE_ITER)) {</div><div class='del'>-                dict_copy (dict, local-&gt;dict);</div><div class='add'>+            if (!volname) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_CREATE_FAILED,</div><div class='add'>+                         "snapshot_name=%s;volume_name=%s;error=%s", snap_name,</div><div class='add'>+                         volname,</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (key, sizeof (key), "status.snap0");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='add'>+            if (!snap_uuid) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_snapshot_status_single_snap (local, dict, key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot status");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = cli_get_single_snap_status (dict, key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                                "status of snap");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_CREATED,</div><div class='add'>+                     "snapshot_name=%s;"</div><div class='add'>+                     "volume_name=%s;snapshot_uuid=%s",</div><div class='add'>+                     snap_name, volname, snap_uuid);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-gf_cli_generate_snapshot_event (gf_cli_rsp *rsp, dict_t *dict,</div><div class='del'>-                                int32_t type, char *snap_name,</div><div class='del'>-                                char *volname, char *snap_uuid,</div><div class='del'>-                                char *clone_name)</div><div class='del'>-{</div><div class='del'>-        int         ret               = -1;</div><div class='del'>-        int         config_command    = 0;</div><div class='del'>-        int32_t     delete_cmd        = -1;</div><div class='del'>-        uint64_t    hard_limit        = 0;</div><div class='del'>-        uint64_t    soft_limit        = 0;</div><div class='del'>-        char       *auto_delete       = NULL;</div><div class='del'>-        char       *snap_activate     = NULL;</div><div class='del'>-        char        msg[PATH_MAX]     = {0, };</div><div class='del'>-        char        option[512]       = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", dict, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", rsp, out);</div><div class='del'>-</div><div class='del'>-        switch (type) {</div><div class='del'>-        case GF_SNAP_OPTION_TYPE_CREATE:</div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!volname) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get volume name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_CREATE_FAILED,</div><div class='del'>-                                  "snapshot_name=%s;volume_name=%s;error=%s",</div><div class='del'>-                                  snap_name, volname,</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!snap_uuid) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_CREATED, "snapshot_name=%s;"</div><div class='del'>-                          "volume_name=%s;snapshot_uuid=%s", snap_name,</div><div class='del'>-                          volname, snap_uuid);</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_ACTIVATE:</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_ACTIVATE_FAILED,</div><div class='add'>+                         "snapshot_name=%s;error=%s", snap_name,</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_OPTION_TYPE_ACTIVATE:</div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_uuid) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_ACTIVATE_FAILED,</div><div class='del'>-                                  "snapshot_name=%s;error=%s", snap_name,</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_ACTIVATED,</div><div class='add'>+                     "snapshot_name=%s;"</div><div class='add'>+                     "snapshot_uuid=%s",</div><div class='add'>+                     snap_name, snap_uuid);</div><div class='ctx'> </div><div class='del'>-                if (!snap_uuid) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_ACTIVATED, "snapshot_name=%s;"</div><div class='del'>-                          "snapshot_uuid=%s", snap_name, snap_uuid);</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_DEACTIVATE:</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_DEACTIVATE_FAILED,</div><div class='add'>+                         "snapshot_name=%s;error=%s", snap_name,</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_OPTION_TYPE_DEACTIVATE:</div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_uuid) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_DEACTIVATE_FAILED,</div><div class='del'>-                                  "snapshot_name=%s;error=%s", snap_name,</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_DEACTIVATED,</div><div class='add'>+                     "snapshot_name=%s;"</div><div class='add'>+                     "snapshot_uuid=%s",</div><div class='add'>+                     snap_name, snap_uuid);</div><div class='ctx'> </div><div class='del'>-                if (!snap_uuid) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_DEACTIVATED, "snapshot_name=%s;"</div><div class='del'>-                          "snapshot_uuid=%s", snap_name, snap_uuid);</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_RESTORE:</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_RESTORE_FAILED,</div><div class='add'>+                         "snapshot_name=%s;error=%s", snap_name,</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_OPTION_TYPE_RESTORE:</div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_uuid) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_RESTORE_FAILED,</div><div class='del'>-                                  "snapshot_name=%s;error=%s", snap_name,</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (!volname) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get volname");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_uuid) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_RESTORED,</div><div class='add'>+                     "snapshot_name=%s;"</div><div class='add'>+                     "snapshot_uuid=%s;volume_name=%s",</div><div class='add'>+                     snap_name, snap_uuid, volname);</div><div class='ctx'> </div><div class='del'>-                if (!volname) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get volname");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_RESTORED, "snapshot_name=%s;"</div><div class='del'>-                          "snapshot_uuid=%s;volume_name=%s",</div><div class='del'>-                          snap_name, snap_uuid, volname);</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_DELETE:</div><div class='add'>+            ret = dict_get_int32(dict, "sub-cmd", &amp;delete_cmd);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Could not get sub-cmd");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            /*</div><div class='add'>+             * Need not generate any event (success or failure) for delete *</div><div class='add'>+             * all, as it will trigger individual delete for all snapshots *</div><div class='add'>+             */</div><div class='add'>+            if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL) {</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_OPTION_TYPE_DELETE:</div><div class='del'>-                ret = dict_get_int32 (dict, "sub-cmd", &amp;delete_cmd);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not get sub-cmd");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                /*</div><div class='del'>-                 * Need not generate any event (success or failure) for delete *</div><div class='del'>-                 * all, as it will trigger individual delete for all snapshots *</div><div class='del'>-                 */</div><div class='del'>-                if (delete_cmd == GF_SNAP_DELETE_TYPE_ALL) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_DELETE_FAILED,</div><div class='add'>+                         "snapshot_name=%s;error=%s", snap_name,</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_uuid) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_DELETE_FAILED,</div><div class='del'>-                                  "snapshot_name=%s;error=%s", snap_name,</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_DELETED,</div><div class='add'>+                     "snapshot_name=%s;"</div><div class='add'>+                     "snapshot_uuid=%s",</div><div class='add'>+                     snap_name, snap_uuid);</div><div class='ctx'> </div><div class='del'>-                if (!snap_uuid) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_DELETED, "snapshot_name=%s;"</div><div class='del'>-                          "snapshot_uuid=%s", snap_name, snap_uuid);</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_CLONE:</div><div class='add'>+            if (!clone_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get clone name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snapname name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_CLONE_FAILED,</div><div class='add'>+                         "snapshot_name=%s;clone_name=%s;"</div><div class='add'>+                         "error=%s",</div><div class='add'>+                         snap_name, clone_name,</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_OPTION_TYPE_CLONE:</div><div class='del'>-                if (!clone_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get clone name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_uuid) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snapname name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_CLONED,</div><div class='add'>+                     "snapshot_name=%s;"</div><div class='add'>+                     "clone_name=%s;clone_uuid=%s",</div><div class='add'>+                     snap_name, clone_name, snap_uuid);</div><div class='ctx'> </div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_CLONE_FAILED,</div><div class='del'>-                                  "snapshot_name=%s;clone_name=%s;"</div><div class='del'>-                                  "error=%s", snap_name, clone_name,</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (!snap_uuid) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_CONFIG:</div><div class='add'>+            if (rsp-&gt;op_ret != 0) {</div><div class='add'>+                gf_event(EVENT_SNAPSHOT_CONFIG_UPDATE_FAILED, "error=%s",</div><div class='add'>+                         rsp-&gt;op_errstr ? rsp-&gt;op_errstr</div><div class='add'>+                                        : "Please check log file for details");</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_CLONED, "snapshot_name=%s;"</div><div class='del'>-                          "clone_name=%s;clone_uuid=%s",</div><div class='del'>-                          snap_name, clone_name, snap_uuid);</div><div class='add'>+            ret = dict_get_int32(dict, "config-command", &amp;config_command);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Could not fetch config type");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (config_command == GF_SNAP_CONFIG_DISPLAY) {</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_SNAP_OPTION_TYPE_CONFIG:</div><div class='del'>-                if (rsp-&gt;op_ret != 0) {</div><div class='del'>-                        gf_event (EVENT_SNAPSHOT_CONFIG_UPDATE_FAILED,</div><div class='del'>-                                  "error=%s",</div><div class='del'>-                                  rsp-&gt;op_errstr ? rsp-&gt;op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            /* These are optional parameters therefore ignore the error */</div><div class='add'>+            ret = dict_get_uint64(dict, "snap-max-hard-limit", &amp;hard_limit);</div><div class='add'>+            ret = dict_get_uint64(dict, "snap-max-soft-limit", &amp;soft_limit);</div><div class='add'>+            ret = dict_get_str(dict, "auto-delete", &amp;auto_delete);</div><div class='add'>+            ret = dict_get_str(dict, "snap-activate-on-create", &amp;snap_activate);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_int32 (dict, "config-command", &amp;config_command);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Could not fetch config type");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (config_command == GF_SNAP_CONFIG_DISPLAY) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (!hard_limit &amp;&amp; !soft_limit &amp;&amp; !auto_delete &amp;&amp; !snap_activate) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "At least one option from "</div><div class='add'>+                       "snap-max-hard-limit, snap-max-soft-limit, "</div><div class='add'>+                       "auto-delete and snap-activate-on-create "</div><div class='add'>+                       "should be set");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                /* These are optional parameters therefore ignore the error */</div><div class='del'>-                ret = dict_get_uint64 (dict, "snap-max-hard-limit",</div><div class='del'>-                                       &amp;hard_limit);</div><div class='del'>-                ret = dict_get_uint64 (dict, "snap-max-soft-limit",</div><div class='del'>-                                       &amp;soft_limit);</div><div class='del'>-                ret = dict_get_str (dict, "auto-delete",</div><div class='del'>-                                    &amp;auto_delete);</div><div class='del'>-                ret = dict_get_str (dict, "snap-activate-on-create",</div><div class='del'>-                                    &amp;snap_activate);</div><div class='del'>-</div><div class='del'>-                if (!hard_limit &amp;&amp; !soft_limit &amp;&amp;</div><div class='del'>-                    !auto_delete &amp;&amp; !snap_activate) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "At least one option from "</div><div class='del'>-                                "snap-max-hard-limit, snap-max-soft-limit, "</div><div class='del'>-                                "auto-delete and snap-activate-on-create "</div><div class='del'>-                                "should be set");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            volname = NULL;</div><div class='add'>+            ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='ctx'> </div><div class='del'>-                volname = NULL;</div><div class='del'>-                ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-</div><div class='del'>-                if (hard_limit || soft_limit) {</div><div class='del'>-                        snprintf (option, sizeof(option), "%s=%"PRIu64,</div><div class='del'>-                                  hard_limit ? "hard_limit" : "soft_limit",</div><div class='del'>-                                  hard_limit ? hard_limit:soft_limit);</div><div class='del'>-                } else if (auto_delete || snap_activate) {</div><div class='del'>-                        snprintf (option, sizeof(option), "%s=%s",</div><div class='del'>-                                  auto_delete ? "auto-delete" : "snap-activate",</div><div class='del'>-                                  auto_delete ? auto_delete:snap_activate);</div><div class='del'>-                }</div><div class='add'>+            if (hard_limit || soft_limit) {</div><div class='add'>+                snprintf(option, sizeof(option), "%s=%" PRIu64,</div><div class='add'>+                         hard_limit ? "hard_limit" : "soft_limit",</div><div class='add'>+                         hard_limit ? hard_limit : soft_limit);</div><div class='add'>+            } else if (auto_delete || snap_activate) {</div><div class='add'>+                snprintf(option, sizeof(option), "%s=%s",</div><div class='add'>+                         auto_delete ? "auto-delete" : "snap-activate",</div><div class='add'>+                         auto_delete ? auto_delete : snap_activate);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                snprintf (msg, sizeof(msg), "config_type=%s;%s",</div><div class='del'>-                          volname?"volume_config":"system_config", option);</div><div class='add'>+            snprintf(msg, sizeof(msg), "config_type=%s;%s",</div><div class='add'>+                     volname ? "volume_config" : "system_config", option);</div><div class='ctx'> </div><div class='del'>-                gf_event (EVENT_SNAPSHOT_CONFIG_UPDATED, "%s", msg);</div><div class='add'>+            gf_event(EVENT_SNAPSHOT_CONFIG_UPDATED, "%s", msg);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log ("cli", GF_LOG_WARNING,</div><div class='del'>-                        "Cannot generate event for unknown type.");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_WARNING,</div><div class='add'>+                   "Cannot generate event for unknown type.");</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -10766,1415 +10684,1463 @@ out:</div><div class='ctx'>  * repeating the same code again and again.               *</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_cli_snapshot_get_data_from_dict (dict_t *dict, char **snap_name,</div><div class='del'>-                                    char **volname, char **snap_uuid,</div><div class='del'>-                                    int8_t *soft_limit_flag,</div><div class='del'>-                                    char **clone_name)</div><div class='add'>+gf_cli_snapshot_get_data_from_dict(dict_t *dict, char **snap_name,</div><div class='add'>+                                   char **volname, char **snap_uuid,</div><div class='add'>+                                   int8_t *soft_limit_flag, char **clone_name)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", dict, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", dict, out);</div><div class='ctx'> </div><div class='del'>-        if (snap_name) {</div><div class='del'>-                ret = dict_get_str (dict, "snapname", snap_name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get snapname from dict");</div><div class='del'>-                }</div><div class='add'>+    if (snap_name) {</div><div class='add'>+        ret = dict_get_str(dict, "snapname", snap_name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get snapname from dict");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (volname) {</div><div class='del'>-                ret = dict_get_str (dict, "volname1", volname);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get volname1 from dict");</div><div class='del'>-                }</div><div class='add'>+    if (volname) {</div><div class='add'>+        ret = dict_get_str(dict, "volname1", volname);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get volname1 from dict");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (snap_uuid) {</div><div class='del'>-                ret = dict_get_str (dict, "snapuuid", snap_uuid);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get snapuuid from dict");</div><div class='del'>-                }</div><div class='add'>+    if (snap_uuid) {</div><div class='add'>+        ret = dict_get_str(dict, "snapuuid", snap_uuid);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get snapuuid from dict");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (soft_limit_flag) {</div><div class='del'>-                ret = dict_get_int8 (dict, "soft-limit-reach",</div><div class='del'>-                                     soft_limit_flag);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get soft-limit-reach from dict");</div><div class='del'>-                }</div><div class='add'>+    if (soft_limit_flag) {</div><div class='add'>+        ret = dict_get_int8(dict, "soft-limit-reach", soft_limit_flag);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+                   "failed to get soft-limit-reach from dict");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (clone_name) {</div><div class='del'>-                ret = dict_get_str (dict, "clonename", clone_name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_DEBUG,</div><div class='del'>-                                "failed to get clonename from dict");</div><div class='del'>-                }</div><div class='add'>+    if (clone_name) {</div><div class='add'>+        ret = dict_get_str(dict, "clonename", clone_name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_DEBUG, "failed to get clonename from dict");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_snapshot_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                     int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int                   ret                      = -1;</div><div class='del'>-        gf_cli_rsp            rsp                      = {0, };</div><div class='del'>-        dict_t               *dict                     = NULL;</div><div class='del'>-        char                 *snap_name                = NULL;</div><div class='del'>-        char                 *clone_name               = NULL;</div><div class='del'>-        int32_t               type                     =  0;</div><div class='del'>-        call_frame_t         *frame                    = NULL;</div><div class='del'>-        gf_boolean_t         snap_driven               = _gf_false;</div><div class='del'>-        int8_t               soft_limit_flag           = -1;</div><div class='del'>-        char                 *volname                  = NULL;</div><div class='del'>-        char                 *snap_uuid                = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;rpc_status == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_snapshot_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                    void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *snap_name = NULL;</div><div class='add'>+    char *clone_name = NULL;</div><div class='add'>+    int32_t type = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    gf_boolean_t snap_driven = _gf_false;</div><div class='add'>+    int8_t soft_limit_flag = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *snap_uuid = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;rpc_status == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to get type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_cli_snapshot_get_data_from_dict(</div><div class='add'>+        dict, &amp;snap_name, &amp;volname, &amp;snap_uuid, &amp;soft_limit_flag, &amp;clone_name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to fetch data from dict.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+#if (USE_EVENTS)</div><div class='add'>+    ret = gf_cli_generate_snapshot_event(&amp;rsp, dict, type, snap_name, volname,</div><div class='add'>+                                         snap_uuid, clone_name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to generate snapshot event");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='add'>+    /* Snapshot status and delete command is handled separately */</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML &amp;&amp;</div><div class='add'>+        GF_SNAP_OPTION_TYPE_STATUS != type &amp;&amp;</div><div class='add'>+        GF_SNAP_OPTION_TYPE_DELETE != type) {</div><div class='add'>+        ret = cli_xml_output_snapshot(type, dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                      rsp.op_errstr);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "failed to get type");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = gf_cli_snapshot_get_data_from_dict (dict, &amp;snap_name, &amp;volname,</div><div class='del'>-                                                  &amp;snap_uuid, &amp;soft_limit_flag,</div><div class='del'>-                                                  &amp;clone_name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch data from dict.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#if (USE_EVENTS)</div><div class='del'>-        ret = gf_cli_generate_snapshot_event (&amp;rsp, dict, type, snap_name,</div><div class='del'>-                                              volname, snap_uuid, clone_name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Failed to generate snapshot event");</div><div class='add'>+    switch (type) {</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_CREATE:</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("snapshot create: failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        /* Snapshot status and delete command is handled separately */</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML &amp;&amp;</div><div class='del'>-            GF_SNAP_OPTION_TYPE_STATUS != type &amp;&amp;</div><div class='del'>-            GF_SNAP_OPTION_TYPE_DELETE != type) {</div><div class='del'>-                ret = cli_xml_output_snapshot (type, dict, rsp.op_ret,</div><div class='del'>-                                               rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='del'>-                }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='del'>-        case GF_SNAP_OPTION_TYPE_CREATE:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err("snapshot create: failed: %s",</div><div class='del'>-                                 rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                 "Please check log file for details");</div><div class='del'>-                                 ret = rsp.op_ret;</div><div class='del'>-                                 goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!volname) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get volume name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!volname) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get volume name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                cli_out ("snapshot create: success: Snap %s created "</div><div class='del'>-                                        "successfully", snap_name);</div><div class='add'>+            cli_out(</div><div class='add'>+                "snapshot create: success: Snap %s created "</div><div class='add'>+                "successfully",</div><div class='add'>+                snap_name);</div><div class='ctx'> </div><div class='del'>-                if (soft_limit_flag == 1) {</div><div class='del'>-                        cli_out ("Warning: Soft-limit of volume (%s) is "</div><div class='del'>-                                "reached. Snapshot creation is not possible "</div><div class='del'>-                                "once hard-limit is reached.", volname);</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            if (soft_limit_flag == 1) {</div><div class='add'>+                cli_out(</div><div class='add'>+                    "Warning: Soft-limit of volume (%s) is "</div><div class='add'>+                    "reached. Snapshot creation is not possible "</div><div class='add'>+                    "once hard-limit is reached.",</div><div class='add'>+                    volname);</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CLONE:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err("snapshot clone: failed: %s",</div><div class='del'>-                                 rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                 "Please check log file for details");</div><div class='del'>-                                 ret = rsp.op_ret;</div><div class='del'>-                                 goto out;</div><div class='del'>-                }</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("snapshot clone: failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!clone_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get clone name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!clone_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get clone name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snapname name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snapname name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                cli_out ("snapshot clone: success: Clone %s created "</div><div class='del'>-                                        "successfully", clone_name);</div><div class='add'>+            cli_out(</div><div class='add'>+                "snapshot clone: success: Clone %s created "</div><div class='add'>+                "successfully",</div><div class='add'>+                clone_name);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_RESTORE:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err("snapshot restore: failed: %s",</div><div class='del'>-                                 rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                 "Please check log file for details");</div><div class='del'>-                                 ret = rsp.op_ret;</div><div class='del'>-                                 goto out;</div><div class='del'>-                }</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("snapshot restore: failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                cli_out ("Snapshot restore: %s: Snap restored "</div><div class='del'>-                                 "successfully", snap_name);</div><div class='add'>+            cli_out(</div><div class='add'>+                "Snapshot restore: %s: Snap restored "</div><div class='add'>+                "successfully",</div><div class='add'>+                snap_name);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_ACTIVATE:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err("snapshot activate: failed: %s",</div><div class='del'>-                                 rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                 "Please check log file for details");</div><div class='del'>-                                 ret = rsp.op_ret;</div><div class='del'>-                                 goto out;</div><div class='del'>-                }</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("snapshot activate: failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                cli_out ("Snapshot activate: %s: Snap activated "</div><div class='del'>-                                 "successfully", snap_name);</div><div class='add'>+            cli_out(</div><div class='add'>+                "Snapshot activate: %s: Snap activated "</div><div class='add'>+                "successfully",</div><div class='add'>+                snap_name);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_DEACTIVATE:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err("snapshot deactivate: failed: %s",</div><div class='del'>-                                 rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                 "Please check log file for details");</div><div class='del'>-                                 ret = rsp.op_ret;</div><div class='del'>-                                 goto out;</div><div class='del'>-                }</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("snapshot deactivate: failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!snap_name) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get snap name");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!snap_name) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                cli_out ("Snapshot deactivate: %s: Snap deactivated "</div><div class='del'>-                                 "successfully", snap_name);</div><div class='add'>+            cli_out(</div><div class='add'>+                "Snapshot deactivate: %s: Snap deactivated "</div><div class='add'>+                "successfully",</div><div class='add'>+                snap_name);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_INFO:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err ("Snapshot info : failed: %s",</div><div class='del'>-                                  rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                  "Please check log file for details");</div><div class='del'>-                        ret = rsp.op_ret;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("Snapshot info : failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                snap_driven = dict_get_str_boolean (dict, "snap-driven",</div><div class='del'>-                                                    _gf_false);</div><div class='del'>-                if (snap_driven == _gf_true) {</div><div class='del'>-                        ret = cli_call_snapshot_info  (dict, snap_driven);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Snapshot info failed");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else if (snap_driven == _gf_false) {</div><div class='del'>-                        ret = cli_get_snaps_in_volume (dict);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Snapshot info failed");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+            snap_driven = dict_get_str_boolean(dict, "snap-driven", _gf_false);</div><div class='add'>+            if (snap_driven == _gf_true) {</div><div class='add'>+                ret = cli_call_snapshot_info(dict, snap_driven);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR, "Snapshot info failed");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case GF_SNAP_OPTION_TYPE_CONFIG:</div><div class='del'>-                ret = cli_snapshot_config_display (dict, &amp;rsp);</div><div class='add'>+            } else if (snap_driven == _gf_false) {</div><div class='add'>+                ret = cli_get_snaps_in_volume(dict);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to display "</div><div class='del'>-                                "snapshot config output.");</div><div class='del'>-                        goto out;</div><div class='add'>+                    gf_log("cli", GF_LOG_ERROR, "Snapshot info failed");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_SNAP_OPTION_TYPE_CONFIG:</div><div class='add'>+            ret = cli_snapshot_config_display(dict, &amp;rsp);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to display "</div><div class='add'>+                       "snapshot config output.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_LIST:</div><div class='del'>-                if (rsp.op_ret) {</div><div class='del'>-                        cli_err ("Snapshot list : failed: %s",</div><div class='del'>-                                 rsp.op_errstr ? rsp.op_errstr :</div><div class='del'>-                                "Please check log file for details");</div><div class='del'>-                        ret = rsp.op_ret;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (rsp.op_ret) {</div><div class='add'>+                cli_err("Snapshot list : failed: %s",</div><div class='add'>+                        rsp.op_errstr ? rsp.op_errstr</div><div class='add'>+                                      : "Please check log file for details");</div><div class='add'>+                ret = rsp.op_ret;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = cli_snapshot_list (dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to display "</div><div class='del'>-                                "snapshot list");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_snapshot_list(dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to display "</div><div class='add'>+                       "snapshot list");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_DELETE:</div><div class='del'>-                ret = cli_snapshot_remove_reply (&amp;rsp, dict, frame);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Failed to delete snap");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_snapshot_remove_reply(&amp;rsp, dict, frame);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Failed to delete snap");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_STATUS:</div><div class='del'>-                ret = cli_snapshot_status (dict, &amp;rsp, frame);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to display "</div><div class='del'>-                                "snapshot status output.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_snapshot_status(dict, &amp;rsp, frame);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to display "</div><div class='add'>+                       "snapshot status output.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                cli_err ("Unknown command executed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            cli_err("Unknown command executed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_snapshot_for_delete (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                            void *data)</div><div class='del'>-{</div><div class='del'>-        gf_cli_req      req                     = {{0,}};</div><div class='del'>-        int32_t         ret                     = -1;</div><div class='del'>-        int32_t         cmd                     = -1;</div><div class='del'>-        cli_local_t     *local                  = NULL;</div><div class='del'>-        dict_t          *snap_dict              = NULL;</div><div class='del'>-        int32_t         snapcount               = 0;</div><div class='del'>-        int             i                       = 0;</div><div class='del'>-        char            question[PATH_MAX]      = "";</div><div class='del'>-        char            *volname                = NULL;</div><div class='del'>-        gf_answer_t     answer                  = GF_ANSWER_NO;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", frame,  out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", data, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get "</div><div class='del'>-                        "sub-cmd");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* No need multiple RPCs for individual snapshot delete*/</div><div class='del'>-        if (cmd == GF_SNAP_DELETE_TYPE_SNAP) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "snapcount",</div><div class='del'>-                              &amp;snapcount);</div><div class='add'>+gf_cli_snapshot_for_delete(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t cmd = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    dict_t *snap_dict = NULL;</div><div class='add'>+    int32_t snapcount = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char question[PATH_MAX] = "";</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    gf_answer_t answer = GF_ANSWER_NO;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", data, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get "</div><div class='add'>+               "sub-cmd");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* No need multiple RPCs for individual snapshot delete*/</div><div class='add'>+    if (cmd == GF_SNAP_DELETE_TYPE_SNAP) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "snapcount", &amp;snapcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not get "</div><div class='add'>+               "snapcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+#ifdef HAVE_LIB_XML</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"snapCount", "%d", snapcount);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not get "</div><div class='del'>-                        "snapcount");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to write "</div><div class='add'>+                   "xml element \"snapCount\"");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-#ifdef HAVE_LIB_XML</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                (xmlChar *)"snapCount",</div><div class='del'>-                                                "%d", snapcount);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to write "</div><div class='del'>-                                "xml element \"snapCount\"");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='del'>-        } else if (snapcount == 0) {</div><div class='del'>-                cli_out ("No snapshots present");</div><div class='del'>-                goto out;</div><div class='add'>+    } else if (snapcount == 0) {</div><div class='add'>+        cli_out("No snapshots present");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd == GF_SNAP_DELETE_TYPE_ALL) {</div><div class='add'>+        snprintf(question, sizeof(question),</div><div class='add'>+                 "System contains %d "</div><div class='add'>+                 "snapshot(s).\nDo you still "</div><div class='add'>+                 "want to continue and delete them? ",</div><div class='add'>+                 snapcount);</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_get_str(local-&gt;dict, "volname", &amp;volname);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to fetch "</div><div class='add'>+                   "volname from local dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (cmd == GF_SNAP_DELETE_TYPE_ALL) {</div><div class='del'>-                snprintf (question, sizeof (question), "System contains %d "</div><div class='del'>-                          "snapshot(s).\nDo you still "</div><div class='del'>-                          "want to continue and delete them? ",</div><div class='del'>-                           snapcount);</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_get_str (local-&gt;dict, "volname", &amp;volname);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to fetch "</div><div class='del'>-                                "volname from local dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        snprintf(question, sizeof(question),</div><div class='add'>+                 "Volume (%s) contains "</div><div class='add'>+                 "%d snapshot(s).\nDo you still want to "</div><div class='add'>+                 "continue and delete them? ",</div><div class='add'>+                 volname, snapcount);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                snprintf (question, sizeof (question), "Volume (%s) contains "</div><div class='del'>-                          "%d snapshot(s).\nDo you still want to "</div><div class='del'>-                           "continue and delete them? ", volname,</div><div class='del'>-                           snapcount);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        answer = cli_cmd_get_confirmation (global_state, question);</div><div class='del'>-        if (GF_ANSWER_NO == answer) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "User cancelled "</div><div class='del'>-                        "snapshot delete operation for snap delete");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    answer = cli_cmd_get_confirmation(global_state, question);</div><div class='add'>+    if (GF_ANSWER_NO == answer) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+               "User cancelled "</div><div class='add'>+               "snapshot delete operation for snap delete");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 1 ; i &lt;= snapcount ; i++) {</div><div class='del'>-                ret = -1;</div><div class='add'>+    for (i = 1; i &lt;= snapcount; i++) {</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-                snap_dict = dict_new();</div><div class='del'>-                if (!snap_dict)</div><div class='del'>-                        goto out;</div><div class='add'>+        snap_dict = dict_new();</div><div class='add'>+        if (!snap_dict)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = cli_populate_req_dict_for_delete (snap_dict,</div><div class='del'>-                                                       local-&gt;dict, i);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not "</div><div class='del'>-                                "populate snap request dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = cli_populate_req_dict_for_delete(snap_dict, local-&gt;dict, i);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not "</div><div class='add'>+                   "populate snap request dictionary");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = cli_to_glusterd (&amp;req, frame,</div><div class='del'>-                                gf_cli_snapshot_cbk,</div><div class='del'>-                                (xdrproc_t) xdr_gf_cli_req, snap_dict,</div><div class='del'>-                                GLUSTER_CLI_SNAP, this, cli_rpc_prog,</div><div class='del'>-                                NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        /* Fail the operation if deleting one of the</div><div class='del'>-                         * snapshots is failed</div><div class='del'>-                         */</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "cli_to_glusterd "</div><div class='del'>-                                "for snapshot delete failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                dict_unref (snap_dict);</div><div class='del'>-                snap_dict = NULL;</div><div class='add'>+        ret = cli_to_glusterd(&amp;req, frame, gf_cli_snapshot_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_gf_cli_req, snap_dict,</div><div class='add'>+                              GLUSTER_CLI_SNAP, this, cli_rpc_prog, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            /* Fail the operation if deleting one of the</div><div class='add'>+             * snapshots is failed</div><div class='add'>+             */</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "cli_to_glusterd "</div><div class='add'>+                   "for snapshot delete failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        dict_unref(snap_dict);</div><div class='add'>+        snap_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (snap_dict)</div><div class='del'>-                dict_unref (snap_dict);</div><div class='add'>+    if (snap_dict)</div><div class='add'>+        dict_unref(snap_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_snapshot_for_status (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                            void *data)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        gf_cli_req        req           = {{0,}};</div><div class='del'>-        int               ret           = -1;</div><div class='del'>-        int32_t           cmd           = -1;</div><div class='del'>-        cli_local_t      *local         = NULL;</div><div class='del'>-        dict_t           *snap_dict     = NULL;</div><div class='del'>-        int              snapcount      =  0;</div><div class='del'>-        int              i              =  0;</div><div class='add'>+gf_cli_snapshot_for_status(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t cmd = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    dict_t *snap_dict = NULL;</div><div class='add'>+    int snapcount = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", data, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get sub-cmd");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Snapshot status of single snap (i.e. GF_SNAP_STATUS_TYPE_SNAP)</div><div class='add'>+     * is already handled. Therefore we can return from here.</div><div class='add'>+     * If want to get status of all snaps in the system or volume then</div><div class='add'>+     * we should get them one by one.*/</div><div class='add'>+    if ((cmd == GF_SNAP_STATUS_TYPE_SNAP) ||</div><div class='add'>+        (cmd == GF_SNAP_STATUS_TYPE_ITER)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", data, out);</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "status.snapcount", &amp;snapcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not get snapcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (snapcount == 0 &amp;&amp; !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+        cli_out("No snapshots present");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get sub-cmd");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; snapcount; i++) {</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* Snapshot status of single snap (i.e. GF_SNAP_STATUS_TYPE_SNAP)</div><div class='del'>-         * is already handled. Therefore we can return from here.</div><div class='del'>-         * If want to get status of all snaps in the system or volume then</div><div class='del'>-         * we should get them one by one.*/</div><div class='del'>-        if ((cmd == GF_SNAP_STATUS_TYPE_SNAP) ||</div><div class='del'>-            (cmd == GF_SNAP_STATUS_TYPE_ITER)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        snap_dict = dict_new();</div><div class='add'>+        if (!snap_dict)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "status.snapcount", &amp;snapcount);</div><div class='add'>+        ret = cli_populate_req_dict_for_status(snap_dict, local-&gt;dict, i);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not get snapcount");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not "</div><div class='add'>+                   "populate snap request dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (snapcount == 0 &amp;&amp; !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                cli_out ("No snapshots present");</div><div class='del'>-        }</div><div class='add'>+        ret = cli_to_glusterd(&amp;req, frame, gf_cli_snapshot_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_gf_cli_req, snap_dict,</div><div class='add'>+                              GLUSTER_CLI_SNAP, this, cli_rpc_prog, NULL);</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; snapcount; i++) {</div><div class='del'>-                ret = -1;</div><div class='del'>-</div><div class='del'>-                snap_dict = dict_new();</div><div class='del'>-                if (!snap_dict)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = cli_populate_req_dict_for_status (snap_dict,</div><div class='del'>-                                local-&gt;dict, i);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not "</div><div class='del'>-                                        "populate snap request dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = cli_to_glusterd (&amp;req, frame,</div><div class='del'>-                                gf_cli_snapshot_cbk,</div><div class='del'>-                                (xdrproc_t) xdr_gf_cli_req, snap_dict,</div><div class='del'>-                                GLUSTER_CLI_SNAP, this, cli_rpc_prog,</div><div class='del'>-                                NULL);</div><div class='del'>-</div><div class='del'>-                /* Ignore the return value and error for snapshot</div><div class='del'>-                 * status of type "ALL" or "VOL"</div><div class='del'>-                 *</div><div class='del'>-                 * Scenario : There might be case where status command</div><div class='del'>-                 * and delete command might be issued at the same time.</div><div class='del'>-                 * In that case when status tried to fetch detail of</div><div class='del'>-                 * snap which has been deleted by concurrent command,</div><div class='del'>-                 * then it will show snapshot not present. Which will</div><div class='del'>-                 * not be appropriate.</div><div class='del'>-                 */</div><div class='del'>-                if (ret &amp;&amp;</div><div class='del'>-                    (cmd != GF_SNAP_STATUS_TYPE_ALL &amp;&amp;</div><div class='del'>-                     cmd != GF_SNAP_STATUS_TYPE_VOL)) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "cli_to_glusterd for snapshot status failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                dict_unref (snap_dict);</div><div class='del'>-                snap_dict = NULL;</div><div class='add'>+        /* Ignore the return value and error for snapshot</div><div class='add'>+         * status of type "ALL" or "VOL"</div><div class='add'>+         *</div><div class='add'>+         * Scenario : There might be case where status command</div><div class='add'>+         * and delete command might be issued at the same time.</div><div class='add'>+         * In that case when status tried to fetch detail of</div><div class='add'>+         * snap which has been deleted by concurrent command,</div><div class='add'>+         * then it will show snapshot not present. Which will</div><div class='add'>+         * not be appropriate.</div><div class='add'>+         */</div><div class='add'>+        if (ret &amp;&amp; (cmd != GF_SNAP_STATUS_TYPE_ALL &amp;&amp;</div><div class='add'>+                    cmd != GF_SNAP_STATUS_TYPE_VOL)) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "cli_to_glusterd for snapshot status failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        dict_unref(snap_dict);</div><div class='add'>+        snap_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (snap_dict)</div><div class='del'>-                dict_unref (snap_dict);</div><div class='add'>+    if (snap_dict)</div><div class='add'>+        dict_unref(snap_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_snapshot (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 void *data)</div><div class='del'>-{</div><div class='del'>-        gf_cli_req        req           = {{0,}};</div><div class='del'>-        dict_t           *options       = NULL;</div><div class='del'>-        int               ret           = -1;</div><div class='del'>-        int               tmp_ret       = -1;</div><div class='del'>-        cli_local_t      *local         = NULL;</div><div class='del'>-        char             *err_str       = NULL;</div><div class='del'>-        int              type           =  -1;</div><div class='del'>-</div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+gf_cli_snapshot(call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+{</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int tmp_ret = -1;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='add'>+    char *err_str = NULL;</div><div class='add'>+    int type = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = data;</div><div class='add'>+    if (!frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "type", &amp;type);</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_snapshot_begin_composite_op (local);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to begin "</div><div class='del'>-                                "snapshot xml composite op");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    options = data;</div><div class='ctx'> </div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "type", &amp;type);</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_snapshot_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, options,</div><div class='del'>-                               GLUSTER_CLI_SNAP, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_snapshot_begin_composite_op(local);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "cli_to_glusterd for "</div><div class='del'>-                        "snapshot failed");</div><div class='del'>-                goto xmlend;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to begin "</div><div class='add'>+                   "snapshot xml composite op");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_snapshot_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, options, GLUSTER_CLI_SNAP,</div><div class='add'>+                          this, cli_rpc_prog, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "cli_to_glusterd for "</div><div class='add'>+               "snapshot failed");</div><div class='add'>+        goto xmlend;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (GF_SNAP_OPTION_TYPE_STATUS == type) {</div><div class='add'>+        ret = gf_cli_snapshot_for_status(frame, this, data);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "cli to glusterd "</div><div class='add'>+                   "for snapshot status command failed");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (GF_SNAP_OPTION_TYPE_STATUS == type) {</div><div class='del'>-                ret = gf_cli_snapshot_for_status (frame, this, data);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "cli to glusterd "</div><div class='del'>-                                "for snapshot status command failed");</div><div class='del'>-                }</div><div class='add'>+        goto xmlend;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto xmlend;</div><div class='add'>+    if (GF_SNAP_OPTION_TYPE_DELETE == type) {</div><div class='add'>+        ret = gf_cli_snapshot_for_delete(frame, this, data);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "cli to glusterd "</div><div class='add'>+                   "for snapshot delete command failed");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (GF_SNAP_OPTION_TYPE_DELETE == type) {</div><div class='del'>-                ret = gf_cli_snapshot_for_delete (frame, this, data);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "cli to glusterd "</div><div class='del'>-                                "for snapshot delete command failed");</div><div class='del'>-                }</div><div class='add'>+        goto xmlend;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto xmlend;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> xmlend:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_snapshot_end_composite_op (local);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to end "</div><div class='del'>-                                "snapshot xml composite op");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        if (ret &amp;&amp; local &amp;&amp; GF_SNAP_OPTION_TYPE_STATUS == type) {</div><div class='del'>-                tmp_ret = dict_get_str (local-&gt;dict, "op_err_str", &amp;err_str);</div><div class='del'>-                if (tmp_ret || !err_str) {</div><div class='del'>-                        cli_err ("Snapshot Status : failed: %s", "Please "</div><div class='del'>-                                 "check log file for details");</div><div class='del'>-                } else {</div><div class='del'>-                        cli_err ("Snapshot Status : failed: %s", err_str);</div><div class='del'>-                        dict_del (local-&gt;dict, "op_err_str");</div><div class='del'>-                }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_snapshot_end_composite_op(local);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to end "</div><div class='add'>+                   "snapshot xml composite op");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    if (ret &amp;&amp; local &amp;&amp; GF_SNAP_OPTION_TYPE_STATUS == type) {</div><div class='add'>+        tmp_ret = dict_get_str(local-&gt;dict, "op_err_str", &amp;err_str);</div><div class='add'>+        if (tmp_ret || !err_str) {</div><div class='add'>+            cli_err("Snapshot Status : failed: %s",</div><div class='add'>+                    "Please "</div><div class='add'>+                    "check log file for details");</div><div class='add'>+        } else {</div><div class='add'>+            cli_err("Snapshot Status : failed: %s", err_str);</div><div class='add'>+            dict_del(local-&gt;dict, "op_err_str");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                /* XML mode handles its own error */</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        /* XML mode handles its own error */</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_barrier_volume_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                  int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp                      rsp = {0,};</div><div class='del'>-        int                             ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received response to barrier");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (rsp.op_errstr &amp;&amp; (strlen (rsp.op_errstr) &gt; 1)) {</div><div class='del'>-                        cli_err ("volume barrier: command unsuccessful : %s",</div><div class='del'>-                                 rsp.op_errstr);</div><div class='del'>-                } else {</div><div class='del'>-                        cli_err ("volume barrier: command unsuccessful");</div><div class='del'>-                }</div><div class='add'>+gf_cli_barrier_volume_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                          void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received response to barrier");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (rsp.op_errstr &amp;&amp; (strlen(rsp.op_errstr) &gt; 1)) {</div><div class='add'>+            cli_err("volume barrier: command unsuccessful : %s", rsp.op_errstr);</div><div class='ctx'>         } else {</div><div class='del'>-                cli_out ("volume barrier: command successful");</div><div class='add'>+            cli_err("volume barrier: command unsuccessful");</div><div class='ctx'>         }</div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    } else {</div><div class='add'>+        cli_out("volume barrier: command successful");</div><div class='add'>+    }</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_barrier_volume (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_barrier_volume(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req                      req = {{0,}};</div><div class='del'>-        dict_t                          *options = NULL;</div><div class='del'>-        int                             ret = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = data;</div><div class='add'>+    options = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_barrier_volume_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, options,</div><div class='del'>-                               GLUSTER_CLI_BARRIER_VOLUME, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_barrier_volume_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, options,</div><div class='add'>+                          GLUSTER_CLI_BARRIER_VOLUME, this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_get_vol_opt_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                        void *myframe)</div><div class='del'>-{</div><div class='del'>-        gf_cli_rsp   rsp  = {0,};</div><div class='del'>-        int          ret  = -1;</div><div class='del'>-        dict_t      *dict = NULL;</div><div class='del'>-        char        *key  = NULL;</div><div class='del'>-        char        *value = NULL;</div><div class='del'>-        char         msg[1024] = {0,};</div><div class='del'>-        int          i     = 0;</div><div class='del'>-        char         dict_key[50] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received response to get volume option");</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        snprintf (msg, sizeof (msg), "volume get option: "</div><div class='del'>-                                  "failed: %s", rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        snprintf (msg, sizeof (msg), "volume get option: "</div><div class='del'>-                                  "failed");</div><div class='del'>-</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                        ret = cli_xml_output_str ("volGetopts", msg, rsp.op_ret,</div><div class='del'>-                                          rsp.op_errno, rsp.op_errstr);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Error outputting to xml");</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        cli_err ("%s", msg);</div><div class='del'>-                }</div><div class='del'>-                ret = rsp.op_ret;</div><div class='del'>-                goto out_nolog;</div><div class='del'>-        }</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Failed rsp_dict unserialization");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_get_vol_opt_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                       void *myframe)</div><div class='add'>+{</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    char dict_key[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received response to get volume option");</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "volume get option: "</div><div class='add'>+                     "failed: %s",</div><div class='add'>+                     rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "volume get option: "</div><div class='add'>+                     "failed");</div><div class='ctx'> </div><div class='ctx'>         if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_getopts (dict, rsp.op_ret,</div><div class='del'>-                                                  rsp.op_errno,</div><div class='del'>-                                                  rsp.op_errstr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "xml output generation "</div><div class='del'>-                                "failed");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "warning", &amp;value);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                cli_out ("%s", value);</div><div class='add'>+            ret = cli_xml_output_str("volGetopts", msg, rsp.op_ret,</div><div class='add'>+                                     rsp.op_errno, rsp.op_errstr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            cli_err("%s", msg);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='add'>+        ret = rsp.op_ret;</div><div class='add'>+        goto out_nolog;</div><div class='add'>+    }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed rsp_dict unserialization");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_getopts(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                         rsp.op_errstr);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to retrieve count "</div><div class='del'>-                        "from the dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (count &lt;= 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Value of count :%d is "</div><div class='del'>-                        "invalid", count);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cli_out ("%-40s%-40s", "Option", "Value");</div><div class='del'>-        cli_out ("%-40s%-40s", "------", "-----");</div><div class='del'>-        for (i=1; i&lt;=count; i++) {</div><div class='del'>-                snprintf (dict_key, sizeof dict_key, "key%d", i);</div><div class='del'>-                ret = dict_get_str (dict, dict_key, &amp;key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to"</div><div class='del'>-                                " retrieve %s from the "</div><div class='del'>-                                "dictionary", dict_key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                snprintf (dict_key, sizeof dict_key, "value%d", i);</div><div class='del'>-                ret = dict_get_str (dict, dict_key, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to "</div><div class='del'>-                                "retrieve key value for %s from"</div><div class='del'>-                                "the dictionary", dict_key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                cli_out ("%-40s%-40s", key, value);</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "xml output generation "</div><div class='add'>+                   "failed");</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "warning", &amp;value);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        cli_out("%s", value);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to retrieve count "</div><div class='add'>+               "from the dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (count &lt;= 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Value of count :%d is "</div><div class='add'>+               "invalid",</div><div class='add'>+               count);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cli_out("%-40s%-40s", "Option", "Value");</div><div class='add'>+    cli_out("%-40s%-40s", "------", "-----");</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        snprintf(dict_key, sizeof dict_key, "key%d", i);</div><div class='add'>+        ret = dict_get_str(dict, dict_key, &amp;key);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to"</div><div class='add'>+                   " retrieve %s from the "</div><div class='add'>+                   "dictionary",</div><div class='add'>+                   dict_key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        snprintf(dict_key, sizeof dict_key, "value%d", i);</div><div class='add'>+        ret = dict_get_str(dict, dict_key, &amp;value);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "retrieve key value for %s from"</div><div class='add'>+                   "the dictionary",</div><div class='add'>+                   dict_key);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        cli_out("%-40s%-40s", key, value);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                cli_out ("volume get option failed. Check the cli/glusterd log "</div><div class='del'>-                         "file for more details");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "volume get option failed. Check the cli/glusterd log "</div><div class='add'>+            "file for more details");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out_nolog:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_get_vol_opt (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_get_vol_opt(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req  req     = {{0,}};</div><div class='del'>-        dict_t     *options = NULL;</div><div class='del'>-        int         ret     = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = data;</div><div class='add'>+    options = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_get_vol_opt_cbk,</div><div class='del'>-                               (xdrproc_t)xdr_gf_cli_req, options,</div><div class='del'>-                               GLUSTER_CLI_GET_VOL_OPT, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_get_vol_opt_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, options,</div><div class='add'>+                          GLUSTER_CLI_GET_VOL_OPT, this, cli_rpc_prog, NULL);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-add_cli_cmd_timeout_to_dict (dict_t *dict)</div><div class='add'>+add_cli_cmd_timeout_to_dict(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int      ret     = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (cli_default_conn_timeout &gt; 120) {</div><div class='del'>-                ret = dict_set_uint32 (dict, "timeout", cli_default_conn_timeout);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO, "Failed to save"</div><div class='del'>-                                "timeout to dict");</div><div class='del'>-                }</div><div class='add'>+    if (cli_default_conn_timeout &gt; 120) {</div><div class='add'>+        ret = dict_set_uint32(dict, "timeout", cli_default_conn_timeout);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_INFO,</div><div class='add'>+                   "Failed to save"</div><div class='add'>+                   "timeout to dict");</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_to_glusterd (gf_cli_req *req, call_frame_t *frame,</div><div class='del'>-                 fop_cbk_fn_t cbkfn, xdrproc_t xdrproc, dict_t *dict,</div><div class='del'>-                 int procnum, xlator_t *this, rpc_clnt_prog_t *prog,</div><div class='del'>-                 struct iobref *iobref)</div><div class='del'>-{</div><div class='del'>-        int                ret = 0;</div><div class='del'>-        size_t             len = 0;</div><div class='del'>-        char               *cmd = NULL;</div><div class='del'>-        int                i = 0;</div><div class='del'>-        const char         **words = NULL;</div><div class='del'>-        cli_local_t        *local = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+cli_to_glusterd(gf_cli_req *req, call_frame_t *frame, fop_cbk_fn_t cbkfn,</div><div class='add'>+                xdrproc_t xdrproc, dict_t *dict, int procnum, xlator_t *this,</div><div class='add'>+                rpc_clnt_prog_t *prog, struct iobref *iobref)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    char *cmd = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    const char **words = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame-&gt;local) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (!frame-&gt;local) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;words) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        words = local-&gt;words;</div><div class='add'>+    if (!local-&gt;words) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (words[i])</div><div class='del'>-                len += strlen (words[i++]) + 1;</div><div class='add'>+    words = local-&gt;words;</div><div class='ctx'> </div><div class='del'>-        cmd = GF_CALLOC (1, len, gf_common_mt_char);</div><div class='add'>+    while (words[i])</div><div class='add'>+        len += strlen(words[i++]) + 1;</div><div class='ctx'> </div><div class='del'>-        if (!cmd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    cmd = GF_CALLOC(1, len, gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; words[i]; i++) {</div><div class='del'>-                strncat (cmd, words[i], len - 1);</div><div class='del'>-                if (words[i+1] != NULL)</div><div class='del'>-                        strncat (cmd, " ", len - 1);</div><div class='del'>-        }</div><div class='add'>+    if (!cmd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cmd [len - 1] = '\0';</div><div class='add'>+    for (i = 0; words[i]; i++) {</div><div class='add'>+        strncat(cmd, words[i], len - 1);</div><div class='add'>+        if (words[i + 1] != NULL)</div><div class='add'>+            strncat(cmd, " ", len - 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (dict, "cmd-str", cmd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    cmd[len - 1] = '\0';</div><div class='ctx'> </div><div class='del'>-        ret = add_cli_cmd_timeout_to_dict (dict);</div><div class='add'>+    ret = dict_set_dynstr(dict, "cmd-str", cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;(req-&gt;dict).dict_val,</div><div class='del'>-                                           &amp;(req-&gt;dict).dict_len);</div><div class='add'>+    ret = add_cli_cmd_timeout_to_dict(dict);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "failed to get serialized length of dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;(req-&gt;dict).dict_val,</div><div class='add'>+                                      &amp;(req-&gt;dict).dict_len);</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_submit (NULL, req, frame, prog, procnum, iobref, this,</div><div class='del'>-                              cbkfn, (xdrproc_t) xdrproc);</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "failed to get serialized length of dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = cli_cmd_submit(NULL, req, frame, prog, procnum, iobref, this, cbkfn,</div><div class='add'>+                         (xdrproc_t)xdrproc);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_print_bitrot_scrub_status (dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        int            i                = 1;</div><div class='del'>-        int            j                = 0;</div><div class='del'>-        int            ret              = -1;</div><div class='del'>-        int            count            = 0;</div><div class='del'>-        char           key[256]         = {0,};</div><div class='del'>-        char           *volname         = NULL;</div><div class='del'>-        char           *node_name       = NULL;</div><div class='del'>-        char           *scrub_freq      = NULL;</div><div class='del'>-        char           *state_scrub     = NULL;</div><div class='del'>-        char           *scrub_impact    = NULL;</div><div class='del'>-        char           *bad_file_str    = NULL;</div><div class='del'>-        char           *scrub_log_file  = NULL;</div><div class='del'>-        char           *bitrot_log_file = NULL;</div><div class='del'>-        uint64_t       scrub_files      = 0;</div><div class='del'>-        uint64_t       unsigned_files   = 0;</div><div class='del'>-        uint64_t       scrub_time       = 0;</div><div class='del'>-        uint64_t       days             = 0;</div><div class='del'>-        uint64_t       hours            = 0;</div><div class='del'>-        uint64_t       minutes          = 0;</div><div class='del'>-        uint64_t       seconds          = 0;</div><div class='del'>-        char          *last_scrub       = NULL;</div><div class='del'>-        uint64_t       error_count      = 0;</div><div class='del'>-        int8_t         scrub_running    = 0;</div><div class='del'>-        char          *scrub_state_op   = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='add'>+gf_cli_print_bitrot_scrub_status(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int i = 1;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *node_name = NULL;</div><div class='add'>+    char *scrub_freq = NULL;</div><div class='add'>+    char *state_scrub = NULL;</div><div class='add'>+    char *scrub_impact = NULL;</div><div class='add'>+    char *bad_file_str = NULL;</div><div class='add'>+    char *scrub_log_file = NULL;</div><div class='add'>+    char *bitrot_log_file = NULL;</div><div class='add'>+    uint64_t scrub_files = 0;</div><div class='add'>+    uint64_t unsigned_files = 0;</div><div class='add'>+    uint64_t scrub_time = 0;</div><div class='add'>+    uint64_t days = 0;</div><div class='add'>+    uint64_t hours = 0;</div><div class='add'>+    uint64_t minutes = 0;</div><div class='add'>+    uint64_t seconds = 0;</div><div class='add'>+    char *last_scrub = NULL;</div><div class='add'>+    uint64_t error_count = 0;</div><div class='add'>+    int8_t scrub_running = 0;</div><div class='add'>+    char *scrub_state_op = NULL;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "failed to get volume name");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "features.scrub", &amp;state_scrub);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "failed to get scrub state value");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "features.scrub-throttle", &amp;scrub_impact);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+               "failed to get scrub impact "</div><div class='add'>+               "value");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "features.scrub-freq", &amp;scrub_freq);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "failed to get scrub -freq value");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "bitrot_log_file", &amp;bitrot_log_file);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+               "failed to get bitrot log file "</div><div class='add'>+               "location");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "scrub_log_file", &amp;scrub_log_file);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+               "failed to get scrubber log file "</div><div class='add'>+               "location");</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "count not get count value from"</div><div class='add'>+               " dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        snprintf(key, 256, "scrub-running-%d", i);</div><div class='add'>+        ret = dict_get_int8(dict, key, &amp;scrub_running);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get volume name");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "features.scrub", &amp;state_scrub);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get scrub state value");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "features.scrub-throttle", &amp;scrub_impact);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get scrub impact "</div><div class='del'>-                        "value");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "features.scrub-freq", &amp;scrub_freq);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get scrub -freq value");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "bitrot_log_file", &amp;bitrot_log_file);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get bitrot log file "</div><div class='del'>-                        "location");</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "scrub_log_file", &amp;scrub_log_file);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get scrubber log file "</div><div class='del'>-                        "location");</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "failed to get scrubbed "</div><div class='add'>+                   "files");</div><div class='add'>+        if (scrub_running)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "count not get count value from"</div><div class='del'>-                        " dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (scrub_running)</div><div class='add'>+        gf_asprintf(&amp;scrub_state_op, "%s (In Progress)", state_scrub);</div><div class='add'>+    else</div><div class='add'>+        gf_asprintf(&amp;scrub_state_op, "%s (Idle)", state_scrub);</div><div class='ctx'> </div><div class='del'>-        for (i = 1; i &lt;= count; i++) {</div><div class='del'>-                snprintf (key, 256, "scrub-running-%d", i);</div><div class='del'>-                ret = dict_get_int8 (dict, key, &amp;scrub_running);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get scrubbed "</div><div class='del'>-                                "files");</div><div class='del'>-                if (scrub_running)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    cli_out("\n%s: %s\n", "Volume name ", volname);</div><div class='ctx'> </div><div class='del'>-        if (scrub_running)</div><div class='del'>-                gf_asprintf (&amp;scrub_state_op, "%s (In Progress)", state_scrub);</div><div class='del'>-        else</div><div class='del'>-                gf_asprintf (&amp;scrub_state_op, "%s (Idle)", state_scrub);</div><div class='add'>+    cli_out("%s: %s\n", "State of scrub", scrub_state_op);</div><div class='ctx'> </div><div class='del'>-        cli_out ("\n%s: %s\n", "Volume name ", volname);</div><div class='add'>+    cli_out("%s: %s\n", "Scrub impact", scrub_impact);</div><div class='ctx'> </div><div class='del'>-        cli_out ("%s: %s\n", "State of scrub", scrub_state_op);</div><div class='add'>+    cli_out("%s: %s\n", "Scrub frequency", scrub_freq);</div><div class='ctx'> </div><div class='del'>-        cli_out ("%s: %s\n", "Scrub impact", scrub_impact);</div><div class='add'>+    cli_out("%s: %s\n", "Bitrot error log location", bitrot_log_file);</div><div class='ctx'> </div><div class='del'>-        cli_out ("%s: %s\n", "Scrub frequency", scrub_freq);</div><div class='add'>+    cli_out("%s: %s\n", "Scrubber error log location", scrub_log_file);</div><div class='ctx'> </div><div class='del'>-        cli_out ("%s: %s\n", "Bitrot error log location", bitrot_log_file);</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        /* Reset the variables to prevent carryover of values */</div><div class='add'>+        node_name = NULL;</div><div class='add'>+        last_scrub = NULL;</div><div class='add'>+        scrub_time = 0;</div><div class='add'>+        days = 0;</div><div class='add'>+        hours = 0;</div><div class='add'>+        minutes = 0;</div><div class='add'>+        seconds = 0;</div><div class='add'>+        error_count = 0;</div><div class='add'>+        scrub_files = 0;</div><div class='add'>+        unsigned_files = 0;</div><div class='ctx'> </div><div class='del'>-        cli_out ("%s: %s\n", "Scrubber error log location", scrub_log_file);</div><div class='add'>+        snprintf(key, 256, "node-name-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;node_name);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE, "failed to get node-name");</div><div class='ctx'> </div><div class='add'>+        snprintf(key, 256, "scrubbed-files-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;scrub_files);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "failed to get scrubbed "</div><div class='add'>+                   "files");</div><div class='ctx'> </div><div class='del'>-        for (i = 1; i &lt;= count; i++) {</div><div class='del'>-                /* Reset the variables to prevent carryover of values */</div><div class='del'>-                node_name       = NULL;</div><div class='del'>-                last_scrub      = NULL;</div><div class='del'>-                scrub_time      = 0;</div><div class='del'>-                days            = 0;</div><div class='del'>-                hours           = 0;</div><div class='del'>-                minutes         = 0;</div><div class='del'>-                seconds         = 0;</div><div class='del'>-                error_count     = 0;</div><div class='del'>-                scrub_files     = 0;</div><div class='del'>-                unsigned_files  = 0;</div><div class='add'>+        snprintf(key, 256, "unsigned-files-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;unsigned_files);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "failed to get unsigned "</div><div class='add'>+                   "files");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "node-name-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;node_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get node-name");</div><div class='add'>+        snprintf(key, 256, "scrub-duration-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;scrub_time);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "failed to get last scrub "</div><div class='add'>+                   "duration");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "scrubbed-files-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;scrub_files);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get scrubbed "</div><div class='del'>-                                "files");</div><div class='add'>+        snprintf(key, 256, "last-scrub-time-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;last_scrub);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "failed to get last scrub"</div><div class='add'>+                   " time");</div><div class='add'>+        snprintf(key, 256, "error-count-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;error_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_TRACE,</div><div class='add'>+                   "failed to get error "</div><div class='add'>+                   "count");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "unsigned-files-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;unsigned_files);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get unsigned "</div><div class='del'>-                                "files");</div><div class='add'>+        cli_out("\n%s\n",</div><div class='add'>+                "=========================================="</div><div class='add'>+                "===============");</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "scrub-duration-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;scrub_time);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get last scrub "</div><div class='del'>-                                "duration");</div><div class='add'>+        cli_out("%s: %s\n", "Node", node_name);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, 256, "last-scrub-time-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;last_scrub);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get last scrub"</div><div class='del'>-                                " time");</div><div class='del'>-                snprintf (key, 256, "error-count-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;error_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_TRACE, "failed to get error "</div><div class='del'>-                                "count");</div><div class='add'>+        cli_out("%s: %" PRIu64 "\n", "Number of Scrubbed files", scrub_files);</div><div class='ctx'> </div><div class='del'>-                cli_out ("\n%s\n", "=========================================="</div><div class='del'>-                         "===============");</div><div class='add'>+        cli_out("%s: %" PRIu64 "\n", "Number of Skipped files", unsigned_files);</div><div class='ctx'> </div><div class='del'>-                cli_out ("%s: %s\n", "Node", node_name);</div><div class='add'>+        if ((!last_scrub) || !strcmp(last_scrub, ""))</div><div class='add'>+            cli_out("%s: %s\n", "Last completed scrub time",</div><div class='add'>+                    "Scrubber pending to complete.");</div><div class='add'>+        else</div><div class='add'>+            cli_out("%s: %s\n", "Last completed scrub time", last_scrub);</div><div class='ctx'> </div><div class='del'>-                cli_out ("%s: %"PRIu64 "\n", "Number of Scrubbed files",</div><div class='del'>-                          scrub_files);</div><div class='add'>+        /* Printing last scrub duration time in human readable form*/</div><div class='add'>+        seconds = scrub_time % 60;</div><div class='add'>+        minutes = (scrub_time / 60) % 60;</div><div class='add'>+        hours = (scrub_time / 3600) % 24;</div><div class='add'>+        days = scrub_time / 86400;</div><div class='add'>+        cli_out("%s: %" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 "\n",</div><div class='add'>+                "Duration of last scrub (D:M:H:M:S)", days, hours, minutes,</div><div class='add'>+                seconds);</div><div class='ctx'> </div><div class='del'>-                cli_out ("%s: %"PRIu64 "\n", "Number of Skipped files",</div><div class='del'>-                          unsigned_files);</div><div class='add'>+        cli_out("%s: %" PRIu64 "\n", "Error count", error_count);</div><div class='ctx'> </div><div class='del'>-                if ((!last_scrub) || !strcmp (last_scrub, ""))</div><div class='del'>-                        cli_out ("%s: %s\n", "Last completed scrub time",</div><div class='del'>-                                 "Scrubber pending to complete.");</div><div class='del'>-                else</div><div class='del'>-                        cli_out ("%s: %s\n", "Last completed scrub time",</div><div class='del'>-                                 last_scrub);</div><div class='del'>-</div><div class='del'>-                /* Printing last scrub duration time in human readable form*/</div><div class='del'>-                seconds    = scrub_time%60;</div><div class='del'>-                minutes    = (scrub_time/60)%60;</div><div class='del'>-                hours      = (scrub_time/3600)%24;</div><div class='del'>-                days       = scrub_time/86400;</div><div class='del'>-                cli_out ("%s: %"PRIu64 ":%"PRIu64 ":%"PRIu64 ":%"PRIu64 "\n",</div><div class='del'>-                         "Duration of last scrub (D:M:H:M:S)",</div><div class='del'>-                         days, hours, minutes, seconds);</div><div class='del'>-</div><div class='del'>-                cli_out ("%s: %"PRIu64 "\n", "Error count", error_count);</div><div class='del'>-</div><div class='del'>-                if (error_count) {</div><div class='del'>-                        cli_out ("%s:\n", "Corrupted object's [GFID]");</div><div class='del'>-                        /* Printing list of bad file's (Corrupted object's)*/</div><div class='del'>-                        for (j = 0; j &lt; error_count; j++) {</div><div class='del'>-                                snprintf (key, 256, "quarantine-%d-%d", j, i);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;bad_file_str);</div><div class='del'>-                                if (!ret) {</div><div class='del'>-                                        cli_out ("%s\n", bad_file_str);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        if (error_count) {</div><div class='add'>+            cli_out("%s:\n", "Corrupted object's [GFID]");</div><div class='add'>+            /* Printing list of bad file's (Corrupted object's)*/</div><div class='add'>+            for (j = 0; j &lt; error_count; j++) {</div><div class='add'>+                snprintf(key, 256, "quarantine-%d-%d", j, i);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;bad_file_str);</div><div class='add'>+                if (!ret) {</div><div class='add'>+                    cli_out("%s\n", bad_file_str);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        cli_out ("%s\n", "=========================================="</div><div class='del'>-                 "===============");</div><div class='add'>+    }</div><div class='add'>+    cli_out("%s\n",</div><div class='add'>+            "=========================================="</div><div class='add'>+            "===============");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (scrub_state_op);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(scrub_state_op);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cli_bitrot_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                   int count, void *myframe)</div><div class='del'>-{</div><div class='del'>-        int                  ret                       = -1;</div><div class='del'>-        int                  type                      = 0;</div><div class='del'>-        gf_cli_rsp           rsp                       = {0, };</div><div class='del'>-        dict_t               *dict                     = NULL;</div><div class='del'>-        char                 *scrub_cmd                = NULL;</div><div class='del'>-        char                 *volname                  = NULL;</div><div class='del'>-        char                 *cmd_str                  = NULL;</div><div class='del'>-        char                 *cmd_op                   = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (myframe);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;rpc_status == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (((call_frame_t *) myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to decode xdr response");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rsp.op_ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='del'>-                        goto xml_output;</div><div class='del'>-</div><div class='del'>-                if (strcmp (rsp.op_errstr, ""))</div><div class='del'>-                        cli_err ("Bitrot command failed : %s", rsp.op_errstr);</div><div class='del'>-                else</div><div class='del'>-                        cli_err ("Bitrot command : failed");</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_cli_bitrot_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                  void *myframe)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int type = 0;</div><div class='add'>+    gf_cli_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *scrub_cmd = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *cmd_str = NULL;</div><div class='add'>+    char *cmd_op = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(myframe);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;rpc_status == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_cli_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(((call_frame_t *)myframe)-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to decode xdr response");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rsp.op_ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML)</div><div class='add'>+            goto xml_output;</div><div class='ctx'> </div><div class='del'>-        if (rsp.dict.dict_len) {</div><div class='del'>-                /* Unserialize the dictionary */</div><div class='del'>-                dict = dict_new ();</div><div class='add'>+        if (strcmp(rsp.op_errstr, ""))</div><div class='add'>+            cli_err("Bitrot command failed : %s", rsp.op_errstr);</div><div class='add'>+        else</div><div class='add'>+            cli_err("Bitrot command : failed");</div><div class='ctx'> </div><div class='del'>-                if (!dict) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dict_unserialize (rsp.dict.dict_val,</div><div class='del'>-                                        rsp.dict.dict_len,</div><div class='del'>-                                        &amp;dict);</div><div class='add'>+    if (rsp.dict.dict_len) {</div><div class='add'>+        /* Unserialize the dictionary */</div><div class='add'>+        dict = dict_new();</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "failed to unserialize "</div><div class='del'>-                                "req-buffer to dictionary");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!dict) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Received resp to bit rot command");</div><div class='add'>+        ret = dict_unserialize(rsp.dict.dict_val, rsp.dict.dict_len, &amp;dict);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get command type");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "failed to unserialize "</div><div class='add'>+                   "req-buffer to dictionary");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Ignoring the error, as using dict val for cli output only */</div><div class='del'>-        ret = dict_get_str (dict, "scrub-value", &amp;scrub_cmd);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "Failed to get scrub command");</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Received resp to bit rot command");</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get volume name");</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get command type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "cmd-str", &amp;cmd_str);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_TRACE, "failed to get command string");</div><div class='add'>+    /* Ignoring the error, as using dict val for cli output only */</div><div class='add'>+    ret = dict_get_str(dict, "scrub-value", &amp;scrub_cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "Failed to get scrub command");</div><div class='ctx'> </div><div class='del'>-        if (cmd_str)</div><div class='del'>-                cmd_op = strrchr(cmd_str, ' ') + 1;</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "failed to get volume name");</div><div class='ctx'> </div><div class='del'>-        if ((type == GF_BITROT_CMD_SCRUB_STATUS) &amp;&amp;</div><div class='del'>-             !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='del'>-                ret = gf_cli_print_bitrot_scrub_status (dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to print bitrot "</div><div class='del'>-                                "scrub status");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(dict, "cmd-str", &amp;cmd_str);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_TRACE, "failed to get command string");</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='del'>-        case  GF_BITROT_OPTION_TYPE_ENABLE:</div><div class='del'>-                cli_out("volume bitrot: success bitrot enabled "</div><div class='del'>-                        "for volume %s", volname);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    if (cmd_str)</div><div class='add'>+        cmd_op = strrchr(cmd_str, ' ') + 1;</div><div class='add'>+</div><div class='add'>+    if ((type == GF_BITROT_CMD_SCRUB_STATUS) &amp;&amp;</div><div class='add'>+        !(global_state-&gt;mode &amp; GLUSTER_MODE_XML)) {</div><div class='add'>+        ret = gf_cli_print_bitrot_scrub_status(dict);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to print bitrot "</div><div class='add'>+                   "scrub status");</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (type) {</div><div class='add'>+        case GF_BITROT_OPTION_TYPE_ENABLE:</div><div class='add'>+            cli_out(</div><div class='add'>+                "volume bitrot: success bitrot enabled "</div><div class='add'>+                "for volume %s",</div><div class='add'>+                volname);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_BITROT_OPTION_TYPE_DISABLE:</div><div class='del'>-                cli_out("volume bitrot: success bitrot disabled "</div><div class='del'>-                        "for volume %s", volname);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            cli_out(</div><div class='add'>+                "volume bitrot: success bitrot disabled "</div><div class='add'>+                "for volume %s",</div><div class='add'>+                volname);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_BITROT_CMD_SCRUB_ONDEMAND:</div><div class='del'>-                cli_out("volume bitrot: scrubber started ondemand "</div><div class='del'>-                        "for volume %s", volname);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            cli_out(</div><div class='add'>+                "volume bitrot: scrubber started ondemand "</div><div class='add'>+                "for volume %s",</div><div class='add'>+                volname);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_BITROT_OPTION_TYPE_SCRUB:</div><div class='del'>-                if (!strncmp ("pause", scrub_cmd, sizeof ("pause")))</div><div class='del'>-                        cli_out("volume bitrot: scrubber paused "</div><div class='del'>-                                "for volume %s", volname);</div><div class='del'>-                if (!strncmp ("resume", scrub_cmd, sizeof ("resume")))</div><div class='del'>-                        cli_out("volume bitrot: scrubber resumed "</div><div class='del'>-                                "for volume %s", volname);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            if (!strncmp("pause", scrub_cmd, sizeof("pause")))</div><div class='add'>+                cli_out(</div><div class='add'>+                    "volume bitrot: scrubber paused "</div><div class='add'>+                    "for volume %s",</div><div class='add'>+                    volname);</div><div class='add'>+            if (!strncmp("resume", scrub_cmd, sizeof("resume")))</div><div class='add'>+                cli_out(</div><div class='add'>+                    "volume bitrot: scrubber resumed "</div><div class='add'>+                    "for volume %s",</div><div class='add'>+                    volname);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_BITROT_OPTION_TYPE_SCRUB_FREQ:</div><div class='del'>-                cli_out("volume bitrot: scrub-frequency is set to %s "</div><div class='del'>-                        "successfully for volume %s", cmd_op, volname);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            cli_out(</div><div class='add'>+                "volume bitrot: scrub-frequency is set to %s "</div><div class='add'>+                "successfully for volume %s",</div><div class='add'>+                cmd_op, volname);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE:</div><div class='del'>-                cli_out("volume bitrot: scrub-throttle is set to %s "</div><div class='del'>-                        "successfully for volume %s", cmd_op, volname);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            cli_out(</div><div class='add'>+                "volume bitrot: scrub-throttle is set to %s "</div><div class='add'>+                "successfully for volume %s",</div><div class='add'>+                cmd_op, volname);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> xml_output:</div><div class='del'>-        if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='del'>-                ret = cli_xml_output_vol_profile (dict, rsp.op_ret,</div><div class='del'>-                                                  rsp.op_errno,</div><div class='del'>-                                                  rsp.op_errstr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Error outputting to xml");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (global_state-&gt;mode &amp; GLUSTER_MODE_XML) {</div><div class='add'>+        ret = cli_xml_output_vol_profile(dict, rsp.op_ret, rsp.op_errno,</div><div class='add'>+                                         rsp.op_errstr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Error outputting to xml");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rsp.op_ret)</div><div class='del'>-                cli_out ("volume bitrot: success");</div><div class='add'>+    if (!rsp.op_ret)</div><div class='add'>+        cli_out("volume bitrot: success");</div><div class='ctx'> </div><div class='del'>-        ret = rsp.op_ret;</div><div class='add'>+    ret = rsp.op_ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-            dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        free (rsp.dict.dict_val);</div><div class='del'>-        free (rsp.op_errstr);</div><div class='add'>+    free(rsp.dict.dict_val);</div><div class='add'>+    free(rsp.op_errstr);</div><div class='ctx'> </div><div class='del'>-        cli_cmd_broadcast_response (ret);</div><div class='add'>+    cli_cmd_broadcast_response(ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_cli_bitrot (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_cli_bitrot(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_cli_req        req           = { {0,} };</div><div class='del'>-        dict_t           *options       = NULL;</div><div class='del'>-        int               ret           = -1;</div><div class='add'>+    gf_cli_req req = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !this || !data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !this || !data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        options = data;</div><div class='add'>+    options = data;</div><div class='ctx'> </div><div class='del'>-        ret = cli_to_glusterd (&amp;req, frame, gf_cli_bitrot_cbk,</div><div class='del'>-                               (xdrproc_t) xdr_gf_cli_req, options,</div><div class='del'>-                               GLUSTER_CLI_BITROT, this, cli_rpc_prog,</div><div class='del'>-                               NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "cli_to_glusterd for "</div><div class='del'>-                        "bitrot failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_to_glusterd(&amp;req, frame, gf_cli_bitrot_cbk,</div><div class='add'>+                          (xdrproc_t)xdr_gf_cli_req, options,</div><div class='add'>+                          GLUSTER_CLI_BITROT, this, cli_rpc_prog, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "cli_to_glusterd for "</div><div class='add'>+               "bitrot failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_procedure gluster_cli_actors[GLUSTER_CLI_MAXVALUE] = {</div><div class='del'>-        [GLUSTER_CLI_NULL]             = {"NULL", NULL },</div><div class='del'>-        [GLUSTER_CLI_PROBE]            = {"PROBE_QUERY", gf_cli_probe},</div><div class='del'>-        [GLUSTER_CLI_DEPROBE]          = {"DEPROBE_QUERY", gf_cli_deprobe},</div><div class='del'>-        [GLUSTER_CLI_LIST_FRIENDS]     = {"LIST_FRIENDS", gf_cli_list_friends},</div><div class='del'>-        [GLUSTER_CLI_UUID_RESET]       = {"UUID_RESET", gf_cli3_1_uuid_reset},</div><div class='del'>-        [GLUSTER_CLI_UUID_GET]         = {"UUID_GET", gf_cli3_1_uuid_get},</div><div class='del'>-        [GLUSTER_CLI_CREATE_VOLUME]    = {"CREATE_VOLUME", gf_cli_create_volume},</div><div class='del'>-        [GLUSTER_CLI_DELETE_VOLUME]    = {"DELETE_VOLUME", gf_cli_delete_volume},</div><div class='del'>-        [GLUSTER_CLI_START_VOLUME]     = {"START_VOLUME", gf_cli_start_volume},</div><div class='del'>-        [GLUSTER_CLI_STOP_VOLUME]      = {"STOP_VOLUME", gf_cli_stop_volume},</div><div class='del'>-        [GLUSTER_CLI_RENAME_VOLUME]    = {"RENAME_VOLUME", gf_cli_rename_volume},</div><div class='del'>-        [GLUSTER_CLI_DEFRAG_VOLUME]    = {"DEFRAG_VOLUME", gf_cli_defrag_volume},</div><div class='del'>-        [GLUSTER_CLI_GET_VOLUME]       = {"GET_VOLUME", gf_cli_get_volume},</div><div class='del'>-        [GLUSTER_CLI_GET_NEXT_VOLUME]  = {"GET_NEXT_VOLUME", gf_cli_get_next_volume},</div><div class='del'>-        [GLUSTER_CLI_SET_VOLUME]       = {"SET_VOLUME", gf_cli_set_volume},</div><div class='del'>-        [GLUSTER_CLI_ADD_BRICK]        = {"ADD_BRICK", gf_cli_add_brick},</div><div class='del'>-        [GLUSTER_CLI_REMOVE_BRICK]     = {"REMOVE_BRICK", gf_cli_remove_brick},</div><div class='del'>-        [GLUSTER_CLI_REPLACE_BRICK]    = {"REPLACE_BRICK", gf_cli_replace_brick},</div><div class='del'>-        [GLUSTER_CLI_LOG_ROTATE]       = {"LOG ROTATE", gf_cli_log_rotate},</div><div class='del'>-        [GLUSTER_CLI_GETSPEC]          = {"GETSPEC", gf_cli_getspec},</div><div class='del'>-        [GLUSTER_CLI_PMAP_PORTBYBRICK] = {"PMAP PORTBYBRICK", gf_cli_pmap_b2p},</div><div class='del'>-        [GLUSTER_CLI_SYNC_VOLUME]      = {"SYNC_VOLUME", gf_cli_sync_volume},</div><div class='del'>-        [GLUSTER_CLI_RESET_VOLUME]     = {"RESET_VOLUME", gf_cli_reset_volume},</div><div class='del'>-        [GLUSTER_CLI_FSM_LOG]          = {"FSM_LOG", gf_cli_fsm_log},</div><div class='del'>-        [GLUSTER_CLI_GSYNC_SET]        = {"GSYNC_SET", gf_cli_gsync_set},</div><div class='del'>-        [GLUSTER_CLI_PROFILE_VOLUME]   = {"PROFILE_VOLUME", gf_cli_profile_volume},</div><div class='del'>-        [GLUSTER_CLI_QUOTA]            = {"QUOTA", gf_cli_quota},</div><div class='del'>-        [GLUSTER_CLI_TOP_VOLUME]       = {"TOP_VOLUME", gf_cli_top_volume},</div><div class='del'>-        [GLUSTER_CLI_GETWD]            = {"GETWD", gf_cli_getwd},</div><div class='del'>-        [GLUSTER_CLI_STATUS_VOLUME]    = {"STATUS_VOLUME", gf_cli_status_volume},</div><div class='del'>-        [GLUSTER_CLI_STATUS_ALL]       = {"STATUS_ALL", gf_cli_status_volume_all},</div><div class='del'>-        [GLUSTER_CLI_MOUNT]            = {"MOUNT", gf_cli_mount},</div><div class='del'>-        [GLUSTER_CLI_UMOUNT]           = {"UMOUNT", gf_cli_umount},</div><div class='del'>-        [GLUSTER_CLI_HEAL_VOLUME]      = {"HEAL_VOLUME", gf_cli_heal_volume},</div><div class='del'>-        [GLUSTER_CLI_STATEDUMP_VOLUME] = {"STATEDUMP_VOLUME", gf_cli_statedump_volume},</div><div class='del'>-        [GLUSTER_CLI_LIST_VOLUME]      = {"LIST_VOLUME", gf_cli_list_volume},</div><div class='del'>-        [GLUSTER_CLI_CLRLOCKS_VOLUME]  = {"CLEARLOCKS_VOLUME", gf_cli_clearlocks_volume},</div><div class='del'>-        [GLUSTER_CLI_COPY_FILE]        = {"COPY_FILE", gf_cli_copy_file},</div><div class='del'>-        [GLUSTER_CLI_SYS_EXEC]         = {"SYS_EXEC", gf_cli_sys_exec},</div><div class='del'>-        [GLUSTER_CLI_SNAP]             = {"SNAP", gf_cli_snapshot},</div><div class='del'>-        [GLUSTER_CLI_BARRIER_VOLUME]   = {"BARRIER VOLUME", gf_cli_barrier_volume},</div><div class='del'>-        [GLUSTER_CLI_GET_VOL_OPT]      = {"GET_VOL_OPT", gf_cli_get_vol_opt},</div><div class='del'>-        [GLUSTER_CLI_BITROT]           = {"BITROT", gf_cli_bitrot},</div><div class='del'>-        [GLUSTER_CLI_ATTACH_TIER]      = {"ATTACH_TIER", gf_cli_attach_tier},</div><div class='del'>-        [GLUSTER_CLI_TIER]             = {"TIER", gf_cli_tier},</div><div class='del'>-        [GLUSTER_CLI_GET_STATE]        = {"GET_STATE", gf_cli_get_state},</div><div class='del'>-        [GLUSTER_CLI_RESET_BRICK]      = {"RESET_BRICK", gf_cli_reset_brick},</div><div class='del'>-        [GLUSTER_CLI_REMOVE_TIER_BRICK] = {"DETACH_TIER", gf_cli_remove_tier_brick},</div><div class='del'>-        [GLUSTER_CLI_ADD_TIER_BRICK]   = {"ADD_TIER_BRICK", gf_cli_add_tier_brick}</div><div class='del'>-};</div><div class='add'>+    [GLUSTER_CLI_NULL] = {"NULL", NULL},</div><div class='add'>+    [GLUSTER_CLI_PROBE] = {"PROBE_QUERY", gf_cli_probe},</div><div class='add'>+    [GLUSTER_CLI_DEPROBE] = {"DEPROBE_QUERY", gf_cli_deprobe},</div><div class='add'>+    [GLUSTER_CLI_LIST_FRIENDS] = {"LIST_FRIENDS", gf_cli_list_friends},</div><div class='add'>+    [GLUSTER_CLI_UUID_RESET] = {"UUID_RESET", gf_cli3_1_uuid_reset},</div><div class='add'>+    [GLUSTER_CLI_UUID_GET] = {"UUID_GET", gf_cli3_1_uuid_get},</div><div class='add'>+    [GLUSTER_CLI_CREATE_VOLUME] = {"CREATE_VOLUME", gf_cli_create_volume},</div><div class='add'>+    [GLUSTER_CLI_DELETE_VOLUME] = {"DELETE_VOLUME", gf_cli_delete_volume},</div><div class='add'>+    [GLUSTER_CLI_START_VOLUME] = {"START_VOLUME", gf_cli_start_volume},</div><div class='add'>+    [GLUSTER_CLI_STOP_VOLUME] = {"STOP_VOLUME", gf_cli_stop_volume},</div><div class='add'>+    [GLUSTER_CLI_RENAME_VOLUME] = {"RENAME_VOLUME", gf_cli_rename_volume},</div><div class='add'>+    [GLUSTER_CLI_DEFRAG_VOLUME] = {"DEFRAG_VOLUME", gf_cli_defrag_volume},</div><div class='add'>+    [GLUSTER_CLI_GET_VOLUME] = {"GET_VOLUME", gf_cli_get_volume},</div><div class='add'>+    [GLUSTER_CLI_GET_NEXT_VOLUME] = {"GET_NEXT_VOLUME", gf_cli_get_next_volume},</div><div class='add'>+    [GLUSTER_CLI_SET_VOLUME] = {"SET_VOLUME", gf_cli_set_volume},</div><div class='add'>+    [GLUSTER_CLI_ADD_BRICK] = {"ADD_BRICK", gf_cli_add_brick},</div><div class='add'>+    [GLUSTER_CLI_REMOVE_BRICK] = {"REMOVE_BRICK", gf_cli_remove_brick},</div><div class='add'>+    [GLUSTER_CLI_REPLACE_BRICK] = {"REPLACE_BRICK", gf_cli_replace_brick},</div><div class='add'>+    [GLUSTER_CLI_LOG_ROTATE] = {"LOG ROTATE", gf_cli_log_rotate},</div><div class='add'>+    [GLUSTER_CLI_GETSPEC] = {"GETSPEC", gf_cli_getspec},</div><div class='add'>+    [GLUSTER_CLI_PMAP_PORTBYBRICK] = {"PMAP PORTBYBRICK", gf_cli_pmap_b2p},</div><div class='add'>+    [GLUSTER_CLI_SYNC_VOLUME] = {"SYNC_VOLUME", gf_cli_sync_volume},</div><div class='add'>+    [GLUSTER_CLI_RESET_VOLUME] = {"RESET_VOLUME", gf_cli_reset_volume},</div><div class='add'>+    [GLUSTER_CLI_FSM_LOG] = {"FSM_LOG", gf_cli_fsm_log},</div><div class='add'>+    [GLUSTER_CLI_GSYNC_SET] = {"GSYNC_SET", gf_cli_gsync_set},</div><div class='add'>+    [GLUSTER_CLI_PROFILE_VOLUME] = {"PROFILE_VOLUME", gf_cli_profile_volume},</div><div class='add'>+    [GLUSTER_CLI_QUOTA] = {"QUOTA", gf_cli_quota},</div><div class='add'>+    [GLUSTER_CLI_TOP_VOLUME] = {"TOP_VOLUME", gf_cli_top_volume},</div><div class='add'>+    [GLUSTER_CLI_GETWD] = {"GETWD", gf_cli_getwd},</div><div class='add'>+    [GLUSTER_CLI_STATUS_VOLUME] = {"STATUS_VOLUME", gf_cli_status_volume},</div><div class='add'>+    [GLUSTER_CLI_STATUS_ALL] = {"STATUS_ALL", gf_cli_status_volume_all},</div><div class='add'>+    [GLUSTER_CLI_MOUNT] = {"MOUNT", gf_cli_mount},</div><div class='add'>+    [GLUSTER_CLI_UMOUNT] = {"UMOUNT", gf_cli_umount},</div><div class='add'>+    [GLUSTER_CLI_HEAL_VOLUME] = {"HEAL_VOLUME", gf_cli_heal_volume},</div><div class='add'>+    [GLUSTER_CLI_STATEDUMP_VOLUME] = {"STATEDUMP_VOLUME",</div><div class='add'>+                                      gf_cli_statedump_volume},</div><div class='add'>+    [GLUSTER_CLI_LIST_VOLUME] = {"LIST_VOLUME", gf_cli_list_volume},</div><div class='add'>+    [GLUSTER_CLI_CLRLOCKS_VOLUME] = {"CLEARLOCKS_VOLUME",</div><div class='add'>+                                     gf_cli_clearlocks_volume},</div><div class='add'>+    [GLUSTER_CLI_COPY_FILE] = {"COPY_FILE", gf_cli_copy_file},</div><div class='add'>+    [GLUSTER_CLI_SYS_EXEC] = {"SYS_EXEC", gf_cli_sys_exec},</div><div class='add'>+    [GLUSTER_CLI_SNAP] = {"SNAP", gf_cli_snapshot},</div><div class='add'>+    [GLUSTER_CLI_BARRIER_VOLUME] = {"BARRIER VOLUME", gf_cli_barrier_volume},</div><div class='add'>+    [GLUSTER_CLI_GET_VOL_OPT] = {"GET_VOL_OPT", gf_cli_get_vol_opt},</div><div class='add'>+    [GLUSTER_CLI_BITROT] = {"BITROT", gf_cli_bitrot},</div><div class='add'>+    [GLUSTER_CLI_ATTACH_TIER] = {"ATTACH_TIER", gf_cli_attach_tier},</div><div class='add'>+    [GLUSTER_CLI_TIER] = {"TIER", gf_cli_tier},</div><div class='add'>+    [GLUSTER_CLI_GET_STATE] = {"GET_STATE", gf_cli_get_state},</div><div class='add'>+    [GLUSTER_CLI_RESET_BRICK] = {"RESET_BRICK", gf_cli_reset_brick},</div><div class='add'>+    [GLUSTER_CLI_REMOVE_TIER_BRICK] = {"DETACH_TIER", gf_cli_remove_tier_brick},</div><div class='add'>+    [GLUSTER_CLI_ADD_TIER_BRICK] = {"ADD_TIER_BRICK", gf_cli_add_tier_brick}};</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_program cli_prog = {</div><div class='del'>-        .progname  = "Gluster CLI",</div><div class='del'>-        .prognum   = GLUSTER_CLI_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_CLI_VERSION,</div><div class='del'>-        .numproc   = GLUSTER_CLI_MAXVALUE,</div><div class='del'>-        .proctable = gluster_cli_actors,</div><div class='add'>+    .progname = "Gluster CLI",</div><div class='add'>+    .prognum = GLUSTER_CLI_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_CLI_VERSION,</div><div class='add'>+    .numproc = GLUSTER_CLI_MAXVALUE,</div><div class='add'>+    .proctable = gluster_cli_actors,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_procedure cli_quotad_procs[GF_AGGREGATOR_MAXVALUE] = {</div><div class='del'>-        [GF_AGGREGATOR_NULL]     = {"NULL", NULL},</div><div class='del'>-        [GF_AGGREGATOR_LOOKUP]   = {"LOOKUP", NULL},</div><div class='del'>-        [GF_AGGREGATOR_GETLIMIT]   = {"GETLIMIT", cli_quotad_getlimit},</div><div class='add'>+    [GF_AGGREGATOR_NULL] = {"NULL", NULL},</div><div class='add'>+    [GF_AGGREGATOR_LOOKUP] = {"LOOKUP", NULL},</div><div class='add'>+    [GF_AGGREGATOR_GETLIMIT] = {"GETLIMIT", cli_quotad_getlimit},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_program cli_quotad_clnt = {</div><div class='del'>-        .progname  = "CLI Quotad client",</div><div class='del'>-        .prognum   = GLUSTER_AGGREGATOR_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_AGGREGATOR_VERSION,</div><div class='del'>-        .numproc   = GF_AGGREGATOR_MAXVALUE,</div><div class='del'>-        .proctable = cli_quotad_procs,</div><div class='add'>+    .progname = "CLI Quotad client",</div><div class='add'>+    .prognum = GLUSTER_AGGREGATOR_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_AGGREGATOR_VERSION,</div><div class='add'>+    .numproc = GF_AGGREGATOR_MAXVALUE,</div><div class='add'>+    .proctable = cli_quotad_procs,</div><div class='ctx'> };</div><div class='head'>diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c<br/>index fd42192162b..5dbf37e3d5d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli-xml-output.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli-xml-output.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli-xml-output.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli-xml-output.c</a></div><div class='hunk'>@@ -15,10 +15,7 @@</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> #include "upcall-utils.h"</div><div class='ctx'> </div><div class='del'>-enum gf_task_types {</div><div class='del'>-    GF_TASK_TYPE_REBALANCE,</div><div class='del'>-    GF_TASK_TYPE_REMOVE_BRICK</div><div class='del'>-};</div><div class='add'>+enum gf_task_types { GF_TASK_TYPE_REBALANCE, GF_TASK_TYPE_REMOVE_BRICK };</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * IMPORTANT NOTE:</div><div class='hunk'>@@ -47,4337 +44,4156 @@ enum gf_task_types {</div><div class='ctx'>  *  of #if (HAVE_LIB_XML)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> </div><div class='ctx'> #include &lt;libxml/encoding.h&gt;</div><div class='ctx'> #include &lt;libxml/xmlwriter.h&gt;</div><div class='ctx'> </div><div class='del'>-#define XML_RET_CHECK_AND_GOTO(ret, label)      do {            \</div><div class='del'>-                if (ret &lt; 0) {                                  \</div><div class='del'>-                        ret = -1;                               \</div><div class='del'>-                        goto label;                             \</div><div class='del'>-                }                                               \</div><div class='del'>-                else                                            \</div><div class='del'>-                        ret = 0;                                \</div><div class='del'>-        }while (0)                                              \</div><div class='add'>+#define XML_RET_CHECK_AND_GOTO(ret, label)                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret &lt; 0) {                                                         \</div><div class='add'>+            ret = -1;                                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        } else                                                                 \</div><div class='add'>+            ret = 0;                                                           \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_begin_xml_output (xmlTextWriterPtr *writer, xmlDocPtr *doc)</div><div class='add'>+cli_begin_xml_output(xmlTextWriterPtr *writer, xmlDocPtr *doc)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        *writer = xmlNewTextWriterDoc (doc, 0);</div><div class='del'>-        if (writer == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    *writer = xmlNewTextWriterDoc(doc, 0);</div><div class='add'>+    if (writer == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterStartDocument (*writer, "1.0", "UTF-8", "yes");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterStartDocument(*writer, "1.0", "UTF-8", "yes");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;cliOutput&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (*writer, (xmlChar *)"cliOutput");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;cliOutput&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(*writer, (xmlChar *)"cliOutput");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_end_xml_output (xmlTextWriterPtr writer, xmlDocPtr doc)</div><div class='add'>+cli_end_xml_output(xmlTextWriterPtr writer, xmlDocPtr doc)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        /* &lt;/cliOutput&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterEndDocument (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/cliOutput&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='add'>+    ret = xmlTextWriterEndDocument(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* Dump xml document to stdout and pretty format it */</div><div class='del'>-        xmlSaveFormatFileEnc ("-", doc, "UTF-8", 1);</div><div class='add'>+    /* Dump xml document to stdout and pretty format it */</div><div class='add'>+    xmlSaveFormatFileEnc("-", doc, "UTF-8", 1);</div><div class='ctx'> </div><div class='del'>-        xmlFreeTextWriter (writer);</div><div class='del'>-        xmlFreeDoc (doc);</div><div class='add'>+    xmlFreeTextWriter(writer);</div><div class='add'>+    xmlFreeDoc(doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_common (xmlTextWriterPtr writer, int op_ret, int op_errno,</div><div class='del'>-                       char *op_errstr)</div><div class='add'>+cli_xml_output_common(xmlTextWriterPtr writer, int op_ret, int op_errno,</div><div class='add'>+                      char *op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"opRet",</div><div class='del'>-                                               "%d", op_ret);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opRet", "%d",</div><div class='add'>+                                          op_ret);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"opErrno",</div><div class='del'>-                                               "%d", op_errno);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opErrno", "%d",</div><div class='add'>+                                          op_errno);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        if (op_errstr)</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"opErrstr",</div><div class='del'>-                                                       "%s", op_errstr);</div><div class='del'>-        else</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"opErrstr",</div><div class='del'>-                                                       "%s", "");</div><div class='add'>+    if (op_errstr)</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opErrstr",</div><div class='add'>+                                              "%s", op_errstr);</div><div class='add'>+    else</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opErrstr",</div><div class='add'>+                                              "%s", "");</div><div class='ctx'> </div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_str (char *op, char *str, int op_ret, int op_errno,</div><div class='del'>-                    char *op_errstr)</div><div class='add'>+cli_xml_output_str(char *op, char *str, int op_ret, int op_errno,</div><div class='add'>+                   char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (op) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"cliOp",</div><div class='del'>-                                                       "%s", op);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    if (op) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"cliOp", "%s",</div><div class='add'>+                                              op);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (str) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"output",</div><div class='del'>-                                                       "%s", str);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    if (str) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"output", "%s",</div><div class='add'>+                                              str);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_data_pair (dict_t *this, char *key, data_t *value,</div><div class='del'>-                          void *data)</div><div class='add'>+cli_xml_output_data_pair(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        *writer = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr *writer = NULL;</div><div class='ctx'> </div><div class='del'>-        writer = (xmlTextWriterPtr *)data;</div><div class='add'>+    writer = (xmlTextWriterPtr *)data;</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (*writer, (xmlChar *)key,</div><div class='del'>-                                               "%s", value-&gt;data);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(*writer, (xmlChar *)key, "%s",</div><div class='add'>+                                          value-&gt;data);</div><div class='ctx'> </div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_dict ( char *op, dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                      char *op_errstr)</div><div class='add'>+cli_xml_output_dict(char *op, dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                    char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* &lt;"op"&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)op);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;"op"&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)op);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_foreach (dict, cli_xml_output_data_pair, &amp;writer);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_foreach(dict, cli_xml_output_data_pair, &amp;writer);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/"op"&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/"op"&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_common (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                  int   brick_index, int *online,</div><div class='del'>-                                  gf_boolean_t *node_present)</div><div class='add'>+cli_xml_output_vol_status_common(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                 int brick_index, int *online,</div><div class='add'>+                                 gf_boolean_t *node_present)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        char            *hostname       = NULL;</div><div class='del'>-        char            *path           = NULL;</div><div class='del'>-        char            *uuid           = NULL;</div><div class='del'>-        int             port            = 0;</div><div class='del'>-        int             rdma_port       = 0;</div><div class='del'>-        int             status          = 0;</div><div class='del'>-        int             pid             = 0;</div><div class='del'>-        char            key[1024]       = {0,};</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.hostname", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                *node_present = _gf_false;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *uuid = NULL;</div><div class='add'>+    int port = 0;</div><div class='add'>+    int rdma_port = 0;</div><div class='add'>+    int status = 0;</div><div class='add'>+    int pid = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.hostname", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *node_present = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    *node_present = _gf_true;</div><div class='add'>+</div><div class='add'>+    /* &lt;node&gt;</div><div class='add'>+     * will be closed in the calling function cli_xml_output_vol_status()*/</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"node");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname", "%s",</div><div class='add'>+                                          hostname);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.path", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;path);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"path", "%s",</div><div class='add'>+                                          path);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.peerid", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;uuid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"peerid", "%s",</div><div class='add'>+                                          uuid);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.status", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;status);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d",</div><div class='add'>+                                          status);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    *online = status;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.port", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;port);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.rdma_port", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;rdma_port);</div><div class='add'>+</div><div class='add'>+    /* If the process is either offline or doesn't provide a port (shd)</div><div class='add'>+     * port = "N/A"</div><div class='add'>+     * else print the port number of the process.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Tag 'port' can be removed once console management is started</div><div class='add'>+     * to support new tag ports.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (*online == 1 &amp;&amp; port != 0)</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"port", "%d",</div><div class='add'>+                                              port);</div><div class='add'>+    else</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"port", "%s",</div><div class='add'>+                                              "N/A");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"ports");</div><div class='add'>+    if (*online == 1 &amp;&amp; (port != 0 || rdma_port != 0)) {</div><div class='add'>+        if (port) {</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"tcp",</div><div class='add'>+                                                  "%d", port);</div><div class='add'>+        } else {</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"tcp",</div><div class='add'>+                                                  "%s", "N/A");</div><div class='ctx'>         }</div><div class='del'>-        *node_present = _gf_true;</div><div class='del'>-</div><div class='del'>-        /* &lt;node&gt;</div><div class='del'>-         * will be closed in the calling function cli_xml_output_vol_status()*/</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"node");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"hostname",</div><div class='del'>-                                               "%s", hostname);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.path", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;path);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"path",</div><div class='del'>-                                               "%s", path);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.peerid", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;uuid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"peerid",</div><div class='del'>-                                               "%s", uuid);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.status", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;status);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"status",</div><div class='del'>-                                               "%d", status);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        *online = status;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.port", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;port);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.rdma_port", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;rdma_port);</div><div class='del'>-</div><div class='del'>-        /* If the process is either offline or doesn't provide a port (shd)</div><div class='del'>-         * port = "N/A"</div><div class='del'>-         * else print the port number of the process.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Tag 'port' can be removed once console management is started</div><div class='del'>-         * to support new tag ports.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (*online == 1 &amp;&amp; port != 0)</div><div class='del'>-                 ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                    (xmlChar *)"port",</div><div class='del'>-                                                        "%d", port);</div><div class='del'>-         else</div><div class='del'>-                 ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                        (xmlChar *)"port",</div><div class='del'>-                                                        "%s", "N/A");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"ports");</div><div class='del'>-        if (*online == 1 &amp;&amp; (port != 0 || rdma_port != 0)) {</div><div class='del'>-</div><div class='del'>-                if (port) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"tcp",</div><div class='del'>-                                                       "%d", port);</div><div class='del'>-                } else {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"tcp",</div><div class='del'>-                                                       "%s", "N/A");</div><div class='del'>-                }</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                if (rdma_port) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"rdma",</div><div class='del'>-                                                       "%d", rdma_port);</div><div class='del'>-                } else {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"rdma",</div><div class='del'>-                                                       "%s", "N/A");</div><div class='del'>-                }</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        if (rdma_port) {</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"rdma",</div><div class='add'>+                                                  "%d", rdma_port);</div><div class='ctx'>         } else {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"tcp",</div><div class='del'>-                                                       "%s", "N/A");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"rdma",</div><div class='del'>-                                                       "%s", "N/A");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"rdma",</div><div class='add'>+                                                  "%s", "N/A");</div><div class='ctx'>         }</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    } else {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"tcp", "%s",</div><div class='add'>+                                              "N/A");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"rdma", "%s",</div><div class='add'>+                                              "N/A");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.pid", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"pid",</div><div class='del'>-                                               "%d", pid);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.pid", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", "%d", pid);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_detail (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                  int brick_index)</div><div class='del'>-{</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        uint64_t        size_total = 0;</div><div class='del'>-        uint64_t        size_free = 0;</div><div class='del'>-        char            *device = NULL;</div><div class='del'>-        uint64_t        block_size = 0;</div><div class='del'>-        char            *mnt_options = NULL;</div><div class='del'>-        char            *fs_name = NULL;</div><div class='del'>-        char            *inode_size = NULL;</div><div class='del'>-        uint64_t        inodes_total = 0;</div><div class='del'>-        uint64_t        inodes_free = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.total", brick_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;size_total);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"sizeTotal",</div><div class='del'>-                                                       "%"PRIu64, size_total);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.free", brick_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;size_free);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"sizeFree",</div><div class='del'>-                                                       "%"PRIu64, size_free);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.device", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;device);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"device",</div><div class='del'>-                                                       "%s", device);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.block_size", brick_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;block_size);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"blockSize",</div><div class='del'>-                                                       "%"PRIu64, block_size);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mnt_options", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;mnt_options);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"mntOptions",</div><div class='del'>-                                                       "%s", mnt_options);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.fs_name", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;fs_name);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"fsName",</div><div class='del'>-                                                       "%s", fs_name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.inode_size", brick_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;inode_size);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"inodeSize",</div><div class='del'>-                                                       "%s", fs_name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.total_inodes", brick_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;inodes_total);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"inodesTotal",</div><div class='del'>-                                                       "%"PRIu64, inodes_total);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.free_inodes", brick_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;inodes_free);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"inodesFree",</div><div class='del'>-                                                       "%"PRIu64, inodes_free);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        } else {</div><div class='del'>-		ret = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-cli_xml_output_vol_status_mempool (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                   char *prefix)</div><div class='add'>+cli_xml_output_vol_status_detail(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                 int brick_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             mempool_count = 0;</div><div class='del'>-        char            *name = NULL;</div><div class='del'>-        int             hotcount = 0;</div><div class='del'>-        int             coldcount = 0;</div><div class='del'>-        uint64_t        paddedsizeof = 0;</div><div class='del'>-        uint64_t        alloccount = 0;</div><div class='del'>-        int             maxalloc = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;mempool&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"mempool");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.mempool-count", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;mempool_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count",</div><div class='del'>-                                               "%d", mempool_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; mempool_count; i++) {</div><div class='del'>-                /* &lt;pool&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"pool");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.name", prefix, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"name",</div><div class='del'>-                                                       "%s", name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.hotcount", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;hotcount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"hotCount",</div><div class='del'>-                                                       "%d", hotcount);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.coldcount", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;coldcount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"coldCount",</div><div class='del'>-                                                       "%d", coldcount);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.paddedsizeof",</div><div class='del'>-                          prefix, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;paddedsizeof);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"padddedSizeOf", "%"PRIu64,</div><div class='del'>-                         paddedsizeof);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.alloccount", prefix, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;alloccount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"allocCount",</div><div class='del'>-                                                       "%"PRIu64, alloccount);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.max_alloc", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;maxalloc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"maxAlloc",</div><div class='del'>-                                                       "%d", maxalloc);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.pool-misses", prefix, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;alloccount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"poolMisses",</div><div class='del'>-                                                       "%"PRIu64, alloccount);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pool%d.max-stdalloc", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;maxalloc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"maxStdAlloc",</div><div class='del'>-                                                       "%d", maxalloc);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                /* &lt;/pool&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* &lt;/mempool&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t size_total = 0;</div><div class='add'>+    uint64_t size_free = 0;</div><div class='add'>+    char *device = NULL;</div><div class='add'>+    uint64_t block_size = 0;</div><div class='add'>+    char *mnt_options = NULL;</div><div class='add'>+    char *fs_name = NULL;</div><div class='add'>+    char *inode_size = NULL;</div><div class='add'>+    uint64_t inodes_total = 0;</div><div class='add'>+    uint64_t inodes_free = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.total", brick_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;size_total);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"sizeTotal",</div><div class='add'>+                                              "%" PRIu64, size_total);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.free", brick_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;size_free);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"sizeFree",</div><div class='add'>+                                              "%" PRIu64, size_free);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.device", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;device);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"device", "%s",</div><div class='add'>+                                              device);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.block_size", brick_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;block_size);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"blockSize",</div><div class='add'>+                                              "%" PRIu64, block_size);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mnt_options", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;mnt_options);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"mntOptions",</div><div class='add'>+                                              "%s", mnt_options);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.fs_name", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;fs_name);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"fsName", "%s",</div><div class='add'>+                                              fs_name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.inode_size", brick_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;inode_size);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"inodeSize",</div><div class='add'>+                                              "%s", fs_name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.total_inodes", brick_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;inodes_total);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"inodesTotal",</div><div class='add'>+                                              "%" PRIu64, inodes_total);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.free_inodes", brick_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;inodes_free);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"inodesFree",</div><div class='add'>+                                              "%" PRIu64, inodes_free);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_mem (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                               int brick_index)</div><div class='add'>+cli_xml_output_vol_status_mempool(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                  char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             arena = 0;</div><div class='del'>-        int             ordblks = 0;</div><div class='del'>-        int             smblks = 0;</div><div class='del'>-        int             hblks = 0;</div><div class='del'>-        int             hblkhd = 0;</div><div class='del'>-        int             usmblks = 0;</div><div class='del'>-        int             fsmblks = 0;</div><div class='del'>-        int             uordblks = 0;</div><div class='del'>-        int             fordblks = 0;</div><div class='del'>-        int             keepcost = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        /* &lt;memStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"memStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;mallinfo&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"mallinfo");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.arena", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;arena);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"arena",</div><div class='del'>-                                               "%d", arena);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.ordblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;ordblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"ordblks",</div><div class='del'>-                                               "%d", ordblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int mempool_count = 0;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    int hotcount = 0;</div><div class='add'>+    int coldcount = 0;</div><div class='add'>+    uint64_t paddedsizeof = 0;</div><div class='add'>+    uint64_t alloccount = 0;</div><div class='add'>+    int maxalloc = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;mempool&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"mempool");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.mempool-count", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;mempool_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                          mempool_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; mempool_count; i++) {</div><div class='add'>+        /* &lt;pool&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"pool");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.smblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;smblks);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.name", prefix, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;name);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"smblks",</div><div class='del'>-                                               "%d", smblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.hblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;hblks);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.hotcount", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;hotcount);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"hblks",</div><div class='del'>-                                               "%d", hblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hotCount",</div><div class='add'>+                                              "%d", hotcount);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.hblkhd", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;hblkhd);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.coldcount", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;coldcount);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"hblkhd",</div><div class='del'>-                                               "%d", hblkhd);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"coldCount",</div><div class='add'>+                                              "%d", coldcount);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.usmblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;usmblks);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.paddedsizeof", prefix, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;paddedsizeof);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"usmblks",</div><div class='del'>-                                               "%d", usmblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            writer, (xmlChar *)"padddedSizeOf", "%" PRIu64, paddedsizeof);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.fsmblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;fsmblks);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.alloccount", prefix, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;alloccount);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"fsmblks",</div><div class='del'>-                                               "%d", fsmblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"allocCount",</div><div class='add'>+                                              "%" PRIu64, alloccount);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.uordblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;uordblks);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.max_alloc", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;maxalloc);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"uordblks",</div><div class='del'>-                                               "%d", uordblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxAlloc",</div><div class='add'>+                                              "%d", maxalloc);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.fordblks", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;fordblks);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.pool-misses", prefix, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;alloccount);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"fordblks",</div><div class='del'>-                                               "%d", fordblks);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"poolMisses",</div><div class='add'>+                                              "%" PRIu64, alloccount);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.mallinfo.keepcost", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;keepcost);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pool%d.max-stdalloc", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;maxalloc);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"keepcost",</div><div class='del'>-                                               "%d", keepcost);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/mallinfo&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxStdAlloc",</div><div class='add'>+                                              "%d", maxalloc);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d", brick_index);</div><div class='del'>-        ret = cli_xml_output_vol_status_mempool (writer, dict, key);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        /* &lt;/pool&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/memStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/mempool&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_clients (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                   int brick_index)</div><div class='add'>+cli_xml_output_vol_status_mem(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                              int brick_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             client_count = 0;</div><div class='del'>-        char            *hostname = NULL;</div><div class='del'>-        uint64_t        bytes_read = 0;</div><div class='del'>-        uint64_t        bytes_write = 0;</div><div class='del'>-        uint32_t        opversion = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;clientsStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"clientsStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.clientcount", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;client_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                               (xmlChar *)"clientCount",</div><div class='del'>-                                               "%d", client_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; client_count; i++) {</div><div class='del'>-                /* &lt;client&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"client");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.client%d.hostname",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"hostname",</div><div class='del'>-                                                       "%s", hostname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.client%d.bytesread",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;bytes_read);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"bytesRead",</div><div class='del'>-                                                       "%"PRIu64, bytes_read);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.client%d.byteswrite",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;bytes_write);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"bytesWrite",</div><div class='del'>-                                                       "%"PRIu64, bytes_write);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.client%d.opversion",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = dict_get_uint32 (dict, key, &amp;opversion);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"opVersion",</div><div class='del'>-                                                       "%"PRIu32, opversion);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                /* &lt;/client&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int arena = 0;</div><div class='add'>+    int ordblks = 0;</div><div class='add'>+    int smblks = 0;</div><div class='add'>+    int hblks = 0;</div><div class='add'>+    int hblkhd = 0;</div><div class='add'>+    int usmblks = 0;</div><div class='add'>+    int fsmblks = 0;</div><div class='add'>+    int uordblks = 0;</div><div class='add'>+    int fordblks = 0;</div><div class='add'>+    int keepcost = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* &lt;memStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"memStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;mallinfo&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"mallinfo");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.arena", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;arena);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"arena", "%d",</div><div class='add'>+                                          arena);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.ordblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;ordblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"ordblks", "%d",</div><div class='add'>+                                          ordblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.smblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;smblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"smblks", "%d",</div><div class='add'>+                                          smblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.hblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;hblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hblks", "%d",</div><div class='add'>+                                          hblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.hblkhd", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;hblkhd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hblkhd", "%d",</div><div class='add'>+                                          hblkhd);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.usmblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;usmblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"usmblks", "%d",</div><div class='add'>+                                          usmblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.fsmblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;fsmblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"fsmblks", "%d",</div><div class='add'>+                                          fsmblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.uordblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;uordblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uordblks", "%d",</div><div class='add'>+                                          uordblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.fordblks", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;fordblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"fordblks", "%d",</div><div class='add'>+                                          fordblks);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.mallinfo.keepcost", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;keepcost);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"keepcost", "%d",</div><div class='add'>+                                          keepcost);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/mallinfo&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d", brick_index);</div><div class='add'>+    ret = cli_xml_output_vol_status_mempool(writer, dict, key);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;/memStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/clientsStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_inode_entry (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                       char *prefix)</div><div class='add'>+cli_xml_output_vol_status_clients(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                  int brick_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *gfid = NULL;</div><div class='del'>-        uint64_t        nlookup = 0;</div><div class='del'>-        uint32_t        ref = 0;</div><div class='del'>-        int             ia_type = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        /* &lt;inode&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"inode");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.gfid", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;gfid);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int client_count = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    uint64_t bytes_read = 0;</div><div class='add'>+    uint64_t bytes_write = 0;</div><div class='add'>+    uint32_t opversion = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;clientsStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"clientsStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.clientcount", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;client_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"clientCount",</div><div class='add'>+                                          "%d", client_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; client_count; i++) {</div><div class='add'>+        /* &lt;client&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"client");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.client%d.hostname", brick_index, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"gfid",</div><div class='del'>-                                               "%s", gfid);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname",</div><div class='add'>+                                              "%s", hostname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.nlookup", prefix);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;nlookup);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.client%d.bytesread", brick_index,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;bytes_read);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"nLookup",</div><div class='del'>-                                               "%"PRIu64, nlookup);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"bytesRead",</div><div class='add'>+                                              "%" PRIu64, bytes_read);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.ref", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;ref);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.client%d.byteswrite", brick_index,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;bytes_write);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"ref",</div><div class='del'>-                                               "%"PRIu32, ref);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"bytesWrite",</div><div class='add'>+                                              "%" PRIu64, bytes_write);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.ia_type", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;ia_type);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.client%d.opversion", brick_index,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_uint32(dict, key, &amp;opversion);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"iaType",</div><div class='del'>-                                               "%d", ia_type);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"opVersion",</div><div class='add'>+                                              "%" PRIu32, opversion);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/inode&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/client&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* &lt;/clientsStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_itable (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                  char *prefix)</div><div class='add'>+cli_xml_output_vol_status_inode_entry(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                      char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        uint32_t        active_size = 0;</div><div class='del'>-        uint32_t        lru_size = 0;</div><div class='del'>-        uint32_t        purge_size = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.active_size", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;active_size);</div><div class='del'>-        if (ret)</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *gfid = NULL;</div><div class='add'>+    uint64_t nlookup = 0;</div><div class='add'>+    uint32_t ref = 0;</div><div class='add'>+    int ia_type = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* &lt;inode&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"inode");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.gfid", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"gfid", "%s",</div><div class='add'>+                                          gfid);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.nlookup", prefix);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;nlookup);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nLookup",</div><div class='add'>+                                          "%" PRIu64, nlookup);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.ref", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;ref);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"ref", "%" PRIu32,</div><div class='add'>+                                          ref);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.ia_type", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;ia_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"iaType", "%d",</div><div class='add'>+                                          ia_type);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/inode&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+cli_xml_output_vol_status_itable(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                 char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t active_size = 0;</div><div class='add'>+    uint32_t lru_size = 0;</div><div class='add'>+    uint32_t purge_size = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.active_size", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;active_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"activeSize",</div><div class='add'>+                                          "%" PRIu32, active_size);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    if (active_size != 0) {</div><div class='add'>+        /* &lt;active&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"active");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        for (i = 0; i &lt; active_size; i++) {</div><div class='add'>+            snprintf(key, sizeof(key), "%s.active%d", prefix, i);</div><div class='add'>+            ret = cli_xml_output_vol_status_inode_entry(writer, dict, key);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"activeSize",</div><div class='del'>-                                               "%"PRIu32, active_size);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        if (active_size != 0) {</div><div class='del'>-                /* &lt;active&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"active");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; active_size; i++) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%s.active%d", prefix, i);</div><div class='del'>-                        ret = cli_xml_output_vol_status_inode_entry</div><div class='del'>-                                (writer, dict, key);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                /* &lt;/active&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='ctx'>         }</div><div class='add'>+        /* &lt;/active&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.lru_size", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;lru_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lruSize",</div><div class='add'>+                                          "%" PRIu32, lru_size);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    if (lru_size != 0) {</div><div class='add'>+        /* &lt;lru&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"lru");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.lru_size", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;lru_size);</div><div class='del'>-        if (ret)</div><div class='add'>+        for (i = 0; i &lt; lru_size; i++) {</div><div class='add'>+            snprintf(key, sizeof(key), "%s.lru%d", prefix, i);</div><div class='add'>+            ret = cli_xml_output_vol_status_inode_entry(writer, dict, key);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"lruSize",</div><div class='del'>-                                               "%"PRIu32, lru_size);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        if (lru_size != 0) {</div><div class='del'>-                /* &lt;lru&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"lru");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; lru_size; i++) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%s.lru%d", prefix, i);</div><div class='del'>-                        ret = cli_xml_output_vol_status_inode_entry</div><div class='del'>-                                (writer, dict, key);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                /* &lt;/lru&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='ctx'>         }</div><div class='add'>+        /* &lt;/lru&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.purge_size", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;purge_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"purgeSize",</div><div class='add'>+                                          "%" PRIu32, purge_size);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    if (purge_size != 0) {</div><div class='add'>+        /* &lt;purge&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"purge");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.purge_size", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;purge_size);</div><div class='del'>-        if (ret)</div><div class='add'>+        for (i = 0; i &lt; purge_size; i++) {</div><div class='add'>+            snprintf(key, sizeof(key), "%s.purge%d", prefix, i);</div><div class='add'>+            ret = cli_xml_output_vol_status_inode_entry(writer, dict, key);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"purgeSize",</div><div class='del'>-                                               "%"PRIu32, purge_size);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        if (purge_size != 0) {</div><div class='del'>-                /* &lt;purge&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"purge");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; purge_size; i++) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%s.purge%d", prefix, i);</div><div class='del'>-                        ret = cli_xml_output_vol_status_inode_entry</div><div class='del'>-                                (writer, dict, key);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                /* &lt;/purge&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='ctx'>         }</div><div class='add'>+        /* &lt;/purge&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_inode (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                 int brick_index)</div><div class='add'>+cli_xml_output_vol_status_inode(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                int brick_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             conn_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;inodeStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"inodeStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int conn_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;inodeStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"inodeStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.conncount", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;conn_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"connections",</div><div class='add'>+                                          "%d", conn_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conn_count; i++) {</div><div class='add'>+        /* &lt;connection&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"connection");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.conncount", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;conn_count);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.conn%d.itable", brick_index, i);</div><div class='add'>+        ret = cli_xml_output_vol_status_itable(writer, dict, key);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"connections",</div><div class='del'>-                                               "%d", conn_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conn_count; i++) {</div><div class='del'>-                /* &lt;connection&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"connection");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.conn%d.itable",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = cli_xml_output_vol_status_itable (writer, dict, key);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/connection&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        /* &lt;/connection&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/inodeStatus&gt; */</div><div class='del'>-        ret= xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/inodeStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_fdtable (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                   char *prefix)</div><div class='add'>+cli_xml_output_vol_status_fdtable(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                  char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             refcount = 0;</div><div class='del'>-        uint32_t        maxfds = 0;</div><div class='del'>-        int             firstfree = 0;</div><div class='del'>-        int             openfds = 0;</div><div class='del'>-        int             fd_pid = 0;</div><div class='del'>-        int             fd_refcount = 0;</div><div class='del'>-        int             fd_flags = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;fdTable&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"fdTable");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.refcount", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;refcount);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int refcount = 0;</div><div class='add'>+    uint32_t maxfds = 0;</div><div class='add'>+    int firstfree = 0;</div><div class='add'>+    int openfds = 0;</div><div class='add'>+    int fd_pid = 0;</div><div class='add'>+    int fd_refcount = 0;</div><div class='add'>+    int fd_flags = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;fdTable&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"fdTable");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.refcount", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;refcount);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"refCount", "%d",</div><div class='add'>+                                          refcount);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.maxfds", prefix);</div><div class='add'>+    ret = dict_get_uint32(dict, key, &amp;maxfds);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxFds",</div><div class='add'>+                                          "%" PRIu32, maxfds);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.firstfree", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;firstfree);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"firstFree", "%d",</div><div class='add'>+                                          firstfree);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.openfds", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;openfds);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"openFds", "%d",</div><div class='add'>+                                          openfds);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; maxfds; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.fdentry%d.pid", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;fd_pid);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"refCount",</div><div class='del'>-                                               "%d", refcount);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.maxfds", prefix);</div><div class='del'>-        ret = dict_get_uint32 (dict, key, &amp;maxfds);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.fdentry%d.refcount", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;fd_refcount);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"maxFds",</div><div class='del'>-                                               "%"PRIu32, maxfds);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.firstfree", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;firstfree);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.fdentry%d.flags", prefix, i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;fd_flags);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"firstFree",</div><div class='del'>-                                               "%d", firstfree);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.openfds", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;openfds);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"openFds",</div><div class='del'>-                                               "%d", openfds);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;fd&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"fd");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; maxfds; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.fdentry%d.pid", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;fd_pid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"entry", "%d",</div><div class='add'>+                                              i + 1);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.fdentry%d.refcount",</div><div class='del'>-                          prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;fd_refcount);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", "%d",</div><div class='add'>+                                              fd_pid);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.fdentry%d.flags", prefix, i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;fd_flags);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* &lt;fd&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"fd");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"entry",</div><div class='del'>-                                                       "%d", i+1);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"pid",</div><div class='del'>-                                                       "%d", fd_pid);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"refCount",</div><div class='del'>-                                                       "%d", fd_refcount);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"flags",</div><div class='del'>-                                                       "%d", fd_flags);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                /* &lt;/fd&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"refCount",</div><div class='add'>+                                              "%d", fd_refcount);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"flags", "%d",</div><div class='add'>+                                              fd_flags);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        /* &lt;/fd&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/fdTable&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/fdTable&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_fd (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                              int brick_index)</div><div class='add'>+cli_xml_output_vol_status_fd(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                             int brick_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             conn_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;fdStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"fdStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int conn_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;fdStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"fdStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.conncount", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;conn_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"connections",</div><div class='add'>+                                          "%d", conn_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conn_count; i++) {</div><div class='add'>+        /* &lt;connection&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"connection");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.conncount", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;conn_count);</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.conn%d.fdtable", brick_index, i);</div><div class='add'>+        ret = cli_xml_output_vol_status_fdtable(writer, dict, key);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"connections",</div><div class='del'>-                                               "%d", conn_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conn_count; i++) {</div><div class='del'>-                /* &lt;connection&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"connection");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.conn%d.fdtable",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = cli_xml_output_vol_status_fdtable (writer, dict, key);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/connection&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        /* &lt;/connection&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/fdStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/fdStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_callframe (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                     char *prefix)</div><div class='add'>+cli_xml_output_vol_status_callframe(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                    char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             ref_count = 0;</div><div class='del'>-        char            *translator = NULL;</div><div class='del'>-        int             complete = 0;</div><div class='del'>-        char            *parent = NULL;</div><div class='del'>-        char            *wind_from = NULL;</div><div class='del'>-        char            *wind_to = NULL;</div><div class='del'>-        char            *unwind_from = NULL;</div><div class='del'>-        char            *unwind_to = NULL;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        /* &lt;callFrame&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"callFrame");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.refcount", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;ref_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"refCount",</div><div class='del'>-                                               "%d", ref_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.translator", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;translator);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"translator",</div><div class='del'>-                                               "%s", translator);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.complete", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;complete);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"complete",</div><div class='del'>-                                               "%d", complete);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret ,out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.parent", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;parent);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"parent",</div><div class='del'>-                                                       "%s", parent);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int ref_count = 0;</div><div class='add'>+    char *translator = NULL;</div><div class='add'>+    int complete = 0;</div><div class='add'>+    char *parent = NULL;</div><div class='add'>+    char *wind_from = NULL;</div><div class='add'>+    char *wind_to = NULL;</div><div class='add'>+    char *unwind_from = NULL;</div><div class='add'>+    char *unwind_to = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* &lt;callFrame&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"callFrame");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.refcount", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;ref_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"refCount", "%d",</div><div class='add'>+                                          ref_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.translator", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;translator);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"translator", "%s",</div><div class='add'>+                                          translator);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.complete", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;complete);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"complete", "%d",</div><div class='add'>+                                          complete);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.parent", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;parent);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"parent", "%s",</div><div class='add'>+                                              parent);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.windfrom", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;wind_from);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"windFrom",</div><div class='del'>-                                                       "%s", wind_from);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.windfrom", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;wind_from);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"windFrom",</div><div class='add'>+                                              "%s", wind_from);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.windto", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;wind_to);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"windTo",</div><div class='del'>-                                                       "%s", wind_to);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.windto", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;wind_to);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"windTo", "%s",</div><div class='add'>+                                              wind_to);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.unwindfrom", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;unwind_from);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"unwindFrom",</div><div class='del'>-                                                       "%s", unwind_from);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unwindfrom", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;unwind_from);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"unwindFrom",</div><div class='add'>+                                              "%s", unwind_from);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.unwindto", prefix);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;unwind_to);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"unwindTo",</div><div class='del'>-                                                       "%s", unwind_to);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unwindto", prefix);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;unwind_to);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"unwindTo",</div><div class='add'>+                                              "%s", unwind_to);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/callFrame&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/callFrame&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_callstack (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                     char *prefix)</div><div class='add'>+cli_xml_output_vol_status_callstack(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                    char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             uid = 0;</div><div class='del'>-        int             gid = 0;</div><div class='del'>-        int             pid = 0;</div><div class='del'>-        uint64_t        unique = 0;</div><div class='del'>-        int             frame_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;callStack&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"callStack");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.uid", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;uid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"uid",</div><div class='del'>-                                               "%d", uid);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.gid", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;gid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"gid",</div><div class='del'>-                                               "%d", gid);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.pid", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"pid",</div><div class='del'>-                                               "%d", pid);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.unique", prefix);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;unique);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int uid = 0;</div><div class='add'>+    int gid = 0;</div><div class='add'>+    int pid = 0;</div><div class='add'>+    uint64_t unique = 0;</div><div class='add'>+    int frame_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;callStack&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"callStack");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.uid", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;uid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uid", "%d", uid);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.gid", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;gid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"gid", "%d", gid);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.pid", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid", "%d", pid);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unique", prefix);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;unique);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"unique",</div><div class='add'>+                                          "%" PRIu64, unique);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.count", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;frame_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"frameCount", "%d",</div><div class='add'>+                                          frame_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; frame_count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.frame%d", prefix, i);</div><div class='add'>+        ret = cli_xml_output_vol_status_callframe(writer, dict, key);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"unique",</div><div class='del'>-                                               "%"PRIu64, unique);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.count", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;frame_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"frameCount",</div><div class='del'>-                                               "%d", frame_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; frame_count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.frame%d", prefix, i);</div><div class='del'>-                ret = cli_xml_output_vol_status_callframe (writer, dict,</div><div class='del'>-                                                           key);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/callStack&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/callStack&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_callpool (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                    int brick_index)</div><div class='add'>+cli_xml_output_vol_status_callpool(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                   int brick_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             call_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;callpoolStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"callpoolStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "brick%d.callpool.count", brick_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;call_count);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;callpoolStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"callpoolStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "brick%d.callpool.count", brick_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;call_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                          call_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; call_count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "brick%d.callpool.stack%d", brick_index, i);</div><div class='add'>+        ret = cli_xml_output_vol_status_callstack(writer, dict, key);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count",</div><div class='del'>-                                               "%d", call_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; call_count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "brick%d.callpool.stack%d",</div><div class='del'>-                          brick_index, i);</div><div class='del'>-                ret = cli_xml_output_vol_status_callstack (writer, dict,</div><div class='del'>-                                                           key);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/callpoolStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/callpoolStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_begin (cli_local_t *local, int op_ret, int op_errno,</div><div class='del'>-                                 char *op_errstr)</div><div class='add'>+cli_xml_output_vol_status_begin(cli_local_t *local, int op_ret, int op_errno,</div><div class='add'>+                                char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_begin_xml_output(&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (local-&gt;writer, op_ret, op_errno,</div><div class='del'>-                                     op_errstr);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_xml_output_common(local-&gt;writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;volStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *) "volStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;volStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;volumes&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"volumes");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;volumes&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volumes");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_end (cli_local_t *local)</div><div class='add'>+cli_xml_output_vol_status_end(cli_local_t *local)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volumes&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/volumes&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    /* &lt;/volStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (local-&gt;writer, local-&gt;doc);</div><div class='add'>+    ret = cli_end_xml_output(local-&gt;writer, local-&gt;doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_remove_brick_task_params (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                         char *prefix)</div><div class='add'>+cli_xml_output_remove_brick_task_params(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                        char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        int             count = 0;</div><div class='del'>-        int             i = 0;</div><div class='del'>-        char            *brick = NULL;</div><div class='del'>-</div><div class='del'>-        /* &lt;params&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"params");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.count", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;count);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *brick = NULL;</div><div class='add'>+</div><div class='add'>+    /* &lt;params&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"params");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.count", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d", prefix, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;brick);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 1; i &lt;= count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d", prefix, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"brick",</div><div class='del'>-                                                       "%s", brick);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                brick = NULL;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brick", "%s",</div><div class='add'>+                                              brick);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        brick = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/param&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/param&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_tasks (cli_local_t *local, dict_t *dict) {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        char                    *task_type = NULL;</div><div class='del'>-        char                    *task_id_str = NULL;</div><div class='del'>-        int                     status = 0;</div><div class='del'>-        int                     tasks = 0;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;tasks&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"tasks");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "tasks", &amp;tasks);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+cli_xml_output_vol_status_tasks(cli_local_t *local, dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *task_type = NULL;</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+    int status = 0;</div><div class='add'>+    int tasks = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;tasks&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"tasks");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "tasks", &amp;tasks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; tasks; i++) {</div><div class='add'>+        /* &lt;task&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"task");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; tasks; i++) {</div><div class='del'>-                /* &lt;task&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                 (xmlChar *)"task");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "task%d.type", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;task_type);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"type",</div><div class='add'>+                                              "%s", task_type);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "task%d.type", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;task_type);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"type",</div><div class='del'>-                                                       "%s", task_type);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "task%d.id", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;task_id_str);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"id",</div><div class='add'>+                                              "%s", task_id_str);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "task%d.id", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;task_id_str);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"id",</div><div class='del'>-                                                       "%s", task_id_str);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "task%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;status);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"status", "%d", status);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "task%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;status);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"status",</div><div class='del'>-                                                       "%d", status);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"statusStr",</div><div class='del'>-                                                       "%s",</div><div class='del'>-                                             cli_vol_task_status_str[status]);</div><div class='del'>-</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "task%d", i);</div><div class='del'>-                if (!strcmp (task_type, "Remove brick")) {</div><div class='del'>-                        ret = cli_xml_output_remove_brick_task_params</div><div class='del'>-                                (local-&gt;writer, dict, key);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                              (xmlChar *)"statusStr", "%s",</div><div class='add'>+                                              cli_vol_task_status_str[status]);</div><div class='ctx'> </div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/task&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "task%d", i);</div><div class='add'>+        if (!strcmp(task_type, "Remove brick")) {</div><div class='add'>+            ret = cli_xml_output_remove_brick_task_params(local-&gt;writer, dict,</div><div class='add'>+                                                          key);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/tasks&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/task&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* &lt;/tasks&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status_tasks_detail (cli_local_t *local, dict_t *dict)</div><div class='add'>+cli_xml_output_vol_status_tasks_detail(cli_local_t *local, dict_t *dict)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int    ret     = -1;</div><div class='del'>-        char  *volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='ctx'> </div><div class='del'>-        /*&lt;volume&gt;*/</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"volume");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /*&lt;volume&gt;*/</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volume");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"volName", "%s",</div><div class='del'>-                                               volname);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"volName",</div><div class='add'>+                                          "%s", volname);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_vol_status_tasks (local, dict);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_xml_output_vol_status_tasks(local, dict);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/volume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_status (cli_local_t *local, dict_t *dict)</div><div class='add'>+cli_xml_output_vol_status(cli_local_t *local, dict_t *dict)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        int                     brick_count = 0;</div><div class='del'>-        int                     brick_index_max = -1;</div><div class='del'>-        int                     other_count = 0;</div><div class='del'>-        int                     index_max = 0;</div><div class='del'>-        uint32_t                cmd = GF_CLI_STATUS_NONE;</div><div class='del'>-        int                     online = 0;</div><div class='del'>-        gf_boolean_t            node_present = _gf_true;</div><div class='del'>-        int                     i;</div><div class='del'>-        int                     type            = -1;</div><div class='del'>-        int                     hot_brick_count = -1;</div><div class='del'>-</div><div class='del'>-        /* &lt;volume&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"volume");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"volName", "%s",</div><div class='del'>-                                               volname);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    int brick_index_max = -1;</div><div class='add'>+    int other_count = 0;</div><div class='add'>+    int index_max = 0;</div><div class='add'>+    uint32_t cmd = GF_CLI_STATUS_NONE;</div><div class='add'>+    int online = 0;</div><div class='add'>+    gf_boolean_t node_present = _gf_true;</div><div class='add'>+    int i;</div><div class='add'>+    int type = -1;</div><div class='add'>+    int hot_brick_count = -1;</div><div class='add'>+</div><div class='add'>+    /* &lt;volume&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volume");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"volName",</div><div class='add'>+                                          "%s", volname);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"nodeCount",</div><div class='add'>+                                          "%d", brick_count);</div><div class='add'>+</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(dict, "cmd", &amp;cmd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "brick-index-max", &amp;brick_index_max);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(dict, "other-count", &amp;other_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    index_max = brick_index_max + other_count;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+        ret = dict_get_int32(dict, "hot_brick_count", &amp;hot_brick_count);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"nodeCount", "%d",</div><div class='del'>-                                               brick_count);</div><div class='del'>-</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint32 (dict, "cmd", &amp;cmd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "brick-index-max", &amp;brick_index_max);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (dict, "other-count", &amp;other_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        index_max = brick_index_max + other_count;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='del'>-        if (ret)</div><div class='add'>+        ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"hotBricks");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt;= index_max; i++) {</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_TIER &amp;&amp; i == hot_brick_count) {</div><div class='add'>+            /* &lt;/hotBricks&gt;*/</div><div class='add'>+            ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                            (xmlChar *)"coldBricks");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='add'>+        ret = cli_xml_output_vol_status_common(local-&gt;writer, dict, i, &amp;online,</div><div class='add'>+                                               &amp;node_present);</div><div class='add'>+        if (ret) {</div><div class='add'>+            if (node_present)</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-                ret = dict_get_int32 (dict, "hot_brick_count",</div><div class='del'>-                                      &amp;hot_brick_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterStartElement</div><div class='del'>-                        (local-&gt;writer, (xmlChar *)"hotBricks");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='add'>+            else</div><div class='add'>+                continue;</div><div class='ctx'>         }</div><div class='del'>-        for (i = 0; i &lt;= index_max; i++) {</div><div class='ctx'> </div><div class='del'>-                if (type == GF_CLUSTER_TYPE_TIER &amp;&amp; i == hot_brick_count) {</div><div class='add'>+        switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='add'>+            case GF_CLI_STATUS_DETAIL:</div><div class='add'>+                ret = cli_xml_output_vol_status_detail(local-&gt;writer, dict, i);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                        /* &lt;/hotBricks&gt;*/</div><div class='del'>-                        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                        (xmlChar *)"coldBricks");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='del'>-                ret = cli_xml_output_vol_status_common (local-&gt;writer, dict, i,</div><div class='del'>-                                                        &amp;online, &amp;node_present);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        if (node_present)</div><div class='del'>-                                goto out;</div><div class='del'>-                        else</div><div class='del'>-                                continue;</div><div class='add'>+            case GF_CLI_STATUS_MEM:</div><div class='add'>+                if (online) {</div><div class='add'>+                    ret = cli_xml_output_vol_status_mem(local-&gt;writer, dict, i);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        goto out;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='del'>-                case GF_CLI_STATUS_DETAIL:</div><div class='del'>-                        ret = cli_xml_output_vol_status_detail (local-&gt;writer,</div><div class='del'>-                                                                dict, i);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_MEM:</div><div class='del'>-                        if (online) {</div><div class='del'>-                                ret = cli_xml_output_vol_status_mem</div><div class='del'>-                                        (local-&gt;writer, dict, i);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_CLIENTS:</div><div class='del'>-                        if (online) {</div><div class='del'>-                                ret = cli_xml_output_vol_status_clients</div><div class='del'>-                                        (local-&gt;writer, dict, i);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_INODE:</div><div class='del'>-                        if (online) {</div><div class='del'>-                                ret = cli_xml_output_vol_status_inode</div><div class='del'>-                                        (local-&gt;writer, dict, i);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_FD:</div><div class='del'>-                        if (online) {</div><div class='del'>-                                ret = cli_xml_output_vol_status_fd</div><div class='del'>-                                        (local-&gt;writer, dict, i);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_CALLPOOL:</div><div class='del'>-                        if (online) {</div><div class='del'>-                                ret = cli_xml_output_vol_status_callpool</div><div class='del'>-                                        (local-&gt;writer, dict, i);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='add'>+            case GF_CLI_STATUS_CLIENTS:</div><div class='add'>+                if (online) {</div><div class='add'>+                    ret = cli_xml_output_vol_status_clients(local-&gt;writer, dict,</div><div class='add'>+                                                            i);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        goto out;</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='add'>+            case GF_CLI_STATUS_INODE:</div><div class='add'>+                if (online) {</div><div class='add'>+                    ret = cli_xml_output_vol_status_inode(local-&gt;writer, dict,</div><div class='add'>+                                                          i);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        goto out;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/node&gt;  was opened in cli_xml_output_vol_status_common()*/</div><div class='del'>-                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            case GF_CLI_STATUS_FD:</div><div class='add'>+                if (online) {</div><div class='add'>+                    ret = cli_xml_output_vol_status_fd(local-&gt;writer, dict, i);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        goto out;</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/coldBricks&gt;*/</div><div class='del'>-                if (type == GF_CLUSTER_TYPE_TIER &amp;&amp; i == brick_index_max) {</div><div class='del'>-                        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            case GF_CLI_STATUS_CALLPOOL:</div><div class='add'>+                if (online) {</div><div class='add'>+                    ret = cli_xml_output_vol_status_callpool(local-&gt;writer,</div><div class='add'>+                                                             dict, i);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        goto out;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Tasks are only present when a normal volume status call is done on a</div><div class='del'>-         * single volume or on all volumes</div><div class='del'>-         */</div><div class='del'>-        if (((cmd &amp; GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE) &amp;&amp;</div><div class='del'>-            (cmd &amp; (GF_CLI_STATUS_VOL|GF_CLI_STATUS_ALL))) {</div><div class='del'>-                ret = cli_xml_output_vol_status_tasks (local, dict);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        /* &lt;/node&gt;  was opened in cli_xml_output_vol_status_common()*/</div><div class='add'>+        ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        /* &lt;/coldBricks&gt;*/</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_TIER &amp;&amp; i == brick_index_max) {</div><div class='add'>+            ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* Tasks are only present when a normal volume status call is done on a</div><div class='add'>+     * single volume or on all volumes</div><div class='add'>+     */</div><div class='add'>+    if (((cmd &amp; GF_CLI_STATUS_MASK) == GF_CLI_STATUS_NONE) &amp;&amp;</div><div class='add'>+        (cmd &amp; (GF_CLI_STATUS_VOL | GF_CLI_STATUS_ALL))) {</div><div class='add'>+        ret = cli_xml_output_vol_status_tasks(local, dict);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* &lt;/volume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_top_rw_perf (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                int brick_index, int member_index)</div><div class='add'>+cli_xml_output_vol_top_rw_perf(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                               int brick_index, int member_index)</div><div class='ctx'> {</div><div class='del'>-        int        ret = -1;</div><div class='del'>-        char      *filename = NULL;</div><div class='del'>-        uint64_t   throughput = 0;</div><div class='del'>-        long int   time_sec = 0;</div><div class='del'>-        long int   time_usec = 0;</div><div class='del'>-        char       timestr[256] = {0,};</div><div class='del'>-        char       key[1024] = {0,};</div><div class='del'>-        int        len;</div><div class='del'>-</div><div class='del'>-        /* &lt;file&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"file");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-filename-%d", brick_index,</div><div class='del'>-                  member_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;filename);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"filename",</div><div class='del'>-                                               "%s", filename);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-value-%d", brick_index, member_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;throughput);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count",</div><div class='del'>-                                               "%"PRIu64, throughput);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-time-sec-%d", brick_index,</div><div class='del'>-                  member_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, (int32_t *)&amp;time_sec);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-time-usec-%d", brick_index,</div><div class='del'>-                  member_index);</div><div class='del'>-        ret = dict_get_int32 (dict, key, (int32_t *)&amp;time_usec);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, time_sec, gf_timefmt_FT);</div><div class='del'>-        len = strlen (timestr);</div><div class='del'>-        snprintf (timestr + len,</div><div class='del'>-                  sizeof (timestr) - len,</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, time_usec);</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"time",</div><div class='del'>-                                               "%s", timestr);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/file&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    uint64_t throughput = 0;</div><div class='add'>+    long int time_sec = 0;</div><div class='add'>+    long int time_usec = 0;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int len;</div><div class='add'>+</div><div class='add'>+    /* &lt;file&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"file");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-filename-%d", brick_index, member_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;filename);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"filename", "%s",</div><div class='add'>+                                          filename);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-value-%d", brick_index, member_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;throughput);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count",</div><div class='add'>+                                          "%" PRIu64, throughput);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-time-sec-%d", brick_index, member_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, (int32_t *)&amp;time_sec);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-time-usec-%d", brick_index, member_index);</div><div class='add'>+    ret = dict_get_int32(dict, key, (int32_t *)&amp;time_usec);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, time_sec, gf_timefmt_FT);</div><div class='add'>+    len = strlen(timestr);</div><div class='add'>+    snprintf(timestr + len, sizeof(timestr) - len, ".%" GF_PRI_SUSECONDS,</div><div class='add'>+             time_usec);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"time", "%s",</div><div class='add'>+                                          timestr);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/file&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_top_other (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                int brick_index, int member_index)</div><div class='add'>+cli_xml_output_vol_top_other(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                             int brick_index, int member_index)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *filename = NULL;</div><div class='del'>-        uint64_t        count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        /* &lt;file&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"file");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-filename-%d", brick_index,</div><div class='del'>-                  member_index);</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;filename);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"filename",</div><div class='del'>-                                               "%s", filename);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-value-%d", brick_index, member_index);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count",</div><div class='del'>-                                               "%"PRIu64, count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/file&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* &lt;file&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"file");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-filename-%d", brick_index, member_index);</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;filename);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"filename", "%s",</div><div class='add'>+                                          filename);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-value-%d", brick_index, member_index);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count",</div><div class='add'>+                                          "%" PRIu64, count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/file&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_top (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                        char *op_errstr)</div><div class='add'>+cli_xml_output_vol_top(dict_t *dict, int op_ret, int op_errno, char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        int                     brick_count = 0;</div><div class='del'>-        int                     top_op = GF_CLI_TOP_NONE;</div><div class='del'>-        char                    *brick_name = NULL;</div><div class='del'>-        int                     members = 0;</div><div class='del'>-        uint64_t                current_open = 0;</div><div class='del'>-        uint64_t                max_open = 0;</div><div class='del'>-        char                    *max_open_time = NULL;</div><div class='del'>-        double                  throughput = 0.0;</div><div class='del'>-        double                  time_taken = 0.0;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        int                     j = 0;</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;volTop&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volTop");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    int top_op = GF_CLI_TOP_NONE;</div><div class='add'>+    char *brick_name = NULL;</div><div class='add'>+    int members = 0;</div><div class='add'>+    uint64_t current_open = 0;</div><div class='add'>+    uint64_t max_open = 0;</div><div class='add'>+    char *max_open_time = NULL;</div><div class='add'>+    double throughput = 0.0;</div><div class='add'>+    double time_taken = 0.0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;volTop&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volTop");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickCount", "%d",</div><div class='add'>+                                          brick_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "1-top-op", &amp;top_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"topOp", "%d",</div><div class='add'>+                                          top_op);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    while (i &lt; brick_count) {</div><div class='add'>+        i++;</div><div class='add'>+</div><div class='add'>+        /* &lt;brick&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-brick", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;brick_name);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"brickCount",</div><div class='del'>-                                               "%d", brick_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              brick_name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "1-top-op", &amp;top_op);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-members", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;members);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"topOp",</div><div class='del'>-                                               "%d", top_op);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        while (i &lt; brick_count) {</div><div class='del'>-                i++;</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"members",</div><div class='add'>+                                              "%d", members);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;brick&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"brick");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        switch (top_op) {</div><div class='add'>+            case GF_CLI_TOP_OPEN:</div><div class='add'>+                snprintf(key, sizeof(key), "%d-current-open", i);</div><div class='add'>+                ret = dict_get_uint64(dict, key, &amp;current_open);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    writer, (xmlChar *)"currentOpen", "%" PRIu64, current_open);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%d-brick", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;brick_name);</div><div class='add'>+                snprintf(key, sizeof(key), "%d-max-open", i);</div><div class='add'>+                ret = dict_get_uint64(dict, key, &amp;max_open);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"name",</div><div class='del'>-                                                       "%s", brick_name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    writer, (xmlChar *)"maxOpen", "%" PRIu64, max_open);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key , sizeof (key), "%d-members", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;members);</div><div class='add'>+                snprintf(key, sizeof(key), "%d-max-openfd-time", i);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;max_open_time);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"members",</div><div class='del'>-                                                       "%d", members);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                switch (top_op) {</div><div class='del'>-                case GF_CLI_TOP_OPEN:</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-current-open", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;current_open);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (writer, (xmlChar *)"currentOpen", "%"PRIu64,</div><div class='del'>-                                 current_open);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-max-open", i);</div><div class='del'>-                        ret = dict_get_uint64 (dict, key, &amp;max_open);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (writer, (xmlChar *)"maxOpen", "%"PRIu64,</div><div class='del'>-                                 max_open);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-max-openfd-time", i);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;max_open_time);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (writer, (xmlChar *)"maxOpenTime", "%s",</div><div class='del'>-                                 max_open_time);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                case GF_CLI_TOP_READ:</div><div class='del'>-                case GF_CLI_TOP_WRITE:</div><div class='del'>-                case GF_CLI_TOP_OPENDIR:</div><div class='del'>-                case GF_CLI_TOP_READDIR:</div><div class='del'>-</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_TOP_READ_PERF:</div><div class='del'>-                case GF_CLI_TOP_WRITE_PERF:</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-throughput", i);</div><div class='del'>-                        ret = dict_get_double (dict, key, &amp;throughput);</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                snprintf (key, sizeof (key), "%d-time", i);</div><div class='del'>-                                ret = dict_get_double (dict, key, &amp;time_taken);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (writer, (xmlChar *)"throughput",</div><div class='del'>-                                         "%f", throughput);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (writer, (xmlChar *)"timeTaken",</div><div class='del'>-                                         "%f", time_taken);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    writer, (xmlChar *)"maxOpenTime", "%s", max_open_time);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            case GF_CLI_TOP_READ:</div><div class='add'>+            case GF_CLI_TOP_WRITE:</div><div class='add'>+            case GF_CLI_TOP_OPENDIR:</div><div class='add'>+            case GF_CLI_TOP_READDIR:</div><div class='add'>+</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            case GF_CLI_TOP_READ_PERF:</div><div class='add'>+            case GF_CLI_TOP_WRITE_PERF:</div><div class='add'>+                snprintf(key, sizeof(key), "%d-throughput", i);</div><div class='add'>+                ret = dict_get_double(dict, key, &amp;throughput);</div><div class='add'>+                if (!ret) {</div><div class='add'>+                    snprintf(key, sizeof(key), "%d-time", i);</div><div class='add'>+                    ret = dict_get_double(dict, key, &amp;time_taken);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                for (j = 1; j &lt;= members; j++) {</div><div class='del'>-                        if (top_op == GF_CLI_TOP_READ_PERF ||</div><div class='del'>-                            top_op == GF_CLI_TOP_WRITE_PERF) {</div><div class='del'>-                                ret = cli_xml_output_vol_top_rw_perf</div><div class='del'>-                                        (writer, dict, i, j);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = cli_xml_output_vol_top_other</div><div class='del'>-                                        (writer, dict, i, j);</div><div class='del'>-                        }</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='add'>+                if (!ret) {</div><div class='add'>+                    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                        writer, (xmlChar *)"throughput", "%f", throughput);</div><div class='add'>+                    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                        writer, (xmlChar *)"timeTaken", "%f", time_taken);</div><div class='add'>+                    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/brick&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            default:</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volTop&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+        for (j = 1; j &lt;= members; j++) {</div><div class='add'>+            if (top_op == GF_CLI_TOP_READ_PERF ||</div><div class='add'>+                top_op == GF_CLI_TOP_WRITE_PERF) {</div><div class='add'>+                ret = cli_xml_output_vol_top_rw_perf(writer, dict, i, j);</div><div class='add'>+            } else {</div><div class='add'>+                ret = cli_xml_output_vol_top_other(writer, dict, i, j);</div><div class='add'>+            }</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* &lt;/brick&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* &lt;/volTop&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_profile_stats (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                  int brick_index, int interval)</div><div class='add'>+cli_xml_output_vol_profile_stats(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                 int brick_index, int interval)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        uint64_t                read_count = 0;</div><div class='del'>-        uint64_t                write_count = 0;</div><div class='del'>-        uint64_t                hits = 0;</div><div class='del'>-        double                  avg_latency = 0.0;</div><div class='del'>-        double                  max_latency = 0.0;</div><div class='del'>-        double                  min_latency = 0.0;</div><div class='del'>-        uint64_t                duration = 0;</div><div class='del'>-        uint64_t                total_read = 0;</div><div class='del'>-        uint64_t                total_write = 0;</div><div class='del'>-        char                    key[1024] = {0};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-</div><div class='del'>-        /* &lt;cumulativeStats&gt; || &lt;intervalStats&gt; */</div><div class='del'>-        if (interval == -1)</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"cumulativeStats");</div><div class='del'>-        else</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"intervalStats");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;blockStats&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"blockStats");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 32; i++) {</div><div class='del'>-                /* &lt;block&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"block");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"size", "%"PRIu32, (1 &lt;&lt; i));</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-read-%d", brick_index,</div><div class='del'>-                          interval, (1 &lt;&lt; i));</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;read_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        read_count = 0;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"reads", "%"PRIu64, read_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-write-%d", brick_index,</div><div class='del'>-                          interval, (1 &lt;&lt; i));</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;write_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        write_count = 0;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"writes", "%"PRIu64, write_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                /* &lt;/block&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* &lt;/blockStats&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;fopStats&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"fopStats");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-hits", brick_index,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;hits);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t read_count = 0;</div><div class='add'>+    uint64_t write_count = 0;</div><div class='add'>+    uint64_t hits = 0;</div><div class='add'>+    double avg_latency = 0.0;</div><div class='add'>+    double max_latency = 0.0;</div><div class='add'>+    double min_latency = 0.0;</div><div class='add'>+    uint64_t duration = 0;</div><div class='add'>+    uint64_t total_read = 0;</div><div class='add'>+    uint64_t total_write = 0;</div><div class='add'>+    char key[1024] = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* &lt;cumulativeStats&gt; || &lt;intervalStats&gt; */</div><div class='add'>+    if (interval == -1)</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"cumulativeStats");</div><div class='add'>+    else</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"intervalStats");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;blockStats&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"blockStats");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 32; i++) {</div><div class='add'>+        /* &lt;block&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"block");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-avglatency", brick_index,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;avg_latency);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size",</div><div class='add'>+                                              "%" PRIu32, (1 &lt;&lt; i));</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-minlatency", brick_index,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;min_latency);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-read-%d", brick_index, interval,</div><div class='add'>+                 (1 &lt;&lt; i));</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;read_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            read_count = 0;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"reads",</div><div class='add'>+                                              "%" PRIu64, read_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-maxlatency", brick_index,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;max_latency);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-write-%d", brick_index, interval,</div><div class='add'>+                 (1 &lt;&lt; i));</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;write_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            write_count = 0;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"writes",</div><div class='add'>+                                              "%" PRIu64, write_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;fop&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"fop");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/block&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"name","%s", gf_fop_list[i]);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/blockStats&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"hits", "%"PRIu64, hits);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;fopStats&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"fopStats");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"avgLatency", "%f", avg_latency);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-hits", brick_index, interval, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;hits);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"minLatency", "%f", min_latency);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-avglatency", brick_index, interval,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;avg_latency);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"maxLatency", "%f", max_latency);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-minlatency", brick_index, interval,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;min_latency);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/fop&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-maxlatency", brick_index, interval,</div><div class='add'>+                 i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;max_latency);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='ctx'> </div><div class='del'>-cont:</div><div class='del'>-                hits = 0;</div><div class='del'>-                avg_latency = 0.0;</div><div class='del'>-                min_latency = 0.0;</div><div class='del'>-                max_latency = 0.0;</div><div class='del'>-        }</div><div class='add'>+        /* &lt;fop&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"fop");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='del'>-                hits = 0;</div><div class='del'>-                avg_latency = 0.0;</div><div class='del'>-                min_latency = 0.0;</div><div class='del'>-                max_latency = 0.0;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              gf_fop_list[i]);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-%d-upcall-hits", brick_index,</div><div class='del'>-                          interval, i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;hits);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hits",</div><div class='add'>+                                              "%" PRIu64, hits);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;fop&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"fop");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"avgLatency",</div><div class='add'>+                                              "%f", avg_latency);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"name", "%s", gf_fop_list[i]);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"minLatency",</div><div class='add'>+                                              "%f", min_latency);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"hits", "%"PRIu64, hits);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxLatency",</div><div class='add'>+                                              "%f", max_latency);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"avgLatency", "%f", avg_latency);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/fop&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"minLatency", "%f", min_latency);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    cont:</div><div class='add'>+        hits = 0;</div><div class='add'>+        avg_latency = 0.0;</div><div class='add'>+        min_latency = 0.0;</div><div class='add'>+        max_latency = 0.0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='add'>+        hits = 0;</div><div class='add'>+        avg_latency = 0.0;</div><div class='add'>+        min_latency = 0.0;</div><div class='add'>+        max_latency = 0.0;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%d-upcall-hits", brick_index,</div><div class='add'>+                 interval, i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;hits);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"maxLatency", "%f", max_latency);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;fop&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"fop");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/fop&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              gf_fop_list[i]);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/fopStats&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hits",</div><div class='add'>+                                              "%" PRIu64, hits);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-duration", brick_index, interval);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;duration);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"duration",</div><div class='del'>-                                               "%"PRIu64, duration);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"avgLatency",</div><div class='add'>+                                              "%f", avg_latency);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-total-read", brick_index, interval);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;total_read);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"totalRead",</div><div class='del'>-                                               "%"PRIu64, total_read);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"minLatency",</div><div class='add'>+                                              "%f", min_latency);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-total-write", brick_index, interval);</div><div class='del'>-        ret = dict_get_uint64 (dict, key, &amp;total_write);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"totalWrite",</div><div class='del'>-                                               "%"PRIu64, total_write);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"maxLatency",</div><div class='add'>+                                              "%f", max_latency);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/cumulativeStats&gt; || &lt;/intervalStats&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/fop&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* &lt;/fopStats&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-duration", brick_index, interval);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;duration);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"duration",</div><div class='add'>+                                          "%" PRIu64, duration);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-total-read", brick_index, interval);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;total_read);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"totalRead",</div><div class='add'>+                                          "%" PRIu64, total_read);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-total-write", brick_index, interval);</div><div class='add'>+    ret = dict_get_uint64(dict, key, &amp;total_write);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"totalWrite",</div><div class='add'>+                                          "%" PRIu64, total_write);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/cumulativeStats&gt; || &lt;/intervalStats&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_profile (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                            char *op_errstr)</div><div class='add'>+cli_xml_output_vol_profile(dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                           char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        int                     op = GF_CLI_STATS_NONE;</div><div class='del'>-        int                     info_op = GF_CLI_INFO_NONE;</div><div class='del'>-        int                     brick_count = 0;</div><div class='del'>-        char                    *brick_name = NULL;</div><div class='del'>-        int                     interval = 0;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        int                     stats_cleared = 0;</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;volProfile&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volProfile");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"volname",</div><div class='del'>-                                               "%s", volname);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "op", &amp;op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"profileOp",</div><div class='del'>-                                               "%d", op);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        if (GF_CLI_STATS_INFO != op)</div><div class='del'>-                goto cont;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int op = GF_CLI_STATS_NONE;</div><div class='add'>+    int info_op = GF_CLI_INFO_NONE;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    char *brick_name = NULL;</div><div class='add'>+    int interval = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int stats_cleared = 0;</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;volProfile&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volProfile");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volname", "%s",</div><div class='add'>+                                          volname);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "op", &amp;op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"profileOp", "%d",</div><div class='add'>+                                          op);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    if (GF_CLI_STATS_INFO != op)</div><div class='add'>+        goto cont;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;brick_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickCount", "%d",</div><div class='add'>+                                          brick_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "info-op", &amp;info_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    while (i &lt; brick_count) {</div><div class='add'>+        i++;</div><div class='add'>+</div><div class='add'>+        /* &lt;brick&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;brick_count);</div><div class='add'>+        snprintf(key, sizeof(key), "%d-brick", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;brick_name);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"brickCount",</div><div class='del'>-                                               "%d", brick_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickName",</div><div class='add'>+                                              "%s", brick_name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "info-op", &amp;info_op);</div><div class='del'>-        if (ret)</div><div class='add'>+        if (GF_CLI_INFO_CLEAR == info_op) {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-stats-cleared", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;stats_cleared);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='ctx'> </div><div class='del'>-        while (i &lt; brick_count) {</div><div class='del'>-                i++;</div><div class='del'>-</div><div class='del'>-                /* &lt;brick&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"brick");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%d-brick", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;brick_name);</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"clearStats", "%s",</div><div class='add'>+                stats_cleared ? "Cleared stats." : "Failed to clear stats.");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-cumulative", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;interval);</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                ret = cli_xml_output_vol_profile_stats(writer, dict, i,</div><div class='add'>+                                                       interval);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"brickName", "%s", brick_name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                if (GF_CLI_INFO_CLEAR == info_op) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-stats-cleared", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;stats_cleared);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (writer, (xmlChar *)"clearStats", "%s",</div><div class='del'>-                                stats_cleared ? "Cleared stats." :</div><div class='del'>-                                                 "Failed to clear stats.");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-cumulative", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;interval);</div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                ret = cli_xml_output_vol_profile_stats</div><div class='del'>-                                        (writer, dict, i, interval);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-interval", i);</div><div class='del'>-                        ret = dict_get_int32 (dict, key, &amp;interval);</div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                ret = cli_xml_output_vol_profile_stats</div><div class='del'>-                                        (writer, dict, i, interval);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* &lt;/brick&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "%d-interval", i);</div><div class='add'>+            ret = dict_get_int32(dict, key, &amp;interval);</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                ret = cli_xml_output_vol_profile_stats(writer, dict, i,</div><div class='add'>+                                                       interval);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        /* &lt;/brick&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> cont:</div><div class='del'>-        /* &lt;/volProfile&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/volProfile&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_list (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                         char *op_errstr)</div><div class='add'>+cli_xml_output_vol_list(dict_t *dict, int op_ret, int op_errno, char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        int                     count = 0;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;volList&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volList");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                          count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;volname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;volList&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volList");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count",</div><div class='del'>-                                               "%d", count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "volume%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"volume",</div><div class='del'>-                                                       "%s", volname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volume", "%s",</div><div class='add'>+                                              volname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volList&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/volList&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_info_option (xmlTextWriterPtr writer, char *substr,</div><div class='del'>-                                char *optstr, char *valstr)</div><div class='add'>+cli_xml_output_vol_info_option(xmlTextWriterPtr writer, char *substr,</div><div class='add'>+                               char *optstr, char *valstr)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *ptr1 = NULL;</div><div class='del'>-        char            *ptr2 = NULL;</div><div class='del'>-</div><div class='del'>-        ptr1 = substr;</div><div class='del'>-        ptr2 = optstr;</div><div class='del'>-</div><div class='del'>-        while (ptr1) {</div><div class='del'>-                if (*ptr1 != *ptr2)</div><div class='del'>-                        break;</div><div class='del'>-                ptr1++;</div><div class='del'>-                ptr2++;</div><div class='del'>-                if (!*ptr1)</div><div class='del'>-                        break;</div><div class='del'>-                if (!*ptr2)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        if (*ptr2 == '\0')</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;option&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"option");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"name",</div><div class='del'>-                                               "%s", ptr2);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"value",</div><div class='del'>-                                               "%s", valstr);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/option&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *ptr1 = NULL;</div><div class='add'>+    char *ptr2 = NULL;</div><div class='add'>+</div><div class='add'>+    ptr1 = substr;</div><div class='add'>+    ptr2 = optstr;</div><div class='add'>+</div><div class='add'>+    while (ptr1) {</div><div class='add'>+        if (*ptr1 != *ptr2)</div><div class='add'>+            break;</div><div class='add'>+        ptr1++;</div><div class='add'>+        ptr2++;</div><div class='add'>+        if (!*ptr1)</div><div class='add'>+            break;</div><div class='add'>+        if (!*ptr2)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    if (*ptr2 == '\0')</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;option&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"option");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          ptr2);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"value", "%s",</div><div class='add'>+                                          valstr);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/option&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct tmp_xml_option_logger {</div><div class='del'>-        char *key;</div><div class='del'>-        xmlTextWriterPtr writer;</div><div class='add'>+    char *key;</div><div class='add'>+    xmlTextWriterPtr writer;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_output_vol_info_option (dict_t *d, char *k, data_t *v,</div><div class='del'>-                         void *data)</div><div class='add'>+_output_vol_info_option(dict_t *d, char *k, data_t *v, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                           ret   = 0;</div><div class='del'>-        char                         *ptr   = NULL;</div><div class='del'>-        struct tmp_xml_option_logger *tmp   = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    struct tmp_xml_option_logger *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        tmp = data;</div><div class='add'>+    tmp = data;</div><div class='ctx'> </div><div class='del'>-        ptr = strstr (k, "option.");</div><div class='del'>-        if (!ptr)</div><div class='del'>-                goto out;</div><div class='add'>+    ptr = strstr(k, "option.");</div><div class='add'>+    if (!ptr)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!v) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = cli_xml_output_vol_info_option (tmp-&gt;writer, tmp-&gt;key, k,</div><div class='del'>-                                              v-&gt;data);</div><div class='add'>+    if (!v) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = cli_xml_output_vol_info_option(tmp-&gt;writer, tmp-&gt;key, k, v-&gt;data);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_info_options (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                 char *prefix)</div><div class='add'>+cli_xml_output_vol_info_options(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             opt_count = 0;</div><div class='del'>-        char            key[1024] = {0,};</div><div class='del'>-        struct tmp_xml_option_logger tmp = {0,};</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.opt_count", prefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;opt_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"optCount",</div><div class='del'>-                                               "%d", opt_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;options&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"options");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        snprintf (key, sizeof (key), "%s.option.", prefix);</div><div class='del'>-</div><div class='del'>-        tmp.key = key;</div><div class='del'>-        tmp.writer = writer;</div><div class='del'>-        ret = dict_foreach (dict, _output_vol_info_option, &amp;tmp);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;/options&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int opt_count = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct tmp_xml_option_logger tmp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.opt_count", prefix);</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;opt_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"optCount", "%d",</div><div class='add'>+                                          opt_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;options&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"options");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.option.", prefix);</div><div class='add'>+</div><div class='add'>+    tmp.key = key;</div><div class='add'>+    tmp.writer = writer;</div><div class='add'>+    ret = dict_foreach(dict, _output_vol_info_option, &amp;tmp);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;/options&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)</div><div class='add'>+cli_xml_output_vol_info(cli_local_t *local, dict_t *dict)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        int                     count = 0;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        char                    *volume_id = NULL;</div><div class='del'>-        char                    *uuid = NULL;</div><div class='del'>-        int                     type = 0;</div><div class='del'>-        int                     status = 0;</div><div class='del'>-        int                     brick_count = 0;</div><div class='del'>-        int                     dist_count = 0;</div><div class='del'>-        int                     stripe_count = 0;</div><div class='del'>-        int                     replica_count = 0;</div><div class='del'>-        int                     arbiter_count = 0;</div><div class='del'>-        int                     snap_count    = 0;</div><div class='del'>-        int                     isArbiter = 0;</div><div class='del'>-        int                     disperse_count = 0;</div><div class='del'>-        int                     redundancy_count = 0;</div><div class='del'>-        int                     transport = 0;</div><div class='del'>-        char                    *brick = NULL;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        int                     j = 1;</div><div class='del'>-        char                    *caps __attribute__((unused)) = NULL;</div><div class='del'>-        int                     k __attribute__((unused)) = 0;</div><div class='del'>-        int                     index = 1;</div><div class='del'>-        int                     tier_vol_type          = 0;</div><div class='del'>-        /* hot dist count is always zero so need for it to be</div><div class='del'>-         * included in the array.*/</div><div class='del'>-        int                     hot_dist_count         = 0;</div><div class='del'>-        values                  c                      = 0;</div><div class='del'>-        char                    *keys[MAX]              = {</div><div class='del'>-                [COLD_BRICK_COUNT]      = "volume%d.cold_brick_count",</div><div class='del'>-                [COLD_TYPE]             = "volume%d.cold_type",</div><div class='del'>-                [COLD_DIST_COUNT]       = "volume%d.cold_dist_count",</div><div class='del'>-                [COLD_REPLICA_COUNT]    = "volume%d.cold_replica_count",</div><div class='del'>-                [COLD_ARBITER_COUNT]    = "volume%d.cold_arbiter_count",</div><div class='del'>-                [COLD_DISPERSE_COUNT]   = "volume%d.cold_disperse_count",</div><div class='del'>-                [COLD_REDUNDANCY_COUNT] = "volume%d.cold_redundancy_count",</div><div class='del'>-                [HOT_BRICK_COUNT]       = "volume%d.hot_brick_count",</div><div class='del'>-                [HOT_TYPE]              = "volume%d.hot_type",</div><div class='del'>-                [HOT_REPLICA_COUNT]     = "volume%d.hot_replica_count"};</div><div class='del'>-        int                     value[MAX]             = {};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *volume_id = NULL;</div><div class='add'>+    char *uuid = NULL;</div><div class='add'>+    int type = 0;</div><div class='add'>+    int status = 0;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    int dist_count = 0;</div><div class='add'>+    int stripe_count = 0;</div><div class='add'>+    int replica_count = 0;</div><div class='add'>+    int arbiter_count = 0;</div><div class='add'>+    int snap_count = 0;</div><div class='add'>+    int isArbiter = 0;</div><div class='add'>+    int disperse_count = 0;</div><div class='add'>+    int redundancy_count = 0;</div><div class='add'>+    int transport = 0;</div><div class='add'>+    char *brick = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 1;</div><div class='add'>+    char *caps __attribute__((unused)) = NULL;</div><div class='add'>+    int k __attribute__((unused)) = 0;</div><div class='add'>+    int index = 1;</div><div class='add'>+    int tier_vol_type = 0;</div><div class='add'>+    /* hot dist count is always zero so need for it to be</div><div class='add'>+     * included in the array.*/</div><div class='add'>+    int hot_dist_count = 0;</div><div class='add'>+    values c = 0;</div><div class='add'>+    char *keys[MAX] = {</div><div class='add'>+        [COLD_BRICK_COUNT] = "volume%d.cold_brick_count",</div><div class='add'>+        [COLD_TYPE] = "volume%d.cold_type",</div><div class='add'>+        [COLD_DIST_COUNT] = "volume%d.cold_dist_count",</div><div class='add'>+        [COLD_REPLICA_COUNT] = "volume%d.cold_replica_count",</div><div class='add'>+        [COLD_ARBITER_COUNT] = "volume%d.cold_arbiter_count",</div><div class='add'>+        [COLD_DISPERSE_COUNT] = "volume%d.cold_disperse_count",</div><div class='add'>+        [COLD_REDUNDANCY_COUNT] = "volume%d.cold_redundancy_count",</div><div class='add'>+        [HOT_BRICK_COUNT] = "volume%d.hot_brick_count",</div><div class='add'>+        [HOT_TYPE] = "volume%d.hot_type",</div><div class='add'>+        [HOT_REPLICA_COUNT] = "volume%d.hot_replica_count"};</div><div class='add'>+    int value[MAX] = {};</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        /* &lt;volume&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volume");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.name", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;volname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"name",</div><div class='add'>+                                              "%s", volname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                /* &lt;volume&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                 (xmlChar *)"volume");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.volume_id", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;volume_id);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"id",</div><div class='add'>+                                              "%s", volume_id);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.name", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"name",</div><div class='del'>-                                                       "%s", volname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.status", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;status);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"status", "%d", status);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.volume_id", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;volume_id);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"id",</div><div class='del'>-                                                       "%s", volume_id);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                              (xmlChar *)"statusStr", "%s",</div><div class='add'>+                                              cli_vol_status_str[status]);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.status", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;status);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"status",</div><div class='del'>-                                                       "%d", status);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret =xmlTextWriterWriteFormatElement</div><div class='del'>-                        (local-&gt;writer, (xmlChar *)"statusStr", "%s",</div><div class='del'>-                         cli_vol_status_str[status]);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.snap_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;snap_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                     (xmlChar *)"snapshotCount",</div><div class='del'>-                                                     "%d", snap_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.snap_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;snap_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"snapshotCount", "%d", snap_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.brick_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;brick_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"brickCount", "%d", brick_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.brick_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;brick_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"brickCount",</div><div class='del'>-                                                       "%d", brick_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.dist_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;dist_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"distCount", "%d", dist_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.dist_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;dist_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"distCount",</div><div class='del'>-                                                       "%d", dist_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.stripe_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;stripe_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"stripeCount", "%d", stripe_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.stripe_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;stripe_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"stripeCount",</div><div class='del'>-                                                       "%d", stripe_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.replica_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;replica_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"replicaCount", "%d", replica_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.replica_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;replica_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"replicaCount",</div><div class='del'>-                                                       "%d", replica_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.arbiter_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;arbiter_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"arbiterCount", "%d", arbiter_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.arbiter_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;arbiter_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                      (xmlChar *)"arbiterCount",</div><div class='del'>-                                                      "%d", arbiter_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.disperse_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;disperse_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"disperseCount", "%d", disperse_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.redundancy_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;redundancy_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                              (xmlChar *)"redundancyCount",</div><div class='add'>+                                              "%d", redundancy_count);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.type", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;type);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        /* For Distributed-(stripe,replicate,stipe-replicate,disperse)</div><div class='add'>+           types</div><div class='add'>+         */</div><div class='add'>+        type = get_vol_type(type, dist_count, brick_count);</div><div class='add'>+</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"type",</div><div class='add'>+                                              "%d", type);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"typeStr", "%s", vol_type_str[type]);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d.transport", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;transport);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            local-&gt;writer, (xmlChar *)"transport", "%d", transport);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+#ifdef HAVE_BD_XLATOR</div><div class='add'>+        /* &lt;xlators&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"xlators");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        for (k = 0;; k++) {</div><div class='add'>+            snprintf(key, sizeof(key), "volume%d.xlator%d", i, k);</div><div class='add'>+            ret = dict_get_str(dict, key, &amp;caps);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            /* &lt;xlator&gt; */</div><div class='add'>+            ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"xlator");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"name", "%s", caps);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.disperse_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;disperse_count);</div><div class='add'>+            /* &lt;capabilities&gt; */</div><div class='add'>+            ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                            (xmlChar *)"capabilities");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            j = 0;</div><div class='add'>+            for (j = 0;; j++) {</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.xlator%d.caps%d", i, k, j);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;caps);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"disperseCount",</div><div class='del'>-                                                       "%d", disperse_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                    break;</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"capability", "%s", caps);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            }</div><div class='add'>+            /* &lt;/capabilities&gt; */</div><div class='add'>+            ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            /* &lt;/xlator&gt; */</div><div class='add'>+            ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='add'>+        ret = xmlTextWriterFullEndElement(local-&gt;writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        /* &lt;/xlators&gt; */</div><div class='add'>+#endif</div><div class='add'>+        j = 1;</div><div class='add'>+</div><div class='add'>+        /* &lt;bricks&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"bricks");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.redundancy_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;redundancy_count);</div><div class='add'>+        if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+            /*the values for hot stripe, disperse and redundancy</div><div class='add'>+             * should not be looped in here as they are zero</div><div class='add'>+             * always */</div><div class='add'>+            for (c = COLD_BRICK_COUNT; c &lt; MAX; c++) {</div><div class='add'>+                snprintf(key, 256, keys[c], i);</div><div class='add'>+                ret = dict_get_int32(dict, key, &amp;value[c]);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"redundancyCount",</div><div class='del'>-                                                       "%d", redundancy_count);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            hot_dist_count = (value[HOT_REPLICA_COUNT]</div><div class='add'>+                                  ? value[HOT_REPLICA_COUNT]</div><div class='add'>+                                  : 1);</div><div class='add'>+</div><div class='add'>+            tier_vol_type = get_vol_type(value[HOT_TYPE], hot_dist_count,</div><div class='add'>+                                         value[HOT_BRICK_COUNT]);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.type", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;type);</div><div class='add'>+            if ((value[HOT_TYPE] != GF_CLUSTER_TYPE_TIER) &amp;&amp;</div><div class='add'>+                (value[HOT_TYPE] &gt; 0) &amp;&amp;</div><div class='add'>+                (hot_dist_count &lt; value[HOT_BRICK_COUNT]))</div><div class='add'>+                tier_vol_type = value[HOT_TYPE] + GF_CLUSTER_TYPE_MAX - 1;</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                            (xmlChar *)"hotBricks");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"hotBrickType", "%s",</div><div class='add'>+                vol_type_str[tier_vol_type]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"hotreplicaCount", "%d",</div><div class='add'>+                value[HOT_REPLICA_COUNT]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                                  (xmlChar *)"hotbrickCount",</div><div class='add'>+                                                  "%d", value[HOT_BRICK_COUNT]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            if (value[HOT_TYPE] == GF_CLUSTER_TYPE_NONE ||</div><div class='add'>+                value[HOT_TYPE] == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"numberOfBricks", "%d",</div><div class='add'>+                    value[HOT_BRICK_COUNT]);</div><div class='add'>+            } else {</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"numberOfBricks", "%d x %d = %d",</div><div class='add'>+                    (value[HOT_BRICK_COUNT] / hot_dist_count), hot_dist_count,</div><div class='add'>+                    value[HOT_BRICK_COUNT]);</div><div class='add'>+            }</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            while (index &lt;= value[HOT_BRICK_COUNT]) {</div><div class='add'>+                snprintf(key, 1024, "volume%d.brick%d", i, index);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;brick);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                /* For Distributed-(stripe,replicate,stipe-replicate,disperse)</div><div class='del'>-                   types</div><div class='del'>-                 */</div><div class='del'>-                type = get_vol_type (type, dist_count, brick_count);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"type",</div><div class='del'>-                                                       "%d", type);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"typeStr",</div><div class='del'>-                                                       "%s",</div><div class='del'>-                                                       vol_type_str[type]);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "volume%d.transport", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;transport);</div><div class='add'>+                    goto out;</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                                (xmlChar *)"brick");</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, index);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;uuid);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                       (xmlChar *)"transport",</div><div class='del'>-                                                       "%d", transport);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatAttribute(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"uuid", "%s", uuid);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_BD_XLATOR</div><div class='del'>-                /* &lt;xlators&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                 (xmlChar *)"xlators");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                for (k = 0; ; k++) {</div><div class='del'>-                        snprintf (key, sizeof (key),"volume%d.xlator%d", i, k);</div><div class='del'>-                        ret = dict_get_str (dict, key, &amp;caps);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        /* &lt;xlator&gt; */</div><div class='del'>-                        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                         (xmlChar *)"xlator");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (local-&gt;writer, (xmlChar *)"name", "%s", caps);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        /* &lt;capabilities&gt; */</div><div class='del'>-                        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                         (xmlChar *)</div><div class='del'>-                                                         "capabilities");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        j = 0;</div><div class='del'>-                        for (j = 0; ;j++) {</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.xlator%d.caps%d", i, k, j);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;caps);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        break;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"capability",</div><div class='del'>-                                         "%s", caps);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        }</div><div class='del'>-                        /* &lt;/capabilities&gt; */</div><div class='del'>-                        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        /* &lt;/xlator&gt; */</div><div class='del'>-                        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='del'>-                ret = xmlTextWriterFullEndElement (local-&gt;writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                /* &lt;/xlators&gt; */</div><div class='del'>-#endif</div><div class='del'>-                j = 1;</div><div class='del'>-</div><div class='del'>-                /* &lt;bricks&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                 (xmlChar *)"bricks");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                if (type == GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-                        /*the values for hot stripe, disperse and redundancy</div><div class='del'>-                         * should not be looped in here as they are zero</div><div class='del'>-                         * always */</div><div class='del'>-                        for (c = COLD_BRICK_COUNT; c &lt; MAX; c++) {</div><div class='del'>-</div><div class='del'>-                                snprintf (key, 256, keys[c], i);</div><div class='del'>-                                ret = dict_get_int32 (dict, key, &amp;value[c]);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        hot_dist_count = (value[HOT_REPLICA_COUNT] ?</div><div class='del'>-                                          value[HOT_REPLICA_COUNT] : 1);</div><div class='del'>-</div><div class='del'>-                        tier_vol_type = get_vol_type (value[HOT_TYPE],</div><div class='del'>-                                                      hot_dist_count,</div><div class='del'>-                                                      value[HOT_BRICK_COUNT]);</div><div class='del'>-</div><div class='del'>-                        if ((value[HOT_TYPE] != GF_CLUSTER_TYPE_TIER) &amp;&amp;</div><div class='del'>-                            (value[HOT_TYPE] &gt; 0) &amp;&amp;</div><div class='del'>-                            (hot_dist_count &lt; value[HOT_BRICK_COUNT]))</div><div class='del'>-                                tier_vol_type = value[HOT_TYPE] +</div><div class='del'>-                                        GF_CLUSTER_TYPE_MAX - 1;</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                         (xmlChar *)</div><div class='del'>-                                                         "hotBricks");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (local-&gt;writer, (xmlChar *)"hotBrickType",</div><div class='del'>-                                 "%s", vol_type_str[tier_vol_type]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                   (xmlChar *)"hotreplicaCount",</div><div class='del'>-                                                    "%d",</div><div class='del'>-                                                    value[HOT_REPLICA_COUNT]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                   (xmlChar *)"hotbrickCount",</div><div class='del'>-                                                    "%d",</div><div class='del'>-                                                    value[HOT_BRICK_COUNT]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        if (value[HOT_TYPE] == GF_CLUSTER_TYPE_NONE ||</div><div class='del'>-                                        value[HOT_TYPE] ==</div><div class='del'>-                                        GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *)"numberOfBricks",</div><div class='del'>-                                         "%d", value[HOT_BRICK_COUNT]);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *)"numberOfBricks",</div><div class='del'>-                                         "%d x %d = %d",</div><div class='del'>-                                         (value[HOT_BRICK_COUNT] /</div><div class='del'>-                                          hot_dist_count),</div><div class='del'>-                                         hot_dist_count,</div><div class='del'>-                                         value[HOT_BRICK_COUNT]);</div><div class='del'>-                        }</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        while (index &lt;= value[HOT_BRICK_COUNT]) {</div><div class='del'>-                                snprintf (key, 1024, "volume%d.brick%d", i,</div><div class='del'>-                                          index);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterStartElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"brick");</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.brick%d.uuid", i, index);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;uuid);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatAttribute</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"uuid", "%s",</div><div class='del'>-                                         uuid);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatString</div><div class='del'>-                                        (local-&gt;writer, "%s", brick);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"name", "%s",</div><div class='del'>-                                         brick);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"hostUuid",</div><div class='del'>-                                         "%s", uuid);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                index++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        tier_vol_type = get_vol_type (value[COLD_TYPE],</div><div class='del'>-                                                      value[COLD_DIST_COUNT],</div><div class='del'>-                                                      value[COLD_BRICK_COUNT]);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                                         (xmlChar *)</div><div class='del'>-                                                         "coldBricks");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (local-&gt;writer, (xmlChar *)"coldBrickType",</div><div class='del'>-                                 "%s", vol_type_str[tier_vol_type]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                        (xmlChar *)"coldreplicaCount",</div><div class='del'>-                                        "%d", value[COLD_REPLICA_COUNT]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                        (xmlChar *)"coldarbiterCount",</div><div class='del'>-                                        "%d", value[COLD_ARBITER_COUNT]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                                   (xmlChar *)"coldbrickCount",</div><div class='del'>-                                                    "%d",</div><div class='del'>-                                                    value[COLD_BRICK_COUNT]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                              (xmlChar *)"colddisperseCount",</div><div class='del'>-                                              "%d", value[COLD_DISPERSE_COUNT]);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        if (value[COLD_TYPE] == GF_CLUSTER_TYPE_NONE ||</div><div class='del'>-                                        value[COLD_TYPE] ==</div><div class='del'>-                                        GF_CLUSTER_TYPE_TIER) {</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *)"numberOfBricks",</div><div class='del'>-                                         "%d", value[COLD_BRICK_COUNT]);</div><div class='del'>-                        } else if (value[COLD_TYPE] ==</div><div class='del'>-                                        GF_CLUSTER_TYPE_DISPERSE) {</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *)"numberOfBricks",</div><div class='del'>-                                         " %d x (%d + %d) = %d",</div><div class='del'>-                                         (value[COLD_BRICK_COUNT] /</div><div class='del'>-                                          value[COLD_DIST_COUNT]),</div><div class='del'>-                                         value[COLD_DISPERSE_COUNT] -</div><div class='del'>-                                         value[COLD_REDUNDANCY_COUNT],</div><div class='del'>-                                         value[COLD_REDUNDANCY_COUNT],</div><div class='del'>-                                         value[COLD_BRICK_COUNT]);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *)"numberOfBricks",</div><div class='del'>-                                         "%d x %d = %d",</div><div class='del'>-                                         (value[COLD_BRICK_COUNT] /</div><div class='del'>-                                          value[COLD_DIST_COUNT]),</div><div class='add'>+                ret = xmlTextWriterWriteFormatString(local-&gt;writer, "%s",</div><div class='add'>+                                                     brick);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"name", "%s", brick);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"hostUuid", "%s", uuid);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                index++;</div><div class='add'>+            }</div><div class='add'>+            ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            tier_vol_type = get_vol_type(value[COLD_TYPE],</div><div class='ctx'>                                          value[COLD_DIST_COUNT],</div><div class='ctx'>                                          value[COLD_BRICK_COUNT]);</div><div class='del'>-                        }</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        index = value[HOT_BRICK_COUNT] + 1;</div><div class='del'>-</div><div class='del'>-                        while (index &lt;= brick_count) {</div><div class='del'>-                                snprintf (key, 1024, "volume%d.brick%d", i,</div><div class='del'>-                                          index);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterStartElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"brick");</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.brick%d.uuid", i, index);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;uuid);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatAttribute</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"uuid", "%s",</div><div class='del'>-                                         uuid);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatString</div><div class='del'>-                                        (local-&gt;writer, "%s", brick);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"name", "%s",</div><div class='del'>-                                         brick);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"hostUuid",</div><div class='del'>-                                         "%s", uuid);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.brick%d.isArbiter", i,</div><div class='del'>-                                          index);</div><div class='del'>-                                if (dict_get (dict, key))</div><div class='del'>-                                        isArbiter = 1;</div><div class='del'>-                                else</div><div class='del'>-                                        isArbiter = 0;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"isArbiter",</div><div class='del'>-                                         "%d", isArbiter);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                index++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        while (j &lt;= brick_count) {</div><div class='del'>-                                ret = xmlTextWriterStartElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"brick");</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.brick%d.uuid", i, j);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;uuid);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatAttribute</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"uuid", "%s",</div><div class='del'>-                                         uuid);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.brick%d", i, j);</div><div class='del'>-                                ret = dict_get_str (dict, key, &amp;brick);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatString</div><div class='del'>-                                        (local-&gt;writer, "%s", brick);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"name", "%s",</div><div class='del'>-                                         brick);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"hostUuid",</div><div class='del'>-                                         "%s", uuid);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                snprintf (key, sizeof (key),</div><div class='del'>-                                          "volume%d.brick%d.isArbiter", i, j);</div><div class='del'>-                                if (dict_get (dict, key))</div><div class='del'>-                                        isArbiter = 1;</div><div class='del'>-                                else</div><div class='del'>-                                        isArbiter = 0;</div><div class='del'>-                                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                        (local-&gt;writer, (xmlChar *)"isArbiter",</div><div class='del'>-                                         "%d", isArbiter);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                /* &lt;/brick&gt; */</div><div class='del'>-                                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                                j++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                /* &lt;/bricks&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "volume%d", i);</div><div class='del'>-                ret = cli_xml_output_vol_info_options (local-&gt;writer, dict,</div><div class='del'>-                                                       key);</div><div class='add'>+            ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                            (xmlChar *)"coldBricks");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"coldBrickType", "%s",</div><div class='add'>+                vol_type_str[tier_vol_type]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"coldreplicaCount", "%d",</div><div class='add'>+                value[COLD_REPLICA_COUNT]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"coldarbiterCount", "%d",</div><div class='add'>+                value[COLD_ARBITER_COUNT]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"coldbrickCount", "%d",</div><div class='add'>+                value[COLD_BRICK_COUNT]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                local-&gt;writer, (xmlChar *)"colddisperseCount", "%d",</div><div class='add'>+                value[COLD_DISPERSE_COUNT]);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            if (value[COLD_TYPE] == GF_CLUSTER_TYPE_NONE ||</div><div class='add'>+                value[COLD_TYPE] == GF_CLUSTER_TYPE_TIER) {</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"numberOfBricks", "%d",</div><div class='add'>+                    value[COLD_BRICK_COUNT]);</div><div class='add'>+            } else if (value[COLD_TYPE] == GF_CLUSTER_TYPE_DISPERSE) {</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"numberOfBricks",</div><div class='add'>+                    " %d x (%d + %d) = %d",</div><div class='add'>+                    (value[COLD_BRICK_COUNT] / value[COLD_DIST_COUNT]),</div><div class='add'>+                    value[COLD_DISPERSE_COUNT] - value[COLD_REDUNDANCY_COUNT],</div><div class='add'>+                    value[COLD_REDUNDANCY_COUNT], value[COLD_BRICK_COUNT]);</div><div class='add'>+            } else {</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"numberOfBricks", "%d x %d = %d",</div><div class='add'>+                    (value[COLD_BRICK_COUNT] / value[COLD_DIST_COUNT]),</div><div class='add'>+                    value[COLD_DIST_COUNT], value[COLD_BRICK_COUNT]);</div><div class='add'>+            }</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            index = value[HOT_BRICK_COUNT] + 1;</div><div class='add'>+</div><div class='add'>+            while (index &lt;= brick_count) {</div><div class='add'>+                snprintf(key, 1024, "volume%d.brick%d", i, index);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;brick);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                /* &lt;/volume&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+                ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                                (xmlChar *)"brick");</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, index);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;uuid);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatAttribute(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"uuid", "%s", uuid);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatString(local-&gt;writer, "%s",</div><div class='add'>+                                                     brick);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"name", "%s", brick);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"hostUuid", "%s", uuid);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i,</div><div class='add'>+                         index);</div><div class='add'>+                if (dict_get(dict, key))</div><div class='add'>+                    isArbiter = 1;</div><div class='add'>+                else</div><div class='add'>+                    isArbiter = 0;</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"isArbiter", "%d", isArbiter);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                index++;</div><div class='add'>+            }</div><div class='add'>+            ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        } else {</div><div class='add'>+            while (j &lt;= brick_count) {</div><div class='add'>+                ret = xmlTextWriterStartElement(local-&gt;writer,</div><div class='add'>+                                                (xmlChar *)"brick");</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        if (volname) {</div><div class='del'>-                GF_FREE (local-&gt;get_vol.volname);</div><div class='del'>-                local-&gt;get_vol.volname = gf_strdup (volname);</div><div class='del'>-                local-&gt;vol_count += count;</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.brick%d.uuid", i, j);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;uuid);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatAttribute(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"uuid", "%s", uuid);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.brick%d", i, j);</div><div class='add'>+                ret = dict_get_str(dict, key, &amp;brick);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = xmlTextWriterWriteFormatString(local-&gt;writer, "%s",</div><div class='add'>+                                                     brick);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"name", "%s", brick);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"hostUuid", "%s", uuid);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                snprintf(key, sizeof(key), "volume%d.brick%d.isArbiter", i, j);</div><div class='add'>+                if (dict_get(dict, key))</div><div class='add'>+                    isArbiter = 1;</div><div class='add'>+                else</div><div class='add'>+                    isArbiter = 0;</div><div class='add'>+                ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                    local-&gt;writer, (xmlChar *)"isArbiter", "%d", isArbiter);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                /* &lt;/brick&gt; */</div><div class='add'>+                ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+                j++;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        /* &lt;/bricks&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "volume%d", i);</div><div class='add'>+        ret = cli_xml_output_vol_info_options(local-&gt;writer, dict, key);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        /* &lt;/volume&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (volname) {</div><div class='add'>+        GF_FREE(local-&gt;get_vol.volname);</div><div class='add'>+        local-&gt;get_vol.volname = gf_strdup(volname);</div><div class='add'>+        local-&gt;vol_count += count;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_info_begin (cli_local_t *local, int op_ret, int op_errno,</div><div class='del'>-                               char *op_errstr)</div><div class='add'>+cli_xml_output_vol_info_begin(cli_local_t *local, int op_ret, int op_errno,</div><div class='add'>+                              char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_begin_xml_output(&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (local-&gt;writer, op_ret, op_errno,</div><div class='del'>-                                     op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_xml_output_common(local-&gt;writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* &lt;volInfo&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"volInfo");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;volInfo&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volInfo");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;volumes&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"volumes");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;volumes&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volumes");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* Init vol count */</div><div class='del'>-        local-&gt;vol_count = 0;</div><div class='add'>+    /* Init vol count */</div><div class='add'>+    local-&gt;vol_count = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_info_end (cli_local_t *local)</div><div class='add'>+cli_xml_output_vol_info_end(cli_local_t *local)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"count",</div><div class='del'>-                                               "%d", local-&gt;vol_count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        /* &lt;/volumes&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"count",</div><div class='add'>+                                          "%d", local-&gt;vol_count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    /* &lt;/volumes&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volInfo&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/volInfo&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (local-&gt;writer, local-&gt;doc);</div><div class='add'>+    ret = cli_end_xml_output(local-&gt;writer, local-&gt;doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_quota_limit_list_end (cli_local_t *local)</div><div class='add'>+cli_xml_output_vol_quota_limit_list_end(cli_local_t *local)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (local-&gt;writer, local-&gt;doc);</div><div class='add'>+    ret = cli_end_xml_output(local-&gt;writer, local-&gt;doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_quota_limit_list_begin (cli_local_t *local, int op_ret,</div><div class='del'>-                                           int op_errno, char *op_errstr)</div><div class='add'>+cli_xml_output_vol_quota_limit_list_begin(cli_local_t *local, int op_ret,</div><div class='add'>+                                          int op_errno, char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (local-&gt;writer, op_ret, op_errno,</div><div class='del'>-                                     op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_begin_xml_output(&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* &lt;volQuota&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"volQuota");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_xml_output_common(local-&gt;writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    /* &lt;volQuota&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"volQuota");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> static int</div><div class='del'>-cli_xml_output_peer_hostnames (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                               const char *prefix, int count)</div><div class='add'>+cli_xml_output_peer_hostnames(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                              const char *prefix, int count)</div><div class='ctx'> {</div><div class='del'>-        int   ret       = -1;</div><div class='del'>-        int   i         = 0;</div><div class='del'>-        char *hostname  = NULL;</div><div class='del'>-        char  key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        /* &lt;hostnames&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"hostnames");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.hostname%d", prefix, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                        (writer, (xmlChar *)"hostname", "%s", hostname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                hostname = NULL;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* &lt;hostnames&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"hostnames");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.hostname%d", prefix, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname",</div><div class='add'>+                                              "%s", hostname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        hostname = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/hostnames&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/hostnames&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_peer_status (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                            char *op_errstr)</div><div class='add'>+cli_xml_output_peer_status(dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                           char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        int                     count = 0;</div><div class='del'>-        char                    *uuid = NULL;</div><div class='del'>-        char                    *hostname = NULL;</div><div class='del'>-        int                     connected = 0;</div><div class='del'>-        int                     state_id = 0;</div><div class='del'>-        char                    *state_str = NULL;</div><div class='del'>-        int                     hostname_count = 0;</div><div class='del'>-        int                     i = 1;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char *uuid = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    int connected = 0;</div><div class='add'>+    int state_id = 0;</div><div class='add'>+    char *state_str = NULL;</div><div class='add'>+    int hostname_count = 0;</div><div class='add'>+    int i = 1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;peerStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"peerStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto cont;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    while (i &lt;= count) {</div><div class='add'>+        /* &lt;peer&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"peer");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.uuid", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;uuid);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        /* &lt;peerStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"peerStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto cont;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                              uuid);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.hostname", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;hostname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        while (i &lt;= count) {</div><div class='del'>-                /* &lt;peer&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"peer");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.uuid", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;uuid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"uuid",</div><div class='del'>-                                                       "%s", uuid);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.hostname", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;hostname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hostname",</div><div class='add'>+                                              "%s", hostname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"hostname",</div><div class='del'>-                                                       "%s", hostname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.hostname_count", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;hostname_count);</div><div class='del'>-                if ((ret == 0) &amp;&amp; (hostname_count &gt; 0)) {</div><div class='del'>-                        snprintf (key, sizeof (key), "friend%d", i);</div><div class='del'>-                        ret = cli_xml_output_peer_hostnames (writer, dict, key,</div><div class='del'>-                                                             hostname_count);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.hostname_count", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;hostname_count);</div><div class='add'>+        if ((ret == 0) &amp;&amp; (hostname_count &gt; 0)) {</div><div class='add'>+            snprintf(key, sizeof(key), "friend%d", i);</div><div class='add'>+            ret = cli_xml_output_peer_hostnames(writer, dict, key,</div><div class='add'>+                                                hostname_count);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.connected", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;connected);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.connected", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;connected);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"connected",</div><div class='del'>-                                                       "%d", connected);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"connected",</div><div class='add'>+                                              "%d", connected);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.stateId", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;state_id);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        /* ignore */</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.stateId", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;state_id);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            /* ignore */</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                           (xmlChar *)"state", "%d", state_id);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"state",</div><div class='add'>+                                                  "%d", state_id);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "friend%d.state", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;state_str);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        /* ignore */</div><div class='add'>+        snprintf(key, sizeof(key), "friend%d.state", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;state_str);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            /* ignore */</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                       (xmlChar *)"stateStr", "%s", state_str);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"stateStr",</div><div class='add'>+                                                  "%s", state_str);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* &lt;/peer&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/peer&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> cont:</div><div class='del'>-        /* &lt;/peerStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/peerStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> /* Used for rebalance stop/status, remove-brick status */</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_rebalance_status (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                                     enum gf_task_types task_type)</div><div class='add'>+cli_xml_output_vol_rebalance_status(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                                    enum gf_task_types task_type)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        int                     count = 0;</div><div class='del'>-        char                    *node_name = NULL;</div><div class='del'>-        char                    *node_uuid = NULL;</div><div class='del'>-        uint64_t                files = 0;</div><div class='del'>-        uint64_t                size = 0;</div><div class='del'>-        uint64_t                lookups = 0;</div><div class='del'>-        int                     status_rcd = 0;</div><div class='del'>-        uint64_t                failures = 0;</div><div class='del'>-        uint64_t                skipped = 0;</div><div class='del'>-        uint64_t                total_files = 0;</div><div class='del'>-        uint64_t                total_size = 0;</div><div class='del'>-        uint64_t                total_lookups = 0;</div><div class='del'>-        uint64_t                total_failures = 0;</div><div class='del'>-        uint64_t                total_skipped = 0;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        int                     overall_status = -1;</div><div class='del'>-        double                  elapsed = 0;</div><div class='del'>-        double                  overall_elapsed = 0;</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char *node_name = NULL;</div><div class='add'>+    char *node_uuid = NULL;</div><div class='add'>+    uint64_t files = 0;</div><div class='add'>+    uint64_t size = 0;</div><div class='add'>+    uint64_t lookups = 0;</div><div class='add'>+    int status_rcd = 0;</div><div class='add'>+    uint64_t failures = 0;</div><div class='add'>+    uint64_t skipped = 0;</div><div class='add'>+    uint64_t total_files = 0;</div><div class='add'>+    uint64_t total_size = 0;</div><div class='add'>+    uint64_t total_lookups = 0;</div><div class='add'>+    uint64_t total_failures = 0;</div><div class='add'>+    uint64_t total_skipped = 0;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int overall_status = -1;</div><div class='add'>+    double elapsed = 0;</div><div class='add'>+    double overall_elapsed = 0;</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeCount", "%d",</div><div class='add'>+                                          count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    while (i &lt; count) {</div><div class='add'>+        i++;</div><div class='add'>+        /* Getting status early, to skip nodes that don't have the</div><div class='add'>+         * rebalance process started</div><div class='add'>+         */</div><div class='add'>+        snprintf(key, sizeof(key), "status-%d", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;status_rcd);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='add'>+        /* If glusterd is down it fails to get the status, try</div><div class='add'>+         getting status from other nodes */</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"nodeCount",</div><div class='del'>-                                               "%d", count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        while (i &lt; count) {</div><div class='del'>-                i++;</div><div class='del'>-                /* Getting status early, to skip nodes that don't have the</div><div class='del'>-                 * rebalance process started</div><div class='del'>-                 */</div><div class='del'>-                snprintf (key, sizeof (key), "status-%d", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;status_rcd);</div><div class='del'>-</div><div class='del'>-                /* If glusterd is down it fails to get the status, try</div><div class='del'>-                 getting status from other nodes */</div><div class='del'>-                if (ret)</div><div class='del'>-                    continue;</div><div class='del'>-                if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd)</div><div class='del'>-                        continue;</div><div class='add'>+            continue;</div><div class='add'>+        if (GF_DEFRAG_STATUS_NOT_STARTED == status_rcd)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                /* &lt;node&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"node");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;node&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"node");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "node-name-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;node_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"nodeName",</div><div class='del'>-                                                       "%s", node_name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "node-name-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;node_name);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeName",</div><div class='add'>+                                              "%s", node_name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "node-uuid-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;node_uuid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"id",</div><div class='del'>-                                                       "%s", node_uuid);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "node-uuid-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;node_uuid);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"id", "%s",</div><div class='add'>+                                              node_uuid);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "files-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;files);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                total_files += files;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"files",</div><div class='del'>-                                                       "%"PRIu64, files);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "size-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;size);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                total_size += size;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"size",</div><div class='del'>-                                                       "%"PRIu64,size);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "lookups-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;lookups);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                total_lookups += lookups;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"lookups",</div><div class='del'>-                                                       "%"PRIu64, lookups);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "failures-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;failures);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "files-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;files);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        total_files += files;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"files",</div><div class='add'>+                                              "%" PRIu64, files);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "skipped-%d", i);</div><div class='add'>+        snprintf(key, sizeof(key), "size-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;size);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        total_size += size;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size",</div><div class='add'>+                                              "%" PRIu64, size);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;skipped);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        snprintf(key, sizeof(key), "lookups-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;lookups);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        total_lookups += lookups;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lookups",</div><div class='add'>+                                              "%" PRIu64, lookups);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                if (task_type == GF_TASK_TYPE_REMOVE_BRICK) {</div><div class='del'>-                        failures += skipped;</div><div class='del'>-                        skipped = 0;</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "failures-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;failures);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                total_failures += failures;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                               (xmlChar *)"failures",</div><div class='del'>-                                               "%"PRIu64, failures);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "skipped-%d", i);</div><div class='ctx'> </div><div class='del'>-                total_skipped += skipped;</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;skipped);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                               (xmlChar *)"skipped",</div><div class='del'>-                                               "%"PRIu64, skipped);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        if (task_type == GF_TASK_TYPE_REMOVE_BRICK) {</div><div class='add'>+            failures += skipped;</div><div class='add'>+            skipped = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"status",</div><div class='del'>-                                                       "%d", status_rcd);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        total_failures += failures;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"failures",</div><div class='add'>+                                              "%" PRIu64, failures);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"statusStr",</div><div class='del'>-                                                       "%s",</div><div class='del'>-                                         cli_vol_task_status_str[status_rcd]);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        total_skipped += skipped;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "run-time-%d", i);</div><div class='del'>-                ret = dict_get_double (dict, key, &amp;elapsed);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"runtime",</div><div class='del'>-                                                       "%.2f", elapsed);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"skipped",</div><div class='add'>+                                              "%" PRIu64, skipped);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                if (elapsed &gt; overall_elapsed) {</div><div class='del'>-                    overall_elapsed = elapsed;</div><div class='del'>-                }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d",</div><div class='add'>+                                              status_rcd);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* Rebalance has 5 states,</div><div class='del'>-                 * NOT_STARTED, STARTED, STOPPED, COMPLETE, FAILED</div><div class='del'>-                 * The precedence used to determine the aggregate status is as</div><div class='del'>-                 * below,</div><div class='del'>-                 * STARTED &gt; FAILED &gt; STOPPED &gt; COMPLETE &gt; NOT_STARTED</div><div class='del'>-                 */</div><div class='del'>-                /* TODO: Move this to a common place utilities that both CLI and</div><div class='del'>-                 * glusterd need.</div><div class='del'>-                 * Till then if the below algorithm is changed, change it in</div><div class='del'>-                 * glusterd_volume_status_aggregate_tasks_status in</div><div class='del'>-                 * glusterd-utils.c</div><div class='del'>-                 */</div><div class='del'>-</div><div class='del'>-                if (-1 == overall_status)</div><div class='del'>-                        overall_status = status_rcd;</div><div class='del'>-                int rank[] = {</div><div class='del'>-                        [GF_DEFRAG_STATUS_STARTED] = 1,</div><div class='del'>-                        [GF_DEFRAG_STATUS_FAILED] = 2,</div><div class='del'>-                        [GF_DEFRAG_STATUS_STOPPED] = 3,</div><div class='del'>-                        [GF_DEFRAG_STATUS_COMPLETE] = 4,</div><div class='del'>-                        [GF_DEFRAG_STATUS_NOT_STARTED] = 5</div><div class='del'>-                };</div><div class='del'>-                if (rank[status_rcd] &lt;= rank[overall_status])</div><div class='del'>-                        overall_status = status_rcd;</div><div class='del'>-</div><div class='del'>-                /* &lt;/node&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            writer, (xmlChar *)"statusStr", "%s",</div><div class='add'>+            cli_vol_task_status_str[status_rcd]);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "run-time-%d", i);</div><div class='add'>+        ret = dict_get_double(dict, key, &amp;elapsed);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"runtime",</div><div class='add'>+                                              "%.2f", elapsed);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        if (elapsed &gt; overall_elapsed) {</div><div class='add'>+            overall_elapsed = elapsed;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Aggregate status */</div><div class='del'>-        /* &lt;aggregate&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"aggregate");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* Rebalance has 5 states,</div><div class='add'>+         * NOT_STARTED, STARTED, STOPPED, COMPLETE, FAILED</div><div class='add'>+         * The precedence used to determine the aggregate status is as</div><div class='add'>+         * below,</div><div class='add'>+         * STARTED &gt; FAILED &gt; STOPPED &gt; COMPLETE &gt; NOT_STARTED</div><div class='add'>+         */</div><div class='add'>+        /* TODO: Move this to a common place utilities that both CLI and</div><div class='add'>+         * glusterd need.</div><div class='add'>+         * Till then if the below algorithm is changed, change it in</div><div class='add'>+         * glusterd_volume_status_aggregate_tasks_status in</div><div class='add'>+         * glusterd-utils.c</div><div class='add'>+         */</div><div class='add'>+</div><div class='add'>+        if (-1 == overall_status)</div><div class='add'>+            overall_status = status_rcd;</div><div class='add'>+        int rank[] = {[GF_DEFRAG_STATUS_STARTED] = 1,</div><div class='add'>+                      [GF_DEFRAG_STATUS_FAILED] = 2,</div><div class='add'>+                      [GF_DEFRAG_STATUS_STOPPED] = 3,</div><div class='add'>+                      [GF_DEFRAG_STATUS_COMPLETE] = 4,</div><div class='add'>+                      [GF_DEFRAG_STATUS_NOT_STARTED] = 5};</div><div class='add'>+        if (rank[status_rcd] &lt;= rank[overall_status])</div><div class='add'>+            overall_status = status_rcd;</div><div class='add'>+</div><div class='add'>+        /* &lt;/node&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Aggregate status */</div><div class='add'>+    /* &lt;aggregate&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"aggregate");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"files",</div><div class='del'>-                                               "%"PRIu64, total_files);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"files",</div><div class='add'>+                                          "%" PRIu64, total_files);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"size",</div><div class='del'>-                                               "%"PRIu64, total_size);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"size", "%" PRIu64,</div><div class='add'>+                                          total_size);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"lookups",</div><div class='del'>-                                               "%"PRIu64, total_lookups);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lookups",</div><div class='add'>+                                          "%" PRIu64, total_lookups);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"failures",</div><div class='del'>-                                               "%"PRIu64, total_failures);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"failures",</div><div class='add'>+                                          "%" PRIu64, total_failures);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"skipped",</div><div class='del'>-                                               "%"PRIu64, total_skipped);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"skipped",</div><div class='add'>+                                          "%" PRIu64, total_skipped);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"status",</div><div class='del'>-                                               "%d", overall_status);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%d",</div><div class='add'>+                                          overall_status);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"statusStr",</div><div class='del'>-                                               "%s",</div><div class='del'>-                                      cli_vol_task_status_str[overall_status]);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        writer, (xmlChar *)"statusStr", "%s",</div><div class='add'>+        cli_vol_task_status_str[overall_status]);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,(xmlChar *)"runtime",</div><div class='del'>-                                               "%.2f", overall_elapsed);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"runtime", "%.2f",</div><div class='add'>+                                          overall_elapsed);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/aggregate&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/aggregate&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_tier_status (xmlTextWriterPtr writer, dict_t *dict,</div><div class='del'>-                enum gf_task_types task_type)</div><div class='add'>+cli_xml_output_vol_tier_status(xmlTextWriterPtr writer, dict_t *dict,</div><div class='add'>+                               enum gf_task_types task_type)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        int                     count = 0;</div><div class='del'>-        char                    *node_name = NULL;</div><div class='del'>-        char                    *status_str  = NULL;</div><div class='del'>-        uint64_t                promoted     = 0;</div><div class='del'>-        uint64_t                demoted      = 0;</div><div class='del'>-        int                     i = 1;</div><div class='del'>-        char                    key[1024] = {0,};</div><div class='del'>-        gf_defrag_status_t      status_rcd   = GF_DEFRAG_STATUS_NOT_STARTED;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", dict, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "count not set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"nodeCount",</div><div class='del'>-                                               "%d", count);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        while (i &lt;= count) {</div><div class='del'>-                promoted = 0;</div><div class='del'>-                node_name = NULL;</div><div class='del'>-                demoted = 0;</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"node");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char *node_name = NULL;</div><div class='add'>+    char *status_str = NULL;</div><div class='add'>+    uint64_t promoted = 0;</div><div class='add'>+    uint64_t demoted = 0;</div><div class='add'>+    int i = 1;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_defrag_status_t status_rcd = GF_DEFRAG_STATUS_NOT_STARTED;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", dict, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "count not set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeCount", "%d",</div><div class='add'>+                                          count);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    while (i &lt;= count) {</div><div class='add'>+        promoted = 0;</div><div class='add'>+        node_name = NULL;</div><div class='add'>+        demoted = 0;</div><div class='add'>+</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"node");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "node-name-%d", i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;node_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"nodeName",</div><div class='del'>-                                                       "%s", node_name);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "node-name-%d", i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;node_name);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"nodeName",</div><div class='add'>+                                              "%s", node_name);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "promoted-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;promoted);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='add'>+        snprintf(key, sizeof(key), "promoted-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;promoted);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='ctx'>                                                        (xmlChar *)"promoted"</div><div class='ctx'>                                                        "Files", "%"PRIu64,</div><div class='ctx'>                                                        promoted);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "demoted-%d", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, key, &amp;demoted);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='add'>+        snprintf(key, sizeof(key), "demoted-%d", i);</div><div class='add'>+        ret = dict_get_uint64(dict, key, &amp;demoted);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='ctx'>                                                        (xmlChar *)"demoted"</div><div class='ctx'>                                                        "Files", "%"PRIu64,</div><div class='ctx'>                                                        demoted);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "status-%d", i);</div><div class='del'>-                ret = dict_get_int32 (dict, key, (int32_t *)&amp;status_rcd);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                status_str = cli_vol_task_status_str[status_rcd];</div><div class='add'>+        snprintf(key, sizeof(key), "status-%d", i);</div><div class='add'>+        ret = dict_get_int32(dict, key, (int32_t *)&amp;status_rcd);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"statusStr",</div><div class='del'>-                                                       "%s", status_str);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        status_str = cli_vol_task_status_str[status_rcd];</div><div class='ctx'> </div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"statusStr",</div><div class='add'>+                                              "%s", status_str);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_rebalance (gf_cli_defrag_type op, dict_t *dict, int op_ret,</div><div class='del'>-                              int op_errno, char *op_errstr)</div><div class='add'>+cli_xml_output_vol_rebalance(gf_cli_defrag_type op, dict_t *dict, int op_ret,</div><div class='add'>+                             int op_errno, char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *task_id_str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;volRebalance&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volRebalance");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, GF_REBALANCE_TID_KEY, &amp;task_id_str);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"task-id",</div><div class='add'>+                                              "%s", task_id_str);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"op", "%d", op);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (GF_DEFRAG_CMD_STATUS_TIER == op) {</div><div class='add'>+        ret = cli_xml_output_vol_tier_status(writer, dict,</div><div class='add'>+                                             GF_TASK_TYPE_REBALANCE);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;volRebalance&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volRebalance");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, GF_REBALANCE_TID_KEY, &amp;task_id_str);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"task-id",</div><div class='del'>-                                                       "%s", task_id_str);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"op",</div><div class='del'>-                                               "%d", op);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        if (GF_DEFRAG_CMD_STATUS_TIER == op) {</div><div class='del'>-                ret = cli_xml_output_vol_tier_status (writer,</div><div class='del'>-                                dict, GF_TASK_TYPE_REBALANCE);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        if ((GF_DEFRAG_CMD_STOP == op) || (GF_DEFRAG_CMD_STATUS == op)) {</div><div class='del'>-</div><div class='del'>-                ret = cli_xml_output_vol_rebalance_status (writer, dict,</div><div class='del'>-                                                      GF_TASK_TYPE_REBALANCE);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* &lt;/volRebalance&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    if ((GF_DEFRAG_CMD_STOP == op) || (GF_DEFRAG_CMD_STATUS == op)) {</div><div class='add'>+        ret = cli_xml_output_vol_rebalance_status(writer, dict,</div><div class='add'>+                                                  GF_TASK_TYPE_REBALANCE);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* &lt;/volRebalance&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_remove_brick_detach_tier (gf_boolean_t status_op,</div><div class='del'>-                                             dict_t *dict, int op_ret,</div><div class='del'>-                                             int op_errno, char *op_errstr,</div><div class='del'>-                                             const char *op)</div><div class='add'>+cli_xml_output_vol_remove_brick_detach_tier(gf_boolean_t status_op,</div><div class='add'>+                                            dict_t *dict, int op_ret,</div><div class='add'>+                                            int op_errno, char *op_errstr,</div><div class='add'>+                                            const char *op)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *task_id_str = NULL;</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *task_id_str = NULL;</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)op);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, GF_REMOVE_BRICK_TID_KEY, &amp;task_id_str);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"task-id",</div><div class='add'>+                                              "%s", task_id_str);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (status_op) {</div><div class='add'>+        ret = cli_xml_output_vol_rebalance_status(writer, dict,</div><div class='add'>+                                                  GF_TASK_TYPE_REMOVE_BRICK);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *) op);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, GF_REMOVE_BRICK_TID_KEY, &amp;task_id_str);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"task-id",</div><div class='del'>-                                                       "%s", task_id_str);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (status_op) {</div><div class='del'>-                ret = cli_xml_output_vol_rebalance_status (writer, dict,</div><div class='del'>-                                                   GF_TASK_TYPE_REMOVE_BRICK);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_replace_brick (dict_t *dict,</div><div class='del'>-                                  int op_ret, int op_errno, char *op_errstr)</div><div class='add'>+cli_xml_output_vol_replace_brick(dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                                 char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_create (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                           char *op_errstr)</div><div class='add'>+cli_xml_output_vol_create(dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                          char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        char                    *volid = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *volid = NULL;</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (dict) {</div><div class='add'>+        /* &lt;volCreate&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volCreate");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        /* &lt;volume&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='add'>+        ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (dict) {</div><div class='del'>-                /* &lt;volCreate&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"volCreate");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                /* &lt;volume&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *) "name",</div><div class='del'>-                                                       "%s", volname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              volname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, "volume-id", &amp;volid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"id",</div><div class='del'>-                                                       "%s", volid);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = dict_get_str(dict, "volume-id", &amp;volid);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"id", "%s",</div><div class='add'>+                                              volid);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/volume&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/volume&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/volCreate&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        /* &lt;/volCreate&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_generic_volume (char *op, dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                               char *op_errstr)</div><div class='add'>+cli_xml_output_generic_volume(char *op, dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                              char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        char                    *volid = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *volid = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (op);</div><div class='add'>+    GF_ASSERT(op);</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (dict) {</div><div class='del'>-                /* &lt;"op"&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)op);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    if (dict) {</div><div class='add'>+        /* &lt;"op"&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)op);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;volume&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;volume&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *) "name",</div><div class='del'>-                                                       "%s", volname);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              volname);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, "vol-id", &amp;volid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"id",</div><div class='del'>-                                                       "%s", volid);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = dict_get_str(dict, "vol-id", &amp;volid);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"id", "%s",</div><div class='add'>+                                              volid);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/volume&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        /* &lt;/volume&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/"op"&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        /* &lt;/"op"&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-_output_gsync_config (FILE *fp, xmlTextWriterPtr writer, char *op_name)</div><div class='add'>+_output_gsync_config(FILE *fp, xmlTextWriterPtr writer, char *op_name)</div><div class='ctx'> {</div><div class='del'>-        char  resbuf[256 + PATH_MAX] = {0,};</div><div class='del'>-        char *ptr                    = NULL;</div><div class='del'>-        char *v                      = NULL;</div><div class='del'>-        int   blen                   = sizeof(resbuf);</div><div class='del'>-        int   ret                    = 0;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                ptr = fgets (resbuf, blen, fp);</div><div class='del'>-                if (!ptr)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                v = resbuf + strlen (resbuf) - 1;</div><div class='del'>-                while (isspace (*v)) {</div><div class='del'>-                        /* strip trailing space */</div><div class='del'>-                        *v-- = '\0';</div><div class='del'>-                }</div><div class='del'>-                if (v == resbuf) {</div><div class='del'>-                        /* skip empty line */</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    char resbuf[256 + PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *v = NULL;</div><div class='add'>+    int blen = sizeof(resbuf);</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        ptr = fgets(resbuf, blen, fp);</div><div class='add'>+        if (!ptr)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (op_name!= NULL){</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                        (xmlChar *)op_name,</div><div class='del'>-                                                        "%s", resbuf);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        v = resbuf + strlen(resbuf) - 1;</div><div class='add'>+        while (isspace(*v)) {</div><div class='add'>+            /* strip trailing space */</div><div class='add'>+            *v-- = '\0';</div><div class='add'>+        }</div><div class='add'>+        if (v == resbuf) {</div><div class='add'>+            /* skip empty line */</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                v = strchr (resbuf, ':');</div><div class='del'>-                if (!v) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                *v++ = '\0';</div><div class='del'>-                while (isspace (*v))</div><div class='del'>-                        v++;</div><div class='del'>-                v = gf_strdup (v);</div><div class='del'>-                if (!v) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (op_name != NULL) {</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)op_name,</div><div class='add'>+                                                  "%s", resbuf);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)resbuf,</div><div class='del'>-                                                       "%s", v);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        v = strchr(resbuf, ':');</div><div class='add'>+        if (!v) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        *v++ = '\0';</div><div class='add'>+        while (isspace(*v))</div><div class='add'>+            v++;</div><div class='add'>+        v = gf_strdup(v);</div><div class='add'>+        if (!v) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)resbuf, "%s",</div><div class='add'>+                                              v);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-get_gsync_config (runner_t *runner,</div><div class='del'>-                  int (*op_conf)(FILE *fp,</div><div class='del'>-                              xmlTextWriterPtr writer,</div><div class='del'>-                              char *op_name),</div><div class='del'>-                  xmlTextWriterPtr writer, char *op_name)</div><div class='add'>+get_gsync_config(runner_t *runner,</div><div class='add'>+                 int (*op_conf)(FILE *fp, xmlTextWriterPtr writer,</div><div class='add'>+                                char *op_name),</div><div class='add'>+                 xmlTextWriterPtr writer, char *op_name)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        runner_redir (runner, STDOUT_FILENO, RUN_PIPE);</div><div class='del'>-        if (runner_start (runner) != 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "spawning child failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    runner_redir(runner, STDOUT_FILENO, RUN_PIPE);</div><div class='add'>+    if (runner_start(runner) != 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "spawning child failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = op_conf (runner_chio (runner, STDOUT_FILENO), writer, op_name);</div><div class='add'>+    ret = op_conf(runner_chio(runner, STDOUT_FILENO), writer, op_name);</div><div class='ctx'> </div><div class='del'>-        ret |= runner_end (runner);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "reading data from child failed");</div><div class='add'>+    ret |= runner_end(runner);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "reading data from child failed");</div><div class='ctx'> </div><div class='del'>-        return ret ? -1 : 0;</div><div class='add'>+    return ret ? -1 : 0;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_generate_gsync_config (dict_t *dict, xmlTextWriterPtr writer)</div><div class='add'>+cli_xml_generate_gsync_config(dict_t *dict, xmlTextWriterPtr writer)</div><div class='ctx'> {</div><div class='del'>-        runner_t runner           = {0,};</div><div class='del'>-        char *subop               = NULL;</div><div class='del'>-        char *gwd                 = NULL;</div><div class='del'>-        char *slave               = NULL;</div><div class='del'>-        char *confpath            = NULL;</div><div class='del'>-        char *master              = NULL;</div><div class='del'>-        char *op_name             = NULL;</div><div class='del'>-        int   ret                 = -1;</div><div class='del'>-        char  conf_path[PATH_MAX] = "";</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (dict, "subop", &amp;subop) != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (subop, "get") != 0 &amp;&amp; strcmp (subop, "get-all") != 0) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                 (xmlChar *)"message",</div><div class='del'>-                                 "%s",GEOREP" config updated successfully" );</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    runner_t runner = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *subop = NULL;</div><div class='add'>+    char *gwd = NULL;</div><div class='add'>+    char *slave = NULL;</div><div class='add'>+    char *confpath = NULL;</div><div class='add'>+    char *master = NULL;</div><div class='add'>+    char *op_name = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char conf_path[PATH_MAX] = "";</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(dict, "subop", &amp;subop) != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(subop, "get") != 0 &amp;&amp; strcmp(subop, "get-all") != 0) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            writer, (xmlChar *)"message", "%s",</div><div class='add'>+            GEOREP " config updated successfully");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (dict, "glusterd_workdir", &amp;gwd) != 0 ||</div><div class='del'>-            dict_get_str (dict, "slave", &amp;slave) != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dict_get_str(dict, "glusterd_workdir", &amp;gwd) != 0 ||</div><div class='add'>+        dict_get_str(dict, "slave", &amp;slave) != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                master = NULL;</div><div class='add'>+    if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+        master = NULL;</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (dict, "op_name", &amp;op_name) != 0)</div><div class='del'>-                op_name = NULL;</div><div class='add'>+    if (dict_get_str(dict, "op_name", &amp;op_name) != 0)</div><div class='add'>+        op_name = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "conf_path", &amp;confpath);</div><div class='del'>-        if (!confpath) {</div><div class='del'>-                ret = snprintf (conf_path, sizeof (conf_path) - 1,</div><div class='del'>-                                "%s/"GEOREP"/gsyncd_template.conf", gwd);</div><div class='del'>-                conf_path[ret] = '\0';</div><div class='del'>-                confpath = conf_path;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(dict, "conf_path", &amp;confpath);</div><div class='add'>+    if (!confpath) {</div><div class='add'>+        ret = snprintf(conf_path, sizeof(conf_path) - 1,</div><div class='add'>+                       "%s/" GEOREP "/gsyncd_template.conf", gwd);</div><div class='add'>+        conf_path[ret] = '\0';</div><div class='add'>+        confpath = conf_path;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        runner_add_args (&amp;runner, GSYNCD_PREFIX"/gsyncd", "-c", NULL);</div><div class='del'>-        runner_argprintf (&amp;runner, "%s", confpath);</div><div class='del'>-        runner_argprintf (&amp;runner, "--iprefix=%s", DATADIR);</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    runner_add_args(&amp;runner, GSYNCD_PREFIX "/gsyncd", "-c", NULL);</div><div class='add'>+    runner_argprintf(&amp;runner, "%s", confpath);</div><div class='add'>+    runner_argprintf(&amp;runner, "--iprefix=%s", DATADIR);</div><div class='ctx'> </div><div class='del'>-        if (master)</div><div class='del'>-                runner_argprintf (&amp;runner, ":%s", master);</div><div class='add'>+    if (master)</div><div class='add'>+        runner_argprintf(&amp;runner, ":%s", master);</div><div class='ctx'> </div><div class='del'>-        runner_add_arg (&amp;runner, slave);</div><div class='del'>-        runner_argprintf (&amp;runner, "--config-%s", subop);</div><div class='add'>+    runner_add_arg(&amp;runner, slave);</div><div class='add'>+    runner_argprintf(&amp;runner, "--config-%s", subop);</div><div class='ctx'> </div><div class='del'>-        if (op_name)</div><div class='del'>-                runner_add_arg (&amp;runner, op_name);</div><div class='add'>+    if (op_name)</div><div class='add'>+        runner_add_arg(&amp;runner, op_name);</div><div class='ctx'> </div><div class='del'>-        ret =  get_gsync_config (&amp;runner, _output_gsync_config,</div><div class='del'>-                                 writer, op_name);</div><div class='add'>+    ret = get_gsync_config(&amp;runner, _output_gsync_config, writer, op_name);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_gsync_status (dict_t *dict,</div><div class='del'>-                                 xmlTextWriterPtr writer)</div><div class='add'>+cli_xml_output_vol_gsync_status(dict_t *dict, xmlTextWriterPtr writer)</div><div class='ctx'> {</div><div class='del'>-        int                  ret                         = -1;</div><div class='del'>-        int                  i                           = 1;</div><div class='del'>-        int                  j                           = 0;</div><div class='del'>-        int                  count                       = 0;</div><div class='del'>-        const int            number_of_fields            = 20;</div><div class='del'>-        int                  closed                      = 1;</div><div class='del'>-        int                  session_closed              = 1;</div><div class='del'>-        gf_gsync_status_t  **status_values               = NULL;</div><div class='del'>-        char                 status_value_name[PATH_MAX] = "";</div><div class='del'>-        char                *tmp                         = NULL;</div><div class='del'>-        char                *volume                      = NULL;</div><div class='del'>-        char                *volume_next                 = NULL;</div><div class='del'>-        char                *slave                       = NULL;</div><div class='del'>-        char                *slave_next                  = NULL;</div><div class='del'>-        char                *title_values[]              = {"master_node",</div><div class='del'>-                                                            "",</div><div class='del'>-                                                            "master_brick",</div><div class='del'>-                                                            "slave_user",</div><div class='del'>-                                                            "slave",</div><div class='del'>-                                                            "slave_node",</div><div class='del'>-                                                            "status",</div><div class='del'>-                                                            "crawl_status",</div><div class='del'>-                                                            /* last_synced */</div><div class='del'>-                                                            "",</div><div class='del'>-                                                            "entry",</div><div class='del'>-                                                            "data",</div><div class='del'>-                                                            "meta",</div><div class='del'>-                                                            "failures",</div><div class='del'>-                                                           /* checkpoint_time */</div><div class='del'>-                                                            "",</div><div class='del'>-                                                         "checkpoint_completed",</div><div class='del'>-                                               /* checkpoint_completion_time */</div><div class='del'>-                                                            "",</div><div class='del'>-                                                            "master_node_uuid",</div><div class='del'>-                                                           /* last_synced_utc */</div><div class='del'>-                                                            "last_synced",</div><div class='del'>-                                                       /* checkpoint_time_utc */</div><div class='del'>-                                                            "checkpoint_time",</div><div class='del'>-                                            /* checkpoint_completion_time_utc */</div><div class='del'>-                                                 "checkpoint_completion_time"};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "gsync-count", &amp;count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        status_values = GF_MALLOC (count * sizeof (gf_gsync_status_t *),</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 1;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    const int number_of_fields = 20;</div><div class='add'>+    int closed = 1;</div><div class='add'>+    int session_closed = 1;</div><div class='add'>+    gf_gsync_status_t **status_values = NULL;</div><div class='add'>+    char status_value_name[PATH_MAX] = "";</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *volume = NULL;</div><div class='add'>+    char *volume_next = NULL;</div><div class='add'>+    char *slave = NULL;</div><div class='add'>+    char *slave_next = NULL;</div><div class='add'>+    char *title_values[] = {"master_node", "", "master_brick", "slave_user",</div><div class='add'>+                            "slave", "slave_node", "status", "crawl_status",</div><div class='add'>+                            /* last_synced */</div><div class='add'>+                            "", "entry", "data", "meta", "failures",</div><div class='add'>+                            /* checkpoint_time */</div><div class='add'>+                            "", "checkpoint_completed",</div><div class='add'>+                            /* checkpoint_completion_time */</div><div class='add'>+                            "", "master_node_uuid",</div><div class='add'>+                            /* last_synced_utc */</div><div class='add'>+                            "last_synced",</div><div class='add'>+                            /* checkpoint_time_utc */</div><div class='add'>+                            "checkpoint_time",</div><div class='add'>+                            /* checkpoint_completion_time_utc */</div><div class='add'>+                            "checkpoint_completion_time"};</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "gsync-count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    status_values = GF_MALLOC(count * sizeof(gf_gsync_status_t *),</div><div class='ctx'>                               gf_common_mt_char);</div><div class='del'>-        if (!status_values) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!status_values) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                status_values[i] = GF_CALLOC (1, sizeof (gf_gsync_status_t),</div><div class='del'>-                                         gf_common_mt_char);</div><div class='del'>-                if (!status_values[i]) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        status_values[i] = GF_CALLOC(1, sizeof(gf_gsync_status_t),</div><div class='add'>+                                     gf_common_mt_char);</div><div class='add'>+        if (!status_values[i]) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                snprintf (status_value_name, sizeof (status_value_name),</div><div class='del'>-                          "status_value%d", i);</div><div class='add'>+        snprintf(status_value_name, sizeof(status_value_name), "status_value%d",</div><div class='add'>+                 i);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_bin (dict, status_value_name,</div><div class='del'>-                                    (void **)&amp;(status_values[i]));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "struct member empty.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_bin(dict, status_value_name,</div><div class='add'>+                           (void **)&amp;(status_values[i]));</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "struct member empty.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        qsort(status_values, count, sizeof (gf_gsync_status_t *),</div><div class='del'>-              gf_gsync_status_t_comparator);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                if (closed) {</div><div class='del'>-                        ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                         (xmlChar *)"volume");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        tmp = get_struct_variable (1, status_values[i]);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "struct member empty.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                        (xmlChar *)"name",</div><div class='del'>-                                                        "%s",tmp);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                    (xmlChar *)"sessions");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                        closed = 0;</div><div class='del'>-                }</div><div class='add'>+    qsort(status_values, count, sizeof(gf_gsync_status_t *),</div><div class='add'>+          gf_gsync_status_t_comparator);</div><div class='ctx'> </div><div class='del'>-                if (session_closed) {</div><div class='del'>-                        ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                         (xmlChar *)"session");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        if (closed) {</div><div class='add'>+            ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        session_closed = 0;</div><div class='add'>+            tmp = get_struct_variable(1, status_values[i]);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "struct member empty.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        tmp = get_struct_variable (21, status_values[i]);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "struct member empty.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name",</div><div class='add'>+                                                  "%s", tmp);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement</div><div class='del'>-                                (writer, (xmlChar *)"session_slave", "%s", tmp);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+            ret = xmlTextWriterStartElement(writer, (xmlChar *)"sessions");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"pair");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            closed = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                for (j = 0; j &lt; number_of_fields; j++) {</div><div class='del'>-                        /* XML ignore fields */</div><div class='del'>-                        if (strcmp(title_values[j], "") == 0)</div><div class='del'>-                                continue;</div><div class='add'>+        if (session_closed) {</div><div class='add'>+            ret = xmlTextWriterStartElement(writer, (xmlChar *)"session");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        tmp = get_struct_variable (j, status_values[i]);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "struct member empty.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+            session_closed = 0;</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                  (xmlChar *)title_values[j],</div><div class='del'>-                                                  "%s", tmp);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+            tmp = get_struct_variable(21, status_values[i]);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "struct member empty.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"session_slave", "%s", tmp);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (i+1 &lt; count) {</div><div class='del'>-                        slave = get_struct_variable (20, status_values[i]);</div><div class='del'>-                        slave_next = get_struct_variable (20,</div><div class='del'>-                                                          status_values[i+1]);</div><div class='del'>-                        volume = get_struct_variable (1, status_values[i]);</div><div class='del'>-                        volume_next = get_struct_variable (1,</div><div class='del'>-                                                           status_values[i+1]);</div><div class='del'>-                        if (!slave || !slave_next || !volume || !volume_next) {</div><div class='del'>-                                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "struct member empty.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"pair");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        if (strcmp (volume, volume_next)!=0) {</div><div class='del'>-                                closed = 1;</div><div class='del'>-                                session_closed = 1;</div><div class='add'>+        for (j = 0; j &lt; number_of_fields; j++) {</div><div class='add'>+            /* XML ignore fields */</div><div class='add'>+            if (strcmp(title_values[j], "") == 0)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            tmp = get_struct_variable(j, status_values[i]);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "struct member empty.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)title_values[j], "%s", tmp);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        } else if (strcmp (slave, slave_next)!=0) {</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                                session_closed = 1;</div><div class='add'>+        if (i + 1 &lt; count) {</div><div class='add'>+            slave = get_struct_variable(20, status_values[i]);</div><div class='add'>+            slave_next = get_struct_variable(20, status_values[i + 1]);</div><div class='add'>+            volume = get_struct_variable(1, status_values[i]);</div><div class='add'>+            volume_next = get_struct_variable(1, status_values[i + 1]);</div><div class='add'>+            if (!slave || !slave_next || !volume || !volume_next) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR, "struct member empty.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='add'>+            if (strcmp(volume, volume_next) != 0) {</div><div class='add'>+                closed = 1;</div><div class='add'>+                session_closed = 1;</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                ret = xmlTextWriterEndElement(writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+                ret = xmlTextWriterEndElement(writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+                ret = xmlTextWriterEndElement(writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            } else if (strcmp(slave, slave_next) != 0) {</div><div class='add'>+                session_closed = 1;</div><div class='add'>+</div><div class='add'>+                ret = xmlTextWriterEndElement(writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            ret = xmlTextWriterEndElement(writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterEndElement(writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterEndElement(writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli",GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_gsync (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                          char *op_errstr)</div><div class='add'>+cli_xml_output_vol_gsync(dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                         char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *master = NULL;</div><div class='del'>-        char                    *slave = NULL;</div><div class='del'>-        int                     type = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* &lt;geoRep&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"geoRep");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "type", &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (type) {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *master = NULL;</div><div class='add'>+    char *slave = NULL;</div><div class='add'>+    int type = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* &lt;geoRep&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"geoRep");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_START:</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_STOP:</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_PAUSE:</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_RESUME:</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_CREATE:</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_DELETE:</div><div class='del'>-                if (dict_get_str (dict, "master", &amp;master) != 0)</div><div class='del'>-                        master = "???";</div><div class='del'>-                if (dict_get_str (dict, "slave", &amp;slave) != 0)</div><div class='del'>-                        slave = "???";</div><div class='add'>+            if (dict_get_str(dict, "master", &amp;master) != 0)</div><div class='add'>+                master = "???";</div><div class='add'>+            if (dict_get_str(dict, "slave", &amp;slave) != 0)</div><div class='add'>+                slave = "???";</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"master",</div><div class='del'>-                                                       "%s", master);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"master",</div><div class='add'>+                                                  "%s", master);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"slave",</div><div class='del'>-                                                       "%s", slave);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"slave",</div><div class='add'>+                                                  "%s", slave);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_CONFIG:</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        ret = xmlTextWriterStartElement (writer, (xmlChar *)"config");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            if (op_ret == 0) {</div><div class='add'>+                ret = xmlTextWriterStartElement(writer, (xmlChar *)"config");</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                        ret = cli_xml_generate_gsync_config (dict, writer);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='add'>+                ret = cli_xml_generate_gsync_config(dict, writer);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+                ret = xmlTextWriterEndElement(writer);</div><div class='add'>+                XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_GSYNC_OPTION_TYPE_STATUS:</div><div class='del'>-                ret = cli_xml_output_vol_gsync_status (dict, writer);</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_output_vol_gsync_status(dict, writer);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/geoRep&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/geoRep&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli",GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -4391,54 +4207,54 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_create (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_create(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        char   *str_value       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapCreate&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapCreate");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapname", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapuuid", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapCreate&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *str_value = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapCreate&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapCreate");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapname", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapuuid", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/snapCreate&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot clone output in xml format.</div><div class='hunk'>@@ -4450,57 +4266,55 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_clone (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_clone(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        char   *str_value       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", writer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", doc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", dict, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;CloneCreate&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"CloneCreate");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;volume&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "clonename", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get clone name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapuuid", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get clone uuid");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/volume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/CloneCreate&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *str_value = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", writer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", doc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", dict, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;CloneCreate&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"CloneCreate");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;volume&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "clonename", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get clone name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapuuid", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get clone uuid");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/volume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/CloneCreate&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This function will generate snapshot restore output in xml format.</div><div class='ctx'>  *</div><div class='ctx'>  * @param writer        xmlTextWriterPtr</div><div class='hunk'>@@ -4510,84 +4324,83 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_restore (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_restore(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        char   *str_value       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapRestore&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapRestore");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;volume&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get vol name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volid", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get volume id");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/volume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* &lt;snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapname", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapuuid", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapRestore&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *str_value = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapRestore&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapRestore");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;volume&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get vol name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volid", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get volume id");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/volume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapname", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapuuid", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/snapRestore&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot list output in xml format.</div><div class='hunk'>@@ -4599,57 +4412,57 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_list (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_list(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        int     i               = 0;</div><div class='del'>-        int     snapcount       = 0;</div><div class='del'>-        char   *str_value       = NULL;</div><div class='del'>-        char    key[PATH_MAX]   = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int snapcount = 0;</div><div class='add'>+    char *str_value = NULL;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapList&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapList");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;snapList&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapList");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "snapcount", &amp;snapcount);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapcount");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "snapcount", &amp;snapcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snapcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "count",</div><div class='del'>-                                               "%d", snapcount);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                          snapcount);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 1; i &lt;= snapcount; ++i) {</div><div class='del'>-                ret = snprintf (key, sizeof (key), "snapname%d", i);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 1; i &lt;= snapcount; ++i) {</div><div class='add'>+        ret = snprintf(key, sizeof(key), "snapname%d", i);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (dict, key, &amp;str_value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not get %s ", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                        (xmlChar *)"snapshot", "%s", str_value);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;str_value);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not get %s ", key);</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"snapshot",</div><div class='add'>+                                                  "%s", str_value);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapList&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapList&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate xml output for origin volume</div><div class='hunk'>@@ -4663,66 +4476,66 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_info_orig_vol (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                                dict_t *dict, char *keyprefix)</div><div class='add'>+cli_xml_snapshot_info_orig_vol(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                               dict_t *dict, char *keyprefix)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        int     value           = 0;</div><div class='del'>-        char   *buffer          = NULL;</div><div class='del'>-        char    key [PATH_MAX]  = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int value = 0;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='ctx'> </div><div class='del'>-        /* &lt;originVolume&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"originVolume");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;originVolume&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"originVolume");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%sorigin-volname", keyprefix);</div><div class='add'>+    snprintf(key, sizeof(key), "%sorigin-volname", keyprefix);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_WARNING, "Failed to get %s", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_WARNING, "Failed to get %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%ssnapcount", keyprefix);</div><div class='add'>+    snprintf(key, sizeof(key), "%ssnapcount", keyprefix);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "snapCount",</div><div class='del'>-                                               "%d", value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"snapCount", "%d",</div><div class='add'>+                                          value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%ssnaps-available", keyprefix);</div><div class='add'>+    snprintf(key, sizeof(key), "%ssnaps-available", keyprefix);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "snapRemaining", "%d", value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"snapRemaining",</div><div class='add'>+                                          "%d", value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/originVolume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/originVolume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate xml output of snapshot volume info.</div><div class='hunk'>@@ -4737,66 +4550,67 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_info_snap_vol (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                                dict_t *dict, char *keyprefix,</div><div class='del'>-                                gf_boolean_t snap_driven)</div><div class='add'>+cli_xml_snapshot_info_snap_vol(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                               dict_t *dict, char *keyprefix,</div><div class='add'>+                               gf_boolean_t snap_driven)</div><div class='ctx'> {</div><div class='del'>-        char            key [PATH_MAX]          = "";</div><div class='del'>-        char           *buffer                  = NULL;</div><div class='del'>-        int             ret                     = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapVolume&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapVolume");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.volname", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapVolume&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapVolume");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.volname", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.vol-status", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* If the command is snap_driven then we need to show origin volume</div><div class='add'>+     * info. Else this is shown in the start of info display.*/</div><div class='add'>+    if (snap_driven) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.", keyprefix);</div><div class='add'>+        ret = cli_xml_snapshot_info_orig_vol(writer, doc, dict, key);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to create "</div><div class='add'>+                   "xml output for snapshot's origin volume");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.vol-status", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get %s", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "status",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* If the command is snap_driven then we need to show origin volume</div><div class='del'>-         * info. Else this is shown in the start of info display.*/</div><div class='del'>-        if (snap_driven) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.", keyprefix);</div><div class='del'>-                ret = cli_xml_snapshot_info_orig_vol (writer, doc, dict, key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot's origin volume");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    /* &lt;/snapVolume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapVolume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot info of individual snapshot</div><div class='hunk'>@@ -4812,112 +4626,104 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_info_per_snap (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                                dict_t *dict, char *keyprefix,</div><div class='del'>-                                gf_boolean_t snap_driven)</div><div class='add'>+cli_xml_snapshot_info_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                               dict_t *dict, char *keyprefix,</div><div class='add'>+                               gf_boolean_t snap_driven)</div><div class='ctx'> {</div><div class='del'>-        char            key_buffer[PATH_MAX]    = "";</div><div class='del'>-        char           *buffer                  = NULL;</div><div class='del'>-        int             volcount                = 0;</div><div class='del'>-        int             ret                     = -1;</div><div class='del'>-        int             i                       = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key_buffer, sizeof (key_buffer), "%s.snapname",</div><div class='del'>-                  keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;buffer);</div><div class='add'>+    char key_buffer[PATH_MAX] = "";</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    int volcount = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key_buffer, sizeof(key_buffer), "%s.snapname", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ", key_buffer);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key_buffer, sizeof(key_buffer), "%s.snap-id", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ", key_buffer);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key_buffer, sizeof(key_buffer), "%s.snap-desc", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;buffer);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"description",</div><div class='add'>+                                              "%s", buffer);</div><div class='add'>+    } else {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"description",</div><div class='add'>+                                              "%s", "");</div><div class='add'>+    }</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key_buffer, sizeof(key_buffer), "%s.snap-time", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key_buffer, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ", keyprefix);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"createTime", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key_buffer, sizeof(key_buffer), "%s.vol-count", keyprefix);</div><div class='add'>+    ret = dict_get_int32(dict, key_buffer, &amp;volcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Fail to get snap vol count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volCount", "%d",</div><div class='add'>+                                          volcount);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, key_buffer, &amp;volcount);</div><div class='add'>+    /* Display info of each snapshot volume */</div><div class='add'>+    for (i = 1; i &lt;= volcount; i++) {</div><div class='add'>+        snprintf(key_buffer, sizeof(key_buffer), "%s.vol%d", keyprefix, i);</div><div class='add'>+</div><div class='add'>+        ret = cli_xml_snapshot_info_snap_vol(writer, doc, dict, key_buffer,</div><div class='add'>+                                             snap_driven);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snapname %s ",</div><div class='del'>-                        key_buffer);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not list "</div><div class='add'>+                   "details of volume in a snap");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key_buffer, sizeof (key_buffer), "%s.snap-id", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-id %s ",</div><div class='del'>-                                key_buffer);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key_buffer, sizeof (key_buffer), "%s.snap-desc", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;buffer);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                (xmlChar *) "description",</div><div class='del'>-                                                "%s", buffer);</div><div class='del'>-        } else {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                (xmlChar *) "description",</div><div class='del'>-                                                "%s", "");</div><div class='del'>-        }</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key_buffer, sizeof (key_buffer), "%s.snap-time", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key_buffer, &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to fetch snap-time %s ",</div><div class='del'>-                                keyprefix);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                               (xmlChar *) "createTime",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key_buffer, sizeof (key_buffer), "%s.vol-count", keyprefix);</div><div class='del'>-        ret = dict_get_int32 (dict, key_buffer, &amp;volcount);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Fail to get snap vol count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                               (xmlChar *) "volCount",</div><div class='del'>-                                               "%d", volcount);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, key_buffer, &amp;volcount);</div><div class='del'>-        /* Display info of each snapshot volume */</div><div class='del'>-        for (i = 1 ; i &lt;= volcount ; i++) {</div><div class='del'>-                snprintf (key_buffer, sizeof (key_buffer), "%s.vol%d",</div><div class='del'>-                          keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = cli_xml_snapshot_info_snap_vol (writer, doc, dict,</div><div class='del'>-                                                      key_buffer, snap_driven);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not list "</div><div class='del'>-                                        "details of volume in a snap");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot info output in xml format.</div><div class='hunk'>@@ -4929,73 +4735,74 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_info (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_info(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        int             i               = 0;</div><div class='del'>-        int             snapcount       = 0;</div><div class='del'>-        char            key [PATH_MAX]  = "";</div><div class='del'>-        gf_boolean_t    snap_driven     = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapInfo&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapInfo");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snap_driven = dict_get_str_boolean (dict, "snap-driven", _gf_false);</div><div class='del'>-</div><div class='del'>-        /* If the approach is volume based then we should display origin volume</div><div class='del'>-         * information first followed by per snap info*/</div><div class='del'>-        if (!snap_driven) {</div><div class='del'>-                ret = cli_xml_snapshot_info_orig_vol (writer, doc, dict, "");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot's origin volume");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "snapcount", &amp;snapcount);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int snapcount = 0;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+    gf_boolean_t snap_driven = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapInfo&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapInfo");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snap_driven = dict_get_str_boolean(dict, "snap-driven", _gf_false);</div><div class='add'>+</div><div class='add'>+    /* If the approach is volume based then we should display origin volume</div><div class='add'>+     * information first followed by per snap info*/</div><div class='add'>+    if (!snap_driven) {</div><div class='add'>+        ret = cli_xml_snapshot_info_orig_vol(writer, doc, dict, "");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapcount");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to create "</div><div class='add'>+                   "xml output for snapshot's origin volume");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "count",</div><div class='del'>-                                               "%d", snapcount);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = dict_get_int32(dict, "snapcount", &amp;snapcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snapcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapshots&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshots");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                          snapcount);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* Get snapshot info of individual snapshots */</div><div class='del'>-        for (i = 1; i &lt;= snapcount; ++i) {</div><div class='del'>-                snprintf (key, sizeof (key), "snap%d", i);</div><div class='add'>+    /* &lt;snapshots&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshots");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = cli_xml_snapshot_info_per_snap (writer, doc, dict,</div><div class='del'>-                                                      key, snap_driven);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not get %s ", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    /* Get snapshot info of individual snapshots */</div><div class='add'>+    for (i = 1; i &lt;= snapcount; ++i) {</div><div class='add'>+        snprintf(key, sizeof(key), "snap%d", i);</div><div class='add'>+</div><div class='add'>+        ret = cli_xml_snapshot_info_per_snap(writer, doc, dict, key,</div><div class='add'>+                                             snap_driven);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not get %s ", key);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapshots&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapshots&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapInfo&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapInfo&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot status of individual</div><div class='hunk'>@@ -5009,139 +4816,133 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_volume_status (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                                dict_t *dict, const char *keyprefix)</div><div class='add'>+cli_xml_snapshot_volume_status(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                               dict_t *dict, const char *keyprefix)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        int     brickcount      = 0;</div><div class='del'>-        int     i               = 0;</div><div class='del'>-        int     pid             = 0;</div><div class='del'>-        char   *buffer          = NULL;</div><div class='del'>-        char    key[PATH_MAX]   = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int brickcount = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int pid = 0;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.brickcount", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;brickcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to fetch brickcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"brickCount", "%d",</div><div class='add'>+                                          brickcount);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* Get status of every brick belonging to the snapshot volume */</div><div class='add'>+    for (i = 0; i &lt; brickcount; i++) {</div><div class='add'>+        /* &lt;snapInfo&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"brick");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d.path", keyprefix, i);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unable to get Brick Path");</div><div class='add'>+            /*</div><div class='add'>+             * If path itself is not present, then end *</div><div class='add'>+             * this brick's status and continue to the *</div><div class='add'>+             * brick                                   *</div><div class='add'>+             */</div><div class='add'>+            ret = xmlTextWriterEndElement(writer);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"path", "%s",</div><div class='add'>+                                              buffer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d.vgname", keyprefix, i);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unable to get Volume Group");</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"volumeGroup", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"volumeGroup", "%s", buffer);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.brickcount", keyprefix);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d.status", keyprefix, i);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;brickcount);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to fetch brickcount");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get Brick Running");</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"brick_running", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"brick_running", "%s", buffer);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "brickCount",</div><div class='del'>-                                               "%d", brickcount);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* Get status of every brick belonging to the snapshot volume */</div><div class='del'>-        for (i = 0 ; i &lt; brickcount ; i++) {</div><div class='del'>-                /* &lt;snapInfo&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"brick");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d.path", keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to get Brick Path");</div><div class='del'>-                        /*</div><div class='del'>-                         * If path itself is not present, then end *</div><div class='del'>-                         * this brick's status and continue to the *</div><div class='del'>-                         * brick                                   *</div><div class='del'>-                         */</div><div class='del'>-                        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                        (xmlChar *) "path", "%s", buffer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d.vgname",</div><div class='del'>-                          keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                "Unable to get Volume Group");</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                              (xmlChar *) "volumeGroup", "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                       (xmlChar *) "volumeGroup", "%s", buffer);</div><div class='del'>-</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d.status", keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO,</div><div class='del'>-                                "Unable to get Brick Running");</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                            (xmlChar *) "brick_running", "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                     (xmlChar *) "brick_running", "%s", buffer);</div><div class='del'>-</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d.pid", keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_int32 (dict, key, &amp;pid);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_INFO, "Unable to get pid");</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                      (xmlChar *) "pid", "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                  (xmlChar *) "pid", "%d", pid);</div><div class='del'>-</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d.data", keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Unable to get Data Percent");</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                          (xmlChar *) "data_percentage", "N/A");</div><div class='del'>-                } else</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                   (xmlChar *) "data_percentage", "%s", buffer);</div><div class='del'>-</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.brick%d.lvsize",</div><div class='del'>-                          keyprefix, i);</div><div class='del'>-                ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Unable to get LV Size");</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                 (xmlChar *) "lvSize", "N/A");</div><div class='del'>-                } else {</div><div class='del'>-                        /* Truncate any newline character */</div><div class='del'>-                        buffer = strtok (buffer, "\n");</div><div class='del'>-</div><div class='del'>-                        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                          (xmlChar *) "lvSize", "%s", buffer);</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d.pid", keyprefix, i);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_int32(dict, key, &amp;pid);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_INFO, "Unable to get pid");</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid",</div><div class='add'>+                                                  "N/A");</div><div class='add'>+        } else</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"pid",</div><div class='add'>+                                                  "%d", pid);</div><div class='ctx'> </div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                /* &lt;/brick&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d.data", keyprefix, i);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unable to get Data Percent");</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"data_percentage", "N/A");</div><div class='add'>+        } else</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                writer, (xmlChar *)"data_percentage", "%s", buffer);</div><div class='add'>+</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "%s.brick%d.lvsize", keyprefix, i);</div><div class='add'>+        ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unable to get LV Size");</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lvSize",</div><div class='add'>+                                                  "N/A");</div><div class='add'>+        } else {</div><div class='add'>+            /* Truncate any newline character */</div><div class='add'>+            buffer = strtok(buffer, "\n");</div><div class='add'>+</div><div class='add'>+            ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"lvSize",</div><div class='add'>+                                                  "%s", buffer);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+        /* &lt;/brick&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot status of individual</div><div class='hunk'>@@ -5154,87 +4955,85 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_status_per_snap (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                                  dict_t *dict, const char *keyprefix)</div><div class='add'>+cli_xml_snapshot_status_per_snap(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                                 dict_t *dict, const char *keyprefix)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        int     volcount        = 0;</div><div class='del'>-        int     i               = 0;</div><div class='del'>-        char   *buffer          = NULL;</div><div class='del'>-        char    key [PATH_MAX]  = "";</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.snapname", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get snapname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.uuid", keyprefix);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, key, &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get snap UUID");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int volcount = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.snapname", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get snapname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.uuid", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, key, &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get snap UUID");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.volcount", keyprefix);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, key, &amp;volcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Unable to get volume count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"volCount", "%d",</div><div class='add'>+                                          volcount);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* Get snapshot status of individual snapshot volume */</div><div class='add'>+    for (i = 0; i &lt; volcount; i++) {</div><div class='add'>+        /* &lt;volume&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.volcount", keyprefix);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.vol%d", keyprefix, i);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, key, &amp;volcount);</div><div class='add'>+        ret = cli_xml_snapshot_volume_status(writer, doc, dict, key);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unable to get volume count");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not get snap volume status");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "volCount",</div><div class='del'>-                                               "%d", volcount);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* Get snapshot status of individual snapshot volume */</div><div class='del'>-        for (i = 0 ; i &lt; volcount ; i++) {</div><div class='del'>-                /* &lt;volume&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "%s.vol%d", keyprefix, i);</div><div class='del'>-</div><div class='del'>-                ret = cli_xml_snapshot_volume_status (writer, doc,</div><div class='del'>-                                                             dict, key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                                        "Could not get snap volume status");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* &lt;/volume&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        /* &lt;/volume&gt; */</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot status output in xml format.</div><div class='hunk'>@@ -5246,64 +5045,63 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_status (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_status(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        int     snapcount       = 0;</div><div class='del'>-        int     i               = 0;</div><div class='del'>-        int     status_cmd      = 0;</div><div class='del'>-        char    key [PATH_MAX]  = "";</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "sub-cmd", &amp;status_cmd);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int snapcount = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int status_cmd = 0;</div><div class='add'>+    char key[PATH_MAX] = "";</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "sub-cmd", &amp;status_cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch status type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((GF_SNAP_STATUS_TYPE_SNAP == status_cmd) ||</div><div class='add'>+        (GF_SNAP_STATUS_TYPE_ITER == status_cmd)) {</div><div class='add'>+        snapcount = 1;</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_get_int32(dict, "status.snapcount", &amp;snapcount);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch status type");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not get snapcount");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((GF_SNAP_STATUS_TYPE_SNAP == status_cmd) ||</div><div class='del'>-            (GF_SNAP_STATUS_TYPE_ITER == status_cmd)) {</div><div class='del'>-                snapcount = 1;</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_get_int32 (dict, "status.snapcount", &amp;snapcount);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not get snapcount");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *) "count",</div><div class='del'>-                                                       "%d", snapcount);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                              snapcount);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; snapcount; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "status.snap%d", i);</div><div class='add'>+    for (i = 0; i &lt; snapcount; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "status.snap%d", i);</div><div class='ctx'> </div><div class='del'>-                ret = cli_xml_snapshot_status_per_snap (writer, doc,</div><div class='del'>-                                                               dict, key);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "failed to create xml "</div><div class='del'>-                                "output for snapshot status");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = cli_xml_snapshot_status_per_snap(writer, doc, dict, key);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "failed to create xml "</div><div class='add'>+                   "output for snapshot status");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot config show output in xml format.</div><div class='hunk'>@@ -5315,153 +5113,149 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_config_show (xmlTextWriterPtr writer,</div><div class='del'>-                              xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_config_show(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                             dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        uint64_t        i               = 0;</div><div class='del'>-        uint64_t        value           = 0;</div><div class='del'>-        uint64_t        volcount        = 0;</div><div class='del'>-        char            buf[PATH_MAX]   = "";</div><div class='del'>-        char           *str_value       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* &lt;systemConfig&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                        (xmlChar *)"systemConfig");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_uint64 (dict, "snap-max-hard-limit", &amp;value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get "</div><div class='del'>-                        "snap-max-hard-limit");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                        (xmlChar *) "hardLimit", "%"PRIu64, value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    uint64_t volcount = 0;</div><div class='add'>+    char buf[PATH_MAX] = "";</div><div class='add'>+    char *str_value = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* &lt;systemConfig&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"systemConfig");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint64(dict, "snap-max-hard-limit", &amp;value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get "</div><div class='add'>+               "snap-max-hard-limit");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hardLimit",</div><div class='add'>+                                          "%" PRIu64, value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint64(dict, "snap-max-soft-limit", &amp;value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get "</div><div class='add'>+               "snap-max-soft-limit");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"softLimit",</div><div class='add'>+                                          "%" PRIu64 "%%", value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "auto-delete", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch auto-delete");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"autoDelete", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snap-activate-on-create", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Could not fetch snap-activate-on-create-delete");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"activateOnCreate",</div><div class='add'>+                                          "%s", str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/systemConfig&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;volumeConfig&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volumeConfig");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint64(dict, "voldisplaycount", &amp;volcount);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch volcount");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Get config of all the volumes */</div><div class='add'>+    for (i = 0; i &lt; volcount; i++) {</div><div class='add'>+        /* &lt;volume&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volume");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint64 (dict, "snap-max-soft-limit", &amp;value);</div><div class='add'>+        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-volname", i);</div><div class='add'>+        ret = dict_get_str(dict, buf, &amp;str_value);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get "</div><div class='del'>-                        "snap-max-soft-limit");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not fetch %s", buf);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                        (xmlChar *) "softLimit",</div><div class='del'>-                        "%"PRIu64"%%", value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              str_value);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "auto-delete", &amp;str_value);</div><div class='add'>+        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-snap-max-hard-limit", i);</div><div class='add'>+        ret = dict_get_uint64(dict, buf, &amp;value);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch auto-delete");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not fetch %s", buf);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                        (xmlChar *) "autoDelete", "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"hardLimit",</div><div class='add'>+                                              "%" PRIu64, value);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "snap-activate-on-create", &amp;str_value);</div><div class='add'>+        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-active-hard-limit", i);</div><div class='add'>+        ret = dict_get_uint64(dict, buf, &amp;value);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Could not fetch snap-activate-on-create-delete");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Could not fetch"</div><div class='add'>+                   " effective snap_max_hard_limit for "</div><div class='add'>+                   "%s",</div><div class='add'>+                   str_value);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                        (xmlChar *) "activateOnCreate", "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/systemConfig&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;volumeConfig&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volumeConfig");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            writer, (xmlChar *)"effectiveHardLimit", "%" PRIu64, value);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint64 (dict, "voldisplaycount", &amp;volcount);</div><div class='add'>+        snprintf(buf, sizeof(buf), "volume%" PRIu64 "-snap-max-soft-limit", i);</div><div class='add'>+        ret = dict_get_uint64(dict, buf, &amp;value);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch volcount");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Could not fetch %s", buf);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Get config of all the volumes */</div><div class='del'>-        for (i = 0; i &lt; volcount; i++) {</div><div class='del'>-                /* &lt;volume&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"volume");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (buf, sizeof(buf), "volume%"PRIu64"-volname", i);</div><div class='del'>-                ret = dict_get_str (dict, buf, &amp;str_value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch %s", buf);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "name", "%s", str_value);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                snprintf (buf, sizeof(buf),</div><div class='del'>-                                "volume%"PRIu64"-snap-max-hard-limit", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, buf, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch %s", buf);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "hardLimit", "%"PRIu64, value);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (buf, sizeof(buf),</div><div class='del'>-                                "volume%"PRIu64"-active-hard-limit", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, buf, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch"</div><div class='del'>-                                " effective snap_max_hard_limit for "</div><div class='del'>-                                "%s", str_value);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "effectiveHardLimit",</div><div class='del'>-                                "%"PRIu64, value);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                snprintf (buf, sizeof(buf),</div><div class='del'>-                                "volume%"PRIu64"-snap-max-soft-limit", i);</div><div class='del'>-                ret = dict_get_uint64 (dict, buf, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Could not fetch %s", buf);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                        (xmlChar *) "softLimit",</div><div class='del'>-                                        "%"PRIu64, value);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-                /* &lt;/volume&gt; */</div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"softLimit",</div><div class='add'>+                                              "%" PRIu64, value);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'>         /* &lt;/volume&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    /* &lt;/volume&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot config set output in xml format.</div><div class='hunk'>@@ -5473,87 +5267,84 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_config_set (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                             dict_t *dict)</div><div class='add'>+cli_xml_snapshot_config_set(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                            dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        uint64_t        hard_limit      = 0;</div><div class='del'>-        uint64_t        soft_limit      = 0;</div><div class='del'>-        char           *volname         = NULL;</div><div class='del'>-        char           *auto_delete     = NULL;</div><div class='del'>-        char           *snap_activate   = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* This is optional parameter therefore ignore the error */</div><div class='del'>-        ret = dict_get_uint64 (dict, "snap-max-hard-limit", &amp;hard_limit);</div><div class='del'>-        /* This is optional parameter therefore ignore the error */</div><div class='del'>-        ret = dict_get_uint64 (dict, "snap-max-soft-limit", &amp;soft_limit);</div><div class='del'>-        ret = dict_get_str (dict, "auto-delete", &amp;auto_delete);</div><div class='del'>-        ret = dict_get_str (dict, "snap-activate-on-create", &amp;snap_activate);</div><div class='del'>-</div><div class='del'>-        if (!hard_limit &amp;&amp; !soft_limit &amp;&amp; !auto_delete &amp;&amp; !snap_activate) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "At least one option from "</div><div class='del'>-                        "snap-max-hard-limit, snap-max-soft-limit, auto-delete"</div><div class='del'>-                        " and snap-activate-on-create should be set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Ignore the error, as volname is optional */</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-</div><div class='del'>-        if (NULL == volname) {</div><div class='del'>-                /* &lt;systemConfig&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"systemConfig");</div><div class='del'>-        } else {</div><div class='del'>-                /* &lt;volumeConfig&gt; */</div><div class='del'>-                ret = xmlTextWriterStartElement (writer,</div><div class='del'>-                                                 (xmlChar *)"volumeConfig");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t hard_limit = 0;</div><div class='add'>+    uint64_t soft_limit = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *auto_delete = NULL;</div><div class='add'>+    char *snap_activate = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* This is optional parameter therefore ignore the error */</div><div class='add'>+    ret = dict_get_uint64(dict, "snap-max-hard-limit", &amp;hard_limit);</div><div class='add'>+    /* This is optional parameter therefore ignore the error */</div><div class='add'>+    ret = dict_get_uint64(dict, "snap-max-soft-limit", &amp;soft_limit);</div><div class='add'>+    ret = dict_get_str(dict, "auto-delete", &amp;auto_delete);</div><div class='add'>+    ret = dict_get_str(dict, "snap-activate-on-create", &amp;snap_activate);</div><div class='add'>+</div><div class='add'>+    if (!hard_limit &amp;&amp; !soft_limit &amp;&amp; !auto_delete &amp;&amp; !snap_activate) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "At least one option from "</div><div class='add'>+               "snap-max-hard-limit, snap-max-soft-limit, auto-delete"</div><div class='add'>+               " and snap-activate-on-create should be set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Ignore the error, as volname is optional */</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+</div><div class='add'>+    if (NULL == volname) {</div><div class='add'>+        /* &lt;systemConfig&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"systemConfig");</div><div class='add'>+    } else {</div><div class='add'>+        /* &lt;volumeConfig&gt; */</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"volumeConfig");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "name", "%s", volname);</div><div class='del'>-        }</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                              volname);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        if (hard_limit) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                (xmlChar *) "newHardLimit",</div><div class='del'>-                                                "%"PRIu64, hard_limit);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    if (hard_limit) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"newHardLimit",</div><div class='add'>+                                              "%" PRIu64, hard_limit);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (soft_limit) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "newSoftLimit",</div><div class='del'>-                                "%"PRIu64, soft_limit);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    if (soft_limit) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"newSoftLimit",</div><div class='add'>+                                              "%" PRIu64, soft_limit);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (auto_delete) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                (xmlChar *) "autoDelete", "%s", auto_delete);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    if (auto_delete) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"autoDelete",</div><div class='add'>+                                              "%s", auto_delete);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (snap_activate) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                           (xmlChar *) "activateOnCreate", "%s", snap_activate);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='add'>+    if (snap_activate) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            writer, (xmlChar *)"activateOnCreate", "%s", snap_activate);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/volumeConfig&gt; or &lt;/systemConfig&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/volumeConfig&gt; or &lt;/systemConfig&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot config output in xml format.</div><div class='hunk'>@@ -5565,58 +5356,60 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_config (xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='add'>+cli_xml_snapshot_config(xmlTextWriterPtr writer, xmlDocPtr doc, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        int             config_command  = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int config_command = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapConfig&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapConfig");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;snapConfig&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapConfig");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "config-command", &amp;config_command);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Could not fetch config type");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(dict, "config-command", &amp;config_command);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Could not fetch config type");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (config_command) {</div><div class='add'>+    switch (config_command) {</div><div class='ctx'>         case GF_SNAP_CONFIG_TYPE_SET:</div><div class='del'>-                ret = cli_xml_snapshot_config_set (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create xml "</div><div class='del'>-                                "output for snapshot config set command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = cli_xml_snapshot_config_set(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create xml "</div><div class='add'>+                       "output for snapshot config set command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_CONFIG_DISPLAY:</div><div class='del'>-                ret = cli_xml_snapshot_config_show (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create xml "</div><div class='del'>-                                "output for snapshot config show command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_config_show(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create xml "</div><div class='add'>+                       "output for snapshot config show command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Unknown config command :%d",</div><div class='del'>-                        config_command);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unknown config command :%d",</div><div class='add'>+                   config_command);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapConfig&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapConfig&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will generate snapshot activate or</div><div class='hunk'>@@ -5629,67 +5422,66 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-cli_xml_snapshot_activate_deactivate (xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='del'>-                                      dict_t *dict, int cmd)</div><div class='add'>+cli_xml_snapshot_activate_deactivate(xmlTextWriterPtr writer, xmlDocPtr doc,</div><div class='add'>+                                     dict_t *dict, int cmd)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='del'>-        char   *buffer  = NULL;</div><div class='del'>-        char   *tag     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        if (GF_SNAP_OPTION_TYPE_ACTIVATE == cmd) {</div><div class='del'>-                tag = "snapActivate";</div><div class='del'>-        } else if (GF_SNAP_OPTION_TYPE_DEACTIVATE == cmd) {</div><div class='del'>-                tag = "snapDeactivate";</div><div class='del'>-        } else {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "invalid command %d", cmd);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* &lt;snapActivate&gt; or &lt;snapDeactivate&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)tag);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapname", &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapuuid", &amp;buffer);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", buffer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* &lt;/snapActivate&gt; or &lt;/snapDeactivate&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    char *tag = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    if (GF_SNAP_OPTION_TYPE_ACTIVATE == cmd) {</div><div class='add'>+        tag = "snapActivate";</div><div class='add'>+    } else if (GF_SNAP_OPTION_TYPE_DEACTIVATE == cmd) {</div><div class='add'>+        tag = "snapDeactivate";</div><div class='add'>+    } else {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "invalid command %d", cmd);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* &lt;snapActivate&gt; or &lt;snapDeactivate&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)tag);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapname", &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapuuid", &amp;buffer);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          buffer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/snapActivate&gt; or &lt;/snapDeactivate&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='ctx'> </div><div class='hunk'>@@ -5703,190 +5495,183 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_xml_snapshot_delete (cli_local_t *local, dict_t *dict, gf_cli_rsp *rsp)</div><div class='add'>+cli_xml_snapshot_delete(cli_local_t *local, dict_t *dict, gf_cli_rsp *rsp)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #ifdef HAVE_LIB_XML</div><div class='del'>-        char   *str_value       = NULL;</div><div class='del'>-        xmlTextWriterPtr writer = local-&gt;writer;</div><div class='del'>-        xmlDocPtr doc           = local-&gt;doc;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (writer);</div><div class='del'>-        GF_ASSERT (doc);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        /* &lt;snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"snapshot");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapname", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='del'>-                goto xmlend;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!rsp-&gt;op_ret) {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *) "status",</div><div class='del'>-                                                       "Success");</div><div class='del'>-        } else {</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *) "status",</div><div class='del'>-                                                       "Failure");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, xmlend);</div><div class='del'>-</div><div class='del'>-                ret = cli_xml_output_common (writer, rsp-&gt;op_ret,</div><div class='del'>-                                             rsp-&gt;op_errno,</div><div class='del'>-                                             rsp-&gt;op_errstr);</div><div class='del'>-        }</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xmlend);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "name",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xmlend);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "snapuuid", &amp;str_value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='del'>-                goto xmlend;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *) "uuid",</div><div class='del'>-                                               "%s", str_value);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    char *str_value = NULL;</div><div class='add'>+    xmlTextWriterPtr writer = local-&gt;writer;</div><div class='add'>+    xmlDocPtr doc = local-&gt;doc;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(writer);</div><div class='add'>+    GF_ASSERT(doc);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    /* &lt;snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"snapshot");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapname", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap name");</div><div class='add'>+        goto xmlend;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!rsp-&gt;op_ret) {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status",</div><div class='add'>+                                              "Success");</div><div class='add'>+    } else {</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"status",</div><div class='add'>+                                              "Failure");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, xmlend);</div><div class='add'>+</div><div class='add'>+        ret = cli_xml_output_common(writer, rsp-&gt;op_ret, rsp-&gt;op_errno,</div><div class='add'>+                                    rsp-&gt;op_errstr);</div><div class='add'>+    }</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xmlend);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"name", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xmlend);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "snapuuid", &amp;str_value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get snap uuid");</div><div class='add'>+        goto xmlend;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"uuid", "%s",</div><div class='add'>+                                          str_value);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> xmlend:</div><div class='del'>-        /* &lt;/snapshot&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapshot&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_snap_status_begin (cli_local_t *local, int op_ret, int op_errno,</div><div class='del'>-                                  char *op_errstr)</div><div class='add'>+cli_xml_output_snap_status_begin(cli_local_t *local, int op_ret, int op_errno,</div><div class='add'>+                                 char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_begin_xml_output(&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (local-&gt;writer, op_ret, op_errno,</div><div class='del'>-                                     op_errstr);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_xml_output_common(local-&gt;writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *) "snapStatus");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;snapStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"snapStatus");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapshots&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"snapshots");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;snapshots&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"snapshots");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_snap_status_end (cli_local_t *local)</div><div class='add'>+cli_xml_output_snap_status_end(cli_local_t *local)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapshots&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapshots&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    /* &lt;/snapStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (local-&gt;writer, local-&gt;doc);</div><div class='add'>+    ret = cli_end_xml_output(local-&gt;writer, local-&gt;doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_snap_delete_begin (cli_local_t *local, int op_ret, int op_errno,</div><div class='del'>-                                  char *op_errstr)</div><div class='add'>+cli_xml_output_snap_delete_begin(cli_local_t *local, int op_ret, int op_errno,</div><div class='add'>+                                 char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int delete_cmd = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int delete_cmd = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        ret = cli_begin_xml_output (&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_begin_xml_output(&amp;(local-&gt;writer), &amp;(local-&gt;doc));</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "sub-cmd", &amp;delete_cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get sub-cmd");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "sub-cmd", &amp;delete_cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Failed to get sub-cmd");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_output_common (local-&gt;writer, op_ret, op_errno,</div><div class='del'>-                                             op_errstr);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = cli_xml_output_common(local-&gt;writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapStatus&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer,</div><div class='del'>-                                         (xmlChar *) "snapDelete");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;snapStatus&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"snapDelete");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;snapshots&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"snapshots");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;snapshots&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"snapshots");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_snap_delete_end (cli_local_t *local)</div><div class='add'>+cli_xml_output_snap_delete_end(cli_local_t *local)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapshots&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    /* &lt;/snapshots&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        /* &lt;/snapDelete&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    /* &lt;/snapDelete&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_end_xml_output (local-&gt;writer, local-&gt;doc);</div><div class='add'>+    ret = cli_end_xml_output(local-&gt;writer, local-&gt;doc);</div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_TRACE, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> /* This function will generate xml output for all the snapshot commands</div><div class='hunk'>@@ -5900,493 +5685,484 @@ out:</div><div class='ctx'>  * @return 0 on success and -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_xml_output_snapshot (int cmd_type, dict_t *dict, int op_ret,</div><div class='del'>-                         int op_errno, char *op_errstr)</div><div class='add'>+cli_xml_output_snapshot(int cmd_type, dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                        char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-        xmlTextWriterPtr        writer  = NULL;</div><div class='del'>-        xmlDocPtr               doc     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to output "</div><div class='del'>-                        "xml begin block");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to output "</div><div class='del'>-                        "xml common block");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* In case of command failure just printing the error message is good</div><div class='del'>-         * enough */</div><div class='del'>-        if (0 != op_ret) {</div><div class='del'>-                goto end;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (cmd_type) {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to output "</div><div class='add'>+               "xml begin block");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to output "</div><div class='add'>+               "xml common block");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* In case of command failure just printing the error message is good</div><div class='add'>+     * enough */</div><div class='add'>+    if (0 != op_ret) {</div><div class='add'>+        goto end;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (cmd_type) {</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CREATE:</div><div class='del'>-                ret = cli_xml_snapshot_create (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot create command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_create(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot create command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CLONE:</div><div class='del'>-                ret = cli_xml_snapshot_clone (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot clone command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_clone(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot clone command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_RESTORE:</div><div class='del'>-                ret = cli_xml_snapshot_restore (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot restore command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_restore(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot restore command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_LIST:</div><div class='del'>-                ret = cli_xml_snapshot_list (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot list command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_list(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot list command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_STATUS:</div><div class='del'>-                ret = cli_xml_snapshot_status (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create"</div><div class='del'>-                                "xml output for snapshot status command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_status(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create"</div><div class='add'>+                       "xml output for snapshot status command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_INFO:</div><div class='del'>-                ret = cli_xml_snapshot_info (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot info command");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_info(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot info command");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_ACTIVATE:</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_DEACTIVATE:</div><div class='del'>-                ret = cli_xml_snapshot_activate_deactivate (writer, doc,</div><div class='del'>-                                                            dict, cmd_type);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot config command");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_activate_deactivate(writer, doc, dict,</div><div class='add'>+                                                       cmd_type);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot config command");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SNAP_OPTION_TYPE_CONFIG:</div><div class='del'>-                ret = cli_xml_snapshot_config (writer, doc, dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to create "</div><div class='del'>-                                "xml output for snapshot config command");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = cli_xml_snapshot_config(writer, doc, dict);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                       "Failed to create "</div><div class='add'>+                       "xml output for snapshot config command");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR,</div><div class='del'>-                        "Unexpected snapshot command: %d", cmd_type);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR, "Unexpected snapshot command: %d",</div><div class='add'>+                   cmd_type);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> end:</div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to output "</div><div class='del'>-                        "xml end block");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to output "</div><div class='add'>+               "xml end block");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_snapshot_begin_composite_op (cli_local_t *local)</div><div class='add'>+cli_xml_snapshot_begin_composite_op(cli_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret         = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #ifdef HAVE_LIB_XML</div><div class='del'>-        int cmd         = -1;</div><div class='del'>-        int type        =  -1;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get "</div><div class='del'>-                        "sub-cmd");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd == GF_SNAP_STATUS_TYPE_ITER ||</div><div class='del'>-            cmd == GF_SNAP_DELETE_TYPE_SNAP){</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "type", &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapshot "</div><div class='del'>-                        "command type from dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (GF_SNAP_OPTION_TYPE_STATUS == type)</div><div class='del'>-                ret = cli_xml_output_snap_status_begin (local, 0, 0, NULL);</div><div class='del'>-        else if (GF_SNAP_OPTION_TYPE_DELETE == type)</div><div class='del'>-                ret = cli_xml_output_snap_delete_begin (local, 0, 0, NULL);</div><div class='add'>+    int cmd = -1;</div><div class='add'>+    int type = -1;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get "</div><div class='add'>+               "sub-cmd");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Error creating xml output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (cmd == GF_SNAP_STATUS_TYPE_ITER || cmd == GF_SNAP_DELETE_TYPE_SNAP) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get snapshot "</div><div class='add'>+               "command type from dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (GF_SNAP_OPTION_TYPE_STATUS == type)</div><div class='add'>+        ret = cli_xml_output_snap_status_begin(local, 0, 0, NULL);</div><div class='add'>+    else if (GF_SNAP_OPTION_TYPE_DELETE == type)</div><div class='add'>+        ret = cli_xml_output_snap_delete_begin(local, 0, 0, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "Error creating xml output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_snapshot_end_composite_op (cli_local_t *local)</div><div class='add'>+cli_xml_snapshot_end_composite_op(cli_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret         = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #ifdef HAVE_LIB_XML</div><div class='del'>-        int cmd         = -1;</div><div class='del'>-        int type        = -1;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get "</div><div class='del'>-                        "sub-cmd");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd == GF_SNAP_STATUS_TYPE_ITER ||</div><div class='del'>-            cmd == GF_SNAP_DELETE_TYPE_SNAP){</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (local-&gt;dict, "type", &amp;type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to get snapshot "</div><div class='del'>-                        "command type from dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (GF_SNAP_OPTION_TYPE_STATUS == type)</div><div class='del'>-                ret = cli_xml_output_snap_status_end (local);</div><div class='del'>-        else if (GF_SNAP_OPTION_TYPE_DELETE == type)</div><div class='del'>-                ret = cli_xml_output_snap_delete_end (local);</div><div class='add'>+    int cmd = -1;</div><div class='add'>+    int type = -1;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "sub-cmd", &amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get "</div><div class='add'>+               "sub-cmd");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Error creating xml "</div><div class='del'>-                                "output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-#endif /* HAVE_LIB_XML */</div><div class='add'>+    if (cmd == GF_SNAP_STATUS_TYPE_ITER || cmd == GF_SNAP_DELETE_TYPE_SNAP) {</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(local-&gt;dict, "type", &amp;type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to get snapshot "</div><div class='add'>+               "command type from dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (GF_SNAP_OPTION_TYPE_STATUS == type)</div><div class='add'>+        ret = cli_xml_output_snap_status_end(local);</div><div class='add'>+    else if (GF_SNAP_OPTION_TYPE_DELETE == type)</div><div class='add'>+        ret = cli_xml_output_snap_delete_end(local);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Error creating xml "</div><div class='add'>+               "output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+#endif /* HAVE_LIB_XML */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_snapshot_status_single_snap (cli_local_t *local, dict_t *dict,</div><div class='del'>-                                     char *key)</div><div class='add'>+cli_xml_snapshot_status_single_snap(cli_local_t *local, dict_t *dict, char *key)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", (local != NULL), out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", (dict != NULL), out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cli", (key != NULL), out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", (local != NULL), out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", (dict != NULL), out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cli", (key != NULL), out);</div><div class='ctx'> </div><div class='del'>-        ret = cli_xml_snapshot_status_per_snap (local-&gt;writer, local-&gt;doc, dict,</div><div class='del'>-                                                key);</div><div class='add'>+    ret = cli_xml_snapshot_status_per_snap(local-&gt;writer, local-&gt;doc, dict,</div><div class='add'>+                                           key);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_xml_output_vol_getopts (dict_t *dict, int op_ret, int op_errno,</div><div class='del'>-                            char *op_errstr)</div><div class='add'>+cli_xml_output_vol_getopts(dict_t *dict, int op_ret, int op_errno,</div><div class='add'>+                           char *op_errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        int                     count = 0;</div><div class='del'>-        xmlTextWriterPtr        writer = NULL;</div><div class='del'>-        xmlDocPtr               doc = NULL;</div><div class='del'>-        char                    *key = NULL;</div><div class='del'>-        char                    *value = NULL;</div><div class='del'>-        char                    dict_key[50] = {0,};</div><div class='del'>-</div><div class='del'>-        ret = cli_begin_xml_output (&amp;writer, &amp;doc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = cli_xml_output_common (writer, op_ret, op_errno, op_errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterStartElement (writer, (xmlChar *)"volGetopts");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (dict, "count", &amp;count);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    xmlTextWriterPtr writer = NULL;</div><div class='add'>+    xmlDocPtr doc = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char dict_key[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = cli_begin_xml_output(&amp;writer, &amp;doc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = cli_xml_output_common(writer, op_ret, op_errno, op_errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterStartElement(writer, (xmlChar *)"volGetopts");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "count", &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Failed to retrieve count "</div><div class='add'>+               "from the dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (count &lt;= 0) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+               "Value of count :%d is "</div><div class='add'>+               "invalid",</div><div class='add'>+               count);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"count", "%d",</div><div class='add'>+                                          count);</div><div class='add'>+</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt;= count; i++) {</div><div class='add'>+        sprintf(dict_key, "key%d", i);</div><div class='add'>+        ret = dict_get_str(dict, dict_key, &amp;key);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Failed to retrieve count "</div><div class='del'>-                        "from the dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (count &lt;= 0) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "Value of count :%d is "</div><div class='del'>-                        "invalid", count);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (writer, (xmlChar *)"count",</div><div class='del'>-                                               "%d", count);</div><div class='del'>-</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        for (i=1; i&lt;=count; i++) {</div><div class='del'>-                sprintf (dict_key, "key%d", i);</div><div class='del'>-                ret = dict_get_str (dict, dict_key, &amp;key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to"</div><div class='del'>-                                " retrieve %s from the "</div><div class='del'>-                                "dictionary", dict_key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                sprintf (dict_key, "value%d", i);</div><div class='del'>-                ret = dict_get_str (dict, dict_key, &amp;value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("cli", GF_LOG_ERROR, "Failed to "</div><div class='del'>-                                "retrieve key value for %s from"</div><div class='del'>-                                "the dictionary", dict_key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = xmlTextWriterStartElement (writer, (xmlChar *)"Opt");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to"</div><div class='add'>+                   " retrieve %s from the "</div><div class='add'>+                   "dictionary",</div><div class='add'>+                   dict_key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        sprintf(dict_key, "value%d", i);</div><div class='add'>+        ret = dict_get_str(dict, dict_key, &amp;value);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("cli", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "retrieve key value for %s from"</div><div class='add'>+                   "the dictionary",</div><div class='add'>+                   dict_key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = xmlTextWriterStartElement(writer, (xmlChar *)"Opt");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"Option",</div><div class='del'>-                                                       "%s", key);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"Option", "%s",</div><div class='add'>+                                              key);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (writer,</div><div class='del'>-                                                       (xmlChar *)"Value",</div><div class='del'>-                                                       "%s", value);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(writer, (xmlChar *)"Value", "%s",</div><div class='add'>+                                              value);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-                ret = xmlTextWriterEndElement (writer);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-        }</div><div class='del'>-        ret = cli_end_xml_output (writer, doc);</div><div class='add'>+        ret = xmlTextWriterEndElement(writer);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+    }</div><div class='add'>+    ret = cli_end_xml_output(writer, doc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quota_list_xml_error (cli_local_t *local, char *path,</div><div class='del'>-                          char *errstr)</div><div class='add'>+cli_quota_list_xml_error(cli_local_t *local, char *path, char *errstr)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret     =       -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"limit");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"limit");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                              (xmlChar *)"path",</div><div class='del'>-                                               "%s", path);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"path",</div><div class='add'>+                                          "%s", path);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                              (xmlChar *)"errstr",</div><div class='del'>-                                               "%s", errstr);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"errstr",</div><div class='add'>+                                          "%s", errstr);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quota_xml_output (cli_local_t *local, char *path, int64_t hl_str,</div><div class='del'>-                      char *sl_final, int64_t sl_num, int64_t used,</div><div class='del'>-                      int64_t avail, char *sl, char *hl,</div><div class='del'>-                      gf_boolean_t limit_set)</div><div class='add'>+cli_quota_xml_output(cli_local_t *local, char *path, int64_t hl_str,</div><div class='add'>+                     char *sl_final, int64_t sl_num, int64_t used,</div><div class='add'>+                     int64_t avail, char *sl, char *hl, gf_boolean_t limit_set)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"limit");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"path",</div><div class='del'>-                                               "%s", path);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"hard_limit",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%"PRId64, hl_str);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"soft_limit_percent",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%s", sl_final);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"soft_limit_value",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%"PRId64, sl_num);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"used_space",</div><div class='del'>-                                               "%"PRId64, used);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"avail_space",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%"PRId64, avail);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                              (xmlChar *)"sl_exceeded",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%s", sl);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"hl_exceeded",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%s", hl);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"limit");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"path",</div><div class='add'>+                                          "%s", path);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"hard_limit", !limit_set ? "N/A" : "%" PRId64,</div><div class='add'>+        hl_str);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                          (xmlChar *)"soft_limit_percent",</div><div class='add'>+                                          !limit_set ? "N/A" : "%s", sl_final);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"soft_limit_value",</div><div class='add'>+        !limit_set ? "N/A" : "%" PRId64, sl_num);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"used_space", "%" PRId64, used);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"avail_space",</div><div class='add'>+        !limit_set ? "N/A" : "%" PRId64, avail);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"sl_exceeded", !limit_set ? "N/A" : "%s", sl);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"hl_exceeded", !limit_set ? "N/A" : "%s", hl);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_quota_object_xml_output (cli_local_t *local, char *path, char *sl_str,</div><div class='del'>-                             int64_t sl_val, quota_limits_t *limits,</div><div class='del'>-                             quota_meta_t *used_space, int64_t avail,</div><div class='del'>-                             char *sl, char *hl, gf_boolean_t limit_set)</div><div class='add'>+cli_quota_object_xml_output(cli_local_t *local, char *path, char *sl_str,</div><div class='add'>+                            int64_t sl_val, quota_limits_t *limits,</div><div class='add'>+                            quota_meta_t *used_space, int64_t avail, char *sl,</div><div class='add'>+                            char *hl, gf_boolean_t limit_set)</div><div class='ctx'> {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterStartElement (local-&gt;writer, (xmlChar *)"limit");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"path",</div><div class='del'>-                                              "%s", path);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"hard_limit",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%"PRId64, limits-&gt;hl);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterStartElement(local-&gt;writer, (xmlChar *)"limit");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"soft_limit_percent",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%s", sl_str);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"path",</div><div class='add'>+                                          "%s", path);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"soft_limit_value",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%"PRIu64, sl_val);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"hard_limit", !limit_set ? "N/A" : "%" PRId64,</div><div class='add'>+        limits-&gt;hl);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"file_count",</div><div class='del'>-                                               "%"PRId64,</div><div class='del'>-                                               used_space-&gt;file_count);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                          (xmlChar *)"soft_limit_percent",</div><div class='add'>+                                          !limit_set ? "N/A" : "%s", sl_str);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"soft_limit_value",</div><div class='add'>+        !limit_set ? "N/A" : "%" PRIu64, sl_val);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"dir_count",</div><div class='del'>-                                               "%"PRIu64,</div><div class='del'>-                                               used_space-&gt;dir_count);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer,</div><div class='add'>+                                          (xmlChar *)"file_count", "%" PRId64,</div><div class='add'>+                                          used_space-&gt;file_count);</div><div class='ctx'> </div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"dir_count",</div><div class='add'>+                                          "%" PRIu64, used_space-&gt;dir_count);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"available",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%"PRId64, avail);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(local-&gt;writer, (xmlChar *)"available",</div><div class='add'>+                                          !limit_set ? "N/A" : "%" PRId64,</div><div class='add'>+                                          avail);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"sl_exceeded",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%s", sl);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (local-&gt;writer,</div><div class='del'>-                                               (xmlChar *)"hl_exceeded",</div><div class='del'>-                                               !limit_set ? "N/A" :</div><div class='del'>-                                               "%s", hl);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"sl_exceeded", !limit_set ? "N/A" : "%s", sl);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        local-&gt;writer, (xmlChar *)"hl_exceeded", !limit_set ? "N/A" : "%s", hl);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = xmlTextWriterEndElement (local-&gt;writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, out);</div><div class='add'>+    ret = xmlTextWriterEndElement(local-&gt;writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #else</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> #endif /* HAVE_LIB_XML */</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/cli.c b/cli/src/cli.c<br/>index 025f72c9748..39a0984a134 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/cli.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/cli.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/cli.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/cli.c</a></div><div class='hunk'>@@ -64,16 +64,17 @@</div><div class='ctx'> extern int connected;</div><div class='ctx'> /* using argp for command line parsing */</div><div class='ctx'> </div><div class='del'>-const char *argp_program_version = ""                                         \</div><div class='del'>-        PACKAGE_NAME" "PACKAGE_VERSION                                        \</div><div class='del'>-        "\nRepository revision: " GLUSTERFS_REPOSITORY_REVISION "\n"          \</div><div class='del'>-        "Copyright (c) 2006-2016 Red Hat, Inc. "                              \</div><div class='del'>-        "&lt;https://www.gluster.org/&gt;\n"                                        \</div><div class='del'>-        "GlusterFS comes with ABSOLUTELY NO WARRANTY.\n"                      \</div><div class='del'>-        "It is licensed to you under your choice of the GNU Lesser\n"         \</div><div class='del'>-        "General Public License, version 3 or any later version (LGPLv3\n"    \</div><div class='del'>-        "or later), or the GNU General Public License, version 2 (GPLv2),\n"  \</div><div class='del'>-        "in all cases as published by the Free Software Foundation.";</div><div class='add'>+const char *argp_program_version =</div><div class='add'>+    "" PACKAGE_NAME " " PACKAGE_VERSION</div><div class='add'>+    "\nRepository revision: " GLUSTERFS_REPOSITORY_REVISION</div><div class='add'>+    "\n"</div><div class='add'>+    "Copyright (c) 2006-2016 Red Hat, Inc. "</div><div class='add'>+    "&lt;https://www.gluster.org/&gt;\n"</div><div class='add'>+    "GlusterFS comes with ABSOLUTELY NO WARRANTY.\n"</div><div class='add'>+    "It is licensed to you under your choice of the GNU Lesser\n"</div><div class='add'>+    "General Public License, version 3 or any later version (LGPLv3\n"</div><div class='add'>+    "or later), or the GNU General Public License, version 2 (GPLv2),\n"</div><div class='add'>+    "in all cases as published by the Free Software Foundation.";</div><div class='ctx'> const char *argp_program_bug_address = "&lt;" PACKAGE_BUGREPORT "&gt;";</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *global_quotad_rpc;</div><div class='hunk'>@@ -81,231 +82,228 @@ struct rpc_clnt *global_rpc;</div><div class='ctx'> </div><div class='ctx'> rpc_clnt_prog_t *cli_rpc_prog;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> extern struct rpc_clnt_program cli_prog;</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_ctx_defaults_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t    *cmd_args = NULL;</div><div class='del'>-        struct rlimit  lim = {0, };</div><div class='del'>-        call_pool_t   *pool = NULL;</div><div class='del'>-        int            ret         = -1;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (THIS, cli_mt_end);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    struct rlimit lim = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_pool_t *pool = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = xlator_mem_acct_init(THIS, cli_mt_end);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;process_uuid = generate_glusterfs_ctx_id ();</div><div class='del'>-        if (!ctx-&gt;process_uuid)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;process_uuid = generate_glusterfs_ctx_id();</div><div class='add'>+    if (!ctx-&gt;process_uuid)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;page_size  = 128 * GF_UNIT_KB;</div><div class='add'>+    ctx-&gt;page_size = 128 * GF_UNIT_KB;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;iobuf_pool = iobuf_pool_new ();</div><div class='del'>-        if (!ctx-&gt;iobuf_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;iobuf_pool = iobuf_pool_new();</div><div class='add'>+    if (!ctx-&gt;iobuf_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;event_pool = event_pool_new (DEFAULT_EVENT_POOL_SIZE,</div><div class='del'>-                                          STARTING_EVENT_THREADS);</div><div class='del'>-        if (!ctx-&gt;event_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;event_pool = event_pool_new(DEFAULT_EVENT_POOL_SIZE,</div><div class='add'>+                                     STARTING_EVENT_THREADS);</div><div class='add'>+    if (!ctx-&gt;event_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        pool = GF_CALLOC (1, sizeof (call_pool_t),</div><div class='del'>-                          cli_mt_call_pool_t);</div><div class='del'>-        if (!pool)</div><div class='del'>-                return -1;</div><div class='add'>+    pool = GF_CALLOC(1, sizeof(call_pool_t), cli_mt_call_pool_t);</div><div class='add'>+    if (!pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        /* frame_mem_pool size 112 * 64 */</div><div class='del'>-        pool-&gt;frame_mem_pool = mem_pool_new (call_frame_t, 32);</div><div class='del'>-        if (!pool-&gt;frame_mem_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    /* frame_mem_pool size 112 * 64 */</div><div class='add'>+    pool-&gt;frame_mem_pool = mem_pool_new(call_frame_t, 32);</div><div class='add'>+    if (!pool-&gt;frame_mem_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        /* stack_mem_pool size 256 * 128 */</div><div class='del'>-        pool-&gt;stack_mem_pool = mem_pool_new (call_stack_t, 16);</div><div class='add'>+    /* stack_mem_pool size 256 * 128 */</div><div class='add'>+    pool-&gt;stack_mem_pool = mem_pool_new(call_stack_t, 16);</div><div class='ctx'> </div><div class='del'>-        if (!pool-&gt;stack_mem_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!pool-&gt;stack_mem_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;stub_mem_pool = mem_pool_new (call_stub_t, 16);</div><div class='del'>-        if (!ctx-&gt;stub_mem_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;stub_mem_pool = mem_pool_new(call_stub_t, 16);</div><div class='add'>+    if (!ctx-&gt;stub_mem_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;dict_pool = mem_pool_new (dict_t, 32);</div><div class='del'>-        if (!ctx-&gt;dict_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;dict_pool = mem_pool_new(dict_t, 32);</div><div class='add'>+    if (!ctx-&gt;dict_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;dict_pair_pool = mem_pool_new (data_pair_t, 512);</div><div class='del'>-        if (!ctx-&gt;dict_pair_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;dict_pair_pool = mem_pool_new(data_pair_t, 512);</div><div class='add'>+    if (!ctx-&gt;dict_pair_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;dict_data_pool = mem_pool_new (data_t, 512);</div><div class='del'>-        if (!ctx-&gt;dict_data_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;dict_data_pool = mem_pool_new(data_t, 512);</div><div class='add'>+    if (!ctx-&gt;dict_data_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;logbuf_pool = mem_pool_new (log_buf_t, 256);</div><div class='del'>-        if (!ctx-&gt;logbuf_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;logbuf_pool = mem_pool_new(log_buf_t, 256);</div><div class='add'>+    if (!ctx-&gt;logbuf_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;pool-&gt;all_frames);</div><div class='del'>-        LOCK_INIT (&amp;pool-&gt;lock);</div><div class='del'>-        ctx-&gt;pool = pool;</div><div class='add'>+    INIT_LIST_HEAD(&amp;pool-&gt;all_frames);</div><div class='add'>+    LOCK_INIT(&amp;pool-&gt;lock);</div><div class='add'>+    ctx-&gt;pool = pool;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;cmd_args-&gt;xlator_options);</div><div class='add'>+    INIT_LIST_HEAD(&amp;cmd_args-&gt;xlator_options);</div><div class='ctx'> </div><div class='del'>-        lim.rlim_cur = RLIM_INFINITY;</div><div class='del'>-        lim.rlim_max = RLIM_INFINITY;</div><div class='del'>-        setrlimit (RLIMIT_CORE, &amp;lim);</div><div class='add'>+    lim.rlim_cur = RLIM_INFINITY;</div><div class='add'>+    lim.rlim_max = RLIM_INFINITY;</div><div class='add'>+    setrlimit(RLIMIT_CORE, &amp;lim);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-logging_init (glusterfs_ctx_t *ctx, struct cli_state *state)</div><div class='add'>+logging_init(glusterfs_ctx_t *ctx, struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        char *log_file = state-&gt;log_file ? state-&gt;log_file :</div><div class='del'>-                         DEFAULT_CLI_LOG_FILE_DIRECTORY "/cli.log";</div><div class='del'>-</div><div class='del'>-        /* passing ident as NULL means to use default ident for syslog */</div><div class='del'>-        if (gf_log_init (ctx, log_file, NULL) == -1) {</div><div class='del'>-                fprintf (stderr, "ERROR: failed to open logfile %s\n",</div><div class='del'>-                         log_file);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    char *log_file = state-&gt;log_file ? state-&gt;log_file</div><div class='add'>+                                     : DEFAULT_CLI_LOG_FILE_DIRECTORY</div><div class='add'>+                         "/cli.log";</div><div class='ctx'> </div><div class='del'>-        /* CLI should not have something to DEBUG after the release,</div><div class='del'>-           hence defaulting to INFO loglevel */</div><div class='del'>-        gf_log_set_loglevel (ctx, (state-&gt;log_level == GF_LOG_NONE) ?</div><div class='del'>-                             GF_LOG_INFO : state-&gt;log_level);</div><div class='add'>+    /* passing ident as NULL means to use default ident for syslog */</div><div class='add'>+    if (gf_log_init(ctx, log_file, NULL) == -1) {</div><div class='add'>+        fprintf(stderr, "ERROR: failed to open logfile %s\n", log_file);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    /* CLI should not have something to DEBUG after the release,</div><div class='add'>+       hence defaulting to INFO loglevel */</div><div class='add'>+    gf_log_set_loglevel(ctx, (state-&gt;log_level == GF_LOG_NONE)</div><div class='add'>+                                 ? GF_LOG_INFO</div><div class='add'>+                                 : state-&gt;log_level);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_submit_request (struct rpc_clnt *rpc, void *req, call_frame_t *frame,</div><div class='del'>-                    rpc_clnt_prog_t *prog,</div><div class='del'>-                    int procnum, struct iobref *iobref,</div><div class='del'>-                    xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='add'>+cli_submit_request(struct rpc_clnt *rpc, void *req, call_frame_t *frame,</div><div class='add'>+                   rpc_clnt_prog_t *prog, int procnum, struct iobref *iobref,</div><div class='add'>+                   xlator_t *this, fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        int                     ret         = -1;</div><div class='del'>-        int                     count      = 0;</div><div class='del'>-        struct iovec            iov         = {0, };</div><div class='del'>-        struct iobuf            *iobuf = NULL;</div><div class='del'>-        char                    new_iobref = 0;</div><div class='del'>-        ssize_t                 xdr_size   = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        if (req) {</div><div class='del'>-                xdr_size = xdr_sizeof (xdrproc, req);</div><div class='del'>-                iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-                if (!iobuf) {</div><div class='del'>-                        goto out;</div><div class='del'>-                };</div><div class='del'>-</div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        iobref = iobref_new ();</div><div class='del'>-                        if (!iobref) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        new_iobref = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                iobref_add (iobref, iobuf);</div><div class='del'>-</div><div class='del'>-                iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-                iov.iov_len  = iobuf_size (iobuf);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                /* Create the xdr payload */</div><div class='del'>-                ret = xdr_serialize_generic (iov, req, xdrproc);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                iov.iov_len = ret;</div><div class='del'>-                count = 1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    if (req) {</div><div class='add'>+        xdr_size = xdr_sizeof(xdrproc, req);</div><div class='add'>+        iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+        if (!iobuf) {</div><div class='add'>+            goto out;</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        if (!iobref) {</div><div class='add'>+            iobref = iobref_new();</div><div class='add'>+            if (!iobref) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            new_iobref = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        iobref_add(iobref, iobuf);</div><div class='add'>+</div><div class='add'>+        iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+        iov.iov_len = iobuf_size(iobuf);</div><div class='add'>+</div><div class='add'>+        /* Create the xdr payload */</div><div class='add'>+        ret = xdr_serialize_generic(iov, req, xdrproc);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        iov.iov_len = ret;</div><div class='add'>+        count = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rpc)</div><div class='del'>-                rpc = global_rpc;</div><div class='del'>-        /* Send the msg */</div><div class='del'>-        ret = rpc_clnt_submit (rpc, prog, procnum, cbkfn,</div><div class='del'>-                               &amp;iov, count,</div><div class='del'>-                               NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (!rpc)</div><div class='add'>+        rpc = global_rpc;</div><div class='add'>+    /* Send the msg */</div><div class='add'>+    ret = rpc_clnt_submit(rpc, prog, procnum, cbkfn, &amp;iov, count, NULL, 0,</div><div class='add'>+                          iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (new_iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        return ret;</div><div class='add'>+    if (new_iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='del'>-                void *data)</div><div class='add'>+cli_rpc_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='add'>+               void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-</div><div class='del'>-        this = mydata;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='del'>-        case RPC_CLNT_CONNECT:</div><div class='del'>-        {</div><div class='add'>+    this = mydata;</div><div class='ctx'> </div><div class='del'>-                cli_cmd_broadcast_connected ();</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT");</div><div class='del'>-               break;</div><div class='add'>+    switch (event) {</div><div class='add'>+        case RPC_CLNT_CONNECT: {</div><div class='add'>+            cli_cmd_broadcast_connected();</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_CONNECT");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        case RPC_CLNT_DISCONNECT:</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT");</div><div class='del'>-                connected = 0;</div><div class='del'>-                if (!global_state-&gt;prompt &amp;&amp; global_state-&gt;await_connected) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        cli_out ("Connection failed. Please check if gluster "</div><div class='del'>-                                  "daemon is operational.");</div><div class='del'>-                        exit (ret);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+        case RPC_CLNT_DISCONNECT: {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT");</div><div class='add'>+            connected = 0;</div><div class='add'>+            if (!global_state-&gt;prompt &amp;&amp; global_state-&gt;await_connected) {</div><div class='add'>+                ret = 1;</div><div class='add'>+                cli_out(</div><div class='add'>+                    "Connection failed. Please check if gluster "</div><div class='add'>+                    "daemon is operational.");</div><div class='add'>+                exit(ret);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "got some other RPC event %d", event);</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "got some other RPC event %d",</div><div class='add'>+                   event);</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_valid_int (char *str)</div><div class='add'>+is_valid_int(char *str)</div><div class='ctx'> {</div><div class='del'>-        if (*str == '-')</div><div class='del'>-                ++str;</div><div class='add'>+    if (*str == '-')</div><div class='add'>+        ++str;</div><div class='ctx'> </div><div class='del'>-        /* Handle empty string or just "-".*/</div><div class='del'>-        if (!*str)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    /* Handle empty string or just "-".*/</div><div class='add'>+    if (!*str)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        /* Check for non-digit chars in the rest of the string */</div><div class='del'>-        while (*str) {</div><div class='del'>-                if (!isdigit(*str))</div><div class='del'>-                        return _gf_false;</div><div class='add'>+    /* Check for non-digit chars in the rest of the string */</div><div class='add'>+    while (*str) {</div><div class='add'>+        if (!isdigit(*str))</div><div class='add'>+            return _gf_false;</div><div class='ctx'>         else</div><div class='del'>-                ++str;</div><div class='del'>-        }</div><div class='del'>-        return _gf_true;</div><div class='add'>+            ++str;</div><div class='add'>+    }</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -315,527 +313,528 @@ is_valid_int (char *str)</div><div class='ctx'>  *     -2: parsing issue (avoid unknown option error)</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cli_opt_parse (char *opt, struct cli_state *state)</div><div class='add'>+cli_opt_parse(char *opt, struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        char            *oarg           = NULL;</div><div class='del'>-        gf_boolean_t    secure_mgmt_tmp = 0;</div><div class='add'>+    char *oarg = NULL;</div><div class='add'>+    gf_boolean_t secure_mgmt_tmp = 0;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (opt, "") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(opt, "") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (opt, "version") == 0) {</div><div class='del'>-                cli_out ("%s", argp_program_version);</div><div class='del'>-                exit (0);</div><div class='del'>-        }</div><div class='add'>+    if (strcmp(opt, "version") == 0) {</div><div class='add'>+        cli_out("%s", argp_program_version);</div><div class='add'>+        exit(0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (opt, "print-logdir") == 0) {</div><div class='del'>-                cli_out ("%s", DEFAULT_LOG_FILE_DIRECTORY);</div><div class='del'>-                exit (0);</div><div class='del'>-        }</div><div class='add'>+    if (strcmp(opt, "print-logdir") == 0) {</div><div class='add'>+        cli_out("%s", DEFAULT_LOG_FILE_DIRECTORY);</div><div class='add'>+        exit(0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (opt, "print-statedumpdir") == 0) {</div><div class='del'>-                cli_out ("%s", DEFAULT_VAR_RUN_DIRECTORY);</div><div class='del'>-                exit (0);</div><div class='del'>-        }</div><div class='add'>+    if (strcmp(opt, "print-statedumpdir") == 0) {</div><div class='add'>+        cli_out("%s", DEFAULT_VAR_RUN_DIRECTORY);</div><div class='add'>+        exit(0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (opt, "xml") == 0) {</div><div class='add'>+    if (strcmp(opt, "xml") == 0) {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-                state-&gt;mode |= GLUSTER_MODE_XML;</div><div class='add'>+        state-&gt;mode |= GLUSTER_MODE_XML;</div><div class='ctx'> #else</div><div class='del'>-                cli_err ("XML output not supported. Ignoring '--xml' option");</div><div class='add'>+        cli_err("XML output not supported. Ignoring '--xml' option");</div><div class='ctx'> #endif</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (opt, "wignore-partition") == 0) {</div><div class='del'>-                state-&gt;mode |= GLUSTER_MODE_WIGNORE_PARTITION;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (opt, "wignore") == 0) {</div><div class='del'>-                state-&gt;mode |= GLUSTER_MODE_WIGNORE;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        oarg = strtail (opt, "mode=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                if (strcmp (oarg, "script") == 0) {</div><div class='del'>-                        state-&gt;mode |= GLUSTER_MODE_SCRIPT;</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(opt, "wignore-partition") == 0) {</div><div class='add'>+        state-&gt;mode |= GLUSTER_MODE_WIGNORE_PARTITION;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (strcmp (oarg, "interactive") == 0)</div><div class='del'>-                        return 0;</div><div class='add'>+    if (strcmp(opt, "wignore") == 0) {</div><div class='add'>+        state-&gt;mode |= GLUSTER_MODE_WIGNORE;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='add'>+    oarg = strtail(opt, "mode=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        if (strcmp(oarg, "script") == 0) {</div><div class='add'>+            state-&gt;mode |= GLUSTER_MODE_SCRIPT;</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        oarg = strtail (opt, "remote-host=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                state-&gt;remote_host = oarg;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        if (strcmp(oarg, "interactive") == 0)</div><div class='add'>+            return 0;</div><div class='ctx'> </div><div class='del'>-        oarg = strtail (opt, "log-file=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                state-&gt;log_file = oarg;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        oarg = strtail (opt, "timeout=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                if (!is_valid_int (oarg) || atoi(oarg) &lt;= 0) {</div><div class='del'>-                        cli_err ("timeout value should be a positive integer");</div><div class='del'>-                        return -2; /* -2 instead of -1 to avoid unknown option</div><div class='del'>-                                      error */</div><div class='del'>-                }</div><div class='del'>-                cli_default_conn_timeout = atoi(oarg);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        oarg = strtail (opt, "log-level=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                int log_level = glusterd_check_log_level(oarg);</div><div class='del'>-                if (log_level == -1)</div><div class='del'>-                        return -1;</div><div class='del'>-                state-&gt;log_level = (gf_loglevel_t) log_level;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    oarg = strtail(opt, "remote-host=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        state-&gt;remote_host = oarg;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        oarg = strtail (opt, "glusterd-sock=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                state-&gt;glusterd_sock = oarg;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    oarg = strtail(opt, "log-file=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        state-&gt;log_file = oarg;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    oarg = strtail(opt, "timeout=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        if (!is_valid_int(oarg) || atoi(oarg) &lt;= 0) {</div><div class='add'>+            cli_err("timeout value should be a positive integer");</div><div class='add'>+            return -2; /* -2 instead of -1 to avoid unknown option</div><div class='add'>+                          error */</div><div class='add'>+        }</div><div class='add'>+        cli_default_conn_timeout = atoi(oarg);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    oarg = strtail(opt, "log-level=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        int log_level = glusterd_check_log_level(oarg);</div><div class='add'>+        if (log_level == -1)</div><div class='add'>+            return -1;</div><div class='add'>+        state-&gt;log_level = (gf_loglevel_t)log_level;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    oarg = strtail(opt, "glusterd-sock=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        state-&gt;glusterd_sock = oarg;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        oarg = strtail (opt, "secure-mgmt=");</div><div class='del'>-        if (oarg) {</div><div class='del'>-                if (gf_string2boolean(oarg,&amp;secure_mgmt_tmp) == 0) {</div><div class='del'>-                        if (secure_mgmt_tmp) {</div><div class='del'>-                                /* See declaration for why this is an int. */</div><div class='del'>-                                state-&gt;ctx-&gt;secure_mgmt = 1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        cli_err ("invalid secure-mgmt value (ignored)");</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='add'>+    oarg = strtail(opt, "secure-mgmt=");</div><div class='add'>+    if (oarg) {</div><div class='add'>+        if (gf_string2boolean(oarg, &amp;secure_mgmt_tmp) == 0) {</div><div class='add'>+            if (secure_mgmt_tmp) {</div><div class='add'>+                /* See declaration for why this is an int. */</div><div class='add'>+                state-&gt;ctx-&gt;secure_mgmt = 1;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            cli_err("invalid secure-mgmt value (ignored)");</div><div class='ctx'>         }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-parse_cmdline (int argc, char *argv[], struct cli_state *state)</div><div class='add'>+parse_cmdline(int argc, char *argv[], struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int                 ret            = 0;</div><div class='del'>-        int                 i              = 0;</div><div class='del'>-        int                 j              = 0;</div><div class='del'>-        char               *opt            = NULL;</div><div class='del'>-        gf_boolean_t       geo_rep_config  = _gf_false;</div><div class='del'>-</div><div class='del'>-        state-&gt;argc=argc-1;</div><div class='del'>-        state-&gt;argv=&amp;argv[1];</div><div class='del'>-</div><div class='del'>-        /* Do this first so that an option can override. */</div><div class='del'>-        if (sys_access (SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='del'>-                state-&gt;ctx-&gt;secure_mgmt = 1;</div><div class='del'>-                state-&gt;ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file ();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (state-&gt;argc &gt; GEO_REP_CMD_CONFIG_INDEX &amp;&amp;</div><div class='del'>-            strtail (state-&gt;argv[GEO_REP_CMD_INDEX], "geo") &amp;&amp;</div><div class='del'>-            strtail (state-&gt;argv[GEO_REP_CMD_CONFIG_INDEX], "co"))</div><div class='del'>-                geo_rep_config = _gf_true;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; state-&gt;argc; i++) {</div><div class='del'>-                opt = strtail (state-&gt;argv[i], "--");</div><div class='del'>-                if (opt &amp;&amp; !geo_rep_config) {</div><div class='del'>-                        ret = cli_opt_parse (opt, state);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                cli_out ("unrecognized option --%s", opt);</div><div class='del'>-                                return ret;</div><div class='del'>-                        } else if (ret == -2) {</div><div class='del'>-                                return ret;</div><div class='del'>-                        }</div><div class='del'>-                        for (j = i; j &lt; state-&gt;argc - 1; j++)</div><div class='del'>-                                state-&gt;argv[j] = state-&gt;argv[j + 1];</div><div class='del'>-                        state-&gt;argc--;</div><div class='del'>-                        /* argv shifted, next check should be at i again */</div><div class='del'>-                        i--;</div><div class='del'>-                        if (ret == 1) {</div><div class='del'>-                                /* end of cli options */</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    char *opt = NULL;</div><div class='add'>+    gf_boolean_t geo_rep_config = _gf_false;</div><div class='add'>+</div><div class='add'>+    state-&gt;argc = argc - 1;</div><div class='add'>+    state-&gt;argv = &amp;argv[1];</div><div class='add'>+</div><div class='add'>+    /* Do this first so that an option can override. */</div><div class='add'>+    if (sys_access(SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='add'>+        state-&gt;ctx-&gt;secure_mgmt = 1;</div><div class='add'>+        state-&gt;ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file();</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (state-&gt;argc &gt; GEO_REP_CMD_CONFIG_INDEX &amp;&amp;</div><div class='add'>+        strtail(state-&gt;argv[GEO_REP_CMD_INDEX], "geo") &amp;&amp;</div><div class='add'>+        strtail(state-&gt;argv[GEO_REP_CMD_CONFIG_INDEX], "co"))</div><div class='add'>+        geo_rep_config = _gf_true;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; state-&gt;argc; i++) {</div><div class='add'>+        opt = strtail(state-&gt;argv[i], "--");</div><div class='add'>+        if (opt &amp;&amp; !geo_rep_config) {</div><div class='add'>+            ret = cli_opt_parse(opt, state);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                cli_out("unrecognized option --%s", opt);</div><div class='add'>+                return ret;</div><div class='add'>+            } else if (ret == -2) {</div><div class='add'>+                return ret;</div><div class='add'>+            }</div><div class='add'>+            for (j = i; j &lt; state-&gt;argc - 1; j++)</div><div class='add'>+                state-&gt;argv[j] = state-&gt;argv[j + 1];</div><div class='add'>+            state-&gt;argc--;</div><div class='add'>+            /* argv shifted, next check should be at i again */</div><div class='add'>+            i--;</div><div class='add'>+            if (ret == 1) {</div><div class='add'>+                /* end of cli options */</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        state-&gt;argv[state-&gt;argc] = NULL;</div><div class='add'>+    state-&gt;argv[state-&gt;argc] = NULL;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_tree_init (struct cli_cmd_tree *tree)</div><div class='add'>+cli_cmd_tree_init(struct cli_cmd_tree *tree)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd_word  *root = NULL;</div><div class='del'>-        int                   ret = 0;</div><div class='add'>+    struct cli_cmd_word *root = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        root = &amp;tree-&gt;root;</div><div class='del'>-        root-&gt;tree = tree;</div><div class='add'>+    root = &amp;tree-&gt;root;</div><div class='add'>+    root-&gt;tree = tree;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_state_init (struct cli_state *state)</div><div class='add'>+cli_state_init(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd_tree  *tree = NULL;</div><div class='del'>-        int                   ret = 0;</div><div class='del'>-</div><div class='add'>+    struct cli_cmd_tree *tree = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        state-&gt;log_level = GF_LOG_NONE;</div><div class='add'>+    state-&gt;log_level = GF_LOG_NONE;</div><div class='ctx'> </div><div class='del'>-        tree = &amp;state-&gt;tree;</div><div class='del'>-        tree-&gt;state = state;</div><div class='add'>+    tree = &amp;state-&gt;tree;</div><div class='add'>+    tree-&gt;state = state;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_tree_init (tree);</div><div class='add'>+    ret = cli_cmd_tree_init(tree);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_usage_out (const char *usage)</div><div class='add'>+cli_usage_out(const char *usage)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (usage);</div><div class='add'>+    GF_ASSERT(usage);</div><div class='ctx'> </div><div class='del'>-        if (!usage || usage[0] == '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (!usage || usage[0] == '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        cli_err ("\nUsage:\n%s\n", usage);</div><div class='del'>-        return 0;</div><div class='add'>+    cli_err("\nUsage:\n%s\n", usage);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_cli_err (const char *fmt, ...)</div><div class='add'>+_cli_err(const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list           ap;</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    va_list ap;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> #ifdef HAVE_READLINE</div><div class='del'>-        struct cli_state *state = global_state;</div><div class='add'>+    struct cli_state *state = global_state;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='add'>+    va_start(ap, fmt);</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_READLINE</div><div class='del'>-        if (state-&gt;rl_enabled &amp;&amp; !state-&gt;rl_processing) {</div><div class='del'>-                ret = cli_rl_err (state, fmt, ap);</div><div class='del'>-                va_end (ap);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (state-&gt;rl_enabled &amp;&amp; !state-&gt;rl_processing) {</div><div class='add'>+        ret = cli_rl_err(state, fmt, ap);</div><div class='add'>+        va_end(ap);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = vfprintf (stderr, fmt, ap);</div><div class='del'>-        fprintf (stderr, "\n");</div><div class='del'>-        va_end (ap);</div><div class='add'>+    ret = vfprintf(stderr, fmt, ap);</div><div class='add'>+    fprintf(stderr, "\n");</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-_cli_out (const char *fmt, ...)</div><div class='add'>+_cli_out(const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list           ap;</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    va_list ap;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> #ifdef HAVE_READLINE</div><div class='del'>-        struct cli_state *state = global_state;</div><div class='add'>+    struct cli_state *state = global_state;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='add'>+    va_start(ap, fmt);</div><div class='ctx'> #ifdef HAVE_READLINE</div><div class='del'>-        if (state-&gt;rl_enabled &amp;&amp; !state-&gt;rl_processing) {</div><div class='del'>-                ret = cli_rl_out (state, fmt, ap);</div><div class='del'>-                va_end (ap);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (state-&gt;rl_enabled &amp;&amp; !state-&gt;rl_processing) {</div><div class='add'>+        ret = cli_rl_out(state, fmt, ap);</div><div class='add'>+        va_end(ap);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = vprintf (fmt, ap);</div><div class='del'>-        printf ("\n");</div><div class='del'>-        va_end (ap);</div><div class='add'>+    ret = vprintf(fmt, ap);</div><div class='add'>+    printf("\n");</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-cli_quotad_clnt_rpc_init (void)</div><div class='add'>+cli_quotad_clnt_rpc_init(void)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt *rpc = NULL;</div><div class='del'>-        dict_t          *rpc_opts = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        rpc_opts = dict_new ();</div><div class='del'>-        if (!rpc_opts) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (rpc_opts, "transport.address-family", "unix");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (rpc_opts, "transport-type", "socket");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (rpc_opts, "transport.socket.connect-path",</div><div class='del'>-                                            "/var/run/gluster/quotad.socket");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        rpc = cli_quotad_clnt_init (THIS, rpc_opts);</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        global_quotad_rpc = rpc;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    dict_t *rpc_opts = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    rpc_opts = dict_new();</div><div class='add'>+    if (!rpc_opts) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(rpc_opts, "transport.address-family", "unix");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(rpc_opts, "transport-type", "socket");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(rpc_opts, "transport.socket.connect-path",</div><div class='add'>+                       "/var/run/gluster/quotad.socket");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    rpc = cli_quotad_clnt_init(THIS, rpc_opts);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    global_quotad_rpc = rpc;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (rpc_opts)</div><div class='del'>-                        dict_unref(rpc_opts);</div><div class='del'>-        }</div><div class='del'>-        return rpc;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (rpc_opts)</div><div class='add'>+            dict_unref(rpc_opts);</div><div class='add'>+    }</div><div class='add'>+    return rpc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-cli_rpc_init (struct cli_state *state)</div><div class='add'>+cli_rpc_init(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt         *rpc = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        int                     port = CLI_GLUSTERD_PORT;</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int port = CLI_GLUSTERD_PORT;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> #ifdef IPV6_DEFAULT</div><div class='del'>-        char                    *addr_family = "inet6";</div><div class='add'>+    char *addr_family = "inet6";</div><div class='ctx'> #else</div><div class='del'>-        char                    *addr_family = "inet";</div><div class='add'>+    char *addr_family = "inet";</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        cli_rpc_prog = &amp;cli_prog;</div><div class='del'>-        options = dict_new ();</div><div class='del'>-        if (!options)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Connect to glusterd using the specified method, giving preference</div><div class='del'>-         * to a unix socket connection.  If nothing is specified, connect to</div><div class='del'>-         * the default glusterd socket.</div><div class='del'>-         */</div><div class='del'>-        if (state-&gt;glusterd_sock) {</div><div class='del'>-                gf_log ("cli", GF_LOG_INFO, "Connecting to glusterd using "</div><div class='del'>-                        "sockfile %s", state-&gt;glusterd_sock);</div><div class='del'>-                ret = rpc_transport_unix_options_build (&amp;options,</div><div class='del'>-                                                        state-&gt;glusterd_sock,</div><div class='del'>-                                                        0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        else if (state-&gt;remote_host) {</div><div class='del'>-                gf_log ("cli", GF_LOG_INFO, "Connecting to remote glusterd at "</div><div class='del'>-                        "%s", state-&gt;remote_host);</div><div class='del'>-                ret = dict_set_str (options, "remote-host", state-&gt;remote_host);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    this = THIS;</div><div class='add'>+    cli_rpc_prog = &amp;cli_prog;</div><div class='add'>+    options = dict_new();</div><div class='add'>+    if (!options)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Connect to glusterd using the specified method, giving preference</div><div class='add'>+     * to a unix socket connection.  If nothing is specified, connect to</div><div class='add'>+     * the default glusterd socket.</div><div class='add'>+     */</div><div class='add'>+    if (state-&gt;glusterd_sock) {</div><div class='add'>+        gf_log("cli", GF_LOG_INFO,</div><div class='add'>+               "Connecting to glusterd using "</div><div class='add'>+               "sockfile %s",</div><div class='add'>+               state-&gt;glusterd_sock);</div><div class='add'>+        ret = rpc_transport_unix_options_build(&amp;options, state-&gt;glusterd_sock,</div><div class='add'>+                                               0);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (state-&gt;remote_host) {</div><div class='add'>+        gf_log("cli", GF_LOG_INFO,</div><div class='add'>+               "Connecting to remote glusterd at "</div><div class='add'>+               "%s",</div><div class='add'>+               state-&gt;remote_host);</div><div class='add'>+        ret = dict_set_str(options, "remote-host", state-&gt;remote_host);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (state-&gt;remote_port)</div><div class='del'>-                        port = state-&gt;remote_port;</div><div class='add'>+        if (state-&gt;remote_port)</div><div class='add'>+            port = state-&gt;remote_port;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int32 (options, "remote-port", port);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = dict_set_int32(options, "remote-port", port);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_str (options, "transport.address-family",</div><div class='del'>-                                        addr_family);</div><div class='add'>+        ret = dict_set_str(options, "transport.address-family", addr_family);</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                gf_log ("cli", GF_LOG_DEBUG, "Connecting to glusterd using "</div><div class='del'>-                        "default socket");</div><div class='del'>-                ret = rpc_transport_unix_options_build</div><div class='del'>-                        (&amp;options, DEFAULT_GLUSTERD_SOCKFILE, 0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        gf_log("cli", GF_LOG_DEBUG,</div><div class='add'>+               "Connecting to glusterd using "</div><div class='add'>+               "default socket");</div><div class='add'>+        ret = rpc_transport_unix_options_build(&amp;options,</div><div class='add'>+                                               DEFAULT_GLUSTERD_SOCKFILE, 0);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpc = rpc_clnt_new (options, this, this-&gt;name, 16);</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto out;</div><div class='add'>+    rpc = rpc_clnt_new(options, this, this-&gt;name, 16);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = rpc_clnt_register_notify (rpc, cli_rpc_notify, this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("cli", GF_LOG_ERROR, "failed to register notify");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpc_clnt_register_notify(rpc, cli_rpc_notify, this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("cli", GF_LOG_ERROR, "failed to register notify");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpc_clnt_start (rpc);</div><div class='add'>+    ret = rpc_clnt_start(rpc);</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (rpc)</div><div class='del'>-                        rpc_clnt_unref (rpc);</div><div class='del'>-                rpc = NULL;</div><div class='del'>-        }</div><div class='del'>-        return rpc;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (rpc)</div><div class='add'>+            rpc_clnt_unref(rpc);</div><div class='add'>+        rpc = NULL;</div><div class='add'>+    }</div><div class='add'>+    return rpc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> cli_local_t *</div><div class='del'>-cli_local_get ()</div><div class='add'>+cli_local_get()</div><div class='ctx'> {</div><div class='del'>-        cli_local_t     *local = NULL;</div><div class='add'>+    cli_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = GF_CALLOC (1, sizeof (*local), cli_mt_cli_local_t);</div><div class='del'>-        LOCK_INIT (&amp;local-&gt;lock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;local-&gt;dict_list);</div><div class='add'>+    local = GF_CALLOC(1, sizeof(*local), cli_mt_cli_local_t);</div><div class='add'>+    LOCK_INIT(&amp;local-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;dict_list);</div><div class='ctx'> </div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_local_wipe (cli_local_t *local)</div><div class='add'>+cli_local_wipe(cli_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (local) {</div><div class='del'>-                GF_FREE (local-&gt;get_vol.volname);</div><div class='del'>-                if (local-&gt;dict)</div><div class='del'>-                        dict_unref (local-&gt;dict);</div><div class='del'>-                GF_FREE (local);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (local) {</div><div class='add'>+        GF_FREE(local-&gt;get_vol.volname);</div><div class='add'>+        if (local-&gt;dict)</div><div class='add'>+            dict_unref(local-&gt;dict);</div><div class='add'>+        GF_FREE(local);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct cli_state *global_state;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        struct cli_state   state = {0, };</div><div class='del'>-        int                ret = -1;</div><div class='del'>-        glusterfs_ctx_t   *ctx = NULL;</div><div class='add'>+    struct cli_state state = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-       mem_pools_init_early ();</div><div class='del'>-       mem_pools_init_late ();</div><div class='add'>+    mem_pools_init_early();</div><div class='add'>+    mem_pools_init_late();</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfs_ctx_new ();</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return ENOMEM;</div><div class='add'>+    ctx = glusterfs_ctx_new();</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return ENOMEM;</div><div class='ctx'> </div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-        gf_mem_acct_enable_set (ctx);</div><div class='add'>+    gf_mem_acct_enable_set(ctx);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_globals_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = glusterfs_globals_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	THIS-&gt;ctx = ctx;</div><div class='add'>+    THIS-&gt;ctx = ctx;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_ctx_defaults_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glusterfs_ctx_defaults_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        cli_default_conn_timeout = 120;</div><div class='del'>-        cli_ten_minutes_timeout = 600;</div><div class='add'>+    cli_default_conn_timeout = 120;</div><div class='add'>+    cli_ten_minutes_timeout = 600;</div><div class='ctx'> </div><div class='del'>-        ret = cli_state_init (&amp;state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_state_init(&amp;state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        state.ctx = ctx;</div><div class='del'>-        global_state = &amp;state;</div><div class='add'>+    state.ctx = ctx;</div><div class='add'>+    global_state = &amp;state;</div><div class='ctx'> </div><div class='del'>-        ret = parse_cmdline (argc, argv, &amp;state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = parse_cmdline(argc, argv, &amp;state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = logging_init (ctx, &amp;state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = logging_init(ctx, &amp;state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_INFO, "Started running %s with version %s",</div><div class='del'>-                argv[0], PACKAGE_VERSION);</div><div class='add'>+    gf_log("cli", GF_LOG_INFO, "Started running %s with version %s", argv[0],</div><div class='add'>+           PACKAGE_VERSION);</div><div class='ctx'> </div><div class='del'>-        global_rpc = cli_rpc_init (&amp;state);</div><div class='del'>-        if (!global_rpc)</div><div class='del'>-                goto out;</div><div class='add'>+    global_rpc = cli_rpc_init(&amp;state);</div><div class='add'>+    if (!global_rpc)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        global_quotad_rpc = cli_quotad_clnt_rpc_init ();</div><div class='del'>-        if (!global_quotad_rpc)</div><div class='del'>-                goto out;</div><div class='add'>+    global_quotad_rpc = cli_quotad_clnt_rpc_init();</div><div class='add'>+    if (!global_quotad_rpc)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmds_register (&amp;state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_cmds_register(&amp;state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_cond_init ();</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_cmd_cond_init();</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cli_input_init (&amp;state);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cli_input_init(&amp;state);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = event_dispatch (ctx-&gt;event_pool);</div><div class='add'>+    ret = event_dispatch(ctx-&gt;event_pool);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-//        glusterfs_ctx_destroy (ctx);</div><div class='add'>+    //        glusterfs_ctx_destroy (ctx);</div><div class='ctx'> </div><div class='del'>-        mem_pools_fini ();</div><div class='add'>+    mem_pools_fini();</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cli_print_line (int len)</div><div class='add'>+cli_print_line(int len)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (len &gt; 0);</div><div class='add'>+    GF_ASSERT(len &gt; 0);</div><div class='ctx'> </div><div class='del'>-        while (len--)</div><div class='del'>-                printf ("-");</div><div class='add'>+    while (len--)</div><div class='add'>+        printf("-");</div><div class='ctx'> </div><div class='del'>-        printf ("\n");</div><div class='add'>+    printf("\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-print_quota_list_header (int type)</div><div class='add'>+print_quota_list_header(int type)</div><div class='ctx'> {</div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIST) {</div><div class='del'>-                cli_out ("                  Path                   Hard-limit "</div><div class='del'>-                         " Soft-limit      Used  Available  Soft-limit "</div><div class='del'>-                         "exceeded? Hard-limit exceeded?");</div><div class='del'>-                cli_out ("-----------------------------------------------------"</div><div class='del'>-                         "-----------------------------------------------------"</div><div class='del'>-                         "---------------------");</div><div class='del'>-        } else {</div><div class='del'>-                cli_out ("                  Path                   Hard-limit  "</div><div class='del'>-                         " Soft-limit      Files       Dirs     Available  "</div><div class='del'>-                         "Soft-limit exceeded? Hard-limit exceeded?");</div><div class='del'>-                cli_out ("-----------------------------------------------------"</div><div class='del'>-                         "-----------------------------------------------------"</div><div class='del'>-                         "-------------------------------------");</div><div class='del'>-        }</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST) {</div><div class='add'>+        cli_out(</div><div class='add'>+            "                  Path                   Hard-limit "</div><div class='add'>+            " Soft-limit      Used  Available  Soft-limit "</div><div class='add'>+            "exceeded? Hard-limit exceeded?");</div><div class='add'>+        cli_out(</div><div class='add'>+            "-----------------------------------------------------"</div><div class='add'>+            "-----------------------------------------------------"</div><div class='add'>+            "---------------------");</div><div class='add'>+    } else {</div><div class='add'>+        cli_out(</div><div class='add'>+            "                  Path                   Hard-limit  "</div><div class='add'>+            " Soft-limit      Files       Dirs     Available  "</div><div class='add'>+            "Soft-limit exceeded? Hard-limit exceeded?");</div><div class='add'>+        cli_out(</div><div class='add'>+            "-----------------------------------------------------"</div><div class='add'>+            "-----------------------------------------------------"</div><div class='add'>+            "-------------------------------------");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-print_quota_list_empty (char *path, int type)</div><div class='add'>+print_quota_list_empty(char *path, int type)</div><div class='ctx'> {</div><div class='del'>-        if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='del'>-                cli_out ("%-40s %7s %9s %10s %7s %15s %20s", path,</div><div class='del'>-                         "N/A", "N/A", "N/A", "N/A", "N/A", "N/A");</div><div class='del'>-        else</div><div class='del'>-                cli_out ("%-40s %9s %9s %12s %10s %10s %15s %20s", path,</div><div class='del'>-                         "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A");</div><div class='add'>+    if (type == GF_QUOTA_OPTION_TYPE_LIST)</div><div class='add'>+        cli_out("%-40s %7s %9s %10s %7s %15s %20s", path, "N/A", "N/A", "N/A",</div><div class='add'>+                "N/A", "N/A", "N/A");</div><div class='add'>+    else</div><div class='add'>+        cli_out("%-40s %9s %9s %12s %10s %10s %15s %20s", path, "N/A", "N/A",</div><div class='add'>+                "N/A", "N/A", "N/A", "N/A", "N/A");</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/cli/src/input.c b/cli/src/input.c<br/>index 10fc39cd6b4..0583f648f95 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/input.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/input.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/input.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/input.c</a></div><div class='hunk'>@@ -19,74 +19,72 @@</div><div class='ctx'> #define CMDBUFSIZ 1024</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-cli_batch (void *d)</div><div class='add'>+cli_batch(void *d)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state *state = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        state = d;</div><div class='add'>+    state = d;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_process (state, state-&gt;argc, state-&gt;argv);</div><div class='add'>+    ret = cli_cmd_process(state, state-&gt;argc, state-&gt;argv);</div><div class='ctx'> </div><div class='del'>-        gf_log ("", GF_LOG_INFO, "Exiting with: %d", ret);</div><div class='del'>-        exit (-ret);</div><div class='add'>+    gf_log("", GF_LOG_INFO, "Exiting with: %d", ret);</div><div class='add'>+    exit(-ret);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-cli_input (void *d)</div><div class='add'>+cli_input(void *d)</div><div class='ctx'> {</div><div class='del'>-        struct cli_state *state = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        char              cmdbuf[CMDBUFSIZ];</div><div class='del'>-        char             *cmd = NULL;</div><div class='del'>-        size_t            len = 0;</div><div class='del'>-</div><div class='del'>-        state = d;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                printf ("%s", state-&gt;prompt);</div><div class='del'>-</div><div class='del'>-                cmd = fgets (cmdbuf, CMDBUFSIZ, stdin);</div><div class='del'>-                if (!cmd)</div><div class='del'>-                        break;</div><div class='del'>-                len = strlen(cmd);</div><div class='del'>-                if (len &gt; 0 &amp;&amp; cmd[len - 1] == '\n') //strip trailing \n</div><div class='del'>-                        cmd[len - 1] = '\0';</div><div class='del'>-                ret = cli_cmd_process_line (state, cmd);</div><div class='del'>-                if (ret != 0 &amp;&amp; state-&gt;mode &amp; GLUSTER_MODE_ERR_FATAL)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        exit (-ret);</div><div class='del'>-</div><div class='del'>-        return NULL;</div><div class='add'>+    struct cli_state *state = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char cmdbuf[CMDBUFSIZ];</div><div class='add'>+    char *cmd = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+</div><div class='add'>+    state = d;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        printf("%s", state-&gt;prompt);</div><div class='add'>+</div><div class='add'>+        cmd = fgets(cmdbuf, CMDBUFSIZ, stdin);</div><div class='add'>+        if (!cmd)</div><div class='add'>+            break;</div><div class='add'>+        len = strlen(cmd);</div><div class='add'>+        if (len &gt; 0 &amp;&amp; cmd[len - 1] == '\n')  // strip trailing \n</div><div class='add'>+            cmd[len - 1] = '\0';</div><div class='add'>+        ret = cli_cmd_process_line(state, cmd);</div><div class='add'>+        if (ret != 0 &amp;&amp; state-&gt;mode &amp; GLUSTER_MODE_ERR_FATAL)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    exit(-ret);</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_input_init (struct cli_state *state)</div><div class='add'>+cli_input_init(struct cli_state *state)</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;argc) {</div><div class='del'>-                ret = pthread_create (&amp;state-&gt;input, NULL, cli_batch, state);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (state-&gt;argc) {</div><div class='add'>+        ret = pthread_create(&amp;state-&gt;input, NULL, cli_batch, state);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (isatty (STDIN_FILENO)) {</div><div class='del'>-                state-&gt;prompt = "gluster&gt; ";</div><div class='add'>+    if (isatty(STDIN_FILENO)) {</div><div class='add'>+        state-&gt;prompt = "gluster&gt; ";</div><div class='ctx'> </div><div class='del'>-                cli_rl_enable (state);</div><div class='del'>-        } else {</div><div class='del'>-                state-&gt;prompt = "";</div><div class='del'>-                state-&gt;mode |= GLUSTER_MODE_SCRIPT | GLUSTER_MODE_ERR_FATAL;</div><div class='del'>-        }</div><div class='add'>+        cli_rl_enable(state);</div><div class='add'>+    } else {</div><div class='add'>+        state-&gt;prompt = "";</div><div class='add'>+        state-&gt;mode |= GLUSTER_MODE_SCRIPT | GLUSTER_MODE_ERR_FATAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!state-&gt;rl_enabled)</div><div class='del'>-                ret = pthread_create (&amp;state-&gt;input, NULL, cli_input, state);</div><div class='add'>+    if (!state-&gt;rl_enabled)</div><div class='add'>+        ret = pthread_create(&amp;state-&gt;input, NULL, cli_input, state);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/cli/src/registry.c b/cli/src/registry.c<br/>index 1adf7d6e572..85f7686ade1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/cli/src/registry.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>cli/src/registry.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/cli/src/registry.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>cli/src/registry.c</a></div><div class='hunk'>@@ -15,20 +15,18 @@</div><div class='ctx'> #include "cli.h"</div><div class='ctx'> #include "cli-cmd.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_spc (int ch)</div><div class='add'>+__is_spc(int ch)</div><div class='ctx'> {</div><div class='del'>-        if (ch == ' ')</div><div class='del'>-                return 1;</div><div class='del'>-        return 0;</div><div class='add'>+    if (ch == ' ')</div><div class='add'>+        return 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_div (int ch)</div><div class='add'>+__is_div(int ch)</div><div class='ctx'> {</div><div class='del'>-        switch (ch) {</div><div class='add'>+    switch (ch) {</div><div class='ctx'>         case '(':</div><div class='ctx'>         case ')':</div><div class='ctx'>         case '&lt;':</div><div class='hunk'>@@ -38,369 +36,356 @@ __is_div (int ch)</div><div class='ctx'>         case '{':</div><div class='ctx'>         case '}':</div><div class='ctx'>         case '|':</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_word (const char *word)</div><div class='add'>+__is_word(const char *word)</div><div class='ctx'> {</div><div class='del'>-        return (!__is_div (*word) &amp;&amp; !__is_spc (*word));</div><div class='add'>+    return (!__is_div(*word) &amp;&amp; !__is_spc(*word));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-counter_char (int ch)</div><div class='add'>+counter_char(int ch)</div><div class='ctx'> {</div><div class='del'>-        switch (ch) {</div><div class='add'>+    switch (ch) {</div><div class='ctx'>         case '(':</div><div class='del'>-                return ')';</div><div class='add'>+            return ')';</div><div class='ctx'>         case '&lt;':</div><div class='del'>-                return '&gt;';</div><div class='add'>+            return '&gt;';</div><div class='ctx'>         case '[':</div><div class='del'>-                return ']';</div><div class='add'>+            return ']';</div><div class='ctx'>         case '{':</div><div class='del'>-                return '}';</div><div class='del'>-        }</div><div class='add'>+            return '}';</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> const char *</div><div class='del'>-__is_template_balanced (const char *template)</div><div class='add'>+__is_template_balanced(const char *template)</div><div class='ctx'> {</div><div class='del'>-        const char *trav = NULL;</div><div class='del'>-        int   ch = 0;</div><div class='del'>-</div><div class='del'>-        trav = template;</div><div class='del'>-</div><div class='del'>-        while (*trav) {</div><div class='del'>-                ch = *trav;</div><div class='del'>-</div><div class='del'>-                switch (ch) {</div><div class='del'>-                case '&lt;':</div><div class='del'>-                case '(':</div><div class='del'>-                case '[':</div><div class='del'>-                        trav = __is_template_balanced (trav+1);</div><div class='del'>-                        if (!trav)</div><div class='del'>-                                return NULL;</div><div class='del'>-                        if (*trav != counter_char (ch))</div><div class='del'>-                                return NULL;</div><div class='del'>-                        break;</div><div class='del'>-                case '&gt;':</div><div class='del'>-                case ')':</div><div class='del'>-                case ']':</div><div class='del'>-                        return trav;</div><div class='del'>-                }</div><div class='add'>+    const char *trav = NULL;</div><div class='add'>+    int ch = 0;</div><div class='ctx'> </div><div class='del'>-                trav++;</div><div class='add'>+    trav = template;</div><div class='add'>+</div><div class='add'>+    while (*trav) {</div><div class='add'>+        ch = *trav;</div><div class='add'>+</div><div class='add'>+        switch (ch) {</div><div class='add'>+            case '&lt;':</div><div class='add'>+            case '(':</div><div class='add'>+            case '[':</div><div class='add'>+                trav = __is_template_balanced(trav + 1);</div><div class='add'>+                if (!trav)</div><div class='add'>+                    return NULL;</div><div class='add'>+                if (*trav != counter_char(ch))</div><div class='add'>+                    return NULL;</div><div class='add'>+                break;</div><div class='add'>+            case '&gt;':</div><div class='add'>+            case ')':</div><div class='add'>+            case ']':</div><div class='add'>+                return trav;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return trav;</div><div class='del'>-}</div><div class='add'>+        trav++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return trav;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-is_template_balanced (const char *template)</div><div class='add'>+is_template_balanced(const char *template)</div><div class='ctx'> {</div><div class='del'>-        const char *trav = NULL;</div><div class='add'>+    const char *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        trav = __is_template_balanced (template);</div><div class='del'>-        if (!trav || *trav)</div><div class='del'>-                return -1;</div><div class='add'>+    trav = __is_template_balanced(template);</div><div class='add'>+    if (!trav || *trav)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_token_count (const char *template)</div><div class='add'>+cli_cmd_token_count(const char *template)</div><div class='ctx'> {</div><div class='del'>-        int         count = 0;</div><div class='del'>-        const char *trav = NULL;</div><div class='del'>-        int         is_alnum = 0;</div><div class='del'>-</div><div class='del'>-        for (trav = template; *trav; trav++) {</div><div class='del'>-                switch (*trav) {</div><div class='del'>-                case '&lt;':</div><div class='del'>-                case '&gt;':</div><div class='del'>-                case '(':</div><div class='del'>-                case ')':</div><div class='del'>-                case '[':</div><div class='del'>-                case ']':</div><div class='del'>-                case '{':</div><div class='del'>-                case '}':</div><div class='del'>-                case '|':</div><div class='del'>-                        count++;</div><div class='del'>-                        /* fall through */</div><div class='del'>-                case ' ':</div><div class='del'>-                        is_alnum = 0;</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        if (!is_alnum) {</div><div class='del'>-                                is_alnum = 1;</div><div class='del'>-                                count++;</div><div class='del'>-                        }</div><div class='add'>+    int count = 0;</div><div class='add'>+    const char *trav = NULL;</div><div class='add'>+    int is_alnum = 0;</div><div class='add'>+</div><div class='add'>+    for (trav = template; *trav; trav++) {</div><div class='add'>+        switch (*trav) {</div><div class='add'>+            case '&lt;':</div><div class='add'>+            case '&gt;':</div><div class='add'>+            case '(':</div><div class='add'>+            case ')':</div><div class='add'>+            case '[':</div><div class='add'>+            case ']':</div><div class='add'>+            case '{':</div><div class='add'>+            case '}':</div><div class='add'>+            case '|':</div><div class='add'>+                count++;</div><div class='add'>+                /* fall through */</div><div class='add'>+            case ' ':</div><div class='add'>+                is_alnum = 0;</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                if (!is_alnum) {</div><div class='add'>+                    is_alnum = 1;</div><div class='add'>+                    count++;</div><div class='ctx'>                 }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count + 1;</div><div class='add'>+    return count + 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-cli_cmd_tokens_destroy (char **tokens)</div><div class='add'>+cli_cmd_tokens_destroy(char **tokens)</div><div class='ctx'> {</div><div class='del'>-        char **tokenp = NULL;</div><div class='add'>+    char **tokenp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!tokens)</div><div class='del'>-                return;</div><div class='add'>+    if (!tokens)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        tokenp = tokens;</div><div class='del'>-        while (*tokenp) {</div><div class='del'>-                free (*tokenp);</div><div class='del'>-                tokenp++;</div><div class='del'>-        }</div><div class='add'>+    tokenp = tokens;</div><div class='add'>+    while (*tokenp) {</div><div class='add'>+        free(*tokenp);</div><div class='add'>+        tokenp++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        free (tokens);</div><div class='add'>+    free(tokens);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_tokens_fill (char **tokens, const char *template)</div><div class='add'>+cli_cmd_tokens_fill(char **tokens, const char *template)</div><div class='ctx'> {</div><div class='del'>-        const char  *trav = NULL;</div><div class='del'>-        char       **tokenp = NULL;</div><div class='del'>-        char        *token = NULL;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        int          ch = 0;</div><div class='add'>+    const char *trav = NULL;</div><div class='add'>+    char **tokenp = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int ch = 0;</div><div class='ctx'> </div><div class='del'>-        tokenp = tokens;</div><div class='add'>+    tokenp = tokens;</div><div class='ctx'> </div><div class='del'>-        for (trav = template; *trav; trav++) {</div><div class='del'>-                ch = *trav;</div><div class='add'>+    for (trav = template; *trav; trav++) {</div><div class='add'>+        ch = *trav;</div><div class='ctx'> </div><div class='del'>-                if (__is_spc (ch))</div><div class='del'>-                        continue;</div><div class='add'>+        if (__is_spc(ch))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (__is_div (ch)) {</div><div class='del'>-                        token = calloc (2, 1);</div><div class='del'>-                        if (!token)</div><div class='del'>-                                return -1;</div><div class='del'>-                        token[0] = ch;</div><div class='add'>+        if (__is_div(ch)) {</div><div class='add'>+            token = calloc(2, 1);</div><div class='add'>+            if (!token)</div><div class='add'>+                return -1;</div><div class='add'>+            token[0] = ch;</div><div class='ctx'> </div><div class='del'>-                        *tokenp = token;</div><div class='del'>-                        tokenp++;</div><div class='add'>+            *tokenp = token;</div><div class='add'>+            tokenp++;</div><div class='ctx'> </div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                token = strdup (trav);</div><div class='del'>-                *tokenp = token;</div><div class='del'>-                tokenp++;</div><div class='add'>+        token = strdup(trav);</div><div class='add'>+        *tokenp = token;</div><div class='add'>+        tokenp++;</div><div class='ctx'> </div><div class='del'>-                for (token++; *token; token++) {</div><div class='del'>-                        if (__is_spc (*token) || __is_div (*token)) {</div><div class='del'>-                                *token = 0;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        trav++;</div><div class='del'>-                }</div><div class='add'>+        for (token++; *token; token++) {</div><div class='add'>+            if (__is_spc(*token) || __is_div(*token)) {</div><div class='add'>+                *token = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            trav++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char **</div><div class='del'>-cli_cmd_tokenize (const char *template)</div><div class='add'>+cli_cmd_tokenize(const char *template)</div><div class='ctx'> {</div><div class='del'>-        char **tokens = NULL;</div><div class='del'>-        int    ret = 0;</div><div class='del'>-        int    count = 0;</div><div class='add'>+    char **tokens = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        ret = is_template_balanced (template);</div><div class='del'>-        if (ret)</div><div class='del'>-                return NULL;</div><div class='add'>+    ret = is_template_balanced(template);</div><div class='add'>+    if (ret)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        count = cli_cmd_token_count (template);</div><div class='del'>-        if (count &lt;= 0)</div><div class='del'>-                return NULL;</div><div class='add'>+    count = cli_cmd_token_count(template);</div><div class='add'>+    if (count &lt;= 0)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        tokens = calloc (count + 1, sizeof (char *));</div><div class='del'>-        if (!tokens)</div><div class='del'>-                return NULL;</div><div class='add'>+    tokens = calloc(count + 1, sizeof(char *));</div><div class='add'>+    if (!tokens)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_tokens_fill (tokens, template);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = cli_cmd_tokens_fill(tokens, template);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        return tokens;</div><div class='add'>+    return tokens;</div><div class='ctx'> err:</div><div class='del'>-        cli_cmd_tokens_destroy (tokens);</div><div class='del'>-        return NULL;</div><div class='add'>+    cli_cmd_tokens_destroy(tokens);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-cli_getunamb (const char *tok, void **choices, cli_selector_t sel)</div><div class='add'>+cli_getunamb(const char *tok, void **choices, cli_selector_t sel)</div><div class='ctx'> {</div><div class='del'>-        void  **wcon = NULL;</div><div class='del'>-        char      *w = NULL;</div><div class='del'>-        unsigned  mn = 0;</div><div class='del'>-        void    *ret = NULL;</div><div class='del'>-</div><div class='del'>-        if (!choices || !tok || !*tok)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        for (wcon = choices; *wcon; wcon++) {</div><div class='del'>-                w = strtail ((char *)sel (*wcon), tok);</div><div class='del'>-                if (!w)</div><div class='del'>-                        /* no match */</div><div class='del'>-                        continue;</div><div class='del'>-                if (!*w)</div><div class='del'>-                        /* exact match */</div><div class='del'>-                        return *wcon;</div><div class='del'>-</div><div class='del'>-                ret = *wcon;</div><div class='del'>-                mn++;</div><div class='del'>-        }</div><div class='add'>+    void **wcon = NULL;</div><div class='add'>+    char *w = NULL;</div><div class='add'>+    unsigned mn = 0;</div><div class='add'>+    void *ret = NULL;</div><div class='ctx'> </div><div class='del'>-#ifdef FORCE_MATCH_EXACT</div><div class='add'>+    if (!choices || !tok || !*tok)</div><div class='ctx'>         return NULL;</div><div class='add'>+</div><div class='add'>+    for (wcon = choices; *wcon; wcon++) {</div><div class='add'>+        w = strtail((char *)sel(*wcon), tok);</div><div class='add'>+        if (!w)</div><div class='add'>+            /* no match */</div><div class='add'>+            continue;</div><div class='add'>+        if (!*w)</div><div class='add'>+            /* exact match */</div><div class='add'>+            return *wcon;</div><div class='add'>+</div><div class='add'>+        ret = *wcon;</div><div class='add'>+        mn++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+#ifdef FORCE_MATCH_EXACT</div><div class='add'>+    return NULL;</div><div class='ctx'> #else</div><div class='del'>-        return (mn == 1) ? ret : NULL;</div><div class='add'>+    return (mn == 1) ? ret : NULL;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static const char *</div><div class='del'>-sel_cmd_word (void *wcon)</div><div class='add'>+sel_cmd_word(void *wcon)</div><div class='ctx'> {</div><div class='del'>-        return ((struct cli_cmd_word *)wcon)-&gt;word;</div><div class='add'>+    return ((struct cli_cmd_word *)wcon)-&gt;word;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct cli_cmd_word *</div><div class='del'>-cli_cmd_nextword (struct cli_cmd_word *word, const char *token)</div><div class='add'>+cli_cmd_nextword(struct cli_cmd_word *word, const char *token)</div><div class='ctx'> {</div><div class='del'>-        return (struct cli_cmd_word *)cli_getunamb (token,</div><div class='del'>-                                                    (void **)word-&gt;nextwords,</div><div class='del'>-                                                    sel_cmd_word);</div><div class='add'>+    return (struct cli_cmd_word *)cli_getunamb(token, (void **)word-&gt;nextwords,</div><div class='add'>+                                               sel_cmd_word);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct cli_cmd_word *</div><div class='del'>-cli_cmd_newword (struct cli_cmd_word *word, const char *token)</div><div class='add'>+cli_cmd_newword(struct cli_cmd_word *word, const char *token)</div><div class='ctx'> {</div><div class='del'>-        struct cli_cmd_word **nextwords = NULL;</div><div class='del'>-        struct cli_cmd_word  *nextword = NULL;</div><div class='add'>+    struct cli_cmd_word **nextwords = NULL;</div><div class='add'>+    struct cli_cmd_word *nextword = NULL;</div><div class='ctx'> </div><div class='del'>-        nextwords = realloc (word-&gt;nextwords,</div><div class='del'>-                             (word-&gt;nextwords_cnt + 2) * sizeof (*nextwords));</div><div class='del'>-        if (!nextwords)</div><div class='del'>-                return NULL;</div><div class='add'>+    nextwords = realloc(word-&gt;nextwords,</div><div class='add'>+                        (word-&gt;nextwords_cnt + 2) * sizeof(*nextwords));</div><div class='add'>+    if (!nextwords)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        word-&gt;nextwords = nextwords;</div><div class='add'>+    word-&gt;nextwords = nextwords;</div><div class='ctx'> </div><div class='del'>-        nextword = calloc (1, sizeof (*nextword));</div><div class='del'>-        if (!nextword)</div><div class='del'>-                return NULL;</div><div class='add'>+    nextword = calloc(1, sizeof(*nextword));</div><div class='add'>+    if (!nextword)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        nextword-&gt;word = strdup (token);</div><div class='del'>-        if (!nextword-&gt;word) {</div><div class='del'>-                free (nextword);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    nextword-&gt;word = strdup(token);</div><div class='add'>+    if (!nextword-&gt;word) {</div><div class='add'>+        free(nextword);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        nextword-&gt;tree = word-&gt;tree;</div><div class='del'>-        nextwords[word-&gt;nextwords_cnt++] = nextword;</div><div class='del'>-        nextwords[word-&gt;nextwords_cnt] = NULL;</div><div class='add'>+    nextword-&gt;tree = word-&gt;tree;</div><div class='add'>+    nextwords[word-&gt;nextwords_cnt++] = nextword;</div><div class='add'>+    nextwords[word-&gt;nextwords_cnt] = NULL;</div><div class='ctx'> </div><div class='del'>-        return nextword;</div><div class='add'>+    return nextword;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cli_cmd_ingest (struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn,</div><div class='del'>-                const char *desc, const char *pattern)</div><div class='add'>+cli_cmd_ingest(struct cli_cmd_tree *tree, char **tokens, cli_cmd_cbk_t *cbkfn,</div><div class='add'>+               const char *desc, const char *pattern)</div><div class='ctx'> {</div><div class='del'>-        int                    ret = 0;</div><div class='del'>-        char                 **tokenp = NULL;</div><div class='del'>-        char                  *token = NULL;</div><div class='del'>-        struct cli_cmd_word   *word = NULL;</div><div class='del'>-        struct cli_cmd_word   *next = NULL;</div><div class='del'>-</div><div class='del'>-        word = &amp;tree-&gt;root;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char **tokenp = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+    struct cli_cmd_word *word = NULL;</div><div class='add'>+    struct cli_cmd_word *next = NULL;</div><div class='ctx'> </div><div class='del'>-        for (tokenp = tokens; (token = *tokenp); tokenp++) {</div><div class='del'>-                if (!__is_word (token))</div><div class='del'>-                        break;</div><div class='add'>+    word = &amp;tree-&gt;root;</div><div class='ctx'> </div><div class='del'>-                next = cli_cmd_nextword (word, token);</div><div class='del'>-                if (!next)</div><div class='del'>-                        next = cli_cmd_newword (word, token);</div><div class='add'>+    for (tokenp = tokens; (token = *tokenp); tokenp++) {</div><div class='add'>+        if (!__is_word(token))</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                word = next;</div><div class='del'>-                if (!word)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        next = cli_cmd_nextword(word, token);</div><div class='add'>+        if (!next)</div><div class='add'>+            next = cli_cmd_newword(word, token);</div><div class='ctx'> </div><div class='add'>+        word = next;</div><div class='ctx'>         if (!word)</div><div class='del'>-                return -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (word-&gt;cbkfn) {</div><div class='del'>-                /* warning - command already registered */</div><div class='del'>-        }</div><div class='add'>+    if (!word)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        word-&gt;cbkfn = cbkfn;</div><div class='del'>-        word-&gt;desc  = desc;</div><div class='del'>-        word-&gt;pattern = pattern;</div><div class='add'>+    if (word-&gt;cbkfn) {</div><div class='add'>+        /* warning - command already registered */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* end of static strings in command template */</div><div class='add'>+    word-&gt;cbkfn = cbkfn;</div><div class='add'>+    word-&gt;desc = desc;</div><div class='add'>+    word-&gt;pattern = pattern;</div><div class='ctx'> </div><div class='del'>-        /* TODO: autocompletion beyond this point is just "nice to have" */</div><div class='add'>+    /* end of static strings in command template */</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    /* TODO: autocompletion beyond this point is just "nice to have" */</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cli_cmd_register (struct cli_cmd_tree *tree, struct cli_cmd *cmd)</div><div class='add'>+cli_cmd_register(struct cli_cmd_tree *tree, struct cli_cmd *cmd)</div><div class='ctx'> {</div><div class='del'>-        char **tokens = NULL;</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    char **tokens = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (cmd);</div><div class='add'>+    GF_ASSERT(cmd);</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;reg_cbk)</div><div class='del'>-                cmd-&gt;reg_cbk (cmd);</div><div class='add'>+    if (cmd-&gt;reg_cbk)</div><div class='add'>+        cmd-&gt;reg_cbk(cmd);</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;disable) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (cmd-&gt;disable) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tokens = cli_cmd_tokenize (cmd-&gt;pattern);</div><div class='del'>-        if (!tokens) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    tokens = cli_cmd_tokenize(cmd-&gt;pattern);</div><div class='add'>+    if (!tokens) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cli_cmd_ingest (tree, tokens, cmd-&gt;cbk, cmd-&gt;desc, cmd-&gt;pattern);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cli_cmd_ingest(tree, tokens, cmd-&gt;cbk, cmd-&gt;desc, cmd-&gt;pattern);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (tokens)</div><div class='del'>-                cli_cmd_tokens_destroy (tokens);</div><div class='add'>+    if (tokens)</div><div class='add'>+        cli_cmd_tokens_destroy(tokens);</div><div class='ctx'> </div><div class='del'>-        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log("cli", GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/extras/benchmarking/glfs-bm.c b/extras/benchmarking/glfs-bm.c<br/>index dc717f33c16..f7f5873f84d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/benchmarking/glfs-bm.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/benchmarking/glfs-bm.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/benchmarking/glfs-bm.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/benchmarking/glfs-bm.c</a></div><div class='hunk'>@@ -25,365 +25,338 @@</div><div class='ctx'> #include &lt;sys/time.h&gt;</div><div class='ctx'> </div><div class='ctx'> struct state {</div><div class='del'>-        char need_op_write:1;</div><div class='del'>-        char need_op_read:1;</div><div class='add'>+    char need_op_write : 1;</div><div class='add'>+    char need_op_read : 1;</div><div class='ctx'> </div><div class='del'>-        char need_iface_fileio:1;</div><div class='del'>-        char need_iface_xattr:1;</div><div class='add'>+    char need_iface_fileio : 1;</div><div class='add'>+    char need_iface_xattr : 1;</div><div class='ctx'> </div><div class='del'>-        char need_mode_posix:1;</div><div class='add'>+    char need_mode_posix : 1;</div><div class='ctx'> </div><div class='del'>-        char prefix[512];</div><div class='del'>-        long int count;</div><div class='add'>+    char prefix[512];</div><div class='add'>+    long int count;</div><div class='ctx'> </div><div class='del'>-        size_t block_size;</div><div class='add'>+    size_t block_size;</div><div class='ctx'> </div><div class='del'>-        char *specfile;</div><div class='add'>+    char *specfile;</div><div class='ctx'> </div><div class='del'>-        long int io_size;</div><div class='add'>+    long int io_size;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-#define MEASURE(func, arg) measure (func, #func, arg)</div><div class='del'>-</div><div class='add'>+#define MEASURE(func, arg) measure(func, #func, arg)</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-tv_difference (struct timeval *tv_stop,</div><div class='del'>-               struct timeval *tv_start,</div><div class='del'>-               struct timeval *tv_diff)</div><div class='add'>+tv_difference(struct timeval *tv_stop, struct timeval *tv_start,</div><div class='add'>+              struct timeval *tv_diff)</div><div class='ctx'> {</div><div class='del'>-        if (tv_stop-&gt;tv_usec &lt; tv_start-&gt;tv_usec) {</div><div class='del'>-                tv_diff-&gt;tv_usec = (tv_stop-&gt;tv_usec + 1000000) - tv_start-&gt;tv_usec;</div><div class='del'>-                tv_diff-&gt;tv_sec = (tv_stop-&gt;tv_sec - 1 - tv_start-&gt;tv_sec);</div><div class='del'>-        } else {</div><div class='del'>-                tv_diff-&gt;tv_usec = tv_stop-&gt;tv_usec - tv_start-&gt;tv_usec;</div><div class='del'>-                tv_diff-&gt;tv_sec = tv_stop-&gt;tv_sec - tv_start-&gt;tv_sec;</div><div class='del'>-        }</div><div class='add'>+    if (tv_stop-&gt;tv_usec &lt; tv_start-&gt;tv_usec) {</div><div class='add'>+        tv_diff-&gt;tv_usec = (tv_stop-&gt;tv_usec + 1000000) - tv_start-&gt;tv_usec;</div><div class='add'>+        tv_diff-&gt;tv_sec = (tv_stop-&gt;tv_sec - 1 - tv_start-&gt;tv_sec);</div><div class='add'>+    } else {</div><div class='add'>+        tv_diff-&gt;tv_usec = tv_stop-&gt;tv_usec - tv_start-&gt;tv_usec;</div><div class='add'>+        tv_diff-&gt;tv_sec = tv_stop-&gt;tv_sec - tv_start-&gt;tv_sec;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-measure (int (*func)(struct state *state),</div><div class='del'>-         char *func_name, struct state *state)</div><div class='add'>+measure(int (*func)(struct state *state), char *func_name, struct state *state)</div><div class='ctx'> {</div><div class='del'>-        struct timeval tv_start, tv_stop, tv_diff;</div><div class='del'>-        state-&gt;io_size = 0;</div><div class='del'>-        long int count;</div><div class='add'>+    struct timeval tv_start, tv_stop, tv_diff;</div><div class='add'>+    state-&gt;io_size = 0;</div><div class='add'>+    long int count;</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;tv_start, NULL);</div><div class='del'>-        count = func (state);</div><div class='del'>-        gettimeofday (&amp;tv_stop, NULL);</div><div class='add'>+    gettimeofday(&amp;tv_start, NULL);</div><div class='add'>+    count = func(state);</div><div class='add'>+    gettimeofday(&amp;tv_stop, NULL);</div><div class='ctx'> </div><div class='del'>-        tv_difference (&amp;tv_stop, &amp;tv_start, &amp;tv_diff);</div><div class='add'>+    tv_difference(&amp;tv_stop, &amp;tv_start, &amp;tv_diff);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "%s: count=%ld, size=%ld, time=%ld:%ld\n",</div><div class='del'>-                 func_name, count, state-&gt;io_size,</div><div class='del'>-                 tv_diff.tv_sec, tv_diff.tv_usec);</div><div class='add'>+    fprintf(stdout, "%s: count=%ld, size=%ld, time=%ld:%ld\n", func_name, count,</div><div class='add'>+            state-&gt;io_size, tv_diff.tv_sec, tv_diff.tv_usec);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static error_t</div><div class='del'>-parse_opts (int key, char *arg,</div><div class='del'>-            struct argp_state *_state)</div><div class='add'>+parse_opts(int key, char *arg, struct argp_state *_state)</div><div class='ctx'> {</div><div class='del'>-        struct state *state = _state-&gt;input;</div><div class='add'>+    struct state *state = _state-&gt;input;</div><div class='ctx'> </div><div class='del'>-        switch (key)</div><div class='del'>-        {</div><div class='add'>+    switch (key) {</div><div class='ctx'>         case 'o':</div><div class='del'>-                if (strcasecmp (arg, "read") == 0) {</div><div class='del'>-                        state-&gt;need_op_write = 0;</div><div class='del'>-                        state-&gt;need_op_read = 1;</div><div class='del'>-                } else if (strcasecmp (arg, "write") == 0) {</div><div class='del'>-                        state-&gt;need_op_write = 1;</div><div class='del'>-                        state-&gt;need_op_read = 0;</div><div class='del'>-                } else if (strcasecmp (arg, "both") == 0) {</div><div class='del'>-                        state-&gt;need_op_write = 1;</div><div class='del'>-                        state-&gt;need_op_read = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        fprintf (stderr, "unknown op: %s\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (strcasecmp(arg, "read") == 0) {</div><div class='add'>+                state-&gt;need_op_write = 0;</div><div class='add'>+                state-&gt;need_op_read = 1;</div><div class='add'>+            } else if (strcasecmp(arg, "write") == 0) {</div><div class='add'>+                state-&gt;need_op_write = 1;</div><div class='add'>+                state-&gt;need_op_read = 0;</div><div class='add'>+            } else if (strcasecmp(arg, "both") == 0) {</div><div class='add'>+                state-&gt;need_op_write = 1;</div><div class='add'>+                state-&gt;need_op_read = 1;</div><div class='add'>+            } else {</div><div class='add'>+                fprintf(stderr, "unknown op: %s\n", arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case 'i':</div><div class='del'>-                if (strcasecmp (arg, "fileio") == 0) {</div><div class='del'>-                        state-&gt;need_iface_fileio = 1;</div><div class='del'>-                        state-&gt;need_iface_xattr = 0;</div><div class='del'>-                } else if (strcasecmp (arg, "xattr") == 0) {</div><div class='del'>-                        state-&gt;need_iface_fileio = 0;</div><div class='del'>-                        state-&gt;need_iface_xattr = 1;</div><div class='del'>-                } else if (strcasecmp (arg, "both") == 0) {</div><div class='del'>-                        state-&gt;need_iface_fileio = 1;</div><div class='del'>-                        state-&gt;need_iface_xattr = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        fprintf (stderr, "unknown interface: %s\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        case 'b':</div><div class='del'>-        {</div><div class='del'>-                size_t block_size = atoi (arg);</div><div class='del'>-                if (!block_size) {</div><div class='del'>-                        fprintf (stderr, "incorrect size: %s\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                state-&gt;block_size = block_size;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            if (strcasecmp(arg, "fileio") == 0) {</div><div class='add'>+                state-&gt;need_iface_fileio = 1;</div><div class='add'>+                state-&gt;need_iface_xattr = 0;</div><div class='add'>+            } else if (strcasecmp(arg, "xattr") == 0) {</div><div class='add'>+                state-&gt;need_iface_fileio = 0;</div><div class='add'>+                state-&gt;need_iface_xattr = 1;</div><div class='add'>+            } else if (strcasecmp(arg, "both") == 0) {</div><div class='add'>+                state-&gt;need_iface_fileio = 1;</div><div class='add'>+                state-&gt;need_iface_xattr = 1;</div><div class='add'>+            } else {</div><div class='add'>+                fprintf(stderr, "unknown interface: %s\n", arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case 'b': {</div><div class='add'>+            size_t block_size = atoi(arg);</div><div class='add'>+            if (!block_size) {</div><div class='add'>+                fprintf(stderr, "incorrect size: %s\n", arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+            state-&gt;block_size = block_size;</div><div class='add'>+        } break;</div><div class='ctx'>         case 's':</div><div class='del'>-                state-&gt;specfile = strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            state-&gt;specfile = strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'>         case 'p':</div><div class='del'>-                fprintf (stderr, "using prefix: %s\n", arg);</div><div class='del'>-                strncpy (state-&gt;prefix, arg, 512);</div><div class='del'>-                break;</div><div class='del'>-        case 'c':</div><div class='del'>-        {</div><div class='del'>-                long count = atol (arg);</div><div class='del'>-                if (!count) {</div><div class='del'>-                        fprintf (stderr, "incorrect count: %s\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                state-&gt;count = count;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            fprintf(stderr, "using prefix: %s\n", arg);</div><div class='add'>+            strncpy(state-&gt;prefix, arg, 512);</div><div class='add'>+            break;</div><div class='add'>+        case 'c': {</div><div class='add'>+            long count = atol(arg);</div><div class='add'>+            if (!count) {</div><div class='add'>+                fprintf(stderr, "incorrect count: %s\n", arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+            state-&gt;count = count;</div><div class='add'>+        } break;</div><div class='ctx'>         case ARGP_KEY_NO_ARGS:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_KEY_ARG:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-do_mode_posix_iface_fileio_write (struct state *state)</div><div class='add'>+do_mode_posix_iface_fileio_write(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        long int i;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char block[state-&gt;block_size];</div><div class='del'>-</div><div class='del'>-        for (i=0; i&lt;state-&gt;count; i++) {</div><div class='del'>-                int fd = -1;</div><div class='del'>-                char filename[512];</div><div class='del'>-</div><div class='del'>-                sprintf (filename, "%s.%06ld", state-&gt;prefix, i);</div><div class='del'>-</div><div class='del'>-                fd = open (filename, O_CREAT|O_WRONLY, 00600);</div><div class='del'>-                if (fd == -1) {</div><div class='del'>-                        fprintf (stderr, "open(%s) =&gt; %s\n", filename, strerror (errno));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                ret = write (fd, block, state-&gt;block_size);</div><div class='del'>-                if (ret != state-&gt;block_size) {</div><div class='del'>-                        fprintf (stderr, "write (%s) =&gt; %d/%s\n", filename, ret,</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        close (fd);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                close (fd);</div><div class='del'>-                state-&gt;io_size += ret;</div><div class='add'>+    long int i;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char block[state-&gt;block_size];</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; state-&gt;count; i++) {</div><div class='add'>+        int fd = -1;</div><div class='add'>+        char filename[512];</div><div class='add'>+</div><div class='add'>+        sprintf(filename, "%s.%06ld", state-&gt;prefix, i);</div><div class='add'>+</div><div class='add'>+        fd = open(filename, O_CREAT | O_WRONLY, 00600);</div><div class='add'>+        if (fd == -1) {</div><div class='add'>+            fprintf(stderr, "open(%s) =&gt; %s\n", filename, strerror(errno));</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        ret = write(fd, block, state-&gt;block_size);</div><div class='add'>+        if (ret != state-&gt;block_size) {</div><div class='add'>+            fprintf(stderr, "write (%s) =&gt; %d/%s\n", filename, ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            close(fd);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        close(fd);</div><div class='add'>+        state-&gt;io_size += ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-do_mode_posix_iface_fileio_read (struct state *state)</div><div class='add'>+do_mode_posix_iface_fileio_read(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        long int i;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char block[state-&gt;block_size];</div><div class='del'>-</div><div class='del'>-        for (i=0; i&lt;state-&gt;count; i++) {</div><div class='del'>-                int fd = -1;</div><div class='del'>-                char filename[512];</div><div class='del'>-</div><div class='del'>-                sprintf (filename, "%s.%06ld", state-&gt;prefix, i);</div><div class='del'>-</div><div class='del'>-                fd = open (filename, O_RDONLY);</div><div class='del'>-                if (fd == -1) {</div><div class='del'>-                        fprintf (stderr, "open(%s) =&gt; %s\n", filename, strerror (errno));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                ret = read (fd, block, state-&gt;block_size);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        fprintf (stderr, "read(%s) =&gt; %d/%s\n", filename, ret, strerror (errno));</div><div class='del'>-                        close (fd);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                close (fd);</div><div class='del'>-                state-&gt;io_size += ret;</div><div class='add'>+    long int i;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char block[state-&gt;block_size];</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; state-&gt;count; i++) {</div><div class='add'>+        int fd = -1;</div><div class='add'>+        char filename[512];</div><div class='add'>+</div><div class='add'>+        sprintf(filename, "%s.%06ld", state-&gt;prefix, i);</div><div class='add'>+</div><div class='add'>+        fd = open(filename, O_RDONLY);</div><div class='add'>+        if (fd == -1) {</div><div class='add'>+            fprintf(stderr, "open(%s) =&gt; %s\n", filename, strerror(errno));</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        ret = read(fd, block, state-&gt;block_size);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            fprintf(stderr, "read(%s) =&gt; %d/%s\n", filename, ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            close(fd);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        close(fd);</div><div class='add'>+        state-&gt;io_size += ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-do_mode_posix_iface_fileio (struct state *state)</div><div class='add'>+do_mode_posix_iface_fileio(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        if (state-&gt;need_op_write)</div><div class='del'>-                MEASURE (do_mode_posix_iface_fileio_write, state);</div><div class='add'>+    if (state-&gt;need_op_write)</div><div class='add'>+        MEASURE(do_mode_posix_iface_fileio_write, state);</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;need_op_read)</div><div class='del'>-                MEASURE (do_mode_posix_iface_fileio_read, state);</div><div class='add'>+    if (state-&gt;need_op_read)</div><div class='add'>+        MEASURE(do_mode_posix_iface_fileio_read, state);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-do_mode_posix_iface_xattr_write (struct state *state)</div><div class='add'>+do_mode_posix_iface_xattr_write(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        long int i;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char block[state-&gt;block_size];</div><div class='del'>-        char *dname = NULL, *dirc = NULL;</div><div class='del'>-        char *bname = NULL, *basec = NULL;</div><div class='del'>-</div><div class='del'>-        dirc = strdup (state-&gt;prefix);</div><div class='del'>-        basec = strdup (state-&gt;prefix);</div><div class='del'>-        dname = dirname (dirc);</div><div class='del'>-        bname = basename (basec);</div><div class='del'>-</div><div class='del'>-        for (i=0; i&lt;state-&gt;count; i++) {</div><div class='del'>-                char key[512];</div><div class='del'>-</div><div class='del'>-                sprintf (key, "glusterfs.file.%s.%06ld", bname, i);</div><div class='del'>-</div><div class='del'>-                ret = lsetxattr (dname, key, block, state-&gt;block_size, 0);</div><div class='del'>-</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        fprintf (stderr, "lsetxattr (%s, %s, %p) =&gt; %s\n",</div><div class='del'>-                                 dname, key, block, strerror (errno));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                state-&gt;io_size += state-&gt;block_size;</div><div class='add'>+    long int i;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char block[state-&gt;block_size];</div><div class='add'>+    char *dname = NULL, *dirc = NULL;</div><div class='add'>+    char *bname = NULL, *basec = NULL;</div><div class='add'>+</div><div class='add'>+    dirc = strdup(state-&gt;prefix);</div><div class='add'>+    basec = strdup(state-&gt;prefix);</div><div class='add'>+    dname = dirname(dirc);</div><div class='add'>+    bname = basename(basec);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; state-&gt;count; i++) {</div><div class='add'>+        char key[512];</div><div class='add'>+</div><div class='add'>+        sprintf(key, "glusterfs.file.%s.%06ld", bname, i);</div><div class='add'>+</div><div class='add'>+        ret = lsetxattr(dname, key, block, state-&gt;block_size, 0);</div><div class='add'>+</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            fprintf(stderr, "lsetxattr (%s, %s, %p) =&gt; %s\n", dname, key, block,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        state-&gt;io_size += state-&gt;block_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        free (dirc);</div><div class='del'>-        free (basec);</div><div class='add'>+    free(dirc);</div><div class='add'>+    free(basec);</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-do_mode_posix_iface_xattr_read (struct state *state)</div><div class='add'>+do_mode_posix_iface_xattr_read(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        long int i;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char block[state-&gt;block_size];</div><div class='del'>-        char *dname = NULL, *dirc = NULL;</div><div class='del'>-        char *bname = NULL, *basec = NULL;</div><div class='del'>-</div><div class='del'>-        dirc = strdup (state-&gt;prefix);</div><div class='del'>-        basec = strdup (state-&gt;prefix);</div><div class='del'>-        dname = dirname (dirc);</div><div class='del'>-        bname = basename (basec);</div><div class='del'>-</div><div class='del'>-        for (i=0; i&lt;state-&gt;count; i++) {</div><div class='del'>-                char key[512];</div><div class='del'>-</div><div class='del'>-                sprintf (key, "glusterfs.file.%s.%06ld", bname, i);</div><div class='del'>-</div><div class='del'>-                ret = lgetxattr (dname, key, block, state-&gt;block_size);</div><div class='del'>-</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "lgetxattr (%s, %s, %p) =&gt; %s\n",</div><div class='del'>-                                 dname, key, block, strerror (errno));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                state-&gt;io_size += ret;</div><div class='add'>+    long int i;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char block[state-&gt;block_size];</div><div class='add'>+    char *dname = NULL, *dirc = NULL;</div><div class='add'>+    char *bname = NULL, *basec = NULL;</div><div class='add'>+</div><div class='add'>+    dirc = strdup(state-&gt;prefix);</div><div class='add'>+    basec = strdup(state-&gt;prefix);</div><div class='add'>+    dname = dirname(dirc);</div><div class='add'>+    bname = basename(basec);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; state-&gt;count; i++) {</div><div class='add'>+        char key[512];</div><div class='add'>+</div><div class='add'>+        sprintf(key, "glusterfs.file.%s.%06ld", bname, i);</div><div class='add'>+</div><div class='add'>+        ret = lgetxattr(dname, key, block, state-&gt;block_size);</div><div class='add'>+</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "lgetxattr (%s, %s, %p) =&gt; %s\n", dname, key, block,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        state-&gt;io_size += ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-do_mode_posix_iface_xattr (struct state *state)</div><div class='add'>+do_mode_posix_iface_xattr(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        if (state-&gt;need_op_write)</div><div class='del'>-                MEASURE (do_mode_posix_iface_xattr_write, state);</div><div class='add'>+    if (state-&gt;need_op_write)</div><div class='add'>+        MEASURE(do_mode_posix_iface_xattr_write, state);</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;need_op_read)</div><div class='del'>-                MEASURE (do_mode_posix_iface_xattr_read, state);</div><div class='add'>+    if (state-&gt;need_op_read)</div><div class='add'>+        MEASURE(do_mode_posix_iface_xattr_read, state);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-do_mode_posix (struct state *state)</div><div class='add'>+do_mode_posix(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        if (state-&gt;need_iface_fileio)</div><div class='del'>-                do_mode_posix_iface_fileio (state);</div><div class='add'>+    if (state-&gt;need_iface_fileio)</div><div class='add'>+        do_mode_posix_iface_fileio(state);</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;need_iface_xattr)</div><div class='del'>-                do_mode_posix_iface_xattr (state);</div><div class='add'>+    if (state-&gt;need_iface_xattr)</div><div class='add'>+        do_mode_posix_iface_xattr(state);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-do_actions (struct state *state)</div><div class='add'>+do_actions(struct state *state)</div><div class='ctx'> {</div><div class='del'>-        if (state-&gt;need_mode_posix)</div><div class='del'>-                do_mode_posix (state);</div><div class='add'>+    if (state-&gt;need_mode_posix)</div><div class='add'>+        do_mode_posix(state);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct argp_option options[] = {</div><div class='del'>-        {"op", 'o', "OPERATIONS", 0,</div><div class='del'>-         "WRITE|READ|BOTH - defaults to BOTH"},</div><div class='del'>-        {"iface", 'i', "INTERFACE", 0,</div><div class='del'>-         "FILEIO|XATTR|BOTH - defaults to FILEIO"},</div><div class='del'>-        {"block", 'b', "BLOCKSIZE", 0,</div><div class='del'>-         "&lt;NUM&gt; - defaults to 4096"},</div><div class='del'>-        {"specfile", 's', "SPECFILE", 0,</div><div class='del'>-         "absolute path to specfile"},</div><div class='del'>-        {"prefix", 'p', "PREFIX", 0,</div><div class='del'>-         "filename prefix"},</div><div class='del'>-        {"count", 'c', "COUNT", 0,</div><div class='del'>-         "number of files"},</div><div class='del'>-        {0, 0, 0, 0, 0}</div><div class='del'>-};</div><div class='add'>+    {"op", 'o', "OPERATIONS", 0, "WRITE|READ|BOTH - defaults to BOTH"},</div><div class='add'>+    {"iface", 'i', "INTERFACE", 0, "FILEIO|XATTR|BOTH - defaults to FILEIO"},</div><div class='add'>+    {"block", 'b', "BLOCKSIZE", 0, "&lt;NUM&gt; - defaults to 4096"},</div><div class='add'>+    {"specfile", 's', "SPECFILE", 0, "absolute path to specfile"},</div><div class='add'>+    {"prefix", 'p', "PREFIX", 0, "filename prefix"},</div><div class='add'>+    {"count", 'c', "COUNT", 0, "number of files"},</div><div class='add'>+    {0, 0, 0, 0, 0}};</div><div class='ctx'> </div><div class='del'>-static struct argp argp = {</div><div class='del'>-        options,</div><div class='del'>-        parse_opts,</div><div class='del'>-        "tool",</div><div class='del'>-        "tool to benchmark small file performance"</div><div class='del'>-};</div><div class='add'>+static struct argp argp = {options, parse_opts, "tool",</div><div class='add'>+                           "tool to benchmark small file performance"};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        struct state state = {0, };</div><div class='add'>+    struct state state = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        state.need_op_write = 1;</div><div class='del'>-        state.need_op_read = 1;</div><div class='add'>+    state.need_op_write = 1;</div><div class='add'>+    state.need_op_read = 1;</div><div class='ctx'> </div><div class='del'>-        state.need_iface_fileio = 1;</div><div class='del'>-        state.need_iface_xattr = 0;</div><div class='add'>+    state.need_iface_fileio = 1;</div><div class='add'>+    state.need_iface_xattr = 0;</div><div class='ctx'> </div><div class='del'>-        state.need_mode_posix = 1;</div><div class='add'>+    state.need_mode_posix = 1;</div><div class='ctx'> </div><div class='del'>-        state.block_size = 4096;</div><div class='add'>+    state.block_size = 4096;</div><div class='ctx'> </div><div class='del'>-        strcpy (state.prefix, "tmpfile");</div><div class='del'>-        state.count = 1048576;</div><div class='add'>+    strcpy(state.prefix, "tmpfile");</div><div class='add'>+    state.count = 1048576;</div><div class='ctx'> </div><div class='del'>-        if (argp_parse (&amp;argp, argc, argv, 0, 0, &amp;state) != 0) {</div><div class='del'>-                fprintf (stderr, "argp_parse() failed\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    if (argp_parse(&amp;argp, argc, argv, 0, 0, &amp;state) != 0) {</div><div class='add'>+        fprintf(stderr, "argp_parse() failed\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        do_actions (&amp;state);</div><div class='add'>+    do_actions(&amp;state);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/extras/benchmarking/rdd.c b/extras/benchmarking/rdd.c<br/>index a667c6a1d65..efc9d342a37 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/benchmarking/rdd.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/benchmarking/rdd.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/benchmarking/rdd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/benchmarking/rdd.c</a></div><div class='hunk'>@@ -20,633 +20,586 @@</div><div class='ctx'> </div><div class='ctx'> #define TWO_POWER(power) (2UL &lt;&lt; (power))</div><div class='ctx'> </div><div class='del'>-#define RDD_INTEGER_VALUE ((TWO_POWER ((sizeof (int) * 8))) - 1)</div><div class='add'>+#define RDD_INTEGER_VALUE ((TWO_POWER((sizeof(int) * 8))) - 1)</div><div class='ctx'> </div><div class='ctx'> #ifndef UNIX_PATH_MAX</div><div class='ctx'> #define UNIX_PATH_MAX 108</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #define UNIT_KB 1024ULL</div><div class='del'>-#define UNIT_MB UNIT_KB*1024ULL</div><div class='del'>-#define UNIT_GB UNIT_MB*1024ULL</div><div class='del'>-#define UNIT_TB UNIT_GB*1024ULL</div><div class='del'>-#define UNIT_PB UNIT_TB*1024ULL</div><div class='add'>+#define UNIT_MB UNIT_KB * 1024ULL</div><div class='add'>+#define UNIT_GB UNIT_MB * 1024ULL</div><div class='add'>+#define UNIT_TB UNIT_GB * 1024ULL</div><div class='add'>+#define UNIT_PB UNIT_TB * 1024ULL</div><div class='ctx'> </div><div class='del'>-#define UNIT_KB_STRING    "KB"</div><div class='del'>-#define UNIT_MB_STRING    "MB"</div><div class='del'>-#define UNIT_GB_STRING    "GB"</div><div class='del'>-#define UNIT_TB_STRING    "TB"</div><div class='del'>-#define UNIT_PB_STRING    "PB"</div><div class='add'>+#define UNIT_KB_STRING "KB"</div><div class='add'>+#define UNIT_MB_STRING "MB"</div><div class='add'>+#define UNIT_GB_STRING "GB"</div><div class='add'>+#define UNIT_TB_STRING "TB"</div><div class='add'>+#define UNIT_PB_STRING "PB"</div><div class='ctx'> </div><div class='ctx'> struct rdd_file {</div><div class='del'>-        char path[UNIX_PATH_MAX];</div><div class='del'>-        struct stat st;</div><div class='del'>-        int fd;</div><div class='add'>+    char path[UNIX_PATH_MAX];</div><div class='add'>+    struct stat st;</div><div class='add'>+    int fd;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rdd_config {</div><div class='del'>-        long iters;</div><div class='del'>-        long max_ops_per_seq;</div><div class='del'>-        size_t max_bs;</div><div class='del'>-        size_t min_bs;</div><div class='del'>-        int thread_count;</div><div class='del'>-        pthread_t *threads;</div><div class='del'>-        pthread_barrier_t barrier;</div><div class='del'>-        pthread_mutex_t lock;</div><div class='del'>-        struct rdd_file in_file;</div><div class='del'>-        struct rdd_file out_file;</div><div class='del'>-        ssize_t file_size;</div><div class='add'>+    long iters;</div><div class='add'>+    long max_ops_per_seq;</div><div class='add'>+    size_t max_bs;</div><div class='add'>+    size_t min_bs;</div><div class='add'>+    int thread_count;</div><div class='add'>+    pthread_t *threads;</div><div class='add'>+    pthread_barrier_t barrier;</div><div class='add'>+    pthread_mutex_t lock;</div><div class='add'>+    struct rdd_file in_file;</div><div class='add'>+    struct rdd_file out_file;</div><div class='add'>+    ssize_t file_size;</div><div class='ctx'> };</div><div class='ctx'> static struct rdd_config rdd_config;</div><div class='ctx'> </div><div class='ctx'> enum rdd_keys {</div><div class='del'>-        RDD_MIN_BS_KEY = 1,</div><div class='del'>-        RDD_MAX_BS_KEY,</div><div class='add'>+    RDD_MIN_BS_KEY = 1,</div><div class='add'>+    RDD_MAX_BS_KEY,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static error_t</div><div class='del'>-rdd_parse_opts (int key, char *arg,</div><div class='del'>-                struct argp_state *_state)</div><div class='add'>+rdd_parse_opts(int key, char *arg, struct argp_state *_state)</div><div class='ctx'> {</div><div class='del'>-        switch (key) {</div><div class='del'>-        case 'o':</div><div class='del'>-        {</div><div class='del'>-                int len = 0;</div><div class='del'>-                len = strlen (arg);</div><div class='del'>-                if (len &gt; UNIX_PATH_MAX) {</div><div class='del'>-                        fprintf (stderr, "output file name too long (%s)\n",</div><div class='del'>-                                 arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                strncpy (rdd_config.out_file.path, arg, len);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case 'i':</div><div class='del'>-        {</div><div class='del'>-                int len = 0;</div><div class='del'>-                len = strlen (arg);</div><div class='del'>-                if (len &gt; UNIX_PATH_MAX) {</div><div class='del'>-                        fprintf (stderr, "input file name too long (%s)\n",</div><div class='del'>-                                 arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                strncpy (rdd_config.in_file.path, arg, len);</div><div class='del'>-                rdd_config.in_file.path[len] = '\0';</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case 'f':</div><div class='del'>-        {</div><div class='del'>-                char *tmp = NULL;</div><div class='del'>-                unsigned long long fs = 0;</div><div class='del'>-                if (string2bytesize (arg, &amp;fs) == -1) {</div><div class='del'>-                        fprintf (stderr, "invalid argument for file size "</div><div class='del'>-                                 "(%s)\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                rdd_config.file_size = fs;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case RDD_MIN_BS_KEY:</div><div class='del'>-        {</div><div class='del'>-                char *tmp = NULL;</div><div class='del'>-                long bs = 0;</div><div class='del'>-                bs = strtol (arg, &amp;tmp, 10);</div><div class='del'>-                if ((bs == LONG_MAX) || (bs == LONG_MIN) || (tmp &amp;&amp; *tmp)) {</div><div class='del'>-                        fprintf (stderr, "invalid argument for minimum block"</div><div class='del'>-                                 "size (%s)\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                rdd_config.min_bs = bs;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case RDD_MAX_BS_KEY:</div><div class='del'>-        {</div><div class='del'>-                char *tmp = NULL;</div><div class='del'>-                long bs = 0;</div><div class='del'>-                bs = strtol (arg, &amp;tmp, 10);</div><div class='del'>-                if ((bs == LONG_MAX) || (bs == LONG_MIN) || (tmp &amp;&amp; *tmp)) {</div><div class='del'>-                        fprintf (stderr, "invalid argument for maximum block"</div><div class='del'>-                                 "size (%s)\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                rdd_config.max_bs = bs;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case 'r':</div><div class='del'>-        {</div><div class='del'>-                char *tmp = NULL;</div><div class='del'>-                long iters = 0;</div><div class='del'>-                iters = strtol (arg, &amp;tmp, 10);</div><div class='del'>-                if ((iters == LONG_MAX) ||</div><div class='del'>-                    (iters == LONG_MIN) ||</div><div class='del'>-                    (tmp &amp;&amp; *tmp)) {</div><div class='del'>-                        fprintf (stderr, "invalid argument for iterations"</div><div class='del'>-                                 "(%s)\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                rdd_config.iters = iters;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case 'm':</div><div class='del'>-        {</div><div class='del'>-                char *tmp = NULL;</div><div class='del'>-                long max_ops = 0;</div><div class='del'>-                max_ops = strtol (arg, &amp;tmp, 10);</div><div class='del'>-                if ((max_ops == LONG_MAX) ||</div><div class='del'>-                    (max_ops == LONG_MIN) ||</div><div class='del'>-                    (tmp &amp;&amp; *tmp)) {</div><div class='del'>-                        fprintf (stderr, "invalid argument for max-ops"</div><div class='del'>-                                 "(%s)\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+    switch (key) {</div><div class='add'>+        case 'o': {</div><div class='add'>+            int len = 0;</div><div class='add'>+            len = strlen(arg);</div><div class='add'>+            if (len &gt; UNIX_PATH_MAX) {</div><div class='add'>+                fprintf(stderr, "output file name too long (%s)\n", arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                rdd_config.max_ops_per_seq = max_ops;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            strncpy(rdd_config.out_file.path, arg, len);</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='del'>-        case 't':</div><div class='del'>-        {</div><div class='del'>-                char *tmp = NULL;</div><div class='del'>-                long threads = 0;</div><div class='del'>-                threads = strtol (arg, &amp;tmp, 10);</div><div class='del'>-                if ((threads == LONG_MAX) ||</div><div class='del'>-                    (threads == LONG_MIN) ||</div><div class='del'>-                    (tmp &amp;&amp; *tmp)) {</div><div class='del'>-                        fprintf (stderr, "invalid argument for thread count"</div><div class='del'>-                                 "(%s)\n", arg);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+        case 'i': {</div><div class='add'>+            int len = 0;</div><div class='add'>+            len = strlen(arg);</div><div class='add'>+            if (len &gt; UNIX_PATH_MAX) {</div><div class='add'>+                fprintf(stderr, "input file name too long (%s)\n", arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            strncpy(rdd_config.in_file.path, arg, len);</div><div class='add'>+            rdd_config.in_file.path[len] = '\0';</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        case 'f': {</div><div class='add'>+            char *tmp = NULL;</div><div class='add'>+            unsigned long long fs = 0;</div><div class='add'>+            if (string2bytesize(arg, &amp;fs) == -1) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "invalid argument for file size "</div><div class='add'>+                        "(%s)\n",</div><div class='add'>+                        arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            rdd_config.file_size = fs;</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        case RDD_MIN_BS_KEY: {</div><div class='add'>+            char *tmp = NULL;</div><div class='add'>+            long bs = 0;</div><div class='add'>+            bs = strtol(arg, &amp;tmp, 10);</div><div class='add'>+            if ((bs == LONG_MAX) || (bs == LONG_MIN) || (tmp &amp;&amp; *tmp)) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "invalid argument for minimum block"</div><div class='add'>+                        "size (%s)\n",</div><div class='add'>+                        arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            rdd_config.min_bs = bs;</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        case RDD_MAX_BS_KEY: {</div><div class='add'>+            char *tmp = NULL;</div><div class='add'>+            long bs = 0;</div><div class='add'>+            bs = strtol(arg, &amp;tmp, 10);</div><div class='add'>+            if ((bs == LONG_MAX) || (bs == LONG_MIN) || (tmp &amp;&amp; *tmp)) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "invalid argument for maximum block"</div><div class='add'>+                        "size (%s)\n",</div><div class='add'>+                        arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            rdd_config.max_bs = bs;</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        case 'r': {</div><div class='add'>+            char *tmp = NULL;</div><div class='add'>+            long iters = 0;</div><div class='add'>+            iters = strtol(arg, &amp;tmp, 10);</div><div class='add'>+            if ((iters == LONG_MAX) || (iters == LONG_MIN) || (tmp &amp;&amp; *tmp)) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "invalid argument for iterations"</div><div class='add'>+                        "(%s)\n",</div><div class='add'>+                        arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            rdd_config.iters = iters;</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        case 'm': {</div><div class='add'>+            char *tmp = NULL;</div><div class='add'>+            long max_ops = 0;</div><div class='add'>+            max_ops = strtol(arg, &amp;tmp, 10);</div><div class='add'>+            if ((max_ops == LONG_MAX) || (max_ops == LONG_MIN) ||</div><div class='add'>+                (tmp &amp;&amp; *tmp)) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "invalid argument for max-ops"</div><div class='add'>+                        "(%s)\n",</div><div class='add'>+                        arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            rdd_config.max_ops_per_seq = max_ops;</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        case 't': {</div><div class='add'>+            char *tmp = NULL;</div><div class='add'>+            long threads = 0;</div><div class='add'>+            threads = strtol(arg, &amp;tmp, 10);</div><div class='add'>+            if ((threads == LONG_MAX) || (threads == LONG_MIN) ||</div><div class='add'>+                (tmp &amp;&amp; *tmp)) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "invalid argument for thread count"</div><div class='add'>+                        "(%s)\n",</div><div class='add'>+                        arg);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                rdd_config.thread_count = threads;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            rdd_config.thread_count = threads;</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_KEY_NO_ARGS:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_KEY_ARG:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_KEY_END:</div><div class='del'>-                if (_state-&gt;argc == 1) {</div><div class='del'>-                        argp_usage (_state);</div><div class='del'>-                }</div><div class='add'>+            if (_state-&gt;argc == 1) {</div><div class='add'>+                argp_usage(_state);</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-string2bytesize (const char *str, unsigned long long *n)</div><div class='add'>+string2bytesize(const char *str, unsigned long long *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long long value = 0ULL;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL)</div><div class='del'>-        {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++)</div><div class='del'>-        {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                {</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+    unsigned long long value = 0ULL;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='add'>+</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s)) {</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtoull (str, &amp;tail, 10);</div><div class='del'>-</div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-        {</div><div class='del'>-                return -1;</div><div class='add'>+        if (*s == '-') {</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (errno == 0)</div><div class='del'>-        {</div><div class='del'>-                errno = old_errno;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtoull(str, &amp;tail, 10);</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (errno == 0) {</div><div class='add'>+        errno = old_errno;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (tail[0] != '\0') {</div><div class='add'>+        if (strcasecmp(tail, UNIT_KB_STRING) == 0) {</div><div class='add'>+            value *= UNIT_KB;</div><div class='add'>+        } else if (strcasecmp(tail, UNIT_MB_STRING) == 0) {</div><div class='add'>+            value *= UNIT_MB;</div><div class='add'>+        } else if (strcasecmp(tail, UNIT_GB_STRING) == 0) {</div><div class='add'>+            value *= UNIT_GB;</div><div class='add'>+        } else if (strcasecmp(tail, UNIT_TB_STRING) == 0) {</div><div class='add'>+            value *= UNIT_TB;</div><div class='add'>+        } else if (strcasecmp(tail, UNIT_PB_STRING) == 0) {</div><div class='add'>+            value *= UNIT_PB;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-        {</div><div class='del'>-                if (strcasecmp (tail, UNIT_KB_STRING) == 0)</div><div class='del'>-                {</div><div class='del'>-                        value *= UNIT_KB;</div><div class='del'>-                }</div><div class='del'>-                else if (strcasecmp (tail, UNIT_MB_STRING) == 0)</div><div class='del'>-                {</div><div class='del'>-                        value *= UNIT_MB;</div><div class='del'>-                }</div><div class='del'>-                else if (strcasecmp (tail, UNIT_GB_STRING) == 0)</div><div class='del'>-                {</div><div class='del'>-                        value *= UNIT_GB;</div><div class='del'>-                }</div><div class='del'>-                else if (strcasecmp (tail, UNIT_TB_STRING) == 0)</div><div class='del'>-                {</div><div class='del'>-                        value *= UNIT_TB;</div><div class='del'>-                }</div><div class='del'>-                else if (strcasecmp (tail, UNIT_PB_STRING) == 0)</div><div class='del'>-                {</div><div class='del'>-                        value *= UNIT_PB;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                else</div><div class='del'>-                {</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+        else {</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct argp_option rdd_options[] = {</div><div class='del'>-        {"if", 'i', "INPUT_FILE", 0, "input-file"},</div><div class='del'>-        {"of", 'o', "OUTPUT_FILE", 0, "output-file"},</div><div class='del'>-        {"threads", 't', "COUNT", 0, "number of threads to spawn (defaults to 2)"},</div><div class='del'>-        {"min-bs", RDD_MIN_BS_KEY, "MIN_BLOCK_SIZE", 0,</div><div class='del'>-         "Minimum block size in bytes (defaults to 1024)"},</div><div class='del'>-        {"max-bs", RDD_MAX_BS_KEY, "MAX_BLOCK_SIZE", 0,</div><div class='del'>-         "Maximum block size in bytes (defaults to 4096)"},</div><div class='del'>-        {"iters", 'r', "ITERS", 0,</div><div class='del'>-         "Number of read-write sequences (defaults to 1000000)"},</div><div class='del'>-        {"max-ops", 'm', "MAXOPS", 0,</div><div class='del'>-         "maximum number of read-writes to be performed in a sequence (defaults to 1)"},</div><div class='del'>-        {"file-size", 'f', "FILESIZE", 0,</div><div class='del'>-         "the size of the file which will be created and upon it I/O will be done"</div><div class='del'>-         " (defaults to 100MB"},</div><div class='del'>-        {0, 0, 0, 0, 0}</div><div class='del'>-};</div><div class='add'>+    {"if", 'i', "INPUT_FILE", 0, "input-file"},</div><div class='add'>+    {"of", 'o', "OUTPUT_FILE", 0, "output-file"},</div><div class='add'>+    {"threads", 't', "COUNT", 0, "number of threads to spawn (defaults to 2)"},</div><div class='add'>+    {"min-bs", RDD_MIN_BS_KEY, "MIN_BLOCK_SIZE", 0,</div><div class='add'>+     "Minimum block size in bytes (defaults to 1024)"},</div><div class='add'>+    {"max-bs", RDD_MAX_BS_KEY, "MAX_BLOCK_SIZE", 0,</div><div class='add'>+     "Maximum block size in bytes (defaults to 4096)"},</div><div class='add'>+    {"iters", 'r', "ITERS", 0,</div><div class='add'>+     "Number of read-write sequences (defaults to 1000000)"},</div><div class='add'>+    {"max-ops", 'm', "MAXOPS", 0,</div><div class='add'>+     "maximum number of read-writes to be performed in a sequence (defaults to "</div><div class='add'>+     "1)"},</div><div class='add'>+    {"file-size", 'f', "FILESIZE", 0,</div><div class='add'>+     "the size of the file which will be created and upon it I/O will be done"</div><div class='add'>+     " (defaults to 100MB"},</div><div class='add'>+    {0, 0, 0, 0, 0}};</div><div class='ctx'> </div><div class='ctx'> static struct argp argp = {</div><div class='del'>-  rdd_options,</div><div class='del'>-  rdd_parse_opts,</div><div class='del'>-  "",</div><div class='del'>-  "random dd - tool to do a sequence of random block-sized continuous"</div><div class='del'>-  "read writes starting at a random offset"</div><div class='del'>-};</div><div class='del'>-</div><div class='add'>+    rdd_options, rdd_parse_opts, "",</div><div class='add'>+    "random dd - tool to do a sequence of random block-sized continuous"</div><div class='add'>+    "read writes starting at a random offset"};</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rdd_default_config (void)</div><div class='add'>+rdd_default_config(void)</div><div class='ctx'> {</div><div class='del'>-        char *tmp_path = "rdd.in";</div><div class='del'>-</div><div class='del'>-        rdd_config.thread_count = 2;</div><div class='del'>-        rdd_config.iters = 1000000;</div><div class='del'>-        rdd_config.max_bs = 4096;</div><div class='del'>-        rdd_config.min_bs = 1024;</div><div class='del'>-        rdd_config.in_file.fd = rdd_config.out_file.fd = -1;</div><div class='del'>-        rdd_config.max_ops_per_seq = 1;</div><div class='del'>-        strncpy (rdd_config.in_file.path, tmp_path, strlen (tmp_path));</div><div class='del'>-        rdd_config.file_size = 104857600;</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    char *tmp_path = "rdd.in";</div><div class='add'>+</div><div class='add'>+    rdd_config.thread_count = 2;</div><div class='add'>+    rdd_config.iters = 1000000;</div><div class='add'>+    rdd_config.max_bs = 4096;</div><div class='add'>+    rdd_config.min_bs = 1024;</div><div class='add'>+    rdd_config.in_file.fd = rdd_config.out_file.fd = -1;</div><div class='add'>+    rdd_config.max_ops_per_seq = 1;</div><div class='add'>+    strncpy(rdd_config.in_file.path, tmp_path, strlen(tmp_path));</div><div class='add'>+    rdd_config.file_size = 104857600;</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static char</div><div class='del'>-rdd_valid_config (void)</div><div class='add'>+rdd_valid_config(void)</div><div class='ctx'> {</div><div class='del'>-        char ret = 1;</div><div class='del'>-        int fd = -1;</div><div class='add'>+    char ret = 1;</div><div class='add'>+    int fd = -1;</div><div class='ctx'> </div><div class='del'>-        fd = open (rdd_config.in_file.path, O_RDONLY);</div><div class='del'>-        if (fd == -1 &amp;&amp; (errno != ENOENT)) {</div><div class='del'>-                fprintf (stderr, "open: (%s)", strerror (errno));</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        close (fd);</div><div class='del'>-</div><div class='del'>-        if (rdd_config.min_bs &gt; rdd_config.max_bs) {</div><div class='del'>-                fprintf (stderr, "minimum blocksize %ld is greater than the "</div><div class='del'>-                         "maximum blocksize %ld", rdd_config.min_bs,</div><div class='del'>-                         rdd_config.max_bs);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = open(rdd_config.in_file.path, O_RDONLY);</div><div class='add'>+    if (fd == -1 &amp;&amp; (errno != ENOENT)) {</div><div class='add'>+        fprintf(stderr, "open: (%s)", strerror(errno));</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    close(fd);</div><div class='add'>+</div><div class='add'>+    if (rdd_config.min_bs &gt; rdd_config.max_bs) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "minimum blocksize %ld is greater than the "</div><div class='add'>+                "maximum blocksize %ld",</div><div class='add'>+                rdd_config.min_bs, rdd_config.max_bs);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strlen (rdd_config.out_file.path) == 0) {</div><div class='del'>-                sprintf (rdd_config.out_file.path, "%s.rddout",</div><div class='del'>-                         rdd_config.in_file.path);</div><div class='del'>-        }</div><div class='add'>+    if (strlen(rdd_config.out_file.path) == 0) {</div><div class='add'>+        sprintf(rdd_config.out_file.path, "%s.rddout", rdd_config.in_file.path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void *</div><div class='del'>-rdd_read_write (void *arg)</div><div class='add'>+rdd_read_write(void *arg)</div><div class='ctx'> {</div><div class='del'>-        int i = 0, ret = 0;</div><div class='del'>-        size_t bs = 0;</div><div class='del'>-        off_t offset = 0;</div><div class='del'>-        long rand = 0;</div><div class='del'>-        long max_ops = 0;</div><div class='del'>-        char *buf = NULL;</div><div class='del'>-</div><div class='del'>-        buf = calloc (1, rdd_config.max_bs);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                fprintf (stderr, "calloc failed (%s)\n", strerror (errno));</div><div class='add'>+    int i = 0, ret = 0;</div><div class='add'>+    size_t bs = 0;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    long rand = 0;</div><div class='add'>+    long max_ops = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+</div><div class='add'>+    buf = calloc(1, rdd_config.max_bs);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        fprintf(stderr, "calloc failed (%s)\n", strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; rdd_config.iters; i++) {</div><div class='add'>+        pthread_mutex_lock(&amp;rdd_config.lock);</div><div class='add'>+        {</div><div class='add'>+            int bytes = 0;</div><div class='add'>+            rand = random();</div><div class='add'>+</div><div class='add'>+            if (rdd_config.min_bs == rdd_config.max_bs) {</div><div class='add'>+                bs = rdd_config.max_bs;</div><div class='add'>+            } else {</div><div class='add'>+                bs = rdd_config.min_bs +</div><div class='add'>+                     (rand % (rdd_config.max_bs - rdd_config.min_bs));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            offset = rand % rdd_config.in_file.st.st_size;</div><div class='add'>+            max_ops = rand % rdd_config.max_ops_per_seq;</div><div class='add'>+            if (!max_ops) {</div><div class='add'>+                max_ops++;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = lseek(rdd_config.in_file.fd, offset, SEEK_SET);</div><div class='add'>+            if (ret != offset) {</div><div class='add'>+                fprintf(stderr, "lseek failed (%s)\n", strerror(errno));</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; rdd_config.iters; i++)</div><div class='del'>-        {</div><div class='del'>-                pthread_mutex_lock (&amp;rdd_config.lock);</div><div class='del'>-                {</div><div class='del'>-                        int bytes = 0;</div><div class='del'>-                        rand = random ();</div><div class='del'>-</div><div class='del'>-                        if (rdd_config.min_bs == rdd_config.max_bs) {</div><div class='del'>-                                bs = rdd_config.max_bs;</div><div class='del'>-                        } else {</div><div class='del'>-                                bs = rdd_config.min_bs +</div><div class='del'>-                                        (rand %</div><div class='del'>-                                         (rdd_config.max_bs -</div><div class='del'>-                                          rdd_config.min_bs));</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        offset = rand % rdd_config.in_file.st.st_size;</div><div class='del'>-                        max_ops = rand % rdd_config.max_ops_per_seq;</div><div class='del'>-                        if (!max_ops) {</div><div class='del'>-                                max_ops ++;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = lseek (rdd_config.in_file.fd, offset, SEEK_SET);</div><div class='del'>-                        if (ret != offset) {</div><div class='del'>-                                fprintf (stderr, "lseek failed (%s)\n",</div><div class='del'>-                                         strerror (errno));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = lseek (rdd_config.out_file.fd, offset, SEEK_SET);</div><div class='del'>-                        if (ret != offset) {</div><div class='del'>-                                fprintf (stderr, "lseek failed (%s)\n",</div><div class='del'>-                                         strerror (errno));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        while (max_ops--)</div><div class='del'>-                        {</div><div class='del'>-                                bytes = read (rdd_config.in_file.fd, buf, bs);</div><div class='del'>-                                if (!bytes) {</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (bytes == -1) {</div><div class='del'>-                                        fprintf (stderr, "read failed (%s)\n",</div><div class='del'>-                                                 strerror (errno));</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (write (rdd_config.out_file.fd, buf, bytes)</div><div class='del'>-                                    != bytes) {</div><div class='del'>-                                        fprintf (stderr, "write failed (%s)\n",</div><div class='del'>-                                                 strerror (errno));</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            ret = lseek(rdd_config.out_file.fd, offset, SEEK_SET);</div><div class='add'>+            if (ret != offset) {</div><div class='add'>+                fprintf(stderr, "lseek failed (%s)\n", strerror(errno));</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            while (max_ops--) {</div><div class='add'>+                bytes = read(rdd_config.in_file.fd, buf, bs);</div><div class='add'>+                if (!bytes) {</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;rdd_config.lock);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='add'>+</div><div class='add'>+                if (bytes == -1) {</div><div class='add'>+                    fprintf(stderr, "read failed (%s)\n", strerror(errno));</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto unlock;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                if (write(rdd_config.out_file.fd, buf, bytes) != bytes) {</div><div class='add'>+                    fprintf(stderr, "write failed (%s)\n", strerror(errno));</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto unlock;</div><div class='ctx'>                 }</div><div class='del'>-                ret = 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;rdd_config.lock);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        free (buf);</div><div class='del'>-        pthread_barrier_wait (&amp;rdd_config.barrier);</div><div class='add'>+    free(buf);</div><div class='add'>+    pthread_barrier_wait(&amp;rdd_config.barrier);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cleanup (void)</div><div class='add'>+cleanup(void)</div><div class='ctx'> {</div><div class='del'>-        close (rdd_config.in_file.fd);</div><div class='del'>-        close (rdd_config.out_file.fd);</div><div class='del'>-        rdd_config.in_file.fd = rdd_config.out_file.fd = -1;</div><div class='add'>+    close(rdd_config.in_file.fd);</div><div class='add'>+    close(rdd_config.out_file.fd);</div><div class='add'>+    rdd_config.in_file.fd = rdd_config.out_file.fd = -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-check_and_create (void)</div><div class='add'>+check_and_create(void)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char buf[4096] = {0,};</div><div class='del'>-        struct stat stbuf = {0,};</div><div class='del'>-        int  fd[2] = {-1,};</div><div class='del'>-        size_t  total_size = -1;</div><div class='del'>-</div><div class='del'>-        total_size = rdd_config.file_size;</div><div class='del'>-</div><div class='del'>-        ret = stat (rdd_config.in_file.path, &amp;stbuf);</div><div class='del'>-        if (ret == -1 &amp;&amp; (errno != ENOENT))</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char buf[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int fd[2] = {</div><div class='add'>+        -1,</div><div class='add'>+    };</div><div class='add'>+    size_t total_size = -1;</div><div class='add'>+</div><div class='add'>+    total_size = rdd_config.file_size;</div><div class='add'>+</div><div class='add'>+    ret = stat(rdd_config.in_file.path, &amp;stbuf);</div><div class='add'>+    if (ret == -1 &amp;&amp; (errno != ENOENT))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fd[1] = open(rdd_config.in_file.path, O_CREAT | O_WRONLY | O_TRUNC);</div><div class='add'>+    if (fd[1] == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fd[0] = open("/dev/urandom", O_RDONLY);</div><div class='add'>+    if (fd[0] == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    while (total_size &gt; 0) {</div><div class='add'>+        if (total_size &gt;= 4096) {</div><div class='add'>+            ret = read(fd[0], buf, 4096);</div><div class='add'>+            if (ret == -1)</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        fd[1] = open (rdd_config.in_file.path, O_CREAT | O_WRONLY | O_TRUNC);</div><div class='del'>-        if (fd[1] == -1)</div><div class='add'>+            ret = write(fd[1], buf, 4096);</div><div class='add'>+            if (ret == -1)</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        fd[0] = open ("/dev/urandom", O_RDONLY);</div><div class='del'>-        if (fd[0] == -1)</div><div class='add'>+            total_size = total_size - 4096;</div><div class='add'>+        } else {</div><div class='add'>+            ret = read(fd[0], buf, total_size);</div><div class='add'>+            if (ret == -1)</div><div class='ctx'>                 goto out;</div><div class='del'>-</div><div class='del'>-        while (total_size &gt; 0) {</div><div class='del'>-                if (total_size &gt;= 4096) {</div><div class='del'>-                        ret = read (fd[0], buf, 4096);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = write (fd[1], buf, 4096);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                        total_size = total_size - 4096;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = read (fd[0], buf, total_size);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = write (fd[1], buf, total_size);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                        total_size = total_size - total_size;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+            ret = write(fd[1], buf, total_size);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                goto out;</div><div class='add'>+            total_size = total_size - total_size;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd[0] &gt; 0)</div><div class='del'>-                close (fd[0]);</div><div class='del'>-        if (fd[1] &gt; 0)</div><div class='del'>-                close (fd[1]);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd[0] &gt; 0)</div><div class='add'>+        close(fd[0]);</div><div class='add'>+    if (fd[1] &gt; 0)</div><div class='add'>+        close(fd[1]);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rdd_spawn_threads (void)</div><div class='add'>+rdd_spawn_threads(void)</div><div class='ctx'> {</div><div class='del'>-        int i = 0, ret = -1, fd = -1;</div><div class='del'>-        char buf[4096];</div><div class='del'>-</div><div class='del'>-        ret = check_and_create ();</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fd = open (rdd_config.in_file.path, O_RDONLY);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot open %s (%s)\n",</div><div class='del'>-                         rdd_config.in_file.path, strerror (errno));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = fstat (fd, &amp;rdd_config.in_file.st);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                close (fd);</div><div class='del'>-                fprintf (stderr, "cannot stat %s (%s)\n",</div><div class='del'>-                         rdd_config.in_file.path, strerror (errno));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        rdd_config.in_file.fd = fd;</div><div class='del'>-</div><div class='del'>-        fd = open (rdd_config.out_file.path, O_WRONLY | O_CREAT | O_TRUNC,</div><div class='del'>-                   S_IRWXU | S_IROTH);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                close (rdd_config.in_file.fd);</div><div class='del'>-                rdd_config.in_file.fd = -1;</div><div class='del'>-                fprintf (stderr, "cannot open %s (%s)\n",</div><div class='del'>-                         rdd_config.out_file.path, strerror (errno));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        rdd_config.out_file.fd = fd;</div><div class='del'>-</div><div class='del'>-        while ((ret = read (rdd_config.in_file.fd, buf, 4096)) &gt; 0) {</div><div class='del'>-                if (write (rdd_config.out_file.fd, buf, ret) != ret) {</div><div class='del'>-                        fprintf (stderr, "write failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        cleanup ();</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rdd_config.threads = calloc (rdd_config.thread_count,</div><div class='del'>-                                     sizeof (pthread_t));</div><div class='del'>-        if (rdd_config.threads == NULL) {</div><div class='del'>-                fprintf (stderr, "calloc() failed (%s)\n", strerror (errno));</div><div class='del'>-</div><div class='del'>-                ret = -1;</div><div class='del'>-                cleanup ();</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pthread_barrier_init (&amp;rdd_config.barrier, NULL,</div><div class='del'>-                                    rdd_config.thread_count + 1);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "pthread_barrier_init() failed (%s)\n",</div><div class='del'>-                         strerror (ret));</div><div class='del'>-</div><div class='del'>-                free (rdd_config.threads);</div><div class='del'>-                cleanup ();</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    int i = 0, ret = -1, fd = -1;</div><div class='add'>+    char buf[4096];</div><div class='add'>+</div><div class='add'>+    ret = check_and_create();</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fd = open(rdd_config.in_file.path, O_RDONLY);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot open %s (%s)\n", rdd_config.in_file.path,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = fstat(fd, &amp;rdd_config.in_file.st);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        close(fd);</div><div class='add'>+        fprintf(stderr, "cannot stat %s (%s)\n", rdd_config.in_file.path,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    rdd_config.in_file.fd = fd;</div><div class='add'>+</div><div class='add'>+    fd = open(rdd_config.out_file.path, O_WRONLY | O_CREAT | O_TRUNC,</div><div class='add'>+              S_IRWXU | S_IROTH);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        close(rdd_config.in_file.fd);</div><div class='add'>+        rdd_config.in_file.fd = -1;</div><div class='add'>+        fprintf(stderr, "cannot open %s (%s)\n", rdd_config.out_file.path,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    rdd_config.out_file.fd = fd;</div><div class='add'>+</div><div class='add'>+    while ((ret = read(rdd_config.in_file.fd, buf, 4096)) &gt; 0) {</div><div class='add'>+        if (write(rdd_config.out_file.fd, buf, ret) != ret) {</div><div class='add'>+            fprintf(stderr, "write failed (%s)\n", strerror(errno));</div><div class='add'>+            cleanup();</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_init (&amp;rdd_config.lock, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rdd_config.threads = calloc(rdd_config.thread_count, sizeof(pthread_t));</div><div class='add'>+    if (rdd_config.threads == NULL) {</div><div class='add'>+        fprintf(stderr, "calloc() failed (%s)\n", strerror(errno));</div><div class='add'>+</div><div class='add'>+        ret = -1;</div><div class='add'>+        cleanup();</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_barrier_init(&amp;rdd_config.barrier, NULL,</div><div class='add'>+                               rdd_config.thread_count + 1);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "pthread_barrier_init() failed (%s)\n", strerror(ret));</div><div class='add'>+</div><div class='add'>+        free(rdd_config.threads);</div><div class='add'>+        cleanup();</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_init(&amp;rdd_config.lock, NULL);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "pthread_mutex_init() failed (%s)\n", strerror(ret));</div><div class='add'>+</div><div class='add'>+        free(rdd_config.threads);</div><div class='add'>+        pthread_barrier_destroy(&amp;rdd_config.barrier);</div><div class='add'>+        cleanup();</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; rdd_config.thread_count; i++) {</div><div class='add'>+        ret = pthread_create(&amp;rdd_config.threads[i], NULL, rdd_read_write,</div><div class='add'>+                             NULL);</div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "pthread_mutex_init() failed (%s)\n",</div><div class='del'>-                         strerror (ret));</div><div class='del'>-</div><div class='del'>-                free (rdd_config.threads);</div><div class='del'>-                pthread_barrier_destroy (&amp;rdd_config.barrier);</div><div class='del'>-                cleanup ();</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; rdd_config.thread_count; i++)</div><div class='del'>-        {</div><div class='del'>-                ret = pthread_create (&amp;rdd_config.threads[i], NULL,</div><div class='del'>-                                      rdd_read_write, NULL);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        fprintf (stderr, "pthread_create failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        exit (1);</div><div class='del'>-                }</div><div class='add'>+            fprintf(stderr, "pthread_create failed (%s)\n", strerror(errno));</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rdd_wait_for_completion (void)</div><div class='add'>+rdd_wait_for_completion(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_barrier_wait (&amp;rdd_config.barrier);</div><div class='add'>+    pthread_barrier_wait(&amp;rdd_config.barrier);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        rdd_default_config ();</div><div class='add'>+    rdd_default_config();</div><div class='ctx'> </div><div class='del'>-        ret = argp_parse (&amp;argp, argc, argv, 0, 0, NULL);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "%s: argp_parse() failed\n", argv[0]);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = argp_parse(&amp;argp, argc, argv, 0, 0, NULL);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "%s: argp_parse() failed\n", argv[0]);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rdd_valid_config ()) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "%s: configuration validation failed\n",</div><div class='del'>-                         argv[0]);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!rdd_valid_config()) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "%s: configuration validation failed\n", argv[0]);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rdd_spawn_threads ();</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "%s: spawning threads failed\n", argv[0]);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = rdd_spawn_threads();</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "%s: spawning threads failed\n", argv[0]);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rdd_wait_for_completion ();</div><div class='add'>+    rdd_wait_for_completion();</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/extras/create_new_xlator/new-xlator-tmpl.c b/extras/create_new_xlator/new-xlator-tmpl.c<br/>index 474144c1c81..caa10b374d1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/create_new_xlator/new-xlator-tmpl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/create_new_xlator/new-xlator-tmpl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/create_new_xlator/new-xlator-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/create_new_xlator/new-xlator-tmpl.c</a></div><div class='hunk'>@@ -1,37 +1,32 @@</div><div class='ctx'> #pragma fragment CBK_TEMPLATE</div><div class='del'>-int32_t</div><div class='del'>-@FOP_PREFIX@_@NAME@_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, @UNWIND_PARAMS@)</div><div class='add'>+int32_t @FOP_PREFIX @_ @NAME</div><div class='add'>+    @_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+          int32_t op_errno, @UNWIND_PARAMS @)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, op_ret, op_errno,</div><div class='del'>-                             @UNWIND_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, op_ret, op_errno, @UNWIND_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment COMMENT</div><div class='del'>-If you are generating the leaf xlators, remove the STACK_WIND</div><div class='del'>-and replace the @ERROR_ARGS@ to @UNWIND_ARGS@ if necessary</div><div class='add'>+If you are generating the leaf xlators, remove the STACK_WIND and replace the</div><div class='add'>+    @ERROR_ARGS @to @UNWIND_ARGS @ if necessary</div><div class='ctx'> </div><div class='ctx'> #pragma fragment FOP_TEMPLATE</div><div class='del'>-int32_t</div><div class='del'>-@FOP_PREFIX@_@NAME@ (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        @WIND_PARAMS@)</div><div class='add'>+        int32_t @FOP_PREFIX @_ @NAME</div><div class='add'>+    @(call_frame_t *frame, xlator_t *this, @WIND_PARAMS @)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, @FOP_PREFIX@_@NAME@_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;@NAME@,</div><div class='del'>-                    @WIND_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, @FOP_PREFIX @_ @NAME @_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;@NAME @, @WIND_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, -1, errno,</div><div class='del'>-                             @ERROR_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, -1, errno, @ERROR_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment FUNC_TEMPLATE</div><div class='del'>-@RET_TYPE@</div><div class='del'>-@FOP_PREFIX@_@NAME@ (@FUNC_PARAMS@)</div><div class='add'>+@RET_TYPE @ @FOP_PREFIX @_ @NAME @(@FUNC_PARAMS @)</div><div class='ctx'> {</div><div class='del'>-        return @RET_VAR@;</div><div class='add'>+    return @RET_VAR @;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment CP</div><div class='hunk'>@@ -50,77 +45,71 @@ err:</div><div class='ctx'> </div><div class='ctx'> #pragma fragment XLATOR_METHODS</div><div class='ctx'> </div><div class='del'>-static int32_t</div><div class='del'>-@FOP_PREFIX@_init (xlator_t *this)</div><div class='add'>+static int32_t @FOP_PREFIX @_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-@FOP_PREFIX@_fini (xlator_t *this)</div><div class='add'>+static void @FOP_PREFIX @_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t</div><div class='del'>-@FOP_PREFIX@_reconfigure (xlator_t *this, dict_t *dict)</div><div class='add'>+static int32_t @FOP_PREFIX @_reconfigure(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-@FOP_PREFIX@_notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+static int @FOP_PREFIX @_notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        return default_notify (this, event, data);</div><div class='add'>+    return default_notify(this, event, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t</div><div class='del'>-@FOP_PREFIX@_mem_acct_init (xlator_t *this)</div><div class='add'>+static int32_t @FOP_PREFIX @_mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_@FOP_PREFIX@_mt_end + 1);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_ @FOP_PREFIX @_mt_end + 1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t</div><div class='del'>-@FOP_PREFIX@_dump_metrics (xlator_t *this, int fd)</div><div class='add'>+static int32_t @FOP_PREFIX @_dump_metrics(xlator_t *this, int fd)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct volume_options @FOP_PREFIX@_options[] = {</div><div class='del'>-        /*{ .key  = {""},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "",</div><div class='del'>-          .op_version = {GD_OP_VERSION_},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC | OPT_FLAG_CLIENT_OPT,</div><div class='del'>-          .tags = {""},</div><div class='del'>-          .description = "",</div><div class='del'>-          .category = GF_EXPERIMENTAL,</div><div class='del'>-        },</div><div class='del'>-        { .key = {NULL} },</div><div class='del'>-        */</div><div class='add'>+struct volume_options @FOP_PREFIX @_options[] = {</div><div class='add'>+    /*{ .key  = {""},</div><div class='add'>+      .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+      .default_value = "",</div><div class='add'>+      .op_version = {GD_OP_VERSION_},</div><div class='add'>+      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC | OPT_FLAG_CLIENT_OPT,</div><div class='add'>+      .tags = {""},</div><div class='add'>+      .description = "",</div><div class='add'>+      .category = GF_EXPERIMENTAL,</div><div class='add'>+    },</div><div class='add'>+    { .key = {NULL} },</div><div class='add'>+    */</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> xlator_api_t xlator_api = {</div><div class='del'>-        .init          = @FOP_PREFIX@_init,</div><div class='del'>-        .fini          = @FOP_PREFIX@_fini,</div><div class='del'>-        .notify        = @FOP_PREFIX@_notify,</div><div class='del'>-        .reconfigure   = @FOP_PREFIX@_reconfigure,</div><div class='del'>-        .mem_acct_init = @FOP_PREFIX@_mem_acct_init,</div><div class='del'>-        .dump_metrics  = @FOP_PREFIX@_dump_metrics,</div><div class='del'>-        .op_version    = {GD_OP_VERSION_},</div><div class='del'>-        .dumpops       = &amp;@FOP_PREFIX@_dumpops,</div><div class='del'>-        .fops          = &amp;@FOP_PREFIX@_fops,</div><div class='del'>-        .cbks          = &amp;@FOP_PREFIX@_cbks,</div><div class='del'>-        .options       = @FOP_PREFIX@_options,</div><div class='del'>-        .identifier    = "@XL_NAME@",</div><div class='del'>-        .category      = GF_EXPERIMENTAL,</div><div class='add'>+    .init = @FOP_PREFIX @_init,</div><div class='add'>+    .fini = @FOP_PREFIX @_fini,</div><div class='add'>+    .notify = @FOP_PREFIX @_notify,</div><div class='add'>+    .reconfigure = @FOP_PREFIX @_reconfigure,</div><div class='add'>+    .mem_acct_init = @FOP_PREFIX @_mem_acct_init,</div><div class='add'>+    .dump_metrics = @FOP_PREFIX @_dump_metrics,</div><div class='add'>+    .op_version = {GD_OP_VERSION_},</div><div class='add'>+    .dumpops = &amp;@FOP_PREFIX @_dumpops,</div><div class='add'>+    .fops = &amp;@FOP_PREFIX @_fops,</div><div class='add'>+    .cbks = &amp;@FOP_PREFIX @_cbks,</div><div class='add'>+    .options = @FOP_PREFIX @_options,</div><div class='add'>+    .identifier = "@XL_NAME@",</div><div class='add'>+    .category = GF_EXPERIMENTAL,</div><div class='ctx'> };</div><div class='ctx'> #pragma fragment HEADER_FMT</div><div class='del'>-#ifndef __@HFL_NAME@_H__</div><div class='del'>-#define __@HFL_NAME@_H__</div><div class='add'>+#ifndef __ @HFL_NAME @_H__</div><div class='add'>+#define __ @HFL_NAME @_H__</div><div class='ctx'> </div><div class='ctx'> #include "@XL_NAME@-mem-types.h"</div><div class='ctx'> #include "@XL_NAME@-messages.h"</div><div class='hunk'>@@ -131,21 +120,21 @@ xlator_api_t xlator_api = {</div><div class='ctx'> #endif /* __@HFL_NAME@_H__ */</div><div class='ctx'> </div><div class='ctx'> #pragma fragment MEM_HEADER_FMT</div><div class='del'>-#ifndef __@HFL_NAME@_H__</div><div class='del'>-#define __@HFL_NAME@_H__</div><div class='add'>+#ifndef __ @HFL_NAME @_H__</div><div class='add'>+#define __ @HFL_NAME @_H__</div><div class='ctx'> </div><div class='ctx'> #include "mem-types.h"</div><div class='ctx'> </div><div class='ctx'> enum gf_mdc_mem_types_ {</div><div class='del'>-        gf_@FOP_PREFIX@_mt_   = gf_common_mt_end + 1,</div><div class='del'>-        gf_@FOP_PREFIX@_mt_end</div><div class='add'>+    gf_ @FOP_PREFIX @_mt_ = gf_common_mt_end + 1,</div><div class='add'>+    gf_ @FOP_PREFIX @_mt_end</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> #endif /* __@HFL_NAME@_H__ */</div><div class='ctx'> </div><div class='ctx'> #pragma fragment MSG_HEADER_FMT</div><div class='del'>-#ifndef __@HFL_NAME@_H__</div><div class='del'>-#define __@HFL_NAME@_H__</div><div class='add'>+#ifndef __ @HFL_NAME @_H__</div><div class='add'>+#define __ @HFL_NAME @_H__</div><div class='ctx'> </div><div class='ctx'> #include "glfs-message-id.h"</div><div class='ctx'> </div><div class='hunk'>@@ -159,8 +148,6 @@ enum gf_mdc_mem_types_ {</div><div class='ctx'>  * glfs-message-id.h.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-GLFS_MSGID(@FOP_PREFIX@,</div><div class='del'>-        @FOP_PREFIX@_MSG_NO_MEMORY</div><div class='del'>-);</div><div class='add'>+GLFS_MSGID(@FOP_PREFIX @, @FOP_PREFIX @_MSG_NO_MEMORY);</div><div class='ctx'> </div><div class='ctx'> #endif /* __@HFL_NAME@_H__ */</div><div class='head'>diff --git a/extras/geo-rep/gsync-sync-gfid.c b/extras/geo-rep/gsync-sync-gfid.c<br/>index 4f4fde94e40..b0c5d31ba0b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/geo-rep/gsync-sync-gfid.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/geo-rep/gsync-sync-gfid.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/geo-rep/gsync-sync-gfid.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/geo-rep/gsync-sync-gfid.c</a></div><div class='hunk'>@@ -15,96 +15,95 @@</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifndef GF_FUSE_AUX_GFID_HEAL</div><div class='del'>-#define GF_FUSE_AUX_GFID_HEAL    "glusterfs.gfid.heal"</div><div class='add'>+#define GF_FUSE_AUX_GFID_HEAL "glusterfs.gfid.heal"</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define GLFS_LINE_MAX           (PATH_MAX + (2 * UUID_CANONICAL_FORM_LEN))</div><div class='add'>+#define GLFS_LINE_MAX (PATH_MAX + (2 * UUID_CANONICAL_FORM_LEN))</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char *file                = NULL;</div><div class='del'>-        char *tmp = NULL;</div><div class='del'>-        char *tmp1 = NULL;</div><div class='del'>-        char *parent_dir = NULL;</div><div class='del'>-        char *gfid                = NULL;</div><div class='del'>-        char *bname = NULL;</div><div class='del'>-        int   ret                 = -1;</div><div class='del'>-        int   len                 = 0;</div><div class='del'>-        FILE *fp                  = NULL;</div><div class='del'>-        char  line[GLFS_LINE_MAX] = {0,};</div><div class='del'>-        char *path = NULL;</div><div class='del'>-        void  *blob               = NULL;</div><div class='del'>-        void  *tmp_blob               = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 2) {</div><div class='del'>-                /* each line in the file has the following format</div><div class='del'>-                 * uuid-in-canonical-form path-relative-to-gluster-mount.</div><div class='del'>-                 * Both uuid and relative path are from master mount.</div><div class='del'>-                 */</div><div class='del'>-                fprintf (stderr, "usage: %s &lt;file-of-paths-to-be-synced&gt;\n",</div><div class='del'>-                         argv[0]);</div><div class='del'>-                goto out;</div><div class='add'>+    char *file = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *tmp1 = NULL;</div><div class='add'>+    char *parent_dir = NULL;</div><div class='add'>+    char *gfid = NULL;</div><div class='add'>+    char *bname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int len = 0;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    char line[GLFS_LINE_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    void *blob = NULL;</div><div class='add'>+    void *tmp_blob = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 2) {</div><div class='add'>+        /* each line in the file has the following format</div><div class='add'>+         * uuid-in-canonical-form path-relative-to-gluster-mount.</div><div class='add'>+         * Both uuid and relative path are from master mount.</div><div class='add'>+         */</div><div class='add'>+        fprintf(stderr, "usage: %s &lt;file-of-paths-to-be-synced&gt;\n", argv[0]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    file = argv[1];</div><div class='add'>+</div><div class='add'>+    fp = fopen(file, "r");</div><div class='add'>+    if (fp == NULL) {</div><div class='add'>+        fprintf(stderr, "cannot open %s for reading (%s)\n", file,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (fgets(line, GLFS_LINE_MAX, fp) != NULL) {</div><div class='add'>+        tmp = line;</div><div class='add'>+        path = gfid = line;</div><div class='add'>+</div><div class='add'>+        path += UUID_CANONICAL_FORM_LEN + 1;</div><div class='add'>+</div><div class='add'>+        while (isspace(*path))</div><div class='add'>+            path++;</div><div class='add'>+</div><div class='add'>+        len = strlen(line);</div><div class='add'>+        if ((len &lt; GLFS_LINE_MAX) &amp;&amp; (line[len - 1] == '\n'))</div><div class='add'>+            line[len - 1] = '\0';</div><div class='add'>+</div><div class='add'>+        line[UUID_CANONICAL_FORM_LEN] = '\0';</div><div class='add'>+</div><div class='add'>+        tmp = strdup(path);</div><div class='add'>+        tmp1 = strdup(path);</div><div class='add'>+        parent_dir = dirname(tmp);</div><div class='add'>+        bname = basename(tmp1);</div><div class='add'>+</div><div class='add'>+        /* gfid + '\0' + bname + '\0' */</div><div class='add'>+        len = UUID_CANONICAL_FORM_LEN + 1 + strlen(bname) + 1;</div><div class='add'>+</div><div class='add'>+        blob = malloc(len);</div><div class='add'>+</div><div class='add'>+        memcpy(blob, gfid, UUID_CANONICAL_FORM_LEN);</div><div class='add'>+</div><div class='add'>+        tmp_blob = blob + UUID_CANONICAL_FORM_LEN + 1;</div><div class='add'>+</div><div class='add'>+        memcpy(tmp_blob, bname, strlen(bname));</div><div class='add'>+</div><div class='add'>+        ret = sys_lsetxattr(parent_dir, GF_FUSE_AUX_GFID_HEAL, blob, len, 0);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "setxattr on %s/%s failed (%s)\n", parent_dir,</div><div class='add'>+                    bname, strerror(errno));</div><div class='ctx'>         }</div><div class='add'>+        memset(line, 0, GLFS_LINE_MAX);</div><div class='ctx'> </div><div class='del'>-        file = argv[1];</div><div class='add'>+        free(blob);</div><div class='add'>+        free(tmp);</div><div class='add'>+        free(tmp1);</div><div class='add'>+        blob = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fp = fopen (file, "r");</div><div class='del'>-        if (fp == NULL) {</div><div class='del'>-                fprintf (stderr, "cannot open %s for reading (%s)\n",</div><div class='del'>-                         file, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (fgets (line, GLFS_LINE_MAX, fp) != NULL) {</div><div class='del'>-                tmp = line;</div><div class='del'>-                path = gfid = line;</div><div class='del'>-</div><div class='del'>-                path += UUID_CANONICAL_FORM_LEN + 1;</div><div class='del'>-</div><div class='del'>-                while(isspace (*path))</div><div class='del'>-                        path++;</div><div class='del'>-</div><div class='del'>-                len = strlen (line);</div><div class='del'>-                if ((len &lt; GLFS_LINE_MAX) &amp;&amp;</div><div class='del'>-                    (line[len - 1] == '\n'))</div><div class='del'>-                        line[len - 1] = '\0';</div><div class='del'>-</div><div class='del'>-                line[UUID_CANONICAL_FORM_LEN] = '\0';</div><div class='del'>-</div><div class='del'>-                tmp = strdup (path);</div><div class='del'>-                tmp1 = strdup (path);</div><div class='del'>-                parent_dir = dirname (tmp);</div><div class='del'>-                bname = basename (tmp1);</div><div class='del'>-</div><div class='del'>-                /* gfid + '\0' + bname + '\0' */</div><div class='del'>-                len = UUID_CANONICAL_FORM_LEN + 1 + strlen (bname) + 1;</div><div class='del'>-</div><div class='del'>-                blob = malloc (len);</div><div class='del'>-</div><div class='del'>-                memcpy (blob, gfid, UUID_CANONICAL_FORM_LEN);</div><div class='del'>-</div><div class='del'>-                tmp_blob = blob + UUID_CANONICAL_FORM_LEN + 1;</div><div class='del'>-</div><div class='del'>-                memcpy (tmp_blob, bname, strlen (bname));</div><div class='del'>-</div><div class='del'>-                ret = sys_lsetxattr (parent_dir, GF_FUSE_AUX_GFID_HEAL, </div><div class='del'>-                                blob, len, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "setxattr on %s/%s failed (%s)\n",</div><div class='del'>-                                 parent_dir, bname, strerror (errno));</div><div class='del'>-                }</div><div class='del'>-                memset (line, 0, GLFS_LINE_MAX);</div><div class='del'>-</div><div class='del'>-                free (blob);</div><div class='del'>-                free (tmp); free (tmp1);</div><div class='del'>-                blob = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose(fp);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/extras/stripe-merge.c b/extras/stripe-merge.c<br/>index 332690eea66..e013a6e6e8a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/stripe-merge.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/stripe-merge.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/stripe-merge.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/stripe-merge.c</a></div><div class='hunk'>@@ -40,33 +40,33 @@</div><div class='ctx'> #define INVALID_MODE UINT32_MAX</div><div class='ctx'> </div><div class='ctx'> struct file_stripe_info {</div><div class='del'>-	int stripe_count;</div><div class='del'>-	int stripe_size;</div><div class='del'>-	int coalesce;</div><div class='del'>-	mode_t mode;</div><div class='del'>-	int fd[0];</div><div class='add'>+    int stripe_count;</div><div class='add'>+    int stripe_size;</div><div class='add'>+    int coalesce;</div><div class='add'>+    mode_t mode;</div><div class='add'>+    int fd[0];</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static int close_files(struct file_stripe_info *);</div><div class='add'>+static int</div><div class='add'>+close_files(struct file_stripe_info *);</div><div class='ctx'> </div><div class='del'>-static struct</div><div class='del'>-file_stripe_info *alloc_file_stripe_info(int count)</div><div class='add'>+static struct file_stripe_info *</div><div class='add'>+alloc_file_stripe_info(int count)</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	struct file_stripe_info *finfo;</div><div class='add'>+    int i;</div><div class='add'>+    struct file_stripe_info *finfo;</div><div class='ctx'> </div><div class='del'>-	finfo = calloc(1, sizeof(struct file_stripe_info) +</div><div class='del'>-		(sizeof(int) * count));</div><div class='del'>-	if (!finfo)</div><div class='del'>-		return NULL;</div><div class='add'>+    finfo = calloc(1, sizeof(struct file_stripe_info) + (sizeof(int) * count));</div><div class='add'>+    if (!finfo)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; count; i++)</div><div class='del'>-		finfo-&gt;fd[i] = INVALID_FD;</div><div class='add'>+    for (i = 0; i &lt; count; i++)</div><div class='add'>+        finfo-&gt;fd[i] = INVALID_FD;</div><div class='ctx'> </div><div class='del'>-	finfo-&gt;mode = INVALID_MODE;</div><div class='del'>-	finfo-&gt;coalesce = INVALID_FD;</div><div class='add'>+    finfo-&gt;mode = INVALID_MODE;</div><div class='add'>+    finfo-&gt;coalesce = INVALID_FD;</div><div class='ctx'> </div><div class='del'>-	return finfo;</div><div class='add'>+    return finfo;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -77,39 +77,39 @@ file_stripe_info *alloc_file_stripe_info(int count)</div><div class='ctx'> static int</div><div class='ctx'> get_stripe_attr_name(const char *path, const char *pattern, char **attrname)</div><div class='ctx'> {</div><div class='del'>-	char attrbuf[4096];</div><div class='del'>-	char *ptr, *match = NULL;</div><div class='del'>-	int len, r, match_count = 0;</div><div class='del'>-</div><div class='del'>-	if (!path || !pattern || !attrname)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-	len = listxattr(path, attrbuf, sizeof(attrbuf));</div><div class='del'>-	if (len &lt; 0)</div><div class='del'>-		return len;</div><div class='del'>-</div><div class='del'>-	ptr = attrbuf;</div><div class='del'>-	while (ptr) {</div><div class='del'>-		r = fnmatch(pattern, ptr, 0);</div><div class='del'>-		if (!r) {</div><div class='del'>-			if (!match)</div><div class='del'>-				match = ptr;</div><div class='del'>-			match_count++;</div><div class='del'>-		} else if (r != FNM_NOMATCH) {</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		len -= strlen(ptr) + 1;</div><div class='del'>-		if (len &gt; 0)</div><div class='del'>-			ptr += strlen(ptr) + 1;</div><div class='del'>-		else</div><div class='del'>-			ptr = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (match)</div><div class='del'>-		*attrname = strdup(match);</div><div class='del'>-</div><div class='del'>-	return match_count;</div><div class='add'>+    char attrbuf[4096];</div><div class='add'>+    char *ptr, *match = NULL;</div><div class='add'>+    int len, r, match_count = 0;</div><div class='add'>+</div><div class='add'>+    if (!path || !pattern || !attrname)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    len = listxattr(path, attrbuf, sizeof(attrbuf));</div><div class='add'>+    if (len &lt; 0)</div><div class='add'>+        return len;</div><div class='add'>+</div><div class='add'>+    ptr = attrbuf;</div><div class='add'>+    while (ptr) {</div><div class='add'>+        r = fnmatch(pattern, ptr, 0);</div><div class='add'>+        if (!r) {</div><div class='add'>+            if (!match)</div><div class='add'>+                match = ptr;</div><div class='add'>+            match_count++;</div><div class='add'>+        } else if (r != FNM_NOMATCH) {</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        len -= strlen(ptr) + 1;</div><div class='add'>+        if (len &gt; 0)</div><div class='add'>+            ptr += strlen(ptr) + 1;</div><div class='add'>+        else</div><div class='add'>+            ptr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (match)</div><div class='add'>+        *attrname = strdup(match);</div><div class='add'>+</div><div class='add'>+    return match_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -118,19 +118,19 @@ get_stripe_attr_name(const char *path, const char *pattern, char **attrname)</div><div class='ctx'> static int</div><div class='ctx'> get_stripe_attr_val(const char *path, const char *attr, int *val)</div><div class='ctx'> {</div><div class='del'>-	char attrbuf[4096];</div><div class='del'>-	int len;</div><div class='add'>+    char attrbuf[4096];</div><div class='add'>+    int len;</div><div class='ctx'> </div><div class='del'>-	if (!path || !attr || !val)</div><div class='del'>-		return -1;</div><div class='add'>+    if (!path || !attr || !val)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	len = getxattr(path, attr, attrbuf, sizeof(attrbuf));</div><div class='del'>-	if (len &lt; 0)</div><div class='del'>-		return len;</div><div class='add'>+    len = getxattr(path, attr, attrbuf, sizeof(attrbuf));</div><div class='add'>+    if (len &lt; 0)</div><div class='add'>+        return len;</div><div class='ctx'> </div><div class='del'>-	*val = atoi(attrbuf);</div><div class='add'>+    *val = atoi(attrbuf);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -145,29 +145,31 @@ get_stripe_attr_val(const char *path, const char *attr, int *val)</div><div class='ctx'> static int</div><div class='ctx'> get_attr(const char *path, const char *pattern, char **buf, int *val)</div><div class='ctx'> {</div><div class='del'>-	int count = 1;</div><div class='del'>-</div><div class='del'>-	if (!buf)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-	if (!*buf) {</div><div class='del'>-		count = get_stripe_attr_name(path, pattern, buf);</div><div class='del'>-		if (count &gt; 1) {</div><div class='del'>-			/* pattern isn't good enough */</div><div class='del'>-			fprintf(stderr, "ERROR: duplicate attributes found "</div><div class='del'>-				"matching pattern: %s\n", pattern);</div><div class='del'>-			free(*buf);</div><div class='del'>-			*buf = NULL;</div><div class='del'>-			return count;</div><div class='del'>-		} else if (count &lt; 1) {</div><div class='del'>-			return count;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (get_stripe_attr_val(path, *buf, val) &lt; 0)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-	return count;</div><div class='add'>+    int count = 1;</div><div class='add'>+</div><div class='add'>+    if (!buf)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!*buf) {</div><div class='add'>+        count = get_stripe_attr_name(path, pattern, buf);</div><div class='add'>+        if (count &gt; 1) {</div><div class='add'>+            /* pattern isn't good enough */</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: duplicate attributes found "</div><div class='add'>+                    "matching pattern: %s\n",</div><div class='add'>+                    pattern);</div><div class='add'>+            free(*buf);</div><div class='add'>+            *buf = NULL;</div><div class='add'>+            return count;</div><div class='add'>+        } else if (count &lt; 1) {</div><div class='add'>+            return count;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (get_stripe_attr_val(path, *buf, val) &lt; 0)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -178,164 +180,168 @@ get_attr(const char *path, const char *pattern, char **buf, int *val)</div><div class='ctx'>  * print a warning if any files are missing. We proceed without error in the</div><div class='ctx'>  * latter case to support partial recovery.</div><div class='ctx'>  */</div><div class='del'>-static struct</div><div class='del'>-file_stripe_info *validate_and_open_files(char *paths[], int count)</div><div class='add'>+static struct file_stripe_info *</div><div class='add'>+validate_and_open_files(char *paths[], int count)</div><div class='ctx'> {</div><div class='del'>-	int i, val, tmp;</div><div class='del'>-	struct stat sbuf;</div><div class='del'>-	char *stripe_count_attr = NULL;</div><div class='del'>-	char *stripe_size_attr = NULL;</div><div class='del'>-	char *stripe_index_attr = NULL;</div><div class='del'>-	char *stripe_coalesce_attr = NULL;</div><div class='del'>-	struct file_stripe_info *finfo = NULL;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; count; i++) {</div><div class='del'>-		if (!paths[i])</div><div class='del'>-			goto err;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * Check the stripe count first so we can allocate the info</div><div class='del'>-		 * struct with the appropriate number of fds.</div><div class='del'>-		 */</div><div class='del'>-		if (get_attr(paths[i], ATTRNAME_STRIPE_COUNT,</div><div class='del'>-				&amp;stripe_count_attr, &amp;val) != 1) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: attribute: '%s'\n",</div><div class='del'>-				paths[i], ATTRNAME_STRIPE_COUNT);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		if (!finfo) {</div><div class='del'>-			finfo = alloc_file_stripe_info(val);</div><div class='del'>-			if (!finfo)</div><div class='del'>-				goto err;</div><div class='del'>-</div><div class='del'>-			if (val != count)</div><div class='del'>-				fprintf(stderr, "WARNING: %s: stripe-count "</div><div class='del'>-					"(%d) != file count (%d). Result may "</div><div class='del'>-					"be incomplete.\n", paths[i], val,</div><div class='del'>-					count);</div><div class='del'>-</div><div class='del'>-			finfo-&gt;stripe_count = val;</div><div class='del'>-		} else if (val != finfo-&gt;stripe_count) {</div><div class='del'>-			fprintf(stderr, "ERROR %s: invalid stripe count: %d "</div><div class='del'>-				"(expected %d)\n", paths[i], val,</div><div class='del'>-				finfo-&gt;stripe_count);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * Get and validate the chunk size.</div><div class='del'>-		 */</div><div class='del'>-		if (get_attr(paths[i], ATTRNAME_STRIPE_SIZE, &amp;stripe_size_attr,</div><div class='del'>-				&amp;val) != 1) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: attribute: '%s'\n",</div><div class='del'>-				paths[i], ATTRNAME_STRIPE_SIZE);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!finfo-&gt;stripe_size) {</div><div class='del'>-			finfo-&gt;stripe_size = val;</div><div class='del'>-		} else if (val != finfo-&gt;stripe_size) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: invalid stripe size: %d "</div><div class='del'>-				"(expected %d)\n", paths[i], val,</div><div class='del'>-				finfo-&gt;stripe_size);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * stripe-coalesce is a backward compatible attribute. If the</div><div class='del'>-		 * attribute does not exist, assume a value of zero for the</div><div class='del'>-		 * traditional stripe format.</div><div class='del'>-		 */</div><div class='del'>-		tmp = get_attr(paths[i], ATTRNAME_STRIPE_COALESCE,</div><div class='del'>-				&amp;stripe_coalesce_attr, &amp;val);</div><div class='del'>-		if (!tmp) {</div><div class='del'>-			val = 0;</div><div class='del'>-		} else if (tmp != 1) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: attribute: '%s'\n",</div><div class='del'>-				paths[i], ATTRNAME_STRIPE_COALESCE);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (finfo-&gt;coalesce == INVALID_FD) {</div><div class='del'>-			finfo-&gt;coalesce = val;</div><div class='del'>-		} else if (val != finfo-&gt;coalesce) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: invalid coalesce flag\n",</div><div class='del'>-				paths[i]);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * Get/validate the stripe index and open the file in the</div><div class='del'>-		 * appropriate fd slot.</div><div class='del'>-		 */</div><div class='del'>-		if (get_attr(paths[i], ATTRNAME_STRIPE_INDEX,</div><div class='del'>-				&amp;stripe_index_attr, &amp;val) != 1) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: attribute: '%s'\n",</div><div class='del'>-				paths[i], ATTRNAME_STRIPE_INDEX);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		if (finfo-&gt;fd[val] != INVALID_FD) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: duplicate stripe index: "</div><div class='del'>-				"%d\n", paths[i], val);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		finfo-&gt;fd[val] = open(paths[i], O_RDONLY);</div><div class='del'>-		if (finfo-&gt;fd[val] &lt; 0)</div><div class='del'>-			goto err;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * Get the creation mode for the file.</div><div class='del'>-		 */</div><div class='del'>-		if (fstat(finfo-&gt;fd[val], &amp;sbuf) &lt; 0)</div><div class='del'>-			goto err;</div><div class='del'>-		if (finfo-&gt;mode == INVALID_MODE) {</div><div class='del'>-			finfo-&gt;mode = sbuf.st_mode;</div><div class='del'>-		} else if (sbuf.st_mode != finfo-&gt;mode) {</div><div class='del'>-			fprintf(stderr, "ERROR: %s: invalid mode\n", paths[i]);</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	free(stripe_count_attr);</div><div class='del'>-	free(stripe_size_attr);</div><div class='del'>-	free(stripe_index_attr);</div><div class='del'>-	free(stripe_coalesce_attr);</div><div class='del'>-</div><div class='del'>-	return finfo;</div><div class='add'>+    int i, val, tmp;</div><div class='add'>+    struct stat sbuf;</div><div class='add'>+    char *stripe_count_attr = NULL;</div><div class='add'>+    char *stripe_size_attr = NULL;</div><div class='add'>+    char *stripe_index_attr = NULL;</div><div class='add'>+    char *stripe_coalesce_attr = NULL;</div><div class='add'>+    struct file_stripe_info *finfo = NULL;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        if (!paths[i])</div><div class='add'>+            goto err;</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Check the stripe count first so we can allocate the info</div><div class='add'>+         * struct with the appropriate number of fds.</div><div class='add'>+         */</div><div class='add'>+        if (get_attr(paths[i], ATTRNAME_STRIPE_COUNT, &amp;stripe_count_attr,</div><div class='add'>+                     &amp;val) != 1) {</div><div class='add'>+            fprintf(stderr, "ERROR: %s: attribute: '%s'\n", paths[i],</div><div class='add'>+                    ATTRNAME_STRIPE_COUNT);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        if (!finfo) {</div><div class='add'>+            finfo = alloc_file_stripe_info(val);</div><div class='add'>+            if (!finfo)</div><div class='add'>+                goto err;</div><div class='add'>+</div><div class='add'>+            if (val != count)</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "WARNING: %s: stripe-count "</div><div class='add'>+                        "(%d) != file count (%d). Result may "</div><div class='add'>+                        "be incomplete.\n",</div><div class='add'>+                        paths[i], val, count);</div><div class='add'>+</div><div class='add'>+            finfo-&gt;stripe_count = val;</div><div class='add'>+        } else if (val != finfo-&gt;stripe_count) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR %s: invalid stripe count: %d "</div><div class='add'>+                    "(expected %d)\n",</div><div class='add'>+                    paths[i], val, finfo-&gt;stripe_count);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Get and validate the chunk size.</div><div class='add'>+         */</div><div class='add'>+        if (get_attr(paths[i], ATTRNAME_STRIPE_SIZE, &amp;stripe_size_attr, &amp;val) !=</div><div class='add'>+            1) {</div><div class='add'>+            fprintf(stderr, "ERROR: %s: attribute: '%s'\n", paths[i],</div><div class='add'>+                    ATTRNAME_STRIPE_SIZE);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!finfo-&gt;stripe_size) {</div><div class='add'>+            finfo-&gt;stripe_size = val;</div><div class='add'>+        } else if (val != finfo-&gt;stripe_size) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: %s: invalid stripe size: %d "</div><div class='add'>+                    "(expected %d)\n",</div><div class='add'>+                    paths[i], val, finfo-&gt;stripe_size);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * stripe-coalesce is a backward compatible attribute. If the</div><div class='add'>+         * attribute does not exist, assume a value of zero for the</div><div class='add'>+         * traditional stripe format.</div><div class='add'>+         */</div><div class='add'>+        tmp = get_attr(paths[i], ATTRNAME_STRIPE_COALESCE,</div><div class='add'>+                       &amp;stripe_coalesce_attr, &amp;val);</div><div class='add'>+        if (!tmp) {</div><div class='add'>+            val = 0;</div><div class='add'>+        } else if (tmp != 1) {</div><div class='add'>+            fprintf(stderr, "ERROR: %s: attribute: '%s'\n", paths[i],</div><div class='add'>+                    ATTRNAME_STRIPE_COALESCE);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (finfo-&gt;coalesce == INVALID_FD) {</div><div class='add'>+            finfo-&gt;coalesce = val;</div><div class='add'>+        } else if (val != finfo-&gt;coalesce) {</div><div class='add'>+            fprintf(stderr, "ERROR: %s: invalid coalesce flag\n", paths[i]);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Get/validate the stripe index and open the file in the</div><div class='add'>+         * appropriate fd slot.</div><div class='add'>+         */</div><div class='add'>+        if (get_attr(paths[i], ATTRNAME_STRIPE_INDEX, &amp;stripe_index_attr,</div><div class='add'>+                     &amp;val) != 1) {</div><div class='add'>+            fprintf(stderr, "ERROR: %s: attribute: '%s'\n", paths[i],</div><div class='add'>+                    ATTRNAME_STRIPE_INDEX);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        if (finfo-&gt;fd[val] != INVALID_FD) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: %s: duplicate stripe index: "</div><div class='add'>+                    "%d\n",</div><div class='add'>+                    paths[i], val);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        finfo-&gt;fd[val] = open(paths[i], O_RDONLY);</div><div class='add'>+        if (finfo-&gt;fd[val] &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Get the creation mode for the file.</div><div class='add'>+         */</div><div class='add'>+        if (fstat(finfo-&gt;fd[val], &amp;sbuf) &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+        if (finfo-&gt;mode == INVALID_MODE) {</div><div class='add'>+            finfo-&gt;mode = sbuf.st_mode;</div><div class='add'>+        } else if (sbuf.st_mode != finfo-&gt;mode) {</div><div class='add'>+            fprintf(stderr, "ERROR: %s: invalid mode\n", paths[i]);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(stripe_count_attr);</div><div class='add'>+    free(stripe_size_attr);</div><div class='add'>+    free(stripe_index_attr);</div><div class='add'>+    free(stripe_coalesce_attr);</div><div class='add'>+</div><div class='add'>+    return finfo;</div><div class='ctx'> err:</div><div class='ctx'> </div><div class='del'>-	free(stripe_count_attr);</div><div class='del'>-	free(stripe_size_attr);</div><div class='del'>-	free(stripe_index_attr);</div><div class='del'>-	free(stripe_coalesce_attr);</div><div class='add'>+    free(stripe_count_attr);</div><div class='add'>+    free(stripe_size_attr);</div><div class='add'>+    free(stripe_index_attr);</div><div class='add'>+    free(stripe_coalesce_attr);</div><div class='ctx'> </div><div class='del'>-	if (finfo) {</div><div class='del'>-		close_files(finfo);</div><div class='del'>-		free(finfo);</div><div class='del'>-	}</div><div class='add'>+    if (finfo) {</div><div class='add'>+        close_files(finfo);</div><div class='add'>+        free(finfo);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> close_files(struct file_stripe_info *finfo)</div><div class='ctx'> {</div><div class='del'>-	int i, ret;</div><div class='add'>+    int i, ret;</div><div class='ctx'> </div><div class='del'>-	if (!finfo)</div><div class='del'>-		return -1;</div><div class='add'>+    if (!finfo)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; finfo-&gt;stripe_count; i++) {</div><div class='del'>-		if (finfo-&gt;fd[i] == INVALID_FD)</div><div class='del'>-			continue;</div><div class='add'>+    for (i = 0; i &lt; finfo-&gt;stripe_count; i++) {</div><div class='add'>+        if (finfo-&gt;fd[i] == INVALID_FD)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		ret = close(finfo-&gt;fd[i]);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			return ret;</div><div class='del'>-	}</div><div class='add'>+        ret = close(finfo-&gt;fd[i]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -351,43 +357,43 @@ close_files(struct file_stripe_info *finfo)</div><div class='ctx'> static int</div><div class='ctx'> generate_file_coalesce(int target, struct file_stripe_info *finfo)</div><div class='ctx'> {</div><div class='del'>-	char *buf;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int r, w, i;</div><div class='del'>-</div><div class='del'>-	buf = malloc(finfo-&gt;stripe_size);</div><div class='del'>-	if (!buf)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-	i = 0;</div><div class='del'>-	while (1) {</div><div class='del'>-		if (finfo-&gt;fd[i] == INVALID_FD) {</div><div class='del'>-			if (lseek(target, finfo-&gt;stripe_size, SEEK_CUR) &lt; 0)</div><div class='del'>-				break;</div><div class='del'>-</div><div class='del'>-			i = (i + 1) % finfo-&gt;stripe_count;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		r = read(finfo-&gt;fd[i], buf, finfo-&gt;stripe_size);</div><div class='del'>-		if (r &lt; 0) {</div><div class='del'>-			ret = r;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-		if (!r)</div><div class='del'>-			break;</div><div class='del'>-</div><div class='del'>-		w = write(target, buf, r);</div><div class='del'>-		if (w &lt; 0) {</div><div class='del'>-			ret = w;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		i = (i + 1) % finfo-&gt;stripe_count;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	free(buf);</div><div class='del'>-	return ret;</div><div class='add'>+    char *buf;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int r, w, i;</div><div class='add'>+</div><div class='add'>+    buf = malloc(finfo-&gt;stripe_size);</div><div class='add'>+    if (!buf)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    i = 0;</div><div class='add'>+    while (1) {</div><div class='add'>+        if (finfo-&gt;fd[i] == INVALID_FD) {</div><div class='add'>+            if (lseek(target, finfo-&gt;stripe_size, SEEK_CUR) &lt; 0)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            i = (i + 1) % finfo-&gt;stripe_count;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        r = read(finfo-&gt;fd[i], buf, finfo-&gt;stripe_size);</div><div class='add'>+        if (r &lt; 0) {</div><div class='add'>+            ret = r;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        if (!r)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        w = write(target, buf, r);</div><div class='add'>+        if (w &lt; 0) {</div><div class='add'>+            ret = w;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        i = (i + 1) % finfo-&gt;stripe_count;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(buf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -398,97 +404,100 @@ generate_file_coalesce(int target, struct file_stripe_info *finfo)</div><div class='ctx'> static int</div><div class='ctx'> generate_file_traditional(int target, struct file_stripe_info *finfo)</div><div class='ctx'> {</div><div class='del'>-	int i, j, max_ret, ret;</div><div class='del'>-	char buf[finfo-&gt;stripe_count][4096];</div><div class='del'>-</div><div class='del'>-	do {</div><div class='del'>-		char newbuf[4096] = {0, };</div><div class='del'>-</div><div class='del'>-		max_ret = 0;</div><div class='del'>-		for (i = 0; i &lt; finfo-&gt;stripe_count; i++) {</div><div class='del'>-			memset(buf[i], 0, 4096);</div><div class='del'>-			ret = read(finfo-&gt;fd[i], buf[i], 4096);</div><div class='del'>-			if (ret &gt; max_ret)</div><div class='del'>-				max_ret = ret;</div><div class='del'>-		}</div><div class='del'>-		for (i = 0; i &lt; max_ret; i++)</div><div class='del'>-			for (j = 0; j &lt; finfo-&gt;stripe_count; j++)</div><div class='del'>-				newbuf[i] |= buf[j][i];</div><div class='del'>-			write(target, newbuf, max_ret);</div><div class='del'>-	} while (max_ret);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    int i, j, max_ret, ret;</div><div class='add'>+    char buf[finfo-&gt;stripe_count][4096];</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        char newbuf[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        max_ret = 0;</div><div class='add'>+        for (i = 0; i &lt; finfo-&gt;stripe_count; i++) {</div><div class='add'>+            memset(buf[i], 0, 4096);</div><div class='add'>+            ret = read(finfo-&gt;fd[i], buf[i], 4096);</div><div class='add'>+            if (ret &gt; max_ret)</div><div class='add'>+                max_ret = ret;</div><div class='add'>+        }</div><div class='add'>+        for (i = 0; i &lt; max_ret; i++)</div><div class='add'>+            for (j = 0; j &lt; finfo-&gt;stripe_count; j++)</div><div class='add'>+                newbuf[i] |= buf[j][i];</div><div class='add'>+        write(target, newbuf, max_ret);</div><div class='add'>+    } while (max_ret);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> generate_file(int target, struct file_stripe_info *finfo)</div><div class='ctx'> {</div><div class='del'>-	if (finfo-&gt;coalesce)</div><div class='del'>-		return generate_file_coalesce(target, finfo);</div><div class='add'>+    if (finfo-&gt;coalesce)</div><div class='add'>+        return generate_file_coalesce(target, finfo);</div><div class='ctx'> </div><div class='del'>-	return generate_file_traditional(target, finfo);</div><div class='add'>+    return generate_file_traditional(target, finfo);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> usage(char *name)</div><div class='ctx'> {</div><div class='del'>-	fprintf(stderr, "Usage: %s [-o &lt;outputfile&gt;] &lt;inputfile1&gt; "</div><div class='del'>-		"&lt;inputfile2&gt; ...\n", name);</div><div class='add'>+    fprintf(stderr,</div><div class='add'>+            "Usage: %s [-o &lt;outputfile&gt;] &lt;inputfile1&gt; "</div><div class='add'>+            "&lt;inputfile2&gt; ...\n",</div><div class='add'>+            name);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-	int file_count, opt;</div><div class='del'>-	char *opath = NULL;</div><div class='del'>-	int targetfd;</div><div class='del'>-	struct file_stripe_info *finfo;</div><div class='del'>-</div><div class='del'>-	while ((opt = getopt(argc, argv, "o:")) != -1) {</div><div class='del'>-		switch (opt) {</div><div class='del'>-		case 'o':</div><div class='del'>-			opath = optarg;</div><div class='del'>-			break;</div><div class='del'>-		default:</div><div class='del'>-			usage(argv[0]);</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	file_count = argc - optind;</div><div class='del'>-</div><div class='del'>-	if (!opath || !file_count) {</div><div class='del'>-		usage(argv[0]);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	finfo = validate_and_open_files(&amp;argv[optind], file_count);</div><div class='del'>-	if (!finfo)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	targetfd = open(opath, O_RDWR|O_CREAT, finfo-&gt;mode);</div><div class='del'>-	if (targetfd &lt; 0)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	if (generate_file(targetfd, finfo) &lt; 0)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	if (fsync(targetfd) &lt; 0)</div><div class='del'>-		fprintf(stderr, "ERROR: %s\n", strerror(errno));</div><div class='del'>-	if (close(targetfd) &lt; 0)</div><div class='del'>-		fprintf(stderr, "ERROR: %s\n", strerror(errno));</div><div class='del'>-</div><div class='del'>-	close_files(finfo);</div><div class='del'>-	free(finfo);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    int file_count, opt;</div><div class='add'>+    char *opath = NULL;</div><div class='add'>+    int targetfd;</div><div class='add'>+    struct file_stripe_info *finfo;</div><div class='add'>+</div><div class='add'>+    while ((opt = getopt(argc, argv, "o:")) != -1) {</div><div class='add'>+        switch (opt) {</div><div class='add'>+            case 'o':</div><div class='add'>+                opath = optarg;</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                usage(argv[0]);</div><div class='add'>+                return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    file_count = argc - optind;</div><div class='add'>+</div><div class='add'>+    if (!opath || !file_count) {</div><div class='add'>+        usage(argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    finfo = validate_and_open_files(&amp;argv[optind], file_count);</div><div class='add'>+    if (!finfo)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    targetfd = open(opath, O_RDWR | O_CREAT, finfo-&gt;mode);</div><div class='add'>+    if (targetfd &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (generate_file(targetfd, finfo) &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (fsync(targetfd) &lt; 0)</div><div class='add'>+        fprintf(stderr, "ERROR: %s\n", strerror(errno));</div><div class='add'>+    if (close(targetfd) &lt; 0)</div><div class='add'>+        fprintf(stderr, "ERROR: %s\n", strerror(errno));</div><div class='add'>+</div><div class='add'>+    close_files(finfo);</div><div class='add'>+    free(finfo);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-	if (finfo) {</div><div class='del'>-		close_files(finfo);</div><div class='del'>-		free(finfo);</div><div class='del'>-	}</div><div class='add'>+    if (finfo) {</div><div class='add'>+        close_files(finfo);</div><div class='add'>+        free(finfo);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/extras/test/ld-preload-test/ld-preload-lib.c b/extras/test/ld-preload-test/ld-preload-lib.c<br/>index 181b5c1e9c7..d120c053a69 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/test/ld-preload-test/ld-preload-lib.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/test/ld-preload-test/ld-preload-lib.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/test/ld-preload-test/ld-preload-lib.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/test/ld-preload-test/ld-preload-lib.c</a></div><div class='hunk'>@@ -40,596 +40,576 @@</div><div class='ctx'> /* Err number that is assigned to errno so that test application can</div><div class='ctx'>  * verify that the function was intercepted correctly.</div><div class='ctx'>  */</div><div class='del'>-#define PRELOAD_ERRNO_VERF      6449</div><div class='del'>-#define set_errno()             (errno = PRELOAD_ERRNO_VERF)</div><div class='add'>+#define PRELOAD_ERRNO_VERF 6449</div><div class='add'>+#define set_errno() (errno = PRELOAD_ERRNO_VERF)</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-intercept (char *call, int tabs)</div><div class='add'>+intercept(char *call, int tabs)</div><div class='ctx'> {</div><div class='del'>-        while (tabs &gt; 0) {</div><div class='del'>-                fprintf (stdout, "\t");</div><div class='del'>-                --tabs;</div><div class='del'>-        }</div><div class='add'>+    while (tabs &gt; 0) {</div><div class='add'>+        fprintf(stdout, "\t");</div><div class='add'>+        --tabs;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Intercepted by %s", call);</div><div class='add'>+    fprintf(stdout, "Intercepted by %s", call);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-creat64 (const char *pathname, mode_t mode)</div><div class='add'>+creat64(const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        intercept ("creat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("creat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-creat (const char *pathname, mode_t mode)</div><div class='add'>+creat(const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        intercept ("creat", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("creat", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-close (int fd)</div><div class='add'>+close(int fd)</div><div class='ctx'> {</div><div class='del'>-        intercept ("close", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("close", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-open64 (const char *pathname, int flags, ...)</div><div class='add'>+open64(const char *pathname, int flags, ...)</div><div class='ctx'> {</div><div class='del'>-        intercept ("open64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("open64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-open (const char *pathname, int flags, ...)</div><div class='add'>+open(const char *pathname, int flags, ...)</div><div class='ctx'> {</div><div class='del'>-        intercept ("open", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("open", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-read (int fd, void *buf, size_t count)</div><div class='add'>+read(int fd, void *buf, size_t count)</div><div class='ctx'> {</div><div class='del'>-        intercept ("read", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("read", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-readv (int fd, const struct iovec *vector, int count)</div><div class='add'>+readv(int fd, const struct iovec *vector, int count)</div><div class='ctx'> {</div><div class='del'>-        intercept ("readv", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("readv", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-pread (int fd, void *buf, size_t count, unsigned long offset)</div><div class='add'>+pread(int fd, void *buf, size_t count, unsigned long offset)</div><div class='ctx'> {</div><div class='del'>-        intercept ("pread", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("pread", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-pread64 (int fd, void *buf, size_t count, uint64_t offset)</div><div class='add'>+pread64(int fd, void *buf, size_t count, uint64_t offset)</div><div class='ctx'> {</div><div class='del'>-        intercept ("pread64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("pread64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-write (int fd, const void *buf, size_t count)</div><div class='add'>+write(int fd, const void *buf, size_t count)</div><div class='ctx'> {</div><div class='del'>-        intercept ("write", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("write", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-writev (int fd, const struct iovec *vector, int count)</div><div class='add'>+writev(int fd, const struct iovec *vector, int count)</div><div class='ctx'> {</div><div class='del'>-        intercept ("writev", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("writev", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-pwrite (int fd, const void *buf, size_t count, unsigned long offset)</div><div class='add'>+pwrite(int fd, const void *buf, size_t count, unsigned long offset)</div><div class='ctx'> {</div><div class='del'>-        intercept ("pwrite", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("pwrite", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-pwrite64 (int fd, const void *buf, size_t count, uint64_t offset)</div><div class='add'>+pwrite64(int fd, const void *buf, size_t count, uint64_t offset)</div><div class='ctx'> {</div><div class='del'>-        intercept ("pwrite64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("pwrite64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> off_t</div><div class='del'>-lseek (int fildes, unsigned long offset, int whence)</div><div class='add'>+lseek(int fildes, unsigned long offset, int whence)</div><div class='ctx'> {</div><div class='del'>-        intercept ("lseek", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("lseek", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='del'>-lseek64 (int fildes, uint64_t offset, int whence)</div><div class='add'>+lseek64(int fildes, uint64_t offset, int whence)</div><div class='ctx'> {</div><div class='del'>-        intercept ("lseek64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("lseek64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dup (int fd)</div><div class='add'>+dup(int fd)</div><div class='ctx'> {</div><div class='del'>-        intercept ("dup", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("dup", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dup2 (int oldfd, int newfd)</div><div class='add'>+dup2(int oldfd, int newfd)</div><div class='ctx'> {</div><div class='del'>-        intercept ("dup2", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("dup2", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mkdir (const char *pathname, mode_t mode)</div><div class='add'>+mkdir(const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        intercept ("mkdir", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("mkdir", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rmdir (const char *pathname)</div><div class='add'>+rmdir(const char *pathname)</div><div class='ctx'> {</div><div class='del'>-        intercept ("rmdir", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("rmdir", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-chmod (const char *pathname, mode_t mode)</div><div class='add'>+chmod(const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        intercept ("chmod", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("chmod", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-chown (const char *pathname, uid_t owner, gid_t group)</div><div class='add'>+chown(const char *pathname, uid_t owner, gid_t group)</div><div class='ctx'> {</div><div class='del'>-        intercept ("chown", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("chown", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fchmod (int fd, mode_t mode)</div><div class='add'>+fchmod(int fd, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        intercept ("fchmod", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("fchmod", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fchown (int fd, uid_t uid, gid_t gid)</div><div class='add'>+fchown(int fd, uid_t uid, gid_t gid)</div><div class='ctx'> {</div><div class='del'>-        intercept ("fchown", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("fchown", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int fsync (int fd)</div><div class='add'>+int</div><div class='add'>+fsync(int fd)</div><div class='ctx'> {</div><div class='del'>-        intercept ("fsync", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("fsync", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ftruncate (int fd, off_t length)</div><div class='add'>+ftruncate(int fd, off_t length)</div><div class='ctx'> {</div><div class='del'>-        intercept ("ftruncate", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("ftruncate", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ftruncate64 (int fd, off_t length)</div><div class='add'>+ftruncate64(int fd, off_t length)</div><div class='ctx'> {</div><div class='del'>-        intercept ("ftruncate64", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("ftruncate64", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-link (const char *oldpath, const char *newname)</div><div class='add'>+link(const char *oldpath, const char *newname)</div><div class='ctx'> {</div><div class='del'>-        intercept ("link", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("link", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rename (const char *oldpath, const char *newpath)</div><div class='add'>+rename(const char *oldpath, const char *newpath)</div><div class='ctx'> {</div><div class='del'>-        intercept ("rename", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("rename", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-utimes (const char *path, const struct timeval times[2])</div><div class='add'>+utimes(const char *path, const struct timeval times[2])</div><div class='ctx'> {</div><div class='del'>-        intercept ("utimes", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("utimes", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-futimes (int fd, const struct timeval times[2])</div><div class='add'>+futimes(int fd, const struct timeval times[2])</div><div class='ctx'> {</div><div class='del'>-        intercept ("futimes", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("futimes", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-utime (const char *path, const struct utimbuf *buf)</div><div class='add'>+utime(const char *path, const struct utimbuf *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("utime", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("utime", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-mknod (const char *path, mode_t mode, dev_t dev)</div><div class='add'>+mknod(const char *path, mode_t mode, dev_t dev)</div><div class='ctx'> {</div><div class='del'>-        intercept ("mknod", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("mknod", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__xmknod (int ver, const char *path, mode_t mode, dev_t *dev)</div><div class='add'>+__xmknod(int ver, const char *path, mode_t mode, dev_t *dev)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__xmknod", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__xmknod", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mkfifo (const char *path, mode_t mode)</div><div class='add'>+mkfifo(const char *path, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        intercept ("mkfifo", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("mkfifo", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-unlink (const char *path)</div><div class='add'>+unlink(const char *path)</div><div class='ctx'> {</div><div class='del'>-        intercept ("unlink", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("unlink", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-symlink (const char *oldpath, const char *newpath)</div><div class='add'>+symlink(const char *oldpath, const char *newpath)</div><div class='ctx'> {</div><div class='del'>-        intercept ("symlink", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("symlink", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-readlink (const char *path, char *buf, size_t bufsize)</div><div class='add'>+readlink(const char *path, char *buf, size_t bufsize)</div><div class='ctx'> {</div><div class='del'>-        intercept ("readlink", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("readlink", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-realpath (const char *path, char *resolved)</div><div class='add'>+realpath(const char *path, char *resolved)</div><div class='ctx'> {</div><div class='del'>-        intercept ("realpath", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return NULL;</div><div class='add'>+    intercept("realpath", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> DIR *</div><div class='del'>-opendir (const char *path)</div><div class='add'>+opendir(const char *path)</div><div class='ctx'> {</div><div class='del'>-        intercept ("opendir", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return NULL;</div><div class='add'>+    intercept("opendir", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirent *</div><div class='del'>-readdir (DIR *dir)</div><div class='add'>+readdir(DIR *dir)</div><div class='ctx'> {</div><div class='del'>-        intercept ("readdir\t", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return NULL;</div><div class='add'>+    intercept("readdir\t", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct dirent *</div><div class='del'>-readdir64 (DIR *dir)</div><div class='add'>+readdir64(DIR *dir)</div><div class='ctx'> {</div><div class='del'>-        intercept ("readdir64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return NULL;</div><div class='add'>+    intercept("readdir64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-readdir_r (DIR *dir, struct dirent *entry, struct dirent **result)</div><div class='add'>+readdir_r(DIR *dir, struct dirent *entry, struct dirent **result)</div><div class='ctx'> {</div><div class='del'>-        intercept ("readdir_r", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("readdir_r", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-readdir64_r (DIR *dir, struct dirent *entry, struct dirent **result)</div><div class='add'>+readdir64_r(DIR *dir, struct dirent *entry, struct dirent **result)</div><div class='ctx'> {</div><div class='del'>-        intercept ("readdir64_r", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("readdir64_r", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-closedir (DIR *dh)</div><div class='add'>+closedir(DIR *dh)</div><div class='ctx'> {</div><div class='del'>-        intercept ("closedir", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("closedir", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__xstat (int ver, const char *path, struct stat *buf)</div><div class='add'>+__xstat(int ver, const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__xstat\t", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__xstat\t", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__xstat64 (int ver, const char *path, struct stat *buf)</div><div class='add'>+__xstat64(int ver, const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__xstat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__xstat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stat (const char *path, struct stat *buf)</div><div class='add'>+stat(const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("stat", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("stat", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stat64 (const char *path, struct stat *buf)</div><div class='add'>+stat64(const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("stat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("stat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__fxstat (int ver, int fd, struct stat *buf)</div><div class='add'>+__fxstat(int ver, int fd, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__fxstat\t", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__fxstat\t", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__fxstat64 (int ver, int fd, struct stat *buf)</div><div class='add'>+__fxstat64(int ver, int fd, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__fxstat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__fxstat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fstat (int fd, struct stat *buf)</div><div class='add'>+fstat(int fd, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("fstat", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("fstat", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fstat64 (int fd , struct stat *buf)</div><div class='add'>+fstat64(int fd, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("fstat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("fstat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__lxstat (int ver, const char *path, struct stat *buf)</div><div class='add'>+__lxstat(int ver, const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__lxstat\t", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__lxstat\t", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__lxstat64 (int ver, const char *path, struct stat *buf)</div><div class='add'>+__lxstat64(int ver, const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("__lxstat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("__lxstat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-lstat (const char *path, struct stat *buf)</div><div class='add'>+lstat(const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("lstat", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("lstat", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-lstat64 (const char *path, struct stat *buf)</div><div class='add'>+lstat64(const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("lstat64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("lstat64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-statfs (const char *path, struct statfs *buf)</div><div class='add'>+statfs(const char *path, struct statfs *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("statfs", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("statfs", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-statfs64 (const char *path, struct statfs *buf)</div><div class='add'>+statfs64(const char *path, struct statfs *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("statfs64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("statfs64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-statvfs (const char *path, struct statvfs *buf)</div><div class='add'>+statvfs(const char *path, struct statvfs *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("statvfs\t", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("statvfs\t", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-statvfs64 (const char *path, struct statvfs *buf)</div><div class='add'>+statvfs64(const char *path, struct statvfs *buf)</div><div class='ctx'> {</div><div class='del'>-        intercept ("statvfs64", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("statvfs64", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-getxattr (const char *path, const char *name, void *value, size_t size)</div><div class='add'>+getxattr(const char *path, const char *name, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-        intercept ("getxattr", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("getxattr", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-lgetxattr (const char *path, const char *name, void *value, size_t size)</div><div class='add'>+lgetxattr(const char *path, const char *name, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-        intercept ("lgetxattr", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("lgetxattr", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-remove (const char* path)</div><div class='add'>+remove(const char *path)</div><div class='ctx'> {</div><div class='del'>-        intercept ("remove", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("remove", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-lchown (const char *path, uid_t owner, gid_t group)</div><div class='add'>+lchown(const char *path, uid_t owner, gid_t group)</div><div class='ctx'> {</div><div class='del'>-        intercept ("lchown", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("lchown", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rewinddir (DIR *dirp)</div><div class='add'>+rewinddir(DIR *dirp)</div><div class='ctx'> {</div><div class='del'>-        intercept ("rewinddir", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return;</div><div class='add'>+    intercept("rewinddir", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-seekdir (DIR *dirp, off_t offset)</div><div class='add'>+seekdir(DIR *dirp, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        intercept ("seekdir", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return;</div><div class='add'>+    intercept("seekdir", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='del'>-telldir (DIR *dirp)</div><div class='add'>+telldir(DIR *dirp)</div><div class='ctx'> {</div><div class='del'>-        intercept ("telldir", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("telldir", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-sendfile (int out_fd, int in_fd, off_t *offset, size_t count)</div><div class='add'>+sendfile(int out_fd, int in_fd, off_t *offset, size_t count)</div><div class='ctx'> {</div><div class='del'>-        intercept ("sendfile\t", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("sendfile\t", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-sendfile64 (int out_fd, int in_fd, off_t *offset, size_t count)</div><div class='add'>+sendfile64(int out_fd, int in_fd, off_t *offset, size_t count)</div><div class='ctx'> {</div><div class='del'>-        intercept ("sendfile64", 1);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("sendfile64", 1);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fcntl (int fd, int cmd, ...)</div><div class='add'>+fcntl(int fd, int cmd, ...)</div><div class='ctx'> {</div><div class='del'>-        intercept ("fcntl", 2);</div><div class='del'>-        set_errno ();</div><div class='del'>-        return -1;</div><div class='add'>+    intercept("fcntl", 2);</div><div class='add'>+    set_errno();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/extras/test/ld-preload-test/ld-preload-test.c b/extras/test/ld-preload-test/ld-preload-test.c<br/>index 46e3e0e4172..54dde8c7d54 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/test/ld-preload-test/ld-preload-test.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/test/ld-preload-test/ld-preload-test.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/test/ld-preload-test/ld-preload-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/test/ld-preload-test/ld-preload-test.c</a></div><div class='hunk'>@@ -49,319 +49,310 @@</div><div class='ctx'> #include &lt;sys/xattr.h&gt;</div><div class='ctx'> #include &lt;sys/sendfile.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-#define PRELOAD_ERRNO_VERF      6449</div><div class='add'>+#define PRELOAD_ERRNO_VERF 6449</div><div class='ctx'> void</div><div class='ctx'> check_err(int ret, char *call, int tabs)</div><div class='ctx'> {</div><div class='del'>-        while (tabs &gt; 0) {</div><div class='del'>-                fprintf (stdout, "\t");</div><div class='del'>-                --tabs;</div><div class='del'>-        }</div><div class='del'>-        if (ret != -1) {</div><div class='del'>-                fprintf (stdout, "Not intercepted: %s\n", call);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (errno != PRELOAD_ERRNO_VERF) {</div><div class='del'>-                fprintf (stdout, "Not intercepted: %s: err: %s\n", call,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    while (tabs &gt; 0) {</div><div class='add'>+        fprintf(stdout, "\t");</div><div class='add'>+        --tabs;</div><div class='add'>+    }</div><div class='add'>+    if (ret != -1) {</div><div class='add'>+        fprintf(stdout, "Not intercepted: %s\n", call);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Intercept verified: %s\n", call);</div><div class='add'>+    if (errno != PRELOAD_ERRNO_VERF) {</div><div class='add'>+        fprintf(stdout, "Not intercepted: %s: err: %s\n", call,</div><div class='add'>+                strerror(errno));</div><div class='ctx'>         return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Intercept verified: %s\n", call);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-usage (FILE *fp)</div><div class='add'>+usage(FILE *fp)</div><div class='ctx'> {</div><div class='del'>-        fprintf (fp, "Usage: ld-preload-test &lt;Options&gt;\n");</div><div class='del'>-        fprintf (fp, "Options\n");</div><div class='del'>-        fprintf (fp, "\t--path\t\tPathname is used as the file/directory"</div><div class='del'>-                     " created for the test.\n");</div><div class='del'>-</div><div class='add'>+    fprintf(fp, "Usage: ld-preload-test &lt;Options&gt;\n");</div><div class='add'>+    fprintf(fp, "Options\n");</div><div class='add'>+    fprintf(fp,</div><div class='add'>+            "\t--path\t\tPathname is used as the file/directory"</div><div class='add'>+            " created for the test.\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-run_file_tests (char *testfile)</div><div class='add'>+run_file_tests(char *testfile)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        struct stat     buf;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat buf;</div><div class='ctx'> </div><div class='del'>-        assert (testfile);</div><div class='del'>-        fprintf (stdout, "Testing creat");</div><div class='del'>-        ret = creat (testfile, S_IRWXU);</div><div class='del'>-        check_err (ret, "creat", 2);</div><div class='add'>+    assert(testfile);</div><div class='add'>+    fprintf(stdout, "Testing creat");</div><div class='add'>+    ret = creat(testfile, S_IRWXU);</div><div class='add'>+    check_err(ret, "creat", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing close");</div><div class='del'>-        ret = close (ret);</div><div class='del'>-        check_err (ret, "close", 2);</div><div class='add'>+    fprintf(stdout, "Testing close");</div><div class='add'>+    ret = close(ret);</div><div class='add'>+    check_err(ret, "close", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing open");</div><div class='del'>-        ret = open (testfile, O_RDONLY);</div><div class='del'>-        check_err (ret, "open", 2);</div><div class='add'>+    fprintf(stdout, "Testing open");</div><div class='add'>+    ret = open(testfile, O_RDONLY);</div><div class='add'>+    check_err(ret, "open", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing read");</div><div class='del'>-        ret = read (0, NULL, 0);</div><div class='del'>-        check_err (ret, "read", 2);</div><div class='add'>+    fprintf(stdout, "Testing read");</div><div class='add'>+    ret = read(0, NULL, 0);</div><div class='add'>+    check_err(ret, "read", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing readv");</div><div class='del'>-        ret = readv (0, NULL, 0);</div><div class='del'>-        check_err (ret, "readv", 2);</div><div class='add'>+    fprintf(stdout, "Testing readv");</div><div class='add'>+    ret = readv(0, NULL, 0);</div><div class='add'>+    check_err(ret, "readv", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing pread");</div><div class='del'>-        ret = pread (0, NULL, 0, 0);</div><div class='del'>-        check_err (ret, "pread", 2);</div><div class='add'>+    fprintf(stdout, "Testing pread");</div><div class='add'>+    ret = pread(0, NULL, 0, 0);</div><div class='add'>+    check_err(ret, "pread", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing write");</div><div class='del'>-        ret = write (0, NULL, 0);</div><div class='del'>-        check_err (ret, "write", 2);</div><div class='add'>+    fprintf(stdout, "Testing write");</div><div class='add'>+    ret = write(0, NULL, 0);</div><div class='add'>+    check_err(ret, "write", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing writev");</div><div class='del'>-        ret = writev (0, NULL, 0);</div><div class='del'>-        check_err (ret, "writev", 2);</div><div class='add'>+    fprintf(stdout, "Testing writev");</div><div class='add'>+    ret = writev(0, NULL, 0);</div><div class='add'>+    check_err(ret, "writev", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing pwrite");</div><div class='del'>-        ret = pwrite (0, NULL, 0, 0);</div><div class='del'>-        check_err (ret, "pwrite", 2);</div><div class='add'>+    fprintf(stdout, "Testing pwrite");</div><div class='add'>+    ret = pwrite(0, NULL, 0, 0);</div><div class='add'>+    check_err(ret, "pwrite", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing lseek");</div><div class='del'>-        ret = lseek (0, 0, 0);</div><div class='del'>-        check_err (ret, "lseek", 2);</div><div class='add'>+    fprintf(stdout, "Testing lseek");</div><div class='add'>+    ret = lseek(0, 0, 0);</div><div class='add'>+    check_err(ret, "lseek", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing dup");</div><div class='del'>-        ret = dup (0);</div><div class='del'>-        check_err (ret, "dup", 2);</div><div class='add'>+    fprintf(stdout, "Testing dup");</div><div class='add'>+    ret = dup(0);</div><div class='add'>+    check_err(ret, "dup", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing dup2");</div><div class='del'>-        ret = dup2 (0, 0);</div><div class='del'>-        check_err (ret, "dup2", 2);</div><div class='add'>+    fprintf(stdout, "Testing dup2");</div><div class='add'>+    ret = dup2(0, 0);</div><div class='add'>+    check_err(ret, "dup2", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing fchmod");</div><div class='del'>-        ret = fchmod (0, 0);</div><div class='del'>-        check_err (ret, "fchmod", 2);</div><div class='add'>+    fprintf(stdout, "Testing fchmod");</div><div class='add'>+    ret = fchmod(0, 0);</div><div class='add'>+    check_err(ret, "fchmod", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing fchown");</div><div class='del'>-        ret = fchown (0, 0, 0);</div><div class='del'>-        check_err (ret, "fchown", 2);</div><div class='add'>+    fprintf(stdout, "Testing fchown");</div><div class='add'>+    ret = fchown(0, 0, 0);</div><div class='add'>+    check_err(ret, "fchown", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing fsync");</div><div class='del'>-        ret = fsync (0);</div><div class='del'>-        check_err (ret, "fsync", 2);</div><div class='add'>+    fprintf(stdout, "Testing fsync");</div><div class='add'>+    ret = fsync(0);</div><div class='add'>+    check_err(ret, "fsync", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing ftruncate");</div><div class='del'>-        ret = ftruncate (0, 0);</div><div class='del'>-        check_err (ret, "ftruncate", 1);</div><div class='add'>+    fprintf(stdout, "Testing ftruncate");</div><div class='add'>+    ret = ftruncate(0, 0);</div><div class='add'>+    check_err(ret, "ftruncate", 1);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing fstat");</div><div class='del'>-        ret = fstat (0, &amp;buf);</div><div class='del'>-        check_err (ret, "fstat", 1);</div><div class='add'>+    fprintf(stdout, "Testing fstat");</div><div class='add'>+    ret = fstat(0, &amp;buf);</div><div class='add'>+    check_err(ret, "fstat", 1);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing sendfile");</div><div class='del'>-        ret = sendfile (0, 0, NULL, 0);</div><div class='del'>-        check_err (ret, "sendfile", 1);</div><div class='add'>+    fprintf(stdout, "Testing sendfile");</div><div class='add'>+    ret = sendfile(0, 0, NULL, 0);</div><div class='add'>+    check_err(ret, "sendfile", 1);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing fcntl");</div><div class='del'>-        ret = fcntl (0, 0, NULL);</div><div class='del'>-        check_err (ret, "fcntl", 2);</div><div class='add'>+    fprintf(stdout, "Testing fcntl");</div><div class='add'>+    ret = fcntl(0, 0, NULL);</div><div class='add'>+    check_err(ret, "fcntl", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing close");</div><div class='del'>-        ret = close (ret);</div><div class='del'>-        check_err (ret, "close", 2);</div><div class='add'>+    fprintf(stdout, "Testing close");</div><div class='add'>+    ret = close(ret);</div><div class='add'>+    check_err(ret, "close", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing remove");</div><div class='del'>-        ret = remove (testfile);</div><div class='del'>-        check_err (ret, "remove", 2);</div><div class='add'>+    fprintf(stdout, "Testing remove");</div><div class='add'>+    ret = remove(testfile);</div><div class='add'>+    check_err(ret, "remove", 2);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-run_attr_tests (char *testfile)</div><div class='add'>+run_attr_tests(char *testfile)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *res = NULL;</div><div class='del'>-        struct stat     buf;</div><div class='del'>-        struct statfs   sbuf;</div><div class='del'>-        struct statvfs  svbuf;</div><div class='del'>-</div><div class='del'>-        assert (testfile);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing chmod");</div><div class='del'>-        ret = chmod (testfile, 0);</div><div class='del'>-        check_err (ret, "chmod", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing chown");</div><div class='del'>-        ret = chown (testfile, 0, 0);</div><div class='del'>-        check_err (ret, "chown", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing link");</div><div class='del'>-        ret = link (testfile, testfile);</div><div class='del'>-        check_err (ret, "link", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing rename");</div><div class='del'>-        ret = rename (testfile, testfile);</div><div class='del'>-        check_err (ret, "rename", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing utimes");</div><div class='del'>-        ret = utimes (testfile, NULL);</div><div class='del'>-        check_err (ret, "utimes", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing utime");</div><div class='del'>-        ret = utime (testfile, NULL);</div><div class='del'>-        check_err (ret, "utime", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing unlink");</div><div class='del'>-        ret = unlink (testfile);</div><div class='del'>-        check_err (ret, "unlink", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing symlink");</div><div class='del'>-        ret = symlink (testfile, testfile);</div><div class='del'>-        check_err (ret, "symlink", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing readlink");</div><div class='del'>-        ret = readlink (testfile, testfile, 0);</div><div class='del'>-        check_err (ret, "readlink", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing realpath");</div><div class='del'>-        ret = 0;</div><div class='del'>-        res = realpath ((const char *)testfile, testfile);</div><div class='del'>-        if (!res)</div><div class='del'>-                ret = -1;</div><div class='del'>-        check_err (ret, "realpath", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing stat");</div><div class='del'>-        ret = stat (testfile, &amp;buf);</div><div class='del'>-        check_err (ret, "stat", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing lstat");</div><div class='del'>-        ret = lstat (testfile, &amp;buf);</div><div class='del'>-        check_err (ret, "lstat", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing statfs");</div><div class='del'>-        ret = statfs (testfile, &amp;sbuf);</div><div class='del'>-        check_err (ret, "statfs", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing statvfs");</div><div class='del'>-        ret = statvfs (testfile, &amp;svbuf);</div><div class='del'>-        check_err (ret, "statvfs", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing getxattr");</div><div class='del'>-        ret = getxattr (testfile, NULL, NULL, 0);</div><div class='del'>-        check_err (ret, "getxattr", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing lgetxattr");</div><div class='del'>-        ret = lgetxattr (testfile, NULL, NULL, 0);</div><div class='del'>-        check_err (ret, "lgetxattr", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing lchown");</div><div class='del'>-        ret = lchown (testfile, 0, 0);</div><div class='del'>-        check_err (ret, "lchown", 2);</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *res = NULL;</div><div class='add'>+    struct stat buf;</div><div class='add'>+    struct statfs sbuf;</div><div class='add'>+    struct statvfs svbuf;</div><div class='add'>+</div><div class='add'>+    assert(testfile);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing chmod");</div><div class='add'>+    ret = chmod(testfile, 0);</div><div class='add'>+    check_err(ret, "chmod", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing chown");</div><div class='add'>+    ret = chown(testfile, 0, 0);</div><div class='add'>+    check_err(ret, "chown", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing link");</div><div class='add'>+    ret = link(testfile, testfile);</div><div class='add'>+    check_err(ret, "link", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing rename");</div><div class='add'>+    ret = rename(testfile, testfile);</div><div class='add'>+    check_err(ret, "rename", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing utimes");</div><div class='add'>+    ret = utimes(testfile, NULL);</div><div class='add'>+    check_err(ret, "utimes", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing utime");</div><div class='add'>+    ret = utime(testfile, NULL);</div><div class='add'>+    check_err(ret, "utime", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing unlink");</div><div class='add'>+    ret = unlink(testfile);</div><div class='add'>+    check_err(ret, "unlink", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing symlink");</div><div class='add'>+    ret = symlink(testfile, testfile);</div><div class='add'>+    check_err(ret, "symlink", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing readlink");</div><div class='add'>+    ret = readlink(testfile, testfile, 0);</div><div class='add'>+    check_err(ret, "readlink", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing realpath");</div><div class='add'>+    ret = 0;</div><div class='add'>+    res = realpath((const char *)testfile, testfile);</div><div class='add'>+    if (!res)</div><div class='add'>+        ret = -1;</div><div class='add'>+    check_err(ret, "realpath", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing stat");</div><div class='add'>+    ret = stat(testfile, &amp;buf);</div><div class='add'>+    check_err(ret, "stat", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing lstat");</div><div class='add'>+    ret = lstat(testfile, &amp;buf);</div><div class='add'>+    check_err(ret, "lstat", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing statfs");</div><div class='add'>+    ret = statfs(testfile, &amp;sbuf);</div><div class='add'>+    check_err(ret, "statfs", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing statvfs");</div><div class='add'>+    ret = statvfs(testfile, &amp;svbuf);</div><div class='add'>+    check_err(ret, "statvfs", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing getxattr");</div><div class='add'>+    ret = getxattr(testfile, NULL, NULL, 0);</div><div class='add'>+    check_err(ret, "getxattr", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing lgetxattr");</div><div class='add'>+    ret = lgetxattr(testfile, NULL, NULL, 0);</div><div class='add'>+    check_err(ret, "lgetxattr", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing lchown");</div><div class='add'>+    ret = lchown(testfile, 0, 0);</div><div class='add'>+    check_err(ret, "lchown", 2);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-run_dev_tests (char *testfile)</div><div class='add'>+run_dev_tests(char *testfile)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        assert (testfile);</div><div class='add'>+    assert(testfile);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing mknod");</div><div class='del'>-        ret = mknod (testfile, 0, 0);</div><div class='del'>-        check_err (ret, "mknod", 2);</div><div class='add'>+    fprintf(stdout, "Testing mknod");</div><div class='add'>+    ret = mknod(testfile, 0, 0);</div><div class='add'>+    check_err(ret, "mknod", 2);</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "Testing mkfifo");</div><div class='del'>-        ret = mkfifo (testfile, 0);</div><div class='del'>-        check_err (ret, "mkfifo", 2);</div><div class='del'>-        return 0;</div><div class='add'>+    fprintf(stdout, "Testing mkfifo");</div><div class='add'>+    ret = mkfifo(testfile, 0);</div><div class='add'>+    check_err(ret, "mkfifo", 2);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-run_dir_tests (char *testpath)</div><div class='add'>+run_dir_tests(char *testpath)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        DIR             *dh = NULL;</div><div class='del'>-        struct dirent   *dire = NULL;</div><div class='del'>-</div><div class='del'>-        assert (testpath);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing mkdir");</div><div class='del'>-        ret = mkdir (testpath, 0);</div><div class='del'>-        check_err (ret, "mkdir", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing rmdir");</div><div class='del'>-        ret = rmdir (testpath);</div><div class='del'>-        check_err (ret, "rmdir", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing opendir");</div><div class='del'>-        ret = 0;</div><div class='del'>-        dh = opendir (testpath);</div><div class='del'>-        if (!dh)</div><div class='del'>-                ret = -1;</div><div class='del'>-        check_err (ret, "opendir", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing readdir");</div><div class='del'>-        ret = 0;</div><div class='del'>-        dire = readdir (dh);</div><div class='del'>-        if (!dire)</div><div class='del'>-                ret = -1;</div><div class='del'>-        check_err (ret, "readdir", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing readdir_r");</div><div class='del'>-        ret = readdir_r (dh, dire, &amp;dire);</div><div class='del'>-        check_err (ret, "readdir_r", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing rewinddir");</div><div class='del'>-        rewinddir (dh);</div><div class='del'>-        check_err (-1, "rewinddir", 1);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing seekdir");</div><div class='del'>-        seekdir (dh, 0);</div><div class='del'>-        check_err (-1, "seekdir", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing telldir");</div><div class='del'>-        ret = telldir (dh);</div><div class='del'>-        check_err (ret, "telldir", 2);</div><div class='del'>-</div><div class='del'>-        fprintf (stdout, "Testing closedir");</div><div class='del'>-        ret = closedir (dh);</div><div class='del'>-        check_err (ret, "closedir", 2);</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    DIR *dh = NULL;</div><div class='add'>+    struct dirent *dire = NULL;</div><div class='add'>+</div><div class='add'>+    assert(testpath);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing mkdir");</div><div class='add'>+    ret = mkdir(testpath, 0);</div><div class='add'>+    check_err(ret, "mkdir", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing rmdir");</div><div class='add'>+    ret = rmdir(testpath);</div><div class='add'>+    check_err(ret, "rmdir", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing opendir");</div><div class='add'>+    ret = 0;</div><div class='add'>+    dh = opendir(testpath);</div><div class='add'>+    if (!dh)</div><div class='add'>+        ret = -1;</div><div class='add'>+    check_err(ret, "opendir", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing readdir");</div><div class='add'>+    ret = 0;</div><div class='add'>+    dire = readdir(dh);</div><div class='add'>+    if (!dire)</div><div class='add'>+        ret = -1;</div><div class='add'>+    check_err(ret, "readdir", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing readdir_r");</div><div class='add'>+    ret = readdir_r(dh, dire, &amp;dire);</div><div class='add'>+    check_err(ret, "readdir_r", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing rewinddir");</div><div class='add'>+    rewinddir(dh);</div><div class='add'>+    check_err(-1, "rewinddir", 1);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing seekdir");</div><div class='add'>+    seekdir(dh, 0);</div><div class='add'>+    check_err(-1, "seekdir", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing telldir");</div><div class='add'>+    ret = telldir(dh);</div><div class='add'>+    check_err(ret, "telldir", 2);</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "Testing closedir");</div><div class='add'>+    ret = closedir(dh);</div><div class='add'>+    check_err(ret, "closedir", 2);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char            *testpath = NULL;</div><div class='del'>-        int             x = 0;</div><div class='del'>-</div><div class='del'>-        for (;x &lt; argc; ++x) {</div><div class='del'>-                if (strcmp (argv[x], "--path") == 0) {</div><div class='del'>-                        testpath = argv[x+1];</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    char *testpath = NULL;</div><div class='add'>+    int x = 0;</div><div class='ctx'> </div><div class='add'>+    for (; x &lt; argc; ++x) {</div><div class='add'>+        if (strcmp(argv[x], "--path") == 0) {</div><div class='add'>+            testpath = argv[x + 1];</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!testpath) {</div><div class='del'>-                fprintf (stderr, "--path not specified\n");</div><div class='del'>-                usage (stderr);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!testpath) {</div><div class='add'>+        fprintf(stderr, "--path not specified\n");</div><div class='add'>+        usage(stderr);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        run_file_tests (testpath);</div><div class='del'>-        run_dir_tests (testpath);</div><div class='del'>-        run_attr_tests (testpath);</div><div class='del'>-        run_dev_tests (testpath);</div><div class='add'>+    run_file_tests(testpath);</div><div class='add'>+    run_dir_tests(testpath);</div><div class='add'>+    run_attr_tests(testpath);</div><div class='add'>+    run_dev_tests(testpath);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/extras/test/open-fd-tests.c b/extras/test/open-fd-tests.c<br/>index ab902697228..509952b4180 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/test/open-fd-tests.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/test/open-fd-tests.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/test/open-fd-tests.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/test/open-fd-tests.c</a></div><div class='hunk'>@@ -9,56 +9,59 @@</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int          ret      = -1;</div><div class='del'>-        int          fd       = 0;</div><div class='del'>-        char        *filename = NULL;</div><div class='del'>-        int          loop     = 0;</div><div class='del'>-        struct stat  stbuf    = {0,};</div><div class='del'>-        char         string[1024] = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    int loop = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char string[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (argc &gt; 1)</div><div class='del'>-                filename = argv[1];</div><div class='add'>+    if (argc &gt; 1)</div><div class='add'>+        filename = argv[1];</div><div class='ctx'> </div><div class='del'>-        if (!filename)</div><div class='del'>-                filename = "temp-fd-test-file";</div><div class='add'>+    if (!filename)</div><div class='add'>+        filename = "temp-fd-test-file";</div><div class='ctx'> </div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT|O_TRUNC);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fd = 0;</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (loop &lt; 1000) {</div><div class='del'>-                /* Use it as a mechanism to test time delays */</div><div class='del'>-                memset (string, 0, 1024);</div><div class='del'>-                scanf ("%s", string);</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT | O_TRUNC);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fd = 0;</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = write (fd, string, strlen (string));</div><div class='del'>-                if (ret != strlen (string)) {</div><div class='del'>-                        fprintf (stderr, "write failed : %s (%s %d)\n",</div><div class='del'>-                                 strerror (errno), string, loop);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (loop &lt; 1000) {</div><div class='add'>+        /* Use it as a mechanism to test time delays */</div><div class='add'>+        memset(string, 0, 1024);</div><div class='add'>+        scanf("%s", string);</div><div class='ctx'> </div><div class='del'>-                ret = write (fd, "\n", 1);</div><div class='del'>-                if (ret != 1) {</div><div class='del'>-                        fprintf (stderr, "write failed : %s (%d)\n",</div><div class='del'>-                                 strerror (errno), loop);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = write(fd, string, strlen(string));</div><div class='add'>+        if (ret != strlen(string)) {</div><div class='add'>+            fprintf(stderr, "write failed : %s (%s %d)\n", strerror(errno),</div><div class='add'>+                    string, loop);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                loop++;</div><div class='add'>+        ret = write(fd, "\n", 1);</div><div class='add'>+        if (ret != 1) {</div><div class='add'>+            fprintf(stderr, "write failed : %s (%d)\n", strerror(errno), loop);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fprintf (stdout, "finishing the test after %d loops\n", loop);</div><div class='add'>+        loop++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fprintf(stdout, "finishing the test after %d loops\n", loop);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                close (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/extras/test/test-ffop.c b/extras/test/test-ffop.c<br/>index 67c6a0fb33d..1d9c125db67 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/extras/test/test-ffop.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>extras/test/test-ffop.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/extras/test/test-ffop.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>extras/test/test-ffop.c</a></div><div class='hunk'>@@ -8,772 +8,820 @@</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> #include &lt;dirent.h&gt;</div><div class='ctx'> </div><div class='del'>-int fd_based_fops_1 (char *filename); //for fd based fops after unlink</div><div class='del'>-int fd_based_fops_2 (char *filename); //for fd based fops before unlink</div><div class='del'>-int dup_fd_based_fops (char *filename); // fops based on fd after dup</div><div class='del'>-int path_based_fops (char *filename); //for fops based on path</div><div class='del'>-int dir_based_fops (char *filename); // for fops which operate on directory</div><div class='del'>-int link_based_fops (char *filename); //for fops which operate in link files (symlinks)</div><div class='del'>-int test_open_modes (char *filename); // to test open syscall with open modes available.</div><div class='del'>-int generic_open_read_write (char *filename, int flag); // generic function which does open write and read.</div><div class='add'>+int</div><div class='add'>+fd_based_fops_1(char *filename);  // for fd based fops after unlink</div><div class='add'>+int</div><div class='add'>+fd_based_fops_2(char *filename);  // for fd based fops before unlink</div><div class='add'>+int</div><div class='add'>+dup_fd_based_fops(char *filename);  // fops based on fd after dup</div><div class='add'>+int</div><div class='add'>+path_based_fops(char *filename);  // for fops based on path</div><div class='add'>+int</div><div class='add'>+dir_based_fops(char *filename);  // for fops which operate on directory</div><div class='add'>+int</div><div class='add'>+link_based_fops(</div><div class='add'>+    char *filename);  // for fops which operate in link files (symlinks)</div><div class='add'>+int</div><div class='add'>+test_open_modes(</div><div class='add'>+    char *filename);  // to test open syscall with open modes available.</div><div class='add'>+int</div><div class='add'>+generic_open_read_write(</div><div class='add'>+    char *filename,</div><div class='add'>+    int flag);  // generic function which does open write and read.</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int   ret           = -1;</div><div class='del'>-        char  filename[255] = {0,};</div><div class='del'>-</div><div class='del'>-        if (argc &gt; 1)</div><div class='del'>-                strcpy(filename, argv[1]);</div><div class='del'>-        else</div><div class='del'>-                strcpy(filename, "temp-xattr-test-file");</div><div class='del'>-</div><div class='del'>-        ret = fd_based_fops_1 (strcat(filename, "_1"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "fd based file operation 1 failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "fd based file operation 1 passed\n");</div><div class='del'>-</div><div class='del'>-        ret = fd_based_fops_2 (strcat(filename, "_2"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "fd based file operation 2 failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "fd based file operation 2 passed\n");</div><div class='del'>-</div><div class='del'>-        ret = dup_fd_based_fops (strcat (filename, "_3"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "dup fd based file operation failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "dup fd based file operation passed\n");</div><div class='del'>-</div><div class='del'>-        ret = path_based_fops (strcat (filename, "_4"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "path based file operation failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "path based file operation passed\n");</div><div class='del'>-</div><div class='del'>-        ret = dir_based_fops (strcat (filename, "_5"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "directory based file operation failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "directory based file operation passed\n");</div><div class='del'>-</div><div class='del'>-        ret = link_based_fops (strcat (filename, "_5"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "link based file operation failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "link based file operation passed\n");</div><div class='del'>-</div><div class='del'>-        ret = test_open_modes (strcat (filename, "_5"));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "testing modes of 'open' call failed\n");</div><div class='del'>-        else</div><div class='del'>-                fprintf (stdout, "testing modes of 'open' call passed\n");</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char filename[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (argc &gt; 1)</div><div class='add'>+        strcpy(filename, argv[1]);</div><div class='add'>+    else</div><div class='add'>+        strcpy(filename, "temp-xattr-test-file");</div><div class='add'>+</div><div class='add'>+    ret = fd_based_fops_1(strcat(filename, "_1"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "fd based file operation 1 failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "fd based file operation 1 passed\n");</div><div class='add'>+</div><div class='add'>+    ret = fd_based_fops_2(strcat(filename, "_2"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "fd based file operation 2 failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "fd based file operation 2 passed\n");</div><div class='add'>+</div><div class='add'>+    ret = dup_fd_based_fops(strcat(filename, "_3"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "dup fd based file operation failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "dup fd based file operation passed\n");</div><div class='add'>+</div><div class='add'>+    ret = path_based_fops(strcat(filename, "_4"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "path based file operation failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "path based file operation passed\n");</div><div class='add'>+</div><div class='add'>+    ret = dir_based_fops(strcat(filename, "_5"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "directory based file operation failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "directory based file operation passed\n");</div><div class='add'>+</div><div class='add'>+    ret = link_based_fops(strcat(filename, "_5"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "link based file operation failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "link based file operation passed\n");</div><div class='add'>+</div><div class='add'>+    ret = test_open_modes(strcat(filename, "_5"));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "testing modes of 'open' call failed\n");</div><div class='add'>+    else</div><div class='add'>+        fprintf(stdout, "testing modes of 'open' call passed\n");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fd_based_fops_1 (char *filename)</div><div class='add'>+fd_based_fops_1(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         fd        = 0;</div><div class='del'>-        int         ret       = -1;</div><div class='del'>-        struct stat stbuf     = {0,};</div><div class='del'>-        char        wstr[50]  = {0,};</div><div class='del'>-        char        rstr[50]  = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fd = 0;</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = unlink (filename);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "unlink failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (wstr, "This is my string\n");</div><div class='del'>-        ret = write (fd, wstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lseek failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (fd, rstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "read failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = memcmp (rstr, wstr, strlen (wstr));</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "read returning junk\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ftruncate (fd, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "ftruncate failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fstat (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchmod (fd, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchown (fd, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsetxattr (fd, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fdatasync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fdatasync failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = flistxattr (fd, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "flistxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fgetxattr (fd, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "fgetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fremovexattr (fd, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fremovexattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char wstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fd = 0;</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = unlink(filename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "unlink failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(wstr, "This is my string\n");</div><div class='add'>+    ret = write(fd, wstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lseek failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(fd, rstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "read failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = memcmp(rstr, wstr, strlen(wstr));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "read returning junk\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ftruncate(fd, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "ftruncate failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fstat(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchmod(fd, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchmod failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchown(fd, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchown failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsetxattr(fd, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fdatasync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fdatasync failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = flistxattr(fd, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "flistxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fgetxattr(fd, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "fgetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fremovexattr(fd, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fremovexattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                close (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fd_based_fops_2 (char *filename)</div><div class='add'>+fd_based_fops_2(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         fd    = 0;</div><div class='del'>-        int         ret   = -1;</div><div class='del'>-        struct stat stbuf = {0,};</div><div class='del'>-        char        wstr[50]  = {0,};</div><div class='del'>-        char        rstr[50]  = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fd = 0;</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ftruncate (fd, 0);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "ftruncate failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (wstr, "This is my second string\n");</div><div class='del'>-        ret = write (fd, wstr, strlen (wstr));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lseek failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (fd, rstr, strlen (wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "read failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = memcmp (rstr, wstr, strlen (wstr));</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "read returning junk\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fstat (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchmod (fd, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchown (fd, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsetxattr (fd, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fdatasync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fdatasync failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = flistxattr (fd, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "flistxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fgetxattr (fd, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "fgetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fremovexattr (fd, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fremovexattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char wstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fd = 0;</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ftruncate(fd, 0);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "ftruncate failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(wstr, "This is my second string\n");</div><div class='add'>+    ret = write(fd, wstr, strlen(wstr));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lseek failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(fd, rstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "read failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = memcmp(rstr, wstr, strlen(wstr));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "read returning junk\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fstat(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchmod(fd, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchmod failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchown(fd, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchown failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsetxattr(fd, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fdatasync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fdatasync failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = flistxattr(fd, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "flistxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fgetxattr(fd, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "fgetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fremovexattr(fd, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fremovexattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                close (fd);</div><div class='del'>-        unlink (filename);</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='add'>+    unlink(filename);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-path_based_fops (char *filename)</div><div class='add'>+path_based_fops(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         ret              = -1;</div><div class='del'>-        int         fd               = 0;</div><div class='del'>-        struct stat stbuf            = {0,};</div><div class='del'>-        char        newfilename[255] = {0,};</div><div class='del'>-</div><div class='del'>-        fd = creat (filename, 0644);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "creat failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = truncate (filename, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "truncate failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = stat (filename, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chmod (filename, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chmod failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chown (filename, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chown failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = setxattr (filename, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "setxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = listxattr (filename, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "listxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = getxattr (filename, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "getxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = removexattr (filename, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "removexattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = access (filename, R_OK|W_OK);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "access failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newfilename, filename);</div><div class='del'>-        strcat(newfilename, "_new");</div><div class='del'>-        ret = rename (filename, newfilename);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "rename failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        unlink (newfilename);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char newfilename[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = creat(filename, 0644);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "creat failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = truncate(filename, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "truncate failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = stat(filename, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chmod(filename, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chmod failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chown(filename, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chown failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = setxattr(filename, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "setxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = listxattr(filename, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "listxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = getxattr(filename, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "getxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = removexattr(filename, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "removexattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = access(filename, R_OK | W_OK);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "access failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newfilename, filename);</div><div class='add'>+    strcat(newfilename, "_new");</div><div class='add'>+    ret = rename(filename, newfilename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "rename failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    unlink(newfilename);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                close (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='ctx'> </div><div class='del'>-        unlink (filename);</div><div class='del'>-        return ret;</div><div class='add'>+    unlink(filename);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dup_fd_based_fops (char *filename)</div><div class='add'>+dup_fd_based_fops(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         fd        = 0;</div><div class='del'>-        int         newfd     = 0;</div><div class='del'>-        int         ret       = -1;</div><div class='del'>-        struct stat stbuf     = {0,};</div><div class='del'>-        char        wstr[50]  = {0,};</div><div class='del'>-        char        rstr[50]  = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fd = 0;</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newfd = dup (fd);</div><div class='del'>-        if (newfd &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "dup failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        close (fd);</div><div class='del'>-</div><div class='del'>-        strcpy (wstr, "This is my string\n");</div><div class='del'>-        ret = write (newfd, wstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lseek (newfd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lseek failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (newfd, rstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "read failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = memcmp (rstr, wstr, strlen (wstr));</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "read returning junk\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ftruncate (newfd, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "ftruncate failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fstat (newfd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchmod (newfd, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchown (newfd, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsync (newfd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsetxattr (newfd, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fdatasync (newfd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fdatasync failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = flistxattr (newfd, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "flistxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fgetxattr (newfd, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "fgetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fremovexattr (newfd, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fremovexattr failed : %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int newfd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char wstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fd = 0;</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newfd = dup(fd);</div><div class='add'>+    if (newfd &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "dup failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='add'>+</div><div class='add'>+    strcpy(wstr, "This is my string\n");</div><div class='add'>+    ret = write(newfd, wstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lseek(newfd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lseek failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(newfd, rstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "read failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = memcmp(rstr, wstr, strlen(wstr));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "read returning junk\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ftruncate(newfd, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "ftruncate failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fstat(newfd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchmod(newfd, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchmod failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchown(newfd, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchown failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsync(newfd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsetxattr(newfd, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fdatasync(newfd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fdatasync failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = flistxattr(newfd, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "flistxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fgetxattr(newfd, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "fgetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fremovexattr(newfd, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fremovexattr failed : %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (newfd)</div><div class='del'>-                close (newfd);</div><div class='del'>-        ret = unlink (filename);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                fprintf (stderr, "unlink failed : %s\n", strerror (errno));</div><div class='add'>+    if (newfd)</div><div class='add'>+        close(newfd);</div><div class='add'>+    ret = unlink(filename);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        fprintf(stderr, "unlink failed : %s\n", strerror(errno));</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dir_based_fops (char *dirname)</div><div class='add'>+dir_based_fops(char *dirname)</div><div class='ctx'> {</div><div class='del'>-        int            ret           = -1;</div><div class='del'>-        DIR           *dp            = NULL;</div><div class='del'>-        char           buff[255]     = {0,};</div><div class='del'>-        struct dirent *dbuff         = {0,};</div><div class='del'>-        struct stat    stbuff        = {0,};</div><div class='del'>-        char           newdname[255] = {0,};</div><div class='del'>-        char          *cwd           = NULL;</div><div class='del'>-</div><div class='del'>-        ret = mkdir (dirname, 0755);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "mkdir failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dp = opendir (dirname);</div><div class='del'>-        if (dp == NULL) {</div><div class='del'>-                fprintf (stderr, "opendir failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dbuff = readdir (dp);</div><div class='del'>-        if (NULL == dbuff) {</div><div class='del'>-                fprintf (stderr, "readdir failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = closedir (dp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "closedir failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = stat (dirname, &amp;stbuff);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chmod (dirname, 0744);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chmod failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chown (dirname, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chmod failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = setxattr (dirname, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "setxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = listxattr (dirname, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "listxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = getxattr (dirname, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "getxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = removexattr (dirname, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "removexattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newdname, dirname);</div><div class='del'>-        strcat (newdname, "/../");</div><div class='del'>-        ret = chdir (newdname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chdir failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cwd = getcwd (buff, 255);</div><div class='del'>-        if (NULL == cwd) {</div><div class='del'>-                fprintf (stderr, "getcwd failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newdname, dirname);</div><div class='del'>-        strcat (newdname, "new");</div><div class='del'>-        ret = rename (dirname, newdname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "rename failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rmdir (newdname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "rmdir failed: %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    DIR *dp = NULL;</div><div class='add'>+    char buff[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct dirent *dbuff = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuff = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char newdname[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *cwd = NULL;</div><div class='add'>+</div><div class='add'>+    ret = mkdir(dirname, 0755);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "mkdir failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dp = opendir(dirname);</div><div class='add'>+    if (dp == NULL) {</div><div class='add'>+        fprintf(stderr, "opendir failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dbuff = readdir(dp);</div><div class='add'>+    if (NULL == dbuff) {</div><div class='add'>+        fprintf(stderr, "readdir failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = closedir(dp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "closedir failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = stat(dirname, &amp;stbuff);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chmod(dirname, 0744);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chmod failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chown(dirname, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chmod failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = setxattr(dirname, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "setxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = listxattr(dirname, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "listxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = getxattr(dirname, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "getxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = removexattr(dirname, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "removexattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newdname, dirname);</div><div class='add'>+    strcat(newdname, "/../");</div><div class='add'>+    ret = chdir(newdname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chdir failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cwd = getcwd(buff, 255);</div><div class='add'>+    if (NULL == cwd) {</div><div class='add'>+        fprintf(stderr, "getcwd failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newdname, dirname);</div><div class='add'>+    strcat(newdname, "new");</div><div class='add'>+    ret = rename(dirname, newdname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "rename failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rmdir(newdname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "rmdir failed: %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        rmdir (dirname);</div><div class='del'>-        return ret;</div><div class='add'>+    rmdir(dirname);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-link_based_fops (char *filename)</div><div class='add'>+link_based_fops(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         ret           = -1;</div><div class='del'>-        int         fd            = 0;</div><div class='del'>-        char        newname[255]  = {0,};</div><div class='del'>-        char        linkname[255] = {0,};</div><div class='del'>-        struct stat lstbuf        = {0,};</div><div class='del'>-</div><div class='del'>-        fd = creat (filename, 0644);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fd = 0;</div><div class='del'>-                fprintf (stderr, "creat failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newname, filename);</div><div class='del'>-        strcat (newname, "_hlink");</div><div class='del'>-        ret = link (filename, newname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "link failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = unlink (filename);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "unlink failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (linkname, filename);</div><div class='del'>-        strcat (linkname, "_slink");</div><div class='del'>-        ret = symlink (newname, linkname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "symlink failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lstat (linkname, &amp;lstbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lstbuf failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lchown (linkname, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lchown failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lsetxattr (linkname, "trusted.lxattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lsetxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = llistxattr (linkname, NULL, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "llistxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lgetxattr (linkname, "trusted.lxattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "lgetxattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lremovexattr (linkname, "trusted.lxattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lremovexattr failed: %s\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    char newname[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char linkname[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat lstbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = creat(filename, 0644);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fd = 0;</div><div class='add'>+        fprintf(stderr, "creat failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newname, filename);</div><div class='add'>+    strcat(newname, "_hlink");</div><div class='add'>+    ret = link(filename, newname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "link failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = unlink(filename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "unlink failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(linkname, filename);</div><div class='add'>+    strcat(linkname, "_slink");</div><div class='add'>+    ret = symlink(newname, linkname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "symlink failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lstat(linkname, &amp;lstbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lstbuf failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lchown(linkname, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lchown failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lsetxattr(linkname, "trusted.lxattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lsetxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = llistxattr(linkname, NULL, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "llistxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lgetxattr(linkname, "trusted.lxattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "lgetxattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lremovexattr(linkname, "trusted.lxattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lremovexattr failed: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                close(fd);</div><div class='del'>-        unlink (linkname);</div><div class='del'>-        unlink (newname);</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='add'>+    unlink(linkname);</div><div class='add'>+    unlink(newname);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-test_open_modes (char *filename)</div><div class='add'>+test_open_modes(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_WRONLY);</div><div class='del'>-        if (3 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_CREAT|O_WRONLY failed: \n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_RDWR);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-               fprintf (stderr, "flag O_CREAT|O_RDWR failed\n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_RDONLY);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "flag O_CREAT|O_RDONLY failed\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_WRONLY);</div><div class='del'>-        if (3 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_WRONLY failed\n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_RDWR);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_RDWR failed\n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_RDONLY);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_RDONLY failed\n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_TRUNC|O_WRONLY);</div><div class='del'>-        if (3 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_TRUNC|O_WRONLY failed\n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_WRONLY);</div><div class='add'>+    if (3 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_WRONLY failed: \n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_RDWR);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_RDWR failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_RDONLY);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_RDONLY failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_WRONLY);</div><div class='add'>+    if (3 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_WRONLY failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_RDWR);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_RDWR failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_RDONLY);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_RDONLY failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_TRUNC | O_WRONLY);</div><div class='add'>+    if (3 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_TRUNC|O_WRONLY failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if 0 /* undefined behaviour, unable to reliably test */</div><div class='ctx'>         ret = creat (filename, 0644);</div><div class='hunk'>@@ -785,84 +833,88 @@ test_open_modes (char *filename)</div><div class='ctx'>         }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_RDWR|O_SYNC);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_CREAT|O_RDWR|O_SYNC failed\n");</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_RDWR | O_SYNC);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_RDWR|O_SYNC failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_EXCL);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-                fprintf (stderr, "flag O_CREAT|O_EXCL failed\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_EXCL);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_EXCL failed\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int generic_open_read_write (char *filename, int flag)</div><div class='add'>+int</div><div class='add'>+generic_open_read_write(char *filename, int flag)</div><div class='ctx'> {</div><div class='del'>-        int  fd          = 0;</div><div class='del'>-        int  ret         = -1;</div><div class='del'>-        char wstring[50] = {0,};</div><div class='del'>-        char rstring[50] = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, flag);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                if (flag == O_CREAT|O_EXCL &amp;&amp; errno == EEXIST) {</div><div class='del'>-                        unlink (filename);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        fd = 0;</div><div class='del'>-                        fprintf (stderr, "open failed: %s\n", strerror (errno));</div><div class='del'>-                        return 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (wstring, "My string to write\n");</div><div class='del'>-        ret = write (fd, wstring, strlen(wstring));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                if (errno != EBADF) {</div><div class='del'>-                        fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                        close (fd);</div><div class='del'>-                        unlink(filename);</div><div class='del'>-                        return 2;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                close (fd);</div><div class='del'>-                unlink(filename);</div><div class='del'>-                return 4;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (fd, rstring, strlen(wstring));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                close (fd);</div><div class='del'>-                unlink (filename);</div><div class='del'>-                return 3;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Compare the rstring with wstring. But we do not want to return</div><div class='del'>-         * error when the flag is either O_RDONLY, O_CREAT|O_RDONLY or</div><div class='del'>-         * O_TRUNC|O_RDONLY. Because in that case we are not writing</div><div class='del'>-         * anything to the file.*/</div><div class='del'>-</div><div class='del'>-        ret = memcmp (wstring, rstring, strlen (wstring));</div><div class='del'>-        if (0 != ret  &amp;&amp; !(flag == O_CREAT|O_RDONLY || flag == O_RDONLY ||\</div><div class='del'>-            flag == O_TRUNC|O_RDONLY)) {</div><div class='del'>-                fprintf (stderr, "read is returning junk\n");</div><div class='del'>-                close (fd);</div><div class='del'>-                unlink (filename);</div><div class='del'>-                return 4;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        close (fd);</div><div class='del'>-        unlink (filename);</div><div class='del'>-        return 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char wstring[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstring[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, flag);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        if (flag == O_CREAT | O_EXCL &amp;&amp; errno == EEXIST) {</div><div class='add'>+            unlink(filename);</div><div class='add'>+            return 0;</div><div class='add'>+        } else {</div><div class='add'>+            fd = 0;</div><div class='add'>+            fprintf(stderr, "open failed: %s\n", strerror(errno));</div><div class='add'>+            return 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(wstring, "My string to write\n");</div><div class='add'>+    ret = write(fd, wstring, strlen(wstring));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        if (errno != EBADF) {</div><div class='add'>+            fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+            close(fd);</div><div class='add'>+            unlink(filename);</div><div class='add'>+            return 2;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        close(fd);</div><div class='add'>+        unlink(filename);</div><div class='add'>+        return 4;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(fd, rstring, strlen(wstring));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        close(fd);</div><div class='add'>+        unlink(filename);</div><div class='add'>+        return 3;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Compare the rstring with wstring. But we do not want to return</div><div class='add'>+     * error when the flag is either O_RDONLY, O_CREAT|O_RDONLY or</div><div class='add'>+     * O_TRUNC|O_RDONLY. Because in that case we are not writing</div><div class='add'>+     * anything to the file.*/</div><div class='add'>+</div><div class='add'>+    ret = memcmp(wstring, rstring, strlen(wstring));</div><div class='add'>+    if (0 != ret &amp;&amp; !(flag == O_CREAT | O_RDONLY || flag == O_RDONLY ||</div><div class='add'>+                      flag == O_TRUNC | O_RDONLY)) {</div><div class='add'>+        fprintf(stderr, "read is returning junk\n");</div><div class='add'>+        close(fd);</div><div class='add'>+        unlink(filename);</div><div class='add'>+        return 4;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='add'>+    unlink(filename);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/geo-replication/src/gsyncd.c b/geo-replication/src/gsyncd.c<br/>index df2ee35b037..77af6628d14 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/geo-replication/src/gsyncd.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>geo-replication/src/gsyncd.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/geo-replication/src/gsyncd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>geo-replication/src/gsyncd.c</a></div><div class='hunk'>@@ -42,359 +42,362 @@</div><div class='ctx'> int restricted = 0;</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-duplexpand (void **buf, size_t tsiz, size_t *len)</div><div class='add'>+duplexpand(void **buf, size_t tsiz, size_t *len)</div><div class='ctx'> {</div><div class='del'>-        size_t osiz = tsiz * *len;</div><div class='del'>-        char *p = realloc (*buf, osiz &lt;&lt; 1);</div><div class='del'>-        if (!p) {</div><div class='del'>-                free(*buf);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    size_t osiz = tsiz * *len;</div><div class='add'>+    char *p = realloc(*buf, osiz &lt;&lt; 1);</div><div class='add'>+    if (!p) {</div><div class='add'>+        free(*buf);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (p + osiz, 0, osiz);</div><div class='del'>-        *buf = p;</div><div class='del'>-        *len &lt;&lt;= 1;</div><div class='add'>+    memset(p + osiz, 0, osiz);</div><div class='add'>+    *buf = p;</div><div class='add'>+    *len &lt;&lt;= 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-str2argv (char *str, char ***argv)</div><div class='add'>+str2argv(char *str, char ***argv)</div><div class='ctx'> {</div><div class='del'>-        char *p         = NULL;</div><div class='del'>-        char *savetok   = NULL;</div><div class='del'>-        char *temp      = NULL;</div><div class='del'>-        char *temp1     = NULL;</div><div class='del'>-        int argc        = 0;</div><div class='del'>-        size_t argv_len = 32;</div><div class='del'>-        int ret         = 0;</div><div class='del'>-        int i           = 0;</div><div class='del'>-</div><div class='del'>-        assert (str);</div><div class='del'>-        temp = str = strdup (str);</div><div class='del'>-        if (!str)</div><div class='add'>+    char *p = NULL;</div><div class='add'>+    char *savetok = NULL;</div><div class='add'>+    char *temp = NULL;</div><div class='add'>+    char *temp1 = NULL;</div><div class='add'>+    int argc = 0;</div><div class='add'>+    size_t argv_len = 32;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    assert(str);</div><div class='add'>+    temp = str = strdup(str);</div><div class='add'>+    if (!str)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    *argv = calloc(argv_len, sizeof(**argv));</div><div class='add'>+    if (!*argv)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    while ((p = strtok_r(str, " ", &amp;savetok))) {</div><div class='add'>+        str = NULL;</div><div class='add'>+</div><div class='add'>+        argc++;</div><div class='add'>+        if (argc == argv_len) {</div><div class='add'>+            ret = duplexpand((void *)argv, sizeof(**argv), &amp;argv_len);</div><div class='add'>+            if (ret == -1)</div><div class='ctx'>                 goto error;</div><div class='del'>-</div><div class='del'>-        *argv = calloc (argv_len, sizeof (**argv));</div><div class='del'>-        if (!*argv)</div><div class='del'>-                goto error;</div><div class='del'>-</div><div class='del'>-        while ((p = strtok_r (str, " ", &amp;savetok))) {</div><div class='del'>-                str = NULL;</div><div class='del'>-</div><div class='del'>-                argc++;</div><div class='del'>-                if (argc == argv_len) {</div><div class='del'>-                        ret = duplexpand ((void *)argv,</div><div class='del'>-                                          sizeof (**argv),</div><div class='del'>-                                          &amp;argv_len);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto error;</div><div class='del'>-                }</div><div class='del'>-                temp1 = strdup (p);</div><div class='del'>-                if (!temp1)</div><div class='del'>-                        goto error;</div><div class='del'>-                (*argv)[argc - 1] = temp1;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        free(temp);</div><div class='del'>-        return argc;</div><div class='del'>-</div><div class='del'>- error:</div><div class='del'>-        fprintf (stderr, "out of memory\n");</div><div class='del'>-        free(temp);</div><div class='del'>-        for (i = 0; i &lt; argc - 1; i++)</div><div class='del'>-                free((*argv)[i]);</div><div class='del'>-        free(*argv);</div><div class='del'>-        return -1;</div><div class='add'>+        temp1 = strdup(p);</div><div class='add'>+        if (!temp1)</div><div class='add'>+            goto error;</div><div class='add'>+        (*argv)[argc - 1] = temp1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(temp);</div><div class='add'>+    return argc;</div><div class='add'>+</div><div class='add'>+error:</div><div class='add'>+    fprintf(stderr, "out of memory\n");</div><div class='add'>+    free(temp);</div><div class='add'>+    for (i = 0; i &lt; argc - 1; i++)</div><div class='add'>+        free((*argv)[i]);</div><div class='add'>+    free(*argv);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-invoke_gsyncd (int argc, char **argv)</div><div class='add'>+invoke_gsyncd(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int i                      = 0;</div><div class='del'>-        int j                      = 0;</div><div class='del'>-        char *nargv[argc + 4];</div><div class='del'>-        char *python = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    char *nargv[argc + 4];</div><div class='add'>+    char *python = NULL;</div><div class='ctx'> </div><div class='del'>-        if (chdir ("/") == -1)</div><div class='del'>-                goto error;</div><div class='add'>+    if (chdir("/") == -1)</div><div class='add'>+        goto error;</div><div class='ctx'> </div><div class='del'>-        j = 0;</div><div class='del'>-        python = getenv("PYTHON");</div><div class='del'>-        if(!python)</div><div class='del'>-                python = PYTHON;</div><div class='del'>-        nargv[j++] = python;</div><div class='del'>-        nargv[j++] = GSYNCD_PREFIX"/python/syncdaemon/"GSYNCD_PY;</div><div class='del'>-        for (i = 1; i &lt; argc; i++)</div><div class='del'>-                nargv[j++] = argv[i];</div><div class='add'>+    j = 0;</div><div class='add'>+    python = getenv("PYTHON");</div><div class='add'>+    if (!python)</div><div class='add'>+        python = PYTHON;</div><div class='add'>+    nargv[j++] = python;</div><div class='add'>+    nargv[j++] = GSYNCD_PREFIX "/python/syncdaemon/" GSYNCD_PY;</div><div class='add'>+    for (i = 1; i &lt; argc; i++)</div><div class='add'>+        nargv[j++] = argv[i];</div><div class='ctx'> </div><div class='del'>-        nargv[j++] = NULL;</div><div class='add'>+    nargv[j++] = NULL;</div><div class='ctx'> </div><div class='del'>-        execvp (python, nargv);</div><div class='add'>+    execvp(python, nargv);</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "exec of '%s' failed\n", python);</div><div class='del'>-        return 127;</div><div class='add'>+    fprintf(stderr, "exec of '%s' failed\n", python);</div><div class='add'>+    return 127;</div><div class='ctx'> </div><div class='del'>- error:</div><div class='del'>-        fprintf (stderr, "gsyncd initializaion failed\n");</div><div class='del'>-        return 1;</div><div class='add'>+error:</div><div class='add'>+    fprintf(stderr, "gsyncd initializaion failed\n");</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-find_gsyncd (pid_t pid, pid_t ppid, char *name, void *data)</div><div class='add'>+find_gsyncd(pid_t pid, pid_t ppid, char *name, void *data)</div><div class='ctx'> {</div><div class='del'>-        char buf[NAME_MAX * 2] = {0,};</div><div class='del'>-        char path[PATH_MAX]    = {0,};</div><div class='del'>-        char *p                = NULL;</div><div class='del'>-        int zeros              = 0;</div><div class='del'>-        int ret                = 0;</div><div class='del'>-        int fd                 = -1;</div><div class='del'>-        pid_t *pida            = (pid_t *)data;</div><div class='del'>-</div><div class='del'>-        if (ppid != pida[0])</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        snprintf (path, sizeof path, PROC"/%d/cmdline", pid);</div><div class='del'>-        fd = open (path, O_RDONLY);</div><div class='del'>-        if (fd == -1)</div><div class='del'>-                return 0;</div><div class='del'>-        ret = sys_read (fd, buf, sizeof (buf));</div><div class='del'>-        sys_close (fd);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                return 0;</div><div class='del'>-        for (zeros = 0, p = buf; zeros &lt; 2 &amp;&amp; p &lt; buf + ret; p++)</div><div class='del'>-                zeros += !*p;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-        switch (zeros) {</div><div class='add'>+    char buf[NAME_MAX * 2] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *p = NULL;</div><div class='add'>+    int zeros = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    pid_t *pida = (pid_t *)data;</div><div class='add'>+</div><div class='add'>+    if (ppid != pida[0])</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    snprintf(path, sizeof path, PROC "/%d/cmdline", pid);</div><div class='add'>+    fd = open(path, O_RDONLY);</div><div class='add'>+    if (fd == -1)</div><div class='add'>+        return 0;</div><div class='add'>+    ret = sys_read(fd, buf, sizeof(buf));</div><div class='add'>+    sys_close(fd);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        return 0;</div><div class='add'>+    for (zeros = 0, p = buf; zeros &lt; 2 &amp;&amp; p &lt; buf + ret; p++)</div><div class='add'>+        zeros += !*p;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    switch (zeros) {</div><div class='ctx'>         case 2:</div><div class='del'>-                if ((strcmp (basename (buf), basename (PYTHON)) ||</div><div class='del'>-                     strcmp (basename (buf + strlen (buf) + 1), GSYNCD_PY)) == 0) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                /* fallthrough */</div><div class='add'>+            if ((strcmp(basename(buf), basename(PYTHON)) ||</div><div class='add'>+                 strcmp(basename(buf + strlen(buf) + 1), GSYNCD_PY)) == 0) {</div><div class='add'>+                ret = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            /* fallthrough */</div><div class='ctx'>         case 1:</div><div class='del'>-                if (strcmp (basename (buf), GSYNCD_PY) == 0)</div><div class='del'>-                        ret = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                if (pida[1] != -1) {</div><div class='del'>-                        fprintf (stderr, GSYNCD_PY" sibling is not unique");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                pida[1] = pid;</div><div class='add'>+            if (strcmp(basename(buf), GSYNCD_PY) == 0)</div><div class='add'>+                ret = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        if (pida[1] != -1) {</div><div class='add'>+            fprintf(stderr, GSYNCD_PY " sibling is not unique");</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        pida[1] = pid;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-invoke_rsync (int argc, char **argv)</div><div class='add'>+invoke_rsync(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int i                  = 0;</div><div class='del'>-        char path[PATH_MAX]    = {0,};</div><div class='del'>-        pid_t pid              = -1;</div><div class='del'>-        pid_t ppid             = -1;</div><div class='del'>-        pid_t pida[]           = {-1, -1};</div><div class='del'>-        char *name             = NULL;</div><div class='del'>-        char buf[PATH_MAX + 1] = {0,};</div><div class='del'>-        int ret                = 0;</div><div class='del'>-</div><div class='del'>-        assert (argv[argc] == NULL);</div><div class='del'>-</div><div class='del'>-        if (argc &lt; 2 || strcmp (argv[1], "--server") != 0)</div><div class='del'>-                goto error;</div><div class='del'>-</div><div class='del'>-        for (i = 2; i &lt; argc &amp;&amp; argv[i][0] == '-'; i++);</div><div class='del'>-</div><div class='del'>-        if (!(i == argc - 2 &amp;&amp; strcmp (argv[i], ".") == 0 &amp;&amp; argv[i + 1][0] == '/')) {</div><div class='del'>-                fprintf (stderr, "need an rsync invocation without protected args\n");</div><div class='del'>-                goto error;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    pid_t pid = -1;</div><div class='add'>+    pid_t ppid = -1;</div><div class='add'>+    pid_t pida[] = {-1, -1};</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    char buf[PATH_MAX + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    assert(argv[argc] == NULL);</div><div class='add'>+</div><div class='add'>+    if (argc &lt; 2 || strcmp(argv[1], "--server") != 0)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    for (i = 2; i &lt; argc &amp;&amp; argv[i][0] == '-'; i++)</div><div class='add'>+        ;</div><div class='add'>+</div><div class='add'>+    if (!(i == argc - 2 &amp;&amp; strcmp(argv[i], ".") == 0 &amp;&amp;</div><div class='add'>+          argv[i + 1][0] == '/')) {</div><div class='add'>+        fprintf(stderr, "need an rsync invocation without protected args\n");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* look up sshd we are spawned from */</div><div class='add'>+    for (pid = getpid();; pid = ppid) {</div><div class='add'>+        ppid = pidinfo(pid, &amp;name);</div><div class='add'>+        if (ppid &lt; 0) {</div><div class='add'>+            fprintf(stderr, "sshd ancestor not found\n");</div><div class='add'>+            goto error;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* look up sshd we are spawned from */</div><div class='del'>-        for (pid = getpid () ;; pid = ppid) {</div><div class='del'>-                ppid = pidinfo (pid, &amp;name);</div><div class='del'>-                if (ppid &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "sshd ancestor not found\n");</div><div class='del'>-                        goto error;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp (name, "sshd") == 0) {</div><div class='del'>-                        GF_FREE (name);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (name);</div><div class='add'>+        if (strcmp(name, "sshd") == 0) {</div><div class='add'>+            GF_FREE(name);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        /* look up "ssh-sibling" gsyncd */</div><div class='del'>-        pida[0] = pid;</div><div class='del'>-        ret = prociter (find_gsyncd, pida);</div><div class='del'>-        if (ret == -1 || pida[1] == -1) {</div><div class='del'>-                fprintf (stderr, "gsyncd sibling not found\n");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-        /* check if rsync target matches gsyncd target */</div><div class='del'>-        snprintf (path, sizeof path, PROC"/%d/cwd", pida[1]);</div><div class='del'>-        ret = sys_readlink (path, buf, sizeof (buf));</div><div class='del'>-        if (ret == -1 || ret == sizeof (buf))</div><div class='del'>-                goto error;</div><div class='del'>-        if (strcmp (argv[argc - 1], "/") == 0 /* root dir cannot be a target */ ||</div><div class='del'>-            (strcmp (argv[argc - 1], path) /* match against gluster target */ &amp;&amp;</div><div class='del'>-             strcmp (argv[argc - 1], buf) /* match against file target */) != 0) {</div><div class='del'>-                fprintf (stderr, "rsync target does not match "GEOREP" session\n");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        argv[0] = RSYNC;</div><div class='del'>-</div><div class='del'>-        execvp (RSYNC, argv);</div><div class='del'>-</div><div class='del'>-        fprintf (stderr, "exec of "RSYNC" failed\n");</div><div class='del'>-        return 127;</div><div class='del'>-</div><div class='del'>- error:</div><div class='del'>-        fprintf (stderr, "disallowed "RSYNC" invocation\n");</div><div class='del'>-        return 1;</div><div class='add'>+        GF_FREE(name);</div><div class='add'>+    }</div><div class='add'>+    /* look up "ssh-sibling" gsyncd */</div><div class='add'>+    pida[0] = pid;</div><div class='add'>+    ret = prociter(find_gsyncd, pida);</div><div class='add'>+    if (ret == -1 || pida[1] == -1) {</div><div class='add'>+        fprintf(stderr, "gsyncd sibling not found\n");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    /* check if rsync target matches gsyncd target */</div><div class='add'>+    snprintf(path, sizeof path, PROC "/%d/cwd", pida[1]);</div><div class='add'>+    ret = sys_readlink(path, buf, sizeof(buf));</div><div class='add'>+    if (ret == -1 || ret == sizeof(buf))</div><div class='add'>+        goto error;</div><div class='add'>+    if (strcmp(argv[argc - 1], "/") == 0 /* root dir cannot be a target */ ||</div><div class='add'>+        (strcmp(argv[argc - 1], path) /* match against gluster target */ &amp;&amp;</div><div class='add'>+         strcmp(argv[argc - 1], buf) /* match against file target */) != 0) {</div><div class='add'>+        fprintf(stderr, "rsync target does not match " GEOREP " session\n");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    argv[0] = RSYNC;</div><div class='add'>+</div><div class='add'>+    execvp(RSYNC, argv);</div><div class='add'>+</div><div class='add'>+    fprintf(stderr, "exec of " RSYNC " failed\n");</div><div class='add'>+    return 127;</div><div class='add'>+</div><div class='add'>+error:</div><div class='add'>+    fprintf(stderr, "disallowed " RSYNC " invocation\n");</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-invoke_gluster (int argc, char **argv)</div><div class='add'>+invoke_gluster(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int j = 0;</div><div class='del'>-        int optsover = 0;</div><div class='del'>-        char *ov = NULL;</div><div class='del'>-</div><div class='del'>-        for (i = 1; i &lt; argc; i++) {</div><div class='del'>-                ov = strtail (argv[i], "--");</div><div class='del'>-                if (ov &amp;&amp; !optsover) {</div><div class='del'>-                        if (*ov == '\0')</div><div class='del'>-                                optsover = 1;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                switch (++j) {</div><div class='del'>-                case 1:</div><div class='del'>-                        if (strcmp (argv[i], "volume") != 0)</div><div class='del'>-                                goto error;</div><div class='del'>-                        break;</div><div class='del'>-                case 2:</div><div class='del'>-                        if (strcmp (argv[i], "info") != 0)</div><div class='del'>-                                goto error;</div><div class='del'>-                        break;</div><div class='del'>-                case 3:</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        goto error;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int optsover = 0;</div><div class='add'>+    char *ov = NULL;</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt; argc; i++) {</div><div class='add'>+        ov = strtail(argv[i], "--");</div><div class='add'>+        if (ov &amp;&amp; !optsover) {</div><div class='add'>+            if (*ov == '\0')</div><div class='add'>+                optsover = 1;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        switch (++j) {</div><div class='add'>+            case 1:</div><div class='add'>+                if (strcmp(argv[i], "volume") != 0)</div><div class='add'>+                    goto error;</div><div class='add'>+                break;</div><div class='add'>+            case 2:</div><div class='add'>+                if (strcmp(argv[i], "info") != 0)</div><div class='add'>+                    goto error;</div><div class='add'>+                break;</div><div class='add'>+            case 3:</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                goto error;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        argv[0] = "gluster";</div><div class='del'>-        execvp (SBIN_DIR"/gluster", argv);</div><div class='del'>-        fprintf (stderr, "exec of gluster failed\n");</div><div class='del'>-        return 127;</div><div class='add'>+    argv[0] = "gluster";</div><div class='add'>+    execvp(SBIN_DIR "/gluster", argv);</div><div class='add'>+    fprintf(stderr, "exec of gluster failed\n");</div><div class='add'>+    return 127;</div><div class='ctx'> </div><div class='del'>- error:</div><div class='del'>-        fprintf (stderr, "disallowed gluster invocation\n");</div><div class='del'>-        return 1;</div><div class='add'>+error:</div><div class='add'>+    fprintf(stderr, "disallowed gluster invocation\n");</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct invocable {</div><div class='del'>-        char *name;</div><div class='del'>-        int (*invoker) (int argc, char **argv);</div><div class='add'>+    char *name;</div><div class='add'>+    int (*invoker)(int argc, char **argv);</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct invocable invocables[] = {</div><div class='del'>-        { "rsync",   invoke_rsync  },</div><div class='del'>-        { "gsyncd",  invoke_gsyncd },</div><div class='del'>-        { "gluster", invoke_gluster },</div><div class='del'>-        { NULL, NULL}</div><div class='del'>-};</div><div class='add'>+struct invocable invocables[] = {{"rsync", invoke_rsync},</div><div class='add'>+                                 {"gsyncd", invoke_gsyncd},</div><div class='add'>+                                 {"gluster", invoke_gluster},</div><div class='add'>+                                 {NULL, NULL}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int               ret   = -1;</div><div class='del'>-        char             *evas  = NULL;</div><div class='del'>-        struct invocable *i     = NULL;</div><div class='del'>-        char             *b     = NULL;</div><div class='del'>-        char             *sargv = NULL;</div><div class='del'>-        int               j     = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *evas = NULL;</div><div class='add'>+    struct invocable *i = NULL;</div><div class='add'>+    char *b = NULL;</div><div class='add'>+    char *sargv = NULL;</div><div class='add'>+    int j = 0;</div><div class='ctx'> </div><div class='ctx'> #ifdef USE_LIBGLUSTERFS</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfs_ctx_new ();</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return ENOMEM;</div><div class='add'>+    ctx = glusterfs_ctx_new();</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return ENOMEM;</div><div class='ctx'> </div><div class='del'>-        if (glusterfs_globals_init (ctx))</div><div class='del'>-                return 1;</div><div class='add'>+    if (glusterfs_globals_init(ctx))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        THIS-&gt;ctx = ctx;</div><div class='del'>-        ret = default_mem_acct_init (THIS);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "internal error: mem accounting failed\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    THIS-&gt;ctx = ctx;</div><div class='add'>+    ret = default_mem_acct_init(THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "internal error: mem accounting failed\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        evas = getenv (_GLUSTERD_CALLED_);</div><div class='del'>-        if (evas &amp;&amp; strcmp (evas, "1") == 0)</div><div class='del'>-                /* OK, we know glusterd called us, no need to look for further config</div><div class='del'>-                 *...although this conclusion should not inherit to our children</div><div class='del'>-                 */</div><div class='del'>-                unsetenv (_GLUSTERD_CALLED_);</div><div class='del'>-        else {</div><div class='del'>-                /* we regard all gsyncd invocations unsafe</div><div class='del'>-                 * that do not come from glusterd and</div><div class='del'>-                 * therefore restrict it</div><div class='del'>-                 */</div><div class='del'>-                restricted = 1;</div><div class='del'>-</div><div class='del'>-                if (!getenv (_GSYNCD_DISPATCHED_)) {</div><div class='del'>-                        evas = getenv ("SSH_ORIGINAL_COMMAND");</div><div class='del'>-                        if (evas)</div><div class='del'>-                                sargv = evas;</div><div class='del'>-                        else {</div><div class='del'>-                                evas = getenv ("SHELL");</div><div class='del'>-                                if (evas &amp;&amp; strcmp (basename (evas), "gsyncd") == 0 &amp;&amp;</div><div class='del'>-                                    argc == 3 &amp;&amp; strcmp (argv[1], "-c") == 0)</div><div class='del'>-                                        sargv = argv[2];</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    evas = getenv(_GLUSTERD_CALLED_);</div><div class='add'>+    if (evas &amp;&amp; strcmp(evas, "1") == 0)</div><div class='add'>+        /* OK, we know glusterd called us, no need to look for further config</div><div class='add'>+         *...although this conclusion should not inherit to our children</div><div class='add'>+         */</div><div class='add'>+        unsetenv(_GLUSTERD_CALLED_);</div><div class='add'>+    else {</div><div class='add'>+        /* we regard all gsyncd invocations unsafe</div><div class='add'>+         * that do not come from glusterd and</div><div class='add'>+         * therefore restrict it</div><div class='add'>+         */</div><div class='add'>+        restricted = 1;</div><div class='add'>+</div><div class='add'>+        if (!getenv(_GSYNCD_DISPATCHED_)) {</div><div class='add'>+            evas = getenv("SSH_ORIGINAL_COMMAND");</div><div class='add'>+            if (evas)</div><div class='add'>+                sargv = evas;</div><div class='add'>+            else {</div><div class='add'>+                evas = getenv("SHELL");</div><div class='add'>+                if (evas &amp;&amp; strcmp(basename(evas), "gsyncd") == 0 &amp;&amp;</div><div class='add'>+                    argc == 3 &amp;&amp; strcmp(argv[1], "-c") == 0)</div><div class='add'>+                    sargv = argv[2];</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!(sargv &amp;&amp; restricted))</div><div class='del'>-                return invoke_gsyncd (argc, argv);</div><div class='add'>+    if (!(sargv &amp;&amp; restricted))</div><div class='add'>+        return invoke_gsyncd(argc, argv);</div><div class='ctx'> </div><div class='del'>-        argc = str2argv (sargv, &amp;argv);</div><div class='add'>+    argc = str2argv(sargv, &amp;argv);</div><div class='ctx'> </div><div class='del'>-        if (argc == -1) {</div><div class='del'>-                fprintf (stderr, "internal error\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (setenv (_GSYNCD_DISPATCHED_, "1", 1) == -1) {</div><div class='del'>-                fprintf (stderr, "internal error\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (argc == -1) {</div><div class='add'>+        fprintf(stderr, "internal error\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (setenv(_GSYNCD_DISPATCHED_, "1", 1) == -1) {</div><div class='add'>+        fprintf(stderr, "internal error\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        b = basename (argv[0]);</div><div class='del'>-        for (i = invocables; i-&gt;name; i++) {</div><div class='del'>-                if (strcmp (b, i-&gt;name) == 0)</div><div class='del'>-                        return i-&gt;invoker (argc, argv);</div><div class='del'>-        }</div><div class='add'>+    b = basename(argv[0]);</div><div class='add'>+    for (i = invocables; i-&gt;name; i++) {</div><div class='add'>+        if (strcmp(b, i-&gt;name) == 0)</div><div class='add'>+            return i-&gt;invoker(argc, argv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "invoking %s in restricted SSH session is not allowed\n",</div><div class='del'>-                 b);</div><div class='add'>+    fprintf(stderr, "invoking %s in restricted SSH session is not allowed\n",</div><div class='add'>+            b);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        for (j = 1; j &lt; argc; j++)</div><div class='del'>-                free(argv[j]);</div><div class='del'>-        free(argv);</div><div class='del'>-        return 1;</div><div class='add'>+    for (j = 1; j &lt; argc; j++)</div><div class='add'>+        free(argv[j]);</div><div class='add'>+    free(argv);</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='head'>diff --git a/geo-replication/src/procdiggy.c b/geo-replication/src/procdiggy.c<br/>index 4fb6a2405e4..05c1e1edc68 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/geo-replication/src/procdiggy.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>geo-replication/src/procdiggy.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/geo-replication/src/procdiggy.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>geo-replication/src/procdiggy.c</a></div><div class='hunk'>@@ -20,107 +20,115 @@</div><div class='ctx'> #include "procdiggy.h"</div><div class='ctx'> </div><div class='ctx'> pid_t</div><div class='del'>-pidinfo (pid_t pid, char **name)</div><div class='add'>+pidinfo(pid_t pid, char **name)</div><div class='ctx'> {</div><div class='del'>-        char buf[NAME_MAX * 2] = {0,};</div><div class='del'>-        FILE *f                = NULL;</div><div class='del'>-        char path[PATH_MAX]    = {0,};</div><div class='del'>-        char *p                = NULL;</div><div class='del'>-        int ret                = 0;</div><div class='del'>-</div><div class='del'>-        snprintf (path, sizeof path, PROC"/%d/status", pid);</div><div class='del'>-</div><div class='del'>-        f = fopen (path, "r");</div><div class='del'>-        if (!f)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (name)</div><div class='del'>-                *name = NULL;</div><div class='del'>-        for (;;) {</div><div class='del'>-                size_t len;</div><div class='del'>-                memset (buf, 0, sizeof (buf));</div><div class='del'>-                if (fgets (buf, sizeof (buf), f) == NULL ||</div><div class='del'>-                    (len = strlen (buf)) == 0 ||</div><div class='del'>-                    buf[len - 1] != '\n') {</div><div class='del'>-                        pid = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                buf[len - 1] = '\0';</div><div class='del'>-</div><div class='del'>-                if (name &amp;&amp; !*name) {</div><div class='del'>-                        p = strtail (buf, "Name:");</div><div class='del'>-                        if (p) {</div><div class='del'>-                                while (isspace (*++p));</div><div class='del'>-                                *name = gf_strdup (p);</div><div class='del'>-                                if (!*name) {</div><div class='del'>-                                        pid = -2;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+    char buf[NAME_MAX * 2] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    FILE *f = NULL;</div><div class='add'>+    char path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *p = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    snprintf(path, sizeof path, PROC "/%d/status", pid);</div><div class='add'>+</div><div class='add'>+    f = fopen(path, "r");</div><div class='add'>+    if (!f)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (name)</div><div class='add'>+        *name = NULL;</div><div class='add'>+    for (;;) {</div><div class='add'>+        size_t len;</div><div class='add'>+        memset(buf, 0, sizeof(buf));</div><div class='add'>+        if (fgets(buf, sizeof(buf), f) == NULL || (len = strlen(buf)) == 0 ||</div><div class='add'>+            buf[len - 1] != '\n') {</div><div class='add'>+            pid = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        buf[len - 1] = '\0';</div><div class='add'>+</div><div class='add'>+        if (name &amp;&amp; !*name) {</div><div class='add'>+            p = strtail(buf, "Name:");</div><div class='add'>+            if (p) {</div><div class='add'>+                while (isspace(*++p))</div><div class='add'>+                    ;</div><div class='add'>+                *name = gf_strdup(p);</div><div class='add'>+                if (!*name) {</div><div class='add'>+                    pid = -2;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                p = strtail (buf, "PPid:");</div><div class='del'>-                if (p)</div><div class='del'>-                        break;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while (isspace (*++p));</div><div class='del'>-        ret = gf_string2int (p, &amp;pid);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                pid = -1;</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        fclose (f);</div><div class='del'>-        if (pid == -1  &amp;&amp; name &amp;&amp; *name)</div><div class='del'>-                GF_FREE (*name);</div><div class='del'>-        if (pid == -2)</div><div class='del'>-                fprintf (stderr, "out of memory\n");</div><div class='del'>-        return pid;</div><div class='add'>+        p = strtail(buf, "PPid:");</div><div class='add'>+        if (p)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (isspace(*++p))</div><div class='add'>+        ;</div><div class='add'>+    ret = gf_string2int(p, &amp;pid);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        pid = -1;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    fclose(f);</div><div class='add'>+    if (pid == -1 &amp;&amp; name &amp;&amp; *name)</div><div class='add'>+        GF_FREE(*name);</div><div class='add'>+    if (pid == -2)</div><div class='add'>+        fprintf(stderr, "out of memory\n");</div><div class='add'>+    return pid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-prociter (int (*proch) (pid_t pid, pid_t ppid, char *tmpname, void *data),</div><div class='del'>-          void *data)</div><div class='add'>+prociter(int (*proch)(pid_t pid, pid_t ppid, char *tmpname, void *data),</div><div class='add'>+         void *data)</div><div class='ctx'> {</div><div class='del'>-        char *name        = NULL;</div><div class='del'>-        DIR *d            = NULL;</div><div class='del'>-        struct dirent *de = NULL;</div><div class='del'>-        struct dirent scratch[2] = {{0,},};</div><div class='del'>-        pid_t pid         = -1;</div><div class='del'>-        pid_t ppid        = -1;</div><div class='del'>-        int ret           = 0;</div><div class='del'>-</div><div class='del'>-        d = sys_opendir (PROC);</div><div class='del'>-        if (!d)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                de = sys_readdir (d, scratch);</div><div class='del'>-                if (!de || errno != 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                if (gf_string2int (de-&gt;d_name, &amp;pid) != -1 &amp;&amp; pid &gt;= 0) {</div><div class='del'>-                        ppid = pidinfo (pid, &amp;name);</div><div class='del'>-                        switch (ppid) {</div><div class='del'>-                        case -1:</div><div class='del'>-                                continue;</div><div class='del'>-                        case -2:</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        ret = proch (pid, ppid, name, data);</div><div class='del'>-                        GF_FREE (name);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        sys_closedir (d);</div><div class='del'>-        if (!de &amp;&amp; errno) {</div><div class='del'>-                fprintf (stderr, "failed to traverse "PROC" (%s)\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                ret = -1;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    DIR *d = NULL;</div><div class='add'>+    struct dirent *de = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    pid_t pid = -1;</div><div class='add'>+    pid_t ppid = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    d = sys_opendir(PROC);</div><div class='add'>+    if (!d)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        de = sys_readdir(d, scratch);</div><div class='add'>+        if (!de || errno != 0)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (gf_string2int(de-&gt;d_name, &amp;pid) != -1 &amp;&amp; pid &gt;= 0) {</div><div class='add'>+            ppid = pidinfo(pid, &amp;name);</div><div class='add'>+            switch (ppid) {</div><div class='add'>+                case -1:</div><div class='add'>+                    continue;</div><div class='add'>+                case -2:</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='add'>+            ret = proch(pid, ppid, name, data);</div><div class='add'>+            GF_FREE(name);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    sys_closedir(d);</div><div class='add'>+    if (!de &amp;&amp; errno) {</div><div class='add'>+        fprintf(stderr, "failed to traverse " PROC " (%s)\n", strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/glusterfsd/src/gf_attach.c b/glusterfsd/src/gf_attach.c<br/>index 1c1106c06f6..07ec0ed0686 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/glusterfsd/src/gf_attach.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>glusterfsd/src/gf_attach.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/glusterfsd/src/gf_attach.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>glusterfsd/src/gf_attach.c</a></div><div class='hunk'>@@ -25,189 +25,186 @@ int done = 0;</div><div class='ctx'> int rpc_status;</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_procedure gf_attach_actors[GLUSTERD_BRICK_MAXVALUE] = {</div><div class='del'>-        [GLUSTERD_BRICK_NULL] = {"NULL", NULL },</div><div class='del'>-        [GLUSTERD_BRICK_OP]   = {"BRICK_OP", NULL },</div><div class='add'>+    [GLUSTERD_BRICK_NULL] = {"NULL", NULL},</div><div class='add'>+    [GLUSTERD_BRICK_OP] = {"BRICK_OP", NULL},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_program gf_attach_prog = {</div><div class='del'>-        .progname  = "brick operations",</div><div class='del'>-        .prognum   = GD_BRICK_PROGRAM,</div><div class='del'>-        .progver   = GD_BRICK_VERSION,</div><div class='del'>-        .proctable = gf_attach_actors,</div><div class='del'>-        .numproc   = GLUSTERD_BRICK_MAXVALUE,</div><div class='add'>+    .progname = "brick operations",</div><div class='add'>+    .prognum = GD_BRICK_PROGRAM,</div><div class='add'>+    .progver = GD_BRICK_VERSION,</div><div class='add'>+    .proctable = gf_attach_actors,</div><div class='add'>+    .numproc = GLUSTERD_BRICK_MAXVALUE,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-my_callback (struct rpc_req *req, struct iovec *iov, int count, void *frame)</div><div class='add'>+my_callback(struct rpc_req *req, struct iovec *iov, int count, void *frame)</div><div class='ctx'> {</div><div class='del'>-        rpc_status = req-&gt;rpc_status;</div><div class='del'>-        done = 1;</div><div class='del'>-        return 0;</div><div class='add'>+    rpc_status = req-&gt;rpc_status;</div><div class='add'>+    done = 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* copied from gd_syncop_submit_request */</div><div class='ctx'> int</div><div class='del'>-send_brick_req (xlator_t *this, struct rpc_clnt *rpc, char *path, int op)</div><div class='add'>+send_brick_req(xlator_t *this, struct rpc_clnt *rpc, char *path, int op)</div><div class='ctx'> {</div><div class='del'>-        int            ret      = -1;</div><div class='del'>-        struct iobuf  *iobuf    = NULL;</div><div class='del'>-        struct iobref *iobref   = NULL;</div><div class='del'>-        struct iovec   iov      = {0, };</div><div class='del'>-        ssize_t        req_size = 0;</div><div class='del'>-        call_frame_t  *frame    = NULL;</div><div class='del'>-        gd1_mgmt_brick_op_req   brick_req;</div><div class='del'>-        void                    *req = &amp;brick_req;</div><div class='del'>-        int                     i;</div><div class='del'>-</div><div class='del'>-        brick_req.op = op;</div><div class='del'>-        brick_req.name = path;</div><div class='del'>-        brick_req.input.input_val = NULL;</div><div class='del'>-        brick_req.input.input_len = 0;</div><div class='del'>-</div><div class='del'>-        req_size = xdr_sizeof ((xdrproc_t)xdr_gd1_mgmt_brick_op_req, req);</div><div class='del'>-        iobuf = iobuf_get2 (rpc-&gt;ctx-&gt;iobuf_pool, req_size);</div><div class='del'>-        if (!iobuf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        iobref = iobref_new ();</div><div class='del'>-        if (!iobref)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        iobref_add (iobref, iobuf);</div><div class='del'>-</div><div class='del'>-        iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-        iov.iov_len  = iobuf_pagesize (iobuf);</div><div class='del'>-</div><div class='del'>-        /* Create the xdr payload */</div><div class='del'>-        ret = xdr_serialize_generic (iov, req,</div><div class='del'>-                                     (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        iov.iov_len = ret;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 60; ++i) {</div><div class='del'>-                if (rpc-&gt;conn.connected) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                sleep (1);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t req_size = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    gd1_mgmt_brick_op_req brick_req;</div><div class='add'>+    void *req = &amp;brick_req;</div><div class='add'>+    int i;</div><div class='add'>+</div><div class='add'>+    brick_req.op = op;</div><div class='add'>+    brick_req.name = path;</div><div class='add'>+    brick_req.input.input_val = NULL;</div><div class='add'>+    brick_req.input.input_len = 0;</div><div class='add'>+</div><div class='add'>+    req_size = xdr_sizeof((xdrproc_t)xdr_gd1_mgmt_brick_op_req, req);</div><div class='add'>+    iobuf = iobuf_get2(rpc-&gt;ctx-&gt;iobuf_pool, req_size);</div><div class='add'>+    if (!iobuf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    iobref = iobref_new();</div><div class='add'>+    if (!iobref)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    iobref_add(iobref, iobuf);</div><div class='add'>+</div><div class='add'>+    iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+    iov.iov_len = iobuf_pagesize(iobuf);</div><div class='add'>+</div><div class='add'>+    /* Create the xdr payload */</div><div class='add'>+    ret = xdr_serialize_generic(iov, req, (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    iov.iov_len = ret;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 60; ++i) {</div><div class='add'>+        if (rpc-&gt;conn.connected) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Send the msg */</div><div class='del'>-        ret = rpc_clnt_submit (rpc, &amp;gf_attach_prog, op,</div><div class='del'>-                               my_callback, &amp;iov, 1, NULL, 0, iobref, frame,</div><div class='del'>-                               NULL, 0, NULL, 0, NULL);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                for (i = 0; !done &amp;&amp; (i &lt; 120); ++i) {</div><div class='del'>-                        sleep (1);</div><div class='del'>-                }</div><div class='add'>+        sleep(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Send the msg */</div><div class='add'>+    ret = rpc_clnt_submit(rpc, &amp;gf_attach_prog, op, my_callback, &amp;iov, 1, NULL,</div><div class='add'>+                          0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        for (i = 0; !done &amp;&amp; (i &lt; 120); ++i) {</div><div class='add'>+            sleep(1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        iobref_unref (iobref);</div><div class='del'>-        iobuf_unref (iobuf);</div><div class='del'>-        if (frame)</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='add'>+    iobref_unref(iobref);</div><div class='add'>+    iobuf_unref(iobuf);</div><div class='add'>+    if (frame)</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        if (rpc_status != 0) {</div><div class='del'>-                fprintf (stderr, "got error %d on RPC\n", rpc_status);</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    if (rpc_status != 0) {</div><div class='add'>+        fprintf(stderr, "got error %d on RPC\n", rpc_status);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        printf ("OK\n");</div><div class='del'>-        return EXIT_SUCCESS;</div><div class='add'>+    printf("OK\n");</div><div class='add'>+    return EXIT_SUCCESS;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-usage (char *prog)</div><div class='add'>+usage(char *prog)</div><div class='ctx'> {</div><div class='del'>-        fprintf (stderr, "Usage: %s uds_path volfile_path (to attach)\n",</div><div class='del'>-                 prog);</div><div class='del'>-        fprintf (stderr, "       %s -d uds_path brick_path (to detach)\n",</div><div class='del'>-                 prog);</div><div class='add'>+    fprintf(stderr, "Usage: %s uds_path volfile_path (to attach)\n", prog);</div><div class='add'>+    fprintf(stderr, "       %s -d uds_path brick_path (to detach)\n", prog);</div><div class='ctx'> </div><div class='del'>-        return EXIT_FAILURE;</div><div class='add'>+    return EXIT_FAILURE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t                  *fs;</div><div class='del'>-        struct rpc_clnt         *rpc;</div><div class='del'>-        dict_t                  *options;</div><div class='del'>-        int                     ret;</div><div class='del'>-        int                     op = GLUSTERD_BRICK_ATTACH;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                switch (getopt (argc, argv, "d")) {</div><div class='del'>-                case 'd':</div><div class='del'>-                        op = GLUSTERD_BRICK_TERMINATE;</div><div class='del'>-                        break;</div><div class='del'>-                case -1:</div><div class='del'>-                        goto done_parsing;</div><div class='del'>-                default:</div><div class='del'>-                        return usage (argv[0]);</div><div class='del'>-                }</div><div class='add'>+    glfs_t *fs;</div><div class='add'>+    struct rpc_clnt *rpc;</div><div class='add'>+    dict_t *options;</div><div class='add'>+    int ret;</div><div class='add'>+    int op = GLUSTERD_BRICK_ATTACH;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        switch (getopt(argc, argv, "d")) {</div><div class='add'>+            case 'd':</div><div class='add'>+                op = GLUSTERD_BRICK_TERMINATE;</div><div class='add'>+                break;</div><div class='add'>+            case -1:</div><div class='add'>+                goto done_parsing;</div><div class='add'>+            default:</div><div class='add'>+                return usage(argv[0]);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> done_parsing:</div><div class='del'>-        if (optind != (argc - 2)) {</div><div class='del'>-                return usage (argv[0]);</div><div class='del'>-        }</div><div class='add'>+    if (optind != (argc - 2)) {</div><div class='add'>+        return usage(argv[0]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new ("gf-attach");</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new failed\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new("gf-attach");</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new failed\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) glfs_set_logging (fs, "/dev/stderr", 7);</div><div class='del'>-        /*</div><div class='del'>-         * This will actually fail because we haven't defined a volume, but</div><div class='del'>-         * it will do enough initialization to get us going.</div><div class='del'>-         */</div><div class='del'>-        (void) glfs_init (fs);</div><div class='add'>+    (void)glfs_set_logging(fs, "/dev/stderr", 7);</div><div class='add'>+    /*</div><div class='add'>+     * This will actually fail because we haven't defined a volume, but</div><div class='add'>+     * it will do enough initialization to get us going.</div><div class='add'>+     */</div><div class='add'>+    (void)glfs_init(fs);</div><div class='ctx'> </div><div class='del'>-        options = dict_new();</div><div class='del'>-        if (!options) {</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (options, "transport-type", "socket");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "failed to set transport type\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (options, "transport.address-family", "unix");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "failed to set address family\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (options, "transport.socket.connect-path",</div><div class='del'>-                            argv[optind]);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "failed to set connect path\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    options = dict_new();</div><div class='add'>+    if (!options) {</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(options, "transport-type", "socket");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "failed to set transport type\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(options, "transport.address-family", "unix");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "failed to set address family\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(options, "transport.socket.connect-path", argv[optind]);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "failed to set connect path\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpc = rpc_clnt_new (options, fs-&gt;ctx-&gt;master, "gf-attach-rpc", 0);</div><div class='del'>-        if (!rpc) {</div><div class='del'>-                fprintf (stderr, "rpc_clnt_new failed\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    rpc = rpc_clnt_new(options, fs-&gt;ctx-&gt;master, "gf-attach-rpc", 0);</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        fprintf(stderr, "rpc_clnt_new failed\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rpc_clnt_register_notify (rpc, NULL, NULL) != 0) {</div><div class='del'>-                fprintf (stderr, "rpc_clnt_register_notify failed\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    if (rpc_clnt_register_notify(rpc, NULL, NULL) != 0) {</div><div class='add'>+        fprintf(stderr, "rpc_clnt_register_notify failed\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rpc_clnt_start(rpc) != 0) {</div><div class='del'>-                fprintf (stderr, "rpc_clnt_start failed\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    if (rpc_clnt_start(rpc) != 0) {</div><div class='add'>+        fprintf(stderr, "rpc_clnt_start failed\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return send_brick_req (fs-&gt;ctx-&gt;master, rpc, argv[optind+1], op);</div><div class='add'>+    return send_brick_req(fs-&gt;ctx-&gt;master, rpc, argv[optind + 1], op);</div><div class='ctx'> }</div><div class='head'>diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c<br/>index f7b1f367f97..88c9934e58e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/glusterfsd/src/glusterfsd-mgmt.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>glusterfsd/src/glusterfsd-mgmt.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/glusterfsd/src/glusterfsd-mgmt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>glusterfsd/src/glusterfsd-mgmt.c</a></div><div class='hunk'>@@ -38,2812 +38,2825 @@</div><div class='ctx'> static gf_boolean_t is_mgmt_rpc_reconnect = _gf_false;</div><div class='ctx'> int need_emancipate = 0;</div><div class='ctx'> </div><div class='del'>-int glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx);</div><div class='del'>-int glusterfs_volfile_fetch (glusterfs_ctx_t *ctx);</div><div class='del'>-int glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp);</div><div class='del'>-int glusterfs_graph_unknown_options (glusterfs_graph_t *graph);</div><div class='del'>-int emancipate(glusterfs_ctx_t *ctx, int ret);</div><div class='add'>+int</div><div class='add'>+glusterfs_mgmt_pmap_signin(glusterfs_ctx_t *ctx);</div><div class='add'>+int</div><div class='add'>+glusterfs_volfile_fetch(glusterfs_ctx_t *ctx);</div><div class='add'>+int</div><div class='add'>+glusterfs_process_volfp(glusterfs_ctx_t *ctx, FILE *fp);</div><div class='add'>+int</div><div class='add'>+glusterfs_graph_unknown_options(glusterfs_graph_t *graph);</div><div class='add'>+int</div><div class='add'>+emancipate(glusterfs_ctx_t *ctx, int ret);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mgmt_cbk_spec (struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='add'>+mgmt_cbk_spec(struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        gf_log ("mgmt", GF_LOG_INFO, "Volume file changed");</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    gf_log("mgmt", GF_LOG_INFO, "Volume file changed");</div><div class='ctx'> </div><div class='del'>-        glusterfs_volfile_fetch (ctx);</div><div class='del'>-        return 0;</div><div class='add'>+    glusterfs_volfile_fetch(ctx);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-mgmt_cbk_event (struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='add'>+mgmt_cbk_event(struct rpc_clnt *rpc, void *mydata, void *data)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct iobuf *</div><div class='del'>-glusterfs_serialize_reply (rpcsvc_request_t *req, void *arg,</div><div class='del'>-                           struct iovec *outmsg, xdrproc_t xdrproc)</div><div class='add'>+glusterfs_serialize_reply(rpcsvc_request_t *req, void *arg,</div><div class='add'>+                          struct iovec *outmsg, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf            *iob = NULL;</div><div class='del'>-        ssize_t                  retlen = -1;</div><div class='del'>-        ssize_t                  xdr_size = 0;</div><div class='del'>-</div><div class='del'>-        /* First, get the io buffer into which the reply in arg will</div><div class='del'>-         * be serialized.</div><div class='del'>-         */</div><div class='del'>-        xdr_size = xdr_sizeof (xdrproc, arg);</div><div class='del'>-        iob = iobuf_get2 (req-&gt;svc-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-        if (!iob) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to get iobuf");</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iobuf_to_iovec (iob, outmsg);</div><div class='del'>-        /* Use the given serializer to translate the give C structure in arg</div><div class='del'>-         * to XDR format which will be written into the buffer in outmsg.</div><div class='del'>-         */</div><div class='del'>-        /* retlen is used to received the error since size_t is unsigned and we</div><div class='del'>-         * need -1 for error notification during encoding.</div><div class='del'>-         */</div><div class='del'>-        retlen = xdr_serialize_generic (*outmsg, arg, xdrproc);</div><div class='del'>-        if (retlen == -1) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to encode message");</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        outmsg-&gt;iov_len = retlen;</div><div class='add'>+    struct iobuf *iob = NULL;</div><div class='add'>+    ssize_t retlen = -1;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+</div><div class='add'>+    /* First, get the io buffer into which the reply in arg will</div><div class='add'>+     * be serialized.</div><div class='add'>+     */</div><div class='add'>+    xdr_size = xdr_sizeof(xdrproc, arg);</div><div class='add'>+    iob = iobuf_get2(req-&gt;svc-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+    if (!iob) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Failed to get iobuf");</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iobuf_to_iovec(iob, outmsg);</div><div class='add'>+    /* Use the given serializer to translate the give C structure in arg</div><div class='add'>+     * to XDR format which will be written into the buffer in outmsg.</div><div class='add'>+     */</div><div class='add'>+    /* retlen is used to received the error since size_t is unsigned and we</div><div class='add'>+     * need -1 for error notification during encoding.</div><div class='add'>+     */</div><div class='add'>+    retlen = xdr_serialize_generic(*outmsg, arg, xdrproc);</div><div class='add'>+    if (retlen == -1) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Failed to encode message");</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    outmsg-&gt;iov_len = retlen;</div><div class='ctx'> ret:</div><div class='del'>-        if (retlen == -1) {</div><div class='del'>-                iob = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (retlen == -1) {</div><div class='add'>+        iob = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return iob;</div><div class='add'>+    return iob;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_submit_reply (rpcsvc_request_t *req, void *arg,</div><div class='del'>-                        struct iovec *payload, int payloadcount,</div><div class='del'>-                        struct iobref *iobref, xdrproc_t xdrproc)</div><div class='add'>+glusterfs_submit_reply(rpcsvc_request_t *req, void *arg, struct iovec *payload,</div><div class='add'>+                       int payloadcount, struct iobref *iobref,</div><div class='add'>+                       xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf           *iob        = NULL;</div><div class='del'>-        int                     ret        = -1;</div><div class='del'>-        struct iovec            rsp        = {0,};</div><div class='del'>-        char                    new_iobref = 0;</div><div class='del'>-</div><div class='del'>-        if (!req) {</div><div class='del'>-                GF_ASSERT (req);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    struct iobuf *iob = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iovec rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+</div><div class='add'>+    if (!req) {</div><div class='add'>+        GF_ASSERT(req);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        iobref = iobref_new();</div><div class='ctx'>         if (!iobref) {</div><div class='del'>-                iobref = iobref_new ();</div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR, "out of memory");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                new_iobref = 1;</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR, "out of memory");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        iob = glusterfs_serialize_reply (req, arg, &amp;rsp, xdrproc);</div><div class='del'>-        if (!iob) {</div><div class='del'>-                gf_log_callingfn (THIS-&gt;name, GF_LOG_ERROR, "Failed to serialize reply");</div><div class='del'>-        } else {</div><div class='del'>-                iobref_add (iobref, iob);</div><div class='del'>-        }</div><div class='add'>+        new_iobref = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_submit_generic (req, &amp;rsp, 1, payload, payloadcount,</div><div class='del'>-                                     iobref);</div><div class='add'>+    iob = glusterfs_serialize_reply(req, arg, &amp;rsp, xdrproc);</div><div class='add'>+    if (!iob) {</div><div class='add'>+        gf_log_callingfn(THIS-&gt;name, GF_LOG_ERROR, "Failed to serialize reply");</div><div class='add'>+    } else {</div><div class='add'>+        iobref_add(iobref, iob);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Now that we've done our job of handing the message to the RPC layer</div><div class='del'>-         * we can safely unref the iob in the hope that RPC layer must have</div><div class='del'>-         * ref'ed the iob on receiving into the txlist.</div><div class='del'>-         */</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Reply submission failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpcsvc_submit_generic(req, &amp;rsp, 1, payload, payloadcount, iobref);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    /* Now that we've done our job of handing the message to the RPC layer</div><div class='add'>+     * we can safely unref the iob in the hope that RPC layer must have</div><div class='add'>+     * ref'ed the iob on receiving into the txlist.</div><div class='add'>+     */</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Reply submission failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (iob)</div><div class='del'>-                iobuf_unref (iob);</div><div class='add'>+    if (iob)</div><div class='add'>+        iobuf_unref(iob);</div><div class='ctx'> </div><div class='del'>-        if (new_iobref &amp;&amp; iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (new_iobref &amp;&amp; iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret)</div><div class='add'>+glusterfs_terminate_response_send(rpcsvc_request_t *req, int op_ret)</div><div class='ctx'> {</div><div class='del'>-        gd1_mgmt_brick_op_rsp   rsp = {0,};</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-</div><div class='del'>-        rsp.op_ret = op_ret;</div><div class='del'>-        rsp.op_errno = 0;</div><div class='del'>-        rsp.op_errstr = "";</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (dict)</div><div class='del'>-                ret = dict_allocate_and_serialize (dict, &amp;rsp.output.output_val,</div><div class='del'>-                                                   &amp;rsp.output.output_len);</div><div class='del'>-</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = glusterfs_submit_reply (req, &amp;rsp, NULL, 0, NULL,</div><div class='del'>-                                              (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    gd1_mgmt_brick_op_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    rsp.op_ret = op_ret;</div><div class='add'>+    rsp.op_errno = 0;</div><div class='add'>+    rsp.op_errstr = "";</div><div class='add'>+    dict = dict_new();</div><div class='add'>+</div><div class='add'>+    if (dict)</div><div class='add'>+        ret = dict_allocate_and_serialize(dict, &amp;rsp.output.output_val,</div><div class='add'>+                                          &amp;rsp.output.output_len);</div><div class='add'>+</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = glusterfs_submit_reply(req, &amp;rsp, NULL, 0, NULL,</div><div class='add'>+                                     (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (rsp.output.output_val);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(rsp.output.output_val);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_terminate (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_terminate(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        gd1_mgmt_brick_op_req   xlator_req            = {0,};</div><div class='del'>-        ssize_t                 ret;</div><div class='del'>-        glusterfs_ctx_t         *ctx                  = NULL;</div><div class='del'>-        xlator_t                *top                  = NULL;</div><div class='del'>-        xlator_t                *victim               = NULL;</div><div class='del'>-        xlator_t                *tvictim              = NULL;</div><div class='del'>-        xlator_list_t           **trav_p              = NULL;</div><div class='del'>-        gf_boolean_t            lockflag              = _gf_false;</div><div class='del'>-        gf_boolean_t            still_bricks_attached = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        {</div><div class='del'>-                /* Find the xlator_list_t that points to our victim. */</div><div class='del'>-                if (glusterfsd_ctx-&gt;active) {</div><div class='del'>-                        top = glusterfsd_ctx-&gt;active-&gt;first;</div><div class='del'>-                        for (trav_p = &amp;top-&gt;children; *trav_p;</div><div class='del'>-                                                    trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='del'>-                                victim = (*trav_p)-&gt;xlator;</div><div class='del'>-                                if (!victim-&gt;cleanup_starting &amp;&amp; strcmp (victim-&gt;name, xlator_req.name) == 0) {</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!top)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        if (!*trav_p) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "can't terminate %s - not found",</div><div class='del'>-                          xlator_req.name);</div><div class='del'>-                /*</div><div class='del'>-                 * Used to be -ENOENT.  However, the caller asked us to</div><div class='del'>-                 * make sure it's down and if it's already down that's</div><div class='del'>-                 * good enough.</div><div class='del'>-                 */</div><div class='del'>-                glusterfs_terminate_response_send (req, 0);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glusterfs_terminate_response_send (req, 0);</div><div class='del'>-        for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='del'>-                tvictim = (*trav_p)-&gt;xlator;</div><div class='del'>-                if (!tvictim-&gt;cleanup_starting &amp;&amp;</div><div class='del'>-                    !strcmp (tvictim-&gt;name, xlator_req.name)) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (!tvictim-&gt;cleanup_starting) {</div><div class='del'>-                        still_bricks_attached = _gf_true;</div><div class='del'>-                        break;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t ret;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *top = NULL;</div><div class='add'>+    xlator_t *victim = NULL;</div><div class='add'>+    xlator_t *tvictim = NULL;</div><div class='add'>+    xlator_list_t **trav_p = NULL;</div><div class='add'>+    gf_boolean_t lockflag = _gf_false;</div><div class='add'>+    gf_boolean_t still_bricks_attached = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    {</div><div class='add'>+        /* Find the xlator_list_t that points to our victim. */</div><div class='add'>+        if (glusterfsd_ctx-&gt;active) {</div><div class='add'>+            top = glusterfsd_ctx-&gt;active-&gt;first;</div><div class='add'>+            for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='add'>+                victim = (*trav_p)-&gt;xlator;</div><div class='add'>+                if (!victim-&gt;cleanup_starting &amp;&amp;</div><div class='add'>+                    strcmp(victim-&gt;name, xlator_req.name) == 0) {</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        if (!still_bricks_attached) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "terminating after loss of last child %s",</div><div class='del'>-                        xlator_req.name);</div><div class='del'>-                rpc_clnt_mgmt_pmap_signout (glusterfsd_ctx, xlator_req.name);</div><div class='del'>-                kill (getpid(), SIGTERM);</div><div class='del'>-        } else {</div><div class='del'>-                /* TODO cleanup sequence needs to be done properly for</div><div class='del'>-                   Quota and Changelog</div><div class='del'>-                */</div><div class='del'>-                if (victim-&gt;cleanup_starting)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-                rpc_clnt_mgmt_pmap_signout (glusterfsd_ctx, xlator_req.name);</div><div class='del'>-                victim-&gt;cleanup_starting = 1;</div><div class='del'>-</div><div class='del'>-                UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-                lockflag = _gf_true;</div><div class='ctx'> </div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_INFO, "detaching not-only"</div><div class='del'>-                         " child %s", xlator_req.name);</div><div class='del'>-                top-&gt;notify (top, GF_EVENT_CLEANUP, victim);</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+        if (!top)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+    if (!*trav_p) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "can't terminate %s - not found",</div><div class='add'>+               xlator_req.name);</div><div class='add'>+        /*</div><div class='add'>+         * Used to be -ENOENT.  However, the caller asked us to</div><div class='add'>+         * make sure it's down and if it's already down that's</div><div class='add'>+         * good enough.</div><div class='add'>+         */</div><div class='add'>+        glusterfs_terminate_response_send(req, 0);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glusterfs_terminate_response_send(req, 0);</div><div class='add'>+    for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='add'>+        tvictim = (*trav_p)-&gt;xlator;</div><div class='add'>+        if (!tvictim-&gt;cleanup_starting &amp;&amp;</div><div class='add'>+            !strcmp(tvictim-&gt;name, xlator_req.name)) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (!tvictim-&gt;cleanup_starting) {</div><div class='add'>+            still_bricks_attached = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (!still_bricks_attached) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_INFO,</div><div class='add'>+               "terminating after loss of last child %s", xlator_req.name);</div><div class='add'>+        rpc_clnt_mgmt_pmap_signout(glusterfsd_ctx, xlator_req.name);</div><div class='add'>+        kill(getpid(), SIGTERM);</div><div class='add'>+    } else {</div><div class='add'>+        /* TODO cleanup sequence needs to be done properly for</div><div class='add'>+           Quota and Changelog</div><div class='add'>+        */</div><div class='add'>+        if (victim-&gt;cleanup_starting)</div><div class='add'>+            goto err;</div><div class='add'>+</div><div class='add'>+        rpc_clnt_mgmt_pmap_signout(glusterfsd_ctx, xlator_req.name);</div><div class='add'>+        victim-&gt;cleanup_starting = 1;</div><div class='add'>+</div><div class='add'>+        UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+        lockflag = _gf_true;</div><div class='add'>+</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_INFO,</div><div class='add'>+               "detaching not-only"</div><div class='add'>+               " child %s",</div><div class='add'>+               xlator_req.name);</div><div class='add'>+        top-&gt;notify(top, GF_EVENT_CLEANUP, victim);</div><div class='add'>+    }</div><div class='ctx'> err:</div><div class='del'>-        if (!lockflag)</div><div class='del'>-                UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        free (xlator_req.name);</div><div class='del'>-        xlator_req.name = NULL;</div><div class='del'>-        return 0;</div><div class='add'>+    if (!lockflag)</div><div class='add'>+        UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    free(xlator_req.name);</div><div class='add'>+    xlator_req.name = NULL;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_translator_info_response_send (rpcsvc_request_t *req, int ret,</div><div class='del'>-                                         char *msg, dict_t *output)</div><div class='add'>+glusterfs_translator_info_response_send(rpcsvc_request_t *req, int ret,</div><div class='add'>+                                        char *msg, dict_t *output)</div><div class='ctx'> {</div><div class='del'>-        gd1_mgmt_brick_op_rsp    rsp = {0,};</div><div class='del'>-        gf_boolean_t             free_ptr = _gf_false;</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        rsp.op_ret = ret;</div><div class='del'>-        rsp.op_errno = 0;</div><div class='del'>-        if (ret &amp;&amp; msg &amp;&amp; msg[0])</div><div class='del'>-                rsp.op_errstr = msg;</div><div class='del'>-        else</div><div class='del'>-                rsp.op_errstr = "";</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-        if (output) {</div><div class='del'>-                ret = dict_allocate_and_serialize (output,</div><div class='del'>-                                                   &amp;rsp.output.output_val,</div><div class='del'>-                                                   &amp;rsp.output.output_len);</div><div class='del'>-        }</div><div class='del'>-        if (!ret)</div><div class='del'>-                free_ptr = _gf_true;</div><div class='add'>+    gd1_mgmt_brick_op_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t free_ptr = _gf_false;</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    rsp.op_ret = ret;</div><div class='add'>+    rsp.op_errno = 0;</div><div class='add'>+    if (ret &amp;&amp; msg &amp;&amp; msg[0])</div><div class='add'>+        rsp.op_errstr = msg;</div><div class='add'>+    else</div><div class='add'>+        rsp.op_errstr = "";</div><div class='ctx'> </div><div class='del'>-        glusterfs_submit_reply (req, &amp;rsp, NULL, 0, NULL,</div><div class='del'>-                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='del'>-        ret = 0;</div><div class='del'>-        if (free_ptr)</div><div class='del'>-                GF_FREE (rsp.output.output_val);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = -1;</div><div class='add'>+    if (output) {</div><div class='add'>+        ret = dict_allocate_and_serialize(output, &amp;rsp.output.output_val,</div><div class='add'>+                                          &amp;rsp.output.output_len);</div><div class='add'>+    }</div><div class='add'>+    if (!ret)</div><div class='add'>+        free_ptr = _gf_true;</div><div class='add'>+</div><div class='add'>+    glusterfs_submit_reply(req, &amp;rsp, NULL, 0, NULL,</div><div class='add'>+                           (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (free_ptr)</div><div class='add'>+        GF_FREE(rsp.output.output_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_xlator_op_response_send (rpcsvc_request_t *req, int op_ret,</div><div class='del'>-                                   char *msg, dict_t *output)</div><div class='add'>+glusterfs_xlator_op_response_send(rpcsvc_request_t *req, int op_ret, char *msg,</div><div class='add'>+                                  dict_t *output)</div><div class='ctx'> {</div><div class='del'>-        gd1_mgmt_brick_op_rsp    rsp = {0,};</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        gf_boolean_t             free_ptr = _gf_false;</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        rsp.op_ret = op_ret;</div><div class='del'>-        rsp.op_errno = 0;</div><div class='del'>-        if (op_ret &amp;&amp; msg &amp;&amp; msg[0])</div><div class='del'>-                rsp.op_errstr = msg;</div><div class='del'>-        else</div><div class='del'>-                rsp.op_errstr = "";</div><div class='add'>+    gd1_mgmt_brick_op_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t free_ptr = _gf_false;</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    rsp.op_ret = op_ret;</div><div class='add'>+    rsp.op_errno = 0;</div><div class='add'>+    if (op_ret &amp;&amp; msg &amp;&amp; msg[0])</div><div class='add'>+        rsp.op_errstr = msg;</div><div class='add'>+    else</div><div class='add'>+        rsp.op_errstr = "";</div><div class='ctx'> </div><div class='del'>-        if (output) {</div><div class='del'>-                ret = dict_allocate_and_serialize (output,</div><div class='del'>-                                                   &amp;rsp.output.output_val,</div><div class='del'>-                                                   &amp;rsp.output.output_len);</div><div class='del'>-        }</div><div class='del'>-        if (!ret)</div><div class='del'>-                free_ptr = _gf_true;</div><div class='add'>+    if (output) {</div><div class='add'>+        ret = dict_allocate_and_serialize(output, &amp;rsp.output.output_val,</div><div class='add'>+                                          &amp;rsp.output.output_len);</div><div class='add'>+    }</div><div class='add'>+    if (!ret)</div><div class='add'>+        free_ptr = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_submit_reply (req, &amp;rsp, NULL, 0, NULL,</div><div class='del'>-                                     (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    ret = glusterfs_submit_reply(req, &amp;rsp, NULL, 0, NULL,</div><div class='add'>+                                 (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='ctx'> </div><div class='del'>-        if (free_ptr)</div><div class='del'>-                GF_FREE (rsp.output.output_val);</div><div class='add'>+    if (free_ptr)</div><div class='add'>+        GF_FREE(rsp.output.output_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_translator_info_get (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_translator_info_get(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret     = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   xlator_req = {0,};</div><div class='del'>-        dict_t                  *dict    = NULL;</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='del'>-        gf1_cli_top_op          top_op = 0;</div><div class='del'>-        uint32_t                blk_size = 0;</div><div class='del'>-        uint32_t                blk_count = 0;</div><div class='del'>-        double                  time = 0;</div><div class='del'>-        double                  throughput = 0;</div><div class='del'>-        xlator_t                *any = NULL;</div><div class='del'>-        xlator_t                *xlator = NULL;</div><div class='del'>-        glusterfs_graph_t       *active = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        char                    msg[2048] = {0,};</div><div class='del'>-        dict_t                  *output = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                //failed to decode msg;</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        ret = dict_unserialize (xlator_req.input.input_val,</div><div class='del'>-                                xlator_req.input.input_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to "</div><div class='del'>-                        "unserialize req-buffer to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf1_cli_top_op top_op = 0;</div><div class='add'>+    uint32_t blk_size = 0;</div><div class='add'>+    uint32_t blk_count = 0;</div><div class='add'>+    double time = 0;</div><div class='add'>+    double throughput = 0;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    char msg[2048] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        // failed to decode msg;</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    ret = dict_unserialize(xlator_req.input.input_val,</div><div class='add'>+                           xlator_req.input.input_len, &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to "</div><div class='add'>+               "unserialize req-buffer to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(dict, "top-op", (int32_t *)&amp;top_op);</div><div class='add'>+    if ((!ret) &amp;&amp;</div><div class='add'>+        (GF_CLI_TOP_READ_PERF == top_op || GF_CLI_TOP_WRITE_PERF == top_op)) {</div><div class='add'>+        ret = dict_get_uint32(dict, "blk-size", &amp;blk_size);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='add'>+        ret = dict_get_uint32(dict, "blk-cnt", &amp;blk_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (dict, "top-op", (int32_t *)&amp;top_op);</div><div class='del'>-        if ((!ret) &amp;&amp; (GF_CLI_TOP_READ_PERF == top_op ||</div><div class='del'>-            GF_CLI_TOP_WRITE_PERF == top_op)) {</div><div class='del'>-                ret = dict_get_uint32 (dict, "blk-size", &amp;blk_size);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='del'>-                ret = dict_get_uint32 (dict, "blk-cnt", &amp;blk_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='del'>-</div><div class='del'>-                if (GF_CLI_TOP_READ_PERF == top_op) {</div><div class='del'>-                        ret = glusterfs_volume_top_read_perf</div><div class='del'>-                                (blk_size, blk_count, xlator_req.name,</div><div class='del'>-                                 &amp;throughput, &amp;time);</div><div class='del'>-                } else if ( GF_CLI_TOP_WRITE_PERF == top_op) {</div><div class='del'>-                        ret = glusterfs_volume_top_write_perf</div><div class='del'>-                                (blk_size, blk_count, xlator_req.name,</div><div class='del'>-                                 &amp;throughput, &amp;time);</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_double (dict, "time", time);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='del'>-                ret = dict_set_double (dict, "throughput", throughput);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto cont;</div><div class='add'>+        if (GF_CLI_TOP_READ_PERF == top_op) {</div><div class='add'>+            ret = glusterfs_volume_top_read_perf(</div><div class='add'>+                blk_size, blk_count, xlator_req.name, &amp;throughput, &amp;time);</div><div class='add'>+        } else if (GF_CLI_TOP_WRITE_PERF == top_op) {</div><div class='add'>+            ret = glusterfs_volume_top_write_perf(</div><div class='add'>+                blk_size, blk_count, xlator_req.name, &amp;throughput, &amp;time);</div><div class='ctx'>         }</div><div class='add'>+        ret = dict_set_double(dict, "time", time);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='add'>+        ret = dict_set_double(dict, "throughput", throughput);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto cont;</div><div class='add'>+    }</div><div class='ctx'> cont:</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-</div><div class='del'>-        xlator = get_xlator_by_name (any, xlator_req.name);</div><div class='del'>-        if (!xlator) {</div><div class='del'>-                snprintf (msg, sizeof (msg), "xlator %s is not loaded",</div><div class='del'>-                          xlator_req.name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Searching by name will only get us to the decompounder translator,</div><div class='del'>-         * but we really want io-stats.  Since we know the exact relationship</div><div class='del'>-         * between these two, it's easy to get from one to the other.</div><div class='del'>-         *</div><div class='del'>-         * TBD: should this even be notify, or something else?</div><div class='del'>-         */</div><div class='del'>-        xlator = FIRST_CHILD(xlator);</div><div class='del'>-</div><div class='del'>-        output = dict_new ();</div><div class='del'>-        ret = xlator-&gt;notify (xlator, GF_EVENT_TRANSLATOR_INFO, dict, output);</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+</div><div class='add'>+    xlator = get_xlator_by_name(any, xlator_req.name);</div><div class='add'>+    if (!xlator) {</div><div class='add'>+        snprintf(msg, sizeof(msg), "xlator %s is not loaded", xlator_req.name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Searching by name will only get us to the decompounder translator,</div><div class='add'>+     * but we really want io-stats.  Since we know the exact relationship</div><div class='add'>+     * between these two, it's easy to get from one to the other.</div><div class='add'>+     *</div><div class='add'>+     * TBD: should this even be notify, or something else?</div><div class='add'>+     */</div><div class='add'>+    xlator = FIRST_CHILD(xlator);</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    ret = xlator-&gt;notify(xlator, GF_EVENT_TRANSLATOR_INFO, dict, output);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ret = glusterfs_translator_info_response_send (req, ret, msg, output);</div><div class='del'>-</div><div class='del'>-        free (xlator_req.name);</div><div class='del'>-        free (xlator_req.input.input_val);</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = glusterfs_translator_info_response_send(req, ret, msg, output);</div><div class='add'>+</div><div class='add'>+    free(xlator_req.name);</div><div class='add'>+    free(xlator_req.input.input_val);</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_volume_top_write_perf (uint32_t blk_size, uint32_t blk_count,</div><div class='del'>-                                 char *brick_path, double *throughput,</div><div class='del'>-                                 double *time)</div><div class='add'>+glusterfs_volume_top_write_perf(uint32_t blk_size, uint32_t blk_count,</div><div class='add'>+                                char *brick_path, double *throughput,</div><div class='add'>+                                double *time)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 fd = -1;</div><div class='del'>-        int32_t                 input_fd = -1;</div><div class='del'>-        char                    export_path[PATH_MAX] = {0,};</div><div class='del'>-        char                    *buf = NULL;</div><div class='del'>-        int32_t                 iter = 0;</div><div class='del'>-        int32_t                 ret = -1;</div><div class='del'>-        uint64_t                total_blks = 0;</div><div class='del'>-        struct timeval          begin, end = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (brick_path);</div><div class='del'>-        GF_ASSERT (throughput);</div><div class='del'>-        GF_ASSERT (time);</div><div class='del'>-        if (!(blk_size &gt; 0) || ! (blk_count &gt; 0))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (export_path, sizeof (export_path), "%s/%s",</div><div class='del'>-                  brick_path, ".gf-tmp-stats-perf");</div><div class='del'>-</div><div class='del'>-        fd = open (export_path, O_CREAT|O_RDWR, S_IRWXU);</div><div class='del'>-        if (-1 == fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR, "Could not open tmp file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = GF_MALLOC (blk_size * sizeof(*buf), gf_common_mt_char);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t fd = -1;</div><div class='add'>+    int32_t input_fd = -1;</div><div class='add'>+    char export_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int32_t iter = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t total_blks = 0;</div><div class='add'>+    struct timeval begin, end = {</div><div class='add'>+                              0,</div><div class='add'>+                          };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(brick_path);</div><div class='add'>+    GF_ASSERT(throughput);</div><div class='add'>+    GF_ASSERT(time);</div><div class='add'>+    if (!(blk_size &gt; 0) || !(blk_count &gt; 0))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(export_path, sizeof(export_path), "%s/%s", brick_path,</div><div class='add'>+             ".gf-tmp-stats-perf");</div><div class='add'>+</div><div class='add'>+    fd = open(export_path, O_CREAT | O_RDWR, S_IRWXU);</div><div class='add'>+    if (-1 == fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "Could not open tmp file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        input_fd = open ("/dev/zero", O_RDONLY);</div><div class='del'>-        if (-1 == input_fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd",GF_LOG_ERROR, "Unable to open input file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    buf = GF_MALLOC(blk_size * sizeof(*buf), gf_common_mt_char);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;begin, NULL);</div><div class='del'>-        for (iter = 0; iter &lt; blk_count; iter++) {</div><div class='del'>-                ret = sys_read (input_fd, buf, blk_size);</div><div class='del'>-                if (ret != blk_size) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = sys_write (fd, buf, blk_size);</div><div class='del'>-                if (ret != blk_size) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                total_blks += ret;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='del'>-        if (total_blks != ((uint64_t)blk_size * blk_count)) {</div><div class='del'>-                gf_log ("glusterd", GF_LOG_WARNING, "Error in write");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    input_fd = open("/dev/zero", O_RDONLY);</div><div class='add'>+    if (-1 == input_fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "Unable to open input file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;begin, NULL);</div><div class='add'>+    for (iter = 0; iter &lt; blk_count; iter++) {</div><div class='add'>+        ret = sys_read(input_fd, buf, blk_size);</div><div class='add'>+        if (ret != blk_size) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = sys_write(fd, buf, blk_size);</div><div class='add'>+        if (ret != blk_size) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        total_blks += ret;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (total_blks != ((uint64_t)blk_size * blk_count)) {</div><div class='add'>+        gf_log("glusterd", GF_LOG_WARNING, "Error in write");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;end, NULL);</div><div class='del'>-        *time = (end.tv_sec - begin.tv_sec) * 1e6</div><div class='del'>-                     + (end.tv_usec - begin.tv_usec);</div><div class='del'>-        *throughput = total_blks / *time;</div><div class='del'>-        gf_log ("glusterd", GF_LOG_INFO, "Throughput %.2f Mbps time %.2f secs "</div><div class='del'>-                "bytes written %"PRId64, *throughput, *time, total_blks);</div><div class='add'>+    gettimeofday(&amp;end, NULL);</div><div class='add'>+    *time = (end.tv_sec - begin.tv_sec) * 1e6 + (end.tv_usec - begin.tv_usec);</div><div class='add'>+    *throughput = total_blks / *time;</div><div class='add'>+    gf_log("glusterd", GF_LOG_INFO,</div><div class='add'>+           "Throughput %.2f Mbps time %.2f secs "</div><div class='add'>+           "bytes written %" PRId64,</div><div class='add'>+           *throughput, *time, total_blks);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                sys_close (fd);</div><div class='del'>-        if (input_fd &gt;= 0)</div><div class='del'>-                sys_close (input_fd);</div><div class='del'>-        GF_FREE (buf);</div><div class='del'>-        sys_unlink (export_path);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        sys_close(fd);</div><div class='add'>+    if (input_fd &gt;= 0)</div><div class='add'>+        sys_close(input_fd);</div><div class='add'>+    GF_FREE(buf);</div><div class='add'>+    sys_unlink(export_path);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_volume_top_read_perf (uint32_t blk_size, uint32_t blk_count,</div><div class='del'>-                                char *brick_path, double *throughput,</div><div class='del'>-                                double *time)</div><div class='add'>+glusterfs_volume_top_read_perf(uint32_t blk_size, uint32_t blk_count,</div><div class='add'>+                               char *brick_path, double *throughput,</div><div class='add'>+                               double *time)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 fd = -1;</div><div class='del'>-        int32_t                 input_fd = -1;</div><div class='del'>-        int32_t                 output_fd = -1;</div><div class='del'>-        char                    export_path[PATH_MAX] = {0,};</div><div class='del'>-        char                    *buf = NULL;</div><div class='del'>-        int32_t                 iter = 0;</div><div class='del'>-        int32_t                 ret = -1;</div><div class='del'>-        uint64_t                total_blks = 0;</div><div class='del'>-        struct timeval          begin, end = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (brick_path);</div><div class='del'>-        GF_ASSERT (throughput);</div><div class='del'>-        GF_ASSERT (time);</div><div class='del'>-        if (!(blk_size &gt; 0) || ! (blk_count &gt; 0))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (export_path, sizeof (export_path), "%s/%s",</div><div class='del'>-                  brick_path, ".gf-tmp-stats-perf");</div><div class='del'>-        fd = open (export_path, O_CREAT|O_RDWR, S_IRWXU);</div><div class='del'>-        if (-1 == fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR, "Could not open tmp file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = GF_MALLOC (blk_size * sizeof(*buf), gf_common_mt_char);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR, "Could not allocate memory");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        input_fd = open ("/dev/zero", O_RDONLY);</div><div class='del'>-        if (-1 == input_fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR, "Could not open input file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        output_fd = open ("/dev/null", O_RDWR);</div><div class='del'>-        if (-1 == output_fd) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR, "Could not open output file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t fd = -1;</div><div class='add'>+    int32_t input_fd = -1;</div><div class='add'>+    int32_t output_fd = -1;</div><div class='add'>+    char export_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int32_t iter = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t total_blks = 0;</div><div class='add'>+    struct timeval begin, end = {</div><div class='add'>+                              0,</div><div class='add'>+                          };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(brick_path);</div><div class='add'>+    GF_ASSERT(throughput);</div><div class='add'>+    GF_ASSERT(time);</div><div class='add'>+    if (!(blk_size &gt; 0) || !(blk_count &gt; 0))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(export_path, sizeof(export_path), "%s/%s", brick_path,</div><div class='add'>+             ".gf-tmp-stats-perf");</div><div class='add'>+    fd = open(export_path, O_CREAT | O_RDWR, S_IRWXU);</div><div class='add'>+    if (-1 == fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "Could not open tmp file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (iter = 0; iter &lt; blk_count; iter++) {</div><div class='del'>-                ret = sys_read (input_fd, buf, blk_size);</div><div class='del'>-                if (ret != blk_size) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = sys_write (fd, buf, blk_size);</div><div class='del'>-                if (ret != blk_size) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    buf = GF_MALLOC(blk_size * sizeof(*buf), gf_common_mt_char);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "Could not allocate memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = sys_fsync (fd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR, "could not flush cache");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = sys_lseek (fd, 0L, 0);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log ("glusterd", GF_LOG_ERROR,</div><div class='del'>-                        "could not seek back to start");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gettimeofday (&amp;begin, NULL);</div><div class='del'>-        for (iter = 0; iter &lt; blk_count; iter++) {</div><div class='del'>-                ret = sys_read (fd, buf, blk_size);</div><div class='del'>-                if (ret != blk_size) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = sys_write (output_fd, buf, blk_size);</div><div class='del'>-                if (ret != blk_size) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                total_blks += ret;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='del'>-        if (total_blks != ((uint64_t)blk_size * blk_count)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("glusterd", GF_LOG_WARNING, "Error in read");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    input_fd = open("/dev/zero", O_RDONLY);</div><div class='add'>+    if (-1 == input_fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "Could not open input file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;end, NULL);</div><div class='del'>-        *time = (end.tv_sec - begin.tv_sec) * 1e6</div><div class='del'>-                + (end.tv_usec - begin.tv_usec);</div><div class='del'>-        *throughput = total_blks / *time;</div><div class='del'>-        gf_log ("glusterd", GF_LOG_INFO, "Throughput %.2f Mbps time %.2f secs "</div><div class='del'>-                "bytes read %"PRId64, *throughput, *time, total_blks);</div><div class='add'>+    output_fd = open("/dev/null", O_RDWR);</div><div class='add'>+    if (-1 == output_fd) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "Could not open output file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (iter = 0; iter &lt; blk_count; iter++) {</div><div class='add'>+        ret = sys_read(input_fd, buf, blk_size);</div><div class='add'>+        if (ret != blk_size) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = sys_write(fd, buf, blk_size);</div><div class='add'>+        if (ret != blk_size) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_fsync(fd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "could not flush cache");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = sys_lseek(fd, 0L, 0);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log("glusterd", GF_LOG_ERROR, "could not seek back to start");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gettimeofday(&amp;begin, NULL);</div><div class='add'>+    for (iter = 0; iter &lt; blk_count; iter++) {</div><div class='add'>+        ret = sys_read(fd, buf, blk_size);</div><div class='add'>+        if (ret != blk_size) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = sys_write(output_fd, buf, blk_size);</div><div class='add'>+        if (ret != blk_size) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        total_blks += ret;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (total_blks != ((uint64_t)blk_size * blk_count)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("glusterd", GF_LOG_WARNING, "Error in read");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;end, NULL);</div><div class='add'>+    *time = (end.tv_sec - begin.tv_sec) * 1e6 + (end.tv_usec - begin.tv_usec);</div><div class='add'>+    *throughput = total_blks / *time;</div><div class='add'>+    gf_log("glusterd", GF_LOG_INFO,</div><div class='add'>+           "Throughput %.2f Mbps time %.2f secs "</div><div class='add'>+           "bytes read %" PRId64,</div><div class='add'>+           *throughput, *time, total_blks);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                sys_close (fd);</div><div class='del'>-        if (input_fd &gt;= 0)</div><div class='del'>-                sys_close (input_fd);</div><div class='del'>-        if (output_fd &gt;= 0)</div><div class='del'>-                sys_close (output_fd);</div><div class='del'>-        GF_FREE (buf);</div><div class='del'>-        sys_unlink (export_path);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        sys_close(fd);</div><div class='add'>+    if (input_fd &gt;= 0)</div><div class='add'>+        sys_close(input_fd);</div><div class='add'>+    if (output_fd &gt;= 0)</div><div class='add'>+        sys_close(output_fd);</div><div class='add'>+    GF_FREE(buf);</div><div class='add'>+    sys_unlink(export_path);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_translator_op (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_translator_op(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret     = -1;</div><div class='del'>-        int32_t                  op_ret  = 0;</div><div class='del'>-        gd1_mgmt_brick_op_req    xlator_req = {0,};</div><div class='del'>-        dict_t                   *input    = NULL;</div><div class='del'>-        xlator_t                 *xlator = NULL;</div><div class='del'>-        xlator_t                 *any = NULL;</div><div class='del'>-        dict_t                   *output = NULL;</div><div class='del'>-        char                     key[2048] = {0};</div><div class='del'>-        char                    *xname = NULL;</div><div class='del'>-        glusterfs_ctx_t          *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t        *active = NULL;</div><div class='del'>-        xlator_t                 *this = NULL;</div><div class='del'>-        int                      i = 0;</div><div class='del'>-        int                      count = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                //failed to decode msg;</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        if (!active) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EAGAIN, glusterfsd_msg_38,</div><div class='del'>-                        "Not processing brick-op no. %d since volume graph is "</div><div class='del'>-                        "not yet active.", xlator_req.op);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-        input = dict_new ();</div><div class='del'>-        ret = dict_unserialize (xlator_req.input.input_val,</div><div class='del'>-                                xlator_req.input.input_len,</div><div class='del'>-                                &amp;input);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to "</div><div class='del'>-                        "unserialize req-buffer to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                input-&gt;extra_stdfree = xlator_req.input.input_val;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (input, "count", &amp;count);</div><div class='del'>-</div><div class='del'>-        output = dict_new ();</div><div class='del'>-        if (!output) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *input = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    char key[2048] = {0};</div><div class='add'>+    char *xname = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        // failed to decode msg;</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    if (!active) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EAGAIN, glusterfsd_msg_38,</div><div class='add'>+               "Not processing brick-op no. %d since volume graph is "</div><div class='add'>+               "not yet active.",</div><div class='add'>+               xlator_req.op);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+    input = dict_new();</div><div class='add'>+    ret = dict_unserialize(xlator_req.input.input_val,</div><div class='add'>+                           xlator_req.input.input_len, &amp;input);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to "</div><div class='add'>+               "unserialize req-buffer to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        input-&gt;extra_stdfree = xlator_req.input.input_val;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(input, "count", &amp;count);</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    if (!output) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++)  {</div><div class='del'>-                snprintf (key, sizeof (key), "xl-%d", i);</div><div class='del'>-                ret = dict_get_str (input, key, &amp;xname);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Couldn't get "</div><div class='del'>-                                "xlator %s ", key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                xlator = xlator_search_by_name (any, xname);</div><div class='del'>-                if (!xlator) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "xlator %s is not "</div><div class='del'>-                                "loaded", xname);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; count; i++)  {</div><div class='del'>-                snprintf (key, sizeof (key), "xl-%d", i);</div><div class='del'>-                ret = dict_get_str (input, key, &amp;xname);</div><div class='del'>-                xlator = xlator_search_by_name (any, xname);</div><div class='del'>-                XLATOR_NOTIFY (ret, xlator, GF_EVENT_TRANSLATOR_OP, input, output);</div><div class='del'>-                /* If notify fails for an xlator we need to capture it but</div><div class='del'>-                 * continue with the loop. */</div><div class='del'>-                if (ret)</div><div class='del'>-                        op_ret = -1;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "xl-%d", i);</div><div class='add'>+        ret = dict_get_str(input, key, &amp;xname);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Couldn't get "</div><div class='add'>+                   "xlator %s ",</div><div class='add'>+                   key);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = op_ret;</div><div class='add'>+        xlator = xlator_search_by_name(any, xname);</div><div class='add'>+        if (!xlator) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "xlator %s is not "</div><div class='add'>+                   "loaded",</div><div class='add'>+                   xname);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "xl-%d", i);</div><div class='add'>+        ret = dict_get_str(input, key, &amp;xname);</div><div class='add'>+        xlator = xlator_search_by_name(any, xname);</div><div class='add'>+        XLATOR_NOTIFY(ret, xlator, GF_EVENT_TRANSLATOR_OP, input, output);</div><div class='add'>+        /* If notify fails for an xlator we need to capture it but</div><div class='add'>+         * continue with the loop. */</div><div class='add'>+        if (ret)</div><div class='add'>+            op_ret = -1;</div><div class='add'>+    }</div><div class='add'>+    ret = op_ret;</div><div class='ctx'> out:</div><div class='del'>-        glusterfs_xlator_op_response_send (req, ret, "", output);</div><div class='del'>-        if (input)</div><div class='del'>-                dict_unref (input);</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        free (xlator_req.name); //malloced by xdr</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    glusterfs_xlator_op_response_send(req, ret, "", output);</div><div class='add'>+    if (input)</div><div class='add'>+        dict_unref(input);</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    free(xlator_req.name);  // malloced by xdr</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_bitrot (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_bitrot(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret          = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req    xlator_req   = {0,};</div><div class='del'>-        dict_t                   *input       = NULL;</div><div class='del'>-        dict_t                   *output      = NULL;</div><div class='del'>-        xlator_t                 *any         = NULL;</div><div class='del'>-        xlator_t                 *this        = NULL;</div><div class='del'>-        xlator_t                 *xlator      = NULL;</div><div class='del'>-        char                     msg[2048]    = {0,};</div><div class='del'>-        char                     xname[1024]  = {0,};</div><div class='del'>-        glusterfs_ctx_t          *ctx         = NULL;</div><div class='del'>-        glusterfs_graph_t        *active      = NULL;</div><div class='del'>-        char                     *scrub_opt   = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                             (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /*failed to decode msg;*/</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        if (!active) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-</div><div class='del'>-        input = dict_new ();</div><div class='del'>-        if (!input)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (xlator_req.input.input_val,</div><div class='del'>-                                xlator_req.input.input_len,</div><div class='del'>-                                &amp;input);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_35,</div><div class='del'>-                        "rpc req buffer unserialization failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Send scrubber request to bitrot xlator */</div><div class='del'>-        snprintf (xname, sizeof (xname), "%s-bit-rot-0", xlator_req.name);</div><div class='del'>-        xlator = xlator_search_by_name (any, xname);</div><div class='del'>-        if (!xlator) {</div><div class='del'>-                snprintf (msg, sizeof (msg), "xlator %s is not loaded", xname);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_36,</div><div class='del'>-                        "problem in xlator loading.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        output = dict_new ();</div><div class='del'>-        if (!output) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (input, "scrub-value", &amp;scrub_opt);</div><div class='del'>-        if (ret) {</div><div class='del'>-                snprintf (msg, sizeof (msg), "Failed to get scrub value");</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_37,</div><div class='del'>-                        "failed to get dict value");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!strncmp (scrub_opt, "status", SLEN ("status"))) {</div><div class='del'>-                ret = xlator-&gt;notify (xlator, GF_EVENT_SCRUB_STATUS, input,</div><div class='del'>-                                      output);</div><div class='del'>-        } else if (!strncmp (scrub_opt, "ondemand", SLEN ("ondemand"))) {</div><div class='del'>-                ret = xlator-&gt;notify (xlator, GF_EVENT_SCRUB_ONDEMAND, input,</div><div class='del'>-                                      output);</div><div class='del'>-                if (ret == -2) {</div><div class='del'>-                        snprintf (msg, sizeof (msg), "Scrubber is in "</div><div class='del'>-                                  "Pause/Inactive/Running state");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *input = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    char msg[2048] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char xname[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    char *scrub_opt = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /*failed to decode msg;*/</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    if (!active) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+</div><div class='add'>+    input = dict_new();</div><div class='add'>+    if (!input)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(xlator_req.input.input_val,</div><div class='add'>+                           xlator_req.input.input_len, &amp;input);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_35,</div><div class='add'>+               "rpc req buffer unserialization failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Send scrubber request to bitrot xlator */</div><div class='add'>+    snprintf(xname, sizeof(xname), "%s-bit-rot-0", xlator_req.name);</div><div class='add'>+    xlator = xlator_search_by_name(any, xname);</div><div class='add'>+    if (!xlator) {</div><div class='add'>+        snprintf(msg, sizeof(msg), "xlator %s is not loaded", xname);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_36,</div><div class='add'>+               "problem in xlator loading.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    if (!output) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(input, "scrub-value", &amp;scrub_opt);</div><div class='add'>+    if (ret) {</div><div class='add'>+        snprintf(msg, sizeof(msg), "Failed to get scrub value");</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_37,</div><div class='add'>+               "failed to get dict value");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strncmp(scrub_opt, "status", SLEN("status"))) {</div><div class='add'>+        ret = xlator-&gt;notify(xlator, GF_EVENT_SCRUB_STATUS, input, output);</div><div class='add'>+    } else if (!strncmp(scrub_opt, "ondemand", SLEN("ondemand"))) {</div><div class='add'>+        ret = xlator-&gt;notify(xlator, GF_EVENT_SCRUB_ONDEMAND, input, output);</div><div class='add'>+        if (ret == -2) {</div><div class='add'>+            snprintf(msg, sizeof(msg),</div><div class='add'>+                     "Scrubber is in "</div><div class='add'>+                     "Pause/Inactive/Running state");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        glusterfs_translator_info_response_send (req, ret, msg, output);</div><div class='add'>+    glusterfs_translator_info_response_send(req, ret, msg, output);</div><div class='ctx'> </div><div class='del'>-        if (input)</div><div class='del'>-                dict_unref (input);</div><div class='del'>-        free (xlator_req.input.input_val); /*malloced by xdr*/</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        free (xlator_req.name);</div><div class='add'>+    if (input)</div><div class='add'>+        dict_unref(input);</div><div class='add'>+    free(xlator_req.input.input_val); /*malloced by xdr*/</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    free(xlator_req.name);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_attach (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_attach(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret             = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   xlator_req      = {0,};</div><div class='del'>-        xlator_t                *this           = NULL;</div><div class='del'>-        xlator_t                *nextchild      = NULL;</div><div class='del'>-        glusterfs_graph_t       *newgraph       = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx            = NULL;</div><div class='del'>-        xlator_t                *srv_xl         = NULL;</div><div class='del'>-        server_conf_t           *srv_conf       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-        if (!ctx-&gt;cmd_args.volfile_id) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "No volfile-id provided, erroring out");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                             (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /*failed to decode msg;*/</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        {</div><div class='del'>-                if (this-&gt;ctx-&gt;active) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                "got attach for %s", xlator_req.name);</div><div class='del'>-                        ret = glusterfs_graph_attach (this-&gt;ctx-&gt;active,</div><div class='del'>-                                              xlator_req.name, &amp;newgraph);</div><div class='del'>-                        if (!ret &amp;&amp; (newgraph &amp;&amp; newgraph-&gt;first)) {</div><div class='del'>-                                nextchild = newgraph-&gt;first;</div><div class='del'>-                                ret = xlator_notify (nextchild,</div><div class='del'>-                                                     GF_EVENT_PARENT_UP,</div><div class='del'>-                                                     nextchild);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                0,</div><div class='del'>-                                                LG_MSG_EVENT_NOTIFY_FAILED,</div><div class='del'>-                                                "Parent up notification "</div><div class='del'>-                                                "failed for %s ",</div><div class='del'>-                                                nextchild-&gt;name);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                /* we need a protocol/server xlator as</div><div class='del'>-                                 * nextchild</div><div class='del'>-                                 */</div><div class='del'>-                                srv_xl = this-&gt;ctx-&gt;active-&gt;first;</div><div class='del'>-                                srv_conf = (server_conf_t *)srv_xl-&gt;private;</div><div class='del'>-                                rpcsvc_autoscale_threads (this-&gt;ctx,</div><div class='del'>-                                                          srv_conf-&gt;rpc, 1);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "got attach for %s but no active graph",</div><div class='del'>-                                xlator_req.name);</div><div class='del'>-                }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *nextchild = NULL;</div><div class='add'>+    glusterfs_graph_t *newgraph = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *srv_xl = NULL;</div><div class='add'>+    server_conf_t *srv_conf = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    if (!ctx-&gt;cmd_args.volfile_id) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "No volfile-id provided, erroring out");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /*failed to decode msg;*/</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    {</div><div class='add'>+        if (this-&gt;ctx-&gt;active) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "got attach for %s",</div><div class='add'>+                   xlator_req.name);</div><div class='add'>+            ret = glusterfs_graph_attach(this-&gt;ctx-&gt;active, xlator_req.name,</div><div class='add'>+                                         &amp;newgraph);</div><div class='add'>+            if (!ret &amp;&amp; (newgraph &amp;&amp; newgraph-&gt;first)) {</div><div class='add'>+                nextchild = newgraph-&gt;first;</div><div class='add'>+                ret = xlator_notify(nextchild, GF_EVENT_PARENT_UP, nextchild);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        ret = -1;</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           LG_MSG_EVENT_NOTIFY_FAILED,</div><div class='add'>+                           "Parent up notification "</div><div class='add'>+                           "failed for %s ",</div><div class='add'>+                           nextchild-&gt;name);</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                /* we need a protocol/server xlator as</div><div class='add'>+                 * nextchild</div><div class='add'>+                 */</div><div class='add'>+                srv_xl = this-&gt;ctx-&gt;active-&gt;first;</div><div class='add'>+                srv_conf = (server_conf_t *)srv_xl-&gt;private;</div><div class='add'>+                rpcsvc_autoscale_threads(this-&gt;ctx, srv_conf-&gt;rpc, 1);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "got attach for %s but no active graph", xlator_req.name);</div><div class='add'>+        }</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = -1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                glusterfs_translator_info_response_send (req, ret, NULL, NULL);</div><div class='add'>+        glusterfs_translator_info_response_send(req, ret, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-                UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        }</div><div class='del'>-        free (xlator_req.input.input_val);</div><div class='del'>-        free (xlator_req.name);</div><div class='add'>+    out:</div><div class='add'>+        UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    }</div><div class='add'>+    free(xlator_req.input.input_val);</div><div class='add'>+    free(xlator_req.name);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_dump_metrics (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_dump_metrics(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret             = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   xlator_req      = {0,};</div><div class='del'>-        xlator_t                *this           = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx            = NULL;</div><div class='del'>-        char  *filepath = NULL;</div><div class='del'>-        int    fd  = -1;</div><div class='del'>-        struct stat statbuf = {0,};</div><div class='del'>-        char *msg = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                             (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /*failed to decode msg;*/</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        ret = -1;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        /* Infra for monitoring */</div><div class='del'>-        filepath = gf_monitor_metrics (ctx);</div><div class='del'>-        if (!filepath)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fd = sys_open (filepath, O_RDONLY, 0);</div><div class='del'>-        if (fd &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (sys_fstat (fd, &amp;statbuf) &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (statbuf.st_size &gt; GF_UNIT_MB) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        LG_MSG_NO_MEMORY,</div><div class='del'>-                        "Allocated size exceeds expectation: "</div><div class='del'>-                        "reconsider logic (%"GF_PRI_SIZET")",</div><div class='del'>-                        statbuf.st_size);</div><div class='del'>-        }</div><div class='del'>-        msg = GF_CALLOC (1, (statbuf.st_size + 1), gf_common_mt_char);</div><div class='del'>-        if (!msg)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = sys_read (fd, msg, statbuf.st_size);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Send all the data in errstr, instead of dictionary for now */</div><div class='del'>-        glusterfs_translator_info_response_send (req, 0, msg, NULL);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    char *filepath = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    struct stat statbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /*failed to decode msg;*/</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = -1;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    /* Infra for monitoring */</div><div class='add'>+    filepath = gf_monitor_metrics(ctx);</div><div class='add'>+    if (!filepath)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fd = sys_open(filepath, O_RDONLY, 0);</div><div class='add'>+    if (fd &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (sys_fstat(fd, &amp;statbuf) &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (statbuf.st_size &gt; GF_UNIT_MB) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+               "Allocated size exceeds expectation: "</div><div class='add'>+               "reconsider logic (%" GF_PRI_SIZET ")",</div><div class='add'>+               statbuf.st_size);</div><div class='add'>+    }</div><div class='add'>+    msg = GF_CALLOC(1, (statbuf.st_size + 1), gf_common_mt_char);</div><div class='add'>+    if (!msg)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = sys_read(fd, msg, statbuf.st_size);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Send all the data in errstr, instead of dictionary for now */</div><div class='add'>+    glusterfs_translator_info_response_send(req, 0, msg, NULL);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                sys_close (fd);</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (msg);</div><div class='del'>-        GF_FREE (filepath);</div><div class='add'>+    GF_FREE(msg);</div><div class='add'>+    GF_FREE(filepath);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_defrag (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_defrag(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret     = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req    xlator_req = {0,};</div><div class='del'>-        dict_t                   *dict    = NULL;</div><div class='del'>-        xlator_t                 *xlator = NULL;</div><div class='del'>-        xlator_t                 *any = NULL;</div><div class='del'>-        dict_t                   *output = NULL;</div><div class='del'>-        char                     msg[2048] = {0};</div><div class='del'>-        glusterfs_ctx_t          *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t        *active = NULL;</div><div class='del'>-        xlator_t                 *this = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        if (!active) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                //failed to decode msg;</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (xlator_req.input.input_val,</div><div class='del'>-                                xlator_req.input.input_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to "</div><div class='del'>-                        "unserialize req-buffer to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        xlator = xlator_search_by_name (any, xlator_req.name);</div><div class='del'>-        if (!xlator) {</div><div class='del'>-                snprintf (msg, sizeof (msg), "xlator %s is not loaded",</div><div class='del'>-                          xlator_req.name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        output = dict_new ();</div><div class='del'>-        if (!output) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    char msg[2048] = {0};</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    if (!active) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        // failed to decode msg;</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(xlator_req.input.input_val,</div><div class='add'>+                           xlator_req.input.input_len, &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to "</div><div class='add'>+               "unserialize req-buffer to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    xlator = xlator_search_by_name(any, xlator_req.name);</div><div class='add'>+    if (!xlator) {</div><div class='add'>+        snprintf(msg, sizeof(msg), "xlator %s is not loaded", xlator_req.name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    if (!output) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xlator-&gt;notify (xlator, GF_EVENT_VOLUME_DEFRAG, dict, output);</div><div class='add'>+    ret = xlator-&gt;notify(xlator, GF_EVENT_VOLUME_DEFRAG, dict, output);</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_translator_info_response_send (req, ret,</div><div class='del'>-                                                       msg, output);</div><div class='add'>+    ret = glusterfs_translator_info_response_send(req, ret, msg, output);</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        free (xlator_req.input.input_val); // malloced by xdr</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        free (xlator_req.name); //malloced by xdr</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    free(xlator_req.input.input_val);  // malloced by xdr</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    free(xlator_req.name);  // malloced by xdr</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_brick_status (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_brick_status(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   brick_req = {0,};</div><div class='del'>-        gd1_mgmt_brick_op_rsp   rsp = {0,};</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t       *active = NULL;</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='del'>-        xlator_t                *server_xl = NULL;</div><div class='del'>-        xlator_t                *brick_xl = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        dict_t                  *output = NULL;</div><div class='del'>-        char                    *xname = NULL;</div><div class='del'>-        uint32_t                cmd = 0;</div><div class='del'>-        char                    *msg = NULL;</div><div class='del'>-        char                    *brickname = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;brick_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        ret = dict_unserialize (brick_req.input.input_val,</div><div class='del'>-                                brick_req.input.input_len, &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to unserialize "</div><div class='del'>-                        "req-buffer to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_uint32 (dict, "cmd", &amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Couldn't get status op");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req brick_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gd1_mgmt_brick_op_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *server_xl = NULL;</div><div class='add'>+    xlator_t *brick_xl = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    char *xname = NULL;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    char *brickname = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;brick_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    ret = dict_unserialize(brick_req.input.input_val, brick_req.input.input_len,</div><div class='add'>+                           &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to unserialize "</div><div class='add'>+               "req-buffer to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(dict, "cmd", &amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Couldn't get status op");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "brick-name", &amp;brickname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Couldn't get brickname from"</div><div class='add'>+               " dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "ctx returned NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (ctx-&gt;active == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "ctx-&gt;active returned NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    if (ctx-&gt;active-&gt;first == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "ctx-&gt;active-&gt;first "</div><div class='add'>+               "returned NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    server_xl = active-&gt;first;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "brick-name", &amp;brickname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Couldn't get brickname from"</div><div class='del'>-                        " dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    brick_xl = get_xlator_by_name(server_xl, brickname);</div><div class='add'>+    if (!brick_xl) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "xlator %s is not loaded", xname);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='add'>+        case GF_CLI_STATUS_MEM:</div><div class='add'>+            ret = 0;</div><div class='add'>+            gf_proc_dump_mem_info_to_dict(output);</div><div class='add'>+            gf_proc_dump_mempool_info_to_dict(ctx, output);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_CLI_STATUS_CLIENTS:</div><div class='add'>+        case GF_CLI_STATUS_CLIENT_LIST:</div><div class='add'>+            ret = server_xl-&gt;dumpops-&gt;priv_to_dict(server_xl, output,</div><div class='add'>+                                                   brickname);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_CLI_STATUS_INODE:</div><div class='add'>+            ret = server_xl-&gt;dumpops-&gt;inode_to_dict(brick_xl, output);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_CLI_STATUS_FD:</div><div class='add'>+            ret = server_xl-&gt;dumpops-&gt;fd_to_dict(brick_xl, output);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_CLI_STATUS_CALLPOOL:</div><div class='add'>+            ret = 0;</div><div class='add'>+            gf_proc_dump_pending_frames_to_dict(ctx-&gt;pool, output);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "ctx returned NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (ctx-&gt;active == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "ctx-&gt;active returned NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        if (ctx-&gt;active-&gt;first == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "ctx-&gt;active-&gt;first "</div><div class='del'>-                        "returned NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        server_xl = active-&gt;first;</div><div class='add'>+        default:</div><div class='add'>+            ret = -1;</div><div class='add'>+            msg = gf_strdup("Unknown status op");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    rsp.op_ret = ret;</div><div class='add'>+    rsp.op_errno = 0;</div><div class='add'>+    if (ret &amp;&amp; msg)</div><div class='add'>+        rsp.op_errstr = msg;</div><div class='add'>+    else</div><div class='add'>+        rsp.op_errstr = "";</div><div class='ctx'> </div><div class='del'>-        brick_xl = get_xlator_by_name (server_xl, brickname);</div><div class='del'>-        if (!brick_xl) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "xlator %s is not loaded",</div><div class='del'>-                        xname);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(output, &amp;rsp.output.output_val,</div><div class='add'>+                                      &amp;rsp.output.output_len);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to serialize output dict to rsp");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        output = dict_new ();</div><div class='del'>-        switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='del'>-                case GF_CLI_STATUS_MEM:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        gf_proc_dump_mem_info_to_dict (output);</div><div class='del'>-                        gf_proc_dump_mempool_info_to_dict (ctx, output);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_CLIENTS:</div><div class='del'>-                case GF_CLI_STATUS_CLIENT_LIST:</div><div class='del'>-                        ret = server_xl-&gt;dumpops-&gt;priv_to_dict (server_xl,</div><div class='del'>-                                        output, brickname);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_INODE:</div><div class='del'>-                        ret = server_xl-&gt;dumpops-&gt;inode_to_dict (brick_xl,</div><div class='del'>-                                                                 output);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_FD:</div><div class='del'>-                        ret = server_xl-&gt;dumpops-&gt;fd_to_dict (brick_xl, output);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_CALLPOOL:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        gf_proc_dump_pending_frames_to_dict (ctx-&gt;pool, output);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        msg = gf_strdup ("Unknown status op");</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        rsp.op_ret = ret;</div><div class='del'>-        rsp.op_errno = 0;</div><div class='del'>-        if (ret &amp;&amp; msg)</div><div class='del'>-                rsp.op_errstr = msg;</div><div class='del'>-        else</div><div class='del'>-                rsp.op_errstr = "";</div><div class='del'>-</div><div class='del'>-        ret = dict_allocate_and_serialize (output, &amp;rsp.output.output_val,</div><div class='del'>-                                           &amp;rsp.output.output_len);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to serialize output dict to rsp");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glusterfs_submit_reply (req, &amp;rsp, NULL, 0, NULL,</div><div class='del'>-                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='del'>-        ret = 0;</div><div class='add'>+    glusterfs_submit_reply(req, &amp;rsp, NULL, 0, NULL,</div><div class='add'>+                           (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        free (brick_req.input.input_val);</div><div class='del'>-        GF_FREE (xname);</div><div class='del'>-        GF_FREE (msg);</div><div class='del'>-        GF_FREE (rsp.output.output_val);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    free(brick_req.input.input_val);</div><div class='add'>+    GF_FREE(xname);</div><div class='add'>+    GF_FREE(msg);</div><div class='add'>+    GF_FREE(rsp.output.output_val);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_node_status (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_node_status(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   node_req = {0,};</div><div class='del'>-        gd1_mgmt_brick_op_rsp   rsp = {0,};</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t       *active = NULL;</div><div class='del'>-        xlator_t                *any = NULL;</div><div class='del'>-        xlator_t                *node = NULL;</div><div class='del'>-        xlator_t                *subvol = NULL;</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        dict_t                  *output = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        char                    *node_name = NULL;</div><div class='del'>-        char                    *subvol_name = NULL;</div><div class='del'>-        uint32_t                cmd = 0;</div><div class='del'>-        char                    *msg = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;node_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        ret = dict_unserialize (node_req.input.input_val,</div><div class='del'>-                                node_req.input.input_len, &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to unserialize "</div><div class='del'>-                        "req buffer to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_uint32 (dict, "cmd", &amp;cmd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Couldn't get status op");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Couldn't get volname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req node_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gd1_mgmt_brick_op_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    xlator_t *node = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *node_name = NULL;</div><div class='add'>+    char *subvol_name = NULL;</div><div class='add'>+    uint32_t cmd = 0;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;node_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    ret = dict_unserialize(node_req.input.input_val, node_req.input.input_len,</div><div class='add'>+                           &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to unserialize "</div><div class='add'>+               "req buffer to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(dict, "cmd", &amp;cmd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Couldn't get status op");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Couldn't get volname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+</div><div class='add'>+    if ((cmd &amp; GF_CLI_STATUS_NFS) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;node_name, "%s", "nfs-server");</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_SHD) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;node_name, "%s", "glustershd");</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_QUOTAD) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;node_name, "%s", "quotad");</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_BITD) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;node_name, "%s", "bitd");</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_SCRUB) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;node_name, "%s", "scrubber");</div><div class='add'>+</div><div class='add'>+    else {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Failed to set node xlator name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    node = xlator_search_by_name(any, node_name);</div><div class='add'>+    if (!node) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded", node_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((cmd &amp; GF_CLI_STATUS_NFS) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;subvol_name, "%s", volname);</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_SHD) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;subvol_name, "%s-replicate-0", volname);</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_QUOTAD) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;subvol_name, "%s", volname);</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_BITD) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;subvol_name, "%s", volname);</div><div class='add'>+    else if ((cmd &amp; GF_CLI_STATUS_SCRUB) != 0)</div><div class='add'>+        ret = gf_asprintf(&amp;subvol_name, "%s", volname);</div><div class='add'>+    else {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Failed to set node xlator name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = xlator_search_by_name(node, subvol_name);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='add'>+               subvol_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='add'>+        case GF_CLI_STATUS_MEM:</div><div class='add'>+            ret = 0;</div><div class='add'>+            gf_proc_dump_mem_info_to_dict(output);</div><div class='add'>+            gf_proc_dump_mempool_info_to_dict(ctx, output);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case GF_CLI_STATUS_CLIENTS:</div><div class='add'>+            // clients not availbale for SHD</div><div class='add'>+            if ((cmd &amp; GF_CLI_STATUS_SHD) != 0)</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-</div><div class='del'>-        if ((cmd &amp; GF_CLI_STATUS_NFS) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;node_name, "%s", "nfs-server");</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_SHD) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;node_name, "%s", "glustershd");</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_QUOTAD) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;node_name, "%s", "quotad");</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_BITD) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;node_name, "%s", "bitd");</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_SCRUB) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;node_name, "%s", "scrubber");</div><div class='del'>-</div><div class='del'>-        else {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set node xlator name");</div><div class='add'>+            ret = dict_set_str(output, "volname", volname);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Error setting volname to dict");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+            ret = node-&gt;dumpops-&gt;priv_to_dict(node, output, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        node = xlator_search_by_name (any, node_name);</div><div class='del'>-        if (!node) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='del'>-                        node_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        case GF_CLI_STATUS_INODE:</div><div class='add'>+            ret = 0;</div><div class='add'>+            inode_table_dump_to_dict(subvol-&gt;itable, "conn0", output);</div><div class='add'>+            ret = dict_set_int32(output, "conncount", 1);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        if ((cmd &amp; GF_CLI_STATUS_NFS) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;subvol_name, "%s", volname);</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_SHD) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;subvol_name, "%s-replicate-0", volname);</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_QUOTAD) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;subvol_name, "%s", volname);</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_BITD) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;subvol_name, "%s", volname);</div><div class='del'>-        else if ((cmd &amp; GF_CLI_STATUS_SCRUB) != 0)</div><div class='del'>-                ret = gf_asprintf (&amp;subvol_name, "%s", volname);</div><div class='del'>-        else {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set node xlator name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        case GF_CLI_STATUS_FD:</div><div class='add'>+            // cannot find fd-tables in nfs-server graph</div><div class='add'>+            // TODO: finish once found</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        subvol = xlator_search_by_name (node, subvol_name);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='del'>-                        subvol_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        case GF_CLI_STATUS_CALLPOOL:</div><div class='add'>+            ret = 0;</div><div class='add'>+            gf_proc_dump_pending_frames_to_dict(ctx-&gt;pool, output);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        output = dict_new ();</div><div class='del'>-        switch (cmd &amp; GF_CLI_STATUS_MASK) {</div><div class='del'>-                case GF_CLI_STATUS_MEM:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        gf_proc_dump_mem_info_to_dict (output);</div><div class='del'>-                        gf_proc_dump_mempool_info_to_dict (ctx, output);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_CLIENTS:</div><div class='del'>-                        // clients not availbale for SHD</div><div class='del'>-                        if ((cmd &amp; GF_CLI_STATUS_SHD) != 0)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_str (output, "volname", volname);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Error setting volname to dict");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = node-&gt;dumpops-&gt;priv_to_dict (node, output, NULL);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_INODE:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        inode_table_dump_to_dict (subvol-&gt;itable, "conn0",</div><div class='del'>-                                                  output);</div><div class='del'>-                        ret = dict_set_int32 (output, "conncount", 1);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_FD:</div><div class='del'>-                        // cannot find fd-tables in nfs-server graph</div><div class='del'>-                        // TODO: finish once found</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_CLI_STATUS_CALLPOOL:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        gf_proc_dump_pending_frames_to_dict (ctx-&gt;pool, output);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        msg = gf_strdup ("Unknown status op");</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR, "%s", msg);</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        rsp.op_ret = ret;</div><div class='del'>-        rsp.op_errno = 0;</div><div class='del'>-        if (ret &amp;&amp; msg)</div><div class='del'>-                rsp.op_errstr = msg;</div><div class='del'>-        else</div><div class='del'>-                rsp.op_errstr = "";</div><div class='add'>+        default:</div><div class='add'>+            ret = -1;</div><div class='add'>+            msg = gf_strdup("Unknown status op");</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR, "%s", msg);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    rsp.op_ret = ret;</div><div class='add'>+    rsp.op_errno = 0;</div><div class='add'>+    if (ret &amp;&amp; msg)</div><div class='add'>+        rsp.op_errstr = msg;</div><div class='add'>+    else</div><div class='add'>+        rsp.op_errstr = "";</div><div class='ctx'> </div><div class='del'>-        ret = dict_allocate_and_serialize (output, &amp;rsp.output.output_val,</div><div class='del'>-                                           &amp;rsp.output.output_len);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to serialize output dict to rsp");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(output, &amp;rsp.output.output_val,</div><div class='add'>+                                      &amp;rsp.output.output_len);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to serialize output dict to rsp");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glusterfs_submit_reply (req, &amp;rsp, NULL, 0, NULL,</div><div class='del'>-                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='del'>-        ret = 0;</div><div class='add'>+    glusterfs_submit_reply(req, &amp;rsp, NULL, 0, NULL,</div><div class='add'>+                           (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        free (node_req.input.input_val);</div><div class='del'>-        GF_FREE (msg);</div><div class='del'>-        GF_FREE (rsp.output.output_val);</div><div class='del'>-        GF_FREE (node_name);</div><div class='del'>-        GF_FREE (subvol_name);</div><div class='del'>-</div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    free(node_req.input.input_val);</div><div class='add'>+    GF_FREE(msg);</div><div class='add'>+    GF_FREE(rsp.output.output_val);</div><div class='add'>+    GF_FREE(node_name);</div><div class='add'>+    GF_FREE(subvol_name);</div><div class='add'>+</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_nfs_profile (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_nfs_profile(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   nfs_req = {0,};</div><div class='del'>-        gd1_mgmt_brick_op_rsp   rsp = {0,};</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t       *active = NULL;</div><div class='del'>-        xlator_t                *any = NULL;</div><div class='del'>-        xlator_t                *nfs = NULL;</div><div class='del'>-        xlator_t                *subvol = NULL;</div><div class='del'>-        char                    *volname = NULL;</div><div class='del'>-        dict_t                  *output = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;nfs_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        ret = dict_unserialize (nfs_req.input.input_val,</div><div class='del'>-                                nfs_req.input.input_len, &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to "</div><div class='del'>-                        "unserialize req-buffer to dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "volname", &amp;volname);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Couldn't get volname");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-</div><div class='del'>-        // is this needed?</div><div class='del'>-        // are problems possible by searching for subvol directly from "any"?</div><div class='del'>-        nfs = xlator_search_by_name (any, "nfs-server");</div><div class='del'>-        if (!nfs) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "xlator nfs-server is "</div><div class='del'>-                        "not loaded");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = xlator_search_by_name (nfs, volname);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "xlator %s is no loaded",</div><div class='del'>-                        volname);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req nfs_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gd1_mgmt_brick_op_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    xlator_t *nfs = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;nfs_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    ret = dict_unserialize(nfs_req.input.input_val, nfs_req.input.input_len,</div><div class='add'>+                           &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to "</div><div class='add'>+               "unserialize req-buffer to dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "volname", &amp;volname);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Couldn't get volname");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+</div><div class='add'>+    // is this needed?</div><div class='add'>+    // are problems possible by searching for subvol directly from "any"?</div><div class='add'>+    nfs = xlator_search_by_name(any, "nfs-server");</div><div class='add'>+    if (!nfs) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "xlator nfs-server is "</div><div class='add'>+               "not loaded");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = xlator_search_by_name(nfs, volname);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "xlator %s is no loaded", volname);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        output = dict_new ();</div><div class='del'>-        ret = subvol-&gt;notify (subvol, GF_EVENT_TRANSLATOR_INFO, dict, output);</div><div class='add'>+    output = dict_new();</div><div class='add'>+    ret = subvol-&gt;notify(subvol, GF_EVENT_TRANSLATOR_INFO, dict, output);</div><div class='ctx'> </div><div class='del'>-        rsp.op_ret = ret;</div><div class='del'>-        rsp.op_errno = 0;</div><div class='del'>-        rsp.op_errstr = "";</div><div class='add'>+    rsp.op_ret = ret;</div><div class='add'>+    rsp.op_errno = 0;</div><div class='add'>+    rsp.op_errstr = "";</div><div class='ctx'> </div><div class='del'>-        ret = dict_allocate_and_serialize (output, &amp;rsp.output.output_val,</div><div class='del'>-                                           &amp;rsp.output.output_len);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to serialize output dict to rsp");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(output, &amp;rsp.output.output_val,</div><div class='add'>+                                      &amp;rsp.output.output_len);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to serialize output dict to rsp");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glusterfs_submit_reply (req, &amp;rsp, NULL, 0, NULL,</div><div class='del'>-                                (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='del'>-        ret = 0;</div><div class='add'>+    glusterfs_submit_reply(req, &amp;rsp, NULL, 0, NULL,</div><div class='add'>+                           (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free (nfs_req.input.input_val);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        GF_FREE (rsp.output.output_val);</div><div class='del'>-</div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    free(nfs_req.input.input_val);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    GF_FREE(rsp.output.output_val);</div><div class='add'>+</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_volume_barrier_op (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_volume_barrier_op(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret     = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req    xlator_req = {0,};</div><div class='del'>-        dict_t                   *dict    = NULL;</div><div class='del'>-        xlator_t                 *xlator = NULL;</div><div class='del'>-        xlator_t                 *any = NULL;</div><div class='del'>-        dict_t                   *output = NULL;</div><div class='del'>-        char                     msg[2048] = {0};</div><div class='del'>-        glusterfs_ctx_t          *ctx = NULL;</div><div class='del'>-        glusterfs_graph_t        *active = NULL;</div><div class='del'>-        xlator_t                 *this = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        if (!active) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        any = active-&gt;first;</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0], &amp;xlator_req,</div><div class='del'>-                              (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                //failed to decode msg;</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (xlator_req.input.input_val,</div><div class='del'>-                                xlator_req.input.input_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to "</div><div class='del'>-                        "unserialize req-buffer to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        xlator = xlator_search_by_name (any, xlator_req.name);</div><div class='del'>-        if (!xlator) {</div><div class='del'>-                snprintf (msg, sizeof (msg), "xlator %s is not loaded",</div><div class='del'>-                          xlator_req.name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        output = dict_new ();</div><div class='del'>-        if (!output) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req xlator_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    char msg[2048] = {0};</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    if (!active) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    any = active-&gt;first;</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;xlator_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        // failed to decode msg;</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(xlator_req.input.input_val,</div><div class='add'>+                           xlator_req.input.input_len, &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to "</div><div class='add'>+               "unserialize req-buffer to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    xlator = xlator_search_by_name(any, xlator_req.name);</div><div class='add'>+    if (!xlator) {</div><div class='add'>+        snprintf(msg, sizeof(msg), "xlator %s is not loaded", xlator_req.name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    output = dict_new();</div><div class='add'>+    if (!output) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xlator-&gt;notify (xlator, GF_EVENT_VOLUME_BARRIER_OP,</div><div class='del'>-                              dict, output);</div><div class='add'>+    ret = xlator-&gt;notify(xlator, GF_EVENT_VOLUME_BARRIER_OP, dict, output);</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_translator_info_response_send (req, ret,</div><div class='del'>-                                                       msg, output);</div><div class='add'>+    ret = glusterfs_translator_info_response_send(req, ret, msg, output);</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        free (xlator_req.input.input_val); // malloced by xdr</div><div class='del'>-        if (output)</div><div class='del'>-                dict_unref (output);</div><div class='del'>-        free (xlator_req.name); //malloced by xdr</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    free(xlator_req.input.input_val);  // malloced by xdr</div><div class='add'>+    if (output)</div><div class='add'>+        dict_unref(output);</div><div class='add'>+    free(xlator_req.name);  // malloced by xdr</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_barrier (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_barrier(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                     ret         = -1;</div><div class='del'>-        gd1_mgmt_brick_op_req   brick_req   = {0,};</div><div class='del'>-        gd1_mgmt_brick_op_rsp   brick_rsp   = {0,};</div><div class='del'>-        glusterfs_ctx_t         *ctx        = NULL;</div><div class='del'>-        glusterfs_graph_t       *active     = NULL;</div><div class='del'>-        xlator_t                *top        = NULL;</div><div class='del'>-        xlator_t                *xlator     = NULL;</div><div class='del'>-        xlator_t                *old_THIS   = NULL;</div><div class='del'>-        dict_t                  *dict       = NULL;</div><div class='del'>-        gf_boolean_t            barrier     = _gf_true;</div><div class='del'>-        gf_boolean_t            barrier_err = _gf_false;</div><div class='del'>-        xlator_list_t           *trav;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic(req-&gt;msg[0], &amp;brick_req,</div><div class='del'>-                             (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-        active = ctx-&gt;active;</div><div class='del'>-        top = active-&gt;first;</div><div class='del'>-</div><div class='del'>-        for (trav = top-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                if (strcmp (trav-&gt;xlator-&gt;name, brick_req.name) == 0) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (!trav) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        top = trav-&gt;xlator;</div><div class='del'>-</div><div class='del'>-        dict = dict_new();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize(brick_req.input.input_val,</div><div class='del'>-                               brick_req.input.input_len, &amp;dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to unserialize "</div><div class='del'>-                        "request dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        brick_rsp.op_ret = 0;</div><div class='del'>-        brick_rsp.op_errstr = ""; // initing to prevent serilaztion failures</div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-</div><div class='del'>-        /* Send barrier request to the barrier xlator */</div><div class='del'>-        xlator = get_xlator_by_type (top, "features/barrier");</div><div class='del'>-        if (!xlator) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='del'>-                        "features/barrier");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        THIS = xlator;</div><div class='del'>-        // TODO: Extend this to accept return of errnos</div><div class='del'>-        ret = xlator-&gt;notify (xlator, GF_EVENT_TRANSLATOR_OP, dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "barrier notify failed");</div><div class='del'>-                brick_rsp.op_ret = ret;</div><div class='del'>-                brick_rsp.op_errstr = gf_strdup ("Failed to reconfigure "</div><div class='del'>-                                                 "barrier.");</div><div class='del'>-                /* This is to invoke changelog-barrier disable if barrier</div><div class='del'>-                 * disable fails and don't invoke if barrier enable fails.</div><div class='del'>-                 */</div><div class='del'>-                barrier = dict_get_str_boolean (dict, "barrier", _gf_true);</div><div class='del'>-                if (barrier)</div><div class='del'>-                        goto submit_reply;</div><div class='del'>-                else</div><div class='del'>-                        barrier_err = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gd1_mgmt_brick_op_req brick_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gd1_mgmt_brick_op_rsp brick_rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_graph_t *active = NULL;</div><div class='add'>+    xlator_t *top = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_boolean_t barrier = _gf_true;</div><div class='add'>+    gf_boolean_t barrier_err = _gf_false;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;brick_req,</div><div class='add'>+                         (xdrproc_t)xdr_gd1_mgmt_brick_op_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+    active = ctx-&gt;active;</div><div class='add'>+    top = active-&gt;first;</div><div class='add'>+</div><div class='add'>+    for (trav = top-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        if (strcmp(trav-&gt;xlator-&gt;name, brick_req.name) == 0) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (!trav) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    top = trav-&gt;xlator;</div><div class='ctx'> </div><div class='del'>-        /* Reset THIS so that we have it correct in case of an error below</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(brick_req.input.input_val, brick_req.input.input_len,</div><div class='add'>+                           &amp;dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to unserialize "</div><div class='add'>+               "request dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    brick_rsp.op_ret = 0;</div><div class='add'>+    brick_rsp.op_errstr = "";  // initing to prevent serilaztion failures</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+</div><div class='add'>+    /* Send barrier request to the barrier xlator */</div><div class='add'>+    xlator = get_xlator_by_type(top, "features/barrier");</div><div class='add'>+    if (!xlator) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='add'>+               "features/barrier");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    THIS = xlator;</div><div class='add'>+    // TODO: Extend this to accept return of errnos</div><div class='add'>+    ret = xlator-&gt;notify(xlator, GF_EVENT_TRANSLATOR_OP, dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "barrier notify failed");</div><div class='add'>+        brick_rsp.op_ret = ret;</div><div class='add'>+        brick_rsp.op_errstr = gf_strdup(</div><div class='add'>+            "Failed to reconfigure "</div><div class='add'>+            "barrier.");</div><div class='add'>+        /* This is to invoke changelog-barrier disable if barrier</div><div class='add'>+         * disable fails and don't invoke if barrier enable fails.</div><div class='ctx'>          */</div><div class='del'>-        THIS = old_THIS;</div><div class='del'>-</div><div class='del'>-        /* Send barrier request to changelog as well */</div><div class='del'>-        xlator = get_xlator_by_type (top, "features/changelog");</div><div class='del'>-        if (!xlator) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='del'>-                        "features/changelog");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        barrier = dict_get_str_boolean(dict, "barrier", _gf_true);</div><div class='add'>+        if (barrier)</div><div class='add'>+            goto submit_reply;</div><div class='add'>+        else</div><div class='add'>+            barrier_err = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        THIS = xlator;</div><div class='del'>-        ret = xlator-&gt;notify (xlator, GF_EVENT_TRANSLATOR_OP, dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "changelog notify failed");</div><div class='del'>-                brick_rsp.op_ret = ret;</div><div class='del'>-                brick_rsp.op_errstr = gf_strdup ("changelog notify failed");</div><div class='del'>-                goto submit_reply;</div><div class='del'>-        }</div><div class='add'>+    /* Reset THIS so that we have it correct in case of an error below</div><div class='add'>+     */</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        if (barrier_err)</div><div class='del'>-                ret = -1;</div><div class='add'>+    /* Send barrier request to changelog as well */</div><div class='add'>+    xlator = get_xlator_by_type(top, "features/changelog");</div><div class='add'>+    if (!xlator) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "%s xlator is not loaded",</div><div class='add'>+               "features/changelog");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    THIS = xlator;</div><div class='add'>+    ret = xlator-&gt;notify(xlator, GF_EVENT_TRANSLATOR_OP, dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "changelog notify failed");</div><div class='add'>+        brick_rsp.op_ret = ret;</div><div class='add'>+        brick_rsp.op_errstr = gf_strdup("changelog notify failed");</div><div class='add'>+        goto submit_reply;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (barrier_err)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='ctx'> submit_reply:</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_submit_reply (req, &amp;brick_rsp, NULL, 0, NULL,</div><div class='del'>-                                      (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='add'>+    ret = glusterfs_submit_reply(req, &amp;brick_rsp, NULL, 0, NULL,</div><div class='add'>+                                 (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        free (brick_req.input.input_val);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    free(brick_req.input.input_val);</div><div class='ctx'> </div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_DEBUG, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_DEBUG, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_handle_rpc_msg (rpcsvc_request_t *req)</div><div class='add'>+glusterfs_handle_rpc_msg(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        /* for now, nothing */</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    /* for now, nothing */</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcclnt_cb_actor_t mgmt_cbk_actors[GF_CBK_MAXVALUE] = {</div><div class='del'>-        [GF_CBK_FETCHSPEC] = {"FETCHSPEC", GF_CBK_FETCHSPEC, mgmt_cbk_spec },</div><div class='del'>-        [GF_CBK_EVENT_NOTIFY] = {"EVENTNOTIFY", GF_CBK_EVENT_NOTIFY,</div><div class='del'>-                                 mgmt_cbk_event},</div><div class='del'>-        [GF_CBK_STATEDUMP] = {"STATEDUMP", GF_CBK_STATEDUMP, mgmt_cbk_event},</div><div class='add'>+    [GF_CBK_FETCHSPEC] = {"FETCHSPEC", GF_CBK_FETCHSPEC, mgmt_cbk_spec},</div><div class='add'>+    [GF_CBK_EVENT_NOTIFY] = {"EVENTNOTIFY", GF_CBK_EVENT_NOTIFY,</div><div class='add'>+                             mgmt_cbk_event},</div><div class='add'>+    [GF_CBK_STATEDUMP] = {"STATEDUMP", GF_CBK_STATEDUMP, mgmt_cbk_event},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct rpcclnt_cb_program mgmt_cbk_prog = {</div><div class='del'>-        .progname  = "GlusterFS Callback",</div><div class='del'>-        .prognum   = GLUSTER_CBK_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_CBK_VERSION,</div><div class='del'>-        .actors    = mgmt_cbk_actors,</div><div class='del'>-        .numactors = GF_CBK_MAXVALUE,</div><div class='add'>+    .progname = "GlusterFS Callback",</div><div class='add'>+    .prognum = GLUSTER_CBK_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_CBK_VERSION,</div><div class='add'>+    .actors = mgmt_cbk_actors,</div><div class='add'>+    .numactors = GF_CBK_MAXVALUE,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> char *clnt_pmap_procs[GF_PMAP_MAXVALUE] = {</div><div class='del'>-        [GF_PMAP_NULL]        = "NULL",</div><div class='del'>-        [GF_PMAP_PORTBYBRICK] = "PORTBYBRICK",</div><div class='del'>-        [GF_PMAP_BRICKBYPORT] = "BRICKBYPORT",</div><div class='del'>-        [GF_PMAP_SIGNIN]      = "SIGNIN",</div><div class='del'>-        [GF_PMAP_SIGNOUT]     = "SIGNOUT",</div><div class='del'>-        [GF_PMAP_SIGNUP]      = "SIGNUP",       /* DEPRECATED - DON'T USE! */</div><div class='add'>+    [GF_PMAP_NULL] = "NULL",</div><div class='add'>+    [GF_PMAP_PORTBYBRICK] = "PORTBYBRICK",</div><div class='add'>+    [GF_PMAP_BRICKBYPORT] = "BRICKBYPORT",</div><div class='add'>+    [GF_PMAP_SIGNIN] = "SIGNIN",</div><div class='add'>+    [GF_PMAP_SIGNOUT] = "SIGNOUT",</div><div class='add'>+    [GF_PMAP_SIGNUP] = "SIGNUP", /* DEPRECATED - DON'T USE! */</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpc_clnt_prog_t clnt_pmap_prog = {</div><div class='del'>-        .progname  = "Gluster Portmap",</div><div class='del'>-        .prognum   = GLUSTER_PMAP_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_PMAP_VERSION,</div><div class='del'>-        .procnames = clnt_pmap_procs,</div><div class='add'>+    .progname = "Gluster Portmap",</div><div class='add'>+    .prognum = GLUSTER_PMAP_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_PMAP_VERSION,</div><div class='add'>+    .procnames = clnt_pmap_procs,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> char *clnt_handshake_procs[GF_HNDSK_MAXVALUE] = {</div><div class='del'>-        [GF_HNDSK_NULL]         = "NULL",</div><div class='del'>-        [GF_HNDSK_SETVOLUME]    = "SETVOLUME",</div><div class='del'>-        [GF_HNDSK_GETSPEC]      = "GETSPEC",</div><div class='del'>-        [GF_HNDSK_PING]         = "PING",</div><div class='del'>-        [GF_HNDSK_EVENT_NOTIFY] = "EVENTNOTIFY",</div><div class='add'>+    [GF_HNDSK_NULL] = "NULL",</div><div class='add'>+    [GF_HNDSK_SETVOLUME] = "SETVOLUME",</div><div class='add'>+    [GF_HNDSK_GETSPEC] = "GETSPEC",</div><div class='add'>+    [GF_HNDSK_PING] = "PING",</div><div class='add'>+    [GF_HNDSK_EVENT_NOTIFY] = "EVENTNOTIFY",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> rpc_clnt_prog_t clnt_handshake_prog = {</div><div class='del'>-        .progname  = "GlusterFS Handshake",</div><div class='del'>-        .prognum   = GLUSTER_HNDSK_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_HNDSK_VERSION,</div><div class='del'>-        .procnames = clnt_handshake_procs,</div><div class='add'>+    .progname = "GlusterFS Handshake",</div><div class='add'>+    .prognum = GLUSTER_HNDSK_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_HNDSK_VERSION,</div><div class='add'>+    .procnames = clnt_handshake_procs,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> rpcsvc_actor_t glusterfs_actors[GLUSTERD_BRICK_MAXVALUE] = {</div><div class='del'>-        [GLUSTERD_BRICK_NULL]          = {"NULL",</div><div class='del'>-                                          GLUSTERD_BRICK_NULL,</div><div class='del'>-                                          glusterfs_handle_rpc_msg,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_TERMINATE]     = {"TERMINATE",</div><div class='del'>-                                          GLUSTERD_BRICK_TERMINATE,</div><div class='del'>-                                          glusterfs_handle_terminate,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_XLATOR_INFO]   = {"TRANSLATOR INFO",</div><div class='del'>-                                          GLUSTERD_BRICK_XLATOR_INFO,</div><div class='del'>-                                          glusterfs_handle_translator_info_get,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_XLATOR_OP]     = {"TRANSLATOR OP",</div><div class='del'>-                                          GLUSTERD_BRICK_XLATOR_OP,</div><div class='del'>-                                          glusterfs_handle_translator_op,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_STATUS]        = {"STATUS",</div><div class='del'>-                                          GLUSTERD_BRICK_STATUS,</div><div class='del'>-                                          glusterfs_handle_brick_status,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_XLATOR_DEFRAG] = {"TRANSLATOR DEFRAG",</div><div class='del'>-                                          GLUSTERD_BRICK_XLATOR_DEFRAG,</div><div class='del'>-                                          glusterfs_handle_defrag,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_NODE_PROFILE]        = {"NFS PROFILE",</div><div class='del'>-                                          GLUSTERD_NODE_PROFILE,</div><div class='del'>-                                          glusterfs_handle_nfs_profile,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_NODE_STATUS]         = {"NFS STATUS",</div><div class='del'>-                                          GLUSTERD_NODE_STATUS,</div><div class='del'>-                                          glusterfs_handle_node_status,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_VOLUME_BARRIER_OP]   = {"VOLUME BARRIER OP",</div><div class='del'>-                                          GLUSTERD_VOLUME_BARRIER_OP,</div><div class='del'>-                                          glusterfs_handle_volume_barrier_op,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_BARRIER]       = {"BARRIER",</div><div class='del'>-                                          GLUSTERD_BRICK_BARRIER,</div><div class='del'>-                                          glusterfs_handle_barrier,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_NODE_BITROT]         = {"BITROT",</div><div class='del'>-                                          GLUSTERD_NODE_BITROT,</div><div class='del'>-                                          glusterfs_handle_bitrot,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-        [GLUSTERD_BRICK_ATTACH]        = {"ATTACH",</div><div class='del'>-                                          GLUSTERD_BRICK_ATTACH,</div><div class='del'>-                                          glusterfs_handle_attach,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='del'>-</div><div class='del'>-        [GLUSTERD_DUMP_METRICS]        = {"DUMP METRICS",</div><div class='del'>-                                          GLUSTERD_DUMP_METRICS,</div><div class='del'>-                                          glusterfs_handle_dump_metrics,</div><div class='del'>-                                          NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_NULL] = {"NULL", GLUSTERD_BRICK_NULL,</div><div class='add'>+                             glusterfs_handle_rpc_msg, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_TERMINATE] = {"TERMINATE", GLUSTERD_BRICK_TERMINATE,</div><div class='add'>+                                  glusterfs_handle_terminate, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_XLATOR_INFO] = {"TRANSLATOR INFO",</div><div class='add'>+                                    GLUSTERD_BRICK_XLATOR_INFO,</div><div class='add'>+                                    glusterfs_handle_translator_info_get, NULL,</div><div class='add'>+                                    0, DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_XLATOR_OP] = {"TRANSLATOR OP", GLUSTERD_BRICK_XLATOR_OP,</div><div class='add'>+                                  glusterfs_handle_translator_op, NULL, 0,</div><div class='add'>+                                  DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_STATUS] = {"STATUS", GLUSTERD_BRICK_STATUS,</div><div class='add'>+                               glusterfs_handle_brick_status, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_XLATOR_DEFRAG] = {"TRANSLATOR DEFRAG",</div><div class='add'>+                                      GLUSTERD_BRICK_XLATOR_DEFRAG,</div><div class='add'>+                                      glusterfs_handle_defrag, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_NODE_PROFILE] = {"NFS PROFILE", GLUSTERD_NODE_PROFILE,</div><div class='add'>+                               glusterfs_handle_nfs_profile, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_NODE_STATUS] = {"NFS STATUS", GLUSTERD_NODE_STATUS,</div><div class='add'>+                              glusterfs_handle_node_status, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_VOLUME_BARRIER_OP] = {"VOLUME BARRIER OP",</div><div class='add'>+                                    GLUSTERD_VOLUME_BARRIER_OP,</div><div class='add'>+                                    glusterfs_handle_volume_barrier_op, NULL, 0,</div><div class='add'>+                                    DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_BARRIER] = {"BARRIER", GLUSTERD_BRICK_BARRIER,</div><div class='add'>+                                glusterfs_handle_barrier, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_NODE_BITROT] = {"BITROT", GLUSTERD_NODE_BITROT,</div><div class='add'>+                              glusterfs_handle_bitrot, NULL, 0, DRC_NA},</div><div class='add'>+    [GLUSTERD_BRICK_ATTACH] = {"ATTACH", GLUSTERD_BRICK_ATTACH,</div><div class='add'>+                               glusterfs_handle_attach, NULL, 0, DRC_NA},</div><div class='add'>+</div><div class='add'>+    [GLUSTERD_DUMP_METRICS] = {"DUMP METRICS", GLUSTERD_DUMP_METRICS,</div><div class='add'>+                               glusterfs_handle_dump_metrics, NULL, 0, DRC_NA},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpcsvc_program glusterfs_mop_prog = {</div><div class='del'>-        .progname  = "Gluster Brick operations",</div><div class='del'>-        .prognum   = GD_BRICK_PROGRAM,</div><div class='del'>-        .progver   = GD_BRICK_VERSION,</div><div class='del'>-        .actors    = glusterfs_actors,</div><div class='del'>-        .numactors = GLUSTERD_BRICK_MAXVALUE,</div><div class='del'>-	.synctask  = _gf_true,</div><div class='add'>+    .progname = "Gluster Brick operations",</div><div class='add'>+    .prognum = GD_BRICK_PROGRAM,</div><div class='add'>+    .progver = GD_BRICK_VERSION,</div><div class='add'>+    .actors = glusterfs_actors,</div><div class='add'>+    .numactors = GLUSTERD_BRICK_MAXVALUE,</div><div class='add'>+    .synctask = _gf_true,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mgmt_submit_request (void *req, call_frame_t *frame,</div><div class='del'>-                     glusterfs_ctx_t *ctx,</div><div class='del'>-                     rpc_clnt_prog_t *prog, int procnum,</div><div class='del'>-                     fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='add'>+mgmt_submit_request(void *req, call_frame_t *frame, glusterfs_ctx_t *ctx,</div><div class='add'>+                    rpc_clnt_prog_t *prog, int procnum, fop_cbk_fn_t cbkfn,</div><div class='add'>+                    xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        int                     ret         = -1;</div><div class='del'>-        int                     count      = 0;</div><div class='del'>-        struct iovec            iov         = {0, };</div><div class='del'>-        struct iobuf            *iobuf = NULL;</div><div class='del'>-        struct iobref           *iobref = NULL;</div><div class='del'>-        ssize_t                 xdr_size = 0;</div><div class='del'>-</div><div class='del'>-        iobref = iobref_new ();</div><div class='del'>-        if (!iobref) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (req) {</div><div class='del'>-                xdr_size = xdr_sizeof (xdrproc, req);</div><div class='del'>-</div><div class='del'>-                iobuf = iobuf_get2 (ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-                if (!iobuf) {</div><div class='del'>-                        goto out;</div><div class='del'>-                };</div><div class='del'>-</div><div class='del'>-                iobref_add (iobref, iobuf);</div><div class='del'>-</div><div class='del'>-                iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-                iov.iov_len  = iobuf_pagesize (iobuf);</div><div class='del'>-</div><div class='del'>-                /* Create the xdr payload */</div><div class='del'>-                ret = xdr_serialize_generic (iov, req, xdrproc);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_WARNING, "failed to create XDR payload");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                iov.iov_len = ret;</div><div class='del'>-                count = 1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+</div><div class='add'>+    iobref = iobref_new();</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req) {</div><div class='add'>+        xdr_size = xdr_sizeof(xdrproc, req);</div><div class='add'>+</div><div class='add'>+        iobuf = iobuf_get2(ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+        if (!iobuf) {</div><div class='add'>+            goto out;</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        iobref_add(iobref, iobuf);</div><div class='add'>+</div><div class='add'>+        iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+        iov.iov_len = iobuf_pagesize(iobuf);</div><div class='add'>+</div><div class='add'>+        /* Create the xdr payload */</div><div class='add'>+        ret = xdr_serialize_generic(iov, req, xdrproc);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to create XDR payload");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        iov.iov_len = ret;</div><div class='add'>+        count = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Send the msg */</div><div class='del'>-        ret = rpc_clnt_submit (ctx-&gt;mgmt, prog, procnum, cbkfn,</div><div class='del'>-                               &amp;iov, count,</div><div class='del'>-                               NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+    /* Send the msg */</div><div class='add'>+    ret = rpc_clnt_submit(ctx-&gt;mgmt, prog, procnum, cbkfn, &amp;iov, count, NULL, 0,</div><div class='add'>+                          iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        return ret;</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                  void *myframe)</div><div class='add'>+mgmt_getspec_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                 void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_getspec_rsp           rsp   = {0,};</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        int                      ret   = 0, locked = 0;</div><div class='del'>-        ssize_t                  size = 0;</div><div class='del'>-        FILE                    *tmpfp = NULL;</div><div class='del'>-        char                    *volfile_id = NULL;</div><div class='del'>-        gf_volfile_t            *volfile_obj = NULL;</div><div class='del'>-        gf_volfile_t            *volfile_tmp = NULL;</div><div class='del'>-        char                     sha256_hash[SHA256_DIGEST_LENGTH] = {0, };</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        char                    *servers_list = NULL;</div><div class='del'>-        int                      tmp_fd = -1;</div><div class='del'>-        char                     template[] = "/tmp/glfs.volfile.XXXXXX";</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-        ctx = frame-&gt;this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_getspec_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decoding error");</div><div class='del'>-                ret   = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (-1 == rsp.op_ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to get the 'volume file' from server");</div><div class='del'>-                ret = rsp.op_errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!rsp.xdata.xdata_len) {</div><div class='del'>-                goto volfile;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_unserialize (rsp.xdata.xdata_val, rsp.xdata.xdata_len,</div><div class='del'>-                                &amp;dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to unserialize xdata to dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict-&gt;extra_stdfree = rsp.xdata.xdata_val;</div><div class='del'>-</div><div class='del'>-        /* glusterd2 only */</div><div class='del'>-        ret = dict_get_str (dict, "servers-list", &amp;servers_list);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto volfile;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (frame-&gt;this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "Received list of available volfile servers: %s",</div><div class='del'>-                servers_list);</div><div class='add'>+    gf_getspec_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0, locked = 0;</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    FILE *tmpfp = NULL;</div><div class='add'>+    char *volfile_id = NULL;</div><div class='add'>+    gf_volfile_t *volfile_obj = NULL;</div><div class='add'>+    gf_volfile_t *volfile_tmp = NULL;</div><div class='add'>+    char sha256_hash[SHA256_DIGEST_LENGTH] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *servers_list = NULL;</div><div class='add'>+    int tmp_fd = -1;</div><div class='add'>+    char template[] = "/tmp/glfs.volfile.XXXXXX";</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+    ctx = frame-&gt;this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_process_getspec_servers_list(&amp;ctx-&gt;cmd_args, servers_list);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed (%s) to process servers list: %s",</div><div class='del'>-                        strerror (errno), servers_list);</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_getspec_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decoding error");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get the 'volume file' from server");</div><div class='add'>+        ret = rsp.op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!rsp.xdata.xdata_len) {</div><div class='add'>+        goto volfile;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_unserialize(rsp.xdata.xdata_val, rsp.xdata.xdata_len, &amp;dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to unserialize xdata to dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict-&gt;extra_stdfree = rsp.xdata.xdata_val;</div><div class='add'>+</div><div class='add'>+    /* glusterd2 only */</div><div class='add'>+    ret = dict_get_str(dict, "servers-list", &amp;servers_list);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto volfile;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(frame-&gt;this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "Received list of available volfile servers: %s", servers_list);</div><div class='add'>+</div><div class='add'>+    ret = gf_process_getspec_servers_list(&amp;ctx-&gt;cmd_args, servers_list);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed (%s) to process servers list: %s", strerror(errno),</div><div class='add'>+               servers_list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> volfile:</div><div class='del'>-        ret = 0;</div><div class='del'>-        size = rsp.op_ret;</div><div class='del'>-</div><div class='del'>-        glusterfs_compute_sha256 ((const unsigned char *) rsp.spec, size,</div><div class='del'>-                                  sha256_hash);</div><div class='del'>-</div><div class='del'>-        volfile_id = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        {</div><div class='del'>-                locked = 1;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (volfile_obj,  &amp;ctx-&gt;volfile_list,</div><div class='del'>-                                     volfile_list) {</div><div class='del'>-                        if (!strcmp (volfile_id, volfile_obj-&gt;vol_id)) {</div><div class='del'>-                                if (!memcmp (sha256_hash,</div><div class='del'>-                                      volfile_obj-&gt;volfile_checksum,</div><div class='del'>-                                      sizeof (volfile_obj-&gt;volfile_checksum))) {</div><div class='del'>-                                        gf_log (frame-&gt;this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                                "No change in volfile,"</div><div class='del'>-                                                "continuing");</div><div class='del'>-                                        goto out;</div><div class='del'>-                               }</div><div class='del'>-                               volfile_tmp = volfile_obj;</div><div class='del'>-                               break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    ret = 0;</div><div class='add'>+    size = rsp.op_ret;</div><div class='ctx'> </div><div class='del'>-                /* coverity[secure_temp] mkstemp uses 0600 as the mode */</div><div class='del'>-                tmp_fd = mkstemp (template);</div><div class='del'>-                if (-1 == tmp_fd) {</div><div class='del'>-                        gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                glusterfsd_msg_39,</div><div class='del'>-                                "Unable to create temporary file: %s",</div><div class='del'>-                                template);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    glusterfs_compute_sha256((const unsigned char *)rsp.spec, size,</div><div class='add'>+                             sha256_hash);</div><div class='ctx'> </div><div class='del'>-                /* Calling unlink so that when the file is closed or program</div><div class='del'>-                 * terminates the temporary file is deleted.</div><div class='del'>-                 */</div><div class='del'>-                ret = sys_unlink (template);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (frame-&gt;this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                glusterfsd_msg_39,</div><div class='del'>-                                "Unable to delete temporary file: %s",</div><div class='del'>-                                template);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+    volfile_id = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                tmpfp = fdopen (tmp_fd, "w+b");</div><div class='del'>-                if (!tmpfp) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    {</div><div class='add'>+        locked = 1;</div><div class='ctx'> </div><div class='del'>-                fwrite (rsp.spec, size, 1, tmpfp);</div><div class='del'>-                fflush (tmpfp);</div><div class='del'>-                if (ferror (tmpfp)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*  Check if only options have changed. No need to reload the</div><div class='del'>-                 *  volfile if topology hasn't changed.</div><div class='del'>-                 *  glusterfs_volfile_reconfigure returns 3 possible return states</div><div class='del'>-                 *  return 0          =======&gt; reconfiguration of options has succeeded</div><div class='del'>-                 *  return 1          =======&gt; the graph has to be reconstructed and all the xlators should be inited</div><div class='del'>-                 *  return -1(or -ve) =======&gt; Some Internal Error occurred during the operation</div><div class='del'>-                 */</div><div class='del'>-</div><div class='del'>-                ret = glusterfs_volfile_reconfigure (tmpfp, ctx);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        gf_log ("glusterfsd-mgmt", GF_LOG_DEBUG,</div><div class='del'>-                                "No need to re-load volfile, reconfigure done");</div><div class='del'>-                        if (!volfile_tmp) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_log ("mgmt", GF_LOG_ERROR, "Graph "</div><div class='del'>-                                        "reconfigure succeeded with out having "</div><div class='del'>-                                        "checksum.");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        memcpy (volfile_tmp-&gt;volfile_checksum, sha256_hash,</div><div class='del'>-                                sizeof (volfile_tmp-&gt;volfile_checksum));</div><div class='del'>-                        goto out;</div><div class='add'>+        list_for_each_entry(volfile_obj, &amp;ctx-&gt;volfile_list, volfile_list)</div><div class='add'>+        {</div><div class='add'>+            if (!strcmp(volfile_id, volfile_obj-&gt;vol_id)) {</div><div class='add'>+                if (!memcmp(sha256_hash, volfile_obj-&gt;volfile_checksum,</div><div class='add'>+                            sizeof(volfile_obj-&gt;volfile_checksum))) {</div><div class='add'>+                    gf_log(frame-&gt;this-&gt;name, GF_LOG_INFO,</div><div class='add'>+                           "No change in volfile,"</div><div class='add'>+                           "continuing");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                volfile_tmp = volfile_obj;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("glusterfsd-mgmt",</div><div class='del'>-                                GF_LOG_DEBUG, "Reconfigure failed !!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        /* coverity[secure_temp] mkstemp uses 0600 as the mode */</div><div class='add'>+        tmp_fd = mkstemp(template);</div><div class='add'>+        if (-1 == tmp_fd) {</div><div class='add'>+            gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, 0, glusterfsd_msg_39,</div><div class='add'>+                   "Unable to create temporary file: %s", template);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = glusterfs_process_volfp (ctx, tmpfp);</div><div class='del'>-                /* tmpfp closed */</div><div class='del'>-                tmpfp = NULL;</div><div class='del'>-                tmp_fd = -1;</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (!volfile_tmp) {</div><div class='del'>-                        volfile_tmp = GF_CALLOC (1, sizeof (gf_volfile_t),</div><div class='del'>-                                                 gf_common_volfile_t);</div><div class='del'>-                        if (!volfile_tmp) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        INIT_LIST_HEAD (&amp;volfile_tmp-&gt;volfile_list);</div><div class='del'>-                        list_add (&amp;volfile_tmp-&gt;volfile_list,</div><div class='del'>-                                  &amp;ctx-&gt;volfile_list);</div><div class='del'>-                        snprintf (volfile_tmp-&gt;vol_id,</div><div class='del'>-                                  sizeof (volfile_tmp-&gt;vol_id), "%s",</div><div class='del'>-                                  volfile_id);</div><div class='del'>-                }</div><div class='del'>-                memcpy (volfile_tmp-&gt;volfile_checksum, sha256_hash,</div><div class='del'>-                        sizeof (volfile_tmp-&gt;volfile_checksum));</div><div class='add'>+        /* Calling unlink so that when the file is closed or program</div><div class='add'>+         * terminates the temporary file is deleted.</div><div class='add'>+         */</div><div class='add'>+        ret = sys_unlink(template);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(frame-&gt;this-&gt;name, GF_LOG_INFO, 0, glusterfsd_msg_39,</div><div class='add'>+                   "Unable to delete temporary file: %s", template);</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='ctx'> </div><div class='del'>-        locked = 0;</div><div class='add'>+        tmpfp = fdopen(tmp_fd, "w+b");</div><div class='add'>+        if (!tmpfp) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (!is_mgmt_rpc_reconnect) {</div><div class='del'>-                need_emancipate = 1;</div><div class='del'>-                glusterfs_mgmt_pmap_signin (ctx);</div><div class='del'>-                is_mgmt_rpc_reconnect =  _gf_true;</div><div class='add'>+        fwrite(rsp.spec, size, 1, tmpfp);</div><div class='add'>+        fflush(tmpfp);</div><div class='add'>+        if (ferror(tmpfp)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='add'>+        /*  Check if only options have changed. No need to reload the</div><div class='add'>+         *  volfile if topology hasn't changed.</div><div class='add'>+         *  glusterfs_volfile_reconfigure returns 3 possible return states</div><div class='add'>+         *  return 0          =======&gt; reconfiguration of options has succeeded</div><div class='add'>+         *  return 1          =======&gt; the graph has to be reconstructed and all</div><div class='add'>+         * the xlators should be inited return -1(or -ve) =======&gt; Some Internal</div><div class='add'>+         * Error occurred during the operation</div><div class='add'>+         */</div><div class='ctx'> </div><div class='del'>-        if (locked)</div><div class='del'>-                UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='add'>+        ret = glusterfs_volfile_reconfigure(tmpfp, ctx);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            gf_log("glusterfsd-mgmt", GF_LOG_DEBUG,</div><div class='add'>+                   "No need to re-load volfile, reconfigure done");</div><div class='add'>+            if (!volfile_tmp) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                gf_log("mgmt", GF_LOG_ERROR,</div><div class='add'>+                       "Graph "</div><div class='add'>+                       "reconfigure succeeded with out having "</div><div class='add'>+                       "checksum.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            memcpy(volfile_tmp-&gt;volfile_checksum, sha256_hash,</div><div class='add'>+                   sizeof(volfile_tmp-&gt;volfile_checksum));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (frame-&gt;local);</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log("glusterfsd-mgmt", GF_LOG_DEBUG, "Reconfigure failed !!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        free (rsp.spec);</div><div class='add'>+        ret = glusterfs_process_volfp(ctx, tmpfp);</div><div class='add'>+        /* tmpfp closed */</div><div class='add'>+        tmpfp = NULL;</div><div class='add'>+        tmp_fd = -1;</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+        if (!volfile_tmp) {</div><div class='add'>+            volfile_tmp = GF_CALLOC(1, sizeof(gf_volfile_t),</div><div class='add'>+                                    gf_common_volfile_t);</div><div class='add'>+            if (!volfile_tmp) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        // Stop if server is running at an unsupported op-version</div><div class='del'>-        if (ENOTSUP == ret) {</div><div class='del'>-                gf_log ("mgmt", GF_LOG_ERROR, "Server is operating at an "</div><div class='del'>-                        "op-version which is not supported");</div><div class='del'>-                cleanup_and_exit (0);</div><div class='add'>+            INIT_LIST_HEAD(&amp;volfile_tmp-&gt;volfile_list);</div><div class='add'>+            list_add(&amp;volfile_tmp-&gt;volfile_list, &amp;ctx-&gt;volfile_list);</div><div class='add'>+            snprintf(volfile_tmp-&gt;vol_id, sizeof(volfile_tmp-&gt;vol_id), "%s",</div><div class='add'>+                     volfile_id);</div><div class='ctx'>         }</div><div class='add'>+        memcpy(volfile_tmp-&gt;volfile_checksum, sha256_hash,</div><div class='add'>+               sizeof(volfile_tmp-&gt;volfile_checksum));</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='ctx'> </div><div class='del'>-        if (ret &amp;&amp; ctx &amp;&amp; !ctx-&gt;active) {</div><div class='del'>-                /* Do it only for the first time */</div><div class='del'>-                /* Failed to get the volume file, something wrong,</div><div class='del'>-                   restart the process */</div><div class='del'>-                gf_log ("mgmt", GF_LOG_ERROR,</div><div class='del'>-                        "failed to fetch volume file (key:%s)",</div><div class='del'>-                        ctx-&gt;cmd_args.volfile_id);</div><div class='del'>-                cleanup_and_exit (0);</div><div class='del'>-        }</div><div class='add'>+    locked = 0;</div><div class='ctx'> </div><div class='add'>+    if (!is_mgmt_rpc_reconnect) {</div><div class='add'>+        need_emancipate = 1;</div><div class='add'>+        glusterfs_mgmt_pmap_signin(ctx);</div><div class='add'>+        is_mgmt_rpc_reconnect = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (tmpfp)</div><div class='del'>-                fclose (tmpfp);</div><div class='del'>-        else if (tmp_fd != -1)</div><div class='del'>-                sys_close (tmp_fd);</div><div class='add'>+out:</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (locked)</div><div class='add'>+        UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+</div><div class='add'>+    GF_FREE(frame-&gt;local);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+</div><div class='add'>+    free(rsp.spec);</div><div class='add'>+</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+</div><div class='add'>+    // Stop if server is running at an unsupported op-version</div><div class='add'>+    if (ENOTSUP == ret) {</div><div class='add'>+        gf_log("mgmt", GF_LOG_ERROR,</div><div class='add'>+               "Server is operating at an "</div><div class='add'>+               "op-version which is not supported");</div><div class='add'>+        cleanup_and_exit(0);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; ctx &amp;&amp; !ctx-&gt;active) {</div><div class='add'>+        /* Do it only for the first time */</div><div class='add'>+        /* Failed to get the volume file, something wrong,</div><div class='add'>+           restart the process */</div><div class='add'>+        gf_log("mgmt", GF_LOG_ERROR, "failed to fetch volume file (key:%s)",</div><div class='add'>+               ctx-&gt;cmd_args.volfile_id);</div><div class='add'>+        cleanup_and_exit(0);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (tmpfp)</div><div class='add'>+        fclose(tmpfp);</div><div class='add'>+    else if (tmp_fd != -1)</div><div class='add'>+        sys_close(tmp_fd);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glusterfs_volfile_fetch_one (glusterfs_ctx_t *ctx, char *volfile_id)</div><div class='add'>+glusterfs_volfile_fetch_one(glusterfs_ctx_t *ctx, char *volfile_id)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t       *cmd_args = NULL;</div><div class='del'>-        gf_getspec_req    req = {0, };</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        call_frame_t     *frame = NULL;</div><div class='del'>-        dict_t           *dict = NULL;</div><div class='del'>-</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    gf_getspec_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    if (!volfile_id) {</div><div class='add'>+        volfile_id = ctx-&gt;cmd_args.volfile_id;</div><div class='ctx'>         if (!volfile_id) {</div><div class='del'>-                volfile_id = ctx-&gt;cmd_args.volfile_id;</div><div class='del'>-                if (!volfile_id) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "No volfile-id provided, erroring out");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, ctx-&gt;pool);</div><div class='del'>-</div><div class='del'>-        req.key = volfile_id;</div><div class='del'>-        req.flags = 0;</div><div class='del'>-        /*</div><div class='del'>-         * We are only storing one variable in local, hence using the same</div><div class='del'>-         * variable. If multiple local variable is required, create a struct.</div><div class='del'>-         */</div><div class='del'>-        frame-&gt;local = gf_strdup (volfile_id);</div><div class='del'>-        if (!frame-&gt;local) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        // Set the supported min and max op-versions, so glusterd can make a</div><div class='del'>-        // decision</div><div class='del'>-        ret = dict_set_int32 (dict, "min-op-version", GD_OP_VERSION_MIN);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to set min-op-version"</div><div class='del'>-                        " in request dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "No volfile-id provided, erroring out");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, ctx-&gt;pool);</div><div class='add'>+</div><div class='add'>+    req.key = volfile_id;</div><div class='add'>+    req.flags = 0;</div><div class='add'>+    /*</div><div class='add'>+     * We are only storing one variable in local, hence using the same</div><div class='add'>+     * variable. If multiple local variable is required, create a struct.</div><div class='add'>+     */</div><div class='add'>+    frame-&gt;local = gf_strdup(volfile_id);</div><div class='add'>+    if (!frame-&gt;local) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "max-op-version", GD_OP_VERSION_MAX);</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // Set the supported min and max op-versions, so glusterd can make a</div><div class='add'>+    // decision</div><div class='add'>+    ret = dict_set_int32(dict, "min-op-version", GD_OP_VERSION_MIN);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set min-op-version"</div><div class='add'>+               " in request dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "max-op-version", GD_OP_VERSION_MAX);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set max-op-version"</div><div class='add'>+               " in request dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Ask for a list of volfile (glusterd2 only) servers */</div><div class='add'>+    if (GF_CLIENT_PROCESS == ctx-&gt;process_mode) {</div><div class='add'>+        req.flags = req.flags | GF_GETSPEC_FLAG_SERVERS_LIST;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;brick_name) {</div><div class='add'>+        ret = dict_set_dynstr_with_alloc(dict, "brick_name",</div><div class='add'>+                                         cmd_args-&gt;brick_name);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Failed to set max-op-version"</div><div class='del'>-                        " in request dict");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to set brick_name in request dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Ask for a list of volfile (glusterd2 only) servers */</div><div class='del'>-        if (GF_CLIENT_PROCESS == ctx-&gt;process_mode) {</div><div class='del'>-                req.flags = req.flags | GF_GETSPEC_FLAG_SERVERS_LIST;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;brick_name) {</div><div class='del'>-                ret = dict_set_dynstr_with_alloc (dict, "brick_name",</div><div class='del'>-                                                  cmd_args-&gt;brick_name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Failed to set brick_name in request dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_allocate_and_serialize (dict, &amp;req.xdata.xdata_val,</div><div class='del'>-                                           &amp;req.xdata.xdata_len);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to serialize dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_allocate_and_serialize(dict, &amp;req.xdata.xdata_val,</div><div class='add'>+                                      &amp;req.xdata.xdata_len);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Failed to serialize dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mgmt_submit_request (&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='del'>-                                   GF_HNDSK_GETSPEC, mgmt_getspec_cbk,</div><div class='del'>-                                   (xdrproc_t)xdr_gf_getspec_req);</div><div class='add'>+    ret = mgmt_submit_request(&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='add'>+                              GF_HNDSK_GETSPEC, mgmt_getspec_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_gf_getspec_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (req.xdata.xdata_val);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        if (ret &amp;&amp; frame) {</div><div class='del'>-                /* Free the frame-&gt;local fast, because we have not used memget</div><div class='del'>-                 */</div><div class='del'>-                GF_FREE (frame-&gt;local);</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        }</div><div class='add'>+    GF_FREE(req.xdata.xdata_val);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (ret &amp;&amp; frame) {</div><div class='add'>+        /* Free the frame-&gt;local fast, because we have not used memget</div><div class='add'>+         */</div><div class='add'>+        GF_FREE(frame-&gt;local);</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_volfile_fetch (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_volfile_fetch(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *server_xl      = NULL;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-        int             ret;</div><div class='add'>+    xlator_t *server_xl = NULL;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;active) {</div><div class='del'>-                        server_xl = ctx-&gt;active-&gt;first;</div><div class='del'>-                        if (strcmp (server_xl-&gt;type, "protocol/server") != 0) {</div><div class='del'>-                                server_xl = NULL;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (!server_xl) {</div><div class='del'>-                        /* Startup (ctx-&gt;active not set) or non-server. */</div><div class='del'>-                        UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-                        return glusterfs_volfile_fetch_one</div><div class='del'>-                                (ctx, ctx-&gt;cmd_args.volfile_id);</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;active) {</div><div class='add'>+            server_xl = ctx-&gt;active-&gt;first;</div><div class='add'>+            if (strcmp(server_xl-&gt;type, "protocol/server") != 0) {</div><div class='add'>+                server_xl = NULL;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (!server_xl) {</div><div class='add'>+            /* Startup (ctx-&gt;active not set) or non-server. */</div><div class='add'>+            UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+            return glusterfs_volfile_fetch_one(ctx, ctx-&gt;cmd_args.volfile_id);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                for (trav = server_xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                        ret |= glusterfs_volfile_fetch_one</div><div class='del'>-                                (ctx, trav-&gt;xlator-&gt;volfile_id);</div><div class='del'>-                }</div><div class='add'>+        ret = 0;</div><div class='add'>+        for (trav = server_xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+            ret |= glusterfs_volfile_fetch_one(ctx, trav-&gt;xlator-&gt;volfile_id);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mgmt_event_notify_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                  void *myframe)</div><div class='add'>+mgmt_event_notify_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_event_notify_rsp      rsp   = {0,};</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                      ret   = 0;</div><div class='add'>+    gf_event_notify_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_event_notify_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decoding error");</div><div class='del'>-                ret   = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_event_notify_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decoding error");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (-1 == rsp.op_ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to get the rsp from server");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get the rsp from server");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        free (rsp.dict.dict_val); //malloced by xdr</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    free(rsp.dict.dict_val);  // malloced by xdr</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glusterfs_rebalance_event_notify_cbk (struct rpc_req *req, struct iovec *iov,</div><div class='del'>-                                      int count, void *myframe)</div><div class='add'>+glusterfs_rebalance_event_notify_cbk(struct rpc_req *req, struct iovec *iov,</div><div class='add'>+                                     int count, void *myframe)</div><div class='ctx'> {</div><div class='del'>-        gf_event_notify_rsp      rsp   = {0,};</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        int                      ret   = 0;</div><div class='add'>+    gf_event_notify_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to get the rsp from server");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get the rsp from server");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_gf_event_notify_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decoding error");</div><div class='del'>-                ret   = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_gf_event_notify_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decoding error");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (-1 == rsp.op_ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Received error (%s) from server",</div><div class='del'>-                        strerror (rsp.op_errno));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Received error (%s) from server", strerror(rsp.op_errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        free (rsp.dict.dict_val); //malloced by xdr</div><div class='add'>+    free(rsp.dict.dict_val);  // malloced by xdr</div><div class='ctx'> </div><div class='del'>-        if (frame) {</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (frame) {</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glusterfs_rebalance_event_notify (dict_t *dict)</div><div class='add'>+glusterfs_rebalance_event_notify(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        gf_event_notify_req      req = {0,};</div><div class='del'>-        int32_t                  ret = -1;</div><div class='del'>-        cmd_args_t              *cmd_args = NULL;</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    gf_event_notify_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (THIS, ctx-&gt;pool);</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        req.op = GF_EN_DEFRAG_STATUS;</div><div class='add'>+    frame = create_frame(THIS, ctx-&gt;pool);</div><div class='ctx'> </div><div class='del'>-        if (dict) {</div><div class='del'>-                ret = dict_set_str (dict, "volname", cmd_args-&gt;volfile_id);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR, "failed to set volname");</div><div class='del'>-                }</div><div class='del'>-                ret = dict_allocate_and_serialize (dict, &amp;req.dict.dict_val,</div><div class='del'>-                                                   &amp;req.dict.dict_len);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR, "failed to serialize dict");</div><div class='del'>-                }</div><div class='add'>+    req.op = GF_EN_DEFRAG_STATUS;</div><div class='ctx'> </div><div class='add'>+    if (dict) {</div><div class='add'>+        ret = dict_set_str(dict, "volname", cmd_args-&gt;volfile_id);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "failed to set volname");</div><div class='add'>+        }</div><div class='add'>+        ret = dict_allocate_and_serialize(dict, &amp;req.dict.dict_val,</div><div class='add'>+                                          &amp;req.dict.dict_len);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "failed to serialize dict");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mgmt_submit_request (&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='del'>-                                   GF_HNDSK_EVENT_NOTIFY,</div><div class='del'>-                                   glusterfs_rebalance_event_notify_cbk,</div><div class='del'>-                                   (xdrproc_t)xdr_gf_event_notify_req);</div><div class='add'>+    ret = mgmt_submit_request(&amp;req, frame, ctx, &amp;clnt_handshake_prog,</div><div class='add'>+                              GF_HNDSK_EVENT_NOTIFY,</div><div class='add'>+                              glusterfs_rebalance_event_notify_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_gf_event_notify_req);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (req.dict.dict_val);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(req.dict.dict_val);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-mgmt_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='del'>-                 void *data)</div><div class='add'>+mgmt_rpc_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='add'>+                void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t         *this = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        server_cmdline_t *server = NULL;</div><div class='del'>-        rpc_transport_t  *rpc_trans = NULL;</div><div class='del'>-        int              need_term = 0;</div><div class='del'>-        int              emval = 0;</div><div class='del'>-        static           int log_ctr1;</div><div class='del'>-        static           int log_ctr2;</div><div class='del'>-        struct dnscache6 *dnscache = NULL;</div><div class='del'>-</div><div class='del'>-        this = mydata;</div><div class='del'>-        rpc_trans = rpc-&gt;conn.trans;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        switch (event) {</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    server_cmdline_t *server = NULL;</div><div class='add'>+    rpc_transport_t *rpc_trans = NULL;</div><div class='add'>+    int need_term = 0;</div><div class='add'>+    int emval = 0;</div><div class='add'>+    static int log_ctr1;</div><div class='add'>+    static int log_ctr2;</div><div class='add'>+    struct dnscache6 *dnscache = NULL;</div><div class='add'>+</div><div class='add'>+    this = mydata;</div><div class='add'>+    rpc_trans = rpc-&gt;conn.trans;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case RPC_CLNT_DISCONNECT:</div><div class='del'>-                if (rpc_trans-&gt;connect_failed) {</div><div class='del'>-                        GF_LOG_OCCASIONALLY (log_ctr1, "glusterfsd-mgmt",</div><div class='del'>-                                             GF_LOG_ERROR,</div><div class='del'>-                                             "failed to connect to remote-"</div><div class='del'>-                                             "host: %s",</div><div class='del'>-                                             ctx-&gt;cmd_args.volfile_server);</div><div class='del'>-                } else {</div><div class='del'>-                        GF_LOG_OCCASIONALLY (log_ctr1, "glusterfsd-mgmt",</div><div class='del'>-                                             GF_LOG_INFO,</div><div class='del'>-                                             "disconnected from remote-"</div><div class='del'>-                                             "host: %s",</div><div class='del'>-                                             ctx-&gt;cmd_args.volfile_server);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!rpc-&gt;disabled) {</div><div class='del'>-                        /*</div><div class='del'>-                         * Check if dnscache is exhausted for current server</div><div class='del'>-                         * and continue until cache is exhausted</div><div class='del'>-                         */</div><div class='del'>-                        dnscache = rpc_trans-&gt;dnscache;</div><div class='del'>-                        if (dnscache &amp;&amp; dnscache-&gt;next) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            if (rpc_trans-&gt;connect_failed) {</div><div class='add'>+                GF_LOG_OCCASIONALLY(log_ctr1, "glusterfsd-mgmt", GF_LOG_ERROR,</div><div class='add'>+                                    "failed to connect to remote-"</div><div class='add'>+                                    "host: %s",</div><div class='add'>+                                    ctx-&gt;cmd_args.volfile_server);</div><div class='add'>+            } else {</div><div class='add'>+                GF_LOG_OCCASIONALLY(log_ctr1, "glusterfsd-mgmt", GF_LOG_INFO,</div><div class='add'>+                                    "disconnected from remote-"</div><div class='add'>+                                    "host: %s",</div><div class='add'>+                                    ctx-&gt;cmd_args.volfile_server);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (!rpc-&gt;disabled) {</div><div class='add'>+                /*</div><div class='add'>+                 * Check if dnscache is exhausted for current server</div><div class='add'>+                 * and continue until cache is exhausted</div><div class='add'>+                 */</div><div class='add'>+                dnscache = rpc_trans-&gt;dnscache;</div><div class='add'>+                if (dnscache &amp;&amp; dnscache-&gt;next) {</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                server = ctx-&gt;cmd_args.curr_server;</div><div class='del'>-                if (server-&gt;list.next == &amp;ctx-&gt;cmd_args.volfile_servers) {</div><div class='del'>-                        if (!ctx-&gt;active) {</div><div class='del'>-                                need_term = 1;</div><div class='del'>-                        }</div><div class='del'>-                        emval = ENOTCONN;</div><div class='del'>-                        GF_LOG_OCCASIONALLY (log_ctr2, "glusterfsd-mgmt",</div><div class='del'>-                                             GF_LOG_INFO,</div><div class='del'>-                                             "Exhausted all volfile servers");</div><div class='del'>-                        break;</div><div class='add'>+            }</div><div class='add'>+            server = ctx-&gt;cmd_args.curr_server;</div><div class='add'>+            if (server-&gt;list.next == &amp;ctx-&gt;cmd_args.volfile_servers) {</div><div class='add'>+                if (!ctx-&gt;active) {</div><div class='add'>+                    need_term = 1;</div><div class='ctx'>                 }</div><div class='del'>-                server = list_entry (server-&gt;list.next, typeof(*server), list);</div><div class='del'>-                ctx-&gt;cmd_args.curr_server = server;</div><div class='del'>-                ctx-&gt;cmd_args.volfile_server = server-&gt;volfile_server;</div><div class='del'>-</div><div class='del'>-                ret = dict_set_str (rpc_trans-&gt;options, "remote-host",</div><div class='del'>-                                    server-&gt;volfile_server);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_log ("glusterfsd-mgmt", GF_LOG_ERROR,</div><div class='del'>-                                "failed to set remote-host: %s",</div><div class='del'>-                                server-&gt;volfile_server);</div><div class='del'>-                        if (!ctx-&gt;active) {</div><div class='del'>-                                need_term = 1;</div><div class='del'>-                        }</div><div class='del'>-                        emval = ENOTCONN;</div><div class='del'>-                        break;</div><div class='add'>+                emval = ENOTCONN;</div><div class='add'>+                GF_LOG_OCCASIONALLY(log_ctr2, "glusterfsd-mgmt", GF_LOG_INFO,</div><div class='add'>+                                    "Exhausted all volfile servers");</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            server = list_entry(server-&gt;list.next, typeof(*server), list);</div><div class='add'>+            ctx-&gt;cmd_args.curr_server = server;</div><div class='add'>+            ctx-&gt;cmd_args.volfile_server = server-&gt;volfile_server;</div><div class='add'>+</div><div class='add'>+            ret = dict_set_str(rpc_trans-&gt;options, "remote-host",</div><div class='add'>+                               server-&gt;volfile_server);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                gf_log("glusterfsd-mgmt", GF_LOG_ERROR,</div><div class='add'>+                       "failed to set remote-host: %s", server-&gt;volfile_server);</div><div class='add'>+                if (!ctx-&gt;active) {</div><div class='add'>+                    need_term = 1;</div><div class='ctx'>                 }</div><div class='del'>-                gf_log ("glusterfsd-mgmt", GF_LOG_INFO,</div><div class='del'>-                        "connecting to next volfile server %s",</div><div class='del'>-                        server-&gt;volfile_server);</div><div class='add'>+                emval = ENOTCONN;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+            gf_log("glusterfsd-mgmt", GF_LOG_INFO,</div><div class='add'>+                   "connecting to next volfile server %s",</div><div class='add'>+                   server-&gt;volfile_server);</div><div class='add'>+            break;</div><div class='ctx'>         case RPC_CLNT_CONNECT:</div><div class='del'>-                ret = glusterfs_volfile_fetch (ctx);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        emval = ret;</div><div class='del'>-                        if (!ctx-&gt;active) {</div><div class='del'>-                                need_term = 1;</div><div class='del'>-                                gf_log ("glusterfsd-mgmt", GF_LOG_ERROR,</div><div class='del'>-                                        "failed to fetch volume file (key:%s)",</div><div class='del'>-                                        ctx-&gt;cmd_args.volfile_id);</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        }</div><div class='add'>+            ret = glusterfs_volfile_fetch(ctx);</div><div class='add'>+            if (ret) {</div><div class='add'>+                emval = ret;</div><div class='add'>+                if (!ctx-&gt;active) {</div><div class='add'>+                    need_term = 1;</div><div class='add'>+                    gf_log("glusterfsd-mgmt", GF_LOG_ERROR,</div><div class='add'>+                           "failed to fetch volume file (key:%s)",</div><div class='add'>+                           ctx-&gt;cmd_args.volfile_id);</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (is_mgmt_rpc_reconnect)</div><div class='del'>-                        glusterfs_mgmt_pmap_signin (ctx);</div><div class='add'>+            if (is_mgmt_rpc_reconnect)</div><div class='add'>+                glusterfs_mgmt_pmap_signin(ctx);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (need_term) {</div><div class='del'>-                emancipate (ctx, emval);</div><div class='del'>-                cleanup_and_exit (1);</div><div class='del'>-        }</div><div class='add'>+    if (need_term) {</div><div class='add'>+        emancipate(ctx, emval);</div><div class='add'>+        cleanup_and_exit(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_rpcsvc_notify (rpcsvc_t *rpc, void *xl, rpcsvc_event_t event,</div><div class='del'>-                     void *data)</div><div class='add'>+glusterfs_rpcsvc_notify(rpcsvc_t *rpc, void *xl, rpcsvc_event_t event,</div><div class='add'>+                        void *data)</div><div class='ctx'> {</div><div class='del'>-        if (!xl || !data) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!xl || !data) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='del'>-        case RPCSVC_EVENT_ACCEPT:</div><div class='del'>-        {</div><div class='del'>-                break;</div><div class='add'>+    switch (event) {</div><div class='add'>+        case RPCSVC_EVENT_ACCEPT: {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        case RPCSVC_EVENT_DISCONNECT:</div><div class='del'>-        {</div><div class='del'>-                break;</div><div class='add'>+        case RPCSVC_EVENT_DISCONNECT: {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_listener_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_listener_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t              *cmd_args = NULL;</div><div class='del'>-        rpcsvc_t                *rpc = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    rpcsvc_t *rpc = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;listener)</div><div class='del'>-                return 0;</div><div class='add'>+    if (ctx-&gt;listener)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;sock_file)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!cmd_args-&gt;sock_file)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_transport_unix_options_build (&amp;options,</div><div class='del'>-                                                   cmd_args-&gt;sock_file);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = rpcsvc_transport_unix_options_build(&amp;options, cmd_args-&gt;sock_file);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        rpc = rpcsvc_init (THIS, ctx, options, 8);</div><div class='del'>-        if (rpc == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    rpc = rpcsvc_init(THIS, ctx, options, 8);</div><div class='add'>+    if (rpc == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_register_notify (rpc, glusterfs_rpcsvc_notify, THIS);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpcsvc_register_notify(rpc, glusterfs_rpcsvc_notify, THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_create_listeners (rpc, options, "glusterfsd");</div><div class='del'>-        if (ret &lt; 1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpcsvc_create_listeners(rpc, options, "glusterfsd");</div><div class='add'>+    if (ret &lt; 1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_program_register (rpc, &amp;glusterfs_mop_prog, _gf_false);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpcsvc_program_register(rpc, &amp;glusterfs_mop_prog, _gf_false);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;listener = rpc;</div><div class='add'>+    ctx-&gt;listener = rpc;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_listener_stop (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_listener_stop(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t              *cmd_args = NULL;</div><div class='del'>-        rpcsvc_t                *rpc = NULL;</div><div class='del'>-        rpcsvc_listener_t       *listener = NULL;</div><div class='del'>-        rpcsvc_listener_t       *next = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    rpcsvc_t *rpc = NULL;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='add'>+    rpcsvc_listener_t *next = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (ctx);</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='ctx'> </div><div class='del'>-        rpc = ctx-&gt;listener;</div><div class='del'>-        ctx-&gt;listener = NULL;</div><div class='add'>+    rpc = ctx-&gt;listener;</div><div class='add'>+    ctx-&gt;listener = NULL;</div><div class='ctx'> </div><div class='del'>-        (void) rpcsvc_program_unregister(rpc, &amp;glusterfs_mop_prog);</div><div class='add'>+    (void)rpcsvc_program_unregister(rpc, &amp;glusterfs_mop_prog);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (listener, next, &amp;rpc-&gt;listeners, list) {</div><div class='del'>-                rpcsvc_listener_destroy (listener);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(listener, next, &amp;rpc-&gt;listeners, list)</div><div class='add'>+    {</div><div class='add'>+        rpcsvc_listener_destroy(listener);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) rpcsvc_unregister_notify (rpc, glusterfs_rpcsvc_notify, THIS);</div><div class='add'>+    (void)rpcsvc_unregister_notify(rpc, glusterfs_rpcsvc_notify, THIS);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (rpc);</div><div class='add'>+    GF_FREE(rpc);</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-        if (cmd_args-&gt;sock_file) {</div><div class='del'>-                ret = sys_unlink (cmd_args-&gt;sock_file);</div><div class='del'>-                if (ret &amp;&amp; (ENOENT == errno)) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    if (cmd_args-&gt;sock_file) {</div><div class='add'>+        ret = sys_unlink(cmd_args-&gt;sock_file);</div><div class='add'>+        if (ret &amp;&amp; (ENOENT == errno)) {</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                this = THIS;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to unlink listener "</div><div class='del'>-                        "socket %s, error: %s", cmd_args-&gt;sock_file,</div><div class='del'>-                        strerror (errno));</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        this = THIS;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to unlink listener "</div><div class='add'>+               "socket %s, error: %s",</div><div class='add'>+               cmd_args-&gt;sock_file, strerror(errno));</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_mgmt_notify (int32_t op, void *data, ...)</div><div class='add'>+glusterfs_mgmt_notify(int32_t op, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        switch (op)</div><div class='del'>-        {</div><div class='del'>-                case GF_EN_DEFRAG_STATUS:</div><div class='del'>-                        ret = glusterfs_rebalance_event_notify ((dict_t*) data);</div><div class='del'>-                        break;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    switch (op) {</div><div class='add'>+        case GF_EN_DEFRAG_STATUS:</div><div class='add'>+            ret = glusterfs_rebalance_event_notify((dict_t *)data);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                default:</div><div class='del'>-                        gf_log ("", GF_LOG_ERROR, "Invalid op");</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        default:</div><div class='add'>+            gf_log("", GF_LOG_ERROR, "Invalid op");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_mgmt_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_mgmt_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t              *cmd_args = NULL;</div><div class='del'>-        struct rpc_clnt         *rpc = NULL;</div><div class='del'>-        dict_t                  *options = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        int                     port = GF_DEFAULT_BASE_PORT;</div><div class='del'>-        char                    *host = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int port = GF_DEFAULT_BASE_PORT;</div><div class='add'>+    char *host = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, cmd_args-&gt;volfile_server, out);</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, cmd_args-&gt;volfile_server, out);</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;mgmt)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;volfile_server_port)</div><div class='del'>-                port = cmd_args-&gt;volfile_server_port;</div><div class='del'>-</div><div class='del'>-        host = cmd_args-&gt;volfile_server;</div><div class='add'>+    if (ctx-&gt;mgmt)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='del'>-            !strcmp (cmd_args-&gt;volfile_server_transport, "unix")) {</div><div class='del'>-                ret = rpc_transport_unix_options_build (&amp;options, host, 0);</div><div class='del'>-        } else {</div><div class='del'>-                ret = rpc_transport_inet_options_build (&amp;options, host, port);</div><div class='del'>-        }</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    LOCK_INIT(&amp;ctx-&gt;volfile_lock);</div><div class='ctx'> </div><div class='del'>-        /* Explicitly turn on encrypted transport. */</div><div class='del'>-        if (ctx-&gt;secure_mgmt) {</div><div class='del'>-                ret = dict_set_dynstr_with_alloc</div><div class='del'>-                        (options, "transport.socket.ssl-enabled", "yes");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "failed to set 'transport.socket.ssl-enabled' "</div><div class='del'>-                                "in options dict");</div><div class='del'>-                        goto out;</div><div class='add'>+    if (cmd_args-&gt;volfile_server_port)</div><div class='add'>+        port = cmd_args-&gt;volfile_server_port;</div><div class='ctx'> </div><div class='del'>-                }</div><div class='add'>+    host = cmd_args-&gt;volfile_server;</div><div class='ctx'> </div><div class='del'>-                ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file ();</div><div class='del'>-        }</div><div class='add'>+    if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='add'>+        !strcmp(cmd_args-&gt;volfile_server_transport, "unix")) {</div><div class='add'>+        ret = rpc_transport_unix_options_build(&amp;options, host, 0);</div><div class='add'>+    } else {</div><div class='add'>+        ret = rpc_transport_inet_options_build(&amp;options, host, port);</div><div class='add'>+    }</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        rpc = rpc_clnt_new (options, THIS, THIS-&gt;name, 8);</div><div class='del'>-        if (!rpc) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING, "failed to create rpc clnt");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_register_notify (rpc, mgmt_rpc_notify, THIS);</div><div class='add'>+    /* Explicitly turn on encrypted transport. */</div><div class='add'>+    if (ctx-&gt;secure_mgmt) {</div><div class='add'>+        ret = dict_set_dynstr_with_alloc(options,</div><div class='add'>+                                         "transport.socket.ssl-enabled", "yes");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to register notify function");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set 'transport.socket.ssl-enabled' "</div><div class='add'>+                   "in options dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rpcclnt_cbk_program_register (rpc, &amp;mgmt_cbk_prog, THIS);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to register callback function");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;notify = glusterfs_mgmt_notify;</div><div class='del'>-</div><div class='del'>-        /* This value should be set before doing the 'rpc_clnt_start()' as</div><div class='del'>-           the notify function uses this variable */</div><div class='del'>-        ctx-&gt;mgmt = rpc;</div><div class='add'>+        ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpc_clnt_start (rpc);</div><div class='add'>+    rpc = rpc_clnt_new(options, THIS, THIS-&gt;name, 8);</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to create rpc clnt");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_register_notify(rpc, mgmt_rpc_notify, THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to register notify function");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcclnt_cbk_program_register(rpc, &amp;mgmt_cbk_prog, THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to register callback function");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;notify = glusterfs_mgmt_notify;</div><div class='add'>+</div><div class='add'>+    /* This value should be set before doing the 'rpc_clnt_start()' as</div><div class='add'>+       the notify function uses this variable */</div><div class='add'>+    ctx-&gt;mgmt = rpc;</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_start(rpc);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-mgmt_pmap_signin2_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                       void *myframe)</div><div class='add'>+mgmt_pmap_signin2_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='ctx'> {</div><div class='del'>-        pmap_signin_rsp  rsp   = {0,};</div><div class='del'>-        glusterfs_ctx_t *ctx   = NULL;</div><div class='del'>-        call_frame_t    *frame = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='add'>+    pmap_signin_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        frame = myframe;</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    frame = myframe;</div><div class='ctx'> </div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                rsp.op_ret   = -1;</div><div class='del'>-                rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_pmap_signin_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decode error");</div><div class='del'>-                rsp.op_ret   = -1;</div><div class='del'>-                rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (-1 == rsp.op_ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to register the port with glusterd");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        rsp.op_ret = -1;</div><div class='add'>+        rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_pmap_signin_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decode error");</div><div class='add'>+        rsp.op_ret = -1;</div><div class='add'>+        rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to register the port with glusterd");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (need_emancipate)</div><div class='del'>-                emancipate (ctx, ret);</div><div class='del'>-</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        return 0;</div><div class='add'>+    if (need_emancipate)</div><div class='add'>+        emancipate(ctx, ret);</div><div class='ctx'> </div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                      void *myframe)</div><div class='add'>+mgmt_pmap_signin_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                     void *myframe)</div><div class='ctx'> {</div><div class='del'>-        pmap_signin_rsp  rsp   = {0,};</div><div class='del'>-        call_frame_t    *frame = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='del'>-        int              emancipate_ret  = -1;</div><div class='del'>-        pmap_signin_req  pmap_req = {0, };</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx      = NULL;</div><div class='del'>-        char             brick_name[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        frame = myframe;</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                rsp.op_ret   = -1;</div><div class='del'>-                rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_pmap_signin_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decode error");</div><div class='del'>-                rsp.op_ret   = -1;</div><div class='del'>-                rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (-1 == rsp.op_ret) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to register the port with glusterd");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    pmap_signin_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int emancipate_ret = -1;</div><div class='add'>+    pmap_signin_req pmap_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    char brick_name[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        rsp.op_ret = -1;</div><div class='add'>+        rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_pmap_signin_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR, "XDR decode error");</div><div class='add'>+        rsp.op_ret = -1;</div><div class='add'>+        rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to register the port with glusterd");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;brick_port2) {</div><div class='del'>-                /* We are done with signin process */</div><div class='del'>-                emancipate_ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!cmd_args-&gt;brick_port2) {</div><div class='add'>+        /* We are done with signin process */</div><div class='add'>+        emancipate_ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (brick_name, PATH_MAX, "%s.rdma", cmd_args-&gt;brick_name);</div><div class='del'>-        pmap_req.port  = cmd_args-&gt;brick_port2;</div><div class='del'>-        pmap_req.brick = brick_name;</div><div class='add'>+    snprintf(brick_name, PATH_MAX, "%s.rdma", cmd_args-&gt;brick_name);</div><div class='add'>+    pmap_req.port = cmd_args-&gt;brick_port2;</div><div class='add'>+    pmap_req.brick = brick_name;</div><div class='ctx'> </div><div class='del'>-        ret = mgmt_submit_request (&amp;pmap_req, frame, ctx, &amp;clnt_pmap_prog,</div><div class='del'>-                                   GF_PMAP_SIGNIN, mgmt_pmap_signin2_cbk,</div><div class='del'>-                                   (xdrproc_t)xdr_pmap_signin_req);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mgmt_submit_request(&amp;pmap_req, frame, ctx, &amp;clnt_pmap_prog,</div><div class='add'>+                              GF_PMAP_SIGNIN, mgmt_pmap_signin2_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_pmap_signin_req);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (need_emancipate &amp;&amp; (ret &lt; 0 || !cmd_args-&gt;brick_port2))</div><div class='del'>-                emancipate (ctx, emancipate_ret);</div><div class='add'>+    if (need_emancipate &amp;&amp; (ret &lt; 0 || !cmd_args-&gt;brick_port2))</div><div class='add'>+        emancipate(ctx, emancipate_ret);</div><div class='ctx'> </div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_mgmt_pmap_signin(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t     *frame                 = NULL;</div><div class='del'>-        pmap_signin_req   req                   = {0, };</div><div class='del'>-        int               ret                   = -1;</div><div class='del'>-        int               emancipate_ret        = -1;</div><div class='del'>-        cmd_args_t       *cmd_args              = NULL;</div><div class='del'>-        char              brick_name[PATH_MAX]  = {0,};</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, ctx-&gt;pool);</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        if (!cmd_args-&gt;brick_port || !cmd_args-&gt;brick_name) {</div><div class='del'>-                gf_log ("fsd-mgmt", GF_LOG_DEBUG,</div><div class='del'>-                        "portmapper signin arguments not given");</div><div class='del'>-                emancipate_ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='del'>-                      !strcmp(cmd_args-&gt;volfile_server_transport, "rdma")) {</div><div class='del'>-                snprintf (brick_name, sizeof(brick_name), "%s.rdma",</div><div class='del'>-                          cmd_args-&gt;brick_name);</div><div class='del'>-                req.brick = brick_name;</div><div class='del'>-        } else</div><div class='del'>-                req.brick = cmd_args-&gt;brick_name;</div><div class='del'>-</div><div class='del'>-        req.port  = cmd_args-&gt;brick_port;</div><div class='del'>-</div><div class='del'>-        ret = mgmt_submit_request (&amp;req, frame, ctx, &amp;clnt_pmap_prog,</div><div class='del'>-                                   GF_PMAP_SIGNIN, mgmt_pmap_signin_cbk,</div><div class='del'>-                                   (xdrproc_t)xdr_pmap_signin_req);</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    pmap_signin_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int emancipate_ret = -1;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    char brick_name[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, ctx-&gt;pool);</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (!cmd_args-&gt;brick_port || !cmd_args-&gt;brick_name) {</div><div class='add'>+        gf_log("fsd-mgmt", GF_LOG_DEBUG,</div><div class='add'>+               "portmapper signin arguments not given");</div><div class='add'>+        emancipate_ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='add'>+        !strcmp(cmd_args-&gt;volfile_server_transport, "rdma")) {</div><div class='add'>+        snprintf(brick_name, sizeof(brick_name), "%s.rdma",</div><div class='add'>+                 cmd_args-&gt;brick_name);</div><div class='add'>+        req.brick = brick_name;</div><div class='add'>+    } else</div><div class='add'>+        req.brick = cmd_args-&gt;brick_name;</div><div class='add'>+</div><div class='add'>+    req.port = cmd_args-&gt;brick_port;</div><div class='add'>+</div><div class='add'>+    ret = mgmt_submit_request(&amp;req, frame, ctx, &amp;clnt_pmap_prog, GF_PMAP_SIGNIN,</div><div class='add'>+                              mgmt_pmap_signin_cbk,</div><div class='add'>+                              (xdrproc_t)xdr_pmap_signin_req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (need_emancipate &amp;&amp; ret &lt; 0)</div><div class='del'>-                emancipate (ctx, emancipate_ret);</div><div class='del'>-        return ret;</div><div class='add'>+    if (need_emancipate &amp;&amp; ret &lt; 0)</div><div class='add'>+        emancipate(ctx, emancipate_ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c<br/>index f374a2af22f..6e61a66c6d1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/glusterfsd/src/glusterfsd.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>glusterfsd/src/glusterfsd.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/glusterfsd/src/glusterfsd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>glusterfsd/src/glusterfsd.c</a></div><div class='hunk'>@@ -37,9 +37,9 @@</div><div class='ctx'> #include &lt;linux/oom.h&gt;</div><div class='ctx'> #else</div><div class='ctx'> #define OOM_SCORE_ADJ_MIN (-1000)</div><div class='del'>-#define OOM_SCORE_ADJ_MAX   1000</div><div class='del'>-#define OOM_DISABLE       (-17)</div><div class='del'>-#define OOM_ADJUST_MAX      15</div><div class='add'>+#define OOM_SCORE_ADJ_MAX 1000</div><div class='add'>+#define OOM_DISABLE (-17)</div><div class='add'>+#define OOM_ADJUST_MAX 15</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -80,1485 +80,1445 @@</div><div class='ctx'> </div><div class='ctx'> #include "daemon.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* using argp for command line parsing */</div><div class='ctx'> static char gf_doc[] = "";</div><div class='del'>-static char argp_doc[] = "--volfile-server=SERVER [MOUNT-POINT]\n"       \</div><div class='del'>-        "--volfile=VOLFILE [MOUNT-POINT]";</div><div class='del'>-const char *argp_program_version = ""                                         \</div><div class='del'>-        PACKAGE_NAME" "PACKAGE_VERSION                                        \</div><div class='del'>-        "\nRepository revision: " GLUSTERFS_REPOSITORY_REVISION "\n"          \</div><div class='del'>-        "Copyright (c) 2006-2016 Red Hat, Inc. "                              \</div><div class='del'>-        "&lt;https://www.gluster.org/&gt;\n"                                        \</div><div class='del'>-        "GlusterFS comes with ABSOLUTELY NO WARRANTY.\n"                      \</div><div class='del'>-        "It is licensed to you under your choice of the GNU Lesser\n"         \</div><div class='del'>-        "General Public License, version 3 or any later version (LGPLv3\n"    \</div><div class='del'>-        "or later), or the GNU General Public License, version 2 (GPLv2),\n"  \</div><div class='del'>-        "in all cases as published by the Free Software Foundation.";</div><div class='add'>+static char argp_doc[] =</div><div class='add'>+    "--volfile-server=SERVER [MOUNT-POINT]\n"</div><div class='add'>+    "--volfile=VOLFILE [MOUNT-POINT]";</div><div class='add'>+const char *argp_program_version =</div><div class='add'>+    "" PACKAGE_NAME " " PACKAGE_VERSION</div><div class='add'>+    "\nRepository revision: " GLUSTERFS_REPOSITORY_REVISION</div><div class='add'>+    "\n"</div><div class='add'>+    "Copyright (c) 2006-2016 Red Hat, Inc. "</div><div class='add'>+    "&lt;https://www.gluster.org/&gt;\n"</div><div class='add'>+    "GlusterFS comes with ABSOLUTELY NO WARRANTY.\n"</div><div class='add'>+    "It is licensed to you under your choice of the GNU Lesser\n"</div><div class='add'>+    "General Public License, version 3 or any later version (LGPLv3\n"</div><div class='add'>+    "or later), or the GNU General Public License, version 2 (GPLv2),\n"</div><div class='add'>+    "in all cases as published by the Free Software Foundation.";</div><div class='ctx'> const char *argp_program_bug_address = "&lt;" PACKAGE_BUGREPORT "&gt;";</div><div class='ctx'> </div><div class='del'>-static error_t parse_opts (int32_t key, char *arg, struct argp_state *_state);</div><div class='add'>+static error_t</div><div class='add'>+parse_opts(int32_t key, char *arg, struct argp_state *_state);</div><div class='ctx'> </div><div class='ctx'> static struct argp_option gf_options[] = {</div><div class='del'>-        {0, 0, 0, 0, "Basic options:"},</div><div class='del'>-        {"volfile-server", ARGP_VOLFILE_SERVER_KEY, "SERVER", 0,</div><div class='del'>-         "Server to get the volume file from. Unix domain socket path when "</div><div class='del'>-         "transport type 'unix'. This option overrides --volfile option"},</div><div class='del'>-        {"volfile", ARGP_VOLUME_FILE_KEY, "VOLFILE", 0,</div><div class='del'>-         "File to use as VOLUME_FILE"},</div><div class='del'>-        {"spec-file", ARGP_VOLUME_FILE_KEY, "VOLFILE", OPTION_HIDDEN,</div><div class='del'>-         "File to use as VOLUME FILE"},</div><div class='del'>-</div><div class='del'>-        {"log-level", ARGP_LOG_LEVEL_KEY, "LOGLEVEL", 0,</div><div class='del'>-         "Logging severity.  Valid options are DEBUG, INFO, WARNING, ERROR, "</div><div class='del'>-         "CRITICAL, TRACE and NONE [default: INFO]"},</div><div class='del'>-        {"log-file", ARGP_LOG_FILE_KEY, "LOGFILE", 0,</div><div class='del'>-         "File to use for logging [default: "</div><div class='del'>-         DEFAULT_LOG_FILE_DIRECTORY "/" PACKAGE_NAME ".log" "]"},</div><div class='del'>-        {"logger", ARGP_LOGGER, "LOGGER", 0, "Set which logging sub-system to "</div><div class='del'>-        "log to, valid options are: gluster-log and syslog, "</div><div class='del'>-        "[default: \"gluster-log\"]"},</div><div class='del'>-        {"log-format", ARGP_LOG_FORMAT, "LOG-FORMAT", 0, "Set log format, valid"</div><div class='del'>-         " options are: no-msg-id and with-msg-id, [default: \"with-msg-id\"]"},</div><div class='del'>-        {"log-buf-size", ARGP_LOG_BUF_SIZE, "LOG-BUF-SIZE", 0, "Set logging "</div><div class='del'>-         "buffer size, [default: 5]"},</div><div class='del'>-        {"log-flush-timeout", ARGP_LOG_FLUSH_TIMEOUT, "LOG-FLUSH-TIMEOUT", 0,</div><div class='del'>-         "Set log flush timeout, [default: 2 minutes]"},</div><div class='del'>-</div><div class='del'>-        {0, 0, 0, 0, "Advanced Options:"},</div><div class='del'>-        {"volfile-server-port", ARGP_VOLFILE_SERVER_PORT_KEY, "PORT", 0,</div><div class='del'>-         "Listening port number of volfile server"},</div><div class='del'>-        {"volfile-server-transport", ARGP_VOLFILE_SERVER_TRANSPORT_KEY,</div><div class='del'>-         "TRANSPORT", 0,</div><div class='del'>-         "Transport type to get volfile from server [default: socket]"},</div><div class='del'>-        {"volfile-id", ARGP_VOLFILE_ID_KEY, "KEY", 0,</div><div class='del'>-         "'key' of the volfile to be fetched from server"},</div><div class='del'>-        {"pid-file", ARGP_PID_FILE_KEY, "PIDFILE", 0,</div><div class='del'>-         "File to use as pid file"},</div><div class='del'>-        {"socket-file", ARGP_SOCK_FILE_KEY, "SOCKFILE", 0,</div><div class='del'>-         "File to use as unix-socket"},</div><div class='del'>-        {"no-daemon", ARGP_NO_DAEMON_KEY, 0, 0,</div><div class='del'>-         "Run in foreground"},</div><div class='del'>-        {"run-id", ARGP_RUN_ID_KEY, "RUN-ID", OPTION_HIDDEN,</div><div class='del'>-         "Run ID for the process, used by scripts to keep track of process "</div><div class='del'>-         "they started, defaults to none"},</div><div class='del'>-        {"debug", ARGP_DEBUG_KEY, 0, 0,</div><div class='del'>-         "Run in debug mode.  This option sets --no-daemon, --log-level "</div><div class='del'>-         "to DEBUG and --log-file to console"},</div><div class='del'>-        {"volume-name", ARGP_VOLUME_NAME_KEY, "XLATOR-NAME", 0,</div><div class='del'>-         "Translator name to be used for MOUNT-POINT [default: top most volume "</div><div class='del'>-         "definition in VOLFILE]"},</div><div class='del'>-        {"xlator-option", ARGP_XLATOR_OPTION_KEY,"XLATOR-NAME.OPTION=VALUE", 0,</div><div class='del'>-         "Add/override an option for a translator in volume file with specified"</div><div class='del'>-         " value"},</div><div class='del'>-        {"read-only", ARGP_READ_ONLY_KEY, 0, 0,</div><div class='del'>-         "Mount the filesystem in 'read-only' mode"},</div><div class='del'>-        {"acl", ARGP_ACL_KEY, 0, 0,</div><div class='del'>-         "Mount the filesystem with POSIX ACL support"},</div><div class='del'>-        {"selinux", ARGP_SELINUX_KEY, 0, 0,</div><div class='del'>-         "Enable SELinux label (extended attributes) support on inodes"},</div><div class='del'>-        {"capability", ARGP_CAPABILITY_KEY, 0, 0,</div><div class='del'>-         "Enable Capability (extended attributes) support on inodes"},</div><div class='del'>-        {"subdir-mount", ARGP_SUBDIR_MOUNT_KEY, "SUBDIR-PATH", 0,</div><div class='del'>-         "Mount subdirectory given [default: NULL]"},</div><div class='del'>-</div><div class='del'>-        {"print-netgroups", ARGP_PRINT_NETGROUPS, "NETGROUP-FILE", 0,</div><div class='del'>-         "Validate the netgroups file and print it out"},</div><div class='del'>-        {"print-exports", ARGP_PRINT_EXPORTS, "EXPORTS-FILE", 0,</div><div class='del'>-        "Validate the exports file and print it out"},</div><div class='del'>-        {"print-xlatordir", ARGP_PRINT_XLATORDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Print xlator directory path"},</div><div class='del'>-        {"print-statedumpdir", ARGP_PRINT_STATEDUMPDIR_KEY, 0,</div><div class='del'>-          OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Print directory path in which statedumps shall be generated"},</div><div class='del'>-        {"print-logdir", ARGP_PRINT_LOGDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Print path of default log directory"},</div><div class='del'>-        {"print-libexecdir", ARGP_PRINT_LIBEXECDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Print path of default libexec directory"},</div><div class='del'>-</div><div class='del'>-        {"volfile-max-fetch-attempts", ARGP_VOLFILE_MAX_FETCH_ATTEMPTS, "0",</div><div class='del'>-         OPTION_HIDDEN, "Maximum number of attempts to fetch the volfile"},</div><div class='del'>-        {"aux-gfid-mount", ARGP_AUX_GFID_MOUNT_KEY, 0, 0,</div><div class='del'>-         "Enable access to filesystem through gfid directly"},</div><div class='del'>-        {"enable-ino32", ARGP_INODE32_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Use 32-bit inodes when mounting to workaround broken applications"</div><div class='del'>-         "that don't support 64-bit inodes"},</div><div class='del'>-        {"worm", ARGP_WORM_KEY, 0, 0,</div><div class='del'>-         "Mount the filesystem in 'worm' mode"},</div><div class='del'>-        {"mac-compat", ARGP_MAC_COMPAT_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Provide stubs for attributes needed for seamless operation on Macs "</div><div class='add'>+    {0, 0, 0, 0, "Basic options:"},</div><div class='add'>+    {"volfile-server", ARGP_VOLFILE_SERVER_KEY, "SERVER", 0,</div><div class='add'>+     "Server to get the volume file from. Unix domain socket path when "</div><div class='add'>+     "transport type 'unix'. This option overrides --volfile option"},</div><div class='add'>+    {"volfile", ARGP_VOLUME_FILE_KEY, "VOLFILE", 0,</div><div class='add'>+     "File to use as VOLUME_FILE"},</div><div class='add'>+    {"spec-file", ARGP_VOLUME_FILE_KEY, "VOLFILE", OPTION_HIDDEN,</div><div class='add'>+     "File to use as VOLUME FILE"},</div><div class='add'>+</div><div class='add'>+    {"log-level", ARGP_LOG_LEVEL_KEY, "LOGLEVEL", 0,</div><div class='add'>+     "Logging severity.  Valid options are DEBUG, INFO, WARNING, ERROR, "</div><div class='add'>+     "CRITICAL, TRACE and NONE [default: INFO]"},</div><div class='add'>+    {"log-file", ARGP_LOG_FILE_KEY, "LOGFILE", 0,</div><div class='add'>+     "File to use for logging [default: " DEFAULT_LOG_FILE_DIRECTORY</div><div class='add'>+     "/" PACKAGE_NAME ".log"</div><div class='add'>+     "]"},</div><div class='add'>+    {"logger", ARGP_LOGGER, "LOGGER", 0,</div><div class='add'>+     "Set which logging sub-system to "</div><div class='add'>+     "log to, valid options are: gluster-log and syslog, "</div><div class='add'>+     "[default: \"gluster-log\"]"},</div><div class='add'>+    {"log-format", ARGP_LOG_FORMAT, "LOG-FORMAT", 0,</div><div class='add'>+     "Set log format, valid"</div><div class='add'>+     " options are: no-msg-id and with-msg-id, [default: \"with-msg-id\"]"},</div><div class='add'>+    {"log-buf-size", ARGP_LOG_BUF_SIZE, "LOG-BUF-SIZE", 0,</div><div class='add'>+     "Set logging "</div><div class='add'>+     "buffer size, [default: 5]"},</div><div class='add'>+    {"log-flush-timeout", ARGP_LOG_FLUSH_TIMEOUT, "LOG-FLUSH-TIMEOUT", 0,</div><div class='add'>+     "Set log flush timeout, [default: 2 minutes]"},</div><div class='add'>+</div><div class='add'>+    {0, 0, 0, 0, "Advanced Options:"},</div><div class='add'>+    {"volfile-server-port", ARGP_VOLFILE_SERVER_PORT_KEY, "PORT", 0,</div><div class='add'>+     "Listening port number of volfile server"},</div><div class='add'>+    {"volfile-server-transport", ARGP_VOLFILE_SERVER_TRANSPORT_KEY, "TRANSPORT",</div><div class='add'>+     0, "Transport type to get volfile from server [default: socket]"},</div><div class='add'>+    {"volfile-id", ARGP_VOLFILE_ID_KEY, "KEY", 0,</div><div class='add'>+     "'key' of the volfile to be fetched from server"},</div><div class='add'>+    {"pid-file", ARGP_PID_FILE_KEY, "PIDFILE", 0, "File to use as pid file"},</div><div class='add'>+    {"socket-file", ARGP_SOCK_FILE_KEY, "SOCKFILE", 0,</div><div class='add'>+     "File to use as unix-socket"},</div><div class='add'>+    {"no-daemon", ARGP_NO_DAEMON_KEY, 0, 0, "Run in foreground"},</div><div class='add'>+    {"run-id", ARGP_RUN_ID_KEY, "RUN-ID", OPTION_HIDDEN,</div><div class='add'>+     "Run ID for the process, used by scripts to keep track of process "</div><div class='add'>+     "they started, defaults to none"},</div><div class='add'>+    {"debug", ARGP_DEBUG_KEY, 0, 0,</div><div class='add'>+     "Run in debug mode.  This option sets --no-daemon, --log-level "</div><div class='add'>+     "to DEBUG and --log-file to console"},</div><div class='add'>+    {"volume-name", ARGP_VOLUME_NAME_KEY, "XLATOR-NAME", 0,</div><div class='add'>+     "Translator name to be used for MOUNT-POINT [default: top most volume "</div><div class='add'>+     "definition in VOLFILE]"},</div><div class='add'>+    {"xlator-option", ARGP_XLATOR_OPTION_KEY, "XLATOR-NAME.OPTION=VALUE", 0,</div><div class='add'>+     "Add/override an option for a translator in volume file with specified"</div><div class='add'>+     " value"},</div><div class='add'>+    {"read-only", ARGP_READ_ONLY_KEY, 0, 0,</div><div class='add'>+     "Mount the filesystem in 'read-only' mode"},</div><div class='add'>+    {"acl", ARGP_ACL_KEY, 0, 0, "Mount the filesystem with POSIX ACL support"},</div><div class='add'>+    {"selinux", ARGP_SELINUX_KEY, 0, 0,</div><div class='add'>+     "Enable SELinux label (extended attributes) support on inodes"},</div><div class='add'>+    {"capability", ARGP_CAPABILITY_KEY, 0, 0,</div><div class='add'>+     "Enable Capability (extended attributes) support on inodes"},</div><div class='add'>+    {"subdir-mount", ARGP_SUBDIR_MOUNT_KEY, "SUBDIR-PATH", 0,</div><div class='add'>+     "Mount subdirectory given [default: NULL]"},</div><div class='add'>+</div><div class='add'>+    {"print-netgroups", ARGP_PRINT_NETGROUPS, "NETGROUP-FILE", 0,</div><div class='add'>+     "Validate the netgroups file and print it out"},</div><div class='add'>+    {"print-exports", ARGP_PRINT_EXPORTS, "EXPORTS-FILE", 0,</div><div class='add'>+     "Validate the exports file and print it out"},</div><div class='add'>+    {"print-xlatordir", ARGP_PRINT_XLATORDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Print xlator directory path"},</div><div class='add'>+    {"print-statedumpdir", ARGP_PRINT_STATEDUMPDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Print directory path in which statedumps shall be generated"},</div><div class='add'>+    {"print-logdir", ARGP_PRINT_LOGDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Print path of default log directory"},</div><div class='add'>+    {"print-libexecdir", ARGP_PRINT_LIBEXECDIR_KEY, 0, OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Print path of default libexec directory"},</div><div class='add'>+</div><div class='add'>+    {"volfile-max-fetch-attempts", ARGP_VOLFILE_MAX_FETCH_ATTEMPTS, "0",</div><div class='add'>+     OPTION_HIDDEN, "Maximum number of attempts to fetch the volfile"},</div><div class='add'>+    {"aux-gfid-mount", ARGP_AUX_GFID_MOUNT_KEY, 0, 0,</div><div class='add'>+     "Enable access to filesystem through gfid directly"},</div><div class='add'>+    {"enable-ino32", ARGP_INODE32_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Use 32-bit inodes when mounting to workaround broken applications"</div><div class='add'>+     "that don't support 64-bit inodes"},</div><div class='add'>+    {"worm", ARGP_WORM_KEY, 0, 0, "Mount the filesystem in 'worm' mode"},</div><div class='add'>+    {"mac-compat", ARGP_MAC_COMPAT_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Provide stubs for attributes needed for seamless operation on Macs "</div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-         "[default: \"on\" on client side, else \"off\"]"</div><div class='add'>+     "[default: \"on\" on client side, else \"off\"]"</div><div class='ctx'> #else</div><div class='del'>-         "[default: \"off\"]"</div><div class='add'>+     "[default: \"off\"]"</div><div class='ctx'> #endif</div><div class='del'>-        },</div><div class='del'>-        {"brick-name", ARGP_BRICK_NAME_KEY, "BRICK-NAME", OPTION_HIDDEN,</div><div class='del'>-         "Brick name to be registered with Gluster portmapper" },</div><div class='del'>-        {"brick-port", ARGP_BRICK_PORT_KEY, "BRICK-PORT", OPTION_HIDDEN,</div><div class='del'>-         "Brick Port to be registered with Gluster portmapper" },</div><div class='del'>-	{"fopen-keep-cache", ARGP_FOPEN_KEEP_CACHE_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='del'>-	 "Do not purge the cache on file open"},</div><div class='del'>-        {"global-timer-wheel", ARGP_GLOBAL_TIMER_WHEEL, "BOOL",</div><div class='del'>-         OPTION_ARG_OPTIONAL, "Instantiate process global timer-wheel"},</div><div class='del'>-        {"thin-client", ARGP_THIN_CLIENT_KEY, 0, 0,</div><div class='del'>-         "Enables thin mount and connects via gfproxyd daemon"},</div><div class='del'>-</div><div class='del'>-        {0, 0, 0, 0, "Fuse options:"},</div><div class='del'>-        {"direct-io-mode", ARGP_DIRECT_IO_MODE_KEY, "BOOL|auto", OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Specify direct I/O strategy [default: \"auto\"]"},</div><div class='del'>-        {"entry-timeout", ARGP_ENTRY_TIMEOUT_KEY, "SECONDS", 0,</div><div class='del'>-         "Set entry timeout to SECONDS in fuse kernel module [default: 1]"},</div><div class='del'>-        {"negative-timeout", ARGP_NEGATIVE_TIMEOUT_KEY, "SECONDS", 0,</div><div class='del'>-         "Set negative timeout to SECONDS in fuse kernel module [default: 0]"},</div><div class='del'>-        {"attribute-timeout", ARGP_ATTRIBUTE_TIMEOUT_KEY, "SECONDS", 0,</div><div class='del'>-         "Set attribute timeout to SECONDS for inodes in fuse kernel module "</div><div class='del'>-         "[default: 1]"},</div><div class='del'>-	{"gid-timeout", ARGP_GID_TIMEOUT_KEY, "SECONDS", 0,</div><div class='del'>-	 "Set auxiliary group list timeout to SECONDS for fuse translator "</div><div class='del'>-	 "[default: 300]"},</div><div class='del'>-        {"resolve-gids", ARGP_RESOLVE_GIDS_KEY, 0, 0,</div><div class='del'>-         "Resolve all auxiliary groups in fuse translator (max 32 otherwise)"},</div><div class='del'>-	{"background-qlen", ARGP_FUSE_BACKGROUND_QLEN_KEY, "N", 0,</div><div class='del'>-	 "Set fuse module's background queue length to N "</div><div class='del'>-	 "[default: 64]"},</div><div class='del'>-	{"congestion-threshold", ARGP_FUSE_CONGESTION_THRESHOLD_KEY, "N", 0,</div><div class='del'>-	 "Set fuse module's congestion threshold to N "</div><div class='del'>-	 "[default: 48]"},</div><div class='add'>+    },</div><div class='add'>+    {"brick-name", ARGP_BRICK_NAME_KEY, "BRICK-NAME", OPTION_HIDDEN,</div><div class='add'>+     "Brick name to be registered with Gluster portmapper"},</div><div class='add'>+    {"brick-port", ARGP_BRICK_PORT_KEY, "BRICK-PORT", OPTION_HIDDEN,</div><div class='add'>+     "Brick Port to be registered with Gluster portmapper"},</div><div class='add'>+    {"fopen-keep-cache", ARGP_FOPEN_KEEP_CACHE_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Do not purge the cache on file open"},</div><div class='add'>+    {"global-timer-wheel", ARGP_GLOBAL_TIMER_WHEEL, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Instantiate process global timer-wheel"},</div><div class='add'>+    {"thin-client", ARGP_THIN_CLIENT_KEY, 0, 0,</div><div class='add'>+     "Enables thin mount and connects via gfproxyd daemon"},</div><div class='add'>+</div><div class='add'>+    {0, 0, 0, 0, "Fuse options:"},</div><div class='add'>+    {"direct-io-mode", ARGP_DIRECT_IO_MODE_KEY, "BOOL|auto",</div><div class='add'>+     OPTION_ARG_OPTIONAL, "Specify direct I/O strategy [default: \"auto\"]"},</div><div class='add'>+    {"entry-timeout", ARGP_ENTRY_TIMEOUT_KEY, "SECONDS", 0,</div><div class='add'>+     "Set entry timeout to SECONDS in fuse kernel module [default: 1]"},</div><div class='add'>+    {"negative-timeout", ARGP_NEGATIVE_TIMEOUT_KEY, "SECONDS", 0,</div><div class='add'>+     "Set negative timeout to SECONDS in fuse kernel module [default: 0]"},</div><div class='add'>+    {"attribute-timeout", ARGP_ATTRIBUTE_TIMEOUT_KEY, "SECONDS", 0,</div><div class='add'>+     "Set attribute timeout to SECONDS for inodes in fuse kernel module "</div><div class='add'>+     "[default: 1]"},</div><div class='add'>+    {"gid-timeout", ARGP_GID_TIMEOUT_KEY, "SECONDS", 0,</div><div class='add'>+     "Set auxiliary group list timeout to SECONDS for fuse translator "</div><div class='add'>+     "[default: 300]"},</div><div class='add'>+    {"resolve-gids", ARGP_RESOLVE_GIDS_KEY, 0, 0,</div><div class='add'>+     "Resolve all auxiliary groups in fuse translator (max 32 otherwise)"},</div><div class='add'>+    {"background-qlen", ARGP_FUSE_BACKGROUND_QLEN_KEY, "N", 0,</div><div class='add'>+     "Set fuse module's background queue length to N "</div><div class='add'>+     "[default: 64]"},</div><div class='add'>+    {"congestion-threshold", ARGP_FUSE_CONGESTION_THRESHOLD_KEY, "N", 0,</div><div class='add'>+     "Set fuse module's congestion threshold to N "</div><div class='add'>+     "[default: 48]"},</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        {"oom-score-adj", ARGP_OOM_SCORE_ADJ_KEY, "INTEGER", 0,</div><div class='del'>-         "Set oom_score_adj value for process"</div><div class='del'>-         "[default: 0]"},</div><div class='add'>+    {"oom-score-adj", ARGP_OOM_SCORE_ADJ_KEY, "INTEGER", 0,</div><div class='add'>+     "Set oom_score_adj value for process"</div><div class='add'>+     "[default: 0]"},</div><div class='ctx'> #endif</div><div class='del'>-        {"client-pid", ARGP_CLIENT_PID_KEY, "PID", OPTION_HIDDEN,</div><div class='del'>-         "client will authenticate itself with process id PID to server"},</div><div class='del'>-        {"no-root-squash", ARGP_FUSE_NO_ROOT_SQUASH_KEY, "BOOL",</div><div class='del'>-         OPTION_ARG_OPTIONAL, "disable/enable root squashing for the trusted "</div><div class='del'>-         "client"},</div><div class='del'>-        {"user-map-root", ARGP_USER_MAP_ROOT_KEY, "USER", OPTION_HIDDEN,</div><div class='del'>-         "replace USER with root in messages"},</div><div class='del'>-        {"dump-fuse", ARGP_DUMP_FUSE_KEY, "PATH", 0,</div><div class='del'>-         "Dump fuse traffic to PATH"},</div><div class='del'>-        {"volfile-check", ARGP_VOLFILE_CHECK_KEY, 0, 0,</div><div class='del'>-         "Enable strict volume file checking"},</div><div class='del'>-        {"no-mem-accounting", ARGP_MEM_ACCOUNTING_KEY, 0, OPTION_HIDDEN,</div><div class='del'>-         "disable internal memory accounting"},</div><div class='del'>-        {"fuse-mountopts", ARGP_FUSE_MOUNTOPTS_KEY, "OPTIONS", OPTION_HIDDEN,</div><div class='del'>-         "Extra mount options to pass to FUSE"},</div><div class='del'>-        {"use-readdirp", ARGP_FUSE_USE_READDIRP_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Use readdirp mode in fuse kernel module"</div><div class='del'>-         " [default: \"yes\"]"},</div><div class='del'>-        {"secure-mgmt", ARGP_SECURE_MGMT_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='del'>-         "Override default for secure (SSL) management connections"},</div><div class='del'>-        {"localtime-logging", ARGP_LOCALTIME_LOGGING_KEY, 0, 0,</div><div class='del'>-         "Enable localtime logging"},</div><div class='del'>-        {"process-name", ARGP_PROCESS_NAME_KEY, "PROCESS-NAME", OPTION_HIDDEN,</div><div class='del'>-         "option to specify the process type" },</div><div class='del'>-        {"event-history", ARGP_FUSE_EVENT_HISTORY_KEY, "BOOL",</div><div class='del'>-         OPTION_ARG_OPTIONAL, "disable/enable fuse event-history"},</div><div class='del'>-        {"reader-thread-count", ARGP_READER_THREAD_COUNT_KEY, "INTEGER",</div><div class='del'>-         OPTION_ARG_OPTIONAL, "set fuse reader thread count"},</div><div class='del'>-        {"kernel-writeback-cache", ARGP_KERNEL_WRITEBACK_CACHE_KEY, "BOOL",</div><div class='del'>-         OPTION_ARG_OPTIONAL, "enable fuse in-kernel writeback cache"},</div><div class='del'>-        {"attr-times-granularity", ARGP_ATTR_TIMES_GRANULARITY_KEY, "NS",</div><div class='del'>-         OPTION_ARG_OPTIONAL, "declare supported granularity of file attribute"</div><div class='del'>-         " times in nanoseconds"},</div><div class='del'>-        {0, 0, 0, 0, "Miscellaneous Options:"},</div><div class='del'>-        {0, }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static struct argp argp = { gf_options, parse_opts, argp_doc, gf_doc };</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int glusterfs_pidfile_cleanup (glusterfs_ctx_t *ctx);</div><div class='del'>-int glusterfs_volumes_init (glusterfs_ctx_t *ctx);</div><div class='del'>-int glusterfs_mgmt_init (glusterfs_ctx_t *ctx);</div><div class='del'>-int glusterfs_listener_init (glusterfs_ctx_t *ctx);</div><div class='del'>-int glusterfs_listener_stop (glusterfs_ctx_t *ctx);</div><div class='add'>+    {"client-pid", ARGP_CLIENT_PID_KEY, "PID", OPTION_HIDDEN,</div><div class='add'>+     "client will authenticate itself with process id PID to server"},</div><div class='add'>+    {"no-root-squash", ARGP_FUSE_NO_ROOT_SQUASH_KEY, "BOOL",</div><div class='add'>+     OPTION_ARG_OPTIONAL,</div><div class='add'>+     "disable/enable root squashing for the trusted "</div><div class='add'>+     "client"},</div><div class='add'>+    {"user-map-root", ARGP_USER_MAP_ROOT_KEY, "USER", OPTION_HIDDEN,</div><div class='add'>+     "replace USER with root in messages"},</div><div class='add'>+    {"dump-fuse", ARGP_DUMP_FUSE_KEY, "PATH", 0, "Dump fuse traffic to PATH"},</div><div class='add'>+    {"volfile-check", ARGP_VOLFILE_CHECK_KEY, 0, 0,</div><div class='add'>+     "Enable strict volume file checking"},</div><div class='add'>+    {"no-mem-accounting", ARGP_MEM_ACCOUNTING_KEY, 0, OPTION_HIDDEN,</div><div class='add'>+     "disable internal memory accounting"},</div><div class='add'>+    {"fuse-mountopts", ARGP_FUSE_MOUNTOPTS_KEY, "OPTIONS", OPTION_HIDDEN,</div><div class='add'>+     "Extra mount options to pass to FUSE"},</div><div class='add'>+    {"use-readdirp", ARGP_FUSE_USE_READDIRP_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Use readdirp mode in fuse kernel module"</div><div class='add'>+     " [default: \"yes\"]"},</div><div class='add'>+    {"secure-mgmt", ARGP_SECURE_MGMT_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "Override default for secure (SSL) management connections"},</div><div class='add'>+    {"localtime-logging", ARGP_LOCALTIME_LOGGING_KEY, 0, 0,</div><div class='add'>+     "Enable localtime logging"},</div><div class='add'>+    {"process-name", ARGP_PROCESS_NAME_KEY, "PROCESS-NAME", OPTION_HIDDEN,</div><div class='add'>+     "option to specify the process type"},</div><div class='add'>+    {"event-history", ARGP_FUSE_EVENT_HISTORY_KEY, "BOOL", OPTION_ARG_OPTIONAL,</div><div class='add'>+     "disable/enable fuse event-history"},</div><div class='add'>+    {"reader-thread-count", ARGP_READER_THREAD_COUNT_KEY, "INTEGER",</div><div class='add'>+     OPTION_ARG_OPTIONAL, "set fuse reader thread count"},</div><div class='add'>+    {"kernel-writeback-cache", ARGP_KERNEL_WRITEBACK_CACHE_KEY, "BOOL",</div><div class='add'>+     OPTION_ARG_OPTIONAL, "enable fuse in-kernel writeback cache"},</div><div class='add'>+    {"attr-times-granularity", ARGP_ATTR_TIMES_GRANULARITY_KEY, "NS",</div><div class='add'>+     OPTION_ARG_OPTIONAL,</div><div class='add'>+     "declare supported granularity of file attribute"</div><div class='add'>+     " times in nanoseconds"},</div><div class='add'>+    {0, 0, 0, 0, "Miscellaneous Options:"},</div><div class='add'>+    {</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+</div><div class='add'>+static struct argp argp = {gf_options, parse_opts, argp_doc, gf_doc};</div><div class='ctx'> </div><div class='add'>+int</div><div class='add'>+glusterfs_pidfile_cleanup(glusterfs_ctx_t *ctx);</div><div class='add'>+int</div><div class='add'>+glusterfs_volumes_init(glusterfs_ctx_t *ctx);</div><div class='add'>+int</div><div class='add'>+glusterfs_mgmt_init(glusterfs_ctx_t *ctx);</div><div class='add'>+int</div><div class='add'>+glusterfs_listener_init(glusterfs_ctx_t *ctx);</div><div class='add'>+int</div><div class='add'>+glusterfs_listener_stop(glusterfs_ctx_t *ctx);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-set_fuse_mount_options (glusterfs_ctx_t *ctx, dict_t *options)</div><div class='add'>+set_fuse_mount_options(glusterfs_ctx_t *ctx, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='del'>-        char            *mount_point = NULL;</div><div class='del'>-        char            cwd[PATH_MAX] = {0,};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    char *mount_point = NULL;</div><div class='add'>+    char cwd[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    /* Check if mount-point is absolute path,</div><div class='add'>+     * if not convert to absolute path by concatenating with CWD</div><div class='add'>+     */</div><div class='add'>+    if (cmd_args-&gt;mount_point[0] != '/') {</div><div class='add'>+        if (getcwd(cwd, PATH_MAX) != NULL) {</div><div class='add'>+            ret = gf_asprintf(&amp;mount_point, "%s/%s", cwd,</div><div class='add'>+                              cmd_args-&gt;mount_point);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_1,</div><div class='add'>+                       "Could not create absolute mountpoint "</div><div class='add'>+                       "path");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_2,</div><div class='add'>+                   "Could not get current working directory");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    } else</div><div class='add'>+        mount_point = gf_strdup(cmd_args-&gt;mount_point);</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    ret = dict_set_dynstr(options, ZR_MOUNTPOINT_OPT, mount_point);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_3,</div><div class='add'>+               "failed to set mount-point to options dictionary");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Check if mount-point is absolute path,</div><div class='del'>-         * if not convert to absolute path by concatenating with CWD</div><div class='del'>-         */</div><div class='del'>-        if (cmd_args-&gt;mount_point[0] != '/') {</div><div class='del'>-                if (getcwd (cwd, PATH_MAX) != NULL) {</div><div class='del'>-                        ret = gf_asprintf (&amp;mount_point, "%s/%s", cwd,</div><div class='del'>-                                           cmd_args-&gt;mount_point);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_msg ("glusterfsd", GF_LOG_ERROR, errno,</div><div class='del'>-                                        glusterfsd_msg_1,</div><div class='del'>-                                        "Could not create absolute mountpoint "</div><div class='del'>-                                        "path");</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, errno,</div><div class='del'>-                                glusterfsd_msg_2,</div><div class='del'>-                                "Could not get current working directory");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        } else</div><div class='del'>-                mount_point = gf_strdup (cmd_args-&gt;mount_point);</div><div class='add'>+    if (cmd_args-&gt;fuse_attribute_timeout &gt;= 0) {</div><div class='add'>+        ret = dict_set_double(options, ZR_ATTR_TIMEOUT_OPT,</div><div class='add'>+                              cmd_args-&gt;fuse_attribute_timeout);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (options, ZR_MOUNTPOINT_OPT, mount_point);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_3,</div><div class='del'>-                        "failed to set mount-point to options dictionary");</div><div class='del'>-                goto err;</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value "</div><div class='add'>+                   "for key " ZR_ATTR_TIMEOUT_OPT);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;fuse_attribute_timeout &gt;= 0) {</div><div class='del'>-                ret = dict_set_double (options, ZR_ATTR_TIMEOUT_OPT,</div><div class='del'>-                                       cmd_args-&gt;fuse_attribute_timeout);</div><div class='add'>+    if (cmd_args-&gt;fuse_entry_timeout &gt;= 0) {</div><div class='add'>+        ret = dict_set_double(options, ZR_ENTRY_TIMEOUT_OPT,</div><div class='add'>+                              cmd_args-&gt;fuse_entry_timeout);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key " ZR_ENTRY_TIMEOUT_OPT);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, errno,</div><div class='del'>-                                glusterfsd_msg_4, "failed to set dict value "</div><div class='del'>-                                "for key " ZR_ATTR_TIMEOUT_OPT);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;fuse_negative_timeout &gt;= 0) {</div><div class='add'>+        ret = dict_set_double(options, ZR_NEGATIVE_TIMEOUT_OPT,</div><div class='add'>+                              cmd_args-&gt;fuse_negative_timeout);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key " ZR_NEGATIVE_TIMEOUT_OPT);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;fuse_entry_timeout &gt;= 0) {</div><div class='del'>-                ret = dict_set_double (options, ZR_ENTRY_TIMEOUT_OPT,</div><div class='del'>-                                       cmd_args-&gt;fuse_entry_timeout);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                ZR_ENTRY_TIMEOUT_OPT);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;client_pid_set) {</div><div class='add'>+        ret = dict_set_int32(options, "client-pid", cmd_args-&gt;client_pid);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key client-pid");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;fuse_negative_timeout &gt;= 0) {</div><div class='del'>-                ret = dict_set_double (options, ZR_NEGATIVE_TIMEOUT_OPT,</div><div class='del'>-                                       cmd_args-&gt;fuse_negative_timeout);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                ZR_NEGATIVE_TIMEOUT_OPT);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;uid_map_root) {</div><div class='add'>+        ret = dict_set_int32(options, "uid-map-root", cmd_args-&gt;uid_map_root);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "uid-map-root");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;client_pid_set) {</div><div class='del'>-                ret = dict_set_int32 (options, "client-pid",</div><div class='del'>-                                      cmd_args-&gt;client_pid);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key client-pid");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;volfile_check) {</div><div class='add'>+        ret = dict_set_int32(options, ZR_STRICT_VOLFILE_CHECK,</div><div class='add'>+                             cmd_args-&gt;volfile_check);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key " ZR_STRICT_VOLFILE_CHECK);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;uid_map_root) {</div><div class='del'>-                ret = dict_set_int32 (options, "uid-map-root",</div><div class='del'>-                                      cmd_args-&gt;uid_map_root);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "uid-map-root");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;dump_fuse) {</div><div class='add'>+        ret = dict_set_static_ptr(options, ZR_DUMP_FUSE, cmd_args-&gt;dump_fuse);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key " ZR_DUMP_FUSE);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;volfile_check) {</div><div class='del'>-                ret = dict_set_int32 (options, ZR_STRICT_VOLFILE_CHECK,</div><div class='del'>-                                      cmd_args-&gt;volfile_check);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                ZR_STRICT_VOLFILE_CHECK);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;acl) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "acl", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key acl");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;dump_fuse) {</div><div class='del'>-                ret = dict_set_static_ptr (options, ZR_DUMP_FUSE,</div><div class='del'>-                                           cmd_args-&gt;dump_fuse);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                ZR_DUMP_FUSE);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;selinux) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "selinux", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key selinux");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;acl) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "acl", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key acl");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;capability) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "capability", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key capability");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;selinux) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "selinux", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key selinux");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;aux_gfid_mount) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "virtual-gfid-access", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "aux-gfid-mount");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;capability) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "capability", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key capability");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;enable_ino32) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "enable-ino32", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "enable-ino32");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;aux_gfid_mount) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "virtual-gfid-access",</div><div class='del'>-                                           "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "aux-gfid-mount");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;read_only) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "read-only", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key read-only");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;enable_ino32) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "enable-ino32", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "enable-ino32");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    switch (cmd_args-&gt;fopen_keep_cache) {</div><div class='add'>+        case GF_OPTION_ENABLE:</div><div class='add'>+            ret = dict_set_static_ptr(options, "fopen-keep-cache", "on");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                       "failed to set dict value for key "</div><div class='add'>+                       "fopen-keep-cache");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case GF_OPTION_DISABLE:</div><div class='add'>+            ret = dict_set_static_ptr(options, "fopen-keep-cache", "off");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                       "failed to set dict value for key "</div><div class='add'>+                       "fopen-keep-cache");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case GF_OPTION_DEFERRED: /* default */</div><div class='add'>+        default:</div><div class='add'>+            gf_msg_debug("glusterfsd", 0, "fopen-keep-cache mode %d",</div><div class='add'>+                         cmd_args-&gt;fopen_keep_cache);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;gid_timeout_set) {</div><div class='add'>+        ret = dict_set_int32(options, "gid-timeout", cmd_args-&gt;gid_timeout);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key gid-timeout");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;read_only) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "read-only", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key read-only");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;resolve_gids) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "resolve-gids", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "resolve-gids");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	switch (cmd_args-&gt;fopen_keep_cache) {</div><div class='del'>-	case GF_OPTION_ENABLE:</div><div class='del'>-		ret = dict_set_static_ptr(options, "fopen-keep-cache",</div><div class='del'>-			"on");</div><div class='del'>-		if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-				"fopen-keep-cache");</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-	case GF_OPTION_DISABLE:</div><div class='del'>-		ret = dict_set_static_ptr(options, "fopen-keep-cache",</div><div class='del'>-			"off");</div><div class='del'>-		if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-				"fopen-keep-cache");</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-        case GF_OPTION_DEFERRED: /* default */</div><div class='del'>-        default:</div><div class='del'>-                gf_msg_debug ("glusterfsd", 0, "fopen-keep-cache mode %d",</div><div class='del'>-                              cmd_args-&gt;fopen_keep_cache);</div><div class='del'>-                break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (cmd_args-&gt;gid_timeout_set) {</div><div class='del'>-		ret = dict_set_int32(options, "gid-timeout",</div><div class='del'>-			cmd_args-&gt;gid_timeout);</div><div class='del'>-		if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key gid-timeout");</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;resolve_gids) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "resolve-gids", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "resolve-gids");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;background_qlen) {</div><div class='add'>+        ret = dict_set_int32(options, "background-qlen",</div><div class='add'>+                             cmd_args-&gt;background_qlen);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "background-qlen");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (cmd_args-&gt;congestion_threshold) {</div><div class='add'>+        ret = dict_set_int32(options, "congestion-threshold",</div><div class='add'>+                             cmd_args-&gt;congestion_threshold);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "congestion-threshold");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (cmd_args-&gt;background_qlen) {</div><div class='del'>-		ret = dict_set_int32 (options, "background-qlen",</div><div class='del'>-                                      cmd_args-&gt;background_qlen);</div><div class='del'>-		if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "background-qlen");</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	if (cmd_args-&gt;congestion_threshold) {</div><div class='del'>-		ret = dict_set_int32 (options, "congestion-threshold",</div><div class='del'>-                                      cmd_args-&gt;congestion_threshold);</div><div class='del'>-		if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "congestion-threshold");</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        switch (cmd_args-&gt;fuse_direct_io_mode) {</div><div class='add'>+    switch (cmd_args-&gt;fuse_direct_io_mode) {</div><div class='ctx'>         case GF_OPTION_DISABLE: /* disable */</div><div class='del'>-                ret = dict_set_static_ptr (options, ZR_DIRECT_IO_OPT,</div><div class='del'>-                                           "disable");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_5,</div><div class='del'>-                                "failed to set 'disable' for key "</div><div class='del'>-                                ZR_DIRECT_IO_OPT);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_static_ptr(options, ZR_DIRECT_IO_OPT, "disable");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_5,</div><div class='add'>+                       "failed to set 'disable' for key " ZR_DIRECT_IO_OPT);</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OPTION_ENABLE: /* enable */</div><div class='del'>-                ret = dict_set_static_ptr (options, ZR_DIRECT_IO_OPT,</div><div class='del'>-                                           "enable");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_6,</div><div class='del'>-                                "failed to set 'enable' for key "</div><div class='del'>-                                ZR_DIRECT_IO_OPT);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_static_ptr(options, ZR_DIRECT_IO_OPT, "enable");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_6,</div><div class='add'>+                       "failed to set 'enable' for key " ZR_DIRECT_IO_OPT);</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OPTION_DEFERRED: /* auto */</div><div class='ctx'>         default:</div><div class='del'>-                gf_msg_debug ("glusterfsd", 0, "fuse direct io type %d",</div><div class='del'>-                              cmd_args-&gt;fuse_direct_io_mode);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg_debug("glusterfsd", 0, "fuse direct io type %d",</div><div class='add'>+                         cmd_args-&gt;fuse_direct_io_mode);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (cmd_args-&gt;no_root_squash) {</div><div class='add'>+    switch (cmd_args-&gt;no_root_squash) {</div><div class='ctx'>         case GF_OPTION_ENABLE: /* enable */</div><div class='del'>-                ret = dict_set_static_ptr (options, "no-root-squash",</div><div class='del'>-                                           "enable");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_6,</div><div class='del'>-                                "failed to set 'enable' for key "</div><div class='del'>-                                "no-root-squash");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_static_ptr(options, "no-root-squash", "enable");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_6,</div><div class='add'>+                       "failed to set 'enable' for key "</div><div class='add'>+                       "no-root-squash");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OPTION_DISABLE: /* disable/default */</div><div class='ctx'>         default:</div><div class='del'>-                ret = dict_set_static_ptr (options, "no-root-squash",</div><div class='del'>-                                           "disable");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_5,</div><div class='del'>-                                "failed to set 'disable' for key "</div><div class='del'>-                                "no-root-squash");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                gf_msg_debug ("glusterfsd", 0, "fuse no-root-squash mode %d",</div><div class='del'>-                        cmd_args-&gt;no_root_squash);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!cmd_args-&gt;no_daemon_mode) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "sync-to-mount",</div><div class='del'>-                                           "enable");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key sync-mtab");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            ret = dict_set_static_ptr(options, "no-root-squash", "disable");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_5,</div><div class='add'>+                       "failed to set 'disable' for key "</div><div class='add'>+                       "no-root-squash");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            gf_msg_debug("glusterfsd", 0, "fuse no-root-squash mode %d",</div><div class='add'>+                         cmd_args-&gt;no_root_squash);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!cmd_args-&gt;no_daemon_mode) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "sync-to-mount", "enable");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key sync-mtab");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;use_readdirp) {</div><div class='del'>-                ret = dict_set_str (options, "use-readdirp",</div><div class='del'>-                                    cmd_args-&gt;use_readdirp);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "use-readdirp");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (cmd_args-&gt;event_history) {</div><div class='del'>-                ret = dict_set_str (options, "event-history",</div><div class='del'>-                                    cmd_args-&gt;event_history);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "event-history");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (cmd_args-&gt;thin_client) {</div><div class='del'>-                ret = dict_set_static_ptr (options, "thin-client", "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "thin-client");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (cmd_args-&gt;reader_thread_count) {</div><div class='del'>-                ret = dict_set_uint32 (options, "reader-thread-count",</div><div class='del'>-                                       cmd_args-&gt;reader_thread_count);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "reader-thread-count");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;use_readdirp) {</div><div class='add'>+        ret = dict_set_str(options, "use-readdirp", cmd_args-&gt;use_readdirp);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "use-readdirp");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (cmd_args-&gt;event_history) {</div><div class='add'>+        ret = dict_set_str(options, "event-history", cmd_args-&gt;event_history);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "event-history");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (cmd_args-&gt;thin_client) {</div><div class='add'>+        ret = dict_set_static_ptr(options, "thin-client", "on");</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "thin-client");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (cmd_args-&gt;reader_thread_count) {</div><div class='add'>+        ret = dict_set_uint32(options, "reader-thread-count",</div><div class='add'>+                              cmd_args-&gt;reader_thread_count);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "reader-thread-count");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-        switch (cmd_args-&gt;kernel_writeback_cache) {</div><div class='add'>+    }</div><div class='add'>+    switch (cmd_args-&gt;kernel_writeback_cache) {</div><div class='ctx'>         case GF_OPTION_ENABLE:</div><div class='del'>-                ret = dict_set_static_ptr(options, "kernel-writeback-cache",</div><div class='del'>-                        "on");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "kernel-writeback-cache");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_static_ptr(options, "kernel-writeback-cache", "on");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                       "failed to set dict value for key "</div><div class='add'>+                       "kernel-writeback-cache");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OPTION_DISABLE:</div><div class='del'>-                ret = dict_set_static_ptr(options, "kernel-writeback-cache",</div><div class='del'>-                        "off");</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "kernel-writeback-cache");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = dict_set_static_ptr(options, "kernel-writeback-cache", "off");</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                       "failed to set dict value for key "</div><div class='add'>+                       "kernel-writeback-cache");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_OPTION_DEFERRED: /* default */</div><div class='ctx'>         default:</div><div class='del'>-                gf_msg_debug ("glusterfsd", 0, "kernel-writeback-cache mode %d",</div><div class='del'>-                              cmd_args-&gt;kernel_writeback_cache);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        if (cmd_args-&gt;attr_times_granularity) {</div><div class='del'>-                ret = dict_set_uint32 (options, "attr-times-granularity",</div><div class='del'>-                                       cmd_args-&gt;attr_times_granularity);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                "attr-times-granularity");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            gf_msg_debug("glusterfsd", 0, "kernel-writeback-cache mode %d",</div><div class='add'>+                         cmd_args-&gt;kernel_writeback_cache);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    if (cmd_args-&gt;attr_times_granularity) {</div><div class='add'>+        ret = dict_set_uint32(options, "attr-times-granularity",</div><div class='add'>+                              cmd_args-&gt;attr_times_granularity);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key "</div><div class='add'>+                   "attr-times-granularity");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-create_fuse_mount (glusterfs_ctx_t *ctx)</div><div class='add'>+create_fuse_mount(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='del'>-        xlator_t        *master = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    xlator_t *master = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;mount_point) {</div><div class='del'>-                gf_msg_trace ("glusterfsd", 0,</div><div class='del'>-                              "mount point not found, not a client process");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;process_mode != GF_CLIENT_PROCESS) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_7,</div><div class='del'>-                        "Not a client process, not performing mount operation");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        master = GF_CALLOC (1, sizeof (*master),</div><div class='del'>-                            gfd_mt_xlator_t);</div><div class='del'>-        if (!master)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        master-&gt;name = gf_strdup ("fuse");</div><div class='del'>-        if (!master-&gt;name)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        if (xlator_set_type (master, "mount/fuse") == -1) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_8,</div><div class='del'>-                        "MOUNT-POINT %s initialization failed",</div><div class='del'>-                        cmd_args-&gt;mount_point);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        master-&gt;ctx      = ctx;</div><div class='del'>-        master-&gt;options  = get_new_dict ();</div><div class='del'>-        if (!master-&gt;options)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = set_fuse_mount_options (ctx, master-&gt;options);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;fuse_mountopts) {</div><div class='del'>-                ret = dict_set_static_ptr (master-&gt;options, ZR_FUSE_MOUNTOPTS,</div><div class='del'>-                                           cmd_args-&gt;fuse_mountopts);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='del'>-                                "failed to set dict value for key "</div><div class='del'>-                                ZR_FUSE_MOUNTOPTS);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (!cmd_args-&gt;mount_point) {</div><div class='add'>+        gf_msg_trace("glusterfsd", 0,</div><div class='add'>+                     "mount point not found, not a client process");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;process_mode != GF_CLIENT_PROCESS) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_7,</div><div class='add'>+               "Not a client process, not performing mount operation");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    master = GF_CALLOC(1, sizeof(*master), gfd_mt_xlator_t);</div><div class='add'>+    if (!master)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    master-&gt;name = gf_strdup("fuse");</div><div class='add'>+    if (!master-&gt;name)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (xlator_set_type(master, "mount/fuse") == -1) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_8,</div><div class='add'>+               "MOUNT-POINT %s initialization failed", cmd_args-&gt;mount_point);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    master-&gt;ctx = ctx;</div><div class='add'>+    master-&gt;options = get_new_dict();</div><div class='add'>+    if (!master-&gt;options)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = set_fuse_mount_options(ctx, master-&gt;options);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;fuse_mountopts) {</div><div class='add'>+        ret = dict_set_static_ptr(master-&gt;options, ZR_FUSE_MOUNTOPTS,</div><div class='add'>+                                  cmd_args-&gt;fuse_mountopts);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,</div><div class='add'>+                   "failed to set dict value for key " ZR_FUSE_MOUNTOPTS);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xlator_init (master);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug ("glusterfsd", 0,</div><div class='del'>-                              "failed to initialize fuse translator");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_init(master);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug("glusterfsd", 0, "failed to initialize fuse translator");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;master = master;</div><div class='add'>+    ctx-&gt;master = master;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (master) {</div><div class='del'>-                xlator_destroy (master);</div><div class='del'>-        }</div><div class='add'>+    if (master) {</div><div class='add'>+        xlator_destroy(master);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 1;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static FILE *</div><div class='del'>-get_volfp (glusterfs_ctx_t *ctx)</div><div class='add'>+get_volfp(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        cmd_args_t  *cmd_args = NULL;</div><div class='del'>-        FILE        *specfp = NULL;</div><div class='del'>-        struct stat  statbuf;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    FILE *specfp = NULL;</div><div class='add'>+    struct stat statbuf;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        ret = sys_lstat (cmd_args-&gt;volfile, &amp;statbuf);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_9,</div><div class='del'>-                        "loading volume file %s failed", cmd_args-&gt;volfile);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    ret = sys_lstat(cmd_args-&gt;volfile, &amp;statbuf);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_9,</div><div class='add'>+               "loading volume file %s failed", cmd_args-&gt;volfile);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((specfp = fopen (cmd_args-&gt;volfile, "r")) == NULL) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_9,</div><div class='del'>-                        "loading volume file %s failed", cmd_args-&gt;volfile);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if ((specfp = fopen(cmd_args-&gt;volfile, "r")) == NULL) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_9,</div><div class='add'>+               "loading volume file %s failed", cmd_args-&gt;volfile);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug ("glusterfsd", 0, "loading volume file %s",</div><div class='del'>-                      cmd_args-&gt;volfile);</div><div class='add'>+    gf_msg_debug("glusterfsd", 0, "loading volume file %s", cmd_args-&gt;volfile);</div><div class='ctx'> </div><div class='del'>-        return specfp;</div><div class='add'>+    return specfp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_remember_backup_volfile_server (char *arg)</div><div class='add'>+gf_remember_backup_volfile_server(char *arg)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        cmd_args_t              *cmd_args = NULL;</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        if(!cmd_args)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = gf_set_volfile_server_common(cmd_args, arg,</div><div class='del'>-                                           GF_DEFAULT_VOLFILE_TRANSPORT,</div><div class='del'>-                                           GF_DEFAULT_BASE_PORT);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_ERROR,</div><div class='del'>-                        "failed to set volfile server: %s", strerror (errno));</div><div class='del'>-        }</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (!cmd_args)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = gf_set_volfile_server_common(</div><div class='add'>+        cmd_args, arg, GF_DEFAULT_VOLFILE_TRANSPORT, GF_DEFAULT_BASE_PORT);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_ERROR, "failed to set volfile server: %s",</div><div class='add'>+               strerror(errno));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_remember_xlator_option (char *arg)</div><div class='add'>+gf_remember_xlator_option(char *arg)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        cmd_args_t              *cmd_args  = NULL;</div><div class='del'>-        xlator_cmdline_option_t *option = NULL;</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        char                    *dot = NULL;</div><div class='del'>-        char                    *equals = NULL;</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        option = GF_CALLOC (1, sizeof (xlator_cmdline_option_t),</div><div class='del'>-                            gfd_mt_xlator_cmdline_option_t);</div><div class='del'>-        if (!option)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;option-&gt;cmd_args);</div><div class='del'>-</div><div class='del'>-        dot = strchr (arg, '.');</div><div class='del'>-        if (!dot) {</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, 0, glusterfsd_msg_10,</div><div class='del'>-                        "xlator option %s is invalid", arg);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        option-&gt;volume = GF_MALLOC ((dot - arg) + 1, gfd_mt_char);</div><div class='del'>-        if (!option-&gt;volume)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        strncpy (option-&gt;volume, arg, (dot - arg));</div><div class='del'>-        option-&gt;volume[(dot - arg)] = '\0';</div><div class='del'>-</div><div class='del'>-        equals = strchr (arg, '=');</div><div class='del'>-        if (!equals) {</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, 0, glusterfsd_msg_10,</div><div class='del'>-                        "xlator option %s is invalid", arg);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        option-&gt;key = GF_MALLOC ((equals - dot) + 1, gfd_mt_char);</div><div class='del'>-        if (!option-&gt;key)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        strncpy (option-&gt;key, dot + 1, (equals - dot - 1));</div><div class='del'>-        option-&gt;key[(equals - dot - 1)] = '\0';</div><div class='del'>-</div><div class='del'>-        if (!*(equals + 1)) {</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, 0, glusterfsd_msg_10,</div><div class='del'>-                        "xlator option %s is invalid", arg);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        option-&gt;value = gf_strdup (equals + 1);</div><div class='del'>-</div><div class='del'>-        list_add (&amp;option-&gt;cmd_args, &amp;cmd_args-&gt;xlator_options);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    xlator_cmdline_option_t *option = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *dot = NULL;</div><div class='add'>+    char *equals = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    option = GF_CALLOC(1, sizeof(xlator_cmdline_option_t),</div><div class='add'>+                       gfd_mt_xlator_cmdline_option_t);</div><div class='add'>+    if (!option)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;option-&gt;cmd_args);</div><div class='add'>+</div><div class='add'>+    dot = strchr(arg, '.');</div><div class='add'>+    if (!dot) {</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, 0, glusterfsd_msg_10,</div><div class='add'>+               "xlator option %s is invalid", arg);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    option-&gt;volume = GF_MALLOC((dot - arg) + 1, gfd_mt_char);</div><div class='add'>+    if (!option-&gt;volume)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    strncpy(option-&gt;volume, arg, (dot - arg));</div><div class='add'>+    option-&gt;volume[(dot - arg)] = '\0';</div><div class='add'>+</div><div class='add'>+    equals = strchr(arg, '=');</div><div class='add'>+    if (!equals) {</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, 0, glusterfsd_msg_10,</div><div class='add'>+               "xlator option %s is invalid", arg);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    option-&gt;key = GF_MALLOC((equals - dot) + 1, gfd_mt_char);</div><div class='add'>+    if (!option-&gt;key)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    strncpy(option-&gt;key, dot + 1, (equals - dot - 1));</div><div class='add'>+    option-&gt;key[(equals - dot - 1)] = '\0';</div><div class='add'>+</div><div class='add'>+    if (!*(equals + 1)) {</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, 0, glusterfsd_msg_10,</div><div class='add'>+               "xlator option %s is invalid", arg);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    option-&gt;value = gf_strdup(equals + 1);</div><div class='add'>+</div><div class='add'>+    list_add(&amp;option-&gt;cmd_args, &amp;cmd_args-&gt;xlator_options);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (option) {</div><div class='del'>-                        GF_FREE (option-&gt;volume);</div><div class='del'>-                        GF_FREE (option-&gt;key);</div><div class='del'>-                        GF_FREE (option-&gt;value);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (option) {</div><div class='add'>+            GF_FREE(option-&gt;volume);</div><div class='add'>+            GF_FREE(option-&gt;key);</div><div class='add'>+            GF_FREE(option-&gt;value);</div><div class='ctx'> </div><div class='del'>-                        GF_FREE (option);</div><div class='del'>-                }</div><div class='add'>+            GF_FREE(option);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='ctx'> static struct oom_api_info {</div><div class='del'>-        char *oom_api_file;</div><div class='del'>-        int32_t oom_min;</div><div class='del'>-        int32_t oom_max;</div><div class='add'>+    char *oom_api_file;</div><div class='add'>+    int32_t oom_min;</div><div class='add'>+    int32_t oom_max;</div><div class='ctx'> } oom_api_info[] = {</div><div class='del'>-        { "/proc/self/oom_score_adj", OOM_SCORE_ADJ_MIN, OOM_SCORE_ADJ_MAX },</div><div class='del'>-        { "/proc/self/oom_adj",       OOM_DISABLE,       OOM_ADJUST_MAX },</div><div class='del'>-        { NULL, 0, 0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='add'>+    {"/proc/self/oom_score_adj", OOM_SCORE_ADJ_MIN, OOM_SCORE_ADJ_MAX},</div><div class='add'>+    {"/proc/self/oom_adj", OOM_DISABLE, OOM_ADJUST_MAX},</div><div class='add'>+    {NULL, 0, 0}};</div><div class='ctx'> </div><div class='ctx'> static struct oom_api_info *</div><div class='del'>-get_oom_api_info (void)</div><div class='add'>+get_oom_api_info(void)</div><div class='ctx'> {</div><div class='del'>-        struct oom_api_info *api = NULL;</div><div class='add'>+    struct oom_api_info *api = NULL;</div><div class='ctx'> </div><div class='del'>-        for (api = oom_api_info; api-&gt;oom_api_file; api++) {</div><div class='del'>-                if (sys_access (api-&gt;oom_api_file, F_OK) != -1) {</div><div class='del'>-                        return api;</div><div class='del'>-                }</div><div class='add'>+    for (api = oom_api_info; api-&gt;oom_api_file; api++) {</div><div class='add'>+        if (sys_access(api-&gt;oom_api_file, F_OK) != -1) {</div><div class='add'>+            return api;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static error_t</div><div class='del'>-parse_opts (int key, char *arg, struct argp_state *state)</div><div class='add'>+parse_opts(int key, char *arg, struct argp_state *state)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t          *cmd_args      = NULL;</div><div class='del'>-        uint32_t             n             = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    uint32_t n = 0;</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        int32_t              k             = 0;</div><div class='del'>-        struct oom_api_info *api           = NULL;</div><div class='add'>+    int32_t k = 0;</div><div class='add'>+    struct oom_api_info *api = NULL;</div><div class='ctx'> #endif</div><div class='del'>-        double               d             = 0.0;</div><div class='del'>-        gf_boolean_t         b             = _gf_false;</div><div class='del'>-        char                *pwd           = NULL;</div><div class='del'>-        char                *tmp_str       = NULL;</div><div class='del'>-        char                *port_str      = NULL;</div><div class='del'>-        struct passwd       *pw            = NULL;</div><div class='del'>-        int                  ret           = 0;</div><div class='add'>+    double d = 0.0;</div><div class='add'>+    gf_boolean_t b = _gf_false;</div><div class='add'>+    char *pwd = NULL;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='add'>+    char *port_str = NULL;</div><div class='add'>+    struct passwd *pw = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        cmd_args = state-&gt;input;</div><div class='add'>+    cmd_args = state-&gt;input;</div><div class='ctx'> </div><div class='del'>-        switch (key) {</div><div class='add'>+    switch (key) {</div><div class='ctx'>         case ARGP_VOLFILE_SERVER_KEY:</div><div class='del'>-                gf_remember_backup_volfile_server (arg);</div><div class='add'>+            gf_remember_backup_volfile_server(arg);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_READ_ONLY_KEY:</div><div class='del'>-                cmd_args-&gt;read_only = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;read_only = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_ACL_KEY:</div><div class='del'>-                cmd_args-&gt;acl = 1;</div><div class='del'>-                gf_remember_xlator_option ("*-md-cache.cache-posix-acl=true");</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;acl = 1;</div><div class='add'>+            gf_remember_xlator_option("*-md-cache.cache-posix-acl=true");</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_SELINUX_KEY:</div><div class='del'>-                cmd_args-&gt;selinux = 1;</div><div class='del'>-                gf_remember_xlator_option ("*-md-cache.cache-selinux=true");</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;selinux = 1;</div><div class='add'>+            gf_remember_xlator_option("*-md-cache.cache-selinux=true");</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_CAPABILITY_KEY:</div><div class='del'>-                cmd_args-&gt;capability = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;capability = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_AUX_GFID_MOUNT_KEY:</div><div class='del'>-                cmd_args-&gt;aux_gfid_mount = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;aux_gfid_mount = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_INODE32_KEY:</div><div class='del'>-                cmd_args-&gt;enable_ino32 = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;enable_ino32 = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_WORM_KEY:</div><div class='del'>-                cmd_args-&gt;worm = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;worm = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PRINT_NETGROUPS:</div><div class='del'>-                cmd_args-&gt;print_netgroups = arg;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;print_netgroups = arg;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PRINT_EXPORTS:</div><div class='del'>-                cmd_args-&gt;print_exports = arg;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;print_exports = arg;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PRINT_XLATORDIR_KEY:</div><div class='del'>-                cmd_args-&gt;print_xlatordir = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;print_xlatordir = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PRINT_STATEDUMPDIR_KEY:</div><div class='del'>-                cmd_args-&gt;print_statedumpdir = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;print_statedumpdir = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PRINT_LOGDIR_KEY:</div><div class='del'>-                cmd_args-&gt;print_logdir = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;print_logdir = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PRINT_LIBEXECDIR_KEY:</div><div class='del'>-                cmd_args-&gt;print_libexecdir = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;print_libexecdir = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_MAC_COMPAT_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "on";</div><div class='del'>-</div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        cmd_args-&gt;mac_compat = b;</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "on";</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                cmd_args-&gt;mac_compat = b;</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "invalid value \"%s\" for mac-compat", arg);</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "invalid value \"%s\" for mac-compat",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_VOLUME_FILE_KEY:</div><div class='del'>-                GF_FREE (cmd_args-&gt;volfile);</div><div class='del'>-</div><div class='del'>-                if (arg[0] != '/') {</div><div class='del'>-                        pwd = getcwd (NULL, PATH_MAX);</div><div class='del'>-                        if (!pwd) {</div><div class='del'>-                               argp_failure (state, -1, errno,</div><div class='del'>-                                            "getcwd failed with error no %d",</div><div class='del'>-                                             errno);</div><div class='del'>-                               break;</div><div class='del'>-                        }</div><div class='del'>-                        char tmp_buf[1024];</div><div class='del'>-                        snprintf (tmp_buf, sizeof(tmp_buf), "%s/%s", pwd, arg);</div><div class='del'>-                        cmd_args-&gt;volfile = gf_strdup (tmp_buf);</div><div class='del'>-                        free (pwd);</div><div class='del'>-                } else {</div><div class='del'>-                        cmd_args-&gt;volfile = gf_strdup (arg);</div><div class='add'>+            GF_FREE(cmd_args-&gt;volfile);</div><div class='add'>+</div><div class='add'>+            if (arg[0] != '/') {</div><div class='add'>+                pwd = getcwd(NULL, PATH_MAX);</div><div class='add'>+                if (!pwd) {</div><div class='add'>+                    argp_failure(state, -1, errno,</div><div class='add'>+                                 "getcwd failed with error no %d", errno);</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+                char tmp_buf[1024];</div><div class='add'>+                snprintf(tmp_buf, sizeof(tmp_buf), "%s/%s", pwd, arg);</div><div class='add'>+                cmd_args-&gt;volfile = gf_strdup(tmp_buf);</div><div class='add'>+                free(pwd);</div><div class='add'>+            } else {</div><div class='add'>+                cmd_args-&gt;volfile = gf_strdup(arg);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOG_LEVEL_KEY:</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_NONE_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_NONE;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_CRITICAL_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_CRITICAL;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_ERROR_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_ERROR;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_WARNING_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_WARNING;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_INFO_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_INFO;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_DEBUG_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_DEBUG;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp (arg, ARGP_LOG_LEVEL_TRACE_OPTION) == 0) {</div><div class='del'>-                        cmd_args-&gt;log_level = GF_LOG_TRACE;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0, "unknown log level %s", arg);</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_NONE_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_NONE;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_CRITICAL_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_CRITICAL;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_ERROR_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_ERROR;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_WARNING_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_WARNING;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_INFO_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_INFO;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_DEBUG_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_DEBUG;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            if (strcasecmp(arg, ARGP_LOG_LEVEL_TRACE_OPTION) == 0) {</div><div class='add'>+                cmd_args-&gt;log_level = GF_LOG_TRACE;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "unknown log level %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOG_FILE_KEY:</div><div class='del'>-                cmd_args-&gt;log_file = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;log_file = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_VOLFILE_SERVER_PORT_KEY:</div><div class='del'>-                n = 0;</div><div class='add'>+            n = 0;</div><div class='ctx'> </div><div class='del'>-                if (gf_string2uint_base10 (arg, &amp;n) == 0) {</div><div class='del'>-                        cmd_args-&gt;volfile_server_port = n;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown volfile server port %s", arg);</div><div class='add'>+            if (gf_string2uint_base10(arg, &amp;n) == 0) {</div><div class='add'>+                cmd_args-&gt;volfile_server_port = n;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "unknown volfile server port %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_VOLFILE_SERVER_TRANSPORT_KEY:</div><div class='del'>-                cmd_args-&gt;volfile_server_transport = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;volfile_server_transport = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_VOLFILE_ID_KEY:</div><div class='del'>-                cmd_args-&gt;volfile_id = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;volfile_id = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_THIN_CLIENT_KEY:</div><div class='del'>-                cmd_args-&gt;thin_client = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;thin_client = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_PID_FILE_KEY:</div><div class='del'>-                cmd_args-&gt;pid_file = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;pid_file = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_SOCK_FILE_KEY:</div><div class='del'>-                cmd_args-&gt;sock_file = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;sock_file = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_NO_DAEMON_KEY:</div><div class='del'>-                cmd_args-&gt;no_daemon_mode = ENABLE_NO_DAEMON_MODE;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;no_daemon_mode = ENABLE_NO_DAEMON_MODE;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_RUN_ID_KEY:</div><div class='del'>-                cmd_args-&gt;run_id = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;run_id = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_DEBUG_KEY:</div><div class='del'>-                cmd_args-&gt;debug_mode = ENABLE_DEBUG_MODE;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;debug_mode = ENABLE_DEBUG_MODE;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_VOLFILE_MAX_FETCH_ATTEMPTS:</div><div class='del'>-                cmd_args-&gt;max_connect_attempts = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;max_connect_attempts = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_DIRECT_IO_MODE_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "on";</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "on";</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        cmd_args-&gt;fuse_direct_io_mode = b;</div><div class='del'>-</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                cmd_args-&gt;fuse_direct_io_mode = b;</div><div class='ctx'> </div><div class='del'>-                if (strcmp (arg, "auto") == 0)</div><div class='del'>-                        break;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown direct I/O mode setting \"%s\"", arg);</div><div class='add'>+            if (strcmp(arg, "auto") == 0)</div><div class='ctx'>                 break;</div><div class='ctx'> </div><div class='add'>+            argp_failure(state, -1, 0, "unknown direct I/O mode setting \"%s\"",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='ctx'>         case ARGP_FUSE_NO_ROOT_SQUASH_KEY:</div><div class='del'>-                cmd_args-&gt;no_root_squash = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;no_root_squash = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_ENTRY_TIMEOUT_KEY:</div><div class='del'>-                d = 0.0;</div><div class='add'>+            d = 0.0;</div><div class='ctx'> </div><div class='del'>-                gf_string2double (arg, &amp;d);</div><div class='del'>-                if (!(d &lt; 0.0)) {</div><div class='del'>-                        cmd_args-&gt;fuse_entry_timeout = d;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0, "unknown entry timeout %s", arg);</div><div class='add'>+            gf_string2double(arg, &amp;d);</div><div class='add'>+            if (!(d &lt; 0.0)) {</div><div class='add'>+                cmd_args-&gt;fuse_entry_timeout = d;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case ARGP_NEGATIVE_TIMEOUT_KEY:</div><div class='del'>-                d = 0.0;</div><div class='add'>+            argp_failure(state, -1, 0, "unknown entry timeout %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                ret = gf_string2double (arg, &amp;d);</div><div class='del'>-                if ((ret == 0) &amp;&amp; !(d &lt; 0.0)) {</div><div class='del'>-                        cmd_args-&gt;fuse_negative_timeout = d;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        case ARGP_NEGATIVE_TIMEOUT_KEY:</div><div class='add'>+            d = 0.0;</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0, "unknown negative timeout %s", arg);</div><div class='add'>+            ret = gf_string2double(arg, &amp;d);</div><div class='add'>+            if ((ret == 0) &amp;&amp; !(d &lt; 0.0)) {</div><div class='add'>+                cmd_args-&gt;fuse_negative_timeout = d;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case ARGP_ATTRIBUTE_TIMEOUT_KEY:</div><div class='del'>-                d = 0.0;</div><div class='add'>+            argp_failure(state, -1, 0, "unknown negative timeout %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                gf_string2double (arg, &amp;d);</div><div class='del'>-                if (!(d &lt; 0.0)) {</div><div class='del'>-                        cmd_args-&gt;fuse_attribute_timeout = d;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        case ARGP_ATTRIBUTE_TIMEOUT_KEY:</div><div class='add'>+            d = 0.0;</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown attribute timeout %s", arg);</div><div class='add'>+            gf_string2double(arg, &amp;d);</div><div class='add'>+            if (!(d &lt; 0.0)) {</div><div class='add'>+                cmd_args-&gt;fuse_attribute_timeout = d;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case ARGP_CLIENT_PID_KEY:</div><div class='del'>-                if (gf_string2int (arg, &amp;cmd_args-&gt;client_pid) == 0) {</div><div class='del'>-                        cmd_args-&gt;client_pid_set = 1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            argp_failure(state, -1, 0, "unknown attribute timeout %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown client pid %s", arg);</div><div class='add'>+        case ARGP_CLIENT_PID_KEY:</div><div class='add'>+            if (gf_string2int(arg, &amp;cmd_args-&gt;client_pid) == 0) {</div><div class='add'>+                cmd_args-&gt;client_pid_set = 1;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "unknown client pid %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_USER_MAP_ROOT_KEY:</div><div class='del'>-                pw = getpwnam (arg);</div><div class='del'>-                if (pw)</div><div class='del'>-                        cmd_args-&gt;uid_map_root = pw-&gt;pw_uid;</div><div class='del'>-                else</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "user %s does not exist", arg);</div><div class='del'>-                break;</div><div class='add'>+            pw = getpwnam(arg);</div><div class='add'>+            if (pw)</div><div class='add'>+                cmd_args-&gt;uid_map_root = pw-&gt;pw_uid;</div><div class='add'>+            else</div><div class='add'>+                argp_failure(state, -1, 0, "user %s does not exist", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_VOLFILE_CHECK_KEY:</div><div class='del'>-                cmd_args-&gt;volfile_check = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;volfile_check = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_VOLUME_NAME_KEY:</div><div class='del'>-                cmd_args-&gt;volume_name = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;volume_name = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_XLATOR_OPTION_KEY:</div><div class='del'>-                if (gf_remember_xlator_option (arg))</div><div class='del'>-                        argp_failure (state, -1, 0, "invalid xlator option  %s",</div><div class='del'>-                                      arg);</div><div class='add'>+            if (gf_remember_xlator_option(arg))</div><div class='add'>+                argp_failure(state, -1, 0, "invalid xlator option  %s", arg);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_KEY_NO_ARGS:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_KEY_ARG:</div><div class='del'>-                if (state-&gt;arg_num &gt;= 1)</div><div class='del'>-                        argp_usage (state);</div><div class='add'>+            if (state-&gt;arg_num &gt;= 1)</div><div class='add'>+                argp_usage(state);</div><div class='ctx'> </div><div class='del'>-                cmd_args-&gt;mount_point = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;mount_point = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_DUMP_FUSE_KEY:</div><div class='del'>-                cmd_args-&gt;dump_fuse = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;dump_fuse = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_BRICK_NAME_KEY:</div><div class='del'>-                cmd_args-&gt;brick_name = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;brick_name = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_BRICK_PORT_KEY:</div><div class='del'>-                n = 0;</div><div class='del'>-</div><div class='del'>-                port_str = strtok_r (arg, ",", &amp;tmp_str);</div><div class='del'>-                if (gf_string2uint_base10 (port_str, &amp;n) == 0) {</div><div class='del'>-                        cmd_args-&gt;brick_port = n;</div><div class='del'>-                        port_str = strtok_r (NULL, ",", &amp;tmp_str);</div><div class='del'>-                        if (port_str) {</div><div class='del'>-                                if (gf_string2uint_base10 (port_str, &amp;n) == 0) {</div><div class='del'>-                                        cmd_args-&gt;brick_port2 = n;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                                argp_failure (state, -1, 0,</div><div class='del'>-                                              "wrong brick (listen) port %s", arg);</div><div class='del'>-                        }</div><div class='add'>+            n = 0;</div><div class='add'>+</div><div class='add'>+            port_str = strtok_r(arg, ",", &amp;tmp_str);</div><div class='add'>+            if (gf_string2uint_base10(port_str, &amp;n) == 0) {</div><div class='add'>+                cmd_args-&gt;brick_port = n;</div><div class='add'>+                port_str = strtok_r(NULL, ",", &amp;tmp_str);</div><div class='add'>+                if (port_str) {</div><div class='add'>+                    if (gf_string2uint_base10(port_str, &amp;n) == 0) {</div><div class='add'>+                        cmd_args-&gt;brick_port2 = n;</div><div class='ctx'>                         break;</div><div class='add'>+                    }</div><div class='add'>+                    argp_failure(state, -1, 0, "wrong brick (listen) port %s",</div><div class='add'>+                                 arg);</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown brick (listen) port %s", arg);</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "unknown brick (listen) port %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_MEM_ACCOUNTING_KEY:</div><div class='del'>-                /* TODO: it should have got handled much earlier */</div><div class='del'>-		//gf_mem_acct_enable_set (THIS-&gt;ctx);</div><div class='del'>-                break;</div><div class='add'>+            /* TODO: it should have got handled much earlier */</div><div class='add'>+            // gf_mem_acct_enable_set (THIS-&gt;ctx);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-	case ARGP_FOPEN_KEEP_CACHE_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "on";</div><div class='add'>+        case ARGP_FOPEN_KEEP_CACHE_KEY:</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "on";</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        cmd_args-&gt;fopen_keep_cache = b;</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                cmd_args-&gt;fopen_keep_cache = b;</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown cache setting \"%s\"", arg);</div><div class='add'>+            argp_failure(state, -1, 0, "unknown cache setting \"%s\"", arg);</div><div class='ctx'> </div><div class='del'>-		break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_GLOBAL_TIMER_WHEEL:</div><div class='del'>-                cmd_args-&gt;global_timer_wheel = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;global_timer_wheel = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-	case ARGP_GID_TIMEOUT_KEY:</div><div class='del'>-		if (!gf_string2int(arg, &amp;cmd_args-&gt;gid_timeout)) {</div><div class='del'>-			cmd_args-&gt;gid_timeout_set = _gf_true;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='add'>+        case ARGP_GID_TIMEOUT_KEY:</div><div class='add'>+            if (!gf_string2int(arg, &amp;cmd_args-&gt;gid_timeout)) {</div><div class='add'>+                cmd_args-&gt;gid_timeout_set = _gf_true;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-		argp_failure(state, -1, 0, "unknown group list timeout %s", arg);</div><div class='del'>-		break;</div><div class='add'>+            argp_failure(state, -1, 0, "unknown group list timeout %s", arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_RESOLVE_GIDS_KEY:</div><div class='del'>-                cmd_args-&gt;resolve_gids = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;resolve_gids = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_FUSE_BACKGROUND_QLEN_KEY:</div><div class='del'>-                if (!gf_string2int (arg, &amp;cmd_args-&gt;background_qlen))</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown background qlen option %s", arg);</div><div class='add'>+            if (!gf_string2int(arg, &amp;cmd_args-&gt;background_qlen))</div><div class='ctx'>                 break;</div><div class='del'>-        case ARGP_FUSE_CONGESTION_THRESHOLD_KEY:</div><div class='del'>-                if (!gf_string2int (arg, &amp;cmd_args-&gt;congestion_threshold))</div><div class='del'>-                        break;</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown congestion threshold option %s", arg);</div><div class='add'>+            argp_failure(state, -1, 0, "unknown background qlen option %s",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='add'>+        case ARGP_FUSE_CONGESTION_THRESHOLD_KEY:</div><div class='add'>+            if (!gf_string2int(arg, &amp;cmd_args-&gt;congestion_threshold))</div><div class='ctx'>                 break;</div><div class='ctx'> </div><div class='add'>+            argp_failure(state, -1, 0, "unknown congestion threshold option %s",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='ctx'>         case ARGP_OOM_SCORE_ADJ_KEY:</div><div class='del'>-                k = 0;</div><div class='add'>+            k = 0;</div><div class='ctx'> </div><div class='del'>-                api = get_oom_api_info();</div><div class='del'>-                if (!api)</div><div class='del'>-                        goto no_oom_api;</div><div class='add'>+            api = get_oom_api_info();</div><div class='add'>+            if (!api)</div><div class='add'>+                goto no_oom_api;</div><div class='ctx'> </div><div class='del'>-                if (gf_string2int (arg, &amp;k) == 0 &amp;&amp;</div><div class='del'>-                    k &gt;= api-&gt;oom_min &amp;&amp; k &lt;= api-&gt;oom_max) {</div><div class='del'>-                        cmd_args-&gt;oom_score_adj = gf_strdup (arg);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (gf_string2int(arg, &amp;k) == 0 &amp;&amp; k &gt;= api-&gt;oom_min &amp;&amp;</div><div class='add'>+                k &lt;= api-&gt;oom_max) {</div><div class='add'>+                cmd_args-&gt;oom_score_adj = gf_strdup(arg);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown oom_score_adj value %s", arg);</div><div class='add'>+            argp_failure(state, -1, 0, "unknown oom_score_adj value %s", arg);</div><div class='ctx'> </div><div class='del'>-no_oom_api:</div><div class='del'>-                break;</div><div class='add'>+        no_oom_api:</div><div class='add'>+            break;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'>         case ARGP_FUSE_MOUNTOPTS_KEY:</div><div class='del'>-                cmd_args-&gt;fuse_mountopts = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;fuse_mountopts = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_FUSE_USE_READDIRP_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "yes";</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "yes";</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        if (b) {</div><div class='del'>-                                cmd_args-&gt;use_readdirp = "yes";</div><div class='del'>-                        } else {</div><div class='del'>-                                cmd_args-&gt;use_readdirp = "no";</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        break;</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                if (b) {</div><div class='add'>+                    cmd_args-&gt;use_readdirp = "yes";</div><div class='add'>+                } else {</div><div class='add'>+                    cmd_args-&gt;use_readdirp = "no";</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown use-readdirp setting \"%s\"", arg);</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "unknown use-readdirp setting \"%s\"",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOGGER:</div><div class='del'>-                if (strcasecmp (arg, GF_LOGGER_GLUSTER_LOG) == 0)</div><div class='del'>-                        cmd_args-&gt;logger = gf_logger_glusterlog;</div><div class='del'>-                else if (strcasecmp (arg, GF_LOGGER_SYSLOG) == 0)</div><div class='del'>-                        cmd_args-&gt;logger = gf_logger_syslog;</div><div class='del'>-                else</div><div class='del'>-                        argp_failure (state, -1, 0, "unknown logger %s", arg);</div><div class='add'>+            if (strcasecmp(arg, GF_LOGGER_GLUSTER_LOG) == 0)</div><div class='add'>+                cmd_args-&gt;logger = gf_logger_glusterlog;</div><div class='add'>+            else if (strcasecmp(arg, GF_LOGGER_SYSLOG) == 0)</div><div class='add'>+                cmd_args-&gt;logger = gf_logger_syslog;</div><div class='add'>+            else</div><div class='add'>+                argp_failure(state, -1, 0, "unknown logger %s", arg);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOG_FORMAT:</div><div class='del'>-                if (strcasecmp (arg, GF_LOG_FORMAT_NO_MSG_ID) == 0)</div><div class='del'>-                        cmd_args-&gt;log_format = gf_logformat_traditional;</div><div class='del'>-                else if (strcasecmp (arg, GF_LOG_FORMAT_WITH_MSG_ID) == 0)</div><div class='del'>-                        cmd_args-&gt;log_format = gf_logformat_withmsgid;</div><div class='del'>-                else</div><div class='del'>-                        argp_failure (state, -1, 0, "unknown log format %s",</div><div class='del'>-                                      arg);</div><div class='add'>+            if (strcasecmp(arg, GF_LOG_FORMAT_NO_MSG_ID) == 0)</div><div class='add'>+                cmd_args-&gt;log_format = gf_logformat_traditional;</div><div class='add'>+            else if (strcasecmp(arg, GF_LOG_FORMAT_WITH_MSG_ID) == 0)</div><div class='add'>+                cmd_args-&gt;log_format = gf_logformat_withmsgid;</div><div class='add'>+            else</div><div class='add'>+                argp_failure(state, -1, 0, "unknown log format %s", arg);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOG_BUF_SIZE:</div><div class='del'>-                if (gf_string2uint32 (arg, &amp;cmd_args-&gt;log_buf_size)) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "unknown log buf size option %s", arg);</div><div class='del'>-                } else if (cmd_args-&gt;log_buf_size &gt; GF_LOG_LRU_BUFSIZE_MAX) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "Invalid log buf size %s. "</div><div class='del'>-                                      "Valid range: ["</div><div class='del'>-                                      GF_LOG_LRU_BUFSIZE_MIN_STR","</div><div class='del'>-                                      GF_LOG_LRU_BUFSIZE_MAX_STR"]", arg);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            if (gf_string2uint32(arg, &amp;cmd_args-&gt;log_buf_size)) {</div><div class='add'>+                argp_failure(state, -1, 0, "unknown log buf size option %s",</div><div class='add'>+                             arg);</div><div class='add'>+            } else if (cmd_args-&gt;log_buf_size &gt; GF_LOG_LRU_BUFSIZE_MAX) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "Invalid log buf size %s. "</div><div class='add'>+                             "Valid range: [" GF_LOG_LRU_BUFSIZE_MIN_STR</div><div class='add'>+                             "," GF_LOG_LRU_BUFSIZE_MAX_STR "]",</div><div class='add'>+                             arg);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOG_FLUSH_TIMEOUT:</div><div class='del'>-                if (gf_string2uint32 (arg, &amp;cmd_args-&gt;log_flush_timeout)) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                "unknown log flush timeout option %s", arg);</div><div class='del'>-                } else if ((cmd_args-&gt;log_flush_timeout &lt;</div><div class='del'>-                            GF_LOG_FLUSH_TIMEOUT_MIN) ||</div><div class='del'>-                           (cmd_args-&gt;log_flush_timeout &gt;</div><div class='del'>-                            GF_LOG_FLUSH_TIMEOUT_MAX)) {</div><div class='del'>-                            argp_failure (state, -1, 0,</div><div class='del'>-                                          "Invalid log flush timeout %s. "</div><div class='del'>-                                          "Valid range: ["</div><div class='del'>-                                          GF_LOG_FLUSH_TIMEOUT_MIN_STR","</div><div class='del'>-                                          GF_LOG_FLUSH_TIMEOUT_MAX_STR"]", arg);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            if (gf_string2uint32(arg, &amp;cmd_args-&gt;log_flush_timeout)) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "unknown log flush timeout option %s", arg);</div><div class='add'>+            } else if ((cmd_args-&gt;log_flush_timeout &lt;</div><div class='add'>+                        GF_LOG_FLUSH_TIMEOUT_MIN) ||</div><div class='add'>+                       (cmd_args-&gt;log_flush_timeout &gt;</div><div class='add'>+                        GF_LOG_FLUSH_TIMEOUT_MAX)) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "Invalid log flush timeout %s. "</div><div class='add'>+                             "Valid range: [" GF_LOG_FLUSH_TIMEOUT_MIN_STR</div><div class='add'>+                             "," GF_LOG_FLUSH_TIMEOUT_MAX_STR "]",</div><div class='add'>+                             arg);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_SECURE_MGMT_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "yes";</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "yes";</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        cmd_args-&gt;secure_mgmt = b ? 1 : 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown secure-mgmt setting \"%s\"", arg);</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                cmd_args-&gt;secure_mgmt = b ? 1 : 0;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            argp_failure(state, -1, 0, "unknown secure-mgmt setting \"%s\"",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_LOCALTIME_LOGGING_KEY:</div><div class='del'>-                cmd_args-&gt;localtime_logging = 1;</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;localtime_logging = 1;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_PROCESS_NAME_KEY:</div><div class='del'>-                cmd_args-&gt;process_name = gf_strdup (arg);</div><div class='del'>-                break;</div><div class='add'>+            cmd_args-&gt;process_name = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_SUBDIR_MOUNT_KEY:</div><div class='del'>-                if (arg[0] != '/') {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "expect '/%s', provided just \"%s\"", arg, arg);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                cmd_args-&gt;subdir_mount = gf_strdup (arg);</div><div class='add'>+            if (arg[0] != '/') {</div><div class='add'>+                argp_failure(state, -1, 0, "expect '/%s', provided just \"%s\"",</div><div class='add'>+                             arg, arg);</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+            cmd_args-&gt;subdir_mount = gf_strdup(arg);</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_FUSE_EVENT_HISTORY_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "no";</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "no";</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        if (b) {</div><div class='del'>-                                cmd_args-&gt;event_history = "yes";</div><div class='del'>-                        } else {</div><div class='del'>-                                cmd_args-&gt;event_history = "no";</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        break;</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                if (b) {</div><div class='add'>+                    cmd_args-&gt;event_history = "yes";</div><div class='add'>+                } else {</div><div class='add'>+                    cmd_args-&gt;event_history = "no";</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown event-history setting \"%s\"", arg);</div><div class='ctx'>                 break;</div><div class='del'>-        case ARGP_READER_THREAD_COUNT_KEY:</div><div class='del'>-                if (gf_string2uint32 (arg, &amp;cmd_args-&gt;reader_thread_count)) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "unknown reader thread count option %s",</div><div class='del'>-                                      arg);</div><div class='del'>-                } else if ((cmd_args-&gt;reader_thread_count &lt; 1) ||</div><div class='del'>-                           (cmd_args-&gt;reader_thread_count &gt; 64)) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "Invalid reader thread count %s. "</div><div class='del'>-                                      "Valid range: [\"1, 64\"]", arg);</div><div class='del'>-                }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            argp_failure(state, -1, 0, "unknown event-history setting \"%s\"",</div><div class='add'>+                         arg);</div><div class='add'>+            break;</div><div class='add'>+        case ARGP_READER_THREAD_COUNT_KEY:</div><div class='add'>+            if (gf_string2uint32(arg, &amp;cmd_args-&gt;reader_thread_count)) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "unknown reader thread count option %s", arg);</div><div class='add'>+            } else if ((cmd_args-&gt;reader_thread_count &lt; 1) ||</div><div class='add'>+                       (cmd_args-&gt;reader_thread_count &gt; 64)) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "Invalid reader thread count %s. "</div><div class='add'>+                             "Valid range: [\"1, 64\"]",</div><div class='add'>+                             arg);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_KERNEL_WRITEBACK_CACHE_KEY:</div><div class='del'>-                if (!arg)</div><div class='del'>-                        arg = "yes";</div><div class='add'>+            if (!arg)</div><div class='add'>+                arg = "yes";</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (arg, &amp;b) == 0) {</div><div class='del'>-                        cmd_args-&gt;kernel_writeback_cache = b;</div><div class='del'>-</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                argp_failure (state, -1, 0,</div><div class='del'>-                              "unknown kernel writeback cache setting \"%s\"", arg);</div><div class='del'>-                break;</div><div class='del'>-        case ARGP_ATTR_TIMES_GRANULARITY_KEY:</div><div class='del'>-                if (gf_string2uint32 (arg, &amp;cmd_args-&gt;attr_times_granularity)) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "unknown attribute times granularity option %s",</div><div class='del'>-                                      arg);</div><div class='del'>-                } else if (cmd_args-&gt;attr_times_granularity &gt; 1000000000) {</div><div class='del'>-                        argp_failure (state, -1, 0,</div><div class='del'>-                                      "Invalid attribute times granularity value %s. "</div><div class='del'>-                                      "Valid range: [\"0, 1000000000\"]", arg);</div><div class='del'>-                }</div><div class='add'>+            if (gf_string2boolean(arg, &amp;b) == 0) {</div><div class='add'>+                cmd_args-&gt;kernel_writeback_cache = b;</div><div class='ctx'> </div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-	}</div><div class='del'>-        return 0;</div><div class='add'>+            argp_failure(state, -1, 0,</div><div class='add'>+                         "unknown kernel writeback cache setting \"%s\"", arg);</div><div class='add'>+            break;</div><div class='add'>+        case ARGP_ATTR_TIMES_GRANULARITY_KEY:</div><div class='add'>+            if (gf_string2uint32(arg, &amp;cmd_args-&gt;attr_times_granularity)) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "unknown attribute times granularity option %s",</div><div class='add'>+                             arg);</div><div class='add'>+            } else if (cmd_args-&gt;attr_times_granularity &gt; 1000000000) {</div><div class='add'>+                argp_failure(state, -1, 0,</div><div class='add'>+                             "Invalid attribute times granularity value %s. "</div><div class='add'>+                             "Valid range: [\"0, 1000000000\"]",</div><div class='add'>+                             arg);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-should_call_fini (glusterfs_ctx_t *ctx, xlator_t *trav)</div><div class='add'>+should_call_fini(glusterfs_ctx_t *ctx, xlator_t *trav)</div><div class='ctx'> {</div><div class='del'>-        /* There's nothing to call, so the other checks don't matter. */</div><div class='del'>-        if (!trav-&gt;fini) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    /* There's nothing to call, so the other checks don't matter. */</div><div class='add'>+    if (!trav-&gt;fini) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This preserves previous behavior in glusterd. */</div><div class='del'>-        if (ctx-&gt;process_mode == GF_GLUSTERD_PROCESS) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    /* This preserves previous behavior in glusterd. */</div><div class='add'>+    if (ctx-&gt;process_mode == GF_GLUSTERD_PROCESS) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is the only one known to be safe in glusterfsd. */</div><div class='del'>-        if (!strcmp(trav-&gt;type,"experimental/fdl")) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    /* This is the only one known to be safe in glusterfsd. */</div><div class='add'>+    if (!strcmp(trav-&gt;type, "experimental/fdl")) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cleanup_and_exit (int signum)</div><div class='add'>+cleanup_and_exit(int signum)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx      = NULL;</div><div class='del'>-        xlator_t        *trav     = NULL;</div><div class='del'>-        xlator_t        *top;</div><div class='del'>-        xlator_t        *victim;</div><div class='del'>-        xlator_list_t   **trav_p;</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /* To take or not to take the mutex here and in the other</div><div class='del'>-         * signal handler - gf_print_trace() - is the big question here.</div><div class='del'>-         *</div><div class='del'>-         * Taking mutex in signal handler would mean that if the process</div><div class='del'>-         * receives a fatal signal while another thread is holding</div><div class='del'>-         * ctx-&gt;log.log_buf_lock to perhaps log a message in _gf_msg_internal(),</div><div class='del'>-         * the offending thread hangs on the mutex lock forever without letting</div><div class='del'>-         * the process exit.</div><div class='del'>-         *</div><div class='del'>-         * On the other hand. not taking the mutex in signal handler would cause</div><div class='del'>-         * it to modify the lru_list of buffered log messages in a racy manner,</div><div class='del'>-         * corrupt the list and potentially give rise to an unending</div><div class='del'>-         * cascade of SIGSEGVs and other re-entrancy issues.</div><div class='del'>-         */</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    xlator_t *top;</div><div class='add'>+    xlator_t *victim;</div><div class='add'>+    xlator_list_t **trav_p;</div><div class='ctx'> </div><div class='del'>-        gf_log_disable_suppression_before_exit (ctx);</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='ctx'> </div><div class='del'>-        gf_msg_callingfn ("", GF_LOG_WARNING, 0, glusterfsd_msg_32,</div><div class='del'>-                          "received signum (%d), shutting down", signum);</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;cleanup_started)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;cleanup_started = 1;</div><div class='del'>-</div><div class='del'>-        /* signout should be sent to all the bricks in case brick mux is enabled</div><div class='del'>-         * and multiple brick instances are attached to this process</div><div class='del'>-         */</div><div class='del'>-        if (ctx-&gt;active) {</div><div class='del'>-                top = ctx-&gt;active-&gt;first;</div><div class='del'>-                for (trav_p = &amp;top-&gt;children; *trav_p;</div><div class='del'>-                     trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='del'>-                        victim = (*trav_p)-&gt;xlator;</div><div class='del'>-                        rpc_clnt_mgmt_pmap_signout (ctx, victim-&gt;name);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                rpc_clnt_mgmt_pmap_signout (ctx, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        /* below part is a racy code where the rpcsvc object is freed.</div><div class='del'>-         * But in another thread (epoll thread), upon poll error in the</div><div class='del'>-         * socket the transports are cleaned up where again rpcsvc object</div><div class='del'>-         * is accessed (which is already freed by the below function).</div><div class='del'>-         * Since the process is about to be killed don't execute the function</div><div class='del'>-         * below.</div><div class='del'>-         */</div><div class='del'>-        /* if (ctx-&gt;listener) { */</div><div class='del'>-        /*         (void) glusterfs_listener_stop (ctx); */</div><div class='del'>-        /* } */</div><div class='del'>-</div><div class='del'>-        /* Call fini() of FUSE xlator first:</div><div class='del'>-         * so there are no more requests coming and</div><div class='del'>-         * 'umount' of mount point is done properly */</div><div class='del'>-        trav = ctx-&gt;master;</div><div class='del'>-        if (trav &amp;&amp; trav-&gt;fini) {</div><div class='del'>-                THIS = trav;</div><div class='del'>-                trav-&gt;fini (trav);</div><div class='del'>-        }</div><div class='add'>+    /* To take or not to take the mutex here and in the other</div><div class='add'>+     * signal handler - gf_print_trace() - is the big question here.</div><div class='add'>+     *</div><div class='add'>+     * Taking mutex in signal handler would mean that if the process</div><div class='add'>+     * receives a fatal signal while another thread is holding</div><div class='add'>+     * ctx-&gt;log.log_buf_lock to perhaps log a message in _gf_msg_internal(),</div><div class='add'>+     * the offending thread hangs on the mutex lock forever without letting</div><div class='add'>+     * the process exit.</div><div class='add'>+     *</div><div class='add'>+     * On the other hand. not taking the mutex in signal handler would cause</div><div class='add'>+     * it to modify the lru_list of buffered log messages in a racy manner,</div><div class='add'>+     * corrupt the list and potentially give rise to an unending</div><div class='add'>+     * cascade of SIGSEGVs and other re-entrancy issues.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    gf_log_disable_suppression_before_exit(ctx);</div><div class='add'>+</div><div class='add'>+    gf_msg_callingfn("", GF_LOG_WARNING, 0, glusterfsd_msg_32,</div><div class='add'>+                     "received signum (%d), shutting down", signum);</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;cleanup_started)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        glusterfs_pidfile_cleanup (ctx);</div><div class='add'>+    ctx-&gt;cleanup_started = 1;</div><div class='add'>+</div><div class='add'>+    /* signout should be sent to all the bricks in case brick mux is enabled</div><div class='add'>+     * and multiple brick instances are attached to this process</div><div class='add'>+     */</div><div class='add'>+    if (ctx-&gt;active) {</div><div class='add'>+        top = ctx-&gt;active-&gt;first;</div><div class='add'>+        for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='add'>+            victim = (*trav_p)-&gt;xlator;</div><div class='add'>+            rpc_clnt_mgmt_pmap_signout(ctx, victim-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        rpc_clnt_mgmt_pmap_signout(ctx, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* below part is a racy code where the rpcsvc object is freed.</div><div class='add'>+     * But in another thread (epoll thread), upon poll error in the</div><div class='add'>+     * socket the transports are cleaned up where again rpcsvc object</div><div class='add'>+     * is accessed (which is already freed by the below function).</div><div class='add'>+     * Since the process is about to be killed don't execute the function</div><div class='add'>+     * below.</div><div class='add'>+     */</div><div class='add'>+    /* if (ctx-&gt;listener) { */</div><div class='add'>+    /*         (void) glusterfs_listener_stop (ctx); */</div><div class='add'>+    /* } */</div><div class='add'>+</div><div class='add'>+    /* Call fini() of FUSE xlator first:</div><div class='add'>+     * so there are no more requests coming and</div><div class='add'>+     * 'umount' of mount point is done properly */</div><div class='add'>+    trav = ctx-&gt;master;</div><div class='add'>+    if (trav &amp;&amp; trav-&gt;fini) {</div><div class='add'>+        THIS = trav;</div><div class='add'>+        trav-&gt;fini(trav);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glusterfs_pidfile_cleanup(ctx);</div><div class='ctx'> </div><div class='ctx'> #if 0</div><div class='ctx'>         /* TODO: Properly do cleanup_and_exit(), with synchronization */</div><div class='hunk'>@@ -1569,303 +1529,304 @@ cleanup_and_exit (int signum)</div><div class='ctx'>         }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        trav = NULL;</div><div class='add'>+    trav = NULL;</div><div class='ctx'> </div><div class='del'>-        /* NOTE: Only the least significant 8 bits i.e (signum &amp; 255)</div><div class='del'>-           will be available to parent process on calling exit() */</div><div class='del'>-        exit(abs(signum));</div><div class='add'>+    /* NOTE: Only the least significant 8 bits i.e (signum &amp; 255)</div><div class='add'>+       will be available to parent process on calling exit() */</div><div class='add'>+    exit(abs(signum));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-reincarnate (int signum)</div><div class='add'>+reincarnate(int signum)</div><div class='ctx'> {</div><div class='del'>-        int                 ret = 0;</div><div class='del'>-        glusterfs_ctx_t    *ctx = NULL;</div><div class='del'>-        cmd_args_t         *cmd_args = NULL;</div><div class='del'>-</div><div class='del'>-        ctx = glusterfsd_ctx;</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;volfile_server) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_INFO, 0, glusterfsd_msg_11,</div><div class='del'>-                        "Fetching the volume file from server...");</div><div class='del'>-                ret = glusterfs_volfile_fetch (ctx);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug ("glusterfsd", 0,</div><div class='del'>-                              "Not reloading volume specification file"</div><div class='del'>-                              " on SIGHUP");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Also, SIGHUP should do logrotate */</div><div class='del'>-        gf_log_logrotate (1);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_12,</div><div class='del'>-                        "volume initialization failed.");</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = glusterfsd_ctx;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_INFO, 0, glusterfsd_msg_11,</div><div class='add'>+               "Fetching the volume file from server...");</div><div class='add'>+        ret = glusterfs_volfile_fetch(ctx);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug("glusterfsd", 0,</div><div class='add'>+                     "Not reloading volume specification file"</div><div class='add'>+                     " on SIGHUP");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Also, SIGHUP should do logrotate */</div><div class='add'>+    gf_log_logrotate(1);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_12,</div><div class='add'>+               "volume initialization failed.");</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-emancipate (glusterfs_ctx_t *ctx, int ret)</div><div class='add'>+emancipate(glusterfs_ctx_t *ctx, int ret)</div><div class='ctx'> {</div><div class='del'>-        /* break free from the parent */</div><div class='del'>-        if (ctx-&gt;daemon_pipe[1] != -1) {</div><div class='del'>-                sys_write (ctx-&gt;daemon_pipe[1], (void *) &amp;ret, sizeof (ret));</div><div class='del'>-                sys_close (ctx-&gt;daemon_pipe[1]);</div><div class='del'>-                ctx-&gt;daemon_pipe[1] = -1;</div><div class='del'>-        }</div><div class='add'>+    /* break free from the parent */</div><div class='add'>+    if (ctx-&gt;daemon_pipe[1] != -1) {</div><div class='add'>+        sys_write(ctx-&gt;daemon_pipe[1], (void *)&amp;ret, sizeof(ret));</div><div class='add'>+        sys_close(ctx-&gt;daemon_pipe[1]);</div><div class='add'>+        ctx-&gt;daemon_pipe[1] = -1;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint8_t</div><div class='del'>-gf_get_process_mode (char *exec_name)</div><div class='add'>+gf_get_process_mode(char *exec_name)</div><div class='ctx'> {</div><div class='del'>-        char *dup_execname = NULL, *base = NULL;</div><div class='del'>-        uint8_t ret = 0;</div><div class='add'>+    char *dup_execname = NULL, *base = NULL;</div><div class='add'>+    uint8_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        dup_execname = gf_strdup (exec_name);</div><div class='del'>-        base = basename (dup_execname);</div><div class='add'>+    dup_execname = gf_strdup(exec_name);</div><div class='add'>+    base = basename(dup_execname);</div><div class='ctx'> </div><div class='del'>-        if (!strncmp (base, "glusterfsd", 10)) {</div><div class='del'>-                ret = GF_SERVER_PROCESS;</div><div class='del'>-        } else if (!strncmp (base, "glusterd", 8)) {</div><div class='del'>-                ret = GF_GLUSTERD_PROCESS;</div><div class='del'>-        } else {</div><div class='del'>-                ret = GF_CLIENT_PROCESS;</div><div class='del'>-        }</div><div class='add'>+    if (!strncmp(base, "glusterfsd", 10)) {</div><div class='add'>+        ret = GF_SERVER_PROCESS;</div><div class='add'>+    } else if (!strncmp(base, "glusterd", 8)) {</div><div class='add'>+        ret = GF_GLUSTERD_PROCESS;</div><div class='add'>+    } else {</div><div class='add'>+        ret = GF_CLIENT_PROCESS;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (dup_execname);</div><div class='add'>+    GF_FREE(dup_execname);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_ctx_defaults_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t          *cmd_args = NULL;</div><div class='del'>-        struct rlimit        lim      = {0, };</div><div class='del'>-        int                  ret      = -1;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (THIS, gfd_mt_end);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg(THIS-&gt;name, GF_LOG_CRITICAL, 0, glusterfsd_msg_34,</div><div class='del'>-                       "memory accounting init failed.");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    struct rlimit lim = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* reset ret to -1 so that we don't need to explicitly</div><div class='del'>-         * set it in all error paths before "goto err"</div><div class='del'>-         */</div><div class='del'>-        ret = -1;</div><div class='del'>-</div><div class='del'>-        /* monitoring should be enabled by default */</div><div class='del'>-        ctx-&gt;measure_latency = true;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;process_uuid = generate_glusterfs_ctx_id ();</div><div class='del'>-        if (!ctx-&gt;process_uuid) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_13,</div><div class='del'>-                        "ERROR: glusterfs uuid generation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;page_size  = 128 * GF_UNIT_KB;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;iobuf_pool = iobuf_pool_new ();</div><div class='del'>-        if (!ctx-&gt;iobuf_pool) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='del'>-                        "ERROR: glusterfs iobuf pool creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;event_pool = event_pool_new (DEFAULT_EVENT_POOL_SIZE,</div><div class='del'>-                                          STARTING_EVENT_THREADS);</div><div class='del'>-        if (!ctx-&gt;event_pool) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='del'>-                        "ERROR: glusterfs event pool creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;pool = GF_CALLOC (1, sizeof (call_pool_t), gfd_mt_call_pool_t);</div><div class='del'>-        if (!ctx-&gt;pool) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='del'>-                        "ERROR: glusterfs call pool creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;pool-&gt;all_frames);</div><div class='del'>-        LOCK_INIT (&amp;ctx-&gt;pool-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* frame_mem_pool size 112 * 4k */</div><div class='del'>-        ctx-&gt;pool-&gt;frame_mem_pool = mem_pool_new (call_frame_t, 4096);</div><div class='del'>-        if (!ctx-&gt;pool-&gt;frame_mem_pool) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='del'>-                        "ERROR: glusterfs frame pool creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* stack_mem_pool size 256 * 1024 */</div><div class='del'>-        ctx-&gt;pool-&gt;stack_mem_pool = mem_pool_new (call_stack_t, 1024);</div><div class='del'>-        if (!ctx-&gt;pool-&gt;stack_mem_pool) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='del'>-                        "ERROR: glusterfs stack pool creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;stub_mem_pool = mem_pool_new (call_stub_t, 1024);</div><div class='del'>-        if (!ctx-&gt;stub_mem_pool) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='del'>-                        "ERROR: glusterfs stub pool creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;dict_pool = mem_pool_new (dict_t, GF_MEMPOOL_COUNT_OF_DICT_T);</div><div class='del'>-        if (!ctx-&gt;dict_pool)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;dict_pair_pool = mem_pool_new (data_pair_t,</div><div class='del'>-                                            GF_MEMPOOL_COUNT_OF_DATA_PAIR_T);</div><div class='del'>-        if (!ctx-&gt;dict_pair_pool)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;dict_data_pool = mem_pool_new (data_t, GF_MEMPOOL_COUNT_OF_DATA_T);</div><div class='del'>-        if (!ctx-&gt;dict_data_pool)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;logbuf_pool = mem_pool_new (log_buf_t,</div><div class='del'>-                                         GF_MEMPOOL_COUNT_OF_LRU_BUF_T);</div><div class='del'>-        if (!ctx-&gt;logbuf_pool)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_init (&amp;ctx-&gt;notify_lock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;ctx-&gt;notify_cond, NULL);</div><div class='del'>-</div><div class='del'>-        ctx-&gt;clienttable = gf_clienttable_alloc();</div><div class='del'>-        if (!ctx-&gt;clienttable)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        /* parsing command line arguments */</div><div class='del'>-        cmd_args-&gt;log_level = DEFAULT_LOG_LEVEL;</div><div class='del'>-        cmd_args-&gt;logger    = gf_logger_glusterlog;</div><div class='del'>-        cmd_args-&gt;log_format = gf_logformat_withmsgid;</div><div class='del'>-        cmd_args-&gt;log_buf_size = GF_LOG_LRU_BUFSIZE_DEFAULT;</div><div class='del'>-        cmd_args-&gt;log_flush_timeout = GF_LOG_FLUSH_TIMEOUT_DEFAULT;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        cmd_args-&gt;mac_compat = GF_OPTION_DISABLE;</div><div class='add'>+    ret = xlator_mem_acct_init(THIS, gfd_mt_end);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_CRITICAL, 0, glusterfsd_msg_34,</div><div class='add'>+               "memory accounting init failed.");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* reset ret to -1 so that we don't need to explicitly</div><div class='add'>+     * set it in all error paths before "goto err"</div><div class='add'>+     */</div><div class='add'>+    ret = -1;</div><div class='add'>+</div><div class='add'>+    /* monitoring should be enabled by default */</div><div class='add'>+    ctx-&gt;measure_latency = true;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;process_uuid = generate_glusterfs_ctx_id();</div><div class='add'>+    if (!ctx-&gt;process_uuid) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_13,</div><div class='add'>+               "ERROR: glusterfs uuid generation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;page_size = 128 * GF_UNIT_KB;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;iobuf_pool = iobuf_pool_new();</div><div class='add'>+    if (!ctx-&gt;iobuf_pool) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='add'>+               "ERROR: glusterfs iobuf pool creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;event_pool = event_pool_new(DEFAULT_EVENT_POOL_SIZE,</div><div class='add'>+                                     STARTING_EVENT_THREADS);</div><div class='add'>+    if (!ctx-&gt;event_pool) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='add'>+               "ERROR: glusterfs event pool creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;pool = GF_CALLOC(1, sizeof(call_pool_t), gfd_mt_call_pool_t);</div><div class='add'>+    if (!ctx-&gt;pool) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='add'>+               "ERROR: glusterfs call pool creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;pool-&gt;all_frames);</div><div class='add'>+    LOCK_INIT(&amp;ctx-&gt;pool-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* frame_mem_pool size 112 * 4k */</div><div class='add'>+    ctx-&gt;pool-&gt;frame_mem_pool = mem_pool_new(call_frame_t, 4096);</div><div class='add'>+    if (!ctx-&gt;pool-&gt;frame_mem_pool) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='add'>+               "ERROR: glusterfs frame pool creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* stack_mem_pool size 256 * 1024 */</div><div class='add'>+    ctx-&gt;pool-&gt;stack_mem_pool = mem_pool_new(call_stack_t, 1024);</div><div class='add'>+    if (!ctx-&gt;pool-&gt;stack_mem_pool) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='add'>+               "ERROR: glusterfs stack pool creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;stub_mem_pool = mem_pool_new(call_stub_t, 1024);</div><div class='add'>+    if (!ctx-&gt;stub_mem_pool) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, glusterfsd_msg_14,</div><div class='add'>+               "ERROR: glusterfs stub pool creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;dict_pool = mem_pool_new(dict_t, GF_MEMPOOL_COUNT_OF_DICT_T);</div><div class='add'>+    if (!ctx-&gt;dict_pool)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;dict_pair_pool = mem_pool_new(data_pair_t,</div><div class='add'>+                                       GF_MEMPOOL_COUNT_OF_DATA_PAIR_T);</div><div class='add'>+    if (!ctx-&gt;dict_pair_pool)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;dict_data_pool = mem_pool_new(data_t, GF_MEMPOOL_COUNT_OF_DATA_T);</div><div class='add'>+    if (!ctx-&gt;dict_data_pool)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;logbuf_pool = mem_pool_new(log_buf_t, GF_MEMPOOL_COUNT_OF_LRU_BUF_T);</div><div class='add'>+    if (!ctx-&gt;logbuf_pool)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_init(&amp;ctx-&gt;notify_lock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;ctx-&gt;notify_cond, NULL);</div><div class='add'>+</div><div class='add'>+    ctx-&gt;clienttable = gf_clienttable_alloc();</div><div class='add'>+    if (!ctx-&gt;clienttable)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    /* parsing command line arguments */</div><div class='add'>+    cmd_args-&gt;log_level = DEFAULT_LOG_LEVEL;</div><div class='add'>+    cmd_args-&gt;logger = gf_logger_glusterlog;</div><div class='add'>+    cmd_args-&gt;log_format = gf_logformat_withmsgid;</div><div class='add'>+    cmd_args-&gt;log_buf_size = GF_LOG_LRU_BUFSIZE_DEFAULT;</div><div class='add'>+    cmd_args-&gt;log_flush_timeout = GF_LOG_FLUSH_TIMEOUT_DEFAULT;</div><div class='add'>+</div><div class='add'>+    cmd_args-&gt;mac_compat = GF_OPTION_DISABLE;</div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        /* On Darwin machines, O_APPEND is not handled,</div><div class='del'>-         * which may corrupt the data</div><div class='del'>-         */</div><div class='del'>-        cmd_args-&gt;fuse_direct_io_mode = GF_OPTION_DISABLE;</div><div class='add'>+    /* On Darwin machines, O_APPEND is not handled,</div><div class='add'>+     * which may corrupt the data</div><div class='add'>+     */</div><div class='add'>+    cmd_args-&gt;fuse_direct_io_mode = GF_OPTION_DISABLE;</div><div class='ctx'> #else</div><div class='del'>-        cmd_args-&gt;fuse_direct_io_mode = GF_OPTION_DEFERRED;</div><div class='add'>+    cmd_args-&gt;fuse_direct_io_mode = GF_OPTION_DEFERRED;</div><div class='ctx'> #endif</div><div class='del'>-        cmd_args-&gt;fuse_attribute_timeout = -1;</div><div class='del'>-        cmd_args-&gt;fuse_entry_timeout = -1;</div><div class='del'>-	cmd_args-&gt;fopen_keep_cache = GF_OPTION_DEFERRED;</div><div class='del'>-        cmd_args-&gt;kernel_writeback_cache = GF_OPTION_DEFERRED;</div><div class='add'>+    cmd_args-&gt;fuse_attribute_timeout = -1;</div><div class='add'>+    cmd_args-&gt;fuse_entry_timeout = -1;</div><div class='add'>+    cmd_args-&gt;fopen_keep_cache = GF_OPTION_DEFERRED;</div><div class='add'>+    cmd_args-&gt;kernel_writeback_cache = GF_OPTION_DEFERRED;</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;mem_acct_enable)</div><div class='del'>-                cmd_args-&gt;mem_acct = 1;</div><div class='add'>+    if (ctx-&gt;mem_acct_enable)</div><div class='add'>+        cmd_args-&gt;mem_acct = 1;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;cmd_args-&gt;xlator_options);</div><div class='del'>-        INIT_LIST_HEAD (&amp;cmd_args-&gt;volfile_servers);</div><div class='add'>+    INIT_LIST_HEAD(&amp;cmd_args-&gt;xlator_options);</div><div class='add'>+    INIT_LIST_HEAD(&amp;cmd_args-&gt;volfile_servers);</div><div class='ctx'> </div><div class='del'>-        lim.rlim_cur = RLIM_INFINITY;</div><div class='del'>-        lim.rlim_max = RLIM_INFINITY;</div><div class='del'>-        setrlimit (RLIMIT_CORE, &amp;lim);</div><div class='add'>+    lim.rlim_cur = RLIM_INFINITY;</div><div class='add'>+    lim.rlim_max = RLIM_INFINITY;</div><div class='add'>+    setrlimit(RLIMIT_CORE, &amp;lim);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                if (ctx-&gt;pool) {</div><div class='del'>-                        mem_pool_destroy (ctx-&gt;pool-&gt;frame_mem_pool);</div><div class='del'>-                        mem_pool_destroy (ctx-&gt;pool-&gt;stack_mem_pool);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (ctx-&gt;pool);</div><div class='del'>-                mem_pool_destroy (ctx-&gt;stub_mem_pool);</div><div class='del'>-                mem_pool_destroy (ctx-&gt;dict_pool);</div><div class='del'>-                mem_pool_destroy (ctx-&gt;dict_data_pool);</div><div class='del'>-                mem_pool_destroy (ctx-&gt;dict_pair_pool);</div><div class='del'>-                mem_pool_destroy (ctx-&gt;logbuf_pool);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (ctx-&gt;pool) {</div><div class='add'>+            mem_pool_destroy(ctx-&gt;pool-&gt;frame_mem_pool);</div><div class='add'>+            mem_pool_destroy(ctx-&gt;pool-&gt;stack_mem_pool);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(ctx-&gt;pool);</div><div class='add'>+        mem_pool_destroy(ctx-&gt;stub_mem_pool);</div><div class='add'>+        mem_pool_destroy(ctx-&gt;dict_pool);</div><div class='add'>+        mem_pool_destroy(ctx-&gt;dict_data_pool);</div><div class='add'>+        mem_pool_destroy(ctx-&gt;dict_pair_pool);</div><div class='add'>+        mem_pool_destroy(ctx-&gt;logbuf_pool);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-logging_init (glusterfs_ctx_t *ctx, const char *progpath)</div><div class='add'>+logging_init(glusterfs_ctx_t *ctx, const char *progpath)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t *cmd_args = NULL;</div><div class='del'>-        int         ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;log_file == NULL) {</div><div class='del'>-                ret = gf_set_log_file_path (cmd_args, ctx);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        fprintf (stderr, "ERROR: failed to set the log file "</div><div class='del'>-                                         "path\n");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;log_file == NULL) {</div><div class='add'>+        ret = gf_set_log_file_path(cmd_args, ctx);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: failed to set the log file "</div><div class='add'>+                    "path\n");</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;log_ident == NULL) {</div><div class='del'>-                ret = gf_set_log_ident (cmd_args);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        fprintf (stderr, "ERROR: failed to set the log "</div><div class='del'>-                                         "identity\n");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+    if (cmd_args-&gt;log_ident == NULL) {</div><div class='add'>+        ret = gf_set_log_ident(cmd_args);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: failed to set the log "</div><div class='add'>+                    "identity\n");</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* finish log set parameters before init */</div><div class='del'>-        gf_log_set_loglevel (ctx, cmd_args-&gt;log_level);</div><div class='add'>+    /* finish log set parameters before init */</div><div class='add'>+    gf_log_set_loglevel(ctx, cmd_args-&gt;log_level);</div><div class='ctx'> </div><div class='del'>-        gf_log_set_localtime (cmd_args-&gt;localtime_logging);</div><div class='add'>+    gf_log_set_localtime(cmd_args-&gt;localtime_logging);</div><div class='ctx'> </div><div class='del'>-        gf_log_set_logger (cmd_args-&gt;logger);</div><div class='add'>+    gf_log_set_logger(cmd_args-&gt;logger);</div><div class='ctx'> </div><div class='del'>-        gf_log_set_logformat (cmd_args-&gt;log_format);</div><div class='add'>+    gf_log_set_logformat(cmd_args-&gt;log_format);</div><div class='ctx'> </div><div class='del'>-        gf_log_set_log_buf_size (cmd_args-&gt;log_buf_size);</div><div class='add'>+    gf_log_set_log_buf_size(cmd_args-&gt;log_buf_size);</div><div class='ctx'> </div><div class='del'>-        gf_log_set_log_flush_timeout (cmd_args-&gt;log_flush_timeout);</div><div class='add'>+    gf_log_set_log_flush_timeout(cmd_args-&gt;log_flush_timeout);</div><div class='ctx'> </div><div class='del'>-        if (gf_log_init (ctx, cmd_args-&gt;log_file, cmd_args-&gt;log_ident) == -1) {</div><div class='del'>-                fprintf (stderr, "ERROR: failed to open logfile %s\n",</div><div class='del'>-                         cmd_args-&gt;log_file);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (gf_log_init(ctx, cmd_args-&gt;log_file, cmd_args-&gt;log_ident) == -1) {</div><div class='add'>+        fprintf(stderr, "ERROR: failed to open logfile %s\n",</div><div class='add'>+                cmd_args-&gt;log_file);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* At this point, all the logging related parameters are initialised</div><div class='del'>-         * except for the log flush timer, which will be injected post fork(2)</div><div class='del'>-         * in daemonize() . During this time, any log message that is logged</div><div class='del'>-         * will be kept buffered. And if the list that holds these messages</div><div class='del'>-         * overflows, then the same lru policy is used to drive out the least</div><div class='del'>-         * recently used message and displace it with the message just logged.</div><div class='del'>-         */</div><div class='add'>+    /* At this point, all the logging related parameters are initialised</div><div class='add'>+     * except for the log flush timer, which will be injected post fork(2)</div><div class='add'>+     * in daemonize() . During this time, any log message that is logged</div><div class='add'>+     * will be kept buffered. And if the list that holds these messages</div><div class='add'>+     * overflows, then the same lru policy is used to drive out the least</div><div class='add'>+     * recently used message and displace it with the message just logged.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_check_and_set_mem_acct (int argc, char *argv[])</div><div class='add'>+gf_check_and_set_mem_acct(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; argc; i++) {</div><div class='del'>-                if (strcmp (argv[i], "--no-mem-accounting") == 0) {</div><div class='del'>-			gf_global_mem_acct_enable_set (0);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; argc; i++) {</div><div class='add'>+        if (strcmp(argv[i], "--no-mem-accounting") == 0) {</div><div class='add'>+            gf_global_mem_acct_enable_set(0);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1883,87 +1844,85 @@ gf_check_and_set_mem_acct (int argc, char *argv[])</div><div class='ctx'>  * error messages. Hence there are different return values.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-print_exports_file (const char *exports_file)</div><div class='add'>+print_exports_file(const char *exports_file)</div><div class='ctx'> {</div><div class='del'>-        void                   *libhandle = NULL;</div><div class='del'>-        char                   *libpathfull = NULL;</div><div class='del'>-        struct exports_file    *file = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-</div><div class='del'>-        int  (*exp_file_parse)(const char *filepath,</div><div class='del'>-                               struct exports_file **expfile,</div><div class='del'>-                               struct mount3_state *ms) = NULL;</div><div class='del'>-        void (*exp_file_print)(const struct exports_file *file) = NULL;</div><div class='del'>-        void (*exp_file_deinit)(struct exports_file *ptr) = NULL;</div><div class='del'>-</div><div class='del'>-        /* XLATORDIR passed through a -D flag to GCC */</div><div class='del'>-        ret = gf_asprintf (&amp;libpathfull, "%s/%s/server.so", XLATORDIR,</div><div class='del'>-                           "nfs");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL, "asprintf () failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Load up the library */</div><div class='del'>-        libhandle = dlopen (libpathfull, RTLD_NOW);</div><div class='del'>-        if (!libhandle) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error loading NFS server library : "</div><div class='del'>-                        "%s\n", dlerror ());</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Load up the function */</div><div class='del'>-        exp_file_parse = dlsym (libhandle, "exp_file_parse");</div><div class='del'>-        if (!exp_file_parse) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error finding function exp_file_parse "</div><div class='del'>-                        "in symbol.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Parse the file */</div><div class='del'>-        ret = exp_file_parse (exports_file, &amp;file, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = 1;        /* This means we failed to parse */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Load up the function */</div><div class='del'>-        exp_file_print = dlsym (libhandle, "exp_file_print");</div><div class='del'>-        if (!exp_file_print) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error finding function exp_file_print in symbol.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    void *libhandle = NULL;</div><div class='add'>+    char *libpathfull = NULL;</div><div class='add'>+    struct exports_file *file = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    int (*exp_file_parse)(const char *filepath, struct exports_file **expfile,</div><div class='add'>+                          struct mount3_state *ms) = NULL;</div><div class='add'>+    void (*exp_file_print)(const struct exports_file *file) = NULL;</div><div class='add'>+    void (*exp_file_deinit)(struct exports_file * ptr) = NULL;</div><div class='add'>+</div><div class='add'>+    /* XLATORDIR passed through a -D flag to GCC */</div><div class='add'>+    ret = gf_asprintf(&amp;libpathfull, "%s/%s/server.so", XLATORDIR, "nfs");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL, "asprintf () failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Load up the library */</div><div class='add'>+    libhandle = dlopen(libpathfull, RTLD_NOW);</div><div class='add'>+    if (!libhandle) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error loading NFS server library : "</div><div class='add'>+               "%s\n",</div><div class='add'>+               dlerror());</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Load up the function */</div><div class='add'>+    exp_file_parse = dlsym(libhandle, "exp_file_parse");</div><div class='add'>+    if (!exp_file_parse) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error finding function exp_file_parse "</div><div class='add'>+               "in symbol.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Parse the file */</div><div class='add'>+    ret = exp_file_parse(exports_file, &amp;file, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = 1; /* This means we failed to parse */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Load up the function */</div><div class='add'>+    exp_file_print = dlsym(libhandle, "exp_file_print");</div><div class='add'>+    if (!exp_file_print) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error finding function exp_file_print in symbol.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Print it out to screen */</div><div class='del'>-        exp_file_print (file);</div><div class='add'>+    /* Print it out to screen */</div><div class='add'>+    exp_file_print(file);</div><div class='ctx'> </div><div class='del'>-        /* Load up the function */</div><div class='del'>-        exp_file_deinit = dlsym (libhandle, "exp_file_deinit");</div><div class='del'>-        if (!exp_file_deinit) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error finding function exp_file_deinit in lib.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Load up the function */</div><div class='add'>+    exp_file_deinit = dlsym(libhandle, "exp_file_deinit");</div><div class='add'>+    if (!exp_file_deinit) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error finding function exp_file_deinit in lib.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Free the file */</div><div class='del'>-        exp_file_deinit (file);</div><div class='add'>+    /* Free the file */</div><div class='add'>+    exp_file_deinit(file);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (libhandle)</div><div class='del'>-                dlclose(libhandle);</div><div class='del'>-        GF_FREE (libpathfull);</div><div class='del'>-        return ret;</div><div class='add'>+    if (libhandle)</div><div class='add'>+        dlclose(libhandle);</div><div class='add'>+    GF_FREE(libpathfull);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * print_netgroups_file - Print out &amp; verify the syntax</div><div class='ctx'>  *                        of the netgroups file specified</div><div class='hunk'>@@ -1981,821 +1940,804 @@ out:</div><div class='ctx'>  * we want to print out a different error messages based on the ret value.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-print_netgroups_file (const char *netgroups_file)</div><div class='add'>+print_netgroups_file(const char *netgroups_file)</div><div class='ctx'> {</div><div class='del'>-        void                   *libhandle = NULL;</div><div class='del'>-        char                   *libpathfull = NULL;</div><div class='del'>-        struct netgroups_file  *file = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-</div><div class='del'>-        struct netgroups_file  *(*ng_file_parse)(const char *file_path) = NULL;</div><div class='del'>-        void         (*ng_file_print)(const struct netgroups_file *file) = NULL;</div><div class='del'>-        void         (*ng_file_deinit)(struct netgroups_file *ptr) = NULL;</div><div class='del'>-</div><div class='del'>-        /* XLATORDIR passed through a -D flag to GCC */</div><div class='del'>-        ret = gf_asprintf (&amp;libpathfull, "%s/%s/server.so", XLATORDIR,</div><div class='del'>-                        "nfs");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL, "asprintf () failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* Load up the library */</div><div class='del'>-        libhandle = dlopen (libpathfull, RTLD_NOW);</div><div class='del'>-        if (!libhandle) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error loading NFS server library : %s\n", dlerror ());</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Load up the function */</div><div class='del'>-        ng_file_parse = dlsym (libhandle, "ng_file_parse");</div><div class='del'>-        if (!ng_file_parse) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error finding function ng_file_parse in symbol.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Parse the file */</div><div class='del'>-        file = ng_file_parse (netgroups_file);</div><div class='del'>-        if (!file) {</div><div class='del'>-                ret = 1;        /* This means we failed to parse */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Load up the function */</div><div class='del'>-        ng_file_print = dlsym (libhandle, "ng_file_print");</div><div class='del'>-        if (!ng_file_print) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error finding function ng_file_print in symbol.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    void *libhandle = NULL;</div><div class='add'>+    char *libpathfull = NULL;</div><div class='add'>+    struct netgroups_file *file = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    struct netgroups_file *(*ng_file_parse)(const char *file_path) = NULL;</div><div class='add'>+    void (*ng_file_print)(const struct netgroups_file *file) = NULL;</div><div class='add'>+    void (*ng_file_deinit)(struct netgroups_file * ptr) = NULL;</div><div class='add'>+</div><div class='add'>+    /* XLATORDIR passed through a -D flag to GCC */</div><div class='add'>+    ret = gf_asprintf(&amp;libpathfull, "%s/%s/server.so", XLATORDIR, "nfs");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL, "asprintf () failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* Load up the library */</div><div class='add'>+    libhandle = dlopen(libpathfull, RTLD_NOW);</div><div class='add'>+    if (!libhandle) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error loading NFS server library : %s\n", dlerror());</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Load up the function */</div><div class='add'>+    ng_file_parse = dlsym(libhandle, "ng_file_parse");</div><div class='add'>+    if (!ng_file_parse) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error finding function ng_file_parse in symbol.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Parse the file */</div><div class='add'>+    file = ng_file_parse(netgroups_file);</div><div class='add'>+    if (!file) {</div><div class='add'>+        ret = 1; /* This means we failed to parse */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Load up the function */</div><div class='add'>+    ng_file_print = dlsym(libhandle, "ng_file_print");</div><div class='add'>+    if (!ng_file_print) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error finding function ng_file_print in symbol.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Print it out to screen */</div><div class='del'>-        ng_file_print (file);</div><div class='add'>+    /* Print it out to screen */</div><div class='add'>+    ng_file_print(file);</div><div class='ctx'> </div><div class='del'>-        /* Load up the function */</div><div class='del'>-        ng_file_deinit = dlsym (libhandle, "ng_file_deinit");</div><div class='del'>-        if (!ng_file_deinit) {</div><div class='del'>-                gf_log ("glusterfs", GF_LOG_CRITICAL,</div><div class='del'>-                        "Error finding function ng_file_deinit in lib.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Load up the function */</div><div class='add'>+    ng_file_deinit = dlsym(libhandle, "ng_file_deinit");</div><div class='add'>+    if (!ng_file_deinit) {</div><div class='add'>+        gf_log("glusterfs", GF_LOG_CRITICAL,</div><div class='add'>+               "Error finding function ng_file_deinit in lib.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Free the file */</div><div class='del'>-        ng_file_deinit (file);</div><div class='add'>+    /* Free the file */</div><div class='add'>+    ng_file_deinit(file);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (libhandle)</div><div class='del'>-                dlclose(libhandle);</div><div class='del'>-        GF_FREE (libpathfull);</div><div class='del'>-        return ret;</div><div class='add'>+    if (libhandle)</div><div class='add'>+        dlclose(libhandle);</div><div class='add'>+    GF_FREE(libpathfull);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-parse_cmdline (int argc, char *argv[], glusterfs_ctx_t *ctx)</div><div class='add'>+parse_cmdline(int argc, char *argv[], glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int          process_mode = 0;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        struct stat  stbuf = {0, };</div><div class='del'>-        char         timestr[32];</div><div class='del'>-        char         tmp_logfile[1024] = { 0 };</div><div class='del'>-        char        *tmp_logfile_dyn = NULL;</div><div class='del'>-        char        *tmp_logfilebase = NULL;</div><div class='del'>-        cmd_args_t  *cmd_args = NULL;</div><div class='del'>-        int          len = 0;</div><div class='del'>-        char        *thin_volfileid = NULL;</div><div class='del'>-</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        /* Do this before argp_parse so it can be overridden. */</div><div class='del'>-        if (sys_access (SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='del'>-                cmd_args-&gt;secure_mgmt = 1;</div><div class='del'>-                ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file ();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        argp_parse (&amp;argp, argc, argv, ARGP_IN_ORDER, NULL, cmd_args);</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;print_xlatordir || cmd_args-&gt;print_statedumpdir ||</div><div class='del'>-            cmd_args-&gt;print_logdir || cmd_args-&gt;print_libexecdir) {</div><div class='del'>-                /* Just print, nothing else to do */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;print_netgroups) {</div><div class='del'>-                /* When this option is set we don't want to do anything else</div><div class='del'>-                 * except for printing &amp; verifying the netgroups file.</div><div class='del'>-                 */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int process_mode = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr[32];</div><div class='add'>+    char tmp_logfile[1024] = {0};</div><div class='add'>+    char *tmp_logfile_dyn = NULL;</div><div class='add'>+    char *tmp_logfilebase = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    char *thin_volfileid = NULL;</div><div class='add'>+</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    /* Do this before argp_parse so it can be overridden. */</div><div class='add'>+    if (sys_access(SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='add'>+        cmd_args-&gt;secure_mgmt = 1;</div><div class='add'>+        ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file();</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    argp_parse(&amp;argp, argc, argv, ARGP_IN_ORDER, NULL, cmd_args);</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;print_xlatordir || cmd_args-&gt;print_statedumpdir ||</div><div class='add'>+        cmd_args-&gt;print_logdir || cmd_args-&gt;print_libexecdir) {</div><div class='add'>+        /* Just print, nothing else to do */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;print_netgroups) {</div><div class='add'>+        /* When this option is set we don't want to do anything else</div><div class='add'>+         * except for printing &amp; verifying the netgroups file.</div><div class='add'>+         */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;print_exports) {</div><div class='del'>-                /* When this option is set we don't want to do anything else</div><div class='del'>-                 * except for printing &amp; verifying the exports file.</div><div class='del'>-                  */</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (cmd_args-&gt;print_exports) {</div><div class='add'>+        /* When this option is set we don't want to do anything else</div><div class='add'>+         * except for printing &amp; verifying the exports file.</div><div class='add'>+         */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;secure_mgmt = cmd_args-&gt;secure_mgmt;</div><div class='add'>+</div><div class='add'>+    if (ENABLE_DEBUG_MODE == cmd_args-&gt;debug_mode) {</div><div class='add'>+        cmd_args-&gt;log_level = GF_LOG_DEBUG;</div><div class='add'>+        cmd_args-&gt;log_file = gf_strdup("/dev/stderr");</div><div class='add'>+        cmd_args-&gt;no_daemon_mode = ENABLE_NO_DAEMON_MODE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    process_mode = gf_get_process_mode(argv[0]);</div><div class='add'>+    ctx-&gt;process_mode = process_mode;</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;process_name) {</div><div class='add'>+        ctx-&gt;cmd_args.process_name = cmd_args-&gt;process_name;</div><div class='add'>+    }</div><div class='add'>+    /* Make sure after the parsing cli, if '--volfile-server' option is</div><div class='add'>+       given, then '--volfile-id' is mandatory */</div><div class='add'>+    if (cmd_args-&gt;volfile_server &amp;&amp; !cmd_args-&gt;volfile_id) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_CRITICAL, 0, glusterfsd_msg_15,</div><div class='add'>+               "ERROR: '--volfile-id' is mandatory if '-s' OR "</div><div class='add'>+               "'--volfile-server' option is given");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((cmd_args-&gt;volfile_server == NULL) &amp;&amp; (cmd_args-&gt;volfile == NULL)) {</div><div class='add'>+        if (process_mode == GF_SERVER_PROCESS)</div><div class='add'>+            cmd_args-&gt;volfile = gf_strdup(DEFAULT_SERVER_VOLFILE);</div><div class='add'>+        else if (process_mode == GF_GLUSTERD_PROCESS)</div><div class='add'>+            cmd_args-&gt;volfile = gf_strdup(DEFAULT_GLUSTERD_VOLFILE);</div><div class='add'>+        else</div><div class='add'>+            cmd_args-&gt;volfile = gf_strdup(DEFAULT_CLIENT_VOLFILE);</div><div class='add'>+</div><div class='add'>+        /* Check if the volfile exists, if not give usage output</div><div class='add'>+           and exit */</div><div class='add'>+        ret = sys_stat(cmd_args-&gt;volfile, &amp;stbuf);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("glusterfs", GF_LOG_CRITICAL, errno, glusterfsd_msg_16,</div><div class='add'>+                   "ERROR: parsing the volfile failed");</div><div class='add'>+            /* argp_usage (argp.) */</div><div class='add'>+            fprintf(stderr, "USAGE: %s [options] [mountpoint]\n", argv[0]);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;thin_client) {</div><div class='add'>+        len = strlen(cmd_args-&gt;volfile_id) + SLEN("gfproxy-client/");</div><div class='add'>+        thin_volfileid = GF_MALLOC(len + 1, gf_common_mt_char);</div><div class='add'>+        snprintf(thin_volfileid, len + 1, "gfproxy-client/%s",</div><div class='add'>+                 cmd_args-&gt;volfile_id);</div><div class='add'>+        GF_FREE(cmd_args-&gt;volfile_id);</div><div class='add'>+        cmd_args-&gt;volfile_id = thin_volfileid;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;run_id) {</div><div class='add'>+        ret = sys_lstat(cmd_args-&gt;log_file, &amp;stbuf);</div><div class='add'>+        /* If its /dev/null, or /dev/stdout, /dev/stderr,</div><div class='add'>+         * let it use the same, no need to alter</div><div class='add'>+         */</div><div class='add'>+        if (((ret == 0) &amp;&amp;</div><div class='add'>+             (S_ISREG(stbuf.st_mode) || S_ISLNK(stbuf.st_mode))) ||</div><div class='add'>+            (ret == -1)) {</div><div class='add'>+            /* Have separate logfile per run */</div><div class='add'>+            gf_time_fmt(timestr, sizeof timestr, time(NULL), gf_timefmt_FT);</div><div class='add'>+            sprintf(tmp_logfile, "%s.%s.%d", cmd_args-&gt;log_file, timestr,</div><div class='add'>+                    getpid());</div><div class='add'>+</div><div class='add'>+            /* Create symlink to actual log file */</div><div class='add'>+            sys_unlink(cmd_args-&gt;log_file);</div><div class='add'>+</div><div class='add'>+            tmp_logfile_dyn = gf_strdup(tmp_logfile);</div><div class='add'>+            tmp_logfilebase = basename(tmp_logfile_dyn);</div><div class='add'>+            ret = sys_symlink(tmp_logfilebase, cmd_args-&gt;log_file);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                fprintf(stderr, "ERROR: symlink of logfile failed\n");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;secure_mgmt = cmd_args-&gt;secure_mgmt;</div><div class='add'>+            GF_FREE(cmd_args-&gt;log_file);</div><div class='add'>+            cmd_args-&gt;log_file = gf_strdup(tmp_logfile);</div><div class='ctx'> </div><div class='del'>-        if (ENABLE_DEBUG_MODE == cmd_args-&gt;debug_mode) {</div><div class='del'>-                cmd_args-&gt;log_level = GF_LOG_DEBUG;</div><div class='del'>-                cmd_args-&gt;log_file = gf_strdup ("/dev/stderr");</div><div class='del'>-                cmd_args-&gt;no_daemon_mode = ENABLE_NO_DAEMON_MODE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        process_mode = gf_get_process_mode (argv[0]);</div><div class='del'>-        ctx-&gt;process_mode = process_mode;</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;process_name) {</div><div class='del'>-                ctx-&gt;cmd_args.process_name = cmd_args-&gt;process_name;</div><div class='del'>-        }</div><div class='del'>-        /* Make sure after the parsing cli, if '--volfile-server' option is</div><div class='del'>-           given, then '--volfile-id' is mandatory */</div><div class='del'>-        if (cmd_args-&gt;volfile_server &amp;&amp; !cmd_args-&gt;volfile_id) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_CRITICAL, 0, glusterfsd_msg_15,</div><div class='del'>-                        "ERROR: '--volfile-id' is mandatory if '-s' OR "</div><div class='del'>-                        "'--volfile-server' option is given");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            GF_FREE(tmp_logfile_dyn);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((cmd_args-&gt;volfile_server == NULL)</div><div class='del'>-            &amp;&amp; (cmd_args-&gt;volfile == NULL)) {</div><div class='del'>-                if (process_mode == GF_SERVER_PROCESS)</div><div class='del'>-                        cmd_args-&gt;volfile = gf_strdup (DEFAULT_SERVER_VOLFILE);</div><div class='del'>-                else if (process_mode == GF_GLUSTERD_PROCESS)</div><div class='del'>-                        cmd_args-&gt;volfile = gf_strdup (DEFAULT_GLUSTERD_VOLFILE);</div><div class='del'>-                else</div><div class='del'>-                        cmd_args-&gt;volfile = gf_strdup (DEFAULT_CLIENT_VOLFILE);</div><div class='del'>-</div><div class='del'>-                /* Check if the volfile exists, if not give usage output</div><div class='del'>-                   and exit */</div><div class='del'>-                ret = sys_stat (cmd_args-&gt;volfile, &amp;stbuf);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("glusterfs", GF_LOG_CRITICAL, errno,</div><div class='del'>-                                glusterfsd_msg_16,</div><div class='del'>-                                "ERROR: parsing the volfile failed");</div><div class='del'>-                        /* argp_usage (argp.) */</div><div class='del'>-                        fprintf (stderr, "USAGE: %s [options] [mountpoint]\n",</div><div class='del'>-                                 argv[0]);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;thin_client) {</div><div class='del'>-                len = strlen (cmd_args-&gt;volfile_id) + SLEN ("gfproxy-client/");</div><div class='del'>-                thin_volfileid = GF_MALLOC (len + 1, gf_common_mt_char);</div><div class='del'>-                snprintf (thin_volfileid, len + 1, "gfproxy-client/%s",</div><div class='del'>-                          cmd_args-&gt;volfile_id);</div><div class='del'>-                GF_FREE (cmd_args-&gt;volfile_id);</div><div class='del'>-                cmd_args-&gt;volfile_id = thin_volfileid;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;run_id) {</div><div class='del'>-                ret = sys_lstat (cmd_args-&gt;log_file, &amp;stbuf);</div><div class='del'>-                /* If its /dev/null, or /dev/stdout, /dev/stderr,</div><div class='del'>-                 * let it use the same, no need to alter</div><div class='del'>-                 */</div><div class='del'>-                if (((ret == 0) &amp;&amp;</div><div class='del'>-                     (S_ISREG (stbuf.st_mode) || S_ISLNK (stbuf.st_mode))) ||</div><div class='del'>-                    (ret == -1)) {</div><div class='del'>-                        /* Have separate logfile per run */</div><div class='del'>-                        gf_time_fmt (timestr, sizeof timestr, time (NULL),</div><div class='del'>-                                     gf_timefmt_FT);</div><div class='del'>-                        sprintf (tmp_logfile, "%s.%s.%d",</div><div class='del'>-                                 cmd_args-&gt;log_file, timestr, getpid ());</div><div class='del'>-</div><div class='del'>-                        /* Create symlink to actual log file */</div><div class='del'>-                        sys_unlink (cmd_args-&gt;log_file);</div><div class='del'>-</div><div class='del'>-                        tmp_logfile_dyn = gf_strdup (tmp_logfile);</div><div class='del'>-                        tmp_logfilebase = basename (tmp_logfile_dyn);</div><div class='del'>-                        ret = sys_symlink (tmp_logfilebase,</div><div class='del'>-                                           cmd_args-&gt;log_file);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                fprintf (stderr, "ERROR: symlink of logfile failed\n");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        GF_FREE (cmd_args-&gt;log_file);</div><div class='del'>-                        cmd_args-&gt;log_file = gf_strdup (tmp_logfile);</div><div class='del'>-</div><div class='del'>-                        GF_FREE (tmp_logfile_dyn);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-           This option was made obsolete but parsing it for backward</div><div class='del'>-           compatibility with third party applications</div><div class='del'>-         */</div><div class='del'>-        if (cmd_args-&gt;max_connect_attempts) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_WARNING, 0, glusterfsd_msg_33,</div><div class='del'>-                        "obsolete option '--volfile-max-fecth-attempts or "</div><div class='del'>-                        "fetch-attempts' was provided");</div><div class='del'>-        }</div><div class='add'>+    /*</div><div class='add'>+       This option was made obsolete but parsing it for backward</div><div class='add'>+       compatibility with third party applications</div><div class='add'>+     */</div><div class='add'>+    if (cmd_args-&gt;max_connect_attempts) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_WARNING, 0, glusterfsd_msg_33,</div><div class='add'>+               "obsolete option '--volfile-max-fecth-attempts or "</div><div class='add'>+               "fetch-attempts' was provided");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        if (cmd_args-&gt;mount_point)</div><div class='del'>-               cmd_args-&gt;mac_compat = GF_OPTION_DEFERRED;</div><div class='add'>+    if (cmd_args-&gt;mount_point)</div><div class='add'>+        cmd_args-&gt;mac_compat = GF_OPTION_DEFERRED;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_pidfile_setup (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_pidfile_setup(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t  *cmd_args = NULL;</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        FILE        *pidfp = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    FILE *pidfp = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;pid_file)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!cmd_args-&gt;pid_file)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        pidfp = fopen (cmd_args-&gt;pid_file, "a+");</div><div class='del'>-        if (!pidfp) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_17,</div><div class='del'>-                        "pidfile %s open failed", cmd_args-&gt;pid_file);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    pidfp = fopen(cmd_args-&gt;pid_file, "a+");</div><div class='add'>+    if (!pidfp) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_17,</div><div class='add'>+               "pidfile %s open failed", cmd_args-&gt;pid_file);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;pidfp = pidfp;</div><div class='add'>+    ctx-&gt;pidfp = pidfp;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_pidfile_cleanup (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_pidfile_cleanup(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!ctx-&gt;pidfp)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!ctx-&gt;pidfp)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace ("glusterfsd", 0, "pidfile %s cleanup",</div><div class='del'>-                      cmd_args-&gt;pid_file);</div><div class='add'>+    gf_msg_trace("glusterfsd", 0, "pidfile %s cleanup", cmd_args-&gt;pid_file);</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;cmd_args.pid_file) {</div><div class='del'>-                ctx-&gt;cmd_args.pid_file = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ctx-&gt;cmd_args.pid_file) {</div><div class='add'>+        ctx-&gt;cmd_args.pid_file = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lockf (fileno (ctx-&gt;pidfp), F_ULOCK, 0);</div><div class='del'>-        fclose (ctx-&gt;pidfp);</div><div class='del'>-        ctx-&gt;pidfp = NULL;</div><div class='add'>+    lockf(fileno(ctx-&gt;pidfp), F_ULOCK, 0);</div><div class='add'>+    fclose(ctx-&gt;pidfp);</div><div class='add'>+    ctx-&gt;pidfp = NULL;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_pidfile_update (glusterfs_ctx_t *ctx, pid_t pid)</div><div class='add'>+glusterfs_pidfile_update(glusterfs_ctx_t *ctx, pid_t pid)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t  *cmd_args = NULL;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        FILE        *pidfp = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    FILE *pidfp = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        pidfp = ctx-&gt;pidfp;</div><div class='del'>-        if (!pidfp)</div><div class='del'>-                return 0;</div><div class='add'>+    pidfp = ctx-&gt;pidfp;</div><div class='add'>+    if (!pidfp)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = lockf (fileno (pidfp), F_TLOCK, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_18,</div><div class='del'>-                        "pidfile %s lock failed", cmd_args-&gt;pid_file);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = lockf(fileno(pidfp), F_TLOCK, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_18,</div><div class='add'>+               "pidfile %s lock failed", cmd_args-&gt;pid_file);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = sys_ftruncate (fileno (pidfp), 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_20,</div><div class='del'>-                        "pidfile %s truncation failed", cmd_args-&gt;pid_file);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = sys_ftruncate(fileno(pidfp), 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_20,</div><div class='add'>+               "pidfile %s truncation failed", cmd_args-&gt;pid_file);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fprintf (pidfp, "%d\n", pid);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_21,</div><div class='del'>-                        "pidfile %s write failed", cmd_args-&gt;pid_file);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = fprintf(pidfp, "%d\n", pid);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_21,</div><div class='add'>+               "pidfile %s write failed", cmd_args-&gt;pid_file);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fflush (pidfp);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_21,</div><div class='del'>-                        "pidfile %s write failed", cmd_args-&gt;pid_file);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = fflush(pidfp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, errno, glusterfsd_msg_21,</div><div class='add'>+               "pidfile %s write failed", cmd_args-&gt;pid_file);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug ("glusterfsd", 0, "pidfile %s updated with pid %d",</div><div class='del'>-                      cmd_args-&gt;pid_file, pid);</div><div class='add'>+    gf_msg_debug("glusterfsd", 0, "pidfile %s updated with pid %d",</div><div class='add'>+                 cmd_args-&gt;pid_file, pid);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-glusterfs_sigwaiter (void *arg)</div><div class='add'>+glusterfs_sigwaiter(void *arg)</div><div class='ctx'> {</div><div class='del'>-        sigset_t  set;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-        int       sig = 0;</div><div class='del'>-        char     *file = NULL;</div><div class='del'>-</div><div class='del'>-        sigemptyset (&amp;set);</div><div class='del'>-        sigaddset (&amp;set, SIGINT);   /* cleanup_and_exit */</div><div class='del'>-        sigaddset (&amp;set, SIGTERM);  /* cleanup_and_exit */</div><div class='del'>-        sigaddset (&amp;set, SIGHUP);   /* reincarnate */</div><div class='del'>-        sigaddset (&amp;set, SIGUSR1);  /* gf_proc_dump_info */</div><div class='del'>-        sigaddset (&amp;set, SIGUSR2);</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                ret = sigwait (&amp;set, &amp;sig);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                switch (sig) {</div><div class='del'>-                case SIGINT:</div><div class='del'>-                case SIGTERM:</div><div class='del'>-                        cleanup_and_exit (sig);</div><div class='del'>-                        break;</div><div class='del'>-                case SIGHUP:</div><div class='del'>-                        reincarnate (sig);</div><div class='del'>-                        break;</div><div class='del'>-                case SIGUSR1:</div><div class='del'>-                        gf_proc_dump_info (sig, glusterfsd_ctx);</div><div class='del'>-                        break;</div><div class='del'>-                case SIGUSR2:</div><div class='del'>-                        file = gf_monitor_metrics (glusterfsd_ctx);</div><div class='add'>+    sigset_t set;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int sig = 0;</div><div class='add'>+    char *file = NULL;</div><div class='add'>+</div><div class='add'>+    sigemptyset(&amp;set);</div><div class='add'>+    sigaddset(&amp;set, SIGINT);  /* cleanup_and_exit */</div><div class='add'>+    sigaddset(&amp;set, SIGTERM); /* cleanup_and_exit */</div><div class='add'>+    sigaddset(&amp;set, SIGHUP);  /* reincarnate */</div><div class='add'>+    sigaddset(&amp;set, SIGUSR1); /* gf_proc_dump_info */</div><div class='add'>+    sigaddset(&amp;set, SIGUSR2);</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        ret = sigwait(&amp;set, &amp;sig);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                        /* Nothing needed to be done here */</div><div class='del'>-                        GF_FREE (file);</div><div class='add'>+        switch (sig) {</div><div class='add'>+            case SIGINT:</div><div class='add'>+            case SIGTERM:</div><div class='add'>+                cleanup_and_exit(sig);</div><div class='add'>+                break;</div><div class='add'>+            case SIGHUP:</div><div class='add'>+                reincarnate(sig);</div><div class='add'>+                break;</div><div class='add'>+            case SIGUSR1:</div><div class='add'>+                gf_proc_dump_info(sig, glusterfsd_ctx);</div><div class='add'>+                break;</div><div class='add'>+            case SIGUSR2:</div><div class='add'>+                file = gf_monitor_metrics(glusterfsd_ctx);</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='add'>+                /* Nothing needed to be done here */</div><div class='add'>+                GF_FREE(file);</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-glusterfsd_print_trace (int signum)</div><div class='add'>+glusterfsd_print_trace(int signum)</div><div class='ctx'> {</div><div class='del'>-	gf_print_trace (signum, glusterfsd_ctx);</div><div class='add'>+    gf_print_trace(signum, glusterfsd_ctx);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_signals_setup (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_signals_setup(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        sigset_t  set;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-</div><div class='del'>-        sigemptyset (&amp;set);</div><div class='del'>-</div><div class='del'>-        /* common setting for all threads */</div><div class='del'>-        signal (SIGSEGV, glusterfsd_print_trace);</div><div class='del'>-        signal (SIGABRT, glusterfsd_print_trace);</div><div class='del'>-        signal (SIGILL, glusterfsd_print_trace);</div><div class='del'>-        signal (SIGTRAP, glusterfsd_print_trace);</div><div class='del'>-        signal (SIGFPE, glusterfsd_print_trace);</div><div class='del'>-        signal (SIGBUS, glusterfsd_print_trace);</div><div class='del'>-        signal (SIGINT, cleanup_and_exit);</div><div class='del'>-        signal (SIGPIPE, SIG_IGN);</div><div class='del'>-</div><div class='del'>-        /* block these signals from non-sigwaiter threads */</div><div class='del'>-        sigaddset (&amp;set, SIGTERM);  /* cleanup_and_exit */</div><div class='del'>-        sigaddset (&amp;set, SIGHUP);   /* reincarnate */</div><div class='del'>-        sigaddset (&amp;set, SIGUSR1);  /* gf_proc_dump_info */</div><div class='del'>-        sigaddset (&amp;set, SIGUSR2);</div><div class='del'>-</div><div class='del'>-        ret = pthread_sigmask (SIG_BLOCK, &amp;set, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_WARNING, errno, glusterfsd_msg_22,</div><div class='del'>-                        "failed to execute pthread_sigmask");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;ctx-&gt;sigwaiter, NULL, glusterfs_sigwaiter,</div><div class='del'>-                                (void *) &amp;set, "sigwait");</div><div class='del'>-        if (ret) {</div><div class='del'>-                /*</div><div class='del'>-                  TODO:</div><div class='del'>-                  fallback to signals getting handled by other threads.</div><div class='del'>-                  setup the signal handlers</div><div class='del'>-                */</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_WARNING, errno, glusterfsd_msg_23,</div><div class='del'>-                        "failed to create pthread");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    sigset_t set;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    sigemptyset(&amp;set);</div><div class='add'>+</div><div class='add'>+    /* common setting for all threads */</div><div class='add'>+    signal(SIGSEGV, glusterfsd_print_trace);</div><div class='add'>+    signal(SIGABRT, glusterfsd_print_trace);</div><div class='add'>+    signal(SIGILL, glusterfsd_print_trace);</div><div class='add'>+    signal(SIGTRAP, glusterfsd_print_trace);</div><div class='add'>+    signal(SIGFPE, glusterfsd_print_trace);</div><div class='add'>+    signal(SIGBUS, glusterfsd_print_trace);</div><div class='add'>+    signal(SIGINT, cleanup_and_exit);</div><div class='add'>+    signal(SIGPIPE, SIG_IGN);</div><div class='add'>+</div><div class='add'>+    /* block these signals from non-sigwaiter threads */</div><div class='add'>+    sigaddset(&amp;set, SIGTERM); /* cleanup_and_exit */</div><div class='add'>+    sigaddset(&amp;set, SIGHUP);  /* reincarnate */</div><div class='add'>+    sigaddset(&amp;set, SIGUSR1); /* gf_proc_dump_info */</div><div class='add'>+    sigaddset(&amp;set, SIGUSR2);</div><div class='add'>+</div><div class='add'>+    ret = pthread_sigmask(SIG_BLOCK, &amp;set, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_WARNING, errno, glusterfsd_msg_22,</div><div class='add'>+               "failed to execute pthread_sigmask");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = gf_thread_create(&amp;ctx-&gt;sigwaiter, NULL, glusterfs_sigwaiter,</div><div class='add'>+                           (void *)&amp;set, "sigwait");</div><div class='add'>+    if (ret) {</div><div class='add'>+        /*</div><div class='add'>+          TODO:</div><div class='add'>+          fallback to signals getting handled by other threads.</div><div class='add'>+          setup the signal handlers</div><div class='add'>+        */</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_WARNING, errno, glusterfsd_msg_23,</div><div class='add'>+               "failed to create pthread");</div><div class='ctx'>         return ret;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-daemonize (glusterfs_ctx_t *ctx)</div><div class='add'>+daemonize(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int            ret = -1;</div><div class='del'>-        cmd_args_t    *cmd_args = NULL;</div><div class='del'>-        int            cstatus = 0;</div><div class='del'>-        int            err = 1;</div><div class='del'>-        int            child_pid = 0;</div><div class='del'>-</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_pidfile_setup (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int cstatus = 0;</div><div class='add'>+    int err = 1;</div><div class='add'>+    int child_pid = 0;</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;no_daemon_mode) {</div><div class='del'>-                ret = glusterfs_pidfile_update (ctx, getpid());</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                goto postfork;</div><div class='del'>-        }</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;debug_mode)</div><div class='del'>-                goto postfork;</div><div class='del'>-</div><div class='del'>-        ret = pipe (ctx-&gt;daemon_pipe);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* If pipe() fails, retain daemon_pipe[] = {-1, -1}</div><div class='del'>-                   and parent will just not wait for child status</div><div class='del'>-                */</div><div class='del'>-                ctx-&gt;daemon_pipe[0] = -1;</div><div class='del'>-                ctx-&gt;daemon_pipe[1] = -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glusterfs_pidfile_setup(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = os_daemon_return (0, 0);</div><div class='del'>-        switch (ret) {</div><div class='add'>+    if (cmd_args-&gt;no_daemon_mode) {</div><div class='add'>+        ret = glusterfs_pidfile_update(ctx, getpid());</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        goto postfork;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;debug_mode)</div><div class='add'>+        goto postfork;</div><div class='add'>+</div><div class='add'>+    ret = pipe(ctx-&gt;daemon_pipe);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* If pipe() fails, retain daemon_pipe[] = {-1, -1}</div><div class='add'>+           and parent will just not wait for child status</div><div class='add'>+        */</div><div class='add'>+        ctx-&gt;daemon_pipe[0] = -1;</div><div class='add'>+        ctx-&gt;daemon_pipe[1] = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = os_daemon_return(0, 0);</div><div class='add'>+    switch (ret) {</div><div class='ctx'>         case -1:</div><div class='del'>-                if (ctx-&gt;daemon_pipe[0] != -1) {</div><div class='del'>-                        sys_close (ctx-&gt;daemon_pipe[0]);</div><div class='del'>-                        sys_close (ctx-&gt;daemon_pipe[1]);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg ("daemonize", GF_LOG_ERROR, errno, glusterfsd_msg_24,</div><div class='del'>-                        "daemonization failed");</div><div class='del'>-                goto out;</div><div class='add'>+            if (ctx-&gt;daemon_pipe[0] != -1) {</div><div class='add'>+                sys_close(ctx-&gt;daemon_pipe[0]);</div><div class='add'>+                sys_close(ctx-&gt;daemon_pipe[1]);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            gf_msg("daemonize", GF_LOG_ERROR, errno, glusterfsd_msg_24,</div><div class='add'>+                   "daemonization failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         case 0:</div><div class='del'>-                /* child */</div><div class='del'>-                /* close read */</div><div class='del'>-                sys_close (ctx-&gt;daemon_pipe[0]);</div><div class='del'>-                break;</div><div class='add'>+            /* child */</div><div class='add'>+            /* close read */</div><div class='add'>+            sys_close(ctx-&gt;daemon_pipe[0]);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                /* parent */</div><div class='del'>-                /* close write */</div><div class='del'>-                child_pid = ret;</div><div class='del'>-                sys_close (ctx-&gt;daemon_pipe[1]);</div><div class='del'>-</div><div class='del'>-                if (ctx-&gt;mnt_pid &gt; 0) {</div><div class='del'>-                        ret = waitpid (ctx-&gt;mnt_pid, &amp;cstatus, 0);</div><div class='del'>-                        if (!(ret == ctx-&gt;mnt_pid)) {</div><div class='del'>-                                if (WIFEXITED(cstatus)) {</div><div class='del'>-                                        err = WEXITSTATUS(cstatus);</div><div class='del'>-                                } else {</div><div class='del'>-                                        err = cstatus;</div><div class='del'>-                                }</div><div class='del'>-                                gf_msg ("daemonize", GF_LOG_ERROR, 0,</div><div class='del'>-                                        glusterfsd_msg_25, "mount failed");</div><div class='del'>-                                exit (err);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                sys_read (ctx-&gt;daemon_pipe[0], (void *)&amp;err, sizeof (err));</div><div class='del'>-                /* NOTE: Only the least significant 8 bits i.e (err &amp; 255)</div><div class='del'>-                   will be available to parent process on calling exit() */</div><div class='del'>-                if (err)</div><div class='del'>-                        _exit (abs(err));</div><div class='del'>-                ret = glusterfs_pidfile_update (ctx, child_pid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        _exit (1);</div><div class='del'>-                _exit (0);</div><div class='del'>-        }</div><div class='add'>+            /* parent */</div><div class='add'>+            /* close write */</div><div class='add'>+            child_pid = ret;</div><div class='add'>+            sys_close(ctx-&gt;daemon_pipe[1]);</div><div class='add'>+</div><div class='add'>+            if (ctx-&gt;mnt_pid &gt; 0) {</div><div class='add'>+                ret = waitpid(ctx-&gt;mnt_pid, &amp;cstatus, 0);</div><div class='add'>+                if (!(ret == ctx-&gt;mnt_pid)) {</div><div class='add'>+                    if (WIFEXITED(cstatus)) {</div><div class='add'>+                        err = WEXITSTATUS(cstatus);</div><div class='add'>+                    } else {</div><div class='add'>+                        err = cstatus;</div><div class='add'>+                    }</div><div class='add'>+                    gf_msg("daemonize", GF_LOG_ERROR, 0, glusterfsd_msg_25,</div><div class='add'>+                           "mount failed");</div><div class='add'>+                    exit(err);</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            sys_read(ctx-&gt;daemon_pipe[0], (void *)&amp;err, sizeof(err));</div><div class='add'>+            /* NOTE: Only the least significant 8 bits i.e (err &amp; 255)</div><div class='add'>+               will be available to parent process on calling exit() */</div><div class='add'>+            if (err)</div><div class='add'>+                _exit(abs(err));</div><div class='add'>+            ret = glusterfs_pidfile_update(ctx, child_pid);</div><div class='add'>+            if (ret)</div><div class='add'>+                _exit(1);</div><div class='add'>+            _exit(0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> postfork:</div><div class='del'>-        ret = gf_log_inject_timer_event (ctx);</div><div class='add'>+    ret = gf_log_inject_timer_event(ctx);</div><div class='ctx'> </div><div class='del'>-        glusterfs_signals_setup (ctx);</div><div class='add'>+    glusterfs_signals_setup(ctx);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='ctx'> static int</div><div class='del'>-set_oom_score_adj (glusterfs_ctx_t *ctx)</div><div class='add'>+set_oom_score_adj(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int                  ret           = -1;</div><div class='del'>-        cmd_args_t          *cmd_args      =  NULL;</div><div class='del'>-        int                  fd            = -1;</div><div class='del'>-        size_t               oom_score_len =  0;</div><div class='del'>-        struct oom_api_info *api           =  NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    size_t oom_score_len = 0;</div><div class='add'>+    struct oom_api_info *api = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;oom_score_adj)</div><div class='del'>-                goto success;</div><div class='add'>+    if (!cmd_args-&gt;oom_score_adj)</div><div class='add'>+        goto success;</div><div class='ctx'> </div><div class='del'>-        api = get_oom_api_info();</div><div class='del'>-        if (!api)</div><div class='del'>-                goto out;</div><div class='add'>+    api = get_oom_api_info();</div><div class='add'>+    if (!api)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd = open (api-&gt;oom_api_file, O_WRONLY);</div><div class='del'>-        if (fd &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    fd = open(api-&gt;oom_api_file, O_WRONLY);</div><div class='add'>+    if (fd &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        oom_score_len = strlen (cmd_args-&gt;oom_score_adj);</div><div class='del'>-        if (sys_write (fd,</div><div class='del'>-                  cmd_args-&gt;oom_score_adj, oom_score_len) != oom_score_len) {</div><div class='del'>-                sys_close (fd);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    oom_score_len = strlen(cmd_args-&gt;oom_score_adj);</div><div class='add'>+    if (sys_write(fd, cmd_args-&gt;oom_score_adj, oom_score_len) !=</div><div class='add'>+        oom_score_len) {</div><div class='add'>+        sys_close(fd);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (sys_close (fd) &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (sys_close(fd) &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> success:</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp)</div><div class='add'>+glusterfs_process_volfp(glusterfs_ctx_t *ctx, FILE *fp)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_graph_t  *graph = NULL;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        xlator_t           *trav = NULL;</div><div class='del'>-</div><div class='del'>-        graph = glusterfs_graph_construct (fp);</div><div class='del'>-        if (!graph) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0, glusterfsd_msg_26,</div><div class='del'>-                        "failed to construct the graph");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    glusterfs_graph_t *graph = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='del'>-                if (strcmp (trav-&gt;type, "mount/fuse") == 0) {</div><div class='del'>-                        gf_msg ("glusterfsd", GF_LOG_ERROR, 0,</div><div class='del'>-                                glusterfsd_msg_27,</div><div class='del'>-                                "fuse xlator cannot be specified in volume "</div><div class='del'>-                                "file");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    graph = glusterfs_graph_construct(fp);</div><div class='add'>+    if (!graph) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, glusterfsd_msg_26,</div><div class='add'>+               "failed to construct the graph");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xlator_t *xl = graph-&gt;first;</div><div class='del'>-        if (strcmp (xl-&gt;type, "protocol/server") == 0) {</div><div class='del'>-                (void) copy_opts_to_child (xl, FIRST_CHILD (xl), "*auth*");</div><div class='add'>+    for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='add'>+        if (strcmp(trav-&gt;type, "mount/fuse") == 0) {</div><div class='add'>+            gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_27,</div><div class='add'>+                   "fuse xlator cannot be specified in volume "</div><div class='add'>+                   "file");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_prepare (graph, ctx, ctx-&gt;cmd_args.volume_name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *xl = graph-&gt;first;</div><div class='add'>+    if (strcmp(xl-&gt;type, "protocol/server") == 0) {</div><div class='add'>+        (void)copy_opts_to_child(xl, FIRST_CHILD(xl), "*auth*");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_activate (graph, ctx);</div><div class='add'>+    ret = glusterfs_graph_prepare(graph, ctx, ctx-&gt;cmd_args.volume_name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glusterfs_graph_activate(graph, ctx);</div><div class='ctx'> </div><div class='del'>-        gf_log_dump_graph (fp, graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    gf_log_dump_graph(fp, graph);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='del'>-</div><div class='del'>-        if (ret &amp;&amp; !ctx-&gt;active) {</div><div class='del'>-                glusterfs_graph_destroy (graph);</div><div class='del'>-                /* there is some error in setting up the first graph itself */</div><div class='del'>-                emancipate (ctx, ret);</div><div class='del'>-                cleanup_and_exit (ret);</div><div class='del'>-        }</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    if (ret &amp;&amp; !ctx-&gt;active) {</div><div class='add'>+        glusterfs_graph_destroy(graph);</div><div class='add'>+        /* there is some error in setting up the first graph itself */</div><div class='add'>+        emancipate(ctx, ret);</div><div class='add'>+        cleanup_and_exit(ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_volumes_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_volumes_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        FILE               *fp = NULL;</div><div class='del'>-        cmd_args_t         *cmd_args = NULL;</div><div class='del'>-        int                 ret = 0;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;sock_file) {</div><div class='del'>-                ret = glusterfs_listener_init (ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (cmd_args-&gt;sock_file) {</div><div class='add'>+        ret = glusterfs_listener_init(ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;volfile_server) {</div><div class='del'>-                ret = glusterfs_mgmt_init (ctx);</div><div class='del'>-                /* return, do not emancipate() yet */</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (cmd_args-&gt;volfile_server) {</div><div class='add'>+        ret = glusterfs_mgmt_init(ctx);</div><div class='add'>+        /* return, do not emancipate() yet */</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fp = get_volfp (ctx);</div><div class='add'>+    fp = get_volfp(ctx);</div><div class='ctx'> </div><div class='del'>-        if (!fp) {</div><div class='del'>-                gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_28,</div><div class='del'>-                        "Cannot reach volume specification file");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!fp) {</div><div class='add'>+        gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_28,</div><div class='add'>+               "Cannot reach volume specification file");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_process_volfp (ctx, fp);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glusterfs_process_volfp(ctx, fp);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        emancipate (ctx, ret);</div><div class='del'>-        return ret;</div><div class='add'>+    emancipate(ctx, ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This is the only legal global pointer  */</div><div class='ctx'> glusterfs_ctx_t *glusterfsd_ctx;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t  *ctx = NULL;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        char              cmdlinestr[PATH_MAX] = {0,};</div><div class='del'>-        cmd_args_t       *cmd = NULL;</div><div class='del'>-</div><div class='del'>-        mem_pools_init_early ();</div><div class='del'>-</div><div class='del'>-	gf_check_and_set_mem_acct (argc, argv);</div><div class='del'>-</div><div class='del'>-	ctx = glusterfs_ctx_new ();</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_CRITICAL, 0, glusterfsd_msg_29,</div><div class='del'>-                        "ERROR: glusterfs context not initialized");</div><div class='del'>-                return ENOMEM;</div><div class='del'>-        }</div><div class='del'>-	glusterfsd_ctx = ctx;</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_globals_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-	THIS-&gt;ctx = ctx;</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_ctx_defaults_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = parse_cmdline (argc, argv, ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cmd = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char cmdlinestr[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    cmd_args_t *cmd = NULL;</div><div class='add'>+</div><div class='add'>+    mem_pools_init_early();</div><div class='add'>+</div><div class='add'>+    gf_check_and_set_mem_acct(argc, argv);</div><div class='add'>+</div><div class='add'>+    ctx = glusterfs_ctx_new();</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_CRITICAL, 0, glusterfsd_msg_29,</div><div class='add'>+               "ERROR: glusterfs context not initialized");</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    glusterfsd_ctx = ctx;</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_globals_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;print_xlatordir) {</div><div class='del'>-                /* XLATORDIR passed through a -D flag to GCC */</div><div class='del'>-                printf ("%s\n", XLATORDIR);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    THIS-&gt;ctx = ctx;</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;print_statedumpdir) {</div><div class='del'>-                printf ("%s\n", DEFAULT_VAR_RUN_DIRECTORY);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glusterfs_ctx_defaults_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;print_logdir) {</div><div class='del'>-                printf ("%s\n", DEFAULT_LOG_FILE_DIRECTORY);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = parse_cmdline(argc, argv, ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cmd = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;print_libexecdir) {</div><div class='del'>-                printf ("%s\n", LIBEXECDIR);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (cmd-&gt;print_xlatordir) {</div><div class='add'>+        /* XLATORDIR passed through a -D flag to GCC */</div><div class='add'>+        printf("%s\n", XLATORDIR);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd-&gt;print_statedumpdir) {</div><div class='add'>+        printf("%s\n", DEFAULT_VAR_RUN_DIRECTORY);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd-&gt;print_logdir) {</div><div class='add'>+        printf("%s\n", DEFAULT_LOG_FILE_DIRECTORY);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd-&gt;print_libexecdir) {</div><div class='add'>+        printf("%s\n", LIBEXECDIR);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd-&gt;print_netgroups) {</div><div class='add'>+        /* If this option is set we want to print &amp; verify the file,</div><div class='add'>+         * set the return value (exit code in this case) and exit.</div><div class='add'>+         */</div><div class='add'>+        ret = print_netgroups_file(cmd-&gt;print_netgroups);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd-&gt;print_exports) {</div><div class='add'>+        /* If this option is set we want to print &amp; verify the file,</div><div class='add'>+         * set the return value (exit code in this case)</div><div class='add'>+         * and exit.</div><div class='add'>+         */</div><div class='add'>+        ret = print_exports_file(cmd-&gt;print_exports);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;print_netgroups) {</div><div class='del'>-                /* If this option is set we want to print &amp; verify the file,</div><div class='del'>-                 * set the return value (exit code in this case) and exit.</div><div class='del'>-                 */</div><div class='del'>-                ret =  print_netgroups_file (cmd-&gt;print_netgroups);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = logging_init(ctx, argv[0]);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (cmd-&gt;print_exports) {</div><div class='del'>-                /* If this option is set we want to print &amp; verify the file,</div><div class='del'>-                 * set the return value (exit code in this case)</div><div class='del'>-                 * and exit.</div><div class='del'>-                 */</div><div class='del'>-                ret = print_exports_file (cmd-&gt;print_exports);</div><div class='add'>+    /* log the version of glusterfs running here along with the actual</div><div class='add'>+       command line options. */</div><div class='add'>+    {</div><div class='add'>+        int i = 0;</div><div class='add'>+        int pos = 0;</div><div class='add'>+        int len = snprintf(cmdlinestr, sizeof(cmdlinestr), "%s", argv[0]);</div><div class='add'>+        for (i = 1; (i &lt; argc) &amp;&amp; (len &gt; 0); i++) {</div><div class='add'>+            pos += len;</div><div class='add'>+            len = snprintf(cmdlinestr + pos, sizeof(cmdlinestr) - pos, " %s",</div><div class='add'>+                           argv[i]);</div><div class='add'>+            if ((len &lt;= 0) || (len &gt;= (sizeof(cmdlinestr) - pos))) {</div><div class='add'>+                gf_msg("glusterfs", GF_LOG_ERROR, 0, glusterfsd_msg_29,</div><div class='add'>+                       "failed to create command line string");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        gf_msg(argv[0], GF_LOG_INFO, 0, glusterfsd_msg_30,</div><div class='add'>+               "Started running %s version %s (args: %s)", argv[0],</div><div class='add'>+               PACKAGE_VERSION, cmdlinestr);</div><div class='ctx'> </div><div class='del'>-        ret = logging_init (ctx, argv[0]);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* log the version of glusterfs running here along with the actual</div><div class='del'>-           command line options. */</div><div class='del'>-        {</div><div class='del'>-                int i = 0;</div><div class='del'>-                int pos = 0;</div><div class='del'>-                int len = snprintf (cmdlinestr, sizeof (cmdlinestr), "%s", argv[0]);</div><div class='del'>-                for (i = 1; (i &lt; argc) &amp;&amp; (len &gt; 0); i++) {</div><div class='del'>-                        pos += len;</div><div class='del'>-                        len = snprintf (cmdlinestr + pos, sizeof (cmdlinestr) - pos, " %s",</div><div class='del'>-                                       argv[i]);</div><div class='del'>-                        if ((len &lt;= 0) || (len &gt;= (sizeof (cmdlinestr) - pos))) {</div><div class='del'>-                                gf_msg ("glusterfs", GF_LOG_ERROR, 0, glusterfsd_msg_29,</div><div class='del'>-                                        "failed to create command line string");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                gf_msg (argv[0], GF_LOG_INFO, 0, glusterfsd_msg_30,</div><div class='del'>-                        "Started running %s version %s (args: %s)",</div><div class='del'>-                        argv[0], PACKAGE_VERSION, cmdlinestr);</div><div class='del'>-</div><div class='del'>-		ctx-&gt;cmdlinestr = gf_strdup (cmdlinestr);</div><div class='del'>-        }</div><div class='add'>+        ctx-&gt;cmdlinestr = gf_strdup(cmdlinestr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_init();</div><div class='add'>+    gf_proc_dump_init();</div><div class='ctx'> </div><div class='del'>-        ret = create_fuse_mount (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = create_fuse_mount(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = daemonize (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = daemonize(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * If we do this before daemonize, the pool-sweeper thread dies with</div><div class='del'>-         * the parent, but we want to do it as soon as possible after that in</div><div class='del'>-         * case something else depends on pool allocations.</div><div class='del'>-         */</div><div class='del'>-        mem_pools_init_late ();</div><div class='add'>+    /*</div><div class='add'>+     * If we do this before daemonize, the pool-sweeper thread dies with</div><div class='add'>+     * the parent, but we want to do it as soon as possible after that in</div><div class='add'>+     * case something else depends on pool allocations.</div><div class='add'>+     */</div><div class='add'>+    mem_pools_init_late();</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        ret = set_oom_score_adj (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = set_oom_score_adj(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-	ctx-&gt;env = syncenv_new (0, 0, 0);</div><div class='del'>-        if (!ctx-&gt;env) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0, glusterfsd_msg_31,</div><div class='del'>-                        "Could not create new sync-environment");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ctx-&gt;env = syncenv_new(0, 0, 0);</div><div class='add'>+    if (!ctx-&gt;env) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, glusterfsd_msg_31,</div><div class='add'>+               "Could not create new sync-environment");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* do this _after_ daemonize() */</div><div class='del'>-        if (cmd-&gt;global_timer_wheel) {</div><div class='del'>-                if (!glusterfs_ctx_tw_get (ctx)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    /* do this _after_ daemonize() */</div><div class='add'>+    if (cmd-&gt;global_timer_wheel) {</div><div class='add'>+        if (!glusterfs_ctx_tw_get(ctx)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_volumes_init (ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glusterfs_volumes_init(ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = event_dispatch (ctx-&gt;event_pool);</div><div class='add'>+    ret = event_dispatch(ctx-&gt;event_pool);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-//        glusterfs_ctx_destroy (ctx);</div><div class='del'>-        return ret;</div><div class='add'>+    //        glusterfs_ctx_destroy (ctx);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/heal/src/glfs-heal.c b/heal/src/glfs-heal.c<br/>index 176ba6e44de..f0576f9d76e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/heal/src/glfs-heal.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>heal/src/glfs-heal.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/heal/src/glfs-heal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>heal/src/glfs-heal.c</a></div><div class='hunk'>@@ -28,1484 +28,1448 @@</div><div class='ctx'> #include &lt;libxml/xmlwriter.h&gt;</div><div class='ctx'> </div><div class='ctx'> xmlTextWriterPtr glfsh_writer;</div><div class='del'>-xmlDocPtr        glfsh_doc = NULL;</div><div class='add'>+xmlDocPtr glfsh_doc = NULL;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define XML_RET_CHECK_AND_GOTO(ret, label)      do {            \</div><div class='del'>-                if (ret &lt; 0) {                                  \</div><div class='del'>-                        ret = -1;                               \</div><div class='del'>-                        goto label;                             \</div><div class='del'>-                }                                               \</div><div class='del'>-                else                                            \</div><div class='del'>-                        ret = 0;                                \</div><div class='del'>-        } while (0)                                             \</div><div class='add'>+#define XML_RET_CHECK_AND_GOTO(ret, label)                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret &lt; 0) {                                                         \</div><div class='add'>+            ret = -1;                                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        } else                                                                 \</div><div class='add'>+            ret = 0;                                                           \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> typedef struct num_entries {</div><div class='del'>-        uint64_t num_entries;</div><div class='del'>-        uint64_t pending_entries;</div><div class='del'>-        uint64_t spb_entries;</div><div class='del'>-        uint64_t possibly_healing_entries;</div><div class='add'>+    uint64_t num_entries;</div><div class='add'>+    uint64_t pending_entries;</div><div class='add'>+    uint64_t spb_entries;</div><div class='add'>+    uint64_t possibly_healing_entries;</div><div class='ctx'> } num_entries_t;</div><div class='ctx'> </div><div class='del'>-typedef int    (*print_status) (dict_t *, char *, uuid_t, num_entries_t *,</div><div class='del'>-                 gf_boolean_t flag);</div><div class='add'>+typedef int (*print_status)(dict_t *, char *, uuid_t, num_entries_t *,</div><div class='add'>+                            gf_boolean_t flag);</div><div class='ctx'> </div><div class='del'>-int glfsh_heal_splitbrain_file (glfs_t *fs, xlator_t *top_subvol,</div><div class='del'>-                                loc_t *rootloc, char *file, dict_t *xattr_req);</div><div class='add'>+int</div><div class='add'>+glfsh_heal_splitbrain_file(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                           char *file, dict_t *xattr_req);</div><div class='ctx'> </div><div class='ctx'> typedef struct glfs_info {</div><div class='del'>-        int (*init)(void);</div><div class='del'>-        int (*print_brick_from_xl)(xlator_t *xl, loc_t *rootloc);</div><div class='del'>-        int (*print_heal_op_status)(int ret, uint64_t num_entries,</div><div class='del'>-                        char *fmt_str);</div><div class='del'>-        int (*print_heal_op_summary)(int ret, num_entries_t *num_entries);</div><div class='del'>-        int (*print_heal_status)(char *path, uuid_t gfid, char *status);</div><div class='del'>-        int (*print_spb_status)(char *path, uuid_t gfid, char *status);</div><div class='del'>-        int (*end) (int op_ret, char *op_errstr);</div><div class='add'>+    int (*init)(void);</div><div class='add'>+    int (*print_brick_from_xl)(xlator_t *xl, loc_t *rootloc);</div><div class='add'>+    int (*print_heal_op_status)(int ret, uint64_t num_entries, char *fmt_str);</div><div class='add'>+    int (*print_heal_op_summary)(int ret, num_entries_t *num_entries);</div><div class='add'>+    int (*print_heal_status)(char *path, uuid_t gfid, char *status);</div><div class='add'>+    int (*print_spb_status)(char *path, uuid_t gfid, char *status);</div><div class='add'>+    int (*end)(int op_ret, char *op_errstr);</div><div class='ctx'> } glfsh_info_t;</div><div class='ctx'> </div><div class='ctx'> glfsh_info_t *glfsh_output = NULL;</div><div class='ctx'> int32_t is_xml;</div><div class='ctx'> </div><div class='ctx'> #define DEFAULT_HEAL_LOG_FILE_DIRECTORY DATADIR "/log/glusterfs"</div><div class='del'>-#define USAGE_STR "Usage: %s &lt;VOLNAME&gt; [bigger-file &lt;FILE&gt; | "\</div><div class='del'>-                  "latest-mtime &lt;FILE&gt; | "\</div><div class='del'>-                  "source-brick &lt;HOSTNAME:BRICKNAME&gt; [&lt;FILE&gt;] | "\</div><div class='del'>-                  "split-brain-info | info-summary] [glusterd-sock &lt;FILE&gt;"\</div><div class='del'>-                  "]\n"</div><div class='add'>+#define USAGE_STR                                                              \</div><div class='add'>+    "Usage: %s &lt;VOLNAME&gt; [bigger-file &lt;FILE&gt; | "                               \</div><div class='add'>+    "latest-mtime &lt;FILE&gt; | "                                                   \</div><div class='add'>+    "source-brick &lt;HOSTNAME:BRICKNAME&gt; [&lt;FILE&gt;] | "                            \</div><div class='add'>+    "split-brain-info | info-summary] [glusterd-sock &lt;FILE&gt;"                   \</div><div class='add'>+    "]\n"</div><div class='ctx'> </div><div class='ctx'> typedef enum {</div><div class='del'>-        GLFSH_MODE_CONTINUE_ON_ERROR = 1,</div><div class='del'>-        GLFSH_MODE_EXIT_ON_FIRST_FAILURE,</div><div class='add'>+    GLFSH_MODE_CONTINUE_ON_ERROR = 1,</div><div class='add'>+    GLFSH_MODE_EXIT_ON_FIRST_FAILURE,</div><div class='ctx'> } glfsh_fail_mode_t;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_init ()</div><div class='add'>+glfsh_init()</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_end_op_granular_entry_heal (int op_ret, char *op_errstr)</div><div class='add'>+glfsh_end_op_granular_entry_heal(int op_ret, char *op_errstr)</div><div class='ctx'> {</div><div class='del'>-        /* If error string is available, give it higher precedence.*/</div><div class='del'>-</div><div class='del'>-        if (op_errstr) {</div><div class='del'>-                printf ("%s\n", op_errstr);</div><div class='del'>-        } else if (op_ret &lt; 0) {</div><div class='del'>-                if (op_ret == -EAGAIN)</div><div class='del'>-                        printf ("One or more entries need heal. Please execute "</div><div class='del'>-                                "the command again after there are no entries "</div><div class='del'>-                                "to be healed\n");</div><div class='del'>-                else if (op_ret == -ENOTCONN)</div><div class='del'>-                        printf ("One or more bricks could be down. Please "</div><div class='del'>-                                "execute the command again after bringing all "</div><div class='del'>-                                "bricks online and finishing any pending "</div><div class='del'>-                                "heals\n");</div><div class='del'>-                else</div><div class='del'>-                        printf ("Command failed - %s. Please check the logs for"</div><div class='del'>-                                " more details\n", strerror (-op_ret));</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    /* If error string is available, give it higher precedence.*/</div><div class='add'>+</div><div class='add'>+    if (op_errstr) {</div><div class='add'>+        printf("%s\n", op_errstr);</div><div class='add'>+    } else if (op_ret &lt; 0) {</div><div class='add'>+        if (op_ret == -EAGAIN)</div><div class='add'>+            printf(</div><div class='add'>+                "One or more entries need heal. Please execute "</div><div class='add'>+                "the command again after there are no entries "</div><div class='add'>+                "to be healed\n");</div><div class='add'>+        else if (op_ret == -ENOTCONN)</div><div class='add'>+            printf(</div><div class='add'>+                "One or more bricks could be down. Please "</div><div class='add'>+                "execute the command again after bringing all "</div><div class='add'>+                "bricks online and finishing any pending "</div><div class='add'>+                "heals\n");</div><div class='add'>+        else</div><div class='add'>+            printf(</div><div class='add'>+                "Command failed - %s. Please check the logs for"</div><div class='add'>+                " more details\n",</div><div class='add'>+                strerror(-op_ret));</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_end (int op_ret, char *op_errstr)</div><div class='add'>+glfsh_end(int op_ret, char *op_errstr)</div><div class='ctx'> {</div><div class='del'>-        if (op_errstr)</div><div class='del'>-                printf ("%s\n", op_errstr);</div><div class='del'>-        return 0;</div><div class='add'>+    if (op_errstr)</div><div class='add'>+        printf("%s\n", op_errstr);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_hr_spb_status (char *path, uuid_t gfid, char *status)</div><div class='add'>+glfsh_print_hr_spb_status(char *path, uuid_t gfid, char *status)</div><div class='ctx'> {</div><div class='del'>-        printf ("%s\n", path);</div><div class='del'>-        fflush (stdout);</div><div class='del'>-        return 0;</div><div class='add'>+    printf("%s\n", path);</div><div class='add'>+    fflush(stdout);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_no_print_hr_status (char *path, uuid_t gfid, char *status)</div><div class='add'>+glfsh_no_print_hr_status(char *path, uuid_t gfid, char *status)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_hr_heal_status (char *path, uuid_t gfid, char *status)</div><div class='add'>+glfsh_print_hr_heal_status(char *path, uuid_t gfid, char *status)</div><div class='ctx'> {</div><div class='del'>-        printf ("%s%s\n", path, status);</div><div class='del'>-        fflush (stdout);</div><div class='del'>-        return 0;</div><div class='add'>+    printf("%s%s\n", path, status);</div><div class='add'>+    fflush(stdout);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_xml_init ()</div><div class='add'>+glfsh_xml_init()</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='del'>-        glfsh_writer = xmlNewTextWriterDoc (&amp;glfsh_doc, 0);</div><div class='del'>-        if (glfsh_writer == NULL) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterStartDocument (glfsh_writer, "1.0", "UTF-8",</div><div class='del'>-                        "yes");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-        /* &lt;cliOutput&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"cliOutput");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-        /* &lt;healInfo&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"healInfo");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-        /* &lt;bricks&gt; */</div><div class='del'>-        ret = xmlTextWriterStartElement (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"bricks");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-        xmlTextWriterFlush (glfsh_writer);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glfsh_writer = xmlNewTextWriterDoc(&amp;glfsh_doc, 0);</div><div class='add'>+    if (glfsh_writer == NULL) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterStartDocument(glfsh_writer, "1.0", "UTF-8", "yes");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    /* &lt;cliOutput&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(glfsh_writer, (xmlChar *)"cliOutput");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    /* &lt;healInfo&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(glfsh_writer, (xmlChar *)"healInfo");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+    /* &lt;bricks&gt; */</div><div class='add'>+    ret = xmlTextWriterStartElement(glfsh_writer, (xmlChar *)"bricks");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+    xmlTextWriterFlush(glfsh_writer);</div><div class='ctx'> xml_out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_xml_end (int op_ret, char *op_errstr)</div><div class='add'>+glfsh_xml_end(int op_ret, char *op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int                     ret             = -1;</div><div class='del'>-        int                     op_errno        = 0;</div><div class='del'>-        gf_boolean_t            alloc           = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                if (op_errstr == NULL) {</div><div class='del'>-                        op_errstr = gf_strdup (strerror (op_errno));</div><div class='del'>-                        alloc = _gf_true;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                op_errstr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    gf_boolean_t alloc = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        if (op_errstr == NULL) {</div><div class='add'>+            op_errstr = gf_strdup(strerror(op_errno));</div><div class='add'>+            alloc = _gf_true;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* &lt;/bricks&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (glfsh_writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-        /* &lt;/healInfo&gt; */</div><div class='del'>-        ret = xmlTextWriterEndElement (glfsh_writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"opRet", "%d", op_ret);</div><div class='del'>-</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-        ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"opErrno",</div><div class='del'>-                        "%d", op_errno);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-        if (op_errstr)</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"opErrstr",</div><div class='del'>-                                "%s", op_errstr);</div><div class='del'>-        else</div><div class='del'>-                ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"opErrstr",</div><div class='del'>-                                "%s", "");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-        ret = xmlTextWriterEndDocument (glfsh_writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (ret, xml_out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Dump xml document to stdout and pretty format it */</div><div class='del'>-        xmlSaveFormatFileEnc ("-", glfsh_doc, "UTF-8", 1);</div><div class='del'>-</div><div class='del'>-        xmlFreeTextWriter (glfsh_writer);</div><div class='del'>-        xmlFreeDoc (glfsh_doc);</div><div class='add'>+    } else {</div><div class='add'>+        op_errstr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* &lt;/bricks&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(glfsh_writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    /* &lt;/healInfo&gt; */</div><div class='add'>+    ret = xmlTextWriterEndElement(glfsh_writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(glfsh_writer, (xmlChar *)"opRet",</div><div class='add'>+                                          "%d", op_ret);</div><div class='add'>+</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    ret = xmlTextWriterWriteFormatElement(glfsh_writer, (xmlChar *)"opErrno",</div><div class='add'>+                                          "%d", op_errno);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    if (op_errstr)</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"opErrstr", "%s", op_errstr);</div><div class='add'>+    else</div><div class='add'>+        ret = xmlTextWriterWriteFormatElement(glfsh_writer,</div><div class='add'>+                                              (xmlChar *)"opErrstr", "%s", "");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+    ret = xmlTextWriterEndDocument(glfsh_writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(ret, xml_out);</div><div class='add'>+</div><div class='add'>+    /* Dump xml document to stdout and pretty format it */</div><div class='add'>+    xmlSaveFormatFileEnc("-", glfsh_doc, "UTF-8", 1);</div><div class='add'>+</div><div class='add'>+    xmlFreeTextWriter(glfsh_writer);</div><div class='add'>+    xmlFreeDoc(glfsh_doc);</div><div class='ctx'> xml_out:</div><div class='del'>-        if (alloc)</div><div class='del'>-                GF_FREE (op_errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (alloc)</div><div class='add'>+        GF_FREE(op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_xml_heal_op_status (int ret, uint64_t num_entries, char *fmt_str)</div><div class='add'>+glfsh_print_xml_heal_op_status(int ret, uint64_t num_entries, char *fmt_str)</div><div class='ctx'> {</div><div class='del'>-        int x_ret = 0;</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; num_entries == 0) {</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"status",</div><div class='del'>-                                "%s", strerror (-ret));</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                if (fmt_str) {</div><div class='del'>-                        x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                        (xmlChar *)"numberOfEntries",</div><div class='del'>-                                        "-");</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret == 0) {</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                                 (xmlChar *)"status",</div><div class='del'>-                                                 "%s", "Connected");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='add'>+    int x_ret = 0;</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; num_entries == 0) {</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"status", "%s", strerror(-ret));</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        if (fmt_str) {</div><div class='add'>+            x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                glfsh_writer, (xmlChar *)"numberOfEntries", "-");</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (fmt_str) {</div><div class='del'>-                        x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                        (xmlChar *)"status",</div><div class='del'>-                                        "Failed to process entries completely. "</div><div class='del'>-                                        "(%s)%s %"PRIu64"", strerror (-ret),</div><div class='del'>-                                        fmt_str,</div><div class='del'>-                                        num_entries);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                if (fmt_str) {</div><div class='del'>-                        x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                        (xmlChar *)"numberOfEntries",</div><div class='del'>-                                        "%"PRIu64"", num_entries);</div><div class='del'>-                        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                }</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret == 0) {</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"status", "%s", "Connected");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (fmt_str) {</div><div class='add'>+            x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                glfsh_writer, (xmlChar *)"status",</div><div class='add'>+                "Failed to process entries completely. "</div><div class='add'>+                "(%s)%s %" PRIu64 "",</div><div class='add'>+                strerror(-ret), fmt_str, num_entries);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (fmt_str) {</div><div class='add'>+            x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+                glfsh_writer, (xmlChar *)"numberOfEntries", "%" PRIu64 "",</div><div class='add'>+                num_entries);</div><div class='add'>+            XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='add'>+    if (x_ret &gt;= 0) {</div><div class='add'>+        x_ret = xmlTextWriterEndElement(glfsh_writer);</div><div class='ctx'>         if (x_ret &gt;= 0) {</div><div class='del'>-                x_ret = xmlTextWriterEndElement (glfsh_writer);</div><div class='del'>-                if (x_ret &gt;= 0) {</div><div class='del'>-                        xmlTextWriterFlush (glfsh_writer);</div><div class='del'>-                        x_ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        x_ret = -1;</div><div class='del'>-                }</div><div class='add'>+            xmlTextWriterFlush(glfsh_writer);</div><div class='add'>+            x_ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            x_ret = -1;</div><div class='ctx'>         }</div><div class='del'>-        return x_ret;</div><div class='add'>+    }</div><div class='add'>+    return x_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_xml_heal_op_summary (int ret, num_entries_t *num_entries)</div><div class='add'>+glfsh_print_xml_heal_op_summary(int ret, num_entries_t *num_entries)</div><div class='ctx'> {</div><div class='del'>-        int x_ret = 0;</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; num_entries == 0) {</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"status",</div><div class='del'>-                                "%s", strerror (-ret));</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"totalNumberOfEntries", "-");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"numberOfEntriesInHealPending", "-");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"numberOfEntriesInSplitBrain", "-");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"numberOfEntriesPossiblyHealing",</div><div class='del'>-                                "-");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret == 0) {</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                                 (xmlChar *)"status",</div><div class='del'>-                                                 "%s", "Connected");</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"status", "Failed to process entries"</div><div class='del'>-                                " completely. "</div><div class='del'>-                                "(%s)totalNumberOfEntries%"PRIu64"",</div><div class='del'>-                                strerror (-ret), num_entries-&gt;num_entries);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        } else {</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"totalNumberOfEntries",</div><div class='del'>-                                "%"PRIu64"", num_entries-&gt;num_entries);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"numberOfEntriesInHealPending",</div><div class='del'>-                                "%"PRIu64"", num_entries-&gt;pending_entries);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"numberOfEntriesInSplitBrain",</div><div class='del'>-                                "%"PRIu64"", num_entries-&gt;spb_entries);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-                x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                                (xmlChar *)"numberOfEntriesPossiblyHealing",</div><div class='del'>-                                "%"PRIu64"",</div><div class='del'>-                                num_entries-&gt;possibly_healing_entries);</div><div class='del'>-                XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        }</div><div class='add'>+    int x_ret = 0;</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; num_entries == 0) {</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"status", "%s", strerror(-ret));</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"totalNumberOfEntries", "-");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"numberOfEntriesInHealPending", "-");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"numberOfEntriesInSplitBrain", "-");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"numberOfEntriesPossiblyHealing", "-");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret == 0) {</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"status", "%s", "Connected");</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"status",</div><div class='add'>+            "Failed to process entries"</div><div class='add'>+            " completely. "</div><div class='add'>+            "(%s)totalNumberOfEntries%" PRIu64 "",</div><div class='add'>+            strerror(-ret), num_entries-&gt;num_entries);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    } else {</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"totalNumberOfEntries", "%" PRIu64 "",</div><div class='add'>+            num_entries-&gt;num_entries);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"numberOfEntriesInHealPending",</div><div class='add'>+            "%" PRIu64 "", num_entries-&gt;pending_entries);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"numberOfEntriesInSplitBrain",</div><div class='add'>+            "%" PRIu64 "", num_entries-&gt;spb_entries);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+        x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+            glfsh_writer, (xmlChar *)"numberOfEntriesPossiblyHealing",</div><div class='add'>+            "%" PRIu64 "", num_entries-&gt;possibly_healing_entries);</div><div class='add'>+        XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (x_ret &gt;= 0) {</div><div class='del'>-                x_ret = xmlTextWriterEndElement (glfsh_writer);</div><div class='del'>-        }</div><div class='del'>-        return x_ret;</div><div class='add'>+    if (x_ret &gt;= 0) {</div><div class='add'>+        x_ret = xmlTextWriterEndElement(glfsh_writer);</div><div class='add'>+    }</div><div class='add'>+    return x_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_xml_file_status (char *path, uuid_t gfid, char *status)</div><div class='add'>+glfsh_print_xml_file_status(char *path, uuid_t gfid, char *status)</div><div class='ctx'> {</div><div class='del'>-        int x_ret = 0;</div><div class='del'>-</div><div class='del'>-        x_ret = xmlTextWriterStartElement (glfsh_writer, (xmlChar *)"file");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        x_ret = xmlTextWriterWriteFormatAttribute (glfsh_writer,</div><div class='del'>-                                                   (xmlChar *)"gfid",</div><div class='del'>-                                                   "%s", uuid_utoa (gfid));</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        x_ret = xmlTextWriterWriteFormatString (glfsh_writer, "%s", path);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        x_ret = xmlTextWriterEndElement (glfsh_writer);</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, out);</div><div class='del'>-        xmlTextWriterFlush (glfsh_writer);</div><div class='add'>+    int x_ret = 0;</div><div class='add'>+</div><div class='add'>+    x_ret = xmlTextWriterStartElement(glfsh_writer, (xmlChar *)"file");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    x_ret = xmlTextWriterWriteFormatAttribute(glfsh_writer, (xmlChar *)"gfid",</div><div class='add'>+                                              "%s", uuid_utoa(gfid));</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    x_ret = xmlTextWriterWriteFormatString(glfsh_writer, "%s", path);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    x_ret = xmlTextWriterEndElement(glfsh_writer);</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, out);</div><div class='add'>+    xmlTextWriterFlush(glfsh_writer);</div><div class='ctx'> out:</div><div class='del'>-        return x_ret;</div><div class='add'>+    return x_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_xml_brick_from_xl (xlator_t *xl, loc_t *rootloc)</div><div class='add'>+glfsh_print_xml_brick_from_xl(xlator_t *xl, loc_t *rootloc)</div><div class='ctx'> {</div><div class='del'>-        char    *remote_host = NULL;</div><div class='del'>-        char    *remote_subvol = NULL;</div><div class='del'>-        char    *uuid = NULL;</div><div class='del'>-        int     ret = 0;</div><div class='del'>-        int     x_ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (xl-&gt;options, "remote-host", &amp;remote_host);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto print;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (xl-&gt;options, "remote-subvolume", &amp;remote_subvol);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto print;</div><div class='del'>-        ret = syncop_getxattr (xl, rootloc, &amp;xl-&gt;options,</div><div class='del'>-                        GF_XATTR_NODE_UUID_KEY, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto print;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (xl-&gt;options, GF_XATTR_NODE_UUID_KEY, &amp;uuid);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto print;</div><div class='add'>+    char *remote_host = NULL;</div><div class='add'>+    char *remote_subvol = NULL;</div><div class='add'>+    char *uuid = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int x_ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(xl-&gt;options, "remote-host", &amp;remote_host);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto print;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(xl-&gt;options, "remote-subvolume", &amp;remote_subvol);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto print;</div><div class='add'>+    ret = syncop_getxattr(xl, rootloc, &amp;xl-&gt;options, GF_XATTR_NODE_UUID_KEY,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto print;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(xl-&gt;options, GF_XATTR_NODE_UUID_KEY, &amp;uuid);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto print;</div><div class='ctx'> print:</div><div class='ctx'> </div><div class='del'>-        x_ret = xmlTextWriterStartElement (glfsh_writer, (xmlChar *)"brick");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, xml_out);</div><div class='del'>-        x_ret = xmlTextWriterWriteFormatAttribute (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"hostUuid", "%s", uuid?uuid:"-");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, xml_out);</div><div class='del'>-</div><div class='del'>-        x_ret = xmlTextWriterWriteFormatElement (glfsh_writer,</div><div class='del'>-                        (xmlChar *)"name", "%s:%s",</div><div class='del'>-                        remote_host ? remote_host : "-",</div><div class='del'>-                        remote_subvol ? remote_subvol : "-");</div><div class='del'>-        XML_RET_CHECK_AND_GOTO (x_ret, xml_out);</div><div class='del'>-        xmlTextWriterFlush (glfsh_writer);</div><div class='add'>+    x_ret = xmlTextWriterStartElement(glfsh_writer, (xmlChar *)"brick");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, xml_out);</div><div class='add'>+    x_ret = xmlTextWriterWriteFormatAttribute(</div><div class='add'>+        glfsh_writer, (xmlChar *)"hostUuid", "%s", uuid ? uuid : "-");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, xml_out);</div><div class='add'>+</div><div class='add'>+    x_ret = xmlTextWriterWriteFormatElement(</div><div class='add'>+        glfsh_writer, (xmlChar *)"name", "%s:%s",</div><div class='add'>+        remote_host ? remote_host : "-", remote_subvol ? remote_subvol : "-");</div><div class='add'>+    XML_RET_CHECK_AND_GOTO(x_ret, xml_out);</div><div class='add'>+    xmlTextWriterFlush(glfsh_writer);</div><div class='ctx'> xml_out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_link_inode_update_loc (loc_t *loc, struct iatt *iattr)</div><div class='add'>+glfsh_link_inode_update_loc(loc_t *loc, struct iatt *iattr)</div><div class='ctx'> {</div><div class='del'>-        inode_t       *link_inode = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='add'>+    inode_t *link_inode = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        link_inode = inode_link (loc-&gt;inode, NULL, NULL, iattr);</div><div class='del'>-        if (link_inode == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    link_inode = inode_link(loc-&gt;inode, NULL, NULL, iattr);</div><div class='add'>+    if (link_inode == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        inode_unref (loc-&gt;inode);</div><div class='del'>-        loc-&gt;inode = link_inode;</div><div class='del'>-        ret = 0;</div><div class='add'>+    inode_unref(loc-&gt;inode);</div><div class='add'>+    loc-&gt;inode = link_inode;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_no_print_hr_heal_op_status (int ret, uint64_t num_entries, char *fmt_str)</div><div class='add'>+glfsh_no_print_hr_heal_op_status(int ret, uint64_t num_entries, char *fmt_str)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_hr_heal_op_summary (int ret, num_entries_t *num_entries)</div><div class='add'>+glfsh_print_hr_heal_op_summary(int ret, num_entries_t *num_entries)</div><div class='ctx'> {</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; num_entries-&gt;num_entries == 0) {</div><div class='del'>-                printf ("Status: %s\n", strerror (-ret));</div><div class='del'>-                printf ("Total Number of entries: -\n");</div><div class='del'>-                printf ("Number of entries in heal pending: -\n");</div><div class='del'>-                printf ("Number of entries in split-brain: -\n");</div><div class='del'>-                printf ("Number of entries possibly healing: -\n");</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret == 0) {</div><div class='del'>-                printf ("Status: Connected\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                printf ("Status: Failed to process entries completely. "</div><div class='del'>-                        "(%s)\nTotal Number of entries: %"PRIu64"\n",</div><div class='del'>-                        strerror (-ret), num_entries-&gt;num_entries);</div><div class='del'>-        } else {</div><div class='del'>-                printf ("Total Number of entries: %"PRIu64"\n",</div><div class='del'>-                        num_entries-&gt;num_entries);</div><div class='del'>-                printf ("Number of entries in heal pending: %"PRIu64"\n",</div><div class='del'>-                        num_entries-&gt;pending_entries);</div><div class='del'>-                printf ("Number of entries in split-brain: %"PRIu64"\n",</div><div class='del'>-                        num_entries-&gt;spb_entries);</div><div class='del'>-                printf ("Number of entries possibly healing: %"PRIu64"\n",</div><div class='del'>-                        num_entries-&gt;possibly_healing_entries);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; num_entries-&gt;num_entries == 0) {</div><div class='add'>+        printf("Status: %s\n", strerror(-ret));</div><div class='add'>+        printf("Total Number of entries: -\n");</div><div class='add'>+        printf("Number of entries in heal pending: -\n");</div><div class='add'>+        printf("Number of entries in split-brain: -\n");</div><div class='add'>+        printf("Number of entries possibly healing: -\n");</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret == 0) {</div><div class='add'>+        printf("Status: Connected\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        printf(</div><div class='add'>+            "Status: Failed to process entries completely. "</div><div class='add'>+            "(%s)\nTotal Number of entries: %" PRIu64 "\n",</div><div class='add'>+            strerror(-ret), num_entries-&gt;num_entries);</div><div class='add'>+    } else {</div><div class='add'>+        printf("Total Number of entries: %" PRIu64 "\n",</div><div class='add'>+               num_entries-&gt;num_entries);</div><div class='add'>+        printf("Number of entries in heal pending: %" PRIu64 "\n",</div><div class='add'>+               num_entries-&gt;pending_entries);</div><div class='add'>+        printf("Number of entries in split-brain: %" PRIu64 "\n",</div><div class='add'>+               num_entries-&gt;spb_entries);</div><div class='add'>+        printf("Number of entries possibly healing: %" PRIu64 "\n",</div><div class='add'>+               num_entries-&gt;possibly_healing_entries);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        printf ("\n");</div><div class='del'>-        fflush (stdout);</div><div class='del'>-        return 0;</div><div class='add'>+    printf("\n");</div><div class='add'>+    fflush(stdout);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_hr_heal_op_status (int ret, uint64_t num_entries, char *fmt_str)</div><div class='add'>+glfsh_print_hr_heal_op_status(int ret, uint64_t num_entries, char *fmt_str)</div><div class='ctx'> {</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; num_entries == 0) {</div><div class='del'>-                printf ("Status: %s\n", strerror (-ret));</div><div class='del'>-                if (fmt_str)</div><div class='del'>-                        printf ("%s -\n", fmt_str);</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret == 0) {</div><div class='del'>-                printf ("Status: Connected\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (fmt_str)</div><div class='del'>-                        printf ("Status: Failed to process entries completely. "</div><div class='del'>-                                "(%s)\n%s %"PRIu64"\n",</div><div class='del'>-                         strerror (-ret), fmt_str, num_entries);</div><div class='del'>-        } else {</div><div class='del'>-                if (fmt_str)</div><div class='del'>-                        printf ("%s %"PRIu64"\n", fmt_str, num_entries);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; num_entries == 0) {</div><div class='add'>+        printf("Status: %s\n", strerror(-ret));</div><div class='add'>+        if (fmt_str)</div><div class='add'>+            printf("%s -\n", fmt_str);</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret == 0) {</div><div class='add'>+        printf("Status: Connected\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (fmt_str)</div><div class='add'>+            printf(</div><div class='add'>+                "Status: Failed to process entries completely. "</div><div class='add'>+                "(%s)\n%s %" PRIu64 "\n",</div><div class='add'>+                strerror(-ret), fmt_str, num_entries);</div><div class='add'>+    } else {</div><div class='add'>+        if (fmt_str)</div><div class='add'>+            printf("%s %" PRIu64 "\n", fmt_str, num_entries);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        printf ("\n");</div><div class='del'>-        return 0;</div><div class='add'>+    printf("\n");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_info_summary (int ret, num_entries_t *num_entries)</div><div class='add'>+glfsh_print_info_summary(int ret, num_entries_t *num_entries)</div><div class='ctx'> {</div><div class='del'>-        return glfsh_output-&gt;print_heal_op_summary (ret, num_entries);</div><div class='del'>-</div><div class='add'>+    return glfsh_output-&gt;print_heal_op_summary(ret, num_entries);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_heal_op_status (int ret, uint64_t num_entries,</div><div class='del'>-                            gf_xl_afr_op_t heal_op)</div><div class='add'>+glfsh_print_heal_op_status(int ret, uint64_t num_entries,</div><div class='add'>+                           gf_xl_afr_op_t heal_op)</div><div class='ctx'> {</div><div class='del'>-        char *fmt_str = NULL;</div><div class='add'>+    char *fmt_str = NULL;</div><div class='ctx'> </div><div class='del'>-        if (heal_op == GF_SHD_OP_INDEX_SUMMARY)</div><div class='del'>-                fmt_str = "Number of entries:";</div><div class='del'>-        else if (heal_op == GF_SHD_OP_SPLIT_BRAIN_FILES)</div><div class='del'>-                fmt_str = "Number of entries in split-brain:";</div><div class='del'>-        else if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK)</div><div class='del'>-                fmt_str = "Number of healed entries:";</div><div class='add'>+    if (heal_op == GF_SHD_OP_INDEX_SUMMARY)</div><div class='add'>+        fmt_str = "Number of entries:";</div><div class='add'>+    else if (heal_op == GF_SHD_OP_SPLIT_BRAIN_FILES)</div><div class='add'>+        fmt_str = "Number of entries in split-brain:";</div><div class='add'>+    else if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK)</div><div class='add'>+        fmt_str = "Number of healed entries:";</div><div class='ctx'> </div><div class='del'>-        return glfsh_output-&gt;print_heal_op_status (ret, num_entries, fmt_str);</div><div class='add'>+    return glfsh_output-&gt;print_heal_op_status(ret, num_entries, fmt_str);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_get_index_dir_loc (loc_t *rootloc, xlator_t *xl, loc_t *dirloc,</div><div class='del'>-                         int32_t *op_errno, char *vgfid)</div><div class='add'>+glfsh_get_index_dir_loc(loc_t *rootloc, xlator_t *xl, loc_t *dirloc,</div><div class='add'>+                        int32_t *op_errno, char *vgfid)</div><div class='ctx'> {</div><div class='del'>-        void      *index_gfid = NULL;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-        dict_t    *xattr = NULL;</div><div class='del'>-        struct iatt   iattr = {0};</div><div class='del'>-        struct iatt   parent = {0};</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (xl, rootloc, &amp;xattr, vgfid, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *op_errno = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_ptr (xattr, vgfid, &amp;index_gfid);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (dirloc-&gt;gfid, index_gfid);</div><div class='del'>-        dirloc-&gt;path = "";</div><div class='del'>-        dirloc-&gt;inode = inode_new (rootloc-&gt;inode-&gt;table);</div><div class='del'>-        ret = syncop_lookup (xl, dirloc, &amp;iattr, &amp;parent, NULL, NULL);</div><div class='del'>-        dirloc-&gt;path = NULL;</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *op_errno = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfsh_link_inode_update_loc (dirloc, &amp;iattr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = glfs_loc_touchup (dirloc);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *op_errno = errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    void *index_gfid = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    struct iatt iattr = {0};</div><div class='add'>+    struct iatt parent = {0};</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(xl, rootloc, &amp;xattr, vgfid, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_ptr(xattr, vgfid, &amp;index_gfid);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(dirloc-&gt;gfid, index_gfid);</div><div class='add'>+    dirloc-&gt;path = "";</div><div class='add'>+    dirloc-&gt;inode = inode_new(rootloc-&gt;inode-&gt;table);</div><div class='add'>+    ret = syncop_lookup(xl, dirloc, &amp;iattr, &amp;parent, NULL, NULL);</div><div class='add'>+    dirloc-&gt;path = NULL;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfsh_link_inode_update_loc(dirloc, &amp;iattr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfs_loc_touchup(dirloc);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *op_errno = errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static xlator_t*</div><div class='del'>-_get_ancestor (xlator_t *xl, gf_xl_afr_op_t heal_op)</div><div class='add'>+static xlator_t *</div><div class='add'>+_get_ancestor(xlator_t *xl, gf_xl_afr_op_t heal_op)</div><div class='ctx'> {</div><div class='del'>-        static char *replica_xl[] = {"cluster/replicate", NULL};</div><div class='del'>-        static char *heal_xls[] = {"cluster/replicate", "cluster/disperse",</div><div class='del'>-                                         NULL};</div><div class='del'>-        char **ancestors = NULL;</div><div class='del'>-</div><div class='del'>-        if (heal_op == GF_SHD_OP_INDEX_SUMMARY ||</div><div class='del'>-            heal_op == GF_SHD_OP_HEAL_SUMMARY)</div><div class='del'>-                ancestors = heal_xls;</div><div class='del'>-        else</div><div class='del'>-                ancestors = replica_xl;</div><div class='add'>+    static char *replica_xl[] = {"cluster/replicate", NULL};</div><div class='add'>+    static char *heal_xls[] = {"cluster/replicate", "cluster/disperse", NULL};</div><div class='add'>+    char **ancestors = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!xl || !xl-&gt;parents)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        while (xl-&gt;parents) {</div><div class='del'>-                xl = xl-&gt;parents-&gt;xlator;</div><div class='del'>-                if (!xl)</div><div class='del'>-                        break;</div><div class='del'>-                if (gf_get_index_by_elem (ancestors, xl-&gt;type) != -1)</div><div class='del'>-                        return xl;</div><div class='del'>-        }</div><div class='add'>+    if (heal_op == GF_SHD_OP_INDEX_SUMMARY || heal_op == GF_SHD_OP_HEAL_SUMMARY)</div><div class='add'>+        ancestors = heal_xls;</div><div class='add'>+    else</div><div class='add'>+        ancestors = replica_xl;</div><div class='ctx'> </div><div class='add'>+    if (!xl || !xl-&gt;parents)</div><div class='ctx'>         return NULL;</div><div class='add'>+</div><div class='add'>+    while (xl-&gt;parents) {</div><div class='add'>+        xl = xl-&gt;parents-&gt;xlator;</div><div class='add'>+        if (!xl)</div><div class='add'>+            break;</div><div class='add'>+        if (gf_get_index_by_elem(ancestors, xl-&gt;type) != -1)</div><div class='add'>+            return xl;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_index_purge (xlator_t *subvol, inode_t *inode, char *name)</div><div class='add'>+glfsh_index_purge(xlator_t *subvol, inode_t *inode, char *name)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0, };</div><div class='del'>-        int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        loc.parent = inode_ref (inode);</div><div class='del'>-        loc.name = name;</div><div class='add'>+    loc.parent = inode_ref(inode);</div><div class='add'>+    loc.name = name;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_unlink (subvol, &amp;loc, NULL, NULL);</div><div class='add'>+    ret = syncop_unlink(subvol, &amp;loc, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_summary_status (dict_t *dict, char *path, uuid_t gfid,</div><div class='del'>-                            num_entries_t *num_entries, gf_boolean_t flag)</div><div class='add'>+glfsh_print_summary_status(dict_t *dict, char *path, uuid_t gfid,</div><div class='add'>+                           num_entries_t *num_entries, gf_boolean_t flag)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = 0;</div><div class='del'>-        char    *value  = NULL;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "heal-info", &amp;value);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if ((!strcmp (value, "heal")) || (!strcmp (value, "heal-pending"))) {</div><div class='del'>-                (num_entries-&gt;pending_entries)++;</div><div class='del'>-        } else if ((!strcmp (value, "split-brain")) ||</div><div class='del'>-                        (!strcmp (value, "split-brain-pending"))) {</div><div class='del'>-                (num_entries-&gt;spb_entries)++;</div><div class='del'>-        } else if ((!strcmp (value, "possibly-healing-pending")) ||</div><div class='del'>-                        (!strcmp (value, "possibly-healing"))) {</div><div class='del'>-                (num_entries-&gt;possibly_healing_entries)++;</div><div class='del'>-        } else {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        (num_entries-&gt;num_entries)++;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "heal-info", &amp;value);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if ((!strcmp(value, "heal")) || (!strcmp(value, "heal-pending"))) {</div><div class='add'>+        (num_entries-&gt;pending_entries)++;</div><div class='add'>+    } else if ((!strcmp(value, "split-brain")) ||</div><div class='add'>+               (!strcmp(value, "split-brain-pending"))) {</div><div class='add'>+        (num_entries-&gt;spb_entries)++;</div><div class='add'>+    } else if ((!strcmp(value, "possibly-healing-pending")) ||</div><div class='add'>+               (!strcmp(value, "possibly-healing"))) {</div><div class='add'>+        (num_entries-&gt;possibly_healing_entries)++;</div><div class='add'>+    } else {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    (num_entries-&gt;num_entries)++;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_spb_status (dict_t *dict, char *path, uuid_t gfid,</div><div class='del'>-                        num_entries_t *num_entries, gf_boolean_t flag)</div><div class='add'>+glfsh_print_spb_status(dict_t *dict, char *path, uuid_t gfid,</div><div class='add'>+                       num_entries_t *num_entries, gf_boolean_t flag)</div><div class='ctx'> {</div><div class='del'>-        int   ret    = 0;</div><div class='del'>-        gf_boolean_t    pending         = _gf_false;</div><div class='del'>-        gf_boolean_t    split_b         = _gf_false;</div><div class='del'>-        char            *value          = NULL;</div><div class='del'>-        char            gfid_str[64]    = {0};</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "heal-info", &amp;value);</div><div class='del'>-        if (ret)</div><div class='del'>-                return 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t pending = _gf_false;</div><div class='add'>+    gf_boolean_t split_b = _gf_false;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char gfid_str[64] = {0};</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "heal-info", &amp;value);</div><div class='add'>+    if (ret)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (value, "split-brain")) {</div><div class='del'>-                split_b = _gf_true;</div><div class='del'>-        } else if (!strcmp (value, "split-brain-pending")) {</div><div class='del'>-                split_b = _gf_true;</div><div class='del'>-                pending = _gf_true;</div><div class='add'>+    if (!strcmp(value, "split-brain")) {</div><div class='add'>+        split_b = _gf_true;</div><div class='add'>+    } else if (!strcmp(value, "split-brain-pending")) {</div><div class='add'>+        split_b = _gf_true;</div><div class='add'>+        pending = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    /* Consider the entry only iff :</div><div class='add'>+     * 1) The dir being processed is not indices/dirty, indicated by</div><div class='add'>+     *    flag == _gf_false</div><div class='add'>+     * 2) The dir being processed is indices/dirty but the entry also</div><div class='add'>+     *    exists in indices/xattrop dir and has already been processed.</div><div class='add'>+     */</div><div class='add'>+    if (split_b) {</div><div class='add'>+        if (!flag || (flag &amp;&amp; !pending)) {</div><div class='add'>+            (num_entries-&gt;num_entries)++;</div><div class='add'>+            glfsh_output-&gt;print_spb_status(</div><div class='add'>+                path ? path : uuid_utoa_r(gfid, gfid_str), gfid, NULL);</div><div class='ctx'>         }</div><div class='del'>-        /* Consider the entry only iff :</div><div class='del'>-         * 1) The dir being processed is not indices/dirty, indicated by</div><div class='del'>-         *    flag == _gf_false</div><div class='del'>-         * 2) The dir being processed is indices/dirty but the entry also</div><div class='del'>-         *    exists in indices/xattrop dir and has already been processed.</div><div class='del'>-         */</div><div class='del'>-        if (split_b) {</div><div class='del'>-                if (!flag || (flag &amp;&amp; !pending)) {</div><div class='del'>-                        (num_entries-&gt;num_entries)++;</div><div class='del'>-                        glfsh_output-&gt;print_spb_status (path ? path :</div><div class='del'>-                                                uuid_utoa_r (gfid, gfid_str),</div><div class='del'>-                                                gfid, NULL);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_heal_status (dict_t *dict, char *path, uuid_t gfid,</div><div class='del'>-                         num_entries_t *num_entries,</div><div class='del'>-                         gf_boolean_t ignore_dirty)</div><div class='add'>+glfsh_print_heal_status(dict_t *dict, char *path, uuid_t gfid,</div><div class='add'>+                        num_entries_t *num_entries, gf_boolean_t ignore_dirty)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = 0;</div><div class='del'>-        gf_boolean_t    pending         = _gf_false;</div><div class='del'>-        char            *status         = NULL;</div><div class='del'>-        char            *value          = NULL;</div><div class='del'>-        char            gfid_str[64]    = {0};</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, "heal-info", &amp;value);</div><div class='del'>-        if (ret || (!strcmp (value, "no-heal")))</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        if (!strcmp (value, "heal")) {</div><div class='del'>-                ret = gf_asprintf (&amp;status, " ");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (!strcmp (value, "possibly-healing")) {</div><div class='del'>-                ret = gf_asprintf (&amp;status,</div><div class='del'>-                                   " - Possibly undergoing heal");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (!strcmp (value, "split-brain")) {</div><div class='del'>-                ret = gf_asprintf (&amp;status, " - Is in split-brain");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (!strcmp (value, "heal-pending")) {</div><div class='del'>-                pending = _gf_true;</div><div class='del'>-                ret = gf_asprintf (&amp;status, " ");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (!strcmp (value, "split-brain-pending")) {</div><div class='del'>-                pending = _gf_true;</div><div class='del'>-                ret = gf_asprintf (&amp;status, " - Is in split-brain");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (!strcmp (value, "possibly-healing-pending")) {</div><div class='del'>-                pending = _gf_true;</div><div class='del'>-                ret = gf_asprintf (&amp;status,</div><div class='del'>-                                   " - Possibly undergoing heal");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t pending = _gf_false;</div><div class='add'>+    char *status = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char gfid_str[64] = {0};</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, "heal-info", &amp;value);</div><div class='add'>+    if (ret || (!strcmp(value, "no-heal")))</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(value, "heal")) {</div><div class='add'>+        ret = gf_asprintf(&amp;status, " ");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (!strcmp(value, "possibly-healing")) {</div><div class='add'>+        ret = gf_asprintf(&amp;status, " - Possibly undergoing heal");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (!strcmp(value, "split-brain")) {</div><div class='add'>+        ret = gf_asprintf(&amp;status, " - Is in split-brain");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (!strcmp(value, "heal-pending")) {</div><div class='add'>+        pending = _gf_true;</div><div class='add'>+        ret = gf_asprintf(&amp;status, " ");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (!strcmp(value, "split-brain-pending")) {</div><div class='add'>+        pending = _gf_true;</div><div class='add'>+        ret = gf_asprintf(&amp;status, " - Is in split-brain");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (!strcmp(value, "possibly-healing-pending")) {</div><div class='add'>+        pending = _gf_true;</div><div class='add'>+        ret = gf_asprintf(&amp;status, " - Possibly undergoing heal");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        /* If ignore_dirty is set, it means indices/dirty directory is</div><div class='del'>-         * being processed. Ignore the entry if it also exists in</div><div class='del'>-         * indices/xattrop.</div><div class='del'>-         * Boolean pending is set to true if the entry also exists in</div><div class='del'>-         * indices/xattrop directory.</div><div class='del'>-         */</div><div class='del'>-        if (ignore_dirty) {</div><div class='del'>-                if (pending) {</div><div class='del'>-                        GF_FREE (status);</div><div class='del'>-                        status = NULL;</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    /* If ignore_dirty is set, it means indices/dirty directory is</div><div class='add'>+     * being processed. Ignore the entry if it also exists in</div><div class='add'>+     * indices/xattrop.</div><div class='add'>+     * Boolean pending is set to true if the entry also exists in</div><div class='add'>+     * indices/xattrop directory.</div><div class='add'>+     */</div><div class='add'>+    if (ignore_dirty) {</div><div class='add'>+        if (pending) {</div><div class='add'>+            GF_FREE(status);</div><div class='add'>+            status = NULL;</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                status = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        status = NULL;</div><div class='ctx'> </div><div class='del'>-        (num_entries-&gt;num_entries)++;</div><div class='del'>-        glfsh_output-&gt;print_heal_status (path ? path :</div><div class='del'>-                                         uuid_utoa_r (gfid, gfid_str),</div><div class='del'>-                                         gfid,</div><div class='del'>-                                         status ? status : "");</div><div class='add'>+    (num_entries-&gt;num_entries)++;</div><div class='add'>+    glfsh_output-&gt;print_heal_status(path ? path : uuid_utoa_r(gfid, gfid_str),</div><div class='add'>+                                    gfid, status ? status : "");</div><div class='ctx'> </div><div class='del'>-        GF_FREE (status);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(status);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_heal_status_boolean (dict_t *dict, char *path, uuid_t gfid,</div><div class='del'>-                           num_entries_t *num_entries, gf_boolean_t ignore_dirty)</div><div class='add'>+glfsh_heal_status_boolean(dict_t *dict, char *path, uuid_t gfid,</div><div class='add'>+                          num_entries_t *num_entries, gf_boolean_t ignore_dirty)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = 0;</div><div class='del'>-        char            *value          = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *value = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, "heal-info", &amp;value);</div><div class='del'>-        if ((!ret) &amp;&amp; (!strcmp (value, "no-heal")))</div><div class='del'>-                return 0;</div><div class='del'>-        else</div><div class='del'>-                return -1;</div><div class='add'>+    ret = dict_get_str(dict, "heal-info", &amp;value);</div><div class='add'>+    if ((!ret) &amp;&amp; (!strcmp(value, "no-heal")))</div><div class='add'>+        return 0;</div><div class='add'>+    else</div><div class='add'>+        return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glfsh_heal_entries (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                    gf_dirent_t *entries,  uint64_t *offset,</div><div class='del'>-                    num_entries_t *num_entries, dict_t *xattr_req) {</div><div class='del'>-</div><div class='del'>-        gf_dirent_t      *entry          = NULL;</div><div class='del'>-        gf_dirent_t      *tmp            = NULL;</div><div class='del'>-        int               ret            = 0;</div><div class='del'>-        char              file[64]      = {0};</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (entry, tmp, &amp;entries-&gt;list, list) {</div><div class='del'>-                *offset = entry-&gt;d_off;</div><div class='del'>-                if ((strcmp (entry-&gt;d_name, ".") == 0) ||</div><div class='del'>-                    (strcmp (entry-&gt;d_name, "..") == 0))</div><div class='del'>-                        continue;</div><div class='del'>-                snprintf (file, sizeof(file), "gfid:%s", entry-&gt;d_name);</div><div class='del'>-                ret = glfsh_heal_splitbrain_file (fs, top_subvol, rootloc, file,</div><div class='del'>-                                                 xattr_req);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-                (num_entries-&gt;num_entries)++;</div><div class='del'>-        }</div><div class='add'>+glfsh_heal_entries(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                   gf_dirent_t *entries, uint64_t *offset,</div><div class='add'>+                   num_entries_t *num_entries, dict_t *xattr_req)</div><div class='add'>+{</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char file[64] = {0};</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(entry, tmp, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        *offset = entry-&gt;d_off;</div><div class='add'>+        if ((strcmp(entry-&gt;d_name, ".") == 0) ||</div><div class='add'>+            (strcmp(entry-&gt;d_name, "..") == 0))</div><div class='add'>+            continue;</div><div class='add'>+        snprintf(file, sizeof(file), "gfid:%s", entry-&gt;d_name);</div><div class='add'>+        ret = glfsh_heal_splitbrain_file(fs, top_subvol, rootloc, file,</div><div class='add'>+                                         xattr_req);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='add'>+        (num_entries-&gt;num_entries)++;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfsh_process_entries (xlator_t *xl, fd_t *fd, gf_dirent_t *entries,</div><div class='del'>-                       uint64_t *offset, num_entries_t *num_entries,</div><div class='del'>-                       print_status glfsh_print_status,</div><div class='del'>-                       gf_boolean_t ignore_dirty, glfsh_fail_mode_t mode)</div><div class='add'>+glfsh_process_entries(xlator_t *xl, fd_t *fd, gf_dirent_t *entries,</div><div class='add'>+                      uint64_t *offset, num_entries_t *num_entries,</div><div class='add'>+                      print_status glfsh_print_status,</div><div class='add'>+                      gf_boolean_t ignore_dirty, glfsh_fail_mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t      *entry = NULL;</div><div class='del'>-        gf_dirent_t      *tmp = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        int              print_status = 0;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        uuid_t          gfid = {0};</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-        dict_t          *dict = NULL;</div><div class='del'>-        loc_t           loc   = {0,};</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (entry, tmp, &amp;entries-&gt;list, list) {</div><div class='del'>-                *offset = entry-&gt;d_off;</div><div class='del'>-                if ((strcmp (entry-&gt;d_name, ".") == 0) ||</div><div class='del'>-                    (strcmp (entry-&gt;d_name, "..") == 0))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (dict) {</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-                        dict = NULL;</div><div class='del'>-                }</div><div class='del'>-                gf_uuid_clear (gfid);</div><div class='del'>-                GF_FREE (path);</div><div class='del'>-                path = NULL;</div><div class='del'>-</div><div class='del'>-                gf_uuid_parse (entry-&gt;d_name, gfid);</div><div class='del'>-                gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-                ret = syncop_getxattr (this, &amp;loc, &amp;dict, GF_HEAL_INFO, NULL,</div><div class='del'>-                                       NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        if ((mode != GLFSH_MODE_CONTINUE_ON_ERROR) &amp;&amp;</div><div class='del'>-                            (ret == -ENOTCONN))</div><div class='del'>-                                goto out;</div><div class='del'>-                        else</div><div class='del'>-                                continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_gfid_to_path (this-&gt;itable, xl, gfid, &amp;path);</div><div class='del'>-</div><div class='del'>-                if (ret == -ENOENT || ret == -ESTALE) {</div><div class='del'>-                        glfsh_index_purge (xl, fd-&gt;inode, entry-&gt;d_name);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (dict) {</div><div class='del'>-                        print_status = glfsh_print_status (dict, path, gfid,</div><div class='del'>-                                                           num_entries,</div><div class='del'>-                                                           ignore_dirty);</div><div class='del'>-                        if ((print_status) &amp;&amp;</div><div class='del'>-                            (mode != GLFSH_MODE_CONTINUE_ON_ERROR)) {</div><div class='del'>-                                ret = -EAGAIN;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int print_status = 0;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    uuid_t gfid = {0};</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(entry, tmp, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        *offset = entry-&gt;d_off;</div><div class='add'>+        if ((strcmp(entry-&gt;d_name, ".") == 0) ||</div><div class='add'>+            (strcmp(entry-&gt;d_name, "..") == 0))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (dict) {</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+            dict = NULL;</div><div class='add'>+        }</div><div class='add'>+        gf_uuid_clear(gfid);</div><div class='add'>+        GF_FREE(path);</div><div class='add'>+        path = NULL;</div><div class='add'>+</div><div class='add'>+        gf_uuid_parse(entry-&gt;d_name, gfid);</div><div class='add'>+        gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+        ret = syncop_getxattr(this, &amp;loc, &amp;dict, GF_HEAL_INFO, NULL, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            if ((mode != GLFSH_MODE_CONTINUE_ON_ERROR) &amp;&amp; (ret == -ENOTCONN))</div><div class='add'>+                goto out;</div><div class='add'>+            else</div><div class='add'>+                continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncop_gfid_to_path(this-&gt;itable, xl, gfid, &amp;path);</div><div class='add'>+</div><div class='add'>+        if (ret == -ENOENT || ret == -ESTALE) {</div><div class='add'>+            glfsh_index_purge(xl, fd-&gt;inode, entry-&gt;d_name);</div><div class='add'>+            ret = 0;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        GF_FREE (path);</div><div class='ctx'>         if (dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-                dict = NULL;</div><div class='add'>+            print_status = glfsh_print_status(dict, path, gfid, num_entries,</div><div class='add'>+                                              ignore_dirty);</div><div class='add'>+            if ((print_status) &amp;&amp; (mode != GLFSH_MODE_CONTINUE_ON_ERROR)) {</div><div class='add'>+                ret = -EAGAIN;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    GF_FREE(path);</div><div class='add'>+    if (dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        dict = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfsh_crawl_directory (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                       xlator_t *readdir_xl, fd_t *fd, loc_t *loc,</div><div class='del'>-                       dict_t *xattr_req, num_entries_t *num_entries,</div><div class='del'>-                       gf_boolean_t ignore)</div><div class='add'>+glfsh_crawl_directory(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                      xlator_t *readdir_xl, fd_t *fd, loc_t *loc,</div><div class='add'>+                      dict_t *xattr_req, num_entries_t *num_entries,</div><div class='add'>+                      gf_boolean_t ignore)</div><div class='ctx'> {</div><div class='del'>-        int             ret          = 0;</div><div class='del'>-        int             heal_op      = -1;</div><div class='del'>-        uint64_t        offset       = 0;</div><div class='del'>-        gf_dirent_t     entries;</div><div class='del'>-        gf_boolean_t    free_entries = _gf_false;</div><div class='del'>-        glfsh_fail_mode_t mode = GLFSH_MODE_CONTINUE_ON_ERROR;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-        ret = dict_get_int32 (xattr_req, "heal-op", &amp;heal_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int heal_op = -1;</div><div class='add'>+    uint64_t offset = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_boolean_t free_entries = _gf_false;</div><div class='add'>+    glfsh_fail_mode_t mode = GLFSH_MODE_CONTINUE_ON_ERROR;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+    ret = dict_get_int32(xattr_req, "heal-op", &amp;heal_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='del'>-                mode = GLFSH_MODE_EXIT_ON_FIRST_FAILURE;</div><div class='add'>+    if (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='add'>+        mode = GLFSH_MODE_EXIT_ON_FIRST_FAILURE;</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                ret = syncop_readdir (readdir_xl, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                      NULL, NULL);</div><div class='del'>-                if (ret &lt;= 0)</div><div class='del'>-                        break;</div><div class='del'>-                ret = 0;</div><div class='del'>-                free_entries = _gf_true;</div><div class='del'>-</div><div class='del'>-                if (list_empty (&amp;entries.list))</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (heal_op == GF_SHD_OP_INDEX_SUMMARY) {</div><div class='del'>-                        ret = glfsh_process_entries (readdir_xl, fd,</div><div class='del'>-                                                     &amp;entries, &amp;offset,</div><div class='del'>-                                                     num_entries,</div><div class='del'>-                                                     glfsh_print_heal_status,</div><div class='del'>-                                                     ignore, mode);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                } else if (heal_op == GF_SHD_OP_SPLIT_BRAIN_FILES) {</div><div class='del'>-                        ret = glfsh_process_entries (readdir_xl, fd,</div><div class='del'>-                                                     &amp;entries, &amp;offset,</div><div class='del'>-                                                     num_entries,</div><div class='del'>-                                                     glfsh_print_spb_status,</div><div class='del'>-                                                     ignore, mode);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                } else if (heal_op == GF_SHD_OP_HEAL_SUMMARY) {</div><div class='del'>-                        ret = glfsh_process_entries (readdir_xl, fd,</div><div class='del'>-                                                     &amp;entries, &amp;offset,</div><div class='del'>-                                                     num_entries,</div><div class='del'>-                                                     glfsh_print_summary_status,</div><div class='del'>-                                                     ignore, mode);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                } else if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) {</div><div class='del'>-                        glfsh_heal_entries (fs, top_subvol, rootloc, &amp;entries,</div><div class='del'>-                                            &amp;offset, num_entries, xattr_req);</div><div class='del'>-                } else if (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) {</div><div class='del'>-                        ret = glfsh_process_entries (readdir_xl, fd, &amp;entries,</div><div class='del'>-                                                     &amp;offset, num_entries,</div><div class='del'>-                                                     glfsh_heal_status_boolean,</div><div class='del'>-                                                     ignore, mode);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='del'>-                free_entries = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    while (1) {</div><div class='add'>+        ret = syncop_readdir(readdir_xl, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                             NULL);</div><div class='add'>+        if (ret &lt;= 0)</div><div class='add'>+            break;</div><div class='ctx'>         ret = 0;</div><div class='add'>+        free_entries = _gf_true;</div><div class='add'>+</div><div class='add'>+        if (list_empty(&amp;entries.list))</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if (heal_op == GF_SHD_OP_INDEX_SUMMARY) {</div><div class='add'>+            ret = glfsh_process_entries(readdir_xl, fd, &amp;entries, &amp;offset,</div><div class='add'>+                                        num_entries, glfsh_print_heal_status,</div><div class='add'>+                                        ignore, mode);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+        } else if (heal_op == GF_SHD_OP_SPLIT_BRAIN_FILES) {</div><div class='add'>+            ret = glfsh_process_entries(readdir_xl, fd, &amp;entries, &amp;offset,</div><div class='add'>+                                        num_entries, glfsh_print_spb_status,</div><div class='add'>+                                        ignore, mode);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+        } else if (heal_op == GF_SHD_OP_HEAL_SUMMARY) {</div><div class='add'>+            ret = glfsh_process_entries(readdir_xl, fd, &amp;entries, &amp;offset,</div><div class='add'>+                                        num_entries, glfsh_print_summary_status,</div><div class='add'>+                                        ignore, mode);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+        } else if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) {</div><div class='add'>+            glfsh_heal_entries(fs, top_subvol, rootloc, &amp;entries, &amp;offset,</div><div class='add'>+                               num_entries, xattr_req);</div><div class='add'>+        } else if (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) {</div><div class='add'>+            ret = glfsh_process_entries(readdir_xl, fd, &amp;entries, &amp;offset,</div><div class='add'>+                                        num_entries, glfsh_heal_status_boolean,</div><div class='add'>+                                        ignore, mode);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+        free_entries = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (free_entries)</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='del'>-        return ret;</div><div class='add'>+    if (free_entries)</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfsh_no_print_brick_from_xl (xlator_t *xl, loc_t *rootloc)</div><div class='add'>+glfsh_no_print_brick_from_xl(xlator_t *xl, loc_t *rootloc)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfsh_print_brick_from_xl (xlator_t *xl, loc_t *rootloc)</div><div class='add'>+glfsh_print_brick_from_xl(xlator_t *xl, loc_t *rootloc)</div><div class='ctx'> {</div><div class='del'>-        char    *remote_host = NULL;</div><div class='del'>-        char    *remote_subvol = NULL;</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    char *remote_host = NULL;</div><div class='add'>+    char *remote_subvol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xl-&gt;options, "remote-host", &amp;remote_host);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(xl-&gt;options, "remote-host", &amp;remote_host);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xl-&gt;options, "remote-subvolume", &amp;remote_subvol);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(xl-&gt;options, "remote-subvolume", &amp;remote_subvol);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                printf ("Brick - Not able to get brick information\n");</div><div class='del'>-        else</div><div class='del'>-                printf ("Brick %s:%s\n", remote_host, remote_subvol);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        printf("Brick - Not able to get brick information\n");</div><div class='add'>+    else</div><div class='add'>+        printf("Brick %s:%s\n", remote_host, remote_subvol);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_pending_heals_type (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                                xlator_t *xl, gf_xl_afr_op_t heal_op,</div><div class='del'>-                                dict_t *xattr_req, char *vgfid,</div><div class='del'>-                                num_entries_t *num_entries)</div><div class='add'>+glfsh_print_pending_heals_type(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                               xlator_t *xl, gf_xl_afr_op_t heal_op,</div><div class='add'>+                               dict_t *xattr_req, char *vgfid,</div><div class='add'>+                               num_entries_t *num_entries)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        loc_t   dirloc = {0};</div><div class='del'>-        fd_t    *fd = NULL;</div><div class='del'>-        int32_t op_errno = 0;</div><div class='del'>-        gf_boolean_t ignore = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!strcmp(vgfid, GF_XATTROP_DIRTY_GFID))</div><div class='del'>-                ignore = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = glfsh_get_index_dir_loc (rootloc, xl, &amp;dirloc, &amp;op_errno,</div><div class='del'>-                                       vgfid);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (op_errno == ESTALE || op_errno == ENOENT ||</div><div class='del'>-                    op_errno == ENOTSUP)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                else</div><div class='del'>-                        ret = -op_errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_dirfd (xl, &amp;dirloc, &amp;fd, GF_CLIENT_PID_GLFS_HEAL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = glfsh_crawl_directory (fs, top_subvol, rootloc, xl, fd, &amp;dirloc,</div><div class='del'>-                                     xattr_req, num_entries, ignore);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t dirloc = {0};</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    gf_boolean_t ignore = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(vgfid, GF_XATTROP_DIRTY_GFID))</div><div class='add'>+        ignore = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = glfsh_get_index_dir_loc(rootloc, xl, &amp;dirloc, &amp;op_errno, vgfid);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (op_errno == ESTALE || op_errno == ENOENT || op_errno == ENOTSUP)</div><div class='add'>+            ret = 0;</div><div class='add'>+        else</div><div class='add'>+            ret = -op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_dirfd(xl, &amp;dirloc, &amp;fd, GF_CLIENT_PID_GLFS_HEAL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfsh_crawl_directory(fs, top_subvol, rootloc, xl, fd, &amp;dirloc,</div><div class='add'>+                                xattr_req, num_entries, ignore);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;dirloc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;dirloc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_print_pending_heals (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                           xlator_t *xl, gf_xl_afr_op_t heal_op, gf_boolean_t</div><div class='del'>-                           is_parent_replicate)</div><div class='add'>+glfsh_print_pending_heals(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                          xlator_t *xl, gf_xl_afr_op_t heal_op,</div><div class='add'>+                          gf_boolean_t is_parent_replicate)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        num_entries_t num_entries = {0, };</div><div class='del'>-        num_entries_t total = {0, };</div><div class='del'>-</div><div class='del'>-        dict_t *xattr_req = NULL;</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new();</div><div class='del'>-        if (!xattr_req)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_int32 (xattr_req, "heal-op", heal_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if ((!is_parent_replicate) &amp;&amp;</div><div class='del'>-            ((heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) ||</div><div class='del'>-             (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE))) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfsh_output-&gt;print_brick_from_xl (xl, rootloc);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = glfsh_print_pending_heals_type (fs, top_subvol, rootloc, xl,</div><div class='del'>-                                              heal_op, xattr_req,</div><div class='del'>-                                              GF_XATTROP_INDEX_GFID,</div><div class='del'>-                                              &amp;num_entries);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='add'>+    int ret = 0;</div><div class='add'>+    num_entries_t num_entries = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    num_entries_t total = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_int32(xattr_req, "heal-op", heal_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if ((!is_parent_replicate) &amp;&amp;</div><div class='add'>+        ((heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE) ||</div><div class='add'>+         (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_DISABLE))) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfsh_output-&gt;print_brick_from_xl(xl, rootloc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfsh_print_pending_heals_type(fs, top_subvol, rootloc, xl, heal_op,</div><div class='add'>+                                         xattr_req, GF_XATTROP_INDEX_GFID,</div><div class='add'>+                                         &amp;num_entries);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    total.num_entries += num_entries.num_entries;</div><div class='add'>+    total.pending_entries += num_entries.pending_entries;</div><div class='add'>+    total.spb_entries += num_entries.spb_entries;</div><div class='add'>+    total.possibly_healing_entries += num_entries.possibly_healing_entries;</div><div class='add'>+    num_entries.num_entries = 0;</div><div class='add'>+    num_entries.pending_entries = 0;</div><div class='add'>+    num_entries.spb_entries = 0;</div><div class='add'>+    num_entries.possibly_healing_entries = 0;</div><div class='add'>+    if (ret == -ENOTCONN)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (is_parent_replicate) {</div><div class='add'>+        ret = glfsh_print_pending_heals_type(</div><div class='add'>+            fs, top_subvol, rootloc, xl, heal_op, xattr_req,</div><div class='add'>+            GF_XATTROP_DIRTY_GFID, &amp;num_entries);</div><div class='ctx'>         total.num_entries += num_entries.num_entries;</div><div class='ctx'>         total.pending_entries += num_entries.pending_entries;</div><div class='ctx'>         total.spb_entries += num_entries.spb_entries;</div><div class='ctx'>         total.possibly_healing_entries += num_entries.possibly_healing_entries;</div><div class='del'>-        num_entries.num_entries = 0;</div><div class='del'>-        num_entries.pending_entries = 0;</div><div class='del'>-        num_entries.spb_entries = 0;</div><div class='del'>-        num_entries.possibly_healing_entries = 0;</div><div class='del'>-        if (ret == -ENOTCONN)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (is_parent_replicate) {</div><div class='del'>-                ret = glfsh_print_pending_heals_type (fs, top_subvol,</div><div class='del'>-                                                      rootloc, xl,</div><div class='del'>-                                                      heal_op, xattr_req,</div><div class='del'>-                                                      GF_XATTROP_DIRTY_GFID,</div><div class='del'>-                                                      &amp;num_entries);</div><div class='del'>-                total.num_entries += num_entries.num_entries;</div><div class='del'>-                total.pending_entries += num_entries.pending_entries;</div><div class='del'>-                total.spb_entries += num_entries.spb_entries;</div><div class='del'>-                total.possibly_healing_entries += num_entries.possibly_healing_entries;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='del'>-        if (heal_op == GF_SHD_OP_HEAL_SUMMARY) {</div><div class='del'>-                glfsh_print_info_summary (ret, &amp;total);</div><div class='del'>-        } else {</div><div class='del'>-                glfsh_print_heal_op_status (ret, total.num_entries, heal_op);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+    if (heal_op == GF_SHD_OP_HEAL_SUMMARY) {</div><div class='add'>+        glfsh_print_info_summary(ret, &amp;total);</div><div class='add'>+    } else {</div><div class='add'>+        glfsh_print_heal_op_status(ret, total.num_entries, heal_op);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfsh_set_heal_options (glfs_t *fs, gf_xl_afr_op_t heal_op)</div><div class='add'>+glfsh_set_heal_options(glfs_t *fs, gf_xl_afr_op_t heal_op)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_xlator_option (fs, "*-replicate-*",</div><div class='del'>-                                      "background-self-heal-count", "0");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glfs_set_xlator_option(fs, "*-replicate-*",</div><div class='add'>+                                 "background-self-heal-count", "0");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if ((heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) &amp;&amp;</div><div class='del'>-            (heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) &amp;&amp;</div><div class='del'>-            (heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME))</div><div class='del'>-                return 0;</div><div class='del'>-        ret = glfs_set_xlator_option (fs, "*-replicate-*", "data-self-heal",</div><div class='del'>-                                      "on");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) &amp;&amp;</div><div class='add'>+        (heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) &amp;&amp;</div><div class='add'>+        (heal_op != GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME))</div><div class='add'>+        return 0;</div><div class='add'>+    ret = glfs_set_xlator_option(fs, "*-replicate-*", "data-self-heal", "on");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_xlator_option (fs, "*-replicate-*", "metadata-self-heal",</div><div class='del'>-                                      "on");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = glfs_set_xlator_option(fs, "*-replicate-*", "metadata-self-heal",</div><div class='add'>+                                 "on");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_xlator_option (fs, "*-replicate-*", "entry-self-heal",</div><div class='del'>-                                      "on");</div><div class='add'>+    ret = glfs_set_xlator_option(fs, "*-replicate-*", "entry-self-heal", "on");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glfsh_validate_volume (xlator_t *xl, gf_xl_afr_op_t heal_op)</div><div class='add'>+glfsh_validate_volume(xlator_t *xl, gf_xl_afr_op_t heal_op)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *heal_xl = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        while (xl-&gt;next)</div><div class='del'>-                xl = xl-&gt;next;</div><div class='del'>-</div><div class='del'>-        while (xl) {</div><div class='del'>-                if (strcmp (xl-&gt;type, "protocol/client") == 0) {</div><div class='del'>-                        heal_xl = _get_ancestor (xl, heal_op);</div><div class='del'>-                        if (heal_xl) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                xl = xl-&gt;prev;</div><div class='add'>+    xlator_t *heal_xl = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    while (xl-&gt;next)</div><div class='add'>+        xl = xl-&gt;next;</div><div class='add'>+</div><div class='add'>+    while (xl) {</div><div class='add'>+        if (strcmp(xl-&gt;type, "protocol/client") == 0) {</div><div class='add'>+            heal_xl = _get_ancestor(xl, heal_op);</div><div class='add'>+            if (heal_xl) {</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+        xl = xl-&gt;prev;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static xlator_t*</div><div class='del'>-_brick_path_to_client_xlator (xlator_t *top_subvol, char *hostname,</div><div class='del'>-                              char *brickpath)</div><div class='add'>+static xlator_t *</div><div class='add'>+_brick_path_to_client_xlator(xlator_t *top_subvol, char *hostname,</div><div class='add'>+                             char *brickpath)</div><div class='ctx'> {</div><div class='del'>-        int ret             = 0;</div><div class='del'>-        xlator_t *xl        = NULL;</div><div class='del'>-        char *remote_host   = NULL;</div><div class='del'>-        char *remote_subvol = NULL;</div><div class='del'>-</div><div class='del'>-        xl = top_subvol;</div><div class='del'>-</div><div class='del'>-        while (xl-&gt;next)</div><div class='del'>-                xl = xl-&gt;next;</div><div class='del'>-</div><div class='del'>-        while (xl) {</div><div class='del'>-                if (!strcmp (xl-&gt;type, "protocol/client")) {</div><div class='del'>-                        ret = dict_get_str (xl-&gt;options, "remote-host",</div><div class='del'>-                                                    &amp;remote_host);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                        ret = dict_get_str (xl-&gt;options,</div><div class='del'>-                                            "remote-subvolume", &amp;remote_subvol);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                        if (!strcmp (hostname, remote_host) &amp;&amp;</div><div class='del'>-                            !strcmp (brickpath, remote_subvol))</div><div class='del'>-                                return xl;</div><div class='del'>-                }</div><div class='del'>-                xl = xl-&gt;prev;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    char *remote_host = NULL;</div><div class='add'>+    char *remote_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    xl = top_subvol;</div><div class='add'>+</div><div class='add'>+    while (xl-&gt;next)</div><div class='add'>+        xl = xl-&gt;next;</div><div class='add'>+</div><div class='add'>+    while (xl) {</div><div class='add'>+        if (!strcmp(xl-&gt;type, "protocol/client")) {</div><div class='add'>+            ret = dict_get_str(xl-&gt;options, "remote-host", &amp;remote_host);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+            ret = dict_get_str(xl-&gt;options, "remote-subvolume", &amp;remote_subvol);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+            if (!strcmp(hostname, remote_host) &amp;&amp;</div><div class='add'>+                !strcmp(brickpath, remote_subvol))</div><div class='add'>+                return xl;</div><div class='ctx'>         }</div><div class='add'>+        xl = xl-&gt;prev;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_gather_heal_info (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                        gf_xl_afr_op_t heal_op)</div><div class='add'>+glfsh_gather_heal_info(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                       gf_xl_afr_op_t heal_op)</div><div class='ctx'> {</div><div class='del'>-        int        ret       = 0;</div><div class='del'>-        xlator_t  *xl        = NULL;</div><div class='del'>-        xlator_t  *heal_xl   = NULL;</div><div class='del'>-        xlator_t  *old_THIS  = NULL;</div><div class='del'>-</div><div class='del'>-        xl = top_subvol;</div><div class='del'>-        while (xl-&gt;next)</div><div class='del'>-                xl = xl-&gt;next;</div><div class='del'>-        while (xl) {</div><div class='del'>-                if (strcmp (xl-&gt;type, "protocol/client") == 0) {</div><div class='del'>-                        heal_xl = _get_ancestor (xl, heal_op);</div><div class='del'>-                        if (heal_xl) {</div><div class='del'>-                                old_THIS = THIS;</div><div class='del'>-                                THIS = heal_xl;</div><div class='del'>-                                ret = glfsh_print_pending_heals (fs, top_subvol,</div><div class='del'>-                                                                 rootloc, xl,</div><div class='del'>-                                                                 heal_op,</div><div class='del'>-                                                                 !strcmp</div><div class='del'>-                                                                (heal_xl-&gt;type,</div><div class='del'>-                                                          "cluster/replicate"));</div><div class='del'>-                                THIS = old_THIS;</div><div class='del'>-</div><div class='del'>-                                if ((ret &lt; 0) &amp;&amp;</div><div class='del'>-                              (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE))</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                xl = xl-&gt;prev;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    xlator_t *heal_xl = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+</div><div class='add'>+    xl = top_subvol;</div><div class='add'>+    while (xl-&gt;next)</div><div class='add'>+        xl = xl-&gt;next;</div><div class='add'>+    while (xl) {</div><div class='add'>+        if (strcmp(xl-&gt;type, "protocol/client") == 0) {</div><div class='add'>+            heal_xl = _get_ancestor(xl, heal_op);</div><div class='add'>+            if (heal_xl) {</div><div class='add'>+                old_THIS = THIS;</div><div class='add'>+                THIS = heal_xl;</div><div class='add'>+                ret = glfsh_print_pending_heals(</div><div class='add'>+                    fs, top_subvol, rootloc, xl, heal_op,</div><div class='add'>+                    !strcmp(heal_xl-&gt;type, "cluster/replicate"));</div><div class='add'>+                THIS = old_THIS;</div><div class='add'>+</div><div class='add'>+                if ((ret &lt; 0) &amp;&amp;</div><div class='add'>+                    (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE))</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        xl = xl-&gt;prev;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        if (heal_op != GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (heal_op != GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_validate_directory (dict_t *xattr_req, char *file)</div><div class='add'>+_validate_directory(dict_t *xattr_req, char *file)</div><div class='ctx'> {</div><div class='del'>-        int heal_op = -1;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (xattr_req, "heal-op", &amp;heal_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) {</div><div class='del'>-                printf ("'bigger-file' not a valid option for directories.\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-        } else if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) {</div><div class='del'>-                printf ("'source-brick' option used on a directory (%s). "</div><div class='del'>-                        "Performing conservative merge.\n", file);</div><div class='del'>-        }</div><div class='add'>+    int heal_op = -1;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='add'>+    ret = dict_get_int32(xattr_req, "heal-op", &amp;heal_op);</div><div class='add'>+    if (ret)</div><div class='ctx'>         return ret;</div><div class='add'>+</div><div class='add'>+    if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE) {</div><div class='add'>+        printf("'bigger-file' not a valid option for directories.\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else if (heal_op == GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK) {</div><div class='add'>+        printf(</div><div class='add'>+            "'source-brick' option used on a directory (%s). "</div><div class='add'>+            "Performing conservative merge.\n",</div><div class='add'>+            file);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_heal_splitbrain_file (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                            char *file, dict_t *xattr_req)</div><div class='add'>+glfsh_heal_splitbrain_file(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                           char *file, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        int          ret           = -1;</div><div class='del'>-        int          reval         = 0;</div><div class='del'>-        loc_t        loc           = {0, };</div><div class='del'>-        char        *path          = NULL;</div><div class='del'>-        char        *path1         = NULL;</div><div class='del'>-        char        *path2         = NULL;</div><div class='del'>-        char        *filename      = NULL;</div><div class='del'>-        char        *filename1     = NULL;</div><div class='del'>-        struct iatt  iatt          = {0, };</div><div class='del'>-        xlator_t    *xl            = top_subvol;</div><div class='del'>-        dict_t      *xattr_rsp     = NULL;</div><div class='del'>-        char        *sh_fail_msg   = NULL;</div><div class='del'>-        char        *gfid_heal_msg = NULL;</div><div class='del'>-        int32_t      op_errno      = 0;</div><div class='del'>-        gf_boolean_t flag          = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!strncmp (file, "gfid:", 5)) {</div><div class='del'>-                filename = gf_strdup(file);</div><div class='del'>-                if (!filename) {</div><div class='del'>-                        printf ("Error allocating memory to filename\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                path = strtok (filename, ":");</div><div class='del'>-                path = strtok (NULL, ";");</div><div class='del'>-                gf_uuid_parse (path, loc.gfid);</div><div class='del'>-                loc.path = gf_strdup (uuid_utoa (loc.gfid));</div><div class='del'>-                if (!loc.path) {</div><div class='del'>-                        printf ("Error allocating memory to path\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                loc.inode = inode_new (rootloc-&gt;inode-&gt;table);</div><div class='del'>-                if (!loc.inode) {</div><div class='del'>-                        printf ("Error getting inode\n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = syncop_lookup (xl, &amp;loc, &amp;iatt, 0, xattr_req, &amp;xattr_rsp);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        printf ("Lookup failed on %s:%s.\n", file,</div><div class='del'>-                                strerror(op_errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                if (file[0] != '/') {</div><div class='del'>-                        printf ("&lt;FILE&gt; must be absolute path w.r.t. the "</div><div class='del'>-                                "volume, starting with '/'\n");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                path1 = gf_strdup (file);</div><div class='del'>-                if (!path1) {</div><div class='del'>-                        printf ("Error allocating memory to path\n");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                path2 = gf_strdup (file);</div><div class='del'>-                if (!path2) {</div><div class='del'>-                        printf ("Error allocating memory to path\n");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                path = dirname (path1);</div><div class='del'>-                filename1 = basename (path2);</div><div class='del'>-retry1:</div><div class='del'>-                ret = glfs_resolve (fs, xl, path, &amp;loc, &amp;iatt, reval);</div><div class='del'>-                ESTALE_RETRY (ret, errno, reval, &amp;loc, retry1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        printf("Lookup failed on %s:%s\n",</div><div class='del'>-                               path, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE ((char *)loc.path);</div><div class='del'>-                loc.path = gf_strdup (file);</div><div class='del'>-                if (!loc.path) {</div><div class='del'>-                        printf ("Error allocating memory for path\n");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                loc.parent = inode_unref (loc.parent);</div><div class='del'>-                loc.parent = inode_ref (loc.inode);</div><div class='del'>-                loc.inode = inode_unref (loc.inode);</div><div class='del'>-                loc.inode = inode_new (rootloc-&gt;inode-&gt;table);</div><div class='del'>-                if (!loc.inode) {</div><div class='del'>-                        printf ("Error getting inode\n");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                loc.name = filename1;</div><div class='del'>-                gf_uuid_copy (loc.pargfid, loc.gfid);</div><div class='del'>-                gf_uuid_clear (loc.gfid);</div><div class='del'>-</div><div class='del'>-                ret = syncop_lookup (xl, &amp;loc, &amp;iatt, 0, xattr_req, &amp;xattr_rsp);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        printf ("Lookup failed on %s:%s.\n", file,</div><div class='del'>-                                strerror(op_errno));</div><div class='del'>-                        flag = _gf_true;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (xattr_rsp, "gfid-heal-msg", &amp;gfid_heal_msg);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        printf ("%s for file %s\n", gfid_heal_msg, file);</div><div class='del'>-                        loc_wipe (&amp;loc);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (flag)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                reval = 0;</div><div class='del'>-                loc_wipe (&amp;loc);</div><div class='del'>-                memset (&amp;iatt, 0, sizeof(iatt));</div><div class='del'>-</div><div class='del'>-retry2:</div><div class='del'>-                ret = glfs_resolve (fs, xl, file, &amp;loc, &amp;iatt, reval);</div><div class='del'>-                ESTALE_RETRY (ret, errno, reval, &amp;loc, retry2);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        printf("Lookup failed on %s:%s\n",</div><div class='del'>-                               file, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int reval = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *path1 = NULL;</div><div class='add'>+    char *path2 = NULL;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    char *filename1 = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *xl = top_subvol;</div><div class='add'>+    dict_t *xattr_rsp = NULL;</div><div class='add'>+    char *sh_fail_msg = NULL;</div><div class='add'>+    char *gfid_heal_msg = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    gf_boolean_t flag = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!strncmp(file, "gfid:", 5)) {</div><div class='add'>+        filename = gf_strdup(file);</div><div class='add'>+        if (!filename) {</div><div class='add'>+            printf("Error allocating memory to filename\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (iatt.ia_type == IA_IFDIR) {</div><div class='del'>-                ret = _validate_directory (xattr_req, file);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+        path = strtok(filename, ":");</div><div class='add'>+        path = strtok(NULL, ";");</div><div class='add'>+        gf_uuid_parse(path, loc.gfid);</div><div class='add'>+        loc.path = gf_strdup(uuid_utoa(loc.gfid));</div><div class='add'>+        if (!loc.path) {</div><div class='add'>+            printf("Error allocating memory to path\n");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        loc.inode = inode_new(rootloc-&gt;inode-&gt;table);</div><div class='add'>+        if (!loc.inode) {</div><div class='add'>+            printf("Error getting inode\n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = syncop_getxattr (xl, &amp;loc, &amp;xattr_rsp, GF_AFR_HEAL_SBRAIN,</div><div class='del'>-                               xattr_req, NULL);</div><div class='add'>+        ret = syncop_lookup(xl, &amp;loc, &amp;iatt, 0, xattr_req, &amp;xattr_rsp);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                printf ("Healing %s failed:%s.\n", file, strerror(op_errno));</div><div class='del'>-                goto out;</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            printf("Lookup failed on %s:%s.\n", file, strerror(op_errno));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (file[0] != '/') {</div><div class='add'>+            printf(</div><div class='add'>+                "&lt;FILE&gt; must be absolute path w.r.t. the "</div><div class='add'>+                "volume, starting with '/'\n");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        path1 = gf_strdup(file);</div><div class='add'>+        if (!path1) {</div><div class='add'>+            printf("Error allocating memory to path\n");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        path2 = gf_strdup(file);</div><div class='add'>+        if (!path2) {</div><div class='add'>+            printf("Error allocating memory to path\n");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        path = dirname(path1);</div><div class='add'>+        filename1 = basename(path2);</div><div class='add'>+    retry1:</div><div class='add'>+        ret = glfs_resolve(fs, xl, path, &amp;loc, &amp;iatt, reval);</div><div class='add'>+        ESTALE_RETRY(ret, errno, reval, &amp;loc, retry1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            printf("Lookup failed on %s:%s\n", path, strerror(errno));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        GF_FREE((char *)loc.path);</div><div class='add'>+        loc.path = gf_strdup(file);</div><div class='add'>+        if (!loc.path) {</div><div class='add'>+            printf("Error allocating memory for path\n");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = dict_get_str (xattr_rsp, "sh-fail-msg", &amp;sh_fail_msg);</div><div class='add'>+        loc.parent = inode_unref(loc.parent);</div><div class='add'>+        loc.parent = inode_ref(loc.inode);</div><div class='add'>+        loc.inode = inode_unref(loc.inode);</div><div class='add'>+        loc.inode = inode_new(rootloc-&gt;inode-&gt;table);</div><div class='add'>+        if (!loc.inode) {</div><div class='add'>+            printf("Error getting inode\n");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        loc.name = filename1;</div><div class='add'>+        gf_uuid_copy(loc.pargfid, loc.gfid);</div><div class='add'>+        gf_uuid_clear(loc.gfid);</div><div class='add'>+</div><div class='add'>+        ret = syncop_lookup(xl, &amp;loc, &amp;iatt, 0, xattr_req, &amp;xattr_rsp);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            printf("Lookup failed on %s:%s.\n", file, strerror(op_errno));</div><div class='add'>+            flag = _gf_true;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = dict_get_str(xattr_rsp, "gfid-heal-msg", &amp;gfid_heal_msg);</div><div class='ctx'>         if (!ret) {</div><div class='del'>-                printf ("Healing %s failed: %s.\n", file, sh_fail_msg);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            printf("%s for file %s\n", gfid_heal_msg, file);</div><div class='add'>+            loc_wipe(&amp;loc);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        printf ("Healed %s.\n", file);</div><div class='del'>-        ret = 0;</div><div class='add'>+        if (flag)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        reval = 0;</div><div class='add'>+        loc_wipe(&amp;loc);</div><div class='add'>+        memset(&amp;iatt, 0, sizeof(iatt));</div><div class='add'>+</div><div class='add'>+    retry2:</div><div class='add'>+        ret = glfs_resolve(fs, xl, file, &amp;loc, &amp;iatt, reval);</div><div class='add'>+        ESTALE_RETRY(ret, errno, reval, &amp;loc, retry2);</div><div class='add'>+        if (ret) {</div><div class='add'>+            printf("Lookup failed on %s:%s\n", file, strerror(errno));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (iatt.ia_type == IA_IFDIR) {</div><div class='add'>+        ret = _validate_directory(xattr_req, file);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = syncop_getxattr(xl, &amp;loc, &amp;xattr_rsp, GF_AFR_HEAL_SBRAIN, xattr_req,</div><div class='add'>+                          NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        printf("Healing %s failed:%s.\n", file, strerror(op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_str(xattr_rsp, "sh-fail-msg", &amp;sh_fail_msg);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        printf("Healing %s failed: %s.\n", file, sh_fail_msg);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    printf("Healed %s.\n", file);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (xattr_rsp)</div><div class='del'>-                dict_unref (xattr_rsp);</div><div class='del'>-        if (path1)</div><div class='del'>-                GF_FREE (path1);</div><div class='del'>-        if (path2)</div><div class='del'>-                GF_FREE (path2);</div><div class='del'>-        if (filename)</div><div class='del'>-                GF_FREE (filename);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xattr_rsp)</div><div class='add'>+        dict_unref(xattr_rsp);</div><div class='add'>+    if (path1)</div><div class='add'>+        GF_FREE(path1);</div><div class='add'>+    if (path2)</div><div class='add'>+        GF_FREE(path2);</div><div class='add'>+    if (filename)</div><div class='add'>+        GF_FREE(filename);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_heal_from_brick_type (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='del'>-                            char *hostname, char *brickpath, xlator_t *client,</div><div class='del'>-                            dict_t *xattr_req, char *vgfid,</div><div class='del'>-                            num_entries_t *num_entries)</div><div class='add'>+glfsh_heal_from_brick_type(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+                           char *hostname, char *brickpath, xlator_t *client,</div><div class='add'>+                           dict_t *xattr_req, char *vgfid,</div><div class='add'>+                           num_entries_t *num_entries)</div><div class='ctx'> {</div><div class='del'>-        fd_t     *fd        = NULL;</div><div class='del'>-        loc_t     dirloc    = {0};</div><div class='del'>-        int32_t   op_errno  = 0;</div><div class='del'>-        int       ret       = -1;</div><div class='del'>-</div><div class='del'>-        ret = glfsh_get_index_dir_loc (rootloc, client, &amp;dirloc,</div><div class='del'>-                                       &amp;op_errno, vgfid);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (op_errno == ESTALE || op_errno == ENOENT)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                else</div><div class='del'>-                        ret = -op_errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_dirfd (client, &amp;dirloc, &amp;fd,</div><div class='del'>-                            GF_CLIENT_PID_GLFS_HEAL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = glfsh_crawl_directory (fs, top_subvol, rootloc, client,</div><div class='del'>-                                     fd, &amp;dirloc, xattr_req, num_entries,</div><div class='del'>-                                     _gf_false);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    loc_t dirloc = {0};</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = glfsh_get_index_dir_loc(rootloc, client, &amp;dirloc, &amp;op_errno, vgfid);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (op_errno == ESTALE || op_errno == ENOENT)</div><div class='add'>+            ret = 0;</div><div class='add'>+        else</div><div class='add'>+            ret = -op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_dirfd(client, &amp;dirloc, &amp;fd, GF_CLIENT_PID_GLFS_HEAL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = glfsh_crawl_directory(fs, top_subvol, rootloc, client, fd, &amp;dirloc,</div><div class='add'>+                                xattr_req, num_entries, _gf_false);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;dirloc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;dirloc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_heal_from_brick (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='add'>+glfsh_heal_from_brick(glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,</div><div class='ctx'>                       char *hostname, char *brickpath, char *file)</div><div class='ctx'> {</div><div class='del'>-        int       ret       = -1;</div><div class='del'>-        dict_t   *xattr_req = NULL;</div><div class='del'>-        xlator_t *client    = NULL;</div><div class='del'>-        num_entries_t num_entries = {0, };</div><div class='del'>-        num_entries_t total = {0, };</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new();</div><div class='del'>-        if (!xattr_req)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_int32 (xattr_req, "heal-op",</div><div class='del'>-                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        client = _brick_path_to_client_xlator (top_subvol, hostname, brickpath);</div><div class='del'>-        if (!client) {</div><div class='del'>-                printf("\"%s:%s\"- No such brick available in the volume.\n",</div><div class='del'>-                       hostname, brickpath);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (xattr_req, "child-name", client-&gt;name);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        if (file)</div><div class='del'>-                ret = glfsh_heal_splitbrain_file (fs, top_subvol, rootloc, file,</div><div class='del'>-                                                  xattr_req);</div><div class='del'>-        else {</div><div class='del'>-                ret = glfsh_heal_from_brick_type (fs, top_subvol, rootloc,</div><div class='del'>-                                                  hostname, brickpath,</div><div class='del'>-                                                  client, xattr_req,</div><div class='del'>-                                                  GF_XATTROP_INDEX_GFID,</div><div class='del'>-                                                  &amp;num_entries);</div><div class='del'>-                total.num_entries += num_entries.num_entries;</div><div class='del'>-                num_entries.num_entries = 0;</div><div class='del'>-                if (ret == -ENOTCONN)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = glfsh_heal_from_brick_type (fs, top_subvol, rootloc,</div><div class='del'>-                                                  hostname, brickpath,</div><div class='del'>-                                                  client, xattr_req,</div><div class='del'>-                                                  GF_XATTROP_DIRTY_GFID,</div><div class='del'>-                                                  &amp;num_entries);</div><div class='del'>-                total.num_entries += num_entries.num_entries;</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    xlator_t *client = NULL;</div><div class='add'>+    num_entries_t num_entries = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    num_entries_t total = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_int32(xattr_req, "heal-op",</div><div class='add'>+                         GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    client = _brick_path_to_client_xlator(top_subvol, hostname, brickpath);</div><div class='add'>+    if (!client) {</div><div class='add'>+        printf("\"%s:%s\"- No such brick available in the volume.\n", hostname,</div><div class='add'>+               brickpath);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(xattr_req, "child-name", client-&gt;name);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    if (file)</div><div class='add'>+        ret = glfsh_heal_splitbrain_file(fs, top_subvol, rootloc, file,</div><div class='add'>+                                         xattr_req);</div><div class='add'>+    else {</div><div class='add'>+        ret = glfsh_heal_from_brick_type(fs, top_subvol, rootloc, hostname,</div><div class='add'>+                                         brickpath, client, xattr_req,</div><div class='add'>+                                         GF_XATTROP_INDEX_GFID, &amp;num_entries);</div><div class='add'>+        total.num_entries += num_entries.num_entries;</div><div class='add'>+        num_entries.num_entries = 0;</div><div class='add'>+        if (ret == -ENOTCONN)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = glfsh_heal_from_brick_type(fs, top_subvol, rootloc, hostname,</div><div class='add'>+                                         brickpath, client, xattr_req,</div><div class='add'>+                                         GF_XATTROP_DIRTY_GFID, &amp;num_entries);</div><div class='add'>+        total.num_entries += num_entries.num_entries;</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='del'>-        if (!file)</div><div class='del'>-                glfsh_print_heal_op_status (ret, total.num_entries,</div><div class='del'>-                                            GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+    if (!file)</div><div class='add'>+        glfsh_print_heal_op_status(ret, total.num_entries,</div><div class='add'>+                                   GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfsh_heal_from_bigger_file_or_mtime (glfs_t *fs, xlator_t *top_subvol,</div><div class='del'>-                                      loc_t *rootloc, char *file,</div><div class='del'>-                                      gf_xl_afr_op_t heal_op)</div><div class='add'>+glfsh_heal_from_bigger_file_or_mtime(glfs_t *fs, xlator_t *top_subvol,</div><div class='add'>+                                     loc_t *rootloc, char *file,</div><div class='add'>+                                     gf_xl_afr_op_t heal_op)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='del'>-        dict_t *xattr_req = NULL;</div><div class='del'>-</div><div class='del'>-        xattr_req = dict_new();</div><div class='del'>-        if (!xattr_req)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_int32 (xattr_req, "heal-op", heal_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = glfsh_heal_splitbrain_file (fs, top_subvol, rootloc, file,</div><div class='del'>-                                         xattr_req);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_int32(xattr_req, "heal-op", heal_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = glfsh_heal_splitbrain_file(fs, top_subvol, rootloc, file, xattr_req);</div><div class='ctx'> out:</div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cleanup (glfs_t *fs)</div><div class='add'>+cleanup(glfs_t *fs)</div><div class='ctx'> {</div><div class='del'>-        if (!fs)</div><div class='del'>-                return;</div><div class='add'>+    if (!fs)</div><div class='add'>+        return;</div><div class='ctx'> #if 0</div><div class='ctx'>         /* glfs fini path is still racy and crashing the program. Since</div><div class='ctx'>          * this program any way has to die, we are not going to call fini</div><div class='hunk'>@@ -1516,270 +1480,269 @@ cleanup (glfs_t *fs)</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> glfsh_info_t glfsh_human_readable = {</div><div class='del'>-        .init = glfsh_init,</div><div class='del'>-        .print_brick_from_xl = glfsh_print_brick_from_xl,</div><div class='del'>-        .print_heal_op_status = glfsh_print_hr_heal_op_status,</div><div class='del'>-        .print_heal_op_summary = glfsh_print_hr_heal_op_summary,</div><div class='del'>-        .print_heal_status = glfsh_print_hr_heal_status,</div><div class='del'>-        .print_spb_status = glfsh_print_hr_spb_status,</div><div class='del'>-        .end = glfsh_end</div><div class='del'>-};</div><div class='add'>+    .init = glfsh_init,</div><div class='add'>+    .print_brick_from_xl = glfsh_print_brick_from_xl,</div><div class='add'>+    .print_heal_op_status = glfsh_print_hr_heal_op_status,</div><div class='add'>+    .print_heal_op_summary = glfsh_print_hr_heal_op_summary,</div><div class='add'>+    .print_heal_status = glfsh_print_hr_heal_status,</div><div class='add'>+    .print_spb_status = glfsh_print_hr_spb_status,</div><div class='add'>+    .end = glfsh_end};</div><div class='ctx'> </div><div class='ctx'> glfsh_info_t glfsh_no_print = {</div><div class='del'>-        .init = glfsh_init,</div><div class='del'>-        .print_brick_from_xl = glfsh_no_print_brick_from_xl,</div><div class='del'>-        .print_heal_op_status = glfsh_no_print_hr_heal_op_status,</div><div class='del'>-        .print_heal_status = glfsh_no_print_hr_status,</div><div class='del'>-        .print_spb_status = glfsh_no_print_hr_status,</div><div class='del'>-        .end = glfsh_end_op_granular_entry_heal</div><div class='del'>-};</div><div class='add'>+    .init = glfsh_init,</div><div class='add'>+    .print_brick_from_xl = glfsh_no_print_brick_from_xl,</div><div class='add'>+    .print_heal_op_status = glfsh_no_print_hr_heal_op_status,</div><div class='add'>+    .print_heal_status = glfsh_no_print_hr_status,</div><div class='add'>+    .print_spb_status = glfsh_no_print_hr_status,</div><div class='add'>+    .end = glfsh_end_op_granular_entry_heal};</div><div class='ctx'> </div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='ctx'> glfsh_info_t glfsh_xml_output = {</div><div class='del'>-        .init = glfsh_xml_init,</div><div class='del'>-        .print_brick_from_xl = glfsh_print_xml_brick_from_xl,</div><div class='del'>-        .print_heal_op_status = glfsh_print_xml_heal_op_status,</div><div class='del'>-        .print_heal_op_summary = glfsh_print_xml_heal_op_summary,</div><div class='del'>-        .print_heal_status = glfsh_print_xml_file_status,</div><div class='del'>-        .print_spb_status = glfsh_print_xml_file_status,</div><div class='del'>-        .end = glfsh_xml_end</div><div class='del'>-};</div><div class='add'>+    .init = glfsh_xml_init,</div><div class='add'>+    .print_brick_from_xl = glfsh_print_xml_brick_from_xl,</div><div class='add'>+    .print_heal_op_status = glfsh_print_xml_heal_op_status,</div><div class='add'>+    .print_heal_op_summary = glfsh_print_xml_heal_op_summary,</div><div class='add'>+    .print_heal_status = glfsh_print_xml_file_status,</div><div class='add'>+    .print_spb_status = glfsh_print_xml_file_status,</div><div class='add'>+    .end = glfsh_xml_end};</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        int        ret = 0;</div><div class='del'>-        char      *volname = NULL;</div><div class='del'>-        xlator_t  *top_subvol = NULL;</div><div class='del'>-        loc_t     rootloc = {0};</div><div class='del'>-        char      logfilepath[PATH_MAX] = {0};</div><div class='del'>-        char      *hostname = NULL;</div><div class='del'>-        char      *path = NULL;</div><div class='del'>-        char      *file = NULL;</div><div class='del'>-        char      *op_errstr = NULL;</div><div class='del'>-        char      *socket_filepath = NULL;</div><div class='del'>-        gf_xl_afr_op_t heal_op = -1;</div><div class='del'>-</div><div class='del'>-        if (argc &lt; 2) {</div><div class='del'>-                printf (USAGE_STR, argv[0]);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (argc &gt;= 4) {</div><div class='del'>-                if (!strcmp(argv[argc - 2], "glusterd-sock")) {</div><div class='del'>-                        socket_filepath = argv[argc - 1];</div><div class='del'>-                        argc = argc - 2;</div><div class='del'>-                }</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    xlator_t *top_subvol = NULL;</div><div class='add'>+    loc_t rootloc = {0};</div><div class='add'>+    char logfilepath[PATH_MAX] = {0};</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    char *file = NULL;</div><div class='add'>+    char *op_errstr = NULL;</div><div class='add'>+    char *socket_filepath = NULL;</div><div class='add'>+    gf_xl_afr_op_t heal_op = -1;</div><div class='add'>+</div><div class='add'>+    if (argc &lt; 2) {</div><div class='add'>+        printf(USAGE_STR, argv[0]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (argc &gt;= 4) {</div><div class='add'>+        if (!strcmp(argv[argc - 2], "glusterd-sock")) {</div><div class='add'>+            socket_filepath = argv[argc - 1];</div><div class='add'>+            argc = argc - 2;</div><div class='ctx'>         }</div><div class='del'>-        volname = argv[1];</div><div class='del'>-        switch (argc) {</div><div class='add'>+    }</div><div class='add'>+    volname = argv[1];</div><div class='add'>+    switch (argc) {</div><div class='ctx'>         case 2:</div><div class='del'>-                heal_op = GF_SHD_OP_INDEX_SUMMARY;</div><div class='del'>-                break;</div><div class='add'>+            heal_op = GF_SHD_OP_INDEX_SUMMARY;</div><div class='add'>+            break;</div><div class='ctx'>         case 3:</div><div class='del'>-                if (!strcmp (argv[2], "split-brain-info")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_SPLIT_BRAIN_FILES;</div><div class='del'>-                } else if (!strcmp (argv[2], "xml")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_INDEX_SUMMARY;</div><div class='del'>-                        is_xml = 1;</div><div class='del'>-                } else if (!strcmp (argv[2], "granular-entry-heal-op")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE;</div><div class='del'>-		} else if (!strcmp (argv[2], "info-summary")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_HEAL_SUMMARY;</div><div class='del'>-                } else {</div><div class='del'>-                        printf (USAGE_STR, argv[0]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (!strcmp(argv[2], "split-brain-info")) {</div><div class='add'>+                heal_op = GF_SHD_OP_SPLIT_BRAIN_FILES;</div><div class='add'>+            } else if (!strcmp(argv[2], "xml")) {</div><div class='add'>+                heal_op = GF_SHD_OP_INDEX_SUMMARY;</div><div class='add'>+                is_xml = 1;</div><div class='add'>+            } else if (!strcmp(argv[2], "granular-entry-heal-op")) {</div><div class='add'>+                heal_op = GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE;</div><div class='add'>+            } else if (!strcmp(argv[2], "info-summary")) {</div><div class='add'>+                heal_op = GF_SHD_OP_HEAL_SUMMARY;</div><div class='add'>+            } else {</div><div class='add'>+                printf(USAGE_STR, argv[0]);</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case 4:</div><div class='del'>-                if ((!strcmp (argv[2], "split-brain-info")) &amp;&amp;</div><div class='del'>-                    (!strcmp (argv[3], "xml"))) {</div><div class='del'>-                        heal_op = GF_SHD_OP_SPLIT_BRAIN_FILES;</div><div class='del'>-                        is_xml = 1;</div><div class='del'>-                } else if ((!strcmp (argv[2], "info-summary")) &amp;&amp;</div><div class='del'>-                           (!strcmp (argv[3], "xml"))) {</div><div class='del'>-                        heal_op = GF_SHD_OP_HEAL_SUMMARY;</div><div class='del'>-                        is_xml = 1;</div><div class='del'>-                } else if (!strcmp (argv[2], "bigger-file")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE;</div><div class='del'>-                        file = argv[3];</div><div class='del'>-                } else if (!strcmp (argv[2], "latest-mtime")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME;</div><div class='del'>-                        file = argv[3];</div><div class='del'>-                } else if (!strcmp (argv[2], "source-brick")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK;</div><div class='del'>-                        hostname = strtok (argv[3], ":");</div><div class='del'>-                        path = strtok (NULL, ":");</div><div class='del'>-                } else {</div><div class='del'>-                        printf (USAGE_STR, argv[0]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if ((!strcmp(argv[2], "split-brain-info")) &amp;&amp;</div><div class='add'>+                (!strcmp(argv[3], "xml"))) {</div><div class='add'>+                heal_op = GF_SHD_OP_SPLIT_BRAIN_FILES;</div><div class='add'>+                is_xml = 1;</div><div class='add'>+            } else if ((!strcmp(argv[2], "info-summary")) &amp;&amp;</div><div class='add'>+                       (!strcmp(argv[3], "xml"))) {</div><div class='add'>+                heal_op = GF_SHD_OP_HEAL_SUMMARY;</div><div class='add'>+                is_xml = 1;</div><div class='add'>+            } else if (!strcmp(argv[2], "bigger-file")) {</div><div class='add'>+                heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE;</div><div class='add'>+                file = argv[3];</div><div class='add'>+            } else if (!strcmp(argv[2], "latest-mtime")) {</div><div class='add'>+                heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME;</div><div class='add'>+                file = argv[3];</div><div class='add'>+            } else if (!strcmp(argv[2], "source-brick")) {</div><div class='add'>+                heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK;</div><div class='add'>+                hostname = strtok(argv[3], ":");</div><div class='add'>+                path = strtok(NULL, ":");</div><div class='add'>+            } else {</div><div class='add'>+                printf(USAGE_STR, argv[0]);</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case 5:</div><div class='del'>-                if (!strcmp (argv[2], "source-brick")) {</div><div class='del'>-                        heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK;</div><div class='del'>-                        hostname = strtok (argv[3], ":");</div><div class='del'>-                        path = strtok (NULL, ":");</div><div class='del'>-                        file = argv[4];</div><div class='del'>-                } else {</div><div class='del'>-                        printf (USAGE_STR, argv[0]);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        default:</div><div class='del'>-                printf (USAGE_STR, argv[0]);</div><div class='add'>+            if (!strcmp(argv[2], "source-brick")) {</div><div class='add'>+                heal_op = GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK;</div><div class='add'>+                hostname = strtok(argv[3], ":");</div><div class='add'>+                path = strtok(NULL, ":");</div><div class='add'>+                file = argv[4];</div><div class='add'>+            } else {</div><div class='add'>+                printf(USAGE_STR, argv[0]);</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            printf(USAGE_STR, argv[0]);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfsh_output = &amp;glfsh_human_readable;</div><div class='del'>-        if (is_xml) {</div><div class='add'>+    glfsh_output = &amp;glfsh_human_readable;</div><div class='add'>+    if (is_xml) {</div><div class='ctx'> #if (HAVE_LIB_XML)</div><div class='del'>-                glfsh_output = &amp;glfsh_xml_output;</div><div class='add'>+        glfsh_output = &amp;glfsh_xml_output;</div><div class='ctx'> #else</div><div class='del'>-                /*No point doing anything, just fail the command*/</div><div class='del'>-                exit (EXIT_FAILURE);</div><div class='add'>+        /*No point doing anything, just fail the command*/</div><div class='add'>+        exit(EXIT_FAILURE);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='del'>-                glfsh_output = &amp;glfsh_no_print;</div><div class='del'>-</div><div class='del'>-        ret = glfsh_output-&gt;init ();</div><div class='del'>-        if (ret)</div><div class='del'>-                exit (EXIT_FAILURE);</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                gf_asprintf (&amp;op_errstr, "Not able to initialize volume '%s'",</div><div class='del'>-                             volname);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (sys_access(SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='del'>-                fs-&gt;ctx-&gt;secure_mgmt = 1;</div><div class='del'>-                fs-&gt;ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file ();</div><div class='del'>-        }</div><div class='del'>-        if (socket_filepath != NULL) {</div><div class='del'>-                ret = glfs_set_volfile_server (fs, "unix", socket_filepath, 0);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (heal_op == GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE)</div><div class='add'>+        glfsh_output = &amp;glfsh_no_print;</div><div class='add'>+</div><div class='add'>+    ret = glfsh_output-&gt;init();</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(EXIT_FAILURE);</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        gf_asprintf(&amp;op_errstr, "Not able to initialize volume '%s'", volname);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (sys_access(SECURE_ACCESS_FILE, F_OK) == 0) {</div><div class='add'>+        fs-&gt;ctx-&gt;secure_mgmt = 1;</div><div class='add'>+        fs-&gt;ctx-&gt;ssl_cert_depth = glusterfs_read_secure_access_file();</div><div class='add'>+    }</div><div class='add'>+    if (socket_filepath != NULL) {</div><div class='add'>+        ret = glfs_set_volfile_server(fs, "unix", socket_filepath, 0);</div><div class='add'>+    } else {</div><div class='add'>+        ret = glfs_set_volfile_server(fs, "unix", DEFAULT_GLUSTERD_SOCKFILE, 0);</div><div class='add'>+    }</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        gf_asprintf(&amp;op_errstr,</div><div class='add'>+                    "Setting the volfile server failed, "</div><div class='add'>+                    "%s",</div><div class='add'>+                    strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfsh_set_heal_options(fs, heal_op);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("Setting xlator heal options failed, %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    snprintf(logfilepath, sizeof(logfilepath),</div><div class='add'>+             DEFAULT_HEAL_LOG_FILE_DIRECTORY "/glfsheal-%s.log", volname);</div><div class='add'>+    ret = glfs_set_logging(fs, logfilepath, GF_LOG_INFO);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        gf_asprintf(&amp;op_errstr,</div><div class='add'>+                    "Failed to set the log file path, "</div><div class='add'>+                    "%s",</div><div class='add'>+                    strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        if (errno == ENOENT) {</div><div class='add'>+            gf_asprintf(&amp;op_errstr, "Volume %s does not exist", volname);</div><div class='ctx'>         } else {</div><div class='del'>-                ret = glfs_set_volfile_server (fs, "unix",</div><div class='del'>-                                DEFAULT_GLUSTERD_SOCKFILE, 0);</div><div class='add'>+            gf_asprintf(&amp;op_errstr,</div><div class='add'>+                        "%s: Not able to fetch "</div><div class='add'>+                        "volfile from glusterd",</div><div class='add'>+                        volname);</div><div class='ctx'>         }</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                gf_asprintf (&amp;op_errstr, "Setting the volfile server failed, "</div><div class='del'>-                             "%s", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfsh_set_heal_options (fs, heal_op);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("Setting xlator heal options failed, %s\n",</div><div class='del'>-                        strerror(errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        snprintf (logfilepath, sizeof (logfilepath),</div><div class='del'>-                  DEFAULT_HEAL_LOG_FILE_DIRECTORY"/glfsheal-%s.log", volname);</div><div class='del'>-        ret = glfs_set_logging(fs, logfilepath, GF_LOG_INFO);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                gf_asprintf (&amp;op_errstr, "Failed to set the log file path, "</div><div class='del'>-                             "%s", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                if (errno == ENOENT) {</div><div class='del'>-                        gf_asprintf (&amp;op_errstr, "Volume %s does not exist",</div><div class='del'>-                                     volname);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_asprintf (&amp;op_errstr, "%s: Not able to fetch "</div><div class='del'>-                                     "volfile from glusterd", volname);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        top_subvol = glfs_active_subvol (fs);</div><div class='del'>-        if (!top_subvol) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                if (errno == ENOTCONN) {</div><div class='del'>-                        gf_asprintf (&amp;op_errstr, "Volume %s is not started "</div><div class='del'>-                                                 "(Or) All the bricks are not "</div><div class='del'>-                                                 "running.", volname);</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        gf_asprintf (&amp;op_errstr, "%s: Not able to mount the "</div><div class='del'>-                                             "volume, %s", volname,</div><div class='del'>-                                             strerror (errno));</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfsh_validate_volume (top_subvol, heal_op);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                gf_asprintf (&amp;op_errstr, "Volume %s is not of type %s", volname,</div><div class='del'>-                                     (heal_op == GF_SHD_OP_INDEX_SUMMARY ||</div><div class='del'>-                                      heal_op == GF_SHD_OP_HEAL_SUMMARY) ?</div><div class='del'>-                                     "replicate/disperse":"replicate");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        rootloc.inode = inode_ref (top_subvol-&gt;itable-&gt;root);</div><div class='del'>-        ret = glfs_loc_touchup (&amp;rootloc);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    top_subvol = glfs_active_subvol(fs);</div><div class='add'>+    if (!top_subvol) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        if (errno == ENOTCONN) {</div><div class='add'>+            gf_asprintf(&amp;op_errstr,</div><div class='add'>+                        "Volume %s is not started "</div><div class='add'>+                        "(Or) All the bricks are not "</div><div class='add'>+                        "running.",</div><div class='add'>+                        volname);</div><div class='add'>+        } else {</div><div class='add'>+            gf_asprintf(&amp;op_errstr,</div><div class='add'>+                        "%s: Not able to mount the "</div><div class='add'>+                        "volume, %s",</div><div class='add'>+                        volname, strerror(errno));</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        switch (heal_op) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfsh_validate_volume(top_subvol, heal_op);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        gf_asprintf(&amp;op_errstr, "Volume %s is not of type %s", volname,</div><div class='add'>+                    (heal_op == GF_SHD_OP_INDEX_SUMMARY ||</div><div class='add'>+                     heal_op == GF_SHD_OP_HEAL_SUMMARY)</div><div class='add'>+                        ? "replicate/disperse"</div><div class='add'>+                        : "replicate");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    rootloc.inode = inode_ref(top_subvol-&gt;itable-&gt;root);</div><div class='add'>+    ret = glfs_loc_touchup(&amp;rootloc);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (heal_op) {</div><div class='ctx'>         case GF_SHD_OP_INDEX_SUMMARY:</div><div class='ctx'>         case GF_SHD_OP_SPLIT_BRAIN_FILES:</div><div class='ctx'>         case GF_SHD_OP_GRANULAR_ENTRY_HEAL_ENABLE:</div><div class='ctx'>         case GF_SHD_OP_HEAL_SUMMARY:</div><div class='del'>-                ret = glfsh_gather_heal_info (fs, top_subvol, &amp;rootloc,</div><div class='del'>-                                              heal_op);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfsh_gather_heal_info(fs, top_subvol, &amp;rootloc, heal_op);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME:</div><div class='del'>-                ret = glfsh_heal_from_bigger_file_or_mtime (fs, top_subvol,</div><div class='del'>-                                                   &amp;rootloc, file, heal_op);</div><div class='del'>-                        break;</div><div class='add'>+            ret = glfsh_heal_from_bigger_file_or_mtime(fs, top_subvol, &amp;rootloc,</div><div class='add'>+                                                       file, heal_op);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='del'>-                ret = glfsh_heal_from_brick (fs, top_subvol, &amp;rootloc,</div><div class='del'>-                                             hostname, path, file);</div><div class='del'>-                break;</div><div class='add'>+            ret = glfsh_heal_from_brick(fs, top_subvol, &amp;rootloc, hostname,</div><div class='add'>+                                        path, file);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfsh_output-&gt;end (ret, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                ret = -ret;</div><div class='del'>-        loc_wipe (&amp;rootloc);</div><div class='del'>-        glfs_subvol_done (fs, top_subvol);</div><div class='del'>-        cleanup (fs);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfsh_output-&gt;end(ret, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        ret = -ret;</div><div class='add'>+    loc_wipe(&amp;rootloc);</div><div class='add'>+    glfs_subvol_done(fs, top_subvol);</div><div class='add'>+    cleanup(fs);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> out:</div><div class='del'>-        if (fs &amp;&amp; top_subvol)</div><div class='del'>-                glfs_subvol_done (fs, top_subvol);</div><div class='del'>-        loc_wipe (&amp;rootloc);</div><div class='del'>-        cleanup (fs);</div><div class='del'>-        if (glfsh_output)</div><div class='del'>-                glfsh_output-&gt;end (ret, op_errstr);</div><div class='del'>-        if (op_errstr)</div><div class='del'>-                GF_FREE (op_errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fs &amp;&amp; top_subvol)</div><div class='add'>+        glfs_subvol_done(fs, top_subvol);</div><div class='add'>+    loc_wipe(&amp;rootloc);</div><div class='add'>+    cleanup(fs);</div><div class='add'>+    if (glfsh_output)</div><div class='add'>+        glfsh_output-&gt;end(ret, op_errstr);</div><div class='add'>+    if (op_errstr)</div><div class='add'>+        GF_FREE(op_errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/atomic.h b/libglusterfs/src/atomic.h<br/>index 3fd3a8764bf..dbbdc309628 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/atomic.h?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/atomic.h</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/atomic.h?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/atomic.h</a></div><div class='hunk'>@@ -114,10 +114,14 @@ GF_ATOMIC_TYPE(SIZEOF_LONG, uintptr); /* gf_atomic_uintptr_t */</div><div class='ctx'>  * builtin version depending on the size of the atomic structure. */</div><div class='ctx'> #define GF_ATOMIC_CHOOSE(_atomic, _op, _args...)                               \</div><div class='ctx'>     ((sizeof(_atomic) &gt; sizeof(uint64_t))                                      \</div><div class='del'>-         ? ({ GF_ATOMIC_MACRO(GF_ATOMIC_LOCK_, _op)                            \</div><div class='del'>-              (_atomic, ##_args); })      \</div><div class='del'>-         : ({ GF_ATOMIC_MACRO(GF_ATOMIC_BASE_, _op)                            \</div><div class='del'>-              (_atomic, ##_args); }))</div><div class='add'>+         ? ({                                                                  \</div><div class='add'>+               GF_ATOMIC_MACRO(GF_ATOMIC_LOCK_, _op)                           \</div><div class='add'>+               (_atomic, ##_args);                                             \</div><div class='add'>+           })                                                                  \</div><div class='add'>+         : ({                                                                  \</div><div class='add'>+               GF_ATOMIC_MACRO(GF_ATOMIC_BASE_, _op)                           \</div><div class='add'>+               (_atomic, ##_args);                                             \</div><div class='add'>+           }))</div><div class='ctx'> </div><div class='ctx'> /* Macros to implement the mutex-based atomics. */</div><div class='ctx'> #define GF_ATOMIC_OP_PREPARE(_atomic, _name)                                   \</div><div class='head'>diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c<br/>index a1b87bf5db2..7e2713fa384 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/call-stub.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/call-stub.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/call-stub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/call-stub.c</a></div><div class='hunk'>@@ -16,2754 +16,2557 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> static call_stub_t *</div><div class='del'>-stub_new (call_frame_t *frame,</div><div class='del'>-          char wind,</div><div class='del'>-          glusterfs_fop_t fop)</div><div class='add'>+stub_new(call_frame_t *frame, char wind, glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *new = NULL;</div><div class='add'>+    call_stub_t *new = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        new = mem_get0 (frame-&gt;this-&gt;ctx-&gt;stub_mem_pool);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", new, out);</div><div class='add'>+    new = mem_get0(frame-&gt;this-&gt;ctx-&gt;stub_mem_pool);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", new, out);</div><div class='ctx'> </div><div class='del'>-        new-&gt;frame = frame;</div><div class='del'>-        new-&gt;wind = wind;</div><div class='del'>-        new-&gt;fop = fop;</div><div class='del'>-        new-&gt;stub_mem_pool = frame-&gt;this-&gt;ctx-&gt;stub_mem_pool;</div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;list);</div><div class='add'>+    new-&gt;frame = frame;</div><div class='add'>+    new-&gt;wind = wind;</div><div class='add'>+    new-&gt;fop = fop;</div><div class='add'>+    new-&gt;stub_mem_pool = frame-&gt;this-&gt;ctx-&gt;stub_mem_pool;</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;list);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;args_cbk.entries);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;args_cbk.entries);</div><div class='ctx'> out:</div><div class='del'>-        return new;</div><div class='add'>+    return new;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_lookup_stub (call_frame_t *frame, fop_lookup_t fn, loc_t *loc,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+fop_lookup_stub(call_frame_t *frame, fop_lookup_t fn, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_LOOKUP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_LOOKUP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.lookup = fn;</div><div class='del'>-        args_lookup_store (&amp;stub-&gt;args, loc, xdata);</div><div class='add'>+    stub-&gt;fn.lookup = fn;</div><div class='add'>+    args_lookup_store(&amp;stub-&gt;args, loc, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_lookup_cbk_stub (call_frame_t *frame, fop_lookup_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     inode_t *inode, struct iatt *buf,</div><div class='del'>-                     dict_t *xdata, struct iatt *postparent)</div><div class='add'>+fop_lookup_cbk_stub(call_frame_t *frame, fop_lookup_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                    dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_LOOKUP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_LOOKUP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.lookup = fn;</div><div class='del'>-        args_lookup_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, inode,</div><div class='del'>-                               buf, xdata, postparent);</div><div class='add'>+    stub-&gt;fn_cbk.lookup = fn;</div><div class='add'>+    args_lookup_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                          postparent);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_stat_stub (call_frame_t *frame, fop_stat_t fn,</div><div class='del'>-               loc_t *loc, dict_t *xdata)</div><div class='add'>+fop_stat_stub(call_frame_t *frame, fop_stat_t fn, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_STAT);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_STAT);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.stat = fn;</div><div class='del'>-        args_stat_store (&amp;stub-&gt;args, loc, xdata);</div><div class='add'>+    stub-&gt;fn.stat = fn;</div><div class='add'>+    args_stat_store(&amp;stub-&gt;args, loc, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_stat_cbk_stub (call_frame_t *frame, fop_stat_cbk_t fn,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   struct iatt *buf, dict_t *xdata)</div><div class='add'>+fop_stat_cbk_stub(call_frame_t *frame, fop_stat_cbk_t fn, int32_t op_ret,</div><div class='add'>+                  int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_STAT);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_STAT);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.stat = fn;</div><div class='del'>-        args_stat_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, buf,</div><div class='del'>-                             xdata);</div><div class='add'>+    stub-&gt;fn_cbk.stat = fn;</div><div class='add'>+    args_stat_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, buf, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fstat_stub (call_frame_t *frame, fop_fstat_t fn,</div><div class='del'>-                fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_fstat_stub(call_frame_t *frame, fop_fstat_t fn, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FSTAT);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FSTAT);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fstat = fn;</div><div class='del'>-        args_fstat_store (&amp;stub-&gt;args, fd, xdata);</div><div class='add'>+    stub-&gt;fn.fstat = fn;</div><div class='add'>+    args_fstat_store(&amp;stub-&gt;args, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fstat_cbk_stub (call_frame_t *frame, fop_fstat_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *buf, dict_t *xdata)</div><div class='add'>+fop_fstat_cbk_stub(call_frame_t *frame, fop_fstat_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FSTAT);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FSTAT);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fstat = fn;</div><div class='del'>-        args_fstat_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, buf,</div><div class='del'>-                              xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fstat = fn;</div><div class='add'>+    args_fstat_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, buf, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_truncate_stub (call_frame_t *frame, fop_truncate_t fn,</div><div class='del'>-                   loc_t *loc, off_t off, dict_t *xdata)</div><div class='add'>+fop_truncate_stub(call_frame_t *frame, fop_truncate_t fn, loc_t *loc, off_t off,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_TRUNCATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_TRUNCATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.truncate = fn;</div><div class='del'>-        args_truncate_store (&amp;stub-&gt;args, loc, off, xdata);</div><div class='add'>+    stub-&gt;fn.truncate = fn;</div><div class='add'>+    args_truncate_store(&amp;stub-&gt;args, loc, off, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_truncate_cbk_stub (call_frame_t *frame, fop_truncate_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-		       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+fop_truncate_cbk_stub(call_frame_t *frame, fop_truncate_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_TRUNCATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_TRUNCATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.truncate = fn;</div><div class='del'>-        args_truncate_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno,</div><div class='del'>-                                 prebuf, postbuf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.truncate = fn;</div><div class='add'>+    args_truncate_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                            xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_ftruncate_stub (call_frame_t *frame, fop_ftruncate_t fn,</div><div class='del'>-                    fd_t *fd, off_t off, dict_t *xdata)</div><div class='add'>+fop_ftruncate_stub(call_frame_t *frame, fop_ftruncate_t fn, fd_t *fd, off_t off,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FTRUNCATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FTRUNCATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.ftruncate = fn;</div><div class='del'>-        args_ftruncate_store (&amp;stub-&gt;args, fd, off, xdata);</div><div class='add'>+    stub-&gt;fn.ftruncate = fn;</div><div class='add'>+    args_ftruncate_store(&amp;stub-&gt;args, fd, off, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_ftruncate_cbk_stub (call_frame_t *frame, fop_ftruncate_cbk_t fn,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-			struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+fop_ftruncate_cbk_stub(call_frame_t *frame, fop_ftruncate_cbk_t fn,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FTRUNCATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FTRUNCATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.ftruncate = fn;</div><div class='del'>-        args_ftruncate_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno,</div><div class='del'>-                                  prebuf, postbuf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.ftruncate = fn;</div><div class='add'>+    args_ftruncate_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                             xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_access_stub (call_frame_t *frame, fop_access_t fn,</div><div class='del'>-                 loc_t *loc, int32_t mask, dict_t *xdata)</div><div class='add'>+fop_access_stub(call_frame_t *frame, fop_access_t fn, loc_t *loc, int32_t mask,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_ACCESS);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_ACCESS);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.access = fn;</div><div class='del'>-        args_access_store (&amp;stub-&gt;args, loc, mask, xdata);</div><div class='add'>+    stub-&gt;fn.access = fn;</div><div class='add'>+    args_access_store(&amp;stub-&gt;args, loc, mask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_access_cbk_stub (call_frame_t *frame, fop_access_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_access_cbk_stub(call_frame_t *frame, fop_access_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_ACCESS);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_ACCESS);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.access = fn;</div><div class='del'>-        args_access_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.access = fn;</div><div class='add'>+    args_access_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readlink_stub (call_frame_t *frame, fop_readlink_t fn,</div><div class='del'>-                   loc_t *loc, size_t size, dict_t *xdata)</div><div class='add'>+fop_readlink_stub(call_frame_t *frame, fop_readlink_t fn, loc_t *loc,</div><div class='add'>+                  size_t size, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_READLINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_READLINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.readlink = fn;</div><div class='del'>-        args_readlink_store (&amp;stub-&gt;args, loc, size, xdata);</div><div class='add'>+    stub-&gt;fn.readlink = fn;</div><div class='add'>+    args_readlink_store(&amp;stub-&gt;args, loc, size, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readlink_cbk_stub (call_frame_t *frame, fop_readlink_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       const char *path, struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+fop_readlink_cbk_stub(call_frame_t *frame, fop_readlink_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                      struct iatt *stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_READLINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_READLINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.readlink = fn;</div><div class='del'>-        args_readlink_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, path,</div><div class='del'>-                                 stbuf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.readlink = fn;</div><div class='add'>+    args_readlink_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, path, stbuf,</div><div class='add'>+                            xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_mknod_stub (call_frame_t *frame, fop_mknod_t fn, loc_t *loc, mode_t mode,</div><div class='del'>-                dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+fop_mknod_stub(call_frame_t *frame, fop_mknod_t fn, loc_t *loc, mode_t mode,</div><div class='add'>+               dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_MKNOD);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_MKNOD);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.mknod = fn;</div><div class='del'>-        args_mknod_store (&amp;stub-&gt;args, loc, mode, rdev, umask, xdata);</div><div class='add'>+    stub-&gt;fn.mknod = fn;</div><div class='add'>+    args_mknod_store(&amp;stub-&gt;args, loc, mode, rdev, umask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_mknod_cbk_stub (call_frame_t *frame, fop_mknod_cbk_t fn, int32_t op_ret,</div><div class='del'>-                    int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		    dict_t *xdata)</div><div class='add'>+fop_mknod_cbk_stub(call_frame_t *frame, fop_mknod_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                   struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_MKNOD);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_MKNOD);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.mknod = fn;</div><div class='del'>-        args_mknod_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.mknod = fn;</div><div class='add'>+    args_mknod_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='add'>+                         preparent, postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_mkdir_stub (call_frame_t *frame, fop_mkdir_t fn,</div><div class='del'>-                loc_t *loc, mode_t mode, mode_t umask, dict_t *xdata)</div><div class='add'>+fop_mkdir_stub(call_frame_t *frame, fop_mkdir_t fn, loc_t *loc, mode_t mode,</div><div class='add'>+               mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_MKDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_MKDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.mkdir = fn;</div><div class='del'>-        args_mkdir_store (&amp;stub-&gt;args, loc, mode, umask, xdata);</div><div class='add'>+    stub-&gt;fn.mkdir = fn;</div><div class='add'>+    args_mkdir_store(&amp;stub-&gt;args, loc, mode, umask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_mkdir_cbk_stub (call_frame_t *frame, fop_mkdir_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+fop_mkdir_cbk_stub(call_frame_t *frame, fop_mkdir_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                   struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_MKDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_MKDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.mkdir = fn;</div><div class='del'>-        args_mkdir_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, inode,</div><div class='del'>-                              buf, preparent, postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.mkdir = fn;</div><div class='add'>+    args_mkdir_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='add'>+                         preparent, postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_unlink_stub (call_frame_t *frame, fop_unlink_t fn,</div><div class='del'>-                 loc_t *loc, int xflag, dict_t *xdata)</div><div class='add'>+fop_unlink_stub(call_frame_t *frame, fop_unlink_t fn, loc_t *loc, int xflag,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_UNLINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_UNLINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.unlink = fn;</div><div class='del'>-        args_unlink_store (&amp;stub-&gt;args, loc, xflag, xdata);</div><div class='add'>+    stub-&gt;fn.unlink = fn;</div><div class='add'>+    args_unlink_store(&amp;stub-&gt;args, loc, xflag, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_unlink_cbk_stub (call_frame_t *frame, fop_unlink_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		     dict_t *xdata)</div><div class='add'>+fop_unlink_cbk_stub(call_frame_t *frame, fop_unlink_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_UNLINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_UNLINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.unlink = fn;</div><div class='del'>-        args_unlink_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, preparent,</div><div class='del'>-                               postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.unlink = fn;</div><div class='add'>+    args_unlink_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, preparent,</div><div class='add'>+                          postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_rmdir_stub (call_frame_t *frame, fop_rmdir_t fn,</div><div class='del'>-                loc_t *loc, int flags, dict_t *xdata)</div><div class='add'>+fop_rmdir_stub(call_frame_t *frame, fop_rmdir_t fn, loc_t *loc, int flags,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_RMDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_RMDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.rmdir = fn;</div><div class='del'>-        args_rmdir_store (&amp;stub-&gt;args, loc, flags, xdata);</div><div class='add'>+    stub-&gt;fn.rmdir = fn;</div><div class='add'>+    args_rmdir_store(&amp;stub-&gt;args, loc, flags, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_rmdir_cbk_stub (call_frame_t *frame, fop_rmdir_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		    dict_t *xdata)</div><div class='add'>+fop_rmdir_cbk_stub(call_frame_t *frame, fop_rmdir_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_RMDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_RMDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.rmdir = fn;</div><div class='del'>-        args_rmdir_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, preparent,</div><div class='del'>-                              postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.rmdir = fn;</div><div class='add'>+    args_rmdir_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, preparent,</div><div class='add'>+                         postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_symlink_stub (call_frame_t *frame, fop_symlink_t fn,</div><div class='del'>-                  const char *linkname, loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+fop_symlink_stub(call_frame_t *frame, fop_symlink_t fn, const char *linkname,</div><div class='add'>+                 loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", linkname, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", linkname, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_SYMLINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_SYMLINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.symlink = fn;</div><div class='del'>-        args_symlink_store (&amp;stub-&gt;args, linkname, loc, umask, xdata);</div><div class='add'>+    stub-&gt;fn.symlink = fn;</div><div class='add'>+    args_symlink_store(&amp;stub-&gt;args, linkname, loc, umask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_symlink_cbk_stub (call_frame_t *frame, fop_symlink_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *buf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		      dict_t *xdata)</div><div class='add'>+fop_symlink_cbk_stub(call_frame_t *frame, fop_symlink_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                     struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_SYMLINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_SYMLINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.symlink = fn;</div><div class='del'>-        args_symlink_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='del'>-                                preparent, postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.symlink = fn;</div><div class='add'>+    args_symlink_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='add'>+                           preparent, postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_rename_stub (call_frame_t *frame, fop_rename_t fn,</div><div class='del'>-                 loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+fop_rename_stub(call_frame_t *frame, fop_rename_t fn, loc_t *oldloc,</div><div class='add'>+                loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", oldloc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", newloc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", oldloc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", newloc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_RENAME);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_RENAME);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.rename = fn;</div><div class='del'>-        args_rename_store (&amp;stub-&gt;args, oldloc, newloc, xdata);</div><div class='add'>+    stub-&gt;fn.rename = fn;</div><div class='add'>+    args_rename_store(&amp;stub-&gt;args, oldloc, newloc, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_rename_cbk_stub (call_frame_t *frame, fop_rename_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                     struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                     struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-		     dict_t *xdata)</div><div class='add'>+fop_rename_cbk_stub(call_frame_t *frame, fop_rename_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, struct iatt *buf,</div><div class='add'>+                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_RENAME);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_RENAME);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.rename = fn;</div><div class='del'>-        args_rename_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, buf,</div><div class='del'>-                               preoldparent, postoldparent, prenewparent,</div><div class='del'>-                               postnewparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.rename = fn;</div><div class='add'>+    args_rename_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                          postoldparent, prenewparent, postnewparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_link_stub (call_frame_t *frame, fop_link_t fn,</div><div class='del'>-               loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+fop_link_stub(call_frame_t *frame, fop_link_t fn, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", oldloc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", newloc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", oldloc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", newloc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_LINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_LINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.link = fn;</div><div class='del'>-        args_link_store (&amp;stub-&gt;args, oldloc, newloc, xdata);</div><div class='add'>+    stub-&gt;fn.link = fn;</div><div class='add'>+    args_link_store(&amp;stub-&gt;args, oldloc, newloc, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_link_cbk_stub (call_frame_t *frame, fop_link_cbk_t fn,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   inode_t *inode, struct iatt *buf,</div><div class='del'>-                   struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		   dict_t *xdata)</div><div class='add'>+fop_link_cbk_stub(call_frame_t *frame, fop_link_cbk_t fn, int32_t op_ret,</div><div class='add'>+                  int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                  struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_LINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_LINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.link = fn;</div><div class='del'>-        args_link_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno,</div><div class='del'>-                             inode, buf, preparent, postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.link = fn;</div><div class='add'>+    args_link_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_create_stub (call_frame_t *frame, fop_create_t fn,</div><div class='del'>-                 loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-                 mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_create_stub(call_frame_t *frame, fop_create_t fn, loc_t *loc, int32_t flags,</div><div class='add'>+                mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_CREATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_CREATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.create = fn;</div><div class='del'>-        args_create_store (&amp;stub-&gt;args, loc, flags, mode,</div><div class='del'>-                           umask, fd, xdata);</div><div class='add'>+    stub-&gt;fn.create = fn;</div><div class='add'>+    args_create_store(&amp;stub-&gt;args, loc, flags, mode, umask, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_create_cbk_stub (call_frame_t *frame, fop_create_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		     dict_t *xdata)</div><div class='add'>+fop_create_cbk_stub(call_frame_t *frame, fop_create_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_CREATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_CREATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.create = fn;</div><div class='del'>-        args_create_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, fd, inode,</div><div class='del'>-                               buf, preparent, postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.create = fn;</div><div class='add'>+    args_create_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                          preparent, postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_open_stub (call_frame_t *frame, fop_open_t fn,</div><div class='del'>-               loc_t *loc, int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_open_stub(call_frame_t *frame, fop_open_t fn, loc_t *loc, int32_t flags,</div><div class='add'>+              fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_OPEN);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_OPEN);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.open = fn;</div><div class='del'>-        args_open_store (&amp;stub-&gt;args, loc, flags, fd, xdata);</div><div class='add'>+    stub-&gt;fn.open = fn;</div><div class='add'>+    args_open_store(&amp;stub-&gt;args, loc, flags, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_open_cbk_stub (call_frame_t *frame, fop_open_cbk_t fn,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_open_cbk_stub(call_frame_t *frame, fop_open_cbk_t fn, int32_t op_ret,</div><div class='add'>+                  int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_OPEN);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_OPEN);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.open = fn;</div><div class='del'>-        args_open_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, fd, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.open = fn;</div><div class='add'>+    args_open_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readv_stub (call_frame_t *frame, fop_readv_t fn,</div><div class='del'>-                fd_t *fd, size_t size, off_t off, uint32_t flags,</div><div class='del'>-		dict_t *xdata)</div><div class='add'>+fop_readv_stub(call_frame_t *frame, fop_readv_t fn, fd_t *fd, size_t size,</div><div class='add'>+               off_t off, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_READ);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_READ);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.readv = fn;</div><div class='del'>-        args_readv_store (&amp;stub-&gt;args, fd, size, off, flags, xdata);</div><div class='add'>+    stub-&gt;fn.readv = fn;</div><div class='add'>+    args_readv_store(&amp;stub-&gt;args, fd, size, off, flags, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readv_cbk_stub (call_frame_t *frame, fop_readv_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-		    int32_t count, struct iatt *stbuf,</div><div class='del'>-                    struct iobref *iobref, dict_t *xdata)</div><div class='add'>+fop_readv_cbk_stub(call_frame_t *frame, fop_readv_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, struct iovec *vector, int32_t count,</div><div class='add'>+                   struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_READ);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_READ);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.readv = fn;</div><div class='del'>-        args_readv_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, vector,</div><div class='del'>-                              count, stbuf, iobref, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.readv = fn;</div><div class='add'>+    args_readv_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, vector, count,</div><div class='add'>+                         stbuf, iobref, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_writev_stub (call_frame_t *frame, fop_writev_t fn,</div><div class='del'>-                 fd_t *fd, struct iovec *vector, int32_t count, off_t off,</div><div class='del'>-		 uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+fop_writev_stub(call_frame_t *frame, fop_writev_t fn, fd_t *fd,</div><div class='add'>+                struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='add'>+                struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", vector, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", vector, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_WRITE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_WRITE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.writev = fn;</div><div class='del'>-        args_writev_store (&amp;stub-&gt;args, fd, vector, count, off, flags,</div><div class='del'>-                           iobref, xdata);</div><div class='add'>+    stub-&gt;fn.writev = fn;</div><div class='add'>+    args_writev_store(&amp;stub-&gt;args, fd, vector, count, off, flags, iobref,</div><div class='add'>+                      xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_writev_cbk_stub (call_frame_t *frame, fop_writev_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+fop_writev_cbk_stub(call_frame_t *frame, fop_writev_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_WRITE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_WRITE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.writev = fn;</div><div class='del'>-        args_writev_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno,</div><div class='del'>-                               prebuf, postbuf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.writev = fn;</div><div class='add'>+    args_writev_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                          xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_flush_stub (call_frame_t *frame, fop_flush_t fn,</div><div class='del'>-                fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_flush_stub(call_frame_t *frame, fop_flush_t fn, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FLUSH);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FLUSH);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.flush = fn;</div><div class='del'>-        args_flush_store (&amp;stub-&gt;args, fd, xdata);</div><div class='add'>+    stub-&gt;fn.flush = fn;</div><div class='add'>+    args_flush_store(&amp;stub-&gt;args, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_flush_cbk_stub (call_frame_t *frame, fop_flush_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_flush_cbk_stub(call_frame_t *frame, fop_flush_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FLUSH);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FLUSH);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.flush = fn;</div><div class='del'>-        args_flush_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.flush = fn;</div><div class='add'>+    args_flush_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsync_stub (call_frame_t *frame, fop_fsync_t fn,</div><div class='del'>-                fd_t *fd, int32_t datasync, dict_t *xdata)</div><div class='add'>+fop_fsync_stub(call_frame_t *frame, fop_fsync_t fn, fd_t *fd, int32_t datasync,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FSYNC);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FSYNC);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fsync = fn;</div><div class='del'>-        args_fsync_store (&amp;stub-&gt;args, fd, datasync, xdata);</div><div class='add'>+    stub-&gt;fn.fsync = fn;</div><div class='add'>+    args_fsync_store(&amp;stub-&gt;args, fd, datasync, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsync_cbk_stub (call_frame_t *frame, fop_fsync_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+fop_fsync_cbk_stub(call_frame_t *frame, fop_fsync_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FSYNC);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FSYNC);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fsync = fn;</div><div class='del'>-        args_fsync_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno,</div><div class='del'>-                              prebuf, postbuf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fsync = fn;</div><div class='add'>+    args_fsync_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                         xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_opendir_stub (call_frame_t *frame, fop_opendir_t fn,</div><div class='del'>-                  loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_opendir_stub(call_frame_t *frame, fop_opendir_t fn, loc_t *loc, fd_t *fd,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_OPENDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_OPENDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.opendir = fn;</div><div class='del'>-        args_opendir_store (&amp;stub-&gt;args, loc, fd, xdata);</div><div class='add'>+    stub-&gt;fn.opendir = fn;</div><div class='add'>+    args_opendir_store(&amp;stub-&gt;args, loc, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_opendir_cbk_stub (call_frame_t *frame, fop_opendir_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      fd_t *fd, dict_t *xdata)</div><div class='add'>+fop_opendir_cbk_stub(call_frame_t *frame, fop_opendir_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_OPENDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_OPENDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.opendir = fn;</div><div class='del'>-        args_opendir_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, fd, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.opendir = fn;</div><div class='add'>+    args_opendir_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, fd, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsyncdir_stub (call_frame_t *frame, fop_fsyncdir_t fn,</div><div class='del'>-                   fd_t *fd, int32_t datasync, dict_t *xdata)</div><div class='add'>+fop_fsyncdir_stub(call_frame_t *frame, fop_fsyncdir_t fn, fd_t *fd,</div><div class='add'>+                  int32_t datasync, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FSYNCDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FSYNCDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fsyncdir = fn;</div><div class='del'>-        args_fsyncdir_store (&amp;stub-&gt;args, fd, datasync, xdata);</div><div class='add'>+    stub-&gt;fn.fsyncdir = fn;</div><div class='add'>+    args_fsyncdir_store(&amp;stub-&gt;args, fd, datasync, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsyncdir_cbk_stub (call_frame_t *frame, fop_fsyncdir_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_fsyncdir_cbk_stub(call_frame_t *frame, fop_fsyncdir_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FSYNCDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FSYNCDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fsyncdir = fn;</div><div class='del'>-        args_fsyncdir_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fsyncdir = fn;</div><div class='add'>+    args_fsyncdir_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_statfs_stub (call_frame_t *frame, fop_statfs_t fn,</div><div class='del'>-                 loc_t *loc, dict_t *xdata)</div><div class='add'>+fop_statfs_stub(call_frame_t *frame, fop_statfs_t fn, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_STATFS);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_STATFS);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.statfs = fn;</div><div class='del'>-        args_statfs_store (&amp;stub-&gt;args, loc, xdata);</div><div class='add'>+    stub-&gt;fn.statfs = fn;</div><div class='add'>+    args_statfs_store(&amp;stub-&gt;args, loc, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_statfs_cbk_stub (call_frame_t *frame, fop_statfs_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct statvfs *buf, dict_t *xdata)</div><div class='add'>+fop_statfs_cbk_stub(call_frame_t *frame, fop_statfs_cbk_t fn, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_STATFS);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_STATFS);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.statfs = fn;</div><div class='del'>-        args_statfs_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, buf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.statfs = fn;</div><div class='add'>+    args_statfs_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, buf, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_setxattr_stub (call_frame_t *frame, fop_setxattr_t fn,</div><div class='del'>-                   loc_t *loc, dict_t *dict,</div><div class='del'>-                   int32_t flags, dict_t *xdata)</div><div class='add'>+fop_setxattr_stub(call_frame_t *frame, fop_setxattr_t fn, loc_t *loc,</div><div class='add'>+                  dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_SETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_SETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.setxattr = fn;</div><div class='del'>-        args_setxattr_store (&amp;stub-&gt;args, loc, dict, flags, xdata);</div><div class='add'>+    stub-&gt;fn.setxattr = fn;</div><div class='add'>+    args_setxattr_store(&amp;stub-&gt;args, loc, dict, flags, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_setxattr_cbk_stub (call_frame_t *frame,</div><div class='del'>-                       fop_setxattr_cbk_t fn,</div><div class='del'>-                       int32_t op_ret,</div><div class='del'>-                       int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_setxattr_cbk_stub(call_frame_t *frame, fop_setxattr_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_SETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_SETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.setxattr = fn;</div><div class='del'>-        args_setxattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.setxattr = fn;</div><div class='add'>+    args_setxattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_getxattr_stub (call_frame_t *frame, fop_getxattr_t fn,</div><div class='del'>-                   loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+fop_getxattr_stub(call_frame_t *frame, fop_getxattr_t fn, loc_t *loc,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_GETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_GETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.getxattr = fn;</div><div class='del'>-        args_getxattr_store (&amp;stub-&gt;args, loc, name, xdata);</div><div class='add'>+    stub-&gt;fn.getxattr = fn;</div><div class='add'>+    args_getxattr_store(&amp;stub-&gt;args, loc, name, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_getxattr_cbk_stub (call_frame_t *frame, fop_getxattr_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *dict, dict_t *xdata)</div><div class='add'>+fop_getxattr_cbk_stub(call_frame_t *frame, fop_getxattr_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_GETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_GETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.getxattr = fn;</div><div class='del'>-        args_getxattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, dict,</div><div class='del'>-                                 xdata);</div><div class='add'>+    stub-&gt;fn_cbk.getxattr = fn;</div><div class='add'>+    args_getxattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, dict, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsetxattr_stub (call_frame_t *frame, fop_fsetxattr_t fn,</div><div class='del'>-                    fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+fop_fsetxattr_stub(call_frame_t *frame, fop_fsetxattr_t fn, fd_t *fd,</div><div class='add'>+                   dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fd, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FSETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FSETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fsetxattr = fn;</div><div class='del'>-        args_fsetxattr_store (&amp;stub-&gt;args, fd, dict, flags, xdata);</div><div class='add'>+    stub-&gt;fn.fsetxattr = fn;</div><div class='add'>+    args_fsetxattr_store(&amp;stub-&gt;args, fd, dict, flags, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsetxattr_cbk_stub (call_frame_t *frame, fop_fsetxattr_cbk_t fn,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_fsetxattr_cbk_stub(call_frame_t *frame, fop_fsetxattr_cbk_t fn,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FSETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FSETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fsetxattr = fn;</div><div class='del'>-        args_fsetxattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fsetxattr = fn;</div><div class='add'>+    args_fsetxattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fgetxattr_stub (call_frame_t *frame, fop_fgetxattr_t fn,</div><div class='del'>-                    fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+fop_fgetxattr_stub(call_frame_t *frame, fop_fgetxattr_t fn, fd_t *fd,</div><div class='add'>+                   const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fd, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FGETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FGETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fgetxattr = fn;</div><div class='del'>-        args_fgetxattr_store (&amp;stub-&gt;args, fd, name, xdata);</div><div class='add'>+    stub-&gt;fn.fgetxattr = fn;</div><div class='add'>+    args_fgetxattr_store(&amp;stub-&gt;args, fd, name, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fgetxattr_cbk_stub (call_frame_t *frame, fop_fgetxattr_cbk_t fn,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        dict_t *dict, dict_t *xdata)</div><div class='add'>+fop_fgetxattr_cbk_stub(call_frame_t *frame, fop_fgetxattr_cbk_t fn,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_GETXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_GETXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fgetxattr = fn;</div><div class='del'>-        args_fgetxattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, dict,</div><div class='del'>-                                  xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fgetxattr = fn;</div><div class='add'>+    args_fgetxattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, dict, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_removexattr_stub (call_frame_t *frame, fop_removexattr_t fn,</div><div class='del'>-                      loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+fop_removexattr_stub(call_frame_t *frame, fop_removexattr_t fn, loc_t *loc,</div><div class='add'>+                     const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", name, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_REMOVEXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_REMOVEXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.removexattr = fn;</div><div class='del'>-        args_removexattr_store (&amp;stub-&gt;args, loc, name, xdata);</div><div class='add'>+    stub-&gt;fn.removexattr = fn;</div><div class='add'>+    args_removexattr_store(&amp;stub-&gt;args, loc, name, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_removexattr_cbk_stub (call_frame_t *frame, fop_removexattr_cbk_t fn,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_removexattr_cbk_stub(call_frame_t *frame, fop_removexattr_cbk_t fn,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_REMOVEXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_REMOVEXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.removexattr = fn;</div><div class='del'>-        args_removexattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.removexattr = fn;</div><div class='add'>+    args_removexattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fremovexattr_stub (call_frame_t *frame, fop_fremovexattr_t fn,</div><div class='del'>-                       fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+fop_fremovexattr_stub(call_frame_t *frame, fop_fremovexattr_t fn, fd_t *fd,</div><div class='add'>+                      const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", name, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FREMOVEXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FREMOVEXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fremovexattr = fn;</div><div class='del'>-        args_fremovexattr_store (&amp;stub-&gt;args, fd, name, xdata);</div><div class='add'>+    stub-&gt;fn.fremovexattr = fn;</div><div class='add'>+    args_fremovexattr_store(&amp;stub-&gt;args, fd, name, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fremovexattr_cbk_stub (call_frame_t *frame, fop_fremovexattr_cbk_t fn,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_fremovexattr_cbk_stub(call_frame_t *frame, fop_fremovexattr_cbk_t fn,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FREMOVEXATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FREMOVEXATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fremovexattr = fn;</div><div class='del'>-        args_fremovexattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fremovexattr = fn;</div><div class='add'>+    args_fremovexattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_lk_stub (call_frame_t *frame, fop_lk_t fn,</div><div class='del'>-             fd_t *fd, int32_t cmd,</div><div class='del'>-             struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+fop_lk_stub(call_frame_t *frame, fop_lk_t fn, fd_t *fd, int32_t cmd,</div><div class='add'>+            struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", lock, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_LK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_LK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.lk = fn;</div><div class='del'>-        args_lk_store (&amp;stub-&gt;args, fd, cmd, lock, xdata);</div><div class='add'>+    stub-&gt;fn.lk = fn;</div><div class='add'>+    args_lk_store(&amp;stub-&gt;args, fd, cmd, lock, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_lk_cbk_stub (call_frame_t *frame, fop_lk_cbk_t fn,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+fop_lk_cbk_stub(call_frame_t *frame, fop_lk_cbk_t fn, int32_t op_ret,</div><div class='add'>+                int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_LK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_LK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.lk = fn;</div><div class='del'>-        args_lk_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, lock, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.lk = fn;</div><div class='add'>+    args_lk_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, lock, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_inodelk_stub (call_frame_t *frame, fop_inodelk_t fn,</div><div class='del'>-                  const char *volume, loc_t *loc, int32_t cmd,</div><div class='del'>-                  struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+fop_inodelk_stub(call_frame_t *frame, fop_inodelk_t fn, const char *volume,</div><div class='add'>+                 loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", lock, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_INODELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_INODELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.inodelk = fn;</div><div class='del'>-        args_inodelk_store (&amp;stub-&gt;args, volume, loc, cmd,</div><div class='del'>-                            lock, xdata);</div><div class='add'>+    stub-&gt;fn.inodelk = fn;</div><div class='add'>+    args_inodelk_store(&amp;stub-&gt;args, volume, loc, cmd, lock, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_inodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_inodelk_cbk_stub(call_frame_t *frame, fop_inodelk_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_INODELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_INODELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.inodelk       = fn;</div><div class='del'>-        args_inodelk_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.inodelk = fn;</div><div class='add'>+    args_inodelk_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn,</div><div class='del'>-                   const char *volume, fd_t *fd, int32_t cmd,</div><div class='del'>-                   struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+fop_finodelk_stub(call_frame_t *frame, fop_finodelk_t fn, const char *volume,</div><div class='add'>+                  fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", lock, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FINODELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FINODELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.finodelk = fn;</div><div class='del'>-        args_finodelk_store (&amp;stub-&gt;args, volume, fd, cmd,</div><div class='del'>-                             lock, xdata);</div><div class='add'>+    stub-&gt;fn.finodelk = fn;</div><div class='add'>+    args_finodelk_store(&amp;stub-&gt;args, volume, fd, cmd, lock, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_finodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_finodelk_cbk_stub(call_frame_t *frame, fop_inodelk_cbk_t fn, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FINODELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FINODELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.finodelk       = fn;</div><div class='del'>-        args_finodelk_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.finodelk = fn;</div><div class='add'>+    args_finodelk_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_entrylk_stub (call_frame_t *frame, fop_entrylk_t fn,</div><div class='del'>-                  const char *volume, loc_t *loc, const char *name,</div><div class='del'>-                  entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+fop_entrylk_stub(call_frame_t *frame, fop_entrylk_t fn, const char *volume,</div><div class='add'>+                 loc_t *loc, const char *name, entrylk_cmd cmd,</div><div class='add'>+                 entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_ENTRYLK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_ENTRYLK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.entrylk = fn;</div><div class='del'>-        args_entrylk_store (&amp;stub-&gt;args, volume, loc, name, cmd, type, xdata);</div><div class='add'>+    stub-&gt;fn.entrylk = fn;</div><div class='add'>+    args_entrylk_store(&amp;stub-&gt;args, volume, loc, name, cmd, type, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_entrylk_cbk_stub (call_frame_t *frame, fop_entrylk_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_entrylk_cbk_stub(call_frame_t *frame, fop_entrylk_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_ENTRYLK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_ENTRYLK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.entrylk       = fn;</div><div class='del'>-        args_entrylk_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.entrylk = fn;</div><div class='add'>+    args_entrylk_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fentrylk_stub (call_frame_t *frame, fop_fentrylk_t fn,</div><div class='del'>-                   const char *volume, fd_t *fd, const char *name,</div><div class='del'>-                   entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+fop_fentrylk_stub(call_frame_t *frame, fop_fentrylk_t fn, const char *volume,</div><div class='add'>+                  fd_t *fd, const char *name, entrylk_cmd cmd,</div><div class='add'>+                  entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FENTRYLK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FENTRYLK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fentrylk = fn;</div><div class='del'>-        args_fentrylk_store (&amp;stub-&gt;args, volume, fd, name, cmd, type, xdata);</div><div class='add'>+    stub-&gt;fn.fentrylk = fn;</div><div class='add'>+    args_fentrylk_store(&amp;stub-&gt;args, volume, fd, name, cmd, type, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fentrylk_cbk_stub (call_frame_t *frame, fop_fentrylk_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_fentrylk_cbk_stub(call_frame_t *frame, fop_fentrylk_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FENTRYLK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FENTRYLK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fentrylk       = fn;</div><div class='del'>-        args_fentrylk_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fentrylk = fn;</div><div class='add'>+    args_fentrylk_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readdirp_cbk_stub (call_frame_t *frame, fop_readdirp_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+fop_readdirp_cbk_stub(call_frame_t *frame, fop_readdirp_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_READDIRP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_READDIRP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.readdirp = fn;</div><div class='del'>-        args_readdirp_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, entries,</div><div class='del'>-                                 xdata);</div><div class='add'>+    stub-&gt;fn_cbk.readdirp = fn;</div><div class='add'>+    args_readdirp_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, entries, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readdir_cbk_stub (call_frame_t *frame, fop_readdir_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+fop_readdir_cbk_stub(call_frame_t *frame, fop_readdir_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, gf_dirent_t *entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_READDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_READDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.readdir = fn;</div><div class='del'>-        args_readdir_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, entries,</div><div class='del'>-                                xdata);</div><div class='add'>+    stub-&gt;fn_cbk.readdir = fn;</div><div class='add'>+    args_readdir_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, entries, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readdir_stub (call_frame_t *frame, fop_readdir_t fn,</div><div class='del'>-                  fd_t *fd, size_t size,</div><div class='del'>-                  off_t off, dict_t *xdata)</div><div class='add'>+fop_readdir_stub(call_frame_t *frame, fop_readdir_t fn, fd_t *fd, size_t size,</div><div class='add'>+                 off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_READDIR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_READDIR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.readdir = fn;</div><div class='del'>-        args_readdir_store (&amp;stub-&gt;args, fd, size, off, xdata);</div><div class='add'>+    stub-&gt;fn.readdir = fn;</div><div class='add'>+    args_readdir_store(&amp;stub-&gt;args, fd, size, off, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_readdirp_stub (call_frame_t *frame, fop_readdirp_t fn,</div><div class='del'>-                   fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='add'>+fop_readdirp_stub(call_frame_t *frame, fop_readdirp_t fn, fd_t *fd, size_t size,</div><div class='add'>+                  off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_READDIRP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_READDIRP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.readdirp = fn;</div><div class='del'>-        args_readdirp_store (&amp;stub-&gt;args, fd, size, off, xdata);</div><div class='add'>+    stub-&gt;fn.readdirp = fn;</div><div class='add'>+    args_readdirp_store(&amp;stub-&gt;args, fd, size, off, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_rchecksum_stub (call_frame_t *frame, fop_rchecksum_t fn,</div><div class='del'>-                    fd_t *fd, off_t offset, int32_t len, dict_t *xdata)</div><div class='add'>+fop_rchecksum_stub(call_frame_t *frame, fop_rchecksum_t fn, fd_t *fd,</div><div class='add'>+                   off_t offset, int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fd, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_RCHECKSUM);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_RCHECKSUM);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.rchecksum = fn;</div><div class='del'>-        args_rchecksum_store (&amp;stub-&gt;args, fd, offset, len, xdata);</div><div class='add'>+    stub-&gt;fn.rchecksum = fn;</div><div class='add'>+    args_rchecksum_store(&amp;stub-&gt;args, fd, offset, len, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_rchecksum_cbk_stub (call_frame_t *frame, fop_rchecksum_cbk_t fn,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        uint32_t weak_checksum, uint8_t *strong_checksum,</div><div class='del'>-			dict_t *xdata)</div><div class='add'>+fop_rchecksum_cbk_stub(call_frame_t *frame, fop_rchecksum_cbk_t fn,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, uint32_t weak_checksum,</div><div class='add'>+                       uint8_t *strong_checksum, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_RCHECKSUM);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_RCHECKSUM);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.rchecksum = fn;</div><div class='del'>-        args_rchecksum_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno,</div><div class='del'>-                                  weak_checksum, strong_checksum, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.rchecksum = fn;</div><div class='add'>+    args_rchecksum_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, weak_checksum,</div><div class='add'>+                             strong_checksum, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_xattrop_cbk_stub (call_frame_t *frame, fop_xattrop_cbk_t fn, int32_t op_ret,</div><div class='del'>-                      int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+fop_xattrop_cbk_stub(call_frame_t *frame, fop_xattrop_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_XATTROP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_XATTROP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.xattrop       = fn;</div><div class='del'>-        args_xattrop_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xattr,</div><div class='del'>-                                xdata);</div><div class='add'>+    stub-&gt;fn_cbk.xattrop = fn;</div><div class='add'>+    args_xattrop_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fxattrop_cbk_stub (call_frame_t *frame, fop_fxattrop_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *xattr, dict_t *xdata)</div><div class='add'>+fop_fxattrop_cbk_stub(call_frame_t *frame, fop_fxattrop_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FXATTROP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FXATTROP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fxattrop = fn;</div><div class='del'>-        args_xattrop_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xattr,</div><div class='del'>-                                xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fxattrop = fn;</div><div class='add'>+    args_xattrop_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_xattrop_stub (call_frame_t *frame, fop_xattrop_t fn,</div><div class='del'>-                  loc_t *loc, gf_xattrop_flags_t optype,</div><div class='del'>-                  dict_t *xattr, dict_t *xdata)</div><div class='add'>+fop_xattrop_stub(call_frame_t *frame, fop_xattrop_t fn, loc_t *loc,</div><div class='add'>+                 gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", xattr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", xattr, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_XATTROP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_XATTROP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.xattrop = fn;</div><div class='del'>-        args_xattrop_store (&amp;stub-&gt;args, loc, optype, xattr, xdata);</div><div class='add'>+    stub-&gt;fn.xattrop = fn;</div><div class='add'>+    args_xattrop_store(&amp;stub-&gt;args, loc, optype, xattr, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fxattrop_stub (call_frame_t *frame, fop_fxattrop_t fn,</div><div class='del'>-                   fd_t *fd, gf_xattrop_flags_t optype,</div><div class='del'>-                   dict_t *xattr, dict_t *xdata)</div><div class='add'>+fop_fxattrop_stub(call_frame_t *frame, fop_fxattrop_t fn, fd_t *fd,</div><div class='add'>+                  gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", xattr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", xattr, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FXATTROP);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FXATTROP);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fxattrop = fn;</div><div class='del'>-        args_fxattrop_store (&amp;stub-&gt;args, fd, optype, xattr, xdata);</div><div class='add'>+    stub-&gt;fn.fxattrop = fn;</div><div class='add'>+    args_fxattrop_store(&amp;stub-&gt;args, fd, optype, xattr, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_setattr_cbk_stub (call_frame_t *frame, fop_setattr_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-		      dict_t *xdata)</div><div class='add'>+fop_setattr_cbk_stub(call_frame_t *frame, fop_setattr_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                     struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_SETATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_SETATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.setattr = fn;</div><div class='del'>-        args_setattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='del'>-                                statpost, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.setattr = fn;</div><div class='add'>+    args_setattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                           xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsetattr_cbk_stub (call_frame_t *frame, fop_setattr_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-		       dict_t *xdata)</div><div class='add'>+fop_fsetattr_cbk_stub(call_frame_t *frame, fop_setattr_cbk_t fn, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                      struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FSETATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FSETATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fsetattr = fn;</div><div class='del'>-        args_fsetattr_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='del'>-                                 statpost, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.fsetattr = fn;</div><div class='add'>+    args_fsetattr_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='add'>+                            statpost, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_setattr_stub (call_frame_t *frame, fop_setattr_t fn,</div><div class='del'>-                  loc_t *loc, struct iatt *stbuf,</div><div class='del'>-                  int32_t valid, dict_t *xdata)</div><div class='add'>+fop_setattr_stub(call_frame_t *frame, fop_setattr_t fn, loc_t *loc,</div><div class='add'>+                 struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_SETATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_SETATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.setattr = fn;</div><div class='del'>-        args_setattr_store (&amp;stub-&gt;args, loc, stbuf, valid, xdata);</div><div class='add'>+    stub-&gt;fn.setattr = fn;</div><div class='add'>+    args_setattr_store(&amp;stub-&gt;args, loc, stbuf, valid, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_fsetattr_stub (call_frame_t *frame, fop_fsetattr_t fn,</div><div class='del'>-                   fd_t *fd, struct iatt *stbuf,</div><div class='del'>-                   int32_t valid, dict_t *xdata)</div><div class='add'>+fop_fsetattr_stub(call_frame_t *frame, fop_fsetattr_t fn, fd_t *fd,</div><div class='add'>+                  struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FSETATTR);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FSETATTR);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fsetattr = fn;</div><div class='del'>-        args_fsetattr_store (&amp;stub-&gt;args, fd, stbuf, valid, xdata);</div><div class='add'>+    stub-&gt;fn.fsetattr = fn;</div><div class='add'>+    args_fsetattr_store(&amp;stub-&gt;args, fd, stbuf, valid, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_fallocate_cbk_stub(call_frame_t *frame, fop_fallocate_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-		       dict_t *xdata)</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                       struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_FALLOCATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_FALLOCATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.fallocate = fn;</div><div class='add'>+    stub-&gt;fn_cbk.fallocate = fn;</div><div class='ctx'> </div><div class='del'>-        args_fallocate_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='del'>-                                  statpost, xdata);</div><div class='add'>+    args_fallocate_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='add'>+                             statpost, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_fallocate_stub(call_frame_t *frame, fop_fallocate_t fn, fd_t *fd,</div><div class='del'>-		   int32_t mode, off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+                   int32_t mode, off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_FALLOCATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_FALLOCATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.fallocate = fn;</div><div class='del'>-        args_fallocate_store (&amp;stub-&gt;args, fd, mode, offset, len, xdata);</div><div class='add'>+    stub-&gt;fn.fallocate = fn;</div><div class='add'>+    args_fallocate_store(&amp;stub-&gt;args, fd, mode, offset, len, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_discard_cbk_stub(call_frame_t *frame, fop_discard_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-		     dict_t *xdata)</div><div class='add'>+fop_discard_cbk_stub(call_frame_t *frame, fop_discard_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                     struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_DISCARD);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_DISCARD);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.discard = fn;</div><div class='add'>+    stub-&gt;fn_cbk.discard = fn;</div><div class='ctx'> </div><div class='del'>-        args_discard_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='del'>-                                statpost, xdata);</div><div class='add'>+    args_discard_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                           xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_discard_stub(call_frame_t *frame, fop_discard_t fn, fd_t *fd,</div><div class='del'>-		 off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+fop_discard_stub(call_frame_t *frame, fop_discard_t fn, fd_t *fd, off_t offset,</div><div class='add'>+                 size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_DISCARD);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_DISCARD);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.discard = fn;</div><div class='del'>-        args_discard_store (&amp;stub-&gt;args, fd, offset, len, xdata);</div><div class='add'>+    stub-&gt;fn.discard = fn;</div><div class='add'>+    args_discard_store(&amp;stub-&gt;args, fd, offset, len, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_zerofill_cbk_stub(call_frame_t *frame, fop_zerofill_cbk_t fn,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                      struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_ZEROFILL);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_ZEROFILL);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.zerofill = fn;</div><div class='add'>+    stub-&gt;fn_cbk.zerofill = fn;</div><div class='ctx'> </div><div class='del'>-        args_zerofill_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='del'>-                                 statpost, xdata);</div><div class='add'>+    args_zerofill_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, statpre,</div><div class='add'>+                            statpost, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='ctx'> fop_zerofill_stub(call_frame_t *frame, fop_zerofill_t fn, fd_t *fd,</div><div class='del'>-                 off_t offset, off_t len, dict_t *xdata)</div><div class='add'>+                  off_t offset, off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_ZEROFILL);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_ZEROFILL);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.zerofill = fn;</div><div class='del'>-        args_zerofill_store (&amp;stub-&gt;args, fd, offset, len, xdata);</div><div class='add'>+    stub-&gt;fn.zerofill = fn;</div><div class='add'>+    args_zerofill_store(&amp;stub-&gt;args, fd, offset, len, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_ipc_cbk_stub (call_frame_t *frame, fop_ipc_cbk_t fn,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_ipc_cbk_stub(call_frame_t *frame, fop_ipc_cbk_t fn, int32_t op_ret,</div><div class='add'>+                 int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_IPC);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_IPC);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.ipc = fn;</div><div class='add'>+    stub-&gt;fn_cbk.ipc = fn;</div><div class='ctx'> </div><div class='del'>-        args_ipc_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='add'>+    args_ipc_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_ipc_stub (call_frame_t *frame, fop_ipc_t fn,</div><div class='del'>-              int32_t op, dict_t *xdata)</div><div class='add'>+fop_ipc_stub(call_frame_t *frame, fop_ipc_t fn, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_IPC);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_IPC);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.ipc = fn;</div><div class='del'>-        args_ipc_store (&amp;stub-&gt;args, op, xdata);</div><div class='add'>+    stub-&gt;fn.ipc = fn;</div><div class='add'>+    args_ipc_store(&amp;stub-&gt;args, op, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_lease_cbk_stub (call_frame_t *frame, fop_lease_cbk_t fn,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+fop_lease_cbk_stub(call_frame_t *frame, fop_lease_cbk_t fn, int32_t op_ret,</div><div class='add'>+                   int32_t op_errno, struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_LEASE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_LEASE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.lease = fn;</div><div class='del'>-        args_lease_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, lease, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.lease = fn;</div><div class='add'>+    args_lease_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, lease, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_lease_stub (call_frame_t *frame, fop_lease_t fn,</div><div class='del'>-                loc_t *loc, struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+fop_lease_stub(call_frame_t *frame, fop_lease_t fn, loc_t *loc,</div><div class='add'>+               struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", lease, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", lease, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_LEASE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_LEASE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.lease = fn;</div><div class='del'>-        args_lease_store (&amp;stub-&gt;args, loc, lease, xdata);</div><div class='add'>+    stub-&gt;fn.lease = fn;</div><div class='add'>+    args_lease_store(&amp;stub-&gt;args, loc, lease, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_seek_cbk_stub (call_frame_t *frame, fop_seek_cbk_t fn,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, off_t offset,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+fop_seek_cbk_stub(call_frame_t *frame, fop_seek_cbk_t fn, int32_t op_ret,</div><div class='add'>+                  int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_SEEK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_SEEK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.seek = fn;</div><div class='add'>+    stub-&gt;fn_cbk.seek = fn;</div><div class='ctx'> </div><div class='del'>-        args_seek_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, offset, xdata);</div><div class='add'>+    args_seek_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, offset, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_seek_stub (call_frame_t *frame, fop_seek_t fn, fd_t *fd,</div><div class='del'>-               off_t offset, gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+fop_seek_stub(call_frame_t *frame, fop_seek_t fn, fd_t *fd, off_t offset,</div><div class='add'>+              gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_SEEK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_SEEK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.seek = fn;</div><div class='del'>-        args_seek_store (&amp;stub-&gt;args, fd, offset, what, xdata);</div><div class='add'>+    stub-&gt;fn.seek = fn;</div><div class='add'>+    args_seek_store(&amp;stub-&gt;args, fd, offset, what, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_getactivelk_cbk_stub (call_frame_t *frame, fop_getactivelk_cbk_t fn,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          lock_migration_info_t *lmi, dict_t *xdata)</div><div class='add'>+fop_getactivelk_cbk_stub(call_frame_t *frame, fop_getactivelk_cbk_t fn,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno,</div><div class='add'>+                         lock_migration_info_t *lmi, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_GETACTIVELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_GETACTIVELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.getactivelk = fn;</div><div class='add'>+    stub-&gt;fn_cbk.getactivelk = fn;</div><div class='ctx'> </div><div class='del'>-        args_getactivelk_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, lmi,</div><div class='del'>-                                    xdata);</div><div class='add'>+    args_getactivelk_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, lmi, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_getactivelk_stub (call_frame_t *frame, fop_getactivelk_t fn, loc_t *loc,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+fop_getactivelk_stub(call_frame_t *frame, fop_getactivelk_t fn, loc_t *loc,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_GETACTIVELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_GETACTIVELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.getactivelk = fn;</div><div class='add'>+    stub-&gt;fn.getactivelk = fn;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;stub-&gt;args.loc, loc);</div><div class='add'>+    loc_copy(&amp;stub-&gt;args.loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                stub-&gt;args.xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        stub-&gt;args.xdata = dict_ref(xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_setactivelk_cbk_stub (call_frame_t *frame, fop_setactivelk_cbk_t fn,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+fop_setactivelk_cbk_stub(call_frame_t *frame, fop_setactivelk_cbk_t fn,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_SETACTIVELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_SETACTIVELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.setactivelk = fn;</div><div class='del'>-        stub-&gt;args_cbk.op_ret = op_ret;</div><div class='del'>-        stub-&gt;args_cbk.op_errno = op_errno;</div><div class='add'>+    stub-&gt;fn_cbk.setactivelk = fn;</div><div class='add'>+    stub-&gt;args_cbk.op_ret = op_ret;</div><div class='add'>+    stub-&gt;args_cbk.op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                stub-&gt;args.xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        stub-&gt;args.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_setactivelk_stub (call_frame_t *frame, fop_setactivelk_t fn,</div><div class='del'>-                        loc_t *loc, lock_migration_info_t *locklist,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+fop_setactivelk_stub(call_frame_t *frame, fop_setactivelk_t fn, loc_t *loc,</div><div class='add'>+                     lock_migration_info_t *locklist, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_SETACTIVELK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_SETACTIVELK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.setactivelk = fn;</div><div class='add'>+    stub-&gt;fn.setactivelk = fn;</div><div class='ctx'> </div><div class='del'>-        args_setactivelk_store (&amp;stub-&gt;args, loc, locklist, xdata);</div><div class='add'>+    args_setactivelk_store(&amp;stub-&gt;args, loc, locklist, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='del'>-</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_put_stub (call_frame_t *frame, fop_put_t fn,</div><div class='del'>-              loc_t *loc, mode_t mode, mode_t umask, uint32_t flags,</div><div class='del'>-              struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-              struct iobref *iobref, dict_t *xattr, dict_t *xdata)</div><div class='add'>+fop_put_stub(call_frame_t *frame, fop_put_t fn, loc_t *loc, mode_t mode,</div><div class='add'>+             mode_t umask, uint32_t flags, struct iovec *vector, int32_t count,</div><div class='add'>+             off_t offset, struct iobref *iobref, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", vector, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", vector, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_PUT);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_PUT);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.put = fn;</div><div class='del'>-        args_put_store (&amp;stub-&gt;args, loc, mode, umask, flags, vector,</div><div class='del'>-                        count, offset, iobref, xattr, xdata);</div><div class='add'>+    stub-&gt;fn.put = fn;</div><div class='add'>+    args_put_store(&amp;stub-&gt;args, loc, mode, umask, flags, vector, count, offset,</div><div class='add'>+                   iobref, xattr, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_put_cbk_stub (call_frame_t *frame, fop_put_cbk_t fn,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+fop_put_cbk_stub(call_frame_t *frame, fop_put_cbk_t fn, int32_t op_ret,</div><div class='add'>+                 int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                 struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_PUT);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_PUT);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.put = fn;</div><div class='del'>-        args_put_cbk_store (&amp;stub-&gt;args_cbk, op_ret, op_errno, inode,</div><div class='del'>-                            buf, preparent, postparent, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.put = fn;</div><div class='add'>+    args_put_cbk_store(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                       postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_icreate_stub (call_frame_t *frame, fop_icreate_t fn,</div><div class='del'>-                  loc_t *loc, mode_t mode, dict_t *xdata)</div><div class='add'>+fop_icreate_stub(call_frame_t *frame, fop_icreate_t fn, loc_t *loc, mode_t mode,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_ICREATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_ICREATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.icreate = fn;</div><div class='add'>+    stub-&gt;fn.icreate = fn;</div><div class='ctx'> </div><div class='del'>-        stub-&gt;args.mode = mode;</div><div class='del'>-        if (loc)</div><div class='del'>-                loc_copy (&amp;stub-&gt;args.loc, loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                stub-&gt;args.xdata = dict_ref (xdata);</div><div class='add'>+    stub-&gt;args.mode = mode;</div><div class='add'>+    if (loc)</div><div class='add'>+        loc_copy(&amp;stub-&gt;args.loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        stub-&gt;args.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return stub;</div><div class='add'>+out:</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-args_icreate_store_cbk (default_args_cbk_t *args,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        inode_t *inode, struct iatt *buf, dict_t *xdata)</div><div class='add'>+args_icreate_store_cbk(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_icreate_cbk_stub (call_frame_t *frame,</div><div class='del'>-                      fop_icreate_cbk_t fn,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *buf, dict_t *xdata)</div><div class='add'>+fop_icreate_cbk_stub(call_frame_t *frame, fop_icreate_cbk_t fn, int32_t op_ret,</div><div class='add'>+                     int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_ICREATE);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_ICREATE);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.icreate = fn;</div><div class='del'>-        args_icreate_store_cbk (&amp;stub-&gt;args_cbk,</div><div class='del'>-                                op_ret, op_errno, inode, buf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.icreate = fn;</div><div class='add'>+    args_icreate_store_cbk(&amp;stub-&gt;args_cbk, op_ret, op_errno, inode, buf,</div><div class='add'>+                           xdata);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return stub;</div><div class='add'>+out:</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_namelink_stub (call_frame_t *frame,</div><div class='del'>-                   fop_namelink_t fn, loc_t *loc, dict_t *xdata)</div><div class='add'>+fop_namelink_stub(call_frame_t *frame, fop_namelink_t fn, loc_t *loc,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", fn, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 1, GF_FOP_NAMELINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 1, GF_FOP_NAMELINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn.namelink = fn;</div><div class='add'>+    stub-&gt;fn.namelink = fn;</div><div class='ctx'> </div><div class='del'>-        if (loc)</div><div class='del'>-                loc_copy (&amp;stub-&gt;args.loc, loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                stub-&gt;args.xdata = dict_ref (xdata);</div><div class='add'>+    if (loc)</div><div class='add'>+        loc_copy(&amp;stub-&gt;args.loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        stub-&gt;args.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return stub;</div><div class='add'>+out:</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-args_namelink_store_cbk (default_args_cbk_t *args,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+args_namelink_store_cbk(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                        struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (prebuf)</div><div class='del'>-                args-&gt;prestat = *prebuf;</div><div class='del'>-        if (postbuf)</div><div class='del'>-                args-&gt;poststat = *postbuf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (prebuf)</div><div class='add'>+        args-&gt;prestat = *prebuf;</div><div class='add'>+    if (postbuf)</div><div class='add'>+        args-&gt;poststat = *postbuf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-fop_namelink_cbk_stub (call_frame_t *frame,</div><div class='del'>-                       fop_namelink_cbk_t fn,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+fop_namelink_cbk_stub(call_frame_t *frame, fop_namelink_cbk_t fn,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", frame, out);</div><div class='ctx'> </div><div class='del'>-        stub = stub_new (frame, 0, GF_FOP_NAMELINK);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    stub = stub_new(frame, 0, GF_FOP_NAMELINK);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;fn_cbk.namelink = fn;</div><div class='del'>-        args_namelink_store_cbk (&amp;stub-&gt;args_cbk,</div><div class='del'>-                                 op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    stub-&gt;fn_cbk.namelink = fn;</div><div class='add'>+    args_namelink_store_cbk(&amp;stub-&gt;args_cbk, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                            xdata);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return stub;</div><div class='add'>+out:</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-call_resume_wind (call_stub_t *stub)</div><div class='add'>+call_resume_wind(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        switch (stub-&gt;fop) {</div><div class='add'>+    switch (stub-&gt;fop) {</div><div class='ctx'>         case GF_FOP_OPEN:</div><div class='del'>-                stub-&gt;fn.open (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-			       &amp;stub-&gt;args.loc, stub-&gt;args.flags,</div><div class='del'>-			       stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.open(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                          stub-&gt;args.flags, stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_CREATE:</div><div class='del'>-                stub-&gt;fn.create (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 &amp;stub-&gt;args.loc, stub-&gt;args.flags,</div><div class='del'>-				 stub-&gt;args.mode, stub-&gt;args.umask,</div><div class='del'>-				 stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.create(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                            stub-&gt;args.flags, stub-&gt;args.mode, stub-&gt;args.umask,</div><div class='add'>+                            stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_STAT:</div><div class='del'>-                stub-&gt;fn.stat (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-			       &amp;stub-&gt;args.loc, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.stat(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                          stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READLINK:</div><div class='del'>-                stub-&gt;fn.readlink (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   &amp;stub-&gt;args.loc, stub-&gt;args.size,</div><div class='del'>-				   stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.readlink(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                              stub-&gt;args.size, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_MKNOD:</div><div class='del'>-                stub-&gt;fn.mknod (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				&amp;stub-&gt;args.loc, stub-&gt;args.mode,</div><div class='del'>-				stub-&gt;args.rdev, stub-&gt;args.umask,</div><div class='del'>-				stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.mknod(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                           stub-&gt;args.mode, stub-&gt;args.rdev, stub-&gt;args.umask,</div><div class='add'>+                           stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_MKDIR:</div><div class='del'>-                stub-&gt;fn.mkdir (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				&amp;stub-&gt;args.loc, stub-&gt;args.mode,</div><div class='del'>-				stub-&gt;args.umask, stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.mkdir(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                           stub-&gt;args.mode, stub-&gt;args.umask, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_UNLINK:</div><div class='del'>-                stub-&gt;fn.unlink (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 &amp;stub-&gt;args.loc, stub-&gt;args.xflag,</div><div class='del'>-				 stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.unlink(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                            stub-&gt;args.xflag, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RMDIR:</div><div class='del'>-                stub-&gt;fn.rmdir (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				&amp;stub-&gt;args.loc, stub-&gt;args.flags,</div><div class='del'>-				stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.rmdir(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                           stub-&gt;args.flags, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SYMLINK:</div><div class='del'>-                stub-&gt;fn.symlink (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  stub-&gt;args.linkname, &amp;stub-&gt;args.loc,</div><div class='del'>-				  stub-&gt;args.umask, stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.symlink(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='add'>+                             stub-&gt;args.linkname, &amp;stub-&gt;args.loc,</div><div class='add'>+                             stub-&gt;args.umask, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RENAME:</div><div class='del'>-                stub-&gt;fn.rename (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 &amp;stub-&gt;args.loc, &amp;stub-&gt;args.loc2,</div><div class='del'>-				 stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.rename(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                            &amp;stub-&gt;args.loc2, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LINK:</div><div class='del'>-                stub-&gt;fn.link (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-			       &amp;stub-&gt;args.loc, &amp;stub-&gt;args.loc2,</div><div class='del'>-			       stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.link(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                          &amp;stub-&gt;args.loc2, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_TRUNCATE:</div><div class='del'>-                stub-&gt;fn.truncate (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   &amp;stub-&gt;args.loc, stub-&gt;args.offset,</div><div class='del'>-				   stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.truncate(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                              stub-&gt;args.offset, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READ:</div><div class='del'>-                stub-&gt;fn.readv (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				stub-&gt;args.fd, stub-&gt;args.size,</div><div class='del'>-				stub-&gt;args.offset, stub-&gt;args.flags,</div><div class='del'>-				stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.readv(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                           stub-&gt;args.size, stub-&gt;args.offset, stub-&gt;args.flags,</div><div class='add'>+                           stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='del'>-                stub-&gt;fn.writev (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 stub-&gt;args.fd, stub-&gt;args.vector,</div><div class='del'>-				 stub-&gt;args.count, stub-&gt;args.offset,</div><div class='del'>-				 stub-&gt;args.flags, stub-&gt;args.iobref,</div><div class='del'>-				 stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.writev(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                            stub-&gt;args.vector, stub-&gt;args.count,</div><div class='add'>+                            stub-&gt;args.offset, stub-&gt;args.flags,</div><div class='add'>+                            stub-&gt;args.iobref, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_STATFS:</div><div class='del'>-                stub-&gt;fn.statfs (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 &amp;stub-&gt;args.loc, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.statfs(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                            stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FLUSH:</div><div class='del'>-                stub-&gt;fn.flush (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.flush(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                           stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSYNC:</div><div class='del'>-                stub-&gt;fn.fsync (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				stub-&gt;args.fd, stub-&gt;args.datasync,</div><div class='del'>-				stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fsync(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                           stub-&gt;args.datasync, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SETXATTR:</div><div class='del'>-                stub-&gt;fn.setxattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   &amp;stub-&gt;args.loc, stub-&gt;args.xattr,</div><div class='del'>-				   stub-&gt;args.flags, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.setxattr(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                              stub-&gt;args.xattr, stub-&gt;args.flags,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_GETXATTR:</div><div class='del'>-                stub-&gt;fn.getxattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   &amp;stub-&gt;args.loc, stub-&gt;args.name,</div><div class='del'>-				   stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.getxattr(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                              stub-&gt;args.name, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-                stub-&gt;fn.fsetxattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				    stub-&gt;args.fd, stub-&gt;args.xattr,</div><div class='del'>-				    stub-&gt;args.flags, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fsetxattr(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                               stub-&gt;args.xattr, stub-&gt;args.flags,</div><div class='add'>+                               stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FGETXATTR:</div><div class='del'>-                stub-&gt;fn.fgetxattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				    stub-&gt;args.fd, stub-&gt;args.name,</div><div class='del'>-				    stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fgetxattr(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                               stub-&gt;args.name, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_REMOVEXATTR:</div><div class='del'>-                stub-&gt;fn.removexattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				      &amp;stub-&gt;args.loc, stub-&gt;args.name,</div><div class='del'>-				      stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.removexattr(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='add'>+                                 &amp;stub-&gt;args.loc, stub-&gt;args.name,</div><div class='add'>+                                 stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='del'>-                stub-&gt;fn.fremovexattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				       stub-&gt;args.fd, stub-&gt;args.name,</div><div class='del'>-				       stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fremovexattr(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                                  stub-&gt;args.name, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_OPENDIR:</div><div class='del'>-                stub-&gt;fn.opendir (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  &amp;stub-&gt;args.loc, stub-&gt;args.fd,</div><div class='del'>-				  stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.opendir(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                             stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSYNCDIR:</div><div class='del'>-                stub-&gt;fn.fsyncdir (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.fd, stub-&gt;args.datasync,</div><div class='del'>-				   stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fsyncdir(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                              stub-&gt;args.datasync, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ACCESS:</div><div class='del'>-                stub-&gt;fn.access (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 &amp;stub-&gt;args.loc, stub-&gt;args.mask,</div><div class='del'>-				 stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.access(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                            stub-&gt;args.mask, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FTRUNCATE:</div><div class='del'>-                stub-&gt;fn.ftruncate (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				    stub-&gt;args.fd, stub-&gt;args.offset,</div><div class='del'>-				    stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.ftruncate(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                               stub-&gt;args.offset, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSTAT:</div><div class='del'>-                stub-&gt;fn.fstat (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				stub-&gt;args.fd, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fstat(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                           stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LK:</div><div class='del'>-                stub-&gt;fn.lk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-			     stub-&gt;args.fd, stub-&gt;args.cmd,</div><div class='del'>-			     &amp;stub-&gt;args.lock, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.lk(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                        stub-&gt;args.cmd, &amp;stub-&gt;args.lock, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='del'>-                stub-&gt;fn.inodelk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  stub-&gt;args.volume, &amp;stub-&gt;args.loc,</div><div class='del'>-				  stub-&gt;args.cmd, &amp;stub-&gt;args.lock,</div><div class='del'>-				  stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.inodelk(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.volume,</div><div class='add'>+                             &amp;stub-&gt;args.loc, stub-&gt;args.cmd, &amp;stub-&gt;args.lock,</div><div class='add'>+                             stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-                stub-&gt;fn.finodelk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.volume, stub-&gt;args.fd,</div><div class='del'>-				   stub-&gt;args.cmd, &amp;stub-&gt;args.lock,</div><div class='del'>-				   stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.finodelk(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.volume,</div><div class='add'>+                              stub-&gt;args.fd, stub-&gt;args.cmd, &amp;stub-&gt;args.lock,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='del'>-                stub-&gt;fn.entrylk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  stub-&gt;args.volume, &amp;stub-&gt;args.loc,</div><div class='del'>-				  stub-&gt;args.name, stub-&gt;args.entrylkcmd,</div><div class='del'>-				  stub-&gt;args.entrylktype, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.entrylk(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.volume,</div><div class='add'>+                             &amp;stub-&gt;args.loc, stub-&gt;args.name,</div><div class='add'>+                             stub-&gt;args.entrylkcmd, stub-&gt;args.entrylktype,</div><div class='add'>+                             stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-                stub-&gt;fn.fentrylk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.volume, stub-&gt;args.fd,</div><div class='del'>-				   stub-&gt;args.name, stub-&gt;args.entrylkcmd,</div><div class='del'>-				   stub-&gt;args.entrylktype, stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.fentrylk(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.volume,</div><div class='add'>+                              stub-&gt;args.fd, stub-&gt;args.name,</div><div class='add'>+                              stub-&gt;args.entrylkcmd, stub-&gt;args.entrylktype,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LOOKUP:</div><div class='del'>-                stub-&gt;fn.lookup (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 &amp;stub-&gt;args.loc, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.lookup(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                            stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RCHECKSUM:</div><div class='del'>-                stub-&gt;fn.rchecksum (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				    stub-&gt;args.fd, stub-&gt;args.offset,</div><div class='del'>-				    stub-&gt;args.size, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.rchecksum(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                               stub-&gt;args.offset, stub-&gt;args.size,</div><div class='add'>+                               stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READDIR:</div><div class='del'>-                stub-&gt;fn.readdir (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  stub-&gt;args.fd, stub-&gt;args.size,</div><div class='del'>-				  stub-&gt;args.offset, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.readdir(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                             stub-&gt;args.size, stub-&gt;args.offset,</div><div class='add'>+                             stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READDIRP:</div><div class='del'>-                stub-&gt;fn.readdirp (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.fd, stub-&gt;args.size,</div><div class='del'>-				   stub-&gt;args.offset, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.readdirp(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                              stub-&gt;args.size, stub-&gt;args.offset,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_XATTROP:</div><div class='del'>-                stub-&gt;fn.xattrop (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  &amp;stub-&gt;args.loc, stub-&gt;args.optype,</div><div class='del'>-				  stub-&gt;args.xattr, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.xattrop(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                             stub-&gt;args.optype, stub-&gt;args.xattr,</div><div class='add'>+                             stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FXATTROP:</div><div class='del'>-                stub-&gt;fn.fxattrop (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.fd, stub-&gt;args.optype,</div><div class='del'>-				   stub-&gt;args.xattr, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.fxattrop(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                              stub-&gt;args.optype, stub-&gt;args.xattr,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SETATTR:</div><div class='del'>-                stub-&gt;fn.setattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				  &amp;stub-&gt;args.loc, &amp;stub-&gt;args.stat,</div><div class='del'>-				  stub-&gt;args.valid, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.setattr(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                             &amp;stub-&gt;args.stat, stub-&gt;args.valid,</div><div class='add'>+                             stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSETATTR:</div><div class='del'>-                stub-&gt;fn.fsetattr (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.fd, &amp;stub-&gt;args.stat,</div><div class='del'>-				   stub-&gt;args.valid, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='del'>-	case GF_FOP_FALLOCATE:</div><div class='del'>-		stub-&gt;fn.fallocate(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				   stub-&gt;args.fd, stub-&gt;args.flags,</div><div class='del'>-				   stub-&gt;args.offset, stub-&gt;args.size,</div><div class='del'>-				   stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_DISCARD:</div><div class='del'>-		stub-&gt;fn.discard(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-				 stub-&gt;args.fd, stub-&gt;args.offset,</div><div class='del'>-				 stub-&gt;args.size, stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            stub-&gt;fn.fsetattr(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                              &amp;stub-&gt;args.stat, stub-&gt;args.valid,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_FALLOCATE:</div><div class='add'>+            stub-&gt;fn.fallocate(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                               stub-&gt;args.flags, stub-&gt;args.offset,</div><div class='add'>+                               stub-&gt;args.size, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_DISCARD:</div><div class='add'>+            stub-&gt;fn.discard(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                             stub-&gt;args.offset, stub-&gt;args.size,</div><div class='add'>+                             stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='del'>-                stub-&gt;fn.zerofill(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                                 stub-&gt;args.fd, stub-&gt;args.offset,</div><div class='del'>-                                 stub-&gt;args.size, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.zerofill(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                              stub-&gt;args.offset, stub-&gt;args.size,</div><div class='add'>+                              stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_IPC:</div><div class='del'>-                stub-&gt;fn.ipc (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                              stub-&gt;args.cmd, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.ipc(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.cmd,</div><div class='add'>+                         stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SEEK:</div><div class='del'>-                stub-&gt;fn.seek (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                               stub-&gt;args.fd, stub-&gt;args.offset,</div><div class='del'>-                               stub-&gt;args.what, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.seek(stub-&gt;frame, stub-&gt;frame-&gt;this, stub-&gt;args.fd,</div><div class='add'>+                          stub-&gt;args.offset, stub-&gt;args.what, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LEASE:</div><div class='del'>-                stub-&gt;fn.lease (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                                &amp;stub-&gt;args.loc, &amp;stub-&gt;args.lease,</div><div class='del'>-                                stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.lease(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                           &amp;stub-&gt;args.lease, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_GETACTIVELK:</div><div class='del'>-                stub-&gt;fn.getactivelk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                                       &amp;stub-&gt;args.loc, stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.getactivelk(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='add'>+                                 &amp;stub-&gt;args.loc, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_SETACTIVELK:</div><div class='del'>-                stub-&gt;fn.setactivelk (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                                        &amp;stub-&gt;args.loc, &amp;stub-&gt;args.locklist,</div><div class='del'>-                                        stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.setactivelk(stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='add'>+                                 &amp;stub-&gt;args.loc, &amp;stub-&gt;args.locklist,</div><div class='add'>+                                 stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_PUT:</div><div class='del'>-                stub-&gt;fn.put (stub-&gt;frame, stub-&gt;frame-&gt;this,</div><div class='del'>-                              &amp;stub-&gt;args.loc, stub-&gt;args.mode, stub-&gt;args.umask,</div><div class='del'>-                              stub-&gt;args.flags, stub-&gt;args.vector,</div><div class='del'>-                              stub-&gt;args.count, stub-&gt;args.offset,</div><div class='del'>-                              stub-&gt;args.iobref, stub-&gt;args.xattr,</div><div class='del'>-                              stub-&gt;args.xdata);</div><div class='del'>-                break;</div><div class='add'>+            stub-&gt;fn.put(stub-&gt;frame, stub-&gt;frame-&gt;this, &amp;stub-&gt;args.loc,</div><div class='add'>+                         stub-&gt;args.mode, stub-&gt;args.umask, stub-&gt;args.flags,</div><div class='add'>+                         stub-&gt;args.vector, stub-&gt;args.count, stub-&gt;args.offset,</div><div class='add'>+                         stub-&gt;args.iobref, stub-&gt;args.xattr, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg_callingfn ("call-stub", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ENTRY, "Invalid value of FOP"</div><div class='del'>-                                  " (%d)", stub-&gt;fop);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define STUB_UNWIND(stb, fop, args ...) do {				\</div><div class='del'>-	if (stb-&gt;fn_cbk.fop)						\</div><div class='del'>-		stb-&gt;fn_cbk.fop (stb-&gt;frame, stb-&gt;frame-&gt;cookie,	\</div><div class='del'>-				 stb-&gt;frame-&gt;this, stb-&gt;args_cbk.op_ret, \</div><div class='del'>-				 stb-&gt;args_cbk.op_errno, args);		\</div><div class='del'>-	else								\</div><div class='del'>-		STACK_UNWIND_STRICT (fop, stb-&gt;frame, stb-&gt;args_cbk.op_ret, \</div><div class='del'>-				     stb-&gt;args_cbk.op_errno, args);	\</div><div class='del'>-	} while (0)</div><div class='del'>-</div><div class='add'>+            gf_msg_callingfn("call-stub", GF_LOG_ERROR, EINVAL,</div><div class='add'>+                             LG_MSG_INVALID_ENTRY,</div><div class='add'>+                             "Invalid value of FOP"</div><div class='add'>+                             " (%d)",</div><div class='add'>+                             stub-&gt;fop);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define STUB_UNWIND(stb, fop, args...)                                         \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (stb-&gt;fn_cbk.fop)                                                   \</div><div class='add'>+            stb-&gt;fn_cbk.fop(stb-&gt;frame, stb-&gt;frame-&gt;cookie, stb-&gt;frame-&gt;this,  \</div><div class='add'>+                            stb-&gt;args_cbk.op_ret, stb-&gt;args_cbk.op_errno,      \</div><div class='add'>+                            args);                                             \</div><div class='add'>+        else                                                                   \</div><div class='add'>+            STACK_UNWIND_STRICT(fop, stb-&gt;frame, stb-&gt;args_cbk.op_ret,         \</div><div class='add'>+                                stb-&gt;args_cbk.op_errno, args);                 \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-call_resume_unwind (call_stub_t *stub)</div><div class='add'>+call_resume_unwind(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        switch (stub-&gt;fop) {</div><div class='add'>+    switch (stub-&gt;fop) {</div><div class='ctx'>         case GF_FOP_OPEN:</div><div class='del'>-		STUB_UNWIND (stub, open, stub-&gt;args_cbk.fd,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, open, stub-&gt;args_cbk.fd, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_CREATE:</div><div class='del'>-		STUB_UNWIND (stub, create, stub-&gt;args_cbk.fd,</div><div class='del'>-			     stub-&gt;args_cbk.inode, &amp;stub-&gt;args_cbk.stat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, create, stub-&gt;args_cbk.fd, stub-&gt;args_cbk.inode,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.stat, &amp;stub-&gt;args_cbk.preparent,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_STAT:</div><div class='del'>-		STUB_UNWIND (stub, stat, &amp;stub-&gt;args_cbk.stat,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, stat, &amp;stub-&gt;args_cbk.stat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READLINK:</div><div class='del'>-		STUB_UNWIND (stub, readlink, stub-&gt;args_cbk.buf,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.stat, stub-&gt;args.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, readlink, stub-&gt;args_cbk.buf,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.stat, stub-&gt;args.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_MKNOD:</div><div class='del'>-		STUB_UNWIND (stub, mknod, stub-&gt;args_cbk.inode,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.stat, &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, mknod, stub-&gt;args_cbk.inode, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.preparent, &amp;stub-&gt;args_cbk.postparent,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_MKDIR:</div><div class='del'>-		STUB_UNWIND (stub, mkdir, stub-&gt;args_cbk.inode,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.stat, &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, mkdir, stub-&gt;args_cbk.inode, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.preparent, &amp;stub-&gt;args_cbk.postparent,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_UNLINK:</div><div class='del'>-		STUB_UNWIND (stub, unlink, &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, unlink, &amp;stub-&gt;args_cbk.preparent,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RMDIR:</div><div class='del'>-		STUB_UNWIND (stub, rmdir, &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, rmdir, &amp;stub-&gt;args_cbk.preparent,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SYMLINK:</div><div class='del'>-		STUB_UNWIND (stub, symlink, stub-&gt;args_cbk.inode,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.stat, &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, symlink, stub-&gt;args_cbk.inode,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.stat, &amp;stub-&gt;args_cbk.preparent,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RENAME:</div><div class='del'>-		STUB_UNWIND (stub, rename, &amp;stub-&gt;args_cbk.stat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.preparent2,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent2,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, rename, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.preparent, &amp;stub-&gt;args_cbk.postparent,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.preparent2, &amp;stub-&gt;args_cbk.postparent2,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LINK:</div><div class='del'>-		STUB_UNWIND (stub, link, stub-&gt;args_cbk.inode,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.stat, &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, link, stub-&gt;args_cbk.inode, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.preparent, &amp;stub-&gt;args_cbk.postparent,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_TRUNCATE:</div><div class='del'>-		STUB_UNWIND (stub, truncate, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, truncate, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READ:</div><div class='del'>-		STUB_UNWIND (stub, readv, stub-&gt;args_cbk.vector,</div><div class='del'>-			     stub-&gt;args_cbk.count, &amp;stub-&gt;args_cbk.stat,</div><div class='del'>-			     stub-&gt;args_cbk.iobref, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, readv, stub-&gt;args_cbk.vector,</div><div class='add'>+                        stub-&gt;args_cbk.count, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        stub-&gt;args_cbk.iobref, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='del'>-		STUB_UNWIND (stub, writev, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, writev, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_STATFS:</div><div class='del'>-		STUB_UNWIND (stub, statfs, &amp;stub-&gt;args_cbk.statvfs,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, statfs, &amp;stub-&gt;args_cbk.statvfs,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FLUSH:</div><div class='del'>-		STUB_UNWIND (stub, flush, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, flush, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSYNC:</div><div class='del'>-		STUB_UNWIND (stub, fsync, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, fsync, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SETXATTR:</div><div class='del'>-		STUB_UNWIND (stub, setxattr, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, setxattr, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_GETXATTR:</div><div class='del'>-		STUB_UNWIND (stub, getxattr, stub-&gt;args_cbk.xattr,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, getxattr, stub-&gt;args_cbk.xattr,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-		STUB_UNWIND (stub, fsetxattr, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, fsetxattr, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FGETXATTR:</div><div class='del'>-		STUB_UNWIND (stub, fgetxattr, stub-&gt;args_cbk.xattr,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, fgetxattr, stub-&gt;args_cbk.xattr,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_REMOVEXATTR:</div><div class='del'>-		STUB_UNWIND (stub, removexattr, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, removexattr, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='del'>-		STUB_UNWIND (stub, fremovexattr, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, fremovexattr, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_OPENDIR:</div><div class='del'>-		STUB_UNWIND (stub, opendir, stub-&gt;args_cbk.fd,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, opendir, stub-&gt;args_cbk.fd, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSYNCDIR:</div><div class='del'>-		STUB_UNWIND (stub, fsyncdir, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, fsyncdir, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ACCESS:</div><div class='del'>-		STUB_UNWIND (stub, access, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, access, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FTRUNCATE:</div><div class='del'>-		STUB_UNWIND (stub, ftruncate, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, ftruncate, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSTAT:</div><div class='del'>-		STUB_UNWIND (stub, fstat, &amp;stub-&gt;args_cbk.stat,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, fstat, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LK:</div><div class='del'>-		STUB_UNWIND (stub, lk, &amp;stub-&gt;args_cbk.lock,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, lk, &amp;stub-&gt;args_cbk.lock, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='del'>-		STUB_UNWIND (stub, inodelk, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, inodelk, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-		STUB_UNWIND (stub, finodelk, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, finodelk, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='del'>-		STUB_UNWIND (stub, entrylk, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, entrylk, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-		STUB_UNWIND (stub, fentrylk, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, fentrylk, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LOOKUP:</div><div class='del'>-		STUB_UNWIND (stub, lookup, stub-&gt;args_cbk.inode,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.stat, stub-&gt;args_cbk.xdata,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.postparent);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, lookup, stub-&gt;args_cbk.inode,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.stat, stub-&gt;args_cbk.xdata,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.postparent);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RCHECKSUM:</div><div class='del'>-		STUB_UNWIND (stub, rchecksum, stub-&gt;args_cbk.weak_checksum,</div><div class='del'>-			     stub-&gt;args_cbk.strong_checksum, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, rchecksum, stub-&gt;args_cbk.weak_checksum,</div><div class='add'>+                        stub-&gt;args_cbk.strong_checksum, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READDIR:</div><div class='del'>-		STUB_UNWIND (stub, readdir, &amp;stub-&gt;args_cbk.entries,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, readdir, &amp;stub-&gt;args_cbk.entries,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READDIRP:</div><div class='del'>-		STUB_UNWIND (stub, readdir, &amp;stub-&gt;args_cbk.entries,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, readdir, &amp;stub-&gt;args_cbk.entries,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_XATTROP:</div><div class='del'>-		STUB_UNWIND (stub, xattrop, stub-&gt;args_cbk.xattr,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, xattrop, stub-&gt;args_cbk.xattr,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FXATTROP:</div><div class='del'>-		STUB_UNWIND (stub, fxattrop, stub-&gt;args_cbk.xattr,</div><div class='del'>-			     stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, fxattrop, stub-&gt;args_cbk.xattr,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SETATTR:</div><div class='del'>-		STUB_UNWIND (stub, setattr, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, setattr, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSETATTR:</div><div class='del'>-		STUB_UNWIND (stub, fsetattr, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			     &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='del'>-	case GF_FOP_FALLOCATE:</div><div class='del'>-		STUB_UNWIND(stub, fallocate, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			    &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_DISCARD:</div><div class='del'>-		STUB_UNWIND(stub, discard, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-			    &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-		break;</div><div class='add'>+            STUB_UNWIND(stub, fsetattr, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_FALLOCATE:</div><div class='add'>+            STUB_UNWIND(stub, fallocate, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_DISCARD:</div><div class='add'>+            STUB_UNWIND(stub, discard, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='del'>-                STUB_UNWIND(stub, zerofill, &amp;stub-&gt;args_cbk.prestat,</div><div class='del'>-                            &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, zerofill, &amp;stub-&gt;args_cbk.prestat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.poststat, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_IPC:</div><div class='del'>-                STUB_UNWIND (stub, ipc, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, ipc, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_SEEK:</div><div class='del'>-                STUB_UNWIND (stub, seek, stub-&gt;args_cbk.offset,</div><div class='del'>-                             stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, seek, stub-&gt;args_cbk.offset,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_LEASE:</div><div class='del'>-                STUB_UNWIND (stub, lease, &amp;stub-&gt;args_cbk.lease,</div><div class='del'>-                             stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, lease, &amp;stub-&gt;args_cbk.lease,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_GETACTIVELK:</div><div class='del'>-                STUB_UNWIND (stub, getactivelk, &amp;stub-&gt;args_cbk.locklist,</div><div class='del'>-                             stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, getactivelk, &amp;stub-&gt;args_cbk.locklist,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_SETACTIVELK:</div><div class='del'>-                STUB_UNWIND (stub, setactivelk, stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, setactivelk, stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_PUT:</div><div class='del'>-                STUB_UNWIND (stub, put, stub-&gt;args_cbk.inode,</div><div class='del'>-                             &amp;stub-&gt;args_cbk.stat,</div><div class='del'>-                             &amp;stub-&gt;args_cbk.preparent,</div><div class='del'>-                             &amp;stub-&gt;args_cbk.postparent,</div><div class='del'>-                             stub-&gt;args_cbk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STUB_UNWIND(stub, put, stub-&gt;args_cbk.inode, &amp;stub-&gt;args_cbk.stat,</div><div class='add'>+                        &amp;stub-&gt;args_cbk.preparent, &amp;stub-&gt;args_cbk.postparent,</div><div class='add'>+                        stub-&gt;args_cbk.xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg_callingfn ("call-stub", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ENTRY, "Invalid value of FOP"</div><div class='del'>-                                  " (%d)", stub-&gt;fop);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg_callingfn("call-stub", GF_LOG_ERROR, EINVAL,</div><div class='add'>+                             LG_MSG_INVALID_ENTRY,</div><div class='add'>+                             "Invalid value of FOP"</div><div class='add'>+                             " (%d)",</div><div class='add'>+                             stub-&gt;fop);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-call_stub_wipe_args (call_stub_t *stub)</div><div class='add'>+call_stub_wipe_args(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        args_wipe (&amp;stub-&gt;args);</div><div class='add'>+    args_wipe(&amp;stub-&gt;args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-call_stub_wipe_args_cbk (call_stub_t *stub)</div><div class='add'>+call_stub_wipe_args_cbk(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        args_cbk_wipe (&amp;stub-&gt;args_cbk);</div><div class='add'>+    args_cbk_wipe(&amp;stub-&gt;args_cbk);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-call_stub_destroy (call_stub_t *stub)</div><div class='add'>+call_stub_destroy(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        if (stub-&gt;wind)</div><div class='del'>-                call_stub_wipe_args (stub);</div><div class='del'>-        else</div><div class='del'>-                call_stub_wipe_args_cbk (stub);</div><div class='add'>+    if (stub-&gt;wind)</div><div class='add'>+        call_stub_wipe_args(stub);</div><div class='add'>+    else</div><div class='add'>+        call_stub_wipe_args_cbk(stub);</div><div class='ctx'> </div><div class='del'>-        stub-&gt;stub_mem_pool = NULL;</div><div class='add'>+    stub-&gt;stub_mem_pool = NULL;</div><div class='ctx'> </div><div class='del'>-        mem_put (stub);</div><div class='add'>+    mem_put(stub);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-call_resume (call_stub_t *stub)</div><div class='add'>+call_resume(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    errno = EINVAL;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;stub-&gt;list);</div><div class='add'>+    list_del_init(&amp;stub-&gt;list);</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = stub-&gt;frame-&gt;this;</div><div class='del'>-        {</div><div class='del'>-                if (stub-&gt;wind)</div><div class='del'>-                        call_resume_wind (stub);</div><div class='del'>-                else</div><div class='del'>-                        call_resume_unwind (stub);</div><div class='del'>-        }</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = stub-&gt;frame-&gt;this;</div><div class='add'>+    {</div><div class='add'>+        if (stub-&gt;wind)</div><div class='add'>+            call_resume_wind(stub);</div><div class='add'>+        else</div><div class='add'>+            call_resume_unwind(stub);</div><div class='add'>+    }</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        call_stub_destroy (stub);</div><div class='add'>+    call_stub_destroy(stub);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-call_unwind_error (call_stub_t *stub, int op_ret, int op_errno)</div><div class='add'>+call_unwind_error(call_stub_t *stub, int op_ret, int op_errno)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='del'>-</div><div class='del'>-        list_del_init (&amp;stub-&gt;list);</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = stub-&gt;frame-&gt;this;</div><div class='del'>-        {</div><div class='del'>-		stub-&gt;args_cbk.op_ret = op_ret;</div><div class='del'>-		stub-&gt;args_cbk.op_errno = op_errno;</div><div class='del'>-		call_resume_unwind (stub);</div><div class='del'>-        }</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    list_del_init(&amp;stub-&gt;list);</div><div class='ctx'> </div><div class='del'>-        call_stub_destroy (stub);</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = stub-&gt;frame-&gt;this;</div><div class='add'>+    {</div><div class='add'>+        stub-&gt;args_cbk.op_ret = op_ret;</div><div class='add'>+        stub-&gt;args_cbk.op_errno = op_errno;</div><div class='add'>+        call_resume_unwind(stub);</div><div class='add'>+    }</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    call_stub_destroy(stub);</div><div class='ctx'> </div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-call_unwind_error_keep_stub (call_stub_t *stub, int op_ret, int op_errno)</div><div class='add'>+call_unwind_error_keep_stub(call_stub_t *stub, int op_ret, int op_errno)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;stub-&gt;list);</div><div class='add'>+    list_del_init(&amp;stub-&gt;list);</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = stub-&gt;frame-&gt;this;</div><div class='del'>-        {</div><div class='del'>-                stub-&gt;args_cbk.op_ret = op_ret;</div><div class='del'>-                stub-&gt;args_cbk.op_errno = op_errno;</div><div class='del'>-                call_resume_unwind (stub);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = stub-&gt;frame-&gt;this;</div><div class='add'>+    {</div><div class='add'>+        stub-&gt;args_cbk.op_ret = op_ret;</div><div class='add'>+        stub-&gt;args_cbk.op_errno = op_errno;</div><div class='add'>+        call_resume_unwind(stub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-call_resume_keep_stub (call_stub_t *stub)</div><div class='add'>+call_resume_keep_stub(call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("call-stub", stub, out);</div><div class='add'>+    errno = EINVAL;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("call-stub", stub, out);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;stub-&gt;list);</div><div class='add'>+    list_del_init(&amp;stub-&gt;list);</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = stub-&gt;frame-&gt;this;</div><div class='del'>-        {</div><div class='del'>-                if (stub-&gt;wind)</div><div class='del'>-                        call_resume_wind (stub);</div><div class='del'>-                else</div><div class='del'>-                        call_resume_unwind (stub);</div><div class='del'>-        }</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = stub-&gt;frame-&gt;this;</div><div class='add'>+    {</div><div class='add'>+        if (stub-&gt;wind)</div><div class='add'>+            call_resume_wind(stub);</div><div class='add'>+        else</div><div class='add'>+            call_resume_unwind(stub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/checksum.c b/libglusterfs/src/checksum.c<br/>index 561ca04e48b..acdaed04ae2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/checksum.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/checksum.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/checksum.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/checksum.c</a></div><div class='hunk'>@@ -22,24 +22,23 @@</div><div class='ctx'>  * data. Thus int32_t and uint32_t are sufficient</div><div class='ctx'>  */</div><div class='ctx'> uint32_t</div><div class='del'>-gf_rsync_weak_checksum (unsigned char *buf, size_t len)</div><div class='add'>+gf_rsync_weak_checksum(unsigned char *buf, size_t len)</div><div class='ctx'> {</div><div class='del'>-        return adler32 (0, buf, len);</div><div class='add'>+    return adler32(0, buf, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * The "strong" checksum required for the rsync algorithm.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-gf_rsync_strong_checksum (unsigned char *data, size_t len,</div><div class='del'>-                          unsigned char *sha256_md)</div><div class='add'>+gf_rsync_strong_checksum(unsigned char *data, size_t len,</div><div class='add'>+                         unsigned char *sha256_md)</div><div class='ctx'> {</div><div class='del'>-        SHA256((const unsigned char *)data, len, sha256_md);</div><div class='add'>+    SHA256((const unsigned char *)data, len, sha256_md);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_rsync_md5_checksum (unsigned char *data, size_t len, unsigned char *md5)</div><div class='add'>+gf_rsync_md5_checksum(unsigned char *data, size_t len, unsigned char *md5)</div><div class='ctx'> {</div><div class='del'>-        MD5 (data, len, md5);</div><div class='add'>+    MD5(data, len, md5);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/circ-buff.c b/libglusterfs/src/circ-buff.c<br/>index 6259282a917..cb37ed30ea2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/circ-buff.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/circ-buff.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/circ-buff.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/circ-buff.c</a></div><div class='hunk'>@@ -12,190 +12,182 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cb_destroy_data (circular_buffer_t *cb,</div><div class='del'>-                 void (*destroy_buffer_data) (void *data))</div><div class='add'>+cb_destroy_data(circular_buffer_t *cb, void (*destroy_buffer_data)(void *data))</div><div class='ctx'> {</div><div class='del'>-        if (destroy_buffer_data)</div><div class='del'>-                destroy_buffer_data (cb-&gt;data);</div><div class='del'>-        GF_FREE (cb-&gt;data);</div><div class='del'>-        return;</div><div class='add'>+    if (destroy_buffer_data)</div><div class='add'>+        destroy_buffer_data(cb-&gt;data);</div><div class='add'>+    GF_FREE(cb-&gt;data);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* hold lock while calling this function */</div><div class='ctx'> int</div><div class='del'>-__cb_add_entry_buffer (buffer_t *buffer, void *item)</div><div class='add'>+__cb_add_entry_buffer(buffer_t *buffer, void *item)</div><div class='ctx'> {</div><div class='del'>-        circular_buffer_t   *ptr  = NULL;</div><div class='del'>-        int    ret   = -1;</div><div class='del'>-        //DO we really need the assert here?</div><div class='del'>-        GF_ASSERT (buffer-&gt;used_len &lt;= buffer-&gt;size_buffer);</div><div class='del'>-</div><div class='del'>-        if (buffer-&gt;use_once == _gf_true &amp;&amp;</div><div class='del'>-            buffer-&gt;used_len == buffer-&gt;size_buffer) {</div><div class='del'>-                gf_msg  ("circ-buff", GF_LOG_WARNING, 0, LG_MSG_BUFFER_ERROR,</div><div class='del'>-                         "buffer %p is use once buffer", buffer);</div><div class='del'>-                return -1;</div><div class='del'>-        } else {</div><div class='del'>-                if (buffer-&gt;used_len == buffer-&gt;size_buffer) {</div><div class='del'>-                        if (buffer-&gt;cb[buffer-&gt;w_index]) {</div><div class='del'>-                                ptr = buffer-&gt;cb[buffer-&gt;w_index];</div><div class='del'>-                                if (ptr-&gt;data) {</div><div class='del'>-                                        cb_destroy_data (ptr,</div><div class='del'>-                                                   buffer-&gt;destroy_buffer_data);</div><div class='del'>-                                        ptr-&gt;data = NULL;</div><div class='del'>-                                        GF_FREE (ptr);</div><div class='del'>-                                }</div><div class='del'>-                                buffer-&gt;cb[buffer-&gt;w_index] = NULL;</div><div class='del'>-                                ptr = NULL;</div><div class='del'>-                        }</div><div class='add'>+    circular_buffer_t *ptr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    // DO we really need the assert here?</div><div class='add'>+    GF_ASSERT(buffer-&gt;used_len &lt;= buffer-&gt;size_buffer);</div><div class='add'>+</div><div class='add'>+    if (buffer-&gt;use_once == _gf_true &amp;&amp;</div><div class='add'>+        buffer-&gt;used_len == buffer-&gt;size_buffer) {</div><div class='add'>+        gf_msg("circ-buff", GF_LOG_WARNING, 0, LG_MSG_BUFFER_ERROR,</div><div class='add'>+               "buffer %p is use once buffer", buffer);</div><div class='add'>+        return -1;</div><div class='add'>+    } else {</div><div class='add'>+        if (buffer-&gt;used_len == buffer-&gt;size_buffer) {</div><div class='add'>+            if (buffer-&gt;cb[buffer-&gt;w_index]) {</div><div class='add'>+                ptr = buffer-&gt;cb[buffer-&gt;w_index];</div><div class='add'>+                if (ptr-&gt;data) {</div><div class='add'>+                    cb_destroy_data(ptr, buffer-&gt;destroy_buffer_data);</div><div class='add'>+                    ptr-&gt;data = NULL;</div><div class='add'>+                    GF_FREE(ptr);</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                buffer-&gt;cb[buffer-&gt;w_index] =</div><div class='del'>-                        GF_CALLOC (1, sizeof (circular_buffer_t),</div><div class='del'>-                                   gf_common_mt_circular_buffer_t);</div><div class='del'>-                if (!buffer-&gt;cb[buffer-&gt;w_index])</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                buffer-&gt;cb[buffer-&gt;w_index]-&gt;data = item;</div><div class='del'>-                ret = gettimeofday (&amp;buffer-&gt;cb[buffer-&gt;w_index]-&gt;tv, NULL);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        gf_msg_callingfn ("circ-buff", GF_LOG_WARNING, 0,</div><div class='del'>-                                          LG_MSG_GETTIMEOFDAY_FAILED,</div><div class='del'>-                                          "getting time of the day failed");</div><div class='del'>-                buffer-&gt;w_index++;</div><div class='del'>-                buffer-&gt;w_index %= buffer-&gt;size_buffer;</div><div class='del'>-                //used_buffer size cannot be greater than the total buffer size</div><div class='del'>-</div><div class='del'>-                if (buffer-&gt;used_len &lt; buffer-&gt;size_buffer)</div><div class='del'>-                        buffer-&gt;used_len++;</div><div class='del'>-                return buffer-&gt;w_index;</div><div class='add'>+                buffer-&gt;cb[buffer-&gt;w_index] = NULL;</div><div class='add'>+                ptr = NULL;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        buffer-&gt;cb[buffer-&gt;w_index] = GF_CALLOC(1, sizeof(circular_buffer_t),</div><div class='add'>+                                                gf_common_mt_circular_buffer_t);</div><div class='add'>+        if (!buffer-&gt;cb[buffer-&gt;w_index])</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        buffer-&gt;cb[buffer-&gt;w_index]-&gt;data = item;</div><div class='add'>+        ret = gettimeofday(&amp;buffer-&gt;cb[buffer-&gt;w_index]-&gt;tv, NULL);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            gf_msg_callingfn("circ-buff", GF_LOG_WARNING, 0,</div><div class='add'>+                             LG_MSG_GETTIMEOFDAY_FAILED,</div><div class='add'>+                             "getting time of the day failed");</div><div class='add'>+        buffer-&gt;w_index++;</div><div class='add'>+        buffer-&gt;w_index %= buffer-&gt;size_buffer;</div><div class='add'>+        // used_buffer size cannot be greater than the total buffer size</div><div class='add'>+</div><div class='add'>+        if (buffer-&gt;used_len &lt; buffer-&gt;size_buffer)</div><div class='add'>+            buffer-&gt;used_len++;</div><div class='add'>+        return buffer-&gt;w_index;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cb_add_entry_buffer (buffer_t *buffer, void *item)</div><div class='add'>+cb_add_entry_buffer(buffer_t *buffer, void *item)</div><div class='ctx'> {</div><div class='del'>-        int write_index = -1;</div><div class='add'>+    int write_index = -1;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;buffer-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                write_index = __cb_add_entry_buffer (buffer, item);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;buffer-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;buffer-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        write_index = __cb_add_entry_buffer(buffer, item);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;buffer-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return write_index;</div><div class='add'>+    return write_index;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cb_buffer_show (buffer_t *buffer)</div><div class='add'>+cb_buffer_show(buffer_t *buffer)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;buffer-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                gf_msg_debug ("circ-buff", 0, "w_index: %d, size: %"</div><div class='del'>-                              GF_PRI_SIZET" used_buffer: %d", buffer-&gt;w_index,</div><div class='del'>-                              buffer-&gt;size_buffer, buffer-&gt;used_len);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;buffer-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;buffer-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        gf_msg_debug("circ-buff", 0,</div><div class='add'>+                     "w_index: %d, size: %" GF_PRI_SIZET " used_buffer: %d",</div><div class='add'>+                     buffer-&gt;w_index, buffer-&gt;size_buffer, buffer-&gt;used_len);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;buffer-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cb_buffer_dump (buffer_t *buffer, void *data,</div><div class='del'>-                int (fn) (circular_buffer_t *buffer, void *data))</div><div class='add'>+cb_buffer_dump(buffer_t *buffer, void *data,</div><div class='add'>+               int(fn)(circular_buffer_t *buffer, void *data))</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        circular_buffer_t *entry = NULL;</div><div class='del'>-        int  entries = 0;</div><div class='del'>-        int ul = 0;</div><div class='del'>-        int w_ind = 0;</div><div class='del'>-        int size_buff = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        ul = buffer-&gt;used_len;</div><div class='del'>-        w_ind = buffer-&gt;w_index;</div><div class='del'>-        size_buff = buffer-&gt;size_buffer;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;buffer-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (buffer-&gt;use_once == _gf_false) {</div><div class='del'>-                        index = (size_buff + (w_ind - ul))%size_buff;</div><div class='del'>-                        for (entries = 0; entries &lt; buffer-&gt;used_len;</div><div class='del'>-                             entries++) {</div><div class='del'>-                                entry = buffer-&gt;cb[index];</div><div class='del'>-                                if (entry)</div><div class='del'>-                                        fn (entry, data);</div><div class='del'>-                                else</div><div class='del'>-                                        gf_msg_callingfn ("circ-buff",</div><div class='del'>-                                                          GF_LOG_WARNING, 0,</div><div class='del'>-                                                          LG_MSG_NULL_PTR,</div><div class='del'>-                                                          "Null entry in "</div><div class='del'>-                                                          "circular buffer at "</div><div class='del'>-                                                          "index %d.", index);</div><div class='del'>-</div><div class='del'>-                                index++;</div><div class='del'>-                                index %= buffer-&gt;size_buffer;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        for (i = 0; i &lt; buffer-&gt;used_len ; i++) {</div><div class='del'>-                                entry = buffer-&gt;cb[i];</div><div class='del'>-                                fn (entry, data);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int index = 0;</div><div class='add'>+    circular_buffer_t *entry = NULL;</div><div class='add'>+    int entries = 0;</div><div class='add'>+    int ul = 0;</div><div class='add'>+    int w_ind = 0;</div><div class='add'>+    int size_buff = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    ul = buffer-&gt;used_len;</div><div class='add'>+    w_ind = buffer-&gt;w_index;</div><div class='add'>+    size_buff = buffer-&gt;size_buffer;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;buffer-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (buffer-&gt;use_once == _gf_false) {</div><div class='add'>+            index = (size_buff + (w_ind - ul)) % size_buff;</div><div class='add'>+            for (entries = 0; entries &lt; buffer-&gt;used_len; entries++) {</div><div class='add'>+                entry = buffer-&gt;cb[index];</div><div class='add'>+                if (entry)</div><div class='add'>+                    fn(entry, data);</div><div class='add'>+                else</div><div class='add'>+                    gf_msg_callingfn("circ-buff", GF_LOG_WARNING, 0,</div><div class='add'>+                                     LG_MSG_NULL_PTR,</div><div class='add'>+                                     "Null entry in "</div><div class='add'>+                                     "circular buffer at "</div><div class='add'>+                                     "index %d.",</div><div class='add'>+                                     index);</div><div class='add'>+</div><div class='add'>+                index++;</div><div class='add'>+                index %= buffer-&gt;size_buffer;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            for (i = 0; i &lt; buffer-&gt;used_len; i++) {</div><div class='add'>+                entry = buffer-&gt;cb[i];</div><div class='add'>+                fn(entry, data);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;buffer-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;buffer-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> buffer_t *</div><div class='del'>-cb_buffer_new (size_t buffer_size, gf_boolean_t use_once,</div><div class='del'>-               void (*destroy_buffer_data) (void *data))</div><div class='add'>+cb_buffer_new(size_t buffer_size, gf_boolean_t use_once,</div><div class='add'>+              void (*destroy_buffer_data)(void *data))</div><div class='ctx'> {</div><div class='del'>-        buffer_t    *buffer = NULL;</div><div class='del'>-</div><div class='del'>-        buffer = GF_CALLOC (1, sizeof (*buffer), gf_common_mt_buffer_t);</div><div class='del'>-        if (!buffer) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buffer-&gt;cb = GF_CALLOC (buffer_size,</div><div class='del'>-                                sizeof (circular_buffer_t *),</div><div class='del'>-                                gf_common_mt_circular_buffer_t);</div><div class='del'>-        if (!buffer-&gt;cb) {</div><div class='del'>-                GF_FREE (buffer);</div><div class='del'>-                buffer = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buffer-&gt;w_index = 0;</div><div class='del'>-        buffer-&gt;size_buffer = buffer_size;</div><div class='del'>-        buffer-&gt;use_once = use_once;</div><div class='del'>-        buffer-&gt;used_len = 0;</div><div class='del'>-        buffer-&gt;destroy_buffer_data = destroy_buffer_data;</div><div class='del'>-        pthread_mutex_init (&amp;buffer-&gt;lock, NULL);</div><div class='add'>+    buffer_t *buffer = NULL;</div><div class='add'>+</div><div class='add'>+    buffer = GF_CALLOC(1, sizeof(*buffer), gf_common_mt_buffer_t);</div><div class='add'>+    if (!buffer) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buffer-&gt;cb = GF_CALLOC(buffer_size, sizeof(circular_buffer_t *),</div><div class='add'>+                           gf_common_mt_circular_buffer_t);</div><div class='add'>+    if (!buffer-&gt;cb) {</div><div class='add'>+        GF_FREE(buffer);</div><div class='add'>+        buffer = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buffer-&gt;w_index = 0;</div><div class='add'>+    buffer-&gt;size_buffer = buffer_size;</div><div class='add'>+    buffer-&gt;use_once = use_once;</div><div class='add'>+    buffer-&gt;used_len = 0;</div><div class='add'>+    buffer-&gt;destroy_buffer_data = destroy_buffer_data;</div><div class='add'>+    pthread_mutex_init(&amp;buffer-&gt;lock, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return buffer;</div><div class='add'>+    return buffer;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cb_buffer_destroy (buffer_t *buffer)</div><div class='add'>+cb_buffer_destroy(buffer_t *buffer)</div><div class='ctx'> {</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        circular_buffer_t       *ptr = NULL;</div><div class='del'>-        if (buffer) {</div><div class='del'>-                if (buffer-&gt;cb) {</div><div class='del'>-                        for (i = 0; i &lt; buffer-&gt;used_len ; i++) {</div><div class='del'>-                                ptr = buffer-&gt;cb[i];</div><div class='del'>-                                if (ptr-&gt;data) {</div><div class='del'>-                                        cb_destroy_data (ptr,</div><div class='del'>-                                                   buffer-&gt;destroy_buffer_data);</div><div class='del'>-                                        ptr-&gt;data = NULL;</div><div class='del'>-                                        GF_FREE (ptr);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        GF_FREE (buffer-&gt;cb);</div><div class='add'>+    int i = 0;</div><div class='add'>+    circular_buffer_t *ptr = NULL;</div><div class='add'>+    if (buffer) {</div><div class='add'>+        if (buffer-&gt;cb) {</div><div class='add'>+            for (i = 0; i &lt; buffer-&gt;used_len; i++) {</div><div class='add'>+                ptr = buffer-&gt;cb[i];</div><div class='add'>+                if (ptr-&gt;data) {</div><div class='add'>+                    cb_destroy_data(ptr, buffer-&gt;destroy_buffer_data);</div><div class='add'>+                    ptr-&gt;data = NULL;</div><div class='add'>+                    GF_FREE(ptr);</div><div class='ctx'>                 }</div><div class='del'>-                pthread_mutex_destroy (&amp;buffer-&gt;lock);</div><div class='del'>-                GF_FREE (buffer);</div><div class='add'>+            }</div><div class='add'>+            GF_FREE(buffer-&gt;cb);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_destroy(&amp;buffer-&gt;lock);</div><div class='add'>+        GF_FREE(buffer);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/libglusterfs/src/client_t.c b/libglusterfs/src/client_t.c<br/>index 844acbc459c..35e0beda8d6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/client_t.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/client_t.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/client_t.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/client_t.c</a></div><div class='hunk'>@@ -17,648 +17,625 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_client_chain_client_entries (cliententry_t *entries, uint32_t startidx,</div><div class='del'>-                        uint32_t endcount)</div><div class='add'>+gf_client_chain_client_entries(cliententry_t *entries, uint32_t startidx,</div><div class='add'>+                               uint32_t endcount)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        i = 0;</div><div class='add'>+    uint32_t i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!entries) {</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!entries");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!entries) {</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!entries");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Chain only till the second to last entry because we want to</div><div class='del'>-         * ensure that the last entry has GF_CLIENTTABLE_END.</div><div class='del'>-         */</div><div class='del'>-        for (i = startidx; i &lt; (endcount - 1); i++)</div><div class='del'>-                entries[i].next_free = i + 1;</div><div class='add'>+    /* Chain only till the second to last entry because we want to</div><div class='add'>+     * ensure that the last entry has GF_CLIENTTABLE_END.</div><div class='add'>+     */</div><div class='add'>+    for (i = startidx; i &lt; (endcount - 1); i++)</div><div class='add'>+        entries[i].next_free = i + 1;</div><div class='ctx'> </div><div class='del'>-        /* i has already been incremented up to the last entry. */</div><div class='del'>-        entries[i].next_free = GF_CLIENTTABLE_END;</div><div class='add'>+    /* i has already been incremented up to the last entry. */</div><div class='add'>+    entries[i].next_free = GF_CLIENTTABLE_END;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_client_clienttable_expand (clienttable_t *clienttable, uint32_t nr)</div><div class='add'>+gf_client_clienttable_expand(clienttable_t *clienttable, uint32_t nr)</div><div class='ctx'> {</div><div class='del'>-        cliententry_t   *oldclients     = NULL;</div><div class='del'>-        uint32_t         oldmax_clients = -1;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-</div><div class='del'>-        if (clienttable == NULL || nr &lt;= clienttable-&gt;max_clients) {</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                ret = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        oldclients = clienttable-&gt;cliententries;</div><div class='del'>-        oldmax_clients = clienttable-&gt;max_clients;</div><div class='del'>-</div><div class='del'>-        clienttable-&gt;cliententries = GF_CALLOC (nr, sizeof (cliententry_t),</div><div class='del'>-                                                gf_common_mt_cliententry_t);</div><div class='del'>-        if (!clienttable-&gt;cliententries) {</div><div class='del'>-                clienttable-&gt;cliententries = oldclients;</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        clienttable-&gt;max_clients = nr;</div><div class='del'>-</div><div class='del'>-        if (oldclients) {</div><div class='del'>-                uint32_t cpy = oldmax_clients * sizeof (cliententry_t);</div><div class='del'>-                memcpy (clienttable-&gt;cliententries, oldclients, cpy);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_client_chain_client_entries (clienttable-&gt;cliententries,</div><div class='del'>-                                        oldmax_clients,</div><div class='del'>-                                        clienttable-&gt;max_clients);</div><div class='del'>-</div><div class='del'>-        /* Now that expansion is done, we must update the client list</div><div class='del'>-         * head pointer so that the client allocation functions can continue</div><div class='del'>-         * using the expanded table.</div><div class='del'>-         */</div><div class='del'>-        clienttable-&gt;first_free = oldmax_clients;</div><div class='del'>-        GF_FREE (oldclients);</div><div class='add'>+    cliententry_t *oldclients = NULL;</div><div class='add'>+    uint32_t oldmax_clients = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (clienttable == NULL || nr &lt;= clienttable-&gt;max_clients) {</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    oldclients = clienttable-&gt;cliententries;</div><div class='add'>+    oldmax_clients = clienttable-&gt;max_clients;</div><div class='add'>+</div><div class='add'>+    clienttable-&gt;cliententries = GF_CALLOC(nr, sizeof(cliententry_t),</div><div class='add'>+                                           gf_common_mt_cliententry_t);</div><div class='add'>+    if (!clienttable-&gt;cliententries) {</div><div class='add'>+        clienttable-&gt;cliententries = oldclients;</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    clienttable-&gt;max_clients = nr;</div><div class='add'>+</div><div class='add'>+    if (oldclients) {</div><div class='add'>+        uint32_t cpy = oldmax_clients * sizeof(cliententry_t);</div><div class='add'>+        memcpy(clienttable-&gt;cliententries, oldclients, cpy);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_client_chain_client_entries(clienttable-&gt;cliententries, oldmax_clients,</div><div class='add'>+                                   clienttable-&gt;max_clients);</div><div class='add'>+</div><div class='add'>+    /* Now that expansion is done, we must update the client list</div><div class='add'>+     * head pointer so that the client allocation functions can continue</div><div class='add'>+     * using the expanded table.</div><div class='add'>+     */</div><div class='add'>+    clienttable-&gt;first_free = oldmax_clients;</div><div class='add'>+    GF_FREE(oldclients);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> clienttable_t *</div><div class='del'>-gf_clienttable_alloc (void)</div><div class='add'>+gf_clienttable_alloc(void)</div><div class='ctx'> {</div><div class='del'>-        clienttable_t *clienttable = NULL;</div><div class='del'>-        int            result = 0;</div><div class='del'>-</div><div class='del'>-        clienttable =</div><div class='del'>-                GF_CALLOC (1, sizeof (clienttable_t), gf_common_mt_clienttable_t);</div><div class='del'>-        if (!clienttable)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;clienttable-&gt;lock);</div><div class='del'>-</div><div class='del'>-        result = gf_client_clienttable_expand (clienttable,</div><div class='del'>-                                               GF_CLIENTTABLE_INITIAL_SIZE);</div><div class='del'>-        if (result != 0) {</div><div class='del'>-                gf_msg ("client_t", GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_EXPAND_CLIENT_TABLE_FAILED,</div><div class='del'>-                        "gf_client_clienttable_expand failed");</div><div class='del'>-                GF_FREE (clienttable);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return clienttable;</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    int result = 0;</div><div class='add'>+</div><div class='add'>+    clienttable = GF_CALLOC(1, sizeof(clienttable_t),</div><div class='add'>+                            gf_common_mt_clienttable_t);</div><div class='add'>+    if (!clienttable)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;clienttable-&gt;lock);</div><div class='add'>+</div><div class='add'>+    result = gf_client_clienttable_expand(clienttable,</div><div class='add'>+                                          GF_CLIENTTABLE_INITIAL_SIZE);</div><div class='add'>+    if (result != 0) {</div><div class='add'>+        gf_msg("client_t", GF_LOG_ERROR, 0, LG_MSG_EXPAND_CLIENT_TABLE_FAILED,</div><div class='add'>+               "gf_client_clienttable_expand failed");</div><div class='add'>+        GF_FREE(clienttable);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return clienttable;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_client_clienttable_destroy (clienttable_t *clienttable)</div><div class='add'>+gf_client_clienttable_destroy(clienttable_t *clienttable)</div><div class='ctx'> {</div><div class='del'>-        client_t         *client        = NULL;</div><div class='del'>-        cliententry_t    *cliententries = NULL;</div><div class='del'>-        uint32_t          client_count  = 0;</div><div class='del'>-        int32_t           i             = 0;</div><div class='del'>-</div><div class='del'>-        if (!clienttable) {</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!clienttable");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                client_count = clienttable-&gt;max_clients;</div><div class='del'>-                clienttable-&gt;max_clients = 0;</div><div class='del'>-                cliententries = clienttable-&gt;cliententries;</div><div class='del'>-                clienttable-&gt;cliententries = NULL;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (cliententries != NULL) {</div><div class='del'>-                for (i = 0; i &lt; client_count; i++) {</div><div class='del'>-                        client = cliententries[i].client;</div><div class='del'>-                        if (client != NULL) {</div><div class='del'>-                                gf_client_unref (client);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_FREE (cliententries);</div><div class='del'>-                LOCK_DESTROY (&amp;clienttable-&gt;lock);</div><div class='del'>-                GF_FREE (clienttable);</div><div class='del'>-        }</div><div class='add'>+    client_t *client = NULL;</div><div class='add'>+    cliententry_t *cliententries = NULL;</div><div class='add'>+    uint32_t client_count = 0;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+</div><div class='add'>+    if (!clienttable) {</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!clienttable");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        client_count = clienttable-&gt;max_clients;</div><div class='add'>+        clienttable-&gt;max_clients = 0;</div><div class='add'>+        cliententries = clienttable-&gt;cliententries;</div><div class='add'>+        clienttable-&gt;cliententries = NULL;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (cliententries != NULL) {</div><div class='add'>+        for (i = 0; i &lt; client_count; i++) {</div><div class='add'>+            client = cliententries[i].client;</div><div class='add'>+            if (client != NULL) {</div><div class='add'>+                gf_client_unref(client);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        GF_FREE(cliententries);</div><div class='add'>+        LOCK_DESTROY(&amp;clienttable-&gt;lock);</div><div class='add'>+        GF_FREE(clienttable);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Increments ref.bind if the client is already present or creates a new</div><div class='ctx'>  * client with ref.bind = 1,ref.count = 1 it signifies that</div><div class='ctx'>  * as long as ref.bind is &gt; 0 client should be alive.</div><div class='ctx'>  */</div><div class='ctx'> client_t *</div><div class='del'>-gf_client_get (xlator_t *this, struct rpcsvc_auth_data *cred, char *client_uid,</div><div class='del'>-               char *subdir_mount)</div><div class='add'>+gf_client_get(xlator_t *this, struct rpcsvc_auth_data *cred, char *client_uid,</div><div class='add'>+              char *subdir_mount)</div><div class='ctx'> {</div><div class='del'>-        client_t      *client      = NULL;</div><div class='del'>-        cliententry_t *cliententry = NULL;</div><div class='del'>-        clienttable_t *clienttable = NULL;</div><div class='del'>-        unsigned int   i           = 0;</div><div class='del'>-</div><div class='del'>-        if (this == NULL || client_uid == NULL) {</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (; i &lt; clienttable-&gt;max_clients; i++) {</div><div class='del'>-                        client = clienttable-&gt;cliententries[i].client;</div><div class='del'>-                        if (client == NULL)</div><div class='del'>-                                continue;</div><div class='del'>-                        /*</div><div class='del'>-                         * look for matching client_uid, _and_</div><div class='del'>-                         * if auth was used, matching auth flavour and data</div><div class='del'>-                         */</div><div class='del'>-                        if (strcmp (client_uid, client-&gt;client_uid) == 0 &amp;&amp;</div><div class='del'>-                                (cred-&gt;flavour != AUTH_NONE &amp;&amp;</div><div class='del'>-                                        (cred-&gt;flavour == client-&gt;auth.flavour &amp;&amp;</div><div class='del'>-                                        (size_t) cred-&gt;datalen == client-&gt;auth.len &amp;&amp;</div><div class='del'>-                                        memcmp (cred-&gt;authdata,</div><div class='del'>-                                                client-&gt;auth.data,</div><div class='del'>-                                                client-&gt;auth.len) == 0))) {</div><div class='del'>-                                GF_ATOMIC_INC (client-&gt;bind);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                client = GF_CALLOC (1, sizeof(client_t), gf_common_mt_client_t);</div><div class='del'>-                if (client == NULL) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                client-&gt;this = this;</div><div class='del'>-                if (subdir_mount != NULL)</div><div class='del'>-                        client-&gt;subdir_mount = gf_strdup (subdir_mount);</div><div class='del'>-</div><div class='del'>-                LOCK_INIT (&amp;client-&gt;scratch_ctx.lock);</div><div class='del'>-</div><div class='del'>-                client-&gt;client_uid = gf_strdup (client_uid);</div><div class='del'>-                if (client-&gt;client_uid == NULL) {</div><div class='del'>-                        GF_FREE (client);</div><div class='del'>-                        client = NULL;</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                client-&gt;scratch_ctx.count = GF_CLIENTCTX_INITIAL_SIZE;</div><div class='del'>-                client-&gt;scratch_ctx.ctx =</div><div class='del'>-                        GF_CALLOC (GF_CLIENTCTX_INITIAL_SIZE,</div><div class='del'>-                                   sizeof (struct client_ctx),</div><div class='del'>-                                   gf_common_mt_client_ctx);</div><div class='del'>-                if (client-&gt;scratch_ctx.ctx == NULL) {</div><div class='del'>-                        GF_FREE (client-&gt;client_uid);</div><div class='del'>-                        GF_FREE (client);</div><div class='del'>-                        client = NULL;</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_ATOMIC_INIT (client-&gt;bind, 1);</div><div class='del'>-                GF_ATOMIC_INIT (client-&gt;count, 1);</div><div class='del'>-</div><div class='del'>-                client-&gt;auth.flavour = cred-&gt;flavour;</div><div class='del'>-                if (cred-&gt;flavour != AUTH_NONE) {</div><div class='del'>-                        client-&gt;auth.data =</div><div class='del'>-                                GF_MALLOC (cred-&gt;datalen,</div><div class='del'>-                                           gf_common_mt_client_t);</div><div class='del'>-                        if (client-&gt;auth.data == NULL) {</div><div class='del'>-                                GF_FREE (client-&gt;scratch_ctx.ctx);</div><div class='del'>-                                GF_FREE (client-&gt;client_uid);</div><div class='del'>-                                GF_FREE (client);</div><div class='del'>-                                client = NULL;</div><div class='del'>-                                errno = ENOMEM;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        memcpy (client-&gt;auth.data, cred-&gt;authdata,</div><div class='del'>-                                cred-&gt;datalen);</div><div class='del'>-                        client-&gt;auth.len = cred-&gt;datalen;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                client-&gt;tbl_index = clienttable-&gt;first_free;</div><div class='del'>-                cliententry = &amp;clienttable-&gt;cliententries[clienttable-&gt;first_free];</div><div class='del'>-                if (cliententry-&gt;next_free == GF_CLIENTTABLE_END) {</div><div class='del'>-                        int result =</div><div class='del'>-                                gf_client_clienttable_expand (clienttable,</div><div class='del'>-                                        clienttable-&gt;max_clients +</div><div class='del'>-                                                GF_CLIENTTABLE_INITIAL_SIZE);</div><div class='del'>-                        if (result != 0) {</div><div class='del'>-                                GF_FREE (client-&gt;scratch_ctx.ctx);</div><div class='del'>-                                GF_FREE (client-&gt;client_uid);</div><div class='del'>-                                GF_FREE (client);</div><div class='del'>-                                client = NULL;</div><div class='del'>-                                errno = result;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        cliententry = &amp;clienttable-&gt;cliententries[client-&gt;tbl_index];</div><div class='del'>-                        cliententry-&gt;next_free = clienttable-&gt;first_free;</div><div class='del'>-                }</div><div class='del'>-                cliententry-&gt;client = client;</div><div class='del'>-                clienttable-&gt;first_free = cliententry-&gt;next_free;</div><div class='del'>-                cliententry-&gt;next_free = GF_CLIENTENTRY_ALLOCATED;</div><div class='del'>-        }</div><div class='add'>+    client_t *client = NULL;</div><div class='add'>+    cliententry_t *cliententry = NULL;</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    unsigned int i = 0;</div><div class='add'>+</div><div class='add'>+    if (this == NULL || client_uid == NULL) {</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (; i &lt; clienttable-&gt;max_clients; i++) {</div><div class='add'>+            client = clienttable-&gt;cliententries[i].client;</div><div class='add'>+            if (client == NULL)</div><div class='add'>+                continue;</div><div class='add'>+            /*</div><div class='add'>+             * look for matching client_uid, _and_</div><div class='add'>+             * if auth was used, matching auth flavour and data</div><div class='add'>+             */</div><div class='add'>+            if (strcmp(client_uid, client-&gt;client_uid) == 0 &amp;&amp;</div><div class='add'>+                (cred-&gt;flavour != AUTH_NONE &amp;&amp;</div><div class='add'>+                 (cred-&gt;flavour == client-&gt;auth.flavour &amp;&amp;</div><div class='add'>+                  (size_t)cred-&gt;datalen == client-&gt;auth.len &amp;&amp;</div><div class='add'>+                  memcmp(cred-&gt;authdata, client-&gt;auth.data, client-&gt;auth.len) ==</div><div class='add'>+                      0))) {</div><div class='add'>+                GF_ATOMIC_INC(client-&gt;bind);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        client = GF_CALLOC(1, sizeof(client_t), gf_common_mt_client_t);</div><div class='add'>+        if (client == NULL) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        client-&gt;this = this;</div><div class='add'>+        if (subdir_mount != NULL)</div><div class='add'>+            client-&gt;subdir_mount = gf_strdup(subdir_mount);</div><div class='add'>+</div><div class='add'>+        LOCK_INIT(&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+</div><div class='add'>+        client-&gt;client_uid = gf_strdup(client_uid);</div><div class='add'>+        if (client-&gt;client_uid == NULL) {</div><div class='add'>+            GF_FREE(client);</div><div class='add'>+            client = NULL;</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        client-&gt;scratch_ctx.count = GF_CLIENTCTX_INITIAL_SIZE;</div><div class='add'>+        client-&gt;scratch_ctx.ctx = GF_CALLOC(GF_CLIENTCTX_INITIAL_SIZE,</div><div class='add'>+                                            sizeof(struct client_ctx),</div><div class='add'>+                                            gf_common_mt_client_ctx);</div><div class='add'>+        if (client-&gt;scratch_ctx.ctx == NULL) {</div><div class='add'>+            GF_FREE(client-&gt;client_uid);</div><div class='add'>+            GF_FREE(client);</div><div class='add'>+            client = NULL;</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        GF_ATOMIC_INIT(client-&gt;bind, 1);</div><div class='add'>+        GF_ATOMIC_INIT(client-&gt;count, 1);</div><div class='add'>+</div><div class='add'>+        client-&gt;auth.flavour = cred-&gt;flavour;</div><div class='add'>+        if (cred-&gt;flavour != AUTH_NONE) {</div><div class='add'>+            client-&gt;auth.data = GF_MALLOC(cred-&gt;datalen, gf_common_mt_client_t);</div><div class='add'>+            if (client-&gt;auth.data == NULL) {</div><div class='add'>+                GF_FREE(client-&gt;scratch_ctx.ctx);</div><div class='add'>+                GF_FREE(client-&gt;client_uid);</div><div class='add'>+                GF_FREE(client);</div><div class='add'>+                client = NULL;</div><div class='add'>+                errno = ENOMEM;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+            memcpy(client-&gt;auth.data, cred-&gt;authdata, cred-&gt;datalen);</div><div class='add'>+            client-&gt;auth.len = cred-&gt;datalen;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        client-&gt;tbl_index = clienttable-&gt;first_free;</div><div class='add'>+        cliententry = &amp;clienttable-&gt;cliententries[clienttable-&gt;first_free];</div><div class='add'>+        if (cliententry-&gt;next_free == GF_CLIENTTABLE_END) {</div><div class='add'>+            int result = gf_client_clienttable_expand(</div><div class='add'>+                clienttable,</div><div class='add'>+                clienttable-&gt;max_clients + GF_CLIENTTABLE_INITIAL_SIZE);</div><div class='add'>+            if (result != 0) {</div><div class='add'>+                GF_FREE(client-&gt;scratch_ctx.ctx);</div><div class='add'>+                GF_FREE(client-&gt;client_uid);</div><div class='add'>+                GF_FREE(client);</div><div class='add'>+                client = NULL;</div><div class='add'>+                errno = result;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+            cliententry = &amp;clienttable-&gt;cliententries[client-&gt;tbl_index];</div><div class='add'>+            cliententry-&gt;next_free = clienttable-&gt;first_free;</div><div class='add'>+        }</div><div class='add'>+        cliententry-&gt;client = client;</div><div class='add'>+        clienttable-&gt;first_free = cliententry-&gt;next_free;</div><div class='add'>+        cliententry-&gt;next_free = GF_CLIENTENTRY_ALLOCATED;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (client)</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_DEBUG, 0, LG_MSG_BIND_REF,</div><div class='del'>-                                  "%s: bind_ref: %"GF_PRI_ATOMIC", ref: "</div><div class='del'>-                                  "%"GF_PRI_ATOMIC, client-&gt;client_uid,</div><div class='del'>-                                  GF_ATOMIC_GET (client-&gt;bind),</div><div class='del'>-                                  GF_ATOMIC_GET (client-&gt;count));</div><div class='del'>-        return client;</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (client)</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_DEBUG, 0, LG_MSG_BIND_REF,</div><div class='add'>+                         "%s: bind_ref: %" GF_PRI_ATOMIC</div><div class='add'>+                         ", ref: "</div><div class='add'>+                         "%" GF_PRI_ATOMIC,</div><div class='add'>+                         client-&gt;client_uid, GF_ATOMIC_GET(client-&gt;bind),</div><div class='add'>+                         GF_ATOMIC_GET(client-&gt;count));</div><div class='add'>+    return client;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_client_put (client_t *client, gf_boolean_t *detached)</div><div class='add'>+gf_client_put(client_t *client, gf_boolean_t *detached)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t unref = _gf_false;</div><div class='del'>-        int bind_ref;</div><div class='del'>-</div><div class='del'>-        if (client == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='add'>+    gf_boolean_t unref = _gf_false;</div><div class='add'>+    int bind_ref;</div><div class='add'>+</div><div class='add'>+    if (client == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (detached)</div><div class='add'>+        *detached = _gf_false;</div><div class='add'>+</div><div class='add'>+    bind_ref = GF_ATOMIC_DEC(client-&gt;bind);</div><div class='add'>+    if (bind_ref == 0)</div><div class='add'>+        unref = _gf_true;</div><div class='add'>+</div><div class='add'>+    gf_msg_callingfn("client_t", GF_LOG_DEBUG, 0, LG_MSG_BIND_REF,</div><div class='add'>+                     "%s: "</div><div class='add'>+                     "bind_ref: %" GF_PRI_ATOMIC ", ref: %" GF_PRI_ATOMIC</div><div class='add'>+                     ", "</div><div class='add'>+                     "unref: %d",</div><div class='add'>+                     client-&gt;client_uid, GF_ATOMIC_GET(client-&gt;bind),</div><div class='add'>+                     GF_ATOMIC_GET(client-&gt;count), unref);</div><div class='add'>+    if (unref) {</div><div class='ctx'>         if (detached)</div><div class='del'>-                *detached = _gf_false;</div><div class='del'>-</div><div class='del'>-        bind_ref = GF_ATOMIC_DEC (client-&gt;bind);</div><div class='del'>-        if (bind_ref == 0)</div><div class='del'>-                unref = _gf_true;</div><div class='del'>-</div><div class='del'>-        gf_msg_callingfn ("client_t", GF_LOG_DEBUG, 0, LG_MSG_BIND_REF, "%s: "</div><div class='del'>-                          "bind_ref: %"GF_PRI_ATOMIC", ref: %"GF_PRI_ATOMIC", "</div><div class='del'>-                          "unref: %d", client-&gt;client_uid,</div><div class='del'>-                          GF_ATOMIC_GET (client-&gt;bind),</div><div class='del'>-                          GF_ATOMIC_GET (client-&gt;count), unref);</div><div class='del'>-        if (unref) {</div><div class='del'>-                if (detached)</div><div class='del'>-                        *detached = _gf_true;</div><div class='del'>-                gf_client_unref (client);</div><div class='del'>-        }</div><div class='add'>+            *detached = _gf_true;</div><div class='add'>+        gf_client_unref(client);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> client_t *</div><div class='del'>-gf_client_ref (client_t *client)</div><div class='add'>+gf_client_ref(client_t *client)</div><div class='ctx'> {</div><div class='del'>-        if (!client) {</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "null client");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_ATOMIC_INC (client-&gt;count);</div><div class='del'>-        gf_msg_callingfn ("client_t", GF_LOG_DEBUG, 0, LG_MSG_REF_COUNT, "%s: "</div><div class='del'>-                          "ref-count %"GF_PRI_ATOMIC, client-&gt;client_uid,</div><div class='del'>-                          GF_ATOMIC_GET (client-&gt;count));</div><div class='del'>-        return client;</div><div class='add'>+    if (!client) {</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "null client");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ATOMIC_INC(client-&gt;count);</div><div class='add'>+    gf_msg_callingfn("client_t", GF_LOG_DEBUG, 0, LG_MSG_REF_COUNT,</div><div class='add'>+                     "%s: "</div><div class='add'>+                     "ref-count %" GF_PRI_ATOMIC,</div><div class='add'>+                     client-&gt;client_uid, GF_ATOMIC_GET(client-&gt;count));</div><div class='add'>+    return client;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_client_destroy_recursive (xlator_t *xl, client_t *client)</div><div class='add'>+gf_client_destroy_recursive(xlator_t *xl, client_t *client)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *trav;</div><div class='add'>+    xlator_list_t *trav;</div><div class='ctx'> </div><div class='del'>-        if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;client_destroy) {</div><div class='del'>-                xl-&gt;cbks-&gt;client_destroy (xl, client);</div><div class='del'>-        }</div><div class='add'>+    if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;client_destroy) {</div><div class='add'>+        xl-&gt;cbks-&gt;client_destroy(xl, client);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (trav = xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                gf_client_destroy_recursive (trav-&gt;xlator, client);</div><div class='del'>-        }</div><div class='add'>+    for (trav = xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        gf_client_destroy_recursive(trav-&gt;xlator, client);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-client_destroy (client_t *client)</div><div class='add'>+client_destroy(client_t *client)</div><div class='ctx'> {</div><div class='del'>-        clienttable_t     *clienttable = NULL;</div><div class='del'>-        glusterfs_graph_t *gtrav       = NULL;</div><div class='del'>-</div><div class='del'>-        if (client == NULL){</div><div class='del'>-                gf_msg_callingfn ("xlator", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        clienttable = client-&gt;this-&gt;ctx-&gt;clienttable;</div><div class='del'>-</div><div class='del'>-        LOCK_DESTROY (&amp;client-&gt;scratch_ctx.lock);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                clienttable-&gt;cliententries[client-&gt;tbl_index].client = NULL;</div><div class='del'>-                clienttable-&gt;cliententries[client-&gt;tbl_index].next_free =</div><div class='del'>-                        clienttable-&gt;first_free;</div><div class='del'>-                clienttable-&gt;first_free = client-&gt;tbl_index;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (gtrav, &amp;client-&gt;this-&gt;ctx-&gt;graphs, list) {</div><div class='del'>-                gf_client_destroy_recursive (gtrav-&gt;top, client);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (client-&gt;subdir_inode)</div><div class='del'>-                inode_unref (client-&gt;subdir_inode);</div><div class='del'>-</div><div class='del'>-        GF_FREE (client-&gt;auth.data);</div><div class='del'>-        GF_FREE (client-&gt;auth.username);</div><div class='del'>-        GF_FREE (client-&gt;auth.passwd);</div><div class='del'>-        GF_FREE (client-&gt;scratch_ctx.ctx);</div><div class='del'>-        GF_FREE (client-&gt;client_uid);</div><div class='del'>-        GF_FREE (client-&gt;subdir_mount);</div><div class='del'>-        GF_FREE (client-&gt;client_name);</div><div class='del'>-        GF_FREE (client);</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    glusterfs_graph_t *gtrav = NULL;</div><div class='add'>+</div><div class='add'>+    if (client == NULL) {</div><div class='add'>+        gf_msg_callingfn("xlator", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    clienttable = client-&gt;this-&gt;ctx-&gt;clienttable;</div><div class='add'>+</div><div class='add'>+    LOCK_DESTROY(&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        clienttable-&gt;cliententries[client-&gt;tbl_index].client = NULL;</div><div class='add'>+        clienttable-&gt;cliententries[client-&gt;tbl_index]</div><div class='add'>+            .next_free = clienttable-&gt;first_free;</div><div class='add'>+        clienttable-&gt;first_free = client-&gt;tbl_index;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(gtrav, &amp;client-&gt;this-&gt;ctx-&gt;graphs, list)</div><div class='add'>+    {</div><div class='add'>+        gf_client_destroy_recursive(gtrav-&gt;top, client);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (client-&gt;subdir_inode)</div><div class='add'>+        inode_unref(client-&gt;subdir_inode);</div><div class='add'>+</div><div class='add'>+    GF_FREE(client-&gt;auth.data);</div><div class='add'>+    GF_FREE(client-&gt;auth.username);</div><div class='add'>+    GF_FREE(client-&gt;auth.passwd);</div><div class='add'>+    GF_FREE(client-&gt;scratch_ctx.ctx);</div><div class='add'>+    GF_FREE(client-&gt;client_uid);</div><div class='add'>+    GF_FREE(client-&gt;subdir_mount);</div><div class='add'>+    GF_FREE(client-&gt;client_name);</div><div class='add'>+    GF_FREE(client);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_client_disconnect_recursive (xlator_t *xl, client_t *client)</div><div class='add'>+gf_client_disconnect_recursive(xlator_t *xl, client_t *client)</div><div class='ctx'> {</div><div class='del'>-        int             ret     = 0;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_list_t *trav;</div><div class='ctx'> </div><div class='del'>-        if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;client_disconnect) {</div><div class='del'>-                ret = xl-&gt;cbks-&gt;client_disconnect (xl, client);</div><div class='del'>-        }</div><div class='add'>+    if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;client_disconnect) {</div><div class='add'>+        ret = xl-&gt;cbks-&gt;client_disconnect(xl, client);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (trav = xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                ret |= gf_client_disconnect_recursive (trav-&gt;xlator, client);</div><div class='del'>-        }</div><div class='add'>+    for (trav = xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        ret |= gf_client_disconnect_recursive(trav-&gt;xlator, client);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_client_disconnect (client_t *client)</div><div class='add'>+gf_client_disconnect(client_t *client)</div><div class='ctx'> {</div><div class='del'>-        int                ret   = 0;</div><div class='del'>-        glusterfs_graph_t *gtrav = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_graph_t *gtrav = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (gtrav, &amp;client-&gt;this-&gt;ctx-&gt;graphs, list) {</div><div class='del'>-                ret |= gf_client_disconnect_recursive (gtrav-&gt;top, client);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(gtrav, &amp;client-&gt;this-&gt;ctx-&gt;graphs, list)</div><div class='add'>+    {</div><div class='add'>+        ret |= gf_client_disconnect_recursive(gtrav-&gt;top, client);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_client_unref (client_t *client)</div><div class='add'>+gf_client_unref(client_t *client)</div><div class='ctx'> {</div><div class='del'>-        uint64_t refcount;</div><div class='del'>-</div><div class='del'>-        if (!client) {</div><div class='del'>-                gf_msg_callingfn ("client_t", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "client is NULL");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    uint64_t refcount;</div><div class='ctx'> </div><div class='del'>-        refcount = GF_ATOMIC_DEC (client-&gt;count);</div><div class='del'>-        gf_msg_callingfn ("client_t", GF_LOG_DEBUG, 0, LG_MSG_REF_COUNT, "%s: "</div><div class='del'>-                          "ref-count %"GF_PRI_ATOMIC, client-&gt;client_uid,</div><div class='del'>-                          refcount);</div><div class='del'>-        if (refcount == 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_INFO, 0, LG_MSG_DISCONNECT_CLIENT,</div><div class='del'>-                        "Shutting down connection %s", client-&gt;client_uid);</div><div class='del'>-                client_destroy (client);</div><div class='del'>-        }</div><div class='add'>+    if (!client) {</div><div class='add'>+        gf_msg_callingfn("client_t", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "client is NULL");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    refcount = GF_ATOMIC_DEC(client-&gt;count);</div><div class='add'>+    gf_msg_callingfn("client_t", GF_LOG_DEBUG, 0, LG_MSG_REF_COUNT,</div><div class='add'>+                     "%s: "</div><div class='add'>+                     "ref-count %" GF_PRI_ATOMIC,</div><div class='add'>+                     client-&gt;client_uid, refcount);</div><div class='add'>+    if (refcount == 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, LG_MSG_DISCONNECT_CLIENT,</div><div class='add'>+               "Shutting down connection %s", client-&gt;client_uid);</div><div class='add'>+        client_destroy(client);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__client_ctx_get_int (client_t *client, void *key, void **value)</div><div class='add'>+__client_ctx_get_int(client_t *client, void *key, void **value)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret   = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; client-&gt;scratch_ctx.count; index++) {</div><div class='del'>-                if (client-&gt;scratch_ctx.ctx[index].ctx_key == key)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (index = 0; index &lt; client-&gt;scratch_ctx.count; index++) {</div><div class='add'>+        if (client-&gt;scratch_ctx.ctx[index].ctx_key == key)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (index == client-&gt;scratch_ctx.count) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (index == client-&gt;scratch_ctx.count) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (value)</div><div class='del'>-                *value = client-&gt;scratch_ctx.ctx[index].ctx_value;</div><div class='add'>+    if (value)</div><div class='add'>+        *value = client-&gt;scratch_ctx.ctx[index].ctx_value;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__client_ctx_set_int (client_t *client, void *key, void *value)</div><div class='add'>+__client_ctx_set_int(client_t *client, void *key, void *value)</div><div class='ctx'> {</div><div class='del'>-        int index   = 0;</div><div class='del'>-        int ret     = 0;</div><div class='del'>-        int set_idx = -1;</div><div class='del'>-</div><div class='del'>-        for (index = 0; index &lt; client-&gt;scratch_ctx.count; index++) {</div><div class='del'>-                if (!client-&gt;scratch_ctx.ctx[index].ctx_key) {</div><div class='del'>-                        if (set_idx == -1)</div><div class='del'>-                                set_idx = index;</div><div class='del'>-                        /* don't break, to check if key already exists</div><div class='del'>-                           further on */</div><div class='del'>-                }</div><div class='del'>-                if (client-&gt;scratch_ctx.ctx[index].ctx_key == key) {</div><div class='del'>-                        set_idx = index;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int set_idx = -1;</div><div class='ctx'> </div><div class='del'>-        if (set_idx == -1) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    for (index = 0; index &lt; client-&gt;scratch_ctx.count; index++) {</div><div class='add'>+        if (!client-&gt;scratch_ctx.ctx[index].ctx_key) {</div><div class='add'>+            if (set_idx == -1)</div><div class='add'>+                set_idx = index;</div><div class='add'>+            /* don't break, to check if key already exists</div><div class='add'>+               further on */</div><div class='add'>+        }</div><div class='add'>+        if (client-&gt;scratch_ctx.ctx[index].ctx_key == key) {</div><div class='add'>+            set_idx = index;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        client-&gt;scratch_ctx.ctx[set_idx].ctx_key = key;</div><div class='del'>-        client-&gt;scratch_ctx.ctx[set_idx].ctx_value  = value;</div><div class='add'>+    if (set_idx == -1) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    client-&gt;scratch_ctx.ctx[set_idx].ctx_key = key;</div><div class='add'>+    client-&gt;scratch_ctx.ctx[set_idx].ctx_value = value;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*will return success with old value if exist*/</div><div class='ctx'> void *</div><div class='del'>-client_ctx_set (client_t *client, void *key, void *value)</div><div class='add'>+client_ctx_set(client_t *client, void *key, void *value)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        void *ret_value = NULL;</div><div class='del'>-</div><div class='del'>-        if (!client || !key || !value)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __client_ctx_get_int (client, key, &amp;ret_value);</div><div class='del'>-                if (!ret &amp;&amp; ret_value) {</div><div class='del'>-                        UNLOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='del'>-                        return ret_value;</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *ret_value = NULL;</div><div class='add'>+</div><div class='add'>+    if (!client || !key || !value)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-                ret = __client_ctx_set_int (client, key, value);</div><div class='add'>+    LOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __client_ctx_get_int(client, key, &amp;ret_value);</div><div class='add'>+        if (!ret &amp;&amp; ret_value) {</div><div class='add'>+            UNLOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+            return ret_value;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                return NULL;</div><div class='del'>-        return value;</div><div class='del'>-}</div><div class='add'>+        ret = __client_ctx_set_int(client, key, value);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='ctx'> </div><div class='add'>+    if (ret)</div><div class='add'>+        return NULL;</div><div class='add'>+    return value;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-client_ctx_get (client_t *client, void *key, void **value)</div><div class='add'>+client_ctx_get(client_t *client, void *key, void **value)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!client || !key)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!client || !key)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __client_ctx_get_int (client, key, value);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+    LOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __client_ctx_get_int(client, key, value);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__client_ctx_del_int (client_t *client, void *key, void **value)</div><div class='add'>+__client_ctx_del_int(client_t *client, void *key, void **value)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret   = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; client-&gt;scratch_ctx.count; index++) {</div><div class='del'>-                if (client-&gt;scratch_ctx.ctx[index].ctx_key == key)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (index = 0; index &lt; client-&gt;scratch_ctx.count; index++) {</div><div class='add'>+        if (client-&gt;scratch_ctx.ctx[index].ctx_key == key)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (index == client-&gt;scratch_ctx.count) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (index == client-&gt;scratch_ctx.count) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (value)</div><div class='del'>-                *value = client-&gt;scratch_ctx.ctx[index].ctx_value;</div><div class='add'>+    if (value)</div><div class='add'>+        *value = client-&gt;scratch_ctx.ctx[index].ctx_value;</div><div class='ctx'> </div><div class='del'>-        client-&gt;scratch_ctx.ctx[index].ctx_key   = 0;</div><div class='del'>-        client-&gt;scratch_ctx.ctx[index].ctx_value = 0;</div><div class='add'>+    client-&gt;scratch_ctx.ctx[index].ctx_key = 0;</div><div class='add'>+    client-&gt;scratch_ctx.ctx[index].ctx_value = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-client_ctx_del (client_t *client, void *key, void **value)</div><div class='add'>+client_ctx_del(client_t *client, void *key, void **value)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!client || !key)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!client || !key)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __client_ctx_del_int (client, key, value);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+    LOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __client_ctx_del_int(client, key, value);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;client-&gt;scratch_ctx.lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-client_dump (client_t *client, char *prefix)</div><div class='add'>+client_dump(client_t *client, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        if (!client)</div><div class='del'>-                return;</div><div class='add'>+    if (!client)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write("refcount", GF_PRI_ATOMIC,</div><div class='del'>-                           GF_ATOMIC_GET (client-&gt;count));</div><div class='add'>+    gf_proc_dump_write("refcount", GF_PRI_ATOMIC, GF_ATOMIC_GET(client-&gt;count));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-cliententry_dump (cliententry_t *cliententry, char *prefix)</div><div class='add'>+cliententry_dump(cliententry_t *cliententry, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        if (!cliententry)</div><div class='del'>-                return;</div><div class='add'>+    if (!cliententry)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (GF_CLIENTENTRY_ALLOCATED != cliententry-&gt;next_free)</div><div class='del'>-                return;</div><div class='add'>+    if (GF_CLIENTENTRY_ALLOCATED != cliententry-&gt;next_free)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (cliententry-&gt;client)</div><div class='del'>-                client_dump(cliententry-&gt;client, prefix);</div><div class='add'>+    if (cliententry-&gt;client)</div><div class='add'>+        client_dump(cliententry-&gt;client, prefix);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-clienttable_dump (clienttable_t *clienttable, char *prefix)</div><div class='add'>+clienttable_dump(clienttable_t *clienttable, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        int     i   = 0;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char    key[GF_DUMP_MAX_BUF_LEN] = {0};</div><div class='del'>-</div><div class='del'>-        if (!clienttable)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ret = TRY_LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("client_t", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_LOCK_FAILED,</div><div class='del'>-                                "Unable to acquire lock");</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-                gf_proc_dump_build_key(key, prefix, "maxclients");</div><div class='del'>-                gf_proc_dump_write(key, "%d", clienttable-&gt;max_clients);</div><div class='del'>-                gf_proc_dump_build_key(key, prefix, "first_free");</div><div class='del'>-                gf_proc_dump_write(key, "%d", clienttable-&gt;first_free);</div><div class='del'>-                for ( i = 0 ; i &lt; clienttable-&gt;max_clients; i++) {</div><div class='del'>-                        if (GF_CLIENTENTRY_ALLOCATED ==</div><div class='del'>-                            clienttable-&gt;cliententries[i].next_free) {</div><div class='del'>-                                gf_proc_dump_build_key(key, prefix,</div><div class='del'>-                                                       "cliententry[%d]", i);</div><div class='del'>-                                gf_proc_dump_add_section(key);</div><div class='del'>-                                cliententry_dump(&amp;clienttable-&gt;cliententries[i],</div><div class='del'>-                                                 key);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;clienttable-&gt;lock);</div><div class='del'>-}</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {0};</div><div class='ctx'> </div><div class='add'>+    if (!clienttable)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    ret = TRY_LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("client_t", GF_LOG_WARNING, 0, LG_MSG_LOCK_FAILED,</div><div class='add'>+                   "Unable to acquire lock");</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "maxclients");</div><div class='add'>+        gf_proc_dump_write(key, "%d", clienttable-&gt;max_clients);</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "first_free");</div><div class='add'>+        gf_proc_dump_write(key, "%d", clienttable-&gt;first_free);</div><div class='add'>+        for (i = 0; i &lt; clienttable-&gt;max_clients; i++) {</div><div class='add'>+            if (GF_CLIENTENTRY_ALLOCATED ==</div><div class='add'>+                clienttable-&gt;cliententries[i].next_free) {</div><div class='add'>+                gf_proc_dump_build_key(key, prefix, "cliententry[%d]", i);</div><div class='add'>+                gf_proc_dump_add_section(key);</div><div class='add'>+                cliententry_dump(&amp;clienttable-&gt;cliententries[i], key);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-client_ctx_dump (client_t *client, char *prefix)</div><div class='add'>+client_ctx_dump(client_t *client, char *prefix)</div><div class='ctx'> {</div><div class='ctx'> #if 0 /* TBD, FIXME */</div><div class='ctx'>         struct client_ctx   *client_ctx = NULL;</div><div class='hunk'>@@ -701,254 +678,241 @@ out:</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * the following functions are here to preserve legacy behavior of the</div><div class='ctx'>  * protocol/server xlator dump, but perhaps they should just be folded</div><div class='ctx'>  * into the client dump instead?</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_client_dump_fdtables_to_dict (xlator_t *this, dict_t *dict)</div><div class='add'>+gf_client_dump_fdtables_to_dict(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        clienttable_t  *clienttable = NULL;</div><div class='del'>-        int             count       = 0;</div><div class='del'>-        int             ret         = -1;</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #ifdef NOTYET</div><div class='del'>-        client_t       *client      = NULL;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='add'>+    client_t *client = NULL;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, dict, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, dict, out);</div><div class='ctx'> </div><div class='del'>-        clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='add'>+    clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='ctx'> </div><div class='del'>-        if (!clienttable)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!clienttable)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='ctx'> #ifdef NOTYET</div><div class='del'>-        ret = TRY_LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("client_t", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_LOCK_FAILED,</div><div class='del'>-                                "Unable to acquire lock");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                for ( ; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='del'>-                        if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='del'>-                            clienttable-&gt;cliententries[count].next_free)</div><div class='del'>-                                continue;</div><div class='del'>-                        client = clienttable-&gt;cliententries[count].client;</div><div class='del'>-                        if (client-&gt;bound_xl &amp;&amp;</div><div class='del'>-                            !strcmp (client-&gt;bound_xl-&gt;name, this-&gt;name)) {</div><div class='del'>-                                snprintf (key, sizeof (key), "conn%d", count++);</div><div class='del'>-                                fdtable_dump_to_dict (client-&gt;server_ctx.</div><div class='del'>-                                                      fdtable,</div><div class='del'>-                                                      key, dict);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    ret = TRY_LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("client_t", GF_LOG_WARNING, 0, LG_MSG_LOCK_FAILED,</div><div class='add'>+                   "Unable to acquire lock");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        for (; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='add'>+            if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='add'>+                clienttable-&gt;cliententries[count].next_free)</div><div class='add'>+                continue;</div><div class='add'>+            client = clienttable-&gt;cliententries[count].client;</div><div class='add'>+            if (client-&gt;bound_xl &amp;&amp;</div><div class='add'>+                !strcmp(client-&gt;bound_xl-&gt;name, this-&gt;name)) {</div><div class='add'>+                snprintf(key, sizeof(key), "conn%d", count++);</div><div class='add'>+                fdtable_dump_to_dict(client-&gt;server_ctx.fdtable, key, dict);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "conncount", count);</div><div class='add'>+    ret = dict_set_int32(dict, "conncount", count);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_client_dump_fdtables (xlator_t *this)</div><div class='add'>+gf_client_dump_fdtables(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        client_t       *client = NULL;</div><div class='del'>-        clienttable_t  *clienttable = NULL;</div><div class='del'>-        int             count = 1;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, this, out);</div><div class='del'>-</div><div class='del'>-        clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='del'>-</div><div class='del'>-        if (!clienttable)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        ret = TRY_LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("client_t", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_LOCK_FAILED,</div><div class='del'>-                                "Unable to acquire lock");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                for ( ; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='del'>-                        if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='del'>-                            clienttable-&gt;cliententries[count].next_free)</div><div class='del'>-                                continue;</div><div class='del'>-                        client = clienttable-&gt;cliententries[count].client;</div><div class='del'>-                        if (client-&gt;client_uid) {</div><div class='del'>-                                gf_proc_dump_build_key (key, "conn",</div><div class='del'>-                                                        "%d.id", count);</div><div class='del'>-                                gf_proc_dump_write (key, "%s",</div><div class='del'>-                                                    client-&gt;client_uid);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (client-&gt;subdir_mount) {</div><div class='del'>-                                gf_proc_dump_build_key (key, "conn",</div><div class='del'>-                                                        "%d.subdir", count);</div><div class='del'>-                                gf_proc_dump_write (key, "%s",</div><div class='del'>-                                                    client-&gt;subdir_mount);</div><div class='del'>-                        }</div><div class='del'>-                        gf_proc_dump_build_key (key, "conn", "%d.ref",</div><div class='del'>-                                                        count);</div><div class='del'>-                        gf_proc_dump_write (key, GF_PRI_ATOMIC,</div><div class='del'>-                                            GF_ATOMIC_GET (client-&gt;count));</div><div class='del'>-                        if (client-&gt;bound_xl) {</div><div class='del'>-                                gf_proc_dump_build_key (key, "conn",</div><div class='del'>-                                                        "%d.bound_xl", count);</div><div class='del'>-                                gf_proc_dump_write (key, "%s",</div><div class='del'>-                                                    client-&gt;bound_xl-&gt;name);</div><div class='del'>-                        }</div><div class='add'>+    client_t *client = NULL;</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    int count = 1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, this, out);</div><div class='add'>+</div><div class='add'>+    clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='add'>+</div><div class='add'>+    if (!clienttable)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    ret = TRY_LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("client_t", GF_LOG_WARNING, 0, LG_MSG_LOCK_FAILED,</div><div class='add'>+                   "Unable to acquire lock");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        for (; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='add'>+            if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='add'>+                clienttable-&gt;cliententries[count].next_free)</div><div class='add'>+                continue;</div><div class='add'>+            client = clienttable-&gt;cliententries[count].client;</div><div class='add'>+            if (client-&gt;client_uid) {</div><div class='add'>+                gf_proc_dump_build_key(key, "conn", "%d.id", count);</div><div class='add'>+                gf_proc_dump_write(key, "%s", client-&gt;client_uid);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (client-&gt;subdir_mount) {</div><div class='add'>+                gf_proc_dump_build_key(key, "conn", "%d.subdir", count);</div><div class='add'>+                gf_proc_dump_write(key, "%s", client-&gt;subdir_mount);</div><div class='add'>+            }</div><div class='add'>+            gf_proc_dump_build_key(key, "conn", "%d.ref", count);</div><div class='add'>+            gf_proc_dump_write(key, GF_PRI_ATOMIC,</div><div class='add'>+                               GF_ATOMIC_GET(client-&gt;count));</div><div class='add'>+            if (client-&gt;bound_xl) {</div><div class='add'>+                gf_proc_dump_build_key(key, "conn", "%d.bound_xl", count);</div><div class='add'>+                gf_proc_dump_write(key, "%s", client-&gt;bound_xl-&gt;name);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='ctx'> #ifdef NOTYET</div><div class='del'>-                        gf_proc_dump_build_key (key, "conn","%d.id", count);</div><div class='del'>-                        fdtable_dump (client-&gt;server_ctx.fdtable, key);</div><div class='add'>+            gf_proc_dump_build_key(key, "conn", "%d.id", count);</div><div class='add'>+            fdtable_dump(client-&gt;server_ctx.fdtable, key);</div><div class='ctx'> #endif</div><div class='del'>-                }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_client_dump_inodes_to_dict (xlator_t *this, dict_t *dict)</div><div class='add'>+gf_client_dump_inodes_to_dict(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        client_t       *client        = NULL;</div><div class='del'>-        clienttable_t  *clienttable   = NULL;</div><div class='del'>-        xlator_t       *prev_bound_xl = NULL;</div><div class='del'>-        char            key[32]       = {0,};</div><div class='del'>-        int             count         = 0;</div><div class='del'>-        int             ret           = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, dict, out);</div><div class='del'>-</div><div class='del'>-        clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='del'>-</div><div class='del'>-        if (!clienttable)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        ret = LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("client_t", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_LOCK_FAILED,</div><div class='del'>-                                "Unable to acquire lock");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                for ( ; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='del'>-                        if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='del'>-                            clienttable-&gt;cliententries[count].next_free)</div><div class='del'>-                                continue;</div><div class='del'>-                        client = clienttable-&gt;cliententries[count].client;</div><div class='del'>-                        if (!strcmp (client-&gt;bound_xl-&gt;name, this-&gt;name)) {</div><div class='del'>-                                if (client-&gt;bound_xl &amp;&amp; client-&gt;bound_xl-&gt;</div><div class='del'>-                                                itable) {</div><div class='del'>-                                        /* Presently every brick contains only</div><div class='del'>-                                         * one bound_xl for all connections.</div><div class='del'>-                                         * This will lead to duplicating of</div><div class='del'>-                                         *  the inode lists, if listing is</div><div class='del'>-                                         * done for every connection. This</div><div class='del'>-                                         * simple check prevents duplication</div><div class='del'>-                                         * in the present case. If need arises</div><div class='del'>-                                         * the check can be improved.</div><div class='del'>-                                         */</div><div class='del'>-                                        if (client-&gt;bound_xl == prev_bound_xl)</div><div class='del'>-                                                continue;</div><div class='del'>-                                        prev_bound_xl = client-&gt;bound_xl;</div><div class='del'>-</div><div class='del'>-                                        snprintf (key, sizeof (key), "conn%d",</div><div class='del'>-                                                        count);</div><div class='del'>-                                        inode_table_dump_to_dict (client-&gt;</div><div class='del'>-                                                        bound_xl-&gt;itable,</div><div class='del'>-                                                        key, dict);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    client_t *client = NULL;</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    xlator_t *prev_bound_xl = NULL;</div><div class='add'>+    char key[32] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, dict, out);</div><div class='add'>+</div><div class='add'>+    clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='add'>+</div><div class='add'>+    if (!clienttable)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    ret = LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("client_t", GF_LOG_WARNING, 0, LG_MSG_LOCK_FAILED,</div><div class='add'>+                   "Unable to acquire lock");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        for (; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='add'>+            if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='add'>+                clienttable-&gt;cliententries[count].next_free)</div><div class='add'>+                continue;</div><div class='add'>+            client = clienttable-&gt;cliententries[count].client;</div><div class='add'>+            if (!strcmp(client-&gt;bound_xl-&gt;name, this-&gt;name)) {</div><div class='add'>+                if (client-&gt;bound_xl &amp;&amp; client-&gt;bound_xl-&gt;itable) {</div><div class='add'>+                    /* Presently every brick contains only</div><div class='add'>+                     * one bound_xl for all connections.</div><div class='add'>+                     * This will lead to duplicating of</div><div class='add'>+                     *  the inode lists, if listing is</div><div class='add'>+                     * done for every connection. This</div><div class='add'>+                     * simple check prevents duplication</div><div class='add'>+                     * in the present case. If need arises</div><div class='add'>+                     * the check can be improved.</div><div class='add'>+                     */</div><div class='add'>+                    if (client-&gt;bound_xl == prev_bound_xl)</div><div class='add'>+                        continue;</div><div class='add'>+                    prev_bound_xl = client-&gt;bound_xl;</div><div class='add'>+</div><div class='add'>+                    snprintf(key, sizeof(key), "conn%d", count);</div><div class='add'>+                    inode_table_dump_to_dict(client-&gt;bound_xl-&gt;itable, key,</div><div class='add'>+                                             dict);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "conncount", count);</div><div class='add'>+    ret = dict_set_int32(dict, "conncount", count);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (prev_bound_xl)</div><div class='del'>-                prev_bound_xl = NULL;</div><div class='del'>-        return ret;</div><div class='add'>+    if (prev_bound_xl)</div><div class='add'>+        prev_bound_xl = NULL;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_client_dump_inodes (xlator_t *this)</div><div class='add'>+gf_client_dump_inodes(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        client_t       *client        = NULL;</div><div class='del'>-        clienttable_t  *clienttable   = NULL;</div><div class='del'>-        xlator_t       *prev_bound_xl = NULL;</div><div class='del'>-        int             count         = 0;</div><div class='del'>-        int             ret           = -1;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, this, out);</div><div class='del'>-</div><div class='del'>-        clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='del'>-</div><div class='del'>-        if (!clienttable)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = TRY_LOCK (&amp;clienttable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("client_t", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_LOCK_FAILED,</div><div class='del'>-                                "Unable to acquire lock");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for ( ; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='del'>-                        if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='del'>-                            clienttable-&gt;cliententries[count].next_free)</div><div class='del'>-                                continue;</div><div class='del'>-                        client = clienttable-&gt;cliententries[count].client;</div><div class='del'>-                        if (client-&gt;bound_xl &amp;&amp; client-&gt;bound_xl-&gt;itable) {</div><div class='del'>-                                /* Presently every brick contains only</div><div class='del'>-                                 * one bound_xl for all connections.</div><div class='del'>-                                 * This will lead to duplicating of</div><div class='del'>-                                 * the inode lists, if listing is</div><div class='del'>-                                 * done for every connection. This</div><div class='del'>-                                 * simple check prevents duplication</div><div class='del'>-                                 * in the present case. If need arises</div><div class='del'>-                                 * the check can be improved.</div><div class='del'>-                                 */</div><div class='del'>-                                if (client-&gt;bound_xl == prev_bound_xl)</div><div class='del'>-                                        continue;</div><div class='del'>-                                prev_bound_xl = client-&gt;bound_xl;</div><div class='del'>-</div><div class='del'>-                                gf_proc_dump_build_key(key, "conn",</div><div class='del'>-                                                       "%d.bound_xl.%s", count,</div><div class='del'>-                                                       client-&gt;bound_xl-&gt;name);</div><div class='del'>-                                inode_table_dump(client-&gt;bound_xl-&gt;itable,key);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;clienttable-&gt;lock);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    client_t *client = NULL;</div><div class='add'>+    clienttable_t *clienttable = NULL;</div><div class='add'>+    xlator_t *prev_bound_xl = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, this, out);</div><div class='add'>+</div><div class='add'>+    clienttable = this-&gt;ctx-&gt;clienttable;</div><div class='add'>+</div><div class='add'>+    if (!clienttable)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = TRY_LOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("client_t", GF_LOG_WARNING, 0, LG_MSG_LOCK_FAILED,</div><div class='add'>+                   "Unable to acquire lock");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        for (; count &lt; clienttable-&gt;max_clients; count++) {</div><div class='add'>+            if (GF_CLIENTENTRY_ALLOCATED !=</div><div class='add'>+                clienttable-&gt;cliententries[count].next_free)</div><div class='add'>+                continue;</div><div class='add'>+            client = clienttable-&gt;cliententries[count].client;</div><div class='add'>+            if (client-&gt;bound_xl &amp;&amp; client-&gt;bound_xl-&gt;itable) {</div><div class='add'>+                /* Presently every brick contains only</div><div class='add'>+                 * one bound_xl for all connections.</div><div class='add'>+                 * This will lead to duplicating of</div><div class='add'>+                 * the inode lists, if listing is</div><div class='add'>+                 * done for every connection. This</div><div class='add'>+                 * simple check prevents duplication</div><div class='add'>+                 * in the present case. If need arises</div><div class='add'>+                 * the check can be improved.</div><div class='add'>+                 */</div><div class='add'>+                if (client-&gt;bound_xl == prev_bound_xl)</div><div class='add'>+                    continue;</div><div class='add'>+                prev_bound_xl = client-&gt;bound_xl;</div><div class='add'>+</div><div class='add'>+                gf_proc_dump_build_key(key, "conn", "%d.bound_xl.%s", count,</div><div class='add'>+                                       client-&gt;bound_xl-&gt;name);</div><div class='add'>+                inode_table_dump(client-&gt;bound_xl-&gt;itable, key);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;clienttable-&gt;lock);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/libglusterfs/src/cluster-syncop.c b/libglusterfs/src/cluster-syncop.c<br/>index aa9cea75ba3..dab00577886 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/cluster-syncop.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/cluster-syncop.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/cluster-syncop.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/cluster-syncop.c</a></div><div class='hunk'>@@ -17,539 +17,496 @@</div><div class='ctx'> #include "cluster-syncop.h"</div><div class='ctx'> #include "defaults.h"</div><div class='ctx'> </div><div class='del'>-#define FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fop, args ...) do {\</div><div class='del'>-        int __i = 0;                                                    \</div><div class='del'>-        int __count = 0;					        \</div><div class='del'>-        cluster_local_t __local = {0,};                                 \</div><div class='del'>-        void    *__old_local = frame-&gt;local;                            \</div><div class='del'>-                                                                        \</div><div class='del'>-        __local.replies = replies;                                      \</div><div class='del'>-        memset (output, 0, numsubvols);                                 \</div><div class='del'>-        cluster_replies_wipe (replies, numsubvols);                     \</div><div class='del'>-        for (__i = 0; __i &lt; numsubvols; __i++)                          \</div><div class='del'>-                INIT_LIST_HEAD (&amp;replies[__i].entries.list);            \</div><div class='del'>-        if (syncbarrier_init (&amp;__local.barrier))                        \</div><div class='del'>-                break;                                                  \</div><div class='del'>-        frame-&gt;local = &amp;__local;                                        \</div><div class='del'>-        for (__i = 0; __i &lt; numsubvols; __i++) {                        \</div><div class='del'>-                if (on[__i]) {                                          \</div><div class='del'>-                        __count++;                                      \</div><div class='del'>-                }                                                       \</div><div class='del'>-        }                                                               \</div><div class='del'>-        __local.barrier.waitfor = __count;                              \</div><div class='del'>-        for (__i = 0; __i &lt; numsubvols; __i++) {		        \</div><div class='del'>-                if (!on[__i])                                           \</div><div class='del'>-                        continue;				        \</div><div class='del'>-                STACK_WIND_COOKIE (frame, cluster_##fop##_cbk,          \</div><div class='del'>-                                   (void *)(long) __i, subvols[__i],    \</div><div class='del'>-                                   subvols[__i]-&gt;fops-&gt;fop, args);      \</div><div class='del'>-        }								\</div><div class='del'>-        syncbarrier_wait (&amp;__local.barrier, __count);			\</div><div class='del'>-        syncbarrier_destroy (&amp;__local.barrier);                         \</div><div class='del'>-        frame-&gt;local = __old_local;                                     \</div><div class='del'>-        STACK_RESET (frame-&gt;root);                                      \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define FOP_SEQ(subvols, on, numsubvols, replies, output, frame, fop, args ...) do {\</div><div class='del'>-        int __i = 0;					                \</div><div class='del'>-                                                                        \</div><div class='del'>-        cluster_local_t __local = {0,};                                 \</div><div class='del'>-        void    *__old_local = frame-&gt;local;                            \</div><div class='del'>-        __local.replies = replies;                                      \</div><div class='del'>-        memset (output, 0, numsubvols);                                 \</div><div class='del'>-        cluster_replies_wipe (replies, numsubvols);                     \</div><div class='del'>-        for (__i = 0; __i &lt; numsubvols; __i++)                          \</div><div class='del'>-                INIT_LIST_HEAD (&amp;replies[__i].entries.list);            \</div><div class='del'>-        if (syncbarrier_init (&amp;__local.barrier))                        \</div><div class='del'>-                break;                                                  \</div><div class='del'>-        frame-&gt;local = &amp;__local;                                        \</div><div class='del'>-        for (__i = 0; __i &lt; numsubvols; __i++) {		        \</div><div class='del'>-                if (!on[__i])                                           \</div><div class='del'>-                        continue;				        \</div><div class='del'>-                STACK_WIND_COOKIE (frame, cluster_##fop##_cbk,          \</div><div class='del'>-                                   (void *)(long) __i, subvols[__i],    \</div><div class='del'>-                                   subvols[__i]-&gt;fops-&gt;fop, args);      \</div><div class='del'>-                syncbarrier_wait (&amp;__local.barrier, 1);                 \</div><div class='del'>-        }                                                               \</div><div class='del'>-        syncbarrier_destroy (&amp;__local.barrier);                         \</div><div class='del'>-        frame-&gt;local = __old_local;                                     \</div><div class='del'>-        STACK_RESET (frame-&gt;root);                                      \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define FOP_CBK(fop, frame, cookie, args ...) do {\</div><div class='del'>-        cluster_local_t *__local = frame-&gt;local;                        \</div><div class='del'>-        int __i = (long)cookie;                                         \</div><div class='del'>-        args_##fop##_cbk_store (&amp;__local-&gt;replies[__i], args);          \</div><div class='del'>-        __local-&gt;replies[__i].valid = 1;                                \</div><div class='del'>-        syncbarrier_wake (&amp;__local-&gt;barrier);                           \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-cluster_fop_success_fill (default_args_cbk_t *replies, int numsubvols,</div><div class='del'>-                          unsigned char *success)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        int count = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++) {</div><div class='del'>-                if (replies[i].valid &amp;&amp; replies[i].op_ret &gt;= 0) {</div><div class='del'>-                        success[i] = 1;</div><div class='del'>-                        count++;</div><div class='del'>-                } else {</div><div class='del'>-                        success[i] = 0;</div><div class='del'>-                }</div><div class='add'>+#define FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fop,       \</div><div class='add'>+                   args...)                                                    \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int __i = 0;                                                           \</div><div class='add'>+        int __count = 0;                                                       \</div><div class='add'>+        cluster_local_t __local = {                                            \</div><div class='add'>+            0,                                                                 \</div><div class='add'>+        };                                                                     \</div><div class='add'>+        void *__old_local = frame-&gt;local;                                      \</div><div class='add'>+                                                                               \</div><div class='add'>+        __local.replies = replies;                                             \</div><div class='add'>+        memset(output, 0, numsubvols);                                         \</div><div class='add'>+        cluster_replies_wipe(replies, numsubvols);                             \</div><div class='add'>+        for (__i = 0; __i &lt; numsubvols; __i++)                                 \</div><div class='add'>+            INIT_LIST_HEAD(&amp;replies[__i].entries.list);                        \</div><div class='add'>+        if (syncbarrier_init(&amp;__local.barrier))                                \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        frame-&gt;local = &amp;__local;                                               \</div><div class='add'>+        for (__i = 0; __i &lt; numsubvols; __i++) {                               \</div><div class='add'>+            if (on[__i]) {                                                     \</div><div class='add'>+                __count++;                                                     \</div><div class='add'>+            }                                                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        __local.barrier.waitfor = __count;                                     \</div><div class='add'>+        for (__i = 0; __i &lt; numsubvols; __i++) {                               \</div><div class='add'>+            if (!on[__i])                                                      \</div><div class='add'>+                continue;                                                      \</div><div class='add'>+            STACK_WIND_COOKIE(frame, cluster_##fop##_cbk, (void *)(long)__i,   \</div><div class='add'>+                              subvols[__i], subvols[__i]-&gt;fops-&gt;fop, args);    \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        syncbarrier_wait(&amp;__local.barrier, __count);                           \</div><div class='add'>+        syncbarrier_destroy(&amp;__local.barrier);                                 \</div><div class='add'>+        frame-&gt;local = __old_local;                                            \</div><div class='add'>+        STACK_RESET(frame-&gt;root);                                              \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define FOP_SEQ(subvols, on, numsubvols, replies, output, frame, fop, args...) \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int __i = 0;                                                           \</div><div class='add'>+                                                                               \</div><div class='add'>+        cluster_local_t __local = {                                            \</div><div class='add'>+            0,                                                                 \</div><div class='add'>+        };                                                                     \</div><div class='add'>+        void *__old_local = frame-&gt;local;                                      \</div><div class='add'>+        __local.replies = replies;                                             \</div><div class='add'>+        memset(output, 0, numsubvols);                                         \</div><div class='add'>+        cluster_replies_wipe(replies, numsubvols);                             \</div><div class='add'>+        for (__i = 0; __i &lt; numsubvols; __i++)                                 \</div><div class='add'>+            INIT_LIST_HEAD(&amp;replies[__i].entries.list);                        \</div><div class='add'>+        if (syncbarrier_init(&amp;__local.barrier))                                \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        frame-&gt;local = &amp;__local;                                               \</div><div class='add'>+        for (__i = 0; __i &lt; numsubvols; __i++) {                               \</div><div class='add'>+            if (!on[__i])                                                      \</div><div class='add'>+                continue;                                                      \</div><div class='add'>+            STACK_WIND_COOKIE(frame, cluster_##fop##_cbk, (void *)(long)__i,   \</div><div class='add'>+                              subvols[__i], subvols[__i]-&gt;fops-&gt;fop, args);    \</div><div class='add'>+            syncbarrier_wait(&amp;__local.barrier, 1);                             \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        syncbarrier_destroy(&amp;__local.barrier);                                 \</div><div class='add'>+        frame-&gt;local = __old_local;                                            \</div><div class='add'>+        STACK_RESET(frame-&gt;root);                                              \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define FOP_CBK(fop, frame, cookie, args...)                                   \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        cluster_local_t *__local = frame-&gt;local;                               \</div><div class='add'>+        int __i = (long)cookie;                                                \</div><div class='add'>+        args_##fop##_cbk_store(&amp;__local-&gt;replies[__i], args);                  \</div><div class='add'>+        __local-&gt;replies[__i].valid = 1;                                       \</div><div class='add'>+        syncbarrier_wake(&amp;__local-&gt;barrier);                                   \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+cluster_fop_success_fill(default_args_cbk_t *replies, int numsubvols,</div><div class='add'>+                         unsigned char *success)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++) {</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].op_ret &gt;= 0) {</div><div class='add'>+            success[i] = 1;</div><div class='add'>+            count++;</div><div class='add'>+        } else {</div><div class='add'>+            success[i] = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cluster_replies_wipe (default_args_cbk_t *replies, int numsubvols)</div><div class='add'>+cluster_replies_wipe(default_args_cbk_t *replies, int numsubvols)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!replies)</div><div class='del'>-                return;</div><div class='add'>+    if (!replies)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++)</div><div class='del'>-                args_cbk_wipe (&amp;replies[i]);</div><div class='del'>-        memset (replies, 0, numsubvols * sizeof (*replies));</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++)</div><div class='add'>+        args_cbk_wipe(&amp;replies[i]);</div><div class='add'>+    memset(replies, 0, numsubvols * sizeof(*replies));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+cluster_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (lookup, frame, cookie, op_ret, op_errno, inode, buf,</div><div class='del'>-                 xdata, postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(lookup, frame, cookie, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+            postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+cluster_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (stat, frame, cookie, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(stat, frame, cookie, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+int32_t</div><div class='add'>+cluster_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    FOP_CBK(truncate, frame, cookie, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+cluster_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (truncate, frame, cookie, op_ret, op_errno, prebuf,</div><div class='del'>-                 postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(ftruncate, frame, cookie, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+cluster_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (ftruncate, frame, cookie, op_ret, op_errno, prebuf,</div><div class='del'>-                 postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(access, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+cluster_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                     struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (access, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(readlink, frame, cookie, op_ret, op_errno, path, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, const char *path,</div><div class='del'>-                      struct iatt *buf, dict_t *xdata)</div><div class='add'>+cluster_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (readlink, frame, cookie, op_ret, op_errno, path, buf,</div><div class='del'>-                 xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(mknod, frame, cookie, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+            postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+cluster_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (mknod, frame, cookie, op_ret, op_errno, inode,</div><div class='del'>-                 buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(mkdir, frame, cookie, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+            postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+cluster_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='ctx'>                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (mkdir, frame, cookie, op_ret, op_errno, inode,</div><div class='del'>-                 buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(unlink, frame, cookie, op_ret, op_errno, preparent, postparent,</div><div class='add'>+            xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+cluster_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (unlink, frame, cookie, op_ret, op_errno, preparent,</div><div class='del'>-                 postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(rmdir, frame, cookie, op_ret, op_errno, preparent, postparent,</div><div class='add'>+            xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+cluster_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (rmdir, frame, cookie, op_ret, op_errno, preparent,</div><div class='del'>-                 postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(symlink, frame, cookie, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+            postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                     struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+cluster_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                   struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                   struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (symlink, frame, cookie, op_ret, op_errno, inode, buf,</div><div class='del'>-                 preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(rename, frame, cookie, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+            postoldparent, prenewparent, postnewparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+cluster_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (rename, frame, cookie, op_ret, op_errno, buf, preoldparent,</div><div class='del'>-                 postoldparent, prenewparent, postnewparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(link, frame, cookie, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+            postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+cluster_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (link, frame, cookie, op_ret, op_errno, inode, buf,</div><div class='del'>-                 preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(create, frame, cookie, op_ret, op_errno, fd, inode, buf, preparent,</div><div class='add'>+            postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+cluster_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (create, frame, cookie, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                 preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(open, frame, cookie, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='add'>+cluster_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                  int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='ctx'>                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (open, frame, cookie, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(readv, frame, cookie, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+            iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-                   int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+cluster_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (readv, frame, cookie, op_ret, op_errno, vector, count,</div><div class='del'>-                 stbuf, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(writev, frame, cookie, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+cluster_put_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (writev, frame, cookie, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                 xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(put, frame, cookie, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+            postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_put_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                 struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+cluster_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (put, frame, cookie, op_ret, op_errno, inode, buf, preparent,</div><div class='del'>-                 postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(flush, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+cluster_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                  struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (flush, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fsync, frame, cookie, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+cluster_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fsync, frame, cookie, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                 xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fstat, frame, cookie, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+cluster_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fstat, frame, cookie, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(opendir, frame, cookie, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+cluster_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (opendir, frame, cookie, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fsyncdir, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fsyncdir, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(statfs, frame, cookie, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+cluster_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (statfs, frame, cookie, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(setxattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (setxattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fsetxattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+cluster_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fsetxattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fgetxattr, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+cluster_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fgetxattr, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(getxattr, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (getxattr, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(xattrop, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+cluster_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='ctx'>                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (xattrop, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fxattrop, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fxattrop, frame, cookie, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(removexattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+cluster_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (removexattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fremovexattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          dict_t *xdata)</div><div class='add'>+cluster_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fremovexattr, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(lk, frame, cookie, op_ret, op_errno, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+cluster_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (lk, frame, cookie, op_ret, op_errno, lock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(inodelk, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+cluster_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (inodelk, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(finodelk, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (finodelk, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(entrylk, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+cluster_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (entrylk, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fentrylk, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_rchecksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, uint32_t weak_checksum,</div><div class='add'>+                      uint8_t *strong_checksum, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fentrylk, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(rchecksum, frame, cookie, op_ret, op_errno, weak_checksum,</div><div class='add'>+            strong_checksum, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_rchecksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, uint32_t weak_checksum,</div><div class='del'>-                       uint8_t *strong_checksum,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+cluster_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (rchecksum, frame, cookie, op_ret, op_errno, weak_checksum,</div><div class='del'>-                             strong_checksum, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(readdir, frame, cookie, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+cluster_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                      int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='ctx'>                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (readdir, frame, cookie, op_ret, op_errno, entries, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(readdirp, frame, cookie, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+cluster_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                    struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (readdirp, frame, cookie, op_ret, op_errno, entries, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(setattr, frame, cookie, op_ret, op_errno, statpre, statpost, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+cluster_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                      int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                     struct iatt *statpost,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+                     struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (setattr, frame, cookie, op_ret, op_errno, statpre,</div><div class='del'>-                 statpost, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-cluster_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                      struct iatt *statpost,</div><div class='del'>-                      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        FOP_CBK (fsetattr, frame, cookie, op_ret, op_errno, statpre,</div><div class='del'>-                 statpost, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fsetattr, frame, cookie, op_ret, op_errno, statpre, statpost,</div><div class='add'>+            xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='hunk'>@@ -557,8 +514,8 @@ cluster_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                       int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='ctx'>                       struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (fallocate, frame, cookie, op_ret, op_errno, pre, post, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(fallocate, frame, cookie, op_ret, op_errno, pre, post, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='hunk'>@@ -566,752 +523,733 @@ cluster_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                     int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='ctx'>                     struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (discard, frame, cookie, op_ret, op_errno, pre, post, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(discard, frame, cookie, op_ret, op_errno, pre, post, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> cluster_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='del'>-                    struct iatt *post, dict_t *xdata)</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='add'>+                     struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (zerofill, frame, cookie, op_ret, op_errno, pre,</div><div class='del'>-                 post, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(zerofill, frame, cookie, op_ret, op_errno, pre, post, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_ipc_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+cluster_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_CBK (ipc, frame, cookie, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    FOP_CBK(ipc, frame, cookie, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fgetxattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fgetxattr, fd,</div><div class='del'>-                    name, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-cluster_fsetxattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-                   int32_t flags, dict_t *xdata)</div><div class='add'>+cluster_fgetxattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                  default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                  call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fsetxattr, fd,</div><div class='del'>-                    dict, flags, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fgetxattr, fd,</div><div class='add'>+               name, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_setxattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_fsetxattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+                  call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='ctx'>                   int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, setxattr, loc,</div><div class='del'>-                    dict, flags, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fsetxattr, fd,</div><div class='add'>+               dict, flags, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_statfs (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+cluster_setxattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                 default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+                 int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, statfs, loc,</div><div class='del'>-                    xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, setxattr, loc,</div><div class='add'>+               dict, flags, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fsyncdir (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+cluster_statfs(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fsyncdir, fd,</div><div class='del'>-                    flags, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, statfs, loc,</div><div class='add'>+               xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_opendir (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_fsyncdir(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='ctx'>                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, opendir, loc,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fsyncdir, fd,</div><div class='add'>+               flags, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fstat (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+cluster_opendir(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fstat, fd,</div><div class='del'>-                    xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, opendir, loc,</div><div class='add'>+               fd, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fsync (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+cluster_fstat(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+              default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+              call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fsync, fd,</div><div class='del'>-                    flags, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fstat, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_flush (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+cluster_fsync(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+              default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+              call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, flush, fd,</div><div class='del'>-                    xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fsync, fd,</div><div class='add'>+               flags, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_writev (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='del'>-                struct iobref *iobref, dict_t *xdata)</div><div class='add'>+cluster_flush(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+              default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+              call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, writev, fd,</div><div class='del'>-                    vector, count, off, flags, iobref, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, flush, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_put (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-             default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-             call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             mode_t mode, mode_t umask, uint32_t flags, struct iovec *vector,</div><div class='del'>-             int32_t count, off_t offset, struct iobref *iobref, dict_t *xattr,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+cluster_writev(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='add'>+               struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, put, loc,</div><div class='del'>-                    mode, umask, flags, vector, count, offset, iobref, xattr,</div><div class='del'>-                    xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, writev, fd,</div><div class='add'>+               vector, count, off, flags, iobref, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_readv (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-               off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+cluster_put(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+            default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+            call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+            mode_t umask, uint32_t flags, struct iovec *vector, int32_t count,</div><div class='add'>+            off_t offset, struct iobref *iobref, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, readv, fd, size,</div><div class='del'>-                    offset, flags, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, put, loc, mode,</div><div class='add'>+               umask, flags, vector, count, offset, iobref, xattr, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_open (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_readv(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-              call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-              fd_t *fd, dict_t *xdata)</div><div class='add'>+              call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, open, loc,</div><div class='del'>-                    flags, fd, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, readv, fd, size,</div><div class='add'>+               offset, flags, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_create (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-                mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+cluster_open(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+             default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+             call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+             fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, create, loc,</div><div class='del'>-                    flags, mode, umask, fd, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, open, loc,</div><div class='add'>+               flags, fd, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_link (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-              default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-              call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+cluster_create(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+               mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, link, oldloc,</div><div class='del'>-                    newloc, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, create, loc,</div><div class='add'>+               flags, mode, umask, fd, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_rename (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='del'>-                loc_t *newloc, dict_t *xdata)</div><div class='add'>+cluster_link(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+             default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+             call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, rename, oldloc,</div><div class='del'>-                    newloc, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, link, oldloc,</div><div class='add'>+               newloc, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+int32_t</div><div class='add'>+cluster_rename(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+               loc_t *newloc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, rename, oldloc,</div><div class='add'>+               newloc, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_symlink (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                 default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-                 loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+cluster_symlink(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+                loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, symlink,</div><div class='del'>-                    linkpath, loc, umask, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, symlink,</div><div class='add'>+               linkpath, loc, umask, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_rmdir (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+cluster_rmdir(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+              default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+              call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, rmdir, loc,</div><div class='del'>-                    flags, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, rmdir, loc,</div><div class='add'>+               flags, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_unlink (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+cluster_unlink(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, unlink, loc,</div><div class='del'>-                    xflag, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, unlink, loc,</div><div class='add'>+               xflag, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_mkdir (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-               mode_t umask, dict_t *xdata)</div><div class='add'>+cluster_mkdir(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+              default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+              call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+              mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, mkdir, loc,</div><div class='del'>-                    mode, umask, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, mkdir, loc,</div><div class='add'>+               mode, umask, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cluster_mknod (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-               default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-               call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-               dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+cluster_mknod(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+              default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+              call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+              dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, mknod, loc,</div><div class='del'>-                    mode, rdev, umask, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, mknod, loc,</div><div class='add'>+               mode, rdev, umask, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_readlink (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+cluster_readlink(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                 default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, readlink, loc,</div><div class='del'>-                    size, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, readlink, loc,</div><div class='add'>+               size, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_access (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+cluster_access(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, access, loc,</div><div class='del'>-                    mask, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, access, loc,</div><div class='add'>+               mask, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_ftruncate (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+cluster_ftruncate(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                  default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                  call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, ftruncate, fd,</div><div class='del'>-                    offset, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, ftruncate, fd,</div><div class='add'>+               offset, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_getxattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  const char *name, dict_t *xdata)</div><div class='add'>+cluster_getxattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                 default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                 const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, getxattr, loc,</div><div class='del'>-                    name, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, getxattr, loc,</div><div class='add'>+               name, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+int32_t</div><div class='add'>+cluster_xattrop(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, xattrop, loc,</div><div class='add'>+               flags, dict, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_xattrop (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_fxattrop(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'>                  gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, xattrop, loc,</div><div class='del'>-                    flags, dict, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fxattrop, fd,</div><div class='add'>+               flags, dict, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fxattrop (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+cluster_removexattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                    default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                    call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                    const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fxattrop, fd,</div><div class='del'>-                    flags, dict, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, removexattr,</div><div class='add'>+               loc, name, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_removexattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_fremovexattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                      default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                     call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                     call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'>                      const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fremovexattr,</div><div class='add'>+               fd, name, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fremovexattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                      default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                      call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                      const char *name, dict_t *xdata)</div><div class='add'>+cluster_lk(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+           default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+           call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+           struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, lk, fd, cmd,</div><div class='add'>+               lock, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_lk (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-            default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-            call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-            int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+cluster_rchecksum(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                  default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                  call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                  int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, lk, fd, cmd,</div><div class='del'>-                    lock, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, rchecksum, fd,</div><div class='add'>+               offset, len, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_rchecksum (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                   int32_t len, dict_t *xdata)</div><div class='add'>+cluster_readdir(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, rchecksum, fd,</div><div class='del'>-                    offset, len, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, readdir, fd,</div><div class='add'>+               size, off, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_readdir (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_readdirp(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 size_t size, off_t off, dict_t *xdata)</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                 off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, readdir, fd,</div><div class='del'>-                    size, off, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, readdirp, fd,</div><div class='add'>+               size, off, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_readdirp (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  size_t size, off_t off, dict_t *xdata)</div><div class='add'>+cluster_setattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, readdirp, fd,</div><div class='del'>-                    size, off, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, setattr, loc,</div><div class='add'>+               stbuf, valid, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_setattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_truncate(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                 struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, setattr, loc,</div><div class='del'>-                    stbuf, valid, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, truncate, loc,</div><div class='add'>+               offset, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_truncate (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                  call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+cluster_stat(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+             default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+             call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, truncate, loc,</div><div class='del'>-                    offset, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, stat, loc,</div><div class='add'>+               xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_stat (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-              default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-              call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+cluster_lookup(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+               default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, stat, loc,</div><div class='del'>-                    xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, lookup, loc,</div><div class='add'>+               xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_lookup (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+cluster_fsetattr(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                 default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                 struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, lookup, loc,</div><div class='del'>-                    xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fsetattr, fd,</div><div class='add'>+               stbuf, valid, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fsetattr (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+cluster_fallocate(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                   default_args_cbk_t *replies, unsigned char *output,</div><div class='ctx'>                   call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+                  int32_t keep_size, off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, fsetattr, fd,</div><div class='del'>-                    stbuf, valid, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fallocate, fd,</div><div class='add'>+               keep_size, offset, len, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cluster_fallocate (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   int32_t keep_size, off_t offset, size_t len, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, fallocate, fd,</div><div class='del'>-                   keep_size, offset, len, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-cluster_discard (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                 default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+cluster_discard(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, discard, fd,</div><div class='del'>-                   offset, len, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, discard, fd,</div><div class='add'>+               offset, len, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> cluster_zerofill(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='ctx'>                  default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 off_t offset, off_t len, dict_t *xdata)</div><div class='add'>+                 call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                 off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, zerofill, fd,</div><div class='del'>-                   offset, len, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, zerofill, fd,</div><div class='add'>+               offset, len, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cluster_ipc (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-             default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-             call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+cluster_ipc(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+            default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+            call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, output, frame, ipc, op, xdata);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, output, frame, ipc, op, xdata);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_uninodelk (xlator_t **subvols, unsigned char *locked_on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, char *dom,</div><div class='del'>-                   inode_t *inode, off_t off, size_t size)</div><div class='add'>+cluster_uninodelk(xlator_t **subvols, unsigned char *locked_on, int numsubvols,</div><div class='add'>+                  default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                  call_frame_t *frame, xlator_t *this, char *dom,</div><div class='add'>+                  inode_t *inode, off_t off, size_t size)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0,};</div><div class='del'>-        struct gf_flock flock = {0, };</div><div class='del'>-</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='del'>-        flock.l_start = off;</div><div class='del'>-        flock.l_len = size;</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='ctx'> </div><div class='del'>-        FOP_ONLIST (subvols, locked_on, numsubvols, replies, output, frame, inodelk,</div><div class='del'>-                    dom, &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+    FOP_ONLIST(subvols, locked_on, numsubvols, replies, output, frame, inodelk,</div><div class='add'>+               dom, &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_tryinodelk (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                    default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='del'>-                    call_frame_t *frame, xlator_t *this, char *dom,</div><div class='del'>-                    inode_t *inode, off_t off, size_t size)</div><div class='add'>+cluster_tryinodelk(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                   default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='add'>+                   call_frame_t *frame, xlator_t *this, char *dom,</div><div class='add'>+                   inode_t *inode, off_t off, size_t size)</div><div class='ctx'> {</div><div class='del'>-        struct gf_flock flock = {0, };</div><div class='del'>-        loc_t loc = {0};</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t loc = {0};</div><div class='ctx'> </div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-        flock.l_start = off;</div><div class='del'>-        flock.l_len = size;</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, locked_on, frame, inodelk, dom,</div><div class='del'>-                    &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, locked_on, frame, inodelk, dom,</div><div class='add'>+               &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, locked_on);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_inodelk (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                 default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, char *dom,</div><div class='del'>-                 inode_t *inode, off_t off, size_t size)</div><div class='del'>-{</div><div class='del'>-        struct gf_flock flock = {0, };</div><div class='del'>-        int i = 0;</div><div class='del'>-        loc_t loc = {0};</div><div class='del'>-        unsigned char *output = NULL;</div><div class='del'>-</div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-        flock.l_start = off;</div><div class='del'>-        flock.l_len = size;</div><div class='del'>-</div><div class='del'>-        output = alloca(numsubvols);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, locked_on, frame,</div><div class='del'>-                    inodelk, dom, &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++) {</div><div class='del'>-                if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='del'>-                        cluster_fop_success_fill (replies, numsubvols,</div><div class='del'>-                                                  locked_on);</div><div class='del'>-                        cluster_uninodelk (subvols, locked_on, numsubvols,</div><div class='del'>-                                           replies, output, frame, this, dom, inode, off, size);</div><div class='del'>-</div><div class='del'>-                        FOP_SEQ (subvols, on, numsubvols, replies, locked_on,</div><div class='del'>-                                 frame, inodelk, dom, &amp;loc, F_SETLKW, &amp;flock,</div><div class='del'>-                                 NULL);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+cluster_inodelk(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, char *dom, inode_t *inode,</div><div class='add'>+                off_t off, size_t size)</div><div class='add'>+{</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='add'>+</div><div class='add'>+    output = alloca(numsubvols);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, locked_on, frame, inodelk, dom,</div><div class='add'>+               &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++) {</div><div class='add'>+        if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='add'>+            cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='add'>+            cluster_uninodelk(subvols, locked_on, numsubvols, replies, output,</div><div class='add'>+                              frame, this, dom, inode, off, size);</div><div class='add'>+</div><div class='add'>+            FOP_SEQ(subvols, on, numsubvols, replies, locked_on, frame, inodelk,</div><div class='add'>+                    dom, &amp;loc, F_SETLKW, &amp;flock, NULL);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, locked_on);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cluster_unentrylk (xlator_t **subvols, unsigned char *locked_on, int numsubvols,</div><div class='del'>-                   default_args_cbk_t *replies, unsigned char *output,</div><div class='del'>-                   call_frame_t *frame, xlator_t *this, char *dom,</div><div class='del'>-                   inode_t *inode, const char *name)</div><div class='add'>+cluster_unentrylk(xlator_t **subvols, unsigned char *locked_on, int numsubvols,</div><div class='add'>+                  default_args_cbk_t *replies, unsigned char *output,</div><div class='add'>+                  call_frame_t *frame, xlator_t *this, char *dom,</div><div class='add'>+                  inode_t *inode, const char *name)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0,};</div><div class='del'>-</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        FOP_ONLIST (subvols, locked_on, numsubvols, replies, output, frame,</div><div class='del'>-                    entrylk, dom, &amp;loc, name, ENTRYLK_UNLOCK, ENTRYLK_WRLCK,</div><div class='del'>-                    NULL);</div><div class='add'>+    FOP_ONLIST(subvols, locked_on, numsubvols, replies, output, frame, entrylk,</div><div class='add'>+               dom, &amp;loc, name, ENTRYLK_UNLOCK, ENTRYLK_WRLCK, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, output);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, output);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_tryentrylk (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                    default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='del'>-                    call_frame_t *frame, xlator_t *this, char *dom,</div><div class='del'>-                    inode_t *inode, const char *name)</div><div class='add'>+cluster_tryentrylk(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                   default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='add'>+                   call_frame_t *frame, xlator_t *this, char *dom,</div><div class='add'>+                   inode_t *inode, const char *name)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0};</div><div class='add'>+    loc_t loc = {0};</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, locked_on, frame,</div><div class='del'>-                    entrylk, dom, &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK,</div><div class='del'>-                    NULL);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, locked_on, frame, entrylk, dom,</div><div class='add'>+               &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, locked_on);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_entrylk (xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='del'>-                 default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='del'>-                 call_frame_t *frame, xlator_t *this, char *dom,</div><div class='del'>-                 inode_t *inode, const char *name)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        loc_t loc = {0};</div><div class='del'>-        unsigned char *output = NULL;</div><div class='del'>-</div><div class='del'>-        output = alloca(numsubvols);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, locked_on, frame,</div><div class='del'>-                    entrylk, dom, &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK,</div><div class='del'>-                    NULL);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++) {</div><div class='del'>-                if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='del'>-                        cluster_fop_success_fill (replies, numsubvols,</div><div class='del'>-                                                  locked_on);</div><div class='del'>-                        cluster_unentrylk (subvols, locked_on, numsubvols,</div><div class='del'>-                                           replies, output, frame, this, dom,</div><div class='del'>-                                           inode, name);</div><div class='del'>-                        FOP_SEQ (subvols, on, numsubvols, replies,</div><div class='del'>-                                 locked_on, frame, entrylk, dom, &amp;loc, name,</div><div class='del'>-                                 ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+cluster_entrylk(xlator_t **subvols, unsigned char *on, int numsubvols,</div><div class='add'>+                default_args_cbk_t *replies, unsigned char *locked_on,</div><div class='add'>+                call_frame_t *frame, xlator_t *this, char *dom, inode_t *inode,</div><div class='add'>+                const char *name)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+</div><div class='add'>+    output = alloca(numsubvols);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, locked_on, frame, entrylk, dom,</div><div class='add'>+               &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++) {</div><div class='add'>+        if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='add'>+            cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='add'>+            cluster_unentrylk(subvols, locked_on, numsubvols, replies, output,</div><div class='add'>+                              frame, this, dom, inode, name);</div><div class='add'>+            FOP_SEQ(subvols, on, numsubvols, replies, locked_on, frame, entrylk,</div><div class='add'>+                    dom, &amp;loc, name, ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, locked_on);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_tiebreaker_inodelk (xlator_t **subvols, unsigned char *on,</div><div class='del'>-                            int numsubvols, default_args_cbk_t *replies,</div><div class='del'>-                            unsigned char *locked_on, call_frame_t *frame,</div><div class='del'>-                            xlator_t *this, char *dom, inode_t *inode,</div><div class='del'>-                            off_t off, size_t size)</div><div class='del'>-{</div><div class='del'>-        struct gf_flock flock = {0, };</div><div class='del'>-        int i = 0;</div><div class='del'>-        int num_success = 0;</div><div class='del'>-        loc_t loc = {0};</div><div class='del'>-        unsigned char *output = NULL;</div><div class='del'>-</div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-        flock.l_start = off;</div><div class='del'>-        flock.l_len = size;</div><div class='del'>-</div><div class='del'>-        output = alloca(numsubvols);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, locked_on, frame,</div><div class='del'>-                    inodelk, dom, &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++) {</div><div class='del'>-                if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='del'>-                        num_success++;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* TODO: If earlier subvols fail with an error other</div><div class='del'>-                 * than EAGAIN, we could still have 2 clients competing</div><div class='del'>-                 * for the lock*/</div><div class='del'>-                if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='del'>-                        cluster_fop_success_fill (replies, numsubvols,</div><div class='del'>-                                                  locked_on);</div><div class='del'>-                        cluster_uninodelk (subvols, locked_on, numsubvols,</div><div class='del'>-                                           replies, output, frame, this, dom,</div><div class='del'>-                                           inode, off, size);</div><div class='del'>-</div><div class='del'>-                        if (num_success) {</div><div class='del'>-                                FOP_SEQ (subvols, on, numsubvols, replies,</div><div class='del'>-                                         locked_on, frame, inodelk, dom, &amp;loc,</div><div class='del'>-                                         F_SETLKW, &amp;flock, NULL);</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+cluster_tiebreaker_inodelk(xlator_t **subvols, unsigned char *on,</div><div class='add'>+                           int numsubvols, default_args_cbk_t *replies,</div><div class='add'>+                           unsigned char *locked_on, call_frame_t *frame,</div><div class='add'>+                           xlator_t *this, char *dom, inode_t *inode, off_t off,</div><div class='add'>+                           size_t size)</div><div class='add'>+{</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int num_success = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='add'>+</div><div class='add'>+    output = alloca(numsubvols);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, locked_on, frame, inodelk, dom,</div><div class='add'>+               &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++) {</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='add'>+            num_success++;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, locked_on);</div><div class='add'>+        /* TODO: If earlier subvols fail with an error other</div><div class='add'>+         * than EAGAIN, we could still have 2 clients competing</div><div class='add'>+         * for the lock*/</div><div class='add'>+        if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='add'>+            cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='add'>+            cluster_uninodelk(subvols, locked_on, numsubvols, replies, output,</div><div class='add'>+                              frame, this, dom, inode, off, size);</div><div class='add'>+</div><div class='add'>+            if (num_success) {</div><div class='add'>+                FOP_SEQ(subvols, on, numsubvols, replies, locked_on, frame,</div><div class='add'>+                        inodelk, dom, &amp;loc, F_SETLKW, &amp;flock, NULL);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cluster_tiebreaker_entrylk (xlator_t **subvols, unsigned char *on,</div><div class='del'>-                            int numsubvols, default_args_cbk_t *replies,</div><div class='del'>-                            unsigned char *locked_on, call_frame_t *frame,</div><div class='del'>-                            xlator_t *this, char *dom, inode_t *inode,</div><div class='del'>-                            const char *name)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        loc_t loc = {0};</div><div class='del'>-        unsigned char *output = NULL;</div><div class='del'>-        int num_success = 0;</div><div class='del'>-</div><div class='del'>-        output = alloca(numsubvols);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        FOP_ONLIST (subvols, on, numsubvols, replies, locked_on, frame,</div><div class='del'>-                    entrylk, dom, &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK,</div><div class='del'>-                    NULL);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++) {</div><div class='del'>-                if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='del'>-                        num_success++;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='del'>-                        cluster_fop_success_fill (replies, numsubvols,</div><div class='del'>-                                                  locked_on);</div><div class='del'>-                        cluster_unentrylk (subvols, locked_on, numsubvols,</div><div class='del'>-                                           replies, output, frame, this, dom,</div><div class='del'>-                                           inode, name);</div><div class='del'>-                        if (num_success) {</div><div class='del'>-                                FOP_SEQ (subvols, on, numsubvols, replies,</div><div class='del'>-                                         locked_on, frame, entrylk, dom, &amp;loc,</div><div class='del'>-                                         name, ENTRYLK_LOCK, ENTRYLK_WRLCK,</div><div class='del'>-                                         NULL);</div><div class='del'>-                        } else {</div><div class='del'>-                                memset (locked_on, 0, numsubvols);</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+cluster_tiebreaker_entrylk(xlator_t **subvols, unsigned char *on,</div><div class='add'>+                           int numsubvols, default_args_cbk_t *replies,</div><div class='add'>+                           unsigned char *locked_on, call_frame_t *frame,</div><div class='add'>+                           xlator_t *this, char *dom, inode_t *inode,</div><div class='add'>+                           const char *name)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    int num_success = 0;</div><div class='add'>+</div><div class='add'>+    output = alloca(numsubvols);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    FOP_ONLIST(subvols, on, numsubvols, replies, locked_on, frame, entrylk, dom,</div><div class='add'>+               &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++) {</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='add'>+            num_success++;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='add'>+            cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='add'>+            cluster_unentrylk(subvols, locked_on, numsubvols, replies, output,</div><div class='add'>+                              frame, this, dom, inode, name);</div><div class='add'>+            if (num_success) {</div><div class='add'>+                FOP_SEQ(subvols, on, numsubvols, replies, locked_on, frame,</div><div class='add'>+                        entrylk, dom, &amp;loc, name, ENTRYLK_LOCK, ENTRYLK_WRLCK,</div><div class='add'>+                        NULL);</div><div class='add'>+            } else {</div><div class='add'>+                memset(locked_on, 0, numsubvols);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return cluster_fop_success_fill (replies, numsubvols, locked_on);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return cluster_fop_success_fill(replies, numsubvols, locked_on);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c<br/>index 748772bb21b..aae9858fe22 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/common-utils.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/common-utils.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/common-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/common-utils.c</a></div><div class='hunk'>@@ -63,36 +63,41 @@</div><div class='ctx'> #define AI_ADDRCONFIG 0</div><div class='ctx'> #endif /* AI_ADDRCONFIG */</div><div class='ctx'> </div><div class='del'>-char *vol_type_str[] = {"Distribute",</div><div class='del'>-                        "Stripe",</div><div class='del'>-                        "Replicate",</div><div class='del'>-                        "Striped-Replicate",</div><div class='del'>-                        "Disperse",</div><div class='del'>-                        "Tier",</div><div class='del'>-                        "Distributed-Stripe",</div><div class='del'>-                        "Distributed-Replicate",</div><div class='del'>-                        "Distributed-Striped-Replicate",</div><div class='del'>-                        "Distributed-Disperse",</div><div class='del'>-                       };</div><div class='add'>+char *vol_type_str[] = {</div><div class='add'>+    "Distribute",</div><div class='add'>+    "Stripe",</div><div class='add'>+    "Replicate",</div><div class='add'>+    "Striped-Replicate",</div><div class='add'>+    "Disperse",</div><div class='add'>+    "Tier",</div><div class='add'>+    "Distributed-Stripe",</div><div class='add'>+    "Distributed-Replicate",</div><div class='add'>+    "Distributed-Striped-Replicate",</div><div class='add'>+    "Distributed-Disperse",</div><div class='add'>+};</div><div class='ctx'> </div><div class='ctx'> typedef int32_t (*rw_op_t)(int32_t fd, char *buf, int32_t size);</div><div class='ctx'> typedef int32_t (*rwv_op_t)(int32_t fd, const struct iovec *buf, int32_t size);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_xxh64_wrapper(const unsigned char *data, size_t const len, unsigned long long const seed,</div><div class='del'>-                 char *xxh64)</div><div class='add'>+gf_xxh64_wrapper(const unsigned char *data, size_t const len,</div><div class='add'>+                 unsigned long long const seed, char *xxh64)</div><div class='ctx'> {</div><div class='del'>-        unsigned short         i      = 0;</div><div class='del'>-        const unsigned short   lim    = GF_XXH64_DIGEST_LENGTH*2+1;</div><div class='del'>-        XXH64_hash_t           hash   = 0;</div><div class='del'>-        XXH64_canonical_t      c_hash = {{0,},};</div><div class='del'>-        const uint8_t          *p     = (const uint8_t *) &amp;c_hash;</div><div class='add'>+    unsigned short i = 0;</div><div class='add'>+    const unsigned short lim = GF_XXH64_DIGEST_LENGTH * 2 + 1;</div><div class='add'>+    XXH64_hash_t hash = 0;</div><div class='add'>+    XXH64_canonical_t c_hash = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    const uint8_t *p = (const uint8_t *)&amp;c_hash;</div><div class='ctx'> </div><div class='del'>-        hash = XXH64(data, len, seed);</div><div class='del'>-        XXH64_canonicalFromHash(&amp;c_hash, hash);</div><div class='add'>+    hash = XXH64(data, len, seed);</div><div class='add'>+    XXH64_canonicalFromHash(&amp;c_hash, hash);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_XXH64_DIGEST_LENGTH; i++)</div><div class='del'>-                snprintf(xxh64 + i * 2, lim-i*2, "%02x", p[i]);</div><div class='add'>+    for (i = 0; i &lt; GF_XXH64_DIGEST_LENGTH; i++)</div><div class='add'>+        snprintf(xxh64 + i * 2, lim - i * 2, "%02x", p[i]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -133,34 +138,35 @@ gf_xxh64_wrapper(const unsigned char *data, size_t const len, unsigned long long</div><div class='ctx'>  *      tmp[15] = (hash_1) &amp; 0xff;</div><div class='ctx'>  **/</div><div class='ctx'> static int</div><div class='del'>-gf_gfid_from_xxh64 (xlator_t *this, uuid_t gfid, XXH64_hash_t hash,</div><div class='del'>-                    unsigned short index)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int i   = -1;</div><div class='del'>-</div><div class='del'>-        if ((index != 0) &amp;&amp; (index != 8)) {</div><div class='del'>-                gf_msg_callingfn ("gfid-from-xxh64", GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INDEX_NOT_FOUND,</div><div class='del'>-                                  "index can only be either 0 or 8, as this"</div><div class='del'>-                                  "function's purpose is to encode a 8 byte "</div><div class='del'>-                                  "hash inside the gfid (index: %d)", index);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; sizeof (hash); i++) {</div><div class='del'>-                /*</div><div class='del'>-                 * As of now the below statement is equivalent of this.</div><div class='del'>-                 * gfid[index+i] = (hash &gt;&gt; (64 - (8 * (i+1)))) &amp; 0xff;</div><div class='del'>-                 */</div><div class='del'>-                gfid[index+i] = (hash &gt;&gt; ((sizeof (hash) * 8) - (8 * (i+1))))</div><div class='del'>-                                &amp; (0xff);</div><div class='del'>-        }</div><div class='add'>+gf_gfid_from_xxh64(xlator_t *this, uuid_t gfid, XXH64_hash_t hash,</div><div class='add'>+                   unsigned short index)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+</div><div class='add'>+    if ((index != 0) &amp;&amp; (index != 8)) {</div><div class='add'>+        gf_msg_callingfn("gfid-from-xxh64", GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INDEX_NOT_FOUND,</div><div class='add'>+                         "index can only be either 0 or 8, as this"</div><div class='add'>+                         "function's purpose is to encode a 8 byte "</div><div class='add'>+                         "hash inside the gfid (index: %d)",</div><div class='add'>+                         index);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; sizeof(hash); i++) {</div><div class='add'>+        /*</div><div class='add'>+         * As of now the below statement is equivalent of this.</div><div class='add'>+         * gfid[index+i] = (hash &gt;&gt; (64 - (8 * (i+1)))) &amp; 0xff;</div><div class='add'>+         */</div><div class='add'>+        gfid[index + i] = (hash &gt;&gt; ((sizeof(hash) * 8) - (8 * (i + 1)))) &amp;</div><div class='add'>+                          (0xff);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -177,22 +183,26 @@ out:</div><div class='ctx'>  *   of the hash).</div><div class='ctx'>  **/</div><div class='ctx'> XXH64_hash_t</div><div class='del'>-gf_xxh64_hash_wrapper (const unsigned char *data, size_t const len,</div><div class='del'>-                       unsigned long long const seed, char *xxh64)</div><div class='add'>+gf_xxh64_hash_wrapper(const unsigned char *data, size_t const len,</div><div class='add'>+                      unsigned long long const seed, char *xxh64)</div><div class='ctx'> {</div><div class='del'>-        unsigned short         i      = 0;</div><div class='del'>-        const unsigned short   lim    = GF_XXH64_DIGEST_LENGTH*2+1;</div><div class='del'>-        XXH64_hash_t           hash   = 0;</div><div class='del'>-        XXH64_canonical_t      c_hash = {{0,},};</div><div class='del'>-        const uint8_t          *p     = (const uint8_t *)&amp;c_hash;</div><div class='add'>+    unsigned short i = 0;</div><div class='add'>+    const unsigned short lim = GF_XXH64_DIGEST_LENGTH * 2 + 1;</div><div class='add'>+    XXH64_hash_t hash = 0;</div><div class='add'>+    XXH64_canonical_t c_hash = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    const uint8_t *p = (const uint8_t *)&amp;c_hash;</div><div class='ctx'> </div><div class='del'>-        hash = XXH64(data, len, seed);</div><div class='del'>-        XXH64_canonicalFromHash (&amp;c_hash, hash);</div><div class='add'>+    hash = XXH64(data, len, seed);</div><div class='add'>+    XXH64_canonicalFromHash(&amp;c_hash, hash);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_XXH64_DIGEST_LENGTH; i++)</div><div class='del'>-                snprintf (xxh64 + i * 2, lim-i*2, "%02x", p[i]);</div><div class='add'>+    for (i = 0; i &lt; GF_XXH64_DIGEST_LENGTH; i++)</div><div class='add'>+        snprintf(xxh64 + i * 2, lim - i * 2, "%02x", p[i]);</div><div class='ctx'> </div><div class='del'>-        return hash;</div><div class='add'>+    return hash;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -220,152 +230,165 @@ gf_xxh64_hash_wrapper (const unsigned char *data, size_t const len,</div><div class='ctx'>  * one 16 byte entity.</div><div class='ctx'>  **/</div><div class='ctx'> int</div><div class='del'>-gf_gfid_generate_from_xxh64 (uuid_t gfid, char *key)</div><div class='del'>-{</div><div class='del'>-        char xxh64_1[GF_XXH64_DIGEST_LENGTH*2+1] = {0, };</div><div class='del'>-        char xxh64_2[GF_XXH64_DIGEST_LENGTH*2+1] = {0, };</div><div class='del'>-        XXH64_hash_t hash_1                      = 0;</div><div class='del'>-        XXH64_hash_t hash_2                      = 0;</div><div class='del'>-        int          ret                         = -1;</div><div class='del'>-        xlator_t    *this                        = THIS;</div><div class='del'>-</div><div class='del'>-        hash_1 = gf_xxh64_hash_wrapper((unsigned char *)key,</div><div class='del'>-                                       strlen (key), GF_XXHSUM64_DEFAULT_SEED,</div><div class='del'>-                                       xxh64_1);</div><div class='del'>-</div><div class='del'>-        hash_2 = gf_xxh64_hash_wrapper((unsigned char *)xxh64_1,</div><div class='del'>-                                       strlen (xxh64_1),</div><div class='del'>-                                       GF_XXHSUM64_DEFAULT_SEED, xxh64_2);</div><div class='del'>-</div><div class='del'>-        /* hash_2 is saved in 1st 8 elements of uuid_t char array */</div><div class='del'>-        if (gf_gfid_from_xxh64 (this, gfid, hash_2, 0)) {</div><div class='del'>-                gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_XXH64_TO_GFID_FAILED,</div><div class='del'>-                                  "failed to encode the hash %llx into the 1st"</div><div class='del'>-                                  "half of gfid", hash_2);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* hash_1 is saved in the remaining 8 elements of uuid_t */</div><div class='del'>-        if (gf_gfid_from_xxh64 (this, gfid, hash_1, 8)) {</div><div class='del'>-                gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_XXH64_TO_GFID_FAILED,</div><div class='del'>-                                  "failed to encode the hash %llx into the 2nd"</div><div class='del'>-                                  "half of gfid", hash_1);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "gfid generated is %s (hash1: %llx) "</div><div class='del'>-                      "hash2: %llx, xxh64_1: %s xxh64_2: %s", uuid_utoa (gfid),</div><div class='del'>-                      hash_1, hash_2, xxh64_1, xxh64_2);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+gf_gfid_generate_from_xxh64(uuid_t gfid, char *key)</div><div class='add'>+{</div><div class='add'>+    char xxh64_1[GF_XXH64_DIGEST_LENGTH * 2 + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char xxh64_2[GF_XXH64_DIGEST_LENGTH * 2 + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    XXH64_hash_t hash_1 = 0;</div><div class='add'>+    XXH64_hash_t hash_2 = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+</div><div class='add'>+    hash_1 = gf_xxh64_hash_wrapper((unsigned char *)key, strlen(key),</div><div class='add'>+                                   GF_XXHSUM64_DEFAULT_SEED, xxh64_1);</div><div class='add'>+</div><div class='add'>+    hash_2 = gf_xxh64_hash_wrapper((unsigned char *)xxh64_1, strlen(xxh64_1),</div><div class='add'>+                                   GF_XXHSUM64_DEFAULT_SEED, xxh64_2);</div><div class='add'>+</div><div class='add'>+    /* hash_2 is saved in 1st 8 elements of uuid_t char array */</div><div class='add'>+    if (gf_gfid_from_xxh64(this, gfid, hash_2, 0)) {</div><div class='add'>+        gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_XXH64_TO_GFID_FAILED,</div><div class='add'>+                         "failed to encode the hash %llx into the 1st"</div><div class='add'>+                         "half of gfid",</div><div class='add'>+                         hash_2);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* hash_1 is saved in the remaining 8 elements of uuid_t */</div><div class='add'>+    if (gf_gfid_from_xxh64(this, gfid, hash_1, 8)) {</div><div class='add'>+        gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_XXH64_TO_GFID_FAILED,</div><div class='add'>+                         "failed to encode the hash %llx into the 2nd"</div><div class='add'>+                         "half of gfid",</div><div class='add'>+                         hash_1);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "gfid generated is %s (hash1: %llx) "</div><div class='add'>+                 "hash2: %llx, xxh64_1: %s xxh64_2: %s",</div><div class='add'>+                 uuid_utoa(gfid), hash_1, hash_2, xxh64_1, xxh64_2);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* works similar to mkdir(1) -p.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-mkdir_p (char *path, mode_t mode, gf_boolean_t allow_symlinks)</div><div class='del'>-{</div><div class='del'>-        int             i               = 0;</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        char            dir[PATH_MAX]   = {0,};</div><div class='del'>-        struct stat     stbuf           = {0,};</div><div class='del'>-</div><div class='del'>-        const int path_len = min(strlen(path), PATH_MAX -1);</div><div class='del'>-</div><div class='del'>-        snprintf(dir, path_len + 1, "%s", path);</div><div class='del'>-</div><div class='del'>-        i = (dir[0] == '/')? 1: 0;</div><div class='del'>-        do {</div><div class='del'>-                if (path[i] != '/' &amp;&amp; path[i] != '\0')</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                dir[i] = '\0';</div><div class='del'>-                ret = sys_mkdir (dir, mode);</div><div class='del'>-                if (ret &amp;&amp; errno != EEXIST) {</div><div class='del'>-                        gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='del'>-                                "Failed due to reason");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret &amp;&amp; errno == EEXIST &amp;&amp; !allow_symlinks) {</div><div class='del'>-                        ret = sys_lstat (dir, &amp;stbuf);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        if (S_ISLNK (stbuf.st_mode)) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_DIR_IS_SYMLINK, "%s is a "</div><div class='del'>-                                        "symlink", dir);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                dir[i] = '/';</div><div class='del'>-</div><div class='del'>-        } while (path[i++] != '\0');</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (dir, &amp;stbuf);</div><div class='del'>-        if (ret || !S_ISDIR (stbuf.st_mode)) {</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        errno = 0;</div><div class='add'>+mkdir_p(char *path, mode_t mode, gf_boolean_t allow_symlinks)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    const int path_len = min(strlen(path), PATH_MAX - 1);</div><div class='add'>+</div><div class='add'>+    snprintf(dir, path_len + 1, "%s", path);</div><div class='add'>+</div><div class='add'>+    i = (dir[0] == '/') ? 1 : 0;</div><div class='add'>+    do {</div><div class='add'>+        if (path[i] != '/' &amp;&amp; path[i] != '\0')</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        dir[i] = '\0';</div><div class='add'>+        ret = sys_mkdir(dir, mode);</div><div class='add'>+        if (ret &amp;&amp; errno != EEXIST) {</div><div class='add'>+            gf_msg("", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+                   "Failed due to reason");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (ret &amp;&amp; errno == EEXIST &amp;&amp; !allow_symlinks) {</div><div class='add'>+            ret = sys_lstat(dir, &amp;stbuf);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            if (S_ISLNK(stbuf.st_mode)) {</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED, "Failed"</div><div class='del'>-                        " to create directory, possibly some of the components"</div><div class='del'>-                        " were not directories");</div><div class='add'>+                gf_msg("", GF_LOG_ERROR, 0, LG_MSG_DIR_IS_SYMLINK,</div><div class='add'>+                       "%s is a "</div><div class='add'>+                       "symlink",</div><div class='add'>+                       dir);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        dir[i] = '/';</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    } while (path[i++] != '\0');</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(dir, &amp;stbuf);</div><div class='add'>+    if (ret || !S_ISDIR(stbuf.st_mode)) {</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            errno = 0;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+               "Failed"</div><div class='add'>+               " to create directory, possibly some of the components"</div><div class='add'>+               " were not directories");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_lstat_dir (const char *path, struct stat *stbuf_in)</div><div class='add'>+gf_lstat_dir(const char *path, struct stat *stbuf_in)</div><div class='ctx'> {</div><div class='del'>-        int ret           = -1;</div><div class='del'>-        struct stat stbuf = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (path == NULL) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (path == NULL) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = sys_lstat (path, &amp;stbuf);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = sys_lstat(path, &amp;stbuf);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!S_ISDIR (stbuf.st_mode)) {</div><div class='del'>-                errno = ENOTDIR;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (!S_ISDIR(stbuf.st_mode)) {</div><div class='add'>+        errno = ENOTDIR;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (!ret &amp;&amp; stbuf_in)</div><div class='del'>-                *stbuf_in = stbuf;</div><div class='add'>+    if (!ret &amp;&amp; stbuf_in)</div><div class='add'>+        *stbuf_in = stbuf;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-log_base2 (unsigned long x)</div><div class='add'>+log_base2(unsigned long x)</div><div class='ctx'> {</div><div class='del'>-        int val = 0;</div><div class='add'>+    int val = 0;</div><div class='ctx'> </div><div class='del'>-        while (x &gt; 1) {</div><div class='del'>-                x /= 2;</div><div class='del'>-                val++;</div><div class='del'>-        }</div><div class='add'>+    while (x &gt; 1) {</div><div class='add'>+        x /= 2;</div><div class='add'>+        val++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return val;</div><div class='add'>+    return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -377,22 +400,23 @@ log_base2 (unsigned long x)</div><div class='ctx'>  *          failure: NULL</div><div class='ctx'>  */</div><div class='ctx'> char *</div><div class='del'>-gf_rev_dns_lookup (const char *ip)</div><div class='add'>+gf_rev_dns_lookup(const char *ip)</div><div class='ctx'> {</div><div class='del'>-        char               *fqdn = NULL;</div><div class='del'>-        int                ret  = 0;</div><div class='add'>+    char *fqdn = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("resolver", ip, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("resolver", ip, out);</div><div class='ctx'> </div><div class='del'>-        /* Get the FQDN */</div><div class='del'>-        ret =  gf_get_hostname_from_ip ((char *)ip, &amp;fqdn);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg ("resolver", GF_LOG_INFO, errno,</div><div class='del'>-                        LG_MSG_RESOLVE_HOSTNAME_FAILED, "could not resolve "</div><div class='del'>-                        "hostname for %s", ip);</div><div class='del'>-        }</div><div class='add'>+    /* Get the FQDN */</div><div class='add'>+    ret = gf_get_hostname_from_ip((char *)ip, &amp;fqdn);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg("resolver", GF_LOG_INFO, errno, LG_MSG_RESOLVE_HOSTNAME_FAILED,</div><div class='add'>+               "could not resolve "</div><div class='add'>+               "hostname for %s",</div><div class='add'>+               ip);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-       return fqdn;</div><div class='add'>+    return fqdn;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -402,144 +426,145 @@ out:</div><div class='ctx'>  * @return: The parent path if found, NULL otherwise</div><div class='ctx'>  */</div><div class='ctx'> char *</div><div class='del'>-gf_resolve_path_parent (const char *path)</div><div class='add'>+gf_resolve_path_parent(const char *path)</div><div class='ctx'> {</div><div class='del'>-        char    *parent = NULL;</div><div class='del'>-        char    *tmp    = NULL;</div><div class='del'>-        char    *pathc  = NULL;</div><div class='add'>+    char *parent = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *pathc = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, path, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, path, out);</div><div class='ctx'> </div><div class='del'>-        if (strlen (path) &lt;= 0) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                                  LG_MSG_INVALID_STRING,</div><div class='del'>-                                  "invalid string for 'path'");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (strlen(path) &lt;= 0) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_DEBUG, 0, LG_MSG_INVALID_STRING,</div><div class='add'>+                         "invalid string for 'path'");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* dup the parameter, we don't want to modify it */</div><div class='del'>-        pathc = strdupa (path);</div><div class='del'>-        if (!pathc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* dup the parameter, we don't want to modify it */</div><div class='add'>+    pathc = strdupa(path);</div><div class='add'>+    if (!pathc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Get the parent directory */</div><div class='del'>-        tmp = dirname (pathc);</div><div class='del'>-        if (strcmp (tmp, "/") == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Get the parent directory */</div><div class='add'>+    tmp = dirname(pathc);</div><div class='add'>+    if (strcmp(tmp, "/") == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        parent = gf_strdup (tmp);</div><div class='add'>+    parent = gf_strdup(tmp);</div><div class='ctx'> out:</div><div class='del'>-        return parent;</div><div class='add'>+    return parent;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_resolve_ip6 (const char *hostname,</div><div class='del'>-                uint16_t port,</div><div class='del'>-                int family,</div><div class='del'>-                void **dnscache,</div><div class='del'>-                struct addrinfo **addr_info)</div><div class='del'>-{</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        struct addrinfo hints;</div><div class='del'>-        struct dnscache6 *cache = NULL;</div><div class='del'>-        char service[NI_MAXSERV], host[NI_MAXHOST];</div><div class='del'>-</div><div class='del'>-        if (!hostname) {</div><div class='del'>-                gf_msg_callingfn ("resolver", GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_HOSTNAME_NULL, "hostname is NULL");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+gf_resolve_ip6(const char *hostname, uint16_t port, int family, void **dnscache,</div><div class='add'>+               struct addrinfo **addr_info)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct addrinfo hints;</div><div class='add'>+    struct dnscache6 *cache = NULL;</div><div class='add'>+    char service[NI_MAXSERV], host[NI_MAXHOST];</div><div class='ctx'> </div><div class='del'>-        if (!*dnscache) {</div><div class='del'>-                *dnscache = GF_CALLOC (1, sizeof (struct dnscache6),</div><div class='del'>-                                       gf_common_mt_dnscache6);</div><div class='del'>-                if (!*dnscache)</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!hostname) {</div><div class='add'>+        gf_msg_callingfn("resolver", GF_LOG_WARNING, 0, LG_MSG_HOSTNAME_NULL,</div><div class='add'>+                         "hostname is NULL");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!*dnscache) {</div><div class='add'>+        *dnscache = GF_CALLOC(1, sizeof(struct dnscache6),</div><div class='add'>+                              gf_common_mt_dnscache6);</div><div class='add'>+        if (!*dnscache)</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cache = *dnscache;</div><div class='add'>+    if (cache-&gt;first &amp;&amp; !cache-&gt;next) {</div><div class='add'>+        freeaddrinfo(cache-&gt;first);</div><div class='add'>+        cache-&gt;first = cache-&gt;next = NULL;</div><div class='add'>+        gf_msg_trace("resolver", 0, "flushing DNS cache");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cache = *dnscache;</div><div class='del'>-        if (cache-&gt;first &amp;&amp; !cache-&gt;next) {</div><div class='del'>-                freeaddrinfo(cache-&gt;first);</div><div class='del'>-                cache-&gt;first = cache-&gt;next = NULL;</div><div class='del'>-                gf_msg_trace ("resolver", 0, "flushing DNS cache");</div><div class='del'>-        }</div><div class='add'>+    if (!cache-&gt;first) {</div><div class='add'>+        char *port_str = NULL;</div><div class='add'>+        gf_msg_trace("resolver", 0,</div><div class='add'>+                     "DNS cache not present, freshly "</div><div class='add'>+                     "probing hostname: %s",</div><div class='add'>+                     hostname);</div><div class='add'>+</div><div class='add'>+        memset(&amp;hints, 0, sizeof(hints));</div><div class='add'>+        hints.ai_family = family;</div><div class='add'>+        hints.ai_socktype = SOCK_STREAM;</div><div class='ctx'> </div><div class='del'>-        if (!cache-&gt;first) {</div><div class='del'>-                char *port_str = NULL;</div><div class='del'>-                gf_msg_trace ("resolver", 0, "DNS cache not present, freshly "</div><div class='del'>-                              "probing hostname: %s", hostname);</div><div class='del'>-</div><div class='del'>-                memset(&amp;hints, 0, sizeof(hints));</div><div class='del'>-                hints.ai_family   = family;</div><div class='del'>-                hints.ai_socktype = SOCK_STREAM;</div><div class='del'>-</div><div class='del'>-                ret = gf_asprintf (&amp;port_str, "%d", port);</div><div class='del'>-                if (-1 == ret) {</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                if ((ret = getaddrinfo(hostname, port_str, &amp;hints, &amp;cache-&gt;first)) != 0) {</div><div class='del'>-                        gf_msg ("resolver", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_GETADDRINFO_FAILED, "getaddrinfo failed"</div><div class='del'>-                                " (%s)", gai_strerror (ret));</div><div class='del'>-</div><div class='del'>-                        GF_FREE (*dnscache);</div><div class='del'>-                        *dnscache = NULL;</div><div class='del'>-                        GF_FREE (port_str);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (port_str);</div><div class='del'>-</div><div class='del'>-                cache-&gt;next = cache-&gt;first;</div><div class='add'>+        ret = gf_asprintf(&amp;port_str, "%d", port);</div><div class='add'>+        if (-1 == ret) {</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        if ((ret = getaddrinfo(hostname, port_str, &amp;hints, &amp;cache-&gt;first)) !=</div><div class='add'>+            0) {</div><div class='add'>+            gf_msg("resolver", GF_LOG_ERROR, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='add'>+                   "getaddrinfo failed"</div><div class='add'>+                   " (%s)",</div><div class='add'>+                   gai_strerror(ret));</div><div class='ctx'> </div><div class='del'>-        if (cache-&gt;next) {</div><div class='del'>-                ret = getnameinfo((struct sockaddr *)cache-&gt;next-&gt;ai_addr,</div><div class='del'>-                                  cache-&gt;next-&gt;ai_addrlen,</div><div class='del'>-                                  host, sizeof (host),</div><div class='del'>-                                  service, sizeof (service),</div><div class='del'>-                                  NI_NUMERICHOST);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg ("resolver", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_GETNAMEINFO_FAILED, "getnameinfo failed"</div><div class='del'>-                                " (%s)", gai_strerror (ret));</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg_debug ("resolver", 0, "returning ip-%s (port-%s) for "</div><div class='del'>-                              "hostname: %s and port: %d", host, service,</div><div class='del'>-                              hostname, port);</div><div class='del'>-</div><div class='del'>-                *addr_info = cache-&gt;next;</div><div class='add'>+            GF_FREE(*dnscache);</div><div class='add'>+            *dnscache = NULL;</div><div class='add'>+            GF_FREE(port_str);</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(port_str);</div><div class='add'>+</div><div class='add'>+        cache-&gt;next = cache-&gt;first;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cache-&gt;next)</div><div class='del'>-                cache-&gt;next = cache-&gt;next-&gt;ai_next;</div><div class='del'>-        if (cache-&gt;next) {</div><div class='del'>-                ret = getnameinfo((struct sockaddr *)cache-&gt;next-&gt;ai_addr,</div><div class='del'>-                                  cache-&gt;next-&gt;ai_addrlen,</div><div class='del'>-                                  host, sizeof (host),</div><div class='del'>-                                  service, sizeof (service),</div><div class='del'>-                                  NI_NUMERICHOST);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg ("resolver", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_GETNAMEINFO_FAILED, "getnameinfo failed"</div><div class='del'>-                                " (%s)", gai_strerror (ret));</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg_debug ("resolver", 0, "next DNS query will return: "</div><div class='del'>-                              "ip-%s port-%s", host, service);</div><div class='add'>+    if (cache-&gt;next) {</div><div class='add'>+        ret = getnameinfo((struct sockaddr *)cache-&gt;next-&gt;ai_addr,</div><div class='add'>+                          cache-&gt;next-&gt;ai_addrlen, host, sizeof(host), service,</div><div class='add'>+                          sizeof(service), NI_NUMERICHOST);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg("resolver", GF_LOG_ERROR, 0, LG_MSG_GETNAMEINFO_FAILED,</div><div class='add'>+                   "getnameinfo failed"</div><div class='add'>+                   " (%s)",</div><div class='add'>+                   gai_strerror(ret));</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_msg_debug("resolver", 0,</div><div class='add'>+                     "returning ip-%s (port-%s) for "</div><div class='add'>+                     "hostname: %s and port: %d",</div><div class='add'>+                     host, service, hostname, port);</div><div class='add'>+</div><div class='add'>+        *addr_info = cache-&gt;next;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cache-&gt;next)</div><div class='add'>+        cache-&gt;next = cache-&gt;next-&gt;ai_next;</div><div class='add'>+    if (cache-&gt;next) {</div><div class='add'>+        ret = getnameinfo((struct sockaddr *)cache-&gt;next-&gt;ai_addr,</div><div class='add'>+                          cache-&gt;next-&gt;ai_addrlen, host, sizeof(host), service,</div><div class='add'>+                          sizeof(service), NI_NUMERICHOST);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg("resolver", GF_LOG_ERROR, 0, LG_MSG_GETNAMEINFO_FAILED,</div><div class='add'>+                   "getnameinfo failed"</div><div class='add'>+                   " (%s)",</div><div class='add'>+                   gai_strerror(ret));</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        gf_msg_debug("resolver", 0,</div><div class='add'>+                     "next DNS query will return: "</div><div class='add'>+                     "ip-%s port-%s",</div><div class='add'>+                     host, service);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        freeaddrinfo (cache-&gt;first);</div><div class='del'>-        cache-&gt;first = cache-&gt;next = NULL;</div><div class='del'>-        GF_FREE (cache);</div><div class='del'>-        *dnscache = NULL;</div><div class='del'>-        return -1;</div><div class='add'>+    freeaddrinfo(cache-&gt;first);</div><div class='add'>+    cache-&gt;first = cache-&gt;next = NULL;</div><div class='add'>+    GF_FREE(cache);</div><div class='add'>+    *dnscache = NULL;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -551,16 +576,15 @@ err:</div><div class='ctx'>  *          FAILURE: NULL</div><div class='ctx'>  */</div><div class='ctx'> struct dnscache *</div><div class='del'>-gf_dnscache_init (time_t ttl)</div><div class='add'>+gf_dnscache_init(time_t ttl)</div><div class='ctx'> {</div><div class='del'>-        struct dnscache *cache = GF_MALLOC (sizeof (*cache),</div><div class='del'>-                                            gf_common_mt_dnscache);</div><div class='del'>-        if (cache) {</div><div class='del'>-                cache-&gt;cache_dict = NULL;</div><div class='del'>-                cache-&gt;ttl = ttl;</div><div class='del'>-        }</div><div class='add'>+    struct dnscache *cache = GF_MALLOC(sizeof(*cache), gf_common_mt_dnscache);</div><div class='add'>+    if (cache) {</div><div class='add'>+        cache-&gt;cache_dict = NULL;</div><div class='add'>+        cache-&gt;ttl = ttl;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return cache;</div><div class='add'>+    return cache;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -570,11 +594,11 @@ gf_dnscache_init (time_t ttl)</div><div class='ctx'>  *          FAILURE: NULL</div><div class='ctx'>  */</div><div class='ctx'> struct dnscache_entry *</div><div class='del'>-gf_dnscache_entry_init ()</div><div class='add'>+gf_dnscache_entry_init()</div><div class='ctx'> {</div><div class='del'>-        struct dnscache_entry *entry = GF_CALLOC (1, sizeof (*entry),</div><div class='del'>-                                                 gf_common_mt_dnscache_entry);</div><div class='del'>-        return entry;</div><div class='add'>+    struct dnscache_entry *entry = GF_CALLOC(1, sizeof(*entry),</div><div class='add'>+                                             gf_common_mt_dnscache_entry);</div><div class='add'>+    return entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -583,11 +607,11 @@ gf_dnscache_entry_init ()</div><div class='ctx'>  * @entry: Pointer to deallocate</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-gf_dnscache_entry_deinit (struct dnscache_entry *entry)</div><div class='add'>+gf_dnscache_entry_deinit(struct dnscache_entry *entry)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (entry-&gt;ip);</div><div class='del'>-        GF_FREE (entry-&gt;fqdn);</div><div class='del'>-        GF_FREE (entry);</div><div class='add'>+    GF_FREE(entry-&gt;ip);</div><div class='add'>+    GF_FREE(entry-&gt;fqdn);</div><div class='add'>+    GF_FREE(entry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -599,1466 +623,1448 @@ gf_dnscache_entry_deinit (struct dnscache_entry *entry)</div><div class='ctx'>  *          failure: NULL</div><div class='ctx'>  */</div><div class='ctx'> char *</div><div class='del'>-gf_rev_dns_lookup_cached (const char *ip, struct dnscache *dnscache)</div><div class='add'>+gf_rev_dns_lookup_cached(const char *ip, struct dnscache *dnscache)</div><div class='ctx'> {</div><div class='del'>-        char               *fqdn = NULL;</div><div class='del'>-        int                ret  = 0;</div><div class='del'>-        dict_t             *cache = NULL;</div><div class='del'>-        data_t             *entrydata = NULL;</div><div class='del'>-        struct dnscache_entry *dnsentry = NULL;</div><div class='del'>-        gf_boolean_t        from_cache = _gf_false;</div><div class='add'>+    char *fqdn = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *cache = NULL;</div><div class='add'>+    data_t *entrydata = NULL;</div><div class='add'>+    struct dnscache_entry *dnsentry = NULL;</div><div class='add'>+    gf_boolean_t from_cache = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!dnscache)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!dnscache)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    if (!dnscache-&gt;cache_dict) {</div><div class='add'>+        dnscache-&gt;cache_dict = dict_new();</div><div class='ctx'>         if (!dnscache-&gt;cache_dict) {</div><div class='del'>-                dnscache-&gt;cache_dict = dict_new ();</div><div class='del'>-                if (!dnscache-&gt;cache_dict) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        cache = dnscache-&gt;cache_dict;</div><div class='del'>-</div><div class='del'>-        /* Quick cache lookup to see if we already hold it */</div><div class='del'>-        entrydata = dict_get (cache, (char *)ip);</div><div class='del'>-        if (entrydata) {</div><div class='del'>-                dnsentry = (struct dnscache_entry *)entrydata-&gt;data;</div><div class='del'>-                /* First check the TTL &amp; timestamp */</div><div class='del'>-                if (time (NULL) - dnsentry-&gt;timestamp &gt; dnscache-&gt;ttl) {</div><div class='del'>-                        gf_dnscache_entry_deinit (dnsentry);</div><div class='del'>-                        entrydata-&gt;data = NULL; /* Mark this as 'null' so</div><div class='del'>-                                                 * dict_del () doesn't try free</div><div class='del'>-                                                 * this after we've already</div><div class='del'>-                                                 * freed it.</div><div class='del'>-                                                 */</div><div class='del'>-</div><div class='del'>-                        dict_del (cache, (char *)ip); /* Remove this entry */</div><div class='del'>-                } else {</div><div class='del'>-                        /* Cache entry is valid, get the FQDN and return */</div><div class='del'>-                        fqdn = dnsentry-&gt;fqdn;</div><div class='del'>-                        from_cache = _gf_true; /* Mark this as from cache */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    cache = dnscache-&gt;cache_dict;</div><div class='add'>+</div><div class='add'>+    /* Quick cache lookup to see if we already hold it */</div><div class='add'>+    entrydata = dict_get(cache, (char *)ip);</div><div class='add'>+    if (entrydata) {</div><div class='add'>+        dnsentry = (struct dnscache_entry *)entrydata-&gt;data;</div><div class='add'>+        /* First check the TTL &amp; timestamp */</div><div class='add'>+        if (time(NULL) - dnsentry-&gt;timestamp &gt; dnscache-&gt;ttl) {</div><div class='add'>+            gf_dnscache_entry_deinit(dnsentry);</div><div class='add'>+            entrydata-&gt;data = NULL; /* Mark this as 'null' so</div><div class='add'>+                                     * dict_del () doesn't try free</div><div class='add'>+                                     * this after we've already</div><div class='add'>+                                     * freed it.</div><div class='add'>+                                     */</div><div class='add'>+</div><div class='add'>+            dict_del(cache, (char *)ip); /* Remove this entry */</div><div class='add'>+        } else {</div><div class='add'>+            /* Cache entry is valid, get the FQDN and return */</div><div class='add'>+            fqdn = dnsentry-&gt;fqdn;</div><div class='add'>+            from_cache = _gf_true; /* Mark this as from cache */</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Get the FQDN */</div><div class='del'>-        ret =  gf_get_hostname_from_ip ((char *)ip, &amp;fqdn);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Get the FQDN */</div><div class='add'>+    ret = gf_get_hostname_from_ip((char *)ip, &amp;fqdn);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!fqdn) {</div><div class='del'>-                gf_log_callingfn ("resolver", GF_LOG_CRITICAL,</div><div class='del'>-                                  "Allocation failed for the host address");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!fqdn) {</div><div class='add'>+        gf_log_callingfn("resolver", GF_LOG_CRITICAL,</div><div class='add'>+                         "Allocation failed for the host address");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        from_cache = _gf_false;</div><div class='add'>+    from_cache = _gf_false;</div><div class='ctx'> out:</div><div class='del'>-        /* Insert into the cache */</div><div class='del'>-        if (fqdn &amp;&amp; !from_cache) {</div><div class='del'>-                struct dnscache_entry *entry = gf_dnscache_entry_init ();</div><div class='del'>-</div><div class='del'>-                if (!entry) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                entry-&gt;fqdn = fqdn;</div><div class='del'>-                if (!ip) {</div><div class='del'>-                        gf_dnscache_entry_deinit (entry);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                entry-&gt;ip = gf_strdup (ip);</div><div class='del'>-                entry-&gt;timestamp = time (NULL);</div><div class='del'>-</div><div class='del'>-                entrydata = bin_to_data (entry, sizeof (*entry));</div><div class='del'>-                dict_set (cache, (char *)ip, entrydata);</div><div class='add'>+    /* Insert into the cache */</div><div class='add'>+    if (fqdn &amp;&amp; !from_cache) {</div><div class='add'>+        struct dnscache_entry *entry = gf_dnscache_entry_init();</div><div class='add'>+</div><div class='add'>+        if (!entry) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        return fqdn;</div><div class='add'>+        entry-&gt;fqdn = fqdn;</div><div class='add'>+        if (!ip) {</div><div class='add'>+            gf_dnscache_entry_deinit(entry);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        entry-&gt;ip = gf_strdup(ip);</div><div class='add'>+        entry-&gt;timestamp = time(NULL);</div><div class='add'>+</div><div class='add'>+        entrydata = bin_to_data(entry, sizeof(*entry));</div><div class='add'>+        dict_set(cache, (char *)ip, entrydata);</div><div class='add'>+    }</div><div class='add'>+    return fqdn;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xldump {</div><div class='del'>-	int lineno;</div><div class='add'>+    int lineno;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* to catch any format discrepencies that may arise in code */</div><div class='del'>-static int nprintf (struct xldump *dump, const char *fmt, ...)</div><div class='del'>-                    __attribute__ ((__format__ (__printf__, 2, 3)));</div><div class='ctx'> static int</div><div class='del'>-nprintf (struct xldump *dump, const char *fmt, ...)</div><div class='add'>+nprintf(struct xldump *dump, const char *fmt, ...)</div><div class='add'>+    __attribute__((__format__(__printf__, 2, 3)));</div><div class='add'>+static int</div><div class='add'>+nprintf(struct xldump *dump, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list  ap;</div><div class='del'>-        char    *msg = NULL;</div><div class='del'>-        char     header[32];</div><div class='del'>-        int      ret = 0;</div><div class='add'>+    va_list ap;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    char header[32];</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (header, 32, "%3d:", ++dump-&gt;lineno);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = snprintf(header, 32, "%3d:", ++dump-&gt;lineno);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        ret = vasprintf (&amp;msg, fmt, ap);</div><div class='del'>-        va_end (ap);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto out;</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    ret = vasprintf(&amp;msg, fmt, ap);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* NOTE: No ret value from gf_msg_plain, so unable to compute printed</div><div class='del'>-         * characters. The return value from nprintf is not used, so for now</div><div class='del'>-         * living with it */</div><div class='del'>-        gf_msg_plain (GF_LOG_WARNING, "%s %s", header, msg);</div><div class='add'>+    /* NOTE: No ret value from gf_msg_plain, so unable to compute printed</div><div class='add'>+     * characters. The return value from nprintf is not used, so for now</div><div class='add'>+     * living with it */</div><div class='add'>+    gf_msg_plain(GF_LOG_WARNING, "%s %s", header, msg);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        FREE (msg);</div><div class='del'>-        return 0;</div><div class='add'>+    FREE(msg);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xldump_options (dict_t *this, char *key, data_t *value,	void *d)</div><div class='add'>+xldump_options(dict_t *this, char *key, data_t *value, void *d)</div><div class='ctx'> {</div><div class='del'>-	nprintf (d, "    option %s %s", key, value-&gt;data);</div><div class='del'>-	return 0;</div><div class='add'>+    nprintf(d, "    option %s %s", key, value-&gt;data);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-xldump_subvolumes (xlator_t *this, void *d)</div><div class='add'>+xldump_subvolumes(xlator_t *this, void *d)</div><div class='ctx'> {</div><div class='del'>-	xlator_list_t *subv = NULL;</div><div class='del'>-	int len = 0;</div><div class='del'>-	char *subvstr = NULL;</div><div class='add'>+    xlator_list_t *subv = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    char *subvstr = NULL;</div><div class='ctx'> </div><div class='del'>-	subv = this-&gt;children;</div><div class='del'>-	if (!this-&gt;children)</div><div class='del'>-		return;</div><div class='add'>+    subv = this-&gt;children;</div><div class='add'>+    if (!this-&gt;children)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	for (subv = this-&gt;children; subv; subv = subv-&gt;next)</div><div class='del'>-		len += (strlen (subv-&gt;xlator-&gt;name) + 1);</div><div class='add'>+    for (subv = this-&gt;children; subv; subv = subv-&gt;next)</div><div class='add'>+        len += (strlen(subv-&gt;xlator-&gt;name) + 1);</div><div class='ctx'> </div><div class='del'>-	subvstr = GF_MALLOC (len, gf_common_mt_strdup);</div><div class='add'>+    subvstr = GF_MALLOC(len, gf_common_mt_strdup);</div><div class='ctx'> </div><div class='del'>-	len = 0;</div><div class='del'>-	for (subv = this-&gt;children; subv; subv= subv-&gt;next)</div><div class='del'>-		len += sprintf (subvstr + len, "%s%s", subv-&gt;xlator-&gt;name,</div><div class='del'>-				subv-&gt;next ? " " : "");</div><div class='add'>+    len = 0;</div><div class='add'>+    for (subv = this-&gt;children; subv; subv = subv-&gt;next)</div><div class='add'>+        len += sprintf(subvstr + len, "%s%s", subv-&gt;xlator-&gt;name,</div><div class='add'>+                       subv-&gt;next ? " " : "");</div><div class='ctx'> </div><div class='del'>-	nprintf (d, "    subvolumes %s", subvstr);</div><div class='add'>+    nprintf(d, "    subvolumes %s", subvstr);</div><div class='ctx'> </div><div class='del'>-	GF_FREE (subvstr);</div><div class='add'>+    GF_FREE(subvstr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-xldump (xlator_t *each, void *d)</div><div class='add'>+xldump(xlator_t *each, void *d)</div><div class='ctx'> {</div><div class='del'>-	nprintf (d, "volume %s", each-&gt;name);</div><div class='del'>-	nprintf (d, "    type %s", each-&gt;type);</div><div class='del'>-	dict_foreach (each-&gt;options, xldump_options, d);</div><div class='add'>+    nprintf(d, "volume %s", each-&gt;name);</div><div class='add'>+    nprintf(d, "    type %s", each-&gt;type);</div><div class='add'>+    dict_foreach(each-&gt;options, xldump_options, d);</div><div class='ctx'> </div><div class='del'>-	xldump_subvolumes (each, d);</div><div class='add'>+    xldump_subvolumes(each, d);</div><div class='ctx'> </div><div class='del'>-	nprintf (d, "end-volume");</div><div class='del'>-	nprintf (d, " ");</div><div class='add'>+    nprintf(d, "end-volume");</div><div class='add'>+    nprintf(d, " ");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_log_dump_graph (FILE *specfp, glusterfs_graph_t *graph)</div><div class='add'>+gf_log_dump_graph(FILE *specfp, glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-	struct xldump xld = {0, };</div><div class='add'>+    struct xldump xld = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        gf_msg_plain (GF_LOG_WARNING, "Final graph:");</div><div class='del'>-        gf_msg_plain (GF_LOG_WARNING,</div><div class='del'>-                      "+---------------------------------------"</div><div class='del'>-                      "---------------------------------------+");</div><div class='add'>+    gf_msg_plain(GF_LOG_WARNING, "Final graph:");</div><div class='add'>+    gf_msg_plain(GF_LOG_WARNING,</div><div class='add'>+                 "+---------------------------------------"</div><div class='add'>+                 "---------------------------------------+");</div><div class='ctx'> </div><div class='del'>-	xlator_foreach_depth_first (graph-&gt;top, xldump, &amp;xld);</div><div class='add'>+    xlator_foreach_depth_first(graph-&gt;top, xldump, &amp;xld);</div><div class='ctx'> </div><div class='del'>-        gf_msg_plain (GF_LOG_WARNING,</div><div class='del'>-                      "+---------------------------------------"</div><div class='del'>-                      "---------------------------------------+");</div><div class='add'>+    gf_msg_plain(GF_LOG_WARNING,</div><div class='add'>+                 "+---------------------------------------"</div><div class='add'>+                 "---------------------------------------+");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_dump_config_flags ()</div><div class='add'>+gf_dump_config_flags()</div><div class='ctx'> {</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "configuration details:");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "configuration details:");</div><div class='ctx'> </div><div class='ctx'> /* have argp */</div><div class='ctx'> #ifdef HAVE_ARGP</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "argp 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "argp 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* ifdef if found backtrace */</div><div class='ctx'> #ifdef HAVE_BACKTRACE</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "backtrace 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "backtrace 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Berkeley-DB version has cursor-&gt;get() */</div><div class='ctx'> #ifdef HAVE_BDB_CURSOR_GET</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "bdb-&gt;cursor-&gt;get 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "bdb-&gt;cursor-&gt;get 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to 1 if you have the &lt;db.h&gt; header file. */</div><div class='ctx'> #ifdef HAVE_DB_H</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "db.h 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "db.h 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to 1 if you have the &lt;dlfcn.h&gt; header file. */</div><div class='ctx'> #ifdef HAVE_DLFCN_H</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "dlfcn 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "dlfcn 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* define if fdatasync exists */</div><div class='ctx'> #ifdef HAVE_FDATASYNC</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "fdatasync 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "fdatasync 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to 1 if you have the `pthread' library (-lpthread). */</div><div class='ctx'> #ifdef HAVE_LIBPTHREAD</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "libpthread 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "libpthread 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* define if llistxattr exists */</div><div class='ctx'> #ifdef HAVE_LLISTXATTR</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "llistxattr 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "llistxattr 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* define if found setfsuid setfsgid */</div><div class='ctx'> #ifdef HAVE_SET_FSID</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "setfsid 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "setfsid 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* define if found spinlock */</div><div class='ctx'> #ifdef HAVE_SPINLOCK</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "spinlock 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "spinlock 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to 1 if you have the &lt;sys/epoll.h&gt; header file. */</div><div class='ctx'> #ifdef HAVE_SYS_EPOLL_H</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "epoll.h 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "epoll.h 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to 1 if you have the &lt;sys/extattr.h&gt; header file. */</div><div class='ctx'> #ifdef HAVE_SYS_EXTATTR_H</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "extattr.h 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "extattr.h 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to 1 if you have the &lt;sys/xattr.h&gt; header file. */</div><div class='ctx'> #ifdef HAVE_SYS_XATTR_H</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "xattr.h 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "xattr.h 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* define if found st_atim.tv_nsec */</div><div class='ctx'> #ifdef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "st_atim.tv_nsec 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "st_atim.tv_nsec 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* define if found st_atimespec.tv_nsec */</div><div class='ctx'> #ifdef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "st_atimespec.tv_nsec 1");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "st_atimespec.tv_nsec 1");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Define to the full name and version of this package. */</div><div class='ctx'> #ifdef PACKAGE_STRING</div><div class='del'>-        {</div><div class='del'>-                char *msg = NULL;</div><div class='del'>-                int   ret = -1;</div><div class='del'>-</div><div class='del'>-                ret = gf_asprintf (&amp;msg, "package-string: %s", PACKAGE_STRING);</div><div class='del'>-                if (ret &gt;= 0) {</div><div class='del'>-                        gf_msg_plain_nomem (GF_LOG_ALERT, msg);</div><div class='del'>-                        GF_FREE (msg);</div><div class='del'>-                }</div><div class='add'>+    {</div><div class='add'>+        char *msg = NULL;</div><div class='add'>+        int ret = -1;</div><div class='add'>+</div><div class='add'>+        ret = gf_asprintf(&amp;msg, "package-string: %s", PACKAGE_STRING);</div><div class='add'>+        if (ret &gt;= 0) {</div><div class='add'>+            gf_msg_plain_nomem(GF_LOG_ALERT, msg);</div><div class='add'>+            GF_FREE(msg);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Obtain a backtrace and print it to the log */</div><div class='ctx'> void</div><div class='del'>-gf_print_trace (int32_t signum, glusterfs_ctx_t *ctx)</div><div class='del'>-{</div><div class='del'>-        char         msg[1024] = {0,};</div><div class='del'>-        char         timestr[64] = {0,};</div><div class='del'>-        call_stack_t *stack = NULL;</div><div class='del'>-</div><div class='del'>-        /* Now every gf_log call will just write to a buffer and when the</div><div class='del'>-         * buffer becomes full, its written to the log-file. Suppose the process</div><div class='del'>-         * crashes and prints the backtrace in the log-file, then the previous</div><div class='del'>-         * log information will still be in the buffer itself. So flush the</div><div class='del'>-         * contents of the buffer to the log file before printing the backtrace</div><div class='del'>-         * which helps in debugging.</div><div class='del'>-         */</div><div class='del'>-        gf_log_flush();</div><div class='del'>-</div><div class='del'>-        gf_log_disable_suppression_before_exit (ctx);</div><div class='del'>-</div><div class='del'>-        /* Pending frames, (if any), list them in order */</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "pending frames:");</div><div class='add'>+gf_print_trace(int32_t signum, glusterfs_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    char msg[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr[64] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_stack_t *stack = NULL;</div><div class='add'>+</div><div class='add'>+    /* Now every gf_log call will just write to a buffer and when the</div><div class='add'>+     * buffer becomes full, its written to the log-file. Suppose the process</div><div class='add'>+     * crashes and prints the backtrace in the log-file, then the previous</div><div class='add'>+     * log information will still be in the buffer itself. So flush the</div><div class='add'>+     * contents of the buffer to the log file before printing the backtrace</div><div class='add'>+     * which helps in debugging.</div><div class='add'>+     */</div><div class='add'>+    gf_log_flush();</div><div class='add'>+</div><div class='add'>+    gf_log_disable_suppression_before_exit(ctx);</div><div class='add'>+</div><div class='add'>+    /* Pending frames, (if any), list them in order */</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "pending frames:");</div><div class='add'>+    {</div><div class='add'>+        /* FIXME: traversing stacks outside pool-&gt;lock */</div><div class='add'>+        list_for_each_entry(stack, &amp;ctx-&gt;pool-&gt;all_frames, all_frames)</div><div class='ctx'>         {</div><div class='del'>-                /* FIXME: traversing stacks outside pool-&gt;lock */</div><div class='del'>-                list_for_each_entry (stack, &amp;ctx-&gt;pool-&gt;all_frames,</div><div class='del'>-                                     all_frames) {</div><div class='del'>-                        if (stack-&gt;type == GF_OP_TYPE_FOP)</div><div class='del'>-                                sprintf (msg,"frame : type(%d) op(%s)",</div><div class='del'>-                                         stack-&gt;type,</div><div class='del'>-                                         gf_fop_list[stack-&gt;op]);</div><div class='del'>-                        else</div><div class='del'>-                                sprintf (msg,"frame : type(%d) op(%d)",</div><div class='del'>-                                         stack-&gt;type,</div><div class='del'>-                                         stack-&gt;op);</div><div class='del'>-</div><div class='del'>-                        gf_msg_plain_nomem (GF_LOG_ALERT, msg);</div><div class='del'>-                }</div><div class='add'>+            if (stack-&gt;type == GF_OP_TYPE_FOP)</div><div class='add'>+                sprintf(msg, "frame : type(%d) op(%s)", stack-&gt;type,</div><div class='add'>+                        gf_fop_list[stack-&gt;op]);</div><div class='add'>+            else</div><div class='add'>+                sprintf(msg, "frame : type(%d) op(%d)", stack-&gt;type, stack-&gt;op);</div><div class='add'>+</div><div class='add'>+            gf_msg_plain_nomem(GF_LOG_ALERT, msg);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sprintf (msg, "patchset: %s", GLUSTERFS_REPOSITORY_REVISION);</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, msg);</div><div class='add'>+    sprintf(msg, "patchset: %s", GLUSTERFS_REPOSITORY_REVISION);</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, msg);</div><div class='ctx'> </div><div class='del'>-        sprintf (msg, "signal received: %d", signum);</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, msg);</div><div class='del'>-        {</div><div class='del'>-                /* Dump the timestamp of the crash too, so the previous logs</div><div class='del'>-                   can be related */</div><div class='del'>-                gf_time_fmt (timestr, sizeof timestr, time (NULL),</div><div class='del'>-                             gf_timefmt_FT);</div><div class='del'>-                gf_msg_plain_nomem (GF_LOG_ALERT, "time of crash: ");</div><div class='del'>-                gf_msg_plain_nomem (GF_LOG_ALERT, timestr);</div><div class='del'>-        }</div><div class='add'>+    sprintf(msg, "signal received: %d", signum);</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, msg);</div><div class='add'>+    {</div><div class='add'>+        /* Dump the timestamp of the crash too, so the previous logs</div><div class='add'>+           can be related */</div><div class='add'>+        gf_time_fmt(timestr, sizeof timestr, time(NULL), gf_timefmt_FT);</div><div class='add'>+        gf_msg_plain_nomem(GF_LOG_ALERT, "time of crash: ");</div><div class='add'>+        gf_msg_plain_nomem(GF_LOG_ALERT, timestr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_dump_config_flags ();</div><div class='del'>-        gf_msg_backtrace_nomem (GF_LOG_ALERT, 200);</div><div class='del'>-        sprintf (msg, "---------");</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, msg);</div><div class='add'>+    gf_dump_config_flags();</div><div class='add'>+    gf_msg_backtrace_nomem(GF_LOG_ALERT, 200);</div><div class='add'>+    sprintf(msg, "---------");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, msg);</div><div class='ctx'> </div><div class='del'>-        /* Send a signal to terminate the process */</div><div class='del'>-        signal (signum, SIG_DFL);</div><div class='del'>-        raise (signum);</div><div class='add'>+    /* Send a signal to terminate the process */</div><div class='add'>+    signal(signum, SIG_DFL);</div><div class='add'>+    raise(signum);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-trap (void)</div><div class='add'>+trap(void)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_trim (char *string)</div><div class='add'>+gf_trim(char *string)</div><div class='ctx'> {</div><div class='del'>-        register char *s, *t;</div><div class='add'>+    register char *s, *t;</div><div class='ctx'> </div><div class='del'>-        if (string == NULL) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (string == NULL) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (s = string; isspace (*s); s++)</div><div class='del'>-                ;</div><div class='add'>+    for (s = string; isspace(*s); s++)</div><div class='add'>+        ;</div><div class='ctx'> </div><div class='del'>-        if (*s == 0)</div><div class='del'>-                return s;</div><div class='add'>+    if (*s == 0)</div><div class='add'>+        return s;</div><div class='ctx'> </div><div class='del'>-        t = s + strlen (s) - 1;</div><div class='del'>-        while (t &gt; s &amp;&amp; isspace (*t))</div><div class='del'>-                t--;</div><div class='del'>-        *++t = '\0';</div><div class='add'>+    t = s + strlen(s) - 1;</div><div class='add'>+    while (t &gt; s &amp;&amp; isspace(*t))</div><div class='add'>+        t--;</div><div class='add'>+    *++t = '\0';</div><div class='ctx'> </div><div class='del'>-        return s;</div><div class='add'>+    return s;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_strstr (const char *str, const char *delim, const char *match)</div><div class='add'>+gf_strstr(const char *str, const char *delim, const char *match)</div><div class='ctx'> {</div><div class='del'>-        char *tmp      = NULL;</div><div class='del'>-        char *save_ptr = NULL;</div><div class='del'>-        char *tmp_str  = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='ctx'> </div><div class='del'>-        int  ret       = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        tmp_str = strdup (str);</div><div class='add'>+    tmp_str = strdup(str);</div><div class='ctx'> </div><div class='del'>-        if (str == NULL || delim == NULL || match == NULL || tmp_str == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (str == NULL || delim == NULL || match == NULL || tmp_str == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    tmp = strtok_r(tmp_str, delim, &amp;save_ptr);</div><div class='ctx'> </div><div class='del'>-        tmp = strtok_r (tmp_str, delim, &amp;save_ptr);</div><div class='add'>+    while (tmp) {</div><div class='add'>+        ret = strcmp(tmp, match);</div><div class='ctx'> </div><div class='del'>-        while (tmp) {</div><div class='del'>-                ret = strcmp (tmp, match);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                tmp = strtok_r (NULL, delim, &amp;save_ptr);</div><div class='del'>-        }</div><div class='add'>+        tmp = strtok_r(NULL, delim, &amp;save_ptr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free (tmp_str);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    free(tmp_str);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_volume_name_validate (const char *volume_name)</div><div class='add'>+gf_volume_name_validate(const char *volume_name)</div><div class='ctx'> {</div><div class='del'>-        const char *vname = NULL;</div><div class='add'>+    const char *vname = NULL;</div><div class='ctx'> </div><div class='del'>-        if (volume_name == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (volume_name == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!isalpha (volume_name[0]))</div><div class='del'>-                return 1;</div><div class='add'>+    if (!isalpha(volume_name[0]))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        for (vname = &amp;volume_name[1]; *vname != '\0'; vname++) {</div><div class='del'>-                if (!(isalnum (*vname) || *vname == '_'))</div><div class='del'>-                        return 1;</div><div class='del'>-        }</div><div class='add'>+    for (vname = &amp;volume_name[1]; *vname != '\0'; vname++) {</div><div class='add'>+        if (!(isalnum(*vname) || *vname == '_'))</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_string2time (const char *str, uint32_t *n)</div><div class='del'>-{</div><div class='del'>-        unsigned long value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtol (str, &amp;tail, 0);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='del'>-</div><div class='del'>-        if (((tail[0] == '\0') ||</div><div class='del'>-              ((tail[0] == 's') &amp;&amp; (tail[1] == '\0')) ||</div><div class='del'>-              ((tail[0] == 's') &amp;&amp; (tail[1] == 'e') &amp;&amp;</div><div class='del'>-	       (tail[2] == 'c') &amp;&amp; (tail[3] == '\0'))))</div><div class='del'>-               goto out;</div><div class='del'>-</div><div class='del'>-        else if (((tail[0] == 'm') &amp;&amp; (tail[1] == '\0')) ||</div><div class='del'>-                 ((tail[0] == 'm') &amp;&amp; (tail[1] == 'i') &amp;&amp;</div><div class='del'>-                  (tail[2] == 'n') &amp;&amp; (tail[3] == '\0'))) {</div><div class='del'>-                value = value * GF_MINUTE_IN_SECONDS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        else if (((tail[0] == 'h') &amp;&amp; (tail[1] == '\0')) ||</div><div class='del'>-                 ((tail[0] == 'h') &amp;&amp; (tail[1] == 'r') &amp;&amp;</div><div class='del'>-	         (tail[2] == '\0'))) {</div><div class='del'>-                value = value * GF_HOUR_IN_SECONDS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_string2time(const char *str, uint32_t *n)</div><div class='add'>+{</div><div class='add'>+    unsigned long value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='ctx'> </div><div class='del'>-        else if (((tail[0] == 'd') &amp;&amp; (tail[1] == '\0')) ||</div><div class='del'>-                 ((tail[0] == 'd') &amp;&amp; (tail[1] == 'a') &amp;&amp;</div><div class='del'>-	         (tail[2] == 'y') &amp;&amp; (tail[3] == 's') &amp;&amp;</div><div class='del'>-                 (tail[4] == '\0'))) {</div><div class='del'>-                value = value * GF_DAY_IN_SECONDS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtol(str, &amp;tail, 0);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        else if (((tail[0] == 'w') &amp;&amp; (tail[1] == '\0')) ||</div><div class='del'>-                 ((tail[0] == 'w') &amp;&amp; (tail[1] == 'k') &amp;&amp;</div><div class='del'>-	         (tail[2] == '\0'))) {</div><div class='del'>-                value = value * GF_WEEK_IN_SECONDS;</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='add'>+</div><div class='add'>+    if (((tail[0] == '\0') || ((tail[0] == 's') &amp;&amp; (tail[1] == '\0')) ||</div><div class='add'>+         ((tail[0] == 's') &amp;&amp; (tail[1] == 'e') &amp;&amp; (tail[2] == 'c') &amp;&amp;</div><div class='add'>+          (tail[3] == '\0'))))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    else if (((tail[0] == 'm') &amp;&amp; (tail[1] == '\0')) ||</div><div class='add'>+             ((tail[0] == 'm') &amp;&amp; (tail[1] == 'i') &amp;&amp; (tail[2] == 'n') &amp;&amp;</div><div class='add'>+              (tail[3] == '\0'))) {</div><div class='add'>+        value = value * GF_MINUTE_IN_SECONDS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    else if (((tail[0] == 'h') &amp;&amp; (tail[1] == '\0')) ||</div><div class='add'>+             ((tail[0] == 'h') &amp;&amp; (tail[1] == 'r') &amp;&amp; (tail[2] == '\0'))) {</div><div class='add'>+        value = value * GF_HOUR_IN_SECONDS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    else if (((tail[0] == 'd') &amp;&amp; (tail[1] == '\0')) ||</div><div class='add'>+             ((tail[0] == 'd') &amp;&amp; (tail[1] == 'a') &amp;&amp; (tail[2] == 'y') &amp;&amp;</div><div class='add'>+              (tail[3] == 's') &amp;&amp; (tail[4] == '\0'))) {</div><div class='add'>+        value = value * GF_DAY_IN_SECONDS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    else if (((tail[0] == 'w') &amp;&amp; (tail[1] == '\0')) ||</div><div class='add'>+             ((tail[0] == 'w') &amp;&amp; (tail[1] == 'k') &amp;&amp; (tail[2] == '\0'))) {</div><div class='add'>+        value = value * GF_WEEK_IN_SECONDS;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2percent (const char *str, double *n)</div><div class='del'>-{</div><div class='del'>-        double value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtod (str, &amp;tail);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+gf_string2percent(const char *str, double *n)</div><div class='add'>+{</div><div class='add'>+    double value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtod(str, &amp;tail);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (!((tail[0] == '\0') ||</div><div class='del'>-              ((tail[0] == '%') &amp;&amp; (tail[1] == '\0'))))</div><div class='del'>-                return -1;</div><div class='add'>+    if (!((tail[0] == '\0') || ((tail[0] == '%') &amp;&amp; (tail[1] == '\0'))))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-_gf_string2long (const char *str, long *n, int base)</div><div class='add'>+_gf_string2long(const char *str, long *n, int base)</div><div class='ctx'> {</div><div class='del'>-        long value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='add'>+    long value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='ctx'> </div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtol (str, &amp;tail, base);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtol(str, &amp;tail, base);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (tail[0] != '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_string2ulong (const char *str, unsigned long *n, int base)</div><div class='del'>-{</div><div class='del'>-        unsigned long value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtoul (str, &amp;tail, base);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+_gf_string2ulong(const char *str, unsigned long *n, int base)</div><div class='add'>+{</div><div class='add'>+    unsigned long value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtoul(str, &amp;tail, base);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (tail[0] != '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_string2uint (const char *str, unsigned int *n, int base)</div><div class='del'>-{</div><div class='del'>-        unsigned long value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtoul (str, &amp;tail, base);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+_gf_string2uint(const char *str, unsigned int *n, int base)</div><div class='add'>+{</div><div class='add'>+    unsigned long value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtoul(str, &amp;tail, base);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (tail[0] != '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = (unsigned int)value;</div><div class='add'>+    *n = (unsigned int)value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_string2double (const char *str, double *n)</div><div class='add'>+_gf_string2double(const char *str, double *n)</div><div class='ctx'> {</div><div class='del'>-        double value     = 0.0;</div><div class='del'>-        char   *tail     = NULL;</div><div class='del'>-        int    old_errno = 0;</div><div class='add'>+    double value = 0.0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='ctx'> </div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtod (str, &amp;tail);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtod(str, &amp;tail);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (tail[0] != '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_string2longlong (const char *str, long long *n, int base)</div><div class='add'>+_gf_string2longlong(const char *str, long long *n, int base)</div><div class='ctx'> {</div><div class='del'>-        long long value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='add'>+    long long value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='ctx'> </div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtoll (str, &amp;tail, base);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtoll(str, &amp;tail, base);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (tail[0] != '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_string2ulonglong (const char *str, unsigned long long *n, int base)</div><div class='del'>-{</div><div class='del'>-        unsigned long long value = 0;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtoull (str, &amp;tail, base);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+_gf_string2ulonglong(const char *str, unsigned long long *n, int base)</div><div class='add'>+{</div><div class='add'>+    unsigned long long value = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtoull(str, &amp;tail, base);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-                return -1;</div><div class='add'>+    if (tail[0] != '\0')</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2long (const char *str, long *n)</div><div class='add'>+gf_string2long(const char *str, long *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2long (str, n, 0);</div><div class='add'>+    return _gf_string2long(str, n, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2ulong (const char *str, unsigned long *n)</div><div class='add'>+gf_string2ulong(const char *str, unsigned long *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2ulong (str, n, 0);</div><div class='add'>+    return _gf_string2ulong(str, n, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2int (const char *str, int *n)</div><div class='add'>+gf_string2int(const char *str, int *n)</div><div class='ctx'> {</div><div class='del'>-        long l = 0;</div><div class='del'>-        int  ret = 0;</div><div class='add'>+    long l = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = _gf_string2long (str, &amp;l, 0);</div><div class='add'>+    ret = _gf_string2long(str, &amp;l, 0);</div><div class='ctx'> </div><div class='del'>-        *n = l;</div><div class='del'>-        return ret;</div><div class='add'>+    *n = l;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint (const char *str, unsigned int *n)</div><div class='add'>+gf_string2uint(const char *str, unsigned int *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2uint (str, n, 0);</div><div class='add'>+    return _gf_string2uint(str, n, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2double (const char *str, double *n)</div><div class='add'>+gf_string2double(const char *str, double *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2double (str, n);</div><div class='add'>+    return _gf_string2double(str, n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2longlong (const char *str, long long *n)</div><div class='add'>+gf_string2longlong(const char *str, long long *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2longlong (str, n, 0);</div><div class='add'>+    return _gf_string2longlong(str, n, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2ulonglong (const char *str, unsigned long long *n)</div><div class='add'>+gf_string2ulonglong(const char *str, unsigned long long *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2ulonglong (str, n, 0);</div><div class='add'>+    return _gf_string2ulonglong(str, n, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2int8 (const char *str, int8_t *n)</div><div class='add'>+gf_string2int8(const char *str, int8_t *n)</div><div class='ctx'> {</div><div class='del'>-        long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2long (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2long(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if ((l &gt;= INT8_MIN) &amp;&amp; (l &lt;= INT8_MAX)) {</div><div class='del'>-                *n = (int8_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((l &gt;= INT8_MIN) &amp;&amp; (l &lt;= INT8_MAX)) {</div><div class='add'>+        *n = (int8_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2int16 (const char *str, int16_t *n)</div><div class='add'>+gf_string2int16(const char *str, int16_t *n)</div><div class='ctx'> {</div><div class='del'>-        long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2long (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2long(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if ((l &gt;= INT16_MIN) &amp;&amp; (l &lt;= INT16_MAX)) {</div><div class='del'>-                *n = (int16_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((l &gt;= INT16_MIN) &amp;&amp; (l &lt;= INT16_MAX)) {</div><div class='add'>+        *n = (int16_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2int32 (const char *str, int32_t *n)</div><div class='add'>+gf_string2int32(const char *str, int32_t *n)</div><div class='ctx'> {</div><div class='del'>-        long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2long (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2long(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if ((l &gt;= INT32_MIN) &amp;&amp; (l &lt;= INT32_MAX)) {</div><div class='del'>-                *n = (int32_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((l &gt;= INT32_MIN) &amp;&amp; (l &lt;= INT32_MAX)) {</div><div class='add'>+        *n = (int32_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2int64 (const char *str, int64_t *n)</div><div class='add'>+gf_string2int64(const char *str, int64_t *n)</div><div class='ctx'> {</div><div class='del'>-        long long l = 0LL;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    long long l = 0LL;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2longlong (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2longlong(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        *n = (int64_t) l;</div><div class='del'>-        return 0;</div><div class='add'>+    *n = (int64_t)l;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint8 (const char *str, uint8_t *n)</div><div class='add'>+gf_string2uint8(const char *str, uint8_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulong (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulong(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT8_MAX) {</div><div class='del'>-                *n = (uint8_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT8_MAX) {</div><div class='add'>+        *n = (uint8_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint16 (const char *str, uint16_t *n)</div><div class='add'>+gf_string2uint16(const char *str, uint16_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulong (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulong(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT16_MAX) {</div><div class='del'>-                *n = (uint16_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT16_MAX) {</div><div class='add'>+        *n = (uint16_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint32 (const char *str, uint32_t *n)</div><div class='add'>+gf_string2uint32(const char *str, uint32_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulong (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulong(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-	if (l &lt;= UINT32_MAX) {</div><div class='del'>-                *n = (uint32_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT32_MAX) {</div><div class='add'>+        *n = (uint32_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint64 (const char *str, uint64_t *n)</div><div class='add'>+gf_string2uint64(const char *str, uint64_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long long l = 0ULL;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long long l = 0ULL;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulonglong (str, &amp;l, 0);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulonglong(str, &amp;l, 0);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT64_MAX) {</div><div class='del'>-                *n = (uint64_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT64_MAX) {</div><div class='add'>+        *n = (uint64_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2ulong_base10 (const char *str, unsigned long *n)</div><div class='add'>+gf_string2ulong_base10(const char *str, unsigned long *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2ulong (str, n, 10);</div><div class='add'>+    return _gf_string2ulong(str, n, 10);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint_base10 (const char *str, unsigned int *n)</div><div class='add'>+gf_string2uint_base10(const char *str, unsigned int *n)</div><div class='ctx'> {</div><div class='del'>-        return _gf_string2uint (str,  n, 10);</div><div class='add'>+    return _gf_string2uint(str, n, 10);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint8_base10 (const char *str, uint8_t *n)</div><div class='add'>+gf_string2uint8_base10(const char *str, uint8_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulong (str, &amp;l, 10);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulong(str, &amp;l, 10);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT8_MAX) {</div><div class='del'>-                *n = (uint8_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT8_MAX) {</div><div class='add'>+        *n = (uint8_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint16_base10 (const char *str, uint16_t *n)</div><div class='add'>+gf_string2uint16_base10(const char *str, uint16_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulong (str, &amp;l, 10);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulong(str, &amp;l, 10);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT16_MAX) {</div><div class='del'>-                *n = (uint16_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT16_MAX) {</div><div class='add'>+        *n = (uint16_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint32_base10 (const char *str, uint32_t *n)</div><div class='add'>+gf_string2uint32_base10(const char *str, uint32_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long l = 0L;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long l = 0L;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulong (str, &amp;l, 10);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulong(str, &amp;l, 10);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT32_MAX) {</div><div class='del'>-                *n = (uint32_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT32_MAX) {</div><div class='add'>+        *n = (uint32_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2uint64_base10 (const char *str, uint64_t *n)</div><div class='add'>+gf_string2uint64_base10(const char *str, uint64_t *n)</div><div class='ctx'> {</div><div class='del'>-        unsigned long long l = 0ULL;</div><div class='del'>-        int rv = 0;</div><div class='add'>+    unsigned long long l = 0ULL;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        rv = _gf_string2ulonglong (str, &amp;l, 10);</div><div class='del'>-        if (rv != 0)</div><div class='del'>-                return rv;</div><div class='add'>+    rv = _gf_string2ulonglong(str, &amp;l, 10);</div><div class='add'>+    if (rv != 0)</div><div class='add'>+        return rv;</div><div class='ctx'> </div><div class='del'>-        if (l &lt;= UINT64_MAX) {</div><div class='del'>-                *n = (uint64_t) l;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (l &lt;= UINT64_MAX) {</div><div class='add'>+        *n = (uint64_t)l;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = ERANGE;</div><div class='del'>-        return -1;</div><div class='add'>+    errno = ERANGE;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_uint64_2human_readable (uint64_t n)</div><div class='del'>-{</div><div class='del'>-        int   ret = 0;</div><div class='del'>-        char *str = NULL;</div><div class='del'>-</div><div class='del'>-        if (n &gt;= GF_UNIT_PB) {</div><div class='del'>-                ret = gf_asprintf (&amp;str, "%.1lfPB", ((double) n)/GF_UNIT_PB);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        } else if (n &gt;= GF_UNIT_TB) {</div><div class='del'>-                ret = gf_asprintf (&amp;str, "%.1lfTB", ((double) n)/GF_UNIT_TB);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        } else if (n &gt;= GF_UNIT_GB) {</div><div class='del'>-                ret = gf_asprintf (&amp;str, "%.1lfGB", ((double) n)/GF_UNIT_GB);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        } else if (n &gt;= GF_UNIT_MB) {</div><div class='del'>-                ret = gf_asprintf (&amp;str, "%.1lfMB", ((double) n)/GF_UNIT_MB);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        } else if (n &gt;= GF_UNIT_KB) {</div><div class='del'>-                ret = gf_asprintf (&amp;str, "%.1lfKB", ((double) n)/GF_UNIT_KB);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        } else {</div><div class='del'>-                ret = gf_asprintf (&amp;str, "%luBytes", n);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='del'>-        return str;</div><div class='add'>+gf_uint64_2human_readable(uint64_t n)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+</div><div class='add'>+    if (n &gt;= GF_UNIT_PB) {</div><div class='add'>+        ret = gf_asprintf(&amp;str, "%.1lfPB", ((double)n) / GF_UNIT_PB);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    } else if (n &gt;= GF_UNIT_TB) {</div><div class='add'>+        ret = gf_asprintf(&amp;str, "%.1lfTB", ((double)n) / GF_UNIT_TB);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    } else if (n &gt;= GF_UNIT_GB) {</div><div class='add'>+        ret = gf_asprintf(&amp;str, "%.1lfGB", ((double)n) / GF_UNIT_GB);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    } else if (n &gt;= GF_UNIT_MB) {</div><div class='add'>+        ret = gf_asprintf(&amp;str, "%.1lfMB", ((double)n) / GF_UNIT_MB);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    } else if (n &gt;= GF_UNIT_KB) {</div><div class='add'>+        ret = gf_asprintf(&amp;str, "%.1lfKB", ((double)n) / GF_UNIT_KB);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_asprintf(&amp;str, "%luBytes", n);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+    return str;</div><div class='ctx'> err:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2bytesize_range (const char *str, uint64_t *n, uint64_t umax)</div><div class='del'>-{</div><div class='del'>-        double        value      = 0.0;</div><div class='del'>-        int64_t       int_value  = 0;</div><div class='del'>-        uint64_t      unit       = 0;</div><div class='del'>-        int64_t       max        = 0;</div><div class='del'>-        char         *tail       = NULL;</div><div class='del'>-        int           old_errno  = 0;</div><div class='del'>-        const char   *s          = NULL;</div><div class='del'>-        gf_boolean_t  fraction   = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+gf_string2bytesize_range(const char *str, uint64_t *n, uint64_t umax)</div><div class='add'>+{</div><div class='add'>+    double value = 0.0;</div><div class='add'>+    int64_t int_value = 0;</div><div class='add'>+    uint64_t unit = 0;</div><div class='add'>+    int64_t max = 0;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='add'>+    gf_boolean_t fraction = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        max = umax &amp; 0x7fffffffffffffffLL;</div><div class='add'>+    max = umax &amp; 0x7fffffffffffffffLL;</div><div class='ctx'> </div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strrchr (str, '.'))</div><div class='del'>-                fraction = _gf_true;</div><div class='add'>+    if (strrchr(str, '.'))</div><div class='add'>+        fraction = _gf_true;</div><div class='ctx'> </div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        if (fraction)</div><div class='del'>-                value = strtod (str, &amp;tail);</div><div class='del'>-        else</div><div class='del'>-                int_value = strtoll (str, &amp;tail, 10);</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    if (fraction)</div><div class='add'>+        value = strtod(str, &amp;tail);</div><div class='add'>+    else</div><div class='add'>+        int_value = strtoll(str, &amp;tail, 10);</div><div class='ctx'> </div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='ctx'> </div><div class='del'>-        if (tail[0] != '\0')</div><div class='del'>-        {</div><div class='del'>-                if (strcasecmp (tail, GF_UNIT_KB_STRING) == 0)</div><div class='del'>-                        unit = GF_UNIT_KB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_MB_STRING) == 0)</div><div class='del'>-                        unit = GF_UNIT_MB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_GB_STRING) == 0)</div><div class='del'>-                        unit = GF_UNIT_GB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_TB_STRING) == 0)</div><div class='del'>-                        unit = GF_UNIT_TB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_PB_STRING) == 0)</div><div class='del'>-                        unit = GF_UNIT_PB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_B_STRING) != 0)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                if (unit &gt; 0) {</div><div class='del'>-                        if (fraction)</div><div class='del'>-                                value *= unit;</div><div class='del'>-                        else</div><div class='del'>-                                int_value *= unit;</div><div class='del'>-                }</div><div class='add'>+    if (tail[0] != '\0') {</div><div class='add'>+        if (strcasecmp(tail, GF_UNIT_KB_STRING) == 0)</div><div class='add'>+            unit = GF_UNIT_KB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_MB_STRING) == 0)</div><div class='add'>+            unit = GF_UNIT_MB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_GB_STRING) == 0)</div><div class='add'>+            unit = GF_UNIT_GB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_TB_STRING) == 0)</div><div class='add'>+            unit = GF_UNIT_TB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_PB_STRING) == 0)</div><div class='add'>+            unit = GF_UNIT_PB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_B_STRING) != 0)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        if (unit &gt; 0) {</div><div class='add'>+            if (fraction)</div><div class='add'>+                value *= unit;</div><div class='add'>+            else</div><div class='add'>+                int_value *= unit;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fraction) {</div><div class='del'>-                if ((max - value) &lt; 0) {</div><div class='del'>-                        errno = ERANGE;</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                *n = (uint64_t) value;</div><div class='del'>-        } else {</div><div class='del'>-                if ((max - int_value) &lt; 0) {</div><div class='del'>-                        errno = ERANGE;</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                *n = int_value;</div><div class='add'>+    if (fraction) {</div><div class='add'>+        if ((max - value) &lt; 0) {</div><div class='add'>+            errno = ERANGE;</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        *n = (uint64_t)value;</div><div class='add'>+    } else {</div><div class='add'>+        if ((max - int_value) &lt; 0) {</div><div class='add'>+            errno = ERANGE;</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        *n = int_value;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2bytesize_size (const char *str, size_t *n)</div><div class='add'>+gf_string2bytesize_size(const char *str, size_t *n)</div><div class='ctx'> {</div><div class='del'>-        uint64_t u64;</div><div class='del'>-        size_t max = (size_t) - 1;</div><div class='del'>-        int val = gf_string2bytesize_range (str, &amp;u64, max);</div><div class='del'>-        *n = (size_t) u64;</div><div class='del'>-        return val;</div><div class='add'>+    uint64_t u64;</div><div class='add'>+    size_t max = (size_t)-1;</div><div class='add'>+    int val = gf_string2bytesize_range(str, &amp;u64, max);</div><div class='add'>+    *n = (size_t)u64;</div><div class='add'>+    return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2bytesize (const char *str, uint64_t *n)</div><div class='add'>+gf_string2bytesize(const char *str, uint64_t *n)</div><div class='ctx'> {</div><div class='del'>-        return gf_string2bytesize_range(str, n, UINT64_MAX);</div><div class='add'>+    return gf_string2bytesize_range(str, n, UINT64_MAX);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2bytesize_uint64 (const char *str, uint64_t *n)</div><div class='add'>+gf_string2bytesize_uint64(const char *str, uint64_t *n)</div><div class='ctx'> {</div><div class='del'>-        return gf_string2bytesize_range(str, n, UINT64_MAX);</div><div class='add'>+    return gf_string2bytesize_range(str, n, UINT64_MAX);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2bytesize_int64 (const char *str, int64_t *n)</div><div class='add'>+gf_string2bytesize_int64(const char *str, int64_t *n)</div><div class='ctx'> {</div><div class='del'>-        uint64_t u64 = 0;</div><div class='del'>-        int      ret = 0;</div><div class='add'>+    uint64_t u64 = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = gf_string2bytesize_range(str, &amp;u64, INT64_MAX);</div><div class='del'>-        *n = (int64_t) u64;</div><div class='del'>-        return ret;</div><div class='add'>+    ret = gf_string2bytesize_range(str, &amp;u64, INT64_MAX);</div><div class='add'>+    *n = (int64_t)u64;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2percent_or_bytesize (const char *str, double *n,</div><div class='del'>-			       gf_boolean_t *is_percent)</div><div class='del'>-{</div><div class='del'>-        double value = 0ULL;</div><div class='del'>-        char *tail = NULL;</div><div class='del'>-        int old_errno = 0;</div><div class='del'>-        const char *s = NULL;</div><div class='del'>-</div><div class='del'>-        if (str == NULL || n == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (s = str; *s != '\0'; s++) {</div><div class='del'>-                if (isspace (*s))</div><div class='del'>-                        continue;</div><div class='del'>-                if (*s == '-')</div><div class='del'>-                        return -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+gf_string2percent_or_bytesize(const char *str, double *n,</div><div class='add'>+                              gf_boolean_t *is_percent)</div><div class='add'>+{</div><div class='add'>+    double value = 0ULL;</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    int old_errno = 0;</div><div class='add'>+    const char *s = NULL;</div><div class='add'>+</div><div class='add'>+    if (str == NULL || n == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (s = str; *s != '\0'; s++) {</div><div class='add'>+        if (isspace(*s))</div><div class='add'>+            continue;</div><div class='add'>+        if (*s == '-')</div><div class='add'>+            return -1;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_errno = errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtod(str, &amp;tail);</div><div class='add'>+    if (str == tail)</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (errno == ERANGE || errno == EINVAL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        old_errno = errno;</div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtod (str, &amp;tail);</div><div class='del'>-        if (str == tail)</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (errno == ERANGE || errno == EINVAL)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (errno == 0)</div><div class='del'>-                errno = old_errno;</div><div class='del'>-</div><div class='del'>-        /*Maximum accepted value for 64 bit OS will be (2^14 -1)PB*/</div><div class='del'>-        if (tail[0] != '\0') {</div><div class='del'>-                if (strcasecmp (tail, GF_UNIT_KB_STRING) == 0)</div><div class='del'>-                        value *= GF_UNIT_KB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_MB_STRING) == 0)</div><div class='del'>-                        value *= GF_UNIT_MB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_GB_STRING) == 0)</div><div class='del'>-                        value *= GF_UNIT_GB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_TB_STRING) == 0)</div><div class='del'>-                        value *= GF_UNIT_TB;</div><div class='del'>-                else if (strcasecmp (tail, GF_UNIT_PB_STRING) == 0)</div><div class='del'>-                        value *= GF_UNIT_PB;</div><div class='del'>-		else if (strcasecmp (tail, GF_UNIT_PERCENT_STRING) == 0)</div><div class='del'>-			*is_percent = _gf_true;</div><div class='del'>-                else</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='add'>+    if (errno == 0)</div><div class='add'>+        errno = old_errno;</div><div class='add'>+</div><div class='add'>+    /*Maximum accepted value for 64 bit OS will be (2^14 -1)PB*/</div><div class='add'>+    if (tail[0] != '\0') {</div><div class='add'>+        if (strcasecmp(tail, GF_UNIT_KB_STRING) == 0)</div><div class='add'>+            value *= GF_UNIT_KB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_MB_STRING) == 0)</div><div class='add'>+            value *= GF_UNIT_MB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_GB_STRING) == 0)</div><div class='add'>+            value *= GF_UNIT_GB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_TB_STRING) == 0)</div><div class='add'>+            value *= GF_UNIT_TB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_PB_STRING) == 0)</div><div class='add'>+            value *= GF_UNIT_PB;</div><div class='add'>+        else if (strcasecmp(tail, GF_UNIT_PERCENT_STRING) == 0)</div><div class='add'>+            *is_percent = _gf_true;</div><div class='add'>+        else</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Error out if we cannot store the value in uint64 */</div><div class='del'>-        if ((UINT64_MAX - value) &lt; 0) {</div><div class='del'>-                errno = ERANGE;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* Error out if we cannot store the value in uint64 */</div><div class='add'>+    if ((UINT64_MAX - value) &lt; 0) {</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *n = value;</div><div class='add'>+    *n = value;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int64_t</div><div class='del'>-gf_str_to_long_long (const char *number)</div><div class='del'>-{</div><div class='del'>-        int64_t unit = 1;</div><div class='del'>-        int64_t ret = 0;</div><div class='del'>-        char *endptr = NULL ;</div><div class='del'>-        if (!number)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        ret = strtoll (number, &amp;endptr, 0);</div><div class='del'>-</div><div class='del'>-        if (endptr) {</div><div class='del'>-                switch (*endptr) {</div><div class='del'>-                case 'G':</div><div class='del'>-                case 'g':</div><div class='del'>-                        if ((* (endptr + 1) == 'B') ||(* (endptr + 1) == 'b'))</div><div class='del'>-                                unit = 1024 * 1024 * 1024;</div><div class='del'>-                        break;</div><div class='del'>-                case 'M':</div><div class='del'>-                case 'm':</div><div class='del'>-                        if ((* (endptr + 1) == 'B') ||(* (endptr + 1) == 'b'))</div><div class='del'>-                                unit = 1024 * 1024;</div><div class='del'>-                        break;</div><div class='del'>-                case 'K':</div><div class='del'>-                case 'k':</div><div class='del'>-                        if ((* (endptr + 1) == 'B') ||(* (endptr + 1) == 'b'))</div><div class='del'>-                                unit = 1024;</div><div class='del'>-                        break;</div><div class='del'>-                case '%':</div><div class='del'>-                        unit = 1;</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        unit = 1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+gf_str_to_long_long(const char *number)</div><div class='add'>+{</div><div class='add'>+    int64_t unit = 1;</div><div class='add'>+    int64_t ret = 0;</div><div class='add'>+    char *endptr = NULL;</div><div class='add'>+    if (!number)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    ret = strtoll(number, &amp;endptr, 0);</div><div class='add'>+</div><div class='add'>+    if (endptr) {</div><div class='add'>+        switch (*endptr) {</div><div class='add'>+            case 'G':</div><div class='add'>+            case 'g':</div><div class='add'>+                if ((*(endptr + 1) == 'B') || (*(endptr + 1) == 'b'))</div><div class='add'>+                    unit = 1024 * 1024 * 1024;</div><div class='add'>+                break;</div><div class='add'>+            case 'M':</div><div class='add'>+            case 'm':</div><div class='add'>+                if ((*(endptr + 1) == 'B') || (*(endptr + 1) == 'b'))</div><div class='add'>+                    unit = 1024 * 1024;</div><div class='add'>+                break;</div><div class='add'>+            case 'K':</div><div class='add'>+            case 'k':</div><div class='add'>+                if ((*(endptr + 1) == 'B') || (*(endptr + 1) == 'b'))</div><div class='add'>+                    unit = 1024;</div><div class='add'>+                break;</div><div class='add'>+            case '%':</div><div class='add'>+                unit = 1;</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                unit = 1;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        return ret * unit;</div><div class='add'>+    }</div><div class='add'>+    return ret * unit;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_string2boolean (const char *str, gf_boolean_t *b)</div><div class='add'>+gf_string2boolean(const char *str, gf_boolean_t *b)</div><div class='ctx'> {</div><div class='del'>-        if (str == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (str == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((strcasecmp (str, "1") == 0) ||</div><div class='del'>-            (strcasecmp (str, "on") == 0) ||</div><div class='del'>-            (strcasecmp (str, "yes") == 0) ||</div><div class='del'>-            (strcasecmp (str, "true") == 0) ||</div><div class='del'>-            (strcasecmp (str, "enable") == 0)) {</div><div class='del'>-                *b = _gf_true;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((strcasecmp(str, "1") == 0) || (strcasecmp(str, "on") == 0) ||</div><div class='add'>+        (strcasecmp(str, "yes") == 0) || (strcasecmp(str, "true") == 0) ||</div><div class='add'>+        (strcasecmp(str, "enable") == 0)) {</div><div class='add'>+        *b = _gf_true;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((strcasecmp (str, "0") == 0) ||</div><div class='del'>-            (strcasecmp (str, "off") == 0) ||</div><div class='del'>-            (strcasecmp (str, "no") == 0) ||</div><div class='del'>-            (strcasecmp (str, "false") == 0) ||</div><div class='del'>-            (strcasecmp (str, "disable") == 0)) {</div><div class='del'>-                *b = _gf_false;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((strcasecmp(str, "0") == 0) || (strcasecmp(str, "off") == 0) ||</div><div class='add'>+        (strcasecmp(str, "no") == 0) || (strcasecmp(str, "false") == 0) ||</div><div class='add'>+        (strcasecmp(str, "disable") == 0)) {</div><div class='add'>+        *b = _gf_false;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_lockfd (int fd)</div><div class='add'>+gf_lockfd(int fd)</div><div class='ctx'> {</div><div class='del'>-        struct gf_flock fl;</div><div class='add'>+    struct gf_flock fl;</div><div class='ctx'> </div><div class='del'>-        fl.l_type = F_WRLCK;</div><div class='del'>-        fl.l_whence = SEEK_SET;</div><div class='del'>-        fl.l_start = 0;</div><div class='del'>-        fl.l_len = 0;</div><div class='add'>+    fl.l_type = F_WRLCK;</div><div class='add'>+    fl.l_whence = SEEK_SET;</div><div class='add'>+    fl.l_start = 0;</div><div class='add'>+    fl.l_len = 0;</div><div class='ctx'> </div><div class='del'>-        return fcntl (fd, F_SETLK, &amp;fl);</div><div class='add'>+    return fcntl(fd, F_SETLK, &amp;fl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_unlockfd (int fd)</div><div class='add'>+gf_unlockfd(int fd)</div><div class='ctx'> {</div><div class='del'>-        struct gf_flock fl;</div><div class='add'>+    struct gf_flock fl;</div><div class='ctx'> </div><div class='del'>-        fl.l_type = F_UNLCK;</div><div class='del'>-        fl.l_whence = SEEK_SET;</div><div class='del'>-        fl.l_start = 0;</div><div class='del'>-        fl.l_len = 0;</div><div class='add'>+    fl.l_type = F_UNLCK;</div><div class='add'>+    fl.l_whence = SEEK_SET;</div><div class='add'>+    fl.l_start = 0;</div><div class='add'>+    fl.l_len = 0;</div><div class='ctx'> </div><div class='del'>-        return fcntl (fd, F_SETLK, &amp;fl);</div><div class='add'>+    return fcntl(fd, F_SETLK, &amp;fl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-compute_checksum (char *buf, size_t size, uint32_t *checksum)</div><div class='add'>+compute_checksum(char *buf, size_t size, uint32_t *checksum)</div><div class='ctx'> {</div><div class='del'>-        int  ret = -1;</div><div class='del'>-        char *checksum_buf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *checksum_buf = NULL;</div><div class='ctx'> </div><div class='del'>-        checksum_buf = (char *)(checksum);</div><div class='add'>+    checksum_buf = (char *)(checksum);</div><div class='ctx'> </div><div class='del'>-        if (!(*checksum)) {</div><div class='del'>-                checksum_buf [0] = 0xba;</div><div class='del'>-                checksum_buf [1] = 0xbe;</div><div class='del'>-                checksum_buf [2] = 0xb0;</div><div class='del'>-                checksum_buf [3] = 0x0b;</div><div class='del'>-        }</div><div class='add'>+    if (!(*checksum)) {</div><div class='add'>+        checksum_buf[0] = 0xba;</div><div class='add'>+        checksum_buf[1] = 0xbe;</div><div class='add'>+        checksum_buf[2] = 0xb0;</div><div class='add'>+        checksum_buf[3] = 0x0b;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (ret = 0; ret &lt; (size - 4); ret += 4) {</div><div class='del'>-                checksum_buf[0] ^= (buf[ret]);</div><div class='del'>-                checksum_buf[1] ^= (buf[ret + 1] &lt;&lt; 1) ;</div><div class='del'>-                checksum_buf[2] ^= (buf[ret + 2] &lt;&lt; 2);</div><div class='del'>-                checksum_buf[3] ^= (buf[ret + 3] &lt;&lt; 3);</div><div class='del'>-        }</div><div class='add'>+    for (ret = 0; ret &lt; (size - 4); ret += 4) {</div><div class='add'>+        checksum_buf[0] ^= (buf[ret]);</div><div class='add'>+        checksum_buf[1] ^= (buf[ret + 1] &lt;&lt; 1);</div><div class='add'>+        checksum_buf[2] ^= (buf[ret + 2] &lt;&lt; 2);</div><div class='add'>+        checksum_buf[3] ^= (buf[ret + 3] &lt;&lt; 3);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (ret = 0; ret &lt;= (size % 4); ret++) {</div><div class='del'>-                checksum_buf[ret] ^= (buf[(size - 4) + ret] &lt;&lt; ret);</div><div class='del'>-        }</div><div class='add'>+    for (ret = 0; ret &lt;= (size % 4); ret++) {</div><div class='add'>+        checksum_buf[ret] ^= (buf[(size - 4) + ret] &lt;&lt; ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define GF_CHECKSUM_BUF_SIZE 1024</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-get_checksum_for_file (int fd, uint32_t *checksum)</div><div class='add'>+get_checksum_for_file(int fd, uint32_t *checksum)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char buf[GF_CHECKSUM_BUF_SIZE] = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char buf[GF_CHECKSUM_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        /* goto first place */</div><div class='del'>-        sys_lseek (fd, 0L, SEEK_SET);</div><div class='del'>-        do {</div><div class='del'>-                ret = sys_read (fd, &amp;buf, GF_CHECKSUM_BUF_SIZE);</div><div class='del'>-                if (ret &gt; 0)</div><div class='del'>-                        compute_checksum (buf, GF_CHECKSUM_BUF_SIZE,</div><div class='del'>-                                          checksum);</div><div class='del'>-        } while (ret &gt; 0);</div><div class='add'>+    /* goto first place */</div><div class='add'>+    sys_lseek(fd, 0L, SEEK_SET);</div><div class='add'>+    do {</div><div class='add'>+        ret = sys_read(fd, &amp;buf, GF_CHECKSUM_BUF_SIZE);</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            compute_checksum(buf, GF_CHECKSUM_BUF_SIZE, checksum);</div><div class='add'>+    } while (ret &gt; 0);</div><div class='ctx'> </div><div class='del'>-        /* set it back */</div><div class='del'>-        sys_lseek (fd, 0L, SEEK_SET);</div><div class='add'>+    /* set it back */</div><div class='add'>+    sys_lseek(fd, 0L, SEEK_SET);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-get_checksum_for_path (char *path, uint32_t *checksum)</div><div class='add'>+get_checksum_for_path(char *path, uint32_t *checksum)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        int     fd = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (path);</div><div class='del'>-        GF_ASSERT (checksum);</div><div class='add'>+    GF_ASSERT(path);</div><div class='add'>+    GF_ASSERT(checksum);</div><div class='ctx'> </div><div class='del'>-        fd = open (path, O_RDWR);</div><div class='add'>+    fd = open(path, O_RDWR);</div><div class='ctx'> </div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_PATH_ERROR,</div><div class='del'>-                        "Unable to open %s", path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_PATH_ERROR,</div><div class='add'>+               "Unable to open %s", path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = get_checksum_for_file (fd, checksum);</div><div class='add'>+    ret = get_checksum_for_file(fd, checksum);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd != -1)</div><div class='del'>-                sys_close (fd);</div><div class='add'>+    if (fd != -1)</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2071,26 +2077,25 @@ out:</div><div class='ctx'>  *           errors : Errors returned by the stat () call</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-get_file_mtime (const char *path, time_t *stamp)</div><div class='add'>+get_file_mtime(const char *path, time_t *stamp)</div><div class='ctx'> {</div><div class='del'>-        struct stat     f_stat  = {0};</div><div class='del'>-        int             ret     = -EINVAL;</div><div class='add'>+    struct stat f_stat = {0};</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, path, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, stamp, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, path, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, stamp, out);</div><div class='ctx'> </div><div class='del'>-        ret = sys_stat (path, &amp;f_stat);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_FILE_STAT_FAILED, "failed to stat %s",</div><div class='del'>-                        path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = sys_stat(path, &amp;f_stat);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FILE_STAT_FAILED,</div><div class='add'>+               "failed to stat %s", path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Set the mtime */</div><div class='del'>-        *stamp = f_stat.st_mtime;</div><div class='add'>+    /* Set the mtime */</div><div class='add'>+    *stamp = f_stat.st_mtime;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2106,117 +2111,117 @@ out:</div><div class='ctx'>  *          failure: -EINVAL for bad args, retval of inet_pton otherwise</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_ip_in_net (const char *network, const char *ip_str)</div><div class='del'>-{</div><div class='del'>-        unsigned long ip_buf       = 0;</div><div class='del'>-        unsigned long net_ip_buf   = 0;</div><div class='del'>-        unsigned long subnet_mask  = 0;</div><div class='del'>-        int           ret          = -EINVAL;</div><div class='del'>-        char          *slash       = NULL;</div><div class='del'>-        char          *net_ip      = NULL;</div><div class='del'>-        char          *subnet      = NULL;</div><div class='del'>-        char          *net_str     = NULL;</div><div class='del'>-        int           family       = AF_INET;</div><div class='del'>-        gf_boolean_t  result       = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (network);</div><div class='del'>-        GF_ASSERT (ip_str);</div><div class='del'>-</div><div class='del'>-        if (strchr (network, ':'))</div><div class='del'>-                family = AF_INET6;</div><div class='del'>-        else if (strchr (network, '.'))</div><div class='del'>-                family = AF_INET;</div><div class='del'>-        else {</div><div class='del'>-                family = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        net_str = strdupa (network);</div><div class='del'>-        slash = strchr (net_str, '/');</div><div class='del'>-        if (!slash)</div><div class='del'>-                goto out;</div><div class='del'>-        *slash = '\0';</div><div class='del'>-</div><div class='del'>-        subnet = slash + 1;</div><div class='del'>-        net_ip = net_str;</div><div class='del'>-</div><div class='del'>-        /* Convert IP address to a long */</div><div class='del'>-        ret = inet_pton (family, ip_str, &amp;ip_buf);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_INET_PTON_FAILED, "inet_pton() failed");</div><div class='del'>-</div><div class='del'>-        /* Convert network IP address to a long */</div><div class='del'>-        ret = inet_pton (family, net_ip, &amp;net_ip_buf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_INET_PTON_FAILED, "inet_pton() failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Converts /x into a mask */</div><div class='del'>-        subnet_mask = (1 &lt;&lt; atoi (subnet)) - 1;</div><div class='del'>-</div><div class='del'>-        result = ((ip_buf &amp; subnet_mask) == (net_ip_buf &amp; subnet_mask));</div><div class='add'>+gf_is_ip_in_net(const char *network, const char *ip_str)</div><div class='add'>+{</div><div class='add'>+    unsigned long ip_buf = 0;</div><div class='add'>+    unsigned long net_ip_buf = 0;</div><div class='add'>+    unsigned long subnet_mask = 0;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    char *slash = NULL;</div><div class='add'>+    char *net_ip = NULL;</div><div class='add'>+    char *subnet = NULL;</div><div class='add'>+    char *net_str = NULL;</div><div class='add'>+    int family = AF_INET;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(network);</div><div class='add'>+    GF_ASSERT(ip_str);</div><div class='add'>+</div><div class='add'>+    if (strchr(network, ':'))</div><div class='add'>+        family = AF_INET6;</div><div class='add'>+    else if (strchr(network, '.'))</div><div class='add'>+        family = AF_INET;</div><div class='add'>+    else {</div><div class='add'>+        family = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    net_str = strdupa(network);</div><div class='add'>+    slash = strchr(net_str, '/');</div><div class='add'>+    if (!slash)</div><div class='add'>+        goto out;</div><div class='add'>+    *slash = '\0';</div><div class='add'>+</div><div class='add'>+    subnet = slash + 1;</div><div class='add'>+    net_ip = net_str;</div><div class='add'>+</div><div class='add'>+    /* Convert IP address to a long */</div><div class='add'>+    ret = inet_pton(family, ip_str, &amp;ip_buf);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg("common-utils", GF_LOG_ERROR, errno, LG_MSG_INET_PTON_FAILED,</div><div class='add'>+               "inet_pton() failed");</div><div class='add'>+</div><div class='add'>+    /* Convert network IP address to a long */</div><div class='add'>+    ret = inet_pton(family, net_ip, &amp;net_ip_buf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("common-utils", GF_LOG_ERROR, errno, LG_MSG_INET_PTON_FAILED,</div><div class='add'>+               "inet_pton() failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Converts /x into a mask */</div><div class='add'>+    subnet_mask = (1 &lt;&lt; atoi(subnet)) - 1;</div><div class='add'>+</div><div class='add'>+    result = ((ip_buf &amp; subnet_mask) == (net_ip_buf &amp; subnet_mask));</div><div class='ctx'> out:</div><div class='del'>-        return result;</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-strtail (char *str, const char *pattern)</div><div class='add'>+strtail(char *str, const char *pattern)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; str[i] == pattern[i] &amp;&amp; str[i]; i++);</div><div class='add'>+    for (i = 0; str[i] == pattern[i] &amp;&amp; str[i]; i++)</div><div class='add'>+        ;</div><div class='ctx'> </div><div class='del'>-        if (pattern[i] == '\0')</div><div class='del'>-                return str + i;</div><div class='add'>+    if (pattern[i] == '\0')</div><div class='add'>+        return str + i;</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-skipwhite (char **s)</div><div class='add'>+skipwhite(char **s)</div><div class='ctx'> {</div><div class='del'>-        while (isspace (**s))</div><div class='del'>-                (*s)++;</div><div class='add'>+    while (isspace(**s))</div><div class='add'>+        (*s)++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_strTrim (char **s)</div><div class='add'>+gf_strTrim(char **s)</div><div class='ctx'> {</div><div class='del'>-        char *end = NULL;</div><div class='add'>+    char *end = NULL;</div><div class='ctx'> </div><div class='del'>-        end = *s + strlen(*s) - 1;</div><div class='del'>-        while (end &gt; *s &amp;&amp; isspace ((unsigned char)*end))</div><div class='del'>-                end--;</div><div class='add'>+    end = *s + strlen(*s) - 1;</div><div class='add'>+    while (end &gt; *s &amp;&amp; isspace((unsigned char)*end))</div><div class='add'>+        end--;</div><div class='ctx'> </div><div class='del'>-        *(end+1) = '\0';</div><div class='add'>+    *(end + 1) = '\0';</div><div class='ctx'> </div><div class='del'>-        while (isspace (**s))</div><div class='del'>-                (*s)++;</div><div class='add'>+    while (isspace(**s))</div><div class='add'>+        (*s)++;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-nwstrtail (char *str, char *pattern)</div><div class='add'>+nwstrtail(char *str, char *pattern)</div><div class='ctx'> {</div><div class='del'>-        for (;;) {</div><div class='del'>-                skipwhite (&amp;str);</div><div class='del'>-                skipwhite (&amp;pattern);</div><div class='add'>+    for (;;) {</div><div class='add'>+        skipwhite(&amp;str);</div><div class='add'>+        skipwhite(&amp;pattern);</div><div class='ctx'> </div><div class='del'>-                if (*str != *pattern || !*str)</div><div class='del'>-                        break;</div><div class='add'>+        if (*str != *pattern || !*str)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                str++;</div><div class='del'>-                pattern++;</div><div class='del'>-        }</div><div class='add'>+        str++;</div><div class='add'>+        pattern++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return *pattern ? NULL : str;</div><div class='add'>+    return *pattern ? NULL : str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * token_iter_init -- initialize tokenization</div><div class='ctx'>  *</div><div class='hunk'>@@ -2231,12 +2236,12 @@ nwstrtail (char *str, char *pattern)</div><div class='ctx'>  * next_token().</div><div class='ctx'>  */</div><div class='ctx'> char *</div><div class='del'>-token_iter_init (char *str, char sep, token_iter_t *tit)</div><div class='add'>+token_iter_init(char *str, char sep, token_iter_t *tit)</div><div class='ctx'> {</div><div class='del'>-        tit-&gt;end = str + strlen (str);</div><div class='del'>-        tit-&gt;sep = sep;</div><div class='add'>+    tit-&gt;end = str + strlen(str);</div><div class='add'>+    tit-&gt;sep = sep;</div><div class='ctx'> </div><div class='del'>-        return str;</div><div class='add'>+    return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2256,30 +2261,32 @@ token_iter_init (char *str, char sep, token_iter_t *tit)</div><div class='ctx'>  * apart from dropped tokens (see drop_token()).</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-next_token (char **tokenp, token_iter_t *tit)</div><div class='del'>-{</div><div class='del'>-        char        *cursor  = NULL;</div><div class='del'>-        gf_boolean_t is_last = _gf_false;</div><div class='del'>-</div><div class='del'>-        for (cursor = *tokenp; *cursor; cursor++);</div><div class='del'>-        if (cursor &lt; tit-&gt;end) {</div><div class='del'>-                /*</div><div class='del'>-                 * We detect that in between current token and end a zero</div><div class='del'>-                 * marker has already been inserted. This means that the</div><div class='del'>-                 * token has already been returned. We restore the</div><div class='del'>-                 * separator and move ahead.</div><div class='del'>-                 */</div><div class='del'>-                *cursor = tit-&gt;sep;</div><div class='del'>-                *tokenp = cursor + 1;</div><div class='del'>-        }</div><div class='add'>+next_token(char **tokenp, token_iter_t *tit)</div><div class='add'>+{</div><div class='add'>+    char *cursor = NULL;</div><div class='add'>+    gf_boolean_t is_last = _gf_false;</div><div class='ctx'> </div><div class='del'>-        for (cursor = *tokenp; *cursor &amp;&amp; *cursor != tit-&gt;sep; cursor++);</div><div class='del'>-        /* If the cursor ended up on a zero byte, then it's the last token. */</div><div class='del'>-        is_last = !*cursor;</div><div class='del'>-        /* Zero-terminate the token. */</div><div class='del'>-        *cursor = 0;</div><div class='add'>+    for (cursor = *tokenp; *cursor; cursor++)</div><div class='add'>+        ;</div><div class='add'>+    if (cursor &lt; tit-&gt;end) {</div><div class='add'>+        /*</div><div class='add'>+         * We detect that in between current token and end a zero</div><div class='add'>+         * marker has already been inserted. This means that the</div><div class='add'>+         * token has already been returned. We restore the</div><div class='add'>+         * separator and move ahead.</div><div class='add'>+         */</div><div class='add'>+        *cursor = tit-&gt;sep;</div><div class='add'>+        *tokenp = cursor + 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return is_last;</div><div class='add'>+    for (cursor = *tokenp; *cursor &amp;&amp; *cursor != tit-&gt;sep; cursor++)</div><div class='add'>+        ;</div><div class='add'>+    /* If the cursor ended up on a zero byte, then it's the last token. */</div><div class='add'>+    is_last = !*cursor;</div><div class='add'>+    /* Zero-terminate the token. */</div><div class='add'>+    *cursor = 0;</div><div class='add'>+</div><div class='add'>+    return is_last;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2330,142 +2337,143 @@ next_token (char **tokenp, token_iter_t *tit)</div><div class='ctx'>  * }</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-drop_token (char *token, token_iter_t *tit)</div><div class='del'>-{</div><div class='del'>-        char *cursor = NULL;</div><div class='del'>-</div><div class='del'>-        for (cursor = token; *cursor; cursor++);</div><div class='del'>-        if (cursor &lt; tit-&gt;end) {</div><div class='del'>-                /*</div><div class='del'>-                 * We detect a zero inserted by next_token().</div><div class='del'>-                 * Step the cursor and copy what comes after</div><div class='del'>-                 * to token.</div><div class='del'>-                 */</div><div class='del'>-                for (cursor++; cursor &lt; tit-&gt;end; *token++ = *cursor++);</div><div class='del'>-        }</div><div class='add'>+drop_token(char *token, token_iter_t *tit)</div><div class='add'>+{</div><div class='add'>+    char *cursor = NULL;</div><div class='ctx'> </div><div class='add'>+    for (cursor = token; *cursor; cursor++)</div><div class='add'>+        ;</div><div class='add'>+    if (cursor &lt; tit-&gt;end) {</div><div class='ctx'>         /*</div><div class='del'>-         * Zero out the remainder of the buffer.</div><div class='del'>-         * It would be enough to insert just a single zero,</div><div class='del'>-         * but we continue 'till the end to have cleaner</div><div class='del'>-         * memory content.</div><div class='add'>+         * We detect a zero inserted by next_token().</div><div class='add'>+         * Step the cursor and copy what comes after</div><div class='add'>+         * to token.</div><div class='ctx'>          */</div><div class='del'>-        for (cursor = token; cursor &lt; tit-&gt;end; *cursor++ = 0);</div><div class='add'>+        for (cursor++; cursor &lt; tit-&gt;end; *token++ = *cursor++)</div><div class='add'>+            ;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Adjust the end to point to the new terminating zero. */</div><div class='del'>-        tit-&gt;end = token;</div><div class='add'>+    /*</div><div class='add'>+     * Zero out the remainder of the buffer.</div><div class='add'>+     * It would be enough to insert just a single zero,</div><div class='add'>+     * but we continue 'till the end to have cleaner</div><div class='add'>+     * memory content.</div><div class='add'>+     */</div><div class='add'>+    for (cursor = token; cursor &lt; tit-&gt;end; *cursor++ = 0)</div><div class='add'>+        ;</div><div class='add'>+</div><div class='add'>+    /* Adjust the end to point to the new terminating zero. */</div><div class='add'>+    tit-&gt;end = token;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Syntax formed according to RFC 1912 (RFC 1123 &amp; 952 are more restrictive)  *</div><div class='ctx'>    &lt;hname&gt; ::= &lt;gen-name&gt;*["."&lt;gen-name&gt;]                                     *</div><div class='ctx'>    &lt;gen-name&gt; ::= &lt;let-or-digit&gt; &lt;[*[&lt;let-or-digit-or-hyphen&gt;]&lt;let-or-digit&gt;] */</div><div class='ctx'> char</div><div class='del'>-valid_host_name (char *address, int length)</div><div class='add'>+valid_host_name(char *address, int length)</div><div class='ctx'> {</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             str_len = 0;</div><div class='del'>-        char            ret = 1;</div><div class='del'>-        char            *dup_addr = NULL;</div><div class='del'>-        char            *temp_str = NULL;</div><div class='del'>-        char            *save_ptr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int str_len = 0;</div><div class='add'>+    char ret = 1;</div><div class='add'>+    char *dup_addr = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((length &gt; _POSIX_HOST_NAME_MAX) || (length &lt; 1)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((length &gt; _POSIX_HOST_NAME_MAX) || (length &lt; 1)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dup_addr = gf_strdup (address);</div><div class='del'>-        if (!dup_addr) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dup_addr = gf_strdup(address);</div><div class='add'>+    if (!dup_addr) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!isalnum (dup_addr[length - 1]) &amp;&amp; (dup_addr[length - 1] != '*')) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!isalnum(dup_addr[length - 1]) &amp;&amp; (dup_addr[length - 1] != '*')) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Check for consecutive dots, which is invalid in a hostname and is</div><div class='del'>-         * ignored by strtok()</div><div class='del'>-         */</div><div class='del'>-        if (strstr (dup_addr, "..")) {</div><div class='add'>+    /* Check for consecutive dots, which is invalid in a hostname and is</div><div class='add'>+     * ignored by strtok()</div><div class='add'>+     */</div><div class='add'>+    if (strstr(dup_addr, "..")) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* gen-name */</div><div class='add'>+    temp_str = strtok_r(dup_addr, ".", &amp;save_ptr);</div><div class='add'>+    do {</div><div class='add'>+        str_len = strlen(temp_str);</div><div class='add'>+</div><div class='add'>+        if (!isalnum(temp_str[0]) || !isalnum(temp_str[str_len - 1])) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        for (i = 1; i &lt; str_len; i++) {</div><div class='add'>+            if (!isalnum(temp_str[i]) &amp;&amp; (temp_str[i] != '-')) {</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* gen-name */</div><div class='del'>-        temp_str = strtok_r (dup_addr, ".", &amp;save_ptr);</div><div class='del'>-        do {</div><div class='del'>-                str_len = strlen (temp_str);</div><div class='del'>-</div><div class='del'>-                if (!isalnum (temp_str[0]) ||</div><div class='del'>-                    !isalnum (temp_str[str_len-1])) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                for (i = 1; i &lt; str_len; i++) {</div><div class='del'>-                        if (!isalnum (temp_str[i]) &amp;&amp; (temp_str[i] != '-')) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } while ((temp_str = strtok_r (NULL, ".", &amp;save_ptr)));</div><div class='add'>+    } while ((temp_str = strtok_r(NULL, ".", &amp;save_ptr)));</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (dup_addr);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(dup_addr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*  Matches all ipv4 address, if wildcard_acc is true  '*' wildcard pattern for*</div><div class='del'>-  subnets is considered as valid strings as well                               */</div><div class='add'>+  subnets is considered as valid strings as well */</div><div class='ctx'> char</div><div class='del'>-valid_ipv4_address (char *address, int length, gf_boolean_t wildcard_acc)</div><div class='del'>-{</div><div class='del'>-        int octets = 0;</div><div class='del'>-        int value = 0;</div><div class='del'>-        char *tmp = NULL, *ptr = NULL, *prev = NULL, *endptr = NULL;</div><div class='del'>-        char ret = 1;</div><div class='del'>-        int is_wildcard = 0;</div><div class='add'>+valid_ipv4_address(char *address, int length, gf_boolean_t wildcard_acc)</div><div class='add'>+{</div><div class='add'>+    int octets = 0;</div><div class='add'>+    int value = 0;</div><div class='add'>+    char *tmp = NULL, *ptr = NULL, *prev = NULL, *endptr = NULL;</div><div class='add'>+    char ret = 1;</div><div class='add'>+    int is_wildcard = 0;</div><div class='add'>+</div><div class='add'>+    tmp = gf_strdup(address);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * To prevent cases where last character is '.' and which have</div><div class='add'>+     * consecutive dots like ".." as strtok ignore consecutive</div><div class='add'>+     * delimiters.</div><div class='add'>+     */</div><div class='add'>+    if (length &lt;= 0 || (strstr(address, "..")) ||</div><div class='add'>+        (!isdigit(tmp[length - 1]) &amp;&amp; (tmp[length - 1] != '*'))) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp = gf_strdup (address);</div><div class='add'>+    prev = tmp;</div><div class='add'>+    prev = strtok_r(tmp, ".", &amp;ptr);</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * To prevent cases where last character is '.' and which have</div><div class='del'>-         * consecutive dots like ".." as strtok ignore consecutive</div><div class='del'>-         * delimiters.</div><div class='del'>-         */</div><div class='del'>-        if (length &lt;= 0 ||</div><div class='del'>-            (strstr (address, "..")) ||</div><div class='del'>-            (!isdigit (tmp[length - 1]) &amp;&amp; (tmp[length - 1] != '*'))) {</div><div class='add'>+    while (prev != NULL) {</div><div class='add'>+        octets++;</div><div class='add'>+        if (wildcard_acc &amp;&amp; !strcmp(prev, "*")) {</div><div class='add'>+            is_wildcard = 1;</div><div class='add'>+        } else {</div><div class='add'>+            value = strtol(prev, &amp;endptr, 10);</div><div class='add'>+            if ((value &gt; 255) || (value &lt; 0) ||</div><div class='add'>+                (endptr != NULL &amp;&amp; *endptr != '\0')) {</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        prev = strtok_r(NULL, ".", &amp;ptr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev = tmp;</div><div class='del'>-        prev = strtok_r (tmp, ".", &amp;ptr);</div><div class='del'>-</div><div class='del'>-        while (prev != NULL) {</div><div class='del'>-                octets++;</div><div class='del'>-                if (wildcard_acc &amp;&amp; !strcmp (prev, "*")) {</div><div class='del'>-                        is_wildcard = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        value = strtol (prev, &amp;endptr, 10);</div><div class='del'>-                        if ((value &gt; 255) || (value &lt; 0) ||</div><div class='del'>-                            (endptr != NULL &amp;&amp; *endptr != '\0')) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                prev = strtok_r (NULL, ".", &amp;ptr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((octets &gt; 4) || (octets &lt; 4 &amp;&amp; !is_wildcard)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    if ((octets &gt; 4) || (octets &lt; 4 &amp;&amp; !is_wildcard)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (tmp);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(tmp);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2479,152 +2487,153 @@ out:</div><div class='ctx'>  *         _gf_false otherwise.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-valid_ipv4_subnetwork (const char *address)</div><div class='add'>+valid_ipv4_subnetwork(const char *address)</div><div class='ctx'> {</div><div class='del'>-        char         *slash     = NULL;</div><div class='del'>-        char         *paddr     = NULL;</div><div class='del'>-        char         *endptr    = NULL;</div><div class='del'>-        long         prefixlen  = -1;</div><div class='del'>-        gf_boolean_t retv       = _gf_true;</div><div class='add'>+    char *slash = NULL;</div><div class='add'>+    char *paddr = NULL;</div><div class='add'>+    char *endptr = NULL;</div><div class='add'>+    long prefixlen = -1;</div><div class='add'>+    gf_boolean_t retv = _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (address == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        paddr = gf_strdup (address);</div><div class='del'>-        if (paddr == NULL) /* ENOMEM */</div><div class='del'>-                return _gf_false;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * INVALID: If '/' is not present OR</div><div class='del'>-         *          Nothing specified after '/'</div><div class='del'>-         */</div><div class='del'>-        slash = strchr(paddr, '/');</div><div class='del'>-        if ((slash == NULL) || (slash[1] == '\0')) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INVALID_IPV4_FORMAT, "Invalid IPv4 "</div><div class='del'>-                                  "subnetwork format");</div><div class='del'>-                retv = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (address == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *slash = '\0';</div><div class='del'>-        retv = valid_ipv4_address (paddr, strlen(paddr), _gf_false);</div><div class='del'>-        if (retv == _gf_false) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INVALID_IPV4_FORMAT,</div><div class='del'>-                                  "Invalid IPv4 subnetwork address");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /*</div><div class='del'>-         * Reset errno before checking it</div><div class='del'>-         */</div><div class='del'>-        errno = 0;</div><div class='del'>-        prefixlen = strtol (slash + 1, &amp;endptr, 10);</div><div class='del'>-        if ((errno != 0) || (*endptr != '\0') ||</div><div class='del'>-            (prefixlen &lt; 0) || (prefixlen &gt; IPv4_ADDR_SIZE)) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INVALID_IPV4_FORMAT,</div><div class='del'>-                                  "Invalid IPv4 subnetwork mask");</div><div class='del'>-                retv = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    paddr = gf_strdup(address);</div><div class='add'>+    if (paddr == NULL) /* ENOMEM */</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        retv = _gf_true;</div><div class='add'>+    /*</div><div class='add'>+     * INVALID: If '/' is not present OR</div><div class='add'>+     *          Nothing specified after '/'</div><div class='add'>+     */</div><div class='add'>+    slash = strchr(paddr, '/');</div><div class='add'>+    if ((slash == NULL) || (slash[1] == '\0')) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INVALID_IPV4_FORMAT,</div><div class='add'>+                         "Invalid IPv4 "</div><div class='add'>+                         "subnetwork format");</div><div class='add'>+        retv = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *slash = '\0';</div><div class='add'>+    retv = valid_ipv4_address(paddr, strlen(paddr), _gf_false);</div><div class='add'>+    if (retv == _gf_false) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INVALID_IPV4_FORMAT,</div><div class='add'>+                         "Invalid IPv4 subnetwork address");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * Reset errno before checking it</div><div class='add'>+     */</div><div class='add'>+    errno = 0;</div><div class='add'>+    prefixlen = strtol(slash + 1, &amp;endptr, 10);</div><div class='add'>+    if ((errno != 0) || (*endptr != '\0') || (prefixlen &lt; 0) ||</div><div class='add'>+        (prefixlen &gt; IPv4_ADDR_SIZE)) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INVALID_IPV4_FORMAT,</div><div class='add'>+                         "Invalid IPv4 subnetwork mask");</div><div class='add'>+        retv = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    retv = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (paddr);</div><div class='del'>-        return retv;</div><div class='add'>+    GF_FREE(paddr);</div><div class='add'>+    return retv;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char</div><div class='del'>-valid_ipv6_address (char *address, int length, gf_boolean_t wildcard_acc)</div><div class='del'>-{</div><div class='del'>-        int hex_numbers = 0;</div><div class='del'>-        int value = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-        char *tmp = NULL, *ptr = NULL, *prev = NULL, *endptr = NULL;</div><div class='del'>-        char ret = 1;</div><div class='del'>-        int is_wildcard = 0;</div><div class='del'>-        int is_compressed = 0;</div><div class='del'>-</div><div class='del'>-        tmp = gf_strdup (address);</div><div class='del'>-</div><div class='del'>-        /* Check for '%' for link local addresses */</div><div class='del'>-        endptr = strchr(tmp, '%');</div><div class='del'>-        if (endptr) {</div><div class='del'>-                *endptr = '\0';</div><div class='del'>-                length = strlen(tmp);</div><div class='del'>-                endptr = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check for compressed form */</div><div class='del'>-        if (length &lt;= 0 || tmp[length - 1] == ':') {</div><div class='add'>+valid_ipv6_address(char *address, int length, gf_boolean_t wildcard_acc)</div><div class='add'>+{</div><div class='add'>+    int hex_numbers = 0;</div><div class='add'>+    int value = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *tmp = NULL, *ptr = NULL, *prev = NULL, *endptr = NULL;</div><div class='add'>+    char ret = 1;</div><div class='add'>+    int is_wildcard = 0;</div><div class='add'>+    int is_compressed = 0;</div><div class='add'>+</div><div class='add'>+    tmp = gf_strdup(address);</div><div class='add'>+</div><div class='add'>+    /* Check for '%' for link local addresses */</div><div class='add'>+    endptr = strchr(tmp, '%');</div><div class='add'>+    if (endptr) {</div><div class='add'>+        *endptr = '\0';</div><div class='add'>+        length = strlen(tmp);</div><div class='add'>+        endptr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check for compressed form */</div><div class='add'>+    if (length &lt;= 0 || tmp[length - 1] == ':') {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; (length - 1); i++) {</div><div class='add'>+        if (tmp[i] == ':' &amp;&amp; tmp[i + 1] == ':') {</div><div class='add'>+            if (is_compressed == 0)</div><div class='add'>+                is_compressed = 1;</div><div class='add'>+            else {</div><div class='ctx'>                 ret = 0;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        for (i = 0; i &lt; (length - 1) ; i++) {</div><div class='del'>-                if (tmp[i] == ':' &amp;&amp; tmp[i + 1] == ':') {</div><div class='del'>-                        if (is_compressed == 0)</div><div class='del'>-                                is_compressed = 1;</div><div class='del'>-                        else {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev = strtok_r (tmp, ":", &amp;ptr);</div><div class='del'>-</div><div class='del'>-        while (prev != NULL) {</div><div class='del'>-                hex_numbers++;</div><div class='del'>-                if (wildcard_acc &amp;&amp; !strcmp (prev, "*")) {</div><div class='del'>-                        is_wildcard = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        value = strtol (prev, &amp;endptr, 16);</div><div class='del'>-                        if ((value &gt; 0xffff) || (value &lt; 0)</div><div class='del'>-                        || (endptr != NULL &amp;&amp; *endptr != '\0')) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                prev = strtok_r (NULL, ":", &amp;ptr);</div><div class='del'>-        }</div><div class='add'>+    prev = strtok_r(tmp, ":", &amp;ptr);</div><div class='ctx'> </div><div class='del'>-        if ((hex_numbers &gt; 8) || (hex_numbers &lt; 8 &amp;&amp; !is_wildcard</div><div class='del'>-            &amp;&amp; !is_compressed)) {</div><div class='add'>+    while (prev != NULL) {</div><div class='add'>+        hex_numbers++;</div><div class='add'>+        if (wildcard_acc &amp;&amp; !strcmp(prev, "*")) {</div><div class='add'>+            is_wildcard = 1;</div><div class='add'>+        } else {</div><div class='add'>+            value = strtol(prev, &amp;endptr, 16);</div><div class='add'>+            if ((value &gt; 0xffff) || (value &lt; 0) ||</div><div class='add'>+                (endptr != NULL &amp;&amp; *endptr != '\0')) {</div><div class='ctx'>                 ret = 0;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        prev = strtok_r(NULL, ":", &amp;ptr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((hex_numbers &gt; 8) ||</div><div class='add'>+        (hex_numbers &lt; 8 &amp;&amp; !is_wildcard &amp;&amp; !is_compressed)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (tmp);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(tmp);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char</div><div class='del'>-valid_internet_address (char *address, gf_boolean_t wildcard_acc)</div><div class='add'>+valid_internet_address(char *address, gf_boolean_t wildcard_acc)</div><div class='ctx'> {</div><div class='del'>-        char ret = 0;</div><div class='del'>-        int length = 0;</div><div class='add'>+    char ret = 0;</div><div class='add'>+    int length = 0;</div><div class='ctx'> </div><div class='del'>-        if (address == NULL) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (address == NULL) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        length = strlen (address);</div><div class='del'>-        if (length == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    length = strlen(address);</div><div class='add'>+    if (length == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (valid_ipv4_address (address, length, wildcard_acc)</div><div class='del'>-            || valid_ipv6_address (address, length, wildcard_acc)</div><div class='del'>-            || valid_host_name (address, length))</div><div class='del'>-                ret = 1;</div><div class='add'>+    if (valid_ipv4_address(address, length, wildcard_acc) ||</div><div class='add'>+        valid_ipv6_address(address, length, wildcard_acc) ||</div><div class='add'>+        valid_host_name(address, length))</div><div class='add'>+        ret = 1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2634,56 +2643,56 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  * @return _gf_true if "address" is "*" (anonymous) 'OR'</div><div class='ctx'>  *                  if "address" is valid FQDN or valid IPv4/6 address 'OR'</div><div class='del'>- *                  if "address" contains wildcard chars e.g. "'*' or '?' or '['"</div><div class='del'>- *                  if "address" is valid ipv4 subnet pattern (xx.xx.xx.xx/n)</div><div class='del'>- *         _gf_false otherwise</div><div class='add'>+ *                  if "address" contains wildcard chars e.g. "'*' or '?' or</div><div class='add'>+ * '['" if "address" is valid ipv4 subnet pattern (xx.xx.xx.xx/n) _gf_false</div><div class='add'>+ * otherwise</div><div class='ctx'>  *</div><div class='ctx'>  *</div><div class='ctx'>  * NB: If the user/admin set for wildcard pattern, then it does not have</div><div class='ctx'>  *     to be validated. Make it similar to the way exportfs (kNFS) works.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-valid_mount_auth_address (char *address)</div><div class='add'>+valid_mount_auth_address(char *address)</div><div class='ctx'> {</div><div class='del'>-        int    length = 0;</div><div class='del'>-        char   *cp    = NULL;</div><div class='add'>+    int length = 0;</div><div class='add'>+    char *cp = NULL;</div><div class='ctx'> </div><div class='del'>-        /* 1. Check for "NULL and empty string */</div><div class='del'>-        if ((address == NULL) || (address[0] == '\0')){</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "argument invalid");</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    /* 1. Check for "NULL and empty string */</div><div class='add'>+    if ((address == NULL) || (address[0] == '\0')) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "argument invalid");</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* 2. Check for Anonymous */</div><div class='del'>-        if (strcmp(address, "*") == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    /* 2. Check for Anonymous */</div><div class='add'>+    if (strcmp(address, "*") == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        for (cp = address; *cp; cp++) {</div><div class='del'>-                /* 3. Check for wildcard pattern */</div><div class='del'>-                if (*cp == '*' || *cp == '?' || *cp == '[') {</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * 4. check for IPv4 subnetwork i.e. xx.xx.xx.xx/n</div><div class='del'>-                 * TODO: check for IPv6 subnetwork</div><div class='del'>-                 * NB: Wildcard must not be mixed with subnetwork.</div><div class='del'>-                 */</div><div class='del'>-                if (*cp == '/') {</div><div class='del'>-                        return valid_ipv4_subnetwork (address);</div><div class='del'>-                }</div><div class='add'>+    for (cp = address; *cp; cp++) {</div><div class='add'>+        /* 3. Check for wildcard pattern */</div><div class='add'>+        if (*cp == '*' || *cp == '?' || *cp == '[') {</div><div class='add'>+            return _gf_true;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* 5. Check for v4/v6 IP addr and FQDN/hostname */</div><div class='del'>-        length = strlen (address);</div><div class='del'>-        if ((valid_ipv4_address (address, length, _gf_false)) ||</div><div class='del'>-            (valid_ipv6_address (address, length, _gf_false)) ||</div><div class='del'>-            (valid_host_name (address, length))) {</div><div class='del'>-                return _gf_true;</div><div class='add'>+        /*</div><div class='add'>+         * 4. check for IPv4 subnetwork i.e. xx.xx.xx.xx/n</div><div class='add'>+         * TODO: check for IPv6 subnetwork</div><div class='add'>+         * NB: Wildcard must not be mixed with subnetwork.</div><div class='add'>+         */</div><div class='add'>+        if (*cp == '/') {</div><div class='add'>+            return valid_ipv4_subnetwork(address);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    /* 5. Check for v4/v6 IP addr and FQDN/hostname */</div><div class='add'>+    length = strlen(address);</div><div class='add'>+    if ((valid_ipv4_address(address, length, _gf_false)) ||</div><div class='add'>+        (valid_ipv6_address(address, length, _gf_false)) ||</div><div class='add'>+        (valid_host_name(address, length))) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2694,40 +2703,39 @@ valid_mount_auth_address (char *address)</div><div class='ctx'>  * @return _gf_true if a and b have same ipv{4,6} addr, _gf_false otherwise</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_sock_union_equal_addr (union gf_sock_union *a,</div><div class='del'>-                          union gf_sock_union *b)</div><div class='add'>+gf_sock_union_equal_addr(union gf_sock_union *a, union gf_sock_union *b)</div><div class='ctx'> {</div><div class='del'>-        if (!a || !b) {</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Invalid arguments to gf_sock_union_equal_addr");</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if (!a || !b) {</div><div class='add'>+        gf_msg("common-utils", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Invalid arguments to gf_sock_union_equal_addr");</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (a-&gt;storage.ss_family != b-&gt;storage.ss_family)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (a-&gt;storage.ss_family != b-&gt;storage.ss_family)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        switch (a-&gt;storage.ss_family) {</div><div class='add'>+    switch (a-&gt;storage.ss_family) {</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                if (a-&gt;sin.sin_addr.s_addr == b-&gt;sin.sin_addr.s_addr)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                else</div><div class='del'>-                        return _gf_false;</div><div class='add'>+            if (a-&gt;sin.sin_addr.s_addr == b-&gt;sin.sin_addr.s_addr)</div><div class='add'>+                return _gf_true;</div><div class='add'>+            else</div><div class='add'>+                return _gf_false;</div><div class='ctx'> </div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                if (memcmp ((void *)(&amp;a-&gt;sin6.sin6_addr),</div><div class='del'>-                            (void *)(&amp;b-&gt;sin6.sin6_addr),</div><div class='del'>-                            sizeof (a-&gt;sin6.sin6_addr)))</div><div class='del'>-                        return _gf_false;</div><div class='del'>-                else</div><div class='del'>-                        return _gf_true;</div><div class='add'>+            if (memcmp((void *)(&amp;a-&gt;sin6.sin6_addr),</div><div class='add'>+                       (void *)(&amp;b-&gt;sin6.sin6_addr), sizeof(a-&gt;sin6.sin6_addr)))</div><div class='add'>+                return _gf_false;</div><div class='add'>+            else</div><div class='add'>+                return _gf_true;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg_debug ("common-utils", 0, "Unsupported/invalid address "</div><div class='del'>-                              "family");</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg_debug("common-utils", 0,</div><div class='add'>+                         "Unsupported/invalid address "</div><div class='add'>+                         "family");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2743,62 +2751,61 @@ gf_sock_union_equal_addr (union gf_sock_union *a,</div><div class='ctx'> gf_boolean_t</div><div class='ctx'> mask_match(const uint32_t a, const uint32_t b, const uint32_t m)</div><div class='ctx'> {</div><div class='del'>-        return (((a ^ b) &amp; m) == 0);</div><div class='add'>+    return (((a ^ b) &amp; m) == 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Thread safe conversion function*/</div><div class='ctx'> char *</div><div class='del'>-uuid_utoa (uuid_t uuid)</div><div class='add'>+uuid_utoa(uuid_t uuid)</div><div class='ctx'> {</div><div class='del'>-        char *uuid_buffer = glusterfs_uuid_buf_get ();</div><div class='del'>-        gf_uuid_unparse (uuid, uuid_buffer);</div><div class='del'>-        return uuid_buffer;</div><div class='add'>+    char *uuid_buffer = glusterfs_uuid_buf_get();</div><div class='add'>+    gf_uuid_unparse(uuid, uuid_buffer);</div><div class='add'>+    return uuid_buffer;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Re-entrant conversion function*/</div><div class='ctx'> char *</div><div class='del'>-uuid_utoa_r (uuid_t uuid, char *dst)</div><div class='add'>+uuid_utoa_r(uuid_t uuid, char *dst)</div><div class='ctx'> {</div><div class='del'>-        if(!dst)</div><div class='del'>-                return NULL;</div><div class='del'>-        gf_uuid_unparse (uuid, dst);</div><div class='del'>-        return dst;</div><div class='add'>+    if (!dst)</div><div class='add'>+        return NULL;</div><div class='add'>+    gf_uuid_unparse(uuid, dst);</div><div class='add'>+    return dst;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Thread safe conversion function*/</div><div class='ctx'> char *</div><div class='del'>-lkowner_utoa (gf_lkowner_t *lkowner)</div><div class='add'>+lkowner_utoa(gf_lkowner_t *lkowner)</div><div class='ctx'> {</div><div class='del'>-        char *lkowner_buffer = glusterfs_lkowner_buf_get ();</div><div class='del'>-        lkowner_unparse (lkowner, lkowner_buffer, GF_LKOWNER_BUF_SIZE);</div><div class='del'>-        return lkowner_buffer;</div><div class='add'>+    char *lkowner_buffer = glusterfs_lkowner_buf_get();</div><div class='add'>+    lkowner_unparse(lkowner, lkowner_buffer, GF_LKOWNER_BUF_SIZE);</div><div class='add'>+    return lkowner_buffer;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Re-entrant conversion function*/</div><div class='ctx'> char *</div><div class='del'>-lkowner_utoa_r (gf_lkowner_t *lkowner, char *dst, int len)</div><div class='add'>+lkowner_utoa_r(gf_lkowner_t *lkowner, char *dst, int len)</div><div class='ctx'> {</div><div class='del'>-        if(!dst)</div><div class='del'>-                return NULL;</div><div class='del'>-        lkowner_unparse (lkowner, dst, len);</div><div class='del'>-        return dst;</div><div class='add'>+    if (!dst)</div><div class='add'>+        return NULL;</div><div class='add'>+    lkowner_unparse(lkowner, dst, len);</div><div class='add'>+    return dst;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-is_valid_lease_id (const char *lease_id)</div><div class='add'>+is_valid_lease_id(const char *lease_id)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        gf_boolean_t valid = _gf_false;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t valid = _gf_false;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; LEASE_ID_SIZE; i++) {</div><div class='del'>-                if (lease_id[i] != 0) {</div><div class='del'>-                        valid = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; LEASE_ID_SIZE; i++) {</div><div class='add'>+        if (lease_id[i] != 0) {</div><div class='add'>+            valid = _gf_true;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return valid;</div><div class='add'>+    return valid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Lease_id can be a either in printable or non printable binary</div><div class='hunk'>@@ -2815,108 +2822,107 @@ out:</div><div class='ctx'>  * subsequent call to this function will override the same buffer.</div><div class='ctx'>  */</div><div class='ctx'> char *</div><div class='del'>-leaseid_utoa (const char *lease_id)</div><div class='del'>-{</div><div class='del'>-        char *buf = NULL;</div><div class='del'>-        int   i   = 0;</div><div class='del'>-        int   j   = 0;</div><div class='del'>-</div><div class='del'>-        buf = glusterfs_leaseid_buf_get ();</div><div class='del'>-        if (!buf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; LEASE_ID_SIZE; i++) {</div><div class='del'>-                if (i &amp;&amp; !(i % 2)) {</div><div class='del'>-                        buf[j] = '-';</div><div class='del'>-                        j++;</div><div class='del'>-                }</div><div class='del'>-                sprintf (&amp;buf[j], "%02hhx", lease_id[i]);</div><div class='del'>-                j += 2;</div><div class='del'>-                if (j == GF_LEASE_ID_BUF_SIZE)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        buf[GF_LEASE_ID_BUF_SIZE - 1] = '\0';</div><div class='add'>+leaseid_utoa(const char *lease_id)</div><div class='add'>+{</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    buf = glusterfs_leaseid_buf_get();</div><div class='add'>+    if (!buf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; LEASE_ID_SIZE; i++) {</div><div class='add'>+        if (i &amp;&amp; !(i % 2)) {</div><div class='add'>+            buf[j] = '-';</div><div class='add'>+            j++;</div><div class='add'>+        }</div><div class='add'>+        sprintf(&amp;buf[j], "%02hhx", lease_id[i]);</div><div class='add'>+        j += 2;</div><div class='add'>+        if (j == GF_LEASE_ID_BUF_SIZE)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    buf[GF_LEASE_ID_BUF_SIZE - 1] = '\0';</div><div class='ctx'> out:</div><div class='del'>-        return buf;</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_leaseid_get ()</div><div class='add'>+gf_leaseid_get()</div><div class='ctx'> {</div><div class='del'>-        return glusterfs_leaseid_buf_get ();</div><div class='add'>+    return glusterfs_leaseid_buf_get();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_existing_leaseid ()</div><div class='add'>+gf_existing_leaseid()</div><div class='ctx'> {</div><div class='del'>-        return glusterfs_leaseid_exist ();</div><div class='add'>+    return glusterfs_leaseid_exist();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void* gf_array_elem (void *a, int index, size_t elem_size)</div><div class='add'>+void *</div><div class='add'>+gf_array_elem(void *a, int index, size_t elem_size)</div><div class='ctx'> {</div><div class='del'>-        uint8_t* ptr = a;</div><div class='del'>-        return (void*)(ptr + index * elem_size);</div><div class='add'>+    uint8_t *ptr = a;</div><div class='add'>+    return (void *)(ptr + index * elem_size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_elem_swap (void *x, void *y, size_t l) {</div><div class='del'>-        uint8_t *a = x, *b = y, c;</div><div class='del'>-        while(l--) {</div><div class='del'>-                c = *a;</div><div class='del'>-                *a++ = *b;</div><div class='del'>-                *b++ = c;</div><div class='del'>-        }</div><div class='add'>+gf_elem_swap(void *x, void *y, size_t l)</div><div class='add'>+{</div><div class='add'>+    uint8_t *a = x, *b = y, c;</div><div class='add'>+    while (l--) {</div><div class='add'>+        c = *a;</div><div class='add'>+        *a++ = *b;</div><div class='add'>+        *b++ = c;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_array_insertionsort (void *A, int l, int r, size_t elem_size,</div><div class='del'>-                        gf_cmp cmp)</div><div class='del'>-{</div><div class='del'>-        int  i = l;</div><div class='del'>-        int  N = r+1;</div><div class='del'>-        void *Temp = NULL;</div><div class='del'>-        int  j = 0;</div><div class='del'>-</div><div class='del'>-        for(i = l; i &lt; N; i++) {</div><div class='del'>-                Temp = gf_array_elem (A, i, elem_size);</div><div class='del'>-                j = i - 1;</div><div class='del'>-                while (j &gt;= 0 &amp;&amp; (cmp (Temp, gf_array_elem (A, j, elem_size))</div><div class='del'>-                      &lt; 0)) {</div><div class='del'>-                        gf_elem_swap (Temp, gf_array_elem (A, j, elem_size),</div><div class='del'>-                                      elem_size);</div><div class='del'>-                        Temp = gf_array_elem (A, j, elem_size);</div><div class='del'>-                        j = j-1;</div><div class='del'>-                }</div><div class='add'>+gf_array_insertionsort(void *A, int l, int r, size_t elem_size, gf_cmp cmp)</div><div class='add'>+{</div><div class='add'>+    int i = l;</div><div class='add'>+    int N = r + 1;</div><div class='add'>+    void *Temp = NULL;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    for (i = l; i &lt; N; i++) {</div><div class='add'>+        Temp = gf_array_elem(A, i, elem_size);</div><div class='add'>+        j = i - 1;</div><div class='add'>+        while (j &gt;= 0 &amp;&amp; (cmp(Temp, gf_array_elem(A, j, elem_size)) &lt; 0)) {</div><div class='add'>+            gf_elem_swap(Temp, gf_array_elem(A, j, elem_size), elem_size);</div><div class='add'>+            Temp = gf_array_elem(A, j, elem_size);</div><div class='add'>+            j = j - 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_is_str_int (const char *value)</div><div class='add'>+gf_is_str_int(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int     flag = 0;</div><div class='del'>-        char   *str  = NULL;</div><div class='del'>-        char   *fptr = NULL;</div><div class='add'>+    int flag = 0;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    char *fptr = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, value, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, value, out);</div><div class='ctx'> </div><div class='del'>-        str = gf_strdup (value);</div><div class='del'>-        if (!str)</div><div class='del'>-                goto out;</div><div class='add'>+    str = gf_strdup(value);</div><div class='add'>+    if (!str)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fptr = str;</div><div class='add'>+    fptr = str;</div><div class='ctx'> </div><div class='del'>-        while (*str) {</div><div class='del'>-                if (!isdigit(*str)) {</div><div class='del'>-                        flag = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                str++;</div><div class='add'>+    while (*str) {</div><div class='add'>+        if (!isdigit(*str)) {</div><div class='add'>+            flag = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        str++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (fptr);</div><div class='add'>+    GF_FREE(fptr);</div><div class='ctx'> </div><div class='del'>-        return flag;</div><div class='add'>+    return flag;</div><div class='ctx'> }</div><div class='ctx'> /*</div><div class='ctx'>  * rounds up nr to power of two. If nr is already a power of two, just returns</div><div class='hunk'>@@ -2924,22 +2930,22 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_roundup_power_of_two (int32_t nr)</div><div class='add'>+gf_roundup_power_of_two(int32_t nr)</div><div class='ctx'> {</div><div class='del'>-        int32_t result = 1;</div><div class='add'>+    int32_t result = 1;</div><div class='ctx'> </div><div class='del'>-        if (nr &lt; 0) {</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_NEGATIVE_NUM_PASSED, "negative number passed");</div><div class='del'>-                result = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (nr &lt; 0) {</div><div class='add'>+        gf_msg("common-utils", GF_LOG_WARNING, 0, LG_MSG_NEGATIVE_NUM_PASSED,</div><div class='add'>+               "negative number passed");</div><div class='add'>+        result = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (result &lt; nr)</div><div class='del'>-                result *= 2;</div><div class='add'>+    while (result &lt; nr)</div><div class='add'>+        result *= 2;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return result;</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2948,392 +2954,384 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_roundup_next_power_of_two (int32_t nr)</div><div class='add'>+gf_roundup_next_power_of_two(int32_t nr)</div><div class='ctx'> {</div><div class='del'>-        int32_t result = 1;</div><div class='add'>+    int32_t result = 1;</div><div class='ctx'> </div><div class='del'>-        if (nr &lt; 0) {</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_NEGATIVE_NUM_PASSED, "negative number passed");</div><div class='del'>-                result = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (nr &lt; 0) {</div><div class='add'>+        gf_msg("common-utils", GF_LOG_WARNING, 0, LG_MSG_NEGATIVE_NUM_PASSED,</div><div class='add'>+               "negative number passed");</div><div class='add'>+        result = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (result &lt;= nr)</div><div class='del'>-                result *= 2;</div><div class='add'>+    while (result &lt;= nr)</div><div class='add'>+        result *= 2;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return result;</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-get_vol_type (int type, int dist_count, int brick_count)</div><div class='add'>+get_vol_type(int type, int dist_count, int brick_count)</div><div class='ctx'> {</div><div class='del'>-        if ((type != GF_CLUSTER_TYPE_TIER) &amp;&amp; (type &gt; 0) &amp;&amp;</div><div class='del'>-             (dist_count &lt; brick_count))</div><div class='del'>-              type = type + GF_CLUSTER_TYPE_MAX - 1;</div><div class='add'>+    if ((type != GF_CLUSTER_TYPE_TIER) &amp;&amp; (type &gt; 0) &amp;&amp;</div><div class='add'>+        (dist_count &lt; brick_count))</div><div class='add'>+        type = type + GF_CLUSTER_TYPE_MAX - 1;</div><div class='ctx'> </div><div class='del'>-        return type;</div><div class='add'>+    return type;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-validate_brick_name (char *brick)</div><div class='add'>+validate_brick_name(char *brick)</div><div class='ctx'> {</div><div class='del'>-        char *delimiter = NULL;</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        delimiter = strrchr (brick, ':');</div><div class='del'>-        if (!delimiter || delimiter == brick</div><div class='del'>-            || *(delimiter+1) != '/')</div><div class='del'>-                ret = -1;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    delimiter = strrchr(brick, ':');</div><div class='add'>+    if (!delimiter || delimiter == brick || *(delimiter + 1) != '/')</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-get_host_name (char *word, char **host)</div><div class='add'>+get_host_name(char *word, char **host)</div><div class='ctx'> {</div><div class='del'>-        char *delimiter = NULL;</div><div class='del'>-        delimiter = strrchr (word, ':');</div><div class='del'>-        if (delimiter)</div><div class='del'>-                *delimiter = '\0';</div><div class='del'>-        else</div><div class='del'>-                return NULL;</div><div class='del'>-        *host = word;</div><div class='del'>-        return *host;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    delimiter = strrchr(word, ':');</div><div class='add'>+    if (delimiter)</div><div class='add'>+        *delimiter = '\0';</div><div class='add'>+    else</div><div class='add'>+        return NULL;</div><div class='add'>+    *host = word;</div><div class='add'>+    return *host;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-get_path_name (char *word, char **path)</div><div class='add'>+get_path_name(char *word, char **path)</div><div class='ctx'> {</div><div class='del'>-        char *delimiter = NULL;</div><div class='del'>-        delimiter = strchr (word, '/');</div><div class='del'>-        if (!delimiter)</div><div class='del'>-                return NULL;</div><div class='del'>-        *path = delimiter;</div><div class='del'>-        return *path;</div><div class='add'>+    char *delimiter = NULL;</div><div class='add'>+    delimiter = strchr(word, '/');</div><div class='add'>+    if (!delimiter)</div><div class='add'>+        return NULL;</div><div class='add'>+    *path = delimiter;</div><div class='add'>+    return *path;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_path_strip_trailing_slashes (char *path)</div><div class='add'>+gf_path_strip_trailing_slashes(char *path)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int len = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int len = 0;</div><div class='ctx'> </div><div class='del'>-        if (!path)</div><div class='del'>-                return;</div><div class='add'>+    if (!path)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        len = strlen (path);</div><div class='del'>-        for (i = len - 1; i &gt; 0; i--) {</div><div class='del'>-                if (path[i] != '/')</div><div class='del'>-                        break;</div><div class='del'>-	}</div><div class='add'>+    len = strlen(path);</div><div class='add'>+    for (i = len - 1; i &gt; 0; i--) {</div><div class='add'>+        if (path[i] != '/')</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (i &lt; (len -1))</div><div class='del'>-                path [i+1] = '\0';</div><div class='add'>+    if (i &lt; (len - 1))</div><div class='add'>+        path[i + 1] = '\0';</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-get_mem_size ()</div><div class='add'>+get_mem_size()</div><div class='ctx'> {</div><div class='del'>-        uint64_t memsize = -1;</div><div class='add'>+    uint64_t memsize = -1;</div><div class='ctx'> </div><div class='ctx'> #if defined GF_LINUX_HOST_OS || defined GF_SOLARIS_HOST_OS</div><div class='ctx'> </div><div class='del'>-	uint64_t page_size = 0;</div><div class='del'>-	uint64_t num_pages = 0;</div><div class='add'>+    uint64_t page_size = 0;</div><div class='add'>+    uint64_t num_pages = 0;</div><div class='ctx'> </div><div class='del'>-	page_size = sysconf (_SC_PAGESIZE);</div><div class='del'>-	num_pages = sysconf (_SC_PHYS_PAGES);</div><div class='add'>+    page_size = sysconf(_SC_PAGESIZE);</div><div class='add'>+    num_pages = sysconf(_SC_PHYS_PAGES);</div><div class='ctx'> </div><div class='del'>-	memsize = page_size * num_pages;</div><div class='add'>+    memsize = page_size * num_pages;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined GF_DARWIN_HOST_OS</div><div class='ctx'> </div><div class='del'>-	size_t len = sizeof(memsize);</div><div class='del'>-	int name [] = { CTL_HW, HW_PHYSMEM };</div><div class='add'>+    size_t len = sizeof(memsize);</div><div class='add'>+    int name[] = {CTL_HW, HW_PHYSMEM};</div><div class='ctx'> </div><div class='del'>-	sysctl (name, 2, &amp;memsize, &amp;len, NULL, 0);</div><div class='add'>+    sysctl(name, 2, &amp;memsize, &amp;len, NULL, 0);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined __NetBSD__</div><div class='ctx'> </div><div class='del'>-	size_t len = sizeof(memsize);</div><div class='del'>-	int name64 [] = { CTL_HW, HW_PHYSMEM64 };</div><div class='add'>+    size_t len = sizeof(memsize);</div><div class='add'>+    int name64[] = {CTL_HW, HW_PHYSMEM64};</div><div class='ctx'> </div><div class='del'>-	sysctl (name64, 2, &amp;memsize, &amp;len, NULL, 0);</div><div class='del'>-	if (memsize == -1)</div><div class='del'>-		sysctl (name64, 2, &amp;memsize, &amp;len, NULL, 0);</div><div class='add'>+    sysctl(name64, 2, &amp;memsize, &amp;len, NULL, 0);</div><div class='add'>+    if (memsize == -1)</div><div class='add'>+        sysctl(name64, 2, &amp;memsize, &amp;len, NULL, 0);</div><div class='ctx'> #endif</div><div class='del'>-	return memsize;</div><div class='add'>+    return memsize;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Strips all whitespace characters in a string and returns length of new string</div><div class='ctx'>  * on success</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_strip_whitespace (char *str, int len)</div><div class='add'>+gf_strip_whitespace(char *str, int len)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-        int     new_len = 0;</div><div class='del'>-        char    *new_str = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int new_len = 0;</div><div class='add'>+    char *new_str = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (str);</div><div class='add'>+    GF_ASSERT(str);</div><div class='ctx'> </div><div class='del'>-        new_str = GF_MALLOC (len + 1, gf_common_mt_char);</div><div class='del'>-        if (new_str == NULL)</div><div class='del'>-                return -1;</div><div class='add'>+    new_str = GF_MALLOC(len + 1, gf_common_mt_char);</div><div class='add'>+    if (new_str == NULL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; len; i++) {</div><div class='del'>-                if (!isspace (str[i]))</div><div class='del'>-                        new_str[new_len++] = str[i];</div><div class='del'>-        }</div><div class='del'>-        new_str[new_len] = '\0';</div><div class='add'>+    for (i = 0; i &lt; len; i++) {</div><div class='add'>+        if (!isspace(str[i]))</div><div class='add'>+            new_str[new_len++] = str[i];</div><div class='add'>+    }</div><div class='add'>+    new_str[new_len] = '\0';</div><div class='ctx'> </div><div class='del'>-        if (new_len != len) {</div><div class='del'>-                snprintf(str, new_len + 1, "%s", new_str);</div><div class='del'>-        }</div><div class='add'>+    if (new_len != len) {</div><div class='add'>+        snprintf(str, new_len + 1, "%s", new_str);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (new_str);</div><div class='del'>-        return new_len;</div><div class='add'>+    GF_FREE(new_str);</div><div class='add'>+    return new_len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_canonicalize_path (char *path)</div><div class='add'>+gf_canonicalize_path(char *path)</div><div class='ctx'> {</div><div class='del'>-        int             ret                  = -1;</div><div class='del'>-        int             path_len             = 0;</div><div class='del'>-        int             dir_path_len         = 0;</div><div class='del'>-        char           *tmppath              = NULL;</div><div class='del'>-        char           *dir                  = NULL;</div><div class='del'>-        char           *tmpstr               = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int path_len = 0;</div><div class='add'>+    int dir_path_len = 0;</div><div class='add'>+    char *tmppath = NULL;</div><div class='add'>+    char *dir = NULL;</div><div class='add'>+    char *tmpstr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!path || *path != '/')</div><div class='del'>-                goto out;</div><div class='add'>+    if (!path || *path != '/')</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(path, "/"))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (path, "/"))</div><div class='del'>-                return 0;</div><div class='add'>+    tmppath = gf_strdup(path);</div><div class='add'>+    if (!tmppath)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        tmppath = gf_strdup (path);</div><div class='del'>-        if (!tmppath)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Strip the extra slashes and return */</div><div class='add'>+    bzero(path, strlen(path));</div><div class='add'>+    path[0] = '/';</div><div class='add'>+    dir = strtok_r(tmppath, "/", &amp;tmpstr);</div><div class='ctx'> </div><div class='del'>-        /* Strip the extra slashes and return */</div><div class='del'>-        bzero (path, strlen(path));</div><div class='del'>-        path[0] = '/';</div><div class='del'>-        dir = strtok_r(tmppath, "/", &amp;tmpstr);</div><div class='del'>-</div><div class='del'>-        while (dir) {</div><div class='del'>-                dir_path_len = strlen(dir);</div><div class='del'>-                strncpy ((path + path_len + 1), dir, dir_path_len);</div><div class='del'>-                path_len += dir_path_len + 1;</div><div class='del'>-                dir = strtok_r (NULL, "/", &amp;tmpstr);</div><div class='del'>-                if (dir) {</div><div class='del'>-                        path[path_len] = '/';</div><div class='del'>-                }</div><div class='add'>+    while (dir) {</div><div class='add'>+        dir_path_len = strlen(dir);</div><div class='add'>+        strncpy((path + path_len + 1), dir, dir_path_len);</div><div class='add'>+        path_len += dir_path_len + 1;</div><div class='add'>+        dir = strtok_r(NULL, "/", &amp;tmpstr);</div><div class='add'>+        if (dir) {</div><div class='add'>+            path[path_len] = '/';</div><div class='ctx'>         }</div><div class='del'>-        path[path_len] = '\0';</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    path[path_len] = '\0';</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_ERROR, 0, LG_MSG_PATH_ERROR,</div><div class='del'>-                        "Path manipulation failed");</div><div class='add'>+out:</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg("common-utils", GF_LOG_ERROR, 0, LG_MSG_PATH_ERROR,</div><div class='add'>+               "Path manipulation failed");</div><div class='ctx'> </div><div class='del'>-        GF_FREE(tmppath);</div><div class='add'>+    GF_FREE(tmppath);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static const char *__gf_timefmts[] = {</div><div class='del'>-        "%F %T",</div><div class='del'>-        "%Y/%m/%d-%T",</div><div class='del'>-        "%b %d %T",</div><div class='del'>-        "%F %H%M%S",</div><div class='del'>-	"%Y-%m-%d-%T",</div><div class='del'>-        "%s",</div><div class='add'>+    "%F %T", "%Y/%m/%d-%T", "%b %d %T", "%F %H%M%S", "%Y-%m-%d-%T", "%s",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static const char *__gf_zerotimes[] = {</div><div class='del'>-        "0000-00-00 00:00:00",</div><div class='del'>-        "0000/00/00-00:00:00",</div><div class='del'>-        "xxx 00 00:00:00",</div><div class='del'>-        "0000-00-00 000000",</div><div class='del'>-	"0000-00-00-00:00:00",</div><div class='del'>-        "0",</div><div class='add'>+    "0000-00-00 00:00:00", "0000/00/00-00:00:00", "xxx 00 00:00:00",</div><div class='add'>+    "0000-00-00 000000",   "0000-00-00-00:00:00", "0",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_gf_timestuff (const char ***fmts, const char ***zeros)</div><div class='add'>+_gf_timestuff(const char ***fmts, const char ***zeros)</div><div class='ctx'> {</div><div class='del'>-        *fmts = __gf_timefmts;</div><div class='del'>-        *zeros = __gf_zerotimes;</div><div class='add'>+    *fmts = __gf_timefmts;</div><div class='add'>+    *zeros = __gf_zerotimes;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-generate_glusterfs_ctx_id (void)</div><div class='add'>+generate_glusterfs_ctx_id(void)</div><div class='ctx'> {</div><div class='del'>-        uuid_t         ctxid;</div><div class='del'>-        char          *tmp = NULL;</div><div class='add'>+    uuid_t ctxid;</div><div class='add'>+    char *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_generate (ctxid);</div><div class='del'>-        tmp = uuid_utoa (ctxid);</div><div class='add'>+    gf_uuid_generate(ctxid);</div><div class='add'>+    tmp = uuid_utoa(ctxid);</div><div class='ctx'> </div><div class='del'>-        return gf_strdup (tmp);</div><div class='add'>+    return gf_strdup(tmp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_get_reserved_ports ()</div><div class='add'>+gf_get_reserved_ports()</div><div class='ctx'> {</div><div class='del'>-        char    *ports_info  = NULL;</div><div class='add'>+    char *ports_info = NULL;</div><div class='ctx'> #if defined GF_LINUX_HOST_OS</div><div class='del'>-        int     proc_fd      = -1;</div><div class='del'>-        char    *proc_file   = "/proc/sys/net/ipv4/ip_local_reserved_ports";</div><div class='del'>-        char    buffer[4096] = {0,};</div><div class='del'>-        int32_t ret          = -1;</div><div class='del'>-</div><div class='del'>-        proc_fd = open (proc_file, O_RDONLY);</div><div class='del'>-        if (proc_fd == -1) {</div><div class='del'>-                /* What should be done in this case? error out from here</div><div class='del'>-                 * and thus stop the glusterfs process from starting or</div><div class='del'>-                 * continue with older method of using any of the available</div><div class='del'>-                 * port? For now 2nd option is considered.</div><div class='del'>-                 */</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_WARNING, errno,</div><div class='del'>-                        LG_MSG_FILE_OP_FAILED, "could not open the file "</div><div class='del'>-                        "/proc/sys/net/ipv4/ip_local_reserved_ports for "</div><div class='del'>-                        "getting reserved ports info");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_read (proc_fd, buffer, sizeof (buffer)-1);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_WARNING, errno,</div><div class='del'>-                        LG_MSG_FILE_OP_FAILED, "could not read the file %s for"</div><div class='del'>-                        " getting reserved ports info", proc_file);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buffer[ret] = '\0';</div><div class='del'>-        ports_info = gf_strdup (buffer);</div><div class='add'>+    int proc_fd = -1;</div><div class='add'>+    char *proc_file = "/proc/sys/net/ipv4/ip_local_reserved_ports";</div><div class='add'>+    char buffer[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    proc_fd = open(proc_file, O_RDONLY);</div><div class='add'>+    if (proc_fd == -1) {</div><div class='add'>+        /* What should be done in this case? error out from here</div><div class='add'>+         * and thus stop the glusterfs process from starting or</div><div class='add'>+         * continue with older method of using any of the available</div><div class='add'>+         * port? For now 2nd option is considered.</div><div class='add'>+         */</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "could not open the file "</div><div class='add'>+               "/proc/sys/net/ipv4/ip_local_reserved_ports for "</div><div class='add'>+               "getting reserved ports info");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_read(proc_fd, buffer, sizeof(buffer) - 1);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "could not read the file %s for"</div><div class='add'>+               " getting reserved ports info",</div><div class='add'>+               proc_file);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buffer[ret] = '\0';</div><div class='add'>+    ports_info = gf_strdup(buffer);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (proc_fd != -1)</div><div class='del'>-                sys_close (proc_fd);</div><div class='add'>+    if (proc_fd != -1)</div><div class='add'>+        sys_close(proc_fd);</div><div class='ctx'> #endif /* GF_LINUX_HOST_OS */</div><div class='del'>-        return ports_info;</div><div class='add'>+    return ports_info;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_process_reserved_ports (unsigned char *ports, uint32_t ceiling)</div><div class='add'>+gf_process_reserved_ports(unsigned char *ports, uint32_t ceiling)</div><div class='ctx'> {</div><div class='del'>-        int      ret         = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        memset (ports, 0, GF_PORT_ARRAY_SIZE);</div><div class='add'>+    memset(ports, 0, GF_PORT_ARRAY_SIZE);</div><div class='ctx'> </div><div class='ctx'> #if defined GF_LINUX_HOST_OS</div><div class='del'>-        char    *ports_info  = NULL;</div><div class='del'>-        char    *tmp         = NULL;</div><div class='del'>-        char    *blocked_port = NULL;</div><div class='del'>-</div><div class='del'>-        ports_info = gf_get_reserved_ports ();</div><div class='del'>-        if (!ports_info) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_RESERVED_PORTS_ERROR, "Not able to get reserved"</div><div class='del'>-                        " ports, hence there is a possibility that glusterfs "</div><div class='del'>-                        "may consume reserved port");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    char *ports_info = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *blocked_port = NULL;</div><div class='ctx'> </div><div class='del'>-        blocked_port = strtok_r (ports_info, ",\n",&amp;tmp);</div><div class='add'>+    ports_info = gf_get_reserved_ports();</div><div class='add'>+    if (!ports_info) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_WARNING, 0, LG_MSG_RESERVED_PORTS_ERROR,</div><div class='add'>+               "Not able to get reserved"</div><div class='add'>+               " ports, hence there is a possibility that glusterfs "</div><div class='add'>+               "may consume reserved port");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (blocked_port) {</div><div class='del'>-                gf_ports_reserved (blocked_port, ports, ceiling);</div><div class='del'>-                blocked_port = strtok_r (NULL, ",\n", &amp;tmp);</div><div class='del'>-        }</div><div class='add'>+    blocked_port = strtok_r(ports_info, ",\n", &amp;tmp);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    while (blocked_port) {</div><div class='add'>+        gf_ports_reserved(blocked_port, ports, ceiling);</div><div class='add'>+        blocked_port = strtok_r(NULL, ",\n", &amp;tmp);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (ports_info);</div><div class='add'>+    GF_FREE(ports_info);</div><div class='ctx'> </div><div class='ctx'> #else  /* FIXME: Non Linux Host */</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> #endif /* GF_LINUX_HOST_OS */</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_ports_reserved (char *blocked_port, unsigned char *ports, uint32_t ceiling)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t    result      = _gf_false;</div><div class='del'>-        char            *range_port = NULL;</div><div class='del'>-        int32_t         tmp_port1   = -1;</div><div class='del'>-        int32_t         tmp_port2   = -1;</div><div class='del'>-</div><div class='del'>-        if (strstr (blocked_port, "-") == NULL) {</div><div class='del'>-                /* get rid of the new line character*/</div><div class='del'>-                if (blocked_port[strlen(blocked_port) -1] == '\n')</div><div class='del'>-                        blocked_port[strlen(blocked_port) -1] = '\0';</div><div class='del'>-                if (gf_string2int32 (blocked_port, &amp;tmp_port1) == 0) {</div><div class='del'>-                        if (tmp_port1 &gt; ceiling</div><div class='del'>-                            || tmp_port1 &lt; 0) {</div><div class='del'>-                                gf_msg ("glusterfs-socket", GF_LOG_WARNING, 0,</div><div class='del'>-                                        LG_MSG_INVALID_PORT, "invalid port %d",</div><div class='del'>-                                        tmp_port1);</div><div class='del'>-                                result = _gf_true;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg_debug ("glusterfs", 0, "blocking port "</div><div class='del'>-                                              "%d", tmp_port1);</div><div class='del'>-                                BIT_SET (ports, tmp_port1);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg ("glusterfs-socket", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_INVALID_PORT, "%s is not a valid port "</div><div class='del'>-                                "identifier", blocked_port);</div><div class='del'>-                        result = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+gf_ports_reserved(char *blocked_port, unsigned char *ports, uint32_t ceiling)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    char *range_port = NULL;</div><div class='add'>+    int32_t tmp_port1 = -1;</div><div class='add'>+    int32_t tmp_port2 = -1;</div><div class='add'>+</div><div class='add'>+    if (strstr(blocked_port, "-") == NULL) {</div><div class='add'>+        /* get rid of the new line character*/</div><div class='add'>+        if (blocked_port[strlen(blocked_port) - 1] == '\n')</div><div class='add'>+            blocked_port[strlen(blocked_port) - 1] = '\0';</div><div class='add'>+        if (gf_string2int32(blocked_port, &amp;tmp_port1) == 0) {</div><div class='add'>+            if (tmp_port1 &gt; ceiling || tmp_port1 &lt; 0) {</div><div class='add'>+                gf_msg("glusterfs-socket", GF_LOG_WARNING, 0,</div><div class='add'>+                       LG_MSG_INVALID_PORT, "invalid port %d", tmp_port1);</div><div class='add'>+                result = _gf_true;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg_debug("glusterfs", 0,</div><div class='add'>+                             "blocking port "</div><div class='add'>+                             "%d",</div><div class='add'>+                             tmp_port1);</div><div class='add'>+                BIT_SET(ports, tmp_port1);</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                range_port = strtok (blocked_port, "-");</div><div class='del'>-                if (!range_port){</div><div class='del'>-                        result = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (gf_string2int32 (range_port, &amp;tmp_port1) == 0) {</div><div class='del'>-                        if (tmp_port1 &gt; ceiling)</div><div class='del'>-                                tmp_port1 = ceiling;</div><div class='del'>-                        if (tmp_port1 &lt; 0)</div><div class='del'>-                                tmp_port1 = 0;</div><div class='del'>-                }</div><div class='del'>-                range_port = strtok (NULL, "-");</div><div class='del'>-                if (!range_port) {</div><div class='del'>-                        result = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* get rid of the new line character*/</div><div class='del'>-                if (range_port[strlen(range_port) -1] == '\n')</div><div class='del'>-                        range_port[strlen(range_port) - 1] = '\0';</div><div class='del'>-                if (gf_string2int32 (range_port, &amp;tmp_port2) == 0) {</div><div class='del'>-                        if (tmp_port2 &gt; ceiling)</div><div class='del'>-                                tmp_port2 = ceiling;</div><div class='del'>-                        if (tmp_port2 &lt; 0)</div><div class='del'>-                                tmp_port2 = 0;</div><div class='del'>-                }</div><div class='del'>-                gf_msg_debug ("glusterfs", 0, "lower: %d, higher: %d",</div><div class='del'>-                              tmp_port1, tmp_port2);</div><div class='del'>-                for (; tmp_port1 &lt;= tmp_port2; tmp_port1++)</div><div class='del'>-                        BIT_SET (ports, tmp_port1);</div><div class='del'>-        }</div><div class='add'>+            gf_msg("glusterfs-socket", GF_LOG_WARNING, 0, LG_MSG_INVALID_PORT,</div><div class='add'>+                   "%s is not a valid port "</div><div class='add'>+                   "identifier",</div><div class='add'>+                   blocked_port);</div><div class='add'>+            result = _gf_true;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        range_port = strtok(blocked_port, "-");</div><div class='add'>+        if (!range_port) {</div><div class='add'>+            result = _gf_true;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (gf_string2int32(range_port, &amp;tmp_port1) == 0) {</div><div class='add'>+            if (tmp_port1 &gt; ceiling)</div><div class='add'>+                tmp_port1 = ceiling;</div><div class='add'>+            if (tmp_port1 &lt; 0)</div><div class='add'>+                tmp_port1 = 0;</div><div class='add'>+        }</div><div class='add'>+        range_port = strtok(NULL, "-");</div><div class='add'>+        if (!range_port) {</div><div class='add'>+            result = _gf_true;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        /* get rid of the new line character*/</div><div class='add'>+        if (range_port[strlen(range_port) - 1] == '\n')</div><div class='add'>+            range_port[strlen(range_port) - 1] = '\0';</div><div class='add'>+        if (gf_string2int32(range_port, &amp;tmp_port2) == 0) {</div><div class='add'>+            if (tmp_port2 &gt; ceiling)</div><div class='add'>+                tmp_port2 = ceiling;</div><div class='add'>+            if (tmp_port2 &lt; 0)</div><div class='add'>+                tmp_port2 = 0;</div><div class='add'>+        }</div><div class='add'>+        gf_msg_debug("glusterfs", 0, "lower: %d, higher: %d", tmp_port1,</div><div class='add'>+                     tmp_port2);</div><div class='add'>+        for (; tmp_port1 &lt;= tmp_port2; tmp_port1++)</div><div class='add'>+            BIT_SET(ports, tmp_port1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return result;</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Takes in client ip{v4,v6} and returns associated hostname, if any</div><div class='hunk'>@@ -3341,331 +3339,326 @@ out:</div><div class='ctx'>  * Returns: 0 for success, -1 for failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_get_hostname_from_ip (char *client_ip, char **hostname)</div><div class='del'>-{</div><div class='del'>-        int                      ret                          = -1;</div><div class='del'>-        struct sockaddr         *client_sockaddr              = NULL;</div><div class='del'>-        struct sockaddr_in       client_sock_in               = {0};</div><div class='del'>-        struct sockaddr_in6      client_sock_in6              = {0};</div><div class='del'>-        char                     client_hostname[NI_MAXHOST]  = {0};</div><div class='del'>-        char                    *client_ip_copy               = NULL;</div><div class='del'>-        char                    *tmp                          = NULL;</div><div class='del'>-        char                    *ip                           = NULL;</div><div class='del'>-        size_t                   addr_sz                      = 0;</div><div class='del'>-</div><div class='del'>-        /* if ipv4, reverse lookup the hostname to</div><div class='del'>-         * allow FQDN based rpc authentication</div><div class='del'>-         */</div><div class='del'>-        if (!valid_ipv6_address (client_ip, strlen (client_ip), 0) &amp;&amp;</div><div class='del'>-            !valid_ipv4_address (client_ip, strlen (client_ip), 0)) {</div><div class='del'>-                /* most times, we get a.b.c.d:port form, so check that */</div><div class='del'>-                client_ip_copy = gf_strdup (client_ip);</div><div class='del'>-                if (!client_ip_copy)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ip = strtok_r (client_ip_copy, ":", &amp;tmp);</div><div class='del'>-        } else {</div><div class='del'>-                ip = client_ip;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (valid_ipv4_address (ip, strlen (ip), 0) == _gf_true) {</div><div class='del'>-                client_sockaddr = (struct sockaddr *)&amp;client_sock_in;</div><div class='del'>-                addr_sz = sizeof (client_sock_in);</div><div class='del'>-                client_sock_in.sin_family = AF_INET;</div><div class='del'>-                ret = inet_pton (AF_INET, ip,</div><div class='del'>-                                 (void *)&amp;client_sock_in.sin_addr.s_addr);</div><div class='del'>-</div><div class='del'>-        } else if (valid_ipv6_address (ip, strlen (ip), 0) == _gf_true) {</div><div class='del'>-                client_sockaddr = (struct sockaddr *) &amp;client_sock_in6;</div><div class='del'>-                addr_sz = sizeof (client_sock_in6);</div><div class='add'>+gf_get_hostname_from_ip(char *client_ip, char **hostname)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct sockaddr *client_sockaddr = NULL;</div><div class='add'>+    struct sockaddr_in client_sock_in = {0};</div><div class='add'>+    struct sockaddr_in6 client_sock_in6 = {0};</div><div class='add'>+    char client_hostname[NI_MAXHOST] = {0};</div><div class='add'>+    char *client_ip_copy = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *ip = NULL;</div><div class='add'>+    size_t addr_sz = 0;</div><div class='add'>+</div><div class='add'>+    /* if ipv4, reverse lookup the hostname to</div><div class='add'>+     * allow FQDN based rpc authentication</div><div class='add'>+     */</div><div class='add'>+    if (!valid_ipv6_address(client_ip, strlen(client_ip), 0) &amp;&amp;</div><div class='add'>+        !valid_ipv4_address(client_ip, strlen(client_ip), 0)) {</div><div class='add'>+        /* most times, we get a.b.c.d:port form, so check that */</div><div class='add'>+        client_ip_copy = gf_strdup(client_ip);</div><div class='add'>+        if (!client_ip_copy)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ip = strtok_r(client_ip_copy, ":", &amp;tmp);</div><div class='add'>+    } else {</div><div class='add'>+        ip = client_ip;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (valid_ipv4_address(ip, strlen(ip), 0) == _gf_true) {</div><div class='add'>+        client_sockaddr = (struct sockaddr *)&amp;client_sock_in;</div><div class='add'>+        addr_sz = sizeof(client_sock_in);</div><div class='add'>+        client_sock_in.sin_family = AF_INET;</div><div class='add'>+        ret = inet_pton(AF_INET, ip, (void *)&amp;client_sock_in.sin_addr.s_addr);</div><div class='add'>+</div><div class='add'>+    } else if (valid_ipv6_address(ip, strlen(ip), 0) == _gf_true) {</div><div class='add'>+        client_sockaddr = (struct sockaddr *)&amp;client_sock_in6;</div><div class='add'>+        addr_sz = sizeof(client_sock_in6);</div><div class='add'>+</div><div class='add'>+        client_sock_in6.sin6_family = AF_INET6;</div><div class='add'>+        ret = inet_pton(AF_INET6, ip, (void *)&amp;client_sock_in6.sin6_addr);</div><div class='add'>+    } else {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret != 1) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* You cannot just use sizeof (*client_sockaddr), as per the man page</div><div class='add'>+     * the (getnameinfo) size must be the size of the underlying sockaddr</div><div class='add'>+     * struct e.g. sockaddr_in6 or sockaddr_in.  Failure to do so will</div><div class='add'>+     * break IPv6 hostname resolution (IPv4 will work only because</div><div class='add'>+     * the sockaddr_in struct happens to be of the correct size).</div><div class='add'>+     */</div><div class='add'>+    ret = getnameinfo(client_sockaddr, addr_sz, client_hostname,</div><div class='add'>+                      sizeof(client_hostname), NULL, 0, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("common-utils", GF_LOG_ERROR, 0, LG_MSG_GETNAMEINFO_FAILED,</div><div class='add'>+               "Could not lookup hostname "</div><div class='add'>+               "of %s : %s",</div><div class='add'>+               client_ip, gai_strerror(ret));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *hostname = gf_strdup((char *)client_hostname);</div><div class='add'>+out:</div><div class='add'>+    if (client_ip_copy)</div><div class='add'>+        GF_FREE(client_ip_copy);</div><div class='ctx'> </div><div class='del'>-                client_sock_in6.sin6_family = AF_INET6;</div><div class='del'>-                ret = inet_pton (AF_INET6, ip,</div><div class='del'>-                                 (void *)&amp;client_sock_in6.sin6_addr);</div><div class='del'>-        } else {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (ret != 1) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_boolean_t</div><div class='add'>+gf_interface_search(char *ip)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t found = _gf_false;</div><div class='add'>+    struct ifaddrs *ifaddr, *ifa;</div><div class='add'>+    int family;</div><div class='add'>+    char host[NI_MAXHOST];</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char *pct = NULL;</div><div class='ctx'> </div><div class='del'>-        /* You cannot just use sizeof (*client_sockaddr), as per the man page</div><div class='del'>-         * the (getnameinfo) size must be the size of the underlying sockaddr</div><div class='del'>-         * struct e.g. sockaddr_in6 or sockaddr_in.  Failure to do so will</div><div class='del'>-         * break IPv6 hostname resolution (IPv4 will work only because</div><div class='del'>-         * the sockaddr_in struct happens to be of the correct size).</div><div class='del'>-         */</div><div class='del'>-        ret = getnameinfo (client_sockaddr,</div><div class='del'>-                           addr_sz,</div><div class='del'>-                           client_hostname, sizeof (client_hostname),</div><div class='del'>-                           NULL, 0, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("common-utils", GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_GETNAMEINFO_FAILED, "Could not lookup hostname "</div><div class='del'>-                        "of %s : %s", client_ip, gai_strerror (ret));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        *hostname = gf_strdup ((char *)client_hostname);</div><div class='del'>- out:</div><div class='del'>-        if (client_ip_copy)</div><div class='del'>-                GF_FREE (client_ip_copy);</div><div class='add'>+    ret = getifaddrs(&amp;ifaddr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_GETIFADDRS_FAILED,</div><div class='add'>+               "getifaddrs() failed: %s\n", gai_strerror(ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-gf_boolean_t</div><div class='del'>-gf_interface_search (char *ip)</div><div class='del'>-{</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        gf_boolean_t    found = _gf_false;</div><div class='del'>-        struct          ifaddrs *ifaddr, *ifa;</div><div class='del'>-        int             family;</div><div class='del'>-        char            host[NI_MAXHOST];</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-        char            *pct = NULL;</div><div class='add'>+    for (ifa = ifaddr; ifa != NULL; ifa = ifa-&gt;ifa_next) {</div><div class='add'>+        if (!ifa-&gt;ifa_addr) {</div><div class='add'>+            /*</div><div class='add'>+             * This seemingly happens if an interface hasn't</div><div class='add'>+             * been bound to a particular protocol (seen with</div><div class='add'>+             * TUN devices).</div><div class='add'>+             */</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        family = ifa-&gt;ifa_addr-&gt;sa_family;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='add'>+        if (family != AF_INET &amp;&amp; family != AF_INET6)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        ret = getifaddrs (&amp;ifaddr);</div><div class='add'>+        ret = getnameinfo(ifa-&gt;ifa_addr,</div><div class='add'>+                          (family == AF_INET) ? sizeof(struct sockaddr_in)</div><div class='add'>+                                              : sizeof(struct sockaddr_in6),</div><div class='add'>+                          host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);</div><div class='ctx'> </div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_GETIFADDRS_FAILED,</div><div class='del'>-                        "getifaddrs() failed: %s\n", gai_strerror(ret));</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_GETNAMEINFO_FAILED,</div><div class='add'>+                   "getnameinfo() "</div><div class='add'>+                   "failed: %s\n",</div><div class='add'>+                   gai_strerror(ret));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Sometimes the address comes back as addr%eth0 or</div><div class='add'>+         * similar.  Since % is an invalid character, we can</div><div class='add'>+         * strip it out with confidence that doing so won't</div><div class='add'>+         * harm anything.</div><div class='add'>+         */</div><div class='add'>+        pct = index(host, '%');</div><div class='add'>+        if (pct) {</div><div class='add'>+            *pct = '\0';</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (ifa = ifaddr; ifa != NULL; ifa = ifa-&gt;ifa_next) {</div><div class='del'>-                if (!ifa-&gt;ifa_addr) {</div><div class='del'>-                        /*</div><div class='del'>-                         * This seemingly happens if an interface hasn't</div><div class='del'>-                         * been bound to a particular protocol (seen with</div><div class='del'>-                         * TUN devices).</div><div class='del'>-                         */</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                family = ifa-&gt;ifa_addr-&gt;sa_family;</div><div class='del'>-</div><div class='del'>-                if (family != AF_INET &amp;&amp; family != AF_INET6)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                ret = getnameinfo (ifa-&gt;ifa_addr,</div><div class='del'>-                        (family == AF_INET) ? sizeof(struct sockaddr_in) :</div><div class='del'>-                                              sizeof(struct sockaddr_in6),</div><div class='del'>-                        host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);</div><div class='del'>-</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_GETNAMEINFO_FAILED, "getnameinfo() "</div><div class='del'>-                                "failed: %s\n", gai_strerror(ret));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Sometimes the address comes back as addr%eth0 or</div><div class='del'>-                 * similar.  Since % is an invalid character, we can</div><div class='del'>-                 * strip it out with confidence that doing so won't</div><div class='del'>-                 * harm anything.</div><div class='del'>-                 */</div><div class='del'>-                pct = index(host,'%');</div><div class='del'>-                if (pct) {</div><div class='del'>-                        *pct = '\0';</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (strncmp (ip, host, NI_MAXHOST) == 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s is local address at "</div><div class='del'>-                                      "interface %s", ip, ifa-&gt;ifa_name);</div><div class='del'>-                        found = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (strncmp(ip, host, NI_MAXHOST) == 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s is local address at "</div><div class='add'>+                         "interface %s",</div><div class='add'>+                         ip, ifa-&gt;ifa_name);</div><div class='add'>+            found = _gf_true;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if(ifaddr)</div><div class='del'>-                freeifaddrs (ifaddr);</div><div class='del'>-        return found;</div><div class='add'>+    if (ifaddr)</div><div class='add'>+        freeifaddrs(ifaddr);</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-get_ip_from_addrinfo (struct addrinfo *addr, char **ip)</div><div class='add'>+get_ip_from_addrinfo(struct addrinfo *addr, char **ip)</div><div class='ctx'> {</div><div class='del'>-        char buf[64];</div><div class='del'>-        void *in_addr = NULL;</div><div class='del'>-        struct sockaddr_in *s4 = NULL;</div><div class='del'>-        struct sockaddr_in6 *s6 = NULL;</div><div class='add'>+    char buf[64];</div><div class='add'>+    void *in_addr = NULL;</div><div class='add'>+    struct sockaddr_in *s4 = NULL;</div><div class='add'>+    struct sockaddr_in6 *s6 = NULL;</div><div class='ctx'> </div><div class='del'>-        switch (addr-&gt;ai_family)</div><div class='del'>-        {</div><div class='del'>-                case AF_INET:</div><div class='del'>-                        s4 = (struct sockaddr_in *)addr-&gt;ai_addr;</div><div class='del'>-                        in_addr = &amp;s4-&gt;sin_addr;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case AF_INET6:</div><div class='del'>-                        s6 = (struct sockaddr_in6 *)addr-&gt;ai_addr;</div><div class='del'>-                        in_addr = &amp;s6-&gt;sin6_addr;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        gf_msg ("glusterd", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_FAMILY, "Invalid family");</div><div class='del'>-                        return NULL;</div><div class='del'>-        }</div><div class='add'>+    switch (addr-&gt;ai_family) {</div><div class='add'>+        case AF_INET:</div><div class='add'>+            s4 = (struct sockaddr_in *)addr-&gt;ai_addr;</div><div class='add'>+            in_addr = &amp;s4-&gt;sin_addr;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        if (!inet_ntop(addr-&gt;ai_family, in_addr, buf, sizeof(buf))) {</div><div class='del'>-                gf_msg ("glusterd", GF_LOG_ERROR, 0, LG_MSG_CONVERSION_FAILED,</div><div class='del'>-                        "String conversion failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+        case AF_INET6:</div><div class='add'>+            s6 = (struct sockaddr_in6 *)addr-&gt;ai_addr;</div><div class='add'>+            in_addr = &amp;s6-&gt;sin6_addr;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        default:</div><div class='add'>+            gf_msg("glusterd", GF_LOG_ERROR, 0, LG_MSG_INVALID_FAMILY,</div><div class='add'>+                   "Invalid family");</div><div class='add'>+            return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!inet_ntop(addr-&gt;ai_family, in_addr, buf, sizeof(buf))) {</div><div class='add'>+        gf_msg("glusterd", GF_LOG_ERROR, 0, LG_MSG_CONVERSION_FAILED,</div><div class='add'>+               "String conversion failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *ip = gf_strdup (buf);</div><div class='del'>-        return *ip;</div><div class='add'>+    *ip = gf_strdup(buf);</div><div class='add'>+    return *ip;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_loopback_localhost (const struct sockaddr *sa, char *hostname)</div><div class='del'>-{</div><div class='del'>-        GF_ASSERT (sa);</div><div class='del'>-</div><div class='del'>-        gf_boolean_t is_local = _gf_false;</div><div class='del'>-        const struct in_addr *addr4 = NULL;</div><div class='del'>-        const struct in6_addr *addr6 = NULL;</div><div class='del'>-        uint8_t      *ap   = NULL;</div><div class='del'>-        struct in6_addr loopbackaddr6 = IN6ADDR_LOOPBACK_INIT;</div><div class='del'>-</div><div class='del'>-        switch (sa-&gt;sa_family) {</div><div class='del'>-                case AF_INET:</div><div class='del'>-                        addr4 = &amp;(((struct sockaddr_in *)sa)-&gt;sin_addr);</div><div class='del'>-                        ap = (uint8_t*)&amp;addr4-&gt;s_addr;</div><div class='del'>-                        if (ap[0] == 127)</div><div class='del'>-                                is_local = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case AF_INET6:</div><div class='del'>-                        addr6 = &amp;(((struct sockaddr_in6 *)sa)-&gt;sin6_addr);</div><div class='del'>-                        if (memcmp (addr6, &amp;loopbackaddr6,</div><div class='del'>-                                    sizeof (loopbackaddr6)) == 0)</div><div class='del'>-                                is_local = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        if (hostname)</div><div class='del'>-                                gf_msg ("glusterd", GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_INVALID_FAMILY, "unknown "</div><div class='del'>-                                        "address family %d for %s",</div><div class='del'>-                                        sa-&gt;sa_family, hostname);</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+gf_is_loopback_localhost(const struct sockaddr *sa, char *hostname)</div><div class='add'>+{</div><div class='add'>+    GF_ASSERT(sa);</div><div class='add'>+</div><div class='add'>+    gf_boolean_t is_local = _gf_false;</div><div class='add'>+    const struct in_addr *addr4 = NULL;</div><div class='add'>+    const struct in6_addr *addr6 = NULL;</div><div class='add'>+    uint8_t *ap = NULL;</div><div class='add'>+    struct in6_addr loopbackaddr6 = IN6ADDR_LOOPBACK_INIT;</div><div class='add'>+</div><div class='add'>+    switch (sa-&gt;sa_family) {</div><div class='add'>+        case AF_INET:</div><div class='add'>+            addr4 = &amp;(((struct sockaddr_in *)sa)-&gt;sin_addr);</div><div class='add'>+            ap = (uint8_t *)&amp;addr4-&gt;s_addr;</div><div class='add'>+            if (ap[0] == 127)</div><div class='add'>+                is_local = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case AF_INET6:</div><div class='add'>+            addr6 = &amp;(((struct sockaddr_in6 *)sa)-&gt;sin6_addr);</div><div class='add'>+            if (memcmp(addr6, &amp;loopbackaddr6, sizeof(loopbackaddr6)) == 0)</div><div class='add'>+                is_local = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        default:</div><div class='add'>+            if (hostname)</div><div class='add'>+                gf_msg("glusterd", GF_LOG_ERROR, 0, LG_MSG_INVALID_FAMILY,</div><div class='add'>+                       "unknown "</div><div class='add'>+                       "address family %d for %s",</div><div class='add'>+                       sa-&gt;sa_family, hostname);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return is_local;</div><div class='add'>+    return is_local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_local_addr (char *hostname)</div><div class='add'>+gf_is_local_addr(char *hostname)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        struct          addrinfo *result = NULL;</div><div class='del'>-        struct          addrinfo *res = NULL;</div><div class='del'>-        gf_boolean_t    found = _gf_false;</div><div class='del'>-        char            *ip = NULL;</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-        struct          addrinfo hints;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    struct addrinfo *result = NULL;</div><div class='add'>+    struct addrinfo *res = NULL;</div><div class='add'>+    gf_boolean_t found = _gf_false;</div><div class='add'>+    char *ip = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct addrinfo hints;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        memset (&amp;hints, 0, sizeof (hints));</div><div class='del'>-        /*</div><div class='del'>-         * Removing AI_ADDRCONFIG from default_hints</div><div class='del'>-         * for being able to use link local ipv6 addresses</div><div class='del'>-         */</div><div class='del'>-        hints.ai_family = AF_UNSPEC;</div><div class='add'>+    memset(&amp;hints, 0, sizeof(hints));</div><div class='add'>+    /*</div><div class='add'>+     * Removing AI_ADDRCONFIG from default_hints</div><div class='add'>+     * for being able to use link local ipv6 addresses</div><div class='add'>+     */</div><div class='add'>+    hints.ai_family = AF_UNSPEC;</div><div class='ctx'> </div><div class='del'>-        ret = getaddrinfo (hostname, NULL, &amp;hints, &amp;result);</div><div class='add'>+    ret = getaddrinfo(hostname, NULL, &amp;hints, &amp;result);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='del'>-                        "error in getaddrinfo: %s\n", gai_strerror(ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='add'>+               "error in getaddrinfo: %s\n", gai_strerror(ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (res = result; res != NULL; res = res-&gt;ai_next) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s ", get_ip_from_addrinfo(res, &amp;ip));</div><div class='ctx'> </div><div class='del'>-        for (res = result; res != NULL; res = res-&gt;ai_next) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s ",</div><div class='del'>-                              get_ip_from_addrinfo (res, &amp;ip));</div><div class='del'>-</div><div class='del'>-                if (ip) {</div><div class='del'>-                        found = gf_is_loopback_localhost</div><div class='del'>-                                (res-&gt;ai_addr, hostname) ||</div><div class='del'>-                                gf_interface_search (ip);</div><div class='del'>-                }</div><div class='del'>-                if (found) {</div><div class='del'>-                        GF_FREE (ip);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (ip);</div><div class='add'>+        if (ip) {</div><div class='add'>+            found = gf_is_loopback_localhost(res-&gt;ai_addr, hostname) ||</div><div class='add'>+                    gf_interface_search(ip);</div><div class='add'>+        }</div><div class='add'>+        if (found) {</div><div class='add'>+            GF_FREE(ip);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(ip);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (result)</div><div class='del'>-                freeaddrinfo (result);</div><div class='add'>+    if (result)</div><div class='add'>+        freeaddrinfo(result);</div><div class='ctx'> </div><div class='del'>-        if (!found)</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s is not local", hostname);</div><div class='add'>+    if (!found)</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s is not local", hostname);</div><div class='ctx'> </div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_same_address (char *name1, char *name2)</div><div class='del'>-{</div><div class='del'>-        struct addrinfo         *addr1 = NULL;</div><div class='del'>-        struct addrinfo         *addr2 = NULL;</div><div class='del'>-        struct addrinfo         *p = NULL;</div><div class='del'>-        struct addrinfo         *q = NULL;</div><div class='del'>-        gf_boolean_t            ret = _gf_false;</div><div class='del'>-        int                     gai_err = 0;</div><div class='del'>-        struct                  addrinfo hints;</div><div class='del'>-</div><div class='del'>-        memset (&amp;hints, 0, sizeof (hints));</div><div class='del'>-        hints.ai_family = AF_UNSPEC;</div><div class='del'>-</div><div class='del'>-        gai_err = getaddrinfo(name1, NULL, &amp;hints, &amp;addr1);</div><div class='del'>-        if (gai_err != 0) {</div><div class='del'>-                gf_msg (name1, GF_LOG_WARNING, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='del'>-                        "error in getaddrinfo: %s\n", gai_strerror(gai_err));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gai_err = getaddrinfo(name2, NULL, &amp;hints, &amp;addr2);</div><div class='del'>-        if (gai_err != 0) {</div><div class='del'>-                gf_msg (name2, GF_LOG_WARNING, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='del'>-                        "error in getaddrinfo: %s\n", gai_strerror(gai_err));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (p = addr1; p; p = p-&gt;ai_next) {</div><div class='del'>-                for (q = addr2; q; q = q-&gt;ai_next) {</div><div class='del'>-                        if (p-&gt;ai_addrlen != q-&gt;ai_addrlen) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        if (memcmp(p-&gt;ai_addr,q-&gt;ai_addr,p-&gt;ai_addrlen)) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        ret = _gf_true;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+gf_is_same_address(char *name1, char *name2)</div><div class='add'>+{</div><div class='add'>+    struct addrinfo *addr1 = NULL;</div><div class='add'>+    struct addrinfo *addr2 = NULL;</div><div class='add'>+    struct addrinfo *p = NULL;</div><div class='add'>+    struct addrinfo *q = NULL;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    int gai_err = 0;</div><div class='add'>+    struct addrinfo hints;</div><div class='add'>+</div><div class='add'>+    memset(&amp;hints, 0, sizeof(hints));</div><div class='add'>+    hints.ai_family = AF_UNSPEC;</div><div class='add'>+</div><div class='add'>+    gai_err = getaddrinfo(name1, NULL, &amp;hints, &amp;addr1);</div><div class='add'>+    if (gai_err != 0) {</div><div class='add'>+        gf_msg(name1, GF_LOG_WARNING, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='add'>+               "error in getaddrinfo: %s\n", gai_strerror(gai_err));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gai_err = getaddrinfo(name2, NULL, &amp;hints, &amp;addr2);</div><div class='add'>+    if (gai_err != 0) {</div><div class='add'>+        gf_msg(name2, GF_LOG_WARNING, 0, LG_MSG_GETADDRINFO_FAILED,</div><div class='add'>+               "error in getaddrinfo: %s\n", gai_strerror(gai_err));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (p = addr1; p; p = p-&gt;ai_next) {</div><div class='add'>+        for (q = addr2; q; q = q-&gt;ai_next) {</div><div class='add'>+            if (p-&gt;ai_addrlen != q-&gt;ai_addrlen) {</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+            if (memcmp(p-&gt;ai_addr, q-&gt;ai_addr, p-&gt;ai_addrlen)) {</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+            ret = _gf_true;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (addr1) {</div><div class='del'>-                freeaddrinfo(addr1);</div><div class='del'>-        }</div><div class='del'>-        if (addr2) {</div><div class='del'>-                freeaddrinfo(addr2);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (addr1) {</div><div class='add'>+        freeaddrinfo(addr1);</div><div class='add'>+    }</div><div class='add'>+    if (addr2) {</div><div class='add'>+        freeaddrinfo(addr2);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -3673,511 +3666,503 @@ out:</div><div class='ctx'>  * Format: &lt;host1&gt;:&lt;port1&gt; &lt;host2&gt;:&lt;port2&gt;...</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_process_getspec_servers_list(cmd_args_t *cmd_args,</div><div class='del'>-                                const char *servers_list) {</div><div class='del'>-        char        *tmp = NULL;</div><div class='del'>-        char        *address = NULL;</div><div class='del'>-        char        *host = NULL;</div><div class='del'>-        char        *last_colon = NULL;</div><div class='del'>-        char        *save_ptr = NULL;</div><div class='del'>-        int          port = 0;</div><div class='del'>-        int          ret = -1;</div><div class='del'>-</div><div class='del'>-        tmp = gf_strdup (servers_list);</div><div class='del'>-        if (!tmp) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        address = strtok_r (tmp, " ", &amp;save_ptr);</div><div class='add'>+gf_process_getspec_servers_list(cmd_args_t *cmd_args, const char *servers_list)</div><div class='add'>+{</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *address = NULL;</div><div class='add'>+    char *host = NULL;</div><div class='add'>+    char *last_colon = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='add'>+    int port = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    tmp = gf_strdup(servers_list);</div><div class='add'>+    if (!tmp) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    address = strtok_r(tmp, " ", &amp;save_ptr);</div><div class='add'>+    if (!address) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        last_colon = strrchr(address, ':');</div><div class='add'>+        if (!last_colon) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        *last_colon = '\0';</div><div class='add'>+        host = address;</div><div class='add'>+        port = atoi(last_colon + 1);</div><div class='add'>+        if (port &lt;= 0) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        ret = gf_set_volfile_server_common(cmd_args, host,</div><div class='add'>+                                           GF_DEFAULT_VOLFILE_TRANSPORT, port);</div><div class='add'>+        if (ret &amp;&amp; errno != EEXIST) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        address = strtok_r(NULL, " ", &amp;save_ptr);</div><div class='ctx'>         if (!address) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                last_colon = strrchr (address, ':');</div><div class='del'>-                if (!last_colon) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                *last_colon = '\0';</div><div class='del'>-                host = address;</div><div class='del'>-                port = atoi (last_colon + 1);</div><div class='del'>-                if (port &lt;= 0) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                ret = gf_set_volfile_server_common (</div><div class='del'>-                        cmd_args, host, GF_DEFAULT_VOLFILE_TRANSPORT, port);</div><div class='del'>-                if (ret &amp;&amp; errno != EEXIST) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                address = strtok_r (NULL, " ", &amp;save_ptr);</div><div class='del'>-                if (!address) {</div><div class='del'>-                        errno = 0;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            errno = 0;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (tmp) {</div><div class='del'>-                GF_FREE (tmp);</div><div class='del'>-        }</div><div class='add'>+    if (tmp) {</div><div class='add'>+        GF_FREE(tmp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_set_volfile_server_common (cmd_args_t *cmd_args, const char *host,</div><div class='del'>-                              const char *transport, int port)</div><div class='del'>-{</div><div class='del'>-        server_cmdline_t      *server = NULL;</div><div class='del'>-        server_cmdline_t      *tmp = NULL;</div><div class='del'>-        int                    ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, cmd_args, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, host, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, transport, out);</div><div class='del'>-</div><div class='del'>-        server = GF_CALLOC (1, sizeof (server_cmdline_t),</div><div class='del'>-                            gf_common_mt_server_cmdline_t);</div><div class='del'>-        if (!server) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;server-&gt;list);</div><div class='del'>-</div><div class='del'>-        server-&gt;volfile_server = gf_strdup (host);</div><div class='del'>-        if (!server-&gt;volfile_server) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        server-&gt;transport = gf_strdup (transport);</div><div class='del'>-        if (!server-&gt;transport) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        server-&gt;port = port;</div><div class='del'>-</div><div class='del'>-        if (!cmd_args-&gt;volfile_server) {</div><div class='del'>-                cmd_args-&gt;volfile_server = server-&gt;volfile_server;</div><div class='del'>-                cmd_args-&gt;volfile_server_transport = server-&gt;transport;</div><div class='del'>-                cmd_args-&gt;volfile_server_port = server-&gt;port;</div><div class='del'>-                cmd_args-&gt;curr_server = server;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry(tmp, &amp;cmd_args-&gt;volfile_servers, list) {</div><div class='del'>-                if ((!strcmp(tmp-&gt;volfile_server, server-&gt;volfile_server) &amp;&amp;</div><div class='del'>-                     !strcmp(tmp-&gt;transport, server-&gt;transport) &amp;&amp;</div><div class='del'>-                     (tmp-&gt;port == server-&gt;port))) {</div><div class='del'>-                        errno = EEXIST;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_add_tail (&amp;server-&gt;list, &amp;cmd_args-&gt;volfile_servers);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+gf_set_volfile_server_common(cmd_args_t *cmd_args, const char *host,</div><div class='add'>+                             const char *transport, int port)</div><div class='add'>+{</div><div class='add'>+    server_cmdline_t *server = NULL;</div><div class='add'>+    server_cmdline_t *tmp = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, cmd_args, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, host, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, transport, out);</div><div class='add'>+</div><div class='add'>+    server = GF_CALLOC(1, sizeof(server_cmdline_t),</div><div class='add'>+                       gf_common_mt_server_cmdline_t);</div><div class='add'>+    if (!server) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;server-&gt;list);</div><div class='add'>+</div><div class='add'>+    server-&gt;volfile_server = gf_strdup(host);</div><div class='add'>+    if (!server-&gt;volfile_server) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    server-&gt;transport = gf_strdup(transport);</div><div class='add'>+    if (!server-&gt;transport) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    server-&gt;port = port;</div><div class='add'>+</div><div class='add'>+    if (!cmd_args-&gt;volfile_server) {</div><div class='add'>+        cmd_args-&gt;volfile_server = server-&gt;volfile_server;</div><div class='add'>+        cmd_args-&gt;volfile_server_transport = server-&gt;transport;</div><div class='add'>+        cmd_args-&gt;volfile_server_port = server-&gt;port;</div><div class='add'>+        cmd_args-&gt;curr_server = server;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(tmp, &amp;cmd_args-&gt;volfile_servers, list)</div><div class='add'>+    {</div><div class='add'>+        if ((!strcmp(tmp-&gt;volfile_server, server-&gt;volfile_server) &amp;&amp;</div><div class='add'>+             !strcmp(tmp-&gt;transport, server-&gt;transport) &amp;&amp;</div><div class='add'>+             (tmp-&gt;port == server-&gt;port))) {</div><div class='add'>+            errno = EEXIST;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_add_tail(&amp;server-&gt;list, &amp;cmd_args-&gt;volfile_servers);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                if (server) {</div><div class='del'>-                        GF_FREE (server-&gt;volfile_server);</div><div class='del'>-                        GF_FREE (server-&gt;transport);</div><div class='del'>-                        GF_FREE (server);</div><div class='del'>-                }</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        if (server) {</div><div class='add'>+            GF_FREE(server-&gt;volfile_server);</div><div class='add'>+            GF_FREE(server-&gt;transport);</div><div class='add'>+            GF_FREE(server);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Sets log file path from user provided arguments */</div><div class='ctx'> int</div><div class='del'>-gf_set_log_file_path (cmd_args_t *cmd_args, glusterfs_ctx_t *ctx)</div><div class='del'>-{</div><div class='del'>-        int   i = 0;</div><div class='del'>-        int   j = 0;</div><div class='del'>-        int   ret = 0;</div><div class='del'>-        int   tmp_len = 0;</div><div class='del'>-        char  tmp_str[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        if (!cmd_args)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;mount_point) {</div><div class='del'>-                j = 0;</div><div class='del'>-                i = 0;</div><div class='del'>-                if (cmd_args-&gt;mount_point[0] == '/')</div><div class='del'>-                        i = 1;</div><div class='del'>-                for (; i &lt; strlen (cmd_args-&gt;mount_point); i++,j++) {</div><div class='del'>-                        tmp_str[j] = cmd_args-&gt;mount_point[i];</div><div class='del'>-                        if (cmd_args-&gt;mount_point[i] == '/')</div><div class='del'>-                                tmp_str[j] = '-';</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_asprintf (&amp;cmd_args-&gt;log_file,</div><div class='del'>-                                   DEFAULT_LOG_FILE_DIRECTORY "/%s.log",</div><div class='del'>-                                   tmp_str);</div><div class='del'>-                if (ret &gt; 0)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+gf_set_log_file_path(cmd_args_t *cmd_args, glusterfs_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int tmp_len = 0;</div><div class='add'>+    char tmp_str[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (ctx &amp;&amp; GF_GLUSTERD_PROCESS == ctx-&gt;process_mode) {</div><div class='del'>-                ret = gf_asprintf (&amp;cmd_args-&gt;log_file,</div><div class='del'>-                                   DEFAULT_LOG_FILE_DIRECTORY "/%s.log",</div><div class='del'>-                                   GLUSTERD_NAME);</div><div class='del'>-                if (ret &gt; 0)</div><div class='del'>-                        ret = 0;</div><div class='add'>+    if (!cmd_args)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-                goto done;</div><div class='add'>+    if (cmd_args-&gt;mount_point) {</div><div class='add'>+        j = 0;</div><div class='add'>+        i = 0;</div><div class='add'>+        if (cmd_args-&gt;mount_point[0] == '/')</div><div class='add'>+            i = 1;</div><div class='add'>+        for (; i &lt; strlen(cmd_args-&gt;mount_point); i++, j++) {</div><div class='add'>+            tmp_str[j] = cmd_args-&gt;mount_point[i];</div><div class='add'>+            if (cmd_args-&gt;mount_point[i] == '/')</div><div class='add'>+                tmp_str[j] = '-';</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;volfile) {</div><div class='del'>-                j = 0;</div><div class='del'>-                i = 0;</div><div class='del'>-                if (cmd_args-&gt;volfile[0] == '/')</div><div class='del'>-                        i = 1;</div><div class='del'>-                for (; i &lt; strlen (cmd_args-&gt;volfile); i++,j++) {</div><div class='del'>-                        tmp_str[j] = cmd_args-&gt;volfile[i];</div><div class='del'>-                        if (cmd_args-&gt;volfile[i] == '/')</div><div class='del'>-                                tmp_str[j] = '-';</div><div class='del'>-                }</div><div class='del'>-                ret = gf_asprintf (&amp;cmd_args-&gt;log_file,</div><div class='del'>-                                   DEFAULT_LOG_FILE_DIRECTORY "/%s.log",</div><div class='del'>-                                   tmp_str);</div><div class='del'>-                if (ret &gt; 0)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+        ret = gf_asprintf(&amp;cmd_args-&gt;log_file,</div><div class='add'>+                          DEFAULT_LOG_FILE_DIRECTORY "/%s.log", tmp_str);</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            ret = 0;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx &amp;&amp; GF_GLUSTERD_PROCESS == ctx-&gt;process_mode) {</div><div class='add'>+        ret = gf_asprintf(&amp;cmd_args-&gt;log_file,</div><div class='add'>+                          DEFAULT_LOG_FILE_DIRECTORY "/%s.log", GLUSTERD_NAME);</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            ret = 0;</div><div class='add'>+</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;volfile_server) {</div><div class='del'>-                if (strncmp (cmd_args-&gt;volfile_server_transport,</div><div class='del'>-                             "unix", 4) == 0) {</div><div class='del'>-                        if (cmd_args-&gt;volfile_server[0] == '/')</div><div class='del'>-                                i = 1;</div><div class='del'>-                        tmp_len = strlen (cmd_args-&gt;volfile_server);</div><div class='del'>-                        for (j = 0; i &lt; tmp_len; i++, j++) {</div><div class='del'>-                                tmp_str[j] = cmd_args-&gt;volfile_server[i];</div><div class='del'>-                                if (cmd_args-&gt;volfile_server[i] == '/')</div><div class='del'>-                                        tmp_str[j] = '-';</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_asprintf (&amp;cmd_args-&gt;log_file,</div><div class='del'>-                                           "%s/%s-%s-%d.log",</div><div class='del'>-                                           DEFAULT_LOG_FILE_DIRECTORY,</div><div class='del'>-                                           tmp_str,</div><div class='del'>-                                           cmd_args-&gt;volfile_id, getpid());</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_asprintf (&amp;cmd_args-&gt;log_file,</div><div class='del'>-                                           "%s/%s-%s-%d.log",</div><div class='del'>-                                           DEFAULT_LOG_FILE_DIRECTORY,</div><div class='del'>-                                           cmd_args-&gt;volfile_server,</div><div class='del'>-                                           cmd_args-&gt;volfile_id, getpid());</div><div class='del'>-                }</div><div class='del'>-                if (ret &gt; 0)</div><div class='del'>-                        ret = 0;</div><div class='add'>+    if (cmd_args-&gt;volfile) {</div><div class='add'>+        j = 0;</div><div class='add'>+        i = 0;</div><div class='add'>+        if (cmd_args-&gt;volfile[0] == '/')</div><div class='add'>+            i = 1;</div><div class='add'>+        for (; i &lt; strlen(cmd_args-&gt;volfile); i++, j++) {</div><div class='add'>+            tmp_str[j] = cmd_args-&gt;volfile[i];</div><div class='add'>+            if (cmd_args-&gt;volfile[i] == '/')</div><div class='add'>+                tmp_str[j] = '-';</div><div class='add'>+        }</div><div class='add'>+        ret = gf_asprintf(&amp;cmd_args-&gt;log_file,</div><div class='add'>+                          DEFAULT_LOG_FILE_DIRECTORY "/%s.log", tmp_str);</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            ret = 0;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server) {</div><div class='add'>+        if (strncmp(cmd_args-&gt;volfile_server_transport, "unix", 4) == 0) {</div><div class='add'>+            if (cmd_args-&gt;volfile_server[0] == '/')</div><div class='add'>+                i = 1;</div><div class='add'>+            tmp_len = strlen(cmd_args-&gt;volfile_server);</div><div class='add'>+            for (j = 0; i &lt; tmp_len; i++, j++) {</div><div class='add'>+                tmp_str[j] = cmd_args-&gt;volfile_server[i];</div><div class='add'>+                if (cmd_args-&gt;volfile_server[i] == '/')</div><div class='add'>+                    tmp_str[j] = '-';</div><div class='add'>+            }</div><div class='add'>+            ret = gf_asprintf(&amp;cmd_args-&gt;log_file, "%s/%s-%s-%d.log",</div><div class='add'>+                              DEFAULT_LOG_FILE_DIRECTORY, tmp_str,</div><div class='add'>+                              cmd_args-&gt;volfile_id, getpid());</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_asprintf(&amp;cmd_args-&gt;log_file, "%s/%s-%s-%d.log",</div><div class='add'>+                              DEFAULT_LOG_FILE_DIRECTORY,</div><div class='add'>+                              cmd_args-&gt;volfile_server, cmd_args-&gt;volfile_id,</div><div class='add'>+                              getpid());</div><div class='ctx'>         }</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            ret = 0;</div><div class='add'>+    }</div><div class='ctx'> done:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_set_log_ident (cmd_args_t *cmd_args)</div><div class='add'>+gf_set_log_ident(cmd_args_t *cmd_args)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        char            *ptr = NULL;</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;log_file == NULL) {</div><div class='del'>-                /* no ident source */</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='ctx'> </div><div class='del'>-        /* TODO: Some idents would look like, etc-glusterfs-glusterd.vol, which</div><div class='del'>-         * seems ugly and can be bettered? */</div><div class='del'>-        /* just get the filename as the ident */</div><div class='del'>-        if (NULL != (ptr = strrchr (cmd_args-&gt;log_file, '/'))) {</div><div class='del'>-                ret = gf_asprintf (&amp;cmd_args-&gt;log_ident, "%s", ptr + 1);</div><div class='del'>-        } else {</div><div class='del'>-                ret = gf_asprintf (&amp;cmd_args-&gt;log_ident, "%s",</div><div class='del'>-                                   cmd_args-&gt;log_file);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &gt; 0)</div><div class='del'>-                ret = 0;</div><div class='del'>-        else</div><div class='del'>-                return ret;</div><div class='add'>+    if (cmd_args-&gt;log_file == NULL) {</div><div class='add'>+        /* no ident source */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: Some idents would look like, etc-glusterfs-glusterd.vol, which</div><div class='add'>+     * seems ugly and can be bettered? */</div><div class='add'>+    /* just get the filename as the ident */</div><div class='add'>+    if (NULL != (ptr = strrchr(cmd_args-&gt;log_file, '/'))) {</div><div class='add'>+        ret = gf_asprintf(&amp;cmd_args-&gt;log_ident, "%s", ptr + 1);</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_asprintf(&amp;cmd_args-&gt;log_ident, "%s", cmd_args-&gt;log_file);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &gt; 0)</div><div class='add'>+        ret = 0;</div><div class='add'>+    else</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        /* remove .log suffix */</div><div class='del'>-        if (NULL != (ptr = strrchr (cmd_args-&gt;log_ident, '.'))) {</div><div class='del'>-                if (strcmp (ptr, ".log") == 0) {</div><div class='del'>-                        ptr[0] = '\0';</div><div class='del'>-                }</div><div class='add'>+    /* remove .log suffix */</div><div class='add'>+    if (NULL != (ptr = strrchr(cmd_args-&gt;log_ident, '.'))) {</div><div class='add'>+        if (strcmp(ptr, ".log") == 0) {</div><div class='add'>+            ptr[0] = '\0';</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_thread_cleanup_xint (pthread_t thread)</div><div class='add'>+gf_thread_cleanup_xint(pthread_t thread)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        void *res = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *res = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_cancel (thread);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = pthread_cancel(thread);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_join (thread, &amp;res);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = pthread_join(thread, &amp;res);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        if (res != PTHREAD_CANCELED)</div><div class='del'>-                goto error_return;</div><div class='add'>+    if (res != PTHREAD_CANCELED)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return ret;</div><div class='add'>+error_return:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_thread_create (pthread_t *thread, const pthread_attr_t *attr,</div><div class='del'>-                  void *(*start_routine)(void *), void *arg, const char *name)</div><div class='del'>-{</div><div class='del'>-        sigset_t set, old;</div><div class='del'>-        int ret;</div><div class='del'>-        char thread_name[GF_THREAD_NAMEMAX+GF_THREAD_NAME_PREFIX_LEN] = {0,};</div><div class='del'>-        /* Max name on Linux is 16 and on NetBSD is 32</div><div class='del'>-         * All Gluster threads have a set prefix of gluster and hence the limit</div><div class='del'>-         * of 9 on GF_THREAD_NAMEMAX including the null character.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        sigemptyset (&amp;old);</div><div class='del'>-        sigfillset (&amp;set);</div><div class='del'>-        sigdelset (&amp;set, SIGSEGV);</div><div class='del'>-        sigdelset (&amp;set, SIGBUS);</div><div class='del'>-        sigdelset (&amp;set, SIGILL);</div><div class='del'>-        sigdelset (&amp;set, SIGSYS);</div><div class='del'>-        sigdelset (&amp;set, SIGFPE);</div><div class='del'>-        sigdelset (&amp;set, SIGABRT);</div><div class='del'>-</div><div class='del'>-        pthread_sigmask (SIG_BLOCK, &amp;set, &amp;old);</div><div class='del'>-</div><div class='del'>-        ret = pthread_create (thread, attr, start_routine, arg);</div><div class='del'>-        snprintf (thread_name, sizeof(thread_name), "%s%s",</div><div class='del'>-                  GF_THREAD_NAME_PREFIX, name);</div><div class='del'>-</div><div class='del'>-        if (0 == ret &amp;&amp; name) {</div><div class='del'>-                #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                        pthread_setname_np(*thread, thread_name);</div><div class='del'>-                #elif defined(__NetBSD__)</div><div class='del'>-                        pthread_setname_np(*thread, thread_name, NULL);</div><div class='del'>-                #elif defined(__FreeBSD__)</div><div class='del'>-                        pthread_set_name_np(*thread, thread_name);</div><div class='del'>-                #else</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_PTHREAD_NAMING_FAILED,</div><div class='del'>-                                "Could not set thread name: %s",</div><div class='del'>-                                thread_name);</div><div class='del'>-                #endif</div><div class='del'>-        }</div><div class='add'>+gf_thread_create(pthread_t *thread, const pthread_attr_t *attr,</div><div class='add'>+                 void *(*start_routine)(void *), void *arg, const char *name)</div><div class='add'>+{</div><div class='add'>+    sigset_t set, old;</div><div class='add'>+    int ret;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX + GF_THREAD_NAME_PREFIX_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    /* Max name on Linux is 16 and on NetBSD is 32</div><div class='add'>+     * All Gluster threads have a set prefix of gluster and hence the limit</div><div class='add'>+     * of 9 on GF_THREAD_NAMEMAX including the null character.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    sigemptyset(&amp;old);</div><div class='add'>+    sigfillset(&amp;set);</div><div class='add'>+    sigdelset(&amp;set, SIGSEGV);</div><div class='add'>+    sigdelset(&amp;set, SIGBUS);</div><div class='add'>+    sigdelset(&amp;set, SIGILL);</div><div class='add'>+    sigdelset(&amp;set, SIGSYS);</div><div class='add'>+    sigdelset(&amp;set, SIGFPE);</div><div class='add'>+    sigdelset(&amp;set, SIGABRT);</div><div class='add'>+</div><div class='add'>+    pthread_sigmask(SIG_BLOCK, &amp;set, &amp;old);</div><div class='add'>+</div><div class='add'>+    ret = pthread_create(thread, attr, start_routine, arg);</div><div class='add'>+    snprintf(thread_name, sizeof(thread_name), "%s%s", GF_THREAD_NAME_PREFIX,</div><div class='add'>+             name);</div><div class='add'>+</div><div class='add'>+    if (0 == ret &amp;&amp; name) {</div><div class='add'>+#ifdef GF_LINUX_HOST_OS</div><div class='add'>+        pthread_setname_np(*thread, thread_name);</div><div class='add'>+#elif defined(__NetBSD__)</div><div class='add'>+        pthread_setname_np(*thread, thread_name, NULL);</div><div class='add'>+#elif defined(__FreeBSD__)</div><div class='add'>+        pthread_set_name_np(*thread, thread_name);</div><div class='add'>+#else</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_PTHREAD_NAMING_FAILED,</div><div class='add'>+               "Could not set thread name: %s", thread_name);</div><div class='add'>+#endif</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_sigmask (SIG_SETMASK, &amp;old, NULL);</div><div class='add'>+    pthread_sigmask(SIG_SETMASK, &amp;old, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_thread_create_detached (pthread_t *thread,</div><div class='del'>-                         void *(*start_routine)(void *), void *arg,</div><div class='del'>-                         const char *name)</div><div class='add'>+gf_thread_create_detached(pthread_t *thread, void *(*start_routine)(void *),</div><div class='add'>+                          void *arg, const char *name)</div><div class='ctx'> {</div><div class='del'>-        pthread_attr_t attr;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    pthread_attr_t attr;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_attr_init (&amp;attr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        LG_MSG_PTHREAD_ATTR_INIT_FAILED,</div><div class='del'>-                        "Thread attribute initialization failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = pthread_attr_init(&amp;attr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ret, LG_MSG_PTHREAD_ATTR_INIT_FAILED,</div><div class='add'>+               "Thread attribute initialization failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_attr_setdetachstate (&amp;attr, PTHREAD_CREATE_DETACHED);</div><div class='add'>+    pthread_attr_setdetachstate(&amp;attr, PTHREAD_CREATE_DETACHED);</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_create (thread, &amp;attr, start_routine, arg, name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        LG_MSG_PTHREAD_FAILED,</div><div class='del'>-                        "Thread creation failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_thread_create(thread, &amp;attr, start_routine, arg, name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ret, LG_MSG_PTHREAD_FAILED,</div><div class='add'>+               "Thread creation failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_attr_destroy (&amp;attr);</div><div class='add'>+    pthread_attr_destroy(&amp;attr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_skip_header_section (int fd, int header_len)</div><div class='add'>+gf_skip_header_section(int fd, int header_len)</div><div class='ctx'> {</div><div class='del'>-        int  ret           = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = sys_lseek (fd, header_len, SEEK_SET);</div><div class='del'>-        if (ret == (off_t) -1) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0, LG_MSG_SKIP_HEADER_FAILED,</div><div class='del'>-                        "Failed to skip header section");</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    ret = sys_lseek(fd, header_len, SEEK_SET);</div><div class='add'>+    if (ret == (off_t)-1) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, LG_MSG_SKIP_HEADER_FAILED,</div><div class='add'>+               "Failed to skip header section");</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Below function is use to check at runtime if pid is running */</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_pid_running (int pid)</div><div class='add'>+gf_is_pid_running(int pid)</div><div class='ctx'> {</div><div class='del'>-        char fname[32] = {0,};</div><div class='add'>+    char fname[32] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        snprintf(fname, sizeof(fname), "/proc/%d/cmdline", pid);</div><div class='del'>-</div><div class='del'>-        if (sys_access (fname , R_OK) != 0) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    snprintf(fname, sizeof(fname), "/proc/%d/cmdline", pid);</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    if (sys_access(fname, R_OK) != 0) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_service_running (char *pidfile, int *pid)</div><div class='del'>-{</div><div class='del'>-        FILE            *file = NULL;</div><div class='del'>-        gf_boolean_t    running = _gf_false;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        int             fno = 0;</div><div class='del'>-</div><div class='del'>-        file = fopen (pidfile, "r+");</div><div class='del'>-        if (!file) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fno = fileno (file);</div><div class='del'>-        ret = lockf (fno, F_TEST, 0);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                running = _gf_true;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fscanf (file, "%d", pid);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Unable to read pidfile: %s", pidfile);</div><div class='del'>-                *pid = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        running = gf_is_pid_running (*pid);</div><div class='add'>+gf_is_service_running(char *pidfile, int *pid)</div><div class='add'>+{</div><div class='add'>+    FILE *file = NULL;</div><div class='add'>+    gf_boolean_t running = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fno = 0;</div><div class='add'>+</div><div class='add'>+    file = fopen(pidfile, "r+");</div><div class='add'>+    if (!file) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fno = fileno(file);</div><div class='add'>+    ret = lockf(fno, F_TEST, 0);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        running = _gf_true;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fscanf(file, "%d", pid);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Unable to read pidfile: %s", pidfile);</div><div class='add'>+        *pid = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    running = gf_is_pid_running(*pid);</div><div class='ctx'> out:</div><div class='del'>-        if (file)</div><div class='del'>-                fclose (file);</div><div class='del'>-        return running;</div><div class='add'>+    if (file)</div><div class='add'>+        fclose(file);</div><div class='add'>+    return running;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Check if the pid is &gt; 0 */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_valid_pid (const char *pid, int length)</div><div class='add'>+gf_valid_pid(const char *pid, int length)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    ret = _gf_true;</div><div class='del'>-        pid_t           value = 0;</div><div class='del'>-        char           *end_ptr = NULL;</div><div class='add'>+    gf_boolean_t ret = _gf_true;</div><div class='add'>+    pid_t value = 0;</div><div class='add'>+    char *end_ptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (length &lt;= 0) {</div><div class='del'>-                ret = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (length &lt;= 0) {</div><div class='add'>+        ret = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        value = strtol (pid, &amp;end_ptr, 10);</div><div class='del'>-        if (value &lt;= 0) {</div><div class='del'>-                ret = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    value = strtol(pid, &amp;end_ptr, 10);</div><div class='add'>+    if (value &lt;= 0) {</div><div class='add'>+        ret = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_is_linkfile_key (dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+dht_is_linkfile_key(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t *linkfile_key_found = NULL;</div><div class='add'>+    gf_boolean_t *linkfile_key_found = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!data)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        linkfile_key_found = data;</div><div class='add'>+    linkfile_key_found = data;</div><div class='ctx'> </div><div class='del'>-        *linkfile_key_found = _gf_true;</div><div class='add'>+    *linkfile_key_found = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_is_linkfile (struct iatt *buf, dict_t *dict)</div><div class='add'>+dht_is_linkfile(struct iatt *buf, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t linkfile_key_found = _gf_false;</div><div class='add'>+    gf_boolean_t linkfile_key_found = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!IS_DHT_LINKFILE_MODE (buf))</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!IS_DHT_LINKFILE_MODE(buf))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        dict_foreach_fnmatch (dict, "*."DHT_LINKFILE_STR, dht_is_linkfile_key,</div><div class='del'>-                              &amp;linkfile_key_found);</div><div class='add'>+    dict_foreach_fnmatch(dict, "*." DHT_LINKFILE_STR, dht_is_linkfile_key,</div><div class='add'>+                         &amp;linkfile_key_found);</div><div class='ctx'> </div><div class='del'>-        return linkfile_key_found;</div><div class='add'>+    return linkfile_key_found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_check_log_format (const char *value)</div><div class='add'>+gf_check_log_format(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int log_format = -1;</div><div class='add'>+    int log_format = -1;</div><div class='ctx'> </div><div class='del'>-        if (!strcasecmp (value, GF_LOG_FORMAT_NO_MSG_ID))</div><div class='del'>-                log_format = gf_logformat_traditional;</div><div class='del'>-        else if (!strcasecmp (value, GF_LOG_FORMAT_WITH_MSG_ID))</div><div class='del'>-                log_format = gf_logformat_withmsgid;</div><div class='add'>+    if (!strcasecmp(value, GF_LOG_FORMAT_NO_MSG_ID))</div><div class='add'>+        log_format = gf_logformat_traditional;</div><div class='add'>+    else if (!strcasecmp(value, GF_LOG_FORMAT_WITH_MSG_ID))</div><div class='add'>+        log_format = gf_logformat_withmsgid;</div><div class='ctx'> </div><div class='del'>-        if (log_format == -1)</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_LOG,</div><div class='del'>-                        "Invalid log-format. possible values are "</div><div class='del'>-                        GF_LOG_FORMAT_NO_MSG_ID "|" GF_LOG_FORMAT_WITH_MSG_ID);</div><div class='add'>+    if (log_format == -1)</div><div class='add'>+        gf_msg(</div><div class='add'>+            THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_LOG,</div><div class='add'>+            "Invalid log-format. possible values are " GF_LOG_FORMAT_NO_MSG_ID</div><div class='add'>+            "|" GF_LOG_FORMAT_WITH_MSG_ID);</div><div class='ctx'> </div><div class='del'>-        return log_format;</div><div class='add'>+    return log_format;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_check_logger (const char *value)</div><div class='add'>+gf_check_logger(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int logger = -1;</div><div class='add'>+    int logger = -1;</div><div class='ctx'> </div><div class='del'>-        if (!strcasecmp (value, GF_LOGGER_GLUSTER_LOG))</div><div class='del'>-                logger = gf_logger_glusterlog;</div><div class='del'>-        else if (!strcasecmp (value, GF_LOGGER_SYSLOG))</div><div class='del'>-                logger = gf_logger_syslog;</div><div class='add'>+    if (!strcasecmp(value, GF_LOGGER_GLUSTER_LOG))</div><div class='add'>+        logger = gf_logger_glusterlog;</div><div class='add'>+    else if (!strcasecmp(value, GF_LOGGER_SYSLOG))</div><div class='add'>+        logger = gf_logger_syslog;</div><div class='ctx'> </div><div class='del'>-        if (logger == -1)</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_LOG,</div><div class='del'>-                        "Invalid logger. possible values are "</div><div class='del'>-                        GF_LOGGER_GLUSTER_LOG "|" GF_LOGGER_SYSLOG);</div><div class='add'>+    if (logger == -1)</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_LOG,</div><div class='add'>+               "Invalid logger. possible values are " GF_LOGGER_GLUSTER_LOG</div><div class='add'>+               "|" GF_LOGGER_SYSLOG);</div><div class='ctx'> </div><div class='del'>-        return logger;</div><div class='add'>+    return logger;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* gf_compare_sockaddr compares the given addresses @addr1 and @addr2 for</div><div class='hunk'>@@ -4187,30 +4172,28 @@ gf_check_logger (const char *value)</div><div class='ctx'>  * https://www.opensource.apple.com/source/postfix/postfix-197/postfix/src/util/sock_addr.c</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_compare_sockaddr (const struct sockaddr *addr1,</div><div class='del'>-                     const struct sockaddr *addr2)</div><div class='add'>+gf_compare_sockaddr(const struct sockaddr *addr1, const struct sockaddr *addr2)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (addr1 != NULL);</div><div class='del'>-        GF_ASSERT (addr2 != NULL);</div><div class='del'>-</div><div class='del'>-        /* Obviously, the addresses don't match if their families are different</div><div class='del'>-         */</div><div class='del'>-        if (addr1-&gt;sa_family != addr2-&gt;sa_family)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    GF_ASSERT(addr1 != NULL);</div><div class='add'>+    GF_ASSERT(addr2 != NULL);</div><div class='ctx'> </div><div class='add'>+    /* Obviously, the addresses don't match if their families are different</div><div class='add'>+     */</div><div class='add'>+    if (addr1-&gt;sa_family != addr2-&gt;sa_family)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (AF_INET == addr1-&gt;sa_family) {</div><div class='del'>-                if (((struct sockaddr_in *)addr1)-&gt;sin_addr.s_addr ==</div><div class='del'>-                       ((struct sockaddr_in *)addr2)-&gt;sin_addr.s_addr)</div><div class='del'>-                        return _gf_true;</div><div class='add'>+    if (AF_INET == addr1-&gt;sa_family) {</div><div class='add'>+        if (((struct sockaddr_in *)addr1)-&gt;sin_addr.s_addr ==</div><div class='add'>+            ((struct sockaddr_in *)addr2)-&gt;sin_addr.s_addr)</div><div class='add'>+            return _gf_true;</div><div class='ctx'> </div><div class='del'>-        } else if (AF_INET6 == addr1-&gt;sa_family) {</div><div class='del'>-                if (memcmp ((char *)&amp;((struct sockaddr_in6 *)addr1)-&gt;sin6_addr,</div><div class='del'>-                            (char *)&amp;((struct sockaddr_in6 *)addr2)-&gt;sin6_addr,</div><div class='del'>-                            sizeof (struct in6_addr)) == 0)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    } else if (AF_INET6 == addr1-&gt;sa_family) {</div><div class='add'>+        if (memcmp((char *)&amp;((struct sockaddr_in6 *)addr1)-&gt;sin6_addr,</div><div class='add'>+                   (char *)&amp;((struct sockaddr_in6 *)addr2)-&gt;sin6_addr,</div><div class='add'>+                   sizeof(struct in6_addr)) == 0)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -4219,155 +4202,168 @@ gf_compare_sockaddr (const struct sockaddr *addr1,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_set_timestamp  (const char *src, const char* dest)</div><div class='add'>+gf_set_timestamp(const char *src, const char *dest)</div><div class='ctx'> {</div><div class='del'>-        struct stat    sb             = {0, };</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> #if defined(HAVE_UTIMENSAT)</div><div class='del'>-        struct timespec new_time[2]   = { {0, }, {0, } };</div><div class='add'>+    struct timespec new_time[2] = {{</div><div class='add'>+                                       0,</div><div class='add'>+                                   },</div><div class='add'>+                                   {</div><div class='add'>+                                       0,</div><div class='add'>+                                   }};</div><div class='ctx'> #else</div><div class='del'>-        struct timeval new_time[2]    = { {0, }, {0, } };</div><div class='add'>+    struct timeval new_time[2] = {{</div><div class='add'>+                                      0,</div><div class='add'>+                                  },</div><div class='add'>+                                  {</div><div class='add'>+                                      0,</div><div class='add'>+                                  }};</div><div class='ctx'> #endif</div><div class='del'>-        int            ret            = 0;</div><div class='del'>-        xlator_t       *this          = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (src);</div><div class='del'>-        GF_ASSERT (dest);</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (src, &amp;sb);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_FILE_STAT_FAILED, "stat on %s", src);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* The granularity is nano seconds if `utimensat()` is available,</div><div class='del'>-         * and micro seconds otherwise.</div><div class='del'>-         */</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(src);</div><div class='add'>+    GF_ASSERT(dest);</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(src, &amp;sb);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FILE_STAT_FAILED,</div><div class='add'>+               "stat on %s", src);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* The granularity is nano seconds if `utimensat()` is available,</div><div class='add'>+     * and micro seconds otherwise.</div><div class='add'>+     */</div><div class='ctx'> #if defined(HAVE_UTIMENSAT)</div><div class='del'>-        new_time[0].tv_sec = sb.st_atime;</div><div class='del'>-        new_time[0].tv_nsec = ST_ATIM_NSEC (&amp;sb);</div><div class='del'>-</div><div class='del'>-        new_time[1].tv_sec = sb.st_mtime;</div><div class='del'>-        new_time[1].tv_nsec = ST_MTIM_NSEC (&amp;sb);</div><div class='del'>-</div><div class='del'>-        /* dirfd = 0 is ignored because `dest` is an absolute path. */</div><div class='del'>-        ret = sys_utimensat (AT_FDCWD, dest, new_time, AT_SYMLINK_NOFOLLOW);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_UTIMENSAT_FAILED, "utimensat on %s", dest);</div><div class='del'>-        }</div><div class='add'>+    new_time[0].tv_sec = sb.st_atime;</div><div class='add'>+    new_time[0].tv_nsec = ST_ATIM_NSEC(&amp;sb);</div><div class='add'>+</div><div class='add'>+    new_time[1].tv_sec = sb.st_mtime;</div><div class='add'>+    new_time[1].tv_nsec = ST_MTIM_NSEC(&amp;sb);</div><div class='add'>+</div><div class='add'>+    /* dirfd = 0 is ignored because `dest` is an absolute path. */</div><div class='add'>+    ret = sys_utimensat(AT_FDCWD, dest, new_time, AT_SYMLINK_NOFOLLOW);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_UTIMENSAT_FAILED,</div><div class='add'>+               "utimensat on %s", dest);</div><div class='add'>+    }</div><div class='ctx'> #else</div><div class='del'>-        new_time[0].tv_sec = sb.st_atime;</div><div class='del'>-        new_time[0].tv_usec = ST_ATIM_NSEC (&amp;sb)/1000;</div><div class='add'>+    new_time[0].tv_sec = sb.st_atime;</div><div class='add'>+    new_time[0].tv_usec = ST_ATIM_NSEC(&amp;sb) / 1000;</div><div class='ctx'> </div><div class='del'>-        new_time[1].tv_sec = sb.st_mtime;</div><div class='del'>-        new_time[1].tv_usec = ST_MTIM_NSEC (&amp;sb)/1000;</div><div class='add'>+    new_time[1].tv_sec = sb.st_mtime;</div><div class='add'>+    new_time[1].tv_usec = ST_MTIM_NSEC(&amp;sb) / 1000;</div><div class='ctx'> </div><div class='del'>-        ret = sys_utimes (dest, new_time);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_UTIMES_FAILED,</div><div class='del'>-                        "utimes on %s", dest);</div><div class='del'>-        }</div><div class='add'>+    ret = sys_utimes(dest, new_time);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_UTIMES_FAILED,</div><div class='add'>+               "utimes on %s", dest);</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_backtrace_end (char *buf, size_t frames)</div><div class='add'>+gf_backtrace_end(char *buf, size_t frames)</div><div class='ctx'> {</div><div class='del'>-        size_t pos = 0;</div><div class='add'>+    size_t pos = 0;</div><div class='ctx'> </div><div class='del'>-        if (!buf)</div><div class='del'>-                return;</div><div class='add'>+    if (!buf)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pos = strlen (buf);</div><div class='add'>+    pos = strlen(buf);</div><div class='ctx'> </div><div class='del'>-        frames = min(frames, GF_BACKTRACE_LEN - pos -1);</div><div class='add'>+    frames = min(frames, GF_BACKTRACE_LEN - pos - 1);</div><div class='ctx'> </div><div class='del'>-        if (frames &lt;= 0)</div><div class='del'>-                return;</div><div class='add'>+    if (frames &lt;= 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        memset (buf+pos, ')', frames);</div><div class='del'>-        buf[pos+frames] = '\0';</div><div class='add'>+    memset(buf + pos, ')', frames);</div><div class='add'>+    buf[pos + frames] = '\0';</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Returns bytes written*/</div><div class='ctx'> static int</div><div class='del'>-gf_backtrace_append (char *buf, size_t pos, char *framestr)</div><div class='add'>+gf_backtrace_append(char *buf, size_t pos, char *framestr)</div><div class='ctx'> {</div><div class='del'>-        if (pos &gt;= GF_BACKTRACE_LEN)</div><div class='del'>-                return -1;</div><div class='del'>-        return snprintf (buf+pos, GF_BACKTRACE_LEN-pos, "(--&gt; %s ", framestr);</div><div class='add'>+    if (pos &gt;= GF_BACKTRACE_LEN)</div><div class='add'>+        return -1;</div><div class='add'>+    return snprintf(buf + pos, GF_BACKTRACE_LEN - pos, "(--&gt; %s ", framestr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_backtrace_fillframes (char *buf)</div><div class='del'>-{</div><div class='del'>-        void    *array[GF_BACKTRACE_FRAME_COUNT];</div><div class='del'>-        size_t  frames                  = 0;</div><div class='del'>-        FILE    *fp                     = NULL;</div><div class='del'>-        char    callingfn[GF_BACKTRACE_FRAME_COUNT-2][1024] = {{0},};</div><div class='del'>-        int     ret                     = -1;</div><div class='del'>-        int     fd                      = -1;</div><div class='del'>-        size_t  idx                     = 0;</div><div class='del'>-        size_t  pos                     = 0;</div><div class='del'>-        size_t  inc                     = 0;</div><div class='del'>-        char    tmpl[]                  = "/tmp/glfs-bt-XXXXXX";</div><div class='del'>-</div><div class='del'>-        frames = backtrace (array, GF_BACKTRACE_FRAME_COUNT);</div><div class='del'>-        if (!frames)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='del'>-        fd = mkstemp (tmpl);</div><div class='del'>-        if (fd == -1)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        /* Calling unlink so that when the file is closed or program</div><div class='del'>-         * terminates the temporary file is deleted.</div><div class='del'>-         */</div><div class='del'>-        ret = sys_unlink (tmpl);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_INFO, 0, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Unable to delete temporary file: %s", tmpl);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*The most recent two frames are the calling function and</div><div class='del'>-         * gf_backtrace_save, which we can infer.*/</div><div class='del'>-</div><div class='del'>-        backtrace_symbols_fd (&amp;array[2], frames-2, fd);</div><div class='del'>-</div><div class='del'>-        fp = fdopen (fd, "r");</div><div class='del'>-        if (!fp) {</div><div class='del'>-                sys_close (fd);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_backtrace_fillframes(char *buf)</div><div class='add'>+{</div><div class='add'>+    void *array[GF_BACKTRACE_FRAME_COUNT];</div><div class='add'>+    size_t frames = 0;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    char callingfn[GF_BACKTRACE_FRAME_COUNT - 2][1024] = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    size_t idx = 0;</div><div class='add'>+    size_t pos = 0;</div><div class='add'>+    size_t inc = 0;</div><div class='add'>+    char tmpl[] = "/tmp/glfs-bt-XXXXXX";</div><div class='add'>+</div><div class='add'>+    frames = backtrace(array, GF_BACKTRACE_FRAME_COUNT);</div><div class='add'>+    if (!frames)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ret = fseek (fp, 0L, SEEK_SET);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='add'>+    fd = mkstemp(tmpl);</div><div class='add'>+    if (fd == -1)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        pos = 0;</div><div class='del'>-        for (idx = 0; idx &lt; frames - 2; idx++) {</div><div class='del'>-                ret = fscanf (fp, "%s", callingfn[idx]);</div><div class='del'>-                if (ret == EOF)</div><div class='del'>-                        break;</div><div class='del'>-                inc = gf_backtrace_append (buf, pos, callingfn[idx]);</div><div class='del'>-                if (inc == -1)</div><div class='del'>-                        break;</div><div class='del'>-                pos += inc;</div><div class='del'>-        }</div><div class='del'>-        gf_backtrace_end (buf, idx);</div><div class='add'>+    /* Calling unlink so that when the file is closed or program</div><div class='add'>+     * terminates the temporary file is deleted.</div><div class='add'>+     */</div><div class='add'>+    ret = sys_unlink(tmpl);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Unable to delete temporary file: %s", tmpl);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*The most recent two frames are the calling function and</div><div class='add'>+     * gf_backtrace_save, which we can infer.*/</div><div class='add'>+</div><div class='add'>+    backtrace_symbols_fd(&amp;array[2], frames - 2, fd);</div><div class='add'>+</div><div class='add'>+    fp = fdopen(fd, "r");</div><div class='add'>+    if (!fp) {</div><div class='add'>+        sys_close(fd);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fseek(fp, 0L, SEEK_SET);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pos = 0;</div><div class='add'>+    for (idx = 0; idx &lt; frames - 2; idx++) {</div><div class='add'>+        ret = fscanf(fp, "%s", callingfn[idx]);</div><div class='add'>+        if (ret == EOF)</div><div class='add'>+            break;</div><div class='add'>+        inc = gf_backtrace_append(buf, pos, callingfn[idx]);</div><div class='add'>+        if (inc == -1)</div><div class='add'>+            break;</div><div class='add'>+        pos += inc;</div><div class='add'>+    }</div><div class='add'>+    gf_backtrace_end(buf, idx);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='del'>-</div><div class='del'>-        return (idx &gt; 0)? 0: -1;</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='ctx'> </div><div class='add'>+    return (idx &gt; 0) ? 0 : -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Optionally takes @buf to save backtrace.  If @buf is NULL, uses the</div><div class='hunk'>@@ -4378,72 +4374,66 @@ out:</div><div class='ctx'>  * when there is a real-use for that.*/</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_backtrace_save (char *buf)</div><div class='add'>+gf_backtrace_save(char *buf)</div><div class='ctx'> {</div><div class='del'>-        char *bt = NULL;</div><div class='del'>-</div><div class='del'>-        if (!buf) {</div><div class='del'>-                bt = THIS-&gt;ctx-&gt;btbuf;</div><div class='del'>-                GF_ASSERT (bt);</div><div class='add'>+    char *bt = NULL;</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                bt = buf;</div><div class='add'>+    if (!buf) {</div><div class='add'>+        bt = THIS-&gt;ctx-&gt;btbuf;</div><div class='add'>+        GF_ASSERT(bt);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    } else {</div><div class='add'>+        bt = buf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((0 == gf_backtrace_fillframes (bt)))</div><div class='del'>-                return bt;</div><div class='add'>+    if ((0 == gf_backtrace_fillframes(bt)))</div><div class='add'>+        return bt;</div><div class='ctx'> </div><div class='del'>-        gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_BACKTRACE_SAVE_FAILED,</div><div class='del'>-                "Failed to save the backtrace.");</div><div class='del'>-        return NULL;</div><div class='add'>+    gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_BACKTRACE_SAVE_FAILED,</div><div class='add'>+           "Failed to save the backtrace.");</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_loglevel_t</div><div class='del'>-fop_log_level (glusterfs_fop_t fop, int op_errno)</div><div class='del'>-{</div><div class='del'>-        /* if gfid doesn't exist ESTALE comes */</div><div class='del'>-        if (op_errno == ENOENT || op_errno == ESTALE)</div><div class='del'>-                return GF_LOG_DEBUG;</div><div class='del'>-</div><div class='del'>-        if ((fop == GF_FOP_ENTRYLK) ||</div><div class='del'>-            (fop == GF_FOP_FENTRYLK) ||</div><div class='del'>-            (fop == GF_FOP_FINODELK) ||</div><div class='del'>-            (fop == GF_FOP_INODELK) ||</div><div class='del'>-            (fop == GF_FOP_LK)) {</div><div class='del'>-                /*</div><div class='del'>-                 * if non-blocking lock fails EAGAIN comes</div><div class='del'>-                 * if locks xlator is not loaded ENOSYS comes</div><div class='del'>-                 */</div><div class='del'>-                if (op_errno == EAGAIN || op_errno == ENOSYS)</div><div class='del'>-                        return GF_LOG_DEBUG;</div><div class='del'>-        }</div><div class='add'>+fop_log_level(glusterfs_fop_t fop, int op_errno)</div><div class='add'>+{</div><div class='add'>+    /* if gfid doesn't exist ESTALE comes */</div><div class='add'>+    if (op_errno == ENOENT || op_errno == ESTALE)</div><div class='add'>+        return GF_LOG_DEBUG;</div><div class='ctx'> </div><div class='del'>-        if ((fop == GF_FOP_GETXATTR) ||</div><div class='del'>-            (fop == GF_FOP_FGETXATTR)) {</div><div class='del'>-                if (op_errno == ENOTSUP || op_errno == ENODATA)</div><div class='del'>-                        return GF_LOG_DEBUG;</div><div class='del'>-        }</div><div class='add'>+    if ((fop == GF_FOP_ENTRYLK) || (fop == GF_FOP_FENTRYLK) ||</div><div class='add'>+        (fop == GF_FOP_FINODELK) || (fop == GF_FOP_INODELK) ||</div><div class='add'>+        (fop == GF_FOP_LK)) {</div><div class='add'>+        /*</div><div class='add'>+         * if non-blocking lock fails EAGAIN comes</div><div class='add'>+         * if locks xlator is not loaded ENOSYS comes</div><div class='add'>+         */</div><div class='add'>+        if (op_errno == EAGAIN || op_errno == ENOSYS)</div><div class='add'>+            return GF_LOG_DEBUG;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((fop == GF_FOP_SETXATTR) ||</div><div class='del'>-            (fop == GF_FOP_FSETXATTR) ||</div><div class='del'>-            (fop == GF_FOP_REMOVEXATTR) ||</div><div class='del'>-            (fop == GF_FOP_FREMOVEXATTR)) {</div><div class='del'>-                if (op_errno == ENOTSUP)</div><div class='del'>-                        return GF_LOG_DEBUG;</div><div class='del'>-        }</div><div class='add'>+    if ((fop == GF_FOP_GETXATTR) || (fop == GF_FOP_FGETXATTR)) {</div><div class='add'>+        if (op_errno == ENOTSUP || op_errno == ENODATA)</div><div class='add'>+            return GF_LOG_DEBUG;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((fop == GF_FOP_SETXATTR) || (fop == GF_FOP_FSETXATTR) ||</div><div class='add'>+        (fop == GF_FOP_REMOVEXATTR) || (fop == GF_FOP_FREMOVEXATTR)) {</div><div class='add'>+        if (op_errno == ENOTSUP)</div><div class='add'>+            return GF_LOG_DEBUG;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fop == GF_FOP_MKNOD || fop == GF_FOP_MKDIR)</div><div class='del'>-                if (op_errno == EEXIST)</div><div class='del'>-                        return GF_LOG_DEBUG;</div><div class='add'>+    if (fop == GF_FOP_MKNOD || fop == GF_FOP_MKDIR)</div><div class='add'>+        if (op_errno == EEXIST)</div><div class='add'>+            return GF_LOG_DEBUG;</div><div class='ctx'> </div><div class='del'>-        if (fop == GF_FOP_SEEK) {</div><div class='del'>-                if (op_errno == ENXIO) {</div><div class='del'>-                        return GF_LOG_DEBUG;</div><div class='del'>-                }</div><div class='add'>+    if (fop == GF_FOP_SEEK) {</div><div class='add'>+        if (op_errno == ENXIO) {</div><div class='add'>+            return GF_LOG_DEBUG;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return GF_LOG_ERROR;</div><div class='add'>+    return GF_LOG_ERROR;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function will build absolute path of file/directory from the</div><div class='hunk'>@@ -4461,116 +4451,115 @@ fop_log_level (glusterfs_fop_t fop, int op_errno)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_build_absolute_path (char *current_path, char *relative_path, char **path)</div><div class='del'>-{</div><div class='del'>-        char                    *absolute_path          = NULL;</div><div class='del'>-        char                    *token                  = NULL;</div><div class='del'>-        char                    *component              = NULL;</div><div class='del'>-        char                    *saveptr                = NULL;</div><div class='del'>-        char                    *end                    = NULL;</div><div class='del'>-        int                     ret                     = 0;</div><div class='del'>-        size_t                  relativepath_len        = 0;</div><div class='del'>-        size_t                  currentpath_len         = 0;</div><div class='del'>-        size_t                  max_absolutepath_len    = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (current_path);</div><div class='del'>-        GF_ASSERT (relative_path);</div><div class='del'>-        GF_ASSERT (path);</div><div class='del'>-</div><div class='del'>-        if (!path || !current_path || !relative_path) {</div><div class='del'>-                ret = -EFAULT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        /* Check for current and relative path</div><div class='del'>-         * current path should be absolute one and  start from '/'</div><div class='del'>-         * relative path should not start from '/'</div><div class='del'>-         */</div><div class='del'>-        currentpath_len = strlen (current_path);</div><div class='del'>-        if (current_path[0] != '/' || (currentpath_len &gt; PATH_MAX)) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Wrong value for current path %s", current_path);</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        relativepath_len = strlen (relative_path);</div><div class='del'>-        if (relative_path[0] == '/' || (relativepath_len &gt; PATH_MAX)) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Wrong value for relative path %s", relative_path);</div><div class='del'>-                ret = -EINVAL;</div><div class='add'>+gf_build_absolute_path(char *current_path, char *relative_path, char **path)</div><div class='add'>+{</div><div class='add'>+    char *absolute_path = NULL;</div><div class='add'>+    char *token = NULL;</div><div class='add'>+    char *component = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char *end = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    size_t relativepath_len = 0;</div><div class='add'>+    size_t currentpath_len = 0;</div><div class='add'>+    size_t max_absolutepath_len = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(current_path);</div><div class='add'>+    GF_ASSERT(relative_path);</div><div class='add'>+    GF_ASSERT(path);</div><div class='add'>+</div><div class='add'>+    if (!path || !current_path || !relative_path) {</div><div class='add'>+        ret = -EFAULT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    /* Check for current and relative path</div><div class='add'>+     * current path should be absolute one and  start from '/'</div><div class='add'>+     * relative path should not start from '/'</div><div class='add'>+     */</div><div class='add'>+    currentpath_len = strlen(current_path);</div><div class='add'>+    if (current_path[0] != '/' || (currentpath_len &gt; PATH_MAX)) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Wrong value for current path %s", current_path);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    relativepath_len = strlen(relative_path);</div><div class='add'>+    if (relative_path[0] == '/' || (relativepath_len &gt; PATH_MAX)) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Wrong value for relative path %s", relative_path);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* It is maximum possible value for absolute path */</div><div class='add'>+    max_absolutepath_len = currentpath_len + relativepath_len + 2;</div><div class='add'>+</div><div class='add'>+    absolute_path = GF_CALLOC(1, max_absolutepath_len, gf_common_mt_char);</div><div class='add'>+    if (!absolute_path) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    absolute_path[0] = '\0';</div><div class='add'>+</div><div class='add'>+    /* If current path is root i.e contains only "/", we do not</div><div class='add'>+     * need to copy it</div><div class='add'>+     */</div><div class='add'>+    if (strcmp(current_path, "/") != 0) {</div><div class='add'>+        strcpy(absolute_path, current_path);</div><div class='add'>+</div><div class='add'>+        /* We trim '/' at the end for easier string manipulation */</div><div class='add'>+        gf_path_strip_trailing_slashes(absolute_path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Used to spilt relative path based on '/' */</div><div class='add'>+    component = gf_strdup(relative_path);</div><div class='add'>+    if (!component) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* In the relative path, we want to consider ".." and "."</div><div class='add'>+     * if token is ".." , we just need to reduce one level hierarchy</div><div class='add'>+     * if token is "." , we just ignore it</div><div class='add'>+     * if token is NULL , end of relative path</div><div class='add'>+     * if absolute path becomes '\0' and still "..", then it is a bad</div><div class='add'>+     * relative path,  it points to out of boundary area and stop</div><div class='add'>+     * building the absolute path</div><div class='add'>+     * All other cases we just concatenate token to the absolute path</div><div class='add'>+     */</div><div class='add'>+    for (token = strtok_r(component, "/", &amp;saveptr),</div><div class='add'>+        end = strchr(absolute_path, '\0');</div><div class='add'>+         token; token = strtok_r(NULL, "/", &amp;saveptr)) {</div><div class='add'>+        if (strcmp(token, ".") == 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        else if (strcmp(token, "..") == 0) {</div><div class='add'>+            if (absolute_path[0] == '\0') {</div><div class='add'>+                ret = -EACCES;</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* It is maximum possible value for absolute path */</div><div class='del'>-        max_absolutepath_len = currentpath_len + relativepath_len + 2;</div><div class='del'>-</div><div class='del'>-        absolute_path = GF_CALLOC (1, max_absolutepath_len, gf_common_mt_char);</div><div class='del'>-        if (!absolute_path) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        absolute_path[0] = '\0';</div><div class='del'>-</div><div class='del'>-        /* If current path is root i.e contains only "/", we do not</div><div class='del'>-         * need to copy it</div><div class='del'>-         */</div><div class='del'>-        if (strcmp (current_path, "/") != 0) {</div><div class='del'>-                strcpy (absolute_path, current_path);</div><div class='del'>-</div><div class='del'>-                /* We trim '/' at the end for easier string manipulation */</div><div class='del'>-                gf_path_strip_trailing_slashes (absolute_path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Used to spilt relative path based on '/' */</div><div class='del'>-        component = gf_strdup (relative_path);</div><div class='del'>-        if (!component) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        /* In the relative path, we want to consider ".." and "."</div><div class='del'>-         * if token is ".." , we just need to reduce one level hierarchy</div><div class='del'>-         * if token is "." , we just ignore it</div><div class='del'>-         * if token is NULL , end of relative path</div><div class='del'>-         * if absolute path becomes '\0' and still "..", then it is a bad</div><div class='del'>-         * relative path,  it points to out of boundary area and stop</div><div class='del'>-         * building the absolute path</div><div class='del'>-         * All other cases we just concatenate token to the absolute path</div><div class='del'>-         */</div><div class='del'>-        for (token = strtok_r (component,  "/", &amp;saveptr),</div><div class='del'>-             end = strchr (absolute_path, '\0'); token;</div><div class='del'>-             token = strtok_r (NULL, "/", &amp;saveptr)) {</div><div class='del'>-                if (strcmp (token, ".") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                else if (strcmp (token, "..") == 0) {</div><div class='del'>-</div><div class='del'>-                        if (absolute_path[0] == '\0') {</div><div class='del'>-                                ret = -EACCES;</div><div class='del'>-                                goto err;</div><div class='del'>-                         }</div><div class='del'>-</div><div class='del'>-                         end = strrchr (absolute_path, '/');</div><div class='del'>-                         *end = '\0';</div><div class='del'>-                } else {</div><div class='del'>-                        ret = snprintf (end, max_absolutepath_len -</div><div class='del'>-                                        strlen (absolute_path), "/%s", token);</div><div class='del'>-                        end = strchr (absolute_path , '\0');</div><div class='del'>-                }</div><div class='add'>+            end = strrchr(absolute_path, '/');</div><div class='add'>+            *end = '\0';</div><div class='add'>+        } else {</div><div class='add'>+            ret = snprintf(end, max_absolutepath_len - strlen(absolute_path),</div><div class='add'>+                           "/%s", token);</div><div class='add'>+            end = strchr(absolute_path, '\0');</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strlen (absolute_path) &gt; PATH_MAX) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        *path = gf_strdup (absolute_path);</div><div class='add'>+    if (strlen(absolute_path) &gt; PATH_MAX) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    *path = gf_strdup(absolute_path);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (component)</div><div class='del'>-                GF_FREE (component);</div><div class='del'>-        if (absolute_path)</div><div class='del'>-                GF_FREE (absolute_path);</div><div class='del'>-        return ret;</div><div class='add'>+    if (component)</div><div class='add'>+        GF_FREE(component);</div><div class='add'>+    if (absolute_path)</div><div class='add'>+        GF_FREE(absolute_path);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This is an utility function which will recursively delete</div><div class='hunk'>@@ -4581,69 +4570,85 @@ err:</div><div class='ctx'>  * @return 0 on success and -1 on failure.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-recursive_rmdir (const char *delete_path)</div><div class='del'>-{</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        char            path[PATH_MAX]  = {0,};</div><div class='del'>-        struct stat     st              = {0,};</div><div class='del'>-        DIR            *dir             = NULL;</div><div class='del'>-        struct dirent  *entry           = NULL;</div><div class='del'>-        struct dirent   scratch[2]      = {{0,},};</div><div class='del'>-        xlator_t       *this            = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, delete_path, out);</div><div class='del'>-</div><div class='del'>-        dir = sys_opendir (delete_path);</div><div class='del'>-        if (!dir) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to open directory %s. "</div><div class='del'>-                              "Reason : %s", delete_path, strerror (errno));</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+recursive_rmdir(const char *delete_path)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    DIR *dir = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, delete_path, out);</div><div class='add'>+</div><div class='add'>+    dir = sys_opendir(delete_path);</div><div class='add'>+    if (!dir) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to open directory %s. "</div><div class='add'>+                     "Reason : %s",</div><div class='add'>+                     delete_path, strerror(errno));</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_SKIP_IRRELEVANT_ENTRIES (entry, dir, scratch);</div><div class='del'>-        while (entry) {</div><div class='del'>-                snprintf (path, PATH_MAX, "%s/%s", delete_path, entry-&gt;d_name);</div><div class='del'>-                ret = sys_lstat (path, &amp;st);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Failed to stat entry %s :"</div><div class='del'>-                                      " %s", path, strerror (errno));</div><div class='del'>-                        (void) sys_closedir (dir);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (S_ISDIR (st.st_mode))</div><div class='del'>-                        ret = recursive_rmdir (path);</div><div class='del'>-                else</div><div class='del'>-                        ret = sys_unlink (path);</div><div class='del'>-</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, " Failed to remove %s. "</div><div class='del'>-                                      "Reason : %s", path, strerror (errno));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s %s", ret ?</div><div class='del'>-                              "Failed to remove" : "Removed", entry-&gt;d_name);</div><div class='del'>-</div><div class='del'>-                GF_SKIP_IRRELEVANT_ENTRIES (entry, dir, scratch);</div><div class='add'>+    GF_SKIP_IRRELEVANT_ENTRIES(entry, dir, scratch);</div><div class='add'>+    while (entry) {</div><div class='add'>+        snprintf(path, PATH_MAX, "%s/%s", delete_path, entry-&gt;d_name);</div><div class='add'>+        ret = sys_lstat(path, &amp;st);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Failed to stat entry %s :"</div><div class='add'>+                         " %s",</div><div class='add'>+                         path, strerror(errno));</div><div class='add'>+            (void)sys_closedir(dir);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = sys_closedir (dir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to close dir %s. Reason :"</div><div class='del'>-                              " %s", delete_path, strerror (errno));</div><div class='del'>-        }</div><div class='add'>+        if (S_ISDIR(st.st_mode))</div><div class='add'>+            ret = recursive_rmdir(path);</div><div class='add'>+        else</div><div class='add'>+            ret = sys_unlink(path);</div><div class='ctx'> </div><div class='del'>-        ret = sys_rmdir (delete_path);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to rmdir: %s,err: %s",</div><div class='del'>-                              delete_path, strerror (errno));</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         " Failed to remove %s. "</div><div class='add'>+                         "Reason : %s",</div><div class='add'>+                         path, strerror(errno));</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s %s",</div><div class='add'>+                     ret ? "Failed to remove" : "Removed", entry-&gt;d_name);</div><div class='add'>+</div><div class='add'>+        GF_SKIP_IRRELEVANT_ENTRIES(entry, dir, scratch);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_closedir(dir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to close dir %s. Reason :"</div><div class='add'>+                     " %s",</div><div class='add'>+                     delete_path, strerror(errno));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_rmdir(delete_path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Failed to rmdir: %s,err: %s", delete_path,</div><div class='add'>+                     strerror(errno));</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> /*</div><div class='ctx'>  * Input: Array of strings 'array' terminating in NULL</div><div class='hunk'>@@ -4652,197 +4657,198 @@ out:</div><div class='ctx'>  * Output: Index of the element in the array if found, '-1' otherwise</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_get_index_by_elem (char **array, char *elem)</div><div class='add'>+gf_get_index_by_elem(char **array, char *elem)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; array[i]; i++) {</div><div class='del'>-                if (strcmp (elem, array[i]) == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; array[i]; i++) {</div><div class='add'>+        if (strcmp(elem, array[i]) == 0)</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-get_pathinfo_host (char *pathinfo, char *hostname, size_t size)</div><div class='add'>+get_pathinfo_host(char *pathinfo, char *hostname, size_t size)</div><div class='ctx'> {</div><div class='del'>-        char    *start = NULL;</div><div class='del'>-        char    *end = NULL;</div><div class='del'>-        int     ret  = -1;</div><div class='del'>-        int     i    = 0;</div><div class='add'>+    char *start = NULL;</div><div class='add'>+    char *end = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!pathinfo)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!pathinfo)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        start = strchr (pathinfo, ':');</div><div class='del'>-        if (!start)</div><div class='del'>-                goto out;</div><div class='add'>+    start = strchr(pathinfo, ':');</div><div class='add'>+    if (!start)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        end = strrchr (pathinfo, ':');</div><div class='del'>-        if (start == end)</div><div class='del'>-                goto out;</div><div class='add'>+    end = strrchr(pathinfo, ':');</div><div class='add'>+    if (start == end)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        memset (hostname, 0, size);</div><div class='del'>-        i = 0;</div><div class='del'>-        while (++start != end)</div><div class='del'>-                hostname[i++] = *start;</div><div class='del'>-        ret = 0;</div><div class='add'>+    memset(hostname, 0, size);</div><div class='add'>+    i = 0;</div><div class='add'>+    while (++start != end)</div><div class='add'>+        hostname[i++] = *start;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Note: 'pathinfo' should be gathered only from one brick*/</div><div class='ctx'> int</div><div class='del'>-glusterfs_is_local_pathinfo (char *pathinfo, gf_boolean_t *is_local)</div><div class='add'>+glusterfs_is_local_pathinfo(char *pathinfo, gf_boolean_t *is_local)</div><div class='ctx'> {</div><div class='del'>-        int             ret   = 0;</div><div class='del'>-        char            pathinfohost[1024] = {0};</div><div class='del'>-        char            localhost[1024] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char pathinfohost[1024] = {0};</div><div class='add'>+    char localhost[1024] = {0};</div><div class='ctx'> </div><div class='del'>-        *is_local = _gf_false;</div><div class='del'>-        ret = get_pathinfo_host (pathinfo, pathinfohost, sizeof (pathinfohost));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    *is_local = _gf_false;</div><div class='add'>+    ret = get_pathinfo_host(pathinfo, pathinfohost, sizeof(pathinfohost));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = gethostname (localhost, sizeof (localhost));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = gethostname(localhost, sizeof(localhost));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (localhost, pathinfohost))</div><div class='del'>-                *is_local = _gf_true;</div><div class='add'>+    if (!strcmp(localhost, pathinfohost))</div><div class='add'>+        *is_local = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-gf_nread (int fd, void *buf, size_t count)</div><div class='del'>-{</div><div class='del'>-        ssize_t  ret           = 0;</div><div class='del'>-        ssize_t  read_bytes    = 0;</div><div class='del'>-</div><div class='del'>-        for (read_bytes = 0; read_bytes &lt; count; read_bytes += ret) {</div><div class='del'>-                ret = sys_read (fd, buf + read_bytes, count - read_bytes);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        break;</div><div class='del'>-                } else if (ret &lt; 0) {</div><div class='del'>-                        if (errno == EINTR)</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        else</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+gf_nread(int fd, void *buf, size_t count)</div><div class='add'>+{</div><div class='add'>+    ssize_t ret = 0;</div><div class='add'>+    ssize_t read_bytes = 0;</div><div class='add'>+</div><div class='add'>+    for (read_bytes = 0; read_bytes &lt; count; read_bytes += ret) {</div><div class='add'>+        ret = sys_read(fd, buf + read_bytes, count - read_bytes);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            break;</div><div class='add'>+        } else if (ret &lt; 0) {</div><div class='add'>+            if (errno == EINTR)</div><div class='add'>+                ret = 0;</div><div class='add'>+            else</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = read_bytes;</div><div class='add'>+    ret = read_bytes;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-gf_nwrite (int fd, const void *buf, size_t count)</div><div class='del'>-{</div><div class='del'>-        ssize_t  ret        = 0;</div><div class='del'>-        ssize_t  written    = 0;</div><div class='del'>-</div><div class='del'>-        for (written = 0; written != count; written += ret) {</div><div class='del'>-                ret = sys_write (fd, buf + written, count - written);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        if (errno == EINTR)</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        else</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+gf_nwrite(int fd, const void *buf, size_t count)</div><div class='add'>+{</div><div class='add'>+    ssize_t ret = 0;</div><div class='add'>+    ssize_t written = 0;</div><div class='add'>+</div><div class='add'>+    for (written = 0; written != count; written += ret) {</div><div class='add'>+        ret = sys_write(fd, buf + written, count - written);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            if (errno == EINTR)</div><div class='add'>+                ret = 0;</div><div class='add'>+            else</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = written;</div><div class='add'>+    ret = written;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_free_mig_locks (lock_migration_info_t *locks)</div><div class='add'>+gf_free_mig_locks(lock_migration_info_t *locks)</div><div class='ctx'> {</div><div class='del'>-        lock_migration_info_t    *current       = NULL;</div><div class='del'>-        lock_migration_info_t    *temp          = NULL;</div><div class='add'>+    lock_migration_info_t *current = NULL;</div><div class='add'>+    lock_migration_info_t *temp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!locks)</div><div class='del'>-                return;</div><div class='add'>+    if (!locks)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;locks-&gt;list))</div><div class='del'>-                return;</div><div class='add'>+    if (list_empty(&amp;locks-&gt;list))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (current, temp, &amp;locks-&gt;list, list) {</div><div class='del'>-                list_del_init (&amp;current-&gt;list);</div><div class='del'>-                GF_FREE (current-&gt;client_uid);</div><div class='del'>-                GF_FREE (current);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(current, temp, &amp;locks-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;current-&gt;list);</div><div class='add'>+        GF_FREE(current-&gt;client_uid);</div><div class='add'>+        GF_FREE(current);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_mask_cancellation (void)</div><div class='add'>+_mask_cancellation(void)</div><div class='ctx'> {</div><div class='del'>-        (void) pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL);</div><div class='add'>+    (void)pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_unmask_cancellation (void)</div><div class='add'>+_unmask_cancellation(void)</div><div class='ctx'> {</div><div class='del'>-        (void) pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);</div><div class='add'>+    (void)pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This is a wrapper function to add a pointer to a list,</div><div class='ctx'>  * which doesn't contain list member</div><div class='ctx'>  */</div><div class='del'>-struct list_node*</div><div class='del'>-_list_node_add (void *ptr, struct list_head *list,</div><div class='add'>+struct list_node *</div><div class='add'>+_list_node_add(void *ptr, struct list_head *list,</div><div class='ctx'>                int (*compare)(struct list_head *, struct list_head *))</div><div class='ctx'> {</div><div class='del'>-        struct list_node  *node = NULL;</div><div class='add'>+    struct list_node *node = NULL;</div><div class='ctx'> </div><div class='del'>-        if (ptr == NULL || list == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ptr == NULL || list == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        node = GF_CALLOC (1, sizeof (struct list_node), gf_common_list_node);</div><div class='add'>+    node = GF_CALLOC(1, sizeof(struct list_node), gf_common_list_node);</div><div class='ctx'> </div><div class='del'>-        if (node == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (node == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        node-&gt;ptr = ptr;</div><div class='del'>-        if (compare)</div><div class='del'>-                list_add_order (&amp;node-&gt;list, list, compare);</div><div class='del'>-        else</div><div class='del'>-                list_add_tail (&amp;node-&gt;list, list);</div><div class='add'>+    node-&gt;ptr = ptr;</div><div class='add'>+    if (compare)</div><div class='add'>+        list_add_order(&amp;node-&gt;list, list, compare);</div><div class='add'>+    else</div><div class='add'>+        list_add_tail(&amp;node-&gt;list, list);</div><div class='ctx'> out:</div><div class='del'>-        return node;</div><div class='add'>+    return node;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct list_node*</div><div class='del'>-list_node_add (void *ptr, struct list_head *list)</div><div class='add'>+struct list_node *</div><div class='add'>+list_node_add(void *ptr, struct list_head *list)</div><div class='ctx'> {</div><div class='del'>-        return _list_node_add (ptr, list, NULL);</div><div class='add'>+    return _list_node_add(ptr, list, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct list_node*</div><div class='del'>-list_node_add_order (void *ptr, struct list_head *list,</div><div class='del'>-                     int (*compare)(struct list_head *, struct list_head *))</div><div class='add'>+struct list_node *</div><div class='add'>+list_node_add_order(void *ptr, struct list_head *list,</div><div class='add'>+                    int (*compare)(struct list_head *, struct list_head *))</div><div class='ctx'> {</div><div class='del'>-        return _list_node_add (ptr, list, compare);</div><div class='add'>+    return _list_node_add(ptr, list, compare);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-list_node_del (struct list_node *node)</div><div class='add'>+list_node_del(struct list_node *node)</div><div class='ctx'> {</div><div class='del'>-        if (node == NULL)</div><div class='del'>-                return;</div><div class='add'>+    if (node == NULL)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;node-&gt;list);</div><div class='del'>-        GF_FREE (node);</div><div class='add'>+    list_del_init(&amp;node-&gt;list);</div><div class='add'>+    GF_FREE(node);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> const char *</div><div class='del'>-fop_enum_to_pri_string (glusterfs_fop_t fop)</div><div class='add'>+fop_enum_to_pri_string(glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-        switch (fop) {</div><div class='add'>+    switch (fop) {</div><div class='ctx'>         case GF_FOP_OPEN:</div><div class='ctx'>         case GF_FOP_STAT:</div><div class='ctx'>         case GF_FOP_FSTAT:</div><div class='hunk'>@@ -4857,7 +4863,7 @@ fop_enum_to_pri_string (glusterfs_fop_t fop)</div><div class='ctx'>         case GF_FOP_SETACTIVELK:</div><div class='ctx'>         case GF_FOP_ICREATE:</div><div class='ctx'>         case GF_FOP_NAMELINK:</div><div class='del'>-                return "HIGH";</div><div class='add'>+            return "HIGH";</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_CREATE:</div><div class='ctx'>         case GF_FOP_FLUSH:</div><div class='hunk'>@@ -4883,7 +4889,7 @@ fop_enum_to_pri_string (glusterfs_fop_t fop)</div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='ctx'>         case GF_FOP_IPC:</div><div class='ctx'>         case GF_FOP_LEASE:</div><div class='del'>-                return "NORMAL";</div><div class='add'>+            return "NORMAL";</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_READ:</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='hunk'>@@ -4897,7 +4903,7 @@ fop_enum_to_pri_string (glusterfs_fop_t fop)</div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='ctx'>         case GF_FOP_FALLOCATE:</div><div class='ctx'>         case GF_FOP_SEEK:</div><div class='del'>-                return "LOW";</div><div class='add'>+            return "LOW";</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_NULL:</div><div class='ctx'>         case GF_FOP_FORGET:</div><div class='hunk'>@@ -4906,187 +4912,184 @@ fop_enum_to_pri_string (glusterfs_fop_t fop)</div><div class='ctx'>         case GF_FOP_GETSPEC:</div><div class='ctx'>         case GF_FOP_MAXVALUE:</div><div class='ctx'>         case GF_FOP_DISCARD:</div><div class='del'>-                return "LEAST";</div><div class='add'>+            return "LEAST";</div><div class='ctx'>         default:</div><div class='del'>-                return "UNKNOWN";</div><div class='del'>-        }</div><div class='add'>+            return "UNKNOWN";</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> const char *</div><div class='del'>-gf_inode_type_to_str (ia_type_t type)</div><div class='add'>+gf_inode_type_to_str(ia_type_t type)</div><div class='ctx'> {</div><div class='del'>-        static const char *const str_ia_type[] = {</div><div class='del'>-                "UNKNOWN",</div><div class='del'>-                "REGULAR FILE",</div><div class='del'>-                "DIRECTORY",</div><div class='del'>-                "LINK",</div><div class='del'>-                "BLOCK DEVICE",</div><div class='del'>-                "CHARACTER DEVICE",</div><div class='del'>-                "PIPE",</div><div class='del'>-                "SOCKET"};</div><div class='del'>-        return str_ia_type[type];</div><div class='add'>+    static const char *const str_ia_type[] = {</div><div class='add'>+        "UNKNOWN",      "REGULAR FILE",     "DIRECTORY", "LINK",</div><div class='add'>+        "BLOCK DEVICE", "CHARACTER DEVICE", "PIPE",      "SOCKET"};</div><div class='add'>+    return str_ia_type[type];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_zero_filled_stat (struct iatt *buf)</div><div class='add'>+gf_is_zero_filled_stat(struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        if (!buf)</div><div class='del'>-                return 1;</div><div class='add'>+    if (!buf)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        /* Do not use st_dev because it is transformed to store the xlator id</div><div class='del'>-         * in place of the device number. Do not use st_ino because by this time</div><div class='del'>-         * we've already mapped the root ino to 1 so it is not guaranteed to be</div><div class='del'>-         * 0.</div><div class='del'>-         */</div><div class='del'>-        if ((buf-&gt;ia_nlink == 0) &amp;&amp; (buf-&gt;ia_ctime == 0))</div><div class='del'>-                return 1;</div><div class='add'>+    /* Do not use st_dev because it is transformed to store the xlator id</div><div class='add'>+     * in place of the device number. Do not use st_ino because by this time</div><div class='add'>+     * we've already mapped the root ino to 1 so it is not guaranteed to be</div><div class='add'>+     * 0.</div><div class='add'>+     */</div><div class='add'>+    if ((buf-&gt;ia_nlink == 0) &amp;&amp; (buf-&gt;ia_ctime == 0))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_zero_fill_stat (struct iatt *buf)</div><div class='add'>+gf_zero_fill_stat(struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        buf-&gt;ia_nlink = 0;</div><div class='del'>-        buf-&gt;ia_ctime = 0;</div><div class='add'>+    buf-&gt;ia_nlink = 0;</div><div class='add'>+    buf-&gt;ia_ctime = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-gf_is_valid_xattr_namespace (char *key)</div><div class='add'>+gf_is_valid_xattr_namespace(char *key)</div><div class='ctx'> {</div><div class='del'>-        static char *xattr_namespaces[] = {"trusted.", "security.", "system.",</div><div class='del'>-                                           "user.", NULL };</div><div class='del'>-        int i = 0;</div><div class='add'>+    static char *xattr_namespaces[] = {"trusted.", "security.", "system.",</div><div class='add'>+                                       "user.", NULL};</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; xattr_namespaces[i]; i++) {</div><div class='del'>-                if (strncmp (key, xattr_namespaces[i],</div><div class='del'>-                             strlen (xattr_namespaces[i])) == 0)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; xattr_namespaces[i]; i++) {</div><div class='add'>+        if (strncmp(key, xattr_namespaces[i], strlen(xattr_namespaces[i])) == 0)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ino_t</div><div class='del'>-gfid_to_ino (uuid_t gfid)</div><div class='add'>+gfid_to_ino(uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        ino_t ino = 0;</div><div class='del'>-        int32_t i;</div><div class='add'>+    ino_t ino = 0;</div><div class='add'>+    int32_t i;</div><div class='ctx'> </div><div class='del'>-        for (i = 8; i &lt; 16; i++) {</div><div class='del'>-                ino &lt;&lt;= 8;</div><div class='del'>-                ino += (uint8_t)gfid[i];</div><div class='del'>-        }</div><div class='add'>+    for (i = 8; i &lt; 16; i++) {</div><div class='add'>+        ino &lt;&lt;= 8;</div><div class='add'>+        ino += (uint8_t)gfid[i];</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ino;</div><div class='add'>+    return ino;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_bits_count (uint64_t n)</div><div class='add'>+gf_bits_count(uint64_t n)</div><div class='ctx'> {</div><div class='del'>-        int val = 0;</div><div class='add'>+    int val = 0;</div><div class='ctx'> #if defined(__GNUC__) || defined(__clang__)</div><div class='del'>-        val = __builtin_popcountll (n);</div><div class='add'>+    val = __builtin_popcountll(n);</div><div class='ctx'> #else</div><div class='del'>-        n -= (n &gt;&gt; 1) &amp; 0x5555555555555555ULL;</div><div class='del'>-        n = ((n &gt;&gt; 2) &amp; 0x3333333333333333ULL) + (n &amp; 0x3333333333333333ULL);</div><div class='del'>-        n = (n + (n &gt;&gt; 4)) &amp; 0x0F0F0F0F0F0F0F0FULL;</div><div class='del'>-        n += n &gt;&gt; 8;</div><div class='del'>-        n += n &gt;&gt; 16;</div><div class='del'>-        n += n &gt;&gt; 32;</div><div class='del'>-        val = n &amp; 0xFF;</div><div class='add'>+    n -= (n &gt;&gt; 1) &amp; 0x5555555555555555ULL;</div><div class='add'>+    n = ((n &gt;&gt; 2) &amp; 0x3333333333333333ULL) + (n &amp; 0x3333333333333333ULL);</div><div class='add'>+    n = (n + (n &gt;&gt; 4)) &amp; 0x0F0F0F0F0F0F0F0FULL;</div><div class='add'>+    n += n &gt;&gt; 8;</div><div class='add'>+    n += n &gt;&gt; 16;</div><div class='add'>+    n += n &gt;&gt; 32;</div><div class='add'>+    val = n &amp; 0xFF;</div><div class='ctx'> #endif</div><div class='del'>-        return val;</div><div class='add'>+    return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_bits_index (uint64_t n)</div><div class='add'>+gf_bits_index(uint64_t n)</div><div class='ctx'> {</div><div class='ctx'> #if defined(__GNUC__) || defined(__clang__)</div><div class='del'>-        return __builtin_ffsll (n) - 1;</div><div class='add'>+    return __builtin_ffsll(n) - 1;</div><div class='ctx'> #else</div><div class='del'>-        return ffsll (n) - 1;</div><div class='add'>+    return ffsll(n) - 1;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-const char*</div><div class='del'>-gf_fop_string (glusterfs_fop_t fop)</div><div class='add'>+const char *</div><div class='add'>+gf_fop_string(glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-        if ((fop &gt; GF_FOP_NULL) &amp;&amp; (fop &lt; GF_FOP_MAXVALUE))</div><div class='del'>-                return gf_fop_list[fop];</div><div class='del'>-        return "INVALID";</div><div class='add'>+    if ((fop &gt; GF_FOP_NULL) &amp;&amp; (fop &lt; GF_FOP_MAXVALUE))</div><div class='add'>+        return gf_fop_list[fop];</div><div class='add'>+    return "INVALID";</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_fop_int (char *fop)</div><div class='add'>+gf_fop_int(char *fop)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = GF_FOP_NULL + 1; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                if (strcasecmp (fop, gf_fop_list[i]) == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    for (i = GF_FOP_NULL + 1; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        if (strcasecmp(fop, gf_fop_list[i]) == 0)</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-close_fds_except (int *fdv, size_t count)</div><div class='add'>+close_fds_except(int *fdv, size_t count)</div><div class='ctx'> {</div><div class='del'>-        int          i            = 0;</div><div class='del'>-        size_t       j            = 0;</div><div class='del'>-        gf_boolean_t should_close = _gf_true;</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t j = 0;</div><div class='add'>+    gf_boolean_t should_close = _gf_true;</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        DIR           *d          = NULL;</div><div class='del'>-        struct dirent *de         = NULL;</div><div class='del'>-        struct dirent  scratch[2] = {{0,},};</div><div class='del'>-        char          *e          = NULL;</div><div class='del'>-</div><div class='del'>-        d = sys_opendir ("/proc/self/fd");</div><div class='del'>-        if (!d)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                should_close = _gf_true;</div><div class='del'>-</div><div class='del'>-                errno = 0;</div><div class='del'>-                de = sys_readdir (d, scratch);</div><div class='del'>-                if (!de || errno != 0)</div><div class='del'>-                        break;</div><div class='del'>-                i = strtoul (de-&gt;d_name, &amp;e, 10);</div><div class='del'>-                if (*e != '\0' || i == dirfd (d))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                for (j = 0; j &lt; count; j++) {</div><div class='del'>-                        if (i == fdv[j]) {</div><div class='del'>-                                should_close = _gf_false;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-               }</div><div class='del'>-               if (should_close)</div><div class='del'>-                        sys_close (i);</div><div class='del'>-        }</div><div class='del'>-        sys_closedir (d);</div><div class='del'>-#else /* !GF_LINUX_HOST_OS */</div><div class='del'>-        struct rlimit rl;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    DIR *d = NULL;</div><div class='add'>+    struct dirent *de = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    char *e = NULL;</div><div class='add'>+</div><div class='add'>+    d = sys_opendir("/proc/self/fd");</div><div class='add'>+    if (!d)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        should_close = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ret = getrlimit (RLIMIT_NOFILE, &amp;rl);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; rl.rlim_cur; i++) {</div><div class='del'>-                should_close = _gf_true;</div><div class='del'>-                for (j = 0; j &lt; count; j++) {</div><div class='del'>-                        if (i == fdv[j]) {</div><div class='del'>-                                should_close = _gf_false;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (should_close)</div><div class='del'>-                        sys_close (i);</div><div class='add'>+        errno = 0;</div><div class='add'>+        de = sys_readdir(d, scratch);</div><div class='add'>+        if (!de || errno != 0)</div><div class='add'>+            break;</div><div class='add'>+        i = strtoul(de-&gt;d_name, &amp;e, 10);</div><div class='add'>+        if (*e != '\0' || i == dirfd(d))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        for (j = 0; j &lt; count; j++) {</div><div class='add'>+            if (i == fdv[j]) {</div><div class='add'>+                should_close = _gf_false;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (should_close)</div><div class='add'>+            sys_close(i);</div><div class='add'>+    }</div><div class='add'>+    sys_closedir(d);</div><div class='add'>+#else  /* !GF_LINUX_HOST_OS */</div><div class='add'>+    struct rlimit rl;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = getrlimit(RLIMIT_NOFILE, &amp;rl);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; rl.rlim_cur; i++) {</div><div class='add'>+        should_close = _gf_true;</div><div class='add'>+        for (j = 0; j &lt; count; j++) {</div><div class='add'>+            if (i == fdv[j]) {</div><div class='add'>+                should_close = _gf_false;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        if (should_close)</div><div class='add'>+            sys_close(i);</div><div class='add'>+    }</div><div class='ctx'> #endif /* !GF_LINUX_HOST_OS */</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -5106,105 +5109,129 @@ close_fds_except (int *fdv, size_t count)</div><div class='ctx'>  *         failure: -1</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_getgrouplist (const char *user, gid_t group, gid_t **groups)</div><div class='add'>+gf_getgrouplist(const char *user, gid_t group, gid_t **groups)</div><div class='ctx'> {</div><div class='del'>-        int ret     = -1;</div><div class='del'>-        int ngroups = SMALL_GROUP_COUNT;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int ngroups = SMALL_GROUP_COUNT;</div><div class='ctx'> </div><div class='del'>-        *groups = GF_CALLOC (sizeof (gid_t), ngroups, gf_common_mt_groups_t);</div><div class='del'>-        if (!*groups)</div><div class='del'>-                return -1;</div><div class='add'>+    *groups = GF_CALLOC(sizeof(gid_t), ngroups, gf_common_mt_groups_t);</div><div class='add'>+    if (!*groups)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * We are running getgrouplist() in a loop until we succeed (or hit</div><div class='del'>-         * certain exit conditions, see the comments below). This is because</div><div class='del'>-         * the indicated number of auxiliary groups that we obtain in case of</div><div class='del'>-         * the failure of the first invocation is not guaranteed to keep its</div><div class='del'>-         * validity upon the next invocation with a gid buffer of that size.</div><div class='del'>-         */</div><div class='del'>-        for (;;) {</div><div class='del'>-                int ngroups_old = ngroups;</div><div class='del'>-                ret = getgrouplist (user, group, *groups, &amp;ngroups);</div><div class='del'>-                if (ret != -1)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                if (ngroups &gt;= GF_MAX_AUX_GROUPS) {</div><div class='del'>-                        /*</div><div class='del'>-                         * This should not happen as GF_MAX_AUX_GROUPS is set</div><div class='del'>-                         * to the max value of number of supported auxiliary</div><div class='del'>-                         * groups across all platforms supported by GlusterFS.</div><div class='del'>-                         * However, if it still happened some way, we wouldn't</div><div class='del'>-                         * care about the incompleteness of the result, we'd</div><div class='del'>-                         * just go on with what we got.</div><div class='del'>-                         */</div><div class='del'>-                        return GF_MAX_AUX_GROUPS;</div><div class='del'>-                } else if (ngroups &lt;= ngroups_old) {</div><div class='del'>-                        /*</div><div class='del'>-                         * There is an edge case that getgrouplist() fails but</div><div class='del'>-                         * ngroups remains the same. This is actually not</div><div class='del'>-                         * specified in getgrouplist(3), but implementations</div><div class='del'>-                         * can do this upon internal failure[1]. To avoid</div><div class='del'>-                         * falling into an infinite loop when this happens, we</div><div class='del'>-                         * break the loop if the getgrouplist call failed</div><div class='del'>-                         * without an increase in the indicated group number.</div><div class='del'>-                         *</div><div class='del'>-                         * [1] https://sourceware.org/git/?p=glibc.git;a=blob;f=grp/initgroups.c;hb=refs/heads/release/2.25/master#l168</div><div class='del'>-                         */</div><div class='del'>-                        GF_FREE (*groups);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                *groups = GF_REALLOC (*groups, ngroups * sizeof (gid_t));</div><div class='del'>-                if (!*groups)</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    /*</div><div class='add'>+     * We are running getgrouplist() in a loop until we succeed (or hit</div><div class='add'>+     * certain exit conditions, see the comments below). This is because</div><div class='add'>+     * the indicated number of auxiliary groups that we obtain in case of</div><div class='add'>+     * the failure of the first invocation is not guaranteed to keep its</div><div class='add'>+     * validity upon the next invocation with a gid buffer of that size.</div><div class='add'>+     */</div><div class='add'>+    for (;;) {</div><div class='add'>+        int ngroups_old = ngroups;</div><div class='add'>+        ret = getgrouplist(user, group, *groups, &amp;ngroups);</div><div class='add'>+        if (ret != -1)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (ngroups &gt;= GF_MAX_AUX_GROUPS) {</div><div class='add'>+            /*</div><div class='add'>+             * This should not happen as GF_MAX_AUX_GROUPS is set</div><div class='add'>+             * to the max value of number of supported auxiliary</div><div class='add'>+             * groups across all platforms supported by GlusterFS.</div><div class='add'>+             * However, if it still happened some way, we wouldn't</div><div class='add'>+             * care about the incompleteness of the result, we'd</div><div class='add'>+             * just go on with what we got.</div><div class='add'>+             */</div><div class='add'>+            return GF_MAX_AUX_GROUPS;</div><div class='add'>+        } else if (ngroups &lt;= ngroups_old) {</div><div class='add'>+            /*</div><div class='add'>+             * There is an edge case that getgrouplist() fails but</div><div class='add'>+             * ngroups remains the same. This is actually not</div><div class='add'>+             * specified in getgrouplist(3), but implementations</div><div class='add'>+             * can do this upon internal failure[1]. To avoid</div><div class='add'>+             * falling into an infinite loop when this happens, we</div><div class='add'>+             * break the loop if the getgrouplist call failed</div><div class='add'>+             * without an increase in the indicated group number.</div><div class='add'>+             *</div><div class='add'>+             * [1]</div><div class='add'>+             * https://sourceware.org/git/?p=glibc.git;a=blob;f=grp/initgroups.c;hb=refs/heads/release/2.25/master#l168</div><div class='add'>+             */</div><div class='add'>+            GF_FREE(*groups);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        *groups = GF_REALLOC(*groups, ngroups * sizeof(gid_t));</div><div class='add'>+        if (!*groups)</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_compute_sha256 (const unsigned char *content, size_t size,</div><div class='del'>-                          char *sha256_hash) {</div><div class='del'>-        SHA256_CTX               sha256;</div><div class='add'>+glusterfs_compute_sha256(const unsigned char *content, size_t size,</div><div class='add'>+                         char *sha256_hash)</div><div class='add'>+{</div><div class='add'>+    SHA256_CTX sha256;</div><div class='ctx'> </div><div class='del'>-        SHA256_Init (&amp;sha256);</div><div class='del'>-        SHA256_Update (&amp;sha256, (const unsigned char *) (content), size);</div><div class='del'>-        SHA256_Final ((unsigned char *) sha256_hash, &amp;sha256);</div><div class='add'>+    SHA256_Init(&amp;sha256);</div><div class='add'>+    SHA256_Update(&amp;sha256, (const unsigned char *)(content), size);</div><div class='add'>+    SHA256_Final((unsigned char *)sha256_hash, &amp;sha256);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char*</div><div class='del'>-get_struct_variable (int mem_num, gf_gsync_status_t *sts_val)</div><div class='del'>-{</div><div class='del'>-        switch (mem_num) {</div><div class='del'>-        case 0:  return (sts_val-&gt;node);</div><div class='del'>-        case 1:  return (sts_val-&gt;master);</div><div class='del'>-        case 2:  return (sts_val-&gt;brick);</div><div class='del'>-        case 3:  return (sts_val-&gt;slave_user);</div><div class='del'>-        case 4:  return (sts_val-&gt;slave);</div><div class='del'>-        case 5:  return (sts_val-&gt;slave_node);</div><div class='del'>-        case 6:  return (sts_val-&gt;worker_status);</div><div class='del'>-        case 7:  return (sts_val-&gt;crawl_status);</div><div class='del'>-        case 8:  return (sts_val-&gt;last_synced);</div><div class='del'>-        case 9:  return (sts_val-&gt;entry);</div><div class='del'>-        case 10:  return (sts_val-&gt;data);</div><div class='del'>-        case 11:  return (sts_val-&gt;meta);</div><div class='del'>-        case 12: return (sts_val-&gt;failures);</div><div class='del'>-        case 13:  return (sts_val-&gt;checkpoint_time);</div><div class='del'>-        case 14:  return (sts_val-&gt;checkpoint_completed);</div><div class='del'>-        case 15:  return (sts_val-&gt;checkpoint_completion_time);</div><div class='del'>-        case 16: return (sts_val-&gt;brick_host_uuid);</div><div class='del'>-        case 17: return (sts_val-&gt;last_synced_utc);</div><div class='del'>-        case 18: return (sts_val-&gt;checkpoint_time_utc);</div><div class='del'>-        case 19: return (sts_val-&gt;checkpoint_completion_time_utc);</div><div class='del'>-        case 20: return (sts_val-&gt;slavekey);</div><div class='del'>-        case 21: return (sts_val-&gt;session_slave);</div><div class='add'>+char *</div><div class='add'>+get_struct_variable(int mem_num, gf_gsync_status_t *sts_val)</div><div class='add'>+{</div><div class='add'>+    switch (mem_num) {</div><div class='add'>+        case 0:</div><div class='add'>+            return (sts_val-&gt;node);</div><div class='add'>+        case 1:</div><div class='add'>+            return (sts_val-&gt;master);</div><div class='add'>+        case 2:</div><div class='add'>+            return (sts_val-&gt;brick);</div><div class='add'>+        case 3:</div><div class='add'>+            return (sts_val-&gt;slave_user);</div><div class='add'>+        case 4:</div><div class='add'>+            return (sts_val-&gt;slave);</div><div class='add'>+        case 5:</div><div class='add'>+            return (sts_val-&gt;slave_node);</div><div class='add'>+        case 6:</div><div class='add'>+            return (sts_val-&gt;worker_status);</div><div class='add'>+        case 7:</div><div class='add'>+            return (sts_val-&gt;crawl_status);</div><div class='add'>+        case 8:</div><div class='add'>+            return (sts_val-&gt;last_synced);</div><div class='add'>+        case 9:</div><div class='add'>+            return (sts_val-&gt;entry);</div><div class='add'>+        case 10:</div><div class='add'>+            return (sts_val-&gt;data);</div><div class='add'>+        case 11:</div><div class='add'>+            return (sts_val-&gt;meta);</div><div class='add'>+        case 12:</div><div class='add'>+            return (sts_val-&gt;failures);</div><div class='add'>+        case 13:</div><div class='add'>+            return (sts_val-&gt;checkpoint_time);</div><div class='add'>+        case 14:</div><div class='add'>+            return (sts_val-&gt;checkpoint_completed);</div><div class='add'>+        case 15:</div><div class='add'>+            return (sts_val-&gt;checkpoint_completion_time);</div><div class='add'>+        case 16:</div><div class='add'>+            return (sts_val-&gt;brick_host_uuid);</div><div class='add'>+        case 17:</div><div class='add'>+            return (sts_val-&gt;last_synced_utc);</div><div class='add'>+        case 18:</div><div class='add'>+            return (sts_val-&gt;checkpoint_time_utc);</div><div class='add'>+        case 19:</div><div class='add'>+            return (sts_val-&gt;checkpoint_completion_time_utc);</div><div class='add'>+        case 20:</div><div class='add'>+            return (sts_val-&gt;slavekey);</div><div class='add'>+        case 21:</div><div class='add'>+            return (sts_val-&gt;session_slave);</div><div class='ctx'>         default:</div><div class='del'>-                 goto out;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* * Safe wrapper function for strncpy.</div><div class='hunk'>@@ -5214,73 +5241,73 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_strncpy (char *dest, const char *src, const size_t dest_size)</div><div class='add'>+gf_strncpy(char *dest, const char *src, const size_t dest_size)</div><div class='ctx'> {</div><div class='del'>-        strncpy (dest, src, dest_size - 1);</div><div class='del'>-        dest[dest_size - 1] = '\0';</div><div class='del'>-        return dest;</div><div class='add'>+    strncpy(dest, src, dest_size - 1);</div><div class='add'>+    dest[dest_size - 1] = '\0';</div><div class='add'>+    return dest;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_replace_old_iatt_in_dict (dict_t *xdata)</div><div class='add'>+gf_replace_old_iatt_in_dict(dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret;</div><div class='del'>-        struct old_iatt *o_iatt; /* old iatt structure */</div><div class='del'>-        struct iatt *c_iatt; /* current iatt */</div><div class='add'>+    int ret;</div><div class='add'>+    struct old_iatt *o_iatt; /* old iatt structure */</div><div class='add'>+    struct iatt *c_iatt;     /* current iatt */</div><div class='ctx'> </div><div class='del'>-        if (!xdata) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;c_iatt);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;c_iatt);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        o_iatt = GF_CALLOC (1, sizeof (struct old_iatt), gf_common_mt_char);</div><div class='del'>-        if (!o_iatt) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    o_iatt = GF_CALLOC(1, sizeof(struct old_iatt), gf_common_mt_char);</div><div class='add'>+    if (!o_iatt) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        oldiatt_from_iatt (o_iatt, c_iatt);</div><div class='add'>+    oldiatt_from_iatt(o_iatt, c_iatt);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_bin (xdata, DHT_IATT_IN_XDATA_KEY, o_iatt,</div><div class='del'>-                            sizeof (struct old_iatt));</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (o_iatt);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_bin(xdata, DHT_IATT_IN_XDATA_KEY, o_iatt,</div><div class='add'>+                       sizeof(struct old_iatt));</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(o_iatt);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_replace_new_iatt_in_dict (dict_t *xdata)</div><div class='add'>+gf_replace_new_iatt_in_dict(dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret;</div><div class='del'>-        struct old_iatt *o_iatt; /* old iatt structure */</div><div class='del'>-        struct iatt *c_iatt; /* new iatt */</div><div class='add'>+    int ret;</div><div class='add'>+    struct old_iatt *o_iatt; /* old iatt structure */</div><div class='add'>+    struct iatt *c_iatt;     /* new iatt */</div><div class='ctx'> </div><div class='del'>-        if (!xdata) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;o_iatt);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;o_iatt);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        c_iatt = GF_CALLOC (1, sizeof (struct iatt), gf_common_mt_char);</div><div class='del'>-        if (!c_iatt) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    c_iatt = GF_CALLOC(1, sizeof(struct iatt), gf_common_mt_char);</div><div class='add'>+    if (!c_iatt) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iatt_from_oldiatt (c_iatt, o_iatt);</div><div class='add'>+    iatt_from_oldiatt(c_iatt, o_iatt);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_bin (xdata, DHT_IATT_IN_XDATA_KEY, c_iatt,</div><div class='del'>-                            sizeof (struct iatt));</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (c_iatt);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_bin(xdata, DHT_IATT_IN_XDATA_KEY, c_iatt,</div><div class='add'>+                       sizeof(struct iatt));</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(c_iatt);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/compat-errno.c b/libglusterfs/src/compat-errno.c<br/>index 3674596ad71..5051b75c772 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/compat-errno.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/compat-errno.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/compat-errno.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/compat-errno.c</a></div><div class='hunk'>@@ -12,7 +12,6 @@</div><div class='ctx'> </div><div class='ctx'> #include "compat-errno.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t gf_error_to_errno_array[1024];</div><div class='ctx'> static int32_t gf_errno_to_error_array[1024];</div><div class='ctx'> </div><div class='hunk'>@@ -20,912 +19,937 @@ static int32_t gf_compat_errno_init_done;</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='ctx'> static void</div><div class='del'>-init_compat_errno_arrays ()</div><div class='add'>+init_compat_errno_arrays()</div><div class='ctx'> {</div><div class='del'>-/*      ENOMSG  35      / * No message of desired type          */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOMSG] = ENOMSG;</div><div class='del'>-        gf_errno_to_error_array[ENOMSG] = GF_ERROR_CODE_NOMSG;</div><div class='del'>-</div><div class='del'>-/*      EIDRM   36      / * Identifier removed                  */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_IDRM] = EIDRM;</div><div class='del'>-        gf_errno_to_error_array[EIDRM] = GF_ERROR_CODE_IDRM;</div><div class='del'>-</div><div class='del'>-/*      ECHRNG  37      / * Channel number out of range         */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CHRNG] = ECHRNG;</div><div class='del'>-        gf_errno_to_error_array[ECHRNG] = GF_ERROR_CODE_CHRNG;</div><div class='del'>-</div><div class='del'>-/*      EL2NSYNC 38     / * Level 2 not synchronized            */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_L2NSYNC] = EL2NSYNC;</div><div class='del'>-        gf_errno_to_error_array[EL2NSYNC] = GF_ERROR_CODE_L2NSYNC;</div><div class='del'>-</div><div class='del'>-/*      EL3HLT  39      / * Level 3 halted                      */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_L3HLT] = EL3HLT;</div><div class='del'>-        gf_errno_to_error_array[EL3HLT] = GF_ERROR_CODE_L3HLT;</div><div class='del'>-</div><div class='del'>-/*      EL3RST  40      / * Level 3 reset                       */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_L3RST] = EL3RST;</div><div class='del'>-        gf_errno_to_error_array[EL3RST] = GF_ERROR_CODE_L3RST;</div><div class='del'>-</div><div class='del'>-/*      ELNRNG  41      / * Link number out of range            */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LNRNG] = ELNRNG;</div><div class='del'>-        gf_errno_to_error_array[ELNRNG] = GF_ERROR_CODE_LNRNG;</div><div class='del'>-</div><div class='del'>-/*      EUNATCH 42      / * Protocol driver not attached                */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_UNATCH] = EUNATCH;</div><div class='del'>-        gf_errno_to_error_array[EUNATCH] = GF_ERROR_CODE_UNATCH;</div><div class='del'>-</div><div class='del'>-/*      ENOCSI  43      / * No CSI structure available          */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOCSI] = ENOCSI;</div><div class='del'>-        gf_errno_to_error_array[ENOCSI] = GF_ERROR_CODE_NOCSI;</div><div class='del'>-</div><div class='del'>-/*      EL2HLT  44      / * Level 2 halted                      */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_L2HLT] = EL2HLT;</div><div class='del'>-        gf_errno_to_error_array[EL2HLT] = GF_ERROR_CODE_L2HLT;</div><div class='del'>-</div><div class='del'>-/*      EDEADLK 45      / * Deadlock condition.                 */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLK;</div><div class='del'>-        gf_errno_to_error_array[EDEADLK] = GF_ERROR_CODE_DEADLK;</div><div class='del'>-</div><div class='del'>-/*      ENOLCK  46      / * No record locks available.          */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOLCK] = ENOLCK;</div><div class='del'>-        gf_errno_to_error_array[ENOLCK] = GF_ERROR_CODE_NOLCK;</div><div class='del'>-</div><div class='del'>-/*      ECANCELED 47    / * Operation canceled                  */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CANCELED] = ECANCELED;</div><div class='del'>-        gf_errno_to_error_array[ECANCELED] = GF_ERROR_CODE_CANCELED;</div><div class='del'>-</div><div class='del'>-/*      ENOTSUP 48      / * Operation not supported             */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTSUPP] = ENOTSUP;</div><div class='del'>-        gf_errno_to_error_array[ENOTSUP] = GF_ERROR_CODE_NOTSUPP;</div><div class='del'>-</div><div class='del'>-/* Filesystem Quotas */</div><div class='del'>-/*      EDQUOT  49      / * Disc quota exceeded                 */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DQUOT] = EDQUOT;</div><div class='del'>-        gf_errno_to_error_array[EDQUOT] = GF_ERROR_CODE_DQUOT;</div><div class='del'>-</div><div class='del'>-/* Convergent Error Returns */</div><div class='del'>-/*      EBADE   50      / * invalid exchange                    */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADE] = EBADE;</div><div class='del'>-        gf_errno_to_error_array[EBADE] = GF_ERROR_CODE_BADE;</div><div class='del'>-/*      EBADR   51      / * invalid request descriptor          */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADR] = EBADR;</div><div class='del'>-        gf_errno_to_error_array[EBADR] = GF_ERROR_CODE_BADR;</div><div class='del'>-/*      EXFULL  52      / * exchange full                       */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_XFULL] = EXFULL;</div><div class='del'>-        gf_errno_to_error_array[EXFULL] = GF_ERROR_CODE_XFULL;</div><div class='del'>-/*      ENOANO  53      / * no anode                            */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOANO] = ENOANO;</div><div class='del'>-        gf_errno_to_error_array[ENOANO] = GF_ERROR_CODE_NOANO;</div><div class='del'>-/*      EBADRQC 54      / * invalid request code                        */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADRQC] = EBADRQC;</div><div class='del'>-        gf_errno_to_error_array[EBADRQC] = GF_ERROR_CODE_BADRQC;</div><div class='del'>-/*      EBADSLT 55      / * invalid slot                                */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADSLT] = EBADSLT;</div><div class='del'>-        gf_errno_to_error_array[EBADSLT] = GF_ERROR_CODE_BADSLT;</div><div class='del'>-/*      EDEADLOCK 56    / * file locking deadlock error         */</div><div class='del'>-/* This is same as EDEADLK on linux */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLOCK;</div><div class='del'>-        gf_errno_to_error_array[EDEADLOCK] = GF_ERROR_CODE_DEADLK;</div><div class='del'>-</div><div class='del'>-/*      EBFONT  57      / * bad font file fmt                   */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BFONT] = EBFONT;</div><div class='del'>-        gf_errno_to_error_array[EBFONT] = GF_ERROR_CODE_BFONT;</div><div class='del'>-</div><div class='del'>-/* Interprocess Robust Locks */</div><div class='del'>-/*      EOWNERDEAD      58      / * process died with the lock */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OWNERDEAD] = EOWNERDEAD;</div><div class='del'>-        gf_errno_to_error_array[EOWNERDEAD] = GF_ERROR_CODE_OWNERDEAD;</div><div class='del'>-/*      ENOTRECOVERABLE 59      / * lock is not recoverable */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTRECOVERABLE] = ENOTRECOVERABLE;</div><div class='del'>-        gf_errno_to_error_array[ENOTRECOVERABLE] = GF_ERROR_CODE_NOTRECOVERABLE;</div><div class='del'>-</div><div class='del'>-/* stream problems */</div><div class='del'>-/*      ENOSTR  60      / * Device not a stream                 */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSTR] = ENOSTR;</div><div class='del'>-        gf_errno_to_error_array[ENOSTR] = GF_ERROR_CODE_NOSTR;</div><div class='del'>-/*      ENODATA 61      / * no data (for no delay io)           */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NODATA] = ENODATA;</div><div class='del'>-        gf_errno_to_error_array[ENODATA] = GF_ERROR_CODE_NODATA;</div><div class='del'>-/*      ETIME   62      / * timer expired                       */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TIME] = ETIME;</div><div class='del'>-        gf_errno_to_error_array[ETIME] = GF_ERROR_CODE_TIME;</div><div class='del'>-/*      ENOSR   63      / * out of streams resources            */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSR] = ENOSR;</div><div class='del'>-        gf_errno_to_error_array[ENOSR] = GF_ERROR_CODE_NOSR;</div><div class='del'>-</div><div class='del'>-/*      ENONET  64      / * Machine is not on the network       */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NONET] = ENONET;</div><div class='del'>-        gf_errno_to_error_array[ENONET] = GF_ERROR_CODE_NONET;</div><div class='del'>-/*      ENOPKG  65      / * Package not installed               */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOPKG] = ENOPKG;</div><div class='del'>-        gf_errno_to_error_array[ENOPKG] = GF_ERROR_CODE_NOPKG;</div><div class='del'>-/*      EREMOTE 66      / * The object is remote                        */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_REMOTE] = EREMOTE;</div><div class='del'>-        gf_errno_to_error_array[EREMOTE] = GF_ERROR_CODE_REMOTE;</div><div class='del'>-/*      ENOLINK 67      / * the link has been severed           */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOLINK] = ENOLINK;</div><div class='del'>-        gf_errno_to_error_array[ENOLINK] = GF_ERROR_CODE_NOLINK;</div><div class='del'>-/*      EADV    68      / * advertise error                     */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADV] = EADV;</div><div class='del'>-        gf_errno_to_error_array[EADV] = GF_ERROR_CODE_ADV;</div><div class='del'>-/*      ESRMNT  69      / * srmount error                       */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SRMNT] = ESRMNT;</div><div class='del'>-        gf_errno_to_error_array[ESRMNT] = GF_ERROR_CODE_SRMNT;</div><div class='del'>-</div><div class='del'>-/*      ECOMM   70      / * Communication error on send         */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_COMM] = ECOMM;</div><div class='del'>-        gf_errno_to_error_array[ECOMM] = GF_ERROR_CODE_COMM;</div><div class='del'>-/*      EPROTO  71      / * Protocol error                      */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTO] = EPROTO;</div><div class='del'>-        gf_errno_to_error_array[EPROTO] = GF_ERROR_CODE_PROTO;</div><div class='del'>-</div><div class='del'>-/* Interprocess Robust Locks */</div><div class='del'>-/*      ELOCKUNMAPPED   72      / * locked lock was unmapped */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LOCKUNMAPPED] = ELOCKUNMAPPED;</div><div class='del'>-        gf_errno_to_error_array[ELOCKUNMAPPED] = GF_ERROR_CODE_LOCKUNMAPPED;</div><div class='del'>-</div><div class='del'>-/*      ENOTACTIVE 73   / * Facility is not active              */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTACTIVE] = ENOTACTIVE;</div><div class='del'>-        gf_errno_to_error_array[ENOTACTIVE] = GF_ERROR_CODE_NOTACTIVE;</div><div class='del'>-/*      EMULTIHOP 74    / * multihop attempted                  */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_MULTIHOP] = EMULTIHOP;</div><div class='del'>-        gf_errno_to_error_array[EMULTIHOP] = GF_ERROR_CODE_MULTIHOP;</div><div class='del'>-/*      EBADMSG 77      / * trying to read unreadable message   */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADMSG] = EBADMSG;</div><div class='del'>-        gf_errno_to_error_array[EBADMSG] = GF_ERROR_CODE_BADMSG;</div><div class='del'>-/*      ENAMETOOLONG 78 / * path name is too long               */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NAMETOOLONG] = ENAMETOOLONG;</div><div class='del'>-        gf_errno_to_error_array[ENAMETOOLONG] = GF_ERROR_CODE_NAMETOOLONG;</div><div class='del'>-/*      EOVERFLOW 79    / * value too large to be stored in data type */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OVERFLOW] = EOVERFLOW;</div><div class='del'>-        gf_errno_to_error_array[EOVERFLOW] = GF_ERROR_CODE_OVERFLOW;</div><div class='del'>-/*      ENOTUNIQ 80     / * given log. name not unique          */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTUNIQ] = ENOTUNIQ;</div><div class='del'>-        gf_errno_to_error_array[ENOTUNIQ] = GF_ERROR_CODE_NOTUNIQ;</div><div class='del'>-/*      EBADFD  81      / * f.d. invalid for this operation     */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADFD] = EBADFD;</div><div class='del'>-        gf_errno_to_error_array[EBADFD] = GF_ERROR_CODE_BADFD;</div><div class='del'>-/*      EREMCHG 82      / * Remote address changed              */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_REMCHG] = EREMCHG;</div><div class='del'>-        gf_errno_to_error_array[EREMCHG] = GF_ERROR_CODE_REMCHG;</div><div class='del'>-</div><div class='del'>-/* shared library problems */</div><div class='del'>-/*      ELIBACC 83      / * Can't access a needed shared lib.   */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LIBACC] = ELIBACC;</div><div class='del'>-        gf_errno_to_error_array[ELIBACC] = GF_ERROR_CODE_LIBACC;</div><div class='del'>-/*      ELIBBAD 84      / * Accessing a corrupted shared lib.   */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LIBBAD] = ELIBBAD;</div><div class='del'>-        gf_errno_to_error_array[ELIBBAD] = GF_ERROR_CODE_LIBBAD;</div><div class='del'>-/*      ELIBSCN 85      / * .lib section in a.out corrupted.    */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LIBSCN] = ELIBSCN;</div><div class='del'>-        gf_errno_to_error_array[ELIBSCN] = GF_ERROR_CODE_LIBSCN;</div><div class='del'>-/*      ELIBMAX 86      / * Attempting to link in too many libs.        */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LIBMAX] = ELIBMAX;</div><div class='del'>-        gf_errno_to_error_array[ELIBMAX] = GF_ERROR_CODE_LIBMAX;</div><div class='del'>-/*      ELIBEXEC 87     / * Attempting to exec a shared library.        */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LIBEXEC] = ELIBEXEC;</div><div class='del'>-        gf_errno_to_error_array[ELIBEXEC] = GF_ERROR_CODE_LIBEXEC;</div><div class='del'>-/*      EILSEQ  88      / * Illegal byte sequence.              */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ILSEQ] = EILSEQ;</div><div class='del'>-        gf_errno_to_error_array[EILSEQ] = GF_ERROR_CODE_ILSEQ;</div><div class='del'>-/*      ENOSYS  89      / * Unsupported file system operation   */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSYS] = ENOSYS;</div><div class='del'>-        gf_errno_to_error_array[ENOSYS] = GF_ERROR_CODE_NOSYS;</div><div class='del'>-/*      ELOOP   90      / * Symbolic link loop                  */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LOOP] = ELOOP;</div><div class='del'>-        gf_errno_to_error_array[ELOOP] = GF_ERROR_CODE_LOOP;</div><div class='del'>-/*      ERESTART 91     / * Restartable system call             */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_RESTART] = ERESTART;</div><div class='del'>-        gf_errno_to_error_array[ERESTART] = GF_ERROR_CODE_RESTART;</div><div class='del'>-/*      ESTRPIPE 92     / * if pipe/FIFO, don't sleep in stream head */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_STRPIPE] = ESTRPIPE;</div><div class='del'>-        gf_errno_to_error_array[ESTRPIPE] = GF_ERROR_CODE_STRPIPE;</div><div class='del'>-/*      ENOTEMPTY 93    / * directory not empty                 */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTEMPTY] = ENOTEMPTY;</div><div class='del'>-        gf_errno_to_error_array[ENOTEMPTY] = GF_ERROR_CODE_NOTEMPTY;</div><div class='del'>-/*      EUSERS  94      / * Too many users (for UFS)            */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_USERS] = EUSERS;</div><div class='del'>-        gf_errno_to_error_array[EUSERS] = GF_ERROR_CODE_USERS;</div><div class='del'>-</div><div class='del'>-/* BSD Networking Software */</div><div class='del'>-        /* argument errors */</div><div class='del'>-/*      ENOTSOCK        95      / * Socket operation on non-socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTSOCK] = ENOTSOCK;</div><div class='del'>-        gf_errno_to_error_array[ENOTSOCK] = GF_ERROR_CODE_NOTSOCK;</div><div class='del'>-/*      EDESTADDRREQ    96      / * Destination address required */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DESTADDRREQ] = EDESTADDRREQ;</div><div class='del'>-        gf_errno_to_error_array[EDESTADDRREQ] = GF_ERROR_CODE_DESTADDRREQ;</div><div class='del'>-/*      EMSGSIZE        97      / * Message too long */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_MSGSIZE] = EMSGSIZE;</div><div class='del'>-        gf_errno_to_error_array[EMSGSIZE] = GF_ERROR_CODE_MSGSIZE;</div><div class='del'>-/*      EPROTOTYPE      98      / * Protocol wrong type for socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTOTYPE] = EPROTOTYPE;</div><div class='del'>-        gf_errno_to_error_array[EPROTOTYPE] = GF_ERROR_CODE_PROTOTYPE;</div><div class='del'>-/*      ENOPROTOOPT     99      / * Protocol not available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOPROTOOPT] = ENOPROTOOPT;</div><div class='del'>-        gf_errno_to_error_array[ENOPROTOOPT] = GF_ERROR_CODE_NOPROTOOPT;</div><div class='del'>-/*      EPROTONOSUPPORT 120     / * Protocol not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTONOSUPPORT] = EPROTONOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EPROTONOSUPPORT] = GF_ERROR_CODE_PROTONOSUPPORT;</div><div class='del'>-/*      ESOCKTNOSUPPORT 121     / * Socket type not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SOCKTNOSUPPORT] = ESOCKTNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[ESOCKTNOSUPPORT] = GF_ERROR_CODE_SOCKTNOSUPPORT;</div><div class='del'>-</div><div class='del'>-/*      EOPNOTSUPP      122     / * Operation not supported on socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='del'>-        gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='del'>-/*      EPFNOSUPPORT    123     / * Protocol family not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PFNOSUPPORT] = EPFNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EPFNOSUPPORT] = GF_ERROR_CODE_PFNOSUPPORT;</div><div class='del'>-/*      EAFNOSUPPORT    124     / * Address family not supported by */</div><div class='del'>-        /* protocol family */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AFNOSUPPORT] = EAFNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EAFNOSUPPORT] = GF_ERROR_CODE_AFNOSUPPORT;</div><div class='del'>-/*      EADDRINUSE      125     / * Address already in use */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADDRINUSE] = EADDRINUSE;</div><div class='del'>-        gf_errno_to_error_array[EADDRINUSE] = GF_ERROR_CODE_ADDRINUSE;</div><div class='del'>-/*      EADDRNOTAVAIL   126     / * Can't assign requested address */</div><div class='del'>-        /* operational errors */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADDRNOTAVAIL] = EADDRNOTAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EADDRNOTAVAIL] = GF_ERROR_CODE_ADDRNOTAVAIL;</div><div class='del'>-/*      ENETDOWN        127     / * Network is down */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETDOWN] = ENETDOWN;</div><div class='del'>-        gf_errno_to_error_array[ENETDOWN] = GF_ERROR_CODE_NETDOWN;</div><div class='del'>-/*      ENETUNREACH     128     / * Network is unreachable */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETUNREACH] = ENETUNREACH;</div><div class='del'>-        gf_errno_to_error_array[ENETUNREACH] = GF_ERROR_CODE_NETUNREACH;</div><div class='del'>-/*      ENETRESET       129     / * Network dropped connection because */</div><div class='del'>-        /* of reset */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETRESET] = ENETRESET;</div><div class='del'>-        gf_errno_to_error_array[ENETRESET] = GF_ERROR_CODE_NETRESET;</div><div class='del'>-/*      ECONNABORTED    130     / * Software caused connection abort */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNABORTED] = ECONNABORTED;</div><div class='del'>-        gf_errno_to_error_array[ECONNABORTED] = GF_ERROR_CODE_CONNABORTED;</div><div class='del'>-/*      ECONNRESET      131     / * Connection reset by peer */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNRESET] = ECONNRESET;</div><div class='del'>-        gf_errno_to_error_array[ECONNRESET] = GF_ERROR_CODE_CONNRESET;</div><div class='del'>-/*      ENOBUFS         132     / * No buffer space available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOBUFS] = ENOBUFS;</div><div class='del'>-        gf_errno_to_error_array[ENOBUFS] = GF_ERROR_CODE_NOBUFS;</div><div class='del'>-/*      EISCONN         133     / * Socket is already connected */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ISCONN] = EISCONN;</div><div class='del'>-        gf_errno_to_error_array[EISCONN] = GF_ERROR_CODE_ISCONN;</div><div class='del'>-/*      ENOTCONN        134     / * Socket is not connected */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTCONN] = ENOTCONN;</div><div class='del'>-        gf_errno_to_error_array[ENOTCONN] = GF_ERROR_CODE_NOTCONN;</div><div class='del'>-/* XENIX has 135 - 142 */</div><div class='del'>-/*      ESHUTDOWN       143     / * Can't send after socket shutdown */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SHUTDOWN] = ESHUTDOWN;</div><div class='del'>-        gf_errno_to_error_array[ESHUTDOWN] = GF_ERROR_CODE_SHUTDOWN;</div><div class='del'>-/*      ETOOMANYREFS    144     / * Too many references: can't splice */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TOOMANYREFS] = ETOOMANYREFS;</div><div class='del'>-        gf_errno_to_error_array[ETOOMANYREFS] = GF_ERROR_CODE_TOOMANYREFS;</div><div class='del'>-/*      ETIMEDOUT       145     / * Connection timed out */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TIMEDOUT] = ETIMEDOUT;</div><div class='del'>-        gf_errno_to_error_array[ETIMEDOUT] = GF_ERROR_CODE_TIMEDOUT;</div><div class='del'>-</div><div class='del'>-/*      ECONNREFUSED    146     / * Connection refused */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNREFUSED] = ECONNREFUSED;</div><div class='del'>-        gf_errno_to_error_array[ECONNREFUSED] = GF_ERROR_CODE_CONNREFUSED;</div><div class='del'>-/*      EHOSTDOWN       147     / * Host is down */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_HOSTDOWN] = EHOSTDOWN;</div><div class='del'>-        gf_errno_to_error_array[EHOSTDOWN] = GF_ERROR_CODE_HOSTDOWN;</div><div class='del'>-/*      EHOSTUNREACH    148     / * No route to host */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_HOSTUNREACH] = EHOSTUNREACH;</div><div class='del'>-        gf_errno_to_error_array[EHOSTUNREACH] = GF_ERROR_CODE_HOSTUNREACH;</div><div class='del'>-/*      EALREADY        149     / * operation already in progress */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ALREADY] = EALREADY;</div><div class='del'>-        gf_errno_to_error_array[EALREADY] = GF_ERROR_CODE_ALREADY;</div><div class='del'>-/*      EINPROGRESS     150     / * operation now in progress */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_INPROGRESS] = EINPROGRESS;</div><div class='del'>-        gf_errno_to_error_array[EINPROGRESS] = GF_ERROR_CODE_INPROGRESS;</div><div class='del'>-</div><div class='del'>-/* SUN Network File System */</div><div class='del'>-/*      ESTALE          151     / * Stale NFS file handle */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_STALE] = ESTALE;</div><div class='del'>-        gf_errno_to_error_array[ESTALE] = GF_ERROR_CODE_STALE;</div><div class='del'>-</div><div class='del'>-        return ;</div><div class='add'>+    /*      ENOMSG  35      / * No message of desired type          */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOMSG] = ENOMSG;</div><div class='add'>+    gf_errno_to_error_array[ENOMSG] = GF_ERROR_CODE_NOMSG;</div><div class='add'>+</div><div class='add'>+    /*      EIDRM   36      / * Identifier removed                  */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_IDRM] = EIDRM;</div><div class='add'>+    gf_errno_to_error_array[EIDRM] = GF_ERROR_CODE_IDRM;</div><div class='add'>+</div><div class='add'>+    /*      ECHRNG  37      / * Channel number out of range         */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CHRNG] = ECHRNG;</div><div class='add'>+    gf_errno_to_error_array[ECHRNG] = GF_ERROR_CODE_CHRNG;</div><div class='add'>+</div><div class='add'>+    /*      EL2NSYNC 38     / * Level 2 not synchronized            */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_L2NSYNC] = EL2NSYNC;</div><div class='add'>+    gf_errno_to_error_array[EL2NSYNC] = GF_ERROR_CODE_L2NSYNC;</div><div class='add'>+</div><div class='add'>+    /*      EL3HLT  39      / * Level 3 halted                      */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_L3HLT] = EL3HLT;</div><div class='add'>+    gf_errno_to_error_array[EL3HLT] = GF_ERROR_CODE_L3HLT;</div><div class='add'>+</div><div class='add'>+    /*      EL3RST  40      / * Level 3 reset                       */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_L3RST] = EL3RST;</div><div class='add'>+    gf_errno_to_error_array[EL3RST] = GF_ERROR_CODE_L3RST;</div><div class='add'>+</div><div class='add'>+    /*      ELNRNG  41      / * Link number out of range            */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LNRNG] = ELNRNG;</div><div class='add'>+    gf_errno_to_error_array[ELNRNG] = GF_ERROR_CODE_LNRNG;</div><div class='add'>+</div><div class='add'>+    /*      EUNATCH 42      / * Protocol driver not attached                */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_UNATCH] = EUNATCH;</div><div class='add'>+    gf_errno_to_error_array[EUNATCH] = GF_ERROR_CODE_UNATCH;</div><div class='add'>+</div><div class='add'>+    /*      ENOCSI  43      / * No CSI structure available          */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOCSI] = ENOCSI;</div><div class='add'>+    gf_errno_to_error_array[ENOCSI] = GF_ERROR_CODE_NOCSI;</div><div class='add'>+</div><div class='add'>+    /*      EL2HLT  44      / * Level 2 halted                      */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_L2HLT] = EL2HLT;</div><div class='add'>+    gf_errno_to_error_array[EL2HLT] = GF_ERROR_CODE_L2HLT;</div><div class='add'>+</div><div class='add'>+    /*      EDEADLK 45      / * Deadlock condition.                 */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLK;</div><div class='add'>+    gf_errno_to_error_array[EDEADLK] = GF_ERROR_CODE_DEADLK;</div><div class='add'>+</div><div class='add'>+    /*      ENOLCK  46      / * No record locks available.          */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOLCK] = ENOLCK;</div><div class='add'>+    gf_errno_to_error_array[ENOLCK] = GF_ERROR_CODE_NOLCK;</div><div class='add'>+</div><div class='add'>+    /*      ECANCELED 47    / * Operation canceled                  */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CANCELED] = ECANCELED;</div><div class='add'>+    gf_errno_to_error_array[ECANCELED] = GF_ERROR_CODE_CANCELED;</div><div class='add'>+</div><div class='add'>+    /*      ENOTSUP 48      / * Operation not supported             */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTSUPP] = ENOTSUP;</div><div class='add'>+    gf_errno_to_error_array[ENOTSUP] = GF_ERROR_CODE_NOTSUPP;</div><div class='add'>+</div><div class='add'>+    /* Filesystem Quotas */</div><div class='add'>+    /*      EDQUOT  49      / * Disc quota exceeded                 */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DQUOT] = EDQUOT;</div><div class='add'>+    gf_errno_to_error_array[EDQUOT] = GF_ERROR_CODE_DQUOT;</div><div class='add'>+</div><div class='add'>+    /* Convergent Error Returns */</div><div class='add'>+    /*      EBADE   50      / * invalid exchange                    */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADE] = EBADE;</div><div class='add'>+    gf_errno_to_error_array[EBADE] = GF_ERROR_CODE_BADE;</div><div class='add'>+    /*      EBADR   51      / * invalid request descriptor          */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADR] = EBADR;</div><div class='add'>+    gf_errno_to_error_array[EBADR] = GF_ERROR_CODE_BADR;</div><div class='add'>+    /*      EXFULL  52      / * exchange full                       */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_XFULL] = EXFULL;</div><div class='add'>+    gf_errno_to_error_array[EXFULL] = GF_ERROR_CODE_XFULL;</div><div class='add'>+    /*      ENOANO  53      / * no anode                            */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOANO] = ENOANO;</div><div class='add'>+    gf_errno_to_error_array[ENOANO] = GF_ERROR_CODE_NOANO;</div><div class='add'>+    /*      EBADRQC 54      / * invalid request code                        */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADRQC] = EBADRQC;</div><div class='add'>+    gf_errno_to_error_array[EBADRQC] = GF_ERROR_CODE_BADRQC;</div><div class='add'>+    /*      EBADSLT 55      / * invalid slot                                */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADSLT] = EBADSLT;</div><div class='add'>+    gf_errno_to_error_array[EBADSLT] = GF_ERROR_CODE_BADSLT;</div><div class='add'>+    /*      EDEADLOCK 56    / * file locking deadlock error         */</div><div class='add'>+    /* This is same as EDEADLK on linux */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLOCK;</div><div class='add'>+    gf_errno_to_error_array[EDEADLOCK] = GF_ERROR_CODE_DEADLK;</div><div class='add'>+</div><div class='add'>+    /*      EBFONT  57      / * bad font file fmt                   */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BFONT] = EBFONT;</div><div class='add'>+    gf_errno_to_error_array[EBFONT] = GF_ERROR_CODE_BFONT;</div><div class='add'>+</div><div class='add'>+    /* Interprocess Robust Locks */</div><div class='add'>+    /*      EOWNERDEAD      58      / * process died with the lock */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OWNERDEAD] = EOWNERDEAD;</div><div class='add'>+    gf_errno_to_error_array[EOWNERDEAD] = GF_ERROR_CODE_OWNERDEAD;</div><div class='add'>+    /*      ENOTRECOVERABLE 59      / * lock is not recoverable */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTRECOVERABLE] = ENOTRECOVERABLE;</div><div class='add'>+    gf_errno_to_error_array[ENOTRECOVERABLE] = GF_ERROR_CODE_NOTRECOVERABLE;</div><div class='add'>+</div><div class='add'>+    /* stream problems */</div><div class='add'>+    /*      ENOSTR  60      / * Device not a stream                 */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSTR] = ENOSTR;</div><div class='add'>+    gf_errno_to_error_array[ENOSTR] = GF_ERROR_CODE_NOSTR;</div><div class='add'>+    /*      ENODATA 61      / * no data (for no delay io)           */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NODATA] = ENODATA;</div><div class='add'>+    gf_errno_to_error_array[ENODATA] = GF_ERROR_CODE_NODATA;</div><div class='add'>+    /*      ETIME   62      / * timer expired                       */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TIME] = ETIME;</div><div class='add'>+    gf_errno_to_error_array[ETIME] = GF_ERROR_CODE_TIME;</div><div class='add'>+    /*      ENOSR   63      / * out of streams resources            */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSR] = ENOSR;</div><div class='add'>+    gf_errno_to_error_array[ENOSR] = GF_ERROR_CODE_NOSR;</div><div class='add'>+</div><div class='add'>+    /*      ENONET  64      / * Machine is not on the network       */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NONET] = ENONET;</div><div class='add'>+    gf_errno_to_error_array[ENONET] = GF_ERROR_CODE_NONET;</div><div class='add'>+    /*      ENOPKG  65      / * Package not installed               */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOPKG] = ENOPKG;</div><div class='add'>+    gf_errno_to_error_array[ENOPKG] = GF_ERROR_CODE_NOPKG;</div><div class='add'>+    /*      EREMOTE 66      / * The object is remote                        */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_REMOTE] = EREMOTE;</div><div class='add'>+    gf_errno_to_error_array[EREMOTE] = GF_ERROR_CODE_REMOTE;</div><div class='add'>+    /*      ENOLINK 67      / * the link has been severed           */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOLINK] = ENOLINK;</div><div class='add'>+    gf_errno_to_error_array[ENOLINK] = GF_ERROR_CODE_NOLINK;</div><div class='add'>+    /*      EADV    68      / * advertise error                     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADV] = EADV;</div><div class='add'>+    gf_errno_to_error_array[EADV] = GF_ERROR_CODE_ADV;</div><div class='add'>+    /*      ESRMNT  69      / * srmount error                       */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SRMNT] = ESRMNT;</div><div class='add'>+    gf_errno_to_error_array[ESRMNT] = GF_ERROR_CODE_SRMNT;</div><div class='add'>+</div><div class='add'>+    /*      ECOMM   70      / * Communication error on send         */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_COMM] = ECOMM;</div><div class='add'>+    gf_errno_to_error_array[ECOMM] = GF_ERROR_CODE_COMM;</div><div class='add'>+    /*      EPROTO  71      / * Protocol error                      */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTO] = EPROTO;</div><div class='add'>+    gf_errno_to_error_array[EPROTO] = GF_ERROR_CODE_PROTO;</div><div class='add'>+</div><div class='add'>+    /* Interprocess Robust Locks */</div><div class='add'>+    /*      ELOCKUNMAPPED   72      / * locked lock was unmapped */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LOCKUNMAPPED] = ELOCKUNMAPPED;</div><div class='add'>+    gf_errno_to_error_array[ELOCKUNMAPPED] = GF_ERROR_CODE_LOCKUNMAPPED;</div><div class='add'>+</div><div class='add'>+    /*      ENOTACTIVE 73   / * Facility is not active              */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTACTIVE] = ENOTACTIVE;</div><div class='add'>+    gf_errno_to_error_array[ENOTACTIVE] = GF_ERROR_CODE_NOTACTIVE;</div><div class='add'>+    /*      EMULTIHOP 74    / * multihop attempted                  */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_MULTIHOP] = EMULTIHOP;</div><div class='add'>+    gf_errno_to_error_array[EMULTIHOP] = GF_ERROR_CODE_MULTIHOP;</div><div class='add'>+    /*      EBADMSG 77      / * trying to read unreadable message   */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADMSG] = EBADMSG;</div><div class='add'>+    gf_errno_to_error_array[EBADMSG] = GF_ERROR_CODE_BADMSG;</div><div class='add'>+    /*      ENAMETOOLONG 78 / * path name is too long               */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NAMETOOLONG] = ENAMETOOLONG;</div><div class='add'>+    gf_errno_to_error_array[ENAMETOOLONG] = GF_ERROR_CODE_NAMETOOLONG;</div><div class='add'>+    /*      EOVERFLOW 79    / * value too large to be stored in data type */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OVERFLOW] = EOVERFLOW;</div><div class='add'>+    gf_errno_to_error_array[EOVERFLOW] = GF_ERROR_CODE_OVERFLOW;</div><div class='add'>+    /*      ENOTUNIQ 80     / * given log. name not unique          */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTUNIQ] = ENOTUNIQ;</div><div class='add'>+    gf_errno_to_error_array[ENOTUNIQ] = GF_ERROR_CODE_NOTUNIQ;</div><div class='add'>+    /*      EBADFD  81      / * f.d. invalid for this operation     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADFD] = EBADFD;</div><div class='add'>+    gf_errno_to_error_array[EBADFD] = GF_ERROR_CODE_BADFD;</div><div class='add'>+    /*      EREMCHG 82      / * Remote address changed              */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_REMCHG] = EREMCHG;</div><div class='add'>+    gf_errno_to_error_array[EREMCHG] = GF_ERROR_CODE_REMCHG;</div><div class='add'>+</div><div class='add'>+    /* shared library problems */</div><div class='add'>+    /*      ELIBACC 83      / * Can't access a needed shared lib.   */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LIBACC] = ELIBACC;</div><div class='add'>+    gf_errno_to_error_array[ELIBACC] = GF_ERROR_CODE_LIBACC;</div><div class='add'>+    /*      ELIBBAD 84      / * Accessing a corrupted shared lib.   */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LIBBAD] = ELIBBAD;</div><div class='add'>+    gf_errno_to_error_array[ELIBBAD] = GF_ERROR_CODE_LIBBAD;</div><div class='add'>+    /*      ELIBSCN 85      / * .lib section in a.out corrupted.    */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LIBSCN] = ELIBSCN;</div><div class='add'>+    gf_errno_to_error_array[ELIBSCN] = GF_ERROR_CODE_LIBSCN;</div><div class='add'>+    /*      ELIBMAX 86      / * Attempting to link in too many libs.        */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LIBMAX] = ELIBMAX;</div><div class='add'>+    gf_errno_to_error_array[ELIBMAX] = GF_ERROR_CODE_LIBMAX;</div><div class='add'>+    /*      ELIBEXEC 87     / * Attempting to exec a shared library.        */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LIBEXEC] = ELIBEXEC;</div><div class='add'>+    gf_errno_to_error_array[ELIBEXEC] = GF_ERROR_CODE_LIBEXEC;</div><div class='add'>+    /*      EILSEQ  88      / * Illegal byte sequence.              */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ILSEQ] = EILSEQ;</div><div class='add'>+    gf_errno_to_error_array[EILSEQ] = GF_ERROR_CODE_ILSEQ;</div><div class='add'>+    /*      ENOSYS  89      / * Unsupported file system operation   */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSYS] = ENOSYS;</div><div class='add'>+    gf_errno_to_error_array[ENOSYS] = GF_ERROR_CODE_NOSYS;</div><div class='add'>+    /*      ELOOP   90      / * Symbolic link loop                  */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LOOP] = ELOOP;</div><div class='add'>+    gf_errno_to_error_array[ELOOP] = GF_ERROR_CODE_LOOP;</div><div class='add'>+    /*      ERESTART 91     / * Restartable system call             */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_RESTART] = ERESTART;</div><div class='add'>+    gf_errno_to_error_array[ERESTART] = GF_ERROR_CODE_RESTART;</div><div class='add'>+    /*      ESTRPIPE 92     / * if pipe/FIFO, don't sleep in stream head */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_STRPIPE] = ESTRPIPE;</div><div class='add'>+    gf_errno_to_error_array[ESTRPIPE] = GF_ERROR_CODE_STRPIPE;</div><div class='add'>+    /*      ENOTEMPTY 93    / * directory not empty                 */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTEMPTY] = ENOTEMPTY;</div><div class='add'>+    gf_errno_to_error_array[ENOTEMPTY] = GF_ERROR_CODE_NOTEMPTY;</div><div class='add'>+    /*      EUSERS  94      / * Too many users (for UFS)            */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_USERS] = EUSERS;</div><div class='add'>+    gf_errno_to_error_array[EUSERS] = GF_ERROR_CODE_USERS;</div><div class='add'>+</div><div class='add'>+    /* BSD Networking Software */</div><div class='add'>+    /* argument errors */</div><div class='add'>+    /*      ENOTSOCK        95      / * Socket operation on non-socket */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTSOCK] = ENOTSOCK;</div><div class='add'>+    gf_errno_to_error_array[ENOTSOCK] = GF_ERROR_CODE_NOTSOCK;</div><div class='add'>+    /*      EDESTADDRREQ    96      / * Destination address required */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DESTADDRREQ] = EDESTADDRREQ;</div><div class='add'>+    gf_errno_to_error_array[EDESTADDRREQ] = GF_ERROR_CODE_DESTADDRREQ;</div><div class='add'>+    /*      EMSGSIZE        97      / * Message too long */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_MSGSIZE] = EMSGSIZE;</div><div class='add'>+    gf_errno_to_error_array[EMSGSIZE] = GF_ERROR_CODE_MSGSIZE;</div><div class='add'>+    /*      EPROTOTYPE      98      / * Protocol wrong type for socket */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTOTYPE] = EPROTOTYPE;</div><div class='add'>+    gf_errno_to_error_array[EPROTOTYPE] = GF_ERROR_CODE_PROTOTYPE;</div><div class='add'>+    /*      ENOPROTOOPT     99      / * Protocol not available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOPROTOOPT] = ENOPROTOOPT;</div><div class='add'>+    gf_errno_to_error_array[ENOPROTOOPT] = GF_ERROR_CODE_NOPROTOOPT;</div><div class='add'>+    /*      EPROTONOSUPPORT 120     / * Protocol not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTONOSUPPORT] = EPROTONOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EPROTONOSUPPORT] = GF_ERROR_CODE_PROTONOSUPPORT;</div><div class='add'>+    /*      ESOCKTNOSUPPORT 121     / * Socket type not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SOCKTNOSUPPORT] = ESOCKTNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[ESOCKTNOSUPPORT] = GF_ERROR_CODE_SOCKTNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EOPNOTSUPP      122     / * Operation not supported on socket */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='add'>+    gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='add'>+    /*      EPFNOSUPPORT    123     / * Protocol family not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PFNOSUPPORT] = EPFNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EPFNOSUPPORT] = GF_ERROR_CODE_PFNOSUPPORT;</div><div class='add'>+    /*      EAFNOSUPPORT    124     / * Address family not supported by */</div><div class='add'>+    /* protocol family */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AFNOSUPPORT] = EAFNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EAFNOSUPPORT] = GF_ERROR_CODE_AFNOSUPPORT;</div><div class='add'>+    /*      EADDRINUSE      125     / * Address already in use */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADDRINUSE] = EADDRINUSE;</div><div class='add'>+    gf_errno_to_error_array[EADDRINUSE] = GF_ERROR_CODE_ADDRINUSE;</div><div class='add'>+    /*      EADDRNOTAVAIL   126     / * Can't assign requested address */</div><div class='add'>+    /* operational errors */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADDRNOTAVAIL] = EADDRNOTAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EADDRNOTAVAIL] = GF_ERROR_CODE_ADDRNOTAVAIL;</div><div class='add'>+    /*      ENETDOWN        127     / * Network is down */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETDOWN] = ENETDOWN;</div><div class='add'>+    gf_errno_to_error_array[ENETDOWN] = GF_ERROR_CODE_NETDOWN;</div><div class='add'>+    /*      ENETUNREACH     128     / * Network is unreachable */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETUNREACH] = ENETUNREACH;</div><div class='add'>+    gf_errno_to_error_array[ENETUNREACH] = GF_ERROR_CODE_NETUNREACH;</div><div class='add'>+    /*      ENETRESET       129     / * Network dropped connection because */</div><div class='add'>+    /* of reset */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETRESET] = ENETRESET;</div><div class='add'>+    gf_errno_to_error_array[ENETRESET] = GF_ERROR_CODE_NETRESET;</div><div class='add'>+    /*      ECONNABORTED    130     / * Software caused connection abort */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNABORTED] = ECONNABORTED;</div><div class='add'>+    gf_errno_to_error_array[ECONNABORTED] = GF_ERROR_CODE_CONNABORTED;</div><div class='add'>+    /*      ECONNRESET      131     / * Connection reset by peer */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNRESET] = ECONNRESET;</div><div class='add'>+    gf_errno_to_error_array[ECONNRESET] = GF_ERROR_CODE_CONNRESET;</div><div class='add'>+    /*      ENOBUFS         132     / * No buffer space available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOBUFS] = ENOBUFS;</div><div class='add'>+    gf_errno_to_error_array[ENOBUFS] = GF_ERROR_CODE_NOBUFS;</div><div class='add'>+    /*      EISCONN         133     / * Socket is already connected */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ISCONN] = EISCONN;</div><div class='add'>+    gf_errno_to_error_array[EISCONN] = GF_ERROR_CODE_ISCONN;</div><div class='add'>+    /*      ENOTCONN        134     / * Socket is not connected */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTCONN] = ENOTCONN;</div><div class='add'>+    gf_errno_to_error_array[ENOTCONN] = GF_ERROR_CODE_NOTCONN;</div><div class='add'>+    /* XENIX has 135 - 142 */</div><div class='add'>+    /*      ESHUTDOWN       143     / * Can't send after socket shutdown */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SHUTDOWN] = ESHUTDOWN;</div><div class='add'>+    gf_errno_to_error_array[ESHUTDOWN] = GF_ERROR_CODE_SHUTDOWN;</div><div class='add'>+    /*      ETOOMANYREFS    144     / * Too many references: can't splice */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TOOMANYREFS] = ETOOMANYREFS;</div><div class='add'>+    gf_errno_to_error_array[ETOOMANYREFS] = GF_ERROR_CODE_TOOMANYREFS;</div><div class='add'>+    /*      ETIMEDOUT       145     / * Connection timed out */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TIMEDOUT] = ETIMEDOUT;</div><div class='add'>+    gf_errno_to_error_array[ETIMEDOUT] = GF_ERROR_CODE_TIMEDOUT;</div><div class='add'>+</div><div class='add'>+    /*      ECONNREFUSED    146     / * Connection refused */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNREFUSED] = ECONNREFUSED;</div><div class='add'>+    gf_errno_to_error_array[ECONNREFUSED] = GF_ERROR_CODE_CONNREFUSED;</div><div class='add'>+    /*      EHOSTDOWN       147     / * Host is down */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_HOSTDOWN] = EHOSTDOWN;</div><div class='add'>+    gf_errno_to_error_array[EHOSTDOWN] = GF_ERROR_CODE_HOSTDOWN;</div><div class='add'>+    /*      EHOSTUNREACH    148     / * No route to host */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_HOSTUNREACH] = EHOSTUNREACH;</div><div class='add'>+    gf_errno_to_error_array[EHOSTUNREACH] = GF_ERROR_CODE_HOSTUNREACH;</div><div class='add'>+    /*      EALREADY        149     / * operation already in progress */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ALREADY] = EALREADY;</div><div class='add'>+    gf_errno_to_error_array[EALREADY] = GF_ERROR_CODE_ALREADY;</div><div class='add'>+    /*      EINPROGRESS     150     / * operation now in progress */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_INPROGRESS] = EINPROGRESS;</div><div class='add'>+    gf_errno_to_error_array[EINPROGRESS] = GF_ERROR_CODE_INPROGRESS;</div><div class='add'>+</div><div class='add'>+    /* SUN Network File System */</div><div class='add'>+    /*      ESTALE          151     / * Stale NFS file handle */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_STALE] = ESTALE;</div><div class='add'>+    gf_errno_to_error_array[ESTALE] = GF_ERROR_CODE_STALE;</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> #endif /* GF_SOLARIS_HOST_OS */</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='ctx'> static void</div><div class='del'>-init_compat_errno_arrays ()</div><div class='add'>+init_compat_errno_arrays()</div><div class='ctx'> {</div><div class='del'>-        /*    EDEADLK         11              / * Resource deadlock would occur */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLK;</div><div class='del'>-        gf_errno_to_error_array[EDEADLK] = GF_ERROR_CODE_DEADLK;</div><div class='del'>-</div><div class='del'>-        /*    EAGAIN          35              / * Try Again */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AGAIN] = EAGAIN;</div><div class='del'>-        gf_errno_to_error_array[EAGAIN] = GF_ERROR_CODE_AGAIN;</div><div class='del'>-</div><div class='del'>-        /*      EINPROGRESS     36              / * Operation now in progress */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_INPROGRESS] = EINPROGRESS;</div><div class='del'>-        gf_errno_to_error_array[EINPROGRESS] = GF_ERROR_CODE_INPROGRESS;</div><div class='del'>-</div><div class='del'>-        /*      EALREADY        37              / * Operation already in progress */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ALREADY] = EALREADY;</div><div class='del'>-        gf_errno_to_error_array[EALREADY] = GF_ERROR_CODE_ALREADY;</div><div class='del'>-</div><div class='del'>-        /*      ENOTSOCK        38              / * Socket operation on non-socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTSOCK] = ENOTSOCK;</div><div class='del'>-        gf_errno_to_error_array[ENOTSOCK] = GF_ERROR_CODE_NOTSOCK;</div><div class='del'>-</div><div class='del'>-        /*      EDESTADDRREQ    39              / * Destination address required */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DESTADDRREQ] = EDESTADDRREQ;</div><div class='del'>-        gf_errno_to_error_array[EDESTADDRREQ] = GF_ERROR_CODE_DESTADDRREQ;</div><div class='del'>-</div><div class='del'>-        /*      EMSGSIZE        40              / * Message too long */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_MSGSIZE] = EMSGSIZE;</div><div class='del'>-        gf_errno_to_error_array[EMSGSIZE] = GF_ERROR_CODE_MSGSIZE;</div><div class='del'>-</div><div class='del'>-        /*      EPROTOTYPE      41              / * Protocol wrong type for socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTOTYPE] = EPROTOTYPE;</div><div class='del'>-        gf_errno_to_error_array[EPROTOTYPE] = GF_ERROR_CODE_PROTOTYPE;</div><div class='del'>-</div><div class='del'>-        /*      ENOPROTOOPT     42              / * Protocol not available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOPROTOOPT] = ENOPROTOOPT;</div><div class='del'>-        gf_errno_to_error_array[ENOPROTOOPT] = GF_ERROR_CODE_NOPROTOOPT;</div><div class='del'>-</div><div class='del'>-        /*      EPROTONOSUPPORT 43              / * Protocol not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTONOSUPPORT] = EPROTONOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EPROTONOSUPPORT] = GF_ERROR_CODE_PROTONOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      ESOCKTNOSUPPORT 44              / * Socket type not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SOCKTNOSUPPORT] = ESOCKTNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[ESOCKTNOSUPPORT] = GF_ERROR_CODE_SOCKTNOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      EOPNOTSUPP      45              / * Operation not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='del'>-        gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='del'>-</div><div class='del'>-        /*      EPFNOSUPPORT    46              / * Protocol family not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PFNOSUPPORT] = EPFNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EPFNOSUPPORT] = GF_ERROR_CODE_PFNOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      EAFNOSUPPORT    47              / * Address family not supported by protocol family */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AFNOSUPPORT] = EAFNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EAFNOSUPPORT] = GF_ERROR_CODE_AFNOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      EADDRINUSE      48              / * Address already in use */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADDRINUSE] = EADDRINUSE;</div><div class='del'>-        gf_errno_to_error_array[EADDRINUSE] = GF_ERROR_CODE_ADDRINUSE;</div><div class='del'>-</div><div class='del'>-        /*      EADDRNOTAVAIL   49              / * Can't assign requested address */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADDRNOTAVAIL] = EADDRNOTAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EADDRNOTAVAIL] = GF_ERROR_CODE_ADDRNOTAVAIL;</div><div class='del'>-</div><div class='del'>-        /*      ENETDOWN        50              / * Network is down */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETDOWN] = ENETDOWN;</div><div class='del'>-        gf_errno_to_error_array[ENETDOWN] = GF_ERROR_CODE_NETDOWN;</div><div class='del'>-</div><div class='del'>-        /*      ENETUNREACH     51              / * Network is unreachable */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETUNREACH] = ENETUNREACH;</div><div class='del'>-        gf_errno_to_error_array[ENETUNREACH] = GF_ERROR_CODE_NETUNREACH;</div><div class='del'>-</div><div class='del'>-        /*      ENETRESET       52              / * Network dropped connection on reset */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETRESET] = ENETRESET;</div><div class='del'>-        gf_errno_to_error_array[ENETRESET] = GF_ERROR_CODE_NETRESET;</div><div class='del'>-</div><div class='del'>-        /*      ECONNABORTED    53              / * Software caused connection abort */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNABORTED] = ECONNABORTED;</div><div class='del'>-        gf_errno_to_error_array[ECONNABORTED] = GF_ERROR_CODE_CONNABORTED;</div><div class='del'>-</div><div class='del'>-        /*      ECONNRESET      54              / * Connection reset by peer */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNRESET] = ECONNRESET;</div><div class='del'>-        gf_errno_to_error_array[ECONNRESET] = GF_ERROR_CODE_CONNRESET;</div><div class='del'>-</div><div class='del'>-        /*      ENOBUFS         55              / * No buffer space available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOBUFS] = ENOBUFS;</div><div class='del'>-        gf_errno_to_error_array[ENOBUFS] = GF_ERROR_CODE_NOBUFS;</div><div class='del'>-</div><div class='del'>-        /*      EISCONN         56              / * Socket is already connected */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ISCONN] = EISCONN;</div><div class='del'>-        gf_errno_to_error_array[EISCONN] = GF_ERROR_CODE_ISCONN;</div><div class='del'>-</div><div class='del'>-        /*      ENOTCONN        57              / * Socket is not connected */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTCONN] = ENOTCONN;</div><div class='del'>-        gf_errno_to_error_array[ENOTCONN] = GF_ERROR_CODE_NOTCONN;</div><div class='del'>-</div><div class='del'>-        /*      ESHUTDOWN       58              / * Can't send after socket shutdown */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SHUTDOWN] = ESHUTDOWN;</div><div class='del'>-        gf_errno_to_error_array[ESHUTDOWN] = GF_ERROR_CODE_SHUTDOWN;</div><div class='del'>-</div><div class='del'>-        /*      ETOOMANYREFS    59              / * Too many references: can't splice */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TOOMANYREFS] = ETOOMANYREFS;</div><div class='del'>-        gf_errno_to_error_array[ETOOMANYREFS] = GF_ERROR_CODE_TOOMANYREFS;</div><div class='del'>-</div><div class='del'>-        /*      ETIMEDOUT       60              / * Operation timed out */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TIMEDOUT] = ETIMEDOUT;</div><div class='del'>-        gf_errno_to_error_array[ETIMEDOUT] = GF_ERROR_CODE_TIMEDOUT;</div><div class='del'>-</div><div class='del'>-        /*      ECONNREFUSED    61              / * Connection refused */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNREFUSED] = ECONNREFUSED;</div><div class='del'>-        gf_errno_to_error_array[ECONNREFUSED] = GF_ERROR_CODE_CONNREFUSED;</div><div class='del'>-</div><div class='del'>-        /*      ELOOP           62              / * Too many levels of symbolic links */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LOOP] = ELOOP;</div><div class='del'>-        gf_errno_to_error_array[ELOOP] = GF_ERROR_CODE_LOOP;</div><div class='del'>-</div><div class='del'>-        /*      ENAMETOOLONG    63              / * File name too long */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NAMETOOLONG] = ENAMETOOLONG;</div><div class='del'>-        gf_errno_to_error_array[ENAMETOOLONG] = GF_ERROR_CODE_NAMETOOLONG;</div><div class='del'>-</div><div class='del'>-        /*      EHOSTDOWN       64              / * Host is down */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_HOSTDOWN] = EHOSTDOWN;</div><div class='del'>-        gf_errno_to_error_array[EHOSTDOWN] = GF_ERROR_CODE_HOSTDOWN;</div><div class='del'>-</div><div class='del'>-        /*      EHOSTUNREACH    65              / * No route to host */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_HOSTUNREACH] = EHOSTUNREACH;</div><div class='del'>-        gf_errno_to_error_array[EHOSTUNREACH] = GF_ERROR_CODE_HOSTUNREACH;</div><div class='del'>-</div><div class='del'>-        /*      ENOTEMPTY       66              / * Directory not empty */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTEMPTY] = ENOTEMPTY;</div><div class='del'>-        gf_errno_to_error_array[ENOTEMPTY] = GF_ERROR_CODE_NOTEMPTY;</div><div class='del'>-</div><div class='del'>-        /*      EPROCLIM        67              / * Too many processes */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROCLIM] = EPROCLIM;</div><div class='del'>-        gf_errno_to_error_array[EPROCLIM] = GF_ERROR_CODE_PROCLIM;</div><div class='del'>-</div><div class='del'>-        /*      EUSERS          68              / * Too many users */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_USERS] = EUSERS;</div><div class='del'>-        gf_errno_to_error_array[EUSERS] = GF_ERROR_CODE_USERS;</div><div class='del'>-</div><div class='del'>-        /*      EDQUOT          69              / * Disc quota exceeded */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DQUOT] = EDQUOT;</div><div class='del'>-        gf_errno_to_error_array[EDQUOT] = GF_ERROR_CODE_DQUOT;</div><div class='del'>-</div><div class='del'>-        /*      ESTALE          70              / * Stale NFS file handle */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_STALE] = ESTALE;</div><div class='del'>-        gf_errno_to_error_array[ESTALE] = GF_ERROR_CODE_STALE;</div><div class='del'>-</div><div class='del'>-        /*      EREMOTE         71              / * Too many levels of remote in path */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_REMOTE] = EREMOTE;</div><div class='del'>-        gf_errno_to_error_array[EREMOTE] = GF_ERROR_CODE_REMOTE;</div><div class='del'>-</div><div class='del'>-        /*      EBADRPC         72              / * RPC struct is bad */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADRPC] = EBADRPC;</div><div class='del'>-        gf_errno_to_error_array[EBADRPC] = GF_ERROR_CODE_BADRPC;</div><div class='del'>-</div><div class='del'>-        /*      ERPCMISMATCH    73              / * RPC version wrong */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_RPCMISMATCH] = ERPCMISMATCH;</div><div class='del'>-        gf_errno_to_error_array[ERPCMISMATCH] = GF_ERROR_CODE_RPCMISMATCH;</div><div class='del'>-</div><div class='del'>-        /*      EPROGUNAVAIL    74              / * RPC prog. not avail */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROGUNAVAIL] = EPROGUNAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EPROGUNAVAIL] = GF_ERROR_CODE_PROGUNAVAIL;</div><div class='del'>-</div><div class='del'>-        /*      EPROGMISMATCH   75              / * Program version wrong */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROGMISMATCH] = EPROGMISMATCH;</div><div class='del'>-        gf_errno_to_error_array[EPROGMISMATCH] = GF_ERROR_CODE_PROGMISMATCH;</div><div class='del'>-</div><div class='del'>-        /*      EPROCUNAVAIL    76              / * Bad procedure for program */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROCUNAVAIL] = EPROCUNAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EPROCUNAVAIL] = GF_ERROR_CODE_PROCUNAVAIL;</div><div class='del'>-</div><div class='del'>-        /*      ENOLCK          77              / * No locks available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOLCK] = ENOLCK;</div><div class='del'>-        gf_errno_to_error_array[ENOLCK] = GF_ERROR_CODE_NOLCK;</div><div class='del'>-</div><div class='del'>-        /*      ENOSYS          78              / * Function not implemented */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSYS] = ENOSYS;</div><div class='del'>-        gf_errno_to_error_array[ENOSYS] = GF_ERROR_CODE_NOSYS;</div><div class='del'>-</div><div class='del'>-        /*      EFTYPE          79              / * Inappropriate file type or format */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_FTYPE] = EFTYPE;</div><div class='del'>-        gf_errno_to_error_array[EFTYPE] = GF_ERROR_CODE_FTYPE;</div><div class='del'>-</div><div class='del'>-        /*      EAUTH           80              / * Authentication error */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AUTH] = EAUTH;</div><div class='del'>-        gf_errno_to_error_array[EAUTH] = GF_ERROR_CODE_AUTH;</div><div class='del'>-</div><div class='del'>-        /*      ENEEDAUTH       81              / * Need authenticator */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NEEDAUTH] = ENEEDAUTH;</div><div class='del'>-        gf_errno_to_error_array[ENEEDAUTH] = GF_ERROR_CODE_NEEDAUTH;</div><div class='del'>-/* Intelligent device errors */</div><div class='del'>-/*      EPWROFF         82      / * Device power is off */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PWROFF] = EPWROFF;</div><div class='del'>-        gf_errno_to_error_array[EPWROFF] = GF_ERROR_CODE_PWROFF;</div><div class='del'>-/*      EDEVERR         83      / * Device error, e.g. paper out */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DEVERR] = EDEVERR;</div><div class='del'>-        gf_errno_to_error_array[EDEVERR] = GF_ERROR_CODE_DEVERR;</div><div class='del'>-</div><div class='del'>-        /*      EOVERFLOW       84              / * Value too large to be stored in data type */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OVERFLOW] = EOVERFLOW;</div><div class='del'>-        gf_errno_to_error_array[EOVERFLOW] = GF_ERROR_CODE_OVERFLOW;</div><div class='del'>-</div><div class='del'>-/* Program loading errors */</div><div class='del'>-/*   EBADEXEC   85      / * Bad executable */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADEXEC] = EBADEXEC;</div><div class='del'>-        gf_errno_to_error_array[EBADEXEC] = GF_ERROR_CODE_BADEXEC;</div><div class='del'>-</div><div class='del'>-/*   EBADARCH   86      / * Bad CPU type in executable */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADARCH] = EBADARCH;</div><div class='del'>-        gf_errno_to_error_array[EBADARCH] = GF_ERROR_CODE_BADARCH;</div><div class='del'>-</div><div class='del'>-/*   ESHLIBVERS 87      / * Shared library version mismatch */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SHLIBVERS] = ESHLIBVERS;</div><div class='del'>-        gf_errno_to_error_array[ESHLIBVERS] = GF_ERROR_CODE_SHLIBVERS;</div><div class='del'>-</div><div class='del'>-/*   EBADMACHO  88      / * Malformed Macho file */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADMACHO] = EBADMACHO;</div><div class='del'>-        gf_errno_to_error_array[EBADMACHO] = GF_ERROR_CODE_BADMACHO;</div><div class='add'>+    /*    EDEADLK         11              / * Resource deadlock would occur */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLK;</div><div class='add'>+    gf_errno_to_error_array[EDEADLK] = GF_ERROR_CODE_DEADLK;</div><div class='add'>+</div><div class='add'>+    /*    EAGAIN          35              / * Try Again */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AGAIN] = EAGAIN;</div><div class='add'>+    gf_errno_to_error_array[EAGAIN] = GF_ERROR_CODE_AGAIN;</div><div class='add'>+</div><div class='add'>+    /*      EINPROGRESS     36              / * Operation now in progress */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_INPROGRESS] = EINPROGRESS;</div><div class='add'>+    gf_errno_to_error_array[EINPROGRESS] = GF_ERROR_CODE_INPROGRESS;</div><div class='add'>+</div><div class='add'>+    /*      EALREADY        37              / * Operation already in progress */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ALREADY] = EALREADY;</div><div class='add'>+    gf_errno_to_error_array[EALREADY] = GF_ERROR_CODE_ALREADY;</div><div class='add'>+</div><div class='add'>+    /*      ENOTSOCK        38              / * Socket operation on non-socket</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTSOCK] = ENOTSOCK;</div><div class='add'>+    gf_errno_to_error_array[ENOTSOCK] = GF_ERROR_CODE_NOTSOCK;</div><div class='add'>+</div><div class='add'>+    /*      EDESTADDRREQ    39              / * Destination address required */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DESTADDRREQ] = EDESTADDRREQ;</div><div class='add'>+    gf_errno_to_error_array[EDESTADDRREQ] = GF_ERROR_CODE_DESTADDRREQ;</div><div class='add'>+</div><div class='add'>+    /*      EMSGSIZE        40              / * Message too long */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_MSGSIZE] = EMSGSIZE;</div><div class='add'>+    gf_errno_to_error_array[EMSGSIZE] = GF_ERROR_CODE_MSGSIZE;</div><div class='add'>+</div><div class='add'>+    /*      EPROTOTYPE      41              / * Protocol wrong type for socket</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTOTYPE] = EPROTOTYPE;</div><div class='add'>+    gf_errno_to_error_array[EPROTOTYPE] = GF_ERROR_CODE_PROTOTYPE;</div><div class='add'>+</div><div class='add'>+    /*      ENOPROTOOPT     42              / * Protocol not available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOPROTOOPT] = ENOPROTOOPT;</div><div class='add'>+    gf_errno_to_error_array[ENOPROTOOPT] = GF_ERROR_CODE_NOPROTOOPT;</div><div class='add'>+</div><div class='add'>+    /*      EPROTONOSUPPORT 43              / * Protocol not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTONOSUPPORT] = EPROTONOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EPROTONOSUPPORT] = GF_ERROR_CODE_PROTONOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      ESOCKTNOSUPPORT 44              / * Socket type not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SOCKTNOSUPPORT] = ESOCKTNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[ESOCKTNOSUPPORT] = GF_ERROR_CODE_SOCKTNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EOPNOTSUPP      45              / * Operation not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='add'>+    gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='add'>+</div><div class='add'>+    /*      EPFNOSUPPORT    46              / * Protocol family not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PFNOSUPPORT] = EPFNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EPFNOSUPPORT] = GF_ERROR_CODE_PFNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EAFNOSUPPORT    47              / * Address family not supported by</div><div class='add'>+     * protocol family */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AFNOSUPPORT] = EAFNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EAFNOSUPPORT] = GF_ERROR_CODE_AFNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EADDRINUSE      48              / * Address already in use */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADDRINUSE] = EADDRINUSE;</div><div class='add'>+    gf_errno_to_error_array[EADDRINUSE] = GF_ERROR_CODE_ADDRINUSE;</div><div class='add'>+</div><div class='add'>+    /*      EADDRNOTAVAIL   49              / * Can't assign requested address</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADDRNOTAVAIL] = EADDRNOTAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EADDRNOTAVAIL] = GF_ERROR_CODE_ADDRNOTAVAIL;</div><div class='add'>+</div><div class='add'>+    /*      ENETDOWN        50              / * Network is down */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETDOWN] = ENETDOWN;</div><div class='add'>+    gf_errno_to_error_array[ENETDOWN] = GF_ERROR_CODE_NETDOWN;</div><div class='add'>+</div><div class='add'>+    /*      ENETUNREACH     51              / * Network is unreachable */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETUNREACH] = ENETUNREACH;</div><div class='add'>+    gf_errno_to_error_array[ENETUNREACH] = GF_ERROR_CODE_NETUNREACH;</div><div class='add'>+</div><div class='add'>+    /*      ENETRESET       52              / * Network dropped connection on</div><div class='add'>+     * reset */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETRESET] = ENETRESET;</div><div class='add'>+    gf_errno_to_error_array[ENETRESET] = GF_ERROR_CODE_NETRESET;</div><div class='add'>+</div><div class='add'>+    /*      ECONNABORTED    53              / * Software caused connection abort</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNABORTED] = ECONNABORTED;</div><div class='add'>+    gf_errno_to_error_array[ECONNABORTED] = GF_ERROR_CODE_CONNABORTED;</div><div class='add'>+</div><div class='add'>+    /*      ECONNRESET      54              / * Connection reset by peer */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNRESET] = ECONNRESET;</div><div class='add'>+    gf_errno_to_error_array[ECONNRESET] = GF_ERROR_CODE_CONNRESET;</div><div class='add'>+</div><div class='add'>+    /*      ENOBUFS         55              / * No buffer space available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOBUFS] = ENOBUFS;</div><div class='add'>+    gf_errno_to_error_array[ENOBUFS] = GF_ERROR_CODE_NOBUFS;</div><div class='add'>+</div><div class='add'>+    /*      EISCONN         56              / * Socket is already connected */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ISCONN] = EISCONN;</div><div class='add'>+    gf_errno_to_error_array[EISCONN] = GF_ERROR_CODE_ISCONN;</div><div class='add'>+</div><div class='add'>+    /*      ENOTCONN        57              / * Socket is not connected */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTCONN] = ENOTCONN;</div><div class='add'>+    gf_errno_to_error_array[ENOTCONN] = GF_ERROR_CODE_NOTCONN;</div><div class='add'>+</div><div class='add'>+    /*      ESHUTDOWN       58              / * Can't send after socket shutdown</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SHUTDOWN] = ESHUTDOWN;</div><div class='add'>+    gf_errno_to_error_array[ESHUTDOWN] = GF_ERROR_CODE_SHUTDOWN;</div><div class='add'>+</div><div class='add'>+    /*      ETOOMANYREFS    59              / * Too many references: can't</div><div class='add'>+     * splice */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TOOMANYREFS] = ETOOMANYREFS;</div><div class='add'>+    gf_errno_to_error_array[ETOOMANYREFS] = GF_ERROR_CODE_TOOMANYREFS;</div><div class='add'>+</div><div class='add'>+    /*      ETIMEDOUT       60              / * Operation timed out */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TIMEDOUT] = ETIMEDOUT;</div><div class='add'>+    gf_errno_to_error_array[ETIMEDOUT] = GF_ERROR_CODE_TIMEDOUT;</div><div class='add'>+</div><div class='add'>+    /*      ECONNREFUSED    61              / * Connection refused */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNREFUSED] = ECONNREFUSED;</div><div class='add'>+    gf_errno_to_error_array[ECONNREFUSED] = GF_ERROR_CODE_CONNREFUSED;</div><div class='add'>+</div><div class='add'>+    /*      ELOOP           62              / * Too many levels of symbolic</div><div class='add'>+     * links */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LOOP] = ELOOP;</div><div class='add'>+    gf_errno_to_error_array[ELOOP] = GF_ERROR_CODE_LOOP;</div><div class='add'>+</div><div class='add'>+    /*      ENAMETOOLONG    63              / * File name too long */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NAMETOOLONG] = ENAMETOOLONG;</div><div class='add'>+    gf_errno_to_error_array[ENAMETOOLONG] = GF_ERROR_CODE_NAMETOOLONG;</div><div class='add'>+</div><div class='add'>+    /*      EHOSTDOWN       64              / * Host is down */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_HOSTDOWN] = EHOSTDOWN;</div><div class='add'>+    gf_errno_to_error_array[EHOSTDOWN] = GF_ERROR_CODE_HOSTDOWN;</div><div class='add'>+</div><div class='add'>+    /*      EHOSTUNREACH    65              / * No route to host */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_HOSTUNREACH] = EHOSTUNREACH;</div><div class='add'>+    gf_errno_to_error_array[EHOSTUNREACH] = GF_ERROR_CODE_HOSTUNREACH;</div><div class='add'>+</div><div class='add'>+    /*      ENOTEMPTY       66              / * Directory not empty */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTEMPTY] = ENOTEMPTY;</div><div class='add'>+    gf_errno_to_error_array[ENOTEMPTY] = GF_ERROR_CODE_NOTEMPTY;</div><div class='add'>+</div><div class='add'>+    /*      EPROCLIM        67              / * Too many processes */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROCLIM] = EPROCLIM;</div><div class='add'>+    gf_errno_to_error_array[EPROCLIM] = GF_ERROR_CODE_PROCLIM;</div><div class='add'>+</div><div class='add'>+    /*      EUSERS          68              / * Too many users */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_USERS] = EUSERS;</div><div class='add'>+    gf_errno_to_error_array[EUSERS] = GF_ERROR_CODE_USERS;</div><div class='add'>+</div><div class='add'>+    /*      EDQUOT          69              / * Disc quota exceeded */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DQUOT] = EDQUOT;</div><div class='add'>+    gf_errno_to_error_array[EDQUOT] = GF_ERROR_CODE_DQUOT;</div><div class='add'>+</div><div class='add'>+    /*      ESTALE          70              / * Stale NFS file handle */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_STALE] = ESTALE;</div><div class='add'>+    gf_errno_to_error_array[ESTALE] = GF_ERROR_CODE_STALE;</div><div class='add'>+</div><div class='add'>+    /*      EREMOTE         71              / * Too many levels of remote in</div><div class='add'>+     * path */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_REMOTE] = EREMOTE;</div><div class='add'>+    gf_errno_to_error_array[EREMOTE] = GF_ERROR_CODE_REMOTE;</div><div class='add'>+</div><div class='add'>+    /*      EBADRPC         72              / * RPC struct is bad */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADRPC] = EBADRPC;</div><div class='add'>+    gf_errno_to_error_array[EBADRPC] = GF_ERROR_CODE_BADRPC;</div><div class='add'>+</div><div class='add'>+    /*      ERPCMISMATCH    73              / * RPC version wrong */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_RPCMISMATCH] = ERPCMISMATCH;</div><div class='add'>+    gf_errno_to_error_array[ERPCMISMATCH] = GF_ERROR_CODE_RPCMISMATCH;</div><div class='add'>+</div><div class='add'>+    /*      EPROGUNAVAIL    74              / * RPC prog. not avail */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROGUNAVAIL] = EPROGUNAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EPROGUNAVAIL] = GF_ERROR_CODE_PROGUNAVAIL;</div><div class='add'>+</div><div class='add'>+    /*      EPROGMISMATCH   75              / * Program version wrong */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROGMISMATCH] = EPROGMISMATCH;</div><div class='add'>+    gf_errno_to_error_array[EPROGMISMATCH] = GF_ERROR_CODE_PROGMISMATCH;</div><div class='add'>+</div><div class='add'>+    /*      EPROCUNAVAIL    76              / * Bad procedure for program */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROCUNAVAIL] = EPROCUNAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EPROCUNAVAIL] = GF_ERROR_CODE_PROCUNAVAIL;</div><div class='add'>+</div><div class='add'>+    /*      ENOLCK          77              / * No locks available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOLCK] = ENOLCK;</div><div class='add'>+    gf_errno_to_error_array[ENOLCK] = GF_ERROR_CODE_NOLCK;</div><div class='add'>+</div><div class='add'>+    /*      ENOSYS          78              / * Function not implemented */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSYS] = ENOSYS;</div><div class='add'>+    gf_errno_to_error_array[ENOSYS] = GF_ERROR_CODE_NOSYS;</div><div class='add'>+</div><div class='add'>+    /*      EFTYPE          79              / * Inappropriate file type or</div><div class='add'>+     * format */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_FTYPE] = EFTYPE;</div><div class='add'>+    gf_errno_to_error_array[EFTYPE] = GF_ERROR_CODE_FTYPE;</div><div class='add'>+</div><div class='add'>+    /*      EAUTH           80              / * Authentication error */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AUTH] = EAUTH;</div><div class='add'>+    gf_errno_to_error_array[EAUTH] = GF_ERROR_CODE_AUTH;</div><div class='add'>+</div><div class='add'>+    /*      ENEEDAUTH       81              / * Need authenticator */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NEEDAUTH] = ENEEDAUTH;</div><div class='add'>+    gf_errno_to_error_array[ENEEDAUTH] = GF_ERROR_CODE_NEEDAUTH;</div><div class='add'>+    /* Intelligent device errors */</div><div class='add'>+    /*      EPWROFF         82      / * Device power is off */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PWROFF] = EPWROFF;</div><div class='add'>+    gf_errno_to_error_array[EPWROFF] = GF_ERROR_CODE_PWROFF;</div><div class='add'>+    /*      EDEVERR         83      / * Device error, e.g. paper out */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DEVERR] = EDEVERR;</div><div class='add'>+    gf_errno_to_error_array[EDEVERR] = GF_ERROR_CODE_DEVERR;</div><div class='add'>+</div><div class='add'>+    /*      EOVERFLOW       84              / * Value too large to be stored in</div><div class='add'>+     * data type */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OVERFLOW] = EOVERFLOW;</div><div class='add'>+    gf_errno_to_error_array[EOVERFLOW] = GF_ERROR_CODE_OVERFLOW;</div><div class='add'>+</div><div class='add'>+    /* Program loading errors */</div><div class='add'>+    /*   EBADEXEC   85      / * Bad executable */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADEXEC] = EBADEXEC;</div><div class='add'>+    gf_errno_to_error_array[EBADEXEC] = GF_ERROR_CODE_BADEXEC;</div><div class='add'>+</div><div class='add'>+    /*   EBADARCH   86      / * Bad CPU type in executable */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADARCH] = EBADARCH;</div><div class='add'>+    gf_errno_to_error_array[EBADARCH] = GF_ERROR_CODE_BADARCH;</div><div class='add'>+</div><div class='add'>+    /*   ESHLIBVERS 87      / * Shared library version mismatch */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SHLIBVERS] = ESHLIBVERS;</div><div class='add'>+    gf_errno_to_error_array[ESHLIBVERS] = GF_ERROR_CODE_SHLIBVERS;</div><div class='add'>+</div><div class='add'>+    /*   EBADMACHO  88      / * Malformed Macho file */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADMACHO] = EBADMACHO;</div><div class='add'>+    gf_errno_to_error_array[EBADMACHO] = GF_ERROR_CODE_BADMACHO;</div><div class='ctx'> </div><div class='ctx'> #ifdef EDOOFUS</div><div class='del'>-        /*    EDOOFUS           88              / * Programming error */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DOOFUS] = EDOOFUS;</div><div class='del'>-        gf_errno_to_error_array[EDOOFUS] = GF_ERROR_CODE_DOOFUS;</div><div class='add'>+    /*    EDOOFUS           88              / * Programming error */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DOOFUS] = EDOOFUS;</div><div class='add'>+    gf_errno_to_error_array[EDOOFUS] = GF_ERROR_CODE_DOOFUS;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /*      ECANCELED       89              / * Operation canceled */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CANCELED] = ECANCELED;</div><div class='del'>-        gf_errno_to_error_array[ECANCELED] = GF_ERROR_CODE_CANCELED;</div><div class='del'>-</div><div class='del'>-        /*   EIDRM              90              / * Identifier removed */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_IDRM] = EIDRM;</div><div class='del'>-        gf_errno_to_error_array[EIDRM] = GF_ERROR_CODE_IDRM;</div><div class='del'>-        /*   ENOMSG             91              / * No message of desired type */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOMSG] = ENOMSG;</div><div class='del'>-        gf_errno_to_error_array[ENOMSG] = GF_ERROR_CODE_NOMSG;</div><div class='del'>-</div><div class='del'>-        /*   EILSEQ             92              / * Illegal byte sequence */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ILSEQ] = EILSEQ;</div><div class='del'>-        gf_errno_to_error_array[EILSEQ] = GF_ERROR_CODE_ILSEQ;</div><div class='del'>-</div><div class='del'>-        /*   ENOATTR            93              / * Attribute not found */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOATTR] = ENOATTR;</div><div class='del'>-        gf_errno_to_error_array[ENOATTR] = GF_ERROR_CODE_NOATTR;</div><div class='del'>-</div><div class='del'>-        /*   EBADMSG            94              / * Bad message */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADMSG] = EBADMSG;</div><div class='del'>-        gf_errno_to_error_array[EBADMSG] = GF_ERROR_CODE_BADMSG;</div><div class='del'>-</div><div class='del'>-        /*   EMULTIHOP  95              / * Reserved */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_MULTIHOP] = EMULTIHOP;</div><div class='del'>-        gf_errno_to_error_array[EMULTIHOP] = GF_ERROR_CODE_MULTIHOP;</div><div class='del'>-</div><div class='del'>-        /*      ENODATA         96              / * No message available on STREAM */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NEEDAUTH] = ENEEDAUTH;</div><div class='del'>-        gf_errno_to_error_array[ENEEDAUTH] = GF_ERROR_CODE_NEEDAUTH;</div><div class='del'>-</div><div class='del'>-        /*   ENOLINK            97              / * Reserved */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOLINK] = ENOLINK;</div><div class='del'>-        gf_errno_to_error_array[ENOLINK] = GF_ERROR_CODE_NOLINK;</div><div class='del'>-</div><div class='del'>-        /*   ENOSR              98              / * No STREAM resources */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSR] = ENOSR;</div><div class='del'>-        gf_errno_to_error_array[ENOSR] = GF_ERROR_CODE_NOSR;</div><div class='del'>-</div><div class='del'>-        /*   ENOSTR             99              / * Not a STREAM */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSTR] = ENOSTR;</div><div class='del'>-        gf_errno_to_error_array[ENOSTR] = GF_ERROR_CODE_NOSTR;</div><div class='del'>-</div><div class='del'>-/*      EPROTO          100             / * Protocol error */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTO] = EPROTO;</div><div class='del'>-        gf_errno_to_error_array[EPROTO] = GF_ERROR_CODE_PROTO;</div><div class='del'>-/*   ETIME              101             / * STREAM ioctl timeout */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TIME] = ETIME;</div><div class='del'>-        gf_errno_to_error_array[ETIME] = GF_ERROR_CODE_TIME;</div><div class='del'>-</div><div class='del'>-/* This value is only discrete when compiling __DARWIN_UNIX03, or KERNEL */</div><div class='del'>-/*      EOPNOTSUPP      102             / * Operation not supported on socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='del'>-        gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='del'>-</div><div class='del'>-/*   ENOPOLICY  103             / * No such policy registered */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOPOLICY] = ENOPOLICY;</div><div class='del'>-        gf_errno_to_error_array[ENOPOLICY] = GF_ERROR_CODE_NOPOLICY;</div><div class='del'>-</div><div class='del'>-        return ;</div><div class='add'>+    /*      ECANCELED       89              / * Operation canceled */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CANCELED] = ECANCELED;</div><div class='add'>+    gf_errno_to_error_array[ECANCELED] = GF_ERROR_CODE_CANCELED;</div><div class='add'>+</div><div class='add'>+    /*   EIDRM              90              / * Identifier removed */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_IDRM] = EIDRM;</div><div class='add'>+    gf_errno_to_error_array[EIDRM] = GF_ERROR_CODE_IDRM;</div><div class='add'>+    /*   ENOMSG             91              / * No message of desired type */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOMSG] = ENOMSG;</div><div class='add'>+    gf_errno_to_error_array[ENOMSG] = GF_ERROR_CODE_NOMSG;</div><div class='add'>+</div><div class='add'>+    /*   EILSEQ             92              / * Illegal byte sequence */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ILSEQ] = EILSEQ;</div><div class='add'>+    gf_errno_to_error_array[EILSEQ] = GF_ERROR_CODE_ILSEQ;</div><div class='add'>+</div><div class='add'>+    /*   ENOATTR            93              / * Attribute not found */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOATTR] = ENOATTR;</div><div class='add'>+    gf_errno_to_error_array[ENOATTR] = GF_ERROR_CODE_NOATTR;</div><div class='add'>+</div><div class='add'>+    /*   EBADMSG            94              / * Bad message */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADMSG] = EBADMSG;</div><div class='add'>+    gf_errno_to_error_array[EBADMSG] = GF_ERROR_CODE_BADMSG;</div><div class='add'>+</div><div class='add'>+    /*   EMULTIHOP  95              / * Reserved */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_MULTIHOP] = EMULTIHOP;</div><div class='add'>+    gf_errno_to_error_array[EMULTIHOP] = GF_ERROR_CODE_MULTIHOP;</div><div class='add'>+</div><div class='add'>+    /*      ENODATA         96              / * No message available on STREAM</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NEEDAUTH] = ENEEDAUTH;</div><div class='add'>+    gf_errno_to_error_array[ENEEDAUTH] = GF_ERROR_CODE_NEEDAUTH;</div><div class='add'>+</div><div class='add'>+    /*   ENOLINK            97              / * Reserved */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOLINK] = ENOLINK;</div><div class='add'>+    gf_errno_to_error_array[ENOLINK] = GF_ERROR_CODE_NOLINK;</div><div class='add'>+</div><div class='add'>+    /*   ENOSR              98              / * No STREAM resources */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSR] = ENOSR;</div><div class='add'>+    gf_errno_to_error_array[ENOSR] = GF_ERROR_CODE_NOSR;</div><div class='add'>+</div><div class='add'>+    /*   ENOSTR             99              / * Not a STREAM */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSTR] = ENOSTR;</div><div class='add'>+    gf_errno_to_error_array[ENOSTR] = GF_ERROR_CODE_NOSTR;</div><div class='add'>+</div><div class='add'>+    /*      EPROTO          100             / * Protocol error */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTO] = EPROTO;</div><div class='add'>+    gf_errno_to_error_array[EPROTO] = GF_ERROR_CODE_PROTO;</div><div class='add'>+    /*   ETIME              101             / * STREAM ioctl timeout */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TIME] = ETIME;</div><div class='add'>+    gf_errno_to_error_array[ETIME] = GF_ERROR_CODE_TIME;</div><div class='add'>+</div><div class='add'>+    /* This value is only discrete when compiling __DARWIN_UNIX03, or KERNEL */</div><div class='add'>+    /*      EOPNOTSUPP      102             / * Operation not supported on</div><div class='add'>+     * socket */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='add'>+    gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='add'>+</div><div class='add'>+    /*   ENOPOLICY  103             / * No such policy registered */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOPOLICY] = ENOPOLICY;</div><div class='add'>+    gf_errno_to_error_array[ENOPOLICY] = GF_ERROR_CODE_NOPOLICY;</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> #endif /* GF_DARWIN_HOST_OS */</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='ctx'> static void</div><div class='del'>-init_compat_errno_arrays ()</div><div class='add'>+init_compat_errno_arrays()</div><div class='ctx'> {</div><div class='del'>-        /* Quite a bit of things changed in FreeBSD - current */</div><div class='del'>-</div><div class='del'>-        /*    EAGAIN          35              / * Try Again */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AGAIN] = EAGAIN;</div><div class='del'>-        gf_errno_to_error_array[EAGAIN] = GF_ERROR_CODE_AGAIN;</div><div class='del'>-</div><div class='del'>-        /*    EDEADLK         11              / * Resource deadlock would occur */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLK;</div><div class='del'>-        gf_errno_to_error_array[EDEADLK] = GF_ERROR_CODE_DEADLK;</div><div class='del'>-</div><div class='del'>-        /*      EINPROGRESS     36              / * Operation now in progress */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_INPROGRESS] = EINPROGRESS;</div><div class='del'>-        gf_errno_to_error_array[EINPROGRESS] = GF_ERROR_CODE_INPROGRESS;</div><div class='del'>-</div><div class='del'>-        /*      EALREADY        37              / * Operation already in progress */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ALREADY] = EALREADY;</div><div class='del'>-        gf_errno_to_error_array[EALREADY] = GF_ERROR_CODE_ALREADY;</div><div class='del'>-</div><div class='del'>-        /*      ENOTSOCK        38              / * Socket operation on non-socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTSOCK] = ENOTSOCK;</div><div class='del'>-        gf_errno_to_error_array[ENOTSOCK] = GF_ERROR_CODE_NOTSOCK;</div><div class='del'>-</div><div class='del'>-        /*      EDESTADDRREQ    39              / * Destination address required */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DESTADDRREQ] = EDESTADDRREQ;</div><div class='del'>-        gf_errno_to_error_array[EDESTADDRREQ] = GF_ERROR_CODE_DESTADDRREQ;</div><div class='del'>-</div><div class='del'>-        /*      EMSGSIZE        40              / * Message too long */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_MSGSIZE] = EMSGSIZE;</div><div class='del'>-        gf_errno_to_error_array[EMSGSIZE] = GF_ERROR_CODE_MSGSIZE;</div><div class='del'>-</div><div class='del'>-        /*      EPROTOTYPE      41              / * Protocol wrong type for socket */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTOTYPE] = EPROTOTYPE;</div><div class='del'>-        gf_errno_to_error_array[EPROTOTYPE] = GF_ERROR_CODE_PROTOTYPE;</div><div class='del'>-</div><div class='del'>-        /*      ENOPROTOOPT     42              / * Protocol not available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOPROTOOPT] = ENOPROTOOPT;</div><div class='del'>-        gf_errno_to_error_array[ENOPROTOOPT] = GF_ERROR_CODE_NOPROTOOPT;</div><div class='del'>-</div><div class='del'>-        /*      EPROTONOSUPPORT 43              / * Protocol not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTONOSUPPORT] = EPROTONOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EPROTONOSUPPORT] = GF_ERROR_CODE_PROTONOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      ESOCKTNOSUPPORT 44              / * Socket type not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SOCKTNOSUPPORT] = ESOCKTNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[ESOCKTNOSUPPORT] = GF_ERROR_CODE_SOCKTNOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      EOPNOTSUPP      45              / * Operation not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='del'>-        gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='del'>-</div><div class='del'>-        /*      EPFNOSUPPORT    46              / * Protocol family not supported */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PFNOSUPPORT] = EPFNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EPFNOSUPPORT] = GF_ERROR_CODE_PFNOSUPPORT;</div><div class='del'>-</div><div class='del'>-        /*      EAFNOSUPPORT    47              / * Address family not supported by protocol family */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AFNOSUPPORT] = EAFNOSUPPORT;</div><div class='del'>-        gf_errno_to_error_array[EAFNOSUPPORT] = GF_ERROR_CODE_AFNOSUPPORT;</div><div class='add'>+    /* Quite a bit of things changed in FreeBSD - current */</div><div class='add'>+</div><div class='add'>+    /*    EAGAIN          35              / * Try Again */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AGAIN] = EAGAIN;</div><div class='add'>+    gf_errno_to_error_array[EAGAIN] = GF_ERROR_CODE_AGAIN;</div><div class='add'>+</div><div class='add'>+    /*    EDEADLK         11              / * Resource deadlock would occur */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DEADLK] = EDEADLK;</div><div class='add'>+    gf_errno_to_error_array[EDEADLK] = GF_ERROR_CODE_DEADLK;</div><div class='add'>+</div><div class='add'>+    /*      EINPROGRESS     36              / * Operation now in progress */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_INPROGRESS] = EINPROGRESS;</div><div class='add'>+    gf_errno_to_error_array[EINPROGRESS] = GF_ERROR_CODE_INPROGRESS;</div><div class='add'>+</div><div class='add'>+    /*      EALREADY        37              / * Operation already in progress */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ALREADY] = EALREADY;</div><div class='add'>+    gf_errno_to_error_array[EALREADY] = GF_ERROR_CODE_ALREADY;</div><div class='add'>+</div><div class='add'>+    /*      ENOTSOCK        38              / * Socket operation on non-socket</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTSOCK] = ENOTSOCK;</div><div class='add'>+    gf_errno_to_error_array[ENOTSOCK] = GF_ERROR_CODE_NOTSOCK;</div><div class='add'>+</div><div class='add'>+    /*      EDESTADDRREQ    39              / * Destination address required */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DESTADDRREQ] = EDESTADDRREQ;</div><div class='add'>+    gf_errno_to_error_array[EDESTADDRREQ] = GF_ERROR_CODE_DESTADDRREQ;</div><div class='add'>+</div><div class='add'>+    /*      EMSGSIZE        40              / * Message too long */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_MSGSIZE] = EMSGSIZE;</div><div class='add'>+    gf_errno_to_error_array[EMSGSIZE] = GF_ERROR_CODE_MSGSIZE;</div><div class='add'>+</div><div class='add'>+    /*      EPROTOTYPE      41              / * Protocol wrong type for socket</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTOTYPE] = EPROTOTYPE;</div><div class='add'>+    gf_errno_to_error_array[EPROTOTYPE] = GF_ERROR_CODE_PROTOTYPE;</div><div class='add'>+</div><div class='add'>+    /*      ENOPROTOOPT     42              / * Protocol not available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOPROTOOPT] = ENOPROTOOPT;</div><div class='add'>+    gf_errno_to_error_array[ENOPROTOOPT] = GF_ERROR_CODE_NOPROTOOPT;</div><div class='add'>+</div><div class='add'>+    /*      EPROTONOSUPPORT 43              / * Protocol not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTONOSUPPORT] = EPROTONOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EPROTONOSUPPORT] = GF_ERROR_CODE_PROTONOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      ESOCKTNOSUPPORT 44              / * Socket type not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SOCKTNOSUPPORT] = ESOCKTNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[ESOCKTNOSUPPORT] = GF_ERROR_CODE_SOCKTNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EOPNOTSUPP      45              / * Operation not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OPNOTSUPP] = EOPNOTSUPP;</div><div class='add'>+    gf_errno_to_error_array[EOPNOTSUPP] = GF_ERROR_CODE_OPNOTSUPP;</div><div class='add'>+</div><div class='add'>+    /*      EPFNOSUPPORT    46              / * Protocol family not supported */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PFNOSUPPORT] = EPFNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EPFNOSUPPORT] = GF_ERROR_CODE_PFNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EAFNOSUPPORT    47              / * Address family not supported by</div><div class='add'>+     * protocol family */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AFNOSUPPORT] = EAFNOSUPPORT;</div><div class='add'>+    gf_errno_to_error_array[EAFNOSUPPORT] = GF_ERROR_CODE_AFNOSUPPORT;</div><div class='add'>+</div><div class='add'>+    /*      EADDRINUSE      48              / * Address already in use */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADDRINUSE] = EADDRINUSE;</div><div class='add'>+    gf_errno_to_error_array[EADDRINUSE] = GF_ERROR_CODE_ADDRINUSE;</div><div class='add'>+</div><div class='add'>+    /*      EADDRNOTAVAIL   49              / * Can't assign requested address</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ADDRNOTAVAIL] = EADDRNOTAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EADDRNOTAVAIL] = GF_ERROR_CODE_ADDRNOTAVAIL;</div><div class='add'>+</div><div class='add'>+    /*      ENETDOWN        50              / * Network is down */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETDOWN] = ENETDOWN;</div><div class='add'>+    gf_errno_to_error_array[ENETDOWN] = GF_ERROR_CODE_NETDOWN;</div><div class='add'>+</div><div class='add'>+    /*      ENETUNREACH     51              / * Network is unreachable */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETUNREACH] = ENETUNREACH;</div><div class='add'>+    gf_errno_to_error_array[ENETUNREACH] = GF_ERROR_CODE_NETUNREACH;</div><div class='add'>+</div><div class='add'>+    /*      ENETRESET       52              / * Network dropped connection on</div><div class='add'>+     * reset */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NETRESET] = ENETRESET;</div><div class='add'>+    gf_errno_to_error_array[ENETRESET] = GF_ERROR_CODE_NETRESET;</div><div class='add'>+</div><div class='add'>+    /*      ECONNABORTED    53              / * Software caused connection abort</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNABORTED] = ECONNABORTED;</div><div class='add'>+    gf_errno_to_error_array[ECONNABORTED] = GF_ERROR_CODE_CONNABORTED;</div><div class='add'>+</div><div class='add'>+    /*      ECONNRESET      54              / * Connection reset by peer */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNRESET] = ECONNRESET;</div><div class='add'>+    gf_errno_to_error_array[ECONNRESET] = GF_ERROR_CODE_CONNRESET;</div><div class='add'>+</div><div class='add'>+    /*      ENOBUFS         55              / * No buffer space available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOBUFS] = ENOBUFS;</div><div class='add'>+    gf_errno_to_error_array[ENOBUFS] = GF_ERROR_CODE_NOBUFS;</div><div class='add'>+</div><div class='add'>+    /*      EISCONN         56              / * Socket is already connected */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ISCONN] = EISCONN;</div><div class='add'>+    gf_errno_to_error_array[EISCONN] = GF_ERROR_CODE_ISCONN;</div><div class='add'>+</div><div class='add'>+    /*      ENOTCONN        57              / * Socket is not connected */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTCONN] = ENOTCONN;</div><div class='add'>+    gf_errno_to_error_array[ENOTCONN] = GF_ERROR_CODE_NOTCONN;</div><div class='add'>+</div><div class='add'>+    /*      ESHUTDOWN       58              / * Can't send after socket shutdown</div><div class='add'>+     */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_SHUTDOWN] = ESHUTDOWN;</div><div class='add'>+    gf_errno_to_error_array[ESHUTDOWN] = GF_ERROR_CODE_SHUTDOWN;</div><div class='add'>+</div><div class='add'>+    /*      ETOOMANYREFS    59              / * Too many references: can't</div><div class='add'>+     * splice */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TOOMANYREFS] = ETOOMANYREFS;</div><div class='add'>+    gf_errno_to_error_array[ETOOMANYREFS] = GF_ERROR_CODE_TOOMANYREFS;</div><div class='add'>+</div><div class='add'>+    /*      ETIMEDOUT       60              / * Operation timed out */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_TIMEDOUT] = ETIMEDOUT;</div><div class='add'>+    gf_errno_to_error_array[ETIMEDOUT] = GF_ERROR_CODE_TIMEDOUT;</div><div class='add'>+</div><div class='add'>+    /*      ECONNREFUSED    61              / * Connection refused */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CONNREFUSED] = ECONNREFUSED;</div><div class='add'>+    gf_errno_to_error_array[ECONNREFUSED] = GF_ERROR_CODE_CONNREFUSED;</div><div class='add'>+</div><div class='add'>+    /*      ELOOP           62              / * Too many levels of symbolic</div><div class='add'>+     * links */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_LOOP] = ELOOP;</div><div class='add'>+    gf_errno_to_error_array[ELOOP] = GF_ERROR_CODE_LOOP;</div><div class='add'>+</div><div class='add'>+    /*      ENAMETOOLONG    63              / * File name too long */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NAMETOOLONG] = ENAMETOOLONG;</div><div class='add'>+    gf_errno_to_error_array[ENAMETOOLONG] = GF_ERROR_CODE_NAMETOOLONG;</div><div class='add'>+</div><div class='add'>+    /*      EHOSTDOWN       64              / * Host is down */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_HOSTDOWN] = EHOSTDOWN;</div><div class='add'>+    gf_errno_to_error_array[EHOSTDOWN] = GF_ERROR_CODE_HOSTDOWN;</div><div class='add'>+</div><div class='add'>+    /*      EHOSTUNREACH    65              / * No route to host */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_HOSTUNREACH] = EHOSTUNREACH;</div><div class='add'>+    gf_errno_to_error_array[EHOSTUNREACH] = GF_ERROR_CODE_HOSTUNREACH;</div><div class='add'>+</div><div class='add'>+    /*      ENOTEMPTY       66              / * Directory not empty */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOTEMPTY] = ENOTEMPTY;</div><div class='add'>+    gf_errno_to_error_array[ENOTEMPTY] = GF_ERROR_CODE_NOTEMPTY;</div><div class='add'>+</div><div class='add'>+    /*      EPROCLIM        67              / * Too many processes */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROCLIM] = EPROCLIM;</div><div class='add'>+    gf_errno_to_error_array[EPROCLIM] = GF_ERROR_CODE_PROCLIM;</div><div class='add'>+</div><div class='add'>+    /*      EUSERS          68              / * Too many users */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_USERS] = EUSERS;</div><div class='add'>+    gf_errno_to_error_array[EUSERS] = GF_ERROR_CODE_USERS;</div><div class='add'>+</div><div class='add'>+    /*      EDQUOT          69              / * Disc quota exceeded */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DQUOT] = EDQUOT;</div><div class='add'>+    gf_errno_to_error_array[EDQUOT] = GF_ERROR_CODE_DQUOT;</div><div class='add'>+</div><div class='add'>+    /*      ESTALE          70              / * Stale NFS file handle */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_STALE] = ESTALE;</div><div class='add'>+    gf_errno_to_error_array[ESTALE] = GF_ERROR_CODE_STALE;</div><div class='add'>+</div><div class='add'>+    /*      EREMOTE         71              / * Too many levels of remote in</div><div class='add'>+     * path */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_REMOTE] = EREMOTE;</div><div class='add'>+    gf_errno_to_error_array[EREMOTE] = GF_ERROR_CODE_REMOTE;</div><div class='add'>+</div><div class='add'>+    /*      EBADRPC         72              / * RPC struct is bad */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADRPC] = EBADRPC;</div><div class='add'>+    gf_errno_to_error_array[EBADRPC] = GF_ERROR_CODE_BADRPC;</div><div class='add'>+</div><div class='add'>+    /*      ERPCMISMATCH    73              / * RPC version wrong */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_RPCMISMATCH] = ERPCMISMATCH;</div><div class='add'>+    gf_errno_to_error_array[ERPCMISMATCH] = GF_ERROR_CODE_RPCMISMATCH;</div><div class='add'>+</div><div class='add'>+    /*      EPROGUNAVAIL    74              / * RPC prog. not avail */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROGUNAVAIL] = EPROGUNAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EPROGUNAVAIL] = GF_ERROR_CODE_PROGUNAVAIL;</div><div class='add'>+</div><div class='add'>+    /*      EPROGMISMATCH   75              / * Program version wrong */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROGMISMATCH] = EPROGMISMATCH;</div><div class='add'>+    gf_errno_to_error_array[EPROGMISMATCH] = GF_ERROR_CODE_PROGMISMATCH;</div><div class='add'>+</div><div class='add'>+    /*      EPROCUNAVAIL    76              / * Bad procedure for program */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROCUNAVAIL] = EPROCUNAVAIL;</div><div class='add'>+    gf_errno_to_error_array[EPROCUNAVAIL] = GF_ERROR_CODE_PROCUNAVAIL;</div><div class='add'>+</div><div class='add'>+    /*      ENOLCK          77              / * No locks available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOLCK] = ENOLCK;</div><div class='add'>+    gf_errno_to_error_array[ENOLCK] = GF_ERROR_CODE_NOLCK;</div><div class='ctx'> </div><div class='del'>-        /*      EADDRINUSE      48              / * Address already in use */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADDRINUSE] = EADDRINUSE;</div><div class='del'>-        gf_errno_to_error_array[EADDRINUSE] = GF_ERROR_CODE_ADDRINUSE;</div><div class='add'>+    /*      ENOSYS          78              / * Function not implemented */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOSYS] = ENOSYS;</div><div class='add'>+    gf_errno_to_error_array[ENOSYS] = GF_ERROR_CODE_NOSYS;</div><div class='ctx'> </div><div class='del'>-        /*      EADDRNOTAVAIL   49              / * Can't assign requested address */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ADDRNOTAVAIL] = EADDRNOTAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EADDRNOTAVAIL] = GF_ERROR_CODE_ADDRNOTAVAIL;</div><div class='add'>+    /*      EFTYPE          79              / * Inappropriate file type or</div><div class='add'>+     * format */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_FTYPE] = EFTYPE;</div><div class='add'>+    gf_errno_to_error_array[EFTYPE] = GF_ERROR_CODE_FTYPE;</div><div class='add'>+</div><div class='add'>+    /*      EAUTH           80              / * Authentication error */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_AUTH] = EAUTH;</div><div class='add'>+    gf_errno_to_error_array[EAUTH] = GF_ERROR_CODE_AUTH;</div><div class='add'>+</div><div class='add'>+    /*      ENEEDAUTH       81              / * Need authenticator */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NEEDAUTH] = ENEEDAUTH;</div><div class='add'>+    gf_errno_to_error_array[ENEEDAUTH] = GF_ERROR_CODE_NEEDAUTH;</div><div class='add'>+</div><div class='add'>+    /*      EIDRM           82              / * Identifier removed */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_IDRM] = EIDRM;</div><div class='add'>+    gf_errno_to_error_array[EIDRM] = GF_ERROR_CODE_IDRM;</div><div class='ctx'> </div><div class='del'>-        /*      ENETDOWN        50              / * Network is down */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETDOWN] = ENETDOWN;</div><div class='del'>-        gf_errno_to_error_array[ENETDOWN] = GF_ERROR_CODE_NETDOWN;</div><div class='add'>+    /*      ENOMSG          83              / * No message of desired type */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOMSG] = ENOMSG;</div><div class='add'>+    gf_errno_to_error_array[ENOMSG] = GF_ERROR_CODE_NOMSG;</div><div class='ctx'> </div><div class='del'>-        /*      ENETUNREACH     51              / * Network is unreachable */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETUNREACH] = ENETUNREACH;</div><div class='del'>-        gf_errno_to_error_array[ENETUNREACH] = GF_ERROR_CODE_NETUNREACH;</div><div class='add'>+    /*      EOVERFLOW       84              / * Value too large to be stored in</div><div class='add'>+     * data type */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_OVERFLOW] = EOVERFLOW;</div><div class='add'>+    gf_errno_to_error_array[EOVERFLOW] = GF_ERROR_CODE_OVERFLOW;</div><div class='ctx'> </div><div class='del'>-        /*      ENETRESET       52              / * Network dropped connection on reset */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NETRESET] = ENETRESET;</div><div class='del'>-        gf_errno_to_error_array[ENETRESET] = GF_ERROR_CODE_NETRESET;</div><div class='add'>+    /*      ECANCELED       85              / * Operation canceled */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_CANCELED] = ECANCELED;</div><div class='add'>+    gf_errno_to_error_array[ECANCELED] = GF_ERROR_CODE_CANCELED;</div><div class='ctx'> </div><div class='del'>-        /*      ECONNABORTED    53              / * Software caused connection abort */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNABORTED] = ECONNABORTED;</div><div class='del'>-        gf_errno_to_error_array[ECONNABORTED] = GF_ERROR_CODE_CONNABORTED;</div><div class='add'>+    /*      EILSEQ          86              / * Illegal byte sequence */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_ILSEQ] = EILSEQ;</div><div class='add'>+    gf_errno_to_error_array[EILSEQ] = GF_ERROR_CODE_ILSEQ;</div><div class='ctx'> </div><div class='del'>-        /*      ECONNRESET      54              / * Connection reset by peer */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNRESET] = ECONNRESET;</div><div class='del'>-        gf_errno_to_error_array[ECONNRESET] = GF_ERROR_CODE_CONNRESET;</div><div class='del'>-</div><div class='del'>-        /*      ENOBUFS         55              / * No buffer space available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOBUFS] = ENOBUFS;</div><div class='del'>-        gf_errno_to_error_array[ENOBUFS] = GF_ERROR_CODE_NOBUFS;</div><div class='del'>-</div><div class='del'>-        /*      EISCONN         56              / * Socket is already connected */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ISCONN] = EISCONN;</div><div class='del'>-        gf_errno_to_error_array[EISCONN] = GF_ERROR_CODE_ISCONN;</div><div class='del'>-</div><div class='del'>-        /*      ENOTCONN        57              / * Socket is not connected */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTCONN] = ENOTCONN;</div><div class='del'>-        gf_errno_to_error_array[ENOTCONN] = GF_ERROR_CODE_NOTCONN;</div><div class='del'>-</div><div class='del'>-        /*      ESHUTDOWN       58              / * Can't send after socket shutdown */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_SHUTDOWN] = ESHUTDOWN;</div><div class='del'>-        gf_errno_to_error_array[ESHUTDOWN] = GF_ERROR_CODE_SHUTDOWN;</div><div class='del'>-</div><div class='del'>-        /*      ETOOMANYREFS    59              / * Too many references: can't splice */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TOOMANYREFS] = ETOOMANYREFS;</div><div class='del'>-        gf_errno_to_error_array[ETOOMANYREFS] = GF_ERROR_CODE_TOOMANYREFS;</div><div class='del'>-</div><div class='del'>-        /*      ETIMEDOUT       60              / * Operation timed out */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_TIMEDOUT] = ETIMEDOUT;</div><div class='del'>-        gf_errno_to_error_array[ETIMEDOUT] = GF_ERROR_CODE_TIMEDOUT;</div><div class='del'>-</div><div class='del'>-        /*      ECONNREFUSED    61              / * Connection refused */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CONNREFUSED] = ECONNREFUSED;</div><div class='del'>-        gf_errno_to_error_array[ECONNREFUSED] = GF_ERROR_CODE_CONNREFUSED;</div><div class='del'>-</div><div class='del'>-        /*      ELOOP           62              / * Too many levels of symbolic links */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_LOOP] = ELOOP;</div><div class='del'>-        gf_errno_to_error_array[ELOOP] = GF_ERROR_CODE_LOOP;</div><div class='del'>-</div><div class='del'>-        /*      ENAMETOOLONG    63              / * File name too long */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NAMETOOLONG] = ENAMETOOLONG;</div><div class='del'>-        gf_errno_to_error_array[ENAMETOOLONG] = GF_ERROR_CODE_NAMETOOLONG;</div><div class='del'>-</div><div class='del'>-        /*      EHOSTDOWN       64              / * Host is down */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_HOSTDOWN] = EHOSTDOWN;</div><div class='del'>-        gf_errno_to_error_array[EHOSTDOWN] = GF_ERROR_CODE_HOSTDOWN;</div><div class='del'>-</div><div class='del'>-        /*      EHOSTUNREACH    65              / * No route to host */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_HOSTUNREACH] = EHOSTUNREACH;</div><div class='del'>-        gf_errno_to_error_array[EHOSTUNREACH] = GF_ERROR_CODE_HOSTUNREACH;</div><div class='del'>-</div><div class='del'>-        /*      ENOTEMPTY       66              / * Directory not empty */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOTEMPTY] = ENOTEMPTY;</div><div class='del'>-        gf_errno_to_error_array[ENOTEMPTY] = GF_ERROR_CODE_NOTEMPTY;</div><div class='del'>-</div><div class='del'>-        /*      EPROCLIM        67              / * Too many processes */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROCLIM] = EPROCLIM;</div><div class='del'>-        gf_errno_to_error_array[EPROCLIM] = GF_ERROR_CODE_PROCLIM;</div><div class='del'>-</div><div class='del'>-        /*      EUSERS          68              / * Too many users */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_USERS] = EUSERS;</div><div class='del'>-        gf_errno_to_error_array[EUSERS] = GF_ERROR_CODE_USERS;</div><div class='del'>-</div><div class='del'>-        /*      EDQUOT          69              / * Disc quota exceeded */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DQUOT] = EDQUOT;</div><div class='del'>-        gf_errno_to_error_array[EDQUOT] = GF_ERROR_CODE_DQUOT;</div><div class='del'>-</div><div class='del'>-        /*      ESTALE          70              / * Stale NFS file handle */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_STALE] = ESTALE;</div><div class='del'>-        gf_errno_to_error_array[ESTALE] = GF_ERROR_CODE_STALE;</div><div class='del'>-</div><div class='del'>-        /*      EREMOTE         71              / * Too many levels of remote in path */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_REMOTE] = EREMOTE;</div><div class='del'>-        gf_errno_to_error_array[EREMOTE] = GF_ERROR_CODE_REMOTE;</div><div class='del'>-</div><div class='del'>-        /*      EBADRPC         72              / * RPC struct is bad */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADRPC] = EBADRPC;</div><div class='del'>-        gf_errno_to_error_array[EBADRPC] = GF_ERROR_CODE_BADRPC;</div><div class='del'>-</div><div class='del'>-        /*      ERPCMISMATCH    73              / * RPC version wrong */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_RPCMISMATCH] = ERPCMISMATCH;</div><div class='del'>-        gf_errno_to_error_array[ERPCMISMATCH] = GF_ERROR_CODE_RPCMISMATCH;</div><div class='del'>-</div><div class='del'>-        /*      EPROGUNAVAIL    74              / * RPC prog. not avail */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROGUNAVAIL] = EPROGUNAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EPROGUNAVAIL] = GF_ERROR_CODE_PROGUNAVAIL;</div><div class='del'>-</div><div class='del'>-        /*      EPROGMISMATCH   75              / * Program version wrong */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROGMISMATCH] = EPROGMISMATCH;</div><div class='del'>-        gf_errno_to_error_array[EPROGMISMATCH] = GF_ERROR_CODE_PROGMISMATCH;</div><div class='del'>-</div><div class='del'>-        /*      EPROCUNAVAIL    76              / * Bad procedure for program */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROCUNAVAIL] = EPROCUNAVAIL;</div><div class='del'>-        gf_errno_to_error_array[EPROCUNAVAIL] = GF_ERROR_CODE_PROCUNAVAIL;</div><div class='del'>-</div><div class='del'>-        /*      ENOLCK          77              / * No locks available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOLCK] = ENOLCK;</div><div class='del'>-        gf_errno_to_error_array[ENOLCK] = GF_ERROR_CODE_NOLCK;</div><div class='del'>-</div><div class='del'>-        /*      ENOSYS          78              / * Function not implemented */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOSYS] = ENOSYS;</div><div class='del'>-        gf_errno_to_error_array[ENOSYS] = GF_ERROR_CODE_NOSYS;</div><div class='del'>-</div><div class='del'>-        /*      EFTYPE          79              / * Inappropriate file type or format */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_FTYPE] = EFTYPE;</div><div class='del'>-        gf_errno_to_error_array[EFTYPE] = GF_ERROR_CODE_FTYPE;</div><div class='del'>-</div><div class='del'>-        /*      EAUTH           80              / * Authentication error */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_AUTH] = EAUTH;</div><div class='del'>-        gf_errno_to_error_array[EAUTH] = GF_ERROR_CODE_AUTH;</div><div class='del'>-</div><div class='del'>-        /*      ENEEDAUTH       81              / * Need authenticator */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NEEDAUTH] = ENEEDAUTH;</div><div class='del'>-        gf_errno_to_error_array[ENEEDAUTH] = GF_ERROR_CODE_NEEDAUTH;</div><div class='del'>-</div><div class='del'>-        /*      EIDRM           82              / * Identifier removed */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_IDRM] = EIDRM;</div><div class='del'>-        gf_errno_to_error_array[EIDRM] = GF_ERROR_CODE_IDRM;</div><div class='del'>-</div><div class='del'>-        /*      ENOMSG          83              / * No message of desired type */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOMSG] = ENOMSG;</div><div class='del'>-        gf_errno_to_error_array[ENOMSG] = GF_ERROR_CODE_NOMSG;</div><div class='del'>-</div><div class='del'>-        /*      EOVERFLOW       84              / * Value too large to be stored in data type */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_OVERFLOW] = EOVERFLOW;</div><div class='del'>-        gf_errno_to_error_array[EOVERFLOW] = GF_ERROR_CODE_OVERFLOW;</div><div class='del'>-</div><div class='del'>-        /*      ECANCELED       85              / * Operation canceled */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_CANCELED] = ECANCELED;</div><div class='del'>-        gf_errno_to_error_array[ECANCELED] = GF_ERROR_CODE_CANCELED;</div><div class='del'>-</div><div class='del'>-        /*      EILSEQ          86              / * Illegal byte sequence */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_ILSEQ] = EILSEQ;</div><div class='del'>-        gf_errno_to_error_array[EILSEQ] = GF_ERROR_CODE_ILSEQ;</div><div class='del'>-</div><div class='del'>-        /*      ENOATTR         87              / * Attribute not found */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOATTR] = ENOATTR;</div><div class='del'>-        gf_errno_to_error_array[ENOATTR] = GF_ERROR_CODE_NOATTR;</div><div class='add'>+    /*      ENOATTR         87              / * Attribute not found */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOATTR] = ENOATTR;</div><div class='add'>+    gf_errno_to_error_array[ENOATTR] = GF_ERROR_CODE_NOATTR;</div><div class='ctx'> </div><div class='ctx'> #ifdef EDOOFUS</div><div class='del'>-        /*    EDOOFUS           88              / * Programming error */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_DOOFUS] = EDOOFUS;</div><div class='del'>-        gf_errno_to_error_array[EDOOFUS] = GF_ERROR_CODE_DOOFUS;</div><div class='add'>+    /*    EDOOFUS           88              / * Programming error */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_DOOFUS] = EDOOFUS;</div><div class='add'>+    gf_errno_to_error_array[EDOOFUS] = GF_ERROR_CODE_DOOFUS;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /*      EBADMSG         89              / * Bad message */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_BADMSG] = EBADMSG;</div><div class='del'>-        gf_errno_to_error_array[EBADMSG] = GF_ERROR_CODE_BADMSG;</div><div class='add'>+    /*      EBADMSG         89              / * Bad message */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_BADMSG] = EBADMSG;</div><div class='add'>+    gf_errno_to_error_array[EBADMSG] = GF_ERROR_CODE_BADMSG;</div><div class='ctx'> </div><div class='ctx'> #ifdef __NetBSD__</div><div class='del'>-        /*      ENODATA         89              / * No message available */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NODATA] = ENODATA;</div><div class='del'>-        gf_errno_to_error_array[ENODATA] = GF_ERROR_CODE_NODATA;</div><div class='add'>+    /*      ENODATA         89              / * No message available */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NODATA] = ENODATA;</div><div class='add'>+    gf_errno_to_error_array[ENODATA] = GF_ERROR_CODE_NODATA;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /*      EMULTIHOP       90              / * Multihop attempted */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_MULTIHOP] = EMULTIHOP;</div><div class='del'>-        gf_errno_to_error_array[EMULTIHOP] = GF_ERROR_CODE_MULTIHOP;</div><div class='del'>-</div><div class='del'>-        /*      ENOLINK         91              / * Link has been severed */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_NOLINK] = ENOLINK;</div><div class='del'>-        gf_errno_to_error_array[ENOLINK] = GF_ERROR_CODE_NOLINK;</div><div class='add'>+    /*      EMULTIHOP       90              / * Multihop attempted */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_MULTIHOP] = EMULTIHOP;</div><div class='add'>+    gf_errno_to_error_array[EMULTIHOP] = GF_ERROR_CODE_MULTIHOP;</div><div class='ctx'> </div><div class='del'>-        /*      EPROTO          92              / * Protocol error */</div><div class='del'>-        gf_error_to_errno_array[GF_ERROR_CODE_PROTO] = EPROTO;</div><div class='del'>-        gf_errno_to_error_array[EPROTO] = GF_ERROR_CODE_PROTO;</div><div class='add'>+    /*      ENOLINK         91              / * Link has been severed */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_NOLINK] = ENOLINK;</div><div class='add'>+    gf_errno_to_error_array[ENOLINK] = GF_ERROR_CODE_NOLINK;</div><div class='ctx'> </div><div class='add'>+    /*      EPROTO          92              / * Protocol error */</div><div class='add'>+    gf_error_to_errno_array[GF_ERROR_CODE_PROTO] = EPROTO;</div><div class='add'>+    gf_errno_to_error_array[EPROTO] = GF_ERROR_CODE_PROTO;</div><div class='ctx'> </div><div class='del'>-        return ;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> #endif /* GF_BSD_HOST_OS */</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='ctx'> static void</div><div class='del'>-init_compat_errno_arrays ()</div><div class='add'>+init_compat_errno_arrays()</div><div class='ctx'> {</div><div class='del'>-        /* Things are fine. Everything should work seemlessly on GNU/Linux machines */</div><div class='del'>-        return ;</div><div class='add'>+    /* Things are fine. Everything should work seemlessly on GNU/Linux machines</div><div class='add'>+     */</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> #endif /* GF_LINUX_HOST_OS */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-init_errno_arrays ()</div><div class='add'>+init_errno_arrays()</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='del'>-        for (i=0; i &lt; GF_ERROR_CODE_UNKNOWN; i++) {</div><div class='del'>-                gf_errno_to_error_array[i] = i;</div><div class='del'>-                gf_error_to_errno_array[i] = i;</div><div class='del'>-        }</div><div class='del'>-        /* Now change the order if it needs to be. */</div><div class='del'>-        init_compat_errno_arrays();</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    int i;</div><div class='add'>+    for (i = 0; i &lt; GF_ERROR_CODE_UNKNOWN; i++) {</div><div class='add'>+        gf_errno_to_error_array[i] = i;</div><div class='add'>+        gf_error_to_errno_array[i] = i;</div><div class='add'>+    }</div><div class='add'>+    /* Now change the order if it needs to be. */</div><div class='add'>+    init_compat_errno_arrays();</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_errno_to_error (int32_t op_errno)</div><div class='add'>+gf_errno_to_error(int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        if (!gf_compat_errno_init_done) {</div><div class='del'>-                init_errno_arrays ();</div><div class='del'>-                gf_compat_errno_init_done = 1;</div><div class='del'>-        }</div><div class='add'>+    if (!gf_compat_errno_init_done) {</div><div class='add'>+        init_errno_arrays();</div><div class='add'>+        gf_compat_errno_init_done = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((op_errno &gt; GF_ERROR_CODE_SUCCESS) &amp;&amp; (op_errno &lt; GF_ERROR_CODE_UNKNOWN))</div><div class='del'>-                return gf_errno_to_error_array[op_errno];</div><div class='add'>+    if ((op_errno &gt; GF_ERROR_CODE_SUCCESS) &amp;&amp;</div><div class='add'>+        (op_errno &lt; GF_ERROR_CODE_UNKNOWN))</div><div class='add'>+        return gf_errno_to_error_array[op_errno];</div><div class='ctx'> </div><div class='del'>-        return op_errno;</div><div class='add'>+    return op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_error_to_errno (int32_t error)</div><div class='add'>+gf_error_to_errno(int32_t error)</div><div class='ctx'> {</div><div class='del'>-        if (!gf_compat_errno_init_done) {</div><div class='del'>-                init_errno_arrays ();</div><div class='del'>-                gf_compat_errno_init_done = 1;</div><div class='del'>-        }</div><div class='add'>+    if (!gf_compat_errno_init_done) {</div><div class='add'>+        init_errno_arrays();</div><div class='add'>+        gf_compat_errno_init_done = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((error &gt; GF_ERROR_CODE_SUCCESS) &amp;&amp; (error &lt; GF_ERROR_CODE_UNKNOWN))</div><div class='del'>-                return gf_error_to_errno_array[error];</div><div class='add'>+    if ((error &gt; GF_ERROR_CODE_SUCCESS) &amp;&amp; (error &lt; GF_ERROR_CODE_UNKNOWN))</div><div class='add'>+        return gf_error_to_errno_array[error];</div><div class='ctx'> </div><div class='del'>-        return error;</div><div class='add'>+    return error;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/compat.c b/libglusterfs/src/compat.c<br/>index a27fe20ce64..137bdf45cab 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/compat.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/compat.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/compat.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/compat.c</a></div><div class='hunk'>@@ -30,507 +30,521 @@</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='ctx'> int</div><div class='del'>-solaris_fsetxattr(int fd, const char* key, const char *value, size_t size,</div><div class='add'>+solaris_fsetxattr(int fd, const char *key, const char *value, size_t size,</div><div class='ctx'>                   int flags)</div><div class='ctx'> {</div><div class='del'>-        int attrfd = -1;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        attrfd = openat (fd, key, flags|O_CREAT|O_WRONLY|O_XATTR, 0777);</div><div class='del'>-        if (attrfd &gt;= 0) {</div><div class='del'>-                ftruncate (attrfd, 0);</div><div class='del'>-                ret = write (attrfd, value, size);</div><div class='del'>-                close (attrfd);</div><div class='del'>-        } else {</div><div class='del'>-                if (errno != ENOENT)</div><div class='del'>-                        gf_msg ("libglusterfs", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_SET_ATTRIBUTE_FAILED, "Couldn't set "</div><div class='del'>-                                "extended attribute for %d", fd);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int attrfd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    attrfd = openat(fd, key, flags | O_CREAT | O_WRONLY | O_XATTR, 0777);</div><div class='add'>+    if (attrfd &gt;= 0) {</div><div class='add'>+        ftruncate(attrfd, 0);</div><div class='add'>+        ret = write(attrfd, value, size);</div><div class='add'>+        close(attrfd);</div><div class='add'>+    } else {</div><div class='add'>+        if (errno != ENOENT)</div><div class='add'>+            gf_msg("libglusterfs", GF_LOG_ERROR, errno,</div><div class='add'>+                   LG_MSG_SET_ATTRIBUTE_FAILED,</div><div class='add'>+                   "Couldn't set "</div><div class='add'>+                   "extended attribute for %d",</div><div class='add'>+                   fd);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-solaris_fgetxattr(int fd, const char* key, char *value, size_t size)</div><div class='add'>+solaris_fgetxattr(int fd, const char *key, char *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-        int attrfd = -1;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        attrfd = openat (fd, key, O_RDONLY|O_XATTR);</div><div class='del'>-        if (attrfd &gt;= 0) {</div><div class='del'>-                if (size == 0) {</div><div class='del'>-                        struct stat buf;</div><div class='del'>-                        fstat (attrfd, &amp;buf);</div><div class='del'>-                        ret = buf.st_size;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = read (attrfd, value, size);</div><div class='del'>-                }</div><div class='del'>-                close (attrfd);</div><div class='add'>+    int attrfd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    attrfd = openat(fd, key, O_RDONLY | O_XATTR);</div><div class='add'>+    if (attrfd &gt;= 0) {</div><div class='add'>+        if (size == 0) {</div><div class='add'>+            struct stat buf;</div><div class='add'>+            fstat(attrfd, &amp;buf);</div><div class='add'>+            ret = buf.st_size;</div><div class='ctx'>         } else {</div><div class='del'>-                if (errno != ENOENT)</div><div class='del'>-                        gf_msg ("libglusterfs", GF_LOG_INFO, errno,</div><div class='del'>-                                LG_MSG_READ_ATTRIBUTE_FAILED, "Couldn't read "</div><div class='del'>-                                "extended attribute for the file %d", fd);</div><div class='del'>-                if (errno == ENOENT)</div><div class='del'>-                        errno = ENODATA;</div><div class='del'>-                return -1;</div><div class='add'>+            ret = read(attrfd, value, size);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+        close(attrfd);</div><div class='add'>+    } else {</div><div class='add'>+        if (errno != ENOENT)</div><div class='add'>+            gf_msg("libglusterfs", GF_LOG_INFO, errno,</div><div class='add'>+                   LG_MSG_READ_ATTRIBUTE_FAILED,</div><div class='add'>+                   "Couldn't read "</div><div class='add'>+                   "extended attribute for the file %d",</div><div class='add'>+                   fd);</div><div class='add'>+        if (errno == ENOENT)</div><div class='add'>+            errno = ENODATA;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Solaris does not support xattr for symlinks and dev files. Since gfid and</div><div class='ctx'>    other trusted attributes are stored as xattrs, we need to provide support for</div><div class='del'>-   them. A mapped regular file is stored in the /.glusterfs_xattr_inode of the export dir.</div><div class='del'>-   All xattr ops related to the special files are redirected to this map file.</div><div class='add'>+   them. A mapped regular file is stored in the /.glusterfs_xattr_inode of the</div><div class='add'>+   export dir. All xattr ops related to the special files are redirected to this</div><div class='add'>+   map file.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-make_export_path (const char *real_path, char **path)</div><div class='add'>+make_export_path(const char *real_path, char **path)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char   *tmp = NULL;</div><div class='del'>-        char   *export_path = NULL;</div><div class='del'>-        char   *dup = NULL;</div><div class='del'>-        char   *ptr = NULL;</div><div class='del'>-        char   *freeptr = NULL;</div><div class='del'>-        uuid_t  gfid = {0, };</div><div class='del'>-</div><div class='del'>-        export_path = GF_CALLOC (1, sizeof (char) * PATH_MAX, 0);</div><div class='del'>-        if (!export_path)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *export_path = NULL;</div><div class='add'>+    char *dup = NULL;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *freeptr = NULL;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    export_path = GF_CALLOC(1, sizeof(char) * PATH_MAX, 0);</div><div class='add'>+    if (!export_path)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dup = gf_strdup (real_path);</div><div class='del'>-        if (!dup)</div><div class='del'>-                goto out;</div><div class='add'>+    dup = gf_strdup(real_path);</div><div class='add'>+    if (!dup)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        freeptr = dup;</div><div class='del'>-        ret = solaris_getxattr ("/", GFID_XATTR_KEY, gfid, 16);</div><div class='del'>-        /* Return value of getxattr */</div><div class='add'>+    freeptr = dup;</div><div class='add'>+    ret = solaris_getxattr("/", GFID_XATTR_KEY, gfid, 16);</div><div class='add'>+    /* Return value of getxattr */</div><div class='add'>+    if (ret == 16) {</div><div class='add'>+        if (__is_root_gfid(gfid)) {</div><div class='add'>+            strcat(export_path, "/");</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        ptr = strtok_r(dup, "/", &amp;tmp);</div><div class='add'>+        if (!ptr)</div><div class='add'>+            break;</div><div class='add'>+        strcat(export_path, dup);</div><div class='add'>+        ret = solaris_getxattr(export_path, GFID_XATTR_KEY, gfid, 16);</div><div class='ctx'>         if (ret == 16) {</div><div class='del'>-                if (__is_root_gfid (gfid)){</div><div class='del'>-                        strcat (export_path, "/");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='add'>+            if (__is_root_gfid(gfid)) {</div><div class='add'>+                ret = 0;</div><div class='add'>+                goto done;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        strcat(export_path, "/");</div><div class='add'>+        dup = tmp;</div><div class='add'>+    } while (ptr);</div><div class='ctx'> </div><div class='del'>-        do {</div><div class='del'>-                ptr = strtok_r (dup, "/", &amp;tmp);</div><div class='del'>-                if (!ptr)</div><div class='del'>-                        break;</div><div class='del'>-                strcat (export_path, dup);</div><div class='del'>-                ret = solaris_getxattr (export_path, GFID_XATTR_KEY, gfid, 16);</div><div class='del'>-                if (ret == 16) {</div><div class='del'>-                        if (__is_root_gfid (gfid)) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto done;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                strcat (export_path, "/");</div><div class='del'>-                dup = tmp;</div><div class='del'>-        } while (ptr);</div><div class='del'>-</div><div class='del'>-        goto out;</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (!ret) {</div><div class='del'>-                *path = export_path;</div><div class='del'>-        }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        *path = export_path;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (freeptr);</div><div class='del'>-        if (ret &amp;&amp; export_path)</div><div class='del'>-                GF_FREE (export_path);</div><div class='add'>+    GF_FREE(freeptr);</div><div class='add'>+    if (ret &amp;&amp; export_path)</div><div class='add'>+        GF_FREE(export_path);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-solaris_xattr_resolve_path (const char *real_path, char **path)</div><div class='add'>+solaris_xattr_resolve_path(const char *real_path, char **path)</div><div class='ctx'> {</div><div class='del'>-        int                    ret  = -1;</div><div class='del'>-        char                   *export_path = NULL;</div><div class='del'>-        char                   xattr_path[PATH_MAX] = {0, };</div><div class='del'>-        struct stat            lstatbuf = {0, };</div><div class='del'>-        struct iatt            stbuf = {0, };</div><div class='del'>-        struct stat            statbuf = {0, };</div><div class='del'>-</div><div class='del'>-        ret = lstat (real_path, &amp;lstatbuf);</div><div class='del'>-        if (ret != 0 )</div><div class='del'>-                return ret;</div><div class='del'>-        iatt_from_stat (&amp;stbuf, &amp;lstatbuf);</div><div class='del'>-        if (IA_ISREG(stbuf.ia_type) || IA_ISDIR(stbuf.ia_type))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        ret = make_export_path (real_path, &amp;export_path);</div><div class='del'>-        if (!ret &amp;&amp; export_path) {</div><div class='del'>-                strcat (export_path, "/"GF_SOLARIS_XATTR_DIR);</div><div class='del'>-                if (lstat (export_path, &amp;statbuf)) {</div><div class='del'>-                        ret = mkdir (export_path, 0777);</div><div class='del'>-                        if (ret &amp;&amp; (errno != EEXIST)) {</div><div class='del'>-                                gf_msg_debug (THIS-&gt;name, 0, "mkdir failed,"</div><div class='del'>-                                        " errno: %d", errno);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *export_path = NULL;</div><div class='add'>+    char xattr_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat lstatbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat statbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = lstat(real_path, &amp;lstatbuf);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        return ret;</div><div class='add'>+    iatt_from_stat(&amp;stbuf, &amp;lstatbuf);</div><div class='add'>+    if (IA_ISREG(stbuf.ia_type) || IA_ISDIR(stbuf.ia_type))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    ret = make_export_path(real_path, &amp;export_path);</div><div class='add'>+    if (!ret &amp;&amp; export_path) {</div><div class='add'>+        strcat(export_path, "/" GF_SOLARIS_XATTR_DIR);</div><div class='add'>+        if (lstat(export_path, &amp;statbuf)) {</div><div class='add'>+            ret = mkdir(export_path, 0777);</div><div class='add'>+            if (ret &amp;&amp; (errno != EEXIST)) {</div><div class='add'>+                gf_msg_debug(THIS-&gt;name, 0,</div><div class='add'>+                             "mkdir failed,"</div><div class='add'>+                             " errno: %d",</div><div class='add'>+                             errno);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                snprintf(xattr_path, PATH_MAX, "%s%s%lu", export_path,</div><div class='del'>-                         "/", stbuf.ia_ino);</div><div class='add'>+        snprintf(xattr_path, PATH_MAX, "%s%s%lu", export_path, "/",</div><div class='add'>+                 stbuf.ia_ino);</div><div class='ctx'> </div><div class='del'>-                ret = lstat (xattr_path, &amp;statbuf);</div><div class='add'>+        ret = lstat(xattr_path, &amp;statbuf);</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        ret = mknod (xattr_path, S_IFREG|O_WRONLY, 0);</div><div class='del'>-                        if (ret &amp;&amp; (errno != EEXIST)) {</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                        LG_MSG_FILE_OP_FAILED, "Failed to "</div><div class='del'>-                                        "create mapped file %s", xattr_path);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                *path = gf_strdup (xattr_path);</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = mknod(xattr_path, S_IFREG | O_WRONLY, 0);</div><div class='add'>+            if (ret &amp;&amp; (errno != EEXIST)) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                       "Failed to "</div><div class='add'>+                       "create mapped file %s",</div><div class='add'>+                       xattr_path);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        *path = gf_strdup(xattr_path);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (export_path);</div><div class='del'>-        if (*path)</div><div class='del'>-                return 0;</div><div class='del'>-        else</div><div class='del'>-                return -1;</div><div class='add'>+    GF_FREE(export_path);</div><div class='add'>+    if (*path)</div><div class='add'>+        return 0;</div><div class='add'>+    else</div><div class='add'>+        return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-solaris_setxattr(const char *path, const char* key, const char *value,</div><div class='add'>+solaris_setxattr(const char *path, const char *key, const char *value,</div><div class='ctx'>                  size_t size, int flags)</div><div class='ctx'> {</div><div class='del'>-        int attrfd = -1;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *mapped_path = NULL;</div><div class='del'>-</div><div class='del'>-        ret = solaris_xattr_resolve_path (path, &amp;mapped_path);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                attrfd = attropen (mapped_path,  key, flags|O_CREAT|O_WRONLY,</div><div class='del'>-                                   0777);</div><div class='del'>-        } else {</div><div class='del'>-                attrfd = attropen (path, key, flags|O_CREAT|O_WRONLY, 0777);</div><div class='del'>-        }</div><div class='del'>-        if (attrfd &gt;= 0) {</div><div class='del'>-                ftruncate (attrfd, 0);</div><div class='del'>-                ret = write (attrfd, value, size);</div><div class='del'>-                close (attrfd);</div><div class='del'>-                ret = 0;</div><div class='del'>-        } else {</div><div class='del'>-                if (errno != ENOENT)</div><div class='del'>-                        gf_msg ("libglusterfs", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_SET_ATTRIBUTE_FAILED, "Couldn't set "</div><div class='del'>-                                "extended attribute for %s", path);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-        GF_FREE (mapped_path);</div><div class='del'>-        return ret;</div><div class='add'>+    int attrfd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *mapped_path = NULL;</div><div class='add'>+</div><div class='add'>+    ret = solaris_xattr_resolve_path(path, &amp;mapped_path);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        attrfd = attropen(mapped_path, key, flags | O_CREAT | O_WRONLY, 0777);</div><div class='add'>+    } else {</div><div class='add'>+        attrfd = attropen(path, key, flags | O_CREAT | O_WRONLY, 0777);</div><div class='add'>+    }</div><div class='add'>+    if (attrfd &gt;= 0) {</div><div class='add'>+        ftruncate(attrfd, 0);</div><div class='add'>+        ret = write(attrfd, value, size);</div><div class='add'>+        close(attrfd);</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        if (errno != ENOENT)</div><div class='add'>+            gf_msg("libglusterfs", GF_LOG_ERROR, errno,</div><div class='add'>+                   LG_MSG_SET_ATTRIBUTE_FAILED,</div><div class='add'>+                   "Couldn't set "</div><div class='add'>+                   "extended attribute for %s",</div><div class='add'>+                   path);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(mapped_path);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> solaris_listxattr(const char *path, char *list, size_t size)</div><div class='ctx'> {</div><div class='del'>-        int attrdirfd = -1;</div><div class='del'>-        ssize_t len = 0;</div><div class='del'>-        DIR *dirptr = NULL;</div><div class='del'>-        struct dirent *dent = NULL;</div><div class='del'>-        int newfd = -1;</div><div class='del'>-        char *mapped_path = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = solaris_xattr_resolve_path (path, &amp;mapped_path);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                attrdirfd = attropen (mapped_path, ".", O_RDONLY, 0);</div><div class='del'>-        } else {</div><div class='del'>-                attrdirfd = attropen (path, ".", O_RDONLY, 0);</div><div class='del'>-        }</div><div class='del'>-        if (attrdirfd &gt;= 0) {</div><div class='del'>-                newfd = dup(attrdirfd);</div><div class='del'>-                dirptr = fdopendir(newfd);</div><div class='del'>-                if (dirptr) {</div><div class='del'>-                        while ((dent = readdir(dirptr))) {</div><div class='del'>-                                size_t listlen = strlen(dent-&gt;d_name);</div><div class='del'>-                                if (!strcmp(dent-&gt;d_name, ".") ||</div><div class='del'>-                                    !strcmp(dent-&gt;d_name, "..")) {</div><div class='del'>-                                        /* we don't want "." and ".." here */</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                                if (size == 0) {</div><div class='del'>-                                        /* return the current size of the list</div><div class='del'>-                                           of extended attribute names*/</div><div class='del'>-                                        len += listlen + 1;</div><div class='del'>-                                } else {</div><div class='del'>-                                        /* check size and copy entry + null</div><div class='del'>-                                           into list. */</div><div class='del'>-                                        if ((len + listlen + 1) &gt; size) {</div><div class='del'>-                                                errno = ERANGE;</div><div class='del'>-                                                len = -1;</div><div class='del'>-                                                break;</div><div class='del'>-                                        } else {</div><div class='del'>-                                                strncpy(list + len, dent-&gt;d_name, listlen);</div><div class='del'>-                                                len += listlen;</div><div class='del'>-                                                list[len] = '\0';</div><div class='del'>-                                                ++len;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (closedir(dirptr) == -1) {</div><div class='del'>-                                close (attrdirfd);</div><div class='del'>-                                len = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+    int attrdirfd = -1;</div><div class='add'>+    ssize_t len = 0;</div><div class='add'>+    DIR *dirptr = NULL;</div><div class='add'>+    struct dirent *dent = NULL;</div><div class='add'>+    int newfd = -1;</div><div class='add'>+    char *mapped_path = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = solaris_xattr_resolve_path(path, &amp;mapped_path);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        attrdirfd = attropen(mapped_path, ".", O_RDONLY, 0);</div><div class='add'>+    } else {</div><div class='add'>+        attrdirfd = attropen(path, ".", O_RDONLY, 0);</div><div class='add'>+    }</div><div class='add'>+    if (attrdirfd &gt;= 0) {</div><div class='add'>+        newfd = dup(attrdirfd);</div><div class='add'>+        dirptr = fdopendir(newfd);</div><div class='add'>+        if (dirptr) {</div><div class='add'>+            while ((dent = readdir(dirptr))) {</div><div class='add'>+                size_t listlen = strlen(dent-&gt;d_name);</div><div class='add'>+                if (!strcmp(dent-&gt;d_name, ".") || !strcmp(dent-&gt;d_name, "..")) {</div><div class='add'>+                    /* we don't want "." and ".." here */</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+                if (size == 0) {</div><div class='add'>+                    /* return the current size of the list</div><div class='add'>+                       of extended attribute names*/</div><div class='add'>+                    len += listlen + 1;</div><div class='ctx'>                 } else {</div><div class='del'>-                        close (attrdirfd);</div><div class='add'>+                    /* check size and copy entry + null</div><div class='add'>+                       into list. */</div><div class='add'>+                    if ((len + listlen + 1) &gt; size) {</div><div class='add'>+                        errno = ERANGE;</div><div class='ctx'>                         len = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+                        break;</div><div class='add'>+                    } else {</div><div class='add'>+                        strncpy(list + len, dent-&gt;d_name, listlen);</div><div class='add'>+                        len += listlen;</div><div class='add'>+                        list[len] = '\0';</div><div class='add'>+                        ++len;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                close (attrdirfd);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (closedir(dirptr) == -1) {</div><div class='add'>+                close(attrdirfd);</div><div class='add'>+                len = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            close(attrdirfd);</div><div class='add'>+            len = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        close(attrdirfd);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (mapped_path);</div><div class='del'>-        return len;</div><div class='add'>+    GF_FREE(mapped_path);</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> solaris_flistxattr(int fd, char *list, size_t size)</div><div class='ctx'> {</div><div class='del'>-        int attrdirfd = -1;</div><div class='del'>-        ssize_t len = 0;</div><div class='del'>-        DIR *dirptr = NULL;</div><div class='del'>-        struct dirent *dent = NULL;</div><div class='del'>-        int newfd = -1;</div><div class='del'>-</div><div class='del'>-        attrdirfd = openat (fd, ".", O_RDONLY, 0);</div><div class='del'>-        if (attrdirfd &gt;= 0) {</div><div class='del'>-                newfd = dup(attrdirfd);</div><div class='del'>-                dirptr = fdopendir(newfd);</div><div class='del'>-                if (dirptr) {</div><div class='del'>-                        while ((dent = readdir(dirptr))) {</div><div class='del'>-                                size_t listlen = strlen(dent-&gt;d_name);</div><div class='del'>-                                if (!strcmp(dent-&gt;d_name, ".") ||</div><div class='del'>-                                    !strcmp(dent-&gt;d_name, "..")) {</div><div class='del'>-                                        /* we don't want "." and ".." here */</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                                if (size == 0) {</div><div class='del'>-                                        /* return the current size of the list</div><div class='del'>-                                           of extended attribute names*/</div><div class='del'>-                                        len += listlen + 1;</div><div class='del'>-                                } else {</div><div class='del'>-                                        /* check size and copy entry + null</div><div class='del'>-                                           into list. */</div><div class='del'>-                                        if ((len + listlen + 1) &gt; size) {</div><div class='del'>-                                                errno = ERANGE;</div><div class='del'>-                                                len = -1;</div><div class='del'>-                                                break;</div><div class='del'>-                                        } else {</div><div class='del'>-                                                strncpy(list + len, dent-&gt;d_name, listlen);</div><div class='del'>-                                                len += listlen;</div><div class='del'>-                                                list[len] = '\0';</div><div class='del'>-                                                ++len;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (closedir(dirptr) == -1) {</div><div class='del'>-                                close (attrdirfd);</div><div class='del'>-                                return -1;</div><div class='del'>-                        }</div><div class='add'>+    int attrdirfd = -1;</div><div class='add'>+    ssize_t len = 0;</div><div class='add'>+    DIR *dirptr = NULL;</div><div class='add'>+    struct dirent *dent = NULL;</div><div class='add'>+    int newfd = -1;</div><div class='add'>+</div><div class='add'>+    attrdirfd = openat(fd, ".", O_RDONLY, 0);</div><div class='add'>+    if (attrdirfd &gt;= 0) {</div><div class='add'>+        newfd = dup(attrdirfd);</div><div class='add'>+        dirptr = fdopendir(newfd);</div><div class='add'>+        if (dirptr) {</div><div class='add'>+            while ((dent = readdir(dirptr))) {</div><div class='add'>+                size_t listlen = strlen(dent-&gt;d_name);</div><div class='add'>+                if (!strcmp(dent-&gt;d_name, ".") || !strcmp(dent-&gt;d_name, "..")) {</div><div class='add'>+                    /* we don't want "." and ".." here */</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+                if (size == 0) {</div><div class='add'>+                    /* return the current size of the list</div><div class='add'>+                       of extended attribute names*/</div><div class='add'>+                    len += listlen + 1;</div><div class='ctx'>                 } else {</div><div class='del'>-                        close (attrdirfd);</div><div class='del'>-                        return -1;</div><div class='add'>+                    /* check size and copy entry + null</div><div class='add'>+                       into list. */</div><div class='add'>+                    if ((len + listlen + 1) &gt; size) {</div><div class='add'>+                        errno = ERANGE;</div><div class='add'>+                        len = -1;</div><div class='add'>+                        break;</div><div class='add'>+                    } else {</div><div class='add'>+                        strncpy(list + len, dent-&gt;d_name, listlen);</div><div class='add'>+                        len += listlen;</div><div class='add'>+                        list[len] = '\0';</div><div class='add'>+                        ++len;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                close (attrdirfd);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (closedir(dirptr) == -1) {</div><div class='add'>+                close(attrdirfd);</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            close(attrdirfd);</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='del'>-        return len;</div><div class='add'>+        close(attrdirfd);</div><div class='add'>+    }</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-solaris_removexattr(const char *path, const char* key)</div><div class='add'>+solaris_removexattr(const char *path, const char *key)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int attrfd = -1;</div><div class='del'>-        char *mapped_path = NULL;</div><div class='del'>-</div><div class='del'>-        ret = solaris_xattr_resolve_path (path, &amp;mapped_path);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                attrfd = attropen (mapped_path, ".", O_RDONLY, 0);</div><div class='del'>-        } else {</div><div class='del'>-                attrfd = attropen (path, ".", O_RDONLY, 0);</div><div class='del'>-        }</div><div class='del'>-        if (attrfd &gt;= 0) {</div><div class='del'>-                ret = unlinkat (attrfd, key, 0);</div><div class='del'>-                close (attrfd);</div><div class='del'>-        } else {</div><div class='del'>-                if (errno == ENOENT)</div><div class='del'>-                        errno = ENODATA;</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (mapped_path);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int attrfd = -1;</div><div class='add'>+    char *mapped_path = NULL;</div><div class='add'>+</div><div class='add'>+    ret = solaris_xattr_resolve_path(path, &amp;mapped_path);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        attrfd = attropen(mapped_path, ".", O_RDONLY, 0);</div><div class='add'>+    } else {</div><div class='add'>+        attrfd = attropen(path, ".", O_RDONLY, 0);</div><div class='add'>+    }</div><div class='add'>+    if (attrfd &gt;= 0) {</div><div class='add'>+        ret = unlinkat(attrfd, key, 0);</div><div class='add'>+        close(attrfd);</div><div class='add'>+    } else {</div><div class='add'>+        if (errno == ENOENT)</div><div class='add'>+            errno = ENODATA;</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(mapped_path);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-solaris_getxattr(const char *path,</div><div class='del'>-                 const char* key,</div><div class='del'>-                 char *value,</div><div class='del'>-                 size_t size)</div><div class='add'>+solaris_getxattr(const char *path, const char *key, char *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-        int attrfd = -1;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *mapped_path = NULL;</div><div class='del'>-</div><div class='del'>-        ret = solaris_xattr_resolve_path (path, &amp;mapped_path);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                attrfd = attropen (mapped_path, key, O_RDONLY, 0);</div><div class='del'>-        } else {</div><div class='del'>-                attrfd = attropen (path, key, O_RDONLY, 0);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (attrfd &gt;= 0) {</div><div class='del'>-                if (size == 0) {</div><div class='del'>-                        struct stat buf;</div><div class='del'>-                        fstat (attrfd, &amp;buf);</div><div class='del'>-                        ret = buf.st_size;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = read (attrfd, value, size);</div><div class='del'>-                }</div><div class='del'>-                close (attrfd);</div><div class='add'>+    int attrfd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *mapped_path = NULL;</div><div class='add'>+</div><div class='add'>+    ret = solaris_xattr_resolve_path(path, &amp;mapped_path);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        attrfd = attropen(mapped_path, key, O_RDONLY, 0);</div><div class='add'>+    } else {</div><div class='add'>+        attrfd = attropen(path, key, O_RDONLY, 0);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (attrfd &gt;= 0) {</div><div class='add'>+        if (size == 0) {</div><div class='add'>+            struct stat buf;</div><div class='add'>+            fstat(attrfd, &amp;buf);</div><div class='add'>+            ret = buf.st_size;</div><div class='ctx'>         } else {</div><div class='del'>-                if (errno != ENOENT)</div><div class='del'>-                        gf_msg ("libglusterfs", GF_LOG_INFO, errno,</div><div class='del'>-                                LG_MSG_READ_ATTRIBUTE_FAILED, "Couldn't read "</div><div class='del'>-                                "extended attribute for the file %s", path);</div><div class='del'>-                if (errno == ENOENT)</div><div class='del'>-                        errno = ENODATA;</div><div class='del'>-                ret = -1;</div><div class='add'>+            ret = read(attrfd, value, size);</div><div class='ctx'>         }</div><div class='del'>-        GF_FREE (mapped_path);</div><div class='del'>-        return ret;</div><div class='add'>+        close(attrfd);</div><div class='add'>+    } else {</div><div class='add'>+        if (errno != ENOENT)</div><div class='add'>+            gf_msg("libglusterfs", GF_LOG_INFO, errno,</div><div class='add'>+                   LG_MSG_READ_ATTRIBUTE_FAILED,</div><div class='add'>+                   "Couldn't read "</div><div class='add'>+                   "extended attribute for the file %s",</div><div class='add'>+                   path);</div><div class='add'>+        if (errno == ENOENT)</div><div class='add'>+            errno = ENODATA;</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(mapped_path);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-char* strsep(char** str, const char* delims)</div><div class='add'>+char *</div><div class='add'>+strsep(char **str, const char *delims)</div><div class='ctx'> {</div><div class='del'>-        char* token;</div><div class='del'>-</div><div class='del'>-        if (*str==NULL) {</div><div class='del'>-                /* No more tokens */</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        token=*str;</div><div class='del'>-        while (**str!='\0') {</div><div class='del'>-                if (strchr(delims,**str)!=NULL) {</div><div class='del'>-                        **str='\0';</div><div class='del'>-                        (*str)++;</div><div class='del'>-                        return token;</div><div class='del'>-                }</div><div class='del'>-                (*str)++;</div><div class='add'>+    char *token;</div><div class='add'>+</div><div class='add'>+    if (*str == NULL) {</div><div class='add'>+        /* No more tokens */</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    token = *str;</div><div class='add'>+    while (**str != '\0') {</div><div class='add'>+        if (strchr(delims, **str) != NULL) {</div><div class='add'>+            **str = '\0';</div><div class='add'>+            (*str)++;</div><div class='add'>+            return token;</div><div class='ctx'>         }</div><div class='del'>-        /* There is no other token */</div><div class='del'>-        *str=NULL;</div><div class='del'>-        return token;</div><div class='add'>+        (*str)++;</div><div class='add'>+    }</div><div class='add'>+    /* There is no other token */</div><div class='add'>+    *str = NULL;</div><div class='add'>+    return token;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Code comes from libiberty */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-vasprintf (char **result, const char *format, va_list args)</div><div class='add'>+vasprintf(char **result, const char *format, va_list args)</div><div class='ctx'> {</div><div class='del'>-        return gf_vasprintf(result, format, args);</div><div class='add'>+    return gf_vasprintf(result, format, args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-asprintf (char **buf, const char *fmt, ...)</div><div class='add'>+asprintf(char **buf, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        int status;</div><div class='del'>-        va_list ap;</div><div class='add'>+    int status;</div><div class='add'>+    va_list ap;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        status = vasprintf (buf, fmt, ap);</div><div class='del'>-        va_end (ap);</div><div class='del'>-        return status;</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    status = vasprintf(buf, fmt, ap);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    return status;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int solaris_unlink (const char *path)</div><div class='add'>+int</div><div class='add'>+solaris_unlink(const char *path)</div><div class='ctx'> {</div><div class='del'>-        char *mapped_path = NULL;</div><div class='del'>-        struct stat     stbuf = {0, };</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = solaris_xattr_resolve_path (path, &amp;mapped_path);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (!ret &amp;&amp; mapped_path) {</div><div class='del'>-                if (lstat(path, &amp;stbuf)) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED, "Stat failed on "</div><div class='del'>-                                "mapped file %s", mapped_path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (stbuf.st_nlink == 1) {</div><div class='del'>-                        if(remove (mapped_path))</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                        LG_MSG_FILE_OP_FAILED, "Failed to "</div><div class='del'>-                                        "remove mapped file %s", mapped_path);</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    char *mapped_path = NULL;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = solaris_xattr_resolve_path(path, &amp;mapped_path);</div><div class='add'>+</div><div class='add'>+    if (!ret &amp;&amp; mapped_path) {</div><div class='add'>+        if (lstat(path, &amp;stbuf)) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "Stat failed on "</div><div class='add'>+                   "mapped file %s",</div><div class='add'>+                   mapped_path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (stbuf.st_nlink == 1) {</div><div class='add'>+            if (remove(mapped_path))</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                       "Failed to "</div><div class='add'>+                       "remove mapped file %s",</div><div class='add'>+                       mapped_path);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (mapped_path);</div><div class='add'>+    GF_FREE(mapped_path);</div><div class='ctx'> </div><div class='del'>-        return  unlink (path);</div><div class='add'>+    return unlink(path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-solaris_rename (const char *old_path, const char *new_path)</div><div class='add'>+solaris_rename(const char *old_path, const char *new_path)</div><div class='ctx'> {</div><div class='del'>-        char *mapped_path = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = solaris_xattr_resolve_path (new_path, &amp;mapped_path);</div><div class='add'>+    char *mapped_path = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    ret = solaris_xattr_resolve_path(new_path, &amp;mapped_path);</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; mapped_path) {</div><div class='del'>-                if (!remove (mapped_path))</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED, "Failed to remove "</div><div class='del'>-                                "mapped file %s.", mapped_path);</div><div class='del'>-                GF_FREE (mapped_path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return rename(old_path, new_path);</div><div class='add'>+    if (!ret &amp;&amp; mapped_path) {</div><div class='add'>+        if (!remove(mapped_path))</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "Failed to remove "</div><div class='add'>+                   "mapped file %s.",</div><div class='add'>+                   mapped_path);</div><div class='add'>+        GF_FREE(mapped_path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return rename(old_path, new_path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-mkdtemp (char *tempstring)</div><div class='add'>+mkdtemp(char *tempstring)</div><div class='ctx'> {</div><div class='del'>-        char *new_string = NULL;</div><div class='del'>-        int   ret        = 0;</div><div class='add'>+    char *new_string = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        new_string = mkstemp (tempstring);</div><div class='del'>-        if (!new_string)</div><div class='del'>-                goto out;</div><div class='add'>+    new_string = mkstemp(tempstring);</div><div class='add'>+    if (!new_string)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mkdir (new_string, 0700);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                new_string = NULL;</div><div class='add'>+    ret = mkdir(new_string, 0700);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        new_string = NULL;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return new_string;</div><div class='add'>+    return new_string;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #endif /* GF_SOLARIS_HOST_OS */</div><div class='hunk'>@@ -539,27 +553,27 @@ out:</div><div class='ctx'> void</div><div class='ctx'> gf_extattr_list_reshape(char *bsd_list, ssize_t size)</div><div class='ctx'> {</div><div class='del'>-        /*</div><div class='del'>-         * the format of bsd_list is</div><div class='del'>-         *     &lt;attr_len&gt;attr&lt;attr_len&gt;attr...</div><div class='del'>-         * we try to reformat it as Linux's</div><div class='del'>-         *     attr&lt;\0&gt;attr&lt;\0&gt;...</div><div class='del'>-         * */</div><div class='del'>-        if (NULL == bsd_list || size &lt;= 0)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        size_t i = 0, j;</div><div class='del'>-</div><div class='del'>-        while (i &lt; size) {</div><div class='del'>-                size_t attr_len = bsd_list[i];</div><div class='del'>-</div><div class='del'>-                for (j = i; j &lt; i+attr_len; ++j)</div><div class='del'>-                        bsd_list[j] = bsd_list[j+1];</div><div class='del'>-                bsd_list[j] = '\0';</div><div class='del'>-</div><div class='del'>-                i += attr_len + 1;</div><div class='del'>-                gf_msg_debug ("syscall", 0, "syscall debug: %lu", attr_len);</div><div class='del'>-        }</div><div class='add'>+    /*</div><div class='add'>+     * the format of bsd_list is</div><div class='add'>+     *     &lt;attr_len&gt;attr&lt;attr_len&gt;attr...</div><div class='add'>+     * we try to reformat it as Linux's</div><div class='add'>+     *     attr&lt;\0&gt;attr&lt;\0&gt;...</div><div class='add'>+     * */</div><div class='add'>+    if (NULL == bsd_list || size &lt;= 0)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    size_t i = 0, j;</div><div class='add'>+</div><div class='add'>+    while (i &lt; size) {</div><div class='add'>+        size_t attr_len = bsd_list[i];</div><div class='add'>+</div><div class='add'>+        for (j = i; j &lt; i + attr_len; ++j)</div><div class='add'>+            bsd_list[j] = bsd_list[j + 1];</div><div class='add'>+        bsd_list[j] = '\0';</div><div class='add'>+</div><div class='add'>+        i += attr_len + 1;</div><div class='add'>+        gf_msg_debug("syscall", 0, "syscall debug: %lu", attr_len);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> #endif /* GF_BSD_HOST_OS */</div><div class='ctx'> </div><div class='hunk'>@@ -567,44 +581,44 @@ gf_extattr_list_reshape(char *bsd_list, ssize_t size)</div><div class='ctx'> size_t</div><div class='ctx'> strnlen(const char *string, size_t maxlen)</div><div class='ctx'> {</div><div class='del'>-        int len = 0;</div><div class='del'>-        while ((len &lt; maxlen) &amp;&amp; string[len])</div><div class='del'>-                len++;</div><div class='del'>-        return len;</div><div class='add'>+    int len = 0;</div><div class='add'>+    while ((len &lt; maxlen) &amp;&amp; string[len])</div><div class='add'>+        len++;</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> #endif /* STRNLEN */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_umount_lazy (char *xlname, char *path, int rmdir_flag)</div><div class='add'>+gf_umount_lazy(char *xlname, char *path, int rmdir_flag)</div><div class='ctx'> {</div><div class='del'>-        int                   ret               = -1;</div><div class='del'>-        runner_t              runner            = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    runner_t runner = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        runinit (&amp;runner);</div><div class='add'>+    runinit(&amp;runner);</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        runner_add_args (&amp;runner, _PATH_UMOUNT, "-l", path, NULL);</div><div class='add'>+    runner_add_args(&amp;runner, _PATH_UMOUNT, "-l", path, NULL);</div><div class='ctx'> #else</div><div class='del'>-        if (rmdir_flag)</div><div class='del'>-                runner_add_args (&amp;runner, SBIN_DIR "/umountd",</div><div class='del'>-                                 "-r", path, NULL);</div><div class='del'>-        else</div><div class='del'>-                runner_add_args (&amp;runner, SBIN_DIR "/umountd",</div><div class='del'>-                                 path, NULL);</div><div class='add'>+    if (rmdir_flag)</div><div class='add'>+        runner_add_args(&amp;runner, SBIN_DIR "/umountd", "-r", path, NULL);</div><div class='add'>+    else</div><div class='add'>+        runner_add_args(&amp;runner, SBIN_DIR "/umountd", path, NULL);</div><div class='ctx'> #endif</div><div class='del'>-        ret = runner_run (&amp;runner);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (xlname, GF_LOG_ERROR, errno, LG_MSG_UNMOUNT_FAILED,</div><div class='del'>-                        "Lazy unmount of %s", path);</div><div class='del'>-        }</div><div class='add'>+    ret = runner_run(&amp;runner);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(xlname, GF_LOG_ERROR, errno, LG_MSG_UNMOUNT_FAILED,</div><div class='add'>+               "Lazy unmount of %s", path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        if (!ret &amp;&amp; rmdir_flag) {</div><div class='del'>-                ret = sys_rmdir (path);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (xlname, GF_LOG_WARNING, errno,</div><div class='del'>-                                LG_MSG_DIR_OP_FAILED, "rmdir %s", path);</div><div class='del'>-        }</div><div class='add'>+    if (!ret &amp;&amp; rmdir_flag) {</div><div class='add'>+        ret = sys_rmdir(path);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(xlname, GF_LOG_WARNING, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+                   "rmdir %s", path);</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/compound-fop-utils.c b/libglusterfs/src/compound-fop-utils.c<br/>index 03d7b5ba459..8bdb8e8fd5b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/compound-fop-utils.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/compound-fop-utils.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/compound-fop-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/compound-fop-utils.c</a></div><div class='hunk'>@@ -14,125 +14,125 @@</div><div class='ctx'> #include "dict.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-compound_args_cleanup (compound_args_t *args)</div><div class='add'>+compound_args_cleanup(compound_args_t *args)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        if (!args)</div><div class='del'>-                return;</div><div class='add'>+    if (!args)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;xdata)</div><div class='del'>-                dict_unref (args-&gt;xdata);</div><div class='add'>+    if (args-&gt;xdata)</div><div class='add'>+        dict_unref(args-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;req_list) {</div><div class='del'>-                for (i = 0; i &lt; args-&gt;fop_length; i++) {</div><div class='del'>-                        args_wipe (&amp;args-&gt;req_list[i]);</div><div class='del'>-                }</div><div class='add'>+    if (args-&gt;req_list) {</div><div class='add'>+        for (i = 0; i &lt; args-&gt;fop_length; i++) {</div><div class='add'>+            args_wipe(&amp;args-&gt;req_list[i]);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args-&gt;enum_list);</div><div class='del'>-        GF_FREE (args-&gt;req_list);</div><div class='del'>-        GF_FREE (args);</div><div class='add'>+    GF_FREE(args-&gt;enum_list);</div><div class='add'>+    GF_FREE(args-&gt;req_list);</div><div class='add'>+    GF_FREE(args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-compound_args_cbk_cleanup (compound_args_cbk_t *args_cbk)</div><div class='add'>+compound_args_cbk_cleanup(compound_args_cbk_t *args_cbk)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        if (!args_cbk)</div><div class='del'>-                return;</div><div class='add'>+    if (!args_cbk)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (args_cbk-&gt;xdata)</div><div class='del'>-                dict_unref (args_cbk-&gt;xdata);</div><div class='add'>+    if (args_cbk-&gt;xdata)</div><div class='add'>+        dict_unref(args_cbk-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-        if (args_cbk-&gt;rsp_list) {</div><div class='del'>-                for (i = 0; i &lt; args_cbk-&gt;fop_length; i++) {</div><div class='del'>-                        args_cbk_wipe (&amp;args_cbk-&gt;rsp_list[i]);</div><div class='del'>-                }</div><div class='add'>+    if (args_cbk-&gt;rsp_list) {</div><div class='add'>+        for (i = 0; i &lt; args_cbk-&gt;fop_length; i++) {</div><div class='add'>+            args_cbk_wipe(&amp;args_cbk-&gt;rsp_list[i]);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args_cbk-&gt;rsp_list);</div><div class='del'>-        GF_FREE (args_cbk-&gt;enum_list);</div><div class='del'>-        GF_FREE (args_cbk);</div><div class='add'>+    GF_FREE(args_cbk-&gt;rsp_list);</div><div class='add'>+    GF_FREE(args_cbk-&gt;enum_list);</div><div class='add'>+    GF_FREE(args_cbk);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-compound_args_cbk_t*</div><div class='del'>-compound_args_cbk_alloc (int length, dict_t *xdata)</div><div class='add'>+compound_args_cbk_t *</div><div class='add'>+compound_args_cbk_alloc(int length, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int                 i             = 0;</div><div class='del'>-        compound_args_cbk_t *args_cbk     = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    compound_args_cbk_t *args_cbk = NULL;</div><div class='ctx'> </div><div class='del'>-        args_cbk = GF_CALLOC (1, sizeof (*args_cbk), gf_mt_compound_rsp_t);</div><div class='del'>-        if (!args_cbk)</div><div class='del'>-                return NULL;</div><div class='add'>+    args_cbk = GF_CALLOC(1, sizeof(*args_cbk), gf_mt_compound_rsp_t);</div><div class='add'>+    if (!args_cbk)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        args_cbk-&gt;fop_length = length;</div><div class='add'>+    args_cbk-&gt;fop_length = length;</div><div class='ctx'> </div><div class='del'>-        args_cbk-&gt;rsp_list = GF_CALLOC (length, sizeof (*args_cbk-&gt;rsp_list),</div><div class='del'>-                                        gf_mt_default_args_cbk_t);</div><div class='del'>-        if (!args_cbk-&gt;rsp_list)</div><div class='del'>-                goto out;</div><div class='add'>+    args_cbk-&gt;rsp_list = GF_CALLOC(length, sizeof(*args_cbk-&gt;rsp_list),</div><div class='add'>+                                   gf_mt_default_args_cbk_t);</div><div class='add'>+    if (!args_cbk-&gt;rsp_list)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; length; i++) {</div><div class='del'>-                args_cbk_init (&amp;args_cbk-&gt;rsp_list[i]);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; length; i++) {</div><div class='add'>+        args_cbk_init(&amp;args_cbk-&gt;rsp_list[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        args_cbk-&gt;enum_list = GF_CALLOC (length, sizeof (*args_cbk-&gt;enum_list),</div><div class='del'>-                                        gf_common_mt_int);</div><div class='del'>-        if (!args_cbk-&gt;enum_list)</div><div class='del'>-                goto out;</div><div class='add'>+    args_cbk-&gt;enum_list = GF_CALLOC(length, sizeof(*args_cbk-&gt;enum_list),</div><div class='add'>+                                    gf_common_mt_int);</div><div class='add'>+    if (!args_cbk-&gt;enum_list)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (xdata) {</div><div class='del'>-                args_cbk-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-                if (!args_cbk-&gt;xdata)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (xdata) {</div><div class='add'>+        args_cbk-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+        if (!args_cbk-&gt;xdata)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return args_cbk;</div><div class='add'>+    return args_cbk;</div><div class='ctx'> out:</div><div class='del'>-        compound_args_cbk_cleanup (args_cbk);</div><div class='del'>-        return NULL;</div><div class='add'>+    compound_args_cbk_cleanup(args_cbk);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-compound_args_t*</div><div class='del'>-compound_fop_alloc (int length, glusterfs_compound_fop_t fop, dict_t *xdata)</div><div class='add'>+compound_args_t *</div><div class='add'>+compound_fop_alloc(int length, glusterfs_compound_fop_t fop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        compound_args_t *args     = NULL;</div><div class='add'>+    compound_args_t *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = GF_CALLOC (1, sizeof (*args), gf_mt_compound_req_t);</div><div class='add'>+    args = GF_CALLOC(1, sizeof(*args), gf_mt_compound_req_t);</div><div class='ctx'> </div><div class='del'>-        if (!args)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!args)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        /* fop_enum can be used by xlators to see which fops are</div><div class='del'>-         * included as part of compound fop. This will help in checking</div><div class='del'>-         * for compatibility or support without going through the entire</div><div class='del'>-         * fop list packed.</div><div class='del'>-         */</div><div class='del'>-        args-&gt;fop_enum = fop;</div><div class='del'>-        args-&gt;fop_length = length;</div><div class='add'>+    /* fop_enum can be used by xlators to see which fops are</div><div class='add'>+     * included as part of compound fop. This will help in checking</div><div class='add'>+     * for compatibility or support without going through the entire</div><div class='add'>+     * fop list packed.</div><div class='add'>+     */</div><div class='add'>+    args-&gt;fop_enum = fop;</div><div class='add'>+    args-&gt;fop_length = length;</div><div class='ctx'> </div><div class='del'>-        args-&gt;enum_list = GF_CALLOC (length, sizeof (*args-&gt;enum_list),</div><div class='del'>-                                     gf_common_mt_int);</div><div class='add'>+    args-&gt;enum_list = GF_CALLOC(length, sizeof(*args-&gt;enum_list),</div><div class='add'>+                                gf_common_mt_int);</div><div class='ctx'> </div><div class='del'>-        if (!args-&gt;enum_list)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!args-&gt;enum_list)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        args-&gt;req_list = GF_CALLOC (length, sizeof (*args-&gt;req_list),</div><div class='del'>-                                     gf_mt_default_args_t);</div><div class='add'>+    args-&gt;req_list = GF_CALLOC(length, sizeof(*args-&gt;req_list),</div><div class='add'>+                               gf_mt_default_args_t);</div><div class='ctx'> </div><div class='del'>-        if (!args-&gt;req_list)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!args-&gt;req_list)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (xdata) {</div><div class='del'>-                args-&gt;xdata = dict_copy_with_ref (xdata, args-&gt;xdata);</div><div class='del'>-                if (!args-&gt;xdata)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (xdata) {</div><div class='add'>+        args-&gt;xdata = dict_copy_with_ref(xdata, args-&gt;xdata);</div><div class='add'>+        if (!args-&gt;xdata)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return args;</div><div class='add'>+    return args;</div><div class='ctx'> out:</div><div class='del'>-        compound_args_cleanup (args);</div><div class='del'>-        return NULL;</div><div class='add'>+    compound_args_cleanup(args);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/ctx.c b/libglusterfs/src/ctx.c<br/>index afd12cd22f8..1e4c341df05 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/ctx.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/ctx.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/ctx.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/ctx.c</a></div><div class='hunk'>@@ -15,82 +15,82 @@</div><div class='ctx'> #include "timer-wheel.h"</div><div class='ctx'> </div><div class='ctx'> glusterfs_ctx_t *</div><div class='del'>-glusterfs_ctx_new ()</div><div class='add'>+glusterfs_ctx_new()</div><div class='ctx'> {</div><div class='del'>-        int               ret = 0;</div><div class='del'>-	glusterfs_ctx_t  *ctx = NULL;</div><div class='del'>-</div><div class='del'>-	/* no GF_CALLOC here, gf_acct_mem_set_enable is not</div><div class='del'>-	   yet decided at this point */</div><div class='del'>-        ctx = calloc (1, sizeof (*ctx));</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    /* no GF_CALLOC here, gf_acct_mem_set_enable is not</div><div class='add'>+       yet decided at this point */</div><div class='add'>+    ctx = calloc(1, sizeof(*ctx));</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;mem_acct_enable = gf_global_mem_acct_enable_get();</div><div class='add'>+    ctx-&gt;mem_acct_enable = gf_global_mem_acct_enable_get();</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;graphs);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;mempool_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;volfile_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;graphs);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;mempool_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;volfile_list);</div><div class='ctx'> </div><div class='del'>-	ctx-&gt;daemon_pipe[0] = -1;</div><div class='del'>-	ctx-&gt;daemon_pipe[1] = -1;</div><div class='add'>+    ctx-&gt;daemon_pipe[0] = -1;</div><div class='add'>+    ctx-&gt;daemon_pipe[1] = -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;log.loglevel = DEFAULT_LOG_LEVEL;</div><div class='add'>+    ctx-&gt;log.loglevel = DEFAULT_LOG_LEVEL;</div><div class='ctx'> </div><div class='ctx'> #ifdef RUN_WITH_VALGRIND</div><div class='del'>-        ctx-&gt;cmd_args.valgrind = _gf_true;</div><div class='add'>+    ctx-&gt;cmd_args.valgrind = _gf_true;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /* lock is never destroyed! */</div><div class='del'>-	ret = LOCK_INIT (&amp;ctx-&gt;lock);</div><div class='del'>-	if (ret) {</div><div class='del'>-		free (ctx);</div><div class='del'>-		ctx = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        GF_ATOMIC_INIT (ctx-&gt;stats.max_dict_pairs, 0);</div><div class='del'>-        GF_ATOMIC_INIT (ctx-&gt;stats.total_pairs_used, 0);</div><div class='del'>-        GF_ATOMIC_INIT (ctx-&gt;stats.total_dicts_used, 0);</div><div class='add'>+    /* lock is never destroyed! */</div><div class='add'>+    ret = LOCK_INIT(&amp;ctx-&gt;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        free(ctx);</div><div class='add'>+        ctx = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ATOMIC_INIT(ctx-&gt;stats.max_dict_pairs, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ctx-&gt;stats.total_pairs_used, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ctx-&gt;stats.total_dicts_used, 0);</div><div class='ctx'> out:</div><div class='del'>-	return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-glusterfs_ctx_tw_destroy (struct gf_ctx_tw *ctx_tw)</div><div class='add'>+glusterfs_ctx_tw_destroy(struct gf_ctx_tw *ctx_tw)</div><div class='ctx'> {</div><div class='del'>-        if (ctx_tw-&gt;timer_wheel)</div><div class='del'>-                gf_tw_cleanup_timers (ctx_tw-&gt;timer_wheel);</div><div class='add'>+    if (ctx_tw-&gt;timer_wheel)</div><div class='add'>+        gf_tw_cleanup_timers(ctx_tw-&gt;timer_wheel);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctx_tw);</div><div class='add'>+    GF_FREE(ctx_tw);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct tvec_base*</div><div class='del'>-glusterfs_ctx_tw_get (glusterfs_ctx_t *ctx)</div><div class='add'>+struct tvec_base *</div><div class='add'>+glusterfs_ctx_tw_get(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        struct gf_ctx_tw *ctx_tw = NULL;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;tw) {</div><div class='del'>-                        ctx_tw = GF_REF_GET (ctx-&gt;tw);</div><div class='del'>-                } else {</div><div class='del'>-                        ctx_tw = GF_CALLOC (1, sizeof (struct gf_ctx_tw),</div><div class='del'>-                                            gf_common_mt_tw_ctx);</div><div class='del'>-                        ctx_tw-&gt;timer_wheel = gf_tw_init_timers();</div><div class='del'>-                        GF_REF_INIT (ctx_tw, glusterfs_ctx_tw_destroy);</div><div class='del'>-                        ctx-&gt;tw = ctx_tw;</div><div class='del'>-                }</div><div class='add'>+    struct gf_ctx_tw *ctx_tw = NULL;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;tw) {</div><div class='add'>+            ctx_tw = GF_REF_GET(ctx-&gt;tw);</div><div class='add'>+        } else {</div><div class='add'>+            ctx_tw = GF_CALLOC(1, sizeof(struct gf_ctx_tw),</div><div class='add'>+                               gf_common_mt_tw_ctx);</div><div class='add'>+            ctx_tw-&gt;timer_wheel = gf_tw_init_timers();</div><div class='add'>+            GF_REF_INIT(ctx_tw, glusterfs_ctx_tw_destroy);</div><div class='add'>+            ctx-&gt;tw = ctx_tw;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ctx_tw-&gt;timer_wheel;</div><div class='add'>+    return ctx_tw-&gt;timer_wheel;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glusterfs_ctx_tw_put (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_ctx_tw_put(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        GF_REF_PUT (ctx-&gt;tw);</div><div class='add'>+    GF_REF_PUT(ctx-&gt;tw);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/daemon.c b/libglusterfs/src/daemon.c<br/>index 348e3ad4083..f821f8f7ed0 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/daemon.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/daemon.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/daemon.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/daemon.c</a></div><div class='hunk'>@@ -14,53 +14,53 @@</div><div class='ctx'> #include "daemon.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-os_daemon_return (int nochdir, int noclose)</div><div class='add'>+os_daemon_return(int nochdir, int noclose)</div><div class='ctx'> {</div><div class='del'>-	pid_t   pid  = -1;</div><div class='del'>-	int     ret  = -1;</div><div class='del'>-        FILE    *ptr = NULL;</div><div class='add'>+    pid_t pid = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    FILE *ptr = NULL;</div><div class='ctx'> </div><div class='del'>-	ret = fork();</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='add'>+    ret = fork();</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	pid = setsid();</div><div class='add'>+    pid = setsid();</div><div class='ctx'> </div><div class='del'>-	if (pid == -1) {</div><div class='del'>-                ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    if (pid == -1) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (!nochdir)</div><div class='del'>-		ret = chdir("/");</div><div class='add'>+    if (!nochdir)</div><div class='add'>+        ret = chdir("/");</div><div class='ctx'> </div><div class='del'>-        if (!noclose) {</div><div class='del'>-                ptr = freopen (DEVNULLPATH, "r", stdin);</div><div class='del'>-                if (!ptr)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (!noclose) {</div><div class='add'>+        ptr = freopen(DEVNULLPATH, "r", stdin);</div><div class='add'>+        if (!ptr)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ptr = freopen (DEVNULLPATH, "w", stdout);</div><div class='del'>-                if (!ptr)</div><div class='del'>-                        goto out;</div><div class='add'>+        ptr = freopen(DEVNULLPATH, "w", stdout);</div><div class='add'>+        if (!ptr)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ptr = freopen (DEVNULLPATH, "w", stderr);</div><div class='del'>-                if (!ptr)</div><div class='del'>-                        goto out;</div><div class='del'>-	}</div><div class='add'>+        ptr = freopen(DEVNULLPATH, "w", stderr);</div><div class='add'>+        if (!ptr)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-os_daemon (int nochdir, int noclose)</div><div class='add'>+os_daemon(int nochdir, int noclose)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = os_daemon_return (nochdir, noclose);</div><div class='del'>-	if (ret &lt;= 0)</div><div class='del'>-		return ret;</div><div class='add'>+    ret = os_daemon_return(nochdir, noclose);</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	_exit (0);</div><div class='add'>+    _exit(0);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/default-args.c b/libglusterfs/src/default-args.c<br/>index 2bc1ec28649..c92f3d46a86 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/default-args.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/default-args.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/default-args.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/default-args.c</a></div><div class='hunk'>@@ -17,1656 +17,1593 @@</div><div class='ctx'> #include "defaults.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_lookup_store (default_args_t *args, loc_t *loc,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+args_lookup_store(default_args_t *args, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_lookup_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     inode_t *inode, struct iatt *buf,</div><div class='del'>-                     dict_t *xdata, struct iatt *postparent)</div><div class='add'>+args_lookup_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                      dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_stat_store (default_args_t *args, loc_t *loc, dict_t *xdata)</div><div class='add'>+args_stat_store(default_args_t *args, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_stat_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   struct iatt *buf, dict_t *xdata)</div><div class='add'>+args_stat_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                    struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret == 0)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fstat_store (default_args_t *args, fd_t *fd, dict_t *xdata)</div><div class='add'>+args_fstat_store(default_args_t *args, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fstat_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *buf, dict_t *xdata)</div><div class='add'>+args_fstat_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                     struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_truncate_store (default_args_t *args, loc_t *loc, off_t off,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_truncate_store(default_args_t *args, loc_t *loc, off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;offset = off;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;offset = off;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_truncate_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+args_truncate_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                        struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (prebuf)</div><div class='del'>-                args-&gt;prestat = *prebuf;</div><div class='del'>-        if (postbuf)</div><div class='del'>-                args-&gt;poststat = *postbuf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (prebuf)</div><div class='add'>+        args-&gt;prestat = *prebuf;</div><div class='add'>+    if (postbuf)</div><div class='add'>+        args-&gt;poststat = *postbuf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_ftruncate_store (default_args_t *args, fd_t *fd, off_t off,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+args_ftruncate_store(default_args_t *args, fd_t *fd, off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        args-&gt;offset = off;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;offset = off;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_ftruncate_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+args_ftruncate_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                         int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                         struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (prebuf)</div><div class='del'>-                args-&gt;prestat = *prebuf;</div><div class='del'>-        if (postbuf)</div><div class='del'>-                args-&gt;poststat = *postbuf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (prebuf)</div><div class='add'>+        args-&gt;prestat = *prebuf;</div><div class='add'>+    if (postbuf)</div><div class='add'>+        args-&gt;poststat = *postbuf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_access_store (default_args_t *args, loc_t *loc, int32_t mask,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+args_access_store(default_args_t *args, loc_t *loc, int32_t mask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;mask = mask;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;mask = mask;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_access_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_access_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_readlink_store (default_args_t *args, loc_t *loc, size_t size,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_readlink_store(default_args_t *args, loc_t *loc, size_t size,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;size = size;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;size = size;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_readlink_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       const char *path, struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+args_readlink_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, const char *path, struct iatt *stbuf,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (path)</div><div class='del'>-                args-&gt;buf = gf_strdup (path);</div><div class='del'>-        if (stbuf)</div><div class='del'>-                args-&gt;stat = *stbuf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (path)</div><div class='add'>+        args-&gt;buf = gf_strdup(path);</div><div class='add'>+    if (stbuf)</div><div class='add'>+        args-&gt;stat = *stbuf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_mknod_store (default_args_t *args, loc_t *loc, mode_t mode,</div><div class='del'>-                  dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+args_mknod_store(default_args_t *args, loc_t *loc, mode_t mode, dev_t rdev,</div><div class='add'>+                 mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;mode = mode;</div><div class='del'>-        args-&gt;rdev = rdev;</div><div class='del'>-        args-&gt;umask = umask;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;mode = mode;</div><div class='add'>+    args-&gt;rdev = rdev;</div><div class='add'>+    args-&gt;umask = umask;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_mknod_cbk_store (default_args_cbk_t *args, int op_ret,</div><div class='del'>-                    int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+args_mknod_cbk_store(default_args_cbk_t *args, int op_ret, int32_t op_errno,</div><div class='add'>+                     inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_mkdir_store (default_args_t *args, loc_t *loc, mode_t mode,</div><div class='del'>-                  mode_t umask, dict_t *xdata)</div><div class='add'>+args_mkdir_store(default_args_t *args, loc_t *loc, mode_t mode, mode_t umask,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;mode  = mode;</div><div class='del'>-        args-&gt;umask = umask;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;mode = mode;</div><div class='add'>+    args-&gt;umask = umask;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_mkdir_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+args_mkdir_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                     inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_unlink_store (default_args_t *args, loc_t *loc, int xflag, dict_t *xdata)</div><div class='add'>+args_unlink_store(default_args_t *args, loc_t *loc, int xflag, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;xflag = xflag;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;xflag = xflag;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_unlink_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_unlink_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_rmdir_store (default_args_t *args, loc_t *loc, int flags, dict_t *xdata)</div><div class='add'>+args_rmdir_store(default_args_t *args, loc_t *loc, int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;flags = flags;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_rmdir_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+args_rmdir_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                     struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_symlink_store (default_args_t *args, const char *linkname, loc_t *loc,</div><div class='add'>+args_symlink_store(default_args_t *args, const char *linkname, loc_t *loc,</div><div class='ctx'>                    mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;linkname = gf_strdup (linkname);</div><div class='del'>-        args-&gt;umask = umask;</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;linkname = gf_strdup(linkname);</div><div class='add'>+    args-&gt;umask = umask;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_symlink_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *buf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+args_symlink_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+                       struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_rename_store (default_args_t *args, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+args_rename_store(default_args_t *args, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, oldloc);</div><div class='del'>-        loc_copy (&amp;args-&gt;loc2, newloc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, oldloc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc2, newloc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_rename_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                     struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                     struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_rename_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, struct iatt *buf,</div><div class='add'>+                      struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                      struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (preoldparent)</div><div class='del'>-                args-&gt;preparent = *preoldparent;</div><div class='del'>-        if (postoldparent)</div><div class='del'>-                args-&gt;postparent = *postoldparent;</div><div class='del'>-        if (prenewparent)</div><div class='del'>-                args-&gt;preparent2 = *prenewparent;</div><div class='del'>-        if (postnewparent)</div><div class='del'>-                args-&gt;postparent2 = *postnewparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (preoldparent)</div><div class='add'>+        args-&gt;preparent = *preoldparent;</div><div class='add'>+    if (postoldparent)</div><div class='add'>+        args-&gt;postparent = *postoldparent;</div><div class='add'>+    if (prenewparent)</div><div class='add'>+        args-&gt;preparent2 = *prenewparent;</div><div class='add'>+    if (postnewparent)</div><div class='add'>+        args-&gt;postparent2 = *postnewparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_link_store (default_args_t *args, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+args_link_store(default_args_t *args, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, oldloc);</div><div class='del'>-        loc_copy (&amp;args-&gt;loc2, newloc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, oldloc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc2, newloc);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_link_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   inode_t *inode, struct iatt *buf,</div><div class='del'>-                   struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+args_link_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                    inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_create_store (default_args_t *args,</div><div class='del'>-                  loc_t *loc, int32_t flags, mode_t mode,</div><div class='add'>+args_create_store(default_args_t *args, loc_t *loc, int32_t flags, mode_t mode,</div><div class='ctx'>                   mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;flags = flags;</div><div class='del'>-        args-&gt;mode = mode;</div><div class='del'>-        args-&gt;umask = umask;</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    args-&gt;mode = mode;</div><div class='add'>+    args-&gt;umask = umask;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_create_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_create_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                      struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_open_store (default_args_t *args, loc_t *loc, int32_t flags,</div><div class='del'>-                 fd_t *fd, dict_t *xdata)</div><div class='add'>+args_open_store(default_args_t *args, loc_t *loc, int32_t flags, fd_t *fd,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;flags = flags;</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_open_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   fd_t *fd, dict_t *xdata)</div><div class='add'>+args_open_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                    fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_readv_store (default_args_t *args, fd_t *fd, size_t size, off_t off,</div><div class='del'>-                  uint32_t flags, dict_t *xdata)</div><div class='add'>+args_readv_store(default_args_t *args, fd_t *fd, size_t size, off_t off,</div><div class='add'>+                 uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;size  = size;</div><div class='del'>-        args-&gt;offset  = off;</div><div class='del'>-        args-&gt;flags = flags;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;size = size;</div><div class='add'>+    args-&gt;offset = off;</div><div class='add'>+    args-&gt;flags = flags;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_readv_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-                    int32_t count, struct iatt *stbuf,</div><div class='del'>-                    struct iobref *iobref, dict_t *xdata)</div><div class='add'>+args_readv_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                     struct iovec *vector, int32_t count, struct iatt *stbuf,</div><div class='add'>+                     struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                args-&gt;vector = iov_dup (vector, count);</div><div class='del'>-                args-&gt;count = count;</div><div class='del'>-                args-&gt;stat = *stbuf;</div><div class='del'>-                args-&gt;iobref = iobref_ref (iobref);</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        args-&gt;vector = iov_dup(vector, count);</div><div class='add'>+        args-&gt;count = count;</div><div class='add'>+        args-&gt;stat = *stbuf;</div><div class='add'>+        args-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_writev_store (default_args_t *args, fd_t *fd, struct iovec *vector,</div><div class='del'>-                   int32_t count, off_t off, uint32_t flags,</div><div class='del'>-                   struct iobref *iobref, dict_t *xdata)</div><div class='add'>+args_writev_store(default_args_t *args, fd_t *fd, struct iovec *vector,</div><div class='add'>+                  int32_t count, off_t off, uint32_t flags,</div><div class='add'>+                  struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;vector = iov_dup (vector, count);</div><div class='del'>-        args-&gt;count  = count;</div><div class='del'>-        args-&gt;offset = off;</div><div class='del'>-        args-&gt;flags  = flags;</div><div class='del'>-        args-&gt;iobref = iobref_ref (iobref);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;vector = iov_dup(vector, count);</div><div class='add'>+    args-&gt;count = count;</div><div class='add'>+    args-&gt;offset = off;</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    args-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_writev_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+args_writev_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-                args-&gt;poststat = *postbuf;</div><div class='del'>-        if (prebuf)</div><div class='del'>-                args-&gt;prestat = *prebuf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        args-&gt;poststat = *postbuf;</div><div class='add'>+    if (prebuf)</div><div class='add'>+        args-&gt;prestat = *prebuf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_put_store (default_args_t *args, loc_t *loc, mode_t mode, mode_t umask,</div><div class='del'>-                uint32_t flags, struct iovec *vector, int32_t count, off_t off,</div><div class='del'>-                struct iobref *iobref, dict_t *xattr, dict_t *xdata)</div><div class='add'>+args_put_store(default_args_t *args, loc_t *loc, mode_t mode, mode_t umask,</div><div class='add'>+               uint32_t flags, struct iovec *vector, int32_t count, off_t off,</div><div class='add'>+               struct iobref *iobref, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;mode = mode;</div><div class='del'>-        args-&gt;umask = umask;</div><div class='del'>-        args-&gt;flags  = flags;</div><div class='del'>-        args-&gt;vector = iov_dup (vector, count);</div><div class='del'>-        args-&gt;count  = count;</div><div class='del'>-        args-&gt;offset = off;</div><div class='del'>-        args-&gt;iobref = iobref_ref (iobref);</div><div class='del'>-        if (xattr)</div><div class='del'>-                args-&gt;xattr = dict_ref (xattr);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;mode = mode;</div><div class='add'>+    args-&gt;umask = umask;</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    args-&gt;vector = iov_dup(vector, count);</div><div class='add'>+    args-&gt;count = count;</div><div class='add'>+    args-&gt;offset = off;</div><div class='add'>+    args-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+    if (xattr)</div><div class='add'>+        args-&gt;xattr = dict_ref(xattr);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_put_cbk_store (default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+args_put_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                   inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-                args-&gt;stat = *buf;</div><div class='del'>-        if (inode)</div><div class='del'>-                args-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (preparent)</div><div class='del'>-                args-&gt;preparent = *preparent;</div><div class='del'>-        if (postparent)</div><div class='del'>-                args-&gt;postparent = *postparent;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        args-&gt;stat = *buf;</div><div class='add'>+    if (inode)</div><div class='add'>+        args-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (preparent)</div><div class='add'>+        args-&gt;preparent = *preparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        args-&gt;postparent = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-args_flush_store (default_args_t *args, fd_t *fd, dict_t *xdata)</div><div class='add'>+args_flush_store(default_args_t *args, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_flush_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_flush_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fsync_store (default_args_t *args, fd_t *fd, int32_t datasync,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+args_fsync_store(default_args_t *args, fd_t *fd, int32_t datasync,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;datasync = datasync;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;datasync = datasync;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fsync_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+args_fsync_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                     struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (prebuf)</div><div class='del'>-                args-&gt;prestat = *prebuf;</div><div class='del'>-        if (postbuf)</div><div class='del'>-                args-&gt;poststat = *postbuf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (prebuf)</div><div class='add'>+        args-&gt;prestat = *prebuf;</div><div class='add'>+    if (postbuf)</div><div class='add'>+        args-&gt;poststat = *postbuf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_opendir_store (default_args_t *args, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+args_opendir_store(default_args_t *args, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_opendir_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      fd_t *fd, dict_t *xdata)</div><div class='add'>+args_opendir_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fsyncdir_store (default_args_t *args, fd_t *fd, int32_t datasync,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_fsyncdir_store(default_args_t *args, fd_t *fd, int32_t datasync,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;datasync = datasync;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;datasync = datasync;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-args_fsyncdir_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_fsyncdir_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_statfs_store (default_args_t *args, loc_t *loc, dict_t *xdata)</div><div class='add'>+args_statfs_store(default_args_t *args, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_statfs_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct statvfs *buf, dict_t *xdata)</div><div class='add'>+args_statfs_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                      int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                args-&gt;statvfs = *buf;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret == 0)</div><div class='add'>+        args-&gt;statvfs = *buf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_setxattr_store (default_args_t *args,</div><div class='del'>-                     loc_t *loc, dict_t *dict,</div><div class='del'>-                     int32_t flags, dict_t *xdata)</div><div class='add'>+args_setxattr_store(default_args_t *args, loc_t *loc, dict_t *dict,</div><div class='add'>+                    int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        /* TODO */</div><div class='del'>-        if (dict)</div><div class='del'>-                args-&gt;xattr = dict_ref (dict);</div><div class='del'>-        args-&gt;flags = flags;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    /* TODO */</div><div class='add'>+    if (dict)</div><div class='add'>+        args-&gt;xattr = dict_ref(dict);</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_setxattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret,</div><div class='del'>-                       int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_setxattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_getxattr_store (default_args_t *args,</div><div class='del'>-                     loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+args_getxattr_store(default_args_t *args, loc_t *loc, const char *name,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (name)</div><div class='del'>-                args-&gt;name = gf_strdup (name);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (name)</div><div class='add'>+        args-&gt;name = gf_strdup(name);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_getxattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *dict, dict_t *xdata)</div><div class='add'>+args_getxattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (dict)</div><div class='del'>-                args-&gt;xattr = dict_ref (dict);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (dict)</div><div class='add'>+        args-&gt;xattr = dict_ref(dict);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fsetxattr_store (default_args_t *args,</div><div class='del'>-                      fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+args_fsetxattr_store(default_args_t *args, fd_t *fd, dict_t *dict,</div><div class='add'>+                     int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                args-&gt;xattr = dict_ref (dict);</div><div class='del'>-        args-&gt;flags = flags;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (dict)</div><div class='add'>+        args-&gt;xattr = dict_ref(dict);</div><div class='add'>+    args-&gt;flags = flags;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fsetxattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_fsetxattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                         int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fgetxattr_store (default_args_t *args,</div><div class='del'>-                      fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+args_fgetxattr_store(default_args_t *args, fd_t *fd, const char *name,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        if (name)</div><div class='del'>-                args-&gt;name = gf_strdup (name);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (name)</div><div class='add'>+        args-&gt;name = gf_strdup(name);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fgetxattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        dict_t *dict, dict_t *xdata)</div><div class='add'>+args_fgetxattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                         int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (dict)</div><div class='del'>-                args-&gt;xattr = dict_ref (dict);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (dict)</div><div class='add'>+        args-&gt;xattr = dict_ref(dict);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_removexattr_store (default_args_t *args,</div><div class='del'>-                        loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+args_removexattr_store(default_args_t *args, loc_t *loc, const char *name,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;name = gf_strdup (name);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;name = gf_strdup(name);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_removexattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_removexattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                           int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fremovexattr_store (default_args_t *args,</div><div class='del'>-                         fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+args_fremovexattr_store(default_args_t *args, fd_t *fd, const char *name,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;name = gf_strdup (name);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;name = gf_strdup(name);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fremovexattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_fremovexattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                            int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_lk_store (default_args_t *args,</div><div class='del'>-               fd_t *fd, int32_t cmd,</div><div class='del'>-                struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+args_lk_store(default_args_t *args, fd_t *fd, int32_t cmd,</div><div class='add'>+              struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;cmd = cmd;</div><div class='del'>-        args-&gt;lock = *lock;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;cmd = cmd;</div><div class='add'>+    args-&gt;lock = *lock;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_lk_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+args_lk_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                  struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                args-&gt;lock = *lock;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret == 0)</div><div class='add'>+        args-&gt;lock = *lock;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_inodelk_store (default_args_t *args,</div><div class='del'>-                    const char *volume, loc_t *loc, int32_t cmd,</div><div class='del'>-                    struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+args_inodelk_store(default_args_t *args, const char *volume, loc_t *loc,</div><div class='add'>+                   int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (volume)</div><div class='del'>-                args-&gt;volume = gf_strdup (volume);</div><div class='add'>+    if (volume)</div><div class='add'>+        args-&gt;volume = gf_strdup(volume);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;cmd  = cmd;</div><div class='del'>-        args-&gt;lock = *lock;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;cmd = cmd;</div><div class='add'>+    args-&gt;lock = *lock;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_inodelk_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_inodelk_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_finodelk_store (default_args_t *args,</div><div class='del'>-                     const char *volume, fd_t *fd, int32_t cmd,</div><div class='del'>-                     struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+args_finodelk_store(default_args_t *args, const char *volume, fd_t *fd,</div><div class='add'>+                    int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd   = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        if (volume)</div><div class='del'>-                args-&gt;volume = gf_strdup (volume);</div><div class='add'>+    if (volume)</div><div class='add'>+        args-&gt;volume = gf_strdup(volume);</div><div class='ctx'> </div><div class='del'>-        args-&gt;cmd  = cmd;</div><div class='del'>-        args-&gt;lock = *lock;</div><div class='add'>+    args-&gt;cmd = cmd;</div><div class='add'>+    args-&gt;lock = *lock;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_finodelk_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_finodelk_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_entrylk_store (default_args_t *args,</div><div class='del'>-                    const char *volume, loc_t *loc, const char *name,</div><div class='del'>-                    entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+args_entrylk_store(default_args_t *args, const char *volume, loc_t *loc,</div><div class='add'>+                   const char *name, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (volume)</div><div class='del'>-                args-&gt;volume = gf_strdup (volume);</div><div class='add'>+    if (volume)</div><div class='add'>+        args-&gt;volume = gf_strdup(volume);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        args-&gt;entrylkcmd = cmd;</div><div class='del'>-        args-&gt;entrylktype = type;</div><div class='add'>+    args-&gt;entrylkcmd = cmd;</div><div class='add'>+    args-&gt;entrylktype = type;</div><div class='ctx'> </div><div class='del'>-        if (name)</div><div class='del'>-                args-&gt;name = gf_strdup (name);</div><div class='add'>+    if (name)</div><div class='add'>+        args-&gt;name = gf_strdup(name);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_entrylk_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_entrylk_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fentrylk_store (default_args_t *args,</div><div class='del'>-                     const char *volume, fd_t *fd, const char *name,</div><div class='del'>-                     entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+args_fentrylk_store(default_args_t *args, const char *volume, fd_t *fd,</div><div class='add'>+                    const char *name, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (volume)</div><div class='del'>-                args-&gt;volume = gf_strdup (volume);</div><div class='add'>+    if (volume)</div><div class='add'>+        args-&gt;volume = gf_strdup(volume);</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;entrylkcmd = cmd;</div><div class='del'>-        args-&gt;entrylktype = type;</div><div class='del'>-        if (name)</div><div class='del'>-                args-&gt;name = gf_strdup (name);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;entrylkcmd = cmd;</div><div class='add'>+    args-&gt;entrylktype = type;</div><div class='add'>+    if (name)</div><div class='add'>+        args-&gt;name = gf_strdup(name);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fentrylk_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_fentrylk_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-args_readdirp_store (default_args_t *args,</div><div class='del'>-                     fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;size = size;</div><div class='del'>-        args-&gt;offset = off;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_readdirp_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+args_readdirp_store(default_args_t *args, fd_t *fd, size_t size, off_t off,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *stub_entry = NULL, *entry = NULL;</div><div class='del'>-</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret &gt; 0) {</div><div class='del'>-                list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                        stub_entry = gf_dirent_for_name (entry-&gt;d_name);</div><div class='del'>-                        if (!stub_entry)</div><div class='del'>-                                goto out;</div><div class='del'>-                        stub_entry-&gt;d_off = entry-&gt;d_off;</div><div class='del'>-                        stub_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='del'>-                        stub_entry-&gt;d_stat = entry-&gt;d_stat;</div><div class='del'>-                        stub_entry-&gt;d_type = entry-&gt;d_type;</div><div class='del'>-                        if (entry-&gt;inode)</div><div class='del'>-                                stub_entry-&gt;inode = inode_ref (entry-&gt;inode);</div><div class='del'>-                        if (entry-&gt;dict)</div><div class='del'>-                                stub_entry-&gt;dict = dict_ref (entry-&gt;dict);</div><div class='del'>-                        list_add_tail (&amp;stub_entry-&gt;list,</div><div class='del'>-                                       &amp;args-&gt;entries.list);</div><div class='del'>-                }</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;size = size;</div><div class='add'>+    args-&gt;offset = off;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+args_readdirp_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    gf_dirent_t *stub_entry = NULL, *entry = NULL;</div><div class='add'>+</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &gt; 0) {</div><div class='add'>+        list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            stub_entry = gf_dirent_for_name(entry-&gt;d_name);</div><div class='add'>+            if (!stub_entry)</div><div class='add'>+                goto out;</div><div class='add'>+            stub_entry-&gt;d_off = entry-&gt;d_off;</div><div class='add'>+            stub_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='add'>+            stub_entry-&gt;d_stat = entry-&gt;d_stat;</div><div class='add'>+            stub_entry-&gt;d_type = entry-&gt;d_type;</div><div class='add'>+            if (entry-&gt;inode)</div><div class='add'>+                stub_entry-&gt;inode = inode_ref(entry-&gt;inode);</div><div class='add'>+            if (entry-&gt;dict)</div><div class='add'>+                stub_entry-&gt;dict = dict_ref(entry-&gt;dict);</div><div class='add'>+            list_add_tail(&amp;stub_entry-&gt;list, &amp;args-&gt;entries.list);</div><div class='ctx'>         }</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_readdir_store (default_args_t *args,</div><div class='del'>-                    fd_t *fd, size_t size,</div><div class='del'>-                    off_t off, dict_t *xdata)</div><div class='add'>+args_readdir_store(default_args_t *args, fd_t *fd, size_t size, off_t off,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;size = size;</div><div class='del'>-        args-&gt;offset = off;</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;size = size;</div><div class='add'>+    args-&gt;offset = off;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_readdir_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+args_readdir_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, gf_dirent_t *entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *stub_entry = NULL, *entry = NULL;</div><div class='add'>+    gf_dirent_t *stub_entry = NULL, *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret &gt; 0) {</div><div class='del'>-                list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                        stub_entry = gf_dirent_for_name (entry-&gt;d_name);</div><div class='del'>-                        if (!stub_entry)</div><div class='del'>-                                goto out;</div><div class='del'>-                        stub_entry-&gt;d_off = entry-&gt;d_off;</div><div class='del'>-                        stub_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='del'>-                        stub_entry-&gt;d_type = entry-&gt;d_type;</div><div class='del'>-                        list_add_tail (&amp;stub_entry-&gt;list,</div><div class='del'>-                                       &amp;args-&gt;entries.list);</div><div class='del'>-                }</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &gt; 0) {</div><div class='add'>+        list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            stub_entry = gf_dirent_for_name(entry-&gt;d_name);</div><div class='add'>+            if (!stub_entry)</div><div class='add'>+                goto out;</div><div class='add'>+            stub_entry-&gt;d_off = entry-&gt;d_off;</div><div class='add'>+            stub_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='add'>+            stub_entry-&gt;d_type = entry-&gt;d_type;</div><div class='add'>+            list_add_tail(&amp;stub_entry-&gt;list, &amp;args-&gt;entries.list);</div><div class='ctx'>         }</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_rchecksum_store (default_args_t *args,</div><div class='del'>-                      fd_t *fd, off_t offset, int32_t len, dict_t *xdata)</div><div class='add'>+args_rchecksum_store(default_args_t *args, fd_t *fd, off_t offset, int32_t len,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='del'>-        args-&gt;offset = offset;</div><div class='del'>-        args-&gt;size    = len;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    args-&gt;size = len;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_rchecksum_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        uint32_t weak_checksum, uint8_t *strong_checksum,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+args_rchecksum_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                         int32_t op_errno, uint32_t weak_checksum,</div><div class='add'>+                         uint8_t *strong_checksum, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                args-&gt;weak_checksum =</div><div class='del'>-                        weak_checksum;</div><div class='del'>-                args-&gt;strong_checksum =</div><div class='del'>-                        memdup (strong_checksum, SHA256_DIGEST_LENGTH);</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        args-&gt;weak_checksum = weak_checksum;</div><div class='add'>+        args-&gt;strong_checksum = memdup(strong_checksum, SHA256_DIGEST_LENGTH);</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_xattrop_store (default_args_t *args,</div><div class='del'>-                    loc_t *loc, gf_xattrop_flags_t optype,</div><div class='del'>-                    dict_t *xattr, dict_t *xdata)</div><div class='add'>+args_xattrop_store(default_args_t *args, loc_t *loc, gf_xattrop_flags_t optype,</div><div class='add'>+                   dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        args-&gt;optype = optype;</div><div class='del'>-        args-&gt;xattr = dict_ref (xattr);</div><div class='add'>+    args-&gt;optype = optype;</div><div class='add'>+    args-&gt;xattr = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_xattrop_cbk_store (default_args_cbk_t *args, int32_t op_ret,</div><div class='del'>-                        int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+args_xattrop_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xattr)</div><div class='del'>-                args-&gt;xattr = dict_ref (xattr);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xattr)</div><div class='add'>+        args-&gt;xattr = dict_ref(xattr);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_fxattrop_store (default_args_t *args,</div><div class='del'>-                     fd_t *fd, gf_xattrop_flags_t optype,</div><div class='del'>-                     dict_t *xattr, dict_t *xdata)</div><div class='add'>+args_fxattrop_store(default_args_t *args, fd_t *fd, gf_xattrop_flags_t optype,</div><div class='add'>+                    dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;fd = fd_ref (fd);</div><div class='add'>+    args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        args-&gt;optype = optype;</div><div class='del'>-        args-&gt;xattr = dict_ref (xattr);</div><div class='add'>+    args-&gt;optype = optype;</div><div class='add'>+    args-&gt;xattr = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fxattrop_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *xattr, dict_t *xdata)</div><div class='add'>+args_fxattrop_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xattr)</div><div class='del'>-                args-&gt;xattr = dict_ref (xattr);</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xattr)</div><div class='add'>+        args-&gt;xattr = dict_ref(xattr);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_setattr_store (default_args_t *args,</div><div class='del'>-                    loc_t *loc, struct iatt *stbuf,</div><div class='del'>-                    int32_t valid, dict_t *xdata)</div><div class='add'>+args_setattr_store(default_args_t *args, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+                   int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (stbuf)</div><div class='del'>-                args-&gt;stat = *stbuf;</div><div class='add'>+    if (stbuf)</div><div class='add'>+        args-&gt;stat = *stbuf;</div><div class='ctx'> </div><div class='del'>-        args-&gt;valid = valid;</div><div class='add'>+    args-&gt;valid = valid;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_setattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+args_setattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                       struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (statpre)</div><div class='del'>-                args-&gt;prestat = *statpre;</div><div class='del'>-        if (statpost)</div><div class='del'>-                args-&gt;poststat = *statpost;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (statpre)</div><div class='add'>+        args-&gt;prestat = *statpre;</div><div class='add'>+    if (statpost)</div><div class='add'>+        args-&gt;poststat = *statpost;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-args_fsetattr_store (default_args_t *args,</div><div class='del'>-                     fd_t *fd, struct iatt *stbuf,</div><div class='del'>-                     int32_t valid, dict_t *xdata)</div><div class='add'>+args_fsetattr_store(default_args_t *args, fd_t *fd, struct iatt *stbuf,</div><div class='add'>+                    int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        if (stbuf)</div><div class='del'>-                args-&gt;stat = *stbuf;</div><div class='add'>+    if (stbuf)</div><div class='add'>+        args-&gt;stat = *stbuf;</div><div class='ctx'> </div><div class='del'>-        args-&gt;valid = valid;</div><div class='add'>+    args-&gt;valid = valid;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-args_fsetattr_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+args_fsetattr_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                        struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (statpre)</div><div class='del'>-                args-&gt;prestat = *statpre;</div><div class='del'>-        if (statpost)</div><div class='del'>-                args-&gt;poststat = *statpost;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (statpre)</div><div class='add'>+        args-&gt;prestat = *statpre;</div><div class='add'>+    if (statpost)</div><div class='add'>+        args-&gt;poststat = *statpost;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fallocate_store (default_args_t *args, fd_t *fd,</div><div class='del'>-                      int32_t mode, off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+args_fallocate_store(default_args_t *args, fd_t *fd, int32_t mode, off_t offset,</div><div class='add'>+                     size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-	args-&gt;flags = mode;</div><div class='del'>-	args-&gt;offset = offset;</div><div class='del'>-	args-&gt;size = len;</div><div class='add'>+    args-&gt;flags = mode;</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    args-&gt;size = len;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_fallocate_cbk_store(default_args_cbk_t *args,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+args_fallocate_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                         int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                         struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (statpre)</div><div class='del'>-                args-&gt;prestat = *statpre;</div><div class='del'>-        if (statpost)</div><div class='del'>-                args-&gt;poststat = *statpost;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (statpre)</div><div class='add'>+        args-&gt;prestat = *statpre;</div><div class='add'>+    if (statpost)</div><div class='add'>+        args-&gt;poststat = *statpost;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_discard_store (default_args_t *args, fd_t *fd,</div><div class='del'>-		    off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+args_discard_store(default_args_t *args, fd_t *fd, off_t offset, size_t len,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-	args-&gt;offset = offset;</div><div class='del'>-	args-&gt;size = len;</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    args-&gt;size = len;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_discard_cbk_store(default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_discard_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                       int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                       struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (statpre)</div><div class='del'>-                args-&gt;prestat = *statpre;</div><div class='del'>-        if (statpost)</div><div class='del'>-                args-&gt;poststat = *statpost;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (statpre)</div><div class='add'>+        args-&gt;prestat = *statpre;</div><div class='add'>+    if (statpost)</div><div class='add'>+        args-&gt;poststat = *statpost;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_zerofill_store (default_args_t *args, fd_t *fd,</div><div class='del'>-                     off_t offset, off_t len, dict_t *xdata)</div><div class='add'>+args_zerofill_store(default_args_t *args, fd_t *fd, off_t offset, off_t len,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        args-&gt;offset = offset;</div><div class='del'>-        args-&gt;size = len;</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    args-&gt;size = len;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_zerofill_cbk_store(default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *statpre, struct iatt *statpost,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+args_zerofill_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                        int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                        struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (statpre)</div><div class='del'>-                args-&gt;prestat = *statpre;</div><div class='del'>-        if (statpost)</div><div class='del'>-                args-&gt;poststat = *statpost;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (statpre)</div><div class='add'>+        args-&gt;prestat = *statpre;</div><div class='add'>+    if (statpost)</div><div class='add'>+        args-&gt;poststat = *statpost;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_ipc_store (default_args_t *args,</div><div class='del'>-                int32_t op, dict_t *xdata)</div><div class='add'>+args_ipc_store(default_args_t *args, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;cmd = op;</div><div class='add'>+    args-&gt;cmd = op;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_ipc_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+args_ipc_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_seek_store (default_args_t *args, fd_t *fd,</div><div class='del'>-                 off_t offset, gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+args_seek_store(default_args_t *args, fd_t *fd, off_t offset,</div><div class='add'>+                gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                args-&gt;fd = fd_ref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        args-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        args-&gt;offset = offset;</div><div class='del'>-        args-&gt;what = what;</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    args-&gt;what = what;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_seek_cbk_store (default_args_cbk_t *args, int32_t op_ret,</div><div class='del'>-                     int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='add'>+args_seek_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                    off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        args-&gt;offset = offset;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_getactivelk_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+args_getactivelk_cbk_store(default_args_cbk_t *args, int32_t op_ret,</div><div class='add'>+                           int32_t op_errno, lock_migration_info_t *locklist,</div><div class='add'>+                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        lock_migration_info_t  *stub_entry = NULL, *entry = NULL;</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    lock_migration_info_t *stub_entry = NULL, *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        /*op_ret needs to carry the number of locks present in the list*/</div><div class='del'>-        if (op_ret &gt; 0) {</div><div class='del'>-                list_for_each_entry (entry, &amp;locklist-&gt;list, list) {</div><div class='del'>-                        stub_entry = GF_CALLOC (1, sizeof (*stub_entry),</div><div class='del'>-                                                gf_common_mt_char);</div><div class='del'>-                        if (!stub_entry) {</div><div class='del'>-                               ret = -1;</div><div class='del'>-                               goto out;</div><div class='del'>-                        }</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    /*op_ret needs to carry the number of locks present in the list*/</div><div class='add'>+    if (op_ret &gt; 0) {</div><div class='add'>+        list_for_each_entry(entry, &amp;locklist-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            stub_entry = GF_CALLOC(1, sizeof(*stub_entry), gf_common_mt_char);</div><div class='add'>+            if (!stub_entry) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        INIT_LIST_HEAD (&amp;stub_entry-&gt;list);</div><div class='del'>-                        stub_entry-&gt;flock = entry-&gt;flock;</div><div class='add'>+            INIT_LIST_HEAD(&amp;stub_entry-&gt;list);</div><div class='add'>+            stub_entry-&gt;flock = entry-&gt;flock;</div><div class='ctx'> </div><div class='del'>-                        stub_entry-&gt;lk_flags = entry-&gt;lk_flags;</div><div class='add'>+            stub_entry-&gt;lk_flags = entry-&gt;lk_flags;</div><div class='ctx'> </div><div class='del'>-                        stub_entry-&gt;client_uid = gf_strdup (entry-&gt;client_uid);</div><div class='del'>-                        if (!stub_entry-&gt;client_uid) {</div><div class='del'>-                                GF_FREE (stub_entry);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+            stub_entry-&gt;client_uid = gf_strdup(entry-&gt;client_uid);</div><div class='add'>+            if (!stub_entry-&gt;client_uid) {</div><div class='add'>+                GF_FREE(stub_entry);</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        list_add_tail (&amp;stub_entry-&gt;list,</div><div class='del'>-                                       &amp;args-&gt;locklist.list);</div><div class='del'>-                }</div><div class='add'>+            list_add_tail(&amp;stub_entry-&gt;list, &amp;args-&gt;locklist.list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_setactivelk_store (default_args_t *args, loc_t *loc,</div><div class='del'>-                          lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+args_setactivelk_store(default_args_t *args, loc_t *loc,</div><div class='add'>+                       lock_migration_info_t *locklist, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        lock_migration_info_t  *stub_entry = NULL, *entry = NULL;</div><div class='del'>-        int     ret = 0;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (entry, &amp;locklist-&gt;list, list) {</div><div class='del'>-                stub_entry = GF_CALLOC (1, sizeof (*stub_entry),</div><div class='del'>-                                        gf_common_mt_lock_mig);</div><div class='del'>-                if (!stub_entry) {</div><div class='del'>-                       ret = -1;</div><div class='del'>-                       goto out;</div><div class='del'>-                }</div><div class='add'>+    lock_migration_info_t *stub_entry = NULL, *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-                INIT_LIST_HEAD (&amp;stub_entry-&gt;list);</div><div class='del'>-                stub_entry-&gt;flock = entry-&gt;flock;</div><div class='add'>+    list_for_each_entry(entry, &amp;locklist-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        stub_entry = GF_CALLOC(1, sizeof(*stub_entry), gf_common_mt_lock_mig);</div><div class='add'>+        if (!stub_entry) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                stub_entry-&gt;lk_flags = entry-&gt;lk_flags;</div><div class='add'>+        INIT_LIST_HEAD(&amp;stub_entry-&gt;list);</div><div class='add'>+        stub_entry-&gt;flock = entry-&gt;flock;</div><div class='ctx'> </div><div class='del'>-                stub_entry-&gt;client_uid = gf_strdup (entry-&gt;client_uid);</div><div class='del'>-                if (!stub_entry-&gt;client_uid) {</div><div class='del'>-                        GF_FREE (stub_entry);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        stub_entry-&gt;lk_flags = entry-&gt;lk_flags;</div><div class='ctx'> </div><div class='del'>-                list_add_tail (&amp;stub_entry-&gt;list,</div><div class='del'>-                               &amp;args-&gt;locklist.list);</div><div class='add'>+        stub_entry-&gt;client_uid = gf_strdup(entry-&gt;client_uid);</div><div class='add'>+        if (!stub_entry-&gt;client_uid) {</div><div class='add'>+            GF_FREE(stub_entry);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='add'>+        list_add_tail(&amp;stub_entry-&gt;list, &amp;args-&gt;locklist.list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-args_lease_store (default_args_t *args, loc_t *loc, struct gf_lease *lease,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+args_lease_store(default_args_t *args, loc_t *loc, struct gf_lease *lease,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;lease = *lease;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;lease = *lease;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-args_lease_cbk_store (default_args_cbk_t *args,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='add'>+args_lease_cbk_store(default_args_cbk_t *args, int32_t op_ret, int32_t op_errno,</div><div class='ctx'>                      struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                args-&gt;lease = *lease;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret == 0)</div><div class='add'>+        args-&gt;lease = *lease;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_icreate_store (default_args_t *args,</div><div class='del'>-                    loc_t *loc, mode_t mode, dict_t *xdata)</div><div class='add'>+args_icreate_store(default_args_t *args, loc_t *loc, mode_t mode, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;mode = mode;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;mode = mode;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-args_namelink_store (default_args_t *args,</div><div class='del'>-                     loc_t *loc, dict_t *xdata)</div><div class='add'>+args_namelink_store(default_args_t *args, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-args_cbk_wipe (default_args_cbk_t *args_cbk)</div><div class='add'>+args_cbk_wipe(default_args_cbk_t *args_cbk)</div><div class='ctx'> {</div><div class='del'>-        if (!args_cbk)</div><div class='del'>-                return;</div><div class='del'>-        if (args_cbk-&gt;inode)</div><div class='del'>-                inode_unref (args_cbk-&gt;inode);</div><div class='add'>+    if (!args_cbk)</div><div class='add'>+        return;</div><div class='add'>+    if (args_cbk-&gt;inode)</div><div class='add'>+        inode_unref(args_cbk-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        GF_FREE ((char *)args_cbk-&gt;buf);</div><div class='add'>+    GF_FREE((char *)args_cbk-&gt;buf);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args_cbk-&gt;vector);</div><div class='add'>+    GF_FREE(args_cbk-&gt;vector);</div><div class='ctx'> </div><div class='del'>-        if (args_cbk-&gt;iobref)</div><div class='del'>-                iobref_unref (args_cbk-&gt;iobref);</div><div class='add'>+    if (args_cbk-&gt;iobref)</div><div class='add'>+        iobref_unref(args_cbk-&gt;iobref);</div><div class='ctx'> </div><div class='del'>-        if (args_cbk-&gt;fd)</div><div class='del'>-                fd_unref (args_cbk-&gt;fd);</div><div class='add'>+    if (args_cbk-&gt;fd)</div><div class='add'>+        fd_unref(args_cbk-&gt;fd);</div><div class='ctx'> </div><div class='del'>-        if (args_cbk-&gt;xattr)</div><div class='del'>-                dict_unref (args_cbk-&gt;xattr);</div><div class='add'>+    if (args_cbk-&gt;xattr)</div><div class='add'>+        dict_unref(args_cbk-&gt;xattr);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args_cbk-&gt;strong_checksum);</div><div class='add'>+    GF_FREE(args_cbk-&gt;strong_checksum);</div><div class='ctx'> </div><div class='del'>-        if (args_cbk-&gt;xdata)</div><div class='del'>-                dict_unref (args_cbk-&gt;xdata);</div><div class='add'>+    if (args_cbk-&gt;xdata)</div><div class='add'>+        dict_unref(args_cbk-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (&amp;args_cbk-&gt;entries.list))</div><div class='del'>-                gf_dirent_free (&amp;args_cbk-&gt;entries);</div><div class='add'>+    if (!list_empty(&amp;args_cbk-&gt;entries.list))</div><div class='add'>+        gf_dirent_free(&amp;args_cbk-&gt;entries);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-args_wipe (default_args_t *args)</div><div class='add'>+args_wipe(default_args_t *args)</div><div class='ctx'> {</div><div class='del'>-        if (!args)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;args-&gt;loc);</div><div class='add'>+    if (!args)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;args-&gt;loc2);</div><div class='add'>+    loc_wipe(&amp;args-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;fd)</div><div class='del'>-                fd_unref (args-&gt;fd);</div><div class='add'>+    loc_wipe(&amp;args-&gt;loc2);</div><div class='ctx'> </div><div class='del'>-        GF_FREE ((char *)args-&gt;linkname);</div><div class='add'>+    if (args-&gt;fd)</div><div class='add'>+        fd_unref(args-&gt;fd);</div><div class='ctx'> </div><div class='del'>-	GF_FREE (args-&gt;vector);</div><div class='add'>+    GF_FREE((char *)args-&gt;linkname);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;iobref)</div><div class='del'>-                iobref_unref (args-&gt;iobref);</div><div class='add'>+    GF_FREE(args-&gt;vector);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;xattr)</div><div class='del'>-                dict_unref (args-&gt;xattr);</div><div class='add'>+    if (args-&gt;iobref)</div><div class='add'>+        iobref_unref(args-&gt;iobref);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;xdata)</div><div class='del'>-                dict_unref (args-&gt;xdata);</div><div class='add'>+    if (args-&gt;xattr)</div><div class='add'>+        dict_unref(args-&gt;xattr);</div><div class='ctx'> </div><div class='del'>-	GF_FREE ((char *)args-&gt;name);</div><div class='add'>+    if (args-&gt;xdata)</div><div class='add'>+        dict_unref(args-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-	GF_FREE ((char *)args-&gt;volume);</div><div class='add'>+    GF_FREE((char *)args-&gt;name);</div><div class='ctx'> </div><div class='add'>+    GF_FREE((char *)args-&gt;volume);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-args_cbk_init (default_args_cbk_t *args_cbk)</div><div class='add'>+args_cbk_init(default_args_cbk_t *args_cbk)</div><div class='ctx'> {</div><div class='del'>-        INIT_LIST_HEAD (&amp;args_cbk-&gt;entries);</div><div class='add'>+    INIT_LIST_HEAD(&amp;args_cbk-&gt;entries);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/defaults-tmpl.c b/libglusterfs/src/defaults-tmpl.c<br/>index 74550030446..2ce5ec7c685 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/defaults-tmpl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/defaults-tmpl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/defaults-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/defaults-tmpl.c</a></div><div class='hunk'>@@ -31,206 +31,191 @@</div><div class='ctx'> #pragma generate</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops _default_fops = {</div><div class='del'>-        .create = default_create,</div><div class='del'>-        .open = default_open,</div><div class='del'>-        .stat = default_stat,</div><div class='del'>-        .readlink = default_readlink,</div><div class='del'>-        .mknod = default_mknod,</div><div class='del'>-        .mkdir = default_mkdir,</div><div class='del'>-        .unlink = default_unlink,</div><div class='del'>-        .rmdir = default_rmdir,</div><div class='del'>-        .symlink = default_symlink,</div><div class='del'>-        .rename = default_rename,</div><div class='del'>-        .link = default_link,</div><div class='del'>-        .truncate = default_truncate,</div><div class='del'>-        .readv = default_readv,</div><div class='del'>-        .writev = default_writev,</div><div class='del'>-        .statfs = default_statfs,</div><div class='del'>-        .flush = default_flush,</div><div class='del'>-        .fsync = default_fsync,</div><div class='del'>-        .setxattr = default_setxattr,</div><div class='del'>-        .getxattr = default_getxattr,</div><div class='del'>-        .fsetxattr = default_fsetxattr,</div><div class='del'>-        .fgetxattr = default_fgetxattr,</div><div class='del'>-        .removexattr = default_removexattr,</div><div class='del'>-        .fremovexattr = default_fremovexattr,</div><div class='del'>-        .opendir = default_opendir,</div><div class='del'>-        .readdir = default_readdir,</div><div class='del'>-        .readdirp = default_readdirp,</div><div class='del'>-        .fsyncdir = default_fsyncdir,</div><div class='del'>-        .access = default_access,</div><div class='del'>-        .ftruncate = default_ftruncate,</div><div class='del'>-        .fstat = default_fstat,</div><div class='del'>-        .lk = default_lk,</div><div class='del'>-        .inodelk = default_inodelk,</div><div class='del'>-        .finodelk = default_finodelk,</div><div class='del'>-        .entrylk = default_entrylk,</div><div class='del'>-        .fentrylk = default_fentrylk,</div><div class='del'>-        .lookup = default_lookup,</div><div class='del'>-        .rchecksum = default_rchecksum,</div><div class='del'>-        .xattrop = default_xattrop,</div><div class='del'>-        .fxattrop = default_fxattrop,</div><div class='del'>-        .setattr = default_setattr,</div><div class='del'>-        .fsetattr = default_fsetattr,</div><div class='del'>-	.fallocate = default_fallocate,</div><div class='del'>-	.discard = default_discard,</div><div class='del'>-        .zerofill = default_zerofill,</div><div class='del'>-        .ipc = default_ipc,</div><div class='del'>-        .seek = default_seek,</div><div class='del'>-</div><div class='del'>-        .getspec = default_getspec,</div><div class='del'>-        .getactivelk = default_getactivelk,</div><div class='del'>-        .setactivelk = default_setactivelk,</div><div class='del'>-        .put = default_put,</div><div class='del'>-        .icreate = default_icreate,</div><div class='del'>-        .namelink = default_namelink,</div><div class='add'>+    .create = default_create,</div><div class='add'>+    .open = default_open,</div><div class='add'>+    .stat = default_stat,</div><div class='add'>+    .readlink = default_readlink,</div><div class='add'>+    .mknod = default_mknod,</div><div class='add'>+    .mkdir = default_mkdir,</div><div class='add'>+    .unlink = default_unlink,</div><div class='add'>+    .rmdir = default_rmdir,</div><div class='add'>+    .symlink = default_symlink,</div><div class='add'>+    .rename = default_rename,</div><div class='add'>+    .link = default_link,</div><div class='add'>+    .truncate = default_truncate,</div><div class='add'>+    .readv = default_readv,</div><div class='add'>+    .writev = default_writev,</div><div class='add'>+    .statfs = default_statfs,</div><div class='add'>+    .flush = default_flush,</div><div class='add'>+    .fsync = default_fsync,</div><div class='add'>+    .setxattr = default_setxattr,</div><div class='add'>+    .getxattr = default_getxattr,</div><div class='add'>+    .fsetxattr = default_fsetxattr,</div><div class='add'>+    .fgetxattr = default_fgetxattr,</div><div class='add'>+    .removexattr = default_removexattr,</div><div class='add'>+    .fremovexattr = default_fremovexattr,</div><div class='add'>+    .opendir = default_opendir,</div><div class='add'>+    .readdir = default_readdir,</div><div class='add'>+    .readdirp = default_readdirp,</div><div class='add'>+    .fsyncdir = default_fsyncdir,</div><div class='add'>+    .access = default_access,</div><div class='add'>+    .ftruncate = default_ftruncate,</div><div class='add'>+    .fstat = default_fstat,</div><div class='add'>+    .lk = default_lk,</div><div class='add'>+    .inodelk = default_inodelk,</div><div class='add'>+    .finodelk = default_finodelk,</div><div class='add'>+    .entrylk = default_entrylk,</div><div class='add'>+    .fentrylk = default_fentrylk,</div><div class='add'>+    .lookup = default_lookup,</div><div class='add'>+    .rchecksum = default_rchecksum,</div><div class='add'>+    .xattrop = default_xattrop,</div><div class='add'>+    .fxattrop = default_fxattrop,</div><div class='add'>+    .setattr = default_setattr,</div><div class='add'>+    .fsetattr = default_fsetattr,</div><div class='add'>+    .fallocate = default_fallocate,</div><div class='add'>+    .discard = default_discard,</div><div class='add'>+    .zerofill = default_zerofill,</div><div class='add'>+    .ipc = default_ipc,</div><div class='add'>+    .seek = default_seek,</div><div class='add'>+</div><div class='add'>+    .getspec = default_getspec,</div><div class='add'>+    .getactivelk = default_getactivelk,</div><div class='add'>+    .setactivelk = default_setactivelk,</div><div class='add'>+    .put = default_put,</div><div class='add'>+    .icreate = default_icreate,</div><div class='add'>+    .namelink = default_namelink,</div><div class='ctx'> };</div><div class='ctx'> struct xlator_fops *default_fops = &amp;_default_fops;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Remaining functions don't follow the fop calling conventions, so they're</div><div class='ctx'>  * not generated.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-default_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+default_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        gf_log_callingfn (this-&gt;name, GF_LOG_DEBUG, "xlator does not "</div><div class='del'>-                          "implement forget_cbk");</div><div class='del'>-        return 0;</div><div class='add'>+    gf_log_callingfn(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                     "xlator does not "</div><div class='add'>+                     "implement forget_cbk");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-default_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+default_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        gf_log_callingfn (this-&gt;name, GF_LOG_DEBUG, "xlator does not "</div><div class='del'>-                          "implement releasedir_cbk");</div><div class='del'>-        return 0;</div><div class='add'>+    gf_log_callingfn(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                     "xlator does not "</div><div class='add'>+                     "implement releasedir_cbk");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-default_release (xlator_t *this, fd_t *fd)</div><div class='add'>+default_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        gf_log_callingfn (this-&gt;name, GF_LOG_DEBUG, "xlator does not "</div><div class='del'>-                          "implement release_cbk");</div><div class='del'>-        return 0;</div><div class='add'>+    gf_log_callingfn(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                     "xlator does not "</div><div class='add'>+                     "implement release_cbk");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* notify */</div><div class='ctx'> int</div><div class='del'>-default_notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+default_notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        GF_UNUSED int ret = 0;</div><div class='del'>-        switch (event) {</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_PARENT_UP:</div><div class='del'>-        case GF_EVENT_PARENT_DOWN:</div><div class='del'>-        {</div><div class='del'>-                xlator_list_t *list = this-&gt;children;</div><div class='del'>-</div><div class='del'>-                while (list) {</div><div class='del'>-                        xlator_notify (list-&gt;xlator, event, this);</div><div class='del'>-                        list = list-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+        case GF_EVENT_PARENT_DOWN: {</div><div class='add'>+            xlator_list_t *list = this-&gt;children;</div><div class='add'>+</div><div class='add'>+            while (list) {</div><div class='add'>+                xlator_notify(list-&gt;xlator, event, this);</div><div class='add'>+                list = list-&gt;next;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='ctx'>         case GF_EVENT_CHILD_CONNECTING:</div><div class='ctx'>         case GF_EVENT_CHILD_DOWN:</div><div class='ctx'>         case GF_EVENT_CHILD_UP:</div><div class='del'>-        case GF_EVENT_AUTH_FAILED:</div><div class='del'>-        {</div><div class='del'>-                xlator_list_t *parent = this-&gt;parents;</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Handle case of CHILD_* &amp; AUTH_FAILED event specially, send</div><div class='del'>-                 * it to fuse.</div><div class='del'>-                 */</div><div class='del'>-                if (!parent &amp;&amp; this-&gt;ctx &amp;&amp; this-&gt;ctx-&gt;master) {</div><div class='del'>-                        xlator_notify (this-&gt;ctx-&gt;master, event, this-&gt;graph,</div><div class='del'>-                                       NULL);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                while (parent) {</div><div class='del'>-                        if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='del'>-                                xlator_notify (parent-&gt;xlator, event,</div><div class='del'>-                                               this, NULL);</div><div class='del'>-                        parent = parent-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-        case GF_EVENT_UPCALL:</div><div class='del'>-        {</div><div class='del'>-                xlator_list_t *parent = this-&gt;parents;</div><div class='del'>-</div><div class='del'>-                if (!parent &amp;&amp; this-&gt;ctx &amp;&amp; this-&gt;ctx-&gt;master)</div><div class='del'>-                        xlator_notify (this-&gt;ctx-&gt;master, event, data, NULL);</div><div class='del'>-</div><div class='del'>-                while (parent) {</div><div class='del'>-                        if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='del'>-                                xlator_notify (parent-&gt;xlator, event,</div><div class='del'>-                                               data, NULL);</div><div class='del'>-                        parent = parent-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-        case GF_EVENT_CHILD_PING:</div><div class='del'>-        {</div><div class='del'>-                xlator_list_t *parent = this-&gt;parents;</div><div class='del'>-</div><div class='del'>-                while (parent) {</div><div class='del'>-                        if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='del'>-                                XLATOR_NOTIFY (ret, parent-&gt;xlator, event,</div><div class='del'>-                                               this, data);</div><div class='del'>-                        parent = parent-&gt;next;</div><div class='del'>-                }</div><div class='add'>+        case GF_EVENT_AUTH_FAILED: {</div><div class='add'>+            xlator_list_t *parent = this-&gt;parents;</div><div class='add'>+</div><div class='add'>+            /*</div><div class='add'>+             * Handle case of CHILD_* &amp; AUTH_FAILED event specially, send</div><div class='add'>+             * it to fuse.</div><div class='add'>+             */</div><div class='add'>+            if (!parent &amp;&amp; this-&gt;ctx &amp;&amp; this-&gt;ctx-&gt;master) {</div><div class='add'>+                xlator_notify(this-&gt;ctx-&gt;master, event, this-&gt;graph, NULL);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            while (parent) {</div><div class='add'>+                if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='add'>+                    xlator_notify(parent-&gt;xlator, event, this, NULL);</div><div class='add'>+                parent = parent-&gt;next;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='add'>+        case GF_EVENT_UPCALL: {</div><div class='add'>+            xlator_list_t *parent = this-&gt;parents;</div><div class='add'>+</div><div class='add'>+            if (!parent &amp;&amp; this-&gt;ctx &amp;&amp; this-&gt;ctx-&gt;master)</div><div class='add'>+                xlator_notify(this-&gt;ctx-&gt;master, event, data, NULL);</div><div class='add'>+</div><div class='add'>+            while (parent) {</div><div class='add'>+                if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='add'>+                    xlator_notify(parent-&gt;xlator, event, data, NULL);</div><div class='add'>+                parent = parent-&gt;next;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='add'>+        case GF_EVENT_CHILD_PING: {</div><div class='add'>+            xlator_list_t *parent = this-&gt;parents;</div><div class='add'>+</div><div class='add'>+            while (parent) {</div><div class='add'>+                if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='add'>+                    XLATOR_NOTIFY(ret, parent-&gt;xlator, event, this, data);</div><div class='add'>+                parent = parent-&gt;next;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='add'>+        case GF_EVENT_CLEANUP: {</div><div class='add'>+            xlator_list_t *list = this-&gt;children;</div><div class='add'>+</div><div class='add'>+            while (list) {</div><div class='add'>+                xlator_notify(list-&gt;xlator, event, this);</div><div class='add'>+                list = list-&gt;next;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        default: {</div><div class='add'>+            xlator_list_t *parent = this-&gt;parents;</div><div class='add'>+</div><div class='add'>+            while (parent) {</div><div class='add'>+                if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='add'>+                    xlator_notify(parent-&gt;xlator, event, this, NULL);</div><div class='add'>+                parent = parent-&gt;next;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        break;</div><div class='del'>-        case GF_EVENT_CLEANUP:</div><div class='del'>-        {</div><div class='del'>-                xlator_list_t *list = this-&gt;children;</div><div class='del'>-</div><div class='del'>-                while (list) {</div><div class='del'>-                        xlator_notify (list-&gt;xlator, event, this);</div><div class='del'>-                        list = list-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        default:</div><div class='del'>-        {</div><div class='del'>-                xlator_list_t *parent = this-&gt;parents;</div><div class='del'>-</div><div class='del'>-                while (parent) {</div><div class='del'>-                        if (parent-&gt;xlator-&gt;init_succeeded)</div><div class='del'>-                                xlator_notify (parent-&gt;xlator, event,</div><div class='del'>-                                               this, NULL);</div><div class='del'>-                        parent = parent-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        /*</div><div class='del'>-         * Apparently our picky-about-everything else coding standard allows</div><div class='del'>-         * adjacent same-indendation-level close braces.  Clearly it has</div><div class='del'>-         * nothing to do with readability.</div><div class='del'>-         */</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+            /*</div><div class='add'>+             * Apparently our picky-about-everything else coding standard allows</div><div class='add'>+             * adjacent same-indendation-level close braces.  Clearly it has</div><div class='add'>+             * nothing to do with readability.</div><div class='add'>+             */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-default_mem_acct_init (xlator_t *this)</div><div class='add'>+default_mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_common_mt_end);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_common_mt_end);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-default_fini (xlator_t *this)</div><div class='add'>+default_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (this &amp;&amp; this-&gt;private)</div><div class='del'>-                GF_FREE (this-&gt;private);</div><div class='add'>+    if (this &amp;&amp; this-&gt;private)</div><div class='add'>+        GF_FREE(this-&gt;private);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c<br/>index b7cf2b0c8fe..2e69da98fdc 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/dict.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/dict.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/dict.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/dict.c</a></div><div class='hunk'>@@ -31,213 +31,209 @@</div><div class='ctx'> #include "glusterfs-fops.h"</div><div class='ctx'> </div><div class='ctx'> struct dict_cmp {</div><div class='del'>-        dict_t *dict;</div><div class='del'>-        gf_boolean_t (*value_ignore) (char *k);</div><div class='add'>+    dict_t *dict;</div><div class='add'>+    gf_boolean_t (*value_ignore)(char *k);</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-#define VALIDATE_DATA_AND_LOG(data, type, key, ret_val) do {                 \</div><div class='del'>-                if (!data || !data-&gt;data) {                             \</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL, \</div><div class='del'>-                                          LG_MSG_INVALID_ARG, "data is NULL"); \</div><div class='del'>-                        return ret_val;                                 \</div><div class='del'>-                }                                                       \</div><div class='del'>-                /* Not of the asked type, or old version */             \</div><div class='del'>-                if ((data-&gt;data_type != type) &amp;&amp;                        \</div><div class='del'>-                    (data-&gt;data_type != GF_DATA_TYPE_STR_OLD)) {        \</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_INFO, EINVAL,  \</div><div class='del'>-                                          LG_MSG_INVALID_ARG,           \</div><div class='del'>-                                          "key %s, %s type asked, has %s type", \</div><div class='del'>-                                          key, data_type_name[type],         \</div><div class='del'>-                                          data_type_name[data-&gt;data_type]); \</div><div class='del'>-                }                                                       \</div><div class='del'>-        } while (0)</div><div class='add'>+#define VALIDATE_DATA_AND_LOG(data, type, key, ret_val)                        \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!data || !data-&gt;data) {                                            \</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL,                   \</div><div class='add'>+                             LG_MSG_INVALID_ARG, "data is NULL");              \</div><div class='add'>+            return ret_val;                                                    \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        /* Not of the asked type, or old version */                            \</div><div class='add'>+        if ((data-&gt;data_type != type) &amp;&amp;                                       \</div><div class='add'>+            (data-&gt;data_type != GF_DATA_TYPE_STR_OLD)) {                       \</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_INFO, EINVAL, LG_MSG_INVALID_ARG,  \</div><div class='add'>+                             "key %s, %s type asked, has %s type", key,        \</div><div class='add'>+                             data_type_name[type],                             \</div><div class='add'>+                             data_type_name[data-&gt;data_type]);                 \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> static data_t *</div><div class='del'>-get_new_data ()</div><div class='add'>+get_new_data()</div><div class='ctx'> {</div><div class='del'>-        data_t *data = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        data = mem_get (THIS-&gt;ctx-&gt;dict_data_pool);</div><div class='del'>-        if (!data)</div><div class='del'>-                return NULL;</div><div class='add'>+    data = mem_get(THIS-&gt;ctx-&gt;dict_data_pool);</div><div class='add'>+    if (!data)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INIT (data-&gt;refcount, 0);</div><div class='del'>-        data-&gt;is_static = _gf_false;</div><div class='del'>-        LOCK_INIT (&amp;data-&gt;lock);</div><div class='add'>+    GF_ATOMIC_INIT(data-&gt;refcount, 0);</div><div class='add'>+    data-&gt;is_static = _gf_false;</div><div class='add'>+    LOCK_INIT(&amp;data-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static dict_t *</div><div class='del'>-get_new_dict_full (int size_hint)</div><div class='add'>+get_new_dict_full(int size_hint)</div><div class='ctx'> {</div><div class='del'>-        dict_t *dict = mem_get0 (THIS-&gt;ctx-&gt;dict_pool);</div><div class='add'>+    dict_t *dict = mem_get0(THIS-&gt;ctx-&gt;dict_pool);</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!dict) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict-&gt;hash_size = size_hint;</div><div class='del'>-        if (size_hint == 1) {</div><div class='del'>-                /*</div><div class='del'>-                 * This is the only case we ever see currently.  If we ever</div><div class='del'>-                 * need to support resizing the hash table, the resize function</div><div class='del'>-                 * will have to take into account the possibility that</div><div class='del'>-                 * "members" is not separately allocated (i.e. don't just call</div><div class='del'>-                 * realloc() blindly.</div><div class='del'>-                 */</div><div class='del'>-                dict-&gt;members = &amp;dict-&gt;members_internal;</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                /*</div><div class='del'>-                 * We actually need to allocate space for size_hint *pointers*</div><div class='del'>-                 * but we actually allocate space for one *structure*.  Since</div><div class='del'>-                 * a data_pair_t consists of five pointers, we're wasting four</div><div class='del'>-                 * pointers' worth for N=1, and will overrun what we allocated</div><div class='del'>-                 * for N&gt;5.  If anybody ever starts using size_hint, we'll need</div><div class='del'>-                 * to fix this.</div><div class='del'>-                 */</div><div class='del'>-                GF_ASSERT (size_hint &lt;=</div><div class='del'>-                           (sizeof(data_pair_t) / sizeof(data_pair_t *)));</div><div class='del'>-                dict-&gt;members = mem_get0 (THIS-&gt;ctx-&gt;dict_pair_pool);</div><div class='del'>-                if (!dict-&gt;members) {</div><div class='del'>-                        mem_put (dict);</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='add'>+    dict-&gt;hash_size = size_hint;</div><div class='add'>+    if (size_hint == 1) {</div><div class='add'>+        /*</div><div class='add'>+         * This is the only case we ever see currently.  If we ever</div><div class='add'>+         * need to support resizing the hash table, the resize function</div><div class='add'>+         * will have to take into account the possibility that</div><div class='add'>+         * "members" is not separately allocated (i.e. don't just call</div><div class='add'>+         * realloc() blindly.</div><div class='add'>+         */</div><div class='add'>+        dict-&gt;members = &amp;dict-&gt;members_internal;</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * We actually need to allocate space for size_hint *pointers*</div><div class='add'>+         * but we actually allocate space for one *structure*.  Since</div><div class='add'>+         * a data_pair_t consists of five pointers, we're wasting four</div><div class='add'>+         * pointers' worth for N=1, and will overrun what we allocated</div><div class='add'>+         * for N&gt;5.  If anybody ever starts using size_hint, we'll need</div><div class='add'>+         * to fix this.</div><div class='add'>+         */</div><div class='add'>+        GF_ASSERT(size_hint &lt;= (sizeof(data_pair_t) / sizeof(data_pair_t *)));</div><div class='add'>+        dict-&gt;members = mem_get0(THIS-&gt;ctx-&gt;dict_pair_pool);</div><div class='add'>+        if (!dict-&gt;members) {</div><div class='add'>+            mem_put(dict);</div><div class='add'>+            return NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;dict-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;dict-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return dict;</div><div class='add'>+    return dict;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-get_new_dict (void)</div><div class='add'>+get_new_dict(void)</div><div class='ctx'> {</div><div class='del'>-        return get_new_dict_full (1);</div><div class='add'>+    return get_new_dict_full(1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-dict_new (void)</div><div class='add'>+dict_new(void)</div><div class='ctx'> {</div><div class='del'>-        dict_t *dict = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        dict = get_new_dict_full(1);</div><div class='add'>+    dict = get_new_dict_full(1);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_ref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_ref(dict);</div><div class='ctx'> </div><div class='del'>-        return dict;</div><div class='add'>+    return dict;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-is_data_equal (data_t *one,</div><div class='del'>-               data_t *two)</div><div class='add'>+is_data_equal(data_t *one, data_t *two)</div><div class='ctx'> {</div><div class='del'>-        struct iatt *iatt1, *iatt2;</div><div class='add'>+    struct iatt *iatt1, *iatt2;</div><div class='add'>+</div><div class='add'>+    if (!one || !two || !one-&gt;data || !two-&gt;data) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "input arguments are provided "</div><div class='add'>+                         "with value data_t as NULL");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!one || !two || !one-&gt;data || !two-&gt;data) {</div><div class='del'>-		gf_msg_callingfn ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-				  "input arguments are provided "</div><div class='del'>-				  "with value data_t as NULL");</div><div class='del'>-                return -1;</div><div class='del'>-	}</div><div class='add'>+    if (one == two)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (one == two)</div><div class='del'>-                return 1;</div><div class='add'>+    if (one-&gt;data == two-&gt;data)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (one-&gt;data == two-&gt;data)</div><div class='del'>-                return 1;</div><div class='add'>+    if (one-&gt;data_type != two-&gt;data_type) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (one-&gt;data_type != two-&gt;data_type) {</div><div class='del'>-                return 0;</div><div class='add'>+    if (one-&gt;data_type == GF_DATA_TYPE_IATT) {</div><div class='add'>+        if ((one-&gt;len &lt; sizeof(struct iatt)) ||</div><div class='add'>+            (two-&gt;len &lt; sizeof(struct iatt))) {</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (one-&gt;data_type == GF_DATA_TYPE_IATT) {</div><div class='del'>-                if ((one-&gt;len &lt; sizeof(struct iatt)) ||</div><div class='del'>-                    (two-&gt;len &lt; sizeof(struct iatt))) {</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        iatt1 = (struct iatt *)one-&gt;data;</div><div class='add'>+        iatt2 = (struct iatt *)two-&gt;data;</div><div class='ctx'> </div><div class='del'>-                iatt1 = (struct iatt *)one-&gt;data;</div><div class='del'>-                iatt2 = (struct iatt *)two-&gt;data;</div><div class='add'>+        /* Two iatt structs are considered equal if main fields are</div><div class='add'>+         * equal, even if times differ.</div><div class='add'>+         * TODO: maybe when ctime if fully operational we could</div><div class='add'>+         *       enforce time matching. */</div><div class='add'>+        if (iatt1-&gt;ia_ino != iatt2-&gt;ia_ino) {</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        if (iatt1-&gt;ia_type != iatt2-&gt;ia_type) {</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        if ((iatt1-&gt;ia_type == IA_IFBLK) || (iatt1-&gt;ia_type == IA_IFCHR)) {</div><div class='add'>+            if (iatt1-&gt;ia_rdev != iatt2-&gt;ia_rdev) {</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (gf_uuid_compare(iatt1-&gt;ia_gfid, iatt2-&gt;ia_gfid) != 0) {</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* Two iatt structs are considered equal if main fields are</div><div class='del'>-                 * equal, even if times differ.</div><div class='del'>-                 * TODO: maybe when ctime if fully operational we could</div><div class='del'>-                 *       enforce time matching. */</div><div class='del'>-                if (iatt1-&gt;ia_ino != iatt2-&gt;ia_ino) {</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                if (iatt1-&gt;ia_type != iatt2-&gt;ia_type) {</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                if ((iatt1-&gt;ia_type == IA_IFBLK) ||</div><div class='del'>-                    (iatt1-&gt;ia_type == IA_IFCHR)) {</div><div class='del'>-                        if (iatt1-&gt;ia_rdev != iatt2-&gt;ia_rdev) {</div><div class='del'>-                                return 0;</div><div class='add'>+        /* TODO: ia_uid, ia_gid, ia_prot and ia_size can be changed</div><div class='add'>+         *       with some commands. Here we don't have enough</div><div class='add'>+         *       information to decide if they should match or not. */</div><div class='add'>+        /*</div><div class='add'>+                        if ((iatt1-&gt;ia_uid != iatt2-&gt;ia_uid) ||</div><div class='add'>+                            (iatt1-&gt;ia_gid != iatt2-&gt;ia_gid) ||</div><div class='add'>+                            (st_mode_from_ia(iatt1-&gt;ia_prot, iatt1-&gt;ia_type) !=</div><div class='add'>+                                    st_mode_from_ia(iatt2-&gt;ia_prot,</div><div class='add'>+           iatt2-&gt;ia_type))) { return 0;</div><div class='ctx'>                         }</div><div class='del'>-                }</div><div class='del'>-                if (gf_uuid_compare(iatt1-&gt;ia_gfid, iatt2-&gt;ia_gfid) != 0) {</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* TODO: ia_uid, ia_gid, ia_prot and ia_size can be changed</div><div class='del'>-                 *       with some commands. Here we don't have enough</div><div class='del'>-                 *       information to decide if they should match or not. */</div><div class='del'>-/*</div><div class='del'>-                if ((iatt1-&gt;ia_uid != iatt2-&gt;ia_uid) ||</div><div class='del'>-                    (iatt1-&gt;ia_gid != iatt2-&gt;ia_gid) ||</div><div class='del'>-                    (st_mode_from_ia(iatt1-&gt;ia_prot, iatt1-&gt;ia_type) !=</div><div class='del'>-                            st_mode_from_ia(iatt2-&gt;ia_prot, iatt2-&gt;ia_type))) {</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                if (iatt1-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                        if (iatt1-&gt;ia_size != iatt2-&gt;ia_size) {</div><div class='del'>-                                return 0;</div><div class='add'>+                        if (iatt1-&gt;ia_type == IA_IFREG) {</div><div class='add'>+                                if (iatt1-&gt;ia_size != iatt2-&gt;ia_size) {</div><div class='add'>+                                        return 0;</div><div class='add'>+                                }</div><div class='ctx'>                         }</div><div class='del'>-                }</div><div class='del'>-*/</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+        */</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (one-&gt;len != two-&gt;len)</div><div class='del'>-                return 0;</div><div class='add'>+    if (one-&gt;len != two-&gt;len)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (memcmp (one-&gt;data, two-&gt;data, one-&gt;len) == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (memcmp(one-&gt;data, two-&gt;data, one-&gt;len) == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-key_value_cmp (dict_t *one, char *key1, data_t *value1, void *data)</div><div class='add'>+key_value_cmp(dict_t *one, char *key1, data_t *value1, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct dict_cmp *cmp = data;</div><div class='del'>-        dict_t *two = NULL;</div><div class='del'>-        data_t *value2 = NULL;</div><div class='add'>+    struct dict_cmp *cmp = data;</div><div class='add'>+    dict_t *two = NULL;</div><div class='add'>+    data_t *value2 = NULL;</div><div class='ctx'> </div><div class='del'>-        two = cmp-&gt;dict;</div><div class='del'>-        value2 = dict_get (two, key1);</div><div class='add'>+    two = cmp-&gt;dict;</div><div class='add'>+    value2 = dict_get(two, key1);</div><div class='ctx'> </div><div class='del'>-        if (value2) {</div><div class='del'>-                if (cmp-&gt;value_ignore &amp;&amp; cmp-&gt;value_ignore (key1))</div><div class='del'>-                        return 0;</div><div class='add'>+    if (value2) {</div><div class='add'>+        if (cmp-&gt;value_ignore &amp;&amp; cmp-&gt;value_ignore(key1))</div><div class='add'>+            return 0;</div><div class='ctx'> </div><div class='del'>-                if (is_data_equal (value1, value2) == 1)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+        if (is_data_equal(value1, value2) == 1)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (value2 == NULL) {</div><div class='del'>-                gf_msg_debug (THIS-&gt;name, 0, "'%s' found only on one dict",</div><div class='del'>-                              key1);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (THIS-&gt;name, 0, "'%s' is different in two dicts "</div><div class='del'>-                              "(%u, %u)", key1, value1-&gt;len, value2-&gt;len);</div><div class='del'>-        }</div><div class='add'>+    if (value2 == NULL) {</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, 0, "'%s' found only on one dict", key1);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, 0,</div><div class='add'>+                     "'%s' is different in two dicts "</div><div class='add'>+                     "(%u, %u)",</div><div class='add'>+                     key1, value1-&gt;len, value2-&gt;len);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* If both dicts are NULL then equal. If one of the dicts is NULL but the</div><div class='hunk'>@@ -248,93 +244,92 @@ key_value_cmp (dict_t *one, char *key1, data_t *value1, void *data)</div><div class='ctx'>  * different.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-are_dicts_equal (dict_t *one, dict_t *two,</div><div class='del'>-                 gf_boolean_t (*match) (dict_t *d, char *k, data_t *v,</div><div class='del'>-                                        void *data),</div><div class='del'>-                 gf_boolean_t (*value_ignore) (char *k))</div><div class='add'>+are_dicts_equal(dict_t *one, dict_t *two,</div><div class='add'>+                gf_boolean_t (*match)(dict_t *d, char *k, data_t *v,</div><div class='add'>+                                      void *data),</div><div class='add'>+                gf_boolean_t (*value_ignore)(char *k))</div><div class='ctx'> {</div><div class='del'>-        int     num_matches1 = 0;</div><div class='del'>-        int     num_matches2 = 0;</div><div class='del'>-        struct  dict_cmp cmp = {0};</div><div class='add'>+    int num_matches1 = 0;</div><div class='add'>+    int num_matches2 = 0;</div><div class='add'>+    struct dict_cmp cmp = {0};</div><div class='ctx'> </div><div class='del'>-        if (one == two)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (one == two)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (!match)</div><div class='del'>-                match = dict_match_everything;</div><div class='add'>+    if (!match)</div><div class='add'>+        match = dict_match_everything;</div><div class='ctx'> </div><div class='del'>-        if ((one == NULL) || (two == NULL)) {</div><div class='del'>-                num_matches1 = dict_foreach_match(one ? one : two, match, NULL,</div><div class='del'>-                                                  dict_null_foreach_fn, NULL);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    if ((one == NULL) || (two == NULL)) {</div><div class='add'>+        num_matches1 = dict_foreach_match(one ? one : two, match, NULL,</div><div class='add'>+                                          dict_null_foreach_fn, NULL);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cmp.dict = two;</div><div class='del'>-        cmp.value_ignore = value_ignore;</div><div class='del'>-        num_matches1 = dict_foreach_match (one, match, NULL, key_value_cmp,</div><div class='del'>-                                           &amp;cmp);</div><div class='add'>+    cmp.dict = two;</div><div class='add'>+    cmp.value_ignore = value_ignore;</div><div class='add'>+    num_matches1 = dict_foreach_match(one, match, NULL, key_value_cmp, &amp;cmp);</div><div class='ctx'> </div><div class='del'>-        if (num_matches1 == -1)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (num_matches1 == -1)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if ((num_matches1 == one-&gt;count) &amp;&amp; (one-&gt;count == two-&gt;count))</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if ((num_matches1 == one-&gt;count) &amp;&amp; (one-&gt;count == two-&gt;count))</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        num_matches2 = dict_foreach_match (two, match, NULL,</div><div class='del'>-                                           dict_null_foreach_fn, NULL);</div><div class='add'>+    num_matches2 = dict_foreach_match(two, match, NULL, dict_null_foreach_fn,</div><div class='add'>+                                      NULL);</div><div class='ctx'> done:</div><div class='del'>-        /* If the number of matches is same in 'two' then for all the</div><div class='del'>-         * valid-keys that exist in 'one' the value matched and no extra valid</div><div class='del'>-         * keys exist in 'two' alone. Otherwise there exists at least one extra</div><div class='del'>-         * valid-key in 'two' which doesn't exist in 'one' */</div><div class='del'>-        if (num_matches1 == num_matches2)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    /* If the number of matches is same in 'two' then for all the</div><div class='add'>+     * valid-keys that exist in 'one' the value matched and no extra valid</div><div class='add'>+     * keys exist in 'two' alone. Otherwise there exists at least one extra</div><div class='add'>+     * valid-key in 'two' which doesn't exist in 'one' */</div><div class='add'>+    if (num_matches1 == num_matches2)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-data_destroy (data_t *data)</div><div class='add'>+data_destroy(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        if (data) {</div><div class='del'>-                LOCK_DESTROY (&amp;data-&gt;lock);</div><div class='add'>+    if (data) {</div><div class='add'>+        LOCK_DESTROY(&amp;data-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (!data-&gt;is_static)</div><div class='del'>-                        GF_FREE (data-&gt;data);</div><div class='add'>+        if (!data-&gt;is_static)</div><div class='add'>+            GF_FREE(data-&gt;data);</div><div class='ctx'> </div><div class='del'>-                data-&gt;len = 0xbabababa;</div><div class='del'>-                mem_put (data);</div><div class='del'>-        }</div><div class='add'>+        data-&gt;len = 0xbabababa;</div><div class='add'>+        mem_put(data);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_copy (data_t *old)</div><div class='add'>+data_copy(data_t *old)</div><div class='ctx'> {</div><div class='del'>-        if (!old) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, 0, LG_MSG_NULL_PTR,</div><div class='del'>-                                  "old is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!old) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, 0, LG_MSG_NULL_PTR,</div><div class='add'>+                         "old is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data_t *newdata = mem_get0 (THIS-&gt;ctx-&gt;dict_data_pool);</div><div class='del'>-        if (!newdata) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    data_t *newdata = mem_get0(THIS-&gt;ctx-&gt;dict_data_pool);</div><div class='add'>+    if (!newdata) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        newdata-&gt;len = old-&gt;len;</div><div class='del'>-        if (old-&gt;data) {</div><div class='del'>-                newdata-&gt;data = memdup (old-&gt;data, old-&gt;len);</div><div class='del'>-                if (!newdata-&gt;data)</div><div class='del'>-                        goto err_out;</div><div class='del'>-        }</div><div class='del'>-        newdata-&gt;data_type = old-&gt;data_type;</div><div class='add'>+    newdata-&gt;len = old-&gt;len;</div><div class='add'>+    if (old-&gt;data) {</div><div class='add'>+        newdata-&gt;data = memdup(old-&gt;data, old-&gt;len);</div><div class='add'>+        if (!newdata-&gt;data)</div><div class='add'>+            goto err_out;</div><div class='add'>+    }</div><div class='add'>+    newdata-&gt;data_type = old-&gt;data_type;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;newdata-&gt;lock);</div><div class='del'>-        return newdata;</div><div class='add'>+    LOCK_INIT(&amp;newdata-&gt;lock);</div><div class='add'>+    return newdata;</div><div class='ctx'> </div><div class='ctx'> err_out:</div><div class='del'>-        mem_put (newdata);</div><div class='add'>+    mem_put(newdata);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Always need to be called under lock</div><div class='hunk'>@@ -342,986 +337,962 @@ err_out:</div><div class='ctx'>  * checked by callers.</div><div class='ctx'>  */</div><div class='ctx'> static data_pair_t *</div><div class='del'>-dict_lookup_common (dict_t *this, char *key, uint32_t hash)</div><div class='add'>+dict_lookup_common(dict_t *this, char *key, uint32_t hash)</div><div class='ctx'> {</div><div class='del'>-        int hashval = 0;</div><div class='del'>-        data_pair_t *pair;</div><div class='add'>+    int hashval = 0;</div><div class='add'>+    data_pair_t *pair;</div><div class='ctx'> </div><div class='del'>-        /* If the divisor is 1, the modulo is always 0,</div><div class='del'>-         * in such case avoid hash calculation.</div><div class='del'>-         */</div><div class='del'>-        if (this-&gt;hash_size != 1)</div><div class='del'>-                hashval = hash % this-&gt;hash_size;</div><div class='add'>+    /* If the divisor is 1, the modulo is always 0,</div><div class='add'>+     * in such case avoid hash calculation.</div><div class='add'>+     */</div><div class='add'>+    if (this-&gt;hash_size != 1)</div><div class='add'>+        hashval = hash % this-&gt;hash_size;</div><div class='ctx'> </div><div class='del'>-        for (pair = this-&gt;members[hashval]; pair != NULL; pair = pair-&gt;hash_next) {</div><div class='del'>-                if (pair-&gt;key &amp;&amp; (hash == pair-&gt;key_hash) &amp;&amp;</div><div class='del'>-                    !strcmp (pair-&gt;key, key))</div><div class='del'>-                        return pair;</div><div class='del'>-        }</div><div class='add'>+    for (pair = this-&gt;members[hashval]; pair != NULL; pair = pair-&gt;hash_next) {</div><div class='add'>+        if (pair-&gt;key &amp;&amp; (hash == pair-&gt;key_hash) &amp;&amp; !strcmp(pair-&gt;key, key))</div><div class='add'>+            return pair;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_lookup (dict_t *this, char *key, data_t **data)</div><div class='add'>+dict_lookup(dict_t *this, char *key, data_t **data)</div><div class='ctx'> {</div><div class='del'>-        uint32_t hash;</div><div class='add'>+    uint32_t hash;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !data) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!this || !key || "</div><div class='del'>-                                  "!data");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !data) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || !key || "</div><div class='add'>+                         "!data");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data_pair_t *tmp = NULL;</div><div class='add'>+    data_pair_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        hash = SuperFastHash (key, strlen (key));</div><div class='add'>+    hash = SuperFastHash(key, strlen(key));</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                tmp = dict_lookup_common (this, key, hash);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        tmp = dict_lookup_common(this, key, hash);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!tmp)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!tmp)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *data = tmp-&gt;value;</div><div class='del'>-        return 0;</div><div class='add'>+    *data = tmp-&gt;value;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dict_set_lk (dict_t *this, char *key, data_t *value, const uint32_t hash, gf_boolean_t replace)</div><div class='del'>-{</div><div class='del'>-        int hashval = 0;</div><div class='del'>-        data_pair_t *pair;</div><div class='del'>-        int key_free = 0;</div><div class='del'>-        uint32_t key_hash;</div><div class='del'>-        int keylen;</div><div class='del'>-</div><div class='del'>-        if (!key) {</div><div class='del'>-                keylen = gf_asprintf (&amp;key, "ref:%p", value);</div><div class='del'>-                if (-1 == keylen) {</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                key_free = 1;</div><div class='del'>-                key_hash = SuperFastHash (key, keylen);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                keylen = strlen(key);</div><div class='del'>-                key_hash = hash;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Search for a existing key if 'replace' is asked for */</div><div class='del'>-        if (replace) {</div><div class='del'>-                pair = dict_lookup_common (this, key, key_hash);</div><div class='del'>-</div><div class='del'>-                if (pair) {</div><div class='del'>-                        data_t *unref_data = pair-&gt;value;</div><div class='del'>-                        pair-&gt;value = data_ref (value);</div><div class='del'>-                        data_unref (unref_data);</div><div class='del'>-                        if (key_free)</div><div class='del'>-                                GF_FREE (key);</div><div class='del'>-                        /* Indicates duplicate key */</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (this-&gt;free_pair_in_use) {</div><div class='del'>-                pair = mem_get (THIS-&gt;ctx-&gt;dict_pair_pool);</div><div class='del'>-                if (!pair) {</div><div class='del'>-                        if (key_free)</div><div class='del'>-                                GF_FREE (key);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                pair = &amp;this-&gt;free_pair;</div><div class='del'>-                this-&gt;free_pair_in_use = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (key_free) {</div><div class='del'>-                /* It's ours.  Use it. */</div><div class='del'>-                pair-&gt;key = key;</div><div class='del'>-                key_free = 0;</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                pair-&gt;key = (char *) GF_MALLOC (keylen + 1,</div><div class='del'>-                                                gf_common_mt_char);</div><div class='del'>-                if (!pair-&gt;key) {</div><div class='del'>-                        if (pair == &amp;this-&gt;free_pair) {</div><div class='del'>-                                this-&gt;free_pair_in_use = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                        else {</div><div class='del'>-                                mem_put (pair);</div><div class='del'>-                        }</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                strcpy (pair-&gt;key, key);</div><div class='del'>-        }</div><div class='del'>-        pair-&gt;key_hash = key_hash;</div><div class='del'>-        pair-&gt;value = data_ref (value);</div><div class='add'>+dict_set_lk(dict_t *this, char *key, data_t *value, const uint32_t hash,</div><div class='add'>+            gf_boolean_t replace)</div><div class='add'>+{</div><div class='add'>+    int hashval = 0;</div><div class='add'>+    data_pair_t *pair;</div><div class='add'>+    int key_free = 0;</div><div class='add'>+    uint32_t key_hash;</div><div class='add'>+    int keylen;</div><div class='add'>+</div><div class='add'>+    if (!key) {</div><div class='add'>+        keylen = gf_asprintf(&amp;key, "ref:%p", value);</div><div class='add'>+        if (-1 == keylen) {</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        key_free = 1;</div><div class='add'>+        key_hash = SuperFastHash(key, keylen);</div><div class='add'>+    } else {</div><div class='add'>+        keylen = strlen(key);</div><div class='add'>+        key_hash = hash;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Search for a existing key if 'replace' is asked for */</div><div class='add'>+    if (replace) {</div><div class='add'>+        pair = dict_lookup_common(this, key, key_hash);</div><div class='ctx'> </div><div class='del'>-        /* If the divisor is 1, the modulo is always 0,</div><div class='del'>-         * in such case avoid hash calculation.</div><div class='del'>-         */</div><div class='del'>-        if (this-&gt;hash_size != 1) {</div><div class='del'>-                hashval = (key_hash % this-&gt;hash_size);</div><div class='del'>-        }</div><div class='del'>-        pair-&gt;hash_next = this-&gt;members[hashval];</div><div class='del'>-        this-&gt;members[hashval] = pair;</div><div class='del'>-</div><div class='del'>-        pair-&gt;next = this-&gt;members_list;</div><div class='del'>-        pair-&gt;prev = NULL;</div><div class='del'>-        if (this-&gt;members_list)</div><div class='del'>-                this-&gt;members_list-&gt;prev = pair;</div><div class='del'>-        this-&gt;members_list = pair;</div><div class='del'>-        this-&gt;count++;</div><div class='del'>-</div><div class='del'>-        if (key_free)</div><div class='del'>-                GF_FREE (key);</div><div class='del'>-</div><div class='del'>-        if (this-&gt;max_count &lt; this-&gt;count)</div><div class='del'>-                this-&gt;max_count = this-&gt;count;</div><div class='del'>-        return 0;</div><div class='add'>+        if (pair) {</div><div class='add'>+            data_t *unref_data = pair-&gt;value;</div><div class='add'>+            pair-&gt;value = data_ref(value);</div><div class='add'>+            data_unref(unref_data);</div><div class='add'>+            if (key_free)</div><div class='add'>+                GF_FREE(key);</div><div class='add'>+            /* Indicates duplicate key */</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (this-&gt;free_pair_in_use) {</div><div class='add'>+        pair = mem_get(THIS-&gt;ctx-&gt;dict_pair_pool);</div><div class='add'>+        if (!pair) {</div><div class='add'>+            if (key_free)</div><div class='add'>+                GF_FREE(key);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        pair = &amp;this-&gt;free_pair;</div><div class='add'>+        this-&gt;free_pair_in_use = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (key_free) {</div><div class='add'>+        /* It's ours.  Use it. */</div><div class='add'>+        pair-&gt;key = key;</div><div class='add'>+        key_free = 0;</div><div class='add'>+    } else {</div><div class='add'>+        pair-&gt;key = (char *)GF_MALLOC(keylen + 1, gf_common_mt_char);</div><div class='add'>+        if (!pair-&gt;key) {</div><div class='add'>+            if (pair == &amp;this-&gt;free_pair) {</div><div class='add'>+                this-&gt;free_pair_in_use = _gf_false;</div><div class='add'>+            } else {</div><div class='add'>+                mem_put(pair);</div><div class='add'>+            }</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        strcpy(pair-&gt;key, key);</div><div class='add'>+    }</div><div class='add'>+    pair-&gt;key_hash = key_hash;</div><div class='add'>+    pair-&gt;value = data_ref(value);</div><div class='add'>+</div><div class='add'>+    /* If the divisor is 1, the modulo is always 0,</div><div class='add'>+     * in such case avoid hash calculation.</div><div class='add'>+     */</div><div class='add'>+    if (this-&gt;hash_size != 1) {</div><div class='add'>+        hashval = (key_hash % this-&gt;hash_size);</div><div class='add'>+    }</div><div class='add'>+    pair-&gt;hash_next = this-&gt;members[hashval];</div><div class='add'>+    this-&gt;members[hashval] = pair;</div><div class='add'>+</div><div class='add'>+    pair-&gt;next = this-&gt;members_list;</div><div class='add'>+    pair-&gt;prev = NULL;</div><div class='add'>+    if (this-&gt;members_list)</div><div class='add'>+        this-&gt;members_list-&gt;prev = pair;</div><div class='add'>+    this-&gt;members_list = pair;</div><div class='add'>+    this-&gt;count++;</div><div class='add'>+</div><div class='add'>+    if (key_free)</div><div class='add'>+        GF_FREE(key);</div><div class='add'>+</div><div class='add'>+    if (this-&gt;max_count &lt; this-&gt;count)</div><div class='add'>+        this-&gt;max_count = this-&gt;count;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_set (dict_t *this,</div><div class='del'>-          char *key,</div><div class='del'>-          data_t *value)</div><div class='add'>+dict_set(dict_t *this, char *key, data_t *value)</div><div class='ctx'> {</div><div class='del'>-        if (key)</div><div class='del'>-                return dict_setn (this, key, strlen (key), value);</div><div class='del'>-        else</div><div class='del'>-                return dict_setn (this, NULL, 0, value);</div><div class='add'>+    if (key)</div><div class='add'>+        return dict_setn(this, key, strlen(key), value);</div><div class='add'>+    else</div><div class='add'>+        return dict_setn(this, NULL, 0, value);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_setn (dict_t *this,</div><div class='del'>-          char *key,</div><div class='del'>-          const int keylen,</div><div class='del'>-          data_t *value)</div><div class='del'>-{</div><div class='del'>-        int32_t ret;</div><div class='del'>-        uint32_t key_hash = 0;</div><div class='del'>-</div><div class='del'>-        if (!this || !value) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!this || !value for "</div><div class='del'>-                                  "key=%s", key);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+dict_setn(dict_t *this, char *key, const int keylen, data_t *value)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    uint32_t key_hash = 0;</div><div class='ctx'> </div><div class='del'>-        if (key) {</div><div class='del'>-                key_hash = SuperFastHash (key, keylen);</div><div class='del'>-        }</div><div class='add'>+    if (!this || !value) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || !value for "</div><div class='add'>+                         "key=%s",</div><div class='add'>+                         key);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='add'>+    if (key) {</div><div class='add'>+        key_hash = SuperFastHash(key, keylen);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_lk (this, key, value, key_hash, 1);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    ret = dict_set_lk(this, key, value, key_hash, 1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_add (dict_t *this, char *key, data_t *value)</div><div class='add'>+dict_add(dict_t *this, char *key, data_t *value)</div><div class='ctx'> {</div><div class='del'>-        if (key)</div><div class='del'>-                return dict_addn(this, key, strlen (key), value);</div><div class='del'>-        else</div><div class='del'>-                return dict_addn(this, NULL, 0, value);</div><div class='add'>+    if (key)</div><div class='add'>+        return dict_addn(this, key, strlen(key), value);</div><div class='add'>+    else</div><div class='add'>+        return dict_addn(this, NULL, 0, value);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_addn (dict_t *this, char *key, const int keylen, data_t *value)</div><div class='add'>+dict_addn(dict_t *this, char *key, const int keylen, data_t *value)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret;</div><div class='del'>-        uint32_t key_hash = 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    uint32_t key_hash = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !value) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "!this || !value for key=%s", key);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !value) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || !value for key=%s", key);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (key) {</div><div class='del'>-                key_hash = SuperFastHash (key, keylen);</div><div class='del'>-        }</div><div class='add'>+    if (key) {</div><div class='add'>+        key_hash = SuperFastHash(key, keylen);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_lk (this, key, value, key_hash, 0);</div><div class='add'>+    ret = dict_set_lk(this, key, value, key_hash, 0);</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> data_t *</div><div class='del'>-dict_get (dict_t *this, char *key)</div><div class='add'>+dict_get(dict_t *this, char *key)</div><div class='ctx'> {</div><div class='del'>-        if (!this || !key) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_INFO, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "!this || key=%s", (key) ? key : "()");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_INFO, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || key=%s", (key) ? key : "()");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dict_getn(this, key, strlen (key));</div><div class='add'>+    return dict_getn(this, key, strlen(key));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-dict_getn (dict_t *this, char *key, const int keylen)</div><div class='add'>+dict_getn(dict_t *this, char *key, const int keylen)</div><div class='ctx'> {</div><div class='del'>-        data_pair_t *pair;</div><div class='del'>-        uint32_t hash;</div><div class='add'>+    data_pair_t *pair;</div><div class='add'>+    uint32_t hash;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_INFO, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "!this || key=%s", (key) ? key : "()");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_INFO, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || key=%s", (key) ? key : "()");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hash = SuperFastHash (key, keylen);</div><div class='add'>+    hash = SuperFastHash(key, keylen);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                pair = dict_lookup_common (this, key, hash);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        pair = dict_lookup_common(this, key, hash);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (pair)</div><div class='del'>-                return pair-&gt;value;</div><div class='add'>+    if (pair)</div><div class='add'>+        return pair-&gt;value;</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_key_count (dict_t *this)</div><div class='add'>+dict_key_count(dict_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict passed is NULL");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict passed is NULL");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = this-&gt;count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = this-&gt;count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dict_del (dict_t *this, char *key)</div><div class='add'>+dict_del(dict_t *this, char *key)</div><div class='ctx'> {</div><div class='del'>-        if (!this || !key) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!this || key=%s", key);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || key=%s", key);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dict_deln(this, key, strlen (key));</div><div class='add'>+    return dict_deln(this, key, strlen(key));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dict_deln (dict_t *this, char *key, const int keylen)</div><div class='add'>+dict_deln(dict_t *this, char *key, const int keylen)</div><div class='ctx'> {</div><div class='del'>-        int hashval = 0;</div><div class='del'>-        uint32_t hash;</div><div class='add'>+    int hashval = 0;</div><div class='add'>+    uint32_t hash;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!this || key=%s", key);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!this || key=%s", key);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	hash = SuperFastHash (key, keylen);</div><div class='add'>+    hash = SuperFastHash(key, keylen);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* If the divisor is 1, the modulo is always 0,</div><div class='del'>-         * in such case avoid hash calculation.</div><div class='del'>-         */</div><div class='del'>-        if (this-&gt;hash_size != 1)</div><div class='del'>-                hashval = hash % this-&gt;hash_size;</div><div class='add'>+    /* If the divisor is 1, the modulo is always 0,</div><div class='add'>+     * in such case avoid hash calculation.</div><div class='add'>+     */</div><div class='add'>+    if (this-&gt;hash_size != 1)</div><div class='add'>+        hashval = hash % this-&gt;hash_size;</div><div class='ctx'> </div><div class='del'>-        data_pair_t *pair = this-&gt;members[hashval];</div><div class='del'>-        data_pair_t *prev = NULL;</div><div class='add'>+    data_pair_t *pair = this-&gt;members[hashval];</div><div class='add'>+    data_pair_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        while (pair) {</div><div class='del'>-                if ((hash == pair-&gt;key_hash) &amp;&amp; strcmp (pair-&gt;key, key) == 0) {</div><div class='del'>-                        if (prev)</div><div class='del'>-                                prev-&gt;hash_next = pair-&gt;hash_next;</div><div class='del'>-                        else</div><div class='del'>-                                this-&gt;members[hashval] = pair-&gt;hash_next;</div><div class='add'>+    while (pair) {</div><div class='add'>+        if ((hash == pair-&gt;key_hash) &amp;&amp; strcmp(pair-&gt;key, key) == 0) {</div><div class='add'>+            if (prev)</div><div class='add'>+                prev-&gt;hash_next = pair-&gt;hash_next;</div><div class='add'>+            else</div><div class='add'>+                this-&gt;members[hashval] = pair-&gt;hash_next;</div><div class='ctx'> </div><div class='del'>-                        data_unref (pair-&gt;value);</div><div class='add'>+            data_unref(pair-&gt;value);</div><div class='ctx'> </div><div class='del'>-                        if (pair-&gt;prev)</div><div class='del'>-                                pair-&gt;prev-&gt;next = pair-&gt;next;</div><div class='del'>-                        else</div><div class='del'>-                                this-&gt;members_list = pair-&gt;next;</div><div class='add'>+            if (pair-&gt;prev)</div><div class='add'>+                pair-&gt;prev-&gt;next = pair-&gt;next;</div><div class='add'>+            else</div><div class='add'>+                this-&gt;members_list = pair-&gt;next;</div><div class='ctx'> </div><div class='del'>-                        if (pair-&gt;next)</div><div class='del'>-                                pair-&gt;next-&gt;prev = pair-&gt;prev;</div><div class='add'>+            if (pair-&gt;next)</div><div class='add'>+                pair-&gt;next-&gt;prev = pair-&gt;prev;</div><div class='ctx'> </div><div class='del'>-                        GF_FREE (pair-&gt;key);</div><div class='del'>-                        if (pair == &amp;this-&gt;free_pair) {</div><div class='del'>-                                this-&gt;free_pair_in_use = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                        else {</div><div class='del'>-                                mem_put (pair);</div><div class='del'>-                        }</div><div class='del'>-                        this-&gt;count--;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                prev = pair;</div><div class='del'>-                pair = pair-&gt;hash_next;</div><div class='add'>+            GF_FREE(pair-&gt;key);</div><div class='add'>+            if (pair == &amp;this-&gt;free_pair) {</div><div class='add'>+                this-&gt;free_pair_in_use = _gf_false;</div><div class='add'>+            } else {</div><div class='add'>+                mem_put(pair);</div><div class='add'>+            }</div><div class='add'>+            this-&gt;count--;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+        prev = pair;</div><div class='add'>+        pair = pair-&gt;hash_next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dict_destroy (dict_t *this)</div><div class='add'>+dict_destroy(dict_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data_pair_t *pair = this-&gt;members_list;</div><div class='del'>-        data_pair_t *prev = this-&gt;members_list;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-        uint64_t current_max = 0;</div><div class='del'>-        uint32_t total_pairs = 0;</div><div class='add'>+    data_pair_t *pair = this-&gt;members_list;</div><div class='add'>+    data_pair_t *prev = this-&gt;members_list;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t current_max = 0;</div><div class='add'>+    uint32_t total_pairs = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;this-&gt;lock);</div><div class='add'>+    LOCK_DESTROY(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        while (prev) {</div><div class='del'>-                pair = pair-&gt;next;</div><div class='del'>-                data_unref (prev-&gt;value);</div><div class='del'>-                GF_FREE (prev-&gt;key);</div><div class='del'>-                if (prev != &amp;this-&gt;free_pair) {</div><div class='del'>-                        mem_put (prev);</div><div class='del'>-                }</div><div class='del'>-                total_pairs++;</div><div class='del'>-                prev = pair;</div><div class='add'>+    while (prev) {</div><div class='add'>+        pair = pair-&gt;next;</div><div class='add'>+        data_unref(prev-&gt;value);</div><div class='add'>+        GF_FREE(prev-&gt;key);</div><div class='add'>+        if (prev != &amp;this-&gt;free_pair) {</div><div class='add'>+            mem_put(prev);</div><div class='ctx'>         }</div><div class='add'>+        total_pairs++;</div><div class='add'>+        prev = pair;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;members != &amp;this-&gt;members_internal) {</div><div class='del'>-                mem_put (this-&gt;members);</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;members != &amp;this-&gt;members_internal) {</div><div class='add'>+        mem_put(this-&gt;members);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (this-&gt;extra_free);</div><div class='del'>-        free (this-&gt;extra_stdfree);</div><div class='add'>+    GF_FREE(this-&gt;extra_free);</div><div class='add'>+    free(this-&gt;extra_stdfree);</div><div class='ctx'> </div><div class='del'>-        /* update 'ctx-&gt;stats.dict.details' using max_count */</div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    /* update 'ctx-&gt;stats.dict.details' using max_count */</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        /* NOTE: below logic is not totaly race proof */</div><div class='del'>-        /* thread0 and thread1 gets current_max as 10 */</div><div class='del'>-        /* thread0 has 'this-&gt;max_count as 11 */</div><div class='del'>-        /* thread1 has 'this-&gt;max_count as 20 */</div><div class='del'>-        /* thread1 goes ahead and sets the max_dict_pairs to 20 */</div><div class='del'>-        /* thread0 then goes and sets it to 11 */</div><div class='del'>-        /* As it is for information purpose only, no functionality will be</div><div class='del'>-           broken by this, but a point to consider about ATOMIC macros. */</div><div class='del'>-        current_max = GF_ATOMIC_GET (ctx-&gt;stats.max_dict_pairs);</div><div class='del'>-        if (current_max &lt; this-&gt;max_count)</div><div class='del'>-                GF_ATOMIC_INIT (ctx-&gt;stats.max_dict_pairs, this-&gt;max_count);</div><div class='add'>+    /* NOTE: below logic is not totaly race proof */</div><div class='add'>+    /* thread0 and thread1 gets current_max as 10 */</div><div class='add'>+    /* thread0 has 'this-&gt;max_count as 11 */</div><div class='add'>+    /* thread1 has 'this-&gt;max_count as 20 */</div><div class='add'>+    /* thread1 goes ahead and sets the max_dict_pairs to 20 */</div><div class='add'>+    /* thread0 then goes and sets it to 11 */</div><div class='add'>+    /* As it is for information purpose only, no functionality will be</div><div class='add'>+       broken by this, but a point to consider about ATOMIC macros. */</div><div class='add'>+    current_max = GF_ATOMIC_GET(ctx-&gt;stats.max_dict_pairs);</div><div class='add'>+    if (current_max &lt; this-&gt;max_count)</div><div class='add'>+        GF_ATOMIC_INIT(ctx-&gt;stats.max_dict_pairs, this-&gt;max_count);</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_ADD (ctx-&gt;stats.total_pairs_used, total_pairs);</div><div class='del'>-        GF_ATOMIC_INC (ctx-&gt;stats.total_dicts_used);</div><div class='add'>+    GF_ATOMIC_ADD(ctx-&gt;stats.total_pairs_used, total_pairs);</div><div class='add'>+    GF_ATOMIC_INC(ctx-&gt;stats.total_dicts_used);</div><div class='ctx'> </div><div class='del'>-        mem_put (this);</div><div class='add'>+    mem_put(this);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dict_unref (dict_t *this)</div><div class='add'>+dict_unref(dict_t *this)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ref = 0;</div><div class='add'>+    uint64_t ref = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ref = GF_ATOMIC_DEC (this-&gt;refcount);</div><div class='add'>+    ref = GF_ATOMIC_DEC(this-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-        if (!ref)</div><div class='del'>-                dict_destroy (this);</div><div class='add'>+    if (!ref)</div><div class='add'>+        dict_destroy(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-dict_ref (dict_t *this)</div><div class='add'>+dict_ref(dict_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (this-&gt;refcount);</div><div class='del'>-        return this;</div><div class='add'>+    GF_ATOMIC_INC(this-&gt;refcount);</div><div class='add'>+    return this;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-data_unref (data_t *this)</div><div class='add'>+data_unref(data_t *this)</div><div class='ctx'> {</div><div class='add'>+    int32_t ref;</div><div class='ctx'> </div><div class='del'>-        int32_t ref;</div><div class='del'>-</div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "data is NULL");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "data is NULL");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ref = GF_ATOMIC_DEC (this-&gt;refcount);</div><div class='add'>+    ref = GF_ATOMIC_DEC(this-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-        if (!ref)</div><div class='del'>-                data_destroy (this);</div><div class='add'>+    if (!ref)</div><div class='add'>+        data_destroy(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_ref (data_t *this)</div><div class='add'>+data_ref(data_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "data is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "data is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (this-&gt;refcount);</div><div class='add'>+    GF_ATOMIC_INC(this-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-        return this;</div><div class='add'>+    return this;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-int_to_data (int64_t value)</div><div class='add'>+int_to_data(int64_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRId64, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRId64, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_int64 (int64_t value)</div><div class='add'>+data_from_int64(int64_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRId64, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRId64, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_int32 (int32_t value)</div><div class='add'>+data_from_int32(int32_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRId32, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRId32, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_int16 (int16_t value)</div><div class='add'>+data_from_int16(int16_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRId16, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRId16, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_int8 (int8_t value)</div><div class='add'>+data_from_int8(int8_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%d", value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%d", value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_INT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_uint64 (uint64_t value)</div><div class='add'>+data_from_uint64(uint64_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRIu64, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRIu64, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_UINT;</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_UINT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_double (double value)</div><div class='add'>+data_from_double(double value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        data = get_new_data ();</div><div class='add'>+    data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%f", value);</div><div class='del'>-        if (data-&gt;len == -1) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_DOUBLE;</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%f", value);</div><div class='add'>+    if (data-&gt;len == -1) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_DOUBLE;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> data_t *</div><div class='del'>-data_from_uint32 (uint32_t value)</div><div class='add'>+data_from_uint32(uint32_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRIu32, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "asprintf failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRIu32, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        gf_msg_debug("dict", 0, "asprintf failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_UINT;</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_UINT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> data_t *</div><div class='del'>-data_from_uint16 (uint16_t value)</div><div class='add'>+data_from_uint16(uint16_t value)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = gf_asprintf (&amp;data-&gt;data, "%"PRIu16, value);</div><div class='del'>-        if (-1 == data-&gt;len) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = gf_asprintf(&amp;data-&gt;data, "%" PRIu16, value);</div><div class='add'>+    if (-1 == data-&gt;len) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;len++; /* account for terminating NULL */</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_UINT;</div><div class='add'>+    data-&gt;len++; /* account for terminating NULL */</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_UINT;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static data_t *</div><div class='del'>-data_from_ptr_common (void *value, gf_boolean_t is_static)</div><div class='add'>+data_from_ptr_common(void *value, gf_boolean_t is_static)</div><div class='ctx'> {</div><div class='del'>-        /* it is valid to set 0/NULL as a value, no need to check *value */</div><div class='add'>+    /* it is valid to set 0/NULL as a value, no need to check *value */</div><div class='ctx'> </div><div class='del'>-        data_t *data = get_new_data ();</div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    data_t *data = get_new_data();</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;data = value;</div><div class='del'>-	data-&gt;len = 0;</div><div class='del'>-        data-&gt;is_static = is_static;</div><div class='add'>+    data-&gt;data = value;</div><div class='add'>+    data-&gt;len = 0;</div><div class='add'>+    data-&gt;is_static = is_static;</div><div class='ctx'> </div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_PTR;</div><div class='del'>-        return data;</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_PTR;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-str_to_data (char *value)</div><div class='add'>+str_to_data(char *value)</div><div class='ctx'> {</div><div class='del'>-        if (!value) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "value is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!value) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "value is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return strn_to_data(value, strlen (value));</div><div class='add'>+    return strn_to_data(value, strlen(value));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-strn_to_data (char *value, const int vallen)</div><div class='add'>+strn_to_data(char *value, const int vallen)</div><div class='ctx'> {</div><div class='del'>-        if (!value) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "value is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    if (!value) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "value is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        data-&gt;len = vallen + 1;</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_STR;</div><div class='add'>+    if (!data) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    data-&gt;len = vallen + 1;</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_STR;</div><div class='ctx'> </div><div class='del'>-        data-&gt;data = value;</div><div class='del'>-        data-&gt;is_static = _gf_true;</div><div class='add'>+    data-&gt;data = value;</div><div class='add'>+    data-&gt;is_static = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static data_t *</div><div class='del'>-data_from_dynstr (char *value)</div><div class='add'>+data_from_dynstr(char *value)</div><div class='ctx'> {</div><div class='del'>-        if (!value) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "value is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!value) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "value is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data)</div><div class='del'>-                return NULL;</div><div class='del'>-        data-&gt;len = strlen (value) + 1;</div><div class='del'>-        data-&gt;data = value;</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_STR;</div><div class='add'>+    if (!data)</div><div class='add'>+        return NULL;</div><div class='add'>+    data-&gt;len = strlen(value) + 1;</div><div class='add'>+    data-&gt;data = value;</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_STR;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-data_from_dynptr (void *value, int32_t len)</div><div class='add'>+data_from_dynptr(void *value, int32_t len)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!data)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        data-&gt;len = len;</div><div class='del'>-        data-&gt;data = value;</div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_PTR;</div><div class='add'>+    data-&gt;len = len;</div><div class='add'>+    data-&gt;data = value;</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_PTR;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> data_t *</div><div class='del'>-bin_to_data (void *value, int32_t len)</div><div class='add'>+bin_to_data(void *value, int32_t len)</div><div class='ctx'> {</div><div class='del'>-        if (!value) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "value is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!value) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "value is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data_t *data = get_new_data ();</div><div class='add'>+    data_t *data = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (!data)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!data)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        data-&gt;is_static = _gf_true;</div><div class='del'>-        data-&gt;len = len;</div><div class='del'>-        data-&gt;data = value;</div><div class='add'>+    data-&gt;is_static = _gf_true;</div><div class='add'>+    data-&gt;len = len;</div><div class='add'>+    data-&gt;data = value;</div><div class='ctx'> </div><div class='del'>-        return data;</div><div class='add'>+    return data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *data_type_name[GF_DATA_TYPE_MAX] = {</div><div class='del'>-        [GF_DATA_TYPE_UNKNOWN] = "unknown",</div><div class='del'>-        [GF_DATA_TYPE_STR_OLD] = "string-old-version",</div><div class='del'>-        [GF_DATA_TYPE_INT] = "integer",</div><div class='del'>-        [GF_DATA_TYPE_UINT] = "unsigned integer",</div><div class='del'>-        [GF_DATA_TYPE_DOUBLE] = "float",</div><div class='del'>-        [GF_DATA_TYPE_STR] = "string",</div><div class='del'>-        [GF_DATA_TYPE_PTR] = "pointer",</div><div class='del'>-        [GF_DATA_TYPE_GFUUID] = "gf-uuid",</div><div class='del'>-        [GF_DATA_TYPE_IATT] = "iatt",</div><div class='add'>+    [GF_DATA_TYPE_UNKNOWN] = "unknown",</div><div class='add'>+    [GF_DATA_TYPE_STR_OLD] = "string-old-version",</div><div class='add'>+    [GF_DATA_TYPE_INT] = "integer",</div><div class='add'>+    [GF_DATA_TYPE_UINT] = "unsigned integer",</div><div class='add'>+    [GF_DATA_TYPE_DOUBLE] = "float",</div><div class='add'>+    [GF_DATA_TYPE_STR] = "string",</div><div class='add'>+    [GF_DATA_TYPE_PTR] = "pointer",</div><div class='add'>+    [GF_DATA_TYPE_GFUUID] = "gf-uuid",</div><div class='add'>+    [GF_DATA_TYPE_IATT] = "iatt",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int64_t</div><div class='del'>-data_to_int64 (data_t *data)</div><div class='add'>+data_to_int64(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='ctx'> </div><div class='del'>-        return (int64_t) strtoull (data-&gt;data, NULL, 0);</div><div class='add'>+    return (int64_t)strtoull(data-&gt;data, NULL, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-data_to_int32 (data_t *data)</div><div class='add'>+data_to_int32(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='ctx'> </div><div class='del'>-        return strtoul (data-&gt;data, NULL, 0);</div><div class='add'>+    return strtoul(data-&gt;data, NULL, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int16_t</div><div class='del'>-data_to_int16 (data_t *data)</div><div class='add'>+data_to_int16(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='ctx'> </div><div class='del'>-        int16_t value = 0;</div><div class='add'>+    int16_t value = 0;</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtol (data-&gt;data, NULL, 0);</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtol(data-&gt;data, NULL, 0);</div><div class='ctx'> </div><div class='del'>-        if ((value &gt; SHRT_MAX) || (value &lt; SHRT_MIN)) {</div><div class='del'>-                errno = ERANGE;</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, errno,</div><div class='del'>-                                  LG_MSG_DATA_CONVERSION_ERROR, "Error in data"</div><div class='del'>-                                  " conversion: detected overflow");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if ((value &gt; SHRT_MAX) || (value &lt; SHRT_MIN)) {</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, errno,</div><div class='add'>+                         LG_MSG_DATA_CONVERSION_ERROR,</div><div class='add'>+                         "Error in data"</div><div class='add'>+                         " conversion: detected overflow");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (int16_t)value;</div><div class='add'>+    return (int16_t)value;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int8_t</div><div class='del'>-data_to_int8 (data_t *data)</div><div class='add'>+data_to_int8(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);</div><div class='ctx'> </div><div class='del'>-        int8_t value = 0;</div><div class='add'>+    int8_t value = 0;</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        value = strtol (data-&gt;data, NULL, 0);</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtol(data-&gt;data, NULL, 0);</div><div class='ctx'> </div><div class='del'>-        if ((value &gt; SCHAR_MAX) || (value &lt; SCHAR_MIN)) {</div><div class='del'>-                errno = ERANGE;</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, errno,</div><div class='del'>-                                  LG_MSG_DATA_CONVERSION_ERROR, "Error in data"</div><div class='del'>-                                  " conversion: detected overflow");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if ((value &gt; SCHAR_MAX) || (value &lt; SCHAR_MIN)) {</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, errno,</div><div class='add'>+                         LG_MSG_DATA_CONVERSION_ERROR,</div><div class='add'>+                         "Error in data"</div><div class='add'>+                         " conversion: detected overflow");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (int8_t)value;</div><div class='add'>+    return (int8_t)value;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> uint64_t</div><div class='del'>-data_to_uint64 (data_t *data)</div><div class='add'>+data_to_uint64(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='ctx'> </div><div class='del'>-        return strtoll (data-&gt;data, NULL, 0);</div><div class='add'>+    return strtoll(data-&gt;data, NULL, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-data_to_uint32 (data_t *data)</div><div class='add'>+data_to_uint32(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='ctx'> </div><div class='del'>-        return strtol (data-&gt;data, NULL, 0);</div><div class='add'>+    return strtol(data-&gt;data, NULL, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint16_t</div><div class='del'>-data_to_uint16 (data_t *data)</div><div class='add'>+data_to_uint16(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='ctx'> </div><div class='del'>-	uint16_t value = 0;</div><div class='add'>+    uint16_t value = 0;</div><div class='ctx'> </div><div class='del'>-	errno = 0;</div><div class='del'>-	value = strtol (data-&gt;data, NULL, 0);</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtol(data-&gt;data, NULL, 0);</div><div class='ctx'> </div><div class='del'>-	if ((USHRT_MAX - value) &lt; 0) {</div><div class='del'>-		errno = ERANGE;</div><div class='del'>-		gf_msg_callingfn ("dict", GF_LOG_WARNING, errno,</div><div class='del'>-                                  LG_MSG_DATA_CONVERSION_ERROR,</div><div class='del'>-				  "Error in data conversion: "</div><div class='del'>-				  "overflow detected");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    if ((USHRT_MAX - value) &lt; 0) {</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, errno,</div><div class='add'>+                         LG_MSG_DATA_CONVERSION_ERROR,</div><div class='add'>+                         "Error in data conversion: "</div><div class='add'>+                         "overflow detected");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (uint16_t)value;</div><div class='add'>+    return (uint16_t)value;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint8_t</div><div class='del'>-data_to_uint8 (data_t *data)</div><div class='add'>+data_to_uint8(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);</div><div class='ctx'> </div><div class='del'>-	uint32_t value = 0;</div><div class='add'>+    uint32_t value = 0;</div><div class='ctx'> </div><div class='del'>-	errno = 0;</div><div class='del'>-	value = strtol (data-&gt;data, NULL, 0);</div><div class='add'>+    errno = 0;</div><div class='add'>+    value = strtol(data-&gt;data, NULL, 0);</div><div class='ctx'> </div><div class='del'>-	if ((UCHAR_MAX - (uint8_t)value) &lt; 0) {</div><div class='del'>-		errno = ERANGE;</div><div class='del'>-		gf_msg_callingfn ("dict", GF_LOG_WARNING, errno,</div><div class='del'>-                                  LG_MSG_DATA_CONVERSION_ERROR, "data "</div><div class='del'>-                                  "conversion overflow detected");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    if ((UCHAR_MAX - (uint8_t)value) &lt; 0) {</div><div class='add'>+        errno = ERANGE;</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, errno,</div><div class='add'>+                         LG_MSG_DATA_CONVERSION_ERROR,</div><div class='add'>+                         "data "</div><div class='add'>+                         "conversion overflow detected");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (uint8_t) value;</div><div class='add'>+    return (uint8_t)value;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-data_to_str (data_t *data)</div><div class='add'>+data_to_str(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_STR, "null", NULL);</div><div class='del'>-        return data-&gt;data;</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_STR, "null", NULL);</div><div class='add'>+    return data-&gt;data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-data_to_ptr (data_t *data)</div><div class='add'>+data_to_ptr(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, "null", NULL);</div><div class='del'>-        return data-&gt;data;</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, "null", NULL);</div><div class='add'>+    return data-&gt;data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-data_to_bin (data_t *data)</div><div class='add'>+data_to_bin(data_t *data)</div><div class='ctx'> {</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, "null", NULL);</div><div class='del'>-        return data-&gt;data;</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, "null", NULL);</div><div class='add'>+    return data-&gt;data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct iatt *</div><div class='del'>-data_to_iatt (data_t *data, char *key)</div><div class='del'>-{</div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_IATT, key, NULL);</div><div class='del'>-</div><div class='del'>-        /* We only check for smaller size. If it's bigger we simply ignore</div><div class='del'>-         * the extra data. This way it's easy to do changes in the future that</div><div class='del'>-         * pass more data but are backward compatible (if the initial contents</div><div class='del'>-         * of the struct are maintained, of course). */</div><div class='del'>-        if (data-&gt;len &lt; sizeof(struct iatt)) {</div><div class='del'>-                gf_msg("glusterfs", GF_LOG_ERROR, ENOBUFS,</div><div class='del'>-                       LG_MSG_UNDERSIZED_BUF,</div><div class='del'>-                       "data value for '%s' is smaller than expected", key);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+data_to_iatt(data_t *data, char *key)</div><div class='add'>+{</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_IATT, key, NULL);</div><div class='ctx'> </div><div class='del'>-        return (struct iatt *)data-&gt;data;</div><div class='add'>+    /* We only check for smaller size. If it's bigger we simply ignore</div><div class='add'>+     * the extra data. This way it's easy to do changes in the future that</div><div class='add'>+     * pass more data but are backward compatible (if the initial contents</div><div class='add'>+     * of the struct are maintained, of course). */</div><div class='add'>+    if (data-&gt;len &lt; sizeof(struct iatt)) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_ERROR, ENOBUFS, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+               "data value for '%s' is smaller than expected", key);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return (struct iatt *)data-&gt;data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_null_foreach_fn (dict_t *d, char *k,</div><div class='del'>-                      data_t *v, void *tmp)</div><div class='add'>+dict_null_foreach_fn(dict_t *d, char *k, data_t *v, void *tmp)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_remove_foreach_fn (dict_t *d, char *k,</div><div class='del'>-                        data_t *v, void *_tmp)</div><div class='del'>-{</div><div class='del'>-        if (!d || !k) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                        LG_MSG_INVALID_ENTRY, "%s is NULL",</div><div class='del'>-                        d?"key":"dictionary");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+dict_remove_foreach_fn(dict_t *d, char *k, data_t *v, void *_tmp)</div><div class='add'>+{</div><div class='add'>+    if (!d || !k) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "%s is NULL", d ? "key" : "dictionary");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict_del (d, k);</div><div class='del'>-        return 0;</div><div class='add'>+    dict_del(d, k);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dict_match_everything (dict_t *d, char *k, data_t *v, void *data)</div><div class='add'>+dict_match_everything(dict_t *d, char *k, data_t *v, void *data)</div><div class='ctx'> {</div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_foreach (dict_t *dict,</div><div class='del'>-              int (*fn)(dict_t *this,</div><div class='del'>-                        char *key,</div><div class='del'>-                        data_t *value,</div><div class='del'>-                        void *data),</div><div class='del'>-              void *data)</div><div class='add'>+dict_foreach(dict_t *dict,</div><div class='add'>+             int (*fn)(dict_t *this, char *key, data_t *value, void *data),</div><div class='add'>+             void *data)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_foreach_match (dict, dict_match_everything, NULL, fn, data);</div><div class='add'>+    ret = dict_foreach_match(dict, dict_match_everything, NULL, fn, data);</div><div class='ctx'> </div><div class='del'>-        if (ret &gt; 0)</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (ret &gt; 0)</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* return values:</div><div class='hunk'>@@ -1330,50 +1301,45 @@ dict_foreach (dict_t *dict,</div><div class='ctx'>    +n = n number of matches</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-dict_foreach_match (dict_t *dict,</div><div class='del'>-             gf_boolean_t (*match)(dict_t *this,</div><div class='del'>-                                char *key,</div><div class='del'>-                                data_t *value,</div><div class='del'>-                                void *mdata),</div><div class='del'>-             void *match_data,</div><div class='del'>-             int (*action)(dict_t *this,</div><div class='del'>-                                char *key,</div><div class='del'>-                                data_t *value,</div><div class='del'>-                                void *adata),</div><div class='del'>-              void *action_data)</div><div class='del'>-{</div><div class='del'>-        if (!dict || !match || !action) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict|match|action is "</div><div class='del'>-                                  "NULL");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        int          ret   = -1;</div><div class='del'>-        int          count = 0;</div><div class='del'>-        data_pair_t *pairs = NULL;</div><div class='del'>-        data_pair_t *next  = NULL;</div><div class='del'>-</div><div class='del'>-        pairs = dict-&gt;members_list;</div><div class='del'>-        while (pairs) {</div><div class='del'>-                next = pairs-&gt;next;</div><div class='del'>-                if (match (dict, pairs-&gt;key, pairs-&gt;value, match_data)) {</div><div class='del'>-                        ret = action (dict, pairs-&gt;key, pairs-&gt;value,</div><div class='del'>-                                      action_data);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                return ret;</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='del'>-                pairs = next;</div><div class='add'>+dict_foreach_match(dict_t *dict,</div><div class='add'>+                   gf_boolean_t (*match)(dict_t *this, char *key, data_t *value,</div><div class='add'>+                                         void *mdata),</div><div class='add'>+                   void *match_data,</div><div class='add'>+                   int (*action)(dict_t *this, char *key, data_t *value,</div><div class='add'>+                                 void *adata),</div><div class='add'>+                   void *action_data)</div><div class='add'>+{</div><div class='add'>+    if (!dict || !match || !action) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict|match|action is "</div><div class='add'>+                         "NULL");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    data_pair_t *pairs = NULL;</div><div class='add'>+    data_pair_t *next = NULL;</div><div class='add'>+</div><div class='add'>+    pairs = dict-&gt;members_list;</div><div class='add'>+    while (pairs) {</div><div class='add'>+        next = pairs-&gt;next;</div><div class='add'>+        if (match(dict, pairs-&gt;key, pairs-&gt;value, match_data)) {</div><div class='add'>+            ret = action(dict, pairs-&gt;key, pairs-&gt;value, action_data);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                return ret;</div><div class='add'>+            count++;</div><div class='ctx'>         }</div><div class='add'>+        pairs = next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-dict_fnmatch (dict_t *d, char *k, data_t *val, void *match_data)</div><div class='add'>+dict_fnmatch(dict_t *d, char *k, data_t *val, void *match_data)</div><div class='ctx'> {</div><div class='del'>-        return (fnmatch (match_data, k, 0) == 0);</div><div class='add'>+    return (fnmatch(match_data, k, 0) == 0);</div><div class='ctx'> }</div><div class='ctx'> /* return values:</div><div class='ctx'>    -1 = failure,</div><div class='hunk'>@@ -1381,17 +1347,14 @@ dict_fnmatch (dict_t *d, char *k, data_t *val, void *match_data)</div><div class='ctx'>    +n = n number of matches</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-dict_foreach_fnmatch (dict_t *dict, char *pattern,</div><div class='del'>-                      int (*fn)(dict_t *this,</div><div class='del'>-                                char *key,</div><div class='del'>-                                data_t *value,</div><div class='del'>-                                void *data),</div><div class='del'>-                      void *data)</div><div class='add'>+dict_foreach_fnmatch(dict_t *dict, char *pattern,</div><div class='add'>+                     int (*fn)(dict_t *this, char *key, data_t *value,</div><div class='add'>+                               void *data),</div><div class='add'>+                     void *data)</div><div class='ctx'> {</div><div class='del'>-        return dict_foreach_match (dict, dict_fnmatch, pattern, fn, data);</div><div class='add'>+    return dict_foreach_match(dict, dict_fnmatch, pattern, fn, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * dict_keys_join - pack the keys of the dictionary in a buffer.</div><div class='ctx'>  *</div><div class='hunk'>@@ -1406,89 +1369,86 @@ dict_foreach_fnmatch (dict_t *dict, char *pattern,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_keys_join (void *value, int size, dict_t *dict,</div><div class='del'>-                int (*filter_fn)(char *k))</div><div class='add'>+dict_keys_join(void *value, int size, dict_t *dict, int (*filter_fn)(char *k))</div><div class='ctx'> {</div><div class='del'>-	int          len = 0;</div><div class='del'>-        data_pair_t *pairs = NULL;</div><div class='del'>-        data_pair_t *next  = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    data_pair_t *pairs = NULL;</div><div class='add'>+    data_pair_t *next = NULL;</div><div class='ctx'> </div><div class='del'>-        pairs = dict-&gt;members_list;</div><div class='del'>-        while (pairs) {</div><div class='del'>-                next = pairs-&gt;next;</div><div class='add'>+    pairs = dict-&gt;members_list;</div><div class='add'>+    while (pairs) {</div><div class='add'>+        next = pairs-&gt;next;</div><div class='ctx'> </div><div class='del'>-                if (filter_fn &amp;&amp; filter_fn (pairs-&gt;key)){</div><div class='del'>-		    pairs = next;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='add'>+        if (filter_fn &amp;&amp; filter_fn(pairs-&gt;key)) {</div><div class='add'>+            pairs = next;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (value &amp;&amp; (size &gt; len))</div><div class='del'>-			strncpy (value + len, pairs-&gt;key, size - len);</div><div class='add'>+        if (value &amp;&amp; (size &gt; len))</div><div class='add'>+            strncpy(value + len, pairs-&gt;key, size - len);</div><div class='ctx'> </div><div class='del'>-                len += (strlen (pairs-&gt;key) + 1);</div><div class='add'>+        len += (strlen(pairs-&gt;key) + 1);</div><div class='ctx'> </div><div class='del'>-                pairs = next;</div><div class='del'>-        }</div><div class='add'>+        pairs = next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return len;</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dict_copy_one (dict_t *unused, char *key, data_t *value, void *newdict)</div><div class='add'>+dict_copy_one(dict_t *unused, char *key, data_t *value, void *newdict)</div><div class='ctx'> {</div><div class='del'>-        return dict_set ((dict_t *)newdict, key, (value));</div><div class='add'>+    return dict_set((dict_t *)newdict, key, (value));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-dict_copy (dict_t *dict,</div><div class='del'>-           dict_t *new)</div><div class='add'>+dict_copy(dict_t *dict, dict_t *new)</div><div class='ctx'> {</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!new)</div><div class='del'>-                new = get_new_dict_full (dict-&gt;hash_size);</div><div class='add'>+    if (!new)</div><div class='add'>+        new = get_new_dict_full(dict-&gt;hash_size);</div><div class='ctx'> </div><div class='del'>-        dict_foreach (dict, dict_copy_one, new);</div><div class='add'>+    dict_foreach(dict, dict_copy_one, new);</div><div class='ctx'> </div><div class='del'>-        return new;</div><div class='add'>+    return new;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_reset (dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict_foreach (dict, dict_remove_foreach_fn, NULL);</div><div class='del'>-        ret = 0;</div><div class='add'>+dict_reset(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict_foreach(dict, dict_remove_foreach_fn, NULL);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-dict_copy_with_ref (dict_t *dict,</div><div class='del'>-                    dict_t *new)</div><div class='add'>+dict_copy_with_ref(dict_t *dict, dict_t *new)</div><div class='ctx'> {</div><div class='del'>-        dict_t *local_new = NULL;</div><div class='add'>+    dict_t *local_new = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO("dict", dict, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dict", dict, fail);</div><div class='ctx'> </div><div class='del'>-        if (new == NULL) {</div><div class='del'>-                local_new = dict_new ();</div><div class='del'>-                GF_VALIDATE_OR_GOTO("dict", local_new, fail);</div><div class='del'>-                new = local_new;</div><div class='del'>-        }</div><div class='add'>+    if (new == NULL) {</div><div class='add'>+        local_new = dict_new();</div><div class='add'>+        GF_VALIDATE_OR_GOTO("dict", local_new, fail);</div><div class='add'>+        new = local_new;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict_foreach (dict, dict_copy_one, new);</div><div class='add'>+    dict_foreach(dict, dict_copy_one, new);</div><div class='ctx'> fail:</div><div class='del'>-        return new;</div><div class='add'>+    return new;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1502,592 +1462,581 @@ fail:</div><div class='ctx'>  *               -val error, val = errno</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_get_with_ref (dict_t *this, char *key, data_t **data)</div><div class='add'>+dict_get_with_ref(dict_t *this, char *key, data_t **data)</div><div class='ctx'> {</div><div class='del'>-        if (!this || !key || !data) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "dict OR key (%s) is NULL", key);</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !data) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict OR key (%s) is NULL", key);</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dict_get_with_refn(this, key, strlen (key), data);</div><div class='add'>+    return dict_get_with_refn(this, key, strlen(key), data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_with_refn (dict_t *this, char *key, const int keylen, data_t **data)</div><div class='add'>+dict_get_with_refn(dict_t *this, char *key, const int keylen, data_t **data)</div><div class='ctx'> {</div><div class='del'>-        data_pair_t * pair = NULL;</div><div class='del'>-        int           ret  = -ENOENT;</div><div class='del'>-        uint32_t      hash;</div><div class='add'>+    data_pair_t *pair = NULL;</div><div class='add'>+    int ret = -ENOENT;</div><div class='add'>+    uint32_t hash;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !data) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "dict OR key (%s) is NULL", key);</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !data) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict OR key (%s) is NULL", key);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hash = SuperFastHash (key, keylen);</div><div class='add'>+    hash = SuperFastHash(key, keylen);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                pair = dict_lookup_common (this, key, hash);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        pair = dict_lookup_common(this, key, hash);</div><div class='ctx'> </div><div class='del'>-                if (pair) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        *data = data_ref (pair-&gt;value);</div><div class='del'>-                 }</div><div class='add'>+        if (pair) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            *data = data_ref(pair-&gt;value);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_ptr_common (data_t *data, void **val)</div><div class='add'>+data_to_ptr_common(data_t *data, void **val)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *val = data-&gt;data;</div><div class='add'>+    *val = data-&gt;data;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-data_to_int8_ptr (data_t *data, int8_t *val)</div><div class='add'>+data_to_int8_ptr(data_t *data, int8_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtol (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtol(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_int16_ptr (data_t *data, int16_t *val)</div><div class='add'>+data_to_int16_ptr(data_t *data, int16_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtol (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtol(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_int32_ptr (data_t *data, int32_t *val)</div><div class='add'>+data_to_int32_ptr(data_t *data, int32_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtol (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtol(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_int64_ptr (data_t *data, int64_t *val)</div><div class='add'>+data_to_int64_ptr(data_t *data, int64_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtoll (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtoll(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_uint16_ptr (data_t *data, uint16_t *val)</div><div class='add'>+data_to_uint16_ptr(data_t *data, uint16_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtoul (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtoul(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_uint32_ptr (data_t *data, uint32_t *val)</div><div class='add'>+data_to_uint32_ptr(data_t *data, uint32_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtoul (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtoul(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_uint64_ptr (data_t *data, uint64_t *val)</div><div class='add'>+data_to_uint64_ptr(data_t *data, uint64_t *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtoull (data-&gt;data, NULL, 0);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtoull(data-&gt;data, NULL, 0);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-data_to_double_ptr (data_t *data, double *val)</div><div class='add'>+data_to_double_ptr(data_t *data, double *val)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!data || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!data || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='del'>-        *val = strtod (data-&gt;data, NULL);</div><div class='del'>-        if (errno != 0)</div><div class='del'>-                ret = -errno;</div><div class='add'>+    errno = 0;</div><div class='add'>+    *val = strtod(data-&gt;data, NULL);</div><div class='add'>+    if (errno != 0)</div><div class='add'>+        ret = -errno;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_int8 (dict_t *this, char *key, int8_t *val)</div><div class='add'>+dict_get_int8(dict_t *this, char *key, int8_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_int8_ptr (data, val);</div><div class='add'>+    ret = data_to_int8_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_set_int8 (dict_t *this, char *key, int8_t val)</div><div class='add'>+dict_set_int8(dict_t *this, char *key, int8_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_int8 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_int8(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_int16 (dict_t *this, char *key, int16_t *val)</div><div class='add'>+dict_get_int16(dict_t *this, char *key, int16_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_int16_ptr (data, val);</div><div class='add'>+    ret = data_to_int16_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_set_int16 (dict_t *this, char *key, int16_t val)</div><div class='add'>+dict_set_int16(dict_t *this, char *key, int16_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_int16 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_int16(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_int32n (dict_t *this, char *key, const int keylen, int32_t *val)</div><div class='add'>+dict_get_int32n(dict_t *this, char *key, const int keylen, int32_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_refn (this, key, keylen, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_refn(this, key, keylen, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_int32_ptr (data, val);</div><div class='add'>+    ret = data_to_int32_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_int32 (dict_t *this, char *key, int32_t *val)</div><div class='add'>+dict_get_int32(dict_t *this, char *key, int32_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_int32_ptr (data, val);</div><div class='add'>+    ret = data_to_int32_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_int32n (dict_t *this, char *key, const int keylen, int32_t val)</div><div class='add'>+dict_set_int32n(dict_t *this, char *key, const int keylen, int32_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_int32 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_int32(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_setn (this, key, keylen, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_setn(this, key, keylen, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_int32 (dict_t *this, char *key, int32_t val)</div><div class='add'>+dict_set_int32(dict_t *this, char *key, int32_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_int32 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_int32(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_int64 (dict_t *this, char *key, int64_t *val)</div><div class='add'>+dict_get_int64(dict_t *this, char *key, int64_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_int64_ptr (data, val);</div><div class='add'>+    ret = data_to_int64_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_set_int64 (dict_t *this, char *key, int64_t val)</div><div class='add'>+dict_set_int64(dict_t *this, char *key, int64_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_int64 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_int64(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_uint16 (dict_t *this, char *key, uint16_t *val)</div><div class='add'>+dict_get_uint16(dict_t *this, char *key, uint16_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_uint16_ptr (data, val);</div><div class='add'>+    ret = data_to_uint16_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_set_uint16 (dict_t *this, char *key, uint16_t val)</div><div class='add'>+dict_set_uint16(dict_t *this, char *key, uint16_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_uint16 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_uint16(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_uint32 (dict_t *this, char *key, uint32_t *val)</div><div class='add'>+dict_get_uint32(dict_t *this, char *key, uint32_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_uint32_ptr (data, val);</div><div class='add'>+    ret = data_to_uint32_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_set_uint32 (dict_t *this, char *key, uint32_t val)</div><div class='add'>+dict_set_uint32(dict_t *this, char *key, uint32_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_uint32 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_uint32(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_uint64 (dict_t *this, char *key, uint64_t *val)</div><div class='add'>+dict_get_uint64(dict_t *this, char *key, uint64_t *val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_uint64_ptr (data, val);</div><div class='add'>+    ret = data_to_uint64_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_set_uint64 (dict_t *this, char *key, uint64_t val)</div><div class='add'>+dict_set_uint64(dict_t *this, char *key, uint64_t val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_uint64 (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_uint64(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2100,23 +2049,23 @@ err:</div><div class='ctx'>  * &lt;0: Error</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dict_check_flag (dict_t *this, char *key, int flag)</div><div class='add'>+dict_check_flag(dict_t *this, char *key, int flag)</div><div class='ctx'> {</div><div class='del'>-        data_t  *data = NULL;</div><div class='del'>-        int     ret = -ENOENT;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -ENOENT;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (BIT_VALUE((unsigned char *)(data-&gt;data), flag))</div><div class='del'>-                ret = 1;</div><div class='del'>-        else</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (BIT_VALUE((unsigned char *)(data-&gt;data), flag))</div><div class='add'>+        ret = 1;</div><div class='add'>+    else</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        data_unref(data);</div><div class='del'>-        return ret;</div><div class='add'>+    data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2125,138 +2074,128 @@ dict_check_flag (dict_t *this, char *key, int flag)</div><div class='ctx'>  * op: Indicates operation DICT_FLAG_SET / DICT_FLAG_CLEAR</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-_dict_modify_flag (dict_t *this, char *key, int flag, int op)</div><div class='del'>-{</div><div class='del'>-        data_t          *data           = NULL;</div><div class='del'>-        int             ret             = 0;</div><div class='del'>-        data_pair_t     *pair           = NULL;</div><div class='del'>-        char            *ptr            = NULL;</div><div class='del'>-        int             hashval         = 0;</div><div class='del'>-        uint32_t        hash;</div><div class='del'>-</div><div class='del'>-        if (!this || !key) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "dict OR key (%s) is NULL", key);</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Using a size of 32 bytes to support max of 256</div><div class='del'>-         * flags in a single key. This should be suffcient.</div><div class='del'>-         */</div><div class='del'>-        GF_ASSERT(flag &gt;= 0 &amp;&amp; flag &lt; DICT_MAX_FLAGS);</div><div class='del'>-</div><div class='del'>-        hash = SuperFastHash (key, strlen (key));</div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                pair = dict_lookup_common (this, key, hash);</div><div class='del'>-</div><div class='del'>-                if (pair) {</div><div class='del'>-                        data = pair-&gt;value;</div><div class='del'>-                        if (op == DICT_FLAG_SET)</div><div class='del'>-                                BIT_SET((unsigned char *)(data-&gt;data), flag);</div><div class='del'>-                        else</div><div class='del'>-                                BIT_CLEAR((unsigned char *)(data-&gt;data), flag);</div><div class='del'>-                } else {</div><div class='del'>-                        ptr = GF_CALLOC(1, DICT_MAX_FLAGS / 8,</div><div class='del'>-                                        gf_common_mt_char);</div><div class='del'>-                        if (!ptr) {</div><div class='del'>-                                gf_msg("dict", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                       LG_MSG_NO_MEMORY,</div><div class='del'>-                                       "unable to allocate flag bit array");</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='add'>+_dict_modify_flag(dict_t *this, char *key, int flag, int op)</div><div class='add'>+{</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    data_pair_t *pair = NULL;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    int hashval = 0;</div><div class='add'>+    uint32_t hash;</div><div class='add'>+</div><div class='add'>+    if (!this || !key) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict OR key (%s) is NULL", key);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Using a size of 32 bytes to support max of 256</div><div class='add'>+     * flags in a single key. This should be suffcient.</div><div class='add'>+     */</div><div class='add'>+    GF_ASSERT(flag &gt;= 0 &amp;&amp; flag &lt; DICT_MAX_FLAGS);</div><div class='add'>+</div><div class='add'>+    hash = SuperFastHash(key, strlen(key));</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        pair = dict_lookup_common(this, key, hash);</div><div class='ctx'> </div><div class='del'>-                        data = data_from_dynptr(ptr, DICT_MAX_FLAGS / 8);</div><div class='del'>-</div><div class='del'>-                        if (!data) {</div><div class='del'>-                                gf_msg("dict", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                       LG_MSG_NO_MEMORY,</div><div class='del'>-                                       "unable to allocate data");</div><div class='del'>-                                GF_FREE(ptr);</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (op == DICT_FLAG_SET)</div><div class='del'>-                                BIT_SET((unsigned char *)(data-&gt;data), flag);</div><div class='del'>-                        else</div><div class='del'>-                                BIT_CLEAR((unsigned char *)(data-&gt;data), flag);</div><div class='del'>-</div><div class='del'>-                        if (this-&gt;free_pair_in_use) {</div><div class='del'>-                                pair = mem_get0 (THIS-&gt;ctx-&gt;dict_pair_pool);</div><div class='del'>-                                if (!pair) {</div><div class='del'>-                                        gf_msg("dict", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                               LG_MSG_NO_MEMORY,</div><div class='del'>-                                               "unable to allocate dict pair");</div><div class='del'>-                                        ret = -ENOMEM;</div><div class='del'>-                                        goto err;</div><div class='del'>-                                }</div><div class='del'>-                        } else {</div><div class='del'>-                                pair = &amp;this-&gt;free_pair;</div><div class='del'>-                                this-&gt;free_pair_in_use = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        pair-&gt;key = (char *)GF_MALLOC(strlen (key) + 1,</div><div class='del'>-                                                      gf_common_mt_char);</div><div class='del'>-                        if (!pair-&gt;key) {</div><div class='del'>-                                gf_msg("dict", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                       LG_MSG_NO_MEMORY,</div><div class='del'>-                                       "unable to allocate dict pair");</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                        strcpy (pair-&gt;key, key);</div><div class='del'>-                        pair-&gt;key_hash = hash;</div><div class='del'>-                        pair-&gt;value = data_ref (data);</div><div class='add'>+        if (pair) {</div><div class='add'>+            data = pair-&gt;value;</div><div class='add'>+            if (op == DICT_FLAG_SET)</div><div class='add'>+                BIT_SET((unsigned char *)(data-&gt;data), flag);</div><div class='add'>+            else</div><div class='add'>+                BIT_CLEAR((unsigned char *)(data-&gt;data), flag);</div><div class='add'>+        } else {</div><div class='add'>+            ptr = GF_CALLOC(1, DICT_MAX_FLAGS / 8, gf_common_mt_char);</div><div class='add'>+            if (!ptr) {</div><div class='add'>+                gf_msg("dict", GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+                       "unable to allocate flag bit array");</div><div class='add'>+                ret = -ENOMEM;</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        hashval = hash % this-&gt;hash_size;</div><div class='del'>-                        pair-&gt;hash_next = this-&gt;members[hashval];</div><div class='del'>-                        this-&gt;members[hashval] = pair;</div><div class='add'>+            data = data_from_dynptr(ptr, DICT_MAX_FLAGS / 8);</div><div class='ctx'> </div><div class='del'>-                        pair-&gt;next = this-&gt;members_list;</div><div class='del'>-                        pair-&gt;prev = NULL;</div><div class='del'>-                        if (this-&gt;members_list)</div><div class='del'>-                                this-&gt;members_list-&gt;prev = pair;</div><div class='del'>-                        this-&gt;members_list = pair;</div><div class='del'>-                        this-&gt;count++;</div><div class='add'>+            if (!data) {</div><div class='add'>+                gf_msg("dict", GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+                       "unable to allocate data");</div><div class='add'>+                GF_FREE(ptr);</div><div class='add'>+                ret = -ENOMEM;</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (op == DICT_FLAG_SET)</div><div class='add'>+                BIT_SET((unsigned char *)(data-&gt;data), flag);</div><div class='add'>+            else</div><div class='add'>+                BIT_CLEAR((unsigned char *)(data-&gt;data), flag);</div><div class='ctx'> </div><div class='del'>-                        if (this-&gt;max_count &lt; this-&gt;count)</div><div class='del'>-                                this-&gt;max_count = this-&gt;count;</div><div class='add'>+            if (this-&gt;free_pair_in_use) {</div><div class='add'>+                pair = mem_get0(THIS-&gt;ctx-&gt;dict_pair_pool);</div><div class='add'>+                if (!pair) {</div><div class='add'>+                    gf_msg("dict", GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+                           "unable to allocate dict pair");</div><div class='add'>+                    ret = -ENOMEM;</div><div class='add'>+                    goto err;</div><div class='ctx'>                 }</div><div class='add'>+            } else {</div><div class='add'>+                pair = &amp;this-&gt;free_pair;</div><div class='add'>+                this-&gt;free_pair_in_use = _gf_true;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            pair-&gt;key = (char *)GF_MALLOC(strlen(key) + 1, gf_common_mt_char);</div><div class='add'>+            if (!pair-&gt;key) {</div><div class='add'>+                gf_msg("dict", GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+                       "unable to allocate dict pair");</div><div class='add'>+                ret = -ENOMEM;</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            strcpy(pair-&gt;key, key);</div><div class='add'>+            pair-&gt;key_hash = hash;</div><div class='add'>+            pair-&gt;value = data_ref(data);</div><div class='add'>+</div><div class='add'>+            hashval = hash % this-&gt;hash_size;</div><div class='add'>+            pair-&gt;hash_next = this-&gt;members[hashval];</div><div class='add'>+            this-&gt;members[hashval] = pair;</div><div class='add'>+</div><div class='add'>+            pair-&gt;next = this-&gt;members_list;</div><div class='add'>+            pair-&gt;prev = NULL;</div><div class='add'>+            if (this-&gt;members_list)</div><div class='add'>+                this-&gt;members_list-&gt;prev = pair;</div><div class='add'>+            this-&gt;members_list = pair;</div><div class='add'>+            this-&gt;count++;</div><div class='add'>+</div><div class='add'>+            if (this-&gt;max_count &lt; this-&gt;count)</div><div class='add'>+                this-&gt;max_count = this-&gt;count;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='del'>-        return 0;</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (key &amp;&amp; this)</div><div class='del'>-                UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    if (key &amp;&amp; this)</div><div class='add'>+        UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (pair) {</div><div class='del'>-                if (pair-&gt;key)</div><div class='del'>-                        free(pair-&gt;key);</div><div class='add'>+    if (pair) {</div><div class='add'>+        if (pair-&gt;key)</div><div class='add'>+            free(pair-&gt;key);</div><div class='ctx'> </div><div class='del'>-                if (pair == &amp;this-&gt;free_pair) {</div><div class='del'>-                        this-&gt;free_pair_in_use = _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        mem_put (pair);</div><div class='del'>-                }</div><div class='add'>+        if (pair == &amp;this-&gt;free_pair) {</div><div class='add'>+            this-&gt;free_pair_in_use = _gf_false;</div><div class='add'>+        } else {</div><div class='add'>+            mem_put(pair);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (data)</div><div class='del'>-                data_destroy(data);</div><div class='del'>-</div><div class='add'>+    if (data)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='del'>-        gf_msg("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-               LG_MSG_DICT_SET_FAILED,</div><div class='del'>-               "unable to set key (%s) in dict ", key);</div><div class='add'>+    gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_DICT_SET_FAILED,</div><div class='add'>+           "unable to set key (%s) in dict ", key);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2269,396 +2208,395 @@ err:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_flag (dict_t *this, char *key, int flag)</div><div class='add'>+dict_set_flag(dict_t *this, char *key, int flag)</div><div class='ctx'> {</div><div class='del'>-        return _dict_modify_flag (this, key, flag, DICT_FLAG_SET);</div><div class='add'>+    return _dict_modify_flag(this, key, flag, DICT_FLAG_SET);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_clear_flag (dict_t *this, char *key, int flag)</div><div class='add'>+dict_clear_flag(dict_t *this, char *key, int flag)</div><div class='ctx'> {</div><div class='del'>-        return _dict_modify_flag (this, key, flag, DICT_FLAG_CLEAR);</div><div class='add'>+    return _dict_modify_flag(this, key, flag, DICT_FLAG_CLEAR);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_get_double (dict_t *this, char *key, double *val)</div><div class='add'>+dict_get_double(dict_t *this, char *key, double *val)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = NULL;</div><div class='del'>-        int     ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !val) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !val) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_DOUBLE, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_DOUBLE, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_double_ptr (data, val);</div><div class='add'>+    ret = data_to_double_ptr(data, val);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='del'>-        return ret;</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_double (dict_t *this, char *key, double val)</div><div class='add'>+dict_set_double(dict_t *this, char *key, double val)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_double (val);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_double(val);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_static_ptr (dict_t *this, char *key, void *ptr)</div><div class='add'>+dict_set_static_ptr(dict_t *this, char *key, void *ptr)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_ptr_common (ptr, _gf_true);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_ptr_common(ptr, _gf_true);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_dynptr (dict_t *this, char *key, void *ptr, size_t len)</div><div class='add'>+dict_set_dynptr(dict_t *this, char *key, void *ptr, size_t len)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_dynptr (ptr, len);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_dynptr(ptr, len);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_ptr (dict_t *this, char *key, void **ptr)</div><div class='add'>+dict_get_ptr(dict_t *this, char *key, void **ptr)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !ptr) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !ptr) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = data_to_ptr_common (data, ptr);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = data_to_ptr_common(data, ptr);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_ptr_and_len (dict_t *this, char *key, void **ptr, int *len)</div><div class='add'>+dict_get_ptr_and_len(dict_t *this, char *key, void **ptr, int *len)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !ptr) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !ptr) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-	*len = data-&gt;len;</div><div class='add'>+    *len = data-&gt;len;</div><div class='ctx'> </div><div class='del'>-        ret = data_to_ptr_common (data, ptr);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = data_to_ptr_common(data, ptr);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Get string - with known key length */</div><div class='ctx'> int</div><div class='del'>-dict_get_strn (dict_t *this, char *key, const int keylen, char **str)</div><div class='add'>+dict_get_strn(dict_t *this, char *key, const int keylen, char **str)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = -EINVAL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !str) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_with_refn (this, key, keylen, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !str) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_with_refn(this, key, keylen, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_STR, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_STR, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        *str = data-&gt;data;</div><div class='add'>+    *str = data-&gt;data;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_str (dict_t *this, char *key, char **str)</div><div class='add'>+dict_get_str(dict_t *this, char *key, char **str)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = -EINVAL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !str) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !str) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_STR, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_STR, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        *str = data-&gt;data;</div><div class='add'>+    *str = data-&gt;data;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_str (dict_t *this, char *key, char *str)</div><div class='add'>+dict_set_str(dict_t *this, char *key, char *str)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = str_to_data (str);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = str_to_data(str);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Set string - with known key length */</div><div class='ctx'> int</div><div class='del'>-dict_set_strn (dict_t *this, char *key, const int keylen, char *str)</div><div class='add'>+dict_set_strn(dict_t *this, char *key, const int keylen, char *str)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = str_to_data (str);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = str_to_data(str);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_setn (this, key, keylen, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_setn(this, key, keylen, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Set string - with known key length and known value length */</div><div class='ctx'> int</div><div class='del'>-dict_set_nstrn (dict_t *this, char *key, const int keylen, char *str, const int vallen)</div><div class='add'>+dict_set_nstrn(dict_t *this, char *key, const int keylen, char *str,</div><div class='add'>+               const int vallen)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = strn_to_data (str, vallen);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = strn_to_data(str, vallen);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_setn (this, key, keylen, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_setn(this, key, keylen, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_dynstr_with_alloc (dict_t *this, char *key, const char *str)</div><div class='add'>+dict_set_dynstr_with_alloc(dict_t *this, char *key, const char *str)</div><div class='ctx'> {</div><div class='del'>-        char *alloc_str = NULL;</div><div class='del'>-        int   ret       = -1;</div><div class='add'>+    char *alloc_str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        alloc_str = gf_strdup (str);</div><div class='del'>-        if (!alloc_str)</div><div class='del'>-                return -1;</div><div class='add'>+    alloc_str = gf_strdup(str);</div><div class='add'>+    if (!alloc_str)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (this, key, alloc_str);</div><div class='del'>-        if (ret == -EINVAL)</div><div class='del'>-                GF_FREE (alloc_str);</div><div class='add'>+    ret = dict_set_dynstr(this, key, alloc_str);</div><div class='add'>+    if (ret == -EINVAL)</div><div class='add'>+        GF_FREE(alloc_str);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_dynstr (dict_t *this, char *key, char *str)</div><div class='add'>+dict_set_dynstr(dict_t *this, char *key, char *str)</div><div class='ctx'> {</div><div class='del'>-        const int keylen = strlen(key);</div><div class='del'>-        return dict_set_dynstrn(this, key, keylen, str);</div><div class='add'>+    const int keylen = strlen(key);</div><div class='add'>+    return dict_set_dynstrn(this, key, keylen, str);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_dynstrn (dict_t *this, char *key, const int keylen, char *str)</div><div class='add'>+dict_set_dynstrn(dict_t *this, char *key, const int keylen, char *str)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_dynstr (str);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_dynstr(str);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_setn (this, key, keylen, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_setn(this, key, keylen, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is called only by the volgen for now.</div><div class='ctx'>    Check how else you can handle it */</div><div class='ctx'> int</div><div class='del'>-dict_set_option (dict_t *this, char *key, char *str)</div><div class='add'>+dict_set_option(dict_t *this, char *key, char *str)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = NULL;</div><div class='del'>-        int     ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        data = data_from_dynstr (str);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_dynstr(str);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;data_type = GF_DATA_TYPE_STR_OLD;</div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    data-&gt;data_type = GF_DATA_TYPE_STR_OLD;</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_add_dynstr_with_alloc (dict_t *this, char *key, char *str)</div><div class='add'>+dict_add_dynstr_with_alloc(dict_t *this, char *key, char *str)</div><div class='ctx'> {</div><div class='del'>-        data_t  *data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='del'>-        char    *alloc_str = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *alloc_str = NULL;</div><div class='ctx'> </div><div class='del'>-        alloc_str = gf_strdup (str);</div><div class='del'>-        if (!alloc_str)</div><div class='del'>-                goto out;</div><div class='add'>+    alloc_str = gf_strdup(str);</div><div class='add'>+    if (!alloc_str)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        data = data_from_dynstr (alloc_str);</div><div class='del'>-        if (!data) {</div><div class='del'>-                GF_FREE (alloc_str);</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    data = data_from_dynstr(alloc_str);</div><div class='add'>+    if (!data) {</div><div class='add'>+        GF_FREE(alloc_str);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_add (this, key, data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                data_destroy (data);</div><div class='add'>+    ret = dict_add(this, key, data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        data_destroy(data);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dict_get_bin (dict_t *this, char *key, void **bin)</div><div class='add'>+dict_get_bin(dict_t *this, char *key, void **bin)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = -EINVAL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !bin) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !bin) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, key, ret);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_PTR, key, ret);</div><div class='ctx'> </div><div class='del'>-        *bin = data-&gt;data;</div><div class='add'>+    *bin = data-&gt;data;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /********************************************************************</div><div class='hunk'>@@ -2671,35 +2609,35 @@ err:</div><div class='ctx'>  *</div><div class='ctx'>  *******************************************************************/</div><div class='ctx'> static int</div><div class='del'>-dict_set_bin_common (dict_t *this, char *key, void *ptr, size_t size,</div><div class='del'>-                     gf_boolean_t is_static, gf_dict_data_type_t type)</div><div class='add'>+dict_set_bin_common(dict_t *this, char *key, void *ptr, size_t size,</div><div class='add'>+                    gf_boolean_t is_static, gf_dict_data_type_t type)</div><div class='ctx'> {</div><div class='del'>-        data_t * data = NULL;</div><div class='del'>-        int      ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!ptr || (size &gt; DICT_KEY_VALUE_MAX_SIZE)) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!ptr || (size &gt; DICT_KEY_VALUE_MAX_SIZE)) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data = bin_to_data (ptr, size);</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = bin_to_data(ptr, size);</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data-&gt;is_static = is_static;</div><div class='del'>-        data-&gt;data_type = type;</div><div class='add'>+    data-&gt;is_static = is_static;</div><div class='add'>+    data-&gt;data_type = type;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (this, key, data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* don't free data-&gt;data, let callers handle it */</div><div class='del'>-                data-&gt;data = NULL;</div><div class='del'>-                data_destroy (data);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set(this, key, data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* don't free data-&gt;data, let callers handle it */</div><div class='add'>+        data-&gt;data = NULL;</div><div class='add'>+        data_destroy(data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /********************************************************************</div><div class='hunk'>@@ -2710,10 +2648,10 @@ err:</div><div class='ctx'>  *</div><div class='ctx'>  *******************************************************************/</div><div class='ctx'> int</div><div class='del'>-dict_set_bin (dict_t *this, char *key, void *ptr, size_t size)</div><div class='add'>+dict_set_bin(dict_t *this, char *key, void *ptr, size_t size)</div><div class='ctx'> {</div><div class='del'>-        return dict_set_bin_common (this, key, ptr, size, _gf_false,</div><div class='del'>-                                    GF_DATA_TYPE_PTR);</div><div class='add'>+    return dict_set_bin_common(this, key, ptr, size, _gf_false,</div><div class='add'>+                               GF_DATA_TYPE_PTR);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /********************************************************************</div><div class='hunk'>@@ -2724,78 +2662,77 @@ dict_set_bin (dict_t *this, char *key, void *ptr, size_t size)</div><div class='ctx'>  *</div><div class='ctx'>  *******************************************************************/</div><div class='ctx'> int</div><div class='del'>-dict_set_static_bin (dict_t *this, char *key, void *ptr, size_t size)</div><div class='add'>+dict_set_static_bin(dict_t *this, char *key, void *ptr, size_t size)</div><div class='ctx'> {</div><div class='del'>-        return dict_set_bin_common (this, key, ptr, size, _gf_true,</div><div class='del'>-                                    GF_DATA_TYPE_PTR);</div><div class='add'>+    return dict_set_bin_common(this, key, ptr, size, _gf_true,</div><div class='add'>+                               GF_DATA_TYPE_PTR);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*  */</div><div class='ctx'> int</div><div class='del'>-dict_set_gfuuid (dict_t *this, char *key, uuid_t gfid, bool is_static)</div><div class='add'>+dict_set_gfuuid(dict_t *this, char *key, uuid_t gfid, bool is_static)</div><div class='ctx'> {</div><div class='del'>-        return dict_set_bin_common (this, key, gfid, sizeof (uuid_t),</div><div class='del'>-                                    is_static, GF_DATA_TYPE_GFUUID);</div><div class='add'>+    return dict_set_bin_common(this, key, gfid, sizeof(uuid_t), is_static,</div><div class='add'>+                               GF_DATA_TYPE_GFUUID);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_gfuuid (dict_t *this, char *key, uuid_t *gfid)</div><div class='add'>+dict_get_gfuuid(dict_t *this, char *key, uuid_t *gfid)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = NULL;</div><div class='del'>-        int     ret  = -EINVAL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !gfid) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !gfid) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_GFUUID, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_GFUUID, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        memcpy (*gfid, data-&gt;data, min(data-&gt;len, sizeof (uuid_t)));</div><div class='add'>+    memcpy(*gfid, data-&gt;data, min(data-&gt;len, sizeof(uuid_t)));</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_set_iatt (dict_t *this, char *key, struct iatt *iatt, bool is_static)</div><div class='add'>+dict_set_iatt(dict_t *this, char *key, struct iatt *iatt, bool is_static)</div><div class='ctx'> {</div><div class='del'>-        return dict_set_bin_common (this, key, iatt, sizeof (struct iatt),</div><div class='del'>-                                    is_static, GF_DATA_TYPE_IATT);</div><div class='add'>+    return dict_set_bin_common(this, key, iatt, sizeof(struct iatt), is_static,</div><div class='add'>+                               GF_DATA_TYPE_IATT);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_iatt (dict_t *this, char *key, struct iatt *iatt)</div><div class='add'>+dict_get_iatt(dict_t *this, char *key, struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-        data_t *data = NULL;</div><div class='del'>-        int     ret  = -EINVAL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !key || !iatt) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !key || !iatt) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_IATT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_IATT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        memcpy (iatt, data-&gt;data, min(data-&gt;len, sizeof (struct iatt)));</div><div class='add'>+    memcpy(iatt, data-&gt;data, min(data-&gt;len, sizeof(struct iatt)));</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * dict_get_str_boolean - get a boolean value based on string representation.</div><div class='ctx'>  *</div><div class='hunk'>@@ -2820,75 +2757,74 @@ err:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_str_boolean (dict_t *this, char *key, int default_val)</div><div class='add'>+dict_get_str_boolean(dict_t *this, char *key, int default_val)</div><div class='ctx'> {</div><div class='del'>-        data_t       *data = NULL;</div><div class='del'>-        gf_boolean_t  boo = _gf_false;</div><div class='del'>-        int           ret  = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    gf_boolean_t boo = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_with_ref (this, key, &amp;data);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (ret == -ENOENT)</div><div class='del'>-                        ret = default_val;</div><div class='del'>-                else</div><div class='del'>-                        ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_with_ref(this, key, &amp;data);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (ret == -ENOENT)</div><div class='add'>+            ret = default_val;</div><div class='add'>+        else</div><div class='add'>+            ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='add'>+    VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, key, -EINVAL);</div><div class='ctx'> </div><div class='del'>-        ret = gf_string2boolean (data-&gt;data, &amp;boo);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = gf_string2boolean(data-&gt;data, &amp;boo);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = boo;</div><div class='add'>+    ret = boo;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (data)</div><div class='del'>-                data_unref (data);</div><div class='add'>+    if (data)</div><div class='add'>+        data_unref(data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_rename_key (dict_t *this, char *key, char *replace_key)</div><div class='add'>+dict_rename_key(dict_t *this, char *key, char *replace_key)</div><div class='ctx'> {</div><div class='del'>-        data_pair_t *pair = NULL;</div><div class='del'>-        int          ret  = -EINVAL;</div><div class='del'>-        uint32_t     hash;</div><div class='del'>-        uint32_t replacekey_hash;</div><div class='add'>+    data_pair_t *pair = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    uint32_t hash;</div><div class='add'>+    uint32_t replacekey_hash;</div><div class='ctx'> </div><div class='del'>-        /* replacing a key by itself is a NO-OP */</div><div class='del'>-        if (strcmp (key, replace_key) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    /* replacing a key by itself is a NO-OP */</div><div class='add'>+    if (strcmp(key, replace_key) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hash = SuperFastHash (key, strlen (key));</div><div class='del'>-        replacekey_hash = SuperFastHash (replace_key,</div><div class='del'>-                                         strlen(replace_key));</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* no need to data_ref(pair-&gt;value), dict_set_lk() does it */</div><div class='del'>-                pair = dict_lookup_common (this, key, hash);</div><div class='del'>-                if (!pair)</div><div class='del'>-                        ret = -ENODATA;</div><div class='del'>-                else</div><div class='del'>-                        ret = dict_set_lk (this, replace_key, pair-&gt;value,</div><div class='del'>-                                           replacekey_hash, 1);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    hash = SuperFastHash(key, strlen(key));</div><div class='add'>+    replacekey_hash = SuperFastHash(replace_key, strlen(replace_key));</div><div class='ctx'> </div><div class='del'>-        if (!ret)</div><div class='del'>-                /* only delete the key on success */</div><div class='del'>-                dict_del (this, key);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* no need to data_ref(pair-&gt;value), dict_set_lk() does it */</div><div class='add'>+        pair = dict_lookup_common(this, key, hash);</div><div class='add'>+        if (!pair)</div><div class='add'>+            ret = -ENODATA;</div><div class='add'>+        else</div><div class='add'>+            ret = dict_set_lk(this, replace_key, pair-&gt;value, replacekey_hash,</div><div class='add'>+                              1);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    if (!ret)</div><div class='add'>+        /* only delete the key on success */</div><div class='add'>+        dict_del(this, key);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2899,9 +2835,9 @@ dict_rename_key (dict_t *this, char *key, char *replace_key)</div><div class='ctx'>  *     4        4         4       &lt;key len&gt;   &lt;value len&gt;</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-#define DICT_HDR_LEN               4</div><div class='del'>-#define DICT_DATA_HDR_KEY_LEN      4</div><div class='del'>-#define DICT_DATA_HDR_VAL_LEN      4</div><div class='add'>+#define DICT_HDR_LEN 4</div><div class='add'>+#define DICT_DATA_HDR_KEY_LEN 4</div><div class='add'>+#define DICT_DATA_HDR_VAL_LEN 4</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * dict_serialized_length_lk - return the length of serialized dict. This</div><div class='hunk'>@@ -2913,59 +2849,59 @@ dict_rename_key (dict_t *this, char *key, char *replace_key)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dict_serialized_length_lk (dict_t *this)</div><div class='add'>+dict_serialized_length_lk(dict_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret            = -EINVAL;</div><div class='del'>-        int count          = this-&gt;count;</div><div class='del'>-        int len            = DICT_HDR_LEN;</div><div class='del'>-        data_pair_t * pair = this-&gt;members_list;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    int count = this-&gt;count;</div><div class='add'>+    int len = DICT_HDR_LEN;</div><div class='add'>+    data_pair_t *pair = this-&gt;members_list;</div><div class='ctx'> </div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        LG_MSG_COUNT_LESS_THAN_ZERO, "count (%d) &lt; 0!", count);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_COUNT_LESS_THAN_ZERO,</div><div class='add'>+               "count (%d) &lt; 0!", count);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (count) {</div><div class='del'>-                if (!pair) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                LG_MSG_COUNT_LESS_THAN_DATA_PAIRS,</div><div class='del'>-                                "less than count data pairs found!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (count) {</div><div class='add'>+        if (!pair) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, EINVAL,</div><div class='add'>+                   LG_MSG_COUNT_LESS_THAN_DATA_PAIRS,</div><div class='add'>+                   "less than count data pairs found!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                len += DICT_DATA_HDR_KEY_LEN + DICT_DATA_HDR_VAL_LEN;</div><div class='add'>+        len += DICT_DATA_HDR_KEY_LEN + DICT_DATA_HDR_VAL_LEN;</div><div class='ctx'> </div><div class='del'>-                if (!pair-&gt;key) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                LG_MSG_NULL_PTR, "pair-&gt;key is null!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!pair-&gt;key) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_NULL_PTR,</div><div class='add'>+                   "pair-&gt;key is null!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                len += strlen (pair-&gt;key) + 1  /* for '\0' */;</div><div class='add'>+        len += strlen(pair-&gt;key) + 1 /* for '\0' */;</div><div class='ctx'> </div><div class='del'>-                if (!pair-&gt;value) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                LG_MSG_NULL_PTR, "pair-&gt;value is null!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!pair-&gt;value) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_NULL_PTR,</div><div class='add'>+                   "pair-&gt;value is null!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (pair-&gt;value-&gt;len &lt; 0) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                LG_MSG_VALUE_LENGTH_LESS_THAN_ZERO,</div><div class='del'>-                                "value-&gt;len (%d) &lt; 0", pair-&gt;value-&gt;len);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (pair-&gt;value-&gt;len &lt; 0) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, EINVAL,</div><div class='add'>+                   LG_MSG_VALUE_LENGTH_LESS_THAN_ZERO, "value-&gt;len (%d) &lt; 0",</div><div class='add'>+                   pair-&gt;value-&gt;len);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                len += pair-&gt;value-&gt;len;</div><div class='add'>+        len += pair-&gt;value-&gt;len;</div><div class='ctx'> </div><div class='del'>-                pair = pair-&gt;next;</div><div class='del'>-                count--;</div><div class='del'>-        }</div><div class='add'>+        pair = pair-&gt;next;</div><div class='add'>+        count--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = len;</div><div class='add'>+    ret = len;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2981,80 +2917,76 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dict_serialize_lk (dict_t *this, char *buf)</div><div class='add'>+dict_serialize_lk(dict_t *this, char *buf)</div><div class='ctx'> {</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-        data_pair_t * pair    = this-&gt;members_list;</div><div class='del'>-        int32_t       count   = this-&gt;count;</div><div class='del'>-        int32_t       keylen  = 0;</div><div class='del'>-        int32_t       netword = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    data_pair_t *pair = this-&gt;members_list;</div><div class='add'>+    int32_t count = this-&gt;count;</div><div class='add'>+    int32_t keylen = 0;</div><div class='add'>+    int32_t netword = 0;</div><div class='ctx'> </div><div class='add'>+    if (!buf) {</div><div class='add'>+        gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+               "buf is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!buf) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='del'>-                        "buf is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_ERROR, 0, LG_MSG_COUNT_LESS_THAN_ZERO,</div><div class='del'>-                        "count (%d) &lt; 0!", count);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_COUNT_LESS_THAN_ZERO,</div><div class='add'>+               "count (%d) &lt; 0!", count);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        netword = hton32 (count);</div><div class='del'>-        memcpy (buf, &amp;netword, sizeof(netword));</div><div class='del'>-        buf += DICT_HDR_LEN;</div><div class='add'>+    netword = hton32(count);</div><div class='add'>+    memcpy(buf, &amp;netword, sizeof(netword));</div><div class='add'>+    buf += DICT_HDR_LEN;</div><div class='ctx'> </div><div class='del'>-        while (count) {</div><div class='del'>-                if (!pair) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_PAIRS_LESS_THAN_COUNT,</div><div class='del'>-                                "less than count data pairs found!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!pair-&gt;key) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, 0, LG_MSG_NULL_PTR,</div><div class='del'>-                                "pair-&gt;key is null!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (count) {</div><div class='add'>+        if (!pair) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_PAIRS_LESS_THAN_COUNT,</div><div class='add'>+                   "less than count data pairs found!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                keylen  = strlen (pair-&gt;key);</div><div class='del'>-                netword = hton32 (keylen);</div><div class='del'>-                memcpy (buf, &amp;netword, sizeof(netword));</div><div class='del'>-                buf += DICT_DATA_HDR_KEY_LEN;</div><div class='add'>+        if (!pair-&gt;key) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_NULL_PTR,</div><div class='add'>+                   "pair-&gt;key is null!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!pair-&gt;value) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_NULL_PTR,</div><div class='del'>-                                "pair-&gt;value is null!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        keylen = strlen(pair-&gt;key);</div><div class='add'>+        netword = hton32(keylen);</div><div class='add'>+        memcpy(buf, &amp;netword, sizeof(netword));</div><div class='add'>+        buf += DICT_DATA_HDR_KEY_LEN;</div><div class='ctx'> </div><div class='del'>-                netword = hton32 (pair-&gt;value-&gt;len);</div><div class='del'>-                memcpy (buf, &amp;netword, sizeof(netword));</div><div class='del'>-                buf += DICT_DATA_HDR_VAL_LEN;</div><div class='add'>+        if (!pair-&gt;value) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_NULL_PTR,</div><div class='add'>+                   "pair-&gt;value is null!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                memcpy (buf, pair-&gt;key, keylen);</div><div class='del'>-                buf += keylen;</div><div class='del'>-                *buf++ = '\0';</div><div class='add'>+        netword = hton32(pair-&gt;value-&gt;len);</div><div class='add'>+        memcpy(buf, &amp;netword, sizeof(netword));</div><div class='add'>+        buf += DICT_DATA_HDR_VAL_LEN;</div><div class='ctx'> </div><div class='del'>-                if (pair-&gt;value-&gt;data) {</div><div class='del'>-                        memcpy (buf, pair-&gt;value-&gt;data, pair-&gt;value-&gt;len);</div><div class='del'>-                        buf += pair-&gt;value-&gt;len;</div><div class='del'>-                }</div><div class='add'>+        memcpy(buf, pair-&gt;key, keylen);</div><div class='add'>+        buf += keylen;</div><div class='add'>+        *buf++ = '\0';</div><div class='ctx'> </div><div class='del'>-                pair = pair-&gt;next;</div><div class='del'>-                count--;</div><div class='add'>+        if (pair-&gt;value-&gt;data) {</div><div class='add'>+            memcpy(buf, pair-&gt;value-&gt;data, pair-&gt;value-&gt;len);</div><div class='add'>+            buf += pair-&gt;value-&gt;len;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        pair = pair-&gt;next;</div><div class='add'>+        count--;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * dict_serialized_length - return the length of serialized dict</div><div class='ctx'>  *</div><div class='hunk'>@@ -3064,24 +2996,24 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_serialized_length (dict_t *this)</div><div class='add'>+dict_serialized_length(dict_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret            = -EINVAL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = dict_serialized_length_lk (this);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = dict_serialized_length_lk(this);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -3096,26 +3028,25 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_serialize (dict_t *this, char *buf)</div><div class='add'>+dict_serialize(dict_t *this, char *buf)</div><div class='ctx'> {</div><div class='del'>-        int           ret    = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this || !buf) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !buf) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = dict_serialize_lk (this, buf);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = dict_serialize_lk(this, buf);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * dict_unserialize - unserialize a buffer into a dict</div><div class='ctx'>  *</div><div class='hunk'>@@ -3128,143 +3059,137 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_unserialize (char *orig_buf, int32_t size, dict_t **fill)</div><div class='del'>-{</div><div class='del'>-        char   *buf   = orig_buf;</div><div class='del'>-        int     ret   = -1;</div><div class='del'>-        int32_t count = 0;</div><div class='del'>-        int     i     = 0;</div><div class='del'>-</div><div class='del'>-        data_t * value   = NULL;</div><div class='del'>-        char   * key     = NULL;</div><div class='del'>-        int32_t  keylen  = 0;</div><div class='del'>-        int32_t  vallen  = 0;</div><div class='del'>-        int32_t  hostord = 0;</div><div class='del'>-</div><div class='del'>-        if (!buf) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "buf is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+dict_unserialize(char *orig_buf, int32_t size, dict_t **fill)</div><div class='add'>+{</div><div class='add'>+    char *buf = orig_buf;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    data_t *value = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    int32_t keylen = 0;</div><div class='add'>+    int32_t vallen = 0;</div><div class='add'>+    int32_t hostord = 0;</div><div class='add'>+</div><div class='add'>+    if (!buf) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "buf is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (size == 0) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "size is 0!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!fill) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "fill is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!*fill) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "*fill is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((buf + DICT_HDR_LEN) &gt; (orig_buf + size)) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_ERROR, 0, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+                         "undersized buffer "</div><div class='add'>+                         "passed. available (%lu) &lt; required (%lu)",</div><div class='add'>+                         (long)(orig_buf + size), (long)(buf + DICT_HDR_LEN));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(&amp;hostord, buf, sizeof(hostord));</div><div class='add'>+    count = ntoh32(hostord);</div><div class='add'>+    buf += DICT_HDR_LEN;</div><div class='add'>+</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_COUNT_LESS_THAN_ZERO,</div><div class='add'>+               "count (%d) &lt;= 0", count);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* count will be set by the dict_set's below */</div><div class='add'>+    (*fill)-&gt;count = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        if ((buf + DICT_DATA_HDR_KEY_LEN) &gt; (orig_buf + size)) {</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_ERROR, 0, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+                             "undersized "</div><div class='add'>+                             "buffer passed. available (%lu) &lt; "</div><div class='add'>+                             "required (%lu)",</div><div class='add'>+                             (long)(orig_buf + size),</div><div class='add'>+                             (long)(buf + DICT_DATA_HDR_KEY_LEN));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        memcpy(&amp;hostord, buf, sizeof(hostord));</div><div class='add'>+        keylen = ntoh32(hostord);</div><div class='add'>+        buf += DICT_DATA_HDR_KEY_LEN;</div><div class='add'>+</div><div class='add'>+        if ((buf + DICT_DATA_HDR_VAL_LEN) &gt; (orig_buf + size)) {</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_ERROR, 0, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+                             "undersized "</div><div class='add'>+                             "buffer passed. available (%lu) &lt; "</div><div class='add'>+                             "required (%lu)",</div><div class='add'>+                             (long)(orig_buf + size),</div><div class='add'>+                             (long)(buf + DICT_DATA_HDR_VAL_LEN));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        memcpy(&amp;hostord, buf, sizeof(hostord));</div><div class='add'>+        vallen = ntoh32(hostord);</div><div class='add'>+        buf += DICT_DATA_HDR_VAL_LEN;</div><div class='add'>+</div><div class='add'>+        if ((keylen &lt; 0) || (vallen &lt; 0)) {</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_ERROR, 0, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+                             "undersized length passed "</div><div class='add'>+                             "key:%d val:%d",</div><div class='add'>+                             keylen, vallen);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if ((buf + keylen) &gt; (orig_buf + size)) {</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_ERROR, 0, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+                             "undersized buffer passed. "</div><div class='add'>+                             "available (%lu) &lt; required (%lu)",</div><div class='add'>+                             (long)(orig_buf + size), (long)(buf + keylen));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        key = buf;</div><div class='add'>+        buf += keylen + 1; /* for '\0' */</div><div class='add'>+</div><div class='add'>+        if ((buf + vallen) &gt; (orig_buf + size)) {</div><div class='add'>+            gf_msg_callingfn("dict", GF_LOG_ERROR, 0, LG_MSG_UNDERSIZED_BUF,</div><div class='add'>+                             "undersized buffer passed. "</div><div class='add'>+                             "available (%lu) &lt; required (%lu)",</div><div class='add'>+                             (long)(orig_buf + size), (long)(buf + vallen));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        value = get_new_data();</div><div class='ctx'> </div><div class='del'>-        if (size == 0) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "size is 0!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!fill) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "fill is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!*fill) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "*fill is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((buf + DICT_HDR_LEN) &gt; (orig_buf + size)) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_UNDERSIZED_BUF, "undersized buffer "</div><div class='del'>-                                  "passed. available (%lu) &lt; required (%lu)",</div><div class='del'>-                                  (long)(orig_buf + size),</div><div class='del'>-                                  (long)(buf + DICT_HDR_LEN));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (&amp;hostord, buf, sizeof(hostord));</div><div class='del'>-        count = ntoh32 (hostord);</div><div class='del'>-        buf += DICT_HDR_LEN;</div><div class='del'>-</div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_ERROR, 0, LG_MSG_COUNT_LESS_THAN_ZERO,</div><div class='del'>-                        "count (%d) &lt;= 0", count);</div><div class='del'>-                goto out;</div><div class='add'>+        if (!value) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        value-&gt;len = vallen;</div><div class='add'>+        value-&gt;data = memdup(buf, vallen);</div><div class='add'>+        value-&gt;data_type = GF_DATA_TYPE_STR_OLD;</div><div class='add'>+        value-&gt;is_static = _gf_false;</div><div class='add'>+        buf += vallen;</div><div class='ctx'> </div><div class='del'>-        /* count will be set by the dict_set's below */</div><div class='del'>-        (*fill)-&gt;count = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                if ((buf + DICT_DATA_HDR_KEY_LEN) &gt; (orig_buf + size)) {</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                          LG_MSG_UNDERSIZED_BUF, "undersized "</div><div class='del'>-                                          "buffer passed. available (%lu) &lt; "</div><div class='del'>-                                          "required (%lu)",</div><div class='del'>-                                          (long)(orig_buf + size),</div><div class='del'>-                                          (long)(buf + DICT_DATA_HDR_KEY_LEN));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                memcpy (&amp;hostord, buf, sizeof(hostord));</div><div class='del'>-                keylen = ntoh32 (hostord);</div><div class='del'>-                buf += DICT_DATA_HDR_KEY_LEN;</div><div class='del'>-</div><div class='del'>-                if ((buf + DICT_DATA_HDR_VAL_LEN) &gt; (orig_buf + size)) {</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                          LG_MSG_UNDERSIZED_BUF, "undersized "</div><div class='del'>-                                          "buffer passed. available (%lu) &lt; "</div><div class='del'>-                                          "required (%lu)",</div><div class='del'>-                                          (long)(orig_buf + size),</div><div class='del'>-                                          (long)(buf + DICT_DATA_HDR_VAL_LEN));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                memcpy (&amp;hostord, buf, sizeof(hostord));</div><div class='del'>-                vallen = ntoh32 (hostord);</div><div class='del'>-                buf += DICT_DATA_HDR_VAL_LEN;</div><div class='del'>-</div><div class='del'>-                if ((keylen &lt; 0) || (vallen &lt; 0)) {</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                          LG_MSG_UNDERSIZED_BUF,</div><div class='del'>-                                          "undersized length passed "</div><div class='del'>-                                          "key:%d val:%d", keylen, vallen);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if ((buf + keylen) &gt; (orig_buf + size)) {</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                          LG_MSG_UNDERSIZED_BUF,</div><div class='del'>-                                          "undersized buffer passed. "</div><div class='del'>-                                          "available (%lu) &lt; required (%lu)",</div><div class='del'>-                                          (long)(orig_buf + size),</div><div class='del'>-                                          (long)(buf + keylen));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                key = buf;</div><div class='del'>-                buf += keylen + 1;  /* for '\0' */</div><div class='del'>-</div><div class='del'>-                if ((buf + vallen) &gt; (orig_buf + size)) {</div><div class='del'>-                        gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                          LG_MSG_UNDERSIZED_BUF,</div><div class='del'>-                                          "undersized buffer passed. "</div><div class='del'>-                                          "available (%lu) &lt; required (%lu)",</div><div class='del'>-                                          (long)(orig_buf + size),</div><div class='del'>-                                          (long)(buf + vallen));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                value = get_new_data ();</div><div class='del'>-</div><div class='del'>-                if (!value) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                value-&gt;len  = vallen;</div><div class='del'>-                value-&gt;data = memdup (buf, vallen);</div><div class='del'>-                value-&gt;data_type = GF_DATA_TYPE_STR_OLD;</div><div class='del'>-                value-&gt;is_static = _gf_false;</div><div class='del'>-                buf += vallen;</div><div class='del'>-</div><div class='del'>-                ret = dict_add (*fill, key, value);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = dict_add(*fill, key, value);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * dict_allocate_and_serialize - serialize a dictionary into an allocated buffer</div><div class='ctx'>  *</div><div class='hunk'>@@ -3277,45 +3202,45 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dict_allocate_and_serialize (dict_t *this, char **buf, u_int *length)</div><div class='add'>+dict_allocate_and_serialize(dict_t *this, char **buf, u_int *length)</div><div class='ctx'> {</div><div class='del'>-        int           ret    = -EINVAL;</div><div class='del'>-        ssize_t       len = 0;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    ssize_t len = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !buf) {</div><div class='del'>-                gf_msg_debug ("dict", 0, "dict OR buf is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !buf) {</div><div class='add'>+        gf_msg_debug("dict", 0, "dict OR buf is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                len = dict_serialized_length_lk (this);</div><div class='del'>-                if (len &lt; 0) {</div><div class='del'>-                        ret = len;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        len = dict_serialized_length_lk(this);</div><div class='add'>+        if (len &lt; 0) {</div><div class='add'>+            ret = len;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                *buf = GF_MALLOC (len, gf_common_mt_char);</div><div class='del'>-                if (*buf == NULL) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        *buf = GF_MALLOC(len, gf_common_mt_char);</div><div class='add'>+        if (*buf == NULL) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_serialize_lk (this, *buf);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        GF_FREE (*buf);</div><div class='del'>-                        *buf = NULL;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        ret = dict_serialize_lk(this, *buf);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            GF_FREE(*buf);</div><div class='add'>+            *buf = NULL;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (length != NULL) {</div><div class='del'>-                        *length = len;</div><div class='del'>-                }</div><div class='add'>+        if (length != NULL) {</div><div class='add'>+            *length = len;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -3331,236 +3256,232 @@ out:</div><div class='ctx'>  *            : -errno -&gt; failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dict_serialize_value_with_delim_lk (dict_t *this, char *buf, int32_t *serz_len,</div><div class='del'>-                                    char delimiter)</div><div class='del'>-{</div><div class='del'>-        int          ret       = -1;</div><div class='del'>-        int32_t      count     = this-&gt;count;</div><div class='del'>-        int32_t      vallen    = 0;</div><div class='del'>-        int32_t      total_len = 0;</div><div class='del'>-        data_pair_t *pair      = this-&gt;members_list;</div><div class='del'>-</div><div class='del'>-        if (!buf) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        LG_MSG_INVALID_ARG, "buf is null");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+dict_serialize_value_with_delim_lk(dict_t *this, char *buf, int32_t *serz_len,</div><div class='add'>+                                   char delimiter)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t count = this-&gt;count;</div><div class='add'>+    int32_t vallen = 0;</div><div class='add'>+    int32_t total_len = 0;</div><div class='add'>+    data_pair_t *pair = this-&gt;members_list;</div><div class='ctx'> </div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='del'>-                        "count (%d) &lt; 0", count);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!buf) {</div><div class='add'>+        gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG, "buf is null");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (count) {</div><div class='del'>-                if (!pair) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_PAIRS_LESS_THAN_COUNT,</div><div class='del'>-                                "less than count data pairs found");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        gf_msg("dict", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+               "count (%d) &lt; 0", count);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (!pair-&gt;key || !pair-&gt;value) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_KEY_OR_VALUE_NULL,</div><div class='del'>-                                "key or value is null");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (count) {</div><div class='add'>+        if (!pair) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_PAIRS_LESS_THAN_COUNT,</div><div class='add'>+                   "less than count data pairs found");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!pair-&gt;value-&gt;data) {</div><div class='del'>-                        gf_msg ("dict", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_NULL_VALUE_IN_DICT,</div><div class='del'>-                                "null value found in dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!pair-&gt;key || !pair-&gt;value) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_KEY_OR_VALUE_NULL,</div><div class='add'>+                   "key or value is null");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                vallen = pair-&gt;value-&gt;len - 1; // length includes \0</div><div class='del'>-                memcpy (buf, pair-&gt;value-&gt;data, vallen);</div><div class='del'>-                buf += vallen;</div><div class='del'>-                *buf++ = delimiter;</div><div class='add'>+        if (!pair-&gt;value-&gt;data) {</div><div class='add'>+            gf_msg("dict", GF_LOG_ERROR, 0, LG_MSG_NULL_VALUE_IN_DICT,</div><div class='add'>+                   "null value found in dict");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                total_len += (vallen + 1);</div><div class='add'>+        vallen = pair-&gt;value-&gt;len - 1;  // length includes \0</div><div class='add'>+        memcpy(buf, pair-&gt;value-&gt;data, vallen);</div><div class='add'>+        buf += vallen;</div><div class='add'>+        *buf++ = delimiter;</div><div class='ctx'> </div><div class='del'>-                pair = pair-&gt;next;</div><div class='del'>-                count--;</div><div class='del'>-        }</div><div class='add'>+        total_len += (vallen + 1);</div><div class='ctx'> </div><div class='del'>-        *--buf = '\0'; // remove the last delimiter</div><div class='del'>-        total_len--;   // adjust the length</div><div class='del'>-        ret = 0;</div><div class='add'>+        pair = pair-&gt;next;</div><div class='add'>+        count--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (serz_len)</div><div class='del'>-                *serz_len = total_len;</div><div class='add'>+    *--buf = '\0';  // remove the last delimiter</div><div class='add'>+    total_len--;    // adjust the length</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    if (serz_len)</div><div class='add'>+        *serz_len = total_len;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_serialize_value_with_delim (dict_t *this, char *buf, int32_t *serz_len,</div><div class='del'>-                                 char delimiter)</div><div class='del'>-{</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-</div><div class='del'>-        if (!this || !buf) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is null!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;this-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = dict_serialize_value_with_delim_lk (this, buf, serz_len,</div><div class='del'>-                                                          delimiter);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;this-&gt;lock);</div><div class='add'>+dict_serialize_value_with_delim(dict_t *this, char *buf, int32_t *serz_len,</div><div class='add'>+                                char delimiter)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!this || !buf) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is null!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;this-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = dict_serialize_value_with_delim_lk(this, buf, serz_len,</div><div class='add'>+                                                 delimiter);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;this-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_dump_to_str (dict_t *dict, char *dump, int dumpsize, char *format)</div><div class='add'>+dict_dump_to_str(dict_t *dict, char *dump, int dumpsize, char *format)</div><div class='ctx'> {</div><div class='del'>-        int          ret                       = 0;</div><div class='del'>-        int          dumplen                   = 0;</div><div class='del'>-        data_pair_t *trav                      = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int dumplen = 0;</div><div class='add'>+    data_pair_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!dict)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!dict)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        for (trav = dict-&gt;members_list; trav; trav = trav-&gt;next) {</div><div class='del'>-                ret = snprintf (&amp;dump[dumplen], dumpsize - dumplen,</div><div class='del'>-                                format, trav-&gt;key, trav-&gt;value-&gt;data);</div><div class='del'>-                if ((ret == -1) || !ret)</div><div class='del'>-                        return ret;</div><div class='add'>+    for (trav = dict-&gt;members_list; trav; trav = trav-&gt;next) {</div><div class='add'>+        ret = snprintf(&amp;dump[dumplen], dumpsize - dumplen, format, trav-&gt;key,</div><div class='add'>+                       trav-&gt;value-&gt;data);</div><div class='add'>+        if ((ret == -1) || !ret)</div><div class='add'>+            return ret;</div><div class='ctx'> </div><div class='del'>-                dumplen += ret;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+        dumplen += ret;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dict_dump_to_log (dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        int          ret                       = -1;</div><div class='del'>-        char        *dump                      = NULL;</div><div class='del'>-        int          dump_size                 = 64*1024;</div><div class='del'>-        char        *format                    = "(%s:%s)";</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dump = GF_MALLOC (dump_size, gf_common_mt_char);</div><div class='del'>-        if (!dump) {</div><div class='del'>-                gf_msg_callingfn ("dict", GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                                  LG_MSG_NO_MEMORY, "dump buffer is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_dump_to_str (dict, dump, dump_size, format);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("dict", GF_LOG_WARNING, 0, LG_MSG_FAILED_TO_LOG_DICT,</div><div class='del'>-                        "Failed to log dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_msg ("dict", GF_LOG_INFO, 0, LG_MSG_DICT_ERROR,</div><div class='del'>-                "dict=%p (%s)", dict, dump);</div><div class='add'>+dict_dump_to_log(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *dump = NULL;</div><div class='add'>+    int dump_size = 64 * 1024;</div><div class='add'>+    char *format = "(%s:%s)";</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dump = GF_MALLOC(dump_size, gf_common_mt_char);</div><div class='add'>+    if (!dump) {</div><div class='add'>+        gf_msg_callingfn("dict", GF_LOG_WARNING, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+                         "dump buffer is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_dump_to_str(dict, dump, dump_size, format);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("dict", GF_LOG_WARNING, 0, LG_MSG_FAILED_TO_LOG_DICT,</div><div class='add'>+               "Failed to log dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_msg("dict", GF_LOG_INFO, 0, LG_MSG_DICT_ERROR, "dict=%p (%s)", dict,</div><div class='add'>+           dump);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (dump);</div><div class='del'>-</div><div class='add'>+    GF_FREE(dump);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dict_dump_to_statedump (dict_t *dict, char *dict_name, char *domain)</div><div class='del'>-{</div><div class='del'>-        int          ret                       = -1;</div><div class='del'>-        char        *dump                      = NULL;</div><div class='del'>-        int          dump_size                 = 64*1024;</div><div class='del'>-        char         key[4096]                 = {0,};</div><div class='del'>-        char        *format                    = "\n\t%s:%s";</div><div class='del'>-</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg_callingfn (domain, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "dict is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dump = GF_MALLOC (dump_size, gf_common_mt_char);</div><div class='del'>-        if (!dump) {</div><div class='del'>-                gf_msg_callingfn (domain, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                                  LG_MSG_NO_MEMORY, "dump buffer is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_dump_to_str (dict, dump, dump_size, format);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (domain, GF_LOG_WARNING, 0, LG_MSG_FAILED_TO_LOG_DICT,</div><div class='del'>-                        "Failed to log dictionary %s", dict_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_proc_dump_build_key (key, domain, "%s", dict_name);</div><div class='del'>-        gf_proc_dump_write (key, "%s", dump);</div><div class='add'>+dict_dump_to_statedump(dict_t *dict, char *dict_name, char *domain)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *dump = NULL;</div><div class='add'>+    int dump_size = 64 * 1024;</div><div class='add'>+    char key[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *format = "\n\t%s:%s";</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg_callingfn(domain, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "dict is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dump = GF_MALLOC(dump_size, gf_common_mt_char);</div><div class='add'>+    if (!dump) {</div><div class='add'>+        gf_msg_callingfn(domain, GF_LOG_WARNING, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+                         "dump buffer is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_dump_to_str(dict, dump, dump_size, format);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(domain, GF_LOG_WARNING, 0, LG_MSG_FAILED_TO_LOG_DICT,</div><div class='add'>+               "Failed to log dictionary %s", dict_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_build_key(key, domain, "%s", dict_name);</div><div class='add'>+    gf_proc_dump_write(key, "%s", dump);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (dump);</div><div class='add'>+    GF_FREE(dump);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-dict_for_key_value (const char *name, const char *value, size_t size,</div><div class='del'>-                    gf_boolean_t is_static)</div><div class='add'>+dict_for_key_value(const char *name, const char *value, size_t size,</div><div class='add'>+                   gf_boolean_t is_static)</div><div class='ctx'> {</div><div class='del'>-	dict_t *xattr = NULL;</div><div class='del'>-	int     ret = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	xattr = dict_new ();</div><div class='del'>-	if (!xattr)</div><div class='del'>-		return NULL;</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        if (is_static)</div><div class='del'>-                ret = dict_set_static_bin (xattr, (char *)name, (void *)value,</div><div class='del'>-                                           size);</div><div class='del'>-        else</div><div class='del'>-                ret = dict_set_bin (xattr, (char *)name, (void *)value, size);</div><div class='add'>+    if (is_static)</div><div class='add'>+        ret = dict_set_static_bin(xattr, (char *)name, (void *)value, size);</div><div class='add'>+    else</div><div class='add'>+        ret = dict_set_bin(xattr, (char *)name, (void *)value, size);</div><div class='ctx'> </div><div class='del'>-	if (ret) {</div><div class='del'>-		dict_destroy (xattr);</div><div class='del'>-		xattr = NULL;</div><div class='del'>-	}</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_destroy(xattr);</div><div class='add'>+        xattr = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return xattr;</div><div class='add'>+    return xattr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * "strings" should be NULL terminated strings array.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dict_has_key_from_array (dict_t *dict, char **strings, gf_boolean_t *result)</div><div class='add'>+dict_has_key_from_array(dict_t *dict, char **strings, gf_boolean_t *result)</div><div class='ctx'> {</div><div class='del'>-        int      i    = 0;</div><div class='del'>-        uint32_t hash = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t hash = 0;</div><div class='ctx'> </div><div class='del'>-        if (!dict || !strings || !result)</div><div class='del'>-                return -EINVAL;</div><div class='add'>+    if (!dict || !strings || !result)</div><div class='add'>+        return -EINVAL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;dict-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; strings[i]; i++) {</div><div class='del'>-                        hash = SuperFastHash (strings[i], strlen (strings[i]));</div><div class='del'>-                        if (dict_lookup_common (dict, strings[i], hash)) {</div><div class='del'>-                                *result = _gf_true;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                *result = _gf_false;</div><div class='add'>+    LOCK(&amp;dict-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; strings[i]; i++) {</div><div class='add'>+            hash = SuperFastHash(strings[i], strlen(strings[i]));</div><div class='add'>+            if (dict_lookup_common(dict, strings[i], hash)) {</div><div class='add'>+                *result = _gf_true;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        *result = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;dict-&gt;lock);</div><div class='del'>-        return 0;</div><div class='add'>+    UNLOCK(&amp;dict-&gt;lock);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/event-epoll.c b/libglusterfs/src/event-epoll.c<br/>index b144b77a11c..9826cc9e275 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event-epoll.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/event-epoll.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event-epoll.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event-epoll.c</a></div><div class='hunk'>@@ -23,766 +23,747 @@</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_SYS_EPOLL_H</div><div class='ctx'> #include &lt;sys/epoll.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct event_slot_epoll {</div><div class='del'>-	int fd;</div><div class='del'>-	int events;</div><div class='del'>-	int gen;</div><div class='del'>-	gf_atomic_t ref;</div><div class='del'>-	int do_close;</div><div class='del'>-	int in_handler;</div><div class='del'>-        int handled_error;</div><div class='del'>-	void *data;</div><div class='del'>-	event_handler_t handler;</div><div class='del'>-	gf_lock_t lock;</div><div class='add'>+    int fd;</div><div class='add'>+    int events;</div><div class='add'>+    int gen;</div><div class='add'>+    gf_atomic_t ref;</div><div class='add'>+    int do_close;</div><div class='add'>+    int in_handler;</div><div class='add'>+    int handled_error;</div><div class='add'>+    void *data;</div><div class='add'>+    event_handler_t handler;</div><div class='add'>+    gf_lock_t lock;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct event_thread_data {</div><div class='del'>-        struct event_pool *event_pool;</div><div class='del'>-        int    event_index;</div><div class='add'>+    struct event_pool *event_pool;</div><div class='add'>+    int event_index;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static struct event_slot_epoll *</div><div class='del'>-__event_newtable (struct event_pool *event_pool, int table_idx)</div><div class='add'>+__event_newtable(struct event_pool *event_pool, int table_idx)</div><div class='ctx'> {</div><div class='del'>-	struct event_slot_epoll *table = NULL;</div><div class='del'>-	int                      i = -1;</div><div class='add'>+    struct event_slot_epoll *table = NULL;</div><div class='add'>+    int i = -1;</div><div class='ctx'> </div><div class='del'>-	table = GF_CALLOC (sizeof (*table), EVENT_EPOLL_SLOTS,</div><div class='del'>-			   gf_common_mt_ereg);</div><div class='del'>-	if (!table)</div><div class='del'>-		return NULL;</div><div class='add'>+    table = GF_CALLOC(sizeof(*table), EVENT_EPOLL_SLOTS, gf_common_mt_ereg);</div><div class='add'>+    if (!table)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; EVENT_EPOLL_SLOTS; i++) {</div><div class='del'>-		table[i].fd = -1;</div><div class='del'>-		LOCK_INIT (&amp;table[i].lock);</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; EVENT_EPOLL_SLOTS; i++) {</div><div class='add'>+        table[i].fd = -1;</div><div class='add'>+        LOCK_INIT(&amp;table[i].lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	event_pool-&gt;ereg[table_idx] = table;</div><div class='del'>-	event_pool-&gt;slots_used[table_idx] = 0;</div><div class='add'>+    event_pool-&gt;ereg[table_idx] = table;</div><div class='add'>+    event_pool-&gt;slots_used[table_idx] = 0;</div><div class='ctx'> </div><div class='del'>-	return table;</div><div class='add'>+    return table;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__event_slot_alloc (struct event_pool *event_pool, int fd)</div><div class='add'>+__event_slot_alloc(struct event_pool *event_pool, int fd)</div><div class='ctx'> {</div><div class='del'>-        int  i = 0;</div><div class='del'>-	int  table_idx = -1;</div><div class='del'>-	int  gen = -1;</div><div class='del'>-	struct event_slot_epoll *table = NULL;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; EVENT_EPOLL_TABLES; i++) {</div><div class='del'>-		switch (event_pool-&gt;slots_used[i]) {</div><div class='del'>-		case EVENT_EPOLL_SLOTS:</div><div class='del'>-			continue;</div><div class='del'>-		case 0:</div><div class='del'>-			if (!event_pool-&gt;ereg[i]) {</div><div class='del'>-				table = __event_newtable (event_pool, i);</div><div class='del'>-				if (!table)</div><div class='del'>-					return -1;</div><div class='del'>-			} else {</div><div class='del'>-                                table = event_pool-&gt;ereg[i];</div><div class='del'>-                        }</div><div class='del'>-			break;</div><div class='del'>-		default:</div><div class='del'>-			table = event_pool-&gt;ereg[i];</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (table)</div><div class='del'>-			/* break out of the loop */</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!table)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-	table_idx = i;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; EVENT_EPOLL_SLOTS; i++) {</div><div class='del'>-		if (table[i].fd == -1) {</div><div class='del'>-			/* wipe everything except bump the generation */</div><div class='del'>-			gen = table[i].gen;</div><div class='del'>-			memset (&amp;table[i], 0, sizeof (table[i]));</div><div class='del'>-			table[i].gen = gen + 1;</div><div class='del'>-</div><div class='del'>-			LOCK_INIT (&amp;table[i].lock);</div><div class='del'>-</div><div class='del'>-			table[i].fd = fd;</div><div class='del'>-			event_pool-&gt;slots_used[table_idx]++;</div><div class='del'>-</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return table_idx * EVENT_EPOLL_SLOTS + i;</div><div class='del'>-}</div><div class='add'>+    int i = 0;</div><div class='add'>+    int table_idx = -1;</div><div class='add'>+    int gen = -1;</div><div class='add'>+    struct event_slot_epoll *table = NULL;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; EVENT_EPOLL_TABLES; i++) {</div><div class='add'>+        switch (event_pool-&gt;slots_used[i]) {</div><div class='add'>+            case EVENT_EPOLL_SLOTS:</div><div class='add'>+                continue;</div><div class='add'>+            case 0:</div><div class='add'>+                if (!event_pool-&gt;ereg[i]) {</div><div class='add'>+                    table = __event_newtable(event_pool, i);</div><div class='add'>+                    if (!table)</div><div class='add'>+                        return -1;</div><div class='add'>+                } else {</div><div class='add'>+                    table = event_pool-&gt;ereg[i];</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                table = event_pool-&gt;ereg[i];</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        if (table)</div><div class='add'>+            /* break out of the loop */</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-event_slot_alloc (struct event_pool *event_pool, int fd)</div><div class='del'>-{</div><div class='del'>-	int  idx = -1;</div><div class='add'>+    if (!table)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    table_idx = i;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; EVENT_EPOLL_SLOTS; i++) {</div><div class='add'>+        if (table[i].fd == -1) {</div><div class='add'>+            /* wipe everything except bump the generation */</div><div class='add'>+            gen = table[i].gen;</div><div class='add'>+            memset(&amp;table[i], 0, sizeof(table[i]));</div><div class='add'>+            table[i].gen = gen + 1;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		idx = __event_slot_alloc (event_pool, fd);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+            LOCK_INIT(&amp;table[i].lock);</div><div class='ctx'> </div><div class='del'>-	return idx;</div><div class='add'>+            table[i].fd = fd;</div><div class='add'>+            event_pool-&gt;slots_used[table_idx]++;</div><div class='add'>+</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return table_idx * EVENT_EPOLL_SLOTS + i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static int</div><div class='add'>+event_slot_alloc(struct event_pool *event_pool, int fd)</div><div class='add'>+{</div><div class='add'>+    int idx = -1;</div><div class='ctx'> </div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        idx = __event_slot_alloc(event_pool, fd);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    return idx;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__event_slot_dealloc (struct event_pool *event_pool, int idx)</div><div class='add'>+__event_slot_dealloc(struct event_pool *event_pool, int idx)</div><div class='ctx'> {</div><div class='del'>-	int                      table_idx = 0;</div><div class='del'>-	int                      offset = 0;</div><div class='del'>-	struct event_slot_epoll *table = NULL;</div><div class='del'>-	struct event_slot_epoll *slot = NULL;</div><div class='add'>+    int table_idx = 0;</div><div class='add'>+    int offset = 0;</div><div class='add'>+    struct event_slot_epoll *table = NULL;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='ctx'> </div><div class='del'>-	table_idx = idx / EVENT_EPOLL_SLOTS;</div><div class='del'>-	offset = idx % EVENT_EPOLL_SLOTS;</div><div class='add'>+    table_idx = idx / EVENT_EPOLL_SLOTS;</div><div class='add'>+    offset = idx % EVENT_EPOLL_SLOTS;</div><div class='ctx'> </div><div class='del'>-	table = event_pool-&gt;ereg[table_idx];</div><div class='del'>-	if (!table)</div><div class='del'>-		return;</div><div class='add'>+    table = event_pool-&gt;ereg[table_idx];</div><div class='add'>+    if (!table)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	slot = &amp;table[offset];</div><div class='del'>-	slot-&gt;gen++;</div><div class='add'>+    slot = &amp;table[offset];</div><div class='add'>+    slot-&gt;gen++;</div><div class='ctx'> </div><div class='del'>-	slot-&gt;fd = -1;</div><div class='del'>-        slot-&gt;handled_error = 0;</div><div class='del'>-        slot-&gt;in_handler = 0;</div><div class='del'>-	event_pool-&gt;slots_used[table_idx]--;</div><div class='add'>+    slot-&gt;fd = -1;</div><div class='add'>+    slot-&gt;handled_error = 0;</div><div class='add'>+    slot-&gt;in_handler = 0;</div><div class='add'>+    event_pool-&gt;slots_used[table_idx]--;</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-event_slot_dealloc (struct event_pool *event_pool, int idx)</div><div class='add'>+event_slot_dealloc(struct event_pool *event_pool, int idx)</div><div class='ctx'> {</div><div class='del'>-	pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		__event_slot_dealloc (event_pool, idx);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __event_slot_dealloc(event_pool, idx);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static struct event_slot_epoll *</div><div class='del'>-event_slot_get (struct event_pool *event_pool, int idx)</div><div class='add'>+event_slot_get(struct event_pool *event_pool, int idx)</div><div class='ctx'> {</div><div class='del'>-	struct event_slot_epoll *slot = NULL;</div><div class='del'>-	struct event_slot_epoll *table = NULL;</div><div class='del'>-	int                      table_idx = 0;</div><div class='del'>-	int                      offset = 0;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='add'>+    struct event_slot_epoll *table = NULL;</div><div class='add'>+    int table_idx = 0;</div><div class='add'>+    int offset = 0;</div><div class='ctx'> </div><div class='del'>-	table_idx = idx / EVENT_EPOLL_SLOTS;</div><div class='del'>-	offset = idx % EVENT_EPOLL_SLOTS;</div><div class='add'>+    table_idx = idx / EVENT_EPOLL_SLOTS;</div><div class='add'>+    offset = idx % EVENT_EPOLL_SLOTS;</div><div class='ctx'> </div><div class='del'>-	table = event_pool-&gt;ereg[table_idx];</div><div class='del'>-	if (!table)</div><div class='del'>-		return NULL;</div><div class='add'>+    table = event_pool-&gt;ereg[table_idx];</div><div class='add'>+    if (!table)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	slot = &amp;table[offset];</div><div class='del'>-        GF_ATOMIC_INC (slot-&gt;ref);</div><div class='add'>+    slot = &amp;table[offset];</div><div class='add'>+    GF_ATOMIC_INC(slot-&gt;ref);</div><div class='ctx'> </div><div class='del'>-	return slot;</div><div class='add'>+    return slot;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-event_slot_unref (struct event_pool *event_pool, struct event_slot_epoll *slot,</div><div class='del'>-		  int idx)</div><div class='add'>+event_slot_unref(struct event_pool *event_pool, struct event_slot_epoll *slot,</div><div class='add'>+                 int idx)</div><div class='ctx'> {</div><div class='del'>-	int ref = -1;</div><div class='del'>-	int fd = -1;</div><div class='del'>-	int do_close = 0;</div><div class='del'>-</div><div class='del'>-        ref = GF_ATOMIC_DEC (slot-&gt;ref);</div><div class='del'>-	if (ref)</div><div class='del'>-		/* slot still alive */</div><div class='del'>-		goto done;</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;slot-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		fd = slot-&gt;fd;</div><div class='del'>-		do_close = slot-&gt;do_close;</div><div class='del'>-                slot-&gt;do_close = 0;</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;slot-&gt;lock);</div><div class='del'>-</div><div class='del'>-	event_slot_dealloc (event_pool, idx);</div><div class='del'>-</div><div class='del'>-	if (do_close)</div><div class='del'>-		sys_close (fd);</div><div class='add'>+    int ref = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int do_close = 0;</div><div class='add'>+</div><div class='add'>+    ref = GF_ATOMIC_DEC(slot-&gt;ref);</div><div class='add'>+    if (ref)</div><div class='add'>+        /* slot still alive */</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;slot-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = slot-&gt;fd;</div><div class='add'>+        do_close = slot-&gt;do_close;</div><div class='add'>+        slot-&gt;do_close = 0;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;slot-&gt;lock);</div><div class='add'>+</div><div class='add'>+    event_slot_dealloc(event_pool, idx);</div><div class='add'>+</div><div class='add'>+    if (do_close)</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> done:</div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static struct event_pool *</div><div class='del'>-event_pool_new_epoll (int count, int eventthreadcount)</div><div class='add'>+event_pool_new_epoll(int count, int eventthreadcount)</div><div class='ctx'> {</div><div class='del'>-        struct event_pool *event_pool = NULL;</div><div class='del'>-        int                epfd = -1;</div><div class='add'>+    struct event_pool *event_pool = NULL;</div><div class='add'>+    int epfd = -1;</div><div class='ctx'> </div><div class='del'>-        event_pool = GF_CALLOC (1, sizeof (*event_pool),</div><div class='del'>-                                gf_common_mt_event_pool);</div><div class='add'>+    event_pool = GF_CALLOC(1, sizeof(*event_pool), gf_common_mt_event_pool);</div><div class='ctx'> </div><div class='del'>-        if (!event_pool)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!event_pool)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        epfd = epoll_create (count);</div><div class='add'>+    epfd = epoll_create(count);</div><div class='ctx'> </div><div class='del'>-        if (epfd == -1) {</div><div class='del'>-                gf_msg ("epoll", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_EPOLL_FD_CREATE_FAILED, "epoll fd creation "</div><div class='del'>-                        "failed");</div><div class='del'>-                GF_FREE (event_pool-&gt;reg);</div><div class='del'>-                GF_FREE (event_pool);</div><div class='del'>-                event_pool = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (epfd == -1) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, errno, LG_MSG_EPOLL_FD_CREATE_FAILED,</div><div class='add'>+               "epoll fd creation "</div><div class='add'>+               "failed");</div><div class='add'>+        GF_FREE(event_pool-&gt;reg);</div><div class='add'>+        GF_FREE(event_pool);</div><div class='add'>+        event_pool = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        event_pool-&gt;fd = epfd;</div><div class='add'>+    event_pool-&gt;fd = epfd;</div><div class='ctx'> </div><div class='del'>-        event_pool-&gt;count = count;</div><div class='add'>+    event_pool-&gt;count = count;</div><div class='ctx'> </div><div class='del'>-        event_pool-&gt;eventthreadcount = eventthreadcount;</div><div class='del'>-        event_pool-&gt;auto_thread_count = 0;</div><div class='add'>+    event_pool-&gt;eventthreadcount = eventthreadcount;</div><div class='add'>+    event_pool-&gt;auto_thread_count = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;event_pool-&gt;mutex, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;event_pool-&gt;mutex, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return event_pool;</div><div class='add'>+    return event_pool;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__slot_update_events (struct event_slot_epoll *slot, int poll_in, int poll_out)</div><div class='add'>+__slot_update_events(struct event_slot_epoll *slot, int poll_in, int poll_out)</div><div class='ctx'> {</div><div class='del'>-	switch (poll_in) {</div><div class='del'>-	case 1:</div><div class='del'>-		slot-&gt;events |= EPOLLIN;</div><div class='del'>-		break;</div><div class='del'>-	case 0:</div><div class='del'>-		slot-&gt;events &amp;= ~EPOLLIN;</div><div class='del'>-		break;</div><div class='del'>-	case -1:</div><div class='del'>-		/* do nothing */</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_INVALID_POLL_IN,</div><div class='del'>-			"invalid poll_in value %d", poll_in);</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	switch (poll_out) {</div><div class='del'>-	case 1:</div><div class='del'>-		slot-&gt;events |= EPOLLOUT;</div><div class='del'>-		break;</div><div class='del'>-	case 0:</div><div class='del'>-		slot-&gt;events &amp;= ~EPOLLOUT;</div><div class='del'>-		break;</div><div class='del'>-	case -1:</div><div class='del'>-		/* do nothing */</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_INVALID_POLL_OUT,</div><div class='del'>-			"invalid poll_out value %d", poll_out);</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='add'>+    switch (poll_in) {</div><div class='add'>+        case 1:</div><div class='add'>+            slot-&gt;events |= EPOLLIN;</div><div class='add'>+            break;</div><div class='add'>+        case 0:</div><div class='add'>+            slot-&gt;events &amp;= ~EPOLLIN;</div><div class='add'>+            break;</div><div class='add'>+        case -1:</div><div class='add'>+            /* do nothing */</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_INVALID_POLL_IN,</div><div class='add'>+                   "invalid poll_in value %d", poll_in);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (poll_out) {</div><div class='add'>+        case 1:</div><div class='add'>+            slot-&gt;events |= EPOLLOUT;</div><div class='add'>+            break;</div><div class='add'>+        case 0:</div><div class='add'>+            slot-&gt;events &amp;= ~EPOLLOUT;</div><div class='add'>+            break;</div><div class='add'>+        case -1:</div><div class='add'>+            /* do nothing */</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_INVALID_POLL_OUT,</div><div class='add'>+                   "invalid poll_out value %d", poll_out);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_register_epoll (struct event_pool *event_pool, int fd,</div><div class='del'>-                      event_handler_t handler,</div><div class='del'>-                      void *data, int poll_in, int poll_out)</div><div class='add'>+event_register_epoll(struct event_pool *event_pool, int fd,</div><div class='add'>+                     event_handler_t handler, void *data, int poll_in,</div><div class='add'>+                     int poll_out)</div><div class='ctx'> {</div><div class='del'>-        int                 idx = -1;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        int             destroy = 0;</div><div class='del'>-        struct epoll_event  epoll_event = {0, };</div><div class='del'>-        struct event_data  *ev_data = (void *)&amp;epoll_event.data;</div><div class='del'>-	struct event_slot_epoll *slot = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='del'>-</div><div class='del'>-        /* TODO: Even with the below check, there is a possibility of race,</div><div class='del'>-         * What if the destroy mode is set after the check is done.</div><div class='del'>-         * Not sure of the best way to prevent this race, ref counting</div><div class='del'>-         * is one possibility.</div><div class='del'>-         * There is no harm in registering and unregistering the fd</div><div class='del'>-         * even after destroy mode is set, just that such fds will remain</div><div class='del'>-         * open until unregister is called, also the events on that fd will be</div><div class='del'>-         * notified, until one of the poller thread is alive.</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                destroy = event_pool-&gt;destroy;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        if (destroy == 1)</div><div class='del'>-               goto out;</div><div class='del'>-</div><div class='del'>-	idx = event_slot_alloc (event_pool, fd);</div><div class='del'>-	if (idx == -1) {</div><div class='del'>-		gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='del'>-			"could not find slot for fd=%d", fd);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	slot = event_slot_get (event_pool, idx);</div><div class='del'>-        if (!slot) {</div><div class='del'>-                gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='del'>-                        "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	assert (slot-&gt;fd == fd);</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;slot-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		/* make epoll 'singleshot', which</div><div class='del'>-		   means we need to re-add the fd with</div><div class='del'>-		   epoll_ctl(EPOLL_CTL_MOD) after delivery of every</div><div class='del'>-		   single event. This assures us that while a poller</div><div class='del'>-		   thread has picked up and is processing an event,</div><div class='del'>-		   another poller will not try to pick this at the same</div><div class='del'>-		   time as well.</div><div class='del'>-		*/</div><div class='del'>-</div><div class='del'>-		slot-&gt;events = EPOLLPRI | EPOLLHUP | EPOLLERR | EPOLLONESHOT;</div><div class='del'>-		slot-&gt;handler = handler;</div><div class='del'>-		slot-&gt;data = data;</div><div class='del'>-</div><div class='del'>-		__slot_update_events (slot, poll_in, poll_out);</div><div class='del'>-</div><div class='del'>-		epoll_event.events = slot-&gt;events;</div><div class='del'>-		ev_data-&gt;idx = idx;</div><div class='del'>-		ev_data-&gt;gen = slot-&gt;gen;</div><div class='del'>-</div><div class='del'>-		ret = epoll_ctl (event_pool-&gt;fd, EPOLL_CTL_ADD, fd,</div><div class='del'>-				 &amp;epoll_event);</div><div class='del'>-		/* check ret after UNLOCK() to avoid deadlock in</div><div class='del'>-		   event_slot_unref()</div><div class='del'>-		*/</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;slot-&gt;lock);</div><div class='del'>-</div><div class='del'>-	if (ret == -1) {</div><div class='del'>-		gf_msg ("epoll", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_EPOLL_FD_ADD_FAILED, "failed to add fd(=%d) to "</div><div class='del'>-                        "epoll fd(=%d)", fd, event_pool-&gt;fd);</div><div class='del'>-		event_slot_unref (event_pool, slot, idx);</div><div class='del'>-		idx = -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* keep slot-&gt;ref (do not event_slot_unref) if successful */</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int destroy = 0;</div><div class='add'>+    struct epoll_event epoll_event = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct event_data *ev_data = (void *)&amp;epoll_event.data;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='add'>+</div><div class='add'>+    /* TODO: Even with the below check, there is a possibility of race,</div><div class='add'>+     * What if the destroy mode is set after the check is done.</div><div class='add'>+     * Not sure of the best way to prevent this race, ref counting</div><div class='add'>+     * is one possibility.</div><div class='add'>+     * There is no harm in registering and unregistering the fd</div><div class='add'>+     * even after destroy mode is set, just that such fds will remain</div><div class='add'>+     * open until unregister is called, also the events on that fd will be</div><div class='add'>+     * notified, until one of the poller thread is alive.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        destroy = event_pool-&gt;destroy;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    if (destroy == 1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    idx = event_slot_alloc(event_pool, fd);</div><div class='add'>+    if (idx == -1) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='add'>+               "could not find slot for fd=%d", fd);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    slot = event_slot_get(event_pool, idx);</div><div class='add'>+    if (!slot) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='add'>+               "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    assert(slot-&gt;fd == fd);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;slot-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* make epoll 'singleshot', which</div><div class='add'>+           means we need to re-add the fd with</div><div class='add'>+           epoll_ctl(EPOLL_CTL_MOD) after delivery of every</div><div class='add'>+           single event. This assures us that while a poller</div><div class='add'>+           thread has picked up and is processing an event,</div><div class='add'>+           another poller will not try to pick this at the same</div><div class='add'>+           time as well.</div><div class='add'>+        */</div><div class='add'>+</div><div class='add'>+        slot-&gt;events = EPOLLPRI | EPOLLHUP | EPOLLERR | EPOLLONESHOT;</div><div class='add'>+        slot-&gt;handler = handler;</div><div class='add'>+        slot-&gt;data = data;</div><div class='add'>+</div><div class='add'>+        __slot_update_events(slot, poll_in, poll_out);</div><div class='add'>+</div><div class='add'>+        epoll_event.events = slot-&gt;events;</div><div class='add'>+        ev_data-&gt;idx = idx;</div><div class='add'>+        ev_data-&gt;gen = slot-&gt;gen;</div><div class='add'>+</div><div class='add'>+        ret = epoll_ctl(event_pool-&gt;fd, EPOLL_CTL_ADD, fd, &amp;epoll_event);</div><div class='add'>+        /* check ret after UNLOCK() to avoid deadlock in</div><div class='add'>+           event_slot_unref()</div><div class='add'>+        */</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;slot-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, errno, LG_MSG_EPOLL_FD_ADD_FAILED,</div><div class='add'>+               "failed to add fd(=%d) to "</div><div class='add'>+               "epoll fd(=%d)",</div><div class='add'>+               fd, event_pool-&gt;fd);</div><div class='add'>+        event_slot_unref(event_pool, slot, idx);</div><div class='add'>+        idx = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* keep slot-&gt;ref (do not event_slot_unref) if successful */</div><div class='ctx'> out:</div><div class='del'>-        return idx;</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_unregister_epoll_common (struct event_pool *event_pool, int fd,</div><div class='del'>-			       int idx, int do_close)</div><div class='add'>+event_unregister_epoll_common(struct event_pool *event_pool, int fd, int idx,</div><div class='add'>+                              int do_close)</div><div class='ctx'> {</div><div class='del'>-        int  ret = -1;</div><div class='del'>-	struct event_slot_epoll *slot = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='del'>-</div><div class='del'>-        /* During shutdown, it may happen that a socket registration with</div><div class='del'>-         * the event sub-system may fail and an rpc_transport_unref() may</div><div class='del'>-         * be called for such an unregistered socket with idx == -1. This</div><div class='del'>-         * may cause the following assert(slot-&gt;fd == fd) to fail.</div><div class='del'>-         */</div><div class='del'>-        if (idx &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	slot = event_slot_get (event_pool, idx);</div><div class='del'>-        if (!slot) {</div><div class='del'>-                gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='del'>-                        "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='del'>-                return -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='add'>+</div><div class='add'>+    /* During shutdown, it may happen that a socket registration with</div><div class='add'>+     * the event sub-system may fail and an rpc_transport_unref() may</div><div class='add'>+     * be called for such an unregistered socket with idx == -1. This</div><div class='add'>+     * may cause the following assert(slot-&gt;fd == fd) to fail.</div><div class='add'>+     */</div><div class='add'>+    if (idx &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    slot = event_slot_get(event_pool, idx);</div><div class='add'>+    if (!slot) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='add'>+               "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    assert(slot-&gt;fd == fd);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;slot-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = epoll_ctl(event_pool-&gt;fd, EPOLL_CTL_DEL, fd, NULL);</div><div class='add'>+</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, errno, LG_MSG_EPOLL_FD_DEL_FAILED,</div><div class='add'>+                   "fail to del "</div><div class='add'>+                   "fd(=%d) from epoll fd(=%d)",</div><div class='add'>+                   fd, event_pool-&gt;fd);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	assert (slot-&gt;fd == fd);</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;slot-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-                ret = epoll_ctl (event_pool-&gt;fd, EPOLL_CTL_DEL, fd, NULL);</div><div class='del'>-</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg ("epoll", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_EPOLL_FD_DEL_FAILED, "fail to del "</div><div class='del'>-                                "fd(=%d) from epoll fd(=%d)", fd,</div><div class='del'>-                                event_pool-&gt;fd);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		slot-&gt;do_close = do_close;</div><div class='del'>-		slot-&gt;gen++; /* detect unregister in dispatch_handler() */</div><div class='del'>-        }</div><div class='add'>+        slot-&gt;do_close = do_close;</div><div class='add'>+        slot-&gt;gen++; /* detect unregister in dispatch_handler() */</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	UNLOCK (&amp;slot-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;slot-&gt;lock);</div><div class='ctx'> </div><div class='del'>-	event_slot_unref (event_pool, slot, idx); /* one for event_register() */</div><div class='del'>-	event_slot_unref (event_pool, slot, idx); /* one for event_slot_get() */</div><div class='add'>+    event_slot_unref(event_pool, slot, idx); /* one for event_register() */</div><div class='add'>+    event_slot_unref(event_pool, slot, idx); /* one for event_slot_get() */</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_unregister_epoll (struct event_pool *event_pool, int fd, int idx_hint)</div><div class='add'>+event_unregister_epoll(struct event_pool *event_pool, int fd, int idx_hint)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = event_unregister_epoll_common (event_pool, fd, idx_hint, 0);</div><div class='add'>+    ret = event_unregister_epoll_common(event_pool, fd, idx_hint, 0);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_unregister_close_epoll (struct event_pool *event_pool, int fd,</div><div class='del'>-			      int idx_hint)</div><div class='add'>+event_unregister_close_epoll(struct event_pool *event_pool, int fd,</div><div class='add'>+                             int idx_hint)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = event_unregister_epoll_common (event_pool, fd, idx_hint, 1);</div><div class='add'>+    ret = event_unregister_epoll_common(event_pool, fd, idx_hint, 1);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_select_on_epoll (struct event_pool *event_pool, int fd, int idx,</div><div class='del'>-                       int poll_in, int poll_out)</div><div class='add'>+event_select_on_epoll(struct event_pool *event_pool, int fd, int idx,</div><div class='add'>+                      int poll_in, int poll_out)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-	struct event_slot_epoll *slot = NULL;</div><div class='del'>-        struct epoll_event epoll_event = {0, };</div><div class='del'>-        struct event_data *ev_data = (void *)&amp;epoll_event.data;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='del'>-</div><div class='del'>-	slot = event_slot_get (event_pool, idx);</div><div class='del'>-        if (!slot) {</div><div class='del'>-                gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='del'>-                        "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='del'>-                return -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='add'>+    struct epoll_event epoll_event = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct event_data *ev_data = (void *)&amp;epoll_event.data;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='add'>+</div><div class='add'>+    slot = event_slot_get(event_pool, idx);</div><div class='add'>+    if (!slot) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='add'>+               "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    assert(slot-&gt;fd == fd);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;slot-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __slot_update_events(slot, poll_in, poll_out);</div><div class='add'>+</div><div class='add'>+        epoll_event.events = slot-&gt;events;</div><div class='add'>+        ev_data-&gt;idx = idx;</div><div class='add'>+        ev_data-&gt;gen = slot-&gt;gen;</div><div class='add'>+</div><div class='add'>+        if (slot-&gt;in_handler)</div><div class='add'>+            /*</div><div class='add'>+             * in_handler indicates at least one thread</div><div class='add'>+             * executing event_dispatch_epoll_handler()</div><div class='add'>+             * which will perform epoll_ctl(EPOLL_CTL_MOD)</div><div class='add'>+             * anyways (because of EPOLLET)</div><div class='add'>+             *</div><div class='add'>+             * This not only saves a system call, but also</div><div class='add'>+             * avoids possibility of another epoll thread</div><div class='add'>+             * picking up the next event while the ongoing</div><div class='add'>+             * handler is still in progress (and resulting</div><div class='add'>+             * in unnecessary contention on rpc_transport_t-&gt;mutex).</div><div class='add'>+             */</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        ret = epoll_ctl(event_pool-&gt;fd, EPOLL_CTL_MOD, fd, &amp;epoll_event);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, errno, LG_MSG_EPOLL_FD_MODIFY_FAILED,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "modify fd(=%d) events to %d",</div><div class='add'>+                   fd, epoll_event.events);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-	assert (slot-&gt;fd == fd);</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;slot-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		__slot_update_events (slot, poll_in, poll_out);</div><div class='del'>-</div><div class='del'>-		epoll_event.events = slot-&gt;events;</div><div class='del'>-		ev_data-&gt;idx = idx;</div><div class='del'>-		ev_data-&gt;gen = slot-&gt;gen;</div><div class='del'>-</div><div class='del'>-		if (slot-&gt;in_handler)</div><div class='del'>-			/*</div><div class='del'>-			 * in_handler indicates at least one thread</div><div class='del'>-			 * executing event_dispatch_epoll_handler()</div><div class='del'>-			 * which will perform epoll_ctl(EPOLL_CTL_MOD)</div><div class='del'>-			 * anyways (because of EPOLLET)</div><div class='del'>-			 *</div><div class='del'>-			 * This not only saves a system call, but also</div><div class='del'>-			 * avoids possibility of another epoll thread</div><div class='del'>-			 * picking up the next event while the ongoing</div><div class='del'>-			 * handler is still in progress (and resulting</div><div class='del'>-			 * in unnecessary contention on rpc_transport_t-&gt;mutex).</div><div class='del'>-			 */</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='del'>-		ret = epoll_ctl (event_pool-&gt;fd, EPOLL_CTL_MOD, fd,</div><div class='del'>-				 &amp;epoll_event);</div><div class='del'>-		if (ret == -1) {</div><div class='del'>-			gf_msg ("epoll", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_EPOLL_FD_MODIFY_FAILED, "failed to "</div><div class='del'>-                                "modify fd(=%d) events to %d", fd,</div><div class='del'>-                                epoll_event.events);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	UNLOCK (&amp;slot-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;slot-&gt;lock);</div><div class='ctx'> </div><div class='del'>-	event_slot_unref (event_pool, slot, idx);</div><div class='add'>+    event_slot_unref(event_pool, slot, idx);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return idx;</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_dispatch_epoll_handler (struct event_pool *event_pool,</div><div class='del'>-                              struct epoll_event *event)</div><div class='add'>+event_dispatch_epoll_handler(struct event_pool *event_pool,</div><div class='add'>+                             struct epoll_event *event)</div><div class='ctx'> {</div><div class='del'>-        struct event_data  *ev_data = NULL;</div><div class='del'>-	struct event_slot_epoll *slot = NULL;</div><div class='del'>-        event_handler_t     handler = NULL;</div><div class='del'>-        void               *data = NULL;</div><div class='del'>-        int                 idx = -1;</div><div class='del'>-	int                 gen = -1;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-	int                 fd = -1;</div><div class='del'>-        gf_boolean_t        handled_error_previously = _gf_false;</div><div class='del'>-</div><div class='del'>-	ev_data = (void *)&amp;event-&gt;data;</div><div class='del'>-        handler = NULL;</div><div class='del'>-        data = NULL;</div><div class='del'>-</div><div class='del'>-	idx = ev_data-&gt;idx;</div><div class='del'>-	gen = ev_data-&gt;gen;</div><div class='del'>-</div><div class='del'>-	slot = event_slot_get (event_pool, idx);</div><div class='del'>-        if (!slot) {</div><div class='del'>-                gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='del'>-                        "could not find slot for idx=%d", idx);</div><div class='del'>-                return -1;</div><div class='add'>+    struct event_data *ev_data = NULL;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='add'>+    event_handler_t handler = NULL;</div><div class='add'>+    void *data = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int gen = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    gf_boolean_t handled_error_previously = _gf_false;</div><div class='add'>+</div><div class='add'>+    ev_data = (void *)&amp;event-&gt;data;</div><div class='add'>+    handler = NULL;</div><div class='add'>+    data = NULL;</div><div class='add'>+</div><div class='add'>+    idx = ev_data-&gt;idx;</div><div class='add'>+    gen = ev_data-&gt;gen;</div><div class='add'>+</div><div class='add'>+    slot = event_slot_get(event_pool, idx);</div><div class='add'>+    if (!slot) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='add'>+               "could not find slot for idx=%d", idx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;slot-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = slot-&gt;fd;</div><div class='add'>+        if (fd == -1) {</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_STALE_FD_FOUND,</div><div class='add'>+                   "stale fd found on "</div><div class='add'>+                   "idx=%d, gen=%d, events=%d, slot-&gt;gen=%d",</div><div class='add'>+                   idx, gen, event-&gt;events, slot-&gt;gen);</div><div class='add'>+            /* fd got unregistered in another thread */</div><div class='add'>+            goto pre_unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	LOCK (&amp;slot-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		fd = slot-&gt;fd;</div><div class='del'>-		if (fd == -1) {</div><div class='del'>-			gf_msg ("epoll", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_STALE_FD_FOUND, "stale fd found on "</div><div class='del'>-                                "idx=%d, gen=%d, events=%d, slot-&gt;gen=%d",</div><div class='del'>-				idx, gen, event-&gt;events, slot-&gt;gen);</div><div class='del'>-			/* fd got unregistered in another thread */</div><div class='del'>-			goto pre_unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (gen != slot-&gt;gen) {</div><div class='del'>-			gf_msg ("epoll", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_GENERATION_MISMATCH, "generation "</div><div class='del'>-                                "mismatch on idx=%d, gen=%d, slot-&gt;gen=%d, "</div><div class='del'>-                                "slot-&gt;fd=%d", idx, gen, slot-&gt;gen, slot-&gt;fd);</div><div class='del'>-			/* slot was re-used and therefore is another fd! */</div><div class='del'>-			goto pre_unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		handler = slot-&gt;handler;</div><div class='del'>-		data = slot-&gt;data;</div><div class='del'>-</div><div class='del'>-                if (slot-&gt;handled_error) {</div><div class='del'>-                        handled_error_previously = _gf_true;</div><div class='del'>-                } else {</div><div class='del'>-                        slot-&gt;handled_error = (event-&gt;events</div><div class='del'>-                                               &amp; (EPOLLERR|EPOLLHUP));</div><div class='del'>-                        slot-&gt;in_handler++;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+        if (gen != slot-&gt;gen) {</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_GENERATION_MISMATCH,</div><div class='add'>+                   "generation "</div><div class='add'>+                   "mismatch on idx=%d, gen=%d, slot-&gt;gen=%d, "</div><div class='add'>+                   "slot-&gt;fd=%d",</div><div class='add'>+                   idx, gen, slot-&gt;gen, slot-&gt;fd);</div><div class='add'>+            /* slot was re-used and therefore is another fd! */</div><div class='add'>+            goto pre_unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        handler = slot-&gt;handler;</div><div class='add'>+        data = slot-&gt;data;</div><div class='add'>+</div><div class='add'>+        if (slot-&gt;handled_error) {</div><div class='add'>+            handled_error_previously = _gf_true;</div><div class='add'>+        } else {</div><div class='add'>+            slot-&gt;handled_error = (event-&gt;events &amp; (EPOLLERR | EPOLLHUP));</div><div class='add'>+            slot-&gt;in_handler++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> pre_unlock:</div><div class='del'>-	UNLOCK (&amp;slot-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;slot-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!handler)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!handler)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!handled_error_previously) {</div><div class='del'>-                ret = handler (fd, idx, gen, data,</div><div class='del'>-                               (event-&gt;events &amp; (EPOLLIN|EPOLLPRI)),</div><div class='del'>-                               (event-&gt;events &amp; (EPOLLOUT)),</div><div class='del'>-                               (event-&gt;events &amp; (EPOLLERR|EPOLLHUP)));</div><div class='del'>-        }</div><div class='add'>+    if (!handled_error_previously) {</div><div class='add'>+        ret = handler(fd, idx, gen, data,</div><div class='add'>+                      (event-&gt;events &amp; (EPOLLIN | EPOLLPRI)),</div><div class='add'>+                      (event-&gt;events &amp; (EPOLLOUT)),</div><div class='add'>+                      (event-&gt;events &amp; (EPOLLERR | EPOLLHUP)));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	event_slot_unref (event_pool, slot, idx);</div><div class='add'>+    event_slot_unref(event_pool, slot, idx);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void *</div><div class='del'>-event_dispatch_epoll_worker (void *data)</div><div class='add'>+event_dispatch_epoll_worker(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct epoll_event  event;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        struct event_thread_data *ev_data = data;</div><div class='del'>-	struct event_pool  *event_pool;</div><div class='del'>-        int                 myindex = -1;</div><div class='del'>-        int                 timetodie = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", ev_data, out);</div><div class='del'>-</div><div class='del'>-        event_pool = ev_data-&gt;event_pool;</div><div class='del'>-        myindex = ev_data-&gt;event_index;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='del'>-</div><div class='del'>-        gf_msg ("epoll", GF_LOG_INFO, 0, LG_MSG_STARTED_EPOLL_THREAD, "Started"</div><div class='del'>-                " thread with index %d", myindex);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                event_pool-&gt;activethreadcount++;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-</div><div class='del'>-	for (;;) {</div><div class='add'>+    struct epoll_event event;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct event_thread_data *ev_data = data;</div><div class='add'>+    struct event_pool *event_pool;</div><div class='add'>+    int myindex = -1;</div><div class='add'>+    int timetodie = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", ev_data, out);</div><div class='add'>+</div><div class='add'>+    event_pool = ev_data-&gt;event_pool;</div><div class='add'>+    myindex = ev_data-&gt;event_index;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='add'>+</div><div class='add'>+    gf_msg("epoll", GF_LOG_INFO, 0, LG_MSG_STARTED_EPOLL_THREAD,</div><div class='add'>+           "Started"</div><div class='add'>+           " thread with index %d",</div><div class='add'>+           myindex);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        event_pool-&gt;activethreadcount++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        if (event_pool-&gt;eventthreadcount &lt; myindex) {</div><div class='add'>+            /* ...time to die, thread count was decreased below</div><div class='add'>+             * this threads index */</div><div class='add'>+            /* Start with extra safety at this point, reducing</div><div class='add'>+             * lock conention in normal case when threads are not</div><div class='add'>+             * reconfigured always */</div><div class='add'>+            pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+            {</div><div class='ctx'>                 if (event_pool-&gt;eventthreadcount &lt; myindex) {</div><div class='del'>-                        /* ...time to die, thread count was decreased below</div><div class='del'>-                         * this threads index */</div><div class='del'>-                        /* Start with extra safety at this point, reducing</div><div class='del'>-                         * lock conention in normal case when threads are not</div><div class='del'>-                         * reconfigured always */</div><div class='del'>-                        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-                        {</div><div class='del'>-                                if (event_pool-&gt;eventthreadcount &lt;</div><div class='del'>-                                    myindex) {</div><div class='del'>-                                        /* if found true in critical section,</div><div class='del'>-                                         * die */</div><div class='del'>-                                        event_pool-&gt;pollers[myindex - 1] = 0;</div><div class='del'>-                                        event_pool-&gt;activethreadcount--;</div><div class='del'>-                                        timetodie = 1;</div><div class='del'>-                                        pthread_cond_broadcast (&amp;event_pool-&gt;cond);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-                        if (timetodie) {</div><div class='del'>-                                gf_msg ("epoll", GF_LOG_INFO, 0,</div><div class='del'>-                                        LG_MSG_EXITED_EPOLL_THREAD, "Exited "</div><div class='del'>-                                        "thread with index %d", myindex);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                    /* if found true in critical section,</div><div class='add'>+                     * die */</div><div class='add'>+                    event_pool-&gt;pollers[myindex - 1] = 0;</div><div class='add'>+                    event_pool-&gt;activethreadcount--;</div><div class='add'>+                    timetodie = 1;</div><div class='add'>+                    pthread_cond_broadcast(&amp;event_pool-&gt;cond);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+            if (timetodie) {</div><div class='add'>+                gf_msg("epoll", GF_LOG_INFO, 0, LG_MSG_EXITED_EPOLL_THREAD,</div><div class='add'>+                       "Exited "</div><div class='add'>+                       "thread with index %d",</div><div class='add'>+                       myindex);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = epoll_wait (event_pool-&gt;fd, &amp;event, 1, -1);</div><div class='add'>+        ret = epoll_wait(event_pool-&gt;fd, &amp;event, 1, -1);</div><div class='ctx'> </div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        /* timeout */</div><div class='del'>-                        continue;</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            /* timeout */</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (ret == -1 &amp;&amp; errno == EINTR)</div><div class='del'>-                        /* sys call */</div><div class='del'>-                        continue;</div><div class='add'>+        if (ret == -1 &amp;&amp; errno == EINTR)</div><div class='add'>+            /* sys call */</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		ret = event_dispatch_epoll_handler (event_pool, &amp;event);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("epoll", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_EXITED_EPOLL_THREAD,</div><div class='del'>-                                "Failed to dispatch handler");</div><div class='del'>-                }</div><div class='add'>+        ret = event_dispatch_epoll_handler(event_pool, &amp;event);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_EXITED_EPOLL_THREAD,</div><div class='add'>+                   "Failed to dispatch handler");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (ev_data)</div><div class='del'>-                GF_FREE (ev_data);</div><div class='del'>-        return NULL;</div><div class='add'>+    if (ev_data)</div><div class='add'>+        GF_FREE(ev_data);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Attempts to start the # of configured pollers, ensuring at least the first</div><div class='ctx'>  * is started in a joinable state */</div><div class='ctx'> static int</div><div class='del'>-event_dispatch_epoll (struct event_pool *event_pool)</div><div class='add'>+event_dispatch_epoll(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-	int                       i = 0;</div><div class='del'>-        pthread_t                 t_id;</div><div class='del'>-        int                       pollercount = 0;</div><div class='del'>-	int                       ret = -1;</div><div class='del'>-        struct event_thread_data *ev_data = NULL;</div><div class='del'>-        char                      thread_name[GF_THREAD_NAMEMAX] = {0,};</div><div class='del'>-</div><div class='del'>-        /* Start the configured number of pollers */</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                pollercount = event_pool-&gt;eventthreadcount;</div><div class='del'>-</div><div class='del'>-                /* Set to MAX if greater */</div><div class='del'>-                if (pollercount &gt; EVENT_MAX_THREADS)</div><div class='del'>-                        pollercount = EVENT_MAX_THREADS;</div><div class='del'>-</div><div class='del'>-                /* Default pollers to 1 in case this is incorrectly set */</div><div class='del'>-                if (pollercount &lt;= 0)</div><div class='del'>-                        pollercount = 1;</div><div class='del'>-</div><div class='del'>-                event_pool-&gt;activethreadcount++;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; pollercount; i++) {</div><div class='del'>-                        ev_data = GF_CALLOC (1, sizeof (*ev_data),</div><div class='del'>-                                     gf_common_mt_event_pool);</div><div class='del'>-                        if (!ev_data) {</div><div class='del'>-                                if (i == 0) {</div><div class='del'>-                                        /* Need to succeed creating 0'th</div><div class='del'>-                                         * thread, to joinable and wait */</div><div class='del'>-                                        break;</div><div class='del'>-                                } else {</div><div class='del'>-                                        /* Inability to create other threads</div><div class='del'>-                                         * are a lesser evil, and ignored */</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ev_data-&gt;event_pool = event_pool;</div><div class='del'>-                        ev_data-&gt;event_index = i + 1;</div><div class='del'>-</div><div class='del'>-                        snprintf (thread_name, sizeof(thread_name),</div><div class='del'>-                                  "epoll%03hx", (i &amp; 0x3ff));</div><div class='del'>-                        ret = gf_thread_create (&amp;t_id, NULL,</div><div class='del'>-                                                event_dispatch_epoll_worker,</div><div class='del'>-                                                ev_data, thread_name);</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                event_pool-&gt;pollers[i] = t_id;</div><div class='del'>-</div><div class='del'>-                                /* mark all threads other than one in index 0</div><div class='del'>-                                 * as detachable. Errors can be ignored, they</div><div class='del'>-                                 * spend their time as zombies if not detched</div><div class='del'>-                                 * and the thread counts are decreased */</div><div class='del'>-                                if (i != 0)</div><div class='del'>-                                        pthread_detach (event_pool-&gt;pollers[i]);</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg ("epoll", GF_LOG_WARNING, 0,</div><div class='del'>-                                        LG_MSG_START_EPOLL_THREAD_FAILED,</div><div class='del'>-                                        "Failed to start thread for index %d",</div><div class='del'>-                                        i);</div><div class='del'>-                                if (i == 0) {</div><div class='del'>-                                        GF_FREE (ev_data);</div><div class='del'>-                                        break;</div><div class='del'>-                                } else {</div><div class='del'>-                                        GF_FREE (ev_data);</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    pthread_t t_id;</div><div class='add'>+    int pollercount = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct event_thread_data *ev_data = NULL;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* Start the configured number of pollers */</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        pollercount = event_pool-&gt;eventthreadcount;</div><div class='add'>+</div><div class='add'>+        /* Set to MAX if greater */</div><div class='add'>+        if (pollercount &gt; EVENT_MAX_THREADS)</div><div class='add'>+            pollercount = EVENT_MAX_THREADS;</div><div class='add'>+</div><div class='add'>+        /* Default pollers to 1 in case this is incorrectly set */</div><div class='add'>+        if (pollercount &lt;= 0)</div><div class='add'>+            pollercount = 1;</div><div class='add'>+</div><div class='add'>+        event_pool-&gt;activethreadcount++;</div><div class='add'>+</div><div class='add'>+        for (i = 0; i &lt; pollercount; i++) {</div><div class='add'>+            ev_data = GF_CALLOC(1, sizeof(*ev_data), gf_common_mt_event_pool);</div><div class='add'>+            if (!ev_data) {</div><div class='add'>+                if (i == 0) {</div><div class='add'>+                    /* Need to succeed creating 0'th</div><div class='add'>+                     * thread, to joinable and wait */</div><div class='add'>+                    break;</div><div class='add'>+                } else {</div><div class='add'>+                    /* Inability to create other threads</div><div class='add'>+                     * are a lesser evil, and ignored */</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ev_data-&gt;event_pool = event_pool;</div><div class='add'>+            ev_data-&gt;event_index = i + 1;</div><div class='add'>+</div><div class='add'>+            snprintf(thread_name, sizeof(thread_name), "epoll%03hx",</div><div class='add'>+                     (i &amp; 0x3ff));</div><div class='add'>+            ret = gf_thread_create(&amp;t_id, NULL, event_dispatch_epoll_worker,</div><div class='add'>+                                   ev_data, thread_name);</div><div class='add'>+            if (!ret) {</div><div class='add'>+                event_pool-&gt;pollers[i] = t_id;</div><div class='add'>+</div><div class='add'>+                /* mark all threads other than one in index 0</div><div class='add'>+                 * as detachable. Errors can be ignored, they</div><div class='add'>+                 * spend their time as zombies if not detched</div><div class='add'>+                 * and the thread counts are decreased */</div><div class='add'>+                if (i != 0)</div><div class='add'>+                    pthread_detach(event_pool-&gt;pollers[i]);</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg("epoll", GF_LOG_WARNING, 0,</div><div class='add'>+                       LG_MSG_START_EPOLL_THREAD_FAILED,</div><div class='add'>+                       "Failed to start thread for index %d", i);</div><div class='add'>+                if (i == 0) {</div><div class='add'>+                    GF_FREE(ev_data);</div><div class='add'>+                    break;</div><div class='add'>+                } else {</div><div class='add'>+                    GF_FREE(ev_data);</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        /* Just wait for the first thread, that is created in a joinable state</div><div class='del'>-         * and will never die, ensuring this function never returns */</div><div class='del'>-        if (event_pool-&gt;pollers[0] != 0)</div><div class='del'>-		pthread_join (event_pool-&gt;pollers[0], NULL);</div><div class='add'>+    /* Just wait for the first thread, that is created in a joinable state</div><div class='add'>+     * and will never die, ensuring this function never returns */</div><div class='add'>+    if (event_pool-&gt;pollers[0] != 0)</div><div class='add'>+        pthread_join(event_pool-&gt;pollers[0], NULL);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                event_pool-&gt;activethreadcount--;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        event_pool-&gt;activethreadcount--;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -795,89 +776,87 @@ event_dispatch_epoll (struct event_pool *event_pool)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-event_pool_dispatched_unlocked (struct event_pool *event_pool)</div><div class='add'>+event_pool_dispatched_unlocked(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        return (event_pool-&gt;pollers[0] != 0);</div><div class='del'>-</div><div class='add'>+    return (event_pool-&gt;pollers[0] != 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_reconfigure_threads_epoll (struct event_pool *event_pool, int value)</div><div class='add'>+event_reconfigure_threads_epoll(struct event_pool *event_pool, int value)</div><div class='ctx'> {</div><div class='del'>-        int                              i;</div><div class='del'>-        int                              ret = 0;</div><div class='del'>-        pthread_t                        t_id;</div><div class='del'>-        int                              oldthreadcount;</div><div class='del'>-        struct event_thread_data        *ev_data = NULL;</div><div class='del'>-        char                             thread_name[GF_THREAD_NAMEMAX] = {0,};</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* Reconfigure to 0 threads is allowed only in destroy mode */</div><div class='del'>-                if (event_pool-&gt;destroy == 1) {</div><div class='del'>-                        value = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        /* Set to MAX if greater */</div><div class='del'>-                        if (value &gt; EVENT_MAX_THREADS)</div><div class='del'>-                                value = EVENT_MAX_THREADS;</div><div class='del'>-</div><div class='del'>-                        /* Default pollers to 1 in case this is set incorrectly */</div><div class='del'>-                        if (value &lt;= 0)</div><div class='del'>-                                value = 1;</div><div class='del'>-                }</div><div class='add'>+    int i;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    pthread_t t_id;</div><div class='add'>+    int oldthreadcount;</div><div class='add'>+    struct event_thread_data *ev_data = NULL;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* Reconfigure to 0 threads is allowed only in destroy mode */</div><div class='add'>+        if (event_pool-&gt;destroy == 1) {</div><div class='add'>+            value = 0;</div><div class='add'>+        } else {</div><div class='add'>+            /* Set to MAX if greater */</div><div class='add'>+            if (value &gt; EVENT_MAX_THREADS)</div><div class='add'>+                value = EVENT_MAX_THREADS;</div><div class='add'>+</div><div class='add'>+            /* Default pollers to 1 in case this is set incorrectly */</div><div class='add'>+            if (value &lt;= 0)</div><div class='add'>+                value = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                oldthreadcount = event_pool-&gt;eventthreadcount;</div><div class='del'>-</div><div class='del'>-                /* Start 'worker' threads as necessary only if event_dispatch()</div><div class='del'>-                 * was called before. If event_dispatch() was not called, there</div><div class='del'>-                 * will be no epoll 'worker' threads running yet. */</div><div class='del'>-</div><div class='del'>-                if (event_pool_dispatched_unlocked(event_pool)</div><div class='del'>-                    &amp;&amp; (oldthreadcount &lt; value)) {</div><div class='del'>-                        /* create more poll threads */</div><div class='del'>-                        for (i = oldthreadcount; i &lt; value; i++) {</div><div class='del'>-                                /* Start a thread if the index at this location</div><div class='del'>-                                 * is a 0, so that the older thread is confirmed</div><div class='del'>-                                 * as dead */</div><div class='del'>-                                if (event_pool-&gt;pollers[i] == 0) {</div><div class='del'>-                                        ev_data = GF_CALLOC (1,</div><div class='del'>-                                                      sizeof (*ev_data),</div><div class='del'>-                                                      gf_common_mt_event_pool);</div><div class='del'>-                                        if (!ev_data) {</div><div class='del'>-                                                continue;</div><div class='del'>-                                        }</div><div class='del'>-</div><div class='del'>-                                        ev_data-&gt;event_pool = event_pool;</div><div class='del'>-                                        ev_data-&gt;event_index = i + 1;</div><div class='del'>-</div><div class='del'>-                                        snprintf (thread_name,</div><div class='del'>-                                                  sizeof(thread_name),</div><div class='del'>-                                                  "epoll%03hx", (i &amp; 0x3ff));</div><div class='del'>-                                        ret = gf_thread_create (&amp;t_id, NULL,</div><div class='del'>-                                                event_dispatch_epoll_worker,</div><div class='del'>-                                                ev_data, thread_name);</div><div class='del'>-                                        if (ret) {</div><div class='del'>-                                                gf_msg ("epoll", GF_LOG_WARNING,</div><div class='del'>-                                                        0,</div><div class='del'>-                                                        LG_MSG_START_EPOLL_THREAD_FAILED,</div><div class='del'>-                                                        "Failed to start thread"</div><div class='del'>-                                                        " for index %d", i);</div><div class='del'>-                                                GF_FREE (ev_data);</div><div class='del'>-                                        } else {</div><div class='del'>-                                                pthread_detach (t_id);</div><div class='del'>-                                                event_pool-&gt;pollers[i] = t_id;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        oldthreadcount = event_pool-&gt;eventthreadcount;</div><div class='add'>+</div><div class='add'>+        /* Start 'worker' threads as necessary only if event_dispatch()</div><div class='add'>+         * was called before. If event_dispatch() was not called, there</div><div class='add'>+         * will be no epoll 'worker' threads running yet. */</div><div class='add'>+</div><div class='add'>+        if (event_pool_dispatched_unlocked(event_pool) &amp;&amp;</div><div class='add'>+            (oldthreadcount &lt; value)) {</div><div class='add'>+            /* create more poll threads */</div><div class='add'>+            for (i = oldthreadcount; i &lt; value; i++) {</div><div class='add'>+                /* Start a thread if the index at this location</div><div class='add'>+                 * is a 0, so that the older thread is confirmed</div><div class='add'>+                 * as dead */</div><div class='add'>+                if (event_pool-&gt;pollers[i] == 0) {</div><div class='add'>+                    ev_data = GF_CALLOC(1, sizeof(*ev_data),</div><div class='add'>+                                        gf_common_mt_event_pool);</div><div class='add'>+                    if (!ev_data) {</div><div class='add'>+                        continue;</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    ev_data-&gt;event_pool = event_pool;</div><div class='add'>+                    ev_data-&gt;event_index = i + 1;</div><div class='add'>+</div><div class='add'>+                    snprintf(thread_name, sizeof(thread_name), "epoll%03hx",</div><div class='add'>+                             (i &amp; 0x3ff));</div><div class='add'>+                    ret = gf_thread_create(&amp;t_id, NULL,</div><div class='add'>+                                           event_dispatch_epoll_worker, ev_data,</div><div class='add'>+                                           thread_name);</div><div class='add'>+                    if (ret) {</div><div class='add'>+                        gf_msg("epoll", GF_LOG_WARNING, 0,</div><div class='add'>+                               LG_MSG_START_EPOLL_THREAD_FAILED,</div><div class='add'>+                               "Failed to start thread"</div><div class='add'>+                               " for index %d",</div><div class='add'>+                               i);</div><div class='add'>+                        GF_FREE(ev_data);</div><div class='add'>+                    } else {</div><div class='add'>+                        pthread_detach(t_id);</div><div class='add'>+                        event_pool-&gt;pollers[i] = t_id;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                /* if value decreases, threads will terminate, themselves */</div><div class='del'>-                event_pool-&gt;eventthreadcount = value;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        /* if value decreases, threads will terminate, themselves */</div><div class='add'>+        event_pool-&gt;eventthreadcount = value;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is the destructor for the event_pool data structure</div><div class='hunk'>@@ -885,98 +864,99 @@ event_reconfigure_threads_epoll (struct event_pool *event_pool, int value)</div><div class='ctx'>  * else will lead to crashes.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-event_pool_destroy_epoll (struct event_pool *event_pool)</div><div class='add'>+event_pool_destroy_epoll(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0, i = 0, j = 0;</div><div class='del'>-        struct event_slot_epoll *table = NULL;</div><div class='del'>-</div><div class='del'>-        ret = sys_close (event_pool-&gt;fd);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; EVENT_EPOLL_TABLES; i++) {</div><div class='del'>-                if (event_pool-&gt;ereg[i]) {</div><div class='del'>-                        table = event_pool-&gt;ereg[i];</div><div class='del'>-                        event_pool-&gt;ereg[i] = NULL;</div><div class='del'>-                                for (j = 0; j &lt; EVENT_EPOLL_SLOTS; j++) {</div><div class='del'>-                                        LOCK_DESTROY (&amp;table[j].lock);</div><div class='del'>-                                }</div><div class='del'>-                        GF_FREE (table);</div><div class='del'>-                }</div><div class='add'>+    int ret = 0, i = 0, j = 0;</div><div class='add'>+    struct event_slot_epoll *table = NULL;</div><div class='add'>+</div><div class='add'>+    ret = sys_close(event_pool-&gt;fd);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; EVENT_EPOLL_TABLES; i++) {</div><div class='add'>+        if (event_pool-&gt;ereg[i]) {</div><div class='add'>+            table = event_pool-&gt;ereg[i];</div><div class='add'>+            event_pool-&gt;ereg[i] = NULL;</div><div class='add'>+            for (j = 0; j &lt; EVENT_EPOLL_SLOTS; j++) {</div><div class='add'>+                LOCK_DESTROY(&amp;table[j].lock);</div><div class='add'>+            }</div><div class='add'>+            GF_FREE(table);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;event_pool-&gt;mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;event_pool-&gt;cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;event_pool-&gt;cond);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (event_pool-&gt;evcache);</div><div class='del'>-        GF_FREE (event_pool-&gt;reg);</div><div class='del'>-        GF_FREE (event_pool);</div><div class='add'>+    GF_FREE(event_pool-&gt;evcache);</div><div class='add'>+    GF_FREE(event_pool-&gt;reg);</div><div class='add'>+    GF_FREE(event_pool);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-event_handled_epoll (struct event_pool *event_pool, int fd, int idx, int gen)</div><div class='add'>+event_handled_epoll(struct event_pool *event_pool, int fd, int idx, int gen)</div><div class='ctx'> {</div><div class='del'>-        struct event_slot_epoll *slot  = NULL;</div><div class='del'>-        struct epoll_event epoll_event = {0, };</div><div class='del'>-        struct event_data *ev_data     = (void *)&amp;epoll_event.data;</div><div class='del'>-        int                ret         = 0;</div><div class='del'>-</div><div class='del'>-	slot = event_slot_get (event_pool, idx);</div><div class='del'>-        if (!slot) {</div><div class='del'>-                gf_msg ("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='del'>-                        "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='del'>-                return -1;</div><div class='add'>+    struct event_slot_epoll *slot = NULL;</div><div class='add'>+    struct epoll_event epoll_event = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct event_data *ev_data = (void *)&amp;epoll_event.data;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    slot = event_slot_get(event_pool, idx);</div><div class='add'>+    if (!slot) {</div><div class='add'>+        gf_msg("epoll", GF_LOG_ERROR, 0, LG_MSG_SLOT_NOT_FOUND,</div><div class='add'>+               "could not find slot for fd=%d idx=%d", fd, idx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    assert(slot-&gt;fd == fd);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;slot-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        slot-&gt;in_handler--;</div><div class='add'>+</div><div class='add'>+        if (gen != slot-&gt;gen) {</div><div class='add'>+            /* event_unregister() happened while we were</div><div class='add'>+               in handler()</div><div class='add'>+            */</div><div class='add'>+            gf_msg_debug("epoll", 0,</div><div class='add'>+                         "generation bumped on idx=%d"</div><div class='add'>+                         " from gen=%d to slot-&gt;gen=%d, fd=%d, "</div><div class='add'>+                         "slot-&gt;fd=%d",</div><div class='add'>+                         idx, gen, slot-&gt;gen, fd, slot-&gt;fd);</div><div class='add'>+            goto post_unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        assert (slot-&gt;fd == fd);</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;slot-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		slot-&gt;in_handler--;</div><div class='del'>-</div><div class='del'>-		if (gen != slot-&gt;gen) {</div><div class='del'>-			/* event_unregister() happened while we were</div><div class='del'>-			   in handler()</div><div class='del'>-			*/</div><div class='del'>-			gf_msg_debug ("epoll", 0, "generation bumped on idx=%d"</div><div class='del'>-                                      " from gen=%d to slot-&gt;gen=%d, fd=%d, "</div><div class='del'>-				      "slot-&gt;fd=%d", idx, gen, slot-&gt;gen, fd,</div><div class='del'>-                                      slot-&gt;fd);</div><div class='del'>-			goto post_unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/* This call also picks up the changes made by another</div><div class='del'>-		   thread calling event_select_on_epoll() while this</div><div class='del'>-		   thread was busy in handler()</div><div class='del'>-		*/</div><div class='del'>-                if (slot-&gt;in_handler == 0) {</div><div class='del'>-                        epoll_event.events = slot-&gt;events;</div><div class='del'>-                        ev_data-&gt;idx = idx;</div><div class='del'>-                        ev_data-&gt;gen = gen;</div><div class='del'>-</div><div class='del'>-                        ret = epoll_ctl (event_pool-&gt;fd, EPOLL_CTL_MOD,</div><div class='del'>-                                         fd, &amp;epoll_event);</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+        /* This call also picks up the changes made by another</div><div class='add'>+           thread calling event_select_on_epoll() while this</div><div class='add'>+           thread was busy in handler()</div><div class='add'>+        */</div><div class='add'>+        if (slot-&gt;in_handler == 0) {</div><div class='add'>+            epoll_event.events = slot-&gt;events;</div><div class='add'>+            ev_data-&gt;idx = idx;</div><div class='add'>+            ev_data-&gt;gen = gen;</div><div class='add'>+</div><div class='add'>+            ret = epoll_ctl(event_pool-&gt;fd, EPOLL_CTL_MOD, fd, &amp;epoll_event);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> post_unlock:</div><div class='del'>-	UNLOCK (&amp;slot-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;slot-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        event_slot_unref (event_pool, slot, idx);</div><div class='add'>+    event_slot_unref(event_pool, slot, idx);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct event_ops event_ops_epoll = {</div><div class='del'>-        .new                       = event_pool_new_epoll,</div><div class='del'>-        .event_register            = event_register_epoll,</div><div class='del'>-        .event_select_on           = event_select_on_epoll,</div><div class='del'>-        .event_unregister          = event_unregister_epoll,</div><div class='del'>-        .event_unregister_close    = event_unregister_close_epoll,</div><div class='del'>-        .event_dispatch            = event_dispatch_epoll,</div><div class='del'>-        .event_reconfigure_threads = event_reconfigure_threads_epoll,</div><div class='del'>-        .event_pool_destroy        = event_pool_destroy_epoll,</div><div class='del'>-        .event_handled             = event_handled_epoll,</div><div class='add'>+    .new = event_pool_new_epoll,</div><div class='add'>+    .event_register = event_register_epoll,</div><div class='add'>+    .event_select_on = event_select_on_epoll,</div><div class='add'>+    .event_unregister = event_unregister_epoll,</div><div class='add'>+    .event_unregister_close = event_unregister_close_epoll,</div><div class='add'>+    .event_dispatch = event_dispatch_epoll,</div><div class='add'>+    .event_reconfigure_threads = event_reconfigure_threads_epoll,</div><div class='add'>+    .event_pool_destroy = event_pool_destroy_epoll,</div><div class='add'>+    .event_handled = event_handled_epoll,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='head'>diff --git a/libglusterfs/src/event-history.c b/libglusterfs/src/event-history.c<br/>index 95484a4322b..4845330f62b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event-history.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/event-history.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event-history.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event-history.c</a></div><div class='hunk'>@@ -12,72 +12,71 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> eh_t *</div><div class='del'>-eh_new (size_t buffer_size, gf_boolean_t use_buffer_once,</div><div class='del'>-        void (*destroy_buffer_data) (void *data))</div><div class='add'>+eh_new(size_t buffer_size, gf_boolean_t use_buffer_once,</div><div class='add'>+       void (*destroy_buffer_data)(void *data))</div><div class='ctx'> {</div><div class='del'>-        eh_t *history = NULL;</div><div class='del'>-        buffer_t *buffer = NULL;</div><div class='add'>+    eh_t *history = NULL;</div><div class='add'>+    buffer_t *buffer = NULL;</div><div class='ctx'> </div><div class='del'>-        history = GF_CALLOC (1, sizeof (eh_t), gf_common_mt_eh_t);</div><div class='del'>-        if (!history) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    history = GF_CALLOC(1, sizeof(eh_t), gf_common_mt_eh_t);</div><div class='add'>+    if (!history) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        buffer = cb_buffer_new (buffer_size, use_buffer_once,</div><div class='del'>-                                destroy_buffer_data);</div><div class='del'>-        if (!buffer) {</div><div class='del'>-                GF_FREE (history);</div><div class='del'>-                history = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    buffer = cb_buffer_new(buffer_size, use_buffer_once, destroy_buffer_data);</div><div class='add'>+    if (!buffer) {</div><div class='add'>+        GF_FREE(history);</div><div class='add'>+        history = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        history-&gt;buffer = buffer;</div><div class='add'>+    history-&gt;buffer = buffer;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;history-&gt;lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;history-&gt;lock, NULL);</div><div class='ctx'> out:</div><div class='del'>-        return history;</div><div class='add'>+    return history;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-eh_dump (eh_t *history, void *data,</div><div class='del'>-         int (dump_fn) (circular_buffer_t *buffer, void *data))</div><div class='add'>+eh_dump(eh_t *history, void *data,</div><div class='add'>+        int(dump_fn)(circular_buffer_t *buffer, void *data))</div><div class='ctx'> {</div><div class='del'>-        if (!history) {</div><div class='del'>-                gf_msg_debug ("event-history", 0, "history is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!history) {</div><div class='add'>+        gf_msg_debug("event-history", 0, "history is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cb_buffer_dump (history-&gt;buffer, data, dump_fn);</div><div class='add'>+    cb_buffer_dump(history-&gt;buffer, data, dump_fn);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-eh_save_history (eh_t *history, void *data)</div><div class='add'>+eh_save_history(eh_t *history, void *data)</div><div class='ctx'> {</div><div class='del'>-        int   ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = cb_add_entry_buffer (history-&gt;buffer, data);</div><div class='add'>+    ret = cb_add_entry_buffer(history-&gt;buffer, data);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-eh_destroy (eh_t *history)</div><div class='add'>+eh_destroy(eh_t *history)</div><div class='ctx'> {</div><div class='del'>-        if (!history) {</div><div class='del'>-                gf_msg ("event-history", GF_LOG_INFO, 0, LG_MSG_INVALID_ARG,</div><div class='del'>-                        "history for the xlator is NULL");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!history) {</div><div class='add'>+        gf_msg("event-history", GF_LOG_INFO, 0, LG_MSG_INVALID_ARG,</div><div class='add'>+               "history for the xlator is NULL");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cb_buffer_destroy (history-&gt;buffer);</div><div class='del'>-        history-&gt;buffer = NULL;</div><div class='add'>+    cb_buffer_destroy(history-&gt;buffer);</div><div class='add'>+    history-&gt;buffer = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;history-&gt;lock);</div><div class='add'>+    pthread_mutex_destroy(&amp;history-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (history);</div><div class='add'>+    GF_FREE(history);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/event-poll.c b/libglusterfs/src/event-poll.c<br/>index 283e2861b2b..727d2a000a2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event-poll.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/event-poll.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event-poll.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event-poll.c</a></div><div class='hunk'>@@ -23,490 +23,469 @@</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> struct event_slot_poll {</div><div class='del'>-	int fd;</div><div class='del'>-	int events;</div><div class='del'>-	void *data;</div><div class='del'>-	event_handler_t handler;</div><div class='add'>+    int fd;</div><div class='add'>+    int events;</div><div class='add'>+    void *data;</div><div class='add'>+    event_handler_t handler;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_register_poll (struct event_pool *event_pool, int fd,</div><div class='del'>-                     event_handler_t handler,</div><div class='del'>-                     void *data, int poll_in, int poll_out);</div><div class='del'>-</div><div class='add'>+event_register_poll(struct event_pool *event_pool, int fd,</div><div class='add'>+                    event_handler_t handler, void *data, int poll_in,</div><div class='add'>+                    int poll_out);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__flush_fd (int fd, int idx, int gen, void *data,</div><div class='del'>-            int poll_in, int poll_out, int poll_err)</div><div class='add'>+__flush_fd(int fd, int idx, int gen, void *data, int poll_in, int poll_out,</div><div class='add'>+           int poll_err)</div><div class='ctx'> {</div><div class='del'>-        char buf[64];</div><div class='del'>-        int ret = -1;</div><div class='add'>+    char buf[64];</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!poll_in)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!poll_in)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        do {</div><div class='del'>-                ret = sys_read (fd, buf, 64);</div><div class='del'>-                if (ret == -1 &amp;&amp; errno != EAGAIN) {</div><div class='del'>-                        gf_msg ("poll", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED, "read on %d returned "</div><div class='del'>-                                "error", fd);</div><div class='del'>-                }</div><div class='del'>-        } while (ret == 64);</div><div class='add'>+    do {</div><div class='add'>+        ret = sys_read(fd, buf, 64);</div><div class='add'>+        if (ret == -1 &amp;&amp; errno != EAGAIN) {</div><div class='add'>+            gf_msg("poll", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "read on %d returned "</div><div class='add'>+                   "error",</div><div class='add'>+                   fd);</div><div class='add'>+        }</div><div class='add'>+    } while (ret == 64);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__event_getindex (struct event_pool *event_pool, int fd, int idx)</div><div class='add'>+__event_getindex(struct event_pool *event_pool, int fd, int idx)</div><div class='ctx'> {</div><div class='del'>-        int  ret = -1;</div><div class='del'>-        int  i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        /* lookup in used space based on index provided */</div><div class='del'>-        if (idx &gt; -1 &amp;&amp; idx &lt; event_pool-&gt;used) {</div><div class='del'>-                if (event_pool-&gt;reg[idx].fd == fd) {</div><div class='del'>-                        ret = idx;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    /* lookup in used space based on index provided */</div><div class='add'>+    if (idx &gt; -1 &amp;&amp; idx &lt; event_pool-&gt;used) {</div><div class='add'>+        if (event_pool-&gt;reg[idx].fd == fd) {</div><div class='add'>+            ret = idx;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* search in used space, if lookup fails */</div><div class='del'>-        for (i = 0; i &lt; event_pool-&gt;used; i++) {</div><div class='del'>-                if (event_pool-&gt;reg[i].fd == fd) {</div><div class='del'>-                        ret = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    /* search in used space, if lookup fails */</div><div class='add'>+    for (i = 0; i &lt; event_pool-&gt;used; i++) {</div><div class='add'>+        if (event_pool-&gt;reg[i].fd == fd) {</div><div class='add'>+            ret = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static struct event_pool *</div><div class='del'>-event_pool_new_poll (int count, int eventthreadcount)</div><div class='add'>+event_pool_new_poll(int count, int eventthreadcount)</div><div class='ctx'> {</div><div class='del'>-        struct event_pool *event_pool = NULL;</div><div class='del'>-        int                ret = -1;</div><div class='add'>+    struct event_pool *event_pool = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        event_pool = GF_CALLOC (1, sizeof (*event_pool),</div><div class='del'>-                                gf_common_mt_event_pool);</div><div class='add'>+    event_pool = GF_CALLOC(1, sizeof(*event_pool), gf_common_mt_event_pool);</div><div class='ctx'> </div><div class='del'>-        if (!event_pool)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!event_pool)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        event_pool-&gt;count = count;</div><div class='del'>-        event_pool-&gt;reg = GF_CALLOC (event_pool-&gt;count,</div><div class='del'>-                                     sizeof (*event_pool-&gt;reg),</div><div class='del'>-                                     gf_common_mt_reg);</div><div class='add'>+    event_pool-&gt;count = count;</div><div class='add'>+    event_pool-&gt;reg = GF_CALLOC(event_pool-&gt;count, sizeof(*event_pool-&gt;reg),</div><div class='add'>+                                gf_common_mt_reg);</div><div class='ctx'> </div><div class='del'>-        if (!event_pool-&gt;reg) {</div><div class='del'>-                GF_FREE (event_pool);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!event_pool-&gt;reg) {</div><div class='add'>+        GF_FREE(event_pool);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;event_pool-&gt;mutex, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;event_pool-&gt;mutex, NULL);</div><div class='ctx'> </div><div class='del'>-        ret = pipe (event_pool-&gt;breaker);</div><div class='add'>+    ret = pipe(event_pool-&gt;breaker);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg ("poll", GF_LOG_ERROR, errno, LG_MSG_PIPE_CREATE_FAILED,</div><div class='del'>-                        "pipe creation failed");</div><div class='del'>-                GF_FREE (event_pool-&gt;reg);</div><div class='del'>-                GF_FREE (event_pool);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("poll", GF_LOG_ERROR, errno, LG_MSG_PIPE_CREATE_FAILED,</div><div class='add'>+               "pipe creation failed");</div><div class='add'>+        GF_FREE(event_pool-&gt;reg);</div><div class='add'>+        GF_FREE(event_pool);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fcntl (event_pool-&gt;breaker[0], F_SETFL, O_NONBLOCK);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg ("poll", GF_LOG_ERROR, errno, LG_MSG_SET_PIPE_FAILED,</div><div class='del'>-                        "could not set pipe to non blocking mode");</div><div class='del'>-                sys_close (event_pool-&gt;breaker[0]);</div><div class='del'>-                sys_close (event_pool-&gt;breaker[1]);</div><div class='del'>-                event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='del'>-</div><div class='del'>-                GF_FREE (event_pool-&gt;reg);</div><div class='del'>-                GF_FREE (event_pool);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fcntl (event_pool-&gt;breaker[1], F_SETFL, O_NONBLOCK);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg ("poll", GF_LOG_ERROR, errno, LG_MSG_SET_PIPE_FAILED,</div><div class='del'>-                        "could not set pipe to non blocking mode");</div><div class='del'>-</div><div class='del'>-                sys_close (event_pool-&gt;breaker[0]);</div><div class='del'>-                sys_close (event_pool-&gt;breaker[1]);</div><div class='del'>-                event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='add'>+    ret = fcntl(event_pool-&gt;breaker[0], F_SETFL, O_NONBLOCK);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("poll", GF_LOG_ERROR, errno, LG_MSG_SET_PIPE_FAILED,</div><div class='add'>+               "could not set pipe to non blocking mode");</div><div class='add'>+        sys_close(event_pool-&gt;breaker[0]);</div><div class='add'>+        sys_close(event_pool-&gt;breaker[1]);</div><div class='add'>+        event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='ctx'> </div><div class='del'>-                GF_FREE (event_pool-&gt;reg);</div><div class='del'>-                GF_FREE (event_pool);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(event_pool-&gt;reg);</div><div class='add'>+        GF_FREE(event_pool);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = event_register_poll (event_pool, event_pool-&gt;breaker[0],</div><div class='del'>-                                   __flush_fd, NULL, 1, 0);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg ("poll", GF_LOG_ERROR, 0, LG_MSG_REGISTER_PIPE_FAILED,</div><div class='del'>-                        "could not register pipe fd with poll event loop");</div><div class='del'>-                sys_close (event_pool-&gt;breaker[0]);</div><div class='del'>-                sys_close (event_pool-&gt;breaker[1]);</div><div class='del'>-                event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='del'>-</div><div class='del'>-                GF_FREE (event_pool-&gt;reg);</div><div class='del'>-                GF_FREE (event_pool);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    ret = fcntl(event_pool-&gt;breaker[1], F_SETFL, O_NONBLOCK);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("poll", GF_LOG_ERROR, errno, LG_MSG_SET_PIPE_FAILED,</div><div class='add'>+               "could not set pipe to non blocking mode");</div><div class='ctx'> </div><div class='del'>-        if (eventthreadcount &gt; 1) {</div><div class='del'>-                gf_msg ("poll", GF_LOG_INFO, 0,</div><div class='del'>-                        LG_MSG_POLL_IGNORE_MULTIPLE_THREADS, "Currently poll "</div><div class='del'>-                        "does not use multiple event processing threads, "</div><div class='del'>-                        "thread count (%d) ignored", eventthreadcount);</div><div class='del'>-        }</div><div class='add'>+        sys_close(event_pool-&gt;breaker[0]);</div><div class='add'>+        sys_close(event_pool-&gt;breaker[1]);</div><div class='add'>+        event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='ctx'> </div><div class='del'>-        /* although, eventhreadcount for poll implementation is always</div><div class='del'>-         * going to be 1, eventthreadcount needs to be set to 1 so that</div><div class='del'>-         * rpcsvc_request_handler() thread scaling works flawlessly in</div><div class='del'>-         * both epoll and poll models</div><div class='del'>-         */</div><div class='del'>-        event_pool-&gt;eventthreadcount = 1;</div><div class='add'>+        GF_FREE(event_pool-&gt;reg);</div><div class='add'>+        GF_FREE(event_pool);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = event_register_poll(event_pool, event_pool-&gt;breaker[0], __flush_fd,</div><div class='add'>+                              NULL, 1, 0);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("poll", GF_LOG_ERROR, 0, LG_MSG_REGISTER_PIPE_FAILED,</div><div class='add'>+               "could not register pipe fd with poll event loop");</div><div class='add'>+        sys_close(event_pool-&gt;breaker[0]);</div><div class='add'>+        sys_close(event_pool-&gt;breaker[1]);</div><div class='add'>+        event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='ctx'> </div><div class='del'>-        return event_pool;</div><div class='add'>+        GF_FREE(event_pool-&gt;reg);</div><div class='add'>+        GF_FREE(event_pool);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (eventthreadcount &gt; 1) {</div><div class='add'>+        gf_msg("poll", GF_LOG_INFO, 0, LG_MSG_POLL_IGNORE_MULTIPLE_THREADS,</div><div class='add'>+               "Currently poll "</div><div class='add'>+               "does not use multiple event processing threads, "</div><div class='add'>+               "thread count (%d) ignored",</div><div class='add'>+               eventthreadcount);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* although, eventhreadcount for poll implementation is always</div><div class='add'>+     * going to be 1, eventthreadcount needs to be set to 1 so that</div><div class='add'>+     * rpcsvc_request_handler() thread scaling works flawlessly in</div><div class='add'>+     * both epoll and poll models</div><div class='add'>+     */</div><div class='add'>+    event_pool-&gt;eventthreadcount = 1;</div><div class='add'>+</div><div class='add'>+    return event_pool;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_register_poll (struct event_pool *event_pool, int fd,</div><div class='del'>-                     event_handler_t handler,</div><div class='del'>-                     void *data, int poll_in, int poll_out)</div><div class='add'>+event_register_poll(struct event_pool *event_pool, int fd,</div><div class='add'>+                    event_handler_t handler, void *data, int poll_in,</div><div class='add'>+                    int poll_out)</div><div class='ctx'> {</div><div class='del'>-        int idx = -1;</div><div class='add'>+    int idx = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (event_pool-&gt;count == event_pool-&gt;used)</div><div class='del'>-                {</div><div class='del'>-                        event_pool-&gt;count += 256;</div><div class='del'>-</div><div class='del'>-                        event_pool-&gt;reg = GF_REALLOC (event_pool-&gt;reg,</div><div class='del'>-                                                      event_pool-&gt;count *</div><div class='del'>-                                                      sizeof (*event_pool-&gt;reg));</div><div class='del'>-                        if (!event_pool-&gt;reg)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                idx = event_pool-&gt;used++;</div><div class='del'>-</div><div class='del'>-                event_pool-&gt;reg[idx].fd = fd;</div><div class='del'>-                event_pool-&gt;reg[idx].events = POLLPRI;</div><div class='del'>-                event_pool-&gt;reg[idx].handler = handler;</div><div class='del'>-                event_pool-&gt;reg[idx].data = data;</div><div class='del'>-</div><div class='del'>-                switch (poll_in) {</div><div class='del'>-                case 1:</div><div class='del'>-                        event_pool-&gt;reg[idx].events |= POLLIN;</div><div class='del'>-                        break;</div><div class='del'>-                case 0:</div><div class='del'>-                        event_pool-&gt;reg[idx].events &amp;= ~POLLIN;</div><div class='del'>-                        break;</div><div class='del'>-                case -1:</div><div class='del'>-                        /* do nothing */</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        gf_msg ("poll", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_POLL_IN,</div><div class='del'>-                                "invalid poll_in value %d", poll_in);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (poll_out) {</div><div class='del'>-                case 1:</div><div class='del'>-                        event_pool-&gt;reg[idx].events |= POLLOUT;</div><div class='del'>-                        break;</div><div class='del'>-                case 0:</div><div class='del'>-                        event_pool-&gt;reg[idx].events &amp;= ~POLLOUT;</div><div class='del'>-                        break;</div><div class='del'>-                case -1:</div><div class='del'>-                        /* do nothing */</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        gf_msg ("poll", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_POLL_OUT,</div><div class='del'>-                                "invalid poll_out value %d", poll_out);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                event_pool-&gt;changed = 1;</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (event_pool-&gt;count == event_pool-&gt;used) {</div><div class='add'>+            event_pool-&gt;count += 256;</div><div class='add'>+</div><div class='add'>+            event_pool-&gt;reg = GF_REALLOC(</div><div class='add'>+                event_pool-&gt;reg, event_pool-&gt;count * sizeof(*event_pool-&gt;reg));</div><div class='add'>+            if (!event_pool-&gt;reg)</div><div class='add'>+                goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        idx = event_pool-&gt;used++;</div><div class='add'>+</div><div class='add'>+        event_pool-&gt;reg[idx].fd = fd;</div><div class='add'>+        event_pool-&gt;reg[idx].events = POLLPRI;</div><div class='add'>+        event_pool-&gt;reg[idx].handler = handler;</div><div class='add'>+        event_pool-&gt;reg[idx].data = data;</div><div class='add'>+</div><div class='add'>+        switch (poll_in) {</div><div class='add'>+            case 1:</div><div class='add'>+                event_pool-&gt;reg[idx].events |= POLLIN;</div><div class='add'>+                break;</div><div class='add'>+            case 0:</div><div class='add'>+                event_pool-&gt;reg[idx].events &amp;= ~POLLIN;</div><div class='add'>+                break;</div><div class='add'>+            case -1:</div><div class='add'>+                /* do nothing */</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                gf_msg("poll", GF_LOG_ERROR, 0, LG_MSG_INVALID_POLL_IN,</div><div class='add'>+                       "invalid poll_in value %d", poll_in);</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        switch (poll_out) {</div><div class='add'>+            case 1:</div><div class='add'>+                event_pool-&gt;reg[idx].events |= POLLOUT;</div><div class='add'>+                break;</div><div class='add'>+            case 0:</div><div class='add'>+                event_pool-&gt;reg[idx].events &amp;= ~POLLOUT;</div><div class='add'>+                break;</div><div class='add'>+            case -1:</div><div class='add'>+                /* do nothing */</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                gf_msg("poll", GF_LOG_ERROR, 0, LG_MSG_INVALID_POLL_OUT,</div><div class='add'>+                       "invalid poll_out value %d", poll_out);</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        event_pool-&gt;changed = 1;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return idx;</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_unregister_poll (struct event_pool *event_pool, int fd, int idx_hint)</div><div class='add'>+event_unregister_poll(struct event_pool *event_pool, int fd, int idx_hint)</div><div class='ctx'> {</div><div class='del'>-        int idx = -1;</div><div class='add'>+    int idx = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                idx = __event_getindex (event_pool, fd, idx_hint);</div><div class='del'>-</div><div class='del'>-                if (idx == -1) {</div><div class='del'>-                        gf_msg ("poll", GF_LOG_ERROR, 0, LG_MSG_INDEX_NOT_FOUND,</div><div class='del'>-                                "index not found for fd=%d (idx_hint=%d)",</div><div class='del'>-                                fd, idx_hint);</div><div class='del'>-                        errno = ENOENT;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                event_pool-&gt;reg[idx] =  event_pool-&gt;reg[--event_pool-&gt;used];</div><div class='del'>-                event_pool-&gt;changed = 1;</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        idx = __event_getindex(event_pool, fd, idx_hint);</div><div class='add'>+</div><div class='add'>+        if (idx == -1) {</div><div class='add'>+            gf_msg("poll", GF_LOG_ERROR, 0, LG_MSG_INDEX_NOT_FOUND,</div><div class='add'>+                   "index not found for fd=%d (idx_hint=%d)", fd, idx_hint);</div><div class='add'>+            errno = ENOENT;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        event_pool-&gt;reg[idx] = event_pool-&gt;reg[--event_pool-&gt;used];</div><div class='add'>+        event_pool-&gt;changed = 1;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return idx;</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_unregister_close_poll (struct event_pool *event_pool, int fd,</div><div class='del'>-			     int idx_hint)</div><div class='add'>+event_unregister_close_poll(struct event_pool *event_pool, int fd, int idx_hint)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = event_unregister_poll (event_pool, fd, idx_hint);</div><div class='add'>+    ret = event_unregister_poll(event_pool, fd, idx_hint);</div><div class='ctx'> </div><div class='del'>-	sys_close (fd);</div><div class='add'>+    sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_select_on_poll (struct event_pool *event_pool, int fd, int idx_hint,</div><div class='del'>-                      int poll_in, int poll_out)</div><div class='add'>+event_select_on_poll(struct event_pool *event_pool, int fd, int idx_hint,</div><div class='add'>+                     int poll_in, int poll_out)</div><div class='ctx'> {</div><div class='del'>-        int idx = -1;</div><div class='add'>+    int idx = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                idx = __event_getindex (event_pool, fd, idx_hint);</div><div class='del'>-</div><div class='del'>-                if (idx == -1) {</div><div class='del'>-                        gf_msg ("poll", GF_LOG_ERROR, 0, LG_MSG_INDEX_NOT_FOUND,</div><div class='del'>-                                "index not found for fd=%d (idx_hint=%d)",</div><div class='del'>-                                fd, idx_hint);</div><div class='del'>-                        errno = ENOENT;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (poll_in) {</div><div class='del'>-                case 1:</div><div class='del'>-                        event_pool-&gt;reg[idx].events |= POLLIN;</div><div class='del'>-                        break;</div><div class='del'>-                case 0:</div><div class='del'>-                        event_pool-&gt;reg[idx].events &amp;= ~POLLIN;</div><div class='del'>-                        break;</div><div class='del'>-                case -1:</div><div class='del'>-                        /* do nothing */</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        /* TODO: log error */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (poll_out) {</div><div class='del'>-                case 1:</div><div class='del'>-                        event_pool-&gt;reg[idx].events |= POLLOUT;</div><div class='del'>-                        break;</div><div class='del'>-                case 0:</div><div class='del'>-                        event_pool-&gt;reg[idx].events &amp;= ~POLLOUT;</div><div class='del'>-                        break;</div><div class='del'>-                case -1:</div><div class='del'>-                        /* do nothing */</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        /* TODO: log error */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (poll_in + poll_out &gt; -2)</div><div class='del'>-                        event_pool-&gt;changed = 1;</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        idx = __event_getindex(event_pool, fd, idx_hint);</div><div class='add'>+</div><div class='add'>+        if (idx == -1) {</div><div class='add'>+            gf_msg("poll", GF_LOG_ERROR, 0, LG_MSG_INDEX_NOT_FOUND,</div><div class='add'>+                   "index not found for fd=%d (idx_hint=%d)", fd, idx_hint);</div><div class='add'>+            errno = ENOENT;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        switch (poll_in) {</div><div class='add'>+            case 1:</div><div class='add'>+                event_pool-&gt;reg[idx].events |= POLLIN;</div><div class='add'>+                break;</div><div class='add'>+            case 0:</div><div class='add'>+                event_pool-&gt;reg[idx].events &amp;= ~POLLIN;</div><div class='add'>+                break;</div><div class='add'>+            case -1:</div><div class='add'>+                /* do nothing */</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                /* TODO: log error */</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        switch (poll_out) {</div><div class='add'>+            case 1:</div><div class='add'>+                event_pool-&gt;reg[idx].events |= POLLOUT;</div><div class='add'>+                break;</div><div class='add'>+            case 0:</div><div class='add'>+                event_pool-&gt;reg[idx].events &amp;= ~POLLOUT;</div><div class='add'>+                break;</div><div class='add'>+            case -1:</div><div class='add'>+                /* do nothing */</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                /* TODO: log error */</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (poll_in + poll_out &gt; -2)</div><div class='add'>+            event_pool-&gt;changed = 1;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return idx;</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_dispatch_poll_handler (struct event_pool *event_pool,</div><div class='del'>-                             struct pollfd *ufds, int i)</div><div class='add'>+event_dispatch_poll_handler(struct event_pool *event_pool, struct pollfd *ufds,</div><div class='add'>+                            int i)</div><div class='ctx'> {</div><div class='del'>-        event_handler_t  handler = NULL;</div><div class='del'>-        void            *data = NULL;</div><div class='del'>-        int              idx = -1;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-</div><div class='del'>-        handler = NULL;</div><div class='del'>-        data    = NULL;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                idx = __event_getindex (event_pool, ufds[i].fd, i);</div><div class='del'>-</div><div class='del'>-                if (idx == -1) {</div><div class='del'>-                        gf_msg ("poll", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INDEX_NOT_FOUND, "index not found for "</div><div class='del'>-                                "fd=%d (idx_hint=%d)", ufds[i].fd, i);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                handler = event_pool-&gt;reg[idx].handler;</div><div class='del'>-                data = event_pool-&gt;reg[idx].data;</div><div class='add'>+    event_handler_t handler = NULL;</div><div class='add'>+    void *data = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    handler = NULL;</div><div class='add'>+    data = NULL;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        idx = __event_getindex(event_pool, ufds[i].fd, i);</div><div class='add'>+</div><div class='add'>+        if (idx == -1) {</div><div class='add'>+            gf_msg("poll", GF_LOG_ERROR, 0, LG_MSG_INDEX_NOT_FOUND,</div><div class='add'>+                   "index not found for "</div><div class='add'>+                   "fd=%d (idx_hint=%d)",</div><div class='add'>+                   ufds[i].fd, i);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        handler = event_pool-&gt;reg[idx].handler;</div><div class='add'>+        data = event_pool-&gt;reg[idx].data;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (handler)</div><div class='del'>-                ret = handler (ufds[i].fd, idx, 0, data,</div><div class='del'>-                               (ufds[i].revents &amp; (POLLIN|POLLPRI)),</div><div class='del'>-                               (ufds[i].revents &amp; (POLLOUT)),</div><div class='del'>-                               (ufds[i].revents &amp; (POLLERR|POLLHUP|POLLNVAL)));</div><div class='add'>+    if (handler)</div><div class='add'>+        ret = handler(ufds[i].fd, idx, 0, data,</div><div class='add'>+                      (ufds[i].revents &amp; (POLLIN | POLLPRI)),</div><div class='add'>+                      (ufds[i].revents &amp; (POLLOUT)),</div><div class='add'>+                      (ufds[i].revents &amp; (POLLERR | POLLHUP | POLLNVAL)));</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_dispatch_poll_resize (struct event_pool *event_pool,</div><div class='del'>-                            struct pollfd *ufds, int size)</div><div class='add'>+event_dispatch_poll_resize(struct event_pool *event_pool, struct pollfd *ufds,</div><div class='add'>+                           int size)</div><div class='ctx'> {</div><div class='del'>-        int              i = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (event_pool-&gt;changed == 0) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-                if (event_pool-&gt;used &gt; event_pool-&gt;evcache_size) {</div><div class='del'>-                        GF_FREE (event_pool-&gt;evcache);</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (event_pool-&gt;changed == 0) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        event_pool-&gt;evcache = ufds = NULL;</div><div class='add'>+        if (event_pool-&gt;used &gt; event_pool-&gt;evcache_size) {</div><div class='add'>+            GF_FREE(event_pool-&gt;evcache);</div><div class='ctx'> </div><div class='del'>-                        event_pool-&gt;evcache_size = event_pool-&gt;used;</div><div class='add'>+            event_pool-&gt;evcache = ufds = NULL;</div><div class='ctx'> </div><div class='del'>-                        ufds = GF_CALLOC (sizeof (struct pollfd),</div><div class='del'>-                                          event_pool-&gt;evcache_size,</div><div class='del'>-                                          gf_common_mt_pollfd);</div><div class='del'>-                        if (!ufds)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        event_pool-&gt;evcache = ufds;</div><div class='del'>-                }</div><div class='add'>+            event_pool-&gt;evcache_size = event_pool-&gt;used;</div><div class='ctx'> </div><div class='del'>-                if (ufds == NULL) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+            ufds = GF_CALLOC(sizeof(struct pollfd), event_pool-&gt;evcache_size,</div><div class='add'>+                             gf_common_mt_pollfd);</div><div class='add'>+            if (!ufds)</div><div class='add'>+                goto unlock;</div><div class='add'>+            event_pool-&gt;evcache = ufds;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; event_pool-&gt;used; i++) {</div><div class='del'>-                        ufds[i].fd = event_pool-&gt;reg[i].fd;</div><div class='del'>-                        ufds[i].events = event_pool-&gt;reg[i].events;</div><div class='del'>-                        ufds[i].revents = 0;</div><div class='del'>-                }</div><div class='add'>+        if (ufds == NULL) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                size = i;</div><div class='add'>+        for (i = 0; i &lt; event_pool-&gt;used; i++) {</div><div class='add'>+            ufds[i].fd = event_pool-&gt;reg[i].fd;</div><div class='add'>+            ufds[i].events = event_pool-&gt;reg[i].events;</div><div class='add'>+            ufds[i].revents = 0;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        size = i;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-event_dispatch_poll (struct event_pool *event_pool)</div><div class='add'>+event_dispatch_poll(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        struct pollfd   *ufds = NULL;</div><div class='del'>-        int              size = 0;</div><div class='del'>-        int              i = 0;</div><div class='del'>-        int              ret = -1;</div><div class='add'>+    struct pollfd *ufds = NULL;</div><div class='add'>+    int size = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        event_pool-&gt;activethreadcount = 1;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='ctx'>         {</div><div class='del'>-                event_pool-&gt;activethreadcount = 1;</div><div class='add'>+            if (event_pool-&gt;destroy == 1) {</div><div class='add'>+                event_pool-&gt;activethreadcount = 0;</div><div class='add'>+                pthread_cond_broadcast(&amp;event_pool-&gt;cond);</div><div class='add'>+                pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (event_pool-&gt;destroy == 1) {</div><div class='del'>-                                event_pool-&gt;activethreadcount = 0;</div><div class='del'>-                                pthread_cond_broadcast (&amp;event_pool-&gt;cond);</div><div class='del'>-                                pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                size = event_dispatch_poll_resize (event_pool, ufds, size);</div><div class='del'>-                ufds = event_pool-&gt;evcache;</div><div class='del'>-</div><div class='del'>-                ret = poll (ufds, size, 1);</div><div class='del'>-</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        /* timeout */</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (ret == -1 &amp;&amp; errno == EINTR)</div><div class='del'>-                        /* sys call */</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; size; i++) {</div><div class='del'>-                        if (!ufds[i].revents)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        event_dispatch_poll_handler (event_pool, ufds, i);</div><div class='del'>-                }</div><div class='add'>+        pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        size = event_dispatch_poll_resize(event_pool, ufds, size);</div><div class='add'>+        ufds = event_pool-&gt;evcache;</div><div class='add'>+</div><div class='add'>+        ret = poll(ufds, size, 1);</div><div class='add'>+</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            /* timeout */</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (ret == -1 &amp;&amp; errno == EINTR)</div><div class='add'>+            /* sys call */</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        for (i = 0; i &lt; size; i++) {</div><div class='add'>+            if (!ufds[i].revents)</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            event_dispatch_poll_handler(event_pool, ufds, i);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-event_reconfigure_threads_poll (struct event_pool *event_pool, int value)</div><div class='add'>+event_reconfigure_threads_poll(struct event_pool *event_pool, int value)</div><div class='ctx'> {</div><div class='del'>-        /* No-op for poll */</div><div class='add'>+    /* No-op for poll */</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is the destructor for the event_pool data structure</div><div class='hunk'>@@ -514,33 +493,32 @@ event_reconfigure_threads_poll (struct event_pool *event_pool, int value)</div><div class='ctx'>  * else will lead to crashes.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-event_pool_destroy_poll (struct event_pool *event_pool)</div><div class='add'>+event_pool_destroy_poll(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = sys_close (event_pool-&gt;breaker[0]);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = sys_close(event_pool-&gt;breaker[0]);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = sys_close (event_pool-&gt;breaker[1]);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = sys_close(event_pool-&gt;breaker[1]);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='add'>+    event_pool-&gt;breaker[0] = event_pool-&gt;breaker[1] = -1;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (event_pool-&gt;reg);</div><div class='del'>-        GF_FREE (event_pool);</div><div class='add'>+    GF_FREE(event_pool-&gt;reg);</div><div class='add'>+    GF_FREE(event_pool);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct event_ops event_ops_poll = {</div><div class='del'>-        .new                    = event_pool_new_poll,</div><div class='del'>-        .event_register         = event_register_poll,</div><div class='del'>-        .event_select_on        = event_select_on_poll,</div><div class='del'>-        .event_unregister       = event_unregister_poll,</div><div class='del'>-        .event_unregister_close = event_unregister_close_poll,</div><div class='del'>-        .event_dispatch         = event_dispatch_poll,</div><div class='del'>-        .event_reconfigure_threads = event_reconfigure_threads_poll,</div><div class='del'>-        .event_pool_destroy     = event_pool_destroy_poll</div><div class='del'>-};</div><div class='add'>+    .new = event_pool_new_poll,</div><div class='add'>+    .event_register = event_register_poll,</div><div class='add'>+    .event_select_on = event_select_on_poll,</div><div class='add'>+    .event_unregister = event_unregister_poll,</div><div class='add'>+    .event_unregister_close = event_unregister_close_poll,</div><div class='add'>+    .event_dispatch = event_dispatch_poll,</div><div class='add'>+    .event_reconfigure_threads = event_reconfigure_threads_poll,</div><div class='add'>+    .event_pool_destroy = event_pool_destroy_poll};</div><div class='head'>diff --git a/libglusterfs/src/event.c b/libglusterfs/src/event.c<br/>index 2598cd305a8..5b4d43e8650 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/event.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/event.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/event.c</a></div><div class='hunk'>@@ -23,173 +23,164 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> struct event_pool *</div><div class='del'>-event_pool_new (int count, int eventthreadcount)</div><div class='add'>+event_pool_new(int count, int eventthreadcount)</div><div class='ctx'> {</div><div class='del'>-        struct event_pool *event_pool = NULL;</div><div class='del'>-	extern struct event_ops event_ops_poll;</div><div class='add'>+    struct event_pool *event_pool = NULL;</div><div class='add'>+    extern struct event_ops event_ops_poll;</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_SYS_EPOLL_H</div><div class='del'>-	extern struct event_ops event_ops_epoll;</div><div class='add'>+    extern struct event_ops event_ops_epoll;</div><div class='ctx'> </div><div class='del'>-        event_pool = event_ops_epoll.new (count, eventthreadcount);</div><div class='add'>+    event_pool = event_ops_epoll.new(count, eventthreadcount);</div><div class='ctx'> </div><div class='del'>-        if (event_pool) {</div><div class='del'>-                event_pool-&gt;ops = &amp;event_ops_epoll;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg ("event", GF_LOG_WARNING, 0, LG_MSG_FALLBACK_TO_POLL,</div><div class='del'>-                        "falling back to poll based event handling");</div><div class='del'>-        }</div><div class='add'>+    if (event_pool) {</div><div class='add'>+        event_pool-&gt;ops = &amp;event_ops_epoll;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg("event", GF_LOG_WARNING, 0, LG_MSG_FALLBACK_TO_POLL,</div><div class='add'>+               "falling back to poll based event handling");</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (!event_pool) {</div><div class='del'>-                event_pool = event_ops_poll.new (count, eventthreadcount);</div><div class='add'>+    if (!event_pool) {</div><div class='add'>+        event_pool = event_ops_poll.new(count, eventthreadcount);</div><div class='ctx'> </div><div class='del'>-                if (event_pool)</div><div class='del'>-                        event_pool-&gt;ops = &amp;event_ops_poll;</div><div class='del'>-        }</div><div class='add'>+        if (event_pool)</div><div class='add'>+            event_pool-&gt;ops = &amp;event_ops_poll;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return event_pool;</div><div class='add'>+    return event_pool;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_register (struct event_pool *event_pool, int fd,</div><div class='del'>-                event_handler_t handler,</div><div class='del'>-                void *data, int poll_in, int poll_out)</div><div class='add'>+event_register(struct event_pool *event_pool, int fd, event_handler_t handler,</div><div class='add'>+               void *data, int poll_in, int poll_out)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_register (event_pool, fd, handler, data,</div><div class='del'>-                                               poll_in, poll_out);</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_register(event_pool, fd, handler, data,</div><div class='add'>+                                          poll_in, poll_out);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_unregister (struct event_pool *event_pool, int fd, int idx)</div><div class='add'>+event_unregister(struct event_pool *event_pool, int fd, int idx)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_unregister (event_pool, fd, idx);</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_unregister(event_pool, fd, idx);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_unregister_close (struct event_pool *event_pool, int fd, int idx)</div><div class='add'>+event_unregister_close(struct event_pool *event_pool, int fd, int idx)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_unregister_close (event_pool, fd, idx);</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_unregister_close(event_pool, fd, idx);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_select_on (struct event_pool *event_pool, int fd, int idx_hint,</div><div class='del'>-                 int poll_in, int poll_out)</div><div class='add'>+event_select_on(struct event_pool *event_pool, int fd, int idx_hint,</div><div class='add'>+                int poll_in, int poll_out)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_select_on (event_pool, fd, idx_hint,</div><div class='del'>-                                                poll_in, poll_out);</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_select_on(event_pool, fd, idx_hint, poll_in,</div><div class='add'>+                                           poll_out);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-event_dispatch (struct event_pool *event_pool)</div><div class='add'>+event_dispatch(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_dispatch (event_pool);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_dispatch(event_pool);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-event_reconfigure_threads (struct event_pool *event_pool, int value)</div><div class='add'>+event_reconfigure_threads(struct event_pool *event_pool, int value)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        /* call event refresh function */</div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_reconfigure_threads (event_pool,</div><div class='del'>-                                                          value);</div><div class='add'>+    /* call event refresh function */</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_reconfigure_threads(event_pool, value);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-event_pool_destroy (struct event_pool *event_pool)</div><div class='add'>+event_pool_destroy(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int destroy = 0, activethreadcount = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int destroy = 0, activethreadcount = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                destroy = event_pool-&gt;destroy;</div><div class='del'>-                activethreadcount = event_pool-&gt;activethreadcount;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        destroy = event_pool-&gt;destroy;</div><div class='add'>+        activethreadcount = event_pool-&gt;activethreadcount;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (!destroy || (activethreadcount &gt; 0)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!destroy || (activethreadcount &gt; 0)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = event_pool-&gt;ops-&gt;event_pool_destroy (event_pool);</div><div class='add'>+    ret = event_pool-&gt;ops-&gt;event_pool_destroy(event_pool);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-poller_destroy_handler (int fd, int idx, int gen, void *data,</div><div class='del'>-                       int poll_out, int poll_in, int poll_err)</div><div class='add'>+poller_destroy_handler(int fd, int idx, int gen, void *data, int poll_out,</div><div class='add'>+                       int poll_in, int poll_err)</div><div class='ctx'> {</div><div class='del'>-        struct event_destroy_data *destroy = NULL;</div><div class='del'>-        int                        readfd  = -1, ret = -1;</div><div class='del'>-        char                       buf     = '\0';</div><div class='del'>-</div><div class='del'>-        destroy = data;</div><div class='del'>-        readfd = destroy-&gt;readfd;</div><div class='del'>-        if (readfd &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    struct event_destroy_data *destroy = NULL;</div><div class='add'>+    int readfd = -1, ret = -1;</div><div class='add'>+    char buf = '\0';</div><div class='ctx'> </div><div class='del'>-        while (sys_read (readfd, &amp;buf, 1) &gt; 0) {</div><div class='del'>-        }</div><div class='add'>+    destroy = data;</div><div class='add'>+    readfd = destroy-&gt;readfd;</div><div class='add'>+    if (readfd &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (sys_read(readfd, &amp;buf, 1) &gt; 0) {</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        event_handled (destroy-&gt;pool, fd, idx, gen);</div><div class='add'>+    event_handled(destroy-&gt;pool, fd, idx, gen);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function destroys all the poller threads.</div><div class='hunk'>@@ -204,109 +195,111 @@ out:</div><div class='ctx'>  *   threads are destroyed)</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-event_dispatch_destroy (struct event_pool *event_pool)</div><div class='add'>+event_dispatch_destroy(struct event_pool *event_pool)</div><div class='ctx'> {</div><div class='del'>-        int                       ret        = -1, threadcount = 0;</div><div class='del'>-        int  fd[2]                           = {-1};</div><div class='del'>-        int                       idx        = -1;</div><div class='del'>-        int                       flags      = 0;</div><div class='del'>-        struct timespec           sleep_till = {0, };</div><div class='del'>-        struct event_destroy_data data       = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("event", event_pool, out);</div><div class='del'>-</div><div class='del'>-        ret = pipe (fd);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Make the read end of the pipe nonblocking */</div><div class='del'>-        flags = fcntl(fd[0], F_GETFL);</div><div class='del'>-        flags |= O_NONBLOCK;</div><div class='del'>-        ret = fcntl(fd[0], F_SETFL, flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Make the write end of the pipe nonblocking */</div><div class='del'>-        flags = fcntl(fd[1], F_GETFL);</div><div class='del'>-        flags |= O_NONBLOCK;</div><div class='del'>-        ret = fcntl(fd[1], F_SETFL, flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        data.pool = event_pool;</div><div class='del'>-        data.readfd = fd[1];</div><div class='del'>-</div><div class='del'>-        /* From the main thread register an event on the pipe fd[0],</div><div class='del'>-         */</div><div class='del'>-        idx = event_register (event_pool, fd[0], poller_destroy_handler,</div><div class='del'>-                              &amp;data, 1, 0);</div><div class='del'>-        if (idx &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Enter the destroy mode first, set this before reconfiguring to 0</div><div class='del'>-         * threads, to prevent further reconfigure to thread count &gt; 0.</div><div class='add'>+    int ret = -1, threadcount = 0;</div><div class='add'>+    int fd[2] = {-1};</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    struct timespec sleep_till = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct event_destroy_data data = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("event", event_pool, out);</div><div class='add'>+</div><div class='add'>+    ret = pipe(fd);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Make the read end of the pipe nonblocking */</div><div class='add'>+    flags = fcntl(fd[0], F_GETFL);</div><div class='add'>+    flags |= O_NONBLOCK;</div><div class='add'>+    ret = fcntl(fd[0], F_SETFL, flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Make the write end of the pipe nonblocking */</div><div class='add'>+    flags = fcntl(fd[1], F_GETFL);</div><div class='add'>+    flags |= O_NONBLOCK;</div><div class='add'>+    ret = fcntl(fd[1], F_SETFL, flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    data.pool = event_pool;</div><div class='add'>+    data.readfd = fd[1];</div><div class='add'>+</div><div class='add'>+    /* From the main thread register an event on the pipe fd[0],</div><div class='add'>+     */</div><div class='add'>+    idx = event_register(event_pool, fd[0], poller_destroy_handler, &amp;data, 1,</div><div class='add'>+                         0);</div><div class='add'>+    if (idx &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Enter the destroy mode first, set this before reconfiguring to 0</div><div class='add'>+     * threads, to prevent further reconfigure to thread count &gt; 0.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        threadcount = event_pool-&gt;eventthreadcount;</div><div class='add'>+        event_pool-&gt;destroy = 1;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    ret = event_reconfigure_threads(event_pool, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Write something onto the write end of the pipe(fd[1]) so that</div><div class='add'>+     * poll wakes up and calls the handler, poller_destroy_handler()</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;event_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* Write to pipe(fd[1]) and then wait for 1 second or until</div><div class='add'>+         * a poller thread that is dying, broadcasts. Make sure we</div><div class='add'>+         * do not loop forever by limiting to 10 retries</div><div class='ctx'>          */</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                threadcount = event_pool-&gt;eventthreadcount;</div><div class='del'>-                event_pool-&gt;destroy = 1;</div><div class='add'>+        int retry = 0;</div><div class='add'>+</div><div class='add'>+        while (event_pool-&gt;activethreadcount &gt; 0 &amp;&amp;</div><div class='add'>+               (retry++ &lt; (threadcount + 10))) {</div><div class='add'>+            if (sys_write(fd[1], "dummy", 6) == -1) {</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            sleep_till.tv_sec = time(NULL) + 1;</div><div class='add'>+            ret = pthread_cond_timedwait(&amp;event_pool-&gt;cond, &amp;event_pool-&gt;mutex,</div><div class='add'>+                                         &amp;sleep_till);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg_debug("event", 0,</div><div class='add'>+                             "thread cond-timedwait failed "</div><div class='add'>+                             "active-thread-count: %d, "</div><div class='add'>+                             "retry: %d",</div><div class='add'>+                             event_pool-&gt;activethreadcount, retry);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;event_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        ret = event_reconfigure_threads (event_pool, 0);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = event_unregister(event_pool, fd[0], idx);</div><div class='ctx'> </div><div class='del'>-        /* Write something onto the write end of the pipe(fd[1]) so that</div><div class='del'>-         * poll wakes up and calls the handler, poller_destroy_handler()</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;event_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* Write to pipe(fd[1]) and then wait for 1 second or until</div><div class='del'>-                 * a poller thread that is dying, broadcasts. Make sure we</div><div class='del'>-                 * do not loop forever by limiting to 10 retries</div><div class='del'>-                 */</div><div class='del'>-                int retry = 0;</div><div class='del'>-</div><div class='del'>-                while (event_pool-&gt;activethreadcount &gt; 0</div><div class='del'>-                       &amp;&amp; (retry++ &lt; (threadcount + 10))) {</div><div class='del'>-                        if (sys_write (fd[1], "dummy", 6) == -1) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        sleep_till.tv_sec = time (NULL) + 1;</div><div class='del'>-                        ret = pthread_cond_timedwait (&amp;event_pool-&gt;cond,</div><div class='del'>-                                                      &amp;event_pool-&gt;mutex,</div><div class='del'>-                                                      &amp;sleep_till);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg_debug ("event", 0,</div><div class='del'>-                                              "thread cond-timedwait failed "</div><div class='del'>-                                              "active-thread-count: %d, "</div><div class='del'>-                                              "retry: %d",</div><div class='del'>-                                              event_pool-&gt;activethreadcount,</div><div class='del'>-                                              retry);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;event_pool-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        ret = event_unregister (event_pool, fd[0], idx);</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        if (fd[0] != -1)</div><div class='del'>-                sys_close (fd[0]);</div><div class='del'>-        if (fd[1] != -1)</div><div class='del'>-                sys_close (fd[1]);</div><div class='add'>+out:</div><div class='add'>+    if (fd[0] != -1)</div><div class='add'>+        sys_close(fd[0]);</div><div class='add'>+    if (fd[1] != -1)</div><div class='add'>+        sys_close(fd[1]);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-event_handled (struct event_pool *event_pool, int fd, int idx, int gen)</div><div class='add'>+event_handled(struct event_pool *event_pool, int fd, int idx, int gen)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (event_pool-&gt;ops-&gt;event_handled)</div><div class='del'>-                ret = event_pool-&gt;ops-&gt;event_handled (event_pool, fd, idx, gen);</div><div class='add'>+    if (event_pool-&gt;ops-&gt;event_handled)</div><div class='add'>+        ret = event_pool-&gt;ops-&gt;event_handled(event_pool, fd, idx, gen);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/events.c b/libglusterfs/src/events.c<br/>index 5a1b4c06e57..b1fa057b81e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/events.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/events.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/events.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/events.c</a></div><div class='hunk'>@@ -25,112 +25,109 @@</div><div class='ctx'> #include "globals.h"</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #define EVENT_HOST "127.0.0.1"</div><div class='ctx'> #define EVENT_PORT 24009</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-_gf_event (eventtypes_t event, const char *fmt, ...)</div><div class='add'>+_gf_event(eventtypes_t event, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        int                ret                   = 0;</div><div class='del'>-        int                sock                  = -1;</div><div class='del'>-        char              *eventstr              = NULL;</div><div class='del'>-        struct             sockaddr_in server;</div><div class='del'>-        va_list            arguments;</div><div class='del'>-        char              *msg                   = NULL;</div><div class='del'>-        glusterfs_ctx_t   *ctx                   = NULL;</div><div class='del'>-        char              *host                  = NULL;</div><div class='del'>-        struct addrinfo    hints;</div><div class='del'>-        struct addrinfo   *result                = NULL;</div><div class='del'>-</div><div class='del'>-        /* Global context */</div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (event &lt; 0 || event &gt;= EVENT_LAST) {</div><div class='del'>-                ret = EVENT_ERROR_INVALID_INPUTS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialize UDP socket */</div><div class='del'>-        sock = socket (AF_INET, SOCK_DGRAM, 0);</div><div class='del'>-        if (sock &lt; 0) {</div><div class='del'>-                ret = EVENT_ERROR_SOCKET;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset (&amp;hints, 0, sizeof (hints));</div><div class='del'>-        hints.ai_family = AF_UNSPEC;</div><div class='del'>-</div><div class='del'>-        /* Get Host name to send message */</div><div class='del'>-        if (ctx &amp;&amp; ctx-&gt;cmd_args.volfile_server) {</div><div class='del'>-                /* If it is client code then volfile_server is set</div><div class='del'>-                   use that information to push the events. */</div><div class='del'>-                if ((getaddrinfo (ctx-&gt;cmd_args.volfile_server,</div><div class='del'>-                                  NULL, &amp;hints, &amp;result)) != 0) {</div><div class='del'>-                        ret = EVENT_ERROR_RESOLVE;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (get_ip_from_addrinfo (result, &amp;host) == NULL) {</div><div class='del'>-                        ret = EVENT_ERROR_RESOLVE;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                /* Localhost, Use the defined IP for localhost */</div><div class='del'>-                host = gf_strdup (EVENT_HOST);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int sock = -1;</div><div class='add'>+    char *eventstr = NULL;</div><div class='add'>+    struct sockaddr_in server;</div><div class='add'>+    va_list arguments;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    char *host = NULL;</div><div class='add'>+    struct addrinfo hints;</div><div class='add'>+    struct addrinfo *result = NULL;</div><div class='add'>+</div><div class='add'>+    /* Global context */</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (event &lt; 0 || event &gt;= EVENT_LAST) {</div><div class='add'>+        ret = EVENT_ERROR_INVALID_INPUTS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialize UDP socket */</div><div class='add'>+    sock = socket(AF_INET, SOCK_DGRAM, 0);</div><div class='add'>+    if (sock &lt; 0) {</div><div class='add'>+        ret = EVENT_ERROR_SOCKET;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(&amp;hints, 0, sizeof(hints));</div><div class='add'>+    hints.ai_family = AF_UNSPEC;</div><div class='add'>+</div><div class='add'>+    /* Get Host name to send message */</div><div class='add'>+    if (ctx &amp;&amp; ctx-&gt;cmd_args.volfile_server) {</div><div class='add'>+        /* If it is client code then volfile_server is set</div><div class='add'>+           use that information to push the events. */</div><div class='add'>+        if ((getaddrinfo(ctx-&gt;cmd_args.volfile_server, NULL, &amp;hints,</div><div class='add'>+                         &amp;result)) != 0) {</div><div class='add'>+            ret = EVENT_ERROR_RESOLVE;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Socket Configurations */</div><div class='del'>-        server.sin_family = AF_INET;</div><div class='del'>-        server.sin_port = htons (EVENT_PORT);</div><div class='del'>-        server.sin_addr.s_addr = inet_addr (host);</div><div class='del'>-        memset (&amp;server.sin_zero, '\0', sizeof (server.sin_zero));</div><div class='del'>-</div><div class='del'>-        va_start (arguments, fmt);</div><div class='del'>-        ret = gf_vasprintf (&amp;msg, fmt, arguments);</div><div class='del'>-        va_end (arguments);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = EVENT_ERROR_INVALID_INPUTS;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;eventstr, "%u %d %s",</div><div class='del'>-                            (unsigned)time(NULL), event, msg);</div><div class='del'>-</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = EVENT_ERROR_MSG_FORMAT;</div><div class='del'>-                goto out;</div><div class='add'>+        if (get_ip_from_addrinfo(result, &amp;host) == NULL) {</div><div class='add'>+            ret = EVENT_ERROR_RESOLVE;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Send Message */</div><div class='del'>-        if (sendto (sock, eventstr, strlen (eventstr),</div><div class='del'>-                    0, (struct sockaddr *)&amp;server, sizeof (server)) &lt;= 0) {</div><div class='del'>-                ret = EVENT_ERROR_SEND;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = EVENT_SEND_OK;</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        if (sock &gt;= 0) {</div><div class='del'>-                sys_close (sock);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Allocated by gf_vasprintf */</div><div class='del'>-        if (msg)</div><div class='del'>-                GF_FREE (msg);</div><div class='del'>-</div><div class='del'>-        /* Allocated by gf_asprintf */</div><div class='del'>-        if (eventstr)</div><div class='del'>-                GF_FREE (eventstr);</div><div class='del'>-</div><div class='del'>-        if (host)</div><div class='del'>-                GF_FREE (host);</div><div class='del'>-</div><div class='del'>-        if (result)</div><div class='del'>-                freeaddrinfo (result);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    } else {</div><div class='add'>+        /* Localhost, Use the defined IP for localhost */</div><div class='add'>+        host = gf_strdup(EVENT_HOST);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Socket Configurations */</div><div class='add'>+    server.sin_family = AF_INET;</div><div class='add'>+    server.sin_port = htons(EVENT_PORT);</div><div class='add'>+    server.sin_addr.s_addr = inet_addr(host);</div><div class='add'>+    memset(&amp;server.sin_zero, '\0', sizeof(server.sin_zero));</div><div class='add'>+</div><div class='add'>+    va_start(arguments, fmt);</div><div class='add'>+    ret = gf_vasprintf(&amp;msg, fmt, arguments);</div><div class='add'>+    va_end(arguments);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = EVENT_ERROR_INVALID_INPUTS;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;eventstr, "%u %d %s", (unsigned)time(NULL), event, msg);</div><div class='add'>+</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = EVENT_ERROR_MSG_FORMAT;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Send Message */</div><div class='add'>+    if (sendto(sock, eventstr, strlen(eventstr), 0, (struct sockaddr *)&amp;server,</div><div class='add'>+               sizeof(server)) &lt;= 0) {</div><div class='add'>+        ret = EVENT_ERROR_SEND;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = EVENT_SEND_OK;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    if (sock &gt;= 0) {</div><div class='add'>+        sys_close(sock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Allocated by gf_vasprintf */</div><div class='add'>+    if (msg)</div><div class='add'>+        GF_FREE(msg);</div><div class='add'>+</div><div class='add'>+    /* Allocated by gf_asprintf */</div><div class='add'>+    if (eventstr)</div><div class='add'>+        GF_FREE(eventstr);</div><div class='add'>+</div><div class='add'>+    if (host)</div><div class='add'>+        GF_FREE(host);</div><div class='add'>+</div><div class='add'>+    if (result)</div><div class='add'>+        freeaddrinfo(result);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/fd-lk.c b/libglusterfs/src/fd-lk.c<br/>index e516f64bff6..a6680661be6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/fd-lk.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/fd-lk.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/fd-lk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/fd-lk.c</a></div><div class='hunk'>@@ -13,430 +13,421 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_fd_lk_delete_lock (fd_lk_ctx_node_t *lock)</div><div class='add'>+_fd_lk_delete_lock(fd_lk_ctx_node_t *lock)</div><div class='ctx'> {</div><div class='del'>-        int32_t    ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", lock, out);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;lock-&gt;next);</div><div class='add'>+    list_del_init(&amp;lock-&gt;next);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_fd_lk_destroy_lock (fd_lk_ctx_node_t *lock)</div><div class='add'>+_fd_lk_destroy_lock(fd_lk_ctx_node_t *lock)</div><div class='ctx'> {</div><div class='del'>-        int32_t    ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", lock, out);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (lock);</div><div class='add'>+    GF_FREE(lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_fd_lk_destroy_lock_list (fd_lk_ctx_t *lk_ctx)</div><div class='add'>+_fd_lk_destroy_lock_list(fd_lk_ctx_t *lk_ctx)</div><div class='ctx'> {</div><div class='del'>-        int               ret     = -1;</div><div class='del'>-        fd_lk_ctx_node_t *lk      = NULL;</div><div class='del'>-        fd_lk_ctx_node_t *tmp     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", lk_ctx, out);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lk, tmp, &amp;lk_ctx-&gt;lk_list, next) {</div><div class='del'>-                _fd_lk_delete_lock (lk);</div><div class='del'>-                _fd_lk_destroy_lock (lk);</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fd_lk_ctx_node_t *lk = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", lk_ctx, out);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lk, tmp, &amp;lk_ctx-&gt;lk_list, next)</div><div class='add'>+    {</div><div class='add'>+        _fd_lk_delete_lock(lk);</div><div class='add'>+        _fd_lk_destroy_lock(lk);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fd_lk_ctx_unref (fd_lk_ctx_t *lk_ctx)</div><div class='add'>+fd_lk_ctx_unref(fd_lk_ctx_t *lk_ctx)</div><div class='ctx'> {</div><div class='del'>-        int ref = -1;</div><div class='add'>+    int ref = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", lk_ctx, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", lk_ctx, err);</div><div class='ctx'> </div><div class='del'>-        ref = GF_ATOMIC_DEC (lk_ctx-&gt;ref);</div><div class='del'>-        if (ref &lt; 0)</div><div class='del'>-                GF_ASSERT (!ref);</div><div class='del'>-        if (ref == 0)</div><div class='del'>-                _fd_lk_destroy_lock_list (lk_ctx);</div><div class='add'>+    ref = GF_ATOMIC_DEC(lk_ctx-&gt;ref);</div><div class='add'>+    if (ref &lt; 0)</div><div class='add'>+        GF_ASSERT(!ref);</div><div class='add'>+    if (ref == 0)</div><div class='add'>+        _fd_lk_destroy_lock_list(lk_ctx);</div><div class='ctx'> </div><div class='del'>-        if (ref == 0) {</div><div class='del'>-                LOCK_DESTROY (&amp;lk_ctx-&gt;lock);</div><div class='del'>-                GF_FREE (lk_ctx);</div><div class='del'>-        }</div><div class='add'>+    if (ref == 0) {</div><div class='add'>+        LOCK_DESTROY(&amp;lk_ctx-&gt;lock);</div><div class='add'>+        GF_FREE(lk_ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_lk_ctx_t *</div><div class='del'>-fd_lk_ctx_ref (fd_lk_ctx_t *lk_ctx)</div><div class='add'>+fd_lk_ctx_ref(fd_lk_ctx_t *lk_ctx)</div><div class='ctx'> {</div><div class='del'>-        if (!lk_ctx) {</div><div class='del'>-                gf_msg_callingfn ("fd-lk", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!lk_ctx) {</div><div class='add'>+        gf_msg_callingfn("fd-lk", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (lk_ctx-&gt;ref);</div><div class='add'>+    GF_ATOMIC_INC(lk_ctx-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        return lk_ctx;</div><div class='add'>+    return lk_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_lk_ctx_t *</div><div class='del'>-fd_lk_ctx_create ()</div><div class='add'>+fd_lk_ctx_create()</div><div class='ctx'> {</div><div class='del'>-        fd_lk_ctx_t *fd_lk_ctx = NULL;</div><div class='add'>+    fd_lk_ctx_t *fd_lk_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        fd_lk_ctx = GF_CALLOC (1, sizeof (fd_lk_ctx_t),</div><div class='del'>-                               gf_common_mt_fd_lk_ctx_t);</div><div class='del'>-        if (!fd_lk_ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    fd_lk_ctx = GF_CALLOC(1, sizeof(fd_lk_ctx_t), gf_common_mt_fd_lk_ctx_t);</div><div class='add'>+    if (!fd_lk_ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;fd_lk_ctx-&gt;lk_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fd_lk_ctx-&gt;lk_list);</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;fd_lk_ctx-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;fd_lk_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        fd_lk_ctx = fd_lk_ctx_ref (fd_lk_ctx);</div><div class='add'>+    fd_lk_ctx = fd_lk_ctx_ref(fd_lk_ctx);</div><div class='ctx'> out:</div><div class='del'>-        return fd_lk_ctx;</div><div class='add'>+    return fd_lk_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_fd_lk_insert_lock (fd_lk_ctx_t *lk_ctx,</div><div class='del'>-                    fd_lk_ctx_node_t *lock)</div><div class='add'>+_fd_lk_insert_lock(fd_lk_ctx_t *lk_ctx, fd_lk_ctx_node_t *lock)</div><div class='ctx'> {</div><div class='del'>-        list_add_tail (&amp;lock-&gt;next, &amp;lk_ctx-&gt;lk_list);</div><div class='del'>-        return 0;</div><div class='add'>+    list_add_tail(&amp;lock-&gt;next, &amp;lk_ctx-&gt;lk_list);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static off_t</div><div class='del'>-_fd_lk_get_lock_len (off_t start, off_t end)</div><div class='add'>+_fd_lk_get_lock_len(off_t start, off_t end)</div><div class='ctx'> {</div><div class='del'>-        if (end == LLONG_MAX)</div><div class='del'>-                return 0;</div><div class='del'>-        else</div><div class='del'>-                return (end - start + 1);</div><div class='add'>+    if (end == LLONG_MAX)</div><div class='add'>+        return 0;</div><div class='add'>+    else</div><div class='add'>+        return (end - start + 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_lk_ctx_node_t *</div><div class='del'>-fd_lk_ctx_node_new (int32_t cmd, struct gf_flock *flock)</div><div class='add'>+fd_lk_ctx_node_new(int32_t cmd, struct gf_flock *flock)</div><div class='ctx'> {</div><div class='del'>-        fd_lk_ctx_node_t  *new_lock  = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *new_lock = NULL;</div><div class='ctx'> </div><div class='del'>-        /* TODO: get from mem-pool */</div><div class='del'>-        new_lock = GF_CALLOC (1, sizeof (fd_lk_ctx_node_t),</div><div class='del'>-                              gf_common_mt_fd_lk_ctx_node_t);</div><div class='del'>-        if (!new_lock)</div><div class='del'>-                goto out;</div><div class='add'>+    /* TODO: get from mem-pool */</div><div class='add'>+    new_lock = GF_CALLOC(1, sizeof(fd_lk_ctx_node_t),</div><div class='add'>+                         gf_common_mt_fd_lk_ctx_node_t);</div><div class='add'>+    if (!new_lock)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        new_lock-&gt;cmd = cmd;</div><div class='add'>+    new_lock-&gt;cmd = cmd;</div><div class='ctx'> </div><div class='del'>-        if (flock) {</div><div class='del'>-                new_lock-&gt;fl_type  = flock-&gt;l_type;</div><div class='del'>-                new_lock-&gt;fl_start = flock-&gt;l_start;</div><div class='add'>+    if (flock) {</div><div class='add'>+        new_lock-&gt;fl_type = flock-&gt;l_type;</div><div class='add'>+        new_lock-&gt;fl_start = flock-&gt;l_start;</div><div class='ctx'> </div><div class='del'>-                if (flock-&gt;l_len == 0)</div><div class='del'>-                        new_lock-&gt;fl_end = LLONG_MAX;</div><div class='del'>-                else</div><div class='del'>-                        new_lock-&gt;fl_end = flock-&gt;l_start + flock-&gt;l_len - 1;</div><div class='add'>+        if (flock-&gt;l_len == 0)</div><div class='add'>+            new_lock-&gt;fl_end = LLONG_MAX;</div><div class='add'>+        else</div><div class='add'>+            new_lock-&gt;fl_end = flock-&gt;l_start + flock-&gt;l_len - 1;</div><div class='ctx'> </div><div class='del'>-                memcpy (&amp;new_lock-&gt;user_flock, flock,</div><div class='del'>-                        sizeof (struct gf_flock));</div><div class='del'>-        }</div><div class='add'>+        memcpy(&amp;new_lock-&gt;user_flock, flock, sizeof(struct gf_flock));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;new_lock-&gt;next);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new_lock-&gt;next);</div><div class='ctx'> out:</div><div class='del'>-        return new_lock;</div><div class='add'>+    return new_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_fd_lk_delete_unlck_locks (fd_lk_ctx_t *lk_ctx)</div><div class='add'>+_fd_lk_delete_unlck_locks(fd_lk_ctx_t *lk_ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret   = -1;</div><div class='del'>-        fd_lk_ctx_node_t  *tmp   = NULL;</div><div class='del'>-        fd_lk_ctx_node_t  *lk    = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_lk_ctx_node_t *tmp = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *lk = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", lk_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", lk_ctx, out);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (lk, tmp, &amp;lk_ctx-&gt;lk_list, next) {</div><div class='del'>-                if (lk-&gt;fl_type == F_UNLCK) {</div><div class='del'>-                        _fd_lk_delete_lock (lk);</div><div class='del'>-                        _fd_lk_destroy_lock (lk);</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry_safe(lk, tmp, &amp;lk_ctx-&gt;lk_list, next)</div><div class='add'>+    {</div><div class='add'>+        if (lk-&gt;fl_type == F_UNLCK) {</div><div class='add'>+            _fd_lk_delete_lock(lk);</div><div class='add'>+            _fd_lk_destroy_lock(lk);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fd_lk_overlap (fd_lk_ctx_node_t *l1,</div><div class='del'>-               fd_lk_ctx_node_t *l2)</div><div class='add'>+fd_lk_overlap(fd_lk_ctx_node_t *l1, fd_lk_ctx_node_t *l2)</div><div class='ctx'> {</div><div class='del'>-        if (l1-&gt;fl_end &gt;= l2-&gt;fl_start &amp;&amp;</div><div class='del'>-            l2-&gt;fl_end &gt;= l1-&gt;fl_start)</div><div class='del'>-                return 1;</div><div class='add'>+    if (l1-&gt;fl_end &gt;= l2-&gt;fl_start &amp;&amp; l2-&gt;fl_end &gt;= l1-&gt;fl_start)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_lk_ctx_node_t *</div><div class='del'>-_fd_lk_add_locks (fd_lk_ctx_node_t *l1,</div><div class='del'>-                  fd_lk_ctx_node_t *l2)</div><div class='add'>+_fd_lk_add_locks(fd_lk_ctx_node_t *l1, fd_lk_ctx_node_t *l2)</div><div class='ctx'> {</div><div class='del'>-        fd_lk_ctx_node_t  *sum = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *sum = NULL;</div><div class='ctx'> </div><div class='del'>-        sum = fd_lk_ctx_node_new (0, NULL);</div><div class='del'>-        if (!sum)</div><div class='del'>-                goto out;</div><div class='add'>+    sum = fd_lk_ctx_node_new(0, NULL);</div><div class='add'>+    if (!sum)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        sum-&gt;fl_start = min (l1-&gt;fl_start, l2-&gt;fl_start);</div><div class='del'>-        sum-&gt;fl_end   = max (l1-&gt;fl_end, l2-&gt;fl_end);</div><div class='add'>+    sum-&gt;fl_start = min(l1-&gt;fl_start, l2-&gt;fl_start);</div><div class='add'>+    sum-&gt;fl_end = max(l1-&gt;fl_end, l2-&gt;fl_end);</div><div class='ctx'> </div><div class='del'>-        sum-&gt;user_flock.l_start = sum-&gt;fl_start;</div><div class='del'>-        sum-&gt;user_flock.l_len   = _fd_lk_get_lock_len (sum-&gt;fl_start,</div><div class='del'>-                                                       sum-&gt;fl_end);</div><div class='add'>+    sum-&gt;user_flock.l_start = sum-&gt;fl_start;</div><div class='add'>+    sum-&gt;user_flock.l_len = _fd_lk_get_lock_len(sum-&gt;fl_start, sum-&gt;fl_end);</div><div class='ctx'> out:</div><div class='del'>-        return sum;</div><div class='add'>+    return sum;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Subtract two locks */</div><div class='ctx'> struct _values {</div><div class='del'>-        fd_lk_ctx_node_t *locks[3];</div><div class='add'>+    fd_lk_ctx_node_t *locks[3];</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_fd_lk_sub_locks (struct _values *v,</div><div class='del'>-                  fd_lk_ctx_node_t *big,</div><div class='del'>-                  fd_lk_ctx_node_t *small)</div><div class='add'>+_fd_lk_sub_locks(struct _values *v, fd_lk_ctx_node_t *big,</div><div class='add'>+                 fd_lk_ctx_node_t *small)</div><div class='ctx'> {</div><div class='del'>-        int32_t  ret  = -1;</div><div class='del'>-</div><div class='del'>-        if ((big-&gt;fl_start == small-&gt;fl_start) &amp;&amp;</div><div class='del'>-            (big-&gt;fl_end   == small-&gt;fl_end)) {</div><div class='del'>-                /* both edges coincide with big */</div><div class='del'>-                v-&gt;locks[0] = fd_lk_ctx_node_new (small-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[0])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[0], big, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-</div><div class='del'>-                v-&gt;locks[0]-&gt;fl_type            = small-&gt;fl_type;</div><div class='del'>-                v-&gt;locks[0]-&gt;user_flock.l_type = small-&gt;fl_type;</div><div class='del'>-        } else if ((small-&gt;fl_start &gt; big-&gt;fl_start) &amp;&amp;</div><div class='del'>-                   (small-&gt;fl_end   &lt; big-&gt;fl_end)) {</div><div class='del'>-                /* small lock is completely inside big lock,</div><div class='del'>-                   break it down into 3 different locks. */</div><div class='del'>-                v-&gt;locks[0] = fd_lk_ctx_node_new (big-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[0])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                v-&gt;locks[1] = fd_lk_ctx_node_new (small-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[1])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                v-&gt;locks[2] = fd_lk_ctx_node_new (big-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[2])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[0], big, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-                v-&gt;locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='del'>-                v-&gt;locks[0]-&gt;user_flock.l_len =</div><div class='del'>-                        _fd_lk_get_lock_len (v-&gt;locks[0]-&gt;fl_start,</div><div class='del'>-                                             v-&gt;locks[0]-&gt;fl_end);</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[1], small, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[2], big, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-                v-&gt;locks[2]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='del'>-                v-&gt;locks[2]-&gt;user_flock.l_len =</div><div class='del'>-                        _fd_lk_get_lock_len (v-&gt;locks[2]-&gt;fl_start,</div><div class='del'>-                                             v-&gt;locks[2]-&gt;fl_end);</div><div class='del'>-        } else if (small-&gt;fl_start == big-&gt;fl_start) {</div><div class='del'>-                /* One of the ends co-incide, break the</div><div class='del'>-                   locks into two separate parts */</div><div class='del'>-                v-&gt;locks[0] = fd_lk_ctx_node_new (small-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[0])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                v-&gt;locks[1] = fd_lk_ctx_node_new (big-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[1])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[0], small, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[1], big, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-                v-&gt;locks[1]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='del'>-                v-&gt;locks[1]-&gt;user_flock.l_start = small-&gt;fl_end + 1;</div><div class='del'>-        } else if (small-&gt;fl_end == big-&gt;fl_end) {</div><div class='del'>-                /* One of the ends co-incide, break the</div><div class='del'>-                   locks into two separate parts */</div><div class='del'>-                v-&gt;locks[0] = fd_lk_ctx_node_new (small-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[0])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                v-&gt;locks[1] = fd_lk_ctx_node_new (big-&gt;cmd, NULL);</div><div class='del'>-                if (!v-&gt;locks[1])</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[0], big, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-                v-&gt;locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='del'>-                v-&gt;locks[0]-&gt;user_flock.l_len =</div><div class='del'>-                        _fd_lk_get_lock_len (v-&gt;locks[0]-&gt;fl_start,</div><div class='del'>-                                             v-&gt;locks[0]-&gt;fl_end);</div><div class='del'>-</div><div class='del'>-                memcpy (v-&gt;locks[1], small, sizeof (fd_lk_ctx_node_t));</div><div class='del'>-        } else {</div><div class='del'>-                /* We should never come to this case */</div><div class='del'>-                GF_ASSERT (!"Invalid case");</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((big-&gt;fl_start == small-&gt;fl_start) &amp;&amp; (big-&gt;fl_end == small-&gt;fl_end)) {</div><div class='add'>+        /* both edges coincide with big */</div><div class='add'>+        v-&gt;locks[0] = fd_lk_ctx_node_new(small-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[0])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[0], big, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+</div><div class='add'>+        v-&gt;locks[0]-&gt;fl_type = small-&gt;fl_type;</div><div class='add'>+        v-&gt;locks[0]-&gt;user_flock.l_type = small-&gt;fl_type;</div><div class='add'>+    } else if ((small-&gt;fl_start &gt; big-&gt;fl_start) &amp;&amp;</div><div class='add'>+               (small-&gt;fl_end &lt; big-&gt;fl_end)) {</div><div class='add'>+        /* small lock is completely inside big lock,</div><div class='add'>+           break it down into 3 different locks. */</div><div class='add'>+        v-&gt;locks[0] = fd_lk_ctx_node_new(big-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[0])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        v-&gt;locks[1] = fd_lk_ctx_node_new(small-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[1])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        v-&gt;locks[2] = fd_lk_ctx_node_new(big-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[2])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[0], big, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+        v-&gt;locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='add'>+        v-&gt;locks[0]-&gt;user_flock.l_len = _fd_lk_get_lock_len(</div><div class='add'>+            v-&gt;locks[0]-&gt;fl_start, v-&gt;locks[0]-&gt;fl_end);</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[1], small, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[2], big, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+        v-&gt;locks[2]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='add'>+        v-&gt;locks[2]-&gt;user_flock.l_len = _fd_lk_get_lock_len(</div><div class='add'>+            v-&gt;locks[2]-&gt;fl_start, v-&gt;locks[2]-&gt;fl_end);</div><div class='add'>+    } else if (small-&gt;fl_start == big-&gt;fl_start) {</div><div class='add'>+        /* One of the ends co-incide, break the</div><div class='add'>+           locks into two separate parts */</div><div class='add'>+        v-&gt;locks[0] = fd_lk_ctx_node_new(small-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[0])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        v-&gt;locks[1] = fd_lk_ctx_node_new(big-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[1])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[0], small, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[1], big, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+        v-&gt;locks[1]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='add'>+        v-&gt;locks[1]-&gt;user_flock.l_start = small-&gt;fl_end + 1;</div><div class='add'>+    } else if (small-&gt;fl_end == big-&gt;fl_end) {</div><div class='add'>+        /* One of the ends co-incide, break the</div><div class='add'>+           locks into two separate parts */</div><div class='add'>+        v-&gt;locks[0] = fd_lk_ctx_node_new(small-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[0])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        v-&gt;locks[1] = fd_lk_ctx_node_new(big-&gt;cmd, NULL);</div><div class='add'>+        if (!v-&gt;locks[1])</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[0], big, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+        v-&gt;locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='add'>+        v-&gt;locks[0]-&gt;user_flock.l_len = _fd_lk_get_lock_len(</div><div class='add'>+            v-&gt;locks[0]-&gt;fl_start, v-&gt;locks[0]-&gt;fl_end);</div><div class='add'>+</div><div class='add'>+        memcpy(v-&gt;locks[1], small, sizeof(fd_lk_ctx_node_t));</div><div class='add'>+    } else {</div><div class='add'>+        /* We should never come to this case */</div><div class='add'>+        GF_ASSERT(!"Invalid case");</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_fd_lk_insert_and_merge (fd_lk_ctx_t *lk_ctx,</div><div class='del'>-                         fd_lk_ctx_node_t *lock)</div><div class='add'>+_fd_lk_insert_and_merge(fd_lk_ctx_t *lk_ctx, fd_lk_ctx_node_t *lock)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret     = -1;</div><div class='del'>-        int32_t               i       = 0;</div><div class='del'>-        fd_lk_ctx_node_t     *entry   = NULL;</div><div class='del'>-        fd_lk_ctx_node_t     *t       = NULL;</div><div class='del'>-        fd_lk_ctx_node_t     *sum     = NULL;</div><div class='del'>-        struct _values        v       = {.locks = {0, 0, 0 }};</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (entry, t, &amp;lk_ctx-&gt;lk_list, next) {</div><div class='del'>-                if (!fd_lk_overlap (entry, lock))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (entry-&gt;fl_type == lock-&gt;fl_type) {</div><div class='del'>-                        sum = _fd_lk_add_locks (entry, lock);</div><div class='del'>-                        if (!sum)</div><div class='del'>-                                return;</div><div class='del'>-                        sum-&gt;fl_type = entry-&gt;fl_type;</div><div class='del'>-                        sum-&gt;user_flock.l_type = entry-&gt;fl_type;</div><div class='del'>-                        _fd_lk_delete_lock (entry);</div><div class='del'>-                        _fd_lk_destroy_lock (entry);</div><div class='del'>-                        _fd_lk_destroy_lock (lock);</div><div class='del'>-                        _fd_lk_insert_and_merge (lk_ctx, sum);</div><div class='del'>-                        return;</div><div class='del'>-                } else {</div><div class='del'>-                        sum = _fd_lk_add_locks (entry, lock);</div><div class='del'>-                        sum-&gt;fl_type = lock-&gt;fl_type;</div><div class='del'>-                        sum-&gt;user_flock.l_type = lock-&gt;fl_type;</div><div class='del'>-                        ret = _fd_lk_sub_locks (&amp;v, sum, lock);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                return;</div><div class='del'>-                        _fd_lk_delete_lock (entry);</div><div class='del'>-                        _fd_lk_destroy_lock (entry);</div><div class='del'>-</div><div class='del'>-                        _fd_lk_delete_lock (lock);</div><div class='del'>-                        _fd_lk_destroy_lock (lock);</div><div class='del'>-</div><div class='del'>-                        _fd_lk_destroy_lock (sum);</div><div class='del'>-</div><div class='del'>-                        for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                                if (!v.locks[i])</div><div class='del'>-                                        continue;</div><div class='del'>-</div><div class='del'>-                                INIT_LIST_HEAD (&amp;v.locks[i]-&gt;next);</div><div class='del'>-                                _fd_lk_insert_and_merge (lk_ctx, v.locks[i]);</div><div class='del'>-                        }</div><div class='del'>-                        _fd_lk_delete_unlck_locks (lk_ctx);</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* no conflicts, so just insert */</div><div class='del'>-        if (lock-&gt;fl_type != F_UNLCK) {</div><div class='del'>-                _fd_lk_insert_lock (lk_ctx, lock);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    fd_lk_ctx_node_t *entry = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *t = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *sum = NULL;</div><div class='add'>+    struct _values v = {.locks = {0, 0, 0}};</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(entry, t, &amp;lk_ctx-&gt;lk_list, next)</div><div class='add'>+    {</div><div class='add'>+        if (!fd_lk_overlap(entry, lock))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (entry-&gt;fl_type == lock-&gt;fl_type) {</div><div class='add'>+            sum = _fd_lk_add_locks(entry, lock);</div><div class='add'>+            if (!sum)</div><div class='add'>+                return;</div><div class='add'>+            sum-&gt;fl_type = entry-&gt;fl_type;</div><div class='add'>+            sum-&gt;user_flock.l_type = entry-&gt;fl_type;</div><div class='add'>+            _fd_lk_delete_lock(entry);</div><div class='add'>+            _fd_lk_destroy_lock(entry);</div><div class='add'>+            _fd_lk_destroy_lock(lock);</div><div class='add'>+            _fd_lk_insert_and_merge(lk_ctx, sum);</div><div class='add'>+            return;</div><div class='ctx'>         } else {</div><div class='del'>-                _fd_lk_destroy_lock (lock);</div><div class='add'>+            sum = _fd_lk_add_locks(entry, lock);</div><div class='add'>+            sum-&gt;fl_type = lock-&gt;fl_type;</div><div class='add'>+            sum-&gt;user_flock.l_type = lock-&gt;fl_type;</div><div class='add'>+            ret = _fd_lk_sub_locks(&amp;v, sum, lock);</div><div class='add'>+            if (ret)</div><div class='add'>+                return;</div><div class='add'>+            _fd_lk_delete_lock(entry);</div><div class='add'>+            _fd_lk_destroy_lock(entry);</div><div class='add'>+</div><div class='add'>+            _fd_lk_delete_lock(lock);</div><div class='add'>+            _fd_lk_destroy_lock(lock);</div><div class='add'>+</div><div class='add'>+            _fd_lk_destroy_lock(sum);</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; 3; i++) {</div><div class='add'>+                if (!v.locks[i])</div><div class='add'>+                    continue;</div><div class='add'>+</div><div class='add'>+                INIT_LIST_HEAD(&amp;v.locks[i]-&gt;next);</div><div class='add'>+                _fd_lk_insert_and_merge(lk_ctx, v.locks[i]);</div><div class='add'>+            }</div><div class='add'>+            _fd_lk_delete_unlck_locks(lk_ctx);</div><div class='add'>+            return;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* no conflicts, so just insert */</div><div class='add'>+    if (lock-&gt;fl_type != F_UNLCK) {</div><div class='add'>+        _fd_lk_insert_lock(lk_ctx, lock);</div><div class='add'>+    } else {</div><div class='add'>+        _fd_lk_destroy_lock(lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-print_lock_list (fd_lk_ctx_t *lk_ctx)</div><div class='add'>+print_lock_list(fd_lk_ctx_t *lk_ctx)</div><div class='ctx'> {</div><div class='del'>-        fd_lk_ctx_node_t    *lk     = NULL;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("fd-lk", 0, "lock list:");</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (lk, &amp;lk_ctx-&gt;lk_list, next)</div><div class='del'>-                gf_msg_debug ("fd-lk", 0, "owner = %s, cmd = %s fl_type = %s,"</div><div class='del'>-                              " fs_start = %"PRId64", fs_end = %"PRId64", "</div><div class='del'>-                              "user_flock: l_type = %s, l_start = %"PRId64", "</div><div class='del'>-                              "l_len = %"PRId64", ",</div><div class='del'>-                              lkowner_utoa (&amp;lk-&gt;user_flock.l_owner),</div><div class='del'>-                              get_lk_cmd (lk-&gt;cmd), get_lk_type (lk-&gt;fl_type),</div><div class='del'>-                              lk-&gt;fl_start, lk-&gt;fl_end,</div><div class='del'>-                              get_lk_type (lk-&gt;user_flock.l_type),</div><div class='del'>-                              lk-&gt;user_flock.l_start, lk-&gt;user_flock.l_len);</div><div class='add'>+    fd_lk_ctx_node_t *lk = NULL;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("fd-lk", 0, "lock list:");</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(lk, &amp;lk_ctx-&gt;lk_list, next)</div><div class='add'>+        gf_msg_debug("fd-lk", 0,</div><div class='add'>+                     "owner = %s, cmd = %s fl_type = %s,"</div><div class='add'>+                     " fs_start = %" PRId64 ", fs_end = %" PRId64</div><div class='add'>+                     ", "</div><div class='add'>+                     "user_flock: l_type = %s, l_start = %" PRId64</div><div class='add'>+                     ", "</div><div class='add'>+                     "l_len = %" PRId64 ", ",</div><div class='add'>+                     lkowner_utoa(&amp;lk-&gt;user_flock.l_owner), get_lk_cmd(lk-&gt;cmd),</div><div class='add'>+                     get_lk_type(lk-&gt;fl_type), lk-&gt;fl_start, lk-&gt;fl_end,</div><div class='add'>+                     get_lk_type(lk-&gt;user_flock.l_type), lk-&gt;user_flock.l_start,</div><div class='add'>+                     lk-&gt;user_flock.l_len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fd_lk_insert_and_merge (fd_t *fd, int32_t cmd,</div><div class='del'>-                        struct gf_flock *flock)</div><div class='add'>+fd_lk_insert_and_merge(fd_t *fd, int32_t cmd, struct gf_flock *flock)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret      = -1;</div><div class='del'>-        fd_lk_ctx_t         *lk_ctx   = NULL;</div><div class='del'>-        fd_lk_ctx_node_t    *lk     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fd-lk", flock, out);</div><div class='del'>-</div><div class='del'>-        lk_ctx = fd_lk_ctx_ref (fd-&gt;lk_ctx);</div><div class='del'>-        lk     = fd_lk_ctx_node_new (cmd, flock);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("fd-lk", 0, "new lock request: owner = %s, fl_type = %s"</div><div class='del'>-                      ", fs_start = %"PRId64", fs_end = %"PRId64", user_flock:"</div><div class='del'>-                      " l_type = %s, l_start = %"PRId64", l_len = %"PRId64,</div><div class='del'>-                      lkowner_utoa (&amp;flock-&gt;l_owner),</div><div class='del'>-                      get_lk_type (lk-&gt;fl_type), lk-&gt;fl_start, lk-&gt;fl_end,</div><div class='del'>-                      get_lk_type (lk-&gt;user_flock.l_type),</div><div class='del'>-                      lk-&gt;user_flock.l_start, lk-&gt;user_flock.l_len);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;lk_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                _fd_lk_insert_and_merge (lk_ctx, lk);</div><div class='del'>-                print_lock_list (lk_ctx);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;lk_ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        fd_lk_ctx_unref (lk_ctx);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_lk_ctx_t *lk_ctx = NULL;</div><div class='add'>+    fd_lk_ctx_node_t *lk = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fd-lk", flock, out);</div><div class='add'>+</div><div class='add'>+    lk_ctx = fd_lk_ctx_ref(fd-&gt;lk_ctx);</div><div class='add'>+    lk = fd_lk_ctx_node_new(cmd, flock);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("fd-lk", 0,</div><div class='add'>+                 "new lock request: owner = %s, fl_type = %s"</div><div class='add'>+                 ", fs_start = %" PRId64 ", fs_end = %" PRId64</div><div class='add'>+                 ", user_flock:"</div><div class='add'>+                 " l_type = %s, l_start = %" PRId64 ", l_len = %" PRId64,</div><div class='add'>+                 lkowner_utoa(&amp;flock-&gt;l_owner), get_lk_type(lk-&gt;fl_type),</div><div class='add'>+                 lk-&gt;fl_start, lk-&gt;fl_end, get_lk_type(lk-&gt;user_flock.l_type),</div><div class='add'>+                 lk-&gt;user_flock.l_start, lk-&gt;user_flock.l_len);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;lk_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        _fd_lk_insert_and_merge(lk_ctx, lk);</div><div class='add'>+        print_lock_list(lk_ctx);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;lk_ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    fd_lk_ctx_unref(lk_ctx);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-fd_lk_ctx_empty (fd_lk_ctx_t *lk_ctx)</div><div class='add'>+fd_lk_ctx_empty(fd_lk_ctx_t *lk_ctx)</div><div class='ctx'> {</div><div class='del'>-	gf_boolean_t verdict = _gf_true;</div><div class='add'>+    gf_boolean_t verdict = _gf_true;</div><div class='ctx'> </div><div class='del'>-	if (!lk_ctx)</div><div class='del'>-		return _gf_true;</div><div class='add'>+    if (!lk_ctx)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-	LOCK (&amp;lk_ctx-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		verdict = list_empty (&amp;lk_ctx-&gt;lk_list);</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;lk_ctx-&gt;lock);</div><div class='add'>+    LOCK(&amp;lk_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        verdict = list_empty(&amp;lk_ctx-&gt;lk_list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;lk_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-	return verdict;</div><div class='add'>+    return verdict;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c<br/>index ee14dc8fe43..d26b7097fd4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/fd.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/fd.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/fd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/fd.c</a></div><div class='hunk'>@@ -14,1218 +14,1173 @@</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_fd_fdtable_expand (fdtable_t *fdtable, uint32_t nr);</div><div class='del'>-</div><div class='add'>+gf_fd_fdtable_expand(fdtable_t *fdtable, uint32_t nr);</div><div class='ctx'> </div><div class='ctx'> fd_t *</div><div class='del'>-__fd_ref (fd_t *fd);</div><div class='add'>+__fd_ref(fd_t *fd);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_fd_chain_fd_entries (fdentry_t *entries, uint32_t startidx,</div><div class='del'>-                        uint32_t endcount)</div><div class='add'>+gf_fd_chain_fd_entries(fdentry_t *entries, uint32_t startidx, uint32_t endcount)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        i = 0;</div><div class='add'>+    uint32_t i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!entries) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!entries");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!entries) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!entries");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Chain only till the second to last entry because we want to</div><div class='del'>-         * ensure that the last entry has GF_FDTABLE_END.</div><div class='del'>-         */</div><div class='del'>-        for (i = startidx; i &lt; (endcount - 1); i++)</div><div class='del'>-                entries[i].next_free = i + 1;</div><div class='add'>+    /* Chain only till the second to last entry because we want to</div><div class='add'>+     * ensure that the last entry has GF_FDTABLE_END.</div><div class='add'>+     */</div><div class='add'>+    for (i = startidx; i &lt; (endcount - 1); i++)</div><div class='add'>+        entries[i].next_free = i + 1;</div><div class='ctx'> </div><div class='del'>-        /* i has already been incremented up to the last entry. */</div><div class='del'>-        entries[i].next_free = GF_FDTABLE_END;</div><div class='add'>+    /* i has already been incremented up to the last entry. */</div><div class='add'>+    entries[i].next_free = GF_FDTABLE_END;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_fd_fdtable_expand (fdtable_t *fdtable, uint32_t nr)</div><div class='add'>+gf_fd_fdtable_expand(fdtable_t *fdtable, uint32_t nr)</div><div class='ctx'> {</div><div class='del'>-        fdentry_t   *oldfds = NULL;</div><div class='del'>-        uint32_t     oldmax_fds = -1;</div><div class='del'>-        int          ret = -1;</div><div class='del'>-</div><div class='del'>-        if (fdtable == NULL || nr &gt; UINT32_MAX) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                ret = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        nr /= (1024 / sizeof (fdentry_t));</div><div class='del'>-        nr = gf_roundup_next_power_of_two (nr + 1);</div><div class='del'>-        nr *= (1024 / sizeof (fdentry_t));</div><div class='del'>-</div><div class='del'>-        oldfds = fdtable-&gt;fdentries;</div><div class='del'>-        oldmax_fds = fdtable-&gt;max_fds;</div><div class='del'>-</div><div class='del'>-        fdtable-&gt;fdentries = GF_CALLOC (nr, sizeof (fdentry_t),</div><div class='del'>-                                        gf_common_mt_fdentry_t);</div><div class='del'>-        if (!fdtable-&gt;fdentries) {</div><div class='del'>-                ret = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        fdtable-&gt;max_fds = nr;</div><div class='del'>-</div><div class='del'>-        if (oldfds) {</div><div class='del'>-                uint32_t cpy = oldmax_fds * sizeof (fdentry_t);</div><div class='del'>-                memcpy (fdtable-&gt;fdentries, oldfds, cpy);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_fd_chain_fd_entries (fdtable-&gt;fdentries, oldmax_fds,</div><div class='del'>-                                fdtable-&gt;max_fds);</div><div class='del'>-</div><div class='del'>-        /* Now that expansion is done, we must update the fd list</div><div class='del'>-         * head pointer so that the fd allocation functions can continue</div><div class='del'>-         * using the expanded table.</div><div class='del'>-         */</div><div class='del'>-        fdtable-&gt;first_free = oldmax_fds;</div><div class='del'>-        GF_FREE (oldfds);</div><div class='del'>-        ret = 0;</div><div class='add'>+    fdentry_t *oldfds = NULL;</div><div class='add'>+    uint32_t oldmax_fds = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (fdtable == NULL || nr &gt; UINT32_MAX) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    nr /= (1024 / sizeof(fdentry_t));</div><div class='add'>+    nr = gf_roundup_next_power_of_two(nr + 1);</div><div class='add'>+    nr *= (1024 / sizeof(fdentry_t));</div><div class='add'>+</div><div class='add'>+    oldfds = fdtable-&gt;fdentries;</div><div class='add'>+    oldmax_fds = fdtable-&gt;max_fds;</div><div class='add'>+</div><div class='add'>+    fdtable-&gt;fdentries = GF_CALLOC(nr, sizeof(fdentry_t),</div><div class='add'>+                                   gf_common_mt_fdentry_t);</div><div class='add'>+    if (!fdtable-&gt;fdentries) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    fdtable-&gt;max_fds = nr;</div><div class='add'>+</div><div class='add'>+    if (oldfds) {</div><div class='add'>+        uint32_t cpy = oldmax_fds * sizeof(fdentry_t);</div><div class='add'>+        memcpy(fdtable-&gt;fdentries, oldfds, cpy);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_fd_chain_fd_entries(fdtable-&gt;fdentries, oldmax_fds, fdtable-&gt;max_fds);</div><div class='add'>+</div><div class='add'>+    /* Now that expansion is done, we must update the fd list</div><div class='add'>+     * head pointer so that the fd allocation functions can continue</div><div class='add'>+     * using the expanded table.</div><div class='add'>+     */</div><div class='add'>+    fdtable-&gt;first_free = oldmax_fds;</div><div class='add'>+    GF_FREE(oldfds);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fdtable_t *</div><div class='del'>-gf_fd_fdtable_alloc (void)</div><div class='add'>+gf_fd_fdtable_alloc(void)</div><div class='ctx'> {</div><div class='del'>-        fdtable_t *fdtable = NULL;</div><div class='add'>+    fdtable_t *fdtable = NULL;</div><div class='ctx'> </div><div class='del'>-        fdtable = GF_CALLOC (1, sizeof (*fdtable), gf_common_mt_fdtable_t);</div><div class='del'>-        if (!fdtable)</div><div class='del'>-                return NULL;</div><div class='add'>+    fdtable = GF_CALLOC(1, sizeof(*fdtable), gf_common_mt_fdtable_t);</div><div class='add'>+    if (!fdtable)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_init (&amp;fdtable-&gt;lock, NULL);</div><div class='add'>+    pthread_rwlock_init(&amp;fdtable-&gt;lock, NULL);</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                gf_fd_fdtable_expand (fdtable, 0);</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        gf_fd_fdtable_expand(fdtable, 0);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fdtable;</div><div class='add'>+    return fdtable;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static fdentry_t *</div><div class='del'>-__gf_fd_fdtable_get_all_fds (fdtable_t *fdtable, uint32_t *count)</div><div class='add'>+__gf_fd_fdtable_get_all_fds(fdtable_t *fdtable, uint32_t *count)</div><div class='ctx'> {</div><div class='del'>-        fdentry_t       *fdentries = NULL;</div><div class='add'>+    fdentry_t *fdentries = NULL;</div><div class='ctx'> </div><div class='del'>-        if (count == NULL) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (count == NULL) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fdentries = fdtable-&gt;fdentries;</div><div class='del'>-        fdtable-&gt;fdentries = GF_CALLOC (fdtable-&gt;max_fds, sizeof (fdentry_t),</div><div class='del'>-                                        gf_common_mt_fdentry_t);</div><div class='del'>-        gf_fd_chain_fd_entries (fdtable-&gt;fdentries, 0, fdtable-&gt;max_fds);</div><div class='del'>-        *count = fdtable-&gt;max_fds;</div><div class='add'>+    fdentries = fdtable-&gt;fdentries;</div><div class='add'>+    fdtable-&gt;fdentries = GF_CALLOC(fdtable-&gt;max_fds, sizeof(fdentry_t),</div><div class='add'>+                                   gf_common_mt_fdentry_t);</div><div class='add'>+    gf_fd_chain_fd_entries(fdtable-&gt;fdentries, 0, fdtable-&gt;max_fds);</div><div class='add'>+    *count = fdtable-&gt;max_fds;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fdentries;</div><div class='add'>+    return fdentries;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fdentry_t *</div><div class='del'>-gf_fd_fdtable_get_all_fds (fdtable_t *fdtable, uint32_t *count)</div><div class='add'>+gf_fd_fdtable_get_all_fds(fdtable_t *fdtable, uint32_t *count)</div><div class='ctx'> {</div><div class='del'>-        fdentry_t       *entries = NULL;</div><div class='del'>-</div><div class='del'>-        if (fdtable) {</div><div class='del'>-                pthread_rwlock_wrlock (&amp;fdtable-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        entries = __gf_fd_fdtable_get_all_fds (fdtable, count);</div><div class='del'>-                }</div><div class='del'>-                pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    fdentry_t *entries = NULL;</div><div class='add'>+</div><div class='add'>+    if (fdtable) {</div><div class='add'>+        pthread_rwlock_wrlock(&amp;fdtable-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            entries = __gf_fd_fdtable_get_all_fds(fdtable, count);</div><div class='ctx'>         }</div><div class='add'>+        pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return entries;</div><div class='add'>+    return entries;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static fdentry_t *</div><div class='del'>-__gf_fd_fdtable_copy_all_fds (fdtable_t *fdtable, uint32_t *count)</div><div class='add'>+__gf_fd_fdtable_copy_all_fds(fdtable_t *fdtable, uint32_t *count)</div><div class='ctx'> {</div><div class='del'>-        fdentry_t *fdentries = NULL;</div><div class='del'>-        int        i         = 0;</div><div class='add'>+    fdentry_t *fdentries = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (count == NULL) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (count == NULL) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fdentries = GF_CALLOC (fdtable-&gt;max_fds, sizeof (fdentry_t),</div><div class='del'>-                               gf_common_mt_fdentry_t);</div><div class='del'>-        if (fdentries == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fdentries = GF_CALLOC(fdtable-&gt;max_fds, sizeof(fdentry_t),</div><div class='add'>+                          gf_common_mt_fdentry_t);</div><div class='add'>+    if (fdentries == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *count = fdtable-&gt;max_fds;</div><div class='add'>+    *count = fdtable-&gt;max_fds;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='del'>-                if (fdtable-&gt;fdentries[i].fd != NULL) {</div><div class='del'>-                        fdentries[i].fd = fd_ref (fdtable-&gt;fdentries[i].fd);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='add'>+        if (fdtable-&gt;fdentries[i].fd != NULL) {</div><div class='add'>+            fdentries[i].fd = fd_ref(fdtable-&gt;fdentries[i].fd);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fdentries;</div><div class='add'>+    return fdentries;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fdentry_t *</div><div class='del'>-gf_fd_fdtable_copy_all_fds (fdtable_t *fdtable, uint32_t *count)</div><div class='add'>+gf_fd_fdtable_copy_all_fds(fdtable_t *fdtable, uint32_t *count)</div><div class='ctx'> {</div><div class='del'>-        fdentry_t *entries = NULL;</div><div class='del'>-</div><div class='del'>-        if (fdtable) {</div><div class='del'>-                pthread_rwlock_rdlock (&amp;fdtable-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        entries = __gf_fd_fdtable_copy_all_fds (fdtable, count);</div><div class='del'>-                }</div><div class='del'>-                pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    fdentry_t *entries = NULL;</div><div class='add'>+</div><div class='add'>+    if (fdtable) {</div><div class='add'>+        pthread_rwlock_rdlock(&amp;fdtable-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            entries = __gf_fd_fdtable_copy_all_fds(fdtable, count);</div><div class='ctx'>         }</div><div class='add'>+        pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return entries;</div><div class='add'>+    return entries;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_fd_fdtable_destroy (fdtable_t *fdtable)</div><div class='add'>+gf_fd_fdtable_destroy(fdtable_t *fdtable)</div><div class='ctx'> {</div><div class='del'>-        struct list_head  list = {0, };</div><div class='del'>-        fd_t             *fd = NULL;</div><div class='del'>-        fdentry_t        *fdentries = NULL;</div><div class='del'>-        uint32_t          fd_count = 0;</div><div class='del'>-        int32_t           i = 0;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;list);</div><div class='del'>-</div><div class='del'>-        if (!fdtable) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!fdtable");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_rwlock_wrlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fdentries = __gf_fd_fdtable_get_all_fds (fdtable, &amp;fd_count);</div><div class='del'>-                GF_FREE (fdtable-&gt;fdentries);</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (fdentries != NULL) {</div><div class='del'>-                for (i = 0; i &lt; fd_count; i++) {</div><div class='del'>-                        fd = fdentries[i].fd;</div><div class='del'>-                        if (fd != NULL) {</div><div class='del'>-                                fd_unref (fd);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_FREE (fdentries);</div><div class='del'>-                pthread_rwlock_destroy (&amp;fdtable-&gt;lock);</div><div class='del'>-                GF_FREE (fdtable);</div><div class='del'>-        }</div><div class='add'>+    struct list_head list = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    fdentry_t *fdentries = NULL;</div><div class='add'>+    uint32_t fd_count = 0;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;list);</div><div class='add'>+</div><div class='add'>+    if (!fdtable) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!fdtable");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_rwlock_wrlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fdentries = __gf_fd_fdtable_get_all_fds(fdtable, &amp;fd_count);</div><div class='add'>+        GF_FREE(fdtable-&gt;fdentries);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (fdentries != NULL) {</div><div class='add'>+        for (i = 0; i &lt; fd_count; i++) {</div><div class='add'>+            fd = fdentries[i].fd;</div><div class='add'>+            if (fd != NULL) {</div><div class='add'>+                fd_unref(fd);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        GF_FREE(fdentries);</div><div class='add'>+        pthread_rwlock_destroy(&amp;fdtable-&gt;lock);</div><div class='add'>+        GF_FREE(fdtable);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_fd_unused_get (fdtable_t *fdtable, fd_t *fdptr)</div><div class='add'>+gf_fd_unused_get(fdtable_t *fdtable, fd_t *fdptr)</div><div class='ctx'> {</div><div class='del'>-        int32_t         fd = -1;</div><div class='del'>-        fdentry_t       *fde = NULL;</div><div class='del'>-        int             error;</div><div class='del'>-        int             alloc_attempts = 0;</div><div class='del'>-</div><div class='del'>-        if (fdtable == NULL || fdptr == NULL) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return EINVAL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_rwlock_wrlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-        fd_alloc_try_again:</div><div class='del'>-                if (fdtable-&gt;first_free != GF_FDTABLE_END) {</div><div class='del'>-                        fde = &amp;fdtable-&gt;fdentries[fdtable-&gt;first_free];</div><div class='del'>-                        fd = fdtable-&gt;first_free;</div><div class='del'>-                        fdtable-&gt;first_free = fde-&gt;next_free;</div><div class='del'>-                        fde-&gt;next_free = GF_FDENTRY_ALLOCATED;</div><div class='del'>-                        fde-&gt;fd = fdptr;</div><div class='del'>-                } else {</div><div class='del'>-                        /* If this is true, there is something</div><div class='del'>-                         * seriously wrong with our data structures.</div><div class='del'>-                         */</div><div class='del'>-                        if (alloc_attempts &gt;= 2) {</div><div class='del'>-                                gf_msg ("fd", GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_EXPAND_FD_TABLE_FAILED,</div><div class='del'>-                                        "multiple attempts to expand fd table"</div><div class='del'>-                                        " have failed.");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        error = gf_fd_fdtable_expand (fdtable,</div><div class='del'>-                                                      fdtable-&gt;max_fds + 1);</div><div class='del'>-                        if (error) {</div><div class='del'>-                                gf_msg ("fd", GF_LOG_ERROR, error,</div><div class='del'>-                                        LG_MSG_EXPAND_FD_TABLE_FAILED,</div><div class='del'>-                                        "Cannot expand fdtable");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ++alloc_attempts;</div><div class='del'>-                        /* At this point, the table stands expanded</div><div class='del'>-                         * with the first_free referring to the first</div><div class='del'>-                         * free entry in the new set of fdentries that</div><div class='del'>-                         * have just been allocated. That means, the</div><div class='del'>-                         * above logic should just work.</div><div class='del'>-                         */</div><div class='del'>-                        goto fd_alloc_try_again;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    int32_t fd = -1;</div><div class='add'>+    fdentry_t *fde = NULL;</div><div class='add'>+    int error;</div><div class='add'>+    int alloc_attempts = 0;</div><div class='add'>+</div><div class='add'>+    if (fdtable == NULL || fdptr == NULL) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_rwlock_wrlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+    fd_alloc_try_again:</div><div class='add'>+        if (fdtable-&gt;first_free != GF_FDTABLE_END) {</div><div class='add'>+            fde = &amp;fdtable-&gt;fdentries[fdtable-&gt;first_free];</div><div class='add'>+            fd = fdtable-&gt;first_free;</div><div class='add'>+            fdtable-&gt;first_free = fde-&gt;next_free;</div><div class='add'>+            fde-&gt;next_free = GF_FDENTRY_ALLOCATED;</div><div class='add'>+            fde-&gt;fd = fdptr;</div><div class='add'>+        } else {</div><div class='add'>+            /* If this is true, there is something</div><div class='add'>+             * seriously wrong with our data structures.</div><div class='add'>+             */</div><div class='add'>+            if (alloc_attempts &gt;= 2) {</div><div class='add'>+                gf_msg("fd", GF_LOG_ERROR, 0, LG_MSG_EXPAND_FD_TABLE_FAILED,</div><div class='add'>+                       "multiple attempts to expand fd table"</div><div class='add'>+                       " have failed.");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            error = gf_fd_fdtable_expand(fdtable, fdtable-&gt;max_fds + 1);</div><div class='add'>+            if (error) {</div><div class='add'>+                gf_msg("fd", GF_LOG_ERROR, error, LG_MSG_EXPAND_FD_TABLE_FAILED,</div><div class='add'>+                       "Cannot expand fdtable");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            ++alloc_attempts;</div><div class='add'>+            /* At this point, the table stands expanded</div><div class='add'>+             * with the first_free referring to the first</div><div class='add'>+             * free entry in the new set of fdentries that</div><div class='add'>+             * have just been allocated. That means, the</div><div class='add'>+             * above logic should just work.</div><div class='add'>+             */</div><div class='add'>+            goto fd_alloc_try_again;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_fd_put (fdtable_t *fdtable, int32_t fd)</div><div class='add'>+gf_fd_put(fdtable_t *fdtable, int32_t fd)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fdptr = NULL;</div><div class='del'>-        fdentry_t *fde = NULL;</div><div class='add'>+    fd_t *fdptr = NULL;</div><div class='add'>+    fdentry_t *fde = NULL;</div><div class='ctx'> </div><div class='del'>-        if (fd == GF_ANON_FD_NO)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        if (fdtable == NULL || fd &lt; 0) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (fd == GF_ANON_FD_NO)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!(fd &lt; fdtable-&gt;max_fds)) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (fdtable == NULL || fd &lt; 0) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fde = &amp;fdtable-&gt;fdentries[fd];</div><div class='del'>-                /* If the entry is not allocated, put operation must return</div><div class='del'>-                 * without doing anything.</div><div class='del'>-                 * This has the potential of masking out any bugs in a user of</div><div class='del'>-                 * fd that ends up calling gf_fd_put twice for the same fd or</div><div class='del'>-                 * for an unallocated fd, but it is a price we have to pay for</div><div class='del'>-                 * ensuring sanity of our fd-table.</div><div class='del'>-                 */</div><div class='del'>-                if (fde-&gt;next_free != GF_FDENTRY_ALLOCATED)</div><div class='del'>-                        goto unlock_out;</div><div class='del'>-                fdptr = fde-&gt;fd;</div><div class='del'>-                fde-&gt;fd = NULL;</div><div class='del'>-                fde-&gt;next_free = fdtable-&gt;first_free;</div><div class='del'>-                fdtable-&gt;first_free = fd;</div><div class='del'>-        }</div><div class='add'>+    if (!(fd &lt; fdtable-&gt;max_fds)) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_rwlock_wrlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fde = &amp;fdtable-&gt;fdentries[fd];</div><div class='add'>+        /* If the entry is not allocated, put operation must return</div><div class='add'>+         * without doing anything.</div><div class='add'>+         * This has the potential of masking out any bugs in a user of</div><div class='add'>+         * fd that ends up calling gf_fd_put twice for the same fd or</div><div class='add'>+         * for an unallocated fd, but it is a price we have to pay for</div><div class='add'>+         * ensuring sanity of our fd-table.</div><div class='add'>+         */</div><div class='add'>+        if (fde-&gt;next_free != GF_FDENTRY_ALLOCATED)</div><div class='add'>+            goto unlock_out;</div><div class='add'>+        fdptr = fde-&gt;fd;</div><div class='add'>+        fde-&gt;fd = NULL;</div><div class='add'>+        fde-&gt;next_free = fdtable-&gt;first_free;</div><div class='add'>+        fdtable-&gt;first_free = fd;</div><div class='add'>+    }</div><div class='ctx'> unlock_out:</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (fdptr) {</div><div class='del'>-                fd_unref (fdptr);</div><div class='del'>-        }</div><div class='add'>+    if (fdptr) {</div><div class='add'>+        fd_unref(fdptr);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_fdptr_put (fdtable_t *fdtable, fd_t *fd)</div><div class='add'>+gf_fdptr_put(fdtable_t *fdtable, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        fdentry_t *fde   = NULL;</div><div class='del'>-        int32_t    i     = 0;</div><div class='add'>+    fdentry_t *fde = NULL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+</div><div class='add'>+    if ((fdtable == NULL) || (fd == NULL)) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((fdtable == NULL) || (fd == NULL)) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return;</div><div class='add'>+    pthread_rwlock_wrlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='add'>+            if (fdtable-&gt;fdentries[i].fd == fd) {</div><div class='add'>+                fde = &amp;fdtable-&gt;fdentries[i];</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='del'>-                        if (fdtable-&gt;fdentries[i].fd == fd) {</div><div class='del'>-                                fde = &amp;fdtable-&gt;fdentries[i];</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (fde == NULL) {</div><div class='del'>-                        gf_msg_callingfn ("fd", GF_LOG_WARNING, 0,</div><div class='del'>-                                          LG_MSG_FD_NOT_FOUND_IN_FDTABLE,</div><div class='del'>-                                          "fd (%p) is not present in fdtable",</div><div class='del'>-                                          fd);</div><div class='del'>-                        goto unlock_out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* If the entry is not allocated, put operation must return</div><div class='del'>-                 * without doing anything.</div><div class='del'>-                 * This has the potential of masking out any bugs in a user of</div><div class='del'>-                 * fd that ends up calling gf_fd_put twice for the same fd or</div><div class='del'>-                 * for an unallocated fd, but it is a price we have to pay for</div><div class='del'>-                 * ensuring sanity of our fd-table.</div><div class='del'>-                 */</div><div class='del'>-                if (fde-&gt;next_free != GF_FDENTRY_ALLOCATED)</div><div class='del'>-                        goto unlock_out;</div><div class='del'>-                fde-&gt;fd = NULL;</div><div class='del'>-                fde-&gt;next_free = fdtable-&gt;first_free;</div><div class='del'>-                fdtable-&gt;first_free = i;</div><div class='add'>+        if (fde == NULL) {</div><div class='add'>+            gf_msg_callingfn("fd", GF_LOG_WARNING, 0,</div><div class='add'>+                             LG_MSG_FD_NOT_FOUND_IN_FDTABLE,</div><div class='add'>+                             "fd (%p) is not present in fdtable", fd);</div><div class='add'>+            goto unlock_out;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        /* If the entry is not allocated, put operation must return</div><div class='add'>+         * without doing anything.</div><div class='add'>+         * This has the potential of masking out any bugs in a user of</div><div class='add'>+         * fd that ends up calling gf_fd_put twice for the same fd or</div><div class='add'>+         * for an unallocated fd, but it is a price we have to pay for</div><div class='add'>+         * ensuring sanity of our fd-table.</div><div class='add'>+         */</div><div class='add'>+        if (fde-&gt;next_free != GF_FDENTRY_ALLOCATED)</div><div class='add'>+            goto unlock_out;</div><div class='add'>+        fde-&gt;fd = NULL;</div><div class='add'>+        fde-&gt;next_free = fdtable-&gt;first_free;</div><div class='add'>+        fdtable-&gt;first_free = i;</div><div class='add'>+    }</div><div class='ctx'> unlock_out:</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if ((fd != NULL) &amp;&amp; (fde != NULL)) {</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        }</div><div class='add'>+    if ((fd != NULL) &amp;&amp; (fde != NULL)) {</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-gf_fd_fdptr_get (fdtable_t *fdtable, int64_t fd)</div><div class='add'>+gf_fd_fdptr_get(fdtable_t *fdtable, int64_t fd)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fdptr = NULL;</div><div class='add'>+    fd_t *fdptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (fdtable == NULL || fd &lt; 0) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (fdtable == NULL || fd &lt; 0) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!(fd &lt; fdtable-&gt;max_fds)) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!(fd &lt; fdtable-&gt;max_fds)) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_rdlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fdptr = fdtable-&gt;fdentries[fd].fd;</div><div class='del'>-                if (fdptr) {</div><div class='del'>-                        fd_ref (fdptr);</div><div class='del'>-                }</div><div class='add'>+    pthread_rwlock_rdlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fdptr = fdtable-&gt;fdentries[fd].fd;</div><div class='add'>+        if (fdptr) {</div><div class='add'>+            fd_ref(fdptr);</div><div class='ctx'>         }</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fdptr;</div><div class='add'>+    return fdptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-__fd_ref (fd_t *fd)</div><div class='add'>+__fd_ref(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        GF_ATOMIC_INC (fd-&gt;refcount);</div><div class='add'>+    GF_ATOMIC_INC(fd-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-fd_ref (fd_t *fd)</div><div class='add'>+fd_ref(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "null fd");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "null fd");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (fd-&gt;refcount);</div><div class='add'>+    GF_ATOMIC_INC(fd-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-fd_destroy (fd_t *fd, gf_boolean_t bound)</div><div class='add'>+fd_destroy(fd_t *fd, gf_boolean_t bound)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *xl = NULL;</div><div class='del'>-        int          i = 0;</div><div class='del'>-        xlator_t    *old_THIS = NULL;</div><div class='del'>-</div><div class='del'>-        if (fd == NULL){</div><div class='del'>-                gf_msg_callingfn ("xlator", GF_LOG_ERROR,  EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fd-&gt;inode == NULL){</div><div class='del'>-                gf_msg_callingfn ("xlator", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_FD_INODE_NULL,</div><div class='del'>-                                  "fd-&gt;inode is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!fd-&gt;_ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                for (i = 0; i &lt;  fd-&gt;xl_count; i++) {</div><div class='del'>-                        if (fd-&gt;_ctx[i].key) {</div><div class='del'>-                                xl = fd-&gt;_ctx[i].xl_key;</div><div class='del'>-                                old_THIS = THIS;</div><div class='del'>-                                THIS = xl;</div><div class='del'>-                                if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;releasedir)</div><div class='del'>-                                        xl-&gt;cbks-&gt;releasedir (xl, fd);</div><div class='del'>-                                THIS = old_THIS;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='del'>-                        if (fd-&gt;_ctx[i].key) {</div><div class='del'>-                                xl = fd-&gt;_ctx[i].xl_key;</div><div class='del'>-                                old_THIS = THIS;</div><div class='del'>-                                THIS = xl;</div><div class='del'>-                                if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;release)</div><div class='del'>-                                        xl-&gt;cbks-&gt;release (xl, fd);</div><div class='del'>-                                THIS = old_THIS;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK_DESTROY (&amp;fd-&gt;lock);</div><div class='del'>-</div><div class='del'>-        GF_FREE (fd-&gt;_ctx);</div><div class='del'>-        if (bound) {</div><div class='del'>-                /*Decrease the count only after close happens on file*/</div><div class='del'>-                LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        fd-&gt;inode-&gt;fd_count--;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-        inode_unref (fd-&gt;inode);</div><div class='del'>-        fd-&gt;inode = NULL;</div><div class='del'>-        fd_lk_ctx_unref (fd-&gt;lk_ctx);</div><div class='del'>-        mem_put (fd);</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        gf_msg_callingfn("xlator", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd-&gt;inode == NULL) {</div><div class='add'>+        gf_msg_callingfn("xlator", GF_LOG_ERROR, 0, LG_MSG_FD_INODE_NULL,</div><div class='add'>+                         "fd-&gt;inode is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!fd-&gt;_ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='add'>+            if (fd-&gt;_ctx[i].key) {</div><div class='add'>+                xl = fd-&gt;_ctx[i].xl_key;</div><div class='add'>+                old_THIS = THIS;</div><div class='add'>+                THIS = xl;</div><div class='add'>+                if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;releasedir)</div><div class='add'>+                    xl-&gt;cbks-&gt;releasedir(xl, fd);</div><div class='add'>+                THIS = old_THIS;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='add'>+            if (fd-&gt;_ctx[i].key) {</div><div class='add'>+                xl = fd-&gt;_ctx[i].xl_key;</div><div class='add'>+                old_THIS = THIS;</div><div class='add'>+                THIS = xl;</div><div class='add'>+                if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;release)</div><div class='add'>+                    xl-&gt;cbks-&gt;release(xl, fd);</div><div class='add'>+                THIS = old_THIS;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK_DESTROY(&amp;fd-&gt;lock);</div><div class='add'>+</div><div class='add'>+    GF_FREE(fd-&gt;_ctx);</div><div class='add'>+    if (bound) {</div><div class='add'>+        /*Decrease the count only after close happens on file*/</div><div class='add'>+        LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            fd-&gt;inode-&gt;fd_count--;</div><div class='add'>+        }</div><div class='add'>+        UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    inode_unref(fd-&gt;inode);</div><div class='add'>+    fd-&gt;inode = NULL;</div><div class='add'>+    fd_lk_ctx_unref(fd-&gt;lk_ctx);</div><div class='add'>+    mem_put(fd);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fd_unref (fd_t *fd)</div><div class='add'>+fd_unref(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int32_t refcount = 0;</div><div class='del'>-        gf_boolean_t bound = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "fd is NULL");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                refcount = GF_ATOMIC_DEC (fd-&gt;refcount);</div><div class='del'>-                if (refcount == 0) {</div><div class='del'>-                        if (!list_empty (&amp;fd-&gt;inode_list)) {</div><div class='del'>-                                list_del_init (&amp;fd-&gt;inode_list);</div><div class='del'>-                                fd-&gt;inode-&gt;active_fd_count--;</div><div class='del'>-                                bound = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int32_t refcount = 0;</div><div class='add'>+    gf_boolean_t bound = _gf_false;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "fd is NULL");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        refcount = GF_ATOMIC_DEC(fd-&gt;refcount);</div><div class='ctx'>         if (refcount == 0) {</div><div class='del'>-                fd_destroy (fd, bound);</div><div class='add'>+            if (!list_empty(&amp;fd-&gt;inode_list)) {</div><div class='add'>+                list_del_init(&amp;fd-&gt;inode_list);</div><div class='add'>+                fd-&gt;inode-&gt;active_fd_count--;</div><div class='add'>+                bound = _gf_true;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ;</div><div class='del'>-}</div><div class='add'>+    if (refcount == 0) {</div><div class='add'>+        fd_destroy(fd, bound);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> fd_t *</div><div class='del'>-__fd_bind (fd_t *fd)</div><div class='add'>+__fd_bind(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        list_del_init (&amp;fd-&gt;inode_list);</div><div class='del'>-        list_add (&amp;fd-&gt;inode_list, &amp;fd-&gt;inode-&gt;fd_list);</div><div class='del'>-        fd-&gt;inode-&gt;fd_count++;</div><div class='del'>-        fd-&gt;inode-&gt;active_fd_count++;</div><div class='add'>+    list_del_init(&amp;fd-&gt;inode_list);</div><div class='add'>+    list_add(&amp;fd-&gt;inode_list, &amp;fd-&gt;inode-&gt;fd_list);</div><div class='add'>+    fd-&gt;inode-&gt;fd_count++;</div><div class='add'>+    fd-&gt;inode-&gt;active_fd_count++;</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-fd_bind (fd_t *fd)</div><div class='add'>+fd_bind(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        if (!fd || !fd-&gt;inode) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!fd || !fd-&gt;inode");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!fd || !fd-&gt;inode) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!fd || !fd-&gt;inode");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd = __fd_bind (fd);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = __fd_bind(fd);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static fd_t *</div><div class='del'>-__fd_create (inode_t *inode, uint64_t pid)</div><div class='add'>+__fd_create(inode_t *inode, uint64_t pid)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (inode == NULL) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (inode == NULL) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = mem_get0 (inode-&gt;table-&gt;fd_mem_pool);</div><div class='del'>-        if (!fd)</div><div class='del'>-                goto out;</div><div class='add'>+    fd = mem_get0(inode-&gt;table-&gt;fd_mem_pool);</div><div class='add'>+    if (!fd)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd-&gt;xl_count = inode-&gt;table-&gt;xl-&gt;graph-&gt;xl_count + 1;</div><div class='add'>+    fd-&gt;xl_count = inode-&gt;table-&gt;xl-&gt;graph-&gt;xl_count + 1;</div><div class='ctx'> </div><div class='del'>-        fd-&gt;_ctx = GF_CALLOC (1, (sizeof (struct _fd_ctx) * fd-&gt;xl_count),</div><div class='del'>-                              gf_common_mt_fd_ctx);</div><div class='del'>-        if (!fd-&gt;_ctx)</div><div class='del'>-                goto free_fd;</div><div class='add'>+    fd-&gt;_ctx = GF_CALLOC(1, (sizeof(struct _fd_ctx) * fd-&gt;xl_count),</div><div class='add'>+                         gf_common_mt_fd_ctx);</div><div class='add'>+    if (!fd-&gt;_ctx)</div><div class='add'>+        goto free_fd;</div><div class='ctx'> </div><div class='del'>-        fd-&gt;lk_ctx = fd_lk_ctx_create ();</div><div class='del'>-        if (!fd-&gt;lk_ctx)</div><div class='del'>-                goto free_fd_ctx;</div><div class='add'>+    fd-&gt;lk_ctx = fd_lk_ctx_create();</div><div class='add'>+    if (!fd-&gt;lk_ctx)</div><div class='add'>+        goto free_fd_ctx;</div><div class='ctx'> </div><div class='del'>-        fd-&gt;inode = inode_ref (inode);</div><div class='del'>-        fd-&gt;pid = pid;</div><div class='del'>-        INIT_LIST_HEAD (&amp;fd-&gt;inode_list);</div><div class='add'>+    fd-&gt;inode = inode_ref(inode);</div><div class='add'>+    fd-&gt;pid = pid;</div><div class='add'>+    INIT_LIST_HEAD(&amp;fd-&gt;inode_list);</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;fd-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> </div><div class='ctx'> free_fd_ctx:</div><div class='del'>-        GF_FREE (fd-&gt;_ctx);</div><div class='add'>+    GF_FREE(fd-&gt;_ctx);</div><div class='ctx'> free_fd:</div><div class='del'>-        mem_put (fd);</div><div class='add'>+    mem_put(fd);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-fd_create (inode_t *inode, pid_t pid)</div><div class='add'>+fd_create(inode_t *inode, pid_t pid)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        fd = __fd_create (inode, (uint64_t)pid);</div><div class='del'>-        if (!fd)</div><div class='del'>-                goto out;</div><div class='add'>+    fd = __fd_create(inode, (uint64_t)pid);</div><div class='add'>+    if (!fd)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd = fd_ref (fd);</div><div class='add'>+    fd = fd_ref(fd);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_t *</div><div class='del'>-fd_create_uint64 (inode_t *inode, uint64_t pid)</div><div class='add'>+fd_create_uint64(inode_t *inode, uint64_t pid)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        fd = __fd_create (inode, pid);</div><div class='del'>-        if (!fd)</div><div class='del'>-                goto out;</div><div class='add'>+    fd = __fd_create(inode, pid);</div><div class='add'>+    if (!fd)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd = fd_ref (fd);</div><div class='add'>+    fd = fd_ref(fd);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static fd_t *</div><div class='del'>-__fd_lookup (inode_t *inode, uint64_t pid)</div><div class='add'>+__fd_lookup(inode_t *inode, uint64_t pid)</div><div class='ctx'> {</div><div class='del'>-        fd_t *iter_fd = NULL;</div><div class='del'>-        fd_t *fd = NULL;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;inode-&gt;fd_list))</div><div class='del'>-                return NULL;</div><div class='add'>+    fd_t *iter_fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='add'>+    if (list_empty(&amp;inode-&gt;fd_list))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (iter_fd, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-                if (iter_fd-&gt;anonymous)</div><div class='del'>-                        /* If someone was interested in getting an</div><div class='del'>-                           anonymous fd (or was OK getting an anonymous fd),</div><div class='del'>-                           they can as well call fd_anonymous() directly */</div><div class='del'>-                        continue;</div><div class='add'>+    list_for_each_entry(iter_fd, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if (iter_fd-&gt;anonymous)</div><div class='add'>+            /* If someone was interested in getting an</div><div class='add'>+               anonymous fd (or was OK getting an anonymous fd),</div><div class='add'>+               they can as well call fd_anonymous() directly */</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!pid || iter_fd-&gt;pid == pid) {</div><div class='del'>-                        fd = __fd_ref (iter_fd);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (!pid || iter_fd-&gt;pid == pid) {</div><div class='add'>+            fd = __fd_ref(iter_fd);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-fd_lookup (inode_t *inode, pid_t pid)</div><div class='add'>+fd_lookup(inode_t *inode, pid_t pid)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!inode");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!inode");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd = __fd_lookup (inode, (uint64_t)pid);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = __fd_lookup(inode, (uint64_t)pid);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_t *</div><div class='del'>-fd_lookup_uint64 (inode_t *inode, uint64_t pid)</div><div class='add'>+fd_lookup_uint64(inode_t *inode, uint64_t pid)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!inode");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!inode");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd = __fd_lookup (inode, pid);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = __fd_lookup(inode, pid);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static fd_t *</div><div class='del'>-__fd_lookup_anonymous (inode_t *inode, int32_t flags)</div><div class='add'>+__fd_lookup_anonymous(inode_t *inode, int32_t flags)</div><div class='ctx'> {</div><div class='del'>-        fd_t *iter_fd = NULL;</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *iter_fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;inode-&gt;fd_list))</div><div class='del'>-                return NULL;</div><div class='add'>+    if (list_empty(&amp;inode-&gt;fd_list))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (iter_fd, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-                if ((iter_fd-&gt;anonymous) &amp;&amp; (flags == iter_fd-&gt;flags)) {</div><div class='del'>-                        fd = __fd_ref (iter_fd);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(iter_fd, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if ((iter_fd-&gt;anonymous) &amp;&amp; (flags == iter_fd-&gt;flags)) {</div><div class='add'>+            fd = __fd_ref(iter_fd);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static fd_t *</div><div class='del'>-__fd_anonymous (inode_t *inode, int32_t flags)</div><div class='add'>+__fd_anonymous(inode_t *inode, int32_t flags)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        fd = __fd_lookup_anonymous (inode, flags);</div><div class='add'>+    fd = __fd_lookup_anonymous(inode, flags);</div><div class='ctx'> </div><div class='del'>-        /* if (fd); then we already have increased the refcount in</div><div class='del'>-           __fd_lookup_anonymous(), so no need of one more fd_ref().</div><div class='del'>-           if (!fd); then both create and bind won't bump up the ref</div><div class='del'>-           count, so we have to call fd_ref() after bind. */</div><div class='del'>-        if (!fd) {</div><div class='del'>-                fd = __fd_create (inode, 0);</div><div class='add'>+    /* if (fd); then we already have increased the refcount in</div><div class='add'>+       __fd_lookup_anonymous(), so no need of one more fd_ref().</div><div class='add'>+       if (!fd); then both create and bind won't bump up the ref</div><div class='add'>+       count, so we have to call fd_ref() after bind. */</div><div class='add'>+    if (!fd) {</div><div class='add'>+        fd = __fd_create(inode, 0);</div><div class='ctx'> </div><div class='del'>-                if (!fd)</div><div class='del'>-                        return NULL;</div><div class='add'>+        if (!fd)</div><div class='add'>+            return NULL;</div><div class='ctx'> </div><div class='del'>-                fd-&gt;anonymous = _gf_true;</div><div class='del'>-                fd-&gt;flags = GF_ANON_FD_FLAGS|flags;</div><div class='add'>+        fd-&gt;anonymous = _gf_true;</div><div class='add'>+        fd-&gt;flags = GF_ANON_FD_FLAGS | flags;</div><div class='ctx'> </div><div class='del'>-                __fd_bind (fd);</div><div class='add'>+        __fd_bind(fd);</div><div class='ctx'> </div><div class='del'>-                __fd_ref (fd);</div><div class='del'>-        }</div><div class='add'>+        __fd_ref(fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> fd_t *</div><div class='del'>-fd_anonymous (inode_t *inode)</div><div class='add'>+fd_anonymous(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd = __fd_anonymous (inode, GF_ANON_FD_FLAGS);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = __fd_anonymous(inode, GF_ANON_FD_FLAGS);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_t *</div><div class='del'>-fd_anonymous_with_flags (inode_t *inode, int32_t flags)</div><div class='add'>+fd_anonymous_with_flags(inode_t *inode, int32_t flags)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (flags &amp; O_DIRECT)</div><div class='del'>-                        flags = GF_ANON_FD_FLAGS | O_DIRECT;</div><div class='del'>-                else</div><div class='del'>-                        flags = GF_ANON_FD_FLAGS;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (flags &amp; O_DIRECT)</div><div class='add'>+            flags = GF_ANON_FD_FLAGS | O_DIRECT;</div><div class='add'>+        else</div><div class='add'>+            flags = GF_ANON_FD_FLAGS;</div><div class='ctx'> </div><div class='del'>-                fd = __fd_anonymous (inode, flags);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+        fd = __fd_anonymous(inode, flags);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd;</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-fd_t*</div><div class='del'>-fd_lookup_anonymous (inode_t *inode, int32_t flags)</div><div class='add'>+fd_t *</div><div class='add'>+fd_lookup_anonymous(inode_t *inode, int32_t flags)</div><div class='ctx'> {</div><div class='del'>-        fd_t *fd = NULL;</div><div class='del'>-</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "!inode");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd = __fd_lookup_anonymous (inode, flags);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-        return fd;</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "!inode");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd = __fd_lookup_anonymous(inode, flags);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-fd_is_anonymous (fd_t *fd)</div><div class='add'>+fd_is_anonymous(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        return (fd &amp;&amp; fd-&gt;anonymous);</div><div class='add'>+    return (fd &amp;&amp; fd-&gt;anonymous);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> uint8_t</div><div class='del'>-fd_list_empty (inode_t *inode)</div><div class='add'>+fd_list_empty(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint8_t empty = 0;</div><div class='add'>+    uint8_t empty = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                empty = list_empty (&amp;inode-&gt;fd_list);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        empty = list_empty(&amp;inode-&gt;fd_list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return empty;</div><div class='add'>+    return empty;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__fd_ctx_set (fd_t *fd, xlator_t *xlator, uint64_t value)</div><div class='add'>+__fd_ctx_set(fd_t *fd, xlator_t *xlator, uint64_t value)</div><div class='ctx'> {</div><div class='del'>-        int             index   = 0, new_xl_count = 0;</div><div class='del'>-        int             ret     = 0;</div><div class='del'>-        int             set_idx = -1;</div><div class='del'>-        void           *begin   = NULL;</div><div class='del'>-        size_t          diff    = 0;</div><div class='del'>-        struct _fd_ctx *tmp     = NULL;</div><div class='del'>-</div><div class='del'>-	if (!fd || !xlator)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-        for (index = 0; index &lt; fd-&gt;xl_count; index++) {</div><div class='del'>-                if (!fd-&gt;_ctx[index].key) {</div><div class='del'>-                        if (set_idx == -1)</div><div class='del'>-                                set_idx = index;</div><div class='del'>-                        /* don't break, to check if key already exists</div><div class='del'>-                           further on */</div><div class='del'>-                }</div><div class='del'>-                if (fd-&gt;_ctx[index].xl_key == xlator) {</div><div class='del'>-                        set_idx = index;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    int index = 0, new_xl_count = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int set_idx = -1;</div><div class='add'>+    void *begin = NULL;</div><div class='add'>+    size_t diff = 0;</div><div class='add'>+    struct _fd_ctx *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if (!fd || !xlator)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    for (index = 0; index &lt; fd-&gt;xl_count; index++) {</div><div class='add'>+        if (!fd-&gt;_ctx[index].key) {</div><div class='add'>+            if (set_idx == -1)</div><div class='add'>+                set_idx = index;</div><div class='add'>+            /* don't break, to check if key already exists</div><div class='add'>+               further on */</div><div class='ctx'>         }</div><div class='add'>+        if (fd-&gt;_ctx[index].xl_key == xlator) {</div><div class='add'>+            set_idx = index;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (set_idx == -1) {</div><div class='del'>-                set_idx = fd-&gt;xl_count;</div><div class='add'>+    if (set_idx == -1) {</div><div class='add'>+        set_idx = fd-&gt;xl_count;</div><div class='ctx'> </div><div class='del'>-                new_xl_count = fd-&gt;xl_count + xlator-&gt;graph-&gt;xl_count;</div><div class='add'>+        new_xl_count = fd-&gt;xl_count + xlator-&gt;graph-&gt;xl_count;</div><div class='ctx'> </div><div class='del'>-                tmp = GF_REALLOC (fd-&gt;_ctx,</div><div class='del'>-                                  (sizeof (struct _fd_ctx)</div><div class='del'>-                                   * new_xl_count));</div><div class='del'>-                if (tmp == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        tmp = GF_REALLOC(fd-&gt;_ctx, (sizeof(struct _fd_ctx) * new_xl_count));</div><div class='add'>+        if (tmp == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                fd-&gt;_ctx = tmp;</div><div class='add'>+        fd-&gt;_ctx = tmp;</div><div class='ctx'> </div><div class='del'>-                begin = fd-&gt;_ctx;</div><div class='del'>-                begin += (fd-&gt;xl_count * sizeof (struct _fd_ctx));</div><div class='add'>+        begin = fd-&gt;_ctx;</div><div class='add'>+        begin += (fd-&gt;xl_count * sizeof(struct _fd_ctx));</div><div class='ctx'> </div><div class='del'>-                diff = (new_xl_count - fd-&gt;xl_count )</div><div class='del'>-                        * sizeof (struct _fd_ctx);</div><div class='add'>+        diff = (new_xl_count - fd-&gt;xl_count) * sizeof(struct _fd_ctx);</div><div class='ctx'> </div><div class='del'>-                memset (begin, 0, diff);</div><div class='add'>+        memset(begin, 0, diff);</div><div class='ctx'> </div><div class='del'>-                fd-&gt;xl_count = new_xl_count;</div><div class='del'>-        }</div><div class='add'>+        fd-&gt;xl_count = new_xl_count;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd-&gt;_ctx[set_idx].xl_key = xlator;</div><div class='del'>-        fd-&gt;_ctx[set_idx].value1  = value;</div><div class='add'>+    fd-&gt;_ctx[set_idx].xl_key = xlator;</div><div class='add'>+    fd-&gt;_ctx[set_idx].value1 = value;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fd_ctx_set (fd_t *fd, xlator_t *xlator, uint64_t value)</div><div class='add'>+fd_ctx_set(fd_t *fd, xlator_t *xlator, uint64_t value)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	if (!fd || !xlator) {</div><div class='del'>-                gf_msg_callingfn ("fd", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "%p %p", fd, xlator);</div><div class='del'>-		return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!fd || !xlator) {</div><div class='add'>+        gf_msg_callingfn("fd", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "%p %p", fd, xlator);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __fd_ctx_set (fd, xlator, value);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __fd_ctx_set(fd, xlator, value);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__fd_ctx_get (fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='add'>+__fd_ctx_get(fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!fd || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!fd || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; fd-&gt;xl_count; index++) {</div><div class='del'>-                if (fd-&gt;_ctx[index].xl_key == xlator)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (index = 0; index &lt; fd-&gt;xl_count; index++) {</div><div class='add'>+        if (fd-&gt;_ctx[index].xl_key == xlator)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (index == fd-&gt;xl_count) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (index == fd-&gt;xl_count) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (value)</div><div class='del'>-                *value = fd-&gt;_ctx[index].value1;</div><div class='add'>+    if (value)</div><div class='add'>+        *value = fd-&gt;_ctx[index].value1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fd_ctx_get (fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='add'>+fd_ctx_get(fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!fd || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!fd || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __fd_ctx_get (fd, xlator, value);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __fd_ctx_get(fd, xlator, value);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__fd_ctx_del (fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='add'>+__fd_ctx_del(fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!fd || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!fd || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; fd-&gt;xl_count; index++) {</div><div class='del'>-                if (fd-&gt;_ctx[index].xl_key == xlator)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (index = 0; index &lt; fd-&gt;xl_count; index++) {</div><div class='add'>+        if (fd-&gt;_ctx[index].xl_key == xlator)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (index == fd-&gt;xl_count) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (index == fd-&gt;xl_count) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (value)</div><div class='del'>-                *value = fd-&gt;_ctx[index].value1;</div><div class='add'>+    if (value)</div><div class='add'>+        *value = fd-&gt;_ctx[index].value1;</div><div class='ctx'> </div><div class='del'>-        fd-&gt;_ctx[index].key   = 0;</div><div class='del'>-        fd-&gt;_ctx[index].value1 = 0;</div><div class='add'>+    fd-&gt;_ctx[index].key = 0;</div><div class='add'>+    fd-&gt;_ctx[index].value1 = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fd_ctx_del (fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='add'>+fd_ctx_del(fd_t *fd, xlator_t *xlator, uint64_t *value)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!fd || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!fd || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __fd_ctx_del (fd, xlator, value);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __fd_ctx_del(fd, xlator, value);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fd_dump (fd_t *fd, char *prefix)</div><div class='add'>+fd_dump(fd_t *fd, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        char        key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='ctx'> </div><div class='del'>-        if (!fd)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write("pid", "%llu", fd-&gt;pid);</div><div class='del'>-        gf_proc_dump_write("refcount", "%d", fd-&gt;refcount);</div><div class='del'>-        gf_proc_dump_write("flags", "%d", fd-&gt;flags);</div><div class='add'>+    if (!fd)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (fd-&gt;inode) {</div><div class='del'>-                gf_proc_dump_build_key (key, "inode", NULL);</div><div class='del'>-                gf_proc_dump_add_section(key);</div><div class='del'>-                inode_dump (fd-&gt;inode, key);</div><div class='del'>-        }</div><div class='add'>+    gf_proc_dump_write("pid", "%llu", fd-&gt;pid);</div><div class='add'>+    gf_proc_dump_write("refcount", "%d", fd-&gt;refcount);</div><div class='add'>+    gf_proc_dump_write("flags", "%d", fd-&gt;flags);</div><div class='ctx'> </div><div class='add'>+    if (fd-&gt;inode) {</div><div class='add'>+        gf_proc_dump_build_key(key, "inode", NULL);</div><div class='add'>+        gf_proc_dump_add_section(key);</div><div class='add'>+        inode_dump(fd-&gt;inode, key);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fdentry_dump (fdentry_t *fdentry, char *prefix)</div><div class='add'>+fdentry_dump(fdentry_t *fdentry, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        if (!fdentry)</div><div class='del'>-                return;</div><div class='add'>+    if (!fdentry)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (GF_FDENTRY_ALLOCATED != fdentry-&gt;next_free)</div><div class='del'>-                return;</div><div class='add'>+    if (GF_FDENTRY_ALLOCATED != fdentry-&gt;next_free)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (fdentry-&gt;fd)</div><div class='del'>-                fd_dump(fdentry-&gt;fd, prefix);</div><div class='add'>+    if (fdentry-&gt;fd)</div><div class='add'>+        fd_dump(fdentry-&gt;fd, prefix);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fdtable_dump (fdtable_t *fdtable, char *prefix)</div><div class='add'>+fdtable_dump(fdtable_t *fdtable, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        char    key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int     i = 0;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!fdtable)</div><div class='del'>-                return;</div><div class='add'>+    if (!fdtable)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_rwlock_tryrdlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = pthread_rwlock_tryrdlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "refcount");</div><div class='del'>-        gf_proc_dump_write(key, "%d", fdtable-&gt;refcount);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "maxfds");</div><div class='del'>-        gf_proc_dump_write(key, "%d", fdtable-&gt;max_fds);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "first_free");</div><div class='del'>-        gf_proc_dump_write(key, "%d", fdtable-&gt;first_free);</div><div class='del'>-</div><div class='del'>-        for ( i = 0 ; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='del'>-                if (GF_FDENTRY_ALLOCATED ==</div><div class='del'>-                    fdtable-&gt;fdentries[i].next_free) {</div><div class='del'>-                        gf_proc_dump_build_key(key, prefix, "fdentry[%d]", i);</div><div class='del'>-                        gf_proc_dump_add_section(key);</div><div class='del'>-                        fdentry_dump(&amp;fdtable-&gt;fdentries[i], key);</div><div class='del'>-                }</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "refcount");</div><div class='add'>+    gf_proc_dump_write(key, "%d", fdtable-&gt;refcount);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "maxfds");</div><div class='add'>+    gf_proc_dump_write(key, "%d", fdtable-&gt;max_fds);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "first_free");</div><div class='add'>+    gf_proc_dump_write(key, "%d", fdtable-&gt;first_free);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='add'>+        if (GF_FDENTRY_ALLOCATED == fdtable-&gt;fdentries[i].next_free) {</div><div class='add'>+            gf_proc_dump_build_key(key, prefix, "fdentry[%d]", i);</div><div class='add'>+            gf_proc_dump_add_section(key);</div><div class='add'>+            fdentry_dump(&amp;fdtable-&gt;fdentries[i], key);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                gf_proc_dump_write ("Unable to dump the fdtable",</div><div class='del'>-                                    "(Lock acquistion failed) %p", fdtable);</div><div class='del'>-        return;</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        gf_proc_dump_write("Unable to dump the fdtable",</div><div class='add'>+                           "(Lock acquistion failed) %p", fdtable);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fd_ctx_dump (fd_t *fd, char *prefix)</div><div class='add'>+fd_ctx_dump(fd_t *fd, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        struct _fd_ctx *fd_ctx = NULL;</div><div class='del'>-        xlator_t       *xl     = NULL;</div><div class='del'>-        int    i               = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if ((fd == NULL) || (fd-&gt;_ctx == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (fd-&gt;_ctx != NULL) {</div><div class='del'>-                        fd_ctx = GF_CALLOC (fd-&gt;xl_count, sizeof (*fd_ctx),</div><div class='del'>-                                            gf_common_mt_fd_ctx);</div><div class='del'>-                        if (fd_ctx == NULL) {</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='del'>-                                fd_ctx[i] = fd-&gt;_ctx[i];</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    struct _fd_ctx *fd_ctx = NULL;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if ((fd == NULL) || (fd-&gt;_ctx == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (fd-&gt;_ctx != NULL) {</div><div class='add'>+            fd_ctx = GF_CALLOC(fd-&gt;xl_count, sizeof(*fd_ctx),</div><div class='add'>+                               gf_common_mt_fd_ctx);</div><div class='add'>+            if (fd_ctx == NULL) {</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='add'>+                fd_ctx[i] = fd-&gt;_ctx[i];</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (fd_ctx == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fd_ctx == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='del'>-                if (fd_ctx[i].xl_key) {</div><div class='del'>-                        xl = (xlator_t *)(long)fd_ctx[i].xl_key;</div><div class='del'>-                        if (xl-&gt;dumpops &amp;&amp; xl-&gt;dumpops-&gt;fdctx)</div><div class='del'>-                                xl-&gt;dumpops-&gt;fdctx (xl, fd);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; fd-&gt;xl_count; i++) {</div><div class='add'>+        if (fd_ctx[i].xl_key) {</div><div class='add'>+            xl = (xlator_t *)(long)fd_ctx[i].xl_key;</div><div class='add'>+            if (xl-&gt;dumpops &amp;&amp; xl-&gt;dumpops-&gt;fdctx)</div><div class='add'>+                xl-&gt;dumpops-&gt;fdctx(xl, fd);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (fd_ctx);</div><div class='add'>+    GF_FREE(fd_ctx);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fdentry_dump_to_dict (fdentry_t *fdentry, char *prefix, dict_t *dict,</div><div class='del'>-                      int *openfds)</div><div class='add'>+fdentry_dump_to_dict(fdentry_t *fdentry, char *prefix, dict_t *dict,</div><div class='add'>+                     int *openfds)</div><div class='ctx'> {</div><div class='del'>-        char    key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!fdentry)</div><div class='del'>-                return;</div><div class='del'>-        if (!dict)</div><div class='del'>-                return;</div><div class='add'>+    if (!fdentry)</div><div class='add'>+        return;</div><div class='add'>+    if (!dict)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (GF_FDENTRY_ALLOCATED != fdentry-&gt;next_free)</div><div class='del'>-                return;</div><div class='add'>+    if (GF_FDENTRY_ALLOCATED != fdentry-&gt;next_free)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (fdentry-&gt;fd) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.pid", prefix);</div><div class='del'>-                ret = dict_set_uint64 (dict, key, fdentry-&gt;fd-&gt;pid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='add'>+    if (fdentry-&gt;fd) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.pid", prefix);</div><div class='add'>+        ret = dict_set_uint64(dict, key, fdentry-&gt;fd-&gt;pid);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.refcount", prefix);</div><div class='del'>-                ret = dict_set_int32 (dict, key, GF_ATOMIC_GET (fdentry-&gt;fd-&gt;refcount));</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='add'>+        snprintf(key, sizeof(key), "%s.refcount", prefix);</div><div class='add'>+        ret = dict_set_int32(dict, key, GF_ATOMIC_GET(fdentry-&gt;fd-&gt;refcount));</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='ctx'> </div><div class='del'>-                snprintf (key, sizeof (key), "%s.flags", prefix);</div><div class='del'>-                ret = dict_set_int32 (dict, key, fdentry-&gt;fd-&gt;flags);</div><div class='add'>+        snprintf(key, sizeof(key), "%s.flags", prefix);</div><div class='add'>+        ret = dict_set_int32(dict, key, fdentry-&gt;fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-                (*openfds)++;</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+        (*openfds)++;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fdtable_dump_to_dict (fdtable_t *fdtable, char *prefix, dict_t *dict)</div><div class='add'>+fdtable_dump_to_dict(fdtable_t *fdtable, char *prefix, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        char    key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        int     i = 0;</div><div class='del'>-        int     openfds = 0;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!fdtable)</div><div class='del'>-                return;</div><div class='del'>-        if (!dict)</div><div class='del'>-                return;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int openfds = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!fdtable)</div><div class='add'>+        return;</div><div class='add'>+    if (!dict)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_rwlock_tryrdlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = pthread_rwlock_tryrdlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.fdtable.refcount", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, fdtable-&gt;refcount);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.fdtable.refcount", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, fdtable-&gt;refcount);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.fdtable.maxfds", prefix);</div><div class='del'>-        ret = dict_set_uint32 (dict, key, fdtable-&gt;max_fds);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.fdtable.maxfds", prefix);</div><div class='add'>+    ret = dict_set_uint32(dict, key, fdtable-&gt;max_fds);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.fdtable.firstfree", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, fdtable-&gt;first_free);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.fdtable.firstfree", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, fdtable-&gt;first_free);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='del'>-                if (GF_FDENTRY_ALLOCATED ==</div><div class='del'>-                    fdtable-&gt;fdentries[i].next_free) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%s.fdtable.fdentry%d",</div><div class='del'>-                                  prefix, i);</div><div class='del'>-                        fdentry_dump_to_dict (&amp;fdtable-&gt;fdentries[i], key,</div><div class='del'>-                                              dict, &amp;openfds);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; fdtable-&gt;max_fds; i++) {</div><div class='add'>+        if (GF_FDENTRY_ALLOCATED == fdtable-&gt;fdentries[i].next_free) {</div><div class='add'>+            snprintf(key, sizeof(key), "%s.fdtable.fdentry%d", prefix, i);</div><div class='add'>+            fdentry_dump_to_dict(&amp;fdtable-&gt;fdentries[i], key, dict, &amp;openfds);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.fdtable.openfds", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, openfds);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.fdtable.openfds", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, openfds);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        pthread_rwlock_unlock (&amp;fdtable-&gt;lock);</div><div class='del'>-        return;</div><div class='add'>+    pthread_rwlock_unlock(&amp;fdtable-&gt;lock);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/gf-dirent.c b/libglusterfs/src/gf-dirent.c<br/>index d0df80e2886..c06e959aeba 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gf-dirent.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/gf-dirent.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gf-dirent.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gf-dirent.c</a></div><div class='hunk'>@@ -8,8 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> #include &lt;stdint.h&gt;</div><div class='hunk'>@@ -22,223 +20,221 @@</div><div class='ctx'> #define BACKEND_D_OFF_BITS 63</div><div class='ctx'> #define TOP_BIT (ONE &lt;&lt; (PRESENT_D_OFF_BITS - 1))</div><div class='ctx'> #define MASK (~0ULL)</div><div class='del'>-#define SHIFT_BITS (max (0, (BACKEND_D_OFF_BITS - PRESENT_D_OFF_BITS + 1)))</div><div class='add'>+#define SHIFT_BITS (max(0, (BACKEND_D_OFF_BITS - PRESENT_D_OFF_BITS + 1)))</div><div class='ctx'> #define PRESENT_MASK (MASK &gt;&gt; (64 - PRESENT_D_OFF_BITS))</div><div class='ctx'> </div><div class='ctx'> static uint64_t</div><div class='del'>-bits_for (uint64_t num)</div><div class='add'>+bits_for(uint64_t num)</div><div class='ctx'> {</div><div class='del'>-	uint64_t bits = 0, ctrl = 1;</div><div class='add'>+    uint64_t bits = 0, ctrl = 1;</div><div class='ctx'> </div><div class='del'>-	while (ctrl &lt; num) {</div><div class='del'>-		ctrl *= 2;</div><div class='del'>-		bits++;</div><div class='del'>-	}</div><div class='add'>+    while (ctrl &lt; num) {</div><div class='add'>+        ctrl *= 2;</div><div class='add'>+        bits++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return bits;</div><div class='add'>+    return bits;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_deitransform(xlator_t *this,</div><div class='del'>-                uint64_t offset)</div><div class='add'>+gf_deitransform(xlator_t *this, uint64_t offset)</div><div class='ctx'> {</div><div class='del'>-        int         cnt = 0;</div><div class='del'>-        int         max = 0;</div><div class='del'>-        int         max_bits = 0;</div><div class='del'>-        uint64_t    off_mask = 0;</div><div class='del'>-        uint64_t    host_mask = 0;</div><div class='del'>-</div><div class='del'>-        max = glusterfs_get_leaf_count(this-&gt;graph);</div><div class='del'>-</div><div class='del'>-	if (max == 1) {</div><div class='del'>-		cnt = 0;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (offset &amp; TOP_BIT) {</div><div class='del'>-                /* HUGE d_off */</div><div class='del'>-                max_bits = bits_for (max);</div><div class='del'>-                off_mask = (MASK &lt;&lt; max_bits);</div><div class='del'>-                host_mask = ~(off_mask);</div><div class='del'>-</div><div class='del'>-                cnt = offset &amp; host_mask;</div><div class='del'>-	} else {</div><div class='del'>-                /* small d_off */</div><div class='del'>-                cnt = offset % max;</div><div class='del'>-        }</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    int max = 0;</div><div class='add'>+    int max_bits = 0;</div><div class='add'>+    uint64_t off_mask = 0;</div><div class='add'>+    uint64_t host_mask = 0;</div><div class='add'>+</div><div class='add'>+    max = glusterfs_get_leaf_count(this-&gt;graph);</div><div class='add'>+</div><div class='add'>+    if (max == 1) {</div><div class='add'>+        cnt = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (offset &amp; TOP_BIT) {</div><div class='add'>+        /* HUGE d_off */</div><div class='add'>+        max_bits = bits_for(max);</div><div class='add'>+        off_mask = (MASK &lt;&lt; max_bits);</div><div class='add'>+        host_mask = ~(off_mask);</div><div class='add'>+</div><div class='add'>+        cnt = offset &amp; host_mask;</div><div class='add'>+    } else {</div><div class='add'>+        /* small d_off */</div><div class='add'>+        cnt = offset % max;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return cnt;</div><div class='add'>+    return cnt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-gf_dirent_orig_offset(xlator_t *this,</div><div class='del'>-                      uint64_t offset)</div><div class='add'>+gf_dirent_orig_offset(xlator_t *this, uint64_t offset)</div><div class='ctx'> {</div><div class='del'>-        int         max = 0;</div><div class='del'>-        int         max_bits = 0;</div><div class='del'>-        uint64_t    off_mask = 0;</div><div class='del'>-        uint64_t    orig_offset;</div><div class='del'>-</div><div class='del'>-        max = glusterfs_get_leaf_count(this-&gt;graph);</div><div class='del'>-</div><div class='del'>-	if (max == 1) {</div><div class='del'>-                orig_offset = offset;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (offset &amp; TOP_BIT) {</div><div class='del'>-                /* HUGE d_off */</div><div class='del'>-                max_bits = bits_for (max);</div><div class='del'>-                off_mask = (MASK &lt;&lt; max_bits);</div><div class='del'>-                orig_offset = ((offset &amp; ~TOP_BIT) &amp; off_mask) &lt;&lt; SHIFT_BITS;</div><div class='del'>-	} else {</div><div class='del'>-                /* small d_off */</div><div class='del'>-                orig_offset = offset / max;</div><div class='del'>-        }</div><div class='add'>+    int max = 0;</div><div class='add'>+    int max_bits = 0;</div><div class='add'>+    uint64_t off_mask = 0;</div><div class='add'>+    uint64_t orig_offset;</div><div class='add'>+</div><div class='add'>+    max = glusterfs_get_leaf_count(this-&gt;graph);</div><div class='add'>+</div><div class='add'>+    if (max == 1) {</div><div class='add'>+        orig_offset = offset;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (offset &amp; TOP_BIT) {</div><div class='add'>+        /* HUGE d_off */</div><div class='add'>+        max_bits = bits_for(max);</div><div class='add'>+        off_mask = (MASK &lt;&lt; max_bits);</div><div class='add'>+        orig_offset = ((offset &amp; ~TOP_BIT) &amp; off_mask) &lt;&lt; SHIFT_BITS;</div><div class='add'>+    } else {</div><div class='add'>+        /* small d_off */</div><div class='add'>+        orig_offset = offset / max;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return orig_offset;</div><div class='add'>+    return orig_offset;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_itransform (xlator_t *this, uint64_t x, uint64_t *y_p, int client_id)</div><div class='add'>+gf_itransform(xlator_t *this, uint64_t x, uint64_t *y_p, int client_id)</div><div class='ctx'> {</div><div class='del'>-        int         max = 0;</div><div class='del'>-        uint64_t    y = 0;</div><div class='del'>-        uint64_t    hi_mask = 0;</div><div class='del'>-        uint64_t    off_mask = 0;</div><div class='del'>-        int         max_bits = 0;</div><div class='del'>-</div><div class='del'>-        if (x == ((uint64_t) -1)) {</div><div class='del'>-                y = (uint64_t) -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!x) {</div><div class='del'>-                y = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        max = glusterfs_get_leaf_count(this-&gt;graph);</div><div class='del'>-</div><div class='del'>-	if (max == 1) {</div><div class='del'>-		y = x;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        max_bits = bits_for (max);</div><div class='del'>-</div><div class='del'>-        hi_mask = ~(PRESENT_MASK &gt;&gt; (max_bits + 1));</div><div class='del'>-</div><div class='del'>-        if (x &amp; hi_mask) {</div><div class='del'>-                /* HUGE d_off */</div><div class='del'>-                off_mask = MASK &lt;&lt; max_bits;</div><div class='del'>-                y = TOP_BIT | ((x &gt;&gt; SHIFT_BITS) &amp; off_mask) | client_id;</div><div class='del'>-        } else {</div><div class='del'>-                /* small d_off */</div><div class='del'>-                y = ((x * max) + client_id);</div><div class='del'>-        }</div><div class='add'>+    int max = 0;</div><div class='add'>+    uint64_t y = 0;</div><div class='add'>+    uint64_t hi_mask = 0;</div><div class='add'>+    uint64_t off_mask = 0;</div><div class='add'>+    int max_bits = 0;</div><div class='add'>+</div><div class='add'>+    if (x == ((uint64_t)-1)) {</div><div class='add'>+        y = (uint64_t)-1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!x) {</div><div class='add'>+        y = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    max = glusterfs_get_leaf_count(this-&gt;graph);</div><div class='add'>+</div><div class='add'>+    if (max == 1) {</div><div class='add'>+        y = x;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    max_bits = bits_for(max);</div><div class='add'>+</div><div class='add'>+    hi_mask = ~(PRESENT_MASK &gt;&gt; (max_bits + 1));</div><div class='add'>+</div><div class='add'>+    if (x &amp; hi_mask) {</div><div class='add'>+        /* HUGE d_off */</div><div class='add'>+        off_mask = MASK &lt;&lt; max_bits;</div><div class='add'>+        y = TOP_BIT | ((x &gt;&gt; SHIFT_BITS) &amp; off_mask) | client_id;</div><div class='add'>+    } else {</div><div class='add'>+        /* small d_off */</div><div class='add'>+        y = ((x * max) + client_id);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (y_p)</div><div class='del'>-                *y_p = y;</div><div class='add'>+    if (y_p)</div><div class='add'>+        *y_p = y;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_dirent_t *</div><div class='del'>-gf_dirent_for_name (const char *name)</div><div class='add'>+gf_dirent_for_name(const char *name)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *gf_dirent = NULL;</div><div class='add'>+    gf_dirent_t *gf_dirent = NULL;</div><div class='ctx'> </div><div class='del'>-        /* TODO: use mem-pool */</div><div class='del'>-        gf_dirent = GF_CALLOC (gf_dirent_size (name), 1,</div><div class='del'>-                               gf_common_mt_gf_dirent_t);</div><div class='del'>-        if (!gf_dirent)</div><div class='del'>-                return NULL;</div><div class='add'>+    /* TODO: use mem-pool */</div><div class='add'>+    gf_dirent = GF_CALLOC(gf_dirent_size(name), 1, gf_common_mt_gf_dirent_t);</div><div class='add'>+    if (!gf_dirent)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;gf_dirent-&gt;list);</div><div class='del'>-        strcpy (gf_dirent-&gt;d_name, name);</div><div class='add'>+    INIT_LIST_HEAD(&amp;gf_dirent-&gt;list);</div><div class='add'>+    strcpy(gf_dirent-&gt;d_name, name);</div><div class='ctx'> </div><div class='del'>-        gf_dirent-&gt;d_off = 0;</div><div class='del'>-        gf_dirent-&gt;d_ino = -1;</div><div class='del'>-        gf_dirent-&gt;d_type = 0;</div><div class='del'>-        gf_dirent-&gt;d_len = strlen (name);</div><div class='add'>+    gf_dirent-&gt;d_off = 0;</div><div class='add'>+    gf_dirent-&gt;d_ino = -1;</div><div class='add'>+    gf_dirent-&gt;d_type = 0;</div><div class='add'>+    gf_dirent-&gt;d_len = strlen(name);</div><div class='ctx'> </div><div class='del'>-        return gf_dirent;</div><div class='add'>+    return gf_dirent;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_dirent_entry_free (gf_dirent_t *entry)</div><div class='add'>+gf_dirent_entry_free(gf_dirent_t *entry)</div><div class='ctx'> {</div><div class='del'>-        if (!entry)</div><div class='del'>-                return;</div><div class='add'>+    if (!entry)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (entry-&gt;dict)</div><div class='del'>-                dict_unref (entry-&gt;dict);</div><div class='del'>-        if (entry-&gt;inode)</div><div class='del'>-                inode_unref (entry-&gt;inode);</div><div class='add'>+    if (entry-&gt;dict)</div><div class='add'>+        dict_unref(entry-&gt;dict);</div><div class='add'>+    if (entry-&gt;inode)</div><div class='add'>+        inode_unref(entry-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;entry-&gt;list);</div><div class='del'>-        GF_FREE (entry);</div><div class='add'>+    list_del_init(&amp;entry-&gt;list);</div><div class='add'>+    GF_FREE(entry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_dirent_free (gf_dirent_t *entries)</div><div class='add'>+gf_dirent_free(gf_dirent_t *entries)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *entry = NULL;</div><div class='del'>-        gf_dirent_t *tmp = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!entries)</div><div class='del'>-                return;</div><div class='add'>+    if (!entries)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;entries-&gt;list))</div><div class='del'>-                return;</div><div class='add'>+    if (list_empty(&amp;entries-&gt;list))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (entry, tmp, &amp;entries-&gt;list, list) {</div><div class='del'>-                gf_dirent_entry_free (entry);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(entry, tmp, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_dirent_entry_free(entry);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_dirent_t *</div><div class='del'>-entry_copy (gf_dirent_t *source)</div><div class='add'>+entry_copy(gf_dirent_t *source)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *sink = NULL;</div><div class='add'>+    gf_dirent_t *sink = NULL;</div><div class='ctx'> </div><div class='del'>-        sink = gf_dirent_for_name (source-&gt;d_name);</div><div class='del'>-        if (!sink)</div><div class='del'>-                return NULL;</div><div class='add'>+    sink = gf_dirent_for_name(source-&gt;d_name);</div><div class='add'>+    if (!sink)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        sink-&gt;d_off = source-&gt;d_off;</div><div class='del'>-        sink-&gt;d_ino = source-&gt;d_ino;</div><div class='del'>-        sink-&gt;d_type = source-&gt;d_type;</div><div class='del'>-        sink-&gt;d_stat = source-&gt;d_stat;</div><div class='del'>-        sink-&gt;d_len  = source-&gt;d_len;</div><div class='add'>+    sink-&gt;d_off = source-&gt;d_off;</div><div class='add'>+    sink-&gt;d_ino = source-&gt;d_ino;</div><div class='add'>+    sink-&gt;d_type = source-&gt;d_type;</div><div class='add'>+    sink-&gt;d_stat = source-&gt;d_stat;</div><div class='add'>+    sink-&gt;d_len = source-&gt;d_len;</div><div class='ctx'> </div><div class='del'>-	if (source-&gt;inode)</div><div class='del'>-		sink-&gt;inode = inode_ref (source-&gt;inode);</div><div class='add'>+    if (source-&gt;inode)</div><div class='add'>+        sink-&gt;inode = inode_ref(source-&gt;inode);</div><div class='ctx'> </div><div class='del'>-	if (source-&gt;dict)</div><div class='del'>-		sink-&gt;dict = dict_ref (source-&gt;dict);</div><div class='del'>-        return sink;</div><div class='add'>+    if (source-&gt;dict)</div><div class='add'>+        sink-&gt;dict = dict_ref(source-&gt;dict);</div><div class='add'>+    return sink;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_link_inode_from_dirent (xlator_t *this, inode_t *parent, gf_dirent_t *entry)</div><div class='add'>+gf_link_inode_from_dirent(xlator_t *this, inode_t *parent, gf_dirent_t *entry)</div><div class='ctx'> {</div><div class='del'>-        inode_t     *link_inode = NULL;</div><div class='del'>-        inode_t     *tmp        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!entry-&gt;inode)</div><div class='del'>-                return;</div><div class='del'>-        link_inode = inode_link (entry-&gt;inode, parent,</div><div class='del'>-                                 entry-&gt;d_name, &amp;entry-&gt;d_stat);</div><div class='del'>-        if (!link_inode)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        inode_lookup (link_inode);</div><div class='del'>-        tmp = entry-&gt;inode;</div><div class='del'>-        entry-&gt;inode = link_inode;</div><div class='del'>-        inode_unref (tmp);</div><div class='add'>+    inode_t *link_inode = NULL;</div><div class='add'>+    inode_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if (!entry-&gt;inode)</div><div class='add'>+        return;</div><div class='add'>+    link_inode = inode_link(entry-&gt;inode, parent, entry-&gt;d_name,</div><div class='add'>+                            &amp;entry-&gt;d_stat);</div><div class='add'>+    if (!link_inode)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    inode_lookup(link_inode);</div><div class='add'>+    tmp = entry-&gt;inode;</div><div class='add'>+    entry-&gt;inode = link_inode;</div><div class='add'>+    inode_unref(tmp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: Currently, with this function, we will be breaking the</div><div class='hunk'>@@ -247,55 +243,60 @@ gf_link_inode_from_dirent (xlator_t *this, inode_t *parent, gf_dirent_t *entry)</div><div class='ctx'>    Need more thoughts before finalizing this function</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-gf_link_inodes_from_dirent (xlator_t *this, inode_t *parent,</div><div class='del'>-                            gf_dirent_t *entries)</div><div class='add'>+gf_link_inodes_from_dirent(xlator_t *this, inode_t *parent,</div><div class='add'>+                           gf_dirent_t *entries)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *entry      = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                gf_link_inode_from_dirent (this, parent, entry);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_link_inode_from_dirent(this, parent, entry);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_fill_iatt_for_dirent (gf_dirent_t *entry, inode_t *parent, xlator_t *subvol)</div><div class='add'>+gf_fill_iatt_for_dirent(gf_dirent_t *entry, inode_t *parent, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        loc_t                   loc             = {0, };</div><div class='del'>-        int                     ret             = -1;</div><div class='del'>-        char                   *path            = NULL;</div><div class='del'>-        struct iatt             iatt            = {0,};</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_grep (parent-&gt;table, parent, entry-&gt;d_name);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                loc.inode = inode_new (parent-&gt;table);</div><div class='del'>-                gf_uuid_copy (loc.inode-&gt;gfid, entry-&gt;d_stat.ia_gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (loc.pargfid, parent-&gt;gfid);</div><div class='del'>-        loc.name = entry-&gt;d_name;</div><div class='del'>-        loc.parent = inode_ref (parent);</div><div class='del'>-        ret = inode_path (loc.inode, entry-&gt;d_name, &amp;path);</div><div class='del'>-        loc.path = path;</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (subvol, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        entry-&gt;d_stat = iatt;</div><div class='del'>-        entry-&gt;inode = inode_ref (loc.inode);</div><div class='del'>-        /* We don't need to link inode here, because as part of readdirp_cbk</div><div class='del'>-         * we will link all dirents.</div><div class='del'>-         *</div><div class='del'>-         * Since we did a proper lookup, we don't need to set need_lookup</div><div class='del'>-         * flag.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_grep(parent-&gt;table, parent, entry-&gt;d_name);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        loc.inode = inode_new(parent-&gt;table);</div><div class='add'>+        gf_uuid_copy(loc.inode-&gt;gfid, entry-&gt;d_stat.ia_gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.pargfid, parent-&gt;gfid);</div><div class='add'>+    loc.name = entry-&gt;d_name;</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    ret = inode_path(loc.inode, entry-&gt;d_name, &amp;path);</div><div class='add'>+    loc.path = path;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    entry-&gt;d_stat = iatt;</div><div class='add'>+    entry-&gt;inode = inode_ref(loc.inode);</div><div class='add'>+    /* We don't need to link inode here, because as part of readdirp_cbk</div><div class='add'>+     * we will link all dirents.</div><div class='add'>+     *</div><div class='add'>+     * Since we did a proper lookup, we don't need to set need_lookup</div><div class='add'>+     * flag.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/gfdb/gfdb_data_store.c b/libglusterfs/src/gfdb/gfdb_data_store.c<br/>index 78fd22ee252..426596c571e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_data_store.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/gfdb/gfdb_data_store.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_data_store.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_data_store.c</a></div><div class='hunk'>@@ -30,11 +30,10 @@</div><div class='ctx'>  * gfdb_conn_node_t is an opaque structure.</div><div class='ctx'>  * */</div><div class='ctx'> struct gfdb_conn_node_t {</div><div class='del'>-        gfdb_connection_t       gfdb_connection;</div><div class='del'>-        struct list_head        conn_list;</div><div class='add'>+    gfdb_connection_t gfdb_connection;</div><div class='add'>+    struct list_head conn_list;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * db_conn_list is the circular linked list which</div><div class='ctx'>  * will have all the database connections for the process</div><div class='hunk'>@@ -48,173 +47,168 @@ static gfdb_conn_node_t *db_conn_list;</div><div class='ctx'>  * */</div><div class='ctx'> static pthread_mutex_t db_conn_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Checks the sanity of the connection node*/</div><div class='del'>-#define CHECK_CONN_NODE(_conn_node)\</div><div class='del'>-do {\</div><div class='del'>-        GF_ASSERT (_conn_node);\</div><div class='del'>-        GF_ASSERT (_conn_node-&gt;gfdb_connection.gf_db_connection);\</div><div class='del'>-} while (0)</div><div class='add'>+#define CHECK_CONN_NODE(_conn_node)                                            \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        GF_ASSERT(_conn_node);                                                 \</div><div class='add'>+        GF_ASSERT(_conn_node-&gt;gfdb_connection.gf_db_connection);               \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> /* Checks the sanity of the connection node and goto */</div><div class='del'>-#define CHECK_CONN_NODE_GOTO(_conn_node, label)\</div><div class='del'>-do {\</div><div class='del'>-        if (!_conn_node) {\</div><div class='del'>-                goto label;\</div><div class='del'>-        };\</div><div class='del'>-        if (!_conn_node-&gt;gfdb_connection.gf_db_connection) {\</div><div class='del'>-                goto label;\</div><div class='del'>-        };\</div><div class='del'>-} while (0)</div><div class='add'>+#define CHECK_CONN_NODE_GOTO(_conn_node, label)                                \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!_conn_node) {                                                     \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        };                                                                     \</div><div class='add'>+        if (!_conn_node-&gt;gfdb_connection.gf_db_connection) {                   \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        };                                                                     \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> /*Check if the conn node is first in the list*/</div><div class='del'>-#define IS_FIRST_NODE(db_conn_list, _conn_node)\</div><div class='del'>-        ((_conn_node == db_conn_list) ? _gf_true : _gf_false)</div><div class='del'>-</div><div class='add'>+#define IS_FIRST_NODE(db_conn_list, _conn_node)                                \</div><div class='add'>+    ((_conn_node == db_conn_list) ? _gf_true : _gf_false)</div><div class='ctx'> </div><div class='ctx'> /*Check if the conn node is the only node in the list*/</div><div class='del'>-#define IS_THE_ONLY_NODE(_conn_node)\</div><div class='del'>-((_conn_node-&gt;conn_list.next == _conn_node-&gt;conn_list.prev)\</div><div class='del'>-        ? _gf_true : _gf_false)</div><div class='del'>-</div><div class='del'>-</div><div class='add'>+#define IS_THE_ONLY_NODE(_conn_node)                                           \</div><div class='add'>+    ((_conn_node-&gt;conn_list.next == _conn_node-&gt;conn_list.prev) ? _gf_true     \</div><div class='add'>+                                                                : _gf_false)</div><div class='ctx'> </div><div class='ctx'> /*Internal Function: Adds connection node to the end of</div><div class='ctx'>  * the db connection list.*/</div><div class='ctx'> static int</div><div class='del'>-add_connection_node (gfdb_conn_node_t *_conn_node) {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (_conn_node);</div><div class='del'>-</div><div class='del'>-        /*Lock the list*/</div><div class='del'>-        ret = pthread_mutex_lock (&amp;db_conn_mutex);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ret,</div><div class='del'>-                        LG_MSG_LOCK_LIST_FAILED, "Failed lock db connection "</div><div class='del'>-                        "list %s", strerror(ret));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (db_conn_list == NULL) {</div><div class='del'>-                db_conn_list = _conn_node;</div><div class='del'>-        } else {</div><div class='del'>-                list_add_tail (&amp;_conn_node-&gt;conn_list,</div><div class='del'>-                                &amp;db_conn_list-&gt;conn_list);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*unlock the list*/</div><div class='del'>-        ret = pthread_mutex_unlock (&amp;db_conn_mutex);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ret,</div><div class='del'>-                        LG_MSG_UNLOCK_LIST_FAILED, "Failed unlock db "</div><div class='del'>-                        "connection list %s", strerror(ret));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-                /*TODO What if the unlock fails.</div><div class='del'>-                * Will it lead to deadlock?</div><div class='del'>-                * Most of the gluster code</div><div class='del'>-                * no check for unlock or destroy of mutex!*/</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+add_connection_node(gfdb_conn_node_t *_conn_node)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(_conn_node);</div><div class='add'>+</div><div class='add'>+    /*Lock the list*/</div><div class='add'>+    ret = pthread_mutex_lock(&amp;db_conn_mutex);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ret, LG_MSG_LOCK_LIST_FAILED,</div><div class='add'>+               "Failed lock db connection "</div><div class='add'>+               "list %s",</div><div class='add'>+               strerror(ret));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (db_conn_list == NULL) {</div><div class='add'>+        db_conn_list = _conn_node;</div><div class='add'>+    } else {</div><div class='add'>+        list_add_tail(&amp;_conn_node-&gt;conn_list, &amp;db_conn_list-&gt;conn_list);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*unlock the list*/</div><div class='add'>+    ret = pthread_mutex_unlock(&amp;db_conn_mutex);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ret, LG_MSG_UNLOCK_LIST_FAILED,</div><div class='add'>+               "Failed unlock db "</div><div class='add'>+               "connection list %s",</div><div class='add'>+               strerror(ret));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+        /*TODO What if the unlock fails.</div><div class='add'>+         * Will it lead to deadlock?</div><div class='add'>+         * Most of the gluster code</div><div class='add'>+         * no check for unlock or destroy of mutex!*/</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Internal Function:</div><div class='ctx'>  * Delete connection node from the list*/</div><div class='ctx'> static int</div><div class='del'>-delete_conn_node (gfdb_conn_node_t *_conn_node)</div><div class='add'>+delete_conn_node(gfdb_conn_node_t *_conn_node)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (_conn_node);</div><div class='del'>-</div><div class='del'>-        /*Lock of the list*/</div><div class='del'>-        ret = pthread_mutex_lock (&amp;db_conn_mutex);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ret,</div><div class='del'>-                        LG_MSG_LOCK_LIST_FAILED, "Failed lock on db connection"</div><div class='del'>-                        " list %s", strerror(ret));</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(_conn_node);</div><div class='add'>+</div><div class='add'>+    /*Lock of the list*/</div><div class='add'>+    ret = pthread_mutex_lock(&amp;db_conn_mutex);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ret, LG_MSG_LOCK_LIST_FAILED,</div><div class='add'>+               "Failed lock on db connection"</div><div class='add'>+               " list %s",</div><div class='add'>+               strerror(ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Remove the connection object from list*/</div><div class='add'>+    if (IS_THE_ONLY_NODE(_conn_node)) {</div><div class='add'>+        db_conn_list = NULL;</div><div class='add'>+        GF_FREE(_conn_node);</div><div class='add'>+    } else {</div><div class='add'>+        if (IS_FIRST_NODE(db_conn_list, _conn_node)) {</div><div class='add'>+            db_conn_list = list_entry(db_conn_list-&gt;conn_list.next,</div><div class='add'>+                                      gfdb_conn_node_t, conn_list);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /*Remove the connection object from list*/</div><div class='del'>-        if (IS_THE_ONLY_NODE(_conn_node)) {</div><div class='del'>-                db_conn_list = NULL;</div><div class='del'>-                GF_FREE (_conn_node);</div><div class='del'>-        } else {</div><div class='del'>-                if (IS_FIRST_NODE(db_conn_list, _conn_node)) {</div><div class='del'>-                        db_conn_list = list_entry (db_conn_list-&gt;conn_list.next,</div><div class='del'>-                                                gfdb_conn_node_t, conn_list);</div><div class='del'>-                }</div><div class='del'>-                list_del(&amp;_conn_node-&gt;conn_list);</div><div class='del'>-                GF_FREE (_conn_node);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Release the list lock*/</div><div class='del'>-        ret =  pthread_mutex_unlock (&amp;db_conn_mutex);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_WARNING, ret,</div><div class='del'>-                        LG_MSG_UNLOCK_LIST_FAILED, "Failed unlock on db "</div><div class='del'>-                        "connection list %s", strerror(ret));</div><div class='del'>-                /*TODO What if the unlock fails.</div><div class='del'>-                * Will it lead to deadlock?</div><div class='del'>-                * Most of the gluster code</div><div class='del'>-                * no check for unlock or destroy of mutex!*/</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+        list_del(&amp;_conn_node-&gt;conn_list);</div><div class='add'>+        GF_FREE(_conn_node);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Release the list lock*/</div><div class='add'>+    ret = pthread_mutex_unlock(&amp;db_conn_mutex);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_WARNING, ret, LG_MSG_UNLOCK_LIST_FAILED,</div><div class='add'>+               "Failed unlock on db "</div><div class='add'>+               "connection list %s",</div><div class='add'>+               strerror(ret));</div><div class='add'>+        /*TODO What if the unlock fails.</div><div class='add'>+         * Will it lead to deadlock?</div><div class='add'>+         * Most of the gluster code</div><div class='add'>+         * no check for unlock or destroy of mutex!*/</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Internal function: Used initialize/map db operation of</div><div class='ctx'>  * specified type of db plugin*/</div><div class='ctx'> static int</div><div class='del'>-init_db_operations (gfdb_db_type_t       gfdb_db_type,</div><div class='del'>-                    gfdb_db_operations_t *gfdb_db_operations)</div><div class='add'>+init_db_operations(gfdb_db_type_t gfdb_db_type,</div><div class='add'>+                   gfdb_db_operations_t *gfdb_db_operations)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        int ret = -1;</div><div class='add'>+    GF_ASSERT(gfdb_db_operations);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (gfdb_db_operations);</div><div class='del'>-</div><div class='del'>-        /*Clear the gfdb_db_operations*/</div><div class='del'>-        gfdb_db_operations = memset(gfdb_db_operations, 0,</div><div class='del'>-                                        sizeof(*gfdb_db_operations));</div><div class='del'>-        switch (gfdb_db_type) {</div><div class='add'>+    /*Clear the gfdb_db_operations*/</div><div class='add'>+    gfdb_db_operations = memset(gfdb_db_operations, 0,</div><div class='add'>+                                sizeof(*gfdb_db_operations));</div><div class='add'>+    switch (gfdb_db_type) {</div><div class='ctx'>         case GFDB_SQLITE3:</div><div class='del'>-                gf_sqlite3_fill_db_operations (gfdb_db_operations);</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            gf_sqlite3_fill_db_operations(gfdb_db_operations);</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         case GFDB_HYPERDEX:</div><div class='ctx'>         case GFDB_HASH_FILE_STORE:</div><div class='ctx'>         case GFDB_ROCKS_DB:</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_UNSUPPORTED_PLUGIN, "Plugin not supported");</div><div class='del'>-                break;</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_UNSUPPORTED_PLUGIN,</div><div class='add'>+                   "Plugin not supported");</div><div class='add'>+            break;</div><div class='ctx'>         case GFDB_INVALID_DB:</div><div class='ctx'>         case GFDB_DB_END:</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_INVALID_DB_TYPE, "Invalid DB Type");</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_INVALID_DB_TYPE,</div><div class='add'>+                   "Invalid DB Type");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /******************************************************************************</div><div class='ctx'>  *</div><div class='ctx'>  *                      LIBGFDB API Functions</div><div class='ctx'>  *</div><div class='ctx'>  * ****************************************************************************/</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Libgfdb API Function: Used to initialize a db connection</div><div class='ctx'>  *                      (Constructor function for db connection object)</div><div class='ctx'>  * Arguments:</div><div class='hunk'>@@ -225,85 +219,79 @@ init_db_operations (gfdb_db_type_t       gfdb_db_type,</div><div class='ctx'>  * Returns : if successful return the GFDB Connection node to the caller or</div><div class='ctx'>  *          NULL in case of failure*/</div><div class='ctx'> gfdb_conn_node_t *</div><div class='del'>-init_db (dict_t *args, gfdb_db_type_t gfdb_db_type)</div><div class='add'>+init_db(dict_t *args, gfdb_db_type_t gfdb_db_type)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        gfdb_conn_node_t *_conn_node            = NULL;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-</div><div class='del'>-        /*Create data base connection object*/</div><div class='del'>-        _conn_node = GF_CALLOC (1, sizeof(gfdb_conn_node_t),</div><div class='del'>-                                        gf_mt_db_conn_node_t);</div><div class='del'>-        if (!_conn_node) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        LG_MSG_NO_MEMORY, "Failed mem alloc for "</div><div class='del'>-                        "gfdb_conn_node_t");</div><div class='del'>-                goto alloc_failed;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Init the list component of db connection object*/</div><div class='del'>-        INIT_LIST_HEAD (&amp;_conn_node-&gt;conn_list);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Add created connection node to the list*/</div><div class='del'>-        ret = add_connection_node (_conn_node);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_ADD_TO_LIST_FAILED, "Failed to add connection "</div><div class='del'>-                        "node to list");</div><div class='del'>-                goto _conn_failed;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-</div><div class='del'>-        /*init the db ops object of db connection object*/</div><div class='del'>-        ret = init_db_operations(gfdb_db_type, db_operations_t);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_INIT_DB_FAILED, "Failed initializing database "</div><div class='del'>-                        "operation failed.");</div><div class='del'>-                goto init_db_failed;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Calling the init_db_op of the respected db type*/</div><div class='del'>-        GF_ASSERT (db_operations_t-&gt;init_db_op);</div><div class='del'>-        ret = db_operations_t-&gt;init_db_op (args, &amp;_conn_node-&gt;gfdb_connection.</div><div class='del'>-                                           gf_db_connection);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_INIT_DB_FAILED, "Failed initializing database");</div><div class='del'>-                goto init_db_failed;</div><div class='del'>-        }</div><div class='del'>-        _conn_node-&gt;gfdb_connection.gfdb_db_type = gfdb_db_type;</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        return _conn_node;</div><div class='del'>-</div><div class='del'>-        /*****Error Handling********/</div><div class='del'>-        /* If init_db_operations or init_db of plugin failed delete</div><div class='del'>-        * conn node from the list.</div><div class='del'>-        * connection node will be free by delete_conn_node*/</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_conn_node_t *_conn_node = NULL;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+</div><div class='add'>+    /*Create data base connection object*/</div><div class='add'>+    _conn_node = GF_CALLOC(1, sizeof(gfdb_conn_node_t), gf_mt_db_conn_node_t);</div><div class='add'>+    if (!_conn_node) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+               "Failed mem alloc for "</div><div class='add'>+               "gfdb_conn_node_t");</div><div class='add'>+        goto alloc_failed;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Init the list component of db connection object*/</div><div class='add'>+    INIT_LIST_HEAD(&amp;_conn_node-&gt;conn_list);</div><div class='add'>+</div><div class='add'>+    /*Add created connection node to the list*/</div><div class='add'>+    ret = add_connection_node(_conn_node);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_ADD_TO_LIST_FAILED,</div><div class='add'>+               "Failed to add connection "</div><div class='add'>+               "node to list");</div><div class='add'>+        goto _conn_failed;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+</div><div class='add'>+    /*init the db ops object of db connection object*/</div><div class='add'>+    ret = init_db_operations(gfdb_db_type, db_operations_t);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_INIT_DB_FAILED,</div><div class='add'>+               "Failed initializing database "</div><div class='add'>+               "operation failed.");</div><div class='add'>+        goto init_db_failed;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Calling the init_db_op of the respected db type*/</div><div class='add'>+    GF_ASSERT(db_operations_t-&gt;init_db_op);</div><div class='add'>+    ret = db_operations_t-&gt;init_db_op(</div><div class='add'>+        args, &amp;_conn_node-&gt;gfdb_connection.gf_db_connection);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_INIT_DB_FAILED,</div><div class='add'>+               "Failed initializing database");</div><div class='add'>+        goto init_db_failed;</div><div class='add'>+    }</div><div class='add'>+    _conn_node-&gt;gfdb_connection.gfdb_db_type = gfdb_db_type;</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    return _conn_node;</div><div class='add'>+</div><div class='add'>+    /*****Error Handling********/</div><div class='add'>+    /* If init_db_operations or init_db of plugin failed delete</div><div class='add'>+     * conn node from the list.</div><div class='add'>+     * connection node will be free by delete_conn_node*/</div><div class='ctx'> init_db_failed:</div><div class='del'>-        ret = delete_conn_node (_conn_node);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DELETE_FROM_LIST_FAILED, "Failed deleting "</div><div class='del'>-                        "connection node from list");</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='del'>-        /*if adding to the list failed free connection node*/</div><div class='add'>+    ret = delete_conn_node(_conn_node);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DELETE_FROM_LIST_FAILED,</div><div class='add'>+               "Failed deleting "</div><div class='add'>+               "connection node from list");</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='add'>+    /*if adding to the list failed free connection node*/</div><div class='ctx'> _conn_failed:</div><div class='del'>-        GF_FREE (_conn_node);</div><div class='del'>-        /*if allocation failed*/</div><div class='add'>+    GF_FREE(_conn_node);</div><div class='add'>+    /*if allocation failed*/</div><div class='ctx'> alloc_failed:</div><div class='del'>-        return NULL;</div><div class='del'>-        /*****Error Handling********/</div><div class='add'>+    return NULL;</div><div class='add'>+    /*****Error Handling********/</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Libgfdb API Function: Used to terminate/de-initialize db connection</div><div class='ctx'>  *                      (Destructor function for db connection object)</div><div class='ctx'>  * Arguments:</div><div class='hunk'>@@ -311,43 +299,38 @@ alloc_failed:</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-fini_db (gfdb_conn_node_t *_conn_node)</div><div class='add'>+fini_db(gfdb_conn_node_t *_conn_node)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE_GOTO (_conn_node, empty);</div><div class='del'>-</div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (db_operations_t-&gt;fini_db_op);</div><div class='del'>-</div><div class='del'>-        ret = db_operations_t-&gt;fini_db_op(&amp;_conn_node-&gt;gfdb_connection.</div><div class='del'>-                                          gf_db_connection);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_CLOSE_CONNECTION_FAILED, "Failed close the db "</div><div class='del'>-                        "connection");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = delete_conn_node (_conn_node);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DELETE_FROM_LIST_FAILED, "Failed deleting "</div><div class='del'>-                        "connection node from list");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_CONN_NODE_GOTO(_conn_node, empty);</div><div class='add'>+</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(db_operations_t-&gt;fini_db_op);</div><div class='add'>+</div><div class='add'>+    ret = db_operations_t-&gt;fini_db_op(</div><div class='add'>+        &amp;_conn_node-&gt;gfdb_connection.gf_db_connection);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_CLOSE_CONNECTION_FAILED,</div><div class='add'>+               "Failed close the db "</div><div class='add'>+               "connection");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = delete_conn_node(_conn_node);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DELETE_FROM_LIST_FAILED,</div><div class='add'>+               "Failed deleting "</div><div class='add'>+               "connection node from list");</div><div class='add'>+    }</div><div class='ctx'> empty:</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Libgfdb API Function: Used to insert/update records in the database</div><div class='ctx'>  *                      NOTE: In current gfdb_sqlite plugin we use that</div><div class='ctx'>  *                      same function to delete the record. Set the</div><div class='hunk'>@@ -364,36 +347,32 @@ out:</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-insert_record (gfdb_conn_node_t *_conn_node,</div><div class='del'>-               gfdb_db_record_t *gfdb_db_record)</div><div class='add'>+insert_record(gfdb_conn_node_t *_conn_node, gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='del'>-        if (db_operations_t-&gt;insert_record_op) {</div><div class='del'>-</div><div class='del'>-                ret = db_operations_t-&gt;insert_record_op (gf_db_connection,</div><div class='del'>-                                                         gfdb_db_record);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors), 0,</div><div class='del'>-                                LG_MSG_INSERT_OR_UPDATE_FAILED, "Insert/Update"</div><div class='del'>-                                " operation failed");</div><div class='del'>-                }</div><div class='add'>+    if (db_operations_t-&gt;insert_record_op) {</div><div class='add'>+        ret = db_operations_t-&gt;insert_record_op(gf_db_connection,</div><div class='add'>+                                                gfdb_db_record);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE,</div><div class='add'>+                   _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                   0, LG_MSG_INSERT_OR_UPDATE_FAILED,</div><div class='add'>+                   "Insert/Update"</div><div class='add'>+                   " operation failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Libgfdb API Function: Used to delete record from the database</div><div class='ctx'>  *                      NOTE: In the current gfdb_sqlite3 plugin</div><div class='ctx'>  *                      implementation this function is dummy.</div><div class='hunk'>@@ -405,31 +384,28 @@ insert_record (gfdb_conn_node_t *_conn_node,</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-delete_record (gfdb_conn_node_t *_conn_node,</div><div class='del'>-               gfdb_db_record_t *gfdb_db_record)</div><div class='add'>+delete_record(gfdb_conn_node_t *_conn_node, gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        if (db_operations_t-&gt;delete_record_op) {</div><div class='del'>-</div><div class='del'>-                ret = db_operations_t-&gt;delete_record_op (gf_db_connection,</div><div class='del'>-                                                         gfdb_db_record);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DELETE_FAILED, "Delete operation "</div><div class='del'>-                                "failed");</div><div class='del'>-                }</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;delete_record_op) {</div><div class='add'>+        ret = db_operations_t-&gt;delete_record_op(gf_db_connection,</div><div class='add'>+                                                gfdb_db_record);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DELETE_FAILED,</div><div class='add'>+                   "Delete operation "</div><div class='add'>+                   "failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Libgfdb API Function: Compact the database.</div><div class='hunk'>@@ -441,38 +417,31 @@ delete_record (gfdb_conn_node_t *_conn_node,</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-compact_db (gfdb_conn_node_t *_conn_node, gf_boolean_t _compact_active,</div><div class='del'>-            gf_boolean_t _compact_mode_switched)</div><div class='add'>+compact_db(gfdb_conn_node_t *_conn_node, gf_boolean_t _compact_active,</div><div class='add'>+           gf_boolean_t _compact_mode_switched)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations_t-&gt;compact_db_op) {</div><div class='del'>-</div><div class='del'>-                ret = db_operations_t-&gt;compact_db_op (gf_db_connection,</div><div class='del'>-                                                      _compact_active,</div><div class='del'>-                                                      _compact_mode_switched);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_COMPACT_FAILED, "Compaction operation "</div><div class='del'>-                                "failed");</div><div class='del'>-                }</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;compact_db_op) {</div><div class='add'>+        ret = db_operations_t-&gt;compact_db_op(gf_db_connection, _compact_active,</div><div class='add'>+                                             _compact_mode_switched);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_COMPACT_FAILED,</div><div class='add'>+                   "Compaction operation "</div><div class='add'>+                   "failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Libgfdb API Function: Query all the records from the database</div><div class='ctx'>  * Arguments:</div><div class='ctx'>  *      _conn_node      : GFDB Connection node</div><div class='hunk'>@@ -484,37 +453,30 @@ compact_db (gfdb_conn_node_t *_conn_node, gf_boolean_t _compact_active,</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-find_all (gfdb_conn_node_t      *_conn_node,</div><div class='del'>-          gf_query_callback_t   query_callback,</div><div class='del'>-          void                  *_query_cbk_args,</div><div class='del'>-          int                   query_limit)</div><div class='add'>+find_all(gfdb_conn_node_t *_conn_node, gf_query_callback_t query_callback,</div><div class='add'>+         void *_query_cbk_args, int query_limit)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations_t-&gt;find_all_op) {</div><div class='del'>-                ret = db_operations_t-&gt;find_all_op (gf_db_connection,</div><div class='del'>-                                                    query_callback,</div><div class='del'>-                                                    _query_cbk_args,</div><div class='del'>-                                                    query_limit);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED, "Find all operation "</div><div class='del'>-                                "failed");</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;find_all_op) {</div><div class='add'>+        ret = db_operations_t-&gt;find_all_op(gf_db_connection, query_callback,</div><div class='add'>+                                           _query_cbk_args, query_limit);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Find all operation "</div><div class='add'>+                   "failed");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /*Libgfdb API Function: Query records/files that have not changed/accessed</div><div class='ctx'>  *                      from a time in past to current time</div><div class='hunk'>@@ -529,35 +491,30 @@ find_all (gfdb_conn_node_t      *_conn_node,</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-find_unchanged_for_time(gfdb_conn_node_t        *_conn_node,</div><div class='del'>-                        gf_query_callback_t     query_callback,</div><div class='del'>-                        void                    *_query_cbk_args,</div><div class='del'>-                        gfdb_time_t             *for_time)</div><div class='add'>+find_unchanged_for_time(gfdb_conn_node_t *_conn_node,</div><div class='add'>+                        gf_query_callback_t query_callback,</div><div class='add'>+                        void *_query_cbk_args, gfdb_time_t *for_time)</div><div class='ctx'> {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations_t-&gt;find_unchanged_for_time_op) {</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-                ret = db_operations_t-&gt;find_unchanged_for_time_op</div><div class='del'>-                                (gf_db_connection, query_callback,</div><div class='del'>-                                _query_cbk_args, for_time);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED, "Find unchanged "</div><div class='del'>-                                "operation failed");</div><div class='del'>-                }</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;find_unchanged_for_time_op) {</div><div class='add'>+        ret = db_operations_t-&gt;find_unchanged_for_time_op(</div><div class='add'>+            gf_db_connection, query_callback, _query_cbk_args, for_time);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Find unchanged "</div><div class='add'>+                   "operation failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Libgfdb API Function: Query records/files that have changed/accessed from a</div><div class='hunk'>@@ -573,36 +530,29 @@ find_unchanged_for_time(gfdb_conn_node_t        *_conn_node,</div><div class='ctx'>  * Returns : if successful return 0 or</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='del'>-find_recently_changed_files(gfdb_conn_node_t    *_conn_node,</div><div class='add'>+find_recently_changed_files(gfdb_conn_node_t *_conn_node,</div><div class='ctx'>                             gf_query_callback_t query_callback,</div><div class='del'>-                            void                *_query_cbk_args,</div><div class='del'>-                            gfdb_time_t         *from_time)</div><div class='add'>+                            void *_query_cbk_args, gfdb_time_t *from_time)</div><div class='ctx'> {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        if (db_operations_t-&gt;find_recently_changed_files_op) {</div><div class='del'>-</div><div class='del'>-                ret =  db_operations_t-&gt;find_recently_changed_files_op (</div><div class='del'>-                                gf_db_connection, query_callback,</div><div class='del'>-                                _query_cbk_args, from_time);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED,</div><div class='del'>-                                "Find changed operation failed");</div><div class='del'>-                }</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;find_recently_changed_files_op) {</div><div class='add'>+        ret = db_operations_t-&gt;find_recently_changed_files_op(</div><div class='add'>+            gf_db_connection, query_callback, _query_cbk_args, from_time);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Find changed operation failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Libgfdb API Function: Query records/files that have not changed/accessed</div><div class='hunk'>@@ -624,38 +574,31 @@ find_recently_changed_files(gfdb_conn_node_t    *_conn_node,</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='ctx'> find_unchanged_for_time_freq(gfdb_conn_node_t *_conn_node,</div><div class='del'>-                                        gf_query_callback_t query_callback,</div><div class='del'>-                                        void *_query_cbk_args,</div><div class='del'>-                                        gfdb_time_t *for_time,</div><div class='del'>-                                        int write_freq_thresold,</div><div class='del'>-                                        int read_freq_thresold,</div><div class='del'>-                                        gf_boolean_t _clear_counters)</div><div class='add'>+                             gf_query_callback_t query_callback,</div><div class='add'>+                             void *_query_cbk_args, gfdb_time_t *for_time,</div><div class='add'>+                             int write_freq_thresold, int read_freq_thresold,</div><div class='add'>+                             gf_boolean_t _clear_counters)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        if (db_operations_t-&gt;find_unchanged_for_time_freq_op) {</div><div class='del'>-</div><div class='del'>-                ret = db_operations_t-&gt;find_unchanged_for_time_freq_op(</div><div class='del'>-                                gf_db_connection, query_callback,</div><div class='del'>-                                _query_cbk_args, for_time,</div><div class='del'>-                                write_freq_thresold, read_freq_thresold,</div><div class='del'>-                                _clear_counters);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED,</div><div class='del'>-                                "Find unchanged with freq operation failed");</div><div class='del'>-                }</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;find_unchanged_for_time_freq_op) {</div><div class='add'>+        ret = db_operations_t-&gt;find_unchanged_for_time_freq_op(</div><div class='add'>+            gf_db_connection, query_callback, _query_cbk_args, for_time,</div><div class='add'>+            write_freq_thresold, read_freq_thresold, _clear_counters);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Find unchanged with freq operation failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Libgfdb API Function: Query records/files that have changed/accessed from a</div><div class='hunk'>@@ -677,44 +620,34 @@ find_unchanged_for_time_freq(gfdb_conn_node_t *_conn_node,</div><div class='ctx'>  *          -ve value in case of failure*/</div><div class='ctx'> int</div><div class='ctx'> find_recently_changed_files_freq(gfdb_conn_node_t *_conn_node,</div><div class='del'>-                                gf_query_callback_t query_callback,</div><div class='del'>-                                void *_query_cbk_args,</div><div class='del'>-                                gfdb_time_t *from_time,</div><div class='del'>-                                int write_freq_thresold,</div><div class='del'>-                                int read_freq_thresold,</div><div class='del'>-                                gf_boolean_t _clear_counters)</div><div class='add'>+                                 gf_query_callback_t query_callback,</div><div class='add'>+                                 void *_query_cbk_args, gfdb_time_t *from_time,</div><div class='add'>+                                 int write_freq_thresold,</div><div class='add'>+                                 int read_freq_thresold,</div><div class='add'>+                                 gf_boolean_t _clear_counters)</div><div class='ctx'> {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations_t = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='ctx'> </div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations_t   = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(_conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+    CHECK_CONN_NODE(_conn_node);</div><div class='ctx'> </div><div class='del'>-        if (db_operations_t-&gt;find_recently_changed_files_freq_op) {</div><div class='del'>-</div><div class='del'>-                ret =  db_operations_t-&gt;find_recently_changed_files_freq_op(</div><div class='del'>-                                gf_db_connection, query_callback,</div><div class='del'>-                                _query_cbk_args, from_time,</div><div class='del'>-                                write_freq_thresold, read_freq_thresold,</div><div class='del'>-                                _clear_counters);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED,</div><div class='del'>-                                "Find changed with freq operation failed");</div><div class='del'>-                }</div><div class='add'>+    db_operations_t = &amp;_conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = _conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='ctx'> </div><div class='add'>+    if (db_operations_t-&gt;find_recently_changed_files_freq_op) {</div><div class='add'>+        ret = db_operations_t-&gt;find_recently_changed_files_freq_op(</div><div class='add'>+            gf_db_connection, query_callback, _query_cbk_args, from_time,</div><div class='add'>+            write_freq_thresold, read_freq_thresold, _clear_counters);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Find changed with freq operation failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Libgfdb API Function: Clear the heat for all the files</div><div class='ctx'>  *</div><div class='ctx'>  *  Arguments:</div><div class='hunk'>@@ -725,30 +658,29 @@ find_recently_changed_files_freq(gfdb_conn_node_t *_conn_node,</div><div class='ctx'>  **/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clear_files_heat (gfdb_conn_node_t *conn_node)</div><div class='add'>+clear_files_heat(gfdb_conn_node_t *conn_node)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations     = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations-&gt;clear_files_heat_op) {</div><div class='del'>-                ret =  db_operations-&gt;clear_files_heat_op (gf_db_connection);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INSERT_OR_UPDATE_FAILED,</div><div class='del'>-                                "Clear files heat operation failed");</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_CONN_NODE(conn_node);</div><div class='add'>+</div><div class='add'>+    db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+</div><div class='add'>+    if (db_operations-&gt;clear_files_heat_op) {</div><div class='add'>+        ret = db_operations-&gt;clear_files_heat_op(gf_db_connection);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='add'>+                   LG_MSG_INSERT_OR_UPDATE_FAILED,</div><div class='add'>+                   "Clear files heat operation failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Libgfdb API Function: Function to extract version of the db</div><div class='ctx'>  * Input:</div><div class='ctx'>  * gfdb_conn_node_t *conn_node        : GFDB Connection node</div><div class='hunk'>@@ -761,122 +693,111 @@ clear_files_heat (gfdb_conn_node_t *conn_node)</div><div class='ctx'>  *      On failure return -1</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-get_db_version (gfdb_conn_node_t *conn_node, char **version)</div><div class='add'>+get_db_version(gfdb_conn_node_t *conn_node, char **version)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        gfdb_db_operations_t *db_operations     = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations-&gt;get_db_version) {</div><div class='del'>-                ret =  db_operations-&gt;get_db_version (gf_db_connection,</div><div class='del'>-                                                      version);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED,</div><div class='del'>-                                "Get version failed");</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gfdb_db_operations_t *db_operations = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_CONN_NODE(conn_node);</div><div class='add'>+</div><div class='add'>+    db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+</div><div class='add'>+    if (db_operations-&gt;get_db_version) {</div><div class='add'>+        ret = db_operations-&gt;get_db_version(gf_db_connection, version);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Get version failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-get_db_params (gfdb_conn_node_t *conn_node, char *param_key,</div><div class='del'>-                char **param_value)</div><div class='add'>+get_db_params(gfdb_conn_node_t *conn_node, char *param_key, char **param_value)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        gfdb_db_operations_t *db_operations     = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations-&gt;get_db_params) {</div><div class='del'>-                ret =  db_operations-&gt;get_db_params (gf_db_connection,</div><div class='del'>-                                                     param_key,</div><div class='del'>-                                                     param_value);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_FIND_OP_FAILED,</div><div class='del'>-                                "Get setting failed");</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_db_operations_t *db_operations = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_CONN_NODE(conn_node);</div><div class='add'>+</div><div class='add'>+    db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+</div><div class='add'>+    if (db_operations-&gt;get_db_params) {</div><div class='add'>+        ret = db_operations-&gt;get_db_params(gf_db_connection, param_key,</div><div class='add'>+                                           param_value);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED,</div><div class='add'>+                   "Get setting failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-set_db_params (gfdb_conn_node_t *conn_node, char *param_key,</div><div class='del'>-                char *param_value)</div><div class='add'>+set_db_params(gfdb_conn_node_t *conn_node, char *param_key, char *param_value)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        gfdb_db_operations_t *db_operations     = NULL;</div><div class='del'>-        void *gf_db_connection                  = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_CONN_NODE(conn_node);</div><div class='del'>-</div><div class='del'>-        db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='del'>-        gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='del'>-</div><div class='del'>-        if (db_operations-&gt;set_db_params) {</div><div class='del'>-                ret =  db_operations-&gt;set_db_params (gf_db_connection,</div><div class='del'>-                                                     param_key,</div><div class='del'>-                                                     param_value);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INSERT_OR_UPDATE_FAILED,</div><div class='del'>-                                "Failed to set database setting");</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_db_operations_t *db_operations = NULL;</div><div class='add'>+    void *gf_db_connection = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_CONN_NODE(conn_node);</div><div class='add'>+</div><div class='add'>+    db_operations = &amp;conn_node-&gt;gfdb_connection.gfdb_db_operations;</div><div class='add'>+    gf_db_connection = conn_node-&gt;gfdb_connection.gf_db_connection;</div><div class='add'>+</div><div class='add'>+    if (db_operations-&gt;set_db_params) {</div><div class='add'>+        ret = db_operations-&gt;set_db_params(gf_db_connection, param_key,</div><div class='add'>+                                           param_value);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='add'>+                   LG_MSG_INSERT_OR_UPDATE_FAILED,</div><div class='add'>+                   "Failed to set database setting");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static const</div><div class='del'>-char *get_db_path_key()</div><div class='add'>+static const char *</div><div class='add'>+get_db_path_key()</div><div class='ctx'> {</div><div class='del'>-        return GFDB_SQL_PARAM_DBPATH;</div><div class='add'>+    return GFDB_SQL_PARAM_DBPATH;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void get_gfdb_methods (gfdb_methods_t *methods)</div><div class='add'>+void</div><div class='add'>+get_gfdb_methods(gfdb_methods_t *methods)</div><div class='ctx'> {</div><div class='del'>-        methods-&gt;init_db = init_db;</div><div class='del'>-        methods-&gt;fini_db = fini_db;</div><div class='del'>-        methods-&gt;find_all = find_all;</div><div class='del'>-        methods-&gt;find_unchanged_for_time = find_unchanged_for_time;</div><div class='del'>-        methods-&gt;find_recently_changed_files = find_recently_changed_files;</div><div class='del'>-        methods-&gt;find_unchanged_for_time_freq = find_unchanged_for_time_freq;</div><div class='del'>-        methods-&gt;find_recently_changed_files_freq =</div><div class='del'>-                                               find_recently_changed_files_freq;</div><div class='del'>-        methods-&gt;clear_files_heat = clear_files_heat;</div><div class='del'>-        methods-&gt;get_db_version = get_db_version;</div><div class='del'>-        methods-&gt;get_db_params = get_db_params;</div><div class='del'>-        methods-&gt;set_db_params = set_db_params;</div><div class='del'>-        methods-&gt;get_db_path_key = get_db_path_key;</div><div class='del'>-</div><div class='del'>-        /* Query Record related functions */</div><div class='del'>-        methods-&gt;gfdb_query_record_new = gfdb_query_record_new;</div><div class='del'>-        methods-&gt;gfdb_query_record_free = gfdb_query_record_free;</div><div class='del'>-        methods-&gt;gfdb_add_link_to_query_record = gfdb_add_link_to_query_record;</div><div class='del'>-        methods-&gt;gfdb_write_query_record = gfdb_write_query_record;</div><div class='del'>-        methods-&gt;gfdb_read_query_record = gfdb_read_query_record;</div><div class='del'>-</div><div class='del'>-        /* Link info related functions */</div><div class='del'>-        methods-&gt;gfdb_link_info_new = gfdb_link_info_new;</div><div class='del'>-        methods-&gt;gfdb_link_info_free = gfdb_link_info_free;</div><div class='del'>-</div><div class='del'>-        /* Compaction related functions */</div><div class='del'>-        methods-&gt;compact_db = compact_db;</div><div class='add'>+    methods-&gt;init_db = init_db;</div><div class='add'>+    methods-&gt;fini_db = fini_db;</div><div class='add'>+    methods-&gt;find_all = find_all;</div><div class='add'>+    methods-&gt;find_unchanged_for_time = find_unchanged_for_time;</div><div class='add'>+    methods-&gt;find_recently_changed_files = find_recently_changed_files;</div><div class='add'>+    methods-&gt;find_unchanged_for_time_freq = find_unchanged_for_time_freq;</div><div class='add'>+    methods</div><div class='add'>+        -&gt;find_recently_changed_files_freq = find_recently_changed_files_freq;</div><div class='add'>+    methods-&gt;clear_files_heat = clear_files_heat;</div><div class='add'>+    methods-&gt;get_db_version = get_db_version;</div><div class='add'>+    methods-&gt;get_db_params = get_db_params;</div><div class='add'>+    methods-&gt;set_db_params = set_db_params;</div><div class='add'>+    methods-&gt;get_db_path_key = get_db_path_key;</div><div class='add'>+</div><div class='add'>+    /* Query Record related functions */</div><div class='add'>+    methods-&gt;gfdb_query_record_new = gfdb_query_record_new;</div><div class='add'>+    methods-&gt;gfdb_query_record_free = gfdb_query_record_free;</div><div class='add'>+    methods-&gt;gfdb_add_link_to_query_record = gfdb_add_link_to_query_record;</div><div class='add'>+    methods-&gt;gfdb_write_query_record = gfdb_write_query_record;</div><div class='add'>+    methods-&gt;gfdb_read_query_record = gfdb_read_query_record;</div><div class='add'>+</div><div class='add'>+    /* Link info related functions */</div><div class='add'>+    methods-&gt;gfdb_link_info_new = gfdb_link_info_new;</div><div class='add'>+    methods-&gt;gfdb_link_info_free = gfdb_link_info_free;</div><div class='add'>+</div><div class='add'>+    /* Compaction related functions */</div><div class='add'>+    methods-&gt;compact_db = compact_db;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/libglusterfs/src/gfdb/gfdb_data_store_helper.c b/libglusterfs/src/gfdb/gfdb_data_store_helper.c<br/>index 39a97ff73d9..fb01a6c699b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_data_store_helper.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/gfdb/gfdb_data_store_helper.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_data_store_helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_data_store_helper.c</a></div><div class='hunk'>@@ -9,151 +9,139 @@</div><div class='ctx'>  * ****************************************************************************/</div><div class='ctx'> </div><div class='ctx'> /*Create a single link info structure*/</div><div class='del'>-gfdb_link_info_t*</div><div class='del'>-gfdb_link_info_new ()</div><div class='add'>+gfdb_link_info_t *</div><div class='add'>+gfdb_link_info_new()</div><div class='ctx'> {</div><div class='del'>-        gfdb_link_info_t *link_info = NULL;</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='ctx'> </div><div class='del'>-        link_info = GF_CALLOC (1, sizeof(gfdb_link_info_t),</div><div class='del'>-                                        gf_mt_gfdb_link_info_t);</div><div class='del'>-        if (!link_info) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        LG_MSG_NO_MEMORY, "Memory allocation failed for "</div><div class='del'>-                        "link_info ");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    link_info = GF_CALLOC(1, sizeof(gfdb_link_info_t), gf_mt_gfdb_link_info_t);</div><div class='add'>+    if (!link_info) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+               "Memory allocation failed for "</div><div class='add'>+               "link_info ");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;link_info-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;link_info-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return link_info;</div><div class='add'>+    return link_info;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Destroy a link info structure*/</div><div class='ctx'> void</div><div class='ctx'> gfdb_link_info_free(gfdb_link_info_t *link_info)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (link_info);</div><div class='add'>+    GF_FREE(link_info);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Function to create the query_record*/</div><div class='ctx'> gfdb_query_record_t *</div><div class='ctx'> gfdb_query_record_new()</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gfdb_query_record_t *query_record = NULL;</div><div class='del'>-</div><div class='del'>-        query_record = GF_CALLOC (1, sizeof(gfdb_query_record_t),</div><div class='del'>-                                        gf_mt_gfdb_query_record_t);</div><div class='del'>-        if (!query_record) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        LG_MSG_NO_MEMORY, "Memory allocation failed for "</div><div class='del'>-                        "query_record ");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_query_record_t *query_record = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;query_record-&gt;link_list);</div><div class='add'>+    query_record = GF_CALLOC(1, sizeof(gfdb_query_record_t),</div><div class='add'>+                             gf_mt_gfdb_query_record_t);</div><div class='add'>+    if (!query_record) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+               "Memory allocation failed for "</div><div class='add'>+               "query_record ");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;query_record-&gt;link_list);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                GF_FREE (query_record);</div><div class='del'>-        }</div><div class='del'>-        return query_record;</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        GF_FREE(query_record);</div><div class='add'>+    }</div><div class='add'>+    return query_record;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Function to delete a single linkinfo from list*/</div><div class='ctx'> static void</div><div class='del'>-gfdb_delete_linkinfo_from_list (gfdb_link_info_t **link_info)</div><div class='add'>+gfdb_delete_linkinfo_from_list(gfdb_link_info_t **link_info)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, link_info, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, *link_info, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, link_info, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, *link_info, out);</div><div class='ctx'> </div><div class='del'>-        /*Remove hard link from list*/</div><div class='del'>-        list_del(&amp;(*link_info)-&gt;list);</div><div class='del'>-        gfdb_link_info_free (*link_info);</div><div class='del'>-        link_info = NULL;</div><div class='add'>+    /*Remove hard link from list*/</div><div class='add'>+    list_del(&amp;(*link_info)-&gt;list);</div><div class='add'>+    gfdb_link_info_free(*link_info);</div><div class='add'>+    link_info = NULL;</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*Function to destroy link_info list*/</div><div class='ctx'> void</div><div class='del'>-gfdb_free_link_info_list (gfdb_query_record_t *query_record)</div><div class='add'>+gfdb_free_link_info_list(gfdb_query_record_t *query_record)</div><div class='ctx'> {</div><div class='del'>-        gfdb_link_info_t        *link_info = NULL;</div><div class='del'>-        gfdb_link_info_t        *temp = NULL;</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='add'>+    gfdb_link_info_t *temp = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe(link_info, temp,</div><div class='del'>-                        &amp;query_record-&gt;link_list, list)</div><div class='del'>-        {</div><div class='del'>-                gfdb_delete_linkinfo_from_list (&amp;link_info);</div><div class='del'>-                link_info = NULL;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(link_info, temp, &amp;query_record-&gt;link_list, list)</div><div class='add'>+    {</div><div class='add'>+        gfdb_delete_linkinfo_from_list(&amp;link_info);</div><div class='add'>+        link_info = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Function to add linkinfo to the query record */</div><div class='ctx'> int</div><div class='del'>-gfdb_add_link_to_query_record (gfdb_query_record_t      *query_record,</div><div class='del'>-                           uuid_t                   pgfid,</div><div class='del'>-                           char               *base_name)</div><div class='add'>+gfdb_add_link_to_query_record(gfdb_query_record_t *query_record, uuid_t pgfid,</div><div class='add'>+                              char *base_name)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        gfdb_link_info_t *link_info             = NULL;</div><div class='del'>-        int base_name_len                       = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='add'>+    int base_name_len = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, pgfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, base_name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, pgfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, base_name, out);</div><div class='ctx'> </div><div class='del'>-        link_info = gfdb_link_info_new ();</div><div class='del'>-        if (!link_info) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    link_info = gfdb_link_info_new();</div><div class='add'>+    if (!link_info) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (link_info-&gt;pargfid, pgfid);</div><div class='del'>-        base_name_len = strlen (base_name);</div><div class='del'>-        memcpy (link_info-&gt;file_name, base_name, base_name_len);</div><div class='del'>-        link_info-&gt;file_name[base_name_len] = '\0';</div><div class='add'>+    gf_uuid_copy(link_info-&gt;pargfid, pgfid);</div><div class='add'>+    base_name_len = strlen(base_name);</div><div class='add'>+    memcpy(link_info-&gt;file_name, base_name, base_name_len);</div><div class='add'>+    link_info-&gt;file_name[base_name_len] = '\0';</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;link_info-&gt;list,</div><div class='del'>-                        &amp;query_record-&gt;link_list);</div><div class='add'>+    list_add_tail(&amp;link_info-&gt;list, &amp;query_record-&gt;link_list);</div><div class='ctx'> </div><div class='del'>-        query_record-&gt;link_count++;</div><div class='add'>+    query_record-&gt;link_count++;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gfdb_link_info_free (link_info);</div><div class='del'>-                link_info = NULL;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        gfdb_link_info_free(link_info);</div><div class='add'>+        link_info = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Function to destroy query record*/</div><div class='ctx'> void</div><div class='ctx'> gfdb_query_record_free(gfdb_query_record_t *query_record)</div><div class='ctx'> {</div><div class='del'>-        if (query_record) {</div><div class='del'>-                gfdb_free_link_info_list (query_record);</div><div class='del'>-                GF_FREE (query_record);</div><div class='del'>-        }</div><div class='add'>+    if (query_record) {</div><div class='add'>+        gfdb_free_link_info_list(query_record);</div><div class='add'>+        GF_FREE(query_record);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /******************************************************************************</div><div class='ctx'>                 SERIALIZATION/DE-SERIALIZATION OF QUERY RECORD</div><div class='ctx'> *******************************************************************************/</div><div class='hunk'>@@ -197,40 +185,39 @@ gfdb_query_record_free(gfdb_query_record_t *query_record)</div><div class='ctx'>  * ****************************************************************************/</div><div class='ctx'> </div><div class='ctx'> #define GFDB_QUERY_RECORD_FOOTER 0xBAADF00D</div><div class='del'>-#define UUID_LEN                 16</div><div class='add'>+#define UUID_LEN 16</div><div class='ctx'> </div><div class='ctx'> /*Function to get the potential length of the serialized buffer*/</div><div class='ctx'> static int32_t</div><div class='del'>-gfdb_query_record_serialized_length (gfdb_query_record_t *query_record)</div><div class='add'>+gfdb_query_record_serialized_length(gfdb_query_record_t *query_record)</div><div class='ctx'> {</div><div class='del'>-        int32_t len                         = -1;</div><div class='del'>-        gfdb_link_info_t *link_info     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='add'>+    int32_t len = -1;</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Length of GFID */</div><div class='del'>-        len = UUID_LEN;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='ctx'> </div><div class='del'>-        /* length of number of links*/</div><div class='del'>-        len += sizeof (int32_t);</div><div class='add'>+    /* Length of GFID */</div><div class='add'>+    len = UUID_LEN;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (link_info, &amp;query_record-&gt;link_list, list) {</div><div class='add'>+    /* length of number of links*/</div><div class='add'>+    len += sizeof(int32_t);</div><div class='ctx'> </div><div class='del'>-                /* length of PFID */</div><div class='del'>-                len += UUID_LEN;</div><div class='add'>+    list_for_each_entry(link_info, &amp;query_record-&gt;link_list, list)</div><div class='add'>+    {</div><div class='add'>+        /* length of PFID */</div><div class='add'>+        len += UUID_LEN;</div><div class='ctx'> </div><div class='del'>-                /* Add size of base name length*/</div><div class='del'>-                len += sizeof (int32_t);</div><div class='add'>+        /* Add size of base name length*/</div><div class='add'>+        len += sizeof(int32_t);</div><div class='ctx'> </div><div class='del'>-                /* Length of base_name */</div><div class='del'>-                len += strlen (link_info-&gt;file_name);</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+        /* Length of base_name */</div><div class='add'>+        len += strlen(link_info-&gt;file_name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* length of footer */</div><div class='del'>-        len += sizeof (int32_t);</div><div class='add'>+    /* length of footer */</div><div class='add'>+    len += sizeof(int32_t);</div><div class='ctx'> out:</div><div class='del'>-        return len;</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function for serializing query record.</div><div class='hunk'>@@ -259,210 +246,200 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  * */</div><div class='ctx'> static int</div><div class='del'>-gfdb_query_record_serialize (gfdb_query_record_t *query_record,</div><div class='del'>-                             char **in_buffer)</div><div class='add'>+gfdb_query_record_serialize(gfdb_query_record_t *query_record, char **in_buffer)</div><div class='ctx'> {</div><div class='del'>-        gfdb_link_info_t *link_info     = NULL;</div><div class='del'>-        int              count          = -1;</div><div class='del'>-        int              base_name_len  = 0;</div><div class='del'>-        int              buffer_length  = 0;</div><div class='del'>-        int              footer         = GFDB_QUERY_RECORD_FOOTER;</div><div class='del'>-        char             *buffer        = NULL;</div><div class='del'>-        char             *ret_buffer    = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE,</div><div class='del'>-                             (query_record-&gt;link_count &gt; 0), out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, in_buffer, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Calculate the total length of the serialized buffer */</div><div class='del'>-        buffer_length = gfdb_query_record_serialized_length (query_record);</div><div class='del'>-        if (buffer_length &lt;= 0) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Failed to calculate the length of "</div><div class='del'>-                        "serialized buffer");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Allocate memory to the serialized buffer */</div><div class='del'>-        ret_buffer = GF_CALLOC (1, buffer_length,  gf_common_mt_char);</div><div class='del'>-        if (!ret_buffer) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Memory allocation failed for "</div><div class='del'>-                        "serialized buffer.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buffer = ret_buffer;</div><div class='del'>-</div><div class='del'>-        count = 0;</div><div class='del'>-</div><div class='del'>-        /* Copying the GFID */</div><div class='del'>-        memcpy (buffer, query_record-&gt;gfid, UUID_LEN);</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='add'>+    int count = -1;</div><div class='add'>+    int base_name_len = 0;</div><div class='add'>+    int buffer_length = 0;</div><div class='add'>+    int footer = GFDB_QUERY_RECORD_FOOTER;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    char *ret_buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (query_record-&gt;link_count &gt; 0), out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, in_buffer, out);</div><div class='add'>+</div><div class='add'>+    /* Calculate the total length of the serialized buffer */</div><div class='add'>+    buffer_length = gfdb_query_record_serialized_length(query_record);</div><div class='add'>+    if (buffer_length &lt;= 0) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed to calculate the length of "</div><div class='add'>+               "serialized buffer");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Allocate memory to the serialized buffer */</div><div class='add'>+    ret_buffer = GF_CALLOC(1, buffer_length, gf_common_mt_char);</div><div class='add'>+    if (!ret_buffer) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Memory allocation failed for "</div><div class='add'>+               "serialized buffer.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buffer = ret_buffer;</div><div class='add'>+</div><div class='add'>+    count = 0;</div><div class='add'>+</div><div class='add'>+    /* Copying the GFID */</div><div class='add'>+    memcpy(buffer, query_record-&gt;gfid, UUID_LEN);</div><div class='add'>+    buffer += UUID_LEN;</div><div class='add'>+    count += UUID_LEN;</div><div class='add'>+</div><div class='add'>+    /* Copying the number of links */</div><div class='add'>+    memcpy(buffer, &amp;query_record-&gt;link_count, sizeof(int32_t));</div><div class='add'>+    buffer += sizeof(int32_t);</div><div class='add'>+    count += sizeof(int32_t);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(link_info, &amp;query_record-&gt;link_list, list)</div><div class='add'>+    {</div><div class='add'>+        /* Copying the PFID */</div><div class='add'>+        memcpy(buffer, link_info-&gt;pargfid, UUID_LEN);</div><div class='ctx'>         buffer += UUID_LEN;</div><div class='ctx'>         count += UUID_LEN;</div><div class='ctx'> </div><div class='del'>-        /* Copying the number of links */</div><div class='del'>-        memcpy (buffer, &amp;query_record-&gt;link_count, sizeof (int32_t));</div><div class='del'>-        buffer += sizeof (int32_t);</div><div class='del'>-        count += sizeof (int32_t);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (link_info, &amp;query_record-&gt;link_list, list) {</div><div class='del'>-</div><div class='del'>-                /* Copying the PFID */</div><div class='del'>-                memcpy(buffer, link_info-&gt;pargfid, UUID_LEN);</div><div class='del'>-                buffer += UUID_LEN;</div><div class='del'>-                count += UUID_LEN;</div><div class='del'>-</div><div class='del'>-                /* Copying base name length*/</div><div class='del'>-                base_name_len = strlen (link_info-&gt;file_name);</div><div class='del'>-                memcpy (buffer, &amp;base_name_len, sizeof (int32_t));</div><div class='del'>-                buffer += sizeof (int32_t);</div><div class='del'>-                count += sizeof (int32_t);</div><div class='add'>+        /* Copying base name length*/</div><div class='add'>+        base_name_len = strlen(link_info-&gt;file_name);</div><div class='add'>+        memcpy(buffer, &amp;base_name_len, sizeof(int32_t));</div><div class='add'>+        buffer += sizeof(int32_t);</div><div class='add'>+        count += sizeof(int32_t);</div><div class='ctx'> </div><div class='del'>-                /* Length of base_name */</div><div class='del'>-                memcpy(buffer, link_info-&gt;file_name, base_name_len);</div><div class='del'>-                buffer += base_name_len;</div><div class='del'>-                count += base_name_len;</div><div class='add'>+        /* Length of base_name */</div><div class='add'>+        memcpy(buffer, link_info-&gt;file_name, base_name_len);</div><div class='add'>+        buffer += base_name_len;</div><div class='add'>+        count += base_name_len;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Copying the Footer of the record */</div><div class='del'>-        memcpy (buffer, &amp;footer, sizeof (int32_t));</div><div class='del'>-        buffer += sizeof (int32_t);</div><div class='del'>-        count += sizeof (int32_t);</div><div class='add'>+    /* Copying the Footer of the record */</div><div class='add'>+    memcpy(buffer, &amp;footer, sizeof(int32_t));</div><div class='add'>+    buffer += sizeof(int32_t);</div><div class='add'>+    count += sizeof(int32_t);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                GF_FREE (ret_buffer);</div><div class='del'>-                ret_buffer = NULL;</div><div class='del'>-        }</div><div class='del'>-        *in_buffer = ret_buffer;</div><div class='del'>-        return count;</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        GF_FREE(ret_buffer);</div><div class='add'>+        ret_buffer = NULL;</div><div class='add'>+    }</div><div class='add'>+    *in_buffer = ret_buffer;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_serialized_buffer_valid (char *in_buffer, int buffer_length) {</div><div class='del'>-        gf_boolean_t    ret        = _gf_false;</div><div class='del'>-        int             footer     = 0;</div><div class='del'>-</div><div class='del'>-        /* Read the footer */</div><div class='del'>-        in_buffer += (buffer_length - sizeof (int32_t));</div><div class='del'>-        memcpy (&amp;footer, in_buffer, sizeof (int32_t));</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * if the footer is not GFDB_QUERY_RECORD_FOOTER</div><div class='del'>-         * then the serialized record is invalid</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        if (footer != GFDB_QUERY_RECORD_FOOTER) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = _gf_true;</div><div class='add'>+is_serialized_buffer_valid(char *in_buffer, int buffer_length)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    int footer = 0;</div><div class='add'>+</div><div class='add'>+    /* Read the footer */</div><div class='add'>+    in_buffer += (buffer_length - sizeof(int32_t));</div><div class='add'>+    memcpy(&amp;footer, in_buffer, sizeof(int32_t));</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * if the footer is not GFDB_QUERY_RECORD_FOOTER</div><div class='add'>+     * then the serialized record is invalid</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    if (footer != GFDB_QUERY_RECORD_FOOTER) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gfdb_query_record_deserialize (char *in_buffer,</div><div class='del'>-                               int buffer_length,</div><div class='del'>-                               gfdb_query_record_t **query_record)</div><div class='add'>+gfdb_query_record_deserialize(char *in_buffer, int buffer_length,</div><div class='add'>+                              gfdb_query_record_t **query_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        char *buffer                            = NULL;</div><div class='del'>-        int i                                   = 0;</div><div class='del'>-        gfdb_link_info_t *link_info             = NULL;</div><div class='del'>-        int count                               = 0;</div><div class='del'>-        int base_name_len                       = 0;</div><div class='del'>-        gfdb_query_record_t *ret_qrecord        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, in_buffer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, (buffer_length &gt; 0), out);</div><div class='del'>-</div><div class='del'>-        if (!is_serialized_buffer_valid (in_buffer, buffer_length)) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Invalid serialized query record");</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int base_name_len = 0;</div><div class='add'>+    gfdb_query_record_t *ret_qrecord = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, in_buffer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (buffer_length &gt; 0), out);</div><div class='add'>+</div><div class='add'>+    if (!is_serialized_buffer_valid(in_buffer, buffer_length)) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Invalid serialized query record");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buffer = in_buffer;</div><div class='add'>+</div><div class='add'>+    ret_qrecord = gfdb_query_record_new();</div><div class='add'>+    if (!ret_qrecord) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed to allocate space to "</div><div class='add'>+               "gfdb_query_record_t");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* READ GFID */</div><div class='add'>+    memcpy((ret_qrecord)-&gt;gfid, buffer, UUID_LEN);</div><div class='add'>+    buffer += UUID_LEN;</div><div class='add'>+    count += UUID_LEN;</div><div class='add'>+</div><div class='add'>+    /* Read the number of link */</div><div class='add'>+    memcpy(&amp;(ret_qrecord-&gt;link_count), buffer, sizeof(int32_t));</div><div class='add'>+    buffer += sizeof(int32_t);</div><div class='add'>+    count += sizeof(int32_t);</div><div class='add'>+</div><div class='add'>+    /* Read all the links */</div><div class='add'>+    for (i = 0; i &lt; ret_qrecord-&gt;link_count; i++) {</div><div class='add'>+        if (count &gt;= buffer_length) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+                   "Invalid serialized "</div><div class='add'>+                   "query record");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        buffer = in_buffer;</div><div class='del'>-</div><div class='del'>-        ret_qrecord = gfdb_query_record_new ();</div><div class='del'>-        if (!ret_qrecord) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Failed to allocate space to "</div><div class='del'>-                        "gfdb_query_record_t");</div><div class='del'>-                goto out;</div><div class='add'>+        link_info = gfdb_link_info_new();</div><div class='add'>+        if (!link_info) {</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+                   "Failed to create link_info");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* READ GFID */</div><div class='del'>-        memcpy ((ret_qrecord)-&gt;gfid, buffer, UUID_LEN);</div><div class='add'>+        /* READ PGFID */</div><div class='add'>+        memcpy(link_info-&gt;pargfid, buffer, UUID_LEN);</div><div class='ctx'>         buffer += UUID_LEN;</div><div class='ctx'>         count += UUID_LEN;</div><div class='ctx'> </div><div class='del'>-        /* Read the number of link */</div><div class='del'>-        memcpy (&amp;(ret_qrecord-&gt;link_count), buffer, sizeof (int32_t));</div><div class='del'>-        buffer += sizeof (int32_t);</div><div class='del'>-        count += sizeof (int32_t);</div><div class='del'>-</div><div class='del'>-        /* Read all the links */</div><div class='del'>-        for (i = 0; i &lt; ret_qrecord-&gt;link_count; i++) {</div><div class='del'>-                if (count &gt;= buffer_length) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Invalid serialized "</div><div class='del'>-                                "query record");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                link_info = gfdb_link_info_new ();</div><div class='del'>-                if (!link_info) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Failed to create link_info");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* READ PGFID */</div><div class='del'>-                memcpy (link_info-&gt;pargfid, buffer, UUID_LEN);</div><div class='del'>-                buffer += UUID_LEN;</div><div class='del'>-                count += UUID_LEN;</div><div class='del'>-</div><div class='del'>-                /* Read base name length */</div><div class='del'>-                memcpy (&amp;base_name_len, buffer, sizeof (int32_t));</div><div class='del'>-                buffer += sizeof (int32_t);</div><div class='del'>-                count += sizeof (int32_t);</div><div class='del'>-</div><div class='del'>-                /* READ basename */</div><div class='del'>-                memcpy (link_info-&gt;file_name, buffer, base_name_len);</div><div class='del'>-                buffer += base_name_len;</div><div class='del'>-                count += base_name_len;</div><div class='del'>-                link_info-&gt;file_name[base_name_len] = '\0';</div><div class='del'>-</div><div class='del'>-                /* Add link_info to the list */</div><div class='del'>-                list_add_tail (&amp;link_info-&gt;list,</div><div class='del'>-                               &amp;(ret_qrecord-&gt;link_list));</div><div class='del'>-</div><div class='del'>-                /* Resetting link_info */</div><div class='del'>-                link_info = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gfdb_query_record_free (ret_qrecord);</div><div class='del'>-                ret_qrecord = NULL;</div><div class='del'>-        }</div><div class='del'>-        *query_record = ret_qrecord;</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        /* Read base name length */</div><div class='add'>+        memcpy(&amp;base_name_len, buffer, sizeof(int32_t));</div><div class='add'>+        buffer += sizeof(int32_t);</div><div class='add'>+        count += sizeof(int32_t);</div><div class='ctx'> </div><div class='add'>+        /* READ basename */</div><div class='add'>+        memcpy(link_info-&gt;file_name, buffer, base_name_len);</div><div class='add'>+        buffer += base_name_len;</div><div class='add'>+        count += base_name_len;</div><div class='add'>+        link_info-&gt;file_name[base_name_len] = '\0';</div><div class='ctx'> </div><div class='add'>+        /* Add link_info to the list */</div><div class='add'>+        list_add_tail(&amp;link_info-&gt;list, &amp;(ret_qrecord-&gt;link_list));</div><div class='ctx'> </div><div class='add'>+        /* Resetting link_info */</div><div class='add'>+        link_info = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ret) {</div><div class='add'>+        gfdb_query_record_free(ret_qrecord);</div><div class='add'>+        ret_qrecord = NULL;</div><div class='add'>+    }</div><div class='add'>+    *query_record = ret_qrecord;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* Function to write query record to file</div><div class='ctx'>  *</div><div class='hunk'>@@ -477,57 +454,54 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gfdb_write_query_record (int fd,</div><div class='del'>-                        gfdb_query_record_t *query_record)</div><div class='add'>+gfdb_write_query_record(int fd, gfdb_query_record_t *query_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                 = -1;</div><div class='del'>-        int buffer_len          = 0;</div><div class='del'>-        char *buffer            = NULL;</div><div class='del'>-        int write_len           = 0;</div><div class='del'>-        char *write_buffer      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, (fd &gt;= 0), out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='del'>-</div><div class='del'>-        buffer_len = gfdb_query_record_serialize (query_record, &amp;buffer);</div><div class='del'>-        if (buffer_len &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Failed to serialize query record");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Serialize the buffer length and write to file */</div><div class='del'>-        ret = write (fd, &amp;buffer_len, sizeof (int32_t));</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int buffer_len = 0;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    int write_len = 0;</div><div class='add'>+    char *write_buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (fd &gt;= 0), out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='add'>+</div><div class='add'>+    buffer_len = gfdb_query_record_serialize(query_record, &amp;buffer);</div><div class='add'>+    if (buffer_len &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed to serialize query record");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Serialize the buffer length and write to file */</div><div class='add'>+    ret = write(fd, &amp;buffer_len, sizeof(int32_t));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed to write buffer length"</div><div class='add'>+               " to file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Write the serialized query record to file */</div><div class='add'>+    write_len = buffer_len;</div><div class='add'>+    write_buffer = buffer;</div><div class='add'>+    while ((ret = write(fd, write_buffer, write_len)) &lt; write_len) {</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Failed to write buffer length"</div><div class='del'>-                                " to file");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, errno, LG_MSG_DB_ERROR,</div><div class='add'>+                   "Failed to write serialized "</div><div class='add'>+                   "query record to file");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Write the serialized query record to file */</div><div class='del'>-        write_len = buffer_len;</div><div class='del'>-        write_buffer = buffer;</div><div class='del'>-        while ((ret = write (fd, write_buffer, write_len)) &lt;  write_len) {</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Failed to write serialized "</div><div class='del'>-                                "query record to file");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                write_buffer += ret;</div><div class='del'>-                write_len -= ret;</div><div class='del'>-        }</div><div class='add'>+        write_buffer += ret;</div><div class='add'>+        write_len -= ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (buffer);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(buffer);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Function to read query record from file.</div><div class='ctx'>  * Allocates memory to query record and</div><div class='ctx'>  * returns length of serialized query record when successful</div><div class='hunk'>@@ -535,86 +509,81 @@ out:</div><div class='ctx'>  * Return 0 when reached EOF.</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gfdb_read_query_record (int fd,</div><div class='del'>-                        gfdb_query_record_t **query_record)</div><div class='add'>+gfdb_read_query_record(int fd, gfdb_query_record_t **query_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                 = -1;</div><div class='del'>-        int buffer_len          = 0;</div><div class='del'>-        int read_len            = 0;</div><div class='del'>-        char *buffer            = NULL;</div><div class='del'>-        char *read_buffer       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, (fd &gt;= 0), out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Read serialized query record length from the file*/</div><div class='del'>-        ret = sys_read (fd, &amp;buffer_len, sizeof (int32_t));</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int buffer_len = 0;</div><div class='add'>+    int read_len = 0;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    char *read_buffer = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (fd &gt;= 0), out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out);</div><div class='add'>+</div><div class='add'>+    /* Read serialized query record length from the file*/</div><div class='add'>+    ret = sys_read(fd, &amp;buffer_len, sizeof(int32_t));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed reading buffer length"</div><div class='add'>+               " from file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* EOF */</div><div class='add'>+    else if (ret == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Assumed sane range is 1B - 10MB */</div><div class='add'>+    if ((buffer_len &lt;= 0) || (buffer_len &gt; (10 * 1024 * 1024))) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "buffer length range is out of bound %d", buffer_len);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Allocating memory to the serialization buffer */</div><div class='add'>+    buffer = GF_CALLOC(1, buffer_len, gf_common_mt_char);</div><div class='add'>+    if (!buffer) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed to allocate space to "</div><div class='add'>+               "serialized buffer");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Read the serialized query record from file */</div><div class='add'>+    read_len = buffer_len;</div><div class='add'>+    read_buffer = buffer;</div><div class='add'>+    while ((ret = sys_read(fd, read_buffer, read_len)) &lt; read_len) {</div><div class='add'>+        /*Any error */</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Failed reading buffer length"</div><div class='del'>-                                " from file");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, errno, LG_MSG_DB_ERROR,</div><div class='add'>+                   "Failed to read serialized "</div><div class='add'>+                   "query record from file");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'>         /* EOF */</div><div class='ctx'>         else if (ret == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+                   "Invalid query record or "</div><div class='add'>+                   "corrupted query file");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Assumed sane range is 1B - 10MB */</div><div class='del'>-        if ((buffer_len &lt;= 0) || (buffer_len &gt; (10 * 1024 * 1024))) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='del'>-                        "buffer length range is out of bound %d", buffer_len);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Allocating memory to the serialization buffer */</div><div class='del'>-        buffer = GF_CALLOC (1, buffer_len,  gf_common_mt_char);</div><div class='del'>-        if (!buffer) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Failed to allocate space to "</div><div class='del'>-                        "serialized buffer");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        read_buffer += ret;</div><div class='add'>+        read_len -= ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = gfdb_query_record_deserialize(buffer, buffer_len, query_record);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "Failed to de-serialize query record");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Read the serialized query record from file */</div><div class='del'>-        read_len = buffer_len;</div><div class='del'>-        read_buffer = buffer;</div><div class='del'>-        while ((ret = sys_read (fd, read_buffer, read_len)) &lt; read_len) {</div><div class='del'>-</div><div class='del'>-                /*Any error */</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Failed to read serialized "</div><div class='del'>-                                "query record from file");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* EOF */</div><div class='del'>-                else if (ret == 0) {</div><div class='del'>-                        gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DB_ERROR, "Invalid query record or "</div><div class='del'>-                                "corrupted query file");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                read_buffer += ret;</div><div class='del'>-                read_len -= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gfdb_query_record_deserialize (buffer, buffer_len,</div><div class='del'>-                                             query_record);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_DB_ERROR, "Failed to de-serialize query record");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = buffer_len;</div><div class='add'>+    ret = buffer_len;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (buffer);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(buffer);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3.c b/libglusterfs/src/gfdb/gfdb_sqlite3.c<br/>index ad94d648369..63957278e8a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_sqlite3.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/gfdb/gfdb_sqlite3.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_sqlite3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_sqlite3.c</a></div><div class='hunk'>@@ -19,160 +19,158 @@</div><div class='ctx'>  *</div><div class='ctx'>  * ***************************************************************************/</div><div class='ctx'> gf_sql_connection_t *</div><div class='del'>-gf_sql_connection_init ()</div><div class='add'>+gf_sql_connection_init()</div><div class='ctx'> {</div><div class='del'>-        gf_sql_connection_t *gf_sql_conn = NULL;</div><div class='del'>-</div><div class='del'>-        gf_sql_conn = GF_CALLOC (1, sizeof(gf_sql_connection_t),</div><div class='del'>-                        gf_mt_sql_connection_t);</div><div class='del'>-        if (gf_sql_conn == NULL) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        LG_MSG_NO_MEMORY, "Error allocating memory to "</div><div class='del'>-                        "gf_sql_connection_t ");</div><div class='del'>-        }</div><div class='add'>+    gf_sql_connection_t *gf_sql_conn = NULL;</div><div class='add'>+</div><div class='add'>+    gf_sql_conn = GF_CALLOC(1, sizeof(gf_sql_connection_t),</div><div class='add'>+                            gf_mt_sql_connection_t);</div><div class='add'>+    if (gf_sql_conn == NULL) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+               "Error allocating memory to "</div><div class='add'>+               "gf_sql_connection_t ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return gf_sql_conn;</div><div class='add'>+    return gf_sql_conn;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_sql_connection_fini (gf_sql_connection_t **sql_connection)</div><div class='add'>+gf_sql_connection_fini(gf_sql_connection_t **sql_connection)</div><div class='ctx'> {</div><div class='del'>-        if (!sql_connection)</div><div class='del'>-                return;</div><div class='del'>-        GF_FREE (*sql_connection);</div><div class='del'>-        *sql_connection = NULL;</div><div class='add'>+    if (!sql_connection)</div><div class='add'>+        return;</div><div class='add'>+    GF_FREE(*sql_connection);</div><div class='add'>+    *sql_connection = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> const char *</div><div class='del'>-gf_sql_jm2str (gf_sql_journal_mode_t jm)</div><div class='add'>+gf_sql_jm2str(gf_sql_journal_mode_t jm)</div><div class='ctx'> {</div><div class='del'>-        switch (jm) {</div><div class='add'>+    switch (jm) {</div><div class='ctx'>         case gf_sql_jm_delete:</div><div class='del'>-                return GF_SQL_JM_DELETE;</div><div class='add'>+            return GF_SQL_JM_DELETE;</div><div class='ctx'>         case gf_sql_jm_truncate:</div><div class='del'>-                return GF_SQL_JM_TRUNCATE;</div><div class='add'>+            return GF_SQL_JM_TRUNCATE;</div><div class='ctx'>         case gf_sql_jm_persist:</div><div class='del'>-                return GF_SQL_JM_PERSIST;</div><div class='add'>+            return GF_SQL_JM_PERSIST;</div><div class='ctx'>         case gf_sql_jm_memory:</div><div class='del'>-                return GF_SQL_JM_MEMORY;</div><div class='add'>+            return GF_SQL_JM_MEMORY;</div><div class='ctx'>         case gf_sql_jm_wal:</div><div class='del'>-                return GF_SQL_JM_WAL;</div><div class='add'>+            return GF_SQL_JM_WAL;</div><div class='ctx'>         case gf_sql_jm_off:</div><div class='del'>-                return GF_SQL_JM_OFF;</div><div class='add'>+            return GF_SQL_JM_OFF;</div><div class='ctx'>         case gf_sql_jm_invalid:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_sql_journal_mode_t</div><div class='del'>-gf_sql_str2jm (const char *jm_str)</div><div class='add'>+gf_sql_str2jm(const char *jm_str)</div><div class='ctx'> {</div><div class='del'>-        if (!jm_str) {</div><div class='del'>-                return gf_sql_jm_invalid;</div><div class='del'>-        } else if (strcmp (jm_str, GF_SQL_JM_DELETE) == 0) {</div><div class='del'>-                return gf_sql_jm_delete;</div><div class='del'>-        } else if (strcmp (jm_str, GF_SQL_JM_TRUNCATE) == 0) {</div><div class='del'>-                return gf_sql_jm_truncate;</div><div class='del'>-        } else if (strcmp (jm_str, GF_SQL_JM_PERSIST) == 0) {</div><div class='del'>-                return gf_sql_jm_persist;</div><div class='del'>-        } else if (strcmp (jm_str, GF_SQL_JM_MEMORY) == 0) {</div><div class='del'>-                return gf_sql_jm_memory;</div><div class='del'>-        } else if (strcmp (jm_str, GF_SQL_JM_WAL) == 0) {</div><div class='del'>-                return gf_sql_jm_wal;</div><div class='del'>-        } else if (strcmp (jm_str, GF_SQL_JM_OFF) == 0) {</div><div class='del'>-                return gf_sql_jm_off;</div><div class='del'>-        }</div><div class='add'>+    if (!jm_str) {</div><div class='ctx'>         return gf_sql_jm_invalid;</div><div class='add'>+    } else if (strcmp(jm_str, GF_SQL_JM_DELETE) == 0) {</div><div class='add'>+        return gf_sql_jm_delete;</div><div class='add'>+    } else if (strcmp(jm_str, GF_SQL_JM_TRUNCATE) == 0) {</div><div class='add'>+        return gf_sql_jm_truncate;</div><div class='add'>+    } else if (strcmp(jm_str, GF_SQL_JM_PERSIST) == 0) {</div><div class='add'>+        return gf_sql_jm_persist;</div><div class='add'>+    } else if (strcmp(jm_str, GF_SQL_JM_MEMORY) == 0) {</div><div class='add'>+        return gf_sql_jm_memory;</div><div class='add'>+    } else if (strcmp(jm_str, GF_SQL_JM_WAL) == 0) {</div><div class='add'>+        return gf_sql_jm_wal;</div><div class='add'>+    } else if (strcmp(jm_str, GF_SQL_JM_OFF) == 0) {</div><div class='add'>+        return gf_sql_jm_off;</div><div class='add'>+    }</div><div class='add'>+    return gf_sql_jm_invalid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> const char *</div><div class='del'>-gf_sql_av_t2str (gf_sql_auto_vacuum_t sql_av)</div><div class='add'>+gf_sql_av_t2str(gf_sql_auto_vacuum_t sql_av)</div><div class='ctx'> {</div><div class='del'>-        switch (sql_av) {</div><div class='add'>+    switch (sql_av) {</div><div class='ctx'>         case gf_sql_av_none:</div><div class='del'>-                return GF_SQL_AV_NONE;</div><div class='add'>+            return GF_SQL_AV_NONE;</div><div class='ctx'>         case gf_sql_av_full:</div><div class='del'>-                return GF_SQL_AV_FULL;</div><div class='add'>+            return GF_SQL_AV_FULL;</div><div class='ctx'>         case gf_sql_av_incr:</div><div class='del'>-                return GF_SQL_AV_INCR;</div><div class='add'>+            return GF_SQL_AV_INCR;</div><div class='ctx'>         case gf_sql_av_invalid:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_sql_auto_vacuum_t</div><div class='del'>-gf_sql_str2av_t (const char *av_str)</div><div class='add'>+gf_sql_str2av_t(const char *av_str)</div><div class='ctx'> {</div><div class='del'>-        if (!av_str) {</div><div class='del'>-                return gf_sql_av_invalid;</div><div class='del'>-        } else if (strcmp (av_str, GF_SQL_AV_NONE) == 0) {</div><div class='del'>-                return gf_sql_av_none;</div><div class='del'>-        } else if (strcmp (av_str, GF_SQL_AV_FULL) == 0) {</div><div class='del'>-                return gf_sql_av_full;</div><div class='del'>-        } else if (strcmp (av_str, GF_SQL_AV_INCR) == 0) {</div><div class='del'>-                return gf_sql_av_incr;</div><div class='del'>-        }</div><div class='add'>+    if (!av_str) {</div><div class='ctx'>         return gf_sql_av_invalid;</div><div class='add'>+    } else if (strcmp(av_str, GF_SQL_AV_NONE) == 0) {</div><div class='add'>+        return gf_sql_av_none;</div><div class='add'>+    } else if (strcmp(av_str, GF_SQL_AV_FULL) == 0) {</div><div class='add'>+        return gf_sql_av_full;</div><div class='add'>+    } else if (strcmp(av_str, GF_SQL_AV_INCR) == 0) {</div><div class='add'>+        return gf_sql_av_incr;</div><div class='add'>+    }</div><div class='add'>+    return gf_sql_av_invalid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> const char *</div><div class='del'>-gf_sync_t2str (gf_sql_sync_t sql_sync)</div><div class='add'>+gf_sync_t2str(gf_sql_sync_t sql_sync)</div><div class='ctx'> {</div><div class='del'>-        switch (sql_sync) {</div><div class='add'>+    switch (sql_sync) {</div><div class='ctx'>         case gf_sql_sync_off:</div><div class='del'>-                return GF_SQL_SYNC_OFF;</div><div class='add'>+            return GF_SQL_SYNC_OFF;</div><div class='ctx'>         case gf_sql_sync_normal:</div><div class='del'>-                return GF_SQL_SYNC_NORMAL;</div><div class='add'>+            return GF_SQL_SYNC_NORMAL;</div><div class='ctx'>         case gf_sql_sync_full:</div><div class='del'>-                return GF_SQL_SYNC_FULL;</div><div class='add'>+            return GF_SQL_SYNC_FULL;</div><div class='ctx'>         case gf_sql_sync_invalid:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_sql_sync_t</div><div class='del'>-gf_sql_str2sync_t (const char *sync_str)</div><div class='add'>+gf_sql_str2sync_t(const char *sync_str)</div><div class='ctx'> {</div><div class='del'>-        if (!sync_str) {</div><div class='del'>-                return gf_sql_sync_invalid;</div><div class='del'>-        } else if (strcmp (sync_str, GF_SQL_SYNC_OFF) == 0) {</div><div class='del'>-                return gf_sql_sync_off;</div><div class='del'>-        } else if (strcmp (sync_str, GF_SQL_SYNC_NORMAL) == 0) {</div><div class='del'>-                return gf_sql_sync_normal;</div><div class='del'>-        } else if (strcmp (sync_str, GF_SQL_SYNC_FULL) == 0) {</div><div class='del'>-                return gf_sql_sync_full;</div><div class='del'>-        }</div><div class='add'>+    if (!sync_str) {</div><div class='ctx'>         return gf_sql_sync_invalid;</div><div class='add'>+    } else if (strcmp(sync_str, GF_SQL_SYNC_OFF) == 0) {</div><div class='add'>+        return gf_sql_sync_off;</div><div class='add'>+    } else if (strcmp(sync_str, GF_SQL_SYNC_NORMAL) == 0) {</div><div class='add'>+        return gf_sql_sync_normal;</div><div class='add'>+    } else if (strcmp(sync_str, GF_SQL_SYNC_FULL) == 0) {</div><div class='add'>+        return gf_sql_sync_full;</div><div class='add'>+    }</div><div class='add'>+    return gf_sql_sync_invalid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*TODO replace GF_CALLOC by mem_pool or iobuff if required for performance */</div><div class='ctx'> static char *</div><div class='del'>-sql_stmt_init ()</div><div class='add'>+sql_stmt_init()</div><div class='ctx'> {</div><div class='del'>-        char *sql_stmt = NULL;</div><div class='add'>+    char *sql_stmt = NULL;</div><div class='ctx'> </div><div class='del'>-        sql_stmt = GF_CALLOC (GF_STMT_SIZE_MAX, sizeof(char),</div><div class='del'>-                        gf_common_mt_char);</div><div class='add'>+    sql_stmt = GF_CALLOC(GF_STMT_SIZE_MAX, sizeof(char), gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-        if (!sql_stmt) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        LG_MSG_NO_MEMORY, "Error allocating memory to SQL "</div><div class='del'>-                        "Statement ");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!sql_stmt) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY,</div><div class='add'>+               "Error allocating memory to SQL "</div><div class='add'>+               "Statement ");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return sql_stmt;</div><div class='add'>+    return sql_stmt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*TODO replace GF_FREE by mem_pool or iobuff if required for performance */</div><div class='ctx'> static void</div><div class='del'>-sql_stmt_fini (char **sql_stmt)</div><div class='add'>+sql_stmt_fini(char **sql_stmt)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (*sql_stmt);</div><div class='add'>+    GF_FREE(*sql_stmt);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='hunk'>@@ -183,334 +181,313 @@ sql_stmt_fini (char **sql_stmt)</div><div class='ctx'> static sqlite3 *</div><div class='ctx'> gf_open_sqlite3_conn(char *sqlite3_db_path, int flags)</div><div class='ctx'> {</div><div class='del'>-        sqlite3 *sqlite3_db_conn = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (sqlite3_db_path);</div><div class='del'>-</div><div class='del'>-        /*Creates DB if not created*/</div><div class='del'>-        ret = sqlite3_open_v2 (sqlite3_db_path, &amp;sqlite3_db_conn, flags, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='del'>-                        "FATAL: Could open %s : %s",</div><div class='del'>-                        sqlite3_db_path, sqlite3_errmsg (sqlite3_db_conn));</div><div class='del'>-        }</div><div class='del'>-        return sqlite3_db_conn;</div><div class='add'>+    sqlite3 *sqlite3_db_conn = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(sqlite3_db_path);</div><div class='add'>+</div><div class='add'>+    /*Creates DB if not created*/</div><div class='add'>+    ret = sqlite3_open_v2(sqlite3_db_path, &amp;sqlite3_db_conn, flags, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR,</div><div class='add'>+               "FATAL: Could open %s : %s", sqlite3_db_path,</div><div class='add'>+               sqlite3_errmsg(sqlite3_db_conn));</div><div class='add'>+    }</div><div class='add'>+    return sqlite3_db_conn;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> gf_close_sqlite3_conn(sqlite3 *sqlite3_db_conn)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (sqlite3_db_conn);</div><div class='del'>-</div><div class='del'>-        if (sqlite3_db_conn) {</div><div class='del'>-                ret = sqlite3_close (sqlite3_db_conn);</div><div class='del'>-                if (ret != SQLITE_OK) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_CONNECTION_ERROR, "FATAL: sqlite3 close"</div><div class='del'>-                                " connection failed %s",</div><div class='del'>-                                sqlite3_errmsg (sqlite3_db_conn));</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(sqlite3_db_conn);</div><div class='add'>+</div><div class='add'>+    if (sqlite3_db_conn) {</div><div class='add'>+        ret = sqlite3_close(sqlite3_db_conn);</div><div class='add'>+        if (ret != SQLITE_OK) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CONNECTION_ERROR,</div><div class='add'>+                   "FATAL: sqlite3 close"</div><div class='add'>+                   " connection failed %s",</div><div class='add'>+                   sqlite3_errmsg(sqlite3_db_conn));</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='del'>-*</div><div class='del'>-*                      Database init / fini / create table</div><div class='del'>-*</div><div class='del'>-* ***************************************************************************/</div><div class='del'>-</div><div class='add'>+ *</div><div class='add'>+ *                      Database init / fini / create table</div><div class='add'>+ *</div><div class='add'>+ * ***************************************************************************/</div><div class='ctx'> </div><div class='ctx'> /*Function to fill db operations*/</div><div class='ctx'> void</div><div class='del'>-gf_sqlite3_fill_db_operations(gfdb_db_operations_t  *gfdb_db_ops)</div><div class='add'>+gf_sqlite3_fill_db_operations(gfdb_db_operations_t *gfdb_db_ops)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (gfdb_db_ops);</div><div class='add'>+    GF_ASSERT(gfdb_db_ops);</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;init_db_op = gf_sqlite3_init;</div><div class='del'>-        gfdb_db_ops-&gt;fini_db_op = gf_sqlite3_fini;</div><div class='add'>+    gfdb_db_ops-&gt;init_db_op = gf_sqlite3_init;</div><div class='add'>+    gfdb_db_ops-&gt;fini_db_op = gf_sqlite3_fini;</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;insert_record_op = gf_sqlite3_insert;</div><div class='del'>-        gfdb_db_ops-&gt;delete_record_op = gf_sqlite3_delete;</div><div class='del'>-        gfdb_db_ops-&gt;compact_db_op = gf_sqlite3_vacuum;</div><div class='add'>+    gfdb_db_ops-&gt;insert_record_op = gf_sqlite3_insert;</div><div class='add'>+    gfdb_db_ops-&gt;delete_record_op = gf_sqlite3_delete;</div><div class='add'>+    gfdb_db_ops-&gt;compact_db_op = gf_sqlite3_vacuum;</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;find_all_op = gf_sqlite3_find_all;</div><div class='del'>-        gfdb_db_ops-&gt;find_unchanged_for_time_op =</div><div class='del'>-                        gf_sqlite3_find_unchanged_for_time;</div><div class='del'>-        gfdb_db_ops-&gt;find_recently_changed_files_op =</div><div class='del'>-                        gf_sqlite3_find_recently_changed_files;</div><div class='del'>-        gfdb_db_ops-&gt;find_unchanged_for_time_freq_op =</div><div class='del'>-                        gf_sqlite3_find_unchanged_for_time_freq;</div><div class='del'>-        gfdb_db_ops-&gt;find_recently_changed_files_freq_op =</div><div class='del'>-                        gf_sqlite3_find_recently_changed_files_freq;</div><div class='add'>+    gfdb_db_ops-&gt;find_all_op = gf_sqlite3_find_all;</div><div class='add'>+    gfdb_db_ops</div><div class='add'>+        -&gt;find_unchanged_for_time_op = gf_sqlite3_find_unchanged_for_time;</div><div class='add'>+    gfdb_db_ops-&gt;find_recently_changed_files_op =</div><div class='add'>+        gf_sqlite3_find_recently_changed_files;</div><div class='add'>+    gfdb_db_ops-&gt;find_unchanged_for_time_freq_op =</div><div class='add'>+        gf_sqlite3_find_unchanged_for_time_freq;</div><div class='add'>+    gfdb_db_ops-&gt;find_recently_changed_files_freq_op =</div><div class='add'>+        gf_sqlite3_find_recently_changed_files_freq;</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;clear_files_heat_op = gf_sqlite3_clear_files_heat;</div><div class='add'>+    gfdb_db_ops-&gt;clear_files_heat_op = gf_sqlite3_clear_files_heat;</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;get_db_version = gf_sqlite3_version;</div><div class='add'>+    gfdb_db_ops-&gt;get_db_version = gf_sqlite3_version;</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;get_db_params = gf_sqlite3_pragma;</div><div class='add'>+    gfdb_db_ops-&gt;get_db_params = gf_sqlite3_pragma;</div><div class='ctx'> </div><div class='del'>-        gfdb_db_ops-&gt;set_db_params = gf_sqlite3_set_pragma;</div><div class='add'>+    gfdb_db_ops-&gt;set_db_params = gf_sqlite3_set_pragma;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-create_filetable (sqlite3 *sqlite3_db_conn)</div><div class='add'>+create_filetable(sqlite3 *sqlite3_db_conn)</div><div class='ctx'> {</div><div class='del'>-        int ret                         =       -1;</div><div class='del'>-        char *sql_stmt                  =       NULL;</div><div class='del'>-        char *sql_strerror              =       NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(sqlite3_db_conn);</div><div class='del'>-</div><div class='del'>-        sql_stmt = sql_stmt_init ();</div><div class='del'>-        if (!sql_stmt) {</div><div class='del'>-                ret = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_CREATE_STMT(sql_stmt);</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_exec (sqlite3_db_conn, sql_stmt, NULL, NULL,</div><div class='del'>-                                &amp;sql_strerror);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing: %s : %s", sql_stmt, sql_strerror);</div><div class='del'>-                sqlite3_free (sql_strerror);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *sql_stmt = NULL;</div><div class='add'>+    char *sql_strerror = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(sqlite3_db_conn);</div><div class='add'>+</div><div class='add'>+    sql_stmt = sql_stmt_init();</div><div class='add'>+    if (!sql_stmt) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_CREATE_STMT(sql_stmt);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_exec(sqlite3_db_conn, sql_stmt, NULL, NULL, &amp;sql_strerror);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing: %s : %s", sql_stmt, sql_strerror);</div><div class='add'>+        sqlite3_free(sql_strerror);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        sql_stmt_fini (&amp;sql_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    sql_stmt_fini(&amp;sql_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='ctx'> apply_sql_params_db(gf_sql_connection_t *sql_conn, dict_t *param_dict)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *temp_str = NULL;</div><div class='del'>-        char sqlite3_config_str[GF_NAME_MAX] = "";</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(sql_conn);</div><div class='del'>-        GF_ASSERT(param_dict);</div><div class='del'>-</div><div class='del'>-        /*Extract sql page_size from param_dict,</div><div class='del'>-         * if not specified default value will be GF_SQL_DEFAULT_PAGE_SIZE*/</div><div class='del'>-        temp_str = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='del'>-                        GFDB_SQL_PARAM_PAGE_SIZE, temp_str,</div><div class='del'>-                        GF_SQL_DEFAULT_PAGE_SIZE);</div><div class='del'>-        sql_conn-&gt;page_size = atoi (temp_str);</div><div class='del'>-        /*Apply page_size on the sqlite db*/</div><div class='del'>-        GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "page_size", "%zd",</div><div class='del'>-                        sql_conn-&gt;page_size, ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Extract sql cache size from param_dict,</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    char sqlite3_config_str[GF_NAME_MAX] = "";</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(sql_conn);</div><div class='add'>+    GF_ASSERT(param_dict);</div><div class='add'>+</div><div class='add'>+    /*Extract sql page_size from param_dict,</div><div class='add'>+     * if not specified default value will be GF_SQL_DEFAULT_PAGE_SIZE*/</div><div class='add'>+    temp_str = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='add'>+                                   GFDB_SQL_PARAM_PAGE_SIZE, temp_str,</div><div class='add'>+                                   GF_SQL_DEFAULT_PAGE_SIZE);</div><div class='add'>+    sql_conn-&gt;page_size = atoi(temp_str);</div><div class='add'>+    /*Apply page_size on the sqlite db*/</div><div class='add'>+    GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "page_size", "%zd",</div><div class='add'>+                          sql_conn-&gt;page_size, ret, out);</div><div class='add'>+</div><div class='add'>+    /*Extract sql cache size from param_dict,</div><div class='add'>+     * if not specified default value will be</div><div class='add'>+     * GF_SQL_DEFAULT_CACHE_SIZE pages*/</div><div class='add'>+    temp_str = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='add'>+                                   GFDB_SQL_PARAM_CACHE_SIZE, temp_str,</div><div class='add'>+                                   GF_SQL_DEFAULT_CACHE_SIZE);</div><div class='add'>+    sql_conn-&gt;cache_size = atoi(temp_str);</div><div class='add'>+    /*Apply cache size on the sqlite db*/</div><div class='add'>+    GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "cache_size", "%zd",</div><div class='add'>+                          sql_conn-&gt;cache_size, ret, out);</div><div class='add'>+</div><div class='add'>+    /*Extract sql journal mode from param_dict,</div><div class='add'>+     * if not specified default value will be</div><div class='add'>+     * GF_SQL_DEFAULT_JOURNAL_MODE i.e "wal"*/</div><div class='add'>+    temp_str = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='add'>+                                   GFDB_SQL_PARAM_JOURNAL_MODE, temp_str,</div><div class='add'>+                                   GF_SQL_DEFAULT_JOURNAL_MODE);</div><div class='add'>+    sql_conn-&gt;journal_mode = gf_sql_str2jm(temp_str);</div><div class='add'>+    /*Apply journal mode to the sqlite db*/</div><div class='add'>+    GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "journal_mode", "%s", temp_str,</div><div class='add'>+                          ret, out);</div><div class='add'>+</div><div class='add'>+    /*Only when the journal mode is WAL, wal_autocheckpoint makes sense*/</div><div class='add'>+    if (sql_conn-&gt;journal_mode == gf_sql_jm_wal) {</div><div class='add'>+        /*Extract sql wal auto check point from param_dict</div><div class='ctx'>          * if not specified default value will be</div><div class='del'>-         * GF_SQL_DEFAULT_CACHE_SIZE pages*/</div><div class='add'>+         * GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT pages*/</div><div class='ctx'>         temp_str = NULL;</div><div class='ctx'>         GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='del'>-                        GFDB_SQL_PARAM_CACHE_SIZE, temp_str,</div><div class='del'>-                        GF_SQL_DEFAULT_CACHE_SIZE);</div><div class='del'>-        sql_conn-&gt;cache_size = atoi (temp_str);</div><div class='del'>-        /*Apply cache size on the sqlite db*/</div><div class='del'>-        GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "cache_size", "%zd",</div><div class='del'>-                        sql_conn-&gt;cache_size, ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Extract sql journal mode from param_dict,</div><div class='del'>-         * if not specified default value will be</div><div class='del'>-         * GF_SQL_DEFAULT_JOURNAL_MODE i.e "wal"*/</div><div class='del'>-        temp_str = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='del'>-                        GFDB_SQL_PARAM_JOURNAL_MODE, temp_str,</div><div class='del'>-                        GF_SQL_DEFAULT_JOURNAL_MODE);</div><div class='del'>-        sql_conn-&gt;journal_mode = gf_sql_str2jm (temp_str);</div><div class='del'>-        /*Apply journal mode to the sqlite db*/</div><div class='del'>-        GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "journal_mode", "%s",</div><div class='del'>-                        temp_str, ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Only when the journal mode is WAL, wal_autocheckpoint makes sense*/</div><div class='del'>-        if (sql_conn-&gt;journal_mode == gf_sql_jm_wal) {</div><div class='del'>-                /*Extract sql wal auto check point from param_dict</div><div class='del'>-                * if not specified default value will be</div><div class='del'>-                * GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT pages*/</div><div class='del'>-                temp_str = NULL;</div><div class='del'>-                GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='del'>-                        GFDB_SQL_PARAM_WAL_AUTOCHECK, temp_str,</div><div class='del'>-                        GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT);</div><div class='del'>-                sql_conn-&gt;wal_autocheckpoint = atoi(temp_str);</div><div class='del'>-                /*Apply wal auto check point to the sqlite db*/</div><div class='del'>-                GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "wal_autocheckpoint",</div><div class='del'>-                        "%zd", sql_conn-&gt;wal_autocheckpoint, ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Extract sql synchronous from param_dict</div><div class='del'>-         * if not specified default value will be GF_SQL_DEFAULT_SYNC*/</div><div class='del'>-         temp_str = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='del'>-                        GFDB_SQL_PARAM_SYNC, temp_str, GF_SQL_DEFAULT_SYNC);</div><div class='del'>-        sql_conn-&gt;synchronous = gf_sql_str2sync_t (temp_str);</div><div class='del'>-        /*Apply synchronous to the sqlite db*/</div><div class='del'>-        GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "synchronous", "%d",</div><div class='del'>-                        sql_conn-&gt;synchronous, ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Extract sql auto_vacuum from param_dict</div><div class='del'>-         * if not specified default value will be GF_SQL_DEFAULT_AUTO_VACUUM*/</div><div class='del'>-         temp_str = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='del'>-                        GFDB_SQL_PARAM_AUTO_VACUUM, temp_str,</div><div class='del'>-                        GF_SQL_DEFAULT_AUTO_VACUUM);</div><div class='del'>-        sql_conn-&gt;auto_vacuum = gf_sql_str2av_t (temp_str);</div><div class='del'>-        /*Apply auto_vacuum to the sqlite db*/</div><div class='del'>-        GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "auto_vacuum", "%d",</div><div class='del'>-                        sql_conn-&gt;auto_vacuum, ret, out);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+                                       GFDB_SQL_PARAM_WAL_AUTOCHECK, temp_str,</div><div class='add'>+                                       GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT);</div><div class='add'>+        sql_conn-&gt;wal_autocheckpoint = atoi(temp_str);</div><div class='add'>+        /*Apply wal auto check point to the sqlite db*/</div><div class='add'>+        GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "wal_autocheckpoint", "%zd",</div><div class='add'>+                              sql_conn-&gt;wal_autocheckpoint, ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Extract sql synchronous from param_dict</div><div class='add'>+     * if not specified default value will be GF_SQL_DEFAULT_SYNC*/</div><div class='add'>+    temp_str = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='add'>+                                   GFDB_SQL_PARAM_SYNC, temp_str,</div><div class='add'>+                                   GF_SQL_DEFAULT_SYNC);</div><div class='add'>+    sql_conn-&gt;synchronous = gf_sql_str2sync_t(temp_str);</div><div class='add'>+    /*Apply synchronous to the sqlite db*/</div><div class='add'>+    GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "synchronous", "%d",</div><div class='add'>+                          sql_conn-&gt;synchronous, ret, out);</div><div class='add'>+</div><div class='add'>+    /*Extract sql auto_vacuum from param_dict</div><div class='add'>+     * if not specified default value will be GF_SQL_DEFAULT_AUTO_VACUUM*/</div><div class='add'>+    temp_str = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict,</div><div class='add'>+                                   GFDB_SQL_PARAM_AUTO_VACUUM, temp_str,</div><div class='add'>+                                   GF_SQL_DEFAULT_AUTO_VACUUM);</div><div class='add'>+    sql_conn-&gt;auto_vacuum = gf_sql_str2av_t(temp_str);</div><div class='add'>+    /*Apply auto_vacuum to the sqlite db*/</div><div class='add'>+    GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "auto_vacuum", "%d",</div><div class='add'>+                          sql_conn-&gt;auto_vacuum, ret, out);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_init (dict_t *args, void **db_conn) {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn   = NULL;</div><div class='del'>-        struct stat stbuf               = {0,};</div><div class='del'>-        gf_boolean_t    is_dbfile_exist = _gf_false;</div><div class='del'>-        char *temp_str                  = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (args);</div><div class='del'>-        GF_ASSERT (db_conn);</div><div class='del'>-</div><div class='del'>-        if (*db_conn != NULL) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_CONNECTION_ERROR, "DB Connection is not "</div><div class='del'>-                        "empty!");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!sqlite3_threadsafe ()) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_NOT_MULTITHREAD_MODE,</div><div class='del'>-                        "sqlite3 is not in multithreaded mode");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sql_conn = gf_sql_connection_init ();</div><div class='del'>-        if (!sql_conn) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Extract sql db path from args*/</div><div class='del'>-        temp_str = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT(GFDB_STR_SQLITE3, args,</div><div class='del'>-                        GFDB_SQL_PARAM_DBPATH, temp_str, out);</div><div class='del'>-        strncpy(sql_conn-&gt;sqlite3_db_path, temp_str, PATH_MAX-1);</div><div class='del'>-        sql_conn-&gt;sqlite3_db_path[PATH_MAX-1] = 0;</div><div class='del'>-</div><div class='del'>-        is_dbfile_exist = (sys_stat (sql_conn-&gt;sqlite3_db_path, &amp;stbuf) == 0) ?</div><div class='del'>-                                                _gf_true : _gf_false;</div><div class='del'>-</div><div class='del'>-        /*Creates DB if not created*/</div><div class='del'>-        sql_conn-&gt;sqlite3_db_conn = gf_open_sqlite3_conn (</div><div class='del'>-                                        sql_conn-&gt;sqlite3_db_path,</div><div class='del'>-                                        SQLITE_OPEN_READWRITE |</div><div class='del'>-                                        SQLITE_OPEN_CREATE);</div><div class='del'>-        if (!sql_conn-&gt;sqlite3_db_conn) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_CONNECTION_ERROR,</div><div class='del'>-                        "Failed creating db connection");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* If the file exist we skip the config part</div><div class='del'>-         * and creation of the schema */</div><div class='del'>-        if (is_dbfile_exist)</div><div class='del'>-                goto db_exists;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Apply sqlite3 params to database*/</div><div class='del'>-        ret = apply_sql_params_db (sql_conn, args);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_SET_PARAM_FAILED, "Failed applying sql params"</div><div class='del'>-                        " to %s", sql_conn-&gt;sqlite3_db_path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Create the schema if NOT present*/</div><div class='del'>-        ret = create_filetable (sql_conn-&gt;sqlite3_db_conn);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_CREATE_FAILED, "Failed Creating %s Table",</div><div class='del'>-                        GF_FILE_TABLE);</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='add'>+gf_sqlite3_init(dict_t *args, void **db_conn)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = NULL;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t is_dbfile_exist = _gf_false;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(args);</div><div class='add'>+    GF_ASSERT(db_conn);</div><div class='add'>+</div><div class='add'>+    if (*db_conn != NULL) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CONNECTION_ERROR,</div><div class='add'>+               "DB Connection is not "</div><div class='add'>+               "empty!");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!sqlite3_threadsafe()) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_NOT_MULTITHREAD_MODE,</div><div class='add'>+               "sqlite3 is not in multithreaded mode");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sql_conn = gf_sql_connection_init();</div><div class='add'>+    if (!sql_conn) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Extract sql db path from args*/</div><div class='add'>+    temp_str = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT(GFDB_STR_SQLITE3, args, GFDB_SQL_PARAM_DBPATH,</div><div class='add'>+                           temp_str, out);</div><div class='add'>+    strncpy(sql_conn-&gt;sqlite3_db_path, temp_str, PATH_MAX - 1);</div><div class='add'>+    sql_conn-&gt;sqlite3_db_path[PATH_MAX - 1] = 0;</div><div class='add'>+</div><div class='add'>+    is_dbfile_exist = (sys_stat(sql_conn-&gt;sqlite3_db_path, &amp;stbuf) == 0)</div><div class='add'>+                          ? _gf_true</div><div class='add'>+                          : _gf_false;</div><div class='add'>+</div><div class='add'>+    /*Creates DB if not created*/</div><div class='add'>+    sql_conn-&gt;sqlite3_db_conn = gf_open_sqlite3_conn(</div><div class='add'>+        sql_conn-&gt;sqlite3_db_path, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);</div><div class='add'>+    if (!sql_conn-&gt;sqlite3_db_conn) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CONNECTION_ERROR,</div><div class='add'>+               "Failed creating db connection");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If the file exist we skip the config part</div><div class='add'>+     * and creation of the schema */</div><div class='add'>+    if (is_dbfile_exist)</div><div class='add'>+        goto db_exists;</div><div class='add'>+</div><div class='add'>+    /*Apply sqlite3 params to database*/</div><div class='add'>+    ret = apply_sql_params_db(sql_conn, args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+               "Failed applying sql params"</div><div class='add'>+               " to %s",</div><div class='add'>+               sql_conn-&gt;sqlite3_db_path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Create the schema if NOT present*/</div><div class='add'>+    ret = create_filetable(sql_conn-&gt;sqlite3_db_conn);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+               "Failed Creating %s Table", GF_FILE_TABLE);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> db_exists:</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_sqlite3_fini ((void **)&amp;sql_conn);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_sqlite3_fini((void **)&amp;sql_conn);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *db_conn = sql_conn;</div><div class='add'>+    *db_conn = sql_conn;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_fini (void **db_conn)</div><div class='add'>+gf_sqlite3_fini(void **db_conn)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (db_conn);</div><div class='del'>-        sql_conn = *db_conn;</div><div class='del'>-</div><div class='del'>-        if (sql_conn) {</div><div class='del'>-                if (sql_conn-&gt;sqlite3_db_conn) {</div><div class='del'>-                        ret = gf_close_sqlite3_conn (sql_conn-&gt;sqlite3_db_conn);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                /*Logging of error done in</div><div class='del'>-                                 * gf_close_sqlite3_conn()*/</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        sql_conn-&gt;sqlite3_db_conn = NULL;</div><div class='del'>-                }</div><div class='del'>-                gf_sql_connection_fini (&amp;sql_conn);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(db_conn);</div><div class='add'>+    sql_conn = *db_conn;</div><div class='add'>+</div><div class='add'>+    if (sql_conn) {</div><div class='add'>+        if (sql_conn-&gt;sqlite3_db_conn) {</div><div class='add'>+            ret = gf_close_sqlite3_conn(sql_conn-&gt;sqlite3_db_conn);</div><div class='add'>+            if (ret) {</div><div class='add'>+                /*Logging of error done in</div><div class='add'>+                 * gf_close_sqlite3_conn()*/</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            sql_conn-&gt;sqlite3_db_conn = NULL;</div><div class='ctx'>         }</div><div class='del'>-        *db_conn = sql_conn;</div><div class='del'>-        ret = 0;</div><div class='add'>+        gf_sql_connection_fini(&amp;sql_conn);</div><div class='add'>+    }</div><div class='add'>+    *db_conn = sql_conn;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='hunk'>@@ -520,79 +497,84 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  * ***************************************************************************/</div><div class='ctx'> </div><div class='del'>-int gf_sqlite3_insert(void *db_conn, gfdb_db_record_t *gfdb_db_record)</div><div class='add'>+int</div><div class='add'>+gf_sqlite3_insert(void *db_conn, gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                         =       -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn   =       db_conn;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN(sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='ctx'> </div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='ctx'> </div><div class='del'>-        switch (gfdb_db_record-&gt;gfdb_fop_path) {</div><div class='add'>+    switch (gfdb_db_record-&gt;gfdb_fop_path) {</div><div class='ctx'>         case GFDB_FOP_WIND:</div><div class='del'>-                ret = gf_sql_insert_wind (sql_conn, gfdb_db_record);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors), 0,</div><div class='del'>-                                LG_MSG_INSERT_FAILED, "Failed wind insert");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = gf_sql_insert_wind(sql_conn, gfdb_db_record);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_INSERT_FAILED, "Failed wind insert");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GFDB_FOP_UNWIND:</div><div class='del'>-                ret = gf_sql_insert_unwind (sql_conn, gfdb_db_record);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors), 0,</div><div class='del'>-                                LG_MSG_INSERT_FAILED, "Failed unwind insert");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = gf_sql_insert_unwind(sql_conn, gfdb_db_record);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_INSERT_FAILED, "Failed unwind insert");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GFDB_FOP_WDEL:</div><div class='del'>-                ret = gf_sql_update_delete_wind (sql_conn, gfdb_db_record);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors), 0,</div><div class='del'>-                                LG_MSG_UPDATE_FAILED, "Failed updating delete "</div><div class='del'>-                                "during wind");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = gf_sql_update_delete_wind(sql_conn, gfdb_db_record);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                       "Failed updating delete "</div><div class='add'>+                       "during wind");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GFDB_FOP_UNDEL:</div><div class='ctx'>         case GFDB_FOP_UNDEL_ALL:</div><div class='del'>-                ret = gf_sql_delete_unwind (sql_conn, gfdb_db_record);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors), 0,</div><div class='del'>-                                LG_MSG_DELETE_FAILED, "Failed deleting");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = gf_sql_delete_unwind(sql_conn, gfdb_db_record);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_DELETE_FAILED, "Failed deleting");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GFDB_FOP_INVALID:</div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INVALID_FOP,</div><div class='del'>-                        "Cannot record to DB: Invalid FOP");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INVALID_FOP,</div><div class='add'>+                   "Cannot record to DB: Invalid FOP");</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> gf_sqlite3_delete(void *db_conn, gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='ctx'> </div><div class='del'>-        CHECK_SQL_CONN(sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='hunk'>@@ -603,27 +585,24 @@ out:</div><div class='ctx'>  * ***************************************************************************/</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_get_basic_query_stmt (char **out_stmt)</div><div class='add'>+gf_get_basic_query_stmt(char **out_stmt)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        ret = gf_asprintf (out_stmt, "select GF_FILE_TB.GF_ID,"</div><div class='del'>-                                  "GF_FLINK_TB.GF_PID ,"</div><div class='del'>-                                  "GF_FLINK_TB.FNAME "</div><div class='del'>-                                  "from GF_FLINK_TB, GF_FILE_TB "</div><div class='del'>-                                  "where "</div><div class='del'>-                                  "GF_FILE_TB.GF_ID = GF_FLINK_TB.GF_ID ");</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed to create base query statement");</div><div class='del'>-                *out_stmt = NULL;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ret = gf_asprintf(out_stmt,</div><div class='add'>+                      "select GF_FILE_TB.GF_ID,"</div><div class='add'>+                      "GF_FLINK_TB.GF_PID ,"</div><div class='add'>+                      "GF_FLINK_TB.FNAME "</div><div class='add'>+                      "from GF_FLINK_TB, GF_FILE_TB "</div><div class='add'>+                      "where "</div><div class='add'>+                      "GF_FILE_TB.GF_ID = GF_FLINK_TB.GF_ID ");</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed to create base query statement");</div><div class='add'>+        *out_stmt = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Find All files recorded in the DB</div><div class='ctx'>  * Input:</div><div class='hunk'>@@ -631,71 +610,65 @@ gf_get_basic_query_stmt (char **out_stmt)</div><div class='ctx'>  *                              result records from the query</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_find_all (void *db_conn, gf_query_callback_t query_callback,</div><div class='del'>-                        void *query_cbk_args,</div><div class='del'>-                        int query_limit)</div><div class='add'>+gf_sqlite3_find_all(void *db_conn, gf_query_callback_t query_callback,</div><div class='add'>+                    void *query_cbk_args, int query_limit)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 =       -1;</div><div class='del'>-        char *query_str                         =       NULL;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        sqlite3_stmt *prep_stmt                 =       NULL;</div><div class='del'>-        char *limit_query                       =       NULL;</div><div class='del'>-        char *query                             =       NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *query_str = NULL;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *prep_stmt = NULL;</div><div class='add'>+    char *limit_query = NULL;</div><div class='add'>+    char *query = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = gf_get_basic_query_stmt (&amp;query_str);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='ctx'> </div><div class='del'>-        query = query_str;</div><div class='del'>-</div><div class='del'>-        if (query_limit &gt; 0) {</div><div class='del'>-                ret = gf_asprintf (&amp;limit_query, "%s LIMIT %d",</div><div class='del'>-                                   query, query_limit);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_QUERY_FAILED,</div><div class='del'>-                                "Failed creating limit query statement");</div><div class='del'>-                        limit_query = NULL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    ret = gf_get_basic_query_stmt(&amp;query_str);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                query = limit_query;</div><div class='del'>-        }</div><div class='add'>+    query = query_str;</div><div class='ctx'> </div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, query, -1,</div><div class='del'>-                                &amp;prep_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED,</div><div class='del'>-                        "Failed to prepare statement %s: %s", query,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed Query %s", query);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (query_limit &gt; 0) {</div><div class='add'>+        ret = gf_asprintf(&amp;limit_query, "%s LIMIT %d", query, query_limit);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+                   "Failed creating limit query statement");</div><div class='add'>+            limit_query = NULL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        query = limit_query;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, query, -1, &amp;prep_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed to prepare statement %s: %s", query,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed Query %s", query);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        sqlite3_finalize (prep_stmt);</div><div class='del'>-        GF_FREE (query_str);</div><div class='add'>+    sqlite3_finalize(prep_stmt);</div><div class='add'>+    GF_FREE(query_str);</div><div class='ctx'> </div><div class='del'>-        if (limit_query)</div><div class='del'>-                GF_FREE (limit_query);</div><div class='add'>+    if (limit_query)</div><div class='add'>+        GF_FREE(limit_query);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Find recently changed files from the DB</div><div class='ctx'>  * Input:</div><div class='hunk'>@@ -705,97 +678,101 @@ out:</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='ctx'> gf_sqlite3_find_recently_changed_files(void *db_conn,</div><div class='del'>-                                        gf_query_callback_t query_callback,</div><div class='del'>-                                        void *query_cbk_args,</div><div class='del'>-                                        gfdb_time_t *from_time)</div><div class='add'>+                                       gf_query_callback_t query_callback,</div><div class='add'>+                                       void *query_cbk_args,</div><div class='add'>+                                       gfdb_time_t *from_time)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 =       -1;</div><div class='del'>-        char *query_str                         =       NULL;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        sqlite3_stmt *prep_stmt                 =       NULL;</div><div class='del'>-        uint64_t  from_time_usec                =       0;</div><div class='del'>-        char *base_query_str                    =       NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='del'>-</div><div class='del'>-        ret = gf_get_basic_query_stmt (&amp;base_query_str);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;query_str, "%s AND"</div><div class='del'>-                /*First condition: For writes*/</div><div class='del'>-                "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + "</div><div class='del'>-                GF_COL_TB_WMSEC ") &gt;= ? )"</div><div class='del'>-                " OR "</div><div class='del'>-                /*Second condition: For reads*/</div><div class='del'>-                "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + "</div><div class='del'>-                GF_COL_TB_RWMSEC ") &gt;= ?) )"</div><div class='del'>-                /* Order by write wind time in a descending order</div><div class='del'>-                 * i.e most hot files w.r.t to write */</div><div class='del'>-                " ORDER BY GF_FILE_TB.W_SEC DESC",</div><div class='del'>-                base_query_str);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed creating query statement");</div><div class='del'>-                query_str = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        from_time_usec = gfdb_time_2_usec (from_time);</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, query_str, -1,</div><div class='del'>-                               &amp;prep_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed to prepare statement %s :"</div><div class='del'>-                        " %s", query_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 1, from_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", from_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind read wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 2, from_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s ", from_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the query*/</div><div class='del'>-        ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed Query %s", query_str);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *query_str = NULL;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *prep_stmt = NULL;</div><div class='add'>+    uint64_t from_time_usec = 0;</div><div class='add'>+    char *base_query_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='add'>+</div><div class='add'>+    ret = gf_get_basic_query_stmt(&amp;base_query_str);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(</div><div class='add'>+        &amp;query_str,</div><div class='add'>+        "%s AND"</div><div class='add'>+        /*First condition: For writes*/</div><div class='add'>+        "( ((" GF_COL_TB_WSEC " * " TOSTRING(</div><div class='add'>+            GFDB_MICROSEC) " + " GF_COL_TB_WMSEC</div><div class='add'>+                           ") &gt;= ? )"</div><div class='add'>+                           " OR "</div><div class='add'>+                           /*Second condition: For reads*/</div><div class='add'>+                           "((" GF_COL_TB_RWSEC " * " TOSTRING(</div><div class='add'>+                               GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC</div><div class='add'>+                                              ") &gt;= ?) )"</div><div class='add'>+                                              /* Order by write wind time in a</div><div class='add'>+                                               * descending order i.e most hot</div><div class='add'>+                                               * files w.r.t to write */</div><div class='add'>+                                              " ORDER BY GF_FILE_TB.W_SEC DESC",</div><div class='add'>+        base_query_str);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed creating query statement");</div><div class='add'>+        query_str = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    from_time_usec = gfdb_time_2_usec(from_time);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, query_str, -1, &amp;prep_stmt,</div><div class='add'>+                          0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed to prepare statement %s :"</div><div class='add'>+               " %s",</div><div class='add'>+               query_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 1, from_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind from_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               from_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 2, from_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind from_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s ",</div><div class='add'>+               from_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the query*/</div><div class='add'>+    ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed Query %s", query_str);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        sqlite3_finalize (prep_stmt);</div><div class='del'>-        GF_FREE (base_query_str);</div><div class='del'>-        GF_FREE (query_str);</div><div class='del'>-        return ret;</div><div class='add'>+    sqlite3_finalize(prep_stmt);</div><div class='add'>+    GF_FREE(base_query_str);</div><div class='add'>+    GF_FREE(query_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Find unchanged files from a specified time from the DB</div><div class='ctx'>  * Input:</div><div class='hunk'>@@ -804,101 +781,101 @@ out:</div><div class='ctx'>  *      for_time        :        Time from where the file/s are not changed</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_find_unchanged_for_time (void *db_conn,</div><div class='del'>-                                        gf_query_callback_t query_callback,</div><div class='del'>-                                        void *query_cbk_args,</div><div class='del'>-                                        gfdb_time_t *for_time)</div><div class='add'>+gf_sqlite3_find_unchanged_for_time(void *db_conn,</div><div class='add'>+                                   gf_query_callback_t query_callback,</div><div class='add'>+                                   void *query_cbk_args, gfdb_time_t *for_time)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 =       -1;</div><div class='del'>-        char *query_str                         =       NULL;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        sqlite3_stmt *prep_stmt                 =       NULL;</div><div class='del'>-        uint64_t  for_time_usec                 =       0;</div><div class='del'>-        char *base_query_str                    =       NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='del'>-</div><div class='del'>-        ret = gf_get_basic_query_stmt (&amp;base_query_str);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;query_str, "%s AND "</div><div class='del'>-                /*First condition: For writes*/</div><div class='del'>-                "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + "</div><div class='del'>-                GF_COL_TB_WMSEC ") &lt;= ? )"</div><div class='del'>-                " AND "</div><div class='del'>-                /*Second condition: For reads*/</div><div class='del'>-                "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + "</div><div class='del'>-                GF_COL_TB_RWMSEC ") &lt;= ?) )"</div><div class='del'>-                /* Order by write wind time in a ascending order</div><div class='del'>-                 * i.e most cold files w.r.t to write */</div><div class='del'>-                " ORDER BY GF_FILE_TB.W_SEC ASC",</div><div class='del'>-                base_query_str);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed to create query statement");</div><div class='del'>-                query_str = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for_time_usec = gfdb_time_2_usec (for_time);</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, query_str, -1,</div><div class='del'>-                               &amp;prep_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed to prepare statement %s :"</div><div class='del'>-                        " %s", query_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 1, for_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", for_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind read wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 2, for_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", for_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the query*/</div><div class='del'>-        ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed Query %s", query_str);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *query_str = NULL;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *prep_stmt = NULL;</div><div class='add'>+    uint64_t for_time_usec = 0;</div><div class='add'>+    char *base_query_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='add'>+</div><div class='add'>+    ret = gf_get_basic_query_stmt(&amp;base_query_str);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(</div><div class='add'>+        &amp;query_str,</div><div class='add'>+        "%s AND "</div><div class='add'>+        /*First condition: For writes*/</div><div class='add'>+        "( ((" GF_COL_TB_WSEC " * " TOSTRING(</div><div class='add'>+            GFDB_MICROSEC) " + " GF_COL_TB_WMSEC</div><div class='add'>+                           ") &lt;= ? )"</div><div class='add'>+                           " AND "</div><div class='add'>+                           /*Second condition: For reads*/</div><div class='add'>+                           "((" GF_COL_TB_RWSEC " * " TOSTRING(</div><div class='add'>+                               GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC</div><div class='add'>+                                              ") &lt;= ?) )"</div><div class='add'>+                                              /* Order by write wind time in a</div><div class='add'>+                                               * ascending order i.e most cold</div><div class='add'>+                                               * files w.r.t to write */</div><div class='add'>+                                              " ORDER BY GF_FILE_TB.W_SEC ASC",</div><div class='add'>+        base_query_str);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed to create query statement");</div><div class='add'>+        query_str = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for_time_usec = gfdb_time_2_usec(for_time);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, query_str, -1, &amp;prep_stmt,</div><div class='add'>+                          0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed to prepare statement %s :"</div><div class='add'>+               " %s",</div><div class='add'>+               query_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 1, for_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind for_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               for_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 2, for_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind for_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               for_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the query*/</div><div class='add'>+    ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed Query %s", query_str);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        sqlite3_finalize (prep_stmt);</div><div class='del'>-        GF_FREE (base_query_str);</div><div class='del'>-        GF_FREE (query_str);</div><div class='del'>-        return ret;</div><div class='add'>+    sqlite3_finalize(prep_stmt);</div><div class='add'>+    GF_FREE(base_query_str);</div><div class='add'>+    GF_FREE(query_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Find recently changed files with a specific frequency from the DB</div><div class='ctx'>  * Input:</div><div class='hunk'>@@ -911,140 +888,144 @@ out:</div><div class='ctx'>  *      clear_counters  :       Clear counters (r/w) for all inodes in DB</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_find_recently_changed_files_freq (void *db_conn,</div><div class='del'>-                                        gf_query_callback_t query_callback,</div><div class='del'>-                                        void *query_cbk_args,</div><div class='del'>-                                        gfdb_time_t *from_time,</div><div class='del'>-                                        int freq_write_cnt,</div><div class='del'>-                                        int freq_read_cnt,</div><div class='del'>-                                        gf_boolean_t clear_counters)</div><div class='add'>+gf_sqlite3_find_recently_changed_files_freq(</div><div class='add'>+    void *db_conn, gf_query_callback_t query_callback, void *query_cbk_args,</div><div class='add'>+    gfdb_time_t *from_time, int freq_write_cnt, int freq_read_cnt,</div><div class='add'>+    gf_boolean_t clear_counters)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 =       -1;</div><div class='del'>-        char *query_str                         =       NULL;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        sqlite3_stmt *prep_stmt                 =       NULL;</div><div class='del'>-        uint64_t  from_time_usec                =       0;</div><div class='del'>-        char *base_query_str                    =       NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='del'>-</div><div class='del'>-        ret = gf_get_basic_query_stmt (&amp;base_query_str);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = gf_asprintf (&amp;query_str, "%s AND "</div><div class='del'>-                /*First condition: For Writes*/</div><div class='del'>-                "( ( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + "</div><div class='del'>-                GF_COL_TB_WMSEC ") &gt;= ? )"</div><div class='del'>-                " AND "" (" GF_COL_TB_WFC " &gt;= ? ) )"</div><div class='del'>-                " OR "</div><div class='del'>-                /*Second condition: For Reads */</div><div class='del'>-                "( ((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + "</div><div class='del'>-                GF_COL_TB_RWMSEC ") &gt;= ?)"</div><div class='del'>-                " AND "" (" GF_COL_TB_RFC " &gt;= ? ) ) )"</div><div class='del'>-                /* Order by write wind time and write freq in a descending order</div><div class='del'>-                 * i.e most hot files w.r.t to write */</div><div class='del'>-                " ORDER BY GF_FILE_TB.W_SEC DESC, "</div><div class='del'>-                "GF_FILE_TB.WRITE_FREQ_CNTR DESC",</div><div class='del'>-                base_query_str);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed to create query statement");</div><div class='del'>-                query_str = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        from_time_usec = gfdb_time_2_usec (from_time);</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, query_str, -1,</div><div class='del'>-                                &amp;prep_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed to prepare statement %s :"</div><div class='del'>-                        " %s", query_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 1, from_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", from_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write frequency thresold*/</div><div class='del'>-        ret = sqlite3_bind_int (prep_stmt, 2, freq_write_cnt);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind freq_write_cnt "</div><div class='del'>-                        "%d : %s", freq_write_cnt,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Bind read wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 3, from_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", from_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind read frequency thresold*/</div><div class='del'>-        ret = sqlite3_bind_int (prep_stmt, 4, freq_read_cnt);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind freq_read_cnt "</div><div class='del'>-                        "%d : %s", freq_read_cnt,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the query*/</div><div class='del'>-        ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *query_str = NULL;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *prep_stmt = NULL;</div><div class='add'>+    uint64_t from_time_usec = 0;</div><div class='add'>+    char *base_query_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='add'>+</div><div class='add'>+    ret = gf_get_basic_query_stmt(&amp;base_query_str);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = gf_asprintf(</div><div class='add'>+        &amp;query_str,</div><div class='add'>+        "%s AND "</div><div class='add'>+        /*First condition: For Writes*/</div><div class='add'>+        "( ( ((" GF_COL_TB_WSEC " * " TOSTRING(</div><div class='add'>+            GFDB_MICROSEC) " + " GF_COL_TB_WMSEC</div><div class='add'>+                           ") &gt;= ? )"</div><div class='add'>+                           " AND "</div><div class='add'>+                           " (" GF_COL_TB_WFC</div><div class='add'>+                           " &gt;= ? ) )"</div><div class='add'>+                           " OR "</div><div class='add'>+                           /*Second condition: For Reads */</div><div class='add'>+                           "( ((" GF_COL_TB_RWSEC " * " TOSTRING(</div><div class='add'>+                               GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC</div><div class='add'>+                                              ") &gt;= ?)"</div><div class='add'>+                                              " AND "</div><div class='add'>+                                              " (" GF_COL_TB_RFC</div><div class='add'>+                                              " &gt;= ? ) ) )"</div><div class='add'>+                                              /* Order by write wind time and</div><div class='add'>+                                               * write freq in a descending</div><div class='add'>+                                               * order</div><div class='add'>+                                               * i.e most hot files w.r.t to</div><div class='add'>+                                               * write */</div><div class='add'>+                                              " ORDER BY GF_FILE_TB.W_SEC "</div><div class='add'>+                                              "DESC, "</div><div class='add'>+                                              "GF_FILE_TB.WRITE_FREQ_CNTR DESC",</div><div class='add'>+        base_query_str);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed to create query statement");</div><div class='add'>+        query_str = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    from_time_usec = gfdb_time_2_usec(from_time);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, query_str, -1, &amp;prep_stmt,</div><div class='add'>+                          0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed to prepare statement %s :"</div><div class='add'>+               " %s",</div><div class='add'>+               query_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 1, from_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind from_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               from_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write frequency thresold*/</div><div class='add'>+    ret = sqlite3_bind_int(prep_stmt, 2, freq_write_cnt);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind freq_write_cnt "</div><div class='add'>+               "%d : %s",</div><div class='add'>+               freq_write_cnt, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 3, from_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind from_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               from_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read frequency thresold*/</div><div class='add'>+    ret = sqlite3_bind_int(prep_stmt, 4, freq_read_cnt);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind freq_read_cnt "</div><div class='add'>+               "%d : %s",</div><div class='add'>+               freq_read_cnt, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the query*/</div><div class='add'>+    ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed Query %s", query_str);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Clear counters*/</div><div class='add'>+    if (clear_counters) {</div><div class='add'>+        ret = gf_sql_clear_counters(sql_conn);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed Query %s", query_str);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Clear counters*/</div><div class='del'>-        if (clear_counters) {</div><div class='del'>-                ret = gf_sql_clear_counters (sql_conn);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_CLEAR_COUNTER_FAILED, "Failed to clear"</div><div class='del'>-                                " counters!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                   LG_MSG_CLEAR_COUNTER_FAILED,</div><div class='add'>+                   "Failed to clear"</div><div class='add'>+                   " counters!");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        sqlite3_finalize (prep_stmt);</div><div class='del'>-        GF_FREE (base_query_str);</div><div class='del'>-        GF_FREE (query_str);</div><div class='del'>-        return ret;</div><div class='add'>+    sqlite3_finalize(prep_stmt);</div><div class='add'>+    GF_FREE(base_query_str);</div><div class='add'>+    GF_FREE(query_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Find unchanged files from a specified time, w.r.t to frequency, from the DB</div><div class='ctx'>  * Input:</div><div class='hunk'>@@ -1056,30 +1037,29 @@ out:</div><div class='ctx'>  *      clear_counters  :       Clear counters (r/w) for all inodes in DB</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_find_unchanged_for_time_freq (void *db_conn,</div><div class='add'>+gf_sqlite3_find_unchanged_for_time_freq(void *db_conn,</div><div class='ctx'>                                         gf_query_callback_t query_callback,</div><div class='ctx'>                                         void *query_cbk_args,</div><div class='ctx'>                                         gfdb_time_t *for_time,</div><div class='del'>-                                        int freq_write_cnt,</div><div class='del'>-                                        int freq_read_cnt,</div><div class='add'>+                                        int freq_write_cnt, int freq_read_cnt,</div><div class='ctx'>                                         gf_boolean_t clear_counters)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 =       -1;</div><div class='del'>-        char *query_str                         =       NULL;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        sqlite3_stmt *prep_stmt                 =       NULL;</div><div class='del'>-        uint64_t  for_time_usec                 =       0;</div><div class='del'>-        char *base_query_str                    =       NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='del'>-</div><div class='del'>-        ret = gf_get_basic_query_stmt (&amp;base_query_str);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;query_str, "%s AND "</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *query_str = NULL;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *prep_stmt = NULL;</div><div class='add'>+    uint64_t for_time_usec = 0;</div><div class='add'>+    char *base_query_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='add'>+</div><div class='add'>+    ret = gf_get_basic_query_stmt(&amp;base_query_str);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf (&amp;query_str, "%s AND "</div><div class='ctx'>                 /*First condition: For Writes</div><div class='ctx'>                  * Files that have write wind time smaller than for_time</div><div class='ctx'>                  * OR</div><div class='hunk'>@@ -1109,145 +1089,141 @@ gf_sqlite3_find_unchanged_for_time_freq (void *db_conn,</div><div class='ctx'>                 "GF_FILE_TB.WRITE_FREQ_CNTR ASC",</div><div class='ctx'>                 base_query_str);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed to create query statement");</div><div class='del'>-                query_str = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for_time_usec = gfdb_time_2_usec (for_time);</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, query_str, -1,</div><div class='del'>-                                &amp;prep_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed to prepare delete "</div><div class='del'>-                        "statement %s : %s", query_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 1, for_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", for_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write frequency thresold*/</div><div class='del'>-        ret = sqlite3_bind_int (prep_stmt, 2, freq_write_cnt);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind freq_write_cnt"</div><div class='del'>-                        " %d : %s", freq_write_cnt,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind write wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 3, for_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", for_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Bind read wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 4, for_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", for_time_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind read frequency thresold*/</div><div class='del'>-        ret = sqlite3_bind_int (prep_stmt, 5, freq_read_cnt);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind freq_read_cnt "</div><div class='del'>-                        "%d : %s", freq_read_cnt,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind read wind time*/</div><div class='del'>-        ret = sqlite3_bind_int64 (prep_stmt, 6, for_time_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec "</div><div class='del'>-                        "%"PRIu64" : %s", for_time_usec,</div><div class='del'>-                        sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the query*/</div><div class='del'>-        ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed to create query statement");</div><div class='add'>+        query_str = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for_time_usec = gfdb_time_2_usec(for_time);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, query_str, -1, &amp;prep_stmt,</div><div class='add'>+                          0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed to prepare delete "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               query_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 1, for_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind for_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               for_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write frequency thresold*/</div><div class='add'>+    ret = sqlite3_bind_int(prep_stmt, 2, freq_write_cnt);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind freq_write_cnt"</div><div class='add'>+               " %d : %s",</div><div class='add'>+               freq_write_cnt, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind write wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 3, for_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind for_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               for_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 4, for_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind for_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               for_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read frequency thresold*/</div><div class='add'>+    ret = sqlite3_bind_int(prep_stmt, 5, freq_read_cnt);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind freq_read_cnt "</div><div class='add'>+               "%d : %s",</div><div class='add'>+               freq_read_cnt, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind read wind time*/</div><div class='add'>+    ret = sqlite3_bind_int64(prep_stmt, 6, for_time_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed to bind for_time_usec "</div><div class='add'>+               "%" PRIu64 " : %s",</div><div class='add'>+               for_time_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the query*/</div><div class='add'>+    ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed Query %s", query_str);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Clear counters*/</div><div class='add'>+    if (clear_counters) {</div><div class='add'>+        ret = gf_sql_clear_counters(sql_conn);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed Query %s", query_str);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Clear counters*/</div><div class='del'>-        if (clear_counters) {</div><div class='del'>-                ret = gf_sql_clear_counters (sql_conn);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_CLEAR_COUNTER_FAILED, "Failed to clear "</div><div class='del'>-                                "counters!");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                   LG_MSG_CLEAR_COUNTER_FAILED,</div><div class='add'>+                   "Failed to clear "</div><div class='add'>+                   "counters!");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        sqlite3_finalize (prep_stmt);</div><div class='del'>-        GF_FREE (base_query_str);</div><div class='del'>-        GF_FREE (query_str);</div><div class='del'>-        return ret;</div><div class='add'>+    sqlite3_finalize(prep_stmt);</div><div class='add'>+    GF_FREE(base_query_str);</div><div class='add'>+    GF_FREE(query_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_clear_files_heat (void *db_conn)</div><div class='add'>+gf_sqlite3_clear_files_heat(void *db_conn)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='ctx'> </div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='ctx'> </div><div class='del'>-        ret = gf_sql_clear_counters (sql_conn);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_CLEAR_COUNTER_FAILED, "Failed to clear "</div><div class='del'>-                        "files heat");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_sql_clear_counters(sql_conn);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CLEAR_COUNTER_FAILED,</div><div class='add'>+               "Failed to clear "</div><div class='add'>+               "files heat");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Function to extract version of sqlite db</div><div class='ctx'>  * Input:</div><div class='ctx'>  * void *db_conn        : Sqlite connection</div><div class='hunk'>@@ -1260,48 +1236,45 @@ out:</div><div class='ctx'>  *      On failure return -1</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_version (void *db_conn, char **version)</div><div class='add'>+gf_sqlite3_version(void *db_conn, char **version)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        sqlite3_stmt *pre_stmt = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_prepare_v2 (sql_conn-&gt;sqlite3_db_conn,</div><div class='del'>-                                "SELECT SQLITE_VERSION()",</div><div class='del'>-                                -1, &amp;pre_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed init prepare stmt %s",</div><div class='del'>-                        sqlite3_errmsg (db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_step(pre_stmt);</div><div class='del'>-        if (ret != SQLITE_ROW) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_GET_RECORD_FAILED, "Failed to get records "</div><div class='del'>-                        "from db : %s", sqlite3_errmsg (db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (version, "%s", sqlite3_column_text (pre_stmt, 0));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed extracting version");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *pre_stmt = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare_v2(sql_conn-&gt;sqlite3_db_conn,</div><div class='add'>+                             "SELECT SQLITE_VERSION()", -1, &amp;pre_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed init prepare stmt %s", sqlite3_errmsg(db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_step(pre_stmt);</div><div class='add'>+    if (ret != SQLITE_ROW) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED,</div><div class='add'>+               "Failed to get records "</div><div class='add'>+               "from db : %s",</div><div class='add'>+               sqlite3_errmsg(db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(version, "%s", sqlite3_column_text(pre_stmt, 0));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed extracting version");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        sqlite3_finalize (pre_stmt);</div><div class='add'>+    sqlite3_finalize(pre_stmt);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Function to extract PRAGMA from sqlite db</div><div class='ctx'>  * Input:</div><div class='ctx'>  * void *db_conn        : Sqlite connection</div><div class='hunk'>@@ -1315,59 +1288,57 @@ out:</div><div class='ctx'>  *      On failure return -1</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_pragma (void *db_conn, char *pragma_key, char **pragma_value)</div><div class='add'>+gf_sqlite3_pragma(void *db_conn, char *pragma_key, char **pragma_value)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn = db_conn;</div><div class='del'>-        sqlite3_stmt *pre_stmt = NULL;</div><div class='del'>-        char *sqlstring = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_key, out);</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;sqlstring, "PRAGMA %s;", pragma_key);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    sqlite3_stmt *pre_stmt = NULL;</div><div class='add'>+    char *sqlstring = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pragma_key, out);</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;sqlstring, "PRAGMA %s;", pragma_key);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed allocating memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_prepare_v2(sql_conn-&gt;sqlite3_db_conn, sqlstring, -1,</div><div class='add'>+                             &amp;pre_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed init prepare stmt %s", sqlite3_errmsg(db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_step(pre_stmt);</div><div class='add'>+    if (ret != SQLITE_ROW) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED,</div><div class='add'>+               "Failed to get records "</div><div class='add'>+               "from db : %s",</div><div class='add'>+               sqlite3_errmsg(db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (pragma_value) {</div><div class='add'>+        ret = gf_asprintf(pragma_value, "%s", sqlite3_column_text(pre_stmt, 0));</div><div class='ctx'>         if (ret &lt;= 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed allocating memory");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+                   "Failed to get %s from db", pragma_key);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = sqlite3_prepare_v2 (sql_conn-&gt;sqlite3_db_conn,</div><div class='del'>-                                  sqlstring, -1, &amp;pre_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed init prepare stmt %s",</div><div class='del'>-                        sqlite3_errmsg (db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_step (pre_stmt);</div><div class='del'>-        if (ret != SQLITE_ROW) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_GET_RECORD_FAILED, "Failed to get records "</div><div class='del'>-                        "from db : %s", sqlite3_errmsg (db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (pragma_value) {</div><div class='del'>-                ret = gf_asprintf (pragma_value, "%s",</div><div class='del'>-                                   sqlite3_column_text (pre_stmt, 0));</div><div class='del'>-                if (ret &lt;= 0) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_QUERY_FAILED, "Failed to get %s from db",</div><div class='del'>-                                pragma_key);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (sqlstring);</div><div class='add'>+    GF_FREE(sqlstring);</div><div class='ctx'> </div><div class='del'>-        sqlite3_finalize (pre_stmt);</div><div class='add'>+    sqlite3_finalize(pre_stmt);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function to set PRAGMA to sqlite db</div><div class='hunk'>@@ -1380,35 +1351,34 @@ out:</div><div class='ctx'>  *      On failure return -1</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_set_pragma (void *db_conn, char *pragma_key, char *pragma_value)</div><div class='add'>+gf_sqlite3_set_pragma(void *db_conn, char *pragma_key, char *pragma_value)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn = db_conn;</div><div class='del'>-        char sqlstring[GF_NAME_MAX] = "";</div><div class='del'>-        char *db_pragma_value = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    char sqlstring[GF_NAME_MAX] = "";</div><div class='add'>+    char *db_pragma_value = NULL;</div><div class='ctx'> </div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_key, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_value, out);</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pragma_key, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pragma_value, out);</div><div class='ctx'> </div><div class='del'>-        GF_SQLITE3_SET_PRAGMA(sqlstring, pragma_key, "%s",</div><div class='del'>-                              pragma_value, ret, out);</div><div class='add'>+    GF_SQLITE3_SET_PRAGMA(sqlstring, pragma_key, "%s", pragma_value, ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = gf_sqlite3_pragma (db_conn, pragma_key, &amp;db_pragma_value);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='del'>-                        "Failed to get %s pragma", pragma_key);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, 0,</div><div class='del'>-                        "Value set on DB %s : %s", pragma_key, db_pragma_value);</div><div class='del'>-        }</div><div class='del'>-        GF_FREE (db_pragma_value);</div><div class='add'>+    ret = gf_sqlite3_pragma(db_conn, pragma_key, &amp;db_pragma_value);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED,</div><div class='add'>+               "Failed to get %s pragma", pragma_key);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, 0, "Value set on DB %s : %s",</div><div class='add'>+               pragma_key, db_pragma_value);</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(db_pragma_value);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function to vacuum of sqlite db</div><div class='hunk'>@@ -1421,167 +1391,152 @@ out:</div><div class='ctx'>  *      On failure return -1</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_sqlite3_vacuum (void *db_conn, gf_boolean_t compact_active,</div><div class='del'>-                   gf_boolean_t compact_mode_switched)</div><div class='add'>+gf_sqlite3_vacuum(void *db_conn, gf_boolean_t compact_active,</div><div class='add'>+                  gf_boolean_t compact_mode_switched)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_sql_connection_t *sql_conn           =       db_conn;</div><div class='del'>-        char *sqlstring = NULL;</div><div class='del'>-        char *sql_strerror = NULL;</div><div class='del'>-        gf_boolean_t changing_pragma = _gf_true;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-</div><div class='del'>-        if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_NONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_INFO, 0,</div><div class='del'>-                        LG_MSG_COMPACT_STATUS,</div><div class='del'>-                        "VACUUM type is off: no VACUUM to do");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (compact_mode_switched) {</div><div class='del'>-                if (compact_active) { /* Then it was OFF before.</div><div class='del'>-                                        So turn everything on */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        switch (GF_SQL_COMPACT_DEF) {</div><div class='del'>-                        case GF_SQL_COMPACT_FULL:</div><div class='del'>-                                ret = gf_sqlite3_set_pragma (db_conn,</div><div class='del'>-                                                             "auto_vacuum",</div><div class='del'>-                                                             GF_SQL_AV_FULL);</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_SQL_COMPACT_INCR:</div><div class='del'>-                                ret = gf_sqlite3_set_pragma (db_conn,</div><div class='del'>-                                                             "auto_vacuum",</div><div class='del'>-                                                             GF_SQL_AV_INCR);</div><div class='del'>-                                break;</div><div class='del'>-                        case GF_SQL_COMPACT_MANUAL:</div><div class='del'>-                                changing_pragma = _gf_false;</div><div class='del'>-                                break;</div><div class='del'>-                        default:</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_COMPACT_FAILED,</div><div class='del'>-                                        "VACUUM type undefined");</div><div class='del'>-                                goto out;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                } else { /* Then it was ON before, so turn it all off */</div><div class='del'>-                        if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_FULL ||</div><div class='del'>-                           GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_INCR) {</div><div class='del'>-                                ret = gf_sqlite3_set_pragma (db_conn,</div><div class='del'>-                                                             "auto_vacuum",</div><div class='del'>-                                                             GF_SQL_AV_NONE);</div><div class='del'>-                        } else {</div><div class='del'>-                                changing_pragma = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_TRACE, 0,</div><div class='del'>-                                LG_MSG_PREPARE_FAILED,</div><div class='del'>-                                "Failed to set the pragma");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_sql_connection_t *sql_conn = db_conn;</div><div class='add'>+    char *sqlstring = NULL;</div><div class='add'>+    char *sql_strerror = NULL;</div><div class='add'>+    gf_boolean_t changing_pragma = _gf_true;</div><div class='ctx'> </div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_INFO, 0,</div><div class='del'>-                        LG_MSG_COMPACT_STATUS, "Turning compaction %i",</div><div class='del'>-                        GF_SQL_COMPACT_DEF);</div><div class='del'>-</div><div class='del'>-                /* If we move from an auto_vacuum scheme to off, */</div><div class='del'>-                /* or vice-versa, we must VACUUM to save the change. */</div><div class='del'>-                /* In the case of a manual VACUUM scheme, we might as well */</div><div class='del'>-                /* run a manual VACUUM now if we */</div><div class='del'>-                if (changing_pragma || compact_active) {</div><div class='del'>-                        ret = gf_asprintf (&amp;sqlstring, "VACUUM;");</div><div class='del'>-                        if (ret &lt;= 0) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_PREPARE_FAILED,</div><div class='del'>-                                        "Failed allocating memory");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0,</div><div class='del'>-                               LG_MSG_COMPACT_STATUS, "Sealed with a VACUUM");</div><div class='del'>-                }</div><div class='del'>-        } else { /* We are active, so it's time to VACUUM */</div><div class='del'>-                if (!compact_active) { /* Did we somehow enter an inconsistent</div><div class='del'>-                                          state? */</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_PREPARE_FAILED,</div><div class='del'>-                                "Tried to VACUUM when compaction inactive");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='ctx'> </div><div class='del'>-                gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0,</div><div class='del'>-                       LG_MSG_COMPACT_STATUS,</div><div class='del'>-                       "Doing regular vacuum of type %i", GF_SQL_COMPACT_DEF);</div><div class='del'>-</div><div class='del'>-                switch (GF_SQL_COMPACT_DEF) {</div><div class='del'>-                case GF_SQL_COMPACT_INCR: /* INCR auto_vacuum */</div><div class='del'>-                        ret = gf_asprintf(&amp;sqlstring,</div><div class='del'>-                                          "PRAGMA incremental_vacuum;");</div><div class='del'>-                        if (ret &lt;= 0) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_PREPARE_FAILED,</div><div class='del'>-                                        "Failed allocating memory");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0,</div><div class='del'>-                               LG_MSG_COMPACT_STATUS,</div><div class='del'>-                               "Will commence an incremental VACUUM");</div><div class='del'>-                        break;</div><div class='del'>-                /* (MANUAL) Invoke the VACUUM command */</div><div class='del'>-                case GF_SQL_COMPACT_MANUAL:</div><div class='del'>-                        ret = gf_asprintf(&amp;sqlstring, "VACUUM;");</div><div class='del'>-                        if (ret &lt;= 0) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_PREPARE_FAILED,</div><div class='del'>-                                        "Failed allocating memory");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0,</div><div class='del'>-                               LG_MSG_COMPACT_STATUS,</div><div class='del'>-                               "Will commence a VACUUM");</div><div class='del'>-                        break;</div><div class='del'>-                /* (FULL) The database does the compaction itself. */</div><div class='del'>-                /* We cannot do anything else, so we can leave */</div><div class='del'>-                /* without sending anything to the database */</div><div class='add'>+    if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_NONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+               "VACUUM type is off: no VACUUM to do");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (compact_mode_switched) {</div><div class='add'>+        if (compact_active) { /* Then it was OFF before.</div><div class='add'>+                                So turn everything on */</div><div class='add'>+            ret = 0;</div><div class='add'>+            switch (GF_SQL_COMPACT_DEF) {</div><div class='ctx'>                 case GF_SQL_COMPACT_FULL:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto success;</div><div class='del'>-                /* Any other state must be an error. Note that OFF */</div><div class='del'>-                /* cannot hit this statement since we immediately leave */</div><div class='del'>-                /* in that case */</div><div class='add'>+                    ret = gf_sqlite3_set_pragma(db_conn, "auto_vacuum",</div><div class='add'>+                                                GF_SQL_AV_FULL);</div><div class='add'>+                    break;</div><div class='add'>+                case GF_SQL_COMPACT_INCR:</div><div class='add'>+                    ret = gf_sqlite3_set_pragma(db_conn, "auto_vacuum",</div><div class='add'>+                                                GF_SQL_AV_INCR);</div><div class='add'>+                    break;</div><div class='add'>+                case GF_SQL_COMPACT_MANUAL:</div><div class='add'>+                    changing_pragma = _gf_false;</div><div class='add'>+                    break;</div><div class='ctx'>                 default:</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_COMPACT_FAILED,</div><div class='del'>-                                "VACUUM type undefined");</div><div class='del'>-                        goto out;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                           LG_MSG_COMPACT_FAILED, "VACUUM type undefined");</div><div class='add'>+                    goto out;</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+        } else { /* Then it was ON before, so turn it all off */</div><div class='add'>+            if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_FULL ||</div><div class='add'>+                GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_INCR) {</div><div class='add'>+                ret = gf_sqlite3_set_pragma(db_conn, "auto_vacuum",</div><div class='add'>+                                            GF_SQL_AV_NONE);</div><div class='add'>+            } else {</div><div class='add'>+                changing_pragma = _gf_false;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_COMPACT_STATUS,</div><div class='del'>-               "SQLString == %s", sqlstring);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+                   "Failed to set the pragma");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = sqlite3_exec(sql_conn-&gt;sqlite3_db_conn, sqlstring, NULL, NULL,</div><div class='del'>-                           &amp;sql_strerror);</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+               "Turning compaction %i", GF_SQL_COMPACT_DEF);</div><div class='add'>+</div><div class='add'>+        /* If we move from an auto_vacuum scheme to off, */</div><div class='add'>+        /* or vice-versa, we must VACUUM to save the change. */</div><div class='add'>+        /* In the case of a manual VACUUM scheme, we might as well */</div><div class='add'>+        /* run a manual VACUUM now if we */</div><div class='add'>+        if (changing_pragma || compact_active) {</div><div class='add'>+            ret = gf_asprintf(&amp;sqlstring, "VACUUM;");</div><div class='add'>+            if (ret &lt;= 0) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+                       "Failed allocating memory");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+                   "Sealed with a VACUUM");</div><div class='add'>+        }</div><div class='add'>+    } else {                   /* We are active, so it's time to VACUUM */</div><div class='add'>+        if (!compact_active) { /* Did we somehow enter an inconsistent</div><div class='add'>+                                  state? */</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+                   "Tried to VACUUM when compaction inactive");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_GET_RECORD_FAILED, "Failed to vacuum "</div><div class='del'>-                        "the db : %s", sqlite3_errmsg (db_conn));</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+               "Doing regular vacuum of type %i", GF_SQL_COMPACT_DEF);</div><div class='add'>+</div><div class='add'>+        switch (GF_SQL_COMPACT_DEF) {</div><div class='add'>+            case GF_SQL_COMPACT_INCR: /* INCR auto_vacuum */</div><div class='add'>+                ret = gf_asprintf(&amp;sqlstring, "PRAGMA incremental_vacuum;");</div><div class='add'>+                if (ret &lt;= 0) {</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                           LG_MSG_PREPARE_FAILED, "Failed allocating memory");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+                       "Will commence an incremental VACUUM");</div><div class='add'>+                break;</div><div class='add'>+            /* (MANUAL) Invoke the VACUUM command */</div><div class='add'>+            case GF_SQL_COMPACT_MANUAL:</div><div class='add'>+                ret = gf_asprintf(&amp;sqlstring, "VACUUM;");</div><div class='add'>+                if (ret &lt;= 0) {</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                           LG_MSG_PREPARE_FAILED, "Failed allocating memory");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+                       "Will commence a VACUUM");</div><div class='add'>+                break;</div><div class='add'>+            /* (FULL) The database does the compaction itself. */</div><div class='add'>+            /* We cannot do anything else, so we can leave */</div><div class='add'>+            /* without sending anything to the database */</div><div class='add'>+            case GF_SQL_COMPACT_FULL:</div><div class='add'>+                ret = 0;</div><div class='add'>+                goto success;</div><div class='add'>+            /* Any other state must be an error. Note that OFF */</div><div class='add'>+            /* cannot hit this statement since we immediately leave */</div><div class='add'>+            /* in that case */</div><div class='add'>+            default:</div><div class='ctx'>                 ret = -1;</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_COMPACT_FAILED,</div><div class='add'>+                       "VACUUM type undefined");</div><div class='ctx'>                 goto out;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+           "SQLString == %s", sqlstring);</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_exec(sql_conn-&gt;sqlite3_db_conn, sqlstring, NULL, NULL,</div><div class='add'>+                       &amp;sql_strerror);</div><div class='add'>+</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED,</div><div class='add'>+               "Failed to vacuum "</div><div class='add'>+               "the db : %s",</div><div class='add'>+               sqlite3_errmsg(db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> success:</div><div class='del'>-        gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='del'>-               compact_mode_switched ? "Successfully changed VACUUM on/off"</div><div class='del'>-               : "DB successfully VACUUM");</div><div class='add'>+    gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS,</div><div class='add'>+           compact_mode_switched ? "Successfully changed VACUUM on/off"</div><div class='add'>+                                 : "DB successfully VACUUM");</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE(sqlstring);</div><div class='add'>+    GF_FREE(sqlstring);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c b/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c<br/>index b2c3392f45a..60dd5e25e66 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/gfdb/gfdb_sqlite3_helper.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gfdb/gfdb_sqlite3_helper.c</a></div><div class='hunk'>@@ -10,7 +10,6 @@</div><div class='ctx'> </div><div class='ctx'> #include "gfdb_sqlite3_helper.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #define GFDB_SQL_STMT_SIZE 256</div><div class='ctx'> </div><div class='ctx'> /*****************************************************************************</div><div class='hunk'>@@ -21,711 +20,653 @@</div><div class='ctx'>  * ****************************************************************************/</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_sql_delete_all (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                  char                  *gfid,</div><div class='del'>-                  gf_boolean_t          ignore_errors)</div><div class='add'>+gf_sql_delete_all(gf_sql_connection_t *sql_conn, char *gfid,</div><div class='add'>+                  gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *delete_file_stmt = NULL;</div><div class='del'>-        sqlite3_stmt *delete_link_stmt = NULL;</div><div class='del'>-        char *delete_link_str = "DELETE FROM "</div><div class='del'>-                           GF_FILE_LINK_TABLE</div><div class='del'>-                           " WHERE GF_ID = ? ;";</div><div class='del'>-        char *delete_file_str = "DELETE FROM "</div><div class='del'>-                           GF_FILE_TABLE</div><div class='del'>-                           " WHERE GF_ID = ? ;";</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Delete all links associated with this GFID</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        /*Prepare statement for delete all links*/</div><div class='del'>-        ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, delete_link_str, -1,</div><div class='del'>-                                &amp;delete_link_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing delete "</div><div class='del'>-                        "statement %s : %s", delete_link_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (delete_link_stmt, 1, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step (delete_link_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt %s : %s",</div><div class='del'>-                        delete_link_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Delete entry from file table associated with this GFID</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        /*Prepare statement for delete all links*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, delete_file_str, -1,</div><div class='del'>-                                &amp;delete_file_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing delete "</div><div class='del'>-                        "statement %s : %s", delete_file_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (delete_file_stmt, 1, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step (delete_file_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt %s : %s",</div><div class='del'>-                        delete_file_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *delete_file_stmt = NULL;</div><div class='add'>+    sqlite3_stmt *delete_link_stmt = NULL;</div><div class='add'>+    char *delete_link_str = "DELETE FROM " GF_FILE_LINK_TABLE</div><div class='add'>+                            " WHERE GF_ID = ? ;";</div><div class='add'>+    char *delete_file_str = "DELETE FROM " GF_FILE_TABLE " WHERE GF_ID = ? ;";</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Delete all links associated with this GFID</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    /*Prepare statement for delete all links*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, delete_link_str, -1,</div><div class='add'>+                          &amp;delete_link_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing delete "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               delete_link_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(delete_link_stmt, 1, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(delete_link_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt %s : %s", delete_link_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Delete entry from file table associated with this GFID</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    /*Prepare statement for delete all links*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, delete_file_str, -1,</div><div class='add'>+                          &amp;delete_file_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing delete "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               delete_file_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(delete_file_stmt, 1, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(delete_file_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt %s : %s", delete_file_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (delete_file_stmt);</div><div class='del'>-        sqlite3_finalize (delete_link_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(delete_file_stmt);</div><div class='add'>+    sqlite3_finalize(delete_link_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_sql_delete_link (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                   char                 *gfid,</div><div class='del'>-                   char                 *pargfid,</div><div class='del'>-                   char                 *basename,</div><div class='del'>-                   gf_boolean_t         ignore_errors)</div><div class='add'>+gf_sql_delete_link(gf_sql_connection_t *sql_conn, char *gfid, char *pargfid,</div><div class='add'>+                   char *basename, gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *delete_stmt = NULL;</div><div class='del'>-        char *delete_str = "DELETE FROM "</div><div class='del'>-                           GF_FILE_LINK_TABLE</div><div class='del'>-                           " WHERE GF_ID = ? AND GF_PID = ?"</div><div class='del'>-                           " AND FNAME = ?;";</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out);</div><div class='del'>-</div><div class='del'>-        /*Prepare statement*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, delete_str, -1,</div><div class='del'>-                                &amp;delete_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing delete "</div><div class='del'>-                        "statement %s : %s", delete_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (delete_stmt, 1, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED,</div><div class='del'>-                        "Failed binding gfid %s : %s", gfid,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind pargfid*/</div><div class='del'>-        ret = sqlite3_bind_text (delete_stmt, 2, pargfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent gfid %s "</div><div class='del'>-                        ": %s", pargfid,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind basename*/</div><div class='del'>-        ret = sqlite3_bind_text (delete_stmt, 3, basename, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding basename %s : "</div><div class='del'>-                        "%s", basename,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step(delete_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt %s : %s",</div><div class='del'>-                        delete_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *delete_stmt = NULL;</div><div class='add'>+    char *delete_str = "DELETE FROM " GF_FILE_LINK_TABLE</div><div class='add'>+                       " WHERE GF_ID = ? AND GF_PID = ?"</div><div class='add'>+                       " AND FNAME = ?;";</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out);</div><div class='add'>+</div><div class='add'>+    /*Prepare statement*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, delete_str, -1,</div><div class='add'>+                          &amp;delete_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing delete "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               delete_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(delete_stmt, 1, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind pargfid*/</div><div class='add'>+    ret = sqlite3_bind_text(delete_stmt, 2, pargfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent gfid %s "</div><div class='add'>+               ": %s",</div><div class='add'>+               pargfid, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind basename*/</div><div class='add'>+    ret = sqlite3_bind_text(delete_stmt, 3, basename, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding basename %s : "</div><div class='add'>+               "%s",</div><div class='add'>+               basename, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(delete_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt %s : %s", delete_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (delete_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(delete_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_sql_update_link_flags (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                   char                 *gfid,</div><div class='del'>-                   char                 *pargfid,</div><div class='del'>-                   char                 *basename,</div><div class='del'>-                   int                  update_flag,</div><div class='del'>-                   gf_boolean_t         is_update_or_delete,</div><div class='del'>-                   gf_boolean_t         ignore_errors)</div><div class='add'>+gf_sql_update_link_flags(gf_sql_connection_t *sql_conn, char *gfid,</div><div class='add'>+                         char *pargfid, char *basename, int update_flag,</div><div class='add'>+                         gf_boolean_t is_update_or_delete,</div><div class='add'>+                         gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *update_stmt = NULL;</div><div class='del'>-        char *update_column = NULL;</div><div class='del'>-        char update_str[1024] = "";</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out);</div><div class='del'>-</div><div class='del'>-        update_column = (is_update_or_delete) ? "LINK_UPDATE" : "W_DEL_FLAG";</div><div class='del'>-</div><div class='del'>-        sprintf (update_str, "UPDATE "</div><div class='del'>-                            GF_FILE_LINK_TABLE</div><div class='del'>-                            " SET %s = ?"</div><div class='del'>-                            " WHERE GF_ID = ? AND GF_PID = ? AND FNAME = ?;",</div><div class='del'>-                            update_column);</div><div class='del'>-</div><div class='del'>-        /*Prepare statement*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, update_str, -1,</div><div class='del'>-                                &amp;update_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing update "</div><div class='del'>-                        "statement %s : %s", update_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Bind link_update*/</div><div class='del'>-        ret = sqlite3_bind_int (update_stmt, 1, update_flag);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding update_flag %d "</div><div class='del'>-                        ": %s", update_flag,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (update_stmt, 2, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind pargfid*/</div><div class='del'>-        ret = sqlite3_bind_text (update_stmt, 3, pargfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent gfid %s "</div><div class='del'>-                        ": %s", pargfid,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind basename*/</div><div class='del'>-        ret = sqlite3_bind_text (update_stmt, 4, basename, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding basename %s : "</div><div class='del'>-                        "%s", basename,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step(update_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt %s : %s",</div><div class='del'>-                        update_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *update_stmt = NULL;</div><div class='add'>+    char *update_column = NULL;</div><div class='add'>+    char update_str[1024] = "";</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out);</div><div class='add'>+</div><div class='add'>+    update_column = (is_update_or_delete) ? "LINK_UPDATE" : "W_DEL_FLAG";</div><div class='add'>+</div><div class='add'>+    sprintf(update_str,</div><div class='add'>+            "UPDATE " GF_FILE_LINK_TABLE</div><div class='add'>+            " SET %s = ?"</div><div class='add'>+            " WHERE GF_ID = ? AND GF_PID = ? AND FNAME = ?;",</div><div class='add'>+            update_column);</div><div class='add'>+</div><div class='add'>+    /*Prepare statement*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, update_str, -1,</div><div class='add'>+                          &amp;update_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing update "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               update_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind link_update*/</div><div class='add'>+    ret = sqlite3_bind_int(update_stmt, 1, update_flag);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding update_flag %d "</div><div class='add'>+               ": %s",</div><div class='add'>+               update_flag, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(update_stmt, 2, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind pargfid*/</div><div class='add'>+    ret = sqlite3_bind_text(update_stmt, 3, pargfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent gfid %s "</div><div class='add'>+               ": %s",</div><div class='add'>+               pargfid, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind basename*/</div><div class='add'>+    ret = sqlite3_bind_text(update_stmt, 4, basename, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding basename %s : "</div><div class='add'>+               "%s",</div><div class='add'>+               basename, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(update_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt %s : %s", update_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (update_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(update_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_sql_insert_link (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                   char                 *gfid,</div><div class='del'>-                   char                 *pargfid,</div><div class='del'>-                   char                 *basename,</div><div class='del'>-                   gf_boolean_t         link_consistency,</div><div class='del'>-                   gf_boolean_t         ignore_errors)</div><div class='add'>+gf_sql_insert_link(gf_sql_connection_t *sql_conn, char *gfid, char *pargfid,</div><div class='add'>+                   char *basename, gf_boolean_t link_consistency,</div><div class='add'>+                   gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *insert_stmt = NULL;</div><div class='del'>-        char insert_str[GFDB_SQL_STMT_SIZE] = "";</div><div class='del'>-</div><div class='del'>-        sprintf (insert_str, "INSERT INTO "</div><div class='del'>-                           GF_FILE_LINK_TABLE</div><div class='del'>-                           " (GF_ID, GF_PID, FNAME,"</div><div class='del'>-                           " W_DEL_FLAG, LINK_UPDATE) "</div><div class='del'>-                           " VALUES (?, ?, ?, 0, %d);",</div><div class='del'>-                           link_consistency);</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out);</div><div class='del'>-</div><div class='del'>-        /*Prepare statement*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, insert_str, -1,</div><div class='del'>-                                &amp;insert_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED,</div><div class='del'>-                        "Failed preparing insert "</div><div class='del'>-                        "statement %s : %s", insert_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 1, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED,</div><div class='del'>-                        "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind pargfid*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 2, pargfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                        0, LG_MSG_BINDING_FAILED,</div><div class='del'>-                        "Failed binding parent gfid %s "</div><div class='del'>-                        ": %s", pargfid,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind basename*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 3, basename, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                        0, LG_MSG_BINDING_FAILED,</div><div class='del'>-                        "Failed binding basename %s : %s", basename,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step (insert_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors),</div><div class='del'>-                        0, LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared "</div><div class='del'>-                        "stmt %s %s %s %s : %s",</div><div class='del'>-                        gfid, pargfid, basename, insert_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *insert_stmt = NULL;</div><div class='add'>+    char insert_str[GFDB_SQL_STMT_SIZE] = "";</div><div class='add'>+</div><div class='add'>+    sprintf(insert_str,</div><div class='add'>+            "INSERT INTO " GF_FILE_LINK_TABLE</div><div class='add'>+            " (GF_ID, GF_PID, FNAME,"</div><div class='add'>+            " W_DEL_FLAG, LINK_UPDATE) "</div><div class='add'>+            " VALUES (?, ?, ?, 0, %d);",</div><div class='add'>+            link_consistency);</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out);</div><div class='add'>+</div><div class='add'>+    /*Prepare statement*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, insert_str, -1,</div><div class='add'>+                          &amp;insert_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing insert "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               insert_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 1, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind pargfid*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 2, pargfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent gfid %s "</div><div class='add'>+               ": %s",</div><div class='add'>+               pargfid, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind basename*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 3, basename, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding basename %s : %s", basename,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(insert_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared "</div><div class='add'>+               "stmt %s %s %s %s : %s",</div><div class='add'>+               gfid, pargfid, basename, insert_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (insert_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(insert_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_sql_update_link (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                   char                 *gfid,</div><div class='del'>-                   char                 *pargfid,</div><div class='del'>-                   char                 *basename,</div><div class='del'>-                   char                 *old_pargfid,</div><div class='del'>-                   char                 *old_basename,</div><div class='del'>-                   gf_boolean_t         link_consistency,</div><div class='del'>-                   gf_boolean_t         ignore_errors)</div><div class='add'>+gf_sql_update_link(gf_sql_connection_t *sql_conn, char *gfid, char *pargfid,</div><div class='add'>+                   char *basename, char *old_pargfid, char *old_basename,</div><div class='add'>+                   gf_boolean_t link_consistency, gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *insert_stmt = NULL;</div><div class='del'>-        char insert_str[GFDB_SQL_STMT_SIZE] = "";</div><div class='del'>-</div><div class='del'>-        sprintf (insert_str, "INSERT INTO "</div><div class='del'>-                            GF_FILE_LINK_TABLE</div><div class='del'>-                            " (GF_ID, GF_PID, FNAME,"</div><div class='del'>-                            " W_DEL_FLAG, LINK_UPDATE) "</div><div class='del'>-                            " VALUES (? , ?, ?, 0, %d);",</div><div class='del'>-                            link_consistency);</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, old_pargfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, old_basename, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         *</div><div class='del'>-         * Delete the old link</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-         ret = gf_sql_delete_link (sql_conn, gfid, old_pargfid,</div><div class='del'>-                                old_basename, ignore_errors);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_DELETE_FAILED, "Failed deleting old link");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         *</div><div class='del'>-         * insert new link</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        /*Prepare statement*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, insert_str, -1,</div><div class='del'>-                                &amp;insert_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing insert "</div><div class='del'>-                        "statement %s : %s", insert_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 1, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind new pargfid*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 2, pargfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent gfid %s "</div><div class='del'>-                        ": %s", pargfid,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind new basename*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 3, basename, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding basename %s : "</div><div class='del'>-                        "%s", basename,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step (insert_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt %s : %s",</div><div class='del'>-                        insert_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *insert_stmt = NULL;</div><div class='add'>+    char insert_str[GFDB_SQL_STMT_SIZE] = "";</div><div class='add'>+</div><div class='add'>+    sprintf(insert_str,</div><div class='add'>+            "INSERT INTO " GF_FILE_LINK_TABLE</div><div class='add'>+            " (GF_ID, GF_PID, FNAME,"</div><div class='add'>+            " W_DEL_FLAG, LINK_UPDATE) "</div><div class='add'>+            " VALUES (? , ?, ?, 0, %d);",</div><div class='add'>+            link_consistency);</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, old_pargfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, old_basename, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     *</div><div class='add'>+     * Delete the old link</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    ret = gf_sql_delete_link(sql_conn, gfid, old_pargfid, old_basename,</div><div class='add'>+                             ignore_errors);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_DELETE_FAILED, "Failed deleting old link");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     *</div><div class='add'>+     * insert new link</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    /*Prepare statement*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, insert_str, -1,</div><div class='add'>+                          &amp;insert_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing insert "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               insert_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 1, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind new pargfid*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 2, pargfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent gfid %s "</div><div class='add'>+               ": %s",</div><div class='add'>+               pargfid, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind new basename*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 3, basename, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding basename %s : "</div><div class='add'>+               "%s",</div><div class='add'>+               basename, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(insert_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt %s : %s", insert_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (insert_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(insert_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_sql_insert_write_wind_time (gf_sql_connection_t      *sql_conn,</div><div class='del'>-                                char                    *gfid,</div><div class='del'>-                                gfdb_time_t             *wind_time,</div><div class='del'>-                                gf_boolean_t            ignore_errors)</div><div class='add'>+gf_sql_insert_write_wind_time(gf_sql_connection_t *sql_conn, char *gfid,</div><div class='add'>+                              gfdb_time_t *wind_time,</div><div class='add'>+                              gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *insert_stmt = NULL;</div><div class='del'>-        char *insert_str = "INSERT INTO "</div><div class='del'>-                           GF_FILE_TABLE</div><div class='del'>-                           "(GF_ID, W_SEC, W_MSEC, UW_SEC, UW_MSEC)"</div><div class='del'>-                           " VALUES (?, ?, ?, 0, 0);";</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, wind_time, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*Prepare statement*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, insert_str, -1,</div><div class='del'>-                        &amp;insert_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing insert "</div><div class='del'>-                        "statement %s : %s", insert_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (insert_stmt, 1, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind wind secs*/</div><div class='del'>-        ret = sqlite3_bind_int (insert_stmt, 2, wind_time-&gt;tv_sec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent wind "</div><div class='del'>-                        "secs %ld : %s", wind_time-&gt;tv_sec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind wind msecs*/</div><div class='del'>-        ret = sqlite3_bind_int (insert_stmt, 3, wind_time-&gt;tv_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent wind "</div><div class='del'>-                        "msecs %ld : %s", wind_time-&gt;tv_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step (insert_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt GFID:%s %s : %s",</div><div class='del'>-                        gfid, insert_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *insert_stmt = NULL;</div><div class='add'>+    char *insert_str = "INSERT INTO " GF_FILE_TABLE</div><div class='add'>+                       "(GF_ID, W_SEC, W_MSEC, UW_SEC, UW_MSEC)"</div><div class='add'>+                       " VALUES (?, ?, ?, 0, 0);";</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, wind_time, out);</div><div class='add'>+</div><div class='add'>+    /*Prepare statement*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, insert_str, -1,</div><div class='add'>+                          &amp;insert_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing insert "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               insert_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(insert_stmt, 1, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind wind secs*/</div><div class='add'>+    ret = sqlite3_bind_int(insert_stmt, 2, wind_time-&gt;tv_sec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent wind "</div><div class='add'>+               "secs %ld : %s",</div><div class='add'>+               wind_time-&gt;tv_sec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind wind msecs*/</div><div class='add'>+    ret = sqlite3_bind_int(insert_stmt, 3, wind_time-&gt;tv_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent wind "</div><div class='add'>+               "msecs %ld : %s",</div><div class='add'>+               wind_time-&gt;tv_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(insert_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt GFID:%s %s : %s", gfid,</div><div class='add'>+               insert_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (insert_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(insert_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Update write/read times for both wind and unwind*/</div><div class='ctx'> static int</div><div class='del'>-gf_update_time (gf_sql_connection_t    *sql_conn,</div><div class='del'>-                char                    *gfid,</div><div class='del'>-                gfdb_time_t             *update_time,</div><div class='del'>-                gf_boolean_t            record_counter,</div><div class='del'>-                gf_boolean_t            is_wind,</div><div class='del'>-                gf_boolean_t            is_read,</div><div class='del'>-                gf_boolean_t            ignore_errors)</div><div class='add'>+gf_update_time(gf_sql_connection_t *sql_conn, char *gfid,</div><div class='add'>+               gfdb_time_t *update_time, gf_boolean_t record_counter,</div><div class='add'>+               gf_boolean_t is_wind, gf_boolean_t is_read,</div><div class='add'>+               gf_boolean_t ignore_errors)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        sqlite3_stmt *update_stmt = NULL;</div><div class='del'>-        char update_str[1024] = "";</div><div class='del'>-        char *freq_cntr_str = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, update_time, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Constructing the prepare statement string.</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        /*For write time*/</div><div class='del'>-        if (!is_read) {</div><div class='del'>-                if (is_wind) {</div><div class='del'>-                        /*if record counter is on*/</div><div class='del'>-                        freq_cntr_str = (record_counter) ?</div><div class='del'>-                        ", WRITE_FREQ_CNTR = WRITE_FREQ_CNTR + 1" : "";</div><div class='del'>-</div><div class='del'>-                        /*Perfectly safe as we will not go array of bound*/</div><div class='del'>-                        sprintf (update_str, "UPDATE "</div><div class='del'>-                                GF_FILE_TABLE</div><div class='del'>-                                " SET W_SEC = ?, W_MSEC = ? "</div><div class='del'>-                                " %s"/*place for read freq counters*/</div><div class='del'>-                                " WHERE GF_ID = ? ;", freq_cntr_str);</div><div class='del'>-                } else {</div><div class='del'>-                        /*Perfectly safe as we will not go array of bound*/</div><div class='del'>-                        sprintf (update_str, "UPDATE "</div><div class='del'>-                                GF_FILE_TABLE</div><div class='del'>-                                " SET UW_SEC = ?, UW_MSEC = ? ;");</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    sqlite3_stmt *update_stmt = NULL;</div><div class='add'>+    char update_str[1024] = "";</div><div class='add'>+    char *freq_cntr_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, update_time, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Constructing the prepare statement string.</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    /*For write time*/</div><div class='add'>+    if (!is_read) {</div><div class='add'>+        if (is_wind) {</div><div class='add'>+            /*if record counter is on*/</div><div class='add'>+            freq_cntr_str = (record_counter)</div><div class='add'>+                                ? ", WRITE_FREQ_CNTR = WRITE_FREQ_CNTR + 1"</div><div class='add'>+                                : "";</div><div class='add'>+</div><div class='add'>+            /*Perfectly safe as we will not go array of bound*/</div><div class='add'>+            sprintf(update_str,</div><div class='add'>+                    "UPDATE " GF_FILE_TABLE</div><div class='add'>+                    " SET W_SEC = ?, W_MSEC = ? "</div><div class='add'>+                    " %s" /*place for read freq counters*/</div><div class='add'>+                    " WHERE GF_ID = ? ;",</div><div class='add'>+                    freq_cntr_str);</div><div class='add'>+        } else {</div><div class='add'>+            /*Perfectly safe as we will not go array of bound*/</div><div class='add'>+            sprintf(update_str,</div><div class='add'>+                    "UPDATE " GF_FILE_TABLE " SET UW_SEC = ?, UW_MSEC = ? ;");</div><div class='ctx'>         }</div><div class='del'>-        /*For Read Time update*/</div><div class='del'>-        else {</div><div class='del'>-                if (is_wind) {</div><div class='del'>-                        /*if record counter is on*/</div><div class='del'>-                        freq_cntr_str = (record_counter) ?</div><div class='del'>-                        ", READ_FREQ_CNTR = READ_FREQ_CNTR + 1" : "";</div><div class='del'>-</div><div class='del'>-                        /*Perfectly safe as we will not go array of bound*/</div><div class='del'>-                        sprintf (update_str, "UPDATE "</div><div class='del'>-                                GF_FILE_TABLE</div><div class='del'>-                                " SET W_READ_SEC = ?, W_READ_MSEC = ? "</div><div class='del'>-                                " %s"/*place for read freq counters*/</div><div class='del'>-                                " WHERE GF_ID = ? ;", freq_cntr_str);</div><div class='del'>-                } else {</div><div class='del'>-                        /*Perfectly safe as we will not go array of bound*/</div><div class='del'>-                        sprintf (update_str, "UPDATE "</div><div class='del'>-                                GF_FILE_TABLE</div><div class='add'>+    }</div><div class='add'>+    /*For Read Time update*/</div><div class='add'>+    else {</div><div class='add'>+        if (is_wind) {</div><div class='add'>+            /*if record counter is on*/</div><div class='add'>+            freq_cntr_str = (record_counter)</div><div class='add'>+                                ? ", READ_FREQ_CNTR = READ_FREQ_CNTR + 1"</div><div class='add'>+                                : "";</div><div class='add'>+</div><div class='add'>+            /*Perfectly safe as we will not go array of bound*/</div><div class='add'>+            sprintf(update_str,</div><div class='add'>+                    "UPDATE " GF_FILE_TABLE</div><div class='add'>+                    " SET W_READ_SEC = ?, W_READ_MSEC = ? "</div><div class='add'>+                    " %s" /*place for read freq counters*/</div><div class='add'>+                    " WHERE GF_ID = ? ;",</div><div class='add'>+                    freq_cntr_str);</div><div class='add'>+        } else {</div><div class='add'>+            /*Perfectly safe as we will not go array of bound*/</div><div class='add'>+            sprintf(update_str, "UPDATE " GF_FILE_TABLE</div><div class='ctx'>                                 " SET UW_READ_SEC = ?, UW_READ_MSEC = ? ;");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Prepare statement*/</div><div class='del'>-        ret = sqlite3_prepare (sql_conn-&gt;sqlite3_db_conn, update_str, -1,</div><div class='del'>-                                &amp;update_stmt, 0);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_PREPARE_FAILED, "Failed preparing insert "</div><div class='del'>-                        "statement %s : %s", update_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind time secs*/</div><div class='del'>-        ret = sqlite3_bind_int (update_stmt, 1, update_time-&gt;tv_sec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent wind "</div><div class='del'>-                        "secs %ld : %s", update_time-&gt;tv_sec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Bind time msecs*/</div><div class='del'>-        ret = sqlite3_bind_int (update_stmt, 2, update_time-&gt;tv_usec);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding parent wind "</div><div class='del'>-                        "msecs %ld : %s", update_time-&gt;tv_usec,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /*Bind gfid*/</div><div class='del'>-        ret = sqlite3_bind_text (update_stmt, 3, gfid, -1, NULL);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s",</div><div class='del'>-                        gfid, sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Execute the prepare statement*/</div><div class='del'>-        if (sqlite3_step (update_stmt) != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                        _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0,</div><div class='del'>-                        LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed executing the prepared stmt %s : %s",</div><div class='del'>-                        update_str,</div><div class='del'>-                        sqlite3_errmsg (sql_conn-&gt;sqlite3_db_conn));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Prepare statement*/</div><div class='add'>+    ret = sqlite3_prepare(sql_conn-&gt;sqlite3_db_conn, update_str, -1,</div><div class='add'>+                          &amp;update_stmt, 0);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED,</div><div class='add'>+               "Failed preparing insert "</div><div class='add'>+               "statement %s : %s",</div><div class='add'>+               update_str, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind time secs*/</div><div class='add'>+    ret = sqlite3_bind_int(update_stmt, 1, update_time-&gt;tv_sec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent wind "</div><div class='add'>+               "secs %ld : %s",</div><div class='add'>+               update_time-&gt;tv_sec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind time msecs*/</div><div class='add'>+    ret = sqlite3_bind_int(update_stmt, 2, update_time-&gt;tv_usec);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding parent wind "</div><div class='add'>+               "msecs %ld : %s",</div><div class='add'>+               update_time-&gt;tv_usec, sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Bind gfid*/</div><div class='add'>+    ret = sqlite3_bind_text(update_stmt, 3, gfid, -1, NULL);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED,</div><div class='add'>+               "Failed binding gfid %s : %s", gfid,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Execute the prepare statement*/</div><div class='add'>+    if (sqlite3_step(update_stmt) != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors),</div><div class='add'>+               0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed executing the prepared stmt %s : %s", update_str,</div><div class='add'>+               sqlite3_errmsg(sql_conn-&gt;sqlite3_db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*Free prepared statement*/</div><div class='del'>-        sqlite3_finalize (update_stmt);</div><div class='del'>-        return ret;</div><div class='add'>+    /*Free prepared statement*/</div><div class='add'>+    sqlite3_finalize(update_stmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='hunk'>@@ -736,394 +677,364 @@ out:</div><div class='ctx'>  * ****************************************************************************/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_sql_insert_wind (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                   gfdb_db_record_t     *gfdb_db_record)</div><div class='add'>+gf_sql_insert_wind(gf_sql_connection_t *sql_conn,</div><div class='add'>+                   gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret                 = -1;</div><div class='del'>-        gfdb_time_t *modtime    = NULL;</div><div class='del'>-        char *pargfid_str       = NULL;</div><div class='del'>-        char *gfid_str          = NULL;</div><div class='del'>-        char *old_pargfid_str   = NULL;</div><div class='del'>-        gf_boolean_t its_wind   = _gf_true;/*remains true for this function*/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='del'>-</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_time_t *modtime = NULL;</div><div class='add'>+    char *pargfid_str = NULL;</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *old_pargfid_str = NULL;</div><div class='add'>+    gf_boolean_t its_wind = _gf_true; /*remains true for this function*/</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='add'>+</div><div class='add'>+    gfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='add'>+    if (!gfid_str) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+               "Creating gfid string failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    modtime = &amp;gfdb_db_record-&gt;gfdb_wind_change_time;</div><div class='add'>+</div><div class='add'>+    /* handle all dentry based operations */</div><div class='add'>+    if (isdentryfop(gfdb_db_record-&gt;gfdb_fop_type)) {</div><div class='add'>+        /*Parent GFID is always set*/</div><div class='add'>+        pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='add'>+        if (!pargfid_str) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+                   "Creating gfid string "</div><div class='add'>+                   "failed.");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        gfid_str = gf_strdup (uuid_utoa (gfdb_db_record-&gt;gfid));</div><div class='del'>-        if (!gfid_str) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='del'>-                        "Creating gfid string failed.");</div><div class='add'>+        /* handle create, mknod */</div><div class='add'>+        if (isdentrycreatefop(gfdb_db_record-&gt;gfdb_fop_type)) {</div><div class='add'>+            /*insert link*/</div><div class='add'>+            ret = gf_sql_insert_link(</div><div class='add'>+                sql_conn, gfid_str, pargfid_str, gfdb_db_record-&gt;file_name,</div><div class='add'>+                gfdb_db_record-&gt;link_consistency, _gf_true);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_WARNING,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_INSERT_FAILED,</div><div class='add'>+                       "Failed "</div><div class='add'>+                       "inserting link in DB");</div><div class='add'>+                /* Even if link creation is failed we</div><div class='add'>+                 * continue with the creation of file record.</div><div class='add'>+                 * This covers to cases</div><div class='add'>+                 * 1) Lookup heal: If the file record from</div><div class='add'>+                 * gf_file_tb is deleted but the link record</div><div class='add'>+                 * still exist. Lookup heal will attempt a heal</div><div class='add'>+                 * with create_wind set. The link heal will fail</div><div class='add'>+                 * as there is already a record and if we don't</div><div class='add'>+                 * ignore the error we will not heal the</div><div class='add'>+                 * gf_file_tb.</div><div class='add'>+                 * 2) Rename file in cold tier: During a rename</div><div class='add'>+                 * of a file that is there in cold tier. We get</div><div class='add'>+                 * an link record created in hot tier for the</div><div class='add'>+                 * linkto file. When the file gets heated and</div><div class='add'>+                 * moves to hot tier there will be attempt from</div><div class='add'>+                 * ctr lookup heal to create link and file</div><div class='add'>+                 * record and If we don't ignore the error we</div><div class='add'>+                 * will not heal the gf_file_tb.</div><div class='add'>+                 * */</div><div class='add'>+            }</div><div class='add'>+            gfdb_db_record-&gt;islinkupdate = gfdb_db_record-&gt;link_consistency;</div><div class='add'>+</div><div class='add'>+            /*</div><div class='add'>+             * Only for create/mknod insert wind time</div><div class='add'>+             * for the first time</div><div class='add'>+             * */</div><div class='add'>+            ret = gf_sql_insert_write_wind_time(sql_conn, gfid_str, modtime,</div><div class='add'>+                                                gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_INSERT_FAILED,</div><div class='add'>+                       "Failed inserting wind time in DB");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        modtime = &amp;gfdb_db_record-&gt;gfdb_wind_change_time;</div><div class='del'>-</div><div class='del'>-        /* handle all dentry based operations */</div><div class='del'>-        if (isdentryfop (gfdb_db_record-&gt;gfdb_fop_type)) {</div><div class='del'>-                /*Parent GFID is always set*/</div><div class='del'>-                pargfid_str = gf_strdup (uuid_utoa (gfdb_db_record-&gt;pargfid));</div><div class='del'>-                if (!pargfid_str) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                                0, LG_MSG_CREATE_FAILED, "Creating gfid string "</div><div class='del'>-                                "failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* handle create, mknod */</div><div class='del'>-                if (isdentrycreatefop (gfdb_db_record-&gt;gfdb_fop_type)) {</div><div class='del'>-                        /*insert link*/</div><div class='del'>-                        ret = gf_sql_insert_link(sql_conn,</div><div class='del'>-                                        gfid_str, pargfid_str,</div><div class='del'>-                                        gfdb_db_record-&gt;file_name,</div><div class='del'>-                                        gfdb_db_record-&gt;link_consistency,</div><div class='del'>-                                        _gf_true);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                        _gfdb_log_level (GF_LOG_WARNING,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                        0,</div><div class='del'>-                                        LG_MSG_INSERT_FAILED, "Failed "</div><div class='del'>-                                        "inserting link in DB");</div><div class='del'>-                                /* Even if link creation is failed we</div><div class='del'>-                                 * continue with the creation of file record.</div><div class='del'>-                                 * This covers to cases</div><div class='del'>-                                 * 1) Lookup heal: If the file record from</div><div class='del'>-                                 * gf_file_tb is deleted but the link record</div><div class='del'>-                                 * still exist. Lookup heal will attempt a heal</div><div class='del'>-                                 * with create_wind set. The link heal will fail</div><div class='del'>-                                 * as there is already a record and if we don't</div><div class='del'>-                                 * ignore the error we will not heal the</div><div class='del'>-                                 * gf_file_tb.</div><div class='del'>-                                 * 2) Rename file in cold tier: During a rename</div><div class='del'>-                                 * of a file that is there in cold tier. We get</div><div class='del'>-                                 * an link record created in hot tier for the</div><div class='del'>-                                 * linkto file. When the file gets heated and</div><div class='del'>-                                 * moves to hot tier there will be attempt from</div><div class='del'>-                                 * ctr lookup heal to create link and file</div><div class='del'>-                                 * record and If we don't ignore the error we</div><div class='del'>-                                 * will not heal the gf_file_tb.</div><div class='del'>-                                 * */</div><div class='del'>-                        }</div><div class='del'>-                        gfdb_db_record-&gt;islinkupdate = gfdb_db_record-&gt;</div><div class='del'>-                                                        link_consistency;</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * Only for create/mknod insert wind time</div><div class='del'>-                         * for the first time</div><div class='del'>-                         * */</div><div class='del'>-                        ret = gf_sql_insert_write_wind_time (sql_conn, gfid_str,</div><div class='del'>-                                        modtime, gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                        _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                        0, LG_MSG_INSERT_FAILED,</div><div class='del'>-                                        "Failed inserting wind time in DB");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        goto out;</div><div class='add'>+        /*handle rename, link */</div><div class='add'>+        else {</div><div class='add'>+            /*rename*/</div><div class='add'>+            if (strlen(gfdb_db_record-&gt;old_file_name) != 0) {</div><div class='add'>+                old_pargfid_str = gf_strdup(</div><div class='add'>+                    uuid_utoa(gfdb_db_record-&gt;old_pargfid));</div><div class='add'>+                if (!old_pargfid_str) {</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                           LG_MSG_CREATE_FAILED,</div><div class='add'>+                           "Creating gfid string failed.");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-                /*handle rename, link */</div><div class='del'>-                else {</div><div class='del'>-                        /*rename*/</div><div class='del'>-                        if (strlen (gfdb_db_record-&gt;old_file_name) != 0) {</div><div class='del'>-                                old_pargfid_str = gf_strdup (uuid_utoa (</div><div class='del'>-                                                gfdb_db_record-&gt;old_pargfid));</div><div class='del'>-                                if (!old_pargfid_str) {</div><div class='del'>-                                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                                                0, LG_MSG_CREATE_FAILED,</div><div class='del'>-                                                "Creating gfid string failed.");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                ret = gf_sql_update_link (sql_conn, gfid_str,</div><div class='del'>-                                                pargfid_str,</div><div class='del'>-                                                gfdb_db_record-&gt;file_name,</div><div class='del'>-                                                old_pargfid_str,</div><div class='del'>-                                                gfdb_db_record-&gt;old_file_name,</div><div class='del'>-                                                gfdb_db_record-&gt;</div><div class='del'>-                                                        link_consistency,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                                0, LG_MSG_UPDATE_FAILED,</div><div class='del'>-                                                "Failed updating link");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                gfdb_db_record-&gt;islinkupdate = gfdb_db_record-&gt;</div><div class='del'>-                                                        link_consistency;</div><div class='del'>-                        }</div><div class='del'>-                        /*link*/</div><div class='del'>-                        else {</div><div class='del'>-                                ret = gf_sql_insert_link (sql_conn,</div><div class='del'>-                                                gfid_str, pargfid_str,</div><div class='del'>-                                                gfdb_db_record-&gt;file_name,</div><div class='del'>-                                                gfdb_db_record-&gt;</div><div class='del'>-                                                        link_consistency,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                                0, LG_MSG_INSERT_FAILED,</div><div class='del'>-                                                "Failed inserting link in DB");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                gfdb_db_record-&gt;islinkupdate = gfdb_db_record-&gt;</div><div class='del'>-                                                        link_consistency;</div><div class='del'>-                        }</div><div class='add'>+                ret = gf_sql_update_link(</div><div class='add'>+                    sql_conn, gfid_str, pargfid_str, gfdb_db_record-&gt;file_name,</div><div class='add'>+                    old_pargfid_str, gfdb_db_record-&gt;old_file_name,</div><div class='add'>+                    gfdb_db_record-&gt;link_consistency,</div><div class='add'>+                    gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                           _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                           gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                           0, LG_MSG_UPDATE_FAILED, "Failed updating link");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* update times only when said!*/</div><div class='del'>-        if (gfdb_db_record-&gt;do_record_times) {</div><div class='del'>-                /*All fops update times read or write*/</div><div class='del'>-                ret = gf_update_time (sql_conn, gfid_str, modtime,</div><div class='del'>-                                gfdb_db_record-&gt;do_record_counters,</div><div class='del'>-                                its_wind,</div><div class='del'>-                                isreadfop (gfdb_db_record-&gt;gfdb_fop_type),</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+                gfdb_db_record-&gt;islinkupdate = gfdb_db_record-&gt;link_consistency;</div><div class='add'>+            }</div><div class='add'>+            /*link*/</div><div class='add'>+            else {</div><div class='add'>+                ret = gf_sql_insert_link(sql_conn, gfid_str, pargfid_str,</div><div class='add'>+                                         gfdb_db_record-&gt;file_name,</div><div class='add'>+                                         gfdb_db_record-&gt;link_consistency,</div><div class='add'>+                                         gfdb_db_record-&gt;ignore_errors);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors), 0,</div><div class='del'>-                                LG_MSG_UPDATE_FAILED, "Failed update wind time"</div><div class='del'>-                                " in DB");</div><div class='del'>-                        goto out;</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                           _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                           gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                           0, LG_MSG_INSERT_FAILED,</div><div class='add'>+                           "Failed inserting link in DB");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                gfdb_db_record-&gt;islinkupdate = gfdb_db_record-&gt;link_consistency;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* update times only when said!*/</div><div class='add'>+    if (gfdb_db_record-&gt;do_record_times) {</div><div class='add'>+        /*All fops update times read or write*/</div><div class='add'>+        ret = gf_update_time(sql_conn, gfid_str, modtime,</div><div class='add'>+                             gfdb_db_record-&gt;do_record_counters, its_wind,</div><div class='add'>+                             isreadfop(gfdb_db_record-&gt;gfdb_fop_type),</div><div class='add'>+                             gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                   _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                   0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                   "Failed update wind time"</div><div class='add'>+                   " in DB");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (gfid_str);</div><div class='del'>-        GF_FREE (pargfid_str);</div><div class='del'>-        GF_FREE (old_pargfid_str);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(gfid_str);</div><div class='add'>+    GF_FREE(pargfid_str);</div><div class='add'>+    GF_FREE(old_pargfid_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_sql_insert_unwind (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                     gfdb_db_record_t     *gfdb_db_record)</div><div class='add'>+gf_sql_insert_unwind(gf_sql_connection_t *sql_conn,</div><div class='add'>+                     gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gfdb_time_t *modtime    = NULL;</div><div class='del'>-        gf_boolean_t its_wind   = _gf_true;/*remains true for this function*/</div><div class='del'>-        char *gfid_str = NULL;</div><div class='del'>-        char *pargfid_str = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='del'>-</div><div class='del'>-        gfid_str = gf_strdup (uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='del'>-        if (!gfid_str) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_CREATE_FAILED, "Creating gfid string failed.");</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_time_t *modtime = NULL;</div><div class='add'>+    gf_boolean_t its_wind = _gf_true; /*remains true for this function*/</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *pargfid_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='add'>+</div><div class='add'>+    gfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='add'>+    if (!gfid_str) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+               "Creating gfid string failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Only update if recording unwind is set*/</div><div class='add'>+    if (gfdb_db_record-&gt;do_record_times &amp;&amp;</div><div class='add'>+        gfdb_db_record-&gt;do_record_uwind_time) {</div><div class='add'>+        modtime = &amp;gfdb_db_record-&gt;gfdb_unwind_change_time;</div><div class='add'>+        ret = gf_update_time(sql_conn, gfid_str, modtime,</div><div class='add'>+                             gfdb_db_record-&gt;do_record_counters, (!its_wind),</div><div class='add'>+                             isreadfop(gfdb_db_record-&gt;gfdb_fop_type),</div><div class='add'>+                             gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                   _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                   0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                   "Failed update unwind "</div><div class='add'>+                   "time in DB");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Only update if recording unwind is set*/</div><div class='del'>-        if (gfdb_db_record-&gt;do_record_times &amp;&amp;</div><div class='del'>-                gfdb_db_record-&gt;do_record_uwind_time) {</div><div class='del'>-                modtime = &amp;gfdb_db_record-&gt;gfdb_unwind_change_time;</div><div class='del'>-                ret = gf_update_time (sql_conn, gfid_str, modtime,</div><div class='del'>-                        gfdb_db_record-&gt;do_record_counters,</div><div class='del'>-                        (!its_wind),</div><div class='del'>-                        isreadfop (gfdb_db_record-&gt;gfdb_fop_type),</div><div class='del'>-                        gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                        gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                0, LG_MSG_UPDATE_FAILED, "Failed update unwind "</div><div class='del'>-                                "time in DB");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    /*For link creation and changes we use link updated*/</div><div class='add'>+    if (gfdb_db_record-&gt;islinkupdate &amp;&amp;</div><div class='add'>+        isdentryfop(gfdb_db_record-&gt;gfdb_fop_type)) {</div><div class='add'>+        pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='add'>+        if (!pargfid_str) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+                   "Creating pargfid_str string failed.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /*For link creation and changes we use link updated*/</div><div class='del'>-        if (gfdb_db_record-&gt;islinkupdate &amp;&amp;</div><div class='del'>-                isdentryfop(gfdb_db_record-&gt;gfdb_fop_type)) {</div><div class='del'>-</div><div class='del'>-                pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='del'>-                if (!pargfid_str) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                                0, LG_MSG_CREATE_FAILED,</div><div class='del'>-                                "Creating pargfid_str string failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_sql_update_link_flags (sql_conn, gfid_str, pargfid_str,</div><div class='del'>-                                        gfdb_db_record-&gt;file_name, 0, _gf_true,</div><div class='del'>-                                        gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                        gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                0, LG_MSG_UPDATE_FAILED,</div><div class='del'>-                                "Failed updating link flags in unwind");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = gf_sql_update_link_flags(sql_conn, gfid_str, pargfid_str,</div><div class='add'>+                                       gfdb_db_record-&gt;file_name, 0, _gf_true,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                   _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                   0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                   "Failed updating link flags in unwind");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (gfid_str);</div><div class='del'>-        GF_FREE (pargfid_str);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(gfid_str);</div><div class='add'>+    GF_FREE(pargfid_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_sql_update_delete_wind (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                          gfdb_db_record_t     *gfdb_db_record)</div><div class='add'>+gf_sql_update_delete_wind(gf_sql_connection_t *sql_conn,</div><div class='add'>+                          gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *gfid_str          = NULL;</div><div class='del'>-        char *pargfid_str       = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='del'>-</div><div class='del'>-        gfid_str = gf_strdup (uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='del'>-        if (!gfid_str) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='del'>-                        "Creating gfid string failed.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pargfid_str = gf_strdup (uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='del'>-        if (!pargfid_str) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                                0, LG_MSG_CREATE_FAILED, "Creating pargfid_str "</div><div class='del'>-                                "string failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (gfdb_db_record-&gt;link_consistency) {</div><div class='del'>-                ret = gf_sql_update_link_flags (sql_conn, gfid_str, pargfid_str,</div><div class='del'>-                                        gfdb_db_record-&gt;file_name, 1,</div><div class='del'>-                                        _gf_false,</div><div class='del'>-                                        gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                        gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                0, LG_MSG_UPDATE_FAILED,</div><div class='del'>-                                "Failed updating link flags in wind");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *pargfid_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='add'>+</div><div class='add'>+    gfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='add'>+    if (!gfid_str) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+               "Creating gfid string failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='add'>+    if (!pargfid_str) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+               "Creating pargfid_str "</div><div class='add'>+               "string failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gfdb_db_record-&gt;link_consistency) {</div><div class='add'>+        ret = gf_sql_update_link_flags(sql_conn, gfid_str, pargfid_str,</div><div class='add'>+                                       gfdb_db_record-&gt;file_name, 1, _gf_false,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                   _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                   0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                   "Failed updating link flags in wind");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (gfid_str);</div><div class='del'>-        GF_FREE (pargfid_str);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(gfid_str);</div><div class='add'>+    GF_FREE(pargfid_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_sql_delete_unwind (gf_sql_connection_t  *sql_conn,</div><div class='del'>-                          gfdb_db_record_t     *gfdb_db_record)</div><div class='add'>+gf_sql_delete_unwind(gf_sql_connection_t *sql_conn,</div><div class='add'>+                     gfdb_db_record_t *gfdb_db_record)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *gfid_str = NULL;</div><div class='del'>-        char *pargfid_str = NULL;</div><div class='del'>-        gfdb_time_t *modtime    = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='del'>-</div><div class='del'>-        gfid_str = gf_strdup (uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='del'>-        if (!gfid_str) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='del'>-                        "Creating gfid string failed.");</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *pargfid_str = NULL;</div><div class='add'>+    gfdb_time_t *modtime = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out);</div><div class='add'>+</div><div class='add'>+    gfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;gfid));</div><div class='add'>+    if (!gfid_str) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+               "Creating gfid string failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Nuke all the entries for this GFID from DB*/</div><div class='add'>+    if (gfdb_db_record-&gt;gfdb_fop_path == GFDB_FOP_UNDEL_ALL) {</div><div class='add'>+        gf_sql_delete_all(sql_conn, gfid_str, gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+    }</div><div class='add'>+    /*Remove link entries only*/</div><div class='add'>+    else if (gfdb_db_record-&gt;gfdb_fop_path == GFDB_FOP_UNDEL) {</div><div class='add'>+        pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='add'>+        if (!pargfid_str) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED,</div><div class='add'>+                   "Creating pargfid_str "</div><div class='add'>+                   "string failed.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /*Nuke all the entries for this GFID from DB*/</div><div class='del'>-        if (gfdb_db_record-&gt;gfdb_fop_path == GFDB_FOP_UNDEL_ALL) {</div><div class='del'>-                gf_sql_delete_all (sql_conn, gfid_str,</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+        /* Special performance case:</div><div class='add'>+         * Updating wind time in unwind for delete. This is done here</div><div class='add'>+         * as in the wind path we will not know whether its the last</div><div class='add'>+         * link or not. For a last link there is not use to update any</div><div class='add'>+         * wind or unwind time!*/</div><div class='add'>+        if (gfdb_db_record-&gt;do_record_times) {</div><div class='add'>+            /*Update the wind write times*/</div><div class='add'>+            modtime = &amp;gfdb_db_record-&gt;gfdb_wind_change_time;</div><div class='add'>+            ret = gf_update_time(sql_conn, gfid_str, modtime,</div><div class='add'>+                                 gfdb_db_record-&gt;do_record_counters, _gf_true,</div><div class='add'>+                                 isreadfop(gfdb_db_record-&gt;gfdb_fop_type),</div><div class='add'>+                                 gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                       "Failed update wind time in DB");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        /*Remove link entries only*/</div><div class='del'>-        else if (gfdb_db_record-&gt;gfdb_fop_path == GFDB_FOP_UNDEL) {</div><div class='del'>-</div><div class='del'>-                pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record-&gt;pargfid));</div><div class='del'>-                if (!pargfid_str) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                                0, LG_MSG_CREATE_FAILED, "Creating pargfid_str "</div><div class='del'>-                                "string failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Special performance case:</div><div class='del'>-                 * Updating wind time in unwind for delete. This is done here</div><div class='del'>-                 * as in the wind path we will not know whether its the last</div><div class='del'>-                 * link or not. For a last link there is not use to update any</div><div class='del'>-                 * wind or unwind time!*/</div><div class='del'>-                if (gfdb_db_record-&gt;do_record_times) {</div><div class='del'>-                        /*Update the wind write times*/</div><div class='del'>-                        modtime = &amp;gfdb_db_record-&gt;gfdb_wind_change_time;</div><div class='del'>-                        ret = gf_update_time (sql_conn, gfid_str, modtime,</div><div class='del'>-                                gfdb_db_record-&gt;do_record_counters,</div><div class='del'>-                                _gf_true,</div><div class='del'>-                                isreadfop (gfdb_db_record-&gt;gfdb_fop_type),</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                        _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                        0, LG_MSG_UPDATE_FAILED,</div><div class='del'>-                                        "Failed update wind time in DB");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='ctx'> </div><div class='del'>-                modtime = &amp;gfdb_db_record-&gt;gfdb_unwind_change_time;</div><div class='add'>+        modtime = &amp;gfdb_db_record-&gt;gfdb_unwind_change_time;</div><div class='ctx'> </div><div class='del'>-                ret = gf_sql_delete_link(sql_conn, gfid_str, pargfid_str,</div><div class='del'>-                                        gfdb_db_record-&gt;file_name,</div><div class='del'>-                                        gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_DELETE_FAILED, "Failed deleting link");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = gf_sql_delete_link(sql_conn, gfid_str, pargfid_str,</div><div class='add'>+                                 gfdb_db_record-&gt;file_name,</div><div class='add'>+                                 gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_DELETE_FAILED,</div><div class='add'>+                   "Failed deleting link");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (gfdb_db_record-&gt;do_record_times &amp;&amp;</div><div class='del'>-                        gfdb_db_record-&gt;do_record_uwind_time) {</div><div class='del'>-                        ret = gf_update_time (sql_conn, gfid_str, modtime,</div><div class='del'>-                                gfdb_db_record-&gt;do_record_counters,</div><div class='del'>-                                _gf_false,</div><div class='del'>-                                isreadfop(gfdb_db_record-&gt;gfdb_fop_type),</div><div class='del'>-                                gfdb_db_record-&gt;ignore_errors);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                        _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                                gfdb_db_record-&gt;ignore_errors),</div><div class='del'>-                                        0, LG_MSG_UPDATE_FAILED,</div><div class='del'>-                                        "Failed update unwind time in DB");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                        0, LG_MSG_INVALID_UPLINK, "Invalid unlink option");</div><div class='add'>+        if (gfdb_db_record-&gt;do_record_times &amp;&amp;</div><div class='add'>+            gfdb_db_record-&gt;do_record_uwind_time) {</div><div class='add'>+            ret = gf_update_time(sql_conn, gfid_str, modtime,</div><div class='add'>+                                 gfdb_db_record-&gt;do_record_counters, _gf_false,</div><div class='add'>+                                 isreadfop(gfdb_db_record-&gt;gfdb_fop_type),</div><div class='add'>+                                 gfdb_db_record-&gt;ignore_errors);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3,</div><div class='add'>+                       _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                       gfdb_db_record-&gt;ignore_errors),</div><div class='add'>+                       0, LG_MSG_UPDATE_FAILED,</div><div class='add'>+                       "Failed update unwind time in DB");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INVALID_UPLINK,</div><div class='add'>+               "Invalid unlink option");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (gfid_str);</div><div class='del'>-        GF_FREE (pargfid_str);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(gfid_str);</div><div class='add'>+    GF_FREE(pargfid_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='hunk'>@@ -1132,240 +1043,218 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  * ****************************************************************************/</div><div class='ctx'> int</div><div class='del'>-gf_sql_query_function (sqlite3_stmt              *prep_stmt,</div><div class='del'>-                      gf_query_callback_t       query_callback,</div><div class='del'>-                      void                      *_query_cbk_args)</div><div class='add'>+gf_sql_query_function(sqlite3_stmt *prep_stmt,</div><div class='add'>+                      gf_query_callback_t query_callback, void *_query_cbk_args)</div><div class='ctx'> {</div><div class='del'>-        int ret                                         = -1;</div><div class='del'>-        gfdb_query_record_t *query_record               = NULL;</div><div class='del'>-        char *text_column                               = NULL;</div><div class='del'>-        sqlite3 *db_conn                                = NULL;</div><div class='del'>-        uuid_t  prev_gfid                               = {0};</div><div class='del'>-        uuid_t  curr_gfid                               = {0};</div><div class='del'>-        uuid_t  pgfid                                   = {0};</div><div class='del'>-        char *base_name                                 = NULL;</div><div class='del'>-        gf_boolean_t is_first_record                    = _gf_true;</div><div class='del'>-        gf_boolean_t is_query_empty                     = _gf_true;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, prep_stmt, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, query_callback, out);</div><div class='del'>-</div><div class='del'>-        db_conn = sqlite3_db_handle(prep_stmt);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Loop to access queried rows</div><div class='del'>-         * Each db record will have 3 columns</div><div class='del'>-         * GFID, PGFID, FILE_NAME</div><div class='del'>-         *</div><div class='del'>-         * For file with multiple hard links we will get multiple query rows</div><div class='del'>-         * with the same GFID, but different PGID and FILE_NAME Combination</div><div class='del'>-         * For Example if a file with</div><div class='del'>-         *         GFID = 00000000-0000-0000-0000-000000000006</div><div class='del'>-         * has 3 hardlinks file1, file2 and file3 in 3 different folder</div><div class='del'>-         * with GFID's</div><div class='del'>-         * 00000000-0000-0000-0000-0000EFC00001,</div><div class='del'>-         * 00000000-0000-0000-0000-00000ABC0001 and</div><div class='del'>-         * 00000000-0000-0000-0000-00000ABC00CD</div><div class='del'>-         * Then there will be 3 records</div><div class='del'>-         *         GFID         : 00000000-0000-0000-0000-000000000006</div><div class='del'>-         *         PGFID        : 00000000-0000-0000-0000-0000EFC00001</div><div class='del'>-         *         FILE_NAME    : file1</div><div class='del'>-         *</div><div class='del'>-         *         GFID         : 00000000-0000-0000-0000-000000000006</div><div class='del'>-         *         PGFID        : 00000000-0000-0000-0000-00000ABC0001</div><div class='del'>-         *         FILE_NAME    : file2</div><div class='del'>-         *</div><div class='del'>-         *         GFID         : 00000000-0000-0000-0000-000000000006</div><div class='del'>-         *         PGFID        : 00000000-0000-0000-0000-00000ABC00CD</div><div class='del'>-         *         FILE_NAME    : file3</div><div class='del'>-         *</div><div class='del'>-         * This is retrieved and added to a single query_record</div><div class='del'>-         *</div><div class='del'>-         * query_record-&gt;gfid = 00000000-0000-0000-0000-000000000006</div><div class='del'>-         *                  -&gt;link_info = {00000000-0000-0000-0000-0000EFC00001,</div><div class='del'>-         *                                 "file1"}</div><div class='del'>-         *                                  |</div><div class='del'>-         *                                  V</div><div class='del'>-         *             link_info = {00000000-0000-0000-0000-00000ABC0001,</div><div class='del'>-         *                                 "file2"}</div><div class='del'>-         *                                  |</div><div class='del'>-         *                                  V</div><div class='del'>-         *             link_info = {00000000-0000-0000-0000-00000ABC0001,</div><div class='del'>-         *                                 "file3",</div><div class='del'>-         *                                 list}</div><div class='del'>-         *</div><div class='del'>-         * This query record is sent to the registered query_callback()</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        while ((ret = sqlite3_step (prep_stmt)) == SQLITE_ROW) {</div><div class='del'>-</div><div class='del'>-                if (sqlite3_column_count(prep_stmt) &gt; 0) {</div><div class='del'>-</div><div class='del'>-                        is_query_empty = _gf_false;</div><div class='del'>-</div><div class='del'>-                        /*Retrieving GFID - column index is 0*/</div><div class='del'>-                        text_column = (char *)sqlite3_column_text</div><div class='del'>-                                                        (prep_stmt, 0);</div><div class='del'>-                        if (!text_column) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_GET_ID_FAILED, "Failed to"</div><div class='del'>-                                        "retrieve GFID");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_uuid_parse (text_column, curr_gfid);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_PARSE_FAILED, "Failed to parse "</div><div class='del'>-                                        "GFID");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * if the previous record was not of the current gfid</div><div class='del'>-                         * call the call_back function and send the</div><div class='del'>-                         * query record, which will have all the link_info</div><div class='del'>-                         * objects associated with this gfid</div><div class='del'>-                         *</div><div class='del'>-                         * */</div><div class='del'>-                        if (gf_uuid_compare (curr_gfid, prev_gfid) != 0) {</div><div class='del'>-</div><div class='del'>-                                /* If this is not the first record */</div><div class='del'>-                                if (!is_first_record) {</div><div class='del'>-                                        /*Call the call_back function provided*/</div><div class='del'>-                                        ret = query_callback (query_record,</div><div class='del'>-                                                        _query_cbk_args);</div><div class='del'>-                                        if (ret) {</div><div class='del'>-                                                gf_msg (GFDB_STR_SQLITE3,</div><div class='del'>-                                                        GF_LOG_ERROR, 0,</div><div class='del'>-                                                LG_MSG_QUERY_CALL_BACK_FAILED,</div><div class='del'>-                                                        "Query call back "</div><div class='del'>-                                                        "failed");</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                /*Clear the query record*/</div><div class='del'>-                                gfdb_query_record_free (query_record);</div><div class='del'>-                                query_record = NULL;</div><div class='del'>-                                query_record = gfdb_query_record_new ();</div><div class='del'>-                                if (!query_record) {</div><div class='del'>-                                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR,</div><div class='del'>-                                                0, LG_MSG_CREATE_FAILED,</div><div class='del'>-                                                "Failed to create "</div><div class='del'>-                                                "query_record");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                gf_uuid_copy(query_record-&gt;gfid,</div><div class='del'>-                                                                curr_gfid);</div><div class='del'>-                                gf_uuid_copy(prev_gfid, curr_gfid);</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Get PGFID */</div><div class='del'>-                        text_column = (char *)sqlite3_column_text</div><div class='del'>-                                                        (prep_stmt, 1);</div><div class='del'>-                        if (!text_column) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_GET_ID_FAILED, "Failed to"</div><div class='del'>-                                        " retrieve GF_ID");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_uuid_parse (text_column, pgfid);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_PARSE_FAILED, "Failed to parse "</div><div class='del'>-                                        "GF_ID");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Get Base name */</div><div class='del'>-                        text_column = (char *)sqlite3_column_text</div><div class='del'>-                                                        (prep_stmt, 2);</div><div class='del'>-                        if (!text_column) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_GET_ID_FAILED, "Failed to"</div><div class='del'>-                                        " retrieve GF_ID");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        base_name = text_column;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                        /* Add link info to the list */</div><div class='del'>-                        ret = gfdb_add_link_to_query_record (query_record,</div><div class='del'>-                                                         pgfid, base_name);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_GET_ID_FAILED, "Failed to"</div><div class='del'>-                                        " add link info to query record");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        is_first_record = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_query_record_t *query_record = NULL;</div><div class='add'>+    char *text_column = NULL;</div><div class='add'>+    sqlite3 *db_conn = NULL;</div><div class='add'>+    uuid_t prev_gfid = {0};</div><div class='add'>+    uuid_t curr_gfid = {0};</div><div class='add'>+    uuid_t pgfid = {0};</div><div class='add'>+    char *base_name = NULL;</div><div class='add'>+    gf_boolean_t is_first_record = _gf_true;</div><div class='add'>+    gf_boolean_t is_query_empty = _gf_true;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, prep_stmt, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out);</div><div class='add'>+</div><div class='add'>+    db_conn = sqlite3_db_handle(prep_stmt);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Loop to access queried rows</div><div class='add'>+     * Each db record will have 3 columns</div><div class='add'>+     * GFID, PGFID, FILE_NAME</div><div class='add'>+     *</div><div class='add'>+     * For file with multiple hard links we will get multiple query rows</div><div class='add'>+     * with the same GFID, but different PGID and FILE_NAME Combination</div><div class='add'>+     * For Example if a file with</div><div class='add'>+     *         GFID = 00000000-0000-0000-0000-000000000006</div><div class='add'>+     * has 3 hardlinks file1, file2 and file3 in 3 different folder</div><div class='add'>+     * with GFID's</div><div class='add'>+     * 00000000-0000-0000-0000-0000EFC00001,</div><div class='add'>+     * 00000000-0000-0000-0000-00000ABC0001 and</div><div class='add'>+     * 00000000-0000-0000-0000-00000ABC00CD</div><div class='add'>+     * Then there will be 3 records</div><div class='add'>+     *         GFID         : 00000000-0000-0000-0000-000000000006</div><div class='add'>+     *         PGFID        : 00000000-0000-0000-0000-0000EFC00001</div><div class='add'>+     *         FILE_NAME    : file1</div><div class='add'>+     *</div><div class='add'>+     *         GFID         : 00000000-0000-0000-0000-000000000006</div><div class='add'>+     *         PGFID        : 00000000-0000-0000-0000-00000ABC0001</div><div class='add'>+     *         FILE_NAME    : file2</div><div class='add'>+     *</div><div class='add'>+     *         GFID         : 00000000-0000-0000-0000-000000000006</div><div class='add'>+     *         PGFID        : 00000000-0000-0000-0000-00000ABC00CD</div><div class='add'>+     *         FILE_NAME    : file3</div><div class='add'>+     *</div><div class='add'>+     * This is retrieved and added to a single query_record</div><div class='add'>+     *</div><div class='add'>+     * query_record-&gt;gfid = 00000000-0000-0000-0000-000000000006</div><div class='add'>+     *                  -&gt;link_info = {00000000-0000-0000-0000-0000EFC00001,</div><div class='add'>+     *                                 "file1"}</div><div class='add'>+     *                                  |</div><div class='add'>+     *                                  V</div><div class='add'>+     *             link_info = {00000000-0000-0000-0000-00000ABC0001,</div><div class='add'>+     *                                 "file2"}</div><div class='add'>+     *                                  |</div><div class='add'>+     *                                  V</div><div class='add'>+     *             link_info = {00000000-0000-0000-0000-00000ABC0001,</div><div class='add'>+     *                                 "file3",</div><div class='add'>+     *                                 list}</div><div class='add'>+     *</div><div class='add'>+     * This query record is sent to the registered query_callback()</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    while ((ret = sqlite3_step(prep_stmt)) == SQLITE_ROW) {</div><div class='add'>+        if (sqlite3_column_count(prep_stmt) &gt; 0) {</div><div class='add'>+            is_query_empty = _gf_false;</div><div class='add'>+</div><div class='add'>+            /*Retrieving GFID - column index is 0*/</div><div class='add'>+            text_column = (char *)sqlite3_column_text(prep_stmt, 0);</div><div class='add'>+            if (!text_column) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED,</div><div class='add'>+                       "Failed to"</div><div class='add'>+                       "retrieve GFID");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = gf_uuid_parse(text_column, curr_gfid);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PARSE_FAILED,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "GFID");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /*</div><div class='add'>+             * if the previous record was not of the current gfid</div><div class='add'>+             * call the call_back function and send the</div><div class='add'>+             * query record, which will have all the link_info</div><div class='add'>+             * objects associated with this gfid</div><div class='add'>+             *</div><div class='add'>+             * */</div><div class='add'>+            if (gf_uuid_compare(curr_gfid, prev_gfid) != 0) {</div><div class='add'>+                /* If this is not the first record */</div><div class='add'>+                if (!is_first_record) {</div><div class='add'>+                    /*Call the call_back function provided*/</div><div class='add'>+                    ret = query_callback(query_record, _query_cbk_args);</div><div class='add'>+                    if (ret) {</div><div class='add'>+                        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                               LG_MSG_QUERY_CALL_BACK_FAILED,</div><div class='add'>+                               "Query call back "</div><div class='add'>+                               "failed");</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='ctx'> </div><div class='add'>+                /*Clear the query record*/</div><div class='add'>+                gfdb_query_record_free(query_record);</div><div class='add'>+                query_record = NULL;</div><div class='add'>+                query_record = gfdb_query_record_new();</div><div class='add'>+                if (!query_record) {</div><div class='add'>+                    gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                           LG_MSG_CREATE_FAILED,</div><div class='add'>+                           "Failed to create "</div><div class='add'>+                           "query_record");</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+                gf_uuid_copy(query_record-&gt;gfid, curr_gfid);</div><div class='add'>+                gf_uuid_copy(prev_gfid, curr_gfid);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (ret != SQLITE_DONE) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_GET_RECORD_FAILED, "Failed to retrieve records "</div><div class='del'>-                        "from db : %s", sqlite3_errmsg (db_conn));</div><div class='del'>-                ret = -1;</div><div class='add'>+            /* Get PGFID */</div><div class='add'>+            text_column = (char *)sqlite3_column_text(prep_stmt, 1);</div><div class='add'>+            if (!text_column) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED,</div><div class='add'>+                       "Failed to"</div><div class='add'>+                       " retrieve GF_ID");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+            }</div><div class='add'>+            ret = gf_uuid_parse(text_column, pgfid);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PARSE_FAILED,</div><div class='add'>+                       "Failed to parse "</div><div class='add'>+                       "GF_ID");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Get Base name */</div><div class='add'>+            text_column = (char *)sqlite3_column_text(prep_stmt, 2);</div><div class='add'>+            if (!text_column) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED,</div><div class='add'>+                       "Failed to"</div><div class='add'>+                       " retrieve GF_ID");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            base_name = text_column;</div><div class='add'>+</div><div class='add'>+            /* Add link info to the list */</div><div class='add'>+            ret = gfdb_add_link_to_query_record(query_record, pgfid, base_name);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED,</div><div class='add'>+                       "Failed to"</div><div class='add'>+                       " add link info to query record");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (!is_query_empty) {</div><div class='del'>-                /*</div><div class='del'>-                 * Call the call_back function for the last record from the</div><div class='del'>-                 * Database</div><div class='del'>-                 * */</div><div class='del'>-                ret = query_callback (query_record, _query_cbk_args);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_QUERY_CALL_BACK_FAILED,</div><div class='del'>-                                "Query call back failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            is_first_record = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret != SQLITE_DONE) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED,</div><div class='add'>+               "Failed to retrieve records "</div><div class='add'>+               "from db : %s",</div><div class='add'>+               sqlite3_errmsg(db_conn));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!is_query_empty) {</div><div class='add'>+        /*</div><div class='add'>+         * Call the call_back function for the last record from the</div><div class='add'>+         * Database</div><div class='add'>+         * */</div><div class='add'>+        ret = query_callback(query_record, _query_cbk_args);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0,</div><div class='add'>+                   LG_MSG_QUERY_CALL_BACK_FAILED, "Query call back failed");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        gfdb_query_record_free (query_record);</div><div class='del'>-        query_record = NULL;</div><div class='del'>-        return ret;</div><div class='add'>+    gfdb_query_record_free(query_record);</div><div class='add'>+    query_record = NULL;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_sql_clear_counters (gf_sql_connection_t *sql_conn)</div><div class='add'>+gf_sql_clear_counters(gf_sql_connection_t *sql_conn)</div><div class='ctx'> {</div><div class='del'>-        int ret                 = -1;</div><div class='del'>-        char *sql_strerror      = NULL;</div><div class='del'>-        char *query_str         = NULL;</div><div class='del'>-</div><div class='del'>-        CHECK_SQL_CONN (sql_conn, out);</div><div class='del'>-</div><div class='del'>-        query_str = "UPDATE "</div><div class='del'>-                    GF_FILE_TABLE</div><div class='del'>-                    " SET " GF_COL_READ_FREQ_CNTR " = 0 , "</div><div class='del'>-                    GF_COL_WRITE_FREQ_CNTR " = 0 ;";</div><div class='del'>-</div><div class='del'>-        ret = sqlite3_exec (sql_conn-&gt;sqlite3_db_conn, query_str, NULL, NULL,</div><div class='del'>-                                &amp;sql_strerror);</div><div class='del'>-        if (ret != SQLITE_OK) {</div><div class='del'>-                gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED,</div><div class='del'>-                        "Failed to execute: %s : %s",</div><div class='del'>-                        query_str, sql_strerror);</div><div class='del'>-                sqlite3_free (sql_strerror);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *sql_strerror = NULL;</div><div class='add'>+    char *query_str = NULL;</div><div class='add'>+</div><div class='add'>+    CHECK_SQL_CONN(sql_conn, out);</div><div class='add'>+</div><div class='add'>+    query_str = "UPDATE " GF_FILE_TABLE " SET " GF_COL_READ_FREQ_CNTR</div><div class='add'>+                " = 0 , " GF_COL_WRITE_FREQ_CNTR " = 0 ;";</div><div class='add'>+</div><div class='add'>+    ret = sqlite3_exec(sql_conn-&gt;sqlite3_db_conn, query_str, NULL, NULL,</div><div class='add'>+                       &amp;sql_strerror);</div><div class='add'>+    if (ret != SQLITE_OK) {</div><div class='add'>+        gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED,</div><div class='add'>+               "Failed to execute: %s : %s", query_str, sql_strerror);</div><div class='add'>+        sqlite3_free(sql_strerror);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/gidcache.c b/libglusterfs/src/gidcache.c<br/>index f2d98abefc3..b9fdb9a39be 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gidcache.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/gidcache.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/gidcache.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/gidcache.c</a></div><div class='hunk'>@@ -16,37 +16,39 @@</div><div class='ctx'>  * out after a configurable interval.  Hardly rocket science, but lots of</div><div class='ctx'>  * details to worry about.</div><div class='ctx'>  */</div><div class='del'>-#define BUCKET_START(p,n)       ((p) + ((n) * AUX_GID_CACHE_ASSOC))</div><div class='add'>+#define BUCKET_START(p, n) ((p) + ((n)*AUX_GID_CACHE_ASSOC))</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Initialize the cache.</div><div class='ctx'>  */</div><div class='del'>-int gid_cache_init(gid_cache_t *cache, uint32_t timeout)</div><div class='add'>+int</div><div class='add'>+gid_cache_init(gid_cache_t *cache, uint32_t timeout)</div><div class='ctx'> {</div><div class='del'>-	if (!cache)</div><div class='del'>-		return -1;</div><div class='add'>+    if (!cache)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	LOCK_INIT(&amp;cache-&gt;gc_lock);</div><div class='del'>-	cache-&gt;gc_max_age = timeout;</div><div class='del'>-	cache-&gt;gc_nbuckets = AUX_GID_CACHE_BUCKETS;</div><div class='del'>-	memset(cache-&gt;gc_cache, 0, sizeof(gid_list_t) * AUX_GID_CACHE_SIZE);</div><div class='add'>+    LOCK_INIT(&amp;cache-&gt;gc_lock);</div><div class='add'>+    cache-&gt;gc_max_age = timeout;</div><div class='add'>+    cache-&gt;gc_nbuckets = AUX_GID_CACHE_BUCKETS;</div><div class='add'>+    memset(cache-&gt;gc_cache, 0, sizeof(gid_list_t) * AUX_GID_CACHE_SIZE);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Reconfigure the cache timeout.</div><div class='ctx'>  */</div><div class='del'>-int gid_cache_reconf(gid_cache_t *cache, uint32_t timeout)</div><div class='add'>+int</div><div class='add'>+gid_cache_reconf(gid_cache_t *cache, uint32_t timeout)</div><div class='ctx'> {</div><div class='del'>-        if (!cache)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!cache)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;cache-&gt;gc_lock);</div><div class='del'>-        cache-&gt;gc_max_age = timeout;</div><div class='del'>-        UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+    LOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+    cache-&gt;gc_max_age = timeout;</div><div class='add'>+    UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -54,153 +56,155 @@ int gid_cache_reconf(gid_cache_t *cache, uint32_t timeout)</div><div class='ctx'>  * an additional allocation and memory copy. The caller should copy the data and</div><div class='ctx'>  * release (unlock) the cache as soon as possible.</div><div class='ctx'>  */</div><div class='del'>-const gid_list_t *gid_cache_lookup(gid_cache_t *cache, uint64_t id,</div><div class='del'>-				   uint64_t uid, uint64_t gid)</div><div class='add'>+const gid_list_t *</div><div class='add'>+gid_cache_lookup(gid_cache_t *cache, uint64_t id, uint64_t uid, uint64_t gid)</div><div class='ctx'> {</div><div class='del'>-	int bucket;</div><div class='del'>-	int i;</div><div class='del'>-	time_t now;</div><div class='del'>-	const gid_list_t *agl;</div><div class='del'>-</div><div class='del'>-	LOCK(&amp;cache-&gt;gc_lock);</div><div class='del'>-	now = time(NULL);</div><div class='del'>-	bucket = id % cache-&gt;gc_nbuckets;</div><div class='del'>-	agl = BUCKET_START(cache-&gt;gc_cache, bucket);</div><div class='del'>-	for (i = 0; i &lt; AUX_GID_CACHE_ASSOC; i++, agl++) {</div><div class='del'>-		if (!agl-&gt;gl_list)</div><div class='del'>-			continue;</div><div class='del'>-		if (agl-&gt;gl_id != id)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		  @uid and @gid reflect the latest UID/GID of the</div><div class='del'>-		   process performing the syscall (taken from frame-&gt;root).</div><div class='del'>-</div><div class='del'>-		   If the UID and GID has changed for the PID since the</div><div class='del'>-		   time we cached it, we should treat the cache as having</div><div class='del'>-		   stale values and query them freshly.</div><div class='del'>-		*/</div><div class='del'>-		if (agl-&gt;gl_uid != uid || agl-&gt;gl_gid != gid)</div><div class='del'>-			break;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * We don't put new entries in the cache when expiration=0, but</div><div class='del'>-		 * there might be entries still in there if expiration was</div><div class='del'>-		 * changed very recently.  Writing the check this way ensures</div><div class='del'>-		 * that they're not used.</div><div class='del'>-		 */</div><div class='del'>-		if (now &lt; agl-&gt;gl_deadline) {</div><div class='del'>-			return agl;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * We're not going to find any more UID matches, and reaping</div><div class='del'>-		 * is handled further down to maintain LRU order.</div><div class='del'>-		 */</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='del'>-	return NULL;</div><div class='add'>+    int bucket;</div><div class='add'>+    int i;</div><div class='add'>+    time_t now;</div><div class='add'>+    const gid_list_t *agl;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+    now = time(NULL);</div><div class='add'>+    bucket = id % cache-&gt;gc_nbuckets;</div><div class='add'>+    agl = BUCKET_START(cache-&gt;gc_cache, bucket);</div><div class='add'>+    for (i = 0; i &lt; AUX_GID_CACHE_ASSOC; i++, agl++) {</div><div class='add'>+        if (!agl-&gt;gl_list)</div><div class='add'>+            continue;</div><div class='add'>+        if (agl-&gt;gl_id != id)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+          @uid and @gid reflect the latest UID/GID of the</div><div class='add'>+           process performing the syscall (taken from frame-&gt;root).</div><div class='add'>+</div><div class='add'>+           If the UID and GID has changed for the PID since the</div><div class='add'>+           time we cached it, we should treat the cache as having</div><div class='add'>+           stale values and query them freshly.</div><div class='add'>+        */</div><div class='add'>+        if (agl-&gt;gl_uid != uid || agl-&gt;gl_gid != gid)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * We don't put new entries in the cache when expiration=0, but</div><div class='add'>+         * there might be entries still in there if expiration was</div><div class='add'>+         * changed very recently.  Writing the check this way ensures</div><div class='add'>+         * that they're not used.</div><div class='add'>+         */</div><div class='add'>+        if (now &lt; agl-&gt;gl_deadline) {</div><div class='add'>+            return agl;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * We're not going to find any more UID matches, and reaping</div><div class='add'>+         * is handled further down to maintain LRU order.</div><div class='add'>+         */</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Release an entry found via lookup.</div><div class='ctx'>  */</div><div class='del'>-void gid_cache_release(gid_cache_t *cache, const gid_list_t *agl)</div><div class='add'>+void</div><div class='add'>+gid_cache_release(gid_cache_t *cache, const gid_list_t *agl)</div><div class='ctx'> {</div><div class='del'>-	UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+    UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Add a new list entry to the cache. If an entry for this ID already exists,</div><div class='ctx'>  * update it.</div><div class='ctx'>  */</div><div class='del'>-int gid_cache_add(gid_cache_t *cache, gid_list_t *gl)</div><div class='add'>+int</div><div class='add'>+gid_cache_add(gid_cache_t *cache, gid_list_t *gl)</div><div class='ctx'> {</div><div class='del'>-	gid_list_t *agl;</div><div class='del'>-	int bucket;</div><div class='del'>-	int i;</div><div class='del'>-	time_t now;</div><div class='del'>-</div><div class='del'>-	if (!gl || !gl-&gt;gl_list)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-	if (!cache-&gt;gc_max_age)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	LOCK(&amp;cache-&gt;gc_lock);</div><div class='del'>-	now = time(NULL);</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * Scan for the first free entry or one that matches this id. The id</div><div class='del'>-	 * check is added to address a bug where the cache might contain an</div><div class='del'>-	 * expired entry for this id. Since lookup occurs in LRU order and</div><div class='del'>-	 * does not reclaim entries, it will always return failure on discovery</div><div class='del'>-	 * of an expired entry. This leads to duplicate entries being added,</div><div class='del'>-	 * which still do not satisfy lookups until the expired entry (and</div><div class='del'>-	 * everything before it) is reclaimed.</div><div class='del'>-	 *</div><div class='del'>-	 * We address this through reuse of an entry already allocated to this</div><div class='del'>-	 * id, whether expired or not, since we have obviously already received</div><div class='del'>-	 * more recent data. The entry is repopulated with the new data and a new</div><div class='del'>-	 * deadline and is pushed forward to reside as the last populated entry in</div><div class='del'>-	 * the bucket.</div><div class='del'>-	 */</div><div class='del'>-	bucket = gl-&gt;gl_id % cache-&gt;gc_nbuckets;</div><div class='del'>-	agl = BUCKET_START(cache-&gt;gc_cache, bucket);</div><div class='del'>-	for (i = 0; i &lt; AUX_GID_CACHE_ASSOC; ++i, ++agl) {</div><div class='del'>-		if (agl-&gt;gl_id == gl-&gt;gl_id)</div><div class='del'>-			break;</div><div class='del'>-		if (!agl-&gt;gl_list)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * The way we allocate free entries naturally places the newest</div><div class='del'>-	 * ones at the highest indices, so evicting the lowest makes</div><div class='del'>-	 * sense, but that also means we can't just replace it with the</div><div class='del'>-	 * one that caused the eviction.  That would cause us to thrash</div><div class='del'>-	 * the first entry while others remain idle.  Therefore, we</div><div class='del'>-	 * need to slide the other entries down and add the new one at</div><div class='del'>-	 * the end just as if the *last* slot had been free.</div><div class='del'>-	 *</div><div class='del'>-	 * Deadline expiration is also handled here, since the oldest</div><div class='del'>-	 * expired entry will be in the first position.  This does mean</div><div class='del'>-	 * the bucket can stay full of expired entries if we're idle</div><div class='del'>-	 * but, if the small amount of extra memory or scan time before</div><div class='del'>-	 * we decide to evict someone ever become issues, we could</div><div class='del'>-	 * easily add a reaper thread.</div><div class='del'>-	 */</div><div class='del'>-</div><div class='del'>-	if (i &gt;= AUX_GID_CACHE_ASSOC) {</div><div class='del'>-		/* cache full, evict the first (LRU) entry */</div><div class='del'>-		i = 0;</div><div class='del'>-		agl = BUCKET_START(cache-&gt;gc_cache, bucket);</div><div class='del'>-		GF_FREE(agl-&gt;gl_list);</div><div class='del'>-	} else if (agl-&gt;gl_list) {</div><div class='del'>-		/* evict the old entry we plan to reuse */</div><div class='del'>-		GF_FREE(agl-&gt;gl_list);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * If we have evicted an entry, slide the subsequent populated entries</div><div class='del'>-	 * back and populate the last entry.</div><div class='del'>-	 */</div><div class='del'>-	for (; i &lt; AUX_GID_CACHE_ASSOC - 1; i++) {</div><div class='del'>-		if (!agl[1].gl_list)</div><div class='del'>-			break;</div><div class='del'>-		agl[0] = agl[1];</div><div class='del'>-		agl++;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	agl-&gt;gl_id = gl-&gt;gl_id;</div><div class='del'>-	agl-&gt;gl_uid = gl-&gt;gl_uid;</div><div class='del'>-	agl-&gt;gl_gid = gl-&gt;gl_gid;</div><div class='del'>-	agl-&gt;gl_count = gl-&gt;gl_count;</div><div class='del'>-	agl-&gt;gl_list = gl-&gt;gl_list;</div><div class='del'>-	agl-&gt;gl_deadline = now + cache-&gt;gc_max_age;</div><div class='del'>-</div><div class='del'>-	UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='del'>-</div><div class='del'>-	return 1;</div><div class='add'>+    gid_list_t *agl;</div><div class='add'>+    int bucket;</div><div class='add'>+    int i;</div><div class='add'>+    time_t now;</div><div class='add'>+</div><div class='add'>+    if (!gl || !gl-&gt;gl_list)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!cache-&gt;gc_max_age)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+    now = time(NULL);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Scan for the first free entry or one that matches this id. The id</div><div class='add'>+     * check is added to address a bug where the cache might contain an</div><div class='add'>+     * expired entry for this id. Since lookup occurs in LRU order and</div><div class='add'>+     * does not reclaim entries, it will always return failure on discovery</div><div class='add'>+     * of an expired entry. This leads to duplicate entries being added,</div><div class='add'>+     * which still do not satisfy lookups until the expired entry (and</div><div class='add'>+     * everything before it) is reclaimed.</div><div class='add'>+     *</div><div class='add'>+     * We address this through reuse of an entry already allocated to this</div><div class='add'>+     * id, whether expired or not, since we have obviously already received</div><div class='add'>+     * more recent data. The entry is repopulated with the new data and a new</div><div class='add'>+     * deadline and is pushed forward to reside as the last populated entry in</div><div class='add'>+     * the bucket.</div><div class='add'>+     */</div><div class='add'>+    bucket = gl-&gt;gl_id % cache-&gt;gc_nbuckets;</div><div class='add'>+    agl = BUCKET_START(cache-&gt;gc_cache, bucket);</div><div class='add'>+    for (i = 0; i &lt; AUX_GID_CACHE_ASSOC; ++i, ++agl) {</div><div class='add'>+        if (agl-&gt;gl_id == gl-&gt;gl_id)</div><div class='add'>+            break;</div><div class='add'>+        if (!agl-&gt;gl_list)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * The way we allocate free entries naturally places the newest</div><div class='add'>+     * ones at the highest indices, so evicting the lowest makes</div><div class='add'>+     * sense, but that also means we can't just replace it with the</div><div class='add'>+     * one that caused the eviction.  That would cause us to thrash</div><div class='add'>+     * the first entry while others remain idle.  Therefore, we</div><div class='add'>+     * need to slide the other entries down and add the new one at</div><div class='add'>+     * the end just as if the *last* slot had been free.</div><div class='add'>+     *</div><div class='add'>+     * Deadline expiration is also handled here, since the oldest</div><div class='add'>+     * expired entry will be in the first position.  This does mean</div><div class='add'>+     * the bucket can stay full of expired entries if we're idle</div><div class='add'>+     * but, if the small amount of extra memory or scan time before</div><div class='add'>+     * we decide to evict someone ever become issues, we could</div><div class='add'>+     * easily add a reaper thread.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (i &gt;= AUX_GID_CACHE_ASSOC) {</div><div class='add'>+        /* cache full, evict the first (LRU) entry */</div><div class='add'>+        i = 0;</div><div class='add'>+        agl = BUCKET_START(cache-&gt;gc_cache, bucket);</div><div class='add'>+        GF_FREE(agl-&gt;gl_list);</div><div class='add'>+    } else if (agl-&gt;gl_list) {</div><div class='add'>+        /* evict the old entry we plan to reuse */</div><div class='add'>+        GF_FREE(agl-&gt;gl_list);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If we have evicted an entry, slide the subsequent populated entries</div><div class='add'>+     * back and populate the last entry.</div><div class='add'>+     */</div><div class='add'>+    for (; i &lt; AUX_GID_CACHE_ASSOC - 1; i++) {</div><div class='add'>+        if (!agl[1].gl_list)</div><div class='add'>+            break;</div><div class='add'>+        agl[0] = agl[1];</div><div class='add'>+        agl++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    agl-&gt;gl_id = gl-&gt;gl_id;</div><div class='add'>+    agl-&gt;gl_uid = gl-&gt;gl_uid;</div><div class='add'>+    agl-&gt;gl_gid = gl-&gt;gl_gid;</div><div class='add'>+    agl-&gt;gl_count = gl-&gt;gl_count;</div><div class='add'>+    agl-&gt;gl_list = gl-&gt;gl_list;</div><div class='add'>+    agl-&gt;gl_deadline = now + cache-&gt;gc_max_age;</div><div class='add'>+</div><div class='add'>+    UNLOCK(&amp;cache-&gt;gc_lock);</div><div class='add'>+</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/globals.c b/libglusterfs/src/globals.c<br/>index 3506d482bda..98990460c86 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/globals.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/globals.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/globals.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/globals.c</a></div><div class='hunk'>@@ -19,75 +19,75 @@</div><div class='ctx'> #include "upcall-utils.h"</div><div class='ctx'> </div><div class='ctx'> const char *gf_fop_list[GF_FOP_MAXVALUE] = {</div><div class='del'>-        [GF_FOP_NULL]        = "NULL",</div><div class='del'>-        [GF_FOP_STAT]        = "STAT",</div><div class='del'>-        [GF_FOP_READLINK]    = "READLINK",</div><div class='del'>-        [GF_FOP_MKNOD]       = "MKNOD",</div><div class='del'>-        [GF_FOP_MKDIR]       = "MKDIR",</div><div class='del'>-        [GF_FOP_UNLINK]      = "UNLINK",</div><div class='del'>-        [GF_FOP_RMDIR]       = "RMDIR",</div><div class='del'>-        [GF_FOP_SYMLINK]     = "SYMLINK",</div><div class='del'>-        [GF_FOP_RENAME]      = "RENAME",</div><div class='del'>-        [GF_FOP_LINK]        = "LINK",</div><div class='del'>-        [GF_FOP_TRUNCATE]    = "TRUNCATE",</div><div class='del'>-        [GF_FOP_OPEN]        = "OPEN",</div><div class='del'>-        [GF_FOP_READ]        = "READ",</div><div class='del'>-        [GF_FOP_WRITE]       = "WRITE",</div><div class='del'>-        [GF_FOP_STATFS]      = "STATFS",</div><div class='del'>-        [GF_FOP_FLUSH]       = "FLUSH",</div><div class='del'>-        [GF_FOP_FSYNC]       = "FSYNC",</div><div class='del'>-        [GF_FOP_SETXATTR]    = "SETXATTR",</div><div class='del'>-        [GF_FOP_GETXATTR]    = "GETXATTR",</div><div class='del'>-        [GF_FOP_REMOVEXATTR] = "REMOVEXATTR",</div><div class='del'>-        [GF_FOP_OPENDIR]     = "OPENDIR",</div><div class='del'>-        [GF_FOP_FSYNCDIR]    = "FSYNCDIR",</div><div class='del'>-        [GF_FOP_ACCESS]      = "ACCESS",</div><div class='del'>-        [GF_FOP_CREATE]      = "CREATE",</div><div class='del'>-        [GF_FOP_FTRUNCATE]   = "FTRUNCATE",</div><div class='del'>-        [GF_FOP_FSTAT]       = "FSTAT",</div><div class='del'>-        [GF_FOP_LK]          = "LK",</div><div class='del'>-        [GF_FOP_LOOKUP]      = "LOOKUP",</div><div class='del'>-        [GF_FOP_READDIR]     = "READDIR",</div><div class='del'>-        [GF_FOP_INODELK]     = "INODELK",</div><div class='del'>-        [GF_FOP_FINODELK]    = "FINODELK",</div><div class='del'>-        [GF_FOP_ENTRYLK]     = "ENTRYLK",</div><div class='del'>-        [GF_FOP_FENTRYLK]    = "FENTRYLK",</div><div class='del'>-        [GF_FOP_XATTROP]     = "XATTROP",</div><div class='del'>-        [GF_FOP_FXATTROP]    = "FXATTROP",</div><div class='del'>-        [GF_FOP_FSETXATTR]   = "FSETXATTR",</div><div class='del'>-        [GF_FOP_FGETXATTR]   = "FGETXATTR",</div><div class='del'>-        [GF_FOP_RCHECKSUM]   = "RCHECKSUM",</div><div class='del'>-        [GF_FOP_SETATTR]     = "SETATTR",</div><div class='del'>-        [GF_FOP_FSETATTR]    = "FSETATTR",</div><div class='del'>-        [GF_FOP_READDIRP]    = "READDIRP",</div><div class='del'>-        [GF_FOP_GETSPEC]     = "GETSPEC",</div><div class='del'>-        [GF_FOP_FORGET]      = "FORGET",</div><div class='del'>-        [GF_FOP_RELEASE]     = "RELEASE",</div><div class='del'>-        [GF_FOP_RELEASEDIR]  = "RELEASEDIR",</div><div class='del'>-        [GF_FOP_FREMOVEXATTR]= "FREMOVEXATTR",</div><div class='del'>-	[GF_FOP_FALLOCATE]   = "FALLOCATE",</div><div class='del'>-	[GF_FOP_DISCARD]     = "DISCARD",</div><div class='del'>-        [GF_FOP_ZEROFILL]    = "ZEROFILL",</div><div class='del'>-        [GF_FOP_IPC]         = "IPC",</div><div class='del'>-        [GF_FOP_SEEK]        = "SEEK",</div><div class='del'>-        [GF_FOP_LEASE]       = "LEASE",</div><div class='del'>-        [GF_FOP_COMPOUND]    = "COMPOUND",</div><div class='del'>-        [GF_FOP_GETACTIVELK] = "GETACTIVELK",</div><div class='del'>-        [GF_FOP_SETACTIVELK] = "SETACTIVELK",</div><div class='del'>-        [GF_FOP_PUT]         = "PUT",</div><div class='del'>-        [GF_FOP_ICREATE]     = "ICREATE",</div><div class='del'>-        [GF_FOP_NAMELINK]    = "NAMELINK",</div><div class='add'>+    [GF_FOP_NULL] = "NULL",</div><div class='add'>+    [GF_FOP_STAT] = "STAT",</div><div class='add'>+    [GF_FOP_READLINK] = "READLINK",</div><div class='add'>+    [GF_FOP_MKNOD] = "MKNOD",</div><div class='add'>+    [GF_FOP_MKDIR] = "MKDIR",</div><div class='add'>+    [GF_FOP_UNLINK] = "UNLINK",</div><div class='add'>+    [GF_FOP_RMDIR] = "RMDIR",</div><div class='add'>+    [GF_FOP_SYMLINK] = "SYMLINK",</div><div class='add'>+    [GF_FOP_RENAME] = "RENAME",</div><div class='add'>+    [GF_FOP_LINK] = "LINK",</div><div class='add'>+    [GF_FOP_TRUNCATE] = "TRUNCATE",</div><div class='add'>+    [GF_FOP_OPEN] = "OPEN",</div><div class='add'>+    [GF_FOP_READ] = "READ",</div><div class='add'>+    [GF_FOP_WRITE] = "WRITE",</div><div class='add'>+    [GF_FOP_STATFS] = "STATFS",</div><div class='add'>+    [GF_FOP_FLUSH] = "FLUSH",</div><div class='add'>+    [GF_FOP_FSYNC] = "FSYNC",</div><div class='add'>+    [GF_FOP_SETXATTR] = "SETXATTR",</div><div class='add'>+    [GF_FOP_GETXATTR] = "GETXATTR",</div><div class='add'>+    [GF_FOP_REMOVEXATTR] = "REMOVEXATTR",</div><div class='add'>+    [GF_FOP_OPENDIR] = "OPENDIR",</div><div class='add'>+    [GF_FOP_FSYNCDIR] = "FSYNCDIR",</div><div class='add'>+    [GF_FOP_ACCESS] = "ACCESS",</div><div class='add'>+    [GF_FOP_CREATE] = "CREATE",</div><div class='add'>+    [GF_FOP_FTRUNCATE] = "FTRUNCATE",</div><div class='add'>+    [GF_FOP_FSTAT] = "FSTAT",</div><div class='add'>+    [GF_FOP_LK] = "LK",</div><div class='add'>+    [GF_FOP_LOOKUP] = "LOOKUP",</div><div class='add'>+    [GF_FOP_READDIR] = "READDIR",</div><div class='add'>+    [GF_FOP_INODELK] = "INODELK",</div><div class='add'>+    [GF_FOP_FINODELK] = "FINODELK",</div><div class='add'>+    [GF_FOP_ENTRYLK] = "ENTRYLK",</div><div class='add'>+    [GF_FOP_FENTRYLK] = "FENTRYLK",</div><div class='add'>+    [GF_FOP_XATTROP] = "XATTROP",</div><div class='add'>+    [GF_FOP_FXATTROP] = "FXATTROP",</div><div class='add'>+    [GF_FOP_FSETXATTR] = "FSETXATTR",</div><div class='add'>+    [GF_FOP_FGETXATTR] = "FGETXATTR",</div><div class='add'>+    [GF_FOP_RCHECKSUM] = "RCHECKSUM",</div><div class='add'>+    [GF_FOP_SETATTR] = "SETATTR",</div><div class='add'>+    [GF_FOP_FSETATTR] = "FSETATTR",</div><div class='add'>+    [GF_FOP_READDIRP] = "READDIRP",</div><div class='add'>+    [GF_FOP_GETSPEC] = "GETSPEC",</div><div class='add'>+    [GF_FOP_FORGET] = "FORGET",</div><div class='add'>+    [GF_FOP_RELEASE] = "RELEASE",</div><div class='add'>+    [GF_FOP_RELEASEDIR] = "RELEASEDIR",</div><div class='add'>+    [GF_FOP_FREMOVEXATTR] = "FREMOVEXATTR",</div><div class='add'>+    [GF_FOP_FALLOCATE] = "FALLOCATE",</div><div class='add'>+    [GF_FOP_DISCARD] = "DISCARD",</div><div class='add'>+    [GF_FOP_ZEROFILL] = "ZEROFILL",</div><div class='add'>+    [GF_FOP_IPC] = "IPC",</div><div class='add'>+    [GF_FOP_SEEK] = "SEEK",</div><div class='add'>+    [GF_FOP_LEASE] = "LEASE",</div><div class='add'>+    [GF_FOP_COMPOUND] = "COMPOUND",</div><div class='add'>+    [GF_FOP_GETACTIVELK] = "GETACTIVELK",</div><div class='add'>+    [GF_FOP_SETACTIVELK] = "SETACTIVELK",</div><div class='add'>+    [GF_FOP_PUT] = "PUT",</div><div class='add'>+    [GF_FOP_ICREATE] = "ICREATE",</div><div class='add'>+    [GF_FOP_NAMELINK] = "NAMELINK",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> const char *gf_upcall_list[GF_UPCALL_FLAGS_MAXVALUE] = {</div><div class='del'>-        [GF_UPCALL_NULL] = "NULL",</div><div class='del'>-        [GF_UPCALL] = "UPCALL",</div><div class='del'>-        [GF_UPCALL_CI_STAT] = "CI_IATT",</div><div class='del'>-        [GF_UPCALL_CI_XATTR] = "CI_XATTR",</div><div class='del'>-        [GF_UPCALL_CI_RENAME] = "CI_RENAME",</div><div class='del'>-        [GF_UPCALL_CI_NLINK] = "CI_UNLINK",</div><div class='del'>-        [GF_UPCALL_CI_FORGET] = "CI_FORGET",</div><div class='del'>-        [GF_UPCALL_LEASE_RECALL] = "LEASE_RECALL",</div><div class='add'>+    [GF_UPCALL_NULL] = "NULL",</div><div class='add'>+    [GF_UPCALL] = "UPCALL",</div><div class='add'>+    [GF_UPCALL_CI_STAT] = "CI_IATT",</div><div class='add'>+    [GF_UPCALL_CI_XATTR] = "CI_XATTR",</div><div class='add'>+    [GF_UPCALL_CI_RENAME] = "CI_RENAME",</div><div class='add'>+    [GF_UPCALL_CI_NLINK] = "CI_UNLINK",</div><div class='add'>+    [GF_UPCALL_CI_FORGET] = "CI_FORGET",</div><div class='add'>+    [GF_UPCALL_LEASE_RECALL] = "LEASE_RECALL",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* THIS */</div><div class='hunk'>@@ -101,461 +101,452 @@ xlator_t global_xlator;</div><div class='ctx'> static pthread_key_t this_xlator_key;</div><div class='ctx'> static pthread_key_t synctask_key;</div><div class='ctx'> static pthread_key_t uuid_buf_key;</div><div class='del'>-static char          global_uuid_buf[GF_UUID_BUF_SIZE];</div><div class='add'>+static char global_uuid_buf[GF_UUID_BUF_SIZE];</div><div class='ctx'> static pthread_key_t lkowner_buf_key;</div><div class='del'>-static char          global_lkowner_buf[GF_LKOWNER_BUF_SIZE];</div><div class='add'>+static char global_lkowner_buf[GF_LKOWNER_BUF_SIZE];</div><div class='ctx'> static pthread_key_t leaseid_buf_key;</div><div class='ctx'> static int gf_global_mem_acct_enable = 1;</div><div class='ctx'> static pthread_once_t globals_inited = PTHREAD_ONCE_INIT;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_global_mem_acct_enable_get (void)</div><div class='add'>+gf_global_mem_acct_enable_get(void)</div><div class='ctx'> {</div><div class='del'>-	return gf_global_mem_acct_enable;</div><div class='add'>+    return gf_global_mem_acct_enable;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_global_mem_acct_enable_set (int val)</div><div class='add'>+gf_global_mem_acct_enable_set(int val)</div><div class='ctx'> {</div><div class='del'>-	gf_global_mem_acct_enable = val;</div><div class='del'>-	return 0;</div><div class='add'>+    gf_global_mem_acct_enable = val;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glusterfs_this_destroy (void *ptr)</div><div class='add'>+glusterfs_this_destroy(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        FREE (ptr);</div><div class='add'>+    FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct xlator_cbks global_cbks = {</div><div class='del'>-        .forget                 = NULL,</div><div class='del'>-        .release                = NULL,</div><div class='del'>-        .releasedir             = NULL,</div><div class='del'>-        .invalidate             = NULL,</div><div class='del'>-        .client_destroy         = NULL,</div><div class='del'>-        .client_disconnect      = NULL,</div><div class='del'>-        .ictxmerge              = NULL,</div><div class='del'>-        .ictxsize               = NULL,</div><div class='del'>-        .fdctxsize              = NULL,</div><div class='add'>+    .forget = NULL,</div><div class='add'>+    .release = NULL,</div><div class='add'>+    .releasedir = NULL,</div><div class='add'>+    .invalidate = NULL,</div><div class='add'>+    .client_destroy = NULL,</div><div class='add'>+    .client_disconnect = NULL,</div><div class='add'>+    .ictxmerge = NULL,</div><div class='add'>+    .ictxsize = NULL,</div><div class='add'>+    .fdctxsize = NULL,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* This is required to get through the check in graph.c */</div><div class='del'>-static struct xlator_fops global_fops = {</div><div class='del'>-};</div><div class='add'>+static struct xlator_fops global_fops = {};</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-global_xl_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+global_xl_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_boolean_t bool_opt = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t bool_opt = _gf_false;</div><div class='ctx'> </div><div class='del'>-        /* This is not added in volume dump, hence adding the options in log</div><div class='del'>-           would be helpful for debugging later */</div><div class='del'>-        dict_dump_to_log (options);</div><div class='add'>+    /* This is not added in volume dump, hence adding the options in log</div><div class='add'>+       would be helpful for debugging later */</div><div class='add'>+    dict_dump_to_log(options);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("measure-latency", bool_opt, options, bool, out);</div><div class='del'>-        this-&gt;ctx-&gt;measure_latency = bool_opt;</div><div class='add'>+    GF_OPTION_RECONF("measure-latency", bool_opt, options, bool, out);</div><div class='add'>+    this-&gt;ctx-&gt;measure_latency = bool_opt;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("metrics-dump-path", this-&gt;ctx-&gt;config.metrics_dumppath,</div><div class='del'>-                          options, str, out);</div><div class='add'>+    GF_OPTION_RECONF("metrics-dump-path", this-&gt;ctx-&gt;config.metrics_dumppath,</div><div class='add'>+                     options, str, out);</div><div class='ctx'> </div><div class='del'>-        /* TODO: add more things here */</div><div class='del'>-        ret = 0;</div><div class='add'>+    /* TODO: add more things here */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-global_xl_init (xlator_t *this)</div><div class='add'>+global_xl_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_boolean_t bool_opt = false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t bool_opt = false;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("measure-latency", bool_opt, bool, out);</div><div class='del'>-        this-&gt;ctx-&gt;measure_latency = bool_opt;</div><div class='add'>+    GF_OPTION_INIT("measure-latency", bool_opt, bool, out);</div><div class='add'>+    this-&gt;ctx-&gt;measure_latency = bool_opt;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("metrics-dump-path", this-&gt;ctx-&gt;config.metrics_dumppath,</div><div class='del'>-                        str, out);</div><div class='add'>+    GF_OPTION_INIT("metrics-dump-path", this-&gt;ctx-&gt;config.metrics_dumppath, str,</div><div class='add'>+                   out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-global_xl_fini (xlator_t *this)</div><div class='add'>+global_xl_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct volume_options global_xl_options[] = {</div><div class='del'>-        { .key   = {"measure-latency"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .op_version = {GD_OP_VERSION_4_0_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"global", "context"},</div><div class='del'>-          .description = "Use this option to toggle measuring latency"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"metrics-dump-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "{{gluster_workdir}}/metrics",</div><div class='del'>-          .op_version = {GD_OP_VERSION_4_0_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"global", "context"},</div><div class='del'>-          .description = "Use this option to set the metrics dump path"</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key = {NULL},},</div><div class='add'>+    {.key = {"measure-latency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "no",</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {"global", "context"},</div><div class='add'>+     .description = "Use this option to toggle measuring latency"},</div><div class='add'>+    {.key = {"metrics-dump-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "{{gluster_workdir}}/metrics",</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {"global", "context"},</div><div class='add'>+     .description = "Use this option to set the metrics dump path"},</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {NULL},</div><div class='add'>+    },</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static volume_opt_list_t global_xl_opt_list;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_this_init ()</div><div class='add'>+glusterfs_this_init()</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        ret = pthread_key_create (&amp;this_xlator_key, glusterfs_this_destroy);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, ret,</div><div class='del'>-                        LG_MSG_PTHREAD_KEY_CREATE_FAILED, "failed to create "</div><div class='del'>-                        "the pthread key");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    ret = pthread_key_create(&amp;this_xlator_key, glusterfs_this_destroy);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, ret, LG_MSG_PTHREAD_KEY_CREATE_FAILED,</div><div class='add'>+               "failed to create "</div><div class='add'>+               "the pthread key");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        global_xlator.name = "glusterfs";</div><div class='del'>-        global_xlator.type = GF_GLOBAL_XLATOR_NAME;</div><div class='del'>-        global_xlator.cbks = &amp;global_cbks;</div><div class='del'>-        global_xlator.fops = &amp;global_fops;</div><div class='del'>-        global_xlator.reconfigure = global_xl_reconfigure;</div><div class='del'>-        global_xlator.init = global_xl_init;</div><div class='del'>-        global_xlator.fini = global_xl_fini;</div><div class='add'>+    global_xlator.name = "glusterfs";</div><div class='add'>+    global_xlator.type = GF_GLOBAL_XLATOR_NAME;</div><div class='add'>+    global_xlator.cbks = &amp;global_cbks;</div><div class='add'>+    global_xlator.fops = &amp;global_fops;</div><div class='add'>+    global_xlator.reconfigure = global_xl_reconfigure;</div><div class='add'>+    global_xlator.init = global_xl_init;</div><div class='add'>+    global_xlator.fini = global_xl_fini;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;global_xlator.volume_options);</div><div class='del'>-        INIT_LIST_HEAD (&amp;global_xl_opt_list.list);</div><div class='del'>-        global_xl_opt_list.given_opt = global_xl_options;</div><div class='add'>+    INIT_LIST_HEAD(&amp;global_xlator.volume_options);</div><div class='add'>+    INIT_LIST_HEAD(&amp;global_xl_opt_list.list);</div><div class='add'>+    global_xl_opt_list.given_opt = global_xl_options;</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;global_xl_opt_list.list, &amp;global_xlator.volume_options);</div><div class='add'>+    list_add_tail(&amp;global_xl_opt_list.list, &amp;global_xlator.volume_options);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t **</div><div class='del'>-__glusterfs_this_location ()</div><div class='add'>+__glusterfs_this_location()</div><div class='ctx'> {</div><div class='del'>-        xlator_t **this_location = NULL;</div><div class='del'>-        int        ret = 0;</div><div class='del'>-</div><div class='del'>-        this_location = pthread_getspecific (this_xlator_key);</div><div class='del'>-</div><div class='del'>-        if (!this_location) {</div><div class='del'>-                this_location = CALLOC (1, sizeof (*this_location));</div><div class='del'>-                if (!this_location)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = pthread_setspecific (this_xlator_key, this_location);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        FREE (this_location);</div><div class='del'>-                        this_location = NULL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    xlator_t **this_location = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    this_location = pthread_getspecific(this_xlator_key);</div><div class='add'>+</div><div class='add'>+    if (!this_location) {</div><div class='add'>+        this_location = CALLOC(1, sizeof(*this_location));</div><div class='add'>+        if (!this_location)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = pthread_setspecific(this_xlator_key, this_location);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            FREE(this_location);</div><div class='add'>+            this_location = NULL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (this_location) {</div><div class='del'>-                if (!*this_location)</div><div class='del'>-                        *this_location = &amp;global_xlator;</div><div class='del'>-        }</div><div class='del'>-        return this_location;</div><div class='add'>+    if (this_location) {</div><div class='add'>+        if (!*this_location)</div><div class='add'>+            *this_location = &amp;global_xlator;</div><div class='add'>+    }</div><div class='add'>+    return this_location;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t *</div><div class='del'>-glusterfs_this_get ()</div><div class='add'>+glusterfs_this_get()</div><div class='ctx'> {</div><div class='del'>-        xlator_t **this_location = NULL;</div><div class='add'>+    xlator_t **this_location = NULL;</div><div class='ctx'> </div><div class='del'>-        this_location = __glusterfs_this_location ();</div><div class='del'>-        if (!this_location)</div><div class='del'>-                return &amp;global_xlator;</div><div class='add'>+    this_location = __glusterfs_this_location();</div><div class='add'>+    if (!this_location)</div><div class='add'>+        return &amp;global_xlator;</div><div class='ctx'> </div><div class='del'>-        return *this_location;</div><div class='add'>+    return *this_location;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_this_set (xlator_t *this)</div><div class='add'>+glusterfs_this_set(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        xlator_t **this_location = NULL;</div><div class='add'>+    xlator_t **this_location = NULL;</div><div class='ctx'> </div><div class='del'>-        this_location = __glusterfs_this_location ();</div><div class='del'>-        if (!this_location)</div><div class='del'>-                return -ENOMEM;</div><div class='add'>+    this_location = __glusterfs_this_location();</div><div class='add'>+    if (!this_location)</div><div class='add'>+        return -ENOMEM;</div><div class='ctx'> </div><div class='del'>-        *this_location = this;</div><div class='add'>+    *this_location = this;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* SYNCOPCTX */</div><div class='ctx'> static pthread_key_t syncopctx_key;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-syncopctx_key_destroy (void *ptr)</div><div class='add'>+syncopctx_key_destroy(void *ptr)</div><div class='ctx'> {</div><div class='del'>-	struct syncopctx *opctx = ptr;</div><div class='add'>+    struct syncopctx *opctx = ptr;</div><div class='ctx'> </div><div class='del'>-	if (opctx) {</div><div class='del'>-		if (opctx-&gt;groups)</div><div class='del'>-			GF_FREE (opctx-&gt;groups);</div><div class='add'>+    if (opctx) {</div><div class='add'>+        if (opctx-&gt;groups)</div><div class='add'>+            GF_FREE(opctx-&gt;groups);</div><div class='ctx'> </div><div class='del'>-		GF_FREE (opctx);</div><div class='del'>-	}</div><div class='add'>+        GF_FREE(opctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-syncopctx_getctx ()</div><div class='add'>+syncopctx_getctx()</div><div class='ctx'> {</div><div class='del'>-	void *opctx = NULL;</div><div class='add'>+    void *opctx = NULL;</div><div class='ctx'> </div><div class='del'>-	opctx = pthread_getspecific (syncopctx_key);</div><div class='add'>+    opctx = pthread_getspecific(syncopctx_key);</div><div class='ctx'> </div><div class='del'>-	return opctx;</div><div class='add'>+    return opctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncopctx_setctx (void *ctx)</div><div class='add'>+syncopctx_setctx(void *ctx)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = pthread_setspecific (syncopctx_key, ctx);</div><div class='add'>+    ret = pthread_setspecific(syncopctx_key, ctx);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-syncopctx_init (void)</div><div class='add'>+syncopctx_init(void)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-	ret = pthread_key_create (&amp;syncopctx_key, syncopctx_key_destroy);</div><div class='add'>+    ret = pthread_key_create(&amp;syncopctx_key, syncopctx_key_destroy);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* SYNCTASK */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-synctask_init ()</div><div class='add'>+synctask_init()</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_key_create (&amp;synctask_key, NULL);</div><div class='add'>+    ret = pthread_key_create(&amp;synctask_key, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-synctask_get ()</div><div class='add'>+synctask_get()</div><div class='ctx'> {</div><div class='del'>-        void   *synctask = NULL;</div><div class='add'>+    void *synctask = NULL;</div><div class='ctx'> </div><div class='del'>-        synctask = pthread_getspecific (synctask_key);</div><div class='add'>+    synctask = pthread_getspecific(synctask_key);</div><div class='ctx'> </div><div class='del'>-        return synctask;</div><div class='add'>+    return synctask;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synctask_set (void *synctask)</div><div class='add'>+synctask_set(void *synctask)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_setspecific (synctask_key, synctask);</div><div class='add'>+    pthread_setspecific(synctask_key, synctask);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-//UUID_BUFFER</div><div class='add'>+// UUID_BUFFER</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glusterfs_uuid_buf_destroy (void *ptr)</div><div class='add'>+glusterfs_uuid_buf_destroy(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        FREE (ptr);</div><div class='add'>+    FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_uuid_buf_init ()</div><div class='add'>+glusterfs_uuid_buf_init()</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_key_create (&amp;uuid_buf_key,</div><div class='del'>-                                  glusterfs_uuid_buf_destroy);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = pthread_key_create(&amp;uuid_buf_key, glusterfs_uuid_buf_destroy);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-glusterfs_uuid_buf_get ()</div><div class='add'>+glusterfs_uuid_buf_get()</div><div class='ctx'> {</div><div class='del'>-        char *buf;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        buf = pthread_getspecific (uuid_buf_key);</div><div class='del'>-        if(!buf) {</div><div class='del'>-                buf = MALLOC (GF_UUID_BUF_SIZE);</div><div class='del'>-                ret = pthread_setspecific (uuid_buf_key, (void *) buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        buf = global_uuid_buf;</div><div class='del'>-        }</div><div class='del'>-        return buf;</div><div class='add'>+    char *buf;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    buf = pthread_getspecific(uuid_buf_key);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        buf = MALLOC(GF_UUID_BUF_SIZE);</div><div class='add'>+        ret = pthread_setspecific(uuid_buf_key, (void *)buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            buf = global_uuid_buf;</div><div class='add'>+    }</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* LKOWNER_BUFFER */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glusterfs_lkowner_buf_destroy (void *ptr)</div><div class='add'>+glusterfs_lkowner_buf_destroy(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        FREE (ptr);</div><div class='add'>+    FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_lkowner_buf_init ()</div><div class='add'>+glusterfs_lkowner_buf_init()</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_key_create (&amp;lkowner_buf_key,</div><div class='del'>-                                  glusterfs_lkowner_buf_destroy);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = pthread_key_create(&amp;lkowner_buf_key, glusterfs_lkowner_buf_destroy);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-glusterfs_lkowner_buf_get ()</div><div class='add'>+glusterfs_lkowner_buf_get()</div><div class='ctx'> {</div><div class='del'>-        char *buf;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        buf = pthread_getspecific (lkowner_buf_key);</div><div class='del'>-        if(!buf) {</div><div class='del'>-                buf = MALLOC (GF_LKOWNER_BUF_SIZE);</div><div class='del'>-                ret = pthread_setspecific (lkowner_buf_key, (void *) buf);</div><div class='del'>-                if (ret)</div><div class='del'>-                        buf = global_lkowner_buf;</div><div class='del'>-        }</div><div class='del'>-        return buf;</div><div class='add'>+    char *buf;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    buf = pthread_getspecific(lkowner_buf_key);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        buf = MALLOC(GF_LKOWNER_BUF_SIZE);</div><div class='add'>+        ret = pthread_setspecific(lkowner_buf_key, (void *)buf);</div><div class='add'>+        if (ret)</div><div class='add'>+            buf = global_lkowner_buf;</div><div class='add'>+    }</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Leaseid buffer */</div><div class='ctx'> void</div><div class='del'>-glusterfs_leaseid_buf_destroy (void *ptr)</div><div class='add'>+glusterfs_leaseid_buf_destroy(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        FREE (ptr);</div><div class='add'>+    FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_leaseid_buf_init ()</div><div class='add'>+glusterfs_leaseid_buf_init()</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_key_create (&amp;leaseid_buf_key,</div><div class='del'>-                                  glusterfs_leaseid_buf_destroy);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = pthread_key_create(&amp;leaseid_buf_key, glusterfs_leaseid_buf_destroy);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-glusterfs_leaseid_buf_get ()</div><div class='add'>+glusterfs_leaseid_buf_get()</div><div class='ctx'> {</div><div class='del'>-        char *buf = NULL;</div><div class='del'>-        int   ret = 0;</div><div class='del'>-</div><div class='del'>-        buf = pthread_getspecific (leaseid_buf_key);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                buf = CALLOC (1, GF_LEASE_ID_BUF_SIZE);</div><div class='del'>-                ret = pthread_setspecific (leaseid_buf_key, (void *) buf);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        FREE (buf);</div><div class='del'>-                        buf = NULL;</div><div class='del'>-                }</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    buf = pthread_getspecific(leaseid_buf_key);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        buf = CALLOC(1, GF_LEASE_ID_BUF_SIZE);</div><div class='add'>+        ret = pthread_setspecific(leaseid_buf_key, (void *)buf);</div><div class='add'>+        if (ret) {</div><div class='add'>+            FREE(buf);</div><div class='add'>+            buf = NULL;</div><div class='ctx'>         }</div><div class='del'>-        return buf;</div><div class='add'>+    }</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-glusterfs_leaseid_exist ()</div><div class='add'>+glusterfs_leaseid_exist()</div><div class='ctx'> {</div><div class='del'>-        return pthread_getspecific (leaseid_buf_key);</div><div class='add'>+    return pthread_getspecific(leaseid_buf_key);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_globals_init_once ()</div><div class='add'>+gf_globals_init_once()</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_this_init ();</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_TRANSLATOR_INIT_FAILED,</div><div class='del'>-                        "ERROR: glusterfs-translator init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_uuid_buf_init ();</div><div class='del'>-        if(ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_UUID_BUF_INIT_FAILED,</div><div class='del'>-                        "ERROR: glusterfs uuid buffer init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_lkowner_buf_init ();</div><div class='del'>-        if(ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_LKOWNER_BUF_INIT_FAILED,</div><div class='del'>-                        "ERROR: glusterfs lkowner buffer init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_leaseid_buf_init ();</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_LEASEID_BUF_INIT_FAILED,</div><div class='del'>-                        "ERROR: glusterfs leaseid buffer init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = synctask_init ();</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_SYNCTASK_INIT_FAILED,</div><div class='del'>-                        "ERROR: glusterfs synctask init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncopctx_init ();</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_SYNCOPCTX_INIT_FAILED,</div><div class='del'>-                        "ERROR: glusterfs syncopctx init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_this_init();</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_TRANSLATOR_INIT_FAILED,</div><div class='add'>+               "ERROR: glusterfs-translator init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_uuid_buf_init();</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_UUID_BUF_INIT_FAILED,</div><div class='add'>+               "ERROR: glusterfs uuid buffer init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_lkowner_buf_init();</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_LKOWNER_BUF_INIT_FAILED,</div><div class='add'>+               "ERROR: glusterfs lkowner buffer init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_leaseid_buf_init();</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_LEASEID_BUF_INIT_FAILED,</div><div class='add'>+               "ERROR: glusterfs leaseid buffer init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = synctask_init();</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_SYNCTASK_INIT_FAILED,</div><div class='add'>+               "ERROR: glusterfs synctask init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncopctx_init();</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_SYNCOPCTX_INIT_FAILED,</div><div class='add'>+               "ERROR: glusterfs syncopctx init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_GLOBAL_INIT_FAILED,</div><div class='del'>-                        "Exiting as global initialization failed");</div><div class='del'>-                exit (ret);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_GLOBAL_INIT_FAILED,</div><div class='add'>+               "Exiting as global initialization failed");</div><div class='add'>+        exit(ret);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_globals_init (glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_globals_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        gf_log_globals_init (ctx, GF_LOG_INFO);</div><div class='add'>+    gf_log_globals_init(ctx, GF_LOG_INFO);</div><div class='ctx'> </div><div class='del'>-        ret =  pthread_once (&amp;globals_inited, gf_globals_init_once);</div><div class='add'>+    ret = pthread_once(&amp;globals_inited, gf_globals_init_once);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, ret, LG_MSG_PTHREAD_FAILED,</div><div class='del'>-                        "pthread_once failed");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, ret, LG_MSG_PTHREAD_FAILED,</div><div class='add'>+               "pthread_once failed");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/graph-print.c b/libglusterfs/src/graph-print.c<br/>index 676167b17d2..3b984b64508 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/graph-print.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/graph-print.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/graph-print.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/graph-print.c</a></div><div class='hunk'>@@ -15,183 +15,180 @@</div><div class='ctx'> #include "graph-utils.h"</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct gf_printer {</div><div class='del'>-        ssize_t (*write) (struct gf_printer *gp, char *buf, size_t len);</div><div class='del'>-        void *priv;</div><div class='del'>-        int  len;</div><div class='add'>+    ssize_t (*write)(struct gf_printer *gp, char *buf, size_t len);</div><div class='add'>+    void *priv;</div><div class='add'>+    int len;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static ssize_t</div><div class='del'>-gp_write_file (struct gf_printer *gp, char *buf, size_t len)</div><div class='add'>+gp_write_file(struct gf_printer *gp, char *buf, size_t len)</div><div class='ctx'> {</div><div class='del'>-        FILE *f = gp-&gt;priv;</div><div class='add'>+    FILE *f = gp-&gt;priv;</div><div class='ctx'> </div><div class='del'>-        if (fwrite (buf, len, 1, f) != 1) {</div><div class='del'>-                gf_msg ("graph-print", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_FWRITE_FAILED, "fwrite failed");</div><div class='add'>+    if (fwrite(buf, len, 1, f) != 1) {</div><div class='add'>+        gf_msg("graph-print", GF_LOG_ERROR, errno, LG_MSG_FWRITE_FAILED,</div><div class='add'>+               "fwrite failed");</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return len;</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static ssize_t</div><div class='del'>-gp_write_buf (struct gf_printer *gp, char *buf, size_t len)</div><div class='add'>+gp_write_buf(struct gf_printer *gp, char *buf, size_t len)</div><div class='ctx'> {</div><div class='del'>-        struct iovec *iov = gp-&gt;priv;</div><div class='add'>+    struct iovec *iov = gp-&gt;priv;</div><div class='ctx'> </div><div class='del'>-        if (iov-&gt;iov_len &lt; len) {</div><div class='del'>-                gf_msg ("graph-print", GF_LOG_ERROR, 0, LG_MSG_BUFFER_FULL,</div><div class='del'>-                        "buffer full");</div><div class='add'>+    if (iov-&gt;iov_len &lt; len) {</div><div class='add'>+        gf_msg("graph-print", GF_LOG_ERROR, 0, LG_MSG_BUFFER_FULL,</div><div class='add'>+               "buffer full");</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (iov-&gt;iov_base, buf, len);</div><div class='del'>-        iov-&gt;iov_base += len;</div><div class='del'>-        iov-&gt;iov_len  -= len;</div><div class='add'>+    memcpy(iov-&gt;iov_base, buf, len);</div><div class='add'>+    iov-&gt;iov_base += len;</div><div class='add'>+    iov-&gt;iov_len -= len;</div><div class='ctx'> </div><div class='del'>-        return len;</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gpprintf (struct gf_printer *gp, const char *format, ...)</div><div class='add'>+gpprintf(struct gf_printer *gp, const char *format, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list arg;</div><div class='del'>-        char *str = NULL;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    va_list arg;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        va_start (arg, format);</div><div class='del'>-        ret = gf_vasprintf (&amp;str, format, arg);</div><div class='del'>-        va_end (arg);</div><div class='add'>+    va_start(arg, format);</div><div class='add'>+    ret = gf_vasprintf(&amp;str, format, arg);</div><div class='add'>+    va_end(arg);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return ret;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = gp-&gt;write (gp, str, ret);</div><div class='add'>+    ret = gp-&gt;write(gp, str, ret);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (str);</div><div class='add'>+    GF_FREE(str);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define GPPRINTF(gp, fmt, ...) do {                             \</div><div class='del'>-                ret = gpprintf (gp, fmt, ## __VA_ARGS__);       \</div><div class='del'>-                if (ret == -1)                                  \</div><div class='del'>-                        goto out;                               \</div><div class='del'>-                else                                            \</div><div class='del'>-                        gp-&gt;len += ret;                             \</div><div class='del'>-        } while (0)</div><div class='add'>+#define GPPRINTF(gp, fmt, ...)                                                 \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        ret = gpprintf(gp, fmt, ##__VA_ARGS__);                                \</div><div class='add'>+        if (ret == -1)                                                         \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        else                                                                   \</div><div class='add'>+            gp-&gt;len += ret;                                                    \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_print_volume_options (dict_t *d, char *k, data_t *v,</div><div class='del'>-                           void *tmp)</div><div class='add'>+_print_volume_options(dict_t *d, char *k, data_t *v, void *tmp)</div><div class='ctx'> {</div><div class='del'>-        struct gf_printer *gp  = tmp;</div><div class='del'>-        int                ret = 0;</div><div class='del'>-        GPPRINTF (gp, "    option %s %s\n", k, v-&gt;data);</div><div class='del'>-        return 0;</div><div class='add'>+    struct gf_printer *gp = tmp;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    GPPRINTF(gp, "    option %s %s\n", k, v-&gt;data);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        /* means, it is a failure */</div><div class='del'>-        return -1;</div><div class='add'>+    /* means, it is a failure */</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-glusterfs_graph_print (struct gf_printer *gp, glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_print(struct gf_printer *gp, glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t      *trav = NULL;</div><div class='del'>-        xlator_list_t *xch = NULL;</div><div class='del'>-        int            ret = 0;</div><div class='del'>-        ssize_t        len = 0;</div><div class='del'>-</div><div class='del'>-        if (!graph-&gt;first)</div><div class='del'>-                return 0;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    xlator_list_t *xch = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    ssize_t len = 0;</div><div class='ctx'> </div><div class='del'>-        for (trav = graph-&gt;first; trav-&gt;next; trav = trav-&gt;next);</div><div class='del'>-        for (; trav; trav = trav-&gt;prev) {</div><div class='del'>-                GPPRINTF (gp, "volume %s\n    type %s\n", trav-&gt;name,</div><div class='del'>-                          trav-&gt;type);</div><div class='add'>+    if (!graph-&gt;first)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-                ret = dict_foreach (trav-&gt;options, _print_volume_options, gp);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    for (trav = graph-&gt;first; trav-&gt;next; trav = trav-&gt;next)</div><div class='add'>+        ;</div><div class='add'>+    for (; trav; trav = trav-&gt;prev) {</div><div class='add'>+        GPPRINTF(gp, "volume %s\n    type %s\n", trav-&gt;name, trav-&gt;type);</div><div class='ctx'> </div><div class='del'>-                if (trav-&gt;children) {</div><div class='del'>-                        GPPRINTF (gp, "    subvolumes");</div><div class='add'>+        ret = dict_foreach(trav-&gt;options, _print_volume_options, gp);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                        for (xch = trav-&gt;children; xch; xch = xch-&gt;next)</div><div class='del'>-                                GPPRINTF (gp, " %s", xch-&gt;xlator-&gt;name);</div><div class='add'>+        if (trav-&gt;children) {</div><div class='add'>+            GPPRINTF(gp, "    subvolumes");</div><div class='ctx'> </div><div class='del'>-                        GPPRINTF (gp, "\n");</div><div class='del'>-                }</div><div class='add'>+            for (xch = trav-&gt;children; xch; xch = xch-&gt;next)</div><div class='add'>+                GPPRINTF(gp, " %s", xch-&gt;xlator-&gt;name);</div><div class='ctx'> </div><div class='del'>-                GPPRINTF (gp, "end-volume\n");</div><div class='del'>-                if (trav != graph-&gt;first)</div><div class='del'>-                        GPPRINTF (gp, "\n");</div><div class='add'>+            GPPRINTF(gp, "\n");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        GPPRINTF(gp, "end-volume\n");</div><div class='add'>+        if (trav != graph-&gt;first)</div><div class='add'>+            GPPRINTF(gp, "\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        len = gp-&gt;len;</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg ("graph-print", GF_LOG_ERROR, 0, LG_MSG_PRINT_FAILED,</div><div class='del'>-                        "printing failed");</div><div class='add'>+    len = gp-&gt;len;</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg("graph-print", GF_LOG_ERROR, 0, LG_MSG_PRINT_FAILED,</div><div class='add'>+               "printing failed");</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return len;</div><div class='add'>+    return len;</div><div class='ctx'> </div><div class='ctx'> #undef GPPRINTF</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_print_file (FILE *file, glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_print_file(FILE *file, glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        struct gf_printer gp = { .write = gp_write_file,</div><div class='del'>-                                 .priv  = file</div><div class='del'>-        };</div><div class='add'>+    struct gf_printer gp = {.write = gp_write_file, .priv = file};</div><div class='ctx'> </div><div class='del'>-        return glusterfs_graph_print (&amp;gp, graph);</div><div class='add'>+    return glusterfs_graph_print(&amp;gp, graph);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-glusterfs_graph_print_buf (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_print_buf(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        FILE *f = NULL;</div><div class='del'>-        struct iovec iov = {0,};</div><div class='del'>-        int len = 0;</div><div class='del'>-        char *buf = NULL;</div><div class='del'>-        struct gf_printer gp = { .write = gp_write_buf,</div><div class='del'>-                                 .priv  = &amp;iov</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        f = fopen ("/dev/null", "a");</div><div class='del'>-        if (!f) {</div><div class='del'>-                gf_msg ("graph-print", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_DIR_OP_FAILED, "cannot open /dev/null");</div><div class='del'>-</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        len = glusterfs_graph_print_file (f, graph);</div><div class='del'>-        fclose (f);</div><div class='del'>-        if (len == -1)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        buf = GF_CALLOC (1, len + 1, gf_common_mt_graph_buf);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        iov.iov_base = buf;</div><div class='del'>-        iov.iov_len  = len;</div><div class='del'>-</div><div class='del'>-        len = glusterfs_graph_print (&amp;gp, graph);</div><div class='del'>-        if (len == -1) {</div><div class='del'>-                GF_FREE (buf);</div><div class='del'>-</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return buf;</div><div class='add'>+    FILE *f = NULL;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int len = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    struct gf_printer gp = {.write = gp_write_buf, .priv = &amp;iov};</div><div class='add'>+</div><div class='add'>+    f = fopen("/dev/null", "a");</div><div class='add'>+    if (!f) {</div><div class='add'>+        gf_msg("graph-print", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+               "cannot open /dev/null");</div><div class='add'>+</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    len = glusterfs_graph_print_file(f, graph);</div><div class='add'>+    fclose(f);</div><div class='add'>+    if (len == -1)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    buf = GF_CALLOC(1, len + 1, gf_common_mt_graph_buf);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = len;</div><div class='add'>+</div><div class='add'>+    len = glusterfs_graph_print(&amp;gp, graph);</div><div class='add'>+    if (len == -1) {</div><div class='add'>+        GF_FREE(buf);</div><div class='add'>+</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c<br/>index 03ef55c5892..2a213d2c48e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/graph.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/graph.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/graph.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/graph.c</a></div><div class='hunk'>@@ -69,623 +69,611 @@ _gf_dump_details (int argc, char **argv)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_read_secure_access_file (void)</div><div class='add'>+glusterfs_read_secure_access_file(void)</div><div class='ctx'> {</div><div class='del'>-        FILE *fp = NULL;</div><div class='del'>-        char  line[100] = {0,};</div><div class='del'>-        int   cert_depth = 1;   /* Default SSL CERT DEPTH */</div><div class='del'>-        regex_t regcmpl;</div><div class='del'>-        char *key = {"^option transport.socket.ssl-cert-depth"};</div><div class='del'>-        char  keyval[50] = {0,};</div><div class='del'>-        int start = 0, end = 0, copy_len = 0;</div><div class='del'>-        regmatch_t result[1] = {{0} };</div><div class='del'>-</div><div class='del'>-        fp = fopen (SECURE_ACCESS_FILE, "r");</div><div class='del'>-        if (!fp)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Check if any line matches with key */</div><div class='del'>-        while (fgets(line, sizeof(line), fp) != NULL) {</div><div class='del'>-                if (regcomp (&amp;regcmpl, key, REG_EXTENDED)) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (!regexec (&amp;regcmpl, line, 1, result, 0)) {</div><div class='del'>-                        start = result[0].rm_so;</div><div class='del'>-                        end  = result[0].rm_eo;</div><div class='del'>-                        copy_len = end - start;</div><div class='del'>-                        gf_strncpy (keyval, line+copy_len, sizeof (keyval));</div><div class='del'>-                        if (keyval[0]) {</div><div class='del'>-                                cert_depth = atoi(keyval);</div><div class='del'>-                                if (cert_depth == 0)</div><div class='del'>-                                        cert_depth = 1; /* Default SSL CERT DEPTH */</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                regfree(&amp;regcmpl);</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    char line[100] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int cert_depth = 1; /* Default SSL CERT DEPTH */</div><div class='add'>+    regex_t regcmpl;</div><div class='add'>+    char *key = {"^option transport.socket.ssl-cert-depth"};</div><div class='add'>+    char keyval[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int start = 0, end = 0, copy_len = 0;</div><div class='add'>+    regmatch_t result[1] = {{0}};</div><div class='add'>+</div><div class='add'>+    fp = fopen(SECURE_ACCESS_FILE, "r");</div><div class='add'>+    if (!fp)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Check if any line matches with key */</div><div class='add'>+    while (fgets(line, sizeof(line), fp) != NULL) {</div><div class='add'>+        if (regcomp(&amp;regcmpl, key, REG_EXTENDED)) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        if (!regexec(&amp;regcmpl, line, 1, result, 0)) {</div><div class='add'>+            start = result[0].rm_so;</div><div class='add'>+            end = result[0].rm_eo;</div><div class='add'>+            copy_len = end - start;</div><div class='add'>+            gf_strncpy(keyval, line + copy_len, sizeof(keyval));</div><div class='add'>+            if (keyval[0]) {</div><div class='add'>+                cert_depth = atoi(keyval);</div><div class='add'>+                if (cert_depth == 0)</div><div class='add'>+                    cert_depth = 1; /* Default SSL CERT DEPTH */</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        regfree(&amp;regcmpl);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='del'>-        return cert_depth;</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='add'>+    return cert_depth;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_xlator_link (xlator_t *pxl, xlator_t *cxl)</div><div class='add'>+glusterfs_xlator_link(xlator_t *pxl, xlator_t *cxl)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *xlchild = NULL;</div><div class='del'>-        xlator_list_t   *xlparent = NULL;</div><div class='del'>-        xlator_list_t  **tmp = NULL;</div><div class='add'>+    xlator_list_t *xlchild = NULL;</div><div class='add'>+    xlator_list_t *xlparent = NULL;</div><div class='add'>+    xlator_list_t **tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        xlparent = (void *) GF_CALLOC (1, sizeof (*xlparent),</div><div class='del'>-                                       gf_common_mt_xlator_list_t);</div><div class='del'>-        if (!xlparent)</div><div class='del'>-                return -1;</div><div class='add'>+    xlparent = (void *)GF_CALLOC(1, sizeof(*xlparent),</div><div class='add'>+                                 gf_common_mt_xlator_list_t);</div><div class='add'>+    if (!xlparent)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xlchild = (void *) GF_CALLOC (1, sizeof (*xlchild),</div><div class='del'>-                                      gf_common_mt_xlator_list_t);</div><div class='del'>-        if (!xlchild) {</div><div class='del'>-                GF_FREE (xlparent);</div><div class='add'>+    xlchild = (void *)GF_CALLOC(1, sizeof(*xlchild),</div><div class='add'>+                                gf_common_mt_xlator_list_t);</div><div class='add'>+    if (!xlchild) {</div><div class='add'>+        GF_FREE(xlparent);</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xlparent-&gt;xlator = pxl;</div><div class='del'>-        for (tmp = &amp;cxl-&gt;parents; *tmp; tmp = &amp;(*tmp)-&gt;next);</div><div class='del'>-        *tmp = xlparent;</div><div class='add'>+    xlparent-&gt;xlator = pxl;</div><div class='add'>+    for (tmp = &amp;cxl-&gt;parents; *tmp; tmp = &amp;(*tmp)-&gt;next)</div><div class='add'>+        ;</div><div class='add'>+    *tmp = xlparent;</div><div class='ctx'> </div><div class='del'>-        xlchild-&gt;xlator = cxl;</div><div class='del'>-        for (tmp = &amp;pxl-&gt;children; *tmp; tmp = &amp;(*tmp)-&gt;next);</div><div class='del'>-        *tmp = xlchild;</div><div class='add'>+    xlchild-&gt;xlator = cxl;</div><div class='add'>+    for (tmp = &amp;pxl-&gt;children; *tmp; tmp = &amp;(*tmp)-&gt;next)</div><div class='add'>+        ;</div><div class='add'>+    *tmp = xlchild;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-glusterfs_graph_set_first (glusterfs_graph_t *graph, xlator_t *xl)</div><div class='add'>+glusterfs_graph_set_first(glusterfs_graph_t *graph, xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        xl-&gt;next = graph-&gt;first;</div><div class='del'>-        if (graph-&gt;first)</div><div class='del'>-                ((xlator_t *)graph-&gt;first)-&gt;prev = xl;</div><div class='del'>-        graph-&gt;first = xl;</div><div class='add'>+    xl-&gt;next = graph-&gt;first;</div><div class='add'>+    if (graph-&gt;first)</div><div class='add'>+        ((xlator_t *)graph-&gt;first)-&gt;prev = xl;</div><div class='add'>+    graph-&gt;first = xl;</div><div class='ctx'> </div><div class='del'>-        graph-&gt;xl_count++;</div><div class='del'>-        xl-&gt;xl_id = graph-&gt;xl_count;</div><div class='add'>+    graph-&gt;xl_count++;</div><div class='add'>+    xl-&gt;xl_id = graph-&gt;xl_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_insert (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx,</div><div class='del'>-                        const char *type, const char *name,</div><div class='del'>-                        gf_boolean_t autoload)</div><div class='add'>+glusterfs_graph_insert(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx,</div><div class='add'>+                       const char *type, const char *name,</div><div class='add'>+                       gf_boolean_t autoload)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *ixl = NULL;</div><div class='add'>+    xlator_t *ixl = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!ctx-&gt;master) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR,</div><div class='del'>-                        "volume \"%s\" can be added from command line only "</div><div class='del'>-                        "on client side", type);</div><div class='add'>+    if (!ctx-&gt;master) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR,</div><div class='add'>+               "volume \"%s\" can be added from command line only "</div><div class='add'>+               "on client side",</div><div class='add'>+               type);</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ixl = GF_CALLOC (1, sizeof (*ixl), gf_common_mt_xlator_t);</div><div class='del'>-        if (!ixl)</div><div class='del'>-                return -1;</div><div class='add'>+    ixl = GF_CALLOC(1, sizeof(*ixl), gf_common_mt_xlator_t);</div><div class='add'>+    if (!ixl)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ixl-&gt;ctx      = ctx;</div><div class='del'>-        ixl-&gt;graph    = graph;</div><div class='del'>-        ixl-&gt;options  = get_new_dict ();</div><div class='del'>-        if (!ixl-&gt;options)</div><div class='del'>-                goto err;</div><div class='add'>+    ixl-&gt;ctx = ctx;</div><div class='add'>+    ixl-&gt;graph = graph;</div><div class='add'>+    ixl-&gt;options = get_new_dict();</div><div class='add'>+    if (!ixl-&gt;options)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ixl-&gt;name  = gf_strdup (name);</div><div class='del'>-        if (!ixl-&gt;name)</div><div class='del'>-                goto err;</div><div class='add'>+    ixl-&gt;name = gf_strdup(name);</div><div class='add'>+    if (!ixl-&gt;name)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ixl-&gt;is_autoloaded = autoload;</div><div class='add'>+    ixl-&gt;is_autoloaded = autoload;</div><div class='ctx'> </div><div class='del'>-        if (xlator_set_type (ixl, type) == -1) {</div><div class='del'>-                gf_msg ("glusterfs", GF_LOG_ERROR, 0, LG_MSG_INIT_FAILED,</div><div class='del'>-                        "%s (%s) initialization failed",</div><div class='del'>-                        name, type);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (xlator_set_type(ixl, type) == -1) {</div><div class='add'>+        gf_msg("glusterfs", GF_LOG_ERROR, 0, LG_MSG_INIT_FAILED,</div><div class='add'>+               "%s (%s) initialization failed", name, type);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (glusterfs_xlator_link (ixl, graph-&gt;top) == -1)</div><div class='del'>-                goto err;</div><div class='del'>-        glusterfs_graph_set_first (graph, ixl);</div><div class='del'>-        graph-&gt;top = ixl;</div><div class='add'>+    if (glusterfs_xlator_link(ixl, graph-&gt;top) == -1)</div><div class='add'>+        goto err;</div><div class='add'>+    glusterfs_graph_set_first(graph, ixl);</div><div class='add'>+    graph-&gt;top = ixl;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        xlator_destroy (ixl);</div><div class='del'>-        return -1;</div><div class='add'>+    xlator_destroy(ixl);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_acl (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_graph_acl(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;acl)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!cmd_args-&gt;acl)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_insert (graph, ctx, "system/posix-acl",</div><div class='del'>-                                      "posix-acl-autoload", 1);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = glusterfs_graph_insert(graph, ctx, "system/posix-acl",</div><div class='add'>+                                 "posix-acl-autoload", 1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_worm (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_graph_worm(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;worm)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!cmd_args-&gt;worm)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_insert (graph, ctx, "features/worm",</div><div class='del'>-                                      "worm-autoload", 1);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = glusterfs_graph_insert(graph, ctx, "features/worm", "worm-autoload",</div><div class='add'>+                                 1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_meta (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_graph_meta(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	if (!ctx-&gt;master)</div><div class='del'>-		return 0;</div><div class='add'>+    if (!ctx-&gt;master)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_insert (graph, ctx, "meta",</div><div class='del'>-                                      "meta-autoload", 1);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = glusterfs_graph_insert(graph, ctx, "meta", "meta-autoload", 1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_mac_compat (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_graph_mac_compat(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (cmd_args-&gt;mac_compat == GF_OPTION_DISABLE)</div><div class='del'>-                return 0;</div><div class='add'>+    if (cmd_args-&gt;mac_compat == GF_OPTION_DISABLE)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_insert (graph, ctx, "features/mac-compat",</div><div class='del'>-                                      "mac-compat-autoload", 1);</div><div class='add'>+    ret = glusterfs_graph_insert(graph, ctx, "features/mac-compat",</div><div class='add'>+                                 "mac-compat-autoload", 1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_gfid_access (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_graph_gfid_access(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        cmd_args_t      *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        if (!cmd_args-&gt;aux_gfid_mount)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!cmd_args-&gt;aux_gfid_mount)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_insert (graph, ctx, "features/gfid-access",</div><div class='del'>-                                      "gfid-access-autoload", 1);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = glusterfs_graph_insert(graph, ctx, "features/gfid-access",</div><div class='add'>+                                 "gfid-access-autoload", 1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_add_cmdline_options (glusterfs_graph_t *graph, cmd_args_t *cmd_args)</div><div class='add'>+gf_add_cmdline_options(glusterfs_graph_t *graph, cmd_args_t *cmd_args)</div><div class='ctx'> {</div><div class='del'>-        int                      ret = 0;</div><div class='del'>-        xlator_t                *trav = NULL;</div><div class='del'>-        xlator_cmdline_option_t *cmd_option = NULL;</div><div class='del'>-</div><div class='del'>-        trav = graph-&gt;first;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                list_for_each_entry (cmd_option,</div><div class='del'>-                                     &amp;cmd_args-&gt;xlator_options, cmd_args) {</div><div class='del'>-                        if (!fnmatch (cmd_option-&gt;volume,</div><div class='del'>-                                      trav-&gt;name, FNM_NOESCAPE)) {</div><div class='del'>-                                ret = dict_set_str (trav-&gt;options,</div><div class='del'>-                                                    cmd_option-&gt;key,</div><div class='del'>-                                                    cmd_option-&gt;value);</div><div class='del'>-                                if (ret == 0) {</div><div class='del'>-                                        gf_msg (trav-&gt;name, GF_LOG_TRACE, 0,</div><div class='del'>-                                                LG_MSG_VOL_OPTION_ADD,</div><div class='del'>-                                                "adding option '%s' for "</div><div class='del'>-                                                "volume '%s' with value '%s'",</div><div class='del'>-                                                cmd_option-&gt;key, trav-&gt;name,</div><div class='del'>-                                                cmd_option-&gt;value);</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg (trav-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                -ret, LG_MSG_VOL_OPTION_ADD,</div><div class='del'>-                                                "adding option '%s' for "</div><div class='del'>-                                                "volume '%s' failed",</div><div class='del'>-                                                cmd_option-&gt;key, trav-&gt;name);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    xlator_cmdline_option_t *cmd_option = NULL;</div><div class='add'>+</div><div class='add'>+    trav = graph-&gt;first;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        list_for_each_entry(cmd_option, &amp;cmd_args-&gt;xlator_options, cmd_args)</div><div class='add'>+        {</div><div class='add'>+            if (!fnmatch(cmd_option-&gt;volume, trav-&gt;name, FNM_NOESCAPE)) {</div><div class='add'>+                ret = dict_set_str(trav-&gt;options, cmd_option-&gt;key,</div><div class='add'>+                                   cmd_option-&gt;value);</div><div class='add'>+                if (ret == 0) {</div><div class='add'>+                    gf_msg(trav-&gt;name, GF_LOG_TRACE, 0, LG_MSG_VOL_OPTION_ADD,</div><div class='add'>+                           "adding option '%s' for "</div><div class='add'>+                           "volume '%s' with value '%s'",</div><div class='add'>+                           cmd_option-&gt;key, trav-&gt;name, cmd_option-&gt;value);</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg(trav-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                           LG_MSG_VOL_OPTION_ADD,</div><div class='add'>+                           "adding option '%s' for "</div><div class='add'>+                           "volume '%s' failed",</div><div class='add'>+                           cmd_option-&gt;key, trav-&gt;name);</div><div class='ctx'>                 }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_validate_options (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_validate_options(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t           *trav = NULL;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        char               *errstr = NULL;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *errstr = NULL;</div><div class='ctx'> </div><div class='del'>-        trav = graph-&gt;first;</div><div class='add'>+    trav = graph-&gt;first;</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                if (list_empty (&amp;trav-&gt;volume_options)) {</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (list_empty(&amp;trav-&gt;volume_options)) {</div><div class='add'>+            trav = trav-&gt;next;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = xlator_options_validate (trav, trav-&gt;options, &amp;errstr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (trav-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_VALIDATION_FAILED, "validation failed: "</div><div class='del'>-                                "%s", errstr);</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+        ret = xlator_options_validate(trav, trav-&gt;options, &amp;errstr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(trav-&gt;name, GF_LOG_ERROR, 0, LG_MSG_VALIDATION_FAILED,</div><div class='add'>+                   "validation failed: "</div><div class='add'>+                   "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_init (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_init(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t           *trav = NULL;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-</div><div class='del'>-        trav = graph-&gt;first;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                ret = xlator_init (trav);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (trav-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_TRANSLATOR_INIT_FAILED,</div><div class='del'>-                                "initializing translator failed");</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    trav = graph-&gt;first;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        ret = xlator_init(trav);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(trav-&gt;name, GF_LOG_ERROR, 0, LG_MSG_TRANSLATOR_INIT_FAILED,</div><div class='add'>+                   "initializing translator failed");</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_deactivate (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_deactivate(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t           *top = NULL;</div><div class='add'>+    xlator_t *top = NULL;</div><div class='ctx'> </div><div class='del'>-        if (graph == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (graph == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        top = graph-&gt;top;</div><div class='del'>-        xlator_tree_fini (top);</div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+    top = graph-&gt;top;</div><div class='add'>+    xlator_tree_fini(top);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_log_if_unknown_option (dict_t *dict, char *key, data_t *value, void *data)</div><div class='add'>+_log_if_unknown_option(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        volume_option_t   *found = NULL;</div><div class='del'>-        xlator_t          *xl = NULL;</div><div class='add'>+    volume_option_t *found = NULL;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='ctx'> </div><div class='del'>-        xl = data;</div><div class='add'>+    xl = data;</div><div class='ctx'> </div><div class='del'>-        found = xlator_volume_option_get (xl, key);</div><div class='add'>+    found = xlator_volume_option_get(xl, key);</div><div class='ctx'> </div><div class='del'>-        if (!found) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_XLATOR_OPTION_INVALID,</div><div class='del'>-                        "option '%s' is not recognized", key);</div><div class='del'>-        }</div><div class='add'>+    if (!found) {</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_XLATOR_OPTION_INVALID,</div><div class='add'>+               "option '%s' is not recognized", key);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-_xlator_check_unknown_options (xlator_t *xl, void *data)</div><div class='add'>+_xlator_check_unknown_options(xlator_t *xl, void *data)</div><div class='ctx'> {</div><div class='del'>-        dict_foreach (xl-&gt;options, _log_if_unknown_option, xl);</div><div class='add'>+    dict_foreach(xl-&gt;options, _log_if_unknown_option, xl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_unknown_options (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_unknown_options(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        xlator_foreach (graph-&gt;first, _xlator_check_unknown_options, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_foreach(graph-&gt;first, _xlator_check_unknown_options, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fill_uuid (char *uuid, int size)</div><div class='add'>+fill_uuid(char *uuid, int size)</div><div class='ctx'> {</div><div class='del'>-        char           hostname[256] = {0,};</div><div class='del'>-        struct timeval tv = {0,};</div><div class='del'>-        char           now_str[64];</div><div class='del'>-</div><div class='del'>-        if (gettimeofday (&amp;tv, NULL) == -1) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_GETTIMEOFDAY_FAILED, "gettimeofday: "</div><div class='del'>-                        "failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (gethostname (hostname, 256) == -1) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_GETHOSTNAME_FAILED, "gethostname: "</div><div class='del'>-                        "failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (now_str, sizeof now_str, tv.tv_sec, gf_timefmt_dirent);</div><div class='del'>-        snprintf (uuid, size, "%s-%d-%s:%"GF_PRI_SUSECONDS,</div><div class='del'>-                  hostname, getpid(), now_str, tv.tv_usec);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    char hostname[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char now_str[64];</div><div class='add'>+</div><div class='add'>+    if (gettimeofday(&amp;tv, NULL) == -1) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, errno, LG_MSG_GETTIMEOFDAY_FAILED,</div><div class='add'>+               "gettimeofday: "</div><div class='add'>+               "failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gethostname(hostname, 256) == -1) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, errno, LG_MSG_GETHOSTNAME_FAILED,</div><div class='add'>+               "gethostname: "</div><div class='add'>+               "failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(now_str, sizeof now_str, tv.tv_sec, gf_timefmt_dirent);</div><div class='add'>+    snprintf(uuid, size, "%s-%d-%s:%" GF_PRI_SUSECONDS, hostname, getpid(),</div><div class='add'>+             now_str, tv.tv_usec);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-glusterfs_graph_settop (glusterfs_graph_t *graph, char *volume_name,</div><div class='del'>-                        gf_boolean_t exact_match)</div><div class='add'>+glusterfs_graph_settop(glusterfs_graph_t *graph, char *volume_name,</div><div class='add'>+                       gf_boolean_t exact_match)</div><div class='ctx'> {</div><div class='del'>-        int         ret  = -1;</div><div class='del'>-        xlator_t   *trav = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!volume_name || !exact_match) {</div><div class='del'>-                graph-&gt;top = graph-&gt;first;</div><div class='add'>+    if (!volume_name || !exact_match) {</div><div class='add'>+        graph-&gt;top = graph-&gt;first;</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='add'>+            if (strcmp(trav-&gt;name, volume_name) == 0) {</div><div class='add'>+                graph-&gt;top = trav;</div><div class='ctx'>                 ret = 0;</div><div class='del'>-        } else {</div><div class='del'>-                for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='del'>-                        if (strcmp (trav-&gt;name, volume_name) == 0) {</div><div class='del'>-                                graph-&gt;top = trav;</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_parent_up (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_parent_up(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *trav = NULL;</div><div class='del'>-        int       ret = -1;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        trav = graph-&gt;first;</div><div class='add'>+    trav = graph-&gt;first;</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                if (!xlator_has_parent (trav)) {</div><div class='del'>-                        ret = xlator_notify (trav, GF_EVENT_PARENT_UP, trav);</div><div class='del'>-                }</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (!xlator_has_parent(trav)) {</div><div class='add'>+            ret = xlator_notify(trav, GF_EVENT_PARENT_UP, trav);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_prepare (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx,</div><div class='del'>-                         char *volume_name)</div><div class='add'>+glusterfs_graph_prepare(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx,</div><div class='add'>+                        char *volume_name)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *trav = NULL;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-</div><div class='del'>-        /* XXX: CHECKSUM */</div><div class='del'>-</div><div class='del'>-        /* XXX: attach to -n volname */</div><div class='del'>-        /* A '/' in the volume name suggests brick multiplexing is used, find</div><div class='del'>-         * the top of the (sub)graph. The volname MUST match the subvol in this</div><div class='del'>-         * case. In other cases (like for gfapi) the default top for the</div><div class='del'>-         * (sub)graph is ok. */</div><div class='del'>-        if (!volume_name) {</div><div class='del'>-                /* GlusterD does not pass a volume_name */</div><div class='del'>-                ret = glusterfs_graph_settop (graph, volume_name, _gf_false);</div><div class='del'>-        } else if (strncmp (volume_name, "/snaps/", 7) == 0) {</div><div class='del'>-                /* snap shots have their top xlator named like "/snaps/..."  */</div><div class='del'>-                ret = glusterfs_graph_settop (graph, volume_name,</div><div class='del'>-                                              _gf_false);</div><div class='del'>-        } else if (volume_name[0] == '/') {</div><div class='del'>-                /* brick multiplexing passes the brick path */</div><div class='del'>-                ret = glusterfs_graph_settop (graph, volume_name,</div><div class='del'>-                                              _gf_true);</div><div class='del'>-        } else {</div><div class='del'>-                ret = glusterfs_graph_settop (graph, volume_name,</div><div class='del'>-                                              _gf_false);</div><div class='del'>-        }</div><div class='del'>-        if (!ret) {</div><div class='del'>-                goto ok;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='del'>-                "glusterfs graph settop failed");</div><div class='del'>-        return -1;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* XXX: CHECKSUM */</div><div class='add'>+</div><div class='add'>+    /* XXX: attach to -n volname */</div><div class='add'>+    /* A '/' in the volume name suggests brick multiplexing is used, find</div><div class='add'>+     * the top of the (sub)graph. The volname MUST match the subvol in this</div><div class='add'>+     * case. In other cases (like for gfapi) the default top for the</div><div class='add'>+     * (sub)graph is ok. */</div><div class='add'>+    if (!volume_name) {</div><div class='add'>+        /* GlusterD does not pass a volume_name */</div><div class='add'>+        ret = glusterfs_graph_settop(graph, volume_name, _gf_false);</div><div class='add'>+    } else if (strncmp(volume_name, "/snaps/", 7) == 0) {</div><div class='add'>+        /* snap shots have their top xlator named like "/snaps/..."  */</div><div class='add'>+        ret = glusterfs_graph_settop(graph, volume_name, _gf_false);</div><div class='add'>+    } else if (volume_name[0] == '/') {</div><div class='add'>+        /* brick multiplexing passes the brick path */</div><div class='add'>+        ret = glusterfs_graph_settop(graph, volume_name, _gf_true);</div><div class='add'>+    } else {</div><div class='add'>+        ret = glusterfs_graph_settop(graph, volume_name, _gf_false);</div><div class='add'>+    }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        goto ok;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='add'>+           "glusterfs graph settop failed");</div><div class='add'>+    return -1;</div><div class='ctx'> ok:</div><div class='ctx'> </div><div class='del'>-        /* XXX: WORM VOLUME */</div><div class='del'>-        ret = glusterfs_graph_worm (graph, ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='del'>-                        "glusterfs graph worm failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        ret = glusterfs_graph_acl (graph, ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='del'>-                        "glusterfs graph ACL failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: WORM VOLUME */</div><div class='add'>+    ret = glusterfs_graph_worm(graph, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='add'>+               "glusterfs graph worm failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = glusterfs_graph_acl(graph, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='add'>+               "glusterfs graph ACL failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* XXX: MAC COMPAT */</div><div class='del'>-        ret = glusterfs_graph_mac_compat (graph, ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='del'>-                        "glusterfs graph mac compat failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: MAC COMPAT */</div><div class='add'>+    ret = glusterfs_graph_mac_compat(graph, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='add'>+               "glusterfs graph mac compat failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* XXX: gfid-access */</div><div class='del'>-        ret = glusterfs_graph_gfid_access (graph, ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='del'>-                        "glusterfs graph 'gfid-access' failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: gfid-access */</div><div class='add'>+    ret = glusterfs_graph_gfid_access(graph, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='add'>+               "glusterfs graph 'gfid-access' failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* XXX: topmost xlator */</div><div class='del'>-	ret = glusterfs_graph_meta (graph, ctx);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='del'>-			"glusterfs graph meta failed");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    /* XXX: topmost xlator */</div><div class='add'>+    ret = glusterfs_graph_meta(graph, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_ERROR,</div><div class='add'>+               "glusterfs graph meta failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* XXX: this-&gt;ctx setting */</div><div class='del'>-        for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='del'>-                trav-&gt;ctx = ctx;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: this-&gt;ctx setting */</div><div class='add'>+    for (trav = graph-&gt;first; trav; trav = trav-&gt;next) {</div><div class='add'>+        trav-&gt;ctx = ctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* XXX: DOB setting */</div><div class='del'>-        gettimeofday (&amp;graph-&gt;dob, NULL);</div><div class='add'>+    /* XXX: DOB setting */</div><div class='add'>+    gettimeofday(&amp;graph-&gt;dob, NULL);</div><div class='ctx'> </div><div class='del'>-        fill_uuid (graph-&gt;graph_uuid, 128);</div><div class='add'>+    fill_uuid(graph-&gt;graph_uuid, 128);</div><div class='ctx'> </div><div class='del'>-        graph-&gt;id = ctx-&gt;graph_id++;</div><div class='add'>+    graph-&gt;id = ctx-&gt;graph_id++;</div><div class='ctx'> </div><div class='del'>-        /* XXX: --xlator-option additions */</div><div class='del'>-        gf_add_cmdline_options (graph, &amp;ctx-&gt;cmd_args);</div><div class='add'>+    /* XXX: --xlator-option additions */</div><div class='add'>+    gf_add_cmdline_options(graph, &amp;ctx-&gt;cmd_args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-xlator_t *glusterfs_root(glusterfs_graph_t *graph)</div><div class='add'>+static xlator_t *</div><div class='add'>+glusterfs_root(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        return graph-&gt;first;</div><div class='add'>+    return graph-&gt;first;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-int glusterfs_is_leaf(xlator_t *xl)</div><div class='add'>+static int</div><div class='add'>+glusterfs_is_leaf(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!xl-&gt;children)</div><div class='del'>-                ret = 1;</div><div class='add'>+    if (!xl-&gt;children)</div><div class='add'>+        ret = 1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-uint32_t glusterfs_count_leaves(xlator_t *xl)</div><div class='add'>+static uint32_t</div><div class='add'>+glusterfs_count_leaves(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int n = 0;</div><div class='del'>-        xlator_list_t *list = NULL;</div><div class='add'>+    int n = 0;</div><div class='add'>+    xlator_list_t *list = NULL;</div><div class='ctx'> </div><div class='del'>-        if (glusterfs_is_leaf(xl))</div><div class='del'>-                n = 1;</div><div class='del'>-        else</div><div class='del'>-                for (list = xl-&gt;children; list; list = list-&gt;next)</div><div class='del'>-                        n += glusterfs_count_leaves(list-&gt;xlator);</div><div class='add'>+    if (glusterfs_is_leaf(xl))</div><div class='add'>+        n = 1;</div><div class='add'>+    else</div><div class='add'>+        for (list = xl-&gt;children; list; list = list-&gt;next)</div><div class='add'>+            n += glusterfs_count_leaves(list-&gt;xlator);</div><div class='ctx'> </div><div class='del'>-        return n;</div><div class='add'>+    return n;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int glusterfs_get_leaf_count(glusterfs_graph_t *graph)</div><div class='add'>+int</div><div class='add'>+glusterfs_get_leaf_count(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        return graph-&gt;leaf_count;</div><div class='add'>+    return graph-&gt;leaf_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-int _glusterfs_leaf_position(xlator_t *tgt, int *id, xlator_t *xl)</div><div class='add'>+static int</div><div class='add'>+_glusterfs_leaf_position(xlator_t *tgt, int *id, xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *list = NULL;</div><div class='del'>-        int found = 0;</div><div class='del'>-</div><div class='del'>-        if (xl == tgt)</div><div class='del'>-                found = 1;</div><div class='del'>-        else if (glusterfs_is_leaf(xl))</div><div class='del'>-                *id += 1;</div><div class='del'>-        else</div><div class='del'>-                for (list = xl-&gt;children; !found &amp;&amp; list; list = list-&gt;next)</div><div class='del'>-                        found = _glusterfs_leaf_position(tgt, id, list-&gt;xlator);</div><div class='del'>-</div><div class='del'>-        return found;</div><div class='add'>+    xlator_list_t *list = NULL;</div><div class='add'>+    int found = 0;</div><div class='add'>+</div><div class='add'>+    if (xl == tgt)</div><div class='add'>+        found = 1;</div><div class='add'>+    else if (glusterfs_is_leaf(xl))</div><div class='add'>+        *id += 1;</div><div class='add'>+    else</div><div class='add'>+        for (list = xl-&gt;children; !found &amp;&amp; list; list = list-&gt;next)</div><div class='add'>+            found = _glusterfs_leaf_position(tgt, id, list-&gt;xlator);</div><div class='add'>+</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int glusterfs_leaf_position(xlator_t *tgt)</div><div class='add'>+int</div><div class='add'>+glusterfs_leaf_position(xlator_t *tgt)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *root = NULL;</div><div class='del'>-        int pos = 0;</div><div class='add'>+    xlator_t *root = NULL;</div><div class='add'>+    int pos = 0;</div><div class='ctx'> </div><div class='del'>-        root = glusterfs_root(tgt-&gt;graph);</div><div class='add'>+    root = glusterfs_root(tgt-&gt;graph);</div><div class='ctx'> </div><div class='del'>-        if (!_glusterfs_leaf_position(tgt, &amp;pos, root))</div><div class='del'>-                pos = -1;</div><div class='add'>+    if (!_glusterfs_leaf_position(tgt, &amp;pos, root))</div><div class='add'>+        pos = -1;</div><div class='ctx'> </div><div class='del'>-        return pos;</div><div class='add'>+    return pos;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> _glusterfs_reachable_leaves(xlator_t *base, xlator_t *xl, dict_t *leaves)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *list = NULL;</div><div class='del'>-        int err = 1;</div><div class='del'>-        int pos = 0;</div><div class='del'>-        char *strpos = NULL;</div><div class='add'>+    xlator_list_t *list = NULL;</div><div class='add'>+    int err = 1;</div><div class='add'>+    int pos = 0;</div><div class='add'>+    char *strpos = NULL;</div><div class='ctx'> </div><div class='del'>-        if (glusterfs_is_leaf(xl)) {</div><div class='del'>-                pos = glusterfs_leaf_position(xl);</div><div class='del'>-                if (pos &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (glusterfs_is_leaf(xl)) {</div><div class='add'>+        pos = glusterfs_leaf_position(xl);</div><div class='add'>+        if (pos &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                err = gf_asprintf(&amp;strpos, "%d", pos);</div><div class='add'>+        err = gf_asprintf(&amp;strpos, "%d", pos);</div><div class='ctx'> </div><div class='del'>-                if (err &gt;= 0) {</div><div class='del'>-                        err = dict_set_static_ptr(leaves, strpos, base);</div><div class='del'>-                        GF_FREE (strpos);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                for (err = 0, list = xl-&gt;children;</div><div class='del'>-                     !err &amp;&amp; list;</div><div class='del'>-                     list = list-&gt;next)</div><div class='del'>-                        err = _glusterfs_reachable_leaves(base, list-&gt;xlator,</div><div class='del'>-                                                          leaves);</div><div class='add'>+        if (err &gt;= 0) {</div><div class='add'>+            err = dict_set_static_ptr(leaves, strpos, base);</div><div class='add'>+            GF_FREE(strpos);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        for (err = 0, list = xl-&gt;children; !err &amp;&amp; list; list = list-&gt;next)</div><div class='add'>+            err = _glusterfs_reachable_leaves(base, list-&gt;xlator, leaves);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return err;</div><div class='add'>+    return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -703,230 +691,226 @@ out:</div><div class='ctx'> int</div><div class='ctx'> glusterfs_reachable_leaves(xlator_t *base, dict_t *leaves)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *list = NULL;</div><div class='del'>-        int err = 0;</div><div class='add'>+    xlator_list_t *list = NULL;</div><div class='add'>+    int err = 0;</div><div class='ctx'> </div><div class='del'>-        for (list = base-&gt;children; !err &amp;&amp; list; list = list-&gt;next)</div><div class='del'>-                err = _glusterfs_reachable_leaves(list-&gt;xlator,</div><div class='del'>-                                                  list-&gt;xlator, leaves);</div><div class='add'>+    for (list = base-&gt;children; !err &amp;&amp; list; list = list-&gt;next)</div><div class='add'>+        err = _glusterfs_reachable_leaves(list-&gt;xlator, list-&gt;xlator, leaves);</div><div class='ctx'> </div><div class='del'>-        return err;</div><div class='add'>+    return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_activate (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_graph_activate(glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        xlator_t *root = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *root = NULL;</div><div class='ctx'> </div><div class='del'>-        root = glusterfs_root(graph);</div><div class='add'>+    root = glusterfs_root(graph);</div><div class='ctx'> </div><div class='del'>-        graph-&gt;leaf_count = glusterfs_count_leaves(root);</div><div class='add'>+    graph-&gt;leaf_count = glusterfs_count_leaves(root);</div><div class='ctx'> </div><div class='del'>-        /* XXX: all xlator options validation */</div><div class='del'>-        ret = glusterfs_graph_validate_options (graph);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_VALIDATION_FAILED,</div><div class='del'>-                        "validate options failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* XXX: perform init () */</div><div class='del'>-        ret = glusterfs_graph_init (graph);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_INIT_FAILED,</div><div class='del'>-                        "init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: all xlator options validation */</div><div class='add'>+    ret = glusterfs_graph_validate_options(graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_VALIDATION_FAILED,</div><div class='add'>+               "validate options failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_unknown_options (graph);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_UNKNOWN_OPTIONS_FAILED, "unknown options "</div><div class='del'>-                        "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    /* XXX: perform init () */</div><div class='add'>+    ret = glusterfs_graph_init(graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_GRAPH_INIT_FAILED,</div><div class='add'>+               "init failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* XXX: log full graph (_gf_dump_details) */</div><div class='add'>+    ret = glusterfs_graph_unknown_options(graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_UNKNOWN_OPTIONS_FAILED,</div><div class='add'>+               "unknown options "</div><div class='add'>+               "failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;graph-&gt;list, &amp;ctx-&gt;graphs);</div><div class='del'>-        ctx-&gt;active = graph;</div><div class='add'>+    /* XXX: log full graph (_gf_dump_details) */</div><div class='ctx'> </div><div class='del'>-        /* XXX: attach to master and set active pointer */</div><div class='del'>-        if (ctx-&gt;master) {</div><div class='del'>-                ret = xlator_notify (ctx-&gt;master, GF_EVENT_GRAPH_NEW, graph);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("graph", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_EVENT_NOTIFY_FAILED,</div><div class='del'>-                                "graph new notification failed");</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                ((xlator_t *)ctx-&gt;master)-&gt;next = graph-&gt;top;</div><div class='del'>-        }</div><div class='add'>+    list_add(&amp;graph-&gt;list, &amp;ctx-&gt;graphs);</div><div class='add'>+    ctx-&gt;active = graph;</div><div class='ctx'> </div><div class='del'>-        /* XXX: perform parent up */</div><div class='del'>-        ret = glusterfs_graph_parent_up (graph);</div><div class='add'>+    /* XXX: attach to master and set active pointer */</div><div class='add'>+    if (ctx-&gt;master) {</div><div class='add'>+        ret = xlator_notify(ctx-&gt;master, GF_EVENT_GRAPH_NEW, graph);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg ("graph", GF_LOG_ERROR, 0, LG_MSG_EVENT_NOTIFY_FAILED,</div><div class='del'>-                        "parent up notification failed");</div><div class='del'>-                return ret;</div><div class='add'>+            gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_EVENT_NOTIFY_FAILED,</div><div class='add'>+                   "graph new notification failed");</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='add'>+        ((xlator_t *)ctx-&gt;master)-&gt;next = graph-&gt;top;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* XXX: perform parent up */</div><div class='add'>+    ret = glusterfs_graph_parent_up(graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("graph", GF_LOG_ERROR, 0, LG_MSG_EVENT_NOTIFY_FAILED,</div><div class='add'>+               "parent up notification failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_equal_rec (xlator_t *xl1, xlator_t *xl2)</div><div class='add'>+xlator_equal_rec(xlator_t *xl1, xlator_t *xl2)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *trav1 = NULL;</div><div class='del'>-        xlator_list_t *trav2 = NULL;</div><div class='del'>-        int            ret   = 0;</div><div class='add'>+    xlator_list_t *trav1 = NULL;</div><div class='add'>+    xlator_list_t *trav2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (xl1 == NULL || xl2 == NULL) {</div><div class='del'>-                gf_msg_debug ("xlator", 0, "invalid argument");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        trav1 = xl1-&gt;children;</div><div class='del'>-        trav2 = xl2-&gt;children;</div><div class='del'>-</div><div class='del'>-        while (trav1 &amp;&amp; trav2) {</div><div class='del'>-                ret = xlator_equal_rec (trav1-&gt;xlator, trav2-&gt;xlator);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg_debug ("glusterfsd-mgmt", 0, "xlators children "</div><div class='del'>-                                      "not equal");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                trav1 = trav1-&gt;next;</div><div class='del'>-                trav2 = trav2-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    if (xl1 == NULL || xl2 == NULL) {</div><div class='add'>+        gf_msg_debug("xlator", 0, "invalid argument");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (trav1 || trav2) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    trav1 = xl1-&gt;children;</div><div class='add'>+    trav2 = xl2-&gt;children;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (xl1-&gt;name, xl2-&gt;name)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    while (trav1 &amp;&amp; trav2) {</div><div class='add'>+        ret = xlator_equal_rec(trav1-&gt;xlator, trav2-&gt;xlator);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                         "xlators children "</div><div class='add'>+                         "not equal");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	/* type could have changed even if xlator names match,</div><div class='del'>-	   e.g cluster/distribute and cluster/nufa share the same</div><div class='del'>-	   xlator name</div><div class='del'>-	*/</div><div class='del'>-        if (strcmp (xl1-&gt;type, xl2-&gt;type)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-out :</div><div class='del'>-        return ret;</div><div class='add'>+        trav1 = trav1-&gt;next;</div><div class='add'>+        trav2 = trav2-&gt;next;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (trav1 || trav2) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(xl1-&gt;name, xl2-&gt;name)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* type could have changed even if xlator names match,</div><div class='add'>+       e.g cluster/distribute and cluster/nufa share the same</div><div class='add'>+       xlator name</div><div class='add'>+    */</div><div class='add'>+    if (strcmp(xl1-&gt;type, xl2-&gt;type)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-is_graph_topology_equal (glusterfs_graph_t *graph1, glusterfs_graph_t *graph2)</div><div class='add'>+is_graph_topology_equal(glusterfs_graph_t *graph1, glusterfs_graph_t *graph2)</div><div class='ctx'> {</div><div class='del'>-        xlator_t      *trav1    = NULL;</div><div class='del'>-        xlator_t      *trav2    = NULL;</div><div class='del'>-        gf_boolean_t   ret      = _gf_true;</div><div class='del'>-        xlator_list_t *ltrav;</div><div class='del'>-</div><div class='del'>-        trav1 = graph1-&gt;first;</div><div class='del'>-        trav2 = graph2-&gt;first;</div><div class='del'>-</div><div class='del'>-        if (strcmp (trav2-&gt;type, "protocol/server") == 0) {</div><div class='del'>-                trav2 = trav2-&gt;children-&gt;xlator;</div><div class='del'>-                for (ltrav = trav1-&gt;children; ltrav; ltrav = ltrav-&gt;next) {</div><div class='del'>-                        trav1 = ltrav-&gt;xlator;</div><div class='del'>-                        if (!trav1-&gt;cleanup_starting &amp;&amp; !strcmp (trav1-&gt;name, trav2-&gt;name)) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (!ltrav) {</div><div class='del'>-                        return _gf_false;</div><div class='del'>-                }</div><div class='add'>+    xlator_t *trav1 = NULL;</div><div class='add'>+    xlator_t *trav2 = NULL;</div><div class='add'>+    gf_boolean_t ret = _gf_true;</div><div class='add'>+    xlator_list_t *ltrav;</div><div class='add'>+</div><div class='add'>+    trav1 = graph1-&gt;first;</div><div class='add'>+    trav2 = graph2-&gt;first;</div><div class='add'>+</div><div class='add'>+    if (strcmp(trav2-&gt;type, "protocol/server") == 0) {</div><div class='add'>+        trav2 = trav2-&gt;children-&gt;xlator;</div><div class='add'>+        for (ltrav = trav1-&gt;children; ltrav; ltrav = ltrav-&gt;next) {</div><div class='add'>+            trav1 = ltrav-&gt;xlator;</div><div class='add'>+            if (!trav1-&gt;cleanup_starting &amp;&amp; !strcmp(trav1-&gt;name, trav2-&gt;name)) {</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (!ltrav) {</div><div class='add'>+            return _gf_false;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xlator_equal_rec (trav1, trav2);</div><div class='add'>+    ret = xlator_equal_rec(trav1, trav2);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug ("glusterfsd-mgmt", 0, "graphs are not equal");</div><div class='del'>-                ret = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0, "graphs are not equal");</div><div class='add'>+        ret = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _gf_true;</div><div class='del'>-        gf_msg_debug ("glusterfsd-mgmt", 0, "graphs are equal");</div><div class='add'>+    ret = _gf_true;</div><div class='add'>+    gf_msg_debug("glusterfsd-mgmt", 0, "graphs are equal");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Function has 3types of return value 0, -ve , 1</div><div class='ctx'>  *   return 0          =======&gt; reconfiguration of options has succeeded</div><div class='del'>- *   return 1          =======&gt; the graph has to be reconstructed and all the xlators should be inited</div><div class='del'>- *   return -1(or -ve) =======&gt; Some Internal Error occurred during the operation</div><div class='add'>+ *   return 1          =======&gt; the graph has to be reconstructed and all the</div><div class='add'>+ * xlators should be inited return -1(or -ve) =======&gt; Some Internal Error</div><div class='add'>+ * occurred during the operation</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-glusterfs_volfile_reconfigure (FILE *newvolfile_fp, glusterfs_ctx_t *ctx)</div><div class='add'>+glusterfs_volfile_reconfigure(FILE *newvolfile_fp, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_graph_t *oldvolfile_graph = NULL;</div><div class='del'>-        glusterfs_graph_t *newvolfile_graph = NULL;</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                gf_msg ("glusterfsd-mgmt", GF_LOG_ERROR, 0, LG_MSG_CTX_NULL,</div><div class='del'>-                        "ctx is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        oldvolfile_graph = ctx-&gt;active;</div><div class='del'>-        if (!oldvolfile_graph) {</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newvolfile_graph = glusterfs_graph_construct (newvolfile_fp);</div><div class='del'>-</div><div class='del'>-        if (!newvolfile_graph) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glusterfs_graph_prepare (newvolfile_graph, ctx,</div><div class='del'>-                                 ctx-&gt;cmd_args.volume_name);</div><div class='del'>-</div><div class='del'>-        if (!is_graph_topology_equal (oldvolfile_graph,</div><div class='del'>-                                      newvolfile_graph)) {</div><div class='del'>-</div><div class='del'>-                ret = 1;</div><div class='del'>-                gf_msg_debug ("glusterfsd-mgmt", 0, "Graph topology not "</div><div class='del'>-                              "equal(should call INIT)");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("glusterfsd-mgmt", 0, "Only options have changed in the"</div><div class='del'>-                      " new graph");</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_graph_reconfigure (oldvolfile_graph,</div><div class='del'>-                                           newvolfile_graph);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug ("glusterfsd-mgmt", 0, "Could not reconfigure "</div><div class='del'>-                              "new options in old graph");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    glusterfs_graph_t *oldvolfile_graph = NULL;</div><div class='add'>+    glusterfs_graph_t *newvolfile_graph = NULL;</div><div class='add'>+</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        gf_msg("glusterfsd-mgmt", GF_LOG_ERROR, 0, LG_MSG_CTX_NULL,</div><div class='add'>+               "ctx is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    oldvolfile_graph = ctx-&gt;active;</div><div class='add'>+    if (!oldvolfile_graph) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newvolfile_graph = glusterfs_graph_construct(newvolfile_fp);</div><div class='add'>+</div><div class='add'>+    if (!newvolfile_graph) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glusterfs_graph_prepare(newvolfile_graph, ctx, ctx-&gt;cmd_args.volume_name);</div><div class='add'>+</div><div class='add'>+    if (!is_graph_topology_equal(oldvolfile_graph, newvolfile_graph)) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                     "Graph topology not "</div><div class='add'>+                     "equal(should call INIT)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                 "Only options have changed in the"</div><div class='add'>+                 " new graph");</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_graph_reconfigure(oldvolfile_graph, newvolfile_graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                     "Could not reconfigure "</div><div class='add'>+                     "new options in old graph");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (newvolfile_graph)</div><div class='del'>-                glusterfs_graph_destroy (newvolfile_graph);</div><div class='add'>+    if (newvolfile_graph)</div><div class='add'>+        glusterfs_graph_destroy(newvolfile_graph);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function need to remove. This added to support gfapi volfile</div><div class='hunk'>@@ -934,183 +918,183 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_volfile_reconfigure (int oldvollen, FILE *newvolfile_fp,</div><div class='del'>-                        glusterfs_ctx_t *ctx, const char *oldvolfile)</div><div class='add'>+gf_volfile_reconfigure(int oldvollen, FILE *newvolfile_fp, glusterfs_ctx_t *ctx,</div><div class='add'>+                       const char *oldvolfile)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_graph_t *oldvolfile_graph = NULL;</div><div class='del'>-        glusterfs_graph_t *newvolfile_graph = NULL;</div><div class='del'>-        FILE              *oldvolfile_fp    = NULL;</div><div class='del'>-        /*Since the function mkstemp() replaces XXXXXX,</div><div class='del'>-         * assigning it to a variable</div><div class='del'>-         */</div><div class='del'>-        char temp_file[]                    = "/tmp/temp_vol_file_XXXXXX";</div><div class='del'>-        gf_boolean_t      active_graph_found = _gf_true;</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int u_ret = -1;</div><div class='del'>-        int file_desc = -1;</div><div class='del'>-</div><div class='del'>-        if (!oldvollen) {</div><div class='del'>-                ret = 1; // Has to call INIT for the whole graph</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                gf_msg ("glusterfsd-mgmt", GF_LOG_ERROR, 0, LG_MSG_CTX_NULL,</div><div class='del'>-                        "ctx is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        oldvolfile_graph = ctx-&gt;active;</div><div class='del'>-        if (!oldvolfile_graph) {</div><div class='del'>-                active_graph_found = _gf_false;</div><div class='del'>-                gf_msg ("glusterfsd-mgmt", GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_ACTIVE_GRAPH_NULL,</div><div class='del'>-                        "glusterfs_ctx-&gt;active is NULL");</div><div class='add'>+    glusterfs_graph_t *oldvolfile_graph = NULL;</div><div class='add'>+    glusterfs_graph_t *newvolfile_graph = NULL;</div><div class='add'>+    FILE *oldvolfile_fp = NULL;</div><div class='add'>+    /*Since the function mkstemp() replaces XXXXXX,</div><div class='add'>+     * assigning it to a variable</div><div class='add'>+     */</div><div class='add'>+    char temp_file[] = "/tmp/temp_vol_file_XXXXXX";</div><div class='add'>+    gf_boolean_t active_graph_found = _gf_true;</div><div class='add'>+</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int u_ret = -1;</div><div class='add'>+    int file_desc = -1;</div><div class='add'>+</div><div class='add'>+    if (!oldvollen) {</div><div class='add'>+        ret = 1;  // Has to call INIT for the whole graph</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        gf_msg("glusterfsd-mgmt", GF_LOG_ERROR, 0, LG_MSG_CTX_NULL,</div><div class='add'>+               "ctx is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    oldvolfile_graph = ctx-&gt;active;</div><div class='add'>+    if (!oldvolfile_graph) {</div><div class='add'>+        active_graph_found = _gf_false;</div><div class='add'>+        gf_msg("glusterfsd-mgmt", GF_LOG_ERROR, 0, LG_MSG_ACTIVE_GRAPH_NULL,</div><div class='add'>+               "glusterfs_ctx-&gt;active is NULL");</div><div class='ctx'> </div><div class='ctx'>         /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='del'>-                file_desc = mkstemp(temp_file);</div><div class='del'>-                if (file_desc &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd-mgmt", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_TMPFILE_CREATE_FAILED, "Unable to "</div><div class='del'>-                                "create temporary volfile");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*Calling unlink so that when the file is closed or program</div><div class='del'>-                 *terminates the tempfile is deleted.</div><div class='del'>-                 */</div><div class='del'>-                u_ret = sys_unlink(temp_file);</div><div class='del'>-</div><div class='del'>-                if (u_ret &lt; 0) {</div><div class='del'>-                        gf_msg ("glusterfsd-mgmt", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_TMPFILE_DELETE_FAILED, "Temporary file"</div><div class='del'>-                                " delete failed.");</div><div class='del'>-                        sys_close (file_desc);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                oldvolfile_fp = fdopen (file_desc, "w+b");</div><div class='del'>-                if (!oldvolfile_fp)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                fwrite (oldvolfile, oldvollen, 1, oldvolfile_fp);</div><div class='del'>-                fflush (oldvolfile_fp);</div><div class='del'>-                if (ferror (oldvolfile_fp)) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                oldvolfile_graph = glusterfs_graph_construct (oldvolfile_fp);</div><div class='del'>-                if (!oldvolfile_graph)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newvolfile_graph = glusterfs_graph_construct (newvolfile_fp);</div><div class='del'>-        if (!newvolfile_graph) {</div><div class='del'>-                goto out;</div><div class='add'>+        file_desc = mkstemp(temp_file);</div><div class='add'>+        if (file_desc &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd-mgmt", GF_LOG_ERROR, errno,</div><div class='add'>+                   LG_MSG_TMPFILE_CREATE_FAILED,</div><div class='add'>+                   "Unable to "</div><div class='add'>+                   "create temporary volfile");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        glusterfs_graph_prepare (newvolfile_graph, ctx,</div><div class='del'>-                                 ctx-&gt;cmd_args.volume_name);</div><div class='del'>-</div><div class='del'>-        if (!is_graph_topology_equal (oldvolfile_graph,</div><div class='del'>-                                      newvolfile_graph)) {</div><div class='del'>-</div><div class='del'>-                ret = 1;</div><div class='del'>-                gf_msg_debug ("glusterfsd-mgmt", 0, "Graph topology not "</div><div class='del'>-                              "equal(should call INIT)");</div><div class='del'>-                goto out;</div><div class='add'>+        /*Calling unlink so that when the file is closed or program</div><div class='add'>+         *terminates the tempfile is deleted.</div><div class='add'>+         */</div><div class='add'>+        u_ret = sys_unlink(temp_file);</div><div class='add'>+</div><div class='add'>+        if (u_ret &lt; 0) {</div><div class='add'>+            gf_msg("glusterfsd-mgmt", GF_LOG_ERROR, errno,</div><div class='add'>+                   LG_MSG_TMPFILE_DELETE_FAILED,</div><div class='add'>+                   "Temporary file"</div><div class='add'>+                   " delete failed.");</div><div class='add'>+            sys_close(file_desc);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug ("glusterfsd-mgmt", 0, "Only options have changed in the"</div><div class='del'>-                      " new graph");</div><div class='add'>+        oldvolfile_fp = fdopen(file_desc, "w+b");</div><div class='add'>+        if (!oldvolfile_fp)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        /* */</div><div class='del'>-        ret = glusterfs_graph_reconfigure (oldvolfile_graph,</div><div class='del'>-                                           newvolfile_graph);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug ("glusterfsd-mgmt", 0, "Could not reconfigure "</div><div class='del'>-                              "new options in old graph");</div><div class='del'>-                goto out;</div><div class='add'>+        fwrite(oldvolfile, oldvollen, 1, oldvolfile_fp);</div><div class='add'>+        fflush(oldvolfile_fp);</div><div class='add'>+        if (ferror(oldvolfile_fp)) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        oldvolfile_graph = glusterfs_graph_construct(oldvolfile_fp);</div><div class='add'>+        if (!oldvolfile_graph)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newvolfile_graph = glusterfs_graph_construct(newvolfile_fp);</div><div class='add'>+    if (!newvolfile_graph) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glusterfs_graph_prepare(newvolfile_graph, ctx, ctx-&gt;cmd_args.volume_name);</div><div class='add'>+</div><div class='add'>+    if (!is_graph_topology_equal(oldvolfile_graph, newvolfile_graph)) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                     "Graph topology not "</div><div class='add'>+                     "equal(should call INIT)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                 "Only options have changed in the"</div><div class='add'>+                 " new graph");</div><div class='add'>+</div><div class='add'>+    /* */</div><div class='add'>+    ret = glusterfs_graph_reconfigure(oldvolfile_graph, newvolfile_graph);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug("glusterfsd-mgmt", 0,</div><div class='add'>+                     "Could not reconfigure "</div><div class='add'>+                     "new options in old graph");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (oldvolfile_fp)</div><div class='del'>-                fclose (oldvolfile_fp);</div><div class='del'>-</div><div class='del'>-        /*  Do not simply destroy the old graph here. If the oldgraph</div><div class='del'>-            is constructed here in this function itself instead of getting</div><div class='del'>-            it from ctx-&gt;active (which happens only of ctx-&gt;active is NULL),</div><div class='del'>-            then destroy the old graph. If some i/o is still happening in</div><div class='del'>-            the old graph and the old graph is obtained from ctx-&gt;active,</div><div class='del'>-            then destroying the graph will cause problems.</div><div class='del'>-        */</div><div class='del'>-        if (!active_graph_found &amp;&amp; oldvolfile_graph)</div><div class='del'>-                glusterfs_graph_destroy (oldvolfile_graph);</div><div class='del'>-        if (newvolfile_graph)</div><div class='del'>-                glusterfs_graph_destroy (newvolfile_graph);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (oldvolfile_fp)</div><div class='add'>+        fclose(oldvolfile_fp);</div><div class='add'>+</div><div class='add'>+    /*  Do not simply destroy the old graph here. If the oldgraph</div><div class='add'>+        is constructed here in this function itself instead of getting</div><div class='add'>+        it from ctx-&gt;active (which happens only of ctx-&gt;active is NULL),</div><div class='add'>+        then destroy the old graph. If some i/o is still happening in</div><div class='add'>+        the old graph and the old graph is obtained from ctx-&gt;active,</div><div class='add'>+        then destroying the graph will cause problems.</div><div class='add'>+    */</div><div class='add'>+    if (!active_graph_found &amp;&amp; oldvolfile_graph)</div><div class='add'>+        glusterfs_graph_destroy(oldvolfile_graph);</div><div class='add'>+    if (newvolfile_graph)</div><div class='add'>+        glusterfs_graph_destroy(newvolfile_graph);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_reconfigure (glusterfs_graph_t *oldgraph,</div><div class='del'>-                             glusterfs_graph_t *newgraph)</div><div class='add'>+glusterfs_graph_reconfigure(glusterfs_graph_t *oldgraph,</div><div class='add'>+                            glusterfs_graph_t *newgraph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *old_xl   = NULL;</div><div class='del'>-        xlator_t        *new_xl   = NULL;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (oldgraph);</div><div class='del'>-        GF_ASSERT (newgraph);</div><div class='del'>-</div><div class='del'>-        old_xl   = oldgraph-&gt;first;</div><div class='del'>-        while (old_xl-&gt;is_autoloaded) {</div><div class='del'>-                old_xl = old_xl-&gt;children-&gt;xlator;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        new_xl   = newgraph-&gt;first;</div><div class='del'>-        while (new_xl-&gt;is_autoloaded) {</div><div class='del'>-                new_xl = new_xl-&gt;children-&gt;xlator;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (old_xl-&gt;type, "protocol/server") != 0) {</div><div class='del'>-                return xlator_tree_reconfigure (old_xl, new_xl);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Some options still need to be handled by the server translator. */</div><div class='del'>-        if (old_xl-&gt;reconfigure) {</div><div class='del'>-                old_xl-&gt;reconfigure (old_xl, new_xl-&gt;options);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) copy_opts_to_child (new_xl, FIRST_CHILD (new_xl), "*auth*");</div><div class='del'>-        new_xl = FIRST_CHILD (new_xl);</div><div class='del'>-</div><div class='del'>-        for (trav = old_xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                if (!trav-&gt;xlator-&gt;cleanup_starting &amp;&amp; !strcmp (trav-&gt;xlator-&gt;name, new_xl-&gt;name)) {</div><div class='del'>-                        return xlator_tree_reconfigure (trav-&gt;xlator, new_xl);</div><div class='del'>-                }</div><div class='add'>+    xlator_t *old_xl = NULL;</div><div class='add'>+    xlator_t *new_xl = NULL;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(oldgraph);</div><div class='add'>+    GF_ASSERT(newgraph);</div><div class='add'>+</div><div class='add'>+    old_xl = oldgraph-&gt;first;</div><div class='add'>+    while (old_xl-&gt;is_autoloaded) {</div><div class='add'>+        old_xl = old_xl-&gt;children-&gt;xlator;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    new_xl = newgraph-&gt;first;</div><div class='add'>+    while (new_xl-&gt;is_autoloaded) {</div><div class='add'>+        new_xl = new_xl-&gt;children-&gt;xlator;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(old_xl-&gt;type, "protocol/server") != 0) {</div><div class='add'>+        return xlator_tree_reconfigure(old_xl, new_xl);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Some options still need to be handled by the server translator. */</div><div class='add'>+    if (old_xl-&gt;reconfigure) {</div><div class='add'>+        old_xl-&gt;reconfigure(old_xl, new_xl-&gt;options);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)copy_opts_to_child(new_xl, FIRST_CHILD(new_xl), "*auth*");</div><div class='add'>+    new_xl = FIRST_CHILD(new_xl);</div><div class='add'>+</div><div class='add'>+    for (trav = old_xl-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        if (!trav-&gt;xlator-&gt;cleanup_starting &amp;&amp;</div><div class='add'>+            !strcmp(trav-&gt;xlator-&gt;name, new_xl-&gt;name)) {</div><div class='add'>+            return xlator_tree_reconfigure(trav-&gt;xlator, new_xl);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_destroy_residual (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_destroy_residual(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (graph == NULL)</div><div class='del'>-                return ret;</div><div class='add'>+    if (graph == NULL)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_tree_free_memacct (graph-&gt;first);</div><div class='add'>+    ret = xlator_tree_free_memacct(graph-&gt;first);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;graph-&gt;list);</div><div class='del'>-        GF_FREE (graph);</div><div class='add'>+    list_del_init(&amp;graph-&gt;list);</div><div class='add'>+    GF_FREE(graph);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function destroys all the xlator members except for the</div><div class='hunk'>@@ -1136,137 +1120,139 @@ glusterfs_graph_destroy_residual (glusterfs_graph_t *graph)</div><div class='ctx'>  *   object itself.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_destroy (glusterfs_graph_t *graph)</div><div class='add'>+glusterfs_graph_destroy(glusterfs_graph_t *graph)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("graph", graph, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("graph", graph, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_tree_free_members (graph-&gt;first);</div><div class='add'>+    ret = xlator_tree_free_members(graph-&gt;first);</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_graph_destroy_residual (graph);</div><div class='add'>+    ret = glusterfs_graph_destroy_residual(graph);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path,</div><div class='del'>-                        glusterfs_graph_t **newgraph)</div><div class='add'>+glusterfs_graph_attach(glusterfs_graph_t *orig_graph, char *path,</div><div class='add'>+                       glusterfs_graph_t **newgraph)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this   = THIS;</div><div class='del'>-        FILE                    *fp;</div><div class='del'>-        glusterfs_graph_t       *graph;</div><div class='del'>-        xlator_t                *xl;</div><div class='del'>-        char                    *volfile_id                        = NULL;</div><div class='del'>-        char                    *volfile_content                   = NULL;</div><div class='del'>-        struct stat              stbuf                             = {0,};</div><div class='del'>-        size_t                   file_len                          = -1;</div><div class='del'>-        gf_volfile_t            *volfile_obj                       = NULL;</div><div class='del'>-        int                      ret                               = -1;</div><div class='del'>-        char                     sha256_hash[SHA256_DIGEST_LENGTH] = {0, };</div><div class='del'>-</div><div class='del'>-        if (!orig_graph) {</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (path, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "Unable to stat %s (%s)",</div><div class='del'>-                        path, strerror (errno));</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        file_len = stbuf.st_size;</div><div class='del'>-        volfile_content = GF_MALLOC (file_len+1, gf_common_mt_char);</div><div class='del'>-        if (!volfile_content)</div><div class='del'>-                return -ENOMEM;</div><div class='del'>-</div><div class='del'>-        fp = fopen (path, "r");</div><div class='del'>-        if (!fp) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "oops, %s disappeared on us", path);</div><div class='del'>-                GF_FREE (volfile_content);</div><div class='del'>-                return -EIO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fread (volfile_content, sizeof (char), file_len, fp);</div><div class='del'>-        if (ret == file_len) {</div><div class='del'>-              glusterfs_compute_sha256 ((const unsigned char *) volfile_content,</div><div class='del'>-                                         file_len, sha256_hash);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "read failed on path %s. File size=%"GF_PRI_SIZET</div><div class='del'>-                        "read size=%d", path, file_len, ret);</div><div class='del'>-                GF_FREE (volfile_content);</div><div class='del'>-                fclose (fp);</div><div class='del'>-                return -EIO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (volfile_content);</div><div class='del'>-</div><div class='del'>-        graph = glusterfs_graph_construct (fp);</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    FILE *fp;</div><div class='add'>+    glusterfs_graph_t *graph;</div><div class='add'>+    xlator_t *xl;</div><div class='add'>+    char *volfile_id = NULL;</div><div class='add'>+    char *volfile_content = NULL;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t file_len = -1;</div><div class='add'>+    gf_volfile_t *volfile_obj = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char sha256_hash[SHA256_DIGEST_LENGTH] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (!orig_graph) {</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(path, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "Unable to stat %s (%s)", path,</div><div class='add'>+               strerror(errno));</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    file_len = stbuf.st_size;</div><div class='add'>+    volfile_content = GF_MALLOC(file_len + 1, gf_common_mt_char);</div><div class='add'>+    if (!volfile_content)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+</div><div class='add'>+    fp = fopen(path, "r");</div><div class='add'>+    if (!fp) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "oops, %s disappeared on us", path);</div><div class='add'>+        GF_FREE(volfile_content);</div><div class='add'>+        return -EIO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fread(volfile_content, sizeof(char), file_len, fp);</div><div class='add'>+    if (ret == file_len) {</div><div class='add'>+        glusterfs_compute_sha256((const unsigned char *)volfile_content,</div><div class='add'>+                                 file_len, sha256_hash);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "read failed on path %s. File size=%" GF_PRI_SIZET</div><div class='add'>+               "read size=%d",</div><div class='add'>+               path, file_len, ret);</div><div class='add'>+        GF_FREE(volfile_content);</div><div class='ctx'>         fclose(fp);</div><div class='del'>-        if (!graph) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "could not create graph from %s", path);</div><div class='del'>-                return -EIO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * If there's a server translator on top, we want whatever's below</div><div class='del'>-         * that.</div><div class='del'>-         */</div><div class='del'>-        xl = graph-&gt;first;</div><div class='del'>-        if (strcmp(xl-&gt;type, "protocol/server") == 0) {</div><div class='del'>-                (void) copy_opts_to_child (xl, FIRST_CHILD (xl), "*auth*");</div><div class='del'>-                xl = FIRST_CHILD(xl);</div><div class='del'>-        }</div><div class='del'>-        graph-&gt;first = xl;</div><div class='del'>-        *newgraph = graph;</div><div class='del'>-</div><div class='del'>-        volfile_id = strstr (path, "/snaps/");</div><div class='del'>-        if (!volfile_id) {</div><div class='del'>-                volfile_id = rindex (path, '/');</div><div class='del'>-                if (volfile_id) {</div><div class='del'>-                        ++volfile_id;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        return -EIO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(volfile_content);</div><div class='add'>+</div><div class='add'>+    graph = glusterfs_graph_construct(fp);</div><div class='add'>+    fclose(fp);</div><div class='add'>+    if (!graph) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "could not create graph from %s",</div><div class='add'>+               path);</div><div class='add'>+        return -EIO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If there's a server translator on top, we want whatever's below</div><div class='add'>+     * that.</div><div class='add'>+     */</div><div class='add'>+    xl = graph-&gt;first;</div><div class='add'>+    if (strcmp(xl-&gt;type, "protocol/server") == 0) {</div><div class='add'>+        (void)copy_opts_to_child(xl, FIRST_CHILD(xl), "*auth*");</div><div class='add'>+        xl = FIRST_CHILD(xl);</div><div class='add'>+    }</div><div class='add'>+    graph-&gt;first = xl;</div><div class='add'>+    *newgraph = graph;</div><div class='add'>+</div><div class='add'>+    volfile_id = strstr(path, "/snaps/");</div><div class='add'>+    if (!volfile_id) {</div><div class='add'>+        volfile_id = rindex(path, '/');</div><div class='ctx'>         if (volfile_id) {</div><div class='del'>-                xl-&gt;volfile_id = gf_strdup (volfile_id);</div><div class='del'>-                /* There's a stray ".vol" at the end. */</div><div class='del'>-                xl-&gt;volfile_id[strlen(xl-&gt;volfile_id)-4] = '\0';</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO memory leaks everywhere need to free graph in case of error */</div><div class='del'>-        if (glusterfs_graph_prepare (graph, this-&gt;ctx, xl-&gt;name)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to prepare graph for xlator %s", xl-&gt;name);</div><div class='del'>-                return -EIO;</div><div class='del'>-        } else if (glusterfs_graph_init (graph)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to initialize graph for xlator %s", xl-&gt;name);</div><div class='del'>-                return -EIO;</div><div class='del'>-        } else if (glusterfs_xlator_link (orig_graph-&gt;top, graph-&gt;top)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to link the graphs for xlator %s ", xl-&gt;name);</div><div class='del'>-                return -EIO;</div><div class='add'>+            ++volfile_id;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='add'>+    if (volfile_id) {</div><div class='add'>+        xl-&gt;volfile_id = gf_strdup(volfile_id);</div><div class='add'>+        /* There's a stray ".vol" at the end. */</div><div class='add'>+        xl-&gt;volfile_id[strlen(xl-&gt;volfile_id) - 4] = '\0';</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO memory leaks everywhere need to free graph in case of error */</div><div class='add'>+    if (glusterfs_graph_prepare(graph, this-&gt;ctx, xl-&gt;name)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to prepare graph for xlator %s", xl-&gt;name);</div><div class='add'>+        return -EIO;</div><div class='add'>+    } else if (glusterfs_graph_init(graph)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to initialize graph for xlator %s", xl-&gt;name);</div><div class='add'>+        return -EIO;</div><div class='add'>+    } else if (glusterfs_xlator_link(orig_graph-&gt;top, graph-&gt;top)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to link the graphs for xlator %s ", xl-&gt;name);</div><div class='add'>+        return -EIO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!volfile_obj) {</div><div class='add'>+        volfile_obj = GF_CALLOC(1, sizeof(gf_volfile_t), gf_common_volfile_t);</div><div class='ctx'>         if (!volfile_obj) {</div><div class='del'>-                volfile_obj = GF_CALLOC (1, sizeof (gf_volfile_t),</div><div class='del'>-                                         gf_common_volfile_t);</div><div class='del'>-                if (!volfile_obj) {</div><div class='del'>-                        return -EIO;</div><div class='del'>-                }</div><div class='add'>+            return -EIO;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;volfile_obj-&gt;volfile_list);</div><div class='del'>-        snprintf (volfile_obj-&gt;vol_id, sizeof (volfile_obj-&gt;vol_id),</div><div class='del'>-                  "%s", xl-&gt;volfile_id);</div><div class='del'>-        memcpy (volfile_obj-&gt;volfile_checksum, sha256_hash,</div><div class='del'>-                 sizeof (volfile_obj-&gt;volfile_checksum));</div><div class='del'>-        list_add (&amp;volfile_obj-&gt;volfile_list, &amp;this-&gt;ctx-&gt;volfile_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;volfile_obj-&gt;volfile_list);</div><div class='add'>+    snprintf(volfile_obj-&gt;vol_id, sizeof(volfile_obj-&gt;vol_id), "%s",</div><div class='add'>+             xl-&gt;volfile_id);</div><div class='add'>+    memcpy(volfile_obj-&gt;volfile_checksum, sha256_hash,</div><div class='add'>+           sizeof(volfile_obj-&gt;volfile_checksum));</div><div class='add'>+    list_add(&amp;volfile_obj-&gt;volfile_list, &amp;this-&gt;ctx-&gt;volfile_list);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/hashfn.c b/libglusterfs/src/hashfn.c<br/>index 62f7ab87800..5c4561f1ee8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/hashfn.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/hashfn.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/hashfn.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/hashfn.c</a></div><div class='hunk'>@@ -13,21 +13,20 @@</div><div class='ctx'> </div><div class='ctx'> #include "hashfn.h"</div><div class='ctx'> </div><div class='del'>-#define get16bits(d) (*((const uint16_t *) (d)))</div><div class='add'>+#define get16bits(d) (*((const uint16_t *)(d)))</div><div class='ctx'> </div><div class='ctx'> #define DM_DELTA 0x9E3779B9</div><div class='del'>-#define DM_FULLROUNDS 10        /* 32 is overkill, 16 is strong crypto */</div><div class='del'>-#define DM_PARTROUNDS 6         /* 6 gets complete mixing */</div><div class='del'>-</div><div class='add'>+#define DM_FULLROUNDS 10 /* 32 is overkill, 16 is strong crypto */</div><div class='add'>+#define DM_PARTROUNDS 6  /* 6 gets complete mixing */</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-ReallySimpleHash (char *path, int len)</div><div class='add'>+ReallySimpleHash(char *path, int len)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        hash = 0;</div><div class='del'>-        for (;len &gt; 0; len--)</div><div class='del'>-                hash ^= (char)path[len];</div><div class='add'>+    uint32_t hash = 0;</div><div class='add'>+    for (; len &gt; 0; len--)</div><div class='add'>+        hash ^= (char)path[len];</div><div class='ctx'> </div><div class='del'>-        return hash;</div><div class='add'>+    return hash;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -37,146 +36,145 @@ ReallySimpleHash (char *path, int len)</div><div class='ctx'> </div><div class='ctx'> /* In any case make sure, you return 1 */</div><div class='ctx'> </div><div class='del'>-uint32_t SuperFastHash (const char * data, int32_t len) {</div><div class='del'>-        uint32_t hash = len, tmp;</div><div class='del'>-        int32_t rem;</div><div class='del'>-</div><div class='del'>-        if (len &lt;= 1 || data == NULL) return 1;</div><div class='del'>-</div><div class='del'>-        rem = len &amp; 3;</div><div class='del'>-        len &gt;&gt;= 2;</div><div class='del'>-</div><div class='del'>-        /* Main loop */</div><div class='del'>-        for (;len &gt; 0; len--) {</div><div class='del'>-                hash  += get16bits (data);</div><div class='del'>-                tmp    = (get16bits (data+2) &lt;&lt; 11) ^ hash;</div><div class='del'>-                hash   = (hash &lt;&lt; 16) ^ tmp;</div><div class='del'>-                data  += 2*sizeof (uint16_t);</div><div class='del'>-                hash  += hash &gt;&gt; 11;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Handle end cases */</div><div class='del'>-        switch (rem) {</div><div class='del'>-        case 3: hash += get16bits (data);</div><div class='del'>-                hash ^= hash &lt;&lt; 16;</div><div class='del'>-                hash ^= data[sizeof (uint16_t)] &lt;&lt; 18;</div><div class='del'>-                hash += hash &gt;&gt; 11;</div><div class='del'>-                break;</div><div class='del'>-        case 2: hash += get16bits (data);</div><div class='del'>-                hash ^= hash &lt;&lt; 11;</div><div class='del'>-                hash += hash &gt;&gt; 17;</div><div class='del'>-                break;</div><div class='del'>-        case 1: hash += *data;</div><div class='del'>-                hash ^= hash &lt;&lt; 10;</div><div class='del'>-                hash += hash &gt;&gt; 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Force "avalanching" of final 127 bits */</div><div class='del'>-        hash ^= hash &lt;&lt; 3;</div><div class='del'>-        hash += hash &gt;&gt; 5;</div><div class='del'>-        hash ^= hash &lt;&lt; 4;</div><div class='del'>-        hash += hash &gt;&gt; 17;</div><div class='del'>-        hash ^= hash &lt;&lt; 25;</div><div class='del'>-        hash += hash &gt;&gt; 6;</div><div class='del'>-</div><div class='del'>-        return hash;</div><div class='add'>+uint32_t</div><div class='add'>+SuperFastHash(const char *data, int32_t len)</div><div class='add'>+{</div><div class='add'>+    uint32_t hash = len, tmp;</div><div class='add'>+    int32_t rem;</div><div class='add'>+</div><div class='add'>+    if (len &lt;= 1 || data == NULL)</div><div class='add'>+        return 1;</div><div class='add'>+</div><div class='add'>+    rem = len &amp; 3;</div><div class='add'>+    len &gt;&gt;= 2;</div><div class='add'>+</div><div class='add'>+    /* Main loop */</div><div class='add'>+    for (; len &gt; 0; len--) {</div><div class='add'>+        hash += get16bits(data);</div><div class='add'>+        tmp = (get16bits(data + 2) &lt;&lt; 11) ^ hash;</div><div class='add'>+        hash = (hash &lt;&lt; 16) ^ tmp;</div><div class='add'>+        data += 2 * sizeof(uint16_t);</div><div class='add'>+        hash += hash &gt;&gt; 11;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Handle end cases */</div><div class='add'>+    switch (rem) {</div><div class='add'>+        case 3:</div><div class='add'>+            hash += get16bits(data);</div><div class='add'>+            hash ^= hash &lt;&lt; 16;</div><div class='add'>+            hash ^= data[sizeof(uint16_t)] &lt;&lt; 18;</div><div class='add'>+            hash += hash &gt;&gt; 11;</div><div class='add'>+            break;</div><div class='add'>+        case 2:</div><div class='add'>+            hash += get16bits(data);</div><div class='add'>+            hash ^= hash &lt;&lt; 11;</div><div class='add'>+            hash += hash &gt;&gt; 17;</div><div class='add'>+            break;</div><div class='add'>+        case 1:</div><div class='add'>+            hash += *data;</div><div class='add'>+            hash ^= hash &lt;&lt; 10;</div><div class='add'>+            hash += hash &gt;&gt; 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Force "avalanching" of final 127 bits */</div><div class='add'>+    hash ^= hash &lt;&lt; 3;</div><div class='add'>+    hash += hash &gt;&gt; 5;</div><div class='add'>+    hash ^= hash &lt;&lt; 4;</div><div class='add'>+    hash += hash &gt;&gt; 17;</div><div class='add'>+    hash ^= hash &lt;&lt; 25;</div><div class='add'>+    hash += hash &gt;&gt; 6;</div><div class='add'>+</div><div class='add'>+    return hash;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Davies-Meyer hashing function implementation</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-dm_round (int rounds, uint32_t *array, uint32_t *h0, uint32_t *h1)</div><div class='add'>+dm_round(int rounds, uint32_t *array, uint32_t *h0, uint32_t *h1)</div><div class='ctx'> {</div><div class='del'>-        uint32_t sum = 0;</div><div class='del'>-        int      n = 0;</div><div class='del'>-        uint32_t b0  = 0;</div><div class='del'>-        uint32_t b1  = 0;</div><div class='del'>-</div><div class='del'>-        b0 = *h0;</div><div class='del'>-        b1 = *h1;</div><div class='del'>-</div><div class='del'>-        n = rounds;</div><div class='del'>-</div><div class='del'>-        do {</div><div class='del'>-                sum += DM_DELTA;</div><div class='del'>-                b0  += ((b1 &lt;&lt; 4) + array[0])</div><div class='del'>-                        ^ (b1 + sum)</div><div class='del'>-                        ^ ((b1 &gt;&gt; 5) + array[1]);</div><div class='del'>-                b1  += ((b0 &lt;&lt; 4) + array[2])</div><div class='del'>-                        ^ (b0 + sum)</div><div class='del'>-                        ^ ((b0 &gt;&gt; 5) + array[3]);</div><div class='del'>-        } while (--n);</div><div class='del'>-</div><div class='del'>-        *h0 += b0;</div><div class='del'>-        *h1 += b1;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    uint32_t sum = 0;</div><div class='add'>+    int n = 0;</div><div class='add'>+    uint32_t b0 = 0;</div><div class='add'>+    uint32_t b1 = 0;</div><div class='add'>+</div><div class='add'>+    b0 = *h0;</div><div class='add'>+    b1 = *h1;</div><div class='add'>+</div><div class='add'>+    n = rounds;</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        sum += DM_DELTA;</div><div class='add'>+        b0 += ((b1 &lt;&lt; 4) + array[0]) ^ (b1 + sum) ^ ((b1 &gt;&gt; 5) + array[1]);</div><div class='add'>+        b1 += ((b0 &lt;&lt; 4) + array[2]) ^ (b0 + sum) ^ ((b0 &gt;&gt; 5) + array[3]);</div><div class='add'>+    } while (--n);</div><div class='ctx'> </div><div class='add'>+    *h0 += b0;</div><div class='add'>+    *h1 += b1;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-__pad (int len)</div><div class='add'>+__pad(int len)</div><div class='ctx'> {</div><div class='del'>-        uint32_t pad = 0;</div><div class='add'>+    uint32_t pad = 0;</div><div class='ctx'> </div><div class='del'>-        pad = (uint32_t) len | ((uint32_t) len &lt;&lt; 8);</div><div class='del'>-        pad |= pad &lt;&lt; 16;</div><div class='add'>+    pad = (uint32_t)len | ((uint32_t)len &lt;&lt; 8);</div><div class='add'>+    pad |= pad &lt;&lt; 16;</div><div class='ctx'> </div><div class='del'>-        return pad;</div><div class='add'>+    return pad;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-gf_dm_hashfn (const char *msg, int len)</div><div class='add'>+gf_dm_hashfn(const char *msg, int len)</div><div class='ctx'> {</div><div class='del'>-        uint32_t  h0 = 0x9464a485;</div><div class='del'>-        uint32_t  h1 = 0x542e1a94;</div><div class='del'>-        uint32_t  array[4];</div><div class='del'>-        uint32_t  pad = 0;</div><div class='del'>-        int       i = 0;</div><div class='del'>-        int       j = 0;</div><div class='del'>-        int       full_quads = 0;</div><div class='del'>-        int       full_words = 0;</div><div class='del'>-        int       full_bytes = 0;</div><div class='del'>-        uint32_t *intmsg = NULL;</div><div class='del'>-        int       word = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        intmsg = (uint32_t *) msg;</div><div class='del'>-        pad = __pad (len);</div><div class='del'>-</div><div class='del'>-        full_bytes   = len;</div><div class='del'>-        full_words   = len / 4;</div><div class='del'>-        full_quads   = len / 16;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; full_quads; i++) {</div><div class='del'>-                for (j = 0; j &lt; 4; j++) {</div><div class='del'>-                        word     = *intmsg;</div><div class='del'>-                        array[j] = word;</div><div class='del'>-                        intmsg++;</div><div class='del'>-                        full_words--;</div><div class='del'>-                        full_bytes -= 4;</div><div class='del'>-                }</div><div class='del'>-                dm_round (DM_PARTROUNDS, &amp;array[0], &amp;h0, &amp;h1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    uint32_t h0 = 0x9464a485;</div><div class='add'>+    uint32_t h1 = 0x542e1a94;</div><div class='add'>+    uint32_t array[4];</div><div class='add'>+    uint32_t pad = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int full_quads = 0;</div><div class='add'>+    int full_words = 0;</div><div class='add'>+    int full_bytes = 0;</div><div class='add'>+    uint32_t *intmsg = NULL;</div><div class='add'>+    int word = 0;</div><div class='add'>+</div><div class='add'>+    intmsg = (uint32_t *)msg;</div><div class='add'>+    pad = __pad(len);</div><div class='add'>+</div><div class='add'>+    full_bytes = len;</div><div class='add'>+    full_words = len / 4;</div><div class='add'>+    full_quads = len / 16;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; full_quads; i++) {</div><div class='ctx'>         for (j = 0; j &lt; 4; j++) {</div><div class='del'>-                if (full_words) {</div><div class='del'>-                        word     = *intmsg;</div><div class='del'>-                        array[j] = word;</div><div class='del'>-                        intmsg++;</div><div class='del'>-                        full_words--;</div><div class='del'>-                        full_bytes -= 4;</div><div class='del'>-                } else {</div><div class='del'>-                        array[j] = pad;</div><div class='del'>-                        while (full_bytes) {</div><div class='del'>-                                array[j] &lt;&lt;= 8;</div><div class='del'>-                                array[j] |= msg[len - full_bytes];</div><div class='del'>-                                full_bytes--;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            word = *intmsg;</div><div class='add'>+            array[j] = word;</div><div class='add'>+            intmsg++;</div><div class='add'>+            full_words--;</div><div class='add'>+            full_bytes -= 4;</div><div class='add'>+        }</div><div class='add'>+        dm_round(DM_PARTROUNDS, &amp;array[0], &amp;h0, &amp;h1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (j = 0; j &lt; 4; j++) {</div><div class='add'>+        if (full_words) {</div><div class='add'>+            word = *intmsg;</div><div class='add'>+            array[j] = word;</div><div class='add'>+            intmsg++;</div><div class='add'>+            full_words--;</div><div class='add'>+            full_bytes -= 4;</div><div class='add'>+        } else {</div><div class='add'>+            array[j] = pad;</div><div class='add'>+            while (full_bytes) {</div><div class='add'>+                array[j] &lt;&lt;= 8;</div><div class='add'>+                array[j] |= msg[len - full_bytes];</div><div class='add'>+                full_bytes--;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        dm_round (DM_FULLROUNDS, &amp;array[0], &amp;h0, &amp;h1);</div><div class='add'>+    }</div><div class='add'>+    dm_round(DM_FULLROUNDS, &amp;array[0], &amp;h0, &amp;h1);</div><div class='ctx'> </div><div class='del'>-        return h0 ^ h1;</div><div class='add'>+    return h0 ^ h1;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c<br/>index 70909bf596f..ee85c0e793c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/inode.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/inode.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/inode.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/inode.c</a></div><div class='hunk'>@@ -23,676 +23,651 @@</div><div class='ctx'>    move latest accessed dentry to list_head of inode</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-#define INODE_DUMP_LIST(head, key_buf, key_prefix, list_type)           \</div><div class='del'>-        {                                                               \</div><div class='del'>-                int i = 1;                                              \</div><div class='del'>-                inode_t *inode = NULL;                                  \</div><div class='del'>-                list_for_each_entry (inode, head, list) {               \</div><div class='del'>-                        gf_proc_dump_build_key(key_buf, key_prefix,     \</div><div class='del'>-                                               "%s.%d",list_type, i++); \</div><div class='del'>-                        gf_proc_dump_add_section(key_buf);              \</div><div class='del'>-                        inode_dump(inode, key);                         \</div><div class='del'>-                }                                                       \</div><div class='del'>-        }</div><div class='add'>+#define INODE_DUMP_LIST(head, key_buf, key_prefix, list_type)                  \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        int i = 1;                                                             \</div><div class='add'>+        inode_t *inode = NULL;                                                 \</div><div class='add'>+        list_for_each_entry(inode, head, list)                                 \</div><div class='add'>+        {                                                                      \</div><div class='add'>+            gf_proc_dump_build_key(key_buf, key_prefix, "%s.%d", list_type,    \</div><div class='add'>+                                   i++);                                       \</div><div class='add'>+            gf_proc_dump_add_section(key_buf);                                 \</div><div class='add'>+            inode_dump(inode, key);                                            \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_unref (inode_t *inode);</div><div class='add'>+__inode_unref(inode_t *inode);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-inode_table_prune (inode_table_t *table);</div><div class='add'>+inode_table_prune(inode_table_t *table);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fd_dump (struct list_head *head, char *prefix);</div><div class='add'>+fd_dump(struct list_head *head, char *prefix);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-hash_dentry (inode_t *parent, const char *name, int mod)</div><div class='add'>+hash_dentry(inode_t *parent, const char *name, int mod)</div><div class='ctx'> {</div><div class='del'>-        int hash = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int hash = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        hash = *name;</div><div class='del'>-        if (hash) {</div><div class='del'>-                for (name += 1; *name != '\0'; name++) {</div><div class='del'>-                        hash = (hash &lt;&lt; 5) - hash + *name;</div><div class='del'>-                }</div><div class='add'>+    hash = *name;</div><div class='add'>+    if (hash) {</div><div class='add'>+        for (name += 1; *name != '\0'; name++) {</div><div class='add'>+            hash = (hash &lt;&lt; 5) - hash + *name;</div><div class='ctx'>         }</div><div class='del'>-        ret = (hash + (unsigned long)parent) % mod;</div><div class='add'>+    }</div><div class='add'>+    ret = (hash + (unsigned long)parent) % mod;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-hash_gfid (uuid_t uuid, int mod)</div><div class='add'>+hash_gfid(uuid_t uuid, int mod)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = uuid[15] + (uuid[14] &lt;&lt; 8);</div><div class='add'>+    ret = uuid[15] + (uuid[14] &lt;&lt; 8);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__dentry_hash (dentry_t *dentry)</div><div class='add'>+__dentry_hash(dentry_t *dentry)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t   *table = NULL;</div><div class='del'>-        int              hash = 0;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    int hash = 0;</div><div class='ctx'> </div><div class='del'>-        if (!dentry) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!dentry) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='add'>+                         "dentry not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = dentry-&gt;inode-&gt;table;</div><div class='del'>-        hash = hash_dentry (dentry-&gt;parent, dentry-&gt;name,</div><div class='del'>-                            table-&gt;hashsize);</div><div class='add'>+    table = dentry-&gt;inode-&gt;table;</div><div class='add'>+    hash = hash_dentry(dentry-&gt;parent, dentry-&gt;name, table-&gt;hashsize);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;dentry-&gt;hash);</div><div class='del'>-        list_add (&amp;dentry-&gt;hash, &amp;table-&gt;name_hash[hash]);</div><div class='add'>+    list_del_init(&amp;dentry-&gt;hash);</div><div class='add'>+    list_add(&amp;dentry-&gt;hash, &amp;table-&gt;name_hash[hash]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_dentry_hashed (dentry_t *dentry)</div><div class='add'>+__is_dentry_hashed(dentry_t *dentry)</div><div class='ctx'> {</div><div class='del'>-        if (!dentry) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!dentry) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='add'>+                         "dentry not found");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return !list_empty (&amp;dentry-&gt;hash);</div><div class='add'>+    return !list_empty(&amp;dentry-&gt;hash);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__dentry_unhash (dentry_t *dentry)</div><div class='add'>+__dentry_unhash(dentry_t *dentry)</div><div class='ctx'> {</div><div class='del'>-        if (!dentry) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!dentry) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='add'>+                         "dentry not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;dentry-&gt;hash);</div><div class='add'>+    list_del_init(&amp;dentry-&gt;hash);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__dentry_unset (dentry_t *dentry)</div><div class='add'>+__dentry_unset(dentry_t *dentry)</div><div class='ctx'> {</div><div class='del'>-        if (!dentry) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!dentry) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='add'>+                         "dentry not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __dentry_unhash (dentry);</div><div class='add'>+    __dentry_unhash(dentry);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;dentry-&gt;inode_list);</div><div class='add'>+    list_del_init(&amp;dentry-&gt;inode_list);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (dentry-&gt;name);</div><div class='del'>-        dentry-&gt;name = NULL;</div><div class='add'>+    GF_FREE(dentry-&gt;name);</div><div class='add'>+    dentry-&gt;name = NULL;</div><div class='ctx'> </div><div class='del'>-        if (dentry-&gt;parent) {</div><div class='del'>-                __inode_unref (dentry-&gt;parent);</div><div class='del'>-                dentry-&gt;parent = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (dentry-&gt;parent) {</div><div class='add'>+        __inode_unref(dentry-&gt;parent);</div><div class='add'>+        dentry-&gt;parent = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mem_put (dentry);</div><div class='add'>+    mem_put(dentry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__foreach_ancestor_dentry (dentry_t *dentry,</div><div class='del'>-                           int (per_dentry_fn) (dentry_t *dentry,</div><div class='del'>-                                                void *data),</div><div class='del'>-                           void *data)</div><div class='del'>-{</div><div class='del'>-        inode_t  *parent = NULL;</div><div class='del'>-        dentry_t *each = NULL;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-</div><div class='del'>-        if (!dentry) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = per_dentry_fn (dentry, data);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_PER_DENTRY_FAILED, "per dentry fn returned %d",</div><div class='del'>-                        ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        parent = dentry-&gt;parent;</div><div class='del'>-        if (!parent) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_PARENT_DENTRY_NOT_FOUND,</div><div class='del'>-                        "parent not found");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__foreach_ancestor_dentry(dentry_t *dentry,</div><div class='add'>+                          int(per_dentry_fn)(dentry_t *dentry, void *data),</div><div class='add'>+                          void *data)</div><div class='add'>+{</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    dentry_t *each = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (each, &amp;parent-&gt;dentry_list, inode_list) {</div><div class='del'>-                ret = __foreach_ancestor_dentry (each, per_dentry_fn, data);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!dentry) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='add'>+                         "dentry not found");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = per_dentry_fn(dentry, data);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_PER_DENTRY_FAILED,</div><div class='add'>+               "per dentry fn returned %d", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent = dentry-&gt;parent;</div><div class='add'>+    if (!parent) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_PARENT_DENTRY_NOT_FOUND,</div><div class='add'>+               "parent not found");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(each, &amp;parent-&gt;dentry_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        ret = __foreach_ancestor_dentry(each, per_dentry_fn, data);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__check_cycle (dentry_t *a_dentry, void *data)</div><div class='add'>+__check_cycle(dentry_t *a_dentry, void *data)</div><div class='ctx'> {</div><div class='del'>-        inode_t *link_inode = NULL;</div><div class='add'>+    inode_t *link_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        link_inode = data;</div><div class='add'>+    link_inode = data;</div><div class='ctx'> </div><div class='del'>-        if (a_dentry-&gt;parent == link_inode)</div><div class='del'>-                return 1;</div><div class='add'>+    if (a_dentry-&gt;parent == link_inode)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_dentry_cyclic (dentry_t *dentry)</div><div class='add'>+__is_dentry_cyclic(dentry_t *dentry)</div><div class='ctx'> {</div><div class='del'>-        int       ret = 0;</div><div class='del'>-        inode_t  *inode = NULL;</div><div class='del'>-        char     *name = "&lt;nul&gt;";</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    char *name = "&lt;nul&gt;";</div><div class='ctx'> </div><div class='del'>-        ret = __foreach_ancestor_dentry (dentry, __check_cycle,</div><div class='del'>-                                         dentry-&gt;inode);</div><div class='del'>-        if (ret) {</div><div class='del'>-                inode = dentry-&gt;inode;</div><div class='add'>+    ret = __foreach_ancestor_dentry(dentry, __check_cycle, dentry-&gt;inode);</div><div class='add'>+    if (ret) {</div><div class='add'>+        inode = dentry-&gt;inode;</div><div class='ctx'> </div><div class='del'>-                if (dentry-&gt;name)</div><div class='del'>-                        name = dentry-&gt;name;</div><div class='add'>+        if (dentry-&gt;name)</div><div class='add'>+            name = dentry-&gt;name;</div><div class='ctx'> </div><div class='del'>-                gf_msg (dentry-&gt;inode-&gt;table-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                        LG_MSG_DENTRY_CYCLIC_LOOP, "detected cyclic loop "</div><div class='del'>-                        "formation during inode linkage. inode (%s) linking "</div><div class='del'>-                        "under itself as %s", uuid_utoa (inode-&gt;gfid), name);</div><div class='del'>-        }</div><div class='add'>+        gf_msg(dentry-&gt;inode-&gt;table-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='add'>+               LG_MSG_DENTRY_CYCLIC_LOOP,</div><div class='add'>+               "detected cyclic loop "</div><div class='add'>+               "formation during inode linkage. inode (%s) linking "</div><div class='add'>+               "under itself as %s",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid), name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_unhash (inode_t *inode)</div><div class='add'>+__inode_unhash(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;inode-&gt;hash);</div><div class='add'>+    list_del_init(&amp;inode-&gt;hash);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_inode_hashed (inode_t *inode)</div><div class='add'>+__is_inode_hashed(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return !list_empty (&amp;inode-&gt;hash);</div><div class='add'>+    return !list_empty(&amp;inode-&gt;hash);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_hash (inode_t *inode)</div><div class='add'>+__inode_hash(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        int            hash = 0;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    int hash = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='del'>-        hash = hash_gfid (inode-&gt;gfid, 65536);</div><div class='add'>+    table = inode-&gt;table;</div><div class='add'>+    hash = hash_gfid(inode-&gt;gfid, 65536);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;inode-&gt;hash);</div><div class='del'>-        list_add (&amp;inode-&gt;hash, &amp;table-&gt;inode_hash[hash]);</div><div class='add'>+    list_del_init(&amp;inode-&gt;hash);</div><div class='add'>+    list_add(&amp;inode-&gt;hash, &amp;table-&gt;inode_hash[hash]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static dentry_t *</div><div class='del'>-__dentry_search_for_inode (inode_t *inode, uuid_t pargfid, const char *name)</div><div class='add'>+__dentry_search_for_inode(inode_t *inode, uuid_t pargfid, const char *name)</div><div class='ctx'> {</div><div class='del'>-        dentry_t *dentry = NULL;</div><div class='del'>-        dentry_t *tmp = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    dentry_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !name) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "inode || name not found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!inode || !name) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "inode || name not found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* earlier, just the ino was sent, which could have been 0, now</div><div class='del'>-           we deal with gfid, and if sent gfid is null or 0, no need to</div><div class='del'>-           continue with the check */</div><div class='del'>-        if (!pargfid || gf_uuid_is_null (pargfid))</div><div class='del'>-                return NULL;</div><div class='add'>+    /* earlier, just the ino was sent, which could have been 0, now</div><div class='add'>+       we deal with gfid, and if sent gfid is null or 0, no need to</div><div class='add'>+       continue with the check */</div><div class='add'>+    if (!pargfid || gf_uuid_is_null(pargfid))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (tmp, &amp;inode-&gt;dentry_list, inode_list) {</div><div class='del'>-                if ((gf_uuid_compare (tmp-&gt;parent-&gt;gfid, pargfid) == 0) &amp;&amp;</div><div class='del'>-                    !strcmp (tmp-&gt;name, name)) {</div><div class='del'>-                        dentry = tmp;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(tmp, &amp;inode-&gt;dentry_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if ((gf_uuid_compare(tmp-&gt;parent-&gt;gfid, pargfid) == 0) &amp;&amp;</div><div class='add'>+            !strcmp(tmp-&gt;name, name)) {</div><div class='add'>+            dentry = tmp;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dentry;</div><div class='add'>+    return dentry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_ctx_free (inode_t *inode)</div><div class='add'>+__inode_ctx_free(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int          index = 0;</div><div class='del'>-        xlator_t    *xl = NULL;</div><div class='del'>-        xlator_t    *old_THIS = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!inode-&gt;_ctx) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_CTX_NULL,</div><div class='del'>-                        "_ctx not found");</div><div class='del'>-                goto noctx;</div><div class='del'>-        }</div><div class='add'>+    if (!inode-&gt;_ctx) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_CTX_NULL,</div><div class='add'>+               "_ctx not found");</div><div class='add'>+        goto noctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; inode-&gt;table-&gt;xl-&gt;graph-&gt;xl_count; index++) {</div><div class='del'>-                if (inode-&gt;_ctx[index].value1 || inode-&gt;_ctx[index].value2) {</div><div class='del'>-                        xl = (xlator_t *)(long)inode-&gt;_ctx[index].xl_key;</div><div class='del'>-                        old_THIS = THIS;</div><div class='del'>-                        THIS = xl;</div><div class='del'>-                        if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;forget)</div><div class='del'>-                                xl-&gt;cbks-&gt;forget (xl, inode);</div><div class='del'>-                        THIS = old_THIS;</div><div class='del'>-                }</div><div class='add'>+    for (index = 0; index &lt; inode-&gt;table-&gt;xl-&gt;graph-&gt;xl_count; index++) {</div><div class='add'>+        if (inode-&gt;_ctx[index].value1 || inode-&gt;_ctx[index].value2) {</div><div class='add'>+            xl = (xlator_t *)(long)inode-&gt;_ctx[index].xl_key;</div><div class='add'>+            old_THIS = THIS;</div><div class='add'>+            THIS = xl;</div><div class='add'>+            if (!xl-&gt;call_cleanup &amp;&amp; xl-&gt;cbks-&gt;forget)</div><div class='add'>+                xl-&gt;cbks-&gt;forget(xl, inode);</div><div class='add'>+            THIS = old_THIS;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (inode-&gt;_ctx);</div><div class='del'>-        inode-&gt;_ctx = NULL;</div><div class='add'>+    GF_FREE(inode-&gt;_ctx);</div><div class='add'>+    inode-&gt;_ctx = NULL;</div><div class='ctx'> </div><div class='ctx'> noctx:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__inode_destroy (inode_t *inode)</div><div class='add'>+__inode_destroy(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __inode_ctx_free (inode);</div><div class='add'>+    __inode_ctx_free(inode);</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;inode-&gt;lock);</div><div class='del'>-        //  memset (inode, 0xb, sizeof (*inode));</div><div class='del'>-        mem_put (inode);</div><div class='add'>+    LOCK_DESTROY(&amp;inode-&gt;lock);</div><div class='add'>+    //  memset (inode, 0xb, sizeof (*inode));</div><div class='add'>+    mem_put(inode);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_ctx_merge (fd_t *fd, inode_t *inode, inode_t *linked_inode)</div><div class='add'>+inode_ctx_merge(fd_t *fd, inode_t *inode, inode_t *linked_inode)</div><div class='ctx'> {</div><div class='del'>-        int       index    = 0;</div><div class='del'>-        xlator_t *xl       = NULL;</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!fd || !inode || !linked_inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid inode");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!fd || !inode || !linked_inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid inode");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!inode-&gt;_ctx || !linked_inode-&gt;_ctx) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "invalid inode context");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode-&gt;_ctx || !linked_inode-&gt;_ctx) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid inode context");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (; index &lt; inode-&gt;table-&gt;ctxcount; index++) {</div><div class='del'>-                if (inode-&gt;_ctx[index].xl_key) {</div><div class='del'>-                        xl = (xlator_t *)(long) inode-&gt;_ctx[index].xl_key;</div><div class='add'>+    for (; index &lt; inode-&gt;table-&gt;ctxcount; index++) {</div><div class='add'>+        if (inode-&gt;_ctx[index].xl_key) {</div><div class='add'>+            xl = (xlator_t *)(long)inode-&gt;_ctx[index].xl_key;</div><div class='ctx'> </div><div class='del'>-                        old_THIS = THIS;</div><div class='del'>-                        THIS = xl;</div><div class='del'>-                        if (xl-&gt;cbks-&gt;ictxmerge)</div><div class='del'>-                                xl-&gt;cbks-&gt;ictxmerge (xl, fd,</div><div class='del'>-                                                     inode, linked_inode);</div><div class='del'>-                        THIS = old_THIS;</div><div class='del'>-                }</div><div class='add'>+            old_THIS = THIS;</div><div class='add'>+            THIS = xl;</div><div class='add'>+            if (xl-&gt;cbks-&gt;ictxmerge)</div><div class='add'>+                xl-&gt;cbks-&gt;ictxmerge(xl, fd, inode, linked_inode);</div><div class='add'>+            THIS = old_THIS;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__inode_activate (inode_t *inode)</div><div class='add'>+__inode_activate(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        if (!inode)</div><div class='del'>-                return;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_move (&amp;inode-&gt;list, &amp;inode-&gt;table-&gt;active);</div><div class='del'>-        inode-&gt;table-&gt;active_size++;</div><div class='add'>+    list_move(&amp;inode-&gt;list, &amp;inode-&gt;table-&gt;active);</div><div class='add'>+    inode-&gt;table-&gt;active_size++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_passivate (inode_t *inode)</div><div class='add'>+__inode_passivate(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        dentry_t      *dentry = NULL;</div><div class='del'>-        dentry_t      *t = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    dentry_t *t = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_move_tail (&amp;inode-&gt;list, &amp;inode-&gt;table-&gt;lru);</div><div class='del'>-        inode-&gt;table-&gt;lru_size++;</div><div class='add'>+    list_move_tail(&amp;inode-&gt;list, &amp;inode-&gt;table-&gt;lru);</div><div class='add'>+    inode-&gt;table-&gt;lru_size++;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (dentry, t, &amp;inode-&gt;dentry_list, inode_list) {</div><div class='del'>-                if (!__is_dentry_hashed (dentry))</div><div class='del'>-                        __dentry_unset (dentry);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(dentry, t, &amp;inode-&gt;dentry_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if (!__is_dentry_hashed(dentry))</div><div class='add'>+            __dentry_unset(dentry);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_retire (inode_t *inode)</div><div class='add'>+__inode_retire(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        dentry_t      *dentry = NULL;</div><div class='del'>-        dentry_t      *t = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    dentry_t *t = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_move_tail (&amp;inode-&gt;list, &amp;inode-&gt;table-&gt;purge);</div><div class='del'>-        inode-&gt;table-&gt;purge_size++;</div><div class='add'>+    list_move_tail(&amp;inode-&gt;list, &amp;inode-&gt;table-&gt;purge);</div><div class='add'>+    inode-&gt;table-&gt;purge_size++;</div><div class='ctx'> </div><div class='del'>-        __inode_unhash (inode);</div><div class='add'>+    __inode_unhash(inode);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (dentry, t, &amp;inode-&gt;dentry_list, inode_list) {</div><div class='del'>-                __dentry_unset (dentry);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(dentry, t, &amp;inode-&gt;dentry_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        __dentry_unset(dentry);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__inode_get_xl_index (inode_t *inode, xlator_t *xlator)</div><div class='add'>+__inode_get_xl_index(inode_t *inode, xlator_t *xlator)</div><div class='ctx'> {</div><div class='del'>-        int set_idx = -1;</div><div class='add'>+    int set_idx = -1;</div><div class='ctx'> </div><div class='del'>-        if ((inode-&gt;_ctx[xlator-&gt;xl_id].xl_key != NULL) &amp;&amp;</div><div class='del'>-            (inode-&gt;_ctx[xlator-&gt;xl_id].xl_key != xlator))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((inode-&gt;_ctx[xlator-&gt;xl_id].xl_key != NULL) &amp;&amp;</div><div class='add'>+        (inode-&gt;_ctx[xlator-&gt;xl_id].xl_key != xlator))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        set_idx = xlator-&gt;xl_id;</div><div class='del'>-        inode-&gt;_ctx[set_idx].xl_key = xlator;</div><div class='add'>+    set_idx = xlator-&gt;xl_id;</div><div class='add'>+    inode-&gt;_ctx[set_idx].xl_key = xlator;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return set_idx;</div><div class='add'>+    return set_idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_unref (inode_t *inode)</div><div class='add'>+__inode_unref(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int       index = 0;</div><div class='del'>-        xlator_t *this  = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Root inode should always be in active list of inode table. So unrefs</div><div class='del'>-         * on root inode are no-ops.</div><div class='del'>-         */</div><div class='del'>-        if (__is_root_gfid(inode-&gt;gfid))</div><div class='del'>-                return inode;</div><div class='add'>+    /*</div><div class='add'>+     * Root inode should always be in active list of inode table. So unrefs</div><div class='add'>+     * on root inode are no-ops.</div><div class='add'>+     */</div><div class='add'>+    if (__is_root_gfid(inode-&gt;gfid))</div><div class='add'>+        return inode;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (inode-&gt;ref);</div><div class='add'>+    GF_ASSERT(inode-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        --inode-&gt;ref;</div><div class='add'>+    --inode-&gt;ref;</div><div class='ctx'> </div><div class='del'>-        index = __inode_get_xl_index (inode, this);</div><div class='del'>-        if (index &gt;= 0) {</div><div class='del'>-                inode-&gt;_ctx[index].xl_key = this;</div><div class='del'>-                inode-&gt;_ctx[index].ref--;</div><div class='del'>-        }</div><div class='add'>+    index = __inode_get_xl_index(inode, this);</div><div class='add'>+    if (index &gt;= 0) {</div><div class='add'>+        inode-&gt;_ctx[index].xl_key = this;</div><div class='add'>+        inode-&gt;_ctx[index].ref--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!inode-&gt;ref) {</div><div class='del'>-                inode-&gt;table-&gt;active_size--;</div><div class='add'>+    if (!inode-&gt;ref) {</div><div class='add'>+        inode-&gt;table-&gt;active_size--;</div><div class='ctx'> </div><div class='del'>-                if (inode-&gt;nlookup)</div><div class='del'>-                        __inode_passivate (inode);</div><div class='del'>-                else</div><div class='del'>-                        __inode_retire (inode);</div><div class='del'>-        }</div><div class='add'>+        if (inode-&gt;nlookup)</div><div class='add'>+            __inode_passivate(inode);</div><div class='add'>+        else</div><div class='add'>+            __inode_retire(inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_ref (inode_t *inode)</div><div class='del'>-{</div><div class='del'>-        int       index = 0;</div><div class='del'>-        xlator_t *this  = NULL;</div><div class='del'>-</div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        if (!inode-&gt;ref) {</div><div class='del'>-                inode-&gt;table-&gt;lru_size--;</div><div class='del'>-                __inode_activate (inode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Root inode should always be in active list of inode table. So unrefs</div><div class='del'>-         * on root inode are no-ops. If we do not allow unrefs but allow refs,</div><div class='del'>-         * it leads to refcount overflows and deleting and adding the inode</div><div class='del'>-         * to active-list, which is ugly. active_size (check __inode_activate)</div><div class='del'>-         * in inode table increases which is wrong. So just keep the ref</div><div class='del'>-         * count as 1 always</div><div class='del'>-         */</div><div class='del'>-        if (__is_root_gfid(inode-&gt;gfid) &amp;&amp; inode-&gt;ref)</div><div class='del'>-                return inode;</div><div class='add'>+__inode_ref(inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    int index = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    if (!inode-&gt;ref) {</div><div class='add'>+        inode-&gt;table-&gt;lru_size--;</div><div class='add'>+        __inode_activate(inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Root inode should always be in active list of inode table. So unrefs</div><div class='add'>+     * on root inode are no-ops. If we do not allow unrefs but allow refs,</div><div class='add'>+     * it leads to refcount overflows and deleting and adding the inode</div><div class='add'>+     * to active-list, which is ugly. active_size (check __inode_activate)</div><div class='add'>+     * in inode table increases which is wrong. So just keep the ref</div><div class='add'>+     * count as 1 always</div><div class='add'>+     */</div><div class='add'>+    if (__is_root_gfid(inode-&gt;gfid) &amp;&amp; inode-&gt;ref)</div><div class='add'>+        return inode;</div><div class='ctx'> </div><div class='del'>-        inode-&gt;ref++;</div><div class='add'>+    inode-&gt;ref++;</div><div class='ctx'> </div><div class='del'>-        index = __inode_get_xl_index (inode, this);</div><div class='del'>-        if (index &gt;= 0) {</div><div class='del'>-                inode-&gt;_ctx[index].xl_key = this;</div><div class='del'>-                inode-&gt;_ctx[index].ref++;</div><div class='del'>-        }</div><div class='add'>+    index = __inode_get_xl_index(inode, this);</div><div class='add'>+    if (index &gt;= 0) {</div><div class='add'>+        inode-&gt;_ctx[index].xl_key = this;</div><div class='add'>+        inode-&gt;_ctx[index].ref++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_unref (inode_t *inode)</div><div class='add'>+inode_unref(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                inode = __inode_unref (inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        inode = __inode_unref(inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_ref (inode_t *inode)</div><div class='add'>+inode_ref(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                inode = __inode_ref (inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        inode = __inode_ref(inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static dentry_t *</div><div class='del'>-__dentry_create (inode_t *inode, inode_t *parent, const char *name)</div><div class='add'>+__dentry_create(inode_t *inode, inode_t *parent, const char *name)</div><div class='ctx'> {</div><div class='del'>-        dentry_t      *newd = NULL;</div><div class='add'>+    dentry_t *newd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !parent || !name) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG,</div><div class='del'>-                                  "inode || parent || name not found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!inode || !parent || !name) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "inode || parent || name not found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        newd = mem_get0 (parent-&gt;table-&gt;dentry_pool);</div><div class='del'>-        if (newd == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newd = mem_get0(parent-&gt;table-&gt;dentry_pool);</div><div class='add'>+    if (newd == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;newd-&gt;inode_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newd-&gt;hash);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newd-&gt;inode_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newd-&gt;hash);</div><div class='ctx'> </div><div class='del'>-        newd-&gt;name = gf_strdup (name);</div><div class='del'>-        if (newd-&gt;name == NULL) {</div><div class='del'>-                mem_put (newd);</div><div class='del'>-                newd = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newd-&gt;name = gf_strdup(name);</div><div class='add'>+    if (newd-&gt;name == NULL) {</div><div class='add'>+        mem_put(newd);</div><div class='add'>+        newd = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                newd-&gt;parent = __inode_ref (parent);</div><div class='add'>+    if (parent)</div><div class='add'>+        newd-&gt;parent = __inode_ref(parent);</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;newd-&gt;inode_list, &amp;inode-&gt;dentry_list);</div><div class='del'>-        newd-&gt;inode = inode;</div><div class='add'>+    list_add(&amp;newd-&gt;inode_list, &amp;inode-&gt;dentry_list);</div><div class='add'>+    newd-&gt;inode = inode;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return newd;</div><div class='add'>+    return newd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_create (inode_table_t *table)</div><div class='add'>+__inode_create(inode_table_t *table)</div><div class='ctx'> {</div><div class='del'>-        inode_t  *newi = NULL;</div><div class='add'>+    inode_t *newi = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!table) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_TABLE_NOT_FOUND, "table not "</div><div class='del'>-                                  "found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!table) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INODE_TABLE_NOT_FOUND,</div><div class='add'>+                         "table not "</div><div class='add'>+                         "found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        newi = mem_get0 (table-&gt;inode_pool);</div><div class='del'>-        if (!newi) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newi = mem_get0(table-&gt;inode_pool);</div><div class='add'>+    if (!newi) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        newi-&gt;table = table;</div><div class='add'>+    newi-&gt;table = table;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;newi-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;newi-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;newi-&gt;fd_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newi-&gt;list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newi-&gt;hash);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newi-&gt;dentry_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newi-&gt;fd_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newi-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newi-&gt;hash);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newi-&gt;dentry_list);</div><div class='ctx'> </div><div class='del'>-        newi-&gt;_ctx = GF_CALLOC (1,</div><div class='del'>-                                (sizeof (struct _inode_ctx) * table-&gt;ctxcount),</div><div class='del'>-                                gf_common_mt_inode_ctx);</div><div class='del'>-        if (newi-&gt;_ctx == NULL) {</div><div class='del'>-                LOCK_DESTROY (&amp;newi-&gt;lock);</div><div class='del'>-                mem_put (newi);</div><div class='del'>-                newi = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newi-&gt;_ctx = GF_CALLOC(1, (sizeof(struct _inode_ctx) * table-&gt;ctxcount),</div><div class='add'>+                           gf_common_mt_inode_ctx);</div><div class='add'>+    if (newi-&gt;_ctx == NULL) {</div><div class='add'>+        LOCK_DESTROY(&amp;newi-&gt;lock);</div><div class='add'>+        mem_put(newi);</div><div class='add'>+        newi = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;newi-&gt;list, &amp;table-&gt;lru);</div><div class='del'>-        table-&gt;lru_size++;</div><div class='add'>+    list_add(&amp;newi-&gt;list, &amp;table-&gt;lru);</div><div class='add'>+    table-&gt;lru_size++;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return newi;</div><div class='add'>+    return newi;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_new (inode_table_t *table)</div><div class='add'>+inode_new(inode_table_t *table)</div><div class='ctx'> {</div><div class='del'>-        inode_t *inode = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!table) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_TABLE_NOT_FOUND, "inode not "</div><div class='del'>-                                  "found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!table) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INODE_TABLE_NOT_FOUND,</div><div class='add'>+                         "inode not "</div><div class='add'>+                         "found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                inode = __inode_create (table);</div><div class='del'>-                if (inode != NULL) {</div><div class='del'>-                        __inode_ref (inode);</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        inode = __inode_create(table);</div><div class='add'>+        if (inode != NULL) {</div><div class='add'>+            __inode_ref(inode);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Reduce the ref count by value 'nref'</div><div class='ctx'>  * Args:</div><div class='ctx'>  * inode - address of the inode to operate on</div><div class='hunk'>@@ -703,1240 +678,1221 @@ inode_new (inode_table_t *table)</div><div class='ctx'>  * hence to be used only in destructor functions and not otherwise.</div><div class='ctx'>  */</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_ref_reduce_by_n (inode_t *inode, uint64_t nref)</div><div class='add'>+__inode_ref_reduce_by_n(inode_t *inode, uint64_t nref)</div><div class='ctx'> {</div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (inode-&gt;ref &gt;= nref);</div><div class='add'>+    GF_ASSERT(inode-&gt;ref &gt;= nref);</div><div class='ctx'> </div><div class='del'>-        inode-&gt;ref -= nref;</div><div class='add'>+    inode-&gt;ref -= nref;</div><div class='ctx'> </div><div class='del'>-        if (!nref)</div><div class='del'>-                inode-&gt;ref = 0;</div><div class='add'>+    if (!nref)</div><div class='add'>+        inode-&gt;ref = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode-&gt;ref) {</div><div class='del'>-                inode-&gt;table-&gt;active_size--;</div><div class='add'>+    if (!inode-&gt;ref) {</div><div class='add'>+        inode-&gt;table-&gt;active_size--;</div><div class='ctx'> </div><div class='del'>-                if (inode-&gt;nlookup)</div><div class='del'>-                        __inode_passivate (inode);</div><div class='del'>-                else</div><div class='del'>-                        __inode_retire (inode);</div><div class='del'>-        }</div><div class='add'>+        if (inode-&gt;nlookup)</div><div class='add'>+            __inode_passivate(inode);</div><div class='add'>+        else</div><div class='add'>+            __inode_retire(inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_lookup (inode_t *inode)</div><div class='add'>+__inode_lookup(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        inode-&gt;nlookup++;</div><div class='add'>+    inode-&gt;nlookup++;</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_forget (inode_t *inode, uint64_t nlookup)</div><div class='add'>+__inode_forget(inode_t *inode, uint64_t nlookup)</div><div class='ctx'> {</div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (inode-&gt;nlookup &gt;= nlookup);</div><div class='add'>+    GF_ASSERT(inode-&gt;nlookup &gt;= nlookup);</div><div class='ctx'> </div><div class='del'>-        inode-&gt;nlookup -= nlookup;</div><div class='add'>+    inode-&gt;nlookup -= nlookup;</div><div class='ctx'> </div><div class='del'>-        if (!nlookup)</div><div class='del'>-                inode-&gt;nlookup = 0;</div><div class='add'>+    if (!nlookup)</div><div class='add'>+        inode-&gt;nlookup = 0;</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> dentry_t *</div><div class='del'>-__dentry_grep (inode_table_t *table, inode_t *parent, const char *name)</div><div class='add'>+__dentry_grep(inode_table_t *table, inode_t *parent, const char *name)</div><div class='ctx'> {</div><div class='del'>-        int       hash = 0;</div><div class='del'>-        dentry_t *dentry = NULL;</div><div class='del'>-        dentry_t *tmp = NULL;</div><div class='add'>+    int hash = 0;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    dentry_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!table || !name || !parent)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!table || !name || !parent)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        hash = hash_dentry (parent, name, table-&gt;hashsize);</div><div class='add'>+    hash = hash_dentry(parent, name, table-&gt;hashsize);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (tmp, &amp;table-&gt;name_hash[hash], hash) {</div><div class='del'>-                if (tmp-&gt;parent == parent &amp;&amp; !strcmp (tmp-&gt;name, name)) {</div><div class='del'>-                        dentry = tmp;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(tmp, &amp;table-&gt;name_hash[hash], hash)</div><div class='add'>+    {</div><div class='add'>+        if (tmp-&gt;parent == parent &amp;&amp; !strcmp(tmp-&gt;name, name)) {</div><div class='add'>+            dentry = tmp;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dentry;</div><div class='add'>+    return dentry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_grep (inode_table_t *table, inode_t *parent, const char *name)</div><div class='add'>+inode_grep(inode_table_t *table, inode_t *parent, const char *name)</div><div class='ctx'> {</div><div class='del'>-        inode_t   *inode = NULL;</div><div class='del'>-        dentry_t  *dentry = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!table || !parent || !name) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "table || parent || name"</div><div class='del'>-                                  " not found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!table || !parent || !name) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "table || parent || name"</div><div class='add'>+                         " not found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                dentry = __dentry_grep (table, parent, name);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        dentry = __dentry_grep(table, parent, name);</div><div class='ctx'> </div><div class='del'>-                if (dentry)</div><div class='del'>-                        inode = dentry-&gt;inode;</div><div class='add'>+        if (dentry)</div><div class='add'>+            inode = dentry-&gt;inode;</div><div class='ctx'> </div><div class='del'>-                if (inode)</div><div class='del'>-                        __inode_ref (inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+        if (inode)</div><div class='add'>+            __inode_ref(inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_resolve (inode_table_t *table, char *path)</div><div class='add'>+inode_resolve(inode_table_t *table, char *path)</div><div class='ctx'> {</div><div class='del'>-        char    *tmp   = NULL, *bname = NULL, *str = NULL, *saveptr = NULL;</div><div class='del'>-        inode_t *inode = NULL, *parent = NULL;</div><div class='del'>-</div><div class='del'>-        if ((path == NULL) || (table == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    char *tmp = NULL, *bname = NULL, *str = NULL, *saveptr = NULL;</div><div class='add'>+    inode_t *inode = NULL, *parent = NULL;</div><div class='ctx'> </div><div class='del'>-        parent = inode_ref (table-&gt;root);</div><div class='del'>-        str = tmp = gf_strdup (path);</div><div class='add'>+    if ((path == NULL) || (table == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                bname = strtok_r (str, "/", &amp;saveptr);</div><div class='del'>-                if (bname == NULL) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    parent = inode_ref(table-&gt;root);</div><div class='add'>+    str = tmp = gf_strdup(path);</div><div class='ctx'> </div><div class='del'>-                if (inode != NULL) {</div><div class='del'>-                        inode_unref (inode);</div><div class='del'>-                }</div><div class='add'>+    while (1) {</div><div class='add'>+        bname = strtok_r(str, "/", &amp;saveptr);</div><div class='add'>+        if (bname == NULL) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                inode = inode_grep (table, parent, bname);</div><div class='del'>-                if (inode == NULL) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (inode != NULL) {</div><div class='add'>+            inode_unref(inode);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (parent != NULL) {</div><div class='del'>-                        inode_unref (parent);</div><div class='del'>-                }</div><div class='add'>+        inode = inode_grep(table, parent, bname);</div><div class='add'>+        if (inode == NULL) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                parent = inode_ref (inode);</div><div class='del'>-                str = NULL;</div><div class='add'>+        if (parent != NULL) {</div><div class='add'>+            inode_unref(parent);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        inode_unref (parent);</div><div class='del'>-        GF_FREE (tmp);</div><div class='add'>+        parent = inode_ref(inode);</div><div class='add'>+        str = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode_unref(parent);</div><div class='add'>+    GF_FREE(tmp);</div><div class='ctx'> out:</div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_grep_for_gfid (inode_table_t *table, inode_t *parent, const char *name,</div><div class='del'>-                     uuid_t gfid, ia_type_t *type)</div><div class='del'>-{</div><div class='del'>-        inode_t   *inode = NULL;</div><div class='del'>-        dentry_t  *dentry = NULL;</div><div class='del'>-        int        ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!table || !parent || !name) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "table || parent || name"</div><div class='del'>-                                  " not found");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+inode_grep_for_gfid(inode_table_t *table, inode_t *parent, const char *name,</div><div class='add'>+                    uuid_t gfid, ia_type_t *type)</div><div class='add'>+{</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                dentry = __dentry_grep (table, parent, name);</div><div class='add'>+    if (!table || !parent || !name) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "table || parent || name"</div><div class='add'>+                         " not found");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (dentry)</div><div class='del'>-                        inode = dentry-&gt;inode;</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        dentry = __dentry_grep(table, parent, name);</div><div class='ctx'> </div><div class='del'>-                if (inode) {</div><div class='del'>-                        gf_uuid_copy (gfid, inode-&gt;gfid);</div><div class='del'>-                        *type = inode-&gt;ia_type;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+        if (dentry)</div><div class='add'>+            inode = dentry-&gt;inode;</div><div class='add'>+</div><div class='add'>+        if (inode) {</div><div class='add'>+            gf_uuid_copy(gfid, inode-&gt;gfid);</div><div class='add'>+            *type = inode-&gt;ia_type;</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* return 1 if gfid is of root, 0 if not */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-__is_root_gfid (uuid_t gfid)</div><div class='add'>+__is_root_gfid(uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        static uuid_t root = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};</div><div class='add'>+    static uuid_t root = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_compare (gfid, root) == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (gf_uuid_compare(gfid, root) == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-__inode_find (inode_table_t *table, uuid_t gfid)</div><div class='add'>+__inode_find(inode_table_t *table, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        inode_t   *inode = NULL;</div><div class='del'>-        inode_t   *tmp = NULL;</div><div class='del'>-        int        hash = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *tmp = NULL;</div><div class='add'>+    int hash = 0;</div><div class='ctx'> </div><div class='del'>-        if (!table) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_TABLE_NOT_FOUND, "table not "</div><div class='del'>-                                  "found");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!table) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INODE_TABLE_NOT_FOUND,</div><div class='add'>+                         "table not "</div><div class='add'>+                         "found");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (__is_root_gfid (gfid))</div><div class='del'>-                return table-&gt;root;</div><div class='add'>+    if (__is_root_gfid(gfid))</div><div class='add'>+        return table-&gt;root;</div><div class='ctx'> </div><div class='del'>-        hash = hash_gfid (gfid, 65536);</div><div class='add'>+    hash = hash_gfid(gfid, 65536);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (tmp, &amp;table-&gt;inode_hash[hash], hash) {</div><div class='del'>-                if (gf_uuid_compare (tmp-&gt;gfid, gfid) == 0) {</div><div class='del'>-                        inode = tmp;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(tmp, &amp;table-&gt;inode_hash[hash], hash)</div><div class='add'>+    {</div><div class='add'>+        if (gf_uuid_compare(tmp-&gt;gfid, gfid) == 0) {</div><div class='add'>+            inode = tmp;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_find (inode_table_t *table, uuid_t gfid)</div><div class='add'>+inode_find(inode_table_t *table, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        inode_t   *inode = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!table) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_TABLE_NOT_FOUND, "table not "</div><div class='del'>-                                  "found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!table) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         LG_MSG_INODE_TABLE_NOT_FOUND,</div><div class='add'>+                         "table not "</div><div class='add'>+                         "found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                inode = __inode_find (table, gfid);</div><div class='del'>-                if (inode)</div><div class='del'>-                        __inode_ref (inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        inode = __inode_find(table, gfid);</div><div class='add'>+        if (inode)</div><div class='add'>+            __inode_ref(inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inode_t *</div><div class='del'>-__inode_link (inode_t *inode, inode_t *parent, const char *name,</div><div class='del'>-              struct iatt *iatt)</div><div class='del'>-{</div><div class='del'>-        dentry_t      *dentry = NULL;</div><div class='del'>-        dentry_t      *old_dentry = NULL;</div><div class='del'>-        inode_t       *old_inode = NULL;</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        inode_t       *link_inode = NULL;</div><div class='del'>-</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        table = inode-&gt;table;</div><div class='del'>-        if (!table) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (parent) {</div><div class='del'>-                /* We should prevent inode linking between different</div><div class='del'>-                   inode tables. This can cause errors which is very</div><div class='del'>-                   hard to catch/debug. */</div><div class='del'>-                if (inode-&gt;table != parent-&gt;table) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        GF_ASSERT (!"link attempted b/w inodes of diff table");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (parent-&gt;ia_type != IA_IFDIR) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        GF_ASSERT (!"link attempted on non-directory parent");</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!name || strlen (name) == 0) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        GF_ASSERT (!"link attempted with no basename on "</div><div class='add'>+__inode_link(inode_t *inode, inode_t *parent, const char *name,</div><div class='add'>+             struct iatt *iatt)</div><div class='add'>+{</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    dentry_t *old_dentry = NULL;</div><div class='add'>+    inode_t *old_inode = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    inode_t *link_inode = NULL;</div><div class='add'>+</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    table = inode-&gt;table;</div><div class='add'>+    if (!table) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (parent) {</div><div class='add'>+        /* We should prevent inode linking between different</div><div class='add'>+           inode tables. This can cause errors which is very</div><div class='add'>+           hard to catch/debug. */</div><div class='add'>+        if (inode-&gt;table != parent-&gt;table) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            GF_ASSERT(!"link attempted b/w inodes of diff table");</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (parent-&gt;ia_type != IA_IFDIR) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            GF_ASSERT(!"link attempted on non-directory parent");</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!name || strlen(name) == 0) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            GF_ASSERT (!"link attempted with no basename on "</div><div class='ctx'>                                     "parent");</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='add'>+            return NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        link_inode = inode;</div><div class='add'>+    link_inode = inode;</div><div class='ctx'> </div><div class='del'>-        if (!__is_inode_hashed (inode)) {</div><div class='del'>-                if (!iatt) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='add'>+    if (!__is_inode_hashed(inode)) {</div><div class='add'>+        if (!iatt) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_is_null (iatt-&gt;ia_gfid)) {</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='add'>+        if (gf_uuid_is_null(iatt-&gt;ia_gfid)) {</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                old_inode = __inode_find (table, iatt-&gt;ia_gfid);</div><div class='add'>+        old_inode = __inode_find(table, iatt-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-                if (old_inode) {</div><div class='del'>-                        link_inode = old_inode;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_uuid_copy (inode-&gt;gfid, iatt-&gt;ia_gfid);</div><div class='del'>-                        inode-&gt;ia_type    = iatt-&gt;ia_type;</div><div class='del'>-                        __inode_hash (inode);</div><div class='del'>-                }</div><div class='add'>+        if (old_inode) {</div><div class='add'>+            link_inode = old_inode;</div><div class='ctx'>         } else {</div><div class='del'>-		/* @old_inode serves another important purpose - it indicates</div><div class='del'>-		   to the code further below whether a dentry cycle check is</div><div class='del'>-		   required or not (a new inode linkage can never result in</div><div class='del'>-		   creation of a loop.)</div><div class='del'>-</div><div class='del'>-		   if the given @inode is already hashed, it actually means</div><div class='del'>-		   it is an "old" inode and deserves to undergo the cyclic</div><div class='del'>-		   check.</div><div class='del'>-		*/</div><div class='del'>-		old_inode = inode;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (name) {</div><div class='del'>-                if (!strcmp(name, ".") || !strcmp(name, ".."))</div><div class='del'>-                        return link_inode;</div><div class='del'>-</div><div class='del'>-                if (strchr (name, '/')) {</div><div class='del'>-                        GF_ASSERT (!"inode link attempted with '/' in name");</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            gf_uuid_copy(inode-&gt;gfid, iatt-&gt;ia_gfid);</div><div class='add'>+            inode-&gt;ia_type = iatt-&gt;ia_type;</div><div class='add'>+            __inode_hash(inode);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        /* @old_inode serves another important purpose - it indicates</div><div class='add'>+           to the code further below whether a dentry cycle check is</div><div class='add'>+           required or not (a new inode linkage can never result in</div><div class='add'>+           creation of a loop.)</div><div class='add'>+</div><div class='add'>+           if the given @inode is already hashed, it actually means</div><div class='add'>+           it is an "old" inode and deserves to undergo the cyclic</div><div class='add'>+           check.</div><div class='add'>+        */</div><div class='add'>+        old_inode = inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (name) {</div><div class='add'>+        if (!strcmp(name, ".") || !strcmp(name, ".."))</div><div class='add'>+            return link_inode;</div><div class='add'>+</div><div class='add'>+        if (strchr(name, '/')) {</div><div class='add'>+            GF_ASSERT(!"inode link attempted with '/' in name");</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* use only link_inode beyond this point */</div><div class='add'>+    if (parent) {</div><div class='add'>+        old_dentry = __dentry_grep(table, parent, name);</div><div class='add'>+</div><div class='add'>+        if (!old_dentry || old_dentry-&gt;inode != link_inode) {</div><div class='add'>+            dentry = __dentry_create(link_inode, parent, name);</div><div class='add'>+            if (!dentry) {</div><div class='add'>+                gf_msg_callingfn(</div><div class='add'>+                    THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_DENTRY_CREATE_FAILED,</div><div class='add'>+                    "dentry create failed on "</div><div class='add'>+                    "inode %s with parent %s",</div><div class='add'>+                    uuid_utoa(link_inode-&gt;gfid), uuid_utoa(parent-&gt;gfid));</div><div class='add'>+                errno = ENOMEM;</div><div class='add'>+                return NULL;</div><div class='add'>+            }</div><div class='add'>+            if (old_inode &amp;&amp; __is_dentry_cyclic(dentry)) {</div><div class='add'>+                errno = ELOOP;</div><div class='add'>+                __dentry_unset(dentry);</div><div class='add'>+                return NULL;</div><div class='add'>+            }</div><div class='add'>+            __dentry_hash(dentry);</div><div class='ctx'> </div><div class='del'>-        /* use only link_inode beyond this point */</div><div class='del'>-        if (parent) {</div><div class='del'>-                old_dentry = __dentry_grep (table, parent, name);</div><div class='del'>-</div><div class='del'>-                if (!old_dentry || old_dentry-&gt;inode != link_inode) {</div><div class='del'>-                        dentry = __dentry_create (link_inode, parent, name);</div><div class='del'>-                        if (!dentry) {</div><div class='del'>-                                gf_msg_callingfn (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                  LG_MSG_DENTRY_CREATE_FAILED,</div><div class='del'>-                                                  "dentry create failed on "</div><div class='del'>-                                                  "inode %s with parent %s",</div><div class='del'>-                                                  uuid_utoa (link_inode-&gt;gfid),</div><div class='del'>-                                                  uuid_utoa (parent-&gt;gfid));</div><div class='del'>-                                errno = ENOMEM;</div><div class='del'>-                                return NULL;</div><div class='del'>-                        }</div><div class='del'>-                        if (old_inode &amp;&amp; __is_dentry_cyclic (dentry)) {</div><div class='del'>-                                errno = ELOOP;</div><div class='del'>-                                __dentry_unset (dentry);</div><div class='del'>-                                return NULL;</div><div class='del'>-                        }</div><div class='del'>-                        __dentry_hash (dentry);</div><div class='del'>-</div><div class='del'>-                        if (old_dentry)</div><div class='del'>-                                __dentry_unset (old_dentry);</div><div class='del'>-                }</div><div class='add'>+            if (old_dentry)</div><div class='add'>+                __dentry_unset(old_dentry);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return link_inode;</div><div class='add'>+    return link_inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_link (inode_t *inode, inode_t *parent, const char *name,</div><div class='del'>-            struct iatt *iatt)</div><div class='add'>+inode_link(inode_t *inode, inode_t *parent, const char *name, struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        inode_t       *linked_inode = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                linked_inode = __inode_link (inode, parent, name, iatt);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        linked_inode = __inode_link(inode, parent, name, iatt);</div><div class='ctx'> </div><div class='del'>-                if (linked_inode)</div><div class='del'>-                        __inode_ref (linked_inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+        if (linked_inode)</div><div class='add'>+            __inode_ref(linked_inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> </div><div class='del'>-        return linked_inode;</div><div class='add'>+    return linked_inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_lookup (inode_t *inode)</div><div class='add'>+inode_lookup(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __inode_lookup (inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __inode_lookup(inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_ref_reduce_by_n (inode_t *inode, uint64_t nref)</div><div class='add'>+inode_ref_reduce_by_n(inode_t *inode, uint64_t nref)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __inode_ref_reduce_by_n (inode, nref);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __inode_ref_reduce_by_n(inode, nref);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_forget (inode_t *inode, uint64_t nlookup)</div><div class='add'>+inode_forget(inode_t *inode, uint64_t nlookup)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __inode_forget (inode, nlookup);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __inode_forget(inode, nlookup);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='del'>- * Invalidate an inode. This is invoked when a translator decides that an inode's</div><div class='del'>- * cache is no longer valid. Any translator interested in taking action in this</div><div class='del'>- * situation can define the invalidate callback.</div><div class='add'>+ * Invalidate an inode. This is invoked when a translator decides that an</div><div class='add'>+ * inode's cache is no longer valid. Any translator interested in taking action</div><div class='add'>+ * in this situation can define the invalidate callback.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='ctx'> inode_invalidate(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	xlator_t *xl = NULL;</div><div class='del'>-	xlator_t *old_THIS = NULL;</div><div class='del'>-</div><div class='del'>-	if (!inode) {</div><div class='del'>-		gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                 LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * The master xlator is not in the graph but it can define an invalidate</div><div class='del'>-	 * handler.</div><div class='del'>-	 */</div><div class='del'>-	xl = inode-&gt;table-&gt;xl-&gt;ctx-&gt;master;</div><div class='del'>-	if (xl &amp;&amp; xl-&gt;cbks-&gt;invalidate) {</div><div class='del'>-		old_THIS = THIS;</div><div class='del'>-		THIS = xl;</div><div class='del'>-		ret = xl-&gt;cbks-&gt;invalidate(xl, inode);</div><div class='del'>-		THIS = old_THIS;</div><div class='del'>-		if (ret)</div><div class='del'>-			return ret;</div><div class='del'>-	}</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * The master xlator is not in the graph but it can define an invalidate</div><div class='add'>+     * handler.</div><div class='add'>+     */</div><div class='add'>+    xl = inode-&gt;table-&gt;xl-&gt;ctx-&gt;master;</div><div class='add'>+    if (xl &amp;&amp; xl-&gt;cbks-&gt;invalidate) {</div><div class='add'>+        old_THIS = THIS;</div><div class='add'>+        THIS = xl;</div><div class='add'>+        ret = xl-&gt;cbks-&gt;invalidate(xl, inode);</div><div class='add'>+        THIS = old_THIS;</div><div class='add'>+        if (ret)</div><div class='add'>+            return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	xl = inode-&gt;table-&gt;xl-&gt;graph-&gt;first;</div><div class='del'>-	while (xl) {</div><div class='del'>-		old_THIS = THIS;</div><div class='del'>-		THIS = xl;</div><div class='del'>-		if (xl-&gt;cbks-&gt;invalidate)</div><div class='del'>-			ret = xl-&gt;cbks-&gt;invalidate(xl, inode);</div><div class='del'>-		THIS = old_THIS;</div><div class='add'>+    xl = inode-&gt;table-&gt;xl-&gt;graph-&gt;first;</div><div class='add'>+    while (xl) {</div><div class='add'>+        old_THIS = THIS;</div><div class='add'>+        THIS = xl;</div><div class='add'>+        if (xl-&gt;cbks-&gt;invalidate)</div><div class='add'>+            ret = xl-&gt;cbks-&gt;invalidate(xl, inode);</div><div class='add'>+        THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-		if (ret)</div><div class='del'>-			break;</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-		xl = xl-&gt;next;</div><div class='del'>-	}</div><div class='add'>+        xl = xl-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_unlink (inode_t *inode, inode_t *parent, const char *name)</div><div class='add'>+__inode_unlink(inode_t *inode, inode_t *parent, const char *name)</div><div class='ctx'> {</div><div class='del'>-        dentry_t *dentry = NULL;</div><div class='del'>-        char pgfid[64] = {0};</div><div class='del'>-        char gfid[64] = {0};</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    char pgfid[64] = {0};</div><div class='add'>+    char gfid[64] = {0};</div><div class='ctx'> </div><div class='del'>-        if (!inode || !parent || !name)</div><div class='del'>-                return;</div><div class='add'>+    if (!inode || !parent || !name)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        dentry = __dentry_search_for_inode (inode, parent-&gt;gfid, name);</div><div class='del'>-</div><div class='del'>-        /* dentry NULL for corrupted backend */</div><div class='del'>-        if (dentry) {</div><div class='del'>-                __dentry_unset (dentry);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg ("inode", GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='del'>-                        "%s/%s: dentry not found in %s",</div><div class='del'>-                        uuid_utoa_r (parent-&gt;gfid, pgfid), name,</div><div class='del'>-                        uuid_utoa_r (inode-&gt;gfid, gfid));</div><div class='del'>-        }</div><div class='add'>+    dentry = __dentry_search_for_inode(inode, parent-&gt;gfid, name);</div><div class='ctx'> </div><div class='add'>+    /* dentry NULL for corrupted backend */</div><div class='add'>+    if (dentry) {</div><div class='add'>+        __dentry_unset(dentry);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg("inode", GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND,</div><div class='add'>+               "%s/%s: dentry not found in %s",</div><div class='add'>+               uuid_utoa_r(parent-&gt;gfid, pgfid), name,</div><div class='add'>+               uuid_utoa_r(inode-&gt;gfid, gfid));</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-inode_unlink (inode_t *inode, inode_t *parent, const char *name)</div><div class='add'>+inode_unlink(inode_t *inode, inode_t *parent, const char *name)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __inode_unlink (inode, parent, name);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __inode_unlink(inode, parent, name);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_rename (inode_table_t *table, inode_t *srcdir, const char *srcname,</div><div class='del'>-              inode_t *dstdir, const char *dstname, inode_t *inode,</div><div class='del'>-              struct iatt *iatt)</div><div class='del'>-{</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+inode_rename(inode_table_t *table, inode_t *srcdir, const char *srcname,</div><div class='add'>+             inode_t *dstdir, const char *dstname, inode_t *inode,</div><div class='add'>+             struct iatt *iatt)</div><div class='add'>+{</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __inode_link (inode, dstdir, dstname, iatt);</div><div class='del'>-                __inode_unlink (inode, srcdir, srcname);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __inode_link(inode, dstdir, dstname, iatt);</div><div class='add'>+        __inode_unlink(inode, srcdir, srcname);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static dentry_t *</div><div class='del'>-__dentry_search_arbit (inode_t *inode)</div><div class='add'>+__dentry_search_arbit(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        dentry_t *dentry = NULL;</div><div class='del'>-        dentry_t *trav = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='add'>+    dentry_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav, &amp;inode-&gt;dentry_list, inode_list) {</div><div class='del'>-                if (__is_dentry_hashed (trav)) {</div><div class='del'>-                        dentry = trav;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(trav, &amp;inode-&gt;dentry_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if (__is_dentry_hashed(trav)) {</div><div class='add'>+            dentry = trav;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dentry) {</div><div class='del'>-                list_for_each_entry (trav, &amp;inode-&gt;dentry_list, inode_list) {</div><div class='del'>-                        dentry = trav;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (!dentry) {</div><div class='add'>+        list_for_each_entry(trav, &amp;inode-&gt;dentry_list, inode_list)</div><div class='add'>+        {</div><div class='add'>+            dentry = trav;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dentry;</div><div class='add'>+    return dentry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-inode_parent (inode_t *inode, uuid_t pargfid, const char *name)</div><div class='add'>+inode_parent(inode_t *inode, uuid_t pargfid, const char *name)</div><div class='ctx'> {</div><div class='del'>-        inode_t       *parent = NULL;</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        dentry_t      *dentry = NULL;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (pargfid &amp;&amp; !gf_uuid_is_null (pargfid) &amp;&amp; name) {</div><div class='del'>-                        dentry = __dentry_search_for_inode (inode, pargfid, name);</div><div class='del'>-                } else {</div><div class='del'>-                        dentry = __dentry_search_arbit (inode);</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (pargfid &amp;&amp; !gf_uuid_is_null(pargfid) &amp;&amp; name) {</div><div class='add'>+            dentry = __dentry_search_for_inode(inode, pargfid, name);</div><div class='add'>+        } else {</div><div class='add'>+            dentry = __dentry_search_arbit(inode);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (dentry)</div><div class='del'>-                        parent = dentry-&gt;parent;</div><div class='add'>+        if (dentry)</div><div class='add'>+            parent = dentry-&gt;parent;</div><div class='ctx'> </div><div class='del'>-                if (parent)</div><div class='del'>-                        __inode_ref (parent);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+        if (parent)</div><div class='add'>+            __inode_ref(parent);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return parent;</div><div class='add'>+    return parent;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__inode_has_dentry (inode_t *inode)</div><div class='add'>+__inode_has_dentry(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return !list_empty (&amp;inode-&gt;dentry_list);</div><div class='add'>+    return !list_empty(&amp;inode-&gt;dentry_list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_has_dentry (inode_t *inode)</div><div class='add'>+inode_has_dentry(inode_t *inode)</div><div class='ctx'> {</div><div class='add'>+    int dentry_present = 0;</div><div class='ctx'> </div><div class='del'>-        int dentry_present = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                dentry_present = __inode_has_dentry (inode);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        dentry_present = __inode_has_dentry(inode);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return dentry_present;</div><div class='add'>+    return dentry_present;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__inode_path (inode_t *inode, const char *name, char **bufp)</div><div class='del'>-{</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        inode_t       *itrav = NULL;</div><div class='del'>-        dentry_t      *trav  = NULL;</div><div class='del'>-        size_t         i     = 0, size = 0;</div><div class='del'>-        int64_t        ret   = 0;</div><div class='del'>-        int            len   = 0;</div><div class='del'>-        char          *buf   = NULL;</div><div class='del'>-</div><div class='del'>-        if (!inode || gf_uuid_is_null (inode-&gt;gfid)) {</div><div class='del'>-                GF_ASSERT (0);</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid inode");</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='add'>+__inode_path(inode_t *inode, const char *name, char **bufp)</div><div class='add'>+{</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    inode_t *itrav = NULL;</div><div class='add'>+    dentry_t *trav = NULL;</div><div class='add'>+    size_t i = 0, size = 0;</div><div class='add'>+    int64_t ret = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+</div><div class='add'>+    if (!inode || gf_uuid_is_null(inode-&gt;gfid)) {</div><div class='add'>+        GF_ASSERT(0);</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid inode");</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    table = inode-&gt;table;</div><div class='add'>+</div><div class='add'>+    itrav = inode;</div><div class='add'>+    for (trav = __dentry_search_arbit(itrav); trav;</div><div class='add'>+         trav = __dentry_search_arbit(itrav)) {</div><div class='add'>+        itrav = trav-&gt;parent;</div><div class='add'>+        i++; /* "/" */</div><div class='add'>+        i += strlen(trav-&gt;name);</div><div class='add'>+        if (i &gt; PATH_MAX) {</div><div class='add'>+            gf_msg(table-&gt;name, GF_LOG_CRITICAL, 0, LG_MSG_DENTRY_CYCLIC_LOOP,</div><div class='add'>+                   "possible infinite "</div><div class='add'>+                   "loop detected, forcing break. name=(%s)",</div><div class='add'>+                   name);</div><div class='add'>+            ret = -ENOENT;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!__is_root_gfid(itrav-&gt;gfid)) {</div><div class='add'>+        /* "&lt;gfid:00000000-0000-0000-0000-000000000000&gt;"/path */</div><div class='add'>+        i += GFID_STR_PFX_LEN;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (name) {</div><div class='add'>+        i++;</div><div class='add'>+        i += strlen(name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = i;</div><div class='add'>+    size = i + 1;</div><div class='add'>+    buf = GF_CALLOC(size, sizeof(char), gf_common_mt_char);</div><div class='add'>+    if (buf) {</div><div class='add'>+        buf[size - 1] = 0;</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+        if (name) {</div><div class='add'>+            len = strlen(name);</div><div class='add'>+            strncpy(buf + (i - len), name, len);</div><div class='add'>+            buf[i - len - 1] = '/';</div><div class='add'>+            i -= (len + 1);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='ctx'>         itrav = inode;</div><div class='del'>-        for (trav = __dentry_search_arbit (itrav); trav;</div><div class='del'>-             trav = __dentry_search_arbit (itrav)) {</div><div class='del'>-                itrav = trav-&gt;parent;</div><div class='del'>-                i ++; /* "/" */</div><div class='del'>-                i += strlen (trav-&gt;name);</div><div class='del'>-                if (i &gt; PATH_MAX) {</div><div class='del'>-                        gf_msg (table-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                                LG_MSG_DENTRY_CYCLIC_LOOP, "possible infinite "</div><div class='del'>-                                "loop detected, forcing break. name=(%s)",</div><div class='del'>-                                name);</div><div class='del'>-                        ret = -ENOENT;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        for (trav = __dentry_search_arbit(itrav); trav;</div><div class='add'>+             trav = __dentry_search_arbit(itrav)) {</div><div class='add'>+            itrav = trav-&gt;parent;</div><div class='add'>+            len = strlen(trav-&gt;name);</div><div class='add'>+            strncpy(buf + (i - len), trav-&gt;name, len);</div><div class='add'>+            buf[i - len - 1] = '/';</div><div class='add'>+            i -= (len + 1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!__is_root_gfid (itrav-&gt;gfid)) {</div><div class='del'>-                /* "&lt;gfid:00000000-0000-0000-0000-000000000000&gt;"/path */</div><div class='del'>-                i += GFID_STR_PFX_LEN;</div><div class='add'>+        if (!__is_root_gfid(itrav-&gt;gfid)) {</div><div class='add'>+            snprintf(&amp;buf[i - GFID_STR_PFX_LEN], GFID_STR_PFX_LEN,</div><div class='add'>+                     INODE_PATH_FMT, uuid_utoa(itrav-&gt;gfid));</div><div class='add'>+            buf[i - 1] = '&gt;';</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (name) {</div><div class='del'>-                i++;</div><div class='del'>-                i += strlen (name);</div><div class='del'>-        }</div><div class='add'>+        *bufp = buf;</div><div class='add'>+    } else {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = i;</div><div class='del'>-        size = i + 1;</div><div class='del'>-        buf = GF_CALLOC (size, sizeof (char), gf_common_mt_char);</div><div class='add'>+out:</div><div class='add'>+    if (__is_root_gfid(inode-&gt;gfid) &amp;&amp; !name) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        GF_FREE(buf);</div><div class='add'>+        buf = GF_CALLOC(ret + 1, sizeof(char), gf_common_mt_char);</div><div class='ctx'>         if (buf) {</div><div class='del'>-</div><div class='del'>-                buf[size - 1] = 0;</div><div class='del'>-</div><div class='del'>-                if (name) {</div><div class='del'>-                        len = strlen (name);</div><div class='del'>-                        strncpy (buf + (i - len), name, len);</div><div class='del'>-                        buf[i-len-1] = '/';</div><div class='del'>-                        i -= (len + 1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                itrav = inode;</div><div class='del'>-                for (trav = __dentry_search_arbit (itrav); trav;</div><div class='del'>-                     trav = __dentry_search_arbit (itrav)) {</div><div class='del'>-                        itrav = trav-&gt;parent;</div><div class='del'>-                        len = strlen (trav-&gt;name);</div><div class='del'>-                        strncpy (buf + (i - len), trav-&gt;name, len);</div><div class='del'>-                        buf[i-len-1] = '/';</div><div class='del'>-                        i -= (len + 1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!__is_root_gfid (itrav-&gt;gfid)) {</div><div class='del'>-                        snprintf (&amp;buf[i-GFID_STR_PFX_LEN], GFID_STR_PFX_LEN,</div><div class='del'>-                                  INODE_PATH_FMT, uuid_utoa (itrav-&gt;gfid));</div><div class='del'>-                        buf[i-1] = '&gt;';</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                *bufp = buf;</div><div class='add'>+            strcpy(buf, "/");</div><div class='add'>+            *bufp = buf;</div><div class='ctx'>         } else {</div><div class='del'>-                ret = -ENOMEM;</div><div class='add'>+            ret = -ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (__is_root_gfid (inode-&gt;gfid) &amp;&amp; !name) {</div><div class='del'>-                ret = 1;</div><div class='del'>-                GF_FREE (buf);</div><div class='del'>-                buf = GF_CALLOC (ret + 1, sizeof (char), gf_common_mt_char);</div><div class='del'>-                if (buf) {</div><div class='del'>-                        strcpy (buf, "/");</div><div class='del'>-                        *bufp = buf;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                *bufp = NULL;</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        *bufp = NULL;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_path (inode_t *inode, const char *name, char **bufp)</div><div class='add'>+inode_path(inode_t *inode, const char *name, char **bufp)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        int            ret   = -1;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return -EINVAL;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return -EINVAL;</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_path (inode, name, bufp);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_path(inode, name, bufp);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit)</div><div class='add'>+__inode_table_set_lru_limit(inode_table_t *table, uint32_t lru_limit)</div><div class='ctx'> {</div><div class='del'>-        table-&gt;lru_limit = lru_limit;</div><div class='del'>-        return;</div><div class='add'>+    table-&gt;lru_limit = lru_limit;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit)</div><div class='add'>+inode_table_set_lru_limit(inode_table_t *table, uint32_t lru_limit)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __inode_table_set_lru_limit (table, lru_limit);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __inode_table_set_lru_limit(table, lru_limit);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        inode_table_prune (table);</div><div class='add'>+    inode_table_prune(table);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-inode_table_prune (inode_table_t *table)</div><div class='add'>+inode_table_prune(inode_table_t *table)</div><div class='ctx'> {</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        struct list_head  purge = {0, };</div><div class='del'>-        inode_t          *del = NULL;</div><div class='del'>-        inode_t          *tmp = NULL;</div><div class='del'>-        inode_t          *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct list_head purge = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *del = NULL;</div><div class='add'>+    inode_t *tmp = NULL;</div><div class='add'>+    inode_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!table)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!table)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;purge);</div><div class='add'>+    INIT_LIST_HEAD(&amp;purge);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                while (table-&gt;lru_limit</div><div class='del'>-                       &amp;&amp; table-&gt;lru_size &gt; (table-&gt;lru_limit)) {</div><div class='del'>-                        if (list_empty (&amp;table-&gt;lru)) {</div><div class='del'>-                                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                                  LG_MSG_INVALID_INODE_LIST,</div><div class='del'>-                                                  "Empty inode lru list found"</div><div class='del'>-                                                  " but with (%d) lru_size",</div><div class='del'>-                                                  table-&gt;lru_size);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        entry = list_entry (table-&gt;lru.next, inode_t, list);</div><div class='del'>-</div><div class='del'>-                        table-&gt;lru_size--;</div><div class='del'>-                        __inode_retire (entry);</div><div class='del'>-</div><div class='del'>-                        ret++;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        while (table-&gt;lru_limit &amp;&amp; table-&gt;lru_size &gt; (table-&gt;lru_limit)) {</div><div class='add'>+            if (list_empty(&amp;table-&gt;lru)) {</div><div class='add'>+                gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                                 LG_MSG_INVALID_INODE_LIST,</div><div class='add'>+                                 "Empty inode lru list found"</div><div class='add'>+                                 " but with (%d) lru_size",</div><div class='add'>+                                 table-&gt;lru_size);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            entry = list_entry(table-&gt;lru.next, inode_t, list);</div><div class='add'>+</div><div class='add'>+            table-&gt;lru_size--;</div><div class='add'>+            __inode_retire(entry);</div><div class='ctx'> </div><div class='del'>-                list_splice_init (&amp;table-&gt;purge, &amp;purge);</div><div class='del'>-                table-&gt;purge_size = 0;</div><div class='add'>+            ret++;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='add'>+        list_splice_init(&amp;table-&gt;purge, &amp;purge);</div><div class='add'>+        table-&gt;purge_size = 0;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(del, tmp, &amp;purge, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (del, tmp, &amp;purge, list) {</div><div class='del'>-                        list_del_init (&amp;del-&gt;list);</div><div class='del'>-                        __inode_forget (del, 0);</div><div class='del'>-                        __inode_destroy (del);</div><div class='del'>-                }</div><div class='add'>+            list_del_init(&amp;del-&gt;list);</div><div class='add'>+            __inode_forget(del, 0);</div><div class='add'>+            __inode_destroy(del);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__inode_table_init_root (inode_table_t *table)</div><div class='add'>+__inode_table_init_root(inode_table_t *table)</div><div class='ctx'> {</div><div class='del'>-        inode_t     *root = NULL;</div><div class='del'>-        struct iatt  iatt = {0, };</div><div class='add'>+    inode_t *root = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!table)</div><div class='del'>-                return;</div><div class='add'>+    if (!table)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        root = __inode_create (table);</div><div class='add'>+    root = __inode_create(table);</div><div class='ctx'> </div><div class='del'>-        iatt.ia_gfid[15] = 1;</div><div class='del'>-        iatt.ia_ino = 1;</div><div class='del'>-        iatt.ia_type = IA_IFDIR;</div><div class='add'>+    iatt.ia_gfid[15] = 1;</div><div class='add'>+    iatt.ia_ino = 1;</div><div class='add'>+    iatt.ia_type = IA_IFDIR;</div><div class='ctx'> </div><div class='del'>-        __inode_link (root, NULL, NULL, &amp;iatt);</div><div class='del'>-        table-&gt;root = root;</div><div class='add'>+    __inode_link(root, NULL, NULL, &amp;iatt);</div><div class='add'>+    table-&gt;root = root;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_table_t *</div><div class='del'>-inode_table_new (size_t lru_limit, xlator_t *xl)</div><div class='add'>+inode_table_new(size_t lru_limit, xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t *new = NULL;</div><div class='del'>-        int            ret = -1;</div><div class='del'>-        int            i = 0;</div><div class='del'>-</div><div class='del'>-        new = (void *)GF_CALLOC(1, sizeof (*new), gf_common_mt_inode_table_t);</div><div class='del'>-        if (!new)</div><div class='del'>-                return NULL;</div><div class='add'>+    inode_table_t *new = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        new-&gt;xl = xl;</div><div class='del'>-        new-&gt;ctxcount = xl-&gt;graph-&gt;xl_count + 1;</div><div class='add'>+    new = (void *)GF_CALLOC(1, sizeof(*new), gf_common_mt_inode_table_t);</div><div class='add'>+    if (!new)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        new-&gt;lru_limit = lru_limit;</div><div class='add'>+    new-&gt;xl = xl;</div><div class='add'>+    new-&gt;ctxcount = xl-&gt;graph-&gt;xl_count + 1;</div><div class='ctx'> </div><div class='del'>-        new-&gt;hashsize = 14057; /* TODO: Random Number?? */</div><div class='add'>+    new-&gt;lru_limit = lru_limit;</div><div class='ctx'> </div><div class='del'>-        /* In case FUSE is initing the inode table. */</div><div class='del'>-        if (lru_limit == 0)</div><div class='del'>-                lru_limit = DEFAULT_INODE_MEMPOOL_ENTRIES;</div><div class='add'>+    new-&gt;hashsize = 14057; /* TODO: Random Number?? */</div><div class='ctx'> </div><div class='del'>-        new-&gt;inode_pool = mem_pool_new (inode_t, lru_limit);</div><div class='add'>+    /* In case FUSE is initing the inode table. */</div><div class='add'>+    if (lru_limit == 0)</div><div class='add'>+        lru_limit = DEFAULT_INODE_MEMPOOL_ENTRIES;</div><div class='ctx'> </div><div class='del'>-        if (!new-&gt;inode_pool)</div><div class='del'>-                goto out;</div><div class='add'>+    new-&gt;inode_pool = mem_pool_new(inode_t, lru_limit);</div><div class='ctx'> </div><div class='del'>-        new-&gt;dentry_pool = mem_pool_new (dentry_t, lru_limit);</div><div class='add'>+    if (!new-&gt;inode_pool)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!new-&gt;dentry_pool)</div><div class='del'>-                goto out;</div><div class='add'>+    new-&gt;dentry_pool = mem_pool_new(dentry_t, lru_limit);</div><div class='ctx'> </div><div class='del'>-        new-&gt;inode_hash = (void *)GF_CALLOC (65536,</div><div class='del'>-                                             sizeof (struct list_head),</div><div class='del'>-                                             gf_common_mt_list_head);</div><div class='del'>-        if (!new-&gt;inode_hash)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!new-&gt;dentry_pool)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        new-&gt;name_hash = (void *)GF_CALLOC (new-&gt;hashsize,</div><div class='del'>-                                            sizeof (struct list_head),</div><div class='del'>-                                            gf_common_mt_list_head);</div><div class='del'>-        if (!new-&gt;name_hash)</div><div class='del'>-                goto out;</div><div class='add'>+    new-&gt;inode_hash = (void *)GF_CALLOC(65536, sizeof(struct list_head),</div><div class='add'>+                                        gf_common_mt_list_head);</div><div class='add'>+    if (!new-&gt;inode_hash)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* if number of fd open in one process is more than this,</div><div class='del'>-           we may hit perf issues */</div><div class='del'>-        new-&gt;fd_mem_pool = mem_pool_new (fd_t, 1024);</div><div class='add'>+    new-&gt;name_hash = (void *)GF_CALLOC(new-&gt;hashsize, sizeof(struct list_head),</div><div class='add'>+                                       gf_common_mt_list_head);</div><div class='add'>+    if (!new-&gt;name_hash)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!new-&gt;fd_mem_pool)</div><div class='del'>-                goto out;</div><div class='add'>+    /* if number of fd open in one process is more than this,</div><div class='add'>+       we may hit perf issues */</div><div class='add'>+    new-&gt;fd_mem_pool = mem_pool_new(fd_t, 1024);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 65536; i++) {</div><div class='del'>-                INIT_LIST_HEAD (&amp;new-&gt;inode_hash[i]);</div><div class='del'>-        }</div><div class='add'>+    if (!new-&gt;fd_mem_pool)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    for (i = 0; i &lt; 65536; i++) {</div><div class='add'>+        INIT_LIST_HEAD(&amp;new-&gt;inode_hash[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; new-&gt;hashsize; i++) {</div><div class='del'>-                INIT_LIST_HEAD (&amp;new-&gt;name_hash[i]);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; new-&gt;hashsize; i++) {</div><div class='add'>+        INIT_LIST_HEAD(&amp;new-&gt;name_hash[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;active);</div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;lru);</div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;purge);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;active);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;lru);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;purge);</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;new-&gt;name, "%s/inode", xl-&gt;name);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                /* TODO: This should be ok to continue, check with avati */</div><div class='del'>-                ;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;new-&gt;name, "%s/inode", xl-&gt;name);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        /* TODO: This should be ok to continue, check with avati */</div><div class='add'>+        ;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __inode_table_init_root (new);</div><div class='add'>+    __inode_table_init_root(new);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;new-&gt;lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;new-&gt;lock, NULL);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (new) {</div><div class='del'>-                        GF_FREE (new-&gt;inode_hash);</div><div class='del'>-                        GF_FREE (new-&gt;name_hash);</div><div class='del'>-                        if (new-&gt;dentry_pool)</div><div class='del'>-                                mem_pool_destroy (new-&gt;dentry_pool);</div><div class='del'>-                        if (new-&gt;inode_pool)</div><div class='del'>-                                mem_pool_destroy (new-&gt;inode_pool);</div><div class='del'>-                        GF_FREE (new);</div><div class='del'>-                        new = NULL;</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (new) {</div><div class='add'>+            GF_FREE(new-&gt;inode_hash);</div><div class='add'>+            GF_FREE(new-&gt;name_hash);</div><div class='add'>+            if (new-&gt;dentry_pool)</div><div class='add'>+                mem_pool_destroy(new-&gt;dentry_pool);</div><div class='add'>+            if (new-&gt;inode_pool)</div><div class='add'>+                mem_pool_destroy(new-&gt;inode_pool);</div><div class='add'>+            GF_FREE(new);</div><div class='add'>+            new = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return new;</div><div class='add'>+    return new;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_table_ctx_free (inode_table_t *table)</div><div class='add'>+inode_table_ctx_free(inode_table_t *table)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        inode_t *del = NULL;</div><div class='del'>-        inode_t *tmp = NULL;</div><div class='del'>-        int purge_count = 0;</div><div class='del'>-        int lru_count = 0;</div><div class='del'>-        int active_count = 0;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        int itable_size = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *del = NULL;</div><div class='add'>+    inode_t *tmp = NULL;</div><div class='add'>+    int purge_count = 0;</div><div class='add'>+    int lru_count = 0;</div><div class='add'>+    int active_count = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int itable_size = 0;</div><div class='ctx'> </div><div class='del'>-        if (!table)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!table)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(del, tmp, &amp;table-&gt;purge, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (del, tmp, &amp;table-&gt;purge, list) {</div><div class='del'>-                        if (del-&gt;_ctx) {</div><div class='del'>-                                __inode_ctx_free (del);</div><div class='del'>-                                purge_count++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (del, tmp, &amp;table-&gt;lru, list) {</div><div class='del'>-                        if (del-&gt;_ctx) {</div><div class='del'>-                                __inode_ctx_free (del);</div><div class='del'>-                                lru_count++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (del-&gt;_ctx) {</div><div class='add'>+                __inode_ctx_free(del);</div><div class='add'>+                purge_count++;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* should the contexts of active inodes be freed?</div><div class='del'>-                 * Since before this function being called fds would have</div><div class='del'>-                 * been migrated and would have held the ref on the new</div><div class='del'>-                 * inode from the new inode table, the older inode would not</div><div class='del'>-                 * be used.</div><div class='del'>-                 */</div><div class='del'>-                list_for_each_entry_safe (del, tmp, &amp;table-&gt;active, list) {</div><div class='del'>-                        if (del-&gt;_ctx) {</div><div class='del'>-                                __inode_ctx_free (del);</div><div class='del'>-                                active_count++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        list_for_each_entry_safe(del, tmp, &amp;table-&gt;lru, list)</div><div class='add'>+        {</div><div class='add'>+            if (del-&gt;_ctx) {</div><div class='add'>+                __inode_ctx_free(del);</div><div class='add'>+                lru_count++;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='del'>-</div><div class='del'>-        ret = purge_count + lru_count + active_count;</div><div class='del'>-        itable_size = table-&gt;active_size + table-&gt;lru_size + table-&gt;purge_size;</div><div class='del'>-        gf_msg_callingfn (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                          LG_MSG_INODE_CONTEXT_FREED, "total %d (itable size: "</div><div class='del'>-                          "%d) inode contexts have been freed (active: %d, ("</div><div class='del'>-                          "active size: %d), lru: %d, (lru size: %d),  purge: "</div><div class='del'>-                          "%d, (purge size: %d))", ret, itable_size,</div><div class='del'>-                          active_count, table-&gt;active_size, lru_count,</div><div class='del'>-                          table-&gt;lru_size, purge_count, table-&gt;purge_size);</div><div class='del'>-        return ret;</div><div class='add'>+</div><div class='add'>+        /* should the contexts of active inodes be freed?</div><div class='add'>+         * Since before this function being called fds would have</div><div class='add'>+         * been migrated and would have held the ref on the new</div><div class='add'>+         * inode from the new inode table, the older inode would not</div><div class='add'>+         * be used.</div><div class='add'>+         */</div><div class='add'>+        list_for_each_entry_safe(del, tmp, &amp;table-&gt;active, list)</div><div class='add'>+        {</div><div class='add'>+            if (del-&gt;_ctx) {</div><div class='add'>+                __inode_ctx_free(del);</div><div class='add'>+                active_count++;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='add'>+</div><div class='add'>+    ret = purge_count + lru_count + active_count;</div><div class='add'>+    itable_size = table-&gt;active_size + table-&gt;lru_size + table-&gt;purge_size;</div><div class='add'>+    gf_msg_callingfn(this-&gt;name, GF_LOG_INFO, 0, LG_MSG_INODE_CONTEXT_FREED,</div><div class='add'>+                     "total %d (itable size: "</div><div class='add'>+                     "%d) inode contexts have been freed (active: %d, ("</div><div class='add'>+                     "active size: %d), lru: %d, (lru size: %d),  purge: "</div><div class='add'>+                     "%d, (purge size: %d))",</div><div class='add'>+                     ret, itable_size, active_count, table-&gt;active_size,</div><div class='add'>+                     lru_count, table-&gt;lru_size, purge_count,</div><div class='add'>+                     table-&gt;purge_size);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_table_destroy_all (glusterfs_ctx_t *ctx) {</div><div class='del'>-</div><div class='del'>-        glusterfs_graph_t *trav_graph  = NULL, *tmp = NULL;</div><div class='del'>-        xlator_t          *tree        = NULL;</div><div class='del'>-        inode_table_t     *inode_table = NULL;</div><div class='add'>+inode_table_destroy_all(glusterfs_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    glusterfs_graph_t *trav_graph = NULL, *tmp = NULL;</div><div class='add'>+    xlator_t *tree = NULL;</div><div class='add'>+    inode_table_t *inode_table = NULL;</div><div class='add'>+</div><div class='add'>+    if (ctx == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* TODO: Traverse ctx-&gt;graphs with in ctx-&gt;lock and also the other</div><div class='add'>+     * graph additions and traversals in ctx-&gt;lock.</div><div class='add'>+     */</div><div class='add'>+    list_for_each_entry_safe(trav_graph, tmp, &amp;ctx-&gt;graphs, list)</div><div class='add'>+    {</div><div class='add'>+        tree = trav_graph-&gt;first;</div><div class='add'>+        inode_table = tree-&gt;itable;</div><div class='add'>+        tree-&gt;itable = NULL;</div><div class='add'>+        if (inode_table)</div><div class='add'>+            inode_table_destroy(inode_table);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (ctx == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+void</div><div class='add'>+inode_table_destroy(inode_table_t *inode_table)</div><div class='add'>+{</div><div class='add'>+    inode_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        /* TODO: Traverse ctx-&gt;graphs with in ctx-&gt;lock and also the other</div><div class='del'>-         * graph additions and traversals in ctx-&gt;lock.</div><div class='del'>-         */</div><div class='del'>-        list_for_each_entry_safe (trav_graph, tmp, &amp;ctx-&gt;graphs, list) {</div><div class='del'>-                tree = trav_graph-&gt;first;</div><div class='del'>-                inode_table = tree-&gt;itable;</div><div class='del'>-                tree-&gt;itable = NULL;</div><div class='del'>-                if (inode_table)</div><div class='del'>-                        inode_table_destroy (inode_table);</div><div class='del'>-        }</div><div class='del'>- out:</div><div class='add'>+    if (inode_table == NULL)</div><div class='ctx'>         return;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-inode_table_destroy (inode_table_t *inode_table) {</div><div class='del'>-</div><div class='del'>-        inode_t  *trav = NULL;</div><div class='del'>-</div><div class='del'>-        if (inode_table == NULL)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /* Ideally at this point in time, there should be no inodes with</div><div class='del'>-         * refs remaining. But there are quite a few chances where the inodes</div><div class='del'>-         * leak. So we can take three approaches for cleaning up the inode table:</div><div class='del'>-         * 1. Assume there are no leaks and then send a forget on all the inodes</div><div class='del'>-         *    in lru list.(If no leaks there should be no inodes in active list)</div><div class='del'>-         * 2. Knowing there could be leaks and not freeing those inodes will</div><div class='del'>-         *    also not free its inode context and this could leak a lot of</div><div class='del'>-         *    memory, force free the inodes by changing the ref to 0.</div><div class='del'>-         *    The problem with this is that any reference to inode after this</div><div class='del'>-         *    calling this function will lead to a crash.</div><div class='del'>-         * 3. Knowing there could be leakes, just free the inode contexts of</div><div class='del'>-         *    all the inodes. and let the inodes be alive. This way the major</div><div class='del'>-         *    memory consumed by the inode contexts are freed, but there can</div><div class='del'>-         *    be errors when any inode contexts are accessed after destroying</div><div class='del'>-         *    this table.</div><div class='add'>+    /* Ideally at this point in time, there should be no inodes with</div><div class='add'>+     * refs remaining. But there are quite a few chances where the inodes</div><div class='add'>+     * leak. So we can take three approaches for cleaning up the inode table:</div><div class='add'>+     * 1. Assume there are no leaks and then send a forget on all the inodes</div><div class='add'>+     *    in lru list.(If no leaks there should be no inodes in active list)</div><div class='add'>+     * 2. Knowing there could be leaks and not freeing those inodes will</div><div class='add'>+     *    also not free its inode context and this could leak a lot of</div><div class='add'>+     *    memory, force free the inodes by changing the ref to 0.</div><div class='add'>+     *    The problem with this is that any reference to inode after this</div><div class='add'>+     *    calling this function will lead to a crash.</div><div class='add'>+     * 3. Knowing there could be leakes, just free the inode contexts of</div><div class='add'>+     *    all the inodes. and let the inodes be alive. This way the major</div><div class='add'>+     *    memory consumed by the inode contexts are freed, but there can</div><div class='add'>+     *    be errors when any inode contexts are accessed after destroying</div><div class='add'>+     *    this table.</div><div class='add'>+     *</div><div class='add'>+     * Not sure which is the approach to be taken, going by approach 2.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    /* Approach 3:</div><div class='add'>+     * ret = inode_table_ctx_free (inode_table);</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;inode_table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* Process lru list first as we need to unset their dentry</div><div class='add'>+         * entries (the ones which may not be unset during</div><div class='add'>+         * '__inode_passivate' as they were hashed) which in turn</div><div class='add'>+         * shall unref their parent</div><div class='ctx'>          *</div><div class='del'>-         * Not sure which is the approach to be taken, going by approach 2.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /* Approach 3:</div><div class='del'>-         * ret = inode_table_ctx_free (inode_table);</div><div class='add'>+         * These parent inodes when unref'ed may well again fall</div><div class='add'>+         * into lru list and if we are at the end of traversing</div><div class='add'>+         * the list, we may miss to delete/retire that entry. Hence</div><div class='add'>+         * traverse the lru list till it gets empty.</div><div class='ctx'>          */</div><div class='del'>-        pthread_mutex_lock (&amp;inode_table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* Process lru list first as we need to unset their dentry</div><div class='del'>-                 * entries (the ones which may not be unset during</div><div class='del'>-                 * '__inode_passivate' as they were hashed) which in turn</div><div class='del'>-                 * shall unref their parent</div><div class='del'>-                 *</div><div class='del'>-                 * These parent inodes when unref'ed may well again fall</div><div class='del'>-                 * into lru list and if we are at the end of traversing</div><div class='del'>-                 * the list, we may miss to delete/retire that entry. Hence</div><div class='del'>-                 * traverse the lru list till it gets empty.</div><div class='del'>-                 */</div><div class='del'>-                while (!list_empty (&amp;inode_table-&gt;lru)) {</div><div class='del'>-                        trav = list_first_entry (&amp;inode_table-&gt;lru,</div><div class='del'>-                                                 inode_t, list);</div><div class='del'>-                        __inode_forget (trav, 0);</div><div class='del'>-                        __inode_retire (trav);</div><div class='del'>-                        inode_table-&gt;lru_size--;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                while (!list_empty (&amp;inode_table-&gt;active)) {</div><div class='del'>-                        trav = list_first_entry (&amp;inode_table-&gt;active,</div><div class='del'>-                                                 inode_t, list);</div><div class='del'>-                        /* forget and unref the inode to retire and add it to</div><div class='del'>-                         * purge list. By this time there should not be any</div><div class='del'>-                         * inodes present in the active list except for root</div><div class='del'>-                         * inode. Its a ref_leak otherwise. */</div><div class='del'>-                        if (trav != inode_table-&gt;root)</div><div class='del'>-                                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                                  LG_MSG_REF_COUNT,</div><div class='del'>-                                                  "Active inode(%p) with refcount"</div><div class='del'>-                                                  "(%d) found during cleanup",</div><div class='del'>-                                                  trav, trav-&gt;ref);</div><div class='del'>-                        __inode_forget (trav, 0);</div><div class='del'>-                        __inode_ref_reduce_by_n (trav, 0);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;inode_table-&gt;lock);</div><div class='del'>-</div><div class='del'>-        inode_table_prune (inode_table);</div><div class='del'>-</div><div class='del'>-        GF_FREE (inode_table-&gt;inode_hash);</div><div class='del'>-        GF_FREE (inode_table-&gt;name_hash);</div><div class='del'>-        if (inode_table-&gt;dentry_pool)</div><div class='del'>-                mem_pool_destroy (inode_table-&gt;dentry_pool);</div><div class='del'>-        if (inode_table-&gt;inode_pool)</div><div class='del'>-                mem_pool_destroy (inode_table-&gt;inode_pool);</div><div class='del'>-        if (inode_table-&gt;fd_mem_pool)</div><div class='del'>-                mem_pool_destroy (inode_table-&gt;fd_mem_pool);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_destroy (&amp;inode_table-&gt;lock);</div><div class='del'>-</div><div class='del'>-        GF_FREE (inode_table-&gt;name);</div><div class='del'>-        GF_FREE (inode_table);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+        while (!list_empty(&amp;inode_table-&gt;lru)) {</div><div class='add'>+            trav = list_first_entry(&amp;inode_table-&gt;lru, inode_t, list);</div><div class='add'>+            __inode_forget(trav, 0);</div><div class='add'>+            __inode_retire(trav);</div><div class='add'>+            inode_table-&gt;lru_size--;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        while (!list_empty(&amp;inode_table-&gt;active)) {</div><div class='add'>+            trav = list_first_entry(&amp;inode_table-&gt;active, inode_t, list);</div><div class='add'>+            /* forget and unref the inode to retire and add it to</div><div class='add'>+             * purge list. By this time there should not be any</div><div class='add'>+             * inodes present in the active list except for root</div><div class='add'>+             * inode. Its a ref_leak otherwise. */</div><div class='add'>+            if (trav != inode_table-&gt;root)</div><div class='add'>+                gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                                 LG_MSG_REF_COUNT,</div><div class='add'>+                                 "Active inode(%p) with refcount"</div><div class='add'>+                                 "(%d) found during cleanup",</div><div class='add'>+                                 trav, trav-&gt;ref);</div><div class='add'>+            __inode_forget(trav, 0);</div><div class='add'>+            __inode_ref_reduce_by_n(trav, 0);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;inode_table-&gt;lock);</div><div class='add'>+</div><div class='add'>+    inode_table_prune(inode_table);</div><div class='add'>+</div><div class='add'>+    GF_FREE(inode_table-&gt;inode_hash);</div><div class='add'>+    GF_FREE(inode_table-&gt;name_hash);</div><div class='add'>+    if (inode_table-&gt;dentry_pool)</div><div class='add'>+        mem_pool_destroy(inode_table-&gt;dentry_pool);</div><div class='add'>+    if (inode_table-&gt;inode_pool)</div><div class='add'>+        mem_pool_destroy(inode_table-&gt;inode_pool);</div><div class='add'>+    if (inode_table-&gt;fd_mem_pool)</div><div class='add'>+        mem_pool_destroy(inode_table-&gt;fd_mem_pool);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_destroy(&amp;inode_table-&gt;lock);</div><div class='add'>+</div><div class='add'>+    GF_FREE(inode_table-&gt;name);</div><div class='add'>+    GF_FREE(inode_table);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-inode_from_path (inode_table_t *itable, const char *path)</div><div class='add'>+inode_from_path(inode_table_t *itable, const char *path)</div><div class='ctx'> {</div><div class='del'>-        inode_t  *inode = NULL;</div><div class='del'>-        inode_t  *parent = NULL;</div><div class='del'>-        inode_t  *root = NULL;</div><div class='del'>-        inode_t  *curr = NULL;</div><div class='del'>-        char     *pathname = NULL;</div><div class='del'>-        char     *component = NULL, *next_component = NULL;</div><div class='del'>-        char     *strtokptr = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    inode_t *root = NULL;</div><div class='add'>+    inode_t *curr = NULL;</div><div class='add'>+    char *pathname = NULL;</div><div class='add'>+    char *component = NULL, *next_component = NULL;</div><div class='add'>+    char *strtokptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!itable || !path)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!itable || !path)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        /* top-down approach */</div><div class='del'>-        pathname = gf_strdup (path);</div><div class='del'>-        if (pathname == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* top-down approach */</div><div class='add'>+    pathname = gf_strdup(path);</div><div class='add'>+    if (pathname == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        root = itable-&gt;root;</div><div class='del'>-        parent = inode_ref (root);</div><div class='del'>-        component = strtok_r (pathname, "/", &amp;strtokptr);</div><div class='add'>+    root = itable-&gt;root;</div><div class='add'>+    parent = inode_ref(root);</div><div class='add'>+    component = strtok_r(pathname, "/", &amp;strtokptr);</div><div class='ctx'> </div><div class='del'>-        if (component == NULL)</div><div class='del'>-                /* root inode */</div><div class='del'>-                inode = inode_ref (parent);</div><div class='add'>+    if (component == NULL)</div><div class='add'>+        /* root inode */</div><div class='add'>+        inode = inode_ref(parent);</div><div class='ctx'> </div><div class='del'>-        while (component) {</div><div class='del'>-                curr = inode_grep (itable, parent, component);</div><div class='add'>+    while (component) {</div><div class='add'>+        curr = inode_grep(itable, parent, component);</div><div class='ctx'> </div><div class='del'>-                if (curr == NULL) {</div><div class='del'>-                        strtok_r (NULL, "/", &amp;strtokptr);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                next_component = strtok_r (NULL, "/", &amp;strtokptr);</div><div class='add'>+        if (curr == NULL) {</div><div class='add'>+            strtok_r(NULL, "/", &amp;strtokptr);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (next_component) {</div><div class='del'>-                        inode_unref (parent);</div><div class='del'>-                        parent = curr;</div><div class='del'>-                        curr = NULL;</div><div class='del'>-                } else {</div><div class='del'>-                        inode = curr;</div><div class='del'>-                }</div><div class='add'>+        next_component = strtok_r(NULL, "/", &amp;strtokptr);</div><div class='ctx'> </div><div class='del'>-                component = next_component;</div><div class='add'>+        if (next_component) {</div><div class='add'>+            inode_unref(parent);</div><div class='add'>+            parent = curr;</div><div class='add'>+            curr = NULL;</div><div class='add'>+        } else {</div><div class='add'>+            inode = curr;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                inode_unref (parent);</div><div class='add'>+        component = next_component;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (parent)</div><div class='add'>+        inode_unref(parent);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (pathname);</div><div class='add'>+    GF_FREE(pathname);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_set_need_lookup (inode_t *inode, xlator_t *this)</div><div class='add'>+inode_set_need_lookup(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        uint64_t  need_lookup = LOOKUP_NEEDED;</div><div class='add'>+    uint64_t need_lookup = LOOKUP_NEEDED;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !this)</div><div class='del'>-                return;</div><div class='add'>+    if (!inode || !this)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        inode_ctx_set (inode, this, &amp;need_lookup);</div><div class='add'>+    inode_ctx_set(inode, this, &amp;need_lookup);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function behaviour:</div><div class='hunk'>@@ -1947,264 +1903,259 @@ inode_set_need_lookup (inode_t *inode, xlator_t *this)</div><div class='ctx'>  * needed.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-inode_needs_lookup (inode_t *inode, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        uint64_t     need_lookup = 0;</div><div class='del'>-        gf_boolean_t ret         = _gf_false;</div><div class='del'>-        int          op_ret      = -1;</div><div class='del'>-</div><div class='del'>-        if (!inode || !this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        op_ret = inode_ctx_get (inode, this, &amp;need_lookup);</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-        } else if (need_lookup == LOOKUP_NEEDED) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-                need_lookup = LOOKUP_NOT_NEEDED;</div><div class='del'>-                inode_ctx_set (inode, this, &amp;need_lookup);</div><div class='del'>-        }</div><div class='add'>+inode_needs_lookup(inode_t *inode, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    uint64_t need_lookup = 0;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    int op_ret = -1;</div><div class='ctx'> </div><div class='add'>+    if (!inode || !this)</div><div class='ctx'>         return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-__inode_ctx_set2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p,</div><div class='del'>-                  uint64_t *value2_p)</div><div class='del'>-{</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int set_idx = -1;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator || !inode-&gt;_ctx)</div><div class='del'>-                return -1;</div><div class='add'>+    op_ret = inode_ctx_get(inode, this, &amp;need_lookup);</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+    } else if (need_lookup == LOOKUP_NEEDED) {</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+        need_lookup = LOOKUP_NOT_NEEDED;</div><div class='add'>+        inode_ctx_set(inode, this, &amp;need_lookup);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        set_idx = __inode_get_xl_index (inode, xlator);</div><div class='del'>-        if (set_idx == -1) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;;</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        inode-&gt;_ctx[set_idx].xl_key = xlator;</div><div class='del'>-        if (value1_p)</div><div class='del'>-                inode-&gt;_ctx[set_idx].value1 = *value1_p;</div><div class='del'>-        if (value2_p)</div><div class='del'>-                inode-&gt;_ctx[set_idx].value2 = *value2_p;</div><div class='add'>+int</div><div class='add'>+__inode_ctx_set2(inode_t *inode, xlator_t *xlator, uint64_t *value1_p,</div><div class='add'>+                 uint64_t *value2_p)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int set_idx = -1;</div><div class='add'>+</div><div class='add'>+    if (!inode || !xlator || !inode-&gt;_ctx)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    set_idx = __inode_get_xl_index(inode, xlator);</div><div class='add'>+    if (set_idx == -1) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+        ;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode-&gt;_ctx[set_idx].xl_key = xlator;</div><div class='add'>+    if (value1_p)</div><div class='add'>+        inode-&gt;_ctx[set_idx].value1 = *value1_p;</div><div class='add'>+    if (value2_p)</div><div class='add'>+        inode-&gt;_ctx[set_idx].value2 = *value2_p;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__inode_ctx_set0 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p)</div><div class='add'>+__inode_ctx_set0(inode_t *inode, xlator_t *xlator, uint64_t *value1_p)</div><div class='ctx'> {</div><div class='del'>-        return __inode_ctx_set2 (inode, xlator, value1_p, NULL);</div><div class='add'>+    return __inode_ctx_set2(inode, xlator, value1_p, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__inode_ctx_set1 (inode_t *inode, xlator_t *xlator, uint64_t *value2_p)</div><div class='add'>+__inode_ctx_set1(inode_t *inode, xlator_t *xlator, uint64_t *value2_p)</div><div class='ctx'> {</div><div class='del'>-        return __inode_ctx_set2 (inode, xlator, NULL, value2_p);</div><div class='add'>+    return __inode_ctx_set2(inode, xlator, NULL, value2_p);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_ctx_set2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p,</div><div class='del'>-                uint64_t *value2_p)</div><div class='add'>+inode_ctx_set2(inode_t *inode, xlator_t *xlator, uint64_t *value1_p,</div><div class='add'>+               uint64_t *value2_p)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_set2 (inode, xlator, value1_p, value2_p);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_set2(inode, xlator, value1_p, value2_p);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_ctx_set1 (inode_t *inode, xlator_t *xlator, uint64_t *value2_p)</div><div class='add'>+inode_ctx_set1(inode_t *inode, xlator_t *xlator, uint64_t *value2_p)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_set1 (inode, xlator, value2_p);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_set1(inode, xlator, value2_p);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-inode_ctx_set0 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p)</div><div class='add'>+inode_ctx_set0(inode_t *inode, xlator_t *xlator, uint64_t *value1_p)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_set0 (inode, xlator, value1_p);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_set0(inode, xlator, value1_p);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__inode_ctx_get2 (inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='del'>-                  uint64_t *value2)</div><div class='add'>+__inode_ctx_get2(inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='add'>+                 uint64_t *value2)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator || !inode-&gt;_ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!inode || !xlator || !inode-&gt;_ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        index = xlator-&gt;xl_id;</div><div class='del'>-        if (inode-&gt;_ctx[index].xl_key != xlator)</div><div class='del'>-                goto out;</div><div class='add'>+    index = xlator-&gt;xl_id;</div><div class='add'>+    if (inode-&gt;_ctx[index].xl_key != xlator)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (inode-&gt;_ctx[index].value1) {</div><div class='del'>-                if (value1) {</div><div class='del'>-                        *value1 = inode-&gt;_ctx[index].value1;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+    if (inode-&gt;_ctx[index].value1) {</div><div class='add'>+        if (value1) {</div><div class='add'>+            *value1 = inode-&gt;_ctx[index].value1;</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        if (inode-&gt;_ctx[index].value2) {</div><div class='del'>-                if (value2) {</div><div class='del'>-                        *value2 = inode-&gt;_ctx[index].value2;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    if (inode-&gt;_ctx[index].value2) {</div><div class='add'>+        if (value2) {</div><div class='add'>+            *value2 = inode-&gt;_ctx[index].value2;</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__inode_ctx_get0 (inode_t *inode, xlator_t *xlator, uint64_t *value1)</div><div class='add'>+__inode_ctx_get0(inode_t *inode, xlator_t *xlator, uint64_t *value1)</div><div class='ctx'> {</div><div class='del'>-        uint64_t tmp_value = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    uint64_t tmp_value = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret =  __inode_ctx_get2 (inode, xlator, &amp;tmp_value, NULL);</div><div class='del'>-        if (!ret &amp;&amp; value1)</div><div class='del'>-                *value1 = tmp_value;</div><div class='add'>+    ret = __inode_ctx_get2(inode, xlator, &amp;tmp_value, NULL);</div><div class='add'>+    if (!ret &amp;&amp; value1)</div><div class='add'>+        *value1 = tmp_value;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__inode_ctx_get1 (inode_t *inode, xlator_t *xlator, uint64_t *value2)</div><div class='add'>+__inode_ctx_get1(inode_t *inode, xlator_t *xlator, uint64_t *value2)</div><div class='ctx'> {</div><div class='del'>-        uint64_t tmp_value = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    uint64_t tmp_value = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret =  __inode_ctx_get2 (inode, xlator, NULL, &amp;tmp_value);</div><div class='del'>-        if (!ret &amp;&amp; value2)</div><div class='del'>-                *value2 = tmp_value;</div><div class='add'>+    ret = __inode_ctx_get2(inode, xlator, NULL, &amp;tmp_value);</div><div class='add'>+    if (!ret &amp;&amp; value2)</div><div class='add'>+        *value2 = tmp_value;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_ctx_get2 (inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='del'>-                uint64_t *value2)</div><div class='add'>+inode_ctx_get2(inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='add'>+               uint64_t *value2)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get2 (inode, xlator, value1, value2);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get2(inode, xlator, value1, value2);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_ctx_get1 (inode_t *inode, xlator_t *xlator, uint64_t *value2)</div><div class='add'>+inode_ctx_get1(inode_t *inode, xlator_t *xlator, uint64_t *value2)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get1 (inode, xlator, value2);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get1(inode, xlator, value2);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_ctx_get0 (inode_t *inode, xlator_t *xlator, uint64_t *value1)</div><div class='add'>+inode_ctx_get0(inode_t *inode, xlator_t *xlator, uint64_t *value1)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get0 (inode, xlator, value1);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get0(inode, xlator, value1);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-inode_ctx_del2 (inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='del'>-                uint64_t *value2)</div><div class='add'>+inode_ctx_del2(inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='add'>+               uint64_t *value2)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (!inode-&gt;_ctx)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!inode-&gt;_ctx)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                index = xlator-&gt;xl_id;</div><div class='del'>-                if (inode-&gt;_ctx[index].xl_key != xlator) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        index = xlator-&gt;xl_id;</div><div class='add'>+        if (inode-&gt;_ctx[index].xl_key != xlator) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (inode-&gt;_ctx[index].value1 &amp;&amp; value1)</div><div class='del'>-                        *value1 = inode-&gt;_ctx[index].value1;</div><div class='del'>-                if (inode-&gt;_ctx[index].value2 &amp;&amp; value2)</div><div class='del'>-                        *value2 = inode-&gt;_ctx[index].value2;</div><div class='add'>+        if (inode-&gt;_ctx[index].value1 &amp;&amp; value1)</div><div class='add'>+            *value1 = inode-&gt;_ctx[index].value1;</div><div class='add'>+        if (inode-&gt;_ctx[index].value2 &amp;&amp; value2)</div><div class='add'>+            *value2 = inode-&gt;_ctx[index].value2;</div><div class='ctx'> </div><div class='del'>-                inode-&gt;_ctx[index].key    = 0;</div><div class='del'>-                inode-&gt;_ctx[index].xl_key = NULL;</div><div class='del'>-                inode-&gt;_ctx[index].value1 = 0;</div><div class='del'>-                inode-&gt;_ctx[index].value2 = 0;</div><div class='del'>-        }</div><div class='add'>+        inode-&gt;_ctx[index].key = 0;</div><div class='add'>+        inode-&gt;_ctx[index].xl_key = NULL;</div><div class='add'>+        inode-&gt;_ctx[index].value1 = 0;</div><div class='add'>+        inode-&gt;_ctx[index].value2 = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* function behavior:</div><div class='hunk'>@@ -2215,348 +2166,344 @@ unlock:</div><div class='ctx'>  - if both are set, both fields are reset.</div><div class='ctx'> */</div><div class='ctx'> static int</div><div class='del'>-__inode_ctx_reset2 (inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='del'>-                    uint64_t *value2)</div><div class='add'>+__inode_ctx_reset2(inode_t *inode, xlator_t *xlator, uint64_t *value1,</div><div class='add'>+                   uint64_t *value2)</div><div class='ctx'> {</div><div class='del'>-        int index = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !xlator)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!inode || !xlator)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                index = xlator-&gt;xl_id;</div><div class='del'>-                if (inode-&gt;_ctx[index].xl_key != xlator) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        index = xlator-&gt;xl_id;</div><div class='add'>+        if (inode-&gt;_ctx[index].xl_key != xlator) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (inode-&gt;_ctx[index].value1 &amp;&amp; value1) {</div><div class='del'>-                        *value1 = inode-&gt;_ctx[index].value1;</div><div class='del'>-                        inode-&gt;_ctx[index].value1 = 0;</div><div class='del'>-                }</div><div class='del'>-                if (inode-&gt;_ctx[index].value2 &amp;&amp; value2) {</div><div class='del'>-                        *value2 = inode-&gt;_ctx[index].value2;</div><div class='del'>-                        inode-&gt;_ctx[index].value2 = 0;</div><div class='del'>-                }</div><div class='add'>+        if (inode-&gt;_ctx[index].value1 &amp;&amp; value1) {</div><div class='add'>+            *value1 = inode-&gt;_ctx[index].value1;</div><div class='add'>+            inode-&gt;_ctx[index].value1 = 0;</div><div class='add'>+        }</div><div class='add'>+        if (inode-&gt;_ctx[index].value2 &amp;&amp; value2) {</div><div class='add'>+            *value2 = inode-&gt;_ctx[index].value2;</div><div class='add'>+            inode-&gt;_ctx[index].value2 = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_ctx_reset2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p,</div><div class='del'>-                  uint64_t *value2_p)</div><div class='del'>-{</div><div class='del'>-        uint64_t tmp_value1 = 0;</div><div class='del'>-        uint64_t tmp_value2 = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret =  __inode_ctx_reset2 (inode, xlator, &amp;tmp_value1, &amp;tmp_value2);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                if (value1_p)</div><div class='del'>-                        *value1_p = tmp_value1;</div><div class='del'>-                if (value2_p)</div><div class='del'>-                        *value2_p = tmp_value2;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+inode_ctx_reset2(inode_t *inode, xlator_t *xlator, uint64_t *value1_p,</div><div class='add'>+                 uint64_t *value2_p)</div><div class='add'>+{</div><div class='add'>+    uint64_t tmp_value1 = 0;</div><div class='add'>+    uint64_t tmp_value2 = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_reset2(inode, xlator, &amp;tmp_value1, &amp;tmp_value2);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        if (value1_p)</div><div class='add'>+            *value1_p = tmp_value1;</div><div class='add'>+        if (value2_p)</div><div class='add'>+            *value2_p = tmp_value2;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_ctx_reset1 (inode_t *inode, xlator_t *xlator, uint64_t *value2_p)</div><div class='add'>+inode_ctx_reset1(inode_t *inode, xlator_t *xlator, uint64_t *value2_p)</div><div class='ctx'> {</div><div class='del'>-        uint64_t tmp_value2 = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    uint64_t tmp_value2 = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = __inode_ctx_reset2 (inode, xlator, NULL, &amp;tmp_value2);</div><div class='add'>+    ret = __inode_ctx_reset2(inode, xlator, NULL, &amp;tmp_value2);</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; value2_p)</div><div class='del'>-                *value2_p = tmp_value2;</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (!ret &amp;&amp; value2_p)</div><div class='add'>+        *value2_p = tmp_value2;</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-inode_ctx_reset0 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p)</div><div class='add'>+inode_ctx_reset0(inode_t *inode, xlator_t *xlator, uint64_t *value1_p)</div><div class='ctx'> {</div><div class='del'>-        uint64_t tmp_value1 = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    uint64_t tmp_value1 = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = __inode_ctx_reset2 (inode, xlator, &amp;tmp_value1, NULL);</div><div class='add'>+    ret = __inode_ctx_reset2(inode, xlator, &amp;tmp_value1, NULL);</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; value1_p)</div><div class='del'>-                *value1_p = tmp_value1;</div><div class='add'>+    if (!ret &amp;&amp; value1_p)</div><div class='add'>+        *value1_p = tmp_value1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-inode_is_linked (inode_t *inode)</div><div class='add'>+inode_is_linked(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int            ret   = 0;</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  LG_MSG_INODE_NOT_FOUND, "inode not found");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode not found");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        table = inode-&gt;table;</div><div class='add'>+    table = inode-&gt;table;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __is_inode_hashed (inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;table-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __is_inode_hashed(inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;table-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_dump (inode_t *inode, char *prefix)</div><div class='del'>-{</div><div class='del'>-        int                ret       = -1;</div><div class='del'>-        xlator_t          *xl        = NULL;</div><div class='del'>-        int                i         = 0;</div><div class='del'>-        fd_t              *fd        = NULL;</div><div class='del'>-        struct _inode_ctx *inode_ctx = NULL;</div><div class='del'>-        struct list_head   fd_list;</div><div class='del'>-        int                ref       = 0;</div><div class='del'>-        char               key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-</div><div class='del'>-        if (!inode)</div><div class='del'>-                return;</div><div class='add'>+inode_dump(inode_t *inode, char *prefix)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct _inode_ctx *inode_ctx = NULL;</div><div class='add'>+    struct list_head fd_list;</div><div class='add'>+    int ref = 0;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+</div><div class='add'>+    if (!inode)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;fd_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fd_list);</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        {</div><div class='del'>-                gf_proc_dump_write("gfid", "%s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                gf_proc_dump_write("nlookup", "%ld", inode-&gt;nlookup);</div><div class='del'>-                gf_proc_dump_write("fd-count", "%u", inode-&gt;fd_count);</div><div class='del'>-                gf_proc_dump_write("active-fd-count", "%u",</div><div class='del'>-                                   inode-&gt;active_fd_count);</div><div class='del'>-                gf_proc_dump_write("ref", "%u", inode-&gt;ref);</div><div class='del'>-                gf_proc_dump_write("ia_type", "%d", inode-&gt;ia_type);</div><div class='del'>-                if (inode-&gt;_ctx) {</div><div class='del'>-                        inode_ctx = GF_CALLOC (inode-&gt;table-&gt;ctxcount,</div><div class='del'>-                                               sizeof (*inode_ctx),</div><div class='del'>-                                               gf_common_mt_inode_ctx);</div><div class='del'>-                        if (inode_ctx == NULL) {</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        for (i = 0; i &lt; inode-&gt;table-&gt;ctxcount;</div><div class='del'>-                             i++) {</div><div class='del'>-                                inode_ctx[i] = inode-&gt;_ctx[i];</div><div class='del'>-                                xl = inode_ctx[i].xl_key;</div><div class='del'>-                                ref = inode_ctx[i].ref;</div><div class='del'>-                                if (ref != 0 &amp;&amp; xl) {</div><div class='del'>-                                        gf_proc_dump_build_key (key,</div><div class='del'>-                                                                "ref_by_xl:",</div><div class='del'>-                                                                "%s",</div><div class='del'>-                                                                xl-&gt;name);</div><div class='del'>-                                        gf_proc_dump_write (key, "%d", ref);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    ret = TRY_LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_write("gfid", "%s", uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        gf_proc_dump_write("nlookup", "%ld", inode-&gt;nlookup);</div><div class='add'>+        gf_proc_dump_write("fd-count", "%u", inode-&gt;fd_count);</div><div class='add'>+        gf_proc_dump_write("active-fd-count", "%u", inode-&gt;active_fd_count);</div><div class='add'>+        gf_proc_dump_write("ref", "%u", inode-&gt;ref);</div><div class='add'>+        gf_proc_dump_write("ia_type", "%d", inode-&gt;ia_type);</div><div class='add'>+        if (inode-&gt;_ctx) {</div><div class='add'>+            inode_ctx = GF_CALLOC(inode-&gt;table-&gt;ctxcount, sizeof(*inode_ctx),</div><div class='add'>+                                  gf_common_mt_inode_ctx);</div><div class='add'>+            if (inode_ctx == NULL) {</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; inode-&gt;table-&gt;ctxcount; i++) {</div><div class='add'>+                inode_ctx[i] = inode-&gt;_ctx[i];</div><div class='add'>+                xl = inode_ctx[i].xl_key;</div><div class='add'>+                ref = inode_ctx[i].ref;</div><div class='add'>+                if (ref != 0 &amp;&amp; xl) {</div><div class='add'>+                    gf_proc_dump_build_key(key, "ref_by_xl:", "%s", xl-&gt;name);</div><div class='add'>+                    gf_proc_dump_write(key, "%d", ref);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (dump_options.xl_options.dump_fdctx != _gf_true)</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='add'>+        if (dump_options.xl_options.dump_fdctx != _gf_true)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry (fd, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-                        fd_ctx_dump (fd, prefix);</div><div class='del'>-                }</div><div class='add'>+        list_for_each_entry(fd, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+        {</div><div class='add'>+            fd_ctx_dump(fd, prefix);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (inode_ctx &amp;&amp; (dump_options.xl_options.dump_inodectx == _gf_true)) {</div><div class='del'>-                for (i = 0; i &lt; inode-&gt;table-&gt;ctxcount; i++) {</div><div class='del'>-                        if (inode_ctx[i].xl_key) {</div><div class='del'>-                                xl = (xlator_t *)(long)inode_ctx[i].xl_key;</div><div class='del'>-                                if (xl-&gt;dumpops &amp;&amp; xl-&gt;dumpops-&gt;inodectx)</div><div class='del'>-                                        xl-&gt;dumpops-&gt;inodectx (xl, inode);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (inode_ctx &amp;&amp; (dump_options.xl_options.dump_inodectx == _gf_true)) {</div><div class='add'>+        for (i = 0; i &lt; inode-&gt;table-&gt;ctxcount; i++) {</div><div class='add'>+            if (inode_ctx[i].xl_key) {</div><div class='add'>+                xl = (xlator_t *)(long)inode_ctx[i].xl_key;</div><div class='add'>+                if (xl-&gt;dumpops &amp;&amp; xl-&gt;dumpops-&gt;inodectx)</div><div class='add'>+                    xl-&gt;dumpops-&gt;inodectx(xl, inode);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (inode_ctx);</div><div class='add'>+    GF_FREE(inode_ctx);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_table_dump (inode_table_t *itable, char *prefix)</div><div class='add'>+inode_table_dump(inode_table_t *itable, char *prefix)</div><div class='ctx'> {</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        char    key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int     ret = 0;</div><div class='del'>-</div><div class='del'>-        if (!itable)</div><div class='del'>-                return;</div><div class='add'>+    if (!itable)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_mutex_trylock(&amp;itable-&gt;lock);</div><div class='add'>+    ret = pthread_mutex_trylock(&amp;itable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "hashsize");</div><div class='del'>-        gf_proc_dump_write(key, "%d", itable-&gt;hashsize);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "name");</div><div class='del'>-        gf_proc_dump_write(key, "%s", itable-&gt;name);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "hashsize");</div><div class='add'>+    gf_proc_dump_write(key, "%d", itable-&gt;hashsize);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "name");</div><div class='add'>+    gf_proc_dump_write(key, "%s", itable-&gt;name);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "lru_limit");</div><div class='del'>-        gf_proc_dump_write(key, "%d", itable-&gt;lru_limit);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "active_size");</div><div class='del'>-        gf_proc_dump_write(key, "%d", itable-&gt;active_size);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "lru_size");</div><div class='del'>-        gf_proc_dump_write(key, "%d", itable-&gt;lru_size);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "purge_size");</div><div class='del'>-        gf_proc_dump_write(key, "%d", itable-&gt;purge_size);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "lru_limit");</div><div class='add'>+    gf_proc_dump_write(key, "%d", itable-&gt;lru_limit);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "active_size");</div><div class='add'>+    gf_proc_dump_write(key, "%d", itable-&gt;active_size);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "lru_size");</div><div class='add'>+    gf_proc_dump_write(key, "%d", itable-&gt;lru_size);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "purge_size");</div><div class='add'>+    gf_proc_dump_write(key, "%d", itable-&gt;purge_size);</div><div class='ctx'> </div><div class='del'>-        INODE_DUMP_LIST(&amp;itable-&gt;active, key, prefix, "active");</div><div class='del'>-        INODE_DUMP_LIST(&amp;itable-&gt;lru, key, prefix, "lru");</div><div class='del'>-        INODE_DUMP_LIST(&amp;itable-&gt;purge, key, prefix, "purge");</div><div class='add'>+    INODE_DUMP_LIST(&amp;itable-&gt;active, key, prefix, "active");</div><div class='add'>+    INODE_DUMP_LIST(&amp;itable-&gt;lru, key, prefix, "lru");</div><div class='add'>+    INODE_DUMP_LIST(&amp;itable-&gt;purge, key, prefix, "purge");</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock(&amp;itable-&gt;lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;itable-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_dump_to_dict (inode_t *inode, char *prefix, dict_t *dict)</div><div class='add'>+inode_dump_to_dict(inode_t *inode, char *prefix, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = TRY_LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.gfid", prefix);</div><div class='del'>-        ret = dict_set_dynstr (dict, key, gf_strdup (uuid_utoa (inode-&gt;gfid)));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.gfid", prefix);</div><div class='add'>+    ret = dict_set_dynstr(dict, key, gf_strdup(uuid_utoa(inode-&gt;gfid)));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.nlookup", prefix);</div><div class='del'>-        ret = dict_set_uint64 (dict, key, inode-&gt;nlookup);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.nlookup", prefix);</div><div class='add'>+    ret = dict_set_uint64(dict, key, inode-&gt;nlookup);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.ref", prefix);</div><div class='del'>-        ret = dict_set_uint32 (dict, key, inode-&gt;ref);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.ref", prefix);</div><div class='add'>+    ret = dict_set_uint32(dict, key, inode-&gt;ref);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.ia_type", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, inode-&gt;ia_type);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.ia_type", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, inode-&gt;ia_type);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-        return;</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-inode_table_dump_to_dict (inode_table_t *itable, char *prefix, dict_t *dict)</div><div class='add'>+inode_table_dump_to_dict(inode_table_t *itable, char *prefix, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        int             count = 0;</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_trylock (&amp;itable-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.itable.active_size", prefix);</div><div class='del'>-        ret = dict_set_uint32 (dict, key, itable-&gt;active_size);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.itable.lru_size", prefix);</div><div class='del'>-        ret = dict_set_uint32 (dict, key, itable-&gt;lru_size);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.itable.purge_size", prefix);</div><div class='del'>-        ret = dict_set_uint32 (dict, key, itable-&gt;purge_size);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (inode, &amp;itable-&gt;active, list) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.itable.active%d", prefix,</div><div class='del'>-                          count++);</div><div class='del'>-                inode_dump_to_dict (inode, key, dict);</div><div class='del'>-        }</div><div class='del'>-        count = 0;</div><div class='add'>+    ret = pthread_mutex_trylock(&amp;itable-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (inode, &amp;itable-&gt;lru, list) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.itable.lru%d", prefix,</div><div class='del'>-                          count++);</div><div class='del'>-                inode_dump_to_dict (inode, key, dict);</div><div class='del'>-        }</div><div class='del'>-        count = 0;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (inode, &amp;itable-&gt;purge, list) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.itable.purge%d", prefix,</div><div class='del'>-                          count++);</div><div class='del'>-                inode_dump_to_dict (inode, key, dict);</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.itable.active_size", prefix);</div><div class='add'>+    ret = dict_set_uint32(dict, key, itable-&gt;active_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.itable.lru_size", prefix);</div><div class='add'>+    ret = dict_set_uint32(dict, key, itable-&gt;lru_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.itable.purge_size", prefix);</div><div class='add'>+    ret = dict_set_uint32(dict, key, itable-&gt;purge_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(inode, &amp;itable-&gt;active, list)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.itable.active%d", prefix, count++);</div><div class='add'>+        inode_dump_to_dict(inode, key, dict);</div><div class='add'>+    }</div><div class='add'>+    count = 0;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(inode, &amp;itable-&gt;lru, list)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.itable.lru%d", prefix, count++);</div><div class='add'>+        inode_dump_to_dict(inode, key, dict);</div><div class='add'>+    }</div><div class='add'>+    count = 0;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(inode, &amp;itable-&gt;purge, list)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.itable.purge%d", prefix, count++);</div><div class='add'>+        inode_dump_to_dict(inode, key, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        pthread_mutex_unlock (&amp;itable-&gt;lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;itable-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-inode_ctx_size (inode_t *inode)</div><div class='add'>+inode_ctx_size(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int       i    = 0;</div><div class='del'>-        size_t    size = 0;</div><div class='del'>-        xlator_t *xl   = NULL, *old_THIS = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t size = 0;</div><div class='add'>+    xlator_t *xl = NULL, *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!inode)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; inode-&gt;table-&gt;ctxcount; i++) {</div><div class='del'>-                        if (!inode-&gt;_ctx[i].xl_key)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        xl = (xlator_t *)(long)inode-&gt;_ctx[i].xl_key;</div><div class='del'>-                        old_THIS = THIS;</div><div class='del'>-                        THIS = xl;</div><div class='del'>-</div><div class='del'>-                        /* If inode ref is taken when THIS is global xlator,</div><div class='del'>-                         * the ctx xl_key is set, but the value is NULL.</div><div class='del'>-                         * For global xlator the cbks can be NULL, hence check</div><div class='del'>-                         * for the same */</div><div class='del'>-                        if (!xl-&gt;cbks) {</div><div class='del'>-                                THIS = old_THIS;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (xl-&gt;cbks-&gt;ictxsize)</div><div class='del'>-                                size += xl-&gt;cbks-&gt;ictxsize (xl, inode);</div><div class='del'>-</div><div class='del'>-                        THIS = old_THIS;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; inode-&gt;table-&gt;ctxcount; i++) {</div><div class='add'>+            if (!inode-&gt;_ctx[i].xl_key)</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            xl = (xlator_t *)(long)inode-&gt;_ctx[i].xl_key;</div><div class='add'>+            old_THIS = THIS;</div><div class='add'>+            THIS = xl;</div><div class='add'>+</div><div class='add'>+            /* If inode ref is taken when THIS is global xlator,</div><div class='add'>+             * the ctx xl_key is set, but the value is NULL.</div><div class='add'>+             * For global xlator the cbks can be NULL, hence check</div><div class='add'>+             * for the same */</div><div class='add'>+            if (!xl-&gt;cbks) {</div><div class='add'>+                THIS = old_THIS;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (xl-&gt;cbks-&gt;ictxsize)</div><div class='add'>+                size += xl-&gt;cbks-&gt;ictxsize(xl, inode);</div><div class='add'>+</div><div class='add'>+            THIS = old_THIS;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* *</div><div class='hunk'>@@ -2566,23 +2513,24 @@ out:</div><div class='ctx'>  * not possible(no hardlinks)</div><div class='ctx'>  * */</div><div class='ctx'> void</div><div class='del'>-inode_find_directory_name (inode_t *inode, const char **name) {</div><div class='del'>-        dentry_t *dentry = NULL;</div><div class='add'>+inode_find_directory_name(inode_t *inode, const char **name)</div><div class='add'>+{</div><div class='add'>+    dentry_t *dentry = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("inode", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("inode", name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("inode", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("inode", name, out);</div><div class='ctx'> </div><div class='del'>-        if (!IA_ISDIR (inode-&gt;ia_type))</div><div class='del'>-                return;</div><div class='add'>+    if (!IA_ISDIR(inode-&gt;ia_type))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;inode-&gt;table-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                dentry = __dentry_search_arbit (inode);</div><div class='del'>-                if (dentry) {</div><div class='del'>-                        *name = dentry-&gt;name;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;inode-&gt;table-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        dentry = __dentry_search_arbit(inode);</div><div class='add'>+        if (dentry) {</div><div class='add'>+            *name = dentry-&gt;name;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;inode-&gt;table-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;inode-&gt;table-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/iobuf.c b/libglusterfs/src/iobuf.c<br/>index b2b4da1c111..8682420d8f8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/iobuf.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/iobuf.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/iobuf.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/iobuf.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "iobuf.h"</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='hunk'>@@ -18,1240 +17,1204 @@</div><div class='ctx'>   TODO: implement destroy margins and prefetching of arenas</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-#define IOBUF_ARENA_MAX_INDEX  (sizeof (gf_iobuf_init_config) /         \</div><div class='del'>-                                (sizeof (struct iobuf_init_config)))</div><div class='add'>+#define IOBUF_ARENA_MAX_INDEX                                                  \</div><div class='add'>+    (sizeof(gf_iobuf_init_config) / (sizeof(struct iobuf_init_config)))</div><div class='ctx'> </div><div class='ctx'> /* Make sure this array is sorted based on pagesize */</div><div class='ctx'> struct iobuf_init_config gf_iobuf_init_config[] = {</div><div class='del'>-        /* { pagesize, num_pages }, */</div><div class='del'>-        {128, 1024},</div><div class='del'>-        {512, 512},</div><div class='del'>-        {2 * 1024, 512},</div><div class='del'>-        {8 * 1024, 128},</div><div class='del'>-        {32 * 1024, 64},</div><div class='del'>-        {128 * 1024, 32},</div><div class='del'>-        {256 * 1024, 8},</div><div class='del'>-        {1 * 1024 * 1024, 2},</div><div class='add'>+    /* { pagesize, num_pages }, */</div><div class='add'>+    {128, 1024},     {512, 512},       {2 * 1024, 512}, {8 * 1024, 128},</div><div class='add'>+    {32 * 1024, 64}, {128 * 1024, 32}, {256 * 1024, 8}, {1 * 1024 * 1024, 2},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_iobuf_get_arena_index (size_t page_size)</div><div class='add'>+gf_iobuf_get_arena_index(size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        int i = -1;</div><div class='add'>+    int i = -1;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='del'>-                if (page_size &lt;= gf_iobuf_init_config[i].pagesize)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='add'>+        if (page_size &lt;= gf_iobuf_init_config[i].pagesize)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (i &gt;= IOBUF_ARENA_MAX_INDEX)</div><div class='del'>-                i = -1;</div><div class='add'>+    if (i &gt;= IOBUF_ARENA_MAX_INDEX)</div><div class='add'>+        i = -1;</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> size_t</div><div class='del'>-gf_iobuf_get_pagesize (size_t page_size)</div><div class='add'>+gf_iobuf_get_pagesize(size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        int    i    = 0;</div><div class='del'>-        size_t size = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t size = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='del'>-                size = gf_iobuf_init_config[i].pagesize;</div><div class='del'>-                if (page_size &lt;= size)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='add'>+        size = gf_iobuf_init_config[i].pagesize;</div><div class='add'>+        if (page_size &lt;= size)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (i &gt;= IOBUF_ARENA_MAX_INDEX)</div><div class='del'>-                size = -1;</div><div class='add'>+    if (i &gt;= IOBUF_ARENA_MAX_INDEX)</div><div class='add'>+        size = -1;</div><div class='ctx'> </div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__iobuf_arena_init_iobufs (struct iobuf_arena *iobuf_arena)</div><div class='add'>+__iobuf_arena_init_iobufs(struct iobuf_arena *iobuf_arena)</div><div class='ctx'> {</div><div class='del'>-        int                 iobuf_cnt = 0;</div><div class='del'>-        struct iobuf       *iobuf = NULL;</div><div class='del'>-        int                 offset = 0;</div><div class='del'>-        int                 i = 0;</div><div class='add'>+    int iobuf_cnt = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    int offset = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_arena, out);</div><div class='ctx'> </div><div class='del'>-        iobuf_cnt  = iobuf_arena-&gt;page_count;</div><div class='add'>+    iobuf_cnt = iobuf_arena-&gt;page_count;</div><div class='ctx'> </div><div class='del'>-        iobuf_arena-&gt;iobufs = GF_CALLOC (sizeof (*iobuf), iobuf_cnt,</div><div class='del'>-                                         gf_common_mt_iobuf);</div><div class='del'>-        if (!iobuf_arena-&gt;iobufs)</div><div class='del'>-                return;</div><div class='add'>+    iobuf_arena-&gt;iobufs = GF_CALLOC(sizeof(*iobuf), iobuf_cnt,</div><div class='add'>+                                    gf_common_mt_iobuf);</div><div class='add'>+    if (!iobuf_arena-&gt;iobufs)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        iobuf = iobuf_arena-&gt;iobufs;</div><div class='del'>-        for (i = 0; i &lt; iobuf_cnt; i++) {</div><div class='del'>-                INIT_LIST_HEAD (&amp;iobuf-&gt;list);</div><div class='del'>-                LOCK_INIT (&amp;iobuf-&gt;lock);</div><div class='add'>+    iobuf = iobuf_arena-&gt;iobufs;</div><div class='add'>+    for (i = 0; i &lt; iobuf_cnt; i++) {</div><div class='add'>+        INIT_LIST_HEAD(&amp;iobuf-&gt;list);</div><div class='add'>+        LOCK_INIT(&amp;iobuf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                iobuf-&gt;iobuf_arena = iobuf_arena;</div><div class='add'>+        iobuf-&gt;iobuf_arena = iobuf_arena;</div><div class='ctx'> </div><div class='del'>-                iobuf-&gt;ptr = iobuf_arena-&gt;mem_base + offset;</div><div class='add'>+        iobuf-&gt;ptr = iobuf_arena-&gt;mem_base + offset;</div><div class='ctx'> </div><div class='del'>-                list_add (&amp;iobuf-&gt;list, &amp;iobuf_arena-&gt;passive.list);</div><div class='del'>-                iobuf_arena-&gt;passive_cnt++;</div><div class='add'>+        list_add(&amp;iobuf-&gt;list, &amp;iobuf_arena-&gt;passive.list);</div><div class='add'>+        iobuf_arena-&gt;passive_cnt++;</div><div class='ctx'> </div><div class='del'>-                offset += iobuf_arena-&gt;page_size;</div><div class='del'>-                iobuf++;</div><div class='del'>-        }</div><div class='add'>+        offset += iobuf_arena-&gt;page_size;</div><div class='add'>+        iobuf++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-__iobuf_arena_destroy_iobufs (struct iobuf_arena *iobuf_arena)</div><div class='add'>+__iobuf_arena_destroy_iobufs(struct iobuf_arena *iobuf_arena)</div><div class='ctx'> {</div><div class='del'>-        int                 iobuf_cnt = 0;</div><div class='del'>-        struct iobuf       *iobuf = NULL;</div><div class='del'>-        int                 i = 0;</div><div class='add'>+    int iobuf_cnt = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_arena, out);</div><div class='ctx'> </div><div class='del'>-        iobuf_cnt  = iobuf_arena-&gt;page_count;</div><div class='add'>+    iobuf_cnt = iobuf_arena-&gt;page_count;</div><div class='ctx'> </div><div class='del'>-        if (!iobuf_arena-&gt;iobufs) {</div><div class='del'>-                gf_msg_callingfn (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_IOBUFS_NOT_FOUND, "iobufs not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!iobuf_arena-&gt;iobufs) {</div><div class='add'>+        gf_msg_callingfn(THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_IOBUFS_NOT_FOUND,</div><div class='add'>+                         "iobufs not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobuf = iobuf_arena-&gt;iobufs;</div><div class='del'>-        for (i = 0; i &lt; iobuf_cnt; i++) {</div><div class='del'>-                GF_ASSERT (GF_ATOMIC_GET(iobuf-&gt;ref) == 0);</div><div class='add'>+    iobuf = iobuf_arena-&gt;iobufs;</div><div class='add'>+    for (i = 0; i &lt; iobuf_cnt; i++) {</div><div class='add'>+        GF_ASSERT(GF_ATOMIC_GET(iobuf-&gt;ref) == 0);</div><div class='ctx'> </div><div class='del'>-                LOCK_DESTROY (&amp;iobuf-&gt;lock);</div><div class='del'>-                list_del_init (&amp;iobuf-&gt;list);</div><div class='del'>-                iobuf++;</div><div class='del'>-        }</div><div class='add'>+        LOCK_DESTROY(&amp;iobuf-&gt;lock);</div><div class='add'>+        list_del_init(&amp;iobuf-&gt;list);</div><div class='add'>+        iobuf++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (iobuf_arena-&gt;iobufs);</div><div class='add'>+    GF_FREE(iobuf_arena-&gt;iobufs);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-__iobuf_arena_destroy (struct iobuf_pool *iobuf_pool,</div><div class='del'>-                       struct iobuf_arena *iobuf_arena)</div><div class='add'>+__iobuf_arena_destroy(struct iobuf_pool *iobuf_pool,</div><div class='add'>+                      struct iobuf_arena *iobuf_arena)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_arena, out);</div><div class='ctx'> </div><div class='del'>-        if (iobuf_pool-&gt;rdma_deregistration)</div><div class='del'>-                iobuf_pool-&gt;rdma_deregistration (iobuf_pool-&gt;mr_list,</div><div class='del'>-                                                 iobuf_arena);</div><div class='add'>+    if (iobuf_pool-&gt;rdma_deregistration)</div><div class='add'>+        iobuf_pool-&gt;rdma_deregistration(iobuf_pool-&gt;mr_list, iobuf_arena);</div><div class='ctx'> </div><div class='del'>-        __iobuf_arena_destroy_iobufs (iobuf_arena);</div><div class='add'>+    __iobuf_arena_destroy_iobufs(iobuf_arena);</div><div class='ctx'> </div><div class='del'>-        if (iobuf_arena-&gt;mem_base</div><div class='del'>-            &amp;&amp; iobuf_arena-&gt;mem_base != MAP_FAILED)</div><div class='del'>-                munmap (iobuf_arena-&gt;mem_base, iobuf_arena-&gt;arena_size);</div><div class='add'>+    if (iobuf_arena-&gt;mem_base &amp;&amp; iobuf_arena-&gt;mem_base != MAP_FAILED)</div><div class='add'>+        munmap(iobuf_arena-&gt;mem_base, iobuf_arena-&gt;arena_size);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (iobuf_arena);</div><div class='add'>+    GF_FREE(iobuf_arena);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf_arena *</div><div class='del'>-__iobuf_arena_alloc (struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='del'>-                     int32_t num_iobufs)</div><div class='add'>+__iobuf_arena_alloc(struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='add'>+                    int32_t num_iobufs)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='del'>-        size_t              rounded_size = 0;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    size_t rounded_size = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        iobuf_arena = GF_CALLOC (sizeof (*iobuf_arena), 1,</div><div class='del'>-                                 gf_common_mt_iobuf_arena);</div><div class='del'>-        if (!iobuf_arena)</div><div class='del'>-                goto err;</div><div class='add'>+    iobuf_arena = GF_CALLOC(sizeof(*iobuf_arena), 1, gf_common_mt_iobuf_arena);</div><div class='add'>+    if (!iobuf_arena)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;all_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;active.list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;passive.list);</div><div class='del'>-        iobuf_arena-&gt;iobuf_pool = iobuf_pool;</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;all_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;active.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;passive.list);</div><div class='add'>+    iobuf_arena-&gt;iobuf_pool = iobuf_pool;</div><div class='ctx'> </div><div class='del'>-        rounded_size = gf_iobuf_get_pagesize (page_size);</div><div class='add'>+    rounded_size = gf_iobuf_get_pagesize(page_size);</div><div class='ctx'> </div><div class='del'>-        iobuf_arena-&gt;page_size  = rounded_size;</div><div class='del'>-        iobuf_arena-&gt;page_count = num_iobufs;</div><div class='add'>+    iobuf_arena-&gt;page_size = rounded_size;</div><div class='add'>+    iobuf_arena-&gt;page_count = num_iobufs;</div><div class='ctx'> </div><div class='del'>-        iobuf_arena-&gt;arena_size = rounded_size * num_iobufs;</div><div class='add'>+    iobuf_arena-&gt;arena_size = rounded_size * num_iobufs;</div><div class='ctx'> </div><div class='del'>-        iobuf_arena-&gt;mem_base = mmap (NULL, iobuf_arena-&gt;arena_size,</div><div class='del'>-                                      PROT_READ|PROT_WRITE,</div><div class='del'>-                                      MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);</div><div class='del'>-        if (iobuf_arena-&gt;mem_base == MAP_FAILED) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_MAPPING_FAILED,</div><div class='del'>-                        "mapping failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    iobuf_arena-&gt;mem_base = mmap(NULL, iobuf_arena-&gt;arena_size,</div><div class='add'>+                                 PROT_READ | PROT_WRITE,</div><div class='add'>+                                 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);</div><div class='add'>+    if (iobuf_arena-&gt;mem_base == MAP_FAILED) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_MAPPING_FAILED,</div><div class='add'>+               "mapping failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (iobuf_pool-&gt;rdma_registration) {</div><div class='del'>-                iobuf_pool-&gt;rdma_registration (iobuf_pool-&gt;device,</div><div class='del'>-                                               iobuf_arena);</div><div class='del'>-        }</div><div class='add'>+    if (iobuf_pool-&gt;rdma_registration) {</div><div class='add'>+        iobuf_pool-&gt;rdma_registration(iobuf_pool-&gt;device, iobuf_arena);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;iobuf_arena-&gt;all_list, &amp;iobuf_pool-&gt;all_arenas);</div><div class='add'>+    list_add_tail(&amp;iobuf_arena-&gt;all_list, &amp;iobuf_pool-&gt;all_arenas);</div><div class='ctx'> </div><div class='del'>-        __iobuf_arena_init_iobufs (iobuf_arena);</div><div class='del'>-        if (!iobuf_arena-&gt;iobufs) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INIT_IOBUF_FAILED,</div><div class='del'>-                        "init failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    __iobuf_arena_init_iobufs(iobuf_arena);</div><div class='add'>+    if (!iobuf_arena-&gt;iobufs) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INIT_IOBUF_FAILED,</div><div class='add'>+               "init failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobuf_pool-&gt;arena_cnt++;</div><div class='add'>+    iobuf_pool-&gt;arena_cnt++;</div><div class='ctx'> </div><div class='del'>-        return iobuf_arena;</div><div class='add'>+    return iobuf_arena;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        __iobuf_arena_destroy (iobuf_pool, iobuf_arena);</div><div class='add'>+    __iobuf_arena_destroy(iobuf_pool, iobuf_arena);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf_arena *</div><div class='del'>-__iobuf_arena_unprune (struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='add'>+__iobuf_arena_unprune(struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena  = NULL;</div><div class='del'>-        struct iobuf_arena *tmp          = NULL;</div><div class='del'>-        int                 index        = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='del'>-</div><div class='del'>-        index = gf_iobuf_get_arena_index (page_size);</div><div class='del'>-        if (index == -1) {</div><div class='del'>-                gf_msg ("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='del'>-                        "page_size (%zu) of iobufs in arena being added is "</div><div class='del'>-                        "greater than max available", page_size);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (tmp, &amp;iobuf_pool-&gt;purge[index], list) {</div><div class='del'>-                list_del_init (&amp;tmp-&gt;list);</div><div class='del'>-                iobuf_arena = tmp;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *tmp = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='add'>+</div><div class='add'>+    index = gf_iobuf_get_arena_index(page_size);</div><div class='add'>+    if (index == -1) {</div><div class='add'>+        gf_msg("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='add'>+               "page_size (%zu) of iobufs in arena being added is "</div><div class='add'>+               "greater than max available",</div><div class='add'>+               page_size);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(tmp, &amp;iobuf_pool-&gt;purge[index], list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;tmp-&gt;list);</div><div class='add'>+        iobuf_arena = tmp;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return iobuf_arena;</div><div class='add'>+    return iobuf_arena;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf_arena *</div><div class='del'>-__iobuf_pool_add_arena (struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='del'>-                        int32_t num_pages)</div><div class='add'>+__iobuf_pool_add_arena(struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='add'>+                       int32_t num_pages)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena  = NULL;</div><div class='del'>-        int                 index        = 0;</div><div class='del'>-</div><div class='del'>-        index = gf_iobuf_get_arena_index (page_size);</div><div class='del'>-        if (index == -1) {</div><div class='del'>-                gf_msg ("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='del'>-                        "page_size (%zu) of iobufs in arena being added is "</div><div class='del'>-                        "greater than max available", page_size);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iobuf_arena = __iobuf_arena_unprune (iobuf_pool, page_size);</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+</div><div class='add'>+    index = gf_iobuf_get_arena_index(page_size);</div><div class='add'>+    if (index == -1) {</div><div class='add'>+        gf_msg("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='add'>+               "page_size (%zu) of iobufs in arena being added is "</div><div class='add'>+               "greater than max available",</div><div class='add'>+               page_size);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!iobuf_arena)</div><div class='del'>-                iobuf_arena = __iobuf_arena_alloc (iobuf_pool, page_size,</div><div class='del'>-                                                   num_pages);</div><div class='add'>+    iobuf_arena = __iobuf_arena_unprune(iobuf_pool, page_size);</div><div class='ctx'> </div><div class='del'>-        if (!iobuf_arena) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='del'>-                        "arena not found");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        list_add (&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;arenas[index]);</div><div class='add'>+    if (!iobuf_arena)</div><div class='add'>+        iobuf_arena = __iobuf_arena_alloc(iobuf_pool, page_size, num_pages);</div><div class='ctx'> </div><div class='add'>+    if (!iobuf_arena) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='add'>+               "arena not found");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    list_add(&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;arenas[index]);</div><div class='ctx'> </div><div class='del'>-        return iobuf_arena;</div><div class='add'>+    return iobuf_arena;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf_arena *</div><div class='del'>-iobuf_pool_add_arena (struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='del'>-                      int32_t num_pages)</div><div class='add'>+iobuf_pool_add_arena(struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='add'>+                     int32_t num_pages)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;iobuf_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                iobuf_arena = __iobuf_pool_add_arena (iobuf_pool, page_size,</div><div class='del'>-                                                      num_pages);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        iobuf_arena = __iobuf_pool_add_arena(iobuf_pool, page_size, num_pages);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return iobuf_arena;</div><div class='add'>+    return iobuf_arena;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This function destroys all the iobufs and the iobuf_pool */</div><div class='ctx'> void</div><div class='del'>-iobuf_pool_destroy (struct iobuf_pool *iobuf_pool)</div><div class='add'>+iobuf_pool_destroy(struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='del'>-        struct iobuf_arena *tmp         = NULL;</div><div class='del'>-        int                 i           = 0;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *tmp = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;iobuf_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='del'>-                        list_for_each_entry_safe (iobuf_arena, tmp,</div><div class='del'>-                                        &amp;iobuf_pool-&gt;arenas[i], list) {</div><div class='del'>-                                list_del_init (&amp;iobuf_arena-&gt;list);</div><div class='del'>-                                iobuf_pool-&gt;arena_cnt--;</div><div class='del'>-</div><div class='del'>-                                __iobuf_arena_destroy (iobuf_pool, iobuf_arena);</div><div class='del'>-                        }</div><div class='del'>-                        list_for_each_entry_safe (iobuf_arena, tmp,</div><div class='del'>-                                        &amp;iobuf_pool-&gt;purge[i], list) {</div><div class='del'>-                                list_del_init (&amp;iobuf_arena-&gt;list);</div><div class='del'>-                                iobuf_pool-&gt;arena_cnt--;</div><div class='del'>-                                __iobuf_arena_destroy (iobuf_pool, iobuf_arena);</div><div class='del'>-                        }</div><div class='del'>-                        /* If there are no iobuf leaks, there should be no</div><div class='del'>-                         * arenas in the filled list. If at all there are any</div><div class='del'>-                         * arenas in the filled list, the below function will</div><div class='del'>-                         * assert.</div><div class='del'>-                         */</div><div class='del'>-                        list_for_each_entry_safe (iobuf_arena, tmp,</div><div class='del'>-                                        &amp;iobuf_pool-&gt;filled[i], list) {</div><div class='del'>-                                list_del_init (&amp;iobuf_arena-&gt;list);</div><div class='del'>-                                iobuf_pool-&gt;arena_cnt--;</div><div class='del'>-                                __iobuf_arena_destroy (iobuf_pool, iobuf_arena);</div><div class='del'>-                        }</div><div class='del'>-                        /* If there are no iobuf leaks, there shoould be</div><div class='del'>-                         * no standard allocated arenas, iobuf_put will free</div><div class='del'>-                         * such arenas.</div><div class='del'>-                         * TODO: Free the stdalloc arenas forcefully if present?</div><div class='del'>-                         */</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='add'>+            list_for_each_entry_safe(iobuf_arena, tmp, &amp;iobuf_pool-&gt;arenas[i],</div><div class='add'>+                                     list)</div><div class='add'>+            {</div><div class='add'>+                list_del_init(&amp;iobuf_arena-&gt;list);</div><div class='add'>+                iobuf_pool-&gt;arena_cnt--;</div><div class='add'>+</div><div class='add'>+                __iobuf_arena_destroy(iobuf_pool, iobuf_arena);</div><div class='add'>+            }</div><div class='add'>+            list_for_each_entry_safe(iobuf_arena, tmp, &amp;iobuf_pool-&gt;purge[i],</div><div class='add'>+                                     list)</div><div class='add'>+            {</div><div class='add'>+                list_del_init(&amp;iobuf_arena-&gt;list);</div><div class='add'>+                iobuf_pool-&gt;arena_cnt--;</div><div class='add'>+                __iobuf_arena_destroy(iobuf_pool, iobuf_arena);</div><div class='add'>+            }</div><div class='add'>+            /* If there are no iobuf leaks, there should be no</div><div class='add'>+             * arenas in the filled list. If at all there are any</div><div class='add'>+             * arenas in the filled list, the below function will</div><div class='add'>+             * assert.</div><div class='add'>+             */</div><div class='add'>+            list_for_each_entry_safe(iobuf_arena, tmp, &amp;iobuf_pool-&gt;filled[i],</div><div class='add'>+                                     list)</div><div class='add'>+            {</div><div class='add'>+                list_del_init(&amp;iobuf_arena-&gt;list);</div><div class='add'>+                iobuf_pool-&gt;arena_cnt--;</div><div class='add'>+                __iobuf_arena_destroy(iobuf_pool, iobuf_arena);</div><div class='add'>+            }</div><div class='add'>+            /* If there are no iobuf leaks, there shoould be</div><div class='add'>+             * no standard allocated arenas, iobuf_put will free</div><div class='add'>+             * such arenas.</div><div class='add'>+             * TODO: Free the stdalloc arenas forcefully if present?</div><div class='add'>+             */</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_destroy(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (iobuf_pool);</div><div class='add'>+    GF_FREE(iobuf_pool);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-iobuf_create_stdalloc_arena (struct iobuf_pool *iobuf_pool)</div><div class='add'>+iobuf_create_stdalloc_arena(struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='ctx'> </div><div class='del'>-        /* No locking required here as its called only once during init */</div><div class='del'>-        iobuf_arena = GF_CALLOC (sizeof (*iobuf_arena), 1,</div><div class='del'>-                                 gf_common_mt_iobuf_arena);</div><div class='del'>-        if (!iobuf_arena)</div><div class='del'>-                goto err;</div><div class='add'>+    /* No locking required here as its called only once during init */</div><div class='add'>+    iobuf_arena = GF_CALLOC(sizeof(*iobuf_arena), 1, gf_common_mt_iobuf_arena);</div><div class='add'>+    if (!iobuf_arena)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;active.list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_arena-&gt;passive.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;active.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_arena-&gt;passive.list);</div><div class='ctx'> </div><div class='del'>-        iobuf_arena-&gt;iobuf_pool = iobuf_pool;</div><div class='add'>+    iobuf_arena-&gt;iobuf_pool = iobuf_pool;</div><div class='ctx'> </div><div class='del'>-        iobuf_arena-&gt;page_size = 0x7fffffff;</div><div class='add'>+    iobuf_arena-&gt;page_size = 0x7fffffff;</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;iobuf_arena-&gt;list,</div><div class='del'>-                       &amp;iobuf_pool-&gt;arenas[IOBUF_ARENA_MAX_INDEX]);</div><div class='add'>+    list_add_tail(&amp;iobuf_arena-&gt;list,</div><div class='add'>+                  &amp;iobuf_pool-&gt;arenas[IOBUF_ARENA_MAX_INDEX]);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct iobuf_pool *</div><div class='del'>-iobuf_pool_new (void)</div><div class='add'>+iobuf_pool_new(void)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_pool  *iobuf_pool = NULL;</div><div class='del'>-        int                 i          = 0;</div><div class='del'>-        size_t              page_size  = 0;</div><div class='del'>-        size_t              arena_size = 0;</div><div class='del'>-        int32_t             num_pages  = 0;</div><div class='del'>-</div><div class='del'>-        iobuf_pool = GF_CALLOC (sizeof (*iobuf_pool), 1,</div><div class='del'>-                                gf_common_mt_iobuf_pool);</div><div class='del'>-        if (!iobuf_pool)</div><div class='del'>-                goto out;</div><div class='del'>-        INIT_LIST_HEAD (&amp;iobuf_pool-&gt;all_arenas);</div><div class='del'>-        pthread_mutex_init (&amp;iobuf_pool-&gt;mutex, NULL);</div><div class='del'>-        for (i = 0; i &lt;= IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='del'>-                INIT_LIST_HEAD (&amp;iobuf_pool-&gt;arenas[i]);</div><div class='del'>-                INIT_LIST_HEAD (&amp;iobuf_pool-&gt;filled[i]);</div><div class='del'>-                INIT_LIST_HEAD (&amp;iobuf_pool-&gt;purge[i]);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iobuf_pool-&gt;default_page_size  = 128 * GF_UNIT_KB;</div><div class='del'>-</div><div class='del'>-        iobuf_pool-&gt;rdma_registration = NULL;</div><div class='del'>-        iobuf_pool-&gt;rdma_deregistration = NULL;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_RDMA_DEVICE_COUNT; i++) {</div><div class='del'>-</div><div class='del'>-                iobuf_pool-&gt;device[i] = NULL;</div><div class='del'>-                iobuf_pool-&gt;mr_list[i] = NULL;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        arena_size = 0;</div><div class='del'>-        for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='del'>-                page_size = gf_iobuf_init_config[i].pagesize;</div><div class='del'>-                num_pages = gf_iobuf_init_config[i].num_pages;</div><div class='del'>-</div><div class='del'>-                iobuf_pool_add_arena (iobuf_pool, page_size, num_pages);</div><div class='del'>-</div><div class='del'>-                arena_size += page_size * num_pages;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Need an arena to handle all the bigger iobuf requests */</div><div class='del'>-        iobuf_create_stdalloc_arena (iobuf_pool);</div><div class='del'>-</div><div class='del'>-        iobuf_pool-&gt;arena_size = arena_size;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t page_size = 0;</div><div class='add'>+    size_t arena_size = 0;</div><div class='add'>+    int32_t num_pages = 0;</div><div class='add'>+</div><div class='add'>+    iobuf_pool = GF_CALLOC(sizeof(*iobuf_pool), 1, gf_common_mt_iobuf_pool);</div><div class='add'>+    if (!iobuf_pool)</div><div class='add'>+        goto out;</div><div class='add'>+    INIT_LIST_HEAD(&amp;iobuf_pool-&gt;all_arenas);</div><div class='add'>+    pthread_mutex_init(&amp;iobuf_pool-&gt;mutex, NULL);</div><div class='add'>+    for (i = 0; i &lt;= IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='add'>+        INIT_LIST_HEAD(&amp;iobuf_pool-&gt;arenas[i]);</div><div class='add'>+        INIT_LIST_HEAD(&amp;iobuf_pool-&gt;filled[i]);</div><div class='add'>+        INIT_LIST_HEAD(&amp;iobuf_pool-&gt;purge[i]);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iobuf_pool-&gt;default_page_size = 128 * GF_UNIT_KB;</div><div class='add'>+</div><div class='add'>+    iobuf_pool-&gt;rdma_registration = NULL;</div><div class='add'>+    iobuf_pool-&gt;rdma_deregistration = NULL;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_RDMA_DEVICE_COUNT; i++) {</div><div class='add'>+        iobuf_pool-&gt;device[i] = NULL;</div><div class='add'>+        iobuf_pool-&gt;mr_list[i] = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    arena_size = 0;</div><div class='add'>+    for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='add'>+        page_size = gf_iobuf_init_config[i].pagesize;</div><div class='add'>+        num_pages = gf_iobuf_init_config[i].num_pages;</div><div class='add'>+</div><div class='add'>+        iobuf_pool_add_arena(iobuf_pool, page_size, num_pages);</div><div class='add'>+</div><div class='add'>+        arena_size += page_size * num_pages;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Need an arena to handle all the bigger iobuf requests */</div><div class='add'>+    iobuf_create_stdalloc_arena(iobuf_pool);</div><div class='add'>+</div><div class='add'>+    iobuf_pool-&gt;arena_size = arena_size;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return iobuf_pool;</div><div class='add'>+    return iobuf_pool;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-__iobuf_arena_prune (struct iobuf_pool *iobuf_pool,</div><div class='del'>-                     struct iobuf_arena *iobuf_arena, int index)</div><div class='add'>+__iobuf_arena_prune(struct iobuf_pool *iobuf_pool,</div><div class='add'>+                    struct iobuf_arena *iobuf_arena, int index)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        /* code flow comes here only if the arena is in purge list and we can</div><div class='del'>-         * free the arena only if we have at least one arena in 'arenas' list</div><div class='del'>-         * (ie, at least few iobufs free in arena), that way, there won't</div><div class='del'>-         * be spurious mmap/unmap of buffers</div><div class='del'>-         */</div><div class='del'>-        if (list_empty (&amp;iobuf_pool-&gt;arenas[index]))</div><div class='del'>-                goto out;</div><div class='add'>+    /* code flow comes here only if the arena is in purge list and we can</div><div class='add'>+     * free the arena only if we have at least one arena in 'arenas' list</div><div class='add'>+     * (ie, at least few iobufs free in arena), that way, there won't</div><div class='add'>+     * be spurious mmap/unmap of buffers</div><div class='add'>+     */</div><div class='add'>+    if (list_empty(&amp;iobuf_pool-&gt;arenas[index]))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* All cases matched, destroy */</div><div class='del'>-        list_del_init (&amp;iobuf_arena-&gt;list);</div><div class='del'>-        list_del_init (&amp;iobuf_arena-&gt;all_list);</div><div class='del'>-        iobuf_pool-&gt;arena_cnt--;</div><div class='add'>+    /* All cases matched, destroy */</div><div class='add'>+    list_del_init(&amp;iobuf_arena-&gt;list);</div><div class='add'>+    list_del_init(&amp;iobuf_arena-&gt;all_list);</div><div class='add'>+    iobuf_pool-&gt;arena_cnt--;</div><div class='ctx'> </div><div class='del'>-        __iobuf_arena_destroy (iobuf_pool, iobuf_arena);</div><div class='add'>+    __iobuf_arena_destroy(iobuf_pool, iobuf_arena);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-iobuf_pool_prune (struct iobuf_pool *iobuf_pool)</div><div class='add'>+iobuf_pool_prune(struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='del'>-        struct iobuf_arena *tmp         = NULL;</div><div class='del'>-        int                 i           = 0;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *tmp = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;iobuf_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='del'>-                        if (list_empty (&amp;iobuf_pool-&gt;arenas[i])) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        list_for_each_entry_safe (iobuf_arena, tmp,</div><div class='del'>-                                                  &amp;iobuf_pool-&gt;purge[i], list) {</div><div class='del'>-                                __iobuf_arena_prune (iobuf_pool, iobuf_arena, i);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; IOBUF_ARENA_MAX_INDEX; i++) {</div><div class='add'>+            if (list_empty(&amp;iobuf_pool-&gt;arenas[i])) {</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            list_for_each_entry_safe(iobuf_arena, tmp, &amp;iobuf_pool-&gt;purge[i],</div><div class='add'>+                                     list)</div><div class='add'>+            {</div><div class='add'>+                __iobuf_arena_prune(iobuf_pool, iobuf_arena, i);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf_arena *</div><div class='del'>-__iobuf_select_arena (struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='add'>+__iobuf_select_arena(struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena  = NULL;</div><div class='del'>-        struct iobuf_arena *trav         = NULL;</div><div class='del'>-        int                 index        = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='del'>-</div><div class='del'>-        index = gf_iobuf_get_arena_index (page_size);</div><div class='del'>-        if (index == -1) {</div><div class='del'>-                gf_msg ("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='del'>-                        "page_size (%zu) of iobufs in arena being added is "</div><div class='del'>-                        "greater than max available", page_size);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* look for unused iobuf from the head-most arena */</div><div class='del'>-        list_for_each_entry (trav, &amp;iobuf_pool-&gt;arenas[index], list) {</div><div class='del'>-                if (trav-&gt;passive_cnt) {</div><div class='del'>-                        iobuf_arena = trav;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *trav = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='add'>+</div><div class='add'>+    index = gf_iobuf_get_arena_index(page_size);</div><div class='add'>+    if (index == -1) {</div><div class='add'>+        gf_msg("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='add'>+               "page_size (%zu) of iobufs in arena being added is "</div><div class='add'>+               "greater than max available",</div><div class='add'>+               page_size);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* look for unused iobuf from the head-most arena */</div><div class='add'>+    list_for_each_entry(trav, &amp;iobuf_pool-&gt;arenas[index], list)</div><div class='add'>+    {</div><div class='add'>+        if (trav-&gt;passive_cnt) {</div><div class='add'>+            iobuf_arena = trav;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!iobuf_arena) {</div><div class='del'>-                /* all arenas were full, find the right count to add */</div><div class='del'>-                iobuf_arena = __iobuf_pool_add_arena (iobuf_pool, page_size,</div><div class='del'>-                                                      gf_iobuf_init_config[index].num_pages);</div><div class='del'>-        }</div><div class='add'>+    if (!iobuf_arena) {</div><div class='add'>+        /* all arenas were full, find the right count to add */</div><div class='add'>+        iobuf_arena = __iobuf_pool_add_arena(</div><div class='add'>+            iobuf_pool, page_size, gf_iobuf_init_config[index].num_pages);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return iobuf_arena;</div><div class='add'>+    return iobuf_arena;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf *</div><div class='del'>-__iobuf_get (struct iobuf_arena *iobuf_arena, size_t page_size)</div><div class='add'>+__iobuf_get(struct iobuf_arena *iobuf_arena, size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf      *iobuf        = NULL;</div><div class='del'>-        struct iobuf_pool *iobuf_pool   = NULL;</div><div class='del'>-        int                index        = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out);</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='add'>+    int index = 0;</div><div class='ctx'> </div><div class='del'>-        iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_arena, out);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (iobuf, &amp;iobuf_arena-&gt;passive.list, list)</div><div class='del'>-                break;</div><div class='add'>+    iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='ctx'> </div><div class='del'>-        list_del (&amp;iobuf-&gt;list);</div><div class='del'>-        iobuf_arena-&gt;passive_cnt--;</div><div class='add'>+    list_for_each_entry(iobuf, &amp;iobuf_arena-&gt;passive.list, list) break;</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;iobuf-&gt;list, &amp;iobuf_arena-&gt;active.list);</div><div class='del'>-        iobuf_arena-&gt;active_cnt++;</div><div class='add'>+    list_del(&amp;iobuf-&gt;list);</div><div class='add'>+    iobuf_arena-&gt;passive_cnt--;</div><div class='ctx'> </div><div class='del'>-        /* no resetting requied for this element */</div><div class='del'>-        iobuf_arena-&gt;alloc_cnt++;</div><div class='add'>+    list_add(&amp;iobuf-&gt;list, &amp;iobuf_arena-&gt;active.list);</div><div class='add'>+    iobuf_arena-&gt;active_cnt++;</div><div class='ctx'> </div><div class='del'>-        if (iobuf_arena-&gt;max_active &lt; iobuf_arena-&gt;active_cnt)</div><div class='del'>-                iobuf_arena-&gt;max_active = iobuf_arena-&gt;active_cnt;</div><div class='add'>+    /* no resetting requied for this element */</div><div class='add'>+    iobuf_arena-&gt;alloc_cnt++;</div><div class='ctx'> </div><div class='del'>-        if (iobuf_arena-&gt;passive_cnt == 0) {</div><div class='del'>-                index = gf_iobuf_get_arena_index (page_size);</div><div class='del'>-                if (index == -1) {</div><div class='del'>-                        gf_msg ("iobuf", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_PAGE_SIZE_EXCEEDED, "page_size (%zu) of"</div><div class='del'>-                                " iobufs in arena being added is greater "</div><div class='del'>-                                "than max available", page_size);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (iobuf_arena-&gt;max_active &lt; iobuf_arena-&gt;active_cnt)</div><div class='add'>+        iobuf_arena-&gt;max_active = iobuf_arena-&gt;active_cnt;</div><div class='ctx'> </div><div class='del'>-                list_del (&amp;iobuf_arena-&gt;list);</div><div class='del'>-                list_add (&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;filled[index]);</div><div class='add'>+    if (iobuf_arena-&gt;passive_cnt == 0) {</div><div class='add'>+        index = gf_iobuf_get_arena_index(page_size);</div><div class='add'>+        if (index == -1) {</div><div class='add'>+            gf_msg("iobuf", GF_LOG_ERROR, 0, LG_MSG_PAGE_SIZE_EXCEEDED,</div><div class='add'>+                   "page_size (%zu) of"</div><div class='add'>+                   " iobufs in arena being added is greater "</div><div class='add'>+                   "than max available",</div><div class='add'>+                   page_size);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        list_del(&amp;iobuf_arena-&gt;list);</div><div class='add'>+        list_add(&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;filled[index]);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return iobuf;</div><div class='add'>+    return iobuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct iobuf *</div><div class='del'>-iobuf_get_from_stdalloc (struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='add'>+iobuf_get_from_stdalloc(struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf       *iobuf       = NULL;</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='del'>-        struct iobuf_arena *trav        = NULL;</div><div class='del'>-        int                 ret         = -1;</div><div class='del'>-</div><div class='del'>-        /* The first arena in the 'MAX-INDEX' will always be used for misc */</div><div class='del'>-        list_for_each_entry (trav, &amp;iobuf_pool-&gt;arenas[IOBUF_ARENA_MAX_INDEX],</div><div class='del'>-                             list) {</div><div class='del'>-                iobuf_arena = trav;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iobuf = GF_CALLOC (1, sizeof (*iobuf), gf_common_mt_iobuf);</div><div class='del'>-        if (!iobuf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* 4096 is the alignment */</div><div class='del'>-        iobuf-&gt;free_ptr = GF_CALLOC (1, ((page_size + GF_IOBUF_ALIGN_SIZE) - 1),</div><div class='del'>-                                     gf_common_mt_char);</div><div class='del'>-        if (!iobuf-&gt;free_ptr)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        iobuf-&gt;ptr = GF_ALIGN_BUF (iobuf-&gt;free_ptr, GF_IOBUF_ALIGN_SIZE);</div><div class='del'>-        iobuf-&gt;iobuf_arena = iobuf_arena;</div><div class='del'>-        LOCK_INIT (&amp;iobuf-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* Hold a ref because you are allocating and using it */</div><div class='del'>-        GF_ATOMIC_INIT (iobuf-&gt;ref, 1);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_arena *trav = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    /* The first arena in the 'MAX-INDEX' will always be used for misc */</div><div class='add'>+    list_for_each_entry(trav, &amp;iobuf_pool-&gt;arenas[IOBUF_ARENA_MAX_INDEX], list)</div><div class='add'>+    {</div><div class='add'>+        iobuf_arena = trav;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iobuf = GF_CALLOC(1, sizeof(*iobuf), gf_common_mt_iobuf);</div><div class='add'>+    if (!iobuf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* 4096 is the alignment */</div><div class='add'>+    iobuf-&gt;free_ptr = GF_CALLOC(1, ((page_size + GF_IOBUF_ALIGN_SIZE) - 1),</div><div class='add'>+                                gf_common_mt_char);</div><div class='add'>+    if (!iobuf-&gt;free_ptr)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    iobuf-&gt;ptr = GF_ALIGN_BUF(iobuf-&gt;free_ptr, GF_IOBUF_ALIGN_SIZE);</div><div class='add'>+    iobuf-&gt;iobuf_arena = iobuf_arena;</div><div class='add'>+    LOCK_INIT(&amp;iobuf-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* Hold a ref because you are allocating and using it */</div><div class='add'>+    GF_ATOMIC_INIT(iobuf-&gt;ref, 1);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; iobuf) {</div><div class='del'>-                GF_FREE (iobuf-&gt;free_ptr);</div><div class='del'>-                GF_FREE (iobuf);</div><div class='del'>-                iobuf = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; iobuf) {</div><div class='add'>+        GF_FREE(iobuf-&gt;free_ptr);</div><div class='add'>+        GF_FREE(iobuf);</div><div class='add'>+        iobuf = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return iobuf;</div><div class='add'>+    return iobuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf *</div><div class='del'>-iobuf_get2 (struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='add'>+iobuf_get2(struct iobuf_pool *iobuf_pool, size_t page_size)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf       *iobuf        = NULL;</div><div class='del'>-        struct iobuf_arena *iobuf_arena  = NULL;</div><div class='del'>-        size_t              rounded_size = 0;</div><div class='del'>-</div><div class='del'>-        if (page_size == 0) {</div><div class='del'>-                page_size = iobuf_pool-&gt;default_page_size;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rounded_size = gf_iobuf_get_pagesize (page_size);</div><div class='del'>-        if (rounded_size == -1) {</div><div class='del'>-                /* make sure to provide the requested buffer with standard</div><div class='del'>-                   memory allocations */</div><div class='del'>-                iobuf = iobuf_get_from_stdalloc (iobuf_pool, page_size);</div><div class='del'>-</div><div class='del'>-                gf_msg_debug ("iobuf", 0, "request for iobuf of size %zu "</div><div class='del'>-                        "is serviced using standard calloc() (%p) as it "</div><div class='del'>-                        "exceeds the maximum available buffer size",</div><div class='del'>-                        page_size, iobuf);</div><div class='del'>-</div><div class='del'>-                iobuf_pool-&gt;request_misses++;</div><div class='del'>-                return iobuf;</div><div class='del'>-        }</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    size_t rounded_size = 0;</div><div class='add'>+</div><div class='add'>+    if (page_size == 0) {</div><div class='add'>+        page_size = iobuf_pool-&gt;default_page_size;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rounded_size = gf_iobuf_get_pagesize(page_size);</div><div class='add'>+    if (rounded_size == -1) {</div><div class='add'>+        /* make sure to provide the requested buffer with standard</div><div class='add'>+           memory allocations */</div><div class='add'>+        iobuf = iobuf_get_from_stdalloc(iobuf_pool, page_size);</div><div class='add'>+</div><div class='add'>+        gf_msg_debug("iobuf", 0,</div><div class='add'>+                     "request for iobuf of size %zu "</div><div class='add'>+                     "is serviced using standard calloc() (%p) as it "</div><div class='add'>+                     "exceeds the maximum available buffer size",</div><div class='add'>+                     page_size, iobuf);</div><div class='add'>+</div><div class='add'>+        iobuf_pool-&gt;request_misses++;</div><div class='add'>+        return iobuf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;iobuf_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* most eligible arena for picking an iobuf */</div><div class='del'>-                iobuf_arena = __iobuf_select_arena (iobuf_pool, rounded_size);</div><div class='del'>-                if (!iobuf_arena)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    pthread_mutex_lock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* most eligible arena for picking an iobuf */</div><div class='add'>+        iobuf_arena = __iobuf_select_arena(iobuf_pool, rounded_size);</div><div class='add'>+        if (!iobuf_arena)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                iobuf = __iobuf_get (iobuf_arena, rounded_size);</div><div class='del'>-                if (!iobuf)</div><div class='del'>-                        goto unlock;</div><div class='add'>+        iobuf = __iobuf_get(iobuf_arena, rounded_size);</div><div class='add'>+        if (!iobuf)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                iobuf_ref (iobuf);</div><div class='del'>-         }</div><div class='add'>+        iobuf_ref(iobuf);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return iobuf;</div><div class='add'>+    return iobuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct iobuf *</div><div class='del'>-iobuf_get_page_aligned (struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='del'>-                        size_t align_size)</div><div class='add'>+iobuf_get_page_aligned(struct iobuf_pool *iobuf_pool, size_t page_size,</div><div class='add'>+                       size_t align_size)</div><div class='ctx'> {</div><div class='del'>-        size_t              req_size     = 0;</div><div class='del'>-        struct iobuf       *iobuf        = NULL;</div><div class='add'>+    size_t req_size = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='ctx'> </div><div class='del'>-        req_size = page_size;</div><div class='add'>+    req_size = page_size;</div><div class='ctx'> </div><div class='del'>-        if (req_size == 0) {</div><div class='del'>-                req_size = iobuf_pool-&gt;default_page_size;</div><div class='del'>-        }</div><div class='add'>+    if (req_size == 0) {</div><div class='add'>+        req_size = iobuf_pool-&gt;default_page_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobuf = iobuf_get2 (iobuf_pool, req_size + align_size);</div><div class='del'>-        if (!iobuf)</div><div class='del'>-                return NULL;</div><div class='del'>-        /* If std allocation was used, then free_ptr will be non-NULL. In this</div><div class='del'>-         * case, we do not want to modify the original free_ptr.</div><div class='del'>-         * On the other hand, if the buf was gotten through the available</div><div class='del'>-         * arenas, then we use iobuf-&gt;free_ptr to store the original</div><div class='del'>-         * pointer to the offset into the mmap'd block of memory and in turn</div><div class='del'>-         * reuse iobuf-&gt;ptr to hold the page-aligned address. And finally, in</div><div class='del'>-         * iobuf_put(), we copy iobuf-&gt;free_ptr into iobuf-&gt;ptr - back to where</div><div class='del'>-         * it was originally when __iobuf_get() returned this iobuf.</div><div class='del'>-         */</div><div class='del'>-        if (!iobuf-&gt;free_ptr)</div><div class='del'>-                iobuf-&gt;free_ptr = iobuf-&gt;ptr;</div><div class='del'>-        iobuf-&gt;ptr = GF_ALIGN_BUF (iobuf-&gt;ptr, align_size);</div><div class='del'>-</div><div class='del'>-        return iobuf;</div><div class='add'>+    iobuf = iobuf_get2(iobuf_pool, req_size + align_size);</div><div class='add'>+    if (!iobuf)</div><div class='add'>+        return NULL;</div><div class='add'>+    /* If std allocation was used, then free_ptr will be non-NULL. In this</div><div class='add'>+     * case, we do not want to modify the original free_ptr.</div><div class='add'>+     * On the other hand, if the buf was gotten through the available</div><div class='add'>+     * arenas, then we use iobuf-&gt;free_ptr to store the original</div><div class='add'>+     * pointer to the offset into the mmap'd block of memory and in turn</div><div class='add'>+     * reuse iobuf-&gt;ptr to hold the page-aligned address. And finally, in</div><div class='add'>+     * iobuf_put(), we copy iobuf-&gt;free_ptr into iobuf-&gt;ptr - back to where</div><div class='add'>+     * it was originally when __iobuf_get() returned this iobuf.</div><div class='add'>+     */</div><div class='add'>+    if (!iobuf-&gt;free_ptr)</div><div class='add'>+        iobuf-&gt;free_ptr = iobuf-&gt;ptr;</div><div class='add'>+    iobuf-&gt;ptr = GF_ALIGN_BUF(iobuf-&gt;ptr, align_size);</div><div class='add'>+</div><div class='add'>+    return iobuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct iobuf *</div><div class='del'>-iobuf_get (struct iobuf_pool *iobuf_pool)</div><div class='add'>+iobuf_get(struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf       *iobuf        = NULL;</div><div class='del'>-        struct iobuf_arena *iobuf_arena  = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;iobuf_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* most eligible arena for picking an iobuf */</div><div class='del'>-                iobuf_arena = __iobuf_select_arena (iobuf_pool,</div><div class='del'>-                                                    iobuf_pool-&gt;default_page_size);</div><div class='del'>-                if (!iobuf_arena) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_ARENA_NOT_FOUND, "arena not found");</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                iobuf = __iobuf_get (iobuf_arena,</div><div class='del'>-                                     iobuf_pool-&gt;default_page_size);</div><div class='del'>-                if (!iobuf) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_IOBUF_NOT_FOUND, "iobuf not found");</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                iobuf_ref (iobuf);</div><div class='add'>+    pthread_mutex_lock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* most eligible arena for picking an iobuf */</div><div class='add'>+        iobuf_arena = __iobuf_select_arena(iobuf_pool,</div><div class='add'>+                                           iobuf_pool-&gt;default_page_size);</div><div class='add'>+        if (!iobuf_arena) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='add'>+                   "arena not found");</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        iobuf = __iobuf_get(iobuf_arena, iobuf_pool-&gt;default_page_size);</div><div class='add'>+        if (!iobuf) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_IOBUF_NOT_FOUND,</div><div class='add'>+                   "iobuf not found");</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        iobuf_ref(iobuf);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return iobuf;</div><div class='add'>+    return iobuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__iobuf_put (struct iobuf *iobuf, struct iobuf_arena *iobuf_arena)</div><div class='add'>+__iobuf_put(struct iobuf *iobuf, struct iobuf_arena *iobuf_arena)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_pool *iobuf_pool = NULL;</div><div class='del'>-        int                index      = 0;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='add'>+    int index = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_arena, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-        iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='add'>+    iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='ctx'> </div><div class='del'>-        index = gf_iobuf_get_arena_index (iobuf_arena-&gt;page_size);</div><div class='del'>-        if (index == -1) {</div><div class='del'>-                gf_msg_debug ("iobuf", 0, "freeing the iobuf (%p) "</div><div class='del'>-                        "allocated with standard calloc()", iobuf);</div><div class='del'>-</div><div class='del'>-                /* free up properly without bothering about lists and all */</div><div class='del'>-                LOCK_DESTROY (&amp;iobuf-&gt;lock);</div><div class='del'>-                GF_FREE (iobuf-&gt;free_ptr);</div><div class='del'>-                GF_FREE (iobuf);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    index = gf_iobuf_get_arena_index(iobuf_arena-&gt;page_size);</div><div class='add'>+    if (index == -1) {</div><div class='add'>+        gf_msg_debug("iobuf", 0,</div><div class='add'>+                     "freeing the iobuf (%p) "</div><div class='add'>+                     "allocated with standard calloc()",</div><div class='add'>+                     iobuf);</div><div class='ctx'> </div><div class='del'>-        if (iobuf_arena-&gt;passive_cnt == 0) {</div><div class='del'>-                list_del (&amp;iobuf_arena-&gt;list);</div><div class='del'>-                list_add_tail (&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;arenas[index]);</div><div class='del'>-        }</div><div class='add'>+        /* free up properly without bothering about lists and all */</div><div class='add'>+        LOCK_DESTROY(&amp;iobuf-&gt;lock);</div><div class='add'>+        GF_FREE(iobuf-&gt;free_ptr);</div><div class='add'>+        GF_FREE(iobuf);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;iobuf-&gt;list);</div><div class='del'>-        iobuf_arena-&gt;active_cnt--;</div><div class='add'>+    if (iobuf_arena-&gt;passive_cnt == 0) {</div><div class='add'>+        list_del(&amp;iobuf_arena-&gt;list);</div><div class='add'>+        list_add_tail(&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;arenas[index]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (iobuf-&gt;free_ptr) {</div><div class='del'>-                iobuf-&gt;ptr = iobuf-&gt;free_ptr;</div><div class='del'>-                iobuf-&gt;free_ptr = NULL;</div><div class='del'>-        }</div><div class='add'>+    list_del_init(&amp;iobuf-&gt;list);</div><div class='add'>+    iobuf_arena-&gt;active_cnt--;</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;iobuf-&gt;list, &amp;iobuf_arena-&gt;passive.list);</div><div class='del'>-        iobuf_arena-&gt;passive_cnt++;</div><div class='add'>+    if (iobuf-&gt;free_ptr) {</div><div class='add'>+        iobuf-&gt;ptr = iobuf-&gt;free_ptr;</div><div class='add'>+        iobuf-&gt;free_ptr = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (iobuf_arena-&gt;active_cnt == 0) {</div><div class='del'>-                list_del (&amp;iobuf_arena-&gt;list);</div><div class='del'>-                list_add_tail (&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;purge[index]);</div><div class='del'>-                __iobuf_arena_prune (iobuf_pool, iobuf_arena, index);</div><div class='del'>-        }</div><div class='add'>+    list_add(&amp;iobuf-&gt;list, &amp;iobuf_arena-&gt;passive.list);</div><div class='add'>+    iobuf_arena-&gt;passive_cnt++;</div><div class='add'>+</div><div class='add'>+    if (iobuf_arena-&gt;active_cnt == 0) {</div><div class='add'>+        list_del(&amp;iobuf_arena-&gt;list);</div><div class='add'>+        list_add_tail(&amp;iobuf_arena-&gt;list, &amp;iobuf_pool-&gt;purge[index]);</div><div class='add'>+        __iobuf_arena_prune(iobuf_pool, iobuf_arena, index);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-iobuf_put (struct iobuf *iobuf)</div><div class='add'>+iobuf_put(struct iobuf *iobuf)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena *iobuf_arena = NULL;</div><div class='del'>-        struct iobuf_pool  *iobuf_pool = NULL;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = NULL;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-        iobuf_arena = iobuf-&gt;iobuf_arena;</div><div class='del'>-        if (!iobuf_arena) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='del'>-                        "arena not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    iobuf_arena = iobuf-&gt;iobuf_arena;</div><div class='add'>+    if (!iobuf_arena) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='add'>+               "arena not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='del'>-        if (!iobuf_pool) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_POOL_NOT_FOUND, "iobuf pool not found");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='add'>+    if (!iobuf_pool) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_POOL_NOT_FOUND,</div><div class='add'>+               "iobuf pool not found");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;iobuf_pool-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __iobuf_put (iobuf, iobuf_arena);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __iobuf_put(iobuf, iobuf_arena);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-iobuf_unref (struct iobuf *iobuf)</div><div class='add'>+iobuf_unref(struct iobuf *iobuf)</div><div class='ctx'> {</div><div class='del'>-        int  ref = 0;</div><div class='add'>+    int ref = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-        ref = GF_ATOMIC_DEC (iobuf-&gt;ref);</div><div class='add'>+    ref = GF_ATOMIC_DEC(iobuf-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        if (!ref)</div><div class='del'>-                iobuf_put (iobuf);</div><div class='add'>+    if (!ref)</div><div class='add'>+        iobuf_put(iobuf);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf *</div><div class='del'>-iobuf_ref (struct iobuf *iobuf)</div><div class='add'>+iobuf_ref(struct iobuf *iobuf)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='del'>-        GF_ATOMIC_INC (iobuf-&gt;ref);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='add'>+    GF_ATOMIC_INC(iobuf-&gt;ref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return iobuf;</div><div class='add'>+    return iobuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobref *</div><div class='del'>-iobref_new ()</div><div class='add'>+iobref_new()</div><div class='ctx'> {</div><div class='del'>-        struct iobref *iobref = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='ctx'> </div><div class='del'>-        iobref = GF_MALLOC (sizeof (*iobref), gf_common_mt_iobref);</div><div class='del'>-        if (!iobref)</div><div class='del'>-                return NULL;</div><div class='add'>+    iobref = GF_MALLOC(sizeof(*iobref), gf_common_mt_iobref);</div><div class='add'>+    if (!iobref)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	iobref-&gt;iobrefs = GF_CALLOC (sizeof (*iobref-&gt;iobrefs),</div><div class='del'>-				     16, gf_common_mt_iobrefs);</div><div class='del'>-	if (!iobref-&gt;iobrefs) {</div><div class='del'>-		GF_FREE (iobref);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    iobref-&gt;iobrefs = GF_CALLOC(sizeof(*iobref-&gt;iobrefs), 16,</div><div class='add'>+                                gf_common_mt_iobrefs);</div><div class='add'>+    if (!iobref-&gt;iobrefs) {</div><div class='add'>+        GF_FREE(iobref);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	iobref-&gt;allocated = 16;</div><div class='del'>-	iobref-&gt;used = 0;</div><div class='add'>+    iobref-&gt;allocated = 16;</div><div class='add'>+    iobref-&gt;used = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;iobref-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;iobref-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INIT (iobref-&gt;ref, 1);</div><div class='del'>-        return iobref;</div><div class='add'>+    GF_ATOMIC_INIT(iobref-&gt;ref, 1);</div><div class='add'>+    return iobref;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobref *</div><div class='del'>-iobref_ref (struct iobref *iobref)</div><div class='add'>+iobref_ref(struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='del'>-        GF_ATOMIC_INC (iobref-&gt;ref);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='add'>+    GF_ATOMIC_INC(iobref-&gt;ref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return iobref;</div><div class='add'>+    return iobref;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-iobref_destroy (struct iobref *iobref)</div><div class='add'>+iobref_destroy(struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-        int            i = 0;</div><div class='del'>-        struct iobuf  *iobuf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; iobref-&gt;allocated; i++) {</div><div class='del'>-                iobuf = iobref-&gt;iobrefs[i];</div><div class='add'>+    for (i = 0; i &lt; iobref-&gt;allocated; i++) {</div><div class='add'>+        iobuf = iobref-&gt;iobrefs[i];</div><div class='ctx'> </div><div class='del'>-                iobref-&gt;iobrefs[i] = NULL;</div><div class='del'>-                if (iobuf)</div><div class='del'>-                        iobuf_unref (iobuf);</div><div class='del'>-        }</div><div class='add'>+        iobref-&gt;iobrefs[i] = NULL;</div><div class='add'>+        if (iobuf)</div><div class='add'>+            iobuf_unref(iobuf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	GF_FREE (iobref-&gt;iobrefs);</div><div class='del'>-        GF_FREE (iobref);</div><div class='add'>+    GF_FREE(iobref-&gt;iobrefs);</div><div class='add'>+    GF_FREE(iobref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-iobref_unref (struct iobref *iobref)</div><div class='add'>+iobref_unref(struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-        int ref = 0;</div><div class='add'>+    int ref = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='del'>-        ref = GF_ATOMIC_DEC (iobref-&gt;ref);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='add'>+    ref = GF_ATOMIC_DEC(iobref-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        if (!ref)</div><div class='del'>-                iobref_destroy (iobref);</div><div class='add'>+    if (!ref)</div><div class='add'>+        iobref_destroy(iobref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-iobref_clear (struct iobref *iobref)</div><div class='add'>+iobref_clear(struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='ctx'> </div><div class='del'>-        for (; i &lt; iobref-&gt;allocated; i++) {</div><div class='del'>-                if (iobref-&gt;iobrefs[i] != NULL) {</div><div class='del'>-                        iobuf_unref (iobref-&gt;iobrefs[i]);</div><div class='del'>-                } else {</div><div class='del'>-                        /** iobuf's are attached serially */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (; i &lt; iobref-&gt;allocated; i++) {</div><div class='add'>+        if (iobref-&gt;iobrefs[i] != NULL) {</div><div class='add'>+            iobuf_unref(iobref-&gt;iobrefs[i]);</div><div class='add'>+        } else {</div><div class='add'>+            /** iobuf's are attached serially */</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobref_unref (iobref);</div><div class='add'>+    iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return;</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__iobref_grow (struct iobref *iobref)</div><div class='add'>+__iobref_grow(struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-	void *newptr = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	newptr = GF_REALLOC (iobref-&gt;iobrefs,</div><div class='del'>-			     iobref-&gt;allocated * 2 * (sizeof (*iobref-&gt;iobrefs)));</div><div class='del'>-	if (newptr) {</div><div class='del'>-		iobref-&gt;iobrefs = newptr;</div><div class='del'>-		iobref-&gt;allocated *= 2;</div><div class='del'>-</div><div class='del'>-		for (i = iobref-&gt;used; i &lt; iobref-&gt;allocated; i++)</div><div class='del'>-			iobref-&gt;iobrefs[i] = NULL;</div><div class='del'>-	}</div><div class='add'>+    void *newptr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    newptr = GF_REALLOC(iobref-&gt;iobrefs,</div><div class='add'>+                        iobref-&gt;allocated * 2 * (sizeof(*iobref-&gt;iobrefs)));</div><div class='add'>+    if (newptr) {</div><div class='add'>+        iobref-&gt;iobrefs = newptr;</div><div class='add'>+        iobref-&gt;allocated *= 2;</div><div class='add'>+</div><div class='add'>+        for (i = iobref-&gt;used; i &lt; iobref-&gt;allocated; i++)</div><div class='add'>+            iobref-&gt;iobrefs[i] = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__iobref_add (struct iobref *iobref, struct iobuf *iobuf)</div><div class='add'>+__iobref_add(struct iobref *iobref, struct iobuf *iobuf)</div><div class='ctx'> {</div><div class='del'>-        int  i = 0;</div><div class='del'>-        int  ret = -ENOMEM;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-	if (iobref-&gt;used == iobref-&gt;allocated) {</div><div class='del'>-		__iobref_grow (iobref);</div><div class='add'>+    if (iobref-&gt;used == iobref-&gt;allocated) {</div><div class='add'>+        __iobref_grow(iobref);</div><div class='ctx'> </div><div class='del'>-		if (iobref-&gt;used == iobref-&gt;allocated) {</div><div class='del'>-			ret = -ENOMEM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; iobref-&gt;allocated; i++) {</div><div class='del'>-                if (iobref-&gt;iobrefs[i] == NULL) {</div><div class='del'>-                        iobref-&gt;iobrefs[i] = iobuf_ref (iobuf);</div><div class='del'>-			iobref-&gt;used++;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (iobref-&gt;used == iobref-&gt;allocated) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; iobref-&gt;allocated; i++) {</div><div class='add'>+        if (iobref-&gt;iobrefs[i] == NULL) {</div><div class='add'>+            iobref-&gt;iobrefs[i] = iobuf_ref(iobuf);</div><div class='add'>+            iobref-&gt;used++;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-iobref_add (struct iobref *iobref, struct iobuf *iobuf)</div><div class='add'>+iobref_add(struct iobref *iobref, struct iobuf *iobuf)</div><div class='ctx'> {</div><div class='del'>-        int  ret = -EINVAL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;iobref-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __iobref_add (iobref, iobuf);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;iobref-&gt;lock);</div><div class='add'>+    LOCK(&amp;iobref-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __iobref_add(iobref, iobuf);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;iobref-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-iobref_merge (struct iobref *to, struct iobref *from)</div><div class='add'>+iobref_merge(struct iobref *to, struct iobref *from)</div><div class='ctx'> {</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-        struct iobuf *iobuf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", to, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", from, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", to, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", from, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;from-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; from-&gt;allocated; i++) {</div><div class='del'>-                        iobuf = from-&gt;iobrefs[i];</div><div class='add'>+    LOCK(&amp;from-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; from-&gt;allocated; i++) {</div><div class='add'>+            iobuf = from-&gt;iobrefs[i];</div><div class='ctx'> </div><div class='del'>-                        if (!iobuf)</div><div class='del'>-                                break;</div><div class='add'>+            if (!iobuf)</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                        ret = iobref_add (to, iobuf);</div><div class='add'>+            ret = iobref_add(to, iobuf);</div><div class='ctx'> </div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;from-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;from-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> size_t</div><div class='del'>-iobuf_size (struct iobuf *iobuf)</div><div class='add'>+iobuf_size(struct iobuf *iobuf)</div><div class='ctx'> {</div><div class='del'>-        size_t size = 0;</div><div class='add'>+    size_t size = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-        if (!iobuf-&gt;iobuf_arena) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='del'>-                        "arena not found");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!iobuf-&gt;iobuf_arena) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_ARENA_NOT_FOUND,</div><div class='add'>+               "arena not found");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!iobuf-&gt;iobuf_arena-&gt;iobuf_pool) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_POOL_NOT_FOUND,</div><div class='del'>-                        "pool not found");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!iobuf-&gt;iobuf_arena-&gt;iobuf_pool) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_POOL_NOT_FOUND,</div><div class='add'>+               "pool not found");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        size = iobuf-&gt;iobuf_arena-&gt;page_size;</div><div class='add'>+    size = iobuf-&gt;iobuf_arena-&gt;page_size;</div><div class='ctx'> out:</div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> size_t</div><div class='del'>-iobref_size (struct iobref *iobref)</div><div class='add'>+iobref_size(struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-        size_t size = 0;</div><div class='del'>-        int    i = 0;</div><div class='add'>+    size_t size = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobref, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobref, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;iobref-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; iobref-&gt;allocated; i++) {</div><div class='del'>-                        if (iobref-&gt;iobrefs[i])</div><div class='del'>-                                size += iobuf_size (iobref-&gt;iobrefs[i]);</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;iobref-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; iobref-&gt;allocated; i++) {</div><div class='add'>+            if (iobref-&gt;iobrefs[i])</div><div class='add'>+                size += iobuf_size(iobref-&gt;iobrefs[i]);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;iobref-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;iobref-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-iobuf_info_dump (struct iobuf *iobuf, const char *key_prefix)</div><div class='add'>+iobuf_info_dump(struct iobuf *iobuf, const char *key_prefix)</div><div class='ctx'> {</div><div class='del'>-        char   key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        struct iobuf my_iobuf;</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    struct iobuf my_iobuf;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf, out);</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK(&amp;iobuf-&gt;lock);</div><div class='del'>-        if (ret) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-        memcpy(&amp;my_iobuf, iobuf, sizeof(my_iobuf));</div><div class='del'>-        UNLOCK(&amp;iobuf-&gt;lock);</div><div class='add'>+    ret = TRY_LOCK(&amp;iobuf-&gt;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    memcpy(&amp;my_iobuf, iobuf, sizeof(my_iobuf));</div><div class='add'>+    UNLOCK(&amp;iobuf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix,"ref");</div><div class='del'>-        gf_proc_dump_write(key, "%d", my_iobuf.ref);</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix,"ptr");</div><div class='del'>-        gf_proc_dump_write(key, "%p", my_iobuf.ptr);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "ref");</div><div class='add'>+    gf_proc_dump_write(key, "%d", my_iobuf.ref);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "ptr");</div><div class='add'>+    gf_proc_dump_write(key, "%p", my_iobuf.ptr);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-iobuf_arena_info_dump (struct iobuf_arena *iobuf_arena, const char *key_prefix)</div><div class='add'>+iobuf_arena_info_dump(struct iobuf_arena *iobuf_arena, const char *key_prefix)</div><div class='ctx'> {</div><div class='del'>-        char key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int  i = 1;</div><div class='del'>-        struct iobuf *trav;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix,"mem_base");</div><div class='del'>-        gf_proc_dump_write(key, "%p", iobuf_arena-&gt;mem_base);</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix, "active_cnt");</div><div class='del'>-        gf_proc_dump_write(key, "%d", iobuf_arena-&gt;active_cnt);</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix, "passive_cnt");</div><div class='del'>-        gf_proc_dump_write(key, "%d", iobuf_arena-&gt;passive_cnt);</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix, "alloc_cnt");</div><div class='del'>-        gf_proc_dump_write(key, "%"PRIu64, iobuf_arena-&gt;alloc_cnt);</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix, "max_active");</div><div class='del'>-        gf_proc_dump_write(key, "%"PRIu64, iobuf_arena-&gt;max_active);</div><div class='del'>-        gf_proc_dump_build_key(key, key_prefix, "page_size");</div><div class='del'>-        gf_proc_dump_write(key, "%"PRIu64, iobuf_arena-&gt;page_size);</div><div class='del'>-        list_for_each_entry (trav, &amp;iobuf_arena-&gt;active.list, list) {</div><div class='del'>-                gf_proc_dump_build_key(key, key_prefix,"active_iobuf.%d", i++);</div><div class='del'>-                gf_proc_dump_add_section(key);</div><div class='del'>-                iobuf_info_dump(trav, key);</div><div class='del'>-        }</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i = 1;</div><div class='add'>+    struct iobuf *trav;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_arena, out);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "mem_base");</div><div class='add'>+    gf_proc_dump_write(key, "%p", iobuf_arena-&gt;mem_base);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "active_cnt");</div><div class='add'>+    gf_proc_dump_write(key, "%d", iobuf_arena-&gt;active_cnt);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "passive_cnt");</div><div class='add'>+    gf_proc_dump_write(key, "%d", iobuf_arena-&gt;passive_cnt);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "alloc_cnt");</div><div class='add'>+    gf_proc_dump_write(key, "%" PRIu64, iobuf_arena-&gt;alloc_cnt);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "max_active");</div><div class='add'>+    gf_proc_dump_write(key, "%" PRIu64, iobuf_arena-&gt;max_active);</div><div class='add'>+    gf_proc_dump_build_key(key, key_prefix, "page_size");</div><div class='add'>+    gf_proc_dump_write(key, "%" PRIu64, iobuf_arena-&gt;page_size);</div><div class='add'>+    list_for_each_entry(trav, &amp;iobuf_arena-&gt;active.list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_build_key(key, key_prefix, "active_iobuf.%d", i++);</div><div class='add'>+        gf_proc_dump_add_section(key);</div><div class='add'>+        iobuf_info_dump(trav, key);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-iobuf_stats_dump (struct iobuf_pool *iobuf_pool)</div><div class='add'>+iobuf_stats_dump(struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        char               msg[1024];</div><div class='del'>-        struct iobuf_arena *trav = NULL;</div><div class='del'>-        int                i = 1;</div><div class='del'>-        int                j = 0;</div><div class='del'>-        int                ret = -1;</div><div class='add'>+    char msg[1024];</div><div class='add'>+    struct iobuf_arena *trav = NULL;</div><div class='add'>+    int i = 1;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iobuf_pool, out);</div><div class='ctx'> </div><div class='del'>-        ret = pthread_mutex_trylock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    ret = pthread_mutex_trylock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                return;</div><div class='add'>+    if (ret) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_add_section("iobuf.global");</div><div class='add'>+    gf_proc_dump_write("iobuf_pool", "%p", iobuf_pool);</div><div class='add'>+    gf_proc_dump_write("iobuf_pool.default_page_size", "%d",</div><div class='add'>+                       iobuf_pool-&gt;default_page_size);</div><div class='add'>+    gf_proc_dump_write("iobuf_pool.arena_size", "%d", iobuf_pool-&gt;arena_size);</div><div class='add'>+    gf_proc_dump_write("iobuf_pool.arena_cnt", "%d", iobuf_pool-&gt;arena_cnt);</div><div class='add'>+    gf_proc_dump_write("iobuf_pool.request_misses", "%" PRId64,</div><div class='add'>+                       iobuf_pool-&gt;request_misses);</div><div class='add'>+</div><div class='add'>+    for (j = 0; j &lt; IOBUF_ARENA_MAX_INDEX; j++) {</div><div class='add'>+        list_for_each_entry(trav, &amp;iobuf_pool-&gt;arenas[j], list)</div><div class='add'>+        {</div><div class='add'>+            snprintf(msg, sizeof(msg), "arena.%d", i);</div><div class='add'>+            gf_proc_dump_add_section(msg);</div><div class='add'>+            iobuf_arena_info_dump(trav, msg);</div><div class='add'>+            i++;</div><div class='ctx'>         }</div><div class='del'>-        gf_proc_dump_add_section("iobuf.global");</div><div class='del'>-        gf_proc_dump_write("iobuf_pool","%p", iobuf_pool);</div><div class='del'>-        gf_proc_dump_write("iobuf_pool.default_page_size", "%d",</div><div class='del'>-                                                iobuf_pool-&gt;default_page_size);</div><div class='del'>-        gf_proc_dump_write("iobuf_pool.arena_size", "%d",</div><div class='del'>-                           iobuf_pool-&gt;arena_size);</div><div class='del'>-        gf_proc_dump_write("iobuf_pool.arena_cnt", "%d",</div><div class='del'>-                           iobuf_pool-&gt;arena_cnt);</div><div class='del'>-        gf_proc_dump_write("iobuf_pool.request_misses", "%"PRId64,</div><div class='del'>-                           iobuf_pool-&gt;request_misses);</div><div class='del'>-</div><div class='del'>-        for (j = 0; j &lt; IOBUF_ARENA_MAX_INDEX; j++) {</div><div class='del'>-                list_for_each_entry (trav, &amp;iobuf_pool-&gt;arenas[j], list) {</div><div class='del'>-                        snprintf(msg, sizeof(msg),</div><div class='del'>-                                 "arena.%d", i);</div><div class='del'>-                        gf_proc_dump_add_section(msg);</div><div class='del'>-                        iobuf_arena_info_dump(trav,msg);</div><div class='del'>-                        i++;</div><div class='del'>-                }</div><div class='del'>-                list_for_each_entry (trav, &amp;iobuf_pool-&gt;purge[j], list) {</div><div class='del'>-                        snprintf(msg, sizeof(msg),</div><div class='del'>-                                 "purge.%d", i);</div><div class='del'>-                        gf_proc_dump_add_section(msg);</div><div class='del'>-                        iobuf_arena_info_dump(trav,msg);</div><div class='del'>-                        i++;</div><div class='del'>-                }</div><div class='del'>-                list_for_each_entry (trav, &amp;iobuf_pool-&gt;filled[j], list) {</div><div class='del'>-                        snprintf(msg, sizeof(msg),</div><div class='del'>-                                 "filled.%d", i);</div><div class='del'>-                        gf_proc_dump_add_section(msg);</div><div class='del'>-                        iobuf_arena_info_dump(trav,msg);</div><div class='del'>-                        i++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+        list_for_each_entry(trav, &amp;iobuf_pool-&gt;purge[j], list)</div><div class='add'>+        {</div><div class='add'>+            snprintf(msg, sizeof(msg), "purge.%d", i);</div><div class='add'>+            gf_proc_dump_add_section(msg);</div><div class='add'>+            iobuf_arena_info_dump(trav, msg);</div><div class='add'>+            i++;</div><div class='add'>+        }</div><div class='add'>+        list_for_each_entry(trav, &amp;iobuf_pool-&gt;filled[j], list)</div><div class='add'>+        {</div><div class='add'>+            snprintf(msg, sizeof(msg), "filled.%d", i);</div><div class='add'>+            gf_proc_dump_add_section(msg);</div><div class='add'>+            iobuf_arena_info_dump(trav, msg);</div><div class='add'>+            i++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;iobuf_pool-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> iobuf_to_iovec(struct iobuf *iob, struct iovec *iov)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iob, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("iobuf", iov, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iob, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("iobuf", iov, out);</div><div class='ctx'> </div><div class='del'>-        iov-&gt;iov_base = iobuf_ptr (iob);</div><div class='del'>-        iov-&gt;iov_len =  iobuf_pagesize (iob);</div><div class='add'>+    iov-&gt;iov_base = iobuf_ptr(iob);</div><div class='add'>+    iov-&gt;iov_len = iobuf_pagesize(iob);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-iobuf_copy (struct iobuf_pool *iobuf_pool, const struct iovec *iovec_src,</div><div class='del'>-            int iovcnt, struct iobref **iobref, struct iobuf **iobuf,</div><div class='del'>-            struct iovec *iov_dst)</div><div class='add'>+iobuf_copy(struct iobuf_pool *iobuf_pool, const struct iovec *iovec_src,</div><div class='add'>+           int iovcnt, struct iobref **iobref, struct iobuf **iobuf,</div><div class='add'>+           struct iovec *iov_dst)</div><div class='ctx'> {</div><div class='del'>-        size_t         size = -1;</div><div class='del'>-        int            ret  = 0;</div><div class='del'>-</div><div class='del'>-        size = iov_length (iovec_src, iovcnt);</div><div class='del'>-</div><div class='del'>-        *iobuf = iobuf_get2 (iobuf_pool, size);</div><div class='del'>-        if (!(*iobuf)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *iobref = iobref_new ();</div><div class='del'>-        if (!(*iobref)) {</div><div class='del'>-                iobuf_unref (*iobuf);</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = iobref_add (*iobref, *iobuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                iobuf_unref (*iobuf);</div><div class='del'>-                iobref_unref (*iobref);</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iov_unload (iobuf_ptr (*iobuf), iovec_src, iovcnt);</div><div class='del'>-</div><div class='del'>-        iov_dst-&gt;iov_base = iobuf_ptr (*iobuf);</div><div class='del'>-        iov_dst-&gt;iov_len = size;</div><div class='add'>+    size_t size = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    size = iov_length(iovec_src, iovcnt);</div><div class='add'>+</div><div class='add'>+    *iobuf = iobuf_get2(iobuf_pool, size);</div><div class='add'>+    if (!(*iobuf)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *iobref = iobref_new();</div><div class='add'>+    if (!(*iobref)) {</div><div class='add'>+        iobuf_unref(*iobuf);</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = iobref_add(*iobref, *iobuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        iobuf_unref(*iobuf);</div><div class='add'>+        iobref_unref(*iobref);</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iov_unload(iobuf_ptr(*iobuf), iovec_src, iovcnt);</div><div class='add'>+</div><div class='add'>+    iov_dst-&gt;iov_base = iobuf_ptr(*iobuf);</div><div class='add'>+    iov_dst-&gt;iov_len = size;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/latency.c b/libglusterfs/src/latency.c<br/>index fb3b155caa6..2dc2a318216 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/latency.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/latency.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/latency.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/latency.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * This file contains functions to support dumping of</div><div class='ctx'>  * latencies of FOPs broken down by subvolumes.</div><div class='hunk'>@@ -21,82 +20,77 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_update_latency (call_frame_t *frame)</div><div class='add'>+gf_update_latency(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        double elapsed;</div><div class='del'>-        struct timespec *begin, *end;</div><div class='add'>+    double elapsed;</div><div class='add'>+    struct timespec *begin, *end;</div><div class='ctx'> </div><div class='del'>-        fop_latency_t *lat;</div><div class='add'>+    fop_latency_t *lat;</div><div class='ctx'> </div><div class='del'>-        begin = &amp;frame-&gt;begin;</div><div class='del'>-        end   = &amp;frame-&gt;end;</div><div class='add'>+    begin = &amp;frame-&gt;begin;</div><div class='add'>+    end = &amp;frame-&gt;end;</div><div class='ctx'> </div><div class='del'>-        if (!(begin-&gt;tv_sec &amp;&amp; end-&gt;tv_sec))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!(begin-&gt;tv_sec &amp;&amp; end-&gt;tv_sec))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        elapsed = (end-&gt;tv_sec - begin-&gt;tv_sec) * 1e9</div><div class='del'>-                + (end-&gt;tv_nsec - begin-&gt;tv_nsec);</div><div class='add'>+    elapsed = (end-&gt;tv_sec - begin-&gt;tv_sec) * 1e9 +</div><div class='add'>+              (end-&gt;tv_nsec - begin-&gt;tv_nsec);</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;op &lt; 0 || frame-&gt;op &gt;= GF_FOP_MAXVALUE) {</div><div class='del'>-                gf_log ("[core]", GF_LOG_WARNING,</div><div class='del'>-                        "Invalid frame op value: %d",</div><div class='del'>-                        frame-&gt;op);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (frame-&gt;op &lt; 0 || frame-&gt;op &gt;= GF_FOP_MAXVALUE) {</div><div class='add'>+        gf_log("[core]", GF_LOG_WARNING, "Invalid frame op value: %d",</div><div class='add'>+               frame-&gt;op);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Can happen mostly at initiator xlator, as STACK_WIND/UNWIND macros</div><div class='del'>-           set it right anyways for those frames */</div><div class='del'>-        if (!frame-&gt;op)</div><div class='del'>-                frame-&gt;op = frame-&gt;root-&gt;op;</div><div class='add'>+    /* Can happen mostly at initiator xlator, as STACK_WIND/UNWIND macros</div><div class='add'>+       set it right anyways for those frames */</div><div class='add'>+    if (!frame-&gt;op)</div><div class='add'>+        frame-&gt;op = frame-&gt;root-&gt;op;</div><div class='ctx'> </div><div class='del'>-        lat = &amp;frame-&gt;this-&gt;stats.interval.latencies[frame-&gt;op];</div><div class='add'>+    lat = &amp;frame-&gt;this-&gt;stats.interval.latencies[frame-&gt;op];</div><div class='ctx'> </div><div class='del'>-        if (lat-&gt;max &lt; elapsed)</div><div class='del'>-                lat-&gt;max = elapsed;</div><div class='add'>+    if (lat-&gt;max &lt; elapsed)</div><div class='add'>+        lat-&gt;max = elapsed;</div><div class='ctx'> </div><div class='del'>-        if (lat-&gt;min &gt; elapsed)</div><div class='del'>-                lat-&gt;min = elapsed;</div><div class='add'>+    if (lat-&gt;min &gt; elapsed)</div><div class='add'>+        lat-&gt;min = elapsed;</div><div class='ctx'> </div><div class='del'>-        lat-&gt;total += elapsed;</div><div class='del'>-        lat-&gt;count++;</div><div class='add'>+    lat-&gt;total += elapsed;</div><div class='add'>+    lat-&gt;count++;</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_latency_info (xlator_t *xl)</div><div class='add'>+gf_proc_dump_latency_info(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        char key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int i;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        snprintf (key_prefix, GF_DUMP_MAX_BUF_LEN, "%s.latency", xl-&gt;name);</div><div class='del'>-        gf_proc_dump_add_section (key_prefix);</div><div class='add'>+    snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "%s.latency", xl-&gt;name);</div><div class='add'>+    gf_proc_dump_add_section(key_prefix);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                gf_proc_dump_build_key (key, key_prefix, "%s",</div><div class='del'>-                                        (char *)gf_fop_list[i]);</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        gf_proc_dump_build_key(key, key_prefix, "%s", (char *)gf_fop_list[i]);</div><div class='ctx'> </div><div class='del'>-                fop_latency_t *lat = &amp;xl-&gt;stats.interval.latencies[i];</div><div class='add'>+        fop_latency_t *lat = &amp;xl-&gt;stats.interval.latencies[i];</div><div class='ctx'> </div><div class='del'>-                /* Doesn't make sense to continue if there are no fops</div><div class='del'>-                   came in the given interval */</div><div class='del'>-                if (!lat-&gt;count)</div><div class='del'>-                        continue;</div><div class='add'>+        /* Doesn't make sense to continue if there are no fops</div><div class='add'>+           came in the given interval */</div><div class='add'>+        if (!lat-&gt;count)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                gf_proc_dump_write (key, "%.03f,%"PRId64",%.03f",</div><div class='del'>-                                    (lat-&gt;total / lat-&gt;count), lat-&gt;count,</div><div class='del'>-                                    lat-&gt;total);</div><div class='del'>-        }</div><div class='add'>+        gf_proc_dump_write(key, "%.03f,%" PRId64 ",%.03f",</div><div class='add'>+                           (lat-&gt;total / lat-&gt;count), lat-&gt;count, lat-&gt;total);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (xl-&gt;stats.interval.latencies, 0,</div><div class='del'>-                sizeof (xl-&gt;stats.interval.latencies));</div><div class='add'>+    memset(xl-&gt;stats.interval.latencies, 0,</div><div class='add'>+           sizeof(xl-&gt;stats.interval.latencies));</div><div class='ctx'> </div><div class='del'>-        /* make sure 'min' is set to high value, so it would be</div><div class='del'>-           properly set later */</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                xl-&gt;stats.interval.latencies[i].min = 0xffffffff;</div><div class='del'>-        }</div><div class='add'>+    /* make sure 'min' is set to high value, so it would be</div><div class='add'>+       properly set later */</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        xl-&gt;stats.interval.latencies[i].min = 0xffffffff;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/libglusterfs/src/locking.c b/libglusterfs/src/locking.c<br/>index f27b0d05b35..89cbaa00c8b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/locking.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/locking.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/locking.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/locking.c</a></div><div class='hunk'>@@ -19,10 +19,9 @@</div><div class='ctx'> </div><div class='ctx'> int use_spinlocks = 0;</div><div class='ctx'> </div><div class='del'>-static void __attribute__((constructor))</div><div class='del'>-gf_lock_setup (void)</div><div class='add'>+static void __attribute__((constructor)) gf_lock_setup(void)</div><div class='ctx'> {</div><div class='del'>-        //use_spinlocks = (sysconf(_SC_NPROCESSORS_ONLN) &gt; 1);</div><div class='add'>+    // use_spinlocks = (sysconf(_SC_NPROCESSORS_ONLN) &gt; 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='head'>diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c<br/>index a46cb234b72..61909ef4dae 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/logging.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/logging.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/logging.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/logging.c</a></div><div class='hunk'>@@ -28,14 +28,14 @@</div><div class='ctx'> </div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> </div><div class='del'>-#define GF_JSON_MSG_LENGTH      8192</div><div class='del'>-#define GF_SYSLOG_CEE_FORMAT    \</div><div class='del'>-        "@cee: {\"msg\": \"%s\", \"gf_code\": \"%u\", \"gf_message\": \"%s\"}"</div><div class='del'>-#define GF_LOG_CONTROL_FILE     "/etc/glusterfs/logger.conf"</div><div class='del'>-#define GF_LOG_BACKTRACE_DEPTH  5</div><div class='del'>-#define GF_LOG_BACKTRACE_SIZE   4096</div><div class='del'>-#define GF_LOG_TIMESTR_SIZE     256</div><div class='del'>-#define GF_MAX_SLOG_PAIR_COUNT  100</div><div class='add'>+#define GF_JSON_MSG_LENGTH 8192</div><div class='add'>+#define GF_SYSLOG_CEE_FORMAT                                                   \</div><div class='add'>+    "@cee: {\"msg\": \"%s\", \"gf_code\": \"%u\", \"gf_message\": \"%s\"}"</div><div class='add'>+#define GF_LOG_CONTROL_FILE "/etc/glusterfs/logger.conf"</div><div class='add'>+#define GF_LOG_BACKTRACE_DEPTH 5</div><div class='add'>+#define GF_LOG_BACKTRACE_SIZE 4096</div><div class='add'>+#define GF_LOG_TIMESTR_SIZE 256</div><div class='add'>+#define GF_MAX_SLOG_PAIR_COUNT 100</div><div class='ctx'> </div><div class='ctx'> #include "xlator.h"</div><div class='ctx'> #include "logging.h"</div><div class='hunk'>@@ -46,147 +46,146 @@</div><div class='ctx'> </div><div class='ctx'> /* Do not replace gf_log in TEST_LOG with gf_msg, as there is a slight chance</div><div class='ctx'>  * that it could lead to an infinite recursion.*/</div><div class='del'>-#define TEST_LOG(__msg, __args ...)                             \</div><div class='del'>-                gf_log ("logging-infra", GF_LOG_DEBUG, __msg, ##__args);</div><div class='add'>+#define TEST_LOG(__msg, __args...)                                             \</div><div class='add'>+    gf_log("logging-infra", GF_LOG_DEBUG, __msg, ##__args);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_flush_timeout_cbk (void *data);</div><div class='add'>+gf_log_flush_timeout_cbk(void *data);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_log_inject_timer_event (glusterfs_ctx_t *ctx);</div><div class='add'>+gf_log_inject_timer_event(glusterfs_ctx_t *ctx);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_log_flush_extra_msgs (glusterfs_ctx_t *ctx, uint32_t new);</div><div class='add'>+gf_log_flush_extra_msgs(glusterfs_ctx_t *ctx, uint32_t new);</div><div class='ctx'> </div><div class='ctx'> static char *gf_level_strings[] = {"",  /* NONE */</div><div class='del'>-                "M", /* EMERGENCY */</div><div class='del'>-                "A", /* ALERT */</div><div class='del'>-                "C", /* CRITICAL */</div><div class='del'>-                "E", /* ERROR */</div><div class='del'>-                "W", /* WARNING */</div><div class='del'>-                "N", /* NOTICE */</div><div class='del'>-                "I", /* INFO */</div><div class='del'>-                "D", /* DEBUG */</div><div class='del'>-                "T", /* TRACE */</div><div class='del'>-                ""</div><div class='del'>-};</div><div class='add'>+                                   "M", /* EMERGENCY */</div><div class='add'>+                                   "A", /* ALERT */</div><div class='add'>+                                   "C", /* CRITICAL */</div><div class='add'>+                                   "E", /* ERROR */</div><div class='add'>+                                   "W", /* WARNING */</div><div class='add'>+                                   "N", /* NOTICE */</div><div class='add'>+                                   "I", /* INFO */</div><div class='add'>+                                   "D", /* DEBUG */</div><div class='add'>+                                   "T", /* TRACE */</div><div class='add'>+                                   ""};</div><div class='ctx'> </div><div class='ctx'> /* Ideally this should get moved to logging.h */</div><div class='ctx'> struct _msg_queue {</div><div class='del'>-        struct list_head msgs;</div><div class='add'>+    struct list_head msgs;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct _log_msg {</div><div class='del'>-        const char *msg;</div><div class='del'>-        struct list_head queue;</div><div class='add'>+    const char *msg;</div><div class='add'>+    struct list_head queue;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_logrotate (int signum)</div><div class='add'>+gf_log_logrotate(int signum)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx) {</div><div class='del'>-                ctx-&gt;log.logrotate = 1;</div><div class='del'>-                ctx-&gt;log.cmd_history_logrotate = 1;</div><div class='del'>-        }</div><div class='add'>+    if (ctx) {</div><div class='add'>+        ctx-&gt;log.logrotate = 1;</div><div class='add'>+        ctx-&gt;log.cmd_history_logrotate = 1;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_enable_syslog (void)</div><div class='add'>+gf_log_enable_syslog(void)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.gf_log_syslog = 1;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.gf_log_syslog = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_disable_syslog (void)</div><div class='add'>+gf_log_disable_syslog(void)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.gf_log_syslog = 0;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.gf_log_syslog = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_loglevel_t</div><div class='del'>-gf_log_get_loglevel (void)</div><div class='add'>+gf_log_get_loglevel(void)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                return ctx-&gt;log.loglevel;</div><div class='del'>-        else</div><div class='del'>-                /* return global defaults (see gf_log_globals_init) */</div><div class='del'>-                return GF_LOG_INFO;</div><div class='add'>+    if (ctx)</div><div class='add'>+        return ctx-&gt;log.loglevel;</div><div class='add'>+    else</div><div class='add'>+        /* return global defaults (see gf_log_globals_init) */</div><div class='add'>+        return GF_LOG_INFO;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_loglevel (glusterfs_ctx_t *ctx, gf_loglevel_t level)</div><div class='add'>+gf_log_set_loglevel(glusterfs_ctx_t *ctx, gf_loglevel_t level)</div><div class='ctx'> {</div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.loglevel = level;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.loglevel = level;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_log_get_localtime (void)</div><div class='add'>+gf_log_get_localtime(void)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                return ctx-&gt;log.localtime;</div><div class='del'>-        else</div><div class='del'>-                /* return global defaults (see gf_log_globals_init) */</div><div class='del'>-                return 0;</div><div class='add'>+    if (ctx)</div><div class='add'>+        return ctx-&gt;log.localtime;</div><div class='add'>+    else</div><div class='add'>+        /* return global defaults (see gf_log_globals_init) */</div><div class='add'>+        return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_localtime (int on_off)</div><div class='add'>+gf_log_set_localtime(int on_off)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.localtime = on_off;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.localtime = on_off;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_flush (void)</div><div class='add'>+gf_log_flush(void)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx            = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx &amp;&amp; ctx-&gt;log.logger == gf_logger_glusterlog) {</div><div class='del'>-                pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                fflush (ctx-&gt;log.gf_log_logfile);</div><div class='del'>-                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        }</div><div class='add'>+    if (ctx &amp;&amp; ctx-&gt;log.logger == gf_logger_glusterlog) {</div><div class='add'>+        pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+        fflush(ctx-&gt;log.gf_log_logfile);</div><div class='add'>+        pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_xl_loglevel (void *this, gf_loglevel_t level)</div><div class='add'>+gf_log_set_xl_loglevel(void *this, gf_loglevel_t level)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *xl = this;</div><div class='del'>-        if (!xl)</div><div class='del'>-                return;</div><div class='del'>-        xl-&gt;loglevel = level;</div><div class='add'>+    xlator_t *xl = this;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return;</div><div class='add'>+    xl-&gt;loglevel = level;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: The following get/set functions are yet not invoked from anywhere</div><div class='hunk'>@@ -207,104 +206,104 @@ gf_log_set_xl_loglevel (void *this, gf_loglevel_t level)</div><div class='ctx'>  * care needs to be taken to configure and start daemons based on the versions</div><div class='ctx'>  * that supports these features */</div><div class='ctx'> gf_log_format_t</div><div class='del'>-gf_log_get_logformat (void)</div><div class='add'>+gf_log_get_logformat(void)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                return ctx-&gt;log.logformat;</div><div class='del'>-        else</div><div class='del'>-                /* return global defaluts (see gf_log_globals_init) */</div><div class='del'>-                return gf_logformat_withmsgid;</div><div class='add'>+    if (ctx)</div><div class='add'>+        return ctx-&gt;log.logformat;</div><div class='add'>+    else</div><div class='add'>+        /* return global defaluts (see gf_log_globals_init) */</div><div class='add'>+        return gf_logformat_withmsgid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_logformat (gf_log_format_t format)</div><div class='add'>+gf_log_set_logformat(gf_log_format_t format)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.logformat = format;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.logformat = format;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_log_logger_t</div><div class='del'>-gf_log_get_logger (void)</div><div class='add'>+gf_log_get_logger(void)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                return ctx-&gt;log.logger;</div><div class='del'>-        else</div><div class='del'>-                /* return global defaluts (see gf_log_globals_init) */</div><div class='del'>-                return gf_logger_glusterlog;</div><div class='add'>+    if (ctx)</div><div class='add'>+        return ctx-&gt;log.logger;</div><div class='add'>+    else</div><div class='add'>+        /* return global defaluts (see gf_log_globals_init) */</div><div class='add'>+        return gf_logger_glusterlog;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_logger (gf_log_logger_t logger)</div><div class='add'>+gf_log_set_logger(gf_log_logger_t logger)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.logger = logger;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.logger = logger;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_loglevel_t</div><div class='del'>-gf_log_get_xl_loglevel (void *this)</div><div class='add'>+gf_log_get_xl_loglevel(void *this)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *xl = this;</div><div class='del'>-        if (!xl)</div><div class='del'>-                return 0;</div><div class='del'>-        return xl-&gt;loglevel;</div><div class='add'>+    xlator_t *xl = this;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return 0;</div><div class='add'>+    return xl-&gt;loglevel;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_log_buf_size (uint32_t buf_size)</div><div class='add'>+gf_log_set_log_buf_size(uint32_t buf_size)</div><div class='ctx'> {</div><div class='del'>-        uint32_t          old = 0;</div><div class='del'>-        glusterfs_ctx_t  *ctx = THIS-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-        {</div><div class='del'>-                old = ctx-&gt;log.lru_size;</div><div class='del'>-                ctx-&gt;log.lru_size = buf_size;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-</div><div class='del'>-        /* If the old size is less than/equal to the new size, then do nothing.</div><div class='del'>-         *</div><div class='del'>-         * But if the new size is less than the old size, then</div><div class='del'>-         *   a. If the cur size of the buf is less than or equal the new size,</div><div class='del'>-         *      then do nothing.</div><div class='del'>-         *   b. But if the current size of the buf is greater than the new size,</div><div class='del'>-         *      then flush the least recently used (cur size - new_size) msgs</div><div class='del'>-         *      to disk.</div><div class='del'>-         */</div><div class='del'>-        if (buf_size &lt; old)</div><div class='del'>-                gf_log_flush_extra_msgs (ctx, buf_size);</div><div class='add'>+    uint32_t old = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = THIS-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    {</div><div class='add'>+        old = ctx-&gt;log.lru_size;</div><div class='add'>+        ctx-&gt;log.lru_size = buf_size;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+</div><div class='add'>+    /* If the old size is less than/equal to the new size, then do nothing.</div><div class='add'>+     *</div><div class='add'>+     * But if the new size is less than the old size, then</div><div class='add'>+     *   a. If the cur size of the buf is less than or equal the new size,</div><div class='add'>+     *      then do nothing.</div><div class='add'>+     *   b. But if the current size of the buf is greater than the new size,</div><div class='add'>+     *      then flush the least recently used (cur size - new_size) msgs</div><div class='add'>+     *      to disk.</div><div class='add'>+     */</div><div class='add'>+    if (buf_size &lt; old)</div><div class='add'>+        gf_log_flush_extra_msgs(ctx, buf_size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_set_log_flush_timeout (uint32_t timeout)</div><div class='add'>+gf_log_set_log_flush_timeout(uint32_t timeout)</div><div class='ctx'> {</div><div class='del'>-        THIS-&gt;ctx-&gt;log.timeout = timeout;</div><div class='add'>+    THIS-&gt;ctx-&gt;log.timeout = timeout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> log_buf_t *</div><div class='del'>-log_buf_new ()</div><div class='add'>+log_buf_new()</div><div class='ctx'> {</div><div class='del'>-        log_buf_t  *buf  = NULL;</div><div class='add'>+    log_buf_t *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        buf = mem_get0 (THIS-&gt;ctx-&gt;logbuf_pool);</div><div class='add'>+    buf = mem_get0(THIS-&gt;ctx-&gt;logbuf_pool);</div><div class='ctx'> </div><div class='del'>-        return buf;</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* If log_buf_init() fails (indicated by a return value of -1),</div><div class='hunk'>@@ -312,147 +311,145 @@ log_buf_new ()</div><div class='ctx'>  * the log_buf_t object back to its memory pool.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-log_buf_init (log_buf_t *buf, const char *domain, const char *file,</div><div class='del'>-              const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-              int errnum, uint64_t msgid, char **appmsgstr, int graph_id)</div><div class='add'>+log_buf_init(log_buf_t *buf, const char *domain, const char *file,</div><div class='add'>+             const char *function, int32_t line, gf_loglevel_t level,</div><div class='add'>+             int errnum, uint64_t msgid, char **appmsgstr, int graph_id)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!buf || !domain || !file || !function || !appmsgstr || !*appmsgstr)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!buf || !domain || !file || !function || !appmsgstr || !*appmsgstr)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        buf-&gt;msg = gf_strdup (*appmsgstr);</div><div class='del'>-        if (!buf-&gt;msg)</div><div class='del'>-                goto out;</div><div class='add'>+    buf-&gt;msg = gf_strdup(*appmsgstr);</div><div class='add'>+    if (!buf-&gt;msg)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        buf-&gt;msg_id = msgid;</div><div class='del'>-        buf-&gt;errnum = errnum;</div><div class='del'>-        buf-&gt;domain = gf_strdup (domain);</div><div class='del'>-        if (!buf-&gt;domain)</div><div class='del'>-                goto out;</div><div class='add'>+    buf-&gt;msg_id = msgid;</div><div class='add'>+    buf-&gt;errnum = errnum;</div><div class='add'>+    buf-&gt;domain = gf_strdup(domain);</div><div class='add'>+    if (!buf-&gt;domain)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        buf-&gt;file = gf_strdup (file);</div><div class='del'>-        if (!buf-&gt;file)</div><div class='del'>-                goto out;</div><div class='add'>+    buf-&gt;file = gf_strdup(file);</div><div class='add'>+    if (!buf-&gt;file)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        buf-&gt;function = gf_strdup (function);</div><div class='del'>-        if (!buf-&gt;function)</div><div class='del'>-                goto out;</div><div class='add'>+    buf-&gt;function = gf_strdup(function);</div><div class='add'>+    if (!buf-&gt;function)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        buf-&gt;line = line;</div><div class='del'>-        buf-&gt;level = level;</div><div class='del'>-        buf-&gt;refcount = 0;</div><div class='del'>-        buf-&gt;graph_id = graph_id;</div><div class='del'>-        INIT_LIST_HEAD (&amp;buf-&gt;msg_list);</div><div class='add'>+    buf-&gt;line = line;</div><div class='add'>+    buf-&gt;level = level;</div><div class='add'>+    buf-&gt;refcount = 0;</div><div class='add'>+    buf-&gt;graph_id = graph_id;</div><div class='add'>+    INIT_LIST_HEAD(&amp;buf-&gt;msg_list);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-log_buf_destroy (log_buf_t *buf)</div><div class='add'>+log_buf_destroy(log_buf_t *buf)</div><div class='ctx'> {</div><div class='add'>+    if (!buf)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!buf)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        GF_FREE (buf-&gt;msg);</div><div class='del'>-        GF_FREE (buf-&gt;domain);</div><div class='del'>-        GF_FREE (buf-&gt;file);</div><div class='del'>-        GF_FREE (buf-&gt;function);</div><div class='add'>+    GF_FREE(buf-&gt;msg);</div><div class='add'>+    GF_FREE(buf-&gt;domain);</div><div class='add'>+    GF_FREE(buf-&gt;file);</div><div class='add'>+    GF_FREE(buf-&gt;function);</div><div class='ctx'> </div><div class='del'>-        mem_put (buf);</div><div class='del'>-        return 0;</div><div class='add'>+    mem_put(buf);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> gf_log_rotate(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int            fd   = -1;</div><div class='del'>-        FILE          *new_logfile = NULL;</div><div class='del'>-        FILE          *old_logfile = NULL;</div><div class='del'>-</div><div class='del'>-        /* not involving locks on initial check to speed it up */</div><div class='del'>-        if (ctx-&gt;log.logrotate) {</div><div class='del'>-                /* let only one winner through on races */</div><div class='del'>-                pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-</div><div class='del'>-                if (!ctx-&gt;log.logrotate) {</div><div class='del'>-                        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                        return;</div><div class='del'>-                } else {</div><div class='del'>-                        ctx-&gt;log.logrotate = 0;</div><div class='del'>-                        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd = sys_open (ctx-&gt;log.filename, O_CREAT | O_WRONLY | O_APPEND,</div><div class='del'>-                               S_IRUSR | S_IWUSR);</div><div class='del'>-                if (fd &lt; 0) {</div><div class='del'>-                        gf_msg ("logrotate", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED, "failed to open "</div><div class='del'>-                                "logfile");</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='add'>+    int fd = -1;</div><div class='add'>+    FILE *new_logfile = NULL;</div><div class='add'>+    FILE *old_logfile = NULL;</div><div class='add'>+</div><div class='add'>+    /* not involving locks on initial check to speed it up */</div><div class='add'>+    if (ctx-&gt;log.logrotate) {</div><div class='add'>+        /* let only one winner through on races */</div><div class='add'>+        pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+</div><div class='add'>+        if (!ctx-&gt;log.logrotate) {</div><div class='add'>+            pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+            return;</div><div class='add'>+        } else {</div><div class='add'>+            ctx-&gt;log.logrotate = 0;</div><div class='add'>+            pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                new_logfile = fdopen (fd, "a");</div><div class='del'>-                if (!new_logfile) {</div><div class='del'>-                        gf_msg ("logrotate", GF_LOG_CRITICAL, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED, "failed to open logfile"</div><div class='del'>-                                " %s", ctx-&gt;log.filename);</div><div class='del'>-                        sys_close (fd);</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='add'>+        fd = sys_open(ctx-&gt;log.filename, O_CREAT | O_WRONLY | O_APPEND,</div><div class='add'>+                      S_IRUSR | S_IWUSR);</div><div class='add'>+        if (fd &lt; 0) {</div><div class='add'>+            gf_msg("logrotate", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "failed to open "</div><div class='add'>+                   "logfile");</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (ctx-&gt;log.logfile)</div><div class='del'>-                                old_logfile = ctx-&gt;log.logfile;</div><div class='add'>+        new_logfile = fdopen(fd, "a");</div><div class='add'>+        if (!new_logfile) {</div><div class='add'>+            gf_msg("logrotate", GF_LOG_CRITICAL, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "failed to open logfile"</div><div class='add'>+                   " %s",</div><div class='add'>+                   ctx-&gt;log.filename);</div><div class='add'>+            sys_close(fd);</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        ctx-&gt;log.gf_log_logfile = ctx-&gt;log.logfile =</div><div class='del'>-                                                                new_logfile;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+        pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+        {</div><div class='add'>+            if (ctx-&gt;log.logfile)</div><div class='add'>+                old_logfile = ctx-&gt;log.logfile;</div><div class='ctx'> </div><div class='del'>-                if (old_logfile != NULL)</div><div class='del'>-                        fclose (old_logfile);</div><div class='add'>+            ctx-&gt;log.gf_log_logfile = ctx-&gt;log.logfile = new_logfile;</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+        if (old_logfile != NULL)</div><div class='add'>+            fclose(old_logfile);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_globals_fini (void)</div><div class='add'>+gf_log_globals_fini(void)</div><div class='ctx'> {</div><div class='del'>-        /* TODO: Nobody is invoking the fini, but cleanup needs to happen here,</div><div class='del'>-         * needs cleanup for, log.ident, log.filename, closelog, log file close</div><div class='del'>-         * rotate state, possibly under a lock */</div><div class='del'>-        pthread_mutex_destroy (&amp;THIS-&gt;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        pthread_mutex_destroy (&amp;THIS-&gt;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    /* TODO: Nobody is invoking the fini, but cleanup needs to happen here,</div><div class='add'>+     * needs cleanup for, log.ident, log.filename, closelog, log file close</div><div class='add'>+     * rotate state, possibly under a lock */</div><div class='add'>+    pthread_mutex_destroy(&amp;THIS-&gt;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    pthread_mutex_destroy(&amp;THIS-&gt;ctx-&gt;log.log_buf_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_disable_suppression_before_exit (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_log_disable_suppression_before_exit(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        /*</div><div class='del'>-         * First set log buf size to 0. This would ensure two things:</div><div class='del'>-         * i. that all outstanding log messages are flushed to disk, and</div><div class='del'>-         * ii. all subsequent calls to gf_msg will result in the logs getting</div><div class='del'>-         *     directly flushed to disk without being buffered.</div><div class='del'>-         *</div><div class='del'>-         * Then, cancel the current log timer event.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        gf_log_set_log_buf_size (0);</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;log.log_flush_timer) {</div><div class='del'>-                        gf_timer_call_cancel (ctx, ctx-&gt;log.log_flush_timer);</div><div class='del'>-                        ctx-&gt;log.log_flush_timer = NULL;</div><div class='del'>-                }</div><div class='add'>+    /*</div><div class='add'>+     * First set log buf size to 0. This would ensure two things:</div><div class='add'>+     * i. that all outstanding log messages are flushed to disk, and</div><div class='add'>+     * ii. all subsequent calls to gf_msg will result in the logs getting</div><div class='add'>+     *     directly flushed to disk without being buffered.</div><div class='add'>+     *</div><div class='add'>+     * Then, cancel the current log timer event.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    gf_log_set_log_buf_size(0);</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.log_flush_timer) {</div><div class='add'>+            gf_timer_call_cancel(ctx, ctx-&gt;log.log_flush_timer);</div><div class='add'>+            ctx-&gt;log.log_flush_timer = NULL;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** gf_log_fini - function to perform the cleanup of the log information</div><div class='hunk'>@@ -461,45 +458,44 @@ gf_log_disable_suppression_before_exit (glusterfs_ctx_t *ctx)</div><div class='ctx'>  *          failure: -1</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_log_fini (void *data)</div><div class='add'>+gf_log_fini(void *data)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = data;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        FILE            *old_logfile = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = data;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    FILE *old_logfile = NULL;</div><div class='ctx'> </div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-	        ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log_disable_suppression_before_exit (ctx);</div><div class='add'>+    gf_log_disable_suppression_before_exit(ctx);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;log.logfile) {</div><div class='del'>-                        old_logfile = ctx-&gt;log.logfile;</div><div class='del'>-</div><div class='del'>-                        /* Logfile needs to be set to NULL, so that any</div><div class='del'>-                           call to gf_log after calling gf_log_fini, will</div><div class='del'>-                           log the message to stderr.</div><div class='del'>-                        */</div><div class='del'>-                        ctx-&gt;log.loglevel = GF_LOG_NONE;</div><div class='del'>-                        ctx-&gt;log.logfile = NULL;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.logfile) {</div><div class='add'>+            old_logfile = ctx-&gt;log.logfile;</div><div class='add'>+</div><div class='add'>+            /* Logfile needs to be set to NULL, so that any</div><div class='add'>+               call to gf_log after calling gf_log_fini, will</div><div class='add'>+               log the message to stderr.</div><div class='add'>+            */</div><div class='add'>+            ctx-&gt;log.loglevel = GF_LOG_NONE;</div><div class='add'>+            ctx-&gt;log.logfile = NULL;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='del'>-        if (old_logfile &amp;&amp; (fclose (old_logfile) != 0))</div><div class='del'>-                ret = -1;</div><div class='add'>+    if (old_logfile &amp;&amp; (fclose(old_logfile) != 0))</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctx-&gt;log.ident);</div><div class='del'>-        GF_FREE (ctx-&gt;log.filename);</div><div class='add'>+    GF_FREE(ctx-&gt;log.ident);</div><div class='add'>+    GF_FREE(ctx-&gt;log.filename);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * gf_openlog -function to open syslog specific to gluster based on</div><div class='ctx'>  *             existence of file /etc/glusterfs/logger.conf</div><div class='hunk'>@@ -512,27 +508,26 @@ gf_log_fini (void *data)</div><div class='ctx'>  * @return: void</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-gf_openlog (const char *ident, int option, int facility)</div><div class='add'>+gf_openlog(const char *ident, int option, int facility)</div><div class='ctx'> {</div><div class='del'>-        int _option = option;</div><div class='del'>-        int _facility = facility;</div><div class='del'>-</div><div class='del'>-        if (-1 == _option) {</div><div class='del'>-                _option = LOG_PID | LOG_NDELAY;</div><div class='del'>-        }</div><div class='del'>-        if (-1 == _facility) {</div><div class='del'>-                _facility = LOG_LOCAL1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: Should check for errors here and return appropriately */</div><div class='del'>-        setlocale(LC_ALL, "");</div><div class='del'>-        setlocale(LC_NUMERIC, "C"); /* C-locale for strtod, ... */</div><div class='del'>-        /* close the previous syslog if open as we are changing settings */</div><div class='del'>-        closelog ();</div><div class='del'>-        openlog(ident, _option, _facility);</div><div class='add'>+    int _option = option;</div><div class='add'>+    int _facility = facility;</div><div class='add'>+</div><div class='add'>+    if (-1 == _option) {</div><div class='add'>+        _option = LOG_PID | LOG_NDELAY;</div><div class='add'>+    }</div><div class='add'>+    if (-1 == _facility) {</div><div class='add'>+        _facility = LOG_LOCAL1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: Should check for errors here and return appropriately */</div><div class='add'>+    setlocale(LC_ALL, "");</div><div class='add'>+    setlocale(LC_NUMERIC, "C"); /* C-locale for strtod, ... */</div><div class='add'>+    /* close the previous syslog if open as we are changing settings */</div><div class='add'>+    closelog();</div><div class='add'>+    openlog(ident, _option, _facility);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * _json_escape -function to convert string to json encoded string</div><div class='ctx'>  * @str: input string</div><div class='hunk'>@@ -559,85 +554,75 @@ gf_openlog (const char *ident, int option, int facility)</div><div class='ctx'> char *</div><div class='ctx'> _json_escape(const char *str, char *buf, size_t len)</div><div class='ctx'> {</div><div class='del'>-        static const unsigned char json_exceptions[UCHAR_MAX + 1] =</div><div class='del'>-                {</div><div class='del'>-                        [0x01] = 1, [0x02] = 1, [0x03] = 1, [0x04] = 1,</div><div class='del'>-                        [0x05] = 1, [0x06] = 1, [0x07] = 1, [0x08] = 1,</div><div class='del'>-                        [0x09] = 1, [0x0a] = 1, [0x0b] = 1, [0x0c] = 1,</div><div class='del'>-                        [0x0d] = 1, [0x0e] = 1, [0x0f] = 1, [0x10] = 1,</div><div class='del'>-                        [0x11] = 1, [0x12] = 1, [0x13] = 1, [0x14] = 1,</div><div class='del'>-                        [0x15] = 1, [0x16] = 1, [0x17] = 1, [0x18] = 1,</div><div class='del'>-                        [0x19] = 1, [0x1a] = 1, [0x1b] = 1, [0x1c] = 1,</div><div class='del'>-                        [0x1d] = 1, [0x1e] = 1, [0x1f] = 1,</div><div class='del'>-                        ['\\'] = 1, ['"'] = 1</div><div class='del'>-                };</div><div class='del'>-        static const char  json_hex_chars[16] = "0123456789abcdef";</div><div class='del'>-        unsigned char     *p = NULL;</div><div class='del'>-        size_t             pos = 0;</div><div class='del'>-</div><div class='del'>-        if (!str || !buf || len &lt;= 0) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (p = (unsigned char *)str;</div><div class='del'>-             *p &amp;&amp; (pos + 1) &lt; len;</div><div class='del'>-             p++)</div><div class='del'>-        {</div><div class='del'>-                if (json_exceptions[*p] == 0) {</div><div class='del'>-                        buf[pos++] = *p;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((pos + 2) &gt;= len) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (*p)</div><div class='del'>-                {</div><div class='del'>-                case '\b':</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = 'b';</div><div class='del'>-                        break;</div><div class='del'>-                case '\n':</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = 'n';</div><div class='del'>-                        break;</div><div class='del'>-                case '\r':</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = 'r';</div><div class='del'>-                        break;</div><div class='del'>-                case '\t':</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = 't';</div><div class='del'>-                        break;</div><div class='del'>-                case '\\':</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        break;</div><div class='del'>-                case '"':</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = '"';</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        if ((pos + 6) &gt;= len) {</div><div class='del'>-                                buf[pos] = '\0';</div><div class='del'>-                                return (char *)p;</div><div class='del'>-                        }</div><div class='del'>-                        buf[pos++] = '\\';</div><div class='del'>-                        buf[pos++] = 'u';</div><div class='del'>-                        buf[pos++] = '0';</div><div class='del'>-                        buf[pos++] = '0';</div><div class='del'>-                        buf[pos++] = json_hex_chars[(*p) &gt;&gt; 4];</div><div class='del'>-                        buf[pos++] = json_hex_chars[(*p) &amp; 0xf];</div><div class='del'>-                        break;</div><div class='add'>+    static const unsigned char json_exceptions[UCHAR_MAX + 1] = {</div><div class='add'>+        [0x01] = 1, [0x02] = 1, [0x03] = 1, [0x04] = 1, [0x05] = 1, [0x06] = 1,</div><div class='add'>+        [0x07] = 1, [0x08] = 1, [0x09] = 1, [0x0a] = 1, [0x0b] = 1, [0x0c] = 1,</div><div class='add'>+        [0x0d] = 1, [0x0e] = 1, [0x0f] = 1, [0x10] = 1, [0x11] = 1, [0x12] = 1,</div><div class='add'>+        [0x13] = 1, [0x14] = 1, [0x15] = 1, [0x16] = 1, [0x17] = 1, [0x18] = 1,</div><div class='add'>+        [0x19] = 1, [0x1a] = 1, [0x1b] = 1, [0x1c] = 1, [0x1d] = 1, [0x1e] = 1,</div><div class='add'>+        [0x1f] = 1, ['\\'] = 1, ['"'] = 1};</div><div class='add'>+    static const char json_hex_chars[16] = "0123456789abcdef";</div><div class='add'>+    unsigned char *p = NULL;</div><div class='add'>+    size_t pos = 0;</div><div class='add'>+</div><div class='add'>+    if (!str || !buf || len &lt;= 0) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (p = (unsigned char *)str; *p &amp;&amp; (pos + 1) &lt; len; p++) {</div><div class='add'>+        if (json_exceptions[*p] == 0) {</div><div class='add'>+            buf[pos++] = *p;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if ((pos + 2) &gt;= len) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        switch (*p) {</div><div class='add'>+            case '\b':</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = 'b';</div><div class='add'>+                break;</div><div class='add'>+            case '\n':</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = 'n';</div><div class='add'>+                break;</div><div class='add'>+            case '\r':</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = 'r';</div><div class='add'>+                break;</div><div class='add'>+            case '\t':</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = 't';</div><div class='add'>+                break;</div><div class='add'>+            case '\\':</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                break;</div><div class='add'>+            case '"':</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = '"';</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                if ((pos + 6) &gt;= len) {</div><div class='add'>+                    buf[pos] = '\0';</div><div class='add'>+                    return (char *)p;</div><div class='ctx'>                 }</div><div class='add'>+                buf[pos++] = '\\';</div><div class='add'>+                buf[pos++] = 'u';</div><div class='add'>+                buf[pos++] = '0';</div><div class='add'>+                buf[pos++] = '0';</div><div class='add'>+                buf[pos++] = json_hex_chars[(*p) &gt;&gt; 4];</div><div class='add'>+                buf[pos++] = json_hex_chars[(*p) &amp; 0xf];</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        buf[pos] = '\0';</div><div class='del'>-        return (char *)p;</div><div class='add'>+    buf[pos] = '\0';</div><div class='add'>+    return (char *)p;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * gf_syslog -function to submit message to syslog specific to gluster</div><div class='ctx'>  * @facility_priority: facility_priority of syslog()</div><div class='hunk'>@@ -646,158 +631,162 @@ _json_escape(const char *str, char *buf, size_t len)</div><div class='ctx'>  * @return: void</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-gf_syslog (int facility_priority, char *format, ...)</div><div class='add'>+gf_syslog(int facility_priority, char *format, ...)</div><div class='ctx'> {</div><div class='del'>-        char       *msg = NULL;</div><div class='del'>-        char        json_msg[GF_JSON_MSG_LENGTH];</div><div class='del'>-        GF_UNUSED char       *p = NULL;</div><div class='del'>-        va_list     ap;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (format);</div><div class='del'>-</div><div class='del'>-        va_start (ap, format);</div><div class='del'>-        if (vasprintf (&amp;msg, format, ap) != -1) {</div><div class='del'>-                p = _json_escape (msg, json_msg, GF_JSON_MSG_LENGTH);</div><div class='del'>-                syslog (facility_priority, "%s", msg);</div><div class='del'>-                free (msg);</div><div class='del'>-        } else</div><div class='del'>-                syslog (GF_LOG_CRITICAL, "vasprintf() failed, out of memory?");</div><div class='del'>-        va_end (ap);</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    char json_msg[GF_JSON_MSG_LENGTH];</div><div class='add'>+    GF_UNUSED char *p = NULL;</div><div class='add'>+    va_list ap;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(format);</div><div class='add'>+</div><div class='add'>+    va_start(ap, format);</div><div class='add'>+    if (vasprintf(&amp;msg, format, ap) != -1) {</div><div class='add'>+        p = _json_escape(msg, json_msg, GF_JSON_MSG_LENGTH);</div><div class='add'>+        syslog(facility_priority, "%s", msg);</div><div class='add'>+        free(msg);</div><div class='add'>+    } else</div><div class='add'>+        syslog(GF_LOG_CRITICAL, "vasprintf() failed, out of memory?");</div><div class='add'>+    va_end(ap);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_globals_init (void *data, gf_loglevel_t level)</div><div class='add'>+gf_log_globals_init(void *data, gf_loglevel_t level)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = data;</div><div class='add'>+    glusterfs_ctx_t *ctx = data;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;ctx-&gt;log.logfile_mutex, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;ctx-&gt;log.logfile_mutex, NULL);</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;log.loglevel         = level;</div><div class='del'>-        ctx-&gt;log.gf_log_syslog    = 1;</div><div class='del'>-        ctx-&gt;log.sys_log_level    = GF_LOG_CRITICAL;</div><div class='del'>-        ctx-&gt;log.logger           = gf_logger_glusterlog;</div><div class='del'>-        ctx-&gt;log.logformat        = gf_logformat_withmsgid;</div><div class='del'>-        ctx-&gt;log.lru_size         = GF_LOG_LRU_BUFSIZE_DEFAULT;</div><div class='del'>-        ctx-&gt;log.timeout          = GF_LOG_FLUSH_TIMEOUT_DEFAULT;</div><div class='del'>-        ctx-&gt;log.localtime        = GF_LOG_LOCALTIME_DEFAULT;</div><div class='add'>+    ctx-&gt;log.loglevel = level;</div><div class='add'>+    ctx-&gt;log.gf_log_syslog = 1;</div><div class='add'>+    ctx-&gt;log.sys_log_level = GF_LOG_CRITICAL;</div><div class='add'>+    ctx-&gt;log.logger = gf_logger_glusterlog;</div><div class='add'>+    ctx-&gt;log.logformat = gf_logformat_withmsgid;</div><div class='add'>+    ctx-&gt;log.lru_size = GF_LOG_LRU_BUFSIZE_DEFAULT;</div><div class='add'>+    ctx-&gt;log.timeout = GF_LOG_FLUSH_TIMEOUT_DEFAULT;</div><div class='add'>+    ctx-&gt;log.localtime = GF_LOG_LOCALTIME_DEFAULT;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;ctx-&gt;log.log_buf_lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;ctx-&gt;log.log_buf_lock, NULL);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;log.lru_queue);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;log.lru_queue);</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-        /* For the 'syslog' output. one can grep 'GlusterFS' in syslog</div><div class='del'>-           for serious logs */</div><div class='del'>-        openlog ("GlusterFS", LOG_PID, LOG_DAEMON);</div><div class='add'>+    /* For the 'syslog' output. one can grep 'GlusterFS' in syslog</div><div class='add'>+       for serious logs */</div><div class='add'>+    openlog("GlusterFS", LOG_PID, LOG_DAEMON);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_log_init (void *data, const char *file, const char *ident)</div><div class='add'>+gf_log_init(void *data, const char *file, const char *ident)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-        int              fd = -1;</div><div class='del'>-        struct stat      buf;</div><div class='del'>-</div><div class='del'>-        ctx = data;</div><div class='del'>-</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                fprintf (stderr, "ERROR: ctx is NULL\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        if (ident) {</div><div class='del'>-                GF_FREE (ctx-&gt;log.ident);</div><div class='del'>-                ctx-&gt;log.ident = gf_strdup (ident);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* we keep the files and the syslog open, so that on logger change, we</div><div class='del'>-         * are ready to log anywhere, that the new value specifies */</div><div class='del'>-        if (ctx-&gt;log.ident) {</div><div class='del'>-                gf_openlog (ctx-&gt;log.ident, -1, LOG_DAEMON);</div><div class='del'>-        } else {</div><div class='del'>-                gf_openlog (NULL, -1, LOG_DAEMON);</div><div class='del'>-        }</div><div class='del'>-        /* TODO: make FACILITY configurable than LOG_DAEMON */</div><div class='del'>-        if (sys_stat (GF_LOG_CONTROL_FILE, &amp;buf) == 0) {</div><div class='del'>-                /* use syslog logging */</div><div class='del'>-                ctx-&gt;log.log_control_file_found = 1;</div><div class='del'>-        } else {</div><div class='del'>-                /* use old style logging */</div><div class='del'>-                ctx-&gt;log.log_control_file_found = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    struct stat buf;</div><div class='add'>+</div><div class='add'>+    ctx = data;</div><div class='add'>+</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        fprintf(stderr, "ERROR: ctx is NULL\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (ident) {</div><div class='add'>+        GF_FREE(ctx-&gt;log.ident);</div><div class='add'>+        ctx-&gt;log.ident = gf_strdup(ident);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* we keep the files and the syslog open, so that on logger change, we</div><div class='add'>+     * are ready to log anywhere, that the new value specifies */</div><div class='add'>+    if (ctx-&gt;log.ident) {</div><div class='add'>+        gf_openlog(ctx-&gt;log.ident, -1, LOG_DAEMON);</div><div class='add'>+    } else {</div><div class='add'>+        gf_openlog(NULL, -1, LOG_DAEMON);</div><div class='add'>+    }</div><div class='add'>+    /* TODO: make FACILITY configurable than LOG_DAEMON */</div><div class='add'>+    if (sys_stat(GF_LOG_CONTROL_FILE, &amp;buf) == 0) {</div><div class='add'>+        /* use syslog logging */</div><div class='add'>+        ctx-&gt;log.log_control_file_found = 1;</div><div class='add'>+    } else {</div><div class='add'>+        /* use old style logging */</div><div class='add'>+        ctx-&gt;log.log_control_file_found = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!file) {</div><div class='add'>+        fprintf(stderr, "ERROR: no filename specified\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* free the (possible) previous filename */</div><div class='add'>+    GF_FREE(ctx-&gt;log.filename);</div><div class='add'>+    ctx-&gt;log.filename = NULL;</div><div class='add'>+</div><div class='add'>+    if (strcmp(file, "-") == 0) {</div><div class='add'>+        int dupfd = -1;</div><div class='add'>+</div><div class='add'>+        ctx-&gt;log.filename = gf_strdup("/dev/stderr");</div><div class='add'>+        if (!ctx-&gt;log.filename) {</div><div class='add'>+            fprintf(stderr, "ERROR: strdup failed\n");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        dupfd = dup(fileno(stderr));</div><div class='add'>+        if (dupfd == -1) {</div><div class='add'>+            fprintf(stderr, "ERROR: could not dup %d (%s)\n", fileno(stderr),</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ctx-&gt;log.logfile = fdopen(dupfd, "a");</div><div class='add'>+        if (!ctx-&gt;log.logfile) {</div><div class='add'>+            fprintf(stderr, "ERROR: could not fdopen on %d (%s)\n", dupfd,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            sys_close(dupfd);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ctx-&gt;log.filename = gf_strdup(file);</div><div class='add'>+        if (!ctx-&gt;log.filename) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: updating log-filename failed: "</div><div class='add'>+                    "%s\n",</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        fd = sys_open(file, O_CREAT | O_WRONLY | O_APPEND, S_IRUSR | S_IWUSR);</div><div class='add'>+        if (fd &lt; 0) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: failed to create logfile"</div><div class='add'>+                    " \"%s\" (%s)\n",</div><div class='add'>+                    file, strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!file) {</div><div class='del'>-                fprintf (stderr, "ERROR: no filename specified\n");</div><div class='del'>-                return -1;</div><div class='add'>+        ctx-&gt;log.logfile = fdopen(fd, "a");</div><div class='add'>+        if (!ctx-&gt;log.logfile) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "ERROR: failed to open logfile \"%s\" "</div><div class='add'>+                    "(%s)\n",</div><div class='add'>+                    file, strerror(errno));</div><div class='add'>+            sys_close(fd);</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* free the (possible) previous filename */</div><div class='del'>-        GF_FREE (ctx-&gt;log.filename);</div><div class='del'>-        ctx-&gt;log.filename = NULL;</div><div class='del'>-</div><div class='del'>-        if (strcmp (file, "-") == 0) {</div><div class='del'>-		int dupfd = -1;</div><div class='del'>-</div><div class='del'>-		ctx-&gt;log.filename = gf_strdup ("/dev/stderr");</div><div class='del'>-		if (!ctx-&gt;log.filename) {</div><div class='del'>-			fprintf (stderr, "ERROR: strdup failed\n");</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		dupfd = dup (fileno (stderr));</div><div class='del'>-		if (dupfd == -1) {</div><div class='del'>-			fprintf (stderr, "ERROR: could not dup %d (%s)\n",</div><div class='del'>-				 fileno (stderr), strerror (errno));</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ctx-&gt;log.logfile = fdopen (dupfd, "a");</div><div class='del'>-		if (!ctx-&gt;log.logfile) {</div><div class='del'>-			fprintf (stderr, "ERROR: could not fdopen on %d (%s)\n",</div><div class='del'>-				 dupfd, strerror (errno));</div><div class='del'>-                        sys_close (dupfd);</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-        } else {</div><div class='del'>-                ctx-&gt;log.filename = gf_strdup (file);</div><div class='del'>-                if (!ctx-&gt;log.filename) {</div><div class='del'>-                        fprintf (stderr, "ERROR: updating log-filename failed: "</div><div class='del'>-                                 "%s\n", strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd = sys_open (file, O_CREAT | O_WRONLY | O_APPEND,</div><div class='del'>-                               S_IRUSR | S_IWUSR);</div><div class='del'>-                if (fd &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "ERROR: failed to create logfile"</div><div class='del'>-                                 " \"%s\" (%s)\n", file, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+    ctx-&gt;log.gf_log_logfile = ctx-&gt;log.logfile;</div><div class='ctx'> </div><div class='del'>-                ctx-&gt;log.logfile = fdopen (fd, "a");</div><div class='del'>-                if (!ctx-&gt;log.logfile) {</div><div class='del'>-                        fprintf (stderr, "ERROR: failed to open logfile \"%s\" "</div><div class='del'>-                                 "(%s)\n", file, strerror (errno));</div><div class='del'>-                        sys_close (fd);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;log.gf_log_logfile = ctx-&gt;log.logfile;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_sys_log_level (gf_loglevel_t level)</div><div class='add'>+set_sys_log_level(gf_loglevel_t level)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                ctx-&gt;log.sys_log_level = level;</div><div class='add'>+    if (ctx)</div><div class='add'>+        ctx-&gt;log.sys_log_level = level;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Check if we should be logging</div><div class='hunk'>@@ -805,1844 +794,1857 @@ set_sys_log_level (gf_loglevel_t level)</div><div class='ctx'>  *               _gf_true : Do not Print the log</div><div class='ctx'>  */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-skip_logging (xlator_t *this, gf_loglevel_t level)</div><div class='add'>+skip_logging(xlator_t *this, gf_loglevel_t level)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t ret = _gf_false;</div><div class='del'>-        gf_loglevel_t existing_level = GF_LOG_NONE;</div><div class='del'>-</div><div class='del'>-        if (level == GF_LOG_NONE) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        existing_level = this-&gt;loglevel ? this-&gt;loglevel : this-&gt;ctx-&gt;log.loglevel;</div><div class='del'>-        if (level &gt; existing_level) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    gf_loglevel_t existing_level = GF_LOG_NONE;</div><div class='add'>+</div><div class='add'>+    if (level == GF_LOG_NONE) {</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    existing_level = this-&gt;loglevel ? this-&gt;loglevel : this-&gt;ctx-&gt;log.loglevel;</div><div class='add'>+    if (level &gt; existing_level) {</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_log_callingfn (const char *domain, const char *file, const char *function,</div><div class='del'>-                   int line, gf_loglevel_t level, const char *fmt, ...)</div><div class='add'>+_gf_log_callingfn(const char *domain, const char *file, const char *function,</div><div class='add'>+                  int line, gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        const char     *basename        = NULL;</div><div class='del'>-        xlator_t       *this            = NULL;</div><div class='del'>-        char           *str1            = NULL;</div><div class='del'>-        char           *str2            = NULL;</div><div class='del'>-        char           *msg             = NULL;</div><div class='del'>-        char            timestr[256]    = {0,};</div><div class='del'>-        char           *callstr         = NULL;</div><div class='del'>-        struct timeval  tv              = {0,};</div><div class='del'>-        size_t          len             = 0;</div><div class='del'>-        int             ret             = 0;</div><div class='del'>-        va_list         ap;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        static char *level_strings[] = {"",  /* NONE */</div><div class='del'>-                                        "M", /* EMERGENCY */</div><div class='del'>-                                        "A", /* ALERT */</div><div class='del'>-                                        "C", /* CRITICAL */</div><div class='del'>-                                        "E", /* ERROR */</div><div class='del'>-                                        "W", /* WARNING */</div><div class='del'>-                                        "N", /* NOTICE */</div><div class='del'>-                                        "I", /* INFO */</div><div class='del'>-                                        "D", /* DEBUG */</div><div class='del'>-                                        "T", /* TRACE */</div><div class='del'>-                                        ""};</div><div class='del'>-</div><div class='del'>-        if (!domain || !file || !function || !fmt) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "logging: %s:%s():%d: invalid argument\n",</div><div class='del'>-                         __FILE__, __PRETTY_FUNCTION__, __LINE__);</div><div class='del'>-                return -1;</div><div class='add'>+    const char *basename = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char *str1 = NULL;</div><div class='add'>+    char *str2 = NULL;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *callstr = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    va_list ap;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    static char *level_strings[] = {"",  /* NONE */</div><div class='add'>+                                    "M", /* EMERGENCY */</div><div class='add'>+                                    "A", /* ALERT */</div><div class='add'>+                                    "C", /* CRITICAL */</div><div class='add'>+                                    "E", /* ERROR */</div><div class='add'>+                                    "W", /* WARNING */</div><div class='add'>+                                    "N", /* NOTICE */</div><div class='add'>+                                    "I", /* INFO */</div><div class='add'>+                                    "D", /* DEBUG */</div><div class='add'>+                                    "T", /* TRACE */</div><div class='add'>+                                    ""};</div><div class='add'>+</div><div class='add'>+    if (!domain || !file || !function || !fmt) {</div><div class='add'>+        fprintf(stderr, "logging: %s:%s():%d: invalid argument\n", __FILE__,</div><div class='add'>+                __PRETTY_FUNCTION__, __LINE__);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    basename = strrchr(file, '/');</div><div class='add'>+    if (basename)</div><div class='add'>+        basename++;</div><div class='add'>+    else</div><div class='add'>+        basename = file;</div><div class='add'>+</div><div class='add'>+    /*Saving the backtrace to pre-allocated ctx-&gt;btbuf</div><div class='add'>+     * to avoid allocating memory from the heap*/</div><div class='add'>+    callstr = gf_backtrace_save(NULL);</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;log.log_control_file_found) {</div><div class='add'>+        int priority;</div><div class='add'>+        /* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and</div><div class='add'>+           other level as is */</div><div class='add'>+        if (GF_LOG_TRACE == level || GF_LOG_NONE == level) {</div><div class='add'>+            priority = LOG_DEBUG;</div><div class='add'>+        } else {</div><div class='add'>+            priority = level - 1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        basename = strrchr (file, '/');</div><div class='del'>-        if (basename)</div><div class='del'>-                basename++;</div><div class='del'>-        else</div><div class='del'>-                basename = file;</div><div class='add'>+        va_start(ap, fmt);</div><div class='add'>+        vasprintf(&amp;str2, fmt, ap);</div><div class='add'>+        va_end(ap);</div><div class='ctx'> </div><div class='del'>-        /*Saving the backtrace to pre-allocated ctx-&gt;btbuf</div><div class='del'>-         * to avoid allocating memory from the heap*/</div><div class='del'>-        callstr = gf_backtrace_save (NULL);</div><div class='add'>+        gf_syslog(priority, "[%s:%d:%s] %s %d-%s: %s", basename, line, function,</div><div class='add'>+                  callstr, ((this-&gt;graph) ? this-&gt;graph-&gt;id : 0), domain, str2);</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;log.log_control_file_found)</div><div class='del'>-        {</div><div class='del'>-                int priority;</div><div class='del'>-                /* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and</div><div class='del'>-                   other level as is */</div><div class='del'>-                if (GF_LOG_TRACE == level || GF_LOG_NONE == level) {</div><div class='del'>-                        priority = LOG_DEBUG;</div><div class='del'>-                } else {</div><div class='del'>-                        priority = level - 1;</div><div class='del'>-                }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                va_start (ap, fmt);</div><div class='del'>-                vasprintf (&amp;str2, fmt, ap);</div><div class='del'>-                va_end (ap);</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto out;</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr + strlen(timestr), sizeof timestr - strlen(timestr),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='ctx'> </div><div class='del'>-                gf_syslog (priority, "[%s:%d:%s] %s %d-%s: %s",</div><div class='del'>-                           basename, line, function,</div><div class='del'>-                           callstr,</div><div class='del'>-                           ((this-&gt;graph) ? this-&gt;graph-&gt;id:0), domain,</div><div class='del'>-                           str2);</div><div class='add'>+    ret = gf_asprintf(&amp;str1, "[%s] %s [%s:%d:%s] %s %d-%s: ", timestr,</div><div class='add'>+                      level_strings[level], basename, line, function, callstr,</div><div class='add'>+                      ((this-&gt;graph) ? this-&gt;graph-&gt;id : 0), domain);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = vasprintf(&amp;str2, fmt, ap);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto out;</div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;str1, "[%s] %s [%s:%d:%s] %s %d-%s: ",</div><div class='del'>-                           timestr, level_strings[level],</div><div class='del'>-                           basename, line, function, callstr,</div><div class='del'>-                           ((this-&gt;graph) ? this-&gt;graph-&gt;id:0), domain);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        ret = vasprintf (&amp;str2, fmt, ap);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    len = strlen(str1);</div><div class='add'>+    msg = GF_MALLOC(len + strlen(str2) + 1, gf_common_mt_char);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        va_end (ap);</div><div class='add'>+    strcpy(msg, str1);</div><div class='add'>+    strcpy(msg + len, str2);</div><div class='ctx'> </div><div class='del'>-        len = strlen (str1);</div><div class='del'>-        msg = GF_MALLOC (len + strlen (str2) + 1, gf_common_mt_char);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.logfile) {</div><div class='add'>+            fprintf(ctx-&gt;log.logfile, "%s\n", msg);</div><div class='add'>+            fflush(ctx-&gt;log.logfile);</div><div class='add'>+        } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='add'>+            fprintf(stderr, "%s\n", msg);</div><div class='add'>+            fflush(stderr);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        strcpy (msg, str1);</div><div class='del'>-        strcpy (msg + len, str2);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;log.logfile) {</div><div class='del'>-                        fprintf (ctx-&gt;log.logfile, "%s\n", msg);</div><div class='del'>-                        fflush (ctx-&gt;log.logfile);</div><div class='del'>-                } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='del'>-                        fprintf (stderr, "%s\n", msg);</div><div class='del'>-                        fflush (stderr);</div><div class='del'>-                }</div><div class='del'>-</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                /* We want only serious log in 'syslog', not our debug</div><div class='del'>-                   and trace logs */</div><div class='del'>-                if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='del'>-                    (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='del'>-                        syslog ((level-1), "%s\n", msg);</div><div class='add'>+        /* We want only serious log in 'syslog', not our debug</div><div class='add'>+           and trace logs */</div><div class='add'>+        if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='add'>+            (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='add'>+            syslog((level - 1), "%s\n", msg);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (msg);</div><div class='add'>+    GF_FREE(msg);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (str1);</div><div class='add'>+    GF_FREE(str1);</div><div class='ctx'> </div><div class='del'>-        FREE (str2);</div><div class='add'>+    FREE(str2);</div><div class='ctx'> </div><div class='del'>-        va_end (ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg_plain_internal (gf_loglevel_t level, const char *msg)</div><div class='add'>+_gf_msg_plain_internal(gf_loglevel_t level, const char *msg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx            = NULL;</div><div class='del'>-        int              priority;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int priority;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        /* log to the configured logging service */</div><div class='del'>-        switch (ctx-&gt;log.logger) {</div><div class='add'>+    /* log to the configured logging service */</div><div class='add'>+    switch (ctx-&gt;log.logger) {</div><div class='ctx'>         case gf_logger_syslog:</div><div class='del'>-                if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='del'>-                        SET_LOG_PRIO (level, priority);</div><div class='add'>+            if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='add'>+                SET_LOG_PRIO(level, priority);</div><div class='ctx'> </div><div class='del'>-                        syslog (priority, "%s", msg);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                /* NOTE: If syslog control file is absent, which is another</div><div class='del'>-                 * way to control logging to syslog, then we will fall through</div><div class='del'>-                 * to the gluster log. The ideal way to do things would be to</div><div class='del'>-                 * not have the extra control file check */</div><div class='add'>+                syslog(priority, "%s", msg);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            /* NOTE: If syslog control file is absent, which is another</div><div class='add'>+             * way to control logging to syslog, then we will fall through</div><div class='add'>+             * to the gluster log. The ideal way to do things would be to</div><div class='add'>+             * not have the extra control file check */</div><div class='ctx'>         case gf_logger_glusterlog:</div><div class='del'>-                pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (ctx-&gt;log.logfile) {</div><div class='del'>-                                fprintf (ctx-&gt;log.logfile, "%s\n", msg);</div><div class='del'>-                                fflush (ctx-&gt;log.logfile);</div><div class='del'>-                        } else {</div><div class='del'>-                                fprintf (stderr, "%s\n", msg);</div><div class='del'>-                                fflush (stderr);</div><div class='del'>-                        }</div><div class='add'>+            pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+            {</div><div class='add'>+                if (ctx-&gt;log.logfile) {</div><div class='add'>+                    fprintf(ctx-&gt;log.logfile, "%s\n", msg);</div><div class='add'>+                    fflush(ctx-&gt;log.logfile);</div><div class='add'>+                } else {</div><div class='add'>+                    fprintf(stderr, "%s\n", msg);</div><div class='add'>+                    fflush(stderr);</div><div class='add'>+                }</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                        /* We want only serious logs in 'syslog', not our debug</div><div class='del'>-                                * and trace logs */</div><div class='del'>-                        if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='del'>-                                (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='del'>-                                syslog ((level-1), "%s\n", msg);</div><div class='add'>+                /* We want only serious logs in 'syslog', not our debug</div><div class='add'>+                 * and trace logs */</div><div class='add'>+                if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='add'>+                    (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='add'>+                    syslog((level - 1), "%s\n", msg);</div><div class='ctx'> #endif</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg_plain (gf_loglevel_t level, const char *fmt, ...)</div><div class='add'>+_gf_msg_plain(gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this            = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='del'>-        va_list          ap;</div><div class='del'>-        char            *msg             = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    va_list ap;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        ret = vasprintf (&amp;msg, fmt, ap);</div><div class='del'>-        va_end (ap);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    ret = vasprintf(&amp;msg, fmt, ap);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _gf_msg_plain_internal (level, msg);</div><div class='add'>+    ret = _gf_msg_plain_internal(level, msg);</div><div class='ctx'> </div><div class='del'>-        FREE (msg);</div><div class='add'>+    FREE(msg);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg_vplain (gf_loglevel_t level, const char *fmt, va_list ap)</div><div class='add'>+_gf_msg_vplain(gf_loglevel_t level, const char *fmt, va_list ap)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this            = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='del'>-        char            *msg             = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx             = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = vasprintf (&amp;msg, fmt, ap);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = vasprintf(&amp;msg, fmt, ap);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _gf_msg_plain_internal (level, msg);</div><div class='add'>+    ret = _gf_msg_plain_internal(level, msg);</div><div class='ctx'> </div><div class='del'>-        FREE (msg);</div><div class='add'>+    FREE(msg);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg_plain_nomem (gf_loglevel_t level, const char *msg)</div><div class='add'>+_gf_msg_plain_nomem(gf_loglevel_t level, const char *msg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        int              ret            = 0;</div><div class='del'>-        glusterfs_ctx_t *ctx            = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = _gf_msg_plain_internal (level, msg);</div><div class='add'>+    ret = _gf_msg_plain_internal(level, msg);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_gf_msg_backtrace_nomem (gf_loglevel_t level, int stacksize)</div><div class='add'>+_gf_msg_backtrace_nomem(gf_loglevel_t level, int stacksize)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this            = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-        void            *array[200];</div><div class='del'>-        size_t           bt_size = 0;</div><div class='del'>-        int              fd = -1;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* syslog does not have fd support, hence no no-mem variant */</div><div class='del'>-        if (ctx-&gt;log.logger != gf_logger_glusterlog)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        bt_size = backtrace (array, ((stacksize &lt;= 200)? stacksize : 200));</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-                fd = ctx-&gt;log.logfile?</div><div class='del'>-                        fileno (ctx-&gt;log.logfile) :</div><div class='del'>-                        fileno (stderr);</div><div class='del'>-                if (bt_size &amp;&amp; (fd != -1)) {</div><div class='del'>-                        /* print to the file fd, to prevent any</div><div class='del'>-                           allocations from backtrace_symbols</div><div class='del'>-                         */</div><div class='del'>-                        backtrace_symbols_fd (&amp;array[0], bt_size, fd);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    void *array[200];</div><div class='add'>+    size_t bt_size = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* syslog does not have fd support, hence no no-mem variant */</div><div class='add'>+    if (ctx-&gt;log.logger != gf_logger_glusterlog)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    bt_size = backtrace(array, ((stacksize &lt;= 200) ? stacksize : 200));</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        fd = ctx-&gt;log.logfile ? fileno(ctx-&gt;log.logfile) : fileno(stderr);</div><div class='add'>+        if (bt_size &amp;&amp; (fd != -1)) {</div><div class='add'>+            /* print to the file fd, to prevent any</div><div class='add'>+               allocations from backtrace_symbols</div><div class='add'>+             */</div><div class='add'>+            backtrace_symbols_fd(&amp;array[0], bt_size, fd);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg_backtrace (int stacksize, char *callstr, size_t strsize)</div><div class='add'>+_gf_msg_backtrace(int stacksize, char *callstr, size_t strsize)</div><div class='ctx'> {</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        int       i = 0;</div><div class='del'>-        int       size = 0;</div><div class='del'>-        int       savstrsize = strsize;</div><div class='del'>-        void     *array[200];</div><div class='del'>-        char    **callingfn = NULL;</div><div class='del'>-</div><div class='del'>-        /* We chop off last 2 anyway, so if request is less than tolerance</div><div class='del'>-         * nothing to do */</div><div class='del'>-        if (stacksize &lt; 3)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        size = backtrace (array, ((stacksize &lt;= 200)? stacksize : 200));</div><div class='del'>-        if ((size - 3) &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        if (size)</div><div class='del'>-                callingfn = backtrace_symbols (&amp;array[2], size - 2);</div><div class='del'>-        if (!callingfn)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = snprintf (callstr, strsize, "(");</div><div class='del'>-        PRINT_SIZE_CHECK (ret, out, strsize);</div><div class='del'>-</div><div class='del'>-        for ((i = size - 3); i &gt;= 0; i--) {</div><div class='del'>-                ret = snprintf (callstr + savstrsize - strsize, strsize,</div><div class='del'>-                                "--&gt;%s ", callingfn[i]);</div><div class='del'>-                PRINT_SIZE_CHECK (ret, out, strsize);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = snprintf (callstr + savstrsize - strsize, strsize, ")");</div><div class='del'>-        PRINT_SIZE_CHECK (ret, out, strsize);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int size = 0;</div><div class='add'>+    int savstrsize = strsize;</div><div class='add'>+    void *array[200];</div><div class='add'>+    char **callingfn = NULL;</div><div class='add'>+</div><div class='add'>+    /* We chop off last 2 anyway, so if request is less than tolerance</div><div class='add'>+     * nothing to do */</div><div class='add'>+    if (stacksize &lt; 3)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    size = backtrace(array, ((stacksize &lt;= 200) ? stacksize : 200));</div><div class='add'>+    if ((size - 3) &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    if (size)</div><div class='add'>+        callingfn = backtrace_symbols(&amp;array[2], size - 2);</div><div class='add'>+    if (!callingfn)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = snprintf(callstr, strsize, "(");</div><div class='add'>+    PRINT_SIZE_CHECK(ret, out, strsize);</div><div class='add'>+</div><div class='add'>+    for ((i = size - 3); i &gt;= 0; i--) {</div><div class='add'>+        ret = snprintf(callstr + savstrsize - strsize, strsize, "--&gt;%s ",</div><div class='add'>+                       callingfn[i]);</div><div class='add'>+        PRINT_SIZE_CHECK(ret, out, strsize);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = snprintf(callstr + savstrsize - strsize, strsize, ")");</div><div class='add'>+    PRINT_SIZE_CHECK(ret, out, strsize);</div><div class='ctx'> out:</div><div class='del'>-        FREE (callingfn);</div><div class='del'>-        return ret;</div><div class='add'>+    FREE(callingfn);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg_nomem (const char *domain, const char *file,</div><div class='del'>-               const char *function, int line, gf_loglevel_t level,</div><div class='del'>-               size_t size)</div><div class='add'>+_gf_msg_nomem(const char *domain, const char *file, const char *function,</div><div class='add'>+              int line, gf_loglevel_t level, size_t size)</div><div class='ctx'> {</div><div class='del'>-        const char      *basename        = NULL;</div><div class='del'>-        xlator_t        *this            = NULL;</div><div class='del'>-        struct timeval   tv              = {0,};</div><div class='del'>-        int              ret             = 0;</div><div class='del'>-        int              fd              = -1;</div><div class='del'>-        char             msg[2048]       = {0,};</div><div class='del'>-        char             timestr[GF_LOG_TIMESTR_SIZE]    = {0,};</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-        int              wlen = 0;</div><div class='del'>-        int              priority;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!domain || !file || !function) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "logging: %s:%s():%d: invalid argument\n",</div><div class='del'>-                         __FILE__, __PRETTY_FUNCTION__, __LINE__);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GET_FILE_NAME_TO_LOG (file, basename);</div><div class='add'>+    const char *basename = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char msg[2048] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr[GF_LOG_TIMESTR_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int wlen = 0;</div><div class='add'>+    int priority;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!domain || !file || !function) {</div><div class='add'>+        fprintf(stderr, "logging: %s:%s():%d: invalid argument\n", __FILE__,</div><div class='add'>+                __PRETTY_FUNCTION__, __LINE__);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GET_FILE_NAME_TO_LOG(file, basename);</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto out;</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+    ret = snprintf(timestr + strlen(timestr), sizeof timestr - strlen(timestr),</div><div class='add'>+                   ".%" GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: Currently we print in the enhanced format, with a message ID</div><div class='add'>+     * of 0. Need to enhance this to support format as configured */</div><div class='add'>+    ret = snprintf(msg, sizeof msg,</div><div class='add'>+                   "[%s] %s [MSGID: %" PRIu64</div><div class='add'>+                   "]"</div><div class='add'>+                   " [%s:%d:%s] %s: no memory "</div><div class='add'>+                   "available for size (%" GF_PRI_SIZET</div><div class='add'>+                   ")"</div><div class='add'>+                   " [call stack follows]\n",</div><div class='add'>+                   timestr, gf_level_strings[level], (uint64_t)0, basename,</div><div class='add'>+                   line, function, domain, size);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* log to the configured logging service */</div><div class='add'>+    switch (ctx-&gt;log.logger) {</div><div class='add'>+        case gf_logger_syslog:</div><div class='add'>+            if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='add'>+                SET_LOG_PRIO(level, priority);</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto out;</div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-        ret = snprintf (timestr + strlen (timestr),</div><div class='del'>-                        sizeof timestr - strlen (timestr),</div><div class='del'>-                        ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+                /* if syslog allocates, then this may fail, but we</div><div class='add'>+                 * cannot do much about it at the moment */</div><div class='add'>+                /* There is no fd for syslog, hence no stack printed */</div><div class='add'>+                syslog(priority, "%s", msg);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            /* NOTE: If syslog control file is absent, which is another</div><div class='add'>+             * way to control logging to syslog, then we will fall through</div><div class='add'>+             * to the gluster log. The ideal way to do things would be to</div><div class='add'>+             * not have the extra control file check */</div><div class='add'>+        case gf_logger_glusterlog:</div><div class='add'>+            pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+            {</div><div class='add'>+                fd = ctx-&gt;log.logfile ? fileno(ctx-&gt;log.logfile)</div><div class='add'>+                                      : fileno(stderr);</div><div class='add'>+                if (fd == -1) {</div><div class='add'>+                    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-        /* TODO: Currently we print in the enhanced format, with a message ID</div><div class='del'>-         * of 0. Need to enhance this to support format as configured */</div><div class='del'>-        ret = snprintf (msg, sizeof msg, "[%s] %s [MSGID: %"PRIu64"]"</div><div class='del'>-                        " [%s:%d:%s] %s: no memory "</div><div class='del'>-                        "available for size (%"GF_PRI_SIZET")"</div><div class='del'>-                        " [call stack follows]\n",</div><div class='del'>-                        timestr, gf_level_strings[level], (uint64_t) 0,</div><div class='del'>-                        basename, line, function, domain, size);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+                wlen = strlen(msg);</div><div class='ctx'> </div><div class='del'>-        /* log to the configured logging service */</div><div class='del'>-        switch (ctx-&gt;log.logger) {</div><div class='del'>-        case gf_logger_syslog:</div><div class='del'>-                if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='del'>-                        SET_LOG_PRIO (level, priority);</div><div class='del'>-</div><div class='del'>-                        /* if syslog allocates, then this may fail, but we</div><div class='del'>-                         * cannot do much about it at the moment */</div><div class='del'>-                        /* There is no fd for syslog, hence no stack printed */</div><div class='del'>-                        syslog (priority, "%s", msg);</div><div class='del'>-                        break;</div><div class='add'>+                /* write directly to the fd to prevent out of order</div><div class='add'>+                 * message and stack */</div><div class='add'>+                ret = sys_write(fd, msg, wlen);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-                /* NOTE: If syslog control file is absent, which is another</div><div class='del'>-                 * way to control logging to syslog, then we will fall through</div><div class='del'>-                 * to the gluster log. The ideal way to do things would be to</div><div class='del'>-                 * not have the extra control file check */</div><div class='del'>-        case gf_logger_glusterlog:</div><div class='del'>-                pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                {</div><div class='del'>-                        fd = ctx-&gt;log.logfile? fileno (ctx-&gt;log.logfile) :</div><div class='del'>-                                fileno (stderr);</div><div class='del'>-                        if (fd == -1) {</div><div class='del'>-                                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        wlen = strlen (msg);</div><div class='del'>-</div><div class='del'>-                        /* write directly to the fd to prevent out of order</div><div class='del'>-                         * message and stack */</div><div class='del'>-                        ret = sys_write (fd, msg, wlen);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                        /* We want only serious log in 'syslog', not our debug</div><div class='del'>-                         * and trace logs */</div><div class='del'>-                        if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='del'>-                                (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='del'>-                                syslog ((level-1), "%s\n", msg);</div><div class='add'>+                /* We want only serious log in 'syslog', not our debug</div><div class='add'>+                 * and trace logs */</div><div class='add'>+                if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='add'>+                    (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='add'>+                    syslog((level - 1), "%s\n", msg);</div><div class='ctx'> #endif</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='del'>-                _gf_msg_backtrace_nomem (level, GF_LOG_BACKTRACE_DEPTH);</div><div class='add'>+            _gf_msg_backtrace_nomem(level, GF_LOG_BACKTRACE_DEPTH);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_log_syslog (glusterfs_ctx_t *ctx, const char *domain, const char *file,</div><div class='del'>-               const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-               int errnum, uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='del'>-               int graph_id, gf_log_format_t fmt)</div><div class='add'>+gf_log_syslog(glusterfs_ctx_t *ctx, const char *domain, const char *file,</div><div class='add'>+              const char *function, int32_t line, gf_loglevel_t level,</div><div class='add'>+              int errnum, uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='add'>+              int graph_id, gf_log_format_t fmt)</div><div class='ctx'> {</div><div class='del'>-        int              priority;</div><div class='del'>-</div><div class='del'>-        SET_LOG_PRIO (level, priority);</div><div class='del'>-</div><div class='del'>-        /* log with appropriate format */</div><div class='del'>-        switch (fmt) {</div><div class='del'>-                case gf_logformat_traditional:</div><div class='del'>-                if (!callstr) {</div><div class='del'>-                        if (errnum)</div><div class='del'>-                                syslog (priority, "[%s:%d:%s] %d-%s: %s [%s]",</div><div class='del'>-                                        file, line, function, graph_id, domain,</div><div class='del'>-                                        *appmsgstr, strerror(errnum));</div><div class='del'>-                        else</div><div class='del'>-                                syslog (priority, "[%s:%d:%s] %d-%s: %s",</div><div class='del'>-                                        file, line, function, graph_id, domain,</div><div class='del'>-                                        *appmsgstr);</div><div class='del'>-                } else {</div><div class='del'>-                        if (errnum)</div><div class='del'>-                                syslog (priority, "[%s:%d:%s] %s %d-%s:"</div><div class='del'>-                                        " %s [%s]",</div><div class='del'>-                                        file, line, function, callstr, graph_id,</div><div class='del'>-                                        domain, *appmsgstr, strerror(errnum));</div><div class='del'>-                        else</div><div class='del'>-                                syslog (priority, "[%s:%d:%s] %s %d-%s: %s",</div><div class='del'>-                                        file, line, function, callstr, graph_id,</div><div class='del'>-                                        domain, *appmsgstr);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-                case gf_logformat_withmsgid:</div><div class='del'>-                if (!callstr) {</div><div class='del'>-                        if (errnum)</div><div class='del'>-                                syslog (priority, "[MSGID: %"PRIu64"]"</div><div class='del'>-                                        " [%s:%d:%s] %d-%s: %s [%s]", msgid,</div><div class='del'>-                                        file, line, function, graph_id, domain,</div><div class='del'>-                                        *appmsgstr, strerror(errnum));</div><div class='del'>-                        else</div><div class='del'>-                                syslog (priority, "[MSGID: %"PRIu64"]"</div><div class='del'>-                                        " [%s:%d:%s] %d-%s: %s",</div><div class='del'>-                                        msgid, file, line, function, graph_id,</div><div class='del'>-                                        domain, *appmsgstr);</div><div class='del'>-                } else {</div><div class='del'>-                        if (errnum)</div><div class='del'>-                                syslog (priority, "[MSGID: %"PRIu64"]"</div><div class='del'>-                                        " [%s:%d:%s] %s %d-%s: %s [%s]",</div><div class='del'>-                                        msgid, file, line, function, callstr,</div><div class='del'>-                                        graph_id, domain, *appmsgstr,</div><div class='del'>-                                        strerror(errnum));</div><div class='del'>-                        else</div><div class='del'>-                                syslog (priority, "[MSGID: %"PRIu64"]"</div><div class='del'>-                                        " [%s:%d:%s] %s %d-%s: %s",</div><div class='del'>-                                        msgid, file, line, function, callstr,</div><div class='del'>-                                        graph_id, domain, *appmsgstr);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-                case gf_logformat_cee:</div><div class='del'>-                /* TODO: Enhance CEE with additional parameters */</div><div class='del'>-                gf_syslog (priority, "[%s:%d:%s] %d-%s: %s",</div><div class='del'>-                           file, line, function, graph_id, domain, *appmsgstr);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                /* NOTE: should not get here without logging */</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: There can be no errors from gf_syslog? */</div><div class='del'>-        return 0;</div><div class='add'>+    int priority;</div><div class='add'>+</div><div class='add'>+    SET_LOG_PRIO(level, priority);</div><div class='add'>+</div><div class='add'>+    /* log with appropriate format */</div><div class='add'>+    switch (fmt) {</div><div class='add'>+        case gf_logformat_traditional:</div><div class='add'>+            if (!callstr) {</div><div class='add'>+                if (errnum)</div><div class='add'>+                    syslog(priority, "[%s:%d:%s] %d-%s: %s [%s]", file, line,</div><div class='add'>+                           function, graph_id, domain, *appmsgstr,</div><div class='add'>+                           strerror(errnum));</div><div class='add'>+                else</div><div class='add'>+                    syslog(priority, "[%s:%d:%s] %d-%s: %s", file, line,</div><div class='add'>+                           function, graph_id, domain, *appmsgstr);</div><div class='add'>+            } else {</div><div class='add'>+                if (errnum)</div><div class='add'>+                    syslog(priority,</div><div class='add'>+                           "[%s:%d:%s] %s %d-%s:"</div><div class='add'>+                           " %s [%s]",</div><div class='add'>+                           file, line, function, callstr, graph_id, domain,</div><div class='add'>+                           *appmsgstr, strerror(errnum));</div><div class='add'>+                else</div><div class='add'>+                    syslog(priority, "[%s:%d:%s] %s %d-%s: %s", file, line,</div><div class='add'>+                           function, callstr, graph_id, domain, *appmsgstr);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case gf_logformat_withmsgid:</div><div class='add'>+            if (!callstr) {</div><div class='add'>+                if (errnum)</div><div class='add'>+                    syslog(priority,</div><div class='add'>+                           "[MSGID: %" PRIu64</div><div class='add'>+                           "]"</div><div class='add'>+                           " [%s:%d:%s] %d-%s: %s [%s]",</div><div class='add'>+                           msgid, file, line, function, graph_id, domain,</div><div class='add'>+                           *appmsgstr, strerror(errnum));</div><div class='add'>+                else</div><div class='add'>+                    syslog(priority,</div><div class='add'>+                           "[MSGID: %" PRIu64</div><div class='add'>+                           "]"</div><div class='add'>+                           " [%s:%d:%s] %d-%s: %s",</div><div class='add'>+                           msgid, file, line, function, graph_id, domain,</div><div class='add'>+                           *appmsgstr);</div><div class='add'>+            } else {</div><div class='add'>+                if (errnum)</div><div class='add'>+                    syslog(priority,</div><div class='add'>+                           "[MSGID: %" PRIu64</div><div class='add'>+                           "]"</div><div class='add'>+                           " [%s:%d:%s] %s %d-%s: %s [%s]",</div><div class='add'>+                           msgid, file, line, function, callstr, graph_id,</div><div class='add'>+                           domain, *appmsgstr, strerror(errnum));</div><div class='add'>+                else</div><div class='add'>+                    syslog(priority,</div><div class='add'>+                           "[MSGID: %" PRIu64</div><div class='add'>+                           "]"</div><div class='add'>+                           " [%s:%d:%s] %s %d-%s: %s",</div><div class='add'>+                           msgid, file, line, function, callstr, graph_id,</div><div class='add'>+                           domain, *appmsgstr);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        case gf_logformat_cee:</div><div class='add'>+            /* TODO: Enhance CEE with additional parameters */</div><div class='add'>+            gf_syslog(priority, "[%s:%d:%s] %d-%s: %s", file, line, function,</div><div class='add'>+                      graph_id, domain, *appmsgstr);</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        default:</div><div class='add'>+            /* NOTE: should not get here without logging */</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: There can be no errors from gf_syslog? */</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_log_glusterlog (glusterfs_ctx_t *ctx, const char *domain, const char *file,</div><div class='del'>-                   const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-                   int errnum, uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='del'>-                   struct timeval tv, int graph_id, gf_log_format_t fmt)</div><div class='add'>+gf_log_glusterlog(glusterfs_ctx_t *ctx, const char *domain, const char *file,</div><div class='add'>+                  const char *function, int32_t line, gf_loglevel_t level,</div><div class='add'>+                  int errnum, uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='add'>+                  struct timeval tv, int graph_id, gf_log_format_t fmt)</div><div class='ctx'> {</div><div class='del'>-        char             timestr[GF_LOG_TIMESTR_SIZE] = {0,};</div><div class='del'>-        char            *header = NULL;</div><div class='del'>-        char            *footer = NULL;</div><div class='del'>-        char            *msg  = NULL;</div><div class='del'>-        size_t           hlen  = 0, flen = 0, mlen = 0;</div><div class='del'>-        int              ret  = 0;</div><div class='del'>-</div><div class='del'>-        /* rotate if required */</div><div class='del'>-        gf_log_rotate(ctx);</div><div class='del'>-</div><div class='del'>-        /* format the time stamp */</div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-</div><div class='del'>-        /* generate header and footer */</div><div class='del'>-        if (fmt == gf_logformat_traditional) {</div><div class='del'>-                if (!callstr) {</div><div class='del'>-                        ret = gf_asprintf (&amp;header, "[%s] %s [%s:%d:%s]"</div><div class='del'>-                                                    " %d-%s: ",</div><div class='del'>-                                           timestr, gf_level_strings[level],</div><div class='del'>-                                           file, line, function, graph_id,</div><div class='del'>-                                           domain);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_asprintf (&amp;header, "[%s] %s [%s:%d:%s] %s"</div><div class='del'>-                                                    " %d-%s: ",</div><div class='del'>-                                           timestr, gf_level_strings[level],</div><div class='del'>-                                           file, line, function, callstr,</div><div class='del'>-                                           graph_id, domain);</div><div class='del'>-                }</div><div class='del'>-                if (-1 == ret) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        } else { /* gf_logformat_withmsgid */</div><div class='del'>-                /* CEE log format unsupported in logger_glusterlog, so just</div><div class='del'>-                 * print enhanced log format */</div><div class='del'>-                if (!callstr) {</div><div class='del'>-                        ret = gf_asprintf (&amp;header, "[%s] %s [MSGID: %"PRIu64"]"</div><div class='del'>-                                                    " [%s:%d:%s] %d-%s: ",</div><div class='del'>-                                           timestr, gf_level_strings[level],</div><div class='del'>-                                           msgid, file, line, function,</div><div class='del'>-                                           graph_id, domain);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_asprintf (&amp;header, "[%s] %s [MSGID: %"PRIu64"]"</div><div class='del'>-                                                    " [%s:%d:%s] %s %d-%s: ",</div><div class='del'>-                                           timestr, gf_level_strings[level],</div><div class='del'>-                                           msgid, file, line, function, callstr,</div><div class='del'>-                                           graph_id, domain);</div><div class='del'>-                }</div><div class='del'>-                if (-1 == ret) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    char timestr[GF_LOG_TIMESTR_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *header = NULL;</div><div class='add'>+    char *footer = NULL;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    size_t hlen = 0, flen = 0, mlen = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* rotate if required */</div><div class='add'>+    gf_log_rotate(ctx);</div><div class='add'>+</div><div class='add'>+    /* format the time stamp */</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr + strlen(timestr), sizeof timestr - strlen(timestr),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='add'>+</div><div class='add'>+    /* generate header and footer */</div><div class='add'>+    if (fmt == gf_logformat_traditional) {</div><div class='add'>+        if (!callstr) {</div><div class='add'>+            ret = gf_asprintf(&amp;header,</div><div class='add'>+                              "[%s] %s [%s:%d:%s]"</div><div class='add'>+                              " %d-%s: ",</div><div class='add'>+                              timestr, gf_level_strings[level], file, line,</div><div class='add'>+                              function, graph_id, domain);</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_asprintf(&amp;header,</div><div class='add'>+                              "[%s] %s [%s:%d:%s] %s"</div><div class='add'>+                              " %d-%s: ",</div><div class='add'>+                              timestr, gf_level_strings[level], file, line,</div><div class='add'>+                              function, callstr, graph_id, domain);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (errnum) {</div><div class='del'>-                ret = gf_asprintf (&amp;footer, " [%s]",strerror(errnum));</div><div class='del'>-                if (-1 == ret) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        if (-1 == ret) {</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    } else { /* gf_logformat_withmsgid */</div><div class='add'>+        /* CEE log format unsupported in logger_glusterlog, so just</div><div class='add'>+         * print enhanced log format */</div><div class='add'>+        if (!callstr) {</div><div class='add'>+            ret = gf_asprintf(&amp;header,</div><div class='add'>+                              "[%s] %s [MSGID: %" PRIu64</div><div class='add'>+                              "]"</div><div class='add'>+                              " [%s:%d:%s] %d-%s: ",</div><div class='add'>+                              timestr, gf_level_strings[level], msgid, file,</div><div class='add'>+                              line, function, graph_id, domain);</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_asprintf(&amp;header,</div><div class='add'>+                              "[%s] %s [MSGID: %" PRIu64</div><div class='add'>+                              "]"</div><div class='add'>+                              " [%s:%d:%s] %s %d-%s: ",</div><div class='add'>+                              timestr, gf_level_strings[level], msgid, file,</div><div class='add'>+                              line, function, callstr, graph_id, domain);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* generate the full message to log */</div><div class='del'>-        hlen = strlen (header);</div><div class='del'>-        flen = footer? strlen (footer) : 0;</div><div class='del'>-        mlen = strlen (*appmsgstr);</div><div class='del'>-        msg = GF_MALLOC (hlen + flen + mlen + 1, gf_common_mt_char);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='add'>+        if (-1 == ret) {</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        strcpy (msg, header);</div><div class='del'>-        strcpy (msg + hlen, *appmsgstr);</div><div class='del'>-        if (footer)</div><div class='del'>-                strcpy (msg + hlen + mlen, footer);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;log.logfile) {</div><div class='del'>-                        fprintf (ctx-&gt;log.logfile, "%s\n", msg);</div><div class='del'>-                        fflush (ctx-&gt;log.logfile);</div><div class='del'>-                } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='del'>-                        fprintf (stderr, "%s\n", msg);</div><div class='del'>-                        fflush (stderr);</div><div class='del'>-                }</div><div class='add'>+    if (errnum) {</div><div class='add'>+        ret = gf_asprintf(&amp;footer, " [%s]", strerror(errnum));</div><div class='add'>+        if (-1 == ret) {</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* generate the full message to log */</div><div class='add'>+    hlen = strlen(header);</div><div class='add'>+    flen = footer ? strlen(footer) : 0;</div><div class='add'>+    mlen = strlen(*appmsgstr);</div><div class='add'>+    msg = GF_MALLOC(hlen + flen + mlen + 1, gf_common_mt_char);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(msg, header);</div><div class='add'>+    strcpy(msg + hlen, *appmsgstr);</div><div class='add'>+    if (footer)</div><div class='add'>+        strcpy(msg + hlen + mlen, footer);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.logfile) {</div><div class='add'>+            fprintf(ctx-&gt;log.logfile, "%s\n", msg);</div><div class='add'>+            fflush(ctx-&gt;log.logfile);</div><div class='add'>+        } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='add'>+            fprintf(stderr, "%s\n", msg);</div><div class='add'>+            fflush(stderr);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                /* We want only serious logs in 'syslog', not our debug</div><div class='del'>-                 * and trace logs */</div><div class='del'>-                if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='del'>-                        (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='del'>-                        syslog ((level-1), "%s\n", msg);</div><div class='add'>+        /* We want only serious logs in 'syslog', not our debug</div><div class='add'>+         * and trace logs */</div><div class='add'>+        if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='add'>+            (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='add'>+            syslog((level - 1), "%s\n", msg);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: Plugin in memory log buffer retention here. For logs not</div><div class='del'>-         * flushed during cores, it would be useful to retain some of the last</div><div class='del'>-         * few messages in memory */</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        ret = 0;</div><div class='add'>+    /* TODO: Plugin in memory log buffer retention here. For logs not</div><div class='add'>+     * flushed during cores, it would be useful to retain some of the last</div><div class='add'>+     * few messages in memory */</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (msg);</div><div class='del'>-        GF_FREE (header);</div><div class='del'>-        GF_FREE (footer);</div><div class='add'>+    GF_FREE(msg);</div><div class='add'>+    GF_FREE(header);</div><div class='add'>+    GF_FREE(footer);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_syslog_log_repetitions (const char *domain, const char *file,</div><div class='del'>-                           const char *function, int32_t line,</div><div class='del'>-                           gf_loglevel_t level, int errnum, uint64_t msgid,</div><div class='del'>-                           char **appmsgstr, char *callstr, int refcount,</div><div class='del'>-                           struct timeval oldest, struct timeval latest,</div><div class='del'>-                           int graph_id)</div><div class='add'>+gf_syslog_log_repetitions(const char *domain, const char *file,</div><div class='add'>+                          const char *function, int32_t line,</div><div class='add'>+                          gf_loglevel_t level, int errnum, uint64_t msgid,</div><div class='add'>+                          char **appmsgstr, char *callstr, int refcount,</div><div class='add'>+                          struct timeval oldest, struct timeval latest,</div><div class='add'>+                          int graph_id)</div><div class='ctx'> {</div><div class='del'>-        int              priority;</div><div class='del'>-        char             timestr_latest[256] = {0,};</div><div class='del'>-        char             timestr_oldest[256] = {0,};</div><div class='del'>-</div><div class='del'>-        SET_LOG_PRIO (level, priority);</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (timestr_latest, sizeof timestr_latest, latest.tv_sec,</div><div class='del'>-                     gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr_latest + strlen (timestr_latest),</div><div class='del'>-                  sizeof (timestr_latest) - strlen (timestr_latest),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, latest.tv_usec);</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (timestr_oldest, sizeof timestr_oldest, oldest.tv_sec,</div><div class='del'>-                     gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr_oldest + strlen (timestr_oldest),</div><div class='del'>-                  sizeof (timestr_oldest) - strlen (timestr_oldest),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, oldest.tv_usec);</div><div class='del'>-</div><div class='del'>-        if (errnum) {</div><div class='del'>-                syslog (priority, "The message \"[MSGID: %"PRIu64"] [%s:%d:%s] "</div><div class='del'>-                        "%d-%s: %s [%s] \" repeated %d times between %s and %s",</div><div class='del'>-                        msgid, file, line, function, graph_id, domain,</div><div class='del'>-                        *appmsgstr, strerror(errnum), refcount, timestr_oldest,</div><div class='del'>-                        timestr_latest);</div><div class='del'>-        } else {</div><div class='del'>-                syslog (priority, "The message \"[MSGID: %"PRIu64"] [%s:%d:%s] "</div><div class='del'>-                        "%d-%s: %s \" repeated %d times between %s and %s",</div><div class='del'>-                        msgid, file, line, function, graph_id, domain,</div><div class='del'>-                        *appmsgstr, refcount, timestr_oldest, timestr_latest);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    int priority;</div><div class='add'>+    char timestr_latest[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr_oldest[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    SET_LOG_PRIO(level, priority);</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(timestr_latest, sizeof timestr_latest, latest.tv_sec,</div><div class='add'>+                gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr_latest + strlen(timestr_latest),</div><div class='add'>+             sizeof(timestr_latest) - strlen(timestr_latest),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, latest.tv_usec);</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(timestr_oldest, sizeof timestr_oldest, oldest.tv_sec,</div><div class='add'>+                gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr_oldest + strlen(timestr_oldest),</div><div class='add'>+             sizeof(timestr_oldest) - strlen(timestr_oldest),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, oldest.tv_usec);</div><div class='add'>+</div><div class='add'>+    if (errnum) {</div><div class='add'>+        syslog(priority,</div><div class='add'>+               "The message \"[MSGID: %" PRIu64</div><div class='add'>+               "] [%s:%d:%s] "</div><div class='add'>+               "%d-%s: %s [%s] \" repeated %d times between %s and %s",</div><div class='add'>+               msgid, file, line, function, graph_id, domain, *appmsgstr,</div><div class='add'>+               strerror(errnum), refcount, timestr_oldest, timestr_latest);</div><div class='add'>+    } else {</div><div class='add'>+        syslog(priority,</div><div class='add'>+               "The message \"[MSGID: %" PRIu64</div><div class='add'>+               "] [%s:%d:%s] "</div><div class='add'>+               "%d-%s: %s \" repeated %d times between %s and %s",</div><div class='add'>+               msgid, file, line, function, graph_id, domain, *appmsgstr,</div><div class='add'>+               refcount, timestr_oldest, timestr_latest);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_glusterlog_log_repetitions (glusterfs_ctx_t *ctx, const char *domain,</div><div class='del'>-                               const char *file, const char *function,</div><div class='del'>-                               int32_t line, gf_loglevel_t level, int errnum,</div><div class='del'>-                               uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='del'>-                               int refcount, struct timeval oldest,</div><div class='del'>-                               struct timeval latest, int graph_id)</div><div class='add'>+gf_glusterlog_log_repetitions(glusterfs_ctx_t *ctx, const char *domain,</div><div class='add'>+                              const char *file, const char *function,</div><div class='add'>+                              int32_t line, gf_loglevel_t level, int errnum,</div><div class='add'>+                              uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='add'>+                              int refcount, struct timeval oldest,</div><div class='add'>+                              struct timeval latest, int graph_id)</div><div class='ctx'> {</div><div class='del'>-        int              ret                 = 0;</div><div class='del'>-        size_t           hlen                = 0;</div><div class='del'>-        size_t           flen                = 0;</div><div class='del'>-        size_t           mlen                = 0;</div><div class='del'>-        char             timestr_latest[256] = {0,};</div><div class='del'>-        char             timestr_oldest[256] = {0,};</div><div class='del'>-        char             errstr[256]         = {0,};</div><div class='del'>-        char            *header              = NULL;</div><div class='del'>-        char            *footer              = NULL;</div><div class='del'>-        char            *msg                 = NULL;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        gf_log_rotate (ctx);</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (timestr_latest, sizeof timestr_latest, latest.tv_sec,</div><div class='del'>-                     gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr_latest + strlen (timestr_latest),</div><div class='del'>-                  sizeof (timestr_latest) - strlen (timestr_latest),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, latest.tv_usec);</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (timestr_oldest, sizeof timestr_oldest, oldest.tv_sec,</div><div class='del'>-                     gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr_oldest + strlen (timestr_oldest),</div><div class='del'>-                  sizeof (timestr_oldest) - strlen (timestr_oldest),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, oldest.tv_usec);</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;header, "The message \"%s [MSGID: %"PRIu64"]"</div><div class='del'>-                           " [%s:%d:%s] %d-%s: ", gf_level_strings[level],</div><div class='del'>-                           msgid, file, line, function, graph_id, domain);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        if (errnum)</div><div class='del'>-                snprintf (errstr, sizeof (errstr) - 1, " [%s]",</div><div class='del'>-                          strerror (errnum));</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;footer, "%s\" repeated %d times between"</div><div class='del'>-                           " [%s] and [%s]", errstr, refcount, timestr_oldest,</div><div class='del'>-                           timestr_latest);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        /* generate the full message to log */</div><div class='del'>-        hlen = strlen (header);</div><div class='del'>-        flen = strlen (footer);</div><div class='del'>-        mlen = strlen (*appmsgstr);</div><div class='del'>-        msg = GF_MALLOC (hlen + flen + mlen + 1, gf_common_mt_char);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    size_t hlen = 0;</div><div class='add'>+    size_t flen = 0;</div><div class='add'>+    size_t mlen = 0;</div><div class='add'>+    char timestr_latest[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr_oldest[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char errstr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *header = NULL;</div><div class='add'>+    char *footer = NULL;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    gf_log_rotate(ctx);</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(timestr_latest, sizeof timestr_latest, latest.tv_sec,</div><div class='add'>+                gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr_latest + strlen(timestr_latest),</div><div class='add'>+             sizeof(timestr_latest) - strlen(timestr_latest),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, latest.tv_usec);</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(timestr_oldest, sizeof timestr_oldest, oldest.tv_sec,</div><div class='add'>+                gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr_oldest + strlen(timestr_oldest),</div><div class='add'>+             sizeof(timestr_oldest) - strlen(timestr_oldest),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, oldest.tv_usec);</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;header,</div><div class='add'>+                      "The message \"%s [MSGID: %" PRIu64</div><div class='add'>+                      "]"</div><div class='add'>+                      " [%s:%d:%s] %d-%s: ",</div><div class='add'>+                      gf_level_strings[level], msgid, file, line, function,</div><div class='add'>+                      graph_id, domain);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (errnum)</div><div class='add'>+        snprintf(errstr, sizeof(errstr) - 1, " [%s]", strerror(errnum));</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;footer,</div><div class='add'>+                      "%s\" repeated %d times between"</div><div class='add'>+                      " [%s] and [%s]",</div><div class='add'>+                      errstr, refcount, timestr_oldest, timestr_latest);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    /* generate the full message to log */</div><div class='add'>+    hlen = strlen(header);</div><div class='add'>+    flen = strlen(footer);</div><div class='add'>+    mlen = strlen(*appmsgstr);</div><div class='add'>+    msg = GF_MALLOC(hlen + flen + mlen + 1, gf_common_mt_char);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(msg, header);</div><div class='add'>+    strcpy(msg + hlen, *appmsgstr);</div><div class='add'>+    strcpy(msg + hlen + mlen, footer);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.logfile) {</div><div class='add'>+            fprintf(ctx-&gt;log.logfile, "%s\n", msg);</div><div class='add'>+            fflush(ctx-&gt;log.logfile);</div><div class='add'>+        } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='add'>+            fprintf(stderr, "%s\n", msg);</div><div class='add'>+            fflush(stderr);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        strcpy (msg, header);</div><div class='del'>-        strcpy (msg + hlen, *appmsgstr);</div><div class='del'>-        strcpy (msg + hlen + mlen, footer);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;log.logfile) {</div><div class='del'>-                        fprintf (ctx-&gt;log.logfile, "%s\n", msg);</div><div class='del'>-                        fflush (ctx-&gt;log.logfile);</div><div class='del'>-                } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='del'>-                        fprintf (stderr, "%s\n", msg);</div><div class='del'>-                        fflush (stderr);</div><div class='del'>-                }</div><div class='del'>-</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                /* We want only serious logs in 'syslog', not our debug</div><div class='del'>-                 * and trace logs */</div><div class='del'>-                if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='del'>-                        (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='del'>-                        syslog ((level-1), "%s\n", msg);</div><div class='add'>+        /* We want only serious logs in 'syslog', not our debug</div><div class='add'>+         * and trace logs */</div><div class='add'>+        if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='add'>+            (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='add'>+            syslog((level - 1), "%s\n", msg);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: Plugin in memory log buffer retention here. For logs not</div><div class='del'>-         * flushed during cores, it would be useful to retain some of the last</div><div class='del'>-         * few messages in memory */</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        ret = 0;</div><div class='add'>+    /* TODO: Plugin in memory log buffer retention here. For logs not</div><div class='add'>+     * flushed during cores, it would be useful to retain some of the last</div><div class='add'>+     * few messages in memory */</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (msg);</div><div class='del'>-        GF_FREE (header);</div><div class='del'>-        GF_FREE (footer);</div><div class='add'>+    GF_FREE(msg);</div><div class='add'>+    GF_FREE(header);</div><div class='add'>+    GF_FREE(footer);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_log_print_with_repetitions (glusterfs_ctx_t *ctx, const char *domain,</div><div class='del'>-                               const char *file, const char *function,</div><div class='del'>-                               int32_t line, gf_loglevel_t level, int errnum,</div><div class='del'>-                               uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='del'>-                               int refcount, struct timeval oldest,</div><div class='del'>-                               struct timeval latest, int graph_id)</div><div class='add'>+gf_log_print_with_repetitions(glusterfs_ctx_t *ctx, const char *domain,</div><div class='add'>+                              const char *file, const char *function,</div><div class='add'>+                              int32_t line, gf_loglevel_t level, int errnum,</div><div class='add'>+                              uint64_t msgid, char **appmsgstr, char *callstr,</div><div class='add'>+                              int refcount, struct timeval oldest,</div><div class='add'>+                              struct timeval latest, int graph_id)</div><div class='ctx'> {</div><div class='del'>-        int               ret    = -1;</div><div class='del'>-        gf_log_logger_t   logger = 0;</div><div class='del'>-</div><div class='del'>-        logger = ctx-&gt;log.logger;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        switch (logger) {</div><div class='del'>-                case gf_logger_syslog:</div><div class='del'>-                if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='del'>-                        ret = gf_syslog_log_repetitions (domain, file, function,</div><div class='del'>-                                                         line, level, errnum,</div><div class='del'>-                                                         msgid, appmsgstr,</div><div class='del'>-                                                         callstr, refcount,</div><div class='del'>-                                                         oldest, latest,</div><div class='del'>-                                                         graph_id);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                case gf_logger_glusterlog:</div><div class='del'>-                ret = gf_glusterlog_log_repetitions (ctx, domain, file,</div><div class='del'>-                                                     function, line, level,</div><div class='del'>-                                                     errnum, msgid, appmsgstr,</div><div class='del'>-                                                     callstr, refcount, oldest,</div><div class='del'>-                                                     latest, graph_id);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_log_logger_t logger = 0;</div><div class='add'>+</div><div class='add'>+    logger = ctx-&gt;log.logger;</div><div class='add'>+</div><div class='add'>+    switch (logger) {</div><div class='add'>+        case gf_logger_syslog:</div><div class='add'>+            if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='add'>+                ret = gf_syslog_log_repetitions(</div><div class='add'>+                    domain, file, function, line, level, errnum, msgid,</div><div class='add'>+                    appmsgstr, callstr, refcount, oldest, latest, graph_id);</div><div class='ctx'>                 break;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+        case gf_logger_glusterlog:</div><div class='add'>+            ret = gf_glusterlog_log_repetitions(</div><div class='add'>+                ctx, domain, file, function, line, level, errnum, msgid,</div><div class='add'>+                appmsgstr, callstr, refcount, oldest, latest, graph_id);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_log_print_plain_fmt (glusterfs_ctx_t *ctx, const char *domain,</div><div class='del'>-                        const char *file, const char *function, int32_t line,</div><div class='del'>-                        gf_loglevel_t level, int errnum, uint64_t msgid,</div><div class='del'>-                        char **appmsgstr, char *callstr, struct timeval tv,</div><div class='del'>-                        int graph_id, gf_log_format_t fmt)</div><div class='add'>+gf_log_print_plain_fmt(glusterfs_ctx_t *ctx, const char *domain,</div><div class='add'>+                       const char *file, const char *function, int32_t line,</div><div class='add'>+                       gf_loglevel_t level, int errnum, uint64_t msgid,</div><div class='add'>+                       char **appmsgstr, char *callstr, struct timeval tv,</div><div class='add'>+                       int graph_id, gf_log_format_t fmt)</div><div class='ctx'> {</div><div class='del'>-        int               ret    = -1;</div><div class='del'>-        gf_log_logger_t   logger = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_log_logger_t logger = 0;</div><div class='ctx'> </div><div class='del'>-        logger = ctx-&gt;log.logger;</div><div class='add'>+    logger = ctx-&gt;log.logger;</div><div class='ctx'> </div><div class='del'>-        /* log to the configured logging service */</div><div class='del'>-        switch (logger) {</div><div class='add'>+    /* log to the configured logging service */</div><div class='add'>+    switch (logger) {</div><div class='ctx'>         case gf_logger_syslog:</div><div class='del'>-                if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='del'>-                        ret = gf_log_syslog (ctx, domain, file, function, line,</div><div class='del'>-                                             level, errnum, msgid, appmsgstr,</div><div class='del'>-                                             callstr, graph_id, fmt);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                /* NOTE: If syslog control file is absent, which is another</div><div class='del'>-                 * way to control logging to syslog, then we will fall through</div><div class='del'>-                 * to the gluster log. The ideal way to do things would be to</div><div class='del'>-                 * not have the extra control file check */</div><div class='del'>-        case gf_logger_glusterlog:</div><div class='del'>-                ret = gf_log_glusterlog (ctx, domain, file, function, line,</div><div class='del'>-                                         level, errnum, msgid, appmsgstr,</div><div class='del'>-                                         callstr, tv, graph_id, fmt);</div><div class='add'>+            if (ctx-&gt;log.log_control_file_found &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='add'>+                ret = gf_log_syslog(ctx, domain, file, function, line, level,</div><div class='add'>+                                    errnum, msgid, appmsgstr, callstr, graph_id,</div><div class='add'>+                                    fmt);</div><div class='ctx'>                 break;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+            /* NOTE: If syslog control file is absent, which is another</div><div class='add'>+             * way to control logging to syslog, then we will fall through</div><div class='add'>+             * to the gluster log. The ideal way to do things would be to</div><div class='add'>+             * not have the extra control file check */</div><div class='add'>+        case gf_logger_glusterlog:</div><div class='add'>+            ret = gf_log_glusterlog(ctx, domain, file, function, line, level,</div><div class='add'>+                                    errnum, msgid, appmsgstr, callstr, tv,</div><div class='add'>+                                    graph_id, fmt);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_flush_message (log_buf_t *buf, glusterfs_ctx_t *ctx)</div><div class='add'>+gf_log_flush_message(log_buf_t *buf, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        if (buf-&gt;refcount == 1) {</div><div class='del'>-                (void) gf_log_print_plain_fmt (ctx, buf-&gt;domain, buf-&gt;file,</div><div class='del'>-                                               buf-&gt;function, buf-&gt;line,</div><div class='del'>-                                               buf-&gt;level, buf-&gt;errnum,</div><div class='del'>-                                               buf-&gt;msg_id, &amp;buf-&gt;msg, NULL,</div><div class='del'>-                                               buf-&gt;latest, buf-&gt;graph_id,</div><div class='del'>-                                               gf_logformat_withmsgid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (buf-&gt;refcount &gt; 1) {</div><div class='del'>-                gf_log_print_with_repetitions (ctx, buf-&gt;domain, buf-&gt;file,</div><div class='del'>-                                               buf-&gt;function, buf-&gt;line,</div><div class='del'>-                                               buf-&gt;level, buf-&gt;errnum,</div><div class='del'>-                                               buf-&gt;msg_id, &amp;buf-&gt;msg, NULL,</div><div class='del'>-                                               buf-&gt;refcount, buf-&gt;oldest,</div><div class='del'>-                                               buf-&gt;latest, buf-&gt;graph_id);</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+    if (buf-&gt;refcount == 1) {</div><div class='add'>+        (void)gf_log_print_plain_fmt(ctx, buf-&gt;domain, buf-&gt;file, buf-&gt;function,</div><div class='add'>+                                     buf-&gt;line, buf-&gt;level, buf-&gt;errnum,</div><div class='add'>+                                     buf-&gt;msg_id, &amp;buf-&gt;msg, NULL, buf-&gt;latest,</div><div class='add'>+                                     buf-&gt;graph_id, gf_logformat_withmsgid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (buf-&gt;refcount &gt; 1) {</div><div class='add'>+        gf_log_print_with_repetitions(</div><div class='add'>+            ctx, buf-&gt;domain, buf-&gt;file, buf-&gt;function, buf-&gt;line, buf-&gt;level,</div><div class='add'>+            buf-&gt;errnum, buf-&gt;msg_id, &amp;buf-&gt;msg, NULL, buf-&gt;refcount,</div><div class='add'>+            buf-&gt;oldest, buf-&gt;latest, buf-&gt;graph_id);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_log_flush_list (struct list_head *copy, glusterfs_ctx_t *ctx)</div><div class='add'>+gf_log_flush_list(struct list_head *copy, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        log_buf_t        *iter = NULL;</div><div class='del'>-        log_buf_t        *tmp  = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (iter, tmp, copy, msg_list) {</div><div class='del'>-                gf_log_flush_message (iter, ctx);</div><div class='del'>-                list_del_init (&amp;iter-&gt;msg_list);</div><div class='del'>-                log_buf_destroy (iter);</div><div class='del'>-        }</div><div class='add'>+    log_buf_t *iter = NULL;</div><div class='add'>+    log_buf_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(iter, tmp, copy, msg_list)</div><div class='add'>+    {</div><div class='add'>+        gf_log_flush_message(iter, ctx);</div><div class='add'>+        list_del_init(&amp;iter-&gt;msg_list);</div><div class='add'>+        log_buf_destroy(iter);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_flush_msgs (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_log_flush_msgs(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        struct list_head copy;</div><div class='add'>+    struct list_head copy;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;copy);</div><div class='add'>+    INIT_LIST_HEAD(&amp;copy);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-        {</div><div class='del'>-                list_splice_init (&amp;ctx-&gt;log.lru_queue, &amp;copy);</div><div class='del'>-                ctx-&gt;log.lru_cur_size = 0;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    {</div><div class='add'>+        list_splice_init(&amp;ctx-&gt;log.lru_queue, &amp;copy);</div><div class='add'>+        ctx-&gt;log.lru_cur_size = 0;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='ctx'> </div><div class='del'>-        gf_log_flush_list (&amp;copy, ctx);</div><div class='add'>+    gf_log_flush_list(&amp;copy, ctx);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_log_flush_extra_msgs (glusterfs_ctx_t *ctx, uint32_t new)</div><div class='add'>+gf_log_flush_extra_msgs(glusterfs_ctx_t *ctx, uint32_t new)</div><div class='ctx'> {</div><div class='del'>-        int               count = 0;</div><div class='del'>-        int                   i = 0;</div><div class='del'>-        log_buf_t        *iter  = NULL;</div><div class='del'>-        log_buf_t        *tmp   = NULL;</div><div class='del'>-        struct list_head copy;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;copy);</div><div class='del'>-</div><div class='del'>-        /* If the number of outstanding log messages does not cause list</div><div class='del'>-         * overflow even after reducing the size of the list, then do nothing.</div><div class='del'>-         * Otherwise (that is if there are more items in the list than there</div><div class='del'>-         * need to be after reducing its size), move the least recently used</div><div class='del'>-         * 'diff' elements to be flushed into a separate list...</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    log_buf_t *iter = NULL;</div><div class='add'>+    log_buf_t *tmp = NULL;</div><div class='add'>+    struct list_head copy;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;copy);</div><div class='add'>+</div><div class='add'>+    /* If the number of outstanding log messages does not cause list</div><div class='add'>+     * overflow even after reducing the size of the list, then do nothing.</div><div class='add'>+     * Otherwise (that is if there are more items in the list than there</div><div class='add'>+     * need to be after reducing its size), move the least recently used</div><div class='add'>+     * 'diff' elements to be flushed into a separate list...</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.lru_cur_size &lt;= new)</div><div class='add'>+            goto unlock;</div><div class='add'>+        count = ctx-&gt;log.lru_cur_size - new;</div><div class='add'>+        list_for_each_entry_safe(iter, tmp, &amp;ctx-&gt;log.lru_queue, msg_list)</div><div class='ctx'>         {</div><div class='del'>-                if (ctx-&gt;log.lru_cur_size &lt;= new)</div><div class='del'>-                        goto unlock;</div><div class='del'>-                count = ctx-&gt;log.lru_cur_size - new;</div><div class='del'>-                list_for_each_entry_safe (iter, tmp, &amp;ctx-&gt;log.lru_queue,</div><div class='del'>-                                          msg_list) {</div><div class='del'>-                        if (i == count)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        list_del_init (&amp;iter-&gt;msg_list);</div><div class='del'>-                        list_add_tail (&amp;iter-&gt;msg_list, &amp;copy);</div><div class='del'>-                        i++;</div><div class='del'>-                }</div><div class='del'>-                ctx-&gt;log.lru_cur_size = ctx-&gt;log.lru_cur_size - count;</div><div class='add'>+            if (i == count)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            list_del_init(&amp;iter-&gt;msg_list);</div><div class='add'>+            list_add_tail(&amp;iter-&gt;msg_list, &amp;copy);</div><div class='add'>+            i++;</div><div class='ctx'>         }</div><div class='del'>-        // ... quickly unlock ...</div><div class='add'>+        ctx-&gt;log.lru_cur_size = ctx-&gt;log.lru_cur_size - count;</div><div class='add'>+    }</div><div class='add'>+    // ... quickly unlock ...</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-        if (list_empty (&amp;copy))</div><div class='del'>-                return;</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    if (list_empty(&amp;copy))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        TEST_LOG("Log buffer size reduced. About to flush %d extra log "</div><div class='del'>-                 "messages", count);</div><div class='del'>-        // ... and then flush them outside the lock.</div><div class='del'>-        gf_log_flush_list (&amp;copy, ctx);</div><div class='del'>-        TEST_LOG("Just flushed %d extra log messages", count);</div><div class='add'>+    TEST_LOG(</div><div class='add'>+        "Log buffer size reduced. About to flush %d extra log "</div><div class='add'>+        "messages",</div><div class='add'>+        count);</div><div class='add'>+    // ... and then flush them outside the lock.</div><div class='add'>+    gf_log_flush_list(&amp;copy, ctx);</div><div class='add'>+    TEST_LOG("Just flushed %d extra log messages", count);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__gf_log_inject_timer_event (glusterfs_ctx_t *ctx)</div><div class='add'>+__gf_log_inject_timer_event(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int              ret      = -1;</div><div class='del'>-        struct timespec  timeout  = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct timespec timeout = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;log.log_flush_timer) {</div><div class='del'>-                gf_timer_call_cancel (ctx, ctx-&gt;log.log_flush_timer);</div><div class='del'>-                ctx-&gt;log.log_flush_timer = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ctx-&gt;log.log_flush_timer) {</div><div class='add'>+        gf_timer_call_cancel(ctx, ctx-&gt;log.log_flush_timer);</div><div class='add'>+        ctx-&gt;log.log_flush_timer = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        timeout.tv_sec  = ctx-&gt;log.timeout;</div><div class='del'>-        timeout.tv_nsec = 0;</div><div class='add'>+    timeout.tv_sec = ctx-&gt;log.timeout;</div><div class='add'>+    timeout.tv_nsec = 0;</div><div class='ctx'> </div><div class='del'>-        TEST_LOG("Starting timer now. Timeout = %u, current buf size = %d",</div><div class='del'>-                 ctx-&gt;log.timeout, ctx-&gt;log.lru_size);</div><div class='del'>-        ctx-&gt;log.log_flush_timer = gf_timer_call_after (ctx, timeout,</div><div class='del'>-                                                      gf_log_flush_timeout_cbk,</div><div class='del'>-                                                        (void *)ctx);</div><div class='del'>-        if (!ctx-&gt;log.log_flush_timer)</div><div class='del'>-                goto out;</div><div class='add'>+    TEST_LOG("Starting timer now. Timeout = %u, current buf size = %d",</div><div class='add'>+             ctx-&gt;log.timeout, ctx-&gt;log.lru_size);</div><div class='add'>+    ctx-&gt;log.log_flush_timer = gf_timer_call_after(</div><div class='add'>+        ctx, timeout, gf_log_flush_timeout_cbk, (void *)ctx);</div><div class='add'>+    if (!ctx-&gt;log.log_flush_timer)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_log_inject_timer_event (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_log_inject_timer_event(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __gf_log_inject_timer_event (ctx);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __gf_log_inject_timer_event(ctx);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_flush_timeout_cbk (void *data)</div><div class='add'>+gf_log_flush_timeout_cbk(void *data)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t  *ctx  = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = (glusterfs_ctx_t *) data;</div><div class='add'>+    ctx = (glusterfs_ctx_t *)data;</div><div class='ctx'> </div><div class='del'>-        TEST_LOG("Log timer timed out. About to flush outstanding messages if "</div><div class='del'>-                 "present");</div><div class='del'>-        gf_log_flush_msgs (ctx);</div><div class='add'>+    TEST_LOG(</div><div class='add'>+        "Log timer timed out. About to flush outstanding messages if "</div><div class='add'>+        "present");</div><div class='add'>+    gf_log_flush_msgs(ctx);</div><div class='ctx'> </div><div class='del'>-        (void) gf_log_inject_timer_event (ctx);</div><div class='add'>+    (void)gf_log_inject_timer_event(ctx);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_gf_msg_internal (const char *domain, const char *file, const char *function,</div><div class='del'>-                  int32_t line, gf_loglevel_t level, int errnum, uint64_t msgid,</div><div class='del'>-                  char **appmsgstr, char *callstr, int graph_id)</div><div class='add'>+_gf_msg_internal(const char *domain, const char *file, const char *function,</div><div class='add'>+                 int32_t line, gf_loglevel_t level, int errnum, uint64_t msgid,</div><div class='add'>+                 char **appmsgstr, char *callstr, int graph_id)</div><div class='ctx'> {</div><div class='del'>-        int              ret              = -1;</div><div class='del'>-        uint32_t         size             = 0;</div><div class='del'>-        const char      *basename         = NULL;</div><div class='del'>-        xlator_t        *this             = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx              = NULL;</div><div class='del'>-        log_buf_t       *iter             = NULL;</div><div class='del'>-        log_buf_t       *buf_tmp          = NULL;</div><div class='del'>-        log_buf_t       *buf_new          = NULL;</div><div class='del'>-        log_buf_t       *first            = NULL;</div><div class='del'>-        struct timeval   tv               = {0,};</div><div class='del'>-        gf_boolean_t     found            = _gf_false;</div><div class='del'>-        gf_boolean_t     flush_lru        = _gf_false;</div><div class='del'>-        gf_boolean_t     flush_logged_msg = _gf_false;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t size = 0;</div><div class='add'>+    const char *basename = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    log_buf_t *iter = NULL;</div><div class='add'>+    log_buf_t *buf_tmp = NULL;</div><div class='add'>+    log_buf_t *buf_new = NULL;</div><div class='add'>+    log_buf_t *first = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t found = _gf_false;</div><div class='add'>+    gf_boolean_t flush_lru = _gf_false;</div><div class='add'>+    gf_boolean_t flush_logged_msg = _gf_false;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    GET_FILE_NAME_TO_LOG(file, basename);</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* If this function is called via _gf_msg_callingfn () (indicated by a</div><div class='add'>+     * non-NULL callstr), or if the logformat is traditional, flush the</div><div class='add'>+     * message directly to disk.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if ((callstr) || (ctx-&gt;log.logformat == gf_logformat_traditional)) {</div><div class='add'>+        ret = gf_log_print_plain_fmt(ctx, domain, basename, function, line,</div><div class='add'>+                                     level, errnum, msgid, appmsgstr, callstr,</div><div class='add'>+                                     tv, graph_id, gf_logformat_traditional);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+    {</div><div class='add'>+        /* Check if the msg being logged is already part of the list */</div><div class='add'>+        list_for_each_entry_safe_reverse(iter, buf_tmp, &amp;ctx-&gt;log.lru_queue,</div><div class='add'>+                                         msg_list)</div><div class='add'>+        {</div><div class='add'>+            if (first == NULL)</div><div class='add'>+                // Remember the first (lru) element in first ptr</div><div class='add'>+                first = iter;</div><div class='ctx'> </div><div class='del'>-        GET_FILE_NAME_TO_LOG (file, basename);</div><div class='add'>+            /* Try to fail the search early on by doing the less</div><div class='add'>+             * expensive integer comparisons and continue to string</div><div class='add'>+             * parameter comparisons only after all int parameters</div><div class='add'>+             * are found to be matching.</div><div class='add'>+             */</div><div class='add'>+            if (line != iter-&gt;line)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            if (errnum != iter-&gt;errnum)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        /* If this function is called via _gf_msg_callingfn () (indicated by a</div><div class='del'>-         * non-NULL callstr), or if the logformat is traditional, flush the</div><div class='del'>-         * message directly to disk.</div><div class='del'>-         */</div><div class='add'>+            if (msgid != iter-&gt;msg_id)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        if ((callstr) || (ctx-&gt;log.logformat == gf_logformat_traditional)) {</div><div class='del'>-                ret = gf_log_print_plain_fmt (ctx, domain, basename, function,</div><div class='del'>-                                              line, level, errnum, msgid,</div><div class='del'>-                                              appmsgstr, callstr, tv, graph_id,</div><div class='del'>-                                              gf_logformat_traditional);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            if (level != iter-&gt;level)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='del'>-        {</div><div class='del'>-                /* Check if the msg being logged is already part of the list */</div><div class='del'>-                list_for_each_entry_safe_reverse (iter, buf_tmp,</div><div class='del'>-                                                  &amp;ctx-&gt;log.lru_queue,</div><div class='del'>-                                                  msg_list) {</div><div class='del'>-                        if (first == NULL)</div><div class='del'>-                                // Remember the first (lru) element in first ptr</div><div class='del'>-                                first = iter;</div><div class='del'>-</div><div class='del'>-                        /* Try to fail the search early on by doing the less</div><div class='del'>-                         * expensive integer comparisons and continue to string</div><div class='del'>-                         * parameter comparisons only after all int parameters</div><div class='del'>-                         * are found to be matching.</div><div class='del'>-                         */</div><div class='del'>-                        if (line != iter-&gt;line)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (errnum != iter-&gt;errnum)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (msgid != iter-&gt;msg_id)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (level != iter-&gt;level)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (graph_id != iter-&gt;graph_id)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (strcmp (domain, iter-&gt;domain))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (strcmp (basename, iter-&gt;file))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (strcmp (function, iter-&gt;function))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (strcmp (*appmsgstr, iter-&gt;msg))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        //Ah! Found a match!</div><div class='del'>-                        list_move_tail (&amp;iter-&gt;msg_list, &amp;ctx-&gt;log.lru_queue);</div><div class='del'>-                        iter-&gt;refcount++;</div><div class='del'>-                        found = _gf_true;</div><div class='del'>-                        //Update the 'latest' timestamp.</div><div class='del'>-                        memcpy ((void *)&amp;(iter-&gt;latest), (void *)&amp;tv,</div><div class='del'>-                                sizeof (struct timeval));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (found) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                // else ...</div><div class='del'>-</div><div class='del'>-                size = ctx-&gt;log.lru_size;</div><div class='del'>-                /* If the upper limit on the log buf size is 0, flush the msg to</div><div class='del'>-                 * disk directly after unlock. There's no need to buffer the</div><div class='del'>-                 * msg here.</div><div class='del'>-                 */</div><div class='del'>-                if (size == 0) {</div><div class='del'>-                        flush_logged_msg = _gf_true;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                } else if ((ctx-&gt;log.lru_cur_size + 1) &gt; size) {</div><div class='del'>-                /* If the list is full, flush the lru msg to disk and also</div><div class='del'>-                 * release it after unlock, and ...</div><div class='del'>-                 * */</div><div class='del'>-                if (first-&gt;refcount &gt;= 1)</div><div class='del'>-                        TEST_LOG("Buffer overflow of a buffer whose size limit "</div><div class='del'>-                                 "is %d. About to flush least recently used log"</div><div class='del'>-                                 " message to disk", size);</div><div class='del'>-                        list_del_init (&amp;first-&gt;msg_list);</div><div class='del'>-                        ctx-&gt;log.lru_cur_size--;</div><div class='del'>-                        flush_lru = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                /* create a new list element, initialise and enqueue it.</div><div class='del'>-                 * Additionally, this being the first occurrence of the msg,</div><div class='del'>-                 * log it directly to disk after unlock. */</div><div class='del'>-                buf_new = log_buf_new ();</div><div class='del'>-                if (!buf_new) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ret = log_buf_init (buf_new, domain, basename, function, line,</div><div class='del'>-                                    level, errnum, msgid, appmsgstr, graph_id);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        log_buf_destroy (buf_new);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+            if (graph_id != iter-&gt;graph_id)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                memcpy ((void *)&amp;(buf_new-&gt;latest), (void *)&amp;tv,</div><div class='del'>-                        sizeof (struct timeval));</div><div class='del'>-                memcpy ((void *)&amp;(buf_new-&gt;oldest), (void *)&amp;tv,</div><div class='del'>-                        sizeof (struct timeval));</div><div class='add'>+            if (strcmp(domain, iter-&gt;domain))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                list_add_tail (&amp;buf_new-&gt;msg_list, &amp;ctx-&gt;log.lru_queue);</div><div class='del'>-                ctx-&gt;log.lru_cur_size++;</div><div class='del'>-                flush_logged_msg = _gf_true;</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+            if (strcmp(basename, iter-&gt;file))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        /* Value of @ret is a don't-care below since irrespective of success or</div><div class='del'>-         * failure post setting of @flush_lru, @first must be flushed and freed.</div><div class='del'>-         */</div><div class='del'>-        if (flush_lru) {</div><div class='del'>-                gf_log_flush_message (first, ctx);</div><div class='del'>-                log_buf_destroy (first);</div><div class='add'>+            if (strcmp(function, iter-&gt;function))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            if (strcmp(*appmsgstr, iter-&gt;msg))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            // Ah! Found a match!</div><div class='add'>+            list_move_tail(&amp;iter-&gt;msg_list, &amp;ctx-&gt;log.lru_queue);</div><div class='add'>+            iter-&gt;refcount++;</div><div class='add'>+            found = _gf_true;</div><div class='add'>+            // Update the 'latest' timestamp.</div><div class='add'>+            memcpy((void *)&amp;(iter-&gt;latest), (void *)&amp;tv,</div><div class='add'>+                   sizeof(struct timeval));</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        /* Similarly, irrespective of whether all operations since setting of</div><div class='del'>-         * @flush_logged_msg were successful or not, flush the message being</div><div class='del'>-         * logged to disk in the plain format.</div><div class='del'>-         */</div><div class='del'>-        if (flush_logged_msg) {</div><div class='del'>-                ret = gf_log_print_plain_fmt (ctx, domain, basename,</div><div class='del'>-                                              function, line, level,</div><div class='del'>-                                              errnum, msgid, appmsgstr,</div><div class='del'>-                                              callstr, tv, graph_id,</div><div class='del'>-                                              gf_logformat_withmsgid);</div><div class='add'>+        if (found) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+        // else ...</div><div class='add'>+</div><div class='add'>+        size = ctx-&gt;log.lru_size;</div><div class='add'>+        /* If the upper limit on the log buf size is 0, flush the msg to</div><div class='add'>+         * disk directly after unlock. There's no need to buffer the</div><div class='add'>+         * msg here.</div><div class='add'>+         */</div><div class='add'>+        if (size == 0) {</div><div class='add'>+            flush_logged_msg = _gf_true;</div><div class='add'>+            goto unlock;</div><div class='add'>+        } else if ((ctx-&gt;log.lru_cur_size + 1) &gt; size) {</div><div class='add'>+            /* If the list is full, flush the lru msg to disk and also</div><div class='add'>+             * release it after unlock, and ...</div><div class='add'>+             * */</div><div class='add'>+            if (first-&gt;refcount &gt;= 1)</div><div class='add'>+                TEST_LOG(</div><div class='add'>+                    "Buffer overflow of a buffer whose size limit "</div><div class='add'>+                    "is %d. About to flush least recently used log"</div><div class='add'>+                    " message to disk",</div><div class='add'>+                    size);</div><div class='add'>+            list_del_init(&amp;first-&gt;msg_list);</div><div class='add'>+            ctx-&gt;log.lru_cur_size--;</div><div class='add'>+            flush_lru = _gf_true;</div><div class='add'>+        }</div><div class='add'>+        /* create a new list element, initialise and enqueue it.</div><div class='add'>+         * Additionally, this being the first occurrence of the msg,</div><div class='add'>+         * log it directly to disk after unlock. */</div><div class='add'>+        buf_new = log_buf_new();</div><div class='add'>+        if (!buf_new) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ret = log_buf_init(buf_new, domain, basename, function, line, level,</div><div class='add'>+                           errnum, msgid, appmsgstr, graph_id);</div><div class='add'>+        if (ret) {</div><div class='add'>+            log_buf_destroy(buf_new);</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        memcpy((void *)&amp;(buf_new-&gt;latest), (void *)&amp;tv, sizeof(struct timeval));</div><div class='add'>+        memcpy((void *)&amp;(buf_new-&gt;oldest), (void *)&amp;tv, sizeof(struct timeval));</div><div class='add'>+</div><div class='add'>+        list_add_tail(&amp;buf_new-&gt;msg_list, &amp;ctx-&gt;log.lru_queue);</div><div class='add'>+        ctx-&gt;log.lru_cur_size++;</div><div class='add'>+        flush_logged_msg = _gf_true;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.log_buf_lock);</div><div class='add'>+</div><div class='add'>+    /* Value of @ret is a don't-care below since irrespective of success or</div><div class='add'>+     * failure post setting of @flush_lru, @first must be flushed and freed.</div><div class='add'>+     */</div><div class='add'>+    if (flush_lru) {</div><div class='add'>+        gf_log_flush_message(first, ctx);</div><div class='add'>+        log_buf_destroy(first);</div><div class='add'>+    }</div><div class='add'>+    /* Similarly, irrespective of whether all operations since setting of</div><div class='add'>+     * @flush_logged_msg were successful or not, flush the message being</div><div class='add'>+     * logged to disk in the plain format.</div><div class='add'>+     */</div><div class='add'>+    if (flush_logged_msg) {</div><div class='add'>+        ret = gf_log_print_plain_fmt(ctx, domain, basename, function, line,</div><div class='add'>+                                     level, errnum, msgid, appmsgstr, callstr,</div><div class='add'>+                                     tv, graph_id, gf_logformat_withmsgid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg (const char *domain, const char *file, const char *function,</div><div class='del'>-         int32_t line, gf_loglevel_t level, int errnum, int trace,</div><div class='del'>-         uint64_t msgid, const char *fmt, ...)</div><div class='add'>+_gf_msg(const char *domain, const char *file, const char *function,</div><div class='add'>+        int32_t line, gf_loglevel_t level, int errnum, int trace,</div><div class='add'>+        uint64_t msgid, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        char            *msgstr = NULL;</div><div class='del'>-        va_list          ap;</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-        char             callstr[GF_LOG_BACKTRACE_SIZE] = {0,};</div><div class='del'>-        int              passcallstr = 0;</div><div class='del'>-        int              log_inited = 0;</div><div class='del'>-</div><div class='del'>-        /* in args check */</div><div class='del'>-        if (!domain || !file || !function || !fmt) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "logging: %s:%s():%d: invalid argument\n",</div><div class='del'>-                         __FILE__, __PRETTY_FUNCTION__, __LINE__);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        if (this == NULL)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                /* messages before context initialization are ignored */</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* check if we should be logging */</div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (trace) {</div><div class='del'>-                ret = _gf_msg_backtrace (GF_LOG_BACKTRACE_DEPTH, callstr,</div><div class='del'>-                                         GF_LOG_BACKTRACE_SIZE);</div><div class='del'>-                if (ret &gt;= 0)</div><div class='del'>-                        passcallstr = 1;</div><div class='del'>-                else</div><div class='del'>-                        ret = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;log.logfile) {</div><div class='del'>-                        log_inited = 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-</div><div class='del'>-        /* form the message */</div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        ret = vasprintf (&amp;msgstr, fmt, ap);</div><div class='del'>-        va_end (ap);</div><div class='del'>-</div><div class='del'>-        /* log */</div><div class='del'>-        if (ret != -1) {</div><div class='del'>-                if (!log_inited &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='del'>-                        ret = gf_log_syslog (ctx, domain, file, function, line,</div><div class='del'>-                                            level, errnum, msgid, &amp;msgstr,</div><div class='del'>-                                            (passcallstr? callstr : NULL),</div><div class='del'>-                                            (this-&gt;graph)? this-&gt;graph-&gt;id : 0,</div><div class='del'>-                                            gf_logformat_traditional);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = _gf_msg_internal (domain, file, function, line,</div><div class='del'>-                                            level, errnum, msgid, &amp;msgstr,</div><div class='del'>-                                            (passcallstr? callstr : NULL),</div><div class='del'>-                                            (this-&gt;graph)? this-&gt;graph-&gt;id : 0);</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *msgstr = NULL;</div><div class='add'>+    va_list ap;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    char callstr[GF_LOG_BACKTRACE_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int passcallstr = 0;</div><div class='add'>+    int log_inited = 0;</div><div class='add'>+</div><div class='add'>+    /* in args check */</div><div class='add'>+    if (!domain || !file || !function || !fmt) {</div><div class='add'>+        fprintf(stderr, "logging: %s:%s():%d: invalid argument\n", __FILE__,</div><div class='add'>+                __PRETTY_FUNCTION__, __LINE__);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    if (this == NULL)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        /* messages before context initialization are ignored */</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* check if we should be logging */</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (trace) {</div><div class='add'>+        ret = _gf_msg_backtrace(GF_LOG_BACKTRACE_DEPTH, callstr,</div><div class='add'>+                                GF_LOG_BACKTRACE_SIZE);</div><div class='add'>+        if (ret &gt;= 0)</div><div class='add'>+            passcallstr = 1;</div><div class='add'>+        else</div><div class='add'>+            ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.logfile) {</div><div class='add'>+            log_inited = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+</div><div class='add'>+    /* form the message */</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    ret = vasprintf(&amp;msgstr, fmt, ap);</div><div class='add'>+    va_end(ap);</div><div class='add'>+</div><div class='add'>+    /* log */</div><div class='add'>+    if (ret != -1) {</div><div class='add'>+        if (!log_inited &amp;&amp; ctx-&gt;log.gf_log_syslog) {</div><div class='add'>+            ret = gf_log_syslog(</div><div class='add'>+                ctx, domain, file, function, line, level, errnum, msgid,</div><div class='add'>+                &amp;msgstr, (passcallstr ? callstr : NULL),</div><div class='add'>+                (this-&gt;graph) ? this-&gt;graph-&gt;id : 0, gf_logformat_traditional);</div><div class='ctx'>         } else {</div><div class='del'>-                /* man (3) vasprintf states on error strp contents</div><div class='del'>-                 * are undefined, be safe */</div><div class='del'>-                msgstr = NULL;</div><div class='add'>+            ret = _gf_msg_internal(domain, file, function, line, level, errnum,</div><div class='add'>+                                   msgid, &amp;msgstr,</div><div class='add'>+                                   (passcallstr ? callstr : NULL),</div><div class='add'>+                                   (this-&gt;graph) ? this-&gt;graph-&gt;id : 0);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        /* man (3) vasprintf states on error strp contents</div><div class='add'>+         * are undefined, be safe */</div><div class='add'>+        msgstr = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        FREE (msgstr);</div><div class='add'>+    FREE(msgstr);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: Deprecate (delete) _gf_log, _gf_log_callingfn,</div><div class='ctx'>  * once messages are changed to use _gf_msgXXX APIs for logging */</div><div class='ctx'> int</div><div class='del'>-_gf_log (const char *domain, const char *file, const char *function, int line,</div><div class='del'>-         gf_loglevel_t level, const char *fmt, ...)</div><div class='add'>+_gf_log(const char *domain, const char *file, const char *function, int line,</div><div class='add'>+        gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        const char    *basename = NULL;</div><div class='del'>-        FILE          *new_logfile = NULL;</div><div class='del'>-        va_list        ap;</div><div class='del'>-        char           timestr[GF_LOG_TIMESTR_SIZE] = {0,};</div><div class='del'>-        struct timeval tv = {0,};</div><div class='del'>-        char          *str1 = NULL;</div><div class='del'>-        char          *str2 = NULL;</div><div class='del'>-        char          *msg  = NULL;</div><div class='del'>-        size_t         len  = 0;</div><div class='del'>-        int            ret  = 0;</div><div class='del'>-        int            fd   = -1;</div><div class='del'>-        xlator_t      *this = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (skip_logging (this, level))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        static char *level_strings[] = {"",  /* NONE */</div><div class='del'>-                                        "M", /* EMERGENCY */</div><div class='del'>-                                        "A", /* ALERT */</div><div class='del'>-                                        "C", /* CRITICAL */</div><div class='del'>-                                        "E", /* ERROR */</div><div class='del'>-                                        "W", /* WARNING */</div><div class='del'>-                                        "N", /* NOTICE */</div><div class='del'>-                                        "I", /* INFO */</div><div class='del'>-                                        "D", /* DEBUG */</div><div class='del'>-                                        "T", /* TRACE */</div><div class='del'>-                                        ""};</div><div class='del'>-</div><div class='del'>-        if (!domain || !file || !function || !fmt) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "logging: %s:%s():%d: invalid argument\n",</div><div class='del'>-                         __FILE__, __PRETTY_FUNCTION__, __LINE__);</div><div class='del'>-                return -1;</div><div class='add'>+    const char *basename = NULL;</div><div class='add'>+    FILE *new_logfile = NULL;</div><div class='add'>+    va_list ap;</div><div class='add'>+    char timestr[GF_LOG_TIMESTR_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *str1 = NULL;</div><div class='add'>+    char *str2 = NULL;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (skip_logging(this, level))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    static char *level_strings[] = {"",  /* NONE */</div><div class='add'>+                                    "M", /* EMERGENCY */</div><div class='add'>+                                    "A", /* ALERT */</div><div class='add'>+                                    "C", /* CRITICAL */</div><div class='add'>+                                    "E", /* ERROR */</div><div class='add'>+                                    "W", /* WARNING */</div><div class='add'>+                                    "N", /* NOTICE */</div><div class='add'>+                                    "I", /* INFO */</div><div class='add'>+                                    "D", /* DEBUG */</div><div class='add'>+                                    "T", /* TRACE */</div><div class='add'>+                                    ""};</div><div class='add'>+</div><div class='add'>+    if (!domain || !file || !function || !fmt) {</div><div class='add'>+        fprintf(stderr, "logging: %s:%s():%d: invalid argument\n", __FILE__,</div><div class='add'>+                __PRETTY_FUNCTION__, __LINE__);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    basename = strrchr(file, '/');</div><div class='add'>+    if (basename)</div><div class='add'>+        basename++;</div><div class='add'>+    else</div><div class='add'>+        basename = file;</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;log.log_control_file_found) {</div><div class='add'>+        int priority;</div><div class='add'>+        /* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and</div><div class='add'>+           other level as is */</div><div class='add'>+        if (GF_LOG_TRACE == level || GF_LOG_NONE == level) {</div><div class='add'>+            priority = LOG_DEBUG;</div><div class='add'>+        } else {</div><div class='add'>+            priority = level - 1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        basename = strrchr (file, '/');</div><div class='del'>-        if (basename)</div><div class='del'>-                basename++;</div><div class='del'>-        else</div><div class='del'>-                basename = file;</div><div class='add'>+        va_start(ap, fmt);</div><div class='add'>+        vasprintf(&amp;str2, fmt, ap);</div><div class='add'>+        va_end(ap);</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;log.log_control_file_found)</div><div class='del'>-        {</div><div class='del'>-                int priority;</div><div class='del'>-                /* treat GF_LOG_TRACE and GF_LOG_NONE as LOG_DEBUG and</div><div class='del'>-                   other level as is */</div><div class='del'>-                if (GF_LOG_TRACE == level || GF_LOG_NONE == level) {</div><div class='del'>-                        priority = LOG_DEBUG;</div><div class='del'>-                } else {</div><div class='del'>-                        priority = level - 1;</div><div class='del'>-                }</div><div class='add'>+        gf_syslog(priority, "[%s:%d:%s] %d-%s: %s", basename, line, function,</div><div class='add'>+                  ((this-&gt;graph) ? this-&gt;graph-&gt;id : 0), domain, str2);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                va_start (ap, fmt);</div><div class='del'>-                vasprintf (&amp;str2, fmt, ap);</div><div class='del'>-                va_end (ap);</div><div class='add'>+    if (ctx-&gt;log.logrotate) {</div><div class='add'>+        ctx-&gt;log.logrotate = 0;</div><div class='ctx'> </div><div class='del'>-                gf_syslog (priority, "[%s:%d:%s] %d-%s: %s",</div><div class='del'>-                           basename, line, function,</div><div class='del'>-                           ((this-&gt;graph) ? this-&gt;graph-&gt;id:0), domain, str2);</div><div class='del'>-                goto err;</div><div class='add'>+        fd = sys_open(ctx-&gt;log.filename, O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR);</div><div class='add'>+        if (fd &lt; 0) {</div><div class='add'>+            gf_msg("logrotate", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "failed to open logfile");</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;log.logrotate) {</div><div class='del'>-                ctx-&gt;log.logrotate = 0;</div><div class='del'>-</div><div class='del'>-                fd = sys_open (ctx-&gt;log.filename,</div><div class='del'>-                               O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR);</div><div class='del'>-                if (fd &lt; 0) {</div><div class='del'>-                        gf_msg ("logrotate", GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                                "failed to open logfile");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                sys_close (fd);</div><div class='del'>-</div><div class='del'>-                new_logfile = fopen (ctx-&gt;log.filename, "a");</div><div class='del'>-                if (!new_logfile) {</div><div class='del'>-                        gf_msg ("logrotate", GF_LOG_CRITICAL, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                                "failed to open logfile %s",</div><div class='del'>-                                ctx-&gt;log.filename);</div><div class='del'>-                        goto log;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (ctx-&gt;log.logfile)</div><div class='del'>-                                fclose (ctx-&gt;log.logfile);</div><div class='del'>-</div><div class='del'>-                        ctx-&gt;log.gf_log_logfile =</div><div class='del'>-                                ctx-&gt;log.logfile = new_logfile;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-</div><div class='add'>+        new_logfile = fopen(ctx-&gt;log.filename, "a");</div><div class='add'>+        if (!new_logfile) {</div><div class='add'>+            gf_msg("logrotate", GF_LOG_CRITICAL, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "failed to open logfile %s", ctx-&gt;log.filename);</div><div class='add'>+            goto log;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-log:</div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto out;</div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;str1, "[%s] %s [%s:%d:%s] %d-%s: ",</div><div class='del'>-                           timestr, level_strings[level],</div><div class='del'>-                           basename, line, function,</div><div class='del'>-                           ((this-&gt;graph)?this-&gt;graph-&gt;id:0), domain);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+        {</div><div class='add'>+            if (ctx-&gt;log.logfile)</div><div class='add'>+                fclose(ctx-&gt;log.logfile);</div><div class='ctx'> </div><div class='del'>-        ret = vasprintf (&amp;str2, fmt, ap);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto err;</div><div class='add'>+            ctx-&gt;log.gf_log_logfile = ctx-&gt;log.logfile = new_logfile;</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        va_end (ap);</div><div class='del'>-</div><div class='del'>-        len = strlen (str1);</div><div class='del'>-        msg = GF_MALLOC (len + strlen (str2) + 1, gf_common_mt_char);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                goto err;</div><div class='add'>+log:</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto out;</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr + strlen(timestr), sizeof timestr - strlen(timestr),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;str1, "[%s] %s [%s:%d:%s] %d-%s: ", timestr,</div><div class='add'>+                      level_strings[level], basename, line, function,</div><div class='add'>+                      ((this-&gt;graph) ? this-&gt;graph-&gt;id : 0), domain);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = vasprintf(&amp;str2, fmt, ap);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    va_end(ap);</div><div class='add'>+</div><div class='add'>+    len = strlen(str1);</div><div class='add'>+    msg = GF_MALLOC(len + strlen(str2) + 1, gf_common_mt_char);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(msg, str1);</div><div class='add'>+    strcpy(msg + len, str2);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;log.logfile) {</div><div class='add'>+            fprintf(ctx-&gt;log.logfile, "%s\n", msg);</div><div class='add'>+            fflush(ctx-&gt;log.logfile);</div><div class='add'>+        } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='add'>+            fprintf(stderr, "%s\n", msg);</div><div class='add'>+            fflush(stderr);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        strcpy (msg, str1);</div><div class='del'>-        strcpy (msg + len, str2);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='del'>-        {</div><div class='del'>-</div><div class='del'>-                if (ctx-&gt;log.logfile) {</div><div class='del'>-                        fprintf (ctx-&gt;log.logfile, "%s\n", msg);</div><div class='del'>-                        fflush (ctx-&gt;log.logfile);</div><div class='del'>-                } else if (ctx-&gt;log.loglevel &gt;= level) {</div><div class='del'>-                        fprintf (stderr, "%s\n", msg);</div><div class='del'>-                        fflush (stderr);</div><div class='del'>-                }</div><div class='del'>-</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                /* We want only serious log in 'syslog', not our debug</div><div class='del'>-                   and trace logs */</div><div class='del'>-                if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='del'>-                    (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='del'>-                        syslog ((level-1), "%s\n", msg);</div><div class='add'>+        /* We want only serious log in 'syslog', not our debug</div><div class='add'>+           and trace logs */</div><div class='add'>+        if (ctx-&gt;log.gf_log_syslog &amp;&amp; level &amp;&amp;</div><div class='add'>+            (level &lt;= ctx-&gt;log.sys_log_level))</div><div class='add'>+            syslog((level - 1), "%s\n", msg);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;log.logfile_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;log.logfile_mutex);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (msg);</div><div class='add'>+    GF_FREE(msg);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (str1);</div><div class='add'>+    GF_FREE(str1);</div><div class='ctx'> </div><div class='del'>-        FREE (str2);</div><div class='add'>+    FREE(str2);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        va_end (ap);</div><div class='del'>-        return (0);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    return (0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_log_eh (const char *function, const char *fmt, ...)</div><div class='add'>+_gf_log_eh(const char *function, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        int          ret   = -1;</div><div class='del'>-        va_list      ap;</div><div class='del'>-        char         *str1 = NULL;</div><div class='del'>-        char         *str2 = NULL;</div><div class='del'>-        char         *msg  = NULL;</div><div class='del'>-        xlator_t     *this = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;str1, "[%d] %s: ",</div><div class='del'>-                           ((this-&gt;graph)?this-&gt;graph-&gt;id:0),</div><div class='del'>-                           function);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    va_list ap;</div><div class='add'>+    char *str1 = NULL;</div><div class='add'>+    char *str2 = NULL;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        ret = vasprintf (&amp;str2, fmt, ap);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;str1, "[%d] %s: ", ((this-&gt;graph) ? this-&gt;graph-&gt;id : 0),</div><div class='add'>+                      function);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        msg = GF_MALLOC (strlen (str1) + strlen (str2) + 1, gf_common_mt_char);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+</div><div class='add'>+    ret = vasprintf(&amp;str2, fmt, ap);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        strcpy (msg, str1);</div><div class='del'>-        strcat (msg, str2);</div><div class='add'>+    msg = GF_MALLOC(strlen(str1) + strlen(str2) + 1, gf_common_mt_char);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = eh_save_history (this-&gt;history, msg);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                GF_FREE (msg);</div><div class='add'>+    strcpy(msg, str1);</div><div class='add'>+    strcat(msg, str2);</div><div class='add'>+</div><div class='add'>+    ret = eh_save_history(this-&gt;history, msg);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        GF_FREE(msg);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (str1);</div><div class='add'>+    GF_FREE(str1);</div><div class='ctx'> </div><div class='del'>-        /* Use FREE instead of GF_FREE since str2 was allocated by vasprintf */</div><div class='del'>-        if (str2)</div><div class='del'>-                FREE (str2);</div><div class='add'>+    /* Use FREE instead of GF_FREE since str2 was allocated by vasprintf */</div><div class='add'>+    if (str2)</div><div class='add'>+        FREE(str2);</div><div class='ctx'> </div><div class='del'>-        va_end (ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cmd_log_init (const char *filename)</div><div class='add'>+gf_cmd_log_init(const char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         fd   = -1;</div><div class='del'>-        xlator_t   *this = NULL;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        ctx  = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!filename){</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_CRITICAL, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "gf_cmd_log_init: no filename specified\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;log.cmd_log_filename = gf_strdup (filename);</div><div class='del'>-        if (!ctx-&gt;log.cmd_log_filename) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        /* close and reopen cmdlogfile for log rotate*/</div><div class='del'>-        if (ctx-&gt;log.cmdlogfile) {</div><div class='del'>-                fclose (ctx-&gt;log.cmdlogfile);</div><div class='del'>-                ctx-&gt;log.cmdlogfile = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = sys_open (ctx-&gt;log.cmd_log_filename,</div><div class='del'>-                       O_CREAT | O_WRONLY | O_APPEND, S_IRUSR | S_IWUSR);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                        LG_MSG_FILE_OP_FAILED, "failed to open cmd_log_file");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx-&gt;log.cmdlogfile = fdopen (fd, "a");</div><div class='del'>-        if (!ctx-&gt;log.cmdlogfile){</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                        LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "gf_cmd_log_init: failed to open logfile \"%s\" "</div><div class='del'>-                        "\n", ctx-&gt;log.cmd_log_filename);</div><div class='del'>-                sys_close (fd);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!filename) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "gf_cmd_log_init: no filename specified\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;log.cmd_log_filename = gf_strdup(filename);</div><div class='add'>+    if (!ctx-&gt;log.cmd_log_filename) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    /* close and reopen cmdlogfile for log rotate*/</div><div class='add'>+    if (ctx-&gt;log.cmdlogfile) {</div><div class='add'>+        fclose(ctx-&gt;log.cmdlogfile);</div><div class='add'>+        ctx-&gt;log.cmdlogfile = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = sys_open(ctx-&gt;log.cmd_log_filename, O_CREAT | O_WRONLY | O_APPEND,</div><div class='add'>+                  S_IRUSR | S_IWUSR);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "failed to open cmd_log_file");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx-&gt;log.cmdlogfile = fdopen(fd, "a");</div><div class='add'>+    if (!ctx-&gt;log.cmdlogfile) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "gf_cmd_log_init: failed to open logfile \"%s\" "</div><div class='add'>+               "\n",</div><div class='add'>+               ctx-&gt;log.cmd_log_filename);</div><div class='add'>+        sys_close(fd);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cmd_log (const char *domain, const char *fmt, ...)</div><div class='add'>+gf_cmd_log(const char *domain, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list        ap;</div><div class='del'>-        char           timestr[64];</div><div class='del'>-        struct timeval tv = {0,};</div><div class='del'>-        char          *str1 = NULL;</div><div class='del'>-        char          *str2 = NULL;</div><div class='del'>-        char          *msg  = NULL;</div><div class='del'>-        size_t         len  = 0;</div><div class='del'>-        int            ret  = 0;</div><div class='del'>-        int            fd   = -1;</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        ctx = THIS-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!ctx-&gt;log.cmdlogfile)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (!domain || !fmt) {</div><div class='del'>-                gf_msg_trace ("glusterd", 0,</div><div class='del'>-                        "logging: invalid argument\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    va_list ap;</div><div class='add'>+    char timestr[64];</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *str1 = NULL;</div><div class='add'>+    char *str2 = NULL;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = THIS-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!ctx-&gt;log.cmdlogfile)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!domain || !fmt) {</div><div class='add'>+        gf_msg_trace("glusterd", 0, "logging: invalid argument\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+    snprintf(timestr + strlen(timestr), GF_LOG_TIMESTR_SIZE - strlen(timestr),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;str1, "[%s] %s : ", timestr, domain);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = vasprintf(&amp;str2, fmt, ap);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    va_end(ap);</div><div class='add'>+</div><div class='add'>+    len = strlen(str1);</div><div class='add'>+    msg = GF_MALLOC(len + strlen(str2) + 1, gf_common_mt_char);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(msg, str1);</div><div class='add'>+    strcpy(msg + len, str2);</div><div class='add'>+</div><div class='add'>+    /* close and reopen cmdlogfile fd for in case of log rotate*/</div><div class='add'>+    if (ctx-&gt;log.cmd_history_logrotate) {</div><div class='add'>+        ctx-&gt;log.cmd_history_logrotate = 0;</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-        snprintf (timestr + strlen (timestr),</div><div class='del'>-                  GF_LOG_TIMESTR_SIZE - strlen (timestr),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;str1, "[%s] %s : ",</div><div class='del'>-                           timestr, domain);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = vasprintf (&amp;str2, fmt, ap);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto out;</div><div class='add'>+        if (ctx-&gt;log.cmdlogfile) {</div><div class='add'>+            fclose(ctx-&gt;log.cmdlogfile);</div><div class='add'>+            ctx-&gt;log.cmdlogfile = NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        va_end (ap);</div><div class='del'>-</div><div class='del'>-        len = strlen (str1);</div><div class='del'>-        msg = GF_MALLOC (len + strlen (str2) + 1, gf_common_mt_char);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                goto out;</div><div class='add'>+        fd = sys_open(ctx-&gt;log.cmd_log_filename, O_CREAT | O_WRONLY | O_APPEND,</div><div class='add'>+                      S_IRUSR | S_IWUSR);</div><div class='add'>+        if (fd &lt; 0) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_CRITICAL, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "failed to open "</div><div class='add'>+                   "logfile \"%s\" \n",</div><div class='add'>+                   ctx-&gt;log.cmd_log_filename);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        strcpy (msg, str1);</div><div class='del'>-        strcpy (msg + len, str2);</div><div class='del'>-</div><div class='del'>-        /* close and reopen cmdlogfile fd for in case of log rotate*/</div><div class='del'>-        if (ctx-&gt;log.cmd_history_logrotate) {</div><div class='del'>-                ctx-&gt;log.cmd_history_logrotate = 0;</div><div class='del'>-</div><div class='del'>-                if (ctx-&gt;log.cmdlogfile) {</div><div class='del'>-                        fclose (ctx-&gt;log.cmdlogfile);</div><div class='del'>-                        ctx-&gt;log.cmdlogfile = NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd = sys_open (ctx-&gt;log.cmd_log_filename,</div><div class='del'>-                               O_CREAT | O_WRONLY | O_APPEND,</div><div class='del'>-                               S_IRUSR | S_IWUSR);</div><div class='del'>-                if (fd &lt; 0) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED, "failed to open "</div><div class='del'>-                                "logfile \"%s\" \n", ctx-&gt;log.cmd_log_filename);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ctx-&gt;log.cmdlogfile = fdopen (fd, "a");</div><div class='del'>-                if (!ctx-&gt;log.cmdlogfile) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                                LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                                "failed to open logfile \"%s\""</div><div class='del'>-                                " \n", ctx-&gt;log.cmd_log_filename);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        sys_close (fd);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ctx-&gt;log.cmdlogfile = fdopen(fd, "a");</div><div class='add'>+        if (!ctx-&gt;log.cmdlogfile) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_CRITICAL, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "failed to open logfile \"%s\""</div><div class='add'>+                   " \n",</div><div class='add'>+                   ctx-&gt;log.cmd_log_filename);</div><div class='add'>+            ret = -1;</div><div class='add'>+            sys_close(fd);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fprintf (ctx-&gt;log.cmdlogfile, "%s\n", msg);</div><div class='del'>-        fflush (ctx-&gt;log.cmdlogfile);</div><div class='add'>+    fprintf(ctx-&gt;log.cmdlogfile, "%s\n", msg);</div><div class='add'>+    fflush(ctx-&gt;log.cmdlogfile);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (msg);</div><div class='add'>+    GF_FREE(msg);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (str1);</div><div class='add'>+    GF_FREE(str1);</div><div class='ctx'> </div><div class='del'>-        FREE (str2);</div><div class='add'>+    FREE(str2);</div><div class='ctx'> </div><div class='del'>-        va_end (ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_do_slog_format (const char *event, va_list inp, char **msg) {</div><div class='del'>-        va_list                    valist_tmp;</div><div class='del'>-        int                        i = 0;</div><div class='del'>-        int                        j = 0;</div><div class='del'>-        int                        k = 0;</div><div class='del'>-        int                        ret = 0;</div><div class='del'>-        char                      *fmt = NULL;</div><div class='del'>-        char                      *buffer = NULL;</div><div class='del'>-        int                        num_format_chars = 0;</div><div class='del'>-        char                       format_char = '%';</div><div class='del'>-        char                      *tmp1 = NULL;</div><div class='del'>-        char                      *tmp2 = NULL;</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;tmp2, "%s", event);</div><div class='del'>-        if (ret == -1)</div><div class='add'>+_do_slog_format(const char *event, va_list inp, char **msg)</div><div class='add'>+{</div><div class='add'>+    va_list valist_tmp;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int k = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *fmt = NULL;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    int num_format_chars = 0;</div><div class='add'>+    char format_char = '%';</div><div class='add'>+    char *tmp1 = NULL;</div><div class='add'>+    char *tmp2 = NULL;</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;tmp2, "%s", event);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Hardcoded value for max key value pairs, exits early */</div><div class='add'>+    /* from loop if found NULL */</div><div class='add'>+    for (i = 0; i &lt; GF_MAX_SLOG_PAIR_COUNT; i++) {</div><div class='add'>+        fmt = va_arg(inp, char *);</div><div class='add'>+        if (fmt == NULL) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* Get number of times % is used in input for formatting, */</div><div class='add'>+        /* this count will be used to skip those many args from the */</div><div class='add'>+        /* main list and will be used to format inner format */</div><div class='add'>+        num_format_chars = 0;</div><div class='add'>+        for (k = 0; fmt[k] != '\0'; k++) {</div><div class='add'>+            /* If %% is used then that is escaped */</div><div class='add'>+            if (fmt[k] == format_char &amp;&amp; fmt[k + 1] == format_char) {</div><div class='add'>+                k++;</div><div class='add'>+            } else if (fmt[k] == format_char) {</div><div class='add'>+                num_format_chars++;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        tmp1 = gf_strdup(tmp2);</div><div class='add'>+        if (!tmp1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        GF_FREE(tmp2);</div><div class='add'>+        tmp2 = NULL;</div><div class='add'>+</div><div class='add'>+        if (num_format_chars &gt; 0) {</div><div class='add'>+            /* Make separate valist and format the string */</div><div class='add'>+            va_copy(valist_tmp, inp);</div><div class='add'>+            ret = gf_vasprintf(&amp;buffer, fmt, valist_tmp);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                va_end(valist_tmp);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            va_end(valist_tmp);</div><div class='ctx'> </div><div class='del'>-        /* Hardcoded value for max key value pairs, exits early */</div><div class='del'>-        /* from loop if found NULL */</div><div class='del'>-        for (i = 0; i &lt; GF_MAX_SLOG_PAIR_COUNT; i++) {</div><div class='del'>-                fmt = va_arg (inp, char*);</div><div class='del'>-                if (fmt == NULL) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Get number of times % is used in input for formatting, */</div><div class='del'>-                /* this count will be used to skip those many args from the */</div><div class='del'>-                /* main list and will be used to format inner format */</div><div class='del'>-                num_format_chars = 0;</div><div class='del'>-                for (k = 0; fmt[k] != '\0'; k++) {</div><div class='del'>-                        /* If %% is used then that is escaped */</div><div class='del'>-                        if (fmt[k] == format_char &amp;&amp; fmt[k+1] == format_char) {</div><div class='del'>-                                k++;</div><div class='del'>-                        } else if (fmt[k] == format_char) {</div><div class='del'>-                                num_format_chars++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                tmp1 = gf_strdup (tmp2);</div><div class='del'>-                if (!tmp1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            for (j = 0; j &lt; num_format_chars; j++) {</div><div class='add'>+                /* Skip the va_arg value since these values</div><div class='add'>+                   are already used for internal formatting */</div><div class='add'>+                (void)va_arg(inp, void *);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (tmp2);</div><div class='del'>-                tmp2 = NULL;</div><div class='del'>-</div><div class='del'>-                if (num_format_chars &gt; 0) {</div><div class='del'>-                        /* Make separate valist and format the string */</div><div class='del'>-                        va_copy (valist_tmp, inp);</div><div class='del'>-                        ret = gf_vasprintf (&amp;buffer, fmt, valist_tmp);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                va_end (valist_tmp);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        va_end (valist_tmp);</div><div class='del'>-</div><div class='del'>-                        for (j = 0; j &lt; num_format_chars; j++) {</div><div class='del'>-                                /* Skip the va_arg value since these values</div><div class='del'>-                                   are already used for internal formatting */</div><div class='del'>-                                (void) va_arg (inp, void*);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = gf_asprintf (&amp;tmp2, "%s\t%s", tmp1, buffer);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        GF_FREE (buffer);</div><div class='del'>-                        buffer = NULL;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_asprintf (&amp;tmp2, "%s\t%s", tmp1, fmt);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = gf_asprintf(&amp;tmp2, "%s\t%s", tmp1, buffer);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                GF_FREE (tmp1);</div><div class='del'>-                tmp1 = NULL;</div><div class='add'>+            GF_FREE(buffer);</div><div class='add'>+            buffer = NULL;</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_asprintf(&amp;tmp2, "%s\t%s", tmp1, fmt);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        *msg = gf_strdup (tmp2);</div><div class='del'>-        if (!*msg)</div><div class='del'>-                ret = -1;</div><div class='add'>+        GF_FREE(tmp1);</div><div class='add'>+        tmp1 = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (buffer)</div><div class='del'>-                GF_FREE (buffer);</div><div class='add'>+    *msg = gf_strdup(tmp2);</div><div class='add'>+    if (!*msg)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (tmp1)</div><div class='del'>-                GF_FREE (tmp1);</div><div class='add'>+out:</div><div class='add'>+    if (buffer)</div><div class='add'>+        GF_FREE(buffer);</div><div class='ctx'> </div><div class='del'>-        if (tmp2)</div><div class='del'>-                GF_FREE (tmp2);</div><div class='add'>+    if (tmp1)</div><div class='add'>+        GF_FREE(tmp1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    if (tmp2)</div><div class='add'>+        GF_FREE(tmp2);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_smsg (const char *domain, const char *file, const char *function,</div><div class='del'>-          int32_t line, gf_loglevel_t level, int errnum, int trace,</div><div class='del'>-          uint64_t msgid, const char *event, ...)</div><div class='add'>+_gf_smsg(const char *domain, const char *file, const char *function,</div><div class='add'>+         int32_t line, gf_loglevel_t level, int errnum, int trace,</div><div class='add'>+         uint64_t msgid, const char *event, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list     valist;</div><div class='del'>-        char       *msg = NULL;</div><div class='del'>-        int         ret = 0;</div><div class='add'>+    va_list valist;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        va_start (valist, event);</div><div class='del'>-        ret = _do_slog_format (event, valist, &amp;msg);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    va_start(valist, event);</div><div class='add'>+    ret = _do_slog_format(event, valist, &amp;msg);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = _gf_msg (domain, file, function, line, level, errnum, trace,</div><div class='del'>-                       msgid, "%s", msg);</div><div class='add'>+    ret = _gf_msg(domain, file, function, line, level, errnum, trace, msgid,</div><div class='add'>+                  "%s", msg);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        va_end (valist);</div><div class='del'>-        if (msg)</div><div class='del'>-                GF_FREE (msg);</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    va_end(valist);</div><div class='add'>+    if (msg)</div><div class='add'>+        GF_FREE(msg);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_slog (const char *domain, const char *file, const char *function, int line,</div><div class='del'>-          gf_loglevel_t level, const char *event, ...)</div><div class='add'>+_gf_slog(const char *domain, const char *file, const char *function, int line,</div><div class='add'>+         gf_loglevel_t level, const char *event, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list      valist;</div><div class='del'>-        char        *msg = NULL;</div><div class='del'>-        int          ret = 0;</div><div class='add'>+    va_list valist;</div><div class='add'>+    char *msg = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        va_start (valist, event);</div><div class='del'>-        ret = _do_slog_format (event, valist, &amp;msg);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    va_start(valist, event);</div><div class='add'>+    ret = _do_slog_format(event, valist, &amp;msg);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = _gf_log (domain, file, function, line, level, "%s", msg);</div><div class='add'>+    ret = _gf_log(domain, file, function, line, level, "%s", msg);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        va_end (valist);</div><div class='del'>-        if (msg)</div><div class='del'>-                GF_FREE (msg);</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    va_end(valist);</div><div class='add'>+    if (msg)</div><div class='add'>+        GF_FREE(msg);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c<br/>index 4b140296b4f..cff96323867 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/mem-pool.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/mem-pool.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/mem-pool.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/mem-pool.c</a></div><div class='hunk'>@@ -18,528 +18,519 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_mem_acct_enable_set (void *data)</div><div class='add'>+gf_mem_acct_enable_set(void *data)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        REQUIRE(data != NULL);</div><div class='add'>+    REQUIRE(data != NULL);</div><div class='ctx'> </div><div class='del'>-        ctx = data;</div><div class='add'>+    ctx = data;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (ctx != NULL);</div><div class='add'>+    GF_ASSERT(ctx != NULL);</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;mem_acct_enable = 1;</div><div class='add'>+    ctx-&gt;mem_acct_enable = 1;</div><div class='ctx'> </div><div class='del'>-        ENSURE(1 == ctx-&gt;mem_acct_enable);</div><div class='add'>+    ENSURE(1 == ctx-&gt;mem_acct_enable);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_mem_set_acct_info (xlator_t *xl, char **alloc_ptr, size_t size,</div><div class='del'>-		      uint32_t type, const char *typestr)</div><div class='add'>+gf_mem_set_acct_info(xlator_t *xl, char **alloc_ptr, size_t size, uint32_t type,</div><div class='add'>+                     const char *typestr)</div><div class='ctx'> {</div><div class='add'>+    void *ptr = NULL;</div><div class='add'>+    struct mem_header *header = NULL;</div><div class='ctx'> </div><div class='del'>-        void              *ptr    = NULL;</div><div class='del'>-        struct mem_header *header = NULL;</div><div class='add'>+    if (!alloc_ptr)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!alloc_ptr)</div><div class='del'>-                return -1;</div><div class='add'>+    ptr = *alloc_ptr;</div><div class='ctx'> </div><div class='del'>-        ptr = *alloc_ptr;</div><div class='add'>+    GF_ASSERT(xl != NULL);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (xl != NULL);</div><div class='add'>+    GF_ASSERT(xl-&gt;mem_acct != NULL);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (xl-&gt;mem_acct != NULL);</div><div class='add'>+    GF_ASSERT(type &lt;= xl-&gt;mem_acct-&gt;num_types);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (type &lt;= xl-&gt;mem_acct-&gt;num_types);</div><div class='add'>+    LOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='add'>+    {</div><div class='add'>+        if (!xl-&gt;mem_acct-&gt;rec[type].typestr)</div><div class='add'>+            xl-&gt;mem_acct-&gt;rec[type].typestr = typestr;</div><div class='add'>+        xl-&gt;mem_acct-&gt;rec[type].size += size;</div><div class='add'>+        xl-&gt;mem_acct-&gt;rec[type].num_allocs++;</div><div class='add'>+        xl-&gt;mem_acct-&gt;rec[type].total_allocs++;</div><div class='add'>+        xl-&gt;mem_acct-&gt;rec[type].max_size = max(xl-&gt;mem_acct-&gt;rec[type].max_size,</div><div class='add'>+                                               xl-&gt;mem_acct-&gt;rec[type].size);</div><div class='add'>+        xl-&gt;mem_acct-&gt;rec[type].max_num_allocs = max(</div><div class='add'>+            xl-&gt;mem_acct-&gt;rec[type].max_num_allocs,</div><div class='add'>+            xl-&gt;mem_acct-&gt;rec[type].num_allocs);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='del'>-        {</div><div class='del'>-		if (!xl-&gt;mem_acct-&gt;rec[type].typestr)</div><div class='del'>-			xl-&gt;mem_acct-&gt;rec[type].typestr = typestr;</div><div class='del'>-                xl-&gt;mem_acct-&gt;rec[type].size += size;</div><div class='del'>-                xl-&gt;mem_acct-&gt;rec[type].num_allocs++;</div><div class='del'>-                xl-&gt;mem_acct-&gt;rec[type].total_allocs++;</div><div class='del'>-                xl-&gt;mem_acct-&gt;rec[type].max_size =</div><div class='del'>-                        max (xl-&gt;mem_acct-&gt;rec[type].max_size,</div><div class='del'>-                             xl-&gt;mem_acct-&gt;rec[type].size);</div><div class='del'>-                xl-&gt;mem_acct-&gt;rec[type].max_num_allocs =</div><div class='del'>-                        max (xl-&gt;mem_acct-&gt;rec[type].max_num_allocs,</div><div class='del'>-                             xl-&gt;mem_acct-&gt;rec[type].num_allocs);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='add'>+    GF_ATOMIC_INC(xl-&gt;mem_acct-&gt;refcnt);</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (xl-&gt;mem_acct-&gt;refcnt);</div><div class='del'>-</div><div class='del'>-        header = (struct mem_header *) ptr;</div><div class='del'>-        header-&gt;type = type;</div><div class='del'>-        header-&gt;size = size;</div><div class='del'>-        header-&gt;mem_acct = xl-&gt;mem_acct;</div><div class='del'>-        header-&gt;magic = GF_MEM_HEADER_MAGIC;</div><div class='add'>+    header = (struct mem_header *)ptr;</div><div class='add'>+    header-&gt;type = type;</div><div class='add'>+    header-&gt;size = size;</div><div class='add'>+    header-&gt;mem_acct = xl-&gt;mem_acct;</div><div class='add'>+    header-&gt;magic = GF_MEM_HEADER_MAGIC;</div><div class='ctx'> </div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-        INIT_LIST_HEAD(&amp;header-&gt;acct_list);</div><div class='del'>-        LOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='del'>-        {</div><div class='del'>-                list_add (&amp;header-&gt;acct_list,</div><div class='del'>-                          &amp;(xl-&gt;mem_acct-&gt;rec[type].obj_list));</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;header-&gt;acct_list);</div><div class='add'>+    LOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='add'>+    {</div><div class='add'>+        list_add(&amp;header-&gt;acct_list, &amp;(xl-&gt;mem_acct-&gt;rec[type].obj_list));</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;xl-&gt;mem_acct-&gt;rec[type].lock);</div><div class='ctx'> #endif</div><div class='del'>-        ptr += sizeof (struct mem_header);</div><div class='del'>-        /* data follows in this gap of 'size' bytes */</div><div class='del'>-        *(uint32_t *) (ptr + size) = GF_MEM_TRAILER_MAGIC;</div><div class='add'>+    ptr += sizeof(struct mem_header);</div><div class='add'>+    /* data follows in this gap of 'size' bytes */</div><div class='add'>+    *(uint32_t *)(ptr + size) = GF_MEM_TRAILER_MAGIC;</div><div class='ctx'> </div><div class='del'>-        *alloc_ptr = ptr;</div><div class='del'>-        return 0;</div><div class='add'>+    *alloc_ptr = ptr;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-__gf_calloc (size_t nmemb, size_t size, uint32_t type, const char *typestr)</div><div class='add'>+__gf_calloc(size_t nmemb, size_t size, uint32_t type, const char *typestr)</div><div class='ctx'> {</div><div class='del'>-        size_t          tot_size = 0;</div><div class='del'>-        size_t          req_size = 0;</div><div class='del'>-        char            *ptr = NULL;</div><div class='del'>-        xlator_t        *xl = NULL;</div><div class='add'>+    size_t tot_size = 0;</div><div class='add'>+    size_t req_size = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!THIS-&gt;ctx-&gt;mem_acct_enable)</div><div class='del'>-                return CALLOC (nmemb, size);</div><div class='add'>+    if (!THIS-&gt;ctx-&gt;mem_acct_enable)</div><div class='add'>+        return CALLOC(nmemb, size);</div><div class='ctx'> </div><div class='del'>-        xl = THIS;</div><div class='add'>+    xl = THIS;</div><div class='ctx'> </div><div class='del'>-        req_size = nmemb * size;</div><div class='del'>-        tot_size = req_size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE;</div><div class='add'>+    req_size = nmemb * size;</div><div class='add'>+    tot_size = req_size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE;</div><div class='ctx'> </div><div class='del'>-        ptr = calloc (1, tot_size);</div><div class='add'>+    ptr = calloc(1, tot_size);</div><div class='ctx'> </div><div class='del'>-        if (!ptr) {</div><div class='del'>-                gf_msg_nomem ("", GF_LOG_ALERT, tot_size);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        gf_mem_set_acct_info (xl, &amp;ptr, req_size, type, typestr);</div><div class='add'>+    if (!ptr) {</div><div class='add'>+        gf_msg_nomem("", GF_LOG_ALERT, tot_size);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_mem_set_acct_info(xl, &amp;ptr, req_size, type, typestr);</div><div class='ctx'> </div><div class='del'>-        return (void *)ptr;</div><div class='add'>+    return (void *)ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-__gf_malloc (size_t size, uint32_t type, const char *typestr)</div><div class='add'>+__gf_malloc(size_t size, uint32_t type, const char *typestr)</div><div class='ctx'> {</div><div class='del'>-        size_t          tot_size = 0;</div><div class='del'>-        char            *ptr = NULL;</div><div class='del'>-        xlator_t        *xl = NULL;</div><div class='add'>+    size_t tot_size = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!THIS-&gt;ctx-&gt;mem_acct_enable)</div><div class='del'>-                return MALLOC (size);</div><div class='add'>+    if (!THIS-&gt;ctx-&gt;mem_acct_enable)</div><div class='add'>+        return MALLOC(size);</div><div class='ctx'> </div><div class='del'>-        xl = THIS;</div><div class='add'>+    xl = THIS;</div><div class='ctx'> </div><div class='del'>-        tot_size = size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE;</div><div class='add'>+    tot_size = size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE;</div><div class='ctx'> </div><div class='del'>-        ptr = malloc (tot_size);</div><div class='del'>-        if (!ptr) {</div><div class='del'>-                gf_msg_nomem ("", GF_LOG_ALERT, tot_size);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        gf_mem_set_acct_info (xl, &amp;ptr, size, type, typestr);</div><div class='add'>+    ptr = malloc(tot_size);</div><div class='add'>+    if (!ptr) {</div><div class='add'>+        gf_msg_nomem("", GF_LOG_ALERT, tot_size);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_mem_set_acct_info(xl, &amp;ptr, size, type, typestr);</div><div class='ctx'> </div><div class='del'>-        return (void *)ptr;</div><div class='add'>+    return (void *)ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-__gf_realloc (void *ptr, size_t size)</div><div class='add'>+__gf_realloc(void *ptr, size_t size)</div><div class='ctx'> {</div><div class='del'>-        size_t             tot_size = 0;</div><div class='del'>-        char              *new_ptr;</div><div class='del'>-        struct mem_header *old_header = NULL;</div><div class='del'>-        struct mem_header *new_header = NULL;</div><div class='del'>-        struct mem_header  tmp_header;</div><div class='add'>+    size_t tot_size = 0;</div><div class='add'>+    char *new_ptr;</div><div class='add'>+    struct mem_header *old_header = NULL;</div><div class='add'>+    struct mem_header *new_header = NULL;</div><div class='add'>+    struct mem_header tmp_header;</div><div class='ctx'> </div><div class='del'>-        if (!THIS-&gt;ctx-&gt;mem_acct_enable)</div><div class='del'>-                return REALLOC (ptr, size);</div><div class='add'>+    if (!THIS-&gt;ctx-&gt;mem_acct_enable)</div><div class='add'>+        return REALLOC(ptr, size);</div><div class='ctx'> </div><div class='del'>-        REQUIRE(NULL != ptr);</div><div class='add'>+    REQUIRE(NULL != ptr);</div><div class='ctx'> </div><div class='del'>-        old_header = (struct mem_header *) (ptr - GF_MEM_HEADER_SIZE);</div><div class='del'>-        GF_ASSERT (old_header-&gt;magic == GF_MEM_HEADER_MAGIC);</div><div class='del'>-        tmp_header = *old_header;</div><div class='add'>+    old_header = (struct mem_header *)(ptr - GF_MEM_HEADER_SIZE);</div><div class='add'>+    GF_ASSERT(old_header-&gt;magic == GF_MEM_HEADER_MAGIC);</div><div class='add'>+    tmp_header = *old_header;</div><div class='ctx'> </div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-        int type = 0;</div><div class='del'>-        size_t copy_size = 0;</div><div class='del'>-</div><div class='del'>-        /* Making these changes for realloc is not straightforward. So</div><div class='del'>-         * I am simulating realloc using calloc and free</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        type = tmp_header.type;</div><div class='del'>-        new_ptr = __gf_calloc (1, size, type,</div><div class='del'>-                               tmp_header.mem_acct-&gt;rec[type].typestr);</div><div class='del'>-        if (new_ptr) {</div><div class='del'>-                copy_size = (size &gt; tmp_header.size) ? tmp_header.size : size;</div><div class='del'>-                memcpy (new_ptr, ptr, copy_size);</div><div class='del'>-                __gf_free (ptr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* This is not quite what the man page says should happen */</div><div class='del'>-        return new_ptr;</div><div class='add'>+    int type = 0;</div><div class='add'>+    size_t copy_size = 0;</div><div class='add'>+</div><div class='add'>+    /* Making these changes for realloc is not straightforward. So</div><div class='add'>+     * I am simulating realloc using calloc and free</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    type = tmp_header.type;</div><div class='add'>+    new_ptr = __gf_calloc(1, size, type,</div><div class='add'>+                          tmp_header.mem_acct-&gt;rec[type].typestr);</div><div class='add'>+    if (new_ptr) {</div><div class='add'>+        copy_size = (size &gt; tmp_header.size) ? tmp_header.size : size;</div><div class='add'>+        memcpy(new_ptr, ptr, copy_size);</div><div class='add'>+        __gf_free(ptr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is not quite what the man page says should happen */</div><div class='add'>+    return new_ptr;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        tot_size = size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE;</div><div class='del'>-        new_ptr = realloc (old_header, tot_size);</div><div class='del'>-        if (!new_ptr) {</div><div class='del'>-                gf_msg_nomem ("", GF_LOG_ALERT, tot_size);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * We used to pass (char **)&amp;ptr as the second</div><div class='del'>-         * argument after the value of realloc was saved</div><div class='del'>-         * in ptr, but the compiler warnings complained</div><div class='del'>-         * about the casting to and forth from void ** to</div><div class='del'>-         * char **.</div><div class='del'>-         * TBD: it would be nice to adjust the memory accounting info here,</div><div class='del'>-         * but calling gf_mem_set_acct_info here is wrong because it bumps</div><div class='del'>-         * up counts as though this is a new allocation - which it's not.</div><div class='del'>-         * The consequence of doing nothing here is only that the sizes will be</div><div class='del'>-         * wrong, but at least the counts won't be.</div><div class='del'>-        uint32_t           type = 0;</div><div class='del'>-        xlator_t          *xl = NULL;</div><div class='del'>-        type = header-&gt;type;</div><div class='del'>-        xl = (xlator_t *) header-&gt;xlator;</div><div class='del'>-        gf_mem_set_acct_info (xl, &amp;new_ptr, size, type, NULL);</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        new_header = (struct mem_header *) new_ptr;</div><div class='del'>-        *new_header = tmp_header;</div><div class='del'>-        new_header-&gt;size = size;</div><div class='del'>-</div><div class='del'>-        new_ptr += sizeof (struct mem_header);</div><div class='del'>-        /* data follows in this gap of 'size' bytes */</div><div class='del'>-        *(uint32_t *) (new_ptr + size) = GF_MEM_TRAILER_MAGIC;</div><div class='del'>-</div><div class='del'>-        return (void *)new_ptr;</div><div class='add'>+    tot_size = size + GF_MEM_HEADER_SIZE + GF_MEM_TRAILER_SIZE;</div><div class='add'>+    new_ptr = realloc(old_header, tot_size);</div><div class='add'>+    if (!new_ptr) {</div><div class='add'>+        gf_msg_nomem("", GF_LOG_ALERT, tot_size);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * We used to pass (char **)&amp;ptr as the second</div><div class='add'>+     * argument after the value of realloc was saved</div><div class='add'>+     * in ptr, but the compiler warnings complained</div><div class='add'>+     * about the casting to and forth from void ** to</div><div class='add'>+     * char **.</div><div class='add'>+     * TBD: it would be nice to adjust the memory accounting info here,</div><div class='add'>+     * but calling gf_mem_set_acct_info here is wrong because it bumps</div><div class='add'>+     * up counts as though this is a new allocation - which it's not.</div><div class='add'>+     * The consequence of doing nothing here is only that the sizes will be</div><div class='add'>+     * wrong, but at least the counts won't be.</div><div class='add'>+    uint32_t           type = 0;</div><div class='add'>+    xlator_t          *xl = NULL;</div><div class='add'>+    type = header-&gt;type;</div><div class='add'>+    xl = (xlator_t *) header-&gt;xlator;</div><div class='add'>+    gf_mem_set_acct_info (xl, &amp;new_ptr, size, type, NULL);</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    new_header = (struct mem_header *)new_ptr;</div><div class='add'>+    *new_header = tmp_header;</div><div class='add'>+    new_header-&gt;size = size;</div><div class='add'>+</div><div class='add'>+    new_ptr += sizeof(struct mem_header);</div><div class='add'>+    /* data follows in this gap of 'size' bytes */</div><div class='add'>+    *(uint32_t *)(new_ptr + size) = GF_MEM_TRAILER_MAGIC;</div><div class='add'>+</div><div class='add'>+    return (void *)new_ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_vasprintf (char **string_ptr, const char *format, va_list arg)</div><div class='add'>+gf_vasprintf(char **string_ptr, const char *format, va_list arg)</div><div class='ctx'> {</div><div class='del'>-        va_list arg_save;</div><div class='del'>-        char    *str = NULL;</div><div class='del'>-        int     size = 0;</div><div class='del'>-        int     rv = 0;</div><div class='del'>-</div><div class='del'>-        if (!string_ptr || !format)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        va_copy (arg_save, arg);</div><div class='del'>-</div><div class='del'>-        size = vsnprintf (NULL, 0, format, arg);</div><div class='del'>-        size++;</div><div class='del'>-        str = GF_MALLOC (size, gf_common_mt_asprintf);</div><div class='del'>-        if (str == NULL) {</div><div class='del'>-                /* log is done in GF_MALLOC itself */</div><div class='del'>-                va_end (arg_save);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        rv = vsnprintf (str, size, format, arg_save);</div><div class='del'>-</div><div class='del'>-        *string_ptr = str;</div><div class='del'>-        va_end (arg_save);</div><div class='del'>-        return (rv);</div><div class='add'>+    va_list arg_save;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    int size = 0;</div><div class='add'>+    int rv = 0;</div><div class='add'>+</div><div class='add'>+    if (!string_ptr || !format)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    va_copy(arg_save, arg);</div><div class='add'>+</div><div class='add'>+    size = vsnprintf(NULL, 0, format, arg);</div><div class='add'>+    size++;</div><div class='add'>+    str = GF_MALLOC(size, gf_common_mt_asprintf);</div><div class='add'>+    if (str == NULL) {</div><div class='add'>+        /* log is done in GF_MALLOC itself */</div><div class='add'>+        va_end(arg_save);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    rv = vsnprintf(str, size, format, arg_save);</div><div class='add'>+</div><div class='add'>+    *string_ptr = str;</div><div class='add'>+    va_end(arg_save);</div><div class='add'>+    return (rv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_asprintf (char **string_ptr, const char *format, ...)</div><div class='add'>+gf_asprintf(char **string_ptr, const char *format, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list arg;</div><div class='del'>-        int     rv = 0;</div><div class='add'>+    va_list arg;</div><div class='add'>+    int rv = 0;</div><div class='ctx'> </div><div class='del'>-        va_start (arg, format);</div><div class='del'>-        rv = gf_vasprintf (string_ptr, format, arg);</div><div class='del'>-        va_end (arg);</div><div class='add'>+    va_start(arg, format);</div><div class='add'>+    rv = gf_vasprintf(string_ptr, format, arg);</div><div class='add'>+    va_end(arg);</div><div class='ctx'> </div><div class='del'>-        return rv;</div><div class='add'>+    return rv;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifdef DEBUG</div><div class='ctx'> void</div><div class='del'>-__gf_mem_invalidate (void *ptr)</div><div class='add'>+__gf_mem_invalidate(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        struct mem_header *header = ptr;</div><div class='del'>-        void              *end    = NULL;</div><div class='del'>-</div><div class='del'>-        struct mem_invalid inval = {</div><div class='del'>-                .magic = GF_MEM_INVALID_MAGIC,</div><div class='del'>-                .mem_acct = header-&gt;mem_acct,</div><div class='del'>-                .type = header-&gt;type,</div><div class='del'>-                .size = header-&gt;size,</div><div class='del'>-                .baseaddr = ptr + GF_MEM_HEADER_SIZE,</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        /* calculate the last byte of the allocated area */</div><div class='del'>-        end = ptr + GF_MEM_HEADER_SIZE + inval.size + GF_MEM_TRAILER_SIZE;</div><div class='del'>-</div><div class='del'>-        /* overwrite the old mem_header */</div><div class='del'>-        memcpy (ptr, &amp;inval, sizeof (inval));</div><div class='del'>-        ptr += sizeof (inval);</div><div class='del'>-</div><div class='del'>-        /* zero out remaining (old) mem_header bytes) */</div><div class='del'>-        memset (ptr, 0x00, sizeof (*header) - sizeof (inval));</div><div class='del'>-        ptr += sizeof (*header) - sizeof (inval);</div><div class='del'>-</div><div class='del'>-        /* zero out the first byte of data */</div><div class='del'>-        *(uint32_t *)(ptr) = 0x00;</div><div class='del'>-        ptr += 1;</div><div class='del'>-</div><div class='del'>-        /* repeated writes of invalid structurein data area */</div><div class='del'>-        while ((ptr + (sizeof (inval))) &lt; (end - 1)) {</div><div class='del'>-                memcpy (ptr, &amp;inval, sizeof (inval));</div><div class='del'>-                ptr += sizeof (inval);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* fill out remaining data area with 0xff */</div><div class='del'>-        memset (ptr, 0xff, end - ptr);</div><div class='add'>+    struct mem_header *header = ptr;</div><div class='add'>+    void *end = NULL;</div><div class='add'>+</div><div class='add'>+    struct mem_invalid inval = {</div><div class='add'>+        .magic = GF_MEM_INVALID_MAGIC,</div><div class='add'>+        .mem_acct = header-&gt;mem_acct,</div><div class='add'>+        .type = header-&gt;type,</div><div class='add'>+        .size = header-&gt;size,</div><div class='add'>+        .baseaddr = ptr + GF_MEM_HEADER_SIZE,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* calculate the last byte of the allocated area */</div><div class='add'>+    end = ptr + GF_MEM_HEADER_SIZE + inval.size + GF_MEM_TRAILER_SIZE;</div><div class='add'>+</div><div class='add'>+    /* overwrite the old mem_header */</div><div class='add'>+    memcpy(ptr, &amp;inval, sizeof(inval));</div><div class='add'>+    ptr += sizeof(inval);</div><div class='add'>+</div><div class='add'>+    /* zero out remaining (old) mem_header bytes) */</div><div class='add'>+    memset(ptr, 0x00, sizeof(*header) - sizeof(inval));</div><div class='add'>+    ptr += sizeof(*header) - sizeof(inval);</div><div class='add'>+</div><div class='add'>+    /* zero out the first byte of data */</div><div class='add'>+    *(uint32_t *)(ptr) = 0x00;</div><div class='add'>+    ptr += 1;</div><div class='add'>+</div><div class='add'>+    /* repeated writes of invalid structurein data area */</div><div class='add'>+    while ((ptr + (sizeof(inval))) &lt; (end - 1)) {</div><div class='add'>+        memcpy(ptr, &amp;inval, sizeof(inval));</div><div class='add'>+        ptr += sizeof(inval);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* fill out remaining data area with 0xff */</div><div class='add'>+    memset(ptr, 0xff, end - ptr);</div><div class='ctx'> }</div><div class='ctx'> #endif /* DEBUG */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__gf_free (void *free_ptr)</div><div class='add'>+__gf_free(void *free_ptr)</div><div class='ctx'> {</div><div class='del'>-        void              *ptr = NULL;</div><div class='del'>-        struct mem_acct   *mem_acct;</div><div class='del'>-        struct mem_header *header = NULL;</div><div class='add'>+    void *ptr = NULL;</div><div class='add'>+    struct mem_acct *mem_acct;</div><div class='add'>+    struct mem_header *header = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!THIS-&gt;ctx-&gt;mem_acct_enable) {</div><div class='del'>-                FREE (free_ptr);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!free_ptr)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ptr = free_ptr - GF_MEM_HEADER_SIZE;</div><div class='del'>-        header = (struct mem_header *) ptr;</div><div class='del'>-</div><div class='del'>-        //Possible corruption, assert here</div><div class='del'>-        GF_ASSERT (GF_MEM_HEADER_MAGIC == header-&gt;magic);</div><div class='del'>-</div><div class='del'>-        mem_acct = header-&gt;mem_acct;</div><div class='del'>-        if (!mem_acct) {</div><div class='del'>-                goto free;</div><div class='del'>-        }</div><div class='add'>+    if (!THIS-&gt;ctx-&gt;mem_acct_enable) {</div><div class='add'>+        FREE(free_ptr);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        // This points to a memory overrun</div><div class='del'>-        GF_ASSERT (GF_MEM_TRAILER_MAGIC ==</div><div class='del'>-                *(uint32_t *)((char *)free_ptr + header-&gt;size));</div><div class='add'>+    if (!free_ptr)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;mem_acct-&gt;rec[header-&gt;type].lock);</div><div class='del'>-        {</div><div class='del'>-                mem_acct-&gt;rec[header-&gt;type].size -= header-&gt;size;</div><div class='del'>-                mem_acct-&gt;rec[header-&gt;type].num_allocs--;</div><div class='del'>-                /* If all the instances are freed up then ensure typestr is set</div><div class='del'>-                 * to NULL */</div><div class='del'>-                if (!mem_acct-&gt;rec[header-&gt;type].num_allocs)</div><div class='del'>-                        mem_acct-&gt;rec[header-&gt;type].typestr = NULL;</div><div class='add'>+    ptr = free_ptr - GF_MEM_HEADER_SIZE;</div><div class='add'>+    header = (struct mem_header *)ptr;</div><div class='add'>+</div><div class='add'>+    // Possible corruption, assert here</div><div class='add'>+    GF_ASSERT(GF_MEM_HEADER_MAGIC == header-&gt;magic);</div><div class='add'>+</div><div class='add'>+    mem_acct = header-&gt;mem_acct;</div><div class='add'>+    if (!mem_acct) {</div><div class='add'>+        goto free;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // This points to a memory overrun</div><div class='add'>+    GF_ASSERT(GF_MEM_TRAILER_MAGIC ==</div><div class='add'>+              *(uint32_t *)((char *)free_ptr + header-&gt;size));</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;mem_acct-&gt;rec[header-&gt;type].lock);</div><div class='add'>+    {</div><div class='add'>+        mem_acct-&gt;rec[header-&gt;type].size -= header-&gt;size;</div><div class='add'>+        mem_acct-&gt;rec[header-&gt;type].num_allocs--;</div><div class='add'>+        /* If all the instances are freed up then ensure typestr is set</div><div class='add'>+         * to NULL */</div><div class='add'>+        if (!mem_acct-&gt;rec[header-&gt;type].num_allocs)</div><div class='add'>+            mem_acct-&gt;rec[header-&gt;type].typestr = NULL;</div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-                list_del (&amp;header-&gt;acct_list);</div><div class='add'>+        list_del(&amp;header-&gt;acct_list);</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;mem_acct-&gt;rec[header-&gt;type].lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;mem_acct-&gt;rec[header-&gt;type].lock);</div><div class='ctx'> </div><div class='del'>-        if (GF_ATOMIC_DEC (mem_acct-&gt;refcnt) == 0) {</div><div class='del'>-                FREE (mem_acct);</div><div class='del'>-        }</div><div class='add'>+    if (GF_ATOMIC_DEC(mem_acct-&gt;refcnt) == 0) {</div><div class='add'>+        FREE(mem_acct);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> free:</div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-        __gf_mem_invalidate (ptr);</div><div class='add'>+    __gf_mem_invalidate(ptr);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        FREE (ptr);</div><div class='add'>+    FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define POOL_SMALLEST   7       /* i.e. 128 */</div><div class='del'>-#define POOL_LARGEST    20      /* i.e. 1048576 */</div><div class='del'>-#define NPOOLS          (POOL_LARGEST - POOL_SMALLEST + 1)</div><div class='add'>+#define POOL_SMALLEST 7 /* i.e. 128 */</div><div class='add'>+#define POOL_LARGEST 20 /* i.e. 1048576 */</div><div class='add'>+#define NPOOLS (POOL_LARGEST - POOL_SMALLEST + 1)</div><div class='ctx'> </div><div class='del'>-static pthread_key_t            pool_key;</div><div class='del'>-static pthread_mutex_t          pool_lock       = PTHREAD_MUTEX_INITIALIZER;</div><div class='del'>-static struct list_head         pool_threads;</div><div class='del'>-static pthread_mutex_t          pool_free_lock  = PTHREAD_MUTEX_INITIALIZER;</div><div class='del'>-static struct list_head         pool_free_threads;</div><div class='del'>-static struct mem_pool_shared   pools[NPOOLS];</div><div class='del'>-static size_t                   pool_list_size;</div><div class='add'>+static pthread_key_t pool_key;</div><div class='add'>+static pthread_mutex_t pool_lock = PTHREAD_MUTEX_INITIALIZER;</div><div class='add'>+static struct list_head pool_threads;</div><div class='add'>+static pthread_mutex_t pool_free_lock = PTHREAD_MUTEX_INITIALIZER;</div><div class='add'>+static struct list_head pool_free_threads;</div><div class='add'>+static struct mem_pool_shared pools[NPOOLS];</div><div class='add'>+static size_t pool_list_size;</div><div class='ctx'> </div><div class='ctx'> #if !defined(GF_DISABLE_MEMPOOL)</div><div class='del'>-#define N_COLD_LISTS    1024</div><div class='add'>+#define N_COLD_LISTS 1024</div><div class='ctx'> #define POOL_SWEEP_SECS 30</div><div class='ctx'> </div><div class='del'>-static unsigned long            sweep_times;</div><div class='del'>-static unsigned long            sweep_usecs;</div><div class='del'>-static unsigned long            frees_to_system;</div><div class='add'>+static unsigned long sweep_times;</div><div class='add'>+static unsigned long sweep_usecs;</div><div class='add'>+static unsigned long frees_to_system;</div><div class='ctx'> </div><div class='ctx'> typedef struct {</div><div class='del'>-        struct list_head        death_row;</div><div class='del'>-        pooled_obj_hdr_t        *cold_lists[N_COLD_LISTS];</div><div class='del'>-        unsigned int            n_cold_lists;</div><div class='add'>+    struct list_head death_row;</div><div class='add'>+    pooled_obj_hdr_t *cold_lists[N_COLD_LISTS];</div><div class='add'>+    unsigned int n_cold_lists;</div><div class='ctx'> } sweep_state_t;</div><div class='ctx'> </div><div class='ctx'> enum init_state {</div><div class='del'>-        GF_MEMPOOL_INIT_NONE = 0,</div><div class='del'>-        GF_MEMPOOL_INIT_PREINIT,</div><div class='del'>-        GF_MEMPOOL_INIT_EARLY,</div><div class='del'>-        GF_MEMPOOL_INIT_LATE,</div><div class='del'>-        GF_MEMPOOL_INIT_DESTROY</div><div class='add'>+    GF_MEMPOOL_INIT_NONE = 0,</div><div class='add'>+    GF_MEMPOOL_INIT_PREINIT,</div><div class='add'>+    GF_MEMPOOL_INIT_EARLY,</div><div class='add'>+    GF_MEMPOOL_INIT_LATE,</div><div class='add'>+    GF_MEMPOOL_INIT_DESTROY</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static enum init_state  init_done       = GF_MEMPOOL_INIT_NONE;</div><div class='del'>-static pthread_mutex_t  init_mutex      = PTHREAD_MUTEX_INITIALIZER;</div><div class='del'>-static unsigned int     init_count      = 0;</div><div class='del'>-static pthread_t        sweeper_tid;</div><div class='del'>-</div><div class='add'>+static enum init_state init_done = GF_MEMPOOL_INIT_NONE;</div><div class='add'>+static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='add'>+static unsigned int init_count = 0;</div><div class='add'>+static pthread_t sweeper_tid;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-collect_garbage (sweep_state_t *state, per_thread_pool_list_t *pool_list)</div><div class='add'>+collect_garbage(sweep_state_t *state, per_thread_pool_list_t *pool_list)</div><div class='ctx'> {</div><div class='del'>-        unsigned int            i;</div><div class='del'>-        per_thread_pool_t       *pt_pool;</div><div class='add'>+    unsigned int i;</div><div class='add'>+    per_thread_pool_t *pt_pool;</div><div class='ctx'> </div><div class='del'>-        if (pool_list-&gt;poison) {</div><div class='del'>-                list_del (&amp;pool_list-&gt;thr_list);</div><div class='del'>-                list_add (&amp;pool_list-&gt;thr_list, &amp;state-&gt;death_row);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (pool_list-&gt;poison) {</div><div class='add'>+        list_del(&amp;pool_list-&gt;thr_list);</div><div class='add'>+        list_add(&amp;pool_list-&gt;thr_list, &amp;state-&gt;death_row);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (state-&gt;n_cold_lists &gt;= N_COLD_LISTS) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (state-&gt;n_cold_lists &gt;= N_COLD_LISTS) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) pthread_spin_lock (&amp;pool_list-&gt;lock);</div><div class='del'>-        for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='del'>-                pt_pool = &amp;pool_list-&gt;pools[i];</div><div class='del'>-                if (pt_pool-&gt;cold_list) {</div><div class='del'>-                        state-&gt;cold_lists[state-&gt;n_cold_lists++]</div><div class='del'>-                                = pt_pool-&gt;cold_list;</div><div class='del'>-                }</div><div class='del'>-                pt_pool-&gt;cold_list = pt_pool-&gt;hot_list;</div><div class='del'>-                pt_pool-&gt;hot_list = NULL;</div><div class='del'>-                if (state-&gt;n_cold_lists &gt;= N_COLD_LISTS) {</div><div class='del'>-                        /* We'll just catch up on a future pass. */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    (void)pthread_spin_lock(&amp;pool_list-&gt;lock);</div><div class='add'>+    for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='add'>+        pt_pool = &amp;pool_list-&gt;pools[i];</div><div class='add'>+        if (pt_pool-&gt;cold_list) {</div><div class='add'>+            state-&gt;cold_lists[state-&gt;n_cold_lists++] = pt_pool-&gt;cold_list;</div><div class='add'>+        }</div><div class='add'>+        pt_pool-&gt;cold_list = pt_pool-&gt;hot_list;</div><div class='add'>+        pt_pool-&gt;hot_list = NULL;</div><div class='add'>+        if (state-&gt;n_cold_lists &gt;= N_COLD_LISTS) {</div><div class='add'>+            /* We'll just catch up on a future pass. */</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        (void) pthread_spin_unlock (&amp;pool_list-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    (void)pthread_spin_unlock(&amp;pool_list-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-free_obj_list (pooled_obj_hdr_t *victim)</div><div class='add'>+free_obj_list(pooled_obj_hdr_t *victim)</div><div class='ctx'> {</div><div class='del'>-        pooled_obj_hdr_t        *next;</div><div class='del'>-</div><div class='del'>-        while (victim) {</div><div class='del'>-                next = victim-&gt;next;</div><div class='del'>-                free (victim);</div><div class='del'>-                victim = next;</div><div class='del'>-                ++frees_to_system;</div><div class='del'>-        }</div><div class='add'>+    pooled_obj_hdr_t *next;</div><div class='add'>+</div><div class='add'>+    while (victim) {</div><div class='add'>+        next = victim-&gt;next;</div><div class='add'>+        free(victim);</div><div class='add'>+        victim = next;</div><div class='add'>+        ++frees_to_system;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-pool_sweeper (void *arg)</div><div class='add'>+pool_sweeper(void *arg)</div><div class='ctx'> {</div><div class='del'>-        sweep_state_t           state;</div><div class='del'>-        per_thread_pool_list_t  *pool_list;</div><div class='del'>-        per_thread_pool_list_t  *next_pl;</div><div class='del'>-        per_thread_pool_t       *pt_pool;</div><div class='del'>-        unsigned int            i;</div><div class='del'>-        struct timeval          begin_time;</div><div class='del'>-        struct timeval          end_time;</div><div class='del'>-        struct timeval          elapsed;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * This is all a bit inelegant, but the point is to avoid doing</div><div class='del'>-         * expensive things (like freeing thousands of objects) while holding a</div><div class='del'>-         * global lock.  Thus, we split each iteration into three passes, with</div><div class='del'>-         * only the first and fastest holding the lock.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                sleep (POOL_SWEEP_SECS);</div><div class='del'>-                (void) pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL);</div><div class='del'>-                INIT_LIST_HEAD (&amp;state.death_row);</div><div class='del'>-                state.n_cold_lists = 0;</div><div class='del'>-</div><div class='del'>-                /* First pass: collect stuff that needs our attention. */</div><div class='del'>-                (void) gettimeofday (&amp;begin_time, NULL);</div><div class='del'>-                (void) pthread_mutex_lock (&amp;pool_lock);</div><div class='del'>-                list_for_each_entry_safe (pool_list, next_pl,</div><div class='del'>-                                          &amp;pool_threads, thr_list) {</div><div class='del'>-                        collect_garbage (&amp;state, pool_list);</div><div class='del'>-                }</div><div class='del'>-                (void) pthread_mutex_unlock (&amp;pool_lock);</div><div class='del'>-                (void) gettimeofday (&amp;end_time, NULL);</div><div class='del'>-                timersub (&amp;end_time, &amp;begin_time, &amp;elapsed);</div><div class='del'>-                sweep_usecs += elapsed.tv_sec * 1000000 + elapsed.tv_usec;</div><div class='del'>-                sweep_times += 1;</div><div class='del'>-</div><div class='del'>-                /* Second pass: free dead pools. */</div><div class='del'>-                (void) pthread_mutex_lock (&amp;pool_free_lock);</div><div class='del'>-                list_for_each_entry_safe (pool_list, next_pl,</div><div class='del'>-                                          &amp;state.death_row, thr_list) {</div><div class='del'>-                        for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='del'>-                                pt_pool = &amp;pool_list-&gt;pools[i];</div><div class='del'>-                                free_obj_list (pt_pool-&gt;cold_list);</div><div class='del'>-                                free_obj_list (pt_pool-&gt;hot_list);</div><div class='del'>-                                pt_pool-&gt;hot_list = pt_pool-&gt;cold_list = NULL;</div><div class='del'>-                        }</div><div class='del'>-                        list_del (&amp;pool_list-&gt;thr_list);</div><div class='del'>-                        list_add (&amp;pool_list-&gt;thr_list, &amp;pool_free_threads);</div><div class='del'>-                }</div><div class='del'>-                (void) pthread_mutex_unlock (&amp;pool_free_lock);</div><div class='add'>+    sweep_state_t state;</div><div class='add'>+    per_thread_pool_list_t *pool_list;</div><div class='add'>+    per_thread_pool_list_t *next_pl;</div><div class='add'>+    per_thread_pool_t *pt_pool;</div><div class='add'>+    unsigned int i;</div><div class='add'>+    struct timeval begin_time;</div><div class='add'>+    struct timeval end_time;</div><div class='add'>+    struct timeval elapsed;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * This is all a bit inelegant, but the point is to avoid doing</div><div class='add'>+     * expensive things (like freeing thousands of objects) while holding a</div><div class='add'>+     * global lock.  Thus, we split each iteration into three passes, with</div><div class='add'>+     * only the first and fastest holding the lock.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        sleep(POOL_SWEEP_SECS);</div><div class='add'>+        (void)pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);</div><div class='add'>+        INIT_LIST_HEAD(&amp;state.death_row);</div><div class='add'>+        state.n_cold_lists = 0;</div><div class='add'>+</div><div class='add'>+        /* First pass: collect stuff that needs our attention. */</div><div class='add'>+        (void)gettimeofday(&amp;begin_time, NULL);</div><div class='add'>+        (void)pthread_mutex_lock(&amp;pool_lock);</div><div class='add'>+        list_for_each_entry_safe(pool_list, next_pl, &amp;pool_threads, thr_list)</div><div class='add'>+        {</div><div class='add'>+            collect_garbage(&amp;state, pool_list);</div><div class='add'>+        }</div><div class='add'>+        (void)pthread_mutex_unlock(&amp;pool_lock);</div><div class='add'>+        (void)gettimeofday(&amp;end_time, NULL);</div><div class='add'>+        timersub(&amp;end_time, &amp;begin_time, &amp;elapsed);</div><div class='add'>+        sweep_usecs += elapsed.tv_sec * 1000000 + elapsed.tv_usec;</div><div class='add'>+        sweep_times += 1;</div><div class='ctx'> </div><div class='del'>-                /* Third pass: free cold objects from live pools. */</div><div class='del'>-                for (i = 0; i &lt; state.n_cold_lists; ++i) {</div><div class='del'>-                        free_obj_list (state.cold_lists[i]);</div><div class='del'>-                }</div><div class='del'>-                (void) pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);</div><div class='add'>+        /* Second pass: free dead pools. */</div><div class='add'>+        (void)pthread_mutex_lock(&amp;pool_free_lock);</div><div class='add'>+        list_for_each_entry_safe(pool_list, next_pl, &amp;state.death_row, thr_list)</div><div class='add'>+        {</div><div class='add'>+            for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='add'>+                pt_pool = &amp;pool_list-&gt;pools[i];</div><div class='add'>+                free_obj_list(pt_pool-&gt;cold_list);</div><div class='add'>+                free_obj_list(pt_pool-&gt;hot_list);</div><div class='add'>+                pt_pool-&gt;hot_list = pt_pool-&gt;cold_list = NULL;</div><div class='add'>+            }</div><div class='add'>+            list_del(&amp;pool_list-&gt;thr_list);</div><div class='add'>+            list_add(&amp;pool_list-&gt;thr_list, &amp;pool_free_threads);</div><div class='ctx'>         }</div><div class='del'>-}</div><div class='add'>+        (void)pthread_mutex_unlock(&amp;pool_free_lock);</div><div class='ctx'> </div><div class='add'>+        /* Third pass: free cold objects from live pools. */</div><div class='add'>+        for (i = 0; i &lt; state.n_cold_lists; ++i) {</div><div class='add'>+            free_obj_list(state.cold_lists[i]);</div><div class='add'>+        }</div><div class='add'>+        (void)pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pool_destructor (void *arg)</div><div class='add'>+pool_destructor(void *arg)</div><div class='ctx'> {</div><div class='del'>-        per_thread_pool_list_t  *pool_list      = arg;</div><div class='add'>+    per_thread_pool_list_t *pool_list = arg;</div><div class='ctx'> </div><div class='del'>-        /* The pool-sweeper thread will take it from here. */</div><div class='del'>-        pool_list-&gt;poison = 1;</div><div class='add'>+    /* The pool-sweeper thread will take it from here. */</div><div class='add'>+    pool_list-&gt;poison = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static __attribute__((constructor)) void</div><div class='del'>-mem_pools_preinit (void)</div><div class='add'>+mem_pools_preinit(void)</div><div class='ctx'> {</div><div class='del'>-        unsigned int    i;</div><div class='add'>+    unsigned int i;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;pool_threads);</div><div class='del'>-        INIT_LIST_HEAD (&amp;pool_free_threads);</div><div class='add'>+    INIT_LIST_HEAD(&amp;pool_threads);</div><div class='add'>+    INIT_LIST_HEAD(&amp;pool_free_threads);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='del'>-                pools[i].power_of_two = POOL_SMALLEST + i;</div><div class='add'>+    for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='add'>+        pools[i].power_of_two = POOL_SMALLEST + i;</div><div class='ctx'> </div><div class='del'>-                GF_ATOMIC_INIT (pools[i].allocs_hot, 0);</div><div class='del'>-                GF_ATOMIC_INIT (pools[i].allocs_cold, 0);</div><div class='del'>-                GF_ATOMIC_INIT (pools[i].allocs_stdc, 0);</div><div class='del'>-                GF_ATOMIC_INIT (pools[i].frees_to_list, 0);</div><div class='del'>-        }</div><div class='add'>+        GF_ATOMIC_INIT(pools[i].allocs_hot, 0);</div><div class='add'>+        GF_ATOMIC_INIT(pools[i].allocs_cold, 0);</div><div class='add'>+        GF_ATOMIC_INIT(pools[i].allocs_stdc, 0);</div><div class='add'>+        GF_ATOMIC_INIT(pools[i].frees_to_list, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pool_list_size = sizeof (per_thread_pool_list_t)</div><div class='del'>-                       + sizeof (per_thread_pool_t) * (NPOOLS - 1);</div><div class='add'>+    pool_list_size = sizeof(per_thread_pool_list_t) +</div><div class='add'>+                     sizeof(per_thread_pool_t) * (NPOOLS - 1);</div><div class='ctx'> </div><div class='del'>-        init_done = GF_MEMPOOL_INIT_PREINIT;</div><div class='add'>+    init_done = GF_MEMPOOL_INIT_PREINIT;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Use mem_pools_init_early() function for basic initialization. There will be</div><div class='hunk'>@@ -547,358 +538,365 @@ mem_pools_preinit (void)</div><div class='ctx'>  * been called. Calling mem_get() will be possible after this function has</div><div class='ctx'>  * setup the basic structures. */</div><div class='ctx'> void</div><div class='del'>-mem_pools_init_early (void)</div><div class='add'>+mem_pools_init_early(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;init_mutex);</div><div class='del'>-        /* Use a pthread_key destructor to clean up when a thread exits.</div><div class='del'>-         *</div><div class='del'>-         * We won't increase init_count here, that is only done when the</div><div class='del'>-         * pool_sweeper thread is started too.</div><div class='del'>-         */</div><div class='del'>-        if (init_done == GF_MEMPOOL_INIT_PREINIT ||</div><div class='del'>-            init_done == GF_MEMPOOL_INIT_DESTROY) {</div><div class='del'>-                /* key has not been created yet */</div><div class='del'>-                if (pthread_key_create (&amp;pool_key, pool_destructor) != 0) {</div><div class='del'>-                        gf_log ("mem-pool", GF_LOG_CRITICAL,</div><div class='del'>-                                "failed to initialize mem-pool key");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                init_done = GF_MEMPOOL_INIT_EARLY;</div><div class='del'>-        } else {</div><div class='del'>-                gf_log ("mem-pool", GF_LOG_CRITICAL,</div><div class='del'>-                        "incorrect order of mem-pool initialization "</div><div class='del'>-                        "(init_done=%d)", init_done);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_unlock (&amp;init_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;init_mutex);</div><div class='add'>+    /* Use a pthread_key destructor to clean up when a thread exits.</div><div class='add'>+     *</div><div class='add'>+     * We won't increase init_count here, that is only done when the</div><div class='add'>+     * pool_sweeper thread is started too.</div><div class='add'>+     */</div><div class='add'>+    if (init_done == GF_MEMPOOL_INIT_PREINIT ||</div><div class='add'>+        init_done == GF_MEMPOOL_INIT_DESTROY) {</div><div class='add'>+        /* key has not been created yet */</div><div class='add'>+        if (pthread_key_create(&amp;pool_key, pool_destructor) != 0) {</div><div class='add'>+            gf_log("mem-pool", GF_LOG_CRITICAL,</div><div class='add'>+                   "failed to initialize mem-pool key");</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        init_done = GF_MEMPOOL_INIT_EARLY;</div><div class='add'>+    } else {</div><div class='add'>+        gf_log("mem-pool", GF_LOG_CRITICAL,</div><div class='add'>+               "incorrect order of mem-pool initialization "</div><div class='add'>+               "(init_done=%d)",</div><div class='add'>+               init_done);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_unlock(&amp;init_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Call mem_pools_init_late() once threading has been configured completely.</div><div class='ctx'>  * This prevent the pool_sweeper thread from getting killed once the main()</div><div class='ctx'>  * thread exits during deamonizing. */</div><div class='ctx'> void</div><div class='del'>-mem_pools_init_late (void)</div><div class='add'>+mem_pools_init_late(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;init_mutex);</div><div class='del'>-        if ((init_count++) == 0) {</div><div class='del'>-                (void) gf_thread_create (&amp;sweeper_tid, NULL, pool_sweeper,</div><div class='del'>-                                         NULL, "memsweep");</div><div class='del'>-</div><div class='del'>-                init_done = GF_MEMPOOL_INIT_LATE;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;init_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;init_mutex);</div><div class='add'>+    if ((init_count++) == 0) {</div><div class='add'>+        (void)gf_thread_create(&amp;sweeper_tid, NULL, pool_sweeper, NULL,</div><div class='add'>+                               "memsweep");</div><div class='add'>+</div><div class='add'>+        init_done = GF_MEMPOOL_INIT_LATE;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;init_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-mem_pools_fini (void)</div><div class='add'>+mem_pools_fini(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;init_mutex);</div><div class='del'>-        switch (init_count) {</div><div class='add'>+    pthread_mutex_lock(&amp;init_mutex);</div><div class='add'>+    switch (init_count) {</div><div class='ctx'>         case 0:</div><div class='del'>-                /*</div><div class='del'>-                 * If init_count is already zero (as e.g. if somebody called</div><div class='del'>-                 * this before mem_pools_init_late) then the sweeper was</div><div class='del'>-                 * probably never even started so we don't need to stop it.</div><div class='del'>-                 * Even if there's some crazy circumstance where there is a</div><div class='del'>-                 * sweeper but init_count is still zero, that just means we'll</div><div class='del'>-                 * leave it running.  Not perfect, but far better than any</div><div class='del'>-                 * known alternative.</div><div class='del'>-                 */</div><div class='del'>-                break;</div><div class='del'>-        case 1:</div><div class='del'>-        {</div><div class='del'>-                per_thread_pool_list_t *pool_list;</div><div class='del'>-                per_thread_pool_list_t *next_pl;</div><div class='del'>-                unsigned int            i;</div><div class='del'>-</div><div class='del'>-                /* if only mem_pools_init_early() was called, sweeper_tid will</div><div class='del'>-                 * be invalid and the functions will error out. That is not</div><div class='del'>-                 * critical. In all other cases, the sweeper_tid will be valid</div><div class='del'>-                 * and the thread gets stopped. */</div><div class='del'>-                (void) pthread_cancel (sweeper_tid);</div><div class='del'>-                (void) pthread_join (sweeper_tid, NULL);</div><div class='del'>-</div><div class='del'>-                /* Need to clean the pool_key to prevent further usage of the</div><div class='del'>-                 * per_thread_pool_list_t structure that is stored for each</div><div class='del'>-                 * thread.</div><div class='del'>-                 * This also prevents calling pool_destructor() when a thread</div><div class='del'>-                 * exits, so there is no chance on a use-after-free of the</div><div class='del'>-                 * per_thread_pool_list_t structure. */</div><div class='del'>-                (void) pthread_key_delete (pool_key);</div><div class='del'>-</div><div class='del'>-                /* free all objects from all pools */</div><div class='del'>-                list_for_each_entry_safe (pool_list, next_pl,</div><div class='del'>-                                          &amp;pool_threads, thr_list) {</div><div class='del'>-                        for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='del'>-                                free_obj_list (pool_list-&gt;pools[i].hot_list);</div><div class='del'>-                                free_obj_list (pool_list-&gt;pools[i].cold_list);</div><div class='del'>-                                pool_list-&gt;pools[i].hot_list = NULL;</div><div class='del'>-                                pool_list-&gt;pools[i].cold_list = NULL;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        list_del (&amp;pool_list-&gt;thr_list);</div><div class='del'>-                        FREE (pool_list);</div><div class='add'>+            /*</div><div class='add'>+             * If init_count is already zero (as e.g. if somebody called</div><div class='add'>+             * this before mem_pools_init_late) then the sweeper was</div><div class='add'>+             * probably never even started so we don't need to stop it.</div><div class='add'>+             * Even if there's some crazy circumstance where there is a</div><div class='add'>+             * sweeper but init_count is still zero, that just means we'll</div><div class='add'>+             * leave it running.  Not perfect, but far better than any</div><div class='add'>+             * known alternative.</div><div class='add'>+             */</div><div class='add'>+            break;</div><div class='add'>+        case 1: {</div><div class='add'>+            per_thread_pool_list_t *pool_list;</div><div class='add'>+            per_thread_pool_list_t *next_pl;</div><div class='add'>+            unsigned int i;</div><div class='add'>+</div><div class='add'>+            /* if only mem_pools_init_early() was called, sweeper_tid will</div><div class='add'>+             * be invalid and the functions will error out. That is not</div><div class='add'>+             * critical. In all other cases, the sweeper_tid will be valid</div><div class='add'>+             * and the thread gets stopped. */</div><div class='add'>+            (void)pthread_cancel(sweeper_tid);</div><div class='add'>+            (void)pthread_join(sweeper_tid, NULL);</div><div class='add'>+</div><div class='add'>+            /* Need to clean the pool_key to prevent further usage of the</div><div class='add'>+             * per_thread_pool_list_t structure that is stored for each</div><div class='add'>+             * thread.</div><div class='add'>+             * This also prevents calling pool_destructor() when a thread</div><div class='add'>+             * exits, so there is no chance on a use-after-free of the</div><div class='add'>+             * per_thread_pool_list_t structure. */</div><div class='add'>+            (void)pthread_key_delete(pool_key);</div><div class='add'>+</div><div class='add'>+            /* free all objects from all pools */</div><div class='add'>+            list_for_each_entry_safe(pool_list, next_pl, &amp;pool_threads,</div><div class='add'>+                                     thr_list)</div><div class='add'>+            {</div><div class='add'>+                for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='add'>+                    free_obj_list(pool_list-&gt;pools[i].hot_list);</div><div class='add'>+                    free_obj_list(pool_list-&gt;pools[i].cold_list);</div><div class='add'>+                    pool_list-&gt;pools[i].hot_list = NULL;</div><div class='add'>+                    pool_list-&gt;pools[i].cold_list = NULL;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry_safe (pool_list, next_pl,</div><div class='del'>-                                          &amp;pool_free_threads, thr_list) {</div><div class='del'>-                        list_del (&amp;pool_list-&gt;thr_list);</div><div class='del'>-                        FREE (pool_list);</div><div class='del'>-                }</div><div class='add'>+                list_del(&amp;pool_list-&gt;thr_list);</div><div class='add'>+                FREE(pool_list);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                init_done = GF_MEMPOOL_INIT_DESTROY;</div><div class='del'>-                /* Fall through. */</div><div class='add'>+            list_for_each_entry_safe(pool_list, next_pl, &amp;pool_free_threads,</div><div class='add'>+                                     thr_list)</div><div class='add'>+            {</div><div class='add'>+                list_del(&amp;pool_list-&gt;thr_list);</div><div class='add'>+                FREE(pool_list);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            init_done = GF_MEMPOOL_INIT_DESTROY;</div><div class='add'>+            /* Fall through. */</div><div class='ctx'>         }</div><div class='ctx'>         default:</div><div class='del'>-                --init_count;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;init_mutex);</div><div class='add'>+            --init_count;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;init_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #else</div><div class='del'>-void mem_pools_init_early (void) {}</div><div class='del'>-void mem_pools_init_late (void) {}</div><div class='del'>-void mem_pools_fini (void) {}</div><div class='add'>+void</div><div class='add'>+mem_pools_init_early(void)</div><div class='add'>+{</div><div class='add'>+}</div><div class='add'>+void</div><div class='add'>+mem_pools_init_late(void)</div><div class='add'>+{</div><div class='add'>+}</div><div class='add'>+void</div><div class='add'>+mem_pools_fini(void)</div><div class='add'>+{</div><div class='add'>+}</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> struct mem_pool *</div><div class='del'>-mem_pool_new_fn (glusterfs_ctx_t *ctx, unsigned long sizeof_type,</div><div class='del'>-                 unsigned long count, char *name)</div><div class='add'>+mem_pool_new_fn(glusterfs_ctx_t *ctx, unsigned long sizeof_type,</div><div class='add'>+                unsigned long count, char *name)</div><div class='ctx'> {</div><div class='del'>-        unsigned int            i;</div><div class='del'>-        struct mem_pool         *new = NULL;</div><div class='del'>-        struct mem_pool_shared  *pool = NULL;</div><div class='del'>-</div><div class='del'>-        if (!sizeof_type) {</div><div class='del'>-                gf_msg_callingfn ("mem-pool", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='del'>-                if (sizeof_type &lt;= AVAILABLE_SIZE(pools[i].power_of_two)) {</div><div class='del'>-                        pool = &amp;pools[i];</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!pool) {</div><div class='del'>-                gf_msg_callingfn ("mem-pool", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        new = GF_CALLOC (sizeof (struct mem_pool), 1, gf_common_mt_mem_pool);</div><div class='del'>-        if (!new)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        new-&gt;ctx = ctx;</div><div class='del'>-        new-&gt;sizeof_type = sizeof_type;</div><div class='del'>-        new-&gt;count = count;</div><div class='del'>-        new-&gt;name = name;</div><div class='del'>-        new-&gt;pool = pool;</div><div class='del'>-        GF_ATOMIC_INIT (new-&gt;active, 0);</div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;owner);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add (&amp;new-&gt;owner, &amp;ctx-&gt;mempool_list);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        return new;</div><div class='add'>+    unsigned int i;</div><div class='add'>+    struct mem_pool *new = NULL;</div><div class='add'>+    struct mem_pool_shared *pool = NULL;</div><div class='add'>+</div><div class='add'>+    if (!sizeof_type) {</div><div class='add'>+        gf_msg_callingfn("mem-pool", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='add'>+        if (sizeof_type &lt;= AVAILABLE_SIZE(pools[i].power_of_two)) {</div><div class='add'>+            pool = &amp;pools[i];</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!pool) {</div><div class='add'>+        gf_msg_callingfn("mem-pool", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    new = GF_CALLOC(sizeof(struct mem_pool), 1, gf_common_mt_mem_pool);</div><div class='add'>+    if (!new)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    new-&gt;ctx = ctx;</div><div class='add'>+    new-&gt;sizeof_type = sizeof_type;</div><div class='add'>+    new-&gt;count = count;</div><div class='add'>+    new-&gt;name = name;</div><div class='add'>+    new-&gt;pool = pool;</div><div class='add'>+    GF_ATOMIC_INIT(new-&gt;active, 0);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;owner);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add(&amp;new-&gt;owner, &amp;ctx-&gt;mempool_list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return new;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void*</div><div class='del'>-mem_get0 (struct mem_pool *mem_pool)</div><div class='add'>+void *</div><div class='add'>+mem_get0(struct mem_pool *mem_pool)</div><div class='ctx'> {</div><div class='del'>-        void             *ptr = NULL;</div><div class='add'>+    void *ptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!mem_pool) {</div><div class='del'>-                gf_msg_callingfn ("mem-pool", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!mem_pool) {</div><div class='add'>+        gf_msg_callingfn("mem-pool", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ptr = mem_get(mem_pool);</div><div class='del'>-        if (ptr) {</div><div class='add'>+    ptr = mem_get(mem_pool);</div><div class='add'>+    if (ptr) {</div><div class='ctx'> #if defined(GF_DISABLE_MEMPOOL)</div><div class='del'>-                memset (ptr, 0, mem_pool-&gt;sizeof_type);</div><div class='add'>+        memset(ptr, 0, mem_pool-&gt;sizeof_type);</div><div class='ctx'> #else</div><div class='del'>-                memset (ptr, 0, AVAILABLE_SIZE(mem_pool-&gt;pool-&gt;power_of_two));</div><div class='add'>+        memset(ptr, 0, AVAILABLE_SIZE(mem_pool-&gt;pool-&gt;power_of_two));</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ptr;</div><div class='add'>+    return ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> per_thread_pool_list_t *</div><div class='del'>-mem_get_pool_list (void)</div><div class='add'>+mem_get_pool_list(void)</div><div class='ctx'> {</div><div class='del'>-        per_thread_pool_list_t  *pool_list;</div><div class='del'>-        unsigned int            i;</div><div class='del'>-</div><div class='del'>-        pool_list = pthread_getspecific (pool_key);</div><div class='del'>-        if (pool_list) {</div><div class='del'>-                return pool_list;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) pthread_mutex_lock (&amp;pool_free_lock);</div><div class='del'>-        if (!list_empty (&amp;pool_free_threads)) {</div><div class='del'>-                pool_list = list_entry (pool_free_threads.next,</div><div class='del'>-                                        per_thread_pool_list_t, thr_list);</div><div class='del'>-                list_del (&amp;pool_list-&gt;thr_list);</div><div class='del'>-        }</div><div class='del'>-        (void) pthread_mutex_unlock (&amp;pool_free_lock);</div><div class='add'>+    per_thread_pool_list_t *pool_list;</div><div class='add'>+    unsigned int i;</div><div class='ctx'> </div><div class='add'>+    pool_list = pthread_getspecific(pool_key);</div><div class='add'>+    if (pool_list) {</div><div class='add'>+        return pool_list;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)pthread_mutex_lock(&amp;pool_free_lock);</div><div class='add'>+    if (!list_empty(&amp;pool_free_threads)) {</div><div class='add'>+        pool_list = list_entry(pool_free_threads.next, per_thread_pool_list_t,</div><div class='add'>+                               thr_list);</div><div class='add'>+        list_del(&amp;pool_list-&gt;thr_list);</div><div class='add'>+    }</div><div class='add'>+    (void)pthread_mutex_unlock(&amp;pool_free_lock);</div><div class='add'>+</div><div class='add'>+    if (!pool_list) {</div><div class='add'>+        pool_list = CALLOC(pool_list_size, 1);</div><div class='ctx'>         if (!pool_list) {</div><div class='del'>-                pool_list = CALLOC (pool_list_size, 1);</div><div class='del'>-                if (!pool_list) {</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                INIT_LIST_HEAD (&amp;pool_list-&gt;thr_list);</div><div class='del'>-                (void) pthread_spin_init (&amp;pool_list-&gt;lock,</div><div class='del'>-                                          PTHREAD_PROCESS_PRIVATE);</div><div class='del'>-                for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='del'>-                        pool_list-&gt;pools[i].parent = &amp;pools[i];</div><div class='del'>-                        pool_list-&gt;pools[i].hot_list = NULL;</div><div class='del'>-                        pool_list-&gt;pools[i].cold_list = NULL;</div><div class='del'>-                }</div><div class='add'>+        INIT_LIST_HEAD(&amp;pool_list-&gt;thr_list);</div><div class='add'>+        (void)pthread_spin_init(&amp;pool_list-&gt;lock, PTHREAD_PROCESS_PRIVATE);</div><div class='add'>+        for (i = 0; i &lt; NPOOLS; ++i) {</div><div class='add'>+            pool_list-&gt;pools[i].parent = &amp;pools[i];</div><div class='add'>+            pool_list-&gt;pools[i].hot_list = NULL;</div><div class='add'>+            pool_list-&gt;pools[i].cold_list = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) pthread_mutex_lock (&amp;pool_lock);</div><div class='del'>-        pool_list-&gt;poison = 0;</div><div class='del'>-        list_add (&amp;pool_list-&gt;thr_list, &amp;pool_threads);</div><div class='del'>-        (void) pthread_mutex_unlock (&amp;pool_lock);</div><div class='add'>+    (void)pthread_mutex_lock(&amp;pool_lock);</div><div class='add'>+    pool_list-&gt;poison = 0;</div><div class='add'>+    list_add(&amp;pool_list-&gt;thr_list, &amp;pool_threads);</div><div class='add'>+    (void)pthread_mutex_unlock(&amp;pool_lock);</div><div class='ctx'> </div><div class='del'>-        (void) pthread_setspecific (pool_key, pool_list);</div><div class='del'>-        return pool_list;</div><div class='add'>+    (void)pthread_setspecific(pool_key, pool_list);</div><div class='add'>+    return pool_list;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> pooled_obj_hdr_t *</div><div class='del'>-mem_get_from_pool (per_thread_pool_t *pt_pool)</div><div class='add'>+mem_get_from_pool(per_thread_pool_t *pt_pool)</div><div class='ctx'> {</div><div class='del'>-        pooled_obj_hdr_t        *retval;</div><div class='del'>-</div><div class='del'>-        retval = pt_pool-&gt;hot_list;</div><div class='del'>-        if (retval) {</div><div class='del'>-                GF_ATOMIC_INC (pt_pool-&gt;parent-&gt;allocs_hot);</div><div class='del'>-                pt_pool-&gt;hot_list = retval-&gt;next;</div><div class='del'>-                return retval;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        retval = pt_pool-&gt;cold_list;</div><div class='del'>-        if (retval) {</div><div class='del'>-                GF_ATOMIC_INC (pt_pool-&gt;parent-&gt;allocs_cold);</div><div class='del'>-                pt_pool-&gt;cold_list = retval-&gt;next;</div><div class='del'>-                return retval;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_ATOMIC_INC (pt_pool-&gt;parent-&gt;allocs_stdc);</div><div class='del'>-        return malloc (1 &lt;&lt; pt_pool-&gt;parent-&gt;power_of_two);</div><div class='add'>+    pooled_obj_hdr_t *retval;</div><div class='add'>+</div><div class='add'>+    retval = pt_pool-&gt;hot_list;</div><div class='add'>+    if (retval) {</div><div class='add'>+        GF_ATOMIC_INC(pt_pool-&gt;parent-&gt;allocs_hot);</div><div class='add'>+        pt_pool-&gt;hot_list = retval-&gt;next;</div><div class='add'>+        return retval;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    retval = pt_pool-&gt;cold_list;</div><div class='add'>+    if (retval) {</div><div class='add'>+        GF_ATOMIC_INC(pt_pool-&gt;parent-&gt;allocs_cold);</div><div class='add'>+        pt_pool-&gt;cold_list = retval-&gt;next;</div><div class='add'>+        return retval;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ATOMIC_INC(pt_pool-&gt;parent-&gt;allocs_stdc);</div><div class='add'>+    return malloc(1 &lt;&lt; pt_pool-&gt;parent-&gt;power_of_two);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-mem_get (struct mem_pool *mem_pool)</div><div class='add'>+mem_get(struct mem_pool *mem_pool)</div><div class='ctx'> {</div><div class='ctx'> #if defined(GF_DISABLE_MEMPOOL)</div><div class='del'>-        return GF_MALLOC (mem_pool-&gt;sizeof_type, gf_common_mt_mem_pool);</div><div class='add'>+    return GF_MALLOC(mem_pool-&gt;sizeof_type, gf_common_mt_mem_pool);</div><div class='ctx'> #else</div><div class='del'>-        per_thread_pool_list_t  *pool_list;</div><div class='del'>-        per_thread_pool_t       *pt_pool;</div><div class='del'>-        pooled_obj_hdr_t        *retval;</div><div class='del'>-</div><div class='del'>-        if (!mem_pool) {</div><div class='del'>-                gf_msg_callingfn ("mem-pool", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pool_list = mem_get_pool_list ();</div><div class='del'>-        if (!pool_list || pool_list-&gt;poison) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) pthread_spin_lock (&amp;pool_list-&gt;lock);</div><div class='del'>-        pt_pool = &amp;pool_list-&gt;pools[mem_pool-&gt;pool-&gt;power_of_two-POOL_SMALLEST];</div><div class='del'>-        retval = mem_get_from_pool (pt_pool);</div><div class='del'>-</div><div class='del'>-        if (!retval) {</div><div class='del'>-                (void) pthread_spin_unlock (&amp;pool_list-&gt;lock);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        retval-&gt;magic = GF_MEM_HEADER_MAGIC;</div><div class='del'>-        retval-&gt;pool = mem_pool;</div><div class='del'>-        retval-&gt;pool_list = pool_list;</div><div class='del'>-        retval-&gt;power_of_two = mem_pool-&gt;pool-&gt;power_of_two;</div><div class='del'>-        (void) pthread_spin_unlock (&amp;pool_list-&gt;lock);</div><div class='del'>-</div><div class='del'>-        GF_ATOMIC_INC (mem_pool-&gt;active);</div><div class='del'>-</div><div class='del'>-        return retval + 1;</div><div class='add'>+    per_thread_pool_list_t *pool_list;</div><div class='add'>+    per_thread_pool_t *pt_pool;</div><div class='add'>+    pooled_obj_hdr_t *retval;</div><div class='add'>+</div><div class='add'>+    if (!mem_pool) {</div><div class='add'>+        gf_msg_callingfn("mem-pool", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pool_list = mem_get_pool_list();</div><div class='add'>+    if (!pool_list || pool_list-&gt;poison) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)pthread_spin_lock(&amp;pool_list-&gt;lock);</div><div class='add'>+    pt_pool = &amp;pool_list-&gt;pools[mem_pool-&gt;pool-&gt;power_of_two - POOL_SMALLEST];</div><div class='add'>+    retval = mem_get_from_pool(pt_pool);</div><div class='add'>+</div><div class='add'>+    if (!retval) {</div><div class='add'>+        (void)pthread_spin_unlock(&amp;pool_list-&gt;lock);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    retval-&gt;magic = GF_MEM_HEADER_MAGIC;</div><div class='add'>+    retval-&gt;pool = mem_pool;</div><div class='add'>+    retval-&gt;pool_list = pool_list;</div><div class='add'>+    retval-&gt;power_of_two = mem_pool-&gt;pool-&gt;power_of_two;</div><div class='add'>+    (void)pthread_spin_unlock(&amp;pool_list-&gt;lock);</div><div class='add'>+</div><div class='add'>+    GF_ATOMIC_INC(mem_pool-&gt;active);</div><div class='add'>+</div><div class='add'>+    return retval + 1;</div><div class='ctx'> #endif /* GF_DISABLE_MEMPOOL */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-mem_put (void *ptr)</div><div class='add'>+mem_put(void *ptr)</div><div class='ctx'> {</div><div class='ctx'> #if defined(GF_DISABLE_MEMPOOL)</div><div class='del'>-        GF_FREE (ptr);</div><div class='add'>+    GF_FREE(ptr);</div><div class='ctx'> #else</div><div class='del'>-        pooled_obj_hdr_t        *hdr;</div><div class='del'>-        per_thread_pool_list_t  *pool_list;</div><div class='del'>-        per_thread_pool_t       *pt_pool;</div><div class='del'>-</div><div class='del'>-        if (!ptr) {</div><div class='del'>-                gf_msg_callingfn ("mem-pool", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hdr = ((pooled_obj_hdr_t *)ptr) - 1;</div><div class='del'>-        if (hdr-&gt;magic != GF_MEM_HEADER_MAGIC) {</div><div class='del'>-                /* Not one of ours; don't touch it. */</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-        pool_list = hdr-&gt;pool_list;</div><div class='del'>-        pt_pool = &amp;pool_list-&gt;pools[hdr-&gt;power_of_two-POOL_SMALLEST];</div><div class='add'>+    pooled_obj_hdr_t *hdr;</div><div class='add'>+    per_thread_pool_list_t *pool_list;</div><div class='add'>+    per_thread_pool_t *pt_pool;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_DEC (hdr-&gt;pool-&gt;active);</div><div class='add'>+    if (!ptr) {</div><div class='add'>+        gf_msg_callingfn("mem-pool", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) pthread_spin_lock (&amp;pool_list-&gt;lock);</div><div class='del'>-        hdr-&gt;magic = GF_MEM_INVALID_MAGIC;</div><div class='del'>-        hdr-&gt;next = pt_pool-&gt;hot_list;</div><div class='del'>-        pt_pool-&gt;hot_list = hdr;</div><div class='del'>-        GF_ATOMIC_INC (pt_pool-&gt;parent-&gt;frees_to_list);</div><div class='del'>-        (void) pthread_spin_unlock (&amp;pool_list-&gt;lock);</div><div class='add'>+    hdr = ((pooled_obj_hdr_t *)ptr) - 1;</div><div class='add'>+    if (hdr-&gt;magic != GF_MEM_HEADER_MAGIC) {</div><div class='add'>+        /* Not one of ours; don't touch it. */</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    pool_list = hdr-&gt;pool_list;</div><div class='add'>+    pt_pool = &amp;pool_list-&gt;pools[hdr-&gt;power_of_two - POOL_SMALLEST];</div><div class='add'>+</div><div class='add'>+    GF_ATOMIC_DEC(hdr-&gt;pool-&gt;active);</div><div class='add'>+</div><div class='add'>+    (void)pthread_spin_lock(&amp;pool_list-&gt;lock);</div><div class='add'>+    hdr-&gt;magic = GF_MEM_INVALID_MAGIC;</div><div class='add'>+    hdr-&gt;next = pt_pool-&gt;hot_list;</div><div class='add'>+    pt_pool-&gt;hot_list = hdr;</div><div class='add'>+    GF_ATOMIC_INC(pt_pool-&gt;parent-&gt;frees_to_list);</div><div class='add'>+    (void)pthread_spin_unlock(&amp;pool_list-&gt;lock);</div><div class='ctx'> #endif /* GF_DISABLE_MEMPOOL */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-mem_pool_destroy (struct mem_pool *pool)</div><div class='add'>+mem_pool_destroy(struct mem_pool *pool)</div><div class='ctx'> {</div><div class='del'>-        if (!pool)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /* remove this pool from the owner (glusterfs_ctx_t) */</div><div class='del'>-        LOCK (&amp;pool-&gt;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_del (&amp;pool-&gt;owner);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;pool-&gt;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* free this pool, but keep the mem_pool_shared */</div><div class='del'>-        GF_FREE (pool);</div><div class='add'>+    if (!pool)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Pools are now permanent, so the mem_pool-&gt;pool is kept around. All</div><div class='del'>-         * of the objects *in* the pool will eventually be freed via the</div><div class='del'>-         * pool-sweeper thread, and this way we don't have to add a lot of</div><div class='del'>-         * reference-counting complexity.</div><div class='del'>-         */</div><div class='add'>+    /* remove this pool from the owner (glusterfs_ctx_t) */</div><div class='add'>+    LOCK(&amp;pool-&gt;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_del(&amp;pool-&gt;owner);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;pool-&gt;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* free this pool, but keep the mem_pool_shared */</div><div class='add'>+    GF_FREE(pool);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Pools are now permanent, so the mem_pool-&gt;pool is kept around. All</div><div class='add'>+     * of the objects *in* the pool will eventually be freed via the</div><div class='add'>+     * pool-sweeper thread, and this way we don't have to add a lot of</div><div class='add'>+     * reference-counting complexity.</div><div class='add'>+     */</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/monitoring.c b/libglusterfs/src/monitoring.c<br/>index 10b0a817e40..041b70acf7a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/monitoring.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/monitoring.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/monitoring.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/monitoring.c</a></div><div class='hunk'>@@ -17,254 +17,256 @@</div><div class='ctx'> static void</div><div class='ctx'> dump_mem_acct_details(xlator_t *xl, int fd)</div><div class='ctx'> {</div><div class='del'>-        struct mem_acct_rec *mem_rec;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        if (!xl || !xl-&gt;mem_acct || (xl-&gt;ctx-&gt;active != xl-&gt;graph))</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        dprintf (fd, "# %s.%s.total.num_types %d\n", xl-&gt;type, xl-&gt;name,</div><div class='del'>-                 xl-&gt;mem_acct-&gt;num_types);</div><div class='del'>-</div><div class='del'>-        dprintf (fd, "# type, in-use-size, in-use-units, max-size, "</div><div class='del'>-                 "max-units, total-allocs\n");</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='del'>-                mem_rec = &amp;xl-&gt;mem_acct-&gt;rec[i];</div><div class='del'>-                if (mem_rec-&gt;num_allocs == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                dprintf (fd, "# %s, %"GF_PRI_SIZET", %u, %"GF_PRI_SIZET", %u,"</div><div class='del'>-                         " %u\n", mem_rec-&gt;typestr, mem_rec-&gt;size,</div><div class='del'>-                         mem_rec-&gt;num_allocs, mem_rec-&gt;max_size,</div><div class='del'>-                         mem_rec-&gt;max_num_allocs, mem_rec-&gt;total_allocs);</div><div class='del'>-        }</div><div class='add'>+    struct mem_acct_rec *mem_rec;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!xl || !xl-&gt;mem_acct || (xl-&gt;ctx-&gt;active != xl-&gt;graph))</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    dprintf(fd, "# %s.%s.total.num_types %d\n", xl-&gt;type, xl-&gt;name,</div><div class='add'>+            xl-&gt;mem_acct-&gt;num_types);</div><div class='add'>+</div><div class='add'>+    dprintf(fd,</div><div class='add'>+            "# type, in-use-size, in-use-units, max-size, "</div><div class='add'>+            "max-units, total-allocs\n");</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='add'>+        mem_rec = &amp;xl-&gt;mem_acct-&gt;rec[i];</div><div class='add'>+        if (mem_rec-&gt;num_allocs == 0)</div><div class='add'>+            continue;</div><div class='add'>+        dprintf(fd,</div><div class='add'>+                "# %s, %" GF_PRI_SIZET ", %u, %" GF_PRI_SIZET</div><div class='add'>+                ", %u,"</div><div class='add'>+                " %u\n",</div><div class='add'>+                mem_rec-&gt;typestr, mem_rec-&gt;size, mem_rec-&gt;num_allocs,</div><div class='add'>+                mem_rec-&gt;max_size, mem_rec-&gt;max_num_allocs,</div><div class='add'>+                mem_rec-&gt;total_allocs);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dump_global_memory_accounting (int fd)</div><div class='add'>+dump_global_memory_accounting(int fd)</div><div class='ctx'> {</div><div class='ctx'> #if MEMORY_ACCOUNTING_STATS</div><div class='del'>-        int      i        = 0;</div><div class='del'>-        uint64_t count    = 0;</div><div class='del'>-</div><div class='del'>-        uint64_t tcalloc = GF_ATOMIC_GET (gf_memory_stat_counts.total_calloc);</div><div class='del'>-        uint64_t tmalloc = GF_ATOMIC_GET (gf_memory_stat_counts.total_malloc);</div><div class='del'>-        uint64_t tfree   = GF_ATOMIC_GET (gf_memory_stat_counts.total_free);</div><div class='del'>-</div><div class='del'>-        dprintf (fd, "memory.total.calloc %lu\n", tcalloc);</div><div class='del'>-        dprintf (fd, "memory.total.malloc %lu\n", tmalloc);</div><div class='del'>-        dprintf (fd, "memory.total.realloc %lu\n",</div><div class='del'>-                 GF_ATOMIC_GET (gf_memory_stat_counts.total_realloc));</div><div class='del'>-        dprintf (fd, "memory.total.free %lu\n", tfree);</div><div class='del'>-        dprintf (fd, "memory.total.in-use %lu\n", ((tcalloc + tmalloc) - tfree));</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_BLK_MAX_VALUE; i++) {</div><div class='del'>-                count = GF_ATOMIC_GET (gf_memory_stat_counts.blk_size[i]);</div><div class='del'>-                dprintf (fd, "memory.total.blk_size.%s %lu\n",</div><div class='del'>-                         gf_mem_stats_blk[i].blk_size_str, count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dprintf (fd, "#----\n");</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+</div><div class='add'>+    uint64_t tcalloc = GF_ATOMIC_GET(gf_memory_stat_counts.total_calloc);</div><div class='add'>+    uint64_t tmalloc = GF_ATOMIC_GET(gf_memory_stat_counts.total_malloc);</div><div class='add'>+    uint64_t tfree = GF_ATOMIC_GET(gf_memory_stat_counts.total_free);</div><div class='add'>+</div><div class='add'>+    dprintf(fd, "memory.total.calloc %lu\n", tcalloc);</div><div class='add'>+    dprintf(fd, "memory.total.malloc %lu\n", tmalloc);</div><div class='add'>+    dprintf(fd, "memory.total.realloc %lu\n",</div><div class='add'>+            GF_ATOMIC_GET(gf_memory_stat_counts.total_realloc));</div><div class='add'>+    dprintf(fd, "memory.total.free %lu\n", tfree);</div><div class='add'>+    dprintf(fd, "memory.total.in-use %lu\n", ((tcalloc + tmalloc) - tfree));</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_BLK_MAX_VALUE; i++) {</div><div class='add'>+        count = GF_ATOMIC_GET(gf_memory_stat_counts.blk_size[i]);</div><div class='add'>+        dprintf(fd, "memory.total.blk_size.%s %lu\n",</div><div class='add'>+                gf_mem_stats_blk[i].blk_size_str, count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dprintf(fd, "#----\n");</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /* This is not a metric to be watched in admin guide,</div><div class='del'>-           but keeping it here till we resolve all leak-issues</div><div class='del'>-           would be great */</div><div class='add'>+    /* This is not a metric to be watched in admin guide,</div><div class='add'>+       but keeping it here till we resolve all leak-issues</div><div class='add'>+       would be great */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-dump_latency_and_count (xlator_t *xl, int fd)</div><div class='add'>+dump_latency_and_count(xlator_t *xl, int fd)</div><div class='ctx'> {</div><div class='del'>-        int32_t  index = 0;</div><div class='del'>-        uint64_t fop;</div><div class='del'>-        uint64_t cbk;</div><div class='del'>-        uint64_t count;</div><div class='del'>-</div><div class='del'>-        if (xl-&gt;winds)</div><div class='del'>-                dprintf (fd, "%s.total.pending-winds.count %lu\n", xl-&gt;name, xl-&gt;winds);</div><div class='del'>-</div><div class='del'>-        /* Need 'fuse' data, and don't need all the old graph info */</div><div class='del'>-        if ((xl != xl-&gt;ctx-&gt;master) &amp;&amp; (xl-&gt;ctx-&gt;active != xl-&gt;graph))</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        count = GF_ATOMIC_GET (xl-&gt;stats.total.count);</div><div class='del'>-        dprintf (fd, "%s.total.fop-count %lu\n", xl-&gt;name, count);</div><div class='del'>-</div><div class='del'>-        count = GF_ATOMIC_GET (xl-&gt;stats.interval.count);</div><div class='del'>-        dprintf (fd, "%s.interval.fop-count %lu\n", xl-&gt;name, count);</div><div class='del'>-        GF_ATOMIC_INIT (xl-&gt;stats.interval.count, 0);</div><div class='del'>-</div><div class='del'>-        for (index = 0; index &lt; GF_FOP_MAXVALUE; index++) {</div><div class='del'>-                fop = GF_ATOMIC_GET (xl-&gt;stats.total.metrics[index].fop);</div><div class='del'>-                if (fop) {</div><div class='del'>-                        dprintf (fd, "%s.total.%s.count %lu\n",</div><div class='del'>-                                 xl-&gt;name, gf_fop_list[index], fop);</div><div class='del'>-                }</div><div class='del'>-                fop = GF_ATOMIC_GET (xl-&gt;stats.interval.metrics[index].fop);</div><div class='del'>-                if (fop) {</div><div class='del'>-                        dprintf (fd, "%s.interval.%s.count %lu\n",</div><div class='del'>-                                 xl-&gt;name, gf_fop_list[index], fop);</div><div class='del'>-                }</div><div class='del'>-                cbk = GF_ATOMIC_GET (xl-&gt;stats.interval.metrics[index].cbk);</div><div class='del'>-                if (cbk) {</div><div class='del'>-                        dprintf (fd, "%s.interval.%s.fail_count %lu\n",</div><div class='del'>-                                 xl-&gt;name, gf_fop_list[index], cbk);</div><div class='del'>-                }</div><div class='del'>-                if (xl-&gt;stats.interval.latencies[index].count != 0.0) {</div><div class='del'>-                        dprintf (fd, "%s.interval.%s.latency %lf\n",</div><div class='del'>-                                 xl-&gt;name, gf_fop_list[index],</div><div class='del'>-                                 (xl-&gt;stats.interval.latencies[index].total /</div><div class='del'>-                                  xl-&gt;stats.interval.latencies[index].count));</div><div class='del'>-                        dprintf (fd, "%s.interval.%s.max %lf\n",</div><div class='del'>-                                 xl-&gt;name, gf_fop_list[index],</div><div class='del'>-                                 xl-&gt;stats.interval.latencies[index].max);</div><div class='del'>-                        dprintf (fd, "%s.interval.%s.min %lf\n",</div><div class='del'>-                                 xl-&gt;name, gf_fop_list[index],</div><div class='del'>-                                 xl-&gt;stats.interval.latencies[index].min);</div><div class='del'>-                }</div><div class='del'>-                GF_ATOMIC_INIT (xl-&gt;stats.interval.metrics[index].cbk, 0);</div><div class='del'>-                GF_ATOMIC_INIT (xl-&gt;stats.interval.metrics[index].fop, 0);</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    uint64_t fop;</div><div class='add'>+    uint64_t cbk;</div><div class='add'>+    uint64_t count;</div><div class='add'>+</div><div class='add'>+    if (xl-&gt;winds)</div><div class='add'>+        dprintf(fd, "%s.total.pending-winds.count %lu\n", xl-&gt;name, xl-&gt;winds);</div><div class='add'>+</div><div class='add'>+    /* Need 'fuse' data, and don't need all the old graph info */</div><div class='add'>+    if ((xl != xl-&gt;ctx-&gt;master) &amp;&amp; (xl-&gt;ctx-&gt;active != xl-&gt;graph))</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    count = GF_ATOMIC_GET(xl-&gt;stats.total.count);</div><div class='add'>+    dprintf(fd, "%s.total.fop-count %lu\n", xl-&gt;name, count);</div><div class='add'>+</div><div class='add'>+    count = GF_ATOMIC_GET(xl-&gt;stats.interval.count);</div><div class='add'>+    dprintf(fd, "%s.interval.fop-count %lu\n", xl-&gt;name, count);</div><div class='add'>+    GF_ATOMIC_INIT(xl-&gt;stats.interval.count, 0);</div><div class='add'>+</div><div class='add'>+    for (index = 0; index &lt; GF_FOP_MAXVALUE; index++) {</div><div class='add'>+        fop = GF_ATOMIC_GET(xl-&gt;stats.total.metrics[index].fop);</div><div class='add'>+        if (fop) {</div><div class='add'>+            dprintf(fd, "%s.total.%s.count %lu\n", xl-&gt;name, gf_fop_list[index],</div><div class='add'>+                    fop);</div><div class='ctx'>         }</div><div class='del'>-        memset (xl-&gt;stats.interval.latencies, 0,</div><div class='del'>-                sizeof (xl-&gt;stats.interval.latencies));</div><div class='add'>+        fop = GF_ATOMIC_GET(xl-&gt;stats.interval.metrics[index].fop);</div><div class='add'>+        if (fop) {</div><div class='add'>+            dprintf(fd, "%s.interval.%s.count %lu\n", xl-&gt;name,</div><div class='add'>+                    gf_fop_list[index], fop);</div><div class='add'>+        }</div><div class='add'>+        cbk = GF_ATOMIC_GET(xl-&gt;stats.interval.metrics[index].cbk);</div><div class='add'>+        if (cbk) {</div><div class='add'>+            dprintf(fd, "%s.interval.%s.fail_count %lu\n", xl-&gt;name,</div><div class='add'>+                    gf_fop_list[index], cbk);</div><div class='add'>+        }</div><div class='add'>+        if (xl-&gt;stats.interval.latencies[index].count != 0.0) {</div><div class='add'>+            dprintf(fd, "%s.interval.%s.latency %lf\n", xl-&gt;name,</div><div class='add'>+                    gf_fop_list[index],</div><div class='add'>+                    (xl-&gt;stats.interval.latencies[index].total /</div><div class='add'>+                     xl-&gt;stats.interval.latencies[index].count));</div><div class='add'>+            dprintf(fd, "%s.interval.%s.max %lf\n", xl-&gt;name,</div><div class='add'>+                    gf_fop_list[index],</div><div class='add'>+                    xl-&gt;stats.interval.latencies[index].max);</div><div class='add'>+            dprintf(fd, "%s.interval.%s.min %lf\n", xl-&gt;name,</div><div class='add'>+                    gf_fop_list[index],</div><div class='add'>+                    xl-&gt;stats.interval.latencies[index].min);</div><div class='add'>+        }</div><div class='add'>+        GF_ATOMIC_INIT(xl-&gt;stats.interval.metrics[index].cbk, 0);</div><div class='add'>+        GF_ATOMIC_INIT(xl-&gt;stats.interval.metrics[index].fop, 0);</div><div class='add'>+    }</div><div class='add'>+    memset(xl-&gt;stats.interval.latencies, 0,</div><div class='add'>+           sizeof(xl-&gt;stats.interval.latencies));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static inline void</div><div class='del'>-dump_call_stack_details (glusterfs_ctx_t *ctx, int fd)</div><div class='add'>+dump_call_stack_details(glusterfs_ctx_t *ctx, int fd)</div><div class='ctx'> {</div><div class='del'>-        dprintf (fd, "total.stack.count %lu\n",</div><div class='del'>-                 GF_ATOMIC_GET (ctx-&gt;pool-&gt;total_count));</div><div class='del'>-        dprintf (fd, "total.stack.in-flight %lu\n",</div><div class='del'>-                 ctx-&gt;pool-&gt;cnt);</div><div class='add'>+    dprintf(fd, "total.stack.count %lu\n",</div><div class='add'>+            GF_ATOMIC_GET(ctx-&gt;pool-&gt;total_count));</div><div class='add'>+    dprintf(fd, "total.stack.in-flight %lu\n", ctx-&gt;pool-&gt;cnt);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static inline void</div><div class='del'>-dump_dict_details (glusterfs_ctx_t *ctx, int fd)</div><div class='add'>+dump_dict_details(glusterfs_ctx_t *ctx, int fd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t total_dicts = 0;</div><div class='del'>-        uint64_t total_pairs = 0;</div><div class='del'>-</div><div class='del'>-        total_dicts = GF_ATOMIC_GET (ctx-&gt;stats.total_dicts_used);</div><div class='del'>-        total_pairs = GF_ATOMIC_GET (ctx-&gt;stats.total_pairs_used);</div><div class='del'>-</div><div class='del'>-        dprintf (fd, "total.dict.max-pairs-per %lu\n",</div><div class='del'>-                 GF_ATOMIC_GET (ctx-&gt;stats.max_dict_pairs));</div><div class='del'>-        dprintf (fd, "total.dict.pairs-used %lu\n", total_pairs);</div><div class='del'>-        dprintf (fd, "total.dict.used %lu\n", total_dicts);</div><div class='del'>-        dprintf (fd, "total.dict.average-pairs %lu\n",</div><div class='del'>-                            (total_pairs / total_dicts));</div><div class='add'>+    uint64_t total_dicts = 0;</div><div class='add'>+    uint64_t total_pairs = 0;</div><div class='add'>+</div><div class='add'>+    total_dicts = GF_ATOMIC_GET(ctx-&gt;stats.total_dicts_used);</div><div class='add'>+    total_pairs = GF_ATOMIC_GET(ctx-&gt;stats.total_pairs_used);</div><div class='add'>+</div><div class='add'>+    dprintf(fd, "total.dict.max-pairs-per %lu\n",</div><div class='add'>+            GF_ATOMIC_GET(ctx-&gt;stats.max_dict_pairs));</div><div class='add'>+    dprintf(fd, "total.dict.pairs-used %lu\n", total_pairs);</div><div class='add'>+    dprintf(fd, "total.dict.used %lu\n", total_dicts);</div><div class='add'>+    dprintf(fd, "total.dict.average-pairs %lu\n", (total_pairs / total_dicts));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dump_inode_stats (glusterfs_ctx_t *ctx, int fd)</div><div class='add'>+dump_inode_stats(glusterfs_ctx_t *ctx, int fd)</div><div class='ctx'> {</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dump_global_metrics (glusterfs_ctx_t *ctx, int fd)</div><div class='add'>+dump_global_metrics(glusterfs_ctx_t *ctx, int fd)</div><div class='ctx'> {</div><div class='del'>-        struct timeval tv;</div><div class='del'>-        time_t nowtime;</div><div class='del'>-        struct tm *nowtm;</div><div class='del'>-        char tmbuf[64] = {0,};</div><div class='del'>-</div><div class='del'>-        gettimeofday(&amp;tv, NULL);</div><div class='del'>-        nowtime = tv.tv_sec;</div><div class='del'>-        nowtm = localtime(&amp;nowtime);</div><div class='del'>-        strftime(tmbuf, sizeof tmbuf, "%Y-%m-%d %H:%M:%S", nowtm);</div><div class='del'>-</div><div class='del'>-        /* Let every file have information on which process dumped info */</div><div class='del'>-        dprintf (fd, "## %s\n", ctx-&gt;cmdlinestr);</div><div class='del'>-        dprintf (fd, "### %s\n", tmbuf);</div><div class='del'>-        dprintf (fd, "### BrickName: %s\n", ctx-&gt;cmd_args.brick_name);</div><div class='del'>-        dprintf (fd, "### MountName: %s\n", ctx-&gt;cmd_args.mount_point);</div><div class='del'>-        dprintf (fd, "### VolumeName: %s\n", ctx-&gt;cmd_args.volume_name);</div><div class='del'>-</div><div class='del'>-        /* Dump memory accounting */</div><div class='del'>-        dump_global_memory_accounting (fd);</div><div class='del'>-        dprintf (fd, "# -----\n");</div><div class='del'>-</div><div class='del'>-        dump_call_stack_details (ctx, fd);</div><div class='del'>-        dump_dict_details (ctx, fd);</div><div class='del'>-        dprintf (fd, "# -----\n");</div><div class='del'>-</div><div class='del'>-        dump_inode_stats (ctx, fd);</div><div class='del'>-        dprintf (fd, "# -----\n");</div><div class='add'>+    struct timeval tv;</div><div class='add'>+    time_t nowtime;</div><div class='add'>+    struct tm *nowtm;</div><div class='add'>+    char tmbuf[64] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;tv, NULL);</div><div class='add'>+    nowtime = tv.tv_sec;</div><div class='add'>+    nowtm = localtime(&amp;nowtime);</div><div class='add'>+    strftime(tmbuf, sizeof tmbuf, "%Y-%m-%d %H:%M:%S", nowtm);</div><div class='add'>+</div><div class='add'>+    /* Let every file have information on which process dumped info */</div><div class='add'>+    dprintf(fd, "## %s\n", ctx-&gt;cmdlinestr);</div><div class='add'>+    dprintf(fd, "### %s\n", tmbuf);</div><div class='add'>+    dprintf(fd, "### BrickName: %s\n", ctx-&gt;cmd_args.brick_name);</div><div class='add'>+    dprintf(fd, "### MountName: %s\n", ctx-&gt;cmd_args.mount_point);</div><div class='add'>+    dprintf(fd, "### VolumeName: %s\n", ctx-&gt;cmd_args.volume_name);</div><div class='add'>+</div><div class='add'>+    /* Dump memory accounting */</div><div class='add'>+    dump_global_memory_accounting(fd);</div><div class='add'>+    dprintf(fd, "# -----\n");</div><div class='add'>+</div><div class='add'>+    dump_call_stack_details(ctx, fd);</div><div class='add'>+    dump_dict_details(ctx, fd);</div><div class='add'>+    dprintf(fd, "# -----\n");</div><div class='add'>+</div><div class='add'>+    dump_inode_stats(ctx, fd);</div><div class='add'>+    dprintf(fd, "# -----\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dump_xl_metrics (glusterfs_ctx_t *ctx, int fd)</div><div class='add'>+dump_xl_metrics(glusterfs_ctx_t *ctx, int fd)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *xl;</div><div class='add'>+    xlator_t *xl;</div><div class='ctx'> </div><div class='del'>-        xl = ctx-&gt;active-&gt;top;</div><div class='add'>+    xl = ctx-&gt;active-&gt;top;</div><div class='ctx'> </div><div class='del'>-        while (xl) {</div><div class='del'>-                dump_latency_and_count (xl, fd);</div><div class='del'>-                dump_mem_acct_details (xl, fd);</div><div class='del'>-                if (xl-&gt;dump_metrics)</div><div class='del'>-                        xl-&gt;dump_metrics (xl, fd);</div><div class='del'>-                xl = xl-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    while (xl) {</div><div class='add'>+        dump_latency_and_count(xl, fd);</div><div class='add'>+        dump_mem_acct_details(xl, fd);</div><div class='add'>+        if (xl-&gt;dump_metrics)</div><div class='add'>+            xl-&gt;dump_metrics(xl, fd);</div><div class='add'>+        xl = xl-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;master) {</div><div class='del'>-                xl = ctx-&gt;master;</div><div class='add'>+    if (ctx-&gt;master) {</div><div class='add'>+        xl = ctx-&gt;master;</div><div class='ctx'> </div><div class='del'>-                dump_latency_and_count (xl, fd);</div><div class='del'>-                dump_mem_acct_details (xl, fd);</div><div class='del'>-                if (xl-&gt;dump_metrics)</div><div class='del'>-                        xl-&gt;dump_metrics (xl, fd);</div><div class='del'>-        }</div><div class='add'>+        dump_latency_and_count(xl, fd);</div><div class='add'>+        dump_mem_acct_details(xl, fd);</div><div class='add'>+        if (xl-&gt;dump_metrics)</div><div class='add'>+            xl-&gt;dump_metrics(xl, fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-gf_monitor_metrics (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_monitor_metrics(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int fd = 0;</div><div class='del'>-        char *filepath, *dumppath;</div><div class='del'>-</div><div class='del'>-        dumppath = ctx-&gt;config.metrics_dumppath;</div><div class='del'>-        if (dumppath == NULL) {</div><div class='del'>-                dumppath = GLUSTER_METRICS_DIR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf(&amp;filepath, "%s/gmetrics.XXXXXX", dumppath);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='del'>-        fd = mkstemp (filepath);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                gf_msg ("monitoring", GF_LOG_ERROR, 0, LG_MSG_STRDUP_ERROR,</div><div class='del'>-                        "failed to open tmp file %s (%s)",</div><div class='del'>-                        filepath, strerror (errno));</div><div class='del'>-                GF_FREE (filepath);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dump_global_metrics (ctx, fd);</div><div class='del'>-</div><div class='del'>-        dump_xl_metrics (ctx, fd);</div><div class='del'>-</div><div class='del'>-        /* This below line is used just to capture any errors with dprintf() */</div><div class='del'>-        ret = dprintf (fd, "\n# End of metrics\n");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("monitoring", GF_LOG_WARNING, 0, LG_MSG_STRDUP_ERROR,</div><div class='del'>-                        "dprintf() failed: %s", strerror (errno));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_fsync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("monitoring", GF_LOG_WARNING, 0, LG_MSG_STRDUP_ERROR,</div><div class='del'>-                        "fsync() failed: %s", strerror (errno));</div><div class='del'>-        }</div><div class='del'>-        sys_close (fd);</div><div class='del'>-</div><div class='del'>-        /* Figure this out, not happy with returning this string */</div><div class='del'>-        return filepath;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    char *filepath, *dumppath;</div><div class='add'>+</div><div class='add'>+    dumppath = ctx-&gt;config.metrics_dumppath;</div><div class='add'>+    if (dumppath == NULL) {</div><div class='add'>+        dumppath = GLUSTER_METRICS_DIR;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;filepath, "%s/gmetrics.XXXXXX", dumppath);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='add'>+    fd = mkstemp(filepath);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        gf_msg("monitoring", GF_LOG_ERROR, 0, LG_MSG_STRDUP_ERROR,</div><div class='add'>+               "failed to open tmp file %s (%s)", filepath, strerror(errno));</div><div class='add'>+        GF_FREE(filepath);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dump_global_metrics(ctx, fd);</div><div class='add'>+</div><div class='add'>+    dump_xl_metrics(ctx, fd);</div><div class='add'>+</div><div class='add'>+    /* This below line is used just to capture any errors with dprintf() */</div><div class='add'>+    ret = dprintf(fd, "\n# End of metrics\n");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("monitoring", GF_LOG_WARNING, 0, LG_MSG_STRDUP_ERROR,</div><div class='add'>+               "dprintf() failed: %s", strerror(errno));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_fsync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("monitoring", GF_LOG_WARNING, 0, LG_MSG_STRDUP_ERROR,</div><div class='add'>+               "fsync() failed: %s", strerror(errno));</div><div class='add'>+    }</div><div class='add'>+    sys_close(fd);</div><div class='add'>+</div><div class='add'>+    /* Figure this out, not happy with returning this string */</div><div class='add'>+    return filepath;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c<br/>index a0f04c772e8..30607d2e390 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/options.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/options.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/options.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/options.c</a></div><div class='hunk'>@@ -16,1238 +16,1206 @@</div><div class='ctx'> </div><div class='ctx'> #define GF_OPTION_LIST_EMPTY(_opt) (_opt-&gt;value[0] == NULL)</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_path (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                             volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_path(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                            volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int   ret = -1;</div><div class='del'>-        char  errstr[256];</div><div class='del'>-</div><div class='del'>-        if (strstr (value, "../")) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid path given '%s'",</div><div class='del'>-                          value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-                /* Make sure the given path is valid */</div><div class='del'>-        if (value[0] != '/') {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "option %s %s: '%s' is not an "</div><div class='del'>-                          "absolute path name",</div><div class='del'>-                          key, value, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+</div><div class='add'>+    if (strstr(value, "../")) {</div><div class='add'>+        snprintf(errstr, 256, "invalid path given '%s'", value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Make sure the given path is valid */</div><div class='add'>+    if (value[0] != '/') {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "option %s %s: '%s' is not an "</div><div class='add'>+                 "absolute path name",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_int (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                            volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_int(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                           volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        long long inputll = 0;</div><div class='del'>-        unsigned long long uinputll = 0;</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        char      errstr[256];</div><div class='del'>-</div><div class='del'>-        /* Check the range */</div><div class='del'>-        if (gf_string2longlong (value, &amp;inputll) != 0) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid number format \"%s\" in option \"%s\"",</div><div class='del'>-                          value, key);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Handle '-0' */</div><div class='del'>-        if ((inputll == 0) &amp;&amp; (gf_string2ulonglong (value, &amp;uinputll) != 0)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid number format \"%s\" in option \"%s\"",</div><div class='del'>-                          value, key);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0) &amp;&amp;</div><div class='del'>-            (opt-&gt;validate == GF_OPT_VALIDATE_BOTH)) {</div><div class='del'>-                gf_msg_trace (xl-&gt;name, 0, "no range check required for "</div><div class='del'>-                              "'option %s %s'", key, value);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    long long inputll = 0;</div><div class='add'>+    unsigned long long uinputll = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+</div><div class='add'>+    /* Check the range */</div><div class='add'>+    if (gf_string2longlong(value, &amp;inputll) != 0) {</div><div class='add'>+        snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"",</div><div class='add'>+                 value, key);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Handle '-0' */</div><div class='add'>+    if ((inputll == 0) &amp;&amp; (gf_string2ulonglong(value, &amp;uinputll) != 0)) {</div><div class='add'>+        snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"",</div><div class='add'>+                 value, key);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0) &amp;&amp;</div><div class='add'>+        (opt-&gt;validate == GF_OPT_VALIDATE_BOTH)) {</div><div class='add'>+        gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                     "no range check required for "</div><div class='add'>+                     "'option %s %s'",</div><div class='add'>+                     key, value);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (opt-&gt;validate == GF_OPT_VALIDATE_MIN) {</div><div class='add'>+        if (inputll &lt; opt-&gt;min) {</div><div class='add'>+            snprintf(errstr, 256,</div><div class='add'>+                     "'%lld' in 'option %s %s' is smaller than "</div><div class='add'>+                     "minimum value '%.0f'",</div><div class='add'>+                     inputll, key, value, opt-&gt;min);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (opt-&gt;validate == GF_OPT_VALIDATE_MIN) {</div><div class='del'>-                if (inputll &lt; opt-&gt;min) {</div><div class='del'>-                        snprintf (errstr, 256,</div><div class='del'>-                                  "'%lld' in 'option %s %s' is smaller than "</div><div class='del'>-                                  "minimum value '%.0f'", inputll, key,</div><div class='del'>-                                  value, opt-&gt;min);</div><div class='del'>-                        gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (opt-&gt;validate == GF_OPT_VALIDATE_MAX) {</div><div class='del'>-                if (inputll &gt; opt-&gt;max) {</div><div class='del'>-                        snprintf (errstr, 256,</div><div class='del'>-                                  "'%lld' in 'option %s %s' is greater than "</div><div class='del'>-                                  "maximum value '%.0f'", inputll, key,</div><div class='del'>-                                  value, opt-&gt;max);</div><div class='del'>-                        gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if ((inputll &lt; opt-&gt;min) || (inputll &gt; opt-&gt;max)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "'%lld' in 'option %s %s' is out of range "</div><div class='del'>-                          "[%.0f - %.0f]",</div><div class='del'>-                          inputll, key, value, opt-&gt;min, opt-&gt;max);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='add'>+    } else if (opt-&gt;validate == GF_OPT_VALIDATE_MAX) {</div><div class='add'>+        if (inputll &gt; opt-&gt;max) {</div><div class='add'>+            snprintf(errstr, 256,</div><div class='add'>+                     "'%lld' in 'option %s %s' is greater than "</div><div class='add'>+                     "maximum value '%.0f'",</div><div class='add'>+                     inputll, key, value, opt-&gt;max);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    } else if ((inputll &lt; opt-&gt;min) || (inputll &gt; opt-&gt;max)) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "'%lld' in 'option %s %s' is out of range "</div><div class='add'>+                 "[%.0f - %.0f]",</div><div class='add'>+                 inputll, key, value, opt-&gt;min, opt-&gt;max);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_sizet (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                              volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_sizet(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                             volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        size_t  size = 0;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-        char      errstr[256];</div><div class='del'>-</div><div class='del'>-        /* Check the range */</div><div class='del'>-        if (gf_string2bytesize_size (value, &amp;size) != 0) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid number format \"%s\" in option \"%s\"",</div><div class='del'>-                          value, key);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0)) {</div><div class='del'>-                gf_msg_trace (xl-&gt;name, 0, "no range check required for "</div><div class='del'>-                              "'option %s %s'", key, value);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((size &lt; opt-&gt;min) || (size &gt; opt-&gt;max)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "'%" GF_PRI_SIZET "' in 'option %s %s' "</div><div class='del'>-                          "is out of range [%.0f - %.0f]",</div><div class='del'>-                          size, key, value, opt-&gt;min, opt-&gt;max);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    size_t size = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char errstr[256];</div><div class='add'>+</div><div class='add'>+    /* Check the range */</div><div class='add'>+    if (gf_string2bytesize_size(value, &amp;size) != 0) {</div><div class='add'>+        snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"",</div><div class='add'>+                 value, key);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0)) {</div><div class='add'>+        gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                     "no range check required for "</div><div class='add'>+                     "'option %s %s'",</div><div class='add'>+                     key, value);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((size &lt; opt-&gt;min) || (size &gt; opt-&gt;max)) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "'%" GF_PRI_SIZET</div><div class='add'>+                 "' in 'option %s %s' "</div><div class='add'>+                 "is out of range [%.0f - %.0f]",</div><div class='add'>+                 size, key, value, opt-&gt;min, opt-&gt;max);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_bool (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                             volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_bool(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                            volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         errstr[256];</div><div class='del'>-        gf_boolean_t is_valid;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+    gf_boolean_t is_valid;</div><div class='ctx'> </div><div class='add'>+    /* Check if the value is one of</div><div class='add'>+       '0|1|on|off|no|yes|true|false|enable|disable' */</div><div class='ctx'> </div><div class='del'>-        /* Check if the value is one of</div><div class='del'>-           '0|1|on|off|no|yes|true|false|enable|disable' */</div><div class='add'>+    if (gf_string2boolean(value, &amp;is_valid) != 0) {</div><div class='add'>+        snprintf(errstr, 256, "option %s %s: '%s' is not a valid boolean value",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (gf_string2boolean (value, &amp;is_valid) != 0) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "option %s %s: '%s' is not a valid boolean value",</div><div class='del'>-                          key, value, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_xlator (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                               volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_xlator(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                              volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         errstr[256];</div><div class='del'>-        xlator_t    *xlopt = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Check if the value is one of the xlators */</div><div class='del'>-        xlopt = xl;</div><div class='del'>-        while (xlopt-&gt;prev)</div><div class='del'>-                xlopt = xlopt-&gt;prev;</div><div class='del'>-</div><div class='del'>-        while (xlopt) {</div><div class='del'>-                if (strcmp (value, xlopt-&gt;name) == 0) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                xlopt = xlopt-&gt;next;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+    xlator_t *xlopt = NULL;</div><div class='add'>+</div><div class='add'>+    /* Check if the value is one of the xlators */</div><div class='add'>+    xlopt = xl;</div><div class='add'>+    while (xlopt-&gt;prev)</div><div class='add'>+        xlopt = xlopt-&gt;prev;</div><div class='add'>+</div><div class='add'>+    while (xlopt) {</div><div class='add'>+        if (strcmp(value, xlopt-&gt;name) == 0) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        xlopt = xlopt-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!xlopt) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "option %s %s: '%s' is not a valid volume name",</div><div class='del'>-                          key, value, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!xlopt) {</div><div class='add'>+        snprintf(errstr, 256, "option %s %s: '%s' is not a valid volume name",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_error_str (char *errstr, size_t len, volume_option_t *opt, const char *key,</div><div class='del'>-               const char *value)</div><div class='add'>+set_error_str(char *errstr, size_t len, volume_option_t *opt, const char *key,</div><div class='add'>+              const char *value)</div><div class='ctx'> {</div><div class='del'>-        int i   = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = snprintf (errstr, len, "option %s %s: '%s' is not valid "</div><div class='del'>-                        "(possible options are ", key, value, value);</div><div class='del'>-</div><div class='del'>-        for (i = 0; (i &lt; ZR_OPTION_MAX_ARRAY_SIZE) &amp;&amp; opt-&gt;value[i];) {</div><div class='del'>-                ret += snprintf (errstr + ret, len - ret, "%s", opt-&gt;value[i]);</div><div class='del'>-                if (((++i) &lt; ZR_OPTION_MAX_ARRAY_SIZE) &amp;&amp;</div><div class='del'>-                    (opt-&gt;value[i]))</div><div class='del'>-                        ret += snprintf (errstr + ret, len - ret, ", ");</div><div class='del'>-                else</div><div class='del'>-                        ret += snprintf (errstr + ret, len - ret, ".)");</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = snprintf(errstr, len,</div><div class='add'>+                   "option %s %s: '%s' is not valid "</div><div class='add'>+                   "(possible options are ",</div><div class='add'>+                   key, value, value);</div><div class='add'>+</div><div class='add'>+    for (i = 0; (i &lt; ZR_OPTION_MAX_ARRAY_SIZE) &amp;&amp; opt-&gt;value[i];) {</div><div class='add'>+        ret += snprintf(errstr + ret, len - ret, "%s", opt-&gt;value[i]);</div><div class='add'>+        if (((++i) &lt; ZR_OPTION_MAX_ARRAY_SIZE) &amp;&amp; (opt-&gt;value[i]))</div><div class='add'>+            ret += snprintf(errstr + ret, len - ret, ", ");</div><div class='add'>+        else</div><div class='add'>+            ret += snprintf(errstr + ret, len - ret, ".)");</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-is_all_whitespaces (const char *value)</div><div class='add'>+is_all_whitespaces(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        size_t len = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t len = 0;</div><div class='ctx'> </div><div class='del'>-        if (value == NULL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (value == NULL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        len = strlen (value);</div><div class='add'>+    len = strlen(value);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; len; i++) {</div><div class='del'>-                if (value[i] == ' ')</div><div class='del'>-                        continue;</div><div class='del'>-                else</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; len; i++) {</div><div class='add'>+        if (value[i] == ' ')</div><div class='add'>+            continue;</div><div class='add'>+        else</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 1;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_str (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                            volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_str(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                           volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        int          i = 0;</div><div class='del'>-        char         errstr[4096] = {0,};</div><div class='del'>-</div><div class='del'>-        /* Check if the '*str' is valid */</div><div class='del'>-        if (GF_OPTION_LIST_EMPTY(opt)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (is_all_whitespaces (value) == 1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; (i &lt; ZR_OPTION_MAX_ARRAY_SIZE) &amp;&amp; opt-&gt;value[i]; i++) {</div><div class='del'>- #ifdef  GF_DARWIN_HOST_OS</div><div class='del'>-                if (fnmatch (opt-&gt;value[i], value, 0) == 0) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>- #else</div><div class='del'>-                if (fnmatch (opt-&gt;value[i], value, FNM_EXTMATCH) == 0) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>- #endif</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((i == ZR_OPTION_MAX_ARRAY_SIZE) || (!opt-&gt;value[i]))</div><div class='del'>-                goto out;</div><div class='del'>-                /* enter here only if</div><div class='del'>-                 * 1. reached end of opt-&gt;value array and haven't</div><div class='del'>-                 *    validated input</div><div class='del'>-                 *                      OR</div><div class='del'>-                 * 2. valid input list is less than</div><div class='del'>-                 *    ZR_OPTION_MAX_ARRAY_SIZE and input has not</div><div class='del'>-                 *    matched all possible input values.</div><div class='del'>-                 */</div><div class='del'>-</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char errstr[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* Check if the '*str' is valid */</div><div class='add'>+    if (GF_OPTION_LIST_EMPTY(opt)) {</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                set_error_str (errstr, sizeof (errstr), opt, key, value);</div><div class='add'>+    if (is_all_whitespaces(value) == 1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                if (op_errstr)</div><div class='del'>-                        *op_errstr = gf_strdup (errstr);</div><div class='add'>+    for (i = 0; (i &lt; ZR_OPTION_MAX_ARRAY_SIZE) &amp;&amp; opt-&gt;value[i]; i++) {</div><div class='add'>+#ifdef GF_DARWIN_HOST_OS</div><div class='add'>+        if (fnmatch(opt-&gt;value[i], value, 0) == 0) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-xlator_option_validate_percent (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                                volume_option_t *opt, char **op_errstr)</div><div class='del'>-{</div><div class='del'>-        double    percent = 0;</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        char      errstr[256];</div><div class='del'>-</div><div class='del'>-        /* Check if the value is valid percentage */</div><div class='del'>-        if (gf_string2percent (value, &amp;percent) != 0) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid percent format \"%s\" in \"option %s\"",</div><div class='del'>-                          value, key);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((percent &lt; 0.0) || (percent &gt; 100.0)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "'%lf' in 'option %s %s' is out of range [0 - 100]",</div><div class='del'>-                          percent, key, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='add'>+#else</div><div class='add'>+        if (fnmatch(opt-&gt;value[i], value, FNM_EXTMATCH) == 0) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+#endif</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((i == ZR_OPTION_MAX_ARRAY_SIZE) || (!opt-&gt;value[i]))</div><div class='add'>+        goto out;</div><div class='add'>+    /* enter here only if</div><div class='add'>+     * 1. reached end of opt-&gt;value array and haven't</div><div class='add'>+     *    validated input</div><div class='add'>+     *                      OR</div><div class='add'>+     * 2. valid input list is less than</div><div class='add'>+     *    ZR_OPTION_MAX_ARRAY_SIZE and input has not</div><div class='add'>+     *    matched all possible input values.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        set_error_str(errstr, sizeof(errstr), opt, key, value);</div><div class='add'>+</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        if (op_errstr)</div><div class='add'>+            *op_errstr = gf_strdup(errstr);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_fractional_value (const char *value)</div><div class='add'>+xlator_option_validate_percent(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                               volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        const char *s   = NULL;</div><div class='del'>-        int        ret  = 0;</div><div class='del'>-</div><div class='del'>-        s = strchr (value, '.');</div><div class='del'>-        if (s) {</div><div class='del'>-                for (s = s+1; *s != '\0'; s++) {</div><div class='del'>-                        if (*s != '0') {</div><div class='del'>-                                return -1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    double percent = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+</div><div class='add'>+    /* Check if the value is valid percentage */</div><div class='add'>+    if (gf_string2percent(value, &amp;percent) != 0) {</div><div class='add'>+        snprintf(errstr, 256, "invalid percent format \"%s\" in \"option %s\"",</div><div class='add'>+                 value, key);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((percent &lt; 0.0) || (percent &gt; 100.0)) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "'%lf' in 'option %s %s' is out of range [0 - 100]", percent,</div><div class='add'>+                 key, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_percent_or_sizet (xlator_t *xl, const char *key,</div><div class='del'>-                                         const char *value,</div><div class='del'>-                                         volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_fractional_value(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        char              errstr[256];</div><div class='del'>-        double            size = 0;</div><div class='del'>-	gf_boolean_t is_percent = _gf_false;</div><div class='del'>-</div><div class='del'>-	if (gf_string2percent_or_bytesize (value, &amp;size, &amp;is_percent) == 0) {</div><div class='del'>-		if (is_percent) {</div><div class='del'>-                        if ((size &lt; 0.0) || (size &gt; 100.0)) {</div><div class='del'>-                                snprintf (errstr, sizeof (errstr),</div><div class='del'>-                                          "'%lf' in 'option %s %s' is out"</div><div class='del'>-                                          " of range [0 - 100]", size, key,</div><div class='del'>-                                          value);</div><div class='del'>-                                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-			ret = 0;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                /*Input value of size(in byte) should not be fractional*/</div><div class='del'>-                ret = xlator_option_validate_fractional_value (value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        snprintf (errstr, sizeof (errstr), "'%lf' in 'option %s"</div><div class='del'>-                                  " %s' should not be fractional value. Use "</div><div class='del'>-                                  "valid unsigned integer value.", size, key,</div><div class='del'>-                                  value);</div><div class='del'>-                        gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		/* Check the range */</div><div class='del'>-		if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0)) {</div><div class='del'>-			gf_msg_trace (xl-&gt;name, 0, "no range check required "</div><div class='del'>-                                      "for 'option %s %s'", key, value);</div><div class='del'>-			ret = 0;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-		if ((size &lt; opt-&gt;min) || (size &gt; opt-&gt;max)) {</div><div class='del'>-			snprintf (errstr, 256,</div><div class='del'>-				  "'%lf' in 'option %s %s'"</div><div class='del'>-				  " is out of range [%.0f - %.0f]",</div><div class='del'>-				  size, key, value, opt-&gt;min, opt-&gt;max);</div><div class='del'>-			gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE,</div><div class='del'>-                                "%s", errstr);</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-		ret = 0;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* If control reaches here, invalid argument */</div><div class='del'>-</div><div class='del'>-	snprintf (errstr, 256,</div><div class='del'>-		  "invalid number format \"%s\" in \"option %s\"",</div><div class='del'>-		  value, key);</div><div class='del'>-	gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+    const char *s = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='add'>+    s = strchr(value, '.');</div><div class='add'>+    if (s) {</div><div class='add'>+        for (s = s + 1; *s != '\0'; s++) {</div><div class='add'>+            if (*s != '0') {</div><div class='add'>+                return -1;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_time (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                             volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_percent_or_sizet(xlator_t *xl, const char *key,</div><div class='add'>+                                        const char *value, volume_option_t *opt,</div><div class='add'>+                                        char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         errstr[256];</div><div class='del'>-        uint32_t     input_time = 0;</div><div class='del'>-</div><div class='del'>-	/* Check if the value is valid time */</div><div class='del'>-        if (gf_string2time (value, &amp;input_time) != 0) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid time format \"%s\" in "</div><div class='del'>-                          "\"option %s\"",</div><div class='del'>-                          value, key);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+    double size = 0;</div><div class='add'>+    gf_boolean_t is_percent = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (gf_string2percent_or_bytesize(value, &amp;size, &amp;is_percent) == 0) {</div><div class='add'>+        if (is_percent) {</div><div class='add'>+            if ((size &lt; 0.0) || (size &gt; 100.0)) {</div><div class='add'>+                snprintf(errstr, sizeof(errstr),</div><div class='add'>+                         "'%lf' in 'option %s %s' is out"</div><div class='add'>+                         " of range [0 - 100]",</div><div class='add'>+                         size, key, value);</div><div class='add'>+                gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s",</div><div class='add'>+                       errstr);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0)) {</div><div class='del'>-                gf_msg_trace (xl-&gt;name, 0, "no range check required for "</div><div class='del'>-                              "'option %s %s'", key, value);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+        /*Input value of size(in byte) should not be fractional*/</div><div class='add'>+        ret = xlator_option_validate_fractional_value(value);</div><div class='add'>+        if (ret) {</div><div class='add'>+            snprintf(errstr, sizeof(errstr),</div><div class='add'>+                     "'%lf' in 'option %s"</div><div class='add'>+                     " %s' should not be fractional value. Use "</div><div class='add'>+                     "valid unsigned integer value.",</div><div class='add'>+                     size, key, value);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((input_time &lt; opt-&gt;min) || (input_time &gt; opt-&gt;max)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "'%"PRIu32"' in 'option %s %s' is "</div><div class='del'>-                          "out of range [%.0f - %.0f]",</div><div class='del'>-                          input_time, key, value,</div><div class='del'>-                          opt-&gt;min, opt-&gt;max);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='add'>+        /* Check the range */</div><div class='add'>+        if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0)) {</div><div class='add'>+            gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                         "no range check required "</div><div class='add'>+                         "for 'option %s %s'",</div><div class='add'>+                         key, value);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if ((size &lt; opt-&gt;min) || (size &gt; opt-&gt;max)) {</div><div class='add'>+            snprintf(errstr, 256,</div><div class='add'>+                     "'%lf' in 'option %s %s'"</div><div class='add'>+                     " is out of range [%.0f - %.0f]",</div><div class='add'>+                     size, key, value, opt-&gt;min, opt-&gt;max);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If control reaches here, invalid argument */</div><div class='add'>+</div><div class='add'>+    snprintf(errstr, 256, "invalid number format \"%s\" in \"option %s\"",</div><div class='add'>+             value, key);</div><div class='add'>+    gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_double (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                               volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_time(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                            volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        double    input = 0.0;</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        char      errstr[256];</div><div class='del'>-</div><div class='del'>-        /* Check the range */</div><div class='del'>-        if (gf_string2double (value, &amp;input) != 0) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "invalid number format \"%s\" in option \"%s\"",</div><div class='del'>-                          value, key);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0) &amp;&amp;</div><div class='del'>-            (opt-&gt;validate == GF_OPT_VALIDATE_BOTH)) {</div><div class='del'>-                gf_msg_trace (xl-&gt;name, 0, "no range check required for "</div><div class='del'>-                              "'option %s %s'", key, value);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (opt-&gt;validate == GF_OPT_VALIDATE_MIN) {</div><div class='del'>-                if (input &lt; opt-&gt;min) {</div><div class='del'>-                        snprintf (errstr, 256,</div><div class='del'>-                                  "'%f' in 'option %s %s' is smaller than "</div><div class='del'>-                                  "minimum value '%f'", input, key,</div><div class='del'>-                                  value, opt-&gt;min);</div><div class='del'>-                        gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (opt-&gt;validate == GF_OPT_VALIDATE_MAX) {</div><div class='del'>-                if (input &gt; opt-&gt;max) {</div><div class='del'>-                        snprintf (errstr, 256,</div><div class='del'>-                                  "'%f' in 'option %s %s' is greater than "</div><div class='del'>-                                  "maximum value '%f'", input, key,</div><div class='del'>-                                  value, opt-&gt;max);</div><div class='del'>-                        gf_msg (xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if ((input &lt; opt-&gt;min) || (input &gt; opt-&gt;max)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "'%f' in 'option %s %s' is out of range "</div><div class='del'>-                          "[%f - %f]",</div><div class='del'>-                          input, key, value, opt-&gt;min, opt-&gt;max);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+    uint32_t input_time = 0;</div><div class='add'>+</div><div class='add'>+    /* Check if the value is valid time */</div><div class='add'>+    if (gf_string2time(value, &amp;input_time) != 0) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "invalid time format \"%s\" in "</div><div class='add'>+                 "\"option %s\"",</div><div class='add'>+                 value, key);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0)) {</div><div class='add'>+        gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                     "no range check required for "</div><div class='add'>+                     "'option %s %s'",</div><div class='add'>+                     key, value);</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((input_time &lt; opt-&gt;min) || (input_time &gt; opt-&gt;max)) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "'%" PRIu32</div><div class='add'>+                 "' in 'option %s %s' is "</div><div class='add'>+                 "out of range [%.0f - %.0f]",</div><div class='add'>+                 input_time, key, value, opt-&gt;min, opt-&gt;max);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; op_errstr)</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_addr (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                             volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_double(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                              volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         errstr[256];</div><div class='del'>-</div><div class='del'>-        if (!valid_internet_address ((char *)value, _gf_false)) {</div><div class='del'>-                snprintf (errstr, 256,</div><div class='del'>-                          "option %s %s: '%s'  is not a valid internet-address,"</div><div class='del'>-                          " it does not conform to standards.",</div><div class='del'>-                          key, value, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                if (op_errstr)</div><div class='del'>-                        *op_errstr = gf_strdup (errstr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    double input = 0.0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+</div><div class='add'>+    /* Check the range */</div><div class='add'>+    if (gf_string2double(value, &amp;input) != 0) {</div><div class='add'>+        snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"",</div><div class='add'>+                 value, key);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((opt-&gt;min == 0) &amp;&amp; (opt-&gt;max == 0) &amp;&amp;</div><div class='add'>+        (opt-&gt;validate == GF_OPT_VALIDATE_BOTH)) {</div><div class='add'>+        gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                     "no range check required for "</div><div class='add'>+                     "'option %s %s'",</div><div class='add'>+                     key, value);</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (opt-&gt;validate == GF_OPT_VALIDATE_MIN) {</div><div class='add'>+        if (input &lt; opt-&gt;min) {</div><div class='add'>+            snprintf(errstr, 256,</div><div class='add'>+                     "'%f' in 'option %s %s' is smaller than "</div><div class='add'>+                     "minimum value '%f'",</div><div class='add'>+                     input, key, value, opt-&gt;min);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (opt-&gt;validate == GF_OPT_VALIDATE_MAX) {</div><div class='add'>+        if (input &gt; opt-&gt;max) {</div><div class='add'>+            snprintf(errstr, 256,</div><div class='add'>+                     "'%f' in 'option %s %s' is greater than "</div><div class='add'>+                     "maximum value '%f'",</div><div class='add'>+                     input, key, value, opt-&gt;max);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='add'>+                   errstr);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if ((input &lt; opt-&gt;min) || (input &gt; opt-&gt;max)) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "'%f' in 'option %s %s' is out of range "</div><div class='add'>+                 "[%f - %f]",</div><div class='add'>+                 input, key, value, opt-&gt;min, opt-&gt;max);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ret &amp;&amp; op_errstr)</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+static int</div><div class='add'>+xlator_option_validate_addr(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                            volume_option_t *opt, char **op_errstr)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char errstr[256];</div><div class='add'>+</div><div class='add'>+    if (!valid_internet_address((char *)value, _gf_false)) {</div><div class='add'>+        snprintf(errstr, 256,</div><div class='add'>+                 "option %s %s: '%s'  is not a valid internet-address,"</div><div class='add'>+                 " it does not conform to standards.",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        if (op_errstr)</div><div class='add'>+            *op_errstr = gf_strdup(errstr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_option_validate_addr_list (xlator_t *xl, const char *key,</div><div class='del'>-                                  const char *value, volume_option_t *opt,</div><div class='del'>-                                  char **op_errstr)</div><div class='add'>+xlator_option_validate_addr_list(xlator_t *xl, const char *key,</div><div class='add'>+                                 const char *value, volume_option_t *opt,</div><div class='add'>+                                 char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         *dup_val = NULL;</div><div class='del'>-        char         *addr_tok = NULL;</div><div class='del'>-        char         *save_ptr = NULL;</div><div class='del'>-        char         *entry = NULL;</div><div class='del'>-        char         *entry_ptr = NULL;</div><div class='del'>-        char         *dir_and_addr = NULL;</div><div class='del'>-        char         *addr_ptr = NULL;</div><div class='del'>-        char         *addr_list = NULL;</div><div class='del'>-        char         *addr = NULL;</div><div class='del'>-        char         *dir = NULL;</div><div class='del'>-        char         errstr[4096] = {0,};</div><div class='del'>-</div><div class='del'>-        dup_val = gf_strdup (value);</div><div class='del'>-        if (!dup_val)</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *dup_val = NULL;</div><div class='add'>+    char *addr_tok = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='add'>+    char *entry = NULL;</div><div class='add'>+    char *entry_ptr = NULL;</div><div class='add'>+    char *dir_and_addr = NULL;</div><div class='add'>+    char *addr_ptr = NULL;</div><div class='add'>+    char *addr_list = NULL;</div><div class='add'>+    char *addr = NULL;</div><div class='add'>+    char *dir = NULL;</div><div class='add'>+    char errstr[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    dup_val = gf_strdup(value);</div><div class='add'>+    if (!dup_val)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (dup_val[0] != '/' &amp;&amp; !strchr(dup_val, '(')) {</div><div class='add'>+        /* Possible old format, handle it for back-ward compatibility */</div><div class='add'>+        addr_tok = strtok_r(dup_val, ",", &amp;save_ptr);</div><div class='add'>+        while (addr_tok) {</div><div class='add'>+            if (!valid_internet_address(addr_tok, _gf_true))</div><div class='ctx'>                 goto out;</div><div class='ctx'> </div><div class='del'>-        if (dup_val[0] != '/' &amp;&amp; !strchr (dup_val, '(')) {</div><div class='del'>-                /* Possible old format, handle it for back-ward compatibility */</div><div class='del'>-                addr_tok = strtok_r (dup_val, ",", &amp;save_ptr);</div><div class='del'>-                while (addr_tok) {</div><div class='del'>-                        if (!valid_internet_address (addr_tok, _gf_true))</div><div class='del'>-                                goto out;</div><div class='add'>+            addr_tok = strtok_r(NULL, ",", &amp;save_ptr);</div><div class='add'>+        }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Lets handle the value with new format */</div><div class='add'>+    entry = strtok_r(dup_val, ",", &amp;entry_ptr);</div><div class='add'>+    while (entry) {</div><div class='add'>+        dir_and_addr = gf_strdup(entry);</div><div class='add'>+        if (!dir_and_addr)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        dir = strtok_r(dir_and_addr, "(", &amp;addr_ptr);</div><div class='add'>+        if (dir[0] != '/') {</div><div class='add'>+            /* Valid format should be starting from '/' */</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        /* dir = strtok_r (NULL, " =", &amp;addr_tmp); */</div><div class='add'>+        addr = strtok_r(NULL, ")", &amp;addr_ptr);</div><div class='add'>+        if (!addr)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        addr_list = gf_strdup(addr);</div><div class='add'>+        if (!addr_list)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                        addr_tok = strtok_r (NULL, ",", &amp;save_ptr);</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='add'>+        /* This format be separated by '|' */</div><div class='add'>+        addr_tok = strtok_r(addr_list, "|", &amp;save_ptr);</div><div class='add'>+        if (addr_tok == NULL)</div><div class='add'>+            goto out;</div><div class='add'>+        while (addr_tok) {</div><div class='add'>+            if (!valid_internet_address(addr_tok, _gf_true))</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        /* Lets handle the value with new format */</div><div class='del'>-        entry = strtok_r (dup_val, ",", &amp;entry_ptr);</div><div class='del'>-        while (entry) {</div><div class='del'>-                dir_and_addr = gf_strdup (entry);</div><div class='del'>-                if (!dir_and_addr)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                dir = strtok_r (dir_and_addr, "(", &amp;addr_ptr);</div><div class='del'>-                if (dir[0] != '/') {</div><div class='del'>-                        /* Valid format should be starting from '/' */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* dir = strtok_r (NULL, " =", &amp;addr_tmp); */</div><div class='del'>-                addr = strtok_r (NULL, ")", &amp;addr_ptr);</div><div class='del'>-                if (!addr)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                addr_list = gf_strdup (addr);</div><div class='del'>-                if (!addr_list)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                /* This format be separated by '|' */</div><div class='del'>-                addr_tok = strtok_r (addr_list, "|", &amp;save_ptr);</div><div class='del'>-                if (addr_tok == NULL)</div><div class='del'>-                        goto out;</div><div class='del'>-                while (addr_tok) {</div><div class='del'>-                        if (!valid_internet_address (addr_tok, _gf_true))</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        addr_tok = strtok_r (NULL, "|", &amp;save_ptr);</div><div class='del'>-                }</div><div class='del'>-                entry = strtok_r (NULL, ",", &amp;entry_ptr);</div><div class='del'>-                GF_FREE (dir_and_addr);</div><div class='del'>-                GF_FREE (addr_list);</div><div class='del'>-                addr_list = NULL;</div><div class='del'>-                dir_and_addr = NULL;</div><div class='add'>+            addr_tok = strtok_r(NULL, "|", &amp;save_ptr);</div><div class='ctx'>         }</div><div class='add'>+        entry = strtok_r(NULL, ",", &amp;entry_ptr);</div><div class='add'>+        GF_FREE(dir_and_addr);</div><div class='add'>+        GF_FREE(addr_list);</div><div class='add'>+        addr_list = NULL;</div><div class='add'>+        dir_and_addr = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                snprintf (errstr, sizeof (errstr), "option %s %s: '%s' is not "</div><div class='del'>-                          "a valid internet-address-list", key, value, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                if (op_errstr)</div><div class='del'>-                        *op_errstr = gf_strdup (errstr);</div><div class='del'>-        }</div><div class='del'>-        GF_FREE (dup_val);</div><div class='del'>-        GF_FREE (dir_and_addr);</div><div class='del'>-        GF_FREE (addr_list);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        snprintf(errstr, sizeof(errstr),</div><div class='add'>+                 "option %s %s: '%s' is not "</div><div class='add'>+                 "a valid internet-address-list",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        if (op_errstr)</div><div class='add'>+            *op_errstr = gf_strdup(errstr);</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(dup_val);</div><div class='add'>+    GF_FREE(dir_and_addr);</div><div class='add'>+    GF_FREE(addr_list);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_mntauth (xlator_t *xl, const char *key,</div><div class='del'>-                                const char *value, volume_option_t *opt,</div><div class='del'>-                                char **op_errstr)</div><div class='add'>+xlator_option_validate_mntauth(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                               volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         *dup_val = NULL;</div><div class='del'>-        char         *addr_tok = NULL;</div><div class='del'>-        char         *save_ptr = NULL;</div><div class='del'>-        char         errstr[4096] = {0,};</div><div class='del'>-</div><div class='del'>-        dup_val = gf_strdup (value);</div><div class='del'>-        if (!dup_val)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        addr_tok = strtok_r (dup_val, ",", &amp;save_ptr);</div><div class='del'>-        if (addr_tok == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-        while (addr_tok) {</div><div class='del'>-                if (!valid_mount_auth_address (addr_tok))</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                addr_tok = strtok_r (NULL, ",", &amp;save_ptr);</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *dup_val = NULL;</div><div class='add'>+    char *addr_tok = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='add'>+    char errstr[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    dup_val = gf_strdup(value);</div><div class='add'>+    if (!dup_val)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    addr_tok = strtok_r(dup_val, ",", &amp;save_ptr);</div><div class='add'>+    if (addr_tok == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+    while (addr_tok) {</div><div class='add'>+        if (!valid_mount_auth_address(addr_tok))</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        addr_tok = strtok_r(NULL, ",", &amp;save_ptr);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                snprintf (errstr, sizeof (errstr), "option %s %s: '%s' is not "</div><div class='del'>-                "a valid mount-auth-address", key, value, value);</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='del'>-                        errstr);</div><div class='del'>-                if (op_errstr)</div><div class='del'>-                        *op_errstr = gf_strdup (errstr);</div><div class='del'>-        }</div><div class='del'>-        GF_FREE (dup_val);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        snprintf(errstr, sizeof(errstr),</div><div class='add'>+                 "option %s %s: '%s' is not "</div><div class='add'>+                 "a valid mount-auth-address",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr);</div><div class='add'>+        if (op_errstr)</div><div class='add'>+            *op_errstr = gf_strdup(errstr);</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(dup_val);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*XXX: the rules to validate are as per block-size required for stripe xlator */</div><div class='ctx'> static int</div><div class='del'>-gf_validate_size (const char *sizestr, volume_option_t *opt)</div><div class='add'>+gf_validate_size(const char *sizestr, volume_option_t *opt)</div><div class='ctx'> {</div><div class='del'>-        size_t                value = 0;</div><div class='del'>-        int                     ret = 0;</div><div class='add'>+    size_t value = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (opt);</div><div class='add'>+    GF_ASSERT(opt);</div><div class='ctx'> </div><div class='del'>-        if (gf_string2bytesize_size (sizestr, &amp;value) != 0 ||</div><div class='del'>-            value &lt; opt-&gt;min ||</div><div class='del'>-            value % 512) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (gf_string2bytesize_size(sizestr, &amp;value) != 0 || value &lt; opt-&gt;min ||</div><div class='add'>+        value % 512) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_validate_number (const char *numstr, volume_option_t *opt)</div><div class='add'>+gf_validate_number(const char *numstr, volume_option_t *opt)</div><div class='ctx'> {</div><div class='del'>-        int32_t value;</div><div class='del'>-        return gf_string2int32 (numstr, &amp;value);</div><div class='add'>+    int32_t value;</div><div class='add'>+    return gf_string2int32(numstr, &amp;value);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*  Parses the string to be of the form &lt;key1&gt;:&lt;value1&gt;,&lt;key2&gt;:&lt;value2&gt;...  *</div><div class='ctx'>  *  takes two optional validaters key_validator and value_validator         */</div><div class='ctx'> static int</div><div class='del'>-validate_list_elements (const char *string, volume_option_t *opt,</div><div class='del'>-                        int (key_validator)( const char *),</div><div class='del'>-                        int (value_validator)( const char *, volume_option_t *))</div><div class='add'>+validate_list_elements(const char *string, volume_option_t *opt,</div><div class='add'>+                       int(key_validator)(const char *),</div><div class='add'>+                       int(value_validator)(const char *, volume_option_t *))</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        char                    *dup_string = NULL;</div><div class='del'>-        char                    *str_sav = NULL;</div><div class='del'>-        char                    *substr_sav = NULL;</div><div class='del'>-        char                    *str_ptr = NULL;</div><div class='del'>-        char                    *key = NULL;</div><div class='del'>-        char                    *value = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (string);</div><div class='del'>-</div><div class='del'>-        dup_string = gf_strdup (string);</div><div class='del'>-        if (NULL == dup_string)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        str_ptr = strtok_r (dup_string, ",", &amp;str_sav);</div><div class='del'>-        if (str_ptr == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    char *dup_string = NULL;</div><div class='add'>+    char *str_sav = NULL;</div><div class='add'>+    char *substr_sav = NULL;</div><div class='add'>+    char *str_ptr = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(string);</div><div class='add'>+</div><div class='add'>+    dup_string = gf_strdup(string);</div><div class='add'>+    if (NULL == dup_string)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    str_ptr = strtok_r(dup_string, ",", &amp;str_sav);</div><div class='add'>+    if (str_ptr == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    while (str_ptr) {</div><div class='add'>+        key = strtok_r(str_ptr, ":", &amp;substr_sav);</div><div class='add'>+        if (!key || (key_validator &amp;&amp; key_validator(key))) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+                   "invalid list '%s', key "</div><div class='add'>+                   "'%s' not valid.",</div><div class='add'>+                   string, key);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        while (str_ptr) {</div><div class='del'>-</div><div class='del'>-                key = strtok_r (str_ptr, ":", &amp;substr_sav);</div><div class='del'>-                if (!key ||</div><div class='del'>-                    (key_validator &amp;&amp; key_validator(key))) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "invalid list '%s', key "</div><div class='del'>-                                "'%s' not valid.", string, key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                value = strtok_r (NULL, ":", &amp;substr_sav);</div><div class='del'>-                if (!value ||</div><div class='del'>-                    (value_validator &amp;&amp; value_validator(value, opt))) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "invalid list '%s', "</div><div class='del'>-                                "value '%s' not valid.", string, key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                str_ptr = strtok_r (NULL, ",", &amp;str_sav);</div><div class='del'>-                substr_sav = NULL;</div><div class='add'>+</div><div class='add'>+        value = strtok_r(NULL, ":", &amp;substr_sav);</div><div class='add'>+        if (!value || (value_validator &amp;&amp; value_validator(value, opt))) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+                   "invalid list '%s', "</div><div class='add'>+                   "value '%s' not valid.",</div><div class='add'>+                   string, key);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        GF_FREE (dup_string);</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+        str_ptr = strtok_r(NULL, ",", &amp;str_sav);</div><div class='add'>+        substr_sav = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    GF_FREE(dup_string);</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_priority_list (xlator_t *xl, const char *key,</div><div class='del'>-                                      const char *value, volume_option_t *opt,</div><div class='del'>-                                      char **op_errstr)</div><div class='add'>+xlator_option_validate_priority_list(xlator_t *xl, const char *key,</div><div class='add'>+                                     const char *value, volume_option_t *opt,</div><div class='add'>+                                     char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int                     ret =0;</div><div class='del'>-        char                    errstr[1024] = {0, };</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (value);</div><div class='del'>-</div><div class='del'>-        ret = validate_list_elements (value, opt, NULL, &amp;gf_validate_number);</div><div class='del'>-        if (ret) {</div><div class='del'>-                snprintf (errstr, 1024,</div><div class='del'>-                          "option %s %s: '%s' is not a valid "</div><div class='del'>-                          "priority-list", key, value, value);</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char errstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(value);</div><div class='add'>+</div><div class='add'>+    ret = validate_list_elements(value, opt, NULL, &amp;gf_validate_number);</div><div class='add'>+    if (ret) {</div><div class='add'>+        snprintf(errstr, 1024,</div><div class='add'>+                 "option %s %s: '%s' is not a valid "</div><div class='add'>+                 "priority-list",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_size_list (xlator_t *xl, const char *key,</div><div class='del'>-                                  const char *value, volume_option_t *opt,</div><div class='del'>-                                  char **op_errstr)</div><div class='add'>+xlator_option_validate_size_list(xlator_t *xl, const char *key,</div><div class='add'>+                                 const char *value, volume_option_t *opt,</div><div class='add'>+                                 char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int                    ret = 0;</div><div class='del'>-        char                   errstr[1024] = {0, };</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (value);</div><div class='del'>-</div><div class='del'>-        ret = gf_validate_size (value, opt);</div><div class='del'>-        if (ret)</div><div class='del'>-                ret = validate_list_elements (value, opt, NULL, &amp;gf_validate_size);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                snprintf (errstr, 1024,</div><div class='del'>-                          "option %s %s: '%s' is not a valid "</div><div class='del'>-                          "size-list", key, value, value);</div><div class='del'>-                *op_errstr = gf_strdup (errstr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char errstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(value);</div><div class='add'>+</div><div class='add'>+    ret = gf_validate_size(value, opt);</div><div class='add'>+    if (ret)</div><div class='add'>+        ret = validate_list_elements(value, opt, NULL, &amp;gf_validate_size);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        snprintf(errstr, 1024,</div><div class='add'>+                 "option %s %s: '%s' is not a valid "</div><div class='add'>+                 "size-list",</div><div class='add'>+                 key, value, value);</div><div class='add'>+        *op_errstr = gf_strdup(errstr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_option_validate_any (xlator_t *xl, const char *key, const char *value,</div><div class='del'>-                            volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate_any(xlator_t *xl, const char *key, const char *value,</div><div class='add'>+                           volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-typedef int (xlator_option_validator_t) (xlator_t *xl, const char *key,</div><div class='del'>-                                         const char *value,</div><div class='del'>-                                         volume_option_t *opt, char **operrstr);</div><div class='add'>+typedef int(xlator_option_validator_t)(xlator_t *xl, const char *key,</div><div class='add'>+                                       const char *value, volume_option_t *opt,</div><div class='add'>+                                       char **operrstr);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_option_validate (xlator_t *xl, char *key, char *value,</div><div class='del'>-                        volume_option_t *opt, char **op_errstr)</div><div class='add'>+xlator_option_validate(xlator_t *xl, char *key, char *value,</div><div class='add'>+                       volume_option_t *opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        xlator_option_validator_t *validate;</div><div class='del'>-        xlator_option_validator_t *validators[] = {</div><div class='del'>-                [GF_OPTION_TYPE_PATH]        = xlator_option_validate_path,</div><div class='del'>-                [GF_OPTION_TYPE_INT]         = xlator_option_validate_int,</div><div class='del'>-                [GF_OPTION_TYPE_SIZET]       = xlator_option_validate_sizet,</div><div class='del'>-                [GF_OPTION_TYPE_BOOL]        = xlator_option_validate_bool,</div><div class='del'>-                [GF_OPTION_TYPE_XLATOR]      = xlator_option_validate_xlator,</div><div class='del'>-                [GF_OPTION_TYPE_STR]         = xlator_option_validate_str,</div><div class='del'>-                [GF_OPTION_TYPE_PERCENT]     = xlator_option_validate_percent,</div><div class='del'>-                [GF_OPTION_TYPE_PERCENT_OR_SIZET] =</div><div class='del'>-                xlator_option_validate_percent_or_sizet,</div><div class='del'>-                [GF_OPTION_TYPE_TIME]        = xlator_option_validate_time,</div><div class='del'>-                [GF_OPTION_TYPE_DOUBLE]      = xlator_option_validate_double,</div><div class='del'>-                [GF_OPTION_TYPE_INTERNET_ADDRESS] = xlator_option_validate_addr,</div><div class='del'>-                [GF_OPTION_TYPE_INTERNET_ADDRESS_LIST] =</div><div class='del'>-                xlator_option_validate_addr_list,</div><div class='del'>-                [GF_OPTION_TYPE_PRIORITY_LIST] =</div><div class='del'>-                xlator_option_validate_priority_list,</div><div class='del'>-                [GF_OPTION_TYPE_SIZE_LIST]   = xlator_option_validate_size_list,</div><div class='del'>-                [GF_OPTION_TYPE_ANY]         = xlator_option_validate_any,</div><div class='del'>-                [GF_OPTION_TYPE_CLIENT_AUTH_ADDR] = xlator_option_validate_mntauth,</div><div class='del'>-                [GF_OPTION_TYPE_MAX]         = NULL,</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        if (opt-&gt;type &gt; GF_OPTION_TYPE_MAX) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "unknown option type '%d'", opt-&gt;type);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        validate = validators[opt-&gt;type];</div><div class='del'>-</div><div class='del'>-        ret = validate (xl, key, value, opt, op_errstr);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_option_validator_t *validate;</div><div class='add'>+    xlator_option_validator_t *validators[] = {</div><div class='add'>+        [GF_OPTION_TYPE_PATH] = xlator_option_validate_path,</div><div class='add'>+        [GF_OPTION_TYPE_INT] = xlator_option_validate_int,</div><div class='add'>+        [GF_OPTION_TYPE_SIZET] = xlator_option_validate_sizet,</div><div class='add'>+        [GF_OPTION_TYPE_BOOL] = xlator_option_validate_bool,</div><div class='add'>+        [GF_OPTION_TYPE_XLATOR] = xlator_option_validate_xlator,</div><div class='add'>+        [GF_OPTION_TYPE_STR] = xlator_option_validate_str,</div><div class='add'>+        [GF_OPTION_TYPE_PERCENT] = xlator_option_validate_percent,</div><div class='add'>+        [GF_OPTION_TYPE_PERCENT_OR_SIZET] =</div><div class='add'>+            xlator_option_validate_percent_or_sizet,</div><div class='add'>+        [GF_OPTION_TYPE_TIME] = xlator_option_validate_time,</div><div class='add'>+        [GF_OPTION_TYPE_DOUBLE] = xlator_option_validate_double,</div><div class='add'>+        [GF_OPTION_TYPE_INTERNET_ADDRESS] = xlator_option_validate_addr,</div><div class='add'>+        [GF_OPTION_TYPE_INTERNET_ADDRESS_LIST] =</div><div class='add'>+            xlator_option_validate_addr_list,</div><div class='add'>+        [GF_OPTION_TYPE_PRIORITY_LIST] = xlator_option_validate_priority_list,</div><div class='add'>+        [GF_OPTION_TYPE_SIZE_LIST] = xlator_option_validate_size_list,</div><div class='add'>+        [GF_OPTION_TYPE_ANY] = xlator_option_validate_any,</div><div class='add'>+        [GF_OPTION_TYPE_CLIENT_AUTH_ADDR] = xlator_option_validate_mntauth,</div><div class='add'>+        [GF_OPTION_TYPE_MAX] = NULL,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (opt-&gt;type &gt; GF_OPTION_TYPE_MAX) {</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "unknown option type '%d'", opt-&gt;type);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    validate = validators[opt-&gt;type];</div><div class='add'>+</div><div class='add'>+    ret = validate(xl, key, value, opt, op_errstr);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> volume_option_t *</div><div class='del'>-xlator_volume_option_get_list (volume_opt_list_t *vol_list, const char *key)</div><div class='add'>+xlator_volume_option_get_list(volume_opt_list_t *vol_list, const char *key)</div><div class='ctx'> {</div><div class='del'>-        volume_option_t         *opt = NULL;</div><div class='del'>-        volume_opt_list_t       *opt_list = NULL;</div><div class='del'>-        volume_option_t         *found = NULL;</div><div class='del'>-        int                      index = 0;</div><div class='del'>-        int                      i = 0;</div><div class='del'>-        char                    *cmp_key = NULL;</div><div class='del'>-</div><div class='del'>-        if (!vol_list-&gt;given_opt) {</div><div class='del'>-                opt_list = list_entry (vol_list-&gt;list.next, volume_opt_list_t,</div><div class='del'>-                                       list);</div><div class='del'>-                opt = opt_list-&gt;given_opt;</div><div class='del'>-        } else</div><div class='del'>-                opt = vol_list-&gt;given_opt;</div><div class='del'>-</div><div class='del'>-        for (index = 0; opt[index].key[0]; index++) {</div><div class='del'>-                for (i = 0; i &lt; ZR_VOLUME_MAX_NUM_KEY; i++) {</div><div class='del'>-                        cmp_key = opt[index].key[i];</div><div class='del'>-                        if (!cmp_key)</div><div class='del'>-                                break;</div><div class='del'>-                        if (fnmatch (cmp_key, key, FNM_NOESCAPE) == 0) {</div><div class='del'>-                                found = &amp;opt[index];</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    volume_option_t *opt = NULL;</div><div class='add'>+    volume_opt_list_t *opt_list = NULL;</div><div class='add'>+    volume_option_t *found = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *cmp_key = NULL;</div><div class='add'>+</div><div class='add'>+    if (!vol_list-&gt;given_opt) {</div><div class='add'>+        opt_list = list_entry(vol_list-&gt;list.next, volume_opt_list_t, list);</div><div class='add'>+        opt = opt_list-&gt;given_opt;</div><div class='add'>+    } else</div><div class='add'>+        opt = vol_list-&gt;given_opt;</div><div class='add'>+</div><div class='add'>+    for (index = 0; opt[index].key[0]; index++) {</div><div class='add'>+        for (i = 0; i &lt; ZR_VOLUME_MAX_NUM_KEY; i++) {</div><div class='add'>+            cmp_key = opt[index].key[i];</div><div class='add'>+            if (!cmp_key)</div><div class='add'>+                break;</div><div class='add'>+            if (fnmatch(cmp_key, key, FNM_NOESCAPE) == 0) {</div><div class='add'>+                found = &amp;opt[index];</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> volume_option_t *</div><div class='del'>-xlator_volume_option_get (xlator_t *xl, const char *key)</div><div class='add'>+xlator_volume_option_get(xlator_t *xl, const char *key)</div><div class='ctx'> {</div><div class='del'>-        volume_opt_list_t       *vol_list = NULL;</div><div class='del'>-        volume_option_t         *found = NULL;</div><div class='add'>+    volume_opt_list_t *vol_list = NULL;</div><div class='add'>+    volume_option_t *found = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (vol_list, &amp;xl-&gt;volume_options, list) {</div><div class='del'>-                found = xlator_volume_option_get_list (vol_list, key);</div><div class='del'>-                if (found)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(vol_list, &amp;xl-&gt;volume_options, list)</div><div class='add'>+    {</div><div class='add'>+        found = xlator_volume_option_get_list(vol_list, key);</div><div class='add'>+        if (found)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xl_opt_validate (dict_t *dict, char *key, data_t *value, void *data)</div><div class='add'>+xl_opt_validate(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t          *xl = NULL;</div><div class='del'>-        volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-        volume_option_t   *opt = NULL;</div><div class='del'>-        int                ret = 0;</div><div class='del'>-        char              *errstr = NULL;</div><div class='del'>-</div><div class='del'>-        struct {</div><div class='del'>-                xlator_t           *this;</div><div class='del'>-                volume_opt_list_t  *vol_opt;</div><div class='del'>-                char               *errstr;</div><div class='del'>-        } *stub;</div><div class='del'>-</div><div class='del'>-        stub = data;</div><div class='del'>-        xl = stub-&gt;this;</div><div class='del'>-        vol_opt = stub-&gt;vol_opt;</div><div class='del'>-</div><div class='del'>-        opt = xlator_volume_option_get_list (vol_opt, key);</div><div class='del'>-        if (!opt)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        ret = xlator_option_validate (xl, key, value-&gt;data, opt, &amp;errstr);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_VALIDATE_RETURNS,</div><div class='del'>-                        "validate of %s returned %d", key, ret);</div><div class='del'>-</div><div class='del'>-        if (errstr)</div><div class='del'>-                /* possible small leak of previously set stub-&gt;errstr */</div><div class='del'>-                stub-&gt;errstr = errstr;</div><div class='del'>-</div><div class='del'>-        if (fnmatch (opt-&gt;key[0], key, FNM_NOESCAPE) != 0) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "option '%s' is deprecated, preferred is '%s', "</div><div class='del'>-                        "continuing with correction", key, opt-&gt;key[0]);</div><div class='del'>-                dict_set (dict, opt-&gt;key[0], value);</div><div class='del'>-                dict_del (dict, key);</div><div class='del'>-        }</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+    volume_option_t *opt = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *errstr = NULL;</div><div class='add'>+</div><div class='add'>+    struct {</div><div class='add'>+        xlator_t *this;</div><div class='add'>+        volume_opt_list_t *vol_opt;</div><div class='add'>+        char *errstr;</div><div class='add'>+    } * stub;</div><div class='add'>+</div><div class='add'>+    stub = data;</div><div class='add'>+    xl = stub-&gt;this;</div><div class='add'>+    vol_opt = stub-&gt;vol_opt;</div><div class='add'>+</div><div class='add'>+    opt = xlator_volume_option_get_list(vol_opt, key);</div><div class='add'>+    if (!opt)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    ret = xlator_option_validate(xl, key, value-&gt;data, opt, &amp;errstr);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_VALIDATE_RETURNS,</div><div class='add'>+               "validate of %s returned %d", key, ret);</div><div class='add'>+</div><div class='add'>+    if (errstr)</div><div class='add'>+        /* possible small leak of previously set stub-&gt;errstr */</div><div class='add'>+        stub-&gt;errstr = errstr;</div><div class='add'>+</div><div class='add'>+    if (fnmatch(opt-&gt;key[0], key, FNM_NOESCAPE) != 0) {</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "option '%s' is deprecated, preferred is '%s', "</div><div class='add'>+               "continuing with correction",</div><div class='add'>+               key, opt-&gt;key[0]);</div><div class='add'>+        dict_set(dict, opt-&gt;key[0], value);</div><div class='add'>+        dict_del(dict, key);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_options_validate_list (xlator_t *xl, dict_t *options,</div><div class='del'>-                              volume_opt_list_t *vol_opt, char **op_errstr)</div><div class='add'>+xlator_options_validate_list(xlator_t *xl, dict_t *options,</div><div class='add'>+                             volume_opt_list_t *vol_opt, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        struct {</div><div class='del'>-                xlator_t           *this;</div><div class='del'>-                volume_opt_list_t  *vol_opt;</div><div class='del'>-                char               *errstr;</div><div class='del'>-        } stub;</div><div class='del'>-</div><div class='del'>-        stub.this = xl;</div><div class='del'>-        stub.vol_opt = vol_opt;</div><div class='del'>-        stub.errstr = NULL;</div><div class='del'>-</div><div class='del'>-        dict_foreach (options, xl_opt_validate, &amp;stub);</div><div class='del'>-        if (stub.errstr) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                if (op_errstr)</div><div class='del'>-                        *op_errstr = stub.errstr;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct {</div><div class='add'>+        xlator_t *this;</div><div class='add'>+        volume_opt_list_t *vol_opt;</div><div class='add'>+        char *errstr;</div><div class='add'>+    } stub;</div><div class='add'>+</div><div class='add'>+    stub.this = xl;</div><div class='add'>+    stub.vol_opt = vol_opt;</div><div class='add'>+    stub.errstr = NULL;</div><div class='add'>+</div><div class='add'>+    dict_foreach(options, xl_opt_validate, &amp;stub);</div><div class='add'>+    if (stub.errstr) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        if (op_errstr)</div><div class='add'>+            *op_errstr = stub.errstr;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_options_validate (xlator_t *xl, dict_t *options, char **op_errstr)</div><div class='add'>+xlator_options_validate(xlator_t *xl, dict_t *options, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int                ret     = 0;</div><div class='del'>-        volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (!xl) {</div><div class='del'>-                gf_msg_debug (THIS-&gt;name, 0, "'this' not a valid ptr");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;xl-&gt;volume_options))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (vol_opt, &amp;xl-&gt;volume_options, list) {</div><div class='del'>-                ret = xlator_options_validate_list (xl, options, vol_opt,</div><div class='del'>-                                                    op_errstr);</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+</div><div class='add'>+    if (!xl) {</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, 0, "'this' not a valid ptr");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;xl-&gt;volume_options))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(vol_opt, &amp;xl-&gt;volume_options, list)</div><div class='add'>+    {</div><div class='add'>+        ret = xlator_options_validate_list(xl, options, vol_opt, op_errstr);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_validate_rec (xlator_t *xlator, char **op_errstr)</div><div class='add'>+xlator_validate_rec(xlator_t *xlator, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        int            ret  = -1;</div><div class='del'>-        xlator_list_t *trav = NULL;</div><div class='del'>-        xlator_t      *old_THIS = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xlator, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        trav = xlator-&gt;children;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xlator, out);</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                if (xlator_validate_rec (trav-&gt;xlator, op_errstr)) {</div><div class='del'>-                        gf_msg ("xlator", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_VALIDATE_REC_FAILED, "validate_rec "</div><div class='del'>-                                "failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    trav = xlator-&gt;children;</div><div class='ctx'> </div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (xlator_validate_rec(trav-&gt;xlator, op_errstr)) {</div><div class='add'>+            gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_VALIDATE_REC_FAILED,</div><div class='add'>+                   "validate_rec "</div><div class='add'>+                   "failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xlator_dynload (xlator))</div><div class='del'>-                gf_msg_debug (xlator-&gt;name, 0, "Did not load the symbols");</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = xlator;</div><div class='add'>+    if (xlator_dynload(xlator))</div><div class='add'>+        gf_msg_debug(xlator-&gt;name, 0, "Did not load the symbols");</div><div class='ctx'> </div><div class='del'>-        /* Need this here, as this graph has not yet called init() */</div><div class='del'>-        if (!xlator-&gt;mem_acct) {</div><div class='del'>-                if (!xlator-&gt;mem_acct_init)</div><div class='del'>-                        xlator-&gt;mem_acct_init = default_mem_acct_init;</div><div class='del'>-                xlator-&gt;mem_acct_init (xlator);</div><div class='del'>-        }</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = xlator;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_options_validate (xlator, xlator-&gt;options, op_errstr);</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    /* Need this here, as this graph has not yet called init() */</div><div class='add'>+    if (!xlator-&gt;mem_acct) {</div><div class='add'>+        if (!xlator-&gt;mem_acct_init)</div><div class='add'>+            xlator-&gt;mem_acct_init = default_mem_acct_init;</div><div class='add'>+        xlator-&gt;mem_acct_init(xlator);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (xlator-&gt;name, GF_LOG_INFO, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "%s", *op_errstr);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_options_validate(xlator, xlator-&gt;options, op_errstr);</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (xlator-&gt;name, 0, "Validated options");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(xlator-&gt;name, GF_LOG_INFO, 0, LG_MSG_INVALID_ENTRY, "%s",</div><div class='add'>+               *op_errstr);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    gf_msg_debug(xlator-&gt;name, 0, "Validated options");</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-graph_reconf_validateopt (glusterfs_graph_t *graph, char **op_errstr)</div><div class='add'>+graph_reconf_validateopt(glusterfs_graph_t *graph, char **op_errstr)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *xlator = NULL;</div><div class='del'>-        int       ret = -1;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (graph);</div><div class='add'>+    GF_ASSERT(graph);</div><div class='ctx'> </div><div class='del'>-        xlator = graph-&gt;first;</div><div class='add'>+    xlator = graph-&gt;first;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_validate_rec (xlator, op_errstr);</div><div class='add'>+    ret = xlator_validate_rec(xlator, op_errstr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xlator_reconfigure_rec (xlator_t *old_xl, xlator_t *new_xl)</div><div class='add'>+xlator_reconfigure_rec(xlator_t *old_xl, xlator_t *new_xl)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *trav1    = NULL;</div><div class='del'>-        xlator_list_t *trav2    = NULL;</div><div class='del'>-        int32_t        ret      = -1;</div><div class='del'>-        xlator_t      *old_THIS = NULL;</div><div class='add'>+    xlator_list_t *trav1 = NULL;</div><div class='add'>+    xlator_list_t *trav2 = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", old_xl, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", new_xl, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", old_xl, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", new_xl, out);</div><div class='ctx'> </div><div class='del'>-        trav1 = old_xl-&gt;children;</div><div class='del'>-        trav2 = new_xl-&gt;children;</div><div class='add'>+    trav1 = old_xl-&gt;children;</div><div class='add'>+    trav2 = new_xl-&gt;children;</div><div class='ctx'> </div><div class='del'>-        while (trav1 &amp;&amp; trav2) {</div><div class='del'>-                ret = xlator_reconfigure_rec (trav1-&gt;xlator, trav2-&gt;xlator);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    while (trav1 &amp;&amp; trav2) {</div><div class='add'>+        ret = xlator_reconfigure_rec(trav1-&gt;xlator, trav2-&gt;xlator);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (trav1-&gt;xlator-&gt;name, 0, "reconfigured");</div><div class='add'>+        gf_msg_debug(trav1-&gt;xlator-&gt;name, 0, "reconfigured");</div><div class='ctx'> </div><div class='del'>-                trav1 = trav1-&gt;next;</div><div class='del'>-                trav2 = trav2-&gt;next;</div><div class='del'>-        }</div><div class='add'>+        trav1 = trav1-&gt;next;</div><div class='add'>+        trav2 = trav2-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (old_xl-&gt;reconfigure) {</div><div class='del'>-                old_THIS = THIS;</div><div class='del'>-                THIS = old_xl;</div><div class='add'>+    if (old_xl-&gt;reconfigure) {</div><div class='add'>+        old_THIS = THIS;</div><div class='add'>+        THIS = old_xl;</div><div class='ctx'> </div><div class='del'>-                xlator_init_lock ();</div><div class='del'>-                ret = old_xl-&gt;reconfigure (old_xl, new_xl-&gt;options);</div><div class='del'>-                xlator_init_unlock ();</div><div class='add'>+        xlator_init_lock();</div><div class='add'>+        ret = old_xl-&gt;reconfigure(old_xl, new_xl-&gt;options);</div><div class='add'>+        xlator_init_unlock();</div><div class='ctx'> </div><div class='del'>-                THIS = old_THIS;</div><div class='add'>+        THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (old_xl-&gt;name, 0, "No reconfigure() found");</div><div class='del'>-        }</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(old_xl-&gt;name, 0, "No reconfigure() found");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_tree_reconfigure (xlator_t *old_xl, xlator_t *new_xl)</div><div class='add'>+xlator_tree_reconfigure(xlator_t *old_xl, xlator_t *new_xl)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *new_top = NULL;</div><div class='del'>-        xlator_t *old_top = NULL;</div><div class='add'>+    xlator_t *new_top = NULL;</div><div class='add'>+    xlator_t *old_top = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (old_xl);</div><div class='del'>-        GF_ASSERT (new_xl);</div><div class='add'>+    GF_ASSERT(old_xl);</div><div class='add'>+    GF_ASSERT(new_xl);</div><div class='ctx'> </div><div class='del'>-        old_top = old_xl;</div><div class='del'>-        new_top = new_xl;</div><div class='add'>+    old_top = old_xl;</div><div class='add'>+    new_top = new_xl;</div><div class='ctx'> </div><div class='del'>-        return xlator_reconfigure_rec (old_top, new_top);</div><div class='add'>+    return xlator_reconfigure_rec(old_top, new_top);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_option_info_list (volume_opt_list_t *list, char *key,</div><div class='del'>-                         char **def_val, char **descr)</div><div class='add'>+xlator_option_info_list(volume_opt_list_t *list, char *key, char **def_val,</div><div class='add'>+                        char **descr)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        volume_option_t         *opt = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    volume_option_t *opt = NULL;</div><div class='ctx'> </div><div class='add'>+    opt = xlator_volume_option_get_list(list, key);</div><div class='add'>+    if (!opt)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        opt = xlator_volume_option_get_list (list, key);</div><div class='del'>-        if (!opt)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (def_val)</div><div class='del'>-                *def_val = opt-&gt;default_value;</div><div class='del'>-        if (descr)</div><div class='del'>-                *descr = opt-&gt;description;</div><div class='add'>+    if (def_val)</div><div class='add'>+        *def_val = opt-&gt;default_value;</div><div class='add'>+    if (descr)</div><div class='add'>+        *descr = opt-&gt;description;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-pass (char *in, char **out)</div><div class='add'>+pass(char *in, char **out)</div><div class='ctx'> {</div><div class='del'>-        *out = in;</div><div class='del'>-        return 0;</div><div class='add'>+    *out = in;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-xl_by_name (char *in, xlator_t **out)</div><div class='add'>+xl_by_name(char *in, xlator_t **out)</div><div class='ctx'> {</div><div class='del'>-        xlator_t  *xl = NULL;</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='ctx'> </div><div class='del'>-        xl = xlator_search_by_name (THIS, in);</div><div class='add'>+    xl = xlator_search_by_name(THIS, in);</div><div class='ctx'> </div><div class='del'>-        if (!xl)</div><div class='del'>-                return -1;</div><div class='del'>-        *out = xl;</div><div class='del'>-        return 0;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return -1;</div><div class='add'>+    *out = xl;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-pc_or_size (char *in, double *out)</div><div class='add'>+pc_or_size(char *in, double *out)</div><div class='ctx'> {</div><div class='del'>-        double  pc = 0;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-        size_t  size = 0;</div><div class='del'>-</div><div class='del'>-        if (gf_string2percent (in, &amp;pc) == 0) {</div><div class='del'>-                if (pc &gt; 100.0) {</div><div class='del'>-                        ret = gf_string2bytesize_size (in, &amp;size);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                *out = size;</div><div class='del'>-                } else {</div><div class='del'>-                        *out = pc;</div><div class='del'>-                }</div><div class='add'>+    double pc = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    size_t size = 0;</div><div class='add'>+</div><div class='add'>+    if (gf_string2percent(in, &amp;pc) == 0) {</div><div class='add'>+        if (pc &gt; 100.0) {</div><div class='add'>+            ret = gf_string2bytesize_size(in, &amp;size);</div><div class='add'>+            if (!ret)</div><div class='add'>+                *out = size;</div><div class='ctx'>         } else {</div><div class='del'>-                ret = gf_string2bytesize_size (in, &amp;size);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        *out = size;</div><div class='add'>+            *out = pc;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_string2bytesize_size(in, &amp;size);</div><div class='add'>+        if (!ret)</div><div class='add'>+            *out = size;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> DEFINE_INIT_OPT(char *, str, pass);</div><div class='hunk'>@@ -1265,7 +1233,6 @@ DEFINE_INIT_OPT(char *, path, pass);</div><div class='ctx'> DEFINE_INIT_OPT(double, double, gf_string2double);</div><div class='ctx'> DEFINE_INIT_OPT(uint32_t, time, gf_string2time);</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> DEFINE_RECONF_OPT(char *, str, pass);</div><div class='ctx'> DEFINE_RECONF_OPT(uint64_t, uint64, gf_string2uint64);</div><div class='ctx'> DEFINE_RECONF_OPT(int64_t, int64, gf_string2int64);</div><div class='head'>diff --git a/libglusterfs/src/options.h b/libglusterfs/src/options.h<br/>index e47d7496a39..b0f76d5639c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/options.h?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/options.h</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/options.h?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/options.h</a></div><div class='hunk'>@@ -76,8 +76,8 @@ typedef enum {</div><div class='ctx'>  * try a solution in GD2 for this.</div><div class='ctx'>  */</div><div class='ctx'> /* typedef int (*option_validation_fn) (glusterd_volinfo_t *volinfo, dict_t</div><div class='del'>-   *dict, char *key, char *value, char **op_errstr);</div><div class='del'>-*/</div><div class='add'>+ *dict, char *key, char *value, char **op_errstr);</div><div class='add'>+ */</div><div class='ctx'> </div><div class='ctx'> /* Each translator should define this structure */</div><div class='ctx'> /* XXX: This structure is in use by GD2, and SHOULD NOT be modified.</div><div class='head'>diff --git a/libglusterfs/src/parse-utils.c b/libglusterfs/src/parse-utils.c<br/>index 304232f6b56..d3fd0963507 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/parse-utils.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/parse-utils.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/parse-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/parse-utils.c</a></div><div class='hunk'>@@ -36,33 +36,33 @@</div><div class='ctx'>  *              : failure: NULL (on failure to compile regex or allocate memory)</div><div class='ctx'>  */</div><div class='ctx'> struct parser *</div><div class='del'>-parser_init (const char *regex)</div><div class='add'>+parser_init(const char *regex)</div><div class='ctx'> {</div><div class='del'>-        int           rc      = 0;</div><div class='del'>-        struct parser *parser = NULL;</div><div class='del'>-</div><div class='del'>-        parser = GF_MALLOC (sizeof(*parser), gf_common_mt_parser_t);</div><div class='del'>-        if (!parser)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        parser-&gt;regex = gf_strdup (regex);</div><div class='del'>-        if (!parser-&gt;regex) {</div><div class='del'>-                GF_FREE (parser);</div><div class='del'>-                parser = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rc = regcomp (&amp;parser-&gt;preg, parser-&gt;regex, REG_EXTENDED);</div><div class='del'>-        if (rc != 0) {</div><div class='del'>-                gf_msg (GF_PARSE, GF_LOG_INFO, 0, LG_MSG_REGEX_OP_FAILED,</div><div class='del'>-                        "Failed to compile regex pattern.");</div><div class='del'>-                parser_deinit (parser);</div><div class='del'>-                parser = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        parser-&gt;complete_str = NULL;</div><div class='add'>+    int rc = 0;</div><div class='add'>+    struct parser *parser = NULL;</div><div class='add'>+</div><div class='add'>+    parser = GF_MALLOC(sizeof(*parser), gf_common_mt_parser_t);</div><div class='add'>+    if (!parser)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    parser-&gt;regex = gf_strdup(regex);</div><div class='add'>+    if (!parser-&gt;regex) {</div><div class='add'>+        GF_FREE(parser);</div><div class='add'>+        parser = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rc = regcomp(&amp;parser-&gt;preg, parser-&gt;regex, REG_EXTENDED);</div><div class='add'>+    if (rc != 0) {</div><div class='add'>+        gf_msg(GF_PARSE, GF_LOG_INFO, 0, LG_MSG_REGEX_OP_FAILED,</div><div class='add'>+               "Failed to compile regex pattern.");</div><div class='add'>+        parser_deinit(parser);</div><div class='add'>+        parser = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    parser-&gt;complete_str = NULL;</div><div class='ctx'> out:</div><div class='del'>-        return parser;</div><div class='add'>+    return parser;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -78,22 +78,22 @@ out:</div><div class='ctx'>  *          failure: -EINVAL for NULL args, -ENOMEM for allocation errors</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-parser_set_string (struct parser *parser, const char *complete_str)</div><div class='add'>+parser_set_string(struct parser *parser, const char *complete_str)</div><div class='ctx'> {</div><div class='del'>-        int ret = -EINVAL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_PARSE, parser, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_PARSE, complete_str, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_PARSE, parser, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_PARSE, complete_str, out);</div><div class='ctx'> </div><div class='del'>-        parser-&gt;complete_str = gf_strdup (complete_str);</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG (GF_PARSE, parser, ret,</div><div class='del'>-                                "Failed to duplicate string!", out);</div><div class='add'>+    parser-&gt;complete_str = gf_strdup(complete_str);</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG(GF_PARSE, parser, ret, "Failed to duplicate string!",</div><div class='add'>+                           out);</div><div class='ctx'> </div><div class='del'>-        /* Point the temp internal string to what we just dup'ed */</div><div class='del'>-        parser-&gt;_rstr = (char *)parser-&gt;complete_str;</div><div class='del'>-        ret = 0;</div><div class='add'>+    /* Point the temp internal string to what we just dup'ed */</div><div class='add'>+    parser-&gt;_rstr = (char *)parser-&gt;complete_str;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -107,17 +107,17 @@ out:</div><div class='ctx'>  *              : failure: -EINVAL on NULL args</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-parser_unset_string (struct parser *parser)</div><div class='add'>+parser_unset_string(struct parser *parser)</div><div class='ctx'> {</div><div class='del'>-        int ret = -EINVAL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_PARSE, parser, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_PARSE, parser, out);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (parser-&gt;complete_str);</div><div class='del'>-        parser-&gt;complete_str = NULL; /* Avoid double frees in parser_deinit */</div><div class='del'>-        ret = 0;</div><div class='add'>+    GF_FREE(parser-&gt;complete_str);</div><div class='add'>+    parser-&gt;complete_str = NULL; /* Avoid double frees in parser_deinit */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -128,15 +128,15 @@ out:</div><div class='ctx'>  * @return    : nothing</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-parser_deinit (struct parser *ptr)</div><div class='add'>+parser_deinit(struct parser *ptr)</div><div class='ctx'> {</div><div class='del'>-        if (!ptr)</div><div class='del'>-                return;</div><div class='add'>+    if (!ptr)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        regfree (&amp;ptr-&gt;preg);</div><div class='del'>-        GF_FREE (ptr-&gt;complete_str);</div><div class='del'>-        GF_FREE (ptr-&gt;regex);</div><div class='del'>-        GF_FREE (ptr);</div><div class='add'>+    regfree(&amp;ptr-&gt;preg);</div><div class='add'>+    GF_FREE(ptr-&gt;complete_str);</div><div class='add'>+    GF_FREE(ptr-&gt;regex);</div><div class='add'>+    GF_FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -149,29 +149,28 @@ parser_deinit (struct parser *ptr)</div><div class='ctx'>  *            : failure: NULL</div><div class='ctx'>  */</div><div class='ctx'> char *</div><div class='del'>-parser_get_next_match (struct parser *parser)</div><div class='add'>+parser_get_next_match(struct parser *parser)</div><div class='ctx'> {</div><div class='del'>-        int             rc       = -EINVAL;</div><div class='del'>-        size_t          copy_len = 0;</div><div class='del'>-        char            *match   = NULL;</div><div class='add'>+    int rc = -EINVAL;</div><div class='add'>+    size_t copy_len = 0;</div><div class='add'>+    char *match = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_PARSE, parser, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_PARSE, parser, out);</div><div class='ctx'> </div><div class='del'>-        rc = regexec (&amp;parser-&gt;preg, parser-&gt;_rstr, 1, parser-&gt;pmatch, 0);</div><div class='del'>-        if (rc != 0) {</div><div class='del'>-                gf_msg_debug (GF_PARSE, 0,</div><div class='del'>-                        "Could not match %s with regex %s",</div><div class='del'>-                        parser-&gt;_rstr, parser-&gt;regex);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    rc = regexec(&amp;parser-&gt;preg, parser-&gt;_rstr, 1, parser-&gt;pmatch, 0);</div><div class='add'>+    if (rc != 0) {</div><div class='add'>+        gf_msg_debug(GF_PARSE, 0, "Could not match %s with regex %s",</div><div class='add'>+                     parser-&gt;_rstr, parser-&gt;regex);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        copy_len = parser-&gt;pmatch[0].rm_eo - parser-&gt;pmatch[0].rm_so;</div><div class='add'>+    copy_len = parser-&gt;pmatch[0].rm_eo - parser-&gt;pmatch[0].rm_so;</div><div class='ctx'> </div><div class='del'>-        match = gf_strndup (parser-&gt;_rstr + parser-&gt;pmatch[0].rm_so, copy_len);</div><div class='del'>-        GF_CHECK_ALLOC_AND_LOG (GF_PARSE, match, rc,</div><div class='del'>-                                "Duplicating match failed!", out);</div><div class='add'>+    match = gf_strndup(parser-&gt;_rstr + parser-&gt;pmatch[0].rm_so, copy_len);</div><div class='add'>+    GF_CHECK_ALLOC_AND_LOG(GF_PARSE, match, rc, "Duplicating match failed!",</div><div class='add'>+                           out);</div><div class='ctx'> </div><div class='del'>-        parser-&gt;_rstr = &amp;parser-&gt;_rstr[parser-&gt;pmatch[0].rm_eo];</div><div class='add'>+    parser-&gt;_rstr = &amp;parser-&gt;_rstr[parser-&gt;pmatch[0].rm_eo];</div><div class='ctx'> out:</div><div class='del'>-        return match;</div><div class='add'>+    return match;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/quota-common-utils.c b/libglusterfs/src/quota-common-utils.c<br/>index a0a7dd5aafe..7e271ad7d07 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/quota-common-utils.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/quota-common-utils.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/quota-common-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/quota-common-utils.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>    cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "dict.h"</div><div class='ctx'> #include "logging.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='hunk'>@@ -17,227 +16,224 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-quota_meta_is_null (const quota_meta_t *meta)</div><div class='add'>+quota_meta_is_null(const quota_meta_t *meta)</div><div class='ctx'> {</div><div class='del'>-        if (meta-&gt;size == 0 &amp;&amp;</div><div class='del'>-            meta-&gt;file_count == 0 &amp;&amp;</div><div class='del'>-            meta-&gt;dir_count == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (meta-&gt;size == 0 &amp;&amp; meta-&gt;file_count == 0 &amp;&amp; meta-&gt;dir_count == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_data_to_meta (data_t *data, char *key, quota_meta_t *meta)</div><div class='add'>+quota_data_to_meta(data_t *data, char *key, quota_meta_t *meta)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret      = -1;</div><div class='del'>-        quota_meta_t  *value    = NULL;</div><div class='del'>-        int64_t       *size     = NULL;</div><div class='del'>-</div><div class='del'>-        if (!data || !key || !meta)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (data-&gt;len &gt; sizeof (int64_t)) {</div><div class='del'>-                value = (quota_meta_t *) data-&gt;data;</div><div class='del'>-                meta-&gt;size = ntoh64 (value-&gt;size);</div><div class='del'>-                meta-&gt;file_count = ntoh64 (value-&gt;file_count);</div><div class='del'>-                if (data-&gt;len &gt; (sizeof (int64_t)) * 2)</div><div class='del'>-                        meta-&gt;dir_count  = ntoh64 (value-&gt;dir_count);</div><div class='del'>-                else</div><div class='del'>-                        meta-&gt;dir_count = 0;</div><div class='del'>-        } else {</div><div class='del'>-                size = (int64_t *) data-&gt;data;</div><div class='del'>-                meta-&gt;size = ntoh64 (*size);</div><div class='del'>-                meta-&gt;file_count = 0;</div><div class='del'>-                meta-&gt;dir_count = 0;</div><div class='del'>-                /* This can happen during software upgrade.</div><div class='del'>-                 * Older version of glusterfs will not have inode count.</div><div class='del'>-                 * Return failure, this will be healed as part of lookup</div><div class='del'>-                 */</div><div class='del'>-                gf_msg_callingfn ("quota", GF_LOG_DEBUG, 0,</div><div class='del'>-                                  LG_MSG_QUOTA_XATTRS_MISSING, "Object quota "</div><div class='del'>-                                  "xattrs missing: len = %d", data-&gt;len);</div><div class='del'>-                ret = -2;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_meta_t *value = NULL;</div><div class='add'>+    int64_t *size = NULL;</div><div class='add'>+</div><div class='add'>+    if (!data || !key || !meta)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (data-&gt;len &gt; sizeof(int64_t)) {</div><div class='add'>+        value = (quota_meta_t *)data-&gt;data;</div><div class='add'>+        meta-&gt;size = ntoh64(value-&gt;size);</div><div class='add'>+        meta-&gt;file_count = ntoh64(value-&gt;file_count);</div><div class='add'>+        if (data-&gt;len &gt; (sizeof(int64_t)) * 2)</div><div class='add'>+            meta-&gt;dir_count = ntoh64(value-&gt;dir_count);</div><div class='add'>+        else</div><div class='add'>+            meta-&gt;dir_count = 0;</div><div class='add'>+    } else {</div><div class='add'>+        size = (int64_t *)data-&gt;data;</div><div class='add'>+        meta-&gt;size = ntoh64(*size);</div><div class='add'>+        meta-&gt;file_count = 0;</div><div class='add'>+        meta-&gt;dir_count = 0;</div><div class='add'>+        /* This can happen during software upgrade.</div><div class='add'>+         * Older version of glusterfs will not have inode count.</div><div class='add'>+         * Return failure, this will be healed as part of lookup</div><div class='add'>+         */</div><div class='add'>+        gf_msg_callingfn("quota", GF_LOG_DEBUG, 0, LG_MSG_QUOTA_XATTRS_MISSING,</div><div class='add'>+                         "Object quota "</div><div class='add'>+                         "xattrs missing: len = %d",</div><div class='add'>+                         data-&gt;len);</div><div class='add'>+        ret = -2;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_dict_get_inode_meta (dict_t *dict, char *key, quota_meta_t *meta)</div><div class='add'>+quota_dict_get_inode_meta(dict_t *dict, char *key, quota_meta_t *meta)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret      = -1;</div><div class='del'>-        data_t        *data     = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    data_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!dict || !key || !meta)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!dict || !key || !meta)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        data = dict_get (dict, key);</div><div class='del'>-        if (!data || !data-&gt;data)</div><div class='del'>-                goto out;</div><div class='add'>+    data = dict_get(dict, key);</div><div class='add'>+    if (!data || !data-&gt;data)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = quota_data_to_meta (data, key, meta);</div><div class='add'>+    ret = quota_data_to_meta(data, key, meta);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_dict_get_meta (dict_t *dict, char *key, quota_meta_t *meta)</div><div class='add'>+quota_dict_get_meta(dict_t *dict, char *key, quota_meta_t *meta)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret      = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = quota_dict_get_inode_meta (dict, key, meta);</div><div class='del'>-        if (ret == -2)</div><div class='del'>-                ret = 0;</div><div class='add'>+    ret = quota_dict_get_inode_meta(dict, key, meta);</div><div class='add'>+    if (ret == -2)</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_dict_set_meta (dict_t *dict, char *key, const quota_meta_t *meta,</div><div class='del'>-                     ia_type_t ia_type)</div><div class='add'>+quota_dict_set_meta(dict_t *dict, char *key, const quota_meta_t *meta,</div><div class='add'>+                    ia_type_t ia_type)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret      = -ENOMEM;</div><div class='del'>-        quota_meta_t   *value    = NULL;</div><div class='del'>-</div><div class='del'>-        value = GF_MALLOC (sizeof (quota_meta_t), gf_common_quota_meta_t);</div><div class='del'>-        if (value == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        value-&gt;size = hton64 (meta-&gt;size);</div><div class='del'>-        value-&gt;file_count = hton64 (meta-&gt;file_count);</div><div class='del'>-        value-&gt;dir_count = hton64 (meta-&gt;dir_count);</div><div class='del'>-</div><div class='del'>-        if (ia_type == IA_IFDIR) {</div><div class='del'>-                ret = dict_set_bin (dict, key, value, sizeof (*value));</div><div class='del'>-        } else {</div><div class='del'>-                /* For a file we don't need to store dir_count in the</div><div class='del'>-                 * quota size xattr, so we set the len of the data in the dict</div><div class='del'>-                 * as 128bits, so when the posix xattrop reads the dict, it only</div><div class='del'>-                 * performs operations on size and file_count</div><div class='del'>-                 */</div><div class='del'>-                ret = dict_set_bin (dict, key, value,</div><div class='del'>-                                    sizeof (*value) - sizeof (int64_t));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_callingfn ("quota", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_DICT_SET_FAILED, "dict set failed");</div><div class='del'>-                GF_FREE (value);</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -ENOMEM;</div><div class='add'>+    quota_meta_t *value = NULL;</div><div class='add'>+</div><div class='add'>+    value = GF_MALLOC(sizeof(quota_meta_t), gf_common_quota_meta_t);</div><div class='add'>+    if (value == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    value-&gt;size = hton64(meta-&gt;size);</div><div class='add'>+    value-&gt;file_count = hton64(meta-&gt;file_count);</div><div class='add'>+    value-&gt;dir_count = hton64(meta-&gt;dir_count);</div><div class='add'>+</div><div class='add'>+    if (ia_type == IA_IFDIR) {</div><div class='add'>+        ret = dict_set_bin(dict, key, value, sizeof(*value));</div><div class='add'>+    } else {</div><div class='add'>+        /* For a file we don't need to store dir_count in the</div><div class='add'>+         * quota size xattr, so we set the len of the data in the dict</div><div class='add'>+         * as 128bits, so when the posix xattrop reads the dict, it only</div><div class='add'>+         * performs operations on size and file_count</div><div class='add'>+         */</div><div class='add'>+        ret = dict_set_bin(dict, key, value, sizeof(*value) - sizeof(int64_t));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_callingfn("quota", GF_LOG_ERROR, 0, LG_MSG_DICT_SET_FAILED,</div><div class='add'>+                         "dict set failed");</div><div class='add'>+        GF_FREE(value);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_conf_read_header (int fd, char *buf)</div><div class='add'>+quota_conf_read_header(int fd, char *buf)</div><div class='ctx'> {</div><div class='del'>-        int    ret             = 0;</div><div class='del'>-        const int header_len = SLEN (QUOTA_CONF_HEADER);</div><div class='del'>-</div><div class='del'>-        ret = gf_nread (fd, buf, header_len);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret &gt; 0 &amp;&amp; ret != header_len) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    const int header_len = SLEN(QUOTA_CONF_HEADER);</div><div class='ctx'> </div><div class='del'>-        buf[header_len-1] = 0;</div><div class='add'>+    ret = gf_nread(fd, buf, header_len);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret &gt; 0 &amp;&amp; ret != header_len) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf[header_len - 1] = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_callingfn ("quota", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_QUOTA_CONF_ERROR, "failed to read "</div><div class='del'>-                                  "header from a quota conf");</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_callingfn("quota", GF_LOG_ERROR, 0, LG_MSG_QUOTA_CONF_ERROR,</div><div class='add'>+                         "failed to read "</div><div class='add'>+                         "header from a quota conf");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_conf_read_version (int fd, float *version)</div><div class='add'>+quota_conf_read_version(int fd, float *version)</div><div class='ctx'> {</div><div class='del'>-        int    ret             = 0;</div><div class='del'>-        char   buf[PATH_MAX]   = "";</div><div class='del'>-        char  *tail            = NULL;</div><div class='del'>-        float  value           = 0.0f;</div><div class='del'>-</div><div class='del'>-        ret = quota_conf_read_header (fd, buf);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                /* quota.conf is empty */</div><div class='del'>-                value = GF_QUOTA_CONF_VERSION;</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        value = strtof ((buf + strlen(buf) - 3), &amp;tail);</div><div class='del'>-        if (tail[0] != '\0') {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg_callingfn ("quota", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_QUOTA_CONF_ERROR, "invalid quota conf"</div><div class='del'>-                                  " version");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char buf[PATH_MAX] = "";</div><div class='add'>+    char *tail = NULL;</div><div class='add'>+    float value = 0.0f;</div><div class='add'>+</div><div class='add'>+    ret = quota_conf_read_header(fd, buf);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        /* quota.conf is empty */</div><div class='add'>+        value = GF_QUOTA_CONF_VERSION;</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    value = strtof((buf + strlen(buf) - 3), &amp;tail);</div><div class='add'>+    if (tail[0] != '\0') {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg_callingfn("quota", GF_LOG_ERROR, 0, LG_MSG_QUOTA_CONF_ERROR,</div><div class='add'>+                         "invalid quota conf"</div><div class='add'>+                         " version");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &gt;= 0)</div><div class='del'>-                *version = value;</div><div class='del'>-        else</div><div class='del'>-                gf_msg_callingfn ("quota", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_QUOTA_CONF_ERROR, "failed to "</div><div class='del'>-                                  "read version from a quota conf header");</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &gt;= 0)</div><div class='add'>+        *version = value;</div><div class='add'>+    else</div><div class='add'>+        gf_msg_callingfn("quota", GF_LOG_ERROR, 0, LG_MSG_QUOTA_CONF_ERROR,</div><div class='add'>+                         "failed to "</div><div class='add'>+                         "read version from a quota conf header");</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_conf_read_gfid (int fd, void *buf, char *type, float version)</div><div class='add'>+quota_conf_read_gfid(int fd, void *buf, char *type, float version)</div><div class='ctx'> {</div><div class='del'>-        int           ret         = 0;</div><div class='del'>-</div><div class='del'>-        ret = gf_nread (fd, buf, 16);</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (ret != 16) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (version &gt;= 1.2f) {</div><div class='del'>-                ret = gf_nread (fd, type, 1);</div><div class='del'>-                if (ret != 1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = 17;</div><div class='del'>-        } else {</div><div class='del'>-                *type = GF_QUOTA_CONF_TYPE_USAGE;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = gf_nread(fd, buf, 16);</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (ret != 16) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (version &gt;= 1.2f) {</div><div class='add'>+        ret = gf_nread(fd, type, 1);</div><div class='add'>+        if (ret != 1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = 17;</div><div class='add'>+    } else {</div><div class='add'>+        *type = GF_QUOTA_CONF_TYPE_USAGE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_callingfn ("quota", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_QUOTA_CONF_ERROR, "failed to "</div><div class='del'>-                                  "read gfid from a quota conf");</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_callingfn("quota", GF_LOG_ERROR, 0, LG_MSG_QUOTA_CONF_ERROR,</div><div class='add'>+                         "failed to "</div><div class='add'>+                         "read gfid from a quota conf");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_conf_skip_header (int fd)</div><div class='add'>+quota_conf_skip_header(int fd)</div><div class='ctx'> {</div><div class='del'>-        return gf_skip_header_section (fd, strlen (QUOTA_CONF_HEADER));</div><div class='add'>+    return gf_skip_header_section(fd, strlen(QUOTA_CONF_HEADER));</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/libglusterfs/src/rbthash.c b/libglusterfs/src/rbthash.c<br/>index 4d654066e13..0068b7b881e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/rbthash.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/rbthash.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/rbthash.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/rbthash.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "rbthash.h"</div><div class='ctx'> #include "rb.h"</div><div class='ctx'> #include "locking.h"</div><div class='hunk'>@@ -19,59 +18,57 @@</div><div class='ctx'> #include &lt;pthread.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rbthash_comparator (void *entry1, void *entry2, void *param)</div><div class='add'>+rbthash_comparator(void *entry1, void *entry2, void *param)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        rbthash_entry_t *e1 = NULL;</div><div class='del'>-        rbthash_entry_t *e2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    rbthash_entry_t *e1 = NULL;</div><div class='add'>+    rbthash_entry_t *e2 = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!entry1) || (!entry2) || (!param))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!entry1) || (!entry2) || (!param))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        e1 = (rbthash_entry_t *)entry1;</div><div class='del'>-        e2 = (rbthash_entry_t *)entry2;</div><div class='add'>+    e1 = (rbthash_entry_t *)entry1;</div><div class='add'>+    e2 = (rbthash_entry_t *)entry2;</div><div class='ctx'> </div><div class='del'>-        if (e1-&gt;keylen != e2-&gt;keylen) {</div><div class='del'>-                if (e1-&gt;keylen &lt; e2-&gt;keylen)</div><div class='del'>-                        ret = -1;</div><div class='del'>-                else if (e1-&gt;keylen &gt; e2-&gt;keylen)</div><div class='del'>-                        ret = 1;</div><div class='del'>-        } else</div><div class='del'>-                ret = memcmp (e1-&gt;key, e2-&gt;key, e1-&gt;keylen);</div><div class='add'>+    if (e1-&gt;keylen != e2-&gt;keylen) {</div><div class='add'>+        if (e1-&gt;keylen &lt; e2-&gt;keylen)</div><div class='add'>+            ret = -1;</div><div class='add'>+        else if (e1-&gt;keylen &gt; e2-&gt;keylen)</div><div class='add'>+            ret = 1;</div><div class='add'>+    } else</div><div class='add'>+        ret = memcmp(e1-&gt;key, e2-&gt;key, e1-&gt;keylen);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__rbthash_init_buckets (rbthash_table_t *tbl, int buckets)</div><div class='add'>+__rbthash_init_buckets(rbthash_table_t *tbl, int buckets)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!tbl)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        for (; i &lt; buckets; i++) {</div><div class='del'>-                LOCK_INIT (&amp;tbl-&gt;buckets[i].bucketlock);</div><div class='del'>-                tbl-&gt;buckets[i].bucket = rb_create ((rb_comparison_func *)rbthash_comparator, tbl, NULL);</div><div class='del'>-                if (!tbl-&gt;buckets[i].bucket) {</div><div class='del'>-                        gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_RB_TABLE_CREATE_FAILED, "Failed to "</div><div class='del'>-                                "create rb table bucket");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!tbl)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    for (; i &lt; buckets; i++) {</div><div class='add'>+        LOCK_INIT(&amp;tbl-&gt;buckets[i].bucketlock);</div><div class='add'>+        tbl-&gt;buckets[i].bucket = rb_create(</div><div class='add'>+            (rb_comparison_func *)rbthash_comparator, tbl, NULL);</div><div class='add'>+        if (!tbl-&gt;buckets[i].bucket) {</div><div class='add'>+            gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RB_TABLE_CREATE_FAILED,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "create rb table bucket");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * rbthash_table_init - Initialize a RBT based hash table</div><div class='ctx'>  * @buckets - Number of buckets in the hash table</div><div class='hunk'>@@ -83,391 +80,377 @@ err:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> rbthash_table_t *</div><div class='del'>-rbthash_table_init (glusterfs_ctx_t *ctx, int buckets, rbt_hasher_t hfunc,</div><div class='del'>-                    rbt_data_destroyer_t dfunc,</div><div class='del'>-                    unsigned long expected_entries,</div><div class='del'>-                    struct mem_pool *entrypool)</div><div class='add'>+rbthash_table_init(glusterfs_ctx_t *ctx, int buckets, rbt_hasher_t hfunc,</div><div class='add'>+                   rbt_data_destroyer_t dfunc, unsigned long expected_entries,</div><div class='add'>+                   struct mem_pool *entrypool)</div><div class='ctx'> {</div><div class='del'>-        rbthash_table_t         *newtab = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!hfunc) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_HASH_FUNC_ERROR,</div><div class='del'>-                        "Hash function not given");</div><div class='del'>-                return NULL;</div><div class='add'>+    rbthash_table_t *newtab = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!hfunc) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_HASH_FUNC_ERROR,</div><div class='add'>+               "Hash function not given");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!entrypool &amp;&amp; !expected_entries) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Both mem-pool and expected entries not provided");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (entrypool &amp;&amp; expected_entries) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Both mem-pool and expected entries are provided");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newtab = GF_CALLOC(1, sizeof(*newtab), gf_common_mt_rbthash_table_t);</div><div class='add'>+    if (!newtab)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    newtab-&gt;buckets = GF_CALLOC(buckets, sizeof(struct rbthash_bucket),</div><div class='add'>+                                gf_common_mt_rbthash_bucket);</div><div class='add'>+    if (!newtab-&gt;buckets) {</div><div class='add'>+        goto free_newtab;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (expected_entries) {</div><div class='add'>+        newtab-&gt;entrypool = mem_pool_new_ctx(ctx, rbthash_entry_t,</div><div class='add'>+                                             expected_entries);</div><div class='add'>+        if (!newtab-&gt;entrypool) {</div><div class='add'>+            goto free_buckets;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!entrypool &amp;&amp; !expected_entries) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Both mem-pool and expected entries not provided");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (entrypool &amp;&amp; expected_entries) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='del'>-                        "Both mem-pool and expected entries are provided");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        newtab = GF_CALLOC (1, sizeof (*newtab),</div><div class='del'>-                            gf_common_mt_rbthash_table_t);</div><div class='del'>-        if (!newtab)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        newtab-&gt;buckets = GF_CALLOC (buckets, sizeof (struct rbthash_bucket),</div><div class='del'>-                                     gf_common_mt_rbthash_bucket);</div><div class='del'>-        if (!newtab-&gt;buckets) {</div><div class='del'>-                goto free_newtab;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (expected_entries) {</div><div class='del'>-                newtab-&gt;entrypool =</div><div class='del'>-                        mem_pool_new_ctx (ctx, rbthash_entry_t,</div><div class='del'>-                                          expected_entries);</div><div class='del'>-                if (!newtab-&gt;entrypool) {</div><div class='del'>-                        goto free_buckets;</div><div class='del'>-                }</div><div class='del'>-                newtab-&gt;pool_alloced = _gf_true;</div><div class='del'>-        } else {</div><div class='del'>-                newtab-&gt;entrypool = entrypool;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;newtab-&gt;tablelock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newtab-&gt;list);</div><div class='del'>-        newtab-&gt;numbuckets = buckets;</div><div class='del'>-        ret = __rbthash_init_buckets (newtab, buckets);</div><div class='del'>-</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_RBTHASH_INIT_BUCKET_FAILED,</div><div class='del'>-                        "Failed to init buckets");</div><div class='del'>-                if (newtab-&gt;pool_alloced)</div><div class='del'>-                        mem_pool_destroy (newtab-&gt;entrypool);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_trace (GF_RBTHASH, 0, "Inited hash table: buckets:"</div><div class='del'>-                        " %d", buckets);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newtab-&gt;hashfunc = hfunc;</div><div class='del'>-        newtab-&gt;dfunc = dfunc;</div><div class='add'>+        newtab-&gt;pool_alloced = _gf_true;</div><div class='add'>+    } else {</div><div class='add'>+        newtab-&gt;entrypool = entrypool;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;newtab-&gt;tablelock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newtab-&gt;list);</div><div class='add'>+    newtab-&gt;numbuckets = buckets;</div><div class='add'>+    ret = __rbthash_init_buckets(newtab, buckets);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_INIT_BUCKET_FAILED,</div><div class='add'>+               "Failed to init buckets");</div><div class='add'>+        if (newtab-&gt;pool_alloced)</div><div class='add'>+            mem_pool_destroy(newtab-&gt;entrypool);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_trace(GF_RBTHASH, 0,</div><div class='add'>+                     "Inited hash table: buckets:"</div><div class='add'>+                     " %d",</div><div class='add'>+                     buckets);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newtab-&gt;hashfunc = hfunc;</div><div class='add'>+    newtab-&gt;dfunc = dfunc;</div><div class='ctx'> </div><div class='ctx'> free_buckets:</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                GF_FREE (newtab-&gt;buckets);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        GF_FREE(newtab-&gt;buckets);</div><div class='ctx'> </div><div class='ctx'> free_newtab:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                GF_FREE (newtab);</div><div class='del'>-                newtab = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        GF_FREE(newtab);</div><div class='add'>+        newtab = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return newtab;</div><div class='add'>+    return newtab;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rbthash_entry_t *</div><div class='del'>-rbthash_init_entry (rbthash_table_t *tbl, void *data, void *key, int keylen)</div><div class='add'>+rbthash_init_entry(rbthash_table_t *tbl, void *data, void *key, int keylen)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        rbthash_entry_t *entry = NULL;</div><div class='del'>-</div><div class='del'>-        if ((!tbl) || (!data) || (!key))</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        entry = mem_get (tbl-&gt;entrypool);</div><div class='del'>-        if (!entry) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_RBTHASH_GET_ENTRY_FAILED,</div><div class='del'>-                        "Failed to get entry from mem-pool");</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        entry-&gt;data = data;</div><div class='del'>-        entry-&gt;key = GF_MALLOC (keylen, gf_common_mt_char);</div><div class='del'>-        if (!entry-&gt;key) {</div><div class='del'>-                goto free_entry;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entry-&gt;list);</div><div class='del'>-        memcpy (entry-&gt;key, key, keylen);</div><div class='del'>-        entry-&gt;keylen = keylen;</div><div class='del'>-        entry-&gt;keyhash = tbl-&gt;hashfunc (entry-&gt;key, entry-&gt;keylen);</div><div class='del'>-        gf_msg_trace (GF_RBTHASH, 0, "HASH: %u", entry-&gt;keyhash);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rbthash_entry_t *entry = NULL;</div><div class='add'>+</div><div class='add'>+    if ((!tbl) || (!data) || (!key))</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    entry = mem_get(tbl-&gt;entrypool);</div><div class='add'>+    if (!entry) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_GET_ENTRY_FAILED,</div><div class='add'>+               "Failed to get entry from mem-pool");</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    entry-&gt;data = data;</div><div class='add'>+    entry-&gt;key = GF_MALLOC(keylen, gf_common_mt_char);</div><div class='add'>+    if (!entry-&gt;key) {</div><div class='add'>+        goto free_entry;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entry-&gt;list);</div><div class='add'>+    memcpy(entry-&gt;key, key, keylen);</div><div class='add'>+    entry-&gt;keylen = keylen;</div><div class='add'>+    entry-&gt;keyhash = tbl-&gt;hashfunc(entry-&gt;key, entry-&gt;keylen);</div><div class='add'>+    gf_msg_trace(GF_RBTHASH, 0, "HASH: %u", entry-&gt;keyhash);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> free_entry:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                mem_put (entry);</div><div class='del'>-                entry = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        mem_put(entry);</div><div class='add'>+        entry = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> ret:</div><div class='del'>-        return entry;</div><div class='add'>+    return entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rbthash_deinit_entry (rbthash_table_t *tbl, rbthash_entry_t *entry)</div><div class='add'>+rbthash_deinit_entry(rbthash_table_t *tbl, rbthash_entry_t *entry)</div><div class='ctx'> {</div><div class='add'>+    if (!entry)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!entry)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        GF_FREE (entry-&gt;key);</div><div class='del'>-</div><div class='del'>-        if (tbl) {</div><div class='del'>-                if ((entry-&gt;data) &amp;&amp; (tbl-&gt;dfunc))</div><div class='del'>-                        tbl-&gt;dfunc (entry-&gt;data);</div><div class='add'>+    GF_FREE(entry-&gt;key);</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;tbl-&gt;tablelock);</div><div class='del'>-                {</div><div class='del'>-                        list_del_init (&amp;entry-&gt;list);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;tbl-&gt;tablelock);</div><div class='add'>+    if (tbl) {</div><div class='add'>+        if ((entry-&gt;data) &amp;&amp; (tbl-&gt;dfunc))</div><div class='add'>+            tbl-&gt;dfunc(entry-&gt;data);</div><div class='ctx'> </div><div class='del'>-                mem_put (entry);</div><div class='add'>+        LOCK(&amp;tbl-&gt;tablelock);</div><div class='add'>+        {</div><div class='add'>+            list_del_init(&amp;entry-&gt;list);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;tbl-&gt;tablelock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='del'>-}</div><div class='add'>+        mem_put(entry);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static struct rbthash_bucket *</div><div class='del'>-rbthash_entry_bucket (rbthash_table_t *tbl, rbthash_entry_t * entry)</div><div class='add'>+rbthash_entry_bucket(rbthash_table_t *tbl, rbthash_entry_t *entry)</div><div class='ctx'> {</div><div class='del'>-        int     nbucket = 0;</div><div class='add'>+    int nbucket = 0;</div><div class='ctx'> </div><div class='del'>-        nbucket = (entry-&gt;keyhash % tbl-&gt;numbuckets);</div><div class='del'>-        gf_msg_trace (GF_RBTHASH, 0, "BUCKET: %d", nbucket);</div><div class='del'>-        return &amp;tbl-&gt;buckets[nbucket];</div><div class='add'>+    nbucket = (entry-&gt;keyhash % tbl-&gt;numbuckets);</div><div class='add'>+    gf_msg_trace(GF_RBTHASH, 0, "BUCKET: %d", nbucket);</div><div class='add'>+    return &amp;tbl-&gt;buckets[nbucket];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rbthash_insert_entry (rbthash_table_t *tbl, rbthash_entry_t *entry)</div><div class='add'>+rbthash_insert_entry(rbthash_table_t *tbl, rbthash_entry_t *entry)</div><div class='ctx'> {</div><div class='del'>-        struct rbthash_bucket   *bucket = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-</div><div class='del'>-        if ((!tbl) || (!entry))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        bucket = rbthash_entry_bucket (tbl, entry);</div><div class='del'>-        if (!bucket) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_RBTHASH_GET_BUCKET_FAILED,</div><div class='del'>-                        "Failed to get bucket");</div><div class='del'>-                goto err;</div><div class='add'>+    struct rbthash_bucket *bucket = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!tbl) || (!entry))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    bucket = rbthash_entry_bucket(tbl, entry);</div><div class='add'>+    if (!bucket) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_GET_BUCKET_FAILED,</div><div class='add'>+               "Failed to get bucket");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    LOCK(&amp;bucket-&gt;bucketlock);</div><div class='add'>+    {</div><div class='add'>+        if (!rb_probe(bucket-&gt;bucket, (void *)entry)) {</div><div class='add'>+            gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_INSERT_FAILED,</div><div class='add'>+                   "Failed to insert"</div><div class='add'>+                   " entry");</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-        LOCK (&amp;bucket-&gt;bucketlock);</div><div class='del'>-        {</div><div class='del'>-                if (!rb_probe (bucket-&gt;bucket, (void *)entry)) {</div><div class='del'>-                        gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_RBTHASH_INSERT_FAILED, "Failed to insert"</div><div class='del'>-                                " entry");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;bucket-&gt;bucketlock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;bucket-&gt;bucketlock);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rbthash_insert (rbthash_table_t *tbl, void *data, void *key, int keylen)</div><div class='add'>+rbthash_insert(rbthash_table_t *tbl, void *data, void *key, int keylen)</div><div class='ctx'> {</div><div class='del'>-        rbthash_entry_t         *entry = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-</div><div class='del'>-        if ((!tbl) || (!data) || (!key))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        entry = rbthash_init_entry (tbl, data, key, keylen);</div><div class='del'>-        if (!entry) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_RBTHASH_INIT_ENTRY_FAILED,</div><div class='del'>-                        "Failed to init entry");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    rbthash_entry_t *entry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = rbthash_insert_entry (tbl, entry);</div><div class='add'>+    if ((!tbl) || (!data) || (!key))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_RBTHASH_INSERT_FAILED,</div><div class='del'>-                        "Failed to insert entry");</div><div class='del'>-                rbthash_deinit_entry (tbl, entry);</div><div class='del'>-        }</div><div class='add'>+    entry = rbthash_init_entry(tbl, data, key, keylen);</div><div class='add'>+    if (!entry) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_INIT_ENTRY_FAILED,</div><div class='add'>+               "Failed to init entry");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;tbl-&gt;tablelock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;entry-&gt;list, &amp;tbl-&gt;list);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;tbl-&gt;tablelock);</div><div class='add'>+    ret = rbthash_insert_entry(tbl, entry);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_INSERT_FAILED,</div><div class='add'>+               "Failed to insert entry");</div><div class='add'>+        rbthash_deinit_entry(tbl, entry);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;tbl-&gt;tablelock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;tbl-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;tbl-&gt;tablelock);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct rbthash_bucket *</div><div class='del'>-rbthash_key_bucket (rbthash_table_t *tbl, void *key, int keylen)</div><div class='add'>+rbthash_key_bucket(rbthash_table_t *tbl, void *key, int keylen)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        keyhash = 0;</div><div class='del'>-        int             nbucket = 0;</div><div class='add'>+    uint32_t keyhash = 0;</div><div class='add'>+    int nbucket = 0;</div><div class='ctx'> </div><div class='del'>-        if ((!tbl) || (!key))</div><div class='del'>-                return NULL;</div><div class='add'>+    if ((!tbl) || (!key))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        keyhash =  tbl-&gt;hashfunc (key, keylen);</div><div class='del'>-        gf_msg_trace (GF_RBTHASH, 0, "HASH: %u", keyhash);</div><div class='del'>-        nbucket = (keyhash % tbl-&gt;numbuckets);</div><div class='del'>-        gf_msg_trace (GF_RBTHASH, 0, "BUCKET: %u", nbucket);</div><div class='add'>+    keyhash = tbl-&gt;hashfunc(key, keylen);</div><div class='add'>+    gf_msg_trace(GF_RBTHASH, 0, "HASH: %u", keyhash);</div><div class='add'>+    nbucket = (keyhash % tbl-&gt;numbuckets);</div><div class='add'>+    gf_msg_trace(GF_RBTHASH, 0, "BUCKET: %u", nbucket);</div><div class='ctx'> </div><div class='del'>-        return &amp;tbl-&gt;buckets[nbucket];</div><div class='add'>+    return &amp;tbl-&gt;buckets[nbucket];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-rbthash_get (rbthash_table_t *tbl, void *key, int keylen)</div><div class='add'>+rbthash_get(rbthash_table_t *tbl, void *key, int keylen)</div><div class='ctx'> {</div><div class='del'>-        struct rbthash_bucket           *bucket = NULL;</div><div class='del'>-        rbthash_entry_t                 *entry = NULL;</div><div class='del'>-        rbthash_entry_t                 searchentry = {0, };</div><div class='del'>-</div><div class='del'>-        if ((!tbl) || (!key))</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        bucket = rbthash_key_bucket (tbl, key, keylen);</div><div class='del'>-        if (!bucket) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_GET_BUCKET_FAILED,</div><div class='del'>-                        "Failed to get bucket");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        searchentry.key = key;</div><div class='del'>-        searchentry.keylen = keylen;</div><div class='del'>-        LOCK (&amp;bucket-&gt;bucketlock);</div><div class='del'>-        {</div><div class='del'>-                entry = rb_find (bucket-&gt;bucket, &amp;searchentry);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;bucket-&gt;bucketlock);</div><div class='del'>-</div><div class='del'>-        if (!entry)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        return entry-&gt;data;</div><div class='add'>+    struct rbthash_bucket *bucket = NULL;</div><div class='add'>+    rbthash_entry_t *entry = NULL;</div><div class='add'>+    rbthash_entry_t searchentry = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if ((!tbl) || (!key))</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    bucket = rbthash_key_bucket(tbl, key, keylen);</div><div class='add'>+    if (!bucket) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_GET_BUCKET_FAILED,</div><div class='add'>+               "Failed to get bucket");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    searchentry.key = key;</div><div class='add'>+    searchentry.keylen = keylen;</div><div class='add'>+    LOCK(&amp;bucket-&gt;bucketlock);</div><div class='add'>+    {</div><div class='add'>+        entry = rb_find(bucket-&gt;bucket, &amp;searchentry);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;bucket-&gt;bucketlock);</div><div class='add'>+</div><div class='add'>+    if (!entry)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    return entry-&gt;data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-rbthash_remove (rbthash_table_t *tbl, void *key, int keylen)</div><div class='add'>+rbthash_remove(rbthash_table_t *tbl, void *key, int keylen)</div><div class='ctx'> {</div><div class='del'>-        struct rbthash_bucket   *bucket = NULL;</div><div class='del'>-        rbthash_entry_t         *entry = NULL;</div><div class='del'>-        rbthash_entry_t         searchentry = {0, };</div><div class='del'>-        void                    *dataref = NULL;</div><div class='del'>-</div><div class='del'>-        if ((!tbl) || (!key))</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        bucket = rbthash_key_bucket (tbl, key, keylen);</div><div class='del'>-        if (!bucket) {</div><div class='del'>-                gf_msg (GF_RBTHASH, GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_RBTHASH_GET_BUCKET_FAILED,</div><div class='del'>-                        "Failed to get bucket");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        searchentry.key = key;</div><div class='del'>-        searchentry.keylen = keylen;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;bucket-&gt;bucketlock);</div><div class='del'>-        {</div><div class='del'>-                entry = rb_delete (bucket-&gt;bucket, &amp;searchentry);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;bucket-&gt;bucketlock);</div><div class='del'>-</div><div class='del'>-        if (!entry)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        GF_FREE (entry-&gt;key);</div><div class='del'>-        dataref = entry-&gt;data;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;tbl-&gt;tablelock);</div><div class='del'>-        {</div><div class='del'>-                list_del_init (&amp;entry-&gt;list);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;tbl-&gt;tablelock);</div><div class='del'>-</div><div class='del'>-        mem_put (entry);</div><div class='del'>-</div><div class='del'>-        return dataref;</div><div class='add'>+    struct rbthash_bucket *bucket = NULL;</div><div class='add'>+    rbthash_entry_t *entry = NULL;</div><div class='add'>+    rbthash_entry_t searchentry = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    void *dataref = NULL;</div><div class='add'>+</div><div class='add'>+    if ((!tbl) || (!key))</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    bucket = rbthash_key_bucket(tbl, key, keylen);</div><div class='add'>+    if (!bucket) {</div><div class='add'>+        gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_GET_BUCKET_FAILED,</div><div class='add'>+               "Failed to get bucket");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    searchentry.key = key;</div><div class='add'>+    searchentry.keylen = keylen;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;bucket-&gt;bucketlock);</div><div class='add'>+    {</div><div class='add'>+        entry = rb_delete(bucket-&gt;bucket, &amp;searchentry);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;bucket-&gt;bucketlock);</div><div class='add'>+</div><div class='add'>+    if (!entry)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    GF_FREE(entry-&gt;key);</div><div class='add'>+    dataref = entry-&gt;data;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;tbl-&gt;tablelock);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;entry-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;tbl-&gt;tablelock);</div><div class='add'>+</div><div class='add'>+    mem_put(entry);</div><div class='add'>+</div><div class='add'>+    return dataref;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rbthash_entry_deiniter (void *entry, void *rbparam)</div><div class='add'>+rbthash_entry_deiniter(void *entry, void *rbparam)</div><div class='ctx'> {</div><div class='del'>-        if (!entry)</div><div class='del'>-                return;</div><div class='add'>+    if (!entry)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        rbthash_deinit_entry (rbparam, entry);</div><div class='add'>+    rbthash_deinit_entry(rbparam, entry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rbthash_table_destroy_buckets (rbthash_table_t *tbl)</div><div class='add'>+rbthash_table_destroy_buckets(rbthash_table_t *tbl)</div><div class='ctx'> {</div><div class='del'>-        int x = 0;</div><div class='del'>-        if (!tbl)</div><div class='del'>-                return;</div><div class='add'>+    int x = 0;</div><div class='add'>+    if (!tbl)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        for (;x &lt; tbl-&gt;numbuckets; x++) {</div><div class='del'>-                LOCK_DESTROY (&amp;tbl-&gt;buckets[x].bucketlock);</div><div class='del'>-                rb_destroy (tbl-&gt;buckets[x].bucket, rbthash_entry_deiniter);</div><div class='del'>-        }</div><div class='add'>+    for (; x &lt; tbl-&gt;numbuckets; x++) {</div><div class='add'>+        LOCK_DESTROY(&amp;tbl-&gt;buckets[x].bucketlock);</div><div class='add'>+        rb_destroy(tbl-&gt;buckets[x].bucket, rbthash_entry_deiniter);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rbthash_table_destroy (rbthash_table_t *tbl)</div><div class='add'>+rbthash_table_destroy(rbthash_table_t *tbl)</div><div class='ctx'> {</div><div class='del'>-        if (!tbl)</div><div class='del'>-                return;</div><div class='add'>+    if (!tbl)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        rbthash_table_destroy_buckets (tbl);</div><div class='del'>-        if (tbl-&gt;pool_alloced)</div><div class='del'>-                mem_pool_destroy (tbl-&gt;entrypool);</div><div class='add'>+    rbthash_table_destroy_buckets(tbl);</div><div class='add'>+    if (tbl-&gt;pool_alloced)</div><div class='add'>+        mem_pool_destroy(tbl-&gt;entrypool);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (tbl-&gt;buckets);</div><div class='del'>-        GF_FREE (tbl);</div><div class='add'>+    GF_FREE(tbl-&gt;buckets);</div><div class='add'>+    GF_FREE(tbl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rbthash_table_traverse (rbthash_table_t *tbl, rbt_traverse_t traverse,</div><div class='del'>-                        void *mydata)</div><div class='add'>+rbthash_table_traverse(rbthash_table_t *tbl, rbt_traverse_t traverse,</div><div class='add'>+                       void *mydata)</div><div class='ctx'> {</div><div class='del'>-        rbthash_entry_t *entry = NULL;</div><div class='add'>+    rbthash_entry_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((tbl == NULL) || (traverse == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((tbl == NULL) || (traverse == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;tbl-&gt;tablelock);</div><div class='add'>+    LOCK(&amp;tbl-&gt;tablelock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(entry, &amp;tbl-&gt;list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (entry, &amp;tbl-&gt;list, list) {</div><div class='del'>-                        traverse (entry-&gt;data, mydata);</div><div class='del'>-                }</div><div class='add'>+            traverse(entry-&gt;data, mydata);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;tbl-&gt;tablelock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;tbl-&gt;tablelock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/refcount.c b/libglusterfs/src/refcount.c<br/>index 714bb9afef6..a522d86a677 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/refcount.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/refcount.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/refcount.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/refcount.c</a></div><div class='hunk'>@@ -14,96 +14,95 @@</div><div class='ctx'> #ifndef REFCOUNT_NEEDS_LOCK</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-_gf_ref_get (gf_ref_t *ref)</div><div class='add'>+_gf_ref_get(gf_ref_t *ref)</div><div class='ctx'> {</div><div class='del'>-        unsigned int cnt = __sync_fetch_and_add (&amp;ref-&gt;cnt, 1);</div><div class='del'>-</div><div class='del'>-        /* if cnt == 0, we're in a fatal position, the object will be free'd</div><div class='del'>-         *</div><div class='del'>-         * There is a race when two threads do a _gf_ref_get(). Only one of</div><div class='del'>-         * them may get a 0 returned. That is acceptable, because one</div><div class='del'>-         * _gf_ref_get() returning 0 should be handled as a fatal problem and</div><div class='del'>-         * when correct usage/locking is used, it should never happen.</div><div class='del'>-         */</div><div class='del'>-        GF_ASSERT (cnt != 0);</div><div class='del'>-</div><div class='del'>-        return cnt ? ref-&gt;data : NULL;</div><div class='add'>+    unsigned int cnt = __sync_fetch_and_add(&amp;ref-&gt;cnt, 1);</div><div class='add'>+</div><div class='add'>+    /* if cnt == 0, we're in a fatal position, the object will be free'd</div><div class='add'>+     *</div><div class='add'>+     * There is a race when two threads do a _gf_ref_get(). Only one of</div><div class='add'>+     * them may get a 0 returned. That is acceptable, because one</div><div class='add'>+     * _gf_ref_get() returning 0 should be handled as a fatal problem and</div><div class='add'>+     * when correct usage/locking is used, it should never happen.</div><div class='add'>+     */</div><div class='add'>+    GF_ASSERT(cnt != 0);</div><div class='add'>+</div><div class='add'>+    return cnt ? ref-&gt;data : NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> unsigned int</div><div class='del'>-_gf_ref_put (gf_ref_t *ref)</div><div class='add'>+_gf_ref_put(gf_ref_t *ref)</div><div class='ctx'> {</div><div class='del'>-        unsigned int cnt = __sync_fetch_and_sub (&amp;ref-&gt;cnt, 1);</div><div class='add'>+    unsigned int cnt = __sync_fetch_and_sub(&amp;ref-&gt;cnt, 1);</div><div class='ctx'> </div><div class='del'>-        /* if cnt == 1, the last user just did a _gf_ref_put()</div><div class='del'>-         *</div><div class='del'>-         * When cnt == 0, one _gf_ref_put() was done too much and there has</div><div class='del'>-         * been a thread using the refcounted structure when it was not</div><div class='del'>-         * supposed to.</div><div class='del'>-         */</div><div class='del'>-        GF_ASSERT (cnt != 0);</div><div class='add'>+    /* if cnt == 1, the last user just did a _gf_ref_put()</div><div class='add'>+     *</div><div class='add'>+     * When cnt == 0, one _gf_ref_put() was done too much and there has</div><div class='add'>+     * been a thread using the refcounted structure when it was not</div><div class='add'>+     * supposed to.</div><div class='add'>+     */</div><div class='add'>+    GF_ASSERT(cnt != 0);</div><div class='ctx'> </div><div class='del'>-        if (cnt == 1 &amp;&amp; ref-&gt;release)</div><div class='del'>-                ref-&gt;release (ref-&gt;data);</div><div class='add'>+    if (cnt == 1 &amp;&amp; ref-&gt;release)</div><div class='add'>+        ref-&gt;release(ref-&gt;data);</div><div class='ctx'> </div><div class='del'>-        return (cnt != 1);</div><div class='add'>+    return (cnt != 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #else</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-_gf_ref_get (gf_ref_t *ref)</div><div class='add'>+_gf_ref_get(gf_ref_t *ref)</div><div class='ctx'> {</div><div class='del'>-        unsigned int cnt = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ref-&gt;lk);</div><div class='del'>-        {</div><div class='del'>-                /* never can be 0, should have been free'd */</div><div class='del'>-                if (ref-&gt;cnt &gt; 0)</div><div class='del'>-                        cnt = ++ref-&gt;cnt;</div><div class='del'>-                else</div><div class='del'>-                        GF_ASSERT (ref-&gt;cnt &gt; 0);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ref-&gt;lk);</div><div class='del'>-</div><div class='del'>-        return cnt ? ref-&gt;data : NULL;</div><div class='add'>+    unsigned int cnt = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ref-&gt;lk);</div><div class='add'>+    {</div><div class='add'>+        /* never can be 0, should have been free'd */</div><div class='add'>+        if (ref-&gt;cnt &gt; 0)</div><div class='add'>+            cnt = ++ref-&gt;cnt;</div><div class='add'>+        else</div><div class='add'>+            GF_ASSERT(ref-&gt;cnt &gt; 0);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ref-&gt;lk);</div><div class='add'>+</div><div class='add'>+    return cnt ? ref-&gt;data : NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> unsigned int</div><div class='del'>-_gf_ref_put (gf_ref_t *ref)</div><div class='add'>+_gf_ref_put(gf_ref_t *ref)</div><div class='ctx'> {</div><div class='del'>-        unsigned int cnt = 0;</div><div class='del'>-        int release = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ref-&gt;lk);</div><div class='del'>-        {</div><div class='del'>-                if (ref-&gt;cnt != 0) {</div><div class='del'>-                        cnt = --ref-&gt;cnt;</div><div class='del'>-                        /* call release() only when cnt == 0 */</div><div class='del'>-                        release = (cnt == 0);</div><div class='del'>-                } else</div><div class='del'>-                        GF_ASSERT (ref-&gt;cnt != 0);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ref-&gt;lk);</div><div class='del'>-</div><div class='del'>-        if (release &amp;&amp; ref-&gt;release)</div><div class='del'>-                ref-&gt;release (ref-&gt;data);</div><div class='del'>-</div><div class='del'>-        return !release;</div><div class='add'>+    unsigned int cnt = 0;</div><div class='add'>+    int release = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ref-&gt;lk);</div><div class='add'>+    {</div><div class='add'>+        if (ref-&gt;cnt != 0) {</div><div class='add'>+            cnt = --ref-&gt;cnt;</div><div class='add'>+            /* call release() only when cnt == 0 */</div><div class='add'>+            release = (cnt == 0);</div><div class='add'>+        } else</div><div class='add'>+            GF_ASSERT(ref-&gt;cnt != 0);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ref-&gt;lk);</div><div class='add'>+</div><div class='add'>+    if (release &amp;&amp; ref-&gt;release)</div><div class='add'>+        ref-&gt;release(ref-&gt;data);</div><div class='add'>+</div><div class='add'>+    return !release;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #endif /* REFCOUNT_NEEDS_LOCK */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-_gf_ref_init (gf_ref_t *ref, gf_ref_release_t release, void *data)</div><div class='add'>+_gf_ref_init(gf_ref_t *ref, gf_ref_release_t release, void *data)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (ref);</div><div class='add'>+    GF_ASSERT(ref);</div><div class='ctx'> </div><div class='ctx'> #ifdef REFCOUNT_NEEDS_LOCK</div><div class='del'>-        LOCK_INIT (&amp;ref-&gt;lk);</div><div class='add'>+    LOCK_INIT(&amp;ref-&gt;lk);</div><div class='ctx'> #endif</div><div class='del'>-        ref-&gt;cnt = 1;</div><div class='del'>-        ref-&gt;release = release;</div><div class='del'>-        ref-&gt;data = data;</div><div class='add'>+    ref-&gt;cnt = 1;</div><div class='add'>+    ref-&gt;release = release;</div><div class='add'>+    ref-&gt;data = data;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/rot-buffs.c b/libglusterfs/src/rot-buffs.c<br/>index cbded2b3f46..c5147321c60 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/rot-buffs.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/rot-buffs.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/rot-buffs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/rot-buffs.c</a></div><div class='hunk'>@@ -26,10 +26,10 @@</div><div class='ctx'>  * TODO: do away with opaques (use arrays with indexing).</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-#define ROT_BUFF_DEFAULT_COUNT  2</div><div class='del'>-#define ROT_BUFF_ALLOC_SIZE  (1 * 1024 * 1024)  /* 1MB per iovec */</div><div class='add'>+#define ROT_BUFF_DEFAULT_COUNT 2</div><div class='add'>+#define ROT_BUFF_ALLOC_SIZE (1 * 1024 * 1024) /* 1MB per iovec */</div><div class='ctx'> </div><div class='del'>-#define RLIST_IOV_MELDED_ALLOC_SIZE  (RBUF_IOVEC_SIZE + ROT_BUFF_ALLOC_SIZE)</div><div class='add'>+#define RLIST_IOV_MELDED_ALLOC_SIZE (RBUF_IOVEC_SIZE + ROT_BUFF_ALLOC_SIZE)</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * iovec list is not shrunk (deallocated) if usage/total count</div><div class='hunk'>@@ -37,373 +37,369 @@</div><div class='ctx'>  * most of the workloads. for the rest shrinking iovec list is</div><div class='ctx'>  * generous.</div><div class='ctx'>  */</div><div class='del'>-#define RVEC_LOW_WATERMARK_COUNT  1</div><div class='add'>+#define RVEC_LOW_WATERMARK_COUNT 1</div><div class='ctx'> #define RVEC_HIGH_WATERMARK_COUNT (1 &lt;&lt; 4)</div><div class='ctx'> </div><div class='del'>-static inline</div><div class='del'>-rbuf_list_t *rbuf_current_buffer (rbuf_t *rbuf)</div><div class='add'>+static inline rbuf_list_t *</div><div class='add'>+rbuf_current_buffer(rbuf_t *rbuf)</div><div class='ctx'> {</div><div class='del'>-        return rbuf-&gt;current;</div><div class='add'>+    return rbuf-&gt;current;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_mark_waiting (rbuf_list_t *rlist)</div><div class='add'>+rlist_mark_waiting(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;rlist-&gt;c_lock);</div><div class='del'>-        {</div><div class='del'>-                rlist-&gt;awaiting = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;rlist-&gt;c_lock);</div><div class='add'>+    LOCK(&amp;rlist-&gt;c_lock);</div><div class='add'>+    {</div><div class='add'>+        rlist-&gt;awaiting = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;rlist-&gt;c_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__rlist_has_waiter (rbuf_list_t *rlist)</div><div class='add'>+__rlist_has_waiter(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        return (rlist-&gt;awaiting == _gf_true);</div><div class='add'>+    return (rlist-&gt;awaiting == _gf_true);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='del'>-rbuf_alloc_rvec ()</div><div class='add'>+rbuf_alloc_rvec()</div><div class='ctx'> {</div><div class='del'>-        return GF_CALLOC (1, RLIST_IOV_MELDED_ALLOC_SIZE, gf_common_mt_rvec_t);</div><div class='add'>+    return GF_CALLOC(1, RLIST_IOV_MELDED_ALLOC_SIZE, gf_common_mt_rvec_t);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_reset_vector_usage (rbuf_list_t *rlist)</div><div class='add'>+rlist_reset_vector_usage(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        rlist-&gt;used = 1;</div><div class='add'>+    rlist-&gt;used = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_increment_vector_usage (rbuf_list_t *rlist)</div><div class='add'>+rlist_increment_vector_usage(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        rlist-&gt;used++;</div><div class='add'>+    rlist-&gt;used++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_increment_total_usage (rbuf_list_t *rlist)</div><div class='add'>+rlist_increment_total_usage(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        rlist-&gt;total++;</div><div class='add'>+    rlist-&gt;total++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rvec_in_watermark_range (rbuf_list_t *rlist)</div><div class='add'>+rvec_in_watermark_range(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        return ((rlist-&gt;total &gt;= RVEC_LOW_WATERMARK_COUNT)</div><div class='del'>-                    &amp;&amp; (rlist-&gt;total &lt;= RVEC_HIGH_WATERMARK_COUNT));</div><div class='add'>+    return ((rlist-&gt;total &gt;= RVEC_LOW_WATERMARK_COUNT) &amp;&amp;</div><div class='add'>+            (rlist-&gt;total &lt;= RVEC_HIGH_WATERMARK_COUNT));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rbuf_reset_rvec (rbuf_iovec_t *rvec)</div><div class='add'>+rbuf_reset_rvec(rbuf_iovec_t *rvec)</div><div class='ctx'> {</div><div class='del'>-        /* iov_base is _never_ modified */</div><div class='del'>-        rvec-&gt;iov.iov_len = 0;</div><div class='add'>+    /* iov_base is _never_ modified */</div><div class='add'>+    rvec-&gt;iov.iov_len = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: alloc multiple rbuf_iovec_t */</div><div class='ctx'> static int</div><div class='del'>-rlist_add_new_vec (rbuf_list_t *rlist)</div><div class='add'>+rlist_add_new_vec(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        rbuf_iovec_t *rvec = NULL;</div><div class='add'>+    rbuf_iovec_t *rvec = NULL;</div><div class='ctx'> </div><div class='del'>-        rvec = (rbuf_iovec_t *) rbuf_alloc_rvec ();</div><div class='del'>-        if (!rvec)</div><div class='del'>-                return -1;</div><div class='del'>-        INIT_LIST_HEAD (&amp;rvec-&gt;list);</div><div class='del'>-        rvec-&gt;iov.iov_base = ((char *)rvec) + RBUF_IOVEC_SIZE;</div><div class='del'>-        rvec-&gt;iov.iov_len = 0;</div><div class='add'>+    rvec = (rbuf_iovec_t *)rbuf_alloc_rvec();</div><div class='add'>+    if (!rvec)</div><div class='add'>+        return -1;</div><div class='add'>+    INIT_LIST_HEAD(&amp;rvec-&gt;list);</div><div class='add'>+    rvec-&gt;iov.iov_base = ((char *)rvec) + RBUF_IOVEC_SIZE;</div><div class='add'>+    rvec-&gt;iov.iov_len = 0;</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;rvec-&gt;list, &amp;rlist-&gt;veclist);</div><div class='add'>+    list_add_tail(&amp;rvec-&gt;list, &amp;rlist-&gt;veclist);</div><div class='ctx'> </div><div class='del'>-        rlist-&gt;rvec = rvec; /* cache the latest */</div><div class='add'>+    rlist-&gt;rvec = rvec; /* cache the latest */</div><div class='ctx'> </div><div class='del'>-        rlist_increment_vector_usage (rlist);</div><div class='del'>-        rlist_increment_total_usage (rlist);</div><div class='add'>+    rlist_increment_vector_usage(rlist);</div><div class='add'>+    rlist_increment_total_usage(rlist);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_free_rvec (rbuf_iovec_t *rvec)</div><div class='add'>+rlist_free_rvec(rbuf_iovec_t *rvec)</div><div class='ctx'> {</div><div class='del'>-        if (!rvec)</div><div class='del'>-                return;</div><div class='del'>-        list_del (&amp;rvec-&gt;list);</div><div class='del'>-        GF_FREE (rvec);</div><div class='add'>+    if (!rvec)</div><div class='add'>+        return;</div><div class='add'>+    list_del(&amp;rvec-&gt;list);</div><div class='add'>+    GF_FREE(rvec);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_purge_all_rvec (rbuf_list_t *rlist)</div><div class='add'>+rlist_purge_all_rvec(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        rbuf_iovec_t *rvec = NULL;</div><div class='del'>-</div><div class='del'>-        if (!rlist)</div><div class='del'>-                return;</div><div class='del'>-        while (!list_empty (&amp;rlist-&gt;veclist)) {</div><div class='del'>-                rvec = list_first_entry (&amp;rlist-&gt;veclist, rbuf_iovec_t, list);</div><div class='del'>-                rlist_free_rvec (rvec);</div><div class='del'>-        }</div><div class='add'>+    rbuf_iovec_t *rvec = NULL;</div><div class='add'>+</div><div class='add'>+    if (!rlist)</div><div class='add'>+        return;</div><div class='add'>+    while (!list_empty(&amp;rlist-&gt;veclist)) {</div><div class='add'>+        rvec = list_first_entry(&amp;rlist-&gt;veclist, rbuf_iovec_t, list);</div><div class='add'>+        rlist_free_rvec(rvec);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_shrink_rvec (rbuf_list_t *rlist, unsigned long long shrink)</div><div class='add'>+rlist_shrink_rvec(rbuf_list_t *rlist, unsigned long long shrink)</div><div class='ctx'> {</div><div class='del'>-        rbuf_iovec_t *rvec = NULL;</div><div class='add'>+    rbuf_iovec_t *rvec = NULL;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;rlist-&gt;veclist) &amp;&amp; (shrink-- &gt; 0)) {</div><div class='del'>-                rvec = list_first_entry (&amp;rlist-&gt;veclist, rbuf_iovec_t, list);</div><div class='del'>-                rlist_free_rvec (rvec);</div><div class='del'>-        }</div><div class='add'>+    while (!list_empty(&amp;rlist-&gt;veclist) &amp;&amp; (shrink-- &gt; 0)) {</div><div class='add'>+        rvec = list_first_entry(&amp;rlist-&gt;veclist, rbuf_iovec_t, list);</div><div class='add'>+        rlist_free_rvec(rvec);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rbuf_purge_rlist (rbuf_t *rbuf)</div><div class='add'>+rbuf_purge_rlist(rbuf_t *rbuf)</div><div class='ctx'> {</div><div class='del'>-        rbuf_list_t *rlist = NULL;</div><div class='add'>+    rbuf_list_t *rlist = NULL;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;rbuf-&gt;freelist)) {</div><div class='del'>-                rlist = list_first_entry (&amp;rbuf-&gt;freelist, rbuf_list_t, list);</div><div class='del'>-                list_del (&amp;rlist-&gt;list);</div><div class='add'>+    while (!list_empty(&amp;rbuf-&gt;freelist)) {</div><div class='add'>+        rlist = list_first_entry(&amp;rbuf-&gt;freelist, rbuf_list_t, list);</div><div class='add'>+        list_del(&amp;rlist-&gt;list);</div><div class='ctx'> </div><div class='del'>-                rlist_purge_all_rvec (rlist);</div><div class='add'>+        rlist_purge_all_rvec(rlist);</div><div class='ctx'> </div><div class='del'>-                LOCK_DESTROY (&amp;rlist-&gt;c_lock);</div><div class='add'>+        LOCK_DESTROY(&amp;rlist-&gt;c_lock);</div><div class='ctx'> </div><div class='del'>-                (void) pthread_mutex_destroy (&amp;rlist-&gt;b_lock);</div><div class='del'>-                (void) pthread_cond_destroy (&amp;rlist-&gt;b_cond);</div><div class='add'>+        (void)pthread_mutex_destroy(&amp;rlist-&gt;b_lock);</div><div class='add'>+        (void)pthread_cond_destroy(&amp;rlist-&gt;b_cond);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (rlist);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(rlist);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rbuf_t *</div><div class='del'>-rbuf_init (int bufcount)</div><div class='add'>+rbuf_init(int bufcount)</div><div class='ctx'> {</div><div class='del'>-        int          j     = 0;</div><div class='del'>-        int          ret   = 0;</div><div class='del'>-        rbuf_t      *rbuf  = NULL;</div><div class='del'>-        rbuf_list_t *rlist = NULL;</div><div class='del'>-</div><div class='del'>-        if (bufcount &lt;= 0)</div><div class='del'>-                bufcount = ROT_BUFF_DEFAULT_COUNT;</div><div class='del'>-</div><div class='del'>-        rbuf = GF_CALLOC (1, sizeof (rbuf_t), gf_common_mt_rbuf_t);</div><div class='del'>-        if (!rbuf)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;rbuf-&gt;lock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;rbuf-&gt;freelist);</div><div class='del'>-</div><div class='del'>-        /* it could have been one big calloc() but this is just once.. */</div><div class='del'>-        for (j = 0; j &lt; bufcount; j++) {</div><div class='del'>-                rlist = GF_CALLOC (1,</div><div class='del'>-                                   sizeof (rbuf_list_t), gf_common_mt_rlist_t);</div><div class='del'>-                if (!rlist) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;rlist-&gt;list);</div><div class='del'>-                INIT_LIST_HEAD (&amp;rlist-&gt;veclist);</div><div class='del'>-</div><div class='del'>-                rlist-&gt;pending = rlist-&gt;completed = 0;</div><div class='del'>-</div><div class='del'>-                ret = rlist_add_new_vec (rlist);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                LOCK_INIT (&amp;rlist-&gt;c_lock);</div><div class='del'>-</div><div class='del'>-                rlist-&gt;awaiting = _gf_false;</div><div class='del'>-                ret = pthread_mutex_init (&amp;rlist-&gt;b_lock, 0);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        GF_FREE (rlist);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = pthread_cond_init (&amp;rlist-&gt;b_cond, 0);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        GF_FREE (rlist);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_add_tail (&amp;rlist-&gt;list, &amp;rbuf-&gt;freelist);</div><div class='add'>+    int j = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    rbuf_t *rbuf = NULL;</div><div class='add'>+    rbuf_list_t *rlist = NULL;</div><div class='add'>+</div><div class='add'>+    if (bufcount &lt;= 0)</div><div class='add'>+        bufcount = ROT_BUFF_DEFAULT_COUNT;</div><div class='add'>+</div><div class='add'>+    rbuf = GF_CALLOC(1, sizeof(rbuf_t), gf_common_mt_rbuf_t);</div><div class='add'>+    if (!rbuf)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;rbuf-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;rbuf-&gt;freelist);</div><div class='add'>+</div><div class='add'>+    /* it could have been one big calloc() but this is just once.. */</div><div class='add'>+    for (j = 0; j &lt; bufcount; j++) {</div><div class='add'>+        rlist = GF_CALLOC(1, sizeof(rbuf_list_t), gf_common_mt_rlist_t);</div><div class='add'>+        if (!rlist) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto dealloc_rlist;</div><div class='add'>+        INIT_LIST_HEAD(&amp;rlist-&gt;list);</div><div class='add'>+        INIT_LIST_HEAD(&amp;rlist-&gt;veclist);</div><div class='ctx'> </div><div class='del'>-        /* cache currently used buffer: first in the list */</div><div class='del'>-        rbuf-&gt;current = list_first_entry (&amp;rbuf-&gt;freelist, rbuf_list_t, list);</div><div class='del'>-        return rbuf;</div><div class='add'>+        rlist-&gt;pending = rlist-&gt;completed = 0;</div><div class='ctx'> </div><div class='del'>- dealloc_rlist:</div><div class='del'>-        rbuf_purge_rlist (rbuf);</div><div class='del'>-        LOCK_DESTROY (&amp;rbuf-&gt;lock);</div><div class='del'>-        GF_FREE (rbuf);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+        ret = rlist_add_new_vec(rlist);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        LOCK_INIT(&amp;rlist-&gt;c_lock);</div><div class='add'>+</div><div class='add'>+        rlist-&gt;awaiting = _gf_false;</div><div class='add'>+        ret = pthread_mutex_init(&amp;rlist-&gt;b_lock, 0);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(rlist);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = pthread_cond_init(&amp;rlist-&gt;b_cond, 0);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(rlist);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        list_add_tail(&amp;rlist-&gt;list, &amp;rbuf-&gt;freelist);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto dealloc_rlist;</div><div class='add'>+</div><div class='add'>+    /* cache currently used buffer: first in the list */</div><div class='add'>+    rbuf-&gt;current = list_first_entry(&amp;rbuf-&gt;freelist, rbuf_list_t, list);</div><div class='add'>+    return rbuf;</div><div class='add'>+</div><div class='add'>+dealloc_rlist:</div><div class='add'>+    rbuf_purge_rlist(rbuf);</div><div class='add'>+    LOCK_DESTROY(&amp;rbuf-&gt;lock);</div><div class='add'>+    GF_FREE(rbuf);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rbuf_dtor (rbuf_t *rbuf)</div><div class='add'>+rbuf_dtor(rbuf_t *rbuf)</div><div class='ctx'> {</div><div class='del'>-        if (!rbuf)</div><div class='del'>-                return;</div><div class='del'>-        rbuf-&gt;current = NULL;</div><div class='del'>-        rbuf_purge_rlist (rbuf);</div><div class='del'>-        LOCK_DESTROY (&amp;rbuf-&gt;lock);</div><div class='add'>+    if (!rbuf)</div><div class='add'>+        return;</div><div class='add'>+    rbuf-&gt;current = NULL;</div><div class='add'>+    rbuf_purge_rlist(rbuf);</div><div class='add'>+    LOCK_DESTROY(&amp;rbuf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (rbuf);</div><div class='add'>+    GF_FREE(rbuf);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-rbuf_adjust_write_area (struct iovec *iov, size_t bytes)</div><div class='add'>+rbuf_adjust_write_area(struct iovec *iov, size_t bytes)</div><div class='ctx'> {</div><div class='del'>-        char *wbuf = NULL;</div><div class='add'>+    char *wbuf = NULL;</div><div class='ctx'> </div><div class='del'>-        wbuf = iov-&gt;iov_base + iov-&gt;iov_len;</div><div class='del'>-        iov-&gt;iov_len += bytes;</div><div class='del'>-        return wbuf;</div><div class='add'>+    wbuf = iov-&gt;iov_base + iov-&gt;iov_len;</div><div class='add'>+    iov-&gt;iov_len += bytes;</div><div class='add'>+    return wbuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-rbuf_alloc_write_area (rbuf_list_t *rlist, size_t bytes)</div><div class='add'>+rbuf_alloc_write_area(rbuf_list_t *rlist, size_t bytes)</div><div class='ctx'> {</div><div class='del'>-        int           ret = 0;</div><div class='del'>-        struct iovec *iov = NULL;</div><div class='del'>-</div><div class='del'>-        /* check for available space in _current_ IO buffer */</div><div class='del'>-        iov = &amp;rlist-&gt;rvec-&gt;iov;</div><div class='del'>-        if (iov-&gt;iov_len + bytes &lt;= ROT_BUFF_ALLOC_SIZE)</div><div class='del'>-                return rbuf_adjust_write_area (iov, bytes); /* fast path */</div><div class='del'>-</div><div class='del'>-        /* not enough bytes, try next available buffers */</div><div class='del'>-        if (list_is_last (&amp;rlist-&gt;rvec-&gt;list, &amp;rlist-&gt;veclist)) {</div><div class='del'>-                /* OH! consumed all vector buffers */</div><div class='del'>-                GF_ASSERT (rlist-&gt;used == rlist-&gt;total);</div><div class='del'>-                ret = rlist_add_new_vec (rlist);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto error_return;</div><div class='del'>-        } else {</div><div class='del'>-                /* not the end, have available rbuf_iovec's */</div><div class='del'>-                rlist-&gt;rvec = list_next_entry (rlist-&gt;rvec, list);</div><div class='del'>-                rlist-&gt;used++;</div><div class='del'>-                rbuf_reset_rvec (rlist-&gt;rvec);</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct iovec *iov = NULL;</div><div class='add'>+</div><div class='add'>+    /* check for available space in _current_ IO buffer */</div><div class='add'>+    iov = &amp;rlist-&gt;rvec-&gt;iov;</div><div class='add'>+    if (iov-&gt;iov_len + bytes &lt;= ROT_BUFF_ALLOC_SIZE)</div><div class='add'>+        return rbuf_adjust_write_area(iov, bytes); /* fast path */</div><div class='add'>+</div><div class='add'>+    /* not enough bytes, try next available buffers */</div><div class='add'>+    if (list_is_last(&amp;rlist-&gt;rvec-&gt;list, &amp;rlist-&gt;veclist)) {</div><div class='add'>+        /* OH! consumed all vector buffers */</div><div class='add'>+        GF_ASSERT(rlist-&gt;used == rlist-&gt;total);</div><div class='add'>+        ret = rlist_add_new_vec(rlist);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto error_return;</div><div class='add'>+    } else {</div><div class='add'>+        /* not the end, have available rbuf_iovec's */</div><div class='add'>+        rlist-&gt;rvec = list_next_entry(rlist-&gt;rvec, list);</div><div class='add'>+        rlist-&gt;used++;</div><div class='add'>+        rbuf_reset_rvec(rlist-&gt;rvec);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iov = &amp;rlist-&gt;rvec-&gt;iov;</div><div class='del'>-        return rbuf_adjust_write_area (iov, bytes);</div><div class='add'>+    iov = &amp;rlist-&gt;rvec-&gt;iov;</div><div class='add'>+    return rbuf_adjust_write_area(iov, bytes);</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-rbuf_reserve_write_area (rbuf_t *rbuf, size_t bytes, void **opaque)</div><div class='add'>+rbuf_reserve_write_area(rbuf_t *rbuf, size_t bytes, void **opaque)</div><div class='ctx'> {</div><div class='del'>-        char        *wbuf  = NULL;</div><div class='del'>-        rbuf_list_t *rlist = NULL;</div><div class='del'>-</div><div class='del'>-        if (!rbuf || (bytes &lt;= 0) || (bytes &gt; ROT_BUFF_ALLOC_SIZE) || !opaque)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;rbuf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                rlist = rbuf_current_buffer (rbuf);</div><div class='del'>-                wbuf = rbuf_alloc_write_area (rlist, bytes);</div><div class='del'>-                if (!wbuf)</div><div class='del'>-                        goto unblock;</div><div class='del'>-                rlist-&gt;pending++;</div><div class='del'>-        }</div><div class='del'>- unblock:</div><div class='del'>-        UNLOCK (&amp;rbuf-&gt;lock);</div><div class='add'>+    char *wbuf = NULL;</div><div class='add'>+    rbuf_list_t *rlist = NULL;</div><div class='add'>+</div><div class='add'>+    if (!rbuf || (bytes &lt;= 0) || (bytes &gt; ROT_BUFF_ALLOC_SIZE) || !opaque)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        if (wbuf)</div><div class='del'>-                *opaque = rlist;</div><div class='del'>-        return wbuf;</div><div class='add'>+    LOCK(&amp;rbuf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        rlist = rbuf_current_buffer(rbuf);</div><div class='add'>+        wbuf = rbuf_alloc_write_area(rlist, bytes);</div><div class='add'>+        if (!wbuf)</div><div class='add'>+            goto unblock;</div><div class='add'>+        rlist-&gt;pending++;</div><div class='add'>+    }</div><div class='add'>+unblock:</div><div class='add'>+    UNLOCK(&amp;rbuf-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (wbuf)</div><div class='add'>+        *opaque = rlist;</div><div class='add'>+    return wbuf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rbuf_notify_waiter (rbuf_list_t *rlist)</div><div class='add'>+rbuf_notify_waiter(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;rlist-&gt;b_lock);</div><div class='del'>-        {</div><div class='del'>-                pthread_cond_signal (&amp;rlist-&gt;b_cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;rlist-&gt;b_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;rlist-&gt;b_lock);</div><div class='add'>+    {</div><div class='add'>+        pthread_cond_signal(&amp;rlist-&gt;b_cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;rlist-&gt;b_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rbuf_write_complete (void *opaque)</div><div class='add'>+rbuf_write_complete(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        rbuf_list_t *rlist = NULL;</div><div class='del'>-        gf_boolean_t notify = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!opaque)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        rlist = opaque;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;rlist-&gt;c_lock);</div><div class='del'>-        {</div><div class='del'>-                rlist-&gt;completed++;</div><div class='del'>-                /**</div><div class='del'>-                 * it's safe to test -&gt;pending without rbuf-&gt;lock *only* if</div><div class='del'>-                 * there's a waiter as there can be no new incoming writes.</div><div class='del'>-                 */</div><div class='del'>-                if (__rlist_has_waiter (rlist)</div><div class='del'>-                                  &amp;&amp; (rlist-&gt;completed == rlist-&gt;pending))</div><div class='del'>-                        notify = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;rlist-&gt;c_lock);</div><div class='add'>+    rbuf_list_t *rlist = NULL;</div><div class='add'>+    gf_boolean_t notify = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!opaque)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    rlist = opaque;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;rlist-&gt;c_lock);</div><div class='add'>+    {</div><div class='add'>+        rlist-&gt;completed++;</div><div class='add'>+        /**</div><div class='add'>+         * it's safe to test -&gt;pending without rbuf-&gt;lock *only* if</div><div class='add'>+         * there's a waiter as there can be no new incoming writes.</div><div class='add'>+         */</div><div class='add'>+        if (__rlist_has_waiter(rlist) &amp;&amp; (rlist-&gt;completed == rlist-&gt;pending))</div><div class='add'>+            notify = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;rlist-&gt;c_lock);</div><div class='ctx'> </div><div class='del'>-        if (notify)</div><div class='del'>-                rbuf_notify_waiter (rlist);</div><div class='add'>+    if (notify)</div><div class='add'>+        rbuf_notify_waiter(rlist);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rbuf_get_buffer (rbuf_t *rbuf,</div><div class='del'>-                 void **opaque, sequence_fn *seqfn, void *mydata)</div><div class='add'>+rbuf_get_buffer(rbuf_t *rbuf, void **opaque, sequence_fn *seqfn, void *mydata)</div><div class='ctx'> {</div><div class='del'>-        int retval = RBUF_CONSUMABLE;</div><div class='del'>-        rbuf_list_t *rlist = NULL;</div><div class='del'>-</div><div class='del'>-        if (!rbuf || !opaque)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;rbuf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                rlist = rbuf_current_buffer (rbuf);</div><div class='del'>-                if (!rlist-&gt;pending) {</div><div class='del'>-                        retval = RBUF_EMPTY;</div><div class='del'>-                        goto unblock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (list_is_singular (&amp;rbuf-&gt;freelist)) {</div><div class='del'>-                        /**</div><div class='del'>-                         * removal would lead to writer starvation, disallow</div><div class='del'>-                         * switching.</div><div class='del'>-                         */</div><div class='del'>-                        retval = RBUF_WOULD_STARVE;</div><div class='del'>-                        goto unblock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_del_init (&amp;rlist-&gt;list);</div><div class='del'>-                if (seqfn)</div><div class='del'>-                        seqfn (rlist, mydata);</div><div class='del'>-                rbuf-&gt;current =</div><div class='del'>-                        list_first_entry (&amp;rbuf-&gt;freelist, rbuf_list_t, list);</div><div class='add'>+    int retval = RBUF_CONSUMABLE;</div><div class='add'>+    rbuf_list_t *rlist = NULL;</div><div class='add'>+</div><div class='add'>+    if (!rbuf || !opaque)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;rbuf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        rlist = rbuf_current_buffer(rbuf);</div><div class='add'>+        if (!rlist-&gt;pending) {</div><div class='add'>+            retval = RBUF_EMPTY;</div><div class='add'>+            goto unblock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (list_is_singular(&amp;rbuf-&gt;freelist)) {</div><div class='add'>+            /**</div><div class='add'>+             * removal would lead to writer starvation, disallow</div><div class='add'>+             * switching.</div><div class='add'>+             */</div><div class='add'>+            retval = RBUF_WOULD_STARVE;</div><div class='add'>+            goto unblock;</div><div class='ctx'>         }</div><div class='del'>- unblock:</div><div class='del'>-        UNLOCK (&amp;rbuf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (retval == RBUF_CONSUMABLE)</div><div class='del'>-                *opaque = rlist; /* caller _owns_ the buffer */</div><div class='add'>+        list_del_init(&amp;rlist-&gt;list);</div><div class='add'>+        if (seqfn)</div><div class='add'>+            seqfn(rlist, mydata);</div><div class='add'>+        rbuf-&gt;current = list_first_entry(&amp;rbuf-&gt;freelist, rbuf_list_t, list);</div><div class='add'>+    }</div><div class='add'>+unblock:</div><div class='add'>+    UNLOCK(&amp;rbuf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return retval;</div><div class='add'>+    if (retval == RBUF_CONSUMABLE)</div><div class='add'>+        *opaque = rlist; /* caller _owns_ the buffer */</div><div class='add'>+</div><div class='add'>+    return retval;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -412,10 +408,10 @@ rbuf_get_buffer (rbuf_t *rbuf,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__rbuf_wait_for_writers (rbuf_list_t *rlist)</div><div class='add'>+__rbuf_wait_for_writers(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        while (rlist-&gt;completed != rlist-&gt;pending)</div><div class='del'>-                pthread_cond_wait (&amp;rlist-&gt;b_cond, &amp;rlist-&gt;b_lock);</div><div class='add'>+    while (rlist-&gt;completed != rlist-&gt;pending)</div><div class='add'>+        pthread_cond_wait(&amp;rlist-&gt;b_cond, &amp;rlist-&gt;b_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifndef M_E</div><div class='hunk'>@@ -423,69 +419,69 @@ __rbuf_wait_for_writers (rbuf_list_t *rlist)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rlist_shrink_vector (rbuf_list_t *rlist)</div><div class='add'>+rlist_shrink_vector(rbuf_list_t *rlist)</div><div class='ctx'> {</div><div class='del'>-        unsigned long long shrink = 0;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * fast path: don't bother to deallocate if vectors are hardly</div><div class='del'>-         * used.</div><div class='del'>-         */</div><div class='del'>-        if (rvec_in_watermark_range (rlist))</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Calculate the shrink count based on total allocated vectors.</div><div class='del'>-         * Note that the calculation sticks to rlist-&gt;total irrespective</div><div class='del'>-         * of the actual usage count (rlist-&gt;used). Later, -&gt;used could</div><div class='del'>-         * be used to apply slack to the calculation based on how much</div><div class='del'>-         * it lags from -&gt;total. For now, let's stick to slow decay.</div><div class='del'>-         */</div><div class='del'>-        shrink = rlist-&gt;total - (rlist-&gt;total * pow (M_E, -0.2));</div><div class='del'>-</div><div class='del'>-        rlist_shrink_rvec (rlist, shrink);</div><div class='del'>-        rlist-&gt;total -= shrink;</div><div class='add'>+    unsigned long long shrink = 0;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * fast path: don't bother to deallocate if vectors are hardly</div><div class='add'>+     * used.</div><div class='add'>+     */</div><div class='add'>+    if (rvec_in_watermark_range(rlist))</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Calculate the shrink count based on total allocated vectors.</div><div class='add'>+     * Note that the calculation sticks to rlist-&gt;total irrespective</div><div class='add'>+     * of the actual usage count (rlist-&gt;used). Later, -&gt;used could</div><div class='add'>+     * be used to apply slack to the calculation based on how much</div><div class='add'>+     * it lags from -&gt;total. For now, let's stick to slow decay.</div><div class='add'>+     */</div><div class='add'>+    shrink = rlist-&gt;total - (rlist-&gt;total * pow(M_E, -0.2));</div><div class='add'>+</div><div class='add'>+    rlist_shrink_rvec(rlist, shrink);</div><div class='add'>+    rlist-&gt;total -= shrink;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rbuf_wait_for_completion (rbuf_t *rbuf, void *opaque,</div><div class='del'>-                          void (*fn)(rbuf_list_t *, void *), void *arg)</div><div class='add'>+rbuf_wait_for_completion(rbuf_t *rbuf, void *opaque,</div><div class='add'>+                         void (*fn)(rbuf_list_t *, void *), void *arg)</div><div class='ctx'> {</div><div class='del'>-        rbuf_list_t *rlist = NULL;</div><div class='add'>+    rbuf_list_t *rlist = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!rbuf || !opaque)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!rbuf || !opaque)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        rlist = opaque;</div><div class='add'>+    rlist = opaque;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;rlist-&gt;b_lock);</div><div class='del'>-        {</div><div class='del'>-                rlist_mark_waiting (rlist);</div><div class='del'>-                __rbuf_wait_for_writers (rlist);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;rlist-&gt;b_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;rlist-&gt;b_lock);</div><div class='add'>+    {</div><div class='add'>+        rlist_mark_waiting(rlist);</div><div class='add'>+        __rbuf_wait_for_writers(rlist);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;rlist-&gt;b_lock);</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * from here on, no need of locking until the rlist is put</div><div class='del'>-         * back into rotation.</div><div class='del'>-         */</div><div class='add'>+    /**</div><div class='add'>+     * from here on, no need of locking until the rlist is put</div><div class='add'>+     * back into rotation.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        fn (rlist, arg); /* invoke dispatcher */</div><div class='add'>+    fn(rlist, arg); /* invoke dispatcher */</div><div class='ctx'> </div><div class='del'>-        rlist-&gt;awaiting = _gf_false;</div><div class='del'>-        rlist-&gt;pending = rlist-&gt;completed = 0;</div><div class='add'>+    rlist-&gt;awaiting = _gf_false;</div><div class='add'>+    rlist-&gt;pending = rlist-&gt;completed = 0;</div><div class='ctx'> </div><div class='del'>-        rlist_shrink_vector (rlist);</div><div class='del'>-        rlist_reset_vector_usage (rlist);</div><div class='add'>+    rlist_shrink_vector(rlist);</div><div class='add'>+    rlist_reset_vector_usage(rlist);</div><div class='ctx'> </div><div class='del'>-        rlist-&gt;rvec = list_first_entry (&amp;rlist-&gt;veclist, rbuf_iovec_t, list);</div><div class='del'>-        rbuf_reset_rvec (rlist-&gt;rvec);</div><div class='add'>+    rlist-&gt;rvec = list_first_entry(&amp;rlist-&gt;veclist, rbuf_iovec_t, list);</div><div class='add'>+    rbuf_reset_rvec(rlist-&gt;rvec);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;rbuf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;rlist-&gt;list, &amp;rbuf-&gt;freelist);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;rbuf-&gt;lock);</div><div class='add'>+    LOCK(&amp;rbuf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;rlist-&gt;list, &amp;rbuf-&gt;freelist);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;rbuf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/run.c b/libglusterfs/src/run.c<br/>index c501bab9685..41275066b20 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/run.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/run.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/run.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/run.c</a></div><div class='hunk'>@@ -42,8 +42,9 @@</div><div class='ctx'>  *</div><div class='ctx'>  * $ cc -DRUN_DO_DEMO -DRUN_STANDALONE -orun run.c</div><div class='ctx'>  */</div><div class='del'>-#if defined(RUN_STANDALONE ) || defined(RUN_DO_DEMO)</div><div class='del'>-int close_fds_except (int *fdv, size_t count);</div><div class='add'>+#if defined(RUN_STANDALONE) || defined(RUN_DO_DEMO)</div><div class='add'>+int</div><div class='add'>+close_fds_except(int *fdv, size_t count);</div><div class='ctx'> #define sys_read(f, b, c) read(f, b, c)</div><div class='ctx'> #define sys_write(f, b, c) write(f, b, c)</div><div class='ctx'> #define sys_close(f) close(f)</div><div class='hunk'>@@ -54,36 +55,37 @@ int close_fds_except (int *fdv, size_t count);</div><div class='ctx'> #define gf_strdup(s) strdup(s)</div><div class='ctx'> #define gf_vasprintf(p, f, va) vasprintf(p, f, va)</div><div class='ctx'> #define gf_loglevel_t int</div><div class='del'>-#define gf_msg_callingfn(dom, level, errnum, msgid, fmt, args...) printf("LOG: " fmt "\n", ##args)</div><div class='add'>+#define gf_msg_callingfn(dom, level, errnum, msgid, fmt, args...)              \</div><div class='add'>+    printf("LOG: " fmt "\n", ##args)</div><div class='ctx'> #define LOG_DEBUG 0</div><div class='ctx'> #ifdef RUN_STANDALONE</div><div class='ctx'> #include &lt;stdbool.h&gt;</div><div class='ctx'> #include &lt;sys/resource.h&gt;</div><div class='ctx'> int</div><div class='del'>-close_fds_except (int *fdv, size_t count)</div><div class='add'>+close_fds_except(int *fdv, size_t count)</div><div class='ctx'> {</div><div class='del'>-        int    i            = 0;</div><div class='del'>-        size_t j            = 0;</div><div class='del'>-        bool   should_close = true;</div><div class='del'>-        struct rlimit rl;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = getrlimit (RLIMIT_NOFILE, &amp;rl);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; rl.rlim_cur; i++) {</div><div class='del'>-                should_close = true;</div><div class='del'>-                for (j = 0; j &lt; count; j++) {</div><div class='del'>-                        if (i == fdv[j]) {</div><div class='del'>-                                should_close = false;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (should_close)</div><div class='del'>-                        sys_close (i);</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t j = 0;</div><div class='add'>+    bool should_close = true;</div><div class='add'>+    struct rlimit rl;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = getrlimit(RLIMIT_NOFILE, &amp;rl);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; rl.rlim_cur; i++) {</div><div class='add'>+        should_close = true;</div><div class='add'>+        for (j = 0; j &lt; count; j++) {</div><div class='add'>+            if (i == fdv[j]) {</div><div class='add'>+                should_close = false;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        if (should_close)</div><div class='add'>+            sys_close(i);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef __linux__</div><div class='hunk'>@@ -97,470 +99,472 @@ close_fds_except (int *fdv, size_t count)</div><div class='ctx'> </div><div class='ctx'> #include "run.h"</div><div class='ctx'> void</div><div class='del'>-runinit (runner_t *runner)</div><div class='add'>+runinit(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        runner-&gt;argvlen = 64;</div><div class='del'>-        runner-&gt;argv = GF_CALLOC (runner-&gt;argvlen,</div><div class='del'>-                                  sizeof (*runner-&gt;argv),</div><div class='del'>-                                  gf_common_mt_run_argv);</div><div class='del'>-        runner-&gt;runerr = runner-&gt;argv ? 0 : errno;</div><div class='del'>-        runner-&gt;chpid = -1;</div><div class='del'>-        for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                runner-&gt;chfd[i] = -1;</div><div class='del'>-                runner-&gt;chio[i] = NULL;</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    runner-&gt;argvlen = 64;</div><div class='add'>+    runner-&gt;argv = GF_CALLOC(runner-&gt;argvlen, sizeof(*runner-&gt;argv),</div><div class='add'>+                             gf_common_mt_run_argv);</div><div class='add'>+    runner-&gt;runerr = runner-&gt;argv ? 0 : errno;</div><div class='add'>+    runner-&gt;chpid = -1;</div><div class='add'>+    for (i = 0; i &lt; 3; i++) {</div><div class='add'>+        runner-&gt;chfd[i] = -1;</div><div class='add'>+        runner-&gt;chio[i] = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> FILE *</div><div class='del'>-runner_chio (runner_t *runner, int fd)</div><div class='add'>+runner_chio(runner_t *runner, int fd)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (fd &gt; 0 &amp;&amp; fd &lt; 3);</div><div class='add'>+    GF_ASSERT(fd &gt; 0 &amp;&amp; fd &lt; 3);</div><div class='ctx'> </div><div class='del'>-        if ((fd &gt; 0) &amp;&amp; (fd &lt; 3))</div><div class='del'>-                return runner-&gt;chio[fd];</div><div class='add'>+    if ((fd &gt; 0) &amp;&amp; (fd &lt; 3))</div><div class='add'>+        return runner-&gt;chio[fd];</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-runner_insert_arg (runner_t *runner, char *arg)</div><div class='add'>+runner_insert_arg(runner_t *runner, char *arg)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (arg);</div><div class='add'>+    GF_ASSERT(arg);</div><div class='ctx'> </div><div class='del'>-        if (runner-&gt;runerr)</div><div class='del'>-                return;</div><div class='add'>+    if (runner-&gt;runerr)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; runner-&gt;argvlen; i++) {</div><div class='del'>-                if (runner-&gt;argv[i] == NULL)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        GF_ASSERT (i &lt; runner-&gt;argvlen);</div><div class='del'>-</div><div class='del'>-        if (i == runner-&gt;argvlen - 1) {</div><div class='del'>-                runner-&gt;argv = GF_REALLOC (runner-&gt;argv,</div><div class='del'>-                                           runner-&gt;argvlen * 2 * sizeof (*runner-&gt;argv));</div><div class='del'>-                if (!runner-&gt;argv) {</div><div class='del'>-                        runner-&gt;runerr = errno;</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-                memset (/* "+" is aware of the type of its left side,</div><div class='del'>-                         * no need to multiply with type-size */</div><div class='del'>-                        runner-&gt;argv + runner-&gt;argvlen,</div><div class='del'>-                        0, runner-&gt;argvlen * sizeof (*runner-&gt;argv));</div><div class='del'>-                runner-&gt;argvlen *= 2;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; runner-&gt;argvlen; i++) {</div><div class='add'>+        if (runner-&gt;argv[i] == NULL)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    GF_ASSERT(i &lt; runner-&gt;argvlen);</div><div class='ctx'> </div><div class='del'>-        runner-&gt;argv[i] = arg;</div><div class='add'>+    if (i == runner-&gt;argvlen - 1) {</div><div class='add'>+        runner-&gt;argv = GF_REALLOC(runner-&gt;argv,</div><div class='add'>+                                  runner-&gt;argvlen * 2 * sizeof(*runner-&gt;argv));</div><div class='add'>+        if (!runner-&gt;argv) {</div><div class='add'>+            runner-&gt;runerr = errno;</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+        memset(/* "+" is aware of the type of its left side,</div><div class='add'>+                * no need to multiply with type-size */</div><div class='add'>+               runner-&gt;argv + runner-&gt;argvlen, 0,</div><div class='add'>+               runner-&gt;argvlen * sizeof(*runner-&gt;argv));</div><div class='add'>+        runner-&gt;argvlen *= 2;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    runner-&gt;argv[i] = arg;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-runner_add_arg (runner_t *runner, const char *arg)</div><div class='add'>+runner_add_arg(runner_t *runner, const char *arg)</div><div class='ctx'> {</div><div class='del'>-        arg = gf_strdup (arg);</div><div class='del'>-        if (!arg) {</div><div class='del'>-                runner-&gt;runerr = errno;</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    arg = gf_strdup(arg);</div><div class='add'>+    if (!arg) {</div><div class='add'>+        runner-&gt;runerr = errno;</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        runner_insert_arg (runner, (char *)arg);</div><div class='add'>+    runner_insert_arg(runner, (char *)arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-runner_va_add_args (runner_t *runner, va_list argp)</div><div class='add'>+runner_va_add_args(runner_t *runner, va_list argp)</div><div class='ctx'> {</div><div class='del'>-        const char *arg;</div><div class='add'>+    const char *arg;</div><div class='ctx'> </div><div class='del'>-        while ((arg = va_arg (argp, const char *)))</div><div class='del'>-                runner_add_arg (runner, arg);</div><div class='add'>+    while ((arg = va_arg(argp, const char *)))</div><div class='add'>+        runner_add_arg(runner, arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-runner_add_args (runner_t *runner, ...)</div><div class='add'>+runner_add_args(runner_t *runner, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list argp;</div><div class='add'>+    va_list argp;</div><div class='ctx'> </div><div class='del'>-        va_start (argp, runner);</div><div class='del'>-        runner_va_add_args (runner, argp);</div><div class='del'>-        va_end (argp);</div><div class='add'>+    va_start(argp, runner);</div><div class='add'>+    runner_va_add_args(runner, argp);</div><div class='add'>+    va_end(argp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-runner_argprintf (runner_t *runner, const char *format, ...)</div><div class='add'>+runner_argprintf(runner_t *runner, const char *format, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list argva;</div><div class='del'>-        char *arg = NULL;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    va_list argva;</div><div class='add'>+    char *arg = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        va_start (argva, format);</div><div class='del'>-        ret = gf_vasprintf (&amp;arg, format, argva);</div><div class='del'>-        va_end (argva);</div><div class='add'>+    va_start(argva, format);</div><div class='add'>+    ret = gf_vasprintf(&amp;arg, format, argva);</div><div class='add'>+    va_end(argva);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                runner-&gt;runerr = errno;</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        runner-&gt;runerr = errno;</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        runner_insert_arg (runner, arg);</div><div class='add'>+    runner_insert_arg(runner, arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-runner_log (runner_t *runner, const char *dom, gf_loglevel_t lvl,</div><div class='del'>-            const char *msg)</div><div class='add'>+runner_log(runner_t *runner, const char *dom, gf_loglevel_t lvl,</div><div class='add'>+           const char *msg)</div><div class='ctx'> {</div><div class='del'>-        char *buf = NULL;</div><div class='del'>-        size_t len = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        if (runner-&gt;runerr)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        for (i = 0;; i++) {</div><div class='del'>-                if (runner-&gt;argv[i] == NULL)</div><div class='del'>-                        break;</div><div class='del'>-                len += (strlen (runner-&gt;argv[i]) + 1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = GF_CALLOC (1, len + 1, gf_common_mt_run_logbuf);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                runner-&gt;runerr = errno;</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0;; i++) {</div><div class='del'>-                if (runner-&gt;argv[i] == NULL)</div><div class='del'>-                        break;</div><div class='del'>-                strcat (buf, runner-&gt;argv[i]);</div><div class='del'>-                strcat (buf, " ");</div><div class='del'>-        }</div><div class='del'>-        if (len &gt; 0)</div><div class='del'>-                buf[len - 1] = '\0';</div><div class='del'>-</div><div class='del'>-        gf_msg_callingfn (dom, lvl, 0, LG_MSG_RUNNER_LOG, "%s: %s", msg, buf);</div><div class='del'>-</div><div class='del'>-        GF_FREE (buf);</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (runner-&gt;runerr)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    for (i = 0;; i++) {</div><div class='add'>+        if (runner-&gt;argv[i] == NULL)</div><div class='add'>+            break;</div><div class='add'>+        len += (strlen(runner-&gt;argv[i]) + 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = GF_CALLOC(1, len + 1, gf_common_mt_run_logbuf);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        runner-&gt;runerr = errno;</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0;; i++) {</div><div class='add'>+        if (runner-&gt;argv[i] == NULL)</div><div class='add'>+            break;</div><div class='add'>+        strcat(buf, runner-&gt;argv[i]);</div><div class='add'>+        strcat(buf, " ");</div><div class='add'>+    }</div><div class='add'>+    if (len &gt; 0)</div><div class='add'>+        buf[len - 1] = '\0';</div><div class='add'>+</div><div class='add'>+    gf_msg_callingfn(dom, lvl, 0, LG_MSG_RUNNER_LOG, "%s: %s", msg, buf);</div><div class='add'>+</div><div class='add'>+    GF_FREE(buf);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-runner_redir (runner_t *runner, int fd, int tgt_fd)</div><div class='add'>+runner_redir(runner_t *runner, int fd, int tgt_fd)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (fd &gt; 0 &amp;&amp; fd &lt; 3);</div><div class='add'>+    GF_ASSERT(fd &gt; 0 &amp;&amp; fd &lt; 3);</div><div class='ctx'> </div><div class='del'>-        if ((fd &gt; 0) &amp;&amp; (fd &lt; 3))</div><div class='del'>-                runner-&gt;chfd[fd] = (tgt_fd &gt;= 0) ? tgt_fd : -2;</div><div class='add'>+    if ((fd &gt; 0) &amp;&amp; (fd &lt; 3))</div><div class='add'>+        runner-&gt;chfd[fd] = (tgt_fd &gt;= 0) ? tgt_fd : -2;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-runner_start (runner_t *runner)</div><div class='add'>+runner_start(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-        int pi[3][2] = {{-1, -1}, {-1, -1}, {-1, -1}};</div><div class='del'>-        int xpi[2];</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int errno_priv = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-        sigset_t set;</div><div class='del'>-</div><div class='del'>-        if (runner-&gt;runerr) {</div><div class='del'>-                errno = runner-&gt;runerr;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (runner-&gt;argv[0]);</div><div class='del'>-</div><div class='del'>-        /* set up a channel to child to communicate back</div><div class='del'>-         * possible execve(2) failures</div><div class='del'>-         */</div><div class='del'>-        ret = pipe(xpi);</div><div class='del'>-        if (ret != -1)</div><div class='del'>-                ret = fcntl (xpi[1], F_SETFD, FD_CLOEXEC);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                if (runner-&gt;chfd[i] != -2)</div><div class='del'>-                        continue;</div><div class='del'>-                ret = pipe (pi[i]);</div><div class='del'>-                if (ret != -1) {</div><div class='del'>-                        runner-&gt;chio[i] = fdopen (pi[i][i ? 0 : 1], i ? "r" : "w");</div><div class='del'>-                        if (!runner-&gt;chio[i])</div><div class='del'>-                                ret = -1;</div><div class='del'>-                }</div><div class='add'>+    int pi[3][2] = {{-1, -1}, {-1, -1}, {-1, -1}};</div><div class='add'>+    int xpi[2];</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int errno_priv = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    sigset_t set;</div><div class='add'>+</div><div class='add'>+    if (runner-&gt;runerr) {</div><div class='add'>+        errno = runner-&gt;runerr;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(runner-&gt;argv[0]);</div><div class='add'>+</div><div class='add'>+    /* set up a channel to child to communicate back</div><div class='add'>+     * possible execve(2) failures</div><div class='add'>+     */</div><div class='add'>+    ret = pipe(xpi);</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        ret = fcntl(xpi[1], F_SETFD, FD_CLOEXEC);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 3; i++) {</div><div class='add'>+        if (runner-&gt;chfd[i] != -2)</div><div class='add'>+            continue;</div><div class='add'>+        ret = pipe(pi[i]);</div><div class='add'>+        if (ret != -1) {</div><div class='add'>+            runner-&gt;chio[i] = fdopen(pi[i][i ? 0 : 1], i ? "r" : "w");</div><div class='add'>+            if (!runner-&gt;chio[i])</div><div class='add'>+                ret = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret != -1)</div><div class='del'>-                runner-&gt;chpid = fork ();</div><div class='del'>-        switch (runner-&gt;chpid) {</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        runner-&gt;chpid = fork();</div><div class='add'>+    switch (runner-&gt;chpid) {</div><div class='ctx'>         case -1:</div><div class='del'>-                errno_priv = errno;</div><div class='del'>-                sys_close (xpi[0]);</div><div class='del'>-                sys_close (xpi[1]);</div><div class='del'>-                for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                        sys_close (pi[i][0]);</div><div class='del'>-                        sys_close (pi[i][1]);</div><div class='del'>-                }</div><div class='del'>-                errno = errno_priv;</div><div class='del'>-                return -1;</div><div class='add'>+            errno_priv = errno;</div><div class='add'>+            sys_close(xpi[0]);</div><div class='add'>+            sys_close(xpi[1]);</div><div class='add'>+            for (i = 0; i &lt; 3; i++) {</div><div class='add'>+                sys_close(pi[i][0]);</div><div class='add'>+                sys_close(pi[i][1]);</div><div class='add'>+            }</div><div class='add'>+            errno = errno_priv;</div><div class='add'>+            return -1;</div><div class='ctx'>         case 0:</div><div class='del'>-                for (i = 0; i &lt; 3; i++)</div><div class='del'>-                        sys_close (pi[i][i ? 0 : 1]);</div><div class='del'>-                sys_close (xpi[0]);</div><div class='del'>-                ret = 0;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                break;</div><div class='del'>-                        switch (runner-&gt;chfd[i]) {</div><div class='del'>-                        case -1:</div><div class='del'>-                                /* no redir */</div><div class='del'>-                                break;</div><div class='del'>-                        case -2:</div><div class='del'>-                                /* redir to pipe */</div><div class='del'>-                                ret = dup2 (pi[i][i ? 1 : 0], i);</div><div class='del'>-                                break;</div><div class='del'>-                        default:</div><div class='del'>-                                /* redir to file */</div><div class='del'>-                                ret = dup2 (runner-&gt;chfd[i], i);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret != -1 ) {</div><div class='del'>-                        int fdv[4] = {0, 1, 2, xpi[1]};</div><div class='del'>-</div><div class='del'>-                        ret = close_fds_except(fdv, sizeof (fdv) / sizeof (*fdv));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret != -1) {</div><div class='del'>-                        /* save child from inheriting our signal handling */</div><div class='del'>-                        sigemptyset (&amp;set);</div><div class='del'>-                        sigprocmask (SIG_SETMASK, &amp;set, NULL);</div><div class='del'>-</div><div class='del'>-                        execvp (runner-&gt;argv[0], runner-&gt;argv);</div><div class='del'>-                }</div><div class='del'>-                ret = sys_write (xpi[1], &amp;errno, sizeof (errno));</div><div class='del'>-                _exit (1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        errno_priv = errno;</div><div class='del'>-        for (i = 0; i &lt; 3; i++)</div><div class='del'>-                sys_close (pi[i][i ? 1 : 0]);</div><div class='del'>-        sys_close (xpi[1]);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                        if (runner-&gt;chio[i]) {</div><div class='del'>-                                fclose (runner-&gt;chio[i]);</div><div class='del'>-                                runner-&gt;chio[i] = NULL;</div><div class='del'>-                        }</div><div class='add'>+            for (i = 0; i &lt; 3; i++)</div><div class='add'>+                sys_close(pi[i][i ? 0 : 1]);</div><div class='add'>+            sys_close(xpi[0]);</div><div class='add'>+            ret = 0;</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; 3; i++) {</div><div class='add'>+                if (ret == -1)</div><div class='add'>+                    break;</div><div class='add'>+                switch (runner-&gt;chfd[i]) {</div><div class='add'>+                    case -1:</div><div class='add'>+                        /* no redir */</div><div class='add'>+                        break;</div><div class='add'>+                    case -2:</div><div class='add'>+                        /* redir to pipe */</div><div class='add'>+                        ret = dup2(pi[i][i ? 1 : 0], i);</div><div class='add'>+                        break;</div><div class='add'>+                    default:</div><div class='add'>+                        /* redir to file */</div><div class='add'>+                        ret = dup2(runner-&gt;chfd[i], i);</div><div class='ctx'>                 }</div><div class='del'>-        } else {</div><div class='del'>-                ret = sys_read (xpi[0], (char *)&amp;errno_priv, sizeof (errno_priv));</div><div class='del'>-                sys_close (xpi[0]);</div><div class='del'>-                if (ret &lt;= 0)</div><div class='del'>-                        return 0;</div><div class='del'>-                GF_ASSERT (ret == sizeof (errno_priv));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (ret != -1) {</div><div class='add'>+                int fdv[4] = {0, 1, 2, xpi[1]};</div><div class='add'>+</div><div class='add'>+                ret = close_fds_except(fdv, sizeof(fdv) / sizeof(*fdv));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (ret != -1) {</div><div class='add'>+                /* save child from inheriting our signal handling */</div><div class='add'>+                sigemptyset(&amp;set);</div><div class='add'>+                sigprocmask(SIG_SETMASK, &amp;set, NULL);</div><div class='add'>+</div><div class='add'>+                execvp(runner-&gt;argv[0], runner-&gt;argv);</div><div class='add'>+            }</div><div class='add'>+            ret = sys_write(xpi[1], &amp;errno, sizeof(errno));</div><div class='add'>+            _exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    errno_priv = errno;</div><div class='add'>+    for (i = 0; i &lt; 3; i++)</div><div class='add'>+        sys_close(pi[i][i ? 1 : 0]);</div><div class='add'>+    sys_close(xpi[1]);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        for (i = 0; i &lt; 3; i++) {</div><div class='add'>+            if (runner-&gt;chio[i]) {</div><div class='add'>+                fclose(runner-&gt;chio[i]);</div><div class='add'>+                runner-&gt;chio[i] = NULL;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        errno = errno_priv;</div><div class='del'>-        return -1;</div><div class='add'>+    } else {</div><div class='add'>+        ret = sys_read(xpi[0], (char *)&amp;errno_priv, sizeof(errno_priv));</div><div class='add'>+        sys_close(xpi[0]);</div><div class='add'>+        if (ret &lt;= 0)</div><div class='add'>+            return 0;</div><div class='add'>+        GF_ASSERT(ret == sizeof(errno_priv));</div><div class='add'>+    }</div><div class='add'>+    errno = errno_priv;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-runner_end_reuse (runner_t *runner)</div><div class='add'>+runner_end_reuse(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = 1;</div><div class='del'>-        int chstat = 0;</div><div class='del'>-</div><div class='del'>-        if (runner-&gt;chpid &gt; 0) {</div><div class='del'>-                if (waitpid (runner-&gt;chpid, &amp;chstat, 0) == runner-&gt;chpid) {</div><div class='del'>-                        if (WIFEXITED(chstat)) {</div><div class='del'>-                                ret = WEXITSTATUS(chstat);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = chstat;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 1;</div><div class='add'>+    int chstat = 0;</div><div class='add'>+</div><div class='add'>+    if (runner-&gt;chpid &gt; 0) {</div><div class='add'>+        if (waitpid(runner-&gt;chpid, &amp;chstat, 0) == runner-&gt;chpid) {</div><div class='add'>+            if (WIFEXITED(chstat)) {</div><div class='add'>+                ret = WEXITSTATUS(chstat);</div><div class='add'>+            } else {</div><div class='add'>+                ret = chstat;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                if (runner-&gt;chio[i]) {</div><div class='del'>-                        fclose (runner-&gt;chio[i]);</div><div class='del'>-                        runner-&gt;chio[i] = NULL;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; 3; i++) {</div><div class='add'>+        if (runner-&gt;chio[i]) {</div><div class='add'>+            fclose(runner-&gt;chio[i]);</div><div class='add'>+            runner-&gt;chio[i] = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -ret;</div><div class='add'>+    return -ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-runner_end (runner_t *runner)</div><div class='add'>+runner_end(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char **p = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char **p = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = runner_end_reuse (runner);</div><div class='add'>+    ret = runner_end_reuse(runner);</div><div class='ctx'> </div><div class='del'>-        if (runner-&gt;argv) {</div><div class='del'>-                for (p = runner-&gt;argv; *p; p++)</div><div class='del'>-                        GF_FREE (*p);</div><div class='del'>-                GF_FREE (runner-&gt;argv);</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; 3; i++)</div><div class='del'>-                sys_close (runner-&gt;chfd[i]);</div><div class='add'>+    if (runner-&gt;argv) {</div><div class='add'>+        for (p = runner-&gt;argv; *p; p++)</div><div class='add'>+            GF_FREE(*p);</div><div class='add'>+        GF_FREE(runner-&gt;argv);</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; 3; i++)</div><div class='add'>+        sys_close(runner-&gt;chfd[i]);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-runner_run_generic (runner_t *runner, int (*rfin)(runner_t *runner))</div><div class='add'>+runner_run_generic(runner_t *runner, int (*rfin)(runner_t *runner))</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = runner_start (runner);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = rfin (runner);</div><div class='add'>+    ret = runner_start(runner);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = rfin(runner);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-runner_run (runner_t *runner)</div><div class='add'>+runner_run(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-        return runner_run_generic (runner, runner_end);</div><div class='add'>+    return runner_run_generic(runner, runner_end);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-runner_run_nowait (runner_t *runner)</div><div class='add'>+runner_run_nowait(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-	int pid;</div><div class='add'>+    int pid;</div><div class='ctx'> </div><div class='del'>-	pid = fork ();</div><div class='add'>+    pid = fork();</div><div class='ctx'> </div><div class='del'>-	if (!pid) {</div><div class='del'>-		setsid ();</div><div class='del'>-		_exit (runner_start (runner));</div><div class='del'>-	}</div><div class='add'>+    if (!pid) {</div><div class='add'>+        setsid();</div><div class='add'>+        _exit(runner_start(runner));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (pid &gt; 0)</div><div class='del'>-		runner-&gt;chpid = pid;</div><div class='del'>-	return runner_end (runner);</div><div class='add'>+    if (pid &gt; 0)</div><div class='add'>+        runner-&gt;chpid = pid;</div><div class='add'>+    return runner_end(runner);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-runner_run_reuse (runner_t *runner)</div><div class='add'>+runner_run_reuse(runner_t *runner)</div><div class='ctx'> {</div><div class='del'>-        return runner_run_generic (runner, runner_end_reuse);</div><div class='add'>+    return runner_run_generic(runner, runner_end_reuse);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-runcmd (const char *arg, ...)</div><div class='add'>+runcmd(const char *arg, ...)</div><div class='ctx'> {</div><div class='del'>-        runner_t runner;</div><div class='del'>-        va_list argp;</div><div class='add'>+    runner_t runner;</div><div class='add'>+    va_list argp;</div><div class='ctx'> </div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        /* ISO C requires a named argument before '...' */</div><div class='del'>-        runner_add_arg (&amp;runner, arg);</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    /* ISO C requires a named argument before '...' */</div><div class='add'>+    runner_add_arg(&amp;runner, arg);</div><div class='ctx'> </div><div class='del'>-        va_start (argp, arg);</div><div class='del'>-        runner_va_add_args (&amp;runner, argp);</div><div class='del'>-        va_end (argp);</div><div class='add'>+    va_start(argp, arg);</div><div class='add'>+    runner_va_add_args(&amp;runner, argp);</div><div class='add'>+    va_end(argp);</div><div class='ctx'> </div><div class='del'>-        return runner_run (&amp;runner);</div><div class='add'>+    return runner_run(&amp;runner);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifdef RUN_DO_DEMO</div><div class='ctx'> static void</div><div class='del'>-TBANNER (const char *txt)</div><div class='add'>+TBANNER(const char *txt)</div><div class='ctx'> {</div><div class='del'>-        printf("######\n### demoing %s\n", txt);</div><div class='add'>+    printf("######\n### demoing %s\n", txt);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        runner_t runner;</div><div class='del'>-        char buf[80];</div><div class='del'>-        char *wdbuf;;</div><div class='del'>-        int ret;</div><div class='del'>-        int fd;</div><div class='del'>-        long pathmax = pathconf ("/", _PC_PATH_MAX);</div><div class='del'>-        struct timeval tv = {0,};</div><div class='del'>-        struct timeval *tvp = NULL;</div><div class='del'>-        char *tfile;</div><div class='del'>-</div><div class='del'>-        wdbuf = malloc (pathmax);</div><div class='del'>-        assert (wdbuf);</div><div class='del'>-        getcwd (wdbuf, pathmax);</div><div class='del'>-</div><div class='del'>-        TBANNER ("basic functionality: running \"echo a b\"");</div><div class='del'>-        runcmd ("echo", "a", "b", NULL);</div><div class='del'>-</div><div class='del'>-        TBANNER ("argv extension: running \"echo 1 2 ... 100\"");</div><div class='del'>-        runcmd ("echo", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",</div><div class='del'>-                "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",</div><div class='del'>-                "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",</div><div class='del'>-                "31", "32", "33", "34", "35", "36", "37", "38", "39", "40",</div><div class='del'>-                "41", "42", "43", "44", "45", "46", "47", "48", "49", "50",</div><div class='del'>-                "51", "52", "53", "54", "55", "56", "57", "58", "59", "60",</div><div class='del'>-                "61", "62", "63", "64", "65", "66", "67", "68", "69", "70",</div><div class='del'>-                "71", "72", "73", "74", "75", "76", "77", "78", "79", "80",</div><div class='del'>-                "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",</div><div class='del'>-                "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", NULL);</div><div class='del'>-</div><div class='del'>-        TBANNER ("add_args, argprintf, log, and popen-style functionality:\n"</div><div class='del'>-                 "    running a multiline echo command, emit a log about it,\n"</div><div class='del'>-                 "    redirect it to a pipe, read output lines\n"</div><div class='del'>-                 "    and print them prefixed with \"got: \"");</div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        runner_add_args (&amp;runner, "echo", "pid:", NULL);</div><div class='del'>-        runner_argprintf (&amp;runner, "%d\n", getpid());</div><div class='del'>-        runner_add_arg (&amp;runner, "wd:");</div><div class='del'>-        runner_add_arg (&amp;runner, wdbuf);</div><div class='del'>-        runner_redir (&amp;runner, 1, RUN_PIPE);</div><div class='del'>-        runner_start (&amp;runner);</div><div class='del'>-        runner_log (&amp;runner, "(x)", LOG_DEBUG, "starting program");</div><div class='del'>-        while (fgets (buf, sizeof(buf), runner_chio (&amp;runner, 1)))</div><div class='del'>-                printf ("got: %s", buf);</div><div class='del'>-        runner_end (&amp;runner);</div><div class='del'>-</div><div class='del'>-        TBANNER ("execve error reporting: running a non-existent command");</div><div class='del'>-        ret = runcmd ("bafflavvitty", NULL);</div><div class='del'>-        printf ("%d %d [%s]\n", ret, errno, strerror (errno));</div><div class='del'>-</div><div class='del'>-        TBANNER ("output redirection: running \"echo foo\" redirected "</div><div class='del'>-                 "to a temp file");</div><div class='del'>-        tfile = strdup ("/tmp/foofXXXXXX");</div><div class='del'>-        assert (tfile);</div><div class='del'>-        fd = mkstemp (tfile);</div><div class='del'>-        assert (fd != -1);</div><div class='del'>-        printf ("redirecting to %s\n", tfile);</div><div class='del'>-        runinit (&amp;runner);</div><div class='del'>-        runner_add_args (&amp;runner, "echo", "foo", NULL);</div><div class='del'>-        runner_redir (&amp;runner, 1, fd);</div><div class='del'>-        ret = runner_run (&amp;runner);</div><div class='del'>-        printf ("runner_run returned: %d", ret);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                printf (", with errno %d [%s]", errno, strerror (errno));</div><div class='del'>-        putchar ('\n');</div><div class='del'>-</div><div class='del'>-        /* sleep for seconds given as argument (0 means forever)</div><div class='del'>-         * to allow investigation of post-execution state to</div><div class='del'>-         * cbeck for resource leaks (eg. zombies).</div><div class='del'>-         */</div><div class='del'>-        if (argc &gt; 1) {</div><div class='del'>-                tv.tv_sec = strtoul (argv[1], NULL, 10);</div><div class='del'>-                printf ("### %s", "sleeping for");</div><div class='del'>-                if (tv.tv_sec &gt; 0) {</div><div class='del'>-                        printf (" %d seconds\n", tv.tv_sec);</div><div class='del'>-                        tvp = &amp;tv;</div><div class='del'>-                } else</div><div class='del'>-                        printf ("%s\n", "ever");</div><div class='del'>-                select (0, 0, 0, 0, tvp);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    runner_t runner;</div><div class='add'>+    char buf[80];</div><div class='add'>+    char *wdbuf;</div><div class='add'>+    ;</div><div class='add'>+    int ret;</div><div class='add'>+    int fd;</div><div class='add'>+    long pathmax = pathconf("/", _PC_PATH_MAX);</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval *tvp = NULL;</div><div class='add'>+    char *tfile;</div><div class='add'>+</div><div class='add'>+    wdbuf = malloc(pathmax);</div><div class='add'>+    assert(wdbuf);</div><div class='add'>+    getcwd(wdbuf, pathmax);</div><div class='add'>+</div><div class='add'>+    TBANNER("basic functionality: running \"echo a b\"");</div><div class='add'>+    runcmd("echo", "a", "b", NULL);</div><div class='add'>+</div><div class='add'>+    TBANNER("argv extension: running \"echo 1 2 ... 100\"");</div><div class='add'>+    runcmd("echo", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",</div><div class='add'>+           "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22",</div><div class='add'>+           "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33",</div><div class='add'>+           "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44",</div><div class='add'>+           "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55",</div><div class='add'>+           "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66",</div><div class='add'>+           "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77",</div><div class='add'>+           "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88",</div><div class='add'>+           "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99",</div><div class='add'>+           "100", NULL);</div><div class='add'>+</div><div class='add'>+    TBANNER(</div><div class='add'>+        "add_args, argprintf, log, and popen-style functionality:\n"</div><div class='add'>+        "    running a multiline echo command, emit a log about it,\n"</div><div class='add'>+        "    redirect it to a pipe, read output lines\n"</div><div class='add'>+        "    and print them prefixed with \"got: \"");</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    runner_add_args(&amp;runner, "echo", "pid:", NULL);</div><div class='add'>+    runner_argprintf(&amp;runner, "%d\n", getpid());</div><div class='add'>+    runner_add_arg(&amp;runner, "wd:");</div><div class='add'>+    runner_add_arg(&amp;runner, wdbuf);</div><div class='add'>+    runner_redir(&amp;runner, 1, RUN_PIPE);</div><div class='add'>+    runner_start(&amp;runner);</div><div class='add'>+    runner_log(&amp;runner, "(x)", LOG_DEBUG, "starting program");</div><div class='add'>+    while (fgets(buf, sizeof(buf), runner_chio(&amp;runner, 1)))</div><div class='add'>+        printf("got: %s", buf);</div><div class='add'>+    runner_end(&amp;runner);</div><div class='add'>+</div><div class='add'>+    TBANNER("execve error reporting: running a non-existent command");</div><div class='add'>+    ret = runcmd("bafflavvitty", NULL);</div><div class='add'>+    printf("%d %d [%s]\n", ret, errno, strerror(errno));</div><div class='add'>+</div><div class='add'>+    TBANNER(</div><div class='add'>+        "output redirection: running \"echo foo\" redirected "</div><div class='add'>+        "to a temp file");</div><div class='add'>+    tfile = strdup("/tmp/foofXXXXXX");</div><div class='add'>+    assert(tfile);</div><div class='add'>+    fd = mkstemp(tfile);</div><div class='add'>+    assert(fd != -1);</div><div class='add'>+    printf("redirecting to %s\n", tfile);</div><div class='add'>+    runinit(&amp;runner);</div><div class='add'>+    runner_add_args(&amp;runner, "echo", "foo", NULL);</div><div class='add'>+    runner_redir(&amp;runner, 1, fd);</div><div class='add'>+    ret = runner_run(&amp;runner);</div><div class='add'>+    printf("runner_run returned: %d", ret);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        printf(", with errno %d [%s]", errno, strerror(errno));</div><div class='add'>+    putchar('\n');</div><div class='add'>+</div><div class='add'>+    /* sleep for seconds given as argument (0 means forever)</div><div class='add'>+     * to allow investigation of post-execution state to</div><div class='add'>+     * cbeck for resource leaks (eg. zombies).</div><div class='add'>+     */</div><div class='add'>+    if (argc &gt; 1) {</div><div class='add'>+        tv.tv_sec = strtoul(argv[1], NULL, 10);</div><div class='add'>+        printf("### %s", "sleeping for");</div><div class='add'>+        if (tv.tv_sec &gt; 0) {</div><div class='add'>+            printf(" %d seconds\n", tv.tv_sec);</div><div class='add'>+            tvp = &amp;tv;</div><div class='add'>+        } else</div><div class='add'>+            printf("%s\n", "ever");</div><div class='add'>+        select(0, 0, 0, 0, tvp);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='head'>diff --git a/libglusterfs/src/stack.c b/libglusterfs/src/stack.c<br/>index 037f565aba3..7196c18418e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/stack.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/stack.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/stack.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/stack.c</a></div><div class='hunk'>@@ -13,433 +13,433 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> call_frame_t *</div><div class='del'>-create_frame (xlator_t *xl, call_pool_t *pool)</div><div class='add'>+create_frame(xlator_t *xl, call_pool_t *pool)</div><div class='ctx'> {</div><div class='del'>-        call_stack_t    *stack = NULL;</div><div class='del'>-        call_frame_t    *frame = NULL;</div><div class='del'>-</div><div class='del'>-        if (!xl || !pool) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        stack = mem_get0 (pool-&gt;stack_mem_pool);</div><div class='del'>-        if (!stack)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;stack-&gt;myframes);</div><div class='del'>-</div><div class='del'>-        frame = mem_get0 (pool-&gt;frame_mem_pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                mem_put (stack);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame-&gt;root = stack;</div><div class='del'>-        frame-&gt;this = xl;</div><div class='del'>-        LOCK_INIT (&amp;frame-&gt;lock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;frame-&gt;frames);</div><div class='del'>-        list_add (&amp;frame-&gt;frames, &amp;stack-&gt;myframes);</div><div class='del'>-</div><div class='del'>-        stack-&gt;pool = pool;</div><div class='del'>-        stack-&gt;ctx = xl-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;ctx-&gt;measure_latency) {</div><div class='del'>-                timespec_now (&amp;stack-&gt;tv);</div><div class='del'>-                memcpy (&amp;frame-&gt;begin, &amp;stack-&gt;tv,</div><div class='del'>-                        sizeof (stack-&gt;tv));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;pool-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add (&amp;stack-&gt;all_frames, &amp;pool-&gt;all_frames);</div><div class='del'>-                pool-&gt;cnt++;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;pool-&gt;lock);</div><div class='del'>-        GF_ATOMIC_INC (pool-&gt;total_count);</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;stack-&gt;stack_lock);</div><div class='del'>-</div><div class='del'>-        return frame;</div><div class='add'>+    call_stack_t *stack = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+</div><div class='add'>+    if (!xl || !pool) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stack = mem_get0(pool-&gt;stack_mem_pool);</div><div class='add'>+    if (!stack)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;stack-&gt;myframes);</div><div class='add'>+</div><div class='add'>+    frame = mem_get0(pool-&gt;frame_mem_pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        mem_put(stack);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;root = stack;</div><div class='add'>+    frame-&gt;this = xl;</div><div class='add'>+    LOCK_INIT(&amp;frame-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;frame-&gt;frames);</div><div class='add'>+    list_add(&amp;frame-&gt;frames, &amp;stack-&gt;myframes);</div><div class='add'>+</div><div class='add'>+    stack-&gt;pool = pool;</div><div class='add'>+    stack-&gt;ctx = xl-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;ctx-&gt;measure_latency) {</div><div class='add'>+        timespec_now(&amp;stack-&gt;tv);</div><div class='add'>+        memcpy(&amp;frame-&gt;begin, &amp;stack-&gt;tv, sizeof(stack-&gt;tv));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;pool-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add(&amp;stack-&gt;all_frames, &amp;pool-&gt;all_frames);</div><div class='add'>+        pool-&gt;cnt++;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;pool-&gt;lock);</div><div class='add'>+    GF_ATOMIC_INC(pool-&gt;total_count);</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;stack-&gt;stack_lock);</div><div class='add'>+</div><div class='add'>+    return frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-call_stack_set_groups (call_stack_t *stack, int ngrps, gid_t **groupbuf_p)</div><div class='add'>+call_stack_set_groups(call_stack_t *stack, int ngrps, gid_t **groupbuf_p)</div><div class='ctx'> {</div><div class='del'>-        /* We take the ownership of the passed group buffer. */</div><div class='del'>-</div><div class='del'>-        if (ngrps &lt;= SMALL_GROUP_COUNT) {</div><div class='del'>-                memcpy (stack-&gt;groups_small, *groupbuf_p,</div><div class='del'>-                        sizeof (gid_t) * ngrps);</div><div class='del'>-                stack-&gt;groups = stack-&gt;groups_small;</div><div class='del'>-                GF_FREE (*groupbuf_p);</div><div class='del'>-        } else {</div><div class='del'>-                stack-&gt;groups_large = *groupbuf_p;</div><div class='del'>-                stack-&gt;groups = stack-&gt;groups_large;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        stack-&gt;ngrps = ngrps;</div><div class='del'>-        /* Set a canary. */</div><div class='del'>-        *groupbuf_p = (void *)0xdeadf00d;</div><div class='add'>+    /* We take the ownership of the passed group buffer. */</div><div class='add'>+</div><div class='add'>+    if (ngrps &lt;= SMALL_GROUP_COUNT) {</div><div class='add'>+        memcpy(stack-&gt;groups_small, *groupbuf_p, sizeof(gid_t) * ngrps);</div><div class='add'>+        stack-&gt;groups = stack-&gt;groups_small;</div><div class='add'>+        GF_FREE(*groupbuf_p);</div><div class='add'>+    } else {</div><div class='add'>+        stack-&gt;groups_large = *groupbuf_p;</div><div class='add'>+        stack-&gt;groups = stack-&gt;groups_large;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stack-&gt;ngrps = ngrps;</div><div class='add'>+    /* Set a canary. */</div><div class='add'>+    *groupbuf_p = (void *)0xdeadf00d;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_call_frame (call_frame_t *call_frame, const char *key_buf,...)</div><div class='add'>+gf_proc_dump_call_frame(call_frame_t *call_frame, const char *key_buf, ...)</div><div class='ctx'> {</div><div class='add'>+    char prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    va_list ap;</div><div class='add'>+    call_frame_t my_frame;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int len;</div><div class='add'>+</div><div class='add'>+    if (!call_frame)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        char prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        va_list ap;</div><div class='del'>-        call_frame_t my_frame;</div><div class='del'>-        int  ret = -1;</div><div class='del'>-        char timestr[256] = {0,};</div><div class='del'>-        int len;</div><div class='add'>+    GF_ASSERT(key_buf);</div><div class='ctx'> </div><div class='del'>-        if (!call_frame)</div><div class='del'>-                return;</div><div class='add'>+    va_start(ap, key_buf);</div><div class='add'>+    vsnprintf(prefix, GF_DUMP_MAX_BUF_LEN, key_buf, ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (key_buf);</div><div class='add'>+    ret = TRY_LOCK(&amp;call_frame-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        va_start(ap, key_buf);</div><div class='del'>-        vsnprintf(prefix, GF_DUMP_MAX_BUF_LEN, key_buf, ap);</div><div class='del'>-        va_end(ap);</div><div class='add'>+    memcpy(&amp;my_frame, call_frame, sizeof(my_frame));</div><div class='add'>+    UNLOCK(&amp;call_frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK(&amp;call_frame-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        memcpy(&amp;my_frame, call_frame, sizeof(my_frame));</div><div class='del'>-        UNLOCK(&amp;call_frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (my_frame.root-&gt;ctx-&gt;measure_latency) {</div><div class='del'>-                gf_time_fmt (timestr, sizeof (timestr), my_frame.begin.tv_sec,</div><div class='del'>-                             gf_timefmt_FT);</div><div class='del'>-                len = strlen (timestr);</div><div class='del'>-                snprintf (timestr + len, sizeof (timestr) - len,</div><div class='del'>-                          ".%"GF_PRI_SNSECONDS, my_frame.begin.tv_nsec);</div><div class='del'>-                gf_proc_dump_write("frame-creation-time", "%s", timestr);</div><div class='del'>-                gf_proc_dump_write("timings", "%ld.%"GF_PRI_SNSECONDS</div><div class='del'>-                                   " -&gt; %ld.%"GF_PRI_SNSECONDS,</div><div class='del'>-                                   my_frame.begin.tv_sec,</div><div class='del'>-                                   my_frame.begin.tv_nsec,</div><div class='del'>-                                   my_frame.end.tv_sec,</div><div class='del'>-                                   my_frame.end.tv_nsec);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write("frame", "%p", call_frame);</div><div class='del'>-        gf_proc_dump_write("ref_count", "%d", my_frame.ref_count);</div><div class='del'>-        gf_proc_dump_write("translator", "%s", my_frame.this-&gt;name);</div><div class='del'>-        gf_proc_dump_write("complete", "%d", my_frame.complete);</div><div class='del'>-</div><div class='del'>-        if (my_frame.parent)</div><div class='del'>-                gf_proc_dump_write("parent", "%s", my_frame.parent-&gt;this-&gt;name);</div><div class='del'>-</div><div class='del'>-        if (my_frame.wind_from)</div><div class='del'>-                gf_proc_dump_write("wind_from", "%s", my_frame.wind_from);</div><div class='del'>-</div><div class='del'>-        if (my_frame.wind_to)</div><div class='del'>-                gf_proc_dump_write("wind_to", "%s", my_frame.wind_to);</div><div class='del'>-</div><div class='del'>-        if (my_frame.unwind_from)</div><div class='del'>-                gf_proc_dump_write("unwind_from", "%s", my_frame.unwind_from);</div><div class='del'>-</div><div class='del'>-        if (my_frame.unwind_to)</div><div class='del'>-                gf_proc_dump_write("unwind_to", "%s", my_frame.unwind_to);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (my_frame.root-&gt;ctx-&gt;measure_latency) {</div><div class='add'>+        gf_time_fmt(timestr, sizeof(timestr), my_frame.begin.tv_sec,</div><div class='add'>+                    gf_timefmt_FT);</div><div class='add'>+        len = strlen(timestr);</div><div class='add'>+        snprintf(timestr + len, sizeof(timestr) - len, ".%" GF_PRI_SNSECONDS,</div><div class='add'>+                 my_frame.begin.tv_nsec);</div><div class='add'>+        gf_proc_dump_write("frame-creation-time", "%s", timestr);</div><div class='add'>+        gf_proc_dump_write(</div><div class='add'>+            "timings", "%ld.%" GF_PRI_SNSECONDS " -&gt; %ld.%" GF_PRI_SNSECONDS,</div><div class='add'>+            my_frame.begin.tv_sec, my_frame.begin.tv_nsec, my_frame.end.tv_sec,</div><div class='add'>+            my_frame.end.tv_nsec);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_write("frame", "%p", call_frame);</div><div class='add'>+    gf_proc_dump_write("ref_count", "%d", my_frame.ref_count);</div><div class='add'>+    gf_proc_dump_write("translator", "%s", my_frame.this-&gt;name);</div><div class='add'>+    gf_proc_dump_write("complete", "%d", my_frame.complete);</div><div class='add'>+</div><div class='add'>+    if (my_frame.parent)</div><div class='add'>+        gf_proc_dump_write("parent", "%s", my_frame.parent-&gt;this-&gt;name);</div><div class='add'>+</div><div class='add'>+    if (my_frame.wind_from)</div><div class='add'>+        gf_proc_dump_write("wind_from", "%s", my_frame.wind_from);</div><div class='add'>+</div><div class='add'>+    if (my_frame.wind_to)</div><div class='add'>+        gf_proc_dump_write("wind_to", "%s", my_frame.wind_to);</div><div class='add'>+</div><div class='add'>+    if (my_frame.unwind_from)</div><div class='add'>+        gf_proc_dump_write("unwind_from", "%s", my_frame.unwind_from);</div><div class='add'>+</div><div class='add'>+    if (my_frame.unwind_to)</div><div class='add'>+        gf_proc_dump_write("unwind_to", "%s", my_frame.unwind_to);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_proc_dump_write("Unable to dump the frame information",</div><div class='del'>-                                   "(Lock acquisition failed) %p", my_frame);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_proc_dump_write("Unable to dump the frame information",</div><div class='add'>+                           "(Lock acquisition failed) %p", my_frame);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_call_stack (call_stack_t *call_stack, const char *key_buf,...)</div><div class='add'>+gf_proc_dump_call_stack(call_stack_t *call_stack, const char *key_buf, ...)</div><div class='ctx'> {</div><div class='del'>-        char prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        va_list ap;</div><div class='del'>-        call_frame_t *trav;</div><div class='del'>-        int32_t i = 1, cnt = 0;</div><div class='del'>-        char timestr[256] = {0,};</div><div class='del'>-        int len;</div><div class='del'>-</div><div class='del'>-        if (!call_stack)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (key_buf);</div><div class='del'>-</div><div class='del'>-        va_start(ap, key_buf);</div><div class='del'>-        vsnprintf(prefix, GF_DUMP_MAX_BUF_LEN, key_buf, ap);</div><div class='del'>-        va_end(ap);</div><div class='del'>-</div><div class='del'>-        cnt = call_frames_count (call_stack);</div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr), call_stack-&gt;tv.tv_sec,</div><div class='del'>-                     gf_timefmt_FT);</div><div class='del'>-        len = strlen (timestr);</div><div class='del'>-        snprintf (timestr + len, sizeof (timestr) - len,</div><div class='del'>-                  ".%"GF_PRI_SNSECONDS, call_stack-&gt;tv.tv_nsec);</div><div class='del'>-        gf_proc_dump_write("callstack-creation-time", "%s", timestr);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write("stack", "%p", call_stack);</div><div class='del'>-        gf_proc_dump_write("uid", "%d", call_stack-&gt;uid);</div><div class='del'>-        gf_proc_dump_write("gid", "%d", call_stack-&gt;gid);</div><div class='del'>-        gf_proc_dump_write("pid", "%d", call_stack-&gt;pid);</div><div class='del'>-        gf_proc_dump_write("unique", "%Ld", call_stack-&gt;unique);</div><div class='del'>-        gf_proc_dump_write("lk-owner", "%s", lkowner_utoa (&amp;call_stack-&gt;lk_owner));</div><div class='del'>-        gf_proc_dump_write("ctime", "%lld.%"GF_PRI_SNSECONDS,</div><div class='del'>-                           call_stack-&gt;tv.tv_sec, call_stack-&gt;tv.tv_nsec);</div><div class='del'>-</div><div class='del'>-        if (call_stack-&gt;type == GF_OP_TYPE_FOP)</div><div class='del'>-                gf_proc_dump_write("op", "%s",</div><div class='del'>-                                   (char *)gf_fop_list[call_stack-&gt;op]);</div><div class='del'>-        else</div><div class='del'>-                gf_proc_dump_write("op", "stack");</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write("type", "%d", call_stack-&gt;type);</div><div class='del'>-        gf_proc_dump_write("cnt", "%d", cnt);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (trav, &amp;call_stack-&gt;myframes, frames) {</div><div class='del'>-                gf_proc_dump_add_section("%s.frame.%d", prefix, i);</div><div class='del'>-                gf_proc_dump_call_frame(trav, "%s.frame.%d", prefix, i);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+    char prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    va_list ap;</div><div class='add'>+    call_frame_t *trav;</div><div class='add'>+    int32_t i = 1, cnt = 0;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int len;</div><div class='add'>+</div><div class='add'>+    if (!call_stack)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(key_buf);</div><div class='add'>+</div><div class='add'>+    va_start(ap, key_buf);</div><div class='add'>+    vsnprintf(prefix, GF_DUMP_MAX_BUF_LEN, key_buf, ap);</div><div class='add'>+    va_end(ap);</div><div class='add'>+</div><div class='add'>+    cnt = call_frames_count(call_stack);</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), call_stack-&gt;tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+    len = strlen(timestr);</div><div class='add'>+    snprintf(timestr + len, sizeof(timestr) - len, ".%" GF_PRI_SNSECONDS,</div><div class='add'>+             call_stack-&gt;tv.tv_nsec);</div><div class='add'>+    gf_proc_dump_write("callstack-creation-time", "%s", timestr);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_write("stack", "%p", call_stack);</div><div class='add'>+    gf_proc_dump_write("uid", "%d", call_stack-&gt;uid);</div><div class='add'>+    gf_proc_dump_write("gid", "%d", call_stack-&gt;gid);</div><div class='add'>+    gf_proc_dump_write("pid", "%d", call_stack-&gt;pid);</div><div class='add'>+    gf_proc_dump_write("unique", "%Ld", call_stack-&gt;unique);</div><div class='add'>+    gf_proc_dump_write("lk-owner", "%s", lkowner_utoa(&amp;call_stack-&gt;lk_owner));</div><div class='add'>+    gf_proc_dump_write("ctime", "%lld.%" GF_PRI_SNSECONDS,</div><div class='add'>+                       call_stack-&gt;tv.tv_sec, call_stack-&gt;tv.tv_nsec);</div><div class='add'>+</div><div class='add'>+    if (call_stack-&gt;type == GF_OP_TYPE_FOP)</div><div class='add'>+        gf_proc_dump_write("op", "%s", (char *)gf_fop_list[call_stack-&gt;op]);</div><div class='add'>+    else</div><div class='add'>+        gf_proc_dump_write("op", "stack");</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_write("type", "%d", call_stack-&gt;type);</div><div class='add'>+    gf_proc_dump_write("cnt", "%d", cnt);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(trav, &amp;call_stack-&gt;myframes, frames)</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_add_section("%s.frame.%d", prefix, i);</div><div class='add'>+        gf_proc_dump_call_frame(trav, "%s.frame.%d", prefix, i);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_pending_frames (call_pool_t *call_pool)</div><div class='add'>+gf_proc_dump_pending_frames(call_pool_t *call_pool)</div><div class='ctx'> {</div><div class='add'>+    call_stack_t *trav = NULL;</div><div class='add'>+    int i = 1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t section_added = _gf_false;</div><div class='ctx'> </div><div class='del'>-        call_stack_t     *trav = NULL;</div><div class='del'>-        int              i = 1;</div><div class='del'>-        int              ret = -1;</div><div class='del'>-        gf_boolean_t     section_added = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!call_pool)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ret = TRY_LOCK (&amp;(call_pool-&gt;lock));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='add'>+    if (!call_pool)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section("global.callpool");</div><div class='del'>-        section_added = _gf_true;</div><div class='del'>-        gf_proc_dump_write("callpool_address","%p", call_pool);</div><div class='del'>-        gf_proc_dump_write("callpool.cnt","%d", call_pool-&gt;cnt);</div><div class='add'>+    ret = TRY_LOCK(&amp;(call_pool-&gt;lock));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    gf_proc_dump_add_section("global.callpool");</div><div class='add'>+    section_added = _gf_true;</div><div class='add'>+    gf_proc_dump_write("callpool_address", "%p", call_pool);</div><div class='add'>+    gf_proc_dump_write("callpool.cnt", "%d", call_pool-&gt;cnt);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav, &amp;call_pool-&gt;all_frames, all_frames) {</div><div class='del'>-                gf_proc_dump_add_section("global.callpool.stack.%d",i);</div><div class='del'>-                gf_proc_dump_call_stack(trav, "global.callpool.stack.%d", i);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;(call_pool-&gt;lock));</div><div class='add'>+    list_for_each_entry(trav, &amp;call_pool-&gt;all_frames, all_frames)</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_add_section("global.callpool.stack.%d", i);</div><div class='add'>+        gf_proc_dump_call_stack(trav, "global.callpool.stack.%d", i);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;(call_pool-&gt;lock));</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (_gf_false == section_added)</div><div class='del'>-                        gf_proc_dump_add_section("global.callpool");</div><div class='del'>-                gf_proc_dump_write("Unable to dump the callpool",</div><div class='del'>-                                   "(Lock acquisition failed) %p",</div><div class='del'>-                                   call_pool);</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (_gf_false == section_added)</div><div class='add'>+            gf_proc_dump_add_section("global.callpool");</div><div class='add'>+        gf_proc_dump_write("Unable to dump the callpool",</div><div class='add'>+                           "(Lock acquisition failed) %p", call_pool);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_call_frame_to_dict (call_frame_t *call_frame,</div><div class='del'>-                                 char *prefix, dict_t *dict)</div><div class='add'>+gf_proc_dump_call_frame_to_dict(call_frame_t *call_frame, char *prefix,</div><div class='add'>+                                dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        char            msg[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        call_frame_t    tmp_frame = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char msg[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t tmp_frame = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (!call_frame || !dict)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    ret = TRY_LOCK(&amp;call_frame-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='add'>+    memcpy(&amp;tmp_frame, call_frame, sizeof(tmp_frame));</div><div class='add'>+    UNLOCK(&amp;call_frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.refcount", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, tmp_frame.ref_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.translator", prefix);</div><div class='add'>+    ret = dict_set_dynstr(dict, key, gf_strdup(tmp_frame.this-&gt;name));</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%s.complete", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, tmp_frame.complete);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!call_frame || !dict)</div><div class='del'>-                return;</div><div class='add'>+    if (tmp_frame.root-&gt;ctx-&gt;measure_latency) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.timings", prefix);</div><div class='add'>+        snprintf(msg, sizeof(msg),</div><div class='add'>+                 "%ld.%" GF_PRI_SNSECONDS " -&gt; %ld.%" GF_PRI_SNSECONDS,</div><div class='add'>+                 tmp_frame.begin.tv_sec, tmp_frame.begin.tv_nsec,</div><div class='add'>+                 tmp_frame.end.tv_sec, tmp_frame.end.tv_nsec);</div><div class='add'>+        ret = dict_set_str(dict, key, msg);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK (&amp;call_frame-&gt;lock);</div><div class='add'>+    if (tmp_frame.parent) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.parent", prefix);</div><div class='add'>+        ret = dict_set_dynstr(dict, key,</div><div class='add'>+                              gf_strdup(tmp_frame.parent-&gt;this-&gt;name));</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='del'>-        memcpy (&amp;tmp_frame, call_frame, sizeof (tmp_frame));</div><div class='del'>-        UNLOCK (&amp;call_frame-&gt;lock);</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.refcount", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, tmp_frame.ref_count);</div><div class='add'>+    if (tmp_frame.wind_from) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.windfrom", prefix);</div><div class='add'>+        ret = dict_set_dynstr(dict, key, gf_strdup(tmp_frame.wind_from));</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.translator", prefix);</div><div class='del'>-        ret = dict_set_dynstr (dict, key, gf_strdup (tmp_frame.this-&gt;name));</div><div class='add'>+    if (tmp_frame.wind_to) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.windto", prefix);</div><div class='add'>+        ret = dict_set_dynstr(dict, key, gf_strdup(tmp_frame.wind_to));</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.complete", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, tmp_frame.complete);</div><div class='add'>+    if (tmp_frame.unwind_from) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.unwindfrom", prefix);</div><div class='add'>+        ret = dict_set_dynstr(dict, key, gf_strdup(tmp_frame.unwind_from));</div><div class='ctx'>         if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        if (tmp_frame.root-&gt;ctx-&gt;measure_latency) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.timings", prefix);</div><div class='del'>-                snprintf (msg, sizeof (msg), "%ld.%"GF_PRI_SNSECONDS</div><div class='del'>-                          " -&gt; %ld.%"GF_PRI_SNSECONDS,</div><div class='del'>-                          tmp_frame.begin.tv_sec, tmp_frame.begin.tv_nsec,</div><div class='del'>-                          tmp_frame.end.tv_sec, tmp_frame.end.tv_nsec);</div><div class='del'>-                ret = dict_set_str (dict, key, msg);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (tmp_frame.parent) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.parent", prefix);</div><div class='del'>-                ret = dict_set_dynstr (dict, key,</div><div class='del'>-                                    gf_strdup (tmp_frame.parent-&gt;this-&gt;name));</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (tmp_frame.wind_from) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.windfrom", prefix);</div><div class='del'>-                ret = dict_set_dynstr (dict, key,</div><div class='del'>-                                       gf_strdup (tmp_frame.wind_from));</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (tmp_frame.wind_to) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.windto", prefix);</div><div class='del'>-                ret = dict_set_dynstr (dict, key,</div><div class='del'>-                                       gf_strdup (tmp_frame.wind_to));</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (tmp_frame.unwind_from) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.unwindfrom", prefix);</div><div class='del'>-                ret = dict_set_dynstr (dict, key,</div><div class='del'>-                                       gf_strdup (tmp_frame.unwind_from));</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (tmp_frame.unwind_to) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.unwind_to", prefix);</div><div class='del'>-                ret = dict_set_dynstr (dict, key,</div><div class='del'>-                                       gf_strdup (tmp_frame.unwind_to));</div><div class='del'>-        }</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    if (tmp_frame.unwind_to) {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.unwind_to", prefix);</div><div class='add'>+        ret = dict_set_dynstr(dict, key, gf_strdup(tmp_frame.unwind_to));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_call_stack_to_dict (call_stack_t *call_stack,</div><div class='del'>-                                 char *prefix, dict_t *dict)</div><div class='add'>+gf_proc_dump_call_stack_to_dict(call_stack_t *call_stack, char *prefix,</div><div class='add'>+                                dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        call_frame_t    *trav = NULL;</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             count = 0;</div><div class='del'>-</div><div class='del'>-        if (!call_stack || !dict)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        count = call_frames_count (call_stack);</div><div class='del'>-        snprintf (key, sizeof (key), "%s.uid", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, call_stack-&gt;uid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%s.gid", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, call_stack-&gt;gid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *trav = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    if (!call_stack || !dict)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.pid", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, call_stack-&gt;pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    count = call_frames_count(call_stack);</div><div class='add'>+    snprintf(key, sizeof(key), "%s.uid", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, call_stack-&gt;uid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.unique", prefix);</div><div class='del'>-        ret = dict_set_uint64 (dict, key, call_stack-&gt;unique);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.gid", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, call_stack-&gt;gid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.op", prefix);</div><div class='del'>-        if (call_stack-&gt;type == GF_OP_TYPE_FOP)</div><div class='del'>-                ret = dict_set_str (dict, key,</div><div class='del'>-                                    (char *)gf_fop_list[call_stack-&gt;op]);</div><div class='del'>-        else</div><div class='del'>-                ret = dict_set_str (dict, key, "other");</div><div class='add'>+    snprintf(key, sizeof(key), "%s.pid", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, call_stack-&gt;pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.unique", prefix);</div><div class='add'>+    ret = dict_set_uint64(dict, key, call_stack-&gt;unique);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.type", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, call_stack-&gt;type);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    snprintf(key, sizeof(key), "%s.op", prefix);</div><div class='add'>+    if (call_stack-&gt;type == GF_OP_TYPE_FOP)</div><div class='add'>+        ret = dict_set_str(dict, key, (char *)gf_fop_list[call_stack-&gt;op]);</div><div class='add'>+    else</div><div class='add'>+        ret = dict_set_str(dict, key, "other");</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%s.count", prefix);</div><div class='del'>-        ret = dict_set_int32 (dict, key, count);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav, &amp;call_stack-&gt;myframes, frames) {</div><div class='del'>-                snprintf (key, sizeof (key), "%s.frame%d",</div><div class='del'>-                          prefix, i);</div><div class='del'>-                gf_proc_dump_call_frame_to_dict (trav, key, dict);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+    snprintf(key, sizeof(key), "%s.type", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, call_stack-&gt;type);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='add'>+    snprintf(key, sizeof(key), "%s.count", prefix);</div><div class='add'>+    ret = dict_set_int32(dict, key, count);</div><div class='add'>+    if (ret)</div><div class='ctx'>         return;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(trav, &amp;call_stack-&gt;myframes, frames)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "%s.frame%d", prefix, i);</div><div class='add'>+        gf_proc_dump_call_frame_to_dict(trav, key, dict);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_pending_frames_to_dict (call_pool_t *call_pool, dict_t *dict)</div><div class='add'>+gf_proc_dump_pending_frames_to_dict(call_pool_t *call_pool, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        call_stack_t    *trav = NULL;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        int             i = 0;</div><div class='del'>-</div><div class='del'>-        if (!call_pool || !dict)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ret = TRY_LOCK (&amp;call_pool-&gt;lock);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        LG_MSG_LOCK_FAILURE, "Unable to dump call "</div><div class='del'>-                        "pool to dict.");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "callpool.count", call_pool-&gt;cnt);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_stack_t *trav = NULL;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!call_pool || !dict)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    ret = TRY_LOCK(&amp;call_pool-&gt;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_LOCK_FAILURE,</div><div class='add'>+               "Unable to dump call "</div><div class='add'>+               "pool to dict.");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "callpool.count", call_pool-&gt;cnt);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav, &amp;call_pool-&gt;all_frames, all_frames) {</div><div class='del'>-                snprintf (key, sizeof (key), "callpool.stack%d", i);</div><div class='del'>-                gf_proc_dump_call_stack_to_dict (trav, key, dict);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(trav, &amp;call_pool-&gt;all_frames, all_frames)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "callpool.stack%d", i);</div><div class='add'>+        gf_proc_dump_call_stack_to_dict(trav, key, dict);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;call_pool-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;call_pool-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-__is_fuse_call (call_frame_t *frame)</div><div class='add'>+__is_fuse_call(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    is_fuse_call = _gf_false;</div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        GF_ASSERT (frame-&gt;root);</div><div class='add'>+    gf_boolean_t is_fuse_call = _gf_false;</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        if (NFS_PID != frame-&gt;root-&gt;pid)</div><div class='del'>-                is_fuse_call = _gf_true;</div><div class='del'>-        return is_fuse_call;</div><div class='add'>+    if (NFS_PID != frame-&gt;root-&gt;pid)</div><div class='add'>+        is_fuse_call = _gf_true;</div><div class='add'>+    return is_fuse_call;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/statedump.c b/libglusterfs/src/statedump.c<br/>index 057499eef68..422fb05ede6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/statedump.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/statedump.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/statedump.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/statedump.c</a></div><div class='hunk'>@@ -17,7 +17,6 @@</div><div class='ctx'> #include "common-utils.h"</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_MALLOC_H</div><div class='ctx'> #include &lt;malloc.h&gt;</div><div class='ctx'> #endif /* MALLOC_H */</div><div class='hunk'>@@ -26,1035 +25,1006 @@</div><div class='ctx'>    'deadlock' with statedump. This is because statedump happens</div><div class='ctx'>    inside a signal handler and cannot afford to block on a lock.*/</div><div class='ctx'> #ifdef gf_log</div><div class='del'>-# undef gf_log</div><div class='add'>+#undef gf_log</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define GF_PROC_DUMP_IS_OPTION_ENABLED(opt)     \</div><div class='del'>-        (dump_options.dump_##opt == _gf_true)</div><div class='add'>+#define GF_PROC_DUMP_IS_OPTION_ENABLED(opt)                                    \</div><div class='add'>+    (dump_options.dump_##opt == _gf_true)</div><div class='ctx'> </div><div class='del'>-#define GF_PROC_DUMP_IS_XL_OPTION_ENABLED(opt)                  \</div><div class='del'>-        (dump_options.xl_options.dump_##opt == _gf_true)</div><div class='add'>+#define GF_PROC_DUMP_IS_XL_OPTION_ENABLED(opt)                                 \</div><div class='add'>+    (dump_options.xl_options.dump_##opt == _gf_true)</div><div class='ctx'> </div><div class='ctx'> extern xlator_t global_xlator;</div><div class='ctx'> </div><div class='del'>-static pthread_mutex_t  gf_proc_dump_mutex;</div><div class='add'>+static pthread_mutex_t gf_proc_dump_mutex;</div><div class='ctx'> static int gf_dump_fd = -1;</div><div class='ctx'> gf_dump_options_t dump_options;</div><div class='ctx'> </div><div class='ctx'> static strfd_t *gf_dump_strfd = NULL;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_lock (void)</div><div class='add'>+gf_proc_dump_lock(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;gf_proc_dump_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;gf_proc_dump_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_unlock (void)</div><div class='add'>+gf_proc_dump_unlock(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_unlock (&amp;gf_proc_dump_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;gf_proc_dump_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_open (char *tmpname)</div><div class='add'>+gf_proc_dump_open(char *tmpname)</div><div class='ctx'> {</div><div class='del'>-        int  dump_fd = -1;</div><div class='add'>+    int dump_fd = -1;</div><div class='ctx'> </div><div class='del'>-        mode_t mask = umask(S_IRWXG | S_IRWXO);</div><div class='del'>-        dump_fd = mkstemp (tmpname);</div><div class='del'>-        umask(mask);</div><div class='del'>-        if (dump_fd &lt; 0)</div><div class='del'>-                return -1;</div><div class='add'>+    mode_t mask = umask(S_IRWXG | S_IRWXO);</div><div class='add'>+    dump_fd = mkstemp(tmpname);</div><div class='add'>+    umask(mask);</div><div class='add'>+    if (dump_fd &lt; 0)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        gf_dump_fd = dump_fd;</div><div class='del'>-        return 0;</div><div class='add'>+    gf_dump_fd = dump_fd;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_close (void)</div><div class='add'>+gf_proc_dump_close(void)</div><div class='ctx'> {</div><div class='del'>-        sys_close (gf_dump_fd);</div><div class='del'>-        gf_dump_fd = -1;</div><div class='add'>+    sys_close(gf_dump_fd);</div><div class='add'>+    gf_dump_fd = -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_set_path (char *dump_options_file)</div><div class='add'>+gf_proc_dump_set_path(char *dump_options_file)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        FILE    *fp = NULL;</div><div class='del'>-        char    buf[256];</div><div class='del'>-        char    *key = NULL, *value = NULL;</div><div class='del'>-        char    *saveptr = NULL;</div><div class='del'>-</div><div class='del'>-        fp = fopen (dump_options_file, "r");</div><div class='del'>-        if (!fp)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = fscanf (fp, "%s", buf);</div><div class='del'>-</div><div class='del'>-        while (ret != EOF) {</div><div class='del'>-                key = strtok_r (buf, "=", &amp;saveptr);</div><div class='del'>-                if (!key) {</div><div class='del'>-                        ret = fscanf (fp, "%s", buf);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                value = strtok_r (NULL, "=", &amp;saveptr);</div><div class='del'>-</div><div class='del'>-                if (!value) {</div><div class='del'>-                        ret = fscanf (fp, "%s", buf);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (!strcmp (key, "path")) {</div><div class='del'>-                        dump_options.dump_path = gf_strdup (value);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    char buf[256];</div><div class='add'>+    char *key = NULL, *value = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+</div><div class='add'>+    fp = fopen(dump_options_file, "r");</div><div class='add'>+    if (!fp)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = fscanf(fp, "%s", buf);</div><div class='add'>+</div><div class='add'>+    while (ret != EOF) {</div><div class='add'>+        key = strtok_r(buf, "=", &amp;saveptr);</div><div class='add'>+        if (!key) {</div><div class='add'>+            ret = fscanf(fp, "%s", buf);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        value = strtok_r(NULL, "=", &amp;saveptr);</div><div class='add'>+</div><div class='add'>+        if (!value) {</div><div class='add'>+            ret = fscanf(fp, "%s", buf);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (!strcmp(key, "path")) {</div><div class='add'>+            dump_options.dump_path = gf_strdup(value);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_add_section_fd (char *key, va_list ap)</div><div class='add'>+gf_proc_dump_add_section_fd(char *key, va_list ap)</div><div class='ctx'> {</div><div class='add'>+    char buf[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int len;</div><div class='ctx'> </div><div class='del'>-        char buf[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int len;</div><div class='add'>+    GF_ASSERT(key);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(key);</div><div class='del'>-</div><div class='del'>-        len = snprintf (buf, GF_DUMP_MAX_BUF_LEN, "\n[");</div><div class='del'>-        len += vsnprintf (buf + len,</div><div class='del'>-                   GF_DUMP_MAX_BUF_LEN - len, key, ap);</div><div class='del'>-        len += snprintf (buf + len,</div><div class='del'>-                  GF_DUMP_MAX_BUF_LEN - len, "]\n");</div><div class='del'>-        return sys_write (gf_dump_fd, buf, len);</div><div class='add'>+    len = snprintf(buf, GF_DUMP_MAX_BUF_LEN, "\n[");</div><div class='add'>+    len += vsnprintf(buf + len, GF_DUMP_MAX_BUF_LEN - len, key, ap);</div><div class='add'>+    len += snprintf(buf + len, GF_DUMP_MAX_BUF_LEN - len, "]\n");</div><div class='add'>+    return sys_write(gf_dump_fd, buf, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_add_section_strfd (char *key, va_list ap)</div><div class='add'>+gf_proc_dump_add_section_strfd(char *key, va_list ap)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret += strprintf (gf_dump_strfd, "[");</div><div class='del'>-	ret += strvprintf (gf_dump_strfd, key, ap);</div><div class='del'>-	ret += strprintf (gf_dump_strfd,  "]\n");</div><div class='add'>+    ret += strprintf(gf_dump_strfd, "[");</div><div class='add'>+    ret += strvprintf(gf_dump_strfd, key, ap);</div><div class='add'>+    ret += strprintf(gf_dump_strfd, "]\n");</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_proc_dump_add_section (char *key, ...)</div><div class='add'>+gf_proc_dump_add_section(char *key, ...)</div><div class='ctx'> {</div><div class='del'>-	va_list ap;</div><div class='del'>-	int ret = 0;</div><div class='add'>+    va_list ap;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	va_start (ap, key);</div><div class='del'>-	if (gf_dump_strfd)</div><div class='del'>-		ret = gf_proc_dump_add_section_strfd (key, ap);</div><div class='del'>-	else</div><div class='del'>-		ret = gf_proc_dump_add_section_fd (key, ap);</div><div class='del'>-	va_end (ap);</div><div class='add'>+    va_start(ap, key);</div><div class='add'>+    if (gf_dump_strfd)</div><div class='add'>+        ret = gf_proc_dump_add_section_strfd(key, ap);</div><div class='add'>+    else</div><div class='add'>+        ret = gf_proc_dump_add_section_fd(key, ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_write_fd (char *key, char *value, va_list ap)</div><div class='add'>+gf_proc_dump_write_fd(char *key, char *value, va_list ap)</div><div class='ctx'> {</div><div class='add'>+    char buf[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int len = 0;</div><div class='ctx'> </div><div class='del'>-        char         buf[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int          len = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (key);</div><div class='add'>+    GF_ASSERT(key);</div><div class='ctx'> </div><div class='del'>-        len = snprintf (buf, GF_DUMP_MAX_BUF_LEN, "%s=", key);</div><div class='del'>-        len += vsnprintf (buf + len, GF_DUMP_MAX_BUF_LEN - len, value, ap);</div><div class='add'>+    len = snprintf(buf, GF_DUMP_MAX_BUF_LEN, "%s=", key);</div><div class='add'>+    len += vsnprintf(buf + len, GF_DUMP_MAX_BUF_LEN - len, value, ap);</div><div class='ctx'> </div><div class='del'>-        len += snprintf (buf + len, GF_DUMP_MAX_BUF_LEN - len, "\n");</div><div class='del'>-        return sys_write (gf_dump_fd, buf, len);</div><div class='add'>+    len += snprintf(buf + len, GF_DUMP_MAX_BUF_LEN - len, "\n");</div><div class='add'>+    return sys_write(gf_dump_fd, buf, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_write_strfd (char *key, char *value, va_list ap)</div><div class='add'>+gf_proc_dump_write_strfd(char *key, char *value, va_list ap)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret += strprintf (gf_dump_strfd, "%s = ", key);</div><div class='del'>-	ret += strvprintf (gf_dump_strfd, value, ap);</div><div class='del'>-	ret += strprintf (gf_dump_strfd, "\n");</div><div class='add'>+    ret += strprintf(gf_dump_strfd, "%s = ", key);</div><div class='add'>+    ret += strvprintf(gf_dump_strfd, value, ap);</div><div class='add'>+    ret += strprintf(gf_dump_strfd, "\n");</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_proc_dump_write (char *key, char *value, ...)</div><div class='add'>+gf_proc_dump_write(char *key, char *value, ...)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	va_list ap;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    va_list ap;</div><div class='ctx'> </div><div class='del'>-	va_start (ap, value);</div><div class='del'>-	if (gf_dump_strfd)</div><div class='del'>-		ret = gf_proc_dump_write_strfd (key, value, ap);</div><div class='del'>-	else</div><div class='del'>-		ret = gf_proc_dump_write_fd (key, value, ap);</div><div class='del'>-	va_end (ap);</div><div class='add'>+    va_start(ap, value);</div><div class='add'>+    if (gf_dump_strfd)</div><div class='add'>+        ret = gf_proc_dump_write_strfd(key, value, ap);</div><div class='add'>+    else</div><div class='add'>+        ret = gf_proc_dump_write_fd(key, value, ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_xlator_mem_info (xlator_t *xl)</div><div class='add'>+gf_proc_dump_xlator_mem_info(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-</div><div class='del'>-        if (!xl)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;mem_acct)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_add_section ("%s.%s - Memory usage", xl-&gt;type, xl-&gt;name);</div><div class='del'>-        gf_proc_dump_write ("num_types", "%d", xl-&gt;mem_acct-&gt;num_types);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='del'>-                if (xl-&gt;mem_acct-&gt;rec[i].num_allocs == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_add_section ("%s.%s - usage-type %s memusage",</div><div class='del'>-                                          xl-&gt;type, xl-&gt;name,</div><div class='del'>-                                          xl-&gt;mem_acct-&gt;rec[i].typestr);</div><div class='del'>-                gf_proc_dump_write ("size", "%u", xl-&gt;mem_acct-&gt;rec[i].size);</div><div class='del'>-                gf_proc_dump_write ("num_allocs", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].num_allocs);</div><div class='del'>-                gf_proc_dump_write ("max_size", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].max_size);</div><div class='del'>-                gf_proc_dump_write ("max_num_allocs", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].max_num_allocs);</div><div class='del'>-                gf_proc_dump_write ("total_allocs", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].total_allocs);</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!xl)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='add'>+    if (!xl-&gt;mem_acct)</div><div class='ctx'>         return;</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_add_section("%s.%s - Memory usage", xl-&gt;type, xl-&gt;name);</div><div class='add'>+    gf_proc_dump_write("num_types", "%d", xl-&gt;mem_acct-&gt;num_types);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='add'>+        if (xl-&gt;mem_acct-&gt;rec[i].num_allocs == 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_add_section("%s.%s - usage-type %s memusage", xl-&gt;type,</div><div class='add'>+                                 xl-&gt;name, xl-&gt;mem_acct-&gt;rec[i].typestr);</div><div class='add'>+        gf_proc_dump_write("size", "%u", xl-&gt;mem_acct-&gt;rec[i].size);</div><div class='add'>+        gf_proc_dump_write("num_allocs", "%u", xl-&gt;mem_acct-&gt;rec[i].num_allocs);</div><div class='add'>+        gf_proc_dump_write("max_size", "%u", xl-&gt;mem_acct-&gt;rec[i].max_size);</div><div class='add'>+        gf_proc_dump_write("max_num_allocs", "%u",</div><div class='add'>+                           xl-&gt;mem_acct-&gt;rec[i].max_num_allocs);</div><div class='add'>+        gf_proc_dump_write("total_allocs", "%u",</div><div class='add'>+                           xl-&gt;mem_acct-&gt;rec[i].total_allocs);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_xlator_mem_info_only_in_use (xlator_t *xl)</div><div class='add'>+gf_proc_dump_xlator_mem_info_only_in_use(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-</div><div class='del'>-        if (!xl)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;mem_acct)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_add_section ("%s.%s - Memory usage", xl-&gt;type, xl-&gt;name);</div><div class='del'>-        gf_proc_dump_write ("num_types", "%d", xl-&gt;mem_acct-&gt;num_types);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='del'>-                if (!xl-&gt;mem_acct-&gt;rec[i].size)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_add_section ("%s.%s - usage-type %d", xl-&gt;type,</div><div class='del'>-                                          xl-&gt;name,i);</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_write ("size", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].size);</div><div class='del'>-                gf_proc_dump_write ("max_size", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].max_size);</div><div class='del'>-                gf_proc_dump_write ("num_allocs", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].num_allocs);</div><div class='del'>-                gf_proc_dump_write ("max_num_allocs", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].max_num_allocs);</div><div class='del'>-                gf_proc_dump_write ("total_allocs", "%u",</div><div class='del'>-                                    xl-&gt;mem_acct-&gt;rec[i].total_allocs);</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='add'>+    if (!xl)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    if (!xl-&gt;mem_acct)</div><div class='ctx'>         return;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    gf_proc_dump_add_section("%s.%s - Memory usage", xl-&gt;type, xl-&gt;name);</div><div class='add'>+    gf_proc_dump_write("num_types", "%d", xl-&gt;mem_acct-&gt;num_types);</div><div class='ctx'> </div><div class='add'>+    for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='add'>+        if (!xl-&gt;mem_acct-&gt;rec[i].size)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_add_section("%s.%s - usage-type %d", xl-&gt;type, xl-&gt;name,</div><div class='add'>+                                 i);</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_write("size", "%u", xl-&gt;mem_acct-&gt;rec[i].size);</div><div class='add'>+        gf_proc_dump_write("max_size", "%u", xl-&gt;mem_acct-&gt;rec[i].max_size);</div><div class='add'>+        gf_proc_dump_write("num_allocs", "%u", xl-&gt;mem_acct-&gt;rec[i].num_allocs);</div><div class='add'>+        gf_proc_dump_write("max_num_allocs", "%u",</div><div class='add'>+                           xl-&gt;mem_acct-&gt;rec[i].max_num_allocs);</div><div class='add'>+        gf_proc_dump_write("total_allocs", "%u",</div><div class='add'>+                           xl-&gt;mem_acct-&gt;rec[i].total_allocs);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* Currently this dumps only mallinfo. More can be built on here */</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_mem_info ()</div><div class='add'>+gf_proc_dump_mem_info()</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_MALLOC_STATS</div><div class='del'>-        struct mallinfo info;</div><div class='del'>-</div><div class='del'>-        memset (&amp;info, 0, sizeof (struct mallinfo));</div><div class='del'>-        info = mallinfo ();</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_add_section ("mallinfo");</div><div class='del'>-        gf_proc_dump_write ("mallinfo_arena", "%d", info.arena);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_ordblks", "%d", info.ordblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_smblks", "%d", info.smblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_hblks", "%d", info.hblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_hblkhd", "%d", info.hblkhd);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_usmblks", "%d", info.usmblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_fsmblks", "%d", info.fsmblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_uordblks", "%d", info.uordblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_fordblks", "%d", info.fordblks);</div><div class='del'>-        gf_proc_dump_write ("mallinfo_keepcost", "%d", info.keepcost);</div><div class='add'>+    struct mallinfo info;</div><div class='add'>+</div><div class='add'>+    memset(&amp;info, 0, sizeof(struct mallinfo));</div><div class='add'>+    info = mallinfo();</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_add_section("mallinfo");</div><div class='add'>+    gf_proc_dump_write("mallinfo_arena", "%d", info.arena);</div><div class='add'>+    gf_proc_dump_write("mallinfo_ordblks", "%d", info.ordblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_smblks", "%d", info.smblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_hblks", "%d", info.hblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_hblkhd", "%d", info.hblkhd);</div><div class='add'>+    gf_proc_dump_write("mallinfo_usmblks", "%d", info.usmblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_fsmblks", "%d", info.fsmblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_uordblks", "%d", info.uordblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_fordblks", "%d", info.fordblks);</div><div class='add'>+    gf_proc_dump_write("mallinfo_keepcost", "%d", info.keepcost);</div><div class='ctx'> #endif</div><div class='del'>-        gf_proc_dump_xlator_mem_info(&amp;global_xlator);</div><div class='del'>-</div><div class='add'>+    gf_proc_dump_xlator_mem_info(&amp;global_xlator);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_mem_info_to_dict (dict_t *dict)</div><div class='add'>+gf_proc_dump_mem_info_to_dict(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        if (!dict)</div><div class='del'>-                return;</div><div class='add'>+    if (!dict)</div><div class='add'>+        return;</div><div class='ctx'> #ifdef HAVE_MALLOC_STATS</div><div class='del'>-        struct  mallinfo info;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    struct mallinfo info;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        memset (&amp;info, 0, sizeof(struct mallinfo));</div><div class='del'>-        info = mallinfo ();</div><div class='add'>+    memset(&amp;info, 0, sizeof(struct mallinfo));</div><div class='add'>+    info = mallinfo();</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.arena", info.arena);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.arena", info.arena);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.ordblks", info.ordblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.ordblks", info.ordblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.smblks", info.smblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.smblks", info.smblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.hblks", info.hblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.hblks", info.hblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.hblkhd", info.hblkhd);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.hblkhd", info.hblkhd);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.usmblks", info.usmblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.usmblks", info.usmblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.fsmblks", info.fsmblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.fsmblks", info.fsmblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.uordblks", info.uordblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.uordblks", info.uordblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.fordblks", info.fordblks);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.fordblks", info.fordblks);</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, "mallinfo.keepcost", info.keepcost);</div><div class='del'>-        if (ret)</div><div class='del'>-                return;</div><div class='del'>-#endif</div><div class='add'>+    ret = dict_set_int32(dict, "mallinfo.keepcost", info.keepcost);</div><div class='add'>+    if (ret)</div><div class='ctx'>         return;</div><div class='add'>+#endif</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_mempool_info (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_proc_dump_mempool_info(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        struct mem_pool *pool = NULL;</div><div class='add'>+    struct mem_pool *pool = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section ("mempool");</div><div class='add'>+    gf_proc_dump_add_section("mempool");</div><div class='ctx'> </div><div class='ctx'> #if defined(OLD_MEM_POOLS)</div><div class='del'>-        list_for_each_entry (pool, &amp;ctx-&gt;mempool_list, global_list) {</div><div class='del'>-                gf_proc_dump_write ("-----", "-----");</div><div class='del'>-                gf_proc_dump_write ("pool-name", "%s", pool-&gt;name);</div><div class='del'>-                gf_proc_dump_write ("hot-count", "%d", pool-&gt;hot_count);</div><div class='del'>-                gf_proc_dump_write ("cold-count", "%d", pool-&gt;cold_count);</div><div class='del'>-                gf_proc_dump_write ("padded_sizeof", "%lu",</div><div class='del'>-                                    pool-&gt;padded_sizeof_type);</div><div class='del'>-                gf_proc_dump_write ("alloc-count", "%"PRIu64, pool-&gt;alloc_count);</div><div class='del'>-                gf_proc_dump_write ("max-alloc", "%d", pool-&gt;max_alloc);</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_write ("pool-misses", "%"PRIu64, pool-&gt;pool_misses);</div><div class='del'>-                gf_proc_dump_write ("cur-stdalloc", "%d", pool-&gt;curr_stdalloc);</div><div class='del'>-                gf_proc_dump_write ("max-stdalloc", "%d", pool-&gt;max_stdalloc);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(pool, &amp;ctx-&gt;mempool_list, global_list)</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_write("-----", "-----");</div><div class='add'>+        gf_proc_dump_write("pool-name", "%s", pool-&gt;name);</div><div class='add'>+        gf_proc_dump_write("hot-count", "%d", pool-&gt;hot_count);</div><div class='add'>+        gf_proc_dump_write("cold-count", "%d", pool-&gt;cold_count);</div><div class='add'>+        gf_proc_dump_write("padded_sizeof", "%lu", pool-&gt;padded_sizeof_type);</div><div class='add'>+        gf_proc_dump_write("alloc-count", "%" PRIu64, pool-&gt;alloc_count);</div><div class='add'>+        gf_proc_dump_write("max-alloc", "%d", pool-&gt;max_alloc);</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_write("pool-misses", "%" PRIu64, pool-&gt;pool_misses);</div><div class='add'>+        gf_proc_dump_write("cur-stdalloc", "%d", pool-&gt;curr_stdalloc);</div><div class='add'>+        gf_proc_dump_write("max-stdalloc", "%d", pool-&gt;max_stdalloc);</div><div class='add'>+    }</div><div class='ctx'> #else</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(pool, &amp;ctx-&gt;mempool_list, owner)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (pool, &amp;ctx-&gt;mempool_list, owner) {</div><div class='del'>-                        int64_t active = GF_ATOMIC_GET (pool-&gt;active);</div><div class='del'>-</div><div class='del'>-                        gf_proc_dump_write ("-----", "-----");</div><div class='del'>-                        gf_proc_dump_write ("pool-name", "%s", pool-&gt;name);</div><div class='del'>-                        gf_proc_dump_write ("active-count", "%"GF_PRI_ATOMIC, active);</div><div class='del'>-                        gf_proc_dump_write ("sizeof-type", "%d", pool-&gt;sizeof_type);</div><div class='del'>-                        gf_proc_dump_write ("padded-sizeof", "%lu", 1 &lt;&lt; pool-&gt;pool-&gt;power_of_two);</div><div class='del'>-                        gf_proc_dump_write ("size", "%lu", (1 &lt;&lt; pool-&gt;pool-&gt;power_of_two) * active);</div><div class='del'>-                        gf_proc_dump_write ("shared-pool", "%p", pool-&gt;pool);</div><div class='del'>-                }</div><div class='add'>+            int64_t active = GF_ATOMIC_GET(pool-&gt;active);</div><div class='add'>+</div><div class='add'>+            gf_proc_dump_write("-----", "-----");</div><div class='add'>+            gf_proc_dump_write("pool-name", "%s", pool-&gt;name);</div><div class='add'>+            gf_proc_dump_write("active-count", "%" GF_PRI_ATOMIC, active);</div><div class='add'>+            gf_proc_dump_write("sizeof-type", "%d", pool-&gt;sizeof_type);</div><div class='add'>+            gf_proc_dump_write("padded-sizeof", "%lu",</div><div class='add'>+                               1 &lt;&lt; pool-&gt;pool-&gt;power_of_two);</div><div class='add'>+            gf_proc_dump_write("size", "%lu",</div><div class='add'>+                               (1 &lt;&lt; pool-&gt;pool-&gt;power_of_two) * active);</div><div class='add'>+            gf_proc_dump_write("shared-pool", "%p", pool-&gt;pool);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* TODO: details of (struct mem_pool_shared) pool-&gt;pool */</div><div class='add'>+    /* TODO: details of (struct mem_pool_shared) pool-&gt;pool */</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_mempool_info_to_dict (glusterfs_ctx_t *ctx, dict_t *dict)</div><div class='add'>+gf_proc_dump_mempool_info_to_dict(glusterfs_ctx_t *ctx, dict_t *dict)</div><div class='ctx'> {</div><div class='ctx'> #if defined(OLD_MEM_POOLS)</div><div class='del'>-        struct mem_pool *pool = NULL;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        int             count = 0;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!ctx || !dict)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (pool, &amp;ctx-&gt;mempool_list, global_list) {</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.name", count);</div><div class='del'>-                ret = dict_set_str (dict, key, pool-&gt;name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.hotcount", count);</div><div class='del'>-                ret = dict_set_int32 (dict, key, pool-&gt;hot_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.coldcount", count);</div><div class='del'>-                ret = dict_set_int32 (dict, key, pool-&gt;cold_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.paddedsizeof", count);</div><div class='del'>-                ret = dict_set_uint64 (dict, key, pool-&gt;padded_sizeof_type);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.alloccount", count);</div><div class='del'>-                ret = dict_set_uint64 (dict, key, pool-&gt;alloc_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.max_alloc", count);</div><div class='del'>-                ret = dict_set_int32 (dict, key, pool-&gt;max_alloc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.max-stdalloc", count);</div><div class='del'>-                ret = dict_set_int32 (dict, key, pool-&gt;max_stdalloc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                snprintf (key, sizeof (key), "pool%d.pool-misses", count);</div><div class='del'>-                ret = dict_set_uint64 (dict, key, pool-&gt;pool_misses);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return;</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, "mempool-count", count);</div><div class='add'>+    struct mem_pool *pool = NULL;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!ctx || !dict)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(pool, &amp;ctx-&gt;mempool_list, global_list)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.name", count);</div><div class='add'>+        ret = dict_set_str(dict, key, pool-&gt;name);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.hotcount", count);</div><div class='add'>+        ret = dict_set_int32(dict, key, pool-&gt;hot_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.coldcount", count);</div><div class='add'>+        ret = dict_set_int32(dict, key, pool-&gt;cold_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.paddedsizeof", count);</div><div class='add'>+        ret = dict_set_uint64(dict, key, pool-&gt;padded_sizeof_type);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.alloccount", count);</div><div class='add'>+        ret = dict_set_uint64(dict, key, pool-&gt;alloc_count);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.max_alloc", count);</div><div class='add'>+        ret = dict_set_int32(dict, key, pool-&gt;max_alloc);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.max-stdalloc", count);</div><div class='add'>+        ret = dict_set_int32(dict, key, pool-&gt;max_stdalloc);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+</div><div class='add'>+        snprintf(key, sizeof(key), "pool%d.pool-misses", count);</div><div class='add'>+        ret = dict_set_uint64(dict, key, pool-&gt;pool_misses);</div><div class='add'>+        if (ret)</div><div class='add'>+            return;</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, "mempool-count", count);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void gf_proc_dump_latency_info (xlator_t *xl);</div><div class='add'>+void</div><div class='add'>+gf_proc_dump_latency_info(xlator_t *xl);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_dict_info (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_proc_dump_dict_info(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        uint64_t total_dicts = 0;</div><div class='del'>-        uint64_t total_pairs = 0;</div><div class='del'>-</div><div class='del'>-        total_dicts = GF_ATOMIC_GET (ctx-&gt;stats.total_dicts_used);</div><div class='del'>-        total_pairs = GF_ATOMIC_GET (ctx-&gt;stats.total_pairs_used);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write ("max-pairs-per-dict", "%u",</div><div class='del'>-                            GF_ATOMIC_GET (ctx-&gt;stats.max_dict_pairs));</div><div class='del'>-        gf_proc_dump_write ("total-pairs-used", "%lu", total_pairs);</div><div class='del'>-        gf_proc_dump_write ("total-dicts-used", "%lu", total_dicts);</div><div class='del'>-        gf_proc_dump_write ("average-pairs-per-dict", "%lu",</div><div class='del'>-                            (total_pairs / total_dicts));</div><div class='add'>+    uint64_t total_dicts = 0;</div><div class='add'>+    uint64_t total_pairs = 0;</div><div class='add'>+</div><div class='add'>+    total_dicts = GF_ATOMIC_GET(ctx-&gt;stats.total_dicts_used);</div><div class='add'>+    total_pairs = GF_ATOMIC_GET(ctx-&gt;stats.total_pairs_used);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_write("max-pairs-per-dict", "%u",</div><div class='add'>+                       GF_ATOMIC_GET(ctx-&gt;stats.max_dict_pairs));</div><div class='add'>+    gf_proc_dump_write("total-pairs-used", "%lu", total_pairs);</div><div class='add'>+    gf_proc_dump_write("total-dicts-used", "%lu", total_dicts);</div><div class='add'>+    gf_proc_dump_write("average-pairs-per-dict", "%lu",</div><div class='add'>+                       (total_pairs / total_dicts));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_single_xlator_info (xlator_t *trav)</div><div class='add'>+gf_proc_dump_single_xlator_info(xlator_t *trav)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = trav-&gt;ctx;</div><div class='del'>-        char             itable_key[1024] = {0,};</div><div class='add'>+    glusterfs_ctx_t *ctx = trav-&gt;ctx;</div><div class='add'>+    char itable_key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='add'>+    if (trav-&gt;cleanup_starting)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (trav-&gt;cleanup_starting)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;measure_latency)</div><div class='del'>-                gf_proc_dump_latency_info (trav);</div><div class='add'>+    if (ctx-&gt;measure_latency)</div><div class='add'>+        gf_proc_dump_latency_info(trav);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_xlator_mem_info(trav);</div><div class='add'>+    gf_proc_dump_xlator_mem_info(trav);</div><div class='ctx'> </div><div class='del'>-        if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &amp;&amp;</div><div class='del'>-            (trav-&gt;itable)) {</div><div class='del'>-                snprintf (itable_key, sizeof (itable_key), "%d.%s.itable",</div><div class='del'>-                          ctx-&gt;graph_id, trav-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED(inode) &amp;&amp; (trav-&gt;itable)) {</div><div class='add'>+        snprintf(itable_key, sizeof(itable_key), "%d.%s.itable", ctx-&gt;graph_id,</div><div class='add'>+                 trav-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!trav-&gt;dumpops) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!trav-&gt;dumpops) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (trav-&gt;dumpops-&gt;priv &amp;&amp;</div><div class='del'>-            GF_PROC_DUMP_IS_XL_OPTION_ENABLED (priv))</div><div class='del'>-                trav-&gt;dumpops-&gt;priv (trav);</div><div class='add'>+    if (trav-&gt;dumpops-&gt;priv &amp;&amp; GF_PROC_DUMP_IS_XL_OPTION_ENABLED(priv))</div><div class='add'>+        trav-&gt;dumpops-&gt;priv(trav);</div><div class='ctx'> </div><div class='del'>-        if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &amp;&amp;</div><div class='del'>-            (trav-&gt;dumpops-&gt;inode))</div><div class='del'>-                trav-&gt;dumpops-&gt;inode (trav);</div><div class='del'>-        if (trav-&gt;dumpops-&gt;fd &amp;&amp;</div><div class='del'>-            GF_PROC_DUMP_IS_XL_OPTION_ENABLED (fd))</div><div class='del'>-                trav-&gt;dumpops-&gt;fd (trav);</div><div class='add'>+    if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED(inode) &amp;&amp; (trav-&gt;dumpops-&gt;inode))</div><div class='add'>+        trav-&gt;dumpops-&gt;inode(trav);</div><div class='add'>+    if (trav-&gt;dumpops-&gt;fd &amp;&amp; GF_PROC_DUMP_IS_XL_OPTION_ENABLED(fd))</div><div class='add'>+        trav-&gt;dumpops-&gt;fd(trav);</div><div class='ctx'> </div><div class='del'>-        if (trav-&gt;dumpops-&gt;history &amp;&amp;</div><div class='del'>-            GF_PROC_DUMP_IS_XL_OPTION_ENABLED (history))</div><div class='del'>-                trav-&gt;dumpops-&gt;history (trav);</div><div class='add'>+    if (trav-&gt;dumpops-&gt;history &amp;&amp; GF_PROC_DUMP_IS_XL_OPTION_ENABLED(history))</div><div class='add'>+        trav-&gt;dumpops-&gt;history(trav);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_per_xlator_info (xlator_t *top)</div><div class='add'>+gf_proc_dump_per_xlator_info(xlator_t *top)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *trav = top;</div><div class='add'>+    xlator_t *trav = top;</div><div class='ctx'> </div><div class='del'>-        while (trav &amp;&amp; !trav-&gt;cleanup_starting) {</div><div class='del'>-                gf_proc_dump_single_xlator_info (trav);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    while (trav &amp;&amp; !trav-&gt;cleanup_starting) {</div><div class='add'>+        gf_proc_dump_single_xlator_info(trav);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_xlator_info (xlator_t *top, gf_boolean_t brick_mux)</div><div class='add'>+gf_proc_dump_xlator_info(xlator_t *top, gf_boolean_t brick_mux)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *trav = NULL;</div><div class='del'>-        xlator_list_t   **trav_p        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!top)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        trav = top;</div><div class='del'>-        gf_proc_dump_per_xlator_info (trav);</div><div class='del'>-</div><div class='del'>-        if (brick_mux) {</div><div class='del'>-                trav_p = &amp;top-&gt;children;</div><div class='del'>-                while (*trav_p) {</div><div class='del'>-                        trav = (*trav_p)-&gt;xlator;</div><div class='del'>-                        gf_proc_dump_per_xlator_info (trav);</div><div class='del'>-                        trav_p = &amp;(*trav_p)-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    xlator_list_t **trav_p = NULL;</div><div class='ctx'> </div><div class='add'>+    if (!top)</div><div class='ctx'>         return;</div><div class='add'>+</div><div class='add'>+    trav = top;</div><div class='add'>+    gf_proc_dump_per_xlator_info(trav);</div><div class='add'>+</div><div class='add'>+    if (brick_mux) {</div><div class='add'>+        trav_p = &amp;top-&gt;children;</div><div class='add'>+        while (*trav_p) {</div><div class='add'>+            trav = (*trav_p)-&gt;xlator;</div><div class='add'>+            gf_proc_dump_per_xlator_info(trav);</div><div class='add'>+            trav_p = &amp;(*trav_p)-&gt;next;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_proc_dump_oldgraph_xlator_info (xlator_t *top)</div><div class='add'>+gf_proc_dump_oldgraph_xlator_info(xlator_t *top)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *trav = NULL;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!top)</div><div class='del'>-                return;</div><div class='add'>+    if (!top)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        trav = top;</div><div class='del'>-        while (trav) {</div><div class='del'>-                gf_proc_dump_xlator_mem_info_only_in_use (trav);</div><div class='add'>+    trav = top;</div><div class='add'>+    while (trav) {</div><div class='add'>+        gf_proc_dump_xlator_mem_info_only_in_use(trav);</div><div class='ctx'> </div><div class='del'>-                if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &amp;&amp;</div><div class='del'>-                    (trav-&gt;itable)) {</div><div class='del'>-                        /*TODO: dump inode table info if necessary by</div><div class='del'>-                          printing the graph id (taken by glusterfs_cbtx_t)</div><div class='del'>-                          in the key</div><div class='del'>-                        */</div><div class='del'>-                }</div><div class='add'>+        if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED(inode) &amp;&amp; (trav-&gt;itable)) {</div><div class='add'>+            /*TODO: dump inode table info if necessary by</div><div class='add'>+              printing the graph id (taken by glusterfs_cbtx_t)</div><div class='add'>+              in the key</div><div class='add'>+            */</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!trav-&gt;dumpops) {</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        if (!trav-&gt;dumpops) {</div><div class='add'>+            trav = trav-&gt;next;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &amp;&amp;</div><div class='del'>-                    (trav-&gt;dumpops-&gt;inode))</div><div class='del'>-                        trav-&gt;dumpops-&gt;inode (trav);</div><div class='add'>+        if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED(inode) &amp;&amp; (trav-&gt;dumpops-&gt;inode))</div><div class='add'>+            trav-&gt;dumpops-&gt;inode(trav);</div><div class='ctx'> </div><div class='del'>-                if (trav-&gt;dumpops-&gt;fd &amp;&amp;</div><div class='del'>-                    GF_PROC_DUMP_IS_XL_OPTION_ENABLED (fd))</div><div class='del'>-                        trav-&gt;dumpops-&gt;fd (trav);</div><div class='add'>+        if (trav-&gt;dumpops-&gt;fd &amp;&amp; GF_PROC_DUMP_IS_XL_OPTION_ENABLED(fd))</div><div class='add'>+            trav-&gt;dumpops-&gt;fd(trav);</div><div class='ctx'> </div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_enable_all_options ()</div><div class='add'>+gf_proc_dump_enable_all_options()</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_mem, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_iobuf, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_callpool, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_priv, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_inode, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_fd, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_inodectx,</div><div class='del'>-                                 _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_fdctx, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_history,</div><div class='del'>-                                 _gf_true);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_mem, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_iobuf, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_callpool, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_priv, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_inode, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_fd, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_inodectx, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_fdctx, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_history, _gf_true);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-is_gf_proc_dump_all_disabled ()</div><div class='add'>+is_gf_proc_dump_all_disabled()</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t all_disabled = _gf_true;</div><div class='del'>-</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.dump_mem, all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.dump_iobuf, all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.dump_callpool, all_disabled,</div><div class='del'>-                                   out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.xl_options.dump_priv,</div><div class='del'>-                                   all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.xl_options.dump_inode,</div><div class='del'>-                                   all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.xl_options.dump_fd,</div><div class='del'>-                                   all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.xl_options.dump_inodectx,</div><div class='del'>-                                   all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.xl_options.dump_fdctx,</div><div class='del'>-                                   all_disabled, out);</div><div class='del'>-        GF_CHECK_DUMP_OPTION_ENABLED (dump_options.xl_options.dump_history,</div><div class='del'>-                                   all_disabled, out);</div><div class='add'>+    gf_boolean_t all_disabled = _gf_true;</div><div class='add'>+</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.dump_mem, all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.dump_iobuf, all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.dump_callpool, all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.xl_options.dump_priv,</div><div class='add'>+                                 all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.xl_options.dump_inode,</div><div class='add'>+                                 all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.xl_options.dump_fd, all_disabled,</div><div class='add'>+                                 out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.xl_options.dump_inodectx,</div><div class='add'>+                                 all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.xl_options.dump_fdctx,</div><div class='add'>+                                 all_disabled, out);</div><div class='add'>+    GF_CHECK_DUMP_OPTION_ENABLED(dump_options.xl_options.dump_history,</div><div class='add'>+                                 all_disabled, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return all_disabled;</div><div class='add'>+    return all_disabled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* These options are dumped by default if glusterdump.options</div><div class='ctx'>    file exists and it is emtpty</div><div class='ctx'> */</div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_enable_default_options ()</div><div class='add'>+gf_proc_dump_enable_default_options()</div><div class='ctx'> {</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_mem, _gf_true);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_callpool, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_mem, _gf_true);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_callpool, _gf_true);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_disable_all_options ()</div><div class='add'>+gf_proc_dump_disable_all_options()</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_mem, _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_iobuf, _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.dump_callpool, _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_priv, _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_inode,</div><div class='del'>-                                 _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_fd, _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_inodectx,</div><div class='del'>-                                 _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_fdctx, _gf_false);</div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (dump_options.xl_options.dump_history,</div><div class='del'>-                                 _gf_false);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_mem, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_iobuf, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.dump_callpool, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_priv, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_inode, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_fd, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_inodectx, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_fdctx, _gf_false);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(dump_options.xl_options.dump_history, _gf_false);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_parse_set_option (char *key, char *value)</div><div class='add'>+gf_proc_dump_parse_set_option(char *key, char *value)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    *opt_key = NULL;</div><div class='del'>-        gf_boolean_t    opt_value = _gf_false;</div><div class='del'>-        char buf[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int len;</div><div class='del'>-</div><div class='del'>-        if (!strcasecmp (key, "all")) {</div><div class='del'>-                (void)gf_proc_dump_enable_all_options ();</div><div class='del'>-                return 0;</div><div class='del'>-        } else if (!strcasecmp (key, "mem")) {</div><div class='del'>-                opt_key = &amp;dump_options.dump_mem;</div><div class='del'>-        } else if (!strcasecmp (key, "iobuf")) {</div><div class='del'>-                opt_key = &amp;dump_options.dump_iobuf;</div><div class='del'>-        } else if (!strcasecmp (key, "callpool")) {</div><div class='del'>-                opt_key = &amp;dump_options.dump_callpool;</div><div class='del'>-        } else if (!strcasecmp (key, "priv")) {</div><div class='del'>-                opt_key = &amp;dump_options.xl_options.dump_priv;</div><div class='del'>-        } else if (!strcasecmp (key, "fd")) {</div><div class='del'>-                opt_key = &amp;dump_options.xl_options.dump_fd;</div><div class='del'>-        } else if (!strcasecmp (key, "inode")) {</div><div class='del'>-                opt_key = &amp;dump_options.xl_options.dump_inode;</div><div class='del'>-        } else if (!strcasecmp (key, "inodectx")) {</div><div class='del'>-                opt_key = &amp;dump_options.xl_options.dump_inodectx;</div><div class='del'>-        } else if (!strcasecmp (key, "fdctx")) {</div><div class='del'>-                opt_key = &amp;dump_options.xl_options.dump_fdctx;</div><div class='del'>-        } else if (!strcasecmp (key, "history")) {</div><div class='del'>-                opt_key = &amp;dump_options.xl_options.dump_history;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!opt_key) {</div><div class='del'>-                //None of dump options match the key, return back</div><div class='del'>-                len = snprintf (buf, sizeof (buf), "[Warning]:None of the options "</div><div class='del'>-                          "matched key : %s\n", key);</div><div class='del'>-                if (len &lt; 0)</div><div class='del'>-                        ret = -1;</div><div class='del'>-                else {</div><div class='del'>-                        ret = sys_write (gf_dump_fd, buf, len);</div><div class='del'>-                        if (ret &gt;= 0)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    gf_boolean_t *opt_key = NULL;</div><div class='add'>+    gf_boolean_t opt_value = _gf_false;</div><div class='add'>+    char buf[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int len;</div><div class='add'>+</div><div class='add'>+    if (!strcasecmp(key, "all")) {</div><div class='add'>+        (void)gf_proc_dump_enable_all_options();</div><div class='add'>+        return 0;</div><div class='add'>+    } else if (!strcasecmp(key, "mem")) {</div><div class='add'>+        opt_key = &amp;dump_options.dump_mem;</div><div class='add'>+    } else if (!strcasecmp(key, "iobuf")) {</div><div class='add'>+        opt_key = &amp;dump_options.dump_iobuf;</div><div class='add'>+    } else if (!strcasecmp(key, "callpool")) {</div><div class='add'>+        opt_key = &amp;dump_options.dump_callpool;</div><div class='add'>+    } else if (!strcasecmp(key, "priv")) {</div><div class='add'>+        opt_key = &amp;dump_options.xl_options.dump_priv;</div><div class='add'>+    } else if (!strcasecmp(key, "fd")) {</div><div class='add'>+        opt_key = &amp;dump_options.xl_options.dump_fd;</div><div class='add'>+    } else if (!strcasecmp(key, "inode")) {</div><div class='add'>+        opt_key = &amp;dump_options.xl_options.dump_inode;</div><div class='add'>+    } else if (!strcasecmp(key, "inodectx")) {</div><div class='add'>+        opt_key = &amp;dump_options.xl_options.dump_inodectx;</div><div class='add'>+    } else if (!strcasecmp(key, "fdctx")) {</div><div class='add'>+        opt_key = &amp;dump_options.xl_options.dump_fdctx;</div><div class='add'>+    } else if (!strcasecmp(key, "history")) {</div><div class='add'>+        opt_key = &amp;dump_options.xl_options.dump_history;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!opt_key) {</div><div class='add'>+        // None of dump options match the key, return back</div><div class='add'>+        len = snprintf(buf, sizeof(buf),</div><div class='add'>+                       "[Warning]:None of the options "</div><div class='add'>+                       "matched key : %s\n",</div><div class='add'>+                       key);</div><div class='add'>+        if (len &lt; 0)</div><div class='add'>+            ret = -1;</div><div class='add'>+        else {</div><div class='add'>+            ret = sys_write(gf_dump_fd, buf, len);</div><div class='add'>+            if (ret &gt;= 0)</div><div class='add'>+                ret = -1;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        opt_value = (strncasecmp (value, "yes", 3) ?</div><div class='del'>-                     _gf_false: _gf_true);</div><div class='add'>+    opt_value = (strncasecmp(value, "yes", 3) ? _gf_false : _gf_true);</div><div class='ctx'> </div><div class='del'>-        GF_PROC_DUMP_SET_OPTION (*opt_key, opt_value);</div><div class='add'>+    GF_PROC_DUMP_SET_OPTION(*opt_key, opt_value);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_proc_dump_options_init ()</div><div class='add'>+gf_proc_dump_options_init()</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        FILE    *fp = NULL;</div><div class='del'>-        char    buf[256];</div><div class='del'>-        char    *key = NULL, *value = NULL;</div><div class='del'>-        char    *saveptr = NULL;</div><div class='del'>-        char    dump_option_file[PATH_MAX];</div><div class='del'>-</div><div class='del'>-        /* glusterd will create a file glusterdump.&lt;pid&gt;.options and</div><div class='del'>-           sets the statedump options for the process and the file is removed</div><div class='del'>-           after the statedump is taken. Direct issue of SIGUSR1 does not have</div><div class='del'>-           mechanism for considering the statedump options. So to have a way</div><div class='del'>-           of configuring the statedump of all the glusterfs processes through</div><div class='del'>-           both cli command and SIGUSR1, glusterdump.options file is searched</div><div class='del'>-           and the options mentioned in it are given the higher priority.</div><div class='del'>-        */</div><div class='del'>-        snprintf (dump_option_file, sizeof (dump_option_file),</div><div class='del'>-                  DEFAULT_VAR_RUN_DIRECTORY</div><div class='del'>-                  "/glusterdump.options");</div><div class='del'>-        fp = fopen (dump_option_file, "r");</div><div class='del'>-        if (!fp) {</div><div class='del'>-                snprintf (dump_option_file, sizeof (dump_option_file),</div><div class='del'>-                          DEFAULT_VAR_RUN_DIRECTORY</div><div class='del'>-                          "/glusterdump.%d.options", getpid ());</div><div class='del'>-</div><div class='del'>-                fp = fopen (dump_option_file, "r");</div><div class='add'>+    int ret = -1;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    char buf[256];</div><div class='add'>+    char *key = NULL, *value = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char dump_option_file[PATH_MAX];</div><div class='add'>+</div><div class='add'>+    /* glusterd will create a file glusterdump.&lt;pid&gt;.options and</div><div class='add'>+       sets the statedump options for the process and the file is removed</div><div class='add'>+       after the statedump is taken. Direct issue of SIGUSR1 does not have</div><div class='add'>+       mechanism for considering the statedump options. So to have a way</div><div class='add'>+       of configuring the statedump of all the glusterfs processes through</div><div class='add'>+       both cli command and SIGUSR1, glusterdump.options file is searched</div><div class='add'>+       and the options mentioned in it are given the higher priority.</div><div class='add'>+    */</div><div class='add'>+    snprintf(dump_option_file, sizeof(dump_option_file),</div><div class='add'>+             DEFAULT_VAR_RUN_DIRECTORY "/glusterdump.options");</div><div class='add'>+    fp = fopen(dump_option_file, "r");</div><div class='add'>+    if (!fp) {</div><div class='add'>+        snprintf(dump_option_file, sizeof(dump_option_file),</div><div class='add'>+                 DEFAULT_VAR_RUN_DIRECTORY "/glusterdump.%d.options", getpid());</div><div class='add'>+</div><div class='add'>+        fp = fopen(dump_option_file, "r");</div><div class='ctx'> </div><div class='del'>-                if (!fp) {</div><div class='del'>-                        //ENOENT, return success</div><div class='del'>-                        (void) gf_proc_dump_enable_all_options ();</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        if (!fp) {</div><div class='add'>+            // ENOENT, return success</div><div class='add'>+            (void)gf_proc_dump_enable_all_options();</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) gf_proc_dump_disable_all_options ();</div><div class='del'>-</div><div class='del'>-        // swallow the errors if setting statedump file path is failed.</div><div class='del'>-        ret = gf_proc_dump_set_path (dump_option_file);</div><div class='add'>+    (void)gf_proc_dump_disable_all_options();</div><div class='ctx'> </div><div class='del'>-        ret = fscanf (fp, "%s", buf);</div><div class='add'>+    // swallow the errors if setting statedump file path is failed.</div><div class='add'>+    ret = gf_proc_dump_set_path(dump_option_file);</div><div class='ctx'> </div><div class='del'>-        while (ret != EOF) {</div><div class='del'>-                key = strtok_r (buf, "=", &amp;saveptr);</div><div class='del'>-                if (!key) {</div><div class='del'>-                        ret = fscanf (fp, "%s", buf);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    ret = fscanf(fp, "%s", buf);</div><div class='ctx'> </div><div class='del'>-                value = strtok_r (NULL, "=", &amp;saveptr);</div><div class='add'>+    while (ret != EOF) {</div><div class='add'>+        key = strtok_r(buf, "=", &amp;saveptr);</div><div class='add'>+        if (!key) {</div><div class='add'>+            ret = fscanf(fp, "%s", buf);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!value) {</div><div class='del'>-                        ret = fscanf (fp, "%s", buf);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        value = strtok_r(NULL, "=", &amp;saveptr);</div><div class='ctx'> </div><div class='del'>-                gf_proc_dump_parse_set_option (key, value);</div><div class='add'>+        if (!value) {</div><div class='add'>+            ret = fscanf(fp, "%s", buf);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (is_gf_proc_dump_all_disabled ())</div><div class='del'>-                (void) gf_proc_dump_enable_default_options ();</div><div class='add'>+        gf_proc_dump_parse_set_option(key, value);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='add'>+    if (is_gf_proc_dump_all_disabled())</div><div class='add'>+        (void)gf_proc_dump_enable_default_options();</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_info (int signum, glusterfs_ctx_t *ctx)</div><div class='add'>+gf_proc_dump_info(int signum, glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int                i                       = 0;</div><div class='del'>-        int                ret                     = -1;</div><div class='del'>-        glusterfs_graph_t *trav                    = NULL;</div><div class='del'>-        char               brick_name[PATH_MAX]    = {0,};</div><div class='del'>-        char               timestr[256]            = {0,};</div><div class='del'>-        char               sign_string[512]        = {0,};</div><div class='del'>-        char               tmp_dump_name[PATH_MAX] = {0,};</div><div class='del'>-        char               path[PATH_MAX]          = {0,};</div><div class='del'>-        struct timeval     tv                      = {0,};</div><div class='del'>-        gf_boolean_t       is_brick_mux            = _gf_false;</div><div class='del'>-        xlator_t          *top                     = NULL;</div><div class='del'>-        xlator_list_t    **trav_p                 = NULL;</div><div class='del'>-        int                brick_count            = 0;</div><div class='del'>-        int                len                    = 0;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (ctx) {</div><div class='del'>-                top = ctx-&gt;active-&gt;first;</div><div class='del'>-                for (trav_p = &amp;top-&gt;children; *trav_p;</div><div class='del'>-                                     trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='del'>-                        brick_count++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (brick_count &gt; 1)</div><div class='del'>-                        is_brick_mux = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;cmd_args.brick_name) {</div><div class='del'>-                GF_REMOVE_SLASH_FROM_PATH (ctx-&gt;cmd_args.brick_name, brick_name);</div><div class='del'>-        } else</div><div class='del'>-                snprintf(brick_name, sizeof (brick_name), "glusterdump");</div><div class='del'>-</div><div class='del'>-        ret = gf_proc_dump_options_init ();</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = snprintf (path, sizeof (path), "%s/%s.%d.dump.%"PRIu64,</div><div class='del'>-                        ((dump_options.dump_path != NULL)</div><div class='del'>-                                ? dump_options.dump_path</div><div class='del'>-                                : ((ctx-&gt;statedump_path != NULL)</div><div class='del'>-                                        ? ctx-&gt;statedump_path</div><div class='del'>-                                        : DEFAULT_VAR_RUN_DIRECTORY)),</div><div class='del'>-                        brick_name, getpid(), (uint64_t) time (NULL));</div><div class='del'>-        if ((ret &lt; 0) || (ret &gt;= sizeof(path))) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (tmp_dump_name, PATH_MAX, "%s/dumpXXXXXX",</div><div class='del'>-                  ((dump_options.dump_path != NULL)?dump_options.dump_path:</div><div class='del'>-                   ((ctx-&gt;statedump_path != NULL)?ctx-&gt;statedump_path:</div><div class='del'>-                    DEFAULT_VAR_RUN_DIRECTORY)));</div><div class='del'>-</div><div class='del'>-        ret = gf_proc_dump_open (tmp_dump_name);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        //continue even though gettimeofday() has failed</div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (0 == ret) {</div><div class='del'>-                gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-                len = strlen (timestr);</div><div class='del'>-                snprintf (timestr + len,</div><div class='del'>-                          sizeof timestr - len,</div><div class='del'>-                          ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        len = snprintf (sign_string, sizeof (sign_string), "DUMP-START-TIME: %s\n",</div><div class='del'>-                  timestr);</div><div class='del'>-</div><div class='del'>-        //swallow the errors of write for start and end marker</div><div class='del'>-        ret = sys_write (gf_dump_fd, sign_string, len);</div><div class='del'>-</div><div class='del'>-        memset (timestr, 0, sizeof (timestr));</div><div class='del'>-</div><div class='del'>-        if (GF_PROC_DUMP_IS_OPTION_ENABLED (mem)) {</div><div class='del'>-                gf_proc_dump_mem_info ();</div><div class='del'>-                gf_proc_dump_mempool_info (ctx);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (GF_PROC_DUMP_IS_OPTION_ENABLED (iobuf))</div><div class='del'>-                iobuf_stats_dump (ctx-&gt;iobuf_pool);</div><div class='del'>-        if (GF_PROC_DUMP_IS_OPTION_ENABLED (callpool))</div><div class='del'>-                gf_proc_dump_pending_frames (ctx-&gt;pool);</div><div class='del'>-</div><div class='del'>-        /* dictionary stats */</div><div class='del'>-        gf_proc_dump_add_section ("dict");</div><div class='del'>-        gf_proc_dump_dict_info (ctx);</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;master) {</div><div class='del'>-                gf_proc_dump_add_section ("fuse");</div><div class='del'>-                gf_proc_dump_single_xlator_info (ctx-&gt;master);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glusterfs_graph_t *trav = NULL;</div><div class='add'>+    char brick_name[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char sign_string[512] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char tmp_dump_name[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t is_brick_mux = _gf_false;</div><div class='add'>+    xlator_t *top = NULL;</div><div class='add'>+    xlator_list_t **trav_p = NULL;</div><div class='add'>+    int brick_count = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (ctx) {</div><div class='add'>+        top = ctx-&gt;active-&gt;first;</div><div class='add'>+        for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='add'>+            brick_count++;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;active) {</div><div class='del'>-                gf_proc_dump_add_section ("active graph - %d", ctx-&gt;graph_id);</div><div class='del'>-                gf_proc_dump_xlator_info (ctx-&gt;active-&gt;top, is_brick_mux);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        i = 0;</div><div class='del'>-        list_for_each_entry (trav, &amp;ctx-&gt;graphs, list) {</div><div class='del'>-                if (trav == ctx-&gt;active)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_add_section ("oldgraph[%d]", i);</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_oldgraph_xlator_info (trav-&gt;top);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (0 == ret) {</div><div class='del'>-                gf_time_fmt (timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-                len = strlen (timestr);</div><div class='del'>-                snprintf (timestr + len,</div><div class='del'>-                          sizeof timestr - len,</div><div class='del'>-                          ".%"GF_PRI_SUSECONDS, tv.tv_usec);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        len = snprintf (sign_string, sizeof (sign_string), "\nDUMP-END-TIME: %s",</div><div class='del'>-                  timestr);</div><div class='del'>-        ret = sys_write (gf_dump_fd, sign_string, len);</div><div class='del'>-</div><div class='del'>-        if (gf_dump_fd != -1)</div><div class='del'>-                gf_proc_dump_close ();</div><div class='del'>-        sys_rename (tmp_dump_name, path);</div><div class='add'>+        if (brick_count &gt; 1)</div><div class='add'>+            is_brick_mux = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;cmd_args.brick_name) {</div><div class='add'>+        GF_REMOVE_SLASH_FROM_PATH(ctx-&gt;cmd_args.brick_name, brick_name);</div><div class='add'>+    } else</div><div class='add'>+        snprintf(brick_name, sizeof(brick_name), "glusterdump");</div><div class='add'>+</div><div class='add'>+    ret = gf_proc_dump_options_init();</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = snprintf(</div><div class='add'>+        path, sizeof(path), "%s/%s.%d.dump.%" PRIu64,</div><div class='add'>+        ((dump_options.dump_path != NULL)</div><div class='add'>+             ? dump_options.dump_path</div><div class='add'>+             : ((ctx-&gt;statedump_path != NULL) ? ctx-&gt;statedump_path</div><div class='add'>+                                              : DEFAULT_VAR_RUN_DIRECTORY)),</div><div class='add'>+        brick_name, getpid(), (uint64_t)time(NULL));</div><div class='add'>+    if ((ret &lt; 0) || (ret &gt;= sizeof(path))) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(</div><div class='add'>+        tmp_dump_name, PATH_MAX, "%s/dumpXXXXXX",</div><div class='add'>+        ((dump_options.dump_path != NULL)</div><div class='add'>+             ? dump_options.dump_path</div><div class='add'>+             : ((ctx-&gt;statedump_path != NULL) ? ctx-&gt;statedump_path</div><div class='add'>+                                              : DEFAULT_VAR_RUN_DIRECTORY)));</div><div class='add'>+</div><div class='add'>+    ret = gf_proc_dump_open(tmp_dump_name);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    // continue even though gettimeofday() has failed</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (0 == ret) {</div><div class='add'>+        gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+        len = strlen(timestr);</div><div class='add'>+        snprintf(timestr + len, sizeof timestr - len, ".%" GF_PRI_SUSECONDS,</div><div class='add'>+                 tv.tv_usec);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = snprintf(sign_string, sizeof(sign_string), "DUMP-START-TIME: %s\n",</div><div class='add'>+                   timestr);</div><div class='add'>+</div><div class='add'>+    // swallow the errors of write for start and end marker</div><div class='add'>+    ret = sys_write(gf_dump_fd, sign_string, len);</div><div class='add'>+</div><div class='add'>+    memset(timestr, 0, sizeof(timestr));</div><div class='add'>+</div><div class='add'>+    if (GF_PROC_DUMP_IS_OPTION_ENABLED(mem)) {</div><div class='add'>+        gf_proc_dump_mem_info();</div><div class='add'>+        gf_proc_dump_mempool_info(ctx);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (GF_PROC_DUMP_IS_OPTION_ENABLED(iobuf))</div><div class='add'>+        iobuf_stats_dump(ctx-&gt;iobuf_pool);</div><div class='add'>+    if (GF_PROC_DUMP_IS_OPTION_ENABLED(callpool))</div><div class='add'>+        gf_proc_dump_pending_frames(ctx-&gt;pool);</div><div class='add'>+</div><div class='add'>+    /* dictionary stats */</div><div class='add'>+    gf_proc_dump_add_section("dict");</div><div class='add'>+    gf_proc_dump_dict_info(ctx);</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;master) {</div><div class='add'>+        gf_proc_dump_add_section("fuse");</div><div class='add'>+        gf_proc_dump_single_xlator_info(ctx-&gt;master);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;active) {</div><div class='add'>+        gf_proc_dump_add_section("active graph - %d", ctx-&gt;graph_id);</div><div class='add'>+        gf_proc_dump_xlator_info(ctx-&gt;active-&gt;top, is_brick_mux);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    i = 0;</div><div class='add'>+    list_for_each_entry(trav, &amp;ctx-&gt;graphs, list)</div><div class='add'>+    {</div><div class='add'>+        if (trav == ctx-&gt;active)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_add_section("oldgraph[%d]", i);</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_oldgraph_xlator_info(trav-&gt;top);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (0 == ret) {</div><div class='add'>+        gf_time_fmt(timestr, sizeof timestr, tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+        len = strlen(timestr);</div><div class='add'>+        snprintf(timestr + len, sizeof timestr - len, ".%" GF_PRI_SUSECONDS,</div><div class='add'>+                 tv.tv_usec);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = snprintf(sign_string, sizeof(sign_string), "\nDUMP-END-TIME: %s",</div><div class='add'>+                   timestr);</div><div class='add'>+    ret = sys_write(gf_dump_fd, sign_string, len);</div><div class='add'>+</div><div class='add'>+    if (gf_dump_fd != -1)</div><div class='add'>+        gf_proc_dump_close();</div><div class='add'>+    sys_rename(tmp_dump_name, path);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (dump_options.dump_path);</div><div class='del'>-        dump_options.dump_path = NULL;</div><div class='del'>-        gf_proc_dump_unlock ();</div><div class='add'>+    GF_FREE(dump_options.dump_path);</div><div class='add'>+    dump_options.dump_path = NULL;</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_fini (void)</div><div class='add'>+gf_proc_dump_fini(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_destroy (&amp;gf_proc_dump_mutex);</div><div class='add'>+    pthread_mutex_destroy(&amp;gf_proc_dump_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_init ()</div><div class='add'>+gf_proc_dump_init()</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_init (&amp;gf_proc_dump_mutex, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;gf_proc_dump_mutex, NULL);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_cleanup (void)</div><div class='add'>+gf_proc_dump_cleanup(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_destroy (&amp;gf_proc_dump_mutex);</div><div class='add'>+    pthread_mutex_destroy(&amp;gf_proc_dump_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_xlator_private (xlator_t *this, strfd_t *strfd)</div><div class='add'>+gf_proc_dump_xlator_private(xlator_t *this, strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-	{</div><div class='del'>-		gf_dump_strfd = strfd;</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+    {</div><div class='add'>+        gf_dump_strfd = strfd;</div><div class='ctx'> </div><div class='del'>-		if (this-&gt;dumpops &amp;&amp; this-&gt;dumpops-&gt;priv)</div><div class='del'>-			this-&gt;dumpops-&gt;priv (this);</div><div class='add'>+        if (this-&gt;dumpops &amp;&amp; this-&gt;dumpops-&gt;priv)</div><div class='add'>+            this-&gt;dumpops-&gt;priv(this);</div><div class='ctx'> </div><div class='del'>-		gf_dump_strfd = NULL;</div><div class='del'>-	}</div><div class='del'>-	gf_proc_dump_unlock ();</div><div class='add'>+        gf_dump_strfd = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_mallinfo (strfd_t *strfd)</div><div class='add'>+gf_proc_dump_mallinfo(strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-	{</div><div class='del'>-		gf_dump_strfd = strfd;</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+    {</div><div class='add'>+        gf_dump_strfd = strfd;</div><div class='ctx'> </div><div class='del'>-		gf_proc_dump_mem_info ();</div><div class='add'>+        gf_proc_dump_mem_info();</div><div class='ctx'> </div><div class='del'>-		gf_dump_strfd = NULL;</div><div class='del'>-	}</div><div class='del'>-	gf_proc_dump_unlock ();</div><div class='add'>+        gf_dump_strfd = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_xlator_history (xlator_t *this, strfd_t *strfd)</div><div class='add'>+gf_proc_dump_xlator_history(xlator_t *this, strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-	{</div><div class='del'>-		gf_dump_strfd = strfd;</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+    {</div><div class='add'>+        gf_dump_strfd = strfd;</div><div class='ctx'> </div><div class='del'>-		if (this-&gt;dumpops &amp;&amp; this-&gt;dumpops-&gt;history)</div><div class='del'>-			this-&gt;dumpops-&gt;history (this);</div><div class='add'>+        if (this-&gt;dumpops &amp;&amp; this-&gt;dumpops-&gt;history)</div><div class='add'>+            this-&gt;dumpops-&gt;history(this);</div><div class='ctx'> </div><div class='del'>-		gf_dump_strfd = NULL;</div><div class='del'>-	}</div><div class='del'>-	gf_proc_dump_unlock ();</div><div class='add'>+        gf_dump_strfd = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_xlator_itable (xlator_t *this, strfd_t *strfd)</div><div class='add'>+gf_proc_dump_xlator_itable(xlator_t *this, strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-	{</div><div class='del'>-		gf_dump_strfd = strfd;</div><div class='del'>-</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+    {</div><div class='add'>+        gf_dump_strfd = strfd;</div><div class='ctx'> </div><div class='del'>-		gf_dump_strfd = NULL;</div><div class='del'>-	}</div><div class='del'>-	gf_proc_dump_unlock ();</div><div class='add'>+        gf_dump_strfd = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_xlator_meminfo (xlator_t *this, strfd_t *strfd)</div><div class='add'>+gf_proc_dump_xlator_meminfo(xlator_t *this, strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-	{</div><div class='del'>-		gf_dump_strfd = strfd;</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+    {</div><div class='add'>+        gf_dump_strfd = strfd;</div><div class='ctx'> </div><div class='del'>-		gf_proc_dump_xlator_mem_info (this);</div><div class='add'>+        gf_proc_dump_xlator_mem_info(this);</div><div class='ctx'> </div><div class='del'>-		gf_dump_strfd = NULL;</div><div class='del'>-	}</div><div class='del'>-	gf_proc_dump_unlock ();</div><div class='add'>+        gf_dump_strfd = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_proc_dump_xlator_profile (xlator_t *this, strfd_t *strfd)</div><div class='add'>+gf_proc_dump_xlator_profile(xlator_t *this, strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        gf_proc_dump_lock ();</div><div class='del'>-	{</div><div class='del'>-		gf_dump_strfd = strfd;</div><div class='add'>+    gf_proc_dump_lock();</div><div class='add'>+    {</div><div class='add'>+        gf_dump_strfd = strfd;</div><div class='ctx'> </div><div class='del'>-		gf_proc_dump_latency_info (this);</div><div class='add'>+        gf_proc_dump_latency_info(this);</div><div class='ctx'> </div><div class='del'>-		gf_dump_strfd = NULL;</div><div class='del'>-	}</div><div class='del'>-	gf_proc_dump_unlock ();</div><div class='add'>+        gf_dump_strfd = NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_unlock();</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/store.c b/libglusterfs/src/store.c<br/>index 5172982149f..39ca3ec1c74 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/store.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/store.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/store.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/store.c</a></div><div class='hunk'>@@ -18,725 +18,734 @@</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_store_mkdir (char *path)</div><div class='add'>+gf_store_mkdir(char *path)</div><div class='ctx'> {</div><div class='del'>-        int32_t     ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = mkdir_p (path, 0777, _gf_true);</div><div class='add'>+    ret = mkdir_p(path, 0777, _gf_true);</div><div class='ctx'> </div><div class='del'>-        if ((-1 == ret) &amp;&amp; (EEXIST != errno)) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED, "mkdir()"</div><div class='del'>-                        " failed on path %s.", path);</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    if ((-1 == ret) &amp;&amp; (EEXIST != errno)) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+               "mkdir()"</div><div class='add'>+               " failed on path %s.",</div><div class='add'>+               path);</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_handle_create_on_absence (gf_store_handle_t **shandle,</div><div class='del'>-                                   char *path)</div><div class='add'>+gf_store_handle_create_on_absence(gf_store_handle_t **shandle, char *path)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (shandle);</div><div class='del'>-        int32_t     ret = 0;</div><div class='add'>+    GF_ASSERT(shandle);</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (*shandle == NULL) {</div><div class='del'>-                ret = gf_store_handle_new (path, shandle);</div><div class='add'>+    if (*shandle == NULL) {</div><div class='add'>+        ret = gf_store_handle_new(path, shandle);</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_STORE_HANDLE_CREATE_FAILED, "Unable to"</div><div class='del'>-                                " create store handle for path: %s", path);</div><div class='del'>-                }</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("", GF_LOG_ERROR, 0, LG_MSG_STORE_HANDLE_CREATE_FAILED,</div><div class='add'>+                   "Unable to"</div><div class='add'>+                   " create store handle for path: %s",</div><div class='add'>+                   path);</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_mkstemp (gf_store_handle_t *shandle)</div><div class='add'>+gf_store_mkstemp(gf_store_handle_t *shandle)</div><div class='ctx'> {</div><div class='del'>-        char    tmppath[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("store", shandle, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("store", shandle-&gt;path, out);</div><div class='del'>-</div><div class='del'>-        snprintf (tmppath, sizeof (tmppath), "%s.tmp", shandle-&gt;path);</div><div class='del'>-        shandle-&gt;tmp_fd = open (tmppath, O_RDWR | O_CREAT | O_TRUNC, 0600);</div><div class='del'>-        if (shandle-&gt;tmp_fd &lt; 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Failed to open %s.", tmppath);</div><div class='del'>-        }</div><div class='add'>+    char tmppath[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("store", shandle, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("store", shandle-&gt;path, out);</div><div class='add'>+</div><div class='add'>+    snprintf(tmppath, sizeof(tmppath), "%s.tmp", shandle-&gt;path);</div><div class='add'>+    shandle-&gt;tmp_fd = open(tmppath, O_RDWR | O_CREAT | O_TRUNC, 0600);</div><div class='add'>+    if (shandle-&gt;tmp_fd &lt; 0) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Failed to open %s.", tmppath);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return shandle-&gt;tmp_fd;</div><div class='add'>+    return shandle-&gt;tmp_fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_store_sync_direntry (char *path)</div><div class='add'>+gf_store_sync_direntry(char *path)</div><div class='ctx'> {</div><div class='del'>-        int             ret     = -1;</div><div class='del'>-        int             dirfd   = -1;</div><div class='del'>-        char            *dir    = NULL;</div><div class='del'>-        char            *pdir   = NULL;</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        dir = gf_strdup (path);</div><div class='del'>-        if (!dir)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pdir = dirname (dir);</div><div class='del'>-        dirfd = open (pdir, O_RDONLY);</div><div class='del'>-        if (dirfd == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='del'>-                        "Failed to open directory %s.", pdir);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_fsync (dirfd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_DIR_OP_FAILED, "Failed to fsync %s.", pdir);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int dirfd = -1;</div><div class='add'>+    char *dir = NULL;</div><div class='add'>+    char *pdir = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    dir = gf_strdup(path);</div><div class='add'>+    if (!dir)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pdir = dirname(dir);</div><div class='add'>+    dirfd = open(pdir, O_RDONLY);</div><div class='add'>+    if (dirfd == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+               "Failed to open directory %s.", pdir);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_fsync(dirfd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+               "Failed to fsync %s.", pdir);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dirfd &gt;= 0) {</div><div class='del'>-                ret = sys_close (dirfd);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_DIR_OP_FAILED, "Failed to close %s", pdir);</div><div class='del'>-                }</div><div class='add'>+    if (dirfd &gt;= 0) {</div><div class='add'>+        ret = sys_close(dirfd);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+                   "Failed to close %s", pdir);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dir)</div><div class='del'>-                GF_FREE (dir);</div><div class='add'>+    if (dir)</div><div class='add'>+        GF_FREE(dir);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_rename_tmppath (gf_store_handle_t *shandle)</div><div class='add'>+gf_store_rename_tmppath(gf_store_handle_t *shandle)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        char            tmppath[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("store", shandle, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("store", shandle-&gt;path, out);</div><div class='del'>-</div><div class='del'>-        ret = sys_fsync (shandle-&gt;tmp_fd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Failed to fsync %s", shandle-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        snprintf (tmppath, sizeof (tmppath), "%s.tmp", shandle-&gt;path);</div><div class='del'>-        ret = sys_rename (tmppath, shandle-&gt;path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Failed to rename %s to %s", tmppath,</div><div class='del'>-                        shandle-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_store_sync_direntry (tmppath);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char tmppath[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("store", shandle, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("store", shandle-&gt;path, out);</div><div class='add'>+</div><div class='add'>+    ret = sys_fsync(shandle-&gt;tmp_fd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Failed to fsync %s", shandle-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    snprintf(tmppath, sizeof(tmppath), "%s.tmp", shandle-&gt;path);</div><div class='add'>+    ret = sys_rename(tmppath, shandle-&gt;path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Failed to rename %s to %s", tmppath, shandle-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_store_sync_direntry(tmppath);</div><div class='ctx'> out:</div><div class='del'>-        if (shandle &amp;&amp; shandle-&gt;tmp_fd &gt;= 0) {</div><div class='del'>-                sys_close (shandle-&gt;tmp_fd);</div><div class='del'>-                shandle-&gt;tmp_fd = -1;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (shandle &amp;&amp; shandle-&gt;tmp_fd &gt;= 0) {</div><div class='add'>+        sys_close(shandle-&gt;tmp_fd);</div><div class='add'>+        shandle-&gt;tmp_fd = -1;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_unlink_tmppath (gf_store_handle_t *shandle)</div><div class='add'>+gf_store_unlink_tmppath(gf_store_handle_t *shandle)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        char            tmppath[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("store", shandle, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("store", shandle-&gt;path, out);</div><div class='del'>-</div><div class='del'>-        snprintf (tmppath, sizeof (tmppath), "%s.tmp", shandle-&gt;path);</div><div class='del'>-        ret = sys_unlink (tmppath);</div><div class='del'>-        if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Failed to mv %s to %s", tmppath,</div><div class='del'>-                        shandle-&gt;path);</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char tmppath[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("store", shandle, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("store", shandle-&gt;path, out);</div><div class='add'>+</div><div class='add'>+    snprintf(tmppath, sizeof(tmppath), "%s.tmp", shandle-&gt;path);</div><div class='add'>+    ret = sys_unlink(tmppath);</div><div class='add'>+    if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Failed to mv %s to %s", tmppath, shandle-&gt;path);</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (shandle &amp;&amp; shandle-&gt;tmp_fd &gt;= 0) {</div><div class='del'>-                sys_close (shandle-&gt;tmp_fd);</div><div class='del'>-                shandle-&gt;tmp_fd = -1;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (shandle &amp;&amp; shandle-&gt;tmp_fd &gt;= 0) {</div><div class='add'>+        sys_close(shandle-&gt;tmp_fd);</div><div class='add'>+        shandle-&gt;tmp_fd = -1;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_store_read_and_tokenize (FILE *file, char *str, int size, char **iter_key,</div><div class='del'>-                            char **iter_val, gf_store_op_errno_t *store_errno)</div><div class='add'>+gf_store_read_and_tokenize(FILE *file, char *str, int size, char **iter_key,</div><div class='add'>+                           char **iter_val, gf_store_op_errno_t *store_errno)</div><div class='ctx'> {</div><div class='del'>-        int32_t     ret         =   -1;</div><div class='del'>-        char        *savetok    = NULL;</div><div class='del'>-        char        *key        = NULL;</div><div class='del'>-        char        *value      = NULL;</div><div class='del'>-        char        *temp       = NULL;</div><div class='del'>-        size_t       str_len    =    0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (file);</div><div class='del'>-        GF_ASSERT (str);</div><div class='del'>-        GF_ASSERT (iter_key);</div><div class='del'>-        GF_ASSERT (iter_val);</div><div class='del'>-        GF_ASSERT (store_errno);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *savetok = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    char *temp = NULL;</div><div class='add'>+    size_t str_len = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(file);</div><div class='add'>+    GF_ASSERT(str);</div><div class='add'>+    GF_ASSERT(iter_key);</div><div class='add'>+    GF_ASSERT(iter_val);</div><div class='add'>+    GF_ASSERT(store_errno);</div><div class='ctx'> </div><div class='ctx'> retry:</div><div class='del'>-        temp = fgets (str, size, file);</div><div class='del'>-        if (temp == NULL || feof (file)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *store_errno = GD_STORE_EOF;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strcmp (str, "\n") == 0)</div><div class='del'>-                goto retry;</div><div class='del'>-</div><div class='del'>-        str_len = strlen(str);</div><div class='del'>-        str[str_len - 1] = '\0';</div><div class='del'>-        /* Truncate the "\n", as fgets stores "\n" in str */</div><div class='del'>-</div><div class='del'>-        key = strtok_r (str, "=", &amp;savetok);</div><div class='del'>-        if (!key) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *store_errno = GD_STORE_KEY_NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        value = strtok_r (NULL, "", &amp;savetok);</div><div class='del'>-        if (!value) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *store_errno = GD_STORE_VALUE_NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *iter_key = key;</div><div class='del'>-        *iter_val = value;</div><div class='del'>-        *store_errno = GD_STORE_SUCCESS;</div><div class='del'>-        ret = 0;</div><div class='add'>+    temp = fgets(str, size, file);</div><div class='add'>+    if (temp == NULL || feof(file)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *store_errno = GD_STORE_EOF;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(str, "\n") == 0)</div><div class='add'>+        goto retry;</div><div class='add'>+</div><div class='add'>+    str_len = strlen(str);</div><div class='add'>+    str[str_len - 1] = '\0';</div><div class='add'>+    /* Truncate the "\n", as fgets stores "\n" in str */</div><div class='add'>+</div><div class='add'>+    key = strtok_r(str, "=", &amp;savetok);</div><div class='add'>+    if (!key) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *store_errno = GD_STORE_KEY_NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    value = strtok_r(NULL, "", &amp;savetok);</div><div class='add'>+    if (!value) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *store_errno = GD_STORE_VALUE_NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *iter_key = key;</div><div class='add'>+    *iter_val = value;</div><div class='add'>+    *store_errno = GD_STORE_SUCCESS;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_retrieve_value (gf_store_handle_t *handle, char *key, char **value)</div><div class='add'>+gf_store_retrieve_value(gf_store_handle_t *handle, char *key, char **value)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        char            *scan_str = NULL;</div><div class='del'>-        char            *iter_key = NULL;</div><div class='del'>-        char            *iter_val = NULL;</div><div class='del'>-        char            *free_str = NULL;</div><div class='del'>-        struct stat     st        = {0,};</div><div class='del'>-        gf_store_op_errno_t store_errno = GD_STORE_SUCCESS;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (handle);</div><div class='del'>-</div><div class='del'>-        if (handle-&gt;locked == F_ULOCK)</div><div class='del'>-                /* no locking is used handle-&gt;fd gets closed() after usage */</div><div class='del'>-                handle-&gt;fd = open (handle-&gt;path, O_RDWR);</div><div class='del'>-        else</div><div class='del'>-                /* handle-&gt;fd is valid already, kept open for lockf() */</div><div class='del'>-                sys_lseek (handle-&gt;fd, 0, SEEK_SET);</div><div class='del'>-</div><div class='del'>-        if (handle-&gt;fd == -1) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Unable to open file %s", handle-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *scan_str = NULL;</div><div class='add'>+    char *iter_key = NULL;</div><div class='add'>+    char *iter_val = NULL;</div><div class='add'>+    char *free_str = NULL;</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_store_op_errno_t store_errno = GD_STORE_SUCCESS;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(handle);</div><div class='add'>+</div><div class='add'>+    if (handle-&gt;locked == F_ULOCK)</div><div class='add'>+        /* no locking is used handle-&gt;fd gets closed() after usage */</div><div class='add'>+        handle-&gt;fd = open(handle-&gt;path, O_RDWR);</div><div class='add'>+    else</div><div class='add'>+        /* handle-&gt;fd is valid already, kept open for lockf() */</div><div class='add'>+        sys_lseek(handle-&gt;fd, 0, SEEK_SET);</div><div class='add'>+</div><div class='add'>+    if (handle-&gt;fd == -1) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Unable to open file %s", handle-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!handle-&gt;read) {</div><div class='add'>+        int duped_fd = dup(handle-&gt;fd);</div><div class='add'>+</div><div class='add'>+        if (duped_fd &gt;= 0)</div><div class='add'>+            handle-&gt;read = fdopen(duped_fd, "r");</div><div class='ctx'>         if (!handle-&gt;read) {</div><div class='del'>-                int duped_fd = dup(handle-&gt;fd);</div><div class='del'>-</div><div class='del'>-                if (duped_fd &gt;= 0)</div><div class='del'>-                        handle-&gt;read = fdopen (duped_fd, "r");</div><div class='del'>-                if (!handle-&gt;read) {</div><div class='del'>-                        if (duped_fd != -1)</div><div class='del'>-                                sys_close (duped_fd);</div><div class='del'>-                        gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                                "Unable to open file %s", handle-&gt;path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                fseek (handle-&gt;read, 0, SEEK_SET);</div><div class='del'>-        }</div><div class='del'>-        ret = sys_fstat (handle-&gt;fd, &amp;st);</div><div class='add'>+            if (duped_fd != -1)</div><div class='add'>+                sys_close(duped_fd);</div><div class='add'>+            gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+                   "Unable to open file %s", handle-&gt;path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        fseek(handle-&gt;read, 0, SEEK_SET);</div><div class='add'>+    }</div><div class='add'>+    ret = sys_fstat(handle-&gt;fd, &amp;st);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "stat on file %s failed", handle-&gt;path);</div><div class='add'>+        ret = -1;</div><div class='add'>+        store_errno = GD_STORE_STAT_FAILED;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* "st.st_size + 1" is used as we are fetching each</div><div class='add'>+     * line of a file using fgets, fgets will append "\0"</div><div class='add'>+     * to the end of the string</div><div class='add'>+     */</div><div class='add'>+    scan_str = GF_CALLOC(1, st.st_size + 1, gf_common_mt_char);</div><div class='add'>+</div><div class='add'>+    if (scan_str == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        store_errno = GD_STORE_ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free_str = scan_str;</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        ret = gf_store_read_and_tokenize(handle-&gt;read, scan_str, st.st_size + 1,</div><div class='add'>+                                         &amp;iter_key, &amp;iter_val, &amp;store_errno);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "stat on file %s failed", handle-&gt;path);</div><div class='del'>-                ret = -1;</div><div class='del'>-                store_errno = GD_STORE_STAT_FAILED;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg_trace("", 0,</div><div class='add'>+                         "error while reading key '%s': "</div><div class='add'>+                         "%s",</div><div class='add'>+                         key, gf_store_strerror(store_errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* "st.st_size + 1" is used as we are fetching each</div><div class='del'>-         * line of a file using fgets, fgets will append "\0"</div><div class='del'>-         * to the end of the string</div><div class='del'>-         */</div><div class='del'>-        scan_str = GF_CALLOC (1, st.st_size + 1,</div><div class='del'>-                              gf_common_mt_char);</div><div class='del'>-</div><div class='del'>-        if (scan_str == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                store_errno = GD_STORE_ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        gf_msg_trace("", 0, "key %s read", iter_key);</div><div class='ctx'> </div><div class='del'>-        free_str = scan_str;</div><div class='del'>-</div><div class='del'>-        do {</div><div class='del'>-                ret = gf_store_read_and_tokenize (handle-&gt;read, scan_str,</div><div class='del'>-                                                  st.st_size + 1,</div><div class='del'>-                                                  &amp;iter_key, &amp;iter_val,</div><div class='del'>-                                                  &amp;store_errno);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_trace ("", 0, "error while reading key '%s': "</div><div class='del'>-                                      "%s", key,</div><div class='del'>-                                      gf_store_strerror (store_errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg_trace ("", 0, "key %s read", iter_key);</div><div class='del'>-</div><div class='del'>-                if (!strcmp (key, iter_key)) {</div><div class='del'>-                        gf_msg_debug ("", 0, "key %s found", key);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        if (iter_val)</div><div class='del'>-                                *value = gf_strdup (iter_val);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } while (1);</div><div class='del'>-out:</div><div class='del'>-        if (handle-&gt;read) {</div><div class='del'>-                fclose (handle-&gt;read);</div><div class='del'>-                handle-&gt;read = NULL;</div><div class='add'>+        if (!strcmp(key, iter_key)) {</div><div class='add'>+            gf_msg_debug("", 0, "key %s found", key);</div><div class='add'>+            ret = 0;</div><div class='add'>+            if (iter_val)</div><div class='add'>+                *value = gf_strdup(iter_val);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } while (1);</div><div class='add'>+out:</div><div class='add'>+    if (handle-&gt;read) {</div><div class='add'>+        fclose(handle-&gt;read);</div><div class='add'>+        handle-&gt;read = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (handle-&gt;fd &gt; 0 &amp;&amp; handle-&gt;locked == F_ULOCK) {</div><div class='del'>-                /* only invalidate handle-&gt;fd if not locked */</div><div class='del'>-                sys_close (handle-&gt;fd);</div><div class='del'>-        }</div><div class='add'>+    if (handle-&gt;fd &gt; 0 &amp;&amp; handle-&gt;locked == F_ULOCK) {</div><div class='add'>+        /* only invalidate handle-&gt;fd if not locked */</div><div class='add'>+        sys_close(handle-&gt;fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (free_str);</div><div class='add'>+    GF_FREE(free_str);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_save_value (int fd, char *key, char *value)</div><div class='add'>+gf_store_save_value(int fd, char *key, char *value)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-        int             dup_fd = -1;</div><div class='del'>-        FILE           *fp  = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (fd &gt; 0);</div><div class='del'>-        GF_ASSERT (key);</div><div class='del'>-        GF_ASSERT (value);</div><div class='del'>-</div><div class='del'>-        dup_fd = dup (fd);</div><div class='del'>-        if (dup_fd == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fp = fdopen (dup_fd, "a+");</div><div class='del'>-        if (fp == NULL) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        LG_MSG_FILE_OP_FAILED, "fdopen failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fprintf (fp, "%s=%s\n", key, value);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Unable to store key: %s, value: %s.",</div><div class='del'>-                        key, value);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fflush (fp);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "fflush failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int dup_fd = -1;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(fd &gt; 0);</div><div class='add'>+    GF_ASSERT(key);</div><div class='add'>+    GF_ASSERT(value);</div><div class='add'>+</div><div class='add'>+    dup_fd = dup(fd);</div><div class='add'>+    if (dup_fd == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fp = fdopen(dup_fd, "a+");</div><div class='add'>+    if (fp == NULL) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "fdopen failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fprintf(fp, "%s=%s\n", key, value);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Unable to store key: %s, value: %s.", key, value);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fflush(fp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "fflush failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0, "returning: %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0, "returning: %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_handle_new (const char *path, gf_store_handle_t **handle)</div><div class='add'>+gf_store_handle_new(const char *path, gf_store_handle_t **handle)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret = -1;</div><div class='del'>-        gf_store_handle_t *shandle = NULL;</div><div class='del'>-        int                     fd = -1;</div><div class='del'>-        char                    *spath = NULL;</div><div class='del'>-</div><div class='del'>-        shandle = GF_CALLOC (1, sizeof (*shandle), gf_common_mt_store_handle_t);</div><div class='del'>-        if (!shandle)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        spath = gf_strdup (path);</div><div class='del'>-        if (!spath)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fd = open (path, O_RDWR | O_CREAT | O_APPEND, 0600);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Failed to open file: %s.", path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_store_sync_direntry (spath);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        shandle-&gt;path = spath;</div><div class='del'>-        shandle-&gt;locked = F_ULOCK;</div><div class='del'>-        *handle = shandle;</div><div class='del'>-        shandle-&gt;tmp_fd = -1;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_store_handle_t *shandle = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char *spath = NULL;</div><div class='add'>+</div><div class='add'>+    shandle = GF_CALLOC(1, sizeof(*shandle), gf_common_mt_store_handle_t);</div><div class='add'>+    if (!shandle)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    spath = gf_strdup(path);</div><div class='add'>+    if (!spath)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fd = open(path, O_RDWR | O_CREAT | O_APPEND, 0600);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Failed to open file: %s.", path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_store_sync_direntry(spath);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    shandle-&gt;path = spath;</div><div class='add'>+    shandle-&gt;locked = F_ULOCK;</div><div class='add'>+    *handle = shandle;</div><div class='add'>+    shandle-&gt;tmp_fd = -1;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                sys_close (fd);</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        sys_close(fd);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                GF_FREE (spath);</div><div class='del'>-                GF_FREE (shandle);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        GF_FREE(spath);</div><div class='add'>+        GF_FREE(shandle);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug ("", 0, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_msg_debug("", 0, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_store_handle_retrieve (char *path, gf_store_handle_t **handle)</div><div class='add'>+gf_store_handle_retrieve(char *path, gf_store_handle_t **handle)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret = -1;</div><div class='del'>-        struct stat statbuf = {0};</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (path, &amp;statbuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_PATH_NOT_FOUND, "Path "</div><div class='del'>-                        "corresponding to %s.", path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret =  gf_store_handle_new (path, handle);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    struct stat statbuf = {0};</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(path, &amp;statbuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_PATH_NOT_FOUND,</div><div class='add'>+               "Path "</div><div class='add'>+               "corresponding to %s.",</div><div class='add'>+               path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = gf_store_handle_new(path, handle);</div><div class='ctx'> out:</div><div class='del'>-        gf_msg_debug ("", 0, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_msg_debug("", 0, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_handle_destroy (gf_store_handle_t *handle)</div><div class='add'>+gf_store_handle_destroy(gf_store_handle_t *handle)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!handle) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!handle) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (handle-&gt;path);</div><div class='add'>+    GF_FREE(handle-&gt;path);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (handle);</div><div class='add'>+    GF_FREE(handle);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_msg_debug ("", 0, "Returning %d", ret);</div><div class='add'>+    gf_msg_debug("", 0, "Returning %d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_iter_new (gf_store_handle_t  *shandle, gf_store_iter_t  **iter)</div><div class='add'>+gf_store_iter_new(gf_store_handle_t *shandle, gf_store_iter_t **iter)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret = -1;</div><div class='del'>-        FILE                    *fp = NULL;</div><div class='del'>-        gf_store_iter_t         *tmp_iter = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (shandle);</div><div class='del'>-        GF_ASSERT (iter);</div><div class='del'>-</div><div class='del'>-        fp = fopen (shandle-&gt;path, "r");</div><div class='del'>-        if (!fp) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Unable to open file %s", shandle-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    FILE *fp = NULL;</div><div class='add'>+    gf_store_iter_t *tmp_iter = NULL;</div><div class='ctx'> </div><div class='del'>-        tmp_iter = GF_CALLOC (1, sizeof (*tmp_iter),</div><div class='del'>-                              gf_common_mt_store_iter_t);</div><div class='del'>-        if (!tmp_iter)</div><div class='del'>-                goto out;</div><div class='add'>+    GF_ASSERT(shandle);</div><div class='add'>+    GF_ASSERT(iter);</div><div class='ctx'> </div><div class='del'>-        if (snprintf (tmp_iter-&gt;filepath, sizeof (tmp_iter-&gt;filepath), "%s",</div><div class='del'>-                      shandle-&gt;path) &gt;= sizeof (tmp_iter-&gt;filepath))</div><div class='del'>-                goto out;</div><div class='add'>+    fp = fopen(shandle-&gt;path, "r");</div><div class='add'>+    if (!fp) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Unable to open file %s", shandle-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp_iter-&gt;file = fp;</div><div class='add'>+    tmp_iter = GF_CALLOC(1, sizeof(*tmp_iter), gf_common_mt_store_iter_t);</div><div class='add'>+    if (!tmp_iter)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *iter = tmp_iter;</div><div class='del'>-        tmp_iter = NULL;</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (snprintf(tmp_iter-&gt;filepath, sizeof(tmp_iter-&gt;filepath), "%s",</div><div class='add'>+                 shandle-&gt;path) &gt;= sizeof(tmp_iter-&gt;filepath))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    tmp_iter-&gt;file = fp;</div><div class='add'>+</div><div class='add'>+    *iter = tmp_iter;</div><div class='add'>+    tmp_iter = NULL;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; fp)</div><div class='del'>-                fclose (fp);</div><div class='add'>+    if (ret &amp;&amp; fp)</div><div class='add'>+        fclose(fp);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (tmp_iter);</div><div class='add'>+    GF_FREE(tmp_iter);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug ("", 0, "Returning with %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_msg_debug("", 0, "Returning with %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_validate_key_value (char *storepath, char *key, char *val,</div><div class='del'>-                             gf_store_op_errno_t *op_errno)</div><div class='add'>+gf_store_validate_key_value(char *storepath, char *key, char *val,</div><div class='add'>+                            gf_store_op_errno_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (op_errno);</div><div class='del'>-        GF_ASSERT (storepath);</div><div class='del'>-</div><div class='del'>-        if ((key == NULL) &amp;&amp; (val == NULL)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "Glusterd "</div><div class='del'>-                        "store may be corrupted, Invalid key and value (null)"</div><div class='del'>-                        " in %s", storepath);</div><div class='del'>-                *op_errno = GD_STORE_KEY_VALUE_NULL;</div><div class='del'>-        } else if (key == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "Glusterd "</div><div class='del'>-                        "store may be corrupted, Invalid key (null) in %s",</div><div class='del'>-                        storepath);</div><div class='del'>-                *op_errno = GD_STORE_KEY_NULL;</div><div class='del'>-        } else if (val == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "Glusterd "</div><div class='del'>-                        "store may be corrupted, Invalid value (null) for key"</div><div class='del'>-                        " %s in %s", key, storepath);</div><div class='del'>-                *op_errno = GD_STORE_VALUE_NULL;</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-                *op_errno = GD_STORE_SUCCESS;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(op_errno);</div><div class='add'>+    GF_ASSERT(storepath);</div><div class='add'>+</div><div class='add'>+    if ((key == NULL) &amp;&amp; (val == NULL)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Glusterd "</div><div class='add'>+               "store may be corrupted, Invalid key and value (null)"</div><div class='add'>+               " in %s",</div><div class='add'>+               storepath);</div><div class='add'>+        *op_errno = GD_STORE_KEY_VALUE_NULL;</div><div class='add'>+    } else if (key == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Glusterd "</div><div class='add'>+               "store may be corrupted, Invalid key (null) in %s",</div><div class='add'>+               storepath);</div><div class='add'>+        *op_errno = GD_STORE_KEY_NULL;</div><div class='add'>+    } else if (val == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+               "Glusterd "</div><div class='add'>+               "store may be corrupted, Invalid value (null) for key"</div><div class='add'>+               " %s in %s",</div><div class='add'>+               key, storepath);</div><div class='add'>+        *op_errno = GD_STORE_VALUE_NULL;</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+        *op_errno = GD_STORE_SUCCESS;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_iter_get_next (gf_store_iter_t *iter, char  **key, char **value,</div><div class='del'>-                        gf_store_op_errno_t *op_errno)</div><div class='add'>+gf_store_iter_get_next(gf_store_iter_t *iter, char **key, char **value,</div><div class='add'>+                       gf_store_op_errno_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret       = -1;</div><div class='del'>-        char            *scan_str = NULL;</div><div class='del'>-        char            *iter_key = NULL;</div><div class='del'>-        char            *iter_val = NULL;</div><div class='del'>-        struct stat     st        = {0,};</div><div class='del'>-        gf_store_op_errno_t store_errno = GD_STORE_SUCCESS;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (iter);</div><div class='del'>-        GF_ASSERT (key);</div><div class='del'>-        GF_ASSERT (value);</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (iter-&gt;filepath, &amp;st);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "stat on file failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                store_errno = GD_STORE_STAT_FAILED;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* "st.st_size + 1" is used as we are fetching each</div><div class='del'>-         * line of a file using fgets, fgets will append "\0"</div><div class='del'>-         * to the end of the string</div><div class='del'>-         */</div><div class='del'>-        scan_str = GF_CALLOC (1, st.st_size + 1,</div><div class='del'>-                              gf_common_mt_char);</div><div class='del'>-        if (!scan_str) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                store_errno = GD_STORE_ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_store_read_and_tokenize (iter-&gt;file, scan_str,</div><div class='del'>-                                          st.st_size + 1,</div><div class='del'>-                                          &amp;iter_key, &amp;iter_val,</div><div class='del'>-                                          &amp;store_errno);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_store_validate_key_value (iter-&gt;filepath, iter_key,</div><div class='del'>-                                           iter_val, &amp;store_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        *key = gf_strdup (iter_key);</div><div class='del'>-        if (!*key) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                store_errno = GD_STORE_ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        *value = gf_strdup (iter_val);</div><div class='del'>-        if (!*value) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                store_errno = GD_STORE_ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *scan_str = NULL;</div><div class='add'>+    char *iter_key = NULL;</div><div class='add'>+    char *iter_val = NULL;</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_store_op_errno_t store_errno = GD_STORE_SUCCESS;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(iter);</div><div class='add'>+    GF_ASSERT(key);</div><div class='add'>+    GF_ASSERT(value);</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(iter-&gt;filepath, &amp;st);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "stat on file failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        store_errno = GD_STORE_STAT_FAILED;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* "st.st_size + 1" is used as we are fetching each</div><div class='add'>+     * line of a file using fgets, fgets will append "\0"</div><div class='add'>+     * to the end of the string</div><div class='add'>+     */</div><div class='add'>+    scan_str = GF_CALLOC(1, st.st_size + 1, gf_common_mt_char);</div><div class='add'>+    if (!scan_str) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        store_errno = GD_STORE_ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_store_read_and_tokenize(iter-&gt;file, scan_str, st.st_size + 1,</div><div class='add'>+                                     &amp;iter_key, &amp;iter_val, &amp;store_errno);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_store_validate_key_value(iter-&gt;filepath, iter_key, iter_val,</div><div class='add'>+                                      &amp;store_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    *key = gf_strdup(iter_key);</div><div class='add'>+    if (!*key) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        store_errno = GD_STORE_ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    *value = gf_strdup(iter_val);</div><div class='add'>+    if (!*value) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        store_errno = GD_STORE_ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (scan_str);</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (*key);</div><div class='del'>-                GF_FREE (*value);</div><div class='del'>-                *key = NULL;</div><div class='del'>-                *value = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (op_errno)</div><div class='del'>-                *op_errno = store_errno;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("", 0, "Returning with %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(scan_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(*key);</div><div class='add'>+        GF_FREE(*value);</div><div class='add'>+        *key = NULL;</div><div class='add'>+        *value = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (op_errno)</div><div class='add'>+        *op_errno = store_errno;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("", 0, "Returning with %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_iter_get_matching (gf_store_iter_t *iter, char *key, char **value)</div><div class='add'>+gf_store_iter_get_matching(gf_store_iter_t *iter, char *key, char **value)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        char    *tmp_key = NULL;</div><div class='del'>-        char    *tmp_value = NULL;</div><div class='del'>-</div><div class='del'>-        ret = gf_store_iter_get_next (iter, &amp;tmp_key, &amp;tmp_value, NULL);</div><div class='del'>-        while (!ret) {</div><div class='del'>-                if (!strncmp (key, tmp_key, strlen (key))){</div><div class='del'>-                        *value = tmp_value;</div><div class='del'>-                        GF_FREE (tmp_key);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (tmp_key);</div><div class='del'>-                tmp_key = NULL;</div><div class='del'>-                GF_FREE (tmp_value);</div><div class='del'>-                tmp_value = NULL;</div><div class='del'>-                ret = gf_store_iter_get_next (iter, &amp;tmp_key, &amp;tmp_value,</div><div class='del'>-                                              NULL);</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *tmp_key = NULL;</div><div class='add'>+    char *tmp_value = NULL;</div><div class='add'>+</div><div class='add'>+    ret = gf_store_iter_get_next(iter, &amp;tmp_key, &amp;tmp_value, NULL);</div><div class='add'>+    while (!ret) {</div><div class='add'>+        if (!strncmp(key, tmp_key, strlen(key))) {</div><div class='add'>+            *value = tmp_value;</div><div class='add'>+            GF_FREE(tmp_key);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        GF_FREE(tmp_key);</div><div class='add'>+        tmp_key = NULL;</div><div class='add'>+        GF_FREE(tmp_value);</div><div class='add'>+        tmp_value = NULL;</div><div class='add'>+        ret = gf_store_iter_get_next(iter, &amp;tmp_key, &amp;tmp_value, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_store_iter_destroy (gf_store_iter_t *iter)</div><div class='add'>+gf_store_iter_destroy(gf_store_iter_t *iter)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!iter)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        /* gf_store_iter_new will not return a valid iter object with iter-&gt;file</div><div class='del'>-         * being NULL*/</div><div class='del'>-        ret = fclose (iter-&gt;file);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED, "Unable"</div><div class='del'>-                        " to close file: %s, ret: %d" ,</div><div class='del'>-                        iter-&gt;filepath, ret);</div><div class='del'>-</div><div class='del'>-        GF_FREE (iter);</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!iter)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    /* gf_store_iter_new will not return a valid iter object with iter-&gt;file</div><div class='add'>+     * being NULL*/</div><div class='add'>+    ret = fclose(iter-&gt;file);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Unable"</div><div class='add'>+               " to close file: %s, ret: %d",</div><div class='add'>+               iter-&gt;filepath, ret);</div><div class='add'>+</div><div class='add'>+    GF_FREE(iter);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char*</div><div class='del'>-gf_store_strerror (gf_store_op_errno_t op_errno)</div><div class='add'>+char *</div><div class='add'>+gf_store_strerror(gf_store_op_errno_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        switch (op_errno) {</div><div class='add'>+    switch (op_errno) {</div><div class='ctx'>         case GD_STORE_SUCCESS:</div><div class='del'>-                return "Success";</div><div class='add'>+            return "Success";</div><div class='ctx'>         case GD_STORE_KEY_NULL:</div><div class='del'>-                return "Invalid Key";</div><div class='add'>+            return "Invalid Key";</div><div class='ctx'>         case GD_STORE_VALUE_NULL:</div><div class='del'>-                return "Invalid Value";</div><div class='add'>+            return "Invalid Value";</div><div class='ctx'>         case GD_STORE_KEY_VALUE_NULL:</div><div class='del'>-                return "Invalid Key and Value";</div><div class='add'>+            return "Invalid Key and Value";</div><div class='ctx'>         case GD_STORE_EOF:</div><div class='del'>-                return "No data";</div><div class='add'>+            return "No data";</div><div class='ctx'>         case GD_STORE_ENOMEM:</div><div class='del'>-                return "No memory";</div><div class='add'>+            return "No memory";</div><div class='ctx'>         default:</div><div class='del'>-                return "Invalid errno";</div><div class='del'>-        }</div><div class='add'>+            return "Invalid errno";</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_store_lock (gf_store_handle_t *sh)</div><div class='add'>+gf_store_lock(gf_store_handle_t *sh)</div><div class='ctx'> {</div><div class='del'>-        int                     ret;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (sh);</div><div class='del'>-        GF_ASSERT (sh-&gt;path);</div><div class='del'>-        GF_ASSERT (sh-&gt;locked == F_ULOCK);</div><div class='del'>-</div><div class='del'>-        sh-&gt;fd = open (sh-&gt;path, O_RDWR);</div><div class='del'>-        if (sh-&gt;fd == -1) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='del'>-                        "Failed to open '%s'", sh-&gt;path);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lockf (sh-&gt;fd, F_LOCK, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_LOCK_FAILED,</div><div class='del'>-                        "Failed to gain lock on '%s'", sh-&gt;path);</div><div class='del'>-        else</div><div class='del'>-                /* sh-&gt;locked is protected by the lockf(sh-&gt;fd) above */</div><div class='del'>-                sh-&gt;locked = F_LOCK;</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(sh);</div><div class='add'>+    GF_ASSERT(sh-&gt;path);</div><div class='add'>+    GF_ASSERT(sh-&gt;locked == F_ULOCK);</div><div class='add'>+</div><div class='add'>+    sh-&gt;fd = open(sh-&gt;path, O_RDWR);</div><div class='add'>+    if (sh-&gt;fd == -1) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_FILE_OP_FAILED,</div><div class='add'>+               "Failed to open '%s'", sh-&gt;path);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lockf(sh-&gt;fd, F_LOCK, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_LOCK_FAILED,</div><div class='add'>+               "Failed to gain lock on '%s'", sh-&gt;path);</div><div class='add'>+    else</div><div class='add'>+        /* sh-&gt;locked is protected by the lockf(sh-&gt;fd) above */</div><div class='add'>+        sh-&gt;locked = F_LOCK;</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_store_unlock (gf_store_handle_t *sh)</div><div class='add'>+gf_store_unlock(gf_store_handle_t *sh)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (sh);</div><div class='del'>-        GF_ASSERT (sh-&gt;locked == F_LOCK);</div><div class='add'>+    GF_ASSERT(sh);</div><div class='add'>+    GF_ASSERT(sh-&gt;locked == F_LOCK);</div><div class='ctx'> </div><div class='del'>-        sh-&gt;locked = F_ULOCK;</div><div class='add'>+    sh-&gt;locked = F_ULOCK;</div><div class='ctx'> </div><div class='del'>-        /* does not matter if this fails, locks are released on close anyway */</div><div class='del'>-        if (lockf (sh-&gt;fd, F_ULOCK, 0) == -1)</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno, LG_MSG_UNLOCK_FAILED,</div><div class='del'>-                        "Failed to release lock on '%s'", sh-&gt;path);</div><div class='add'>+    /* does not matter if this fails, locks are released on close anyway */</div><div class='add'>+    if (lockf(sh-&gt;fd, F_ULOCK, 0) == -1)</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, LG_MSG_UNLOCK_FAILED,</div><div class='add'>+               "Failed to release lock on '%s'", sh-&gt;path);</div><div class='ctx'> </div><div class='del'>-        sys_close (sh-&gt;fd);</div><div class='add'>+    sys_close(sh-&gt;fd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_store_locked_local (gf_store_handle_t *sh)</div><div class='add'>+gf_store_locked_local(gf_store_handle_t *sh)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (sh);</div><div class='add'>+    GF_ASSERT(sh);</div><div class='ctx'> </div><div class='del'>-        return (sh-&gt;locked == F_LOCK);</div><div class='add'>+    return (sh-&gt;locked == F_LOCK);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/strfd.c b/libglusterfs/src/strfd.c<br/>index 002d48629bc..ad66b622361 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/strfd.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/strfd.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/strfd.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/strfd.c</a></div><div class='hunk'>@@ -16,77 +16,78 @@</div><div class='ctx'> #include "common-utils.h"</div><div class='ctx'> </div><div class='ctx'> strfd_t *</div><div class='del'>-strfd_open ()</div><div class='add'>+strfd_open()</div><div class='ctx'> {</div><div class='del'>-        strfd_t *strfd = NULL;</div><div class='add'>+    strfd_t *strfd = NULL;</div><div class='ctx'> </div><div class='del'>-        strfd = GF_CALLOC(1, sizeof(*strfd), gf_common_mt_strfd_t);</div><div class='add'>+    strfd = GF_CALLOC(1, sizeof(*strfd), gf_common_mt_strfd_t);</div><div class='ctx'> </div><div class='del'>-        return strfd;</div><div class='add'>+    return strfd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-strvprintf (strfd_t *strfd, const char *fmt, va_list ap)</div><div class='add'>+strvprintf(strfd_t *strfd, const char *fmt, va_list ap)</div><div class='ctx'> {</div><div class='del'>-        char *str = NULL;</div><div class='del'>-        int size = 0;</div><div class='del'>-</div><div class='del'>-        size = vasprintf (&amp;str, fmt, ap);</div><div class='del'>-</div><div class='del'>-        if (size &lt; 0)</div><div class='del'>-                return size;</div><div class='del'>-</div><div class='del'>-        if (!strfd-&gt;alloc_size) {</div><div class='del'>-                strfd-&gt;data = GF_CALLOC (max(size + 1, 4096), 1,</div><div class='del'>-                                         gf_common_mt_strfd_data_t);</div><div class='del'>-                if (!strfd-&gt;data) {</div><div class='del'>-                        free (str); /* NOT GF_FREE */</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                strfd-&gt;alloc_size = max(size + 1, 4096);</div><div class='del'>-        }</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    int size = 0;</div><div class='add'>+</div><div class='add'>+    size = vasprintf(&amp;str, fmt, ap);</div><div class='add'>+</div><div class='add'>+    if (size &lt; 0)</div><div class='add'>+        return size;</div><div class='ctx'> </div><div class='del'>-        if (strfd-&gt;alloc_size &lt;= (strfd-&gt;size + size)) {</div><div class='del'>-                char *tmp_ptr = NULL;</div><div class='del'>-                int new_size = max ((strfd-&gt;alloc_size * 2),</div><div class='del'>-                                    gf_roundup_next_power_of_two (strfd-&gt;size + size + 1));</div><div class='del'>-                tmp_ptr = GF_REALLOC (strfd-&gt;data, new_size);</div><div class='del'>-                if (!tmp_ptr) {</div><div class='del'>-                        free (str); /* NOT GF_FREE */</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                strfd-&gt;alloc_size = new_size;</div><div class='del'>-                strfd-&gt;data = tmp_ptr;</div><div class='add'>+    if (!strfd-&gt;alloc_size) {</div><div class='add'>+        strfd-&gt;data = GF_CALLOC(max(size + 1, 4096), 1,</div><div class='add'>+                                gf_common_mt_strfd_data_t);</div><div class='add'>+        if (!strfd-&gt;data) {</div><div class='add'>+            free(str); /* NOT GF_FREE */</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        strfd-&gt;alloc_size = max(size + 1, 4096);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strfd-&gt;alloc_size &lt;= (strfd-&gt;size + size)) {</div><div class='add'>+        char *tmp_ptr = NULL;</div><div class='add'>+        int new_size = max(</div><div class='add'>+            (strfd-&gt;alloc_size * 2),</div><div class='add'>+            gf_roundup_next_power_of_two(strfd-&gt;size + size + 1));</div><div class='add'>+        tmp_ptr = GF_REALLOC(strfd-&gt;data, new_size);</div><div class='add'>+        if (!tmp_ptr) {</div><div class='add'>+            free(str); /* NOT GF_FREE */</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+        strfd-&gt;alloc_size = new_size;</div><div class='add'>+        strfd-&gt;data = tmp_ptr;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Copy the trailing '\0', but do not account for it in -&gt;size.</div><div class='del'>-           This allows safe use of strfd-&gt;data as a string. */</div><div class='del'>-        memcpy (strfd-&gt;data + strfd-&gt;size, str, size + 1);</div><div class='del'>-        strfd-&gt;size += size;</div><div class='add'>+    /* Copy the trailing '\0', but do not account for it in -&gt;size.</div><div class='add'>+       This allows safe use of strfd-&gt;data as a string. */</div><div class='add'>+    memcpy(strfd-&gt;data + strfd-&gt;size, str, size + 1);</div><div class='add'>+    strfd-&gt;size += size;</div><div class='ctx'> </div><div class='del'>-        free (str); /* NOT GF_FREE */</div><div class='add'>+    free(str); /* NOT GF_FREE */</div><div class='ctx'> </div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-strprintf (strfd_t *strfd, const char *fmt, ...)</div><div class='add'>+strprintf(strfd_t *strfd, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        va_list ap;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    va_list ap;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        ret = strvprintf (strfd, fmt, ap);</div><div class='del'>-        va_end (ap);</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    ret = strvprintf(strfd, fmt, ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-strfd_close (strfd_t *strfd)</div><div class='add'>+strfd_close(strfd_t *strfd)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (strfd-&gt;data);</div><div class='del'>-        GF_FREE (strfd);</div><div class='add'>+    GF_FREE(strfd-&gt;data);</div><div class='add'>+    GF_FREE(strfd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/syncop-utils.c b/libglusterfs/src/syncop-utils.c<br/>index 1ccda55e4c5..d2a71698745 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/syncop-utils.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/syncop-utils.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/syncop-utils.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/syncop-utils.c</a></div><div class='hunk'>@@ -14,39 +14,38 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> struct syncop_dir_scan_data {</div><div class='del'>-        xlator_t *subvol;</div><div class='del'>-        loc_t *parent;</div><div class='del'>-        void *data;</div><div class='del'>-        gf_dirent_t *q;</div><div class='del'>-        gf_dirent_t *entry;</div><div class='del'>-        pthread_cond_t *cond;</div><div class='del'>-        pthread_mutex_t *mut;</div><div class='del'>-        syncop_dir_scan_fn_t fn;</div><div class='del'>-        uint32_t *jobs_running;</div><div class='del'>-        uint32_t *qlen;</div><div class='del'>-        int32_t  *retval;</div><div class='add'>+    xlator_t *subvol;</div><div class='add'>+    loc_t *parent;</div><div class='add'>+    void *data;</div><div class='add'>+    gf_dirent_t *q;</div><div class='add'>+    gf_dirent_t *entry;</div><div class='add'>+    pthread_cond_t *cond;</div><div class='add'>+    pthread_mutex_t *mut;</div><div class='add'>+    syncop_dir_scan_fn_t fn;</div><div class='add'>+    uint32_t *jobs_running;</div><div class='add'>+    uint32_t *qlen;</div><div class='add'>+    int32_t *retval;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_dirfd (xlator_t *subvol, loc_t *loc, fd_t **fd, int pid)</div><div class='add'>+syncop_dirfd(xlator_t *subvol, loc_t *loc, fd_t **fd, int pid)</div><div class='ctx'> {</div><div class='del'>-        int  ret    = 0;</div><div class='del'>-        fd_t *dirfd = NULL;</div><div class='del'>-</div><div class='del'>-        if (!fd)</div><div class='del'>-                return -EINVAL;</div><div class='del'>-</div><div class='del'>-        dirfd = fd_create (loc-&gt;inode, pid);</div><div class='del'>-        if (!dirfd) {</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_FD_CREATE_FAILED, "fd_create of %s",</div><div class='del'>-                        uuid_utoa (loc-&gt;gfid));</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_opendir (subvol, loc, dirfd, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    fd_t *dirfd = NULL;</div><div class='add'>+</div><div class='add'>+    if (!fd)</div><div class='add'>+        return -EINVAL;</div><div class='add'>+</div><div class='add'>+    dirfd = fd_create(loc-&gt;inode, pid);</div><div class='add'>+    if (!dirfd) {</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_ERROR, errno, LG_MSG_FD_CREATE_FAILED,</div><div class='add'>+               "fd_create of %s", uuid_utoa(loc-&gt;gfid));</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_opendir(subvol, loc, dirfd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='ctx'>         /*</div><div class='ctx'>          * On Linux, if the brick was not updated, opendir will</div><div class='ctx'>          * fail. We therefore use backward compatible code</div><div class='hunk'>@@ -57,93 +56,95 @@ syncop_dirfd (xlator_t *subvol, loc_t *loc, fd_t **fd, int pid)</div><div class='ctx'>          * to provide backward-compatibility.</div><div class='ctx'>          */</div><div class='ctx'> #ifdef GF_LINUX_HOST_OS</div><div class='del'>-                fd_unref (dirfd);</div><div class='del'>-                dirfd = fd_anonymous (loc-&gt;inode);</div><div class='del'>-                if (!dirfd) {</div><div class='del'>-                        gf_msg (subvol-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                LG_MSG_FD_ANONYMOUS_FAILED, "fd_anonymous of "</div><div class='del'>-                                "%s", uuid_utoa (loc-&gt;gfid));</div><div class='del'>-                        ret = -errno;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-#else /* GF_LINUX_HOST_OS */</div><div class='del'>-                fd_unref (dirfd);</div><div class='del'>-                gf_msg (subvol-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_DIR_OP_FAILED, "opendir of %s",</div><div class='del'>-                        uuid_utoa (loc-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-#endif /* GF_LINUX_HOST_OS */</div><div class='del'>-        } else {</div><div class='del'>-                fd_bind (dirfd);</div><div class='add'>+        fd_unref(dirfd);</div><div class='add'>+        dirfd = fd_anonymous(loc-&gt;inode);</div><div class='add'>+        if (!dirfd) {</div><div class='add'>+            gf_msg(subvol-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   LG_MSG_FD_ANONYMOUS_FAILED,</div><div class='add'>+                   "fd_anonymous of "</div><div class='add'>+                   "%s",</div><div class='add'>+                   uuid_utoa(loc-&gt;gfid));</div><div class='add'>+            ret = -errno;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = 0;</div><div class='add'>+#else  /* GF_LINUX_HOST_OS */</div><div class='add'>+        fd_unref(dirfd);</div><div class='add'>+        gf_msg(subvol-&gt;name, GF_LOG_ERROR, errno, LG_MSG_DIR_OP_FAILED,</div><div class='add'>+               "opendir of %s", uuid_utoa(loc-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+#endif /* GF_LINUX_HOST_OS */</div><div class='add'>+    } else {</div><div class='add'>+        fd_bind(dirfd);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                *fd = dirfd;</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        *fd = dirfd;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_ftw (xlator_t *subvol, loc_t *loc, int pid, void *data,</div><div class='del'>-            int (*fn) (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                       void *data))</div><div class='add'>+syncop_ftw(xlator_t *subvol, loc_t *loc, int pid, void *data,</div><div class='add'>+           int (*fn)(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                     void *data))</div><div class='ctx'> {</div><div class='del'>-        loc_t       child_loc = {0, };</div><div class='del'>-        fd_t        *fd       = NULL;</div><div class='del'>-        uint64_t    offset    = 0;</div><div class='del'>-        gf_dirent_t *entry    = NULL;</div><div class='del'>-        int         ret       = 0;</div><div class='del'>-        gf_dirent_t entries;</div><div class='del'>-</div><div class='del'>-        ret = syncop_dirfd (subvol, loc, &amp;fd, pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_t child_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    uint64_t offset = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+</div><div class='add'>+    ret = syncop_dirfd(subvol, loc, &amp;fd, pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    while ((ret = syncop_readdirp(subvol, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                                  NULL))) {</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (ret &gt; 0) {</div><div class='add'>+            /* If the entries are only '.', and '..' then ret</div><div class='add'>+             * value will be non-zero. so set it to zero here. */</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+        list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        while ((ret = syncop_readdirp (subvol, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                       NULL, NULL))) {</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        break;</div><div class='add'>+            gf_link_inode_from_dirent(NULL, fd-&gt;inode, entry);</div><div class='ctx'> </div><div class='del'>-                if (ret &gt; 0) {</div><div class='del'>-                        /* If the entries are only '.', and '..' then ret</div><div class='del'>-                         * value will be non-zero. so set it to zero here. */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-                list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                        offset = entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                        if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                            !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        gf_link_inode_from_dirent (NULL, fd-&gt;inode, entry);</div><div class='del'>-</div><div class='del'>-                        ret = fn (subvol, entry, loc, data);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        if (entry-&gt;d_stat.ia_type == IA_IFDIR) {</div><div class='del'>-                                child_loc.inode = inode_ref (entry-&gt;inode);</div><div class='del'>-                                gf_uuid_copy (child_loc.gfid, entry-&gt;inode-&gt;gfid);</div><div class='del'>-                                ret = syncop_ftw (subvol, &amp;child_loc,</div><div class='del'>-                                                  pid, data, fn);</div><div class='del'>-                                loc_wipe (&amp;child_loc);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            ret = fn(subvol, entry, loc, data);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='add'>+            if (entry-&gt;d_stat.ia_type == IA_IFDIR) {</div><div class='add'>+                child_loc.inode = inode_ref(entry-&gt;inode);</div><div class='add'>+                gf_uuid_copy(child_loc.gfid, entry-&gt;inode-&gt;gfid);</div><div class='add'>+                ret = syncop_ftw(subvol, &amp;child_loc, pid, data, fn);</div><div class='add'>+                loc_wipe(&amp;child_loc);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        break;</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -156,402 +157,399 @@ out:</div><div class='ctx'>  * syncop_ftw.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-syncop_ftw_throttle (xlator_t *subvol, loc_t *loc, int pid, void *data,</div><div class='del'>-                     int (*fn) (xlator_t *subvol, gf_dirent_t *entry,</div><div class='del'>-                                loc_t *parent, void *data),</div><div class='del'>-                     int count, int sleep_time)</div><div class='add'>+syncop_ftw_throttle(xlator_t *subvol, loc_t *loc, int pid, void *data,</div><div class='add'>+                    int (*fn)(xlator_t *subvol, gf_dirent_t *entry,</div><div class='add'>+                              loc_t *parent, void *data),</div><div class='add'>+                    int count, int sleep_time)</div><div class='ctx'> {</div><div class='del'>-        loc_t       child_loc = {0, };</div><div class='del'>-        fd_t        *fd       = NULL;</div><div class='del'>-        uint64_t    offset    = 0;</div><div class='del'>-        gf_dirent_t *entry    = NULL;</div><div class='del'>-        int         ret       = 0;</div><div class='del'>-        gf_dirent_t entries;</div><div class='del'>-        int         tmp       = 0;</div><div class='del'>-</div><div class='del'>-        if (sleep_time &lt;= 0) {</div><div class='del'>-                ret = syncop_ftw (subvol, loc, pid, data, fn);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    loc_t child_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    uint64_t offset = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    int tmp = 0;</div><div class='add'>+</div><div class='add'>+    if (sleep_time &lt;= 0) {</div><div class='add'>+        ret = syncop_ftw(subvol, loc, pid, data, fn);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_dirfd(subvol, loc, &amp;fd, pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    while ((ret = syncop_readdirp(subvol, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                                  NULL))) {</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_dirfd (subvol, loc, &amp;fd, pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        if (ret &gt; 0) {</div><div class='add'>+            /* If the entries are only '.', and '..' then ret</div><div class='add'>+             * value will be non-zero. so set it to zero here. */</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='add'>+        tmp = 0;</div><div class='ctx'> </div><div class='del'>-        while ((ret = syncop_readdirp (subvol, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                       NULL, NULL))) {</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        break;</div><div class='add'>+        list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-                if (ret &gt; 0) {</div><div class='del'>-                        /* If the entries are only '.', and '..' then ret</div><div class='del'>-                         * value will be non-zero. so set it to zero here. */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='add'>+            if (++tmp &gt;= count) {</div><div class='ctx'>                 tmp = 0;</div><div class='add'>+                sleep(sleep_time);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                        offset = entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                        if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                            !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (++tmp &gt;= count) {</div><div class='del'>-                                tmp = 0;</div><div class='del'>-                                sleep (sleep_time);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        gf_link_inode_from_dirent (NULL, fd-&gt;inode, entry);</div><div class='del'>-</div><div class='del'>-                        ret = fn (subvol, entry, loc, data);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (entry-&gt;d_stat.ia_type == IA_IFDIR) {</div><div class='del'>-                                child_loc.inode = inode_ref (entry-&gt;inode);</div><div class='del'>-                                gf_uuid_copy (child_loc.gfid, entry-&gt;inode-&gt;gfid);</div><div class='del'>-                                ret = syncop_ftw_throttle (subvol, &amp;child_loc,</div><div class='del'>-                                                           pid, data, fn, count,</div><div class='del'>-                                                           sleep_time);</div><div class='del'>-                                loc_wipe (&amp;child_loc);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        continue;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            gf_link_inode_from_dirent(NULL, fd-&gt;inode, entry);</div><div class='add'>+</div><div class='add'>+            ret = fn(subvol, entry, loc, data);</div><div class='add'>+            if (ret)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='add'>+            if (entry-&gt;d_stat.ia_type == IA_IFDIR) {</div><div class='add'>+                child_loc.inode = inode_ref(entry-&gt;inode);</div><div class='add'>+                gf_uuid_copy(child_loc.gfid, entry-&gt;inode-&gt;gfid);</div><div class='add'>+                ret = syncop_ftw_throttle(subvol, &amp;child_loc, pid, data, fn,</div><div class='add'>+                                          count, sleep_time);</div><div class='add'>+                loc_wipe(&amp;child_loc);</div><div class='ctx'>                 if (ret)</div><div class='del'>-                        break;</div><div class='add'>+                    continue;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_scan_data_destroy (struct syncop_dir_scan_data *data)</div><div class='add'>+_scan_data_destroy(struct syncop_dir_scan_data *data)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (data);</div><div class='add'>+    GF_FREE(data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_dir_scan_job_fn_cbk (int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+_dir_scan_job_fn_cbk(int ret, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        struct syncop_dir_scan_data *scan_data = opaque;</div><div class='add'>+    struct syncop_dir_scan_data *scan_data = opaque;</div><div class='ctx'> </div><div class='del'>-        _scan_data_destroy (scan_data);</div><div class='del'>-        return 0;</div><div class='add'>+    _scan_data_destroy(scan_data);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_dir_scan_job_fn (void *data)</div><div class='add'>+_dir_scan_job_fn(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct syncop_dir_scan_data *scan_data = data;</div><div class='del'>-        gf_dirent_t                 *entry     = NULL;</div><div class='del'>-        int                         ret        = 0;</div><div class='del'>-</div><div class='del'>-        entry = scan_data-&gt;entry;</div><div class='del'>-        scan_data-&gt;entry = NULL;</div><div class='del'>-        do {</div><div class='del'>-                ret = scan_data-&gt;fn (scan_data-&gt;subvol, entry,</div><div class='del'>-                                     scan_data-&gt;parent,</div><div class='del'>-                                     scan_data-&gt;data);</div><div class='del'>-                gf_dirent_entry_free (entry);</div><div class='del'>-                entry = NULL;</div><div class='del'>-                pthread_mutex_lock (scan_data-&gt;mut);</div><div class='del'>-                {</div><div class='del'>-                        if (ret)</div><div class='del'>-                                *scan_data-&gt;retval |= ret;</div><div class='del'>-                        if (list_empty (&amp;scan_data-&gt;q-&gt;list)) {</div><div class='del'>-                                (*scan_data-&gt;jobs_running)--;</div><div class='del'>-                                pthread_cond_broadcast (scan_data-&gt;cond);</div><div class='del'>-                        } else {</div><div class='del'>-                                entry = list_first_entry (&amp;scan_data-&gt;q-&gt;list,</div><div class='del'>-                                                  typeof (*scan_data-&gt;q), list);</div><div class='del'>-                                list_del_init (&amp;entry-&gt;list);</div><div class='del'>-                                (*scan_data-&gt;qlen)--;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (scan_data-&gt;mut);</div><div class='del'>-        } while (entry);</div><div class='add'>+    struct syncop_dir_scan_data *scan_data = data;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    entry = scan_data-&gt;entry;</div><div class='add'>+    scan_data-&gt;entry = NULL;</div><div class='add'>+    do {</div><div class='add'>+        ret = scan_data-&gt;fn(scan_data-&gt;subvol, entry, scan_data-&gt;parent,</div><div class='add'>+                            scan_data-&gt;data);</div><div class='add'>+        gf_dirent_entry_free(entry);</div><div class='add'>+        entry = NULL;</div><div class='add'>+        pthread_mutex_lock(scan_data-&gt;mut);</div><div class='add'>+        {</div><div class='add'>+            if (ret)</div><div class='add'>+                *scan_data-&gt;retval |= ret;</div><div class='add'>+            if (list_empty(&amp;scan_data-&gt;q-&gt;list)) {</div><div class='add'>+                (*scan_data-&gt;jobs_running)--;</div><div class='add'>+                pthread_cond_broadcast(scan_data-&gt;cond);</div><div class='add'>+            } else {</div><div class='add'>+                entry = list_first_entry(&amp;scan_data-&gt;q-&gt;list,</div><div class='add'>+                                         typeof(*scan_data-&gt;q), list);</div><div class='add'>+                list_del_init(&amp;entry-&gt;list);</div><div class='add'>+                (*scan_data-&gt;qlen)--;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(scan_data-&gt;mut);</div><div class='add'>+    } while (entry);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_run_dir_scan_task (call_frame_t *frame, xlator_t *subvol, loc_t *parent,</div><div class='del'>-                    gf_dirent_t *q, gf_dirent_t *entry, int *retval,</div><div class='del'>-                    pthread_mutex_t *mut, pthread_cond_t *cond,</div><div class='del'>-                    uint32_t *jobs_running, uint32_t *qlen,</div><div class='del'>-                    syncop_dir_scan_fn_t fn, void *data)</div><div class='add'>+_run_dir_scan_task(call_frame_t *frame, xlator_t *subvol, loc_t *parent,</div><div class='add'>+                   gf_dirent_t *q, gf_dirent_t *entry, int *retval,</div><div class='add'>+                   pthread_mutex_t *mut, pthread_cond_t *cond,</div><div class='add'>+                   uint32_t *jobs_running, uint32_t *qlen,</div><div class='add'>+                   syncop_dir_scan_fn_t fn, void *data)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='del'>-        struct syncop_dir_scan_data *scan_data = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        scan_data = GF_CALLOC (1, sizeof (struct syncop_dir_scan_data),</div><div class='del'>-                               gf_common_mt_scan_data);</div><div class='del'>-        if (!scan_data) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        scan_data-&gt;subvol       = subvol;</div><div class='del'>-        scan_data-&gt;parent       = parent;</div><div class='del'>-        scan_data-&gt;data         = data;</div><div class='del'>-        scan_data-&gt;mut          = mut;</div><div class='del'>-        scan_data-&gt;cond         = cond;</div><div class='del'>-        scan_data-&gt;fn           = fn;</div><div class='del'>-        scan_data-&gt;jobs_running = jobs_running;</div><div class='del'>-        scan_data-&gt;entry        = entry;</div><div class='del'>-        scan_data-&gt;q            = q;</div><div class='del'>-        scan_data-&gt;qlen         = qlen;</div><div class='del'>-        scan_data-&gt;retval       = retval;</div><div class='del'>-</div><div class='del'>-        ret = synctask_new (subvol-&gt;ctx-&gt;env, _dir_scan_job_fn,</div><div class='del'>-                            _dir_scan_job_fn_cbk, frame, scan_data);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct syncop_dir_scan_data *scan_data = NULL;</div><div class='add'>+</div><div class='add'>+    scan_data = GF_CALLOC(1, sizeof(struct syncop_dir_scan_data),</div><div class='add'>+                          gf_common_mt_scan_data);</div><div class='add'>+    if (!scan_data) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    scan_data-&gt;subvol = subvol;</div><div class='add'>+    scan_data-&gt;parent = parent;</div><div class='add'>+    scan_data-&gt;data = data;</div><div class='add'>+    scan_data-&gt;mut = mut;</div><div class='add'>+    scan_data-&gt;cond = cond;</div><div class='add'>+    scan_data-&gt;fn = fn;</div><div class='add'>+    scan_data-&gt;jobs_running = jobs_running;</div><div class='add'>+    scan_data-&gt;entry = entry;</div><div class='add'>+    scan_data-&gt;q = q;</div><div class='add'>+    scan_data-&gt;qlen = qlen;</div><div class='add'>+    scan_data-&gt;retval = retval;</div><div class='add'>+</div><div class='add'>+    ret = synctask_new(subvol-&gt;ctx-&gt;env, _dir_scan_job_fn, _dir_scan_job_fn_cbk,</div><div class='add'>+                       frame, scan_data);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_dirent_entry_free (entry);</div><div class='del'>-                _scan_data_destroy (scan_data);</div><div class='del'>-                pthread_mutex_lock (mut);</div><div class='del'>-                {</div><div class='del'>-                        *jobs_running = *jobs_running - 1;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (mut);</div><div class='del'>-                /*No need to cond-broadcast*/</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_dirent_entry_free(entry);</div><div class='add'>+        _scan_data_destroy(scan_data);</div><div class='add'>+        pthread_mutex_lock(mut);</div><div class='add'>+        {</div><div class='add'>+            *jobs_running = *jobs_running - 1;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+        pthread_mutex_unlock(mut);</div><div class='add'>+        /*No need to cond-broadcast*/</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_mt_dir_scan (call_frame_t *frame, xlator_t *subvol, loc_t *loc, int pid,</div><div class='del'>-                    void *data, syncop_dir_scan_fn_t fn, dict_t *xdata,</div><div class='del'>-                    uint32_t max_jobs, uint32_t max_qlen)</div><div class='add'>+syncop_mt_dir_scan(call_frame_t *frame, xlator_t *subvol, loc_t *loc, int pid,</div><div class='add'>+                   void *data, syncop_dir_scan_fn_t fn, dict_t *xdata,</div><div class='add'>+                   uint32_t max_jobs, uint32_t max_qlen)</div><div class='ctx'> {</div><div class='del'>-        fd_t        *fd    = NULL;</div><div class='del'>-        uint64_t    offset = 0;</div><div class='del'>-        gf_dirent_t *last = NULL;</div><div class='del'>-        int         ret    = 0;</div><div class='del'>-        int         retval = 0;</div><div class='del'>-        gf_dirent_t q;</div><div class='del'>-        gf_dirent_t *entry = NULL;</div><div class='del'>-        gf_dirent_t *tmp = NULL;</div><div class='del'>-        uint32_t    jobs_running = 0;</div><div class='del'>-        uint32_t    qlen = 0;</div><div class='del'>-        pthread_cond_t cond;</div><div class='del'>-        pthread_mutex_t mut;</div><div class='del'>-        gf_boolean_t cond_init = _gf_false;</div><div class='del'>-        gf_boolean_t mut_init = _gf_false;</div><div class='del'>-        gf_dirent_t entries;</div><div class='del'>-</div><div class='del'>-        /*For this functionality to be implemented in general, we need</div><div class='del'>-         * synccond_t infra which doesn't block the executing thread. Until then</div><div class='del'>-         * return failures inside synctask if they use this.*/</div><div class='del'>-        if (synctask_get())</div><div class='del'>-                return -ENOTSUP;</div><div class='del'>-</div><div class='del'>-        if (max_jobs == 0)</div><div class='del'>-                return -EINVAL;</div><div class='del'>-</div><div class='del'>-        /*Code becomes simpler this way. cond_wait just on qlength.</div><div class='del'>-         * Little bit of cheating*/</div><div class='del'>-        if (max_qlen == 0)</div><div class='del'>-                max_qlen = 1;</div><div class='del'>-</div><div class='del'>-        ret = syncop_dirfd (subvol, loc, &amp;fd, pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    uint64_t offset = 0;</div><div class='add'>+    gf_dirent_t *last = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int retval = 0;</div><div class='add'>+    gf_dirent_t q;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='add'>+    uint32_t jobs_running = 0;</div><div class='add'>+    uint32_t qlen = 0;</div><div class='add'>+    pthread_cond_t cond;</div><div class='add'>+    pthread_mutex_t mut;</div><div class='add'>+    gf_boolean_t cond_init = _gf_false;</div><div class='add'>+    gf_boolean_t mut_init = _gf_false;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+</div><div class='add'>+    /*For this functionality to be implemented in general, we need</div><div class='add'>+     * synccond_t infra which doesn't block the executing thread. Until then</div><div class='add'>+     * return failures inside synctask if they use this.*/</div><div class='add'>+    if (synctask_get())</div><div class='add'>+        return -ENOTSUP;</div><div class='add'>+</div><div class='add'>+    if (max_jobs == 0)</div><div class='add'>+        return -EINVAL;</div><div class='add'>+</div><div class='add'>+    /*Code becomes simpler this way. cond_wait just on qlength.</div><div class='add'>+     * Little bit of cheating*/</div><div class='add'>+    if (max_qlen == 0)</div><div class='add'>+        max_qlen = 1;</div><div class='add'>+</div><div class='add'>+    ret = syncop_dirfd(subvol, loc, &amp;fd, pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;q.list);</div><div class='add'>+    ret = pthread_mutex_init(&amp;mut, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    mut_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = pthread_cond_init(&amp;cond, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    cond_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    while ((ret = syncop_readdir(subvol, fd, 131072, offset, &amp;entries, xdata,</div><div class='add'>+                                 NULL))) {</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;q.list);</div><div class='del'>-        ret = pthread_mutex_init (&amp;mut, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        mut_init = _gf_true;</div><div class='add'>+        if (ret &gt; 0) {</div><div class='add'>+            /* If the entries are only '.', and '..' then ret</div><div class='add'>+             * value will be non-zero. so set it to zero here. */</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = pthread_cond_init (&amp;cond, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        cond_init = _gf_true;</div><div class='add'>+        last = list_last_entry(&amp;entries.list, typeof(*last), list);</div><div class='add'>+        offset = last-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-        while ((ret = syncop_readdir (subvol, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                      xdata, NULL))) {</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        break;</div><div class='add'>+        list_for_each_entry_safe(entry, tmp, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            list_del_init(&amp;entry-&gt;list);</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, "..")) {</div><div class='add'>+                gf_dirent_entry_free(entry);</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (ret &gt; 0) {</div><div class='del'>-                        /* If the entries are only '.', and '..' then ret</div><div class='del'>-                         * value will be non-zero. so set it to zero here. */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+            if (entry-&gt;d_type == IA_IFDIR) {</div><div class='add'>+                ret = fn(subvol, entry, loc, data);</div><div class='add'>+                gf_dirent_entry_free(entry);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (retval) /*Any jobs failed?*/</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                last = list_last_entry (&amp;entries.list, typeof (*last), list);</div><div class='del'>-                offset = last-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (entry, tmp, &amp;entries.list, list) {</div><div class='del'>-                        list_del_init (&amp;entry-&gt;list);</div><div class='del'>-                        if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                            !strcmp (entry-&gt;d_name, "..")) {</div><div class='del'>-                                gf_dirent_entry_free (entry);</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (entry-&gt;d_type == IA_IFDIR) {</div><div class='del'>-                                ret = fn (subvol, entry, loc, data);</div><div class='del'>-                                gf_dirent_entry_free (entry);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (retval) /*Any jobs failed?*/</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        pthread_mutex_lock (&amp;mut);</div><div class='del'>-                        {</div><div class='del'>-                                while (qlen == max_qlen)</div><div class='del'>-                                        pthread_cond_wait (&amp;cond, &amp;mut);</div><div class='del'>-                                if (max_jobs == jobs_running) {</div><div class='del'>-                                        list_add_tail (&amp;entry-&gt;list, &amp;q.list);</div><div class='del'>-                                        qlen++;</div><div class='del'>-                                        entry = NULL;</div><div class='del'>-                                } else {</div><div class='del'>-                                        jobs_running++;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;mut);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                        if (!entry)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        ret = _run_dir_scan_task (frame, subvol, loc, &amp;q, entry,</div><div class='del'>-                                                  &amp;retval, &amp;mut, &amp;cond,</div><div class='del'>-                                                &amp;jobs_running, &amp;qlen, fn, data);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='add'>+            pthread_mutex_lock(&amp;mut);</div><div class='add'>+            {</div><div class='add'>+                while (qlen == max_qlen)</div><div class='add'>+                    pthread_cond_wait(&amp;cond, &amp;mut);</div><div class='add'>+                if (max_jobs == jobs_running) {</div><div class='add'>+                    list_add_tail(&amp;entry-&gt;list, &amp;q.list);</div><div class='add'>+                    qlen++;</div><div class='add'>+                    entry = NULL;</div><div class='add'>+                } else {</div><div class='add'>+                    jobs_running++;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;mut);</div><div class='add'>+</div><div class='add'>+            if (!entry)</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            ret = _run_dir_scan_task(frame, subvol, loc, &amp;q, entry, &amp;retval,</div><div class='add'>+                                     &amp;mut, &amp;cond, &amp;jobs_running, &amp;qlen, fn,</div><div class='add'>+                                     data);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        if (mut_init &amp;&amp; cond_init) {</div><div class='del'>-                pthread_mutex_lock (&amp;mut);</div><div class='del'>-                {</div><div class='del'>-                        while (jobs_running)</div><div class='del'>-                                pthread_cond_wait (&amp;cond, &amp;mut);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;mut);</div><div class='del'>-                gf_dirent_free (&amp;q);</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (mut_init &amp;&amp; cond_init) {</div><div class='add'>+        pthread_mutex_lock(&amp;mut);</div><div class='add'>+        {</div><div class='add'>+            while (jobs_running)</div><div class='add'>+                pthread_cond_wait(&amp;cond, &amp;mut);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (mut_init)</div><div class='del'>-                pthread_mutex_destroy (&amp;mut);</div><div class='del'>-        if (cond_init)</div><div class='del'>-                pthread_cond_destroy (&amp;cond);</div><div class='del'>-        return ret|retval;</div><div class='add'>+        pthread_mutex_unlock(&amp;mut);</div><div class='add'>+        gf_dirent_free(&amp;q);</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (mut_init)</div><div class='add'>+        pthread_mutex_destroy(&amp;mut);</div><div class='add'>+    if (cond_init)</div><div class='add'>+        pthread_cond_destroy(&amp;cond);</div><div class='add'>+    return ret | retval;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_dir_scan (xlator_t *subvol, loc_t *loc, int pid, void *data,</div><div class='del'>-                 int (*fn) (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                            void *data))</div><div class='add'>+syncop_dir_scan(xlator_t *subvol, loc_t *loc, int pid, void *data,</div><div class='add'>+                int (*fn)(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                          void *data))</div><div class='ctx'> {</div><div class='del'>-        fd_t        *fd    = NULL;</div><div class='del'>-        uint64_t    offset = 0;</div><div class='del'>-        gf_dirent_t *entry = NULL;</div><div class='del'>-        int         ret    = 0;</div><div class='del'>-        gf_dirent_t entries;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    uint64_t offset = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_dirfd (subvol, loc, &amp;fd, pid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = syncop_dirfd(subvol, loc, &amp;fd, pid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='ctx'> </div><div class='del'>-        while ((ret = syncop_readdir (subvol, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                      NULL, NULL))) {</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        break;</div><div class='add'>+    while ((ret = syncop_readdir(subvol, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                                 NULL))) {</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (ret &gt; 0) {</div><div class='del'>-                        /* If the entries are only '.', and '..' then ret</div><div class='del'>-                         * value will be non-zero. so set it to zero here. */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+        if (ret &gt; 0) {</div><div class='add'>+            /* If the entries are only '.', and '..' then ret</div><div class='add'>+             * value will be non-zero. so set it to zero here. */</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                        offset = entry-&gt;d_off;</div><div class='add'>+        list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-                        if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                            !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-                                continue;</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                        ret = fn (subvol, entry, loc, data);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='add'>+            ret = fn(subvol, entry, loc, data);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_is_subvol_local (xlator_t *this, loc_t *loc, gf_boolean_t *is_local)</div><div class='add'>+syncop_is_subvol_local(xlator_t *this, loc_t *loc, gf_boolean_t *is_local)</div><div class='ctx'> {</div><div class='del'>-        char *pathinfo = NULL;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    char *pathinfo = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !this-&gt;type || !is_local)</div><div class='del'>-                return -EINVAL;</div><div class='add'>+    if (!this || !this-&gt;type || !is_local)</div><div class='add'>+        return -EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (this-&gt;type, "protocol/client") != 0)</div><div class='del'>-                return -EINVAL;</div><div class='add'>+    if (strcmp(this-&gt;type, "protocol/client") != 0)</div><div class='add'>+        return -EINVAL;</div><div class='ctx'> </div><div class='del'>-        *is_local = _gf_false;</div><div class='add'>+    *is_local = _gf_false;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_getxattr (this, loc, &amp;xattr, GF_XATTR_PATHINFO_KEY, NULL,</div><div class='del'>-                               NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_getxattr(this, loc, &amp;xattr, GF_XATTR_PATHINFO_KEY, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!xattr) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xattr, GF_XATTR_PATHINFO_KEY, &amp;pathinfo);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(xattr, GF_XATTR_PATHINFO_KEY, &amp;pathinfo);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_is_local_pathinfo (pathinfo, is_local);</div><div class='add'>+    ret = glusterfs_is_local_pathinfo(pathinfo, is_local);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "subvol %s is %slocal",</div><div class='del'>-                this-&gt;name, *is_local ? "" : "not ");</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "subvol %s is %slocal", this-&gt;name,</div><div class='add'>+                 *is_local ? "" : "not ");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -565,109 +563,112 @@ out:</div><div class='ctx'>  **/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_gfid_to_path_hard (inode_table_t *itable, xlator_t *subvol, uuid_t gfid,</div><div class='del'>-                          inode_t *inode, char **path_p,</div><div class='del'>-                          gf_boolean_t hard_resolve)</div><div class='add'>+syncop_gfid_to_path_hard(inode_table_t *itable, xlator_t *subvol, uuid_t gfid,</div><div class='add'>+                         inode_t *inode, char **path_p,</div><div class='add'>+                         gf_boolean_t hard_resolve)</div><div class='ctx'> {</div><div class='del'>-        int      ret   = 0;</div><div class='del'>-        char    *path  = NULL;</div><div class='del'>-        loc_t    loc   = {0,};</div><div class='del'>-        dict_t  *xattr = NULL;</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (!inode)</div><div class='del'>-                loc.inode = inode_new (itable);</div><div class='del'>-        else</div><div class='del'>-                loc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-        if (!hard_resolve)</div><div class='del'>-                ret = syncop_getxattr (subvol, &amp;loc, &amp;xattr, GFID_TO_PATH_KEY,</div><div class='del'>-                                       NULL, NULL);</div><div class='del'>-        else</div><div class='del'>-                ret = syncop_getxattr (subvol, &amp;loc, &amp;xattr,</div><div class='del'>-                                       GFID2PATH_VIRT_XATTR_KEY, NULL, NULL);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * posix will do dict_set_dynstr for GFID_TO_PATH_KEY i.e.</div><div class='del'>-         * for in memory search for the path. And for on disk xattr</div><div class='del'>-         * fetching of the path for the key GFID2PATH_VIRT_XATTR_KEY</div><div class='del'>-         * it uses dict_set_dynptr. So, for GFID2PATH_VIRT_XATTR_KEY</div><div class='del'>-         * use dict_get_ptr to avoid dict complaining about type</div><div class='del'>-         * mismatch (i.e. str vs ptr)</div><div class='del'>-         */</div><div class='del'>-        if (!hard_resolve)</div><div class='del'>-                ret = dict_get_str (xattr, GFID_TO_PATH_KEY, &amp;path);</div><div class='del'>-        else</div><div class='del'>-                ret = dict_get_ptr (xattr, GFID2PATH_VIRT_XATTR_KEY,</div><div class='del'>-                                    (void **)&amp;path);</div><div class='del'>-</div><div class='del'>-        if (ret || !path) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (path_p) {</div><div class='del'>-                *path_p = gf_strdup (path);</div><div class='del'>-                if (!*path_p) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    if (!inode)</div><div class='add'>+        loc.inode = inode_new(itable);</div><div class='add'>+    else</div><div class='add'>+        loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    if (!hard_resolve)</div><div class='add'>+        ret = syncop_getxattr(subvol, &amp;loc, &amp;xattr, GFID_TO_PATH_KEY, NULL,</div><div class='add'>+                              NULL);</div><div class='add'>+    else</div><div class='add'>+        ret = syncop_getxattr(subvol, &amp;loc, &amp;xattr, GFID2PATH_VIRT_XATTR_KEY,</div><div class='add'>+                              NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * posix will do dict_set_dynstr for GFID_TO_PATH_KEY i.e.</div><div class='add'>+     * for in memory search for the path. And for on disk xattr</div><div class='add'>+     * fetching of the path for the key GFID2PATH_VIRT_XATTR_KEY</div><div class='add'>+     * it uses dict_set_dynptr. So, for GFID2PATH_VIRT_XATTR_KEY</div><div class='add'>+     * use dict_get_ptr to avoid dict complaining about type</div><div class='add'>+     * mismatch (i.e. str vs ptr)</div><div class='add'>+     */</div><div class='add'>+    if (!hard_resolve)</div><div class='add'>+        ret = dict_get_str(xattr, GFID_TO_PATH_KEY, &amp;path);</div><div class='add'>+    else</div><div class='add'>+        ret = dict_get_ptr(xattr, GFID2PATH_VIRT_XATTR_KEY, (void **)&amp;path);</div><div class='add'>+</div><div class='add'>+    if (ret || !path) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (path_p) {</div><div class='add'>+        *path_p = gf_strdup(path);</div><div class='add'>+        if (!*path_p) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_gfid_to_path (inode_table_t *itable, xlator_t *subvol, uuid_t gfid,</div><div class='del'>-                     char **path_p)</div><div class='add'>+syncop_gfid_to_path(inode_table_t *itable, xlator_t *subvol, uuid_t gfid,</div><div class='add'>+                    char **path_p)</div><div class='ctx'> {</div><div class='del'>-        return syncop_gfid_to_path_hard (itable, subvol, gfid, NULL, path_p,</div><div class='del'>-                                         _gf_false);</div><div class='add'>+    return syncop_gfid_to_path_hard(itable, subvol, gfid, NULL, path_p,</div><div class='add'>+                                    _gf_false);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_inode_find (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                   uuid_t gfid, inode_t **inode,</div><div class='del'>-                   dict_t *xdata, dict_t **rsp_dict)</div><div class='add'>+syncop_inode_find(xlator_t *this, xlator_t *subvol, uuid_t gfid,</div><div class='add'>+                  inode_t **inode, dict_t *xdata, dict_t **rsp_dict)</div><div class='ctx'> {</div><div class='del'>-        int         ret    = 0;</div><div class='del'>-        loc_t       loc    = {0, };</div><div class='del'>-        struct iatt iatt   = {0, };</div><div class='del'>-	*inode =  NULL;</div><div class='del'>-</div><div class='del'>-        *inode = inode_find (this-&gt;itable, gfid);</div><div class='del'>-        if (*inode)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_new (this-&gt;itable);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-	ret = syncop_lookup (subvol, &amp;loc, &amp;iatt, NULL, xdata, rsp_dict);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        *inode = inode_link (loc.inode, NULL, NULL, &amp;iatt);</div><div class='del'>-        if (!*inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    *inode = NULL;</div><div class='add'>+</div><div class='add'>+    *inode = inode_find(this-&gt;itable, gfid);</div><div class='add'>+    if (*inode)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_new(this-&gt;itable);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, &amp;iatt, NULL, xdata, rsp_dict);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    *inode = inode_link(loc.inode, NULL, NULL, &amp;iatt);</div><div class='add'>+    if (!*inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c<br/>index 8323dd71a10..ec646425d74 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/syncop.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/syncop.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/syncop.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/syncop.c</a></div><div class='hunk'>@@ -12,2758 +12,2742 @@</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncopctx_setfsuid (void *uid)</div><div class='del'>-{</div><div class='del'>-	struct syncopctx *opctx = NULL;</div><div class='del'>-	int               ret = 0;</div><div class='del'>-</div><div class='del'>-	/* In args check */</div><div class='del'>-	if (!uid) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	opctx = syncopctx_getctx ();</div><div class='del'>-</div><div class='del'>-	/* alloc for this thread the first time */</div><div class='del'>-	if (!opctx) {</div><div class='del'>-		opctx = GF_CALLOC (1, sizeof (*opctx), gf_common_mt_syncopctx);</div><div class='del'>-		if (!opctx) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = syncopctx_setctx (opctx);</div><div class='del'>-		if (ret != 0) {</div><div class='del'>-			GF_FREE (opctx);</div><div class='del'>-			opctx = NULL;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+syncopctx_setfsuid(void *uid)</div><div class='add'>+{</div><div class='add'>+    struct syncopctx *opctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* In args check */</div><div class='add'>+    if (!uid) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    opctx = syncopctx_getctx();</div><div class='add'>+</div><div class='add'>+    /* alloc for this thread the first time */</div><div class='add'>+    if (!opctx) {</div><div class='add'>+        opctx = GF_CALLOC(1, sizeof(*opctx), gf_common_mt_syncopctx);</div><div class='add'>+        if (!opctx) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncopctx_setctx(opctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(opctx);</div><div class='add'>+            opctx = NULL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	if (opctx &amp;&amp; uid) {</div><div class='del'>-		opctx-&gt;uid = *(uid_t *)uid;</div><div class='del'>-		opctx-&gt;valid |= SYNCOPCTX_UID;</div><div class='del'>-	}</div><div class='add'>+    if (opctx &amp;&amp; uid) {</div><div class='add'>+        opctx-&gt;uid = *(uid_t *)uid;</div><div class='add'>+        opctx-&gt;valid |= SYNCOPCTX_UID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncopctx_setfsgid (void *gid)</div><div class='add'>+syncopctx_setfsgid(void *gid)</div><div class='ctx'> {</div><div class='del'>-	struct syncopctx *opctx = NULL;</div><div class='del'>-	int               ret = 0;</div><div class='add'>+    struct syncopctx *opctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	/* In args check */</div><div class='del'>-	if (!gid) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    /* In args check */</div><div class='add'>+    if (!gid) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	opctx = syncopctx_getctx ();</div><div class='add'>+    opctx = syncopctx_getctx();</div><div class='ctx'> </div><div class='del'>-	/* alloc for this thread the first time */</div><div class='del'>-	if (!opctx) {</div><div class='del'>-		opctx = GF_CALLOC (1, sizeof (*opctx), gf_common_mt_syncopctx);</div><div class='del'>-		if (!opctx) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='add'>+    /* alloc for this thread the first time */</div><div class='add'>+    if (!opctx) {</div><div class='add'>+        opctx = GF_CALLOC(1, sizeof(*opctx), gf_common_mt_syncopctx);</div><div class='add'>+        if (!opctx) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		ret = syncopctx_setctx (opctx);</div><div class='del'>-		if (ret != 0) {</div><div class='del'>-			GF_FREE (opctx);</div><div class='del'>-			opctx = NULL;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+        ret = syncopctx_setctx(opctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(opctx);</div><div class='add'>+            opctx = NULL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	if (opctx &amp;&amp; gid) {</div><div class='del'>-		opctx-&gt;gid = *(gid_t *)gid;</div><div class='del'>-		opctx-&gt;valid |= SYNCOPCTX_GID;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-syncopctx_setfsgroups (int count, const void *groups)</div><div class='del'>-{</div><div class='del'>-	struct syncopctx *opctx = NULL;</div><div class='del'>-	gid_t            *tmpgroups = NULL;</div><div class='del'>-	int               ret = 0;</div><div class='del'>-</div><div class='del'>-	/* In args check */</div><div class='del'>-	if (count != 0 &amp;&amp; !groups) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	opctx = syncopctx_getctx ();</div><div class='del'>-</div><div class='del'>-	/* alloc for this thread the first time */</div><div class='del'>-	if (!opctx) {</div><div class='del'>-		opctx = GF_CALLOC (1, sizeof (*opctx), gf_common_mt_syncopctx);</div><div class='del'>-		if (!opctx) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = syncopctx_setctx (opctx);</div><div class='del'>-		if (ret != 0) {</div><div class='del'>-			GF_FREE (opctx);</div><div class='del'>-			opctx = NULL;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* resize internal groups as required */</div><div class='del'>-	if (count &amp;&amp; opctx-&gt;grpsize &lt; count) {</div><div class='del'>-		if (opctx-&gt;groups) {</div><div class='del'>-			tmpgroups = GF_REALLOC (opctx-&gt;groups,</div><div class='del'>-						(sizeof (gid_t) * count));</div><div class='del'>-			/* NOTE: Not really required to zero the reallocation,</div><div class='del'>-			 * as ngrps controls the validity of data,</div><div class='del'>-			 * making a note irrespective */</div><div class='del'>-			if (tmpgroups == NULL) {</div><div class='del'>-				opctx-&gt;grpsize = 0;</div><div class='del'>-				GF_FREE (opctx-&gt;groups);</div><div class='del'>-				opctx-&gt;groups = NULL;</div><div class='del'>-				ret = -1;</div><div class='del'>-				goto out;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-			tmpgroups = GF_CALLOC (count, sizeof (gid_t),</div><div class='del'>-					       gf_common_mt_syncopctx);</div><div class='del'>-			if (tmpgroups == NULL) {</div><div class='del'>-				opctx-&gt;grpsize = 0;</div><div class='del'>-				ret = -1;</div><div class='del'>-				goto out;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		opctx-&gt;groups = tmpgroups;</div><div class='del'>-		opctx-&gt;grpsize = count;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* copy out the groups passed */</div><div class='del'>-	if (count)</div><div class='del'>-		memcpy (opctx-&gt;groups, groups, (sizeof (gid_t) * count));</div><div class='del'>-</div><div class='del'>-	/* set/reset the ngrps, this is where reset of groups is handled */</div><div class='del'>-	opctx-&gt;ngrps = count;</div><div class='del'>-	opctx-&gt;valid |= SYNCOPCTX_GROUPS;</div><div class='add'>+    if (opctx &amp;&amp; gid) {</div><div class='add'>+        opctx-&gt;gid = *(gid_t *)gid;</div><div class='add'>+        opctx-&gt;valid |= SYNCOPCTX_GID;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+syncopctx_setfsgroups(int count, const void *groups)</div><div class='add'>+{</div><div class='add'>+    struct syncopctx *opctx = NULL;</div><div class='add'>+    gid_t *tmpgroups = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* In args check */</div><div class='add'>+    if (count != 0 &amp;&amp; !groups) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    opctx = syncopctx_getctx();</div><div class='add'>+</div><div class='add'>+    /* alloc for this thread the first time */</div><div class='add'>+    if (!opctx) {</div><div class='add'>+        opctx = GF_CALLOC(1, sizeof(*opctx), gf_common_mt_syncopctx);</div><div class='add'>+        if (!opctx) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncopctx_setctx(opctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(opctx);</div><div class='add'>+            opctx = NULL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* resize internal groups as required */</div><div class='add'>+    if (count &amp;&amp; opctx-&gt;grpsize &lt; count) {</div><div class='add'>+        if (opctx-&gt;groups) {</div><div class='add'>+            tmpgroups = GF_REALLOC(opctx-&gt;groups, (sizeof(gid_t) * count));</div><div class='add'>+            /* NOTE: Not really required to zero the reallocation,</div><div class='add'>+             * as ngrps controls the validity of data,</div><div class='add'>+             * making a note irrespective */</div><div class='add'>+            if (tmpgroups == NULL) {</div><div class='add'>+                opctx-&gt;grpsize = 0;</div><div class='add'>+                GF_FREE(opctx-&gt;groups);</div><div class='add'>+                opctx-&gt;groups = NULL;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            tmpgroups = GF_CALLOC(count, sizeof(gid_t), gf_common_mt_syncopctx);</div><div class='add'>+            if (tmpgroups == NULL) {</div><div class='add'>+                opctx-&gt;grpsize = 0;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        opctx-&gt;groups = tmpgroups;</div><div class='add'>+        opctx-&gt;grpsize = count;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* copy out the groups passed */</div><div class='add'>+    if (count)</div><div class='add'>+        memcpy(opctx-&gt;groups, groups, (sizeof(gid_t) * count));</div><div class='add'>+</div><div class='add'>+    /* set/reset the ngrps, this is where reset of groups is handled */</div><div class='add'>+    opctx-&gt;ngrps = count;</div><div class='add'>+    opctx-&gt;valid |= SYNCOPCTX_GROUPS;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncopctx_setfspid (void *pid)</div><div class='add'>+syncopctx_setfspid(void *pid)</div><div class='ctx'> {</div><div class='del'>-	struct syncopctx *opctx = NULL;</div><div class='del'>-	int               ret = 0;</div><div class='add'>+    struct syncopctx *opctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	/* In args check */</div><div class='del'>-	if (!pid) {</div><div class='del'>-		ret = -1;</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    /* In args check */</div><div class='add'>+    if (!pid) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	opctx = syncopctx_getctx ();</div><div class='add'>+    opctx = syncopctx_getctx();</div><div class='ctx'> </div><div class='del'>-	/* alloc for this thread the first time */</div><div class='del'>-	if (!opctx) {</div><div class='del'>-		opctx = GF_CALLOC (1, sizeof (*opctx), gf_common_mt_syncopctx);</div><div class='del'>-		if (!opctx) {</div><div class='del'>-			ret = -1;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='add'>+    /* alloc for this thread the first time */</div><div class='add'>+    if (!opctx) {</div><div class='add'>+        opctx = GF_CALLOC(1, sizeof(*opctx), gf_common_mt_syncopctx);</div><div class='add'>+        if (!opctx) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		ret = syncopctx_setctx (opctx);</div><div class='del'>-		if (ret != 0) {</div><div class='del'>-			GF_FREE (opctx);</div><div class='del'>-			opctx = NULL;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+        ret = syncopctx_setctx(opctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(opctx);</div><div class='add'>+            opctx = NULL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	if (opctx &amp;&amp; pid) {</div><div class='del'>-		opctx-&gt;pid = *(pid_t *)pid;</div><div class='del'>-		opctx-&gt;valid |= SYNCOPCTX_PID;</div><div class='del'>-	}</div><div class='add'>+    if (opctx &amp;&amp; pid) {</div><div class='add'>+        opctx-&gt;pid = *(pid_t *)pid;</div><div class='add'>+        opctx-&gt;valid |= SYNCOPCTX_PID;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncopctx_setfslkowner (gf_lkowner_t *lk_owner)</div><div class='add'>+syncopctx_setfslkowner(gf_lkowner_t *lk_owner)</div><div class='ctx'> {</div><div class='del'>-        struct syncopctx *opctx = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    struct syncopctx *opctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        /* In args check */</div><div class='del'>-        if (!lk_owner) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* In args check */</div><div class='add'>+    if (!lk_owner) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        opctx = syncopctx_getctx ();</div><div class='add'>+    opctx = syncopctx_getctx();</div><div class='ctx'> </div><div class='del'>-        /* alloc for this thread the first time */</div><div class='add'>+    /* alloc for this thread the first time */</div><div class='add'>+    if (!opctx) {</div><div class='add'>+        opctx = GF_CALLOC(1, sizeof(*opctx), gf_common_mt_syncopctx);</div><div class='ctx'>         if (!opctx) {</div><div class='del'>-                opctx = GF_CALLOC (1, sizeof (*opctx), gf_common_mt_syncopctx);</div><div class='del'>-                if (!opctx) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = syncopctx_setctx (opctx);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        GF_FREE (opctx);</div><div class='del'>-                        opctx = NULL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = syncopctx_setctx(opctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(opctx);</div><div class='add'>+            opctx = NULL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (opctx &amp;&amp; lk_owner) {</div><div class='del'>-                opctx-&gt;lk_owner = *lk_owner;</div><div class='del'>-                opctx-&gt;valid |= SYNCOPCTX_LKOWNER;</div><div class='del'>-        }</div><div class='add'>+    if (opctx &amp;&amp; lk_owner) {</div><div class='add'>+        opctx-&gt;lk_owner = *lk_owner;</div><div class='add'>+        opctx-&gt;valid |= SYNCOPCTX_LKOWNER;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__run (struct synctask *task)</div><div class='add'>+__run(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        struct syncenv *env = NULL;</div><div class='add'>+    struct syncenv *env = NULL;</div><div class='ctx'> </div><div class='del'>-        env = task-&gt;env;</div><div class='add'>+    env = task-&gt;env;</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;task-&gt;all_tasks);</div><div class='del'>-        switch (task-&gt;state) {</div><div class='add'>+    list_del_init(&amp;task-&gt;all_tasks);</div><div class='add'>+    switch (task-&gt;state) {</div><div class='ctx'>         case SYNCTASK_INIT:</div><div class='ctx'>         case SYNCTASK_SUSPEND:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case SYNCTASK_RUN:</div><div class='del'>-                gf_msg_debug (task-&gt;xl-&gt;name, 0, "re-running already running"</div><div class='del'>-                              " task");</div><div class='del'>-                env-&gt;runcount--;</div><div class='del'>-                break;</div><div class='add'>+            gf_msg_debug(task-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "re-running already running"</div><div class='add'>+                         " task");</div><div class='add'>+            env-&gt;runcount--;</div><div class='add'>+            break;</div><div class='ctx'>         case SYNCTASK_WAIT:</div><div class='del'>-                env-&gt;waitcount--;</div><div class='del'>-                break;</div><div class='add'>+            env-&gt;waitcount--;</div><div class='add'>+            break;</div><div class='ctx'>         case SYNCTASK_DONE:</div><div class='del'>-                gf_msg (task-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_COMPLETED_TASK, "running completed task");</div><div class='del'>-		return;</div><div class='del'>-	case SYNCTASK_ZOMBIE:</div><div class='del'>-		gf_msg (task-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_WAKE_UP_ZOMBIE, "attempted to wake up "</div><div class='del'>-                        "zombie!!");</div><div class='del'>-		return;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(task-&gt;xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_COMPLETED_TASK,</div><div class='add'>+                   "running completed task");</div><div class='add'>+            return;</div><div class='add'>+        case SYNCTASK_ZOMBIE:</div><div class='add'>+            gf_msg(task-&gt;xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_WAKE_UP_ZOMBIE,</div><div class='add'>+                   "attempted to wake up "</div><div class='add'>+                   "zombie!!");</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;task-&gt;all_tasks, &amp;env-&gt;runq);</div><div class='del'>-        env-&gt;runcount++;</div><div class='del'>-        task-&gt;state = SYNCTASK_RUN;</div><div class='add'>+    list_add_tail(&amp;task-&gt;all_tasks, &amp;env-&gt;runq);</div><div class='add'>+    env-&gt;runcount++;</div><div class='add'>+    task-&gt;state = SYNCTASK_RUN;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__wait (struct synctask *task)</div><div class='add'>+__wait(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        struct syncenv *env = NULL;</div><div class='add'>+    struct syncenv *env = NULL;</div><div class='ctx'> </div><div class='del'>-        env = task-&gt;env;</div><div class='add'>+    env = task-&gt;env;</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;task-&gt;all_tasks);</div><div class='del'>-        switch (task-&gt;state) {</div><div class='add'>+    list_del_init(&amp;task-&gt;all_tasks);</div><div class='add'>+    switch (task-&gt;state) {</div><div class='ctx'>         case SYNCTASK_INIT:</div><div class='ctx'>         case SYNCTASK_SUSPEND:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case SYNCTASK_RUN:</div><div class='del'>-                env-&gt;runcount--;</div><div class='del'>-                break;</div><div class='add'>+            env-&gt;runcount--;</div><div class='add'>+            break;</div><div class='ctx'>         case SYNCTASK_WAIT:</div><div class='del'>-                gf_msg (task-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_REWAITING_TASK, "re-waiting already waiting "</div><div class='del'>-                        "task");</div><div class='del'>-                env-&gt;waitcount--;</div><div class='del'>-                break;</div><div class='add'>+            gf_msg(task-&gt;xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_REWAITING_TASK,</div><div class='add'>+                   "re-waiting already waiting "</div><div class='add'>+                   "task");</div><div class='add'>+            env-&gt;waitcount--;</div><div class='add'>+            break;</div><div class='ctx'>         case SYNCTASK_DONE:</div><div class='del'>-                gf_msg (task-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_COMPLETED_TASK,</div><div class='del'>-                        "running completed task");</div><div class='del'>-                return;</div><div class='del'>-	case SYNCTASK_ZOMBIE:</div><div class='del'>-		gf_msg (task-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        LG_MSG_SLEEP_ZOMBIE,</div><div class='del'>-			"attempted to sleep a zombie!!");</div><div class='del'>-		return;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(task-&gt;xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_COMPLETED_TASK,</div><div class='add'>+                   "running completed task");</div><div class='add'>+            return;</div><div class='add'>+        case SYNCTASK_ZOMBIE:</div><div class='add'>+            gf_msg(task-&gt;xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_SLEEP_ZOMBIE,</div><div class='add'>+                   "attempted to sleep a zombie!!");</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;task-&gt;all_tasks, &amp;env-&gt;waitq);</div><div class='del'>-        env-&gt;waitcount++;</div><div class='del'>-        task-&gt;state = SYNCTASK_WAIT;</div><div class='add'>+    list_add_tail(&amp;task-&gt;all_tasks, &amp;env-&gt;waitq);</div><div class='add'>+    env-&gt;waitcount++;</div><div class='add'>+    task-&gt;state = SYNCTASK_WAIT;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-synctask_yield (struct synctask *task)</div><div class='add'>+synctask_yield(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *oldTHIS = THIS;</div><div class='add'>+    xlator_t *oldTHIS = THIS;</div><div class='ctx'> </div><div class='ctx'> #if defined(__NetBSD__) &amp;&amp; defined(_UC_TLSBASE)</div><div class='del'>-        /* Preserve pthread private pointer through swapcontex() */</div><div class='del'>-        task-&gt;proc-&gt;sched.uc_flags &amp;= ~_UC_TLSBASE;</div><div class='add'>+    /* Preserve pthread private pointer through swapcontex() */</div><div class='add'>+    task-&gt;proc-&gt;sched.uc_flags &amp;= ~_UC_TLSBASE;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (task-&gt;state != SYNCTASK_DONE) {</div><div class='del'>-                task-&gt;state = SYNCTASK_SUSPEND;</div><div class='del'>-                (void) gf_backtrace_save (task-&gt;btbuf);</div><div class='del'>-        }</div><div class='del'>-        if (swapcontext (&amp;task-&gt;ctx, &amp;task-&gt;proc-&gt;sched) &lt; 0) {</div><div class='del'>-                gf_msg ("syncop", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_SWAPCONTEXT_FAILED, "swapcontext failed");</div><div class='del'>-        }</div><div class='add'>+    if (task-&gt;state != SYNCTASK_DONE) {</div><div class='add'>+        task-&gt;state = SYNCTASK_SUSPEND;</div><div class='add'>+        (void)gf_backtrace_save(task-&gt;btbuf);</div><div class='add'>+    }</div><div class='add'>+    if (swapcontext(&amp;task-&gt;ctx, &amp;task-&gt;proc-&gt;sched) &lt; 0) {</div><div class='add'>+        gf_msg("syncop", GF_LOG_ERROR, errno, LG_MSG_SWAPCONTEXT_FAILED,</div><div class='add'>+               "swapcontext failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        THIS = oldTHIS;</div><div class='add'>+    THIS = oldTHIS;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-synctask_wake (struct synctask *task)</div><div class='add'>+synctask_wake(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        struct syncenv *env = NULL;</div><div class='add'>+    struct syncenv *env = NULL;</div><div class='ctx'> </div><div class='del'>-        env = task-&gt;env;</div><div class='add'>+    env = task-&gt;env;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;env-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                task-&gt;woken = 1;</div><div class='add'>+    pthread_mutex_lock(&amp;env-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        task-&gt;woken = 1;</div><div class='ctx'> </div><div class='del'>-                if (task-&gt;slept)</div><div class='del'>-                        __run (task);</div><div class='add'>+        if (task-&gt;slept)</div><div class='add'>+            __run(task);</div><div class='ctx'> </div><div class='del'>-		pthread_cond_broadcast (&amp;env-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;env-&gt;mutex);</div><div class='add'>+        pthread_cond_broadcast(&amp;env-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;env-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-synctask_wrap (void)</div><div class='add'>+synctask_wrap(void)</div><div class='ctx'> {</div><div class='del'>-        struct synctask *task = NULL;</div><div class='add'>+    struct synctask *task = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Do not trust the pointer received. It may be</div><div class='del'>-           wrong and can lead to crashes. */</div><div class='add'>+    /* Do not trust the pointer received. It may be</div><div class='add'>+       wrong and can lead to crashes. */</div><div class='ctx'> </div><div class='del'>-        task = synctask_get ();</div><div class='del'>-        task-&gt;ret = task-&gt;syncfn (task-&gt;opaque);</div><div class='del'>-        if (task-&gt;synccbk)</div><div class='del'>-                task-&gt;synccbk (task-&gt;ret, task-&gt;frame, task-&gt;opaque);</div><div class='add'>+    task = synctask_get();</div><div class='add'>+    task-&gt;ret = task-&gt;syncfn(task-&gt;opaque);</div><div class='add'>+    if (task-&gt;synccbk)</div><div class='add'>+        task-&gt;synccbk(task-&gt;ret, task-&gt;frame, task-&gt;opaque);</div><div class='ctx'> </div><div class='del'>-        task-&gt;state = SYNCTASK_DONE;</div><div class='add'>+    task-&gt;state = SYNCTASK_DONE;</div><div class='ctx'> </div><div class='del'>-        synctask_yield (task);</div><div class='add'>+    synctask_yield(task);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-synctask_destroy (struct synctask *task)</div><div class='add'>+synctask_destroy(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        if (!task)</div><div class='del'>-                return;</div><div class='add'>+    if (!task)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (task-&gt;stack);</div><div class='add'>+    GF_FREE(task-&gt;stack);</div><div class='ctx'> </div><div class='del'>-        if (task-&gt;opframe)</div><div class='del'>-                STACK_DESTROY (task-&gt;opframe-&gt;root);</div><div class='add'>+    if (task-&gt;opframe)</div><div class='add'>+        STACK_DESTROY(task-&gt;opframe-&gt;root);</div><div class='ctx'> </div><div class='del'>-        if (task-&gt;synccbk == NULL) {</div><div class='del'>-               pthread_mutex_destroy (&amp;task-&gt;mutex);</div><div class='del'>-               pthread_cond_destroy (&amp;task-&gt;cond);</div><div class='del'>-        }</div><div class='add'>+    if (task-&gt;synccbk == NULL) {</div><div class='add'>+        pthread_mutex_destroy(&amp;task-&gt;mutex);</div><div class='add'>+        pthread_cond_destroy(&amp;task-&gt;cond);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (task);</div><div class='add'>+    GF_FREE(task);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-synctask_done (struct synctask *task)</div><div class='add'>+synctask_done(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        if (task-&gt;synccbk) {</div><div class='del'>-                synctask_destroy (task);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (task-&gt;synccbk) {</div><div class='add'>+        synctask_destroy(task);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;task-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-		task-&gt;state = SYNCTASK_ZOMBIE;</div><div class='del'>-                task-&gt;done = 1;</div><div class='del'>-                pthread_cond_broadcast (&amp;task-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;task-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;task-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        task-&gt;state = SYNCTASK_ZOMBIE;</div><div class='add'>+        task-&gt;done = 1;</div><div class='add'>+        pthread_cond_broadcast(&amp;task-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;task-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synctask_setid (struct synctask *task, uid_t uid, gid_t gid)</div><div class='add'>+synctask_setid(struct synctask *task, uid_t uid, gid_t gid)</div><div class='ctx'> {</div><div class='del'>-        if (!task)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!task)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (uid != -1)</div><div class='del'>-                task-&gt;uid = uid;</div><div class='add'>+    if (uid != -1)</div><div class='add'>+        task-&gt;uid = uid;</div><div class='ctx'> </div><div class='del'>-        if (gid != -1)</div><div class='del'>-                task-&gt;gid = gid;</div><div class='add'>+    if (gid != -1)</div><div class='add'>+        task-&gt;gid = gid;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct synctask *</div><div class='del'>-synctask_create (struct syncenv *env, size_t stacksize, synctask_fn_t fn,</div><div class='del'>-                 synctask_cbk_t cbk, call_frame_t *frame, void *opaque)</div><div class='add'>+synctask_create(struct syncenv *env, size_t stacksize, synctask_fn_t fn,</div><div class='add'>+                synctask_cbk_t cbk, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        struct synctask *newtask = NULL;</div><div class='del'>-        xlator_t        *this    = THIS;</div><div class='del'>-        int             destroymode = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (env, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fn, err);</div><div class='del'>-</div><div class='del'>-        /* Check if the syncenv is in destroymode i.e. destroy is SET.</div><div class='del'>-         * If YES, then don't allow any new synctasks on it. Return NULL.</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;env-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                destroymode = env-&gt;destroy;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;env-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        /* syncenv is in DESTROY mode, return from here */</div><div class='del'>-        if (destroymode)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        newtask = GF_CALLOC (1, sizeof (*newtask), gf_common_mt_synctask);</div><div class='del'>-        if (!newtask)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        newtask-&gt;frame      = frame;</div><div class='del'>-        if (!frame) {</div><div class='del'>-                newtask-&gt;opframe = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-                if (!newtask-&gt;opframe)</div><div class='del'>-                        goto err;</div><div class='del'>-                set_lk_owner_from_ptr (&amp;newtask-&gt;opframe-&gt;root-&gt;lk_owner,</div><div class='del'>-                                       newtask-&gt;opframe-&gt;root);</div><div class='del'>-        } else {</div><div class='del'>-                newtask-&gt;opframe = copy_frame (frame);</div><div class='del'>-        }</div><div class='del'>-        if (!newtask-&gt;opframe)</div><div class='del'>-                goto err;</div><div class='del'>-        newtask-&gt;env        = env;</div><div class='del'>-        newtask-&gt;xl         = this;</div><div class='del'>-        newtask-&gt;syncfn     = fn;</div><div class='del'>-        newtask-&gt;synccbk    = cbk;</div><div class='del'>-        newtask-&gt;opaque     = opaque;</div><div class='del'>-</div><div class='del'>-        /* default to the uid/gid of the passed frame */</div><div class='del'>-        newtask-&gt;uid = newtask-&gt;opframe-&gt;root-&gt;uid;</div><div class='del'>-        newtask-&gt;gid = newtask-&gt;opframe-&gt;root-&gt;gid;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;newtask-&gt;all_tasks);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newtask-&gt;waitq);</div><div class='del'>-</div><div class='del'>-        if (getcontext (&amp;newtask-&gt;ctx) &lt; 0) {</div><div class='del'>-                gf_msg ("syncop", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_GETCONTEXT_FAILED, "getcontext failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    struct synctask *newtask = NULL;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    int destroymode = 0;</div><div class='ctx'> </div><div class='del'>-        if (stacksize &lt;= 0) {</div><div class='del'>-                newtask-&gt;stack = GF_CALLOC (1, env-&gt;stacksize,</div><div class='del'>-                                            gf_common_mt_syncstack);</div><div class='del'>-                newtask-&gt;ctx.uc_stack.ss_size = env-&gt;stacksize;</div><div class='del'>-        } else {</div><div class='del'>-                newtask-&gt;stack = GF_CALLOC (1, stacksize,</div><div class='del'>-                                            gf_common_mt_syncstack);</div><div class='del'>-                newtask-&gt;ctx.uc_stack.ss_size = stacksize;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!newtask-&gt;stack) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newtask-&gt;ctx.uc_stack.ss_sp   = newtask-&gt;stack;</div><div class='del'>-</div><div class='del'>-        makecontext (&amp;newtask-&gt;ctx, (void (*)(void)) synctask_wrap, 0);</div><div class='del'>-</div><div class='del'>-        newtask-&gt;state = SYNCTASK_INIT;</div><div class='add'>+    VALIDATE_OR_GOTO(env, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fn, err);</div><div class='ctx'> </div><div class='del'>-        newtask-&gt;slept = 1;</div><div class='add'>+    /* Check if the syncenv is in destroymode i.e. destroy is SET.</div><div class='add'>+     * If YES, then don't allow any new synctasks on it. Return NULL.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;env-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        destroymode = env-&gt;destroy;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;env-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (!cbk) {</div><div class='del'>-                pthread_mutex_init (&amp;newtask-&gt;mutex, NULL);</div><div class='del'>-                pthread_cond_init (&amp;newtask-&gt;cond, NULL);</div><div class='del'>-                newtask-&gt;done = 0;</div><div class='del'>-        }</div><div class='add'>+    /* syncenv is in DESTROY mode, return from here */</div><div class='add'>+    if (destroymode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        synctask_wake (newtask);</div><div class='del'>-        /*</div><div class='del'>-         * Make sure someone's there to execute anything we just put on the</div><div class='del'>-         * run queue.</div><div class='del'>-         */</div><div class='del'>-        syncenv_scale(env);</div><div class='add'>+    newtask = GF_CALLOC(1, sizeof(*newtask), gf_common_mt_synctask);</div><div class='add'>+    if (!newtask)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	return newtask;</div><div class='add'>+    newtask-&gt;frame = frame;</div><div class='add'>+    if (!frame) {</div><div class='add'>+        newtask-&gt;opframe = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+        if (!newtask-&gt;opframe)</div><div class='add'>+            goto err;</div><div class='add'>+        set_lk_owner_from_ptr(&amp;newtask-&gt;opframe-&gt;root-&gt;lk_owner,</div><div class='add'>+                              newtask-&gt;opframe-&gt;root);</div><div class='add'>+    } else {</div><div class='add'>+        newtask-&gt;opframe = copy_frame(frame);</div><div class='add'>+    }</div><div class='add'>+    if (!newtask-&gt;opframe)</div><div class='add'>+        goto err;</div><div class='add'>+    newtask-&gt;env = env;</div><div class='add'>+    newtask-&gt;xl = this;</div><div class='add'>+    newtask-&gt;syncfn = fn;</div><div class='add'>+    newtask-&gt;synccbk = cbk;</div><div class='add'>+    newtask-&gt;opaque = opaque;</div><div class='add'>+</div><div class='add'>+    /* default to the uid/gid of the passed frame */</div><div class='add'>+    newtask-&gt;uid = newtask-&gt;opframe-&gt;root-&gt;uid;</div><div class='add'>+    newtask-&gt;gid = newtask-&gt;opframe-&gt;root-&gt;gid;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;newtask-&gt;all_tasks);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newtask-&gt;waitq);</div><div class='add'>+</div><div class='add'>+    if (getcontext(&amp;newtask-&gt;ctx) &lt; 0) {</div><div class='add'>+        gf_msg("syncop", GF_LOG_ERROR, errno, LG_MSG_GETCONTEXT_FAILED,</div><div class='add'>+               "getcontext failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (stacksize &lt;= 0) {</div><div class='add'>+        newtask-&gt;stack = GF_CALLOC(1, env-&gt;stacksize, gf_common_mt_syncstack);</div><div class='add'>+        newtask-&gt;ctx.uc_stack.ss_size = env-&gt;stacksize;</div><div class='add'>+    } else {</div><div class='add'>+        newtask-&gt;stack = GF_CALLOC(1, stacksize, gf_common_mt_syncstack);</div><div class='add'>+        newtask-&gt;ctx.uc_stack.ss_size = stacksize;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!newtask-&gt;stack) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newtask-&gt;ctx.uc_stack.ss_sp = newtask-&gt;stack;</div><div class='add'>+</div><div class='add'>+    makecontext(&amp;newtask-&gt;ctx, (void (*)(void))synctask_wrap, 0);</div><div class='add'>+</div><div class='add'>+    newtask-&gt;state = SYNCTASK_INIT;</div><div class='add'>+</div><div class='add'>+    newtask-&gt;slept = 1;</div><div class='add'>+</div><div class='add'>+    if (!cbk) {</div><div class='add'>+        pthread_mutex_init(&amp;newtask-&gt;mutex, NULL);</div><div class='add'>+        pthread_cond_init(&amp;newtask-&gt;cond, NULL);</div><div class='add'>+        newtask-&gt;done = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    synctask_wake(newtask);</div><div class='add'>+    /*</div><div class='add'>+     * Make sure someone's there to execute anything we just put on the</div><div class='add'>+     * run queue.</div><div class='add'>+     */</div><div class='add'>+    syncenv_scale(env);</div><div class='add'>+</div><div class='add'>+    return newtask;</div><div class='ctx'> err:</div><div class='del'>-        if (newtask) {</div><div class='del'>-                GF_FREE (newtask-&gt;stack);</div><div class='del'>-                if (newtask-&gt;opframe)</div><div class='del'>-                        STACK_DESTROY (newtask-&gt;opframe-&gt;root);</div><div class='del'>-                GF_FREE (newtask);</div><div class='del'>-        }</div><div class='add'>+    if (newtask) {</div><div class='add'>+        GF_FREE(newtask-&gt;stack);</div><div class='add'>+        if (newtask-&gt;opframe)</div><div class='add'>+            STACK_DESTROY(newtask-&gt;opframe-&gt;root);</div><div class='add'>+        GF_FREE(newtask);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synctask_join (struct synctask *task)</div><div class='add'>+synctask_join(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;task-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		while (!task-&gt;done)</div><div class='del'>-			pthread_cond_wait (&amp;task-&gt;cond, &amp;task-&gt;mutex);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;task-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;task-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        while (!task-&gt;done)</div><div class='add'>+            pthread_cond_wait(&amp;task-&gt;cond, &amp;task-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;task-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	ret = task-&gt;ret;</div><div class='add'>+    ret = task-&gt;ret;</div><div class='ctx'> </div><div class='del'>-	synctask_destroy (task);</div><div class='add'>+    synctask_destroy(task);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synctask_new1 (struct syncenv *env, size_t stacksize, synctask_fn_t fn,</div><div class='del'>-                synctask_cbk_t cbk, call_frame_t *frame, void *opaque)</div><div class='add'>+synctask_new1(struct syncenv *env, size_t stacksize, synctask_fn_t fn,</div><div class='add'>+              synctask_cbk_t cbk, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-	struct synctask *newtask = NULL;</div><div class='del'>-	int              ret = 0;</div><div class='add'>+    struct synctask *newtask = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	newtask = synctask_create (env, stacksize, fn, cbk, frame, opaque);</div><div class='del'>-	if (!newtask)</div><div class='del'>-		return -1;</div><div class='add'>+    newtask = synctask_create(env, stacksize, fn, cbk, frame, opaque);</div><div class='add'>+    if (!newtask)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!cbk)</div><div class='del'>-		ret = synctask_join (newtask);</div><div class='add'>+    if (!cbk)</div><div class='add'>+        ret = synctask_join(newtask);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk,</div><div class='del'>-              call_frame_t *frame, void *opaque)</div><div class='add'>+synctask_new(struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk,</div><div class='add'>+             call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        return synctask_new1 (env, 0, fn, cbk, frame, opaque);</div><div class='add'>+    return synctask_new1(env, 0, fn, cbk, frame, opaque);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct synctask *</div><div class='del'>-syncenv_task (struct syncproc *proc)</div><div class='del'>-{</div><div class='del'>-        struct syncenv   *env = NULL;</div><div class='del'>-        struct synctask  *task = NULL;</div><div class='del'>-        struct timespec   sleep_till = {0, };</div><div class='del'>-        int               ret = 0;</div><div class='del'>-</div><div class='del'>-        env = proc-&gt;env;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;env-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                while (list_empty (&amp;env-&gt;runq)) {</div><div class='del'>-                        sleep_till.tv_sec = time (NULL) + SYNCPROC_IDLE_TIME;</div><div class='del'>-                        ret = pthread_cond_timedwait (&amp;env-&gt;cond, &amp;env-&gt;mutex,</div><div class='del'>-                                                      &amp;sleep_till);</div><div class='del'>-                        if (!list_empty (&amp;env-&gt;runq))</div><div class='del'>-                                break;</div><div class='del'>-                        /* If either of the conditions are met then exit</div><div class='del'>-                         * the current thread:</div><div class='del'>-                         * 1. syncenv has to scale down(procs &gt; procmin)</div><div class='del'>-                         * 2. syncenv is in destroy mode and no tasks in</div><div class='del'>-                         *    either waitq or runq.</div><div class='del'>-                         *</div><div class='del'>-                         * At any point in time, a task can be either in runq,</div><div class='del'>-                         * or in executing state or in the waitq. Once the</div><div class='del'>-                         * destroy mode is set, no new synctask creates will</div><div class='del'>-                         * be allowed, but whatever in waitq or runq should be</div><div class='del'>-                         * allowed to finish before exiting any of the syncenv</div><div class='del'>-                         * processor threads.</div><div class='del'>-                         */</div><div class='del'>-                        if (((ret == ETIMEDOUT) &amp;&amp; (env-&gt;procs &gt; env-&gt;procmin))</div><div class='del'>-                            || (env-&gt;destroy &amp;&amp; list_empty (&amp;env-&gt;waitq))) {</div><div class='del'>-                                task = NULL;</div><div class='del'>-                                env-&gt;procs--;</div><div class='del'>-                                memset (proc, 0, sizeof (*proc));</div><div class='del'>-                                pthread_cond_broadcast (&amp;env-&gt;cond);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+syncenv_task(struct syncproc *proc)</div><div class='add'>+{</div><div class='add'>+    struct syncenv *env = NULL;</div><div class='add'>+    struct synctask *task = NULL;</div><div class='add'>+    struct timespec sleep_till = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    env = proc-&gt;env;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;env-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        while (list_empty(&amp;env-&gt;runq)) {</div><div class='add'>+            sleep_till.tv_sec = time(NULL) + SYNCPROC_IDLE_TIME;</div><div class='add'>+            ret = pthread_cond_timedwait(&amp;env-&gt;cond, &amp;env-&gt;mutex, &amp;sleep_till);</div><div class='add'>+            if (!list_empty(&amp;env-&gt;runq))</div><div class='add'>+                break;</div><div class='add'>+            /* If either of the conditions are met then exit</div><div class='add'>+             * the current thread:</div><div class='add'>+             * 1. syncenv has to scale down(procs &gt; procmin)</div><div class='add'>+             * 2. syncenv is in destroy mode and no tasks in</div><div class='add'>+             *    either waitq or runq.</div><div class='add'>+             *</div><div class='add'>+             * At any point in time, a task can be either in runq,</div><div class='add'>+             * or in executing state or in the waitq. Once the</div><div class='add'>+             * destroy mode is set, no new synctask creates will</div><div class='add'>+             * be allowed, but whatever in waitq or runq should be</div><div class='add'>+             * allowed to finish before exiting any of the syncenv</div><div class='add'>+             * processor threads.</div><div class='add'>+             */</div><div class='add'>+            if (((ret == ETIMEDOUT) &amp;&amp; (env-&gt;procs &gt; env-&gt;procmin)) ||</div><div class='add'>+                (env-&gt;destroy &amp;&amp; list_empty(&amp;env-&gt;waitq))) {</div><div class='add'>+                task = NULL;</div><div class='add'>+                env-&gt;procs--;</div><div class='add'>+                memset(proc, 0, sizeof(*proc));</div><div class='add'>+                pthread_cond_broadcast(&amp;env-&gt;cond);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                task = list_entry (env-&gt;runq.next, struct synctask, all_tasks);</div><div class='add'>+        task = list_entry(env-&gt;runq.next, struct synctask, all_tasks);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;task-&gt;all_tasks);</div><div class='del'>-                env-&gt;runcount--;</div><div class='add'>+        list_del_init(&amp;task-&gt;all_tasks);</div><div class='add'>+        env-&gt;runcount--;</div><div class='ctx'> </div><div class='del'>-                task-&gt;woken = 0;</div><div class='del'>-                task-&gt;slept = 0;</div><div class='add'>+        task-&gt;woken = 0;</div><div class='add'>+        task-&gt;slept = 0;</div><div class='ctx'> </div><div class='del'>-                task-&gt;proc = proc;</div><div class='del'>-        }</div><div class='add'>+        task-&gt;proc = proc;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;env-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;env-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return task;</div><div class='add'>+    return task;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-synctask_switchto (struct synctask *task)</div><div class='add'>+synctask_switchto(struct synctask *task)</div><div class='ctx'> {</div><div class='del'>-        struct syncenv *env = NULL;</div><div class='add'>+    struct syncenv *env = NULL;</div><div class='ctx'> </div><div class='del'>-        env = task-&gt;env;</div><div class='add'>+    env = task-&gt;env;</div><div class='ctx'> </div><div class='del'>-        synctask_set (task);</div><div class='del'>-        THIS = task-&gt;xl;</div><div class='add'>+    synctask_set(task);</div><div class='add'>+    THIS = task-&gt;xl;</div><div class='ctx'> </div><div class='ctx'> #if defined(__NetBSD__) &amp;&amp; defined(_UC_TLSBASE)</div><div class='del'>-        /* Preserve pthread private pointer through swapcontex() */</div><div class='del'>-        task-&gt;ctx.uc_flags &amp;= ~_UC_TLSBASE;</div><div class='add'>+    /* Preserve pthread private pointer through swapcontex() */</div><div class='add'>+    task-&gt;ctx.uc_flags &amp;= ~_UC_TLSBASE;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (swapcontext (&amp;task-&gt;proc-&gt;sched, &amp;task-&gt;ctx) &lt; 0) {</div><div class='del'>-                gf_msg ("syncop", GF_LOG_ERROR, errno,</div><div class='del'>-                        LG_MSG_SWAPCONTEXT_FAILED, "swapcontext failed");</div><div class='del'>-        }</div><div class='add'>+    if (swapcontext(&amp;task-&gt;proc-&gt;sched, &amp;task-&gt;ctx) &lt; 0) {</div><div class='add'>+        gf_msg("syncop", GF_LOG_ERROR, errno, LG_MSG_SWAPCONTEXT_FAILED,</div><div class='add'>+               "swapcontext failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (task-&gt;state == SYNCTASK_DONE) {</div><div class='del'>-                synctask_done (task);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (task-&gt;state == SYNCTASK_DONE) {</div><div class='add'>+        synctask_done(task);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;env-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (task-&gt;woken) {</div><div class='del'>-                        __run (task);</div><div class='del'>-                } else {</div><div class='del'>-                        task-&gt;slept = 1;</div><div class='del'>-                        __wait (task);</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;env-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (task-&gt;woken) {</div><div class='add'>+            __run(task);</div><div class='add'>+        } else {</div><div class='add'>+            task-&gt;slept = 1;</div><div class='add'>+            __wait(task);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;env-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;env-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-syncenv_processor (void *thdata)</div><div class='add'>+syncenv_processor(void *thdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncenv  *env = NULL;</div><div class='del'>-        struct syncproc *proc = NULL;</div><div class='del'>-        struct synctask *task = NULL;</div><div class='add'>+    struct syncenv *env = NULL;</div><div class='add'>+    struct syncproc *proc = NULL;</div><div class='add'>+    struct synctask *task = NULL;</div><div class='ctx'> </div><div class='del'>-        proc = thdata;</div><div class='del'>-        env = proc-&gt;env;</div><div class='add'>+    proc = thdata;</div><div class='add'>+    env = proc-&gt;env;</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                task = syncenv_task (proc);</div><div class='del'>-                if (!task)</div><div class='del'>-                        break;</div><div class='add'>+    for (;;) {</div><div class='add'>+        task = syncenv_task(proc);</div><div class='add'>+        if (!task)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                synctask_switchto (task);</div><div class='add'>+        synctask_switchto(task);</div><div class='ctx'> </div><div class='del'>-                syncenv_scale (env);</div><div class='del'>-        }</div><div class='add'>+        syncenv_scale(env);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-syncenv_scale (struct syncenv *env)</div><div class='del'>-{</div><div class='del'>-        int  diff = 0;</div><div class='del'>-        int  scale = 0;</div><div class='del'>-        int  i = 0;</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        char thread_name[GF_THREAD_NAMEMAX] = {0,};</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;env-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (env-&gt;procs &gt; env-&gt;runcount)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                scale = env-&gt;runcount;</div><div class='del'>-                if (scale &gt; env-&gt;procmax)</div><div class='del'>-                        scale = env-&gt;procmax;</div><div class='del'>-                if (scale &gt; env-&gt;procs)</div><div class='del'>-                        diff = scale - env-&gt;procs;</div><div class='del'>-                while (diff) {</div><div class='del'>-                        diff--;</div><div class='del'>-                        for (; (i &lt; env-&gt;procmax); i++) {</div><div class='del'>-                                if (env-&gt;proc[i].processor == 0)</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        env-&gt;proc[i].env = env;</div><div class='del'>-                        snprintf (thread_name, sizeof(thread_name),</div><div class='del'>-                                  "sproc%03hx", (env-&gt;procs &amp; 0x3ff));</div><div class='del'>-                        ret = gf_thread_create (&amp;env-&gt;proc[i].processor, NULL,</div><div class='del'>-                                                syncenv_processor,</div><div class='del'>-                                                &amp;env-&gt;proc[i], thread_name);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-                        env-&gt;procs++;</div><div class='del'>-                        i++;</div><div class='del'>-                }</div><div class='add'>+syncenv_scale(struct syncenv *env)</div><div class='add'>+{</div><div class='add'>+    int diff = 0;</div><div class='add'>+    int scale = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;env-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (env-&gt;procs &gt; env-&gt;runcount)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        scale = env-&gt;runcount;</div><div class='add'>+        if (scale &gt; env-&gt;procmax)</div><div class='add'>+            scale = env-&gt;procmax;</div><div class='add'>+        if (scale &gt; env-&gt;procs)</div><div class='add'>+            diff = scale - env-&gt;procs;</div><div class='add'>+        while (diff) {</div><div class='add'>+            diff--;</div><div class='add'>+            for (; (i &lt; env-&gt;procmax); i++) {</div><div class='add'>+                if (env-&gt;proc[i].processor == 0)</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            env-&gt;proc[i].env = env;</div><div class='add'>+            snprintf(thread_name, sizeof(thread_name), "sproc%03hx",</div><div class='add'>+                     (env-&gt;procs &amp; 0x3ff));</div><div class='add'>+            ret = gf_thread_create(&amp;env-&gt;proc[i].processor, NULL,</div><div class='add'>+                                   syncenv_processor, &amp;env-&gt;proc[i],</div><div class='add'>+                                   thread_name);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='add'>+            env-&gt;procs++;</div><div class='add'>+            i++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;env-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;env-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* The syncenv threads are cleaned up in this routine.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-syncenv_destroy (struct syncenv *env)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        if (env == NULL)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /* SET the 'destroy' in syncenv structure to prohibit any</div><div class='del'>-         * further synctask(s) on this syncenv which is in destroy mode.</div><div class='del'>-         *</div><div class='del'>-         * If syncenv threads are in pthread cond wait with no tasks in</div><div class='del'>-         * their run or wait queue, then the threads are woken up by</div><div class='del'>-         * broadcasting the cond variable and if destroy field is set,</div><div class='del'>-         * the infinite loop in syncenv_processor is broken and the</div><div class='del'>-         * threads return.</div><div class='del'>-         *</div><div class='del'>-         * If syncenv threads have tasks in runq or waitq, the tasks are</div><div class='del'>-         * completed and only then the thread returns.</div><div class='add'>+syncenv_destroy(struct syncenv *env)</div><div class='add'>+{</div><div class='add'>+    if (env == NULL)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    /* SET the 'destroy' in syncenv structure to prohibit any</div><div class='add'>+     * further synctask(s) on this syncenv which is in destroy mode.</div><div class='add'>+     *</div><div class='add'>+     * If syncenv threads are in pthread cond wait with no tasks in</div><div class='add'>+     * their run or wait queue, then the threads are woken up by</div><div class='add'>+     * broadcasting the cond variable and if destroy field is set,</div><div class='add'>+     * the infinite loop in syncenv_processor is broken and the</div><div class='add'>+     * threads return.</div><div class='add'>+     *</div><div class='add'>+     * If syncenv threads have tasks in runq or waitq, the tasks are</div><div class='add'>+     * completed and only then the thread returns.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;env-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        env-&gt;destroy = 1;</div><div class='add'>+        /* This broadcast will wake threads in pthread_cond_wait</div><div class='add'>+         * in syncenv_task</div><div class='ctx'>          */</div><div class='del'>-        pthread_mutex_lock (&amp;env-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                env-&gt;destroy = 1;</div><div class='del'>-                /* This broadcast will wake threads in pthread_cond_wait</div><div class='del'>-                 * in syncenv_task</div><div class='del'>-                 */</div><div class='del'>-                pthread_cond_broadcast (&amp;env-&gt;cond);</div><div class='del'>-</div><div class='del'>-                /* when the syncenv_task() thread is exiting, it broadcasts to</div><div class='del'>-                 * wake the below wait.</div><div class='del'>-                 */</div><div class='del'>-                while (env-&gt;procs != 0) {</div><div class='del'>-                        pthread_cond_wait (&amp;env-&gt;cond, &amp;env-&gt;mutex);</div><div class='del'>-                }</div><div class='add'>+        pthread_cond_broadcast(&amp;env-&gt;cond);</div><div class='add'>+</div><div class='add'>+        /* when the syncenv_task() thread is exiting, it broadcasts to</div><div class='add'>+         * wake the below wait.</div><div class='add'>+         */</div><div class='add'>+        while (env-&gt;procs != 0) {</div><div class='add'>+            pthread_cond_wait(&amp;env-&gt;cond, &amp;env-&gt;mutex);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;env-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;env-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;env-&gt;mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;env-&gt;cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;env-&gt;mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;env-&gt;cond);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (env);</div><div class='add'>+    GF_FREE(env);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct syncenv *</div><div class='del'>-syncenv_new (size_t stacksize, int procmin, int procmax)</div><div class='del'>-{</div><div class='del'>-        struct syncenv *newenv = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        int             i = 0;</div><div class='del'>-        char            thread_name[GF_THREAD_NAMEMAX] = {0,};</div><div class='del'>-</div><div class='del'>-	if (!procmin || procmin &lt; 0)</div><div class='del'>-		procmin = SYNCENV_PROC_MIN;</div><div class='del'>-	if (!procmax || procmax &gt; SYNCENV_PROC_MAX)</div><div class='del'>-		procmax = SYNCENV_PROC_MAX;</div><div class='del'>-</div><div class='del'>-	if (procmin &gt; procmax)</div><div class='del'>-		return NULL;</div><div class='del'>-</div><div class='del'>-        newenv = GF_CALLOC (1, sizeof (*newenv), gf_common_mt_syncenv);</div><div class='del'>-</div><div class='del'>-        if (!newenv)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_init (&amp;newenv-&gt;mutex, NULL);</div><div class='del'>-        pthread_cond_init (&amp;newenv-&gt;cond, NULL);</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;newenv-&gt;runq);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newenv-&gt;waitq);</div><div class='del'>-</div><div class='del'>-        newenv-&gt;stacksize    = SYNCENV_DEFAULT_STACKSIZE;</div><div class='del'>-        if (stacksize)</div><div class='del'>-                newenv-&gt;stacksize = stacksize;</div><div class='del'>-	newenv-&gt;procmin = procmin;</div><div class='del'>-	newenv-&gt;procmax = procmax;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; newenv-&gt;procmin; i++) {</div><div class='del'>-                newenv-&gt;proc[i].env = newenv;</div><div class='del'>-                snprintf (thread_name, sizeof(thread_name),</div><div class='del'>-                          "%s%d", "sproc", (newenv-&gt;procs));</div><div class='del'>-                ret = gf_thread_create (&amp;newenv-&gt;proc[i].processor, NULL,</div><div class='del'>-                                        syncenv_processor, &amp;newenv-&gt;proc[i],</div><div class='del'>-                                        thread_name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-                newenv-&gt;procs++;</div><div class='del'>-        }</div><div class='add'>+syncenv_new(size_t stacksize, int procmin, int procmax)</div><div class='add'>+{</div><div class='add'>+    struct syncenv *newenv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                syncenv_destroy (newenv);</div><div class='del'>-                newenv = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!procmin || procmin &lt; 0)</div><div class='add'>+        procmin = SYNCENV_PROC_MIN;</div><div class='add'>+    if (!procmax || procmax &gt; SYNCENV_PROC_MAX)</div><div class='add'>+        procmax = SYNCENV_PROC_MAX;</div><div class='ctx'> </div><div class='del'>-        return newenv;</div><div class='del'>-}</div><div class='add'>+    if (procmin &gt; procmax)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    newenv = GF_CALLOC(1, sizeof(*newenv), gf_common_mt_syncenv);</div><div class='add'>+</div><div class='add'>+    if (!newenv)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_init(&amp;newenv-&gt;mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;newenv-&gt;cond, NULL);</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;newenv-&gt;runq);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newenv-&gt;waitq);</div><div class='ctx'> </div><div class='add'>+    newenv-&gt;stacksize = SYNCENV_DEFAULT_STACKSIZE;</div><div class='add'>+    if (stacksize)</div><div class='add'>+        newenv-&gt;stacksize = stacksize;</div><div class='add'>+    newenv-&gt;procmin = procmin;</div><div class='add'>+    newenv-&gt;procmax = procmax;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; newenv-&gt;procmin; i++) {</div><div class='add'>+        newenv-&gt;proc[i].env = newenv;</div><div class='add'>+        snprintf(thread_name, sizeof(thread_name), "%s%d", "sproc",</div><div class='add'>+                 (newenv-&gt;procs));</div><div class='add'>+        ret = gf_thread_create(&amp;newenv-&gt;proc[i].processor, NULL,</div><div class='add'>+                               syncenv_processor, &amp;newenv-&gt;proc[i],</div><div class='add'>+                               thread_name);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+        newenv-&gt;procs++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        syncenv_destroy(newenv);</div><div class='add'>+        newenv = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return newenv;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-synclock_init (synclock_t *lock, lock_attr_t attr)</div><div class='add'>+synclock_init(synclock_t *lock, lock_attr_t attr)</div><div class='ctx'> {</div><div class='del'>-        if (!lock)</div><div class='del'>-               return -1;</div><div class='add'>+    if (!lock)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        pthread_cond_init (&amp;lock-&gt;cond, 0);</div><div class='del'>-        lock-&gt;type = LOCK_NULL;</div><div class='del'>-        lock-&gt;owner = NULL;</div><div class='del'>-        lock-&gt;owner_tid = 0;</div><div class='del'>-        lock-&gt;lock = 0;</div><div class='del'>-        lock-&gt;attr = attr;</div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;waitq);</div><div class='add'>+    pthread_cond_init(&amp;lock-&gt;cond, 0);</div><div class='add'>+    lock-&gt;type = LOCK_NULL;</div><div class='add'>+    lock-&gt;owner = NULL;</div><div class='add'>+    lock-&gt;owner_tid = 0;</div><div class='add'>+    lock-&gt;lock = 0;</div><div class='add'>+    lock-&gt;attr = attr;</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;waitq);</div><div class='ctx'> </div><div class='del'>-        return pthread_mutex_init (&amp;lock-&gt;guard, 0);</div><div class='add'>+    return pthread_mutex_init(&amp;lock-&gt;guard, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synclock_destroy (synclock_t *lock)</div><div class='add'>+synclock_destroy(synclock_t *lock)</div><div class='ctx'> {</div><div class='del'>-	if (!lock)</div><div class='del'>-		return -1;</div><div class='add'>+    if (!lock)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	pthread_cond_destroy (&amp;lock-&gt;cond);</div><div class='del'>-	return pthread_mutex_destroy (&amp;lock-&gt;guard);</div><div class='add'>+    pthread_cond_destroy(&amp;lock-&gt;cond);</div><div class='add'>+    return pthread_mutex_destroy(&amp;lock-&gt;guard);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__synclock_lock (struct synclock *lock)</div><div class='del'>-{</div><div class='del'>-        struct synctask *task = NULL;</div><div class='del'>-</div><div class='del'>-        if (!lock)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        task = synctask_get ();</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;lock &amp;&amp; (lock-&gt;attr == SYNC_LOCK_RECURSIVE)) {</div><div class='del'>-                /*Recursive lock (if same owner requested for lock again then</div><div class='del'>-                 *increment lock count and return success).</div><div class='del'>-                 *Note:same number of unlocks required.</div><div class='del'>-                 */</div><div class='del'>-                switch (lock-&gt;type) {</div><div class='del'>-                case LOCK_TASK:</div><div class='del'>-                        if (task == lock-&gt;owner) {</div><div class='del'>-                                lock-&gt;lock++;</div><div class='del'>-                                gf_msg_trace ("", 0, "Recursive lock called by"</div><div class='del'>-                                              " sync task.owner= %p,lock=%d",</div><div class='del'>-                                              lock-&gt;owner, lock-&gt;lock);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                case LOCK_THREAD:</div><div class='del'>-                        if (pthread_equal(pthread_self (), lock-&gt;owner_tid)) {</div><div class='del'>-                                lock-&gt;lock++;</div><div class='del'>-                                gf_msg_trace ("", 0, "Recursive lock called by"</div><div class='del'>-                                              " thread ,owner=%u lock=%d",</div><div class='del'>-                                              (unsigned int) lock-&gt;owner_tid,</div><div class='del'>-                                              lock-&gt;lock);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        gf_msg ("", GF_LOG_CRITICAL, 0,</div><div class='del'>-                                LG_MSG_UNKNOWN_LOCK_TYPE, "unknown lock type");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+__synclock_lock(struct synclock *lock)</div><div class='add'>+{</div><div class='add'>+    struct synctask *task = NULL;</div><div class='ctx'> </div><div class='add'>+    if (!lock)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        while (lock-&gt;lock) {</div><div class='del'>-                if (task) {</div><div class='del'>-                        /* called within a synctask */</div><div class='del'>-                        task-&gt;woken = 0;</div><div class='del'>-                        list_add_tail (&amp;task-&gt;waitq, &amp;lock-&gt;waitq);</div><div class='del'>-                        pthread_mutex_unlock (&amp;lock-&gt;guard);</div><div class='del'>-                        synctask_yield (task);</div><div class='del'>-                        /* task is removed from waitq in unlock,</div><div class='del'>-                         * under lock-&gt;guard.*/</div><div class='del'>-                        pthread_mutex_lock (&amp;lock-&gt;guard);</div><div class='del'>-                } else {</div><div class='del'>-                        /* called by a non-synctask */</div><div class='del'>-                        pthread_cond_wait (&amp;lock-&gt;cond, &amp;lock-&gt;guard);</div><div class='add'>+    task = synctask_get();</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;lock &amp;&amp; (lock-&gt;attr == SYNC_LOCK_RECURSIVE)) {</div><div class='add'>+        /*Recursive lock (if same owner requested for lock again then</div><div class='add'>+         *increment lock count and return success).</div><div class='add'>+         *Note:same number of unlocks required.</div><div class='add'>+         */</div><div class='add'>+        switch (lock-&gt;type) {</div><div class='add'>+            case LOCK_TASK:</div><div class='add'>+                if (task == lock-&gt;owner) {</div><div class='add'>+                    lock-&gt;lock++;</div><div class='add'>+                    gf_msg_trace("", 0,</div><div class='add'>+                                 "Recursive lock called by"</div><div class='add'>+                                 " sync task.owner= %p,lock=%d",</div><div class='add'>+                                 lock-&gt;owner, lock-&gt;lock);</div><div class='add'>+                    return 0;</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+            case LOCK_THREAD:</div><div class='add'>+                if (pthread_equal(pthread_self(), lock-&gt;owner_tid)) {</div><div class='add'>+                    lock-&gt;lock++;</div><div class='add'>+                    gf_msg_trace("", 0,</div><div class='add'>+                                 "Recursive lock called by"</div><div class='add'>+                                 " thread ,owner=%u lock=%d",</div><div class='add'>+                                 (unsigned int)lock-&gt;owner_tid, lock-&gt;lock);</div><div class='add'>+                    return 0;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_UNKNOWN_LOCK_TYPE,</div><div class='add'>+                       "unknown lock type");</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    while (lock-&gt;lock) {</div><div class='ctx'>         if (task) {</div><div class='del'>-                lock-&gt;type = LOCK_TASK;</div><div class='del'>-                lock-&gt;owner = task;    /* for synctask*/</div><div class='del'>-</div><div class='add'>+            /* called within a synctask */</div><div class='add'>+            task-&gt;woken = 0;</div><div class='add'>+            list_add_tail(&amp;task-&gt;waitq, &amp;lock-&gt;waitq);</div><div class='add'>+            pthread_mutex_unlock(&amp;lock-&gt;guard);</div><div class='add'>+            synctask_yield(task);</div><div class='add'>+            /* task is removed from waitq in unlock,</div><div class='add'>+             * under lock-&gt;guard.*/</div><div class='add'>+            pthread_mutex_lock(&amp;lock-&gt;guard);</div><div class='ctx'>         } else {</div><div class='del'>-                lock-&gt;type = LOCK_THREAD;</div><div class='del'>-                lock-&gt;owner_tid = pthread_self (); /* for non-synctask */</div><div class='del'>-</div><div class='add'>+            /* called by a non-synctask */</div><div class='add'>+            pthread_cond_wait(&amp;lock-&gt;cond, &amp;lock-&gt;guard);</div><div class='ctx'>         }</div><div class='del'>-        lock-&gt;lock = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    if (task) {</div><div class='add'>+        lock-&gt;type = LOCK_TASK;</div><div class='add'>+        lock-&gt;owner = task; /* for synctask*/</div><div class='ctx'> </div><div class='add'>+    } else {</div><div class='add'>+        lock-&gt;type = LOCK_THREAD;</div><div class='add'>+        lock-&gt;owner_tid = pthread_self(); /* for non-synctask */</div><div class='add'>+    }</div><div class='add'>+    lock-&gt;lock = 1;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-synclock_lock (synclock_t *lock)</div><div class='add'>+synclock_lock(synclock_t *lock)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;lock-&gt;guard);</div><div class='del'>-	{</div><div class='del'>-		ret = __synclock_lock (lock);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;lock-&gt;guard);</div><div class='add'>+    pthread_mutex_lock(&amp;lock-&gt;guard);</div><div class='add'>+    {</div><div class='add'>+        ret = __synclock_lock(lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lock-&gt;guard);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-synclock_trylock (synclock_t *lock)</div><div class='add'>+synclock_trylock(synclock_t *lock)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	errno = 0;</div><div class='add'>+    errno = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;lock-&gt;guard);</div><div class='del'>-	{</div><div class='del'>-		if (lock-&gt;lock) {</div><div class='del'>-			errno = EBUSY;</div><div class='del'>-			ret = -1;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='add'>+    pthread_mutex_lock(&amp;lock-&gt;guard);</div><div class='add'>+    {</div><div class='add'>+        if (lock-&gt;lock) {</div><div class='add'>+            errno = EBUSY;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		ret = __synclock_lock (lock);</div><div class='del'>-	}</div><div class='add'>+        ret = __synclock_lock(lock);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	pthread_mutex_unlock (&amp;lock-&gt;guard);</div><div class='add'>+    pthread_mutex_unlock(&amp;lock-&gt;guard);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__synclock_unlock (synclock_t *lock)</div><div class='del'>-{</div><div class='del'>-        struct synctask *task = NULL;</div><div class='del'>-        struct synctask *curr = NULL;</div><div class='del'>-</div><div class='del'>-        if (!lock)</div><div class='del'>-               return -1;</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;lock == 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_CRITICAL, 0, LG_MSG_UNLOCK_BEFORE_LOCK,</div><div class='del'>-                        "Unlock called  before lock ");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        curr = synctask_get ();</div><div class='del'>-        /*unlock should be called by lock owner</div><div class='del'>-         *i.e this will not allow the lock in nonsync task and unlock</div><div class='del'>-         * in sync task and vice-versa</div><div class='del'>-         */</div><div class='del'>-        switch (lock-&gt;type) {</div><div class='add'>+__synclock_unlock(synclock_t *lock)</div><div class='add'>+{</div><div class='add'>+    struct synctask *task = NULL;</div><div class='add'>+    struct synctask *curr = NULL;</div><div class='add'>+</div><div class='add'>+    if (!lock)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;lock == 0) {</div><div class='add'>+        gf_msg("", GF_LOG_CRITICAL, 0, LG_MSG_UNLOCK_BEFORE_LOCK,</div><div class='add'>+               "Unlock called  before lock ");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    curr = synctask_get();</div><div class='add'>+    /*unlock should be called by lock owner</div><div class='add'>+     *i.e this will not allow the lock in nonsync task and unlock</div><div class='add'>+     * in sync task and vice-versa</div><div class='add'>+     */</div><div class='add'>+    switch (lock-&gt;type) {</div><div class='ctx'>         case LOCK_TASK:</div><div class='del'>-                if (curr == lock-&gt;owner) {</div><div class='del'>-                        lock-&gt;lock--;</div><div class='del'>-                        gf_msg_trace ("", 0, "Unlock success %p, remaining"</div><div class='del'>-                                      " locks=%d", lock-&gt;owner, lock-&gt;lock);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg ("", GF_LOG_WARNING, 0, LG_MSG_LOCK_OWNER_ERROR,</div><div class='del'>-                                "Unlock called by %p, but lock held by %p",</div><div class='del'>-                                curr, lock-&gt;owner);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            if (curr == lock-&gt;owner) {</div><div class='add'>+                lock-&gt;lock--;</div><div class='add'>+                gf_msg_trace("", 0,</div><div class='add'>+                             "Unlock success %p, remaining"</div><div class='add'>+                             " locks=%d",</div><div class='add'>+                             lock-&gt;owner, lock-&gt;lock);</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg("", GF_LOG_WARNING, 0, LG_MSG_LOCK_OWNER_ERROR,</div><div class='add'>+                       "Unlock called by %p, but lock held by %p", curr,</div><div class='add'>+                       lock-&gt;owner);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'>         case LOCK_THREAD:</div><div class='del'>-                if (pthread_equal(pthread_self (), lock-&gt;owner_tid)) {</div><div class='del'>-                        lock-&gt;lock--;</div><div class='del'>-                        gf_msg_trace ("", 0, "Unlock success %u, remaining "</div><div class='del'>-                                      "locks=%d",</div><div class='del'>-                                      (unsigned int)lock-&gt;owner_tid,</div><div class='del'>-                                      lock-&gt;lock);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg ("", GF_LOG_WARNING, 0, LG_MSG_LOCK_OWNER_ERROR,</div><div class='del'>-                                "Unlock called by %u, but lock held by %u",</div><div class='del'>-                                (unsigned int) pthread_self(),</div><div class='del'>-                                (unsigned int) lock-&gt;owner_tid);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            if (pthread_equal(pthread_self(), lock-&gt;owner_tid)) {</div><div class='add'>+                lock-&gt;lock--;</div><div class='add'>+                gf_msg_trace("", 0,</div><div class='add'>+                             "Unlock success %u, remaining "</div><div class='add'>+                             "locks=%d",</div><div class='add'>+                             (unsigned int)lock-&gt;owner_tid, lock-&gt;lock);</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg("", GF_LOG_WARNING, 0, LG_MSG_LOCK_OWNER_ERROR,</div><div class='add'>+                       "Unlock called by %u, but lock held by %u",</div><div class='add'>+                       (unsigned int)pthread_self(),</div><div class='add'>+                       (unsigned int)lock-&gt;owner_tid);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;lock &gt; 0) {</div><div class='del'>-                 return 0;</div><div class='del'>-        }</div><div class='del'>-        lock-&gt;type = LOCK_NULL;</div><div class='del'>-        lock-&gt;owner = NULL;</div><div class='del'>-        lock-&gt;owner_tid = 0;</div><div class='del'>-        lock-&gt;lock = 0;</div><div class='del'>-        /* There could be both synctasks and non synctasks</div><div class='del'>-           waiting (or none, or either). As a mid-approach</div><div class='del'>-           between maintaining too many waiting counters</div><div class='del'>-           at one extreme and a thundering herd on unlock</div><div class='del'>-           at the other, call a cond_signal (which wakes</div><div class='del'>-           one waiter) and first synctask waiter. So at</div><div class='del'>-           most we have two threads waking up to grab the</div><div class='del'>-           just released lock.</div><div class='del'>-        */</div><div class='del'>-        pthread_cond_signal (&amp;lock-&gt;cond);</div><div class='del'>-        if (!list_empty (&amp;lock-&gt;waitq)) {</div><div class='del'>-                task = list_entry (lock-&gt;waitq.next, struct synctask, waitq);</div><div class='del'>-                list_del_init (&amp;task-&gt;waitq);</div><div class='del'>-                synctask_wake (task);</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (lock-&gt;lock &gt; 0) {</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='add'>+    lock-&gt;type = LOCK_NULL;</div><div class='add'>+    lock-&gt;owner = NULL;</div><div class='add'>+    lock-&gt;owner_tid = 0;</div><div class='add'>+    lock-&gt;lock = 0;</div><div class='add'>+    /* There could be both synctasks and non synctasks</div><div class='add'>+       waiting (or none, or either). As a mid-approach</div><div class='add'>+       between maintaining too many waiting counters</div><div class='add'>+       at one extreme and a thundering herd on unlock</div><div class='add'>+       at the other, call a cond_signal (which wakes</div><div class='add'>+       one waiter) and first synctask waiter. So at</div><div class='add'>+       most we have two threads waking up to grab the</div><div class='add'>+       just released lock.</div><div class='add'>+    */</div><div class='add'>+    pthread_cond_signal(&amp;lock-&gt;cond);</div><div class='add'>+    if (!list_empty(&amp;lock-&gt;waitq)) {</div><div class='add'>+        task = list_entry(lock-&gt;waitq.next, struct synctask, waitq);</div><div class='add'>+        list_del_init(&amp;task-&gt;waitq);</div><div class='add'>+        synctask_wake(task);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-synclock_unlock (synclock_t *lock)</div><div class='add'>+synclock_unlock(synclock_t *lock)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;lock-&gt;guard);</div><div class='del'>-	{</div><div class='del'>-		ret = __synclock_unlock (lock);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;lock-&gt;guard);</div><div class='add'>+    pthread_mutex_lock(&amp;lock-&gt;guard);</div><div class='add'>+    {</div><div class='add'>+        ret = __synclock_unlock(lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lock-&gt;guard);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Barriers */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncbarrier_init (struct syncbarrier *barrier)</div><div class='add'>+syncbarrier_init(struct syncbarrier *barrier)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-	if (!barrier) {</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    int ret = 0;</div><div class='add'>+    if (!barrier) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = pthread_cond_init (&amp;barrier-&gt;cond, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                errno = ret;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-	barrier-&gt;count = 0;</div><div class='del'>-        barrier-&gt;waitfor = 0;</div><div class='del'>-	INIT_LIST_HEAD (&amp;barrier-&gt;waitq);</div><div class='del'>-</div><div class='del'>-	ret = pthread_mutex_init (&amp;barrier-&gt;guard, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                (void)pthread_cond_destroy (&amp;barrier-&gt;cond);</div><div class='del'>-                errno = ret;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        barrier-&gt;initialized = _gf_true;</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    ret = pthread_cond_init(&amp;barrier-&gt;cond, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        errno = ret;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    barrier-&gt;count = 0;</div><div class='add'>+    barrier-&gt;waitfor = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;barrier-&gt;waitq);</div><div class='ctx'> </div><div class='add'>+    ret = pthread_mutex_init(&amp;barrier-&gt;guard, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        (void)pthread_cond_destroy(&amp;barrier-&gt;cond);</div><div class='add'>+        errno = ret;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    barrier-&gt;initialized = _gf_true;</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncbarrier_destroy (struct syncbarrier *barrier)</div><div class='add'>+syncbarrier_destroy(struct syncbarrier *barrier)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int ret1 = 0;</div><div class='del'>-	if (!barrier) {</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int ret1 = 0;</div><div class='add'>+    if (!barrier) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (barrier-&gt;initialized) {</div><div class='del'>-                ret = pthread_cond_destroy (&amp;barrier-&gt;cond);</div><div class='del'>-                ret1 = pthread_mutex_destroy (&amp;barrier-&gt;guard);</div><div class='del'>-                barrier-&gt;initialized = _gf_false;</div><div class='del'>-        }</div><div class='del'>-        if (ret || ret1) {</div><div class='del'>-                errno = ret?ret:ret1;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (barrier-&gt;initialized) {</div><div class='add'>+        ret = pthread_cond_destroy(&amp;barrier-&gt;cond);</div><div class='add'>+        ret1 = pthread_mutex_destroy(&amp;barrier-&gt;guard);</div><div class='add'>+        barrier-&gt;initialized = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    if (ret || ret1) {</div><div class='add'>+        errno = ret ? ret : ret1;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__syncbarrier_wait (struct syncbarrier *barrier, int waitfor)</div><div class='add'>+__syncbarrier_wait(struct syncbarrier *barrier, int waitfor)</div><div class='ctx'> {</div><div class='del'>-	struct synctask *task = NULL;</div><div class='add'>+    struct synctask *task = NULL;</div><div class='ctx'> </div><div class='del'>-	if (!barrier) {</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    if (!barrier) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	task = synctask_get ();</div><div class='add'>+    task = synctask_get();</div><div class='ctx'> </div><div class='del'>-	while (barrier-&gt;count &lt; waitfor) {</div><div class='del'>-		if (task) {</div><div class='del'>-			/* called within a synctask */</div><div class='del'>-			list_add_tail (&amp;task-&gt;waitq, &amp;barrier-&gt;waitq);</div><div class='del'>-                        pthread_mutex_unlock (&amp;barrier-&gt;guard);</div><div class='del'>-                        synctask_yield (task);</div><div class='del'>-                        pthread_mutex_lock (&amp;barrier-&gt;guard);</div><div class='del'>-		} else {</div><div class='del'>-			/* called by a non-synctask */</div><div class='del'>-			pthread_cond_wait (&amp;barrier-&gt;cond, &amp;barrier-&gt;guard);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    while (barrier-&gt;count &lt; waitfor) {</div><div class='add'>+        if (task) {</div><div class='add'>+            /* called within a synctask */</div><div class='add'>+            list_add_tail(&amp;task-&gt;waitq, &amp;barrier-&gt;waitq);</div><div class='add'>+            pthread_mutex_unlock(&amp;barrier-&gt;guard);</div><div class='add'>+            synctask_yield(task);</div><div class='add'>+            pthread_mutex_lock(&amp;barrier-&gt;guard);</div><div class='add'>+        } else {</div><div class='add'>+            /* called by a non-synctask */</div><div class='add'>+            pthread_cond_wait(&amp;barrier-&gt;cond, &amp;barrier-&gt;guard);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	barrier-&gt;count = 0;</div><div class='add'>+    barrier-&gt;count = 0;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncbarrier_wait (struct syncbarrier *barrier, int waitfor)</div><div class='add'>+syncbarrier_wait(struct syncbarrier *barrier, int waitfor)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;barrier-&gt;guard);</div><div class='del'>-	{</div><div class='del'>-		ret = __syncbarrier_wait (barrier, waitfor);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;barrier-&gt;guard);</div><div class='add'>+    pthread_mutex_lock(&amp;barrier-&gt;guard);</div><div class='add'>+    {</div><div class='add'>+        ret = __syncbarrier_wait(barrier, waitfor);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;barrier-&gt;guard);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__syncbarrier_wake (struct syncbarrier *barrier)</div><div class='add'>+__syncbarrier_wake(struct syncbarrier *barrier)</div><div class='ctx'> {</div><div class='del'>-	struct synctask *task = NULL;</div><div class='add'>+    struct synctask *task = NULL;</div><div class='ctx'> </div><div class='del'>-	if (!barrier) {</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    if (!barrier) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	barrier-&gt;count++;</div><div class='del'>-        if (barrier-&gt;waitfor &amp;&amp; (barrier-&gt;count &lt; barrier-&gt;waitfor))</div><div class='del'>-                return 0;</div><div class='add'>+    barrier-&gt;count++;</div><div class='add'>+    if (barrier-&gt;waitfor &amp;&amp; (barrier-&gt;count &lt; barrier-&gt;waitfor))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	pthread_cond_signal (&amp;barrier-&gt;cond);</div><div class='del'>-	if (!list_empty (&amp;barrier-&gt;waitq)) {</div><div class='del'>-		task = list_entry (barrier-&gt;waitq.next, struct synctask, waitq);</div><div class='del'>-                list_del_init (&amp;task-&gt;waitq);</div><div class='del'>-		synctask_wake (task);</div><div class='del'>-	}</div><div class='del'>-        barrier-&gt;waitfor = 0;</div><div class='add'>+    pthread_cond_signal(&amp;barrier-&gt;cond);</div><div class='add'>+    if (!list_empty(&amp;barrier-&gt;waitq)) {</div><div class='add'>+        task = list_entry(barrier-&gt;waitq.next, struct synctask, waitq);</div><div class='add'>+        list_del_init(&amp;task-&gt;waitq);</div><div class='add'>+        synctask_wake(task);</div><div class='add'>+    }</div><div class='add'>+    barrier-&gt;waitfor = 0;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncbarrier_wake (struct syncbarrier *barrier)</div><div class='add'>+syncbarrier_wake(struct syncbarrier *barrier)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;barrier-&gt;guard);</div><div class='del'>-	{</div><div class='del'>-		ret = __syncbarrier_wake (barrier);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;barrier-&gt;guard);</div><div class='add'>+    pthread_mutex_lock(&amp;barrier-&gt;guard);</div><div class='add'>+    {</div><div class='add'>+        ret = __syncbarrier_wake(barrier);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;barrier-&gt;guard);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOPS */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *iatt, dict_t *xdata, struct iatt *parent)</div><div class='add'>+syncop_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, inode_t *inode, struct iatt *iatt,</div><div class='add'>+                  dict_t *xdata, struct iatt *parent)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                args-&gt;iatt1  = *iatt;</div><div class='del'>-                args-&gt;iatt2  = *parent;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        args-&gt;iatt1 = *iatt;</div><div class='add'>+        args-&gt;iatt2 = *parent;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_lookup (xlator_t *subvol, loc_t *loc, struct iatt *iatt,</div><div class='del'>-               struct iatt *parent, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_lookup(xlator_t *subvol, loc_t *loc, struct iatt *iatt,</div><div class='add'>+              struct iatt *parent, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_lookup_cbk, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                loc, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_lookup_cbk, subvol-&gt;fops-&gt;lookup, loc,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (iatt)</div><div class='del'>-                *iatt = args.iatt1;</div><div class='del'>-        if (parent)</div><div class='del'>-                *parent = args.iatt2;</div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='add'>+    if (parent)</div><div class='add'>+        *parent = args.iatt2;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_readdirp_cbk (call_frame_t *frame,</div><div class='del'>-                     void *cookie,</div><div class='del'>-                     xlator_t *this,</div><div class='del'>-                     int32_t op_ret,</div><div class='del'>-                     int32_t op_errno,</div><div class='del'>-                     gf_dirent_t *entries, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='del'>-        gf_dirent_t *entry = NULL;</div><div class='del'>-        gf_dirent_t  *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        int count = 0;</div><div class='del'>-</div><div class='del'>-        args = cookie;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;args-&gt;entries.list);</div><div class='del'>-</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                        tmp = entry_copy (entry);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                args-&gt;op_ret = -1;</div><div class='del'>-                                args-&gt;op_errno = ENOMEM;</div><div class='del'>-                                gf_dirent_free (&amp;(args-&gt;entries));</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0, "adding entry=%s, "</div><div class='del'>-                                      "count=%d", tmp-&gt;d_name, count);</div><div class='del'>-                        list_add_tail (&amp;tmp-&gt;list, &amp;(args-&gt;entries.list));</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+syncop_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                    dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    args = cookie;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;args-&gt;entries.list);</div><div class='add'>+</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            tmp = entry_copy(entry);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                args-&gt;op_ret = -1;</div><div class='add'>+                args-&gt;op_errno = ENOMEM;</div><div class='add'>+                gf_dirent_free(&amp;(args-&gt;entries));</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                         "adding entry=%s, "</div><div class='add'>+                         "count=%d",</div><div class='add'>+                         tmp-&gt;d_name, count);</div><div class='add'>+            list_add_tail(&amp;tmp-&gt;list, &amp;(args-&gt;entries.list));</div><div class='add'>+            count++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_readdirp (xlator_t *subvol,</div><div class='del'>-                 fd_t *fd,</div><div class='del'>-                 size_t size,</div><div class='del'>-                 off_t off,</div><div class='del'>-                 gf_dirent_t *entries,</div><div class='del'>-                 dict_t *xdata_in,</div><div class='del'>-                 dict_t **xdata_out)</div><div class='add'>+syncop_readdirp(xlator_t *subvol, fd_t *fd, size_t size, off_t off,</div><div class='add'>+                gf_dirent_t *entries, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_readdirp_cbk, subvol-&gt;fops-&gt;readdirp,</div><div class='del'>-                fd, size, off, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (entries)</div><div class='del'>-                list_splice_init (&amp;args.entries.list, &amp;entries-&gt;list);</div><div class='del'>-        else</div><div class='del'>-                gf_dirent_free (&amp;args.entries);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_readdirp_cbk, subvol-&gt;fops-&gt;readdirp, fd,</div><div class='add'>+           size, off, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (entries)</div><div class='add'>+        list_splice_init(&amp;args.entries.list, &amp;entries-&gt;list);</div><div class='add'>+    else</div><div class='add'>+        gf_dirent_free(&amp;args.entries);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_readdir_cbk (call_frame_t *frame,</div><div class='del'>-                    void *cookie,</div><div class='del'>-                    xlator_t *this,</div><div class='del'>-                    int32_t op_ret,</div><div class='del'>-                    int32_t op_errno,</div><div class='del'>-                    gf_dirent_t *entries, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='del'>-        gf_dirent_t *entry = NULL;</div><div class='del'>-        gf_dirent_t  *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        int count = 0;</div><div class='del'>-</div><div class='del'>-        args = cookie;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;args-&gt;entries.list);</div><div class='del'>-</div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                        tmp = entry_copy (entry);</div><div class='del'>-                        if (!tmp) {</div><div class='del'>-                                args-&gt;op_ret = -1;</div><div class='del'>-                                args-&gt;op_errno = ENOMEM;</div><div class='del'>-                                gf_dirent_free (&amp;(args-&gt;entries));</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0, "adding "</div><div class='del'>-                                      "entry=%s, count=%d", tmp-&gt;d_name,</div><div class='del'>-                                      count);</div><div class='del'>-                        list_add_tail (&amp;tmp-&gt;list, &amp;(args-&gt;entries.list));</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+syncop_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                   dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    args = cookie;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;args-&gt;entries.list);</div><div class='ctx'> </div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            tmp = entry_copy(entry);</div><div class='add'>+            if (!tmp) {</div><div class='add'>+                args-&gt;op_ret = -1;</div><div class='add'>+                args-&gt;op_errno = ENOMEM;</div><div class='add'>+                gf_dirent_free(&amp;(args-&gt;entries));</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                         "adding "</div><div class='add'>+                         "entry=%s, count=%d",</div><div class='add'>+                         tmp-&gt;d_name, count);</div><div class='add'>+            list_add_tail(&amp;tmp-&gt;list, &amp;(args-&gt;entries.list));</div><div class='add'>+            count++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __wake(args);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_readdir (xlator_t *subvol,</div><div class='del'>-                fd_t *fd,</div><div class='del'>-                size_t size,</div><div class='del'>-                off_t off,</div><div class='del'>-                gf_dirent_t *entries,</div><div class='del'>-		dict_t *xdata_in,</div><div class='del'>-                dict_t **xdata_out)</div><div class='add'>+syncop_readdir(xlator_t *subvol, fd_t *fd, size_t size, off_t off,</div><div class='add'>+               gf_dirent_t *entries, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_readdir_cbk, subvol-&gt;fops-&gt;readdir,</div><div class='del'>-                fd, size, off, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_readdir_cbk, subvol-&gt;fops-&gt;readdir, fd, size,</div><div class='add'>+           off, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (entries)</div><div class='del'>-                list_splice_init (&amp;args.entries.list, &amp;entries-&gt;list);</div><div class='del'>-        else</div><div class='del'>-                gf_dirent_free (&amp;args.entries);</div><div class='add'>+    if (entries)</div><div class='add'>+        list_splice_init(&amp;args.entries.list, &amp;entries-&gt;list);</div><div class='add'>+    else</div><div class='add'>+        gf_dirent_free(&amp;args.entries);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='del'>-</div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_opendir_cbk (call_frame_t *frame,</div><div class='del'>-                    void *cookie,</div><div class='del'>-                    xlator_t *this,</div><div class='del'>-                    int32_t op_ret,</div><div class='del'>-                    int32_t op_errno,</div><div class='del'>-                    fd_t *fd, dict_t *xdata)</div><div class='add'>+syncop_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_opendir (xlator_t *subvol,</div><div class='del'>-                loc_t *loc,</div><div class='del'>-                fd_t *fd,</div><div class='del'>-		dict_t *xdata_in,</div><div class='del'>-                dict_t **xdata_out)</div><div class='add'>+syncop_opendir(xlator_t *subvol, loc_t *loc, fd_t *fd, dict_t *xdata_in,</div><div class='add'>+               dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_opendir_cbk, subvol-&gt;fops-&gt;opendir,</div><div class='del'>-                loc, fd, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_opendir_cbk, subvol-&gt;fops-&gt;opendir, loc, fd,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='del'>-</div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fsyncdir_cbk (call_frame_t *frame, void* cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+syncop_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fsyncdir (xlator_t *subvol, fd_t *fd, int datasync, dict_t *xdata_in,</div><div class='del'>-                 dict_t **xdata_out)</div><div class='add'>+syncop_fsyncdir(xlator_t *subvol, fd_t *fd, int datasync, dict_t *xdata_in,</div><div class='add'>+                dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fsyncdir_cbk, subvol-&gt;fops-&gt;fsyncdir,</div><div class='del'>-                fd, datasync, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fsyncdir_cbk, subvol-&gt;fops-&gt;fsyncdir, fd,</div><div class='add'>+           datasync, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+syncop_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_removexattr (xlator_t *subvol, loc_t *loc, const char *name,</div><div class='del'>-                    dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_removexattr(xlator_t *subvol, loc_t *loc, const char *name,</div><div class='add'>+                   dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_removexattr_cbk,</div><div class='del'>-                subvol-&gt;fops-&gt;removexattr, loc, name, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_removexattr_cbk, subvol-&gt;fops-&gt;removexattr,</div><div class='add'>+           loc, name, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+syncop_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fremovexattr (xlator_t *subvol, fd_t *fd, const char *name,</div><div class='del'>-                     dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_fremovexattr(xlator_t *subvol, fd_t *fd, const char *name,</div><div class='add'>+                    dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fremovexattr_cbk,</div><div class='del'>-                subvol-&gt;fops-&gt;fremovexattr, fd, name, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fremovexattr_cbk, subvol-&gt;fops-&gt;fremovexattr,</div><div class='add'>+           fd, name, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+syncop_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_setxattr (xlator_t *subvol, loc_t *loc, dict_t *dict, int32_t flags,</div><div class='del'>-                 dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_setxattr(xlator_t *subvol, loc_t *loc, dict_t *dict, int32_t flags,</div><div class='add'>+                dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_setxattr_cbk, subvol-&gt;fops-&gt;setxattr,</div><div class='del'>-                loc, dict, flags, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_setxattr_cbk, subvol-&gt;fops-&gt;setxattr, loc,</div><div class='add'>+           dict, flags, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+syncop_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_fsetxattr (xlator_t *subvol, fd_t *fd, dict_t *dict, int32_t flags,</div><div class='del'>-		  dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_fsetxattr(xlator_t *subvol, fd_t *fd, dict_t *dict, int32_t flags,</div><div class='add'>+                 dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fsetxattr_cbk, subvol-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                fd, dict, flags, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fsetxattr_cbk, subvol-&gt;fops-&gt;fsetxattr, fd,</div><div class='add'>+           dict, flags, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+syncop_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-                args-&gt;xattr = dict_ref (dict);</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        args-&gt;xattr = dict_ref(dict);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_listxattr (xlator_t *subvol, loc_t *loc, dict_t **dict, dict_t *xdata_in,</div><div class='del'>-                  dict_t **xdata_out)</div><div class='add'>+syncop_listxattr(xlator_t *subvol, loc_t *loc, dict_t **dict, dict_t *xdata_in,</div><div class='add'>+                 dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_getxattr_cbk, subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                loc, NULL, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_getxattr_cbk, subvol-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+           NULL, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                *dict = args.xattr;</div><div class='del'>-        else if (args.xattr)</div><div class='del'>-                dict_unref (args.xattr);</div><div class='add'>+    if (dict)</div><div class='add'>+        *dict = args.xattr;</div><div class='add'>+    else if (args.xattr)</div><div class='add'>+        dict_unref(args.xattr);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_getxattr (xlator_t *subvol, loc_t *loc, dict_t **dict, const char *key,</div><div class='del'>-                 dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_getxattr(xlator_t *subvol, loc_t *loc, dict_t **dict, const char *key,</div><div class='add'>+                dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_getxattr_cbk, subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                loc, key, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_getxattr_cbk, subvol-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+           key, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                *dict = args.xattr;</div><div class='del'>-        else if (args.xattr)</div><div class='del'>-                dict_unref (args.xattr);</div><div class='add'>+    if (dict)</div><div class='add'>+        *dict = args.xattr;</div><div class='add'>+    else if (args.xattr)</div><div class='add'>+        dict_unref(args.xattr);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fgetxattr (xlator_t *subvol, fd_t *fd, dict_t **dict, const char *key,</div><div class='del'>-                  dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_fgetxattr(xlator_t *subvol, fd_t *fd, dict_t **dict, const char *key,</div><div class='add'>+                 dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_getxattr_cbk, subvol-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                fd, key, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_getxattr_cbk, subvol-&gt;fops-&gt;fgetxattr, fd,</div><div class='add'>+           key, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                *dict = args.xattr;</div><div class='del'>-        else if (args.xattr)</div><div class='del'>-                dict_unref (args.xattr);</div><div class='add'>+    if (dict)</div><div class='add'>+        *dict = args.xattr;</div><div class='add'>+    else if (args.xattr)</div><div class='add'>+        dict_unref(args.xattr);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   struct statvfs *buf, dict_t *xdata)</div><div class='add'>+syncop_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                args-&gt;statvfs_buf  = *buf;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        args-&gt;statvfs_buf = *buf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_statfs (xlator_t *subvol, loc_t *loc, struct statvfs *buf,</div><div class='del'>-               dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_statfs(xlator_t *subvol, loc_t *loc, struct statvfs *buf,</div><div class='add'>+              dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_statfs_cbk, subvol-&gt;fops-&gt;statfs,</div><div class='del'>-                loc, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_statfs_cbk, subvol-&gt;fops-&gt;statfs, loc,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (buf)</div><div class='del'>-                *buf = args.statvfs_buf;</div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (buf)</div><div class='add'>+        *buf = args.statvfs_buf;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno,</div><div class='del'>-                    struct iatt *preop, struct iatt *postop, dict_t *xdata)</div><div class='add'>+syncop_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, struct iatt *preop,</div><div class='add'>+                   struct iatt *postop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                args-&gt;iatt1  = *preop;</div><div class='del'>-                args-&gt;iatt2  = *postop;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        args-&gt;iatt1 = *preop;</div><div class='add'>+        args-&gt;iatt2 = *postop;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_setattr (xlator_t *subvol, loc_t *loc, struct iatt *iatt, int valid,</div><div class='del'>-                struct iatt *preop, struct iatt *postop, dict_t *xdata_in,</div><div class='del'>-                dict_t **xdata_out)</div><div class='add'>+syncop_setattr(xlator_t *subvol, loc_t *loc, struct iatt *iatt, int valid,</div><div class='add'>+               struct iatt *preop, struct iatt *postop, dict_t *xdata_in,</div><div class='add'>+               dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_setattr_cbk, subvol-&gt;fops-&gt;setattr,</div><div class='del'>-                loc, iatt, valid, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_setattr_cbk, subvol-&gt;fops-&gt;setattr, loc,</div><div class='add'>+           iatt, valid, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (preop)</div><div class='del'>-                *preop = args.iatt1;</div><div class='del'>-        if (postop)</div><div class='del'>-                *postop = args.iatt2;</div><div class='add'>+    if (preop)</div><div class='add'>+        *preop = args.iatt1;</div><div class='add'>+    if (postop)</div><div class='add'>+        *postop = args.iatt2;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_fsetattr (xlator_t *subvol, fd_t *fd, struct iatt *iatt, int valid,</div><div class='del'>-                 struct iatt *preop, struct iatt *postop, dict_t *xdata_in,</div><div class='del'>-                 dict_t **xdata_out)</div><div class='add'>+syncop_fsetattr(xlator_t *subvol, fd_t *fd, struct iatt *iatt, int valid,</div><div class='add'>+                struct iatt *preop, struct iatt *postop, dict_t *xdata_in,</div><div class='add'>+                dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_setattr_cbk, subvol-&gt;fops-&gt;fsetattr,</div><div class='del'>-                fd, iatt, valid, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_setattr_cbk, subvol-&gt;fops-&gt;fsetattr, fd,</div><div class='add'>+           iatt, valid, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (preop)</div><div class='del'>-                *preop = args.iatt1;</div><div class='del'>-        if (postop)</div><div class='del'>-                *postop = args.iatt2;</div><div class='add'>+    if (preop)</div><div class='add'>+        *preop = args.iatt1;</div><div class='add'>+    if (postop)</div><div class='add'>+        *postop = args.iatt2;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-syncop_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+syncop_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_open (xlator_t *subvol, loc_t *loc, int32_t flags, fd_t *fd,</div><div class='del'>-	     dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_open(xlator_t *subvol, loc_t *loc, int32_t flags, fd_t *fd,</div><div class='add'>+            dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_open_cbk, subvol-&gt;fops-&gt;open,</div><div class='del'>-                loc, flags, fd, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_open_cbk, subvol-&gt;fops-&gt;open, loc, flags, fd,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-syncop_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-                  int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+syncop_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                 int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;args-&gt;entries.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;args-&gt;entries.list);</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;op_ret &gt;= 0) {</div><div class='del'>-                if (iobref)</div><div class='del'>-                        args-&gt;iobref = iobref_ref (iobref);</div><div class='del'>-                args-&gt;vector = iov_dup (vector, count);</div><div class='del'>-                args-&gt;count  = count;</div><div class='del'>-                args-&gt;iatt1 = *stbuf;</div><div class='del'>-        }</div><div class='add'>+    if (args-&gt;op_ret &gt;= 0) {</div><div class='add'>+        if (iobref)</div><div class='add'>+            args-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+        args-&gt;vector = iov_dup(vector, count);</div><div class='add'>+        args-&gt;count = count;</div><div class='add'>+        args-&gt;iatt1 = *stbuf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_readv (xlator_t *subvol, fd_t *fd, size_t size, off_t off,</div><div class='del'>-              uint32_t flags, struct iovec **vector, int *count,</div><div class='del'>-              struct iobref **iobref, struct iatt *iatt,</div><div class='del'>-              dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_readv(xlator_t *subvol, fd_t *fd, size_t size, off_t off, uint32_t flags,</div><div class='add'>+             struct iovec **vector, int *count, struct iobref **iobref,</div><div class='add'>+             struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_readv_cbk, subvol-&gt;fops-&gt;readv,</div><div class='del'>-                fd, size, off, flags, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_readv_cbk, subvol-&gt;fops-&gt;readv, fd, size,</div><div class='add'>+           off, flags, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (iatt)</div><div class='del'>-                *iatt = args.iatt1;</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (vector)</div><div class='del'>-                *vector = args.vector;</div><div class='del'>-        else</div><div class='del'>-                GF_FREE (args.vector);</div><div class='add'>+    if (vector)</div><div class='add'>+        *vector = args.vector;</div><div class='add'>+    else</div><div class='add'>+        GF_FREE(args.vector);</div><div class='ctx'> </div><div class='del'>-        if (count)</div><div class='del'>-                *count = args.count;</div><div class='add'>+    if (count)</div><div class='add'>+        *count = args.count;</div><div class='ctx'> </div><div class='del'>-        /* Do we need a 'ref' here? */</div><div class='del'>-        if (iobref)</div><div class='del'>-                *iobref = args.iobref;</div><div class='del'>-        else if (args.iobref)</div><div class='del'>-                iobref_unref (args.iobref);</div><div class='add'>+    /* Do we need a 'ref' here? */</div><div class='add'>+    if (iobref)</div><div class='add'>+        *iobref = args.iobref;</div><div class='add'>+    else if (args.iobref)</div><div class='add'>+        iobref_unref(args.iobref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+syncop_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                args-&gt;iatt1 = *prebuf;</div><div class='del'>-                args-&gt;iatt2 = *postbuf;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        args-&gt;iatt1 = *prebuf;</div><div class='add'>+        args-&gt;iatt2 = *postbuf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_writev (xlator_t *subvol, fd_t *fd, const struct iovec *vector,</div><div class='del'>-               int32_t count, off_t offset, struct iobref *iobref,</div><div class='del'>-               uint32_t flags, struct iatt *preiatt, struct iatt *postiatt,</div><div class='del'>-               dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_writev(xlator_t *subvol, fd_t *fd, const struct iovec *vector,</div><div class='add'>+              int32_t count, off_t offset, struct iobref *iobref,</div><div class='add'>+              uint32_t flags, struct iatt *preiatt, struct iatt *postiatt,</div><div class='add'>+              dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_writev_cbk, subvol-&gt;fops-&gt;writev,</div><div class='del'>-                fd, (struct iovec *) vector, count, offset, flags, iobref,</div><div class='del'>-                xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_writev_cbk, subvol-&gt;fops-&gt;writev, fd,</div><div class='add'>+           (struct iovec *)vector, count, offset, flags, iobref, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (preiatt)</div><div class='del'>-                *preiatt = args.iatt1;</div><div class='del'>-        if (postiatt)</div><div class='del'>-                *postiatt = args.iatt2;</div><div class='add'>+    if (preiatt)</div><div class='add'>+        *preiatt = args.iatt1;</div><div class='add'>+    if (postiatt)</div><div class='add'>+        *postiatt = args.iatt2;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int syncop_write (xlator_t *subvol, fd_t *fd, const char *buf, int size,</div><div class='del'>-                  off_t offset, struct iobref *iobref, uint32_t flags,</div><div class='del'>-                  dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+int</div><div class='add'>+syncop_write(xlator_t *subvol, fd_t *fd, const char *buf, int size,</div><div class='add'>+             off_t offset, struct iobref *iobref, uint32_t flags,</div><div class='add'>+             dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0,};</div><div class='del'>-        struct iovec    vec  = {0,};</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec vec = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        vec.iov_len = size;</div><div class='del'>-        vec.iov_base = (void *)buf;</div><div class='add'>+    vec.iov_len = size;</div><div class='add'>+    vec.iov_base = (void *)buf;</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_writev_cbk, subvol-&gt;fops-&gt;writev,</div><div class='del'>-                fd, &amp;vec, 1, offset, flags, iobref, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_writev_cbk, subvol-&gt;fops-&gt;writev, fd, &amp;vec,</div><div class='add'>+           1, offset, flags, iobref, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_close (fd_t *fd)</div><div class='add'>+syncop_close(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (buf)</div><div class='del'>-		args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_create (xlator_t *subvol, loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-               fd_t *fd, struct iatt *iatt,</div><div class='del'>-               dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_create(xlator_t *subvol, loc_t *loc, int32_t flags, mode_t mode,</div><div class='add'>+              fd_t *fd, struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_create_cbk, subvol-&gt;fops-&gt;create,</div><div class='del'>-                loc, flags, mode, 0, fd, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_create_cbk, subvol-&gt;fops-&gt;create, loc, flags,</div><div class='add'>+           mode, 0, fd, xdata_in);</div><div class='ctx'> </div><div class='del'>-	if (iatt)</div><div class='del'>-		*iatt = args.iatt1;</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='del'>-</div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_put_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_put_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+               struct iatt *buf, struct iatt *preparent,</div><div class='add'>+               struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_put (xlator_t *subvol, loc_t *loc, mode_t mode, mode_t umask,</div><div class='del'>-            uint32_t flags, struct iovec *vector, int32_t count,</div><div class='del'>-            off_t offset, struct iobref *iobref, dict_t *xattr,</div><div class='del'>-            struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_put(xlator_t *subvol, loc_t *loc, mode_t mode, mode_t umask,</div><div class='add'>+           uint32_t flags, struct iovec *vector, int32_t count, off_t offset,</div><div class='add'>+           struct iobref *iobref, dict_t *xattr, struct iatt *iatt,</div><div class='add'>+           dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_put_cbk, subvol-&gt;fops-&gt;put,</div><div class='del'>-                loc, mode, umask, flags, (struct iovec *) vector, count,</div><div class='del'>-                offset, iobref, xattr, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_put_cbk, subvol-&gt;fops-&gt;put, loc, mode, umask,</div><div class='add'>+           flags, (struct iovec *)vector, count, offset, iobref, xattr,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (iatt)</div><div class='del'>-                *iatt = args.iatt1;</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='del'>-</div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_unlink (xlator_t *subvol, loc_t *loc, dict_t *xdata_in,</div><div class='del'>-               dict_t **xdata_out)</div><div class='add'>+syncop_unlink(xlator_t *subvol, loc_t *loc, dict_t *xdata_in,</div><div class='add'>+              dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_unlink_cbk, subvol-&gt;fops-&gt;unlink, loc,</div><div class='del'>-                0, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_unlink_cbk, subvol-&gt;fops-&gt;unlink, loc, 0,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_rmdir (xlator_t *subvol, loc_t *loc, int flags, dict_t *xdata_in,</div><div class='del'>-              dict_t **xdata_out)</div><div class='add'>+syncop_rmdir(xlator_t *subvol, loc_t *loc, int flags, dict_t *xdata_in,</div><div class='add'>+             dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_rmdir_cbk, subvol-&gt;fops-&gt;rmdir, loc,</div><div class='del'>-                flags, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_rmdir_cbk, subvol-&gt;fops-&gt;rmdir, loc, flags,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                 struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (buf)</div><div class='del'>-                args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_link (xlator_t *subvol, loc_t *oldloc, loc_t *newloc, struct iatt *iatt,</div><div class='del'>-             dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_link(xlator_t *subvol, loc_t *oldloc, loc_t *newloc, struct iatt *iatt,</div><div class='add'>+            dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_link_cbk, subvol-&gt;fops-&gt;link,</div><div class='del'>-                oldloc, newloc, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_link_cbk, subvol-&gt;fops-&gt;link, oldloc, newloc,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (iatt)</div><div class='del'>-                *iatt = args.iatt1;</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                   struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                   struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+syncop_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                  struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                  struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_rename (xlator_t *subvol, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-               dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_rename(xlator_t *subvol, loc_t *oldloc, loc_t *newloc, dict_t *xdata_in,</div><div class='add'>+              dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_rename_cbk, subvol-&gt;fops-&gt;rename,</div><div class='del'>-                oldloc, newloc, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_rename_cbk, subvol-&gt;fops-&gt;rename, oldloc,</div><div class='add'>+           newloc, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+syncop_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                args-&gt;iatt1 = *prebuf;</div><div class='del'>-                args-&gt;iatt2 = *postbuf;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        args-&gt;iatt1 = *prebuf;</div><div class='add'>+        args-&gt;iatt2 = *postbuf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_ftruncate (xlator_t *subvol, fd_t *fd, off_t offset,</div><div class='del'>-                  struct iatt *preiatt, struct iatt *postiatt,</div><div class='del'>-                  dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_ftruncate(xlator_t *subvol, fd_t *fd, off_t offset, struct iatt *preiatt,</div><div class='add'>+                 struct iatt *postiatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_ftruncate_cbk, subvol-&gt;fops-&gt;ftruncate,</div><div class='del'>-                fd, offset, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_ftruncate_cbk, subvol-&gt;fops-&gt;ftruncate, fd,</div><div class='add'>+           offset, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (preiatt)</div><div class='del'>-                *preiatt = args.iatt1;</div><div class='del'>-        if (postiatt)</div><div class='del'>-                *postiatt = args.iatt2;</div><div class='add'>+    if (preiatt)</div><div class='add'>+        *preiatt = args.iatt1;</div><div class='add'>+    if (postiatt)</div><div class='add'>+        *postiatt = args.iatt2;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_truncate (xlator_t *subvol, loc_t *loc, off_t offset, dict_t *xdata_in,</div><div class='del'>-                 dict_t **xdata_out)</div><div class='add'>+syncop_truncate(xlator_t *subvol, loc_t *loc, off_t offset, dict_t *xdata_in,</div><div class='add'>+                dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_ftruncate_cbk, subvol-&gt;fops-&gt;truncate,</div><div class='del'>-                loc, offset, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_ftruncate_cbk, subvol-&gt;fops-&gt;truncate, loc,</div><div class='add'>+           offset, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+syncop_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                args-&gt;iatt1 = *prebuf;</div><div class='del'>-                args-&gt;iatt2 = *postbuf;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        args-&gt;iatt1 = *prebuf;</div><div class='add'>+        args-&gt;iatt2 = *postbuf;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fsync (xlator_t *subvol, fd_t *fd, int dataonly, struct iatt *preiatt,</div><div class='del'>-              struct iatt *postiatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_fsync(xlator_t *subvol, fd_t *fd, int dataonly, struct iatt *preiatt,</div><div class='add'>+             struct iatt *postiatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fsync_cbk, subvol-&gt;fops-&gt;fsync,</div><div class='del'>-                fd, dataonly, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (preiatt)</div><div class='del'>-                *preiatt = args.iatt1;</div><div class='del'>-        if (postiatt)</div><div class='del'>-                *postiatt = args.iatt2;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fsync_cbk, subvol-&gt;fops-&gt;fsync, fd, dataonly,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (preiatt)</div><div class='add'>+        *preiatt = args.iatt1;</div><div class='add'>+    if (postiatt)</div><div class='add'>+        *postiatt = args.iatt2;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+syncop_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_flush (xlator_t *subvol, fd_t *fd, dict_t *xdata_in,</div><div class='del'>-              dict_t **xdata_out)</div><div class='add'>+syncop_flush(xlator_t *subvol, fd_t *fd, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0};</div><div class='add'>+    struct syncargs args = {0};</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_flush_cbk, subvol-&gt;fops-&gt;flush,</div><div class='del'>-                fd, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_flush_cbk, subvol-&gt;fops-&gt;flush, fd,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='del'>-</div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+syncop_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                args-&gt;iatt1 = *stbuf;</div><div class='add'>+    if (op_ret == 0)</div><div class='add'>+        args-&gt;iatt1 = *stbuf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fstat (xlator_t *subvol, fd_t *fd, struct iatt *stbuf, dict_t *xdata_in,</div><div class='del'>-              dict_t **xdata_out)</div><div class='add'>+syncop_fstat(xlator_t *subvol, fd_t *fd, struct iatt *stbuf, dict_t *xdata_in,</div><div class='add'>+             dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fstat_cbk, subvol-&gt;fops-&gt;fstat,</div><div class='del'>-                fd, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (stbuf)</div><div class='del'>-                *stbuf = args.iatt1;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fstat_cbk, subvol-&gt;fops-&gt;fstat, fd,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (stbuf)</div><div class='add'>+        *stbuf = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_stat (xlator_t *subvol, loc_t *loc, struct iatt *stbuf, dict_t *xdata_in,</div><div class='del'>-             dict_t **xdata_out)</div><div class='add'>+syncop_stat(xlator_t *subvol, loc_t *loc, struct iatt *stbuf, dict_t *xdata_in,</div><div class='add'>+            dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fstat_cbk, subvol-&gt;fops-&gt;stat,</div><div class='del'>-                loc, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (stbuf)</div><div class='del'>-                *stbuf = args.iatt1;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fstat_cbk, subvol-&gt;fops-&gt;stat, loc,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (stbuf)</div><div class='add'>+        *stbuf = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (buf)</div><div class='del'>-		args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_symlink (xlator_t *subvol, loc_t *loc, const char *newpath,</div><div class='del'>-                struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_symlink(xlator_t *subvol, loc_t *loc, const char *newpath,</div><div class='add'>+               struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_symlink_cbk, subvol-&gt;fops-&gt;symlink,</div><div class='del'>-                newpath, loc, 0, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	if (iatt)</div><div class='del'>-		*iatt = args.iatt1;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_symlink_cbk, subvol-&gt;fops-&gt;symlink, newpath,</div><div class='add'>+           loc, 0, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, const char *path,</div><div class='del'>-                     struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+syncop_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, const char *path,</div><div class='add'>+                    struct iatt *stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if ((op_ret != -1) &amp;&amp; path)</div><div class='del'>-                args-&gt;buffer = gf_strdup (path);</div><div class='add'>+    if ((op_ret != -1) &amp;&amp; path)</div><div class='add'>+        args-&gt;buffer = gf_strdup(path);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_readlink (xlator_t *subvol, loc_t *loc, char **buffer, size_t size,</div><div class='del'>-		 dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_readlink(xlator_t *subvol, loc_t *loc, char **buffer, size_t size,</div><div class='add'>+                dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_readlink_cbk, subvol-&gt;fops-&gt;readlink,</div><div class='del'>-                loc, size, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_readlink_cbk, subvol-&gt;fops-&gt;readlink, loc,</div><div class='add'>+           size, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (buffer)</div><div class='del'>-                *buffer = args.buffer;</div><div class='del'>-        else GF_FREE (args.buffer);</div><div class='add'>+    if (buffer)</div><div class='add'>+        *buffer = args.buffer;</div><div class='add'>+    else</div><div class='add'>+        GF_FREE(args.buffer);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (buf)</div><div class='del'>-		args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_mknod (xlator_t *subvol, loc_t *loc, mode_t mode, dev_t rdev,</div><div class='del'>-              struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_mknod(xlator_t *subvol, loc_t *loc, mode_t mode, dev_t rdev,</div><div class='add'>+             struct iatt *iatt, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_mknod_cbk, subvol-&gt;fops-&gt;mknod,</div><div class='del'>-                loc, mode, rdev, 0, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	if (iatt)</div><div class='del'>-		*iatt = args.iatt1;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_mknod_cbk, subvol-&gt;fops-&gt;mknod, loc, mode,</div><div class='add'>+           rdev, 0, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+syncop_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (buf)</div><div class='del'>-		args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_mkdir (xlator_t *subvol, loc_t *loc, mode_t mode, struct iatt *iatt,</div><div class='del'>-              dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_mkdir(xlator_t *subvol, loc_t *loc, mode_t mode, struct iatt *iatt,</div><div class='add'>+             dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_mkdir_cbk, subvol-&gt;fops-&gt;mkdir,</div><div class='del'>-                loc, mode, 0, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	if (iatt)</div><div class='del'>-		*iatt = args.iatt1;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_mkdir_cbk, subvol-&gt;fops-&gt;mkdir, loc, mode, 0,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (iatt)</div><div class='add'>+        *iatt = args.iatt1;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+syncop_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* posix_acl xlator will respond in different ways for access calls from</div><div class='hunk'>@@ -2782,659 +2766,674 @@ syncop_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>    got is the mode of the access.</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-syncop_access (xlator_t *subvol, loc_t *loc, int32_t mask, dict_t *xdata_in,</div><div class='del'>-               dict_t **xdata_out)</div><div class='add'>+syncop_access(xlator_t *subvol, loc_t *loc, int32_t mask, dict_t *xdata_in,</div><div class='add'>+              dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_access_cbk, subvol-&gt;fops-&gt;access,</div><div class='del'>-                loc, mask, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_access_cbk, subvol-&gt;fops-&gt;access, loc, mask,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_fallocate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+syncop_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> syncop_fallocate(xlator_t *subvol, fd_t *fd, int32_t keep_size, off_t offset,</div><div class='del'>-		 size_t len, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+                 size_t len, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_fallocate_cbk, subvol-&gt;fops-&gt;fallocate,</div><div class='del'>-                fd, keep_size, offset, len, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_fallocate_cbk, subvol-&gt;fops-&gt;fallocate, fd,</div><div class='add'>+           keep_size, offset, len, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_discard_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+syncop_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> syncop_discard(xlator_t *subvol, fd_t *fd, off_t offset, size_t len,</div><div class='del'>-	       dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+               dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_discard_cbk, subvol-&gt;fops-&gt;discard,</div><div class='del'>-                fd, offset, len, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_discard_cbk, subvol-&gt;fops-&gt;discard, fd,</div><div class='add'>+           offset, len, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_zerofill_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+syncop_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                     int op_ret, int op_errno, struct iatt *prebuf,</div><div class='ctx'>                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> syncop_zerofill(xlator_t *subvol, fd_t *fd, off_t offset, off_t len,</div><div class='del'>-		dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+                dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_zerofill_cbk, subvol-&gt;fops-&gt;zerofill,</div><div class='del'>-                fd, offset, len, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_zerofill_cbk, subvol-&gt;fops-&gt;zerofill, fd,</div><div class='add'>+           offset, len, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-syncop_ipc_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+syncop_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_ipc (xlator_t *subvol, int32_t op, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_ipc(xlator_t *subvol, int32_t op, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_ipc_cbk, subvol-&gt;fops-&gt;ipc,</div><div class='del'>-                op, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_ipc_cbk, subvol-&gt;fops-&gt;ipc, op, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (args.xdata) {</div><div class='del'>-                if (xdata_out) {</div><div class='del'>-                        /*</div><div class='del'>-                         * We're passing this reference to the caller, along</div><div class='del'>-                         * with the pointer itself.  That means they're</div><div class='del'>-                         * responsible for calling dict_unref at some point.</div><div class='del'>-                         */</div><div class='del'>-                        *xdata_out = args.xdata;</div><div class='del'>-                } else {</div><div class='del'>-                        dict_unref(args.xdata);</div><div class='del'>-                }</div><div class='add'>+    if (args.xdata) {</div><div class='add'>+        if (xdata_out) {</div><div class='add'>+            /*</div><div class='add'>+             * We're passing this reference to the caller, along</div><div class='add'>+             * with the pointer itself.  That means they're</div><div class='add'>+             * responsible for calling dict_unref at some point.</div><div class='add'>+             */</div><div class='add'>+            *xdata_out = args.xdata;</div><div class='add'>+        } else {</div><div class='add'>+            dict_unref(args.xdata);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_seek_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, off_t offset, dict_t *xdata)</div><div class='add'>+syncop_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        args-&gt;offset   = offset;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    args-&gt;offset = offset;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_seek (xlator_t *subvol, fd_t *fd, off_t offset, gf_seek_what_t what,</div><div class='del'>-             dict_t *xdata_in, off_t *off)</div><div class='add'>+syncop_seek(xlator_t *subvol, fd_t *fd, off_t offset, gf_seek_what_t what,</div><div class='add'>+            dict_t *xdata_in, off_t *off)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_seek_cbk, subvol-&gt;fops-&gt;seek, fd,</div><div class='del'>-                offset, what, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_seek_cbk, subvol-&gt;fops-&gt;seek, fd, offset,</div><div class='add'>+           what, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (*off)</div><div class='del'>-                *off = args.offset;</div><div class='add'>+    if (*off)</div><div class='add'>+        *off = args.offset;</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret == -1)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret == -1)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_lease_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='del'>-                  int op_errno, struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+syncop_lease_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='del'>-        if (lease)</div><div class='del'>-                args-&gt;lease = *lease;</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    if (lease)</div><div class='add'>+        args-&gt;lease = *lease;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_lease (xlator_t *subvol, loc_t *loc, struct gf_lease *lease,</div><div class='del'>-              dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_lease(xlator_t *subvol, loc_t *loc, struct gf_lease *lease,</div><div class='add'>+             dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_lease_cbk, subvol-&gt;fops-&gt;lease,</div><div class='del'>-                loc, lease, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_lease_cbk, subvol-&gt;fops-&gt;lease, loc, lease,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-        *lease = args.lease;</div><div class='add'>+    *lease = args.lease;</div><div class='ctx'> </div><div class='del'>-        if (args.xdata) {</div><div class='del'>-                if (xdata_out) {</div><div class='del'>-                        /*</div><div class='del'>-                         * We're passing this reference to the caller, along</div><div class='del'>-                         * with the pointer itself.  That means they're</div><div class='del'>-                         * responsible for calling dict_unref at some point.</div><div class='del'>-                         */</div><div class='del'>-                        *xdata_out = args.xdata;</div><div class='del'>-                } else {</div><div class='del'>-                        dict_unref(args.xdata);</div><div class='del'>-                }</div><div class='add'>+    if (args.xdata) {</div><div class='add'>+        if (xdata_out) {</div><div class='add'>+            /*</div><div class='add'>+             * We're passing this reference to the caller, along</div><div class='add'>+             * with the pointer itself.  That means they're</div><div class='add'>+             * responsible for calling dict_unref at some point.</div><div class='add'>+             */</div><div class='add'>+            *xdata_out = args.xdata;</div><div class='add'>+        } else {</div><div class='add'>+            dict_unref(args.xdata);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-	       int op_ret, int op_errno, struct gf_flock *flock,</div><div class='del'>-	       dict_t *xdata)</div><div class='add'>+syncop_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (flock)</div><div class='del'>-		args-&gt;flock = *flock;</div><div class='del'>-        __wake (args);</div><div class='add'>+    if (flock)</div><div class='add'>+        args-&gt;flock = *flock;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_lk (xlator_t *subvol, fd_t *fd, int cmd, struct gf_flock *flock,</div><div class='del'>-	   dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_lk(xlator_t *subvol, fd_t *fd, int cmd, struct gf_flock *flock,</div><div class='add'>+          dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_lk_cbk, subvol-&gt;fops-&gt;lk,</div><div class='del'>-                fd, cmd, flock, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_lk_cbk, subvol-&gt;fops-&gt;lk, fd, cmd, flock,</div><div class='add'>+           xdata_in);</div><div class='ctx'> </div><div class='del'>-	*flock = args.flock;</div><div class='add'>+    *flock = args.flock;</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+syncop_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_inodelk (xlator_t *subvol, const char *volume, loc_t *loc, int32_t cmd,</div><div class='del'>-                struct gf_flock *lock, dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_inodelk(xlator_t *subvol, const char *volume, loc_t *loc, int32_t cmd,</div><div class='add'>+               struct gf_flock *lock, dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_inodelk_cbk, subvol-&gt;fops-&gt;inodelk,</div><div class='del'>-                volume, loc, cmd, lock, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_inodelk_cbk, subvol-&gt;fops-&gt;inodelk, volume,</div><div class='add'>+           loc, cmd, lock, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+syncop_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='del'>-        args-&gt;op_ret = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    args = cookie;</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_entrylk (xlator_t *subvol, const char *volume, loc_t *loc,</div><div class='del'>-                const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='del'>-                dict_t *xdata_in, dict_t **xdata_out)</div><div class='add'>+syncop_entrylk(xlator_t *subvol, const char *volume, loc_t *loc,</div><div class='add'>+               const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+               dict_t *xdata_in, dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_entrylk_cbk, subvol-&gt;fops-&gt;entrylk,</div><div class='del'>-                volume, loc, basename, cmd, type, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_entrylk_cbk, subvol-&gt;fops-&gt;entrylk, volume,</div><div class='add'>+           loc, basename, cmd, type, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+syncop_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='del'>-</div><div class='del'>-        args = cookie;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='del'>-        if (dict)</div><div class='del'>-                args-&gt;dict_out = dict_ref (dict);</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    if (dict)</div><div class='add'>+        args-&gt;dict_out = dict_ref(dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_xattrop (xlator_t *subvol, loc_t *loc, gf_xattrop_flags_t flags,</div><div class='del'>-                dict_t *dict, dict_t *xdata_in, dict_t **dict_out,</div><div class='del'>-                dict_t **xdata_out)</div><div class='add'>+syncop_xattrop(xlator_t *subvol, loc_t *loc, gf_xattrop_flags_t flags,</div><div class='add'>+               dict_t *dict, dict_t *xdata_in, dict_t **dict_out,</div><div class='add'>+               dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_xattrop_cbk, subvol-&gt;fops-&gt;xattrop,</div><div class='del'>-                loc, flags, dict, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_xattrop_cbk, subvol-&gt;fops-&gt;xattrop, loc,</div><div class='add'>+           flags, dict, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (dict_out)</div><div class='del'>-                *dict_out = args.dict_out;</div><div class='del'>-        else if (args.dict_out)</div><div class='del'>-                dict_unref (args.dict_out);</div><div class='add'>+    if (dict_out)</div><div class='add'>+        *dict_out = args.dict_out;</div><div class='add'>+    else if (args.dict_out)</div><div class='add'>+        dict_unref(args.dict_out);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_fxattrop (xlator_t *subvol, fd_t *fd, gf_xattrop_flags_t flags,</div><div class='del'>-                 dict_t *dict, dict_t *xdata_in, dict_t **dict_out,</div><div class='del'>-                 dict_t **xdata_out)</div><div class='add'>+syncop_fxattrop(xlator_t *subvol, fd_t *fd, gf_xattrop_flags_t flags,</div><div class='add'>+                dict_t *dict, dict_t *xdata_in, dict_t **dict_out,</div><div class='add'>+                dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_xattrop_cbk, subvol-&gt;fops-&gt;fxattrop,</div><div class='del'>-                fd, flags, dict, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_xattrop_cbk, subvol-&gt;fops-&gt;fxattrop, fd,</div><div class='add'>+           flags, dict, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (dict_out)</div><div class='del'>-                *dict_out = args.dict_out;</div><div class='del'>-        else if (args.dict_out)</div><div class='del'>-                dict_unref (args.dict_out);</div><div class='add'>+    if (dict_out)</div><div class='add'>+        *dict_out = args.dict_out;</div><div class='add'>+    else if (args.dict_out)</div><div class='add'>+        dict_unref(args.dict_out);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-syncop_getactivelk_cbk (call_frame_t *frame,</div><div class='del'>-                         void *cookie,</div><div class='del'>-                         xlator_t *this,</div><div class='del'>-                         int32_t op_ret,</div><div class='del'>-                         int32_t op_errno,</div><div class='del'>-                         lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+syncop_getactivelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno,</div><div class='add'>+                       lock_migration_info_t *locklist, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='del'>-        lock_migration_info_t   *tmp = NULL;</div><div class='del'>-        lock_migration_info_t   *entry = NULL;</div><div class='del'>-</div><div class='del'>-        args = cookie;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='add'>+    lock_migration_info_t *tmp = NULL;</div><div class='add'>+    lock_migration_info_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;args-&gt;locklist.list);</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    INIT_LIST_HEAD(&amp;args-&gt;locklist.list);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt; 0) {</div><div class='del'>-                list_for_each_entry (tmp, &amp;locklist-&gt;list, list) {</div><div class='del'>-                        entry = GF_CALLOC (1, sizeof (lock_migration_info_t),</div><div class='del'>-                                          gf_common_mt_char);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-                        if (!entry) {</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "lock mem allocation  failed");</div><div class='del'>-                                gf_free_mig_locks (&amp;args-&gt;locklist);</div><div class='add'>+    if (op_ret &gt; 0) {</div><div class='add'>+        list_for_each_entry(tmp, &amp;locklist-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            entry = GF_CALLOC(1, sizeof(lock_migration_info_t),</div><div class='add'>+                              gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            if (!entry) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                       "lock mem allocation  failed");</div><div class='add'>+                gf_free_mig_locks(&amp;args-&gt;locklist);</div><div class='ctx'> </div><div class='del'>-                        INIT_LIST_HEAD (&amp;entry-&gt;list);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        entry-&gt;flock = tmp-&gt;flock;</div><div class='add'>+            INIT_LIST_HEAD(&amp;entry-&gt;list);</div><div class='ctx'> </div><div class='del'>-                        entry-&gt;lk_flags = tmp-&gt;lk_flags;</div><div class='add'>+            entry-&gt;flock = tmp-&gt;flock;</div><div class='ctx'> </div><div class='del'>-                        entry-&gt;client_uid = gf_strdup (tmp-&gt;client_uid);</div><div class='add'>+            entry-&gt;lk_flags = tmp-&gt;lk_flags;</div><div class='ctx'> </div><div class='del'>-                        list_add_tail (&amp;entry-&gt;list, &amp;args-&gt;locklist.list);</div><div class='add'>+            entry-&gt;client_uid = gf_strdup(tmp-&gt;client_uid);</div><div class='ctx'> </div><div class='del'>-                }</div><div class='add'>+            list_add_tail(&amp;entry-&gt;list, &amp;args-&gt;locklist.list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_getactivelk (xlator_t *subvol, loc_t *loc,</div><div class='del'>-                    lock_migration_info_t *locklist,  dict_t *xdata_in,</div><div class='del'>-                    dict_t **xdata_out)</div><div class='add'>+syncop_getactivelk(xlator_t *subvol, loc_t *loc,</div><div class='add'>+                   lock_migration_info_t *locklist, dict_t *xdata_in,</div><div class='add'>+                   dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='del'>-</div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_getactivelk_cbk,</div><div class='del'>-                subvol-&gt;fops-&gt;getactivelk,</div><div class='del'>-                loc, xdata_in);</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (locklist)</div><div class='del'>-                list_splice_init (&amp;args.locklist.list, &amp;locklist-&gt;list);</div><div class='del'>-        else</div><div class='del'>-                gf_free_mig_locks (&amp;args.locklist) ;</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_getactivelk_cbk, subvol-&gt;fops-&gt;getactivelk,</div><div class='add'>+           loc, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (locklist)</div><div class='add'>+        list_splice_init(&amp;args.locklist.list, &amp;locklist-&gt;list);</div><div class='add'>+    else</div><div class='add'>+        gf_free_mig_locks(&amp;args.locklist);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_setactivelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+syncop_setactivelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='del'>-</div><div class='del'>-        args = cookie;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_setactivelk (xlator_t *subvol, loc_t *loc,</div><div class='del'>-                     lock_migration_info_t *locklist,  dict_t *xdata_in,</div><div class='del'>-                     dict_t **xdata_out)</div><div class='add'>+syncop_setactivelk(xlator_t *subvol, loc_t *loc,</div><div class='add'>+                   lock_migration_info_t *locklist, dict_t *xdata_in,</div><div class='add'>+                   dict_t **xdata_out)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_setactivelk_cbk,</div><div class='del'>-                subvol-&gt;fops-&gt;setactivelk,</div><div class='del'>-                loc, locklist, xdata_in);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_setactivelk_cbk, subvol-&gt;fops-&gt;setactivelk,</div><div class='add'>+           loc, locklist, xdata_in);</div><div class='ctx'> </div><div class='del'>-        if (xdata_out)</div><div class='del'>-                *xdata_out = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata_out)</div><div class='add'>+        *xdata_out = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        if (args.op_ret &lt; 0)</div><div class='del'>-                return -args.op_errno;</div><div class='del'>-</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    if (args.op_ret &lt; 0)</div><div class='add'>+        return -args.op_errno;</div><div class='ctx'> </div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_icreate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+syncop_icreate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='ctx'>                    struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (buf)</div><div class='del'>-		args-&gt;iatt1 = *buf;</div><div class='add'>+    if (buf)</div><div class='add'>+        args-&gt;iatt1 = *buf;</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_namelink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+syncop_namelink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs *args = NULL;</div><div class='add'>+    struct syncargs *args = NULL;</div><div class='ctx'> </div><div class='del'>-        args = cookie;</div><div class='add'>+    args = cookie;</div><div class='ctx'> </div><div class='del'>-        args-&gt;op_ret   = op_ret;</div><div class='del'>-        args-&gt;op_errno = op_errno;</div><div class='add'>+    args-&gt;op_ret = op_ret;</div><div class='add'>+    args-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                args-&gt;xdata  = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        args-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        __wake (args);</div><div class='add'>+    __wake(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_icreate (xlator_t *subvol, loc_t *loc, mode_t mode, dict_t *xdata)</div><div class='add'>+syncop_icreate(xlator_t *subvol, loc_t *loc, mode_t mode, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_icreate_cbk, subvol-&gt;fops-&gt;icreate,</div><div class='del'>-                loc, mode, xdata);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_icreate_cbk, subvol-&gt;fops-&gt;icreate, loc,</div><div class='add'>+           mode, xdata);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                xdata = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        xdata = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        errno = args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    errno = args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-syncop_namelink (xlator_t *subvol, loc_t *loc, dict_t *xdata)</div><div class='add'>+syncop_namelink(xlator_t *subvol, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct syncargs args = {0, };</div><div class='add'>+    struct syncargs args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        SYNCOP (subvol, (&amp;args), syncop_namelink_cbk, subvol-&gt;fops-&gt;namelink,</div><div class='del'>-                loc, xdata);</div><div class='add'>+    SYNCOP(subvol, (&amp;args), syncop_namelink_cbk, subvol-&gt;fops-&gt;namelink, loc,</div><div class='add'>+           xdata);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                xdata = args.xdata;</div><div class='del'>-        else if (args.xdata)</div><div class='del'>-                dict_unref (args.xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        xdata = args.xdata;</div><div class='add'>+    else if (args.xdata)</div><div class='add'>+        dict_unref(args.xdata);</div><div class='ctx'> </div><div class='del'>-        errno = args.op_errno;</div><div class='del'>-        return args.op_ret;</div><div class='add'>+    errno = args.op_errno;</div><div class='add'>+    return args.op_ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/syscall.c b/libglusterfs/src/syscall.c<br/>index 6a17d1ec6ca..a3bc9189257 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/syscall.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/syscall.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/syscall.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/syscall.c</a></div><div class='hunk'>@@ -21,776 +21,709 @@</div><div class='ctx'> #include &lt;stdarg.h&gt;</div><div class='ctx'> </div><div class='ctx'> #define FS_ERROR_LOG(result)                                                   \</div><div class='del'>-        do {                                                                   \</div><div class='del'>-                gf_msg_callingfn ("FS", GF_LOG_CRITICAL, EIO,                  \</div><div class='del'>-                                  LG_MSG_SYSCALL_RETURNS_WRONG,                \</div><div class='del'>-                                  "returned %zd for the syscall",              \</div><div class='del'>-                                  (ssize_t)result);                            \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        gf_msg_callingfn("FS", GF_LOG_CRITICAL, EIO,                           \</div><div class='add'>+                         LG_MSG_SYSCALL_RETURNS_WRONG,                         \</div><div class='add'>+                         "returned %zd for the syscall", (ssize_t)result);     \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Input to these macros is generally a function call, so capture the result</div><div class='ctx'>  * i.e. (_ret) in another variable and use that instead of using _ret again</div><div class='ctx'>  */</div><div class='del'>-#define FS_RET_CHECK(_ret, err)                                        \</div><div class='del'>-({                                                                     \</div><div class='del'>-        typeof(_ret) _result = (_ret);                                 \</div><div class='del'>-        if (_result &lt; -1) {                                            \</div><div class='del'>-                FS_ERROR_LOG (_result);                                \</div><div class='del'>-                _result = -1;                                          \</div><div class='del'>-                err = EIO;                                             \</div><div class='del'>-        }                                                              \</div><div class='del'>-        _result;                                                       \</div><div class='del'>- })</div><div class='add'>+#define FS_RET_CHECK(_ret, err)                                                \</div><div class='add'>+    ({                                                                         \</div><div class='add'>+        typeof(_ret) _result = (_ret);                                         \</div><div class='add'>+        if (_result &lt; -1) {                                                    \</div><div class='add'>+            FS_ERROR_LOG(_result);                                             \</div><div class='add'>+            _result = -1;                                                      \</div><div class='add'>+            err = EIO;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        _result;                                                               \</div><div class='add'>+    })</div><div class='ctx'> </div><div class='del'>-#define FS_RET_CHECK0(_ret, err)                                       \</div><div class='del'>-({                                                                     \</div><div class='del'>-        typeof(_ret) _result0 = (_ret);                                \</div><div class='del'>-        if (_result0 &lt; -1 || _result0 &gt; 0) {                           \</div><div class='del'>-                FS_ERROR_LOG (_result0);                               \</div><div class='del'>-                _result0 = -1;                                         \</div><div class='del'>-                err = EIO;                                             \</div><div class='del'>-        }                                                              \</div><div class='del'>-        _result0;                                                      \</div><div class='del'>-})</div><div class='add'>+#define FS_RET_CHECK0(_ret, err)                                               \</div><div class='add'>+    ({                                                                         \</div><div class='add'>+        typeof(_ret) _result0 = (_ret);                                        \</div><div class='add'>+        if (_result0 &lt; -1 || _result0 &gt; 0) {                                   \</div><div class='add'>+            FS_ERROR_LOG(_result0);                                            \</div><div class='add'>+            _result0 = -1;                                                     \</div><div class='add'>+            err = EIO;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        _result0;                                                              \</div><div class='add'>+    })</div><div class='ctx'> </div><div class='del'>-#define FS_RET_CHECK_ERRNO(_ret, err)                                  \</div><div class='del'>-({                                                                     \</div><div class='del'>-        typeof(_ret) _result1 = (_ret);                                \</div><div class='del'>-        if (_result1 &lt; 0) {                                            \</div><div class='del'>-                FS_ERROR_LOG (_result1);                               \</div><div class='del'>-                _result1 = -1;                                         \</div><div class='del'>-                err = EIO;                                             \</div><div class='del'>-        } else if (_result1 &gt; 0) {                                     \</div><div class='del'>-                err = _result1;                                        \</div><div class='del'>-                _result1 = -1;                                         \</div><div class='del'>-        }                                                              \</div><div class='del'>-        _result1;                                                      \</div><div class='del'>-})</div><div class='add'>+#define FS_RET_CHECK_ERRNO(_ret, err)                                          \</div><div class='add'>+    ({                                                                         \</div><div class='add'>+        typeof(_ret) _result1 = (_ret);                                        \</div><div class='add'>+        if (_result1 &lt; 0) {                                                    \</div><div class='add'>+            FS_ERROR_LOG(_result1);                                            \</div><div class='add'>+            _result1 = -1;                                                     \</div><div class='add'>+            err = EIO;                                                         \</div><div class='add'>+        } else if (_result1 &gt; 0) {                                             \</div><div class='add'>+            err = _result1;                                                    \</div><div class='add'>+            _result1 = -1;                                                     \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        _result1;                                                              \</div><div class='add'>+    })</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-sys_lstat (const char *path, struct stat *buf)</div><div class='add'>+sys_lstat(const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(lstat (path, buf), errno);</div><div class='add'>+    return FS_RET_CHECK0(lstat(path, buf), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_stat (const char *path, struct stat *buf)</div><div class='add'>+sys_stat(const char *path, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(stat (path, buf), errno);</div><div class='add'>+    return FS_RET_CHECK0(stat(path, buf), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fstat (int fd, struct stat *buf)</div><div class='add'>+sys_fstat(int fd, struct stat *buf)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(fstat (fd, buf), errno);</div><div class='add'>+    return FS_RET_CHECK0(fstat(fd, buf), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> sys_fstatat(int dirfd, const char *pathname, struct stat *buf, int flags)</div><div class='ctx'> {</div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        if (fchdir(dirfd) &lt; 0)</div><div class='del'>-                return -1;</div><div class='del'>-        if(flags &amp; AT_SYMLINK_NOFOLLOW)</div><div class='del'>-                return FS_RET_CHECK0(lstat(pathname, buf), errno);</div><div class='del'>-        else</div><div class='del'>-                return FS_RET_CHECK0(stat(pathname, buf), errno);</div><div class='add'>+    if (fchdir(dirfd) &lt; 0)</div><div class='add'>+        return -1;</div><div class='add'>+    if (flags &amp; AT_SYMLINK_NOFOLLOW)</div><div class='add'>+        return FS_RET_CHECK0(lstat(pathname, buf), errno);</div><div class='add'>+    else</div><div class='add'>+        return FS_RET_CHECK0(stat(pathname, buf), errno);</div><div class='ctx'> #else</div><div class='del'>-        return FS_RET_CHECK0(fstatat (dirfd, pathname, buf, flags), errno);</div><div class='add'>+    return FS_RET_CHECK0(fstatat(dirfd, pathname, buf, flags), errno);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> sys_openat(int dirfd, const char *pathname, int flags, int mode)</div><div class='ctx'> {</div><div class='del'>-        int fd;</div><div class='add'>+    int fd;</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        if (fchdir(dirfd) &lt; 0)</div><div class='del'>-                return -1;</div><div class='del'>-        fd = open (pathname, flags, mode);</div><div class='del'>-        /* TODO: Shouldn't we restore the old current directory */</div><div class='add'>+    if (fchdir(dirfd) &lt; 0)</div><div class='add'>+        return -1;</div><div class='add'>+    fd = open(pathname, flags, mode);</div><div class='add'>+    /* TODO: Shouldn't we restore the old current directory */</div><div class='ctx'> #else /* GF_DARWIN_HOST_OS */</div><div class='del'>-        fd = openat (dirfd, pathname, flags, mode);</div><div class='add'>+    fd = openat(dirfd, pathname, flags, mode);</div><div class='ctx'> #ifdef __FreeBSD__</div><div class='del'>-        /* On FreeBSD S_ISVTX flag is ignored for an open() with O_CREAT set.</div><div class='del'>-         * We need to force the flag using fchmod(). */</div><div class='del'>-        if ((fd &gt;= 0) &amp;&amp;</div><div class='del'>-            ((flags &amp; O_CREAT) != 0) &amp;&amp; ((mode &amp; S_ISVTX) != 0)) {</div><div class='del'>-                sys_fchmod(fd, mode);</div><div class='del'>-                /* TODO: It's unlikely that fchmod could fail here. However,</div><div class='del'>-                         if it fails we cannot always restore the old state</div><div class='del'>-                         (if the file existed, we cannot recover it). We would</div><div class='del'>-                         need many more system calls to correctly handle all</div><div class='del'>-                         possible cases and it doesn't worth it. For now we</div><div class='del'>-                         simply ignore the error. */</div><div class='del'>-        }</div><div class='add'>+    /* On FreeBSD S_ISVTX flag is ignored for an open() with O_CREAT set.</div><div class='add'>+     * We need to force the flag using fchmod(). */</div><div class='add'>+    if ((fd &gt;= 0) &amp;&amp; ((flags &amp; O_CREAT) != 0) &amp;&amp; ((mode &amp; S_ISVTX) != 0)) {</div><div class='add'>+        sys_fchmod(fd, mode);</div><div class='add'>+        /* TODO: It's unlikely that fchmod could fail here. However,</div><div class='add'>+                 if it fails we cannot always restore the old state</div><div class='add'>+                 (if the file existed, we cannot recover it). We would</div><div class='add'>+                 need many more system calls to correctly handle all</div><div class='add'>+                 possible cases and it doesn't worth it. For now we</div><div class='add'>+                 simply ignore the error. */</div><div class='add'>+    }</div><div class='ctx'> #endif /* __FreeBSD__ */</div><div class='ctx'> #endif /* !GF_DARWIN_HOST_OS */</div><div class='ctx'> </div><div class='del'>-        return FS_RET_CHECK(fd, errno);</div><div class='add'>+    return FS_RET_CHECK(fd, errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> sys_open(const char *pathname, int flags, int mode)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(sys_openat(AT_FDCWD, pathname, flags, mode), errno);</div><div class='add'>+    return FS_RET_CHECK(sys_openat(AT_FDCWD, pathname, flags, mode), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> DIR *</div><div class='del'>-sys_opendir (const char *name)</div><div class='add'>+sys_opendir(const char *name)</div><div class='ctx'> {</div><div class='del'>-        return opendir (name);</div><div class='add'>+    return opendir(name);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int sys_mkdirat(int dirfd, const char *pathname, mode_t mode)</div><div class='add'>+int</div><div class='add'>+sys_mkdirat(int dirfd, const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        if(fchdir(dirfd) &lt; 0)</div><div class='del'>-                return -1;</div><div class='del'>-        return FS_RET_CHECK0(mkdir(pathname, mode), errno);</div><div class='add'>+    if (fchdir(dirfd) &lt; 0)</div><div class='add'>+        return -1;</div><div class='add'>+    return FS_RET_CHECK0(mkdir(pathname, mode), errno);</div><div class='ctx'> #else</div><div class='del'>-        return FS_RET_CHECK0(mkdirat (dirfd, pathname, mode), errno);</div><div class='add'>+    return FS_RET_CHECK0(mkdirat(dirfd, pathname, mode), errno);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct dirent *</div><div class='del'>-sys_readdir (DIR *dir, struct dirent *de)</div><div class='add'>+sys_readdir(DIR *dir, struct dirent *de)</div><div class='ctx'> {</div><div class='ctx'> #if !defined(__GLIBC__)</div><div class='del'>-        /*</div><div class='del'>-         * World+Dog says glibc's readdir(3) is MT-SAFE as long as</div><div class='del'>-         * two threads are not accessing the same DIR; there's a</div><div class='del'>-         * potential buffer overflow in glibc's readdir_r(3); and</div><div class='del'>-         * glibc's readdir_r(3) is deprecated after version 2.22</div><div class='del'>-         * with presumed eventual removal.</div><div class='del'>-         * Given all that, World+Dog says everyone should just use</div><div class='del'>-         * readdir(3). But it's unknown, unclear whether the same</div><div class='del'>-         * is also true for *BSD, MacOS, and, etc.</div><div class='del'>-        */</div><div class='del'>-        struct dirent *entry = NULL;</div><div class='del'>-</div><div class='del'>-        (void) readdir_r (dir, de, &amp;entry);</div><div class='del'>-        return entry;</div><div class='add'>+    /*</div><div class='add'>+     * World+Dog says glibc's readdir(3) is MT-SAFE as long as</div><div class='add'>+     * two threads are not accessing the same DIR; there's a</div><div class='add'>+     * potential buffer overflow in glibc's readdir_r(3); and</div><div class='add'>+     * glibc's readdir_r(3) is deprecated after version 2.22</div><div class='add'>+     * with presumed eventual removal.</div><div class='add'>+     * Given all that, World+Dog says everyone should just use</div><div class='add'>+     * readdir(3). But it's unknown, unclear whether the same</div><div class='add'>+     * is also true for *BSD, MacOS, and, etc.</div><div class='add'>+     */</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+</div><div class='add'>+    (void)readdir_r(dir, de, &amp;entry);</div><div class='add'>+    return entry;</div><div class='ctx'> #else</div><div class='del'>-        return readdir (dir);</div><div class='add'>+    return readdir(dir);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_readlink (const char *path, char *buf, size_t bufsiz)</div><div class='add'>+sys_readlink(const char *path, char *buf, size_t bufsiz)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(readlink (path, buf, bufsiz), errno);</div><div class='add'>+    return FS_RET_CHECK(readlink(path, buf, bufsiz), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_closedir (DIR *dir)</div><div class='add'>+sys_closedir(DIR *dir)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(closedir (dir), errno);</div><div class='add'>+    return FS_RET_CHECK0(closedir(dir), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_mknod (const char *pathname, mode_t mode, dev_t dev)</div><div class='add'>+sys_mknod(const char *pathname, mode_t mode, dev_t dev)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(mknod (pathname, mode, dev), errno);</div><div class='add'>+    return FS_RET_CHECK0(mknod(pathname, mode, dev), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_mkdir (const char *pathname, mode_t mode)</div><div class='add'>+sys_mkdir(const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(mkdir (pathname, mode), errno);</div><div class='add'>+    return FS_RET_CHECK0(mkdir(pathname, mode), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_unlink (const char *pathname)</div><div class='add'>+sys_unlink(const char *pathname)</div><div class='ctx'> {</div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(solaris_unlink (pathname), errno);</div><div class='add'>+    return FS_RET_CHECK0(solaris_unlink(pathname), errno);</div><div class='ctx'> #endif</div><div class='del'>-        return FS_RET_CHECK0(unlink (pathname), errno);</div><div class='add'>+    return FS_RET_CHECK0(unlink(pathname), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_rmdir (const char *pathname)</div><div class='add'>+sys_rmdir(const char *pathname)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(rmdir (pathname), errno);</div><div class='add'>+    return FS_RET_CHECK0(rmdir(pathname), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_symlink (const char *oldpath, const char *newpath)</div><div class='add'>+sys_symlink(const char *oldpath, const char *newpath)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(symlink (oldpath, newpath), errno);</div><div class='add'>+    return FS_RET_CHECK0(symlink(oldpath, newpath), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_rename (const char *oldpath, const char *newpath)</div><div class='add'>+sys_rename(const char *oldpath, const char *newpath)</div><div class='ctx'> {</div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(solaris_rename (oldpath, newpath), errno);</div><div class='add'>+    return FS_RET_CHECK0(solaris_rename(oldpath, newpath), errno);</div><div class='ctx'> #endif</div><div class='del'>-        return FS_RET_CHECK0(rename (oldpath, newpath), errno);</div><div class='add'>+    return FS_RET_CHECK0(rename(oldpath, newpath), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_link (const char *oldpath, const char *newpath)</div><div class='add'>+sys_link(const char *oldpath, const char *newpath)</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_LINKAT</div><div class='del'>-	/*</div><div class='del'>-	 * On most systems (Linux being the notable exception), link(2)</div><div class='del'>-	 * first resolves symlinks. If the target is a directory or</div><div class='del'>-	 * is nonexistent, it will fail. linkat(2) operates on the</div><div class='del'>-	 * symlink instead of its target when the AT_SYMLINK_FOLLOW</div><div class='del'>-	 * flag is not supplied.</div><div class='del'>-	 */</div><div class='del'>-        return FS_RET_CHECK0(linkat (AT_FDCWD, oldpath, AT_FDCWD, newpath, 0),</div><div class='del'>-                             errno);</div><div class='add'>+    /*</div><div class='add'>+     * On most systems (Linux being the notable exception), link(2)</div><div class='add'>+     * first resolves symlinks. If the target is a directory or</div><div class='add'>+     * is nonexistent, it will fail. linkat(2) operates on the</div><div class='add'>+     * symlink instead of its target when the AT_SYMLINK_FOLLOW</div><div class='add'>+     * flag is not supplied.</div><div class='add'>+     */</div><div class='add'>+    return FS_RET_CHECK0(linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0),</div><div class='add'>+                         errno);</div><div class='ctx'> #else</div><div class='del'>-        return FS_RET_CHECK0(link (oldpath, newpath), errno);</div><div class='add'>+    return FS_RET_CHECK0(link(oldpath, newpath), errno);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_chmod (const char *path, mode_t mode)</div><div class='add'>+sys_chmod(const char *path, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(chmod (path, mode), errno);</div><div class='add'>+    return FS_RET_CHECK0(chmod(path, mode), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fchmod (int fd, mode_t mode)</div><div class='add'>+sys_fchmod(int fd, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(fchmod (fd, mode), errno);</div><div class='add'>+    return FS_RET_CHECK0(fchmod(fd, mode), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_chown (const char *path, uid_t owner, gid_t group)</div><div class='add'>+sys_chown(const char *path, uid_t owner, gid_t group)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(chown (path, owner, group), errno);</div><div class='add'>+    return FS_RET_CHECK0(chown(path, owner, group), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fchown (int fd, uid_t owner, gid_t group)</div><div class='add'>+sys_fchown(int fd, uid_t owner, gid_t group)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(fchown (fd, owner, group), errno);</div><div class='add'>+    return FS_RET_CHECK0(fchown(fd, owner, group), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_lchown (const char *path, uid_t owner, gid_t group)</div><div class='add'>+sys_lchown(const char *path, uid_t owner, gid_t group)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(lchown (path, owner, group), errno);</div><div class='add'>+    return FS_RET_CHECK0(lchown(path, owner, group), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_truncate (const char *path, off_t length)</div><div class='add'>+sys_truncate(const char *path, off_t length)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(truncate (path, length), errno);</div><div class='add'>+    return FS_RET_CHECK0(truncate(path, length), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_ftruncate (int fd, off_t length)</div><div class='add'>+sys_ftruncate(int fd, off_t length)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(ftruncate (fd, length), errno);</div><div class='add'>+    return FS_RET_CHECK0(ftruncate(fd, length), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_utimes (const char *filename, const struct timeval times[2])</div><div class='add'>+sys_utimes(const char *filename, const struct timeval times[2])</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(utimes (filename, times), errno);</div><div class='add'>+    return FS_RET_CHECK0(utimes(filename, times), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #if defined(HAVE_UTIMENSAT)</div><div class='ctx'> int</div><div class='del'>-sys_utimensat (int dirfd, const char *filename, const struct timespec times[2],</div><div class='del'>-               int flags)</div><div class='add'>+sys_utimensat(int dirfd, const char *filename, const struct timespec times[2],</div><div class='add'>+              int flags)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(utimensat (dirfd, filename, times, flags), errno);</div><div class='add'>+    return FS_RET_CHECK0(utimensat(dirfd, filename, times, flags), errno);</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_futimes (int fd, const struct timeval times[2])</div><div class='add'>+sys_futimes(int fd, const struct timeval times[2])</div><div class='ctx'> {</div><div class='del'>-        return futimes (fd, times);</div><div class='add'>+    return futimes(fd, times);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_creat (const char *pathname, mode_t mode)</div><div class='add'>+sys_creat(const char *pathname, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(sys_open(pathname, O_CREAT | O_TRUNC | O_WRONLY,</div><div class='del'>-                                     mode), errno);</div><div class='add'>+    return FS_RET_CHECK(sys_open(pathname, O_CREAT | O_TRUNC | O_WRONLY, mode),</div><div class='add'>+                        errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_readv (int fd, const struct iovec *iov, int iovcnt)</div><div class='add'>+sys_readv(int fd, const struct iovec *iov, int iovcnt)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(readv (fd, iov, iovcnt), errno);</div><div class='add'>+    return FS_RET_CHECK(readv(fd, iov, iovcnt), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_writev (int fd, const struct iovec *iov, int iovcnt)</div><div class='add'>+sys_writev(int fd, const struct iovec *iov, int iovcnt)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(writev (fd, iov, iovcnt), errno);</div><div class='add'>+    return FS_RET_CHECK(writev(fd, iov, iovcnt), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_read (int fd, void *buf, size_t count)</div><div class='add'>+sys_read(int fd, void *buf, size_t count)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(read (fd, buf, count), errno);</div><div class='add'>+    return FS_RET_CHECK(read(fd, buf, count), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_write (int fd, const void *buf, size_t count)</div><div class='add'>+sys_write(int fd, const void *buf, size_t count)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(write (fd, buf, count), errno);</div><div class='add'>+    return FS_RET_CHECK(write(fd, buf, count), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_preadv (int fd, const struct iovec *iov, int iovcnt, off_t offset)</div><div class='add'>+sys_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(preadv (fd, iov, iovcnt, offset), errno);</div><div class='add'>+    return FS_RET_CHECK(preadv(fd, iov, iovcnt, offset), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_pwritev (int fd, const struct iovec *iov, int iovcnt, off_t offset)</div><div class='add'>+sys_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(pwritev (fd, iov, iovcnt, offset), errno);</div><div class='add'>+    return FS_RET_CHECK(pwritev(fd, iov, iovcnt, offset), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_pread (int fd, void *buf, size_t count, off_t offset)</div><div class='add'>+sys_pread(int fd, void *buf, size_t count, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(pread (fd, buf, count, offset), errno);</div><div class='add'>+    return FS_RET_CHECK(pread(fd, buf, count, offset), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_pwrite (int fd, const void *buf, size_t count, off_t offset)</div><div class='add'>+sys_pwrite(int fd, const void *buf, size_t count, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(pwrite (fd, buf, count, offset), errno);</div><div class='add'>+    return FS_RET_CHECK(pwrite(fd, buf, count, offset), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> off_t</div><div class='del'>-sys_lseek (int fd, off_t offset, int whence)</div><div class='add'>+sys_lseek(int fd, off_t offset, int whence)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK(lseek (fd, offset, whence), errno);</div><div class='add'>+    return FS_RET_CHECK(lseek(fd, offset, whence), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_statvfs (const char *path, struct statvfs *buf)</div><div class='add'>+sys_statvfs(const char *path, struct statvfs *buf)</div><div class='ctx'> {</div><div class='del'>-        int ret;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-        ret = statvfs (path, buf);</div><div class='add'>+    ret = statvfs(path, buf);</div><div class='ctx'> #ifdef __FreeBSD__</div><div class='del'>-        /* FreeBSD doesn't return the expected value in buf-&gt;f_bsize. It</div><div class='del'>-         * contains the optimal I/O size instead of the file system block</div><div class='del'>-         * size. Gluster expects that this field contains the block size.</div><div class='del'>-         */</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                buf-&gt;f_bsize = buf-&gt;f_frsize;</div><div class='del'>-        }</div><div class='add'>+    /* FreeBSD doesn't return the expected value in buf-&gt;f_bsize. It</div><div class='add'>+     * contains the optimal I/O size instead of the file system block</div><div class='add'>+     * size. Gluster expects that this field contains the block size.</div><div class='add'>+     */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        buf-&gt;f_bsize = buf-&gt;f_frsize;</div><div class='add'>+    }</div><div class='ctx'> #endif /* __FreeBSD__ */</div><div class='ctx'> </div><div class='del'>-        return FS_RET_CHECK0(ret, errno);</div><div class='add'>+    return FS_RET_CHECK0(ret, errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fstatvfs (int fd, struct statvfs *buf)</div><div class='add'>+sys_fstatvfs(int fd, struct statvfs *buf)</div><div class='ctx'> {</div><div class='del'>-        int ret;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-        ret = fstatvfs (fd, buf);</div><div class='add'>+    ret = fstatvfs(fd, buf);</div><div class='ctx'> #ifdef __FreeBSD__</div><div class='del'>-        /* FreeBSD doesn't return the expected value in buf-&gt;f_bsize. It</div><div class='del'>-         * contains the optimal I/O size instead of the file system block</div><div class='del'>-         * size. Gluster expects this field to contain the block size.</div><div class='del'>-         */</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                buf-&gt;f_bsize = buf-&gt;f_frsize;</div><div class='del'>-        }</div><div class='add'>+    /* FreeBSD doesn't return the expected value in buf-&gt;f_bsize. It</div><div class='add'>+     * contains the optimal I/O size instead of the file system block</div><div class='add'>+     * size. Gluster expects this field to contain the block size.</div><div class='add'>+     */</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        buf-&gt;f_bsize = buf-&gt;f_frsize;</div><div class='add'>+    }</div><div class='ctx'> #endif /* __FreeBSD__ */</div><div class='ctx'> </div><div class='del'>-        return FS_RET_CHECK0(ret, errno);</div><div class='add'>+    return FS_RET_CHECK0(ret, errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_close (int fd)</div><div class='add'>+sys_close(int fd)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                ret = close (fd);</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        ret = close(fd);</div><div class='ctx'> </div><div class='del'>-        return FS_RET_CHECK0(ret, errno);</div><div class='add'>+    return FS_RET_CHECK0(ret, errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fsync (int fd)</div><div class='add'>+sys_fsync(int fd)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(fsync (fd), errno);</div><div class='add'>+    return FS_RET_CHECK0(fsync(fd), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fdatasync (int fd)</div><div class='add'>+sys_fdatasync(int fd)</div><div class='ctx'> {</div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(fcntl (fd, F_FULLFSYNC), errno);</div><div class='add'>+    return FS_RET_CHECK0(fcntl(fd, F_FULLFSYNC), errno);</div><div class='ctx'> #elif __FreeBSD__</div><div class='del'>-	return FS_RET_CHECK0(fsync (fd), errno);</div><div class='add'>+    return FS_RET_CHECK0(fsync(fd), errno);</div><div class='ctx'> #else</div><div class='del'>-        return FS_RET_CHECK0(fdatasync (fd), errno);</div><div class='add'>+    return FS_RET_CHECK0(fdatasync(fd), errno);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> gf_add_prefix(const char *ns, const char *key, char **newkey)</div><div class='ctx'> {</div><div class='del'>-        /* if we don't have any namespace, append USER NS */</div><div class='del'>-        if (strncmp(key, XATTR_USER_PREFIX,     XATTR_USER_PREFIX_LEN) &amp;&amp;</div><div class='del'>-            strncmp(key, XATTR_TRUSTED_PREFIX,  XATTR_TRUSTED_PREFIX_LEN) &amp;&amp;</div><div class='del'>-            strncmp(key, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) &amp;&amp;</div><div class='del'>-            strncmp(key, XATTR_SYSTEM_PREFIX,   XATTR_SYSTEM_PREFIX_LEN)) {</div><div class='del'>-                int ns_length =  strlen(ns);</div><div class='del'>-                *newkey = GF_MALLOC(ns_length + strlen(key) + 10,</div><div class='del'>-                                    gf_common_mt_char);</div><div class='del'>-                if (!*newkey)</div><div class='del'>-                        return;</div><div class='del'>-                strcpy(*newkey, ns);</div><div class='del'>-                strcat(*newkey, key);</div><div class='del'>-        } else {</div><div class='del'>-                *newkey = gf_strdup(key);</div><div class='del'>-        }</div><div class='add'>+    /* if we don't have any namespace, append USER NS */</div><div class='add'>+    if (strncmp(key, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) &amp;&amp;</div><div class='add'>+        strncmp(key, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) &amp;&amp;</div><div class='add'>+        strncmp(key, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) &amp;&amp;</div><div class='add'>+        strncmp(key, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) {</div><div class='add'>+        int ns_length = strlen(ns);</div><div class='add'>+        *newkey = GF_MALLOC(ns_length + strlen(key) + 10, gf_common_mt_char);</div><div class='add'>+        if (!*newkey)</div><div class='add'>+            return;</div><div class='add'>+        strcpy(*newkey, ns);</div><div class='add'>+        strcat(*newkey, key);</div><div class='add'>+    } else {</div><div class='add'>+        *newkey = gf_strdup(key);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> gf_remove_prefix(const char *ns, const char *key, char **newkey)</div><div class='ctx'> {</div><div class='del'>-        int ns_length =  strlen(ns);</div><div class='del'>-        if (strncmp(key, ns, ns_length) == 0) {</div><div class='del'>-                *newkey = GF_MALLOC(-ns_length + strlen(key) + 10,</div><div class='del'>-                                    gf_common_mt_char);</div><div class='del'>-                if (!*newkey)</div><div class='del'>-                        return;</div><div class='del'>-                strcpy(*newkey, key + ns_length);</div><div class='del'>-        } else {</div><div class='del'>-                *newkey = gf_strdup(key);</div><div class='del'>-        }</div><div class='add'>+    int ns_length = strlen(ns);</div><div class='add'>+    if (strncmp(key, ns, ns_length) == 0) {</div><div class='add'>+        *newkey = GF_MALLOC(-ns_length + strlen(key) + 10, gf_common_mt_char);</div><div class='add'>+        if (!*newkey)</div><div class='add'>+            return;</div><div class='add'>+        strcpy(*newkey, key + ns_length);</div><div class='add'>+    } else {</div><div class='add'>+        *newkey = gf_strdup(key);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-sys_lsetxattr (const char *path, const char *name, const void *value,</div><div class='del'>-               size_t size, int flags)</div><div class='add'>+sys_lsetxattr(const char *path, const char *name, const void *value,</div><div class='add'>+              size_t size, int flags)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK0(lsetxattr (path, name, value, size, flags), errno);</div><div class='add'>+    return FS_RET_CHECK0(lsetxattr(path, name, value, size, flags), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(extattr_set_link (path, EXTATTR_NAMESPACE_USER,</div><div class='del'>-                             name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK0(</div><div class='add'>+        extattr_set_link(path, EXTATTR_NAMESPACE_USER, name, value, size),</div><div class='add'>+        errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(solaris_setxattr (path, name, value, size, flags),</div><div class='del'>-                             errno);</div><div class='add'>+    return FS_RET_CHECK0(solaris_setxattr(path, name, value, size, flags),</div><div class='add'>+                         errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        /* OS X clients will carry other flags, which will be used on a</div><div class='del'>-           OS X host, but masked out on others. GF assume NOFOLLOW on Linux,</div><div class='del'>-           enforcing  */</div><div class='del'>-        return FS_RET_CHECK0(setxattr (path, name, value, size, 0,</div><div class='del'>-                             (flags &amp; ~XATTR_NOSECURITY) | XATTR_NOFOLLOW),</div><div class='del'>-                             errno);</div><div class='add'>+    /* OS X clients will carry other flags, which will be used on a</div><div class='add'>+       OS X host, but masked out on others. GF assume NOFOLLOW on Linux,</div><div class='add'>+       enforcing  */</div><div class='add'>+    return FS_RET_CHECK0(setxattr(path, name, value, size, 0,</div><div class='add'>+                                  (flags &amp; ~XATTR_NOSECURITY) | XATTR_NOFOLLOW),</div><div class='add'>+                         errno);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_llistxattr (const char *path, char *list, size_t size)</div><div class='add'>+sys_llistxattr(const char *path, char *list, size_t size)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK(llistxattr (path, list, size), errno);</div><div class='add'>+    return FS_RET_CHECK(llistxattr(path, list, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        ssize_t ret = FS_RET_CHECK(extattr_list_link (path,</div><div class='del'>-                                                      EXTATTR_NAMESPACE_USER,</div><div class='del'>-                                                      list, size), errno);</div><div class='del'>-        gf_extattr_list_reshape (list, ret);</div><div class='del'>-        return ret;</div><div class='add'>+    ssize_t ret = FS_RET_CHECK(</div><div class='add'>+        extattr_list_link(path, EXTATTR_NAMESPACE_USER, list, size), errno);</div><div class='add'>+    gf_extattr_list_reshape(list, ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(solaris_listxattr (path, list, size), errno);</div><div class='add'>+    return FS_RET_CHECK(solaris_listxattr(path, list, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(listxattr (path, list, size, XATTR_NOFOLLOW),</div><div class='del'>-                            errno);</div><div class='add'>+    return FS_RET_CHECK(listxattr(path, list, size, XATTR_NOFOLLOW), errno);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-sys_lgetxattr (const char *path, const char *name, void *value, size_t size)</div><div class='add'>+sys_lgetxattr(const char *path, const char *name, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK(lgetxattr (path, name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK(lgetxattr(path, name, value, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(extattr_get_link (path, EXTATTR_NAMESPACE_USER,</div><div class='del'>-                                              name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK(</div><div class='add'>+        extattr_get_link(path, EXTATTR_NAMESPACE_USER, name, value, size),</div><div class='add'>+        errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(solaris_getxattr (path, name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK(solaris_getxattr(path, name, value, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-         return FS_RET_CHECK(getxattr (path, name, value, size, 0,</div><div class='del'>-                                       XATTR_NOFOLLOW), errno);</div><div class='add'>+    return FS_RET_CHECK(getxattr(path, name, value, size, 0, XATTR_NOFOLLOW),</div><div class='add'>+                        errno);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_fgetxattr (int filedes, const char *name, void *value, size_t size)</div><div class='add'>+sys_fgetxattr(int filedes, const char *name, void *value, size_t size)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK(fgetxattr (filedes, name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK(fgetxattr(filedes, name, value, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(extattr_get_fd (filedes, EXTATTR_NAMESPACE_USER,</div><div class='del'>-                            name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK(</div><div class='add'>+        extattr_get_fd(filedes, EXTATTR_NAMESPACE_USER, name, value, size),</div><div class='add'>+        errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(solaris_fgetxattr (filedes, name, value, size),</div><div class='del'>-                            errno);</div><div class='add'>+    return FS_RET_CHECK(solaris_fgetxattr(filedes, name, value, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(fgetxattr (filedes, name, value, size, 0, 0),</div><div class='del'>-                            errno);</div><div class='add'>+    return FS_RET_CHECK(fgetxattr(filedes, name, value, size, 0, 0), errno);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-sys_fremovexattr (int filedes, const char *name)</div><div class='add'>+sys_fremovexattr(int filedes, const char *name)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK0(fremovexattr (filedes, name), errno);</div><div class='add'>+    return FS_RET_CHECK0(fremovexattr(filedes, name), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(extattr_delete_fd (filedes, EXTATTR_NAMESPACE_USER,</div><div class='del'>-                                                name), errno);</div><div class='add'>+    return FS_RET_CHECK0(</div><div class='add'>+        extattr_delete_fd(filedes, EXTATTR_NAMESPACE_USER, name), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(solaris_fremovexattr (filedes, name), errno);</div><div class='add'>+    return FS_RET_CHECK0(solaris_fremovexattr(filedes, name), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(fremovexattr (filedes, name, 0), errno);</div><div class='add'>+    return FS_RET_CHECK0(fremovexattr(filedes, name, 0), errno);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_fsetxattr (int filedes, const char *name, const void *value,</div><div class='del'>-               size_t size, int flags)</div><div class='add'>+sys_fsetxattr(int filedes, const char *name, const void *value, size_t size,</div><div class='add'>+              int flags)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK0(fsetxattr (filedes, name, value, size, flags),</div><div class='del'>-                             errno);</div><div class='add'>+    return FS_RET_CHECK0(fsetxattr(filedes, name, value, size, flags), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(extattr_set_fd (filedes, EXTATTR_NAMESPACE_USER,</div><div class='del'>-                                             name, value, size), errno);</div><div class='add'>+    return FS_RET_CHECK0(</div><div class='add'>+        extattr_set_fd(filedes, EXTATTR_NAMESPACE_USER, name, value, size),</div><div class='add'>+        errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(solaris_fsetxattr (filedes, name, value, size,</div><div class='del'>-                                                flags), errno);</div><div class='add'>+    return FS_RET_CHECK0(solaris_fsetxattr(filedes, name, value, size, flags),</div><div class='add'>+                         errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(fsetxattr (filedes, name, value, size, 0,</div><div class='del'>-                                        flags &amp; ~XATTR_NOSECURITY), errno);</div><div class='add'>+    return FS_RET_CHECK0(</div><div class='add'>+        fsetxattr(filedes, name, value, size, 0, flags &amp; ~XATTR_NOSECURITY),</div><div class='add'>+        errno);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-sys_flistxattr (int filedes, char *list, size_t size)</div><div class='add'>+sys_flistxattr(int filedes, char *list, size_t size)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK(flistxattr (filedes, list, size), errno);</div><div class='add'>+    return FS_RET_CHECK(flistxattr(filedes, list, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        ssize_t ret = FS_RET_CHECK (extattr_list_fd (filedes,</div><div class='del'>-                                                     EXTATTR_NAMESPACE_USER,</div><div class='del'>-                                                     list, size), errno);</div><div class='del'>-        gf_extattr_list_reshape (list, ret);</div><div class='del'>-        return ret;</div><div class='add'>+    ssize_t ret = FS_RET_CHECK(</div><div class='add'>+        extattr_list_fd(filedes, EXTATTR_NAMESPACE_USER, list, size), errno);</div><div class='add'>+    gf_extattr_list_reshape(list, ret);</div><div class='add'>+    return ret;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(solaris_flistxattr (filedes, list, size), errno);</div><div class='add'>+    return FS_RET_CHECK(solaris_flistxattr(filedes, list, size), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK(flistxattr (filedes, list, size, XATTR_NOFOLLOW),</div><div class='del'>-                            errno);</div><div class='add'>+    return FS_RET_CHECK(flistxattr(filedes, list, size, XATTR_NOFOLLOW), errno);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_lremovexattr (const char *path, const char *name)</div><div class='add'>+sys_lremovexattr(const char *path, const char *name)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'> #if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)</div><div class='del'>-        return FS_RET_CHECK0(lremovexattr (path, name), errno);</div><div class='add'>+    return FS_RET_CHECK0(lremovexattr(path, name), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_BSD_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(extattr_delete_link (path, EXTATTR_NAMESPACE_USER,</div><div class='del'>-                                                  name), errno);</div><div class='add'>+    return FS_RET_CHECK0(</div><div class='add'>+        extattr_delete_link(path, EXTATTR_NAMESPACE_USER, name), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(solaris_removexattr (path, name), errno);</div><div class='add'>+    return FS_RET_CHECK0(solaris_removexattr(path, name), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_DARWIN_HOST_OS</div><div class='del'>-        return FS_RET_CHECK0(removexattr (path, name, XATTR_NOFOLLOW), errno);</div><div class='add'>+    return FS_RET_CHECK0(removexattr(path, name, XATTR_NOFOLLOW), errno);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-sys_access (const char *pathname, int mode)</div><div class='add'>+sys_access(const char *pathname, int mode)</div><div class='ctx'> {</div><div class='del'>-        return FS_RET_CHECK0(access (pathname, mode), errno);</div><div class='add'>+    return FS_RET_CHECK0(access(pathname, mode), errno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> sys_fallocate(int fd, int mode, off_t offset, off_t len)</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_FALLOCATE</div><div class='del'>-        return FS_RET_CHECK0(fallocate(fd, mode, offset, len), errno);</div><div class='add'>+    return FS_RET_CHECK0(fallocate(fd, mode, offset, len), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_POSIX_FALLOCATE</div><div class='del'>-        if (mode) {</div><div class='del'>-                /* keep size not supported */</div><div class='del'>-                errno = EOPNOTSUPP;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (mode) {</div><div class='add'>+        /* keep size not supported */</div><div class='add'>+        errno = EOPNOTSUPP;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return FS_RET_CHECK_ERRNO(posix_fallocate(fd, offset, len), errno);</div><div class='add'>+    return FS_RET_CHECK_ERRNO(posix_fallocate(fd, offset, len), errno);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined(F_ALLOCATECONTIG) &amp;&amp; defined(GF_DARWIN_HOST_OS)</div><div class='del'>-        /* C conversion from C++ implementation for OSX by Mozilla Foundation */</div><div class='del'>-        if (mode) {</div><div class='del'>-                /* keep size not supported */</div><div class='del'>-                errno = EOPNOTSUPP;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        /*</div><div class='del'>-         *   The F_PREALLOCATE command operates on the following structure:</div><div class='del'>-         *</div><div class='del'>-         *    typedef struct fstore {</div><div class='del'>-         *    u_int32_t fst_flags;      // IN: flags word</div><div class='del'>-         *    int       fst_posmode;    // IN: indicates offset field</div><div class='del'>-         *    off_t     fst_offset;     // IN: start of the region</div><div class='del'>-         *    off_t     fst_length;     // IN: size of the region</div><div class='del'>-         *    off_t     fst_bytesalloc; // OUT: number of bytes allocated</div><div class='del'>-         *    } fstore_t;</div><div class='del'>-         *</div><div class='del'>-         * The flags (fst_flags) for the F_PREALLOCATE command are as follows:</div><div class='del'>-         *    F_ALLOCATECONTIG   Allocate contiguous space.</div><div class='del'>-         *    F_ALLOCATEALL      Allocate all requested space or no space at all.</div><div class='del'>-         *</div><div class='del'>-         * The position modes (fst_posmode) for the F_PREALLOCATE command</div><div class='del'>-         * indicate how to use the offset field.  The modes are as follows:</div><div class='del'>-         *    F_PEOFPOSMODE   Allocate from the physical end of file.</div><div class='del'>-         *    F_VOLPOSMODE    Allocate from the volume offset.</div><div class='del'>-         *</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        int ret;</div><div class='del'>-        fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, offset, len, 0};</div><div class='del'>-        ret = fcntl (fd, F_PREALLOCATE, &amp;store);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                store.fst_flags = F_ALLOCATEALL;</div><div class='del'>-                ret = fcntl (fd, F_PREALLOCATE, &amp;store);</div><div class='del'>-        }</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                return ret;</div><div class='del'>-        return FS_RET_CHECK0(ftruncate (fd, offset + len), errno);</div><div class='del'>-#endif</div><div class='del'>-        errno = ENOSYS;</div><div class='add'>+    /* C conversion from C++ implementation for OSX by Mozilla Foundation */</div><div class='add'>+    if (mode) {</div><div class='add'>+        /* keep size not supported */</div><div class='add'>+        errno = EOPNOTSUPP;</div><div class='ctx'>         return -1;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     *   The F_PREALLOCATE command operates on the following structure:</div><div class='add'>+     *</div><div class='add'>+     *    typedef struct fstore {</div><div class='add'>+     *    u_int32_t fst_flags;      // IN: flags word</div><div class='add'>+     *    int       fst_posmode;    // IN: indicates offset field</div><div class='add'>+     *    off_t     fst_offset;     // IN: start of the region</div><div class='add'>+     *    off_t     fst_length;     // IN: size of the region</div><div class='add'>+     *    off_t     fst_bytesalloc; // OUT: number of bytes allocated</div><div class='add'>+     *    } fstore_t;</div><div class='add'>+     *</div><div class='add'>+     * The flags (fst_flags) for the F_PREALLOCATE command are as follows:</div><div class='add'>+     *    F_ALLOCATECONTIG   Allocate contiguous space.</div><div class='add'>+     *    F_ALLOCATEALL      Allocate all requested space or no space at all.</div><div class='add'>+     *</div><div class='add'>+     * The position modes (fst_posmode) for the F_PREALLOCATE command</div><div class='add'>+     * indicate how to use the offset field.  The modes are as follows:</div><div class='add'>+     *    F_PEOFPOSMODE   Allocate from the physical end of file.</div><div class='add'>+     *    F_VOLPOSMODE    Allocate from the volume offset.</div><div class='add'>+     *</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    int ret;</div><div class='add'>+    fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, offset, len, 0};</div><div class='add'>+    ret = fcntl(fd, F_PREALLOCATE, &amp;store);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        store.fst_flags = F_ALLOCATEALL;</div><div class='add'>+        ret = fcntl(fd, F_PREALLOCATE, &amp;store);</div><div class='add'>+    }</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        return ret;</div><div class='add'>+    return FS_RET_CHECK0(ftruncate(fd, offset + len), errno);</div><div class='add'>+#endif</div><div class='add'>+    errno = ENOSYS;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/throttle-tbf.c b/libglusterfs/src/throttle-tbf.c<br/>index a425166b681..9519defa37f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/throttle-tbf.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/throttle-tbf.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/throttle-tbf.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/throttle-tbf.c</a></div><div class='hunk'>@@ -27,93 +27,93 @@</div><div class='ctx'> #include "throttle-tbf.h"</div><div class='ctx'> </div><div class='ctx'> typedef struct tbf_throttle {</div><div class='del'>-        char done;</div><div class='add'>+    char done;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_t mutex;</div><div class='del'>-        pthread_cond_t  cond;</div><div class='add'>+    pthread_mutex_t mutex;</div><div class='add'>+    pthread_cond_t cond;</div><div class='ctx'> </div><div class='del'>-        unsigned long tokens;</div><div class='add'>+    unsigned long tokens;</div><div class='ctx'> </div><div class='del'>-        struct list_head list;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> } tbf_throttle_t;</div><div class='ctx'> </div><div class='ctx'> static tbf_throttle_t *</div><div class='del'>-tbf_init_throttle (unsigned long tokens_required)</div><div class='add'>+tbf_init_throttle(unsigned long tokens_required)</div><div class='ctx'> {</div><div class='del'>-        tbf_throttle_t *throttle = NULL;</div><div class='add'>+    tbf_throttle_t *throttle = NULL;</div><div class='ctx'> </div><div class='del'>-        throttle = GF_CALLOC (1, sizeof (*throttle),</div><div class='del'>-                              gf_common_mt_tbf_throttle_t);</div><div class='del'>-        if (!throttle)</div><div class='del'>-                return NULL;</div><div class='add'>+    throttle = GF_CALLOC(1, sizeof(*throttle), gf_common_mt_tbf_throttle_t);</div><div class='add'>+    if (!throttle)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        throttle-&gt;done = 0;</div><div class='del'>-        throttle-&gt;tokens = tokens_required;</div><div class='del'>-        INIT_LIST_HEAD (&amp;throttle-&gt;list);</div><div class='add'>+    throttle-&gt;done = 0;</div><div class='add'>+    throttle-&gt;tokens = tokens_required;</div><div class='add'>+    INIT_LIST_HEAD(&amp;throttle-&gt;list);</div><div class='ctx'> </div><div class='del'>-        (void) pthread_mutex_init (&amp;throttle-&gt;mutex, NULL);</div><div class='del'>-        (void) pthread_cond_init (&amp;throttle-&gt;cond, NULL);</div><div class='add'>+    (void)pthread_mutex_init(&amp;throttle-&gt;mutex, NULL);</div><div class='add'>+    (void)pthread_cond_init(&amp;throttle-&gt;cond, NULL);</div><div class='ctx'> </div><div class='del'>-        return throttle;</div><div class='add'>+    return throttle;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_tbf_dispatch_queued (tbf_bucket_t *bucket)</div><div class='add'>+_tbf_dispatch_queued(tbf_bucket_t *bucket)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t xcont = _gf_false;</div><div class='del'>-        tbf_throttle_t *tmp = NULL;</div><div class='del'>-        tbf_throttle_t *throttle = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (throttle, tmp, &amp;bucket-&gt;queued, list) {</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock (&amp;throttle-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (bucket-&gt;tokens &lt; throttle-&gt;tokens) {</div><div class='del'>-                                xcont = _gf_true;</div><div class='del'>-                                goto unblock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* this request can now be serviced */</div><div class='del'>-                        throttle-&gt;done = 1;</div><div class='del'>-                        list_del_init (&amp;throttle-&gt;list);</div><div class='del'>-</div><div class='del'>-                        bucket-&gt;tokens -= throttle-&gt;tokens;</div><div class='del'>-                        pthread_cond_signal (&amp;throttle-&gt;cond);</div><div class='del'>-                }</div><div class='del'>-        unblock:</div><div class='del'>-                pthread_mutex_unlock (&amp;throttle-&gt;mutex);</div><div class='del'>-                if (xcont)</div><div class='del'>-                        break;</div><div class='add'>+    gf_boolean_t xcont = _gf_false;</div><div class='add'>+    tbf_throttle_t *tmp = NULL;</div><div class='add'>+    tbf_throttle_t *throttle = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(throttle, tmp, &amp;bucket-&gt;queued, list)</div><div class='add'>+    {</div><div class='add'>+        pthread_mutex_lock(&amp;throttle-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            if (bucket-&gt;tokens &lt; throttle-&gt;tokens) {</div><div class='add'>+                xcont = _gf_true;</div><div class='add'>+                goto unblock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* this request can now be serviced */</div><div class='add'>+            throttle-&gt;done = 1;</div><div class='add'>+            list_del_init(&amp;throttle-&gt;list);</div><div class='add'>+</div><div class='add'>+            bucket-&gt;tokens -= throttle-&gt;tokens;</div><div class='add'>+            pthread_cond_signal(&amp;throttle-&gt;cond);</div><div class='ctx'>         }</div><div class='add'>+    unblock:</div><div class='add'>+        pthread_mutex_unlock(&amp;throttle-&gt;mutex);</div><div class='add'>+        if (xcont)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void *tbf_tokengenerator (void *arg)</div><div class='add'>+void *</div><div class='add'>+tbf_tokengenerator(void *arg)</div><div class='ctx'> {</div><div class='del'>-        unsigned long tokenrate = 0;</div><div class='del'>-        unsigned long maxtokens = 0;</div><div class='del'>-        unsigned long token_gen_interval = 0;</div><div class='del'>-        tbf_bucket_t *bucket = arg;</div><div class='del'>-</div><div class='del'>-        tokenrate = bucket-&gt;tokenrate;</div><div class='del'>-        maxtokens = bucket-&gt;maxtokens;</div><div class='del'>-        token_gen_interval = bucket-&gt;token_gen_interval;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                usleep (token_gen_interval);</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;bucket-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        bucket-&gt;tokens += tokenrate;</div><div class='del'>-                        if (bucket-&gt;tokens &gt; maxtokens)</div><div class='del'>-                                bucket-&gt;tokens = maxtokens;</div><div class='del'>-</div><div class='del'>-                        if (!list_empty (&amp;bucket-&gt;queued))</div><div class='del'>-                                _tbf_dispatch_queued (bucket);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;bucket-&gt;lock);</div><div class='add'>+    unsigned long tokenrate = 0;</div><div class='add'>+    unsigned long maxtokens = 0;</div><div class='add'>+    unsigned long token_gen_interval = 0;</div><div class='add'>+    tbf_bucket_t *bucket = arg;</div><div class='add'>+</div><div class='add'>+    tokenrate = bucket-&gt;tokenrate;</div><div class='add'>+    maxtokens = bucket-&gt;maxtokens;</div><div class='add'>+    token_gen_interval = bucket-&gt;token_gen_interval;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        usleep(token_gen_interval);</div><div class='add'>+</div><div class='add'>+        LOCK(&amp;bucket-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            bucket-&gt;tokens += tokenrate;</div><div class='add'>+            if (bucket-&gt;tokens &gt; maxtokens)</div><div class='add'>+                bucket-&gt;tokens = maxtokens;</div><div class='add'>+</div><div class='add'>+            if (!list_empty(&amp;bucket-&gt;queued))</div><div class='add'>+                _tbf_dispatch_queued(bucket);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;bucket-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -122,170 +122,169 @@ void *tbf_tokengenerator (void *arg)</div><div class='ctx'>  * updated _after_ all the required variables are initialized.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-tbf_init_bucket (tbf_t *tbf, tbf_opspec_t *spec)</div><div class='add'>+tbf_init_bucket(tbf_t *tbf, tbf_opspec_t *spec)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        tbf_bucket_t *curr = NULL;</div><div class='del'>-        tbf_bucket_t **bucket = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    tbf_bucket_t *curr = NULL;</div><div class='add'>+    tbf_bucket_t **bucket = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (spec-&gt;op &gt;= TBF_OP_MIN);</div><div class='del'>-        GF_ASSERT (spec-&gt;op &lt;= TBF_OP_MAX);</div><div class='add'>+    GF_ASSERT(spec-&gt;op &gt;= TBF_OP_MIN);</div><div class='add'>+    GF_ASSERT(spec-&gt;op &lt;= TBF_OP_MAX);</div><div class='ctx'> </div><div class='del'>-        /* no rate? no throttling. */</div><div class='del'>-        if (!spec-&gt;rate)</div><div class='del'>-                return 0;</div><div class='add'>+    /* no rate? no throttling. */</div><div class='add'>+    if (!spec-&gt;rate)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        bucket = tbf-&gt;bucket + spec-&gt;op;</div><div class='add'>+    bucket = tbf-&gt;bucket + spec-&gt;op;</div><div class='ctx'> </div><div class='del'>-        curr = GF_CALLOC (1, sizeof (*curr), gf_common_mt_tbf_bucket_t);</div><div class='del'>-        if (!curr)</div><div class='del'>-                goto error_return;</div><div class='add'>+    curr = GF_CALLOC(1, sizeof(*curr), gf_common_mt_tbf_bucket_t);</div><div class='add'>+    if (!curr)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;curr-&gt;lock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;curr-&gt;queued);</div><div class='add'>+    LOCK_INIT(&amp;curr-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;curr-&gt;queued);</div><div class='ctx'> </div><div class='del'>-        curr-&gt;tokens = 0;</div><div class='del'>-        curr-&gt;tokenrate = spec-&gt;rate;</div><div class='del'>-        curr-&gt;maxtokens = spec-&gt;maxlimit;</div><div class='del'>-        curr-&gt;token_gen_interval = spec-&gt;token_gen_interval;</div><div class='add'>+    curr-&gt;tokens = 0;</div><div class='add'>+    curr-&gt;tokenrate = spec-&gt;rate;</div><div class='add'>+    curr-&gt;maxtokens = spec-&gt;maxlimit;</div><div class='add'>+    curr-&gt;token_gen_interval = spec-&gt;token_gen_interval;</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_create (&amp;curr-&gt;tokener,</div><div class='del'>-                                NULL, tbf_tokengenerator, curr, "tbfclock");</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto freemem;</div><div class='add'>+    ret = gf_thread_create(&amp;curr-&gt;tokener, NULL, tbf_tokengenerator, curr,</div><div class='add'>+                           "tbfclock");</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto freemem;</div><div class='ctx'> </div><div class='del'>-        *bucket = curr;</div><div class='del'>-        return 0;</div><div class='add'>+    *bucket = curr;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- freemem:</div><div class='del'>-        LOCK_DESTROY (&amp;curr-&gt;lock);</div><div class='del'>-        GF_FREE (curr);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+freemem:</div><div class='add'>+    LOCK_DESTROY(&amp;curr-&gt;lock);</div><div class='add'>+    GF_FREE(curr);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define TBF_ALLOC_SIZE                                               \</div><div class='del'>-        (sizeof (tbf_t) + (TBF_OP_MAX * sizeof (tbf_bucket_t)))</div><div class='add'>+#define TBF_ALLOC_SIZE (sizeof(tbf_t) + (TBF_OP_MAX * sizeof(tbf_bucket_t)))</div><div class='ctx'> </div><div class='ctx'> tbf_t *</div><div class='del'>-tbf_init (tbf_opspec_t *tbfspec, unsigned int count)</div><div class='add'>+tbf_init(tbf_opspec_t *tbfspec, unsigned int count)</div><div class='ctx'> {</div><div class='del'>-        int32_t i = 0;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        tbf_t *tbf = NULL;</div><div class='del'>-        tbf_opspec_t *opspec = NULL;</div><div class='del'>-</div><div class='del'>-        tbf = GF_CALLOC (1, TBF_ALLOC_SIZE, gf_common_mt_tbf_t);</div><div class='del'>-        if (!tbf)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        tbf-&gt;bucket = (tbf_bucket_t **) ((char *)tbf + sizeof (*tbf));</div><div class='del'>-        for (i = 0; i &lt; TBF_OP_MAX; i++) {</div><div class='del'>-                *(tbf-&gt;bucket + i) = NULL;</div><div class='del'>-        }</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    tbf_t *tbf = NULL;</div><div class='add'>+    tbf_opspec_t *opspec = NULL;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                opspec = tbfspec + i;</div><div class='add'>+    tbf = GF_CALLOC(1, TBF_ALLOC_SIZE, gf_common_mt_tbf_t);</div><div class='add'>+    if (!tbf)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-                ret = tbf_init_bucket (tbf, opspec);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    tbf-&gt;bucket = (tbf_bucket_t **)((char *)tbf + sizeof(*tbf));</div><div class='add'>+    for (i = 0; i &lt; TBF_OP_MAX; i++) {</div><div class='add'>+        *(tbf-&gt;bucket + i) = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        opspec = tbfspec + i;</div><div class='add'>+</div><div class='add'>+        ret = tbf_init_bucket(tbf, opspec);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return tbf;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+    return tbf;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-tbf_mod_bucket (tbf_bucket_t *bucket, tbf_opspec_t *spec)</div><div class='add'>+tbf_mod_bucket(tbf_bucket_t *bucket, tbf_opspec_t *spec)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;bucket-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                bucket-&gt;tokens = 0;</div><div class='del'>-                bucket-&gt;tokenrate = spec-&gt;rate;</div><div class='del'>-                bucket-&gt;maxtokens = spec-&gt;maxlimit;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;bucket-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* next token tick would unqueue pending operations */</div><div class='add'>+    LOCK(&amp;bucket-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        bucket-&gt;tokens = 0;</div><div class='add'>+        bucket-&gt;tokenrate = spec-&gt;rate;</div><div class='add'>+        bucket-&gt;maxtokens = spec-&gt;maxlimit;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;bucket-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* next token tick would unqueue pending operations */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tbf_mod (tbf_t *tbf, tbf_opspec_t *tbfspec)</div><div class='add'>+tbf_mod(tbf_t *tbf, tbf_opspec_t *tbfspec)</div><div class='ctx'> {</div><div class='del'>-        int              ret    = 0;</div><div class='del'>-        tbf_bucket_t *bucket = NULL;</div><div class='del'>-        tbf_ops_t     op     = TBF_OP_MIN;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    tbf_bucket_t *bucket = NULL;</div><div class='add'>+    tbf_ops_t op = TBF_OP_MIN;</div><div class='ctx'> </div><div class='del'>-        if (!tbf || !tbfspec)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!tbf || !tbfspec)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        op = tbfspec-&gt;op;</div><div class='add'>+    op = tbfspec-&gt;op;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (op &gt;= TBF_OP_MIN);</div><div class='del'>-        GF_ASSERT (op &lt;= TBF_OP_MAX);</div><div class='add'>+    GF_ASSERT(op &gt;= TBF_OP_MIN);</div><div class='add'>+    GF_ASSERT(op &lt;= TBF_OP_MAX);</div><div class='ctx'> </div><div class='del'>-        bucket = *(tbf-&gt;bucket + op);</div><div class='del'>-        if (bucket) {</div><div class='del'>-                tbf_mod_bucket (bucket, tbfspec);</div><div class='del'>-        } else {</div><div class='del'>-                ret = tbf_init_bucket (tbf, tbfspec);</div><div class='del'>-        }</div><div class='add'>+    bucket = *(tbf-&gt;bucket + op);</div><div class='add'>+    if (bucket) {</div><div class='add'>+        tbf_mod_bucket(bucket, tbfspec);</div><div class='add'>+    } else {</div><div class='add'>+        ret = tbf_init_bucket(tbf, tbfspec);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-tbf_throttle (tbf_t *tbf, tbf_ops_t op, unsigned long tokens_requested)</div><div class='add'>+tbf_throttle(tbf_t *tbf, tbf_ops_t op, unsigned long tokens_requested)</div><div class='ctx'> {</div><div class='del'>-        char waitq = 0;</div><div class='del'>-        tbf_bucket_t *bucket = NULL;</div><div class='del'>-        tbf_throttle_t *throttle = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (op &gt;= TBF_OP_MIN);</div><div class='del'>-        GF_ASSERT (op &lt;= TBF_OP_MAX);</div><div class='del'>-</div><div class='del'>-        bucket = *(tbf-&gt;bucket + op);</div><div class='del'>-        if (!bucket)</div><div class='del'>-                return;</div><div class='add'>+    char waitq = 0;</div><div class='add'>+    tbf_bucket_t *bucket = NULL;</div><div class='add'>+    tbf_throttle_t *throttle = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(op &gt;= TBF_OP_MIN);</div><div class='add'>+    GF_ASSERT(op &lt;= TBF_OP_MAX);</div><div class='add'>+</div><div class='add'>+    bucket = *(tbf-&gt;bucket + op);</div><div class='add'>+    if (!bucket)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;bucket-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /**</div><div class='add'>+         * if there are enough tokens in the bucket there is no need</div><div class='add'>+         * to throttle the request: therefore, consume the required</div><div class='add'>+         * number of tokens and continue.</div><div class='add'>+         */</div><div class='add'>+        if (tokens_requested &lt;= bucket-&gt;tokens) {</div><div class='add'>+            bucket-&gt;tokens -= tokens_requested;</div><div class='add'>+        } else {</div><div class='add'>+            throttle = tbf_init_throttle(tokens_requested);</div><div class='add'>+            if (!throttle) /* let it slip through for now.. */</div><div class='add'>+                goto unblock;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;bucket-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /**</div><div class='del'>-                 * if there are enough tokens in the bucket there is no need</div><div class='del'>-                 * to throttle the request: therefore, consume the required</div><div class='del'>-                 * number of tokens and continue.</div><div class='del'>-                 */</div><div class='del'>-                if (tokens_requested &lt;= bucket-&gt;tokens) {</div><div class='del'>-                        bucket-&gt;tokens -= tokens_requested;</div><div class='del'>-                } else {</div><div class='del'>-                        throttle = tbf_init_throttle (tokens_requested);</div><div class='del'>-                        if (!throttle) /* let it slip through for now.. */</div><div class='del'>-                                goto unblock;</div><div class='del'>-</div><div class='del'>-                        waitq = 1;</div><div class='del'>-                        pthread_mutex_lock (&amp;throttle-&gt;mutex);</div><div class='del'>-                        list_add_tail (&amp;throttle-&gt;list, &amp;bucket-&gt;queued);</div><div class='del'>-                }</div><div class='add'>+            waitq = 1;</div><div class='add'>+            pthread_mutex_lock(&amp;throttle-&gt;mutex);</div><div class='add'>+            list_add_tail(&amp;throttle-&gt;list, &amp;bucket-&gt;queued);</div><div class='ctx'>         }</div><div class='del'>- unblock:</div><div class='del'>-        UNLOCK (&amp;bucket-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+unblock:</div><div class='add'>+    UNLOCK(&amp;bucket-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (waitq) {</div><div class='del'>-                while (!throttle-&gt;done) {</div><div class='del'>-                        pthread_cond_wait (&amp;throttle-&gt;cond, &amp;throttle-&gt;mutex);</div><div class='del'>-                }</div><div class='add'>+    if (waitq) {</div><div class='add'>+        while (!throttle-&gt;done) {</div><div class='add'>+            pthread_cond_wait(&amp;throttle-&gt;cond, &amp;throttle-&gt;mutex);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_unlock (&amp;throttle-&gt;mutex);</div><div class='add'>+        pthread_mutex_unlock(&amp;throttle-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_destroy (&amp;throttle-&gt;mutex);</div><div class='del'>-                pthread_cond_destroy (&amp;throttle-&gt;cond);</div><div class='add'>+        pthread_mutex_destroy(&amp;throttle-&gt;mutex);</div><div class='add'>+        pthread_cond_destroy(&amp;throttle-&gt;cond);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (throttle);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(throttle);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/timer.c b/libglusterfs/src/timer.c<br/>index 68ac7b0edff..88a28a9bd16 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/timer.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/timer.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/timer.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/timer.c</a></div><div class='hunk'>@@ -17,265 +17,255 @@</div><div class='ctx'> </div><div class='ctx'> /* fwd decl */</div><div class='ctx'> static gf_timer_registry_t *</div><div class='del'>-gf_timer_registry_init (glusterfs_ctx_t *);</div><div class='add'>+gf_timer_registry_init(glusterfs_ctx_t *);</div><div class='ctx'> </div><div class='ctx'> gf_timer_t *</div><div class='del'>-gf_timer_call_after (glusterfs_ctx_t *ctx,</div><div class='del'>-                     struct timespec delta,</div><div class='del'>-                     gf_timer_cbk_t callbk,</div><div class='del'>-                     void *data)</div><div class='add'>+gf_timer_call_after(glusterfs_ctx_t *ctx, struct timespec delta,</div><div class='add'>+                    gf_timer_cbk_t callbk, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_timer_registry_t *reg = NULL;</div><div class='del'>-        gf_timer_t *event = NULL;</div><div class='del'>-        gf_timer_t *trav = NULL;</div><div class='del'>-        uint64_t at = 0;</div><div class='del'>-</div><div class='del'>-        if ((ctx == NULL) || (ctx-&gt;cleanup_started))</div><div class='del'>-        {</div><div class='del'>-                gf_msg_callingfn ("timer", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "Either ctx is NULL or"</div><div class='del'>-                                  " ctx cleanup started");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    gf_timer_registry_t *reg = NULL;</div><div class='add'>+    gf_timer_t *event = NULL;</div><div class='add'>+    gf_timer_t *trav = NULL;</div><div class='add'>+    uint64_t at = 0;</div><div class='add'>+</div><div class='add'>+    if ((ctx == NULL) || (ctx-&gt;cleanup_started)) {</div><div class='add'>+        gf_msg_callingfn("timer", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "Either ctx is NULL or"</div><div class='add'>+                         " ctx cleanup started");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        reg = gf_timer_registry_init (ctx);</div><div class='add'>+    reg = gf_timer_registry_init(ctx);</div><div class='ctx'> </div><div class='del'>-        if (!reg) {</div><div class='del'>-                gf_msg_callingfn ("timer", GF_LOG_ERROR, 0,</div><div class='del'>-                                  LG_MSG_TIMER_REGISTER_ERROR, "!reg");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (!reg) {</div><div class='add'>+        gf_msg_callingfn("timer", GF_LOG_ERROR, 0, LG_MSG_TIMER_REGISTER_ERROR,</div><div class='add'>+                         "!reg");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        event = GF_CALLOC (1, sizeof (*event), gf_common_mt_gf_timer_t);</div><div class='del'>-        if (!event) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        timespec_now (&amp;event-&gt;at);</div><div class='del'>-        timespec_adjust_delta (&amp;event-&gt;at, delta);</div><div class='del'>-        at = TS (event-&gt;at);</div><div class='del'>-        event-&gt;callbk = callbk;</div><div class='del'>-        event-&gt;data = data;</div><div class='del'>-        event-&gt;xl = THIS;</div><div class='del'>-        LOCK (&amp;reg-&gt;lock);</div><div class='add'>+    event = GF_CALLOC(1, sizeof(*event), gf_common_mt_gf_timer_t);</div><div class='add'>+    if (!event) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    timespec_now(&amp;event-&gt;at);</div><div class='add'>+    timespec_adjust_delta(&amp;event-&gt;at, delta);</div><div class='add'>+    at = TS(event-&gt;at);</div><div class='add'>+    event-&gt;callbk = callbk;</div><div class='add'>+    event-&gt;data = data;</div><div class='add'>+    event-&gt;xl = THIS;</div><div class='add'>+    LOCK(&amp;reg-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_reverse(trav, &amp;reg-&gt;active, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_reverse (trav, &amp;reg-&gt;active, list) {</div><div class='del'>-                        if (TS (trav-&gt;at) &lt; at)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-                list_add (&amp;event-&gt;list, &amp;trav-&gt;list);</div><div class='add'>+            if (TS(trav-&gt;at) &lt; at)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;reg-&gt;lock);</div><div class='del'>-        return event;</div><div class='add'>+        list_add(&amp;event-&gt;list, &amp;trav-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;reg-&gt;lock);</div><div class='add'>+    return event;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_timer_call_cancel (glusterfs_ctx_t *ctx,</div><div class='del'>-                      gf_timer_t *event)</div><div class='add'>+gf_timer_call_cancel(glusterfs_ctx_t *ctx, gf_timer_t *event)</div><div class='ctx'> {</div><div class='del'>-        gf_timer_registry_t *reg = NULL;</div><div class='del'>-        gf_boolean_t fired = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (ctx == NULL || event == NULL)</div><div class='del'>-        {</div><div class='del'>-                gf_msg_callingfn ("timer", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;cleanup_started) {</div><div class='del'>-                gf_msg_callingfn ("timer", GF_LOG_INFO, 0,</div><div class='del'>-                                  LG_MSG_CTX_CLEANUP_STARTED,</div><div class='del'>-                                  "ctx cleanup started");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                reg = ctx-&gt;timer;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!reg) {</div><div class='del'>-                /* This can happen when cleanup may have just started and</div><div class='del'>-                 * gf_timer_registry_destroy() sets ctx-&gt;timer to NULL.</div><div class='del'>-                 * Just bail out as success as gf_timer_proc() takes</div><div class='del'>-                 * care of cleaning up the events.</div><div class='del'>-                 */</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;reg-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fired = event-&gt;fired;</div><div class='del'>-                if (fired)</div><div class='del'>-                        goto unlock;</div><div class='del'>-                list_del (&amp;event-&gt;list);</div><div class='del'>-        }</div><div class='add'>+    gf_timer_registry_t *reg = NULL;</div><div class='add'>+    gf_boolean_t fired = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (ctx == NULL || event == NULL) {</div><div class='add'>+        gf_msg_callingfn("timer", GF_LOG_ERROR, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;cleanup_started) {</div><div class='add'>+        gf_msg_callingfn("timer", GF_LOG_INFO, 0, LG_MSG_CTX_CLEANUP_STARTED,</div><div class='add'>+                         "ctx cleanup started");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        reg = ctx-&gt;timer;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!reg) {</div><div class='add'>+        /* This can happen when cleanup may have just started and</div><div class='add'>+         * gf_timer_registry_destroy() sets ctx-&gt;timer to NULL.</div><div class='add'>+         * Just bail out as success as gf_timer_proc() takes</div><div class='add'>+         * care of cleaning up the events.</div><div class='add'>+         */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;reg-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fired = event-&gt;fired;</div><div class='add'>+        if (fired)</div><div class='add'>+            goto unlock;</div><div class='add'>+        list_del(&amp;event-&gt;list);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;reg-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;reg-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!fired) {</div><div class='del'>-                GF_FREE (event);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    if (!fired) {</div><div class='add'>+        GF_FREE(event);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void *</div><div class='del'>-gf_timer_proc (void *data)</div><div class='add'>+gf_timer_proc(void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_timer_registry_t *reg = data;</div><div class='del'>-        struct timespec sleepts;</div><div class='del'>-        gf_timer_t *event = NULL;</div><div class='del'>-        gf_timer_t *tmp = NULL;</div><div class='del'>-        xlator_t   *old_THIS = NULL;</div><div class='del'>-</div><div class='del'>-        while (!reg-&gt;fin) {</div><div class='del'>-                uint64_t now;</div><div class='del'>-                struct timespec now_ts;</div><div class='del'>-</div><div class='del'>-                timespec_now (&amp;now_ts);</div><div class='del'>-                now = TS (now_ts);</div><div class='del'>-                while (1) {</div><div class='del'>-                        uint64_t at;</div><div class='del'>-                        char need_cbk = 0;</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * This will be overridden with a shorter interval if</div><div class='del'>-                         * there's an event scheduled sooner. That makes the</div><div class='del'>-                         * system more responsive in most cases, but doesn't</div><div class='del'>-                         * include the case where a timer is added while we're</div><div class='del'>-                         * asleep. It's tempting to use pthread_cond_timedwait,</div><div class='del'>-                         * with the caveat that we'd be relying on system time</div><div class='del'>-                         * instead of monotonic time. That's a mess when the</div><div class='del'>-                         * system time is adjusted.  Another alternative might</div><div class='del'>-                         * be to use pthread_kill, but that will remain TBD for</div><div class='del'>-                         * now.</div><div class='del'>-                         */</div><div class='del'>-                        sleepts.tv_sec = 1;</div><div class='del'>-                        sleepts.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-                        LOCK (&amp;reg-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                /*</div><div class='del'>-                                 * Using list_for_each and then always breaking</div><div class='del'>-                                 * after the first iteration might seem strange,</div><div class='del'>-                                 * but (unlike alternatives) is independent of</div><div class='del'>-                                 * the underlying list implementation.</div><div class='del'>-                                 */</div><div class='del'>-                                list_for_each_entry_safe (event,</div><div class='del'>-                                             tmp, &amp;reg-&gt;active, list) {</div><div class='del'>-                                        at = TS (event-&gt;at);</div><div class='del'>-                                        if (now &gt;= at) {</div><div class='del'>-                                                need_cbk = 1;</div><div class='del'>-                                                event-&gt;fired = _gf_true;</div><div class='del'>-                                                list_del (&amp;event-&gt;list);</div><div class='del'>-                                        } else {</div><div class='del'>-                                                uint64_t diff = now - at;</div><div class='del'>-</div><div class='del'>-                                                if (diff &lt; 1000000000) {</div><div class='del'>-                                                        sleepts.tv_sec = 0;</div><div class='del'>-                                                        sleepts.tv_nsec = diff;</div><div class='del'>-                                                }</div><div class='del'>-                                        }</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;reg-&gt;lock);</div><div class='del'>-                        if (need_cbk) {</div><div class='del'>-                                old_THIS = NULL;</div><div class='del'>-                                if (event-&gt;xl) {</div><div class='del'>-                                        old_THIS = THIS;</div><div class='del'>-                                        THIS = event-&gt;xl;</div><div class='del'>-                                }</div><div class='del'>-                                event-&gt;callbk (event-&gt;data);</div><div class='del'>-                                GF_FREE (event);</div><div class='del'>-                                if (old_THIS) {</div><div class='del'>-                                        THIS = old_THIS;</div><div class='del'>-                                }</div><div class='del'>-                        } else {</div><div class='del'>-                                break;</div><div class='add'>+    gf_timer_registry_t *reg = data;</div><div class='add'>+    struct timespec sleepts;</div><div class='add'>+    gf_timer_t *event = NULL;</div><div class='add'>+    gf_timer_t *tmp = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+</div><div class='add'>+    while (!reg-&gt;fin) {</div><div class='add'>+        uint64_t now;</div><div class='add'>+        struct timespec now_ts;</div><div class='add'>+</div><div class='add'>+        timespec_now(&amp;now_ts);</div><div class='add'>+        now = TS(now_ts);</div><div class='add'>+        while (1) {</div><div class='add'>+            uint64_t at;</div><div class='add'>+            char need_cbk = 0;</div><div class='add'>+</div><div class='add'>+            /*</div><div class='add'>+             * This will be overridden with a shorter interval if</div><div class='add'>+             * there's an event scheduled sooner. That makes the</div><div class='add'>+             * system more responsive in most cases, but doesn't</div><div class='add'>+             * include the case where a timer is added while we're</div><div class='add'>+             * asleep. It's tempting to use pthread_cond_timedwait,</div><div class='add'>+             * with the caveat that we'd be relying on system time</div><div class='add'>+             * instead of monotonic time. That's a mess when the</div><div class='add'>+             * system time is adjusted.  Another alternative might</div><div class='add'>+             * be to use pthread_kill, but that will remain TBD for</div><div class='add'>+             * now.</div><div class='add'>+             */</div><div class='add'>+            sleepts.tv_sec = 1;</div><div class='add'>+            sleepts.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+            LOCK(&amp;reg-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                /*</div><div class='add'>+                 * Using list_for_each and then always breaking</div><div class='add'>+                 * after the first iteration might seem strange,</div><div class='add'>+                 * but (unlike alternatives) is independent of</div><div class='add'>+                 * the underlying list implementation.</div><div class='add'>+                 */</div><div class='add'>+                list_for_each_entry_safe(event, tmp, &amp;reg-&gt;active, list)</div><div class='add'>+                {</div><div class='add'>+                    at = TS(event-&gt;at);</div><div class='add'>+                    if (now &gt;= at) {</div><div class='add'>+                        need_cbk = 1;</div><div class='add'>+                        event-&gt;fired = _gf_true;</div><div class='add'>+                        list_del(&amp;event-&gt;list);</div><div class='add'>+                    } else {</div><div class='add'>+                        uint64_t diff = now - at;</div><div class='add'>+</div><div class='add'>+                        if (diff &lt; 1000000000) {</div><div class='add'>+                            sleepts.tv_sec = 0;</div><div class='add'>+                            sleepts.tv_nsec = diff;</div><div class='ctx'>                         }</div><div class='add'>+                    }</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;reg-&gt;lock);</div><div class='add'>+            if (need_cbk) {</div><div class='add'>+                old_THIS = NULL;</div><div class='add'>+                if (event-&gt;xl) {</div><div class='add'>+                    old_THIS = THIS;</div><div class='add'>+                    THIS = event-&gt;xl;</div><div class='ctx'>                 }</div><div class='del'>-                nanosleep (&amp;sleepts, NULL);</div><div class='add'>+                event-&gt;callbk(event-&gt;data);</div><div class='add'>+                GF_FREE(event);</div><div class='add'>+                if (old_THIS) {</div><div class='add'>+                    THIS = old_THIS;</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;reg-&gt;lock);</div><div class='add'>+        nanosleep(&amp;sleepts, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;reg-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* Do not call gf_timer_call_cancel(),</div><div class='add'>+         * it will lead to deadlock</div><div class='add'>+         */</div><div class='add'>+        list_for_each_entry_safe(event, tmp, &amp;reg-&gt;active, list)</div><div class='ctx'>         {</div><div class='del'>-                /* Do not call gf_timer_call_cancel(),</div><div class='del'>-                 * it will lead to deadlock</div><div class='del'>-                 */</div><div class='del'>-                list_for_each_entry_safe (event, tmp, &amp;reg-&gt;active, list) {</div><div class='del'>-                        list_del (&amp;event-&gt;list);</div><div class='del'>-                        GF_FREE (event);</div><div class='del'>-                }</div><div class='add'>+            list_del(&amp;event-&gt;list);</div><div class='add'>+            GF_FREE(event);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;reg-&gt;lock);</div><div class='del'>-        LOCK_DESTROY (&amp;reg-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;reg-&gt;lock);</div><div class='add'>+    LOCK_DESTROY(&amp;reg-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_timer_registry_t *</div><div class='del'>-gf_timer_registry_init (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_timer_registry_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        gf_timer_registry_t *reg = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                reg = ctx-&gt;timer;</div><div class='del'>-                if (reg) {</div><div class='del'>-                        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                reg = GF_CALLOC (1, sizeof (*reg),</div><div class='del'>-                              gf_common_mt_gf_timer_registry_t);</div><div class='del'>-                if (!reg) {</div><div class='del'>-                        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ctx-&gt;timer = reg;</div><div class='del'>-                LOCK_INIT (&amp;reg-&gt;lock);</div><div class='del'>-                INIT_LIST_HEAD (&amp;reg-&gt;active);</div><div class='add'>+    gf_timer_registry_t *reg = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        reg = ctx-&gt;timer;</div><div class='add'>+        if (reg) {</div><div class='add'>+            UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        ret = gf_thread_create (&amp;reg-&gt;th, NULL, gf_timer_proc, reg, "timer");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        LG_MSG_PTHREAD_FAILED,</div><div class='del'>-                        "Thread creation failed");</div><div class='add'>+        reg = GF_CALLOC(1, sizeof(*reg), gf_common_mt_gf_timer_registry_t);</div><div class='add'>+        if (!reg) {</div><div class='add'>+            UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ctx-&gt;timer = reg;</div><div class='add'>+        LOCK_INIT(&amp;reg-&gt;lock);</div><div class='add'>+        INIT_LIST_HEAD(&amp;reg-&gt;active);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    ret = gf_thread_create(&amp;reg-&gt;th, NULL, gf_timer_proc, reg, "timer");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, ret, LG_MSG_PTHREAD_FAILED,</div><div class='add'>+               "Thread creation failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return reg;</div><div class='add'>+    return reg;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_timer_registry_destroy (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_timer_registry_destroy(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        pthread_t thr_id;</div><div class='del'>-        gf_timer_registry_t *reg = NULL;</div><div class='del'>-</div><div class='del'>-        if (ctx == NULL)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                reg = ctx-&gt;timer;</div><div class='del'>-                ctx-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!reg)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        thr_id = reg-&gt;th;</div><div class='del'>-        reg-&gt;fin = 1;</div><div class='del'>-        pthread_join (thr_id, NULL);</div><div class='del'>-        GF_FREE (reg);</div><div class='add'>+    pthread_t thr_id;</div><div class='add'>+    gf_timer_registry_t *reg = NULL;</div><div class='add'>+</div><div class='add'>+    if (ctx == NULL)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        reg = ctx-&gt;timer;</div><div class='add'>+        ctx-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!reg)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    thr_id = reg-&gt;th;</div><div class='add'>+    reg-&gt;fin = 1;</div><div class='add'>+    pthread_join(thr_id, NULL);</div><div class='add'>+    GF_FREE(reg);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/timespec.c b/libglusterfs/src/timespec.c<br/>index 932a18c0103..d17506662ac 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/timespec.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/timespec.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/timespec.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/timespec.c</a></div><div class='hunk'>@@ -24,65 +24,69 @@ static mach_timebase_info_data_t gf_timebase;</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> #include "common-utils.h"</div><div class='ctx'> </div><div class='del'>-void timespec_now (struct timespec *ts)</div><div class='add'>+void</div><div class='add'>+timespec_now(struct timespec *ts)</div><div class='ctx'> {</div><div class='del'>-#if defined GF_LINUX_HOST_OS || defined GF_SOLARIS_HOST_OS || defined GF_BSD_HOST_OS</div><div class='del'>-        if (0 == clock_gettime(CLOCK_MONOTONIC, ts)) {</div><div class='del'>-                /* All good */</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+#if defined GF_LINUX_HOST_OS || defined GF_SOLARIS_HOST_OS ||                  \</div><div class='add'>+    defined GF_BSD_HOST_OS</div><div class='add'>+    if (0 == clock_gettime(CLOCK_MONOTONIC, ts)) {</div><div class='add'>+        /* All good */</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Fall back, but there is hope in gettimeofday() syscall */</div><div class='del'>-        struct timeval tv;</div><div class='del'>-        if (0 == gettimeofday(&amp;tv, NULL)) {</div><div class='del'>-                /* Again, all good */</div><div class='del'>-                TIMEVAL_TO_TIMESPEC(&amp;tv, ts);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    /* Fall back, but there is hope in gettimeofday() syscall */</div><div class='add'>+    struct timeval tv;</div><div class='add'>+    if (0 == gettimeofday(&amp;tv, NULL)) {</div><div class='add'>+        /* Again, all good */</div><div class='add'>+        TIMEVAL_TO_TIMESPEC(&amp;tv, ts);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* If control hits here, there is surely a problem,</div><div class='del'>-           mainly because, as per man page too, these syscalls</div><div class='del'>-           shouldn't fail. Best way is to ABORT, because it is</div><div class='del'>-           not right */</div><div class='del'>-        GF_ABORT ("gettimeofday() failed!!");</div><div class='add'>+    /* If control hits here, there is surely a problem,</div><div class='add'>+       mainly because, as per man page too, these syscalls</div><div class='add'>+       shouldn't fail. Best way is to ABORT, because it is</div><div class='add'>+       not right */</div><div class='add'>+    GF_ABORT("gettimeofday() failed!!");</div><div class='ctx'> </div><div class='ctx'> #elif defined GF_DARWIN_HOST_OS</div><div class='del'>-        uint64_t time = mach_absolute_time();</div><div class='del'>-        static double scaling = 0.0;</div><div class='add'>+    uint64_t time = mach_absolute_time();</div><div class='add'>+    static double scaling = 0.0;</div><div class='ctx'> </div><div class='del'>-        if (mach_timebase_info(&amp;gf_timebase) != KERN_SUCCESS) {</div><div class='del'>-                gf_timebase.numer = 1;</div><div class='del'>-                gf_timebase.denom = 1;</div><div class='del'>-        }</div><div class='del'>-        if (gf_timebase.denom == 0) {</div><div class='del'>-                gf_timebase.numer = 1;</div><div class='del'>-                gf_timebase.denom = 1;</div><div class='del'>-        }</div><div class='add'>+    if (mach_timebase_info(&amp;gf_timebase) != KERN_SUCCESS) {</div><div class='add'>+        gf_timebase.numer = 1;</div><div class='add'>+        gf_timebase.denom = 1;</div><div class='add'>+    }</div><div class='add'>+    if (gf_timebase.denom == 0) {</div><div class='add'>+        gf_timebase.numer = 1;</div><div class='add'>+        gf_timebase.denom = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        scaling = (double) gf_timebase.numer / (double) gf_timebase.denom;</div><div class='del'>-        time *= scaling;</div><div class='add'>+    scaling = (double)gf_timebase.numer / (double)gf_timebase.denom;</div><div class='add'>+    time *= scaling;</div><div class='ctx'> </div><div class='del'>-        ts-&gt;tv_sec = (time * NANO);</div><div class='del'>-        ts-&gt;tv_nsec = (time - (ts-&gt;tv_sec * GIGA));</div><div class='add'>+    ts-&gt;tv_sec = (time * NANO);</div><div class='add'>+    ts-&gt;tv_nsec = (time - (ts-&gt;tv_sec * GIGA));</div><div class='ctx'> </div><div class='ctx'> #endif /* Platform verification */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void timespec_adjust_delta (struct timespec *ts, struct timespec delta)</div><div class='add'>+void</div><div class='add'>+timespec_adjust_delta(struct timespec *ts, struct timespec delta)</div><div class='ctx'> {</div><div class='del'>-        ts-&gt;tv_nsec = ((ts-&gt;tv_nsec + delta.tv_nsec) % 1000000000);</div><div class='del'>-        ts-&gt;tv_sec += ((ts-&gt;tv_nsec + delta.tv_nsec) / 1000000000);</div><div class='del'>-        ts-&gt;tv_sec += delta.tv_sec;</div><div class='add'>+    ts-&gt;tv_nsec = ((ts-&gt;tv_nsec + delta.tv_nsec) % 1000000000);</div><div class='add'>+    ts-&gt;tv_sec += ((ts-&gt;tv_nsec + delta.tv_nsec) / 1000000000);</div><div class='add'>+    ts-&gt;tv_sec += delta.tv_sec;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void timespec_sub (const struct timespec *begin, const struct timespec *end,</div><div class='del'>-                   struct timespec *res)</div><div class='add'>+void</div><div class='add'>+timespec_sub(const struct timespec *begin, const struct timespec *end,</div><div class='add'>+             struct timespec *res)</div><div class='ctx'> {</div><div class='del'>-        if (end-&gt;tv_nsec &lt; begin-&gt;tv_nsec) {</div><div class='del'>-                res-&gt;tv_sec = end-&gt;tv_sec - begin-&gt;tv_sec - 1;</div><div class='del'>-                res-&gt;tv_nsec = end-&gt;tv_nsec + 1000000000 - begin-&gt;tv_nsec;</div><div class='del'>-        } else {</div><div class='del'>-                res-&gt;tv_sec = end-&gt;tv_sec - begin-&gt;tv_sec;</div><div class='del'>-                res-&gt;tv_nsec = end-&gt;tv_nsec - begin-&gt;tv_nsec;</div><div class='del'>-        }</div><div class='add'>+    if (end-&gt;tv_nsec &lt; begin-&gt;tv_nsec) {</div><div class='add'>+        res-&gt;tv_sec = end-&gt;tv_sec - begin-&gt;tv_sec - 1;</div><div class='add'>+        res-&gt;tv_nsec = end-&gt;tv_nsec + 1000000000 - begin-&gt;tv_nsec;</div><div class='add'>+    } else {</div><div class='add'>+        res-&gt;tv_sec = end-&gt;tv_sec - begin-&gt;tv_sec;</div><div class='add'>+        res-&gt;tv_nsec = end-&gt;tv_nsec - begin-&gt;tv_nsec;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/trie.c b/libglusterfs/src/trie.c<br/>index f96bbebf6d3..4f01bcfe0da 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/trie.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/trie.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/trie.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/trie.c</a></div><div class='hunk'>@@ -17,371 +17,352 @@</div><div class='ctx'> #include "trie.h"</div><div class='ctx'> </div><div class='ctx'> #define DISTANCE_EDIT 1</div><div class='del'>-#define DISTANCE_INS  1</div><div class='del'>-#define DISTANCE_DEL  1</div><div class='del'>-</div><div class='add'>+#define DISTANCE_INS 1</div><div class='add'>+#define DISTANCE_DEL 1</div><div class='ctx'> </div><div class='ctx'> struct trienode {</div><div class='del'>-        char             id;</div><div class='del'>-        char             eow;</div><div class='del'>-        int              depth;</div><div class='del'>-        void            *data;</div><div class='del'>-        struct trie     *trie;</div><div class='del'>-        struct trienode *parent;</div><div class='del'>-        struct trienode *subnodes[255];</div><div class='add'>+    char id;</div><div class='add'>+    char eow;</div><div class='add'>+    int depth;</div><div class='add'>+    void *data;</div><div class='add'>+    struct trie *trie;</div><div class='add'>+    struct trienode *parent;</div><div class='add'>+    struct trienode *subnodes[255];</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct trie {</div><div class='del'>-        struct trienode   root;</div><div class='del'>-        int               nodecnt;</div><div class='del'>-        size_t            len;</div><div class='add'>+    struct trienode root;</div><div class='add'>+    int nodecnt;</div><div class='add'>+    size_t len;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> trie_t *</div><div class='del'>-trie_new ()</div><div class='add'>+trie_new()</div><div class='ctx'> {</div><div class='del'>-        trie_t *trie = NULL;</div><div class='add'>+    trie_t *trie = NULL;</div><div class='ctx'> </div><div class='del'>-        trie = GF_CALLOC (1, sizeof (*trie),  gf_common_mt_trie_trie);</div><div class='del'>-        if (!trie)</div><div class='del'>-                return NULL;</div><div class='add'>+    trie = GF_CALLOC(1, sizeof(*trie), gf_common_mt_trie_trie);</div><div class='add'>+    if (!trie)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        trie-&gt;root.trie = trie;</div><div class='add'>+    trie-&gt;root.trie = trie;</div><div class='ctx'> </div><div class='del'>-        return trie;</div><div class='add'>+    return trie;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static trienode_t *</div><div class='del'>-trie_subnode (trienode_t *node, int id)</div><div class='add'>+trie_subnode(trienode_t *node, int id)</div><div class='ctx'> {</div><div class='del'>-        trienode_t *subnode = NULL;</div><div class='del'>-</div><div class='del'>-        subnode = node-&gt;subnodes[id];</div><div class='del'>-        if (!subnode) {</div><div class='del'>-                subnode = GF_CALLOC (1, sizeof (*subnode),</div><div class='del'>-                                     gf_common_mt_trie_node);</div><div class='del'>-                if (!subnode)</div><div class='del'>-                        return NULL;</div><div class='del'>-</div><div class='del'>-                subnode-&gt;id        = id;</div><div class='del'>-                subnode-&gt;depth     = node-&gt;depth + 1;</div><div class='del'>-                node-&gt;subnodes[id] = subnode;</div><div class='del'>-                subnode-&gt;parent    = node;</div><div class='del'>-                subnode-&gt;trie      = node-&gt;trie;</div><div class='del'>-                node-&gt;trie-&gt;nodecnt++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return subnode;</div><div class='add'>+    trienode_t *subnode = NULL;</div><div class='add'>+</div><div class='add'>+    subnode = node-&gt;subnodes[id];</div><div class='add'>+    if (!subnode) {</div><div class='add'>+        subnode = GF_CALLOC(1, sizeof(*subnode), gf_common_mt_trie_node);</div><div class='add'>+        if (!subnode)</div><div class='add'>+            return NULL;</div><div class='add'>+</div><div class='add'>+        subnode-&gt;id = id;</div><div class='add'>+        subnode-&gt;depth = node-&gt;depth + 1;</div><div class='add'>+        node-&gt;subnodes[id] = subnode;</div><div class='add'>+        subnode-&gt;parent = node;</div><div class='add'>+        subnode-&gt;trie = node-&gt;trie;</div><div class='add'>+        node-&gt;trie-&gt;nodecnt++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return subnode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-trie_add (trie_t *trie, const char *dword)</div><div class='add'>+trie_add(trie_t *trie, const char *dword)</div><div class='ctx'> {</div><div class='del'>-        trienode_t *node = NULL;</div><div class='del'>-        int              i = 0;</div><div class='del'>-        char             id = 0;</div><div class='del'>-        trienode_t *subnode = NULL;</div><div class='add'>+    trienode_t *node = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char id = 0;</div><div class='add'>+    trienode_t *subnode = NULL;</div><div class='ctx'> </div><div class='del'>-        node = &amp;trie-&gt;root;</div><div class='add'>+    node = &amp;trie-&gt;root;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; strlen (dword); i++) {</div><div class='del'>-                id = dword[i];</div><div class='add'>+    for (i = 0; i &lt; strlen(dword); i++) {</div><div class='add'>+        id = dword[i];</div><div class='ctx'> </div><div class='del'>-                subnode = trie_subnode (node, id);</div><div class='del'>-                if (!subnode)</div><div class='del'>-                        return -1;</div><div class='del'>-                node = subnode;</div><div class='del'>-        }</div><div class='add'>+        subnode = trie_subnode(node, id);</div><div class='add'>+        if (!subnode)</div><div class='add'>+            return -1;</div><div class='add'>+        node = subnode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        node-&gt;eow = 1;</div><div class='add'>+    node-&gt;eow = 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-trienode_free (trienode_t *node)</div><div class='add'>+trienode_free(trienode_t *node)</div><div class='ctx'> {</div><div class='del'>-        trienode_t *trav = NULL;</div><div class='del'>-        int              i = 0;</div><div class='add'>+    trienode_t *trav = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 255; i++) {</div><div class='del'>-                trav = node-&gt;subnodes[i];</div><div class='add'>+    for (i = 0; i &lt; 255; i++) {</div><div class='add'>+        trav = node-&gt;subnodes[i];</div><div class='ctx'> </div><div class='del'>-                if (trav)</div><div class='del'>-                        trienode_free (trav);</div><div class='del'>-        }</div><div class='add'>+        if (trav)</div><div class='add'>+            trienode_free(trav);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (node-&gt;data);</div><div class='del'>-        GF_FREE (node);</div><div class='add'>+    GF_FREE(node-&gt;data);</div><div class='add'>+    GF_FREE(node);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-trie_destroy (trie_t *trie)</div><div class='add'>+trie_destroy(trie_t *trie)</div><div class='ctx'> {</div><div class='del'>-        trienode_free ((trienode_t *)trie);</div><div class='add'>+    trienode_free((trienode_t *)trie);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-trie_destroy_bynode (trienode_t *node)</div><div class='add'>+trie_destroy_bynode(trienode_t *node)</div><div class='ctx'> {</div><div class='del'>-        trie_destroy (node-&gt;trie);</div><div class='add'>+    trie_destroy(node-&gt;trie);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-trienode_walk (trienode_t *node, int (*fn)(trienode_t *node, void *data),</div><div class='del'>-               void *data, int eowonly)</div><div class='add'>+trienode_walk(trienode_t *node, int (*fn)(trienode_t *node, void *data),</div><div class='add'>+              void *data, int eowonly)</div><div class='ctx'> {</div><div class='del'>-        trienode_t *trav = NULL;</div><div class='del'>-        int              i = 0;</div><div class='del'>-        int              cret = 0;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-</div><div class='del'>-        if (!eowonly || node-&gt;eow)</div><div class='del'>-                ret = fn (node, data);</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 255; i++) {</div><div class='del'>-                trav = node-&gt;subnodes[i];</div><div class='del'>-                if (!trav)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                cret = trienode_walk (trav, fn, data, eowonly);</div><div class='del'>-                if (cret &lt; 0) {</div><div class='del'>-                        ret = cret;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret += cret;</div><div class='add'>+    trienode_t *trav = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int cret = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!eowonly || node-&gt;eow)</div><div class='add'>+        ret = fn(node, data);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 255; i++) {</div><div class='add'>+        trav = node-&gt;subnodes[i];</div><div class='add'>+        if (!trav)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        cret = trienode_walk(trav, fn, data, eowonly);</div><div class='add'>+        if (cret &lt; 0) {</div><div class='add'>+            ret = cret;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret += cret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-trie_walk (trie_t *trie, int (*fn)(trienode_t *node, void *data),</div><div class='del'>-           void *data, int eowonly)</div><div class='add'>+trie_walk(trie_t *trie, int (*fn)(trienode_t *node, void *data), void *data,</div><div class='add'>+          int eowonly)</div><div class='ctx'> {</div><div class='del'>-        return trienode_walk (&amp;trie-&gt;root, fn, data, eowonly);</div><div class='add'>+    return trienode_walk(&amp;trie-&gt;root, fn, data, eowonly);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-print_node (trienode_t *node, char **buf)</div><div class='add'>+print_node(trienode_t *node, char **buf)</div><div class='ctx'> {</div><div class='del'>-        if (!node-&gt;parent)</div><div class='del'>-                return;</div><div class='add'>+    if (!node-&gt;parent)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (node-&gt;parent) {</div><div class='del'>-                print_node (node-&gt;parent, buf);</div><div class='del'>-                *(*buf)++ = node-&gt;id;</div><div class='del'>-        }</div><div class='add'>+    if (node-&gt;parent) {</div><div class='add'>+        print_node(node-&gt;parent, buf);</div><div class='add'>+        *(*buf)++ = node-&gt;id;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-trienode_get_word (trienode_t *node, char **bufp)</div><div class='add'>+trienode_get_word(trienode_t *node, char **bufp)</div><div class='ctx'> {</div><div class='del'>-        char *buf = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        buf = GF_CALLOC (1, node-&gt;depth + 1, gf_common_mt_trie_buf);</div><div class='del'>-        if (!buf)</div><div class='del'>-                return -1;</div><div class='del'>-        *bufp = buf;</div><div class='add'>+    buf = GF_CALLOC(1, node-&gt;depth + 1, gf_common_mt_trie_buf);</div><div class='add'>+    if (!buf)</div><div class='add'>+        return -1;</div><div class='add'>+    *bufp = buf;</div><div class='ctx'> </div><div class='del'>-        print_node (node, &amp;buf);</div><div class='add'>+    print_node(node, &amp;buf);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-calc_dist (trienode_t *node, void *data)</div><div class='add'>+calc_dist(trienode_t *node, void *data)</div><div class='ctx'> {</div><div class='del'>-        const char *word = NULL;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        int        *row = NULL;</div><div class='del'>-        int        *uprow = NULL;</div><div class='del'>-        int         distu = 0;</div><div class='del'>-        int         distl = 0;</div><div class='del'>-        int         distul = 0;</div><div class='del'>-</div><div class='del'>-        word = data;</div><div class='del'>-</div><div class='del'>-        node-&gt;data = GF_CALLOC (node-&gt;trie-&gt;len, sizeof (int),</div><div class='del'>-                                gf_common_mt_trie_data);</div><div class='del'>-        if (!node-&gt;data)</div><div class='del'>-                return -1;</div><div class='del'>-        row = node-&gt;data;</div><div class='del'>-</div><div class='del'>-        if (!node-&gt;parent) {</div><div class='del'>-                for (i = 0; i &lt; node-&gt;trie-&gt;len; i++)</div><div class='del'>-                        row[i] = i+1;</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    const char *word = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int *row = NULL;</div><div class='add'>+    int *uprow = NULL;</div><div class='add'>+    int distu = 0;</div><div class='add'>+    int distl = 0;</div><div class='add'>+    int distul = 0;</div><div class='add'>+</div><div class='add'>+    word = data;</div><div class='add'>+</div><div class='add'>+    node-&gt;data = GF_CALLOC(node-&gt;trie-&gt;len, sizeof(int),</div><div class='add'>+                           gf_common_mt_trie_data);</div><div class='add'>+    if (!node-&gt;data)</div><div class='add'>+        return -1;</div><div class='add'>+    row = node-&gt;data;</div><div class='add'>+</div><div class='add'>+    if (!node-&gt;parent) {</div><div class='add'>+        for (i = 0; i &lt; node-&gt;trie-&gt;len; i++)</div><div class='add'>+            row[i] = i + 1;</div><div class='ctx'> </div><div class='del'>-        uprow = node-&gt;parent-&gt;data;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        distu = node-&gt;depth;          /* up node */</div><div class='del'>-        distul = node-&gt;parent-&gt;depth; /* up-left node */</div><div class='add'>+    uprow = node-&gt;parent-&gt;data;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; node-&gt;trie-&gt;len; i++) {</div><div class='del'>-                distl = uprow[i];     /* left node */</div><div class='add'>+    distu = node-&gt;depth;          /* up node */</div><div class='add'>+    distul = node-&gt;parent-&gt;depth; /* up-left node */</div><div class='ctx'> </div><div class='del'>-                if (word[i] == node-&gt;id)</div><div class='del'>-                        row[i] = distul;</div><div class='del'>-                else</div><div class='del'>-                        row[i] = min ((distul + DISTANCE_EDIT),</div><div class='del'>-                                      min ((distu + DISTANCE_DEL),</div><div class='del'>-                                           (distl + DISTANCE_INS)));</div><div class='add'>+    for (i = 0; i &lt; node-&gt;trie-&gt;len; i++) {</div><div class='add'>+        distl = uprow[i]; /* left node */</div><div class='ctx'> </div><div class='del'>-                distu  = row[i];</div><div class='del'>-                distul = distl;</div><div class='del'>-        }</div><div class='add'>+        if (word[i] == node-&gt;id)</div><div class='add'>+            row[i] = distul;</div><div class='add'>+        else</div><div class='add'>+            row[i] = min((distul + DISTANCE_EDIT),</div><div class='add'>+                         min((distu + DISTANCE_DEL), (distl + DISTANCE_INS)));</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        distu = row[i];</div><div class='add'>+        distul = distl;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trienode_get_dist (trienode_t *node)</div><div class='add'>+trienode_get_dist(trienode_t *node)</div><div class='ctx'> {</div><div class='del'>-        int *row = NULL;</div><div class='add'>+    int *row = NULL;</div><div class='ctx'> </div><div class='del'>-        row = node-&gt;data;</div><div class='add'>+    row = node-&gt;data;</div><div class='ctx'> </div><div class='del'>-        return row[node-&gt;trie-&gt;len - 1];</div><div class='add'>+    return row[node-&gt;trie-&gt;len - 1];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct trienodevec_w {</div><div class='del'>-        struct trienodevec *vec;</div><div class='del'>-        const char *word;</div><div class='add'>+    struct trienodevec *vec;</div><div class='add'>+    const char *word;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-trienodevec_clear (struct trienodevec *nodevec)</div><div class='add'>+trienodevec_clear(struct trienodevec *nodevec)</div><div class='ctx'> {</div><div class='del'>-        memset(nodevec-&gt;nodes, 0, sizeof (*nodevec-&gt;nodes) * nodevec-&gt;cnt);</div><div class='add'>+    memset(nodevec-&gt;nodes, 0, sizeof(*nodevec-&gt;nodes) * nodevec-&gt;cnt);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-collect_closest (trienode_t *node, void *data)</div><div class='add'>+collect_closest(trienode_t *node, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct trienodevec_w *nodevec_w = NULL;</div><div class='del'>-        struct trienodevec *nodevec = NULL;</div><div class='del'>-        int dist = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        nodevec_w = data;</div><div class='del'>-        nodevec = nodevec_w-&gt;vec;</div><div class='del'>-</div><div class='del'>-        if (calc_dist (node, (void *)nodevec_w-&gt;word))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!node-&gt;eow || !nodevec-&gt;cnt)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        dist = trienode_get_dist (node);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * I thought that when descending further after some dictionary word dw,</div><div class='del'>-         * if we see that child's distance is bigger than it was for dw, then we</div><div class='del'>-         * can prune this branch, as it can contain only worse nodes.</div><div class='del'>-         *</div><div class='del'>-         * This conjecture fails, see eg:</div><div class='del'>-         *</div><div class='del'>-         * d("AB", "B") = 1;</div><div class='del'>-         * d("AB", "BA") = 2;</div><div class='del'>-         * d("AB", "BAB") = 1;</div><div class='del'>-         *</div><div class='del'>-         * -- if both "B" and "BAB" are in dict., then pruning at "BA" * would</div><div class='del'>-         * miss "BAB".</div><div class='del'>-         *</div><div class='del'>-         * (example courtesy of Richard Bann &lt;richardbann at gmail.com&gt;)</div><div class='del'>-</div><div class='del'>-        if (node-&gt;parent-&gt;eow &amp;&amp; dist &gt; trienode_get_dist (node-&gt;parent))</div><div class='del'>-                return 1;</div><div class='del'>-</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (nodevec-&gt;nodes[0] &amp;&amp;</div><div class='del'>-            dist &lt; trienode_get_dist (nodevec-&gt;nodes[0])) {</div><div class='del'>-                /* improving over the findings so far */</div><div class='del'>-                trienodevec_clear (nodevec);</div><div class='del'>-                nodevec-&gt;nodes[0] = node;</div><div class='del'>-        } else if (!nodevec-&gt;nodes[0] ||</div><div class='del'>-                   dist == trienode_get_dist (nodevec-&gt;nodes[0])) {</div><div class='del'>-                /* as good as the best so far, add if there is free space */</div><div class='del'>-                for (i = 0; i &lt; nodevec-&gt;cnt; i++) {</div><div class='del'>-                        if (!nodevec-&gt;nodes[i]) {</div><div class='del'>-                                nodevec-&gt;nodes[i] = node;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    struct trienodevec_w *nodevec_w = NULL;</div><div class='add'>+    struct trienodevec *nodevec = NULL;</div><div class='add'>+    int dist = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    nodevec_w = data;</div><div class='add'>+    nodevec = nodevec_w-&gt;vec;</div><div class='ctx'> </div><div class='add'>+    if (calc_dist(node, (void *)nodevec_w-&gt;word))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!node-&gt;eow || !nodevec-&gt;cnt)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    dist = trienode_get_dist(node);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * I thought that when descending further after some dictionary word dw,</div><div class='add'>+     * if we see that child's distance is bigger than it was for dw, then we</div><div class='add'>+     * can prune this branch, as it can contain only worse nodes.</div><div class='add'>+     *</div><div class='add'>+     * This conjecture fails, see eg:</div><div class='add'>+     *</div><div class='add'>+     * d("AB", "B") = 1;</div><div class='add'>+     * d("AB", "BA") = 2;</div><div class='add'>+     * d("AB", "BAB") = 1;</div><div class='add'>+     *</div><div class='add'>+     * -- if both "B" and "BAB" are in dict., then pruning at "BA" * would</div><div class='add'>+     * miss "BAB".</div><div class='add'>+     *</div><div class='add'>+     * (example courtesy of Richard Bann &lt;richardbann at gmail.com&gt;)</div><div class='add'>+</div><div class='add'>+    if (node-&gt;parent-&gt;eow &amp;&amp; dist &gt; trienode_get_dist (node-&gt;parent))</div><div class='add'>+            return 1;</div><div class='add'>+</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (nodevec-&gt;nodes[0] &amp;&amp; dist &lt; trienode_get_dist(nodevec-&gt;nodes[0])) {</div><div class='add'>+        /* improving over the findings so far */</div><div class='add'>+        trienodevec_clear(nodevec);</div><div class='add'>+        nodevec-&gt;nodes[0] = node;</div><div class='add'>+    } else if (!nodevec-&gt;nodes[0] ||</div><div class='add'>+               dist == trienode_get_dist(nodevec-&gt;nodes[0])) {</div><div class='add'>+        /* as good as the best so far, add if there is free space */</div><div class='add'>+        for (i = 0; i &lt; nodevec-&gt;cnt; i++) {</div><div class='add'>+            if (!nodevec-&gt;nodes[i]) {</div><div class='add'>+                nodevec-&gt;nodes[i] = node;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trie_measure (trie_t *trie, const char *word, trienode_t **nodes,</div><div class='del'>-              int nodecnt)</div><div class='add'>+trie_measure(trie_t *trie, const char *word, trienode_t **nodes, int nodecnt)</div><div class='ctx'> {</div><div class='del'>-        struct trienodevec nodevec = {0,};</div><div class='add'>+    struct trienodevec nodevec = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        nodevec.nodes = nodes;</div><div class='del'>-        nodevec.cnt = nodecnt;</div><div class='add'>+    nodevec.nodes = nodes;</div><div class='add'>+    nodevec.cnt = nodecnt;</div><div class='ctx'> </div><div class='del'>-        return trie_measure_vec (trie, word, &amp;nodevec);</div><div class='add'>+    return trie_measure_vec(trie, word, &amp;nodevec);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-trie_measure_vec (trie_t *trie, const char *word, struct trienodevec *nodevec)</div><div class='add'>+trie_measure_vec(trie_t *trie, const char *word, struct trienodevec *nodevec)</div><div class='ctx'> {</div><div class='del'>-        struct trienodevec_w nodevec_w = {0,};</div><div class='del'>-        int ret = 0;</div><div class='add'>+    struct trienodevec_w nodevec_w = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        trie-&gt;len = strlen (word);</div><div class='add'>+    trie-&gt;len = strlen(word);</div><div class='ctx'> </div><div class='del'>-        trienodevec_clear (nodevec);</div><div class='del'>-        nodevec_w.vec = nodevec;</div><div class='del'>-        nodevec_w.word = word;</div><div class='add'>+    trienodevec_clear(nodevec);</div><div class='add'>+    nodevec_w.vec = nodevec;</div><div class='add'>+    nodevec_w.word = word;</div><div class='ctx'> </div><div class='del'>-        ret = trie_walk (trie, collect_closest, &amp;nodevec_w, 0);</div><div class='del'>-        if (ret &gt; 0)</div><div class='del'>-                ret = 0;</div><div class='add'>+    ret = trie_walk(trie, collect_closest, &amp;nodevec_w, 0);</div><div class='add'>+    if (ret &gt; 0)</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-trienode_reset (trienode_t *node, void *data)</div><div class='add'>+trienode_reset(trienode_t *node, void *data)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (node-&gt;data);</div><div class='add'>+    GF_FREE(node-&gt;data);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-trie_reset_search (trie_t *trie)</div><div class='add'>+trie_reset_search(trie_t *trie)</div><div class='ctx'> {</div><div class='del'>-        trie-&gt;len = 0;</div><div class='add'>+    trie-&gt;len = 0;</div><div class='ctx'> </div><div class='del'>-        trie_walk (trie, trienode_reset, NULL, 0);</div><div class='add'>+    trie_walk(trie, trienode_reset, NULL, 0);</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/unittest/global_mock.c b/libglusterfs/src/unittest/global_mock.c<br/>index afdadc4e868..52156847d81 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/unittest/global_mock.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/unittest/global_mock.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/unittest/global_mock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/unittest/global_mock.c</a></div><div class='hunk'>@@ -18,7 +18,8 @@</div><div class='ctx'> </div><div class='ctx'> #include &lt;cmocka.h&gt;</div><div class='ctx'> </div><div class='del'>-xlator_t **__glusterfs_this_location ()</div><div class='add'>+xlator_t **</div><div class='add'>+__glusterfs_this_location()</div><div class='ctx'> {</div><div class='ctx'>     return ((xlator_t **)(uintptr_t)mock());</div><div class='ctx'> }</div><div class='head'>diff --git a/libglusterfs/src/unittest/log_mock.c b/libglusterfs/src/unittest/log_mock.c<br/>index c03ff524612..d342de31067 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/unittest/log_mock.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/unittest/log_mock.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/unittest/log_mock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/unittest/log_mock.c</a></div><div class='hunk'>@@ -18,33 +18,35 @@</div><div class='ctx'> </div><div class='ctx'> #include &lt;cmocka.h&gt;</div><div class='ctx'> </div><div class='del'>-int _gf_log (const char *domain, const char *file,</div><div class='del'>-             const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-             const char *fmt, ...)</div><div class='add'>+int</div><div class='add'>+_gf_log(const char *domain, const char *file, const char *function,</div><div class='add'>+        int32_t line, gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int _gf_log_callingfn (const char *domain, const char *file,</div><div class='del'>-                       const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-                       const char *fmt, ...)</div><div class='add'>+int</div><div class='add'>+_gf_log_callingfn(const char *domain, const char *file, const char *function,</div><div class='add'>+                  int32_t line, gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int _gf_log_nomem (const char *domain, const char *file,</div><div class='del'>-                   const char *function, int line, gf_loglevel_t level,</div><div class='del'>-                   size_t size)</div><div class='add'>+int</div><div class='add'>+_gf_log_nomem(const char *domain, const char *file, const char *function,</div><div class='add'>+              int line, gf_loglevel_t level, size_t size)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int _gf_msg_nomem (const char *domain, const char *file,</div><div class='del'>-                   const char *function, int line, gf_loglevel_t level,</div><div class='del'>-                   size_t size)</div><div class='add'>+int</div><div class='add'>+_gf_msg_nomem(const char *domain, const char *file, const char *function,</div><div class='add'>+              int line, gf_loglevel_t level, size_t size)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_log_globals_init (void *data, gf_loglevel_t level) {}</div><div class='add'>+gf_log_globals_init(void *data, gf_loglevel_t level)</div><div class='add'>+{</div><div class='add'>+}</div><div class='head'>diff --git a/libglusterfs/src/unittest/mem_pool_unittest.c b/libglusterfs/src/unittest/mem_pool_unittest.c<br/>index 00c7688637f..32137b95bb0 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/unittest/mem_pool_unittest.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/unittest/mem_pool_unittest.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/unittest/mem_pool_unittest.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/unittest/mem_pool_unittest.c</a></div><div class='hunk'>@@ -21,10 +21,10 @@</div><div class='ctx'> #include &lt;cmocka.h&gt;</div><div class='ctx'> </div><div class='ctx'> #ifndef assert_ptr_equal</div><div class='del'>-#define assert_ptr_equal(a, b) \</div><div class='del'>-    _assert_int_equal(cast_ptr_to_largest_integral_type(a), \</div><div class='del'>-                      cast_ptr_to_largest_integral_type(b), \</div><div class='del'>-                      __FILE__, __LINE__)</div><div class='add'>+#define assert_ptr_equal(a, b)                                                 \</div><div class='add'>+    _assert_int_equal(cast_ptr_to_largest_integral_type(a),                    \</div><div class='add'>+                      cast_ptr_to_largest_integral_type(b), __FILE__,          \</div><div class='add'>+                      __LINE__)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -42,8 +42,8 @@ typedef struct __attribute__((packed)) {</div><div class='ctx'>  * Prototypes to private functions</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_mem_set_acct_info (xlator_t *xl, char **alloc_ptr, size_t size,</div><div class='del'>-                      uint32_t type, const char *typestr);</div><div class='add'>+gf_mem_set_acct_info(xlator_t *xl, char **alloc_ptr, size_t size, uint32_t type,</div><div class='add'>+                     const char *typestr);</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Helper functions</div><div class='hunk'>@@ -59,16 +59,16 @@ helper_xlator_init(uint32_t num_types)</div><div class='ctx'>     xl = test_calloc(1, sizeof(xlator_t));</div><div class='ctx'>     assert_non_null(xl);</div><div class='ctx'>     xl-&gt;mem_acct-&gt;num_types = num_types;</div><div class='del'>-    xl-&gt;mem_acct = test_calloc (sizeof(struct mem_acct)</div><div class='del'>-                                + sizeof(struct mem_acct_rec) * num_types);</div><div class='add'>+    xl-&gt;mem_acct = test_calloc(sizeof(struct mem_acct) +</div><div class='add'>+                               sizeof(struct mem_acct_rec) * num_types);</div><div class='ctx'>     assert_non_null(xl-&gt;mem_acct);</div><div class='ctx'> </div><div class='ctx'>     xl-&gt;ctx = test_calloc(1, sizeof(glusterfs_ctx_t));</div><div class='ctx'>     assert_non_null(xl-&gt;ctx);</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; num_types; i++) {</div><div class='del'>-            ret = LOCK_INIT(&amp;(xl-&gt;mem_acct-&gt;rec[i].lock));</div><div class='del'>-            assert_int_equal(ret, 0);</div><div class='add'>+        ret = LOCK_INIT(&amp;(xl-&gt;mem_acct-&gt;rec[i].lock));</div><div class='add'>+        assert_int_equal(ret, 0);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ENSURE(num_types == xl-&gt;mem_acct-&gt;num_types);</div><div class='hunk'>@@ -83,8 +83,8 @@ helper_xlator_destroy(xlator_t *xl)</div><div class='ctx'>     int i, ret;</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; xl-&gt;mem_acct-&gt;num_types; i++) {</div><div class='del'>-            ret = LOCK_DESTROY(&amp;(xl-&gt;mem_acct-&gt;rec[i].lock));</div><div class='del'>-            assert_int_equal(ret, 0);</div><div class='add'>+        ret = LOCK_DESTROY(&amp;(xl-&gt;mem_acct-&gt;rec[i].lock));</div><div class='add'>+        assert_int_equal(ret, 0);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     free(xl-&gt;mem_acct-&gt;rec);</div><div class='hunk'>@@ -94,20 +94,16 @@ helper_xlator_destroy(xlator_t *xl)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-helper_check_memory_headers( char *mem,</div><div class='del'>-        xlator_t *xl,</div><div class='del'>-        size_t size,</div><div class='del'>-        uint32_t type)</div><div class='add'>+helper_check_memory_headers(char *mem, xlator_t *xl, size_t size, uint32_t type)</div><div class='ctx'> {</div><div class='ctx'>     mem_header_t *p;</div><div class='ctx'> </div><div class='del'>-    p = (mem_header_t *)mem,</div><div class='del'>-    assert_int_equal(p-&gt;type, type);</div><div class='add'>+    p = (mem_header_t *)mem, assert_int_equal(p-&gt;type, type);</div><div class='ctx'>     assert_int_equal(p-&gt;size, size);</div><div class='ctx'>     assert_true(p-&gt;xl == xl);</div><div class='ctx'>     assert_int_equal(p-&gt;header_magic, GF_MEM_HEADER_MAGIC);</div><div class='del'>-    assert_true(*(uint32_t *)(mem+sizeof(mem_header_t)+size) == GF_MEM_TRAILER_MAGIC);</div><div class='del'>-</div><div class='add'>+    assert_true(*(uint32_t *)(mem + sizeof(mem_header_t) + size) ==</div><div class='add'>+                GF_MEM_TRAILER_MAGIC);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -116,7 +112,7 @@ helper_check_memory_headers( char *mem,</div><div class='ctx'> static void</div><div class='ctx'> test_gf_mem_acct_enable_set(void **state)</div><div class='ctx'> {</div><div class='del'>-    (void) state;</div><div class='add'>+    (void)state;</div><div class='ctx'>     glusterfs_ctx_t test_ctx;</div><div class='ctx'> </div><div class='ctx'>     expect_assert_failure(gf_mem_acct_enable_set(NULL));</div><div class='hunk'>@@ -143,14 +139,16 @@ test_gf_mem_set_acct_info_asserts(void **state)</div><div class='ctx'>     size = 8196;</div><div class='ctx'>     type = 0;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'>     // Check xl is NULL</div><div class='del'>-    expect_assert_failure(gf_mem_set_acct_info(NULL, &amp;alloc_ptr, size, type, ""));</div><div class='add'>+    expect_assert_failure(</div><div class='add'>+        gf_mem_set_acct_info(NULL, &amp;alloc_ptr, size, type, ""));</div><div class='ctx'>     // Check xl-&gt;mem_acct = NULL</div><div class='del'>-    expect_assert_failure(gf_mem_set_acct_info(&amp;xltest, &amp;alloc_ptr, 0, type, ""));</div><div class='add'>+    expect_assert_failure(</div><div class='add'>+        gf_mem_set_acct_info(&amp;xltest, &amp;alloc_ptr, 0, type, ""));</div><div class='ctx'>     // Check type &lt;= xl-&gt;mem_acct-&gt;num_types</div><div class='ctx'>     type = 100;</div><div class='del'>-    expect_assert_failure(gf_mem_set_acct_info(&amp;xltest, &amp;alloc_ptr, 0, type, ""));</div><div class='add'>+    expect_assert_failure(</div><div class='add'>+        gf_mem_set_acct_info(&amp;xltest, &amp;alloc_ptr, 0, type, ""));</div><div class='ctx'>     // Check alloc is NULL</div><div class='ctx'>     assert_int_equal(-1, gf_mem_set_acct_info(&amp;xltest, NULL, size, type, ""));</div><div class='ctx'> </div><div class='hunk'>@@ -189,7 +187,7 @@ test_gf_mem_set_acct_info_memory(void **state)</div><div class='ctx'>     alloc_ptr = temp_ptr;</div><div class='ctx'>     gf_mem_set_acct_info(xl, &amp;alloc_ptr, size, type, typestr);</div><div class='ctx'> </div><div class='del'>-    //Check values</div><div class='add'>+    // Check values</div><div class='ctx'>     assert_ptr_equal(typestr, xl-&gt;mem_acct-&gt;rec[type].typestr);</div><div class='ctx'>     assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].size, size);</div><div class='ctx'>     assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].num_allocs, 1);</div><div class='hunk'>@@ -420,10 +418,10 @@ test_gf_realloc_mem_acct_enabled(void **state)</div><div class='ctx'>     // not to the realloc + the malloc.</div><div class='ctx'>     // Is this a bug?</div><div class='ctx'>     //</div><div class='del'>-    assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].size, size+1024);</div><div class='add'>+    assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].size, size + 1024);</div><div class='ctx'>     assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].num_allocs, 2);</div><div class='ctx'>     assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].total_allocs, 2);</div><div class='del'>-    assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].max_size, size+1024);</div><div class='add'>+    assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].max_size, size + 1024);</div><div class='ctx'>     assert_int_equal(xl-&gt;mem_acct-&gt;rec[type].max_num_allocs, 2);</div><div class='ctx'> </div><div class='ctx'>     // Check memory</div><div class='hunk'>@@ -465,7 +463,9 @@ test_gf_realloc_ptr(void **state)</div><div class='ctx'>     helper_xlator_destroy(xl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int main(void) {</div><div class='add'>+int</div><div class='add'>+main(void)</div><div class='add'>+{</div><div class='ctx'>     const struct CMUnitTest libglusterfs_mem_pool_tests[] = {</div><div class='ctx'>         cmocka_unit_test(test_gf_mem_acct_enable_set),</div><div class='ctx'>         cmocka_unit_test(test_gf_mem_set_acct_info_asserts),</div><div class='head'>diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c<br/>index d3c134ba903..6975fbbd15f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/xlator.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>libglusterfs/src/xlator.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/libglusterfs/src/xlator.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>libglusterfs/src/xlator.c</a></div><div class='hunk'>@@ -15,605 +15,599 @@</div><div class='ctx'> #include "defaults.h"</div><div class='ctx'> #include "libglusterfs-messages.h"</div><div class='ctx'> </div><div class='del'>-#define SET_DEFAULT_FOP(fn) do {                                        \</div><div class='del'>-                if (!xl-&gt;fops-&gt;fn)                                      \</div><div class='del'>-                        xl-&gt;fops-&gt;fn = default_##fn;                    \</div><div class='del'>-                if (!xl-&gt;pass_through_fops-&gt;fn)                         \</div><div class='del'>-                        xl-&gt;pass_through_fops-&gt;fn = default_##fn;       \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define SET_DEFAULT_CBK(fn) do {			\</div><div class='del'>-                if (!xl-&gt;cbks-&gt;fn)			\</div><div class='del'>-                        xl-&gt;cbks-&gt;fn = default_##fn;	\</div><div class='del'>-        } while (0)</div><div class='add'>+#define SET_DEFAULT_FOP(fn)                                                    \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!xl-&gt;fops-&gt;fn)                                                     \</div><div class='add'>+            xl-&gt;fops-&gt;fn = default_##fn;                                       \</div><div class='add'>+        if (!xl-&gt;pass_through_fops-&gt;fn)                                        \</div><div class='add'>+            xl-&gt;pass_through_fops-&gt;fn = default_##fn;                          \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define SET_DEFAULT_CBK(fn)                                                    \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!xl-&gt;cbks-&gt;fn)                                                     \</div><div class='add'>+            xl-&gt;cbks-&gt;fn = default_##fn;                                       \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> pthread_mutex_t xlator_init_mutex = PTHREAD_MUTEX_INITIALIZER;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xlator_init_lock (void)</div><div class='add'>+xlator_init_lock(void)</div><div class='ctx'> {</div><div class='del'>-        (void) pthread_mutex_lock (&amp;xlator_init_mutex);</div><div class='add'>+    (void)pthread_mutex_lock(&amp;xlator_init_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-xlator_init_unlock (void)</div><div class='add'>+xlator_init_unlock(void)</div><div class='ctx'> {</div><div class='del'>-        (void) pthread_mutex_unlock (&amp;xlator_init_mutex);</div><div class='add'>+    (void)pthread_mutex_unlock(&amp;xlator_init_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct xlator_cbks default_cbks = { };</div><div class='add'>+static struct xlator_cbks default_cbks = {};</div><div class='ctx'> struct volume_options default_options[] = {</div><div class='del'>-        { .key   = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-fill_defaults (xlator_t *xl)</div><div class='add'>+fill_defaults(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        if (xl == NULL)	{</div><div class='del'>-                gf_msg_callingfn ("xlator", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  LG_MSG_INVALID_ARG, "invalid argument");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;pass_through_fops)</div><div class='del'>-                xl-&gt;pass_through_fops = default_fops;</div><div class='del'>-</div><div class='del'>-        SET_DEFAULT_FOP (create);</div><div class='del'>-        SET_DEFAULT_FOP (open);</div><div class='del'>-        SET_DEFAULT_FOP (stat);</div><div class='del'>-        SET_DEFAULT_FOP (readlink);</div><div class='del'>-        SET_DEFAULT_FOP (mknod);</div><div class='del'>-        SET_DEFAULT_FOP (mkdir);</div><div class='del'>-        SET_DEFAULT_FOP (unlink);</div><div class='del'>-        SET_DEFAULT_FOP (rmdir);</div><div class='del'>-        SET_DEFAULT_FOP (symlink);</div><div class='del'>-        SET_DEFAULT_FOP (rename);</div><div class='del'>-        SET_DEFAULT_FOP (link);</div><div class='del'>-        SET_DEFAULT_FOP (truncate);</div><div class='del'>-        SET_DEFAULT_FOP (readv);</div><div class='del'>-        SET_DEFAULT_FOP (writev);</div><div class='del'>-        SET_DEFAULT_FOP (statfs);</div><div class='del'>-        SET_DEFAULT_FOP (flush);</div><div class='del'>-        SET_DEFAULT_FOP (fsync);</div><div class='del'>-        SET_DEFAULT_FOP (setxattr);</div><div class='del'>-        SET_DEFAULT_FOP (getxattr);</div><div class='del'>-        SET_DEFAULT_FOP (fsetxattr);</div><div class='del'>-        SET_DEFAULT_FOP (fgetxattr);</div><div class='del'>-        SET_DEFAULT_FOP (removexattr);</div><div class='del'>-        SET_DEFAULT_FOP (fremovexattr);</div><div class='del'>-        SET_DEFAULT_FOP (opendir);</div><div class='del'>-        SET_DEFAULT_FOP (readdir);</div><div class='del'>-        SET_DEFAULT_FOP (readdirp);</div><div class='del'>-        SET_DEFAULT_FOP (fsyncdir);</div><div class='del'>-        SET_DEFAULT_FOP (access);</div><div class='del'>-        SET_DEFAULT_FOP (ftruncate);</div><div class='del'>-        SET_DEFAULT_FOP (fstat);</div><div class='del'>-        SET_DEFAULT_FOP (lk);</div><div class='del'>-        SET_DEFAULT_FOP (inodelk);</div><div class='del'>-        SET_DEFAULT_FOP (finodelk);</div><div class='del'>-        SET_DEFAULT_FOP (entrylk);</div><div class='del'>-        SET_DEFAULT_FOP (fentrylk);</div><div class='del'>-        SET_DEFAULT_FOP (lookup);</div><div class='del'>-        SET_DEFAULT_FOP (rchecksum);</div><div class='del'>-        SET_DEFAULT_FOP (xattrop);</div><div class='del'>-        SET_DEFAULT_FOP (fxattrop);</div><div class='del'>-        SET_DEFAULT_FOP (setattr);</div><div class='del'>-        SET_DEFAULT_FOP (fsetattr);</div><div class='del'>-	SET_DEFAULT_FOP (fallocate);</div><div class='del'>-	SET_DEFAULT_FOP (discard);</div><div class='del'>-        SET_DEFAULT_FOP (zerofill);</div><div class='del'>-        SET_DEFAULT_FOP (ipc);</div><div class='del'>-        SET_DEFAULT_FOP (seek);</div><div class='del'>-        SET_DEFAULT_FOP (lease);</div><div class='del'>-        SET_DEFAULT_FOP (getactivelk);</div><div class='del'>-        SET_DEFAULT_FOP (setactivelk);</div><div class='del'>-        SET_DEFAULT_FOP (put);</div><div class='del'>-</div><div class='del'>-        SET_DEFAULT_FOP (getspec);</div><div class='del'>-        SET_DEFAULT_FOP (icreate);</div><div class='del'>-        SET_DEFAULT_FOP (namelink);</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;cbks)</div><div class='del'>-                xl-&gt;cbks = &amp;default_cbks;</div><div class='del'>-</div><div class='del'>-        SET_DEFAULT_CBK (release);</div><div class='del'>-        SET_DEFAULT_CBK (releasedir);</div><div class='del'>-        SET_DEFAULT_CBK (forget);</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;fini)</div><div class='del'>-                xl-&gt;fini = default_fini;</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;notify)</div><div class='del'>-                xl-&gt;notify = default_notify;</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;mem_acct_init)</div><div class='del'>-                xl-&gt;mem_acct_init = default_mem_acct_init;</div><div class='del'>-</div><div class='add'>+    if (xl == NULL) {</div><div class='add'>+        gf_msg_callingfn("xlator", GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG,</div><div class='add'>+                         "invalid argument");</div><div class='ctx'>         return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!xl-&gt;pass_through_fops)</div><div class='add'>+        xl-&gt;pass_through_fops = default_fops;</div><div class='add'>+</div><div class='add'>+    SET_DEFAULT_FOP(create);</div><div class='add'>+    SET_DEFAULT_FOP(open);</div><div class='add'>+    SET_DEFAULT_FOP(stat);</div><div class='add'>+    SET_DEFAULT_FOP(readlink);</div><div class='add'>+    SET_DEFAULT_FOP(mknod);</div><div class='add'>+    SET_DEFAULT_FOP(mkdir);</div><div class='add'>+    SET_DEFAULT_FOP(unlink);</div><div class='add'>+    SET_DEFAULT_FOP(rmdir);</div><div class='add'>+    SET_DEFAULT_FOP(symlink);</div><div class='add'>+    SET_DEFAULT_FOP(rename);</div><div class='add'>+    SET_DEFAULT_FOP(link);</div><div class='add'>+    SET_DEFAULT_FOP(truncate);</div><div class='add'>+    SET_DEFAULT_FOP(readv);</div><div class='add'>+    SET_DEFAULT_FOP(writev);</div><div class='add'>+    SET_DEFAULT_FOP(statfs);</div><div class='add'>+    SET_DEFAULT_FOP(flush);</div><div class='add'>+    SET_DEFAULT_FOP(fsync);</div><div class='add'>+    SET_DEFAULT_FOP(setxattr);</div><div class='add'>+    SET_DEFAULT_FOP(getxattr);</div><div class='add'>+    SET_DEFAULT_FOP(fsetxattr);</div><div class='add'>+    SET_DEFAULT_FOP(fgetxattr);</div><div class='add'>+    SET_DEFAULT_FOP(removexattr);</div><div class='add'>+    SET_DEFAULT_FOP(fremovexattr);</div><div class='add'>+    SET_DEFAULT_FOP(opendir);</div><div class='add'>+    SET_DEFAULT_FOP(readdir);</div><div class='add'>+    SET_DEFAULT_FOP(readdirp);</div><div class='add'>+    SET_DEFAULT_FOP(fsyncdir);</div><div class='add'>+    SET_DEFAULT_FOP(access);</div><div class='add'>+    SET_DEFAULT_FOP(ftruncate);</div><div class='add'>+    SET_DEFAULT_FOP(fstat);</div><div class='add'>+    SET_DEFAULT_FOP(lk);</div><div class='add'>+    SET_DEFAULT_FOP(inodelk);</div><div class='add'>+    SET_DEFAULT_FOP(finodelk);</div><div class='add'>+    SET_DEFAULT_FOP(entrylk);</div><div class='add'>+    SET_DEFAULT_FOP(fentrylk);</div><div class='add'>+    SET_DEFAULT_FOP(lookup);</div><div class='add'>+    SET_DEFAULT_FOP(rchecksum);</div><div class='add'>+    SET_DEFAULT_FOP(xattrop);</div><div class='add'>+    SET_DEFAULT_FOP(fxattrop);</div><div class='add'>+    SET_DEFAULT_FOP(setattr);</div><div class='add'>+    SET_DEFAULT_FOP(fsetattr);</div><div class='add'>+    SET_DEFAULT_FOP(fallocate);</div><div class='add'>+    SET_DEFAULT_FOP(discard);</div><div class='add'>+    SET_DEFAULT_FOP(zerofill);</div><div class='add'>+    SET_DEFAULT_FOP(ipc);</div><div class='add'>+    SET_DEFAULT_FOP(seek);</div><div class='add'>+    SET_DEFAULT_FOP(lease);</div><div class='add'>+    SET_DEFAULT_FOP(getactivelk);</div><div class='add'>+    SET_DEFAULT_FOP(setactivelk);</div><div class='add'>+    SET_DEFAULT_FOP(put);</div><div class='add'>+</div><div class='add'>+    SET_DEFAULT_FOP(getspec);</div><div class='add'>+    SET_DEFAULT_FOP(icreate);</div><div class='add'>+    SET_DEFAULT_FOP(namelink);</div><div class='add'>+</div><div class='add'>+    if (!xl-&gt;cbks)</div><div class='add'>+        xl-&gt;cbks = &amp;default_cbks;</div><div class='add'>+</div><div class='add'>+    SET_DEFAULT_CBK(release);</div><div class='add'>+    SET_DEFAULT_CBK(releasedir);</div><div class='add'>+    SET_DEFAULT_CBK(forget);</div><div class='add'>+</div><div class='add'>+    if (!xl-&gt;fini)</div><div class='add'>+        xl-&gt;fini = default_fini;</div><div class='add'>+</div><div class='add'>+    if (!xl-&gt;notify)</div><div class='add'>+        xl-&gt;notify = default_notify;</div><div class='add'>+</div><div class='add'>+    if (!xl-&gt;mem_acct_init)</div><div class='add'>+        xl-&gt;mem_acct_init = default_mem_acct_init;</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_set_type_virtual (xlator_t *xl, const char *type)</div><div class='add'>+xlator_set_type_virtual(xlator_t *xl, const char *type)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xl, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", type, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xl, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", type, out);</div><div class='ctx'> </div><div class='del'>-        xl-&gt;type = gf_strdup (type);</div><div class='add'>+    xl-&gt;type = gf_strdup(type);</div><div class='ctx'> </div><div class='del'>-        if (xl-&gt;type)</div><div class='del'>-                return 0;</div><div class='add'>+    if (xl-&gt;type)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_volopt_dynload (char *xlator_type, void **dl_handle,</div><div class='del'>-                       volume_opt_list_t *opt_list)</div><div class='add'>+xlator_volopt_dynload(char *xlator_type, void **dl_handle,</div><div class='add'>+                      volume_opt_list_t *opt_list)</div><div class='ctx'> {</div><div class='del'>-        int            ret = -1;</div><div class='del'>-        char          *name = NULL;</div><div class='del'>-        void          *handle = NULL;</div><div class='del'>-        xlator_api_t  *xlapi = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xlator_type, out);</div><div class='del'>-</div><div class='del'>-        /* socket.so doesn't fall under the default xlator directory, hence we</div><div class='del'>-         * need this check */</div><div class='del'>-        if (!strstr(xlator_type, "rpc-transport"))</div><div class='del'>-                ret = gf_asprintf (&amp;name, "%s/%s.so", XLATORDIR, xlator_type);</div><div class='del'>-        else</div><div class='del'>-                ret = gf_asprintf (&amp;name, "%s/%s.so", XLATORPARENTDIR, xlator_type);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-</div><div class='del'>-        gf_msg_trace ("xlator", 0, "attempt to load file %s", name);</div><div class='del'>-</div><div class='del'>-        handle = dlopen (name, RTLD_NOW);</div><div class='del'>-        if (!handle) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_WARNING, 0, LG_MSG_DLOPEN_FAILED,</div><div class='del'>-                        "%s", dlerror ());</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* check new struct first, and then check this */</div><div class='del'>-        xlapi = dlsym (handle, "xlator_api");</div><div class='del'>-        if (!xlapi) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_DEBUG, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "dlsym(xlator_api) on %s. "</div><div class='del'>-                        "Fall back to old symbols", dlerror ());</div><div class='del'>-                /* This case is not an error for now, so allow it</div><div class='del'>-                   to fall back to old methods. */</div><div class='del'>-                opt_list-&gt;given_opt = dlsym (handle, "options");</div><div class='del'>-                if (!opt_list-&gt;given_opt) {</div><div class='del'>-                        dlerror ();</div><div class='del'>-                        gf_msg ("xlator", GF_LOG_ERROR, 0, LG_MSG_LOAD_FAILED,</div><div class='del'>-                                "Failed to load xlator opt table");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                opt_list-&gt;given_opt = xlapi-&gt;options;</div><div class='del'>-                if (!opt_list-&gt;given_opt) {</div><div class='del'>-                        gf_msg ("xlator", GF_LOG_ERROR, 0, LG_MSG_LOAD_FAILED,</div><div class='del'>-                                "Failed to load xlator options table");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *dl_handle = handle;</div><div class='del'>-        handle = NULL;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>- out:</div><div class='del'>-        GF_FREE (name);</div><div class='del'>-        if (handle)</div><div class='del'>-                dlclose (handle);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("xlator", 0, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    void *handle = NULL;</div><div class='add'>+    xlator_api_t *xlapi = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xlator_type, out);</div><div class='add'>+</div><div class='add'>+    /* socket.so doesn't fall under the default xlator directory, hence we</div><div class='add'>+     * need this check */</div><div class='add'>+    if (!strstr(xlator_type, "rpc-transport"))</div><div class='add'>+        ret = gf_asprintf(&amp;name, "%s/%s.so", XLATORDIR, xlator_type);</div><div class='add'>+    else</div><div class='add'>+        ret = gf_asprintf(&amp;name, "%s/%s.so", XLATORPARENTDIR, xlator_type);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+</div><div class='add'>+    gf_msg_trace("xlator", 0, "attempt to load file %s", name);</div><div class='add'>+</div><div class='add'>+    handle = dlopen(name, RTLD_NOW);</div><div class='add'>+    if (!handle) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLOPEN_FAILED, "%s",</div><div class='add'>+               dlerror());</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* check new struct first, and then check this */</div><div class='add'>+    xlapi = dlsym(handle, "xlator_api");</div><div class='add'>+    if (!xlapi) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_DEBUG, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "dlsym(xlator_api) on %s. "</div><div class='add'>+               "Fall back to old symbols",</div><div class='add'>+               dlerror());</div><div class='add'>+        /* This case is not an error for now, so allow it</div><div class='add'>+           to fall back to old methods. */</div><div class='add'>+        opt_list-&gt;given_opt = dlsym(handle, "options");</div><div class='add'>+        if (!opt_list-&gt;given_opt) {</div><div class='add'>+            dlerror();</div><div class='add'>+            gf_msg("xlator", GF_LOG_ERROR, 0, LG_MSG_LOAD_FAILED,</div><div class='add'>+                   "Failed to load xlator opt table");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        opt_list-&gt;given_opt = xlapi-&gt;options;</div><div class='add'>+        if (!opt_list-&gt;given_opt) {</div><div class='add'>+            gf_msg("xlator", GF_LOG_ERROR, 0, LG_MSG_LOAD_FAILED,</div><div class='add'>+                   "Failed to load xlator options table");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *dl_handle = handle;</div><div class='add'>+    handle = NULL;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    GF_FREE(name);</div><div class='add'>+    if (handle)</div><div class='add'>+        dlclose(handle);</div><div class='ctx'> </div><div class='add'>+    gf_msg_debug("xlator", 0, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int xlator_dynload_oldway (xlator_t *xl)</div><div class='add'>+int</div><div class='add'>+xlator_dynload_oldway(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int                i = 0;</div><div class='del'>-        int                ret = -1;</div><div class='del'>-        void              *handle = NULL;</div><div class='del'>-        volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-        class_methods_t   *vtbl = NULL;</div><div class='del'>-</div><div class='del'>-        handle = xl-&gt;dlhandle;</div><div class='del'>-</div><div class='del'>-        xl-&gt;fops = dlsym (handle, "fops");</div><div class='del'>-        if (!xl-&gt;fops) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "dlsym(fops) on %s", dlerror ());</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xl-&gt;cbks = dlsym (handle, "cbks");</div><div class='del'>-        if (!xl-&gt;cbks) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "dlsym(cbks) on %s", dlerror ());</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * If class_methods exists, its contents override any definitions of</div><div class='del'>-         * init or fini for that translator.  Otherwise, we fall back to the</div><div class='del'>-         * older method of looking for init and fini directly.</div><div class='del'>-         */</div><div class='del'>-        vtbl = dlsym(handle,"class_methods");</div><div class='del'>-        if (vtbl) {</div><div class='del'>-                xl-&gt;init        = vtbl-&gt;init;</div><div class='del'>-                xl-&gt;fini        = vtbl-&gt;fini;</div><div class='del'>-                xl-&gt;reconfigure = vtbl-&gt;reconfigure;</div><div class='del'>-                xl-&gt;notify      = vtbl-&gt;notify;</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                if (!(*VOID(&amp;xl-&gt;init) = dlsym (handle, "init"))) {</div><div class='del'>-                        gf_msg ("xlator", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_DLSYM_ERROR, "dlsym(init) on %s",</div><div class='del'>-                                dlerror ());</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!(*VOID(&amp;(xl-&gt;fini)) = dlsym (handle, "fini"))) {</div><div class='del'>-                        gf_msg ("xlator", GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_DLSYM_ERROR, "dlsym(fini) on %s",</div><div class='del'>-                                dlerror ());</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (!(*VOID(&amp;(xl-&gt;reconfigure)) = dlsym (handle,</div><div class='del'>-                                                         "reconfigure"))) {</div><div class='del'>-                        gf_msg_trace ("xlator", 0, "dlsym(reconfigure) on %s "</div><div class='del'>-                                      "-- neglecting", dlerror());</div><div class='del'>-                }</div><div class='del'>-                if (!(*VOID(&amp;(xl-&gt;notify)) = dlsym (handle, "notify"))) {</div><div class='del'>-                        gf_msg_trace ("xlator", 0, "dlsym(notify) on %s -- "</div><div class='del'>-                                      "neglecting", dlerror ());</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(xl-&gt;dumpops = dlsym (handle, "dumpops"))) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "dlsym(dumpops) on %s -- "</div><div class='del'>-                              "neglecting", dlerror ());</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(*VOID(&amp;(xl-&gt;mem_acct_init)) = dlsym (handle, "mem_acct_init"))) {</div><div class='del'>-                gf_msg_trace (xl-&gt;name, 0, "dlsym(mem_acct_init) on %s -- "</div><div class='del'>-                              "neglecting", dlerror ());</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t),</div><div class='del'>-                             gf_common_mt_volume_opt_list_t);</div><div class='del'>-</div><div class='del'>-        if (!vol_opt) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(vol_opt-&gt;given_opt = dlsym (handle, "options"))) {</div><div class='del'>-                gf_msg_trace (xl-&gt;name, 0, "Strict option validation not "</div><div class='del'>-                              "enforced -- neglecting (%s)", dlerror ());</div><div class='del'>-        }</div><div class='del'>-        INIT_LIST_HEAD (&amp;vol_opt-&gt;list);</div><div class='del'>-        list_add_tail (&amp;vol_opt-&gt;list, &amp;xl-&gt;volume_options);</div><div class='del'>-</div><div class='del'>-        /* make sure 'min' is set to high value, so it would be</div><div class='del'>-           properly set later */</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                xl-&gt;stats.interval.latencies[i].min = 0xffffffff;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void *handle = NULL;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+    class_methods_t *vtbl = NULL;</div><div class='add'>+</div><div class='add'>+    handle = xl-&gt;dlhandle;</div><div class='add'>+</div><div class='add'>+    xl-&gt;fops = dlsym(handle, "fops");</div><div class='add'>+    if (!xl-&gt;fops) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "dlsym(fops) on %s", dlerror());</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;cbks = dlsym(handle, "cbks");</div><div class='add'>+    if (!xl-&gt;cbks) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "dlsym(cbks) on %s", dlerror());</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If class_methods exists, its contents override any definitions of</div><div class='add'>+     * init or fini for that translator.  Otherwise, we fall back to the</div><div class='add'>+     * older method of looking for init and fini directly.</div><div class='add'>+     */</div><div class='add'>+    vtbl = dlsym(handle, "class_methods");</div><div class='add'>+    if (vtbl) {</div><div class='add'>+        xl-&gt;init = vtbl-&gt;init;</div><div class='add'>+        xl-&gt;fini = vtbl-&gt;fini;</div><div class='add'>+        xl-&gt;reconfigure = vtbl-&gt;reconfigure;</div><div class='add'>+        xl-&gt;notify = vtbl-&gt;notify;</div><div class='add'>+    } else {</div><div class='add'>+        if (!(*VOID(&amp;xl-&gt;init) = dlsym(handle, "init"))) {</div><div class='add'>+            gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+                   "dlsym(init) on %s", dlerror());</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!(*VOID(&amp;(xl-&gt;fini)) = dlsym(handle, "fini"))) {</div><div class='add'>+            gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+                   "dlsym(fini) on %s", dlerror());</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (!(*VOID(&amp;(xl-&gt;reconfigure)) = dlsym(handle, "reconfigure"))) {</div><div class='add'>+            gf_msg_trace("xlator", 0,</div><div class='add'>+                         "dlsym(reconfigure) on %s "</div><div class='add'>+                         "-- neglecting",</div><div class='add'>+                         dlerror());</div><div class='add'>+        }</div><div class='add'>+        if (!(*VOID(&amp;(xl-&gt;notify)) = dlsym(handle, "notify"))) {</div><div class='add'>+            gf_msg_trace("xlator", 0,</div><div class='add'>+                         "dlsym(notify) on %s -- "</div><div class='add'>+                         "neglecting",</div><div class='add'>+                         dlerror());</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(xl-&gt;dumpops = dlsym(handle, "dumpops"))) {</div><div class='add'>+        gf_msg_trace("xlator", 0,</div><div class='add'>+                     "dlsym(dumpops) on %s -- "</div><div class='add'>+                     "neglecting",</div><div class='add'>+                     dlerror());</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(*VOID(&amp;(xl-&gt;mem_acct_init)) = dlsym(handle, "mem_acct_init"))) {</div><div class='add'>+        gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                     "dlsym(mem_acct_init) on %s -- "</div><div class='add'>+                     "neglecting",</div><div class='add'>+                     dlerror());</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    vol_opt = GF_CALLOC(1, sizeof(volume_opt_list_t),</div><div class='add'>+                        gf_common_mt_volume_opt_list_t);</div><div class='add'>+</div><div class='add'>+    if (!vol_opt) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(vol_opt-&gt;given_opt = dlsym(handle, "options"))) {</div><div class='add'>+        gf_msg_trace(xl-&gt;name, 0,</div><div class='add'>+                     "Strict option validation not "</div><div class='add'>+                     "enforced -- neglecting (%s)",</div><div class='add'>+                     dlerror());</div><div class='add'>+    }</div><div class='add'>+    INIT_LIST_HEAD(&amp;vol_opt-&gt;list);</div><div class='add'>+    list_add_tail(&amp;vol_opt-&gt;list, &amp;xl-&gt;volume_options);</div><div class='add'>+</div><div class='add'>+    /* make sure 'min' is set to high value, so it would be</div><div class='add'>+       properly set later */</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        xl-&gt;stats.interval.latencies[i].min = 0xffffffff;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int xlator_dynload_newway (xlator_t *xl)</div><div class='add'>+int</div><div class='add'>+xlator_dynload_newway(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int                ret = -1;</div><div class='del'>-        void              *handle = NULL;</div><div class='del'>-        volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-        xlator_api_t      *xlapi = NULL;</div><div class='del'>-</div><div class='del'>-        handle = xl-&gt;dlhandle;</div><div class='del'>-</div><div class='del'>-        xlapi = dlsym (handle, "xlator_api");</div><div class='del'>-        if (!xlapi) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_INFO, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "dlsym(xlator_api) on %s. "</div><div class='del'>-                        "Fall back to old symbols", dlerror ());</div><div class='del'>-                /* This case is not an error for now, so allow it</div><div class='del'>-                   to fall back to old methods. */</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xl-&gt;fops = xlapi-&gt;fops;</div><div class='del'>-        if (!xl-&gt;fops) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "%s: struct missing (fops)", xl-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xl-&gt;cbks = xlapi-&gt;cbks;</div><div class='del'>-        if (!xl-&gt;cbks) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: struct missing (cbks)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void *handle = NULL;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+    xlator_api_t *xlapi = NULL;</div><div class='add'>+</div><div class='add'>+    handle = xl-&gt;dlhandle;</div><div class='add'>+</div><div class='add'>+    xlapi = dlsym(handle, "xlator_api");</div><div class='add'>+    if (!xlapi) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_INFO, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "dlsym(xlator_api) on %s. "</div><div class='add'>+               "Fall back to old symbols",</div><div class='add'>+               dlerror());</div><div class='add'>+        /* This case is not an error for now, so allow it</div><div class='add'>+           to fall back to old methods. */</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;fops = xlapi-&gt;fops;</div><div class='add'>+    if (!xl-&gt;fops) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "%s: struct missing (fops)", xl-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;cbks = xlapi-&gt;cbks;</div><div class='add'>+    if (!xl-&gt;cbks) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: struct missing (cbks)", xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;init = xlapi-&gt;init;</div><div class='add'>+    if (!xl-&gt;init) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "%s: method missing (init)", xl-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;fini = xlapi-&gt;fini;</div><div class='add'>+    if (!xl-&gt;fini) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: method missing (fini)", xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;reconfigure = xlapi-&gt;reconfigure;</div><div class='add'>+    if (!xl-&gt;reconfigure) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: method missing (reconfigure)", xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+    xl-&gt;notify = xlapi-&gt;notify;</div><div class='add'>+    if (!xl-&gt;notify) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: method missing (notify)", xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+    xl-&gt;dumpops = xlapi-&gt;dumpops;</div><div class='add'>+    if (!xl-&gt;dumpops) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: method missing (dumpops)", xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+    xl-&gt;mem_acct_init = xlapi-&gt;mem_acct_init;</div><div class='add'>+    if (!xl-&gt;mem_acct_init) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: method missing (mem_acct_init)",</div><div class='add'>+                     xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;dump_metrics = xlapi-&gt;dump_metrics;</div><div class='add'>+    if (!xl-&gt;dump_metrics) {</div><div class='add'>+        gf_msg_trace("xlator", 0, "%s: method missing (dump_metrics)",</div><div class='add'>+                     xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;pass_through_fops = xlapi-&gt;pass_through_fops;</div><div class='add'>+    if (!xl-&gt;pass_through_fops) {</div><div class='add'>+        gf_msg_trace("xlator", 0,</div><div class='add'>+                     "%s: method missing (pass_through_fops), "</div><div class='add'>+                     "falling back to default",</div><div class='add'>+                     xl-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    vol_opt = GF_CALLOC(1, sizeof(volume_opt_list_t),</div><div class='add'>+                        gf_common_mt_volume_opt_list_t);</div><div class='add'>+    if (!vol_opt) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    vol_opt-&gt;given_opt = xlapi-&gt;options;</div><div class='add'>+    if (!vol_opt-&gt;given_opt) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_INFO, 0, LG_MSG_DLSYM_ERROR,</div><div class='add'>+               "%s: options not provided, using default", xl-&gt;name);</div><div class='add'>+        vol_opt-&gt;given_opt = default_options;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;vol_opt-&gt;list);</div><div class='add'>+    list_add_tail(&amp;vol_opt-&gt;list, &amp;xl-&gt;volume_options);</div><div class='add'>+</div><div class='add'>+    xl-&gt;id = xlapi-&gt;xlator_id;</div><div class='add'>+    xl-&gt;flags = xlapi-&gt;flags;</div><div class='add'>+    xl-&gt;identifier = xlapi-&gt;identifier;</div><div class='add'>+    xl-&gt;category = xlapi-&gt;category;</div><div class='add'>+</div><div class='add'>+    memcpy(xl-&gt;op_version, xlapi-&gt;op_version,</div><div class='add'>+           sizeof(uint32_t) * GF_MAX_RELEASES);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        xl-&gt;init = xlapi-&gt;init;</div><div class='del'>-        if (!xl-&gt;init) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_WARNING, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "%s: method missing (init)", xl-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+xlator_dynload(xlator_t *xl)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    void *handle = NULL;</div><div class='ctx'> </div><div class='del'>-        xl-&gt;fini = xlapi-&gt;fini;</div><div class='del'>-        if (!xl-&gt;fini) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (fini)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xl, out);</div><div class='ctx'> </div><div class='del'>-        xl-&gt;reconfigure = xlapi-&gt;reconfigure;</div><div class='del'>-        if (!xl-&gt;reconfigure) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (reconfigure)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='del'>-        xl-&gt;notify = xlapi-&gt;notify;</div><div class='del'>-        if (!xl-&gt;notify) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (notify)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='del'>-        xl-&gt;dumpops = xlapi-&gt;dumpops;</div><div class='del'>-        if (!xl-&gt;dumpops) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (dumpops)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='del'>-        xl-&gt;mem_acct_init = xlapi-&gt;mem_acct_init;</div><div class='del'>-        if (!xl-&gt;mem_acct_init) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (mem_acct_init)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    INIT_LIST_HEAD(&amp;xl-&gt;volume_options);</div><div class='ctx'> </div><div class='del'>-        xl-&gt;dump_metrics = xlapi-&gt;dump_metrics;</div><div class='del'>-        if (!xl-&gt;dump_metrics) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (dump_metrics)",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;name, "%s/%s.so", XLATORDIR, xl-&gt;type);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xl-&gt;pass_through_fops = xlapi-&gt;pass_through_fops;</div><div class='del'>-        if (!xl-&gt;pass_through_fops) {</div><div class='del'>-                gf_msg_trace ("xlator", 0, "%s: method missing (pass_through_fops), "</div><div class='del'>-                              "falling back to default",</div><div class='del'>-                              xl-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    ret = -1;</div><div class='ctx'> </div><div class='del'>-        vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t),</div><div class='del'>-                             gf_common_mt_volume_opt_list_t);</div><div class='del'>-        if (!vol_opt) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_msg_trace("xlator", 0, "attempt to load file %s", name);</div><div class='ctx'> </div><div class='del'>-        vol_opt-&gt;given_opt = xlapi-&gt;options;</div><div class='del'>-        if (!vol_opt-&gt;given_opt) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_INFO, 0, LG_MSG_DLSYM_ERROR,</div><div class='del'>-                        "%s: options not provided, using default", xl-&gt;name);</div><div class='del'>-                vol_opt-&gt;given_opt = default_options;</div><div class='del'>-        }</div><div class='add'>+    handle = dlopen(name, RTLD_NOW);</div><div class='add'>+    if (!handle) {</div><div class='add'>+        gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_DLOPEN_FAILED, "%s",</div><div class='add'>+               dlerror());</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    xl-&gt;dlhandle = handle;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;vol_opt-&gt;list);</div><div class='del'>-        list_add_tail (&amp;vol_opt-&gt;list, &amp;xl-&gt;volume_options);</div><div class='add'>+    ret = xlator_dynload_newway(xl);</div><div class='add'>+    if (-1 == ret)</div><div class='add'>+        goto out;</div><div class='add'>+    if (1 == ret) {</div><div class='add'>+        /* it means we don't find the new symbol in xlator code */</div><div class='add'>+        ret = xlator_dynload_oldway(xl);</div><div class='add'>+        if (-1 == ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xl-&gt;id         = xlapi-&gt;xlator_id;</div><div class='del'>-        xl-&gt;flags      = xlapi-&gt;flags;</div><div class='del'>-        xl-&gt;identifier = xlapi-&gt;identifier;</div><div class='del'>-        xl-&gt;category   = xlapi-&gt;category;</div><div class='add'>+    fill_defaults(xl);</div><div class='ctx'> </div><div class='del'>-        memcpy (xl-&gt;op_version, xlapi-&gt;op_version,</div><div class='del'>-                sizeof (uint32_t) * GF_MAX_RELEASES);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(name);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_dynload (xlator_t *xl)</div><div class='add'>+xlator_set_type(xlator_t *xl, const char *type)</div><div class='ctx'> {</div><div class='del'>-        int                ret = -1;</div><div class='del'>-        char              *name = NULL;</div><div class='del'>-        void              *handle = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xl, out);</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;xl-&gt;volume_options);</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;name, "%s/%s.so", XLATORDIR, xl-&gt;type);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='add'>+    /* Handle 'global' translator differently */</div><div class='add'>+    if (!strncmp(GF_GLOBAL_XLATOR_NAME, type, SLEN(GF_GLOBAL_XLATOR_NAME))) {</div><div class='add'>+        volume_opt_list_t *vol_opt = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace ("xlator", 0, "attempt to load file %s", name);</div><div class='add'>+        /* set the required values from Global xlator */</div><div class='add'>+        xl-&gt;type = gf_strdup(GF_GLOBAL_XLATOR_NAME);</div><div class='add'>+        xl-&gt;cbks = global_xlator.cbks;</div><div class='add'>+        xl-&gt;fops = global_xlator.fops;</div><div class='add'>+        xl-&gt;init = global_xlator.init;</div><div class='add'>+        xl-&gt;fini = global_xlator.fini;</div><div class='add'>+        xl-&gt;reconfigure = global_xlator.reconfigure;</div><div class='ctx'> </div><div class='del'>-        handle = dlopen (name, RTLD_NOW);</div><div class='del'>-        if (!handle) {</div><div class='del'>-                gf_msg ("xlator", GF_LOG_WARNING, 0, LG_MSG_DLOPEN_FAILED,</div><div class='del'>-                        "%s", dlerror ());</div><div class='del'>-                goto out;</div><div class='add'>+        vol_opt = GF_CALLOC(1, sizeof(volume_opt_list_t),</div><div class='add'>+                            gf_common_mt_volume_opt_list_t);</div><div class='add'>+        if (!vol_opt) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        xl-&gt;dlhandle = handle;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_dynload_newway (xl);</div><div class='del'>-        if (-1 == ret)</div><div class='del'>-                goto out;</div><div class='del'>-        if (1 == ret) {</div><div class='del'>-                /* it means we don't find the new symbol in xlator code */</div><div class='del'>-                ret = xlator_dynload_oldway (xl);</div><div class='del'>-                if (-1 == ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        vol_opt-&gt;given_opt = global_xl_options;</div><div class='ctx'> </div><div class='del'>-        fill_defaults (xl);</div><div class='add'>+        INIT_LIST_HEAD(&amp;xl-&gt;volume_options);</div><div class='add'>+        INIT_LIST_HEAD(&amp;vol_opt-&gt;list);</div><div class='add'>+        list_add_tail(&amp;vol_opt-&gt;list, &amp;xl-&gt;volume_options);</div><div class='ctx'> </div><div class='add'>+        fill_defaults(xl);</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = xlator_set_type_virtual(xl, type);</div><div class='add'>+    if (!ret)</div><div class='add'>+        ret = xlator_dynload(xl);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (name);</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-xlator_set_type (xlator_t *xl, const char *type)</div><div class='del'>-{</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        /* Handle 'global' translator differently */</div><div class='del'>-        if (!strncmp (GF_GLOBAL_XLATOR_NAME, type,</div><div class='del'>-                      SLEN (GF_GLOBAL_XLATOR_NAME))) {</div><div class='del'>-                volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-</div><div class='del'>-                /* set the required values from Global xlator */</div><div class='del'>-                xl-&gt;type = gf_strdup (GF_GLOBAL_XLATOR_NAME);</div><div class='del'>-                xl-&gt;cbks = global_xlator.cbks;</div><div class='del'>-                xl-&gt;fops = global_xlator.fops;</div><div class='del'>-                xl-&gt;init = global_xlator.init;</div><div class='del'>-                xl-&gt;fini = global_xlator.fini;</div><div class='del'>-                xl-&gt;reconfigure = global_xlator.reconfigure;</div><div class='del'>-</div><div class='del'>-                vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t),</div><div class='del'>-                                     gf_common_mt_volume_opt_list_t);</div><div class='del'>-                if (!vol_opt) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                vol_opt-&gt;given_opt = global_xl_options;</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;xl-&gt;volume_options);</div><div class='del'>-                INIT_LIST_HEAD (&amp;vol_opt-&gt;list);</div><div class='del'>-                list_add_tail (&amp;vol_opt-&gt;list, &amp;xl-&gt;volume_options);</div><div class='del'>-</div><div class='del'>-                fill_defaults(xl);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xlator_set_type_virtual (xl, type);</div><div class='del'>-        if (!ret)</div><div class='del'>-                ret = xlator_dynload (xl);</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xlator_set_inode_lru_limit (xlator_t *this, void *data)</div><div class='add'>+xlator_set_inode_lru_limit(xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        int inode_lru_limit = 0;</div><div class='del'>-</div><div class='del'>-        if (this-&gt;itable) {</div><div class='del'>-                if (!data) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_INVALID_ENTRY, "input data is NULL. "</div><div class='del'>-                                "Cannot update the lru limit of the inode"</div><div class='del'>-                                " table. Continuing with older value");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                inode_lru_limit = *(int *)data;</div><div class='del'>-                inode_table_set_lru_limit (this-&gt;itable, inode_lru_limit);</div><div class='add'>+    int inode_lru_limit = 0;</div><div class='add'>+</div><div class='add'>+    if (this-&gt;itable) {</div><div class='add'>+        if (!data) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY,</div><div class='add'>+                   "input data is NULL. "</div><div class='add'>+                   "Cannot update the lru limit of the inode"</div><div class='add'>+                   " table. Continuing with older value");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        inode_lru_limit = *(int *)data;</div><div class='add'>+        inode_table_set_lru_limit(this-&gt;itable, inode_lru_limit);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xlator_foreach (xlator_t *this,</div><div class='del'>-                void (*fn)(xlator_t *each,</div><div class='del'>-                           void *data),</div><div class='del'>-                void *data)</div><div class='add'>+xlator_foreach(xlator_t *this, void (*fn)(xlator_t *each, void *data),</div><div class='add'>+               void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *first    = NULL;</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='add'>+    xlator_t *first = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", fn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", fn, out);</div><div class='ctx'> </div><div class='del'>-        first = this;</div><div class='add'>+    first = this;</div><div class='ctx'> </div><div class='del'>-        while (first-&gt;prev)</div><div class='del'>-                first = first-&gt;prev;</div><div class='add'>+    while (first-&gt;prev)</div><div class='add'>+        first = first-&gt;prev;</div><div class='ctx'> </div><div class='del'>-        while (first) {</div><div class='del'>-                old_THIS = THIS;</div><div class='del'>-                THIS = first;</div><div class='add'>+    while (first) {</div><div class='add'>+        old_THIS = THIS;</div><div class='add'>+        THIS = first;</div><div class='ctx'> </div><div class='del'>-                fn (first, data);</div><div class='add'>+        fn(first, data);</div><div class='ctx'> </div><div class='del'>-                THIS = old_THIS;</div><div class='del'>-                first = first-&gt;next;</div><div class='del'>-        }</div><div class='add'>+        THIS = old_THIS;</div><div class='add'>+        first = first-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-xlator_foreach_depth_first (xlator_t *this,</div><div class='del'>-			    void (*fn)(xlator_t *each, void *data),</div><div class='del'>-			    void *data)</div><div class='add'>+xlator_foreach_depth_first(xlator_t *this,</div><div class='add'>+                           void (*fn)(xlator_t *each, void *data), void *data)</div><div class='ctx'> {</div><div class='del'>-	xlator_list_t *subv = NULL;</div><div class='add'>+    xlator_list_t *subv = NULL;</div><div class='ctx'> </div><div class='del'>-	subv = this-&gt;children;</div><div class='add'>+    subv = this-&gt;children;</div><div class='ctx'> </div><div class='del'>-	while (subv) {</div><div class='del'>-		xlator_foreach_depth_first (subv-&gt;xlator, fn, data);</div><div class='del'>-		subv = subv-&gt;next;</div><div class='del'>-	}</div><div class='add'>+    while (subv) {</div><div class='add'>+        xlator_foreach_depth_first(subv-&gt;xlator, fn, data);</div><div class='add'>+        subv = subv-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	fn (this, data);</div><div class='add'>+    fn(this, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t *</div><div class='del'>-xlator_search_by_name (xlator_t *any, const char *name)</div><div class='add'>+xlator_search_by_name(xlator_t *any, const char *name)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *search = NULL;</div><div class='add'>+    xlator_t *search = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", any, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", any, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", name, out);</div><div class='ctx'> </div><div class='del'>-        search = any;</div><div class='add'>+    search = any;</div><div class='ctx'> </div><div class='del'>-        while (search-&gt;prev)</div><div class='del'>-                search = search-&gt;prev;</div><div class='add'>+    while (search-&gt;prev)</div><div class='add'>+        search = search-&gt;prev;</div><div class='ctx'> </div><div class='del'>-        while (search) {</div><div class='del'>-                if (!strcmp (search-&gt;name, name))</div><div class='del'>-                        break;</div><div class='del'>-                search = search-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    while (search) {</div><div class='add'>+        if (!strcmp(search-&gt;name, name))</div><div class='add'>+            break;</div><div class='add'>+        search = search-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return search;</div><div class='add'>+    return search;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * With brick multiplexing, we sort of have multiple graphs, so</div><div class='ctx'>  * xlator_search_by_name might not find what we want.  Also, the translator</div><div class='hunk'>@@ -623,294 +617,289 @@ out:</div><div class='ctx'>  * search instead of a linear search works around both problems.</div><div class='ctx'>  */</div><div class='ctx'> static xlator_t *</div><div class='del'>-get_xlator_by_name_or_type (xlator_t *this, char *target, int is_name)</div><div class='add'>+get_xlator_by_name_or_type(xlator_t *this, char *target, int is_name)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-        xlator_t        *child_xl;</div><div class='del'>-        char            *value;</div><div class='del'>-</div><div class='del'>-        for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                value = is_name ? trav-&gt;xlator-&gt;name : trav-&gt;xlator-&gt;type;</div><div class='del'>-                if (!strcmp(value, target) &amp;&amp; !trav-&gt;xlator-&gt;cleanup_starting) {</div><div class='del'>-                        return trav-&gt;xlator;</div><div class='del'>-                }</div><div class='del'>-                child_xl = get_xlator_by_name_or_type (trav-&gt;xlator, target,</div><div class='del'>-                                                       is_name);</div><div class='del'>-                if (child_xl) {</div><div class='del'>-                        /*</div><div class='del'>-                         * If the xlator we're looking for is somewhere down</div><div class='del'>-                         * the stack, get_xlator_by_name expects to get a</div><div class='del'>-                         * pointer to the top of its subtree (child of "this")</div><div class='del'>-                         * while get_xlator_by_type expects a pointer to what</div><div class='del'>-                         * we actually found.  Handle both cases here.</div><div class='del'>-                         *</div><div class='del'>-                         * TBD: rename the functions and fix callers to better</div><div class='del'>-                         * reflect the difference in semantics.</div><div class='del'>-                         */</div><div class='del'>-                        return is_name ? trav-&gt;xlator : child_xl;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return NULL;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+    xlator_t *child_xl;</div><div class='add'>+    char *value;</div><div class='add'>+</div><div class='add'>+    for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        value = is_name ? trav-&gt;xlator-&gt;name : trav-&gt;xlator-&gt;type;</div><div class='add'>+        if (!strcmp(value, target) &amp;&amp; !trav-&gt;xlator-&gt;cleanup_starting) {</div><div class='add'>+            return trav-&gt;xlator;</div><div class='add'>+        }</div><div class='add'>+        child_xl = get_xlator_by_name_or_type(trav-&gt;xlator, target, is_name);</div><div class='add'>+        if (child_xl) {</div><div class='add'>+            /*</div><div class='add'>+             * If the xlator we're looking for is somewhere down</div><div class='add'>+             * the stack, get_xlator_by_name expects to get a</div><div class='add'>+             * pointer to the top of its subtree (child of "this")</div><div class='add'>+             * while get_xlator_by_type expects a pointer to what</div><div class='add'>+             * we actually found.  Handle both cases here.</div><div class='add'>+             *</div><div class='add'>+             * TBD: rename the functions and fix callers to better</div><div class='add'>+             * reflect the difference in semantics.</div><div class='add'>+             */</div><div class='add'>+            return is_name ? trav-&gt;xlator : child_xl;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-get_xlator_by_name (xlator_t *this, char *target)</div><div class='add'>+get_xlator_by_name(xlator_t *this, char *target)</div><div class='ctx'> {</div><div class='del'>-        return get_xlator_by_name_or_type (this, target, 1);</div><div class='add'>+    return get_xlator_by_name_or_type(this, target, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-get_xlator_by_type (xlator_t *this, char *target)</div><div class='add'>+get_xlator_by_type(xlator_t *this, char *target)</div><div class='ctx'> {</div><div class='del'>-        return get_xlator_by_name_or_type (this, target, 0);</div><div class='add'>+    return get_xlator_by_name_or_type(this, target, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> __xlator_init(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='del'>-        int       ret = 0;</div><div class='del'>-        int       fop_idx = 0;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fop_idx = 0;</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = xl;</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = xl;</div><div class='ctx'> </div><div class='del'>-        /* initialize the metrics related locks */</div><div class='del'>-        for (fop_idx = 0; fop_idx &lt; GF_FOP_MAXVALUE; fop_idx++) {</div><div class='del'>-                GF_ATOMIC_INIT (xl-&gt;stats.total.metrics[fop_idx].fop, 0);</div><div class='del'>-                GF_ATOMIC_INIT (xl-&gt;stats.total.metrics[fop_idx].cbk, 0);</div><div class='add'>+    /* initialize the metrics related locks */</div><div class='add'>+    for (fop_idx = 0; fop_idx &lt; GF_FOP_MAXVALUE; fop_idx++) {</div><div class='add'>+        GF_ATOMIC_INIT(xl-&gt;stats.total.metrics[fop_idx].fop, 0);</div><div class='add'>+        GF_ATOMIC_INIT(xl-&gt;stats.total.metrics[fop_idx].cbk, 0);</div><div class='ctx'> </div><div class='del'>-                GF_ATOMIC_INIT (xl-&gt;stats.interval.metrics[fop_idx].fop, 0);</div><div class='del'>-                GF_ATOMIC_INIT (xl-&gt;stats.interval.metrics[fop_idx].cbk, 0);</div><div class='del'>-        }</div><div class='del'>-        GF_ATOMIC_INIT (xl-&gt;stats.total.count, 0);</div><div class='del'>-        GF_ATOMIC_INIT (xl-&gt;stats.interval.count, 0);</div><div class='add'>+        GF_ATOMIC_INIT(xl-&gt;stats.interval.metrics[fop_idx].fop, 0);</div><div class='add'>+        GF_ATOMIC_INIT(xl-&gt;stats.interval.metrics[fop_idx].cbk, 0);</div><div class='add'>+    }</div><div class='add'>+    GF_ATOMIC_INIT(xl-&gt;stats.total.count, 0);</div><div class='add'>+    GF_ATOMIC_INIT(xl-&gt;stats.interval.count, 0);</div><div class='ctx'> </div><div class='del'>-        xlator_init_lock ();</div><div class='del'>-        ret = xl-&gt;init (xl);</div><div class='del'>-        xlator_init_unlock ();</div><div class='add'>+    xlator_init_lock();</div><div class='add'>+    ret = xl-&gt;init(xl);</div><div class='add'>+    xlator_init_unlock();</div><div class='ctx'> </div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_init (xlator_t *xl)</div><div class='add'>+xlator_init(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xl, out);</div><div class='del'>-</div><div class='del'>-        if (xl-&gt;mem_acct_init)</div><div class='del'>-                xl-&gt;mem_acct_init (xl);</div><div class='del'>-</div><div class='del'>-        xl-&gt;instance_name = NULL;</div><div class='del'>-        if (!xl-&gt;init) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INIT_FAILED,</div><div class='del'>-                        "No init() found");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = __xlator_init (xl);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR,</div><div class='del'>-                        "Initialization of volume '%s' failed,"</div><div class='del'>-                        " review your volfile again", xl-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xl-&gt;init_succeeded = 1;</div><div class='del'>-        /*xl-&gt;cleanup_starting = 0;</div><div class='del'>-          xl-&gt;call_cleanup = 0;</div><div class='del'>-        */</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xl, out);</div><div class='add'>+</div><div class='add'>+    if (xl-&gt;mem_acct_init)</div><div class='add'>+        xl-&gt;mem_acct_init(xl);</div><div class='add'>+</div><div class='add'>+    xl-&gt;instance_name = NULL;</div><div class='add'>+    if (!xl-&gt;init) {</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_WARNING, 0, LG_MSG_INIT_FAILED,</div><div class='add'>+               "No init() found");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = __xlator_init(xl);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR,</div><div class='add'>+               "Initialization of volume '%s' failed,"</div><div class='add'>+               " review your volfile again",</div><div class='add'>+               xl-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xl-&gt;init_succeeded = 1;</div><div class='add'>+    /*xl-&gt;cleanup_starting = 0;</div><div class='add'>+      xl-&gt;call_cleanup = 0;</div><div class='add'>+    */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-xlator_fini_rec (xlator_t *xl)</div><div class='add'>+xlator_fini_rec(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *trav     = NULL;</div><div class='del'>-        xlator_t      *old_THIS = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xl, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xl, out);</div><div class='ctx'> </div><div class='del'>-        trav = xl-&gt;children;</div><div class='add'>+    trav = xl-&gt;children;</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                if (!trav-&gt;xlator-&gt;init_succeeded) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                xlator_fini_rec (trav-&gt;xlator);</div><div class='del'>-                gf_msg_debug (trav-&gt;xlator-&gt;name, 0, "fini done");</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (!trav-&gt;xlator-&gt;init_succeeded) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xl-&gt;init_succeeded) {</div><div class='del'>-                if (xl-&gt;fini) {</div><div class='del'>-                        old_THIS = THIS;</div><div class='del'>-                        THIS = xl;</div><div class='add'>+        xlator_fini_rec(trav-&gt;xlator);</div><div class='add'>+        gf_msg_debug(trav-&gt;xlator-&gt;name, 0, "fini done");</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xl-&gt;init_succeeded) {</div><div class='add'>+        if (xl-&gt;fini) {</div><div class='add'>+            old_THIS = THIS;</div><div class='add'>+            THIS = xl;</div><div class='ctx'> </div><div class='del'>-                        xl-&gt;fini (xl);</div><div class='add'>+            xl-&gt;fini(xl);</div><div class='ctx'> </div><div class='del'>-                        if (xl-&gt;local_pool)</div><div class='del'>-                                mem_pool_destroy (xl-&gt;local_pool);</div><div class='add'>+            if (xl-&gt;local_pool)</div><div class='add'>+                mem_pool_destroy(xl-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-                        THIS = old_THIS;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (xl-&gt;name, 0, "No fini() found");</div><div class='del'>-                }</div><div class='del'>-                xl-&gt;init_succeeded = 0;</div><div class='add'>+            THIS = old_THIS;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(xl-&gt;name, 0, "No fini() found");</div><div class='ctx'>         }</div><div class='add'>+        xl-&gt;init_succeeded = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_notify (xlator_t *xl, int event, void *data, ...)</div><div class='add'>+xlator_notify(xlator_t *xl, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *old_THIS = NULL;</div><div class='del'>-        int       ret = 0;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = xl;</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = xl;</div><div class='ctx'> </div><div class='del'>-        ret = xl-&gt;notify (xl, event, data);</div><div class='add'>+    ret = xl-&gt;notify(xl, event, data);</div><div class='ctx'> </div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_mem_acct_init (xlator_t *xl, int num_types)</div><div class='add'>+xlator_mem_acct_init(xlator_t *xl, int num_types)</div><div class='ctx'> {</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!xl)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!xl-&gt;ctx)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!xl-&gt;ctx-&gt;mem_acct_enable)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!xl-&gt;ctx)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='add'>+    if (!xl-&gt;ctx-&gt;mem_acct_enable)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        xl-&gt;mem_acct = MALLOC (sizeof(struct mem_acct)</div><div class='del'>-                               + sizeof(struct mem_acct_rec) * num_types);</div><div class='add'>+    xl-&gt;mem_acct = MALLOC(sizeof(struct mem_acct) +</div><div class='add'>+                          sizeof(struct mem_acct_rec) * num_types);</div><div class='ctx'> </div><div class='del'>-        if (!xl-&gt;mem_acct) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!xl-&gt;mem_acct) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xl-&gt;mem_acct-&gt;num_types = num_types;</div><div class='del'>-        GF_ATOMIC_INIT (xl-&gt;mem_acct-&gt;refcnt, 1);</div><div class='add'>+    xl-&gt;mem_acct-&gt;num_types = num_types;</div><div class='add'>+    GF_ATOMIC_INIT(xl-&gt;mem_acct-&gt;refcnt, 1);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; num_types; i++) {</div><div class='del'>-                memset (&amp;xl-&gt;mem_acct-&gt;rec[i], 0, sizeof(struct mem_acct_rec));</div><div class='del'>-                ret = LOCK_INIT(&amp;(xl-&gt;mem_acct-&gt;rec[i].lock));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        fprintf(stderr, "Unable to lock..errno : %d",errno);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; num_types; i++) {</div><div class='add'>+        memset(&amp;xl-&gt;mem_acct-&gt;rec[i], 0, sizeof(struct mem_acct_rec));</div><div class='add'>+        ret = LOCK_INIT(&amp;(xl-&gt;mem_acct-&gt;rec[i].lock));</div><div class='add'>+        if (ret) {</div><div class='add'>+            fprintf(stderr, "Unable to lock..errno : %d", errno);</div><div class='add'>+        }</div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-                INIT_LIST_HEAD(&amp;(xl-&gt;mem_acct-&gt;rec[i].obj_list));</div><div class='add'>+        INIT_LIST_HEAD(&amp;(xl-&gt;mem_acct-&gt;rec[i].obj_list));</div><div class='ctx'> #endif</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-xlator_tree_fini (xlator_t *xl)</div><div class='add'>+xlator_tree_fini(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *top = NULL;</div><div class='add'>+    xlator_t *top = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", xl, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", xl, out);</div><div class='ctx'> </div><div class='del'>-        top = xl;</div><div class='del'>-        xlator_fini_rec (top);</div><div class='add'>+    top = xl;</div><div class='add'>+    xlator_fini_rec(top);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_list_destroy (xlator_list_t *list)</div><div class='add'>+xlator_list_destroy(xlator_list_t *list)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *next = NULL;</div><div class='add'>+    xlator_list_t *next = NULL;</div><div class='ctx'> </div><div class='del'>-        while (list) {</div><div class='del'>-                next = list-&gt;next;</div><div class='del'>-                GF_FREE (list);</div><div class='del'>-                list = next;</div><div class='del'>-        }</div><div class='add'>+    while (list) {</div><div class='add'>+        next = list-&gt;next;</div><div class='add'>+        GF_FREE(list);</div><div class='add'>+        list = next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_memrec_free (xlator_t *xl)</div><div class='add'>+xlator_memrec_free(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        i               = 0;</div><div class='del'>-        struct mem_acct *mem_acct       = NULL;</div><div class='add'>+    uint32_t i = 0;</div><div class='add'>+    struct mem_acct *mem_acct = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!xl) {</div><div class='del'>-                return 0;</div><div class='add'>+    if (!xl) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    mem_acct = xl-&gt;mem_acct;</div><div class='add'>+</div><div class='add'>+    if (mem_acct) {</div><div class='add'>+        for (i = 0; i &lt; mem_acct-&gt;num_types; i++) {</div><div class='add'>+            LOCK_DESTROY(&amp;(mem_acct-&gt;rec[i].lock));</div><div class='ctx'>         }</div><div class='del'>-        mem_acct = xl-&gt;mem_acct;</div><div class='del'>-</div><div class='del'>-        if (mem_acct) {</div><div class='del'>-                for (i = 0; i &lt; mem_acct-&gt;num_types; i++) {</div><div class='del'>-                        LOCK_DESTROY (&amp;(mem_acct-&gt;rec[i].lock));</div><div class='del'>-                }</div><div class='del'>-                if (GF_ATOMIC_DEC (mem_acct-&gt;refcnt) == 0) {</div><div class='del'>-                        FREE (mem_acct);</div><div class='del'>-                        xl-&gt;mem_acct = NULL;</div><div class='del'>-                }</div><div class='add'>+        if (GF_ATOMIC_DEC(mem_acct-&gt;refcnt) == 0) {</div><div class='add'>+            FREE(mem_acct);</div><div class='add'>+            xl-&gt;mem_acct = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_members_free (xlator_t *xl)</div><div class='add'>+xlator_members_free(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-        volume_opt_list_t *tmp     = NULL;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+    volume_opt_list_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!xl)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (xl-&gt;name);</div><div class='del'>-        GF_FREE (xl-&gt;type);</div><div class='del'>-        if (!(xl-&gt;ctx &amp;&amp; xl-&gt;ctx-&gt;cmd_args.valgrind) &amp;&amp; xl-&gt;dlhandle)</div><div class='del'>-                dlclose (xl-&gt;dlhandle);</div><div class='del'>-        if (xl-&gt;options)</div><div class='del'>-                dict_unref (xl-&gt;options);</div><div class='add'>+    GF_FREE(xl-&gt;name);</div><div class='add'>+    GF_FREE(xl-&gt;type);</div><div class='add'>+    if (!(xl-&gt;ctx &amp;&amp; xl-&gt;ctx-&gt;cmd_args.valgrind) &amp;&amp; xl-&gt;dlhandle)</div><div class='add'>+        dlclose(xl-&gt;dlhandle);</div><div class='add'>+    if (xl-&gt;options)</div><div class='add'>+        dict_unref(xl-&gt;options);</div><div class='ctx'> </div><div class='del'>-        xlator_list_destroy (xl-&gt;children);</div><div class='add'>+    xlator_list_destroy(xl-&gt;children);</div><div class='ctx'> </div><div class='del'>-        xlator_list_destroy (xl-&gt;parents);</div><div class='add'>+    xlator_list_destroy(xl-&gt;parents);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (vol_opt, tmp, &amp;xl-&gt;volume_options, list) {</div><div class='del'>-                list_del_init (&amp;vol_opt-&gt;list);</div><div class='del'>-                GF_FREE (vol_opt);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(vol_opt, tmp, &amp;xl-&gt;volume_options, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;vol_opt-&gt;list);</div><div class='add'>+        GF_FREE(vol_opt);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function destroys all the xlator members except for the</div><div class='hunk'>@@ -939,609 +928,606 @@ xlator_members_free (xlator_t *xl)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_tree_free_members (xlator_t *tree)</div><div class='add'>+xlator_tree_free_members(xlator_t *tree)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *trav = tree;</div><div class='del'>-        xlator_t *prev = tree;</div><div class='add'>+    xlator_t *trav = tree;</div><div class='add'>+    xlator_t *prev = tree;</div><div class='ctx'> </div><div class='del'>-        if (!tree) {</div><div class='del'>-                gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_TREE_NOT_FOUND,</div><div class='del'>-                        "Translator tree not found");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!tree) {</div><div class='add'>+        gf_msg("parser", GF_LOG_ERROR, 0, LG_MSG_TREE_NOT_FOUND,</div><div class='add'>+               "Translator tree not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (prev) {</div><div class='del'>-                trav = prev-&gt;next;</div><div class='del'>-                xlator_members_free (prev);</div><div class='del'>-                prev = trav;</div><div class='del'>-        }</div><div class='add'>+    while (prev) {</div><div class='add'>+        trav = prev-&gt;next;</div><div class='add'>+        xlator_members_free(prev);</div><div class='add'>+        prev = trav;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_tree_free_memacct (xlator_t *tree)</div><div class='add'>+xlator_tree_free_memacct(xlator_t *tree)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *trav = tree;</div><div class='del'>-        xlator_t *prev = tree;</div><div class='add'>+    xlator_t *trav = tree;</div><div class='add'>+    xlator_t *prev = tree;</div><div class='ctx'> </div><div class='del'>-        if (!tree) {</div><div class='del'>-                gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_TREE_NOT_FOUND,</div><div class='del'>-                        "Translator tree not found");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!tree) {</div><div class='add'>+        gf_msg("parser", GF_LOG_ERROR, 0, LG_MSG_TREE_NOT_FOUND,</div><div class='add'>+               "Translator tree not found");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (prev) {</div><div class='del'>-                trav = prev-&gt;next;</div><div class='del'>-                xlator_memrec_free (prev);</div><div class='del'>-                GF_FREE (prev);</div><div class='del'>-                prev = trav;</div><div class='del'>-        }</div><div class='add'>+    while (prev) {</div><div class='add'>+        trav = prev-&gt;next;</div><div class='add'>+        xlator_memrec_free(prev);</div><div class='add'>+        GF_FREE(prev);</div><div class='add'>+        prev = trav;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xlator_mem_free (xlator_t *xl)</div><div class='add'>+xlator_mem_free(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-        volume_opt_list_t *tmp     = NULL;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+    volume_opt_list_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!xl)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (xl-&gt;options) {</div><div class='del'>-                dict_ref (xl-&gt;options);</div><div class='del'>-                dict_unref (xl-&gt;options);</div><div class='del'>-                xl-&gt;options = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (xl-&gt;options) {</div><div class='add'>+        dict_ref(xl-&gt;options);</div><div class='add'>+        dict_unref(xl-&gt;options);</div><div class='add'>+        xl-&gt;options = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (vol_opt, tmp, &amp;xl-&gt;volume_options, list) {</div><div class='del'>-                list_del_init (&amp;vol_opt-&gt;list);</div><div class='del'>-                GF_FREE (vol_opt);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(vol_opt, tmp, &amp;xl-&gt;volume_options, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;vol_opt-&gt;list);</div><div class='add'>+        GF_FREE(vol_opt);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xlator_memrec_free (xl);</div><div class='add'>+    xlator_memrec_free(xl);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-xlator_call_fini (xlator_t *this) {</div><div class='del'>-        if (!this || this-&gt;cleanup_starting)</div><div class='del'>-                return;</div><div class='del'>-        this-&gt;cleanup_starting = 1;</div><div class='del'>-        this-&gt;call_cleanup = 1;</div><div class='del'>-        xlator_call_fini (this-&gt;next);</div><div class='del'>-        this-&gt;fini (this);</div><div class='add'>+xlator_call_fini(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    if (!this || this-&gt;cleanup_starting)</div><div class='add'>+        return;</div><div class='add'>+    this-&gt;cleanup_starting = 1;</div><div class='add'>+    this-&gt;call_cleanup = 1;</div><div class='add'>+    xlator_call_fini(this-&gt;next);</div><div class='add'>+    this-&gt;fini(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xlator_mem_cleanup (xlator_t *this) {</div><div class='del'>-        xlator_list_t     *list         = this-&gt;children;</div><div class='del'>-        xlator_t          *trav         = list-&gt;xlator;</div><div class='del'>-        inode_table_t     *inode_table  = NULL;</div><div class='del'>-        xlator_t          *prev         = trav;</div><div class='del'>-        glusterfs_ctx_t   *ctx          = NULL;</div><div class='del'>-        xlator_list_t    **trav_p       = NULL;</div><div class='del'>-        xlator_t          *top          = NULL;</div><div class='del'>-        xlator_t          *victim       = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (this-&gt;call_cleanup || !this-&gt;ctx)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        this-&gt;call_cleanup = 1;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        xlator_call_fini (trav);</div><div class='del'>-</div><div class='del'>-        while (prev) {</div><div class='del'>-                trav = prev-&gt;next;</div><div class='del'>-                xlator_mem_free (prev);</div><div class='del'>-                prev = trav;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        inode_table = this-&gt;itable;</div><div class='del'>-        if (inode_table) {</div><div class='del'>-                inode_table_destroy (inode_table);</div><div class='del'>-                this-&gt;itable = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (this-&gt;fini) {</div><div class='del'>-                this-&gt;fini (this);</div><div class='del'>-        }</div><div class='add'>+xlator_mem_cleanup(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    xlator_list_t *list = this-&gt;children;</div><div class='add'>+    xlator_t *trav = list-&gt;xlator;</div><div class='add'>+    inode_table_t *inode_table = NULL;</div><div class='add'>+    xlator_t *prev = trav;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_list_t **trav_p = NULL;</div><div class='add'>+    xlator_t *top = NULL;</div><div class='add'>+    xlator_t *victim = NULL;</div><div class='add'>+</div><div class='add'>+    if (this-&gt;call_cleanup || !this-&gt;ctx)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        xlator_mem_free (this);</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;active) {</div><div class='del'>-                top = ctx-&gt;active-&gt;first;</div><div class='del'>-                LOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-                /* TODO here we have leak for xlator node in a graph */</div><div class='del'>-                for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='del'>-                        victim = (*trav_p)-&gt;xlator;</div><div class='del'>-                        if (victim-&gt;call_cleanup &amp;&amp; !strcmp (victim-&gt;name, this-&gt;name)) {</div><div class='del'>-                                        (*trav_p) = (*trav_p)-&gt;next;</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                /* TODO Sometime brick xlator is not moved from graph so followed below</div><div class='del'>-                   approach to move brick xlator from a graph, will move specific brick</div><div class='del'>-                   xlator from graph only while inode table and mem_acct are cleaned up</div><div class='del'>-                */</div><div class='del'>-                trav_p = &amp;top-&gt;children;</div><div class='del'>-                while (*trav_p) {</div><div class='del'>-                        victim = (*trav_p)-&gt;xlator;</div><div class='del'>-                        if (victim-&gt;call_cleanup &amp;&amp; !victim-&gt;itable &amp;&amp; !victim-&gt;mem_acct) {</div><div class='del'>-                                (*trav_p) = (*trav_p)-&gt;next;</div><div class='del'>-                        } else {</div><div class='del'>-                                trav_p = &amp;(*trav_p)-&gt;next;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;ctx-&gt;volfile_lock);</div><div class='del'>-        }</div><div class='add'>+    this-&gt;call_cleanup = 1;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    xlator_call_fini(trav);</div><div class='add'>+</div><div class='add'>+    while (prev) {</div><div class='add'>+        trav = prev-&gt;next;</div><div class='add'>+        xlator_mem_free(prev);</div><div class='add'>+        prev = trav;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode_table = this-&gt;itable;</div><div class='add'>+    if (inode_table) {</div><div class='add'>+        inode_table_destroy(inode_table);</div><div class='add'>+        this-&gt;itable = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (this-&gt;fini) {</div><div class='add'>+        this-&gt;fini(this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xlator_mem_free(this);</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;active) {</div><div class='add'>+        top = ctx-&gt;active-&gt;first;</div><div class='add'>+        LOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+        /* TODO here we have leak for xlator node in a graph */</div><div class='add'>+        for (trav_p = &amp;top-&gt;children; *trav_p; trav_p = &amp;(*trav_p)-&gt;next) {</div><div class='add'>+            victim = (*trav_p)-&gt;xlator;</div><div class='add'>+            if (victim-&gt;call_cleanup &amp;&amp; !strcmp(victim-&gt;name, this-&gt;name)) {</div><div class='add'>+                (*trav_p) = (*trav_p)-&gt;next;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        /* TODO Sometime brick xlator is not moved from graph so followed below</div><div class='add'>+           approach to move brick xlator from a graph, will move specific brick</div><div class='add'>+           xlator from graph only while inode table and mem_acct are cleaned up</div><div class='add'>+        */</div><div class='add'>+        trav_p = &amp;top-&gt;children;</div><div class='add'>+        while (*trav_p) {</div><div class='add'>+            victim = (*trav_p)-&gt;xlator;</div><div class='add'>+            if (victim-&gt;call_cleanup &amp;&amp; !victim-&gt;itable &amp;&amp; !victim-&gt;mem_acct) {</div><div class='add'>+                (*trav_p) = (*trav_p)-&gt;next;</div><div class='add'>+            } else {</div><div class='add'>+                trav_p = &amp;(*trav_p)-&gt;next;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        UNLOCK(&amp;ctx-&gt;volfile_lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-loc_wipe (loc_t *loc)</div><div class='add'>+loc_wipe(loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        if (loc-&gt;inode) {</div><div class='del'>-                inode_unref (loc-&gt;inode);</div><div class='del'>-                loc-&gt;inode = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (loc-&gt;path) {</div><div class='del'>-                GF_FREE ((char *)loc-&gt;path);</div><div class='del'>-                loc-&gt;path = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (loc-&gt;parent) {</div><div class='del'>-                inode_unref (loc-&gt;parent);</div><div class='del'>-                loc-&gt;parent = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset (loc, 0, sizeof (*loc));</div><div class='add'>+    if (loc-&gt;inode) {</div><div class='add'>+        inode_unref(loc-&gt;inode);</div><div class='add'>+        loc-&gt;inode = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (loc-&gt;path) {</div><div class='add'>+        GF_FREE((char *)loc-&gt;path);</div><div class='add'>+        loc-&gt;path = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;parent) {</div><div class='add'>+        inode_unref(loc-&gt;parent);</div><div class='add'>+        loc-&gt;parent = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(loc, 0, sizeof(*loc));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-loc_path (loc_t *loc, const char *bname)</div><div class='add'>+loc_path(loc_t *loc, const char *bname)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;path)</div><div class='del'>-                goto out;</div><div class='add'>+    if (loc-&gt;path)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='add'>+    ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (bname &amp;&amp; !strlen (bname))</div><div class='del'>-                bname = NULL;</div><div class='add'>+    if (bname &amp;&amp; !strlen(bname))</div><div class='add'>+        bname = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!bname)</div><div class='del'>-                goto inode_path;</div><div class='add'>+    if (!bname)</div><div class='add'>+        goto inode_path;</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;parent &amp;&amp; !gf_uuid_is_null (loc-&gt;parent-&gt;gfid)) {</div><div class='del'>-                ret = inode_path (loc-&gt;parent, bname, (char**)&amp;loc-&gt;path);</div><div class='del'>-        } else if (!gf_uuid_is_null (loc-&gt;pargfid)) {</div><div class='del'>-                ret = gf_asprintf ((char**)&amp;loc-&gt;path, INODE_PATH_FMT"/%s",</div><div class='del'>-                                   uuid_utoa (loc-&gt;pargfid), bname);</div><div class='del'>-        }</div><div class='add'>+    if (loc-&gt;parent &amp;&amp; !gf_uuid_is_null(loc-&gt;parent-&gt;gfid)) {</div><div class='add'>+        ret = inode_path(loc-&gt;parent, bname, (char **)&amp;loc-&gt;path);</div><div class='add'>+    } else if (!gf_uuid_is_null(loc-&gt;pargfid)) {</div><div class='add'>+        ret = gf_asprintf((char **)&amp;loc-&gt;path, INODE_PATH_FMT "/%s",</div><div class='add'>+                          uuid_utoa(loc-&gt;pargfid), bname);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;path)</div><div class='del'>-                goto out;</div><div class='add'>+    if (loc-&gt;path)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> inode_path:</div><div class='del'>-        if (loc-&gt;inode &amp;&amp; !gf_uuid_is_null (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-                ret = inode_path (loc-&gt;inode, NULL, (char **)&amp;loc-&gt;path);</div><div class='del'>-        } else if (!gf_uuid_is_null (loc-&gt;gfid)) {</div><div class='del'>-                ret = gf_asprintf ((char**)&amp;loc-&gt;path, INODE_PATH_FMT,</div><div class='del'>-                                   uuid_utoa (loc-&gt;gfid));</div><div class='del'>-        }</div><div class='add'>+    if (loc-&gt;inode &amp;&amp; !gf_uuid_is_null(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+        ret = inode_path(loc-&gt;inode, NULL, (char **)&amp;loc-&gt;path);</div><div class='add'>+    } else if (!gf_uuid_is_null(loc-&gt;gfid)) {</div><div class='add'>+        ret = gf_asprintf((char **)&amp;loc-&gt;path, INODE_PATH_FMT,</div><div class='add'>+                          uuid_utoa(loc-&gt;gfid));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-loc_gfid (loc_t *loc, uuid_t gfid)</div><div class='add'>+loc_gfid(loc_t *loc, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        if (!gfid)</div><div class='del'>-                goto out;</div><div class='del'>-        gf_uuid_clear (gfid);</div><div class='del'>-</div><div class='del'>-        if (!loc)</div><div class='del'>-                goto out;</div><div class='del'>-        else if (!gf_uuid_is_null (loc-&gt;gfid))</div><div class='del'>-                gf_uuid_copy (gfid, loc-&gt;gfid);</div><div class='del'>-        else if (loc-&gt;inode &amp;&amp; (!gf_uuid_is_null (loc-&gt;inode-&gt;gfid)))</div><div class='del'>-                gf_uuid_copy (gfid, loc-&gt;inode-&gt;gfid);</div><div class='add'>+    if (!gfid)</div><div class='add'>+        goto out;</div><div class='add'>+    gf_uuid_clear(gfid);</div><div class='add'>+</div><div class='add'>+    if (!loc)</div><div class='add'>+        goto out;</div><div class='add'>+    else if (!gf_uuid_is_null(loc-&gt;gfid))</div><div class='add'>+        gf_uuid_copy(gfid, loc-&gt;gfid);</div><div class='add'>+    else if (loc-&gt;inode &amp;&amp; (!gf_uuid_is_null(loc-&gt;inode-&gt;gfid)))</div><div class='add'>+        gf_uuid_copy(gfid, loc-&gt;inode-&gt;gfid);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-loc_pargfid (loc_t *loc, uuid_t gfid)</div><div class='add'>+loc_pargfid(loc_t *loc, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        if (!gfid)</div><div class='del'>-                goto out;</div><div class='del'>-        gf_uuid_clear (gfid);</div><div class='del'>-</div><div class='del'>-        if (!loc)</div><div class='del'>-                goto out;</div><div class='del'>-        else if (!gf_uuid_is_null (loc-&gt;pargfid))</div><div class='del'>-                gf_uuid_copy (gfid, loc-&gt;pargfid);</div><div class='del'>-        else if (loc-&gt;parent &amp;&amp; (!gf_uuid_is_null (loc-&gt;parent-&gt;gfid)))</div><div class='del'>-                gf_uuid_copy (gfid, loc-&gt;parent-&gt;gfid);</div><div class='add'>+    if (!gfid)</div><div class='add'>+        goto out;</div><div class='add'>+    gf_uuid_clear(gfid);</div><div class='add'>+</div><div class='add'>+    if (!loc)</div><div class='add'>+        goto out;</div><div class='add'>+    else if (!gf_uuid_is_null(loc-&gt;pargfid))</div><div class='add'>+        gf_uuid_copy(gfid, loc-&gt;pargfid);</div><div class='add'>+    else if (loc-&gt;parent &amp;&amp; (!gf_uuid_is_null(loc-&gt;parent-&gt;gfid)))</div><div class='add'>+        gf_uuid_copy(gfid, loc-&gt;parent-&gt;gfid);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char*</div><div class='del'>-loc_gfid_utoa (loc_t *loc)</div><div class='add'>+char *</div><div class='add'>+loc_gfid_utoa(loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        uuid_t gfid = {0, };</div><div class='del'>-        loc_gfid (loc, gfid);</div><div class='del'>-        return uuid_utoa (gfid);</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_gfid(loc, gfid);</div><div class='add'>+    return uuid_utoa(gfid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-loc_touchup (loc_t *loc, const char *name)</div><div class='add'>+loc_touchup(loc_t *loc, const char *name)</div><div class='ctx'> {</div><div class='del'>-        char   *path   = NULL;</div><div class='del'>-        int    ret     = 0;</div><div class='del'>-</div><div class='del'>-        if (loc-&gt;path)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (loc-&gt;parent &amp;&amp; name &amp;&amp; strlen (name)) {</div><div class='del'>-                ret = inode_path (loc-&gt;parent, name, &amp;path);</div><div class='del'>-                if (path) /*Guaranteed to have trailing '/' */</div><div class='del'>-                        loc-&gt;name = strrchr (path, '/') + 1;</div><div class='del'>-</div><div class='del'>-                if (gf_uuid_is_null (loc-&gt;pargfid))</div><div class='del'>-                        gf_uuid_copy (loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='del'>-        } else if (loc-&gt;inode) {</div><div class='del'>-                ret = inode_path (loc-&gt;inode, 0, &amp;path);</div><div class='del'>-                if (gf_uuid_is_null (loc-&gt;gfid))</div><div class='del'>-                        gf_uuid_copy (loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0 || !path) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc-&gt;path = path;</div><div class='del'>-        ret = 0;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;path)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;parent &amp;&amp; name &amp;&amp; strlen(name)) {</div><div class='add'>+        ret = inode_path(loc-&gt;parent, name, &amp;path);</div><div class='add'>+        if (path) /*Guaranteed to have trailing '/' */</div><div class='add'>+            loc-&gt;name = strrchr(path, '/') + 1;</div><div class='add'>+</div><div class='add'>+        if (gf_uuid_is_null(loc-&gt;pargfid))</div><div class='add'>+            gf_uuid_copy(loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='add'>+    } else if (loc-&gt;inode) {</div><div class='add'>+        ret = inode_path(loc-&gt;inode, 0, &amp;path);</div><div class='add'>+        if (gf_uuid_is_null(loc-&gt;gfid))</div><div class='add'>+            gf_uuid_copy(loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0 || !path) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc-&gt;path = path;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-loc_copy_overload_parent (loc_t *dst, loc_t *src, inode_t *parent)</div><div class='add'>+loc_copy_overload_parent(loc_t *dst, loc_t *src, inode_t *parent)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", dst, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", src, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", parent, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", dst, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", src, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", parent, err);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (dst-&gt;gfid, src-&gt;gfid);</div><div class='del'>-        gf_uuid_copy (dst-&gt;pargfid, parent-&gt;gfid);</div><div class='add'>+    gf_uuid_copy(dst-&gt;gfid, src-&gt;gfid);</div><div class='add'>+    gf_uuid_copy(dst-&gt;pargfid, parent-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        if (src-&gt;inode)</div><div class='del'>-                dst-&gt;inode = inode_ref (src-&gt;inode);</div><div class='add'>+    if (src-&gt;inode)</div><div class='add'>+        dst-&gt;inode = inode_ref(src-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                dst-&gt;parent = inode_ref (parent);</div><div class='add'>+    if (parent)</div><div class='add'>+        dst-&gt;parent = inode_ref(parent);</div><div class='ctx'> </div><div class='del'>-        if (src-&gt;path) {</div><div class='del'>-                dst-&gt;path = gf_strdup (src-&gt;path);</div><div class='add'>+    if (src-&gt;path) {</div><div class='add'>+        dst-&gt;path = gf_strdup(src-&gt;path);</div><div class='ctx'> </div><div class='del'>-                if (!dst-&gt;path)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (!dst-&gt;path)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (src-&gt;name)</div><div class='del'>-                        dst-&gt;name = strrchr (dst-&gt;path, '/');</div><div class='del'>-                if (dst-&gt;name)</div><div class='del'>-                        dst-&gt;name++;</div><div class='del'>-        } else if (src-&gt;name) {</div><div class='del'>-		dst-&gt;name = src-&gt;name;</div><div class='del'>-	}</div><div class='add'>+        if (src-&gt;name)</div><div class='add'>+            dst-&gt;name = strrchr(dst-&gt;path, '/');</div><div class='add'>+        if (dst-&gt;name)</div><div class='add'>+            dst-&gt;name++;</div><div class='add'>+    } else if (src-&gt;name) {</div><div class='add'>+        dst-&gt;name = src-&gt;name;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                loc_wipe (dst);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        loc_wipe(dst);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-loc_copy (loc_t *dst, loc_t *src)</div><div class='add'>+loc_copy(loc_t *dst, loc_t *src)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", dst, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", src, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", dst, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", src, err);</div><div class='ctx'> </div><div class='del'>-        if (!gf_uuid_is_null (src-&gt;gfid))</div><div class='del'>-                gf_uuid_copy (dst-&gt;gfid, src-&gt;gfid);</div><div class='del'>-        else if (src-&gt;inode &amp;&amp; !gf_uuid_is_null (src-&gt;inode-&gt;gfid))</div><div class='del'>-                gf_uuid_copy (dst-&gt;gfid, src-&gt;inode-&gt;gfid);</div><div class='add'>+    if (!gf_uuid_is_null(src-&gt;gfid))</div><div class='add'>+        gf_uuid_copy(dst-&gt;gfid, src-&gt;gfid);</div><div class='add'>+    else if (src-&gt;inode &amp;&amp; !gf_uuid_is_null(src-&gt;inode-&gt;gfid))</div><div class='add'>+        gf_uuid_copy(dst-&gt;gfid, src-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (dst-&gt;pargfid, src-&gt;pargfid);</div><div class='add'>+    gf_uuid_copy(dst-&gt;pargfid, src-&gt;pargfid);</div><div class='ctx'> </div><div class='del'>-        if (src-&gt;inode)</div><div class='del'>-                dst-&gt;inode = inode_ref (src-&gt;inode);</div><div class='add'>+    if (src-&gt;inode)</div><div class='add'>+        dst-&gt;inode = inode_ref(src-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (src-&gt;parent)</div><div class='del'>-                dst-&gt;parent = inode_ref (src-&gt;parent);</div><div class='add'>+    if (src-&gt;parent)</div><div class='add'>+        dst-&gt;parent = inode_ref(src-&gt;parent);</div><div class='ctx'> </div><div class='del'>-        if (src-&gt;path) {</div><div class='del'>-                dst-&gt;path = gf_strdup (src-&gt;path);</div><div class='add'>+    if (src-&gt;path) {</div><div class='add'>+        dst-&gt;path = gf_strdup(src-&gt;path);</div><div class='ctx'> </div><div class='del'>-                if (!dst-&gt;path)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (!dst-&gt;path)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (src-&gt;name)</div><div class='del'>-                        dst-&gt;name = strrchr (dst-&gt;path, '/');</div><div class='del'>-                if (dst-&gt;name)</div><div class='del'>-                        dst-&gt;name++;</div><div class='del'>-        } else if (src-&gt;name) {</div><div class='del'>-		dst-&gt;name = src-&gt;name;</div><div class='del'>-	}</div><div class='add'>+        if (src-&gt;name)</div><div class='add'>+            dst-&gt;name = strrchr(dst-&gt;path, '/');</div><div class='add'>+        if (dst-&gt;name)</div><div class='add'>+            dst-&gt;name++;</div><div class='add'>+    } else if (src-&gt;name) {</div><div class='add'>+        dst-&gt;name = src-&gt;name;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                loc_wipe (dst);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        loc_wipe(dst);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-loc_is_root (loc_t *loc)</div><div class='add'>+loc_is_root(loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        if (loc &amp;&amp; __is_root_gfid (loc-&gt;gfid)) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        } else if (loc &amp;&amp; loc-&gt;inode &amp;&amp; __is_root_gfid (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (loc &amp;&amp; __is_root_gfid(loc-&gt;gfid)) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    } else if (loc &amp;&amp; loc-&gt;inode &amp;&amp; __is_root_gfid(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-loc_build_child (loc_t *child, loc_t *parent, char *name)</div><div class='add'>+loc_build_child(loc_t *child, loc_t *parent, char *name)</div><div class='ctx'> {</div><div class='del'>-        int32_t  ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", parent, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", parent, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", name, out);</div><div class='ctx'> </div><div class='del'>-        loc_gfid (parent, child-&gt;pargfid);</div><div class='add'>+    loc_gfid(parent, child-&gt;pargfid);</div><div class='ctx'> </div><div class='del'>-        if (strcmp (parent-&gt;path, "/") == 0)</div><div class='del'>-                ret = gf_asprintf ((char **)&amp;child-&gt;path, "/%s", name);</div><div class='del'>-        else</div><div class='del'>-                ret = gf_asprintf ((char **)&amp;child-&gt;path, "%s/%s", parent-&gt;path,</div><div class='del'>-                                   name);</div><div class='add'>+    if (strcmp(parent-&gt;path, "/") == 0)</div><div class='add'>+        ret = gf_asprintf((char **)&amp;child-&gt;path, "/%s", name);</div><div class='add'>+    else</div><div class='add'>+        ret = gf_asprintf((char **)&amp;child-&gt;path, "%s/%s", parent-&gt;path, name);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0 || !child-&gt;path) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0 || !child-&gt;path) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        child-&gt;name = strrchr (child-&gt;path, '/') + 1;</div><div class='add'>+    child-&gt;name = strrchr(child-&gt;path, '/') + 1;</div><div class='ctx'> </div><div class='del'>-        child-&gt;parent = inode_ref (parent-&gt;inode);</div><div class='del'>-        child-&gt;inode = inode_new (parent-&gt;inode-&gt;table);</div><div class='add'>+    child-&gt;parent = inode_ref(parent-&gt;inode);</div><div class='add'>+    child-&gt;inode = inode_new(parent-&gt;inode-&gt;table);</div><div class='ctx'> </div><div class='del'>-        if (!child-&gt;inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!child-&gt;inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if ((ret &lt; 0) &amp;&amp; child)</div><div class='del'>-                loc_wipe (child);</div><div class='add'>+    if ((ret &lt; 0) &amp;&amp; child)</div><div class='add'>+        loc_wipe(child);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-loc_is_nameless (loc_t *loc)</div><div class='add'>+loc_is_nameless(loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t ret = _gf_false;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("xlator", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("xlator", loc, out);</div><div class='ctx'> </div><div class='del'>-        if ((!loc-&gt;parent &amp;&amp; gf_uuid_is_null (loc-&gt;pargfid)) || !loc-&gt;name)</div><div class='del'>-                ret = _gf_true;</div><div class='add'>+    if ((!loc-&gt;parent &amp;&amp; gf_uuid_is_null(loc-&gt;pargfid)) || !loc-&gt;name)</div><div class='add'>+        ret = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xlator_destroy (xlator_t *xl)</div><div class='add'>+xlator_destroy(xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-        if (!xl)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!xl)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        xlator_members_free (xl);</div><div class='del'>-        xlator_memrec_free (xl);</div><div class='del'>-        GF_FREE (xl);</div><div class='add'>+    xlator_members_free(xl);</div><div class='add'>+    xlator_memrec_free(xl);</div><div class='add'>+    GF_FREE(xl);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-is_gf_log_command (xlator_t *this, const char *name, char *value)</div><div class='add'>+is_gf_log_command(xlator_t *this, const char *name, char *value)</div><div class='ctx'> {</div><div class='del'>-        xlator_t       *trav        = NULL;</div><div class='del'>-        char            key[1024]   = {0,};</div><div class='del'>-        int             ret         = -1;</div><div class='del'>-        int             log_level   = -1;</div><div class='del'>-        gf_boolean_t    syslog_flag = 0;</div><div class='del'>-        glusterfs_ctx_t *ctx        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!strcmp ("trusted.glusterfs.syslog", name)) {</div><div class='del'>-                ret = gf_string2boolean (value, &amp;syslog_flag);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        ret = EOPNOTSUPP;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (syslog_flag)</div><div class='del'>-                        gf_log_enable_syslog ();</div><div class='del'>-                else</div><div class='del'>-                        gf_log_disable_syslog ();</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fnmatch ("trusted.glusterfs*set-log-level", name, FNM_NOESCAPE))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        log_level = glusterd_check_log_level (value);</div><div class='del'>-        if (log_level == -1) {</div><div class='del'>-                ret = EOPNOTSUPP;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Some crude way to change the log-level of process */</div><div class='del'>-        if (!strcmp (name, "trusted.glusterfs.set-log-level")) {</div><div class='del'>-                gf_msg ("glusterfs", gf_log_get_loglevel(), 0,</div><div class='del'>-                        LG_MSG_SET_LOG_LEVEL,</div><div class='del'>-                        "setting log level to %d (old-value=%d)",</div><div class='del'>-                        log_level, gf_log_get_loglevel());</div><div class='del'>-                gf_log_set_loglevel (this-&gt;ctx, log_level);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!strcmp (name, "trusted.glusterfs.fuse.set-log-level")) {</div><div class='del'>-                /* */</div><div class='del'>-                gf_msg (this-&gt;name, gf_log_get_xl_loglevel (this), 0,</div><div class='del'>-                        LG_MSG_SET_LOG_LEVEL,</div><div class='del'>-                        "setting log level to %d (old-value=%d)",</div><div class='del'>-                        log_level, gf_log_get_xl_loglevel (this));</div><div class='del'>-                gf_log_set_xl_loglevel (this, log_level);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-        if (!ctx-&gt;active)</div><div class='del'>-                goto out;</div><div class='del'>-        trav = ctx-&gt;active-&gt;top;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                snprintf (key, 1024, "trusted.glusterfs.%s.set-log-level",</div><div class='del'>-                          trav-&gt;name);</div><div class='del'>-                if (fnmatch (name, key, FNM_NOESCAPE) == 0) {</div><div class='del'>-                        gf_msg (trav-&gt;name, gf_log_get_xl_loglevel (trav), 0,</div><div class='del'>-                                LG_MSG_SET_LOG_LEVEL,</div><div class='del'>-                                "setting log level to %d (old-value=%d)",</div><div class='del'>-                                log_level, gf_log_get_xl_loglevel (trav));</div><div class='del'>-                        gf_log_set_xl_loglevel (trav, log_level);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    xlator_t *trav = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int log_level = -1;</div><div class='add'>+    gf_boolean_t syslog_flag = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    if (!strcmp("trusted.glusterfs.syslog", name)) {</div><div class='add'>+        ret = gf_string2boolean(value, &amp;syslog_flag);</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = EOPNOTSUPP;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        if (syslog_flag)</div><div class='add'>+            gf_log_enable_syslog();</div><div class='add'>+        else</div><div class='add'>+            gf_log_disable_syslog();</div><div class='add'>+</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fnmatch("trusted.glusterfs*set-log-level", name, FNM_NOESCAPE))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    log_level = glusterd_check_log_level(value);</div><div class='add'>+    if (log_level == -1) {</div><div class='add'>+        ret = EOPNOTSUPP;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Some crude way to change the log-level of process */</div><div class='add'>+    if (!strcmp(name, "trusted.glusterfs.set-log-level")) {</div><div class='add'>+        gf_msg("glusterfs", gf_log_get_loglevel(), 0, LG_MSG_SET_LOG_LEVEL,</div><div class='add'>+               "setting log level to %d (old-value=%d)", log_level,</div><div class='add'>+               gf_log_get_loglevel());</div><div class='add'>+        gf_log_set_loglevel(this-&gt;ctx, log_level);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(name, "trusted.glusterfs.fuse.set-log-level")) {</div><div class='add'>+        /* */</div><div class='add'>+        gf_msg(this-&gt;name, gf_log_get_xl_loglevel(this), 0,</div><div class='add'>+               LG_MSG_SET_LOG_LEVEL, "setting log level to %d (old-value=%d)",</div><div class='add'>+               log_level, gf_log_get_xl_loglevel(this));</div><div class='add'>+        gf_log_set_xl_loglevel(this, log_level);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+    if (!ctx-&gt;active)</div><div class='add'>+        goto out;</div><div class='add'>+    trav = ctx-&gt;active-&gt;top;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        snprintf(key, 1024, "trusted.glusterfs.%s.set-log-level", trav-&gt;name);</div><div class='add'>+        if (fnmatch(name, key, FNM_NOESCAPE) == 0) {</div><div class='add'>+            gf_msg(trav-&gt;name, gf_log_get_xl_loglevel(trav), 0,</div><div class='add'>+                   LG_MSG_SET_LOG_LEVEL,</div><div class='add'>+                   "setting log level to %d (old-value=%d)", log_level,</div><div class='add'>+                   gf_log_get_xl_loglevel(trav));</div><div class='add'>+            gf_log_set_xl_loglevel(trav, log_level);</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-glusterd_check_log_level (const char *value)</div><div class='add'>+glusterd_check_log_level(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int log_level = -1;</div><div class='del'>-</div><div class='del'>-        if (!strcasecmp (value, "CRITICAL")) {</div><div class='del'>-                log_level = GF_LOG_CRITICAL;</div><div class='del'>-        } else if (!strcasecmp (value, "ERROR")) {</div><div class='del'>-                log_level = GF_LOG_ERROR;</div><div class='del'>-        } else if (!strcasecmp (value, "WARNING")) {</div><div class='del'>-                log_level = GF_LOG_WARNING;</div><div class='del'>-        } else if (!strcasecmp (value, "INFO")) {</div><div class='del'>-                log_level = GF_LOG_INFO;</div><div class='del'>-        } else if (!strcasecmp (value, "DEBUG")) {</div><div class='del'>-                log_level = GF_LOG_DEBUG;</div><div class='del'>-        } else if (!strcasecmp (value, "TRACE")) {</div><div class='del'>-                log_level = GF_LOG_TRACE;</div><div class='del'>-        } else if (!strcasecmp (value, "NONE")) {</div><div class='del'>-                log_level = GF_LOG_NONE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (log_level == -1)</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INIT_FAILED,</div><div class='del'>-                        "Invalid log-level. possible values are "</div><div class='del'>-                        "DEBUG|WARNING|ERROR|CRITICAL|NONE|TRACE");</div><div class='del'>-</div><div class='del'>-        return log_level;</div><div class='add'>+    int log_level = -1;</div><div class='add'>+</div><div class='add'>+    if (!strcasecmp(value, "CRITICAL")) {</div><div class='add'>+        log_level = GF_LOG_CRITICAL;</div><div class='add'>+    } else if (!strcasecmp(value, "ERROR")) {</div><div class='add'>+        log_level = GF_LOG_ERROR;</div><div class='add'>+    } else if (!strcasecmp(value, "WARNING")) {</div><div class='add'>+        log_level = GF_LOG_WARNING;</div><div class='add'>+    } else if (!strcasecmp(value, "INFO")) {</div><div class='add'>+        log_level = GF_LOG_INFO;</div><div class='add'>+    } else if (!strcasecmp(value, "DEBUG")) {</div><div class='add'>+        log_level = GF_LOG_DEBUG;</div><div class='add'>+    } else if (!strcasecmp(value, "TRACE")) {</div><div class='add'>+        log_level = GF_LOG_TRACE;</div><div class='add'>+    } else if (!strcasecmp(value, "NONE")) {</div><div class='add'>+        log_level = GF_LOG_NONE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (log_level == -1)</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, LG_MSG_INIT_FAILED,</div><div class='add'>+               "Invalid log-level. possible values are "</div><div class='add'>+               "DEBUG|WARNING|ERROR|CRITICAL|NONE|TRACE");</div><div class='add'>+</div><div class='add'>+    return log_level;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_subvolume_count (xlator_t *this)</div><div class='add'>+xlator_subvolume_count(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        xlator_list_t *list = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_list_t *list = NULL;</div><div class='ctx'> </div><div class='del'>-        for (list = this-&gt;children; list; list = list-&gt;next)</div><div class='del'>-                i++;</div><div class='del'>-        return i;</div><div class='add'>+    for (list = this-&gt;children; list; list = list-&gt;next)</div><div class='add'>+        i++;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_copy_opt_to_child (dict_t *options, char *key, data_t *value, void *data)</div><div class='add'>+_copy_opt_to_child(dict_t *options, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *child = data;</div><div class='add'>+    xlator_t *child = data;</div><div class='ctx'> </div><div class='del'>-        gf_log (__func__, GF_LOG_DEBUG,</div><div class='del'>-                "copying %s to child %s", key, child-&gt;name);</div><div class='del'>-        dict_set (child-&gt;options, key, value);</div><div class='add'>+    gf_log(__func__, GF_LOG_DEBUG, "copying %s to child %s", key, child-&gt;name);</div><div class='add'>+    dict_set(child-&gt;options, key, value);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-copy_opts_to_child (xlator_t *src, xlator_t *dst, char *glob)</div><div class='add'>+copy_opts_to_child(xlator_t *src, xlator_t *dst, char *glob)</div><div class='ctx'> {</div><div class='del'>-        return dict_foreach_fnmatch (src-&gt;options, glob,</div><div class='del'>-                                     _copy_opt_to_child, dst);</div><div class='add'>+    return dict_foreach_fnmatch(src-&gt;options, glob, _copy_opt_to_child, dst);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glusterfs_delete_volfile_checksum (glusterfs_ctx_t *ctx,</div><div class='del'>-                                   const char *volfile_id) {</div><div class='del'>-</div><div class='del'>-        gf_volfile_t            *volfile_tmp      = NULL;</div><div class='del'>-        gf_volfile_t            *volfile_obj      = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (volfile_tmp,  &amp;ctx-&gt;volfile_list,</div><div class='del'>-                             volfile_list) {</div><div class='del'>-                if (!strcmp (volfile_id, volfile_tmp-&gt;vol_id)) {</div><div class='del'>-                        list_del_init (&amp;volfile_tmp-&gt;volfile_list);</div><div class='del'>-                        volfile_obj = volfile_tmp;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (volfile_obj) {</div><div class='del'>-                GF_FREE (volfile_obj);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "failed to get volfile "</div><div class='del'>-                        "checksum for volfile id %s.", volfile_id);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+glusterfs_delete_volfile_checksum(glusterfs_ctx_t *ctx, const char *volfile_id)</div><div class='add'>+{</div><div class='add'>+    gf_volfile_t *volfile_tmp = NULL;</div><div class='add'>+    gf_volfile_t *volfile_obj = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(volfile_tmp, &amp;ctx-&gt;volfile_list, volfile_list)</div><div class='add'>+    {</div><div class='add'>+        if (!strcmp(volfile_id, volfile_tmp-&gt;vol_id)) {</div><div class='add'>+            list_del_init(&amp;volfile_tmp-&gt;volfile_list);</div><div class='add'>+            volfile_obj = volfile_tmp;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (volfile_obj) {</div><div class='add'>+        GF_FREE(volfile_obj);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get volfile "</div><div class='add'>+               "checksum for volfile id %s.",</div><div class='add'>+               volfile_id);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/auth-glusterfs.c b/rpc/rpc-lib/src/auth-glusterfs.c<br/>index 78f283557b0..d569a0403f8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/auth-glusterfs.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/auth-glusterfs.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/auth-glusterfs.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/auth-glusterfs.c</a></div><div class='hunk'>@@ -8,8 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> #include "rpcsvc.h"</div><div class='ctx'> #include "list.h"</div><div class='ctx'> #include "dict.h"</div><div class='hunk'>@@ -21,386 +19,369 @@</div><div class='ctx'> /* V1 */</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_glusterfs_auth (char *buf, struct auth_glusterfs_parms *req)</div><div class='add'>+xdr_to_glusterfs_auth(char *buf, struct auth_glusterfs_parms *req)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t ret = -1;</div><div class='del'>-</div><div class='del'>-        if ((!buf) || (!req))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        xdrmem_create (&amp;xdr, buf, sizeof (struct auth_glusterfs_parms),</div><div class='del'>-                       XDR_DECODE);</div><div class='del'>-        if (!xdr_auth_glusterfs_parms (&amp;xdr, req)) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "failed to decode glusterfs parameters");</div><div class='del'>-                ret  = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='del'>-ret:</div><div class='del'>-        return ret;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='add'>+    if ((!buf) || (!req))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    xdrmem_create(&amp;xdr, buf, sizeof(struct auth_glusterfs_parms), XDR_DECODE);</div><div class='add'>+    if (!xdr_auth_glusterfs_parms(&amp;xdr, req)) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode glusterfs parameters");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='add'>+ret:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-auth_glusterfs_request_init (rpcsvc_request_t *req, void *priv)</div><div class='add'>+auth_glusterfs_request_init(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int auth_glusterfs_authenticate (rpcsvc_request_t *req, void *priv)</div><div class='add'>+int</div><div class='add'>+auth_glusterfs_authenticate(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        struct auth_glusterfs_parms  au = {0,};</div><div class='del'>-</div><div class='del'>-        int ret      = RPCSVC_AUTH_REJECT;</div><div class='del'>-        int j        = 0;</div><div class='del'>-        int i        = 0;</div><div class='del'>-        int gidcount = 0;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_glusterfs_auth (req-&gt;cred.authdata, &amp;au);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "failed to decode glusterfs credentials");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;pid = au.pid;</div><div class='del'>-        req-&gt;uid = au.uid;</div><div class='del'>-        req-&gt;gid = au.gid;</div><div class='del'>-        req-&gt;lk_owner.len = 8;</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; req-&gt;lk_owner.len; i++, j += 8)</div><div class='del'>-                        req-&gt;lk_owner.data[i] = (char)((au.lk_owner &gt;&gt; j) &amp; 0xff);</div><div class='del'>-        }</div><div class='del'>-        req-&gt;auxgidcount = au.ngrps;</div><div class='del'>-</div><div class='del'>-        if (req-&gt;auxgidcount &gt; 16) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "more than 16 aux gids found, failing authentication");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (req-&gt;auxgidcount &gt; SMALL_GROUP_COUNT) {</div><div class='del'>-		req-&gt;auxgidlarge = GF_CALLOC(req-&gt;auxgidcount,</div><div class='del'>-					     sizeof(req-&gt;auxgids[0]),</div><div class='del'>-					     gf_common_mt_auxgids);</div><div class='del'>-		req-&gt;auxgids = req-&gt;auxgidlarge;</div><div class='del'>-	} else {</div><div class='del'>-		req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!req-&gt;auxgids) {</div><div class='del'>-		gf_log ("auth-glusterfs", GF_LOG_WARNING,</div><div class='del'>-			"cannot allocate gid list");</div><div class='del'>-		ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        for (gidcount = 0; gidcount &lt; au.ngrps; ++gidcount)</div><div class='del'>-                req-&gt;auxgids[gidcount] = au.groups[gidcount];</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Auth Info: pid: %u, uid: %d"</div><div class='del'>-                ", gid: %d, owner: %s",</div><div class='del'>-                req-&gt;pid, req-&gt;uid, req-&gt;gid, lkowner_utoa (&amp;req-&gt;lk_owner));</div><div class='del'>-        ret = RPCSVC_AUTH_ACCEPT;</div><div class='del'>-err:</div><div class='add'>+    struct auth_glusterfs_parms au = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int gidcount = 0;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='ctx'>         return ret;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_glusterfs_auth(req-&gt;cred.authdata, &amp;au);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode glusterfs credentials");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;pid = au.pid;</div><div class='add'>+    req-&gt;uid = au.uid;</div><div class='add'>+    req-&gt;gid = au.gid;</div><div class='add'>+    req-&gt;lk_owner.len = 8;</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; req-&gt;lk_owner.len; i++, j += 8)</div><div class='add'>+            req-&gt;lk_owner.data[i] = (char)((au.lk_owner &gt;&gt; j) &amp; 0xff);</div><div class='add'>+    }</div><div class='add'>+    req-&gt;auxgidcount = au.ngrps;</div><div class='add'>+</div><div class='add'>+    if (req-&gt;auxgidcount &gt; 16) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING,</div><div class='add'>+               "more than 16 aux gids found, failing authentication");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req-&gt;auxgidcount &gt; SMALL_GROUP_COUNT) {</div><div class='add'>+        req-&gt;auxgidlarge = GF_CALLOC(req-&gt;auxgidcount, sizeof(req-&gt;auxgids[0]),</div><div class='add'>+                                     gf_common_mt_auxgids);</div><div class='add'>+        req-&gt;auxgids = req-&gt;auxgidlarge;</div><div class='add'>+    } else {</div><div class='add'>+        req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!req-&gt;auxgids) {</div><div class='add'>+        gf_log("auth-glusterfs", GF_LOG_WARNING, "cannot allocate gid list");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (gidcount = 0; gidcount &lt; au.ngrps; ++gidcount)</div><div class='add'>+        req-&gt;auxgids[gidcount] = au.groups[gidcount];</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+           "Auth Info: pid: %u, uid: %d"</div><div class='add'>+           ", gid: %d, owner: %s",</div><div class='add'>+           req-&gt;pid, req-&gt;uid, req-&gt;gid, lkowner_utoa(&amp;req-&gt;lk_owner));</div><div class='add'>+    ret = RPCSVC_AUTH_ACCEPT;</div><div class='add'>+err:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_ops_t auth_glusterfs_ops = {</div><div class='del'>-        .transport_init         = NULL,</div><div class='del'>-        .request_init           = auth_glusterfs_request_init,</div><div class='del'>-        .authenticate           = auth_glusterfs_authenticate</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-rpcsvc_auth_t rpcsvc_auth_glusterfs = {</div><div class='del'>-        .authname       = "AUTH_GLUSTERFS",</div><div class='del'>-        .authnum        = AUTH_GLUSTERFS,</div><div class='del'>-        .authops        = &amp;auth_glusterfs_ops,</div><div class='del'>-        .authprivate    = NULL</div><div class='del'>-};</div><div class='add'>+    .transport_init = NULL,</div><div class='add'>+    .request_init = auth_glusterfs_request_init,</div><div class='add'>+    .authenticate = auth_glusterfs_authenticate};</div><div class='ctx'> </div><div class='add'>+rpcsvc_auth_t rpcsvc_auth_glusterfs = {.authname = "AUTH_GLUSTERFS",</div><div class='add'>+                                       .authnum = AUTH_GLUSTERFS,</div><div class='add'>+                                       .authops = &amp;auth_glusterfs_ops,</div><div class='add'>+                                       .authprivate = NULL};</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_glusterfs_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_glusterfs_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        return &amp;rpcsvc_auth_glusterfs;</div><div class='add'>+    return &amp;rpcsvc_auth_glusterfs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* V2 */</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_glusterfs_auth_v2 (char *buf, struct auth_glusterfs_parms_v2 *req)</div><div class='add'>+xdr_to_glusterfs_auth_v2(char *buf, struct auth_glusterfs_parms_v2 *req)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!buf) || (!req))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!buf) || (!req))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, buf, GF_MAX_AUTH_BYTES, XDR_DECODE);</div><div class='del'>-        if (!xdr_auth_glusterfs_parms_v2 (&amp;xdr, req)) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "failed to decode glusterfs v2 parameters");</div><div class='del'>-                ret  = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='add'>+    xdrmem_create(&amp;xdr, buf, GF_MAX_AUTH_BYTES, XDR_DECODE);</div><div class='add'>+    if (!xdr_auth_glusterfs_parms_v2(&amp;xdr, req)) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode glusterfs v2 parameters");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='add'>+    ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-auth_glusterfs_v2_request_init (rpcsvc_request_t *req, void *priv)</div><div class='add'>+auth_glusterfs_v2_request_init(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int auth_glusterfs_v2_authenticate (rpcsvc_request_t *req, void *priv)</div><div class='add'>+int</div><div class='add'>+auth_glusterfs_v2_authenticate(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        struct auth_glusterfs_parms_v2  au = {0,};</div><div class='del'>-        int ret                            = RPCSVC_AUTH_REJECT;</div><div class='del'>-        int i                              = 0;</div><div class='del'>-        int max_groups                     = 0;</div><div class='del'>-        int max_lk_owner_len               = 0;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_glusterfs_auth_v2 (req-&gt;cred.authdata, &amp;au);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "failed to decode glusterfs credentials");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;pid = au.pid;</div><div class='del'>-        req-&gt;uid = au.uid;</div><div class='del'>-        req-&gt;gid = au.gid;</div><div class='del'>-        req-&gt;lk_owner.len = au.lk_owner.lk_owner_len;</div><div class='del'>-        req-&gt;auxgidcount = au.groups.groups_len;</div><div class='del'>-</div><div class='del'>-        /* the number of groups and size of lk_owner depend on each other */</div><div class='del'>-        max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS (req-&gt;lk_owner.len,</div><div class='del'>-                                                   AUTH_GLUSTERFS_v2);</div><div class='del'>-        max_lk_owner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER (req-&gt;auxgidcount,</div><div class='del'>-                                                          AUTH_GLUSTERFS_v2);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;auxgidcount &gt; max_groups) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "more than max aux gids found (%d) , truncating it "</div><div class='del'>-                        "to %d and continuing", au.groups.groups_len,</div><div class='del'>-                        max_groups);</div><div class='del'>-                req-&gt;auxgidcount = max_groups;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (req-&gt;lk_owner.len &gt; max_lk_owner_len) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "lkowner field to big (%d), depends on the number of "</div><div class='del'>-                        "groups (%d), failing authentication",</div><div class='del'>-                        req-&gt;lk_owner.len, req-&gt;auxgidcount);</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (req-&gt;auxgidcount &gt; SMALL_GROUP_COUNT) {</div><div class='del'>-		req-&gt;auxgidlarge = GF_CALLOC(req-&gt;auxgidcount,</div><div class='del'>-					     sizeof(req-&gt;auxgids[0]),</div><div class='del'>-					     gf_common_mt_auxgids);</div><div class='del'>-		req-&gt;auxgids = req-&gt;auxgidlarge;</div><div class='del'>-	} else {</div><div class='del'>-		req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!req-&gt;auxgids) {</div><div class='del'>-		gf_log ("auth-glusterfs-v2", GF_LOG_WARNING,</div><div class='del'>-			"cannot allocate gid list");</div><div class='del'>-		ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; req-&gt;auxgidcount; ++i)</div><div class='del'>-                req-&gt;auxgids[i] = au.groups.groups_val[i];</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; au.lk_owner.lk_owner_len; ++i)</div><div class='del'>-                req-&gt;lk_owner.data[i] = au.lk_owner.lk_owner_val[i];</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Auth Info: pid: %u, uid: %d"</div><div class='del'>-                ", gid: %d, owner: %s",</div><div class='del'>-                req-&gt;pid, req-&gt;uid, req-&gt;gid, lkowner_utoa (&amp;req-&gt;lk_owner));</div><div class='del'>-        ret = RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    struct auth_glusterfs_parms_v2 au = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int max_groups = 0;</div><div class='add'>+    int max_lk_owner_len = 0;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_glusterfs_auth_v2(req-&gt;cred.authdata, &amp;au);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode glusterfs credentials");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;pid = au.pid;</div><div class='add'>+    req-&gt;uid = au.uid;</div><div class='add'>+    req-&gt;gid = au.gid;</div><div class='add'>+    req-&gt;lk_owner.len = au.lk_owner.lk_owner_len;</div><div class='add'>+    req-&gt;auxgidcount = au.groups.groups_len;</div><div class='add'>+</div><div class='add'>+    /* the number of groups and size of lk_owner depend on each other */</div><div class='add'>+    max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS(req-&gt;lk_owner.len,</div><div class='add'>+                                              AUTH_GLUSTERFS_v2);</div><div class='add'>+    max_lk_owner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER(req-&gt;auxgidcount,</div><div class='add'>+                                                     AUTH_GLUSTERFS_v2);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;auxgidcount &gt; max_groups) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING,</div><div class='add'>+               "more than max aux gids found (%d) , truncating it "</div><div class='add'>+               "to %d and continuing",</div><div class='add'>+               au.groups.groups_len, max_groups);</div><div class='add'>+        req-&gt;auxgidcount = max_groups;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req-&gt;lk_owner.len &gt; max_lk_owner_len) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING,</div><div class='add'>+               "lkowner field to big (%d), depends on the number of "</div><div class='add'>+               "groups (%d), failing authentication",</div><div class='add'>+               req-&gt;lk_owner.len, req-&gt;auxgidcount);</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req-&gt;auxgidcount &gt; SMALL_GROUP_COUNT) {</div><div class='add'>+        req-&gt;auxgidlarge = GF_CALLOC(req-&gt;auxgidcount, sizeof(req-&gt;auxgids[0]),</div><div class='add'>+                                     gf_common_mt_auxgids);</div><div class='add'>+        req-&gt;auxgids = req-&gt;auxgidlarge;</div><div class='add'>+    } else {</div><div class='add'>+        req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!req-&gt;auxgids) {</div><div class='add'>+        gf_log("auth-glusterfs-v2", GF_LOG_WARNING, "cannot allocate gid list");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; req-&gt;auxgidcount; ++i)</div><div class='add'>+        req-&gt;auxgids[i] = au.groups.groups_val[i];</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; au.lk_owner.lk_owner_len; ++i)</div><div class='add'>+        req-&gt;lk_owner.data[i] = au.lk_owner.lk_owner_val[i];</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+           "Auth Info: pid: %u, uid: %d"</div><div class='add'>+           ", gid: %d, owner: %s",</div><div class='add'>+           req-&gt;pid, req-&gt;uid, req-&gt;gid, lkowner_utoa(&amp;req-&gt;lk_owner));</div><div class='add'>+    ret = RPCSVC_AUTH_ACCEPT;</div><div class='ctx'> err:</div><div class='del'>-        /* TODO: instead use alloca() for these variables */</div><div class='del'>-        free (au.groups.groups_val);</div><div class='del'>-        free (au.lk_owner.lk_owner_val);</div><div class='add'>+    /* TODO: instead use alloca() for these variables */</div><div class='add'>+    free(au.groups.groups_val);</div><div class='add'>+    free(au.lk_owner.lk_owner_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_ops_t auth_glusterfs_ops_v2 = {</div><div class='del'>-        .transport_init         = NULL,</div><div class='del'>-        .request_init           = auth_glusterfs_v2_request_init,</div><div class='del'>-        .authenticate           = auth_glusterfs_v2_authenticate</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-rpcsvc_auth_t rpcsvc_auth_glusterfs_v2 = {</div><div class='del'>-        .authname       = "AUTH_GLUSTERFS-v2",</div><div class='del'>-        .authnum        = AUTH_GLUSTERFS_v2,</div><div class='del'>-        .authops        = &amp;auth_glusterfs_ops_v2,</div><div class='del'>-        .authprivate    = NULL</div><div class='del'>-};</div><div class='add'>+    .transport_init = NULL,</div><div class='add'>+    .request_init = auth_glusterfs_v2_request_init,</div><div class='add'>+    .authenticate = auth_glusterfs_v2_authenticate};</div><div class='ctx'> </div><div class='add'>+rpcsvc_auth_t rpcsvc_auth_glusterfs_v2 = {.authname = "AUTH_GLUSTERFS-v2",</div><div class='add'>+                                          .authnum = AUTH_GLUSTERFS_v2,</div><div class='add'>+                                          .authops = &amp;auth_glusterfs_ops_v2,</div><div class='add'>+                                          .authprivate = NULL};</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_glusterfs_v2_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_glusterfs_v2_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        return &amp;rpcsvc_auth_glusterfs_v2;</div><div class='add'>+    return &amp;rpcsvc_auth_glusterfs_v2;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* V3 */</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_glusterfs_auth_v3 (char *buf, struct auth_glusterfs_params_v3 *req)</div><div class='add'>+xdr_to_glusterfs_auth_v3(char *buf, struct auth_glusterfs_params_v3 *req)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!buf) || (!req))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!buf) || (!req))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, buf, GF_MAX_AUTH_BYTES, XDR_DECODE);</div><div class='del'>-        if (!xdr_auth_glusterfs_params_v3 (&amp;xdr, req)) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "failed to decode glusterfs v3 parameters");</div><div class='del'>-                ret  = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='add'>+    xdrmem_create(&amp;xdr, buf, GF_MAX_AUTH_BYTES, XDR_DECODE);</div><div class='add'>+    if (!xdr_auth_glusterfs_params_v3(&amp;xdr, req)) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode glusterfs v3 parameters");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='add'>+    ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-auth_glusterfs_v3_request_init (rpcsvc_request_t *req, void *priv)</div><div class='add'>+auth_glusterfs_v3_request_init(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int auth_glusterfs_v3_authenticate (rpcsvc_request_t *req, void *priv)</div><div class='add'>+int</div><div class='add'>+auth_glusterfs_v3_authenticate(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        struct auth_glusterfs_params_v3  au = {0,};</div><div class='del'>-        int ret                            = RPCSVC_AUTH_REJECT;</div><div class='del'>-        int i                              = 0;</div><div class='del'>-        int max_groups                     = 0;</div><div class='del'>-        int max_lk_owner_len               = 0;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_glusterfs_auth_v3 (req-&gt;cred.authdata, &amp;au);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "failed to decode glusterfs credentials");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;pid = au.pid;</div><div class='del'>-        req-&gt;uid = au.uid;</div><div class='del'>-        req-&gt;gid = au.gid;</div><div class='del'>-        req-&gt;lk_owner.len = au.lk_owner.lk_owner_len;</div><div class='del'>-        req-&gt;auxgidcount = au.groups.groups_len;</div><div class='del'>-</div><div class='del'>-        /* the number of groups and size of lk_owner depend on each other */</div><div class='del'>-        max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS (req-&gt;lk_owner.len,</div><div class='del'>-                                                   AUTH_GLUSTERFS_v3);</div><div class='del'>-        max_lk_owner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER (req-&gt;auxgidcount,</div><div class='del'>-                                                          AUTH_GLUSTERFS_v3);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;auxgidcount &gt; max_groups) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "more than max aux gids found (%d) , truncating it "</div><div class='del'>-                        "to %d and continuing", au.groups.groups_len,</div><div class='del'>-                        max_groups);</div><div class='del'>-                req-&gt;auxgidcount = max_groups;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (req-&gt;lk_owner.len &gt; max_lk_owner_len) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                        "lkowner field to big (%d), depends on the number of "</div><div class='del'>-                        "groups (%d), failing authentication",</div><div class='del'>-                        req-&gt;lk_owner.len, req-&gt;auxgidcount);</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (req-&gt;auxgidcount &gt; SMALL_GROUP_COUNT) {</div><div class='del'>-		req-&gt;auxgidlarge = GF_CALLOC(req-&gt;auxgidcount,</div><div class='del'>-					     sizeof(req-&gt;auxgids[0]),</div><div class='del'>-					     gf_common_mt_auxgids);</div><div class='del'>-		req-&gt;auxgids = req-&gt;auxgidlarge;</div><div class='del'>-	} else {</div><div class='del'>-		req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!req-&gt;auxgids) {</div><div class='del'>-		gf_log ("auth-glusterfs-v2", GF_LOG_WARNING,</div><div class='del'>-			"cannot allocate gid list");</div><div class='del'>-		ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; req-&gt;auxgidcount; ++i)</div><div class='del'>-                req-&gt;auxgids[i] = au.groups.groups_val[i];</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; au.lk_owner.lk_owner_len; ++i)</div><div class='del'>-                req-&gt;lk_owner.data[i] = au.lk_owner.lk_owner_val[i];</div><div class='del'>-</div><div class='del'>-        /* All new things, starting glusterfs-4.0.0 */</div><div class='del'>-        req-&gt;flags = au.flags;</div><div class='del'>-        req-&gt;ctime.tv_sec = au.ctime_sec;</div><div class='del'>-        req-&gt;ctime.tv_nsec = au.ctime_nsec;</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Auth Info: pid: %u, uid: %d"</div><div class='del'>-                ", gid: %d, owner: %s, flags: %d",</div><div class='del'>-                req-&gt;pid, req-&gt;uid, req-&gt;gid, lkowner_utoa (&amp;req-&gt;lk_owner),</div><div class='del'>-                req-&gt;flags);</div><div class='del'>-        ret = RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    struct auth_glusterfs_params_v3 au = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int max_groups = 0;</div><div class='add'>+    int max_lk_owner_len = 0;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_glusterfs_auth_v3(req-&gt;cred.authdata, &amp;au);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode glusterfs credentials");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;pid = au.pid;</div><div class='add'>+    req-&gt;uid = au.uid;</div><div class='add'>+    req-&gt;gid = au.gid;</div><div class='add'>+    req-&gt;lk_owner.len = au.lk_owner.lk_owner_len;</div><div class='add'>+    req-&gt;auxgidcount = au.groups.groups_len;</div><div class='add'>+</div><div class='add'>+    /* the number of groups and size of lk_owner depend on each other */</div><div class='add'>+    max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS(req-&gt;lk_owner.len,</div><div class='add'>+                                              AUTH_GLUSTERFS_v3);</div><div class='add'>+    max_lk_owner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER(req-&gt;auxgidcount,</div><div class='add'>+                                                     AUTH_GLUSTERFS_v3);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;auxgidcount &gt; max_groups) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING,</div><div class='add'>+               "more than max aux gids found (%d) , truncating it "</div><div class='add'>+               "to %d and continuing",</div><div class='add'>+               au.groups.groups_len, max_groups);</div><div class='add'>+        req-&gt;auxgidcount = max_groups;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req-&gt;lk_owner.len &gt; max_lk_owner_len) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING,</div><div class='add'>+               "lkowner field to big (%d), depends on the number of "</div><div class='add'>+               "groups (%d), failing authentication",</div><div class='add'>+               req-&gt;lk_owner.len, req-&gt;auxgidcount);</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (req-&gt;auxgidcount &gt; SMALL_GROUP_COUNT) {</div><div class='add'>+        req-&gt;auxgidlarge = GF_CALLOC(req-&gt;auxgidcount, sizeof(req-&gt;auxgids[0]),</div><div class='add'>+                                     gf_common_mt_auxgids);</div><div class='add'>+        req-&gt;auxgids = req-&gt;auxgidlarge;</div><div class='add'>+    } else {</div><div class='add'>+        req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!req-&gt;auxgids) {</div><div class='add'>+        gf_log("auth-glusterfs-v2", GF_LOG_WARNING, "cannot allocate gid list");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; req-&gt;auxgidcount; ++i)</div><div class='add'>+        req-&gt;auxgids[i] = au.groups.groups_val[i];</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; au.lk_owner.lk_owner_len; ++i)</div><div class='add'>+        req-&gt;lk_owner.data[i] = au.lk_owner.lk_owner_val[i];</div><div class='add'>+</div><div class='add'>+    /* All new things, starting glusterfs-4.0.0 */</div><div class='add'>+    req-&gt;flags = au.flags;</div><div class='add'>+    req-&gt;ctime.tv_sec = au.ctime_sec;</div><div class='add'>+    req-&gt;ctime.tv_nsec = au.ctime_nsec;</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+           "Auth Info: pid: %u, uid: %d"</div><div class='add'>+           ", gid: %d, owner: %s, flags: %d",</div><div class='add'>+           req-&gt;pid, req-&gt;uid, req-&gt;gid, lkowner_utoa(&amp;req-&gt;lk_owner),</div><div class='add'>+           req-&gt;flags);</div><div class='add'>+    ret = RPCSVC_AUTH_ACCEPT;</div><div class='ctx'> err:</div><div class='del'>-        /* TODO: instead use alloca() for these variables */</div><div class='del'>-        free (au.groups.groups_val);</div><div class='del'>-        free (au.lk_owner.lk_owner_val);</div><div class='add'>+    /* TODO: instead use alloca() for these variables */</div><div class='add'>+    free(au.groups.groups_val);</div><div class='add'>+    free(au.lk_owner.lk_owner_val);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_ops_t auth_glusterfs_ops_v3 = {</div><div class='del'>-        .transport_init         = NULL,</div><div class='del'>-        .request_init           = auth_glusterfs_v3_request_init,</div><div class='del'>-        .authenticate           = auth_glusterfs_v3_authenticate</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-rpcsvc_auth_t rpcsvc_auth_glusterfs_v3 = {</div><div class='del'>-        .authname       = "AUTH_GLUSTERFS-v3",</div><div class='del'>-        .authnum        = AUTH_GLUSTERFS_v3,</div><div class='del'>-        .authops        = &amp;auth_glusterfs_ops_v3,</div><div class='del'>-        .authprivate    = NULL</div><div class='del'>-};</div><div class='add'>+    .transport_init = NULL,</div><div class='add'>+    .request_init = auth_glusterfs_v3_request_init,</div><div class='add'>+    .authenticate = auth_glusterfs_v3_authenticate};</div><div class='ctx'> </div><div class='add'>+rpcsvc_auth_t rpcsvc_auth_glusterfs_v3 = {.authname = "AUTH_GLUSTERFS-v3",</div><div class='add'>+                                          .authnum = AUTH_GLUSTERFS_v3,</div><div class='add'>+                                          .authops = &amp;auth_glusterfs_ops_v3,</div><div class='add'>+                                          .authprivate = NULL};</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_glusterfs_v3_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_glusterfs_v3_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        return &amp;rpcsvc_auth_glusterfs_v3;</div><div class='add'>+    return &amp;rpcsvc_auth_glusterfs_v3;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/auth-null.c b/rpc/rpc-lib/src/auth-null.c<br/>index 774fdc8da3a..46046e8e440 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/auth-null.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/auth-null.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/auth-null.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/auth-null.c</a></div><div class='hunk'>@@ -8,40 +8,34 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "rpcsvc.h"</div><div class='ctx'> #include "list.h"</div><div class='ctx'> #include "dict.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-auth_null_request_init (rpcsvc_request_t *req, void *priv)</div><div class='add'>+auth_null_request_init(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int auth_null_authenticate (rpcsvc_request_t *req, void *priv)</div><div class='add'>+int</div><div class='add'>+auth_null_authenticate(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        /* Always succeed. */</div><div class='del'>-        return RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    /* Always succeed. */</div><div class='add'>+    return RPCSVC_AUTH_ACCEPT;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-rpcsvc_auth_ops_t auth_null_ops = {</div><div class='del'>-        .transport_init              = NULL,</div><div class='del'>-        .request_init           = auth_null_request_init,</div><div class='del'>-        .authenticate           = auth_null_authenticate</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-rpcsvc_auth_t rpcsvc_auth_null = {</div><div class='del'>-        .authname       = "AUTH_NULL",</div><div class='del'>-        .authnum        = AUTH_NULL,</div><div class='del'>-        .authops        = &amp;auth_null_ops,</div><div class='del'>-        .authprivate    = NULL</div><div class='del'>-};</div><div class='add'>+rpcsvc_auth_ops_t auth_null_ops = {.transport_init = NULL,</div><div class='add'>+                                   .request_init = auth_null_request_init,</div><div class='add'>+                                   .authenticate = auth_null_authenticate};</div><div class='ctx'> </div><div class='add'>+rpcsvc_auth_t rpcsvc_auth_null = {.authname = "AUTH_NULL",</div><div class='add'>+                                  .authnum = AUTH_NULL,</div><div class='add'>+                                  .authops = &amp;auth_null_ops,</div><div class='add'>+                                  .authprivate = NULL};</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_null_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_null_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        return &amp;rpcsvc_auth_null;</div><div class='add'>+    return &amp;rpcsvc_auth_null;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/auth-unix.c b/rpc/rpc-lib/src/auth-unix.c<br/>index 74ebfe0d1ff..c53870fcf94 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/auth-unix.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/auth-unix.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/auth-unix.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/auth-unix.c</a></div><div class='hunk'>@@ -8,65 +8,60 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> #include "rpcsvc.h"</div><div class='ctx'> #include "list.h"</div><div class='ctx'> #include "dict.h"</div><div class='ctx'> #include "xdr-rpc.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-auth_unix_request_init (rpcsvc_request_t *req, void *priv)</div><div class='add'>+auth_unix_request_init(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int auth_unix_authenticate (rpcsvc_request_t *req, void *priv)</div><div class='add'>+int</div><div class='add'>+auth_unix_authenticate(rpcsvc_request_t *req, void *priv)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-        struct authunix_parms   aup;</div><div class='del'>-        char                    machname[MAX_MACHINE_NAME];</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    struct authunix_parms aup;</div><div class='add'>+    char machname[MAX_MACHINE_NAME];</div><div class='ctx'> </div><div class='del'>-        if (!req)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!req)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='del'>-        ret = xdr_to_auth_unix_cred (req-&gt;cred.authdata, req-&gt;cred.datalen,</div><div class='del'>-                                     &amp;aup, machname, req-&gt;auxgids);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("", GF_LOG_WARNING, "failed to decode unix credentials");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='add'>+    ret = xdr_to_auth_unix_cred(req-&gt;cred.authdata, req-&gt;cred.datalen, &amp;aup,</div><div class='add'>+                                machname, req-&gt;auxgids);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("", GF_LOG_WARNING, "failed to decode unix credentials");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        req-&gt;uid = aup.aup_uid;</div><div class='del'>-        req-&gt;gid = aup.aup_gid;</div><div class='del'>-        req-&gt;auxgidcount = aup.aup_len;</div><div class='add'>+    req-&gt;uid = aup.aup_uid;</div><div class='add'>+    req-&gt;gid = aup.aup_gid;</div><div class='add'>+    req-&gt;auxgidcount = aup.aup_len;</div><div class='ctx'> </div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Auth Info: machine name: %s, uid: %d"</div><div class='del'>-                ", gid: %d", machname, req-&gt;uid, req-&gt;gid);</div><div class='del'>-        ret = RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+           "Auth Info: machine name: %s, uid: %d"</div><div class='add'>+           ", gid: %d",</div><div class='add'>+           machname, req-&gt;uid, req-&gt;gid);</div><div class='add'>+    ret = RPCSVC_AUTH_ACCEPT;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-rpcsvc_auth_ops_t auth_unix_ops = {</div><div class='del'>-        .transport_init              = NULL,</div><div class='del'>-        .request_init           = auth_unix_request_init,</div><div class='del'>-        .authenticate           = auth_unix_authenticate</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-rpcsvc_auth_t rpcsvc_auth_unix = {</div><div class='del'>-        .authname       = "AUTH_UNIX",</div><div class='del'>-        .authnum        = AUTH_UNIX,</div><div class='del'>-        .authops        = &amp;auth_unix_ops,</div><div class='del'>-        .authprivate    = NULL</div><div class='del'>-};</div><div class='add'>+rpcsvc_auth_ops_t auth_unix_ops = {.transport_init = NULL,</div><div class='add'>+                                   .request_init = auth_unix_request_init,</div><div class='add'>+                                   .authenticate = auth_unix_authenticate};</div><div class='ctx'> </div><div class='add'>+rpcsvc_auth_t rpcsvc_auth_unix = {.authname = "AUTH_UNIX",</div><div class='add'>+                                  .authnum = AUTH_UNIX,</div><div class='add'>+                                  .authops = &amp;auth_unix_ops,</div><div class='add'>+                                  .authprivate = NULL};</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_unix_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_unix_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        return &amp;rpcsvc_auth_unix;</div><div class='add'>+    return &amp;rpcsvc_auth_unix;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/autoscale-threads.c b/rpc/rpc-lib/src/autoscale-threads.c<br/>index 4840fd4e971..337f002df10 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/autoscale-threads.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/autoscale-threads.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/autoscale-threads.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/autoscale-threads.c</a></div><div class='hunk'>@@ -12,12 +12,12 @@</div><div class='ctx'> #include "rpcsvc.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpcsvc_autoscale_threads (glusterfs_ctx_t *ctx, rpcsvc_t *rpc, int incr)</div><div class='add'>+rpcsvc_autoscale_threads(glusterfs_ctx_t *ctx, rpcsvc_t *rpc, int incr)</div><div class='ctx'> {</div><div class='del'>-        struct event_pool       *pool           = ctx-&gt;event_pool;</div><div class='del'>-        int                      thread_count   = pool-&gt;eventthreadcount;</div><div class='add'>+    struct event_pool *pool = ctx-&gt;event_pool;</div><div class='add'>+    int thread_count = pool-&gt;eventthreadcount;</div><div class='ctx'> </div><div class='del'>-        pool-&gt;auto_thread_count += incr;</div><div class='del'>-        (void) event_reconfigure_threads (pool, thread_count+incr);</div><div class='del'>-        rpcsvc_ownthread_reconf (rpc, pool-&gt;eventthreadcount);</div><div class='add'>+    pool-&gt;auto_thread_count += incr;</div><div class='add'>+    (void)event_reconfigure_threads(pool, thread_count + incr);</div><div class='add'>+    rpcsvc_ownthread_reconf(rpc, pool-&gt;eventthreadcount);</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/mgmt-pmap.c b/rpc/rpc-lib/src/mgmt-pmap.c<br/>index fbcc78a7a7e..344ec56bbf7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/mgmt-pmap.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/mgmt-pmap.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/mgmt-pmap.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/mgmt-pmap.c</a></div><div class='hunk'>@@ -17,122 +17,126 @@</div><div class='ctx'> /* Defining a minimal RPC client program for portmap signout</div><div class='ctx'>  */</div><div class='ctx'> char *clnt_pmap_signout_procs[GF_PMAP_MAXVALUE] = {</div><div class='del'>-        [GF_PMAP_SIGNOUT]     = "SIGNOUT",</div><div class='add'>+    [GF_PMAP_SIGNOUT] = "SIGNOUT",</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpc_clnt_prog_t clnt_pmap_signout_prog = {</div><div class='del'>-        .progname  = "Gluster Portmap",</div><div class='del'>-        .prognum   = GLUSTER_PMAP_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_PMAP_VERSION,</div><div class='del'>-        .procnames = clnt_pmap_signout_procs,</div><div class='add'>+    .progname = "Gluster Portmap",</div><div class='add'>+    .prognum = GLUSTER_PMAP_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_PMAP_VERSION,</div><div class='add'>+    .procnames = clnt_pmap_signout_procs,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-mgmt_pmap_signout_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                       void *myframe)</div><div class='add'>+mgmt_pmap_signout_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                      void *myframe)</div><div class='ctx'> {</div><div class='del'>-        pmap_signout_rsp  rsp   = {0,};</div><div class='del'>-        int              ret   = 0;</div><div class='del'>-</div><div class='del'>-        if (-1 == req-&gt;rpc_status) {</div><div class='del'>-                rsp.op_ret   = -1;</div><div class='del'>-                rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (*iov, &amp;rsp, (xdrproc_t)xdr_pmap_signout_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR, "XDR decoding failed");</div><div class='del'>-                rsp.op_ret   = -1;</div><div class='del'>-                rsp.op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (-1 == rsp.op_ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to register the port with glusterd");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    pmap_signout_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (-1 == req-&gt;rpc_status) {</div><div class='add'>+        rsp.op_ret = -1;</div><div class='add'>+        rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(*iov, &amp;rsp, (xdrproc_t)xdr_pmap_signout_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "XDR decoding failed");</div><div class='add'>+        rsp.op_ret = -1;</div><div class='add'>+        rsp.op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-1 == rsp.op_ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to register the port with glusterd");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_mgmt_pmap_signout (glusterfs_ctx_t *ctx, char *brickname)</div><div class='add'>+rpc_clnt_mgmt_pmap_signout(glusterfs_ctx_t *ctx, char *brickname)</div><div class='ctx'> {</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        pmap_signout_req  req = {0, };</div><div class='del'>-        call_frame_t     *frame = NULL;</div><div class='del'>-        cmd_args_t       *cmd_args = NULL;</div><div class='del'>-        char              brick_name[PATH_MAX]  = {0,};</div><div class='del'>-        struct iovec      iov = {0, };</div><div class='del'>-        struct iobuf     *iobuf = NULL;</div><div class='del'>-        struct iobref    *iobref = NULL;</div><div class='del'>-        ssize_t           xdr_size = 0;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (THIS, ctx-&gt;pool);</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-</div><div class='del'>-        if (!cmd_args-&gt;brick_port &amp;&amp; (!cmd_args-&gt;brick_name || !brickname)) {</div><div class='del'>-                gf_log ("fsd-mgmt", GF_LOG_DEBUG,</div><div class='del'>-                        "portmapper signout arguments not given");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='del'>-            !strcmp(cmd_args-&gt;volfile_server_transport, "rdma")) {</div><div class='del'>-                snprintf (brick_name, sizeof(brick_name), "%s.rdma",</div><div class='del'>-                          cmd_args-&gt;brick_name);</div><div class='del'>-                req.brick = brick_name;</div><div class='del'>-        } else {</div><div class='del'>-                if (brickname)</div><div class='del'>-                        req.brick = brickname;</div><div class='del'>-                else</div><div class='del'>-                        req.brick = cmd_args-&gt;brick_name;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req.port  = cmd_args-&gt;brick_port;</div><div class='del'>-        req.rdma_port = cmd_args-&gt;brick_port2;</div><div class='del'>-</div><div class='del'>-        /* mgmt_submit_request is not available in libglusterfs.</div><div class='del'>-         * Need to serialize and submit manually.</div><div class='del'>-         */</div><div class='del'>-        iobref = iobref_new ();</div><div class='del'>-        if (!iobref) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xdr_size = xdr_sizeof ((xdrproc_t)xdr_pmap_signout_req, &amp;req);</div><div class='del'>-        iobuf = iobuf_get2 (ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-        if (!iobuf) {</div><div class='del'>-                goto out;</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        iobref_add (iobref, iobuf);</div><div class='del'>-</div><div class='del'>-        iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-        iov.iov_len  = iobuf_pagesize (iobuf);</div><div class='del'>-</div><div class='del'>-        /* Create the xdr payload */</div><div class='del'>-        ret = xdr_serialize_generic (iov, &amp;req,</div><div class='del'>-                                     (xdrproc_t)xdr_pmap_signout_req);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to create XDR payload");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        iov.iov_len = ret;</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_submit (ctx-&gt;mgmt, &amp;clnt_pmap_signout_prog,</div><div class='del'>-                               GF_PMAP_SIGNOUT, mgmt_pmap_signout_cbk,</div><div class='del'>-                               &amp;iov, 1,</div><div class='del'>-                               NULL, 0, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    pmap_signout_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    char brick_name[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(THIS, ctx-&gt;pool);</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+</div><div class='add'>+    if (!cmd_args-&gt;brick_port &amp;&amp; (!cmd_args-&gt;brick_name || !brickname)) {</div><div class='add'>+        gf_log("fsd-mgmt", GF_LOG_DEBUG,</div><div class='add'>+               "portmapper signout arguments not given");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd_args-&gt;volfile_server_transport &amp;&amp;</div><div class='add'>+        !strcmp(cmd_args-&gt;volfile_server_transport, "rdma")) {</div><div class='add'>+        snprintf(brick_name, sizeof(brick_name), "%s.rdma",</div><div class='add'>+                 cmd_args-&gt;brick_name);</div><div class='add'>+        req.brick = brick_name;</div><div class='add'>+    } else {</div><div class='add'>+        if (brickname)</div><div class='add'>+            req.brick = brickname;</div><div class='add'>+        else</div><div class='add'>+            req.brick = cmd_args-&gt;brick_name;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req.port = cmd_args-&gt;brick_port;</div><div class='add'>+    req.rdma_port = cmd_args-&gt;brick_port2;</div><div class='add'>+</div><div class='add'>+    /* mgmt_submit_request is not available in libglusterfs.</div><div class='add'>+     * Need to serialize and submit manually.</div><div class='add'>+     */</div><div class='add'>+    iobref = iobref_new();</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdr_size = xdr_sizeof((xdrproc_t)xdr_pmap_signout_req, &amp;req);</div><div class='add'>+    iobuf = iobuf_get2(ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+    if (!iobuf) {</div><div class='add'>+        goto out;</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    iobref_add(iobref, iobuf);</div><div class='add'>+</div><div class='add'>+    iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+    iov.iov_len = iobuf_pagesize(iobuf);</div><div class='add'>+</div><div class='add'>+    /* Create the xdr payload */</div><div class='add'>+    ret = xdr_serialize_generic(iov, &amp;req, (xdrproc_t)xdr_pmap_signout_req);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to create XDR payload");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    iov.iov_len = ret;</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_submit(ctx-&gt;mgmt, &amp;clnt_pmap_signout_prog, GF_PMAP_SIGNOUT,</div><div class='add'>+                          mgmt_pmap_signout_cbk, &amp;iov, 1, NULL, 0, iobref,</div><div class='add'>+                          frame, NULL, 0, NULL, 0, NULL);</div><div class='ctx'> out:</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        return ret;</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/rpc-clnt-ping.c b/rpc/rpc-lib/src/rpc-clnt-ping.c<br/>index 25629891379..a98a83dd8c8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-clnt-ping.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/rpc-clnt-ping.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-clnt-ping.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-clnt-ping.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "rpc-clnt.h"</div><div class='ctx'> #include "rpc-clnt-ping.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='hunk'>@@ -20,15 +19,14 @@</div><div class='ctx'> #include "rpc-common-xdr.h"</div><div class='ctx'> #include "timespec.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *clnt_ping_procs[GF_DUMP_MAXVALUE] = {</div><div class='del'>-        [GF_DUMP_PING] = "NULL",</div><div class='add'>+    [GF_DUMP_PING] = "NULL",</div><div class='ctx'> };</div><div class='ctx'> struct rpc_clnt_program clnt_ping_prog = {</div><div class='del'>-        .progname  = "GF-DUMP",</div><div class='del'>-        .prognum   = GLUSTER_DUMP_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_DUMP_VERSION,</div><div class='del'>-        .procnames = clnt_ping_procs,</div><div class='add'>+    .progname = "GF-DUMP",</div><div class='add'>+    .prognum = GLUSTER_DUMP_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_DUMP_VERSION,</div><div class='add'>+    .procnames = clnt_ping_procs,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ping_local {</div><div class='hunk'>@@ -38,341 +36,326 @@ struct ping_local {</div><div class='ctx'> </div><div class='ctx'> /* Must be called under conn-&gt;lock */</div><div class='ctx'> static int</div><div class='del'>-__rpc_clnt_rearm_ping_timer (struct rpc_clnt *rpc, gf_timer_cbk_t cbk)</div><div class='add'>+__rpc_clnt_rearm_ping_timer(struct rpc_clnt *rpc, gf_timer_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn    = &amp;rpc-&gt;conn;</div><div class='del'>-        rpc_transport_t       *trans   = conn-&gt;trans;</div><div class='del'>-        struct timespec        timeout = {0, };</div><div class='del'>-        gf_timer_t            *timer   = NULL;</div><div class='del'>-</div><div class='del'>-        if (conn-&gt;ping_timer) {</div><div class='del'>-                gf_log_callingfn ("", GF_LOG_CRITICAL,</div><div class='del'>-                                  "%s: ping timer event already scheduled",</div><div class='del'>-                                  conn-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        timeout.tv_sec = conn-&gt;ping_timeout;</div><div class='del'>-        timeout.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-        rpc_clnt_ref (rpc);</div><div class='del'>-        timer = gf_timer_call_after (rpc-&gt;ctx, timeout,</div><div class='del'>-                                     cbk,</div><div class='del'>-                                     (void *) rpc);</div><div class='del'>-        if (timer == NULL) {</div><div class='del'>-                gf_log (trans-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "unable to setup ping timer");</div><div class='del'>-</div><div class='del'>-                /* This unref can't be the last. We just took a ref few lines</div><div class='del'>-                 * above. So this can be performed under conn-&gt;lock. */</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='del'>-                conn-&gt;ping_started = 0;</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conn-&gt;ping_timer = timer;</div><div class='del'>-        conn-&gt;ping_started = 1;</div><div class='del'>-        return 0;</div><div class='add'>+    rpc_clnt_connection_t *conn = &amp;rpc-&gt;conn;</div><div class='add'>+    rpc_transport_t *trans = conn-&gt;trans;</div><div class='add'>+    struct timespec timeout = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_timer_t *timer = NULL;</div><div class='add'>+</div><div class='add'>+    if (conn-&gt;ping_timer) {</div><div class='add'>+        gf_log_callingfn("", GF_LOG_CRITICAL,</div><div class='add'>+                         "%s: ping timer event already scheduled",</div><div class='add'>+                         conn-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    timeout.tv_sec = conn-&gt;ping_timeout;</div><div class='add'>+    timeout.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+    rpc_clnt_ref(rpc);</div><div class='add'>+    timer = gf_timer_call_after(rpc-&gt;ctx, timeout, cbk, (void *)rpc);</div><div class='add'>+    if (timer == NULL) {</div><div class='add'>+        gf_log(trans-&gt;name, GF_LOG_WARNING, "unable to setup ping timer");</div><div class='add'>+</div><div class='add'>+        /* This unref can't be the last. We just took a ref few lines</div><div class='add'>+         * above. So this can be performed under conn-&gt;lock. */</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='add'>+        conn-&gt;ping_started = 0;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conn-&gt;ping_timer = timer;</div><div class='add'>+    conn-&gt;ping_started = 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Must be called under conn-&gt;lock */</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_remove_ping_timer_locked (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_remove_ping_timer_locked(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn  = &amp;rpc-&gt;conn;</div><div class='del'>-        gf_timer_t            *timer = NULL;</div><div class='del'>-</div><div class='del'>-        if (conn-&gt;ping_timer) {</div><div class='del'>-                timer = conn-&gt;ping_timer;</div><div class='del'>-                conn-&gt;ping_timer = NULL;</div><div class='del'>-                gf_timer_call_cancel (rpc-&gt;ctx, timer);</div><div class='del'>-                conn-&gt;ping_started = 0;</div><div class='del'>-                return 1;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* This is to account for rpc_clnt_disable that might have set</div><div class='del'>-         *  conn-&gt;trans to NULL. */</div><div class='del'>-        if (conn-&gt;trans)</div><div class='del'>-                gf_log_callingfn ("", GF_LOG_DEBUG, "%s: ping timer event "</div><div class='del'>-                                  "already removed",</div><div class='del'>-                                   conn-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    rpc_clnt_connection_t *conn = &amp;rpc-&gt;conn;</div><div class='add'>+    gf_timer_t *timer = NULL;</div><div class='add'>+</div><div class='add'>+    if (conn-&gt;ping_timer) {</div><div class='add'>+        timer = conn-&gt;ping_timer;</div><div class='add'>+        conn-&gt;ping_timer = NULL;</div><div class='add'>+        gf_timer_call_cancel(rpc-&gt;ctx, timer);</div><div class='add'>+        conn-&gt;ping_started = 0;</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is to account for rpc_clnt_disable that might have set</div><div class='add'>+     *  conn-&gt;trans to NULL. */</div><div class='add'>+    if (conn-&gt;trans)</div><div class='add'>+        gf_log_callingfn("", GF_LOG_DEBUG,</div><div class='add'>+                         "%s: ping timer event "</div><div class='add'>+                         "already removed",</div><div class='add'>+                         conn-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rpc_clnt_start_ping (void *rpc_ptr);</div><div class='add'>+rpc_clnt_start_ping(void *rpc_ptr);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpc_clnt_ping_timer_expired (void *rpc_ptr)</div><div class='add'>+rpc_clnt_ping_timer_expired(void *rpc_ptr)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt         *rpc                = NULL;</div><div class='del'>-        rpc_transport_t         *trans              = NULL;</div><div class='del'>-        rpc_clnt_connection_t   *conn               = NULL;</div><div class='del'>-        int                      disconnect         = 0;</div><div class='del'>-        int                      transport_activity = 0;</div><div class='del'>-        struct timespec          current            = {0, };</div><div class='del'>-        int                      unref              = 0;</div><div class='del'>-</div><div class='del'>-        rpc = (struct rpc_clnt*) rpc_ptr;</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-        trans = conn-&gt;trans;</div><div class='del'>-</div><div class='del'>-        if (!trans) {</div><div class='del'>-                gf_log ("ping-timer", GF_LOG_WARNING,</div><div class='del'>-                        "transport not initialized");</div><div class='del'>-                goto out;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    int disconnect = 0;</div><div class='add'>+    int transport_activity = 0;</div><div class='add'>+    struct timespec current = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int unref = 0;</div><div class='add'>+</div><div class='add'>+    rpc = (struct rpc_clnt *)rpc_ptr;</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+    trans = conn-&gt;trans;</div><div class='add'>+</div><div class='add'>+    if (!trans) {</div><div class='add'>+        gf_log("ping-timer", GF_LOG_WARNING, "transport not initialized");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        unref = rpc_clnt_remove_ping_timer_locked(rpc);</div><div class='add'>+</div><div class='add'>+        clock_gettime(CLOCK_REALTIME, &amp;current);</div><div class='add'>+        if (((current.tv_sec - conn-&gt;last_received.tv_sec) &lt;</div><div class='add'>+             conn-&gt;ping_timeout) ||</div><div class='add'>+            ((current.tv_sec - conn-&gt;last_sent.tv_sec) &lt; conn-&gt;ping_timeout)) {</div><div class='add'>+            transport_activity = 1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                unref = rpc_clnt_remove_ping_timer_locked (rpc);</div><div class='del'>-</div><div class='del'>-                clock_gettime (CLOCK_REALTIME, &amp;current);</div><div class='del'>-                if (((current.tv_sec - conn-&gt;last_received.tv_sec) &lt;</div><div class='del'>-                     conn-&gt;ping_timeout)</div><div class='del'>-                    || ((current.tv_sec - conn-&gt;last_sent.tv_sec) &lt;</div><div class='del'>-                        conn-&gt;ping_timeout)) {</div><div class='del'>-                        transport_activity = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (transport_activity) {</div><div class='del'>-                        gf_log (trans-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "ping timer expired but transport activity "</div><div class='del'>-                                "detected - not bailing transport");</div><div class='del'>-</div><div class='del'>-                        if (__rpc_clnt_rearm_ping_timer (rpc,</div><div class='del'>-                                         rpc_clnt_ping_timer_expired) == -1) {</div><div class='del'>-                                gf_log (trans-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "unable to setup ping timer");</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        conn-&gt;ping_started = 0;</div><div class='del'>-                        disconnect = 1;</div><div class='del'>-                }</div><div class='add'>+        if (transport_activity) {</div><div class='add'>+            gf_log(trans-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "ping timer expired but transport activity "</div><div class='add'>+                   "detected - not bailing transport");</div><div class='add'>+</div><div class='add'>+            if (__rpc_clnt_rearm_ping_timer(rpc, rpc_clnt_ping_timer_expired) ==</div><div class='add'>+                -1) {</div><div class='add'>+                gf_log(trans-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "unable to setup ping timer");</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+        } else {</div><div class='add'>+            conn-&gt;ping_started = 0;</div><div class='add'>+            disconnect = 1;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='del'>-        if (disconnect) {</div><div class='del'>-                gf_log (trans-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                        "server %s has not responded in the last %d "</div><div class='del'>-                        "seconds, disconnecting.",</div><div class='del'>-                        trans-&gt;peerinfo.identifier,</div><div class='del'>-                        conn-&gt;ping_timeout);</div><div class='add'>+    if (disconnect) {</div><div class='add'>+        gf_log(trans-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+               "server %s has not responded in the last %d "</div><div class='add'>+               "seconds, disconnecting.",</div><div class='add'>+               trans-&gt;peerinfo.identifier, conn-&gt;ping_timeout);</div><div class='ctx'> </div><div class='del'>-                rpc_transport_disconnect (conn-&gt;trans, _gf_false);</div><div class='del'>-        }</div><div class='add'>+        rpc_transport_disconnect(conn-&gt;trans, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_ping_cbk (struct rpc_req *req, struct iovec *iov, int count,</div><div class='del'>-                   void *myframe)</div><div class='add'>+rpc_clnt_ping_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                  void *myframe)</div><div class='ctx'> {</div><div class='del'>-        struct ping_local     *local   = NULL;</div><div class='del'>-        xlator_t              *this    = NULL;</div><div class='del'>-        rpc_clnt_connection_t *conn    = NULL;</div><div class='del'>-        call_frame_t          *frame   = NULL;</div><div class='del'>-        int                   unref    = 0;</div><div class='del'>-        gf_boolean_t          call_notify = _gf_false;</div><div class='del'>-</div><div class='del'>-        struct timespec       now;</div><div class='del'>-        struct timespec       delta;</div><div class='del'>-        int64_t               latency_msec = 0;</div><div class='del'>-        int                   ret = 0;</div><div class='del'>-</div><div class='del'>-        if (!myframe) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "frame with the request is NULL");</div><div class='del'>-                goto out;</div><div class='add'>+    struct ping_local *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int unref = 0;</div><div class='add'>+    gf_boolean_t call_notify = _gf_false;</div><div class='add'>+</div><div class='add'>+    struct timespec now;</div><div class='add'>+    struct timespec delta;</div><div class='add'>+    int64_t latency_msec = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!myframe) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "frame with the request is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = myframe;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conn = &amp;local-&gt;rpc-&gt;conn;</div><div class='add'>+</div><div class='add'>+    timespec_now(&amp;now);</div><div class='add'>+    timespec_sub(&amp;local-&gt;submit_time, &amp;now, &amp;delta);</div><div class='add'>+    latency_msec = delta.tv_sec * 1000 + delta.tv_nsec / 1000000;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_DEBUG, "Ping latency is %" PRIu64 "ms",</div><div class='add'>+               latency_msec);</div><div class='add'>+</div><div class='add'>+        call_notify = _gf_true;</div><div class='add'>+        if (req-&gt;rpc_status == -1) {</div><div class='add'>+            unref = rpc_clnt_remove_ping_timer_locked(local-&gt;rpc);</div><div class='add'>+            if (unref) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "socket or ib related error");</div><div class='add'>+</div><div class='add'>+            } else {</div><div class='add'>+                /* timer expired and transport bailed out */</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING, "socket disconnected");</div><div class='add'>+            }</div><div class='add'>+            conn-&gt;ping_started = 0;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        frame = myframe;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conn = &amp;local-&gt;rpc-&gt;conn;</div><div class='del'>-</div><div class='del'>-        timespec_now (&amp;now);</div><div class='del'>-        timespec_sub (&amp;local-&gt;submit_time, &amp;now, &amp;delta);</div><div class='del'>-        latency_msec = delta.tv_sec * 1000 + delta.tv_nsec / 1000000;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Ping latency is %" PRIu64 "ms",</div><div class='del'>-                        latency_msec);</div><div class='del'>-</div><div class='del'>-                call_notify = _gf_true;</div><div class='del'>-                if (req-&gt;rpc_status == -1) {</div><div class='del'>-                        unref = rpc_clnt_remove_ping_timer_locked (local-&gt;rpc);</div><div class='del'>-                        if (unref) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "socket or ib related error");</div><div class='del'>-</div><div class='del'>-                        } else {</div><div class='del'>-                                /* timer expired and transport bailed out */</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "socket disconnected");</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                        conn-&gt;ping_started = 0;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                unref = rpc_clnt_remove_ping_timer_locked (local-&gt;rpc);</div><div class='del'>-                if (__rpc_clnt_rearm_ping_timer (local-&gt;rpc,</div><div class='del'>-                                                 rpc_clnt_start_ping) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to set the ping timer");</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+        unref = rpc_clnt_remove_ping_timer_locked(local-&gt;rpc);</div><div class='add'>+        if (__rpc_clnt_rearm_ping_timer(local-&gt;rpc, rpc_clnt_start_ping) ==</div><div class='add'>+            -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set the ping timer");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (call_notify) {</div><div class='del'>-                ret = local-&gt;rpc-&gt;notifyfn (local-&gt;rpc, this, RPC_CLNT_PING,</div><div class='del'>-                                            (void *)(uintptr_t)latency_msec);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "RPC_CLNT_PING notify failed");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        if (unref)</div><div class='del'>-                rpc_clnt_unref (local-&gt;rpc);</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (frame) {</div><div class='del'>-                GF_FREE (frame-&gt;local);</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='add'>+    if (call_notify) {</div><div class='add'>+        ret = local-&gt;rpc-&gt;notifyfn(local-&gt;rpc, this, RPC_CLNT_PING,</div><div class='add'>+                                   (void *)(uintptr_t)latency_msec);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "RPC_CLNT_PING notify failed");</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    if (unref)</div><div class='add'>+        rpc_clnt_unref(local-&gt;rpc);</div><div class='add'>+</div><div class='add'>+    if (frame) {</div><div class='add'>+        GF_FREE(frame-&gt;local);</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_ping (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_ping(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *frame = NULL;</div><div class='del'>-        int32_t       ret   = -1;</div><div class='del'>-        rpc_clnt_connection_t *conn = NULL;</div><div class='del'>-        struct ping_local *local = NULL;</div><div class='del'>-</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-        local = GF_MALLOC (sizeof(struct ping_local),</div><div class='del'>-                           gf_common_ping_local_t);</div><div class='del'>-        if (!local)</div><div class='del'>-                return ret;</div><div class='del'>-        frame = create_frame (THIS, THIS-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                GF_FREE (local);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;rpc = rpc;</div><div class='del'>-        timespec_now (&amp;local-&gt;submit_time);</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_submit (rpc, &amp;clnt_ping_prog,</div><div class='del'>-                               GF_DUMP_PING, rpc_clnt_ping_cbk, NULL, 0,</div><div class='del'>-                               NULL, 0, NULL, frame, NULL, 0, NULL, 0, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* FIXME: should we free the frame here? Methinks so! */</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to start ping timer");</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                /* ping successfully queued in list of saved frames</div><div class='del'>-                 * for the connection*/</div><div class='del'>-                pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-                conn-&gt;pingcnt++;</div><div class='del'>-                pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct ping_local *local = NULL;</div><div class='add'>+</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+    local = GF_MALLOC(sizeof(struct ping_local), gf_common_ping_local_t);</div><div class='add'>+    if (!local)</div><div class='ctx'>         return ret;</div><div class='del'>-</div><div class='add'>+    frame = create_frame(THIS, THIS-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        GF_FREE(local);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rpc = rpc;</div><div class='add'>+    timespec_now(&amp;local-&gt;submit_time);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_submit(rpc, &amp;clnt_ping_prog, GF_DUMP_PING, rpc_clnt_ping_cbk,</div><div class='add'>+                          NULL, 0, NULL, 0, NULL, frame, NULL, 0, NULL, 0,</div><div class='add'>+                          NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* FIXME: should we free the frame here? Methinks so! */</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "failed to start ping timer");</div><div class='add'>+    } else {</div><div class='add'>+        /* ping successfully queued in list of saved frames</div><div class='add'>+         * for the connection*/</div><div class='add'>+        pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+        conn-&gt;pingcnt++;</div><div class='add'>+        pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rpc_clnt_start_ping (void *rpc_ptr)</div><div class='add'>+rpc_clnt_start_ping(void *rpc_ptr)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt         *rpc         = NULL;</div><div class='del'>-        rpc_clnt_connection_t   *conn        = NULL;</div><div class='del'>-        int                      frame_count = 0;</div><div class='del'>-        int                      unref       = 0;</div><div class='del'>-</div><div class='del'>-        rpc = (struct rpc_clnt*) rpc_ptr;</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-</div><div class='del'>-        if (conn-&gt;ping_timeout == 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_DEBUG, "ping timeout is 0,"</div><div class='del'>-                        " returning");</div><div class='del'>-                return;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    int frame_count = 0;</div><div class='add'>+    int unref = 0;</div><div class='add'>+</div><div class='add'>+    rpc = (struct rpc_clnt *)rpc_ptr;</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+</div><div class='add'>+    if (conn-&gt;ping_timeout == 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "ping timeout is 0,"</div><div class='add'>+               " returning");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        unref = rpc_clnt_remove_ping_timer_locked(rpc);</div><div class='add'>+</div><div class='add'>+        if (conn-&gt;saved_frames) {</div><div class='add'>+            GF_ASSERT(conn-&gt;saved_frames-&gt;count &gt;= 0);</div><div class='add'>+            /* treat the case where conn-&gt;saved_frames is NULL</div><div class='add'>+               as no pending frames */</div><div class='add'>+            frame_count = conn-&gt;saved_frames-&gt;count;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                unref = rpc_clnt_remove_ping_timer_locked (rpc);</div><div class='del'>-</div><div class='del'>-                if (conn-&gt;saved_frames) {</div><div class='del'>-                        GF_ASSERT (conn-&gt;saved_frames-&gt;count &gt;= 0);</div><div class='del'>-                        /* treat the case where conn-&gt;saved_frames is NULL</div><div class='del'>-                           as no pending frames */</div><div class='del'>-                        frame_count = conn-&gt;saved_frames-&gt;count;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((frame_count == 0) || !conn-&gt;connected) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "returning as transport is already disconnected"</div><div class='del'>-                                " OR there are no frames (%d || %d)",</div><div class='del'>-                                !conn-&gt;connected, frame_count);</div><div class='del'>-</div><div class='del'>-                        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-                        if (unref)</div><div class='del'>-                                rpc_clnt_unref (rpc);</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (__rpc_clnt_rearm_ping_timer (rpc,</div><div class='del'>-                                         rpc_clnt_ping_timer_expired) == -1) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "unable to setup ping timer");</div><div class='del'>-                        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-                        if (unref)</div><div class='del'>-                                rpc_clnt_unref (rpc);</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                }</div><div class='add'>+        if ((frame_count == 0) || !conn-&gt;connected) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "returning as transport is already disconnected"</div><div class='add'>+                   " OR there are no frames (%d || %d)",</div><div class='add'>+                   !conn-&gt;connected, frame_count);</div><div class='ctx'> </div><div class='add'>+            pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+            if (unref)</div><div class='add'>+                rpc_clnt_unref(rpc);</div><div class='add'>+            return;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-        if (unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_ping(rpc);</div><div class='add'>+        if (__rpc_clnt_rearm_ping_timer(rpc, rpc_clnt_ping_timer_expired) ==</div><div class='add'>+            -1) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_WARNING, "unable to setup ping timer");</div><div class='add'>+            pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+            if (unref)</div><div class='add'>+                rpc_clnt_unref(rpc);</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+    if (unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='add'>+</div><div class='add'>+    rpc_clnt_ping(rpc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpc_clnt_check_and_start_ping (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_check_and_start_ping(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        char start_ping = 0;</div><div class='add'>+    char start_ping = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;rpc-&gt;conn.lock);</div><div class='del'>-        {</div><div class='del'>-                if (!rpc-&gt;conn.ping_started)</div><div class='del'>-                        start_ping = 1;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;rpc-&gt;conn.lock);</div><div class='add'>+    pthread_mutex_lock(&amp;rpc-&gt;conn.lock);</div><div class='add'>+    {</div><div class='add'>+        if (!rpc-&gt;conn.ping_started)</div><div class='add'>+            start_ping = 1;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;rpc-&gt;conn.lock);</div><div class='ctx'> </div><div class='del'>-        if (start_ping)</div><div class='del'>-                rpc_clnt_start_ping ((void *)rpc);</div><div class='add'>+    if (start_ping)</div><div class='add'>+        rpc_clnt_start_ping((void *)rpc);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c<br/>index 9ee9161c904..c5236251549 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-clnt.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/rpc-clnt.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-clnt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-clnt.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #define RPC_CLNT_DEFAULT_REQUEST_COUNT 512</div><div class='ctx'> </div><div class='ctx'> #include "rpc-clnt.h"</div><div class='hunk'>@@ -22,479 +21,465 @@</div><div class='ctx'> #include "rpc-common-xdr.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpc_clnt_reply_deinit (struct rpc_req *req, struct mem_pool *pool);</div><div class='add'>+rpc_clnt_reply_deinit(struct rpc_req *req, struct mem_pool *pool);</div><div class='ctx'> </div><div class='ctx'> struct saved_frame *</div><div class='del'>-__saved_frames_get_timedout (struct saved_frames *frames, uint32_t timeout,</div><div class='del'>-                             struct timeval *current)</div><div class='add'>+__saved_frames_get_timedout(struct saved_frames *frames, uint32_t timeout,</div><div class='add'>+                            struct timeval *current)</div><div class='ctx'> {</div><div class='del'>-	struct saved_frame *bailout_frame = NULL, *tmp = NULL;</div><div class='del'>-</div><div class='del'>-	if (!list_empty(&amp;frames-&gt;sf.list)) {</div><div class='del'>-		tmp = list_entry (frames-&gt;sf.list.next, typeof (*tmp), list);</div><div class='del'>-		if ((tmp-&gt;saved_at.tv_sec + timeout) &lt;= current-&gt;tv_sec) {</div><div class='del'>-			bailout_frame = tmp;</div><div class='del'>-			list_del_init (&amp;bailout_frame-&gt;list);</div><div class='del'>-			frames-&gt;count--;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return bailout_frame;</div><div class='add'>+    struct saved_frame *bailout_frame = NULL, *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if (!list_empty(&amp;frames-&gt;sf.list)) {</div><div class='add'>+        tmp = list_entry(frames-&gt;sf.list.next, typeof(*tmp), list);</div><div class='add'>+        if ((tmp-&gt;saved_at.tv_sec + timeout) &lt;= current-&gt;tv_sec) {</div><div class='add'>+            bailout_frame = tmp;</div><div class='add'>+            list_del_init(&amp;bailout_frame-&gt;list);</div><div class='add'>+            frames-&gt;count--;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return bailout_frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_is_lock_fop (struct saved_frame *sframe)</div><div class='add'>+_is_lock_fop(struct saved_frame *sframe)</div><div class='ctx'> {</div><div class='del'>-        int     fop     = 0;</div><div class='add'>+    int fop = 0;</div><div class='ctx'> </div><div class='del'>-        if (SFRAME_GET_PROGNUM (sframe) == GLUSTER_FOP_PROGRAM &amp;&amp;</div><div class='del'>-            SFRAME_GET_PROGVER (sframe) == GLUSTER_FOP_VERSION)</div><div class='del'>-                fop = SFRAME_GET_PROCNUM (sframe);</div><div class='add'>+    if (SFRAME_GET_PROGNUM(sframe) == GLUSTER_FOP_PROGRAM &amp;&amp;</div><div class='add'>+        SFRAME_GET_PROGVER(sframe) == GLUSTER_FOP_VERSION)</div><div class='add'>+        fop = SFRAME_GET_PROCNUM(sframe);</div><div class='ctx'> </div><div class='del'>-        return ((fop == GFS3_OP_LK) ||</div><div class='del'>-                (fop == GFS3_OP_INODELK) ||</div><div class='del'>-                (fop == GFS3_OP_FINODELK) ||</div><div class='del'>-                (fop == GFS3_OP_ENTRYLK) ||</div><div class='del'>-                (fop == GFS3_OP_FENTRYLK));</div><div class='add'>+    return ((fop == GFS3_OP_LK) || (fop == GFS3_OP_INODELK) ||</div><div class='add'>+            (fop == GFS3_OP_FINODELK) || (fop == GFS3_OP_ENTRYLK) ||</div><div class='add'>+            (fop == GFS3_OP_FENTRYLK));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct saved_frame *</div><div class='del'>-__saved_frames_put (struct saved_frames *frames, void *frame,</div><div class='del'>-                    struct rpc_req *rpcreq)</div><div class='add'>+__saved_frames_put(struct saved_frames *frames, void *frame,</div><div class='add'>+                   struct rpc_req *rpcreq)</div><div class='ctx'> {</div><div class='del'>-	struct saved_frame *saved_frame = NULL;</div><div class='add'>+    struct saved_frame *saved_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        saved_frame = mem_get (rpcreq-&gt;conn-&gt;rpc_clnt-&gt;saved_frames_pool);</div><div class='del'>-	if (!saved_frame) {</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='del'>-        /* THIS should be saved and set back */</div><div class='add'>+    saved_frame = mem_get(rpcreq-&gt;conn-&gt;rpc_clnt-&gt;saved_frames_pool);</div><div class='add'>+    if (!saved_frame) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* THIS should be saved and set back */</div><div class='ctx'> </div><div class='del'>-        memset (saved_frame, 0, sizeof (*saved_frame));</div><div class='del'>-	INIT_LIST_HEAD (&amp;saved_frame-&gt;list);</div><div class='add'>+    memset(saved_frame, 0, sizeof(*saved_frame));</div><div class='add'>+    INIT_LIST_HEAD(&amp;saved_frame-&gt;list);</div><div class='ctx'> </div><div class='del'>-	saved_frame-&gt;capital_this = THIS;</div><div class='del'>-	saved_frame-&gt;frame        = frame;</div><div class='del'>-        saved_frame-&gt;rpcreq       = rpcreq;</div><div class='del'>-	gettimeofday (&amp;saved_frame-&gt;saved_at, NULL);</div><div class='add'>+    saved_frame-&gt;capital_this = THIS;</div><div class='add'>+    saved_frame-&gt;frame = frame;</div><div class='add'>+    saved_frame-&gt;rpcreq = rpcreq;</div><div class='add'>+    gettimeofday(&amp;saved_frame-&gt;saved_at, NULL);</div><div class='ctx'> </div><div class='del'>-        if (_is_lock_fop (saved_frame))</div><div class='del'>-                list_add_tail (&amp;saved_frame-&gt;list, &amp;frames-&gt;lk_sf.list);</div><div class='del'>-        else</div><div class='del'>-                list_add_tail (&amp;saved_frame-&gt;list, &amp;frames-&gt;sf.list);</div><div class='add'>+    if (_is_lock_fop(saved_frame))</div><div class='add'>+        list_add_tail(&amp;saved_frame-&gt;list, &amp;frames-&gt;lk_sf.list);</div><div class='add'>+    else</div><div class='add'>+        list_add_tail(&amp;saved_frame-&gt;list, &amp;frames-&gt;sf.list);</div><div class='ctx'> </div><div class='del'>-	frames-&gt;count++;</div><div class='add'>+    frames-&gt;count++;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return saved_frame;</div><div class='add'>+    return saved_frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-call_bail (void *data)</div><div class='add'>+call_bail(void *data)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_t       *trans = NULL;</div><div class='del'>-        struct rpc_clnt       *clnt = NULL;</div><div class='del'>-        rpc_clnt_connection_t *conn = NULL;</div><div class='del'>-        struct timeval         current;</div><div class='del'>-        struct list_head       list;</div><div class='del'>-        struct saved_frame    *saved_frame = NULL;</div><div class='del'>-        struct saved_frame    *trav = NULL;</div><div class='del'>-        struct saved_frame    *tmp = NULL;</div><div class='del'>-        char                   frame_sent[256] = {0,};</div><div class='del'>-        struct timespec        timeout = {0,};</div><div class='del'>-        char                   peerid[UNIX_PATH_MAX] = {0};</div><div class='del'>-        gf_boolean_t           need_unref = _gf_false;</div><div class='del'>-        int                    len;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("client", data, out);</div><div class='del'>-</div><div class='del'>-        clnt = data;</div><div class='del'>-</div><div class='del'>-        conn = &amp;clnt-&gt;conn;</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-            trans = conn-&gt;trans;</div><div class='del'>-            if (trans) {</div><div class='del'>-                    strncpy (peerid, conn-&gt;trans-&gt;peerinfo.identifier,</div><div class='del'>-                             sizeof (peerid)-1);</div><div class='del'>-</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    struct rpc_clnt *clnt = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct timeval current;</div><div class='add'>+    struct list_head list;</div><div class='add'>+    struct saved_frame *saved_frame = NULL;</div><div class='add'>+    struct saved_frame *trav = NULL;</div><div class='add'>+    struct saved_frame *tmp = NULL;</div><div class='add'>+    char frame_sent[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timespec timeout = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char peerid[UNIX_PATH_MAX] = {0};</div><div class='add'>+    gf_boolean_t need_unref = _gf_false;</div><div class='add'>+    int len;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("client", data, out);</div><div class='add'>+</div><div class='add'>+    clnt = data;</div><div class='add'>+</div><div class='add'>+    conn = &amp;clnt-&gt;conn;</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        trans = conn-&gt;trans;</div><div class='add'>+        if (trans) {</div><div class='add'>+            strncpy(peerid, conn-&gt;trans-&gt;peerinfo.identifier,</div><div class='add'>+                    sizeof(peerid) - 1);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+    /*rpc_clnt_connection_cleanup will be unwinding all saved frames,</div><div class='add'>+     * bailed or otherwise*/</div><div class='add'>+    if (!trans)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;current, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;list);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* Chaining to get call-always functionality from</div><div class='add'>+           call-once timer */</div><div class='add'>+        if (conn-&gt;timer) {</div><div class='add'>+            timeout.tv_sec = 10;</div><div class='add'>+            timeout.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+            /* Ref rpc as it's added to timer event queue */</div><div class='add'>+            rpc_clnt_ref(clnt);</div><div class='add'>+            gf_timer_call_cancel(clnt-&gt;ctx, conn-&gt;timer);</div><div class='add'>+            conn-&gt;timer = gf_timer_call_after(clnt-&gt;ctx, timeout, call_bail,</div><div class='add'>+                                              (void *)clnt);</div><div class='add'>+</div><div class='add'>+            if (conn-&gt;timer == NULL) {</div><div class='add'>+                gf_log(conn-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Cannot create bailout timer for %s", peerid);</div><div class='add'>+                need_unref = _gf_true;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-        /*rpc_clnt_connection_cleanup will be unwinding all saved frames,</div><div class='del'>-         * bailed or otherwise*/</div><div class='del'>-        if (!trans)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gettimeofday (&amp;current, NULL);</div><div class='del'>-        INIT_LIST_HEAD (&amp;list);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* Chaining to get call-always functionality from</div><div class='del'>-                   call-once timer */</div><div class='del'>-                if (conn-&gt;timer) {</div><div class='del'>-                        timeout.tv_sec = 10;</div><div class='del'>-                        timeout.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-                        /* Ref rpc as it's added to timer event queue */</div><div class='del'>-                        rpc_clnt_ref (clnt);</div><div class='del'>-                        gf_timer_call_cancel (clnt-&gt;ctx, conn-&gt;timer);</div><div class='del'>-                        conn-&gt;timer = gf_timer_call_after (clnt-&gt;ctx,</div><div class='del'>-                                                           timeout,</div><div class='del'>-                                                           call_bail,</div><div class='del'>-                                                           (void *) clnt);</div><div class='del'>-</div><div class='del'>-                        if (conn-&gt;timer == NULL) {</div><div class='del'>-                                gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Cannot create bailout timer for %s",</div><div class='del'>-                                        peerid);</div><div class='del'>-                                need_unref = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                do {</div><div class='del'>-                        saved_frame =</div><div class='del'>-                                __saved_frames_get_timedout (conn-&gt;saved_frames,</div><div class='del'>-                                                             conn-&gt;frame_timeout,</div><div class='del'>-                                                             &amp;current);</div><div class='del'>-                        if (saved_frame)</div><div class='del'>-                                list_add (&amp;saved_frame-&gt;list, &amp;list);</div><div class='del'>-</div><div class='del'>-                } while (saved_frame);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (trav, tmp, &amp;list, list) {</div><div class='del'>-                gf_time_fmt (frame_sent, sizeof frame_sent,</div><div class='del'>-                             trav-&gt;saved_at.tv_sec, gf_timefmt_FT);</div><div class='del'>-                len = strlen (frame_sent);</div><div class='del'>-                snprintf (frame_sent + len, sizeof (frame_sent) - len,</div><div class='del'>-                          ".%"GF_PRI_SUSECONDS, trav-&gt;saved_at.tv_usec);</div><div class='del'>-</div><div class='del'>-		gf_log (conn-&gt;name, GF_LOG_ERROR,</div><div class='del'>-			"bailing out frame type(%s), op(%s(%d)), xid = 0x%x, "</div><div class='del'>-                        "unique = %"PRIu64", sent = %s, timeout = %d for %s",</div><div class='del'>-			trav-&gt;rpcreq-&gt;prog-&gt;progname,</div><div class='del'>-                        (trav-&gt;rpcreq-&gt;prog-&gt;procnames) ?</div><div class='del'>-                        trav-&gt;rpcreq-&gt;prog-&gt;procnames[trav-&gt;rpcreq-&gt;procnum] :</div><div class='del'>-                        "--",</div><div class='del'>-                        trav-&gt;rpcreq-&gt;procnum, trav-&gt;rpcreq-&gt;xid,</div><div class='del'>-                        ((call_frame_t *)(trav-&gt;frame))-&gt;root-&gt;unique,</div><div class='del'>-                        frame_sent, conn-&gt;frame_timeout, peerid);</div><div class='del'>-</div><div class='del'>-                clnt = rpc_clnt_ref (clnt);</div><div class='del'>-                trav-&gt;rpcreq-&gt;rpc_status = -1;</div><div class='del'>-		trav-&gt;rpcreq-&gt;cbkfn (trav-&gt;rpcreq, NULL, 0, trav-&gt;frame);</div><div class='del'>-</div><div class='del'>-                rpc_clnt_reply_deinit (trav-&gt;rpcreq, clnt-&gt;reqpool);</div><div class='del'>-                clnt = rpc_clnt_unref (clnt);</div><div class='del'>-                list_del_init (&amp;trav-&gt;list);</div><div class='del'>-                mem_put (trav);</div><div class='del'>-        }</div><div class='add'>+        do {</div><div class='add'>+            saved_frame = __saved_frames_get_timedout(</div><div class='add'>+                conn-&gt;saved_frames, conn-&gt;frame_timeout, &amp;current);</div><div class='add'>+            if (saved_frame)</div><div class='add'>+                list_add(&amp;saved_frame-&gt;list, &amp;list);</div><div class='add'>+</div><div class='add'>+        } while (saved_frame);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(trav, tmp, &amp;list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_time_fmt(frame_sent, sizeof frame_sent, trav-&gt;saved_at.tv_sec,</div><div class='add'>+                    gf_timefmt_FT);</div><div class='add'>+        len = strlen(frame_sent);</div><div class='add'>+        snprintf(frame_sent + len, sizeof(frame_sent) - len,</div><div class='add'>+                 ".%" GF_PRI_SUSECONDS, trav-&gt;saved_at.tv_usec);</div><div class='add'>+</div><div class='add'>+        gf_log(conn-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "bailing out frame type(%s), op(%s(%d)), xid = 0x%x, "</div><div class='add'>+               "unique = %" PRIu64 ", sent = %s, timeout = %d for %s",</div><div class='add'>+               trav-&gt;rpcreq-&gt;prog-&gt;progname,</div><div class='add'>+               (trav-&gt;rpcreq-&gt;prog-&gt;procnames)</div><div class='add'>+                   ? trav-&gt;rpcreq-&gt;prog-&gt;procnames[trav-&gt;rpcreq-&gt;procnum]</div><div class='add'>+                   : "--",</div><div class='add'>+               trav-&gt;rpcreq-&gt;procnum, trav-&gt;rpcreq-&gt;xid,</div><div class='add'>+               ((call_frame_t *)(trav-&gt;frame))-&gt;root-&gt;unique, frame_sent,</div><div class='add'>+               conn-&gt;frame_timeout, peerid);</div><div class='add'>+</div><div class='add'>+        clnt = rpc_clnt_ref(clnt);</div><div class='add'>+        trav-&gt;rpcreq-&gt;rpc_status = -1;</div><div class='add'>+        trav-&gt;rpcreq-&gt;cbkfn(trav-&gt;rpcreq, NULL, 0, trav-&gt;frame);</div><div class='add'>+</div><div class='add'>+        rpc_clnt_reply_deinit(trav-&gt;rpcreq, clnt-&gt;reqpool);</div><div class='add'>+        clnt = rpc_clnt_unref(clnt);</div><div class='add'>+        list_del_init(&amp;trav-&gt;list);</div><div class='add'>+        mem_put(trav);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        rpc_clnt_unref (clnt);</div><div class='del'>-        if (need_unref)</div><div class='del'>-                rpc_clnt_unref (clnt);</div><div class='del'>-        return;</div><div class='add'>+    rpc_clnt_unref(clnt);</div><div class='add'>+    if (need_unref)</div><div class='add'>+        rpc_clnt_unref(clnt);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* to be called with conn-&gt;lock held */</div><div class='ctx'> struct saved_frame *</div><div class='del'>-__save_frame (struct rpc_clnt *rpc_clnt, call_frame_t *frame,</div><div class='del'>-              struct rpc_req *rpcreq)</div><div class='add'>+__save_frame(struct rpc_clnt *rpc_clnt, call_frame_t *frame,</div><div class='add'>+             struct rpc_req *rpcreq)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn        = NULL;</div><div class='del'>-        struct timespec        timeout     = {0, };</div><div class='del'>-        struct saved_frame    *saved_frame = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct timespec timeout = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct saved_frame *saved_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        conn = &amp;rpc_clnt-&gt;conn;</div><div class='add'>+    conn = &amp;rpc_clnt-&gt;conn;</div><div class='ctx'> </div><div class='del'>-        saved_frame = __saved_frames_put (conn-&gt;saved_frames, frame, rpcreq);</div><div class='add'>+    saved_frame = __saved_frames_put(conn-&gt;saved_frames, frame, rpcreq);</div><div class='ctx'> </div><div class='del'>-        if (saved_frame == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (saved_frame == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: make timeout configurable */</div><div class='del'>-        if (conn-&gt;timer == NULL) {</div><div class='del'>-                timeout.tv_sec  = 10;</div><div class='del'>-                timeout.tv_nsec = 0;</div><div class='del'>-                rpc_clnt_ref (rpc_clnt);</div><div class='del'>-                conn-&gt;timer = gf_timer_call_after (rpc_clnt-&gt;ctx,</div><div class='del'>-                                                   timeout,</div><div class='del'>-                                                   call_bail,</div><div class='del'>-                                                   (void *) rpc_clnt);</div><div class='del'>-        }</div><div class='add'>+    /* TODO: make timeout configurable */</div><div class='add'>+    if (conn-&gt;timer == NULL) {</div><div class='add'>+        timeout.tv_sec = 10;</div><div class='add'>+        timeout.tv_nsec = 0;</div><div class='add'>+        rpc_clnt_ref(rpc_clnt);</div><div class='add'>+        conn-&gt;timer = gf_timer_call_after(rpc_clnt-&gt;ctx, timeout, call_bail,</div><div class='add'>+                                          (void *)rpc_clnt);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return saved_frame;</div><div class='add'>+    return saved_frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct saved_frames *</div><div class='del'>-saved_frames_new (void)</div><div class='add'>+saved_frames_new(void)</div><div class='ctx'> {</div><div class='del'>-	struct saved_frames *saved_frames = NULL;</div><div class='add'>+    struct saved_frames *saved_frames = NULL;</div><div class='ctx'> </div><div class='del'>-	saved_frames = GF_CALLOC (1, sizeof (*saved_frames),</div><div class='del'>-                                  gf_common_mt_rpcclnt_savedframe_t);</div><div class='del'>-	if (!saved_frames) {</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    saved_frames = GF_CALLOC(1, sizeof(*saved_frames),</div><div class='add'>+                             gf_common_mt_rpcclnt_savedframe_t);</div><div class='add'>+    if (!saved_frames) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	INIT_LIST_HEAD (&amp;saved_frames-&gt;sf.list);</div><div class='del'>-	INIT_LIST_HEAD (&amp;saved_frames-&gt;lk_sf.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;saved_frames-&gt;sf.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;saved_frames-&gt;lk_sf.list);</div><div class='ctx'> </div><div class='del'>-	return saved_frames;</div><div class='add'>+    return saved_frames;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__saved_frame_copy (struct saved_frames *frames, int64_t callid,</div><div class='del'>-                    struct saved_frame *saved_frame)</div><div class='add'>+__saved_frame_copy(struct saved_frames *frames, int64_t callid,</div><div class='add'>+                   struct saved_frame *saved_frame)</div><div class='ctx'> {</div><div class='del'>-	struct saved_frame *tmp   = NULL;</div><div class='del'>-        int                 ret   = -1;</div><div class='add'>+    struct saved_frame *tmp = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!saved_frame) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    if (!saved_frame) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(tmp, &amp;frames-&gt;sf.list, list)</div><div class='add'>+    {</div><div class='add'>+        if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='add'>+            *saved_frame = *tmp;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	list_for_each_entry (tmp, &amp;frames-&gt;sf.list, list) {</div><div class='del'>-		if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='del'>-			*saved_frame = *tmp;</div><div class='del'>-                        ret = 0;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	list_for_each_entry (tmp, &amp;frames-&gt;lk_sf.list, list) {</div><div class='del'>-		if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='del'>-			*saved_frame = *tmp;</div><div class='del'>-                        ret = 0;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    list_for_each_entry(tmp, &amp;frames-&gt;lk_sf.list, list)</div><div class='add'>+    {</div><div class='add'>+        if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='add'>+            *saved_frame = *tmp;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct saved_frame *</div><div class='del'>-__saved_frame_get (struct saved_frames *frames, int64_t callid)</div><div class='add'>+__saved_frame_get(struct saved_frames *frames, int64_t callid)</div><div class='ctx'> {</div><div class='del'>-	struct saved_frame *saved_frame = NULL;</div><div class='del'>-	struct saved_frame *tmp = NULL;</div><div class='del'>-</div><div class='del'>-	list_for_each_entry (tmp, &amp;frames-&gt;sf.list, list) {</div><div class='del'>-		if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='del'>-			list_del_init (&amp;tmp-&gt;list);</div><div class='del'>-			frames-&gt;count--;</div><div class='del'>-			saved_frame = tmp;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	list_for_each_entry (tmp, &amp;frames-&gt;lk_sf.list, list) {</div><div class='del'>-		if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='del'>-			list_del_init (&amp;tmp-&gt;list);</div><div class='del'>-			frames-&gt;count--;</div><div class='del'>-			saved_frame = tmp;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    struct saved_frame *saved_frame = NULL;</div><div class='add'>+    struct saved_frame *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-	if (saved_frame) {</div><div class='del'>-                THIS  = saved_frame-&gt;capital_this;</div><div class='add'>+    list_for_each_entry(tmp, &amp;frames-&gt;sf.list, list)</div><div class='add'>+    {</div><div class='add'>+        if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='add'>+            list_del_init(&amp;tmp-&gt;list);</div><div class='add'>+            frames-&gt;count--;</div><div class='add'>+            saved_frame = tmp;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return saved_frame;</div><div class='del'>-}</div><div class='add'>+    list_for_each_entry(tmp, &amp;frames-&gt;lk_sf.list, list)</div><div class='add'>+    {</div><div class='add'>+        if (tmp-&gt;rpcreq-&gt;xid == callid) {</div><div class='add'>+            list_del_init(&amp;tmp-&gt;list);</div><div class='add'>+            frames-&gt;count--;</div><div class='add'>+            saved_frame = tmp;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    if (saved_frame) {</div><div class='add'>+        THIS = saved_frame-&gt;capital_this;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return saved_frame;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-saved_frames_unwind (struct saved_frames *saved_frames)</div><div class='add'>+saved_frames_unwind(struct saved_frames *saved_frames)</div><div class='ctx'> {</div><div class='del'>-	struct saved_frame   *trav = NULL;</div><div class='del'>-	struct saved_frame   *tmp = NULL;</div><div class='del'>-        char                  timestr[1024] = {0,};</div><div class='del'>-        int                   len;</div><div class='del'>-</div><div class='del'>-        list_splice_init (&amp;saved_frames-&gt;lk_sf.list, &amp;saved_frames-&gt;sf.list);</div><div class='del'>-</div><div class='del'>-	list_for_each_entry_safe (trav, tmp, &amp;saved_frames-&gt;sf.list, list) {</div><div class='del'>-                gf_time_fmt (timestr, sizeof timestr,</div><div class='del'>-                             trav-&gt;saved_at.tv_sec, gf_timefmt_FT);</div><div class='del'>-                len = strlen (timestr);</div><div class='del'>-                snprintf (timestr + len, sizeof(timestr) - len,</div><div class='del'>-                          ".%"GF_PRI_SUSECONDS, trav-&gt;saved_at.tv_usec);</div><div class='del'>-</div><div class='del'>-                if (!trav-&gt;rpcreq || !trav-&gt;rpcreq-&gt;prog)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                gf_log_callingfn (trav-&gt;rpcreq-&gt;conn-&gt;name,</div><div class='del'>-                                  GF_LOG_ERROR,</div><div class='del'>-                                  "forced unwinding frame type(%s) op(%s(%d)) "</div><div class='del'>-                                  "called at %s (xid=0x%x)",</div><div class='del'>-                                  trav-&gt;rpcreq-&gt;prog-&gt;progname,</div><div class='del'>-                                  ((trav-&gt;rpcreq-&gt;prog-&gt;procnames) ?</div><div class='del'>-                                   trav-&gt;rpcreq-&gt;prog-&gt;procnames[trav-&gt;rpcreq-&gt;procnum]</div><div class='del'>-                                   : "--"),</div><div class='del'>-                                  trav-&gt;rpcreq-&gt;procnum, timestr,</div><div class='del'>-                                  trav-&gt;rpcreq-&gt;xid);</div><div class='del'>-		saved_frames-&gt;count--;</div><div class='del'>-</div><div class='del'>-                trav-&gt;rpcreq-&gt;rpc_status = -1;</div><div class='del'>-                trav-&gt;rpcreq-&gt;cbkfn (trav-&gt;rpcreq, NULL, 0, trav-&gt;frame);</div><div class='del'>-</div><div class='del'>-                rpc_clnt_reply_deinit (trav-&gt;rpcreq,</div><div class='del'>-                                       trav-&gt;rpcreq-&gt;conn-&gt;rpc_clnt-&gt;reqpool);</div><div class='del'>-</div><div class='del'>-		list_del_init (&amp;trav-&gt;list);</div><div class='del'>-                mem_put (trav);</div><div class='del'>-	}</div><div class='add'>+    struct saved_frame *trav = NULL;</div><div class='add'>+    struct saved_frame *tmp = NULL;</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int len;</div><div class='add'>+</div><div class='add'>+    list_splice_init(&amp;saved_frames-&gt;lk_sf.list, &amp;saved_frames-&gt;sf.list);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(trav, tmp, &amp;saved_frames-&gt;sf.list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_time_fmt(timestr, sizeof timestr, trav-&gt;saved_at.tv_sec,</div><div class='add'>+                    gf_timefmt_FT);</div><div class='add'>+        len = strlen(timestr);</div><div class='add'>+        snprintf(timestr + len, sizeof(timestr) - len, ".%" GF_PRI_SUSECONDS,</div><div class='add'>+                 trav-&gt;saved_at.tv_usec);</div><div class='add'>+</div><div class='add'>+        if (!trav-&gt;rpcreq || !trav-&gt;rpcreq-&gt;prog)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            trav-&gt;rpcreq-&gt;conn-&gt;name, GF_LOG_ERROR,</div><div class='add'>+            "forced unwinding frame type(%s) op(%s(%d)) "</div><div class='add'>+            "called at %s (xid=0x%x)",</div><div class='add'>+            trav-&gt;rpcreq-&gt;prog-&gt;progname,</div><div class='add'>+            ((trav-&gt;rpcreq-&gt;prog-&gt;procnames)</div><div class='add'>+                 ? trav-&gt;rpcreq-&gt;prog-&gt;procnames[trav-&gt;rpcreq-&gt;procnum]</div><div class='add'>+                 : "--"),</div><div class='add'>+            trav-&gt;rpcreq-&gt;procnum, timestr, trav-&gt;rpcreq-&gt;xid);</div><div class='add'>+        saved_frames-&gt;count--;</div><div class='add'>+</div><div class='add'>+        trav-&gt;rpcreq-&gt;rpc_status = -1;</div><div class='add'>+        trav-&gt;rpcreq-&gt;cbkfn(trav-&gt;rpcreq, NULL, 0, trav-&gt;frame);</div><div class='add'>+</div><div class='add'>+        rpc_clnt_reply_deinit(trav-&gt;rpcreq,</div><div class='add'>+                              trav-&gt;rpcreq-&gt;conn-&gt;rpc_clnt-&gt;reqpool);</div><div class='add'>+</div><div class='add'>+        list_del_init(&amp;trav-&gt;list);</div><div class='add'>+        mem_put(trav);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-saved_frames_destroy (struct saved_frames *frames)</div><div class='add'>+saved_frames_destroy(struct saved_frames *frames)</div><div class='ctx'> {</div><div class='del'>-        if (!frames)</div><div class='del'>-                return;</div><div class='add'>+    if (!frames)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	saved_frames_unwind (frames);</div><div class='add'>+    saved_frames_unwind(frames);</div><div class='ctx'> </div><div class='del'>-	GF_FREE (frames);</div><div class='add'>+    GF_FREE(frames);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rpc_clnt_reconnect (void *conn_ptr)</div><div class='add'>+rpc_clnt_reconnect(void *conn_ptr)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_t         *trans = NULL;</div><div class='del'>-        rpc_clnt_connection_t   *conn  = NULL;</div><div class='del'>-        struct timespec          ts    = {0, 0};</div><div class='del'>-        struct rpc_clnt         *clnt  = NULL;</div><div class='del'>-        gf_boolean_t             need_unref = _gf_false;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct timespec ts = {0, 0};</div><div class='add'>+    struct rpc_clnt *clnt = NULL;</div><div class='add'>+    gf_boolean_t need_unref = _gf_false;</div><div class='ctx'> </div><div class='del'>-        conn  = conn_ptr;</div><div class='del'>-        clnt = conn-&gt;rpc_clnt;</div><div class='add'>+    conn = conn_ptr;</div><div class='add'>+    clnt = conn-&gt;rpc_clnt;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                trans = conn-&gt;trans;</div><div class='del'>-                if (!trans) {</div><div class='del'>-                        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-                if (conn-&gt;reconnect)</div><div class='del'>-                        gf_timer_call_cancel (clnt-&gt;ctx,</div><div class='del'>-                                              conn-&gt;reconnect);</div><div class='del'>-                conn-&gt;reconnect = 0;</div><div class='del'>-</div><div class='del'>-                if ((conn-&gt;connected == 0) &amp;&amp; !clnt-&gt;disabled) {</div><div class='del'>-                        ts.tv_sec = 3;</div><div class='del'>-                        ts.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-                        gf_log (conn-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "attempting reconnect");</div><div class='del'>-                        (void) rpc_transport_connect (trans,</div><div class='del'>-                                                      conn-&gt;config.remote_port);</div><div class='del'>-                        rpc_clnt_ref (clnt);</div><div class='del'>-                        conn-&gt;reconnect =</div><div class='del'>-                                gf_timer_call_after (clnt-&gt;ctx, ts,</div><div class='del'>-                                                     rpc_clnt_reconnect,</div><div class='del'>-                                                     conn);</div><div class='del'>-                        if (!conn-&gt;reconnect) {</div><div class='del'>-                                need_unref = _gf_true;</div><div class='del'>-                                gf_log (conn-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Error adding to timer event queue");</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (conn-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "breaking reconnect chain");</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        trans = conn-&gt;trans;</div><div class='add'>+        if (!trans) {</div><div class='add'>+            pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+        if (conn-&gt;reconnect)</div><div class='add'>+            gf_timer_call_cancel(clnt-&gt;ctx, conn-&gt;reconnect);</div><div class='add'>+        conn-&gt;reconnect = 0;</div><div class='add'>+</div><div class='add'>+        if ((conn-&gt;connected == 0) &amp;&amp; !clnt-&gt;disabled) {</div><div class='add'>+            ts.tv_sec = 3;</div><div class='add'>+            ts.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+            gf_log(conn-&gt;name, GF_LOG_TRACE, "attempting reconnect");</div><div class='add'>+            (void)rpc_transport_connect(trans, conn-&gt;config.remote_port);</div><div class='add'>+            rpc_clnt_ref(clnt);</div><div class='add'>+            conn-&gt;reconnect = gf_timer_call_after(clnt-&gt;ctx, ts,</div><div class='add'>+                                                  rpc_clnt_reconnect, conn);</div><div class='add'>+            if (!conn-&gt;reconnect) {</div><div class='add'>+                need_unref = _gf_true;</div><div class='add'>+                gf_log(conn-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Error adding to timer event queue");</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(conn-&gt;name, GF_LOG_TRACE, "breaking reconnect chain");</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_unref (clnt);</div><div class='del'>-        if (need_unref)</div><div class='del'>-                rpc_clnt_unref (clnt);</div><div class='del'>-        return;</div><div class='add'>+    rpc_clnt_unref(clnt);</div><div class='add'>+    if (need_unref)</div><div class='add'>+        rpc_clnt_unref(clnt);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_fill_request_info (struct rpc_clnt *clnt, rpc_request_info_t *info)</div><div class='add'>+rpc_clnt_fill_request_info(struct rpc_clnt *clnt, rpc_request_info_t *info)</div><div class='ctx'> {</div><div class='del'>-        struct saved_frame  saved_frame;</div><div class='del'>-        int                 ret         = -1;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;clnt-&gt;conn.lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __saved_frame_copy (clnt-&gt;conn.saved_frames, info-&gt;xid,</div><div class='del'>-                                          &amp;saved_frame);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;clnt-&gt;conn.lock);</div><div class='del'>-</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (clnt-&gt;conn.name, GF_LOG_CRITICAL,</div><div class='del'>-                        "cannot lookup the saved "</div><div class='del'>-                        "frame corresponding to xid (%d)", info-&gt;xid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        info-&gt;prognum = saved_frame.rpcreq-&gt;prog-&gt;prognum;</div><div class='del'>-        info-&gt;procnum = saved_frame.rpcreq-&gt;procnum;</div><div class='del'>-        info-&gt;progver = saved_frame.rpcreq-&gt;prog-&gt;progver;</div><div class='del'>-        info-&gt;rpc_req = saved_frame.rpcreq;</div><div class='del'>-        info-&gt;rsp     = saved_frame.rsp;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    struct saved_frame saved_frame;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;clnt-&gt;conn.lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __saved_frame_copy(clnt-&gt;conn.saved_frames, info-&gt;xid,</div><div class='add'>+                                 &amp;saved_frame);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;clnt-&gt;conn.lock);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(clnt-&gt;conn.name, GF_LOG_CRITICAL,</div><div class='add'>+               "cannot lookup the saved "</div><div class='add'>+               "frame corresponding to xid (%d)",</div><div class='add'>+               info-&gt;xid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    info-&gt;prognum = saved_frame.rpcreq-&gt;prog-&gt;prognum;</div><div class='add'>+    info-&gt;procnum = saved_frame.rpcreq-&gt;procnum;</div><div class='add'>+    info-&gt;progver = saved_frame.rpcreq-&gt;prog-&gt;progver;</div><div class='add'>+    info-&gt;rpc_req = saved_frame.rpcreq;</div><div class='add'>+    info-&gt;rsp = saved_frame.rsp;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_reconnect_cleanup (rpc_clnt_connection_t *conn)</div><div class='add'>+rpc_clnt_reconnect_cleanup(rpc_clnt_connection_t *conn)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt         *clnt  = NULL;</div><div class='del'>-        int                      ret   = 0;</div><div class='del'>-        gf_boolean_t             reconnect_unref = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!conn) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        clnt = conn-&gt;rpc_clnt;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-</div><div class='del'>-                if (conn-&gt;reconnect) {</div><div class='del'>-                        ret = gf_timer_call_cancel (clnt-&gt;ctx, conn-&gt;reconnect);</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                reconnect_unref = _gf_true;</div><div class='del'>-                                conn-&gt;cleanup_gen++;</div><div class='del'>-                        }</div><div class='del'>-                        conn-&gt;reconnect = NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    struct rpc_clnt *clnt = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t reconnect_unref = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!conn) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    clnt = conn-&gt;rpc_clnt;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (conn-&gt;reconnect) {</div><div class='add'>+            ret = gf_timer_call_cancel(clnt-&gt;ctx, conn-&gt;reconnect);</div><div class='add'>+            if (!ret) {</div><div class='add'>+                reconnect_unref = _gf_true;</div><div class='add'>+                conn-&gt;cleanup_gen++;</div><div class='add'>+            }</div><div class='add'>+            conn-&gt;reconnect = NULL;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (reconnect_unref)</div><div class='del'>-                rpc_clnt_unref (clnt);</div><div class='add'>+    if (reconnect_unref)</div><div class='add'>+        rpc_clnt_unref(clnt);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -503,54 +488,53 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_connection_cleanup (rpc_clnt_connection_t *conn)</div><div class='add'>+rpc_clnt_connection_cleanup(rpc_clnt_connection_t *conn)</div><div class='ctx'> {</div><div class='del'>-        struct saved_frames    *saved_frames = NULL;</div><div class='del'>-        struct rpc_clnt         *clnt  = NULL;</div><div class='del'>-        int                     unref = 0;</div><div class='del'>-        int                     ret   = 0;</div><div class='del'>-        gf_boolean_t            timer_unref = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!conn) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    struct saved_frames *saved_frames = NULL;</div><div class='add'>+    struct rpc_clnt *clnt = NULL;</div><div class='add'>+    int unref = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t timer_unref = _gf_false;</div><div class='ctx'> </div><div class='del'>-        clnt = conn-&gt;rpc_clnt;</div><div class='add'>+    if (!conn) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='add'>+    clnt = conn-&gt;rpc_clnt;</div><div class='ctx'> </div><div class='del'>-                saved_frames = conn-&gt;saved_frames;</div><div class='del'>-                conn-&gt;saved_frames = saved_frames_new ();</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        saved_frames = conn-&gt;saved_frames;</div><div class='add'>+        conn-&gt;saved_frames = saved_frames_new();</div><div class='ctx'> </div><div class='del'>-                /* bailout logic cleanup */</div><div class='del'>-                if (conn-&gt;timer) {</div><div class='del'>-                        ret = gf_timer_call_cancel (clnt-&gt;ctx, conn-&gt;timer);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                timer_unref = _gf_true;</div><div class='del'>-                        conn-&gt;timer = NULL;</div><div class='del'>-                }</div><div class='add'>+        /* bailout logic cleanup */</div><div class='add'>+        if (conn-&gt;timer) {</div><div class='add'>+            ret = gf_timer_call_cancel(clnt-&gt;ctx, conn-&gt;timer);</div><div class='add'>+            if (!ret)</div><div class='add'>+                timer_unref = _gf_true;</div><div class='add'>+            conn-&gt;timer = NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                conn-&gt;connected = 0;</div><div class='del'>-                conn-&gt;disconnected = 1;</div><div class='add'>+        conn-&gt;connected = 0;</div><div class='add'>+        conn-&gt;disconnected = 1;</div><div class='ctx'> </div><div class='del'>-                unref = rpc_clnt_remove_ping_timer_locked (clnt);</div><div class='del'>-                /*reset rpc msgs stats*/</div><div class='del'>-                conn-&gt;pingcnt = 0;</div><div class='del'>-                conn-&gt;msgcnt = 0;</div><div class='del'>-                conn-&gt;cleanup_gen++;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+        unref = rpc_clnt_remove_ping_timer_locked(clnt);</div><div class='add'>+        /*reset rpc msgs stats*/</div><div class='add'>+        conn-&gt;pingcnt = 0;</div><div class='add'>+        conn-&gt;msgcnt = 0;</div><div class='add'>+        conn-&gt;cleanup_gen++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        saved_frames_destroy (saved_frames);</div><div class='del'>-        if (unref)</div><div class='del'>-                rpc_clnt_unref (clnt);</div><div class='add'>+    saved_frames_destroy(saved_frames);</div><div class='add'>+    if (unref)</div><div class='add'>+        rpc_clnt_unref(clnt);</div><div class='ctx'> </div><div class='del'>-        if (timer_unref)</div><div class='del'>-                rpc_clnt_unref (clnt);</div><div class='add'>+    if (timer_unref)</div><div class='add'>+        rpc_clnt_unref(clnt);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -562,1554 +546,1516 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static struct saved_frame *</div><div class='del'>-lookup_frame (rpc_clnt_connection_t *conn, int64_t callid)</div><div class='add'>+lookup_frame(rpc_clnt_connection_t *conn, int64_t callid)</div><div class='ctx'> {</div><div class='del'>-        struct saved_frame *frame = NULL;</div><div class='add'>+    struct saved_frame *frame = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                frame = __saved_frame_get (conn-&gt;saved_frames, callid);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        frame = __saved_frame_get(conn-&gt;saved_frames, callid);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return frame;</div><div class='add'>+    return frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_reply_fill (rpc_transport_pollin_t *msg,</div><div class='del'>-                     rpc_clnt_connection_t *conn,</div><div class='del'>-                     struct rpc_msg *replymsg, struct iovec progmsg,</div><div class='del'>-                     struct rpc_req *req,</div><div class='del'>-                     struct saved_frame *saved_frame)</div><div class='add'>+rpc_clnt_reply_fill(rpc_transport_pollin_t *msg, rpc_clnt_connection_t *conn,</div><div class='add'>+                    struct rpc_msg *replymsg, struct iovec progmsg,</div><div class='add'>+                    struct rpc_req *req, struct saved_frame *saved_frame)</div><div class='ctx'> {</div><div class='del'>-        int             ret   = -1;</div><div class='del'>-</div><div class='del'>-        if ((!conn) || (!replymsg)|| (!req) || (!saved_frame) || (!msg)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;rpc_status = 0;</div><div class='del'>-        if ((rpc_reply_status (replymsg) == MSG_DENIED)</div><div class='del'>-            || (rpc_accepted_reply_status (replymsg) != SUCCESS)) {</div><div class='del'>-                req-&gt;rpc_status = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;rsp[0] = progmsg;</div><div class='del'>-        req-&gt;rsp_iobref = iobref_ref (msg-&gt;iobref);</div><div class='del'>-</div><div class='del'>-        if (msg-&gt;vectored) {</div><div class='del'>-                req-&gt;rsp[1] = msg-&gt;vector[1];</div><div class='del'>-                req-&gt;rspcnt = 2;</div><div class='del'>-        } else {</div><div class='del'>-                req-&gt;rspcnt = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* By this time, the data bytes for the auth scheme would have already</div><div class='del'>-         * been copied into the required sections of the req structure,</div><div class='del'>-         * we just need to fill in the meta-data about it now.</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!conn) || (!replymsg) || (!req) || (!saved_frame) || (!msg)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;rpc_status = 0;</div><div class='add'>+    if ((rpc_reply_status(replymsg) == MSG_DENIED) ||</div><div class='add'>+        (rpc_accepted_reply_status(replymsg) != SUCCESS)) {</div><div class='add'>+        req-&gt;rpc_status = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;rsp[0] = progmsg;</div><div class='add'>+    req-&gt;rsp_iobref = iobref_ref(msg-&gt;iobref);</div><div class='add'>+</div><div class='add'>+    if (msg-&gt;vectored) {</div><div class='add'>+        req-&gt;rsp[1] = msg-&gt;vector[1];</div><div class='add'>+        req-&gt;rspcnt = 2;</div><div class='add'>+    } else {</div><div class='add'>+        req-&gt;rspcnt = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* By this time, the data bytes for the auth scheme would have already</div><div class='add'>+     * been copied into the required sections of the req structure,</div><div class='add'>+     * we just need to fill in the meta-data about it now.</div><div class='add'>+     */</div><div class='add'>+    if (req-&gt;rpc_status == 0) {</div><div class='add'>+        /*</div><div class='add'>+         * req-&gt;verf.flavour = rpc_reply_verf_flavour (replymsg);</div><div class='add'>+         * req-&gt;verf.datalen = rpc_reply_verf_len (replymsg);</div><div class='ctx'>          */</div><div class='del'>-        if (req-&gt;rpc_status == 0) {</div><div class='del'>-                /*</div><div class='del'>-                 * req-&gt;verf.flavour = rpc_reply_verf_flavour (replymsg);</div><div class='del'>-                 * req-&gt;verf.datalen = rpc_reply_verf_len (replymsg);</div><div class='del'>-                 */</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rpc_clnt_reply_deinit (struct rpc_req *req, struct mem_pool *pool)</div><div class='add'>+rpc_clnt_reply_deinit(struct rpc_req *req, struct mem_pool *pool)</div><div class='ctx'> {</div><div class='del'>-        if (!req) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!req) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (req-&gt;rsp_iobref) {</div><div class='del'>-                iobref_unref (req-&gt;rsp_iobref);</div><div class='del'>-        }</div><div class='add'>+    if (req-&gt;rsp_iobref) {</div><div class='add'>+        iobref_unref(req-&gt;rsp_iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mem_put (req);</div><div class='add'>+    mem_put(req);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* TODO: use mem-pool for allocating requests */</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_reply_init (rpc_clnt_connection_t *conn, rpc_transport_pollin_t *msg,</div><div class='del'>-                     struct rpc_req *req, struct saved_frame *saved_frame)</div><div class='add'>+rpc_clnt_reply_init(rpc_clnt_connection_t *conn, rpc_transport_pollin_t *msg,</div><div class='add'>+                    struct rpc_req *req, struct saved_frame *saved_frame)</div><div class='ctx'> {</div><div class='del'>-        char                    *msgbuf = NULL;</div><div class='del'>-        struct rpc_msg          rpcmsg;</div><div class='del'>-        struct iovec            progmsg;        /* RPC Program payload */</div><div class='del'>-        size_t                  msglen  = 0;</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-</div><div class='del'>-        msgbuf = msg-&gt;vector[0].iov_base;</div><div class='del'>-        msglen = msg-&gt;vector[0].iov_len;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_rpc_reply (msgbuf, msglen, &amp;rpcmsg, &amp;progmsg,</div><div class='del'>-                                req-&gt;verf.authdata);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "RPC reply decoding failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_reply_fill (msg, conn, &amp;rpcmsg, progmsg, req,</div><div class='del'>-                                   saved_frame);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (conn-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                "received rpc message (RPC XID: 0x%x"</div><div class='del'>-                " Program: %s, ProgVers: %d, Proc: %d) from rpc-transport (%s)",</div><div class='del'>-                saved_frame-&gt;rpcreq-&gt;xid,</div><div class='del'>-                saved_frame-&gt;rpcreq-&gt;prog-&gt;progname,</div><div class='del'>-                saved_frame-&gt;rpcreq-&gt;prog-&gt;progver,</div><div class='del'>-                saved_frame-&gt;rpcreq-&gt;procnum, conn-&gt;name);</div><div class='add'>+    char *msgbuf = NULL;</div><div class='add'>+    struct rpc_msg rpcmsg;</div><div class='add'>+    struct iovec progmsg; /* RPC Program payload */</div><div class='add'>+    size_t msglen = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    msgbuf = msg-&gt;vector[0].iov_base;</div><div class='add'>+    msglen = msg-&gt;vector[0].iov_len;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_rpc_reply(msgbuf, msglen, &amp;rpcmsg, &amp;progmsg,</div><div class='add'>+                           req-&gt;verf.authdata);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(conn-&gt;name, GF_LOG_WARNING, "RPC reply decoding failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_reply_fill(msg, conn, &amp;rpcmsg, progmsg, req, saved_frame);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(conn-&gt;name, GF_LOG_TRACE,</div><div class='add'>+           "received rpc message (RPC XID: 0x%x"</div><div class='add'>+           " Program: %s, ProgVers: %d, Proc: %d) from rpc-transport (%s)",</div><div class='add'>+           saved_frame-&gt;rpcreq-&gt;xid, saved_frame-&gt;rpcreq-&gt;prog-&gt;progname,</div><div class='add'>+           saved_frame-&gt;rpcreq-&gt;prog-&gt;progver, saved_frame-&gt;rpcreq-&gt;procnum,</div><div class='add'>+           conn-&gt;name);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                req-&gt;rpc_status = -1;</div><div class='del'>-        }</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        req-&gt;rpc_status = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_handle_cbk (struct rpc_clnt *clnt, rpc_transport_pollin_t *msg)</div><div class='add'>+rpc_clnt_handle_cbk(struct rpc_clnt *clnt, rpc_transport_pollin_t *msg)</div><div class='ctx'> {</div><div class='del'>-        char                 *msgbuf = NULL;</div><div class='del'>-        rpcclnt_cb_program_t *program = NULL;</div><div class='del'>-        struct rpc_msg        rpcmsg;</div><div class='del'>-        struct iovec          progmsg; /* RPC Program payload */</div><div class='del'>-        size_t                msglen = 0;</div><div class='del'>-        int                   found  = 0;</div><div class='del'>-        int                   ret    = -1;</div><div class='del'>-        int                   procnum = 0;</div><div class='del'>-</div><div class='del'>-        msgbuf = msg-&gt;vector[0].iov_base;</div><div class='del'>-        msglen = msg-&gt;vector[0].iov_len;</div><div class='del'>-</div><div class='del'>-        clnt = rpc_clnt_ref (clnt);</div><div class='del'>-        ret = xdr_to_rpc_call (msgbuf, msglen, &amp;rpcmsg, &amp;progmsg, NULL,NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (clnt-&gt;conn.name, GF_LOG_WARNING,</div><div class='del'>-                        "RPC call decoding failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (clnt-&gt;conn.name, GF_LOG_TRACE,</div><div class='del'>-		"receivd rpc message (XID: 0x%" GF_PRI_RPC_XID ", "</div><div class='del'>-		"Ver: %" GF_PRI_RPC_VERSION ", Program: %" GF_PRI_RPC_PROG_ID ", "</div><div class='del'>-		"ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC ") "</div><div class='del'>-                "from rpc-transport (%s)", rpc_call_xid (&amp;rpcmsg),</div><div class='del'>-                rpc_call_rpcvers (&amp;rpcmsg), rpc_call_program (&amp;rpcmsg),</div><div class='del'>-                rpc_call_progver (&amp;rpcmsg), rpc_call_progproc (&amp;rpcmsg),</div><div class='del'>-                clnt-&gt;conn.name);</div><div class='del'>-</div><div class='del'>-        procnum = rpc_call_progproc (&amp;rpcmsg);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;clnt-&gt;lock);</div><div class='add'>+    char *msgbuf = NULL;</div><div class='add'>+    rpcclnt_cb_program_t *program = NULL;</div><div class='add'>+    struct rpc_msg rpcmsg;</div><div class='add'>+    struct iovec progmsg; /* RPC Program payload */</div><div class='add'>+    size_t msglen = 0;</div><div class='add'>+    int found = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int procnum = 0;</div><div class='add'>+</div><div class='add'>+    msgbuf = msg-&gt;vector[0].iov_base;</div><div class='add'>+    msglen = msg-&gt;vector[0].iov_len;</div><div class='add'>+</div><div class='add'>+    clnt = rpc_clnt_ref(clnt);</div><div class='add'>+    ret = xdr_to_rpc_call(msgbuf, msglen, &amp;rpcmsg, &amp;progmsg, NULL, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(clnt-&gt;conn.name, GF_LOG_WARNING, "RPC call decoding failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(clnt-&gt;conn.name, GF_LOG_TRACE,</div><div class='add'>+           "receivd rpc message (XID: 0x%" GF_PRI_RPC_XID</div><div class='add'>+           ", "</div><div class='add'>+           "Ver: %" GF_PRI_RPC_VERSION ", Program: %" GF_PRI_RPC_PROG_ID</div><div class='add'>+           ", "</div><div class='add'>+           "ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC</div><div class='add'>+           ") "</div><div class='add'>+           "from rpc-transport (%s)",</div><div class='add'>+           rpc_call_xid(&amp;rpcmsg), rpc_call_rpcvers(&amp;rpcmsg),</div><div class='add'>+           rpc_call_program(&amp;rpcmsg), rpc_call_progver(&amp;rpcmsg),</div><div class='add'>+           rpc_call_progproc(&amp;rpcmsg), clnt-&gt;conn.name);</div><div class='add'>+</div><div class='add'>+    procnum = rpc_call_progproc(&amp;rpcmsg);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;clnt-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(program, &amp;clnt-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (program, &amp;clnt-&gt;programs, program) {</div><div class='del'>-                        if ((program-&gt;prognum == rpc_call_program (&amp;rpcmsg))</div><div class='del'>-                            &amp;&amp; (program-&gt;progver</div><div class='del'>-                                == rpc_call_progver (&amp;rpcmsg))) {</div><div class='del'>-                                found = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if ((program-&gt;prognum == rpc_call_program(&amp;rpcmsg)) &amp;&amp;</div><div class='add'>+                (program-&gt;progver == rpc_call_progver(&amp;rpcmsg))) {</div><div class='add'>+                found = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;clnt-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;clnt-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (found &amp;&amp; (procnum &lt; program-&gt;numactors) &amp;&amp;</div><div class='del'>-            (program-&gt;actors[procnum].actor)) {</div><div class='del'>-                program-&gt;actors[procnum].actor (clnt, program-&gt;mydata,</div><div class='del'>-                                                &amp;progmsg);</div><div class='del'>-        }</div><div class='add'>+    if (found &amp;&amp; (procnum &lt; program-&gt;numactors) &amp;&amp;</div><div class='add'>+        (program-&gt;actors[procnum].actor)) {</div><div class='add'>+        program-&gt;actors[procnum].actor(clnt, program-&gt;mydata, &amp;progmsg);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        rpc_clnt_unref (clnt);</div><div class='del'>-        return ret;</div><div class='add'>+    rpc_clnt_unref(clnt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_handle_reply (struct rpc_clnt *clnt, rpc_transport_pollin_t *pollin)</div><div class='add'>+rpc_clnt_handle_reply(struct rpc_clnt *clnt, rpc_transport_pollin_t *pollin)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn         = NULL;</div><div class='del'>-        struct saved_frame    *saved_frame  = NULL;</div><div class='del'>-        int                    ret          = -1;</div><div class='del'>-        struct rpc_req        *req          = NULL;</div><div class='del'>-        uint32_t               xid          = 0;</div><div class='del'>-</div><div class='del'>-        clnt = rpc_clnt_ref (clnt);</div><div class='del'>-        conn = &amp;clnt-&gt;conn;</div><div class='del'>-</div><div class='del'>-        xid = ntoh32 (*((uint32_t *)pollin-&gt;vector[0].iov_base));</div><div class='del'>-        saved_frame = lookup_frame (conn, xid);</div><div class='del'>-        if (saved_frame == NULL) {</div><div class='del'>-                gf_log (conn-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "cannot lookup the saved frame for reply with xid (%u)",</div><div class='del'>-                        xid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req = saved_frame-&gt;rpcreq;</div><div class='del'>-        if (req == NULL) {</div><div class='del'>-                gf_log (conn-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "no request with frame for xid (%u)", xid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_reply_init (conn, pollin, req, saved_frame);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                req-&gt;rpc_status = -1;</div><div class='del'>-                gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "initialising rpc reply failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;cbkfn (req, req-&gt;rsp, req-&gt;rspcnt, saved_frame-&gt;frame);</div><div class='del'>-</div><div class='del'>-        if (req) {</div><div class='del'>-                rpc_clnt_reply_deinit (req, conn-&gt;rpc_clnt-&gt;reqpool);</div><div class='del'>-        }</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct saved_frame *saved_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct rpc_req *req = NULL;</div><div class='add'>+    uint32_t xid = 0;</div><div class='add'>+</div><div class='add'>+    clnt = rpc_clnt_ref(clnt);</div><div class='add'>+    conn = &amp;clnt-&gt;conn;</div><div class='add'>+</div><div class='add'>+    xid = ntoh32(*((uint32_t *)pollin-&gt;vector[0].iov_base));</div><div class='add'>+    saved_frame = lookup_frame(conn, xid);</div><div class='add'>+    if (saved_frame == NULL) {</div><div class='add'>+        gf_log(conn-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "cannot lookup the saved frame for reply with xid (%u)", xid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req = saved_frame-&gt;rpcreq;</div><div class='add'>+    if (req == NULL) {</div><div class='add'>+        gf_log(conn-&gt;name, GF_LOG_ERROR, "no request with frame for xid (%u)",</div><div class='add'>+               xid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_reply_init(conn, pollin, req, saved_frame);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        req-&gt;rpc_status = -1;</div><div class='add'>+        gf_log(conn-&gt;name, GF_LOG_WARNING, "initialising rpc reply failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;cbkfn(req, req-&gt;rsp, req-&gt;rspcnt, saved_frame-&gt;frame);</div><div class='add'>+</div><div class='add'>+    if (req) {</div><div class='add'>+        rpc_clnt_reply_deinit(req, conn-&gt;rpc_clnt-&gt;reqpool);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (saved_frame) {</div><div class='del'>-                mem_put (saved_frame);</div><div class='del'>-        }</div><div class='add'>+    if (saved_frame) {</div><div class='add'>+        mem_put(saved_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_unref (clnt);</div><div class='del'>-        return ret;</div><div class='add'>+    rpc_clnt_unref(clnt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-is_rpc_clnt_disconnected (rpc_clnt_connection_t *conn)</div><div class='add'>+is_rpc_clnt_disconnected(rpc_clnt_connection_t *conn)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t disconnected = _gf_true;</div><div class='add'>+    gf_boolean_t disconnected = _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (!conn)</div><div class='del'>-                return disconnected;</div><div class='add'>+    if (!conn)</div><div class='add'>+        return disconnected;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (conn-&gt;disconnected == _gf_false)</div><div class='del'>-                        disconnected = _gf_false;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (conn-&gt;disconnected == _gf_false)</div><div class='add'>+            disconnected = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return disconnected;</div><div class='add'>+    return disconnected;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rpc_clnt_destroy (struct rpc_clnt *rpc);</div><div class='add'>+rpc_clnt_destroy(struct rpc_clnt *rpc);</div><div class='ctx'> </div><div class='del'>-#define RPC_THIS_SAVE(xl) do {                                  \</div><div class='del'>-        old_THIS = THIS ;                                       \</div><div class='del'>-        if (!old_THIS)                                          \</div><div class='del'>-                gf_log_callingfn ("rpc", GF_LOG_CRITICAL,       \</div><div class='del'>-                                  "THIS is not initialised.");  \</div><div class='del'>-        THIS = xl;                                              \</div><div class='del'>-} while (0)</div><div class='add'>+#define RPC_THIS_SAVE(xl)                                                      \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        old_THIS = THIS;                                                       \</div><div class='add'>+        if (!old_THIS)                                                         \</div><div class='add'>+            gf_log_callingfn("rpc", GF_LOG_CRITICAL,                           \</div><div class='add'>+                             "THIS is not initialised.");                      \</div><div class='add'>+        THIS = xl;                                                             \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='del'>-#define RPC_THIS_RESTORE        (THIS = old_THIS)</div><div class='add'>+#define RPC_THIS_RESTORE (THIS = old_THIS)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rpc_clnt_handle_disconnect (struct rpc_clnt *clnt, rpc_clnt_connection_t *conn)</div><div class='add'>+rpc_clnt_handle_disconnect(struct rpc_clnt *clnt, rpc_clnt_connection_t *conn)</div><div class='ctx'> {</div><div class='del'>-        struct timespec ts             = {0, };</div><div class='del'>-        gf_boolean_t    unref_clnt     = _gf_false;</div><div class='del'>-        uint64_t        pre_notify_gen = 0, post_notify_gen = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                pre_notify_gen = conn-&gt;cleanup_gen;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (clnt-&gt;notifyfn)</div><div class='del'>-                clnt-&gt;notifyfn (clnt, clnt-&gt;mydata, RPC_CLNT_DISCONNECT, NULL);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                post_notify_gen = conn-&gt;cleanup_gen;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (pre_notify_gen == post_notify_gen) {</div><div class='del'>-                /* program didn't invoke cleanup, so rpc has to do it */</div><div class='del'>-                rpc_clnt_connection_cleanup (conn);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (!conn-&gt;rpc_clnt-&gt;disabled &amp;&amp; (conn-&gt;reconnect == NULL)) {</div><div class='del'>-                        ts.tv_sec = 10;</div><div class='del'>-                        ts.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-                        rpc_clnt_ref (clnt);</div><div class='del'>-                        conn-&gt;reconnect = gf_timer_call_after (clnt-&gt;ctx, ts,</div><div class='del'>-                                                rpc_clnt_reconnect, conn);</div><div class='del'>-                        if (conn-&gt;reconnect == NULL) {</div><div class='del'>-                                gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                "Cannot create rpc_clnt_reconnect timer");</div><div class='del'>-                                unref_clnt = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    struct timespec ts = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t unref_clnt = _gf_false;</div><div class='add'>+    uint64_t pre_notify_gen = 0, post_notify_gen = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        pre_notify_gen = conn-&gt;cleanup_gen;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (clnt-&gt;notifyfn)</div><div class='add'>+        clnt-&gt;notifyfn(clnt, clnt-&gt;mydata, RPC_CLNT_DISCONNECT, NULL);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        post_notify_gen = conn-&gt;cleanup_gen;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (pre_notify_gen == post_notify_gen) {</div><div class='add'>+        /* program didn't invoke cleanup, so rpc has to do it */</div><div class='add'>+        rpc_clnt_connection_cleanup(conn);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!conn-&gt;rpc_clnt-&gt;disabled &amp;&amp; (conn-&gt;reconnect == NULL)) {</div><div class='add'>+            ts.tv_sec = 10;</div><div class='add'>+            ts.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+            rpc_clnt_ref(clnt);</div><div class='add'>+            conn-&gt;reconnect = gf_timer_call_after(clnt-&gt;ctx, ts,</div><div class='add'>+                                                  rpc_clnt_reconnect, conn);</div><div class='add'>+            if (conn-&gt;reconnect == NULL) {</div><div class='add'>+                gf_log(conn-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Cannot create rpc_clnt_reconnect timer");</div><div class='add'>+                unref_clnt = _gf_true;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (unref_clnt)</div><div class='del'>-                rpc_clnt_unref (clnt);</div><div class='add'>+    if (unref_clnt)</div><div class='add'>+        rpc_clnt_unref(clnt);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_clnt_notify (rpc_transport_t *trans, void *mydata,</div><div class='del'>-                 rpc_transport_event_t event, void *data, ...)</div><div class='add'>+rpc_clnt_notify(rpc_transport_t *trans, void *mydata,</div><div class='add'>+                rpc_transport_event_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t  *conn        = NULL;</div><div class='del'>-        struct rpc_clnt        *clnt        = NULL;</div><div class='del'>-        int                     ret         = -1;</div><div class='del'>-        rpc_request_info_t     *req_info    = NULL;</div><div class='del'>-        rpc_transport_pollin_t *pollin      = NULL;</div><div class='del'>-        void                   *clnt_mydata = NULL;</div><div class='del'>-        DECLARE_OLD_THIS;</div><div class='del'>-</div><div class='del'>-        conn = mydata;</div><div class='del'>-        if (conn == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        clnt = conn-&gt;rpc_clnt;</div><div class='del'>-        if (!clnt)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        RPC_THIS_SAVE (clnt-&gt;owner);</div><div class='del'>-</div><div class='del'>-        switch (event) {</div><div class='del'>-        case RPC_TRANSPORT_DISCONNECT:</div><div class='del'>-        {</div><div class='del'>-                rpc_clnt_handle_disconnect (clnt, conn);</div><div class='del'>-                /* The auth_value was being reset to AUTH_GLUSTERFS_v2.</div><div class='del'>-                 *    if (clnt-&gt;auth_value)</div><div class='del'>-                 *           clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='del'>-                 * It should not be reset here. The disconnect during</div><div class='del'>-                 * portmap request can race with handshake. If handshake</div><div class='del'>-                 * happens first and disconnect later, auth_value would set</div><div class='del'>-                 * to default value and it never sets back to actual auth_value</div><div class='del'>-                 * supported by server. But it's important to set to lower</div><div class='del'>-                 * version supported in the case where the server downgrades.</div><div class='del'>-                 * So moving this code to RPC_TRANSPORT_CONNECT. Note that</div><div class='del'>-                 * CONNECT cannot race with handshake as by nature it is</div><div class='del'>-                 * serialized with handhake. An handshake can happen only</div><div class='del'>-                 * on a connected transport and hence its strictly serialized.</div><div class='del'>-                 */</div><div class='del'>-                break;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct rpc_clnt *clnt = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_request_info_t *req_info = NULL;</div><div class='add'>+    rpc_transport_pollin_t *pollin = NULL;</div><div class='add'>+    void *clnt_mydata = NULL;</div><div class='add'>+    DECLARE_OLD_THIS;</div><div class='add'>+</div><div class='add'>+    conn = mydata;</div><div class='add'>+    if (conn == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    clnt = conn-&gt;rpc_clnt;</div><div class='add'>+    if (!clnt)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    RPC_THIS_SAVE(clnt-&gt;owner);</div><div class='add'>+</div><div class='add'>+    switch (event) {</div><div class='add'>+        case RPC_TRANSPORT_DISCONNECT: {</div><div class='add'>+            rpc_clnt_handle_disconnect(clnt, conn);</div><div class='add'>+            /* The auth_value was being reset to AUTH_GLUSTERFS_v2.</div><div class='add'>+             *    if (clnt-&gt;auth_value)</div><div class='add'>+             *           clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='add'>+             * It should not be reset here. The disconnect during</div><div class='add'>+             * portmap request can race with handshake. If handshake</div><div class='add'>+             * happens first and disconnect later, auth_value would set</div><div class='add'>+             * to default value and it never sets back to actual auth_value</div><div class='add'>+             * supported by server. But it's important to set to lower</div><div class='add'>+             * version supported in the case where the server downgrades.</div><div class='add'>+             * So moving this code to RPC_TRANSPORT_CONNECT. Note that</div><div class='add'>+             * CONNECT cannot race with handshake as by nature it is</div><div class='add'>+             * serialized with handhake. An handshake can happen only</div><div class='add'>+             * on a connected transport and hence its strictly serialized.</div><div class='add'>+             */</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_CLEANUP:</div><div class='del'>-                if (clnt-&gt;notifyfn) {</div><div class='del'>-                        clnt_mydata = clnt-&gt;mydata;</div><div class='del'>-                        clnt-&gt;mydata = NULL;</div><div class='del'>-                        ret = clnt-&gt;notifyfn (clnt, clnt_mydata,</div><div class='del'>-                                              RPC_CLNT_DESTROY, NULL);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (trans-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "client notify handler returned error "</div><div class='del'>-                                        "while handling RPC_CLNT_DESTROY");</div><div class='del'>-                        }</div><div class='add'>+            if (clnt-&gt;notifyfn) {</div><div class='add'>+                clnt_mydata = clnt-&gt;mydata;</div><div class='add'>+                clnt-&gt;mydata = NULL;</div><div class='add'>+                ret = clnt-&gt;notifyfn(clnt, clnt_mydata, RPC_CLNT_DESTROY, NULL);</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_log(trans-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                           "client notify handler returned error "</div><div class='add'>+                           "while handling RPC_CLNT_DESTROY");</div><div class='ctx'>                 }</div><div class='del'>-                rpc_clnt_destroy (clnt);</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case RPC_TRANSPORT_MAP_XID_REQUEST:</div><div class='del'>-        {</div><div class='del'>-                req_info = data;</div><div class='del'>-                ret = rpc_clnt_fill_request_info (clnt, req_info);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        case RPC_TRANSPORT_MSG_RECEIVED:</div><div class='del'>-        {</div><div class='del'>-                clock_gettime (CLOCK_REALTIME, &amp;conn-&gt;last_received);</div><div class='del'>-</div><div class='del'>-                pollin = data;</div><div class='del'>-                if (pollin-&gt;is_reply)</div><div class='del'>-                        ret = rpc_clnt_handle_reply (clnt, pollin);</div><div class='del'>-                else</div><div class='del'>-                        ret = rpc_clnt_handle_cbk (clnt, pollin);</div><div class='del'>-                /* ret = clnt-&gt;notifyfn (clnt, clnt-&gt;mydata, RPC_CLNT_MSG,</div><div class='del'>-                 * data);</div><div class='del'>-                 */</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+            rpc_clnt_destroy(clnt);</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case RPC_TRANSPORT_MAP_XID_REQUEST: {</div><div class='add'>+            req_info = data;</div><div class='add'>+            ret = rpc_clnt_fill_request_info(clnt, req_info);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        case RPC_TRANSPORT_MSG_RECEIVED: {</div><div class='add'>+            clock_gettime(CLOCK_REALTIME, &amp;conn-&gt;last_received);</div><div class='add'>+</div><div class='add'>+            pollin = data;</div><div class='add'>+            if (pollin-&gt;is_reply)</div><div class='add'>+                ret = rpc_clnt_handle_reply(clnt, pollin);</div><div class='add'>+            else</div><div class='add'>+                ret = rpc_clnt_handle_cbk(clnt, pollin);</div><div class='add'>+            /* ret = clnt-&gt;notifyfn (clnt, clnt-&gt;mydata, RPC_CLNT_MSG,</div><div class='add'>+             * data);</div><div class='add'>+             */</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        case RPC_TRANSPORT_MSG_SENT: {</div><div class='add'>+            clock_gettime(CLOCK_REALTIME, &amp;conn-&gt;last_sent);</div><div class='add'>+</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        case RPC_TRANSPORT_CONNECT: {</div><div class='add'>+            pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                /* Every time there is a disconnection, processes</div><div class='add'>+                 * should try to connect to 'glusterd' (ie, default</div><div class='add'>+                 * port) or whichever port given as 'option remote-port'</div><div class='add'>+                 * in volume file. */</div><div class='add'>+                /* Below code makes sure the (re-)configured port lasts</div><div class='add'>+                 * for just one successful attempt */</div><div class='add'>+                conn-&gt;config.remote_port = 0;</div><div class='add'>+                conn-&gt;connected = 1;</div><div class='add'>+                conn-&gt;disconnected = 0;</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        case RPC_TRANSPORT_MSG_SENT:</div><div class='del'>-        {</div><div class='del'>-                clock_gettime (CLOCK_REALTIME, &amp;conn-&gt;last_sent);</div><div class='add'>+            /* auth value should be set to lower version available</div><div class='add'>+             * and will be set to appropriate version supported by</div><div class='add'>+             * server after the handshake.</div><div class='add'>+             */</div><div class='add'>+            if (clnt-&gt;auth_value)</div><div class='add'>+                clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='add'>+            if (clnt-&gt;notifyfn)</div><div class='add'>+                ret = clnt-&gt;notifyfn(clnt, clnt-&gt;mydata, RPC_CLNT_CONNECT,</div><div class='add'>+                                     NULL);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        case RPC_TRANSPORT_CONNECT:</div><div class='del'>-        {</div><div class='del'>-                pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        /* Every time there is a disconnection, processes</div><div class='del'>-                         * should try to connect to 'glusterd' (ie, default</div><div class='del'>-                         * port) or whichever port given as 'option remote-port'</div><div class='del'>-                         * in volume file. */</div><div class='del'>-                        /* Below code makes sure the (re-)configured port lasts</div><div class='del'>-                         * for just one successful attempt */</div><div class='del'>-                        conn-&gt;config.remote_port = 0;</div><div class='del'>-                        conn-&gt;connected = 1;</div><div class='del'>-                        conn-&gt;disconnected = 0;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-                /* auth value should be set to lower version available</div><div class='del'>-                 * and will be set to appropriate version supported by</div><div class='del'>-                 * server after the handshake.</div><div class='del'>-                 */</div><div class='del'>-                if (clnt-&gt;auth_value)</div><div class='del'>-                        clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='del'>-                if (clnt-&gt;notifyfn)</div><div class='del'>-                        ret = clnt-&gt;notifyfn (clnt, clnt-&gt;mydata,</div><div class='del'>-                                              RPC_CLNT_CONNECT, NULL);</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_ACCEPT:</div><div class='del'>-                /* only meaningful on a server, no need of handling this event</div><div class='del'>-                 * in a client.</div><div class='del'>-                 */</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            /* only meaningful on a server, no need of handling this event</div><div class='add'>+             * in a client.</div><div class='add'>+             */</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        RPC_THIS_RESTORE;</div><div class='del'>-        return ret;</div><div class='add'>+    RPC_THIS_RESTORE;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rpc_clnt_connection_init (struct rpc_clnt *clnt, glusterfs_ctx_t *ctx,</div><div class='del'>-                          dict_t *options, char *name)</div><div class='add'>+rpc_clnt_connection_init(struct rpc_clnt *clnt, glusterfs_ctx_t *ctx,</div><div class='add'>+                         dict_t *options, char *name)</div><div class='ctx'> {</div><div class='del'>-        int                    ret  = -1;</div><div class='del'>-        rpc_clnt_connection_t *conn = NULL;</div><div class='del'>-        rpc_transport_t       *trans = NULL;</div><div class='del'>-</div><div class='del'>-        conn = &amp;clnt-&gt;conn;</div><div class='del'>-        pthread_mutex_init (&amp;clnt-&gt;conn.lock, NULL);</div><div class='del'>-</div><div class='del'>-        conn-&gt;name = gf_strdup (name);</div><div class='del'>-        if (!conn-&gt;name) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (options, "frame-timeout",</div><div class='del'>-                              &amp;conn-&gt;frame_timeout);</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                gf_log (name, GF_LOG_INFO,</div><div class='del'>-                        "setting frame-timeout to %d", conn-&gt;frame_timeout);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (name, GF_LOG_DEBUG,</div><div class='del'>-                        "defaulting frame-timeout to 30mins");</div><div class='del'>-                conn-&gt;frame_timeout = 1800;</div><div class='del'>-        }</div><div class='del'>-        conn-&gt;rpc_clnt = clnt;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (options, "ping-timeout",</div><div class='del'>-                              &amp;conn-&gt;ping_timeout);</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                gf_log (name, GF_LOG_DEBUG,</div><div class='del'>-                        "setting ping-timeout to %d", conn-&gt;ping_timeout);</div><div class='del'>-        } else {</div><div class='del'>-                /*TODO: Once the epoll thread model is fixed,</div><div class='del'>-                  change the default ping-timeout to 30sec */</div><div class='del'>-                gf_log (name, GF_LOG_DEBUG,</div><div class='del'>-                        "disable ping-timeout");</div><div class='del'>-                conn-&gt;ping_timeout = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        trans = rpc_transport_load (ctx, options, name);</div><div class='del'>-        if (!trans) {</div><div class='del'>-                gf_log (name, GF_LOG_WARNING, "loading of new rpc-transport"</div><div class='del'>-                        " failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        rpc_transport_ref (trans);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                conn-&gt;trans = trans;</div><div class='del'>-                trans = NULL;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        ret = rpc_transport_register_notify (conn-&gt;trans, rpc_clnt_notify,</div><div class='del'>-                                             conn);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (name, GF_LOG_WARNING, "registering notify failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    conn = &amp;clnt-&gt;conn;</div><div class='add'>+    pthread_mutex_init(&amp;clnt-&gt;conn.lock, NULL);</div><div class='ctx'> </div><div class='del'>-        conn-&gt;saved_frames = saved_frames_new ();</div><div class='del'>-        if (!conn-&gt;saved_frames) {</div><div class='del'>-                gf_log (name, GF_LOG_WARNING, "creation of saved_frames "</div><div class='del'>-                        "failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    conn-&gt;name = gf_strdup(name);</div><div class='add'>+    if (!conn-&gt;name) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(options, "frame-timeout", &amp;conn-&gt;frame_timeout);</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        gf_log(name, GF_LOG_INFO, "setting frame-timeout to %d",</div><div class='add'>+               conn-&gt;frame_timeout);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(name, GF_LOG_DEBUG, "defaulting frame-timeout to 30mins");</div><div class='add'>+        conn-&gt;frame_timeout = 1800;</div><div class='add'>+    }</div><div class='add'>+    conn-&gt;rpc_clnt = clnt;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(options, "ping-timeout", &amp;conn-&gt;ping_timeout);</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        gf_log(name, GF_LOG_DEBUG, "setting ping-timeout to %d",</div><div class='add'>+               conn-&gt;ping_timeout);</div><div class='add'>+    } else {</div><div class='add'>+        /*TODO: Once the epoll thread model is fixed,</div><div class='add'>+          change the default ping-timeout to 30sec */</div><div class='add'>+        gf_log(name, GF_LOG_DEBUG, "disable ping-timeout");</div><div class='add'>+        conn-&gt;ping_timeout = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    trans = rpc_transport_load(ctx, options, name);</div><div class='add'>+    if (!trans) {</div><div class='add'>+        gf_log(name, GF_LOG_WARNING,</div><div class='add'>+               "loading of new rpc-transport"</div><div class='add'>+               " failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    rpc_transport_ref(trans);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        conn-&gt;trans = trans;</div><div class='add'>+        trans = NULL;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_register_notify(conn-&gt;trans, rpc_clnt_notify, conn);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(name, GF_LOG_WARNING, "registering notify failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conn-&gt;saved_frames = saved_frames_new();</div><div class='add'>+    if (!conn-&gt;saved_frames) {</div><div class='add'>+        gf_log(name, GF_LOG_WARNING,</div><div class='add'>+               "creation of saved_frames "</div><div class='add'>+               "failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        trans = conn-&gt;trans;</div><div class='del'>-                        conn-&gt;trans = NULL;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-                if (trans)</div><div class='del'>-                        rpc_transport_unref (trans);</div><div class='del'>-                //conn cleanup needs to be done since we might have failed to</div><div class='del'>-                // register notification.</div><div class='del'>-                rpc_clnt_connection_cleanup (conn);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            trans = conn-&gt;trans;</div><div class='add'>+            conn-&gt;trans = NULL;</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+        if (trans)</div><div class='add'>+            rpc_transport_unref(trans);</div><div class='add'>+        // conn cleanup needs to be done since we might have failed to</div><div class='add'>+        // register notification.</div><div class='add'>+        rpc_clnt_connection_cleanup(conn);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-rpc_clnt_new (dict_t *options, xlator_t *owner, char *name,</div><div class='del'>-              uint32_t reqpool_size)</div><div class='add'>+rpc_clnt_new(dict_t *options, xlator_t *owner, char *name,</div><div class='add'>+             uint32_t reqpool_size)</div><div class='ctx'> {</div><div class='del'>-        int                    ret  = -1;</div><div class='del'>-        struct rpc_clnt       *rpc  = NULL;</div><div class='del'>-        glusterfs_ctx_t       *ctx  = owner-&gt;ctx;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        rpc = GF_CALLOC (1, sizeof (*rpc), gf_common_mt_rpcclnt_t);</div><div class='del'>-        if (!rpc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_init (&amp;rpc-&gt;lock, NULL);</div><div class='del'>-        rpc-&gt;ctx = ctx;</div><div class='del'>-        rpc-&gt;owner = owner;</div><div class='del'>-        GF_ATOMIC_INIT (rpc-&gt;xid, 1);</div><div class='del'>-</div><div class='del'>-        if (!reqpool_size)</div><div class='del'>-                reqpool_size = RPC_CLNT_DEFAULT_REQUEST_COUNT;</div><div class='del'>-</div><div class='del'>-        rpc-&gt;reqpool = mem_pool_new (struct rpc_req, reqpool_size);</div><div class='del'>-        if (rpc-&gt;reqpool == NULL) {</div><div class='del'>-                pthread_mutex_destroy (&amp;rpc-&gt;lock);</div><div class='del'>-                GF_FREE (rpc);</div><div class='del'>-                rpc = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rpc-&gt;saved_frames_pool = mem_pool_new (struct saved_frame,</div><div class='del'>-                                               reqpool_size);</div><div class='del'>-        if (rpc-&gt;saved_frames_pool == NULL) {</div><div class='del'>-                pthread_mutex_destroy (&amp;rpc-&gt;lock);</div><div class='del'>-                mem_pool_destroy (rpc-&gt;reqpool);</div><div class='del'>-                GF_FREE (rpc);</div><div class='del'>-                rpc = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_connection_init (rpc, ctx, options, name);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                pthread_mutex_destroy (&amp;rpc-&gt;lock);</div><div class='del'>-                mem_pool_destroy (rpc-&gt;reqpool);</div><div class='del'>-                mem_pool_destroy (rpc-&gt;saved_frames_pool);</div><div class='del'>-                GF_FREE (rpc);</div><div class='del'>-                rpc = NULL;</div><div class='del'>-                if (options)</div><div class='del'>-                        dict_unref (options);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* This is handled to make sure we have modularity in getting the</div><div class='del'>-           auth data changed */</div><div class='del'>-        gf_boolean_t auth_null = dict_get_str_boolean(options, "auth-null", 0);</div><div class='del'>-</div><div class='del'>-        rpc-&gt;auth_value = (auth_null) ? 0 : AUTH_GLUSTERFS_v2;</div><div class='del'>-</div><div class='del'>-        rpc = rpc_clnt_ref (rpc);</div><div class='del'>-        INIT_LIST_HEAD (&amp;rpc-&gt;programs);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = owner-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    rpc = GF_CALLOC(1, sizeof(*rpc), gf_common_mt_rpcclnt_t);</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_init(&amp;rpc-&gt;lock, NULL);</div><div class='add'>+    rpc-&gt;ctx = ctx;</div><div class='add'>+    rpc-&gt;owner = owner;</div><div class='add'>+    GF_ATOMIC_INIT(rpc-&gt;xid, 1);</div><div class='add'>+</div><div class='add'>+    if (!reqpool_size)</div><div class='add'>+        reqpool_size = RPC_CLNT_DEFAULT_REQUEST_COUNT;</div><div class='add'>+</div><div class='add'>+    rpc-&gt;reqpool = mem_pool_new(struct rpc_req, reqpool_size);</div><div class='add'>+    if (rpc-&gt;reqpool == NULL) {</div><div class='add'>+        pthread_mutex_destroy(&amp;rpc-&gt;lock);</div><div class='add'>+        GF_FREE(rpc);</div><div class='add'>+        rpc = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc-&gt;saved_frames_pool = mem_pool_new(struct saved_frame, reqpool_size);</div><div class='add'>+    if (rpc-&gt;saved_frames_pool == NULL) {</div><div class='add'>+        pthread_mutex_destroy(&amp;rpc-&gt;lock);</div><div class='add'>+        mem_pool_destroy(rpc-&gt;reqpool);</div><div class='add'>+        GF_FREE(rpc);</div><div class='add'>+        rpc = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_connection_init(rpc, ctx, options, name);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        pthread_mutex_destroy(&amp;rpc-&gt;lock);</div><div class='add'>+        mem_pool_destroy(rpc-&gt;reqpool);</div><div class='add'>+        mem_pool_destroy(rpc-&gt;saved_frames_pool);</div><div class='add'>+        GF_FREE(rpc);</div><div class='add'>+        rpc = NULL;</div><div class='add'>+        if (options)</div><div class='add'>+            dict_unref(options);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is handled to make sure we have modularity in getting the</div><div class='add'>+       auth data changed */</div><div class='add'>+    gf_boolean_t auth_null = dict_get_str_boolean(options, "auth-null", 0);</div><div class='add'>+</div><div class='add'>+    rpc-&gt;auth_value = (auth_null) ? 0 : AUTH_GLUSTERFS_v2;</div><div class='add'>+</div><div class='add'>+    rpc = rpc_clnt_ref(rpc);</div><div class='add'>+    INIT_LIST_HEAD(&amp;rpc-&gt;programs);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return rpc;</div><div class='add'>+    return rpc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_start (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_start(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt_connection *conn = NULL;</div><div class='add'>+    struct rpc_clnt_connection *conn = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!rpc)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!rpc)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                rpc-&gt;disabled = 0;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-        /* Corresponding unref will be either on successful timer cancel or last</div><div class='del'>-         * rpc_clnt_reconnect fire event.</div><div class='del'>-         */</div><div class='del'>-        rpc_clnt_ref (rpc);</div><div class='del'>-        rpc_clnt_reconnect (conn);</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        rpc-&gt;disabled = 0;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+    /* Corresponding unref will be either on successful timer cancel or last</div><div class='add'>+     * rpc_clnt_reconnect fire event.</div><div class='add'>+     */</div><div class='add'>+    rpc_clnt_ref(rpc);</div><div class='add'>+    rpc_clnt_reconnect(conn);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_cleanup_and_start (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_cleanup_and_start(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_clnt_connection *conn = NULL;</div><div class='add'>+    struct rpc_clnt_connection *conn = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!rpc)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!rpc)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_connection_cleanup (conn);</div><div class='add'>+    rpc_clnt_connection_cleanup(conn);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                rpc-&gt;disabled = 0;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-        /* Corresponding unref will be either on successful timer cancel or last</div><div class='del'>-         * rpc_clnt_reconnect fire event.</div><div class='del'>-         */</div><div class='del'>-        rpc_clnt_ref (rpc);</div><div class='del'>-        rpc_clnt_reconnect (conn);</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        rpc-&gt;disabled = 0;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+    /* Corresponding unref will be either on successful timer cancel or last</div><div class='add'>+     * rpc_clnt_reconnect fire event.</div><div class='add'>+     */</div><div class='add'>+    rpc_clnt_ref(rpc);</div><div class='add'>+    rpc_clnt_reconnect(conn);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_register_notify (struct rpc_clnt *rpc, rpc_clnt_notify_t fn,</div><div class='del'>-                          void *mydata)</div><div class='add'>+rpc_clnt_register_notify(struct rpc_clnt *rpc, rpc_clnt_notify_t fn,</div><div class='add'>+                         void *mydata)</div><div class='ctx'> {</div><div class='del'>-        rpc-&gt;mydata = mydata;</div><div class='del'>-        rpc-&gt;notifyfn = fn;</div><div class='add'>+    rpc-&gt;mydata = mydata;</div><div class='add'>+    rpc-&gt;notifyfn = fn;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* used for GF_LOG_OCCASIONALLY() */</div><div class='ctx'> static int gf_auth_max_groups_log = 0;</div><div class='ctx'> </div><div class='ctx'> static inline int</div><div class='del'>-setup_glusterfs_auth_param_v3 (call_frame_t *frame,</div><div class='del'>-                               auth_glusterfs_params_v3 *au,</div><div class='del'>-                               int lk_owner_len, char *owner_data)</div><div class='add'>+setup_glusterfs_auth_param_v3(call_frame_t *frame, auth_glusterfs_params_v3 *au,</div><div class='add'>+                              int lk_owner_len, char *owner_data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        unsigned int max_groups = 0;</div><div class='del'>-        int max_lkowner_len = 0;</div><div class='del'>-</div><div class='del'>-        au-&gt;pid      = frame-&gt;root-&gt;pid;</div><div class='del'>-        au-&gt;uid      = frame-&gt;root-&gt;uid;</div><div class='del'>-        au-&gt;gid      = frame-&gt;root-&gt;gid;</div><div class='del'>-</div><div class='del'>-        au-&gt;flags = frame-&gt;root-&gt;flags;</div><div class='del'>-        au-&gt;ctime_sec = frame-&gt;root-&gt;ctime.tv_sec;</div><div class='del'>-        au-&gt;ctime_nsec = frame-&gt;root-&gt;ctime.tv_nsec;</div><div class='del'>-</div><div class='del'>-        au-&gt;lk_owner.lk_owner_val = owner_data;</div><div class='del'>-        au-&gt;lk_owner.lk_owner_len = lk_owner_len;</div><div class='del'>-        au-&gt;groups.groups_val = frame-&gt;root-&gt;groups;</div><div class='del'>-        au-&gt;groups.groups_len = frame-&gt;root-&gt;ngrps;</div><div class='del'>-</div><div class='del'>-        /* The number of groups and the size of lk_owner depend on oneother.</div><div class='del'>-         * We can truncate the groups, but should not touch the lk_owner. */</div><div class='del'>-        max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS (lk_owner_len, AUTH_GLUSTERFS_v3);</div><div class='del'>-        if (au-&gt;groups.groups_len &gt; max_groups) {</div><div class='del'>-                GF_LOG_OCCASIONALLY (gf_auth_max_groups_log, "rpc-auth",</div><div class='del'>-                                     GF_LOG_WARNING, "truncating grouplist "</div><div class='del'>-                                     "from %d to %d", au-&gt;groups.groups_len,</div><div class='del'>-                                     max_groups);</div><div class='del'>-</div><div class='del'>-                au-&gt;groups.groups_len = max_groups;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        max_lkowner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER (au-&gt;groups.groups_len,</div><div class='del'>-                                                         AUTH_GLUSTERFS_v3);</div><div class='del'>-        if (lk_owner_len &gt; max_lkowner_len) {</div><div class='del'>-                gf_log ("rpc-clnt", GF_LOG_ERROR, "lkowner field is too "</div><div class='del'>-                        "big (%d), it does not fit in the rpc-header",</div><div class='del'>-                        au-&gt;lk_owner.lk_owner_len);</div><div class='del'>-                errno = E2BIG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned int max_groups = 0;</div><div class='add'>+    int max_lkowner_len = 0;</div><div class='add'>+</div><div class='add'>+    au-&gt;pid = frame-&gt;root-&gt;pid;</div><div class='add'>+    au-&gt;uid = frame-&gt;root-&gt;uid;</div><div class='add'>+    au-&gt;gid = frame-&gt;root-&gt;gid;</div><div class='add'>+</div><div class='add'>+    au-&gt;flags = frame-&gt;root-&gt;flags;</div><div class='add'>+    au-&gt;ctime_sec = frame-&gt;root-&gt;ctime.tv_sec;</div><div class='add'>+    au-&gt;ctime_nsec = frame-&gt;root-&gt;ctime.tv_nsec;</div><div class='add'>+</div><div class='add'>+    au-&gt;lk_owner.lk_owner_val = owner_data;</div><div class='add'>+    au-&gt;lk_owner.lk_owner_len = lk_owner_len;</div><div class='add'>+    au-&gt;groups.groups_val = frame-&gt;root-&gt;groups;</div><div class='add'>+    au-&gt;groups.groups_len = frame-&gt;root-&gt;ngrps;</div><div class='add'>+</div><div class='add'>+    /* The number of groups and the size of lk_owner depend on oneother.</div><div class='add'>+     * We can truncate the groups, but should not touch the lk_owner. */</div><div class='add'>+    max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS(lk_owner_len, AUTH_GLUSTERFS_v3);</div><div class='add'>+    if (au-&gt;groups.groups_len &gt; max_groups) {</div><div class='add'>+        GF_LOG_OCCASIONALLY(gf_auth_max_groups_log, "rpc-auth", GF_LOG_WARNING,</div><div class='add'>+                            "truncating grouplist "</div><div class='add'>+                            "from %d to %d",</div><div class='add'>+                            au-&gt;groups.groups_len, max_groups);</div><div class='add'>+</div><div class='add'>+        au-&gt;groups.groups_len = max_groups;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    max_lkowner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER(au-&gt;groups.groups_len,</div><div class='add'>+                                                    AUTH_GLUSTERFS_v3);</div><div class='add'>+    if (lk_owner_len &gt; max_lkowner_len) {</div><div class='add'>+        gf_log("rpc-clnt", GF_LOG_ERROR,</div><div class='add'>+               "lkowner field is too "</div><div class='add'>+               "big (%d), it does not fit in the rpc-header",</div><div class='add'>+               au-&gt;lk_owner.lk_owner_len);</div><div class='add'>+        errno = E2BIG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static inline int</div><div class='del'>-setup_glusterfs_auth_param_v2 (call_frame_t *frame,</div><div class='del'>-                               auth_glusterfs_parms_v2 *au,</div><div class='del'>-                               int lk_owner_len, char *owner_data)</div><div class='add'>+setup_glusterfs_auth_param_v2(call_frame_t *frame, auth_glusterfs_parms_v2 *au,</div><div class='add'>+                              int lk_owner_len, char *owner_data)</div><div class='ctx'> {</div><div class='del'>-        unsigned int max_groups = 0;</div><div class='del'>-        int max_lkowner_len = 0;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        au-&gt;pid      = frame-&gt;root-&gt;pid;</div><div class='del'>-        au-&gt;uid      = frame-&gt;root-&gt;uid;</div><div class='del'>-        au-&gt;gid      = frame-&gt;root-&gt;gid;</div><div class='del'>-</div><div class='del'>-        au-&gt;lk_owner.lk_owner_val = owner_data;</div><div class='del'>-        au-&gt;lk_owner.lk_owner_len = lk_owner_len;</div><div class='del'>-        au-&gt;groups.groups_val = frame-&gt;root-&gt;groups;</div><div class='del'>-        au-&gt;groups.groups_len = frame-&gt;root-&gt;ngrps;</div><div class='del'>-</div><div class='del'>-        /* The number of groups and the size of lk_owner depend on oneother.</div><div class='del'>-         * We can truncate the groups, but should not touch the lk_owner. */</div><div class='del'>-        max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS (lk_owner_len, AUTH_GLUSTERFS_v2);</div><div class='del'>-        if (au-&gt;groups.groups_len &gt; max_groups) {</div><div class='del'>-                GF_LOG_OCCASIONALLY (gf_auth_max_groups_log, "rpc-auth",</div><div class='del'>-                                     GF_LOG_WARNING, "truncating grouplist "</div><div class='del'>-                                     "from %d to %d", au-&gt;groups.groups_len,</div><div class='del'>-                                     max_groups);</div><div class='del'>-</div><div class='del'>-                au-&gt;groups.groups_len = max_groups;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        max_lkowner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER (au-&gt;groups.groups_len,</div><div class='del'>-                                                         AUTH_GLUSTERFS_v2);</div><div class='del'>-        if (lk_owner_len &gt; max_lkowner_len) {</div><div class='del'>-                gf_log ("rpc-auth", GF_LOG_ERROR, "lkowner field is too "</div><div class='del'>-                        "big (%d), it does not fit in the rpc-header",</div><div class='del'>-                        au-&gt;lk_owner.lk_owner_len);</div><div class='del'>-                errno = E2BIG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    unsigned int max_groups = 0;</div><div class='add'>+    int max_lkowner_len = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    au-&gt;pid = frame-&gt;root-&gt;pid;</div><div class='add'>+    au-&gt;uid = frame-&gt;root-&gt;uid;</div><div class='add'>+    au-&gt;gid = frame-&gt;root-&gt;gid;</div><div class='add'>+</div><div class='add'>+    au-&gt;lk_owner.lk_owner_val = owner_data;</div><div class='add'>+    au-&gt;lk_owner.lk_owner_len = lk_owner_len;</div><div class='add'>+    au-&gt;groups.groups_val = frame-&gt;root-&gt;groups;</div><div class='add'>+    au-&gt;groups.groups_len = frame-&gt;root-&gt;ngrps;</div><div class='add'>+</div><div class='add'>+    /* The number of groups and the size of lk_owner depend on oneother.</div><div class='add'>+     * We can truncate the groups, but should not touch the lk_owner. */</div><div class='add'>+    max_groups = GF_AUTH_GLUSTERFS_MAX_GROUPS(lk_owner_len, AUTH_GLUSTERFS_v2);</div><div class='add'>+    if (au-&gt;groups.groups_len &gt; max_groups) {</div><div class='add'>+        GF_LOG_OCCASIONALLY(gf_auth_max_groups_log, "rpc-auth", GF_LOG_WARNING,</div><div class='add'>+                            "truncating grouplist "</div><div class='add'>+                            "from %d to %d",</div><div class='add'>+                            au-&gt;groups.groups_len, max_groups);</div><div class='add'>+</div><div class='add'>+        au-&gt;groups.groups_len = max_groups;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    max_lkowner_len = GF_AUTH_GLUSTERFS_MAX_LKOWNER(au-&gt;groups.groups_len,</div><div class='add'>+                                                    AUTH_GLUSTERFS_v2);</div><div class='add'>+    if (lk_owner_len &gt; max_lkowner_len) {</div><div class='add'>+        gf_log("rpc-auth", GF_LOG_ERROR,</div><div class='add'>+               "lkowner field is too "</div><div class='add'>+               "big (%d), it does not fit in the rpc-header",</div><div class='add'>+               au-&gt;lk_owner.lk_owner_len);</div><div class='add'>+        errno = E2BIG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static ssize_t</div><div class='del'>-xdr_serialize_glusterfs_auth (struct rpc_clnt *clnt, call_frame_t *frame,</div><div class='del'>-                              char *dest)</div><div class='add'>+xdr_serialize_glusterfs_auth(struct rpc_clnt *clnt, call_frame_t *frame,</div><div class='add'>+                             char *dest)</div><div class='ctx'> {</div><div class='del'>-        ssize_t ret = -1;</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        char    owner[4] = {0,};</div><div class='del'>-        int32_t pid = 0;</div><div class='del'>-        char   *lk_owner_data = NULL;</div><div class='del'>-        int     lk_owner_len = 0;</div><div class='del'>-</div><div class='del'>-        if ((!dest))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        xdrmem_create (&amp;xdr, dest, GF_MAX_AUTH_BYTES, XDR_ENCODE);</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;lk_owner.len) {</div><div class='del'>-                lk_owner_data = frame-&gt;root-&gt;lk_owner.data;</div><div class='del'>-                lk_owner_len = frame-&gt;root-&gt;lk_owner.len;</div><div class='del'>-        } else {</div><div class='del'>-                pid = frame-&gt;root-&gt;pid;</div><div class='del'>-                owner[0] = (char)(pid &amp; 0xff);</div><div class='del'>-                owner[1] = (char)((pid &gt;&gt; 8) &amp; 0xff);</div><div class='del'>-                owner[2] = (char)((pid &gt;&gt; 16) &amp; 0xff);</div><div class='del'>-                owner[3] = (char)((pid &gt;&gt; 24) &amp; 0xff);</div><div class='del'>-</div><div class='del'>-                lk_owner_data = owner;</div><div class='del'>-                lk_owner_len = 4;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (clnt-&gt;auth_value == AUTH_GLUSTERFS_v2) {</div><div class='del'>-                auth_glusterfs_parms_v2 au_v2 = {0,};</div><div class='del'>-</div><div class='del'>-                ret = setup_glusterfs_auth_param_v2 (frame, &amp;au_v2,</div><div class='del'>-                                                     lk_owner_len,</div><div class='del'>-                                                     lk_owner_data);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (!xdr_auth_glusterfs_parms_v2 (&amp;xdr, &amp;au_v2)) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to encode auth glusterfs elements");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (clnt-&gt;auth_value == AUTH_GLUSTERFS_v3) {</div><div class='del'>-                auth_glusterfs_params_v3 au_v3 = {0,};</div><div class='del'>-</div><div class='del'>-                ret = setup_glusterfs_auth_param_v3 (frame, &amp;au_v3,</div><div class='del'>-                                                     lk_owner_len,</div><div class='del'>-                                                     lk_owner_data);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (!xdr_auth_glusterfs_params_v3 (&amp;xdr, &amp;au_v3)) {</div><div class='del'>-                        gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to encode auth glusterfs elements");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to encode auth glusterfs elements");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    char owner[4] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t pid = 0;</div><div class='add'>+    char *lk_owner_data = NULL;</div><div class='add'>+    int lk_owner_len = 0;</div><div class='add'>+</div><div class='add'>+    if ((!dest))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    xdrmem_create(&amp;xdr, dest, GF_MAX_AUTH_BYTES, XDR_ENCODE);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;lk_owner.len) {</div><div class='add'>+        lk_owner_data = frame-&gt;root-&gt;lk_owner.data;</div><div class='add'>+        lk_owner_len = frame-&gt;root-&gt;lk_owner.len;</div><div class='add'>+    } else {</div><div class='add'>+        pid = frame-&gt;root-&gt;pid;</div><div class='add'>+        owner[0] = (char)(pid &amp; 0xff);</div><div class='add'>+        owner[1] = (char)((pid &gt;&gt; 8) &amp; 0xff);</div><div class='add'>+        owner[2] = (char)((pid &gt;&gt; 16) &amp; 0xff);</div><div class='add'>+        owner[3] = (char)((pid &gt;&gt; 24) &amp; 0xff);</div><div class='add'>+</div><div class='add'>+        lk_owner_data = owner;</div><div class='add'>+        lk_owner_len = 4;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (clnt-&gt;auth_value == AUTH_GLUSTERFS_v2) {</div><div class='add'>+        auth_glusterfs_parms_v2 au_v2 = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        ret = setup_glusterfs_auth_param_v2(frame, &amp;au_v2, lk_owner_len,</div><div class='add'>+                                            lk_owner_data);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        if (!xdr_auth_glusterfs_parms_v2(&amp;xdr, &amp;au_v2)) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "failed to encode auth glusterfs elements");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (clnt-&gt;auth_value == AUTH_GLUSTERFS_v3) {</div><div class='add'>+        auth_glusterfs_params_v3 au_v3 = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        ret = setup_glusterfs_auth_param_v3(frame, &amp;au_v3, lk_owner_len,</div><div class='add'>+                                            lk_owner_data);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if (!xdr_auth_glusterfs_params_v3(&amp;xdr, &amp;au_v3)) {</div><div class='add'>+            gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "failed to encode auth glusterfs elements");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to encode auth glusterfs elements");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='add'>+    ret = (((size_t)(&amp;xdr)-&gt;x_private) - ((size_t)(&amp;xdr)-&gt;x_base));</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_fill_request (struct rpc_clnt *clnt, int prognum, int progver,</div><div class='del'>-                       int procnum, uint64_t xid, call_frame_t *fr,</div><div class='del'>-                       struct rpc_msg *request, char *auth_data)</div><div class='add'>+rpc_clnt_fill_request(struct rpc_clnt *clnt, int prognum, int progver,</div><div class='add'>+                      int procnum, uint64_t xid, call_frame_t *fr,</div><div class='add'>+                      struct rpc_msg *request, char *auth_data)</div><div class='ctx'> {</div><div class='del'>-        int   ret          = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!request) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!request) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (request, 0, sizeof (*request));</div><div class='add'>+    memset(request, 0, sizeof(*request));</div><div class='ctx'> </div><div class='del'>-        request-&gt;rm_xid = xid;</div><div class='del'>-        request-&gt;rm_direction = CALL;</div><div class='add'>+    request-&gt;rm_xid = xid;</div><div class='add'>+    request-&gt;rm_direction = CALL;</div><div class='ctx'> </div><div class='del'>-        request-&gt;rm_call.cb_rpcvers = 2;</div><div class='del'>-        request-&gt;rm_call.cb_prog = prognum;</div><div class='del'>-        request-&gt;rm_call.cb_vers = progver;</div><div class='del'>-        request-&gt;rm_call.cb_proc = procnum;</div><div class='add'>+    request-&gt;rm_call.cb_rpcvers = 2;</div><div class='add'>+    request-&gt;rm_call.cb_prog = prognum;</div><div class='add'>+    request-&gt;rm_call.cb_vers = progver;</div><div class='add'>+    request-&gt;rm_call.cb_proc = procnum;</div><div class='ctx'> </div><div class='del'>-        if (!clnt-&gt;auth_value) {</div><div class='del'>-                request-&gt;rm_call.cb_cred.oa_flavor = AUTH_NULL;</div><div class='del'>-                request-&gt;rm_call.cb_cred.oa_base   = NULL;</div><div class='del'>-                request-&gt;rm_call.cb_cred.oa_length = 0;</div><div class='del'>-        } else {</div><div class='del'>-                ret = xdr_serialize_glusterfs_auth (clnt, fr, auth_data);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log ("rpc-clnt", GF_LOG_WARNING,</div><div class='del'>-                                "cannot encode auth credentials");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                request-&gt;rm_call.cb_cred.oa_flavor = clnt-&gt;auth_value;</div><div class='del'>-                request-&gt;rm_call.cb_cred.oa_base   = auth_data;</div><div class='del'>-                request-&gt;rm_call.cb_cred.oa_length = ret;</div><div class='add'>+    if (!clnt-&gt;auth_value) {</div><div class='add'>+        request-&gt;rm_call.cb_cred.oa_flavor = AUTH_NULL;</div><div class='add'>+        request-&gt;rm_call.cb_cred.oa_base = NULL;</div><div class='add'>+        request-&gt;rm_call.cb_cred.oa_length = 0;</div><div class='add'>+    } else {</div><div class='add'>+        ret = xdr_serialize_glusterfs_auth(clnt, fr, auth_data);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log("rpc-clnt", GF_LOG_WARNING,</div><div class='add'>+                   "cannot encode auth credentials");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        request-&gt;rm_call.cb_verf.oa_flavor = AUTH_NONE;</div><div class='del'>-        request-&gt;rm_call.cb_verf.oa_base = NULL;</div><div class='del'>-        request-&gt;rm_call.cb_verf.oa_length = 0;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        request-&gt;rm_call.cb_cred.oa_flavor = clnt-&gt;auth_value;</div><div class='add'>+        request-&gt;rm_call.cb_cred.oa_base = auth_data;</div><div class='add'>+        request-&gt;rm_call.cb_cred.oa_length = ret;</div><div class='add'>+    }</div><div class='add'>+    request-&gt;rm_call.cb_verf.oa_flavor = AUTH_NONE;</div><div class='add'>+    request-&gt;rm_call.cb_verf.oa_base = NULL;</div><div class='add'>+    request-&gt;rm_call.cb_verf.oa_length = 0;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iovec</div><div class='del'>-rpc_clnt_record_build_header (char *recordstart, size_t rlen,</div><div class='del'>-                              struct rpc_msg *request, size_t payload)</div><div class='add'>+rpc_clnt_record_build_header(char *recordstart, size_t rlen,</div><div class='add'>+                             struct rpc_msg *request, size_t payload)</div><div class='ctx'> {</div><div class='del'>-        struct iovec    requesthdr = {0, };</div><div class='del'>-        struct iovec    txrecord   = {0, 0};</div><div class='del'>-        int             ret        = -1;</div><div class='del'>-        size_t          fraglen    = 0;</div><div class='del'>-</div><div class='del'>-        ret = rpc_request_to_xdr (request, recordstart, rlen, &amp;requesthdr);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("rpc-clnt", GF_LOG_DEBUG,</div><div class='del'>-                        "Failed to create RPC request");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fraglen = payload + requesthdr.iov_len;</div><div class='del'>-        gf_log ("rpc-clnt", GF_LOG_TRACE, "Request fraglen %zu, payload: %zu, "</div><div class='del'>-                "rpc hdr: %zu", fraglen, payload, requesthdr.iov_len);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        txrecord.iov_base = recordstart;</div><div class='del'>-</div><div class='del'>-        /* Remember, this is only the vec for the RPC header and does not</div><div class='del'>-         * include the payload above. We needed the payload only to calculate</div><div class='del'>-         * the size of the full fragment. This size is sent in the fragment</div><div class='del'>-         * header.</div><div class='del'>-         */</div><div class='del'>-        txrecord.iov_len = requesthdr.iov_len;</div><div class='add'>+    struct iovec requesthdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec txrecord = {0, 0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t fraglen = 0;</div><div class='add'>+</div><div class='add'>+    ret = rpc_request_to_xdr(request, recordstart, rlen, &amp;requesthdr);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("rpc-clnt", GF_LOG_DEBUG, "Failed to create RPC request");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fraglen = payload + requesthdr.iov_len;</div><div class='add'>+    gf_log("rpc-clnt", GF_LOG_TRACE,</div><div class='add'>+           "Request fraglen %zu, payload: %zu, "</div><div class='add'>+           "rpc hdr: %zu",</div><div class='add'>+           fraglen, payload, requesthdr.iov_len);</div><div class='add'>+</div><div class='add'>+    txrecord.iov_base = recordstart;</div><div class='add'>+</div><div class='add'>+    /* Remember, this is only the vec for the RPC header and does not</div><div class='add'>+     * include the payload above. We needed the payload only to calculate</div><div class='add'>+     * the size of the full fragment. This size is sent in the fragment</div><div class='add'>+     * header.</div><div class='add'>+     */</div><div class='add'>+    txrecord.iov_len = requesthdr.iov_len;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return txrecord;</div><div class='add'>+    return txrecord;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iobuf *</div><div class='del'>-rpc_clnt_record_build_record (struct rpc_clnt *clnt, call_frame_t *fr,</div><div class='del'>-                              int prognum, int progver,</div><div class='del'>-                              int procnum, size_t hdrsize, uint64_t xid,</div><div class='del'>-                              struct iovec *recbuf)</div><div class='add'>+rpc_clnt_record_build_record(struct rpc_clnt *clnt, call_frame_t *fr,</div><div class='add'>+                             int prognum, int progver, int procnum,</div><div class='add'>+                             size_t hdrsize, uint64_t xid, struct iovec *recbuf)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_msg  request                      = {0, };</div><div class='del'>-        struct iobuf   *request_iob                  = NULL;</div><div class='del'>-        char           *record                       = NULL;</div><div class='del'>-        struct iovec    recordhdr                    = {0, };</div><div class='del'>-        size_t          pagesize                     = 0;</div><div class='del'>-        int             ret                          = -1;</div><div class='del'>-        size_t          xdr_size                     = 0;</div><div class='del'>-        char            auth_data[GF_MAX_AUTH_BYTES] = {0, };</div><div class='del'>-</div><div class='del'>-        if ((!clnt) || (!recbuf)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Fill the rpc structure and XDR it into the buffer got above. */</div><div class='del'>-        ret = rpc_clnt_fill_request (clnt, prognum, progver, procnum,</div><div class='del'>-                                     xid, fr, &amp;request, auth_data);</div><div class='del'>-</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (clnt-&gt;conn.name, GF_LOG_WARNING,</div><div class='del'>-                        "cannot build a rpc-request xid (%"PRIu64")", xid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xdr_size = xdr_sizeof ((xdrproc_t)xdr_callmsg, &amp;request);</div><div class='del'>-</div><div class='del'>-        /* First, try to get a pointer into the buffer which the RPC</div><div class='del'>-         * layer can use.</div><div class='del'>-         */</div><div class='del'>-        request_iob = iobuf_get2 (clnt-&gt;ctx-&gt;iobuf_pool, (xdr_size + hdrsize));</div><div class='del'>-        if (!request_iob) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pagesize = iobuf_pagesize (request_iob);</div><div class='del'>-</div><div class='del'>-        record = iobuf_ptr (request_iob);  /* Now we have it. */</div><div class='del'>-</div><div class='del'>-        recordhdr = rpc_clnt_record_build_header (record, pagesize, &amp;request,</div><div class='del'>-                                                  hdrsize);</div><div class='del'>-</div><div class='del'>-        if (!recordhdr.iov_base) {</div><div class='del'>-                gf_log (clnt-&gt;conn.name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to build record header");</div><div class='del'>-                iobuf_unref (request_iob);</div><div class='del'>-                request_iob = NULL;</div><div class='del'>-                recbuf-&gt;iov_base = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        recbuf-&gt;iov_base = recordhdr.iov_base;</div><div class='del'>-        recbuf-&gt;iov_len = recordhdr.iov_len;</div><div class='add'>+    struct rpc_msg request = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *request_iob = NULL;</div><div class='add'>+    char *record = NULL;</div><div class='add'>+    struct iovec recordhdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t pagesize = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t xdr_size = 0;</div><div class='add'>+    char auth_data[GF_MAX_AUTH_BYTES] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if ((!clnt) || (!recbuf)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Fill the rpc structure and XDR it into the buffer got above. */</div><div class='add'>+    ret = rpc_clnt_fill_request(clnt, prognum, progver, procnum, xid, fr,</div><div class='add'>+                                &amp;request, auth_data);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(clnt-&gt;conn.name, GF_LOG_WARNING,</div><div class='add'>+               "cannot build a rpc-request xid (%" PRIu64 ")", xid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdr_size = xdr_sizeof((xdrproc_t)xdr_callmsg, &amp;request);</div><div class='add'>+</div><div class='add'>+    /* First, try to get a pointer into the buffer which the RPC</div><div class='add'>+     * layer can use.</div><div class='add'>+     */</div><div class='add'>+    request_iob = iobuf_get2(clnt-&gt;ctx-&gt;iobuf_pool, (xdr_size + hdrsize));</div><div class='add'>+    if (!request_iob) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pagesize = iobuf_pagesize(request_iob);</div><div class='add'>+</div><div class='add'>+    record = iobuf_ptr(request_iob); /* Now we have it. */</div><div class='add'>+</div><div class='add'>+    recordhdr = rpc_clnt_record_build_header(record, pagesize, &amp;request,</div><div class='add'>+                                             hdrsize);</div><div class='add'>+</div><div class='add'>+    if (!recordhdr.iov_base) {</div><div class='add'>+        gf_log(clnt-&gt;conn.name, GF_LOG_ERROR, "Failed to build record header");</div><div class='add'>+        iobuf_unref(request_iob);</div><div class='add'>+        request_iob = NULL;</div><div class='add'>+        recbuf-&gt;iov_base = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    recbuf-&gt;iov_base = recordhdr.iov_base;</div><div class='add'>+    recbuf-&gt;iov_len = recordhdr.iov_len;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return request_iob;</div><div class='add'>+    return request_iob;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inline struct iobuf *</div><div class='del'>-rpc_clnt_record (struct rpc_clnt *clnt, call_frame_t *call_frame,</div><div class='del'>-                 rpc_clnt_prog_t *prog, int procnum, size_t hdrlen,</div><div class='del'>-                 struct iovec *rpchdr, uint64_t callid)</div><div class='add'>+rpc_clnt_record(struct rpc_clnt *clnt, call_frame_t *call_frame,</div><div class='add'>+                rpc_clnt_prog_t *prog, int procnum, size_t hdrlen,</div><div class='add'>+                struct iovec *rpchdr, uint64_t callid)</div><div class='ctx'> {</div><div class='add'>+    if (!prog || !rpchdr || !call_frame) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!prog || !rpchdr || !call_frame) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return rpc_clnt_record_build_record (clnt, call_frame,</div><div class='del'>-                                             prog-&gt;prognum,</div><div class='del'>-                                             prog-&gt;progver,</div><div class='del'>-                                             procnum, hdrlen,</div><div class='del'>-                                             callid, rpchdr);</div><div class='add'>+    return rpc_clnt_record_build_record(clnt, call_frame, prog-&gt;prognum,</div><div class='add'>+                                        prog-&gt;progver, procnum, hdrlen, callid,</div><div class='add'>+                                        rpchdr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcclnt_cbk_program_register (struct rpc_clnt *clnt,</div><div class='del'>-                              rpcclnt_cb_program_t *program, void *mydata)</div><div class='add'>+rpcclnt_cbk_program_register(struct rpc_clnt *clnt,</div><div class='add'>+                             rpcclnt_cb_program_t *program, void *mydata)</div><div class='ctx'> {</div><div class='del'>-        int                   ret                = -1;</div><div class='del'>-        char                  already_registered = 0;</div><div class='del'>-        rpcclnt_cb_program_t *tmp                = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char already_registered = 0;</div><div class='add'>+    rpcclnt_cb_program_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!clnt)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!clnt)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (program-&gt;actors == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (program-&gt;actors == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;clnt-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;clnt-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(tmp, &amp;clnt-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (tmp, &amp;clnt-&gt;programs, program) {</div><div class='del'>-                        if ((program-&gt;prognum == tmp-&gt;prognum)</div><div class='del'>-                            &amp;&amp; (program-&gt;progver == tmp-&gt;progver)) {</div><div class='del'>-                                already_registered = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if ((program-&gt;prognum == tmp-&gt;prognum) &amp;&amp;</div><div class='add'>+                (program-&gt;progver == tmp-&gt;progver)) {</div><div class='add'>+                already_registered = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;clnt-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;clnt-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (already_registered) {</div><div class='del'>-                gf_log_callingfn (clnt-&gt;conn.name, GF_LOG_DEBUG,</div><div class='del'>-                                  "already registered");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (already_registered) {</div><div class='add'>+        gf_log_callingfn(clnt-&gt;conn.name, GF_LOG_DEBUG, "already registered");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp = GF_MALLOC (sizeof (*tmp),</div><div class='del'>-                         gf_common_mt_rpcclnt_cb_program_t);</div><div class='del'>-        if (tmp == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    tmp = GF_MALLOC(sizeof(*tmp), gf_common_mt_rpcclnt_cb_program_t);</div><div class='add'>+    if (tmp == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (tmp, program, sizeof (*tmp));</div><div class='del'>-        INIT_LIST_HEAD (&amp;tmp-&gt;program);</div><div class='add'>+    memcpy(tmp, program, sizeof(*tmp));</div><div class='add'>+    INIT_LIST_HEAD(&amp;tmp-&gt;program);</div><div class='ctx'> </div><div class='del'>-        tmp-&gt;mydata = mydata;</div><div class='add'>+    tmp-&gt;mydata = mydata;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;clnt-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;tmp-&gt;program, &amp;clnt-&gt;programs);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;clnt-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;clnt-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;tmp-&gt;program, &amp;clnt-&gt;programs);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;clnt-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        gf_log (clnt-&gt;conn.name, GF_LOG_DEBUG,</div><div class='del'>-                "New program registered: %s, Num: %d, Ver: %d",</div><div class='del'>-                program-&gt;progname, program-&gt;prognum,</div><div class='del'>-                program-&gt;progver);</div><div class='add'>+    ret = 0;</div><div class='add'>+    gf_log(clnt-&gt;conn.name, GF_LOG_DEBUG,</div><div class='add'>+           "New program registered: %s, Num: %d, Ver: %d", program-&gt;progname,</div><div class='add'>+           program-&gt;prognum, program-&gt;progver);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1 &amp;&amp; clnt) {</div><div class='del'>-                        gf_log (clnt-&gt;conn.name, GF_LOG_ERROR,</div><div class='del'>-                                        "Program registration failed:"</div><div class='del'>-                                        " %s, Num: %d, Ver: %d",</div><div class='del'>-                                        program-&gt;progname,</div><div class='del'>-                                        program-&gt;prognum, program-&gt;progver);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == -1 &amp;&amp; clnt) {</div><div class='add'>+        gf_log(clnt-&gt;conn.name, GF_LOG_ERROR,</div><div class='add'>+               "Program registration failed:"</div><div class='add'>+               " %s, Num: %d, Ver: %d",</div><div class='add'>+               program-&gt;progname, program-&gt;prognum, program-&gt;progver);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_clnt_submit (struct rpc_clnt *rpc, rpc_clnt_prog_t *prog,</div><div class='del'>-                 int procnum, fop_cbk_fn_t cbkfn,</div><div class='del'>-                 struct iovec *proghdr, int proghdrcount,</div><div class='del'>-                 struct iovec *progpayload, int progpayloadcount,</div><div class='del'>-                 struct iobref *iobref, void *frame, struct iovec *rsphdr,</div><div class='del'>-                 int rsphdr_count, struct iovec *rsp_payload,</div><div class='del'>-                 int rsp_payload_count, struct iobref *rsp_iobref)</div><div class='add'>+rpc_clnt_submit(struct rpc_clnt *rpc, rpc_clnt_prog_t *prog, int procnum,</div><div class='add'>+                fop_cbk_fn_t cbkfn, struct iovec *proghdr, int proghdrcount,</div><div class='add'>+                struct iovec *progpayload, int progpayloadcount,</div><div class='add'>+                struct iobref *iobref, void *frame, struct iovec *rsphdr,</div><div class='add'>+                int rsphdr_count, struct iovec *rsp_payload,</div><div class='add'>+                int rsp_payload_count, struct iobref *rsp_iobref)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn        = NULL;</div><div class='del'>-        struct iobuf          *request_iob = NULL;</div><div class='del'>-        struct iovec           rpchdr      = {0,};</div><div class='del'>-        struct rpc_req        *rpcreq      = NULL;</div><div class='del'>-        rpc_transport_req_t    req;</div><div class='del'>-        int                    ret         = -1;</div><div class='del'>-        int                    proglen     = 0;</div><div class='del'>-        char                   new_iobref  = 0;</div><div class='del'>-        uint64_t               callid      = 0;</div><div class='del'>-        gf_boolean_t           need_unref  = _gf_false;</div><div class='del'>-        call_frame_t          *cframe      = frame;</div><div class='del'>-</div><div class='del'>-        if (!rpc || !prog || !frame) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-</div><div class='del'>-        rpcreq = mem_get (rpc-&gt;reqpool);</div><div class='del'>-        if (rpcreq == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset (rpcreq, 0, sizeof (*rpcreq));</div><div class='del'>-        memset (&amp;req, 0, sizeof (req));</div><div class='del'>-</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    struct iobuf *request_iob = NULL;</div><div class='add'>+    struct iovec rpchdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct rpc_req *rpcreq = NULL;</div><div class='add'>+    rpc_transport_req_t req;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int proglen = 0;</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+    uint64_t callid = 0;</div><div class='add'>+    gf_boolean_t need_unref = _gf_false;</div><div class='add'>+    call_frame_t *cframe = frame;</div><div class='add'>+</div><div class='add'>+    if (!rpc || !prog || !frame) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+</div><div class='add'>+    rpcreq = mem_get(rpc-&gt;reqpool);</div><div class='add'>+    if (rpcreq == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(rpcreq, 0, sizeof(*rpcreq));</div><div class='add'>+    memset(&amp;req, 0, sizeof(req));</div><div class='add'>+</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        iobref = iobref_new();</div><div class='ctx'>         if (!iobref) {</div><div class='del'>-                iobref = iobref_new ();</div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                new_iobref = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        callid = GF_ATOMIC_INC (rpc-&gt;xid);</div><div class='del'>-</div><div class='del'>-        rpcreq-&gt;prog = prog;</div><div class='del'>-        rpcreq-&gt;procnum = procnum;</div><div class='del'>-        rpcreq-&gt;conn = conn;</div><div class='del'>-        rpcreq-&gt;xid = callid;</div><div class='del'>-        rpcreq-&gt;cbkfn = cbkfn;</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-</div><div class='del'>-        if (proghdr) {</div><div class='del'>-                proglen += iov_length (proghdr, proghdrcount);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        new_iobref = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    callid = GF_ATOMIC_INC(rpc-&gt;xid);</div><div class='add'>+</div><div class='add'>+    rpcreq-&gt;prog = prog;</div><div class='add'>+    rpcreq-&gt;procnum = procnum;</div><div class='add'>+    rpcreq-&gt;conn = conn;</div><div class='add'>+    rpcreq-&gt;xid = callid;</div><div class='add'>+    rpcreq-&gt;cbkfn = cbkfn;</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+</div><div class='add'>+    if (proghdr) {</div><div class='add'>+        proglen += iov_length(proghdr, proghdrcount);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    request_iob = rpc_clnt_record(rpc, frame, prog, procnum, proglen, &amp;rpchdr,</div><div class='add'>+                                  callid);</div><div class='add'>+    if (!request_iob) {</div><div class='add'>+        gf_log(conn-&gt;name, GF_LOG_WARNING, "cannot build rpc-record");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iobref_add(iobref, request_iob);</div><div class='add'>+</div><div class='add'>+    req.msg.rpchdr = &amp;rpchdr;</div><div class='add'>+    req.msg.rpchdrcount = 1;</div><div class='add'>+    req.msg.proghdr = proghdr;</div><div class='add'>+    req.msg.proghdrcount = proghdrcount;</div><div class='add'>+    req.msg.progpayload = progpayload;</div><div class='add'>+    req.msg.progpayloadcount = progpayloadcount;</div><div class='add'>+    req.msg.iobref = iobref;</div><div class='add'>+</div><div class='add'>+    req.rsp.rsphdr = rsphdr;</div><div class='add'>+    req.rsp.rsphdr_count = rsphdr_count;</div><div class='add'>+    req.rsp.rsp_payload = rsp_payload;</div><div class='add'>+    req.rsp.rsp_payload_count = rsp_payload_count;</div><div class='add'>+    req.rsp.rsp_iobref = rsp_iobref;</div><div class='add'>+    req.rpc_req = rpcreq;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (conn-&gt;connected == 0 &amp;&amp; !rpc-&gt;disabled) {</div><div class='add'>+            ret = rpc_transport_connect(conn-&gt;trans, conn-&gt;config.remote_port);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(conn-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "error returned while attempting to "</div><div class='add'>+                       "connect to host:%s, port:%d",</div><div class='add'>+                       conn-&gt;config.remote_host, conn-&gt;config.remote_port);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        request_iob = rpc_clnt_record (rpc, frame, prog,</div><div class='del'>-                                       procnum, proglen,</div><div class='del'>-                                       &amp;rpchdr, callid);</div><div class='del'>-        if (!request_iob) {</div><div class='del'>-                gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "cannot build rpc-record");</div><div class='del'>-                goto out;</div><div class='add'>+        ret = rpc_transport_submit_request(conn-&gt;trans, &amp;req);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(conn-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "failed to submit rpc-request "</div><div class='add'>+                   "(unique: %" PRIu64</div><div class='add'>+                   ", XID: 0x%x Program: %s, "</div><div class='add'>+                   "ProgVers: %d, Proc: %d) to rpc-transport (%s)",</div><div class='add'>+                   cframe-&gt;root-&gt;unique, rpcreq-&gt;xid, rpcreq-&gt;prog-&gt;progname,</div><div class='add'>+                   rpcreq-&gt;prog-&gt;progver, rpcreq-&gt;procnum, conn-&gt;name);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        iobref_add (iobref, request_iob);</div><div class='del'>-</div><div class='del'>-        req.msg.rpchdr = &amp;rpchdr;</div><div class='del'>-        req.msg.rpchdrcount = 1;</div><div class='del'>-        req.msg.proghdr = proghdr;</div><div class='del'>-        req.msg.proghdrcount = proghdrcount;</div><div class='del'>-        req.msg.progpayload = progpayload;</div><div class='del'>-        req.msg.progpayloadcount = progpayloadcount;</div><div class='del'>-        req.msg.iobref = iobref;</div><div class='add'>+        if ((ret &gt;= 0) &amp;&amp; frame) {</div><div class='add'>+            /* Save the frame in queue */</div><div class='add'>+            __save_frame(rpc, frame, rpcreq);</div><div class='ctx'> </div><div class='del'>-        req.rsp.rsphdr = rsphdr;</div><div class='del'>-        req.rsp.rsphdr_count = rsphdr_count;</div><div class='del'>-        req.rsp.rsp_payload = rsp_payload;</div><div class='del'>-        req.rsp.rsp_payload_count = rsp_payload_count;</div><div class='del'>-        req.rsp.rsp_iobref = rsp_iobref;</div><div class='del'>-        req.rpc_req = rpcreq;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (conn-&gt;connected == 0 &amp;&amp; !rpc-&gt;disabled) {</div><div class='del'>-                        ret = rpc_transport_connect (conn-&gt;trans,</div><div class='del'>-                                                     conn-&gt;config.remote_port);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "error returned while attempting to "</div><div class='del'>-                                        "connect to host:%s, port:%d",</div><div class='del'>-                                        conn-&gt;config.remote_host,</div><div class='del'>-                                        conn-&gt;config.remote_port);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            /* A ref on rpc-clnt object is taken while registering</div><div class='add'>+             * call_bail to timer in __save_frame. If it fails to</div><div class='add'>+             * register, it needs an unref and should happen outside</div><div class='add'>+             * conn-&gt;lock which otherwise leads to deadlocks */</div><div class='add'>+            if (conn-&gt;timer == NULL)</div><div class='add'>+                need_unref = _gf_true;</div><div class='ctx'> </div><div class='del'>-                ret = rpc_transport_submit_request (conn-&gt;trans, &amp;req);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (conn-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to submit rpc-request "</div><div class='del'>-                                "(unique: %"PRIu64", XID: 0x%x Program: %s, "</div><div class='del'>-                                "ProgVers: %d, Proc: %d) to rpc-transport (%s)",</div><div class='del'>-                                cframe-&gt;root-&gt;unique, rpcreq-&gt;xid,</div><div class='del'>-                                rpcreq-&gt;prog-&gt;progname, rpcreq-&gt;prog-&gt;progver,</div><div class='del'>-                                rpcreq-&gt;procnum, conn-&gt;name);</div><div class='del'>-                }</div><div class='add'>+            conn-&gt;msgcnt++;</div><div class='ctx'> </div><div class='del'>-                if ((ret &gt;= 0) &amp;&amp; frame) {</div><div class='del'>-                        /* Save the frame in queue */</div><div class='del'>-                        __save_frame (rpc, frame, rpcreq);</div><div class='del'>-</div><div class='del'>-                        /* A ref on rpc-clnt object is taken while registering</div><div class='del'>-                         * call_bail to timer in __save_frame. If it fails to</div><div class='del'>-                         * register, it needs an unref and should happen outside</div><div class='del'>-                         * conn-&gt;lock which otherwise leads to deadlocks */</div><div class='del'>-                        if (conn-&gt;timer == NULL)</div><div class='del'>-                                need_unref = _gf_true;</div><div class='del'>-</div><div class='del'>-                        conn-&gt;msgcnt++;</div><div class='del'>-</div><div class='del'>-                        gf_log ("rpc-clnt", GF_LOG_TRACE, "submitted request "</div><div class='del'>-                                "(unique: %"PRIu64", XID: 0x%x, Program: %s, "</div><div class='del'>-                                "ProgVers: %d, Proc: %d) to rpc-transport (%s)",</div><div class='del'>-                                cframe-&gt;root-&gt;unique, rpcreq-&gt;xid,</div><div class='del'>-                                rpcreq-&gt;prog-&gt;progname, rpcreq-&gt;prog-&gt;progver,</div><div class='del'>-                                rpcreq-&gt;procnum, conn-&gt;name);</div><div class='del'>-                }</div><div class='add'>+            gf_log("rpc-clnt", GF_LOG_TRACE,</div><div class='add'>+                   "submitted request "</div><div class='add'>+                   "(unique: %" PRIu64</div><div class='add'>+                   ", XID: 0x%x, Program: %s, "</div><div class='add'>+                   "ProgVers: %d, Proc: %d) to rpc-transport (%s)",</div><div class='add'>+                   cframe-&gt;root-&gt;unique, rpcreq-&gt;xid, rpcreq-&gt;prog-&gt;progname,</div><div class='add'>+                   rpcreq-&gt;prog-&gt;progver, rpcreq-&gt;procnum, conn-&gt;name);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (need_unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (need_unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_check_and_start_ping (rpc);</div><div class='del'>-        ret = 0;</div><div class='add'>+    rpc_clnt_check_and_start_ping(rpc);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (request_iob) {</div><div class='del'>-                iobuf_unref (request_iob);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (new_iobref &amp;&amp; iobref) {</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (frame &amp;&amp; (ret == -1)) {</div><div class='del'>-                if (rpcreq) {</div><div class='del'>-                        rpcreq-&gt;rpc_status = -1;</div><div class='del'>-                        cbkfn (rpcreq, NULL, 0, frame);</div><div class='del'>-                        mem_put (rpcreq);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (request_iob) {</div><div class='add'>+        iobuf_unref(request_iob);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (new_iobref &amp;&amp; iobref) {</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (frame &amp;&amp; (ret == -1)) {</div><div class='add'>+        if (rpcreq) {</div><div class='add'>+            rpcreq-&gt;rpc_status = -1;</div><div class='add'>+            cbkfn(rpcreq, NULL, 0, frame);</div><div class='add'>+            mem_put(rpcreq);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-rpc_clnt_ref (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_ref(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        if (!rpc)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!rpc)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (rpc-&gt;refcount);</div><div class='del'>-        return rpc;</div><div class='add'>+    GF_ATOMIC_INC(rpc-&gt;refcount);</div><div class='add'>+    return rpc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-rpc_clnt_trigger_destroy (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_trigger_destroy(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t  *conn  = NULL;</div><div class='del'>-        rpc_transport_t        *trans = NULL;</div><div class='del'>-</div><div class='del'>-        if (!rpc)</div><div class='del'>-                return;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='ctx'> </div><div class='del'>-        /* reading conn-&gt;trans outside conn-&gt;lock is OK, since this is the last</div><div class='del'>-         * ref*/</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-        trans = conn-&gt;trans;</div><div class='del'>-        rpc_clnt_disconnect (rpc);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        /* This is to account for rpc_clnt_disable that might have been called</div><div class='del'>-         * before rpc_clnt_unref */</div><div class='del'>-        if (trans) {</div><div class='del'>-                /* set conn-&gt;trans to NULL before rpc_transport_unref</div><div class='del'>-                 * as rpc_transport_unref can potentially free conn</div><div class='del'>-                 */</div><div class='del'>-                conn-&gt;trans = NULL;</div><div class='del'>-                rpc_transport_unref (trans);</div><div class='del'>-        }</div><div class='add'>+    /* reading conn-&gt;trans outside conn-&gt;lock is OK, since this is the last</div><div class='add'>+     * ref*/</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+    trans = conn-&gt;trans;</div><div class='add'>+    rpc_clnt_disconnect(rpc);</div><div class='add'>+</div><div class='add'>+    /* This is to account for rpc_clnt_disable that might have been called</div><div class='add'>+     * before rpc_clnt_unref */</div><div class='add'>+    if (trans) {</div><div class='add'>+        /* set conn-&gt;trans to NULL before rpc_transport_unref</div><div class='add'>+         * as rpc_transport_unref can potentially free conn</div><div class='add'>+         */</div><div class='add'>+        conn-&gt;trans = NULL;</div><div class='add'>+        rpc_transport_unref(trans);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rpc_clnt_destroy (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_destroy(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        rpcclnt_cb_program_t   *program = NULL;</div><div class='del'>-        rpcclnt_cb_program_t   *tmp = NULL;</div><div class='del'>-        struct saved_frames    *saved_frames = NULL;</div><div class='del'>-        rpc_clnt_connection_t  *conn = NULL;</div><div class='del'>-</div><div class='del'>-        if (!rpc)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-        GF_FREE (rpc-&gt;conn.name);</div><div class='del'>-        /* Access saved_frames in critical-section to avoid</div><div class='del'>-           crash in rpc_clnt_connection_cleanup at the time</div><div class='del'>-           of destroying saved frames</div><div class='del'>-        */</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                saved_frames = conn-&gt;saved_frames;</div><div class='del'>-                conn-&gt;saved_frames = NULL;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    rpcclnt_cb_program_t *program = NULL;</div><div class='add'>+    rpcclnt_cb_program_t *tmp = NULL;</div><div class='add'>+    struct saved_frames *saved_frames = NULL;</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='ctx'> </div><div class='del'>-        saved_frames_destroy (saved_frames);</div><div class='del'>-        pthread_mutex_destroy (&amp;rpc-&gt;lock);</div><div class='del'>-        pthread_mutex_destroy (&amp;rpc-&gt;conn.lock);</div><div class='del'>-</div><div class='del'>-        /* mem-pool should be destroyed, otherwise,</div><div class='del'>-           it will cause huge memory leaks */</div><div class='del'>-        mem_pool_destroy (rpc-&gt;reqpool);</div><div class='del'>-        mem_pool_destroy (rpc-&gt;saved_frames_pool);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (program, tmp, &amp;rpc-&gt;programs, program) {</div><div class='del'>-                GF_FREE (program);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (rpc);</div><div class='add'>+    if (!rpc)</div><div class='ctx'>         return;</div><div class='add'>+</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+    GF_FREE(rpc-&gt;conn.name);</div><div class='add'>+    /* Access saved_frames in critical-section to avoid</div><div class='add'>+       crash in rpc_clnt_connection_cleanup at the time</div><div class='add'>+       of destroying saved frames</div><div class='add'>+    */</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        saved_frames = conn-&gt;saved_frames;</div><div class='add'>+        conn-&gt;saved_frames = NULL;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    saved_frames_destroy(saved_frames);</div><div class='add'>+    pthread_mutex_destroy(&amp;rpc-&gt;lock);</div><div class='add'>+    pthread_mutex_destroy(&amp;rpc-&gt;conn.lock);</div><div class='add'>+</div><div class='add'>+    /* mem-pool should be destroyed, otherwise,</div><div class='add'>+       it will cause huge memory leaks */</div><div class='add'>+    mem_pool_destroy(rpc-&gt;reqpool);</div><div class='add'>+    mem_pool_destroy(rpc-&gt;saved_frames_pool);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(program, tmp, &amp;rpc-&gt;programs, program)</div><div class='add'>+    {</div><div class='add'>+        GF_FREE(program);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(rpc);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-rpc_clnt_unref (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_unref(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        int     count = 0;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        if (!rpc)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!rpc)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        count = GF_ATOMIC_DEC (rpc-&gt;refcount);</div><div class='add'>+    count = GF_ATOMIC_DEC(rpc-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-        if (!count) {</div><div class='del'>-                rpc_clnt_trigger_destroy (rpc);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        return rpc;</div><div class='add'>+    if (!count) {</div><div class='add'>+        rpc_clnt_trigger_destroy(rpc);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    return rpc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char</div><div class='del'>-rpc_clnt_is_disabled (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_is_disabled(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    char disabled = 0;</div><div class='ctx'> </div><div class='del'>-        rpc_clnt_connection_t *conn = NULL;</div><div class='del'>-        char                   disabled = 0;</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!rpc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='ctx'> </div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                disabled = rpc-&gt;disabled;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        disabled = rpc-&gt;disabled;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return disabled;</div><div class='add'>+    return disabled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpc_clnt_disable (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_disable(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn = NULL;</div><div class='del'>-        rpc_transport_t       *trans = NULL;</div><div class='del'>-        int                    unref = 0;</div><div class='del'>-        int                    ret   = 0;</div><div class='del'>-        gf_boolean_t           timer_unref = _gf_false;</div><div class='del'>-        gf_boolean_t           reconnect_unref = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!rpc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                rpc-&gt;disabled = 1;</div><div class='del'>-</div><div class='del'>-                if (conn-&gt;timer) {</div><div class='del'>-                        ret = gf_timer_call_cancel (rpc-&gt;ctx, conn-&gt;timer);</div><div class='del'>-                        /* If the event is not fired and it actually cancelled</div><div class='del'>-                         * the timer, do the unref else registered call back</div><div class='del'>-                         * function will take care of it.</div><div class='del'>-                         */</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                timer_unref = _gf_true;</div><div class='del'>-                        conn-&gt;timer = NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (conn-&gt;reconnect) {</div><div class='del'>-                        ret = gf_timer_call_cancel (rpc-&gt;ctx, conn-&gt;reconnect);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                reconnect_unref = _gf_true;</div><div class='del'>-                        conn-&gt;reconnect = NULL;</div><div class='del'>-                }</div><div class='del'>-                conn-&gt;connected = 0;</div><div class='del'>-</div><div class='del'>-                unref = rpc_clnt_remove_ping_timer_locked (rpc);</div><div class='del'>-                trans = conn-&gt;trans;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (trans) {</div><div class='del'>-                rpc_transport_disconnect (trans, _gf_true);</div><div class='del'>-                /* The auth_value was being reset to AUTH_GLUSTERFS_v2.</div><div class='del'>-                 *    if (clnt-&gt;auth_value)</div><div class='del'>-                 *           clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='del'>-                 * It should not be reset here. The disconnect during</div><div class='del'>-                 * portmap request can race with handshake. If handshake</div><div class='del'>-                 * happens first and disconnect later, auth_value would set</div><div class='del'>-                 * to default value and it never sets back to actual auth_value</div><div class='del'>-                 * supported by server. But it's important to set to lower</div><div class='del'>-                 * version supported in the case where the server downgrades.</div><div class='del'>-                 * So moving this code to RPC_TRANSPORT_CONNECT. Note that</div><div class='del'>-                 * CONNECT cannot race with handshake as by nature it is</div><div class='del'>-                 * serialized with handhake. An handshake can happen only</div><div class='del'>-                 * on a connected transport and hence its strictly serialized.</div><div class='del'>-                 */</div><div class='del'>-        }</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    int unref = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t timer_unref = _gf_false;</div><div class='add'>+    gf_boolean_t reconnect_unref = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        rpc-&gt;disabled = 1;</div><div class='add'>+</div><div class='add'>+        if (conn-&gt;timer) {</div><div class='add'>+            ret = gf_timer_call_cancel(rpc-&gt;ctx, conn-&gt;timer);</div><div class='add'>+            /* If the event is not fired and it actually cancelled</div><div class='add'>+             * the timer, do the unref else registered call back</div><div class='add'>+             * function will take care of it.</div><div class='add'>+             */</div><div class='add'>+            if (!ret)</div><div class='add'>+                timer_unref = _gf_true;</div><div class='add'>+            conn-&gt;timer = NULL;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (conn-&gt;reconnect) {</div><div class='add'>+            ret = gf_timer_call_cancel(rpc-&gt;ctx, conn-&gt;reconnect);</div><div class='add'>+            if (!ret)</div><div class='add'>+                reconnect_unref = _gf_true;</div><div class='add'>+            conn-&gt;reconnect = NULL;</div><div class='add'>+        }</div><div class='add'>+        conn-&gt;connected = 0;</div><div class='add'>+</div><div class='add'>+        unref = rpc_clnt_remove_ping_timer_locked(rpc);</div><div class='add'>+        trans = conn-&gt;trans;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (trans) {</div><div class='add'>+        rpc_transport_disconnect(trans, _gf_true);</div><div class='add'>+        /* The auth_value was being reset to AUTH_GLUSTERFS_v2.</div><div class='add'>+         *    if (clnt-&gt;auth_value)</div><div class='add'>+         *           clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='add'>+         * It should not be reset here. The disconnect during</div><div class='add'>+         * portmap request can race with handshake. If handshake</div><div class='add'>+         * happens first and disconnect later, auth_value would set</div><div class='add'>+         * to default value and it never sets back to actual auth_value</div><div class='add'>+         * supported by server. But it's important to set to lower</div><div class='add'>+         * version supported in the case where the server downgrades.</div><div class='add'>+         * So moving this code to RPC_TRANSPORT_CONNECT. Note that</div><div class='add'>+         * CONNECT cannot race with handshake as by nature it is</div><div class='add'>+         * serialized with handhake. An handshake can happen only</div><div class='add'>+         * on a connected transport and hence its strictly serialized.</div><div class='add'>+         */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='del'>-        if (timer_unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (timer_unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='del'>-        if (reconnect_unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (reconnect_unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpc_clnt_disconnect (struct rpc_clnt *rpc)</div><div class='add'>+rpc_clnt_disconnect(struct rpc_clnt *rpc)</div><div class='ctx'> {</div><div class='del'>-        rpc_clnt_connection_t *conn  = NULL;</div><div class='del'>-        rpc_transport_t       *trans = NULL;</div><div class='del'>-        int                    unref = 0;</div><div class='del'>-        int                    ret   = 0;</div><div class='del'>-        gf_boolean_t           timer_unref = _gf_false;</div><div class='del'>-        gf_boolean_t           reconnect_unref = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        conn = &amp;rpc-&gt;conn;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conn-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                rpc-&gt;disabled = 1;</div><div class='del'>-                if (conn-&gt;timer) {</div><div class='del'>-                        ret = gf_timer_call_cancel (rpc-&gt;ctx, conn-&gt;timer);</div><div class='del'>-                        /* If the event is not fired and it actually cancelled</div><div class='del'>-                         * the timer, do the unref else registered call back</div><div class='del'>-                         * function will take care of unref.</div><div class='del'>-                         */</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                timer_unref = _gf_true;</div><div class='del'>-                        conn-&gt;timer = NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (conn-&gt;reconnect) {</div><div class='del'>-                        ret = gf_timer_call_cancel (rpc-&gt;ctx, conn-&gt;reconnect);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                reconnect_unref = _gf_true;</div><div class='del'>-                        conn-&gt;reconnect = NULL;</div><div class='del'>-                }</div><div class='del'>-                conn-&gt;connected = 0;</div><div class='del'>-</div><div class='del'>-                unref = rpc_clnt_remove_ping_timer_locked (rpc);</div><div class='del'>-                trans = conn-&gt;trans;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conn-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (trans) {</div><div class='del'>-                rpc_transport_disconnect (trans, _gf_true);</div><div class='del'>-                /* The auth_value was being reset to AUTH_GLUSTERFS_v2.</div><div class='del'>-                 *    if (clnt-&gt;auth_value)</div><div class='del'>-                 *           clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='del'>-                 * It should not be reset here. The disconnect during</div><div class='del'>-                 * portmap request can race with handshake. If handshake</div><div class='del'>-                 * happens first and disconnect later, auth_value would set</div><div class='del'>-                 * to default value and it never sets back to actual auth_value</div><div class='del'>-                 * supported by server. But it's important to set to lower</div><div class='del'>-                 * version supported in the case where the server downgrades.</div><div class='del'>-                 * So moving this code to RPC_TRANSPORT_CONNECT. Note that</div><div class='del'>-                 * CONNECT cannot race with handshake as by nature it is</div><div class='del'>-                 * serialized with handhake. An handshake can happen only</div><div class='del'>-                 * on a connected transport and hence its strictly serialized.</div><div class='del'>-                 */</div><div class='del'>-        }</div><div class='del'>-        if (unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    rpc_clnt_connection_t *conn = NULL;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    int unref = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t timer_unref = _gf_false;</div><div class='add'>+    gf_boolean_t reconnect_unref = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    conn = &amp;rpc-&gt;conn;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conn-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        rpc-&gt;disabled = 1;</div><div class='add'>+        if (conn-&gt;timer) {</div><div class='add'>+            ret = gf_timer_call_cancel(rpc-&gt;ctx, conn-&gt;timer);</div><div class='add'>+            /* If the event is not fired and it actually cancelled</div><div class='add'>+             * the timer, do the unref else registered call back</div><div class='add'>+             * function will take care of unref.</div><div class='add'>+             */</div><div class='add'>+            if (!ret)</div><div class='add'>+                timer_unref = _gf_true;</div><div class='add'>+            conn-&gt;timer = NULL;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (conn-&gt;reconnect) {</div><div class='add'>+            ret = gf_timer_call_cancel(rpc-&gt;ctx, conn-&gt;reconnect);</div><div class='add'>+            if (!ret)</div><div class='add'>+                reconnect_unref = _gf_true;</div><div class='add'>+            conn-&gt;reconnect = NULL;</div><div class='add'>+        }</div><div class='add'>+        conn-&gt;connected = 0;</div><div class='add'>+</div><div class='add'>+        unref = rpc_clnt_remove_ping_timer_locked(rpc);</div><div class='add'>+        trans = conn-&gt;trans;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conn-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (trans) {</div><div class='add'>+        rpc_transport_disconnect(trans, _gf_true);</div><div class='add'>+        /* The auth_value was being reset to AUTH_GLUSTERFS_v2.</div><div class='add'>+         *    if (clnt-&gt;auth_value)</div><div class='add'>+         *           clnt-&gt;auth_value = AUTH_GLUSTERFS_v2;</div><div class='add'>+         * It should not be reset here. The disconnect during</div><div class='add'>+         * portmap request can race with handshake. If handshake</div><div class='add'>+         * happens first and disconnect later, auth_value would set</div><div class='add'>+         * to default value and it never sets back to actual auth_value</div><div class='add'>+         * supported by server. But it's important to set to lower</div><div class='add'>+         * version supported in the case where the server downgrades.</div><div class='add'>+         * So moving this code to RPC_TRANSPORT_CONNECT. Note that</div><div class='add'>+         * CONNECT cannot race with handshake as by nature it is</div><div class='add'>+         * serialized with handhake. An handshake can happen only</div><div class='add'>+         * on a connected transport and hence its strictly serialized.</div><div class='add'>+         */</div><div class='add'>+    }</div><div class='add'>+    if (unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='del'>-        if (timer_unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (timer_unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='del'>-        if (reconnect_unref)</div><div class='del'>-                rpc_clnt_unref (rpc);</div><div class='add'>+    if (reconnect_unref)</div><div class='add'>+        rpc_clnt_unref(rpc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rpc_clnt_reconfig (struct rpc_clnt *rpc, struct rpc_clnt_config *config)</div><div class='add'>+rpc_clnt_reconfig(struct rpc_clnt *rpc, struct rpc_clnt_config *config)</div><div class='ctx'> {</div><div class='del'>-        if (config-&gt;ping_timeout) {</div><div class='del'>-                if (config-&gt;ping_timeout != rpc-&gt;conn.ping_timeout)</div><div class='del'>-                        gf_log (rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='del'>-                                "changing ping timeout to %d (from %d)",</div><div class='del'>-                                config-&gt;ping_timeout,</div><div class='del'>-                                rpc-&gt;conn.ping_timeout);</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock (&amp;rpc-&gt;conn.lock);</div><div class='del'>-                {</div><div class='del'>-                rpc-&gt;conn.ping_timeout = config-&gt;ping_timeout;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;rpc-&gt;conn.lock);</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (config-&gt;rpc_timeout) {</div><div class='del'>-                if (config-&gt;rpc_timeout != rpc-&gt;conn.config.rpc_timeout)</div><div class='del'>-                        gf_log (rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='del'>-                                "changing timeout to %d (from %d)",</div><div class='del'>-                                config-&gt;rpc_timeout,</div><div class='del'>-                                rpc-&gt;conn.config.rpc_timeout);</div><div class='del'>-                rpc-&gt;conn.config.rpc_timeout = config-&gt;rpc_timeout;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (config-&gt;remote_port) {</div><div class='del'>-                if (config-&gt;remote_port != rpc-&gt;conn.config.remote_port)</div><div class='del'>-                        gf_log (rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='del'>-                                "changing port to %d (from %d)",</div><div class='del'>-                                config-&gt;remote_port,</div><div class='del'>-                                rpc-&gt;conn.config.remote_port);</div><div class='add'>+    if (config-&gt;ping_timeout) {</div><div class='add'>+        if (config-&gt;ping_timeout != rpc-&gt;conn.ping_timeout)</div><div class='add'>+            gf_log(rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='add'>+                   "changing ping timeout to %d (from %d)",</div><div class='add'>+                   config-&gt;ping_timeout, rpc-&gt;conn.ping_timeout);</div><div class='ctx'> </div><div class='del'>-                rpc-&gt;conn.config.remote_port = config-&gt;remote_port;</div><div class='add'>+        pthread_mutex_lock(&amp;rpc-&gt;conn.lock);</div><div class='add'>+        {</div><div class='add'>+            rpc-&gt;conn.ping_timeout = config-&gt;ping_timeout;</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;rpc-&gt;conn.lock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (config-&gt;rpc_timeout) {</div><div class='add'>+        if (config-&gt;rpc_timeout != rpc-&gt;conn.config.rpc_timeout)</div><div class='add'>+            gf_log(rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='add'>+                   "changing timeout to %d (from %d)", config-&gt;rpc_timeout,</div><div class='add'>+                   rpc-&gt;conn.config.rpc_timeout);</div><div class='add'>+        rpc-&gt;conn.config.rpc_timeout = config-&gt;rpc_timeout;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (config-&gt;remote_port) {</div><div class='add'>+        if (config-&gt;remote_port != rpc-&gt;conn.config.remote_port)</div><div class='add'>+            gf_log(rpc-&gt;conn.name, GF_LOG_INFO, "changing port to %d (from %d)",</div><div class='add'>+                   config-&gt;remote_port, rpc-&gt;conn.config.remote_port);</div><div class='add'>+</div><div class='add'>+        rpc-&gt;conn.config.remote_port = config-&gt;remote_port;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (config-&gt;remote_host) {</div><div class='add'>+        if (rpc-&gt;conn.config.remote_host) {</div><div class='add'>+            if (strcmp(rpc-&gt;conn.config.remote_host, config-&gt;remote_host))</div><div class='add'>+                gf_log(rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='add'>+                       "changing hostname to %s (from %s)", config-&gt;remote_host,</div><div class='add'>+                       rpc-&gt;conn.config.remote_host);</div><div class='add'>+            GF_FREE(rpc-&gt;conn.config.remote_host);</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(rpc-&gt;conn.name, GF_LOG_INFO, "setting hostname to %s",</div><div class='add'>+                   config-&gt;remote_host);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (config-&gt;remote_host) {</div><div class='del'>-                if (rpc-&gt;conn.config.remote_host) {</div><div class='del'>-                        if (strcmp (rpc-&gt;conn.config.remote_host,</div><div class='del'>-                                    config-&gt;remote_host))</div><div class='del'>-                                gf_log (rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='del'>-                                        "changing hostname to %s (from %s)",</div><div class='del'>-                                        config-&gt;remote_host,</div><div class='del'>-                                        rpc-&gt;conn.config.remote_host);</div><div class='del'>-                        GF_FREE (rpc-&gt;conn.config.remote_host);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (rpc-&gt;conn.name, GF_LOG_INFO,</div><div class='del'>-                                "setting hostname to %s",</div><div class='del'>-                                config-&gt;remote_host);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                rpc-&gt;conn.config.remote_host = gf_strdup (config-&gt;remote_host);</div><div class='del'>-        }</div><div class='add'>+        rpc-&gt;conn.config.remote_host = gf_strdup(config-&gt;remote_host);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/rpc-drc.c b/rpc/rpc-lib/src/rpc-drc.c<br/>index fb7d2f13605..ff983b23fb4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-drc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/rpc-drc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-drc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-drc.c</a></div><div class='hunk'>@@ -29,29 +29,29 @@</div><div class='ctx'>  * @return NULL if reply is destroyed, reply otherwise</div><div class='ctx'>  */</div><div class='ctx'> static drc_cached_op_t *</div><div class='del'>-rpcsvc_drc_op_destroy (rpcsvc_drc_globals_t *drc, drc_cached_op_t *reply)</div><div class='add'>+rpcsvc_drc_op_destroy(rpcsvc_drc_globals_t *drc, drc_cached_op_t *reply)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (drc);</div><div class='del'>-        GF_ASSERT (reply);</div><div class='del'>-</div><div class='del'>-        if (reply-&gt;state == DRC_OP_IN_TRANSIT)</div><div class='del'>-                return reply;</div><div class='del'>-</div><div class='del'>-        iobref_unref (reply-&gt;msg.iobref);</div><div class='del'>-        if (reply-&gt;msg.rpchdr)</div><div class='del'>-                GF_FREE (reply-&gt;msg.rpchdr);</div><div class='del'>-        if (reply-&gt;msg.proghdr)</div><div class='del'>-                GF_FREE (reply-&gt;msg.proghdr);</div><div class='del'>-        if (reply-&gt;msg.progpayload)</div><div class='del'>-                GF_FREE (reply-&gt;msg.progpayload);</div><div class='del'>-</div><div class='del'>-        list_del (&amp;reply-&gt;global_list);</div><div class='del'>-        reply-&gt;client-&gt;op_count--;</div><div class='del'>-        drc-&gt;op_count--;</div><div class='del'>-        mem_put (reply);</div><div class='del'>-        reply = NULL;</div><div class='add'>+    GF_ASSERT(drc);</div><div class='add'>+    GF_ASSERT(reply);</div><div class='ctx'> </div><div class='add'>+    if (reply-&gt;state == DRC_OP_IN_TRANSIT)</div><div class='ctx'>         return reply;</div><div class='add'>+</div><div class='add'>+    iobref_unref(reply-&gt;msg.iobref);</div><div class='add'>+    if (reply-&gt;msg.rpchdr)</div><div class='add'>+        GF_FREE(reply-&gt;msg.rpchdr);</div><div class='add'>+    if (reply-&gt;msg.proghdr)</div><div class='add'>+        GF_FREE(reply-&gt;msg.proghdr);</div><div class='add'>+    if (reply-&gt;msg.progpayload)</div><div class='add'>+        GF_FREE(reply-&gt;msg.progpayload);</div><div class='add'>+</div><div class='add'>+    list_del(&amp;reply-&gt;global_list);</div><div class='add'>+    reply-&gt;client-&gt;op_count--;</div><div class='add'>+    drc-&gt;op_count--;</div><div class='add'>+    mem_put(reply);</div><div class='add'>+    reply = NULL;</div><div class='add'>+</div><div class='add'>+    return reply;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -62,9 +62,9 @@ rpcsvc_drc_op_destroy (rpcsvc_drc_globals_t *drc, drc_cached_op_t *reply)</div><div class='ctx'>  * @return void</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-rpcsvc_drc_rb_op_destroy (void *reply, void *drc)</div><div class='add'>+rpcsvc_drc_rb_op_destroy(void *reply, void *drc)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_drc_op_destroy (drc, (drc_cached_op_t *)reply);</div><div class='add'>+    rpcsvc_drc_op_destroy(drc, (drc_cached_op_t *)reply);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -74,11 +74,11 @@ rpcsvc_drc_rb_op_destroy (void *reply, void *drc)</div><div class='ctx'>  * @return void</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-rpcsvc_remove_drc_client (drc_client_t *client)</div><div class='add'>+rpcsvc_remove_drc_client(drc_client_t *client)</div><div class='ctx'> {</div><div class='del'>-        rb_destroy (client-&gt;rbtree, rpcsvc_drc_rb_op_destroy);</div><div class='del'>-        list_del (&amp;client-&gt;client_list);</div><div class='del'>-        GF_FREE (client);</div><div class='add'>+    rb_destroy(client-&gt;rbtree, rpcsvc_drc_rb_op_destroy);</div><div class='add'>+    list_del(&amp;client-&gt;client_list);</div><div class='add'>+    GF_FREE(client);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -89,24 +89,25 @@ rpcsvc_remove_drc_client (drc_client_t *client)</div><div class='ctx'>  * @return drc client if it exists, NULL otherwise</div><div class='ctx'>  */</div><div class='ctx'> static drc_client_t *</div><div class='del'>-rpcsvc_client_lookup (rpcsvc_drc_globals_t *drc,</div><div class='del'>-                      struct sockaddr_storage *sockaddr)</div><div class='add'>+rpcsvc_client_lookup(rpcsvc_drc_globals_t *drc,</div><div class='add'>+                     struct sockaddr_storage *sockaddr)</div><div class='ctx'> {</div><div class='del'>-        drc_client_t    *client = NULL;</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (drc);</div><div class='del'>-        GF_ASSERT (sockaddr);</div><div class='add'>+    GF_ASSERT(drc);</div><div class='add'>+    GF_ASSERT(sockaddr);</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;drc-&gt;clients_head))</div><div class='del'>-            return NULL;</div><div class='add'>+    if (list_empty(&amp;drc-&gt;clients_head))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (client, &amp;drc-&gt;clients_head, client_list) {</div><div class='del'>-                if (gf_sock_union_equal_addr (&amp;client-&gt;sock_union,</div><div class='del'>-                                              (union gf_sock_union *)sockaddr))</div><div class='del'>-                        return client;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(client, &amp;drc-&gt;clients_head, client_list)</div><div class='add'>+    {</div><div class='add'>+        if (gf_sock_union_equal_addr(&amp;client-&gt;sock_union,</div><div class='add'>+                                     (union gf_sock_union *)sockaddr))</div><div class='add'>+            return client;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -119,29 +120,28 @@ rpcsvc_client_lookup (rpcsvc_drc_globals_t *drc,</div><div class='ctx'>  * @return 0 if req matches reply, else (req-&gt;xid - reply-&gt;xid)</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-drc_compare_reqs (const void *item, const void *rb_node_data, void *param)</div><div class='add'>+drc_compare_reqs(const void *item, const void *rb_node_data, void *param)</div><div class='ctx'> {</div><div class='del'>-        int               ret      = -1;</div><div class='del'>-        drc_cached_op_t  *req      = NULL;</div><div class='del'>-        drc_cached_op_t  *reply    = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    drc_cached_op_t *req = NULL;</div><div class='add'>+    drc_cached_op_t *reply = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (item);</div><div class='del'>-        GF_ASSERT (rb_node_data);</div><div class='del'>-        GF_ASSERT (param);</div><div class='add'>+    GF_ASSERT(item);</div><div class='add'>+    GF_ASSERT(rb_node_data);</div><div class='add'>+    GF_ASSERT(param);</div><div class='ctx'> </div><div class='del'>-        req = (drc_cached_op_t *)item;</div><div class='del'>-        reply = (drc_cached_op_t *)rb_node_data;</div><div class='add'>+    req = (drc_cached_op_t *)item;</div><div class='add'>+    reply = (drc_cached_op_t *)rb_node_data;</div><div class='ctx'> </div><div class='del'>-        ret = req-&gt;xid - reply-&gt;xid;</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = req-&gt;xid - reply-&gt;xid;</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (req-&gt;prognum == reply-&gt;prognum &amp;&amp;</div><div class='del'>-            req-&gt;procnum == reply-&gt;procnum &amp;&amp;</div><div class='del'>-            req-&gt;progversion == reply-&gt;progversion)</div><div class='del'>-                return 0;</div><div class='add'>+    if (req-&gt;prognum == reply-&gt;prognum &amp;&amp; req-&gt;procnum == reply-&gt;procnum &amp;&amp;</div><div class='add'>+        req-&gt;progversion == reply-&gt;progversion)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        return 1;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -152,18 +152,18 @@ drc_compare_reqs (const void *item, const void *rb_node_data, void *param)</div><div class='ctx'>  * @return 0 on success, -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-drc_init_client_cache (rpcsvc_drc_globals_t *drc, drc_client_t *client)</div><div class='add'>+drc_init_client_cache(rpcsvc_drc_globals_t *drc, drc_client_t *client)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (drc);</div><div class='del'>-        GF_ASSERT (client);</div><div class='add'>+    GF_ASSERT(drc);</div><div class='add'>+    GF_ASSERT(client);</div><div class='ctx'> </div><div class='del'>-        client-&gt;rbtree = rb_create (drc_compare_reqs, drc, NULL);</div><div class='del'>-        if (!client-&gt;rbtree) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "rb tree creation failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    client-&gt;rbtree = rb_create(drc_compare_reqs, drc, NULL);</div><div class='add'>+    if (!client-&gt;rbtree) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG, "rb tree creation failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -175,42 +175,40 @@ drc_init_client_cache (rpcsvc_drc_globals_t *drc, drc_client_t *client)</div><div class='ctx'>  * @return drc client on success, NULL on failure</div><div class='ctx'>  */</div><div class='ctx'> static drc_client_t *</div><div class='del'>-rpcsvc_get_drc_client (rpcsvc_drc_globals_t *drc,</div><div class='del'>-                       struct sockaddr_storage *sockaddr)</div><div class='add'>+rpcsvc_get_drc_client(rpcsvc_drc_globals_t *drc,</div><div class='add'>+                      struct sockaddr_storage *sockaddr)</div><div class='ctx'> {</div><div class='del'>-        drc_client_t      *client      = NULL;</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (drc);</div><div class='del'>-        GF_ASSERT (sockaddr);</div><div class='add'>+    GF_ASSERT(drc);</div><div class='add'>+    GF_ASSERT(sockaddr);</div><div class='ctx'> </div><div class='del'>-        client = rpcsvc_client_lookup (drc, sockaddr);</div><div class='del'>-        if (client)</div><div class='del'>-                goto out;</div><div class='add'>+    client = rpcsvc_client_lookup(drc, sockaddr);</div><div class='add'>+    if (client)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* if lookup fails, allocate cache for the new client */</div><div class='del'>-        client = GF_CALLOC (1, sizeof (drc_client_t),</div><div class='del'>-                            gf_common_mt_drc_client_t);</div><div class='del'>-        if (!client)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        client-&gt;ref = 0;</div><div class='del'>-        client-&gt;sock_union = (union gf_sock_union)*sockaddr;</div><div class='del'>-        client-&gt;op_count = 0;</div><div class='del'>-        INIT_LIST_HEAD (&amp;client-&gt;client_list);</div><div class='del'>-</div><div class='del'>-        if (drc_init_client_cache (drc, client)) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG,</div><div class='del'>-                        "initialization of drc client failed");</div><div class='del'>-                GF_FREE (client);</div><div class='del'>-                client = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        drc-&gt;client_count++;</div><div class='add'>+    /* if lookup fails, allocate cache for the new client */</div><div class='add'>+    client = GF_CALLOC(1, sizeof(drc_client_t), gf_common_mt_drc_client_t);</div><div class='add'>+    if (!client)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    client-&gt;ref = 0;</div><div class='add'>+    client-&gt;sock_union = (union gf_sock_union) * sockaddr;</div><div class='add'>+    client-&gt;op_count = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;client-&gt;client_list);</div><div class='add'>+</div><div class='add'>+    if (drc_init_client_cache(drc, client)) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG, "initialization of drc client failed");</div><div class='add'>+        GF_FREE(client);</div><div class='add'>+        client = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    drc-&gt;client_count++;</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;client-&gt;client_list, &amp;drc-&gt;clients_head);</div><div class='add'>+    list_add(&amp;client-&gt;client_list, &amp;drc-&gt;clients_head);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return client;</div><div class='add'>+out:</div><div class='add'>+    return client;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -220,25 +218,24 @@ rpcsvc_get_drc_client (rpcsvc_drc_globals_t *drc,</div><div class='ctx'>  * @return 1 if DRC is needed for req, 0 otherwise</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_need_drc (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_need_drc(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_actor_t           *actor = NULL;</div><div class='del'>-        rpcsvc_drc_globals_t     *drc   = NULL;</div><div class='add'>+    rpcsvc_actor_t *actor = NULL;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        GF_ASSERT (req-&gt;svc);</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    GF_ASSERT(req-&gt;svc);</div><div class='ctx'> </div><div class='del'>-        drc = req-&gt;svc-&gt;drc;</div><div class='add'>+    drc = req-&gt;svc-&gt;drc;</div><div class='ctx'> </div><div class='del'>-        if (!drc || drc-&gt;status == DRC_UNINITIATED)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!drc || drc-&gt;status == DRC_UNINITIATED)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        actor = rpcsvc_program_actor (req);</div><div class='del'>-        if (!actor)</div><div class='del'>-                return 0;</div><div class='add'>+    actor = rpcsvc_program_actor(req);</div><div class='add'>+    if (!actor)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        return (actor-&gt;op_type == DRC_NON_IDEMPOTENT</div><div class='del'>-                &amp;&amp; drc-&gt;type != DRC_TYPE_NONE);</div><div class='add'>+    return (actor-&gt;op_type == DRC_NON_IDEMPOTENT &amp;&amp; drc-&gt;type != DRC_TYPE_NONE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -248,11 +245,11 @@ rpcsvc_need_drc (rpcsvc_request_t *req)</div><div class='ctx'>  * @return client</div><div class='ctx'>  */</div><div class='ctx'> static drc_client_t *</div><div class='del'>-rpcsvc_drc_client_ref (drc_client_t *client)</div><div class='add'>+rpcsvc_drc_client_ref(drc_client_t *client)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (client);</div><div class='del'>-        client-&gt;ref++;</div><div class='del'>-        return client;</div><div class='add'>+    GF_ASSERT(client);</div><div class='add'>+    client-&gt;ref++;</div><div class='add'>+    return client;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -264,19 +261,19 @@ rpcsvc_drc_client_ref (drc_client_t *client)</div><div class='ctx'>  * @return NULL if it is the last unref, client otherwise</div><div class='ctx'>  */</div><div class='ctx'> static drc_client_t *</div><div class='del'>-rpcsvc_drc_client_unref (rpcsvc_drc_globals_t *drc, drc_client_t *client)</div><div class='add'>+rpcsvc_drc_client_unref(rpcsvc_drc_globals_t *drc, drc_client_t *client)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (drc);</div><div class='del'>-        GF_ASSERT (client-&gt;ref);</div><div class='del'>-</div><div class='del'>-        client-&gt;ref--;</div><div class='del'>-        if (!client-&gt;ref) {</div><div class='del'>-                drc-&gt;client_count--;</div><div class='del'>-                rpcsvc_remove_drc_client (client);</div><div class='del'>-                client = NULL;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(drc);</div><div class='add'>+    GF_ASSERT(client-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        return client;</div><div class='add'>+    client-&gt;ref--;</div><div class='add'>+    if (!client-&gt;ref) {</div><div class='add'>+        drc-&gt;client_count--;</div><div class='add'>+        rpcsvc_remove_drc_client(client);</div><div class='add'>+        client = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return client;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -286,38 +283,37 @@ rpcsvc_drc_client_unref (rpcsvc_drc_globals_t *drc, drc_client_t *client)</div><div class='ctx'>  * @return cached reply of req if found, NULL otherwise</div><div class='ctx'>  */</div><div class='ctx'> drc_cached_op_t *</div><div class='del'>-rpcsvc_drc_lookup (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_drc_lookup(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        drc_client_t           *client = NULL;</div><div class='del'>-        drc_cached_op_t        *reply  = NULL;</div><div class='del'>-        drc_cached_op_t        new = {</div><div class='del'>-                .xid            = req-&gt;xid,</div><div class='del'>-                .prognum        = req-&gt;prognum,</div><div class='del'>-                .progversion    = req-&gt;progver,</div><div class='del'>-                .procnum        = req-&gt;procnum,</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        if (!req-&gt;trans-&gt;drc_client) {</div><div class='del'>-                client = rpcsvc_get_drc_client (req-&gt;svc-&gt;drc,</div><div class='del'>-                                                &amp;req-&gt;trans-&gt;peerinfo.sockaddr);</div><div class='del'>-                if (!client)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                req-&gt;trans-&gt;drc_client</div><div class='del'>-                        = rpcsvc_drc_client_ref (client);</div><div class='del'>-        }</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='add'>+    drc_cached_op_t *reply = NULL;</div><div class='add'>+    drc_cached_op_t new = {</div><div class='add'>+        .xid = req-&gt;xid,</div><div class='add'>+        .prognum = req-&gt;prognum,</div><div class='add'>+        .progversion = req-&gt;progver,</div><div class='add'>+        .procnum = req-&gt;procnum,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    if (!req-&gt;trans-&gt;drc_client) {</div><div class='add'>+        client = rpcsvc_get_drc_client(req-&gt;svc-&gt;drc,</div><div class='add'>+                                       &amp;req-&gt;trans-&gt;peerinfo.sockaddr);</div><div class='add'>+        if (!client)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        client = req-&gt;trans-&gt;drc_client;</div><div class='add'>+        req-&gt;trans-&gt;drc_client = rpcsvc_drc_client_ref(client);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (client-&gt;op_count == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    client = req-&gt;trans-&gt;drc_client;</div><div class='ctx'> </div><div class='del'>-        reply = rb_find (client-&gt;rbtree, &amp;new);</div><div class='add'>+    if (client-&gt;op_count == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return reply;</div><div class='add'>+    reply = rb_find(client-&gt;rbtree, &amp;new);</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return reply;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -325,28 +321,30 @@ rpcsvc_drc_lookup (rpcsvc_request_t *req)</div><div class='ctx'>  *</div><div class='ctx'>  * @param req - incoming request (which is a duplicate in this case)</div><div class='ctx'>  * @param reply - the cached reply for req</div><div class='del'>- * @return 0 on successful reply submission, -1 or other non-zero value otherwise</div><div class='add'>+ * @return 0 on successful reply submission, -1 or other non-zero value</div><div class='add'>+ * otherwise</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_send_cached_reply (rpcsvc_request_t *req, drc_cached_op_t *reply)</div><div class='add'>+rpcsvc_send_cached_reply(rpcsvc_request_t *req, drc_cached_op_t *reply)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        GF_ASSERT (reply);</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    GF_ASSERT(reply);</div><div class='ctx'> </div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_DEBUG, "sending cached reply: xid: %d, "</div><div class='del'>-                "client: %s", req-&gt;xid, req-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+           "sending cached reply: xid: %d, "</div><div class='add'>+           "client: %s",</div><div class='add'>+           req-&gt;xid, req-&gt;trans-&gt;peerinfo.identifier);</div><div class='ctx'> </div><div class='del'>-        rpcsvc_drc_client_ref (reply-&gt;client);</div><div class='del'>-        ret = rpcsvc_transport_submit (req-&gt;trans,</div><div class='del'>-                     reply-&gt;msg.rpchdr, reply-&gt;msg.rpchdrcount,</div><div class='del'>-                     reply-&gt;msg.proghdr, reply-&gt;msg.proghdrcount,</div><div class='del'>-                     reply-&gt;msg.progpayload, reply-&gt;msg.progpayloadcount,</div><div class='del'>-                     reply-&gt;msg.iobref, req-&gt;trans_private);</div><div class='del'>-        rpcsvc_drc_client_unref (req-&gt;svc-&gt;drc, reply-&gt;client);</div><div class='add'>+    rpcsvc_drc_client_ref(reply-&gt;client);</div><div class='add'>+    ret = rpcsvc_transport_submit(</div><div class='add'>+        req-&gt;trans, reply-&gt;msg.rpchdr, reply-&gt;msg.rpchdrcount,</div><div class='add'>+        reply-&gt;msg.proghdr, reply-&gt;msg.proghdrcount, reply-&gt;msg.progpayload,</div><div class='add'>+        reply-&gt;msg.progpayloadcount, reply-&gt;msg.iobref, req-&gt;trans_private);</div><div class='add'>+    rpcsvc_drc_client_unref(req-&gt;svc-&gt;drc, reply-&gt;client);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -363,38 +361,37 @@ rpcsvc_send_cached_reply (rpcsvc_request_t *req, drc_cached_op_t *reply)</div><div class='ctx'>  * @return 0 on success, -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_cache_reply (rpcsvc_request_t *req, struct iobref *iobref,</div><div class='del'>-                    struct iovec *rpchdr, int rpchdrcount,</div><div class='del'>-                    struct iovec *proghdr, int proghdrcount,</div><div class='del'>-                    struct iovec *payload, int payloadcount)</div><div class='add'>+rpcsvc_cache_reply(rpcsvc_request_t *req, struct iobref *iobref,</div><div class='add'>+                   struct iovec *rpchdr, int rpchdrcount, struct iovec *proghdr,</div><div class='add'>+                   int proghdrcount, struct iovec *payload, int payloadcount)</div><div class='ctx'> {</div><div class='del'>-        int                       ret              = -1;</div><div class='del'>-        drc_cached_op_t          *reply            = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    drc_cached_op_t *reply = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-        GF_ASSERT (req-&gt;reply);</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+    GF_ASSERT(req-&gt;reply);</div><div class='ctx'> </div><div class='del'>-        reply = req-&gt;reply;</div><div class='add'>+    reply = req-&gt;reply;</div><div class='ctx'> </div><div class='del'>-        reply-&gt;state = DRC_OP_CACHED;</div><div class='add'>+    reply-&gt;state = DRC_OP_CACHED;</div><div class='ctx'> </div><div class='del'>-        reply-&gt;msg.iobref = iobref_ref (iobref);</div><div class='add'>+    reply-&gt;msg.iobref = iobref_ref(iobref);</div><div class='ctx'> </div><div class='del'>-        reply-&gt;msg.rpchdrcount = rpchdrcount;</div><div class='del'>-        reply-&gt;msg.rpchdr = iov_dup (rpchdr, rpchdrcount);</div><div class='add'>+    reply-&gt;msg.rpchdrcount = rpchdrcount;</div><div class='add'>+    reply-&gt;msg.rpchdr = iov_dup(rpchdr, rpchdrcount);</div><div class='ctx'> </div><div class='del'>-        reply-&gt;msg.proghdrcount = proghdrcount;</div><div class='del'>-        reply-&gt;msg.proghdr = iov_dup (proghdr, proghdrcount);</div><div class='add'>+    reply-&gt;msg.proghdrcount = proghdrcount;</div><div class='add'>+    reply-&gt;msg.proghdr = iov_dup(proghdr, proghdrcount);</div><div class='ctx'> </div><div class='del'>-        reply-&gt;msg.progpayloadcount = payloadcount;</div><div class='del'>-        if (payloadcount)</div><div class='del'>-                reply-&gt;msg.progpayload = iov_dup (payload, payloadcount);</div><div class='add'>+    reply-&gt;msg.progpayloadcount = payloadcount;</div><div class='add'>+    if (payloadcount)</div><div class='add'>+        reply-&gt;msg.progpayload = iov_dup(payload, payloadcount);</div><div class='ctx'> </div><div class='del'>-        //        rpcsvc_drc_client_unref (req-&gt;svc-&gt;drc, req-&gt;trans-&gt;drc_client);</div><div class='del'>-        //        rpcsvc_drc_op_unref (req-&gt;svc-&gt;drc, reply);</div><div class='del'>-        ret = 0;</div><div class='add'>+    //        rpcsvc_drc_client_unref (req-&gt;svc-&gt;drc, req-&gt;trans-&gt;drc_client);</div><div class='add'>+    //        rpcsvc_drc_op_unref (req-&gt;svc-&gt;drc, reply);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -405,73 +402,74 @@ rpcsvc_cache_reply (rpcsvc_request_t *req, struct iobref *iobref,</div><div class='ctx'>  * @return void</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-rpcsvc_vacate_drc_entries (rpcsvc_drc_globals_t *drc)</div><div class='add'>+rpcsvc_vacate_drc_entries(rpcsvc_drc_globals_t *drc)</div><div class='ctx'> {</div><div class='del'>-        uint32_t            i           = 0;</div><div class='del'>-        uint32_t            n           = 0;</div><div class='del'>-        drc_cached_op_t    *reply       = NULL;</div><div class='del'>-        drc_cached_op_t    *tmp         = NULL;</div><div class='del'>-        drc_client_t       *client      = NULL;</div><div class='add'>+    uint32_t i = 0;</div><div class='add'>+    uint32_t n = 0;</div><div class='add'>+    drc_cached_op_t *reply = NULL;</div><div class='add'>+    drc_cached_op_t *tmp = NULL;</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (drc);</div><div class='add'>+    GF_ASSERT(drc);</div><div class='ctx'> </div><div class='del'>-        n = drc-&gt;global_cache_size / drc-&gt;lru_factor;</div><div class='add'>+    n = drc-&gt;global_cache_size / drc-&gt;lru_factor;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe_reverse (reply, tmp, &amp;drc-&gt;cache_head, global_list) {</div><div class='del'>-                /* Don't delete ops that are in transit */</div><div class='del'>-                if (reply-&gt;state == DRC_OP_IN_TRANSIT)</div><div class='del'>-                        continue;</div><div class='add'>+    list_for_each_entry_safe_reverse(reply, tmp, &amp;drc-&gt;cache_head, global_list)</div><div class='add'>+    {</div><div class='add'>+        /* Don't delete ops that are in transit */</div><div class='add'>+        if (reply-&gt;state == DRC_OP_IN_TRANSIT)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                client = reply-&gt;client;</div><div class='add'>+        client = reply-&gt;client;</div><div class='ctx'> </div><div class='del'>-                rb_delete (client-&gt;rbtree, reply);</div><div class='add'>+        rb_delete(client-&gt;rbtree, reply);</div><div class='ctx'> </div><div class='del'>-                rpcsvc_drc_op_destroy (drc, reply);</div><div class='del'>-                rpcsvc_drc_client_unref (drc, client);</div><div class='del'>-                i++;</div><div class='del'>-                if (i &gt;= n)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        rpcsvc_drc_op_destroy(drc, reply);</div><div class='add'>+        rpcsvc_drc_client_unref(drc, client);</div><div class='add'>+        i++;</div><div class='add'>+        if (i &gt;= n)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='del'>- * rpcsvc_add_op_to_cache - insert the cached op into the client rbtree and drc list</div><div class='add'>+ * rpcsvc_add_op_to_cache - insert the cached op into the client rbtree and drc</div><div class='add'>+ * list</div><div class='ctx'>  *</div><div class='ctx'>  * @param drc - the main drc structure</div><div class='ctx'>  * @param reply - the op to be inserted</div><div class='ctx'>  * @return 0 on success, -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-rpcsvc_add_op_to_cache (rpcsvc_drc_globals_t *drc, drc_cached_op_t *reply)</div><div class='add'>+rpcsvc_add_op_to_cache(rpcsvc_drc_globals_t *drc, drc_cached_op_t *reply)</div><div class='ctx'> {</div><div class='del'>-        drc_client_t        *client         = NULL;</div><div class='del'>-        drc_cached_op_t    **tmp_reply      = NULL;</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='add'>+    drc_cached_op_t **tmp_reply = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (drc);</div><div class='del'>-        GF_ASSERT (reply);</div><div class='add'>+    GF_ASSERT(drc);</div><div class='add'>+    GF_ASSERT(reply);</div><div class='ctx'> </div><div class='del'>-        client = reply-&gt;client;</div><div class='add'>+    client = reply-&gt;client;</div><div class='ctx'> </div><div class='del'>-        /* cache is full, free up some space */</div><div class='del'>-        if (drc-&gt;op_count &gt;= drc-&gt;global_cache_size)</div><div class='del'>-                rpcsvc_vacate_drc_entries (drc);</div><div class='del'>-</div><div class='del'>-        tmp_reply = (drc_cached_op_t **)rb_probe (client-&gt;rbtree, reply);</div><div class='del'>-        if (!tmp_reply) {</div><div class='del'>-                /* mem alloc failed */</div><div class='del'>-                return -1;</div><div class='del'>-        } else if (*tmp_reply != reply) {</div><div class='del'>-                /* should never happen */</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "DRC failed to detect duplicates");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* cache is full, free up some space */</div><div class='add'>+    if (drc-&gt;op_count &gt;= drc-&gt;global_cache_size)</div><div class='add'>+        rpcsvc_vacate_drc_entries(drc);</div><div class='ctx'> </div><div class='del'>-        client-&gt;op_count++;</div><div class='del'>-        list_add (&amp;reply-&gt;global_list, &amp;drc-&gt;cache_head);</div><div class='del'>-        drc-&gt;op_count++;</div><div class='add'>+    tmp_reply = (drc_cached_op_t **)rb_probe(client-&gt;rbtree, reply);</div><div class='add'>+    if (!tmp_reply) {</div><div class='add'>+        /* mem alloc failed */</div><div class='add'>+        return -1;</div><div class='add'>+    } else if (*tmp_reply != reply) {</div><div class='add'>+        /* should never happen */</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "DRC failed to detect duplicates");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    client-&gt;op_count++;</div><div class='add'>+    list_add(&amp;reply-&gt;global_list, &amp;drc-&gt;cache_head);</div><div class='add'>+    drc-&gt;op_count++;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -481,46 +479,46 @@ rpcsvc_add_op_to_cache (rpcsvc_drc_globals_t *drc, drc_cached_op_t *reply)</div><div class='ctx'>  * @return 0 on success, -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_cache_request (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_cache_request(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                        ret            = -1;</div><div class='del'>-        drc_client_t              *client         = NULL;</div><div class='del'>-        drc_cached_op_t           *reply          = NULL;</div><div class='del'>-        rpcsvc_drc_globals_t      *drc            = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (req);</div><div class='del'>-</div><div class='del'>-        drc = req-&gt;svc-&gt;drc;</div><div class='del'>-</div><div class='del'>-        client = req-&gt;trans-&gt;drc_client;</div><div class='del'>-        if (!client) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "drc client is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        reply = mem_get0 (drc-&gt;mempool);</div><div class='del'>-        if (!reply)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        reply-&gt;client = rpcsvc_drc_client_ref (client);</div><div class='del'>-        reply-&gt;xid = req-&gt;xid;</div><div class='del'>-        reply-&gt;prognum = req-&gt;prognum;</div><div class='del'>-        reply-&gt;progversion = req-&gt;progver;</div><div class='del'>-        reply-&gt;procnum = req-&gt;procnum;</div><div class='del'>-        reply-&gt;state = DRC_OP_IN_TRANSIT;</div><div class='del'>-        req-&gt;reply = reply;</div><div class='del'>-        INIT_LIST_HEAD (&amp;reply-&gt;global_list);</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_add_op_to_cache (drc, reply);</div><div class='del'>-        if (ret) {</div><div class='del'>-                req-&gt;reply = NULL;</div><div class='del'>-                rpcsvc_drc_op_destroy (drc, reply);</div><div class='del'>-                rpcsvc_drc_client_unref (drc, client);</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Failed to add op to drc cache");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='add'>+    drc_cached_op_t *reply = NULL;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(req);</div><div class='add'>+</div><div class='add'>+    drc = req-&gt;svc-&gt;drc;</div><div class='add'>+</div><div class='add'>+    client = req-&gt;trans-&gt;drc_client;</div><div class='add'>+    if (!client) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG, "drc client is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    reply = mem_get0(drc-&gt;mempool);</div><div class='add'>+    if (!reply)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    reply-&gt;client = rpcsvc_drc_client_ref(client);</div><div class='add'>+    reply-&gt;xid = req-&gt;xid;</div><div class='add'>+    reply-&gt;prognum = req-&gt;prognum;</div><div class='add'>+    reply-&gt;progversion = req-&gt;progver;</div><div class='add'>+    reply-&gt;procnum = req-&gt;procnum;</div><div class='add'>+    reply-&gt;state = DRC_OP_IN_TRANSIT;</div><div class='add'>+    req-&gt;reply = reply;</div><div class='add'>+    INIT_LIST_HEAD(&amp;reply-&gt;global_list);</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_add_op_to_cache(drc, reply);</div><div class='add'>+    if (ret) {</div><div class='add'>+        req-&gt;reply = NULL;</div><div class='add'>+        rpcsvc_drc_op_destroy(drc, reply);</div><div class='add'>+        rpcsvc_drc_client_unref(drc, client);</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG, "Failed to add op to drc cache");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -531,72 +529,76 @@ rpcsvc_cache_request (rpcsvc_request_t *req)</div><div class='ctx'>  * @return 0 on success, -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-rpcsvc_drc_priv (rpcsvc_drc_globals_t *drc)</div><div class='add'>+rpcsvc_drc_priv(rpcsvc_drc_globals_t *drc)</div><div class='ctx'> {</div><div class='del'>-        int                      i                         = 0;</div><div class='del'>-        char                     key[GF_DUMP_MAX_BUF_LEN]  = {0};</div><div class='del'>-        drc_client_t            *client                    = NULL;</div><div class='del'>-        char                     ip[INET6_ADDRSTRLEN]      = {0};</div><div class='del'>-</div><div class='del'>-        if (!drc || drc-&gt;status == DRC_UNINITIATED) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "DRC is "</div><div class='del'>-                        "uninitialized, not dumping its state");</div><div class='del'>-                return 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {0};</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='add'>+    char ip[INET6_ADDRSTRLEN] = {0};</div><div class='add'>+</div><div class='add'>+    if (!drc || drc-&gt;status == DRC_UNINITIATED) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "DRC is "</div><div class='add'>+               "uninitialized, not dumping its state");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_add_section("rpc.drc");</div><div class='add'>+</div><div class='add'>+    if (TRY_LOCK(&amp;drc-&gt;lock))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "type");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;type);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "client_count");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;client_count);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "current_cache_size");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;op_count);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "max_cache_size");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;global_cache_size);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "lru_factor");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;lru_factor);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "duplicate_request_count");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;cache_hits);</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "drc", "in_transit_duplicate_requests");</div><div class='add'>+    gf_proc_dump_write(key, "%d", drc-&gt;intransit_hits);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(client, &amp;drc-&gt;clients_head, client_list)</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_build_key(key, "client", "%d.ip-address", i);</div><div class='add'>+        memset(ip, 0, INET6_ADDRSTRLEN);</div><div class='add'>+        switch (client-&gt;sock_union.storage.ss_family) {</div><div class='add'>+            case AF_INET:</div><div class='add'>+                gf_proc_dump_write(</div><div class='add'>+                    key, "%s",</div><div class='add'>+                    inet_ntop(AF_INET, &amp;client-&gt;sock_union.sin.sin_addr.s_addr,</div><div class='add'>+                              ip, INET_ADDRSTRLEN));</div><div class='add'>+                break;</div><div class='add'>+            case AF_INET6:</div><div class='add'>+                gf_proc_dump_write(</div><div class='add'>+                    key, "%s",</div><div class='add'>+                    inet_ntop(AF_INET6, &amp;client-&gt;sock_union.sin6.sin6_addr, ip,</div><div class='add'>+                              INET6_ADDRSTRLEN));</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                gf_proc_dump_write(key, "%s", "N/A");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section("rpc.drc");</div><div class='del'>-</div><div class='del'>-        if (TRY_LOCK (&amp;drc-&gt;lock))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "type");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;type);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "client_count");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;client_count);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "current_cache_size");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;op_count);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "max_cache_size");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;global_cache_size);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "lru_factor");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;lru_factor);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "duplicate_request_count");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;cache_hits);</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "drc", "in_transit_duplicate_requests");</div><div class='del'>-        gf_proc_dump_write (key, "%d", drc-&gt;intransit_hits);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (client, &amp;drc-&gt;clients_head, client_list) {</div><div class='del'>-                gf_proc_dump_build_key (key, "client", "%d.ip-address", i);</div><div class='del'>-                memset (ip, 0, INET6_ADDRSTRLEN);</div><div class='del'>-                switch (client-&gt;sock_union.storage.ss_family) {</div><div class='del'>-                case AF_INET:</div><div class='del'>-                        gf_proc_dump_write (key, "%s", inet_ntop (AF_INET,</div><div class='del'>-                                &amp;client-&gt;sock_union.sin.sin_addr.s_addr,</div><div class='del'>-                                ip, INET_ADDRSTRLEN));</div><div class='del'>-                        break;</div><div class='del'>-                case AF_INET6:</div><div class='del'>-                        gf_proc_dump_write (key, "%s", inet_ntop (AF_INET6,</div><div class='del'>-                                &amp;client-&gt;sock_union.sin6.sin6_addr,</div><div class='del'>-                                ip, INET6_ADDRSTRLEN));</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        gf_proc_dump_write (key, "%s", "N/A");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_build_key (key, "client", "%d.ref_count", i);</div><div class='del'>-                gf_proc_dump_write (key, "%d", client-&gt;ref);</div><div class='del'>-                gf_proc_dump_build_key (key, "client", "%d.op_count", i);</div><div class='del'>-                gf_proc_dump_write (key, "%d", client-&gt;op_count);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        gf_proc_dump_build_key(key, "client", "%d.ref_count", i);</div><div class='add'>+        gf_proc_dump_write(key, "%d", client-&gt;ref);</div><div class='add'>+        gf_proc_dump_build_key(key, "client", "%d.op_count", i);</div><div class='add'>+        gf_proc_dump_write(key, "%d", client-&gt;op_count);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;drc-&gt;lock);</div><div class='del'>-        return 0;</div><div class='add'>+    UNLOCK(&amp;drc-&gt;lock);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -609,53 +611,51 @@ rpcsvc_drc_priv (rpcsvc_drc_globals_t *drc)</div><div class='ctx'>  * @return 0 on success, -1 on failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_drc_notify (rpcsvc_t *svc, void *xl,</div><div class='del'>-                   rpcsvc_event_t event, void *data)</div><div class='add'>+rpcsvc_drc_notify(rpcsvc_t *svc, void *xl, rpcsvc_event_t event, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                       ret          = -1;</div><div class='del'>-        rpc_transport_t          *trans        = NULL;</div><div class='del'>-        drc_client_t             *client       = NULL;</div><div class='del'>-        rpcsvc_drc_globals_t     *drc          = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (svc);</div><div class='del'>-        GF_ASSERT (svc-&gt;drc);</div><div class='del'>-        GF_ASSERT (data);</div><div class='del'>-</div><div class='del'>-        drc = svc-&gt;drc;</div><div class='del'>-</div><div class='del'>-        if (drc-&gt;status == DRC_UNINITIATED ||</div><div class='del'>-            drc-&gt;type == DRC_TYPE_NONE)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;drc-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                trans = (rpc_transport_t *)data;</div><div class='del'>-                client = rpcsvc_get_drc_client (drc, &amp;trans-&gt;peerinfo.sockaddr);</div><div class='del'>-                if (!client)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                switch (event) {</div><div class='del'>-                case RPCSVC_EVENT_ACCEPT:</div><div class='del'>-                        trans-&gt;drc_client = rpcsvc_drc_client_ref (client);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case RPCSVC_EVENT_DISCONNECT:</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        if (list_empty (&amp;drc-&gt;clients_head))</div><div class='del'>-                                break;</div><div class='del'>-                        /* should be the last unref */</div><div class='del'>-                        trans-&gt;drc_client = NULL;</div><div class='del'>-                        rpcsvc_drc_client_unref (drc, client);</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    drc_client_t *client = NULL;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(svc);</div><div class='add'>+    GF_ASSERT(svc-&gt;drc);</div><div class='add'>+    GF_ASSERT(data);</div><div class='add'>+</div><div class='add'>+    drc = svc-&gt;drc;</div><div class='add'>+</div><div class='add'>+    if (drc-&gt;status == DRC_UNINITIATED || drc-&gt;type == DRC_TYPE_NONE)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;drc-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        trans = (rpc_transport_t *)data;</div><div class='add'>+        client = rpcsvc_get_drc_client(drc, &amp;trans-&gt;peerinfo.sockaddr);</div><div class='add'>+        if (!client)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        switch (event) {</div><div class='add'>+            case RPCSVC_EVENT_ACCEPT:</div><div class='add'>+                trans-&gt;drc_client = rpcsvc_drc_client_ref(client);</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            case RPCSVC_EVENT_DISCONNECT:</div><div class='add'>+                ret = 0;</div><div class='add'>+                if (list_empty(&amp;drc-&gt;clients_head))</div><div class='add'>+                    break;</div><div class='add'>+                /* should be the last unref */</div><div class='add'>+                trans-&gt;drc_client = NULL;</div><div class='add'>+                rpcsvc_drc_client_unref(drc, client);</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;drc-&gt;lock);</div><div class='del'>-        return ret;</div><div class='add'>+    UNLOCK(&amp;drc-&gt;lock);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -666,191 +666,195 @@ unlock:</div><div class='ctx'>  * @return 0 on success, non-zero integer on failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_drc_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_drc_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int                         ret            = 0;</div><div class='del'>-        uint32_t                    drc_type       = 0;</div><div class='del'>-        uint32_t                    drc_size       = 0;</div><div class='del'>-        uint32_t                    drc_factor     = 0;</div><div class='del'>-        rpcsvc_drc_globals_t       *drc            = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (svc);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        /* Toggle DRC on/off, when more drc types(persistent/cluster)</div><div class='del'>-         * are added, we shouldn't treat this as boolean. */</div><div class='del'>-        ret = dict_get_str_boolean (options, "nfs.drc", _gf_false);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_INFO,</div><div class='del'>-                        "drc user options need second look");</div><div class='del'>-                ret = _gf_false;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_INFO, "DRC is turned %s", (ret?"ON":"OFF"));</div><div class='del'>-</div><div class='del'>-        /*DRC off, nothing to do */</div><div class='del'>-        if (ret == _gf_false)</div><div class='del'>-                return (0);</div><div class='del'>-</div><div class='del'>-        drc = GF_CALLOC (1, sizeof (rpcsvc_drc_globals_t),</div><div class='del'>-                         gf_common_mt_drc_globals_t);</div><div class='del'>-        if (!drc)</div><div class='del'>-                return (-1);</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;drc-&gt;lock);</div><div class='del'>-        svc-&gt;drc = drc;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;drc-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* Specify type of DRC to be used */</div><div class='del'>-        ret = dict_get_uint32 (options, "nfs.drc-type", &amp;drc_type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "drc type not set."</div><div class='del'>-                        " Continuing with default");</div><div class='del'>-                drc_type = DRC_DEFAULT_TYPE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        drc-&gt;type = drc_type;</div><div class='del'>-</div><div class='del'>-        /* Set the global cache size (no. of ops to cache) */</div><div class='del'>-        ret = dict_get_uint32 (options, "nfs.drc-size", &amp;drc_size);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "drc size not set."</div><div class='del'>-                        " Continuing with default size");</div><div class='del'>-                drc_size = DRC_DEFAULT_CACHE_SIZE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        drc-&gt;global_cache_size = drc_size;</div><div class='del'>-</div><div class='del'>-        /* Mempool for cached ops */</div><div class='del'>-        drc-&gt;mempool = mem_pool_new (drc_cached_op_t, drc-&gt;global_cache_size);</div><div class='del'>-        if (!drc-&gt;mempool) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to get mempool for"</div><div class='del'>-                        " DRC, drc-size: %d", drc-&gt;global_cache_size);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* What percent of cache to be evicted whenever it fills up */</div><div class='del'>-        ret = dict_get_uint32 (options, "nfs.drc-lru-factor", &amp;drc_factor);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "drc lru factor not set."</div><div class='del'>-                        " Continuing with policy default");</div><div class='del'>-                drc_factor = DRC_DEFAULT_LRU_FACTOR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        drc-&gt;lru_factor = (drc_lru_factor_t) drc_factor;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;drc-&gt;clients_head);</div><div class='del'>-        INIT_LIST_HEAD (&amp;drc-&gt;cache_head);</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_register_notify (svc, rpcsvc_drc_notify, THIS);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "registration of drc_notify function failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t drc_type = 0;</div><div class='add'>+    uint32_t drc_size = 0;</div><div class='add'>+    uint32_t drc_factor = 0;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(svc);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    /* Toggle DRC on/off, when more drc types(persistent/cluster)</div><div class='add'>+     * are added, we shouldn't treat this as boolean. */</div><div class='add'>+    ret = dict_get_str_boolean(options, "nfs.drc", _gf_false);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_INFO, "drc user options need second look");</div><div class='add'>+        ret = _gf_false;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_INFO, "DRC is turned %s", (ret ? "ON" : "OFF"));</div><div class='add'>+</div><div class='add'>+    /*DRC off, nothing to do */</div><div class='add'>+    if (ret == _gf_false)</div><div class='add'>+        return (0);</div><div class='ctx'> </div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_DEBUG, "drc init successful");</div><div class='del'>-        drc-&gt;status = DRC_INITIATED;</div><div class='del'>- out:</div><div class='del'>-        UNLOCK (&amp;drc-&gt;lock);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (drc-&gt;mempool) {</div><div class='del'>-                        mem_pool_destroy (drc-&gt;mempool);</div><div class='del'>-                        drc-&gt;mempool = NULL;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (drc);</div><div class='del'>-                svc-&gt;drc = NULL;</div><div class='add'>+    drc = GF_CALLOC(1, sizeof(rpcsvc_drc_globals_t),</div><div class='add'>+                    gf_common_mt_drc_globals_t);</div><div class='add'>+    if (!drc)</div><div class='add'>+        return (-1);</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;drc-&gt;lock);</div><div class='add'>+    svc-&gt;drc = drc;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;drc-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* Specify type of DRC to be used */</div><div class='add'>+    ret = dict_get_uint32(options, "nfs.drc-type", &amp;drc_type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "drc type not set."</div><div class='add'>+               " Continuing with default");</div><div class='add'>+        drc_type = DRC_DEFAULT_TYPE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    drc-&gt;type = drc_type;</div><div class='add'>+</div><div class='add'>+    /* Set the global cache size (no. of ops to cache) */</div><div class='add'>+    ret = dict_get_uint32(options, "nfs.drc-size", &amp;drc_size);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "drc size not set."</div><div class='add'>+               " Continuing with default size");</div><div class='add'>+        drc_size = DRC_DEFAULT_CACHE_SIZE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    drc-&gt;global_cache_size = drc_size;</div><div class='add'>+</div><div class='add'>+    /* Mempool for cached ops */</div><div class='add'>+    drc-&gt;mempool = mem_pool_new(drc_cached_op_t, drc-&gt;global_cache_size);</div><div class='add'>+    if (!drc-&gt;mempool) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Failed to get mempool for"</div><div class='add'>+               " DRC, drc-size: %d",</div><div class='add'>+               drc-&gt;global_cache_size);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* What percent of cache to be evicted whenever it fills up */</div><div class='add'>+    ret = dict_get_uint32(options, "nfs.drc-lru-factor", &amp;drc_factor);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "drc lru factor not set."</div><div class='add'>+               " Continuing with policy default");</div><div class='add'>+        drc_factor = DRC_DEFAULT_LRU_FACTOR;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    drc-&gt;lru_factor = (drc_lru_factor_t)drc_factor;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;drc-&gt;clients_head);</div><div class='add'>+    INIT_LIST_HEAD(&amp;drc-&gt;cache_head);</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_register_notify(svc, rpcsvc_drc_notify, THIS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "registration of drc_notify function failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_DEBUG, "drc init successful");</div><div class='add'>+    drc-&gt;status = DRC_INITIATED;</div><div class='add'>+out:</div><div class='add'>+    UNLOCK(&amp;drc-&gt;lock);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (drc-&gt;mempool) {</div><div class='add'>+            mem_pool_destroy(drc-&gt;mempool);</div><div class='add'>+            drc-&gt;mempool = NULL;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+        GF_FREE(drc);</div><div class='add'>+        svc-&gt;drc = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_drc_deinit (rpcsvc_t *svc)</div><div class='add'>+rpcsvc_drc_deinit(rpcsvc_t *svc)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_drc_globals_t *drc  = NULL;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!svc)</div><div class='del'>-                return (-1);</div><div class='add'>+    if (!svc)</div><div class='add'>+        return (-1);</div><div class='ctx'> </div><div class='del'>-        drc = svc-&gt;drc;</div><div class='del'>-        if (!drc)</div><div class='del'>-                return (0);</div><div class='add'>+    drc = svc-&gt;drc;</div><div class='add'>+    if (!drc)</div><div class='add'>+        return (0);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;drc-&gt;lock);</div><div class='del'>-        (void) rpcsvc_unregister_notify (svc, rpcsvc_drc_notify, THIS);</div><div class='del'>-        if (drc-&gt;mempool) {</div><div class='del'>-                mem_pool_destroy (drc-&gt;mempool);</div><div class='del'>-                drc-&gt;mempool = NULL;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;drc-&gt;lock);</div><div class='add'>+    LOCK(&amp;drc-&gt;lock);</div><div class='add'>+    (void)rpcsvc_unregister_notify(svc, rpcsvc_drc_notify, THIS);</div><div class='add'>+    if (drc-&gt;mempool) {</div><div class='add'>+        mem_pool_destroy(drc-&gt;mempool);</div><div class='add'>+        drc-&gt;mempool = NULL;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;drc-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (drc);</div><div class='del'>-        svc-&gt;drc = NULL;</div><div class='add'>+    GF_FREE(drc);</div><div class='add'>+    svc-&gt;drc = NULL;</div><div class='ctx'> </div><div class='del'>-        return (0);</div><div class='add'>+    return (0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_drc_reconfigure (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_drc_reconfigure(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int                     ret        = -1;</div><div class='del'>-        gf_boolean_t            enable_drc = _gf_false;</div><div class='del'>-        rpcsvc_drc_globals_t    *drc       = NULL;</div><div class='del'>-        uint32_t                drc_size   = 0;</div><div class='del'>-</div><div class='del'>-        /* Input sanitization */</div><div class='del'>-        if ((!svc) || (!options))</div><div class='del'>-                return (-1);</div><div class='del'>-</div><div class='del'>-        /* If DRC was not enabled before, Let rpcsvc_drc_init() to</div><div class='del'>-         * take care of DRC initialization part.</div><div class='del'>-         */</div><div class='del'>-        drc = svc-&gt;drc;</div><div class='del'>-        if (!drc) {</div><div class='del'>-                return rpcsvc_drc_init(svc, options);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* DRC was already enabled before. Going to be reconfigured. Check</div><div class='del'>-         * if reconfigured options contain "nfs.drc" and "nfs.drc-size".</div><div class='del'>-         *</div><div class='del'>-         * NB: If DRC is "OFF", "drc-size" has no role to play.</div><div class='del'>-         *     So, "drc-size" gets evaluated IFF DRC is "ON".</div><div class='del'>-         *</div><div class='del'>-         * If DRC is reconfigured,</div><div class='del'>-         *     case 1: DRC is "ON"</div><div class='del'>-         *         sub-case 1: drc-size remains same</div><div class='del'>-         *              ACTION: Nothing to do.</div><div class='del'>-         *         sub-case 2: drc-size just changed</div><div class='del'>-         *              ACTION: rpcsvc_drc_deinit() followed by</div><div class='del'>-         *                      rpcsvc_drc_init().</div><div class='del'>-         *</div><div class='del'>-         *     case 2: DRC is "OFF"</div><div class='del'>-         *         ACTION: rpcsvc_drc_deinit()</div><div class='del'>-         */</div><div class='del'>-        ret = dict_get_str_boolean (options, "nfs.drc", _gf_false);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                ret = _gf_false;</div><div class='del'>-</div><div class='del'>-        enable_drc = ret;</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_INFO, "DRC is turned %s", (ret?"ON":"OFF"));</div><div class='del'>-</div><div class='del'>-        /* case 1: DRC is "ON"*/</div><div class='del'>-        if (enable_drc) {</div><div class='del'>-                /* Fetch drc-size if reconfigured */</div><div class='del'>-                if (dict_get_uint32 (options, "nfs.drc-size", &amp;drc_size))</div><div class='del'>-                        drc_size = DRC_DEFAULT_CACHE_SIZE;</div><div class='del'>-</div><div class='del'>-                /* case 1: sub-case 1*/</div><div class='del'>-                if (drc-&gt;global_cache_size == drc_size)</div><div class='del'>-                        return (0);</div><div class='del'>-</div><div class='del'>-                /* case 1: sub-case 2*/</div><div class='del'>-                (void) rpcsvc_drc_deinit (svc);</div><div class='del'>-                return rpcsvc_drc_init (svc, options);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* case 2: DRC is "OFF" */</div><div class='del'>-        return rpcsvc_drc_deinit (svc);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t enable_drc = _gf_false;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='add'>+    uint32_t drc_size = 0;</div><div class='add'>+</div><div class='add'>+    /* Input sanitization */</div><div class='add'>+    if ((!svc) || (!options))</div><div class='add'>+        return (-1);</div><div class='add'>+</div><div class='add'>+    /* If DRC was not enabled before, Let rpcsvc_drc_init() to</div><div class='add'>+     * take care of DRC initialization part.</div><div class='add'>+     */</div><div class='add'>+    drc = svc-&gt;drc;</div><div class='add'>+    if (!drc) {</div><div class='add'>+        return rpcsvc_drc_init(svc, options);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* DRC was already enabled before. Going to be reconfigured. Check</div><div class='add'>+     * if reconfigured options contain "nfs.drc" and "nfs.drc-size".</div><div class='add'>+     *</div><div class='add'>+     * NB: If DRC is "OFF", "drc-size" has no role to play.</div><div class='add'>+     *     So, "drc-size" gets evaluated IFF DRC is "ON".</div><div class='add'>+     *</div><div class='add'>+     * If DRC is reconfigured,</div><div class='add'>+     *     case 1: DRC is "ON"</div><div class='add'>+     *         sub-case 1: drc-size remains same</div><div class='add'>+     *              ACTION: Nothing to do.</div><div class='add'>+     *         sub-case 2: drc-size just changed</div><div class='add'>+     *              ACTION: rpcsvc_drc_deinit() followed by</div><div class='add'>+     *                      rpcsvc_drc_init().</div><div class='add'>+     *</div><div class='add'>+     *     case 2: DRC is "OFF"</div><div class='add'>+     *         ACTION: rpcsvc_drc_deinit()</div><div class='add'>+     */</div><div class='add'>+    ret = dict_get_str_boolean(options, "nfs.drc", _gf_false);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        ret = _gf_false;</div><div class='add'>+</div><div class='add'>+    enable_drc = ret;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_INFO, "DRC is turned %s", (ret ? "ON" : "OFF"));</div><div class='add'>+</div><div class='add'>+    /* case 1: DRC is "ON"*/</div><div class='add'>+    if (enable_drc) {</div><div class='add'>+        /* Fetch drc-size if reconfigured */</div><div class='add'>+        if (dict_get_uint32(options, "nfs.drc-size", &amp;drc_size))</div><div class='add'>+            drc_size = DRC_DEFAULT_CACHE_SIZE;</div><div class='add'>+</div><div class='add'>+        /* case 1: sub-case 1*/</div><div class='add'>+        if (drc-&gt;global_cache_size == drc_size)</div><div class='add'>+            return (0);</div><div class='add'>+</div><div class='add'>+        /* case 1: sub-case 2*/</div><div class='add'>+        (void)rpcsvc_drc_deinit(svc);</div><div class='add'>+        return rpcsvc_drc_init(svc, options);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* case 2: DRC is "OFF" */</div><div class='add'>+    return rpcsvc_drc_deinit(svc);</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/rpc-transport.c b/rpc/rpc-lib/src/rpc-transport.c<br/>index 062d7905fe0..d70334476c7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-transport.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/rpc-transport.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpc-transport.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpc-transport.c</a></div><div class='hunk'>@@ -29,696 +29,668 @@</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_count (const char *transport_type)</div><div class='add'>+rpc_transport_count(const char *transport_type)</div><div class='ctx'> {</div><div class='del'>-        char     *transport_dup   = NULL;</div><div class='del'>-        char     *saveptr         = NULL;</div><div class='del'>-        char     *ptr             = NULL;</div><div class='del'>-        int       count           = 0;</div><div class='del'>-</div><div class='del'>-        if (transport_type == NULL)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        transport_dup = gf_strdup (transport_type);</div><div class='del'>-        if (transport_dup == NULL) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ptr = strtok_r (transport_dup, ",", &amp;saveptr);</div><div class='del'>-        while (ptr != NULL) {</div><div class='del'>-                count++;</div><div class='del'>-                ptr = strtok_r (NULL, ",", &amp;saveptr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (transport_dup);</div><div class='del'>-        return count;</div><div class='add'>+    char *transport_dup = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    if (transport_type == NULL)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    transport_dup = gf_strdup(transport_type);</div><div class='add'>+    if (transport_dup == NULL) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ptr = strtok_r(transport_dup, ",", &amp;saveptr);</div><div class='add'>+    while (ptr != NULL) {</div><div class='add'>+        count++;</div><div class='add'>+        ptr = strtok_r(NULL, ",", &amp;saveptr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(transport_dup);</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_transport_get_myaddr (rpc_transport_t *this, char *peeraddr, int addrlen,</div><div class='del'>-                          struct sockaddr_storage *sa, size_t salen)</div><div class='add'>+rpc_transport_get_myaddr(rpc_transport_t *this, char *peeraddr, int addrlen,</div><div class='add'>+                         struct sockaddr_storage *sa, size_t salen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", this, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = this-&gt;ops-&gt;get_myaddr (this, peeraddr, addrlen, sa, salen);</div><div class='add'>+    ret = this-&gt;ops-&gt;get_myaddr(this, peeraddr, addrlen, sa, salen);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_get_myname (rpc_transport_t *this, char *hostname, int hostlen)</div><div class='add'>+rpc_transport_get_myname(rpc_transport_t *this, char *hostname, int hostlen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", this, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = this-&gt;ops-&gt;get_myname (this, hostname, hostlen);</div><div class='add'>+    ret = this-&gt;ops-&gt;get_myname(this, hostname, hostlen);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_get_peername (rpc_transport_t *this, char *hostname, int hostlen)</div><div class='add'>+rpc_transport_get_peername(rpc_transport_t *this, char *hostname, int hostlen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", this, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = this-&gt;ops-&gt;get_peername (this, hostname, hostlen);</div><div class='add'>+    ret = this-&gt;ops-&gt;get_peername(this, hostname, hostlen);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_transport_throttle (rpc_transport_t *this, gf_boolean_t onoff)</div><div class='add'>+rpc_transport_throttle(rpc_transport_t *this, gf_boolean_t onoff)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;ops-&gt;throttle)</div><div class='del'>-                return -ENOSYS;</div><div class='add'>+    if (!this-&gt;ops-&gt;throttle)</div><div class='add'>+        return -ENOSYS;</div><div class='ctx'> </div><div class='del'>-        ret = this-&gt;ops-&gt;throttle (this, onoff);</div><div class='add'>+    ret = this-&gt;ops-&gt;throttle(this, onoff);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_get_peeraddr (rpc_transport_t *this, char *peeraddr, int addrlen,</div><div class='del'>-                            struct sockaddr_storage *sa, size_t salen)</div><div class='add'>+rpc_transport_get_peeraddr(rpc_transport_t *this, char *peeraddr, int addrlen,</div><div class='add'>+                           struct sockaddr_storage *sa, size_t salen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", this, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = this-&gt;ops-&gt;get_peeraddr (this, peeraddr, addrlen, sa, salen);</div><div class='add'>+    ret = this-&gt;ops-&gt;get_peeraddr(this, peeraddr, addrlen, sa, salen);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rpc_transport_pollin_destroy (rpc_transport_pollin_t *pollin)</div><div class='add'>+rpc_transport_pollin_destroy(rpc_transport_pollin_t *pollin)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", pollin, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", pollin, out);</div><div class='ctx'> </div><div class='del'>-        if (pollin-&gt;iobref) {</div><div class='del'>-                iobref_unref (pollin-&gt;iobref);</div><div class='del'>-        }</div><div class='add'>+    if (pollin-&gt;iobref) {</div><div class='add'>+        iobref_unref(pollin-&gt;iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (pollin-&gt;private) {</div><div class='del'>-                /* */</div><div class='del'>-                GF_FREE (pollin-&gt;private);</div><div class='del'>-        }</div><div class='add'>+    if (pollin-&gt;private) {</div><div class='add'>+        /* */</div><div class='add'>+        GF_FREE(pollin-&gt;private);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (pollin);</div><div class='add'>+    GF_FREE(pollin);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpc_transport_pollin_t *</div><div class='del'>-rpc_transport_pollin_alloc (rpc_transport_t *this, struct iovec *vector,</div><div class='del'>-                            int count, struct iobuf *hdr_iobuf,</div><div class='del'>-                            struct iobref *iobref, void *private)</div><div class='add'>+rpc_transport_pollin_alloc(rpc_transport_t *this, struct iovec *vector,</div><div class='add'>+                           int count, struct iobuf *hdr_iobuf,</div><div class='add'>+                           struct iobref *iobref, void *private)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_pollin_t *msg = NULL;</div><div class='del'>-        msg = GF_CALLOC (1, sizeof (*msg), gf_common_mt_rpc_trans_pollin_t);</div><div class='del'>-        if (!msg) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (count &gt; 1) {</div><div class='del'>-                msg-&gt;vectored = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (msg-&gt;vector, vector, count * sizeof (*vector));</div><div class='del'>-        msg-&gt;count = count;</div><div class='del'>-        msg-&gt;iobref = iobref_ref (iobref);</div><div class='del'>-        msg-&gt;private = private;</div><div class='del'>-        if (hdr_iobuf)</div><div class='del'>-                iobref_add (iobref, hdr_iobuf);</div><div class='add'>+    rpc_transport_pollin_t *msg = NULL;</div><div class='add'>+    msg = GF_CALLOC(1, sizeof(*msg), gf_common_mt_rpc_trans_pollin_t);</div><div class='add'>+    if (!msg) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (count &gt; 1) {</div><div class='add'>+        msg-&gt;vectored = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(msg-&gt;vector, vector, count * sizeof(*vector));</div><div class='add'>+    msg-&gt;count = count;</div><div class='add'>+    msg-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+    msg-&gt;private = private;</div><div class='add'>+    if (hdr_iobuf)</div><div class='add'>+        iobref_add(iobref, hdr_iobuf);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return msg;</div><div class='add'>+    return msg;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> rpc_transport_t *</div><div class='del'>-rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)</div><div class='add'>+rpc_transport_load(glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)</div><div class='ctx'> {</div><div class='del'>-	struct rpc_transport *trans = NULL, *return_trans = NULL;</div><div class='del'>-	char *name = NULL;</div><div class='del'>-	void *handle = NULL;</div><div class='del'>-	char *type = NULL;</div><div class='del'>-	char str[] = "ERROR";</div><div class='del'>-	int32_t ret = -1;</div><div class='del'>-	int is_tcp = 0, is_unix = 0, is_ibsdp = 0;</div><div class='del'>-	volume_opt_list_t *vol_opt = NULL;</div><div class='del'>-        gf_boolean_t bind_insecure = _gf_false;</div><div class='del'>-        xlator_t   *this = NULL;</div><div class='del'>-        gf_boolean_t    success = _gf_false;</div><div class='del'>-</div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc-transport", options, fail);</div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc-transport", ctx, fail);</div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc-transport", trans_name, fail);</div><div class='del'>-</div><div class='del'>-	trans = GF_CALLOC (1, sizeof (struct rpc_transport), gf_common_mt_rpc_trans_t);</div><div class='del'>-        if (!trans)</div><div class='del'>-                goto fail;</div><div class='del'>-</div><div class='del'>-        trans-&gt;name = gf_strdup (trans_name);</div><div class='del'>-        if (!trans-&gt;name)</div><div class='del'>-                goto fail;</div><div class='del'>-</div><div class='del'>-	trans-&gt;ctx = ctx;</div><div class='del'>-	type = str;</div><div class='del'>-</div><div class='del'>-	/* Backward compatibility */</div><div class='del'>-        ret = dict_get_str (options, "transport-type", &amp;type);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		ret = dict_set_str (options, "transport-type", "socket");</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			gf_log ("dict", GF_LOG_DEBUG,</div><div class='del'>-				"setting transport-type failed");</div><div class='del'>-                else</div><div class='del'>-                        gf_log ("rpc-transport", GF_LOG_DEBUG,</div><div class='del'>-                                "missing 'option transport-type'. defaulting to "</div><div class='del'>-                                "\"socket\"");</div><div class='del'>-	} else {</div><div class='del'>-		{</div><div class='del'>-			/* Backward compatibility to handle * /client,</div><div class='del'>-			 * * /server.</div><div class='del'>-			 */</div><div class='del'>-			char *tmp = strchr (type, '/');</div><div class='del'>-			if (tmp)</div><div class='del'>-				*tmp = '\0';</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		is_tcp = strcmp (type, "tcp");</div><div class='del'>-		is_unix = strcmp (type, "unix");</div><div class='del'>-		is_ibsdp = strcmp (type, "ib-sdp");</div><div class='del'>-		if ((is_tcp == 0) ||</div><div class='del'>-		    (is_unix == 0) ||</div><div class='del'>-		    (is_ibsdp == 0)) {</div><div class='del'>-			if (is_unix == 0)</div><div class='del'>-				ret = dict_set_str (options,</div><div class='del'>-						    "transport.address-family",</div><div class='del'>-						    "unix");</div><div class='del'>-			if (is_ibsdp == 0)</div><div class='del'>-				ret = dict_set_str (options,</div><div class='del'>-						    "transport.address-family",</div><div class='del'>-						    "inet-sdp");</div><div class='del'>-</div><div class='del'>-			if (ret &lt; 0)</div><div class='del'>-				gf_log ("dict", GF_LOG_DEBUG,</div><div class='del'>-					"setting address-family failed");</div><div class='del'>-</div><div class='del'>-			ret = dict_set_str (options,</div><div class='del'>-					    "transport-type", "socket");</div><div class='del'>-			if (ret &lt; 0)</div><div class='del'>-				gf_log ("dict", GF_LOG_DEBUG,</div><div class='del'>-					"setting transport-type failed");</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* client-bind-insecure is for clients protocol, and</div><div class='del'>-         * bind-insecure for glusterd. Both mutually exclusive</div><div class='del'>-        */</div><div class='del'>-        ret = dict_get_str (options, "client-bind-insecure", &amp;type);</div><div class='del'>-        if (ret)</div><div class='del'>-                ret = dict_get_str (options, "bind-insecure", &amp;type);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = gf_string2boolean (type, &amp;bind_insecure);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log ("rcp-transport", GF_LOG_WARNING,</div><div class='del'>-                                "bind-insecure option %s is not a"</div><div class='del'>-                                " valid bool option", type);</div><div class='del'>-                        goto fail;</div><div class='del'>-                }</div><div class='del'>-                if (_gf_true == bind_insecure)</div><div class='del'>-                        trans-&gt;bind_insecure = 1;</div><div class='del'>-                else</div><div class='del'>-                        trans-&gt;bind_insecure = 0;</div><div class='del'>-        } else {</div><div class='del'>-                /* By default allow bind insecure */</div><div class='del'>-                trans-&gt;bind_insecure = 1;</div><div class='add'>+    struct rpc_transport *trans = NULL, *return_trans = NULL;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    void *handle = NULL;</div><div class='add'>+    char *type = NULL;</div><div class='add'>+    char str[] = "ERROR";</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int is_tcp = 0, is_unix = 0, is_ibsdp = 0;</div><div class='add'>+    volume_opt_list_t *vol_opt = NULL;</div><div class='add'>+    gf_boolean_t bind_insecure = _gf_false;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_boolean_t success = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc-transport", options, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc-transport", ctx, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc-transport", trans_name, fail);</div><div class='add'>+</div><div class='add'>+    trans = GF_CALLOC(1, sizeof(struct rpc_transport),</div><div class='add'>+                      gf_common_mt_rpc_trans_t);</div><div class='add'>+    if (!trans)</div><div class='add'>+        goto fail;</div><div class='add'>+</div><div class='add'>+    trans-&gt;name = gf_strdup(trans_name);</div><div class='add'>+    if (!trans-&gt;name)</div><div class='add'>+        goto fail;</div><div class='add'>+</div><div class='add'>+    trans-&gt;ctx = ctx;</div><div class='add'>+    type = str;</div><div class='add'>+</div><div class='add'>+    /* Backward compatibility */</div><div class='add'>+    ret = dict_get_str(options, "transport-type", &amp;type);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = dict_set_str(options, "transport-type", "socket");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_log("dict", GF_LOG_DEBUG, "setting transport-type failed");</div><div class='add'>+        else</div><div class='add'>+            gf_log("rpc-transport", GF_LOG_DEBUG,</div><div class='add'>+                   "missing 'option transport-type'. defaulting to "</div><div class='add'>+                   "\"socket\"");</div><div class='add'>+    } else {</div><div class='add'>+        {</div><div class='add'>+            /* Backward compatibility to handle * /client,</div><div class='add'>+             * * /server.</div><div class='add'>+             */</div><div class='add'>+            char *tmp = strchr(type, '/');</div><div class='add'>+            if (tmp)</div><div class='add'>+                *tmp = '\0';</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	ret = dict_get_str (options, "transport-type", &amp;type);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_ERROR,</div><div class='del'>-			"'option transport-type &lt;xx&gt;' missing in volume '%s'",</div><div class='del'>-			trans_name);</div><div class='del'>-		goto fail;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = gf_asprintf (&amp;name, "%s/%s.so", RPC_TRANSPORTDIR, type);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                goto fail;</div><div class='add'>+        is_tcp = strcmp(type, "tcp");</div><div class='add'>+        is_unix = strcmp(type, "unix");</div><div class='add'>+        is_ibsdp = strcmp(type, "ib-sdp");</div><div class='add'>+        if ((is_tcp == 0) || (is_unix == 0) || (is_ibsdp == 0)) {</div><div class='add'>+            if (is_unix == 0)</div><div class='add'>+                ret = dict_set_str(options, "transport.address-family", "unix");</div><div class='add'>+            if (is_ibsdp == 0)</div><div class='add'>+                ret = dict_set_str(options, "transport.address-family",</div><div class='add'>+                                   "inet-sdp");</div><div class='add'>+</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                gf_log("dict", GF_LOG_DEBUG, "setting address-family failed");</div><div class='add'>+</div><div class='add'>+            ret = dict_set_str(options, "transport-type", "socket");</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                gf_log("dict", GF_LOG_DEBUG, "setting transport-type failed");</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-	gf_log ("rpc-transport", GF_LOG_DEBUG,</div><div class='del'>-		"attempt to load file %s", name);</div><div class='del'>-</div><div class='del'>-        handle = dlopen (name, RTLD_NOW);</div><div class='del'>-	if (handle == NULL) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_ERROR, "%s", dlerror ());</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_WARNING,</div><div class='del'>-			"volume '%s': transport-type '%s' is not valid or "</div><div class='del'>-			"not found on this machine",</div><div class='del'>-			trans_name, type);</div><div class='del'>-		goto fail;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        trans-&gt;dl_handle = handle;</div><div class='del'>-</div><div class='del'>-	trans-&gt;ops = dlsym (handle, "tops");</div><div class='del'>-	if (trans-&gt;ops == NULL) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_ERROR,</div><div class='del'>-			"dlsym (rpc_transport_ops) on %s", dlerror ());</div><div class='del'>-		goto fail;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	*VOID(&amp;(trans-&gt;init)) = dlsym (handle, "init");</div><div class='del'>-	if (trans-&gt;init == NULL) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_ERROR,</div><div class='del'>-			"dlsym (gf_rpc_transport_init) on %s", dlerror ());</div><div class='del'>-		goto fail;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	*VOID(&amp;(trans-&gt;fini)) = dlsym (handle, "fini");</div><div class='del'>-	if (trans-&gt;fini == NULL) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_ERROR,</div><div class='del'>-			"dlsym (gf_rpc_transport_fini) on %s", dlerror ());</div><div class='del'>-		goto fail;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        *VOID(&amp;(trans-&gt;reconfigure)) = dlsym (handle, "reconfigure");</div><div class='del'>-        if (trans-&gt;reconfigure == NULL) {</div><div class='del'>-                gf_log ("rpc-transport", GF_LOG_DEBUG,</div><div class='del'>-                        "dlsym (gf_rpc_transport_reconfigure) on %s", dlerror());</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* client-bind-insecure is for clients protocol, and</div><div class='add'>+     * bind-insecure for glusterd. Both mutually exclusive</div><div class='add'>+     */</div><div class='add'>+    ret = dict_get_str(options, "client-bind-insecure", &amp;type);</div><div class='add'>+    if (ret)</div><div class='add'>+        ret = dict_get_str(options, "bind-insecure", &amp;type);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = gf_string2boolean(type, &amp;bind_insecure);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log("rcp-transport", GF_LOG_WARNING,</div><div class='add'>+                   "bind-insecure option %s is not a"</div><div class='add'>+                   " valid bool option",</div><div class='add'>+                   type);</div><div class='add'>+            goto fail;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-	vol_opt = GF_CALLOC (1, sizeof (volume_opt_list_t),</div><div class='del'>-                             gf_common_mt_volume_opt_list_t);</div><div class='del'>-        if (!vol_opt) {</div><div class='del'>-                goto fail;</div><div class='add'>+        if (_gf_true == bind_insecure)</div><div class='add'>+            trans-&gt;bind_insecure = 1;</div><div class='add'>+        else</div><div class='add'>+            trans-&gt;bind_insecure = 0;</div><div class='add'>+    } else {</div><div class='add'>+        /* By default allow bind insecure */</div><div class='add'>+        trans-&gt;bind_insecure = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(options, "transport-type", &amp;type);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_ERROR,</div><div class='add'>+               "'option transport-type &lt;xx&gt;' missing in volume '%s'",</div><div class='add'>+               trans_name);</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;name, "%s/%s.so", RPC_TRANSPORTDIR, type);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log("rpc-transport", GF_LOG_DEBUG, "attempt to load file %s", name);</div><div class='add'>+</div><div class='add'>+    handle = dlopen(name, RTLD_NOW);</div><div class='add'>+    if (handle == NULL) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_ERROR, "%s", dlerror());</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_WARNING,</div><div class='add'>+               "volume '%s': transport-type '%s' is not valid or "</div><div class='add'>+               "not found on this machine",</div><div class='add'>+               trans_name, type);</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    trans-&gt;dl_handle = handle;</div><div class='add'>+</div><div class='add'>+    trans-&gt;ops = dlsym(handle, "tops");</div><div class='add'>+    if (trans-&gt;ops == NULL) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_ERROR, "dlsym (rpc_transport_ops) on %s",</div><div class='add'>+               dlerror());</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *VOID(&amp;(trans-&gt;init)) = dlsym(handle, "init");</div><div class='add'>+    if (trans-&gt;init == NULL) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_ERROR,</div><div class='add'>+               "dlsym (gf_rpc_transport_init) on %s", dlerror());</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *VOID(&amp;(trans-&gt;fini)) = dlsym(handle, "fini");</div><div class='add'>+    if (trans-&gt;fini == NULL) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_ERROR,</div><div class='add'>+               "dlsym (gf_rpc_transport_fini) on %s", dlerror());</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *VOID(&amp;(trans-&gt;reconfigure)) = dlsym(handle, "reconfigure");</div><div class='add'>+    if (trans-&gt;reconfigure == NULL) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_DEBUG,</div><div class='add'>+               "dlsym (gf_rpc_transport_reconfigure) on %s", dlerror());</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    vol_opt = GF_CALLOC(1, sizeof(volume_opt_list_t),</div><div class='add'>+                        gf_common_mt_volume_opt_list_t);</div><div class='add'>+    if (!vol_opt) {</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    vol_opt-&gt;given_opt = dlsym(handle, "options");</div><div class='add'>+    if (vol_opt-&gt;given_opt == NULL) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_DEBUG,</div><div class='add'>+               "volume option validation not specified");</div><div class='add'>+    } else {</div><div class='add'>+        INIT_LIST_HEAD(&amp;vol_opt-&gt;list);</div><div class='add'>+        list_add_tail(&amp;vol_opt-&gt;list, &amp;(this-&gt;volume_options));</div><div class='add'>+        if (xlator_options_validate_list(this, options, vol_opt, NULL)) {</div><div class='add'>+            gf_log("rpc-transport", GF_LOG_ERROR,</div><div class='add'>+                   "volume option validation failed");</div><div class='add'>+            goto fail;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-	vol_opt-&gt;given_opt = dlsym (handle, "options");</div><div class='del'>-	if (vol_opt-&gt;given_opt == NULL) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_DEBUG,</div><div class='del'>-			"volume option validation not specified");</div><div class='del'>-	} else {</div><div class='del'>-                INIT_LIST_HEAD (&amp;vol_opt-&gt;list);</div><div class='del'>-		list_add_tail (&amp;vol_opt-&gt;list, &amp;(this-&gt;volume_options));</div><div class='del'>-                if (xlator_options_validate_list (this, options, vol_opt,</div><div class='del'>-                                                  NULL)) {</div><div class='del'>-			gf_log ("rpc-transport", GF_LOG_ERROR,</div><div class='del'>-				"volume option validation failed");</div><div class='del'>-			goto fail;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    trans-&gt;options = options;</div><div class='ctx'> </div><div class='del'>-        trans-&gt;options = options;</div><div class='add'>+    pthread_mutex_init(&amp;trans-&gt;lock, NULL);</div><div class='add'>+    trans-&gt;xl = this;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;trans-&gt;lock, NULL);</div><div class='del'>-        trans-&gt;xl = this;</div><div class='add'>+    ret = trans-&gt;init(trans);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log("rpc-transport", GF_LOG_WARNING, "'%s' initialization failed",</div><div class='add'>+               type);</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = trans-&gt;init (trans);</div><div class='del'>-	if (ret != 0) {</div><div class='del'>-		gf_log ("rpc-transport", GF_LOG_WARNING,</div><div class='del'>-			"'%s' initialization failed", type);</div><div class='del'>-		goto fail;</div><div class='del'>-	}</div><div class='add'>+    INIT_LIST_HEAD(&amp;trans-&gt;list);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;trans-&gt;list);</div><div class='add'>+    return_trans = trans;</div><div class='ctx'> </div><div class='del'>-        return_trans = trans;</div><div class='add'>+    GF_FREE(name);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (name);</div><div class='del'>-</div><div class='del'>-	success = _gf_true;</div><div class='add'>+    success = _gf_true;</div><div class='ctx'> </div><div class='ctx'> fail:</div><div class='del'>-        if (!success) {</div><div class='del'>-                if (trans) {</div><div class='del'>-                        GF_FREE (trans-&gt;name);</div><div class='add'>+    if (!success) {</div><div class='add'>+        if (trans) {</div><div class='add'>+            GF_FREE(trans-&gt;name);</div><div class='ctx'> </div><div class='del'>-                        if (trans-&gt;dl_handle)</div><div class='del'>-                                dlclose (trans-&gt;dl_handle);</div><div class='add'>+            if (trans-&gt;dl_handle)</div><div class='add'>+                dlclose(trans-&gt;dl_handle);</div><div class='ctx'> </div><div class='del'>-                        GF_FREE (trans);</div><div class='del'>-                }</div><div class='add'>+            GF_FREE(trans);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (name);</div><div class='add'>+        GF_FREE(name);</div><div class='ctx'> </div><div class='del'>-                return_trans = NULL;</div><div class='del'>-        }</div><div class='add'>+        return_trans = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (vol_opt) {</div><div class='del'>-                if (!list_empty (&amp;vol_opt-&gt;list)) {</div><div class='del'>-                        list_del_init (&amp;vol_opt-&gt;list);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (vol_opt);</div><div class='add'>+    if (vol_opt) {</div><div class='add'>+        if (!list_empty(&amp;vol_opt-&gt;list)) {</div><div class='add'>+            list_del_init(&amp;vol_opt-&gt;list);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(vol_opt);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return return_trans;</div><div class='add'>+    return return_trans;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_submit_request (rpc_transport_t *this, rpc_transport_req_t *req)</div><div class='add'>+rpc_transport_submit_request(rpc_transport_t *this, rpc_transport_req_t *req)</div><div class='ctx'> {</div><div class='del'>-	int32_t                       ret          = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this-&gt;ops, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this-&gt;ops, fail);</div><div class='ctx'> </div><div class='del'>-	ret = this-&gt;ops-&gt;submit_request (this, req);</div><div class='add'>+    ret = this-&gt;ops-&gt;submit_request(this, req);</div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_submit_reply (rpc_transport_t *this, rpc_transport_reply_t *reply)</div><div class='add'>+rpc_transport_submit_reply(rpc_transport_t *this, rpc_transport_reply_t *reply)</div><div class='ctx'> {</div><div class='del'>-	int32_t                   ret          = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this-&gt;ops, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this-&gt;ops, fail);</div><div class='ctx'> </div><div class='del'>-	ret = this-&gt;ops-&gt;submit_reply (this, reply);</div><div class='add'>+    ret = this-&gt;ops-&gt;submit_reply(this, reply);</div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_connect (rpc_transport_t *this, int port)</div><div class='add'>+rpc_transport_connect(rpc_transport_t *this, int port)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='ctx'> </div><div class='del'>-	ret = this-&gt;ops-&gt;connect (this, port);</div><div class='add'>+    ret = this-&gt;ops-&gt;connect(this, port);</div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_listen (rpc_transport_t *this)</div><div class='add'>+rpc_transport_listen(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='ctx'> </div><div class='del'>-	ret = this-&gt;ops-&gt;listen (this);</div><div class='add'>+    ret = this-&gt;ops-&gt;listen(this);</div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_disconnect (rpc_transport_t *this, gf_boolean_t wait)</div><div class='add'>+rpc_transport_disconnect(rpc_transport_t *this, gf_boolean_t wait)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='ctx'> </div><div class='del'>-        ret = this-&gt;ops-&gt;disconnect (this, wait);</div><div class='add'>+    ret = this-&gt;ops-&gt;disconnect(this, wait);</div><div class='ctx'> </div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_destroy (rpc_transport_t *this)</div><div class='add'>+rpc_transport_destroy(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-	struct dnscache6 *cache = NULL;</div><div class='del'>-	int32_t ret = -1;</div><div class='add'>+    struct dnscache6 *cache = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;clnt_options)</div><div class='del'>-                dict_unref (this-&gt;clnt_options);</div><div class='del'>-        if (this-&gt;options)</div><div class='del'>-                dict_unref (this-&gt;options);</div><div class='del'>-	if (this-&gt;fini)</div><div class='del'>-		this-&gt;fini (this);</div><div class='add'>+    if (this-&gt;clnt_options)</div><div class='add'>+        dict_unref(this-&gt;clnt_options);</div><div class='add'>+    if (this-&gt;options)</div><div class='add'>+        dict_unref(this-&gt;options);</div><div class='add'>+    if (this-&gt;fini)</div><div class='add'>+        this-&gt;fini(this);</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_destroy (&amp;this-&gt;lock);</div><div class='add'>+    pthread_mutex_destroy(&amp;this-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (this-&gt;name);</div><div class='add'>+    GF_FREE(this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;dl_handle)</div><div class='del'>-                dlclose (this-&gt;dl_handle);</div><div class='add'>+    if (this-&gt;dl_handle)</div><div class='add'>+        dlclose(this-&gt;dl_handle);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;ssl_name) {</div><div class='del'>-                GF_FREE(this-&gt;ssl_name);</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;ssl_name) {</div><div class='add'>+        GF_FREE(this-&gt;ssl_name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;dnscache) {</div><div class='del'>-                cache = this-&gt;dnscache;</div><div class='del'>-                if (cache-&gt;first)</div><div class='del'>-                        freeaddrinfo (cache-&gt;first);</div><div class='del'>-                GF_FREE (this-&gt;dnscache);</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;dnscache) {</div><div class='add'>+        cache = this-&gt;dnscache;</div><div class='add'>+        if (cache-&gt;first)</div><div class='add'>+            freeaddrinfo(cache-&gt;first);</div><div class='add'>+        GF_FREE(this-&gt;dnscache);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	GF_FREE (this);</div><div class='add'>+    GF_FREE(this);</div><div class='ctx'> </div><div class='del'>-	ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpc_transport_t *</div><div class='del'>-rpc_transport_ref (rpc_transport_t *this)</div><div class='add'>+rpc_transport_ref(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-	rpc_transport_t *return_this = NULL;</div><div class='add'>+    rpc_transport_t *return_this = NULL;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (this-&gt;refcount);</div><div class='add'>+    GF_ATOMIC_INC(this-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-	return_this = this;</div><div class='add'>+    return_this = this;</div><div class='ctx'> fail:</div><div class='del'>-	return return_this;</div><div class='add'>+    return return_this;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_unref (rpc_transport_t *this)</div><div class='add'>+rpc_transport_unref(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-	int32_t refcount = 0;</div><div class='del'>-	int32_t ret = -1;</div><div class='add'>+    int32_t refcount = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-	GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc_transport", this, fail);</div><div class='ctx'> </div><div class='del'>-        refcount = GF_ATOMIC_DEC (this-&gt;refcount);</div><div class='add'>+    refcount = GF_ATOMIC_DEC(this-&gt;refcount);</div><div class='ctx'> </div><div class='del'>-	if (refcount == 0) {</div><div class='del'>-                if (this-&gt;mydata)</div><div class='del'>-                        this-&gt;notify (this, this-&gt;mydata, RPC_TRANSPORT_CLEANUP,</div><div class='del'>-                                      NULL);</div><div class='del'>-                this-&gt;mydata = NULL;</div><div class='del'>-                this-&gt;notify = NULL;</div><div class='del'>-                rpc_transport_destroy (this);</div><div class='del'>-	}</div><div class='add'>+    if (refcount == 0) {</div><div class='add'>+        if (this-&gt;mydata)</div><div class='add'>+            this-&gt;notify(this, this-&gt;mydata, RPC_TRANSPORT_CLEANUP, NULL);</div><div class='add'>+        this-&gt;mydata = NULL;</div><div class='add'>+        this-&gt;notify = NULL;</div><div class='add'>+        rpc_transport_destroy(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> fail:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpc_transport_notify (rpc_transport_t *this, rpc_transport_event_t event,</div><div class='del'>-                      void *data, ...)</div><div class='add'>+rpc_transport_notify(rpc_transport_t *this, rpc_transport_event_t event,</div><div class='add'>+                     void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", this, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", this, out);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;notify != NULL) {</div><div class='del'>-                ret = this-&gt;notify (this, this-&gt;mydata, event, data);</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;notify != NULL) {</div><div class='add'>+        ret = this-&gt;notify(this, this-&gt;mydata, event, data);</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_transport_register_notify (rpc_transport_t *trans,</div><div class='del'>-                               rpc_transport_notify_t notify, void *mydata)</div><div class='add'>+rpc_transport_register_notify(rpc_transport_t *trans,</div><div class='add'>+                              rpc_transport_notify_t notify, void *mydata)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", trans, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", trans, out);</div><div class='ctx'> </div><div class='del'>-        trans-&gt;notify = notify;</div><div class='del'>-        trans-&gt;mydata = mydata;</div><div class='add'>+    trans-&gt;notify = notify;</div><div class='add'>+    trans-&gt;mydata = mydata;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-//give negative values to skip setting that value</div><div class='del'>-//this function asserts if both the values are negative.</div><div class='del'>-//why call it if you don't set it.</div><div class='add'>+// give negative values to skip setting that value</div><div class='add'>+// this function asserts if both the values are negative.</div><div class='add'>+// why call it if you don't set it.</div><div class='ctx'> int</div><div class='del'>-rpc_transport_keepalive_options_set (dict_t *options, int32_t interval,</div><div class='del'>-                                     int32_t time, int32_t timeout)</div><div class='add'>+rpc_transport_keepalive_options_set(dict_t *options, int32_t interval,</div><div class='add'>+                                    int32_t time, int32_t timeout)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-        GF_ASSERT ((interval &gt; 0) || (time &gt; 0));</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+    GF_ASSERT((interval &gt; 0) || (time &gt; 0));</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (options,</div><div class='del'>-                "transport.socket.keepalive-interval", interval);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "transport.socket.keepalive-interval",</div><div class='add'>+                         interval);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (options,</div><div class='del'>-                "transport.socket.keepalive-time", time);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "transport.socket.keepalive-time", time);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (options,</div><div class='del'>-                "transport.tcp-user-timeout", timeout);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(options, "transport.tcp-user-timeout", timeout);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_transport_unix_options_build (dict_t **options, char *filepath,</div><div class='del'>-                                  int frame_timeout)</div><div class='add'>+rpc_transport_unix_options_build(dict_t **options, char *filepath,</div><div class='add'>+                                 int frame_timeout)</div><div class='ctx'> {</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        char                    *fpath = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (filepath);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fpath = gf_strdup (filepath);</div><div class='del'>-        if (!fpath) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_dynstr (dict, "transport.socket.connect-path", fpath);</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (fpath);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "transport.address-family", "unix");</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *fpath = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(filepath);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fpath = gf_strdup(filepath);</div><div class='add'>+    if (!fpath) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr(dict, "transport.socket.connect-path", fpath);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(fpath);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "transport.address-family", "unix");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "transport.socket.nodelay", "off");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "transport-type", "socket");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "transport.socket.keepalive", "off");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (frame_timeout &gt; 0) {</div><div class='add'>+        ret = dict_set_int32(dict, "frame-timeout", frame_timeout);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "transport.socket.nodelay", "off");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "transport-type", "socket");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "transport.socket.keepalive", "off");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (frame_timeout &gt; 0) {</div><div class='del'>-                ret = dict_set_int32 (dict, "frame-timeout", frame_timeout);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_transport_inet_options_build (dict_t **options, const char *hostname,</div><div class='del'>-                                  int port)</div><div class='add'>+rpc_transport_inet_options_build(dict_t **options, const char *hostname,</div><div class='add'>+                                 int port)</div><div class='ctx'> {</div><div class='del'>-        dict_t          *dict = NULL;</div><div class='del'>-        char            *host = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *host = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #ifdef IPV6_DEFAULT</div><div class='del'>-        char            *addr_family = "inet6";</div><div class='add'>+    char *addr_family = "inet6";</div><div class='ctx'> #else</div><div class='del'>-        char            *addr_family = "inet";</div><div class='add'>+    char *addr_family = "inet";</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-        GF_ASSERT (hostname);</div><div class='del'>-        GF_ASSERT (port &gt;= 1024);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        host = gf_strdup ((char*)hostname);</div><div class='del'>-        if (!host) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_dynstr (dict, "remote-host", host);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set remote-host with %s", host);</div><div class='del'>-                GF_FREE (host);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "remote-port", port);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set remote-port with %d", port);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "address-family", addr_family);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set address-family to %s", addr_family);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, "transport-type", "socket");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set trans-type with socket");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *options = dict;</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+    GF_ASSERT(hostname);</div><div class='add'>+    GF_ASSERT(port &gt;= 1024);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    host = gf_strdup((char *)hostname);</div><div class='add'>+    if (!host) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr(dict, "remote-host", host);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set remote-host with %s",</div><div class='add'>+               host);</div><div class='add'>+        GF_FREE(host);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "remote-port", port);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set remote-port with %d",</div><div class='add'>+               port);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "address-family", addr_family);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set address-family to %s",</div><div class='add'>+               addr_family);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "transport-type", "socket");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to set trans-type with socket");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/rpcsvc-auth.c b/rpc/rpc-lib/src/rpcsvc-auth.c<br/>index ef9b35f56ad..da260ade0c0 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpcsvc-auth.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/rpcsvc-auth.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpcsvc-auth.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpcsvc-auth.c</a></div><div class='hunk'>@@ -13,521 +13,507 @@</div><div class='ctx'> #include "dict.h"</div><div class='ctx'> </div><div class='ctx'> extern rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_null_init (rpcsvc_t *svc, dict_t *options);</div><div class='add'>+rpcsvc_auth_null_init(rpcsvc_t *svc, dict_t *options);</div><div class='ctx'> </div><div class='ctx'> extern rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_unix_init (rpcsvc_t *svc, dict_t *options);</div><div class='add'>+rpcsvc_auth_unix_init(rpcsvc_t *svc, dict_t *options);</div><div class='ctx'> </div><div class='ctx'> extern rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_glusterfs_init (rpcsvc_t *svc, dict_t *options);</div><div class='add'>+rpcsvc_auth_glusterfs_init(rpcsvc_t *svc, dict_t *options);</div><div class='ctx'> extern rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_glusterfs_v2_init (rpcsvc_t *svc, dict_t *options);</div><div class='add'>+rpcsvc_auth_glusterfs_v2_init(rpcsvc_t *svc, dict_t *options);</div><div class='ctx'> extern rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_glusterfs_v3_init (rpcsvc_t *svc, dict_t *options);</div><div class='add'>+rpcsvc_auth_glusterfs_v3_init(rpcsvc_t *svc, dict_t *options);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_add_initer (struct list_head *list, char *idfier,</div><div class='del'>-                        rpcsvc_auth_initer_t init)</div><div class='add'>+rpcsvc_auth_add_initer(struct list_head *list, char *idfier,</div><div class='add'>+                       rpcsvc_auth_initer_t init)</div><div class='ctx'> {</div><div class='del'>-        struct rpcsvc_auth_list         *new = NULL;</div><div class='add'>+    struct rpcsvc_auth_list *new = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!list) || (!init) || (!idfier))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!list) || (!init) || (!idfier))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        new = GF_CALLOC (1, sizeof (*new), gf_common_mt_rpcsvc_auth_list);</div><div class='del'>-        if (!new) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    new = GF_CALLOC(1, sizeof(*new), gf_common_mt_rpcsvc_auth_list);</div><div class='add'>+    if (!new) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        new-&gt;init = init;</div><div class='del'>-        strncpy (new-&gt;name, idfier, sizeof (new-&gt;name) - 1);</div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;authlist);</div><div class='del'>-        list_add_tail (&amp;new-&gt;authlist, list);</div><div class='del'>-        return 0;</div><div class='add'>+    new-&gt;init = init;</div><div class='add'>+    strncpy(new-&gt;name, idfier, sizeof(new-&gt;name) - 1);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;authlist);</div><div class='add'>+    list_add_tail(&amp;new-&gt;authlist, list);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_add_initers (rpcsvc_t *svc)</div><div class='add'>+rpcsvc_auth_add_initers(rpcsvc_t *svc)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_add_initer (&amp;svc-&gt;authschemes, "auth-glusterfs",</div><div class='del'>-                                      (rpcsvc_auth_initer_t)</div><div class='del'>-                                      rpcsvc_auth_glusterfs_init);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_GLUSTERFS");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_add_initer (&amp;svc-&gt;authschemes, "auth-glusterfs-v2",</div><div class='del'>-                                      (rpcsvc_auth_initer_t)</div><div class='del'>-                                      rpcsvc_auth_glusterfs_v2_init);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to add AUTH_GLUSTERFS-v2");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_add_initer (&amp;svc-&gt;authschemes, "auth-glusterfs-v3",</div><div class='del'>-                                      (rpcsvc_auth_initer_t)</div><div class='del'>-                                      rpcsvc_auth_glusterfs_v3_init);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to add AUTH_GLUSTERFS-v3");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_add_initer (&amp;svc-&gt;authschemes, "auth-unix",</div><div class='del'>-                                      (rpcsvc_auth_initer_t)</div><div class='del'>-                                      rpcsvc_auth_unix_init);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_UNIX");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_add_initer (&amp;svc-&gt;authschemes, "auth-null",</div><div class='del'>-                                      (rpcsvc_auth_initer_t)</div><div class='del'>-                                      rpcsvc_auth_null_init);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_NULL");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_add_initer(</div><div class='add'>+        &amp;svc-&gt;authschemes, "auth-glusterfs",</div><div class='add'>+        (rpcsvc_auth_initer_t)rpcsvc_auth_glusterfs_init);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_GLUSTERFS");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_add_initer(</div><div class='add'>+        &amp;svc-&gt;authschemes, "auth-glusterfs-v2",</div><div class='add'>+        (rpcsvc_auth_initer_t)rpcsvc_auth_glusterfs_v2_init);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_GLUSTERFS-v2");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_add_initer(</div><div class='add'>+        &amp;svc-&gt;authschemes, "auth-glusterfs-v3",</div><div class='add'>+        (rpcsvc_auth_initer_t)rpcsvc_auth_glusterfs_v3_init);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_GLUSTERFS-v3");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_add_initer(&amp;svc-&gt;authschemes, "auth-unix",</div><div class='add'>+                                 (rpcsvc_auth_initer_t)rpcsvc_auth_unix_init);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_UNIX");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_add_initer(&amp;svc-&gt;authschemes, "auth-null",</div><div class='add'>+                                 (rpcsvc_auth_initer_t)rpcsvc_auth_null_init);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to add AUTH_NULL");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_init_auth (rpcsvc_t *svc, dict_t *options,</div><div class='del'>-                       struct rpcsvc_auth_list *authitem)</div><div class='add'>+rpcsvc_auth_init_auth(rpcsvc_t *svc, dict_t *options,</div><div class='add'>+                      struct rpcsvc_auth_list *authitem)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        if ((!svc) || (!options) || (!authitem))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!authitem-&gt;init) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "No init function defined");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        authitem-&gt;auth = authitem-&gt;init (svc, options);</div><div class='del'>-        if (!authitem-&gt;auth) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Registration of auth failed:"</div><div class='del'>-                        " %s", authitem-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        authitem-&gt;enable = 1;</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Authentication enabled: %s",</div><div class='del'>-                authitem-&gt;auth-&gt;authname);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!svc) || (!options) || (!authitem))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!authitem-&gt;init) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "No init function defined");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    authitem-&gt;auth = authitem-&gt;init(svc, options);</div><div class='add'>+    if (!authitem-&gt;auth) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Registration of auth failed:"</div><div class='add'>+               " %s",</div><div class='add'>+               authitem-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    authitem-&gt;enable = 1;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "Authentication enabled: %s",</div><div class='add'>+           authitem-&gt;auth-&gt;authname);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_init_auths (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_init_auths(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        struct rpcsvc_auth_list *auth = NULL;</div><div class='del'>-        struct rpcsvc_auth_list *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        if (!svc)</div><div class='del'>-                return -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct rpcsvc_auth_list *auth = NULL;</div><div class='add'>+    struct rpcsvc_auth_list *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;svc-&gt;authschemes)) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "No authentication!");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!svc)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        /* If auth null and sys are not disabled by the user, we must enable</div><div class='del'>-         * it by default. This is a globally default rule, the user is still</div><div class='del'>-         * allowed to disable the two for particular subvolumes.</div><div class='del'>-         */</div><div class='del'>-        if (!dict_get (options, "rpc-auth.auth-null")) {</div><div class='del'>-                ret = dict_set_str (options, "rpc-auth.auth-null", "on");</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("rpc-auth", GF_LOG_DEBUG,</div><div class='del'>-                                "dict_set failed for 'auth-nill'");</div><div class='del'>-        }</div><div class='add'>+    if (list_empty(&amp;svc-&gt;authschemes)) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "No authentication!");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If auth null and sys are not disabled by the user, we must enable</div><div class='add'>+     * it by default. This is a globally default rule, the user is still</div><div class='add'>+     * allowed to disable the two for particular subvolumes.</div><div class='add'>+     */</div><div class='add'>+    if (!dict_get(options, "rpc-auth.auth-null")) {</div><div class='add'>+        ret = dict_set_str(options, "rpc-auth.auth-null", "on");</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("rpc-auth", GF_LOG_DEBUG, "dict_set failed for 'auth-nill'");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dict_get (options, "rpc-auth.auth-unix")) {</div><div class='del'>-                ret = dict_set_str (options, "rpc-auth.auth-unix", "on");</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("rpc-auth", GF_LOG_DEBUG,</div><div class='del'>-                                "dict_set failed for 'auth-unix'");</div><div class='del'>-        }</div><div class='add'>+    if (!dict_get(options, "rpc-auth.auth-unix")) {</div><div class='add'>+        ret = dict_set_str(options, "rpc-auth.auth-unix", "on");</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("rpc-auth", GF_LOG_DEBUG, "dict_set failed for 'auth-unix'");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dict_get (options, "rpc-auth.auth-glusterfs")) {</div><div class='del'>-                ret = dict_set_str (options, "rpc-auth.auth-glusterfs", "on");</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("rpc-auth", GF_LOG_DEBUG,</div><div class='del'>-                                "dict_set failed for 'auth-unix'");</div><div class='del'>-        }</div><div class='add'>+    if (!dict_get(options, "rpc-auth.auth-glusterfs")) {</div><div class='add'>+        ret = dict_set_str(options, "rpc-auth.auth-glusterfs", "on");</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("rpc-auth", GF_LOG_DEBUG, "dict_set failed for 'auth-unix'");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (auth, tmp, &amp;svc-&gt;authschemes, authlist) {</div><div class='del'>-                ret = rpcsvc_auth_init_auth (svc, options, auth);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(auth, tmp, &amp;svc-&gt;authschemes, authlist)</div><div class='add'>+    {</div><div class='add'>+        ret = rpcsvc_auth_init_auth(svc, options, auth);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_set_addr_namelookup (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_set_addr_namelookup(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int             ret;</div><div class='del'>-        static char     *addrlookup_key = "rpc-auth.addr.namelookup";</div><div class='del'>-</div><div class='del'>-        if (!svc || !options)</div><div class='del'>-                return (-1);</div><div class='del'>-</div><div class='del'>-        /* By default it's disabled */</div><div class='del'>-        ret = dict_get_str_boolean (options, addrlookup_key, _gf_false);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                svc-&gt;addr_namelookup = _gf_false;</div><div class='del'>-        } else {</div><div class='del'>-                svc-&gt;addr_namelookup = ret;</div><div class='del'>-        }</div><div class='add'>+    int ret;</div><div class='add'>+    static char *addrlookup_key = "rpc-auth.addr.namelookup";</div><div class='add'>+</div><div class='add'>+    if (!svc || !options)</div><div class='add'>+        return (-1);</div><div class='ctx'> </div><div class='del'>-        if (svc-&gt;addr_namelookup)</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Addr-Name lookup enabled");</div><div class='add'>+    /* By default it's disabled */</div><div class='add'>+    ret = dict_get_str_boolean(options, addrlookup_key, _gf_false);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        svc-&gt;addr_namelookup = _gf_false;</div><div class='add'>+    } else {</div><div class='add'>+        svc-&gt;addr_namelookup = ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (0);</div><div class='add'>+    if (svc-&gt;addr_namelookup)</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG, "Addr-Name lookup enabled");</div><div class='add'>+</div><div class='add'>+    return (0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_set_allow_insecure (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_set_allow_insecure(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        char            *allow_insecure_str = NULL;</div><div class='del'>-        gf_boolean_t    is_allow_insecure = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *allow_insecure_str = NULL;</div><div class='add'>+    gf_boolean_t is_allow_insecure = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (svc);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(svc);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "rpc-auth-allow-insecure",</div><div class='del'>-                            &amp;allow_insecure_str);</div><div class='add'>+    ret = dict_get_str(options, "rpc-auth-allow-insecure", &amp;allow_insecure_str);</div><div class='add'>+    if (0 == ret) {</div><div class='add'>+        ret = gf_string2boolean(allow_insecure_str, &amp;is_allow_insecure);</div><div class='ctx'>         if (0 == ret) {</div><div class='del'>-                ret = gf_string2boolean (allow_insecure_str,</div><div class='del'>-                                         &amp;is_allow_insecure);</div><div class='del'>-                if (0 == ret) {</div><div class='del'>-                        if (_gf_true == is_allow_insecure)</div><div class='del'>-                                svc-&gt;allow_insecure = 1;</div><div class='del'>-                        else</div><div class='del'>-                                svc-&gt;allow_insecure = 0;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                /* By default set allow-insecure to true */</div><div class='add'>+            if (_gf_true == is_allow_insecure)</div><div class='ctx'>                 svc-&gt;allow_insecure = 1;</div><div class='del'>-</div><div class='del'>-                /* setting in options for the sake of functions that look</div><div class='del'>-                 * configuration params for allow insecure,  eg: gf_auth</div><div class='del'>-                 */</div><div class='del'>-                ret = dict_set_str (options, "rpc-auth-allow-insecure", "on");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_log ("rpc-auth", GF_LOG_DEBUG,</div><div class='del'>-                                        "dict_set failed for 'allow-insecure'");</div><div class='add'>+            else</div><div class='add'>+                svc-&gt;allow_insecure = 0;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        /* By default set allow-insecure to true */</div><div class='add'>+        svc-&gt;allow_insecure = 1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+        /* setting in options for the sake of functions that look</div><div class='add'>+         * configuration params for allow insecure,  eg: gf_auth</div><div class='add'>+         */</div><div class='add'>+        ret = dict_set_str(options, "rpc-auth-allow-insecure", "on");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_log("rpc-auth", GF_LOG_DEBUG,</div><div class='add'>+                   "dict_set failed for 'allow-insecure'");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_set_root_squash (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_set_root_squash(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int  ret = -1;</div><div class='del'>-        uid_t anonuid = -1;</div><div class='del'>-        gid_t anongid = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (svc);</div><div class='del'>-        GF_ASSERT (options);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str_boolean (options, "root-squash", 0);</div><div class='del'>-        if (ret != -1)</div><div class='del'>-                svc-&gt;root_squash = ret;</div><div class='del'>-        else</div><div class='del'>-                svc-&gt;root_squash = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_uint32 (options, "anonuid", &amp;anonuid);</div><div class='del'>-        if (!ret)</div><div class='del'>-                svc-&gt;anonuid = anonuid;</div><div class='del'>-        else</div><div class='del'>-                svc-&gt;anonuid = RPC_NOBODY_UID;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_uint32 (options, "anongid", &amp;anongid);</div><div class='del'>-        if (!ret)</div><div class='del'>-                svc-&gt;anongid = anongid;</div><div class='del'>-        else</div><div class='del'>-                svc-&gt;anongid = RPC_NOBODY_GID;</div><div class='del'>-</div><div class='del'>-        if (svc-&gt;root_squash)</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "root squashing enabled "</div><div class='del'>-                        "(uid=%d, gid=%d)", svc-&gt;anonuid, svc-&gt;anongid);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uid_t anonuid = -1;</div><div class='add'>+    gid_t anongid = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(svc);</div><div class='add'>+    GF_ASSERT(options);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str_boolean(options, "root-squash", 0);</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        svc-&gt;root_squash = ret;</div><div class='add'>+    else</div><div class='add'>+        svc-&gt;root_squash = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(options, "anonuid", &amp;anonuid);</div><div class='add'>+    if (!ret)</div><div class='add'>+        svc-&gt;anonuid = anonuid;</div><div class='add'>+    else</div><div class='add'>+        svc-&gt;anonuid = RPC_NOBODY_UID;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(options, "anongid", &amp;anongid);</div><div class='add'>+    if (!ret)</div><div class='add'>+        svc-&gt;anongid = anongid;</div><div class='add'>+    else</div><div class='add'>+        svc-&gt;anongid = RPC_NOBODY_GID;</div><div class='add'>+</div><div class='add'>+    if (svc-&gt;root_squash)</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "root squashing enabled "</div><div class='add'>+               "(uid=%d, gid=%d)",</div><div class='add'>+               svc-&gt;anonuid, svc-&gt;anongid);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_init (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_init(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        if ((!svc) || (!options))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        (void) rpcsvc_set_allow_insecure (svc, options);</div><div class='del'>-        (void) rpcsvc_set_root_squash (svc, options);</div><div class='del'>-        (void) rpcsvc_set_addr_namelookup (svc, options);</div><div class='del'>-        ret = rpcsvc_auth_add_initers (svc);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to add initers");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_init_auths (svc, options);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to init auth schemes");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!svc) || (!options))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    (void)rpcsvc_set_allow_insecure(svc, options);</div><div class='add'>+    (void)rpcsvc_set_root_squash(svc, options);</div><div class='add'>+    (void)rpcsvc_set_addr_namelookup(svc, options);</div><div class='add'>+    ret = rpcsvc_auth_add_initers(svc);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to add initers");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_init_auths(svc, options);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to init auth schemes");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_reconf (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_auth_reconf(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if ((!svc) || (!options))</div><div class='del'>-                return (-1);</div><div class='add'>+    if ((!svc) || (!options))</div><div class='add'>+        return (-1);</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_set_allow_insecure (svc, options);</div><div class='del'>-        if (ret)</div><div class='del'>-                return (-1);</div><div class='add'>+    ret = rpcsvc_set_allow_insecure(svc, options);</div><div class='add'>+    if (ret)</div><div class='add'>+        return (-1);</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_set_root_squash (svc, options);</div><div class='del'>-        if (ret)</div><div class='del'>-                return (-1);</div><div class='add'>+    ret = rpcsvc_set_root_squash(svc, options);</div><div class='add'>+    if (ret)</div><div class='add'>+        return (-1);</div><div class='ctx'> </div><div class='del'>-        return rpcsvc_set_addr_namelookup (svc, options);</div><div class='add'>+    return rpcsvc_set_addr_namelookup(svc, options);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-__rpcsvc_auth_get_handler (rpcsvc_request_t *req)</div><div class='add'>+__rpcsvc_auth_get_handler(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        struct rpcsvc_auth_list *auth = NULL;</div><div class='del'>-        struct rpcsvc_auth_list *tmp = NULL;</div><div class='del'>-        rpcsvc_t                *svc = NULL;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        svc = req-&gt;svc;</div><div class='del'>-        if (!svc) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "!svc");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;svc-&gt;authschemes)) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "No authentication!");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (auth, tmp, &amp;svc-&gt;authschemes, authlist) {</div><div class='del'>-                if (!auth-&gt;enable)</div><div class='del'>-                        continue;</div><div class='del'>-                if (auth-&gt;auth-&gt;authnum == req-&gt;cred.flavour)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        auth = NULL;</div><div class='add'>+    struct rpcsvc_auth_list *auth = NULL;</div><div class='add'>+    struct rpcsvc_auth_list *tmp = NULL;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    svc = req-&gt;svc;</div><div class='add'>+    if (!svc) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "!svc");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;svc-&gt;authschemes)) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "No authentication!");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(auth, tmp, &amp;svc-&gt;authschemes, authlist)</div><div class='add'>+    {</div><div class='add'>+        if (!auth-&gt;enable)</div><div class='add'>+            continue;</div><div class='add'>+        if (auth-&gt;auth-&gt;authnum == req-&gt;cred.flavour)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    auth = NULL;</div><div class='ctx'> err:</div><div class='del'>-        if (auth)</div><div class='del'>-                return auth-&gt;auth;</div><div class='del'>-        else</div><div class='del'>-                return NULL;</div><div class='add'>+    if (auth)</div><div class='add'>+        return auth-&gt;auth;</div><div class='add'>+    else</div><div class='add'>+        return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_auth_t *</div><div class='del'>-rpcsvc_auth_get_handler (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_auth_get_handler(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_auth_t           *auth = NULL;</div><div class='add'>+    rpcsvc_auth_t *auth = NULL;</div><div class='ctx'> </div><div class='del'>-        auth = __rpcsvc_auth_get_handler (req);</div><div class='del'>-        if (auth)</div><div class='del'>-                goto ret;</div><div class='add'>+    auth = __rpcsvc_auth_get_handler(req);</div><div class='add'>+    if (auth)</div><div class='add'>+        goto ret;</div><div class='ctx'> </div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "No auth handler: %d",</div><div class='del'>-                req-&gt;cred.flavour);</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "No auth handler: %d", req-&gt;cred.flavour);</div><div class='ctx'> </div><div class='del'>-        /* The requested scheme was not available so fall back the to one</div><div class='del'>-         * scheme that will always be present.</div><div class='del'>-         */</div><div class='del'>-        req-&gt;cred.flavour = AUTH_NULL;</div><div class='del'>-        req-&gt;verf.flavour = AUTH_NULL;</div><div class='del'>-        auth = __rpcsvc_auth_get_handler (req);</div><div class='add'>+    /* The requested scheme was not available so fall back the to one</div><div class='add'>+     * scheme that will always be present.</div><div class='add'>+     */</div><div class='add'>+    req-&gt;cred.flavour = AUTH_NULL;</div><div class='add'>+    req-&gt;verf.flavour = AUTH_NULL;</div><div class='add'>+    auth = __rpcsvc_auth_get_handler(req);</div><div class='ctx'> ret:</div><div class='del'>-        return auth;</div><div class='add'>+    return auth;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_request_init (rpcsvc_request_t *req, struct rpc_msg *callmsg)</div><div class='add'>+rpcsvc_auth_request_init(rpcsvc_request_t *req, struct rpc_msg *callmsg)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret = 0;</div><div class='del'>-        rpcsvc_auth_t           *auth = NULL;</div><div class='del'>-</div><div class='del'>-        if (!req || !callmsg) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;cred.flavour = rpc_call_cred_flavour (callmsg);</div><div class='del'>-        req-&gt;cred.datalen = rpc_call_cred_len (callmsg);</div><div class='del'>-        req-&gt;verf.flavour = rpc_call_verf_flavour (callmsg);</div><div class='del'>-        req-&gt;verf.datalen = rpc_call_verf_len (callmsg);</div><div class='del'>-</div><div class='del'>-        auth = rpcsvc_auth_get_handler (req);</div><div class='del'>-        if (!auth) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Auth handler: %s", auth-&gt;authname);</div><div class='del'>-</div><div class='del'>-        if (auth-&gt;authops-&gt;request_init)</div><div class='del'>-              ret = auth-&gt;authops-&gt;request_init (req, auth-&gt;authprivate);</div><div class='del'>-</div><div class='del'>-        /* reset to auxgidlarge during</div><div class='del'>-           unsersialize if necessary */</div><div class='del'>-        req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='del'>-        req-&gt;auxgidlarge = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    rpcsvc_auth_t *auth = NULL;</div><div class='add'>+</div><div class='add'>+    if (!req || !callmsg) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;cred.flavour = rpc_call_cred_flavour(callmsg);</div><div class='add'>+    req-&gt;cred.datalen = rpc_call_cred_len(callmsg);</div><div class='add'>+    req-&gt;verf.flavour = rpc_call_verf_flavour(callmsg);</div><div class='add'>+    req-&gt;verf.datalen = rpc_call_verf_len(callmsg);</div><div class='add'>+</div><div class='add'>+    auth = rpcsvc_auth_get_handler(req);</div><div class='add'>+    if (!auth) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "Auth handler: %s", auth-&gt;authname);</div><div class='add'>+</div><div class='add'>+    if (auth-&gt;authops-&gt;request_init)</div><div class='add'>+        ret = auth-&gt;authops-&gt;request_init(req, auth-&gt;authprivate);</div><div class='add'>+</div><div class='add'>+    /* reset to auxgidlarge during</div><div class='add'>+       unsersialize if necessary */</div><div class='add'>+    req-&gt;auxgids = req-&gt;auxgidsmall;</div><div class='add'>+    req-&gt;auxgidlarge = NULL;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_authenticate (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_authenticate(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-        rpcsvc_auth_t           *auth = NULL;</div><div class='del'>-        int                     minauth = 0;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        /* FIXME use rpcsvc_request_prog_minauth() */</div><div class='del'>-        minauth = 0;</div><div class='del'>-        if (minauth &gt; rpcsvc_request_cred_flavour (req)) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "Auth too weak");</div><div class='del'>-                rpcsvc_request_set_autherr (req, AUTH_TOOWEAK);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    rpcsvc_auth_t *auth = NULL;</div><div class='add'>+    int minauth = 0;</div><div class='ctx'> </div><div class='del'>-        auth = rpcsvc_auth_get_handler (req);</div><div class='del'>-        if (!auth) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "No auth handler found");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!req)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    /* FIXME use rpcsvc_request_prog_minauth() */</div><div class='add'>+    minauth = 0;</div><div class='add'>+    if (minauth &gt; rpcsvc_request_cred_flavour(req)) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "Auth too weak");</div><div class='add'>+        rpcsvc_request_set_autherr(req, AUTH_TOOWEAK);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    auth = rpcsvc_auth_get_handler(req);</div><div class='add'>+    if (!auth) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "No auth handler found");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (auth-&gt;authops-&gt;authenticate)</div><div class='del'>-                ret = auth-&gt;authops-&gt;authenticate (req, auth-&gt;authprivate);</div><div class='add'>+    if (auth-&gt;authops-&gt;authenticate)</div><div class='add'>+        ret = auth-&gt;authops-&gt;authenticate(req, auth-&gt;authprivate);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_array (rpcsvc_t *svc, char *volname, int *autharr, int arrlen)</div><div class='add'>+rpcsvc_auth_array(rpcsvc_t *svc, char *volname, int *autharr, int arrlen)</div><div class='ctx'> {</div><div class='del'>-        int             count      = 0;</div><div class='del'>-        int             result     = RPCSVC_AUTH_REJECT;</div><div class='del'>-        char           *srchstr    = NULL;</div><div class='del'>-        int             ret        = 0;</div><div class='del'>-</div><div class='del'>-        struct rpcsvc_auth_list *auth = NULL;</div><div class='del'>-        struct rpcsvc_auth_list *tmp = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int result = RPCSVC_AUTH_REJECT;</div><div class='add'>+    char *srchstr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    struct rpcsvc_auth_list *auth = NULL;</div><div class='add'>+    struct rpcsvc_auth_list *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if ((!svc) || (!autharr) || (!volname))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    memset(autharr, 0, arrlen * sizeof(int));</div><div class='add'>+    if (list_empty(&amp;svc-&gt;authschemes)) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "No authentication!");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(auth, tmp, &amp;svc-&gt;authschemes, authlist)</div><div class='add'>+    {</div><div class='add'>+        if (count &gt;= arrlen)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        result = gf_asprintf(&amp;srchstr, "rpc-auth.%s.%s", auth-&gt;name, volname);</div><div class='add'>+        if (result == -1) {</div><div class='add'>+            count = -1;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if ((!svc) || (!autharr) || (!volname))</div><div class='del'>-                return -1;</div><div class='add'>+        ret = dict_get_str_boolean(svc-&gt;options, srchstr, 0xC00FFEE);</div><div class='add'>+        GF_FREE(srchstr);</div><div class='ctx'> </div><div class='del'>-        memset (autharr, 0, arrlen * sizeof(int));</div><div class='del'>-        if (list_empty (&amp;svc-&gt;authschemes)) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "No authentication!");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        switch (ret) {</div><div class='add'>+            case _gf_true:</div><div class='add'>+                autharr[count] = auth-&gt;auth-&gt;authnum;</div><div class='add'>+                ++count;</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (auth, tmp, &amp;svc-&gt;authschemes, authlist) {</div><div class='del'>-                if (count &gt;= arrlen)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                result = gf_asprintf (&amp;srchstr, "rpc-auth.%s.%s",</div><div class='del'>-                                      auth-&gt;name, volname);</div><div class='del'>-                if (result == -1) {</div><div class='del'>-                        count = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str_boolean (svc-&gt;options, srchstr, 0xC00FFEE);</div><div class='del'>-                GF_FREE (srchstr);</div><div class='del'>-</div><div class='del'>-                switch (ret) {</div><div class='del'>-                case _gf_true:</div><div class='del'>-                        autharr[count] = auth-&gt;auth-&gt;authnum;</div><div class='del'>-                        ++count;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        /* nothing to do */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            default:</div><div class='add'>+                /* nothing to do */</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gid_t *</div><div class='del'>-rpcsvc_auth_unix_auxgids (rpcsvc_request_t *req, int *arrlen)</div><div class='add'>+rpcsvc_auth_unix_auxgids(rpcsvc_request_t *req, int *arrlen)</div><div class='ctx'> {</div><div class='del'>-        if ((!req) || (!arrlen))</div><div class='del'>-                return NULL;</div><div class='add'>+    if ((!req) || (!arrlen))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        /* In case of AUTH_NULL auxgids are not used */</div><div class='del'>-        switch (req-&gt;cred.flavour) {</div><div class='add'>+    /* In case of AUTH_NULL auxgids are not used */</div><div class='add'>+    switch (req-&gt;cred.flavour) {</div><div class='ctx'>         case AUTH_UNIX:</div><div class='ctx'>         case AUTH_GLUSTERFS:</div><div class='ctx'>         case AUTH_GLUSTERFS_v2:</div><div class='ctx'>         case AUTH_GLUSTERFS_v3:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_log ("rpc", GF_LOG_DEBUG, "auth type not unix or glusterfs");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+            gf_log("rpc", GF_LOG_DEBUG, "auth type not unix or glusterfs");</div><div class='add'>+            return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *arrlen = req-&gt;auxgidcount;</div><div class='del'>-        if (*arrlen == 0)</div><div class='del'>-                return NULL;</div><div class='add'>+    *arrlen = req-&gt;auxgidcount;</div><div class='add'>+    if (*arrlen == 0)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        return &amp;req-&gt;auxgids[0];</div><div class='add'>+    return &amp;req-&gt;auxgids[0];</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c<br/>index c8aaf4c7fa9..c6545193a11 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpcsvc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/rpcsvc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/rpcsvc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/rpcsvc.c</a></div><div class='hunk'>@@ -46,1175 +46,1176 @@</div><div class='ctx'> </div><div class='ctx'> struct rpcsvc_program gluster_dump_prog;</div><div class='ctx'> </div><div class='del'>-#define rpcsvc_alloc_request(svc, request)                                \</div><div class='del'>-        do {                                                              \</div><div class='del'>-                request = (rpcsvc_request_t *)mem_get ((svc)-&gt;rxpool);   \</div><div class='del'>-                if (request) {                                            \</div><div class='del'>-                        memset (request, 0, sizeof (rpcsvc_request_t));   \</div><div class='del'>-                } else {                                                  \</div><div class='del'>-                        gf_log ("rpcsvc", GF_LOG_ERROR,                   \</div><div class='del'>-                                "error getting memory for rpc request");  \</div><div class='del'>-                }                                                         \</div><div class='del'>-        } while (0)</div><div class='add'>+#define rpcsvc_alloc_request(svc, request)                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        request = (rpcsvc_request_t *)mem_get((svc)-&gt;rxpool);                  \</div><div class='add'>+        if (request) {                                                         \</div><div class='add'>+            memset(request, 0, sizeof(rpcsvc_request_t));                      \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            gf_log("rpcsvc", GF_LOG_ERROR,                                     \</div><div class='add'>+                   "error getting memory for rpc request");                    \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> rpcsvc_listener_t *</div><div class='del'>-rpcsvc_get_listener (rpcsvc_t *svc, uint16_t port, rpc_transport_t *trans);</div><div class='add'>+rpcsvc_get_listener(rpcsvc_t *svc, uint16_t port, rpc_transport_t *trans);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_notify (rpc_transport_t *trans, void *mydata,</div><div class='del'>-               rpc_transport_event_t event, void *data, ...);</div><div class='add'>+rpcsvc_notify(rpc_transport_t *trans, void *mydata, rpc_transport_event_t event,</div><div class='add'>+              void *data, ...);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rpcsvc_match_subnet_v4 (const char *addrtok, const char *ipaddr);</div><div class='add'>+rpcsvc_match_subnet_v4(const char *addrtok, const char *ipaddr);</div><div class='ctx'> </div><div class='ctx'> rpcsvc_notify_wrapper_t *</div><div class='del'>-rpcsvc_notify_wrapper_alloc (void)</div><div class='add'>+rpcsvc_notify_wrapper_alloc(void)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_notify_wrapper_t *wrapper = NULL;</div><div class='add'>+    rpcsvc_notify_wrapper_t *wrapper = NULL;</div><div class='ctx'> </div><div class='del'>-        wrapper = GF_CALLOC (1, sizeof (*wrapper), gf_common_mt_rpcsvc_wrapper_t);</div><div class='del'>-        if (!wrapper) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    wrapper = GF_CALLOC(1, sizeof(*wrapper), gf_common_mt_rpcsvc_wrapper_t);</div><div class='add'>+    if (!wrapper) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;wrapper-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;wrapper-&gt;list);</div><div class='ctx'> out:</div><div class='del'>-        return wrapper;</div><div class='add'>+    return wrapper;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rpcsvc_listener_destroy (rpcsvc_listener_t *listener)</div><div class='add'>+rpcsvc_listener_destroy(rpcsvc_listener_t *listener)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_t *svc = NULL;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!listener) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!listener) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        svc = listener-&gt;svc;</div><div class='del'>-        if (!svc) {</div><div class='del'>-                goto listener_free;</div><div class='del'>-        }</div><div class='add'>+    svc = listener-&gt;svc;</div><div class='add'>+    if (!svc) {</div><div class='add'>+        goto listener_free;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='del'>-        {</div><div class='del'>-                list_del_init (&amp;listener-&gt;list);</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;listener-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='ctx'> listener_free:</div><div class='del'>-        GF_FREE (listener);</div><div class='add'>+    GF_FREE(listener);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_vector_sizer</div><div class='del'>-rpcsvc_get_program_vector_sizer (rpcsvc_t *svc, uint32_t prognum,</div><div class='del'>-                                 uint32_t progver, int procnum)</div><div class='add'>+rpcsvc_get_program_vector_sizer(rpcsvc_t *svc, uint32_t prognum,</div><div class='add'>+                                uint32_t progver, int procnum)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_program_t        *program = NULL;</div><div class='del'>-        char                    found    = 0;</div><div class='add'>+    rpcsvc_program_t *program = NULL;</div><div class='add'>+    char found = 0;</div><div class='ctx'> </div><div class='del'>-        if (!svc)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!svc)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_rdlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_rdlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        /* Find the matching RPC program from registered list */</div><div class='add'>+        list_for_each_entry(program, &amp;svc-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                /* Find the matching RPC program from registered list */</div><div class='del'>-                list_for_each_entry (program, &amp;svc-&gt;programs, program) {</div><div class='del'>-                        if ((program-&gt;prognum == prognum)</div><div class='del'>-                            &amp;&amp; (program-&gt;progver == progver)) {</div><div class='del'>-                                found = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if ((program-&gt;prognum == prognum) &amp;&amp;</div><div class='add'>+                (program-&gt;progver == progver)) {</div><div class='add'>+                found = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='del'>-</div><div class='del'>-        if (found) {</div><div class='del'>-                /* Make sure the requested procnum is supported by RPC prog */</div><div class='del'>-                if ((procnum &lt; 0) || (procnum &gt;= program-&gt;numactors)) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                "RPC procedure %d not available for Program %s",</div><div class='del'>-                                procnum, program-&gt;progname);</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-                /* SUCCESS: Supported procedure */</div><div class='del'>-                return program-&gt;actors[procnum].vector_sizer;</div><div class='add'>+    if (found) {</div><div class='add'>+        /* Make sure the requested procnum is supported by RPC prog */</div><div class='add'>+        if ((procnum &lt; 0) || (procnum &gt;= program-&gt;numactors)) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+                   "RPC procedure %d not available for Program %s", procnum,</div><div class='add'>+                   program-&gt;progname);</div><div class='add'>+            return NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return NULL; /* FAIL */</div><div class='add'>+        /* SUCCESS: Supported procedure */</div><div class='add'>+        return program-&gt;actors[procnum].vector_sizer;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL; /* FAIL */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-rpcsvc_can_outstanding_req_be_ignored (rpcsvc_request_t *req)</div><div class='del'>-{</div><div class='del'>-        /*</div><div class='del'>-         * If outstanding_rpc_limit is reached because of blocked locks and</div><div class='del'>-         * throttling is attempted then no unlock requests will be received. So</div><div class='del'>-         * the outstanding request count will never change i.e. it will always</div><div class='del'>-         * be equal to the limit. This also leads to ping timer expiry on</div><div class='del'>-         * client.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * This is a hack and a necessity until grantedlock == fop completion.</div><div class='del'>-         * Ideally if we get a blocking lock request which cannot be granted</div><div class='del'>-         * right now, we should unwind the fop saying “request registered, will</div><div class='del'>-         * notify you when granted”, which is very hard to implement at the</div><div class='del'>-         * moment. Until we bring in such mechanism, we will need to live with</div><div class='del'>-         * not rate-limiting INODELK/ENTRYLK/LK fops</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if ((req-&gt;prognum == GLUSTER_FOP_PROGRAM) &amp;&amp;</div><div class='del'>-            (req-&gt;progver == GLUSTER_FOP_VERSION)) {</div><div class='del'>-                if ((req-&gt;procnum == GFS3_OP_INODELK) ||</div><div class='del'>-                    (req-&gt;procnum == GFS3_OP_FINODELK) ||</div><div class='del'>-                    (req-&gt;procnum == GFS3_OP_ENTRYLK) ||</div><div class='del'>-                    (req-&gt;procnum == GFS3_OP_FENTRYLK) ||</div><div class='del'>-                    (req-&gt;procnum == GFS3_OP_LK))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+rpcsvc_can_outstanding_req_be_ignored(rpcsvc_request_t *req)</div><div class='add'>+{</div><div class='add'>+    /*</div><div class='add'>+     * If outstanding_rpc_limit is reached because of blocked locks and</div><div class='add'>+     * throttling is attempted then no unlock requests will be received. So</div><div class='add'>+     * the outstanding request count will never change i.e. it will always</div><div class='add'>+     * be equal to the limit. This also leads to ping timer expiry on</div><div class='add'>+     * client.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * This is a hack and a necessity until grantedlock == fop completion.</div><div class='add'>+     * Ideally if we get a blocking lock request which cannot be granted</div><div class='add'>+     * right now, we should unwind the fop saying “request registered, will</div><div class='add'>+     * notify you when granted”, which is very hard to implement at the</div><div class='add'>+     * moment. Until we bring in such mechanism, we will need to live with</div><div class='add'>+     * not rate-limiting INODELK/ENTRYLK/LK fops</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if ((req-&gt;prognum == GLUSTER_FOP_PROGRAM) &amp;&amp;</div><div class='add'>+        (req-&gt;progver == GLUSTER_FOP_VERSION)) {</div><div class='add'>+        if ((req-&gt;procnum == GFS3_OP_INODELK) ||</div><div class='add'>+            (req-&gt;procnum == GFS3_OP_FINODELK) ||</div><div class='add'>+            (req-&gt;procnum == GFS3_OP_ENTRYLK) ||</div><div class='add'>+            (req-&gt;procnum == GFS3_OP_FENTRYLK) || (req-&gt;procnum == GFS3_OP_LK))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_request_outstanding (rpcsvc_request_t *req, int delta)</div><div class='add'>+rpcsvc_request_outstanding(rpcsvc_request_t *req, int delta)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             old_count = 0;</div><div class='del'>-        int             new_count = 0;</div><div class='del'>-        int             limit = 0;</div><div class='del'>-        gf_boolean_t    throttle = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int old_count = 0;</div><div class='add'>+    int new_count = 0;</div><div class='add'>+    int limit = 0;</div><div class='add'>+    gf_boolean_t throttle = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!req)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        throttle = rpcsvc_get_throttle (req-&gt;svc);</div><div class='del'>-        if (!throttle) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    throttle = rpcsvc_get_throttle(req-&gt;svc);</div><div class='add'>+    if (!throttle) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rpcsvc_can_outstanding_req_be_ignored (req)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (rpcsvc_can_outstanding_req_be_ignored(req)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;req-&gt;trans-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                limit = req-&gt;svc-&gt;outstanding_rpc_limit;</div><div class='del'>-                if (!limit)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    pthread_mutex_lock(&amp;req-&gt;trans-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        limit = req-&gt;svc-&gt;outstanding_rpc_limit;</div><div class='add'>+        if (!limit)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                old_count = req-&gt;trans-&gt;outstanding_rpc_count;</div><div class='del'>-                req-&gt;trans-&gt;outstanding_rpc_count += delta;</div><div class='del'>-                new_count = req-&gt;trans-&gt;outstanding_rpc_count;</div><div class='add'>+        old_count = req-&gt;trans-&gt;outstanding_rpc_count;</div><div class='add'>+        req-&gt;trans-&gt;outstanding_rpc_count += delta;</div><div class='add'>+        new_count = req-&gt;trans-&gt;outstanding_rpc_count;</div><div class='ctx'> </div><div class='del'>-                if (old_count &lt;= limit &amp;&amp; new_count &gt; limit)</div><div class='del'>-                        ret = rpc_transport_throttle (req-&gt;trans, _gf_true);</div><div class='add'>+        if (old_count &lt;= limit &amp;&amp; new_count &gt; limit)</div><div class='add'>+            ret = rpc_transport_throttle(req-&gt;trans, _gf_true);</div><div class='ctx'> </div><div class='del'>-                if (old_count &gt; limit &amp;&amp; new_count &lt;= limit)</div><div class='del'>-                        ret = rpc_transport_throttle (req-&gt;trans, _gf_false);</div><div class='del'>-        }</div><div class='add'>+        if (old_count &gt; limit &amp;&amp; new_count &lt;= limit)</div><div class='add'>+            ret = rpc_transport_throttle(req-&gt;trans, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;req-&gt;trans-&gt;lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;req-&gt;trans-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This needs to change to returning errors, since</div><div class='ctx'>  * we need to return RPC specific error messages when some</div><div class='ctx'>  * of the pointers below are NULL.</div><div class='ctx'>  */</div><div class='ctx'> rpcsvc_actor_t *</div><div class='del'>-rpcsvc_program_actor (rpcsvc_request_t *req)</div><div class='del'>-{</div><div class='del'>-        rpcsvc_program_t        *program = NULL;</div><div class='del'>-        int                     err      = SYSTEM_ERR;</div><div class='del'>-        rpcsvc_actor_t          *actor   = NULL;</div><div class='del'>-        rpcsvc_t                *svc     = NULL;</div><div class='del'>-        char                    found    = 0;</div><div class='del'>-        char                    *peername = NULL;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        svc = req-&gt;svc;</div><div class='del'>-        peername = req-&gt;trans-&gt;peerinfo.identifier;</div><div class='del'>-        pthread_rwlock_rdlock (&amp;svc-&gt;rpclock);</div><div class='add'>+rpcsvc_program_actor(rpcsvc_request_t *req)</div><div class='add'>+{</div><div class='add'>+    rpcsvc_program_t *program = NULL;</div><div class='add'>+    int err = SYSTEM_ERR;</div><div class='add'>+    rpcsvc_actor_t *actor = NULL;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    char found = 0;</div><div class='add'>+    char *peername = NULL;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    svc = req-&gt;svc;</div><div class='add'>+    peername = req-&gt;trans-&gt;peerinfo.identifier;</div><div class='add'>+    pthread_rwlock_rdlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(program, &amp;svc-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (program, &amp;svc-&gt;programs, program) {</div><div class='del'>-                        if (program-&gt;prognum == req-&gt;prognum) {</div><div class='del'>-                                err = PROG_MISMATCH;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if ((program-&gt;prognum == req-&gt;prognum)</div><div class='del'>-                            &amp;&amp; (program-&gt;progver == req-&gt;progver)) {</div><div class='del'>-                                found = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='del'>-</div><div class='del'>-        if (!found) {</div><div class='del'>-                if (err != PROG_MISMATCH) {</div><div class='del'>-                        /* log in DEBUG when nfs clients try to see if</div><div class='del'>-                         * ACL requests are accepted by nfs server</div><div class='del'>-                         */</div><div class='del'>-                        gf_log (GF_RPCSVC, (req-&gt;prognum == ACL_PROGRAM) ?</div><div class='del'>-                                GF_LOG_DEBUG : GF_LOG_WARNING,</div><div class='del'>-                                "RPC program not available (req %u %u) for %s",</div><div class='del'>-                                req-&gt;prognum, req-&gt;progver,</div><div class='del'>-                                peername);</div><div class='del'>-                        err = PROG_UNAVAIL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            if (program-&gt;prognum == req-&gt;prognum) {</div><div class='add'>+                err = PROG_MISMATCH;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING,</div><div class='del'>-                        "RPC program version not available (req %u %u) for %s",</div><div class='del'>-                        req-&gt;prognum, req-&gt;progver,</div><div class='del'>-                        peername);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        req-&gt;prog = program;</div><div class='del'>-        if (!program-&gt;actors) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING,</div><div class='del'>-                        "RPC Actor not found for program %s %d for %s",</div><div class='del'>-                        program-&gt;progname, program-&gt;prognum,</div><div class='del'>-                        peername);</div><div class='del'>-                err = SYSTEM_ERR;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((req-&gt;procnum &lt; 0) || (req-&gt;procnum &gt;= program-&gt;numactors)) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "RPC Program procedure not"</div><div class='del'>-                        " available for procedure %d in %s for  %s",</div><div class='del'>-                        req-&gt;procnum, program-&gt;progname,</div><div class='del'>-                        peername);</div><div class='del'>-                err = PROC_UNAVAIL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        actor = &amp;program-&gt;actors[req-&gt;procnum];</div><div class='del'>-        if (!actor-&gt;actor) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "RPC Program procedure not"</div><div class='del'>-                        " available for procedure %d in %s for %s",</div><div class='del'>-                        req-&gt;procnum, program-&gt;progname,</div><div class='del'>-                        peername);</div><div class='del'>-                err = PROC_UNAVAIL;</div><div class='del'>-                actor = NULL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;ownthread = program-&gt;ownthread;</div><div class='del'>-        req-&gt;synctask = program-&gt;synctask;</div><div class='del'>-</div><div class='del'>-        err = SUCCESS;</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Actor found: %s - %s for %s",</div><div class='del'>-                program-&gt;progname, actor-&gt;procname,</div><div class='del'>-                peername);</div><div class='add'>+            if ((program-&gt;prognum == req-&gt;prognum) &amp;&amp;</div><div class='add'>+                (program-&gt;progver == req-&gt;progver)) {</div><div class='add'>+                found = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='add'>+</div><div class='add'>+    if (!found) {</div><div class='add'>+        if (err != PROG_MISMATCH) {</div><div class='add'>+            /* log in DEBUG when nfs clients try to see if</div><div class='add'>+             * ACL requests are accepted by nfs server</div><div class='add'>+             */</div><div class='add'>+            gf_log(</div><div class='add'>+                GF_RPCSVC,</div><div class='add'>+                (req-&gt;prognum == ACL_PROGRAM) ? GF_LOG_DEBUG : GF_LOG_WARNING,</div><div class='add'>+                "RPC program not available (req %u %u) for %s", req-&gt;prognum,</div><div class='add'>+                req-&gt;progver, peername);</div><div class='add'>+            err = PROG_UNAVAIL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING,</div><div class='add'>+               "RPC program version not available (req %u %u) for %s",</div><div class='add'>+               req-&gt;prognum, req-&gt;progver, peername);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    req-&gt;prog = program;</div><div class='add'>+    if (!program-&gt;actors) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING,</div><div class='add'>+               "RPC Actor not found for program %s %d for %s",</div><div class='add'>+               program-&gt;progname, program-&gt;prognum, peername);</div><div class='add'>+        err = SYSTEM_ERR;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((req-&gt;procnum &lt; 0) || (req-&gt;procnum &gt;= program-&gt;numactors)) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "RPC Program procedure not"</div><div class='add'>+               " available for procedure %d in %s for  %s",</div><div class='add'>+               req-&gt;procnum, program-&gt;progname, peername);</div><div class='add'>+        err = PROC_UNAVAIL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    actor = &amp;program-&gt;actors[req-&gt;procnum];</div><div class='add'>+    if (!actor-&gt;actor) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "RPC Program procedure not"</div><div class='add'>+               " available for procedure %d in %s for %s",</div><div class='add'>+               req-&gt;procnum, program-&gt;progname, peername);</div><div class='add'>+        err = PROC_UNAVAIL;</div><div class='add'>+        actor = NULL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;ownthread = program-&gt;ownthread;</div><div class='add'>+    req-&gt;synctask = program-&gt;synctask;</div><div class='add'>+</div><div class='add'>+    err = SUCCESS;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "Actor found: %s - %s for %s",</div><div class='add'>+           program-&gt;progname, actor-&gt;procname, peername);</div><div class='ctx'> err:</div><div class='del'>-        if (req)</div><div class='del'>-                req-&gt;rpc_err = err;</div><div class='add'>+    if (req)</div><div class='add'>+        req-&gt;rpc_err = err;</div><div class='ctx'> </div><div class='del'>-        return actor;</div><div class='add'>+    return actor;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* this procedure can only pass 4 arguments to registered notifyfn. To send more</div><div class='ctx'>  * arguments call wrapper-&gt;notify directly.</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-rpcsvc_program_notify (rpcsvc_listener_t *listener, rpcsvc_event_t event,</div><div class='del'>-                       void *data)</div><div class='add'>+rpcsvc_program_notify(rpcsvc_listener_t *listener, rpcsvc_event_t event,</div><div class='add'>+                      void *data)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_notify_wrapper_t *wrapper = NULL;</div><div class='add'>+    rpcsvc_notify_wrapper_t *wrapper = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!listener) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!listener) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (wrapper, &amp;listener-&gt;svc-&gt;notify, list) {</div><div class='del'>-                if (wrapper-&gt;notify) {</div><div class='del'>-                        wrapper-&gt;notify (listener-&gt;svc,</div><div class='del'>-                                         wrapper-&gt;data,</div><div class='del'>-                                         event, data);</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(wrapper, &amp;listener-&gt;svc-&gt;notify, list)</div><div class='add'>+    {</div><div class='add'>+        if (wrapper-&gt;notify) {</div><div class='add'>+            wrapper-&gt;notify(listener-&gt;svc, wrapper-&gt;data, event, data);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-rpcsvc_accept (rpcsvc_t *svc, rpc_transport_t *listen_trans,</div><div class='del'>-               rpc_transport_t *new_trans)</div><div class='add'>+rpcsvc_accept(rpcsvc_t *svc, rpc_transport_t *listen_trans,</div><div class='add'>+              rpc_transport_t *new_trans)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_listener_t *listener = NULL;</div><div class='del'>-        int32_t            ret      = -1;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        listener = rpcsvc_get_listener (svc, -1, listen_trans);</div><div class='del'>-        if (listener == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    listener = rpcsvc_get_listener(svc, -1, listen_trans);</div><div class='add'>+    if (listener == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpcsvc_program_notify (listener, RPCSVC_EVENT_ACCEPT, new_trans);</div><div class='del'>-        ret = 0;</div><div class='add'>+    rpcsvc_program_notify(listener, RPCSVC_EVENT_ACCEPT, new_trans);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-rpcsvc_request_destroy (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_request_destroy(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        if (!req) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!req) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (req-&gt;iobref) {</div><div class='del'>-                iobref_unref (req-&gt;iobref);</div><div class='del'>-        }</div><div class='add'>+    if (req-&gt;iobref) {</div><div class='add'>+        iobref_unref(req-&gt;iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This marks the "end" of an RPC request. Reply is</div><div class='del'>-           completely written to the socket and is on the way</div><div class='del'>-           to the client. It is time to decrement the</div><div class='del'>-           outstanding request counter by 1.</div><div class='del'>-        */</div><div class='del'>-        if (req-&gt;prognum) //Only for initialized requests</div><div class='del'>-                rpcsvc_request_outstanding (req, -1);</div><div class='add'>+    /* This marks the "end" of an RPC request. Reply is</div><div class='add'>+       completely written to the socket and is on the way</div><div class='add'>+       to the client. It is time to decrement the</div><div class='add'>+       outstanding request counter by 1.</div><div class='add'>+    */</div><div class='add'>+    if (req-&gt;prognum)  // Only for initialized requests</div><div class='add'>+        rpcsvc_request_outstanding(req, -1);</div><div class='ctx'> </div><div class='del'>-        rpc_transport_unref (req-&gt;trans);</div><div class='add'>+    rpc_transport_unref(req-&gt;trans);</div><div class='ctx'> </div><div class='del'>-	GF_FREE (req-&gt;auxgidlarge);</div><div class='add'>+    GF_FREE(req-&gt;auxgidlarge);</div><div class='ctx'> </div><div class='del'>-        mem_put (req);</div><div class='add'>+    mem_put(req);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpcsvc_request_t *</div><div class='del'>-rpcsvc_request_init (rpcsvc_t *svc, rpc_transport_t *trans,</div><div class='del'>-                     struct rpc_msg *callmsg,</div><div class='del'>-                     struct iovec progmsg, rpc_transport_pollin_t *msg,</div><div class='del'>-                     rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_request_init(rpcsvc_t *svc, rpc_transport_t *trans,</div><div class='add'>+                    struct rpc_msg *callmsg, struct iovec progmsg,</div><div class='add'>+                    rpc_transport_pollin_t *msg, rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        if ((!trans) || (!callmsg)|| (!req) || (!msg))</div><div class='del'>-                return NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        /* We start a RPC request as always denied. */</div><div class='del'>-        req-&gt;rpc_status = MSG_DENIED;</div><div class='del'>-        req-&gt;xid = rpc_call_xid (callmsg);</div><div class='del'>-        req-&gt;prognum = rpc_call_program (callmsg);</div><div class='del'>-        req-&gt;progver = rpc_call_progver (callmsg);</div><div class='del'>-        req-&gt;procnum = rpc_call_progproc (callmsg);</div><div class='del'>-        req-&gt;trans = rpc_transport_ref (trans);</div><div class='del'>-        req-&gt;count = msg-&gt;count;</div><div class='del'>-        req-&gt;msg[0] = progmsg;</div><div class='del'>-        req-&gt;iobref = iobref_ref (msg-&gt;iobref);</div><div class='del'>-        if (msg-&gt;vectored) {</div><div class='del'>-                /* msg-&gt;vector[MAX_IOVEC] is defined in structure. prevent a</div><div class='del'>-                   out of bound access */</div><div class='del'>-                for (i = 1; i &lt; min (msg-&gt;count, MAX_IOVEC); i++) {</div><div class='del'>-                        req-&gt;msg[i] = msg-&gt;vector[i];</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        req-&gt;svc = svc;</div><div class='del'>-        req-&gt;trans_private = msg-&gt;private;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;req-&gt;txlist);</div><div class='del'>-        INIT_LIST_HEAD (&amp;req-&gt;request_list);</div><div class='del'>-        req-&gt;payloadsize = 0;</div><div class='add'>+    if ((!trans) || (!callmsg) || (!req) || (!msg))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        /* By this time, the data bytes for the auth scheme would have already</div><div class='del'>-         * been copied into the required sections of the req structure,</div><div class='del'>-         * we just need to fill in the meta-data about it now.</div><div class='del'>-         */</div><div class='del'>-        rpcsvc_auth_request_init (req, callmsg);</div><div class='del'>-        return req;</div><div class='add'>+    /* We start a RPC request as always denied. */</div><div class='add'>+    req-&gt;rpc_status = MSG_DENIED;</div><div class='add'>+    req-&gt;xid = rpc_call_xid(callmsg);</div><div class='add'>+    req-&gt;prognum = rpc_call_program(callmsg);</div><div class='add'>+    req-&gt;progver = rpc_call_progver(callmsg);</div><div class='add'>+    req-&gt;procnum = rpc_call_progproc(callmsg);</div><div class='add'>+    req-&gt;trans = rpc_transport_ref(trans);</div><div class='add'>+    req-&gt;count = msg-&gt;count;</div><div class='add'>+    req-&gt;msg[0] = progmsg;</div><div class='add'>+    req-&gt;iobref = iobref_ref(msg-&gt;iobref);</div><div class='add'>+    if (msg-&gt;vectored) {</div><div class='add'>+        /* msg-&gt;vector[MAX_IOVEC] is defined in structure. prevent a</div><div class='add'>+           out of bound access */</div><div class='add'>+        for (i = 1; i &lt; min(msg-&gt;count, MAX_IOVEC); i++) {</div><div class='add'>+            req-&gt;msg[i] = msg-&gt;vector[i];</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    req-&gt;svc = svc;</div><div class='add'>+    req-&gt;trans_private = msg-&gt;private;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;req-&gt;txlist);</div><div class='add'>+    INIT_LIST_HEAD(&amp;req-&gt;request_list);</div><div class='add'>+    req-&gt;payloadsize = 0;</div><div class='add'>+</div><div class='add'>+    /* By this time, the data bytes for the auth scheme would have already</div><div class='add'>+     * been copied into the required sections of the req structure,</div><div class='add'>+     * we just need to fill in the meta-data about it now.</div><div class='add'>+     */</div><div class='add'>+    rpcsvc_auth_request_init(req, callmsg);</div><div class='add'>+    return req;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpcsvc_request_t *</div><div class='del'>-rpcsvc_request_create (rpcsvc_t *svc, rpc_transport_t *trans,</div><div class='del'>-                       rpc_transport_pollin_t *msg)</div><div class='add'>+rpcsvc_request_create(rpcsvc_t *svc, rpc_transport_t *trans,</div><div class='add'>+                      rpc_transport_pollin_t *msg)</div><div class='ctx'> {</div><div class='del'>-        char                    *msgbuf = NULL;</div><div class='del'>-        struct rpc_msg          rpcmsg;</div><div class='del'>-        struct iovec            progmsg;        /* RPC Program payload */</div><div class='del'>-        rpcsvc_request_t        *req    = NULL;</div><div class='del'>-        size_t                  msglen  = 0;</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-</div><div class='del'>-        if (!svc || !trans || !svc-&gt;rxpool)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        /* We need to allocate the request before actually calling</div><div class='del'>-         * rpcsvc_request_init on the request so that we, can fill the auth</div><div class='del'>-         * data directly into the request structure from the message iobuf.</div><div class='del'>-         * This avoids a need to keep a temp buffer into which the auth data</div><div class='del'>-         * would've been copied otherwise.</div><div class='del'>-         */</div><div class='del'>-        rpcsvc_alloc_request (svc, req);</div><div class='del'>-        if (!req) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        msgbuf = msg-&gt;vector[0].iov_base;</div><div class='del'>-        msglen = msg-&gt;vector[0].iov_len;</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_rpc_call (msgbuf, msglen, &amp;rpcmsg, &amp;progmsg,</div><div class='del'>-                               req-&gt;cred.authdata,req-&gt;verf.authdata);</div><div class='del'>-</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "RPC call decoding failed");</div><div class='del'>-                rpcsvc_request_seterr (req, GARBAGE_ARGS);</div><div class='del'>-                req-&gt;trans = rpc_transport_ref (trans);</div><div class='del'>-                req-&gt;svc = svc;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-        rpcsvc_request_init (svc, trans, &amp;rpcmsg, progmsg, msg, req);</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "received rpc-message "</div><div class='del'>-		"(XID: 0x%" GF_PRI_RPC_XID ", Ver: %" GF_PRI_RPC_VERSION ", Program: %" GF_PRI_RPC_PROG_ID ", "</div><div class='del'>-		"ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC ") "</div><div class='del'>-                "from rpc-transport (%s)", rpc_call_xid (&amp;rpcmsg),</div><div class='del'>-                rpc_call_rpcvers (&amp;rpcmsg), rpc_call_program (&amp;rpcmsg),</div><div class='del'>-                rpc_call_progver (&amp;rpcmsg), rpc_call_progproc (&amp;rpcmsg),</div><div class='del'>-                trans-&gt;name);</div><div class='del'>-</div><div class='del'>-        /* We just received a new request from the wire. Account for</div><div class='del'>-           it in the outsanding request counter to make sure we don't</div><div class='del'>-           ingest too many concurrent requests from the same client.</div><div class='del'>-        */</div><div class='del'>-        if (req-&gt;prognum) //Only for initialized requests</div><div class='del'>-                ret = rpcsvc_request_outstanding (req, +1);</div><div class='del'>-</div><div class='del'>-        if (rpc_call_rpcvers (&amp;rpcmsg) != 2) {</div><div class='del'>-                /* LOG- TODO: print rpc version, also print the peerinfo</div><div class='del'>-                   from transport */</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "RPC version not supported "</div><div class='del'>-			"(XID: 0x%" GF_PRI_RPC_XID ", Ver: %" GF_PRI_RPC_VERSION ", Program: %" GF_PRI_RPC_PROG_ID ", "</div><div class='del'>-			"ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC ") "</div><div class='del'>-			"from trans (%s)", rpc_call_xid (&amp;rpcmsg),</div><div class='del'>-                        rpc_call_rpcvers (&amp;rpcmsg), rpc_call_program (&amp;rpcmsg),</div><div class='del'>-                        rpc_call_progver (&amp;rpcmsg), rpc_call_progproc (&amp;rpcmsg),</div><div class='del'>-                        trans-&gt;name);</div><div class='del'>-                rpcsvc_request_seterr (req, RPC_MISMATCH);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_authenticate (req);</div><div class='del'>-        if (ret == RPCSVC_AUTH_REJECT) {</div><div class='del'>-                /* No need to set auth_err, that is the responsibility of</div><div class='del'>-                 * the authentication handler since only that know what exact</div><div class='del'>-                 * error happened.</div><div class='del'>-                 */</div><div class='del'>-                rpcsvc_request_seterr (req, AUTH_ERROR);</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "auth failed on request. "</div><div class='del'>-			"(XID: 0x%" GF_PRI_RPC_XID ", Ver: %" GF_PRI_RPC_VERSION ", Program: %" GF_PRI_RPC_PROG_ID ", "</div><div class='del'>-			"ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC ") "</div><div class='del'>-                        "from trans (%s)", rpc_call_xid (&amp;rpcmsg),</div><div class='del'>-                        rpc_call_rpcvers (&amp;rpcmsg), rpc_call_program (&amp;rpcmsg),</div><div class='del'>-                        rpc_call_progver (&amp;rpcmsg), rpc_call_progproc (&amp;rpcmsg),</div><div class='del'>-                        trans-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    char *msgbuf = NULL;</div><div class='add'>+    struct rpc_msg rpcmsg;</div><div class='add'>+    struct iovec progmsg; /* RPC Program payload */</div><div class='add'>+    rpcsvc_request_t *req = NULL;</div><div class='add'>+    size_t msglen = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    if (!svc || !trans || !svc-&gt;rxpool)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        /* If the error is not RPC_MISMATCH, we consider the call as accepted</div><div class='del'>-         * since we are not handling authentication failures for now.</div><div class='add'>+    /* We need to allocate the request before actually calling</div><div class='add'>+     * rpcsvc_request_init on the request so that we, can fill the auth</div><div class='add'>+     * data directly into the request structure from the message iobuf.</div><div class='add'>+     * This avoids a need to keep a temp buffer into which the auth data</div><div class='add'>+     * would've been copied otherwise.</div><div class='add'>+     */</div><div class='add'>+    rpcsvc_alloc_request(svc, req);</div><div class='add'>+    if (!req) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    msgbuf = msg-&gt;vector[0].iov_base;</div><div class='add'>+    msglen = msg-&gt;vector[0].iov_len;</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_rpc_call(msgbuf, msglen, &amp;rpcmsg, &amp;progmsg, req-&gt;cred.authdata,</div><div class='add'>+                          req-&gt;verf.authdata);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "RPC call decoding failed");</div><div class='add'>+        rpcsvc_request_seterr(req, GARBAGE_ARGS);</div><div class='add'>+        req-&gt;trans = rpc_transport_ref(trans);</div><div class='add'>+        req-&gt;svc = svc;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+    rpcsvc_request_init(svc, trans, &amp;rpcmsg, progmsg, msg, req);</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+           "received rpc-message "</div><div class='add'>+           "(XID: 0x%" GF_PRI_RPC_XID ", Ver: %" GF_PRI_RPC_VERSION</div><div class='add'>+           ", Program: %" GF_PRI_RPC_PROG_ID</div><div class='add'>+           ", "</div><div class='add'>+           "ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC</div><div class='add'>+           ") "</div><div class='add'>+           "from rpc-transport (%s)",</div><div class='add'>+           rpc_call_xid(&amp;rpcmsg), rpc_call_rpcvers(&amp;rpcmsg),</div><div class='add'>+           rpc_call_program(&amp;rpcmsg), rpc_call_progver(&amp;rpcmsg),</div><div class='add'>+           rpc_call_progproc(&amp;rpcmsg), trans-&gt;name);</div><div class='add'>+</div><div class='add'>+    /* We just received a new request from the wire. Account for</div><div class='add'>+       it in the outsanding request counter to make sure we don't</div><div class='add'>+       ingest too many concurrent requests from the same client.</div><div class='add'>+    */</div><div class='add'>+    if (req-&gt;prognum)  // Only for initialized requests</div><div class='add'>+        ret = rpcsvc_request_outstanding(req, +1);</div><div class='add'>+</div><div class='add'>+    if (rpc_call_rpcvers(&amp;rpcmsg) != 2) {</div><div class='add'>+        /* LOG- TODO: print rpc version, also print the peerinfo</div><div class='add'>+           from transport */</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "RPC version not supported "</div><div class='add'>+               "(XID: 0x%" GF_PRI_RPC_XID ", Ver: %" GF_PRI_RPC_VERSION</div><div class='add'>+               ", Program: %" GF_PRI_RPC_PROG_ID</div><div class='add'>+               ", "</div><div class='add'>+               "ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC</div><div class='add'>+               ") "</div><div class='add'>+               "from trans (%s)",</div><div class='add'>+               rpc_call_xid(&amp;rpcmsg), rpc_call_rpcvers(&amp;rpcmsg),</div><div class='add'>+               rpc_call_program(&amp;rpcmsg), rpc_call_progver(&amp;rpcmsg),</div><div class='add'>+               rpc_call_progproc(&amp;rpcmsg), trans-&gt;name);</div><div class='add'>+        rpcsvc_request_seterr(req, RPC_MISMATCH);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_authenticate(req);</div><div class='add'>+    if (ret == RPCSVC_AUTH_REJECT) {</div><div class='add'>+        /* No need to set auth_err, that is the responsibility of</div><div class='add'>+         * the authentication handler since only that know what exact</div><div class='add'>+         * error happened.</div><div class='ctx'>          */</div><div class='del'>-        req-&gt;rpc_status = MSG_ACCEPTED;</div><div class='del'>-        req-&gt;reply = NULL;</div><div class='del'>-        ret = 0;</div><div class='add'>+        rpcsvc_request_seterr(req, AUTH_ERROR);</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "auth failed on request. "</div><div class='add'>+               "(XID: 0x%" GF_PRI_RPC_XID ", Ver: %" GF_PRI_RPC_VERSION</div><div class='add'>+               ", Program: %" GF_PRI_RPC_PROG_ID</div><div class='add'>+               ", "</div><div class='add'>+               "ProgVers: %" GF_PRI_RPC_PROG_VERS ", Proc: %" GF_PRI_RPC_PROC</div><div class='add'>+               ") "</div><div class='add'>+               "from trans (%s)",</div><div class='add'>+               rpc_call_xid(&amp;rpcmsg), rpc_call_rpcvers(&amp;rpcmsg),</div><div class='add'>+               rpc_call_program(&amp;rpcmsg), rpc_call_progver(&amp;rpcmsg),</div><div class='add'>+               rpc_call_progproc(&amp;rpcmsg), trans-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If the error is not RPC_MISMATCH, we consider the call as accepted</div><div class='add'>+     * since we are not handling authentication failures for now.</div><div class='add'>+     */</div><div class='add'>+    req-&gt;rpc_status = MSG_ACCEPTED;</div><div class='add'>+    req-&gt;reply = NULL;</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                ret = rpcsvc_error_reply (req);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("rpcsvc", GF_LOG_WARNING,</div><div class='del'>-                                "failed to queue error reply");</div><div class='del'>-                req = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        ret = rpcsvc_error_reply(req);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("rpcsvc", GF_LOG_WARNING, "failed to queue error reply");</div><div class='add'>+        req = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return req;</div><div class='add'>+    return req;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_check_and_reply_error (int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+rpcsvc_check_and_reply_error(int ret, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_request_t  *req = NULL;</div><div class='add'>+    rpcsvc_request_t *req = NULL;</div><div class='add'>+</div><div class='add'>+    req = opaque;</div><div class='ctx'> </div><div class='del'>-        req = opaque;</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log("rpcsvc", GF_LOG_ERROR,</div><div class='add'>+               "rpc actor (%d:%d:%d) failed to complete successfully",</div><div class='add'>+               req-&gt;prognum, req-&gt;progver, req-&gt;procnum);</div><div class='ctx'> </div><div class='add'>+    if (ret == RPCSVC_ACTOR_ERROR) {</div><div class='add'>+        ret = rpcsvc_error_reply(req);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_ERROR,</div><div class='del'>-                        "rpc actor (%d:%d:%d) failed to complete successfully",</div><div class='del'>-                        req-&gt;prognum, req-&gt;progver, req-&gt;procnum);</div><div class='del'>-</div><div class='del'>-        if (ret == RPCSVC_ACTOR_ERROR) {</div><div class='del'>-                ret = rpcsvc_error_reply (req);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("rpcsvc", GF_LOG_WARNING,</div><div class='del'>-                                "failed to queue error reply");</div><div class='del'>-        }</div><div class='add'>+            gf_log("rpcsvc", GF_LOG_WARNING, "failed to queue error reply");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_handle_rpc_call (rpcsvc_t *svc, rpc_transport_t *trans,</div><div class='del'>-                        rpc_transport_pollin_t *msg)</div><div class='del'>-{</div><div class='del'>-        rpcsvc_actor_t         *actor          = NULL;</div><div class='del'>-        rpcsvc_actor            actor_fn       = NULL;</div><div class='del'>-        rpcsvc_request_t       *req            = NULL;</div><div class='del'>-        int                     ret            = -1;</div><div class='del'>-        uint16_t                port           = 0;</div><div class='del'>-        gf_boolean_t            is_unix        = _gf_false, empty = _gf_false;</div><div class='del'>-        gf_boolean_t            unprivileged   = _gf_false;</div><div class='del'>-        drc_cached_op_t        *reply          = NULL;</div><div class='del'>-        rpcsvc_drc_globals_t   *drc            = NULL;</div><div class='del'>-</div><div class='del'>-        if (!trans || !svc)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        switch (trans-&gt;peerinfo.sockaddr.ss_family) {</div><div class='add'>+rpcsvc_handle_rpc_call(rpcsvc_t *svc, rpc_transport_t *trans,</div><div class='add'>+                       rpc_transport_pollin_t *msg)</div><div class='add'>+{</div><div class='add'>+    rpcsvc_actor_t *actor = NULL;</div><div class='add'>+    rpcsvc_actor actor_fn = NULL;</div><div class='add'>+    rpcsvc_request_t *req = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint16_t port = 0;</div><div class='add'>+    gf_boolean_t is_unix = _gf_false, empty = _gf_false;</div><div class='add'>+    gf_boolean_t unprivileged = _gf_false;</div><div class='add'>+    drc_cached_op_t *reply = NULL;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='add'>+</div><div class='add'>+    if (!trans || !svc)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    switch (trans-&gt;peerinfo.sockaddr.ss_family) {</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                port = ((struct sockaddr_in *)&amp;trans-&gt;peerinfo.sockaddr)-&gt;sin_port;</div><div class='del'>-                break;</div><div class='add'>+            port = ((struct sockaddr_in *)&amp;trans-&gt;peerinfo.sockaddr)-&gt;sin_port;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                port = ((struct sockaddr_in6 *)&amp;trans-&gt;peerinfo.sockaddr)-&gt;sin6_port;</div><div class='del'>-                break;</div><div class='add'>+            port = ((struct sockaddr_in6 *)&amp;trans-&gt;peerinfo.sockaddr)</div><div class='add'>+                       -&gt;sin6_port;</div><div class='add'>+            break;</div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                is_unix = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            is_unix = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "invalid address family (%d)",</div><div class='del'>-                        trans-&gt;peerinfo.sockaddr.ss_family);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR, "invalid address family (%d)",</div><div class='add'>+                   trans-&gt;peerinfo.sockaddr.ss_family);</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (is_unix == _gf_false) {</div><div class='add'>+        port = ntohs(port);</div><div class='ctx'> </div><div class='add'>+        gf_log("rpcsvc", GF_LOG_TRACE, "Client port: %d", (int)port);</div><div class='ctx'> </div><div class='del'>-        if (is_unix == _gf_false) {</div><div class='del'>-                port = ntohs (port);</div><div class='add'>+        if (port &gt;= 1024)</div><div class='add'>+            unprivileged = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_TRACE, "Client port: %d", (int)port);</div><div class='add'>+    req = rpcsvc_request_create(svc, trans, msg);</div><div class='add'>+    if (!req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (port &gt;= 1024)</div><div class='del'>-                        unprivileged = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (!rpcsvc_request_accepted(req))</div><div class='add'>+        goto err_reply;</div><div class='add'>+</div><div class='add'>+    actor = rpcsvc_program_actor(req);</div><div class='add'>+    if (!actor)</div><div class='add'>+        goto err_reply;</div><div class='add'>+</div><div class='add'>+    if (0 == svc-&gt;allow_insecure &amp;&amp; unprivileged &amp;&amp; !actor-&gt;unprivileged) {</div><div class='add'>+        /* Non-privileged user, fail request */</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Request received from non-"</div><div class='add'>+               "privileged port. Failing request for %s.",</div><div class='add'>+               req-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+        req-&gt;rpc_status = MSG_DENIED;</div><div class='add'>+        req-&gt;rpc_err = AUTH_ERROR;</div><div class='add'>+        req-&gt;auth_err = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err_reply;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        req = rpcsvc_request_create (svc, trans, msg);</div><div class='del'>-        if (!req)</div><div class='add'>+    /* DRC */</div><div class='add'>+    if (rpcsvc_need_drc(req)) {</div><div class='add'>+        drc = req-&gt;svc-&gt;drc;</div><div class='add'>+</div><div class='add'>+        LOCK(&amp;drc-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            reply = rpcsvc_drc_lookup(req);</div><div class='add'>+</div><div class='add'>+            /* retransmission of completed request, send cached reply */</div><div class='add'>+            if (reply &amp;&amp; reply-&gt;state == DRC_OP_CACHED) {</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_INFO,</div><div class='add'>+                       "duplicate request:"</div><div class='add'>+                       " XID: 0x%x",</div><div class='add'>+                       req-&gt;xid);</div><div class='add'>+                ret = rpcsvc_send_cached_reply(req, reply);</div><div class='add'>+                drc-&gt;cache_hits++;</div><div class='add'>+                UNLOCK(&amp;drc-&gt;lock);</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            } /* retransmitted request, original op in transit, drop it */</div><div class='add'>+            else if (reply &amp;&amp; reply-&gt;state == DRC_OP_IN_TRANSIT) {</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_INFO,</div><div class='add'>+                       "op in transit,"</div><div class='add'>+                       " discarding. XID: 0x%x",</div><div class='add'>+                       req-&gt;xid);</div><div class='add'>+                ret = 0;</div><div class='add'>+                drc-&gt;intransit_hits++;</div><div class='add'>+                rpcsvc_request_destroy(req);</div><div class='add'>+                UNLOCK(&amp;drc-&gt;lock);</div><div class='ctx'>                 goto out;</div><div class='ctx'> </div><div class='del'>-        if (!rpcsvc_request_accepted (req))</div><div class='del'>-                goto err_reply;</div><div class='del'>-</div><div class='del'>-        actor = rpcsvc_program_actor (req);</div><div class='del'>-        if (!actor)</div><div class='del'>-                goto err_reply;</div><div class='del'>-</div><div class='del'>-        if (0 == svc-&gt;allow_insecure &amp;&amp; unprivileged &amp;&amp; !actor-&gt;unprivileged) {</div><div class='del'>-                        /* Non-privileged user, fail request */</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                "Request received from non-"</div><div class='del'>-                                "privileged port. Failing request for %s.",</div><div class='del'>-                                req-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        req-&gt;rpc_status = MSG_DENIED;</div><div class='del'>-                        req-&gt;rpc_err = AUTH_ERROR;</div><div class='del'>-                        req-&gt;auth_err = RPCSVC_AUTH_REJECT;</div><div class='del'>-                        goto err_reply;</div><div class='add'>+            } /* fresh request, cache it as in-transit and proceed */</div><div class='add'>+            else {</div><div class='add'>+                ret = rpcsvc_cache_request(req);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;drc-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* DRC */</div><div class='del'>-        if (rpcsvc_need_drc (req)) {</div><div class='del'>-                drc = req-&gt;svc-&gt;drc;</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;drc-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        reply = rpcsvc_drc_lookup (req);</div><div class='del'>-</div><div class='del'>-                        /* retransmission of completed request, send cached reply */</div><div class='del'>-                        if (reply &amp;&amp; reply-&gt;state == DRC_OP_CACHED) {</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_INFO, "duplicate request:"</div><div class='del'>-                                        " XID: 0x%x", req-&gt;xid);</div><div class='del'>-                                ret = rpcsvc_send_cached_reply (req, reply);</div><div class='del'>-                                drc-&gt;cache_hits++;</div><div class='del'>-                                UNLOCK (&amp;drc-&gt;lock);</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        } /* retransmitted request, original op in transit, drop it */</div><div class='del'>-                        else if (reply &amp;&amp; reply-&gt;state == DRC_OP_IN_TRANSIT) {</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_INFO, "op in transit,"</div><div class='del'>-                                        " discarding. XID: 0x%x", req-&gt;xid);</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                drc-&gt;intransit_hits++;</div><div class='del'>-                                rpcsvc_request_destroy (req);</div><div class='del'>-                                UNLOCK (&amp;drc-&gt;lock);</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        } /* fresh request, cache it as in-transit and proceed */</div><div class='del'>-                        else {</div><div class='del'>-                                ret = rpcsvc_cache_request (req);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;drc-&gt;lock);</div><div class='add'>+    if (req-&gt;rpc_err == SUCCESS) {</div><div class='add'>+        /* Before going to xlator code, set the THIS properly */</div><div class='add'>+        THIS = svc-&gt;xl;</div><div class='add'>+</div><div class='add'>+        actor_fn = actor-&gt;actor;</div><div class='add'>+</div><div class='add'>+        if (!actor_fn) {</div><div class='add'>+            rpcsvc_request_seterr(req, PROC_UNAVAIL);</div><div class='add'>+            /* LOG TODO: print more info about procnum,</div><div class='add'>+               prognum etc, also print transport info */</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR, "No vectored handler present");</div><div class='add'>+            ret = RPCSVC_ACTOR_ERROR;</div><div class='add'>+            goto err_reply;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (req-&gt;rpc_err == SUCCESS) {</div><div class='del'>-                /* Before going to xlator code, set the THIS properly */</div><div class='del'>-                THIS = svc-&gt;xl;</div><div class='add'>+        if (req-&gt;synctask) {</div><div class='add'>+            ret = synctask_new(THIS-&gt;ctx-&gt;env, (synctask_fn_t)actor_fn,</div><div class='add'>+                               rpcsvc_check_and_reply_error, NULL, req);</div><div class='add'>+        } else if (req-&gt;ownthread) {</div><div class='add'>+            pthread_mutex_lock(&amp;req-&gt;prog-&gt;queue_lock);</div><div class='add'>+            {</div><div class='add'>+                empty = list_empty(&amp;req-&gt;prog-&gt;request_queue);</div><div class='ctx'> </div><div class='del'>-                actor_fn = actor-&gt;actor;</div><div class='add'>+                list_add_tail(&amp;req-&gt;request_list, &amp;req-&gt;prog-&gt;request_queue);</div><div class='ctx'> </div><div class='del'>-                if (!actor_fn) {</div><div class='del'>-                        rpcsvc_request_seterr (req, PROC_UNAVAIL);</div><div class='del'>-                        /* LOG TODO: print more info about procnum,</div><div class='del'>-                           prognum etc, also print transport info */</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                "No vectored handler present");</div><div class='del'>-                        ret = RPCSVC_ACTOR_ERROR;</div><div class='del'>-                        goto err_reply;</div><div class='del'>-                }</div><div class='add'>+                if (empty)</div><div class='add'>+                    pthread_cond_signal(&amp;req-&gt;prog-&gt;queue_cond);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;req-&gt;prog-&gt;queue_lock);</div><div class='ctx'> </div><div class='del'>-                if (req-&gt;synctask) {</div><div class='del'>-                        ret = synctask_new (THIS-&gt;ctx-&gt;env,</div><div class='del'>-                                            (synctask_fn_t) actor_fn,</div><div class='del'>-                                            rpcsvc_check_and_reply_error, NULL,</div><div class='del'>-                                            req);</div><div class='del'>-                } else if (req-&gt;ownthread) {</div><div class='del'>-                        pthread_mutex_lock (&amp;req-&gt;prog-&gt;queue_lock);</div><div class='del'>-                        {</div><div class='del'>-                                empty = list_empty (&amp;req-&gt;prog-&gt;request_queue);</div><div class='del'>-</div><div class='del'>-                                list_add_tail (&amp;req-&gt;request_list,</div><div class='del'>-                                               &amp;req-&gt;prog-&gt;request_queue);</div><div class='del'>-</div><div class='del'>-                                if (empty)</div><div class='del'>-                                        pthread_cond_signal (&amp;req-&gt;prog-&gt;queue_cond);</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;req-&gt;prog-&gt;queue_lock);</div><div class='del'>-</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = actor_fn (req);</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            ret = actor_fn(req);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err_reply:</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_check_and_reply_error (ret, NULL, req);</div><div class='del'>-        /* No need to propagate error beyond this function since the reply</div><div class='del'>-         * has now been queued. */</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = rpcsvc_check_and_reply_error(ret, NULL, req);</div><div class='add'>+    /* No need to propagate error beyond this function since the reply</div><div class='add'>+     * has now been queued. */</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_handle_disconnect (rpcsvc_t *svc, rpc_transport_t *trans)</div><div class='add'>+rpcsvc_handle_disconnect(rpcsvc_t *svc, rpc_transport_t *trans)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_event_t           event;</div><div class='del'>-        rpcsvc_notify_wrapper_t *wrappers = NULL, *wrapper;</div><div class='del'>-        int32_t                  ret      = -1, i = 0, wrapper_count = 0;</div><div class='del'>-        rpcsvc_listener_t       *listener = NULL;</div><div class='del'>-</div><div class='del'>-        event = (trans-&gt;listener == NULL) ? RPCSVC_EVENT_LISTENER_DEAD</div><div class='del'>-                : RPCSVC_EVENT_DISCONNECT;</div><div class='add'>+    rpcsvc_event_t event;</div><div class='add'>+    rpcsvc_notify_wrapper_t *wrappers = NULL, *wrapper;</div><div class='add'>+    int32_t ret = -1, i = 0, wrapper_count = 0;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_rdlock (&amp;svc-&gt;rpclock);</div><div class='del'>-        {</div><div class='del'>-                if (!svc-&gt;notify_count)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    event = (trans-&gt;listener == NULL) ? RPCSVC_EVENT_LISTENER_DEAD</div><div class='add'>+                                      : RPCSVC_EVENT_DISCONNECT;</div><div class='ctx'> </div><div class='del'>-                wrappers = GF_CALLOC (svc-&gt;notify_count, sizeof (*wrapper),</div><div class='del'>-                                      gf_common_mt_rpcsvc_wrapper_t);</div><div class='del'>-                if (!wrappers) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    pthread_rwlock_rdlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        if (!svc-&gt;notify_count)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry (wrapper, &amp;svc-&gt;notify, list) {</div><div class='del'>-                        if (wrapper-&gt;notify) {</div><div class='del'>-                                wrappers[i++] = *wrapper;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        wrappers = GF_CALLOC(svc-&gt;notify_count, sizeof(*wrapper),</div><div class='add'>+                             gf_common_mt_rpcsvc_wrapper_t);</div><div class='add'>+        if (!wrappers) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                wrapper_count = i;</div><div class='add'>+        list_for_each_entry(wrapper, &amp;svc-&gt;notify, list)</div><div class='add'>+        {</div><div class='add'>+            if (wrapper-&gt;notify) {</div><div class='add'>+                wrappers[i++] = *wrapper;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        if (wrappers) {</div><div class='del'>-                for (i = 0; i &lt; wrapper_count; i++) {</div><div class='del'>-                        wrappers[i].notify (svc, wrappers[i].data,</div><div class='del'>-                                            event, trans);</div><div class='del'>-                }</div><div class='add'>+        wrapper_count = i;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (wrappers);</div><div class='add'>+    if (wrappers) {</div><div class='add'>+        for (i = 0; i &lt; wrapper_count; i++) {</div><div class='add'>+            wrappers[i].notify(svc, wrappers[i].data, event, trans);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (event == RPCSVC_EVENT_LISTENER_DEAD) {</div><div class='del'>-                listener = rpcsvc_get_listener (svc, -1, trans-&gt;listener);</div><div class='del'>-                rpcsvc_listener_destroy (listener);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(wrappers);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    if (event == RPCSVC_EVENT_LISTENER_DEAD) {</div><div class='add'>+        listener = rpcsvc_get_listener(svc, -1, trans-&gt;listener);</div><div class='add'>+        rpcsvc_listener_destroy(listener);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_notify (rpc_transport_t *trans, void *mydata,</div><div class='del'>-               rpc_transport_event_t event, void *data, ...)</div><div class='add'>+rpcsvc_notify(rpc_transport_t *trans, void *mydata, rpc_transport_event_t event,</div><div class='add'>+              void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int                     ret       = -1;</div><div class='del'>-        rpc_transport_pollin_t *msg       = NULL;</div><div class='del'>-        rpc_transport_t        *new_trans = NULL;</div><div class='del'>-        rpcsvc_t               *svc       = NULL;</div><div class='del'>-        rpcsvc_listener_t      *listener  = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_transport_pollin_t *msg = NULL;</div><div class='add'>+    rpc_transport_t *new_trans = NULL;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='ctx'> </div><div class='del'>-        svc = mydata;</div><div class='del'>-        if (svc == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    svc = mydata;</div><div class='add'>+    if (svc == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case RPC_TRANSPORT_ACCEPT:</div><div class='del'>-                new_trans = data;</div><div class='del'>-                ret = rpcsvc_accept (svc, trans, new_trans);</div><div class='del'>-                break;</div><div class='add'>+            new_trans = data;</div><div class='add'>+            ret = rpcsvc_accept(svc, trans, new_trans);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_DISCONNECT:</div><div class='del'>-                ret = rpcsvc_handle_disconnect (svc, trans);</div><div class='del'>-                break;</div><div class='add'>+            ret = rpcsvc_handle_disconnect(svc, trans);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_MSG_RECEIVED:</div><div class='del'>-                msg = data;</div><div class='del'>-                ret = rpcsvc_handle_rpc_call (svc, trans, msg);</div><div class='del'>-                break;</div><div class='add'>+            msg = data;</div><div class='add'>+            ret = rpcsvc_handle_rpc_call(svc, trans, msg);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_MSG_SENT:</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_CONNECT:</div><div class='del'>-                /* do nothing, no need for rpcsvc to handle this, client should</div><div class='del'>-                 * handle this event</div><div class='del'>-                 */</div><div class='del'>-                /* print info about transport too : LOG TODO */</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_CRITICAL,</div><div class='del'>-                        "got CONNECT event, which should have not come");</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            /* do nothing, no need for rpcsvc to handle this, client should</div><div class='add'>+             * handle this event</div><div class='add'>+             */</div><div class='add'>+            /* print info about transport too : LOG TODO */</div><div class='add'>+            gf_log("rpcsvc", GF_LOG_CRITICAL,</div><div class='add'>+                   "got CONNECT event, which should have not come");</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_CLEANUP:</div><div class='del'>-                listener = rpcsvc_get_listener (svc, -1, trans-&gt;listener);</div><div class='del'>-                if (listener == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            listener = rpcsvc_get_listener(svc, -1, trans-&gt;listener);</div><div class='add'>+            if (listener == NULL) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                rpcsvc_program_notify (listener, RPCSVC_EVENT_TRANSPORT_DESTROY,</div><div class='del'>-                                       trans);</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            rpcsvc_program_notify(listener, RPCSVC_EVENT_TRANSPORT_DESTROY,</div><div class='add'>+                                  trans);</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case RPC_TRANSPORT_MAP_XID_REQUEST:</div><div class='del'>-                /* FIXME: think about this later */</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_CRITICAL,</div><div class='del'>-                        "got MAP_XID event, which should have not come");</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            /* FIXME: think about this later */</div><div class='add'>+            gf_log("rpcsvc", GF_LOG_CRITICAL,</div><div class='add'>+                   "got MAP_XID event, which should have not come");</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Given the RPC reply structure and the payload handed by the RPC program,</div><div class='ctx'>  * encode the RPC record header into the buffer pointed by recordstart.</div><div class='ctx'>  */</div><div class='ctx'> struct iovec</div><div class='del'>-rpcsvc_record_build_header (char *recordstart, size_t rlen,</div><div class='del'>-                            struct rpc_msg reply, size_t payload)</div><div class='del'>-{</div><div class='del'>-        struct iovec    replyhdr;</div><div class='del'>-        struct iovec    txrecord = {0, 0};</div><div class='del'>-        size_t          fraglen = 0;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        /* After leaving aside the 4 bytes for the fragment header, lets</div><div class='del'>-         * encode the RPC reply structure into the buffer given to us.</div><div class='del'>-         */</div><div class='del'>-        ret = rpc_reply_to_xdr (&amp;reply, recordstart, rlen, &amp;replyhdr);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "Failed to create RPC reply");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fraglen = payload + replyhdr.iov_len;</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Reply fraglen %zu, payload: %zu, "</div><div class='del'>-                "rpc hdr: %zu", fraglen, payload, replyhdr.iov_len);</div><div class='del'>-</div><div class='del'>-        txrecord.iov_base = recordstart;</div><div class='del'>-</div><div class='del'>-        /* Remember, this is only the vec for the RPC header and does not</div><div class='del'>-         * include the payload above. We needed the payload only to calculate</div><div class='del'>-         * the size of the full fragment. This size is sent in the fragment</div><div class='del'>-         * header.</div><div class='del'>-         */</div><div class='del'>-        txrecord.iov_len = replyhdr.iov_len;</div><div class='add'>+rpcsvc_record_build_header(char *recordstart, size_t rlen, struct rpc_msg reply,</div><div class='add'>+                           size_t payload)</div><div class='add'>+{</div><div class='add'>+    struct iovec replyhdr;</div><div class='add'>+    struct iovec txrecord = {0, 0};</div><div class='add'>+    size_t fraglen = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    /* After leaving aside the 4 bytes for the fragment header, lets</div><div class='add'>+     * encode the RPC reply structure into the buffer given to us.</div><div class='add'>+     */</div><div class='add'>+    ret = rpc_reply_to_xdr(&amp;reply, recordstart, rlen, &amp;replyhdr);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "Failed to create RPC reply");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fraglen = payload + replyhdr.iov_len;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+           "Reply fraglen %zu, payload: %zu, "</div><div class='add'>+           "rpc hdr: %zu",</div><div class='add'>+           fraglen, payload, replyhdr.iov_len);</div><div class='add'>+</div><div class='add'>+    txrecord.iov_base = recordstart;</div><div class='add'>+</div><div class='add'>+    /* Remember, this is only the vec for the RPC header and does not</div><div class='add'>+     * include the payload above. We needed the payload only to calculate</div><div class='add'>+     * the size of the full fragment. This size is sent in the fragment</div><div class='add'>+     * header.</div><div class='add'>+     */</div><div class='add'>+    txrecord.iov_len = replyhdr.iov_len;</div><div class='ctx'> err:</div><div class='del'>-        return txrecord;</div><div class='add'>+    return txrecord;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint32_t</div><div class='del'>-rpc_callback_new_callid (struct rpc_transport *trans)</div><div class='add'>+rpc_callback_new_callid(struct rpc_transport *trans)</div><div class='ctx'> {</div><div class='del'>-        uint32_t callid = 0;</div><div class='add'>+    uint32_t callid = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;trans-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callid = ++trans-&gt;xid;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;trans-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;trans-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callid = ++trans-&gt;xid;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;trans-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return callid;</div><div class='add'>+    return callid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_fill_callback (int prognum, int progver, int procnum, int payload,</div><div class='del'>-                      uint32_t xid, struct rpc_msg *request)</div><div class='add'>+rpcsvc_fill_callback(int prognum, int progver, int procnum, int payload,</div><div class='add'>+                     uint32_t xid, struct rpc_msg *request)</div><div class='ctx'> {</div><div class='del'>-        int   ret          = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!request) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!request) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (request, 0, sizeof (*request));</div><div class='add'>+    memset(request, 0, sizeof(*request));</div><div class='ctx'> </div><div class='del'>-        request-&gt;rm_xid = xid;</div><div class='del'>-        request-&gt;rm_direction = CALL;</div><div class='add'>+    request-&gt;rm_xid = xid;</div><div class='add'>+    request-&gt;rm_direction = CALL;</div><div class='ctx'> </div><div class='del'>-        request-&gt;rm_call.cb_rpcvers = 2;</div><div class='del'>-        request-&gt;rm_call.cb_prog = prognum;</div><div class='del'>-        request-&gt;rm_call.cb_vers = progver;</div><div class='del'>-        request-&gt;rm_call.cb_proc = procnum;</div><div class='add'>+    request-&gt;rm_call.cb_rpcvers = 2;</div><div class='add'>+    request-&gt;rm_call.cb_prog = prognum;</div><div class='add'>+    request-&gt;rm_call.cb_vers = progver;</div><div class='add'>+    request-&gt;rm_call.cb_proc = procnum;</div><div class='ctx'> </div><div class='del'>-        request-&gt;rm_call.cb_cred.oa_flavor = AUTH_NONE;</div><div class='del'>-        request-&gt;rm_call.cb_cred.oa_base   = NULL;</div><div class='del'>-        request-&gt;rm_call.cb_cred.oa_length = 0;</div><div class='add'>+    request-&gt;rm_call.cb_cred.oa_flavor = AUTH_NONE;</div><div class='add'>+    request-&gt;rm_call.cb_cred.oa_base = NULL;</div><div class='add'>+    request-&gt;rm_call.cb_cred.oa_length = 0;</div><div class='ctx'> </div><div class='del'>-        request-&gt;rm_call.cb_verf.oa_flavor = AUTH_NONE;</div><div class='del'>-        request-&gt;rm_call.cb_verf.oa_base = NULL;</div><div class='del'>-        request-&gt;rm_call.cb_verf.oa_length = 0;</div><div class='add'>+    request-&gt;rm_call.cb_verf.oa_flavor = AUTH_NONE;</div><div class='add'>+    request-&gt;rm_call.cb_verf.oa_base = NULL;</div><div class='add'>+    request-&gt;rm_call.cb_verf.oa_length = 0;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct iovec</div><div class='del'>-rpcsvc_callback_build_header (char *recordstart, size_t rlen,</div><div class='add'>+rpcsvc_callback_build_header(char *recordstart, size_t rlen,</div><div class='ctx'>                              struct rpc_msg *request, size_t payload)</div><div class='ctx'> {</div><div class='del'>-        struct iovec    requesthdr = {0, };</div><div class='del'>-        struct iovec    txrecord   = {0, 0};</div><div class='del'>-        int             ret        = -1;</div><div class='del'>-        size_t          fraglen    = 0;</div><div class='del'>-</div><div class='del'>-        ret = rpc_request_to_xdr (request, recordstart, rlen, &amp;requesthdr);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_WARNING,</div><div class='del'>-                        "Failed to create RPC request");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fraglen = payload + requesthdr.iov_len;</div><div class='del'>-        gf_log ("rpcsvc", GF_LOG_TRACE, "Request fraglen %zu, payload: %zu, "</div><div class='del'>-                "rpc hdr: %zu", fraglen, payload, requesthdr.iov_len);</div><div class='del'>-</div><div class='del'>-        txrecord.iov_base = recordstart;</div><div class='del'>-</div><div class='del'>-        /* Remember, this is only the vec for the RPC header and does not</div><div class='del'>-         * include the payload above. We needed the payload only to calculate</div><div class='del'>-         * the size of the full fragment. This size is sent in the fragment</div><div class='del'>-         * header.</div><div class='del'>-         */</div><div class='del'>-        txrecord.iov_len = requesthdr.iov_len;</div><div class='add'>+    struct iovec requesthdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec txrecord = {0, 0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t fraglen = 0;</div><div class='add'>+</div><div class='add'>+    ret = rpc_request_to_xdr(request, recordstart, rlen, &amp;requesthdr);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("rpcsvc", GF_LOG_WARNING, "Failed to create RPC request");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fraglen = payload + requesthdr.iov_len;</div><div class='add'>+    gf_log("rpcsvc", GF_LOG_TRACE,</div><div class='add'>+           "Request fraglen %zu, payload: %zu, "</div><div class='add'>+           "rpc hdr: %zu",</div><div class='add'>+           fraglen, payload, requesthdr.iov_len);</div><div class='add'>+</div><div class='add'>+    txrecord.iov_base = recordstart;</div><div class='add'>+</div><div class='add'>+    /* Remember, this is only the vec for the RPC header and does not</div><div class='add'>+     * include the payload above. We needed the payload only to calculate</div><div class='add'>+     * the size of the full fragment. This size is sent in the fragment</div><div class='add'>+     * header.</div><div class='add'>+     */</div><div class='add'>+    txrecord.iov_len = requesthdr.iov_len;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return txrecord;</div><div class='add'>+    return txrecord;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct iobuf *</div><div class='del'>-rpcsvc_callback_build_record (rpcsvc_t *rpc, int prognum, int progver,</div><div class='del'>-                              int procnum, size_t payload, u_long xid,</div><div class='del'>-                              struct iovec *recbuf)</div><div class='del'>-{</div><div class='del'>-        struct rpc_msg           request     = {0, };</div><div class='del'>-        struct iobuf            *request_iob = NULL;</div><div class='del'>-        char                    *record      = NULL;</div><div class='del'>-        struct iovec             recordhdr   = {0, };</div><div class='del'>-        size_t                   pagesize    = 0;</div><div class='del'>-        size_t                   xdr_size    = 0;</div><div class='del'>-        int                      ret         = -1;</div><div class='del'>-</div><div class='del'>-        if ((!rpc) || (!recbuf)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Fill the rpc structure and XDR it into the buffer got above. */</div><div class='del'>-        ret = rpcsvc_fill_callback (prognum, progver, procnum, payload, xid,</div><div class='del'>-                                    &amp;request);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_WARNING, "cannot build a rpc-request "</div><div class='del'>-                        "xid (%lu)", xid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* First, try to get a pointer into the buffer which the RPC</div><div class='del'>-         * layer can use.</div><div class='del'>-         */</div><div class='del'>-        xdr_size = xdr_sizeof ((xdrproc_t)xdr_callmsg, &amp;request);</div><div class='del'>-</div><div class='del'>-        request_iob = iobuf_get2 (rpc-&gt;ctx-&gt;iobuf_pool, (xdr_size + payload));</div><div class='del'>-        if (!request_iob) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pagesize = iobuf_pagesize (request_iob);</div><div class='del'>-</div><div class='del'>-        record = iobuf_ptr (request_iob);  /* Now we have it. */</div><div class='del'>-</div><div class='del'>-        recordhdr = rpcsvc_callback_build_header (record, pagesize, &amp;request,</div><div class='del'>-                                                  payload);</div><div class='del'>-</div><div class='del'>-        if (!recordhdr.iov_base) {</div><div class='del'>-                gf_log ("rpc-clnt", GF_LOG_ERROR, "Failed to build record "</div><div class='del'>-                        " header");</div><div class='del'>-                iobuf_unref (request_iob);</div><div class='del'>-                request_iob = NULL;</div><div class='del'>-                recbuf-&gt;iov_base = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        recbuf-&gt;iov_base = recordhdr.iov_base;</div><div class='del'>-        recbuf-&gt;iov_len = recordhdr.iov_len;</div><div class='add'>+rpcsvc_callback_build_record(rpcsvc_t *rpc, int prognum, int progver,</div><div class='add'>+                             int procnum, size_t payload, u_long xid,</div><div class='add'>+                             struct iovec *recbuf)</div><div class='add'>+{</div><div class='add'>+    struct rpc_msg request = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *request_iob = NULL;</div><div class='add'>+    char *record = NULL;</div><div class='add'>+    struct iovec recordhdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t pagesize = 0;</div><div class='add'>+    size_t xdr_size = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!rpc) || (!recbuf)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Fill the rpc structure and XDR it into the buffer got above. */</div><div class='add'>+    ret = rpcsvc_fill_callback(prognum, progver, procnum, payload, xid,</div><div class='add'>+                               &amp;request);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("rpcsvc", GF_LOG_WARNING,</div><div class='add'>+               "cannot build a rpc-request "</div><div class='add'>+               "xid (%lu)",</div><div class='add'>+               xid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* First, try to get a pointer into the buffer which the RPC</div><div class='add'>+     * layer can use.</div><div class='add'>+     */</div><div class='add'>+    xdr_size = xdr_sizeof((xdrproc_t)xdr_callmsg, &amp;request);</div><div class='add'>+</div><div class='add'>+    request_iob = iobuf_get2(rpc-&gt;ctx-&gt;iobuf_pool, (xdr_size + payload));</div><div class='add'>+    if (!request_iob) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pagesize = iobuf_pagesize(request_iob);</div><div class='add'>+</div><div class='add'>+    record = iobuf_ptr(request_iob); /* Now we have it. */</div><div class='add'>+</div><div class='add'>+    recordhdr = rpcsvc_callback_build_header(record, pagesize, &amp;request,</div><div class='add'>+                                             payload);</div><div class='add'>+</div><div class='add'>+    if (!recordhdr.iov_base) {</div><div class='add'>+        gf_log("rpc-clnt", GF_LOG_ERROR,</div><div class='add'>+               "Failed to build record "</div><div class='add'>+               " header");</div><div class='add'>+        iobuf_unref(request_iob);</div><div class='add'>+        request_iob = NULL;</div><div class='add'>+        recbuf-&gt;iov_base = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    recbuf-&gt;iov_base = recordhdr.iov_base;</div><div class='add'>+    recbuf-&gt;iov_len = recordhdr.iov_len;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return request_iob;</div><div class='add'>+    return request_iob;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int rpcsvc_request_submit (rpcsvc_t *rpc, rpc_transport_t *trans,</div><div class='del'>-                           rpcsvc_cbk_program_t *prog, int procnum,</div><div class='del'>-                           void *req, glusterfs_ctx_t *ctx,</div><div class='del'>-                           xdrproc_t xdrproc)</div><div class='del'>-{</div><div class='del'>-        int                     ret         = -1;</div><div class='del'>-        int                     count       = 0;</div><div class='del'>-        struct iovec            iov         = {0, };</div><div class='del'>-        struct iobuf            *iobuf      = NULL;</div><div class='del'>-        ssize_t                 xdr_size    = 0;</div><div class='del'>-        struct iobref           *iobref     = NULL;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        xdr_size = xdr_sizeof (xdrproc, req);</div><div class='del'>-</div><div class='del'>-        iobuf = iobuf_get2 (ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-        if (!iobuf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-        iov.iov_len  = iobuf_pagesize (iobuf);</div><div class='del'>-</div><div class='del'>-        ret = xdr_serialize_generic (iov, req, xdrproc);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to create XDR payload");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        iov.iov_len = ret;</div><div class='del'>-        count = 1;</div><div class='del'>-</div><div class='del'>-        iobref = iobref_new ();</div><div class='del'>-        if (!iobref) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_WARNING, "Failed to create iobref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+rpcsvc_request_submit(rpcsvc_t *rpc, rpc_transport_t *trans,</div><div class='add'>+                      rpcsvc_cbk_program_t *prog, int procnum, void *req,</div><div class='add'>+                      glusterfs_ctx_t *ctx, xdrproc_t xdrproc)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    xdr_size = xdr_sizeof(xdrproc, req);</div><div class='add'>+</div><div class='add'>+    iobuf = iobuf_get2(ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+    if (!iobuf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+    iov.iov_len = iobuf_pagesize(iobuf);</div><div class='add'>+</div><div class='add'>+    ret = xdr_serialize_generic(iov, req, xdrproc);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to create XDR payload");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    iov.iov_len = ret;</div><div class='add'>+    count = 1;</div><div class='add'>+</div><div class='add'>+    iobref = iobref_new();</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log("rpcsvc", GF_LOG_WARNING, "Failed to create iobref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobref_add (iobref, iobuf);</div><div class='add'>+    iobref_add(iobref, iobuf);</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_callback_submit (rpc, trans, prog, procnum,</div><div class='del'>-                                      &amp;iov, count, iobref);</div><div class='add'>+    ret = rpcsvc_callback_submit(rpc, trans, prog, procnum, &amp;iov, count,</div><div class='add'>+                                 iobref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='ctx'> </div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_callback_submit (rpcsvc_t *rpc, rpc_transport_t *trans,</div><div class='del'>-                        rpcsvc_cbk_program_t *prog, int procnum,</div><div class='del'>-                        struct iovec *proghdr, int proghdrcount,</div><div class='del'>-                        struct iobref *iobref)</div><div class='del'>-{</div><div class='del'>-        struct iobuf          *request_iob = NULL;</div><div class='del'>-        struct iovec           rpchdr      = {0,};</div><div class='del'>-        rpc_transport_req_t    req;</div><div class='del'>-        int                    ret         = -1;</div><div class='del'>-        int                    proglen     = 0;</div><div class='del'>-        uint32_t               xid         = 0;</div><div class='del'>-        gf_boolean_t           new_iobref  = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!rpc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset (&amp;req, 0, sizeof (req));</div><div class='del'>-</div><div class='del'>-        if (proghdr) {</div><div class='del'>-                proglen += iov_length (proghdr, proghdrcount);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xid = rpc_callback_new_callid (trans);</div><div class='del'>-</div><div class='del'>-        request_iob = rpcsvc_callback_build_record (rpc, prog-&gt;prognum,</div><div class='del'>-                                                    prog-&gt;progver, procnum,</div><div class='del'>-                                                    proglen, xid, &amp;rpchdr);</div><div class='del'>-        if (!request_iob) {</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_WARNING,</div><div class='del'>-                        "cannot build rpc-record");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+rpcsvc_callback_submit(rpcsvc_t *rpc, rpc_transport_t *trans,</div><div class='add'>+                       rpcsvc_cbk_program_t *prog, int procnum,</div><div class='add'>+                       struct iovec *proghdr, int proghdrcount,</div><div class='add'>+                       struct iobref *iobref)</div><div class='add'>+{</div><div class='add'>+    struct iobuf *request_iob = NULL;</div><div class='add'>+    struct iovec rpchdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    rpc_transport_req_t req;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int proglen = 0;</div><div class='add'>+    uint32_t xid = 0;</div><div class='add'>+    gf_boolean_t new_iobref = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (!rpc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(&amp;req, 0, sizeof(req));</div><div class='add'>+</div><div class='add'>+    if (proghdr) {</div><div class='add'>+        proglen += iov_length(proghdr, proghdrcount);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xid = rpc_callback_new_callid(trans);</div><div class='add'>+</div><div class='add'>+    request_iob = rpcsvc_callback_build_record(</div><div class='add'>+        rpc, prog-&gt;prognum, prog-&gt;progver, procnum, proglen, xid, &amp;rpchdr);</div><div class='add'>+    if (!request_iob) {</div><div class='add'>+        gf_log("rpcsvc", GF_LOG_WARNING, "cannot build rpc-record");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        iobref = iobref_new();</div><div class='ctx'>         if (!iobref) {</div><div class='del'>-                iobref = iobref_new ();</div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        gf_log ("rpcsvc", GF_LOG_WARNING, "Failed to create iobref");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                new_iobref = 1;</div><div class='add'>+            gf_log("rpcsvc", GF_LOG_WARNING, "Failed to create iobref");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        new_iobref = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobref_add (iobref, request_iob);</div><div class='add'>+    iobref_add(iobref, request_iob);</div><div class='ctx'> </div><div class='del'>-        req.msg.rpchdr = &amp;rpchdr;</div><div class='del'>-        req.msg.rpchdrcount = 1;</div><div class='del'>-        req.msg.proghdr = proghdr;</div><div class='del'>-        req.msg.proghdrcount = proghdrcount;</div><div class='del'>-        req.msg.iobref = iobref;</div><div class='add'>+    req.msg.rpchdr = &amp;rpchdr;</div><div class='add'>+    req.msg.rpchdrcount = 1;</div><div class='add'>+    req.msg.proghdr = proghdr;</div><div class='add'>+    req.msg.proghdrcount = proghdrcount;</div><div class='add'>+    req.msg.iobref = iobref;</div><div class='ctx'> </div><div class='del'>-        ret = rpc_transport_submit_request (trans, &amp;req);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("rpcsvc", GF_LOG_WARNING,</div><div class='del'>-                        "transmission of rpc-request failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpc_transport_submit_request(trans, &amp;req);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("rpcsvc", GF_LOG_WARNING, "transmission of rpc-request failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        iobuf_unref (request_iob);</div><div class='add'>+    iobuf_unref(request_iob);</div><div class='ctx'> </div><div class='del'>-        if (new_iobref)</div><div class='del'>-               iobref_unref (iobref);</div><div class='add'>+    if (new_iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_transport_submit (rpc_transport_t *trans, struct iovec *rpchdr,</div><div class='del'>-                         int rpchdrcount, struct iovec *proghdr,</div><div class='del'>-                         int proghdrcount, struct iovec *progpayload,</div><div class='del'>-                         int progpayloadcount, struct iobref *iobref,</div><div class='del'>-                         void *priv)</div><div class='del'>-{</div><div class='del'>-        int                   ret   = -1;</div><div class='del'>-        rpc_transport_reply_t reply = {{0, }};</div><div class='del'>-</div><div class='del'>-        if ((!trans) || (!rpchdr) || (!rpchdr-&gt;iov_base)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        reply.msg.rpchdr = rpchdr;</div><div class='del'>-        reply.msg.rpchdrcount = rpchdrcount;</div><div class='del'>-        reply.msg.proghdr = proghdr;</div><div class='del'>-        reply.msg.proghdrcount = proghdrcount;</div><div class='del'>-        reply.msg.progpayload = progpayload;</div><div class='del'>-        reply.msg.progpayloadcount = progpayloadcount;</div><div class='del'>-        reply.msg.iobref = iobref;</div><div class='del'>-        reply.private = priv;</div><div class='del'>-</div><div class='del'>-        ret = rpc_transport_submit_reply (trans, &amp;reply);</div><div class='add'>+rpcsvc_transport_submit(rpc_transport_t *trans, struct iovec *rpchdr,</div><div class='add'>+                        int rpchdrcount, struct iovec *proghdr,</div><div class='add'>+                        int proghdrcount, struct iovec *progpayload,</div><div class='add'>+                        int progpayloadcount, struct iobref *iobref, void *priv)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_transport_reply_t reply = {{</div><div class='add'>+        0,</div><div class='add'>+    }};</div><div class='add'>+</div><div class='add'>+    if ((!trans) || (!rpchdr) || (!rpchdr-&gt;iov_base)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    reply.msg.rpchdr = rpchdr;</div><div class='add'>+    reply.msg.rpchdrcount = rpchdrcount;</div><div class='add'>+    reply.msg.proghdr = proghdr;</div><div class='add'>+    reply.msg.proghdrcount = proghdrcount;</div><div class='add'>+    reply.msg.progpayload = progpayload;</div><div class='add'>+    reply.msg.progpayloadcount = progpayloadcount;</div><div class='add'>+    reply.msg.iobref = iobref;</div><div class='add'>+    reply.private = priv;</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_submit_reply(trans, &amp;reply);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_fill_reply (rpcsvc_request_t *req, struct rpc_msg *reply)</div><div class='del'>-{</div><div class='del'>-        int                      ret  = -1;</div><div class='del'>-        rpcsvc_program_t        *prog = NULL;</div><div class='del'>-        if ((!req) || (!reply))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-        rpc_fill_empty_reply (reply, req-&gt;xid);</div><div class='del'>-        if (req-&gt;rpc_status == MSG_DENIED) {</div><div class='del'>-                rpc_fill_denied_reply (reply, req-&gt;rpc_err, req-&gt;auth_err);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        prog = rpcsvc_request_program (req);</div><div class='del'>-</div><div class='del'>-        if (req-&gt;rpc_status == MSG_ACCEPTED)</div><div class='del'>-                rpc_fill_accepted_reply (reply, req-&gt;rpc_err,</div><div class='del'>-                                         (prog) ? prog-&gt;proglowvers : 0,</div><div class='del'>-                                         (prog) ? prog-&gt;proghighvers: 0,</div><div class='del'>-                                         req-&gt;verf.flavour, req-&gt;verf.datalen,</div><div class='del'>-                                         req-&gt;verf.authdata);</div><div class='del'>-        else</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Invalid rpc_status value");</div><div class='add'>+rpcsvc_fill_reply(rpcsvc_request_t *req, struct rpc_msg *reply)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpcsvc_program_t *prog = NULL;</div><div class='add'>+    if ((!req) || (!reply))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    rpc_fill_empty_reply(reply, req-&gt;xid);</div><div class='add'>+    if (req-&gt;rpc_status == MSG_DENIED) {</div><div class='add'>+        rpc_fill_denied_reply(reply, req-&gt;rpc_err, req-&gt;auth_err);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    prog = rpcsvc_request_program(req);</div><div class='add'>+</div><div class='add'>+    if (req-&gt;rpc_status == MSG_ACCEPTED)</div><div class='add'>+        rpc_fill_accepted_reply(</div><div class='add'>+            reply, req-&gt;rpc_err, (prog) ? prog-&gt;proglowvers : 0,</div><div class='add'>+            (prog) ? prog-&gt;proghighvers : 0, req-&gt;verf.flavour,</div><div class='add'>+            req-&gt;verf.datalen, req-&gt;verf.authdata);</div><div class='add'>+    else</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Invalid rpc_status value");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Given a request and the reply payload, build a reply and encodes the reply</div><div class='ctx'>  * into a record header. This record header is encoded into the vector pointed</div><div class='ctx'>  * to be recbuf.</div><div class='hunk'>@@ -1224,59 +1225,60 @@ out:</div><div class='ctx'>  * we should account for the length of that buffer in the RPC fragment header.</div><div class='ctx'>  */</div><div class='ctx'> struct iobuf *</div><div class='del'>-rpcsvc_record_build_record (rpcsvc_request_t *req, size_t payload,</div><div class='del'>-                            size_t hdrlen, struct iovec *recbuf)</div><div class='del'>-{</div><div class='del'>-        struct rpc_msg          reply;</div><div class='del'>-        struct iobuf            *replyiob = NULL;</div><div class='del'>-        char                    *record = NULL;</div><div class='del'>-        struct iovec            recordhdr = {0, };</div><div class='del'>-        size_t                  pagesize = 0;</div><div class='del'>-        size_t                  xdr_size = 0;</div><div class='del'>-        rpcsvc_t                *svc = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+rpcsvc_record_build_record(rpcsvc_request_t *req, size_t payload, size_t hdrlen,</div><div class='add'>+                           struct iovec *recbuf)</div><div class='add'>+{</div><div class='add'>+    struct rpc_msg reply;</div><div class='add'>+    struct iobuf *replyiob = NULL;</div><div class='add'>+    char *record = NULL;</div><div class='add'>+    struct iovec recordhdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t pagesize = 0;</div><div class='add'>+    size_t xdr_size = 0;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!req) || (!req-&gt;trans) || (!req-&gt;svc) || (!recbuf))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!req) || (!req-&gt;trans) || (!req-&gt;svc) || (!recbuf))</div><div class='del'>-                return NULL;</div><div class='add'>+    svc = req-&gt;svc;</div><div class='ctx'> </div><div class='del'>-        svc = req-&gt;svc;</div><div class='add'>+    /* Fill the rpc structure and XDR it into the buffer got above. */</div><div class='add'>+    ret = rpcsvc_fill_reply(req, &amp;reply);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err_exit;</div><div class='ctx'> </div><div class='del'>-        /* Fill the rpc structure and XDR it into the buffer got above. */</div><div class='del'>-        ret = rpcsvc_fill_reply (req, &amp;reply);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err_exit;</div><div class='add'>+    xdr_size = xdr_sizeof((xdrproc_t)xdr_replymsg, &amp;reply);</div><div class='ctx'> </div><div class='del'>-        xdr_size = xdr_sizeof ((xdrproc_t)xdr_replymsg, &amp;reply);</div><div class='add'>+    /* Payload would include 'readv' size etc too, where as</div><div class='add'>+       that comes as another payload iobuf */</div><div class='add'>+    replyiob = iobuf_get2(svc-&gt;ctx-&gt;iobuf_pool, (xdr_size + hdrlen));</div><div class='add'>+    if (!replyiob) {</div><div class='add'>+        goto err_exit;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Payload would include 'readv' size etc too, where as</div><div class='del'>-           that comes as another payload iobuf */</div><div class='del'>-        replyiob = iobuf_get2 (svc-&gt;ctx-&gt;iobuf_pool, (xdr_size + hdrlen));</div><div class='del'>-        if (!replyiob) {</div><div class='del'>-                goto err_exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pagesize = iobuf_pagesize (replyiob);</div><div class='add'>+    pagesize = iobuf_pagesize(replyiob);</div><div class='ctx'> </div><div class='del'>-        record = iobuf_ptr (replyiob);  /* Now we have it. */</div><div class='add'>+    record = iobuf_ptr(replyiob); /* Now we have it. */</div><div class='ctx'> </div><div class='del'>-        recordhdr = rpcsvc_record_build_header (record, pagesize, reply,</div><div class='del'>-                                                payload);</div><div class='del'>-        if (!recordhdr.iov_base) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to build record "</div><div class='del'>-                        " header");</div><div class='del'>-                iobuf_unref (replyiob);</div><div class='del'>-                replyiob = NULL;</div><div class='del'>-                recbuf-&gt;iov_base = NULL;</div><div class='del'>-                goto err_exit;</div><div class='del'>-        }</div><div class='add'>+    recordhdr = rpcsvc_record_build_header(record, pagesize, reply, payload);</div><div class='add'>+    if (!recordhdr.iov_base) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Failed to build record "</div><div class='add'>+               " header");</div><div class='add'>+        iobuf_unref(replyiob);</div><div class='add'>+        replyiob = NULL;</div><div class='add'>+        recbuf-&gt;iov_base = NULL;</div><div class='add'>+        goto err_exit;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        recbuf-&gt;iov_base = recordhdr.iov_base;</div><div class='del'>-        recbuf-&gt;iov_len = recordhdr.iov_len;</div><div class='add'>+    recbuf-&gt;iov_base = recordhdr.iov_base;</div><div class='add'>+    recbuf-&gt;iov_len = recordhdr.iov_len;</div><div class='ctx'> err_exit:</div><div class='del'>-        return replyiob;</div><div class='add'>+    return replyiob;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * The function to submit a program message to the RPC service.</div><div class='ctx'>  * This message is added to the transmission queue of the</div><div class='hunk'>@@ -1304,331 +1306,336 @@ err_exit:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_submit_generic (rpcsvc_request_t *req, struct iovec *proghdr,</div><div class='del'>-                       int hdrcount, struct iovec *payload, int payloadcount,</div><div class='del'>-                       struct iobref *iobref)</div><div class='del'>-{</div><div class='del'>-        int                     ret        = -1, i = 0;</div><div class='del'>-        struct iobuf           *replyiob   = NULL;</div><div class='del'>-        struct iovec            recordhdr  = {0, };</div><div class='del'>-        rpc_transport_t        *trans      = NULL;</div><div class='del'>-        size_t                  msglen     = 0;</div><div class='del'>-        size_t                  hdrlen     = 0;</div><div class='del'>-        char                    new_iobref = 0;</div><div class='del'>-        rpcsvc_drc_globals_t   *drc        = NULL;</div><div class='del'>-</div><div class='del'>-        if ((!req) || (!req-&gt;trans))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        trans = req-&gt;trans;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; hdrcount; i++) {</div><div class='del'>-                msglen += proghdr[i].iov_len;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; payloadcount; i++) {</div><div class='del'>-                msglen += payload[i].iov_len;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Tx message: %zu", msglen);</div><div class='del'>-</div><div class='del'>-        /* Build the buffer containing the encoded RPC reply. */</div><div class='del'>-        replyiob = rpcsvc_record_build_record (req, msglen, hdrlen, &amp;recordhdr);</div><div class='del'>-        if (!replyiob) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,"Reply record creation failed");</div><div class='del'>-                goto disconnect_exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+rpcsvc_submit_generic(rpcsvc_request_t *req, struct iovec *proghdr,</div><div class='add'>+                      int hdrcount, struct iovec *payload, int payloadcount,</div><div class='add'>+                      struct iobref *iobref)</div><div class='add'>+{</div><div class='add'>+    int ret = -1, i = 0;</div><div class='add'>+    struct iobuf *replyiob = NULL;</div><div class='add'>+    struct iovec recordhdr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    size_t msglen = 0;</div><div class='add'>+    size_t hdrlen = 0;</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+    rpcsvc_drc_globals_t *drc = NULL;</div><div class='add'>+</div><div class='add'>+    if ((!req) || (!req-&gt;trans))</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    trans = req-&gt;trans;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; hdrcount; i++) {</div><div class='add'>+        msglen += proghdr[i].iov_len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; payloadcount; i++) {</div><div class='add'>+        msglen += payload[i].iov_len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "Tx message: %zu", msglen);</div><div class='add'>+</div><div class='add'>+    /* Build the buffer containing the encoded RPC reply. */</div><div class='add'>+    replyiob = rpcsvc_record_build_record(req, msglen, hdrlen, &amp;recordhdr);</div><div class='add'>+    if (!replyiob) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Reply record creation failed");</div><div class='add'>+        goto disconnect_exit;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        iobref = iobref_new();</div><div class='ctx'>         if (!iobref) {</div><div class='del'>-                iobref = iobref_new ();</div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        goto disconnect_exit;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                new_iobref = 1;</div><div class='add'>+            goto disconnect_exit;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        iobref_add (iobref, replyiob);</div><div class='del'>-</div><div class='del'>-        /* cache the request in the duplicate request cache for appropriate ops */</div><div class='del'>-        if ((req-&gt;reply) &amp;&amp; (rpcsvc_need_drc (req))) {</div><div class='del'>-                drc = req-&gt;svc-&gt;drc;</div><div class='add'>+        new_iobref = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;drc-&gt;lock);</div><div class='del'>-                ret = rpcsvc_cache_reply (req, iobref, &amp;recordhdr, 1,</div><div class='del'>-                                          proghdr, hdrcount,</div><div class='del'>-                                          payload, payloadcount);</div><div class='del'>-                UNLOCK (&amp;drc-&gt;lock);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                "failed to cache reply");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    iobref_add(iobref, replyiob);</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_transport_submit (trans, &amp;recordhdr, 1, proghdr, hdrcount,</div><div class='del'>-                                       payload, payloadcount, iobref,</div><div class='del'>-                                       req-&gt;trans_private);</div><div class='add'>+    /* cache the request in the duplicate request cache for appropriate ops */</div><div class='add'>+    if ((req-&gt;reply) &amp;&amp; (rpcsvc_need_drc(req))) {</div><div class='add'>+        drc = req-&gt;svc-&gt;drc;</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "failed to submit message "</div><div class='del'>-                        "(XID: 0x%x, Program: %s, ProgVers: %d, Proc: %d) to "</div><div class='del'>-                        "rpc-transport (%s)", req-&gt;xid,</div><div class='del'>-                        req-&gt;prog ? req-&gt;prog-&gt;progname : "(not matched)",</div><div class='del'>-                        req-&gt;prog ? req-&gt;prog-&gt;progver : 0,</div><div class='del'>-                        req-&gt;procnum, trans ? trans-&gt;name : "");</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_TRACE,</div><div class='del'>-                        "submitted reply for rpc-message (XID: 0x%x, "</div><div class='del'>-                        "Program: %s, ProgVers: %d, Proc: %d) to rpc-transport "</div><div class='del'>-                        "(%s)", req-&gt;xid, req-&gt;prog ? req-&gt;prog-&gt;progname: "-",</div><div class='del'>-                        req-&gt;prog ? req-&gt;prog-&gt;progver : 0,</div><div class='del'>-                        req-&gt;procnum, trans ? trans-&gt;name : "");</div><div class='del'>-        }</div><div class='add'>+        LOCK(&amp;drc-&gt;lock);</div><div class='add'>+        ret = rpcsvc_cache_reply(req, iobref, &amp;recordhdr, 1, proghdr, hdrcount,</div><div class='add'>+                                 payload, payloadcount);</div><div class='add'>+        UNLOCK(&amp;drc-&gt;lock);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR, "failed to cache reply");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_transport_submit(trans, &amp;recordhdr, 1, proghdr, hdrcount,</div><div class='add'>+                                  payload, payloadcount, iobref,</div><div class='add'>+                                  req-&gt;trans_private);</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "failed to submit message "</div><div class='add'>+               "(XID: 0x%x, Program: %s, ProgVers: %d, Proc: %d) to "</div><div class='add'>+               "rpc-transport (%s)",</div><div class='add'>+               req-&gt;xid, req-&gt;prog ? req-&gt;prog-&gt;progname : "(not matched)",</div><div class='add'>+               req-&gt;prog ? req-&gt;prog-&gt;progver : 0, req-&gt;procnum,</div><div class='add'>+               trans ? trans-&gt;name : "");</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_TRACE,</div><div class='add'>+               "submitted reply for rpc-message (XID: 0x%x, "</div><div class='add'>+               "Program: %s, ProgVers: %d, Proc: %d) to rpc-transport "</div><div class='add'>+               "(%s)",</div><div class='add'>+               req-&gt;xid, req-&gt;prog ? req-&gt;prog-&gt;progname : "-",</div><div class='add'>+               req-&gt;prog ? req-&gt;prog-&gt;progver : 0, req-&gt;procnum,</div><div class='add'>+               trans ? trans-&gt;name : "");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> disconnect_exit:</div><div class='del'>-        if (replyiob) {</div><div class='del'>-                iobuf_unref (replyiob);</div><div class='del'>-        }</div><div class='add'>+    if (replyiob) {</div><div class='add'>+        iobuf_unref(replyiob);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (new_iobref) {</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        }</div><div class='add'>+    if (new_iobref) {</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpcsvc_request_destroy (req);</div><div class='add'>+    rpcsvc_request_destroy(req);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_error_reply (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_error_reply(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        struct iovec    dummyvec = {0, };</div><div class='add'>+    struct iovec dummyvec = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!req)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!req)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        gf_log_callingfn ("", GF_LOG_DEBUG, "sending a RPC error reply");</div><div class='add'>+    gf_log_callingfn("", GF_LOG_DEBUG, "sending a RPC error reply");</div><div class='ctx'> </div><div class='del'>-        /* At this point the req should already have been filled with the</div><div class='del'>-         * appropriate RPC error numbers.</div><div class='del'>-         */</div><div class='del'>-        return rpcsvc_submit_generic (req, &amp;dummyvec, 0, NULL, 0, NULL);</div><div class='add'>+    /* At this point the req should already have been filled with the</div><div class='add'>+     * appropriate RPC error numbers.</div><div class='add'>+     */</div><div class='add'>+    return rpcsvc_submit_generic(req, &amp;dummyvec, 0, NULL, 0, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifdef IPV6_DEFAULT</div><div class='ctx'> int</div><div class='del'>-rpcsvc_program_register_rpcbind6 (rpcsvc_program_t *newprog, uint32_t port)</div><div class='del'>-{</div><div class='del'>-        const int IP_BUF_LEN = 64;</div><div class='del'>-        char addr_buf[IP_BUF_LEN];</div><div class='del'>-</div><div class='del'>-        int err = 0;</div><div class='del'>-        bool_t success = 0;</div><div class='del'>-        struct netconfig *nc;</div><div class='del'>-        struct netbuf *nb;</div><div class='del'>-</div><div class='del'>-        if (!newprog) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        nc = getnetconfigent ("tcp6");</div><div class='del'>-        if (!nc) {</div><div class='del'>-                err = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        err = sprintf (addr_buf, "::.%d.%d", port &gt;&gt; 8 &amp; 0xff,</div><div class='del'>-                       port &amp; 0xff);</div><div class='del'>-        if (err &lt; 0) {</div><div class='del'>-                err = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        nb = uaddr2taddr (nc, addr_buf);</div><div class='del'>-        if (!nb) {</div><div class='del'>-                err = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Force the unregistration of the program first.</div><div class='del'>-         * This call may fail if nothing has been registered,</div><div class='del'>-         * which is fine.</div><div class='del'>-         */</div><div class='del'>-        rpcsvc_program_unregister_rpcbind6 (newprog);</div><div class='del'>-</div><div class='del'>-        success = rpcb_set (newprog-&gt;prognum, newprog-&gt;progver, nc, nb);</div><div class='del'>-        if (!success) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Could not register the IPv6"</div><div class='del'>-                                                 " service with rpcbind");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        err = 0;</div><div class='add'>+rpcsvc_program_register_rpcbind6(rpcsvc_program_t *newprog, uint32_t port)</div><div class='add'>+{</div><div class='add'>+    const int IP_BUF_LEN = 64;</div><div class='add'>+    char addr_buf[IP_BUF_LEN];</div><div class='add'>+</div><div class='add'>+    int err = 0;</div><div class='add'>+    bool_t success = 0;</div><div class='add'>+    struct netconfig *nc;</div><div class='add'>+    struct netbuf *nb;</div><div class='add'>+</div><div class='add'>+    if (!newprog) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    nc = getnetconfigent("tcp6");</div><div class='add'>+    if (!nc) {</div><div class='add'>+        err = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    err = sprintf(addr_buf, "::.%d.%d", port &gt;&gt; 8 &amp; 0xff, port &amp; 0xff);</div><div class='add'>+    if (err &lt; 0) {</div><div class='add'>+        err = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    nb = uaddr2taddr(nc, addr_buf);</div><div class='add'>+    if (!nb) {</div><div class='add'>+        err = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Force the unregistration of the program first.</div><div class='add'>+     * This call may fail if nothing has been registered,</div><div class='add'>+     * which is fine.</div><div class='add'>+     */</div><div class='add'>+    rpcsvc_program_unregister_rpcbind6(newprog);</div><div class='add'>+</div><div class='add'>+    success = rpcb_set(newprog-&gt;prognum, newprog-&gt;progver, nc, nb);</div><div class='add'>+    if (!success) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Could not register the IPv6"</div><div class='add'>+               " service with rpcbind");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    err = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return err;</div><div class='add'>+    return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_program_unregister_rpcbind6 (rpcsvc_program_t *newprog)</div><div class='del'>-{</div><div class='del'>-        int err = 0;</div><div class='del'>-        bool_t success = 0;</div><div class='del'>-        struct netconfig *nc;</div><div class='del'>-</div><div class='del'>-        if (!newprog) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        nc = getnetconfigent ("tcp6");</div><div class='del'>-        if (!nc) {</div><div class='del'>-                err = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        success = rpcb_unset (newprog-&gt;prognum, newprog-&gt;progver, nc);</div><div class='del'>-        if (!success) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Could not unregister the IPv6"</div><div class='del'>-                                                 " service with rpcbind");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        err = 0;</div><div class='add'>+rpcsvc_program_unregister_rpcbind6(rpcsvc_program_t *newprog)</div><div class='add'>+{</div><div class='add'>+    int err = 0;</div><div class='add'>+    bool_t success = 0;</div><div class='add'>+    struct netconfig *nc;</div><div class='add'>+</div><div class='add'>+    if (!newprog) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    nc = getnetconfigent("tcp6");</div><div class='add'>+    if (!nc) {</div><div class='add'>+        err = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    success = rpcb_unset(newprog-&gt;prognum, newprog-&gt;progver, nc);</div><div class='add'>+    if (!success) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Could not unregister the IPv6"</div><div class='add'>+               " service with rpcbind");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    err = 0;</div><div class='ctx'> out:</div><div class='del'>-        return err;</div><div class='add'>+    return err;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* Register the program with the local portmapper service. */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_program_register_portmap (rpcsvc_program_t *newprog, uint32_t port)</div><div class='add'>+rpcsvc_program_register_portmap(rpcsvc_program_t *newprog, uint32_t port)</div><div class='ctx'> {</div><div class='del'>-        int                ret   = -1; /* FAIL */</div><div class='add'>+    int ret = -1; /* FAIL */</div><div class='ctx'> </div><div class='del'>-        if (!newprog) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!newprog) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* pmap_set() returns 0 for FAIL and 1 for SUCCESS */</div><div class='del'>-        if (!(pmap_set (newprog-&gt;prognum, newprog-&gt;progver, IPPROTO_TCP,</div><div class='del'>-                        port))) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Could not register with"</div><div class='del'>-                        " portmap %d %d %u", newprog-&gt;prognum, newprog-&gt;progver, port);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* pmap_set() returns 0 for FAIL and 1 for SUCCESS */</div><div class='add'>+    if (!(pmap_set(newprog-&gt;prognum, newprog-&gt;progver, IPPROTO_TCP, port))) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Could not register with"</div><div class='add'>+               " portmap %d %d %u",</div><div class='add'>+               newprog-&gt;prognum, newprog-&gt;progver, port);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0; /* SUCCESS */</div><div class='add'>+    ret = 0; /* SUCCESS */</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_program_unregister_portmap (rpcsvc_program_t *prog)</div><div class='add'>+rpcsvc_program_unregister_portmap(rpcsvc_program_t *prog)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!prog)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!prog)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!(pmap_unset(prog-&gt;prognum, prog-&gt;progver))) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Could not unregister with"</div><div class='del'>-                        " portmap");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!(pmap_unset(prog-&gt;prognum, prog-&gt;progver))) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Could not unregister with"</div><div class='add'>+               " portmap");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_register_portmap_enabled (rpcsvc_t *svc)</div><div class='add'>+rpcsvc_register_portmap_enabled(rpcsvc_t *svc)</div><div class='ctx'> {</div><div class='del'>-        return svc-&gt;register_portmap;</div><div class='add'>+    return svc-&gt;register_portmap;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rpcsvc_get_listener_port (rpcsvc_listener_t *listener)</div><div class='add'>+rpcsvc_get_listener_port(rpcsvc_listener_t *listener)</div><div class='ctx'> {</div><div class='del'>-        int32_t listener_port = -1;</div><div class='add'>+    int32_t listener_port = -1;</div><div class='ctx'> </div><div class='del'>-        if ((listener == NULL) || (listener-&gt;trans == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((listener == NULL) || (listener-&gt;trans == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (listener-&gt;trans-&gt;myinfo.sockaddr.ss_family) {</div><div class='add'>+    switch (listener-&gt;trans-&gt;myinfo.sockaddr.ss_family) {</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                listener_port = ((struct sockaddr_in *)&amp;listener-&gt;trans-&gt;myinfo.sockaddr)-&gt;sin_port;</div><div class='del'>-                break;</div><div class='add'>+            listener_port = ((struct sockaddr_in *)&amp;listener-&gt;trans-&gt;myinfo</div><div class='add'>+                                 .sockaddr)</div><div class='add'>+                                -&gt;sin_port;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                listener_port = ((struct sockaddr_in6 *)&amp;listener-&gt;trans-&gt;myinfo.sockaddr)-&gt;sin6_port;</div><div class='del'>-                break;</div><div class='add'>+            listener_port = ((struct sockaddr_in6 *)&amp;listener-&gt;trans-&gt;myinfo</div><div class='add'>+                                 .sockaddr)</div><div class='add'>+                                -&gt;sin6_port;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG,</div><div class='del'>-                        "invalid address family (%d)",</div><div class='del'>-                        listener-&gt;trans-&gt;myinfo.sockaddr.ss_family);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_DEBUG, "invalid address family (%d)",</div><div class='add'>+                   listener-&gt;trans-&gt;myinfo.sockaddr.ss_family);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        listener_port = ntohs (listener_port);</div><div class='add'>+    listener_port = ntohs(listener_port);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return listener_port;</div><div class='add'>+    return listener_port;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpcsvc_listener_t *</div><div class='del'>-rpcsvc_get_listener (rpcsvc_t *svc, uint16_t port, rpc_transport_t *trans)</div><div class='add'>+rpcsvc_get_listener(rpcsvc_t *svc, uint16_t port, rpc_transport_t *trans)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_listener_t  *listener      = NULL;</div><div class='del'>-        char                found         = 0;</div><div class='del'>-        rpcsvc_listener_t  *next          = NULL;</div><div class='del'>-        uint32_t            listener_port = 0;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='add'>+    char found = 0;</div><div class='add'>+    rpcsvc_listener_t *next = NULL;</div><div class='add'>+    uint32_t listener_port = 0;</div><div class='ctx'> </div><div class='del'>-        if (!svc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!svc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_rdlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_rdlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(listener, next, &amp;svc-&gt;listeners, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (listener, next, &amp;svc-&gt;listeners, list) {</div><div class='del'>-                        if (trans != NULL) {</div><div class='del'>-                                if (listener-&gt;trans == trans) {</div><div class='del'>-                                        found = 1;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        listener_port = rpcsvc_get_listener_port (listener);</div><div class='del'>-                        if (listener_port == -1) {</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                        "invalid port for listener %s",</div><div class='del'>-                                        listener-&gt;trans-&gt;name);</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (listener_port == port) {</div><div class='del'>-                                found = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            if (trans != NULL) {</div><div class='add'>+                if (listener-&gt;trans == trans) {</div><div class='add'>+                    found = 1;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        if (!found) {</div><div class='del'>-                listener = NULL;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            listener_port = rpcsvc_get_listener_port(listener);</div><div class='add'>+            if (listener_port == -1) {</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_ERROR, "invalid port for listener %s",</div><div class='add'>+                       listener-&gt;trans-&gt;name);</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (listener_port == port) {</div><div class='add'>+                found = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='add'>+</div><div class='add'>+    if (!found) {</div><div class='add'>+        listener = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return listener;</div><div class='add'>+    return listener;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* The only difference between the generic submit and this one is that the</div><div class='ctx'>  * generic submit is also used for submitting RPC error replies in where there</div><div class='ctx'>  * are no payloads so the msgvec and msgbuf can be NULL.</div><div class='hunk'>@@ -1636,819 +1643,824 @@ out:</div><div class='ctx'>  * we must perform NULL checks before calling the generic submit.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_submit_message (rpcsvc_request_t *req, struct iovec *proghdr,</div><div class='del'>-                       int hdrcount, struct iovec *payload, int payloadcount,</div><div class='del'>-                       struct iobref *iobref)</div><div class='add'>+rpcsvc_submit_message(rpcsvc_request_t *req, struct iovec *proghdr,</div><div class='add'>+                      int hdrcount, struct iovec *payload, int payloadcount,</div><div class='add'>+                      struct iobref *iobref)</div><div class='ctx'> {</div><div class='del'>-        if ((!req) || (!req-&gt;trans) || (!proghdr) || (!proghdr-&gt;iov_base))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!req) || (!req-&gt;trans) || (!proghdr) || (!proghdr-&gt;iov_base))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        return rpcsvc_submit_generic (req, proghdr, hdrcount, payload,</div><div class='del'>-                                      payloadcount, iobref);</div><div class='add'>+    return rpcsvc_submit_generic(req, proghdr, hdrcount, payload, payloadcount,</div><div class='add'>+                                 iobref);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_program_unregister (rpcsvc_t *svc, rpcsvc_program_t *program)</div><div class='del'>-{</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        rpcsvc_program_t        *prog = NULL;</div><div class='del'>-        if (!svc || !program) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_program_unregister_portmap (program);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "portmap unregistration of"</div><div class='del'>-                        " program failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+rpcsvc_program_unregister(rpcsvc_t *svc, rpcsvc_program_t *program)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpcsvc_program_t *prog = NULL;</div><div class='add'>+    if (!svc || !program) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_program_unregister_portmap(program);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "portmap unregistration of"</div><div class='add'>+               " program failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> #ifdef IPV6_DEFAULT</div><div class='del'>-        ret = rpcsvc_program_unregister_rpcbind6 (program);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "rpcbind (ipv6)"</div><div class='del'>-                        " unregistration of program failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = rpcsvc_program_unregister_rpcbind6(program);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "rpcbind (ipv6)"</div><div class='add'>+               " unregistration of program failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='del'>-        pthread_rwlock_rdlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_rdlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(prog, &amp;svc-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (prog, &amp;svc-&gt;programs, program) {</div><div class='del'>-                        if ((prog-&gt;prognum == program-&gt;prognum)</div><div class='del'>-                            &amp;&amp; (prog-&gt;progver == program-&gt;progver)) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if ((prog-&gt;prognum == program-&gt;prognum) &amp;&amp;</div><div class='add'>+                (prog-&gt;progver == program-&gt;progver)) {</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Program unregistered: %s, Num: %d,"</div><div class='del'>-                " Ver: %d, Port: %d", prog-&gt;progname, prog-&gt;prognum,</div><div class='del'>-                prog-&gt;progver, prog-&gt;progport);</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+           "Program unregistered: %s, Num: %d,"</div><div class='add'>+           " Ver: %d, Port: %d",</div><div class='add'>+           prog-&gt;progname, prog-&gt;prognum, prog-&gt;progver, prog-&gt;progport);</div><div class='ctx'> </div><div class='del'>-        if (prog-&gt;ownthread) {</div><div class='del'>-                prog-&gt;alive = _gf_false;</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (prog-&gt;ownthread) {</div><div class='add'>+        prog-&gt;alive = _gf_false;</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='del'>-        {</div><div class='del'>-                list_del_init (&amp;prog-&gt;program);</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;prog-&gt;program);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (program) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR, "Program "</div><div class='del'>-                                "unregistration failed"</div><div class='del'>-                                ": %s, Num: %d, Ver: %d, Port: %d",</div><div class='del'>-                                program-&gt;progname, program-&gt;prognum,</div><div class='del'>-                                program-&gt;progver, program-&gt;progport);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR, "Program not found");</div><div class='del'>-                }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (program) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+                   "Program "</div><div class='add'>+                   "unregistration failed"</div><div class='add'>+                   ": %s, Num: %d, Ver: %d, Port: %d",</div><div class='add'>+                   program-&gt;progname, program-&gt;prognum, program-&gt;progver,</div><div class='add'>+                   program-&gt;progport);</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR, "Program not found");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_transport_peername (rpc_transport_t *trans, char *hostname, int hostlen)</div><div class='add'>+rpcsvc_transport_peername(rpc_transport_t *trans, char *hostname, int hostlen)</div><div class='ctx'> {</div><div class='del'>-        if (!trans) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!trans) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return rpc_transport_get_peername (trans, hostname, hostlen);</div><div class='add'>+    return rpc_transport_get_peername(trans, hostname, hostlen);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_transport_peeraddr (rpc_transport_t *trans, char *addrstr, int addrlen,</div><div class='del'>-                           struct sockaddr_storage *sa, socklen_t sasize)</div><div class='add'>+rpcsvc_transport_peeraddr(rpc_transport_t *trans, char *addrstr, int addrlen,</div><div class='add'>+                          struct sockaddr_storage *sa, socklen_t sasize)</div><div class='ctx'> {</div><div class='del'>-        if (!trans) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!trans) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return rpc_transport_get_peeraddr(trans, addrstr, addrlen, sa,</div><div class='del'>-                                          sasize);</div><div class='add'>+    return rpc_transport_get_peeraddr(trans, addrstr, addrlen, sa, sasize);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_listener_t *</div><div class='del'>-rpcsvc_listener_alloc (rpcsvc_t *svc, rpc_transport_t *trans)</div><div class='add'>+rpcsvc_listener_alloc(rpcsvc_t *svc, rpc_transport_t *trans)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_listener_t *listener = NULL;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='ctx'> </div><div class='del'>-        listener = GF_CALLOC (1, sizeof (*listener),</div><div class='del'>-                              gf_common_mt_rpcsvc_listener_t);</div><div class='del'>-        if (!listener) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    listener = GF_CALLOC(1, sizeof(*listener), gf_common_mt_rpcsvc_listener_t);</div><div class='add'>+    if (!listener) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        listener-&gt;trans = trans;</div><div class='del'>-        listener-&gt;svc = svc;</div><div class='add'>+    listener-&gt;trans = trans;</div><div class='add'>+    listener-&gt;svc = svc;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;listener-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;listener-&gt;list);</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;listener-&gt;list, &amp;svc-&gt;listeners);</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;listener-&gt;list, &amp;svc-&gt;listeners);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> out:</div><div class='del'>-        return listener;</div><div class='add'>+    return listener;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpcsvc_create_listener (rpcsvc_t *svc, dict_t *options, char *name)</div><div class='del'>-{</div><div class='del'>-        rpc_transport_t   *trans    = NULL;</div><div class='del'>-        rpcsvc_listener_t *listener = NULL;</div><div class='del'>-        int32_t            ret      = -1;</div><div class='del'>-</div><div class='del'>-        if (!svc || !options) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        trans = rpc_transport_load (svc-&gt;ctx, options, name);</div><div class='del'>-        if (!trans) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "cannot create listener, "</div><div class='del'>-                        "initing the transport failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_transport_listen (trans);</div><div class='del'>-        if (ret == -EADDRINUSE || ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING,</div><div class='del'>-                        "listening on transport failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_transport_register_notify (trans, rpcsvc_notify, svc);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_WARNING, "registering notify failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        listener = rpcsvc_listener_alloc (svc, trans);</div><div class='del'>-        if (listener == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+rpcsvc_create_listener(rpcsvc_t *svc, dict_t *options, char *name)</div><div class='add'>+{</div><div class='add'>+    rpc_transport_t *trans = NULL;</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!svc || !options) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    trans = rpc_transport_load(svc-&gt;ctx, options, name);</div><div class='add'>+    if (!trans) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING,</div><div class='add'>+               "cannot create listener, "</div><div class='add'>+               "initing the transport failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_listen(trans);</div><div class='add'>+    if (ret == -EADDRINUSE || ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "listening on transport failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_register_notify(trans, rpcsvc_notify, svc);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_WARNING, "registering notify failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    listener = rpcsvc_listener_alloc(svc, trans);</div><div class='add'>+    if (listener == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (!listener &amp;&amp; trans) {</div><div class='del'>-                rpc_transport_disconnect (trans, _gf_true);</div><div class='del'>-        }</div><div class='add'>+    if (!listener &amp;&amp; trans) {</div><div class='add'>+        rpc_transport_disconnect(trans, _gf_true);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-rpcsvc_create_listeners (rpcsvc_t *svc, dict_t *options, char *name)</div><div class='add'>+rpcsvc_create_listeners(rpcsvc_t *svc, dict_t *options, char *name)</div><div class='ctx'> {</div><div class='del'>-        int32_t  ret            = -1, count = 0;</div><div class='del'>-        data_t  *data           = NULL;</div><div class='del'>-        char    *str            = NULL, *ptr = NULL, *transport_name = NULL;</div><div class='del'>-        char    *transport_type = NULL, *saveptr = NULL, *tmp = NULL;</div><div class='add'>+    int32_t ret = -1, count = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    char *str = NULL, *ptr = NULL, *transport_name = NULL;</div><div class='add'>+    char *transport_type = NULL, *saveptr = NULL, *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((svc == NULL) || (options == NULL) || (name == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((svc == NULL) || (options == NULL) || (name == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "transport-type");</div><div class='del'>-        if (data == NULL) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "option transport-type not set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    data = dict_get(options, "transport-type");</div><div class='add'>+    if (data == NULL) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "option transport-type not set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        transport_type = data_to_str (data);</div><div class='del'>-        if (transport_type == NULL) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "option transport-type not set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    transport_type = data_to_str(data);</div><div class='add'>+    if (transport_type == NULL) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "option transport-type not set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* duplicate transport_type, since following dict_set will free it */</div><div class='del'>-        transport_type = gf_strdup (transport_type);</div><div class='del'>-        if (transport_type == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* duplicate transport_type, since following dict_set will free it */</div><div class='add'>+    transport_type = gf_strdup(transport_type);</div><div class='add'>+    if (transport_type == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        str = gf_strdup (transport_type);</div><div class='del'>-        if (str == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    str = gf_strdup(transport_type);</div><div class='add'>+    if (str == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ptr = strtok_r (str, ",", &amp;saveptr);</div><div class='add'>+    ptr = strtok_r(str, ",", &amp;saveptr);</div><div class='ctx'> </div><div class='del'>-        while (ptr != NULL) {</div><div class='del'>-                tmp = gf_strdup (ptr);</div><div class='del'>-                if (tmp == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_asprintf (&amp;transport_name, "%s.%s", tmp, name);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (ptr != NULL) {</div><div class='add'>+        tmp = gf_strdup(ptr);</div><div class='add'>+        if (tmp == NULL) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_dynstr (options, "transport-type", tmp);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = gf_asprintf(&amp;transport_name, "%s.%s", tmp, name);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                tmp = NULL;</div><div class='del'>-                ptr = strtok_r (NULL, ",", &amp;saveptr);</div><div class='add'>+        ret = dict_set_dynstr(options, "transport-type", tmp);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = rpcsvc_create_listener (svc, options, transport_name);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        tmp = NULL;</div><div class='add'>+        ptr = strtok_r(NULL, ",", &amp;saveptr);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (transport_name);</div><div class='del'>-                transport_name = NULL;</div><div class='del'>-                count++;</div><div class='add'>+        ret = rpcsvc_create_listener(svc, options, transport_name);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (options, "transport-type", transport_type);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(transport_name);</div><div class='add'>+        transport_name = NULL;</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr(options, "transport-type", transport_type);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        transport_type = NULL;</div><div class='add'>+    transport_type = NULL;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (str);</div><div class='add'>+    GF_FREE(str);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (transport_type);</div><div class='add'>+    GF_FREE(transport_type);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (tmp);</div><div class='add'>+    GF_FREE(tmp);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (transport_name);</div><div class='add'>+    GF_FREE(transport_name);</div><div class='ctx'> </div><div class='del'>-        if (count &gt; 0) {</div><div class='del'>-                return count;</div><div class='del'>-        } else {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (count &gt; 0) {</div><div class='add'>+        return count;</div><div class='add'>+    } else {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_unregister_notify (rpcsvc_t *svc, rpcsvc_notify_t notify, void *mydata)</div><div class='add'>+rpcsvc_unregister_notify(rpcsvc_t *svc, rpcsvc_notify_t notify, void *mydata)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_notify_wrapper_t *wrapper = NULL, *tmp = NULL;</div><div class='del'>-        int                      ret     = 0;</div><div class='add'>+    rpcsvc_notify_wrapper_t *wrapper = NULL, *tmp = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!svc || !notify) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!svc || !notify) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(wrapper, tmp, &amp;svc-&gt;notify, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (wrapper, tmp, &amp;svc-&gt;notify, list) {</div><div class='del'>-                        if ((wrapper-&gt;notify == notify)</div><div class='del'>-                            &amp;&amp; (mydata == wrapper-&gt;data)) {</div><div class='del'>-                                list_del_init (&amp;wrapper-&gt;list);</div><div class='del'>-                                GF_FREE (wrapper);</div><div class='del'>-                                ret++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if ((wrapper-&gt;notify == notify) &amp;&amp; (mydata == wrapper-&gt;data)) {</div><div class='add'>+                list_del_init(&amp;wrapper-&gt;list);</div><div class='add'>+                GF_FREE(wrapper);</div><div class='add'>+                ret++;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_register_notify (rpcsvc_t *svc, rpcsvc_notify_t notify, void *mydata)</div><div class='add'>+rpcsvc_register_notify(rpcsvc_t *svc, rpcsvc_notify_t notify, void *mydata)</div><div class='add'>+{</div><div class='add'>+    rpcsvc_notify_wrapper_t *wrapper = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    wrapper = rpcsvc_notify_wrapper_alloc();</div><div class='add'>+    if (!wrapper) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    svc-&gt;mydata = mydata;</div><div class='add'>+    wrapper-&gt;data = mydata;</div><div class='add'>+    wrapper-&gt;notify = notify;</div><div class='add'>+</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;wrapper-&gt;list, &amp;svc-&gt;notify);</div><div class='add'>+        svc-&gt;notify_count++;</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void *</div><div class='add'>+rpcsvc_request_handler(void *arg)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_notify_wrapper_t *wrapper = NULL;</div><div class='del'>-        int                      ret     = -1;</div><div class='add'>+    rpcsvc_program_t *program = arg;</div><div class='add'>+    rpcsvc_request_t *req = NULL;</div><div class='add'>+    rpcsvc_actor_t *actor = NULL;</div><div class='add'>+    gf_boolean_t done = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        wrapper = rpcsvc_notify_wrapper_alloc ();</div><div class='del'>-        if (!wrapper) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        svc-&gt;mydata   = mydata;</div><div class='del'>-        wrapper-&gt;data = mydata;</div><div class='del'>-        wrapper-&gt;notify = notify;</div><div class='add'>+    if (!program)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;program-&gt;queue_lock);</div><div class='ctx'>         {</div><div class='del'>-                list_add_tail (&amp;wrapper-&gt;list, &amp;svc-&gt;notify);</div><div class='del'>-                svc-&gt;notify_count++;</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+            if (!program-&gt;alive &amp;&amp; list_empty(&amp;program-&gt;request_queue)) {</div><div class='add'>+                done = 1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+            while (list_empty(&amp;program-&gt;request_queue) &amp;&amp;</div><div class='add'>+                   (program-&gt;threadcount &lt;= program-&gt;eventthreadcount)) {</div><div class='add'>+                pthread_cond_wait(&amp;program-&gt;queue_cond, &amp;program-&gt;queue_lock);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-void *</div><div class='del'>-rpcsvc_request_handler (void *arg)</div><div class='del'>-{</div><div class='del'>-        rpcsvc_program_t *program = arg;</div><div class='del'>-        rpcsvc_request_t *req     = NULL;</div><div class='del'>-        rpcsvc_actor_t   *actor   = NULL;</div><div class='del'>-        gf_boolean_t      done    = _gf_false;</div><div class='del'>-        int               ret     = 0;</div><div class='del'>-</div><div class='del'>-        if (!program)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;program-&gt;queue_lock);</div><div class='del'>-                {</div><div class='del'>-                        if (!program-&gt;alive</div><div class='del'>-                            &amp;&amp; list_empty (&amp;program-&gt;request_queue)) {</div><div class='del'>-                                done = 1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        while (list_empty (&amp;program-&gt;request_queue) &amp;&amp;</div><div class='del'>-                               (program-&gt;threadcount &lt;=</div><div class='del'>-                                        program-&gt;eventthreadcount)) {</div><div class='del'>-                                pthread_cond_wait (&amp;program-&gt;queue_cond,</div><div class='del'>-                                                   &amp;program-&gt;queue_lock);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (program-&gt;threadcount &gt; program-&gt;eventthreadcount) {</div><div class='del'>-                                done = 1;</div><div class='del'>-                                program-&gt;threadcount--;</div><div class='del'>-</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_INFO,</div><div class='del'>-                                        "program '%s' thread terminated; "</div><div class='del'>-                                        "total count:%d",</div><div class='del'>-                                        program-&gt;progname,</div><div class='del'>-                                        program-&gt;threadcount);</div><div class='del'>-                        } else if (!list_empty (&amp;program-&gt;request_queue)) {</div><div class='del'>-                                req = list_entry (program-&gt;request_queue.next,</div><div class='del'>-                                                  typeof (*req), request_list);</div><div class='del'>-</div><div class='del'>-                                list_del_init (&amp;req-&gt;request_list);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;program-&gt;queue_lock);</div><div class='del'>-</div><div class='del'>-                if (req) {</div><div class='del'>-                        THIS = req-&gt;svc-&gt;xl;</div><div class='del'>-                        actor = rpcsvc_program_actor (req);</div><div class='del'>-                        ret = actor-&gt;actor (req);</div><div class='del'>-</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                rpcsvc_check_and_reply_error (ret, NULL, req);</div><div class='del'>-                        }</div><div class='del'>-                        req = NULL;</div><div class='del'>-                }</div><div class='add'>+            if (program-&gt;threadcount &gt; program-&gt;eventthreadcount) {</div><div class='add'>+                done = 1;</div><div class='add'>+                program-&gt;threadcount--;</div><div class='add'>+</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_INFO,</div><div class='add'>+                       "program '%s' thread terminated; "</div><div class='add'>+                       "total count:%d",</div><div class='add'>+                       program-&gt;progname, program-&gt;threadcount);</div><div class='add'>+            } else if (!list_empty(&amp;program-&gt;request_queue)) {</div><div class='add'>+                req = list_entry(program-&gt;request_queue.next, typeof(*req),</div><div class='add'>+                                 request_list);</div><div class='ctx'> </div><div class='del'>-                if (done)</div><div class='del'>-                        break;</div><div class='add'>+                list_del_init(&amp;req-&gt;request_list);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;program-&gt;queue_lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        if (req) {</div><div class='add'>+            THIS = req-&gt;svc-&gt;xl;</div><div class='add'>+            actor = rpcsvc_program_actor(req);</div><div class='add'>+            ret = actor-&gt;actor(req);</div><div class='add'>+</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                rpcsvc_check_and_reply_error(ret, NULL, req);</div><div class='add'>+            }</div><div class='add'>+            req = NULL;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (done)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_spawn_threads (rpcsvc_t *svc, rpcsvc_program_t *program)</div><div class='add'>+rpcsvc_spawn_threads(rpcsvc_t *svc, rpcsvc_program_t *program)</div><div class='ctx'> {</div><div class='del'>-        int                ret  = 0, delta = 0, creates = 0;</div><div class='add'>+    int ret = 0, delta = 0, creates = 0;</div><div class='ctx'> </div><div class='del'>-        if (!program || !svc)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!program || !svc)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;program-&gt;queue_lock);</div><div class='del'>-        {</div><div class='del'>-                delta = program-&gt;eventthreadcount - program-&gt;threadcount;</div><div class='del'>-</div><div class='del'>-                if (delta &gt;= 0) {</div><div class='del'>-                        while (delta--) {</div><div class='del'>-                                ret = gf_thread_create (&amp;program-&gt;thread, NULL,</div><div class='del'>-                                                        rpcsvc_request_handler,</div><div class='del'>-                                                        program, "rpcrqhnd");</div><div class='del'>-                                if (!ret) {</div><div class='del'>-                                        program-&gt;threadcount++;</div><div class='del'>-                                        creates++;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (creates) {</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_INFO,</div><div class='del'>-                                        "spawned %d threads for program '%s'; "</div><div class='del'>-                                        "total count:%d",</div><div class='del'>-                                        creates,</div><div class='del'>-                                        program-&gt;progname,</div><div class='del'>-                                        program-&gt;threadcount);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_INFO,</div><div class='del'>-                                "terminating %d threads for program '%s'",</div><div class='del'>-                                -delta, program-&gt;progname);</div><div class='del'>-</div><div class='del'>-                        /* this signal is to just wake up the threads so they</div><div class='del'>-                         * test for the change in eventthreadcount and kill</div><div class='del'>-                         * themselves until the program thread count becomes</div><div class='del'>-                         * equal to the event thread count</div><div class='del'>-                         */</div><div class='del'>-                        pthread_cond_broadcast (&amp;program-&gt;queue_cond);</div><div class='add'>+    pthread_mutex_lock(&amp;program-&gt;queue_lock);</div><div class='add'>+    {</div><div class='add'>+        delta = program-&gt;eventthreadcount - program-&gt;threadcount;</div><div class='add'>+</div><div class='add'>+        if (delta &gt;= 0) {</div><div class='add'>+            while (delta--) {</div><div class='add'>+                ret = gf_thread_create(&amp;program-&gt;thread, NULL,</div><div class='add'>+                                       rpcsvc_request_handler, program,</div><div class='add'>+                                       "rpcrqhnd");</div><div class='add'>+                if (!ret) {</div><div class='add'>+                    program-&gt;threadcount++;</div><div class='add'>+                    creates++;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (creates) {</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_INFO,</div><div class='add'>+                       "spawned %d threads for program '%s'; "</div><div class='add'>+                       "total count:%d",</div><div class='add'>+                       creates, program-&gt;progname, program-&gt;threadcount);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_INFO,</div><div class='add'>+                   "terminating %d threads for program '%s'", -delta,</div><div class='add'>+                   program-&gt;progname);</div><div class='add'>+</div><div class='add'>+            /* this signal is to just wake up the threads so they</div><div class='add'>+             * test for the change in eventthreadcount and kill</div><div class='add'>+             * themselves until the program thread count becomes</div><div class='add'>+             * equal to the event thread count</div><div class='add'>+             */</div><div class='add'>+            pthread_cond_broadcast(&amp;program-&gt;queue_cond);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;program-&gt;queue_lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;program-&gt;queue_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return creates;</div><div class='add'>+    return creates;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_program_register (rpcsvc_t *svc, rpcsvc_program_t *program,</div><div class='del'>-                         gf_boolean_t add_to_head)</div><div class='add'>+rpcsvc_program_register(rpcsvc_t *svc, rpcsvc_program_t *program,</div><div class='add'>+                        gf_boolean_t add_to_head)</div><div class='ctx'> {</div><div class='del'>-        int               ret                = -1;</div><div class='del'>-        int               creates            = -1;</div><div class='del'>-        rpcsvc_program_t *newprog            = NULL;</div><div class='del'>-        char              already_registered = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int creates = -1;</div><div class='add'>+    rpcsvc_program_t *newprog = NULL;</div><div class='add'>+    char already_registered = 0;</div><div class='ctx'> </div><div class='del'>-        if (!svc) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!svc) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (program-&gt;actors == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (program-&gt;actors == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_rdlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_rdlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(newprog, &amp;svc-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (newprog, &amp;svc-&gt;programs, program) {</div><div class='del'>-                        if ((newprog-&gt;prognum == program-&gt;prognum)</div><div class='del'>-                            &amp;&amp; (newprog-&gt;progver == program-&gt;progver)) {</div><div class='del'>-                                already_registered = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if ((newprog-&gt;prognum == program-&gt;prognum) &amp;&amp;</div><div class='add'>+                (newprog-&gt;progver == program-&gt;progver)) {</div><div class='add'>+                already_registered = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        if (already_registered) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (already_registered) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        newprog = GF_CALLOC (1, sizeof(*newprog),gf_common_mt_rpcsvc_program_t);</div><div class='del'>-        if (newprog == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newprog = GF_CALLOC(1, sizeof(*newprog), gf_common_mt_rpcsvc_program_t);</div><div class='add'>+    if (newprog == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (newprog, program, sizeof (*program));</div><div class='add'>+    memcpy(newprog, program, sizeof(*program));</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;newprog-&gt;program);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newprog-&gt;request_queue);</div><div class='del'>-        pthread_mutex_init (&amp;newprog-&gt;queue_lock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;newprog-&gt;queue_cond, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newprog-&gt;program);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newprog-&gt;request_queue);</div><div class='add'>+    pthread_mutex_init(&amp;newprog-&gt;queue_lock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;newprog-&gt;queue_cond, NULL);</div><div class='ctx'> </div><div class='del'>-        newprog-&gt;alive = _gf_true;</div><div class='add'>+    newprog-&gt;alive = _gf_true;</div><div class='ctx'> </div><div class='del'>-        /* make sure synctask gets priority over ownthread */</div><div class='del'>-        if (newprog-&gt;synctask)</div><div class='del'>-                newprog-&gt;ownthread = _gf_false;</div><div class='add'>+    /* make sure synctask gets priority over ownthread */</div><div class='add'>+    if (newprog-&gt;synctask)</div><div class='add'>+        newprog-&gt;ownthread = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (newprog-&gt;ownthread) {</div><div class='del'>-                newprog-&gt;eventthreadcount = 1;</div><div class='del'>-                creates = rpcsvc_spawn_threads (svc, newprog);</div><div class='add'>+    if (newprog-&gt;ownthread) {</div><div class='add'>+        newprog-&gt;eventthreadcount = 1;</div><div class='add'>+        creates = rpcsvc_spawn_threads(svc, newprog);</div><div class='ctx'> </div><div class='del'>-                if (creates &lt; 1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (creates &lt; 1) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='del'>-        {</div><div class='del'>-                if (add_to_head)</div><div class='del'>-                        list_add (&amp;newprog-&gt;program, &amp;svc-&gt;programs);</div><div class='del'>-                else</div><div class='del'>-                        list_add_tail (&amp;newprog-&gt;program, &amp;svc-&gt;programs);</div><div class='del'>-        }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        if (add_to_head)</div><div class='add'>+            list_add(&amp;newprog-&gt;program, &amp;svc-&gt;programs);</div><div class='add'>+        else</div><div class='add'>+            list_add_tail(&amp;newprog-&gt;program, &amp;svc-&gt;programs);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_DEBUG, "New program registered: %s, Num: %d,"</div><div class='del'>-                " Ver: %d, Port: %d", newprog-&gt;progname, newprog-&gt;prognum,</div><div class='del'>-                newprog-&gt;progver, newprog-&gt;progport);</div><div class='add'>+    ret = 0;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+           "New program registered: %s, Num: %d,"</div><div class='add'>+           " Ver: %d, Port: %d",</div><div class='add'>+           newprog-&gt;progname, newprog-&gt;prognum, newprog-&gt;progver,</div><div class='add'>+           newprog-&gt;progport);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Program registration failed:"</div><div class='del'>-                        " %s, Num: %d, Ver: %d, Port: %d", program-&gt;progname,</div><div class='del'>-                        program-&gt;prognum, program-&gt;progver, program-&gt;progport);</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Program registration failed:"</div><div class='add'>+               " %s, Num: %d, Ver: %d, Port: %d",</div><div class='add'>+               program-&gt;progname, program-&gt;prognum, program-&gt;progver,</div><div class='add'>+               program-&gt;progport);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-free_prog_details (gf_dump_rsp *rsp)</div><div class='add'>+free_prog_details(gf_dump_rsp *rsp)</div><div class='ctx'> {</div><div class='del'>-        gf_prog_detail *prev = NULL;</div><div class='del'>-        gf_prog_detail *trav = NULL;</div><div class='add'>+    gf_prog_detail *prev = NULL;</div><div class='add'>+    gf_prog_detail *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        trav = rsp-&gt;prog;</div><div class='del'>-        while (trav) {</div><div class='del'>-                prev = trav;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-                GF_FREE (prev);</div><div class='del'>-        }</div><div class='add'>+    trav = rsp-&gt;prog;</div><div class='add'>+    while (trav) {</div><div class='add'>+        prev = trav;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+        GF_FREE(prev);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-build_prog_details (rpcsvc_request_t *req, gf_dump_rsp *rsp)</div><div class='add'>+build_prog_details(rpcsvc_request_t *req, gf_dump_rsp *rsp)</div><div class='ctx'> {</div><div class='del'>-        int               ret     = -1;</div><div class='del'>-        rpcsvc_program_t *program = NULL;</div><div class='del'>-        gf_prog_detail   *prog    = NULL;</div><div class='del'>-        gf_prog_detail   *prev    = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpcsvc_program_t *program = NULL;</div><div class='add'>+    gf_prog_detail *prog = NULL;</div><div class='add'>+    gf_prog_detail *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!req || !req-&gt;trans || !req-&gt;svc)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!req || !req-&gt;trans || !req-&gt;svc)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_rdlock (&amp;req-&gt;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_rdlock(&amp;req-&gt;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(program, &amp;req-&gt;svc-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (program, &amp;req-&gt;svc-&gt;programs, program) {</div><div class='del'>-                        prog = GF_CALLOC (1, sizeof (*prog), 0);</div><div class='del'>-                        if (!prog)</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        prog-&gt;progname = program-&gt;progname;</div><div class='del'>-                        prog-&gt;prognum  = program-&gt;prognum;</div><div class='del'>-                        prog-&gt;progver  = program-&gt;progver;</div><div class='del'>-</div><div class='del'>-                        if (!rsp-&gt;prog)</div><div class='del'>-                                rsp-&gt;prog = prog;</div><div class='del'>-                        if (prev)</div><div class='del'>-                                prev-&gt;next = prog;</div><div class='del'>-                        prev = prog;</div><div class='del'>-                }</div><div class='del'>-                if (prev)</div><div class='del'>-                        ret = 0;</div><div class='del'>-        }</div><div class='add'>+            prog = GF_CALLOC(1, sizeof(*prog), 0);</div><div class='add'>+            if (!prog)</div><div class='add'>+                goto unlock;</div><div class='add'>+</div><div class='add'>+            prog-&gt;progname = program-&gt;progname;</div><div class='add'>+            prog-&gt;prognum = program-&gt;prognum;</div><div class='add'>+            prog-&gt;progver = program-&gt;progver;</div><div class='add'>+</div><div class='add'>+            if (!rsp-&gt;prog)</div><div class='add'>+                rsp-&gt;prog = prog;</div><div class='add'>+            if (prev)</div><div class='add'>+                prev-&gt;next = prog;</div><div class='add'>+            prev = prog;</div><div class='add'>+        }</div><div class='add'>+        if (prev)</div><div class='add'>+            ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_rwlock_unlock (&amp;req-&gt;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_unlock(&amp;req-&gt;svc-&gt;rpclock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rpcsvc_ping (rpcsvc_request_t *req)</div><div class='add'>+rpcsvc_ping(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        char          rsp_buf[8 * 1024] = {0,};</div><div class='del'>-        gf_common_rsp rsp               = {0,};</div><div class='del'>-        struct iovec  iov               = {0,};</div><div class='del'>-        int           ret               = -1;</div><div class='del'>-        uint32_t      ping_rsp_len      = 0;</div><div class='add'>+    char rsp_buf[8 * 1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_common_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t ping_rsp_len = 0;</div><div class='ctx'> </div><div class='del'>-        ping_rsp_len = xdr_sizeof ((xdrproc_t) xdr_gf_common_rsp,</div><div class='del'>-                                   &amp;rsp);</div><div class='add'>+    ping_rsp_len = xdr_sizeof((xdrproc_t)xdr_gf_common_rsp, &amp;rsp);</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = rsp_buf;</div><div class='del'>-        iov.iov_len  = ping_rsp_len;</div><div class='add'>+    iov.iov_base = rsp_buf;</div><div class='add'>+    iov.iov_len = ping_rsp_len;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_serialize_generic (iov, &amp;rsp, (xdrproc_t)xdr_gf_common_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = RPCSVC_ACTOR_ERROR;</div><div class='del'>-        } else {</div><div class='del'>-                rsp.op_ret = 0;</div><div class='del'>-                rpcsvc_submit_generic (req, &amp;iov, 1, NULL, 0, NULL);</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_serialize_generic(iov, &amp;rsp, (xdrproc_t)xdr_gf_common_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = RPCSVC_ACTOR_ERROR;</div><div class='add'>+    } else {</div><div class='add'>+        rsp.op_ret = 0;</div><div class='add'>+        rpcsvc_submit_generic(req, &amp;iov, 1, NULL, 0, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rpcsvc_dump (rpcsvc_request_t *req)</div><div class='del'>-{</div><div class='del'>-        char         rsp_buf[8 * 1024] = {0,};</div><div class='del'>-        gf_dump_rsp  rsp               = {0,};</div><div class='del'>-        struct iovec iov               = {0,};</div><div class='del'>-        int          op_errno          = EINVAL;</div><div class='del'>-        int          ret               = -1;</div><div class='del'>-        uint32_t     dump_rsp_len      = 0;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                goto sendrsp;</div><div class='del'>-</div><div class='del'>-        ret = build_prog_details (req, &amp;rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto sendrsp;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_errno = 0;</div><div class='add'>+rpcsvc_dump(rpcsvc_request_t *req)</div><div class='add'>+{</div><div class='add'>+    char rsp_buf[8 * 1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_dump_rsp rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t dump_rsp_len = 0;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        goto sendrsp;</div><div class='add'>+</div><div class='add'>+    ret = build_prog_details(req, &amp;rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto sendrsp;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_errno = 0;</div><div class='ctx'> </div><div class='ctx'> sendrsp:</div><div class='del'>-        rsp.op_errno = gf_errno_to_error (op_errno);</div><div class='del'>-        rsp.op_ret   = ret;</div><div class='add'>+    rsp.op_errno = gf_errno_to_error(op_errno);</div><div class='add'>+    rsp.op_ret = ret;</div><div class='ctx'> </div><div class='del'>-        dump_rsp_len = xdr_sizeof ((xdrproc_t) xdr_gf_dump_rsp,</div><div class='del'>-                                   &amp;rsp);</div><div class='add'>+    dump_rsp_len = xdr_sizeof((xdrproc_t)xdr_gf_dump_rsp, &amp;rsp);</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = rsp_buf;</div><div class='del'>-        iov.iov_len  = dump_rsp_len;</div><div class='add'>+    iov.iov_base = rsp_buf;</div><div class='add'>+    iov.iov_len = dump_rsp_len;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_serialize_generic (iov, &amp;rsp, (xdrproc_t)xdr_gf_dump_rsp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = RPCSVC_ACTOR_ERROR;</div><div class='del'>-        } else {</div><div class='del'>-                rpcsvc_submit_generic (req, &amp;iov, 1, NULL, 0, NULL);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    ret = xdr_serialize_generic(iov, &amp;rsp, (xdrproc_t)xdr_gf_dump_rsp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = RPCSVC_ACTOR_ERROR;</div><div class='add'>+    } else {</div><div class='add'>+        rpcsvc_submit_generic(req, &amp;iov, 1, NULL, 0, NULL);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        free_prog_details (&amp;rsp);</div><div class='add'>+    free_prog_details(&amp;rsp);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_init_options (rpcsvc_t *svc, dict_t *options)</div><div class='add'>+rpcsvc_init_options(rpcsvc_t *svc, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        char            *optstr = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    char *optstr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!svc) || (!options))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!svc) || (!options))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        svc-&gt;memfactor = RPCSVC_DEFAULT_MEMFACTOR;</div><div class='add'>+    svc-&gt;memfactor = RPCSVC_DEFAULT_MEMFACTOR;</div><div class='ctx'> </div><div class='del'>-        svc-&gt;register_portmap = _gf_true;</div><div class='del'>-        if (dict_get (options, "rpc.register-with-portmap")) {</div><div class='del'>-                ret = dict_get_str (options, "rpc.register-with-portmap",</div><div class='del'>-                                    &amp;optstr);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to parse "</div><div class='del'>-                                "dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_string2boolean (optstr, &amp;svc-&gt;register_portmap);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to parse bool "</div><div class='del'>-                                "string");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    svc-&gt;register_portmap = _gf_true;</div><div class='add'>+    if (dict_get(options, "rpc.register-with-portmap")) {</div><div class='add'>+        ret = dict_get_str(options, "rpc.register-with-portmap", &amp;optstr);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to parse "</div><div class='add'>+                   "dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!svc-&gt;register_portmap)</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Portmap registration "</div><div class='del'>-                        "disabled");</div><div class='del'>-        ret = 0;</div><div class='add'>+        ret = gf_string2boolean(optstr, &amp;svc-&gt;register_portmap);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to parse bool "</div><div class='add'>+                   "string");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!svc-&gt;register_portmap)</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "Portmap registration "</div><div class='add'>+               "disabled");</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_reconfigure_options (rpcsvc_t *svc, dict_t *options)</div><div class='del'>-{</div><div class='del'>-        xlator_t         *xlator    = NULL;</div><div class='del'>-        xlator_list_t    *volentry  = NULL;</div><div class='del'>-        char             *srchkey   = NULL;</div><div class='del'>-        char             *keyval    = NULL;</div><div class='del'>-        int              ret        = -1;</div><div class='del'>-</div><div class='del'>-        if ((!svc) || (!svc-&gt;options) || (!options))</div><div class='del'>-                return (-1);</div><div class='del'>-</div><div class='del'>-        /* Fetch the xlator from svc */</div><div class='del'>-        xlator = svc-&gt;xl;</div><div class='del'>-        if (!xlator)</div><div class='add'>+rpcsvc_reconfigure_options(rpcsvc_t *svc, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    xlator_list_t *volentry = NULL;</div><div class='add'>+    char *srchkey = NULL;</div><div class='add'>+    char *keyval = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if ((!svc) || (!svc-&gt;options) || (!options))</div><div class='add'>+        return (-1);</div><div class='add'>+</div><div class='add'>+    /* Fetch the xlator from svc */</div><div class='add'>+    xlator = svc-&gt;xl;</div><div class='add'>+    if (!xlator)</div><div class='add'>+        return (-1);</div><div class='add'>+</div><div class='add'>+    /* Reconfigure the volume specific rpc-auth.addr allow part */</div><div class='add'>+    volentry = xlator-&gt;children;</div><div class='add'>+    while (volentry) {</div><div class='add'>+        ret = gf_asprintf(&amp;srchkey, "rpc-auth.addr.%s.allow",</div><div class='add'>+                          volentry-&gt;xlator-&gt;name);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+            return (-1);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* key-string: rpc-auth.addr.&lt;volname&gt;.allow</div><div class='add'>+         *</div><div class='add'>+         * IMP: Delete the OLD key/value pair from dict.</div><div class='add'>+         * And set the NEW key/value pair IFF the option is SET</div><div class='add'>+         * in reconfigured volfile.</div><div class='add'>+         *</div><div class='add'>+         * NB: If rpc-auth.addr.&lt;volname&gt;.allow is not SET explicitly,</div><div class='add'>+         *     build_nfs_graph() sets it as "*" i.e. anonymous.</div><div class='add'>+         */</div><div class='add'>+        dict_del(svc-&gt;options, srchkey);</div><div class='add'>+        if (!dict_get_str(options, srchkey, &amp;keyval)) {</div><div class='add'>+            ret = dict_set_str(svc-&gt;options, srchkey, keyval);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_ERROR, "dict_set_str error");</div><div class='add'>+                GF_FREE(srchkey);</div><div class='ctx'>                 return (-1);</div><div class='del'>-</div><div class='del'>-        /* Reconfigure the volume specific rpc-auth.addr allow part */</div><div class='del'>-        volentry = xlator-&gt;children;</div><div class='del'>-        while (volentry) {</div><div class='del'>-                ret = gf_asprintf (&amp;srchkey, "rpc-auth.addr.%s.allow",</div><div class='del'>-                                             volentry-&gt;xlator-&gt;name);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                        return (-1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* key-string: rpc-auth.addr.&lt;volname&gt;.allow</div><div class='del'>-                 *</div><div class='del'>-                 * IMP: Delete the OLD key/value pair from dict.</div><div class='del'>-                 * And set the NEW key/value pair IFF the option is SET</div><div class='del'>-                 * in reconfigured volfile.</div><div class='del'>-                 *</div><div class='del'>-                 * NB: If rpc-auth.addr.&lt;volname&gt;.allow is not SET explicitly,</div><div class='del'>-                 *     build_nfs_graph() sets it as "*" i.e. anonymous.</div><div class='del'>-                 */</div><div class='del'>-                dict_del (svc-&gt;options, srchkey);</div><div class='del'>-                if (!dict_get_str (options, srchkey, &amp;keyval)) {</div><div class='del'>-                        ret = dict_set_str (svc-&gt;options, srchkey, keyval);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                        "dict_set_str error");</div><div class='del'>-                                GF_FREE (srchkey);</div><div class='del'>-                                return (-1);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_FREE (srchkey);</div><div class='del'>-                volentry = volentry-&gt;next;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Reconfigure the volume specific rpc-auth.addr reject part */</div><div class='del'>-        volentry = xlator-&gt;children;</div><div class='del'>-        while (volentry) {</div><div class='del'>-                ret = gf_asprintf (&amp;srchkey, "rpc-auth.addr.%s.reject",</div><div class='del'>-                                             volentry-&gt;xlator-&gt;name);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                        return (-1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* key-string: rpc-auth.addr.&lt;volname&gt;.reject</div><div class='del'>-                 *</div><div class='del'>-                 * IMP: Delete the OLD key/value pair from dict.</div><div class='del'>-                 * And set the NEW key/value pair IFF the option is SET</div><div class='del'>-                 * in reconfigured volfile.</div><div class='del'>-                 *</div><div class='del'>-                 * NB: No default value for reject key.</div><div class='del'>-                 */</div><div class='del'>-                dict_del (svc-&gt;options, srchkey);</div><div class='del'>-                if (!dict_get_str (options, srchkey, &amp;keyval)) {</div><div class='del'>-                        ret = dict_set_str (svc-&gt;options, srchkey, keyval);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                                        "dict_set_str error");</div><div class='del'>-                                GF_FREE (srchkey);</div><div class='del'>-                                return (-1);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        GF_FREE(srchkey);</div><div class='add'>+        volentry = volentry-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (srchkey);</div><div class='del'>-                volentry = volentry-&gt;next;</div><div class='add'>+    /* Reconfigure the volume specific rpc-auth.addr reject part */</div><div class='add'>+    volentry = xlator-&gt;children;</div><div class='add'>+    while (volentry) {</div><div class='add'>+        ret = gf_asprintf(&amp;srchkey, "rpc-auth.addr.%s.reject",</div><div class='add'>+                          volentry-&gt;xlator-&gt;name);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+            return (-1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_init_options (svc, options);</div><div class='del'>-        if (ret)</div><div class='add'>+        /* key-string: rpc-auth.addr.&lt;volname&gt;.reject</div><div class='add'>+         *</div><div class='add'>+         * IMP: Delete the OLD key/value pair from dict.</div><div class='add'>+         * And set the NEW key/value pair IFF the option is SET</div><div class='add'>+         * in reconfigured volfile.</div><div class='add'>+         *</div><div class='add'>+         * NB: No default value for reject key.</div><div class='add'>+         */</div><div class='add'>+        dict_del(svc-&gt;options, srchkey);</div><div class='add'>+        if (!dict_get_str(options, srchkey, &amp;keyval)) {</div><div class='add'>+            ret = dict_set_str(svc-&gt;options, srchkey, keyval);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(GF_RPCSVC, GF_LOG_ERROR, "dict_set_str error");</div><div class='add'>+                GF_FREE(srchkey);</div><div class='ctx'>                 return (-1);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        return rpcsvc_auth_reconf (svc, options);</div><div class='add'>+        GF_FREE(srchkey);</div><div class='add'>+        volentry = volentry-&gt;next;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_init_options(svc, options);</div><div class='add'>+    if (ret)</div><div class='add'>+        return (-1);</div><div class='add'>+</div><div class='add'>+    return rpcsvc_auth_reconf(svc, options);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_transport_unix_options_build (dict_t **options, char *filepath)</div><div class='add'>+rpcsvc_transport_unix_options_build(dict_t **options, char *filepath)</div><div class='ctx'> {</div><div class='del'>-        dict_t                  *dict = NULL;</div><div class='del'>-        char                    *fpath = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *fpath = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (filepath);</div><div class='del'>-        GF_ASSERT (options);</div><div class='add'>+    GF_ASSERT(filepath);</div><div class='add'>+    GF_ASSERT(options);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fpath = gf_strdup (filepath);</div><div class='del'>-        if (!fpath) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fpath = gf_strdup(filepath);</div><div class='add'>+    if (!fpath) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_dynstr (dict, "transport.socket.listen-path", fpath);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_dynstr(dict, "transport.socket.listen-path", fpath);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "transport.address-family", "unix");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "transport.address-family", "unix");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "transport.socket.nodelay", "off");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "transport.socket.nodelay", "off");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "transport-type", "socket");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(dict, "transport-type", "socket");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *options = dict;</div><div class='add'>+    *options = dict;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (fpath);</div><div class='del'>-                if (dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(fpath);</div><div class='add'>+        if (dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2460,42 +2472,42 @@ out:</div><div class='ctx'>  * NB: defval or set-value "0" is special which means unlimited/65536.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_set_outstanding_rpc_limit (rpcsvc_t *svc, dict_t *options, int defvalue)</div><div class='add'>+rpcsvc_set_outstanding_rpc_limit(rpcsvc_t *svc, dict_t *options, int defvalue)</div><div class='ctx'> {</div><div class='del'>-        int            ret        = -1; /* FAILURE */</div><div class='del'>-        int            rpclim     = 0;</div><div class='del'>-        static char    *rpclimkey = "rpc.outstanding-rpc-limit";</div><div class='add'>+    int ret = -1; /* FAILURE */</div><div class='add'>+    int rpclim = 0;</div><div class='add'>+    static char *rpclimkey = "rpc.outstanding-rpc-limit";</div><div class='ctx'> </div><div class='del'>-        if ((!svc) || (!options))</div><div class='del'>-                return (-1);</div><div class='add'>+    if ((!svc) || (!options))</div><div class='add'>+        return (-1);</div><div class='ctx'> </div><div class='del'>-        if ((defvalue &lt; RPCSVC_MIN_OUTSTANDING_RPC_LIMIT) ||</div><div class='del'>-            (defvalue &gt; RPCSVC_MAX_OUTSTANDING_RPC_LIMIT)) {</div><div class='del'>-                return (-1);</div><div class='del'>-        }</div><div class='add'>+    if ((defvalue &lt; RPCSVC_MIN_OUTSTANDING_RPC_LIMIT) ||</div><div class='add'>+        (defvalue &gt; RPCSVC_MAX_OUTSTANDING_RPC_LIMIT)) {</div><div class='add'>+        return (-1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Fetch the rpc.outstanding-rpc-limit from dict. */</div><div class='del'>-        ret = dict_get_int32 (options, rpclimkey, &amp;rpclim);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* Fall back to default for FAILURE */</div><div class='del'>-                rpclim = defvalue;</div><div class='del'>-        }</div><div class='add'>+    /* Fetch the rpc.outstanding-rpc-limit from dict. */</div><div class='add'>+    ret = dict_get_int32(options, rpclimkey, &amp;rpclim);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* Fall back to default for FAILURE */</div><div class='add'>+        rpclim = defvalue;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Round up to multiple-of-8. It must not exceed</div><div class='del'>-         * RPCSVC_MAX_OUTSTANDING_RPC_LIMIT.</div><div class='del'>-         */</div><div class='del'>-        rpclim = ((rpclim + 8 - 1) &gt;&gt; 3) * 8;</div><div class='del'>-        if (rpclim &gt; RPCSVC_MAX_OUTSTANDING_RPC_LIMIT) {</div><div class='del'>-                rpclim = RPCSVC_MAX_OUTSTANDING_RPC_LIMIT;</div><div class='del'>-        }</div><div class='add'>+    /* Round up to multiple-of-8. It must not exceed</div><div class='add'>+     * RPCSVC_MAX_OUTSTANDING_RPC_LIMIT.</div><div class='add'>+     */</div><div class='add'>+    rpclim = ((rpclim + 8 - 1) &gt;&gt; 3) * 8;</div><div class='add'>+    if (rpclim &gt; RPCSVC_MAX_OUTSTANDING_RPC_LIMIT) {</div><div class='add'>+        rpclim = RPCSVC_MAX_OUTSTANDING_RPC_LIMIT;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (svc-&gt;outstanding_rpc_limit != rpclim) {</div><div class='del'>-                svc-&gt;outstanding_rpc_limit = rpclim;</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_INFO,</div><div class='del'>-                        "Configured %s with value %d", rpclimkey, rpclim);</div><div class='del'>-        }</div><div class='add'>+    if (svc-&gt;outstanding_rpc_limit != rpclim) {</div><div class='add'>+        svc-&gt;outstanding_rpc_limit = rpclim;</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_INFO, "Configured %s with value %d", rpclimkey,</div><div class='add'>+               rpclim);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (0);</div><div class='add'>+    return (0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2503,15 +2515,14 @@ rpcsvc_set_outstanding_rpc_limit (rpcsvc_t *svc, dict_t *options, int defvalue)</div><div class='ctx'>  * Returns 0 on success, -1 otherwise.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_set_throttle_on (rpcsvc_t *svc)</div><div class='add'>+rpcsvc_set_throttle_on(rpcsvc_t *svc)</div><div class='ctx'> {</div><div class='add'>+    if (!svc)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!svc)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        svc-&gt;throttle = _gf_true;</div><div class='add'>+    svc-&gt;throttle = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2519,15 +2530,14 @@ rpcsvc_set_throttle_on (rpcsvc_t *svc)</div><div class='ctx'>  * Returns 0 on success, -1 otherwise.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_set_throttle_off (rpcsvc_t *svc)</div><div class='add'>+rpcsvc_set_throttle_off(rpcsvc_t *svc)</div><div class='ctx'> {</div><div class='add'>+    if (!svc)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!svc)</div><div class='del'>-                return -1;</div><div class='add'>+    svc-&gt;throttle = _gf_false;</div><div class='ctx'> </div><div class='del'>-        svc-&gt;throttle = _gf_false;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2535,213 +2545,205 @@ rpcsvc_set_throttle_off (rpcsvc_t *svc)</div><div class='ctx'>  * Returns value of attribute throttle on success, _gf_false otherwise.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-rpcsvc_get_throttle (rpcsvc_t *svc)</div><div class='add'>+rpcsvc_get_throttle(rpcsvc_t *svc)</div><div class='ctx'> {</div><div class='add'>+    if (!svc)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!svc)</div><div class='del'>-                return _gf_false;</div><div class='del'>-</div><div class='del'>-        return svc-&gt;throttle;</div><div class='add'>+    return svc-&gt;throttle;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* The global RPC service initializer.</div><div class='ctx'>  */</div><div class='ctx'> rpcsvc_t *</div><div class='del'>-rpcsvc_init (xlator_t *xl, glusterfs_ctx_t *ctx, dict_t *options,</div><div class='del'>-             uint32_t poolcount)</div><div class='add'>+rpcsvc_init(xlator_t *xl, glusterfs_ctx_t *ctx, dict_t *options,</div><div class='add'>+            uint32_t poolcount)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_t          *svc              = NULL;</div><div class='del'>-        int                ret              = -1;</div><div class='del'>-</div><div class='del'>-        if ((!xl) || (!ctx) || (!options))</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        svc = GF_CALLOC (1, sizeof (*svc), gf_common_mt_rpcsvc_t);</div><div class='del'>-        if (!svc)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        pthread_rwlock_init (&amp;svc-&gt;rpclock, NULL);</div><div class='del'>-        INIT_LIST_HEAD (&amp;svc-&gt;authschemes);</div><div class='del'>-        INIT_LIST_HEAD (&amp;svc-&gt;notify);</div><div class='del'>-        INIT_LIST_HEAD (&amp;svc-&gt;listeners);</div><div class='del'>-        INIT_LIST_HEAD (&amp;svc-&gt;programs);</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_init_options (svc, options);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to init options");</div><div class='del'>-                goto free_svc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!poolcount)</div><div class='del'>-                poolcount = RPCSVC_POOLCOUNT_MULT * svc-&gt;memfactor;</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "rx pool: %d", poolcount);</div><div class='del'>-        svc-&gt;rxpool = mem_pool_new (rpcsvc_request_t, poolcount);</div><div class='del'>-        /* TODO: leak */</div><div class='del'>-        if (!svc-&gt;rxpool) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "mem pool allocation failed");</div><div class='del'>-                goto free_svc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_auth_init (svc, options);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to init "</div><div class='del'>-                        "authentication");</div><div class='del'>-                goto free_svc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-        svc-&gt;options = options;</div><div class='del'>-        svc-&gt;ctx = ctx;</div><div class='del'>-        svc-&gt;xl = xl;</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_DEBUG, "RPC service inited.");</div><div class='del'>-</div><div class='del'>-        gluster_dump_prog.options = options;</div><div class='add'>+    if ((!xl) || (!ctx) || (!options))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_program_register (svc, &amp;gluster_dump_prog, _gf_false);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR,</div><div class='del'>-                        "failed to register DUMP program");</div><div class='del'>-                goto free_svc;</div><div class='del'>-        }</div><div class='add'>+    svc = GF_CALLOC(1, sizeof(*svc), gf_common_mt_rpcsvc_t);</div><div class='add'>+    if (!svc)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    pthread_rwlock_init(&amp;svc-&gt;rpclock, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;svc-&gt;authschemes);</div><div class='add'>+    INIT_LIST_HEAD(&amp;svc-&gt;notify);</div><div class='add'>+    INIT_LIST_HEAD(&amp;svc-&gt;listeners);</div><div class='add'>+    INIT_LIST_HEAD(&amp;svc-&gt;programs);</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_init_options(svc, options);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "Failed to init options");</div><div class='add'>+        goto free_svc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!poolcount)</div><div class='add'>+        poolcount = RPCSVC_POOLCOUNT_MULT * svc-&gt;memfactor;</div><div class='add'>+</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "rx pool: %d", poolcount);</div><div class='add'>+    svc-&gt;rxpool = mem_pool_new(rpcsvc_request_t, poolcount);</div><div class='add'>+    /* TODO: leak */</div><div class='add'>+    if (!svc-&gt;rxpool) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "mem pool allocation failed");</div><div class='add'>+        goto free_svc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_auth_init(svc, options);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Failed to init "</div><div class='add'>+               "authentication");</div><div class='add'>+        goto free_svc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+    svc-&gt;options = options;</div><div class='add'>+    svc-&gt;ctx = ctx;</div><div class='add'>+    svc-&gt;xl = xl;</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_DEBUG, "RPC service inited.");</div><div class='add'>+</div><div class='add'>+    gluster_dump_prog.options = options;</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_program_register(svc, &amp;gluster_dump_prog, _gf_false);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "failed to register DUMP program");</div><div class='add'>+        goto free_svc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> free_svc:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                GF_FREE (svc);</div><div class='del'>-                svc = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        GF_FREE(svc);</div><div class='add'>+        svc = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return svc;</div><div class='add'>+    return svc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpcsvc_transport_peer_check_search (dict_t *options, char *pattern,</div><div class='del'>-                                    char *ip, char *hostname)</div><div class='add'>+rpcsvc_transport_peer_check_search(dict_t *options, char *pattern, char *ip,</div><div class='add'>+                                   char *hostname)</div><div class='ctx'> {</div><div class='del'>-        int                      ret           = -1;</div><div class='del'>-        char                    *addrtok       = NULL;</div><div class='del'>-        char                    *addrstr       = NULL;</div><div class='del'>-        char                    *dup_addrstr   = NULL;</div><div class='del'>-        char                    *svptr         = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *addrtok = NULL;</div><div class='add'>+    char *addrstr = NULL;</div><div class='add'>+    char *dup_addrstr = NULL;</div><div class='add'>+    char *svptr = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!options) || (!ip))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!options) || (!ip))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, pattern, &amp;addrstr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!addrstr) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(options, pattern, &amp;addrstr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dup_addrstr = gf_strdup (addrstr);</div><div class='del'>-        addrtok = strtok_r (dup_addrstr, ",", &amp;svptr);</div><div class='del'>-        while (addrtok) {</div><div class='add'>+    if (!addrstr) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                /* CASEFOLD not present on Solaris */</div><div class='add'>+    dup_addrstr = gf_strdup(addrstr);</div><div class='add'>+    addrtok = strtok_r(dup_addrstr, ",", &amp;svptr);</div><div class='add'>+    while (addrtok) {</div><div class='add'>+        /* CASEFOLD not present on Solaris */</div><div class='ctx'> #ifdef FNM_CASEFOLD</div><div class='del'>-                ret = fnmatch (addrtok, ip, FNM_CASEFOLD);</div><div class='add'>+        ret = fnmatch(addrtok, ip, FNM_CASEFOLD);</div><div class='ctx'> #else</div><div class='del'>-                ret = fnmatch (addrtok, ip, 0);</div><div class='add'>+        ret = fnmatch(addrtok, ip, 0);</div><div class='ctx'> #endif</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        goto err;</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-                /* compare hostnames if applicable */</div><div class='del'>-                if (hostname) {</div><div class='add'>+        /* compare hostnames if applicable */</div><div class='add'>+        if (hostname) {</div><div class='ctx'> #ifdef FNM_CASEFOLD</div><div class='del'>-                        ret = fnmatch (addrtok, hostname, FNM_CASEFOLD);</div><div class='add'>+            ret = fnmatch(addrtok, hostname, FNM_CASEFOLD);</div><div class='ctx'> #else</div><div class='del'>-                        ret = fnmatch (addrtok, hostname, 0);</div><div class='add'>+            ret = fnmatch(addrtok, hostname, 0);</div><div class='ctx'> #endif</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Compare IPv4 subnetwork, TODO: IPv6 subnet support */</div><div class='del'>-                if (strchr (addrtok, '/')) {</div><div class='del'>-                        ret = rpcsvc_match_subnet_v4 (addrtok, ip);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                goto err;</div><div class='del'>-                }</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                addrtok = strtok_r (NULL, ",", &amp;svptr);</div><div class='add'>+        /* Compare IPv4 subnetwork, TODO: IPv6 subnet support */</div><div class='add'>+        if (strchr(addrtok, '/')) {</div><div class='add'>+            ret = rpcsvc_match_subnet_v4(addrtok, ip);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='add'>+        addrtok = strtok_r(NULL, ",", &amp;svptr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (dup_addrstr);</div><div class='add'>+    GF_FREE(dup_addrstr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-rpcsvc_transport_peer_check_allow (dict_t *options, char *volname,</div><div class='del'>-                                   char *ip, char *hostname)</div><div class='add'>+rpcsvc_transport_peer_check_allow(dict_t *options, char *volname, char *ip,</div><div class='add'>+                                  char *hostname)</div><div class='ctx'> {</div><div class='del'>-        int      ret     = RPCSVC_AUTH_DONTCARE;</div><div class='del'>-        char    *srchstr = NULL;</div><div class='add'>+    int ret = RPCSVC_AUTH_DONTCARE;</div><div class='add'>+    char *srchstr = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!options) || (!ip) || (!volname))</div><div class='del'>-                return ret;</div><div class='add'>+    if ((!options) || (!ip) || (!volname))</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;srchstr, "rpc-auth.addr.%s.allow", volname);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                ret = RPCSVC_AUTH_DONTCARE;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;srchstr, "rpc-auth.addr.%s.allow", volname);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+        ret = RPCSVC_AUTH_DONTCARE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_transport_peer_check_search (options, srchstr,</div><div class='del'>-                                                  ip, hostname);</div><div class='del'>-        GF_FREE (srchstr);</div><div class='add'>+    ret = rpcsvc_transport_peer_check_search(options, srchstr, ip, hostname);</div><div class='add'>+    GF_FREE(srchstr);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = RPCSVC_AUTH_ACCEPT;</div><div class='del'>-        else</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    else</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rpcsvc_transport_peer_check_reject (dict_t *options, char *volname,</div><div class='del'>-                                    char *ip, char *hostname)</div><div class='add'>+rpcsvc_transport_peer_check_reject(dict_t *options, char *volname, char *ip,</div><div class='add'>+                                   char *hostname)</div><div class='ctx'> {</div><div class='del'>-        int      ret     = RPCSVC_AUTH_DONTCARE;</div><div class='del'>-        char    *srchstr = NULL;</div><div class='add'>+    int ret = RPCSVC_AUTH_DONTCARE;</div><div class='add'>+    char *srchstr = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!options) || (!ip) || (!volname))</div><div class='del'>-                return ret;</div><div class='add'>+    if ((!options) || (!ip) || (!volname))</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;srchstr, "rpc-auth.addr.%s.reject",</div><div class='del'>-                           volname);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;srchstr, "rpc-auth.addr.%s.reject", volname);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rpcsvc_transport_peer_check_search (options, srchstr,</div><div class='del'>-                                                  ip, hostname);</div><div class='del'>-        GF_FREE (srchstr);</div><div class='add'>+    ret = rpcsvc_transport_peer_check_search(options, srchstr, ip, hostname);</div><div class='add'>+    GF_FREE(srchstr);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-        else</div><div class='del'>-                ret = RPCSVC_AUTH_DONTCARE;</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    else</div><div class='add'>+        ret = RPCSVC_AUTH_DONTCARE;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Combines rpc auth's allow and reject options.</div><div class='ctx'>  * Order of checks is important.</div><div class='ctx'>  * First,              REJECT if either rejects.</div><div class='hunk'>@@ -2749,188 +2751,188 @@ out:</div><div class='ctx'>  * If neither accepts, DONTCARE</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-rpcsvc_combine_allow_reject_volume_check (int allow, int reject)</div><div class='add'>+rpcsvc_combine_allow_reject_volume_check(int allow, int reject)</div><div class='ctx'> {</div><div class='del'>-        if (allow == RPCSVC_AUTH_REJECT ||</div><div class='del'>-            reject == RPCSVC_AUTH_REJECT)</div><div class='del'>-                return RPCSVC_AUTH_REJECT;</div><div class='add'>+    if (allow == RPCSVC_AUTH_REJECT || reject == RPCSVC_AUTH_REJECT)</div><div class='add'>+        return RPCSVC_AUTH_REJECT;</div><div class='ctx'> </div><div class='del'>-        if (allow == RPCSVC_AUTH_ACCEPT ||</div><div class='del'>-            reject == RPCSVC_AUTH_ACCEPT)</div><div class='del'>-                return RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    if (allow == RPCSVC_AUTH_ACCEPT || reject == RPCSVC_AUTH_ACCEPT)</div><div class='add'>+        return RPCSVC_AUTH_ACCEPT;</div><div class='ctx'> </div><div class='del'>-        return RPCSVC_AUTH_DONTCARE;</div><div class='add'>+    return RPCSVC_AUTH_DONTCARE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_auth_check (rpcsvc_t *svc, char *volname, char *ipaddr)</div><div class='del'>-{</div><div class='del'>-        int     ret                            = RPCSVC_AUTH_REJECT;</div><div class='del'>-        int     accept                         = RPCSVC_AUTH_REJECT;</div><div class='del'>-        int     reject                         = RPCSVC_AUTH_REJECT;</div><div class='del'>-        char   *hostname                       = NULL;</div><div class='del'>-        char   *allow_str                      = NULL;</div><div class='del'>-        char   *reject_str                     = NULL;</div><div class='del'>-        char   *srchstr                        = NULL;</div><div class='del'>-        dict_t *options                        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!svc || !volname || !ipaddr)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        /* Fetch the options from svc struct and validate */</div><div class='del'>-        options = svc-&gt;options;</div><div class='del'>-        if (!options)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        /* Accept if its the default case: Allow all, Reject none</div><div class='del'>-         * The default volfile always contains a 'allow *' rule</div><div class='del'>-         * for each volume. If allow rule is missing (which implies</div><div class='del'>-         * there is some bad volfile generating code doing this), we</div><div class='del'>-         * assume no one is allowed mounts, and thus, we reject mounts.</div><div class='del'>-         */</div><div class='del'>-        ret = gf_asprintf (&amp;srchstr, "rpc-auth.addr.%s.allow", volname);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                return RPCSVC_AUTH_REJECT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (options, srchstr, &amp;allow_str);</div><div class='del'>-        GF_FREE (srchstr);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return RPCSVC_AUTH_REJECT;</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf (&amp;srchstr, "rpc-auth.addr.%s.reject", volname);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                return RPCSVC_AUTH_REJECT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (options, srchstr, &amp;reject_str);</div><div class='del'>-        GF_FREE (srchstr);</div><div class='add'>+rpcsvc_auth_check(rpcsvc_t *svc, char *volname, char *ipaddr)</div><div class='add'>+{</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    int accept = RPCSVC_AUTH_REJECT;</div><div class='add'>+    int reject = RPCSVC_AUTH_REJECT;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *allow_str = NULL;</div><div class='add'>+    char *reject_str = NULL;</div><div class='add'>+    char *srchstr = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+</div><div class='add'>+    if (!svc || !volname || !ipaddr)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * If "reject_str" is being set as '*' (anonymous), then NFS-server</div><div class='del'>-         * would reject everything. If the "reject_str" is not set and</div><div class='del'>-         * "allow_str" is set as '*' (anonymous), then NFS-server would</div><div class='del'>-         * accept mount requests from all clients.</div><div class='del'>-         */</div><div class='del'>-        if (reject_str != NULL) {</div><div class='del'>-                if (!strcmp ("*", reject_str))</div><div class='del'>-                        return RPCSVC_AUTH_REJECT;</div><div class='del'>-        } else {</div><div class='del'>-                if (!strcmp ("*", allow_str))</div><div class='del'>-                        return RPCSVC_AUTH_ACCEPT;</div><div class='del'>-        }</div><div class='add'>+    /* Fetch the options from svc struct and validate */</div><div class='add'>+    options = svc-&gt;options;</div><div class='add'>+    if (!options)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        /* addr-namelookup check */</div><div class='del'>-        if (svc-&gt;addr_namelookup == _gf_true) {</div><div class='del'>-                ret = gf_get_hostname_from_ip (ipaddr, &amp;hostname);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        if (hostname)</div><div class='del'>-                                GF_FREE (hostname);</div><div class='del'>-                        /* failed to get hostname, but hostname auth</div><div class='del'>-                         * is enabled, so authentication will not be</div><div class='del'>-                         * 100% correct. reject mounts</div><div class='del'>-                         */</div><div class='del'>-                        return RPCSVC_AUTH_REJECT;</div><div class='del'>-                }</div><div class='add'>+    /* Accept if its the default case: Allow all, Reject none</div><div class='add'>+     * The default volfile always contains a 'allow *' rule</div><div class='add'>+     * for each volume. If allow rule is missing (which implies</div><div class='add'>+     * there is some bad volfile generating code doing this), we</div><div class='add'>+     * assume no one is allowed mounts, and thus, we reject mounts.</div><div class='add'>+     */</div><div class='add'>+    ret = gf_asprintf(&amp;srchstr, "rpc-auth.addr.%s.allow", volname);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+        return RPCSVC_AUTH_REJECT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(options, srchstr, &amp;allow_str);</div><div class='add'>+    GF_FREE(srchstr);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return RPCSVC_AUTH_REJECT;</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;srchstr, "rpc-auth.addr.%s.reject", volname);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+        return RPCSVC_AUTH_REJECT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(options, srchstr, &amp;reject_str);</div><div class='add'>+    GF_FREE(srchstr);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If "reject_str" is being set as '*' (anonymous), then NFS-server</div><div class='add'>+     * would reject everything. If the "reject_str" is not set and</div><div class='add'>+     * "allow_str" is set as '*' (anonymous), then NFS-server would</div><div class='add'>+     * accept mount requests from all clients.</div><div class='add'>+     */</div><div class='add'>+    if (reject_str != NULL) {</div><div class='add'>+        if (!strcmp("*", reject_str))</div><div class='add'>+            return RPCSVC_AUTH_REJECT;</div><div class='add'>+    } else {</div><div class='add'>+        if (!strcmp("*", allow_str))</div><div class='add'>+            return RPCSVC_AUTH_ACCEPT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* addr-namelookup check */</div><div class='add'>+    if (svc-&gt;addr_namelookup == _gf_true) {</div><div class='add'>+        ret = gf_get_hostname_from_ip(ipaddr, &amp;hostname);</div><div class='add'>+        if (ret) {</div><div class='add'>+            if (hostname)</div><div class='add'>+                GF_FREE(hostname);</div><div class='add'>+            /* failed to get hostname, but hostname auth</div><div class='add'>+             * is enabled, so authentication will not be</div><div class='add'>+             * 100% correct. reject mounts</div><div class='add'>+             */</div><div class='add'>+            return RPCSVC_AUTH_REJECT;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        accept = rpcsvc_transport_peer_check_allow (options, volname,</div><div class='del'>-                                                    ipaddr, hostname);</div><div class='add'>+    accept = rpcsvc_transport_peer_check_allow(options, volname, ipaddr,</div><div class='add'>+                                               hostname);</div><div class='ctx'> </div><div class='del'>-        reject = rpcsvc_transport_peer_check_reject (options, volname,</div><div class='del'>-                                                     ipaddr, hostname);</div><div class='add'>+    reject = rpcsvc_transport_peer_check_reject(options, volname, ipaddr,</div><div class='add'>+                                                hostname);</div><div class='ctx'> </div><div class='del'>-        if (hostname)</div><div class='del'>-                GF_FREE (hostname);</div><div class='del'>-        return rpcsvc_combine_allow_reject_volume_check (accept, reject);</div><div class='add'>+    if (hostname)</div><div class='add'>+        GF_FREE(hostname);</div><div class='add'>+    return rpcsvc_combine_allow_reject_volume_check(accept, reject);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_transport_privport_check (rpcsvc_t *svc, char *volname, uint16_t port)</div><div class='add'>+rpcsvc_transport_privport_check(rpcsvc_t *svc, char *volname, uint16_t port)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-        char                    *srchstr = NULL;</div><div class='del'>-        char                    *valstr = NULL;</div><div class='del'>-        gf_boolean_t            insecure = _gf_false;</div><div class='del'>-</div><div class='del'>-        if ((!svc) || (!volname))</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        gf_log (GF_RPCSVC, GF_LOG_TRACE, "Client port: %d", (int)port);</div><div class='del'>-        /* If the port is already a privileged one, don't bother with checking</div><div class='del'>-         * options.</div><div class='del'>-         */</div><div class='del'>-        if (port &lt;= 1024) {</div><div class='del'>-                ret = RPCSVC_AUTH_ACCEPT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Disabled by default */</div><div class='del'>-        ret = gf_asprintf (&amp;srchstr, "rpc-auth.ports.%s.insecure", volname);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                ret = RPCSVC_AUTH_REJECT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    int ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+    char *srchstr = NULL;</div><div class='add'>+    char *valstr = NULL;</div><div class='add'>+    gf_boolean_t insecure = _gf_false;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (svc-&gt;options, srchstr, &amp;valstr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to"</div><div class='del'>-                        " read rpc-auth.ports.insecure value");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_string2boolean (valstr, &amp;insecure);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to"</div><div class='del'>-                        " convert rpc-auth.ports.insecure value");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if ((!svc) || (!volname))</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = insecure ? RPCSVC_AUTH_ACCEPT : RPCSVC_AUTH_REJECT;</div><div class='del'>-</div><div class='del'>-        if (ret == RPCSVC_AUTH_ACCEPT)</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Unprivileged port allowed");</div><div class='del'>-        else</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_DEBUG, "Unprivileged port not"</div><div class='del'>-                        " allowed");</div><div class='add'>+    gf_log(GF_RPCSVC, GF_LOG_TRACE, "Client port: %d", (int)port);</div><div class='add'>+    /* If the port is already a privileged one, don't bother with checking</div><div class='add'>+     * options.</div><div class='add'>+     */</div><div class='add'>+    if (port &lt;= 1024) {</div><div class='add'>+        ret = RPCSVC_AUTH_ACCEPT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Disabled by default */</div><div class='add'>+    ret = gf_asprintf(&amp;srchstr, "rpc-auth.ports.%s.insecure", volname);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+        ret = RPCSVC_AUTH_REJECT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(svc-&gt;options, srchstr, &amp;valstr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Failed to"</div><div class='add'>+               " read rpc-auth.ports.insecure value");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_string2boolean(valstr, &amp;insecure);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR,</div><div class='add'>+               "Failed to"</div><div class='add'>+               " convert rpc-auth.ports.insecure value");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = insecure ? RPCSVC_AUTH_ACCEPT : RPCSVC_AUTH_REJECT;</div><div class='add'>+</div><div class='add'>+    if (ret == RPCSVC_AUTH_ACCEPT)</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG, "Unprivileged port allowed");</div><div class='add'>+    else</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_DEBUG,</div><div class='add'>+               "Unprivileged port not"</div><div class='add'>+               " allowed");</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (srchstr)</div><div class='del'>-                GF_FREE (srchstr);</div><div class='add'>+    if (srchstr)</div><div class='add'>+        GF_FREE(srchstr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> char *</div><div class='del'>-rpcsvc_volume_allowed (dict_t *options, char *volname)</div><div class='add'>+rpcsvc_volume_allowed(dict_t *options, char *volname)</div><div class='ctx'> {</div><div class='del'>-        char    globalrule[] = "rpc-auth.addr.allow";</div><div class='del'>-        char    *srchstr = NULL;</div><div class='del'>-        char    *addrstr = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    char globalrule[] = "rpc-auth.addr.allow";</div><div class='add'>+    char *srchstr = NULL;</div><div class='add'>+    char *addrstr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!options) || (!volname))</div><div class='del'>-                return NULL;</div><div class='add'>+    if ((!options) || (!volname))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;srchstr, "rpc-auth.addr.%s.allow", volname);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;srchstr, "rpc-auth.addr.%s.allow", volname);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(GF_RPCSVC, GF_LOG_ERROR, "asprintf failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dict_get (options, srchstr))</div><div class='del'>-                ret = dict_get_str (options, globalrule, &amp;addrstr);</div><div class='del'>-        else</div><div class='del'>-                ret = dict_get_str (options, srchstr, &amp;addrstr);</div><div class='add'>+    if (!dict_get(options, srchstr))</div><div class='add'>+        ret = dict_get_str(options, globalrule, &amp;addrstr);</div><div class='add'>+    else</div><div class='add'>+        ret = dict_get_str(options, srchstr, &amp;addrstr);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (srchstr);</div><div class='add'>+    GF_FREE(srchstr);</div><div class='ctx'> </div><div class='del'>-        return addrstr;</div><div class='add'>+    return addrstr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2944,56 +2946,61 @@ out:</div><div class='ctx'>  *     as it's already being done at the time of CLI SET.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-rpcsvc_match_subnet_v4 (const char *addrtok, const char *ipaddr)</div><div class='del'>-{</div><div class='del'>-        char                 *slash     = NULL;</div><div class='del'>-        char                 *netaddr   = NULL;</div><div class='del'>-        int                   ret       = -1;</div><div class='del'>-        uint32_t              prefixlen = 0;</div><div class='del'>-        uint32_t              shift     = 0;</div><div class='del'>-        struct sockaddr_in    sin1      = {0, };</div><div class='del'>-        struct sockaddr_in    sin2      = {0, };</div><div class='del'>-        struct sockaddr_in    mask      = {0, };</div><div class='del'>-</div><div class='del'>-        /* Copy the input */</div><div class='del'>-        netaddr = gf_strdup (addrtok);</div><div class='del'>-        if (netaddr == NULL) /* ENOMEM */</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Find the network socket addr of target */</div><div class='del'>-        if (inet_pton (AF_INET, ipaddr, &amp;sin1.sin_addr) == 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Find the network socket addr of subnet pattern */</div><div class='del'>-        if (inet_pton (AF_INET, netaddr, &amp;sin2.sin_addr) == 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        slash = strchr (netaddr, '/');</div><div class='del'>-        if (slash) {</div><div class='del'>-                *slash = '\0';</div><div class='del'>-                /*</div><div class='del'>-                 * Find the IPv4 network mask in network byte order.</div><div class='del'>-                 * IMP: String slash+1 is already validated, it can't have value</div><div class='del'>-                 * more than IPv4_ADDR_SIZE (32).</div><div class='del'>-                 */</div><div class='del'>-                prefixlen = (uint32_t) atoi (slash + 1);</div><div class='del'>-                if (prefixlen &gt; 31)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        shift = IPv4_ADDR_SIZE - prefixlen;</div><div class='del'>-        mask.sin_addr.s_addr = htonl ((uint32_t)~0 &lt;&lt; shift);</div><div class='del'>-</div><div class='del'>-        if (mask_match (sin1.sin_addr.s_addr,</div><div class='del'>-                        sin2.sin_addr.s_addr,</div><div class='del'>-                        mask.sin_addr.s_addr)) {</div><div class='del'>-                ret = 0; /* SUCCESS */</div><div class='del'>-        }</div><div class='add'>+rpcsvc_match_subnet_v4(const char *addrtok, const char *ipaddr)</div><div class='add'>+{</div><div class='add'>+    char *slash = NULL;</div><div class='add'>+    char *netaddr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t prefixlen = 0;</div><div class='add'>+    uint32_t shift = 0;</div><div class='add'>+    struct sockaddr_in sin1 = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct sockaddr_in sin2 = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct sockaddr_in mask = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* Copy the input */</div><div class='add'>+    netaddr = gf_strdup(addrtok);</div><div class='add'>+    if (netaddr == NULL) /* ENOMEM */</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Find the network socket addr of target */</div><div class='add'>+    if (inet_pton(AF_INET, ipaddr, &amp;sin1.sin_addr) == 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Find the network socket addr of subnet pattern */</div><div class='add'>+    if (inet_pton(AF_INET, netaddr, &amp;sin2.sin_addr) == 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    slash = strchr(netaddr, '/');</div><div class='add'>+    if (slash) {</div><div class='add'>+        *slash = '\0';</div><div class='add'>+        /*</div><div class='add'>+         * Find the IPv4 network mask in network byte order.</div><div class='add'>+         * IMP: String slash+1 is already validated, it can't have value</div><div class='add'>+         * more than IPv4_ADDR_SIZE (32).</div><div class='add'>+         */</div><div class='add'>+        prefixlen = (uint32_t)atoi(slash + 1);</div><div class='add'>+        if (prefixlen &gt; 31)</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    shift = IPv4_ADDR_SIZE - prefixlen;</div><div class='add'>+    mask.sin_addr.s_addr = htonl((uint32_t)~0 &lt;&lt; shift);</div><div class='add'>+</div><div class='add'>+    if (mask_match(sin1.sin_addr.s_addr, sin2.sin_addr.s_addr,</div><div class='add'>+                   mask.sin_addr.s_addr)) {</div><div class='add'>+        ret = 0; /* SUCCESS */</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (netaddr);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(netaddr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* During reconfigure, Make sure to call this function after event-threads are</div><div class='hunk'>@@ -3001,45 +3008,43 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpcsvc_ownthread_reconf (rpcsvc_t *svc, int new_eventthreadcount)</div><div class='add'>+rpcsvc_ownthread_reconf(rpcsvc_t *svc, int new_eventthreadcount)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        rpcsvc_program_t *program = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpcsvc_program_t *program = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!svc) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!svc) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_rwlock_wrlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    pthread_rwlock_wrlock(&amp;svc-&gt;rpclock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(program, &amp;svc-&gt;programs, program)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (program, &amp;svc-&gt;programs, program) {</div><div class='del'>-                        if (program-&gt;ownthread) {</div><div class='del'>-                                program-&gt;eventthreadcount =</div><div class='del'>-                                        new_eventthreadcount;</div><div class='del'>-                                rpcsvc_spawn_threads (svc, program);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (program-&gt;ownthread) {</div><div class='add'>+                program-&gt;eventthreadcount = new_eventthreadcount;</div><div class='add'>+                rpcsvc_spawn_threads(svc, program);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_rwlock_unlock (&amp;svc-&gt;rpclock);</div><div class='add'>+    }</div><div class='add'>+    pthread_rwlock_unlock(&amp;svc-&gt;rpclock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> rpcsvc_actor_t gluster_dump_actors[GF_DUMP_MAXVALUE] = {</div><div class='del'>-        [GF_DUMP_NULL]      = {"NULL",     GF_DUMP_NULL,     NULL,        NULL, 0, DRC_NA},</div><div class='del'>-        [GF_DUMP_DUMP]      = {"DUMP",     GF_DUMP_DUMP,     rpcsvc_dump, NULL, 0, DRC_NA},</div><div class='del'>-        [GF_DUMP_PING]      = {"PING",     GF_DUMP_PING,     rpcsvc_ping, NULL, 0, DRC_NA},</div><div class='add'>+    [GF_DUMP_NULL] = {"NULL", GF_DUMP_NULL, NULL, NULL, 0, DRC_NA},</div><div class='add'>+    [GF_DUMP_DUMP] = {"DUMP", GF_DUMP_DUMP, rpcsvc_dump, NULL, 0, DRC_NA},</div><div class='add'>+    [GF_DUMP_PING] = {"PING", GF_DUMP_PING, rpcsvc_ping, NULL, 0, DRC_NA},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct rpcsvc_program gluster_dump_prog = {</div><div class='del'>-        .progname  = "GF-DUMP",</div><div class='del'>-        .prognum   = GLUSTER_DUMP_PROGRAM,</div><div class='del'>-        .progver   = GLUSTER_DUMP_VERSION,</div><div class='del'>-        .actors    = gluster_dump_actors,</div><div class='del'>-        .numactors = GF_DUMP_MAXVALUE,</div><div class='add'>+    .progname = "GF-DUMP",</div><div class='add'>+    .prognum = GLUSTER_DUMP_PROGRAM,</div><div class='add'>+    .progver = GLUSTER_DUMP_VERSION,</div><div class='add'>+    .actors = gluster_dump_actors,</div><div class='add'>+    .numactors = GF_DUMP_MAXVALUE,</div><div class='ctx'> };</div><div class='head'>diff --git a/rpc/rpc-lib/src/xdr-rpc.c b/rpc/rpc-lib/src/xdr-rpc.c<br/>index 88a7637b887..36fd9db1a97 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/xdr-rpc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/xdr-rpc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/xdr-rpc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/xdr-rpc.c</a></div><div class='hunk'>@@ -25,183 +25,178 @@</div><div class='ctx'>  * The remaining payload is returned into payload.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-xdr_to_rpc_call (char *msgbuf, size_t len, struct rpc_msg *call,</div><div class='del'>-                 struct iovec *payload, char *credbytes, char *verfbytes)</div><div class='add'>+xdr_to_rpc_call(char *msgbuf, size_t len, struct rpc_msg *call,</div><div class='add'>+                struct iovec *payload, char *credbytes, char *verfbytes)</div><div class='ctx'> {</div><div class='del'>-        XDR                     xdr;</div><div class='del'>-        char                    opaquebytes[GF_MAX_AUTH_BYTES];</div><div class='del'>-        struct opaque_auth      *oa = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", msgbuf, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", call, out);</div><div class='del'>-</div><div class='del'>-        memset (call, 0, sizeof (*call));</div><div class='del'>-</div><div class='del'>-        oa = &amp;call-&gt;rm_call.cb_cred;</div><div class='del'>-        if (!credbytes)</div><div class='del'>-                oa-&gt;oa_base = opaquebytes;</div><div class='del'>-        else</div><div class='del'>-                oa-&gt;oa_base = credbytes;</div><div class='del'>-</div><div class='del'>-        oa = &amp;call-&gt;rm_call.cb_verf;</div><div class='del'>-        if (!verfbytes)</div><div class='del'>-                oa-&gt;oa_base = opaquebytes;</div><div class='del'>-        else</div><div class='del'>-                oa-&gt;oa_base = verfbytes;</div><div class='del'>-</div><div class='del'>-        xdrmem_create (&amp;xdr, msgbuf, len, XDR_DECODE);</div><div class='del'>-        if (!xdr_callmsg (&amp;xdr, call)) {</div><div class='del'>-                gf_log ("rpc", GF_LOG_WARNING, "failed to decode call msg");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (payload) {</div><div class='del'>-                payload-&gt;iov_base = xdr_decoded_remaining_addr (xdr);</div><div class='del'>-                payload-&gt;iov_len = xdr_decoded_remaining_len (xdr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    char opaquebytes[GF_MAX_AUTH_BYTES];</div><div class='add'>+    struct opaque_auth *oa = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", msgbuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", call, out);</div><div class='add'>+</div><div class='add'>+    memset(call, 0, sizeof(*call));</div><div class='add'>+</div><div class='add'>+    oa = &amp;call-&gt;rm_call.cb_cred;</div><div class='add'>+    if (!credbytes)</div><div class='add'>+        oa-&gt;oa_base = opaquebytes;</div><div class='add'>+    else</div><div class='add'>+        oa-&gt;oa_base = credbytes;</div><div class='add'>+</div><div class='add'>+    oa = &amp;call-&gt;rm_call.cb_verf;</div><div class='add'>+    if (!verfbytes)</div><div class='add'>+        oa-&gt;oa_base = opaquebytes;</div><div class='add'>+    else</div><div class='add'>+        oa-&gt;oa_base = verfbytes;</div><div class='add'>+</div><div class='add'>+    xdrmem_create(&amp;xdr, msgbuf, len, XDR_DECODE);</div><div class='add'>+    if (!xdr_callmsg(&amp;xdr, call)) {</div><div class='add'>+        gf_log("rpc", GF_LOG_WARNING, "failed to decode call msg");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (payload) {</div><div class='add'>+        payload-&gt;iov_base = xdr_decoded_remaining_addr(xdr);</div><div class='add'>+        payload-&gt;iov_len = xdr_decoded_remaining_len(xdr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> bool_t</div><div class='del'>-true_func (XDR *s, caddr_t *a)</div><div class='add'>+true_func(XDR *s, caddr_t *a)</div><div class='ctx'> {</div><div class='del'>-        return TRUE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_fill_empty_reply (struct rpc_msg *reply, uint32_t xid)</div><div class='add'>+rpc_fill_empty_reply(struct rpc_msg *reply, uint32_t xid)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", reply, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", reply, out);</div><div class='ctx'> </div><div class='del'>-        /* Setting to 0 also results in reply verifier flavor to be</div><div class='del'>-         * set to AUTH_NULL which is what we want right now.</div><div class='del'>-         */</div><div class='del'>-        memset (reply, 0, sizeof (*reply));</div><div class='del'>-        reply-&gt;rm_xid = xid;</div><div class='del'>-        reply-&gt;rm_direction = REPLY;</div><div class='add'>+    /* Setting to 0 also results in reply verifier flavor to be</div><div class='add'>+     * set to AUTH_NULL which is what we want right now.</div><div class='add'>+     */</div><div class='add'>+    memset(reply, 0, sizeof(*reply));</div><div class='add'>+    reply-&gt;rm_xid = xid;</div><div class='add'>+    reply-&gt;rm_direction = REPLY;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_fill_denied_reply (struct rpc_msg *reply, int rjstat, int auth_err)</div><div class='add'>+rpc_fill_denied_reply(struct rpc_msg *reply, int rjstat, int auth_err)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", reply, out);</div><div class='del'>-</div><div class='del'>-        reply-&gt;rm_reply.rp_stat = MSG_DENIED;</div><div class='del'>-        reply-&gt;rjcted_rply.rj_stat = rjstat;</div><div class='del'>-        if (rjstat == RPC_MISMATCH) {</div><div class='del'>-                /* No problem with hardcoding</div><div class='del'>-                 * RPC version numbers. We only support</div><div class='del'>-                 * v2 anyway.</div><div class='del'>-                 */</div><div class='del'>-                reply-&gt;rjcted_rply.rj_vers.low = 2;</div><div class='del'>-                reply-&gt;rjcted_rply.rj_vers.high = 2;</div><div class='del'>-        } else if (rjstat == AUTH_ERROR)</div><div class='del'>-                reply-&gt;rjcted_rply.rj_why = auth_err;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", reply, out);</div><div class='add'>+</div><div class='add'>+    reply-&gt;rm_reply.rp_stat = MSG_DENIED;</div><div class='add'>+    reply-&gt;rjcted_rply.rj_stat = rjstat;</div><div class='add'>+    if (rjstat == RPC_MISMATCH) {</div><div class='add'>+        /* No problem with hardcoding</div><div class='add'>+         * RPC version numbers. We only support</div><div class='add'>+         * v2 anyway.</div><div class='add'>+         */</div><div class='add'>+        reply-&gt;rjcted_rply.rj_vers.low = 2;</div><div class='add'>+        reply-&gt;rjcted_rply.rj_vers.high = 2;</div><div class='add'>+    } else if (rjstat == AUTH_ERROR)</div><div class='add'>+        reply-&gt;rjcted_rply.rj_why = auth_err;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_fill_accepted_reply (struct rpc_msg *reply, int arstat, int proglow,</div><div class='del'>-                         int proghigh, int verf, int len, char *vdata)</div><div class='add'>+rpc_fill_accepted_reply(struct rpc_msg *reply, int arstat, int proglow,</div><div class='add'>+                        int proghigh, int verf, int len, char *vdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", reply, out);</div><div class='del'>-</div><div class='del'>-        reply-&gt;rm_reply.rp_stat = MSG_ACCEPTED;</div><div class='del'>-        reply-&gt;acpted_rply.ar_stat = arstat;</div><div class='del'>-</div><div class='del'>-        reply-&gt;acpted_rply.ar_verf.oa_flavor = verf;</div><div class='del'>-        reply-&gt;acpted_rply.ar_verf.oa_length = len;</div><div class='del'>-        reply-&gt;acpted_rply.ar_verf.oa_base = vdata;</div><div class='del'>-        if (arstat == PROG_MISMATCH) {</div><div class='del'>-                reply-&gt;acpted_rply.ar_vers.low = proglow;</div><div class='del'>-                reply-&gt;acpted_rply.ar_vers.high = proghigh;</div><div class='del'>-        } else if (arstat == SUCCESS) {</div><div class='del'>-</div><div class='del'>-                /* This is a hack. I'd really like to build a custom</div><div class='del'>-                 * XDR library because Sun RPC interface is not very flexible.</div><div class='del'>-                 */</div><div class='del'>-                reply-&gt;acpted_rply.ar_results.proc = (xdrproc_t)true_func;</div><div class='del'>-                reply-&gt;acpted_rply.ar_results.where = NULL;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", reply, out);</div><div class='add'>+</div><div class='add'>+    reply-&gt;rm_reply.rp_stat = MSG_ACCEPTED;</div><div class='add'>+    reply-&gt;acpted_rply.ar_stat = arstat;</div><div class='add'>+</div><div class='add'>+    reply-&gt;acpted_rply.ar_verf.oa_flavor = verf;</div><div class='add'>+    reply-&gt;acpted_rply.ar_verf.oa_length = len;</div><div class='add'>+    reply-&gt;acpted_rply.ar_verf.oa_base = vdata;</div><div class='add'>+    if (arstat == PROG_MISMATCH) {</div><div class='add'>+        reply-&gt;acpted_rply.ar_vers.low = proglow;</div><div class='add'>+        reply-&gt;acpted_rply.ar_vers.high = proghigh;</div><div class='add'>+    } else if (arstat == SUCCESS) {</div><div class='add'>+        /* This is a hack. I'd really like to build a custom</div><div class='add'>+         * XDR library because Sun RPC interface is not very flexible.</div><div class='add'>+         */</div><div class='add'>+        reply-&gt;acpted_rply.ar_results.proc = (xdrproc_t)true_func;</div><div class='add'>+        reply-&gt;acpted_rply.ar_results.where = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rpc_reply_to_xdr (struct rpc_msg *reply, char *dest, size_t len,</div><div class='del'>-                  struct iovec *dst)</div><div class='add'>+rpc_reply_to_xdr(struct rpc_msg *reply, char *dest, size_t len,</div><div class='add'>+                 struct iovec *dst)</div><div class='ctx'> {</div><div class='del'>-        XDR xdr;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", reply, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", dest, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", dst, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", reply, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", dest, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", dst, out);</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, dest, len, XDR_ENCODE);</div><div class='del'>-        if (!xdr_replymsg(&amp;xdr, reply)) {</div><div class='del'>-                gf_log ("rpc", GF_LOG_WARNING, "failed to encode reply msg");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    xdrmem_create(&amp;xdr, dest, len, XDR_ENCODE);</div><div class='add'>+    if (!xdr_replymsg(&amp;xdr, reply)) {</div><div class='add'>+        gf_log("rpc", GF_LOG_WARNING, "failed to encode reply msg");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dst-&gt;iov_base = dest;</div><div class='del'>-        dst-&gt;iov_len = xdr_encoded_length (xdr);</div><div class='add'>+    dst-&gt;iov_base = dest;</div><div class='add'>+    dst-&gt;iov_len = xdr_encoded_length(xdr);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xdr_to_auth_unix_cred (char *msgbuf, int msglen, struct authunix_parms *au,</div><div class='del'>-                       char *machname, gid_t *gids)</div><div class='add'>+xdr_to_auth_unix_cred(char *msgbuf, int msglen, struct authunix_parms *au,</div><div class='add'>+                      char *machname, gid_t *gids)</div><div class='ctx'> {</div><div class='del'>-        XDR             xdr;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", msgbuf, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", machname, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", gids, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", au, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", msgbuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", machname, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", gids, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", au, out);</div><div class='ctx'> </div><div class='del'>-        au-&gt;aup_machname = machname;</div><div class='add'>+    au-&gt;aup_machname = machname;</div><div class='ctx'> #if defined(GF_DARWIN_HOST_OS) || defined(__FreeBSD__)</div><div class='del'>-        au-&gt;aup_gids = (int *)gids;</div><div class='add'>+    au-&gt;aup_gids = (int *)gids;</div><div class='ctx'> #else</div><div class='del'>-        au-&gt;aup_gids = gids;</div><div class='add'>+    au-&gt;aup_gids = gids;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, msgbuf, msglen, XDR_DECODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, msgbuf, msglen, XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-        if (!xdr_authunix_parms (&amp;xdr, au)) {</div><div class='del'>-                gf_log ("rpc", GF_LOG_WARNING, "failed to decode auth unix parms");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!xdr_authunix_parms(&amp;xdr, au)) {</div><div class='add'>+        gf_log("rpc", GF_LOG_WARNING, "failed to decode auth unix parms");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-lib/src/xdr-rpcclnt.c b/rpc/rpc-lib/src/xdr-rpcclnt.c<br/>index 5b470442d71..9e60d19e7a2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/xdr-rpcclnt.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-lib/src/xdr-rpcclnt.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-lib/src/xdr-rpcclnt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-lib/src/xdr-rpcclnt.c</a></div><div class='hunk'>@@ -26,86 +26,84 @@</div><div class='ctx'>  * The remaining payload is returned into payload.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-xdr_to_rpc_reply (char *msgbuf, size_t len, struct rpc_msg *reply,</div><div class='del'>-                  struct iovec *payload, char *verfbytes)</div><div class='add'>+xdr_to_rpc_reply(char *msgbuf, size_t len, struct rpc_msg *reply,</div><div class='add'>+                 struct iovec *payload, char *verfbytes)</div><div class='ctx'> {</div><div class='del'>-        XDR                     xdr;</div><div class='del'>-        int                     ret = -EINVAL;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", msgbuf, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", reply, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", msgbuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", reply, out);</div><div class='ctx'> </div><div class='del'>-        memset (reply, 0, sizeof (struct rpc_msg));</div><div class='add'>+    memset(reply, 0, sizeof(struct rpc_msg));</div><div class='ctx'> </div><div class='del'>-        reply-&gt;acpted_rply.ar_verf = _null_auth;</div><div class='del'>-        reply-&gt;acpted_rply.ar_results.where = NULL;</div><div class='del'>-        reply-&gt;acpted_rply.ar_results.proc = (xdrproc_t)(xdr_void);</div><div class='add'>+    reply-&gt;acpted_rply.ar_verf = _null_auth;</div><div class='add'>+    reply-&gt;acpted_rply.ar_results.where = NULL;</div><div class='add'>+    reply-&gt;acpted_rply.ar_results.proc = (xdrproc_t)(xdr_void);</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, msgbuf, len, XDR_DECODE);</div><div class='del'>-        if (!xdr_replymsg (&amp;xdr, reply)) {</div><div class='del'>-                gf_log ("rpc", GF_LOG_WARNING, "failed to decode reply msg");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (payload) {</div><div class='del'>-                payload-&gt;iov_base = xdr_decoded_remaining_addr (xdr);</div><div class='del'>-                payload-&gt;iov_len = xdr_decoded_remaining_len (xdr);</div><div class='del'>-        }</div><div class='add'>+    xdrmem_create(&amp;xdr, msgbuf, len, XDR_DECODE);</div><div class='add'>+    if (!xdr_replymsg(&amp;xdr, reply)) {</div><div class='add'>+        gf_log("rpc", GF_LOG_WARNING, "failed to decode reply msg");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (payload) {</div><div class='add'>+        payload-&gt;iov_base = xdr_decoded_remaining_addr(xdr);</div><div class='add'>+        payload-&gt;iov_len = xdr_decoded_remaining_len(xdr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-rpc_request_to_xdr (struct rpc_msg *request, char *dest, size_t len,</div><div class='del'>-                    struct iovec *dst)</div><div class='add'>+rpc_request_to_xdr(struct rpc_msg *request, char *dest, size_t len,</div><div class='add'>+                   struct iovec *dst)</div><div class='ctx'> {</div><div class='del'>-        XDR xdr;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", dest, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", request, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", dst, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", dest, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", request, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", dst, out);</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, dest, len, XDR_ENCODE);</div><div class='del'>-        if (!xdr_callmsg (&amp;xdr, request)) {</div><div class='del'>-                gf_log ("rpc", GF_LOG_WARNING, "failed to encode call msg");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    xdrmem_create(&amp;xdr, dest, len, XDR_ENCODE);</div><div class='add'>+    if (!xdr_callmsg(&amp;xdr, request)) {</div><div class='add'>+        gf_log("rpc", GF_LOG_WARNING, "failed to encode call msg");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dst-&gt;iov_base = dest;</div><div class='del'>-        dst-&gt;iov_len = xdr_encoded_length (xdr);</div><div class='add'>+    dst-&gt;iov_base = dest;</div><div class='add'>+    dst-&gt;iov_len = xdr_encoded_length(xdr);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-auth_unix_cred_to_xdr (struct authunix_parms *au, char *dest, size_t len,</div><div class='del'>-                       struct iovec *iov)</div><div class='add'>+auth_unix_cred_to_xdr(struct authunix_parms *au, char *dest, size_t len,</div><div class='add'>+                      struct iovec *iov)</div><div class='ctx'> {</div><div class='del'>-        XDR xdr;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", au, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", dest, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rpc", iov, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", au, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", dest, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rpc", iov, out);</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, dest, len, XDR_DECODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, dest, len, XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-        if (!xdr_authunix_parms (&amp;xdr, au)) {</div><div class='del'>-                gf_log ("rpc", GF_LOG_WARNING, "failed to decode authunix parms");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!xdr_authunix_parms(&amp;xdr, au)) {</div><div class='add'>+        gf_log("rpc", GF_LOG_WARNING, "failed to decode authunix parms");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iov-&gt;iov_base = dest;</div><div class='del'>-        iov-&gt;iov_len = xdr_encoded_length (xdr);</div><div class='add'>+    iov-&gt;iov_base = dest;</div><div class='add'>+    iov-&gt;iov_len = xdr_encoded_length(xdr);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-transport/rdma/src/name.c b/rpc/rpc-transport/rdma/src/name.c<br/>index 2db1f08c751..ea960cba4eb 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/rdma/src/name.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-transport/rdma/src/name.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/rdma/src/name.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/rdma/src/name.c</a></div><div class='hunk'>@@ -25,85 +25,82 @@</div><div class='ctx'> #include "rpc-lib-messages.h"</div><div class='ctx'> #include "rpc-trans-rdma-messages.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_resolve_ip6 (const char *hostname,</div><div class='del'>-                uint16_t port,</div><div class='del'>-                int family,</div><div class='del'>-                void **dnscache,</div><div class='del'>-                struct addrinfo **addr_info);</div><div class='del'>-</div><div class='add'>+gf_resolve_ip6(const char *hostname, uint16_t port, int family, void **dnscache,</div><div class='add'>+               struct addrinfo **addr_info);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_assign_port (struct sockaddr *sockaddr, uint16_t port)</div><div class='add'>+_assign_port(struct sockaddr *sockaddr, uint16_t port)</div><div class='ctx'> {</div><div class='del'>-        switch (sockaddr-&gt;sa_family) {</div><div class='add'>+    switch (sockaddr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                ((struct sockaddr_in6 *)sockaddr)-&gt;sin6_port = htons (port);</div><div class='del'>-                break;</div><div class='add'>+            ((struct sockaddr_in6 *)sockaddr)-&gt;sin6_port = htons(port);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_INET_SDP:</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                ((struct sockaddr_in *)sockaddr)-&gt;sin_port = htons (port);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ((struct sockaddr_in *)sockaddr)-&gt;sin_port = htons(port);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_inet_bind_to_port_lt_ceiling (struct rdma_cm_id *cm_id,</div><div class='del'>-                                 struct sockaddr *sockaddr,</div><div class='del'>-                                 socklen_t sockaddr_len, uint32_t ceiling)</div><div class='add'>+af_inet_bind_to_port_lt_ceiling(struct rdma_cm_id *cm_id,</div><div class='add'>+                                struct sockaddr *sockaddr,</div><div class='add'>+                                socklen_t sockaddr_len, uint32_t ceiling)</div><div class='ctx'> {</div><div class='ctx'> #if GF_DISABLE_PRIVPORT_TRACKING</div><div class='del'>-        _assign_port (sockaddr, 0);</div><div class='del'>-        return rdma_bind_addr (cm_id, sockaddr);</div><div class='add'>+    _assign_port(sockaddr, 0);</div><div class='add'>+    return rdma_bind_addr(cm_id, sockaddr);</div><div class='ctx'> #else</div><div class='del'>-        int32_t         ret                             = -1;</div><div class='del'>-        uint16_t        port                            = ceiling - 1;</div><div class='del'>-        unsigned char   ports[GF_PORT_ARRAY_SIZE]       = {0,};</div><div class='del'>-        int             i                               = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint16_t port = ceiling - 1;</div><div class='add'>+    unsigned char ports[GF_PORT_ARRAY_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='ctx'> loop:</div><div class='del'>-        ret = gf_process_reserved_ports (ports, ceiling);</div><div class='add'>+    ret = gf_process_reserved_ports(ports, ceiling);</div><div class='ctx'> </div><div class='del'>-        while (port) {</div><div class='del'>-                if (port == GF_CLIENT_PORT_CEILING) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    while (port) {</div><div class='add'>+        if (port == GF_CLIENT_PORT_CEILING) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* ignore the reserved ports */</div><div class='del'>-                if (BIT_VALUE (ports, port)) {</div><div class='del'>-                        port--;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        /* ignore the reserved ports */</div><div class='add'>+        if (BIT_VALUE(ports, port)) {</div><div class='add'>+            port--;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                _assign_port (sockaddr, port);</div><div class='add'>+        _assign_port(sockaddr, port);</div><div class='ctx'> </div><div class='del'>-                ret = rdma_bind_addr (cm_id, sockaddr);</div><div class='add'>+        ret = rdma_bind_addr(cm_id, sockaddr);</div><div class='ctx'> </div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        break;</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (ret == -1 &amp;&amp; errno == EACCES)</div><div class='del'>-                        break;</div><div class='add'>+        if (ret == -1 &amp;&amp; errno == EACCES)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                port--;</div><div class='del'>-        }</div><div class='add'>+        port--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* In case if all the secure ports are exhausted, we are no more</div><div class='del'>-         * binding to secure ports, hence instead of getting a random</div><div class='del'>-         * port, lets define the range to restrict it from getting from</div><div class='del'>-         * ports reserved for bricks i.e from range of 49152 - 65535</div><div class='del'>-         * which further may lead to port clash */</div><div class='del'>-        if (!port) {</div><div class='del'>-                ceiling = port = GF_CLNT_INSECURE_PORT_CEILING;</div><div class='del'>-                for (i = 0; i &lt;= ceiling; i++)</div><div class='del'>-                        BIT_CLEAR (ports, i);</div><div class='del'>-                goto loop;</div><div class='del'>-        }</div><div class='add'>+    /* In case if all the secure ports are exhausted, we are no more</div><div class='add'>+     * binding to secure ports, hence instead of getting a random</div><div class='add'>+     * port, lets define the range to restrict it from getting from</div><div class='add'>+     * ports reserved for bricks i.e from range of 49152 - 65535</div><div class='add'>+     * which further may lead to port clash */</div><div class='add'>+    if (!port) {</div><div class='add'>+        ceiling = port = GF_CLNT_INSECURE_PORT_CEILING;</div><div class='add'>+        for (i = 0; i &lt;= ceiling; i++)</div><div class='add'>+            BIT_CLEAR(ports, i);</div><div class='add'>+        goto loop;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #endif /* GF_DISABLE_PRIVPORT_TRACKING */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -146,596 +143,573 @@ err:</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-client_fill_address_family (rpc_transport_t *this, struct sockaddr *sockaddr)</div><div class='add'>+client_fill_address_family(rpc_transport_t *this, struct sockaddr *sockaddr)</div><div class='ctx'> {</div><div class='del'>-        data_t *address_family_data = NULL;</div><div class='del'>-</div><div class='del'>-        address_family_data = dict_get (this-&gt;options,</div><div class='del'>-                                        "transport.address-family");</div><div class='del'>-        if (!address_family_data) {</div><div class='del'>-                data_t *remote_host_data = NULL, *connect_path_data = NULL;</div><div class='del'>-                remote_host_data = dict_get (this-&gt;options, "remote-host");</div><div class='del'>-                connect_path_data = dict_get (this-&gt;options,</div><div class='del'>-                                              "transport.rdma.connect-path");</div><div class='del'>-</div><div class='del'>-                if (!(remote_host_data || connect_path_data) ||</div><div class='del'>-                    (remote_host_data &amp;&amp; connect_path_data)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                TRANS_MSG_ADDR_FAMILY_NOT_SPECIFIED,</div><div class='del'>-                                "address-family not specified and not able to "</div><div class='del'>-                                "determine the same from other options "</div><div class='del'>-                                "(remote-host:%s and connect-path:%s)",</div><div class='del'>-                                data_to_str (remote_host_data),</div><div class='del'>-                                data_to_str (connect_path_data));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+    data_t *address_family_data = NULL;</div><div class='add'>+</div><div class='add'>+    address_family_data = dict_get(this-&gt;options, "transport.address-family");</div><div class='add'>+    if (!address_family_data) {</div><div class='add'>+        data_t *remote_host_data = NULL, *connect_path_data = NULL;</div><div class='add'>+        remote_host_data = dict_get(this-&gt;options, "remote-host");</div><div class='add'>+        connect_path_data = dict_get(this-&gt;options,</div><div class='add'>+                                     "transport.rdma.connect-path");</div><div class='add'>+</div><div class='add'>+        if (!(remote_host_data || connect_path_data) ||</div><div class='add'>+            (remote_host_data &amp;&amp; connect_path_data)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   TRANS_MSG_ADDR_FAMILY_NOT_SPECIFIED,</div><div class='add'>+                   "address-family not specified and not able to "</div><div class='add'>+                   "determine the same from other options "</div><div class='add'>+                   "(remote-host:%s and connect-path:%s)",</div><div class='add'>+                   data_to_str(remote_host_data),</div><div class='add'>+                   data_to_str(connect_path_data));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (remote_host_data) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "address-family not "</div><div class='del'>-                                      "specified, guessing it to be "</div><div class='del'>-                                      "inet/inet6");</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_UNSPEC;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "address-family not "</div><div class='del'>-                                      "specified, guessing it to be unix");</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_UNIX;</div><div class='del'>-                }</div><div class='add'>+        if (remote_host_data) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "address-family not "</div><div class='add'>+                         "specified, guessing it to be "</div><div class='add'>+                         "inet/inet6");</div><div class='add'>+            sockaddr-&gt;sa_family = AF_UNSPEC;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "address-family not "</div><div class='add'>+                         "specified, guessing it to be unix");</div><div class='add'>+            sockaddr-&gt;sa_family = AF_UNIX;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+    } else {</div><div class='add'>+        char *address_family = data_to_str(address_family_data);</div><div class='add'>+        if (!strcasecmp(address_family, "unix")) {</div><div class='add'>+            sockaddr-&gt;sa_family = AF_UNIX;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet")) {</div><div class='add'>+            sockaddr-&gt;sa_family = AF_INET;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet6")) {</div><div class='add'>+            sockaddr-&gt;sa_family = AF_INET6;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet-sdp")) {</div><div class='add'>+            sockaddr-&gt;sa_family = AF_INET_SDP;</div><div class='ctx'>         } else {</div><div class='del'>-                char *address_family = data_to_str (address_family_data);</div><div class='del'>-                if (!strcasecmp (address_family, "unix")) {</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_UNIX;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet")) {</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_INET;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet6")) {</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_INET6;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet-sdp")) {</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_INET_SDP;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='del'>-                                "unknown address-family (%s) specified",</div><div class='del'>-                                address_family);</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_UNSPEC;</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='add'>+                   "unknown address-family (%s) specified", address_family);</div><div class='add'>+            sockaddr-&gt;sa_family = AF_UNSPEC;</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_inet_client_get_remote_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                    struct sockaddr *sockaddr,</div><div class='del'>-                                    socklen_t *sockaddr_len,</div><div class='del'>-                                    int16_t remote_port)</div><div class='add'>+af_inet_client_get_remote_sockaddr(rpc_transport_t *this,</div><div class='add'>+                                   struct sockaddr *sockaddr,</div><div class='add'>+                                   socklen_t *sockaddr_len, int16_t remote_port)</div><div class='ctx'> {</div><div class='del'>-        dict_t *options = this-&gt;options;</div><div class='del'>-        data_t *remote_host_data = NULL;</div><div class='del'>-        data_t *remote_port_data = NULL;</div><div class='del'>-        char *remote_host = NULL;</div><div class='del'>-        struct addrinfo *addr_info = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        remote_host_data = dict_get (options, "remote-host");</div><div class='del'>-        if (remote_host_data == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_REMOTE_HOST_ERROR, "option remote-host "</div><div class='del'>-                        "missing in volume %s", this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        remote_host = data_to_str (remote_host_data);</div><div class='del'>-        if (remote_host == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_REMOTE_HOST_ERROR, "option remote-host "</div><div class='del'>-                        "has data NULL in volume %s", this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (remote_port == 0) {</div><div class='del'>-                remote_port_data = dict_get (options, "remote-port");</div><div class='del'>-                if (remote_port_data == NULL) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "option remote-port "</div><div class='del'>-                                      "missing in volume %s. Defaulting to %d",</div><div class='del'>-                                      this-&gt;name, GF_DEFAULT_RDMA_LISTEN_PORT);</div><div class='del'>-</div><div class='del'>-                        remote_port = GF_DEFAULT_RDMA_LISTEN_PORT;</div><div class='del'>-                } else {</div><div class='del'>-                        remote_port = data_to_uint16 (remote_port_data);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (remote_port == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        RDMA_MSG_INVALID_ENTRY, "option remote-port has "</div><div class='del'>-                        "invalid port in volume %s", this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: gf_resolve is a blocking call. kick in some</div><div class='del'>-           non blocking dns techniques */</div><div class='del'>-        ret = gf_resolve_ip6 (remote_host, remote_port,</div><div class='del'>-                              sockaddr-&gt;sa_family,</div><div class='del'>-                              &amp;this-&gt;dnscache, &amp;addr_info);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_DNS_RESOL_FAILED,</div><div class='del'>-                        "DNS resolution failed on host %s", remote_host);</div><div class='del'>-                goto err;</div><div class='add'>+    dict_t *options = this-&gt;options;</div><div class='add'>+    data_t *remote_host_data = NULL;</div><div class='add'>+    data_t *remote_port_data = NULL;</div><div class='add'>+    char *remote_host = NULL;</div><div class='add'>+    struct addrinfo *addr_info = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    remote_host_data = dict_get(options, "remote-host");</div><div class='add'>+    if (remote_host_data == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_REMOTE_HOST_ERROR,</div><div class='add'>+               "option remote-host "</div><div class='add'>+               "missing in volume %s",</div><div class='add'>+               this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    remote_host = data_to_str(remote_host_data);</div><div class='add'>+    if (remote_host == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_REMOTE_HOST_ERROR,</div><div class='add'>+               "option remote-host "</div><div class='add'>+               "has data NULL in volume %s",</div><div class='add'>+               this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (remote_port == 0) {</div><div class='add'>+        remote_port_data = dict_get(options, "remote-port");</div><div class='add'>+        if (remote_port_data == NULL) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "option remote-port "</div><div class='add'>+                         "missing in volume %s. Defaulting to %d",</div><div class='add'>+                         this-&gt;name, GF_DEFAULT_RDMA_LISTEN_PORT);</div><div class='add'>+</div><div class='add'>+            remote_port = GF_DEFAULT_RDMA_LISTEN_PORT;</div><div class='add'>+        } else {</div><div class='add'>+            remote_port = data_to_uint16(remote_port_data);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        memcpy (sockaddr, addr_info-&gt;ai_addr, addr_info-&gt;ai_addrlen);</div><div class='del'>-        *sockaddr_len = addr_info-&gt;ai_addrlen;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (remote_port == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, RDMA_MSG_INVALID_ENTRY,</div><div class='add'>+               "option remote-port has "</div><div class='add'>+               "invalid port in volume %s",</div><div class='add'>+               this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: gf_resolve is a blocking call. kick in some</div><div class='add'>+       non blocking dns techniques */</div><div class='add'>+    ret = gf_resolve_ip6(remote_host, remote_port, sockaddr-&gt;sa_family,</div><div class='add'>+                         &amp;this-&gt;dnscache, &amp;addr_info);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_DNS_RESOL_FAILED,</div><div class='add'>+               "DNS resolution failed on host %s", remote_host);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(sockaddr, addr_info-&gt;ai_addr, addr_info-&gt;ai_addrlen);</div><div class='add'>+    *sockaddr_len = addr_info-&gt;ai_addrlen;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_unix_client_get_remote_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                    struct sockaddr *sockaddr,</div><div class='del'>-                                    socklen_t *sockaddr_len)</div><div class='add'>+af_unix_client_get_remote_sockaddr(rpc_transport_t *this,</div><div class='add'>+                                   struct sockaddr *sockaddr,</div><div class='add'>+                                   socklen_t *sockaddr_len)</div><div class='ctx'> {</div><div class='del'>-        struct sockaddr_un *sockaddr_un = NULL;</div><div class='del'>-        char *connect_path = NULL;</div><div class='del'>-        data_t *connect_path_data = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        connect_path_data = dict_get (this-&gt;options,</div><div class='del'>-                                      "transport.rdma.connect-path");</div><div class='del'>-        if (!connect_path_data) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_CONNECT_PATH_ERROR, "option "</div><div class='del'>-                        "transport.rdma.connect-path not specified for "</div><div class='del'>-                        "address-family unix");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        connect_path = data_to_str (connect_path_data);</div><div class='del'>-        if (!connect_path) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        RDMA_MSG_INVALID_ENTRY, "connect-path is null-string");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (strlen (connect_path) &gt; UNIX_PATH_MAX) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_CONNECT_PATH_ERROR,</div><div class='del'>-                        "connect-path value length %"GF_PRI_SIZET" &gt; "</div><div class='del'>-                        "%d octets", strlen (connect_path), UNIX_PATH_MAX);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "using connect-path %s", connect_path);</div><div class='del'>-        sockaddr_un = (struct sockaddr_un *)sockaddr;</div><div class='del'>-        strcpy (sockaddr_un-&gt;sun_path, connect_path);</div><div class='del'>-        *sockaddr_len = sizeof (struct sockaddr_un);</div><div class='add'>+    struct sockaddr_un *sockaddr_un = NULL;</div><div class='add'>+    char *connect_path = NULL;</div><div class='add'>+    data_t *connect_path_data = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    connect_path_data = dict_get(this-&gt;options, "transport.rdma.connect-path");</div><div class='add'>+    if (!connect_path_data) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_CONNECT_PATH_ERROR,</div><div class='add'>+               "option "</div><div class='add'>+               "transport.rdma.connect-path not specified for "</div><div class='add'>+               "address-family unix");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    connect_path = data_to_str(connect_path_data);</div><div class='add'>+    if (!connect_path) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, RDMA_MSG_INVALID_ENTRY,</div><div class='add'>+               "connect-path is null-string");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strlen(connect_path) &gt; UNIX_PATH_MAX) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_CONNECT_PATH_ERROR,</div><div class='add'>+               "connect-path value length %" GF_PRI_SIZET</div><div class='add'>+               " &gt; "</div><div class='add'>+               "%d octets",</div><div class='add'>+               strlen(connect_path), UNIX_PATH_MAX);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "using connect-path %s", connect_path);</div><div class='add'>+    sockaddr_un = (struct sockaddr_un *)sockaddr;</div><div class='add'>+    strcpy(sockaddr_un-&gt;sun_path, connect_path);</div><div class='add'>+    *sockaddr_len = sizeof(struct sockaddr_un);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_unix_server_get_local_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                   struct sockaddr *addr,</div><div class='del'>-                                   socklen_t *addr_len)</div><div class='add'>+af_unix_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,</div><div class='add'>+                                  socklen_t *addr_len)</div><div class='ctx'> {</div><div class='del'>-        data_t *listen_path_data = NULL;</div><div class='del'>-        char *listen_path = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        listen_path_data = dict_get (this-&gt;options,</div><div class='del'>-                                     "transport.rdma.listen-path");</div><div class='del'>-        if (!listen_path_data) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_LISTEN_PATH_ERROR,</div><div class='del'>-                        "missing option listen-path");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data_t *listen_path_data = NULL;</div><div class='add'>+    char *listen_path = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;</div><div class='add'>+</div><div class='add'>+    listen_path_data = dict_get(this-&gt;options, "transport.rdma.listen-path");</div><div class='add'>+    if (!listen_path_data) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_LISTEN_PATH_ERROR,</div><div class='add'>+               "missing option listen-path");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        listen_path = data_to_str (listen_path_data);</div><div class='add'>+    listen_path = data_to_str(listen_path_data);</div><div class='ctx'> </div><div class='ctx'> #ifndef UNIX_PATH_MAX</div><div class='ctx'> #define UNIX_PATH_MAX 108</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (strlen (listen_path) &gt; UNIX_PATH_MAX) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_LISTEN_PATH_ERROR, "option listen-path has "</div><div class='del'>-                        "value length %"GF_PRI_SIZET" &gt; %d",</div><div class='del'>-                        strlen (listen_path), UNIX_PATH_MAX);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (strlen(listen_path) &gt; UNIX_PATH_MAX) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_LISTEN_PATH_ERROR,</div><div class='add'>+               "option listen-path has "</div><div class='add'>+               "value length %" GF_PRI_SIZET " &gt; %d",</div><div class='add'>+               strlen(listen_path), UNIX_PATH_MAX);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sunaddr-&gt;sun_family = AF_UNIX;</div><div class='del'>-        strcpy (sunaddr-&gt;sun_path, listen_path);</div><div class='del'>-        *addr_len = sizeof (struct sockaddr_un);</div><div class='add'>+    sunaddr-&gt;sun_family = AF_UNIX;</div><div class='add'>+    strcpy(sunaddr-&gt;sun_path, listen_path);</div><div class='add'>+    *addr_len = sizeof(struct sockaddr_un);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_inet_server_get_local_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                   struct sockaddr *addr,</div><div class='del'>-                                   socklen_t *addr_len)</div><div class='add'>+af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,</div><div class='add'>+                                  socklen_t *addr_len)</div><div class='ctx'> {</div><div class='del'>-        struct addrinfo hints, *res = 0;</div><div class='del'>-        data_t *listen_port_data = NULL, *listen_host_data = NULL;</div><div class='del'>-        uint16_t listen_port = -1;</div><div class='del'>-        char service[NI_MAXSERV], *listen_host = NULL;</div><div class='del'>-        dict_t *options = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        options = this-&gt;options;</div><div class='del'>-</div><div class='del'>-        listen_port_data = dict_get (options, "transport.rdma.listen-port");</div><div class='del'>-        listen_host_data = dict_get (options,</div><div class='del'>-                                     "transport.rdma.bind-address");</div><div class='del'>-</div><div class='del'>-        if (listen_port_data) {</div><div class='del'>-                listen_port = data_to_uint16 (listen_port_data);</div><div class='del'>-        } else {</div><div class='del'>-                listen_port = GF_DEFAULT_RDMA_LISTEN_PORT;</div><div class='del'>-</div><div class='del'>-                if (addr-&gt;sa_family == AF_INET6) {</div><div class='del'>-                        struct sockaddr_in6 *in = (struct sockaddr_in6 *) addr;</div><div class='del'>-                        in-&gt;sin6_addr = in6addr_any;</div><div class='del'>-                        in-&gt;sin6_port = htons(listen_port);</div><div class='del'>-                        *addr_len = sizeof(struct sockaddr_in6);</div><div class='del'>-                        goto out;</div><div class='del'>-                } else if (addr-&gt;sa_family == AF_INET) {</div><div class='del'>-                        struct sockaddr_in *in = (struct sockaddr_in *) addr;</div><div class='del'>-                        in-&gt;sin_addr.s_addr = htonl(INADDR_ANY);</div><div class='del'>-                        in-&gt;sin_port = htons(listen_port);</div><div class='del'>-                        *addr_len = sizeof(struct sockaddr_in);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    struct addrinfo hints, *res = 0;</div><div class='add'>+    data_t *listen_port_data = NULL, *listen_host_data = NULL;</div><div class='add'>+    uint16_t listen_port = -1;</div><div class='add'>+    char service[NI_MAXSERV], *listen_host = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    options = this-&gt;options;</div><div class='add'>+</div><div class='add'>+    listen_port_data = dict_get(options, "transport.rdma.listen-port");</div><div class='add'>+    listen_host_data = dict_get(options, "transport.rdma.bind-address");</div><div class='add'>+</div><div class='add'>+    if (listen_port_data) {</div><div class='add'>+        listen_port = data_to_uint16(listen_port_data);</div><div class='add'>+    } else {</div><div class='add'>+        listen_port = GF_DEFAULT_RDMA_LISTEN_PORT;</div><div class='add'>+</div><div class='add'>+        if (addr-&gt;sa_family == AF_INET6) {</div><div class='add'>+            struct sockaddr_in6 *in = (struct sockaddr_in6 *)addr;</div><div class='add'>+            in-&gt;sin6_addr = in6addr_any;</div><div class='add'>+            in-&gt;sin6_port = htons(listen_port);</div><div class='add'>+            *addr_len = sizeof(struct sockaddr_in6);</div><div class='add'>+            goto out;</div><div class='add'>+        } else if (addr-&gt;sa_family == AF_INET) {</div><div class='add'>+            struct sockaddr_in *in = (struct sockaddr_in *)addr;</div><div class='add'>+            in-&gt;sin_addr.s_addr = htonl(INADDR_ANY);</div><div class='add'>+            in-&gt;sin_port = htons(listen_port);</div><div class='add'>+            *addr_len = sizeof(struct sockaddr_in);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (listen_port == (uint16_t) -1)</div><div class='del'>-                listen_port = GF_DEFAULT_RDMA_LISTEN_PORT;</div><div class='add'>+    if (listen_port == (uint16_t)-1)</div><div class='add'>+        listen_port = GF_DEFAULT_RDMA_LISTEN_PORT;</div><div class='ctx'> </div><div class='add'>+    if (listen_host_data) {</div><div class='add'>+        listen_host = data_to_str(listen_host_data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (listen_host_data) {</div><div class='del'>-                listen_host = data_to_str (listen_host_data);</div><div class='del'>-        }</div><div class='add'>+    sprintf(service, "%d", listen_port);</div><div class='ctx'> </div><div class='del'>-        sprintf (service, "%d", listen_port);</div><div class='del'>-</div><div class='del'>-        memset (&amp;hints, 0, sizeof (hints));</div><div class='del'>-        hints.ai_family = addr-&gt;sa_family;</div><div class='del'>-        hints.ai_socktype = SOCK_STREAM;</div><div class='del'>-        hints.ai_flags    = AI_ADDRCONFIG | AI_PASSIVE;</div><div class='del'>-</div><div class='del'>-        ret = getaddrinfo(listen_host, service, &amp;hints, &amp;res);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        TRANS_MSG_GET_ADDR_INFO_FAILED,</div><div class='del'>-                        "getaddrinfo failed for host %s, service %s",</div><div class='del'>-                        listen_host, service);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    memset(&amp;hints, 0, sizeof(hints));</div><div class='add'>+    hints.ai_family = addr-&gt;sa_family;</div><div class='add'>+    hints.ai_socktype = SOCK_STREAM;</div><div class='add'>+    hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE;</div><div class='add'>+</div><div class='add'>+    ret = getaddrinfo(listen_host, service, &amp;hints, &amp;res);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, TRANS_MSG_GET_ADDR_INFO_FAILED,</div><div class='add'>+               "getaddrinfo failed for host %s, service %s", listen_host,</div><div class='add'>+               service);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (addr, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='del'>-        *addr_len = res-&gt;ai_addrlen;</div><div class='add'>+    memcpy(addr, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='add'>+    *addr_len = res-&gt;ai_addrlen;</div><div class='ctx'> </div><div class='del'>-        freeaddrinfo (res);</div><div class='add'>+    freeaddrinfo(res);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_client_bind (rpc_transport_t *this, struct sockaddr *sockaddr,</div><div class='del'>-                     socklen_t *sockaddr_len, struct rdma_cm_id *cm_id)</div><div class='add'>+gf_rdma_client_bind(rpc_transport_t *this, struct sockaddr *sockaddr,</div><div class='add'>+                    socklen_t *sockaddr_len, struct rdma_cm_id *cm_id)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        *sockaddr_len = sizeof (struct sockaddr_in6);</div><div class='del'>-        switch (sockaddr-&gt;sa_family) {</div><div class='add'>+    *sockaddr_len = sizeof(struct sockaddr_in6);</div><div class='add'>+    switch (sockaddr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                *sockaddr_len = sizeof (struct sockaddr_in);</div><div class='add'>+            *sockaddr_len = sizeof(struct sockaddr_in);</div><div class='ctx'>         /* Fall through */</div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                if (!this-&gt;bind_insecure) {</div><div class='del'>-                        ret = af_inet_bind_to_port_lt_ceiling (cm_id, sockaddr,</div><div class='del'>-                                                               *sockaddr_len,</div><div class='del'>-                                                               GF_CLIENT_PORT_CEILING);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                        RDMA_MSG_PORT_BIND_FAILED,</div><div class='del'>-                                        "cannot bind rdma_cm_id to port "</div><div class='del'>-                                        "less than %d", GF_CLIENT_PORT_CEILING);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = af_inet_bind_to_port_lt_ceiling (cm_id, sockaddr,</div><div class='del'>-                                                               *sockaddr_len,</div><div class='del'>-                                                               GF_IANA_PRIV_PORTS_START);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                        RDMA_MSG_PORT_BIND_FAILED,</div><div class='del'>-                                        "cannot bind rdma_cm_id to port "</div><div class='del'>-                                        "less than %d",</div><div class='del'>-                                        GF_IANA_PRIV_PORTS_START);</div><div class='del'>-                        }</div><div class='add'>+            if (!this-&gt;bind_insecure) {</div><div class='add'>+                ret = af_inet_bind_to_port_lt_ceiling(</div><div class='add'>+                    cm_id, sockaddr, *sockaddr_len, GF_CLIENT_PORT_CEILING);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                           RDMA_MSG_PORT_BIND_FAILED,</div><div class='add'>+                           "cannot bind rdma_cm_id to port "</div><div class='add'>+                           "less than %d",</div><div class='add'>+                           GF_CLIENT_PORT_CEILING);</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                ret = af_inet_bind_to_port_lt_ceiling(</div><div class='add'>+                    cm_id, sockaddr, *sockaddr_len, GF_IANA_PRIV_PORTS_START);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                           RDMA_MSG_PORT_BIND_FAILED,</div><div class='add'>+                           "cannot bind rdma_cm_id to port "</div><div class='add'>+                           "less than %d",</div><div class='add'>+                           GF_IANA_PRIV_PORTS_START);</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                *sockaddr_len = sizeof (struct sockaddr_un);</div><div class='add'>+            *sockaddr_len = sizeof(struct sockaddr_un);</div><div class='ctx'> #if 0</div><div class='ctx'>                 ret = af_unix_client_bind (this, (struct sockaddr *)sockaddr,</div><div class='ctx'>                                            *sockaddr_len, sock);</div><div class='ctx'> #endif</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='del'>-                        "unknown address family %d", sockaddr-&gt;sa_family);</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='add'>+                   "unknown address family %d", sockaddr-&gt;sa_family);</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_client_get_remote_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                    struct sockaddr *sockaddr,</div><div class='del'>-                                    socklen_t *sockaddr_len,</div><div class='del'>-                                    int16_t remote_port)</div><div class='add'>+gf_rdma_client_get_remote_sockaddr(rpc_transport_t *this,</div><div class='add'>+                                   struct sockaddr *sockaddr,</div><div class='add'>+                                   socklen_t *sockaddr_len, int16_t remote_port)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        char is_inet_sdp = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char is_inet_sdp = 0;</div><div class='ctx'> </div><div class='del'>-        ret = client_fill_address_family (this, sockaddr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = client_fill_address_family(this, sockaddr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (sockaddr-&gt;sa_family) {</div><div class='add'>+    switch (sockaddr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='del'>-                sockaddr-&gt;sa_family = AF_INET;</div><div class='del'>-                is_inet_sdp = 1;</div><div class='add'>+            sockaddr-&gt;sa_family = AF_INET;</div><div class='add'>+            is_inet_sdp = 1;</div><div class='ctx'>         /* Fall through */</div><div class='ctx'>         case AF_INET:</div><div class='ctx'>         case AF_INET6:</div><div class='ctx'>         case AF_UNSPEC:</div><div class='del'>-                ret = af_inet_client_get_remote_sockaddr (this,</div><div class='del'>-                                                          sockaddr,</div><div class='del'>-                                                          sockaddr_len,</div><div class='del'>-                                                          remote_port);</div><div class='add'>+            ret = af_inet_client_get_remote_sockaddr(this, sockaddr,</div><div class='add'>+                                                     sockaddr_len, remote_port);</div><div class='ctx'> </div><div class='del'>-                if (is_inet_sdp) {</div><div class='del'>-                        sockaddr-&gt;sa_family = AF_INET_SDP;</div><div class='del'>-                }</div><div class='add'>+            if (is_inet_sdp) {</div><div class='add'>+                sockaddr-&gt;sa_family = AF_INET_SDP;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                ret = af_unix_client_get_remote_sockaddr (this,</div><div class='del'>-                                                          sockaddr,</div><div class='del'>-                                                          sockaddr_len);</div><div class='del'>-                break;</div><div class='add'>+            ret = af_unix_client_get_remote_sockaddr(this, sockaddr,</div><div class='add'>+                                                     sockaddr_len);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='del'>-                        "unknown address-family %d", sockaddr-&gt;sa_family);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='add'>+                   "unknown address-family %d", sockaddr-&gt;sa_family);</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_server_get_local_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                   struct sockaddr *addr,</div><div class='del'>-                                   socklen_t *addr_len)</div><div class='add'>+gf_rdma_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,</div><div class='add'>+                                  socklen_t *addr_len)</div><div class='ctx'> {</div><div class='del'>-        data_t *address_family_data = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        char is_inet_sdp = 0;</div><div class='del'>-</div><div class='del'>-        address_family_data = dict_get (this-&gt;options,</div><div class='del'>-                                        "transport.address-family");</div><div class='del'>-        if (address_family_data) {</div><div class='del'>-                char *address_family = NULL;</div><div class='del'>-                address_family = data_to_str (address_family_data);</div><div class='del'>-</div><div class='del'>-                if (!strcasecmp (address_family, "inet")) {</div><div class='del'>-                        addr-&gt;sa_family = AF_INET;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet6")) {</div><div class='del'>-                        addr-&gt;sa_family = AF_INET6;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet-sdp")) {</div><div class='del'>-                        addr-&gt;sa_family = AF_INET_SDP;</div><div class='del'>-                } else if (!strcasecmp (address_family, "unix")) {</div><div class='del'>-                        addr-&gt;sa_family = AF_UNIX;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                TRANS_MSG_UNKNOWN_ADDR_FAMILY, "unknown address"</div><div class='del'>-                                " family (%s) specified", address_family);</div><div class='del'>-                        addr-&gt;sa_family = AF_UNSPEC;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    data_t *address_family_data = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char is_inet_sdp = 0;</div><div class='add'>+</div><div class='add'>+    address_family_data = dict_get(this-&gt;options, "transport.address-family");</div><div class='add'>+    if (address_family_data) {</div><div class='add'>+        char *address_family = NULL;</div><div class='add'>+        address_family = data_to_str(address_family_data);</div><div class='add'>+</div><div class='add'>+        if (!strcasecmp(address_family, "inet")) {</div><div class='add'>+            addr-&gt;sa_family = AF_INET;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet6")) {</div><div class='add'>+            addr-&gt;sa_family = AF_INET6;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet-sdp")) {</div><div class='add'>+            addr-&gt;sa_family = AF_INET_SDP;</div><div class='add'>+        } else if (!strcasecmp(address_family, "unix")) {</div><div class='add'>+            addr-&gt;sa_family = AF_UNIX;</div><div class='ctx'>         } else {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "option address-family not "</div><div class='del'>-                              "specified, defaulting to inet");</div><div class='del'>-                addr-&gt;sa_family = AF_INET;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='add'>+                   "unknown address"</div><div class='add'>+                   " family (%s) specified",</div><div class='add'>+                   address_family);</div><div class='add'>+            addr-&gt;sa_family = AF_UNSPEC;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        switch (addr-&gt;sa_family) {</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "option address-family not "</div><div class='add'>+                     "specified, defaulting to inet");</div><div class='add'>+        addr-&gt;sa_family = AF_INET;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (addr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='del'>-                is_inet_sdp = 1;</div><div class='del'>-                addr-&gt;sa_family = AF_INET;</div><div class='del'>-                /* Fall through */</div><div class='add'>+            is_inet_sdp = 1;</div><div class='add'>+            addr-&gt;sa_family = AF_INET;</div><div class='add'>+            /* Fall through */</div><div class='ctx'>         case AF_INET:</div><div class='ctx'>         case AF_INET6:</div><div class='ctx'>         case AF_UNSPEC:</div><div class='del'>-                ret = af_inet_server_get_local_sockaddr (this, addr, addr_len);</div><div class='del'>-                if (is_inet_sdp &amp;&amp; !ret) {</div><div class='del'>-                        addr-&gt;sa_family = AF_INET_SDP;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = af_inet_server_get_local_sockaddr(this, addr, addr_len);</div><div class='add'>+            if (is_inet_sdp &amp;&amp; !ret) {</div><div class='add'>+                addr-&gt;sa_family = AF_INET_SDP;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                ret = af_unix_server_get_local_sockaddr (this, addr, addr_len);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = af_unix_server_get_local_sockaddr(this, addr, addr_len);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-fill_inet6_inet_identifiers (rpc_transport_t *this, struct sockaddr_storage *addr,</div><div class='del'>-                             int32_t addr_len, char *identifier)</div><div class='add'>+fill_inet6_inet_identifiers(rpc_transport_t *this,</div><div class='add'>+                            struct sockaddr_storage *addr, int32_t addr_len,</div><div class='add'>+                            char *identifier)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0, tmpaddr_len = 0;</div><div class='del'>-        char service[NI_MAXSERV], host[NI_MAXHOST];</div><div class='del'>-        union gf_sock_union sock_union;</div><div class='add'>+    int32_t ret = 0, tmpaddr_len = 0;</div><div class='add'>+    char service[NI_MAXSERV], host[NI_MAXHOST];</div><div class='add'>+    union gf_sock_union sock_union;</div><div class='ctx'> </div><div class='del'>-        memset (&amp;sock_union, 0, sizeof (sock_union));</div><div class='del'>-        sock_union.storage = *addr;</div><div class='del'>-        tmpaddr_len = addr_len;</div><div class='add'>+    memset(&amp;sock_union, 0, sizeof(sock_union));</div><div class='add'>+    sock_union.storage = *addr;</div><div class='add'>+    tmpaddr_len = addr_len;</div><div class='ctx'> </div><div class='del'>-        if (sock_union.sa.sa_family == AF_INET6) {</div><div class='del'>-                int32_t one_to_four, four_to_eight, twelve_to_sixteen;</div><div class='del'>-                int16_t eight_to_ten, ten_to_twelve;</div><div class='add'>+    if (sock_union.sa.sa_family == AF_INET6) {</div><div class='add'>+        int32_t one_to_four, four_to_eight, twelve_to_sixteen;</div><div class='add'>+        int16_t eight_to_ten, ten_to_twelve;</div><div class='ctx'> </div><div class='del'>-                one_to_four = four_to_eight = twelve_to_sixteen = 0;</div><div class='del'>-                eight_to_ten = ten_to_twelve = 0;</div><div class='add'>+        one_to_four = four_to_eight = twelve_to_sixteen = 0;</div><div class='add'>+        eight_to_ten = ten_to_twelve = 0;</div><div class='ctx'> </div><div class='del'>-                one_to_four = sock_union.sin6.sin6_addr.s6_addr32[0];</div><div class='del'>-                four_to_eight = sock_union.sin6.sin6_addr.s6_addr32[1];</div><div class='add'>+        one_to_four = sock_union.sin6.sin6_addr.s6_addr32[0];</div><div class='add'>+        four_to_eight = sock_union.sin6.sin6_addr.s6_addr32[1];</div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-                eight_to_ten = S6_ADDR16(sock_union.sin6.sin6_addr)[4];</div><div class='add'>+        eight_to_ten = S6_ADDR16(sock_union.sin6.sin6_addr)[4];</div><div class='ctx'> #else</div><div class='del'>-                eight_to_ten = sock_union.sin6.sin6_addr.s6_addr16[4];</div><div class='add'>+        eight_to_ten = sock_union.sin6.sin6_addr.s6_addr16[4];</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-                ten_to_twelve = S6_ADDR16(sock_union.sin6.sin6_addr)[5];</div><div class='add'>+        ten_to_twelve = S6_ADDR16(sock_union.sin6.sin6_addr)[5];</div><div class='ctx'> #else</div><div class='del'>-                ten_to_twelve = sock_union.sin6.sin6_addr.s6_addr16[5];</div><div class='add'>+        ten_to_twelve = sock_union.sin6.sin6_addr.s6_addr16[5];</div><div class='ctx'> #endif</div><div class='del'>-                twelve_to_sixteen = sock_union.sin6.sin6_addr.s6_addr32[3];</div><div class='del'>-</div><div class='del'>-                /* ipv4 mapped ipv6 address has</div><div class='del'>-                   bits 0-80: 0</div><div class='del'>-                   bits 80-96: 0xffff</div><div class='del'>-                   bits 96-128: ipv4 address</div><div class='del'>-                */</div><div class='del'>-</div><div class='del'>-                if (one_to_four == 0 &amp;&amp;</div><div class='del'>-                    four_to_eight == 0 &amp;&amp;</div><div class='del'>-                    eight_to_ten == 0 &amp;&amp;</div><div class='del'>-                    ten_to_twelve == -1) {</div><div class='del'>-                        struct sockaddr_in *in_ptr = &amp;sock_union.sin;</div><div class='del'>-                        memset (&amp;sock_union, 0, sizeof (sock_union));</div><div class='del'>-</div><div class='del'>-                        in_ptr-&gt;sin_family = AF_INET;</div><div class='del'>-                        in_ptr-&gt;sin_port = ((struct sockaddr_in6 *)addr)-&gt;sin6_port;</div><div class='del'>-                        in_ptr-&gt;sin_addr.s_addr = twelve_to_sixteen;</div><div class='del'>-                        tmpaddr_len = sizeof (*in_ptr);</div><div class='del'>-                }</div><div class='add'>+        twelve_to_sixteen = sock_union.sin6.sin6_addr.s6_addr32[3];</div><div class='add'>+</div><div class='add'>+        /* ipv4 mapped ipv6 address has</div><div class='add'>+           bits 0-80: 0</div><div class='add'>+           bits 80-96: 0xffff</div><div class='add'>+           bits 96-128: ipv4 address</div><div class='add'>+        */</div><div class='add'>+</div><div class='add'>+        if (one_to_four == 0 &amp;&amp; four_to_eight == 0 &amp;&amp; eight_to_ten == 0 &amp;&amp;</div><div class='add'>+            ten_to_twelve == -1) {</div><div class='add'>+            struct sockaddr_in *in_ptr = &amp;sock_union.sin;</div><div class='add'>+            memset(&amp;sock_union, 0, sizeof(sock_union));</div><div class='add'>+</div><div class='add'>+            in_ptr-&gt;sin_family = AF_INET;</div><div class='add'>+            in_ptr-&gt;sin_port = ((struct sockaddr_in6 *)addr)-&gt;sin6_port;</div><div class='add'>+            in_ptr-&gt;sin_addr.s_addr = twelve_to_sixteen;</div><div class='add'>+            tmpaddr_len = sizeof(*in_ptr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = getnameinfo (&amp;sock_union.sa,</div><div class='del'>-                           tmpaddr_len,</div><div class='del'>-                           host, sizeof (host),</div><div class='del'>-                           service, sizeof (service),</div><div class='del'>-                           NI_NUMERICHOST | NI_NUMERICSERV);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        TRANS_MSG_GET_NAME_INFO_FAILED,</div><div class='del'>-                        "getnameinfo failed");</div><div class='del'>-        }</div><div class='add'>+    ret = getnameinfo(&amp;sock_union.sa, tmpaddr_len, host, sizeof(host), service,</div><div class='add'>+                      sizeof(service), NI_NUMERICHOST | NI_NUMERICSERV);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, TRANS_MSG_GET_NAME_INFO_FAILED,</div><div class='add'>+               "getnameinfo failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sprintf (identifier, "%s:%s", host, service);</div><div class='add'>+    sprintf(identifier, "%s:%s", host, service);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_get_transport_identifiers (rpc_transport_t *this)</div><div class='add'>+gf_rdma_get_transport_identifiers(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        char is_inet_sdp = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char is_inet_sdp = 0;</div><div class='ctx'> </div><div class='del'>-        switch (((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family) {</div><div class='add'>+    switch (((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='del'>-                is_inet_sdp = 1;</div><div class='del'>-                ((struct sockaddr *) &amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family = ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family = AF_INET;</div><div class='del'>-                /* Fall through */</div><div class='add'>+            is_inet_sdp = 1;</div><div class='add'>+            ((struct sockaddr *)&amp;this-&gt;peerinfo.sockaddr)</div><div class='add'>+                -&gt;sa_family = ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)</div><div class='add'>+                                  -&gt;sa_family = AF_INET;</div><div class='add'>+            /* Fall through */</div><div class='ctx'>         case AF_INET:</div><div class='ctx'>         case AF_INET6: {</div><div class='del'>-                ret = fill_inet6_inet_identifiers (this,</div><div class='del'>-                                                   &amp;this-&gt;myinfo.sockaddr,</div><div class='del'>-                                                   this-&gt;myinfo.sockaddr_len,</div><div class='del'>-                                                   this-&gt;myinfo.identifier);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                TRANS_MSG_INET_ERROR,</div><div class='del'>-                                "can't fill inet/inet6 identifier for server");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = fill_inet6_inet_identifiers (this,</div><div class='del'>-                                                   &amp;this-&gt;peerinfo.sockaddr,</div><div class='del'>-                                                   this-&gt;peerinfo.sockaddr_len,</div><div class='del'>-                                                   this-&gt;peerinfo.identifier);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                TRANS_MSG_INET_ERROR,</div><div class='del'>-                                "can't fill inet/inet6 identifier for client");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            ret = fill_inet6_inet_identifiers(this, &amp;this-&gt;myinfo.sockaddr,</div><div class='add'>+                                              this-&gt;myinfo.sockaddr_len,</div><div class='add'>+                                              this-&gt;myinfo.identifier);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_INET_ERROR,</div><div class='add'>+                       "can't fill inet/inet6 identifier for server");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = fill_inet6_inet_identifiers(this, &amp;this-&gt;peerinfo.sockaddr,</div><div class='add'>+                                              this-&gt;peerinfo.sockaddr_len,</div><div class='add'>+                                              this-&gt;peerinfo.identifier);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_INET_ERROR,</div><div class='add'>+                       "can't fill inet/inet6 identifier for client");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (is_inet_sdp) {</div><div class='del'>-                        ((struct sockaddr *) &amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family = ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family = AF_INET_SDP;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            if (is_inet_sdp) {</div><div class='add'>+                ((struct sockaddr *)&amp;this-&gt;peerinfo.sockaddr)</div><div class='add'>+                    -&gt;sa_family = ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)</div><div class='add'>+                                      -&gt;sa_family = AF_INET_SDP;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='del'>-        case AF_UNIX:</div><div class='del'>-        {</div><div class='del'>-                struct sockaddr_un *sunaddr = NULL;</div><div class='add'>+        case AF_UNIX: {</div><div class='add'>+            struct sockaddr_un *sunaddr = NULL;</div><div class='ctx'> </div><div class='del'>-                sunaddr = (struct sockaddr_un *) &amp;this-&gt;myinfo.sockaddr;</div><div class='del'>-                strcpy (this-&gt;myinfo.identifier, sunaddr-&gt;sun_path);</div><div class='add'>+            sunaddr = (struct sockaddr_un *)&amp;this-&gt;myinfo.sockaddr;</div><div class='add'>+            strcpy(this-&gt;myinfo.identifier, sunaddr-&gt;sun_path);</div><div class='ctx'> </div><div class='del'>-                sunaddr = (struct sockaddr_un *) &amp;this-&gt;peerinfo.sockaddr;</div><div class='del'>-                strcpy (this-&gt;peerinfo.identifier, sunaddr-&gt;sun_path);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            sunaddr = (struct sockaddr_un *)&amp;this-&gt;peerinfo.sockaddr;</div><div class='add'>+            strcpy(this-&gt;peerinfo.identifier, sunaddr-&gt;sun_path);</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='del'>-                        "unknown address family (%d)",</div><div class='del'>-                        ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family);</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, TRANS_MSG_UNKNOWN_ADDR_FAMILY,</div><div class='add'>+                   "unknown address family (%d)",</div><div class='add'>+                   ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family);</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c<br/>index f1859a73bdf..92c9ce95929 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/rdma/src/rdma.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-transport/rdma/src/rdma.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/rdma/src/rdma.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/rdma/src/rdma.c</a></div><div class='hunk'>@@ -24,1363 +24,1322 @@</div><div class='ctx'> #define GF_RDMA_LOG_NAME "rpc-transport/rdma"</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_ioq_churn (gf_rdma_peer_t *peer);</div><div class='add'>+__gf_rdma_ioq_churn(gf_rdma_peer_t *peer);</div><div class='ctx'> </div><div class='ctx'> gf_rdma_post_t *</div><div class='del'>-gf_rdma_post_ref (gf_rdma_post_t *post);</div><div class='add'>+gf_rdma_post_ref(gf_rdma_post_t *post);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_rdma_post_unref (gf_rdma_post_t *post);</div><div class='add'>+gf_rdma_post_unref(gf_rdma_post_t *post);</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='del'>-gf_rdma_send_completion_proc (void *data);</div><div class='add'>+gf_rdma_send_completion_proc(void *data);</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='del'>-gf_rdma_recv_completion_proc (void *data);</div><div class='add'>+gf_rdma_recv_completion_proc(void *data);</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_rdma_async_event_thread (void *context);</div><div class='add'>+gf_rdma_async_event_thread(void *context);</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_create_qp (rpc_transport_t *this);</div><div class='add'>+gf_rdma_create_qp(rpc_transport_t *this);</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_teardown (rpc_transport_t *this);</div><div class='add'>+__gf_rdma_teardown(rpc_transport_t *this);</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_teardown (rpc_transport_t *this);</div><div class='add'>+gf_rdma_teardown(rpc_transport_t *this);</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_disconnect (rpc_transport_t *this, gf_boolean_t wait);</div><div class='add'>+gf_rdma_disconnect(rpc_transport_t *this, gf_boolean_t wait);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_rdma_cm_handle_disconnect (rpc_transport_t *this);</div><div class='add'>+gf_rdma_cm_handle_disconnect(rpc_transport_t *this);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_rdma_cm_handle_connect_init (struct rdma_cm_event *event);</div><div class='add'>+gf_rdma_cm_handle_connect_init(struct rdma_cm_event *event);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_rdma_put_post (gf_rdma_queue_t *queue, gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_put_post(gf_rdma_queue_t *queue, gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        post-&gt;ctx.is_request = 0;</div><div class='add'>+    post-&gt;ctx.is_request = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;queue-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (post-&gt;prev) {</div><div class='del'>-                        queue-&gt;active_count--;</div><div class='del'>-                        post-&gt;prev-&gt;next = post-&gt;next;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (post-&gt;next) {</div><div class='del'>-                        post-&gt;next-&gt;prev = post-&gt;prev;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;queue-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (post-&gt;prev) {</div><div class='add'>+            queue-&gt;active_count--;</div><div class='add'>+            post-&gt;prev-&gt;next = post-&gt;next;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                post-&gt;prev = &amp;queue-&gt;passive_posts;</div><div class='del'>-                post-&gt;next = post-&gt;prev-&gt;next;</div><div class='del'>-                post-&gt;prev-&gt;next = post;</div><div class='del'>-                post-&gt;next-&gt;prev = post;</div><div class='del'>-                queue-&gt;passive_count++;</div><div class='add'>+        if (post-&gt;next) {</div><div class='add'>+            post-&gt;next-&gt;prev = post-&gt;prev;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;queue-&gt;lock);</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+        post-&gt;prev = &amp;queue-&gt;passive_posts;</div><div class='add'>+        post-&gt;next = post-&gt;prev-&gt;next;</div><div class='add'>+        post-&gt;prev-&gt;next = post;</div><div class='add'>+        post-&gt;next-&gt;prev = post;</div><div class='add'>+        queue-&gt;passive_count++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;queue-&gt;lock);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static gf_rdma_post_t *</div><div class='del'>-gf_rdma_new_post (rpc_transport_t *this, gf_rdma_device_t *device, int32_t len,</div><div class='del'>-                  gf_rdma_post_type_t type)</div><div class='add'>+gf_rdma_new_post(rpc_transport_t *this, gf_rdma_device_t *device, int32_t len,</div><div class='add'>+                 gf_rdma_post_type_t type)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_post_t *post = NULL;</div><div class='del'>-        int             ret  = -1;</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        post = (gf_rdma_post_t *) GF_CALLOC (1, sizeof (*post),</div><div class='del'>-                                             gf_common_mt_rdma_post_t);</div><div class='del'>-        if (post == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    post = (gf_rdma_post_t *)GF_CALLOC(1, sizeof(*post),</div><div class='add'>+                                       gf_common_mt_rdma_post_t);</div><div class='add'>+    if (post == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;post-&gt;lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;post-&gt;lock, NULL);</div><div class='ctx'> </div><div class='del'>-        post-&gt;buf_size = len;</div><div class='add'>+    post-&gt;buf_size = len;</div><div class='ctx'> </div><div class='del'>-        post-&gt;buf = valloc (len);</div><div class='del'>-        if (!post-&gt;buf) {</div><div class='del'>-                gf_msg_nomem (GF_RDMA_LOG_NAME, GF_LOG_ERROR, len);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    post-&gt;buf = valloc(len);</div><div class='add'>+    if (!post-&gt;buf) {</div><div class='add'>+        gf_msg_nomem(GF_RDMA_LOG_NAME, GF_LOG_ERROR, len);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        post-&gt;mr = ibv_reg_mr (device-&gt;pd,</div><div class='del'>-                               post-&gt;buf,</div><div class='del'>-                               post-&gt;buf_size,</div><div class='del'>-                               IBV_ACCESS_LOCAL_WRITE);</div><div class='del'>-        if (!post-&gt;mr) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_MR_ALOC_FAILED,</div><div class='del'>-                        "memory registration failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    post-&gt;mr = ibv_reg_mr(device-&gt;pd, post-&gt;buf, post-&gt;buf_size,</div><div class='add'>+                          IBV_ACCESS_LOCAL_WRITE);</div><div class='add'>+    if (!post-&gt;mr) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+               "memory registration failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        post-&gt;device = device;</div><div class='del'>-        post-&gt;type = type;</div><div class='add'>+    post-&gt;device = device;</div><div class='add'>+    post-&gt;type = type;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret != 0 &amp;&amp; post) {</div><div class='del'>-                free (post-&gt;buf);</div><div class='add'>+    if (ret != 0 &amp;&amp; post) {</div><div class='add'>+        free(post-&gt;buf);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (post);</div><div class='del'>-                post = NULL;</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(post);</div><div class='add'>+        post = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return post;</div><div class='add'>+    return post;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_rdma_post_t *</div><div class='del'>-gf_rdma_get_post (gf_rdma_queue_t *queue)</div><div class='add'>+gf_rdma_get_post(gf_rdma_queue_t *queue)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_post_t *post = NULL;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;queue-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                post = queue-&gt;passive_posts.next;</div><div class='del'>-                if (post == &amp;queue-&gt;passive_posts)</div><div class='del'>-                        post = NULL;</div><div class='del'>-</div><div class='del'>-                if (post) {</div><div class='del'>-                        if (post-&gt;prev)</div><div class='del'>-                                post-&gt;prev-&gt;next = post-&gt;next;</div><div class='del'>-                        if (post-&gt;next)</div><div class='del'>-                                post-&gt;next-&gt;prev = post-&gt;prev;</div><div class='del'>-                        post-&gt;prev = &amp;queue-&gt;active_posts;</div><div class='del'>-                        post-&gt;next = post-&gt;prev-&gt;next;</div><div class='del'>-                        post-&gt;prev-&gt;next = post;</div><div class='del'>-                        post-&gt;next-&gt;prev = post;</div><div class='del'>-                        post-&gt;reused++;</div><div class='del'>-                        queue-&gt;active_count++;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;queue-&gt;lock);</div><div class='del'>-</div><div class='del'>-        return post;</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;queue-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        post = queue-&gt;passive_posts.next;</div><div class='add'>+        if (post == &amp;queue-&gt;passive_posts)</div><div class='add'>+            post = NULL;</div><div class='add'>+</div><div class='add'>+        if (post) {</div><div class='add'>+            if (post-&gt;prev)</div><div class='add'>+                post-&gt;prev-&gt;next = post-&gt;next;</div><div class='add'>+            if (post-&gt;next)</div><div class='add'>+                post-&gt;next-&gt;prev = post-&gt;prev;</div><div class='add'>+            post-&gt;prev = &amp;queue-&gt;active_posts;</div><div class='add'>+            post-&gt;next = post-&gt;prev-&gt;next;</div><div class='add'>+            post-&gt;prev-&gt;next = post;</div><div class='add'>+            post-&gt;next-&gt;prev = post;</div><div class='add'>+            post-&gt;reused++;</div><div class='add'>+            queue-&gt;active_count++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;queue-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return post;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_rdma_destroy_post (gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_destroy_post(gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        ibv_dereg_mr (post-&gt;mr);</div><div class='del'>-        free (post-&gt;buf);</div><div class='del'>-        GF_FREE (post);</div><div class='add'>+    ibv_dereg_mr(post-&gt;mr);</div><div class='add'>+    free(post-&gt;buf);</div><div class='add'>+    GF_FREE(post);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_quota_get (gf_rdma_peer_t *peer)</div><div class='add'>+__gf_rdma_quota_get(gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret  = -1;</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;connected &amp;&amp; peer-&gt;quota &gt; 0) {</div><div class='del'>-                ret = peer-&gt;quota--;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;connected &amp;&amp; peer-&gt;quota &gt; 0) {</div><div class='add'>+        ret = peer-&gt;quota--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__gf_rdma_ioq_entry_free (gf_rdma_ioq_t *entry)</div><div class='add'>+__gf_rdma_ioq_entry_free(gf_rdma_ioq_t *entry)</div><div class='ctx'> {</div><div class='del'>-        list_del_init (&amp;entry-&gt;list);</div><div class='add'>+    list_del_init(&amp;entry-&gt;list);</div><div class='ctx'> </div><div class='del'>-        if (entry-&gt;iobref) {</div><div class='del'>-                iobref_unref (entry-&gt;iobref);</div><div class='del'>-                entry-&gt;iobref = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (entry-&gt;iobref) {</div><div class='add'>+        iobref_unref(entry-&gt;iobref);</div><div class='add'>+        entry-&gt;iobref = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (entry-&gt;msg.request.rsp_iobref) {</div><div class='del'>-                iobref_unref (entry-&gt;msg.request.rsp_iobref);</div><div class='del'>-                entry-&gt;msg.request.rsp_iobref = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (entry-&gt;msg.request.rsp_iobref) {</div><div class='add'>+        iobref_unref(entry-&gt;msg.request.rsp_iobref);</div><div class='add'>+        entry-&gt;msg.request.rsp_iobref = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mem_put (entry);</div><div class='add'>+    mem_put(entry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__gf_rdma_ioq_flush (gf_rdma_peer_t *peer)</div><div class='add'>+__gf_rdma_ioq_flush(gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_ioq_t *entry = NULL, *dummy = NULL;</div><div class='add'>+    gf_rdma_ioq_t *entry = NULL, *dummy = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (entry, dummy, &amp;peer-&gt;ioq, list) {</div><div class='del'>-                __gf_rdma_ioq_entry_free (entry);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(entry, dummy, &amp;peer-&gt;ioq, list)</div><div class='add'>+    {</div><div class='add'>+        __gf_rdma_ioq_entry_free(entry);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_disconnect (rpc_transport_t *this)</div><div class='add'>+__gf_rdma_disconnect(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;connected) {</div><div class='del'>-                rdma_disconnect (priv-&gt;peer.cm_id);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;connected) {</div><div class='add'>+        rdma_disconnect(priv-&gt;peer.cm_id);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_queue_init (gf_rdma_queue_t *queue)</div><div class='add'>+gf_rdma_queue_init(gf_rdma_queue_t *queue)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_init (&amp;queue-&gt;lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;queue-&gt;lock, NULL);</div><div class='ctx'> </div><div class='del'>-        queue-&gt;active_posts.next = &amp;queue-&gt;active_posts;</div><div class='del'>-        queue-&gt;active_posts.prev = &amp;queue-&gt;active_posts;</div><div class='del'>-        queue-&gt;passive_posts.next = &amp;queue-&gt;passive_posts;</div><div class='del'>-        queue-&gt;passive_posts.prev = &amp;queue-&gt;passive_posts;</div><div class='add'>+    queue-&gt;active_posts.next = &amp;queue-&gt;active_posts;</div><div class='add'>+    queue-&gt;active_posts.prev = &amp;queue-&gt;active_posts;</div><div class='add'>+    queue-&gt;passive_posts.next = &amp;queue-&gt;passive_posts;</div><div class='add'>+    queue-&gt;passive_posts.prev = &amp;queue-&gt;passive_posts;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__gf_rdma_destroy_queue (gf_rdma_post_t *post)</div><div class='add'>+__gf_rdma_destroy_queue(gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_post_t *tmp = NULL;</div><div class='add'>+    gf_rdma_post_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        while (post-&gt;next != post) {</div><div class='del'>-                tmp = post-&gt;next;</div><div class='add'>+    while (post-&gt;next != post) {</div><div class='add'>+        tmp = post-&gt;next;</div><div class='ctx'> </div><div class='del'>-                post-&gt;next = post-&gt;next-&gt;next;</div><div class='del'>-                post-&gt;next-&gt;prev = post;</div><div class='add'>+        post-&gt;next = post-&gt;next-&gt;next;</div><div class='add'>+        post-&gt;next-&gt;prev = post;</div><div class='ctx'> </div><div class='del'>-                gf_rdma_destroy_post (tmp);</div><div class='del'>-        }</div><div class='add'>+        gf_rdma_destroy_post(tmp);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_destroy_queue (gf_rdma_queue_t *queue)</div><div class='add'>+gf_rdma_destroy_queue(gf_rdma_queue_t *queue)</div><div class='ctx'> {</div><div class='del'>-        if (queue == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (queue == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;queue-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (queue-&gt;passive_count &gt; 0) {</div><div class='del'>-                        __gf_rdma_destroy_queue (&amp;queue-&gt;passive_posts);</div><div class='del'>-                        queue-&gt;passive_count = 0;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;queue-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (queue-&gt;passive_count &gt; 0) {</div><div class='add'>+            __gf_rdma_destroy_queue(&amp;queue-&gt;passive_posts);</div><div class='add'>+            queue-&gt;passive_count = 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (queue-&gt;active_count &gt; 0) {</div><div class='del'>-                        __gf_rdma_destroy_queue (&amp;queue-&gt;active_posts);</div><div class='del'>-                        queue-&gt;active_count = 0;</div><div class='del'>-                }</div><div class='add'>+        if (queue-&gt;active_count &gt; 0) {</div><div class='add'>+            __gf_rdma_destroy_queue(&amp;queue-&gt;active_posts);</div><div class='add'>+            queue-&gt;active_count = 0;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;queue-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;queue-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_destroy_posts (rpc_transport_t *this)</div><div class='add'>+gf_rdma_destroy_posts(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_device_t  *device = NULL;</div><div class='del'>-        gf_rdma_private_t *priv   = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (this == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (this == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='ctx'> </div><div class='del'>-        gf_rdma_destroy_queue (&amp;device-&gt;sendq);</div><div class='del'>-        gf_rdma_destroy_queue (&amp;device-&gt;recvq);</div><div class='add'>+    gf_rdma_destroy_queue(&amp;device-&gt;sendq);</div><div class='add'>+    gf_rdma_destroy_queue(&amp;device-&gt;recvq);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_create_posts (rpc_transport_t *this, int32_t count, int32_t size,</div><div class='del'>-                        gf_rdma_queue_t *q, gf_rdma_post_type_t type)</div><div class='add'>+__gf_rdma_create_posts(rpc_transport_t *this, int32_t count, int32_t size,</div><div class='add'>+                       gf_rdma_queue_t *q, gf_rdma_post_type_t type)</div><div class='ctx'> {</div><div class='del'>-        int32_t            i      = 0;</div><div class='del'>-        int32_t            ret    = 0;</div><div class='del'>-        gf_rdma_private_t *priv   = NULL;</div><div class='del'>-        gf_rdma_device_t  *device = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        for (i = 0 ; i &lt; count ; i++) {</div><div class='del'>-                gf_rdma_post_t *post = NULL;</div><div class='del'>-</div><div class='del'>-                post = gf_rdma_new_post (this, device, size + 2048, type);</div><div class='del'>-                if (!post) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_POST_CREATION_FAILED,</div><div class='del'>-                                "post creation failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='ctx'> </div><div class='del'>-                gf_rdma_put_post (q, post);</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        gf_rdma_post_t *post = NULL;</div><div class='add'>+</div><div class='add'>+        post = gf_rdma_new_post(this, device, size + 2048, type);</div><div class='add'>+        if (!post) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_POST_CREATION_FAILED,</div><div class='add'>+                   "post creation failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+        gf_rdma_put_post(q, post);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_post_recv (struct ibv_srq *srq,</div><div class='del'>-                   gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_post_recv(struct ibv_srq *srq, gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        struct ibv_sge list = {</div><div class='del'>-                .addr   = (unsigned long) post-&gt;buf,</div><div class='del'>-                .length = post-&gt;buf_size,</div><div class='del'>-                .lkey   = post-&gt;mr-&gt;lkey</div><div class='del'>-        };</div><div class='add'>+    struct ibv_sge list = {.addr = (unsigned long)post-&gt;buf,</div><div class='add'>+                           .length = post-&gt;buf_size,</div><div class='add'>+                           .lkey = post-&gt;mr-&gt;lkey};</div><div class='ctx'> </div><div class='del'>-        struct ibv_recv_wr wr = {</div><div class='del'>-                .wr_id  = (unsigned long) post,</div><div class='del'>-                .sg_list = &amp;list,</div><div class='del'>-                .num_sge = 1,</div><div class='del'>-        }, *bad_wr;</div><div class='add'>+    struct ibv_recv_wr wr =</div><div class='add'>+                           {</div><div class='add'>+                               .wr_id = (unsigned long)post,</div><div class='add'>+                               .sg_list = &amp;list,</div><div class='add'>+                               .num_sge = 1,</div><div class='add'>+                           },</div><div class='add'>+                       *bad_wr;</div><div class='ctx'> </div><div class='del'>-        gf_rdma_post_ref (post);</div><div class='add'>+    gf_rdma_post_ref(post);</div><div class='ctx'> </div><div class='del'>-        return ibv_post_srq_recv (srq, &amp;wr, &amp;bad_wr);</div><div class='add'>+    return ibv_post_srq_recv(srq, &amp;wr, &amp;bad_wr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_rdma_deregister_iobuf_pool (gf_rdma_device_t *device)</div><div class='add'>+gf_rdma_deregister_iobuf_pool(gf_rdma_device_t *device)</div><div class='ctx'> {</div><div class='add'>+    gf_rdma_arena_mr *arena_mr = NULL;</div><div class='add'>+    gf_rdma_arena_mr *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_rdma_arena_mr   *arena_mr  = NULL;</div><div class='del'>-        gf_rdma_arena_mr   *tmp       = NULL;</div><div class='del'>-</div><div class='del'>-        while (device) {</div><div class='del'>-                pthread_mutex_lock (&amp;device-&gt;all_mr_lock);</div><div class='add'>+    while (device) {</div><div class='add'>+        pthread_mutex_lock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+        {</div><div class='add'>+            if (!list_empty(&amp;device-&gt;all_mr)) {</div><div class='add'>+                list_for_each_entry_safe(arena_mr, tmp, &amp;device-&gt;all_mr, list)</div><div class='ctx'>                 {</div><div class='del'>-                        if (!list_empty(&amp;device-&gt;all_mr)) {</div><div class='del'>-                                list_for_each_entry_safe (arena_mr, tmp,</div><div class='del'>-                                                        &amp;device-&gt;all_mr, list) {</div><div class='del'>-                                        if (ibv_dereg_mr(arena_mr-&gt;mr)) {</div><div class='del'>-                                                gf_msg ("rdma", GF_LOG_WARNING, 0,</div><div class='del'>-                                                        RDMA_MSG_DEREGISTER_ARENA_FAILED,</div><div class='del'>-                                                        "deallocation of memory region "</div><div class='del'>-                                                        "failed");</div><div class='del'>-                                                pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                                                return;</div><div class='del'>-                                        }</div><div class='del'>-                                        list_del(&amp;arena_mr-&gt;list);</div><div class='del'>-                                        GF_FREE(arena_mr);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                    if (ibv_dereg_mr(arena_mr-&gt;mr)) {</div><div class='add'>+                        gf_msg("rdma", GF_LOG_WARNING, 0,</div><div class='add'>+                               RDMA_MSG_DEREGISTER_ARENA_FAILED,</div><div class='add'>+                               "deallocation of memory region "</div><div class='add'>+                               "failed");</div><div class='add'>+                        pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+                        return;</div><div class='add'>+                    }</div><div class='add'>+                    list_del(&amp;arena_mr-&gt;list);</div><div class='add'>+                    GF_FREE(arena_mr);</div><div class='ctx'>                 }</div><div class='del'>-                pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-</div><div class='del'>-                device = device-&gt;next;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+</div><div class='add'>+        device = device-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_rdma_deregister_arena (struct list_head **mr_list,</div><div class='del'>-                          struct iobuf_arena *iobuf_arena)</div><div class='add'>+gf_rdma_deregister_arena(struct list_head **mr_list,</div><div class='add'>+                         struct iobuf_arena *iobuf_arena)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_arena_mr *tmp     = NULL;</div><div class='del'>-        gf_rdma_arena_mr *dummy   = NULL;</div><div class='del'>-        gf_rdma_device_t *device  = NULL;</div><div class='del'>-        int               count   = 0, i = 0;</div><div class='del'>-</div><div class='del'>-        count = iobuf_arena-&gt;iobuf_pool-&gt;rdma_device_count;</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                device = iobuf_arena-&gt;iobuf_pool-&gt;device[i];</div><div class='del'>-                pthread_mutex_lock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                {</div><div class='del'>-                        list_for_each_entry_safe (tmp, dummy, mr_list[i], list) {</div><div class='del'>-                                if (tmp-&gt;iobuf_arena == iobuf_arena) {</div><div class='del'>-                                        if (ibv_dereg_mr(tmp-&gt;mr)) {</div><div class='del'>-                                                gf_msg ("rdma", GF_LOG_WARNING, 0,</div><div class='del'>-                                                        RDMA_MSG_DEREGISTER_ARENA_FAILED,</div><div class='del'>-                                                        "deallocation of memory region "</div><div class='del'>-                                                        "failed");</div><div class='del'>-                                                        pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                                                return -1;</div><div class='del'>-                                        }</div><div class='del'>-                                        list_del(&amp;tmp-&gt;list);</div><div class='del'>-                                        GF_FREE(tmp);</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    gf_rdma_arena_mr *tmp = NULL;</div><div class='add'>+    gf_rdma_arena_mr *dummy = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    int count = 0, i = 0;</div><div class='add'>+</div><div class='add'>+    count = iobuf_arena-&gt;iobuf_pool-&gt;rdma_device_count;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        device = iobuf_arena-&gt;iobuf_pool-&gt;device[i];</div><div class='add'>+        pthread_mutex_lock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+        {</div><div class='add'>+            list_for_each_entry_safe(tmp, dummy, mr_list[i], list)</div><div class='add'>+            {</div><div class='add'>+                if (tmp-&gt;iobuf_arena == iobuf_arena) {</div><div class='add'>+                    if (ibv_dereg_mr(tmp-&gt;mr)) {</div><div class='add'>+                        gf_msg("rdma", GF_LOG_WARNING, 0,</div><div class='add'>+                               RDMA_MSG_DEREGISTER_ARENA_FAILED,</div><div class='add'>+                               "deallocation of memory region "</div><div class='add'>+                               "failed");</div><div class='add'>+                        pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+                        return -1;</div><div class='add'>+                    }</div><div class='add'>+                    list_del(&amp;tmp-&gt;list);</div><div class='add'>+                    GF_FREE(tmp);</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_rdma_register_arena (void **arg1, void *arg2)</div><div class='add'>+gf_rdma_register_arena(void **arg1, void *arg2)</div><div class='ctx'> {</div><div class='del'>-        struct ibv_mr       *mr          = NULL;</div><div class='del'>-        gf_rdma_arena_mr    *new         = NULL;</div><div class='del'>-        struct iobuf_pool   *iobuf_pool  = NULL;</div><div class='del'>-        gf_rdma_device_t    **device     = (gf_rdma_device_t **)arg1;</div><div class='del'>-        struct iobuf_arena  *iobuf_arena = arg2;</div><div class='del'>-        int                  count       = 0, i = 0;</div><div class='del'>-</div><div class='del'>-        iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='del'>-        count = iobuf_pool-&gt;rdma_device_count;</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr),</div><div class='del'>-                                gf_common_mt_rdma_arena_mr);</div><div class='del'>-                if (new == NULL) {</div><div class='del'>-                        gf_msg ("rdma", GF_LOG_INFO, ENOMEM,</div><div class='del'>-                                RDMA_MSG_MR_ALOC_FAILED, "Out of "</div><div class='del'>-                                "memory: registering pre allocated buffer "</div><div class='del'>-                                "with rdma device failed.");</div><div class='del'>-                      return -1;</div><div class='del'>-                }</div><div class='del'>-                INIT_LIST_HEAD (&amp;new-&gt;list);</div><div class='del'>-                new-&gt;iobuf_arena = iobuf_arena;</div><div class='del'>-</div><div class='del'>-                mr = ibv_reg_mr(device[i]-&gt;pd, iobuf_arena-&gt;mem_base,</div><div class='del'>-                                         iobuf_arena-&gt;arena_size,</div><div class='del'>-                                         IBV_ACCESS_REMOTE_READ |</div><div class='del'>-                                         IBV_ACCESS_LOCAL_WRITE |</div><div class='del'>-                                         IBV_ACCESS_REMOTE_WRITE</div><div class='del'>-                                         );</div><div class='del'>-                if (!mr)</div><div class='del'>-                        gf_msg ("rdma", GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_MR_ALOC_FAILED, "allocation of mr "</div><div class='del'>-                                "failed");</div><div class='del'>-</div><div class='del'>-                new-&gt;mr = mr;</div><div class='del'>-                pthread_mutex_lock (&amp;device[i]-&gt;all_mr_lock);</div><div class='del'>-                {</div><div class='del'>-                        list_add (&amp;new-&gt;list, &amp;device[i]-&gt;all_mr);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;device[i]-&gt;all_mr_lock);</div><div class='del'>-                new = NULL;</div><div class='add'>+    struct ibv_mr *mr = NULL;</div><div class='add'>+    gf_rdma_arena_mr *new = NULL;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='add'>+    gf_rdma_device_t **device = (gf_rdma_device_t **)arg1;</div><div class='add'>+    struct iobuf_arena *iobuf_arena = arg2;</div><div class='add'>+    int count = 0, i = 0;</div><div class='add'>+</div><div class='add'>+    iobuf_pool = iobuf_arena-&gt;iobuf_pool;</div><div class='add'>+    count = iobuf_pool-&gt;rdma_device_count;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr),</div><div class='add'>+                        gf_common_mt_rdma_arena_mr);</div><div class='add'>+        if (new == NULL) {</div><div class='add'>+            gf_msg("rdma", GF_LOG_INFO, ENOMEM, RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                   "Out of "</div><div class='add'>+                   "memory: registering pre allocated buffer "</div><div class='add'>+                   "with rdma device failed.");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        INIT_LIST_HEAD(&amp;new-&gt;list);</div><div class='add'>+        new-&gt;iobuf_arena = iobuf_arena;</div><div class='add'>+</div><div class='add'>+        mr = ibv_reg_mr(device[i]-&gt;pd, iobuf_arena-&gt;mem_base,</div><div class='add'>+                        iobuf_arena-&gt;arena_size,</div><div class='add'>+                        IBV_ACCESS_REMOTE_READ | IBV_ACCESS_LOCAL_WRITE |</div><div class='add'>+                            IBV_ACCESS_REMOTE_WRITE);</div><div class='add'>+        if (!mr)</div><div class='add'>+            gf_msg("rdma", GF_LOG_WARNING, 0, RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                   "allocation of mr "</div><div class='add'>+                   "failed");</div><div class='add'>+</div><div class='add'>+        new-&gt;mr = mr;</div><div class='add'>+        pthread_mutex_lock(&amp;device[i]-&gt;all_mr_lock);</div><div class='add'>+        {</div><div class='add'>+            list_add(&amp;new-&gt;list, &amp;device[i]-&gt;all_mr);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;device[i]-&gt;all_mr_lock);</div><div class='add'>+        new = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_rdma_register_iobuf_pool (gf_rdma_device_t *device,</div><div class='del'>-                        struct iobuf_pool *iobuf_pool)</div><div class='add'>+gf_rdma_register_iobuf_pool(gf_rdma_device_t *device,</div><div class='add'>+                            struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf_arena  *tmp        = NULL;</div><div class='del'>-        struct iobuf_arena  *dummy      = NULL;</div><div class='del'>-        struct ibv_mr       *mr         = NULL;</div><div class='del'>-        gf_rdma_arena_mr    *new        = NULL;</div><div class='del'>-</div><div class='del'>-        if (!list_empty(&amp;iobuf_pool-&gt;all_arenas)) {</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (tmp, dummy, &amp;iobuf_pool-&gt;all_arenas,</div><div class='del'>-                                          all_list) {</div><div class='del'>-                        new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr),</div><div class='del'>-                                        gf_common_mt_rdma_arena_mr);</div><div class='del'>-                        if (new == NULL) {</div><div class='del'>-                                gf_msg ("rdma", GF_LOG_INFO, ENOMEM,</div><div class='del'>-                                        RDMA_MSG_MR_ALOC_FAILED, "Out of "</div><div class='del'>-                                        "memory: registering pre allocated "</div><div class='del'>-                                        "buffer with rdma device failed.");</div><div class='del'>-                              return;</div><div class='del'>-                        }</div><div class='del'>-                        INIT_LIST_HEAD (&amp;new-&gt;list);</div><div class='del'>-                        new-&gt;iobuf_arena = tmp;</div><div class='del'>-</div><div class='del'>-                        mr = ibv_reg_mr(device-&gt;pd, tmp-&gt;mem_base,</div><div class='del'>-                                        tmp-&gt;arena_size,</div><div class='del'>-                                        IBV_ACCESS_REMOTE_READ |</div><div class='del'>-                                        IBV_ACCESS_LOCAL_WRITE |</div><div class='del'>-                                        IBV_ACCESS_REMOTE_WRITE);</div><div class='del'>-                        if (!mr) {</div><div class='del'>-                                gf_msg ("rdma", GF_LOG_WARNING, 0,</div><div class='del'>-                                        RDMA_MSG_MR_ALOC_FAILED, "failed"</div><div class='del'>-                                        " to pre register buffers with rdma "</div><div class='del'>-                                        "devices.");</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                        new-&gt;mr = mr;</div><div class='del'>-                        pthread_mutex_lock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                        {</div><div class='del'>-                                list_add (&amp;new-&gt;list, &amp;device-&gt;all_mr);</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='add'>+    struct iobuf_arena *tmp = NULL;</div><div class='add'>+    struct iobuf_arena *dummy = NULL;</div><div class='add'>+    struct ibv_mr *mr = NULL;</div><div class='add'>+    gf_rdma_arena_mr *new = NULL;</div><div class='ctx'> </div><div class='del'>-                        new = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-       return;</div><div class='add'>+    if (!list_empty(&amp;iobuf_pool-&gt;all_arenas)) {</div><div class='add'>+        list_for_each_entry_safe(tmp, dummy, &amp;iobuf_pool-&gt;all_arenas, all_list)</div><div class='add'>+        {</div><div class='add'>+            new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr),</div><div class='add'>+                            gf_common_mt_rdma_arena_mr);</div><div class='add'>+            if (new == NULL) {</div><div class='add'>+                gf_msg("rdma", GF_LOG_INFO, ENOMEM, RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                       "Out of "</div><div class='add'>+                       "memory: registering pre allocated "</div><div class='add'>+                       "buffer with rdma device failed.");</div><div class='add'>+                return;</div><div class='add'>+            }</div><div class='add'>+            INIT_LIST_HEAD(&amp;new-&gt;list);</div><div class='add'>+            new-&gt;iobuf_arena = tmp;</div><div class='add'>+</div><div class='add'>+            mr = ibv_reg_mr(device-&gt;pd, tmp-&gt;mem_base, tmp-&gt;arena_size,</div><div class='add'>+                            IBV_ACCESS_REMOTE_READ | IBV_ACCESS_LOCAL_WRITE |</div><div class='add'>+                                IBV_ACCESS_REMOTE_WRITE);</div><div class='add'>+            if (!mr) {</div><div class='add'>+                gf_msg("rdma", GF_LOG_WARNING, 0, RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                       "failed"</div><div class='add'>+                       " to pre register buffers with rdma "</div><div class='add'>+                       "devices.");</div><div class='add'>+            }</div><div class='add'>+            new-&gt;mr = mr;</div><div class='add'>+            pthread_mutex_lock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+            {</div><div class='add'>+                list_add(&amp;new-&gt;list, &amp;device-&gt;all_mr);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+</div><div class='add'>+            new = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_rdma_register_iobuf_pool_with_device (gf_rdma_device_t *device,</div><div class='del'>-                                         struct iobuf_pool *iobuf_pool)</div><div class='add'>+gf_rdma_register_iobuf_pool_with_device(gf_rdma_device_t *device,</div><div class='add'>+                                        struct iobuf_pool *iobuf_pool)</div><div class='ctx'> {</div><div class='del'>-        while (device) {</div><div class='del'>-                gf_rdma_register_iobuf_pool (device, iobuf_pool);</div><div class='del'>-                device = device-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    while (device) {</div><div class='add'>+        gf_rdma_register_iobuf_pool(device, iobuf_pool);</div><div class='add'>+        device = device-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct ibv_mr*</div><div class='add'>+static struct ibv_mr *</div><div class='ctx'> gf_rdma_get_pre_registred_mr(rpc_transport_t *this, void *ptr, int size)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_arena_mr   *tmp        = NULL;</div><div class='del'>-        gf_rdma_arena_mr   *dummy      = NULL;</div><div class='del'>-        gf_rdma_private_t  *priv       = NULL;</div><div class='del'>-        gf_rdma_device_t   *device     = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-        {</div><div class='del'>-                if (!list_empty(&amp;device-&gt;all_mr)) {</div><div class='del'>-                        list_for_each_entry_safe (tmp, dummy, &amp;device-&gt;all_mr, list) {</div><div class='del'>-                                if (tmp-&gt;iobuf_arena-&gt;mem_base &lt;= ptr &amp;&amp;</div><div class='del'>-                                    ptr &lt; tmp-&gt;iobuf_arena-&gt;mem_base +</div><div class='del'>-                                    tmp-&gt;iobuf_arena-&gt;arena_size) {</div><div class='del'>-                                        pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                                        return tmp-&gt;mr;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    gf_rdma_arena_mr *tmp = NULL;</div><div class='add'>+    gf_rdma_arena_mr *dummy = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+    {</div><div class='add'>+        if (!list_empty(&amp;device-&gt;all_mr)) {</div><div class='add'>+            list_for_each_entry_safe(tmp, dummy, &amp;device-&gt;all_mr, list)</div><div class='add'>+            {</div><div class='add'>+                if (tmp-&gt;iobuf_arena-&gt;mem_base &lt;= ptr &amp;&amp;</div><div class='add'>+                    ptr &lt; tmp-&gt;iobuf_arena-&gt;mem_base +</div><div class='add'>+                              tmp-&gt;iobuf_arena-&gt;arena_size) {</div><div class='add'>+                    pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+                    return tmp-&gt;mr;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_create_posts (rpc_transport_t *this)</div><div class='add'>+gf_rdma_create_posts(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t            i       = 0, ret = 0;</div><div class='del'>-        gf_rdma_post_t    *post    = NULL;</div><div class='del'>-        gf_rdma_private_t *priv    = NULL;</div><div class='del'>-        gf_rdma_options_t *options = NULL;</div><div class='del'>-        gf_rdma_device_t  *device  = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        ret =  __gf_rdma_create_posts (this, options-&gt;send_count,</div><div class='del'>-                                       options-&gt;send_size,</div><div class='del'>-                                       &amp;device-&gt;sendq, GF_RDMA_SEND_POST);</div><div class='del'>-        if (!ret)</div><div class='del'>-                ret =  __gf_rdma_create_posts (this, options-&gt;recv_count,</div><div class='del'>-                                               options-&gt;recv_size,</div><div class='del'>-                                               &amp;device-&gt;recvq,</div><div class='del'>-                                               GF_RDMA_RECV_POST);</div><div class='del'>-</div><div class='del'>-        if (!ret) {</div><div class='del'>-                for (i = 0 ; i &lt; options-&gt;recv_count ; i++) {</div><div class='del'>-                        post = gf_rdma_get_post (&amp;device-&gt;recvq);</div><div class='del'>-                        if (gf_rdma_post_recv (device-&gt;srq, post) != 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int32_t i = 0, ret = 0;</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+</div><div class='add'>+    ret = __gf_rdma_create_posts(this, options-&gt;send_count, options-&gt;send_size,</div><div class='add'>+                                 &amp;device-&gt;sendq, GF_RDMA_SEND_POST);</div><div class='add'>+    if (!ret)</div><div class='add'>+        ret = __gf_rdma_create_posts(this, options-&gt;recv_count,</div><div class='add'>+                                     options-&gt;recv_size, &amp;device-&gt;recvq,</div><div class='add'>+                                     GF_RDMA_RECV_POST);</div><div class='add'>+</div><div class='add'>+    if (!ret) {</div><div class='add'>+        for (i = 0; i &lt; options-&gt;recv_count; i++) {</div><div class='add'>+            post = gf_rdma_get_post(&amp;device-&gt;recvq);</div><div class='add'>+            if (gf_rdma_post_recv(device-&gt;srq, post) != 0) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_rdma_destroy_posts (this);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_rdma_destroy_posts(this);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_destroy_cq (rpc_transport_t *this)</div><div class='add'>+gf_rdma_destroy_cq(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv   = NULL;</div><div class='del'>-        gf_rdma_device_t  *device = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='ctx'> </div><div class='del'>-        if (device-&gt;recv_cq)</div><div class='del'>-                ibv_destroy_cq (device-&gt;recv_cq);</div><div class='del'>-        device-&gt;recv_cq = NULL;</div><div class='add'>+    if (device-&gt;recv_cq)</div><div class='add'>+        ibv_destroy_cq(device-&gt;recv_cq);</div><div class='add'>+    device-&gt;recv_cq = NULL;</div><div class='ctx'> </div><div class='del'>-        if (device-&gt;send_cq)</div><div class='del'>-                ibv_destroy_cq (device-&gt;send_cq);</div><div class='del'>-        device-&gt;send_cq = NULL;</div><div class='add'>+    if (device-&gt;send_cq)</div><div class='add'>+        ibv_destroy_cq(device-&gt;send_cq);</div><div class='add'>+    device-&gt;send_cq = NULL;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_create_cq (rpc_transport_t *this)</div><div class='add'>+gf_rdma_create_cq(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t      *priv        = NULL;</div><div class='del'>-        gf_rdma_options_t      *options     = NULL;</div><div class='del'>-        gf_rdma_device_t       *device      = NULL;</div><div class='del'>-        uint64_t                send_cqe    = 0;</div><div class='del'>-        int32_t                 ret         = 0;</div><div class='del'>-        struct ibv_device_attr  device_attr = {{0}, };</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        device-&gt;recv_cq = ibv_create_cq (priv-&gt;device-&gt;context,</div><div class='del'>-                                         options-&gt;recv_count * 2,</div><div class='del'>-                                         device,</div><div class='del'>-                                         device-&gt;recv_chan,</div><div class='del'>-                                         0);</div><div class='del'>-        if (!device-&gt;recv_cq) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        RDMA_MSG_CQ_CREATION_FAILED, "creation of CQ for "</div><div class='del'>-                        "device %s failed", device-&gt;device_name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ibv_req_notify_cq (device-&gt;recv_cq, 0)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        RDMA_MSG_REQ_NOTIFY_CQ_REVQ_FAILED, "ibv_req_notify_"</div><div class='del'>-                        "cq on recv CQ of device %s failed",</div><div class='del'>-                        device-&gt;device_name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        do {</div><div class='del'>-                ret = ibv_query_device (priv-&gt;device-&gt;context, &amp;device_attr);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_QUERY_DEVICE_FAILED, "ibv_query_"</div><div class='del'>-                                "device on %s returned %d (%s)",</div><div class='del'>-                                priv-&gt;device-&gt;device_name, ret,</div><div class='del'>-                                (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                send_cqe = (uint64_t)options-&gt;send_count * 128;</div><div class='del'>-                send_cqe = (send_cqe &gt; device_attr.max_cqe)</div><div class='del'>-                        ? device_attr.max_cqe : send_cqe;</div><div class='del'>-</div><div class='del'>-                /* TODO: make send_cq size dynamically adaptive */</div><div class='del'>-                device-&gt;send_cq = ibv_create_cq (priv-&gt;device-&gt;context,</div><div class='del'>-                                                 send_cqe, device,</div><div class='del'>-                                                 device-&gt;send_chan, 0);</div><div class='del'>-                if (!device-&gt;send_cq) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_CQ_CREATION_FAILED,</div><div class='del'>-                                "creation of send_cq "</div><div class='del'>-                                "for device %s failed", device-&gt;device_name);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ibv_req_notify_cq (device-&gt;send_cq, 0)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_REQ_NOTIFY_CQ_SENDQ_FAILED,</div><div class='del'>-                                "ibv_req_notify_cq on send_cq for device %s"</div><div class='del'>-                                " failed",  device-&gt;device_name);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } while (0);</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    uint64_t send_cqe = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct ibv_device_attr device_attr = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+</div><div class='add'>+    device-&gt;recv_cq = ibv_create_cq(priv-&gt;device-&gt;context,</div><div class='add'>+                                    options-&gt;recv_count * 2, device,</div><div class='add'>+                                    device-&gt;recv_chan, 0);</div><div class='add'>+    if (!device-&gt;recv_cq) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_CQ_CREATION_FAILED,</div><div class='add'>+               "creation of CQ for "</div><div class='add'>+               "device %s failed",</div><div class='add'>+               device-&gt;device_name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ibv_req_notify_cq(device-&gt;recv_cq, 0)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_REQ_NOTIFY_CQ_REVQ_FAILED,</div><div class='add'>+               "ibv_req_notify_"</div><div class='add'>+               "cq on recv CQ of device %s failed",</div><div class='add'>+               device-&gt;device_name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        ret = ibv_query_device(priv-&gt;device-&gt;context, &amp;device_attr);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_QUERY_DEVICE_FAILED,</div><div class='add'>+                   "ibv_query_"</div><div class='add'>+                   "device on %s returned %d (%s)",</div><div class='add'>+                   priv-&gt;device-&gt;device_name, ret,</div><div class='add'>+                   (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        send_cqe = (uint64_t)options-&gt;send_count * 128;</div><div class='add'>+        send_cqe = (send_cqe &gt; device_attr.max_cqe) ? device_attr.max_cqe</div><div class='add'>+                                                    : send_cqe;</div><div class='add'>+</div><div class='add'>+        /* TODO: make send_cq size dynamically adaptive */</div><div class='add'>+        device-&gt;send_cq = ibv_create_cq(priv-&gt;device-&gt;context, send_cqe, device,</div><div class='add'>+                                        device-&gt;send_chan, 0);</div><div class='add'>+        if (!device-&gt;send_cq) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_CQ_CREATION_FAILED,</div><div class='add'>+                   "creation of send_cq "</div><div class='add'>+                   "for device %s failed",</div><div class='add'>+                   device-&gt;device_name);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (ibv_req_notify_cq(device-&gt;send_cq, 0)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   RDMA_MSG_REQ_NOTIFY_CQ_SENDQ_FAILED,</div><div class='add'>+                   "ibv_req_notify_cq on send_cq for device %s"</div><div class='add'>+                   " failed",</div><div class='add'>+                   device-&gt;device_name);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } while (0);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                gf_rdma_destroy_cq (this);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        gf_rdma_destroy_cq(this);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_rdma_device_t *</div><div class='del'>-gf_rdma_get_device (rpc_transport_t *this, struct ibv_context *ibctx,</div><div class='del'>-                    char *device_name)</div><div class='add'>+gf_rdma_get_device(rpc_transport_t *this, struct ibv_context *ibctx,</div><div class='add'>+                   char *device_name)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t   *ctx      = NULL;</div><div class='del'>-        gf_rdma_private_t *priv     = NULL;</div><div class='del'>-        gf_rdma_options_t *options  = NULL;</div><div class='del'>-        int32_t            ret      = 0;</div><div class='del'>-        int32_t            i        = 0;</div><div class='del'>-        gf_rdma_device_t  *trav     = NULL, *device = NULL;</div><div class='del'>-        gf_rdma_ctx_t     *rdma_ctx = NULL;</div><div class='del'>-        struct iobuf_pool *iobuf_pool = NULL;</div><div class='del'>-</div><div class='del'>-        priv        = this-&gt;private;</div><div class='del'>-        options     = &amp;priv-&gt;options;</div><div class='del'>-        ctx         = this-&gt;ctx;</div><div class='del'>-        rdma_ctx    = ctx-&gt;ib;</div><div class='del'>-        iobuf_pool = ctx-&gt;iobuf_pool;</div><div class='del'>-</div><div class='del'>-        trav = rdma_ctx-&gt;device;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                if (!strcmp (trav-&gt;device_name, device_name))</div><div class='del'>-                        break;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!trav) {</div><div class='del'>-                trav = GF_CALLOC (1, sizeof (*trav),</div><div class='del'>-                                  gf_common_mt_rdma_device_t);</div><div class='del'>-                if (trav == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;device = trav;</div><div class='del'>-                trav-&gt;context = ibctx;</div><div class='del'>-</div><div class='del'>-                trav-&gt;next = rdma_ctx-&gt;device;</div><div class='del'>-                rdma_ctx-&gt;device = trav;</div><div class='del'>-</div><div class='del'>-                iobuf_pool-&gt;device[iobuf_pool-&gt;rdma_device_count] = trav;</div><div class='del'>-                iobuf_pool-&gt;mr_list[iobuf_pool-&gt;rdma_device_count++] = &amp;trav-&gt;all_mr;</div><div class='del'>-                trav-&gt;request_ctx_pool</div><div class='del'>-                        = mem_pool_new (gf_rdma_request_context_t,</div><div class='del'>-                                        GF_RDMA_POOL_SIZE);</div><div class='del'>-                if (trav-&gt;request_ctx_pool == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    gf_rdma_device_t *trav = NULL, *device = NULL;</div><div class='add'>+    gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='ctx'> </div><div class='del'>-                trav-&gt;ioq_pool</div><div class='del'>-                        = mem_pool_new (gf_rdma_ioq_t, GF_RDMA_POOL_SIZE);</div><div class='del'>-                if (trav-&gt;ioq_pool == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                trav-&gt;reply_info_pool = mem_pool_new (gf_rdma_reply_info_t,</div><div class='del'>-                                                      GF_RDMA_POOL_SIZE);</div><div class='del'>-                if (trav-&gt;reply_info_pool == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    rdma_ctx = ctx-&gt;ib;</div><div class='add'>+    iobuf_pool = ctx-&gt;iobuf_pool;</div><div class='ctx'> </div><div class='del'>-                trav-&gt;device_name = gf_strdup (device_name);</div><div class='add'>+    trav = rdma_ctx-&gt;device;</div><div class='ctx'> </div><div class='del'>-                trav-&gt;send_chan = ibv_create_comp_channel (trav-&gt;context);</div><div class='del'>-                if (!trav-&gt;send_chan) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_SEND_COMP_CHAN_FAILED, "could not "</div><div class='del'>-                                "create send completion channel for "</div><div class='del'>-                                "device (%s)", device_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                trav-&gt;recv_chan = ibv_create_comp_channel (trav-&gt;context);</div><div class='del'>-                if (!trav-&gt;recv_chan) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_RECV_COMP_CHAN_FAILED, "could not "</div><div class='del'>-                                "create recv completion channel for "</div><div class='del'>-                                "device (%s)", device_name);</div><div class='del'>-</div><div class='del'>-                        /* TODO: cleanup current mess */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (gf_rdma_create_cq (this) &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_CQ_CREATION_FAILED,</div><div class='del'>-                                "could not create CQ for device (%s)",</div><div class='del'>-                                device_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* protection domain */</div><div class='del'>-                trav-&gt;pd = ibv_alloc_pd (trav-&gt;context);</div><div class='del'>-</div><div class='del'>-                if (!trav-&gt;pd) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_ALOC_PROT_DOM_FAILED, "could not "</div><div class='del'>-                                "allocate protection domain for device (%s)",</div><div class='del'>-                                device_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (!strcmp(trav-&gt;device_name, device_name))</div><div class='add'>+            break;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                struct ibv_srq_init_attr attr = {</div><div class='del'>-                        .attr = {</div><div class='del'>-                                .max_wr = options-&gt;recv_count,</div><div class='del'>-                                .max_sge = 1,</div><div class='del'>-                                .srq_limit = 10</div><div class='del'>-                        }</div><div class='del'>-                };</div><div class='del'>-                trav-&gt;srq = ibv_create_srq (trav-&gt;pd, &amp;attr);</div><div class='del'>-</div><div class='del'>-                if (!trav-&gt;srq) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_CRE_SRQ_FAILED, "could not create SRQ"</div><div class='del'>-                                " for device (%s)",</div><div class='del'>-                                device_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* queue init */</div><div class='del'>-                gf_rdma_queue_init (&amp;trav-&gt;sendq);</div><div class='del'>-                gf_rdma_queue_init (&amp;trav-&gt;recvq);</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;trav-&gt;all_mr);</div><div class='del'>-                pthread_mutex_init (&amp;trav-&gt;all_mr_lock, NULL);</div><div class='del'>-                gf_rdma_register_iobuf_pool(trav, iobuf_pool);</div><div class='del'>-</div><div class='del'>-                if (gf_rdma_create_posts (this) &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_ALOC_POST_FAILED, "could not allocate"</div><div class='del'>-                                "posts for device (%s)", device_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* completion threads */</div><div class='del'>-                ret = gf_thread_create (&amp;trav-&gt;send_thread, NULL,</div><div class='del'>-                                        gf_rdma_send_completion_proc,</div><div class='del'>-                                        trav-&gt;send_chan, "rdmascom");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_SEND_COMP_THREAD_FAILED,</div><div class='del'>-                                "could not create send completion thread for "</div><div class='del'>-                                "device (%s)", device_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_thread_create (&amp;trav-&gt;recv_thread, NULL,</div><div class='del'>-                                        gf_rdma_recv_completion_proc,</div><div class='del'>-                                        trav-&gt;recv_chan, "rdmarcom");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_RECV_COMP_THREAD_FAILED,</div><div class='del'>-                                "could not create recv completion thread "</div><div class='del'>-                                "for device (%s)", device_name);</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_thread_create (&amp;trav-&gt;async_event_thread, NULL,</div><div class='del'>-                                        gf_rdma_async_event_thread,</div><div class='del'>-                                        ibctx, "rdmaAsyn");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                RDMA_MSG_ASYNC_EVENT_THEAD_FAILED,</div><div class='del'>-                                "could not create async_event_thread");</div><div class='del'>-                        return NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* qpreg */</div><div class='del'>-                pthread_mutex_init (&amp;trav-&gt;qpreg.lock, NULL);</div><div class='del'>-                for (i = 0; i &lt; 42; i++) {</div><div class='del'>-                        trav-&gt;qpreg.ents[i].next = &amp;trav-&gt;qpreg.ents[i];</div><div class='del'>-                        trav-&gt;qpreg.ents[i].prev = &amp;trav-&gt;qpreg.ents[i];</div><div class='del'>-                }</div><div class='add'>+    if (!trav) {</div><div class='add'>+        trav = GF_CALLOC(1, sizeof(*trav), gf_common_mt_rdma_device_t);</div><div class='add'>+        if (trav == NULL) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        priv-&gt;device = trav;</div><div class='add'>+        trav-&gt;context = ibctx;</div><div class='ctx'> </div><div class='del'>-        device = trav;</div><div class='del'>-        trav = NULL;</div><div class='del'>-out:</div><div class='add'>+        trav-&gt;next = rdma_ctx-&gt;device;</div><div class='add'>+        rdma_ctx-&gt;device = trav;</div><div class='ctx'> </div><div class='del'>-        if (trav != NULL) {</div><div class='del'>-                rdma_ctx-&gt;device = trav-&gt;next;</div><div class='del'>-                gf_rdma_destroy_posts (this);</div><div class='del'>-                mem_pool_destroy (trav-&gt;ioq_pool);</div><div class='del'>-                mem_pool_destroy (trav-&gt;request_ctx_pool);</div><div class='del'>-                mem_pool_destroy (trav-&gt;reply_info_pool);</div><div class='del'>-                if (trav-&gt;pd != NULL) {</div><div class='del'>-                        ibv_dealloc_pd (trav-&gt;pd);</div><div class='del'>-                }</div><div class='del'>-                gf_rdma_destroy_cq (this);</div><div class='del'>-                ibv_destroy_comp_channel (trav-&gt;recv_chan);</div><div class='del'>-                ibv_destroy_comp_channel (trav-&gt;send_chan);</div><div class='del'>-                GF_FREE ((char *)trav-&gt;device_name);</div><div class='del'>-                GF_FREE (trav);</div><div class='add'>+        iobuf_pool-&gt;device[iobuf_pool-&gt;rdma_device_count] = trav;</div><div class='add'>+        iobuf_pool-&gt;mr_list[iobuf_pool-&gt;rdma_device_count++] = &amp;trav-&gt;all_mr;</div><div class='add'>+        trav-&gt;request_ctx_pool = mem_pool_new(gf_rdma_request_context_t,</div><div class='add'>+                                              GF_RDMA_POOL_SIZE);</div><div class='add'>+        if (trav-&gt;request_ctx_pool == NULL) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return device;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static rpc_transport_t *</div><div class='del'>-gf_rdma_transport_new (rpc_transport_t *listener, struct rdma_cm_id *cm_id)</div><div class='del'>-{</div><div class='del'>-        gf_rdma_private_t *listener_priv = NULL, *priv = NULL;</div><div class='del'>-        rpc_transport_t   *this          = NULL, *new = NULL;</div><div class='del'>-        gf_rdma_options_t *options       = NULL;</div><div class='del'>-        char              *device_name   = NULL;</div><div class='del'>-</div><div class='del'>-        listener_priv = listener-&gt;private;</div><div class='del'>-</div><div class='del'>-        this = GF_CALLOC (1, sizeof (rpc_transport_t),</div><div class='del'>-                          gf_common_mt_rpc_transport_t);</div><div class='del'>-        if (this == NULL) {</div><div class='del'>-                goto out;</div><div class='add'>+        trav-&gt;ioq_pool = mem_pool_new(gf_rdma_ioq_t, GF_RDMA_POOL_SIZE);</div><div class='add'>+        if (trav-&gt;ioq_pool == NULL) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        this-&gt;listener = listener;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (gf_rdma_private_t),</div><div class='del'>-                          gf_common_mt_rdma_private_t);</div><div class='del'>-        if (priv == NULL) {</div><div class='del'>-                goto out;</div><div class='add'>+        trav-&gt;reply_info_pool = mem_pool_new(gf_rdma_reply_info_t,</div><div class='add'>+                                             GF_RDMA_POOL_SIZE);</div><div class='add'>+        if (trav-&gt;reply_info_pool == NULL) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        priv-&gt;options = listener_priv-&gt;options;</div><div class='del'>-</div><div class='del'>-        priv-&gt;listener = listener;</div><div class='del'>-        priv-&gt;entity = GF_RDMA_SERVER;</div><div class='del'>-</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='add'>+        trav-&gt;device_name = gf_strdup(device_name);</div><div class='ctx'> </div><div class='del'>-        this-&gt;ops = listener-&gt;ops;</div><div class='del'>-        this-&gt;init = listener-&gt;init;</div><div class='del'>-        this-&gt;fini = listener-&gt;fini;</div><div class='del'>-        this-&gt;ctx = listener-&gt;ctx;</div><div class='del'>-        this-&gt;name = gf_strdup (listener-&gt;name);</div><div class='del'>-        this-&gt;notify = listener-&gt;notify;</div><div class='del'>-        this-&gt;mydata = listener-&gt;mydata;</div><div class='del'>-        this-&gt;xl = listener-&gt;xl;</div><div class='del'>-</div><div class='del'>-        this-&gt;myinfo.sockaddr_len = sizeof (cm_id-&gt;route.addr.src_addr);</div><div class='del'>-        memcpy (&amp;this-&gt;myinfo.sockaddr, &amp;cm_id-&gt;route.addr.src_addr,</div><div class='del'>-                this-&gt;myinfo.sockaddr_len);</div><div class='del'>-</div><div class='del'>-        this-&gt;peerinfo.sockaddr_len = sizeof (cm_id-&gt;route.addr.dst_addr);</div><div class='del'>-        memcpy (&amp;this-&gt;peerinfo.sockaddr, &amp;cm_id-&gt;route.addr.dst_addr,</div><div class='del'>-                this-&gt;peerinfo.sockaddr_len);</div><div class='add'>+        trav-&gt;send_chan = ibv_create_comp_channel(trav-&gt;context);</div><div class='add'>+        if (!trav-&gt;send_chan) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_SEND_COMP_CHAN_FAILED,</div><div class='add'>+                   "could not "</div><div class='add'>+                   "create send completion channel for "</div><div class='add'>+                   "device (%s)",</div><div class='add'>+                   device_name);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;peer.trans = this;</div><div class='del'>-        gf_rdma_get_transport_identifiers (this);</div><div class='add'>+        trav-&gt;recv_chan = ibv_create_comp_channel(trav-&gt;context);</div><div class='add'>+        if (!trav-&gt;recv_chan) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_RECV_COMP_CHAN_FAILED,</div><div class='add'>+                   "could not "</div><div class='add'>+                   "create recv completion channel for "</div><div class='add'>+                   "device (%s)",</div><div class='add'>+                   device_name);</div><div class='ctx'> </div><div class='del'>-        device_name = (char *)ibv_get_device_name (cm_id-&gt;verbs-&gt;device);</div><div class='del'>-        if (device_name == NULL) {</div><div class='del'>-                gf_msg (listener-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_GET_DEVICE_NAME_FAILED, "cannot get device "</div><div class='del'>-                        "name (peer:%s me:%s)", this-&gt;peerinfo.identifier,</div><div class='del'>-                        this-&gt;myinfo.identifier);</div><div class='del'>-                goto out;</div><div class='add'>+            /* TODO: cleanup current mess */</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;device = gf_rdma_get_device (this, cm_id-&gt;verbs,</div><div class='del'>-                                           device_name);</div><div class='del'>-        if (priv-&gt;device == NULL) {</div><div class='del'>-                gf_msg (listener-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_GET_IB_DEVICE_FAILED, "cannot get infiniband"</div><div class='del'>-                        " device %s (peer:%s me:%s)", device_name,</div><div class='del'>-                        this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='del'>-                goto out;</div><div class='add'>+        if (gf_rdma_create_cq(this) &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_CQ_CREATION_FAILED,</div><div class='add'>+                   "could not create CQ for device (%s)", device_name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;peer.send_count = options-&gt;send_count;</div><div class='del'>-        priv-&gt;peer.recv_count = options-&gt;recv_count;</div><div class='del'>-        priv-&gt;peer.send_size = options-&gt;send_size;</div><div class='del'>-        priv-&gt;peer.recv_size = options-&gt;recv_size;</div><div class='del'>-        priv-&gt;peer.cm_id = cm_id;</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;peer.ioq);</div><div class='add'>+        /* protection domain */</div><div class='add'>+        trav-&gt;pd = ibv_alloc_pd(trav-&gt;context);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;write_mutex, NULL);</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;recv_mutex, NULL);</div><div class='del'>-</div><div class='del'>-        cm_id-&gt;context = this;</div><div class='del'>-</div><div class='del'>-        new = rpc_transport_ref (this);</div><div class='del'>-        this = NULL;</div><div class='del'>-out:</div><div class='del'>-        if (this != NULL) {</div><div class='del'>-                if (this-&gt;private != NULL) {</div><div class='del'>-                        GF_FREE (this-&gt;private);</div><div class='del'>-                }</div><div class='add'>+        if (!trav-&gt;pd) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_ALOC_PROT_DOM_FAILED,</div><div class='add'>+                   "could not "</div><div class='add'>+                   "allocate protection domain for device (%s)",</div><div class='add'>+                   device_name);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (this-&gt;name != NULL) {</div><div class='del'>-                        GF_FREE (this-&gt;name);</div><div class='del'>-                }</div><div class='add'>+        struct ibv_srq_init_attr attr = {.attr = {.max_wr = options-&gt;recv_count,</div><div class='add'>+                                                  .max_sge = 1,</div><div class='add'>+                                                  .srq_limit = 10}};</div><div class='add'>+        trav-&gt;srq = ibv_create_srq(trav-&gt;pd, &amp;attr);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (this);</div><div class='add'>+        if (!trav-&gt;srq) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_CRE_SRQ_FAILED,</div><div class='add'>+                   "could not create SRQ"</div><div class='add'>+                   " for device (%s)",</div><div class='add'>+                   device_name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return new;</div><div class='del'>-}</div><div class='add'>+        /* queue init */</div><div class='add'>+        gf_rdma_queue_init(&amp;trav-&gt;sendq);</div><div class='add'>+        gf_rdma_queue_init(&amp;trav-&gt;recvq);</div><div class='ctx'> </div><div class='add'>+        INIT_LIST_HEAD(&amp;trav-&gt;all_mr);</div><div class='add'>+        pthread_mutex_init(&amp;trav-&gt;all_mr_lock, NULL);</div><div class='add'>+        gf_rdma_register_iobuf_pool(trav, iobuf_pool);</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-gf_rdma_cm_handle_connect_request (struct rdma_cm_event *event)</div><div class='del'>-{</div><div class='del'>-        int                     ret         = -1;</div><div class='del'>-        rpc_transport_t        *this        = NULL, *listener = NULL;</div><div class='del'>-        struct rdma_cm_id      *child_cm_id = NULL, *listener_cm_id = NULL;</div><div class='del'>-        struct rdma_conn_param  conn_param  = {0, };</div><div class='del'>-        gf_rdma_private_t      *priv        = NULL;</div><div class='del'>-        gf_rdma_options_t      *options     = NULL;</div><div class='del'>-</div><div class='del'>-        child_cm_id = event-&gt;id;</div><div class='del'>-        listener_cm_id = event-&gt;listen_id;</div><div class='del'>-</div><div class='del'>-        listener = listener_cm_id-&gt;context;</div><div class='del'>-        priv = listener-&gt;private;</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-</div><div class='del'>-        this = gf_rdma_transport_new (listener, child_cm_id);</div><div class='del'>-        if (this == NULL) {</div><div class='del'>-                gf_msg (listener-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_CREAT_INC_TRANS_FAILED, "could not create "</div><div class='del'>-                        "a transport for incoming connection"</div><div class='del'>-                        " (me.name:%s me.identifier:%s)", listener-&gt;name,</div><div class='del'>-                        listener-&gt;myinfo.identifier);</div><div class='del'>-                rdma_destroy_id (child_cm_id);</div><div class='del'>-                goto out;</div><div class='add'>+        if (gf_rdma_create_posts(this) &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, RDMA_MSG_ALOC_POST_FAILED,</div><div class='add'>+                   "could not allocate"</div><div class='add'>+                   "posts for device (%s)",</div><div class='add'>+                   device_name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (listener-&gt;name, 0, "got a connect request (me:%s peer:"</div><div class='del'>-                      "%s)", listener-&gt;myinfo.identifier,</div><div class='del'>-                      this-&gt;peerinfo.identifier);</div><div class='add'>+        /* completion threads */</div><div class='add'>+        ret = gf_thread_create(&amp;trav-&gt;send_thread, NULL,</div><div class='add'>+                               gf_rdma_send_completion_proc, trav-&gt;send_chan,</div><div class='add'>+                               "rdmascom");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   RDMA_MSG_SEND_COMP_THREAD_FAILED,</div><div class='add'>+                   "could not create send completion thread for "</div><div class='add'>+                   "device (%s)",</div><div class='add'>+                   device_name);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = gf_rdma_create_qp (this);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (listener-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_CREAT_QP_FAILED, "could not create QP "</div><div class='del'>-                        "(peer:%s me:%s)", this-&gt;peerinfo.identifier,</div><div class='del'>-                        this-&gt;myinfo.identifier);</div><div class='del'>-                gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-                goto out;</div><div class='add'>+        ret = gf_thread_create(&amp;trav-&gt;recv_thread, NULL,</div><div class='add'>+                               gf_rdma_recv_completion_proc, trav-&gt;recv_chan,</div><div class='add'>+                               "rdmarcom");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   RDMA_MSG_RECV_COMP_THREAD_FAILED,</div><div class='add'>+                   "could not create recv completion thread "</div><div class='add'>+                   "for device (%s)",</div><div class='add'>+                   device_name);</div><div class='add'>+            return NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        conn_param.responder_resources = 1;</div><div class='del'>-        conn_param.initiator_depth = 1;</div><div class='del'>-        conn_param.retry_count = options-&gt;attr_retry_cnt;</div><div class='del'>-        conn_param.rnr_retry_count = options-&gt;attr_rnr_retry;</div><div class='add'>+        ret = gf_thread_create(&amp;trav-&gt;async_event_thread, NULL,</div><div class='add'>+                               gf_rdma_async_event_thread, ibctx, "rdmaAsyn");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   RDMA_MSG_ASYNC_EVENT_THEAD_FAILED,</div><div class='add'>+                   "could not create async_event_thread");</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = rdma_accept(child_cm_id, &amp;conn_param);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (listener-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_ACCEPT_FAILED, "rdma_accept failed peer:%s "</div><div class='del'>-                        "me:%s", this-&gt;peerinfo.identifier,</div><div class='del'>-                        this-&gt;myinfo.identifier);</div><div class='del'>-                gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-                goto out;</div><div class='add'>+        /* qpreg */</div><div class='add'>+        pthread_mutex_init(&amp;trav-&gt;qpreg.lock, NULL);</div><div class='add'>+        for (i = 0; i &lt; 42; i++) {</div><div class='add'>+            trav-&gt;qpreg.ents[i].next = &amp;trav-&gt;qpreg.ents[i];</div><div class='add'>+            trav-&gt;qpreg.ents[i].prev = &amp;trav-&gt;qpreg.ents[i];</div><div class='ctx'>         }</div><div class='del'>-        gf_rdma_cm_handle_connect_init (event);</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    device = trav;</div><div class='add'>+    trav = NULL;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    if (trav != NULL) {</div><div class='add'>+        rdma_ctx-&gt;device = trav-&gt;next;</div><div class='add'>+        gf_rdma_destroy_posts(this);</div><div class='add'>+        mem_pool_destroy(trav-&gt;ioq_pool);</div><div class='add'>+        mem_pool_destroy(trav-&gt;request_ctx_pool);</div><div class='add'>+        mem_pool_destroy(trav-&gt;reply_info_pool);</div><div class='add'>+        if (trav-&gt;pd != NULL) {</div><div class='add'>+            ibv_dealloc_pd(trav-&gt;pd);</div><div class='add'>+        }</div><div class='add'>+        gf_rdma_destroy_cq(this);</div><div class='add'>+        ibv_destroy_comp_channel(trav-&gt;recv_chan);</div><div class='add'>+        ibv_destroy_comp_channel(trav-&gt;send_chan);</div><div class='add'>+        GF_FREE((char *)trav-&gt;device_name);</div><div class='add'>+        GF_FREE(trav);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return device;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-gf_rdma_cm_handle_route_resolved (struct rdma_cm_event *event)</div><div class='add'>+static rpc_transport_t *</div><div class='add'>+gf_rdma_transport_new(rpc_transport_t *listener, struct rdma_cm_id *cm_id)</div><div class='ctx'> {</div><div class='del'>-        struct rdma_conn_param  conn_param = {0, };</div><div class='del'>-        int                     ret        = 0;</div><div class='del'>-        rpc_transport_t        *this       = NULL;</div><div class='del'>-        gf_rdma_private_t      *priv       = NULL;</div><div class='del'>-        gf_rdma_peer_t         *peer       = NULL;</div><div class='del'>-        gf_rdma_options_t      *options    = NULL;</div><div class='del'>-</div><div class='del'>-        if (event == NULL) {</div><div class='del'>-                goto out;</div><div class='add'>+    gf_rdma_private_t *listener_priv = NULL, *priv = NULL;</div><div class='add'>+    rpc_transport_t *this = NULL, *new = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+    char *device_name = NULL;</div><div class='add'>+</div><div class='add'>+    listener_priv = listener-&gt;private;</div><div class='add'>+</div><div class='add'>+    this = GF_CALLOC(1, sizeof(rpc_transport_t), gf_common_mt_rpc_transport_t);</div><div class='add'>+    if (this == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;listener = listener;</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(gf_rdma_private_t), gf_common_mt_rdma_private_t);</div><div class='add'>+    if (priv == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    priv-&gt;options = listener_priv-&gt;options;</div><div class='add'>+</div><div class='add'>+    priv-&gt;listener = listener;</div><div class='add'>+    priv-&gt;entity = GF_RDMA_SERVER;</div><div class='add'>+</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+</div><div class='add'>+    this-&gt;ops = listener-&gt;ops;</div><div class='add'>+    this-&gt;init = listener-&gt;init;</div><div class='add'>+    this-&gt;fini = listener-&gt;fini;</div><div class='add'>+    this-&gt;ctx = listener-&gt;ctx;</div><div class='add'>+    this-&gt;name = gf_strdup(listener-&gt;name);</div><div class='add'>+    this-&gt;notify = listener-&gt;notify;</div><div class='add'>+    this-&gt;mydata = listener-&gt;mydata;</div><div class='add'>+    this-&gt;xl = listener-&gt;xl;</div><div class='add'>+</div><div class='add'>+    this-&gt;myinfo.sockaddr_len = sizeof(cm_id-&gt;route.addr.src_addr);</div><div class='add'>+    memcpy(&amp;this-&gt;myinfo.sockaddr, &amp;cm_id-&gt;route.addr.src_addr,</div><div class='add'>+           this-&gt;myinfo.sockaddr_len);</div><div class='add'>+</div><div class='add'>+    this-&gt;peerinfo.sockaddr_len = sizeof(cm_id-&gt;route.addr.dst_addr);</div><div class='add'>+    memcpy(&amp;this-&gt;peerinfo.sockaddr, &amp;cm_id-&gt;route.addr.dst_addr,</div><div class='add'>+           this-&gt;peerinfo.sockaddr_len);</div><div class='add'>+</div><div class='add'>+    priv-&gt;peer.trans = this;</div><div class='add'>+    gf_rdma_get_transport_identifiers(this);</div><div class='add'>+</div><div class='add'>+    device_name = (char *)ibv_get_device_name(cm_id-&gt;verbs-&gt;device);</div><div class='add'>+    if (device_name == NULL) {</div><div class='add'>+        gf_msg(listener-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_GET_DEVICE_NAME_FAILED,</div><div class='add'>+               "cannot get device "</div><div class='add'>+               "name (peer:%s me:%s)",</div><div class='add'>+               this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;device = gf_rdma_get_device(this, cm_id-&gt;verbs, device_name);</div><div class='add'>+    if (priv-&gt;device == NULL) {</div><div class='add'>+        gf_msg(listener-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_GET_IB_DEVICE_FAILED,</div><div class='add'>+               "cannot get infiniband"</div><div class='add'>+               " device %s (peer:%s me:%s)",</div><div class='add'>+               device_name, this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;peer.send_count = options-&gt;send_count;</div><div class='add'>+    priv-&gt;peer.recv_count = options-&gt;recv_count;</div><div class='add'>+    priv-&gt;peer.send_size = options-&gt;send_size;</div><div class='add'>+    priv-&gt;peer.recv_size = options-&gt;recv_size;</div><div class='add'>+    priv-&gt;peer.cm_id = cm_id;</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;peer.ioq);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;write_mutex, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;recv_mutex, NULL);</div><div class='add'>+</div><div class='add'>+    cm_id-&gt;context = this;</div><div class='add'>+</div><div class='add'>+    new = rpc_transport_ref(this);</div><div class='add'>+    this = NULL;</div><div class='add'>+out:</div><div class='add'>+    if (this != NULL) {</div><div class='add'>+        if (this-&gt;private != NULL) {</div><div class='add'>+            GF_FREE(this-&gt;private);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        this = event-&gt;id-&gt;context;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_create_qp (this);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_CREAT_QP_FAILED, "could not create QP "</div><div class='del'>-                        "(peer:%s me:%s)", this-&gt;peerinfo.identifier,</div><div class='del'>-                        this-&gt;myinfo.identifier);</div><div class='del'>-                gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-                goto out;</div><div class='add'>+        if (this-&gt;name != NULL) {</div><div class='add'>+            GF_FREE(this-&gt;name);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        memset(&amp;conn_param, 0, sizeof conn_param);</div><div class='del'>-        conn_param.responder_resources = 1;</div><div class='del'>-        conn_param.initiator_depth = 1;</div><div class='del'>-        conn_param.retry_count = options-&gt;attr_retry_cnt;</div><div class='del'>-        conn_param.rnr_retry_count = options-&gt;attr_rnr_retry;</div><div class='add'>+        GF_FREE(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = rdma_connect(peer-&gt;cm_id, &amp;conn_param);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_CONNECT_FAILED,</div><div class='del'>-                        "rdma_connect failed");</div><div class='del'>-                gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    return new;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "route resolved (me:%s peer:%s)",</div><div class='del'>-                      this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+static int</div><div class='add'>+gf_rdma_cm_handle_connect_request(struct rdma_cm_event *event)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_transport_t *this = NULL, *listener = NULL;</div><div class='add'>+    struct rdma_cm_id *child_cm_id = NULL, *listener_cm_id = NULL;</div><div class='add'>+    struct rdma_conn_param conn_param = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+</div><div class='add'>+    child_cm_id = event-&gt;id;</div><div class='add'>+    listener_cm_id = event-&gt;listen_id;</div><div class='add'>+</div><div class='add'>+    listener = listener_cm_id-&gt;context;</div><div class='add'>+    priv = listener-&gt;private;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+</div><div class='add'>+    this = gf_rdma_transport_new(listener, child_cm_id);</div><div class='add'>+    if (this == NULL) {</div><div class='add'>+        gf_msg(listener-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_CREAT_INC_TRANS_FAILED,</div><div class='add'>+               "could not create "</div><div class='add'>+               "a transport for incoming connection"</div><div class='add'>+               " (me.name:%s me.identifier:%s)",</div><div class='add'>+               listener-&gt;name, listener-&gt;myinfo.identifier);</div><div class='add'>+        rdma_destroy_id(child_cm_id);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(listener-&gt;name, 0,</div><div class='add'>+                 "got a connect request (me:%s peer:"</div><div class='add'>+                 "%s)",</div><div class='add'>+                 listener-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_create_qp(this);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(listener-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_CREAT_QP_FAILED,</div><div class='add'>+               "could not create QP "</div><div class='add'>+               "(peer:%s me:%s)",</div><div class='add'>+               this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+        gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conn_param.responder_resources = 1;</div><div class='add'>+    conn_param.initiator_depth = 1;</div><div class='add'>+    conn_param.retry_count = options-&gt;attr_retry_cnt;</div><div class='add'>+    conn_param.rnr_retry_count = options-&gt;attr_rnr_retry;</div><div class='add'>+</div><div class='add'>+    ret = rdma_accept(child_cm_id, &amp;conn_param);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(listener-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_ACCEPT_FAILED,</div><div class='add'>+               "rdma_accept failed peer:%s "</div><div class='add'>+               "me:%s",</div><div class='add'>+               this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+        gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_rdma_cm_handle_connect_init(event);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static int</div><div class='add'>+gf_rdma_cm_handle_route_resolved(struct rdma_cm_event *event)</div><div class='add'>+{</div><div class='add'>+    struct rdma_conn_param conn_param = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    rpc_transport_t *this = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+</div><div class='add'>+    if (event == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this = event-&gt;id-&gt;context;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_create_qp(this);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_CREAT_QP_FAILED,</div><div class='add'>+               "could not create QP "</div><div class='add'>+               "(peer:%s me:%s)",</div><div class='add'>+               this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+        gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(&amp;conn_param, 0, sizeof conn_param);</div><div class='add'>+    conn_param.responder_resources = 1;</div><div class='add'>+    conn_param.initiator_depth = 1;</div><div class='add'>+    conn_param.retry_count = options-&gt;attr_retry_cnt;</div><div class='add'>+    conn_param.rnr_retry_count = options-&gt;attr_rnr_retry;</div><div class='add'>+</div><div class='add'>+    ret = rdma_connect(peer-&gt;cm_id, &amp;conn_param);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_CONNECT_FAILED,</div><div class='add'>+               "rdma_connect failed");</div><div class='add'>+        gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "route resolved (me:%s peer:%s)",</div><div class='add'>+                 this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_rdma_cm_handle_addr_resolved (struct rdma_cm_event *event)</div><div class='add'>+gf_rdma_cm_handle_addr_resolved(struct rdma_cm_event *event)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_t   *this = NULL;</div><div class='del'>-        gf_rdma_peer_t    *peer = NULL;</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='del'>-        int                ret  = 0;</div><div class='add'>+    rpc_transport_t *this = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        this = event-&gt;id-&gt;context;</div><div class='add'>+    this = event-&gt;id-&gt;context;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (peer-&gt;cm_id == event-&gt;id);</div><div class='add'>+    GF_ASSERT(peer-&gt;cm_id == event-&gt;id);</div><div class='ctx'> </div><div class='del'>-        this-&gt;myinfo.sockaddr_len = sizeof (peer-&gt;cm_id-&gt;route.addr.src_addr);</div><div class='del'>-        memcpy (&amp;this-&gt;myinfo.sockaddr, &amp;peer-&gt;cm_id-&gt;route.addr.src_addr,</div><div class='del'>-                this-&gt;myinfo.sockaddr_len);</div><div class='add'>+    this-&gt;myinfo.sockaddr_len = sizeof(peer-&gt;cm_id-&gt;route.addr.src_addr);</div><div class='add'>+    memcpy(&amp;this-&gt;myinfo.sockaddr, &amp;peer-&gt;cm_id-&gt;route.addr.src_addr,</div><div class='add'>+           this-&gt;myinfo.sockaddr_len);</div><div class='ctx'> </div><div class='del'>-        this-&gt;peerinfo.sockaddr_len = sizeof (peer-&gt;cm_id-&gt;route.addr.dst_addr);</div><div class='del'>-        memcpy (&amp;this-&gt;peerinfo.sockaddr, &amp;peer-&gt;cm_id-&gt;route.addr.dst_addr,</div><div class='del'>-                this-&gt;peerinfo.sockaddr_len);</div><div class='add'>+    this-&gt;peerinfo.sockaddr_len = sizeof(peer-&gt;cm_id-&gt;route.addr.dst_addr);</div><div class='add'>+    memcpy(&amp;this-&gt;peerinfo.sockaddr, &amp;peer-&gt;cm_id-&gt;route.addr.dst_addr,</div><div class='add'>+           this-&gt;peerinfo.sockaddr_len);</div><div class='ctx'> </div><div class='del'>-        gf_rdma_get_transport_identifiers (this);</div><div class='add'>+    gf_rdma_get_transport_identifiers(this);</div><div class='ctx'> </div><div class='del'>-        ret = rdma_resolve_route(peer-&gt;cm_id, 2000);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_ROUTE_RESOLVE_FAILED, "rdma_resolve_route "</div><div class='del'>-                        "failed (me:%s peer:%s)",</div><div class='del'>-                        this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='del'>-                gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = rdma_resolve_route(peer-&gt;cm_id, 2000);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_ROUTE_RESOLVE_FAILED,</div><div class='add'>+               "rdma_resolve_route "</div><div class='add'>+               "failed (me:%s peer:%s)",</div><div class='add'>+               this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+        gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "Address resolved (me:%s peer:%s)",</div><div class='del'>-                      this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "Address resolved (me:%s peer:%s)",</div><div class='add'>+                 this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_cm_handle_disconnect (rpc_transport_t *this)</div><div class='add'>+gf_rdma_cm_handle_disconnect(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv       = NULL;</div><div class='del'>-        char               need_unref = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    char need_unref = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "peer disconnected, cleaning up");</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "peer disconnected, cleaning up");</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;peer.cm_id != NULL) {</div><div class='del'>-                        need_unref = 1;</div><div class='del'>-                        priv-&gt;connected = 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                __gf_rdma_teardown (this);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;peer.cm_id != NULL) {</div><div class='add'>+            need_unref = 1;</div><div class='add'>+            priv-&gt;connected = 0;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-        rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);</div><div class='add'>+        __gf_rdma_teardown(this);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-        if (need_unref)</div><div class='del'>-                rpc_transport_unref (this);</div><div class='add'>+    rpc_transport_notify(this, RPC_TRANSPORT_DISCONNECT, this);</div><div class='ctx'> </div><div class='add'>+    if (need_unref)</div><div class='add'>+        rpc_transport_unref(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_rdma_cm_handle_connect_init (struct rdma_cm_event *event)</div><div class='add'>+gf_rdma_cm_handle_connect_init(struct rdma_cm_event *event)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_t   *this  = NULL;</div><div class='del'>-        gf_rdma_private_t *priv  = NULL;</div><div class='del'>-        struct rdma_cm_id *cm_id = NULL;</div><div class='del'>-        int                ret   = 0;</div><div class='del'>-</div><div class='del'>-        cm_id = event-&gt;id;</div><div class='del'>-        this = cm_id-&gt;context;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;connected == 1) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "received event "</div><div class='del'>-                              "RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)",</div><div class='del'>-                              this-&gt;myinfo.identifier,</div><div class='del'>-                              this-&gt;peerinfo.identifier);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    rpc_transport_t *this = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    struct rdma_cm_id *cm_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    cm_id = event-&gt;id;</div><div class='add'>+    this = cm_id-&gt;context;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;connected == 1) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                     "received event "</div><div class='add'>+                     "RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)",</div><div class='add'>+                     this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;connected = 1;</div><div class='add'>+    priv-&gt;connected = 1;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                priv-&gt;peer.quota = 1;</div><div class='del'>-                priv-&gt;peer.quota_set = 0;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;entity == GF_RDMA_CLIENT) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "received event "</div><div class='del'>-                              "RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)",</div><div class='del'>-                              this-&gt;myinfo.identifier,</div><div class='del'>-                              this-&gt;peerinfo.identifier);</div><div class='del'>-                ret = rpc_transport_notify (this, RPC_TRANSPORT_CONNECT, this);</div><div class='del'>-</div><div class='del'>-        } else if (priv-&gt;entity == GF_RDMA_SERVER) {</div><div class='del'>-                ret = rpc_transport_notify (priv-&gt;listener,</div><div class='del'>-                                            RPC_TRANSPORT_ACCEPT, this);</div><div class='del'>-        }</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        priv-&gt;peer.quota = 1;</div><div class='add'>+        priv-&gt;peer.quota_set = 0;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_rdma_disconnect (this, _gf_false);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;entity == GF_RDMA_CLIENT) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                     "received event "</div><div class='add'>+                     "RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)",</div><div class='add'>+                     this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+        ret = rpc_transport_notify(this, RPC_TRANSPORT_CONNECT, this);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    } else if (priv-&gt;entity == GF_RDMA_SERVER) {</div><div class='add'>+        ret = rpc_transport_notify(priv-&gt;listener, RPC_TRANSPORT_ACCEPT, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_rdma_disconnect(this, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_rdma_cm_handle_event_error (rpc_transport_t *this)</div><div class='add'>+gf_rdma_cm_handle_event_error(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv  = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;entity != GF_RDMA_SERVER_LISTENER) {</div><div class='del'>-                gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;entity != GF_RDMA_SERVER_LISTENER) {</div><div class='add'>+        gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_rdma_cm_handle_device_removal (struct rdma_cm_event *event)</div><div class='add'>+gf_rdma_cm_handle_device_removal(struct rdma_cm_event *event)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void *</div><div class='del'>-gf_rdma_cm_event_handler (void *data)</div><div class='add'>+gf_rdma_cm_event_handler(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct rdma_cm_event      *event         = NULL;</div><div class='del'>-        int                        ret           = 0;</div><div class='del'>-        rpc_transport_t           *this          = NULL;</div><div class='del'>-        struct rdma_event_channel *event_channel = NULL;</div><div class='del'>-</div><div class='del'>-        event_channel = data;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                ret = rdma_get_cm_event (event_channel, &amp;event);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='del'>-                                RDMA_MSG_CM_EVENT_FAILED,</div><div class='del'>-                                "rdma_cm_get_event failed");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    struct rdma_cm_event *event = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    rpc_transport_t *this = NULL;</div><div class='add'>+    struct rdma_event_channel *event_channel = NULL;</div><div class='ctx'> </div><div class='del'>-                switch (event-&gt;event) {</div><div class='del'>-                case RDMA_CM_EVENT_ADDR_RESOLVED:</div><div class='del'>-                        gf_rdma_cm_handle_addr_resolved (event);</div><div class='del'>-                        break;</div><div class='add'>+    event_channel = data;</div><div class='ctx'> </div><div class='del'>-                case RDMA_CM_EVENT_ROUTE_RESOLVED:</div><div class='del'>-                        gf_rdma_cm_handle_route_resolved (event);</div><div class='del'>-                        break;</div><div class='add'>+    while (1) {</div><div class='add'>+        ret = rdma_get_cm_event(event_channel, &amp;event);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='add'>+                   RDMA_MSG_CM_EVENT_FAILED, "rdma_cm_get_event failed");</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                case RDMA_CM_EVENT_CONNECT_REQUEST:</div><div class='del'>-                        gf_rdma_cm_handle_connect_request (event);</div><div class='del'>-                        break;</div><div class='add'>+        switch (event-&gt;event) {</div><div class='add'>+            case RDMA_CM_EVENT_ADDR_RESOLVED:</div><div class='add'>+                gf_rdma_cm_handle_addr_resolved(event);</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                case RDMA_CM_EVENT_ESTABLISHED:</div><div class='del'>-                        gf_rdma_cm_handle_connect_init (event);</div><div class='del'>-                        break;</div><div class='add'>+            case RDMA_CM_EVENT_ROUTE_RESOLVED:</div><div class='add'>+                gf_rdma_cm_handle_route_resolved(event);</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                case RDMA_CM_EVENT_ADDR_ERROR:</div><div class='del'>-                case RDMA_CM_EVENT_ROUTE_ERROR:</div><div class='del'>-                case RDMA_CM_EVENT_CONNECT_ERROR:</div><div class='del'>-                case RDMA_CM_EVENT_UNREACHABLE:</div><div class='del'>-                case RDMA_CM_EVENT_REJECTED:</div><div class='del'>-                        this = event-&gt;id-&gt;context;</div><div class='del'>-</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_CM_EVENT_FAILED, "cma event %s, "</div><div class='del'>-                                "error %d (me:%s peer:%s)\n",</div><div class='del'>-                                rdma_event_str(event-&gt;event), event-&gt;status,</div><div class='del'>-                                this-&gt;myinfo.identifier,</div><div class='del'>-                                this-&gt;peerinfo.identifier);</div><div class='del'>-</div><div class='del'>-                        rdma_ack_cm_event (event);</div><div class='del'>-                        event = NULL;</div><div class='del'>-</div><div class='del'>-                        gf_rdma_cm_handle_event_error (this);</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                case RDMA_CM_EVENT_DISCONNECTED:</div><div class='del'>-                        this = event-&gt;id-&gt;context;</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "received disconnect "</div><div class='del'>-                                      "(me:%s peer:%s)\n",</div><div class='del'>-                                      this-&gt;myinfo.identifier,</div><div class='del'>-                                      this-&gt;peerinfo.identifier);</div><div class='del'>-</div><div class='del'>-                        rdma_ack_cm_event (event);</div><div class='del'>-                        event = NULL;</div><div class='del'>-</div><div class='del'>-                        gf_rdma_cm_handle_disconnect (this);</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                case RDMA_CM_EVENT_DEVICE_REMOVAL:</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_CM_EVENT_FAILED, "device "</div><div class='del'>-                                "removed");</div><div class='del'>-                        gf_rdma_cm_handle_device_removal (event);</div><div class='del'>-                        break;</div><div class='add'>+            case RDMA_CM_EVENT_CONNECT_REQUEST:</div><div class='add'>+                gf_rdma_cm_handle_connect_request(event);</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                default:</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_CM_EVENT_FAILED,</div><div class='del'>-                                "unhandled event: %s, ignoring",</div><div class='del'>-                                rdma_event_str(event-&gt;event));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            case RDMA_CM_EVENT_ESTABLISHED:</div><div class='add'>+                gf_rdma_cm_handle_connect_init(event);</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                rdma_ack_cm_event (event);</div><div class='add'>+            case RDMA_CM_EVENT_ADDR_ERROR:</div><div class='add'>+            case RDMA_CM_EVENT_ROUTE_ERROR:</div><div class='add'>+            case RDMA_CM_EVENT_CONNECT_ERROR:</div><div class='add'>+            case RDMA_CM_EVENT_UNREACHABLE:</div><div class='add'>+            case RDMA_CM_EVENT_REJECTED:</div><div class='add'>+                this = event-&gt;id-&gt;context;</div><div class='add'>+</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+                       "cma event %s, "</div><div class='add'>+                       "error %d (me:%s peer:%s)\n",</div><div class='add'>+                       rdma_event_str(event-&gt;event), event-&gt;status,</div><div class='add'>+                       this-&gt;myinfo.identifier, this-&gt;peerinfo.identifier);</div><div class='add'>+</div><div class='add'>+                rdma_ack_cm_event(event);</div><div class='add'>+                event = NULL;</div><div class='add'>+</div><div class='add'>+                gf_rdma_cm_handle_event_error(this);</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            case RDMA_CM_EVENT_DISCONNECTED:</div><div class='add'>+                this = event-&gt;id-&gt;context;</div><div class='add'>+</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "received disconnect "</div><div class='add'>+                             "(me:%s peer:%s)\n",</div><div class='add'>+                             this-&gt;myinfo.identifier,</div><div class='add'>+                             this-&gt;peerinfo.identifier);</div><div class='add'>+</div><div class='add'>+                rdma_ack_cm_event(event);</div><div class='add'>+                event = NULL;</div><div class='add'>+</div><div class='add'>+                gf_rdma_cm_handle_disconnect(this);</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            case RDMA_CM_EVENT_DEVICE_REMOVAL:</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+                       "device "</div><div class='add'>+                       "removed");</div><div class='add'>+                gf_rdma_cm_handle_device_removal(event);</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            default:</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+                       "unhandled event: %s, ignoring",</div><div class='add'>+                       rdma_event_str(event-&gt;event));</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='del'>-}</div><div class='add'>+        rdma_ack_cm_event(event);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return NULL;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_post_send (struct ibv_qp *qp, gf_rdma_post_t *post, int32_t len)</div><div class='add'>+gf_rdma_post_send(struct ibv_qp *qp, gf_rdma_post_t *post, int32_t len)</div><div class='ctx'> {</div><div class='del'>-        struct ibv_sge list = {</div><div class='del'>-                .addr = (unsigned long) post-&gt;buf,</div><div class='del'>-                .length = len,</div><div class='del'>-                .lkey = post-&gt;mr-&gt;lkey</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        struct ibv_send_wr wr = {</div><div class='del'>-                .wr_id      = (unsigned long) post,</div><div class='del'>-                .sg_list    = &amp;list,</div><div class='del'>-                .num_sge    = 1,</div><div class='del'>-                .opcode     = IBV_WR_SEND,</div><div class='del'>-                .send_flags = IBV_SEND_SIGNALED,</div><div class='del'>-        }, *bad_wr;</div><div class='del'>-</div><div class='del'>-        if (!qp)</div><div class='del'>-                return EINVAL;</div><div class='del'>-</div><div class='del'>-        return ibv_post_send (qp, &amp;wr, &amp;bad_wr);</div><div class='add'>+    struct ibv_sge list = {.addr = (unsigned long)post-&gt;buf,</div><div class='add'>+                           .length = len,</div><div class='add'>+                           .lkey = post-&gt;mr-&gt;lkey};</div><div class='add'>+</div><div class='add'>+    struct ibv_send_wr wr =</div><div class='add'>+                           {</div><div class='add'>+                               .wr_id = (unsigned long)post,</div><div class='add'>+                               .sg_list = &amp;list,</div><div class='add'>+                               .num_sge = 1,</div><div class='add'>+                               .opcode = IBV_WR_SEND,</div><div class='add'>+                               .send_flags = IBV_SEND_SIGNALED,</div><div class='add'>+                           },</div><div class='add'>+                       *bad_wr;</div><div class='add'>+</div><div class='add'>+    if (!qp)</div><div class='add'>+        return EINVAL;</div><div class='add'>+</div><div class='add'>+    return ibv_post_send(qp, &amp;wr, &amp;bad_wr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='hunk'>@@ -1388,1945 +1347,1853 @@ __gf_rdma_encode_error(gf_rdma_peer_t *peer, gf_rdma_reply_info_t *reply_info,</div><div class='ctx'>                        struct iovec *rpchdr, gf_rdma_header_t *hdr,</div><div class='ctx'>                        gf_rdma_errcode_t err)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_msg *rpc_msg = NULL;</div><div class='del'>-</div><div class='del'>-        if (reply_info != NULL) {</div><div class='del'>-                hdr-&gt;rm_xid = hton32(reply_info-&gt;rm_xid);</div><div class='del'>-        } else {</div><div class='del'>-                rpc_msg = rpchdr[0].iov_base; /* assume rpchdr contains</div><div class='del'>-                                               * only one vector.</div><div class='del'>-                                               * (which is true)</div><div class='del'>-                                               */</div><div class='del'>-                hdr-&gt;rm_xid = rpc_msg-&gt;rm_xid;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hdr-&gt;rm_vers = hton32(GF_RDMA_VERSION);</div><div class='del'>-        hdr-&gt;rm_credit = hton32(peer-&gt;send_count);</div><div class='del'>-        hdr-&gt;rm_type = hton32(GF_RDMA_ERROR);</div><div class='del'>-        hdr-&gt;rm_body.rm_error.rm_type = hton32(err);</div><div class='del'>-        if (err == ERR_VERS) {</div><div class='del'>-                hdr-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_low</div><div class='del'>-                        = hton32(GF_RDMA_VERSION);</div><div class='del'>-                hdr-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_high</div><div class='del'>-                        = hton32(GF_RDMA_VERSION);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return sizeof (*hdr);</div><div class='add'>+    struct rpc_msg *rpc_msg = NULL;</div><div class='add'>+</div><div class='add'>+    if (reply_info != NULL) {</div><div class='add'>+        hdr-&gt;rm_xid = hton32(reply_info-&gt;rm_xid);</div><div class='add'>+    } else {</div><div class='add'>+        rpc_msg = rpchdr[0].iov_base; /* assume rpchdr contains</div><div class='add'>+                                       * only one vector.</div><div class='add'>+                                       * (which is true)</div><div class='add'>+                                       */</div><div class='add'>+        hdr-&gt;rm_xid = rpc_msg-&gt;rm_xid;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hdr-&gt;rm_vers = hton32(GF_RDMA_VERSION);</div><div class='add'>+    hdr-&gt;rm_credit = hton32(peer-&gt;send_count);</div><div class='add'>+    hdr-&gt;rm_type = hton32(GF_RDMA_ERROR);</div><div class='add'>+    hdr-&gt;rm_body.rm_error.rm_type = hton32(err);</div><div class='add'>+    if (err == ERR_VERS) {</div><div class='add'>+        hdr-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_low = hton32(</div><div class='add'>+            GF_RDMA_VERSION);</div><div class='add'>+        hdr-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_high = hton32(</div><div class='add'>+            GF_RDMA_VERSION);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return sizeof(*hdr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_send_error (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                      gf_rdma_post_t *post, gf_rdma_reply_info_t *reply_info,</div><div class='del'>-                      gf_rdma_errcode_t err)</div><div class='add'>+__gf_rdma_send_error(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                     gf_rdma_post_t *post, gf_rdma_reply_info_t *reply_info,</div><div class='add'>+                     gf_rdma_errcode_t err)</div><div class='ctx'> {</div><div class='del'>-        int32_t  ret = -1, len = 0;</div><div class='del'>-</div><div class='del'>-        len = __gf_rdma_encode_error (peer, reply_info, entry-&gt;rpchdr,</div><div class='del'>-                                      (gf_rdma_header_t *)post-&gt;buf, err);</div><div class='del'>-        if (len == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, 0,</div><div class='del'>-                        RDMA_MSG_ENCODE_ERROR, "encode error returned -1");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_rdma_post_ref (post);</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_post_send (peer-&gt;qp, post, len);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = len;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_POST_SEND_FAILED,</div><div class='del'>-                        "gf_rdma_post_send (to %s) failed with ret = %d (%s)",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='del'>-                        (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-                __gf_rdma_disconnect (peer-&gt;trans);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1, len = 0;</div><div class='add'>+</div><div class='add'>+    len = __gf_rdma_encode_error(peer, reply_info, entry-&gt;rpchdr,</div><div class='add'>+                                 (gf_rdma_header_t *)post-&gt;buf, err);</div><div class='add'>+    if (len == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, 0, RDMA_MSG_ENCODE_ERROR,</div><div class='add'>+               "encode error returned -1");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_rdma_post_ref(post);</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_post_send(peer-&gt;qp, post, len);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = len;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_POST_SEND_FAILED,</div><div class='add'>+               "gf_rdma_post_send (to %s) failed with ret = %d (%s)",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+               (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+        __gf_rdma_disconnect(peer-&gt;trans);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_create_read_chunks_from_vector (gf_rdma_peer_t *peer,</div><div class='del'>-                                          gf_rdma_read_chunk_t **readch_ptr,</div><div class='del'>-                                          int32_t *pos, struct iovec *vector,</div><div class='del'>-                                          int count,</div><div class='del'>-                                          gf_rdma_request_context_t *request_ctx)</div><div class='add'>+__gf_rdma_create_read_chunks_from_vector(gf_rdma_peer_t *peer,</div><div class='add'>+                                         gf_rdma_read_chunk_t **readch_ptr,</div><div class='add'>+                                         int32_t *pos, struct iovec *vector,</div><div class='add'>+                                         int count,</div><div class='add'>+                                         gf_rdma_request_context_t *request_ctx)</div><div class='ctx'> {</div><div class='del'>-        int                   i      = 0;</div><div class='del'>-        gf_rdma_private_t    *priv   = NULL;</div><div class='del'>-        gf_rdma_device_t     *device = NULL;</div><div class='del'>-        struct ibv_mr        *mr     = NULL;</div><div class='del'>-        gf_rdma_read_chunk_t *readch = NULL;</div><div class='del'>-        int32_t               ret    = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, peer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, readch_ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, *readch_ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, vector, out);</div><div class='del'>-</div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-        readch = *readch_ptr;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                readch-&gt;rc_discrim = hton32 (1);</div><div class='del'>-                readch-&gt;rc_position = hton32 (*pos);</div><div class='del'>-</div><div class='del'>-                mr = gf_rdma_get_pre_registred_mr(peer-&gt;trans,</div><div class='del'>-                                (void *)vector[i].iov_base, vector[i].iov_len);</div><div class='del'>-                if (!mr) {</div><div class='del'>-                mr = ibv_reg_mr (device-&gt;pd, vector[i].iov_base,</div><div class='del'>-                                 vector[i].iov_len,</div><div class='del'>-                                 IBV_ACCESS_REMOTE_READ);</div><div class='del'>-                }</div><div class='del'>-                if (!mr) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='del'>-                                RDMA_MSG_MR_ALOC_FAILED,</div><div class='del'>-                                "memory registration failed (peer:%s)",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                request_ctx-&gt;mr[request_ctx-&gt;mr_count++] = mr;</div><div class='del'>-</div><div class='del'>-                readch-&gt;rc_target.rs_handle = hton32 (mr-&gt;rkey);</div><div class='del'>-                readch-&gt;rc_target.rs_length</div><div class='del'>-                        = hton32 (vector[i].iov_len);</div><div class='del'>-                readch-&gt;rc_target.rs_offset</div><div class='del'>-                        = hton64 ((uint64_t)(unsigned long)vector[i].iov_base);</div><div class='del'>-</div><div class='del'>-                *pos = *pos + vector[i].iov_len;</div><div class='del'>-                readch++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *readch_ptr = readch;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    struct ibv_mr *mr = NULL;</div><div class='add'>+    gf_rdma_read_chunk_t *readch = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, peer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, readch_ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, *readch_ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, vector, out);</div><div class='add'>+</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+    readch = *readch_ptr;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        readch-&gt;rc_discrim = hton32(1);</div><div class='add'>+        readch-&gt;rc_position = hton32(*pos);</div><div class='add'>+</div><div class='add'>+        mr = gf_rdma_get_pre_registred_mr(</div><div class='add'>+            peer-&gt;trans, (void *)vector[i].iov_base, vector[i].iov_len);</div><div class='add'>+        if (!mr) {</div><div class='add'>+            mr = ibv_reg_mr(device-&gt;pd, vector[i].iov_base, vector[i].iov_len,</div><div class='add'>+                            IBV_ACCESS_REMOTE_READ);</div><div class='add'>+        }</div><div class='add'>+        if (!mr) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='add'>+                   RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                   "memory registration failed (peer:%s)",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        request_ctx-&gt;mr[request_ctx-&gt;mr_count++] = mr;</div><div class='add'>+</div><div class='add'>+        readch-&gt;rc_target.rs_handle = hton32(mr-&gt;rkey);</div><div class='add'>+        readch-&gt;rc_target.rs_length = hton32(vector[i].iov_len);</div><div class='add'>+        readch-&gt;rc_target.rs_offset = hton64(</div><div class='add'>+            (uint64_t)(unsigned long)vector[i].iov_base);</div><div class='add'>+</div><div class='add'>+        *pos = *pos + vector[i].iov_len;</div><div class='add'>+        readch++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *readch_ptr = readch;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_create_read_chunks (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                              gf_rdma_chunktype_t type, uint32_t **ptr,</div><div class='del'>-                              gf_rdma_request_context_t *request_ctx)</div><div class='add'>+__gf_rdma_create_read_chunks(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                             gf_rdma_chunktype_t type, uint32_t **ptr,</div><div class='add'>+                             gf_rdma_request_context_t *request_ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret      = -1;</div><div class='del'>-        int                pos      = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, peer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, entry, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, *ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='del'>-</div><div class='del'>-        request_ctx-&gt;iobref = iobref_ref (entry-&gt;iobref);</div><div class='del'>-</div><div class='del'>-        if (type == gf_rdma_areadch) {</div><div class='del'>-                pos = 0;</div><div class='del'>-                ret = __gf_rdma_create_read_chunks_from_vector (peer,</div><div class='del'>-                                                                (gf_rdma_read_chunk_t **)ptr,</div><div class='del'>-                                                                &amp;pos,</div><div class='del'>-                                                                entry-&gt;rpchdr,</div><div class='del'>-                                                                entry-&gt;rpchdr_count,</div><div class='del'>-                                                                request_ctx);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='del'>-                                "cannot create read chunks from vector "</div><div class='del'>-                                "entry-&gt;rpchdr");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int pos = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, peer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, entry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, *ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='add'>+</div><div class='add'>+    request_ctx-&gt;iobref = iobref_ref(entry-&gt;iobref);</div><div class='add'>+</div><div class='add'>+    if (type == gf_rdma_areadch) {</div><div class='add'>+        pos = 0;</div><div class='add'>+        ret = __gf_rdma_create_read_chunks_from_vector(</div><div class='add'>+            peer, (gf_rdma_read_chunk_t **)ptr, &amp;pos, entry-&gt;rpchdr,</div><div class='add'>+            entry-&gt;rpchdr_count, request_ctx);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='add'>+                   "cannot create read chunks from vector "</div><div class='add'>+                   "entry-&gt;rpchdr");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = __gf_rdma_create_read_chunks_from_vector (peer,</div><div class='del'>-                                                                (gf_rdma_read_chunk_t **)ptr,</div><div class='del'>-                                                                &amp;pos,</div><div class='del'>-                                                                entry-&gt;proghdr,</div><div class='del'>-                                                                entry-&gt;proghdr_count,</div><div class='del'>-                                                                request_ctx);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='del'>-                                "cannot create read chunks from vector "</div><div class='del'>-                                "entry-&gt;proghdr");</div><div class='del'>-                }</div><div class='add'>+        ret = __gf_rdma_create_read_chunks_from_vector(</div><div class='add'>+            peer, (gf_rdma_read_chunk_t **)ptr, &amp;pos, entry-&gt;proghdr,</div><div class='add'>+            entry-&gt;proghdr_count, request_ctx);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='add'>+                   "cannot create read chunks from vector "</div><div class='add'>+                   "entry-&gt;proghdr");</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (entry-&gt;prog_payload_count != 0) {</div><div class='del'>-                        ret = __gf_rdma_create_read_chunks_from_vector (peer,</div><div class='del'>-                                                                        (gf_rdma_read_chunk_t **)ptr,</div><div class='del'>-                                                                        &amp;pos,</div><div class='del'>-                                                                        entry-&gt;prog_payload,</div><div class='del'>-                                                                        entry-&gt;prog_payload_count,</div><div class='del'>-                                                                        request_ctx);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                        RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='del'>-                                        "cannot create read chunks from vector"</div><div class='del'>-                                        " entry-&gt;prog_payload");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                pos = iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='del'>-                ret = __gf_rdma_create_read_chunks_from_vector (peer,</div><div class='del'>-                                                                (gf_rdma_read_chunk_t **)ptr,</div><div class='del'>-                                                                &amp;pos,</div><div class='del'>-                                                                entry-&gt;prog_payload,</div><div class='del'>-                                                                entry-&gt;prog_payload_count,</div><div class='del'>-                                                                request_ctx);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='del'>-                                "cannot create read chunks from vector "</div><div class='del'>-                                "entry-&gt;prog_payload");</div><div class='del'>-                }</div><div class='add'>+        if (entry-&gt;prog_payload_count != 0) {</div><div class='add'>+            ret = __gf_rdma_create_read_chunks_from_vector(</div><div class='add'>+                peer, (gf_rdma_read_chunk_t **)ptr, &amp;pos, entry-&gt;prog_payload,</div><div class='add'>+                entry-&gt;prog_payload_count, request_ctx);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='add'>+                       "cannot create read chunks from vector"</div><div class='add'>+                       " entry-&gt;prog_payload");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        pos = iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+        ret = __gf_rdma_create_read_chunks_from_vector(</div><div class='add'>+            peer, (gf_rdma_read_chunk_t **)ptr, &amp;pos, entry-&gt;prog_payload,</div><div class='add'>+            entry-&gt;prog_payload_count, request_ctx);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_READ_CHUNK_VECTOR_FAILED,</div><div class='add'>+                   "cannot create read chunks from vector "</div><div class='add'>+                   "entry-&gt;prog_payload");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* terminate read-chunk list*/</div><div class='del'>-        **ptr = 0;</div><div class='del'>-        *ptr = *ptr + 1;</div><div class='add'>+    /* terminate read-chunk list*/</div><div class='add'>+    **ptr = 0;</div><div class='add'>+    *ptr = *ptr + 1;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_create_write_chunks_from_vector (gf_rdma_peer_t *peer,</div><div class='del'>-                                           gf_rdma_write_chunk_t **writech_ptr,</div><div class='del'>-                                           struct iovec *vector, int count,</div><div class='del'>-                                           gf_rdma_request_context_t *request_ctx)</div><div class='add'>+__gf_rdma_create_write_chunks_from_vector(</div><div class='add'>+    gf_rdma_peer_t *peer, gf_rdma_write_chunk_t **writech_ptr,</div><div class='add'>+    struct iovec *vector, int count, gf_rdma_request_context_t *request_ctx)</div><div class='ctx'> {</div><div class='del'>-        int                    i       = 0;</div><div class='del'>-        gf_rdma_private_t     *priv    = NULL;</div><div class='del'>-        gf_rdma_device_t      *device  = NULL;</div><div class='del'>-        struct ibv_mr         *mr      = NULL;</div><div class='del'>-        gf_rdma_write_chunk_t *writech = NULL;</div><div class='del'>-        int32_t                ret     = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    struct ibv_mr *mr = NULL;</div><div class='add'>+    gf_rdma_write_chunk_t *writech = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, peer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, writech_ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, *writech_ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, vector, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, peer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, writech_ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, *writech_ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, vector, out);</div><div class='ctx'> </div><div class='del'>-        writech = *writech_ptr;</div><div class='add'>+    writech = *writech_ptr;</div><div class='ctx'> </div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='ctx'> </div><div class='del'>-                mr = gf_rdma_get_pre_registred_mr(peer-&gt;trans,</div><div class='del'>-                                (void *)vector[i].iov_base, vector[i].iov_len);</div><div class='del'>-                if (!mr) {</div><div class='del'>-                mr = ibv_reg_mr (device-&gt;pd, vector[i].iov_base,</div><div class='del'>-                                 vector[i].iov_len,</div><div class='del'>-                                 IBV_ACCESS_REMOTE_WRITE</div><div class='del'>-                                 | IBV_ACCESS_LOCAL_WRITE);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        mr = gf_rdma_get_pre_registred_mr(</div><div class='add'>+            peer-&gt;trans, (void *)vector[i].iov_base, vector[i].iov_len);</div><div class='add'>+        if (!mr) {</div><div class='add'>+            mr = ibv_reg_mr(device-&gt;pd, vector[i].iov_base, vector[i].iov_len,</div><div class='add'>+                            IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_LOCAL_WRITE);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!mr) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='del'>-                                RDMA_MSG_MR_ALOC_FAILED, "memory "</div><div class='del'>-                                "registration failed (peer:%s)",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (!mr) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='add'>+                   RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                   "memory "</div><div class='add'>+                   "registration failed (peer:%s)",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                request_ctx-&gt;mr[request_ctx-&gt;mr_count++] = mr;</div><div class='add'>+        request_ctx-&gt;mr[request_ctx-&gt;mr_count++] = mr;</div><div class='ctx'> </div><div class='del'>-                writech-&gt;wc_target.rs_handle = hton32 (mr-&gt;rkey);</div><div class='del'>-                writech-&gt;wc_target.rs_length = hton32 (vector[i].iov_len);</div><div class='del'>-                writech-&gt;wc_target.rs_offset</div><div class='del'>-                        = hton64 (((uint64_t)(unsigned long)vector[i].iov_base));</div><div class='add'>+        writech-&gt;wc_target.rs_handle = hton32(mr-&gt;rkey);</div><div class='add'>+        writech-&gt;wc_target.rs_length = hton32(vector[i].iov_len);</div><div class='add'>+        writech-&gt;wc_target.rs_offset = hton64(</div><div class='add'>+            ((uint64_t)(unsigned long)vector[i].iov_base));</div><div class='ctx'> </div><div class='del'>-                writech++;</div><div class='del'>-        }</div><div class='add'>+        writech++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *writech_ptr = writech;</div><div class='add'>+    *writech_ptr = writech;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_create_write_chunks (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                               gf_rdma_chunktype_t chunk_type, uint32_t **ptr,</div><div class='del'>-                               gf_rdma_request_context_t *request_ctx)</div><div class='add'>+__gf_rdma_create_write_chunks(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                              gf_rdma_chunktype_t chunk_type, uint32_t **ptr,</div><div class='add'>+                              gf_rdma_request_context_t *request_ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t                ret    = -1;</div><div class='del'>-        gf_rdma_write_array_t *warray = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, peer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, *ptr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, entry, out);</div><div class='del'>-</div><div class='del'>-        if ((chunk_type == gf_rdma_replych)</div><div class='del'>-            &amp;&amp; ((entry-&gt;msg.request.rsphdr_count != 1) ||</div><div class='del'>-                (entry-&gt;msg.request.rsphdr_vec[0].iov_base == NULL))) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_BUFFER_ERROR,</div><div class='del'>-                        (entry-&gt;msg.request.rsphdr_count == 1)</div><div class='del'>-                        ? "chunktype specified as reply chunk but the vector "</div><div class='del'>-                        "specifying the buffer to be used for holding reply"</div><div class='del'>-                        " header is not correct" :</div><div class='del'>-                        "chunktype specified as reply chunk, but more than one "</div><div class='del'>-                        "buffer provided for holding reply");</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_write_array_t *warray = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, peer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, *ptr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, request_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, entry, out);</div><div class='add'>+</div><div class='add'>+    if ((chunk_type == gf_rdma_replych) &amp;&amp;</div><div class='add'>+        ((entry-&gt;msg.request.rsphdr_count != 1) ||</div><div class='add'>+         (entry-&gt;msg.request.rsphdr_vec[0].iov_base == NULL))) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_BUFFER_ERROR,</div><div class='add'>+               (entry-&gt;msg.request.rsphdr_count == 1)</div><div class='add'>+                   ? "chunktype specified as reply chunk but the vector "</div><div class='add'>+                     "specifying the buffer to be used for holding reply"</div><div class='add'>+                     " header is not correct"</div><div class='add'>+                   : "chunktype specified as reply chunk, but more than one "</div><div class='add'>+                     "buffer provided for holding reply");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+      if ((chunk_type == gf_rdma_writech)</div><div class='add'>+      &amp;&amp; ((entry-&gt;msg.request.rsphdr_count == 0)</div><div class='add'>+      || (entry-&gt;msg.request.rsphdr_vec[0].iov_base == NULL))) {</div><div class='add'>+      gf_msg_debug (GF_RDMA_LOG_NAME, 0,</div><div class='add'>+      "vector specifying buffer to hold the program's reply "</div><div class='add'>+      "header should also be provided when buffers are "</div><div class='add'>+      "provided for holding the program's payload in reply");</div><div class='add'>+      goto out;</div><div class='add'>+      }</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    if (chunk_type == gf_rdma_writech) {</div><div class='add'>+        warray = (gf_rdma_write_array_t *)*ptr;</div><div class='add'>+        warray-&gt;wc_discrim = hton32(1);</div><div class='add'>+        warray-&gt;wc_nchunks = hton32(entry-&gt;msg.request.rsp_payload_count);</div><div class='add'>+</div><div class='add'>+        *ptr = (uint32_t *)&amp;warray-&gt;wc_array[0];</div><div class='add'>+</div><div class='add'>+        ret = __gf_rdma_create_write_chunks_from_vector(</div><div class='add'>+            peer, (gf_rdma_write_chunk_t **)ptr, entry-&gt;msg.request.rsp_payload,</div><div class='add'>+            entry-&gt;msg.request.rsp_payload_count, request_ctx);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_WRITE_CHUNK_VECTOR_FAILED,</div><div class='add'>+                   "cannot create write chunks from vector "</div><div class='add'>+                   "entry-&gt;rpc_payload");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>-  if ((chunk_type == gf_rdma_writech)</div><div class='del'>-  &amp;&amp; ((entry-&gt;msg.request.rsphdr_count == 0)</div><div class='del'>-  || (entry-&gt;msg.request.rsphdr_vec[0].iov_base == NULL))) {</div><div class='del'>-  gf_msg_debug (GF_RDMA_LOG_NAME, 0,</div><div class='del'>-  "vector specifying buffer to hold the program's reply "</div><div class='del'>-  "header should also be provided when buffers are "</div><div class='del'>-  "provided for holding the program's payload in reply");</div><div class='del'>-  goto out;</div><div class='del'>-  }</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-        if (chunk_type == gf_rdma_writech) {</div><div class='del'>-                warray = (gf_rdma_write_array_t *)*ptr;</div><div class='del'>-                warray-&gt;wc_discrim = hton32 (1);</div><div class='del'>-                warray-&gt;wc_nchunks</div><div class='del'>-                        = hton32 (entry-&gt;msg.request.rsp_payload_count);</div><div class='del'>-</div><div class='del'>-                *ptr = (uint32_t *)&amp;warray-&gt;wc_array[0];</div><div class='del'>-</div><div class='del'>-                ret = __gf_rdma_create_write_chunks_from_vector (peer,</div><div class='del'>-                                                                 (gf_rdma_write_chunk_t **)ptr,</div><div class='del'>-                                                                 entry-&gt;msg.request.rsp_payload,</div><div class='del'>-                                                                 entry-&gt;msg.request.rsp_payload_count,</div><div class='del'>-                                                                 request_ctx);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_WRITE_CHUNK_VECTOR_FAILED,</div><div class='del'>-                                "cannot create write chunks from vector "</div><div class='del'>-                                "entry-&gt;rpc_payload");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* terminate write chunklist */</div><div class='del'>-                **ptr = 0;</div><div class='del'>-                *ptr = *ptr + 1;</div><div class='del'>-</div><div class='del'>-                /* no reply chunklist */</div><div class='del'>-                **ptr = 0;</div><div class='del'>-                *ptr = *ptr + 1;</div><div class='del'>-        } else {</div><div class='del'>-                /* no write chunklist */</div><div class='del'>-                **ptr = 0;</div><div class='del'>-                *ptr = *ptr + 1;</div><div class='add'>+        /* terminate write chunklist */</div><div class='add'>+        **ptr = 0;</div><div class='add'>+        *ptr = *ptr + 1;</div><div class='ctx'> </div><div class='del'>-                warray = (gf_rdma_write_array_t *)*ptr;</div><div class='del'>-                warray-&gt;wc_discrim = hton32 (1);</div><div class='del'>-                warray-&gt;wc_nchunks = hton32 (entry-&gt;msg.request.rsphdr_count);</div><div class='add'>+        /* no reply chunklist */</div><div class='add'>+        **ptr = 0;</div><div class='add'>+        *ptr = *ptr + 1;</div><div class='add'>+    } else {</div><div class='add'>+        /* no write chunklist */</div><div class='add'>+        **ptr = 0;</div><div class='add'>+        *ptr = *ptr + 1;</div><div class='ctx'> </div><div class='del'>-                *ptr = (uint32_t *)&amp;warray-&gt;wc_array[0];</div><div class='add'>+        warray = (gf_rdma_write_array_t *)*ptr;</div><div class='add'>+        warray-&gt;wc_discrim = hton32(1);</div><div class='add'>+        warray-&gt;wc_nchunks = hton32(entry-&gt;msg.request.rsphdr_count);</div><div class='ctx'> </div><div class='del'>-                ret = __gf_rdma_create_write_chunks_from_vector (peer,</div><div class='del'>-                                                                 (gf_rdma_write_chunk_t **)ptr,</div><div class='del'>-                                                                 entry-&gt;msg.request.rsphdr_vec,</div><div class='del'>-                                                                 entry-&gt;msg.request.rsphdr_count,</div><div class='del'>-                                                                 request_ctx);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_WRITE_CHUNK_VECTOR_FAILED,</div><div class='del'>-                                "cannot create write chunks from vector "</div><div class='del'>-                                "entry-&gt;rpchdr");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        *ptr = (uint32_t *)&amp;warray-&gt;wc_array[0];</div><div class='ctx'> </div><div class='del'>-                /* terminate reply chunklist */</div><div class='del'>-                **ptr = 0;</div><div class='del'>-                *ptr = *ptr + 1;</div><div class='add'>+        ret = __gf_rdma_create_write_chunks_from_vector(</div><div class='add'>+            peer, (gf_rdma_write_chunk_t **)ptr, entry-&gt;msg.request.rsphdr_vec,</div><div class='add'>+            entry-&gt;msg.request.rsphdr_count, request_ctx);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_WRITE_CHUNK_VECTOR_FAILED,</div><div class='add'>+                   "cannot create write chunks from vector "</div><div class='add'>+                   "entry-&gt;rpchdr");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        /* terminate reply chunklist */</div><div class='add'>+        **ptr = 0;</div><div class='add'>+        *ptr = *ptr + 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__gf_rdma_deregister_mr (gf_rdma_device_t *device,</div><div class='del'>-                         struct ibv_mr **mr, int count)</div><div class='add'>+__gf_rdma_deregister_mr(gf_rdma_device_t *device, struct ibv_mr **mr, int count)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_arena_mr    *tmp   = NULL;</div><div class='del'>-        gf_rdma_arena_mr    *dummy = NULL;</div><div class='del'>-        int                  i     = 0;</div><div class='del'>-        int                  found = 0;</div><div class='del'>-</div><div class='del'>-               if (mr == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                 found = 0;</div><div class='del'>-                 pthread_mutex_lock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                 {</div><div class='del'>-                         if (!list_empty(&amp;device-&gt;all_mr)) {</div><div class='del'>-                                list_for_each_entry_safe (tmp, dummy, &amp;device-&gt;all_mr, list) {</div><div class='del'>-                                        if (tmp-&gt;mr == mr[i]) {</div><div class='del'>-                                                found = 1;</div><div class='del'>-                                                break;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                         }</div><div class='add'>+    gf_rdma_arena_mr *tmp = NULL;</div><div class='add'>+    gf_rdma_arena_mr *dummy = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int found = 0;</div><div class='add'>+</div><div class='add'>+    if (mr == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        found = 0;</div><div class='add'>+        pthread_mutex_lock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+        {</div><div class='add'>+            if (!list_empty(&amp;device-&gt;all_mr)) {</div><div class='add'>+                list_for_each_entry_safe(tmp, dummy, &amp;device-&gt;all_mr, list)</div><div class='add'>+                {</div><div class='add'>+                    if (tmp-&gt;mr == mr[i]) {</div><div class='add'>+                        found = 1;</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                pthread_mutex_unlock (&amp;device-&gt;all_mr_lock);</div><div class='del'>-                if (!found)</div><div class='del'>-                        ibv_dereg_mr (mr[i]);</div><div class='del'>-</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;device-&gt;all_mr_lock);</div><div class='add'>+        if (!found)</div><div class='add'>+            ibv_dereg_mr(mr[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_quota_put (gf_rdma_peer_t *peer)</div><div class='add'>+__gf_rdma_quota_put(gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        peer-&gt;quota++;</div><div class='del'>-        ret = peer-&gt;quota;</div><div class='add'>+    peer-&gt;quota++;</div><div class='add'>+    ret = peer-&gt;quota;</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (&amp;peer-&gt;ioq)) {</div><div class='del'>-                ret = __gf_rdma_ioq_churn (peer);</div><div class='del'>-        }</div><div class='add'>+    if (!list_empty(&amp;peer-&gt;ioq)) {</div><div class='add'>+        ret = __gf_rdma_ioq_churn(peer);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_quota_put (gf_rdma_peer_t *peer)</div><div class='add'>+gf_rdma_quota_put(gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret  = 0;</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                ret = __gf_rdma_quota_put (peer);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = __gf_rdma_quota_put(peer);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* to be called with priv-&gt;mutex held */</div><div class='ctx'> void</div><div class='del'>-__gf_rdma_request_context_destroy (gf_rdma_request_context_t *context)</div><div class='add'>+__gf_rdma_request_context_destroy(gf_rdma_request_context_t *context)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_peer_t    *peer   = NULL;</div><div class='del'>-        gf_rdma_private_t *priv   = NULL;</div><div class='del'>-        gf_rdma_device_t  *device = NULL;</div><div class='del'>-        int32_t            ret    = 0;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (context == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        peer = context-&gt;peer;</div><div class='add'>+    if (context == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-        __gf_rdma_deregister_mr (device, context-&gt;mr, context-&gt;mr_count);</div><div class='add'>+    peer = context-&gt;peer;</div><div class='ctx'> </div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+    __gf_rdma_deregister_mr(device, context-&gt;mr, context-&gt;mr_count);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;connected) {</div><div class='del'>-                ret = __gf_rdma_quota_put (peer);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_debug ("rdma", 0, "failed to send message");</div><div class='del'>-                        mem_put (context);</div><div class='del'>-                        __gf_rdma_disconnect (peer-&gt;trans);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;connected) {</div><div class='add'>+        ret = __gf_rdma_quota_put(peer);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg_debug("rdma", 0, "failed to send message");</div><div class='add'>+            mem_put(context);</div><div class='add'>+            __gf_rdma_disconnect(peer-&gt;trans);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (context-&gt;iobref != NULL) {</div><div class='del'>-                iobref_unref (context-&gt;iobref);</div><div class='del'>-                context-&gt;iobref = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (context-&gt;iobref != NULL) {</div><div class='add'>+        iobref_unref(context-&gt;iobref);</div><div class='add'>+        context-&gt;iobref = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (context-&gt;rsp_iobref != NULL) {</div><div class='del'>-                iobref_unref (context-&gt;rsp_iobref);</div><div class='del'>-                context-&gt;rsp_iobref = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (context-&gt;rsp_iobref != NULL) {</div><div class='add'>+        iobref_unref(context-&gt;rsp_iobref);</div><div class='add'>+        context-&gt;rsp_iobref = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mem_put (context);</div><div class='add'>+    mem_put(context);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_rdma_post_context_destroy (gf_rdma_device_t *device,</div><div class='del'>-                              gf_rdma_post_context_t *ctx)</div><div class='add'>+gf_rdma_post_context_destroy(gf_rdma_device_t *device,</div><div class='add'>+                             gf_rdma_post_context_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __gf_rdma_deregister_mr (device, ctx-&gt;mr, ctx-&gt;mr_count);</div><div class='add'>+    __gf_rdma_deregister_mr(device, ctx-&gt;mr, ctx-&gt;mr_count);</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;iobref != NULL) {</div><div class='del'>-                iobref_unref (ctx-&gt;iobref);</div><div class='del'>-        }</div><div class='add'>+    if (ctx-&gt;iobref != NULL) {</div><div class='add'>+        iobref_unref(ctx-&gt;iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ctx-&gt;hdr_iobuf != NULL) {</div><div class='del'>-                iobuf_unref (ctx-&gt;hdr_iobuf);</div><div class='del'>-        }</div><div class='add'>+    if (ctx-&gt;hdr_iobuf != NULL) {</div><div class='add'>+        iobuf_unref(ctx-&gt;hdr_iobuf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (ctx, 0, sizeof (*ctx));</div><div class='add'>+    memset(ctx, 0, sizeof(*ctx));</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_rdma_post_unref (gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_post_unref(gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        int refcount = -1;</div><div class='del'>-</div><div class='del'>-        if (post == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;post-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                refcount = --post-&gt;refcount;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;post-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (refcount == 0) {</div><div class='del'>-                gf_rdma_post_context_destroy (post-&gt;device, &amp;post-&gt;ctx);</div><div class='del'>-                if (post-&gt;type == GF_RDMA_SEND_POST) {</div><div class='del'>-                        gf_rdma_put_post (&amp;post-&gt;device-&gt;sendq, post);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_rdma_post_recv (post-&gt;device-&gt;srq, post);</div><div class='del'>-                }</div><div class='add'>+    int refcount = -1;</div><div class='add'>+</div><div class='add'>+    if (post == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;post-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        refcount = --post-&gt;refcount;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;post-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (refcount == 0) {</div><div class='add'>+        gf_rdma_post_context_destroy(post-&gt;device, &amp;post-&gt;ctx);</div><div class='add'>+        if (post-&gt;type == GF_RDMA_SEND_POST) {</div><div class='add'>+            gf_rdma_put_post(&amp;post-&gt;device-&gt;sendq, post);</div><div class='add'>+        } else {</div><div class='add'>+            gf_rdma_post_recv(post-&gt;device-&gt;srq, post);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return refcount;</div><div class='add'>+    return refcount;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_rdma_post_get_refcount (gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_post_get_refcount(gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        int refcount = -1;</div><div class='add'>+    int refcount = -1;</div><div class='ctx'> </div><div class='del'>-        if (post == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (post == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;post-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                refcount = post-&gt;refcount;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;post-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;post-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        refcount = post-&gt;refcount;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;post-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return refcount;</div><div class='add'>+    return refcount;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_rdma_post_t *</div><div class='del'>-gf_rdma_post_ref (gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_post_ref(gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        if (post == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (post == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;post-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                post-&gt;refcount++;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;post-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;post-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        post-&gt;refcount++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;post-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return post;</div><div class='add'>+    return post;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_ioq_churn_request (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                             gf_rdma_post_t *post)</div><div class='add'>+__gf_rdma_ioq_churn_request(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                            gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_chunktype_t        rtype               = gf_rdma_noch;</div><div class='del'>-        gf_rdma_chunktype_t        wtype               = gf_rdma_noch;</div><div class='del'>-        uint64_t                   send_size           = 0;</div><div class='del'>-        gf_rdma_header_t          *hdr                 = NULL;</div><div class='del'>-        struct rpc_msg            *rpc_msg             = NULL;</div><div class='del'>-        uint32_t                  *chunkptr            = NULL;</div><div class='del'>-        char                      *buf                 = NULL;</div><div class='del'>-        int32_t                    ret                 = 0;</div><div class='del'>-        gf_rdma_private_t         *priv                = NULL;</div><div class='del'>-        gf_rdma_device_t          *device              = NULL;</div><div class='del'>-        int                        chunk_count         = 0;</div><div class='del'>-        gf_rdma_request_context_t *request_ctx         = NULL;</div><div class='del'>-        uint32_t                   prog_payload_length = 0, len = 0;</div><div class='del'>-        struct rpc_req            *rpc_req             = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, peer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, entry, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, post, out);</div><div class='del'>-</div><div class='del'>-        if ((entry-&gt;msg.request.rsphdr_count != 0)</div><div class='del'>-            &amp;&amp; (entry-&gt;msg.request.rsp_payload_count != 0)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_WRITE_REPLY_CHUNCK_CONFLICT,</div><div class='del'>-                        "both write-chunklist and reply-chunk cannot be "</div><div class='del'>-                        "present");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        post-&gt;ctx.is_request = 1;</div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        hdr = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-</div><div class='del'>-        send_size = iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count)</div><div class='del'>-                + iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count)</div><div class='del'>-                + GLUSTERFS_RDMA_MAX_HEADER_SIZE;</div><div class='del'>-</div><div class='del'>-        if (entry-&gt;prog_payload_count != 0) {</div><div class='del'>-                prog_payload_length</div><div class='del'>-                        = iov_length (entry-&gt;prog_payload,</div><div class='del'>-                                      entry-&gt;prog_payload_count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (send_size &gt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='del'>-                rtype = gf_rdma_areadch;</div><div class='del'>-        } else if ((send_size + prog_payload_length)</div><div class='del'>-                   &lt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='del'>-                rtype = gf_rdma_noch;</div><div class='del'>-        } else if (entry-&gt;prog_payload_count != 0) {</div><div class='del'>-                rtype = gf_rdma_readch;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (entry-&gt;msg.request.rsphdr_count != 0) {</div><div class='del'>-                wtype = gf_rdma_replych;</div><div class='del'>-        } else if (entry-&gt;msg.request.rsp_payload_count != 0) {</div><div class='del'>-                wtype = gf_rdma_writech;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rtype == gf_rdma_readch) {</div><div class='del'>-                chunk_count += entry-&gt;prog_payload_count;</div><div class='del'>-        } else if (rtype == gf_rdma_areadch) {</div><div class='del'>-                chunk_count += entry-&gt;rpchdr_count;</div><div class='del'>-                chunk_count += entry-&gt;proghdr_count;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (wtype == gf_rdma_writech) {</div><div class='del'>-                chunk_count += entry-&gt;msg.request.rsp_payload_count;</div><div class='del'>-        } else if (wtype == gf_rdma_replych) {</div><div class='del'>-                chunk_count += entry-&gt;msg.request.rsphdr_count;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (chunk_count &gt; GF_RDMA_MAX_SEGMENTS) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_CHUNK_COUNT_GREAT_MAX_SEGMENTS,</div><div class='del'>-                        "chunk count(%d) exceeding maximum allowed RDMA "</div><div class='del'>-                        "segment count(%d)", chunk_count, GF_RDMA_MAX_SEGMENTS);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((wtype != gf_rdma_noch) || (rtype != gf_rdma_noch)) {</div><div class='del'>-                request_ctx = mem_get (device-&gt;request_ctx_pool);</div><div class='del'>-                if (request_ctx == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                memset (request_ctx, 0, sizeof (*request_ctx));</div><div class='del'>-</div><div class='del'>-                request_ctx-&gt;pool = device-&gt;request_ctx_pool;</div><div class='del'>-                request_ctx-&gt;peer = peer;</div><div class='del'>-</div><div class='del'>-                entry-&gt;msg.request.rpc_req-&gt;conn_private = request_ctx;</div><div class='del'>-</div><div class='del'>-                if (entry-&gt;msg.request.rsp_iobref != NULL) {</div><div class='del'>-                        request_ctx-&gt;rsp_iobref</div><div class='del'>-                                = iobref_ref (entry-&gt;msg.request.rsp_iobref);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rpc_msg = (struct rpc_msg *) entry-&gt;rpchdr[0].iov_base;</div><div class='del'>-</div><div class='del'>-        hdr-&gt;rm_xid    = rpc_msg-&gt;rm_xid; /* no need of hton32(rpc_msg-&gt;rm_xid),</div><div class='del'>-                                           * since rpc_msg-&gt;rm_xid is already</div><div class='del'>-                                           * hton32ed value of actual xid</div><div class='del'>-                                           */</div><div class='del'>-        hdr-&gt;rm_vers   = hton32 (GF_RDMA_VERSION);</div><div class='del'>-        hdr-&gt;rm_credit = hton32 (peer-&gt;send_count);</div><div class='del'>-        if (rtype == gf_rdma_areadch) {</div><div class='del'>-                hdr-&gt;rm_type = hton32 (GF_RDMA_NOMSG);</div><div class='del'>-        } else {</div><div class='del'>-                hdr-&gt;rm_type   = hton32 (GF_RDMA_MSG);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        chunkptr = &amp;hdr-&gt;rm_body.rm_chunks[0];</div><div class='del'>-        if (rtype != gf_rdma_noch) {</div><div class='del'>-                ret = __gf_rdma_create_read_chunks (peer, entry, rtype,</div><div class='del'>-                                                    &amp;chunkptr,</div><div class='del'>-                                                    request_ctx);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_CREATE_READ_CHUNK_FAILED,</div><div class='del'>-                                "creation of read chunks failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                *chunkptr++ = 0; /* no read chunks */</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (wtype != gf_rdma_noch) {</div><div class='del'>-                ret = __gf_rdma_create_write_chunks (peer, entry, wtype,</div><div class='del'>-                                                     &amp;chunkptr,</div><div class='del'>-                                                     request_ctx);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_CREATE_WRITE_REPLAY_FAILED,</div><div class='del'>-                                "creation of write/reply chunk failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                *chunkptr++ = 0; /* no write chunks */</div><div class='del'>-                *chunkptr++ = 0; /* no reply chunk */</div><div class='add'>+    gf_rdma_chunktype_t rtype = gf_rdma_noch;</div><div class='add'>+    gf_rdma_chunktype_t wtype = gf_rdma_noch;</div><div class='add'>+    uint64_t send_size = 0;</div><div class='add'>+    gf_rdma_header_t *hdr = NULL;</div><div class='add'>+    struct rpc_msg *rpc_msg = NULL;</div><div class='add'>+    uint32_t *chunkptr = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    int chunk_count = 0;</div><div class='add'>+    gf_rdma_request_context_t *request_ctx = NULL;</div><div class='add'>+    uint32_t prog_payload_length = 0, len = 0;</div><div class='add'>+    struct rpc_req *rpc_req = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, peer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, entry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, post, out);</div><div class='add'>+</div><div class='add'>+    if ((entry-&gt;msg.request.rsphdr_count != 0) &amp;&amp;</div><div class='add'>+        (entry-&gt;msg.request.rsp_payload_count != 0)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_WRITE_REPLY_CHUNCK_CONFLICT,</div><div class='add'>+               "both write-chunklist and reply-chunk cannot be "</div><div class='add'>+               "present");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    post-&gt;ctx.is_request = 1;</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+</div><div class='add'>+    hdr = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+</div><div class='add'>+    send_size = iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count) +</div><div class='add'>+                iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count) +</div><div class='add'>+                GLUSTERFS_RDMA_MAX_HEADER_SIZE;</div><div class='add'>+</div><div class='add'>+    if (entry-&gt;prog_payload_count != 0) {</div><div class='add'>+        prog_payload_length = iov_length(entry-&gt;prog_payload,</div><div class='add'>+                                         entry-&gt;prog_payload_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (send_size &gt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='add'>+        rtype = gf_rdma_areadch;</div><div class='add'>+    } else if ((send_size + prog_payload_length) &lt;</div><div class='add'>+               GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='add'>+        rtype = gf_rdma_noch;</div><div class='add'>+    } else if (entry-&gt;prog_payload_count != 0) {</div><div class='add'>+        rtype = gf_rdma_readch;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (entry-&gt;msg.request.rsphdr_count != 0) {</div><div class='add'>+        wtype = gf_rdma_replych;</div><div class='add'>+    } else if (entry-&gt;msg.request.rsp_payload_count != 0) {</div><div class='add'>+        wtype = gf_rdma_writech;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rtype == gf_rdma_readch) {</div><div class='add'>+        chunk_count += entry-&gt;prog_payload_count;</div><div class='add'>+    } else if (rtype == gf_rdma_areadch) {</div><div class='add'>+        chunk_count += entry-&gt;rpchdr_count;</div><div class='add'>+        chunk_count += entry-&gt;proghdr_count;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (wtype == gf_rdma_writech) {</div><div class='add'>+        chunk_count += entry-&gt;msg.request.rsp_payload_count;</div><div class='add'>+    } else if (wtype == gf_rdma_replych) {</div><div class='add'>+        chunk_count += entry-&gt;msg.request.rsphdr_count;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (chunk_count &gt; GF_RDMA_MAX_SEGMENTS) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_CHUNK_COUNT_GREAT_MAX_SEGMENTS,</div><div class='add'>+               "chunk count(%d) exceeding maximum allowed RDMA "</div><div class='add'>+               "segment count(%d)",</div><div class='add'>+               chunk_count, GF_RDMA_MAX_SEGMENTS);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((wtype != gf_rdma_noch) || (rtype != gf_rdma_noch)) {</div><div class='add'>+        request_ctx = mem_get(device-&gt;request_ctx_pool);</div><div class='add'>+        if (request_ctx == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        memset(request_ctx, 0, sizeof(*request_ctx));</div><div class='add'>+</div><div class='add'>+        request_ctx-&gt;pool = device-&gt;request_ctx_pool;</div><div class='add'>+        request_ctx-&gt;peer = peer;</div><div class='add'>+</div><div class='add'>+        entry-&gt;msg.request.rpc_req-&gt;conn_private = request_ctx;</div><div class='add'>+</div><div class='add'>+        if (entry-&gt;msg.request.rsp_iobref != NULL) {</div><div class='add'>+            request_ctx-&gt;rsp_iobref = iobref_ref(entry-&gt;msg.request.rsp_iobref);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc_msg = (struct rpc_msg *)entry-&gt;rpchdr[0].iov_base;</div><div class='add'>+</div><div class='add'>+    hdr-&gt;rm_xid = rpc_msg-&gt;rm_xid; /* no need of hton32(rpc_msg-&gt;rm_xid),</div><div class='add'>+                                    * since rpc_msg-&gt;rm_xid is already</div><div class='add'>+                                    * hton32ed value of actual xid</div><div class='add'>+                                    */</div><div class='add'>+    hdr-&gt;rm_vers = hton32(GF_RDMA_VERSION);</div><div class='add'>+    hdr-&gt;rm_credit = hton32(peer-&gt;send_count);</div><div class='add'>+    if (rtype == gf_rdma_areadch) {</div><div class='add'>+        hdr-&gt;rm_type = hton32(GF_RDMA_NOMSG);</div><div class='add'>+    } else {</div><div class='add'>+        hdr-&gt;rm_type = hton32(GF_RDMA_MSG);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    chunkptr = &amp;hdr-&gt;rm_body.rm_chunks[0];</div><div class='add'>+    if (rtype != gf_rdma_noch) {</div><div class='add'>+        ret = __gf_rdma_create_read_chunks(peer, entry, rtype, &amp;chunkptr,</div><div class='add'>+                                           request_ctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_CREATE_READ_CHUNK_FAILED,</div><div class='add'>+                   "creation of read chunks failed");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        *chunkptr++ = 0; /* no read chunks */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (wtype != gf_rdma_noch) {</div><div class='add'>+        ret = __gf_rdma_create_write_chunks(peer, entry, wtype, &amp;chunkptr,</div><div class='add'>+                                            request_ctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_CREATE_WRITE_REPLAY_FAILED,</div><div class='add'>+                   "creation of write/reply chunk failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        *chunkptr++ = 0; /* no write chunks */</div><div class='add'>+        *chunkptr++ = 0; /* no reply chunk */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        buf = (char *)chunkptr;</div><div class='add'>+    buf = (char *)chunkptr;</div><div class='ctx'> </div><div class='del'>-        if (rtype != gf_rdma_areadch) {</div><div class='del'>-                iov_unload (buf, entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='del'>-                buf += iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+    if (rtype != gf_rdma_areadch) {</div><div class='add'>+        iov_unload(buf, entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+        buf += iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='ctx'> </div><div class='del'>-                iov_unload (buf, entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='del'>-                buf += iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+        iov_unload(buf, entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+        buf += iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='ctx'> </div><div class='del'>-                if (rtype != gf_rdma_readch) {</div><div class='del'>-                        iov_unload (buf, entry-&gt;prog_payload,</div><div class='del'>-                                    entry-&gt;prog_payload_count);</div><div class='del'>-                        buf += iov_length (entry-&gt;prog_payload,</div><div class='del'>-                                           entry-&gt;prog_payload_count);</div><div class='del'>-                }</div><div class='add'>+        if (rtype != gf_rdma_readch) {</div><div class='add'>+            iov_unload(buf, entry-&gt;prog_payload, entry-&gt;prog_payload_count);</div><div class='add'>+            buf += iov_length(entry-&gt;prog_payload, entry-&gt;prog_payload_count);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        len = buf - post-&gt;buf;</div><div class='add'>+    len = buf - post-&gt;buf;</div><div class='ctx'> </div><div class='del'>-        gf_rdma_post_ref (post);</div><div class='add'>+    gf_rdma_post_ref(post);</div><div class='ctx'> </div><div class='del'>-        ret = gf_rdma_post_send (peer-&gt;qp, post, len);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = len;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_POST_SEND_FAILED,</div><div class='del'>-                        "gf_rdma_post_send (to %s) failed with ret = %d (%s)",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='del'>-                        (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-                __gf_rdma_disconnect (peer-&gt;trans);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_rdma_post_send(peer-&gt;qp, post, len);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = len;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_POST_SEND_FAILED,</div><div class='add'>+               "gf_rdma_post_send (to %s) failed with ret = %d (%s)",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+               (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+        __gf_rdma_disconnect(peer-&gt;trans);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                rpc_req = entry-&gt;msg.request.rpc_req;</div><div class='del'>-</div><div class='del'>-                if (request_ctx != NULL) {</div><div class='del'>-                        __gf_rdma_request_context_destroy (rpc_req-&gt;conn_private);</div><div class='del'>-                }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        rpc_req = entry-&gt;msg.request.rpc_req;</div><div class='ctx'> </div><div class='del'>-                rpc_req-&gt;conn_private = NULL;</div><div class='add'>+        if (request_ctx != NULL) {</div><div class='add'>+            __gf_rdma_request_context_destroy(rpc_req-&gt;conn_private);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        rpc_req-&gt;conn_private = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__gf_rdma_fill_reply_header (gf_rdma_header_t *header, struct iovec *rpchdr,</div><div class='del'>-                             gf_rdma_reply_info_t *reply_info, int credits)</div><div class='add'>+__gf_rdma_fill_reply_header(gf_rdma_header_t *header, struct iovec *rpchdr,</div><div class='add'>+                            gf_rdma_reply_info_t *reply_info, int credits)</div><div class='ctx'> {</div><div class='del'>-        struct rpc_msg *rpc_msg = NULL;</div><div class='del'>-</div><div class='del'>-        if (reply_info != NULL) {</div><div class='del'>-                header-&gt;rm_xid = hton32 (reply_info-&gt;rm_xid);</div><div class='del'>-        } else {</div><div class='del'>-                rpc_msg = rpchdr[0].iov_base; /* assume rpchdr contains</div><div class='del'>-                                               * only one vector.</div><div class='del'>-                                               * (which is true)</div><div class='del'>-                                               */</div><div class='del'>-                header-&gt;rm_xid = rpc_msg-&gt;rm_xid;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        header-&gt;rm_type = hton32 (GF_RDMA_MSG);</div><div class='del'>-        header-&gt;rm_vers = hton32 (GF_RDMA_VERSION);</div><div class='del'>-        header-&gt;rm_credit = hton32 (credits);</div><div class='del'>-</div><div class='del'>-        header-&gt;rm_body.rm_chunks[0] = 0; /* no read chunks */</div><div class='del'>-        header-&gt;rm_body.rm_chunks[1] = 0; /* no write chunks */</div><div class='del'>-        header-&gt;rm_body.rm_chunks[2] = 0; /* no reply chunks */</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    struct rpc_msg *rpc_msg = NULL;</div><div class='add'>+</div><div class='add'>+    if (reply_info != NULL) {</div><div class='add'>+        header-&gt;rm_xid = hton32(reply_info-&gt;rm_xid);</div><div class='add'>+    } else {</div><div class='add'>+        rpc_msg = rpchdr[0].iov_base; /* assume rpchdr contains</div><div class='add'>+                                       * only one vector.</div><div class='add'>+                                       * (which is true)</div><div class='add'>+                                       */</div><div class='add'>+        header-&gt;rm_xid = rpc_msg-&gt;rm_xid;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    header-&gt;rm_type = hton32(GF_RDMA_MSG);</div><div class='add'>+    header-&gt;rm_vers = hton32(GF_RDMA_VERSION);</div><div class='add'>+    header-&gt;rm_credit = hton32(credits);</div><div class='add'>+</div><div class='add'>+    header-&gt;rm_body.rm_chunks[0] = 0; /* no read chunks */</div><div class='add'>+    header-&gt;rm_body.rm_chunks[1] = 0; /* no write chunks */</div><div class='add'>+    header-&gt;rm_body.rm_chunks[2] = 0; /* no reply chunks */</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_send_reply_inline (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                             gf_rdma_post_t *post,</div><div class='del'>-                             gf_rdma_reply_info_t *reply_info)</div><div class='add'>+__gf_rdma_send_reply_inline(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                            gf_rdma_post_t *post,</div><div class='add'>+                            gf_rdma_reply_info_t *reply_info)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_header_t *header    = NULL;</div><div class='del'>-        int32_t           send_size = 0, ret = 0;</div><div class='del'>-        char             *buf       = NULL;</div><div class='del'>-</div><div class='del'>-        send_size = iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count)</div><div class='del'>-                + iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count)</div><div class='del'>-                + iov_length (entry-&gt;prog_payload, entry-&gt;prog_payload_count)</div><div class='del'>-                + sizeof (gf_rdma_header_t); /*</div><div class='del'>-                                              * remember, no chunklists in the</div><div class='del'>-                                              * reply</div><div class='del'>-                                              */</div><div class='del'>-</div><div class='del'>-        if (send_size &gt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='del'>-                ret = __gf_rdma_send_error (peer, entry, post, reply_info,</div><div class='del'>-                                            ERR_CHUNK);</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_SEND_SIZE_GREAT_INLINE_THRESHOLD,</div><div class='del'>-                        "msg size (%d) is greater than maximum size "</div><div class='del'>-                        "of msg that can be sent inlined (%d)",</div><div class='del'>-                        send_size, GLUSTERFS_RDMA_INLINE_THRESHOLD);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-</div><div class='del'>-        __gf_rdma_fill_reply_header (header, entry-&gt;rpchdr, reply_info,</div><div class='del'>-                                     peer-&gt;send_count);</div><div class='del'>-</div><div class='del'>-        buf = (char *)&amp;header-&gt;rm_body.rm_chunks[3];</div><div class='del'>-</div><div class='del'>-        if (entry-&gt;rpchdr_count != 0) {</div><div class='del'>-                iov_unload (buf, entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='del'>-                buf += iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (entry-&gt;proghdr_count != 0) {</div><div class='del'>-                iov_unload (buf, entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='del'>-                buf += iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (entry-&gt;prog_payload_count != 0) {</div><div class='del'>-                iov_unload (buf, entry-&gt;prog_payload,</div><div class='del'>-                            entry-&gt;prog_payload_count);</div><div class='del'>-                buf += iov_length (entry-&gt;prog_payload,</div><div class='del'>-                                   entry-&gt;prog_payload_count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_rdma_post_ref (post);</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    int32_t send_size = 0, ret = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+</div><div class='add'>+    send_size = iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count) +</div><div class='add'>+                iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count) +</div><div class='add'>+                iov_length(entry-&gt;prog_payload, entry-&gt;prog_payload_count) +</div><div class='add'>+                sizeof(gf_rdma_header_t); /*</div><div class='add'>+                                           * remember, no chunklists in the</div><div class='add'>+                                           * reply</div><div class='add'>+                                           */</div><div class='ctx'> </div><div class='del'>-        ret = gf_rdma_post_send (peer-&gt;qp, post, (buf - post-&gt;buf));</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = send_size;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_POST_SEND_FAILED, "posting send (to %s) "</div><div class='del'>-                        "failed with ret = %d (%s)",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='del'>-                        (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-                __gf_rdma_disconnect (peer-&gt;trans);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    if (send_size &gt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='add'>+        ret = __gf_rdma_send_error(peer, entry, post, reply_info, ERR_CHUNK);</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_SEND_SIZE_GREAT_INLINE_THRESHOLD,</div><div class='add'>+               "msg size (%d) is greater than maximum size "</div><div class='add'>+               "of msg that can be sent inlined (%d)",</div><div class='add'>+               send_size, GLUSTERFS_RDMA_INLINE_THRESHOLD);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+</div><div class='add'>+    __gf_rdma_fill_reply_header(header, entry-&gt;rpchdr, reply_info,</div><div class='add'>+                                peer-&gt;send_count);</div><div class='add'>+</div><div class='add'>+    buf = (char *)&amp;header-&gt;rm_body.rm_chunks[3];</div><div class='add'>+</div><div class='add'>+    if (entry-&gt;rpchdr_count != 0) {</div><div class='add'>+        iov_unload(buf, entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+        buf += iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (entry-&gt;proghdr_count != 0) {</div><div class='add'>+        iov_unload(buf, entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+        buf += iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (entry-&gt;prog_payload_count != 0) {</div><div class='add'>+        iov_unload(buf, entry-&gt;prog_payload, entry-&gt;prog_payload_count);</div><div class='add'>+        buf += iov_length(entry-&gt;prog_payload, entry-&gt;prog_payload_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_rdma_post_ref(post);</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_post_send(peer-&gt;qp, post, (buf - post-&gt;buf));</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = send_size;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_POST_SEND_FAILED,</div><div class='add'>+               "posting send (to %s) "</div><div class='add'>+               "failed with ret = %d (%s)",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+               (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+        __gf_rdma_disconnect(peer-&gt;trans);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_reply_encode_write_chunks (gf_rdma_peer_t *peer,</div><div class='del'>-                                     uint32_t payload_size,</div><div class='del'>-                                     gf_rdma_post_t *post,</div><div class='del'>-                                     gf_rdma_reply_info_t *reply_info,</div><div class='del'>-                                     uint32_t **ptr)</div><div class='add'>+__gf_rdma_reply_encode_write_chunks(gf_rdma_peer_t *peer, uint32_t payload_size,</div><div class='add'>+                                    gf_rdma_post_t *post,</div><div class='add'>+                                    gf_rdma_reply_info_t *reply_info,</div><div class='add'>+                                    uint32_t **ptr)</div><div class='ctx'> {</div><div class='del'>-        uint32_t               chunk_size   = 0;</div><div class='del'>-        int32_t                ret          = -1;</div><div class='del'>-        gf_rdma_write_array_t *target_array = NULL;</div><div class='del'>-        int                    i            = 0;</div><div class='del'>-</div><div class='del'>-        target_array = (gf_rdma_write_array_t *)*ptr;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; reply_info-&gt;wc_array-&gt;wc_nchunks; i++) {</div><div class='del'>-                chunk_size +=</div><div class='del'>-                        reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_length;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (chunk_size &lt; payload_size) {</div><div class='del'>-                gf_msg_debug (GF_RDMA_LOG_NAME, 0, "length of payload (%d) is "</div><div class='del'>-                              "exceeding the total write chunk length (%d)",</div><div class='del'>-                              payload_size, chunk_size);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        target_array-&gt;wc_discrim = hton32 (1);</div><div class='del'>-        for (i = 0; (i &lt; reply_info-&gt;wc_array-&gt;wc_nchunks)</div><div class='del'>-                     &amp;&amp; (payload_size != 0);</div><div class='del'>-             i++) {</div><div class='del'>-                target_array-&gt;wc_array[i].wc_target.rs_offset</div><div class='del'>-                        = hton64 (reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_offset);</div><div class='del'>-</div><div class='del'>-                target_array-&gt;wc_array[i].wc_target.rs_length</div><div class='del'>-                        = hton32 (min (payload_size,</div><div class='del'>-                                       reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_length));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        target_array-&gt;wc_nchunks = hton32 (i);</div><div class='del'>-        target_array-&gt;wc_array[i].wc_target.rs_handle = 0; /* terminate</div><div class='del'>-                                                              chunklist */</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        *ptr = &amp;target_array-&gt;wc_array[i].wc_target.rs_length;</div><div class='add'>+    uint32_t chunk_size = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_write_array_t *target_array = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    target_array = (gf_rdma_write_array_t *)*ptr;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; reply_info-&gt;wc_array-&gt;wc_nchunks; i++) {</div><div class='add'>+        chunk_size += reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_length;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (chunk_size &lt; payload_size) {</div><div class='add'>+        gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                     "length of payload (%d) is "</div><div class='add'>+                     "exceeding the total write chunk length (%d)",</div><div class='add'>+                     payload_size, chunk_size);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    target_array-&gt;wc_discrim = hton32(1);</div><div class='add'>+    for (i = 0; (i &lt; reply_info-&gt;wc_array-&gt;wc_nchunks) &amp;&amp; (payload_size != 0);</div><div class='add'>+         i++) {</div><div class='add'>+        target_array-&gt;wc_array[i].wc_target.rs_offset = hton64(</div><div class='add'>+            reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_offset);</div><div class='add'>+</div><div class='add'>+        target_array-&gt;wc_array[i].wc_target.rs_length = hton32(</div><div class='add'>+            min(payload_size,</div><div class='add'>+                reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_length));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    target_array-&gt;wc_nchunks = hton32(i);</div><div class='add'>+    target_array-&gt;wc_array[i].wc_target.rs_handle = 0; /* terminate</div><div class='add'>+                                                          chunklist */</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    *ptr = &amp;target_array-&gt;wc_array[i].wc_target.rs_length;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_register_local_mr_for_rdma (gf_rdma_peer_t *peer,</div><div class='del'>-                                      struct iovec *vector, int count,</div><div class='del'>-                                      gf_rdma_post_context_t *ctx)</div><div class='add'>+__gf_rdma_register_local_mr_for_rdma(gf_rdma_peer_t *peer, struct iovec *vector,</div><div class='add'>+                                     int count, gf_rdma_post_context_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int                i      = 0;</div><div class='del'>-        int32_t            ret    = -1;</div><div class='del'>-        gf_rdma_private_t *priv   = NULL;</div><div class='del'>-        gf_rdma_device_t  *device = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, vector, out);</div><div class='del'>-</div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                /* what if the memory is registered more than once?</div><div class='del'>-                 * Assume that a single write buffer is passed to afr, which</div><div class='del'>-                 * then passes it to its children. If more than one children</div><div class='del'>-                 * happen to use rdma, then the buffer is registered more than</div><div class='del'>-                 * once.</div><div class='del'>-                 * Ib-verbs specification says that multiple registrations of</div><div class='del'>-                 * same memory location is allowed. Refer to 10.6.3.8 of</div><div class='del'>-                 * Infiniband Architecture Specification Volume 1</div><div class='del'>-                 * (Release 1.2.1)</div><div class='del'>-                 */</div><div class='del'>-                ctx-&gt;mr[ctx-&gt;mr_count] = gf_rdma_get_pre_registred_mr(</div><div class='del'>-                                peer-&gt;trans, (void *)vector[i].iov_base,</div><div class='del'>-                                vector[i].iov_len);</div><div class='del'>-</div><div class='del'>-                if (!ctx-&gt;mr[ctx-&gt;mr_count]) {</div><div class='del'>-                ctx-&gt;mr[ctx-&gt;mr_count] = ibv_reg_mr (device-&gt;pd,</div><div class='del'>-                                                     vector[i].iov_base,</div><div class='del'>-                                                     vector[i].iov_len,</div><div class='del'>-                                                     IBV_ACCESS_LOCAL_WRITE);</div><div class='del'>-                }</div><div class='del'>-                if (ctx-&gt;mr[ctx-&gt;mr_count] == NULL) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='del'>-                                RDMA_MSG_MR_ALOC_FAILED,</div><div class='del'>-                                "registering memory for IBV_ACCESS_LOCAL_WRITE"</div><div class='del'>-                                " failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, vector, out);</div><div class='add'>+</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        /* what if the memory is registered more than once?</div><div class='add'>+         * Assume that a single write buffer is passed to afr, which</div><div class='add'>+         * then passes it to its children. If more than one children</div><div class='add'>+         * happen to use rdma, then the buffer is registered more than</div><div class='add'>+         * once.</div><div class='add'>+         * Ib-verbs specification says that multiple registrations of</div><div class='add'>+         * same memory location is allowed. Refer to 10.6.3.8 of</div><div class='add'>+         * Infiniband Architecture Specification Volume 1</div><div class='add'>+         * (Release 1.2.1)</div><div class='add'>+         */</div><div class='add'>+        ctx-&gt;mr[ctx-&gt;mr_count] = gf_rdma_get_pre_registred_mr(</div><div class='add'>+            peer-&gt;trans, (void *)vector[i].iov_base, vector[i].iov_len);</div><div class='ctx'> </div><div class='del'>-                ctx-&gt;mr_count++;</div><div class='add'>+        if (!ctx-&gt;mr[ctx-&gt;mr_count]) {</div><div class='add'>+            ctx-&gt;mr[ctx-&gt;mr_count] = ibv_reg_mr(device-&gt;pd, vector[i].iov_base,</div><div class='add'>+                                                vector[i].iov_len,</div><div class='add'>+                                                IBV_ACCESS_LOCAL_WRITE);</div><div class='add'>+        }</div><div class='add'>+        if (ctx-&gt;mr[ctx-&gt;mr_count] == NULL) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='add'>+                   RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                   "registering memory for IBV_ACCESS_LOCAL_WRITE"</div><div class='add'>+                   " failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        ctx-&gt;mr_count++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* 1. assumes xfer_len of data is pointed by vector(s) starting from vec[*idx]</div><div class='ctx'>  * 2. modifies vec</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_write (gf_rdma_peer_t *peer, gf_rdma_post_t *post, struct iovec *vec,</div><div class='del'>-                 uint32_t xfer_len, int *idx, gf_rdma_write_chunk_t *writech)</div><div class='add'>+__gf_rdma_write(gf_rdma_peer_t *peer, gf_rdma_post_t *post, struct iovec *vec,</div><div class='add'>+                uint32_t xfer_len, int *idx, gf_rdma_write_chunk_t *writech)</div><div class='ctx'> {</div><div class='del'>-        int             size    = 0, num_sge = 0, i = 0;</div><div class='del'>-        int32_t         ret     = -1;</div><div class='del'>-        struct ibv_sge *sg_list = NULL;</div><div class='del'>-        struct ibv_send_wr wr   = {</div><div class='del'>-                .opcode         = IBV_WR_RDMA_WRITE,</div><div class='del'>-                .send_flags     = IBV_SEND_SIGNALED,</div><div class='del'>-        }, *bad_wr;</div><div class='del'>-</div><div class='del'>-        if ((peer == NULL) || (writech == NULL) || (idx == NULL)</div><div class='del'>-            || (post == NULL) || (vec == NULL) || (xfer_len == 0)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = *idx; size &lt; xfer_len; i++) {</div><div class='del'>-                size += vec[i].iov_len;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        num_sge = i - *idx;</div><div class='del'>-</div><div class='del'>-        sg_list = GF_CALLOC (num_sge, sizeof (struct ibv_sge),</div><div class='del'>-                             gf_common_mt_sge);</div><div class='del'>-        if (sg_list == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for ((i = *idx), (num_sge = 0); (xfer_len != 0); i++, num_sge++) {</div><div class='del'>-                size = min (xfer_len, vec[i].iov_len);</div><div class='del'>-</div><div class='del'>-                sg_list[num_sge].addr = (unsigned long)vec[i].iov_base;</div><div class='del'>-                sg_list[num_sge].length = size;</div><div class='del'>-                sg_list[num_sge].lkey = post-&gt;ctx.mr[i]-&gt;lkey;</div><div class='del'>-</div><div class='del'>-                xfer_len -= size;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *idx = i;</div><div class='del'>-</div><div class='del'>-        if (size &lt; vec[i - 1].iov_len) {</div><div class='del'>-                vec[i - 1].iov_base += size;</div><div class='del'>-                vec[i - 1].iov_len -= size;</div><div class='del'>-                *idx = i - 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        wr.sg_list = sg_list;</div><div class='del'>-        wr.num_sge = num_sge;</div><div class='del'>-        wr.wr_id = (unsigned long) gf_rdma_post_ref (post);</div><div class='del'>-        wr.wr.rdma.rkey = writech-&gt;wc_target.rs_handle;</div><div class='del'>-        wr.wr.rdma.remote_addr = writech-&gt;wc_target.rs_offset;</div><div class='del'>-</div><div class='del'>-        ret = ibv_post_send(peer-&gt;qp, &amp;wr, &amp;bad_wr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_WRITE_CLIENT_ERROR, "rdma write to "</div><div class='del'>-                        "client (%s) failed with ret = %d (%s)",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='del'>-                        (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (sg_list);</div><div class='add'>+    int size = 0, num_sge = 0, i = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    struct ibv_sge *sg_list = NULL;</div><div class='add'>+    struct ibv_send_wr wr =</div><div class='add'>+                           {</div><div class='add'>+                               .opcode = IBV_WR_RDMA_WRITE,</div><div class='add'>+                               .send_flags = IBV_SEND_SIGNALED,</div><div class='add'>+                           },</div><div class='add'>+                       *bad_wr;</div><div class='add'>+</div><div class='add'>+    if ((peer == NULL) || (writech == NULL) || (idx == NULL) ||</div><div class='add'>+        (post == NULL) || (vec == NULL) || (xfer_len == 0)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = *idx; size &lt; xfer_len; i++) {</div><div class='add'>+        size += vec[i].iov_len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    num_sge = i - *idx;</div><div class='add'>+</div><div class='add'>+    sg_list = GF_CALLOC(num_sge, sizeof(struct ibv_sge), gf_common_mt_sge);</div><div class='add'>+    if (sg_list == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for ((i = *idx), (num_sge = 0); (xfer_len != 0); i++, num_sge++) {</div><div class='add'>+        size = min(xfer_len, vec[i].iov_len);</div><div class='add'>+</div><div class='add'>+        sg_list[num_sge].addr = (unsigned long)vec[i].iov_base;</div><div class='add'>+        sg_list[num_sge].length = size;</div><div class='add'>+        sg_list[num_sge].lkey = post-&gt;ctx.mr[i]-&gt;lkey;</div><div class='add'>+</div><div class='add'>+        xfer_len -= size;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *idx = i;</div><div class='add'>+</div><div class='add'>+    if (size &lt; vec[i - 1].iov_len) {</div><div class='add'>+        vec[i - 1].iov_base += size;</div><div class='add'>+        vec[i - 1].iov_len -= size;</div><div class='add'>+        *idx = i - 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    wr.sg_list = sg_list;</div><div class='add'>+    wr.num_sge = num_sge;</div><div class='add'>+    wr.wr_id = (unsigned long)gf_rdma_post_ref(post);</div><div class='add'>+    wr.wr.rdma.rkey = writech-&gt;wc_target.rs_handle;</div><div class='add'>+    wr.wr.rdma.remote_addr = writech-&gt;wc_target.rs_offset;</div><div class='add'>+</div><div class='add'>+    ret = ibv_post_send(peer-&gt;qp, &amp;wr, &amp;bad_wr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_WRITE_CLIENT_ERROR,</div><div class='add'>+               "rdma write to "</div><div class='add'>+               "client (%s) failed with ret = %d (%s)",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+               (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(sg_list);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_do_gf_rdma_write (gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='del'>-                            struct iovec *vector, int count,</div><div class='del'>-                            struct iobref *iobref,</div><div class='del'>-                            gf_rdma_reply_info_t *reply_info)</div><div class='add'>+__gf_rdma_do_gf_rdma_write(gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='add'>+                           struct iovec *vector, int count,</div><div class='add'>+                           struct iobref *iobref,</div><div class='add'>+                           gf_rdma_reply_info_t *reply_info)</div><div class='ctx'> {</div><div class='del'>-        int      i            = 0, payload_idx = 0;</div><div class='del'>-        uint32_t payload_size = 0, xfer_len = 0;</div><div class='del'>-        int32_t  ret          = -1;</div><div class='add'>+    int i = 0, payload_idx = 0;</div><div class='add'>+    uint32_t payload_size = 0, xfer_len = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (count != 0) {</div><div class='del'>-                payload_size = iov_length (vector, count);</div><div class='del'>-        }</div><div class='add'>+    if (count != 0) {</div><div class='add'>+        payload_size = iov_length(vector, count);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (payload_size == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (payload_size == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = __gf_rdma_register_local_mr_for_rdma (peer, vector, count,</div><div class='del'>-                                                    &amp;post-&gt;ctx);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_MR_ALOC_FAILED,</div><div class='del'>-                        "registering memory region for rdma failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = __gf_rdma_register_local_mr_for_rdma(peer, vector, count, &amp;post-&gt;ctx);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+               "registering memory region for rdma failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        post-&gt;ctx.iobref = iobref_ref (iobref);</div><div class='add'>+    post-&gt;ctx.iobref = iobref_ref(iobref);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; (i &lt; reply_info-&gt;wc_array-&gt;wc_nchunks)</div><div class='del'>-                     &amp;&amp; (payload_size != 0);</div><div class='del'>-             i++) {</div><div class='del'>-                xfer_len = min (payload_size,</div><div class='del'>-                                reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_length);</div><div class='add'>+    for (i = 0; (i &lt; reply_info-&gt;wc_array-&gt;wc_nchunks) &amp;&amp; (payload_size != 0);</div><div class='add'>+         i++) {</div><div class='add'>+        xfer_len = min(payload_size,</div><div class='add'>+                       reply_info-&gt;wc_array-&gt;wc_array[i].wc_target.rs_length);</div><div class='ctx'> </div><div class='del'>-                ret = __gf_rdma_write (peer, post, vector, xfer_len,</div><div class='del'>-                                       &amp;payload_idx,</div><div class='del'>-                                       &amp;reply_info-&gt;wc_array-&gt;wc_array[i]);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_WRITE_CLIENT_ERROR, "rdma write to "</div><div class='del'>-                                "client (%s) failed",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                payload_size -= xfer_len;</div><div class='add'>+        ret = __gf_rdma_write(peer, post, vector, xfer_len, &amp;payload_idx,</div><div class='add'>+                              &amp;reply_info-&gt;wc_array-&gt;wc_array[i]);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_WRITE_CLIENT_ERROR,</div><div class='add'>+                   "rdma write to "</div><div class='add'>+                   "client (%s) failed",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        payload_size -= xfer_len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_send_reply_type_nomsg (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                                 gf_rdma_post_t *post,</div><div class='del'>-                                 gf_rdma_reply_info_t *reply_info)</div><div class='add'>+__gf_rdma_send_reply_type_nomsg(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                                gf_rdma_post_t *post,</div><div class='add'>+                                gf_rdma_reply_info_t *reply_info)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_header_t *header       = NULL;</div><div class='del'>-        char             *buf          = NULL;</div><div class='del'>-        uint32_t          payload_size = 0;</div><div class='del'>-        int               count        = 0, i = 0;</div><div class='del'>-        int32_t           ret          = 0;</div><div class='del'>-        struct iovec      vector[MAX_IOVEC];</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-</div><div class='del'>-        __gf_rdma_fill_reply_header (header, entry-&gt;rpchdr, reply_info,</div><div class='del'>-                                     peer-&gt;send_count);</div><div class='del'>-</div><div class='del'>-        header-&gt;rm_type = hton32 (GF_RDMA_NOMSG);</div><div class='del'>-</div><div class='del'>-        payload_size = iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count) +</div><div class='del'>-                iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='del'>-</div><div class='del'>-        /* encode reply chunklist */</div><div class='del'>-        buf = (char *)&amp;header-&gt;rm_body.rm_chunks[2];</div><div class='del'>-        ret = __gf_rdma_reply_encode_write_chunks (peer, payload_size, post,</div><div class='del'>-                                                   reply_info,</div><div class='del'>-                                                   (uint32_t **)&amp;buf);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_ENCODE_ERROR, "encoding write chunks failed");</div><div class='del'>-                ret = __gf_rdma_send_error (peer, entry, post, reply_info,</div><div class='del'>-                                            ERR_CHUNK);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_rdma_post_ref (post);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; entry-&gt;rpchdr_count; i++) {</div><div class='del'>-                vector[count++] = entry-&gt;rpchdr[i];</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; entry-&gt;proghdr_count; i++) {</div><div class='del'>-                vector[count++] = entry-&gt;proghdr[i];</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = __gf_rdma_do_gf_rdma_write (peer, post, vector, count,</div><div class='del'>-                                          entry-&gt;iobref, reply_info);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_WRITE_PEER_FAILED, "rdma write to peer "</div><div class='del'>-                        "(%s) failed", peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_post_send (peer-&gt;qp, post, (buf - post-&gt;buf));</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_POST_SEND_FAILED, "posting a send request "</div><div class='del'>-                        "to client (%s) failed with ret = %d (%s)",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='del'>-                        (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-        } else {</div><div class='del'>-                ret = payload_size;</div><div class='del'>-        }</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    uint32_t payload_size = 0;</div><div class='add'>+    int count = 0, i = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct iovec vector[MAX_IOVEC];</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+</div><div class='add'>+    __gf_rdma_fill_reply_header(header, entry-&gt;rpchdr, reply_info,</div><div class='add'>+                                peer-&gt;send_count);</div><div class='add'>+</div><div class='add'>+    header-&gt;rm_type = hton32(GF_RDMA_NOMSG);</div><div class='add'>+</div><div class='add'>+    payload_size = iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count) +</div><div class='add'>+                   iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+</div><div class='add'>+    /* encode reply chunklist */</div><div class='add'>+    buf = (char *)&amp;header-&gt;rm_body.rm_chunks[2];</div><div class='add'>+    ret = __gf_rdma_reply_encode_write_chunks(peer, payload_size, post,</div><div class='add'>+                                              reply_info, (uint32_t **)&amp;buf);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_ENCODE_ERROR,</div><div class='add'>+               "encoding write chunks failed");</div><div class='add'>+        ret = __gf_rdma_send_error(peer, entry, post, reply_info, ERR_CHUNK);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_rdma_post_ref(post);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; entry-&gt;rpchdr_count; i++) {</div><div class='add'>+        vector[count++] = entry-&gt;rpchdr[i];</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; entry-&gt;proghdr_count; i++) {</div><div class='add'>+        vector[count++] = entry-&gt;proghdr[i];</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = __gf_rdma_do_gf_rdma_write(peer, post, vector, count, entry-&gt;iobref,</div><div class='add'>+                                     reply_info);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_WRITE_PEER_FAILED,</div><div class='add'>+               "rdma write to peer "</div><div class='add'>+               "(%s) failed",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_post_send(peer-&gt;qp, post, (buf - post-&gt;buf));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_POST_SEND_FAILED,</div><div class='add'>+               "posting a send request "</div><div class='add'>+               "to client (%s) failed with ret = %d (%s)",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+               (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+    } else {</div><div class='add'>+        ret = payload_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_send_reply_type_msg (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                               gf_rdma_post_t *post,</div><div class='del'>-                               gf_rdma_reply_info_t *reply_info)</div><div class='add'>+__gf_rdma_send_reply_type_msg(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                              gf_rdma_post_t *post,</div><div class='add'>+                              gf_rdma_reply_info_t *reply_info)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_header_t *header       = NULL;</div><div class='del'>-        int32_t           send_size    = 0, ret = 0;</div><div class='del'>-        char             *ptr          = NULL;</div><div class='del'>-        uint32_t          payload_size = 0;</div><div class='del'>-</div><div class='del'>-        send_size = iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count)</div><div class='del'>-                + iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count)</div><div class='del'>-                + GLUSTERFS_RDMA_MAX_HEADER_SIZE;</div><div class='del'>-</div><div class='del'>-        if (send_size &gt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_SEND_SIZE_GREAT_INLINE_THRESHOLD,</div><div class='del'>-                        "client has provided only write chunks, but the "</div><div class='del'>-                        "combined size of rpc and program header (%d) is "</div><div class='del'>-                        "exceeding the size of msg that can be sent using "</div><div class='del'>-                        "RDMA send (%d)", send_size,</div><div class='del'>-                        GLUSTERFS_RDMA_INLINE_THRESHOLD);</div><div class='del'>-</div><div class='del'>-                ret = __gf_rdma_send_error (peer, entry, post, reply_info,</div><div class='del'>-                                            ERR_CHUNK);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-</div><div class='del'>-        __gf_rdma_fill_reply_header (header, entry-&gt;rpchdr, reply_info,</div><div class='del'>-                                     peer-&gt;send_count);</div><div class='del'>-</div><div class='del'>-        payload_size = iov_length (entry-&gt;prog_payload,</div><div class='del'>-                                   entry-&gt;prog_payload_count);</div><div class='del'>-        ptr = (char *)&amp;header-&gt;rm_body.rm_chunks[1];</div><div class='del'>-</div><div class='del'>-        ret = __gf_rdma_reply_encode_write_chunks (peer, payload_size, post,</div><div class='del'>-                                                   reply_info,</div><div class='del'>-                                                   (uint32_t **)&amp;ptr);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_ENCODE_ERROR, "encoding write chunks failed");</div><div class='del'>-                ret = __gf_rdma_send_error (peer, entry, post, reply_info,</div><div class='del'>-                                            ERR_CHUNK);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *(uint32_t *)ptr = 0;          /* terminate reply chunklist */</div><div class='del'>-        ptr += sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-        gf_rdma_post_ref (post);</div><div class='del'>-</div><div class='del'>-        ret = __gf_rdma_do_gf_rdma_write (peer, post, entry-&gt;prog_payload,</div><div class='del'>-                                          entry-&gt;prog_payload_count,</div><div class='del'>-                                          entry-&gt;iobref, reply_info);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_WRITE_PEER_FAILED, "rdma write to peer "</div><div class='del'>-                        "(%s) failed", peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iov_unload (ptr, entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='del'>-        ptr += iov_length (entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='del'>-</div><div class='del'>-        iov_unload (ptr, entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='del'>-        ptr += iov_length (entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_post_send (peer-&gt;qp, post, (ptr - post-&gt;buf));</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_SEND_CLIENT_ERROR,</div><div class='del'>-                        "rdma send to client (%s) failed with ret = %d (%s)",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='del'>-                        (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-                gf_rdma_post_unref (post);</div><div class='del'>-                ret = -1;</div><div class='del'>-        } else {</div><div class='del'>-                ret = send_size + payload_size;</div><div class='del'>-        }</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    int32_t send_size = 0, ret = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    uint32_t payload_size = 0;</div><div class='add'>+</div><div class='add'>+    send_size = iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count) +</div><div class='add'>+                iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count) +</div><div class='add'>+                GLUSTERFS_RDMA_MAX_HEADER_SIZE;</div><div class='add'>+</div><div class='add'>+    if (send_size &gt; GLUSTERFS_RDMA_INLINE_THRESHOLD) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_SEND_SIZE_GREAT_INLINE_THRESHOLD,</div><div class='add'>+               "client has provided only write chunks, but the "</div><div class='add'>+               "combined size of rpc and program header (%d) is "</div><div class='add'>+               "exceeding the size of msg that can be sent using "</div><div class='add'>+               "RDMA send (%d)",</div><div class='add'>+               send_size, GLUSTERFS_RDMA_INLINE_THRESHOLD);</div><div class='add'>+</div><div class='add'>+        ret = __gf_rdma_send_error(peer, entry, post, reply_info, ERR_CHUNK);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+</div><div class='add'>+    __gf_rdma_fill_reply_header(header, entry-&gt;rpchdr, reply_info,</div><div class='add'>+                                peer-&gt;send_count);</div><div class='add'>+</div><div class='add'>+    payload_size = iov_length(entry-&gt;prog_payload, entry-&gt;prog_payload_count);</div><div class='add'>+    ptr = (char *)&amp;header-&gt;rm_body.rm_chunks[1];</div><div class='add'>+</div><div class='add'>+    ret = __gf_rdma_reply_encode_write_chunks(peer, payload_size, post,</div><div class='add'>+                                              reply_info, (uint32_t **)&amp;ptr);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_ENCODE_ERROR,</div><div class='add'>+               "encoding write chunks failed");</div><div class='add'>+        ret = __gf_rdma_send_error(peer, entry, post, reply_info, ERR_CHUNK);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *(uint32_t *)ptr = 0; /* terminate reply chunklist */</div><div class='add'>+    ptr += sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    gf_rdma_post_ref(post);</div><div class='add'>+</div><div class='add'>+    ret = __gf_rdma_do_gf_rdma_write(peer, post, entry-&gt;prog_payload,</div><div class='add'>+                                     entry-&gt;prog_payload_count, entry-&gt;iobref,</div><div class='add'>+                                     reply_info);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_WRITE_PEER_FAILED,</div><div class='add'>+               "rdma write to peer "</div><div class='add'>+               "(%s) failed",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iov_unload(ptr, entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+    ptr += iov_length(entry-&gt;rpchdr, entry-&gt;rpchdr_count);</div><div class='add'>+</div><div class='add'>+    iov_unload(ptr, entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+    ptr += iov_length(entry-&gt;proghdr, entry-&gt;proghdr_count);</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_post_send(peer-&gt;qp, post, (ptr - post-&gt;buf));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_SEND_CLIENT_ERROR,</div><div class='add'>+               "rdma send to client (%s) failed with ret = %d (%s)",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+               (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+        gf_rdma_post_unref(post);</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else {</div><div class='add'>+        ret = send_size + payload_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_rdma_reply_info_destroy (gf_rdma_reply_info_t *reply_info)</div><div class='add'>+gf_rdma_reply_info_destroy(gf_rdma_reply_info_t *reply_info)</div><div class='ctx'> {</div><div class='del'>-        if (reply_info == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (reply_info == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (reply_info-&gt;wc_array != NULL) {</div><div class='del'>-                GF_FREE (reply_info-&gt;wc_array);</div><div class='del'>-                reply_info-&gt;wc_array = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (reply_info-&gt;wc_array != NULL) {</div><div class='add'>+        GF_FREE(reply_info-&gt;wc_array);</div><div class='add'>+        reply_info-&gt;wc_array = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mem_put (reply_info);</div><div class='add'>+    mem_put(reply_info);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_rdma_reply_info_t *</div><div class='del'>-gf_rdma_reply_info_alloc (gf_rdma_peer_t *peer)</div><div class='add'>+gf_rdma_reply_info_alloc(gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_reply_info_t *reply_info = NULL;</div><div class='del'>-        gf_rdma_private_t    *priv       = NULL;</div><div class='add'>+    gf_rdma_reply_info_t *reply_info = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='ctx'> </div><div class='del'>-        reply_info = mem_get (priv-&gt;device-&gt;reply_info_pool);</div><div class='del'>-        if (reply_info == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    reply_info = mem_get(priv-&gt;device-&gt;reply_info_pool);</div><div class='add'>+    if (reply_info == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (reply_info, 0, sizeof (*reply_info));</div><div class='del'>-        reply_info-&gt;pool = priv-&gt;device-&gt;reply_info_pool;</div><div class='add'>+    memset(reply_info, 0, sizeof(*reply_info));</div><div class='add'>+    reply_info-&gt;pool = priv-&gt;device-&gt;reply_info_pool;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return reply_info;</div><div class='add'>+    return reply_info;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_ioq_churn_reply (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='del'>-                           gf_rdma_post_t *post)</div><div class='add'>+__gf_rdma_ioq_churn_reply(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry,</div><div class='add'>+                          gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_reply_info_t *reply_info = NULL;</div><div class='del'>-        int32_t               ret        = -1;</div><div class='del'>-        gf_rdma_chunktype_t   type       = gf_rdma_noch;</div><div class='add'>+    gf_rdma_reply_info_t *reply_info = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_chunktype_t type = gf_rdma_noch;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, peer, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, entry, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (GF_RDMA_LOG_NAME, post, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, peer, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, entry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(GF_RDMA_LOG_NAME, post, out);</div><div class='ctx'> </div><div class='del'>-        reply_info = entry-&gt;msg.reply_info;</div><div class='del'>-        if (reply_info != NULL) {</div><div class='del'>-                type = reply_info-&gt;type;</div><div class='del'>-        }</div><div class='add'>+    reply_info = entry-&gt;msg.reply_info;</div><div class='add'>+    if (reply_info != NULL) {</div><div class='add'>+        type = reply_info-&gt;type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case gf_rdma_noch:</div><div class='del'>-                ret = __gf_rdma_send_reply_inline (peer, entry, post,</div><div class='del'>-                                                   reply_info);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_SEND_REPLY_FAILED,</div><div class='del'>-                                "failed to send reply to peer (%s) as an "</div><div class='del'>-                                "inlined rdma msg",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = __gf_rdma_send_reply_inline(peer, entry, post, reply_info);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_SEND_REPLY_FAILED,</div><div class='add'>+                       "failed to send reply to peer (%s) as an "</div><div class='add'>+                       "inlined rdma msg",</div><div class='add'>+                       peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case gf_rdma_replych:</div><div class='del'>-                ret = __gf_rdma_send_reply_type_nomsg (peer, entry, post,</div><div class='del'>-                                                       reply_info);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_SEND_REPLY_FAILED,</div><div class='del'>-                                "failed to send reply to peer (%s) as "</div><div class='del'>-                                "RDMA_NOMSG", peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = __gf_rdma_send_reply_type_nomsg(peer, entry, post,</div><div class='add'>+                                                  reply_info);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_SEND_REPLY_FAILED,</div><div class='add'>+                       "failed to send reply to peer (%s) as "</div><div class='add'>+                       "RDMA_NOMSG",</div><div class='add'>+                       peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case gf_rdma_writech:</div><div class='del'>-                ret = __gf_rdma_send_reply_type_msg (peer, entry, post,</div><div class='del'>-                                                     reply_info);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_SEND_REPLY_FAILED,</div><div class='del'>-                                "failed to send reply with write chunks "</div><div class='del'>-                                "to peer (%s)",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = __gf_rdma_send_reply_type_msg(peer, entry, post, reply_info);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_SEND_REPLY_FAILED,</div><div class='add'>+                       "failed to send reply with write chunks "</div><div class='add'>+                       "to peer (%s)",</div><div class='add'>+                       peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INVALID_CHUNK_TYPE,</div><div class='del'>-                        "invalid chunktype (%d) specified for sending reply "</div><div class='del'>-                        " (peer:%s)", type, peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (reply_info != NULL) {</div><div class='del'>-                gf_rdma_reply_info_destroy (reply_info);</div><div class='del'>-        }</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_INVALID_CHUNK_TYPE,</div><div class='add'>+                   "invalid chunktype (%d) specified for sending reply "</div><div class='add'>+                   " (peer:%s)",</div><div class='add'>+                   type, peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (reply_info != NULL) {</div><div class='add'>+        gf_rdma_reply_info_destroy(reply_info);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-__gf_rdma_ioq_churn_entry (gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry)</div><div class='add'>+__gf_rdma_ioq_churn_entry(gf_rdma_peer_t *peer, gf_rdma_ioq_t *entry)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret     = 0, quota = 0;</div><div class='del'>-        gf_rdma_private_t *priv    = NULL;</div><div class='del'>-        gf_rdma_device_t  *device  = NULL;</div><div class='del'>-        gf_rdma_options_t *options = NULL;</div><div class='del'>-        gf_rdma_post_t    *post    = NULL;</div><div class='del'>-</div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-        device = priv-&gt;device;</div><div class='del'>-</div><div class='del'>-        quota = __gf_rdma_quota_get (peer);</div><div class='del'>-        if (quota &gt; 0) {</div><div class='del'>-                post = gf_rdma_get_post (&amp;device-&gt;sendq);</div><div class='del'>-                if (post == NULL) {</div><div class='del'>-                        post = gf_rdma_new_post (peer-&gt;trans, device,</div><div class='del'>-                                                 (options-&gt;send_size + 2048),</div><div class='del'>-                                                 GF_RDMA_SEND_POST);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (post == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg_callingfn (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                          RDMA_MSG_POST_SEND_FAILED,</div><div class='del'>-                                          "not able to get a post to send msg");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (entry-&gt;is_request) {</div><div class='del'>-                        ret = __gf_rdma_ioq_churn_request (peer, entry, post);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                        RDMA_MSG_PROC_IOQ_ENTRY_FAILED,</div><div class='del'>-                                        "failed to process request ioq entry "</div><div class='del'>-                                        "to peer(%s)",</div><div class='del'>-                                        peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = __gf_rdma_ioq_churn_reply (peer, entry, post);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                        RDMA_MSG_PROC_IOQ_ENTRY_FAILED,</div><div class='del'>-                                        "failed to process reply ioq entry "</div><div class='del'>-                                        "to peer (%s)",</div><div class='del'>-                                        peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int32_t ret = 0, quota = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+    device = priv-&gt;device;</div><div class='add'>+</div><div class='add'>+    quota = __gf_rdma_quota_get(peer);</div><div class='add'>+    if (quota &gt; 0) {</div><div class='add'>+        post = gf_rdma_get_post(&amp;device-&gt;sendq);</div><div class='add'>+        if (post == NULL) {</div><div class='add'>+            post = gf_rdma_new_post(peer-&gt;trans, device,</div><div class='add'>+                                    (options-&gt;send_size + 2048),</div><div class='add'>+                                    GF_RDMA_SEND_POST);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        __gf_rdma_ioq_entry_free (entry);</div><div class='del'>-                }</div><div class='add'>+        if (post == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg_callingfn(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                             RDMA_MSG_POST_SEND_FAILED,</div><div class='add'>+                             "not able to get a post to send msg");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (entry-&gt;is_request) {</div><div class='add'>+            ret = __gf_rdma_ioq_churn_request(peer, entry, post);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_PROC_IOQ_ENTRY_FAILED,</div><div class='add'>+                       "failed to process request ioq entry "</div><div class='add'>+                       "to peer(%s)",</div><div class='add'>+                       peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                ret = 0;</div><div class='add'>+            ret = __gf_rdma_ioq_churn_reply(peer, entry, post);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_PROC_IOQ_ENTRY_FAILED,</div><div class='add'>+                       "failed to process reply ioq entry "</div><div class='add'>+                       "to peer (%s)",</div><div class='add'>+                       peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            __gf_rdma_ioq_entry_free(entry);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_ioq_churn (gf_rdma_peer_t *peer)</div><div class='add'>+__gf_rdma_ioq_churn(gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_ioq_t *entry = NULL;</div><div class='del'>-        int32_t        ret   = 0;</div><div class='add'>+    gf_rdma_ioq_t *entry = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;peer-&gt;ioq)) {</div><div class='del'>-                /* pick next entry */</div><div class='del'>-                entry = peer-&gt;ioq_next;</div><div class='add'>+    while (!list_empty(&amp;peer-&gt;ioq)) {</div><div class='add'>+        /* pick next entry */</div><div class='add'>+        entry = peer-&gt;ioq_next;</div><div class='ctx'> </div><div class='del'>-                ret = __gf_rdma_ioq_churn_entry (peer, entry);</div><div class='add'>+        ret = __gf_rdma_ioq_churn_entry(peer, entry);</div><div class='ctx'> </div><div class='del'>-                if (ret &lt;= 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        if (ret &lt;= 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-          list_for_each_entry_safe (entry, dummy, &amp;peer-&gt;ioq, list) {</div><div class='del'>-          ret = __gf_rdma_ioq_churn_entry (peer, entry);</div><div class='del'>-          if (ret &lt;= 0) {</div><div class='del'>-          break;</div><div class='del'>-          }</div><div class='del'>-          }</div><div class='del'>-        */</div><div class='add'>+    /*</div><div class='add'>+      list_for_each_entry_safe (entry, dummy, &amp;peer-&gt;ioq, list) {</div><div class='add'>+      ret = __gf_rdma_ioq_churn_entry (peer, entry);</div><div class='add'>+      if (ret &lt;= 0) {</div><div class='add'>+      break;</div><div class='add'>+      }</div><div class='add'>+      }</div><div class='add'>+    */</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_writev (rpc_transport_t *this, gf_rdma_ioq_t *entry)</div><div class='add'>+gf_rdma_writev(rpc_transport_t *this, gf_rdma_ioq_t *entry)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret  = 0, need_append = 1;</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='del'>-        gf_rdma_peer_t    *peer = NULL;</div><div class='add'>+    int32_t ret = 0, need_append = 1;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (!priv-&gt;connected) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_PEER_DISCONNECTED,</div><div class='del'>-                                "rdma is not connected to peer (%s)",</div><div class='del'>-                                this-&gt;peerinfo.identifier);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!priv-&gt;connected) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_PEER_DISCONNECTED,</div><div class='add'>+                   "rdma is not connected to peer (%s)",</div><div class='add'>+                   this-&gt;peerinfo.identifier);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                peer = &amp;priv-&gt;peer;</div><div class='del'>-                if (list_empty (&amp;peer-&gt;ioq)) {</div><div class='del'>-                        ret = __gf_rdma_ioq_churn_entry (peer, entry);</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                need_append = 0;</div><div class='del'>-</div><div class='del'>-                                if (ret &lt; 0) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                                RDMA_MSG_PROC_IOQ_ENTRY_FAILED,</div><div class='del'>-                                                "processing ioq entry destined"</div><div class='del'>-                                                " to (%s) failed",</div><div class='del'>-                                                this-&gt;peerinfo.identifier);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        peer = &amp;priv-&gt;peer;</div><div class='add'>+        if (list_empty(&amp;peer-&gt;ioq)) {</div><div class='add'>+            ret = __gf_rdma_ioq_churn_entry(peer, entry);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                need_append = 0;</div><div class='ctx'> </div><div class='del'>-                if (need_append) {</div><div class='del'>-                        list_add_tail (&amp;entry-&gt;list, &amp;peer-&gt;ioq);</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                           RDMA_MSG_PROC_IOQ_ENTRY_FAILED,</div><div class='add'>+                           "processing ioq entry destined"</div><div class='add'>+                           " to (%s) failed",</div><div class='add'>+                           this-&gt;peerinfo.identifier);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        if (need_append) {</div><div class='add'>+            list_add_tail(&amp;entry-&gt;list, &amp;peer-&gt;ioq);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        return ret;</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_rdma_ioq_t *</div><div class='del'>-gf_rdma_ioq_new (rpc_transport_t *this, rpc_transport_data_t *data)</div><div class='add'>+gf_rdma_ioq_new(rpc_transport_t *this, rpc_transport_data_t *data)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_ioq_t       *entry = NULL;</div><div class='del'>-        int                  count = 0, i = 0;</div><div class='del'>-        rpc_transport_msg_t *msg   = NULL;</div><div class='del'>-        gf_rdma_private_t   *priv  = NULL;</div><div class='add'>+    gf_rdma_ioq_t *entry = NULL;</div><div class='add'>+    int count = 0, i = 0;</div><div class='add'>+    rpc_transport_msg_t *msg = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((data == NULL) || (this == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((data == NULL) || (this == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        entry = mem_get (priv-&gt;device-&gt;ioq_pool);</div><div class='del'>-        if (entry == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        memset (entry, 0, sizeof (*entry));</div><div class='del'>-        entry-&gt;pool = priv-&gt;device-&gt;ioq_pool;</div><div class='del'>-</div><div class='del'>-        if (data-&gt;is_request) {</div><div class='del'>-                msg = &amp;data-&gt;data.req.msg;</div><div class='del'>-                if (data-&gt;data.req.rsp.rsphdr_count != 0) {</div><div class='del'>-                        for (i = 0; i &lt; data-&gt;data.req.rsp.rsphdr_count; i++) {</div><div class='del'>-                                entry-&gt;msg.request.rsphdr_vec[i]</div><div class='del'>-                                        = data-&gt;data.req.rsp.rsphdr[i];</div><div class='del'>-                        }</div><div class='add'>+    entry = mem_get(priv-&gt;device-&gt;ioq_pool);</div><div class='add'>+    if (entry == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    memset(entry, 0, sizeof(*entry));</div><div class='add'>+    entry-&gt;pool = priv-&gt;device-&gt;ioq_pool;</div><div class='ctx'> </div><div class='del'>-                        entry-&gt;msg.request.rsphdr_count =</div><div class='del'>-                                data-&gt;data.req.rsp.rsphdr_count;</div><div class='del'>-                }</div><div class='add'>+    if (data-&gt;is_request) {</div><div class='add'>+        msg = &amp;data-&gt;data.req.msg;</div><div class='add'>+        if (data-&gt;data.req.rsp.rsphdr_count != 0) {</div><div class='add'>+            for (i = 0; i &lt; data-&gt;data.req.rsp.rsphdr_count; i++) {</div><div class='add'>+                entry-&gt;msg.request.rsphdr_vec[i] = data-&gt;data.req.rsp.rsphdr[i];</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (data-&gt;data.req.rsp.rsp_payload_count != 0) {</div><div class='del'>-                        for (i = 0; i &lt; data-&gt;data.req.rsp.rsp_payload_count;</div><div class='del'>-                             i++) {</div><div class='del'>-                                entry-&gt;msg.request.rsp_payload[i]</div><div class='del'>-                                        = data-&gt;data.req.rsp.rsp_payload[i];</div><div class='del'>-                        }</div><div class='add'>+            entry-&gt;msg.request.rsphdr_count = data-&gt;data.req.rsp.rsphdr_count;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        entry-&gt;msg.request.rsp_payload_count =</div><div class='del'>-                                data-&gt;data.req.rsp.rsp_payload_count;</div><div class='del'>-                }</div><div class='add'>+        if (data-&gt;data.req.rsp.rsp_payload_count != 0) {</div><div class='add'>+            for (i = 0; i &lt; data-&gt;data.req.rsp.rsp_payload_count; i++) {</div><div class='add'>+                entry-&gt;msg.request.rsp_payload[i] = data-&gt;data.req.rsp</div><div class='add'>+                                                        .rsp_payload[i];</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                entry-&gt;msg.request.rpc_req = data-&gt;data.req.rpc_req;</div><div class='add'>+            entry-&gt;msg.request.rsp_payload_count = data-&gt;data.req.rsp</div><div class='add'>+                                                       .rsp_payload_count;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (data-&gt;data.req.rsp.rsp_iobref != NULL) {</div><div class='del'>-                        entry-&gt;msg.request.rsp_iobref</div><div class='del'>-                                = iobref_ref (data-&gt;data.req.rsp.rsp_iobref);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                msg = &amp;data-&gt;data.reply.msg;</div><div class='del'>-                entry-&gt;msg.reply_info = data-&gt;data.reply.private;</div><div class='add'>+        entry-&gt;msg.request.rpc_req = data-&gt;data.req.rpc_req;</div><div class='add'>+</div><div class='add'>+        if (data-&gt;data.req.rsp.rsp_iobref != NULL) {</div><div class='add'>+            entry-&gt;msg.request.rsp_iobref = iobref_ref(</div><div class='add'>+                data-&gt;data.req.rsp.rsp_iobref);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        msg = &amp;data-&gt;data.reply.msg;</div><div class='add'>+        entry-&gt;msg.reply_info = data-&gt;data.reply.private;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        entry-&gt;is_request = data-&gt;is_request;</div><div class='add'>+    entry-&gt;is_request = data-&gt;is_request;</div><div class='ctx'> </div><div class='del'>-        count = msg-&gt;rpchdrcount + msg-&gt;proghdrcount + msg-&gt;progpayloadcount;</div><div class='add'>+    count = msg-&gt;rpchdrcount + msg-&gt;proghdrcount + msg-&gt;progpayloadcount;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (count &lt;= MAX_IOVEC);</div><div class='add'>+    GF_ASSERT(count &lt;= MAX_IOVEC);</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;rpchdr != NULL) {</div><div class='del'>-                memcpy (&amp;entry-&gt;rpchdr[0], msg-&gt;rpchdr,</div><div class='del'>-                        sizeof (struct iovec) * msg-&gt;rpchdrcount);</div><div class='del'>-                entry-&gt;rpchdr_count = msg-&gt;rpchdrcount;</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;rpchdr != NULL) {</div><div class='add'>+        memcpy(&amp;entry-&gt;rpchdr[0], msg-&gt;rpchdr,</div><div class='add'>+               sizeof(struct iovec) * msg-&gt;rpchdrcount);</div><div class='add'>+        entry-&gt;rpchdr_count = msg-&gt;rpchdrcount;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;proghdr != NULL) {</div><div class='del'>-                memcpy (&amp;entry-&gt;proghdr[0], msg-&gt;proghdr,</div><div class='del'>-                        sizeof (struct iovec) * msg-&gt;proghdrcount);</div><div class='del'>-                entry-&gt;proghdr_count = msg-&gt;proghdrcount;</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;proghdr != NULL) {</div><div class='add'>+        memcpy(&amp;entry-&gt;proghdr[0], msg-&gt;proghdr,</div><div class='add'>+               sizeof(struct iovec) * msg-&gt;proghdrcount);</div><div class='add'>+        entry-&gt;proghdr_count = msg-&gt;proghdrcount;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;progpayload != NULL) {</div><div class='del'>-                memcpy (&amp;entry-&gt;prog_payload[0], msg-&gt;progpayload,</div><div class='del'>-                        sizeof (struct iovec) * msg-&gt;progpayloadcount);</div><div class='del'>-                entry-&gt;prog_payload_count = msg-&gt;progpayloadcount;</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;progpayload != NULL) {</div><div class='add'>+        memcpy(&amp;entry-&gt;prog_payload[0], msg-&gt;progpayload,</div><div class='add'>+               sizeof(struct iovec) * msg-&gt;progpayloadcount);</div><div class='add'>+        entry-&gt;prog_payload_count = msg-&gt;progpayloadcount;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;iobref != NULL) {</div><div class='del'>-                entry-&gt;iobref = iobref_ref (msg-&gt;iobref);</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;iobref != NULL) {</div><div class='add'>+        entry-&gt;iobref = iobref_ref(msg-&gt;iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;entry-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entry-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return entry;</div><div class='add'>+    return entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_submit_request (rpc_transport_t *this, rpc_transport_req_t *req)</div><div class='add'>+gf_rdma_submit_request(rpc_transport_t *this, rpc_transport_req_t *req)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret   = 0;</div><div class='del'>-        gf_rdma_ioq_t        *entry = NULL;</div><div class='del'>-        rpc_transport_data_t  data  = {0, };</div><div class='del'>-        gf_rdma_private_t    *priv  = NULL;</div><div class='del'>-        gf_rdma_peer_t       *peer  = NULL;</div><div class='del'>-</div><div class='del'>-        if (req == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='del'>-        data.is_request = 1;</div><div class='del'>-        data.data.req = *req;</div><div class='del'>-/*</div><div class='del'>- * when fist message is received on a transport, quota variable will</div><div class='del'>- * initiaize  and quota_set will set to one. In gluster code client</div><div class='del'>- * process with respect to transport is the one who sends the first</div><div class='del'>- * message. Before settng quota_set variable if a submit request is</div><div class='del'>- * came on server, then the message should not send.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;entity == GF_RDMA_SERVER &amp;&amp; peer-&gt;quota_set == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_ioq_t *entry = NULL;</div><div class='add'>+    rpc_transport_data_t data = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+</div><div class='add'>+    if (req == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='add'>+    data.is_request = 1;</div><div class='add'>+    data.data.req = *req;</div><div class='add'>+    /*</div><div class='add'>+     * when fist message is received on a transport, quota variable will</div><div class='add'>+     * initiaize  and quota_set will set to one. In gluster code client</div><div class='add'>+     * process with respect to transport is the one who sends the first</div><div class='add'>+     * message. Before settng quota_set variable if a submit request is</div><div class='add'>+     * came on server, then the message should not send.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;entity == GF_RDMA_SERVER &amp;&amp; peer-&gt;quota_set == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        entry = gf_rdma_ioq_new (this, &amp;data);</div><div class='del'>-        if (entry == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_NEW_IOQ_ENTRY_FAILED,</div><div class='del'>-                        "getting a new ioq entry failed (peer:%s)",</div><div class='del'>-                        this-&gt;peerinfo.identifier);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    entry = gf_rdma_ioq_new(this, &amp;data);</div><div class='add'>+    if (entry == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_NEW_IOQ_ENTRY_FAILED,</div><div class='add'>+               "getting a new ioq entry failed (peer:%s)",</div><div class='add'>+               this-&gt;peerinfo.identifier);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_rdma_writev (this, entry);</div><div class='add'>+    ret = gf_rdma_writev(this, entry);</div><div class='ctx'> </div><div class='del'>-        if (ret &gt; 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-        } else if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_WRITE_PEER_FAILED,</div><div class='del'>-                        "sending request to peer (%s) failed",</div><div class='del'>-                        this-&gt;peerinfo.identifier);</div><div class='del'>-                rpc_transport_disconnect (this, _gf_false);</div><div class='del'>-        }</div><div class='add'>+    if (ret &gt; 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_WRITE_PEER_FAILED,</div><div class='add'>+               "sending request to peer (%s) failed",</div><div class='add'>+               this-&gt;peerinfo.identifier);</div><div class='add'>+        rpc_transport_disconnect(this, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_submit_reply (rpc_transport_t *this, rpc_transport_reply_t *reply)</div><div class='add'>+gf_rdma_submit_reply(rpc_transport_t *this, rpc_transport_reply_t *reply)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret   = 0;</div><div class='del'>-        gf_rdma_ioq_t        *entry = NULL;</div><div class='del'>-        rpc_transport_data_t  data  = {0, };</div><div class='del'>-</div><div class='del'>-        if (reply == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        data.data.reply = *reply;</div><div class='del'>-</div><div class='del'>-        entry = gf_rdma_ioq_new (this, &amp;data);</div><div class='del'>-        if (entry == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_NEW_IOQ_ENTRY_FAILED,</div><div class='del'>-                        "getting a new ioq entry failed (peer:%s)",</div><div class='del'>-                        this-&gt;peerinfo.identifier);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_writev (this, entry);</div><div class='del'>-        if (ret &gt; 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-        } else if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_WRITE_PEER_FAILED,</div><div class='del'>-                        "sending request to peer (%s) failed",</div><div class='del'>-                        this-&gt;peerinfo.identifier);</div><div class='del'>-                rpc_transport_disconnect (this, _gf_false);</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_ioq_t *entry = NULL;</div><div class='add'>+    rpc_transport_data_t data = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (reply == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    data.data.reply = *reply;</div><div class='add'>+</div><div class='add'>+    entry = gf_rdma_ioq_new(this, &amp;data);</div><div class='add'>+    if (entry == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_NEW_IOQ_ENTRY_FAILED,</div><div class='add'>+               "getting a new ioq entry failed (peer:%s)",</div><div class='add'>+               this-&gt;peerinfo.identifier);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_writev(this, entry);</div><div class='add'>+    if (ret &gt; 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_WRITE_PEER_FAILED,</div><div class='add'>+               "sending request to peer (%s) failed",</div><div class='add'>+               this-&gt;peerinfo.identifier);</div><div class='add'>+        rpc_transport_disconnect(this, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_rdma_register_peer (gf_rdma_device_t *device, int32_t qp_num,</div><div class='del'>-                       gf_rdma_peer_t *peer)</div><div class='add'>+gf_rdma_register_peer(gf_rdma_device_t *device, int32_t qp_num,</div><div class='add'>+                      gf_rdma_peer_t *peer)</div><div class='ctx'> {</div><div class='del'>-        struct _qpent   *ent   = NULL;</div><div class='del'>-        gf_rdma_qpreg_t *qpreg = NULL;</div><div class='del'>-        int32_t          hash  = 0;</div><div class='del'>-        int              ret   = -1;</div><div class='add'>+    struct _qpent *ent = NULL;</div><div class='add'>+    gf_rdma_qpreg_t *qpreg = NULL;</div><div class='add'>+    int32_t hash = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        qpreg = &amp;device-&gt;qpreg;</div><div class='del'>-        hash = qp_num % 42;</div><div class='add'>+    qpreg = &amp;device-&gt;qpreg;</div><div class='add'>+    hash = qp_num % 42;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;qpreg-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ent = qpreg-&gt;ents[hash].next;</div><div class='del'>-                while ((ent != &amp;qpreg-&gt;ents[hash]) &amp;&amp; (ent-&gt;qp_num != qp_num)) {</div><div class='del'>-                        ent = ent-&gt;next;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ent-&gt;qp_num == qp_num) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;qpreg-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ent = qpreg-&gt;ents[hash].next;</div><div class='add'>+        while ((ent != &amp;qpreg-&gt;ents[hash]) &amp;&amp; (ent-&gt;qp_num != qp_num)) {</div><div class='add'>+            ent = ent-&gt;next;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ent = (struct _qpent *) GF_CALLOC (1, sizeof (*ent),</div><div class='del'>-                                                   gf_common_mt_qpent);</div><div class='del'>-                if (ent == NULL) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (ent-&gt;qp_num == qp_num) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* TODO: ref reg-&gt;peer */</div><div class='del'>-                ent-&gt;peer = peer;</div><div class='del'>-                ent-&gt;next = &amp;qpreg-&gt;ents[hash];</div><div class='del'>-                ent-&gt;prev = ent-&gt;next-&gt;prev;</div><div class='del'>-                ent-&gt;next-&gt;prev = ent;</div><div class='del'>-                ent-&gt;prev-&gt;next = ent;</div><div class='del'>-                ent-&gt;qp_num = qp_num;</div><div class='del'>-                qpreg-&gt;count++;</div><div class='del'>-                ret = 0;</div><div class='add'>+        ent = (struct _qpent *)GF_CALLOC(1, sizeof(*ent), gf_common_mt_qpent);</div><div class='add'>+        if (ent == NULL) {</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        /* TODO: ref reg-&gt;peer */</div><div class='add'>+        ent-&gt;peer = peer;</div><div class='add'>+        ent-&gt;next = &amp;qpreg-&gt;ents[hash];</div><div class='add'>+        ent-&gt;prev = ent-&gt;next-&gt;prev;</div><div class='add'>+        ent-&gt;next-&gt;prev = ent;</div><div class='add'>+        ent-&gt;prev-&gt;next = ent;</div><div class='add'>+        ent-&gt;qp_num = qp_num;</div><div class='add'>+        qpreg-&gt;count++;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;qpreg-&gt;lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;qpreg-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_unregister_peer (gf_rdma_device_t *device, int32_t qp_num)</div><div class='add'>+gf_rdma_unregister_peer(gf_rdma_device_t *device, int32_t qp_num)</div><div class='ctx'> {</div><div class='del'>-        struct _qpent   *ent   = NULL;</div><div class='del'>-        gf_rdma_qpreg_t *qpreg = NULL;</div><div class='del'>-        int32_t          hash  = 0;</div><div class='add'>+    struct _qpent *ent = NULL;</div><div class='add'>+    gf_rdma_qpreg_t *qpreg = NULL;</div><div class='add'>+    int32_t hash = 0;</div><div class='ctx'> </div><div class='del'>-        qpreg = &amp;device-&gt;qpreg;</div><div class='del'>-        hash = qp_num % 42;</div><div class='add'>+    qpreg = &amp;device-&gt;qpreg;</div><div class='add'>+    hash = qp_num % 42;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;qpreg-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ent = qpreg-&gt;ents[hash].next;</div><div class='del'>-                while ((ent != &amp;qpreg-&gt;ents[hash]) &amp;&amp; (ent-&gt;qp_num != qp_num))</div><div class='del'>-                        ent = ent-&gt;next;</div><div class='del'>-                if (ent-&gt;qp_num != qp_num) {</div><div class='del'>-                        pthread_mutex_unlock (&amp;qpreg-&gt;lock);</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-                ent-&gt;prev-&gt;next = ent-&gt;next;</div><div class='del'>-                ent-&gt;next-&gt;prev = ent-&gt;prev;</div><div class='del'>-                /* TODO: unref reg-&gt;peer */</div><div class='del'>-                GF_FREE (ent);</div><div class='del'>-                qpreg-&gt;count--;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;qpreg-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;qpreg-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ent = qpreg-&gt;ents[hash].next;</div><div class='add'>+        while ((ent != &amp;qpreg-&gt;ents[hash]) &amp;&amp; (ent-&gt;qp_num != qp_num))</div><div class='add'>+            ent = ent-&gt;next;</div><div class='add'>+        if (ent-&gt;qp_num != qp_num) {</div><div class='add'>+            pthread_mutex_unlock(&amp;qpreg-&gt;lock);</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+        ent-&gt;prev-&gt;next = ent-&gt;next;</div><div class='add'>+        ent-&gt;next-&gt;prev = ent-&gt;prev;</div><div class='add'>+        /* TODO: unref reg-&gt;peer */</div><div class='add'>+        GF_FREE(ent);</div><div class='add'>+        qpreg-&gt;count--;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;qpreg-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_rdma_peer_t *</div><div class='del'>-__gf_rdma_lookup_peer (gf_rdma_device_t *device, int32_t qp_num)</div><div class='add'>+__gf_rdma_lookup_peer(gf_rdma_device_t *device, int32_t qp_num)</div><div class='ctx'> {</div><div class='del'>-        struct _qpent   *ent   = NULL;</div><div class='del'>-        gf_rdma_peer_t  *peer  = NULL;</div><div class='del'>-        gf_rdma_qpreg_t *qpreg = NULL;</div><div class='del'>-        int32_t          hash  = 0;</div><div class='del'>-</div><div class='del'>-        qpreg = &amp;device-&gt;qpreg;</div><div class='del'>-        hash = qp_num % 42;</div><div class='del'>-        ent = qpreg-&gt;ents[hash].next;</div><div class='del'>-        while ((ent != &amp;qpreg-&gt;ents[hash]) &amp;&amp; (ent-&gt;qp_num != qp_num))</div><div class='del'>-                ent = ent-&gt;next;</div><div class='del'>-</div><div class='del'>-        if (ent != &amp;qpreg-&gt;ents[hash]) {</div><div class='del'>-                peer = ent-&gt;peer;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return peer;</div><div class='add'>+    struct _qpent *ent = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    gf_rdma_qpreg_t *qpreg = NULL;</div><div class='add'>+    int32_t hash = 0;</div><div class='add'>+</div><div class='add'>+    qpreg = &amp;device-&gt;qpreg;</div><div class='add'>+    hash = qp_num % 42;</div><div class='add'>+    ent = qpreg-&gt;ents[hash].next;</div><div class='add'>+    while ((ent != &amp;qpreg-&gt;ents[hash]) &amp;&amp; (ent-&gt;qp_num != qp_num))</div><div class='add'>+        ent = ent-&gt;next;</div><div class='add'>+</div><div class='add'>+    if (ent != &amp;qpreg-&gt;ents[hash]) {</div><div class='add'>+        peer = ent-&gt;peer;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return peer;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__gf_rdma_destroy_qp (rpc_transport_t *this)</div><div class='add'>+__gf_rdma_destroy_qp(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv-&gt;peer.qp) {</div><div class='del'>-                gf_rdma_unregister_peer (priv-&gt;device, priv-&gt;peer.qp-&gt;qp_num);</div><div class='del'>-                rdma_destroy_qp (priv-&gt;peer.cm_id);</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;peer.qp = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv-&gt;peer.qp) {</div><div class='add'>+        gf_rdma_unregister_peer(priv-&gt;device, priv-&gt;peer.qp-&gt;qp_num);</div><div class='add'>+        rdma_destroy_qp(priv-&gt;peer.cm_id);</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;peer.qp = NULL;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_create_qp (rpc_transport_t *this)</div><div class='add'>+gf_rdma_create_qp(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv        = NULL;</div><div class='del'>-        gf_rdma_device_t  *device      = NULL;</div><div class='del'>-        int32_t            ret         = 0;</div><div class='del'>-        gf_rdma_peer_t    *peer        = NULL;</div><div class='del'>-        char              *device_name = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='del'>-</div><div class='del'>-        device_name = (char *)ibv_get_device_name (peer-&gt;cm_id-&gt;verbs-&gt;device);</div><div class='del'>-        if (device_name == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_GET_DEVICE_NAME_FAILED, "cannot get "</div><div class='del'>-                        "device_name");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        device = gf_rdma_get_device (this, peer-&gt;cm_id-&gt;verbs,</div><div class='del'>-                                     device_name);</div><div class='del'>-        if (device == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_GET_DEVICE_FAILED, "cannot get device for "</div><div class='del'>-                        "device %s", device_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;device == NULL) {</div><div class='del'>-                priv-&gt;device = device;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        struct ibv_qp_init_attr init_attr = {</div><div class='del'>-                .send_cq        = device-&gt;send_cq,</div><div class='del'>-                .recv_cq        = device-&gt;recv_cq,</div><div class='del'>-                .srq            = device-&gt;srq,</div><div class='del'>-                .cap            = {</div><div class='del'>-                        .max_send_wr  = peer-&gt;send_count,</div><div class='del'>-                        .max_recv_wr  = peer-&gt;recv_count,</div><div class='del'>-                        .max_send_sge = 2,</div><div class='del'>-                        .max_recv_sge = 1</div><div class='del'>-                },</div><div class='del'>-                .qp_type = IBV_QPT_RC</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        ret = rdma_create_qp(peer-&gt;cm_id, device-&gt;pd, &amp;init_attr);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (peer-&gt;trans-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                        RDMA_MSG_CREAT_QP_FAILED, "%s: could not create QP",</div><div class='del'>-                        this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        peer-&gt;qp = peer-&gt;cm_id-&gt;qp;</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_register_peer (device, peer-&gt;qp-&gt;qp_num, peer);</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    char *device_name = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='add'>+</div><div class='add'>+    device_name = (char *)ibv_get_device_name(peer-&gt;cm_id-&gt;verbs-&gt;device);</div><div class='add'>+    if (device_name == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_GET_DEVICE_NAME_FAILED,</div><div class='add'>+               "cannot get "</div><div class='add'>+               "device_name");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    device = gf_rdma_get_device(this, peer-&gt;cm_id-&gt;verbs, device_name);</div><div class='add'>+    if (device == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_GET_DEVICE_FAILED,</div><div class='add'>+               "cannot get device for "</div><div class='add'>+               "device %s",</div><div class='add'>+               device_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;device == NULL) {</div><div class='add'>+        priv-&gt;device = device;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    struct ibv_qp_init_attr init_attr = {</div><div class='add'>+        .send_cq = device-&gt;send_cq,</div><div class='add'>+        .recv_cq = device-&gt;recv_cq,</div><div class='add'>+        .srq = device-&gt;srq,</div><div class='add'>+        .cap = {.max_send_wr = peer-&gt;send_count,</div><div class='add'>+                .max_recv_wr = peer-&gt;recv_count,</div><div class='add'>+                .max_send_sge = 2,</div><div class='add'>+                .max_recv_sge = 1},</div><div class='add'>+        .qp_type = IBV_QPT_RC};</div><div class='add'>+</div><div class='add'>+    ret = rdma_create_qp(peer-&gt;cm_id, device-&gt;pd, &amp;init_attr);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(peer-&gt;trans-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='add'>+               RDMA_MSG_CREAT_QP_FAILED, "%s: could not create QP", this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    peer-&gt;qp = peer-&gt;cm_id-&gt;qp;</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_register_peer(device, peer-&gt;qp-&gt;qp_num, peer);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                __gf_rdma_destroy_qp (this);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        __gf_rdma_destroy_qp(this);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-__gf_rdma_teardown (rpc_transport_t *this)</div><div class='add'>+__gf_rdma_teardown(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='del'>-        gf_rdma_peer_t    *peer = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='ctx'> </div><div class='del'>-        if (peer-&gt;cm_id &amp;&amp; peer-&gt;cm_id-&gt;qp != NULL) {</div><div class='del'>-                __gf_rdma_destroy_qp (this);</div><div class='del'>-        }</div><div class='add'>+    if (peer-&gt;cm_id &amp;&amp; peer-&gt;cm_id-&gt;qp != NULL) {</div><div class='add'>+        __gf_rdma_destroy_qp(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (&amp;priv-&gt;peer.ioq)) {</div><div class='del'>-                __gf_rdma_ioq_flush (peer);</div><div class='del'>-        }</div><div class='add'>+    if (!list_empty(&amp;priv-&gt;peer.ioq)) {</div><div class='add'>+        __gf_rdma_ioq_flush(peer);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (peer-&gt;cm_id != NULL) {</div><div class='del'>-                rdma_destroy_id (peer-&gt;cm_id);</div><div class='del'>-                peer-&gt;cm_id = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (peer-&gt;cm_id != NULL) {</div><div class='add'>+        rdma_destroy_id(peer-&gt;cm_id);</div><div class='add'>+        peer-&gt;cm_id = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: decrement cq size */</div><div class='del'>-        return 0;</div><div class='add'>+    /* TODO: decrement cq size */</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_teardown (rpc_transport_t *this)</div><div class='add'>+gf_rdma_teardown(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (this == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (this == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                ret = __gf_rdma_teardown (this);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = __gf_rdma_teardown(this);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * allocates new memory to hold write-chunklist. New memory is needed since</div><div class='ctx'>  * write-chunklist will be used while sending reply and the post holding initial</div><div class='hunk'>@@ -3334,1756 +3201,1704 @@ out:</div><div class='ctx'>  * event is sent to upper layers.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_get_write_chunklist (char **ptr, gf_rdma_write_array_t **write_ary)</div><div class='add'>+gf_rdma_get_write_chunklist(char **ptr, gf_rdma_write_array_t **write_ary)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_write_array_t *from = NULL, *to = NULL;</div><div class='del'>-        int32_t                ret  = -1, size = 0, i = 0;</div><div class='del'>-</div><div class='del'>-        from = (gf_rdma_write_array_t *) *ptr;</div><div class='del'>-        if (from-&gt;wc_discrim == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        from-&gt;wc_nchunks = ntoh32 (from-&gt;wc_nchunks);</div><div class='del'>-</div><div class='del'>-        size = sizeof (*from)</div><div class='del'>-                + (sizeof (gf_rdma_write_chunk_t) * from-&gt;wc_nchunks);</div><div class='del'>-</div><div class='del'>-        to = GF_CALLOC (1, size, gf_common_mt_char);</div><div class='del'>-        if (to == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        to-&gt;wc_discrim = ntoh32 (from-&gt;wc_discrim);</div><div class='del'>-        to-&gt;wc_nchunks = from-&gt;wc_nchunks;</div><div class='add'>+    gf_rdma_write_array_t *from = NULL, *to = NULL;</div><div class='add'>+    int32_t ret = -1, size = 0, i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; to-&gt;wc_nchunks; i++) {</div><div class='del'>-                to-&gt;wc_array[i].wc_target.rs_handle</div><div class='del'>-                        = ntoh32 (from-&gt;wc_array[i].wc_target.rs_handle);</div><div class='del'>-                to-&gt;wc_array[i].wc_target.rs_length</div><div class='del'>-                        = ntoh32 (from-&gt;wc_array[i].wc_target.rs_length);</div><div class='del'>-                to-&gt;wc_array[i].wc_target.rs_offset</div><div class='del'>-                        = ntoh64 (from-&gt;wc_array[i].wc_target.rs_offset);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *write_ary = to;</div><div class='add'>+    from = (gf_rdma_write_array_t *)*ptr;</div><div class='add'>+    if (from-&gt;wc_discrim == 0) {</div><div class='ctx'>         ret = 0;</div><div class='del'>-        *ptr = (char *)&amp;from-&gt;wc_array[i].wc_target.rs_handle;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    from-&gt;wc_nchunks = ntoh32(from-&gt;wc_nchunks);</div><div class='add'>+</div><div class='add'>+    size = sizeof(*from) + (sizeof(gf_rdma_write_chunk_t) * from-&gt;wc_nchunks);</div><div class='add'>+</div><div class='add'>+    to = GF_CALLOC(1, size, gf_common_mt_char);</div><div class='add'>+    if (to == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    to-&gt;wc_discrim = ntoh32(from-&gt;wc_discrim);</div><div class='add'>+    to-&gt;wc_nchunks = from-&gt;wc_nchunks;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; to-&gt;wc_nchunks; i++) {</div><div class='add'>+        to-&gt;wc_array[i].wc_target.rs_handle = ntoh32(</div><div class='add'>+            from-&gt;wc_array[i].wc_target.rs_handle);</div><div class='add'>+        to-&gt;wc_array[i].wc_target.rs_length = ntoh32(</div><div class='add'>+            from-&gt;wc_array[i].wc_target.rs_length);</div><div class='add'>+        to-&gt;wc_array[i].wc_target.rs_offset = ntoh64(</div><div class='add'>+            from-&gt;wc_array[i].wc_target.rs_offset);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *write_ary = to;</div><div class='add'>+    ret = 0;</div><div class='add'>+    *ptr = (char *)&amp;from-&gt;wc_array[i].wc_target.rs_handle;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * does not allocate new memory to hold read-chunklist. New memory is not</div><div class='ctx'>  * needed, since post is not put back to srq till we've completed all the</div><div class='ctx'>  * rdma-reads and hence readchunk-list can point to memory held by post.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_get_read_chunklist (char **ptr, gf_rdma_read_chunk_t **readch)</div><div class='add'>+gf_rdma_get_read_chunklist(char **ptr, gf_rdma_read_chunk_t **readch)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret   = -1;</div><div class='del'>-        gf_rdma_read_chunk_t *chunk = NULL;</div><div class='del'>-        int                   i     = 0;</div><div class='del'>-</div><div class='del'>-        chunk = (gf_rdma_read_chunk_t *)*ptr;</div><div class='del'>-        if (chunk[0].rc_discrim == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_read_chunk_t *chunk = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; chunk[i].rc_discrim != 0; i++) {</div><div class='del'>-                chunk[i].rc_discrim = ntoh32 (chunk[i].rc_discrim);</div><div class='del'>-                chunk[i].rc_position = ntoh32 (chunk[i].rc_position);</div><div class='del'>-                chunk[i].rc_target.rs_handle</div><div class='del'>-                        = ntoh32 (chunk[i].rc_target.rs_handle);</div><div class='del'>-                chunk[i].rc_target.rs_length</div><div class='del'>-                        = ntoh32 (chunk[i].rc_target.rs_length);</div><div class='del'>-                chunk[i].rc_target.rs_offset</div><div class='del'>-                        = ntoh64 (chunk[i].rc_target.rs_offset);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *readch = &amp;chunk[0];</div><div class='add'>+    chunk = (gf_rdma_read_chunk_t *)*ptr;</div><div class='add'>+    if (chunk[0].rc_discrim == 0) {</div><div class='ctx'>         ret = 0;</div><div class='del'>-        *ptr = (char *)&amp;chunk[i].rc_discrim;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; chunk[i].rc_discrim != 0; i++) {</div><div class='add'>+        chunk[i].rc_discrim = ntoh32(chunk[i].rc_discrim);</div><div class='add'>+        chunk[i].rc_position = ntoh32(chunk[i].rc_position);</div><div class='add'>+        chunk[i].rc_target.rs_handle = ntoh32(chunk[i].rc_target.rs_handle);</div><div class='add'>+        chunk[i].rc_target.rs_length = ntoh32(chunk[i].rc_target.rs_length);</div><div class='add'>+        chunk[i].rc_target.rs_offset = ntoh64(chunk[i].rc_target.rs_offset);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *readch = &amp;chunk[0];</div><div class='add'>+    ret = 0;</div><div class='add'>+    *ptr = (char *)&amp;chunk[i].rc_discrim;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_decode_error_msg (gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='del'>-                          size_t bytes_in_post)</div><div class='add'>+gf_rdma_decode_error_msg(gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='add'>+                         size_t bytes_in_post)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_header_t *header  = NULL;</div><div class='del'>-        struct iobuf     *iobuf   = NULL;</div><div class='del'>-        struct iobref    *iobref  = NULL;</div><div class='del'>-        int32_t           ret     = -1;</div><div class='del'>-        struct rpc_msg    rpc_msg = {0, };</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-        header-&gt;rm_body.rm_error.rm_type</div><div class='del'>-                = ntoh32 (header-&gt;rm_body.rm_error.rm_type);</div><div class='del'>-        if (header-&gt;rm_body.rm_error.rm_type == ERR_VERS) {</div><div class='del'>-                header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_low =</div><div class='del'>-                        ntoh32 (header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_low);</div><div class='del'>-                header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_high =</div><div class='del'>-                        ntoh32 (header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_high);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rpc_msg.rm_xid = header-&gt;rm_xid;</div><div class='del'>-        rpc_msg.rm_direction = REPLY;</div><div class='del'>-        rpc_msg.rm_reply.rp_stat = MSG_DENIED;</div><div class='del'>-</div><div class='del'>-        iobuf = iobuf_get2 (peer-&gt;trans-&gt;ctx-&gt;iobuf_pool, bytes_in_post);</div><div class='del'>-        if (iobuf == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        post-&gt;ctx.iobref = iobref = iobref_new ();</div><div class='del'>-        if (iobref == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iobref_add (iobref, iobuf);</div><div class='del'>-        iobuf_unref (iobuf);</div><div class='del'>-</div><div class='del'>-        ret = rpc_reply_to_xdr (&amp;rpc_msg, iobuf_ptr (iobuf),</div><div class='del'>-                                iobuf_pagesize (iobuf), &amp;post-&gt;ctx.vector[0]);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_RPC_REPLY_CREATE_FAILED, "Failed to create "</div><div class='del'>-                        "RPC reply");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        post-&gt;ctx.count = 1;</div><div class='del'>-</div><div class='del'>-        iobuf = NULL;</div><div class='del'>-        iobref = NULL;</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    struct rpc_msg rpc_msg = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+    header-&gt;rm_body.rm_error.rm_type = ntoh32(header-&gt;rm_body.rm_error.rm_type);</div><div class='add'>+    if (header-&gt;rm_body.rm_error.rm_type == ERR_VERS) {</div><div class='add'>+        header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_low = ntoh32(</div><div class='add'>+            header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_low);</div><div class='add'>+        header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_high = ntoh32(</div><div class='add'>+            header-&gt;rm_body.rm_error.rm_version.gf_rdma_vers_high);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc_msg.rm_xid = header-&gt;rm_xid;</div><div class='add'>+    rpc_msg.rm_direction = REPLY;</div><div class='add'>+    rpc_msg.rm_reply.rp_stat = MSG_DENIED;</div><div class='add'>+</div><div class='add'>+    iobuf = iobuf_get2(peer-&gt;trans-&gt;ctx-&gt;iobuf_pool, bytes_in_post);</div><div class='add'>+    if (iobuf == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    post-&gt;ctx.iobref = iobref = iobref_new();</div><div class='add'>+    if (iobref == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iobref_add(iobref, iobuf);</div><div class='add'>+    iobuf_unref(iobuf);</div><div class='add'>+</div><div class='add'>+    ret = rpc_reply_to_xdr(&amp;rpc_msg, iobuf_ptr(iobuf), iobuf_pagesize(iobuf),</div><div class='add'>+                           &amp;post-&gt;ctx.vector[0]);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_RPC_REPLY_CREATE_FAILED,</div><div class='add'>+               "Failed to create "</div><div class='add'>+               "RPC reply");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    post-&gt;ctx.count = 1;</div><div class='add'>+</div><div class='add'>+    iobuf = NULL;</div><div class='add'>+    iobref = NULL;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (iobuf != NULL) {</div><div class='del'>-                        iobuf_unref (iobuf);</div><div class='del'>-                }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (iobuf != NULL) {</div><div class='add'>+            iobuf_unref(iobuf);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (iobref != NULL) {</div><div class='del'>-                        iobref_unref (iobref);</div><div class='del'>-                }</div><div class='add'>+        if (iobref != NULL) {</div><div class='add'>+            iobref_unref(iobref);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_decode_msg (gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='del'>-                    gf_rdma_read_chunk_t **readch, size_t bytes_in_post)</div><div class='add'>+gf_rdma_decode_msg(gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='add'>+                   gf_rdma_read_chunk_t **readch, size_t bytes_in_post)</div><div class='ctx'> {</div><div class='del'>-        int32_t                ret        = -1;</div><div class='del'>-        gf_rdma_header_t      *header     = NULL;</div><div class='del'>-        gf_rdma_reply_info_t  *reply_info = NULL;</div><div class='del'>-        char                  *ptr        = NULL;</div><div class='del'>-        gf_rdma_write_array_t *write_ary  = NULL;</div><div class='del'>-        size_t                 header_len = 0;</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-</div><div class='del'>-        ptr = (char *)&amp;header-&gt;rm_body.rm_chunks[0];</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_get_read_chunklist (&amp;ptr, readch);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_GET_READ_CHUNK_FAILED, "cannot get read "</div><div class='del'>-                        "chunklist from msg");</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    gf_rdma_reply_info_t *reply_info = NULL;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    gf_rdma_write_array_t *write_ary = NULL;</div><div class='add'>+    size_t header_len = 0;</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+</div><div class='add'>+    ptr = (char *)&amp;header-&gt;rm_body.rm_chunks[0];</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_get_read_chunklist(&amp;ptr, readch);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_GET_READ_CHUNK_FAILED,</div><div class='add'>+               "cannot get read "</div><div class='add'>+               "chunklist from msg");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* skip terminator of read-chunklist */</div><div class='add'>+    ptr = ptr + sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_get_write_chunklist(&amp;ptr, &amp;write_ary);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_GET_WRITE_CHUNK_FAILED,</div><div class='add'>+               "cannot get write "</div><div class='add'>+               "chunklist from msg");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* skip terminator of write-chunklist */</div><div class='add'>+    ptr = ptr + sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    if (write_ary != NULL) {</div><div class='add'>+        reply_info = gf_rdma_reply_info_alloc(peer);</div><div class='add'>+        if (reply_info == NULL) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_REPLY_INFO_ALLOC_FAILED, "reply_info_alloc failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* skip terminator of read-chunklist */</div><div class='del'>-        ptr = ptr + sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_get_write_chunklist (&amp;ptr, &amp;write_ary);</div><div class='add'>+        reply_info-&gt;type = gf_rdma_writech;</div><div class='add'>+        reply_info-&gt;wc_array = write_ary;</div><div class='add'>+        reply_info-&gt;rm_xid = header-&gt;rm_xid;</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_rdma_get_write_chunklist(&amp;ptr, &amp;write_ary);</div><div class='ctx'>         if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_GET_WRITE_CHUNK_FAILED, "cannot get write "</div><div class='del'>-                        "chunklist from msg");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_CHUNKLIST_ERROR,</div><div class='add'>+                   "cannot get reply "</div><div class='add'>+                   "chunklist from msg");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* skip terminator of write-chunklist */</div><div class='del'>-        ptr = ptr + sizeof (uint32_t);</div><div class='del'>-</div><div class='ctx'>         if (write_ary != NULL) {</div><div class='del'>-                reply_info = gf_rdma_reply_info_alloc (peer);</div><div class='del'>-                if (reply_info == NULL) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_REPLY_INFO_ALLOC_FAILED,</div><div class='del'>-                                "reply_info_alloc failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                reply_info-&gt;type = gf_rdma_writech;</div><div class='del'>-                reply_info-&gt;wc_array = write_ary;</div><div class='del'>-                reply_info-&gt;rm_xid = header-&gt;rm_xid;</div><div class='del'>-        } else {</div><div class='del'>-                ret = gf_rdma_get_write_chunklist (&amp;ptr, &amp;write_ary);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_CHUNKLIST_ERROR, "cannot get reply "</div><div class='del'>-                                "chunklist from msg");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (write_ary != NULL) {</div><div class='del'>-                        reply_info = gf_rdma_reply_info_alloc (peer);</div><div class='del'>-                        if (reply_info == NULL) {</div><div class='del'>-                                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                        RDMA_MSG_REPLY_INFO_ALLOC_FAILED,</div><div class='del'>-                                        "reply_info_alloc_failed");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+            reply_info = gf_rdma_reply_info_alloc(peer);</div><div class='add'>+            if (reply_info == NULL) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_REPLY_INFO_ALLOC_FAILED,</div><div class='add'>+                       "reply_info_alloc_failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        reply_info-&gt;type = gf_rdma_replych;</div><div class='del'>-                        reply_info-&gt;wc_array = write_ary;</div><div class='del'>-                        reply_info-&gt;rm_xid = header-&gt;rm_xid;</div><div class='del'>-                }</div><div class='add'>+            reply_info-&gt;type = gf_rdma_replych;</div><div class='add'>+            reply_info-&gt;wc_array = write_ary;</div><div class='add'>+            reply_info-&gt;rm_xid = header-&gt;rm_xid;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* skip terminator of reply chunk */</div><div class='del'>-        ptr = ptr + sizeof (uint32_t);</div><div class='del'>-        if (header-&gt;rm_type != GF_RDMA_NOMSG) {</div><div class='del'>-                header_len = (long)ptr - (long)post-&gt;buf;</div><div class='del'>-                post-&gt;ctx.vector[0].iov_len = (bytes_in_post - header_len);</div><div class='del'>-</div><div class='del'>-                post-&gt;ctx.hdr_iobuf = iobuf_get2 (peer-&gt;trans-&gt;ctx-&gt;iobuf_pool,</div><div class='del'>-                                                  (bytes_in_post - header_len));</div><div class='del'>-                if (post-&gt;ctx.hdr_iobuf == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    /* skip terminator of reply chunk */</div><div class='add'>+    ptr = ptr + sizeof(uint32_t);</div><div class='add'>+    if (header-&gt;rm_type != GF_RDMA_NOMSG) {</div><div class='add'>+        header_len = (long)ptr - (long)post-&gt;buf;</div><div class='add'>+        post-&gt;ctx.vector[0].iov_len = (bytes_in_post - header_len);</div><div class='ctx'> </div><div class='del'>-                post-&gt;ctx.vector[0].iov_base = iobuf_ptr (post-&gt;ctx.hdr_iobuf);</div><div class='del'>-                memcpy (post-&gt;ctx.vector[0].iov_base, ptr,</div><div class='del'>-                        post-&gt;ctx.vector[0].iov_len);</div><div class='del'>-                post-&gt;ctx.count = 1;</div><div class='add'>+        post-&gt;ctx.hdr_iobuf = iobuf_get2(peer-&gt;trans-&gt;ctx-&gt;iobuf_pool,</div><div class='add'>+                                         (bytes_in_post - header_len));</div><div class='add'>+        if (post-&gt;ctx.hdr_iobuf == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        post-&gt;ctx.reply_info = reply_info;</div><div class='del'>-out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (*readch != NULL) {</div><div class='del'>-                        GF_FREE (*readch);</div><div class='del'>-                        *readch = NULL;</div><div class='del'>-                }</div><div class='add'>+        post-&gt;ctx.vector[0].iov_base = iobuf_ptr(post-&gt;ctx.hdr_iobuf);</div><div class='add'>+        memcpy(post-&gt;ctx.vector[0].iov_base, ptr, post-&gt;ctx.vector[0].iov_len);</div><div class='add'>+        post-&gt;ctx.count = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (write_ary);</div><div class='add'>+    post-&gt;ctx.reply_info = reply_info;</div><div class='add'>+out:</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (*readch != NULL) {</div><div class='add'>+            GF_FREE(*readch);</div><div class='add'>+            *readch = NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        GF_FREE(write_ary);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* Assumes only one of either write-chunklist or a reply chunk is present */</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_decode_header (gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='del'>-                       gf_rdma_read_chunk_t **readch, size_t bytes_in_post)</div><div class='add'>+gf_rdma_decode_header(gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='add'>+                      gf_rdma_read_chunk_t **readch, size_t bytes_in_post)</div><div class='ctx'> {</div><div class='del'>-        int32_t           ret    = -1;</div><div class='del'>-        gf_rdma_header_t *header = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='ctx'> </div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='ctx'> </div><div class='del'>-        header-&gt;rm_xid = ntoh32 (header-&gt;rm_xid);</div><div class='del'>-        header-&gt;rm_vers = ntoh32 (header-&gt;rm_vers);</div><div class='del'>-        header-&gt;rm_credit = ntoh32 (header-&gt;rm_credit);</div><div class='del'>-        header-&gt;rm_type = ntoh32 (header-&gt;rm_type);</div><div class='add'>+    header-&gt;rm_xid = ntoh32(header-&gt;rm_xid);</div><div class='add'>+    header-&gt;rm_vers = ntoh32(header-&gt;rm_vers);</div><div class='add'>+    header-&gt;rm_credit = ntoh32(header-&gt;rm_credit);</div><div class='add'>+    header-&gt;rm_type = ntoh32(header-&gt;rm_type);</div><div class='ctx'> </div><div class='del'>-        switch (header-&gt;rm_type) {</div><div class='add'>+    switch (header-&gt;rm_type) {</div><div class='ctx'>         case GF_RDMA_MSG:</div><div class='ctx'>         case GF_RDMA_NOMSG:</div><div class='del'>-                ret = gf_rdma_decode_msg (peer, post, readch, bytes_in_post);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_ENCODE_ERROR, "cannot decode msg of "</div><div class='del'>-                                "type (%d)", header-&gt;rm_type);</div><div class='del'>-                }</div><div class='add'>+            ret = gf_rdma_decode_msg(peer, post, readch, bytes_in_post);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_ENCODE_ERROR,</div><div class='add'>+                       "cannot decode msg of "</div><div class='add'>+                       "type (%d)",</div><div class='add'>+                       header-&gt;rm_type);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_RDMA_MSGP:</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INVALID_ENTRY, "rdma msg of msg-type "</div><div class='del'>-                        "GF_RDMA_MSGP should not have been received");</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_INVALID_ENTRY,</div><div class='add'>+                   "rdma msg of msg-type "</div><div class='add'>+                   "GF_RDMA_MSGP should not have been received");</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_RDMA_DONE:</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INVALID_ENTRY, "rdma msg of msg-type "</div><div class='del'>-                        "GF_RDMA_DONE should not have been received");</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_INVALID_ENTRY,</div><div class='add'>+                   "rdma msg of msg-type "</div><div class='add'>+                   "GF_RDMA_DONE should not have been received");</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_RDMA_ERROR:</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_RDMA_ERROR_RECEIVED, "received a msg of type"</div><div class='del'>-                        " RDMA_ERROR");</div><div class='del'>-                ret = gf_rdma_decode_error_msg (peer, post, bytes_in_post);</div><div class='del'>-                break;</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_RDMA_ERROR_RECEIVED,</div><div class='add'>+                   "received a msg of type"</div><div class='add'>+                   " RDMA_ERROR");</div><div class='add'>+            ret = gf_rdma_decode_error_msg(peer, post, bytes_in_post);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INVALID_ENTRY, "unknown rdma msg-type (%d)",</div><div class='del'>-                        header-&gt;rm_type);</div><div class='del'>-        }</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_INVALID_ENTRY,</div><div class='add'>+                   "unknown rdma msg-type (%d)", header-&gt;rm_type);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_do_reads (gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='del'>-                  gf_rdma_read_chunk_t *readch)</div><div class='add'>+gf_rdma_do_reads(gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='add'>+                 gf_rdma_read_chunk_t *readch)</div><div class='ctx'> {</div><div class='del'>-        int32_t             ret       = -1, i = 0, count = 0;</div><div class='del'>-        size_t              size      = 0;</div><div class='del'>-        char               *ptr       = NULL;</div><div class='del'>-        struct iobuf       *iobuf     = NULL;</div><div class='del'>-        gf_rdma_private_t  *priv      = NULL;</div><div class='del'>-        struct ibv_sge     *list      = NULL;</div><div class='del'>-        struct ibv_send_wr *wr        = NULL, *bad_wr = NULL;</div><div class='del'>-        int                 total_ref = 0;</div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; readch[i].rc_discrim != 0; i++) {</div><div class='del'>-                size += readch[i].rc_target.rs_length;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (i == 0) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INVALID_CHUNK_TYPE, "message type specified "</div><div class='del'>-                        "as rdma-read but there are no rdma read-chunks "</div><div class='del'>-                        "present");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        post-&gt;ctx.gf_rdma_reads = i;</div><div class='del'>-        i = 0;</div><div class='del'>-        iobuf = iobuf_get2 (peer-&gt;trans-&gt;ctx-&gt;iobuf_pool, size);</div><div class='del'>-        if (iobuf == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    int32_t ret = -1, i = 0, count = 0;</div><div class='add'>+    size_t size = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    struct ibv_sge *list = NULL;</div><div class='add'>+    struct ibv_send_wr *wr = NULL, *bad_wr = NULL;</div><div class='add'>+    int total_ref = 0;</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; readch[i].rc_discrim != 0; i++) {</div><div class='add'>+        size += readch[i].rc_target.rs_length;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (i == 0) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_INVALID_CHUNK_TYPE,</div><div class='add'>+               "message type specified "</div><div class='add'>+               "as rdma-read but there are no rdma read-chunks "</div><div class='add'>+               "present");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    post-&gt;ctx.gf_rdma_reads = i;</div><div class='add'>+    i = 0;</div><div class='add'>+    iobuf = iobuf_get2(peer-&gt;trans-&gt;ctx-&gt;iobuf_pool, size);</div><div class='add'>+    if (iobuf == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (post-&gt;ctx.iobref == NULL) {</div><div class='add'>+        post-&gt;ctx.iobref = iobref_new();</div><div class='ctx'>         if (post-&gt;ctx.iobref == NULL) {</div><div class='del'>-                post-&gt;ctx.iobref = iobref_new ();</div><div class='del'>-                if (post-&gt;ctx.iobref == NULL) {</div><div class='del'>-                        iobuf_unref (iobuf);</div><div class='del'>-                        iobuf = NULL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            iobuf_unref(iobuf);</div><div class='add'>+            iobuf = NULL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iobref_add (post-&gt;ctx.iobref, iobuf);</div><div class='del'>-        iobuf_unref (iobuf);</div><div class='add'>+    iobref_add(post-&gt;ctx.iobref, iobuf);</div><div class='add'>+    iobuf_unref(iobuf);</div><div class='ctx'> </div><div class='del'>-        ptr = iobuf_ptr (iobuf);</div><div class='del'>-        iobuf = NULL;</div><div class='add'>+    ptr = iobuf_ptr(iobuf);</div><div class='add'>+    iobuf = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (!priv-&gt;connected) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_PEER_DISCONNECTED, "transport not "</div><div class='del'>-                                "connected to peer (%s), not doing rdma reads",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!priv-&gt;connected) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_PEER_DISCONNECTED,</div><div class='add'>+                   "transport not "</div><div class='add'>+                   "connected to peer (%s), not doing rdma reads",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                list = GF_CALLOC (post-&gt;ctx.gf_rdma_reads,</div><div class='del'>-                                sizeof (struct ibv_sge), gf_common_mt_sge);</div><div class='add'>+        list = GF_CALLOC(post-&gt;ctx.gf_rdma_reads, sizeof(struct ibv_sge),</div><div class='add'>+                         gf_common_mt_sge);</div><div class='ctx'> </div><div class='del'>-                if (list == NULL) {</div><div class='del'>-                       errno =  ENOMEM;</div><div class='del'>-                       ret = -1;</div><div class='del'>-                       goto unlock;</div><div class='del'>-                }</div><div class='del'>-                wr   = GF_CALLOC (post-&gt;ctx.gf_rdma_reads,</div><div class='del'>-                                sizeof (struct ibv_send_wr), gf_common_mt_wr);</div><div class='del'>-                if (wr == NULL) {</div><div class='del'>-                       errno =  ENOMEM;</div><div class='del'>-                       ret = -1;</div><div class='del'>-                       goto unlock;</div><div class='del'>-                }</div><div class='del'>-                for (i = 0; readch[i].rc_discrim != 0; i++) {</div><div class='del'>-                        count = post-&gt;ctx.count++;</div><div class='del'>-                        post-&gt;ctx.vector[count].iov_base = ptr;</div><div class='del'>-                        post-&gt;ctx.vector[count].iov_len</div><div class='del'>-                                = readch[i].rc_target.rs_length;</div><div class='del'>-</div><div class='del'>-                        ret = __gf_rdma_register_local_mr_for_rdma (peer,</div><div class='del'>-                                &amp;post-&gt;ctx.vector[count], 1, &amp;post-&gt;ctx);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                        RDMA_MSG_MR_ALOC_FAILED,</div><div class='del'>-                                        "registering local memory"</div><div class='del'>-                                       " for rdma read failed");</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        list[i].addr = (unsigned long)</div><div class='del'>-                                       post-&gt;ctx.vector[count].iov_base;</div><div class='del'>-                        list[i].length = post-&gt;ctx.vector[count].iov_len;</div><div class='del'>-                        list[i].lkey =</div><div class='del'>-                                post-&gt;ctx.mr[post-&gt;ctx.mr_count - 1]-&gt;lkey;</div><div class='del'>-</div><div class='del'>-                        wr[i].wr_id      =</div><div class='del'>-                                (unsigned long) gf_rdma_post_ref (post);</div><div class='del'>-                        wr[i].sg_list    = &amp;list[i];</div><div class='del'>-                        wr[i].next       = &amp;wr[i+1];</div><div class='del'>-                        wr[i].num_sge    = 1;</div><div class='del'>-                        wr[i].opcode     = IBV_WR_RDMA_READ;</div><div class='del'>-                        wr[i].send_flags = IBV_SEND_SIGNALED;</div><div class='del'>-                        wr[i].wr.rdma.remote_addr =</div><div class='del'>-                                readch[i].rc_target.rs_offset;</div><div class='del'>-                        wr[i].wr.rdma.rkey = readch[i].rc_target.rs_handle;</div><div class='del'>-</div><div class='del'>-                        ptr += readch[i].rc_target.rs_length;</div><div class='del'>-                        total_ref++;</div><div class='del'>-                }</div><div class='del'>-                wr[i-1].next = NULL;</div><div class='del'>-                ret = ibv_post_send (peer-&gt;qp, wr, &amp;bad_wr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_READ_CLIENT_ERROR, "rdma read from "</div><div class='del'>-                                "client (%s) failed with ret = %d (%s)",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier,</div><div class='del'>-                                ret, (ret &gt; 0) ? strerror (ret) : "");</div><div class='del'>-</div><div class='del'>-                        if (!bad_wr) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        for (i = 0; i &lt; post-&gt;ctx.gf_rdma_reads; i++) {</div><div class='del'>-                                if (&amp;wr[i] != bad_wr)</div><div class='del'>-                                        total_ref--;</div><div class='del'>-                                else</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='add'>+        if (list == NULL) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        wr = GF_CALLOC(post-&gt;ctx.gf_rdma_reads, sizeof(struct ibv_send_wr),</div><div class='add'>+                       gf_common_mt_wr);</div><div class='add'>+        if (wr == NULL) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        for (i = 0; readch[i].rc_discrim != 0; i++) {</div><div class='add'>+            count = post-&gt;ctx.count++;</div><div class='add'>+            post-&gt;ctx.vector[count].iov_base = ptr;</div><div class='add'>+            post-&gt;ctx.vector[count].iov_len = readch[i].rc_target.rs_length;</div><div class='add'>+</div><div class='add'>+            ret = __gf_rdma_register_local_mr_for_rdma(</div><div class='add'>+                peer, &amp;post-&gt;ctx.vector[count], 1, &amp;post-&gt;ctx);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_MR_ALOC_FAILED,</div><div class='add'>+                       "registering local memory"</div><div class='add'>+                       " for rdma read failed");</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            list[i].addr = (unsigned long)post-&gt;ctx.vector[count].iov_base;</div><div class='add'>+            list[i].length = post-&gt;ctx.vector[count].iov_len;</div><div class='add'>+            list[i].lkey = post-&gt;ctx.mr[post-&gt;ctx.mr_count - 1]-&gt;lkey;</div><div class='add'>+</div><div class='add'>+            wr[i].wr_id = (unsigned long)gf_rdma_post_ref(post);</div><div class='add'>+            wr[i].sg_list = &amp;list[i];</div><div class='add'>+            wr[i].next = &amp;wr[i + 1];</div><div class='add'>+            wr[i].num_sge = 1;</div><div class='add'>+            wr[i].opcode = IBV_WR_RDMA_READ;</div><div class='add'>+            wr[i].send_flags = IBV_SEND_SIGNALED;</div><div class='add'>+            wr[i].wr.rdma.remote_addr = readch[i].rc_target.rs_offset;</div><div class='add'>+            wr[i].wr.rdma.rkey = readch[i].rc_target.rs_handle;</div><div class='add'>+</div><div class='add'>+            ptr += readch[i].rc_target.rs_length;</div><div class='add'>+            total_ref++;</div><div class='add'>+        }</div><div class='add'>+        wr[i - 1].next = NULL;</div><div class='add'>+        ret = ibv_post_send(peer-&gt;qp, wr, &amp;bad_wr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_READ_CLIENT_ERROR,</div><div class='add'>+                   "rdma read from "</div><div class='add'>+                   "client (%s) failed with ret = %d (%s)",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier, ret,</div><div class='add'>+                   (ret &gt; 0) ? strerror(ret) : "");</div><div class='add'>+</div><div class='add'>+            if (!bad_wr) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+            for (i = 0; i &lt; post-&gt;ctx.gf_rdma_reads; i++) {</div><div class='add'>+                if (&amp;wr[i] != bad_wr)</div><div class='add'>+                    total_ref--;</div><div class='add'>+                else</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> out:</div><div class='del'>-        if (list)</div><div class='del'>-                GF_FREE (list);</div><div class='del'>-        if (wr)</div><div class='del'>-                GF_FREE (wr);</div><div class='add'>+    if (list)</div><div class='add'>+        GF_FREE(list);</div><div class='add'>+    if (wr)</div><div class='add'>+        GF_FREE(wr);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                while (total_ref-- &gt; 0)</div><div class='del'>-                        gf_rdma_post_unref (post);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        while (total_ref-- &gt; 0)</div><div class='add'>+            gf_rdma_post_unref(post);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_pollin_notify (gf_rdma_peer_t *peer, gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_pollin_notify(gf_rdma_peer_t *peer, gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        int32_t                    ret             = -1;</div><div class='del'>-        enum msg_type              msg_type        = 0;</div><div class='del'>-        struct rpc_req            *rpc_req         = NULL;</div><div class='del'>-        gf_rdma_request_context_t *request_context = NULL;</div><div class='del'>-        rpc_request_info_t         request_info    = {0, };</div><div class='del'>-        gf_rdma_private_t         *priv            = NULL;</div><div class='del'>-        uint32_t                  *ptr             = NULL;</div><div class='del'>-        rpc_transport_pollin_t    *pollin          = NULL;</div><div class='del'>-</div><div class='del'>-        if ((peer == NULL) || (post == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    enum msg_type msg_type = 0;</div><div class='add'>+    struct rpc_req *rpc_req = NULL;</div><div class='add'>+    gf_rdma_request_context_t *request_context = NULL;</div><div class='add'>+    rpc_request_info_t request_info = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    uint32_t *ptr = NULL;</div><div class='add'>+    rpc_transport_pollin_t *pollin = NULL;</div><div class='add'>+</div><div class='add'>+    if ((peer == NULL) || (post == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (post-&gt;ctx.iobref == NULL) {</div><div class='add'>+        post-&gt;ctx.iobref = iobref_new();</div><div class='ctx'>         if (post-&gt;ctx.iobref == NULL) {</div><div class='del'>-                post-&gt;ctx.iobref = iobref_new ();</div><div class='del'>-                if (post-&gt;ctx.iobref == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* handling the case where both hdr and payload of</div><div class='del'>-                 * GF_FOP_READ_CBK were received in a single iobuf</div><div class='del'>-                 * because of server sending entire msg as inline without</div><div class='del'>-                 * doing rdma writes.</div><div class='del'>-                 */</div><div class='del'>-                if (post-&gt;ctx.hdr_iobuf)</div><div class='del'>-                        iobref_add (post-&gt;ctx.iobref, post-&gt;ctx.hdr_iobuf);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pollin = rpc_transport_pollin_alloc (peer-&gt;trans,</div><div class='del'>-                                             post-&gt;ctx.vector,</div><div class='del'>-                                             post-&gt;ctx.count,</div><div class='del'>-                                             post-&gt;ctx.hdr_iobuf,</div><div class='del'>-                                             post-&gt;ctx.iobref,</div><div class='del'>-                                             post-&gt;ctx.reply_info);</div><div class='del'>-        if (pollin == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        /* handling the case where both hdr and payload of</div><div class='add'>+         * GF_FOP_READ_CBK were received in a single iobuf</div><div class='add'>+         * because of server sending entire msg as inline without</div><div class='add'>+         * doing rdma writes.</div><div class='add'>+         */</div><div class='add'>+        if (post-&gt;ctx.hdr_iobuf)</div><div class='add'>+            iobref_add(post-&gt;ctx.iobref, post-&gt;ctx.hdr_iobuf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ptr = (uint32_t *)pollin-&gt;vector[0].iov_base;</div><div class='add'>+    pollin = rpc_transport_pollin_alloc(peer-&gt;trans, post-&gt;ctx.vector,</div><div class='add'>+                                        post-&gt;ctx.count, post-&gt;ctx.hdr_iobuf,</div><div class='add'>+                                        post-&gt;ctx.iobref, post-&gt;ctx.reply_info);</div><div class='add'>+    if (pollin == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        request_info.xid = ntoh32 (*ptr);</div><div class='del'>-        msg_type = ntoh32 (*(ptr + 1));</div><div class='add'>+    ptr = (uint32_t *)pollin-&gt;vector[0].iov_base;</div><div class='ctx'> </div><div class='del'>-        if (msg_type == REPLY) {</div><div class='del'>-                ret = rpc_transport_notify (peer-&gt;trans,</div><div class='del'>-                                            RPC_TRANSPORT_MAP_XID_REQUEST,</div><div class='del'>-                                            &amp;request_info);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg_debug (GF_RDMA_LOG_NAME, 0, "cannot get request"</div><div class='del'>-                                      "information from rpc layer");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    request_info.xid = ntoh32(*ptr);</div><div class='add'>+    msg_type = ntoh32(*(ptr + 1));</div><div class='ctx'> </div><div class='del'>-                rpc_req = request_info.rpc_req;</div><div class='del'>-                if (rpc_req == NULL) {</div><div class='del'>-                        gf_msg_debug (GF_RDMA_LOG_NAME, 0, "rpc request "</div><div class='del'>-                                      "structure not found");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (msg_type == REPLY) {</div><div class='add'>+        ret = rpc_transport_notify(peer-&gt;trans, RPC_TRANSPORT_MAP_XID_REQUEST,</div><div class='add'>+                                   &amp;request_info);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                         "cannot get request"</div><div class='add'>+                         "information from rpc layer");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                request_context = rpc_req-&gt;conn_private;</div><div class='del'>-                rpc_req-&gt;conn_private = NULL;</div><div class='add'>+        rpc_req = request_info.rpc_req;</div><div class='add'>+        if (rpc_req == NULL) {</div><div class='add'>+            gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                         "rpc request "</div><div class='add'>+                         "structure not found");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                priv = peer-&gt;trans-&gt;private;</div><div class='del'>-                if (request_context != NULL) {</div><div class='del'>-                        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-                        {</div><div class='del'>-                                __gf_rdma_request_context_destroy (request_context);</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_rdma_quota_put (peer);</div><div class='del'>-                }</div><div class='add'>+        request_context = rpc_req-&gt;conn_private;</div><div class='add'>+        rpc_req-&gt;conn_private = NULL;</div><div class='ctx'> </div><div class='del'>-                pollin-&gt;is_reply = 1;</div><div class='add'>+        priv = peer-&gt;trans-&gt;private;</div><div class='add'>+        if (request_context != NULL) {</div><div class='add'>+            pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+            {</div><div class='add'>+                __gf_rdma_request_context_destroy(request_context);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='add'>+        } else {</div><div class='add'>+            gf_rdma_quota_put(peer);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rpc_transport_notify (peer-&gt;trans, RPC_TRANSPORT_MSG_RECEIVED,</div><div class='del'>-                                    pollin);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        TRANS_MSG_TRANSPORT_ERROR, "transport_notify failed");</div><div class='del'>-        }</div><div class='add'>+        pollin-&gt;is_reply = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_notify(peer-&gt;trans, RPC_TRANSPORT_MSG_RECEIVED, pollin);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, TRANS_MSG_TRANSPORT_ERROR,</div><div class='add'>+               "transport_notify failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (pollin != NULL) {</div><div class='del'>-                pollin-&gt;private = NULL;</div><div class='del'>-                rpc_transport_pollin_destroy (pollin);</div><div class='del'>-        }</div><div class='add'>+    if (pollin != NULL) {</div><div class='add'>+        pollin-&gt;private = NULL;</div><div class='add'>+        rpc_transport_pollin_destroy(pollin);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-gf_rdma_recv_reply (gf_rdma_peer_t *peer, gf_rdma_post_t *post)</div><div class='add'>+gf_rdma_recv_reply(gf_rdma_peer_t *peer, gf_rdma_post_t *post)</div><div class='ctx'> {</div><div class='del'>-        int32_t                    ret          = -1;</div><div class='del'>-        gf_rdma_header_t          *header       = NULL;</div><div class='del'>-        gf_rdma_reply_info_t      *reply_info   = NULL;</div><div class='del'>-        gf_rdma_write_array_t     *wc_array     = NULL;</div><div class='del'>-        int                        i            = 0;</div><div class='del'>-        uint32_t                  *ptr          = NULL;</div><div class='del'>-        gf_rdma_request_context_t *ctx          = NULL;</div><div class='del'>-        rpc_request_info_t         request_info = {0, };</div><div class='del'>-        struct rpc_req            *rpc_req      = NULL;</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-        reply_info = post-&gt;ctx.reply_info;</div><div class='del'>-</div><div class='del'>-        /* no write chunklist, just notify upper layers */</div><div class='del'>-        if (reply_info == NULL) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        wc_array = reply_info-&gt;wc_array;</div><div class='del'>-</div><div class='del'>-        if (header-&gt;rm_type == GF_RDMA_NOMSG) {</div><div class='del'>-                post-&gt;ctx.vector[0].iov_base</div><div class='del'>-                        = (void *)(long)wc_array-&gt;wc_array[0].wc_target.rs_offset;</div><div class='del'>-                post-&gt;ctx.vector[0].iov_len</div><div class='del'>-                        = wc_array-&gt;wc_array[0].wc_target.rs_length;</div><div class='del'>-</div><div class='del'>-                post-&gt;ctx.count = 1;</div><div class='del'>-        } else {</div><div class='del'>-                for (i = 0; i &lt; wc_array-&gt;wc_nchunks; i++) {</div><div class='del'>-                        post-&gt;ctx.vector[i + 1].iov_base</div><div class='del'>-                                = (void *)(long)wc_array-&gt;wc_array[i].wc_target.rs_offset;</div><div class='del'>-                        post-&gt;ctx.vector[i + 1].iov_len</div><div class='del'>-                                = wc_array-&gt;wc_array[i].wc_target.rs_length;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                post-&gt;ctx.count += wc_array-&gt;wc_nchunks;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ptr = (uint32_t *)post-&gt;ctx.vector[0].iov_base;</div><div class='del'>-        request_info.xid = ntoh32 (*ptr);</div><div class='del'>-</div><div class='del'>-        ret = rpc_transport_notify (peer-&gt;trans,</div><div class='del'>-                                    RPC_TRANSPORT_MAP_XID_REQUEST,</div><div class='del'>-                                    &amp;request_info);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        TRANS_MSG_TRANSPORT_ERROR, "cannot get request "</div><div class='del'>-                        "information (peer:%s) from rpc layer",</div><div class='del'>-                        peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    gf_rdma_reply_info_t *reply_info = NULL;</div><div class='add'>+    gf_rdma_write_array_t *wc_array = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t *ptr = NULL;</div><div class='add'>+    gf_rdma_request_context_t *ctx = NULL;</div><div class='add'>+    rpc_request_info_t request_info = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct rpc_req *rpc_req = NULL;</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+    reply_info = post-&gt;ctx.reply_info;</div><div class='add'>+</div><div class='add'>+    /* no write chunklist, just notify upper layers */</div><div class='add'>+    if (reply_info == NULL) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rpc_req = request_info.rpc_req;</div><div class='del'>-        if (rpc_req == NULL) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_RPC_ST_ERROR, "rpc request structure not "</div><div class='del'>-                        "found");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    wc_array = reply_info-&gt;wc_array;</div><div class='ctx'> </div><div class='del'>-        ctx = rpc_req-&gt;conn_private;</div><div class='del'>-        if ((post-&gt;ctx.iobref == NULL) &amp;&amp; ctx-&gt;rsp_iobref) {</div><div class='del'>-                post-&gt;ctx.iobref = iobref_ref (ctx-&gt;rsp_iobref);</div><div class='del'>-        }</div><div class='add'>+    if (header-&gt;rm_type == GF_RDMA_NOMSG) {</div><div class='add'>+        post-&gt;ctx.vector[0].iov_base = (void *)(long)wc_array-&gt;wc_array[0]</div><div class='add'>+                                           .wc_target.rs_offset;</div><div class='add'>+        post-&gt;ctx.vector[0].iov_len = wc_array-&gt;wc_array[0].wc_target.rs_length;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        gf_rdma_reply_info_destroy (reply_info);</div><div class='add'>+        post-&gt;ctx.count = 1;</div><div class='add'>+    } else {</div><div class='add'>+        for (i = 0; i &lt; wc_array-&gt;wc_nchunks; i++) {</div><div class='add'>+            post-&gt;ctx.vector[i + 1].iov_base =</div><div class='add'>+                (void *)(long)wc_array-&gt;wc_array[i].wc_target.rs_offset;</div><div class='add'>+            post-&gt;ctx.vector[i + 1].iov_len = wc_array-&gt;wc_array[i]</div><div class='add'>+                                                  .wc_target.rs_length;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        post-&gt;ctx.count += wc_array-&gt;wc_nchunks;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ptr = (uint32_t *)post-&gt;ctx.vector[0].iov_base;</div><div class='add'>+    request_info.xid = ntoh32(*ptr);</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_notify(peer-&gt;trans, RPC_TRANSPORT_MAP_XID_REQUEST,</div><div class='add'>+                               &amp;request_info);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, TRANS_MSG_TRANSPORT_ERROR,</div><div class='add'>+               "cannot get request "</div><div class='add'>+               "information (peer:%s) from rpc layer",</div><div class='add'>+               peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc_req = request_info.rpc_req;</div><div class='add'>+    if (rpc_req == NULL) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_RPC_ST_ERROR,</div><div class='add'>+               "rpc request structure not "</div><div class='add'>+               "found");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = rpc_req-&gt;conn_private;</div><div class='add'>+    if ((post-&gt;ctx.iobref == NULL) &amp;&amp; ctx-&gt;rsp_iobref) {</div><div class='add'>+        post-&gt;ctx.iobref = iobref_ref(ctx-&gt;rsp_iobref);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    gf_rdma_reply_info_destroy(reply_info);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = gf_rdma_pollin_notify (peer, post);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_POLL_IN_NOTIFY_FAILED,</div><div class='del'>-                                "pollin notify failed");</div><div class='del'>-                }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = gf_rdma_pollin_notify(peer, post);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_POLL_IN_NOTIFY_FAILED, "pollin notify failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_recv_request (gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='del'>-                      gf_rdma_read_chunk_t *readch)</div><div class='add'>+gf_rdma_recv_request(gf_rdma_peer_t *peer, gf_rdma_post_t *post,</div><div class='add'>+                     gf_rdma_read_chunk_t *readch)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (readch != NULL) {</div><div class='del'>-                ret = gf_rdma_do_reads (peer, post, readch);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_PEER_READ_FAILED,</div><div class='del'>-                                "rdma read from peer (%s) failed",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = gf_rdma_pollin_notify (peer, post);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_POLL_IN_NOTIFY_FAILED,</div><div class='del'>-                                "pollin notification failed");</div><div class='del'>-                }</div><div class='add'>+    if (readch != NULL) {</div><div class='add'>+        ret = gf_rdma_do_reads(peer, post, readch);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_PEER_READ_FAILED, "rdma read from peer (%s) failed",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_rdma_pollin_notify(peer, post);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_POLL_IN_NOTIFY_FAILED,</div><div class='add'>+                   "pollin notification failed");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_rdma_process_recv (gf_rdma_peer_t *peer, struct ibv_wc *wc)</div><div class='add'>+gf_rdma_process_recv(gf_rdma_peer_t *peer, struct ibv_wc *wc)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_post_t       *post     = NULL;</div><div class='del'>-        gf_rdma_read_chunk_t *readch   = NULL;</div><div class='del'>-        int                   ret      = -1;</div><div class='del'>-        uint32_t             *ptr      = NULL;</div><div class='del'>-        enum msg_type         msg_type = 0;</div><div class='del'>-        gf_rdma_header_t     *header   = NULL;</div><div class='del'>-        gf_rdma_private_t    *priv     = NULL;</div><div class='del'>-</div><div class='del'>-        post = (gf_rdma_post_t *) (long) wc-&gt;wr_id;</div><div class='del'>-        if (post == NULL) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_POST_MISSING, "no post found in successful "</div><div class='del'>-                        "work completion element");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_decode_header (peer, post, &amp;readch, wc-&gt;byte_len);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_HEADER_DECODE_FAILED, "decoding of header "</div><div class='del'>-                        "failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='del'>-</div><div class='del'>-        priv = peer-&gt;trans-&gt;private;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                if (!priv-&gt;peer.quota_set) {</div><div class='del'>-                        priv-&gt;peer.quota_set = 1;</div><div class='del'>-</div><div class='del'>-                        /* Initially peer.quota is set to 1 as per RFC 5666. We</div><div class='del'>-                         * have to account for the quota used while sending</div><div class='del'>-                         * first msg (which may or may not be returned to pool</div><div class='del'>-                         * at this point) while deriving peer.quota from</div><div class='del'>-                         * header-&gt;rm_credit. Hence the arithmetic below,</div><div class='del'>-                         * instead of directly setting it to header-&gt;rm_credit.</div><div class='del'>-                         */</div><div class='del'>-                        priv-&gt;peer.quota = header-&gt;rm_credit</div><div class='del'>-                                - (1 - priv-&gt;peer.quota);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='del'>-</div><div class='del'>-        switch (header-&gt;rm_type) {</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    gf_rdma_read_chunk_t *readch = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t *ptr = NULL;</div><div class='add'>+    enum msg_type msg_type = 0;</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    post = (gf_rdma_post_t *)(long)wc-&gt;wr_id;</div><div class='add'>+    if (post == NULL) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_POST_MISSING,</div><div class='add'>+               "no post found in successful "</div><div class='add'>+               "work completion element");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_decode_header(peer, post, &amp;readch, wc-&gt;byte_len);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+               RDMA_MSG_HEADER_DECODE_FAILED,</div><div class='add'>+               "decoding of header "</div><div class='add'>+               "failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+</div><div class='add'>+    priv = peer-&gt;trans-&gt;private;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!priv-&gt;peer.quota_set) {</div><div class='add'>+            priv-&gt;peer.quota_set = 1;</div><div class='add'>+</div><div class='add'>+            /* Initially peer.quota is set to 1 as per RFC 5666. We</div><div class='add'>+             * have to account for the quota used while sending</div><div class='add'>+             * first msg (which may or may not be returned to pool</div><div class='add'>+             * at this point) while deriving peer.quota from</div><div class='add'>+             * header-&gt;rm_credit. Hence the arithmetic below,</div><div class='add'>+             * instead of directly setting it to header-&gt;rm_credit.</div><div class='add'>+             */</div><div class='add'>+            priv-&gt;peer.quota = header-&gt;rm_credit - (1 - priv-&gt;peer.quota);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='add'>+</div><div class='add'>+    switch (header-&gt;rm_type) {</div><div class='ctx'>         case GF_RDMA_MSG:</div><div class='del'>-                ptr = (uint32_t *)post-&gt;ctx.vector[0].iov_base;</div><div class='del'>-                msg_type = ntoh32 (*(ptr + 1));</div><div class='del'>-                break;</div><div class='add'>+            ptr = (uint32_t *)post-&gt;ctx.vector[0].iov_base;</div><div class='add'>+            msg_type = ntoh32(*(ptr + 1));</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_RDMA_NOMSG:</div><div class='del'>-                if (readch != NULL) {</div><div class='del'>-                        msg_type = CALL;</div><div class='del'>-                } else {</div><div class='del'>-                        msg_type = REPLY;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (readch != NULL) {</div><div class='add'>+                msg_type = CALL;</div><div class='add'>+            } else {</div><div class='add'>+                msg_type = REPLY;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_RDMA_ERROR:</div><div class='del'>-                if (header-&gt;rm_body.rm_error.rm_type == ERR_CHUNK) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_RDMA_ERROR_RECEIVED,</div><div class='del'>-                                "peer (%s), couldn't encode or decode the msg "</div><div class='del'>-                                "properly or write chunks were not provided "</div><div class='del'>-                                "for replies that were bigger than "</div><div class='del'>-                                "RDMA_INLINE_THRESHOLD (%d)",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier,</div><div class='del'>-                                GLUSTERFS_RDMA_INLINE_THRESHOLD);</div><div class='del'>-                        ret = gf_rdma_pollin_notify (peer, post);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_msg_debug (GF_RDMA_LOG_NAME, 0, "pollin "</div><div class='del'>-                                              "notification failed");</div><div class='del'>-                        }</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, 0,</div><div class='del'>-                                TRANS_MSG_TRANSPORT_ERROR, "an error has "</div><div class='del'>-                                "happened while transmission of msg, "</div><div class='del'>-                                "disconnecting the transport");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+            if (header-&gt;rm_body.rm_error.rm_type == ERR_CHUNK) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_RDMA_ERROR_RECEIVED,</div><div class='add'>+                       "peer (%s), couldn't encode or decode the msg "</div><div class='add'>+                       "properly or write chunks were not provided "</div><div class='add'>+                       "for replies that were bigger than "</div><div class='add'>+                       "RDMA_INLINE_THRESHOLD (%d)",</div><div class='add'>+                       peer-&gt;trans-&gt;peerinfo.identifier,</div><div class='add'>+                       GLUSTERFS_RDMA_INLINE_THRESHOLD);</div><div class='add'>+                ret = gf_rdma_pollin_notify(peer, post);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                                 "pollin "</div><div class='add'>+                                 "notification failed");</div><div class='ctx'>                 }</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, 0,</div><div class='add'>+                       TRANS_MSG_TRANSPORT_ERROR,</div><div class='add'>+                       "an error has "</div><div class='add'>+                       "happened while transmission of msg, "</div><div class='add'>+                       "disconnecting the transport");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INVALID_ENTRY, "invalid rdma msg-type (%d)",</div><div class='del'>-                        header-&gt;rm_type);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_INVALID_ENTRY,</div><div class='add'>+                   "invalid rdma msg-type (%d)", header-&gt;rm_type);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msg_type == CALL) {</div><div class='del'>-                ret = gf_rdma_recv_request (peer, post, readch);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_PEER_REQ_FAILED, "receiving a request"</div><div class='del'>-                                " from peer (%s) failed",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = gf_rdma_recv_reply (peer, post);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_PEER_REP_FAILED, "receiving a reply "</div><div class='del'>-                                "from peer (%s) failed",</div><div class='del'>-                                peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='del'>-                }</div><div class='add'>+    if (msg_type == CALL) {</div><div class='add'>+        ret = gf_rdma_recv_request(peer, post, readch);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_PEER_REQ_FAILED,</div><div class='add'>+                   "receiving a request"</div><div class='add'>+                   " from peer (%s) failed",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_rdma_recv_reply(peer, post);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                   RDMA_MSG_PEER_REP_FAILED,</div><div class='add'>+                   "receiving a reply "</div><div class='add'>+                   "from peer (%s) failed",</div><div class='add'>+                   peer-&gt;trans-&gt;peerinfo.identifier);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                rpc_transport_disconnect (peer-&gt;trans, _gf_false);</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        rpc_transport_disconnect(peer-&gt;trans, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_rdma_async_event_thread (void *context)</div><div class='add'>+gf_rdma_async_event_thread(void *context)</div><div class='ctx'> {</div><div class='del'>-        struct ibv_async_event event;</div><div class='del'>-        int ret;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                do {</div><div class='del'>-                        ret = ibv_get_async_event((struct ibv_context *)context,</div><div class='del'>-                                                  &amp;event);</div><div class='del'>-</div><div class='del'>-                        if (ret &amp;&amp; errno != EINTR) {</div><div class='del'>-                                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='del'>-                                        RDMA_MSG_EVENT_ERROR, "Error getting "</div><div class='del'>-                                        "event");</div><div class='del'>-                        }</div><div class='del'>-                } while (ret &amp;&amp; errno == EINTR);</div><div class='add'>+    struct ibv_async_event event;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-                switch (event.event_type) {</div><div class='del'>-                case IBV_EVENT_SRQ_LIMIT_REACHED:</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_EVENT_SRQ_LIMIT_REACHED, "received "</div><div class='del'>-                                "srq_limit reached");</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        gf_msg_debug (GF_RDMA_LOG_NAME, 0, "event (%d) "</div><div class='del'>-                                      "received", event.event_type);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    while (1) {</div><div class='add'>+        do {</div><div class='add'>+            ret = ibv_get_async_event((struct ibv_context *)context, &amp;event);</div><div class='add'>+</div><div class='add'>+            if (ret &amp;&amp; errno != EINTR) {</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='add'>+                       RDMA_MSG_EVENT_ERROR,</div><div class='add'>+                       "Error getting "</div><div class='add'>+                       "event");</div><div class='add'>+            }</div><div class='add'>+        } while (ret &amp;&amp; errno == EINTR);</div><div class='add'>+</div><div class='add'>+        switch (event.event_type) {</div><div class='add'>+            case IBV_EVENT_SRQ_LIMIT_REACHED:</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_EVENT_SRQ_LIMIT_REACHED,</div><div class='add'>+                       "received "</div><div class='add'>+                       "srq_limit reached");</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                ibv_ack_async_event(&amp;event);</div><div class='add'>+            default:</div><div class='add'>+                gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                             "event (%d) "</div><div class='add'>+                             "received",</div><div class='add'>+                             event.event_type);</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        ibv_ack_async_event(&amp;event);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='del'>-gf_rdma_recv_completion_proc (void *data)</div><div class='add'>+gf_rdma_recv_completion_proc(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct ibv_comp_channel *chan      = NULL;</div><div class='del'>-        gf_rdma_device_t        *device    = NULL;;</div><div class='del'>-        gf_rdma_post_t          *post      = NULL;</div><div class='del'>-        gf_rdma_peer_t          *peer      = NULL;</div><div class='del'>-        struct ibv_cq           *event_cq  = NULL;</div><div class='del'>-        struct ibv_wc            wc[10]    = {{0},};</div><div class='del'>-        void                    *event_ctx = NULL;</div><div class='del'>-        int32_t                  ret       = 0;</div><div class='del'>-        int32_t                  num_wr    = 0, index = 0;</div><div class='del'>-        uint8_t                  failed    = 0;</div><div class='del'>-</div><div class='del'>-        chan = data;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                failed = 0;</div><div class='del'>-                ret = ibv_get_cq_event (chan, &amp;event_cq, &amp;event_ctx);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='del'>-                                RDMA_MSG_IBV_GET_CQ_FAILED,</div><div class='del'>-                                "ibv_get_cq_event failed, terminating recv "</div><div class='del'>-                                "thread %d (%d)", ret, errno);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    struct ibv_comp_channel *chan = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    ;</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    struct ibv_cq *event_cq = NULL;</div><div class='add'>+    struct ibv_wc wc[10] = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+    void *event_ctx = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t num_wr = 0, index = 0;</div><div class='add'>+    uint8_t failed = 0;</div><div class='add'>+</div><div class='add'>+    chan = data;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        failed = 0;</div><div class='add'>+        ret = ibv_get_cq_event(chan, &amp;event_cq, &amp;event_ctx);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='add'>+                   RDMA_MSG_IBV_GET_CQ_FAILED,</div><div class='add'>+                   "ibv_get_cq_event failed, terminating recv "</div><div class='add'>+                   "thread %d (%d)",</div><div class='add'>+                   ret, errno);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                device = event_ctx;</div><div class='add'>+        device = event_ctx;</div><div class='ctx'> </div><div class='del'>-                ret = ibv_req_notify_cq (event_cq, 0);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='del'>-                                RDMA_MSG_IBV_REQ_NOTIFY_CQ_FAILED,</div><div class='del'>-                                "ibv_req_notify_cq on %s failed, terminating "</div><div class='del'>-                                "recv thread: %d (%d)",</div><div class='del'>-                                device-&gt;device_name, ret, errno);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        ret = ibv_req_notify_cq(event_cq, 0);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='add'>+                   RDMA_MSG_IBV_REQ_NOTIFY_CQ_FAILED,</div><div class='add'>+                   "ibv_req_notify_cq on %s failed, terminating "</div><div class='add'>+                   "recv thread: %d (%d)",</div><div class='add'>+                   device-&gt;device_name, ret, errno);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                device = (gf_rdma_device_t *) event_ctx;</div><div class='del'>-</div><div class='del'>-                while (!failed &amp;&amp;</div><div class='del'>-                       (num_wr = ibv_poll_cq (event_cq, 10, wc)) &gt; 0) {</div><div class='del'>-</div><div class='del'>-                        for (index = 0; index &lt; num_wr &amp;&amp; !failed; index++) {</div><div class='del'>-                                post = (gf_rdma_post_t *) (long)</div><div class='del'>-                                        wc[index].wr_id;</div><div class='del'>-</div><div class='del'>-                                pthread_mutex_lock (&amp;device-&gt;qpreg.lock);</div><div class='del'>-                                {</div><div class='del'>-                                        peer = __gf_rdma_lookup_peer (device,</div><div class='del'>-                                                           wc[index].qp_num);</div><div class='del'>-</div><div class='del'>-                                        /*</div><div class='del'>-                                         * keep a refcount on transport so that it</div><div class='del'>-                                         * does not get freed because of some error</div><div class='del'>-                                         * indicated by wc.status till we are done</div><div class='del'>-                                         * with usage of peer and thereby that of</div><div class='del'>-                                         * trans.</div><div class='del'>-                                         */</div><div class='del'>-                                        if (peer != NULL) {</div><div class='del'>-                                                rpc_transport_ref (peer-&gt;trans);</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                                pthread_mutex_unlock (&amp;device-&gt;qpreg.lock);</div><div class='del'>-</div><div class='del'>-                                if (wc[index].status != IBV_WC_SUCCESS) {</div><div class='del'>-                                        gf_msg (GF_RDMA_LOG_NAME,</div><div class='del'>-                                                GF_LOG_ERROR, 0,</div><div class='del'>-                                                RDMA_MSG_RECV_ERROR, "recv work "</div><div class='del'>-                                                "request on `%s' returned error (%d)",</div><div class='del'>-                                                device-&gt;device_name,</div><div class='del'>-                                                wc[index].status);</div><div class='del'>-                                                failed = 1;</div><div class='del'>-                                        if (peer) {</div><div class='del'>-                                                ibv_ack_cq_events (event_cq, num_wr);</div><div class='del'>-                                                rpc_transport_disconnect (peer-&gt;trans,</div><div class='del'>-                                                                          _gf_false);</div><div class='del'>-                                                rpc_transport_unref (peer-&gt;trans);</div><div class='del'>-                                        }</div><div class='del'>-</div><div class='del'>-                                        if (post) {</div><div class='del'>-                                                gf_rdma_post_unref (post);</div><div class='del'>-                                        }</div><div class='del'>-</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (peer) {</div><div class='del'>-                                        gf_rdma_process_recv (peer,</div><div class='del'>-                                                        &amp;wc[index]);</div><div class='del'>-                                        rpc_transport_unref (peer-&gt;trans);</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg_debug (GF_RDMA_LOG_NAME, 0,</div><div class='del'>-                                                      "could not lookup peer "</div><div class='del'>-                                                      "for qp_num: %d",</div><div class='del'>-                                                      wc[index].qp_num);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                gf_rdma_post_unref (post);</div><div class='del'>-                        }</div><div class='add'>+        device = (gf_rdma_device_t *)event_ctx;</div><div class='add'>+</div><div class='add'>+        while (!failed &amp;&amp; (num_wr = ibv_poll_cq(event_cq, 10, wc)) &gt; 0) {</div><div class='add'>+            for (index = 0; index &lt; num_wr &amp;&amp; !failed; index++) {</div><div class='add'>+                post = (gf_rdma_post_t *)(long)wc[index].wr_id;</div><div class='add'>+</div><div class='add'>+                pthread_mutex_lock(&amp;device-&gt;qpreg.lock);</div><div class='add'>+                {</div><div class='add'>+                    peer = __gf_rdma_lookup_peer(device, wc[index].qp_num);</div><div class='add'>+</div><div class='add'>+                    /*</div><div class='add'>+                     * keep a refcount on transport so that it</div><div class='add'>+                     * does not get freed because of some error</div><div class='add'>+                     * indicated by wc.status till we are done</div><div class='add'>+                     * with usage of peer and thereby that of</div><div class='add'>+                     * trans.</div><div class='add'>+                     */</div><div class='add'>+                    if (peer != NULL) {</div><div class='add'>+                        rpc_transport_ref(peer-&gt;trans);</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+                pthread_mutex_unlock(&amp;device-&gt;qpreg.lock);</div><div class='add'>+</div><div class='add'>+                if (wc[index].status != IBV_WC_SUCCESS) {</div><div class='add'>+                    gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, 0,</div><div class='add'>+                           RDMA_MSG_RECV_ERROR,</div><div class='add'>+                           "recv work "</div><div class='add'>+                           "request on `%s' returned error (%d)",</div><div class='add'>+                           device-&gt;device_name, wc[index].status);</div><div class='add'>+                    failed = 1;</div><div class='add'>+                    if (peer) {</div><div class='add'>+                        ibv_ack_cq_events(event_cq, num_wr);</div><div class='add'>+                        rpc_transport_disconnect(peer-&gt;trans, _gf_false);</div><div class='add'>+                        rpc_transport_unref(peer-&gt;trans);</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    if (post) {</div><div class='add'>+                        gf_rdma_post_unref(post);</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='del'>-                                RDMA_MSG_IBV_POLL_CQ_ERROR,</div><div class='del'>-                                "ibv_poll_cq on `%s' returned error "</div><div class='del'>-                                "(ret = %d, errno = %d)",</div><div class='del'>-                                device-&gt;device_name, ret, errno);</div><div class='del'>-                        continue;</div><div class='add'>+                if (peer) {</div><div class='add'>+                    gf_rdma_process_recv(peer, &amp;wc[index]);</div><div class='add'>+                    rpc_transport_unref(peer-&gt;trans);</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                                 "could not lookup peer "</div><div class='add'>+                                 "for qp_num: %d",</div><div class='add'>+                                 wc[index].qp_num);</div><div class='ctx'>                 }</div><div class='del'>-                if (!failed)</div><div class='del'>-                        ibv_ack_cq_events (event_cq, num_wr);</div><div class='add'>+</div><div class='add'>+                gf_rdma_post_unref(post);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='add'>+                   RDMA_MSG_IBV_POLL_CQ_ERROR,</div><div class='add'>+                   "ibv_poll_cq on `%s' returned error "</div><div class='add'>+                   "(ret = %d, errno = %d)",</div><div class='add'>+                   device-&gt;device_name, ret, errno);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (!failed)</div><div class='add'>+            ibv_ack_cq_events(event_cq, num_wr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_rdma_handle_failed_send_completion (gf_rdma_peer_t *peer, struct ibv_wc *wc)</div><div class='add'>+gf_rdma_handle_failed_send_completion(gf_rdma_peer_t *peer, struct ibv_wc *wc)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_post_t    *post   = NULL;</div><div class='del'>-        gf_rdma_device_t  *device = NULL;</div><div class='del'>-        gf_rdma_private_t *priv   = NULL;</div><div class='del'>-</div><div class='del'>-        if (peer != NULL) {</div><div class='del'>-                priv = peer-&gt;trans-&gt;private;</div><div class='del'>-                if (priv != NULL) {</div><div class='del'>-                        device = priv-&gt;device;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        post = (gf_rdma_post_t *) (long) wc-&gt;wr_id;</div><div class='del'>-</div><div class='del'>-        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                RDMA_MSG_RDMA_HANDLE_FAILED,</div><div class='del'>-                "send work request on `%s' returned error "</div><div class='del'>-                "wc.status = %d, wc.vendor_err = %d, post-&gt;buf = %p, "</div><div class='del'>-                "wc.byte_len = %d, post-&gt;reused = %d",</div><div class='del'>-                (device != NULL) ? device-&gt;device_name : NULL, wc-&gt;status,</div><div class='del'>-                wc-&gt;vendor_err, post-&gt;buf, wc-&gt;byte_len, post-&gt;reused);</div><div class='del'>-</div><div class='del'>-        if (wc-&gt;status == IBV_WC_RETRY_EXC_ERR) {</div><div class='del'>-                gf_msg ("rdma", GF_LOG_ERROR, 0, TRANS_MSG_TIMEOUT_EXCEEDED,</div><div class='del'>-                        "connection between client and server not working. "</div><div class='del'>-                        "check by running 'ibv_srq_pingpong'. also make sure "</div><div class='del'>-                        "subnet manager is running (eg: 'opensm'), or check "</div><div class='del'>-                        "if rdma port is valid (or active) by running "</div><div class='del'>-                        "'ibv_devinfo'. contact Gluster Support Team if the "</div><div class='del'>-                        "problem persists.");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (peer) {</div><div class='del'>-                rpc_transport_disconnect (peer-&gt;trans, _gf_false);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if (peer != NULL) {</div><div class='add'>+        priv = peer-&gt;trans-&gt;private;</div><div class='add'>+        if (priv != NULL) {</div><div class='add'>+            device = priv-&gt;device;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    post = (gf_rdma_post_t *)(long)wc-&gt;wr_id;</div><div class='add'>+</div><div class='add'>+    gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0, RDMA_MSG_RDMA_HANDLE_FAILED,</div><div class='add'>+           "send work request on `%s' returned error "</div><div class='add'>+           "wc.status = %d, wc.vendor_err = %d, post-&gt;buf = %p, "</div><div class='add'>+           "wc.byte_len = %d, post-&gt;reused = %d",</div><div class='add'>+           (device != NULL) ? device-&gt;device_name : NULL, wc-&gt;status,</div><div class='add'>+           wc-&gt;vendor_err, post-&gt;buf, wc-&gt;byte_len, post-&gt;reused);</div><div class='add'>+</div><div class='add'>+    if (wc-&gt;status == IBV_WC_RETRY_EXC_ERR) {</div><div class='add'>+        gf_msg("rdma", GF_LOG_ERROR, 0, TRANS_MSG_TIMEOUT_EXCEEDED,</div><div class='add'>+               "connection between client and server not working. "</div><div class='add'>+               "check by running 'ibv_srq_pingpong'. also make sure "</div><div class='add'>+               "subnet manager is running (eg: 'opensm'), or check "</div><div class='add'>+               "if rdma port is valid (or active) by running "</div><div class='add'>+               "'ibv_devinfo'. contact Gluster Support Team if the "</div><div class='add'>+               "problem persists.");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (peer) {</div><div class='add'>+        rpc_transport_disconnect(peer-&gt;trans, _gf_false);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_rdma_handle_successful_send_completion (gf_rdma_peer_t *peer,</div><div class='del'>-                                           struct ibv_wc *wc)</div><div class='add'>+gf_rdma_handle_successful_send_completion(gf_rdma_peer_t *peer,</div><div class='add'>+                                          struct ibv_wc *wc)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_post_t   *post   = NULL;</div><div class='del'>-        int               reads  = 0, ret = 0;</div><div class='del'>-        gf_rdma_header_t *header = NULL;</div><div class='del'>-</div><div class='del'>-        if (wc-&gt;opcode != IBV_WC_RDMA_READ) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    int reads = 0, ret = 0;</div><div class='add'>+    gf_rdma_header_t *header = NULL;</div><div class='ctx'> </div><div class='del'>-        post = (gf_rdma_post_t *)(long) wc-&gt;wr_id;</div><div class='add'>+    if (wc-&gt;opcode != IBV_WC_RDMA_READ) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;post-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                reads = --post-&gt;ctx.gf_rdma_reads;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;post-&gt;lock);</div><div class='add'>+    post = (gf_rdma_post_t *)(long)wc-&gt;wr_id;</div><div class='ctx'> </div><div class='del'>-        if (reads != 0) {</div><div class='del'>-                /* if it is not the last rdma read, we've got nothing to do */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    pthread_mutex_lock(&amp;post-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        reads = --post-&gt;ctx.gf_rdma_reads;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;post-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='add'>+    if (reads != 0) {</div><div class='add'>+        /* if it is not the last rdma read, we've got nothing to do */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (header-&gt;rm_type == GF_RDMA_NOMSG) {</div><div class='del'>-                post-&gt;ctx.count = 1;</div><div class='del'>-                post-&gt;ctx.vector[0].iov_len += post-&gt;ctx.vector[1].iov_len;</div><div class='del'>-        }</div><div class='del'>-        /*</div><div class='del'>-         * if reads performed as vectored, then all the buffers are actually</div><div class='del'>-         * contiguous memory, so that we can use it as single vector, instead</div><div class='del'>-         * of multiple.</div><div class='del'>-         */</div><div class='del'>-        while (post-&gt;ctx.count &gt; 2) {</div><div class='del'>-                post-&gt;ctx.vector[1].iov_len +=</div><div class='del'>-                        post-&gt;ctx.vector[post-&gt;ctx.count-1].iov_len;</div><div class='del'>-                post-&gt;ctx.count--;</div><div class='del'>-        }</div><div class='add'>+    header = (gf_rdma_header_t *)post-&gt;buf;</div><div class='ctx'> </div><div class='del'>-        ret = gf_rdma_pollin_notify (peer, post);</div><div class='del'>-        if ((ret == -1) &amp;&amp; (peer != NULL)) {</div><div class='del'>-                rpc_transport_disconnect (peer-&gt;trans, _gf_false);</div><div class='del'>-        }</div><div class='add'>+    if (header-&gt;rm_type == GF_RDMA_NOMSG) {</div><div class='add'>+        post-&gt;ctx.count = 1;</div><div class='add'>+        post-&gt;ctx.vector[0].iov_len += post-&gt;ctx.vector[1].iov_len;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * if reads performed as vectored, then all the buffers are actually</div><div class='add'>+     * contiguous memory, so that we can use it as single vector, instead</div><div class='add'>+     * of multiple.</div><div class='add'>+     */</div><div class='add'>+    while (post-&gt;ctx.count &gt; 2) {</div><div class='add'>+        post-&gt;ctx.vector[1].iov_len += post-&gt;ctx.vector[post-&gt;ctx.count - 1]</div><div class='add'>+                                           .iov_len;</div><div class='add'>+        post-&gt;ctx.count--;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_pollin_notify(peer, post);</div><div class='add'>+    if ((ret == -1) &amp;&amp; (peer != NULL)) {</div><div class='add'>+        rpc_transport_disconnect(peer-&gt;trans, _gf_false);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void *</div><div class='del'>-gf_rdma_send_completion_proc (void *data)</div><div class='add'>+gf_rdma_send_completion_proc(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct ibv_comp_channel *chan       = NULL;</div><div class='del'>-        gf_rdma_post_t          *post       = NULL;</div><div class='del'>-        gf_rdma_peer_t          *peer       = NULL;</div><div class='del'>-        struct ibv_cq           *event_cq   = NULL;</div><div class='del'>-        void                    *event_ctx  = NULL;</div><div class='del'>-        gf_rdma_device_t        *device     = NULL;</div><div class='del'>-        struct ibv_wc            wc[10]     = {{0},};</div><div class='del'>-        char                     is_request = 0;</div><div class='del'>-        int32_t                  ret        = 0, quota_ret = 0, num_wr = 0;</div><div class='del'>-        int32_t                  index      = 0, failed = 0;</div><div class='del'>-        chan = data;</div><div class='del'>-        while (1) {</div><div class='del'>-                failed = 0;</div><div class='del'>-                ret = ibv_get_cq_event (chan, &amp;event_cq, &amp;event_ctx);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='del'>-                                RDMA_MSG_IBV_GET_CQ_FAILED,</div><div class='del'>-                                "ibv_get_cq_event on failed, terminating "</div><div class='del'>-                                "send thread: %d (%d)", ret, errno);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    struct ibv_comp_channel *chan = NULL;</div><div class='add'>+    gf_rdma_post_t *post = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    struct ibv_cq *event_cq = NULL;</div><div class='add'>+    void *event_ctx = NULL;</div><div class='add'>+    gf_rdma_device_t *device = NULL;</div><div class='add'>+    struct ibv_wc wc[10] = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+    char is_request = 0;</div><div class='add'>+    int32_t ret = 0, quota_ret = 0, num_wr = 0;</div><div class='add'>+    int32_t index = 0, failed = 0;</div><div class='add'>+    chan = data;</div><div class='add'>+    while (1) {</div><div class='add'>+        failed = 0;</div><div class='add'>+        ret = ibv_get_cq_event(chan, &amp;event_cq, &amp;event_ctx);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='add'>+                   RDMA_MSG_IBV_GET_CQ_FAILED,</div><div class='add'>+                   "ibv_get_cq_event on failed, terminating "</div><div class='add'>+                   "send thread: %d (%d)",</div><div class='add'>+                   ret, errno);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        device = event_ctx;</div><div class='add'>+</div><div class='add'>+        ret = ibv_req_notify_cq(event_cq, 0);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='add'>+                   RDMA_MSG_IBV_REQ_NOTIFY_CQ_FAILED,</div><div class='add'>+                   "ibv_req_notify_cq on %s failed, terminating "</div><div class='add'>+                   "send thread: %d (%d)",</div><div class='add'>+                   device-&gt;device_name, ret, errno);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                device = event_ctx;</div><div class='add'>+        while (!failed &amp;&amp; (num_wr = ibv_poll_cq(event_cq, 10, wc)) &gt; 0) {</div><div class='add'>+            for (index = 0; index &lt; num_wr &amp;&amp; !failed; index++) {</div><div class='add'>+                post = (gf_rdma_post_t *)(long)wc[index].wr_id;</div><div class='ctx'> </div><div class='del'>-                ret = ibv_req_notify_cq (event_cq, 0);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME,  GF_LOG_ERROR, errno,</div><div class='del'>-                                RDMA_MSG_IBV_REQ_NOTIFY_CQ_FAILED,</div><div class='del'>-                                "ibv_req_notify_cq on %s failed, terminating "</div><div class='del'>-                                "send thread: %d (%d)",</div><div class='del'>-                                device-&gt;device_name, ret, errno);</div><div class='del'>-                        continue;</div><div class='add'>+                pthread_mutex_lock(&amp;device-&gt;qpreg.lock);</div><div class='add'>+                {</div><div class='add'>+                    peer = __gf_rdma_lookup_peer(device, wc[index].qp_num);</div><div class='add'>+</div><div class='add'>+                    /*</div><div class='add'>+                     * keep a refcount on transport so that it</div><div class='add'>+                     * does not get freed because of some error</div><div class='add'>+                     * indicated by wc.status, till we are done</div><div class='add'>+                     * with usage of peer and thereby that of trans.</div><div class='add'>+                     */</div><div class='add'>+                    if (peer != NULL) {</div><div class='add'>+                        rpc_transport_ref(peer-&gt;trans);</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='add'>+                pthread_mutex_unlock(&amp;device-&gt;qpreg.lock);</div><div class='ctx'> </div><div class='del'>-                while (!failed &amp;&amp;</div><div class='del'>-                       (num_wr = ibv_poll_cq (event_cq, 10, wc)) &gt; 0) {</div><div class='del'>-                        for (index = 0; index &lt; num_wr &amp;&amp; !failed; index++) {</div><div class='del'>-                                post = (gf_rdma_post_t *) (long)</div><div class='del'>-                                        wc[index].wr_id;</div><div class='del'>-</div><div class='del'>-                                pthread_mutex_lock (&amp;device-&gt;qpreg.lock);</div><div class='del'>-                                {</div><div class='del'>-                                        peer = __gf_rdma_lookup_peer (device,</div><div class='del'>-                                                        wc[index].qp_num);</div><div class='del'>-</div><div class='del'>-                                /*</div><div class='del'>-                                 * keep a refcount on transport so that it</div><div class='del'>-                                 * does not get freed because of some error</div><div class='del'>-                                 * indicated by wc.status, till we are done</div><div class='del'>-                                 * with usage of peer and thereby that of trans.</div><div class='del'>-                                 */</div><div class='del'>-                                        if (peer != NULL) {</div><div class='del'>-                                                rpc_transport_ref (peer-&gt;trans);</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                                pthread_mutex_unlock (&amp;device-&gt;qpreg.lock);</div><div class='del'>-</div><div class='del'>-                                if (wc[index].status != IBV_WC_SUCCESS) {</div><div class='del'>-                                        ibv_ack_cq_events (event_cq, num_wr);</div><div class='del'>-                                        failed = 1;</div><div class='del'>-                                        gf_rdma_handle_failed_send_completion</div><div class='del'>-                                                (peer, &amp;wc[index]);</div><div class='del'>-                                } else {</div><div class='del'>-                                      gf_rdma_handle_successful_send_completion</div><div class='del'>-                                                (peer, &amp;wc[index]);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (post) {</div><div class='del'>-                                        is_request = post-&gt;ctx.is_request;</div><div class='del'>-</div><div class='del'>-                                        ret = gf_rdma_post_unref (post);</div><div class='del'>-                                        if ((ret == 0)</div><div class='del'>-                                        &amp;&amp; (wc[index].status == IBV_WC_SUCCESS)</div><div class='del'>-                                        &amp;&amp; !is_request</div><div class='del'>-                                        &amp;&amp; (post-&gt;type == GF_RDMA_SEND_POST)</div><div class='del'>-                                        &amp;&amp; (peer != NULL)) {</div><div class='del'>-                                        /* An GF_RDMA_RECV_POST can end up in</div><div class='del'>-                                         * gf_rdma_send_completion_proc for</div><div class='del'>-                                         * rdma-reads, and we do not take</div><div class='del'>-                                         * quota for getting an GF_RDMA_RECV_POST.</div><div class='del'>-                                         */</div><div class='del'>-</div><div class='del'>-                                        /*</div><div class='del'>-                                         * if it is request, quota is returned</div><div class='del'>-                                         * after reply has come.</div><div class='del'>-                                         */</div><div class='del'>-                                                quota_ret = gf_rdma_quota_put</div><div class='del'>-                                                        (peer);</div><div class='del'>-                                                if (quota_ret &lt; 0) {</div><div class='del'>-                                                        gf_msg_debug ("rdma",</div><div class='del'>-                                                        0, "failed to send "</div><div class='del'>-                                                        "message");</div><div class='del'>-                                                }</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (peer) {</div><div class='del'>-                                        rpc_transport_unref (peer-&gt;trans);</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg_debug (GF_RDMA_LOG_NAME, 0,</div><div class='del'>-                                        "could not lookup peer for qp_num: %d",</div><div class='del'>-                                        wc[index].qp_num);</div><div class='del'>-</div><div class='del'>-                                }</div><div class='add'>+                if (wc[index].status != IBV_WC_SUCCESS) {</div><div class='add'>+                    ibv_ack_cq_events(event_cq, num_wr);</div><div class='add'>+                    failed = 1;</div><div class='add'>+                    gf_rdma_handle_failed_send_completion(peer, &amp;wc[index]);</div><div class='add'>+                } else {</div><div class='add'>+                    gf_rdma_handle_successful_send_completion(peer, &amp;wc[index]);</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                if (post) {</div><div class='add'>+                    is_request = post-&gt;ctx.is_request;</div><div class='add'>+</div><div class='add'>+                    ret = gf_rdma_post_unref(post);</div><div class='add'>+                    if ((ret == 0) &amp;&amp; (wc[index].status == IBV_WC_SUCCESS) &amp;&amp;</div><div class='add'>+                        !is_request &amp;&amp; (post-&gt;type == GF_RDMA_SEND_POST) &amp;&amp;</div><div class='add'>+                        (peer != NULL)) {</div><div class='add'>+                        /* An GF_RDMA_RECV_POST can end up in</div><div class='add'>+                         * gf_rdma_send_completion_proc for</div><div class='add'>+                         * rdma-reads, and we do not take</div><div class='add'>+                         * quota for getting an GF_RDMA_RECV_POST.</div><div class='add'>+                         */</div><div class='add'>+</div><div class='add'>+                        /*</div><div class='add'>+                         * if it is request, quota is returned</div><div class='add'>+                         * after reply has come.</div><div class='add'>+                         */</div><div class='add'>+                        quota_ret = gf_rdma_quota_put(peer);</div><div class='add'>+                        if (quota_ret &lt; 0) {</div><div class='add'>+                            gf_msg_debug("rdma", 0,</div><div class='add'>+                                         "failed to send "</div><div class='add'>+                                         "message");</div><div class='ctx'>                         }</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='del'>-                        RDMA_MSG_IBV_POLL_CQ_ERROR,</div><div class='del'>-                        "ibv_poll_cq on `%s' returned error (ret = %d,"</div><div class='del'>-                        " errno = %d)",</div><div class='del'>-                        device-&gt;device_name, ret, errno);</div><div class='del'>-                        continue;</div><div class='del'>-               }</div><div class='del'>-               if (!failed)</div><div class='del'>-                       ibv_ack_cq_events (event_cq, num_wr);</div><div class='add'>+                if (peer) {</div><div class='add'>+                    rpc_transport_unref(peer-&gt;trans);</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg_debug(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                                 "could not lookup peer for qp_num: %d",</div><div class='add'>+                                 wc[index].qp_num);</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(GF_RDMA_LOG_NAME, GF_LOG_ERROR, errno,</div><div class='add'>+                   RDMA_MSG_IBV_POLL_CQ_ERROR,</div><div class='add'>+                   "ibv_poll_cq on `%s' returned error (ret = %d,"</div><div class='add'>+                   " errno = %d)",</div><div class='add'>+                   device-&gt;device_name, ret, errno);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (!failed)</div><div class='add'>+            ibv_ack_cq_events(event_cq, num_wr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-gf_rdma_options_init (rpc_transport_t *this)</div><div class='add'>+gf_rdma_options_init(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv    = NULL;</div><div class='del'>-        gf_rdma_options_t *options = NULL;</div><div class='del'>-        int32_t            mtu     = 0;</div><div class='del'>-        data_t            *temp    = NULL;</div><div class='del'>-</div><div class='del'>-        /* TODO: validate arguments from options below */</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-        options-&gt;send_size = GLUSTERFS_RDMA_INLINE_THRESHOLD;/*this-&gt;ctx-&gt;page_size * 4;  512 KB*/</div><div class='del'>-        options-&gt;recv_size = GLUSTERFS_RDMA_INLINE_THRESHOLD;/*this-&gt;ctx-&gt;page_size * 4;  512 KB*/</div><div class='del'>-        options-&gt;send_count = 4096;</div><div class='del'>-        options-&gt;recv_count = 4096;</div><div class='del'>-        options-&gt;attr_timeout = GF_RDMA_TIMEOUT;</div><div class='del'>-        options-&gt;attr_retry_cnt = GF_RDMA_RETRY_CNT;</div><div class='del'>-        options-&gt;attr_rnr_retry = GF_RDMA_RNR_RETRY;</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options, "transport.listen-backlog");</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;backlog = data_to_uint32 (temp);</div><div class='del'>-        else</div><div class='del'>-                options-&gt;backlog = GLUSTERFS_SOCKET_LISTEN_BACKLOG;</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options,</div><div class='del'>-                         "transport.rdma.work-request-send-count");</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;send_count = data_to_int32 (temp);</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options,</div><div class='del'>-                         "transport.rdma.work-request-recv-count");</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;recv_count = data_to_int32 (temp);</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options, "transport.rdma.attr-timeout");</div><div class='del'>-</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;attr_timeout = data_to_uint8 (temp);</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options, "transport.rdma.attr-retry-cnt");</div><div class='del'>-</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;attr_retry_cnt = data_to_uint8 (temp);</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options, "transport.rdma.attr-rnr-retry");</div><div class='del'>-</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;attr_rnr_retry = data_to_uint8 (temp);</div><div class='del'>-</div><div class='del'>-        options-&gt;port = 1;</div><div class='del'>-        temp = dict_get (this-&gt;options,</div><div class='del'>-                         "transport.rdma.port");</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;port = data_to_uint64 (temp);</div><div class='del'>-</div><div class='del'>-        options-&gt;mtu = mtu = IBV_MTU_2048;</div><div class='del'>-        temp = dict_get (this-&gt;options,</div><div class='del'>-                         "transport.rdma.mtu");</div><div class='del'>-        if (temp)</div><div class='del'>-                mtu = data_to_int32 (temp);</div><div class='del'>-        switch (mtu) {</div><div class='del'>-</div><div class='del'>-        case 256: options-&gt;mtu = IBV_MTU_256;</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case 512: options-&gt;mtu = IBV_MTU_512;</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case 1024: options-&gt;mtu = IBV_MTU_1024;</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case 2048: options-&gt;mtu = IBV_MTU_2048;</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        case 4096: options-&gt;mtu = IBV_MTU_4096;</div><div class='del'>-                break;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='add'>+    int32_t mtu = 0;</div><div class='add'>+    data_t *temp = NULL;</div><div class='add'>+</div><div class='add'>+    /* TODO: validate arguments from options below */</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+    options-&gt;send_size =</div><div class='add'>+        GLUSTERFS_RDMA_INLINE_THRESHOLD; /*this-&gt;ctx-&gt;page_size * 4;  512 KB*/</div><div class='add'>+    options-&gt;recv_size =</div><div class='add'>+        GLUSTERFS_RDMA_INLINE_THRESHOLD; /*this-&gt;ctx-&gt;page_size * 4;  512 KB*/</div><div class='add'>+    options-&gt;send_count = 4096;</div><div class='add'>+    options-&gt;recv_count = 4096;</div><div class='add'>+    options-&gt;attr_timeout = GF_RDMA_TIMEOUT;</div><div class='add'>+    options-&gt;attr_retry_cnt = GF_RDMA_RETRY_CNT;</div><div class='add'>+    options-&gt;attr_rnr_retry = GF_RDMA_RNR_RETRY;</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.listen-backlog");</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;backlog = data_to_uint32(temp);</div><div class='add'>+    else</div><div class='add'>+        options-&gt;backlog = GLUSTERFS_SOCKET_LISTEN_BACKLOG;</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.work-request-send-count");</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;send_count = data_to_int32(temp);</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.work-request-recv-count");</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;recv_count = data_to_int32(temp);</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.attr-timeout");</div><div class='add'>+</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;attr_timeout = data_to_uint8(temp);</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.attr-retry-cnt");</div><div class='add'>+</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;attr_retry_cnt = data_to_uint8(temp);</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.attr-rnr-retry");</div><div class='add'>+</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;attr_rnr_retry = data_to_uint8(temp);</div><div class='add'>+</div><div class='add'>+    options-&gt;port = 1;</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.port");</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;port = data_to_uint64(temp);</div><div class='add'>+</div><div class='add'>+    options-&gt;mtu = mtu = IBV_MTU_2048;</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.mtu");</div><div class='add'>+    if (temp)</div><div class='add'>+        mtu = data_to_int32(temp);</div><div class='add'>+    switch (mtu) {</div><div class='add'>+        case 256:</div><div class='add'>+            options-&gt;mtu = IBV_MTU_256;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case 512:</div><div class='add'>+            options-&gt;mtu = IBV_MTU_512;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case 1024:</div><div class='add'>+            options-&gt;mtu = IBV_MTU_1024;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case 2048:</div><div class='add'>+            options-&gt;mtu = IBV_MTU_2048;</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        case 4096:</div><div class='add'>+            options-&gt;mtu = IBV_MTU_4096;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                if (temp)</div><div class='del'>-                        gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='del'>-                                RDMA_MSG_UNRECG_MTU_VALUE, "%s: unrecognized "</div><div class='del'>-                                "MTU value '%s', defaulting to '2048'",</div><div class='del'>-                                this-&gt;name, data_to_str (temp));</div><div class='del'>-                else</div><div class='del'>-                        gf_msg_trace (GF_RDMA_LOG_NAME, 0, "%s: defaulting "</div><div class='del'>-                                      "MTU to '2048'", this-&gt;name);</div><div class='del'>-                options-&gt;mtu = IBV_MTU_2048;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        temp = dict_get (this-&gt;options,</div><div class='del'>-                         "transport.rdma.device-name");</div><div class='del'>-        if (temp)</div><div class='del'>-                options-&gt;device_name = gf_strdup (temp-&gt;data);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+            if (temp)</div><div class='add'>+                gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, 0,</div><div class='add'>+                       RDMA_MSG_UNRECG_MTU_VALUE,</div><div class='add'>+                       "%s: unrecognized "</div><div class='add'>+                       "MTU value '%s', defaulting to '2048'",</div><div class='add'>+                       this-&gt;name, data_to_str(temp));</div><div class='add'>+            else</div><div class='add'>+                gf_msg_trace(GF_RDMA_LOG_NAME, 0,</div><div class='add'>+                             "%s: defaulting "</div><div class='add'>+                             "MTU to '2048'",</div><div class='add'>+                             this-&gt;name);</div><div class='add'>+            options-&gt;mtu = IBV_MTU_2048;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    temp = dict_get(this-&gt;options, "transport.rdma.device-name");</div><div class='add'>+    if (temp)</div><div class='add'>+        options-&gt;device_name = gf_strdup(temp-&gt;data);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_rdma_ctx_t *</div><div class='del'>-__gf_rdma_ctx_create (void)</div><div class='add'>+__gf_rdma_ctx_create(void)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='del'>-        int            ret      = -1;</div><div class='del'>-</div><div class='del'>-        rdma_ctx = GF_CALLOC (1, sizeof (*rdma_ctx), gf_common_mt_char);</div><div class='del'>-        if (rdma_ctx == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_init (&amp;rdma_ctx-&gt;lock, NULL);</div><div class='del'>-        rdma_ctx-&gt;rdma_cm_event_channel = rdma_create_event_channel ();</div><div class='del'>-        if (rdma_ctx-&gt;rdma_cm_event_channel == NULL) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_CM_EVENT_FAILED, "rdma_cm event channel "</div><div class='del'>-                        "creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;rdma_ctx-&gt;rdma_cm_thread, NULL,</div><div class='del'>-                                gf_rdma_cm_event_handler,</div><div class='del'>-                                rdma_ctx-&gt;rdma_cm_event_channel, "rdmaehan");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (GF_RDMA_LOG_NAME, GF_LOG_WARNING, ret,</div><div class='del'>-                        RDMA_MSG_CM_EVENT_FAILED, "creation of thread to "</div><div class='del'>-                        "handle rdma-cm events failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    rdma_ctx = GF_CALLOC(1, sizeof(*rdma_ctx), gf_common_mt_char);</div><div class='add'>+    if (rdma_ctx == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_init(&amp;rdma_ctx-&gt;lock, NULL);</div><div class='add'>+    rdma_ctx-&gt;rdma_cm_event_channel = rdma_create_event_channel();</div><div class='add'>+    if (rdma_ctx-&gt;rdma_cm_event_channel == NULL) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, errno,</div><div class='add'>+               RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+               "rdma_cm event channel "</div><div class='add'>+               "creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;rdma_ctx-&gt;rdma_cm_thread, NULL,</div><div class='add'>+                           gf_rdma_cm_event_handler,</div><div class='add'>+                           rdma_ctx-&gt;rdma_cm_event_channel, "rdmaehan");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(GF_RDMA_LOG_NAME, GF_LOG_WARNING, ret, RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+               "creation of thread to "</div><div class='add'>+               "handle rdma-cm events failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; rdma_ctx) {</div><div class='del'>-                if (rdma_ctx-&gt;rdma_cm_event_channel != NULL) {</div><div class='del'>-                        rdma_destroy_event_channel (rdma_ctx-&gt;rdma_cm_event_channel);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_FREE (rdma_ctx);</div><div class='del'>-                rdma_ctx = NULL;</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; rdma_ctx) {</div><div class='add'>+        if (rdma_ctx-&gt;rdma_cm_event_channel != NULL) {</div><div class='add'>+            rdma_destroy_event_channel(rdma_ctx-&gt;rdma_cm_event_channel);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return rdma_ctx;</div><div class='add'>+        GF_FREE(rdma_ctx);</div><div class='add'>+        rdma_ctx = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return rdma_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_init (rpc_transport_t *this)</div><div class='add'>+gf_rdma_init(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t   *priv    = NULL;</div><div class='del'>-        int32_t              ret     = 0;</div><div class='del'>-        glusterfs_ctx_t     *ctx     = NULL;</div><div class='del'>-        gf_rdma_options_t   *options = NULL;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    gf_rdma_options_t *options = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ibv_fork_init ();</div><div class='del'>-        gf_rdma_options_init (this);</div><div class='add'>+    ibv_fork_init();</div><div class='add'>+    gf_rdma_options_init(this);</div><div class='ctx'> </div><div class='del'>-        options = &amp;priv-&gt;options;</div><div class='del'>-        priv-&gt;peer.send_count = options-&gt;send_count;</div><div class='del'>-        priv-&gt;peer.recv_count = options-&gt;recv_count;</div><div class='del'>-        priv-&gt;peer.send_size = options-&gt;send_size;</div><div class='del'>-        priv-&gt;peer.recv_size = options-&gt;recv_size;</div><div class='del'>-        priv-&gt;backlog = options-&gt;backlog;</div><div class='add'>+    options = &amp;priv-&gt;options;</div><div class='add'>+    priv-&gt;peer.send_count = options-&gt;send_count;</div><div class='add'>+    priv-&gt;peer.recv_count = options-&gt;recv_count;</div><div class='add'>+    priv-&gt;peer.send_size = options-&gt;send_size;</div><div class='add'>+    priv-&gt;peer.recv_size = options-&gt;recv_size;</div><div class='add'>+    priv-&gt;backlog = options-&gt;backlog;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;peer.trans = this;</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;peer.ioq);</div><div class='add'>+    priv-&gt;peer.trans = this;</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;peer.ioq);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;write_mutex, NULL);</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;recv_mutex, NULL);</div><div class='del'>-        pthread_cond_init (&amp;priv-&gt;recv_cond, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;write_mutex, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;recv_mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;priv-&gt;recv_cond, NULL);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;ib == NULL) {</div><div class='del'>-                        ctx-&gt;ib = __gf_rdma_ctx_create ();</div><div class='del'>-                        if (ctx-&gt;ib == NULL) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;ib == NULL) {</div><div class='add'>+            ctx-&gt;ib = __gf_rdma_ctx_create();</div><div class='add'>+            if (ctx-&gt;ib == NULL) {</div><div class='add'>+                ret = -1;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_disconnect (rpc_transport_t *this, gf_boolean_t wait)</div><div class='add'>+gf_rdma_disconnect(rpc_transport_t *this, gf_boolean_t wait)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='del'>-        int32_t            ret  = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        gf_msg_callingfn (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                          RDMA_MSG_PEER_DISCONNECTED,</div><div class='del'>-                          "disconnect called (peer:%s)",</div><div class='del'>-                          this-&gt;peerinfo.identifier);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    gf_msg_callingfn(this-&gt;name, GF_LOG_DEBUG, 0, RDMA_MSG_PEER_DISCONNECTED,</div><div class='add'>+                     "disconnect called (peer:%s)", this-&gt;peerinfo.identifier);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='del'>-        {</div><div class='del'>-                ret = __gf_rdma_disconnect (this);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = __gf_rdma_disconnect(this);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-gf_rdma_connect (struct rpc_transport *this, int port)</div><div class='add'>+gf_rdma_connect(struct rpc_transport *this, int port)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t   *priv         = NULL;</div><div class='del'>-        int32_t              ret          = 0;</div><div class='del'>-        union gf_sock_union  sock_union   = {{0, }, };</div><div class='del'>-        socklen_t            sockaddr_len = 0;</div><div class='del'>-        gf_rdma_peer_t      *peer         = NULL;</div><div class='del'>-        gf_rdma_ctx_t       *rdma_ctx     = NULL;</div><div class='del'>-        gf_boolean_t         connected    = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='del'>-</div><div class='del'>-        rpc_transport_ref (this);</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_client_get_remote_sockaddr (this,</div><div class='del'>-                                                  &amp;sock_union.sa,</div><div class='del'>-                                                  &amp;sockaddr_len, port);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "cannot get remote address to "</div><div class='del'>-                              "connect");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;write_mutex);</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    union gf_sock_union sock_union = {</div><div class='ctx'>         {</div><div class='del'>-                if (peer-&gt;cm_id != NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        errno = EINPROGRESS;</div><div class='del'>-                        connected = _gf_true;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    socklen_t sockaddr_len = 0;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='add'>+    gf_boolean_t connected = _gf_false;</div><div class='ctx'> </div><div class='del'>-                priv-&gt;entity = GF_RDMA_CLIENT;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-                ret = rdma_create_id (rdma_ctx-&gt;rdma_cm_event_channel,</div><div class='del'>-                                      &amp;peer-&gt;cm_id, this, RDMA_PS_TCP);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                RDMA_MSG_CM_EVENT_FAILED, "creation of "</div><div class='del'>-                                "rdma_cm_id failed");</div><div class='del'>-                        ret = -errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='ctx'> </div><div class='del'>-                memcpy (&amp;this-&gt;peerinfo.sockaddr, &amp;sock_union.storage,</div><div class='del'>-                        sockaddr_len);</div><div class='del'>-                this-&gt;peerinfo.sockaddr_len = sockaddr_len;</div><div class='del'>-</div><div class='del'>-                if (port &gt; 0)</div><div class='del'>-                        sock_union.sin.sin_port = htons (port);</div><div class='del'>-</div><div class='del'>-                ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family =</div><div class='del'>-                        ((struct sockaddr *)&amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family;</div><div class='del'>-</div><div class='del'>-                ret = gf_rdma_client_bind (this,</div><div class='del'>-                                           (struct sockaddr *)&amp;this-&gt;myinfo.sockaddr,</div><div class='del'>-                                           &amp;this-&gt;myinfo.sockaddr_len,</div><div class='del'>-                                           peer-&gt;cm_id);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                RDMA_MSG_CLIENT_BIND_FAILED,</div><div class='del'>-                                "client bind failed");</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = rdma_resolve_addr (peer-&gt;cm_id, NULL, &amp;sock_union.sa,</div><div class='del'>-                                         2000);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                RDMA_MSG_RDMA_RESOLVE_ADDR_FAILED,</div><div class='del'>-                                "rdma_resolve_addr failed");</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    rpc_transport_ref(this);</div><div class='ctx'> </div><div class='del'>-                priv-&gt;connected = 0;</div><div class='del'>-        }</div><div class='del'>-unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;write_mutex);</div><div class='add'>+    ret = gf_rdma_client_get_remote_sockaddr(this, &amp;sock_union.sa,</div><div class='add'>+                                             &amp;sockaddr_len, port);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "cannot get remote address to "</div><div class='add'>+                     "connect");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                if (!connected) {</div><div class='del'>-                        gf_rdma_teardown (this);</div><div class='del'>-                }</div><div class='add'>+    rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='ctx'> </div><div class='del'>-                rpc_transport_unref (this);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;write_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (peer-&gt;cm_id != NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            errno = EINPROGRESS;</div><div class='add'>+            connected = _gf_true;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+        priv-&gt;entity = GF_RDMA_CLIENT;</div><div class='ctx'> </div><div class='del'>-static int32_t</div><div class='del'>-gf_rdma_listen (rpc_transport_t *this)</div><div class='del'>-{</div><div class='del'>-        union gf_sock_union  sock_union   = {{0, }, };</div><div class='del'>-        socklen_t            sockaddr_len = 0;</div><div class='del'>-        gf_rdma_private_t   *priv         = NULL;</div><div class='del'>-        gf_rdma_peer_t      *peer         = NULL;</div><div class='del'>-        int                  ret          = 0;</div><div class='del'>-        gf_rdma_ctx_t       *rdma_ctx     = NULL;</div><div class='del'>-        char                 service[NI_MAXSERV], host[NI_MAXHOST];</div><div class='del'>-        int                  optval = 2;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        peer = &amp;priv-&gt;peer;</div><div class='del'>-</div><div class='del'>-        priv-&gt;entity = GF_RDMA_SERVER_LISTENER;</div><div class='del'>-</div><div class='del'>-        rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='del'>-</div><div class='del'>-        ret = gf_rdma_server_get_local_sockaddr (this, &amp;sock_union.sa,</div><div class='del'>-                                                 &amp;sockaddr_len);</div><div class='add'>+        ret = rdma_create_id(rdma_ctx-&gt;rdma_cm_event_channel, &amp;peer-&gt;cm_id,</div><div class='add'>+                             this, RDMA_PS_TCP);</div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_NW_ADDR_UNKNOWN,</div><div class='del'>-                        "cannot find network address of server to bind to");</div><div class='del'>-                goto err;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno, RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+                   "creation of "</div><div class='add'>+                   "rdma_cm_id failed");</div><div class='add'>+            ret = -errno;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rdma_create_id (rdma_ctx-&gt;rdma_cm_event_channel,</div><div class='del'>-                              &amp;peer-&gt;cm_id, this, RDMA_PS_TCP);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_CM_EVENT_FAILED, "creation of rdma_cm_id "</div><div class='del'>-                        "failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        memcpy(&amp;this-&gt;peerinfo.sockaddr, &amp;sock_union.storage, sockaddr_len);</div><div class='add'>+        this-&gt;peerinfo.sockaddr_len = sockaddr_len;</div><div class='ctx'> </div><div class='del'>-        memcpy (&amp;this-&gt;myinfo.sockaddr, &amp;sock_union.storage,</div><div class='del'>-                sockaddr_len);</div><div class='del'>-        this-&gt;myinfo.sockaddr_len = sockaddr_len;</div><div class='add'>+        if (port &gt; 0)</div><div class='add'>+            sock_union.sin.sin_port = htons(port);</div><div class='ctx'> </div><div class='del'>-        ret = getnameinfo ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr,</div><div class='del'>-                           this-&gt;myinfo.sockaddr_len, host, sizeof (host),</div><div class='del'>-                           service, sizeof (service),</div><div class='del'>-                           NI_NUMERICHOST);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        TRANS_MSG_GET_NAME_INFO_FAILED,</div><div class='del'>-                        "getnameinfo failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family =</div><div class='add'>+            ((struct sockaddr *)&amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family;</div><div class='ctx'> </div><div class='del'>-        sprintf (this-&gt;myinfo.identifier, "%s:%s", host, service);</div><div class='del'>-</div><div class='del'>-        ret = rdma_set_option(peer-&gt;cm_id, RDMA_OPTION_ID,</div><div class='del'>-                              RDMA_OPTION_ID_REUSEADDR,</div><div class='del'>-                              (void *)&amp;optval, sizeof(optval));</div><div class='add'>+        ret = gf_rdma_client_bind(this,</div><div class='add'>+                                  (struct sockaddr *)&amp;this-&gt;myinfo.sockaddr,</div><div class='add'>+                                  &amp;this-&gt;myinfo.sockaddr_len, peer-&gt;cm_id);</div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_OPTION_SET_FAILED, "rdma option set failed");</div><div class='del'>-                goto err;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                   RDMA_MSG_CLIENT_BIND_FAILED, "client bind failed");</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rdma_bind_addr (peer-&gt;cm_id, &amp;sock_union.sa);</div><div class='add'>+        ret = rdma_resolve_addr(peer-&gt;cm_id, NULL, &amp;sock_union.sa, 2000);</div><div class='ctx'>         if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_RDMA_BIND_ADDR_FAILED,</div><div class='del'>-                        "rdma_bind_addr failed");</div><div class='del'>-                goto err;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                   RDMA_MSG_RDMA_RESOLVE_ADDR_FAILED,</div><div class='add'>+                   "rdma_resolve_addr failed");</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rdma_listen (peer-&gt;cm_id, priv-&gt;backlog);</div><div class='add'>+        priv-&gt;connected = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        RDMA_MSG_LISTEN_FAILED,</div><div class='del'>-                        "rdma_listen failed");</div><div class='del'>-                goto err;</div><div class='add'>+out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        if (!connected) {</div><div class='add'>+            gf_rdma_teardown(this);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        rpc_transport_ref (this);</div><div class='add'>+        rpc_transport_unref(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+gf_rdma_listen(rpc_transport_t *this)</div><div class='add'>+{</div><div class='add'>+    union gf_sock_union sock_union = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    socklen_t sockaddr_len = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_peer_t *peer = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='add'>+    char service[NI_MAXSERV], host[NI_MAXHOST];</div><div class='add'>+    int optval = 2;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    peer = &amp;priv-&gt;peer;</div><div class='add'>+</div><div class='add'>+    priv-&gt;entity = GF_RDMA_SERVER_LISTENER;</div><div class='add'>+</div><div class='add'>+    rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='add'>+</div><div class='add'>+    ret = gf_rdma_server_get_local_sockaddr(this, &amp;sock_union.sa,</div><div class='add'>+                                            &amp;sockaddr_len);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_NW_ADDR_UNKNOWN,</div><div class='add'>+               "cannot find network address of server to bind to");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rdma_create_id(rdma_ctx-&gt;rdma_cm_event_channel, &amp;peer-&gt;cm_id, this,</div><div class='add'>+                         RDMA_PS_TCP);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_CM_EVENT_FAILED,</div><div class='add'>+               "creation of rdma_cm_id "</div><div class='add'>+               "failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(&amp;this-&gt;myinfo.sockaddr, &amp;sock_union.storage, sockaddr_len);</div><div class='add'>+    this-&gt;myinfo.sockaddr_len = sockaddr_len;</div><div class='add'>+</div><div class='add'>+    ret = getnameinfo((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr,</div><div class='add'>+                      this-&gt;myinfo.sockaddr_len, host, sizeof(host), service,</div><div class='add'>+                      sizeof(service), NI_NUMERICHOST);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, TRANS_MSG_GET_NAME_INFO_FAILED,</div><div class='add'>+               "getnameinfo failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(this-&gt;myinfo.identifier, "%s:%s", host, service);</div><div class='add'>+</div><div class='add'>+    ret = rdma_set_option(peer-&gt;cm_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR,</div><div class='add'>+                          (void *)&amp;optval, sizeof(optval));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_OPTION_SET_FAILED,</div><div class='add'>+               "rdma option set failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rdma_bind_addr(peer-&gt;cm_id, &amp;sock_union.sa);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+               RDMA_MSG_RDMA_BIND_ADDR_FAILED, "rdma_bind_addr failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rdma_listen(peer-&gt;cm_id, priv-&gt;backlog);</div><div class='add'>+</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, RDMA_MSG_LISTEN_FAILED,</div><div class='add'>+               "rdma_listen failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc_transport_ref(this);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (peer-&gt;cm_id != NULL) {</div><div class='del'>-                        rdma_destroy_id (peer-&gt;cm_id);</div><div class='del'>-                        peer-&gt;cm_id = NULL;</div><div class='del'>-                }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (peer-&gt;cm_id != NULL) {</div><div class='add'>+            rdma_destroy_id(peer-&gt;cm_id);</div><div class='add'>+            peer-&gt;cm_id = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct rpc_transport_ops tops = {</div><div class='del'>-        .submit_request = gf_rdma_submit_request,</div><div class='del'>-        .submit_reply   = gf_rdma_submit_reply,</div><div class='del'>-        .connect        = gf_rdma_connect,</div><div class='del'>-        .disconnect     = gf_rdma_disconnect,</div><div class='del'>-        .listen         = gf_rdma_listen,</div><div class='add'>+    .submit_request = gf_rdma_submit_request,</div><div class='add'>+    .submit_reply = gf_rdma_submit_reply,</div><div class='add'>+    .connect = gf_rdma_connect,</div><div class='add'>+    .disconnect = gf_rdma_disconnect,</div><div class='add'>+    .listen = gf_rdma_listen,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (rpc_transport_t *this)</div><div class='add'>+init(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='del'>-        gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='del'>-        struct iobuf_pool *iobuf_pool = NULL;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_common_mt_rdma_private_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-</div><div class='del'>-        if (gf_rdma_init (this)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        RDMA_MSG_INIT_IB_DEVICE_FAILED,</div><div class='del'>-                        "Failed to initialize IB Device");</div><div class='del'>-                this-&gt;private = NULL;</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='del'>-        if (!rdma_ctx)</div><div class='del'>-                return -1;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;rdma_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (this-&gt;dl_handle &amp;&amp; (++(rdma_ctx-&gt;dlcount)) == 1) {</div><div class='del'>-                        iobuf_pool = this-&gt;ctx-&gt;iobuf_pool;</div><div class='del'>-                        iobuf_pool-&gt;rdma_registration = gf_rdma_register_arena;</div><div class='del'>-                        iobuf_pool-&gt;rdma_deregistration =</div><div class='del'>-                                                      gf_rdma_deregister_arena;</div><div class='del'>-                        gf_rdma_register_iobuf_pool_with_device</div><div class='del'>-                                                (rdma_ctx-&gt;device, iobuf_pool);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;rdma_ctx-&gt;lock);</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_common_mt_rdma_private_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+</div><div class='add'>+    if (gf_rdma_init(this)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, RDMA_MSG_INIT_IB_DEVICE_FAILED,</div><div class='add'>+               "Failed to initialize IB Device");</div><div class='add'>+        this-&gt;private = NULL;</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='add'>+    if (!rdma_ctx)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;rdma_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (this-&gt;dl_handle &amp;&amp; (++(rdma_ctx-&gt;dlcount)) == 1) {</div><div class='add'>+            iobuf_pool = this-&gt;ctx-&gt;iobuf_pool;</div><div class='add'>+            iobuf_pool-&gt;rdma_registration = gf_rdma_register_arena;</div><div class='add'>+            iobuf_pool-&gt;rdma_deregistration = gf_rdma_deregister_arena;</div><div class='add'>+            gf_rdma_register_iobuf_pool_with_device(rdma_ctx-&gt;device,</div><div class='add'>+                                                    iobuf_pool);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;rdma_ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (rpc_transport_t *this, dict_t *options)</div><div class='add'>+reconfigure(rpc_transport_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        gf_rdma_private_t *priv          = NULL;</div><div class='del'>-        uint32_t          backlog        = 0;</div><div class='del'>-        int               ret            = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rdma", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("rdma", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (dict_get_uint32 (options, "transport.listen-backlog",</div><div class='del'>-                             &amp;backlog) == 0) {</div><div class='del'>-                priv-&gt;backlog = backlog;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                        "transport.listen-backlog=%d", priv-&gt;backlog);</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    uint32_t backlog = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rdma", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("rdma", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (dict_get_uint32(options, "transport.listen-backlog", &amp;backlog) == 0) {</div><div class='add'>+        priv-&gt;backlog = backlog;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "Reconfigued "</div><div class='add'>+               "transport.listen-backlog=%d",</div><div class='add'>+               priv-&gt;backlog);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> void</div><div class='del'>-fini (struct rpc_transport *this)</div><div class='add'>+fini(struct rpc_transport *this)</div><div class='ctx'> {</div><div class='del'>-        /* TODO: verify this function does graceful finish */</div><div class='del'>-        gf_rdma_private_t *priv = NULL;</div><div class='del'>-        struct iobuf_pool *iobuf_pool = NULL;</div><div class='del'>-        gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='add'>+    /* TODO: verify this function does graceful finish */</div><div class='add'>+    gf_rdma_private_t *priv = NULL;</div><div class='add'>+    struct iobuf_pool *iobuf_pool = NULL;</div><div class='add'>+    gf_rdma_ctx_t *rdma_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='ctx'> </div><div class='del'>-        if (priv) {</div><div class='del'>-                pthread_mutex_destroy (&amp;priv-&gt;recv_mutex);</div><div class='del'>-                pthread_mutex_destroy (&amp;priv-&gt;write_mutex);</div><div class='add'>+    if (priv) {</div><div class='add'>+        pthread_mutex_destroy(&amp;priv-&gt;recv_mutex);</div><div class='add'>+        pthread_mutex_destroy(&amp;priv-&gt;write_mutex);</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "called fini on transport: %p", this);</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-        }</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "called fini on transport: %p", this);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='del'>-        if (!rdma_ctx)</div><div class='del'>-                return;</div><div class='add'>+    rdma_ctx = this-&gt;ctx-&gt;ib;</div><div class='add'>+    if (!rdma_ctx)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;rdma_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (this-&gt;dl_handle &amp;&amp; (--(rdma_ctx-&gt;dlcount)) == 0) {</div><div class='del'>-                        iobuf_pool = this-&gt;ctx-&gt;iobuf_pool;</div><div class='del'>-                        gf_rdma_deregister_iobuf_pool (rdma_ctx-&gt;device);</div><div class='del'>-                        iobuf_pool-&gt;rdma_registration = NULL;</div><div class='del'>-                        iobuf_pool-&gt;rdma_deregistration = NULL;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;rdma_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (this-&gt;dl_handle &amp;&amp; (--(rdma_ctx-&gt;dlcount)) == 0) {</div><div class='add'>+            iobuf_pool = this-&gt;ctx-&gt;iobuf_pool;</div><div class='add'>+            gf_rdma_deregister_iobuf_pool(rdma_ctx-&gt;device);</div><div class='add'>+            iobuf_pool-&gt;rdma_registration = NULL;</div><div class='add'>+            iobuf_pool-&gt;rdma_deregistration = NULL;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;rdma_ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;rdma_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: expand each option */</div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key   = {"transport.rdma.port",</div><div class='del'>-                    "rdma-port"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 4,</div><div class='del'>-          .description = "check the option by 'ibv_devinfo'"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.mtu",</div><div class='del'>-                    "rdma-mtu"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.device-name",</div><div class='del'>-                    "rdma-device-name"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY,</div><div class='del'>-          .description = "check by 'ibv_devinfo'"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.work-request-send-count",</div><div class='del'>-                    "rdma-work-request-send-count"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.work-request-recv-count",</div><div class='del'>-                    "rdma-work-request-recv-count"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"remote-port",</div><div class='del'>-                    "transport.remote-port",</div><div class='del'>-                    "transport.rdma.remote-port"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.attr-timeout",</div><div class='del'>-                    "rdma-attr-timeout"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.attr-retry-cnt",</div><div class='del'>-                    "rdma-attr-retry-cnt"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.attr-rnr-retry",</div><div class='del'>-                    "rdma-attr-rnr-retry"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.listen-port", "listen-port"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.connect-path", "connect-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.bind-path", "bind-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.rdma.listen-path", "listen-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.address-family",</div><div class='del'>-                    "address-family"},</div><div class='del'>-          .value = {"inet", "inet6", "inet/inet6", "inet6/inet",</div><div class='del'>-                    "unix", "inet-sdp" },</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.lowlat"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL</div><div class='del'>-        },</div><div class='del'>-        { .key = {NULL} }</div><div class='del'>-};</div><div class='add'>+    {.key = {"transport.rdma.port", "rdma-port"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 4,</div><div class='add'>+     .description = "check the option by 'ibv_devinfo'"},</div><div class='add'>+    {</div><div class='add'>+        .key = {"transport.rdma.mtu", "rdma-mtu"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+    },</div><div class='add'>+    {.key = {"transport.rdma.device-name", "rdma-device-name"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY,</div><div class='add'>+     .description = "check by 'ibv_devinfo'"},</div><div class='add'>+    {</div><div class='add'>+        .key = {"transport.rdma.work-request-send-count",</div><div class='add'>+                "rdma-work-request-send-count"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"transport.rdma.work-request-recv-count",</div><div class='add'>+                "rdma-work-request-recv-count"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+    },</div><div class='add'>+    {.key = {"remote-port", "transport.remote-port",</div><div class='add'>+             "transport.rdma.remote-port"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.rdma.attr-timeout", "rdma-attr-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.rdma.attr-retry-cnt", "rdma-attr-retry-cnt"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.rdma.attr-rnr-retry", "rdma-attr-rnr-retry"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.rdma.listen-port", "listen-port"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.rdma.connect-path", "connect-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+    {.key = {"transport.rdma.bind-path", "bind-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+    {.key = {"transport.rdma.listen-path", "listen-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+    {.key = {"transport.address-family", "address-family"},</div><div class='add'>+     .value = {"inet", "inet6", "inet/inet6", "inet6/inet", "unix", "inet-sdp"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {"transport.socket.lowlat"}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {NULL}}};</div><div class='head'>diff --git a/rpc/rpc-transport/socket/src/name.c b/rpc/rpc-transport/socket/src/name.c<br/>index 34e6372a8f3..3194a7cf369 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/socket/src/name.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-transport/socket/src/name.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/socket/src/name.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/socket/src/name.c</a></div><div class='hunk'>@@ -24,760 +24,729 @@</div><div class='ctx'> #include "common-utils.h"</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_assign_port (struct sockaddr *sockaddr, uint16_t port)</div><div class='add'>+_assign_port(struct sockaddr *sockaddr, uint16_t port)</div><div class='ctx'> {</div><div class='del'>-        switch (sockaddr-&gt;sa_family) {</div><div class='add'>+    switch (sockaddr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                ((struct sockaddr_in6 *)sockaddr)-&gt;sin6_port = htons (port);</div><div class='del'>-                break;</div><div class='add'>+            ((struct sockaddr_in6 *)sockaddr)-&gt;sin6_port = htons(port);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_INET_SDP:</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                ((struct sockaddr_in *)sockaddr)-&gt;sin_port = htons (port);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ((struct sockaddr_in *)sockaddr)-&gt;sin_port = htons(port);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_inet_bind_to_port_lt_ceiling (int fd, struct sockaddr *sockaddr,</div><div class='del'>-                                 socklen_t sockaddr_len, uint32_t ceiling)</div><div class='add'>+af_inet_bind_to_port_lt_ceiling(int fd, struct sockaddr *sockaddr,</div><div class='add'>+                                socklen_t sockaddr_len, uint32_t ceiling)</div><div class='ctx'> {</div><div class='ctx'> #if GF_DISABLE_PRIVPORT_TRACKING</div><div class='del'>-        _assign_port (sockaddr, 0);</div><div class='del'>-        return bind (fd, sockaddr, sockaddr_len);</div><div class='add'>+    _assign_port(sockaddr, 0);</div><div class='add'>+    return bind(fd, sockaddr, sockaddr_len);</div><div class='ctx'> #else</div><div class='del'>-        int32_t         ret                             = -1;</div><div class='del'>-        uint16_t        port                            = ceiling - 1;</div><div class='del'>-        unsigned char   ports[GF_PORT_ARRAY_SIZE]       = {0,};</div><div class='del'>-        int             i                               = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint16_t port = ceiling - 1;</div><div class='add'>+    unsigned char ports[GF_PORT_ARRAY_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='ctx'> loop:</div><div class='del'>-        ret = gf_process_reserved_ports (ports, ceiling);</div><div class='add'>+    ret = gf_process_reserved_ports(ports, ceiling);</div><div class='ctx'> </div><div class='del'>-        while (port) {</div><div class='del'>-                if (port == GF_CLIENT_PORT_CEILING) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    while (port) {</div><div class='add'>+        if (port == GF_CLIENT_PORT_CEILING) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* ignore the reserved ports */</div><div class='del'>-                if (BIT_VALUE (ports, port)) {</div><div class='del'>-                        port--;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        /* ignore the reserved ports */</div><div class='add'>+        if (BIT_VALUE(ports, port)) {</div><div class='add'>+            port--;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                _assign_port (sockaddr, port);</div><div class='add'>+        _assign_port(sockaddr, port);</div><div class='ctx'> </div><div class='del'>-                ret = bind (fd, sockaddr, sockaddr_len);</div><div class='add'>+        ret = bind(fd, sockaddr, sockaddr_len);</div><div class='ctx'> </div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        break;</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (ret == -1 &amp;&amp; errno == EACCES)</div><div class='del'>-                        break;</div><div class='add'>+        if (ret == -1 &amp;&amp; errno == EACCES)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                port--;</div><div class='del'>-        }</div><div class='add'>+        port--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* In case if all the secure ports are exhausted, we are no more</div><div class='del'>-         * binding to secure ports, hence instead of getting a random</div><div class='del'>-         * port, lets define the range to restrict it from getting from</div><div class='del'>-         * ports reserved for bricks i.e from range of 49152 - 65535</div><div class='del'>-         * which further may lead to port clash */</div><div class='del'>-        if (!port) {</div><div class='del'>-                ceiling = port = GF_CLNT_INSECURE_PORT_CEILING;</div><div class='del'>-                for (i = 0; i &lt;= ceiling; i++)</div><div class='del'>-                        BIT_CLEAR (ports, i);</div><div class='del'>-                goto loop;</div><div class='del'>-        }</div><div class='add'>+    /* In case if all the secure ports are exhausted, we are no more</div><div class='add'>+     * binding to secure ports, hence instead of getting a random</div><div class='add'>+     * port, lets define the range to restrict it from getting from</div><div class='add'>+     * ports reserved for bricks i.e from range of 49152 - 65535</div><div class='add'>+     * which further may lead to port clash */</div><div class='add'>+    if (!port) {</div><div class='add'>+        ceiling = port = GF_CLNT_INSECURE_PORT_CEILING;</div><div class='add'>+        for (i = 0; i &lt;= ceiling; i++)</div><div class='add'>+            BIT_CLEAR(ports, i);</div><div class='add'>+        goto loop;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> #endif /* GF_DISABLE_PRIVPORT_TRACKING */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_unix_client_bind (rpc_transport_t *this,</div><div class='del'>-                     struct sockaddr *sockaddr,</div><div class='del'>-                     socklen_t sockaddr_len,</div><div class='del'>-                     int sock)</div><div class='add'>+af_unix_client_bind(rpc_transport_t *this, struct sockaddr *sockaddr,</div><div class='add'>+                    socklen_t sockaddr_len, int sock)</div><div class='ctx'> {</div><div class='del'>-        data_t *path_data = NULL;</div><div class='del'>-        struct sockaddr_un *addr = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        path_data = dict_get (this-&gt;options, "transport.socket.bind-path");</div><div class='del'>-        if (path_data) {</div><div class='del'>-                char *path = data_to_str (path_data);</div><div class='del'>-                if (!path || strlen (path) &gt; UNIX_PATH_MAX) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "bind-path not specified for unix socket, "</div><div class='del'>-                                "letting connect to assign default value");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                addr = (struct sockaddr_un *) sockaddr;</div><div class='del'>-                strcpy (addr-&gt;sun_path, path);</div><div class='del'>-                ret = bind (sock, (struct sockaddr *)addr, sockaddr_len);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "cannot bind to unix-domain socket %d (%s)",</div><div class='del'>-                                sock, strerror (errno));</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "bind-path not specified for unix socket, "</div><div class='del'>-                        "letting connect to assign default value");</div><div class='add'>+    data_t *path_data = NULL;</div><div class='add'>+    struct sockaddr_un *addr = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    path_data = dict_get(this-&gt;options, "transport.socket.bind-path");</div><div class='add'>+    if (path_data) {</div><div class='add'>+        char *path = data_to_str(path_data);</div><div class='add'>+        if (!path || strlen(path) &gt; UNIX_PATH_MAX) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "bind-path not specified for unix socket, "</div><div class='add'>+                   "letting connect to assign default value");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        addr = (struct sockaddr_un *)sockaddr;</div><div class='add'>+        strcpy(addr-&gt;sun_path, path);</div><div class='add'>+        ret = bind(sock, (struct sockaddr *)addr, sockaddr_len);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "cannot bind to unix-domain socket %d (%s)", sock,</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "bind-path not specified for unix socket, "</div><div class='add'>+               "letting connect to assign default value");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-client_fill_address_family (rpc_transport_t *this, sa_family_t *sa_family)</div><div class='add'>+client_fill_address_family(rpc_transport_t *this, sa_family_t *sa_family)</div><div class='ctx'> {</div><div class='del'>-        data_t  *address_family_data = NULL;</div><div class='del'>-        int32_t  ret                 = -1;</div><div class='del'>-</div><div class='del'>-        if (sa_family == NULL) {</div><div class='del'>-                gf_log_callingfn ("", GF_LOG_WARNING,</div><div class='del'>-                                  "sa_family argument is NULL");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        address_family_data = dict_get (this-&gt;options,</div><div class='del'>-                                        "transport.address-family");</div><div class='del'>-        if (!address_family_data) {</div><div class='del'>-                data_t *remote_host_data = NULL, *connect_path_data = NULL;</div><div class='del'>-                remote_host_data = dict_get (this-&gt;options, "remote-host");</div><div class='del'>-                connect_path_data = dict_get (this-&gt;options,</div><div class='del'>-                                              "transport.socket.connect-path");</div><div class='del'>-</div><div class='del'>-                if (!(remote_host_data || connect_path_data) ||</div><div class='del'>-                    (remote_host_data &amp;&amp; connect_path_data)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "transport.address-family not specified. "</div><div class='del'>-                                "Could not guess default value from (remote-host:%s or "</div><div class='del'>-                                "transport.unix.connect-path:%s) options",</div><div class='del'>-                                data_to_str (remote_host_data),</div><div class='del'>-                                data_to_str (connect_path_data));</div><div class='del'>-                        *sa_family = AF_UNSPEC;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (remote_host_data) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "address-family not specified, marking it as unspec "</div><div class='del'>-                                "for getaddrinfo to resolve from (remote-host: %s)",</div><div class='del'>-                                data_to_str(remote_host_data));</div><div class='del'>-                        *sa_family = AF_UNSPEC;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "address-family not specified, guessing it "</div><div class='del'>-                                "to be unix from (transport.unix.connect-path: %s)", data_to_str (connect_path_data));</div><div class='del'>-                        *sa_family = AF_UNIX;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    data_t *address_family_data = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    if (sa_family == NULL) {</div><div class='add'>+        gf_log_callingfn("", GF_LOG_WARNING, "sa_family argument is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    address_family_data = dict_get(this-&gt;options, "transport.address-family");</div><div class='add'>+    if (!address_family_data) {</div><div class='add'>+        data_t *remote_host_data = NULL, *connect_path_data = NULL;</div><div class='add'>+        remote_host_data = dict_get(this-&gt;options, "remote-host");</div><div class='add'>+        connect_path_data = dict_get(this-&gt;options,</div><div class='add'>+                                     "transport.socket.connect-path");</div><div class='add'>+</div><div class='add'>+        if (!(remote_host_data || connect_path_data) ||</div><div class='add'>+            (remote_host_data &amp;&amp; connect_path_data)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "transport.address-family not specified. "</div><div class='add'>+                   "Could not guess default value from (remote-host:%s or "</div><div class='add'>+                   "transport.unix.connect-path:%s) options",</div><div class='add'>+                   data_to_str(remote_host_data),</div><div class='add'>+                   data_to_str(connect_path_data));</div><div class='add'>+            *sa_family = AF_UNSPEC;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (remote_host_data) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "address-family not specified, marking it as unspec "</div><div class='add'>+                   "for getaddrinfo to resolve from (remote-host: %s)",</div><div class='add'>+                   data_to_str(remote_host_data));</div><div class='add'>+            *sa_family = AF_UNSPEC;</div><div class='ctx'>         } else {</div><div class='del'>-                char *address_family = data_to_str (address_family_data);</div><div class='del'>-                if (!strcasecmp (address_family, "unix")) {</div><div class='del'>-                        *sa_family = AF_UNIX;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet")) {</div><div class='del'>-                        *sa_family = AF_INET;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet6")) {</div><div class='del'>-                        *sa_family = AF_INET6;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet-sdp")) {</div><div class='del'>-                        *sa_family = AF_INET_SDP;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "unknown address-family (%s) specified",</div><div class='del'>-                                address_family);</div><div class='del'>-                        *sa_family = AF_UNSPEC;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "address-family not specified, guessing it "</div><div class='add'>+                   "to be unix from (transport.unix.connect-path: %s)",</div><div class='add'>+                   data_to_str(connect_path_data));</div><div class='add'>+            *sa_family = AF_UNIX;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        char *address_family = data_to_str(address_family_data);</div><div class='add'>+        if (!strcasecmp(address_family, "unix")) {</div><div class='add'>+            *sa_family = AF_UNIX;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet")) {</div><div class='add'>+            *sa_family = AF_INET;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet6")) {</div><div class='add'>+            *sa_family = AF_INET6;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet-sdp")) {</div><div class='add'>+            *sa_family = AF_INET_SDP;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "unknown address-family (%s) specified", address_family);</div><div class='add'>+            *sa_family = AF_UNSPEC;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_inet_client_get_remote_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                    struct sockaddr *sockaddr,</div><div class='del'>-                                    socklen_t *sockaddr_len)</div><div class='add'>+af_inet_client_get_remote_sockaddr(rpc_transport_t *this,</div><div class='add'>+                                   struct sockaddr *sockaddr,</div><div class='add'>+                                   socklen_t *sockaddr_len)</div><div class='ctx'> {</div><div class='del'>-        dict_t *options = this-&gt;options;</div><div class='del'>-        data_t *remote_host_data = NULL;</div><div class='del'>-        data_t *remote_port_data = NULL;</div><div class='del'>-        char *remote_host = NULL;</div><div class='del'>-        uint16_t remote_port = 0;</div><div class='del'>-        struct addrinfo *addr_info = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        remote_host_data = dict_get (options, "remote-host");</div><div class='del'>-        if (remote_host_data == NULL)</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "option remote-host missing in volume %s", this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        remote_host = data_to_str (remote_host_data);</div><div class='del'>-        if (remote_host == NULL)</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "option remote-host has data NULL in volume %s", this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        remote_port_data = dict_get (options, "remote-port");</div><div class='del'>-        if (remote_port_data == NULL)</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "option remote-port missing in volume %s. Defaulting to %d",</div><div class='del'>-                        this-&gt;name, GF_DEFAULT_SOCKET_LISTEN_PORT);</div><div class='del'>-</div><div class='del'>-                remote_port = GF_DEFAULT_SOCKET_LISTEN_PORT;</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-                remote_port = data_to_uint16 (remote_port_data);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (remote_port == (uint16_t)-1)</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "option remote-port has invalid port in volume %s",</div><div class='del'>-                        this-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: gf_resolve is a blocking call. kick in some</div><div class='del'>-           non blocking dns techniques */</div><div class='del'>-        ret = gf_resolve_ip6 (remote_host, remote_port,</div><div class='del'>-                              sockaddr-&gt;sa_family, &amp;this-&gt;dnscache, &amp;addr_info);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "DNS resolution failed on host %s", remote_host);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (sockaddr, addr_info-&gt;ai_addr, addr_info-&gt;ai_addrlen);</div><div class='del'>-        *sockaddr_len = addr_info-&gt;ai_addrlen;</div><div class='add'>+    dict_t *options = this-&gt;options;</div><div class='add'>+    data_t *remote_host_data = NULL;</div><div class='add'>+    data_t *remote_port_data = NULL;</div><div class='add'>+    char *remote_host = NULL;</div><div class='add'>+    uint16_t remote_port = 0;</div><div class='add'>+    struct addrinfo *addr_info = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    remote_host_data = dict_get(options, "remote-host");</div><div class='add'>+    if (remote_host_data == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "option remote-host missing in volume %s", this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    remote_host = data_to_str(remote_host_data);</div><div class='add'>+    if (remote_host == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "option remote-host has data NULL in volume %s", this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    remote_port_data = dict_get(options, "remote-port");</div><div class='add'>+    if (remote_port_data == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "option remote-port missing in volume %s. Defaulting to %d",</div><div class='add'>+               this-&gt;name, GF_DEFAULT_SOCKET_LISTEN_PORT);</div><div class='add'>+</div><div class='add'>+        remote_port = GF_DEFAULT_SOCKET_LISTEN_PORT;</div><div class='add'>+    } else {</div><div class='add'>+        remote_port = data_to_uint16(remote_port_data);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (remote_port == (uint16_t)-1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "option remote-port has invalid port in volume %s", this-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: gf_resolve is a blocking call. kick in some</div><div class='add'>+       non blocking dns techniques */</div><div class='add'>+    ret = gf_resolve_ip6(remote_host, remote_port, sockaddr-&gt;sa_family,</div><div class='add'>+                         &amp;this-&gt;dnscache, &amp;addr_info);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "DNS resolution failed on host %s",</div><div class='add'>+               remote_host);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(sockaddr, addr_info-&gt;ai_addr, addr_info-&gt;ai_addrlen);</div><div class='add'>+    *sockaddr_len = addr_info-&gt;ai_addrlen;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_unix_client_get_remote_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                    struct sockaddr *sockaddr,</div><div class='del'>-                                    socklen_t *sockaddr_len)</div><div class='add'>+af_unix_client_get_remote_sockaddr(rpc_transport_t *this,</div><div class='add'>+                                   struct sockaddr *sockaddr,</div><div class='add'>+                                   socklen_t *sockaddr_len)</div><div class='ctx'> {</div><div class='del'>-        struct sockaddr_un *sockaddr_un = NULL;</div><div class='del'>-        char *connect_path = NULL;</div><div class='del'>-        data_t *connect_path_data = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        connect_path_data = dict_get (this-&gt;options,</div><div class='del'>-                                      "transport.socket.connect-path");</div><div class='del'>-        if (!connect_path_data) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "option transport.unix.connect-path not specified for "</div><div class='del'>-                        "address-family unix");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        connect_path = data_to_str (connect_path_data);</div><div class='del'>-        if (!connect_path) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "transport.unix.connect-path is null-string");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((strlen (connect_path) + 1)  &gt; UNIX_PATH_MAX) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "connect-path value length %"GF_PRI_SIZET" &gt; %d octets",</div><div class='del'>-                        strlen (connect_path), UNIX_PATH_MAX);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                "using connect-path %s", connect_path);</div><div class='del'>-        sockaddr_un = (struct sockaddr_un *)sockaddr;</div><div class='del'>-        strcpy (sockaddr_un-&gt;sun_path, connect_path);</div><div class='del'>-        *sockaddr_len = sizeof (struct sockaddr_un);</div><div class='add'>+    struct sockaddr_un *sockaddr_un = NULL;</div><div class='add'>+    char *connect_path = NULL;</div><div class='add'>+    data_t *connect_path_data = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    connect_path_data = dict_get(this-&gt;options,</div><div class='add'>+                                 "transport.socket.connect-path");</div><div class='add'>+    if (!connect_path_data) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "option transport.unix.connect-path not specified for "</div><div class='add'>+               "address-family unix");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    connect_path = data_to_str(connect_path_data);</div><div class='add'>+    if (!connect_path) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "transport.unix.connect-path is null-string");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((strlen(connect_path) + 1) &gt; UNIX_PATH_MAX) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "connect-path value length %" GF_PRI_SIZET " &gt; %d octets",</div><div class='add'>+               strlen(connect_path), UNIX_PATH_MAX);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_TRACE, "using connect-path %s", connect_path);</div><div class='add'>+    sockaddr_un = (struct sockaddr_un *)sockaddr;</div><div class='add'>+    strcpy(sockaddr_un-&gt;sun_path, connect_path);</div><div class='add'>+    *sockaddr_len = sizeof(struct sockaddr_un);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_unix_server_get_local_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                   struct sockaddr *addr,</div><div class='del'>-                                   socklen_t *addr_len)</div><div class='add'>+af_unix_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,</div><div class='add'>+                                  socklen_t *addr_len)</div><div class='ctx'> {</div><div class='del'>-        data_t *listen_path_data = NULL;</div><div class='del'>-        char *listen_path = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        listen_path_data = dict_get (this-&gt;options,</div><div class='del'>-                                     "transport.socket.listen-path");</div><div class='del'>-        if (!listen_path_data) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "missing option transport.socket.listen-path");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data_t *listen_path_data = NULL;</div><div class='add'>+    char *listen_path = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;</div><div class='add'>+</div><div class='add'>+    listen_path_data = dict_get(this-&gt;options, "transport.socket.listen-path");</div><div class='add'>+    if (!listen_path_data) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "missing option transport.socket.listen-path");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        listen_path = data_to_str (listen_path_data);</div><div class='add'>+    listen_path = data_to_str(listen_path_data);</div><div class='ctx'> </div><div class='ctx'> #ifndef UNIX_PATH_MAX</div><div class='ctx'> #define UNIX_PATH_MAX 108</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if ((strlen (listen_path) + 1)  &gt; UNIX_PATH_MAX) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "option transport.unix.listen-path has value length "</div><div class='del'>-                        "%"GF_PRI_SIZET" &gt; %d",</div><div class='del'>-                        strlen (listen_path), UNIX_PATH_MAX);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if ((strlen(listen_path) + 1) &gt; UNIX_PATH_MAX) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "option transport.unix.listen-path has value length "</div><div class='add'>+               "%" GF_PRI_SIZET " &gt; %d",</div><div class='add'>+               strlen(listen_path), UNIX_PATH_MAX);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sunaddr-&gt;sun_family = AF_UNIX;</div><div class='del'>-        strcpy (sunaddr-&gt;sun_path, listen_path);</div><div class='del'>-        *addr_len = sizeof (struct sockaddr_un);</div><div class='add'>+    sunaddr-&gt;sun_family = AF_UNIX;</div><div class='add'>+    strcpy(sunaddr-&gt;sun_path, listen_path);</div><div class='add'>+    *addr_len = sizeof(struct sockaddr_un);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-af_inet_server_get_local_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                   struct sockaddr *addr,</div><div class='del'>-                                   socklen_t *addr_len)</div><div class='add'>+af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,</div><div class='add'>+                                  socklen_t *addr_len)</div><div class='ctx'> {</div><div class='del'>-        struct addrinfo hints, *res = 0, *rp = NULL;</div><div class='del'>-        data_t *listen_port_data = NULL, *listen_host_data = NULL;</div><div class='del'>-        uint16_t listen_port = -1;</div><div class='del'>-        char service[NI_MAXSERV], *listen_host = NULL;</div><div class='del'>-        dict_t *options = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        options = this-&gt;options;</div><div class='del'>-</div><div class='del'>-        listen_port_data = dict_get (options, "transport.socket.listen-port");</div><div class='del'>-        listen_host_data = dict_get (options, "transport.socket.bind-address");</div><div class='del'>-</div><div class='del'>-        if (listen_port_data)</div><div class='del'>-        {</div><div class='del'>-                listen_port = data_to_uint16 (listen_port_data);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (listen_port == (uint16_t) -1)</div><div class='del'>-                listen_port = GF_DEFAULT_SOCKET_LISTEN_PORT;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (listen_host_data)</div><div class='del'>-        {</div><div class='del'>-                listen_host = data_to_str (listen_host_data);</div><div class='del'>-        } else {</div><div class='del'>-                if (addr-&gt;sa_family == AF_INET6) {</div><div class='del'>-                        struct sockaddr_in6 *in = (struct sockaddr_in6 *) addr;</div><div class='del'>-                        in-&gt;sin6_addr = in6addr_any;</div><div class='del'>-                        in-&gt;sin6_port = htons(listen_port);</div><div class='del'>-                        *addr_len = sizeof(struct sockaddr_in6);</div><div class='del'>-                        goto out;</div><div class='del'>-                } else if (addr-&gt;sa_family == AF_INET) {</div><div class='del'>-                        struct sockaddr_in *in = (struct sockaddr_in *) addr;</div><div class='del'>-                        in-&gt;sin_addr.s_addr = htonl(INADDR_ANY);</div><div class='del'>-                        in-&gt;sin_port = htons(listen_port);</div><div class='del'>-                        *addr_len = sizeof(struct sockaddr_in);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sprintf (service, "%d", listen_port);</div><div class='del'>-</div><div class='del'>-        memset (&amp;hints, 0, sizeof (hints));</div><div class='del'>-        hints.ai_family = addr-&gt;sa_family;</div><div class='del'>-        hints.ai_socktype = SOCK_STREAM;</div><div class='del'>-        hints.ai_flags    = AI_PASSIVE;</div><div class='del'>-</div><div class='del'>-        ret = getaddrinfo(listen_host, service, &amp;hints, &amp;res);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "getaddrinfo failed for host %s, service %s (%s)",</div><div class='del'>-                        listen_host, service, gai_strerror (ret));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* IPV6 server can handle both ipv4 and ipv6 clients */</div><div class='del'>-        for (rp = res; rp != NULL; rp = rp-&gt;ai_next) {</div><div class='del'>-                if (rp-&gt;ai_addr == NULL)</div><div class='del'>-                        continue;</div><div class='del'>-                if (rp-&gt;ai_family == AF_INET6) {</div><div class='del'>-                        memcpy (addr, rp-&gt;ai_addr, rp-&gt;ai_addrlen);</div><div class='del'>-                        *addr_len = rp-&gt;ai_addrlen;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(*addr_len)) {</div><div class='del'>-                memcpy (addr, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='del'>-                *addr_len = res-&gt;ai_addrlen;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        freeaddrinfo (res);</div><div class='add'>+    struct addrinfo hints, *res = 0, *rp = NULL;</div><div class='add'>+    data_t *listen_port_data = NULL, *listen_host_data = NULL;</div><div class='add'>+    uint16_t listen_port = -1;</div><div class='add'>+    char service[NI_MAXSERV], *listen_host = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    options = this-&gt;options;</div><div class='add'>+</div><div class='add'>+    listen_port_data = dict_get(options, "transport.socket.listen-port");</div><div class='add'>+    listen_host_data = dict_get(options, "transport.socket.bind-address");</div><div class='add'>+</div><div class='add'>+    if (listen_port_data) {</div><div class='add'>+        listen_port = data_to_uint16(listen_port_data);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (listen_port == (uint16_t)-1)</div><div class='add'>+        listen_port = GF_DEFAULT_SOCKET_LISTEN_PORT;</div><div class='add'>+</div><div class='add'>+    if (listen_host_data) {</div><div class='add'>+        listen_host = data_to_str(listen_host_data);</div><div class='add'>+    } else {</div><div class='add'>+        if (addr-&gt;sa_family == AF_INET6) {</div><div class='add'>+            struct sockaddr_in6 *in = (struct sockaddr_in6 *)addr;</div><div class='add'>+            in-&gt;sin6_addr = in6addr_any;</div><div class='add'>+            in-&gt;sin6_port = htons(listen_port);</div><div class='add'>+            *addr_len = sizeof(struct sockaddr_in6);</div><div class='add'>+            goto out;</div><div class='add'>+        } else if (addr-&gt;sa_family == AF_INET) {</div><div class='add'>+            struct sockaddr_in *in = (struct sockaddr_in *)addr;</div><div class='add'>+            in-&gt;sin_addr.s_addr = htonl(INADDR_ANY);</div><div class='add'>+            in-&gt;sin_port = htons(listen_port);</div><div class='add'>+            *addr_len = sizeof(struct sockaddr_in);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(service, "%d", listen_port);</div><div class='add'>+</div><div class='add'>+    memset(&amp;hints, 0, sizeof(hints));</div><div class='add'>+    hints.ai_family = addr-&gt;sa_family;</div><div class='add'>+    hints.ai_socktype = SOCK_STREAM;</div><div class='add'>+    hints.ai_flags = AI_PASSIVE;</div><div class='add'>+</div><div class='add'>+    ret = getaddrinfo(listen_host, service, &amp;hints, &amp;res);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "getaddrinfo failed for host %s, service %s (%s)", listen_host,</div><div class='add'>+               service, gai_strerror(ret));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* IPV6 server can handle both ipv4 and ipv6 clients */</div><div class='add'>+    for (rp = res; rp != NULL; rp = rp-&gt;ai_next) {</div><div class='add'>+        if (rp-&gt;ai_addr == NULL)</div><div class='add'>+            continue;</div><div class='add'>+        if (rp-&gt;ai_family == AF_INET6) {</div><div class='add'>+            memcpy(addr, rp-&gt;ai_addr, rp-&gt;ai_addrlen);</div><div class='add'>+            *addr_len = rp-&gt;ai_addrlen;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(*addr_len)) {</div><div class='add'>+        memcpy(addr, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='add'>+        *addr_len = res-&gt;ai_addrlen;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    freeaddrinfo(res);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-client_bind (rpc_transport_t *this,</div><div class='del'>-             struct sockaddr *sockaddr,</div><div class='del'>-             socklen_t *sockaddr_len,</div><div class='del'>-             int sock)</div><div class='add'>+client_bind(rpc_transport_t *this, struct sockaddr *sockaddr,</div><div class='add'>+            socklen_t *sockaddr_len, int sock)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        *sockaddr_len = sizeof (struct sockaddr_in6);</div><div class='del'>-        switch (sockaddr-&gt;sa_family)</div><div class='del'>-        {</div><div class='add'>+    *sockaddr_len = sizeof(struct sockaddr_in6);</div><div class='add'>+    switch (sockaddr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='ctx'>         case AF_INET:</div><div class='del'>-                *sockaddr_len = sizeof (struct sockaddr_in);</div><div class='add'>+            *sockaddr_len = sizeof(struct sockaddr_in);</div><div class='ctx'>         /* Fall through */</div><div class='ctx'>         case AF_INET6:</div><div class='del'>-                if (!this-&gt;bind_insecure) {</div><div class='del'>-                        ret = af_inet_bind_to_port_lt_ceiling (sock, sockaddr,</div><div class='del'>-                                                               *sockaddr_len,</div><div class='del'>-                                                               GF_CLIENT_PORT_CEILING);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "cannot bind inet socket (%d) "</div><div class='del'>-                                        "to port less than %d (%s)",</div><div class='del'>-                                        sock, GF_CLIENT_PORT_CEILING,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = af_inet_bind_to_port_lt_ceiling (sock, sockaddr,</div><div class='del'>-                                                               *sockaddr_len,</div><div class='del'>-                                                               GF_IANA_PRIV_PORTS_START);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "failed while binding to less than "</div><div class='del'>-                                        "%d (%s)", GF_IANA_PRIV_PORTS_START,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        }</div><div class='add'>+            if (!this-&gt;bind_insecure) {</div><div class='add'>+                ret = af_inet_bind_to_port_lt_ceiling(</div><div class='add'>+                    sock, sockaddr, *sockaddr_len, GF_CLIENT_PORT_CEILING);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                           "cannot bind inet socket (%d) "</div><div class='add'>+                           "to port less than %d (%s)",</div><div class='add'>+                           sock, GF_CLIENT_PORT_CEILING, strerror(errno));</div><div class='add'>+                    ret = 0;</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                ret = af_inet_bind_to_port_lt_ceiling(</div><div class='add'>+                    sock, sockaddr, *sockaddr_len, GF_IANA_PRIV_PORTS_START);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                           "failed while binding to less than "</div><div class='add'>+                           "%d (%s)",</div><div class='add'>+                           GF_IANA_PRIV_PORTS_START, strerror(errno));</div><div class='add'>+                    ret = 0;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                *sockaddr_len = sizeof (struct sockaddr_un);</div><div class='del'>-                ret = af_unix_client_bind (this, (struct sockaddr *)sockaddr,</div><div class='del'>-                                           *sockaddr_len, sock);</div><div class='del'>-                break;</div><div class='add'>+            *sockaddr_len = sizeof(struct sockaddr_un);</div><div class='add'>+            ret = af_unix_client_bind(this, (struct sockaddr *)sockaddr,</div><div class='add'>+                                      *sockaddr_len, sock);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "unknown address family %d", sockaddr-&gt;sa_family);</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "unknown address family %d",</div><div class='add'>+                   sockaddr-&gt;sa_family);</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-socket_client_get_remote_sockaddr (rpc_transport_t *this,</div><div class='del'>-                                   struct sockaddr *sockaddr,</div><div class='del'>-                                   socklen_t *sockaddr_len,</div><div class='del'>-                                   sa_family_t *sa_family)</div><div class='add'>+socket_client_get_remote_sockaddr(rpc_transport_t *this,</div><div class='add'>+                                  struct sockaddr *sockaddr,</div><div class='add'>+                                  socklen_t *sockaddr_len,</div><div class='add'>+                                  sa_family_t *sa_family)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sockaddr, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sockaddr_len, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sa_family, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sockaddr, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sockaddr_len, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sa_family, err);</div><div class='ctx'> </div><div class='del'>-        ret = client_fill_address_family (this, &amp;sockaddr-&gt;sa_family);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = client_fill_address_family(this, &amp;sockaddr-&gt;sa_family);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *sa_family = sockaddr-&gt;sa_family;</div><div class='add'>+    *sa_family = sockaddr-&gt;sa_family;</div><div class='ctx'> </div><div class='del'>-        switch (sockaddr-&gt;sa_family)</div><div class='del'>-        {</div><div class='add'>+    switch (sockaddr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='del'>-                sockaddr-&gt;sa_family = AF_INET;</div><div class='add'>+            sockaddr-&gt;sa_family = AF_INET;</div><div class='ctx'>         /* Fall through */</div><div class='ctx'>         case AF_INET:</div><div class='ctx'>         case AF_INET6:</div><div class='ctx'>         case AF_UNSPEC:</div><div class='del'>-                ret = af_inet_client_get_remote_sockaddr (this, sockaddr,</div><div class='del'>-                                                          sockaddr_len);</div><div class='del'>-                break;</div><div class='add'>+            ret = af_inet_client_get_remote_sockaddr(this, sockaddr,</div><div class='add'>+                                                     sockaddr_len);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                ret = af_unix_client_get_remote_sockaddr (this, sockaddr,</div><div class='del'>-                                                          sockaddr_len);</div><div class='del'>-                break;</div><div class='add'>+            ret = af_unix_client_get_remote_sockaddr(this, sockaddr,</div><div class='add'>+                                                     sockaddr_len);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "unknown address-family %d", sockaddr-&gt;sa_family);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "unknown address-family %d",</div><div class='add'>+                   sockaddr-&gt;sa_family);</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (*sa_family == AF_UNSPEC) {</div><div class='del'>-                *sa_family = sockaddr-&gt;sa_family;</div><div class='del'>-        }</div><div class='add'>+    if (*sa_family == AF_UNSPEC) {</div><div class='add'>+        *sa_family = sockaddr-&gt;sa_family;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-server_fill_address_family (rpc_transport_t *this, sa_family_t *sa_family)</div><div class='add'>+server_fill_address_family(rpc_transport_t *this, sa_family_t *sa_family)</div><div class='ctx'> {</div><div class='del'>-        data_t  *address_family_data = NULL;</div><div class='del'>-        int32_t  ret                 = -1;</div><div class='add'>+    data_t *address_family_data = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='ctx'> #ifdef IPV6_DEFAULT</div><div class='del'>-        char *addr_family            = "inet6";</div><div class='del'>-        sa_family_t default_family   = AF_INET6;</div><div class='add'>+    char *addr_family = "inet6";</div><div class='add'>+    sa_family_t default_family = AF_INET6;</div><div class='ctx'> #else</div><div class='del'>-        char *addr_family            = "inet";</div><div class='del'>-        sa_family_t default_family   = AF_INET;</div><div class='add'>+    char *addr_family = "inet";</div><div class='add'>+    sa_family_t default_family = AF_INET;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sa_family, out);</div><div class='del'>-</div><div class='del'>-        address_family_data = dict_get (this-&gt;options,</div><div class='del'>-                                        "transport.address-family");</div><div class='del'>-        if (address_family_data) {</div><div class='del'>-                char *address_family = NULL;</div><div class='del'>-                address_family = data_to_str (address_family_data);</div><div class='del'>-</div><div class='del'>-                if (!strcasecmp (address_family, "inet")) {</div><div class='del'>-                        *sa_family = AF_INET;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet6")) {</div><div class='del'>-                        *sa_family = AF_INET6;</div><div class='del'>-                } else if (!strcasecmp (address_family, "inet-sdp")) {</div><div class='del'>-                        *sa_family = AF_INET_SDP;</div><div class='del'>-                } else if (!strcasecmp (address_family, "unix")) {</div><div class='del'>-                        *sa_family = AF_UNIX;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "unknown address family (%s) specified", address_family);</div><div class='del'>-                        *sa_family = AF_UNSPEC;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sa_family, out);</div><div class='add'>+</div><div class='add'>+    address_family_data = dict_get(this-&gt;options, "transport.address-family");</div><div class='add'>+    if (address_family_data) {</div><div class='add'>+        char *address_family = NULL;</div><div class='add'>+        address_family = data_to_str(address_family_data);</div><div class='add'>+</div><div class='add'>+        if (!strcasecmp(address_family, "inet")) {</div><div class='add'>+            *sa_family = AF_INET;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet6")) {</div><div class='add'>+            *sa_family = AF_INET6;</div><div class='add'>+        } else if (!strcasecmp(address_family, "inet-sdp")) {</div><div class='add'>+            *sa_family = AF_INET_SDP;</div><div class='add'>+        } else if (!strcasecmp(address_family, "unix")) {</div><div class='add'>+            *sa_family = AF_UNIX;</div><div class='ctx'>         } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "option address-family not specified, "</div><div class='del'>-                        "defaulting to %s", addr_family);</div><div class='del'>-                *sa_family = default_family;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "unknown address family (%s) specified", address_family);</div><div class='add'>+            *sa_family = AF_UNSPEC;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "option address-family not specified, "</div><div class='add'>+               "defaulting to %s",</div><div class='add'>+               addr_family);</div><div class='add'>+        *sa_family = default_family;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-socket_server_get_local_sockaddr (rpc_transport_t *this, struct sockaddr *addr,</div><div class='del'>-                                  socklen_t *addr_len, sa_family_t *sa_family)</div><div class='add'>+socket_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,</div><div class='add'>+                                 socklen_t *addr_len, sa_family_t *sa_family)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sa_family, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", addr, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", addr_len, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sa_family, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", addr, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", addr_len, err);</div><div class='ctx'> </div><div class='del'>-        ret = server_fill_address_family (this, &amp;addr-&gt;sa_family);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = server_fill_address_family(this, &amp;addr-&gt;sa_family);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *sa_family = addr-&gt;sa_family;</div><div class='add'>+    *sa_family = addr-&gt;sa_family;</div><div class='ctx'> </div><div class='del'>-        switch (addr-&gt;sa_family)</div><div class='del'>-        {</div><div class='add'>+    switch (addr-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='del'>-                addr-&gt;sa_family = AF_INET;</div><div class='del'>-                /* Fall through */</div><div class='add'>+            addr-&gt;sa_family = AF_INET;</div><div class='add'>+            /* Fall through */</div><div class='ctx'>         case AF_INET:</div><div class='ctx'>         case AF_INET6:</div><div class='ctx'>         case AF_UNSPEC:</div><div class='del'>-                ret = af_inet_server_get_local_sockaddr (this, addr, addr_len);</div><div class='del'>-                break;</div><div class='add'>+            ret = af_inet_server_get_local_sockaddr(this, addr, addr_len);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AF_UNIX:</div><div class='del'>-                ret = af_unix_server_get_local_sockaddr (this, addr, addr_len);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = af_unix_server_get_local_sockaddr(this, addr, addr_len);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (*sa_family == AF_UNSPEC) {</div><div class='del'>-                *sa_family = addr-&gt;sa_family;</div><div class='del'>-        }</div><div class='add'>+    if (*sa_family == AF_UNSPEC) {</div><div class='add'>+        *sa_family = addr-&gt;sa_family;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-fill_inet6_inet_identifiers (rpc_transport_t *this, struct sockaddr_storage *addr,</div><div class='del'>-                             int32_t addr_len, char *identifier)</div><div class='add'>+fill_inet6_inet_identifiers(rpc_transport_t *this,</div><div class='add'>+                            struct sockaddr_storage *addr, int32_t addr_len,</div><div class='add'>+                            char *identifier)</div><div class='ctx'> {</div><div class='del'>-        union gf_sock_union sock_union;</div><div class='del'>-</div><div class='del'>-        char    service[NI_MAXSERV] = {0,};</div><div class='del'>-        char    host[NI_MAXHOST]    = {0,};</div><div class='del'>-        int32_t ret                 = 0;</div><div class='del'>-        int32_t tmpaddr_len         = 0;</div><div class='del'>-        int32_t one_to_four         = 0;</div><div class='del'>-        int32_t four_to_eight       = 0;</div><div class='del'>-        int32_t twelve_to_sixteen   = 0;</div><div class='del'>-        int16_t eight_to_ten        = 0;</div><div class='del'>-        int16_t ten_to_twelve       = 0;</div><div class='del'>-</div><div class='del'>-        memset (&amp;sock_union, 0, sizeof (sock_union));</div><div class='del'>-        sock_union.storage = *addr;</div><div class='del'>-        tmpaddr_len = addr_len;</div><div class='del'>-</div><div class='del'>-        if (sock_union.sa.sa_family == AF_INET6) {</div><div class='del'>-                one_to_four = sock_union.sin6.sin6_addr.s6_addr32[0];</div><div class='del'>-                four_to_eight = sock_union.sin6.sin6_addr.s6_addr32[1];</div><div class='add'>+    union gf_sock_union sock_union;</div><div class='add'>+</div><div class='add'>+    char service[NI_MAXSERV] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char host[NI_MAXHOST] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t tmpaddr_len = 0;</div><div class='add'>+    int32_t one_to_four = 0;</div><div class='add'>+    int32_t four_to_eight = 0;</div><div class='add'>+    int32_t twelve_to_sixteen = 0;</div><div class='add'>+    int16_t eight_to_ten = 0;</div><div class='add'>+    int16_t ten_to_twelve = 0;</div><div class='add'>+</div><div class='add'>+    memset(&amp;sock_union, 0, sizeof(sock_union));</div><div class='add'>+    sock_union.storage = *addr;</div><div class='add'>+    tmpaddr_len = addr_len;</div><div class='add'>+</div><div class='add'>+    if (sock_union.sa.sa_family == AF_INET6) {</div><div class='add'>+        one_to_four = sock_union.sin6.sin6_addr.s6_addr32[0];</div><div class='add'>+        four_to_eight = sock_union.sin6.sin6_addr.s6_addr32[1];</div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-                eight_to_ten = S6_ADDR16(sock_union.sin6.sin6_addr)[4];</div><div class='add'>+        eight_to_ten = S6_ADDR16(sock_union.sin6.sin6_addr)[4];</div><div class='ctx'> #else</div><div class='del'>-                eight_to_ten = sock_union.sin6.sin6_addr.s6_addr16[4];</div><div class='add'>+        eight_to_ten = sock_union.sin6.sin6_addr.s6_addr16[4];</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef GF_SOLARIS_HOST_OS</div><div class='del'>-                ten_to_twelve = S6_ADDR16(sock_union.sin6.sin6_addr)[5];</div><div class='add'>+        ten_to_twelve = S6_ADDR16(sock_union.sin6.sin6_addr)[5];</div><div class='ctx'> #else</div><div class='del'>-                ten_to_twelve = sock_union.sin6.sin6_addr.s6_addr16[5];</div><div class='add'>+        ten_to_twelve = sock_union.sin6.sin6_addr.s6_addr16[5];</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-                twelve_to_sixteen = sock_union.sin6.sin6_addr.s6_addr32[3];</div><div class='del'>-</div><div class='del'>-                /* ipv4 mapped ipv6 address has</div><div class='del'>-                   bits 0-80: 0</div><div class='del'>-                   bits 80-96: 0xffff</div><div class='del'>-                   bits 96-128: ipv4 address</div><div class='del'>-                */</div><div class='del'>-</div><div class='del'>-                if (one_to_four == 0 &amp;&amp;</div><div class='del'>-                    four_to_eight == 0 &amp;&amp;</div><div class='del'>-                    eight_to_ten == 0 &amp;&amp;</div><div class='del'>-                    ten_to_twelve == -1) {</div><div class='del'>-                        struct sockaddr_in *in_ptr = &amp;sock_union.sin;</div><div class='del'>-                        memset (&amp;sock_union, 0, sizeof (sock_union));</div><div class='del'>-</div><div class='del'>-                        in_ptr-&gt;sin_family = AF_INET;</div><div class='del'>-                        in_ptr-&gt;sin_port = ((struct sockaddr_in6 *)addr)-&gt;sin6_port;</div><div class='del'>-                        in_ptr-&gt;sin_addr.s_addr = twelve_to_sixteen;</div><div class='del'>-                        tmpaddr_len = sizeof (*in_ptr);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        twelve_to_sixteen = sock_union.sin6.sin6_addr.s6_addr32[3];</div><div class='add'>+</div><div class='add'>+        /* ipv4 mapped ipv6 address has</div><div class='add'>+           bits 0-80: 0</div><div class='add'>+           bits 80-96: 0xffff</div><div class='add'>+           bits 96-128: ipv4 address</div><div class='add'>+        */</div><div class='add'>+</div><div class='add'>+        if (one_to_four == 0 &amp;&amp; four_to_eight == 0 &amp;&amp; eight_to_ten == 0 &amp;&amp;</div><div class='add'>+            ten_to_twelve == -1) {</div><div class='add'>+            struct sockaddr_in *in_ptr = &amp;sock_union.sin;</div><div class='add'>+            memset(&amp;sock_union, 0, sizeof(sock_union));</div><div class='ctx'> </div><div class='del'>-        ret = getnameinfo (&amp;sock_union.sa,</div><div class='del'>-                           tmpaddr_len,</div><div class='del'>-                           host, sizeof (host),</div><div class='del'>-                           service, sizeof (service),</div><div class='del'>-                           NI_NUMERICHOST | NI_NUMERICSERV);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "getnameinfo failed (%s)", gai_strerror (ret));</div><div class='add'>+            in_ptr-&gt;sin_family = AF_INET;</div><div class='add'>+            in_ptr-&gt;sin_port = ((struct sockaddr_in6 *)addr)-&gt;sin6_port;</div><div class='add'>+            in_ptr-&gt;sin_addr.s_addr = twelve_to_sixteen;</div><div class='add'>+            tmpaddr_len = sizeof(*in_ptr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sprintf (identifier, "%s:%s", host, service);</div><div class='add'>+    ret = getnameinfo(&amp;sock_union.sa, tmpaddr_len, host, sizeof(host), service,</div><div class='add'>+                      sizeof(service), NI_NUMERICHOST | NI_NUMERICSERV);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "getnameinfo failed (%s)",</div><div class='add'>+               gai_strerror(ret));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    sprintf(identifier, "%s:%s", host, service);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-get_transport_identifiers (rpc_transport_t *this)</div><div class='add'>+get_transport_identifiers(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        char is_inet_sdp = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char is_inet_sdp = 0;</div><div class='ctx'> </div><div class='del'>-        switch (((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family)</div><div class='del'>-        {</div><div class='add'>+    switch (((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family) {</div><div class='ctx'>         case AF_INET_SDP:</div><div class='del'>-                is_inet_sdp = 1;</div><div class='del'>-                ((struct sockaddr *) &amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family = ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family = AF_INET;</div><div class='add'>+            is_inet_sdp = 1;</div><div class='add'>+            ((struct sockaddr *)&amp;this-&gt;peerinfo.sockaddr)</div><div class='add'>+                -&gt;sa_family = ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)</div><div class='add'>+                                  -&gt;sa_family = AF_INET;</div><div class='ctx'>         /* Fall through */</div><div class='ctx'>         case AF_INET:</div><div class='del'>-        case AF_INET6:</div><div class='del'>-        {</div><div class='del'>-                ret = fill_inet6_inet_identifiers (this,</div><div class='del'>-                                                   &amp;this-&gt;myinfo.sockaddr,</div><div class='del'>-                                                   this-&gt;myinfo.sockaddr_len,</div><div class='del'>-                                                   this-&gt;myinfo.identifier);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "cannot fill inet/inet6 identifier for server");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = fill_inet6_inet_identifiers (this,</div><div class='del'>-                                                   &amp;this-&gt;peerinfo.sockaddr,</div><div class='del'>-                                                   this-&gt;peerinfo.sockaddr_len,</div><div class='del'>-                                                   this-&gt;peerinfo.identifier);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "cannot fill inet/inet6 identifier for client");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        case AF_INET6: {</div><div class='add'>+            ret = fill_inet6_inet_identifiers(this, &amp;this-&gt;myinfo.sockaddr,</div><div class='add'>+                                              this-&gt;myinfo.sockaddr_len,</div><div class='add'>+                                              this-&gt;myinfo.identifier);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "cannot fill inet/inet6 identifier for server");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = fill_inet6_inet_identifiers(this, &amp;this-&gt;peerinfo.sockaddr,</div><div class='add'>+                                              this-&gt;peerinfo.sockaddr_len,</div><div class='add'>+                                              this-&gt;peerinfo.identifier);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "cannot fill inet/inet6 identifier for client");</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (is_inet_sdp) {</div><div class='del'>-                        ((struct sockaddr *) &amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family = ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family = AF_INET_SDP;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            if (is_inet_sdp) {</div><div class='add'>+                ((struct sockaddr *)&amp;this-&gt;peerinfo.sockaddr)</div><div class='add'>+                    -&gt;sa_family = ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)</div><div class='add'>+                                      -&gt;sa_family = AF_INET_SDP;</div><div class='add'>+            }</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='del'>-        case AF_UNIX:</div><div class='del'>-        {</div><div class='del'>-                struct sockaddr_un *sunaddr = NULL;</div><div class='add'>+        case AF_UNIX: {</div><div class='add'>+            struct sockaddr_un *sunaddr = NULL;</div><div class='ctx'> </div><div class='del'>-                sunaddr = (struct sockaddr_un *) &amp;this-&gt;myinfo.sockaddr;</div><div class='del'>-                strcpy (this-&gt;myinfo.identifier, sunaddr-&gt;sun_path);</div><div class='add'>+            sunaddr = (struct sockaddr_un *)&amp;this-&gt;myinfo.sockaddr;</div><div class='add'>+            strcpy(this-&gt;myinfo.identifier, sunaddr-&gt;sun_path);</div><div class='ctx'> </div><div class='del'>-                sunaddr = (struct sockaddr_un *) &amp;this-&gt;peerinfo.sockaddr;</div><div class='del'>-                strcpy (this-&gt;peerinfo.identifier, sunaddr-&gt;sun_path);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+            sunaddr = (struct sockaddr_un *)&amp;this-&gt;peerinfo.sockaddr;</div><div class='add'>+            strcpy(this-&gt;peerinfo.identifier, sunaddr-&gt;sun_path);</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "unknown address family (%d)",</div><div class='del'>-                        ((struct sockaddr *) &amp;this-&gt;myinfo.sockaddr)-&gt;sa_family);</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "unknown address family (%d)",</div><div class='add'>+                   ((struct sockaddr *)&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family);</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c<br/>index 2c222ce8321..b3f8b7fc580 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/socket/src/socket.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/rpc-transport/socket/src/socket.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/rpc-transport/socket/src/socket.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/rpc-transport/socket/src/socket.c</a></div><div class='hunk'>@@ -42,591 +42,583 @@</div><div class='ctx'> #define GF_LOG_ERRNO(errno) ((errno == ENOTCONN) ? GF_LOG_DEBUG : GF_LOG_ERROR)</div><div class='ctx'> #define SA(ptr) ((struct sockaddr *)ptr)</div><div class='ctx'> </div><div class='del'>-#define SSL_ENABLED_OPT     "transport.socket.ssl-enabled"</div><div class='del'>-#define SSL_OWN_CERT_OPT    "transport.socket.ssl-own-cert"</div><div class='add'>+#define SSL_ENABLED_OPT "transport.socket.ssl-enabled"</div><div class='add'>+#define SSL_OWN_CERT_OPT "transport.socket.ssl-own-cert"</div><div class='ctx'> #define SSL_PRIVATE_KEY_OPT "transport.socket.ssl-private-key"</div><div class='del'>-#define SSL_CA_LIST_OPT     "transport.socket.ssl-ca-list"</div><div class='del'>-#define SSL_CERT_DEPTH_OPT  "transport.socket.ssl-cert-depth"</div><div class='add'>+#define SSL_CA_LIST_OPT "transport.socket.ssl-ca-list"</div><div class='add'>+#define SSL_CERT_DEPTH_OPT "transport.socket.ssl-cert-depth"</div><div class='ctx'> #define SSL_CIPHER_LIST_OPT "transport.socket.ssl-cipher-list"</div><div class='del'>-#define SSL_DH_PARAM_OPT    "transport.socket.ssl-dh-param"</div><div class='del'>-#define SSL_EC_CURVE_OPT    "transport.socket.ssl-ec-curve"</div><div class='del'>-#define SSL_CRL_PATH_OPT    "transport.socket.ssl-crl-path"</div><div class='del'>-#define OWN_THREAD_OPT      "transport.socket.own-thread"</div><div class='add'>+#define SSL_DH_PARAM_OPT "transport.socket.ssl-dh-param"</div><div class='add'>+#define SSL_EC_CURVE_OPT "transport.socket.ssl-ec-curve"</div><div class='add'>+#define SSL_CRL_PATH_OPT "transport.socket.ssl-crl-path"</div><div class='add'>+#define OWN_THREAD_OPT "transport.socket.own-thread"</div><div class='ctx'> </div><div class='ctx'> /* TBD: do automake substitutions etc. (ick) to set these. */</div><div class='ctx'> #if !defined(DEFAULT_ETC_SSL)</div><div class='del'>-#  ifdef GF_LINUX_HOST_OS</div><div class='del'>-#    define DEFAULT_ETC_SSL "/etc/ssl"</div><div class='del'>-#  endif</div><div class='del'>-#  ifdef GF_BSD_HOST_OS</div><div class='del'>-#    define DEFAULT_ETC_SSL "/etc/openssl"</div><div class='del'>-#  endif</div><div class='del'>-#  ifdef GF_DARWIN_HOST_OS</div><div class='del'>-#    define DEFAULT_ETC_SSL "/usr/local/etc/openssl"</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(DEFAULT_ETC_SSL)</div><div class='del'>-#    define DEFAULT_ETC_SSL "/etc/ssl"</div><div class='del'>-#  endif</div><div class='add'>+#ifdef GF_LINUX_HOST_OS</div><div class='add'>+#define DEFAULT_ETC_SSL "/etc/ssl"</div><div class='add'>+#endif</div><div class='add'>+#ifdef GF_BSD_HOST_OS</div><div class='add'>+#define DEFAULT_ETC_SSL "/etc/openssl"</div><div class='add'>+#endif</div><div class='add'>+#ifdef GF_DARWIN_HOST_OS</div><div class='add'>+#define DEFAULT_ETC_SSL "/usr/local/etc/openssl"</div><div class='add'>+#endif</div><div class='add'>+#if !defined(DEFAULT_ETC_SSL)</div><div class='add'>+#define DEFAULT_ETC_SSL "/etc/ssl"</div><div class='add'>+#endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if !defined(DEFAULT_CERT_PATH)</div><div class='del'>-#define DEFAULT_CERT_PATH   DEFAULT_ETC_SSL "/glusterfs.pem"</div><div class='add'>+#define DEFAULT_CERT_PATH DEFAULT_ETC_SSL "/glusterfs.pem"</div><div class='ctx'> #endif</div><div class='ctx'> #if !defined(DEFAULT_KEY_PATH)</div><div class='del'>-#define DEFAULT_KEY_PATH    DEFAULT_ETC_SSL "/glusterfs.key"</div><div class='add'>+#define DEFAULT_KEY_PATH DEFAULT_ETC_SSL "/glusterfs.key"</div><div class='ctx'> #endif</div><div class='ctx'> #if !defined(DEFAULT_CA_PATH)</div><div class='del'>-#define DEFAULT_CA_PATH     DEFAULT_ETC_SSL "/glusterfs.ca"</div><div class='add'>+#define DEFAULT_CA_PATH DEFAULT_ETC_SSL "/glusterfs.ca"</div><div class='ctx'> #endif</div><div class='ctx'> #if !defined(DEFAULT_VERIFY_DEPTH)</div><div class='ctx'> #define DEFAULT_VERIFY_DEPTH 1</div><div class='ctx'> #endif</div><div class='ctx'> #define DEFAULT_CIPHER_LIST "EECDH:EDH:HIGH:!3DES:!RC4:!DES:!MD5:!aNULL:!eNULL"</div><div class='del'>-#define DEFAULT_DH_PARAM   DEFAULT_ETC_SSL "/dhparam.pem"</div><div class='del'>-#define DEFAULT_EC_CURVE   "prime256v1"</div><div class='add'>+#define DEFAULT_DH_PARAM DEFAULT_ETC_SSL "/dhparam.pem"</div><div class='add'>+#define DEFAULT_EC_CURVE "prime256v1"</div><div class='ctx'> </div><div class='del'>-#define POLL_MASK_INPUT  (POLLIN | POLLPRI)</div><div class='add'>+#define POLL_MASK_INPUT (POLLIN | POLLPRI)</div><div class='ctx'> #define POLL_MASK_OUTPUT (POLLOUT)</div><div class='del'>-#define POLL_MASK_ERROR  (POLLERR | POLLHUP | POLLNVAL)</div><div class='del'>-</div><div class='del'>-typedef int SSL_unary_func (SSL *);</div><div class='del'>-typedef int SSL_trinary_func (SSL *, void *, int);</div><div class='del'>-static int ssl_setup_connection_params(rpc_transport_t *this);</div><div class='del'>-</div><div class='del'>-#define __socket_proto_reset_pending(priv) do {                         \</div><div class='del'>-                struct gf_sock_incoming_frag *frag;                     \</div><div class='del'>-                frag = &amp;priv-&gt;incoming.frag;                            \</div><div class='del'>-                                                                        \</div><div class='del'>-                memset (&amp;frag-&gt;vector, 0, sizeof (frag-&gt;vector));       \</div><div class='del'>-                frag-&gt;pending_vector = &amp;frag-&gt;vector;                   \</div><div class='del'>-                frag-&gt;pending_vector-&gt;iov_base = frag-&gt;fragcurrent;     \</div><div class='del'>-                priv-&gt;incoming.pending_vector =  frag-&gt;pending_vector;  \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define __socket_proto_update_pending(priv)                             \</div><div class='del'>-        do {                                                            \</div><div class='del'>-                uint32_t remaining;                                     \</div><div class='del'>-                struct gf_sock_incoming_frag *frag;                     \</div><div class='del'>-                frag = &amp;priv-&gt;incoming.frag;                            \</div><div class='del'>-                if (frag-&gt;pending_vector-&gt;iov_len == 0) {               \</div><div class='del'>-                        remaining = (RPC_FRAGSIZE (priv-&gt;incoming.fraghdr) \</div><div class='del'>-                                     - frag-&gt;bytes_read);               \</div><div class='del'>-                                                                        \</div><div class='del'>-                        frag-&gt;pending_vector-&gt;iov_len =                 \</div><div class='del'>-                                (remaining &gt; frag-&gt;remaining_size)      \</div><div class='del'>-                                ? frag-&gt;remaining_size : remaining;     \</div><div class='del'>-                                                                        \</div><div class='del'>-                        frag-&gt;remaining_size -=                         \</div><div class='del'>-                                frag-&gt;pending_vector-&gt;iov_len;          \</div><div class='del'>-                }                                                       \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define __socket_proto_update_priv_after_read(priv, ret, bytes_read)    \</div><div class='del'>-        {                                                               \</div><div class='del'>-                struct gf_sock_incoming_frag *frag;                     \</div><div class='del'>-                frag = &amp;priv-&gt;incoming.frag;                            \</div><div class='del'>-                                                                        \</div><div class='del'>-                frag-&gt;fragcurrent += bytes_read;                        \</div><div class='del'>-                frag-&gt;bytes_read += bytes_read;                         \</div><div class='del'>-                                                                        \</div><div class='del'>-                if ((ret &gt; 0) || (frag-&gt;remaining_size != 0)) {         \</div><div class='del'>-                        if (frag-&gt;remaining_size != 0 &amp;&amp; ret == 0) {    \</div><div class='del'>-                                __socket_proto_reset_pending (priv);    \</div><div class='del'>-                        }                                               \</div><div class='del'>-                                                                        \</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,               \</div><div class='del'>-                                "partial read on non-blocking socket"); \</div><div class='del'>-                                                                        \</div><div class='del'>-                        break;                                          \</div><div class='del'>-                }                                                       \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-#define __socket_proto_init_pending(priv,size)                          \</div><div class='del'>-        do {                                                            \</div><div class='del'>-            uint32_t remaining = 0;                                     \</div><div class='del'>-            struct gf_sock_incoming_frag *frag;                         \</div><div class='del'>-            frag = &amp;priv-&gt;incoming.frag;                                \</div><div class='del'>-                                                                        \</div><div class='del'>-            remaining = (RPC_FRAGSIZE (priv-&gt;incoming.fraghdr)          \</div><div class='del'>-                         - frag-&gt;bytes_read);                           \</div><div class='del'>-                                                                        \</div><div class='del'>-            __socket_proto_reset_pending (priv);                        \</div><div class='del'>-                                                                        \</div><div class='del'>-            frag-&gt;pending_vector-&gt;iov_len =                             \</div><div class='del'>-                    (remaining &gt; size) ? size : remaining;              \</div><div class='del'>-                                                                        \</div><div class='del'>-            frag-&gt;remaining_size = (size - frag-&gt;pending_vector-&gt;iov_len); \</div><div class='del'>-                                                                        \</div><div class='del'>-            } while(0)</div><div class='add'>+#define POLL_MASK_ERROR (POLLERR | POLLHUP | POLLNVAL)</div><div class='ctx'> </div><div class='add'>+typedef int</div><div class='add'>+SSL_unary_func(SSL *);</div><div class='add'>+typedef int</div><div class='add'>+SSL_trinary_func(SSL *, void *, int);</div><div class='add'>+static int</div><div class='add'>+ssl_setup_connection_params(rpc_transport_t *this);</div><div class='add'>+</div><div class='add'>+#define __socket_proto_reset_pending(priv)                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        struct gf_sock_incoming_frag *frag;                                    \</div><div class='add'>+        frag = &amp;priv-&gt;incoming.frag;                                           \</div><div class='add'>+                                                                               \</div><div class='add'>+        memset(&amp;frag-&gt;vector, 0, sizeof(frag-&gt;vector));                        \</div><div class='add'>+        frag-&gt;pending_vector = &amp;frag-&gt;vector;                                  \</div><div class='add'>+        frag-&gt;pending_vector-&gt;iov_base = frag-&gt;fragcurrent;                    \</div><div class='add'>+        priv-&gt;incoming.pending_vector = frag-&gt;pending_vector;                  \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define __socket_proto_update_pending(priv)                                    \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        uint32_t remaining;                                                    \</div><div class='add'>+        struct gf_sock_incoming_frag *frag;                                    \</div><div class='add'>+        frag = &amp;priv-&gt;incoming.frag;                                           \</div><div class='add'>+        if (frag-&gt;pending_vector-&gt;iov_len == 0) {                              \</div><div class='add'>+            remaining = (RPC_FRAGSIZE(priv-&gt;incoming.fraghdr) -                \</div><div class='add'>+                         frag-&gt;bytes_read);                                    \</div><div class='add'>+                                                                               \</div><div class='add'>+            frag-&gt;pending_vector-&gt;iov_len = (remaining &gt; frag-&gt;remaining_size) \</div><div class='add'>+                                                ? frag-&gt;remaining_size         \</div><div class='add'>+                                                : remaining;                   \</div><div class='add'>+                                                                               \</div><div class='add'>+            frag-&gt;remaining_size -= frag-&gt;pending_vector-&gt;iov_len;             \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define __socket_proto_update_priv_after_read(priv, ret, bytes_read)           \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        struct gf_sock_incoming_frag *frag;                                    \</div><div class='add'>+        frag = &amp;priv-&gt;incoming.frag;                                           \</div><div class='add'>+                                                                               \</div><div class='add'>+        frag-&gt;fragcurrent += bytes_read;                                       \</div><div class='add'>+        frag-&gt;bytes_read += bytes_read;                                        \</div><div class='add'>+                                                                               \</div><div class='add'>+        if ((ret &gt; 0) || (frag-&gt;remaining_size != 0)) {                        \</div><div class='add'>+            if (frag-&gt;remaining_size != 0 &amp;&amp; ret == 0) {                       \</div><div class='add'>+                __socket_proto_reset_pending(priv);                            \</div><div class='add'>+            }                                                                  \</div><div class='add'>+                                                                               \</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,                                   \</div><div class='add'>+                   "partial read on non-blocking socket");                     \</div><div class='add'>+                                                                               \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+#define __socket_proto_init_pending(priv, size)                                \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        uint32_t remaining = 0;                                                \</div><div class='add'>+        struct gf_sock_incoming_frag *frag;                                    \</div><div class='add'>+        frag = &amp;priv-&gt;incoming.frag;                                           \</div><div class='add'>+                                                                               \</div><div class='add'>+        remaining = (RPC_FRAGSIZE(priv-&gt;incoming.fraghdr) - frag-&gt;bytes_read); \</div><div class='add'>+                                                                               \</div><div class='add'>+        __socket_proto_reset_pending(priv);                                    \</div><div class='add'>+                                                                               \</div><div class='add'>+        frag-&gt;pending_vector-&gt;iov_len = (remaining &gt; size) ? size : remaining; \</div><div class='add'>+                                                                               \</div><div class='add'>+        frag-&gt;remaining_size = (size - frag-&gt;pending_vector-&gt;iov_len);         \</div><div class='add'>+                                                                               \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> /* This will be used in a switch case and breaks from the switch case if all</div><div class='ctx'>  * the pending data is not read.</div><div class='ctx'>  */</div><div class='del'>-#define __socket_proto_read(priv, ret)                                  \</div><div class='del'>-                {                                                       \</div><div class='del'>-                size_t bytes_read = 0;                                  \</div><div class='del'>-                struct gf_sock_incoming *in;                            \</div><div class='del'>-                in = &amp;priv-&gt;incoming;                                   \</div><div class='del'>-                                                                        \</div><div class='del'>-                __socket_proto_update_pending (priv);                   \</div><div class='del'>-                                                                        \</div><div class='del'>-                ret = __socket_readv (this,                             \</div><div class='del'>-                                      in-&gt;pending_vector, 1,            \</div><div class='del'>-                                      &amp;in-&gt;pending_vector,              \</div><div class='del'>-                                      &amp;in-&gt;pending_count,               \</div><div class='del'>-                                      &amp;bytes_read);                     \</div><div class='del'>-                if (ret == -1)                                          \</div><div class='del'>-                        break;                                          \</div><div class='del'>-                __socket_proto_update_priv_after_read (priv, ret, bytes_read); \</div><div class='del'>-        }</div><div class='add'>+#define __socket_proto_read(priv, ret)                                         \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        size_t bytes_read = 0;                                                 \</div><div class='add'>+        struct gf_sock_incoming *in;                                           \</div><div class='add'>+        in = &amp;priv-&gt;incoming;                                                  \</div><div class='add'>+                                                                               \</div><div class='add'>+        __socket_proto_update_pending(priv);                                   \</div><div class='add'>+                                                                               \</div><div class='add'>+        ret = __socket_readv(this, in-&gt;pending_vector, 1, &amp;in-&gt;pending_vector, \</div><div class='add'>+                             &amp;in-&gt;pending_count, &amp;bytes_read);                 \</div><div class='add'>+        if (ret == -1)                                                         \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        __socket_proto_update_priv_after_read(priv, ret, bytes_read);          \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> struct socket_connect_error_state_ {</div><div class='del'>-        xlator_t            *this;</div><div class='del'>-        rpc_transport_t     *trans;</div><div class='del'>-        gf_boolean_t         refd;</div><div class='add'>+    xlator_t *this;</div><div class='add'>+    rpc_transport_t *trans;</div><div class='add'>+    gf_boolean_t refd;</div><div class='ctx'> };</div><div class='ctx'> typedef struct socket_connect_error_state_ socket_connect_error_state_t;</div><div class='ctx'> </div><div class='del'>-static int socket_init (rpc_transport_t *this);</div><div class='del'>-static int __socket_nonblock (int fd);</div><div class='add'>+static int</div><div class='add'>+socket_init(rpc_transport_t *this);</div><div class='add'>+static int</div><div class='add'>+__socket_nonblock(int fd);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-socket_dump_info (struct sockaddr *sa, int is_server, int is_ssl, int sock,</div><div class='del'>-                  char *log_domain, char *log_label)</div><div class='add'>+socket_dump_info(struct sockaddr *sa, int is_server, int is_ssl, int sock,</div><div class='add'>+                 char *log_domain, char *log_label)</div><div class='ctx'> {</div><div class='del'>-        char  addr_buf[INET6_ADDRSTRLEN+1] = {0, };</div><div class='del'>-        char *addr = NULL;</div><div class='del'>-        char *peer_type = NULL;</div><div class='del'>-        int   af = sa-&gt;sa_family;</div><div class='del'>-        int   so_error = -1;</div><div class='del'>-        socklen_t slen = sizeof(so_error);</div><div class='del'>-</div><div class='del'>-        if (af == AF_UNIX) {</div><div class='del'>-                addr = ((struct sockaddr_un *)(sa))-&gt;sun_path;</div><div class='add'>+    char addr_buf[INET6_ADDRSTRLEN + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *addr = NULL;</div><div class='add'>+    char *peer_type = NULL;</div><div class='add'>+    int af = sa-&gt;sa_family;</div><div class='add'>+    int so_error = -1;</div><div class='add'>+    socklen_t slen = sizeof(so_error);</div><div class='add'>+</div><div class='add'>+    if (af == AF_UNIX) {</div><div class='add'>+        addr = ((struct sockaddr_un *)(sa))-&gt;sun_path;</div><div class='add'>+    } else {</div><div class='add'>+        if (af == AF_INET6) {</div><div class='add'>+            struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)(sa);</div><div class='add'>+</div><div class='add'>+            inet_ntop(af, &amp;sin6-&gt;sin6_addr, addr_buf, sizeof(addr_buf));</div><div class='add'>+            addr = addr_buf;</div><div class='ctx'>         } else {</div><div class='del'>-                if (af == AF_INET6) {</div><div class='del'>-                        struct sockaddr_in6 *sin6 =</div><div class='del'>-                                (struct sockaddr_in6 *)(sa);</div><div class='add'>+            struct sockaddr_in *sin = (struct sockaddr_in *)(sa);</div><div class='ctx'> </div><div class='del'>-                        inet_ntop (af, &amp;sin6-&gt;sin6_addr, addr_buf,</div><div class='del'>-                                   sizeof (addr_buf));</div><div class='del'>-                        addr = addr_buf;</div><div class='del'>-                } else {</div><div class='del'>-                        struct sockaddr_in *sin =</div><div class='del'>-                                (struct sockaddr_in *)(sa);</div><div class='del'>-</div><div class='del'>-                        inet_ntop (af, &amp;sin-&gt;sin_addr, addr_buf,</div><div class='del'>-                                   sizeof (addr_buf));</div><div class='del'>-                        addr = addr_buf;</div><div class='del'>-                }</div><div class='add'>+            inet_ntop(af, &amp;sin-&gt;sin_addr, addr_buf, sizeof(addr_buf));</div><div class='add'>+            addr = addr_buf;</div><div class='ctx'>         }</div><div class='del'>-        if (is_server)</div><div class='del'>-                peer_type = "server";</div><div class='del'>-        else</div><div class='del'>-                peer_type = "client";</div><div class='add'>+    }</div><div class='add'>+    if (is_server)</div><div class='add'>+        peer_type = "server";</div><div class='add'>+    else</div><div class='add'>+        peer_type = "client";</div><div class='ctx'> </div><div class='del'>-        getsockopt (sock, SOL_SOCKET, SO_ERROR, &amp;so_error, &amp;slen);</div><div class='add'>+    getsockopt(sock, SOL_SOCKET, SO_ERROR, &amp;so_error, &amp;slen);</div><div class='ctx'> </div><div class='del'>-        gf_log (log_domain, GF_LOG_TRACE,</div><div class='del'>-                "$$$ %s: %s (af:%d,sock:%d) %s %s (errno:%d:%s)",</div><div class='del'>-                peer_type, log_label, af, sock, addr,</div><div class='del'>-                (is_ssl ? "SSL" : "non-SSL"),</div><div class='del'>-                so_error, strerror (so_error));</div><div class='add'>+    gf_log(log_domain, GF_LOG_TRACE,</div><div class='add'>+           "$$$ %s: %s (af:%d,sock:%d) %s %s (errno:%d:%s)", peer_type,</div><div class='add'>+           log_label, af, sock, addr, (is_ssl ? "SSL" : "non-SSL"), so_error,</div><div class='add'>+           strerror(so_error));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ssl_dump_error_stack (const char *caller)</div><div class='add'>+ssl_dump_error_stack(const char *caller)</div><div class='ctx'> {</div><div class='del'>-        unsigned long  errnum = 0;</div><div class='del'>-        char           errbuf[120] = {0, };</div><div class='add'>+    unsigned long errnum = 0;</div><div class='add'>+    char errbuf[120] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        /* OpenSSL docs explicitly give 120 as the error-string length. */</div><div class='add'>+    /* OpenSSL docs explicitly give 120 as the error-string length. */</div><div class='ctx'> </div><div class='del'>-        while ((errnum = ERR_get_error())) {</div><div class='del'>-                ERR_error_string(errnum, errbuf);</div><div class='del'>-                gf_log(caller, GF_LOG_ERROR, "  %s", errbuf);</div><div class='del'>-        }</div><div class='add'>+    while ((errnum = ERR_get_error())) {</div><div class='add'>+        ERR_error_string(errnum, errbuf);</div><div class='add'>+        gf_log(caller, GF_LOG_ERROR, "  %s", errbuf);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ssl_do (rpc_transport_t *this, void *buf, size_t len, SSL_trinary_func *func)</div><div class='add'>+ssl_do(rpc_transport_t *this, void *buf, size_t len, SSL_trinary_func *func)</div><div class='ctx'> {</div><div class='del'>-        int               r = (-1);</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (buf) {</div><div class='del'>-                if (priv-&gt;connected == -1) {</div><div class='del'>-                        /*</div><div class='del'>-                         * Fields in the SSL structure (especially</div><div class='del'>-                         * the BIO pointers) are not valid at this</div><div class='del'>-                         * point, so we'll segfault if we pass them</div><div class='del'>-                         * to SSL_read/SSL_write.</div><div class='del'>-                         */</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                "lost connection in %s", __func__);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                r = func (priv-&gt;ssl_ssl, buf, len);</div><div class='del'>-        } else {</div><div class='del'>-                /*</div><div class='del'>-                 * We actually need these functions to get to</div><div class='del'>-                 * priv-&gt;connected == 1.</div><div class='del'>-                 */</div><div class='del'>-                r = ((SSL_unary_func *)func)(priv-&gt;ssl_ssl);</div><div class='del'>-        }</div><div class='del'>-        switch (SSL_get_error (priv-&gt;ssl_ssl, r)) {</div><div class='add'>+    int r = (-1);</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (buf) {</div><div class='add'>+        if (priv-&gt;connected == -1) {</div><div class='add'>+            /*</div><div class='add'>+             * Fields in the SSL structure (especially</div><div class='add'>+             * the BIO pointers) are not valid at this</div><div class='add'>+             * point, so we'll segfault if we pass them</div><div class='add'>+             * to SSL_read/SSL_write.</div><div class='add'>+             */</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "lost connection in %s", __func__);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        r = func(priv-&gt;ssl_ssl, buf, len);</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * We actually need these functions to get to</div><div class='add'>+         * priv-&gt;connected == 1.</div><div class='add'>+         */</div><div class='add'>+        r = ((SSL_unary_func *)func)(priv-&gt;ssl_ssl);</div><div class='add'>+    }</div><div class='add'>+    switch (SSL_get_error(priv-&gt;ssl_ssl, r)) {</div><div class='ctx'>         case SSL_ERROR_NONE:</div><div class='ctx'>         /* fall through */</div><div class='ctx'>         case SSL_ERROR_WANT_READ:</div><div class='ctx'>         /* fall through */</div><div class='ctx'>         case SSL_ERROR_WANT_WRITE:</div><div class='del'>-                errno = EAGAIN;</div><div class='del'>-                return r;</div><div class='add'>+            errno = EAGAIN;</div><div class='add'>+            return r;</div><div class='ctx'> </div><div class='ctx'>         case SSL_ERROR_SYSCALL:</div><div class='del'>-                /* Sometimes SSL_ERROR_SYSCALL returns errno as</div><div class='del'>-                 * EAGAIN. In such a case we should reattempt operation</div><div class='del'>-                 * So, for now, just return the return value and the</div><div class='del'>-                 * errno as is.</div><div class='del'>-                 */</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "syscall error (probably remote disconnect) "</div><div class='del'>-                        "errno:%d:%s", errno, strerror(errno));</div><div class='del'>-                return r;</div><div class='add'>+            /* Sometimes SSL_ERROR_SYSCALL returns errno as</div><div class='add'>+             * EAGAIN. In such a case we should reattempt operation</div><div class='add'>+             * So, for now, just return the return value and the</div><div class='add'>+             * errno as is.</div><div class='add'>+             */</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "syscall error (probably remote disconnect) "</div><div class='add'>+                   "errno:%d:%s",</div><div class='add'>+                   errno, strerror(errno));</div><div class='add'>+            return r;</div><div class='ctx'>         default:</div><div class='del'>-                errno = EIO;</div><div class='del'>-                goto out;       /* "break" would just loop again */</div><div class='del'>-        }</div><div class='add'>+            errno = EIO;</div><div class='add'>+            goto out; /* "break" would just loop again */</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define ssl_read_one(t, b, l)  ssl_do((t), (b), (l), (SSL_trinary_func *)SSL_read)</div><div class='del'>-#define ssl_write_one(t, b, l) ssl_do((t), (b), (l), (SSL_trinary_func *)SSL_write)</div><div class='del'>-</div><div class='add'>+#define ssl_read_one(t, b, l)                                                  \</div><div class='add'>+    ssl_do((t), (b), (l), (SSL_trinary_func *)SSL_read)</div><div class='add'>+#define ssl_write_one(t, b, l)                                                 \</div><div class='add'>+    ssl_do((t), (b), (l), (SSL_trinary_func *)SSL_write)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ssl_setup_connection_prefix (rpc_transport_t *this)</div><div class='add'>+ssl_setup_connection_prefix(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, done);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (ssl_setup_connection_params (this) &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "+ ssl_setup_connection_params() failed!");</div><div class='del'>-                goto done;</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "+ ssl_setup_connection_params() done!");</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, done);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;ssl_error_required = SSL_ERROR_NONE;</div><div class='del'>-        priv-&gt;ssl_connected = _gf_false;</div><div class='del'>-        priv-&gt;ssl_accepted = _gf_false;</div><div class='del'>-        priv-&gt;ssl_context_created = _gf_false;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;ssl_ssl = SSL_new(priv-&gt;ssl_ctx);</div><div class='del'>-        if (!priv-&gt;ssl_ssl) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_ERROR, "SSL_new failed");</div><div class='del'>-                ssl_dump_error_stack(this-&gt;name);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    if (ssl_setup_connection_params(this) &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "+ ssl_setup_connection_params() failed!");</div><div class='add'>+        goto done;</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "+ ssl_setup_connection_params() done!");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;ssl_error_required = SSL_ERROR_NONE;</div><div class='add'>+    priv-&gt;ssl_connected = _gf_false;</div><div class='add'>+    priv-&gt;ssl_accepted = _gf_false;</div><div class='add'>+    priv-&gt;ssl_context_created = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv-&gt;ssl_ssl = SSL_new(priv-&gt;ssl_ctx);</div><div class='add'>+    if (!priv-&gt;ssl_ssl) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "SSL_new failed");</div><div class='add'>+        ssl_dump_error_stack(this-&gt;name);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;ssl_sbio = BIO_new_socket(priv-&gt;sock, BIO_NOCLOSE);</div><div class='del'>-        if (!priv-&gt;ssl_sbio) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_ERROR, "BIO_new_socket failed");</div><div class='del'>-                ssl_dump_error_stack(this-&gt;name);</div><div class='del'>-                goto free_ssl;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;ssl_sbio = BIO_new_socket(priv-&gt;sock, BIO_NOCLOSE);</div><div class='add'>+    if (!priv-&gt;ssl_sbio) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "BIO_new_socket failed");</div><div class='add'>+        ssl_dump_error_stack(this-&gt;name);</div><div class='add'>+        goto free_ssl;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        SSL_set_bio (priv-&gt;ssl_ssl, priv-&gt;ssl_sbio, priv-&gt;ssl_sbio);</div><div class='del'>-        ret = 0;</div><div class='del'>-        goto done;</div><div class='add'>+    SSL_set_bio(priv-&gt;ssl_ssl, priv-&gt;ssl_sbio, priv-&gt;ssl_sbio);</div><div class='add'>+    ret = 0;</div><div class='add'>+    goto done;</div><div class='ctx'> </div><div class='ctx'> free_ssl:</div><div class='del'>-        SSL_free(priv-&gt;ssl_ssl);</div><div class='del'>-        priv-&gt;ssl_ssl = NULL;</div><div class='add'>+    SSL_free(priv-&gt;ssl_ssl);</div><div class='add'>+    priv-&gt;ssl_ssl = NULL;</div><div class='ctx'> done:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-ssl_setup_connection_postfix (rpc_transport_t *this)</div><div class='add'>+ssl_setup_connection_postfix(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        X509             *peer = NULL;</div><div class='del'>-        char              peer_CN[256] = "";</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, done);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Make sure _SSL verification_ succeeded, yielding an identity. */</div><div class='del'>-        if (SSL_get_verify_result(priv-&gt;ssl_ssl) != X509_V_OK) {</div><div class='del'>-                goto ssl_error;</div><div class='del'>-        }</div><div class='del'>-        peer = SSL_get_peer_certificate(priv-&gt;ssl_ssl);</div><div class='del'>-        if (!peer) {</div><div class='del'>-                goto ssl_error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        SSL_set_mode(priv-&gt;ssl_ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);</div><div class='del'>-</div><div class='del'>-        /* Finally, everything seems OK. */</div><div class='del'>-        X509_NAME_get_text_by_NID(X509_get_subject_name(peer),</div><div class='del'>-                NID_commonName, peer_CN, sizeof(peer_CN)-1);</div><div class='del'>-        peer_CN[sizeof(peer_CN)-1] = '\0';</div><div class='del'>-        gf_log(this-&gt;name, GF_LOG_DEBUG, "peer CN = %s", peer_CN);</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "SSL verification succeeded (client: %s) (server: %s)",</div><div class='del'>-                this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='del'>-        return gf_strdup(peer_CN);</div><div class='del'>-</div><div class='del'>-        /* Error paths. */</div><div class='add'>+    X509 *peer = NULL;</div><div class='add'>+    char peer_CN[256] = "";</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, done);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Make sure _SSL verification_ succeeded, yielding an identity. */</div><div class='add'>+    if (SSL_get_verify_result(priv-&gt;ssl_ssl) != X509_V_OK) {</div><div class='add'>+        goto ssl_error;</div><div class='add'>+    }</div><div class='add'>+    peer = SSL_get_peer_certificate(priv-&gt;ssl_ssl);</div><div class='add'>+    if (!peer) {</div><div class='add'>+        goto ssl_error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    SSL_set_mode(priv-&gt;ssl_ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);</div><div class='add'>+</div><div class='add'>+    /* Finally, everything seems OK. */</div><div class='add'>+    X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName,</div><div class='add'>+                              peer_CN, sizeof(peer_CN) - 1);</div><div class='add'>+    peer_CN[sizeof(peer_CN) - 1] = '\0';</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "peer CN = %s", peer_CN);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "SSL verification succeeded (client: %s) (server: %s)",</div><div class='add'>+           this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+    return gf_strdup(peer_CN);</div><div class='add'>+</div><div class='add'>+    /* Error paths. */</div><div class='ctx'> ssl_error:</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                "SSL connect error (client: %s) (server: %s)",</div><div class='del'>-                this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='del'>-        ssl_dump_error_stack(this-&gt;name);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+           "SSL connect error (client: %s) (server: %s)",</div><div class='add'>+           this-&gt;peerinfo.identifier, this-&gt;myinfo.identifier);</div><div class='add'>+    ssl_dump_error_stack(this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        SSL_free(priv-&gt;ssl_ssl);</div><div class='del'>-        priv-&gt;ssl_ssl = NULL;</div><div class='add'>+    SSL_free(priv-&gt;ssl_ssl);</div><div class='add'>+    priv-&gt;ssl_ssl = NULL;</div><div class='ctx'> done:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ssl_complete_connection (rpc_transport_t *this)</div><div class='add'>+ssl_complete_connection(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1; /*  1 : implies go back to epoll_wait()</div><div class='del'>-                               *  0 : implies successful ssl connection</div><div class='del'>-                               * -1: implies continue processing current event</div><div class='del'>-                               *     as if EPOLLERR has been encountered</div><div class='del'>-                               */</div><div class='del'>-        char    *cname  = NULL;</div><div class='del'>-        int     r       = -1;</div><div class='del'>-        int     ssl_error = -1;</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='add'>+    int ret = -1; /*  1 : implies go back to epoll_wait()</div><div class='add'>+                   *  0 : implies successful ssl connection</div><div class='add'>+                   * -1: implies continue processing current event</div><div class='add'>+                   *     as if EPOLLERR has been encountered</div><div class='add'>+                   */</div><div class='add'>+    char *cname = NULL;</div><div class='add'>+    int r = -1;</div><div class='add'>+    int ssl_error = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;is_server) {</div><div class='del'>-                r = SSL_accept (priv-&gt;ssl_ssl);</div><div class='del'>-        } else {</div><div class='del'>-                r = SSL_connect (priv-&gt;ssl_ssl);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;is_server) {</div><div class='add'>+        r = SSL_accept(priv-&gt;ssl_ssl);</div><div class='add'>+    } else {</div><div class='add'>+        r = SSL_connect(priv-&gt;ssl_ssl);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ssl_error = SSL_get_error (priv-&gt;ssl_ssl, r);</div><div class='del'>-        priv-&gt;ssl_error_required = ssl_error;</div><div class='add'>+    ssl_error = SSL_get_error(priv-&gt;ssl_ssl, r);</div><div class='add'>+    priv-&gt;ssl_error_required = ssl_error;</div><div class='ctx'> </div><div class='del'>-        switch (ssl_error) {</div><div class='add'>+    switch (ssl_error) {</div><div class='ctx'>         case SSL_ERROR_NONE:</div><div class='del'>-                cname = ssl_setup_connection_postfix (this);</div><div class='del'>-                if (!cname) {</div><div class='del'>-                        /* we've failed to get the cname so</div><div class='del'>-                         * we must close the connection</div><div class='del'>-                         *</div><div class='del'>-                         * treat this as EPOLLERR</div><div class='del'>-                         */</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "error getting cname");</div><div class='del'>-                        errno = ECONNRESET;</div><div class='del'>-                        ret = -1;</div><div class='add'>+            cname = ssl_setup_connection_postfix(this);</div><div class='add'>+            if (!cname) {</div><div class='add'>+                /* we've failed to get the cname so</div><div class='add'>+                 * we must close the connection</div><div class='add'>+                 *</div><div class='add'>+                 * treat this as EPOLLERR</div><div class='add'>+                 */</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE, "error getting cname");</div><div class='add'>+                errno = ECONNRESET;</div><div class='add'>+                ret = -1;</div><div class='add'>+            } else {</div><div class='add'>+                this-&gt;ssl_name = cname;</div><div class='add'>+                if (priv-&gt;is_server) {</div><div class='add'>+                    priv-&gt;ssl_accepted = _gf_true;</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_TRACE, "ssl_accepted!");</div><div class='ctx'>                 } else {</div><div class='del'>-                        this-&gt;ssl_name = cname;</div><div class='del'>-                        if (priv-&gt;is_server) {</div><div class='del'>-                                priv-&gt;ssl_accepted = _gf_true;</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "ssl_accepted!");</div><div class='del'>-                        } else {</div><div class='del'>-                                priv-&gt;ssl_connected = _gf_true;</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "ssl_connected!");</div><div class='del'>-                        }</div><div class='del'>-                        ret = 0;</div><div class='add'>+                    priv-&gt;ssl_connected = _gf_true;</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_TRACE, "ssl_connected!");</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+                ret = 0;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case SSL_ERROR_WANT_READ:</div><div class='ctx'>         /* fall through */</div><div class='ctx'>         case SSL_ERROR_WANT_WRITE:</div><div class='del'>-                errno = EAGAIN;</div><div class='del'>-                break;</div><div class='add'>+            errno = EAGAIN;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case SSL_ERROR_SYSCALL:</div><div class='del'>-        /* Sometimes SSL_ERROR_SYSCALL returns with errno as EAGAIN</div><div class='del'>-         * So, we should retry the operation.</div><div class='del'>-         * So, for now, we just return the return value and errno as is.</div><div class='del'>-         */</div><div class='del'>-                break;</div><div class='add'>+            /* Sometimes SSL_ERROR_SYSCALL returns with errno as EAGAIN</div><div class='add'>+             * So, we should retry the operation.</div><div class='add'>+             * So, for now, we just return the return value and errno as is.</div><div class='add'>+             */</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case SSL_ERROR_SSL:</div><div class='del'>-                /* treat this as EPOLLERR */</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='add'>+            /* treat this as EPOLLERR */</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                /* treat this as EPOLLERR */</div><div class='del'>-                errno = EIO;</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+            /* treat this as EPOLLERR */</div><div class='add'>+            errno = EIO;</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ssl_teardown_connection (socket_private_t *priv)</div><div class='add'>+ssl_teardown_connection(socket_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        if (priv-&gt;ssl_ssl) {</div><div class='del'>-                SSL_shutdown(priv-&gt;ssl_ssl);</div><div class='del'>-                SSL_clear(priv-&gt;ssl_ssl);</div><div class='del'>-                SSL_free(priv-&gt;ssl_ssl);</div><div class='del'>-                SSL_CTX_free(priv-&gt;ssl_ctx);</div><div class='del'>-                priv-&gt;ssl_ssl = NULL;</div><div class='del'>-                priv-&gt;ssl_ctx = NULL;</div><div class='del'>-                if (priv-&gt;ssl_private_key) {</div><div class='del'>-                        GF_FREE (priv-&gt;ssl_private_key);</div><div class='del'>-                        priv-&gt;ssl_private_key = NULL;</div><div class='del'>-                }</div><div class='del'>-                if (priv-&gt;ssl_own_cert) {</div><div class='del'>-                        GF_FREE (priv-&gt;ssl_own_cert);</div><div class='del'>-                        priv-&gt;ssl_own_cert = NULL;</div><div class='del'>-                }</div><div class='del'>-                if (priv-&gt;ssl_ca_list) {</div><div class='del'>-                        GF_FREE (priv-&gt;ssl_ca_list);</div><div class='del'>-                        priv-&gt;ssl_ca_list = NULL;</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;ssl_ssl) {</div><div class='add'>+        SSL_shutdown(priv-&gt;ssl_ssl);</div><div class='add'>+        SSL_clear(priv-&gt;ssl_ssl);</div><div class='add'>+        SSL_free(priv-&gt;ssl_ssl);</div><div class='add'>+        SSL_CTX_free(priv-&gt;ssl_ctx);</div><div class='add'>+        priv-&gt;ssl_ssl = NULL;</div><div class='add'>+        priv-&gt;ssl_ctx = NULL;</div><div class='add'>+        if (priv-&gt;ssl_private_key) {</div><div class='add'>+            GF_FREE(priv-&gt;ssl_private_key);</div><div class='add'>+            priv-&gt;ssl_private_key = NULL;</div><div class='ctx'>         }</div><div class='del'>-        priv-&gt;use_ssl = _gf_false;</div><div class='add'>+        if (priv-&gt;ssl_own_cert) {</div><div class='add'>+            GF_FREE(priv-&gt;ssl_own_cert);</div><div class='add'>+            priv-&gt;ssl_own_cert = NULL;</div><div class='add'>+        }</div><div class='add'>+        if (priv-&gt;ssl_ca_list) {</div><div class='add'>+            GF_FREE(priv-&gt;ssl_ca_list);</div><div class='add'>+            priv-&gt;ssl_ca_list = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;use_ssl = _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static ssize_t</div><div class='del'>-__socket_ssl_readv (rpc_transport_t *this, struct iovec *opvector, int opcount)</div><div class='add'>+__socket_ssl_readv(rpc_transport_t *this, struct iovec *opvector, int opcount)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t    *priv = NULL;</div><div class='del'>-        int                  sock = -1;</div><div class='del'>-        int                  ret = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        sock = priv-&gt;sock;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;use_ssl) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "***** reading over SSL");</div><div class='del'>-                ret = ssl_read_one (this, opvector-&gt;iov_base, opvector-&gt;iov_len);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "***** reading over non-SSL");</div><div class='del'>-                ret = sys_readv (sock, opvector, IOV_MIN(opcount));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int sock = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    sock = priv-&gt;sock;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;use_ssl) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "***** reading over SSL");</div><div class='add'>+        ret = ssl_read_one(this, opvector-&gt;iov_base, opvector-&gt;iov_len);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "***** reading over non-SSL");</div><div class='add'>+        ret = sys_readv(sock, opvector, IOV_MIN(opcount));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static ssize_t</div><div class='del'>-__socket_ssl_read (rpc_transport_t *this, void *buf, size_t count)</div><div class='add'>+__socket_ssl_read(rpc_transport_t *this, void *buf, size_t count)</div><div class='ctx'> {</div><div class='del'>-        struct iovec iov = {0, };</div><div class='del'>-        int          ret = -1;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        iov.iov_base = buf;</div><div class='del'>-        iov.iov_len = count;</div><div class='add'>+    iov.iov_base = buf;</div><div class='add'>+    iov.iov_len = count;</div><div class='ctx'> </div><div class='del'>-        ret = __socket_ssl_readv (this, &amp;iov, 1);</div><div class='add'>+    ret = __socket_ssl_readv(this, &amp;iov, 1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_cached_read (rpc_transport_t *this, struct iovec *opvector, int opcount)</div><div class='add'>+__socket_cached_read(rpc_transport_t *this, struct iovec *opvector, int opcount)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t   *priv = NULL;</div><div class='del'>-        struct gf_sock_incoming *in = NULL;</div><div class='del'>-        int                 req_len = -1;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        req_len = iov_length (opvector, opcount);</div><div class='del'>-</div><div class='del'>-        if (in-&gt;record_state == SP_STATE_READING_FRAGHDR) {</div><div class='del'>-                in-&gt;ra_read = 0;</div><div class='del'>-                in-&gt;ra_served = 0;</div><div class='del'>-                in-&gt;ra_max = 0;</div><div class='del'>-                in-&gt;ra_buf = NULL;</div><div class='del'>-                goto uncached;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!in-&gt;ra_max) {</div><div class='del'>-                /* first call after passing SP_STATE_READING_FRAGHDR */</div><div class='del'>-                in-&gt;ra_max = min (RPC_FRAGSIZE (in-&gt;fraghdr), GF_SOCKET_RA_MAX);</div><div class='del'>-                /* Note that the in-&gt;iobuf is the primary iobuf into which</div><div class='del'>-                   headers are read into, and in-&gt;frag.fragcurrent points to</div><div class='del'>-                   some position in the buffer. By using this itself as our</div><div class='del'>-                   read-ahead cache, we can avoid memory copies in iov_load</div><div class='del'>-                */</div><div class='del'>-                in-&gt;ra_buf = in-&gt;frag.fragcurrent;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* fill read-ahead */</div><div class='del'>-        if (in-&gt;ra_read &lt; in-&gt;ra_max) {</div><div class='del'>-                ret = __socket_ssl_read (this, &amp;in-&gt;ra_buf[in-&gt;ra_read],</div><div class='del'>-                                         (in-&gt;ra_max - in-&gt;ra_read));</div><div class='del'>-                if (ret &gt; 0)</div><div class='del'>-                        in-&gt;ra_read += ret;</div><div class='del'>-</div><div class='del'>-                /* we proceed to test if there is still cached data to</div><div class='del'>-                   be served even if readahead could not progress */</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* serve cached */</div><div class='del'>-        if (in-&gt;ra_served &lt; in-&gt;ra_read) {</div><div class='del'>-                ret = iov_load (opvector, opcount, &amp;in-&gt;ra_buf[in-&gt;ra_served],</div><div class='del'>-                                min (req_len, (in-&gt;ra_read - in-&gt;ra_served)));</div><div class='del'>-</div><div class='del'>-                in-&gt;ra_served += ret;</div><div class='del'>-                /* Do not read uncached and cached in the same call */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (in-&gt;ra_read &lt; in-&gt;ra_max)</div><div class='del'>-                /* If there was no cached data to be served, (and we are</div><div class='del'>-                   guaranteed to have already performed an attempt to progress</div><div class='del'>-                   readahead above), and we have not yet read out the full</div><div class='del'>-                   readahead capacity, then bail out for now without doing</div><div class='del'>-                   the uncached read below (as that will overtake future cached</div><div class='del'>-                   read)</div><div class='del'>-                */</div><div class='del'>-                goto out;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    int req_len = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    req_len = iov_length(opvector, opcount);</div><div class='add'>+</div><div class='add'>+    if (in-&gt;record_state == SP_STATE_READING_FRAGHDR) {</div><div class='add'>+        in-&gt;ra_read = 0;</div><div class='add'>+        in-&gt;ra_served = 0;</div><div class='add'>+        in-&gt;ra_max = 0;</div><div class='add'>+        in-&gt;ra_buf = NULL;</div><div class='add'>+        goto uncached;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!in-&gt;ra_max) {</div><div class='add'>+        /* first call after passing SP_STATE_READING_FRAGHDR */</div><div class='add'>+        in-&gt;ra_max = min(RPC_FRAGSIZE(in-&gt;fraghdr), GF_SOCKET_RA_MAX);</div><div class='add'>+        /* Note that the in-&gt;iobuf is the primary iobuf into which</div><div class='add'>+           headers are read into, and in-&gt;frag.fragcurrent points to</div><div class='add'>+           some position in the buffer. By using this itself as our</div><div class='add'>+           read-ahead cache, we can avoid memory copies in iov_load</div><div class='add'>+        */</div><div class='add'>+        in-&gt;ra_buf = in-&gt;frag.fragcurrent;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* fill read-ahead */</div><div class='add'>+    if (in-&gt;ra_read &lt; in-&gt;ra_max) {</div><div class='add'>+        ret = __socket_ssl_read(this, &amp;in-&gt;ra_buf[in-&gt;ra_read],</div><div class='add'>+                                (in-&gt;ra_max - in-&gt;ra_read));</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            in-&gt;ra_read += ret;</div><div class='add'>+</div><div class='add'>+        /* we proceed to test if there is still cached data to</div><div class='add'>+           be served even if readahead could not progress */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* serve cached */</div><div class='add'>+    if (in-&gt;ra_served &lt; in-&gt;ra_read) {</div><div class='add'>+        ret = iov_load(opvector, opcount, &amp;in-&gt;ra_buf[in-&gt;ra_served],</div><div class='add'>+                       min(req_len, (in-&gt;ra_read - in-&gt;ra_served)));</div><div class='add'>+</div><div class='add'>+        in-&gt;ra_served += ret;</div><div class='add'>+        /* Do not read uncached and cached in the same call */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (in-&gt;ra_read &lt; in-&gt;ra_max)</div><div class='add'>+        /* If there was no cached data to be served, (and we are</div><div class='add'>+           guaranteed to have already performed an attempt to progress</div><div class='add'>+           readahead above), and we have not yet read out the full</div><div class='add'>+           readahead capacity, then bail out for now without doing</div><div class='add'>+           the uncached read below (as that will overtake future cached</div><div class='add'>+           read)</div><div class='add'>+        */</div><div class='add'>+        goto out;</div><div class='ctx'> uncached:</div><div class='del'>-        ret = __socket_ssl_readv (this, opvector, opcount);</div><div class='add'>+    ret = __socket_ssl_readv(this, opvector, opcount);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__does_socket_rwv_error_need_logging (socket_private_t *priv, int write)</div><div class='add'>+__does_socket_rwv_error_need_logging(socket_private_t *priv, int write)</div><div class='ctx'> {</div><div class='del'>-        int read = !write;</div><div class='add'>+    int read = !write;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;connected == -1) /* Didn't even connect, of course it fails */</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (priv-&gt;connected == -1) /* Didn't even connect, of course it fails */</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (read &amp;&amp; (priv-&gt;read_fail_log == _gf_false))</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (read &amp;&amp; (priv-&gt;read_fail_log == _gf_false))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -637,822 +629,786 @@ __does_socket_rwv_error_need_logging (socket_private_t *priv, int write)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_rwv (rpc_transport_t *this, struct iovec *vector, int count,</div><div class='del'>-              struct iovec **pending_vector, int *pending_count, size_t *bytes,</div><div class='del'>-              int write)</div><div class='add'>+__socket_rwv(rpc_transport_t *this, struct iovec *vector, int count,</div><div class='add'>+             struct iovec **pending_vector, int *pending_count, size_t *bytes,</div><div class='add'>+             int write)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        int               sock = -1;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        struct iovec     *opvector = NULL;</div><div class='del'>-        int               opcount = 0;</div><div class='del'>-        int               moved = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        sock = priv-&gt;sock;</div><div class='del'>-</div><div class='del'>-        opvector = vector;</div><div class='del'>-        opcount  = count;</div><div class='del'>-</div><div class='del'>-        if (bytes != NULL) {</div><div class='del'>-                *bytes = 0;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int sock = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iovec *opvector = NULL;</div><div class='add'>+    int opcount = 0;</div><div class='add'>+    int moved = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    sock = priv-&gt;sock;</div><div class='add'>+</div><div class='add'>+    opvector = vector;</div><div class='add'>+    opcount = count;</div><div class='add'>+</div><div class='add'>+    if (bytes != NULL) {</div><div class='add'>+        *bytes = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (opcount &gt; 0) {</div><div class='add'>+        if (opvector-&gt;iov_len == 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "would have passed zero length to read/write");</div><div class='add'>+            ++opvector;</div><div class='add'>+            --opcount;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (priv-&gt;use_ssl &amp;&amp; !priv-&gt;ssl_ssl) {</div><div class='add'>+            /*</div><div class='add'>+             * We could end up here with priv-&gt;ssl_ssl still NULL</div><div class='add'>+             * if (a) the connection failed and (b) some fool</div><div class='add'>+             * called other socket functions anyway.  Demoting to</div><div class='add'>+             * non-SSL might be insecure, so just fail it outright.</div><div class='add'>+             */</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "### no priv-&gt;ssl_ssl yet; ret = -1;");</div><div class='add'>+        } else if (write) {</div><div class='add'>+            if (priv-&gt;use_ssl) {</div><div class='add'>+                ret = ssl_write_one(this, opvector-&gt;iov_base,</div><div class='add'>+                                    opvector-&gt;iov_len);</div><div class='add'>+            } else {</div><div class='add'>+                ret = sys_writev(sock, opvector, IOV_MIN(opcount));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (ret == 0 || (ret == -1 &amp;&amp; errno == EAGAIN)) {</div><div class='add'>+                /* done for now */</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            this-&gt;total_bytes_write += ret;</div><div class='add'>+        } else {</div><div class='add'>+            ret = __socket_cached_read(this, opvector, opcount);</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "EOF on socket (errno:%d:%s)",</div><div class='add'>+                       errno, strerror(errno));</div><div class='add'>+                errno = ENODATA;</div><div class='add'>+                ret = -1;</div><div class='add'>+            }</div><div class='add'>+            if (ret == -1 &amp;&amp; errno == EAGAIN) {</div><div class='add'>+                /* done for now */</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            this-&gt;total_bytes_read += ret;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while (opcount &gt; 0) {</div><div class='del'>-                if (opvector-&gt;iov_len == 0) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                               "would have passed zero length to read/write");</div><div class='del'>-                        ++opvector;</div><div class='del'>-                        --opcount;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (priv-&gt;use_ssl &amp;&amp; !priv-&gt;ssl_ssl) {</div><div class='del'>-                        /*</div><div class='del'>-                         * We could end up here with priv-&gt;ssl_ssl still NULL</div><div class='del'>-                         * if (a) the connection failed and (b) some fool</div><div class='del'>-                         * called other socket functions anyway.  Demoting to</div><div class='del'>-                         * non-SSL might be insecure, so just fail it outright.</div><div class='del'>-                         */</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "### no priv-&gt;ssl_ssl yet; ret = -1;");</div><div class='del'>-                } else if (write) {</div><div class='del'>-                        if (priv-&gt;use_ssl) {</div><div class='del'>-                                ret = ssl_write_one (this, opvector-&gt;iov_base,</div><div class='del'>-                                                     opvector-&gt;iov_len);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = sys_writev (sock, opvector, IOV_MIN(opcount));</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (ret == 0 || (ret == -1 &amp;&amp; errno == EAGAIN)) {</div><div class='del'>-                                /* done for now */</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        this-&gt;total_bytes_write += ret;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = __socket_cached_read (this, opvector, opcount);</div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "EOF on socket (errno:%d:%s)",</div><div class='del'>-                                        errno, strerror (errno));</div><div class='del'>-                                errno = ENODATA;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                        if (ret == -1 &amp;&amp; errno == EAGAIN) {</div><div class='del'>-                                /* done for now */</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        this-&gt;total_bytes_read += ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        /* Mostly due to 'umount' in client */</div><div class='del'>-</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "EOF from peer %s", this-&gt;peerinfo.identifier);</div><div class='del'>-                        opcount = -1;</div><div class='del'>-                        errno = ENOTCONN;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        if (errno == EINTR)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (__does_socket_rwv_error_need_logging (priv,</div><div class='del'>-                                                                  write)) {</div><div class='del'>-                                GF_LOG_OCCASIONALLY(priv-&gt;log_ctr, this-&gt;name,</div><div class='del'>-                                                    GF_LOG_WARNING,</div><div class='del'>-                                                    "%s on %s failed (%s)",</div><div class='del'>-                                                    write ? "writev":"readv",</div><div class='del'>-                                                    this-&gt;peerinfo.identifier,</div><div class='del'>-                                                    strerror (errno));</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (priv-&gt;use_ssl &amp;&amp; priv-&gt;ssl_ssl) {</div><div class='del'>-                                ssl_dump_error_stack(this-&gt;name);</div><div class='del'>-                        }</div><div class='del'>-                        opcount = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            /* Mostly due to 'umount' in client */</div><div class='ctx'> </div><div class='del'>-                if (bytes != NULL) {</div><div class='del'>-                        *bytes += ret;</div><div class='del'>-                }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "EOF from peer %s",</div><div class='add'>+                   this-&gt;peerinfo.identifier);</div><div class='add'>+            opcount = -1;</div><div class='add'>+            errno = ENOTCONN;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            if (errno == EINTR)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                moved = 0;</div><div class='add'>+            if (__does_socket_rwv_error_need_logging(priv, write)) {</div><div class='add'>+                GF_LOG_OCCASIONALLY(priv-&gt;log_ctr, this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                                    "%s on %s failed (%s)",</div><div class='add'>+                                    write ? "writev" : "readv",</div><div class='add'>+                                    this-&gt;peerinfo.identifier, strerror(errno));</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                while (moved &lt; ret) {</div><div class='del'>-                        if (!opcount) {</div><div class='del'>-                                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                       "ran out of iov, moved %d/%d",</div><div class='del'>-                                       moved, ret);</div><div class='del'>-                                goto ran_out;</div><div class='del'>-                        }</div><div class='del'>-                        if (!opvector[0].iov_len) {</div><div class='del'>-                                opvector++;</div><div class='del'>-                                opcount--;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        if ((ret - moved) &gt;= opvector[0].iov_len) {</div><div class='del'>-                                moved += opvector[0].iov_len;</div><div class='del'>-                                opvector++;</div><div class='del'>-                                opcount--;</div><div class='del'>-                        } else {</div><div class='del'>-                                opvector[0].iov_len -= (ret - moved);</div><div class='del'>-                                opvector[0].iov_base += (ret - moved);</div><div class='del'>-                                moved += (ret - moved);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (priv-&gt;use_ssl &amp;&amp; priv-&gt;ssl_ssl) {</div><div class='add'>+                ssl_dump_error_stack(this-&gt;name);</div><div class='add'>+            }</div><div class='add'>+            opcount = -1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if (bytes != NULL) {</div><div class='add'>+            *bytes += ret;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        moved = 0;</div><div class='add'>+</div><div class='add'>+        while (moved &lt; ret) {</div><div class='add'>+            if (!opcount) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "ran out of iov, moved %d/%d",</div><div class='add'>+                       moved, ret);</div><div class='add'>+                goto ran_out;</div><div class='add'>+            }</div><div class='add'>+            if (!opvector[0].iov_len) {</div><div class='add'>+                opvector++;</div><div class='add'>+                opcount--;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+            if ((ret - moved) &gt;= opvector[0].iov_len) {</div><div class='add'>+                moved += opvector[0].iov_len;</div><div class='add'>+                opvector++;</div><div class='add'>+                opcount--;</div><div class='add'>+            } else {</div><div class='add'>+                opvector[0].iov_len -= (ret - moved);</div><div class='add'>+                opvector[0].iov_base += (ret - moved);</div><div class='add'>+                moved += (ret - moved);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> ran_out:</div><div class='ctx'> </div><div class='del'>-        if (pending_vector)</div><div class='del'>-                *pending_vector = opvector;</div><div class='add'>+    if (pending_vector)</div><div class='add'>+        *pending_vector = opvector;</div><div class='ctx'> </div><div class='del'>-        if (pending_count)</div><div class='del'>-                *pending_count = opcount;</div><div class='add'>+    if (pending_count)</div><div class='add'>+        *pending_count = opcount;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return opcount;</div><div class='add'>+    return opcount;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_readv (rpc_transport_t *this, struct iovec *vector, int count,</div><div class='del'>-                struct iovec **pending_vector, int *pending_count,</div><div class='del'>-                size_t *bytes)</div><div class='add'>+__socket_readv(rpc_transport_t *this, struct iovec *vector, int count,</div><div class='add'>+               struct iovec **pending_vector, int *pending_count, size_t *bytes)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = __socket_rwv (this, vector, count,</div><div class='del'>-                            pending_vector, pending_count, bytes, 0);</div><div class='add'>+    ret = __socket_rwv(this, vector, count, pending_vector, pending_count,</div><div class='add'>+                       bytes, 0);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_writev (rpc_transport_t *this, struct iovec *vector, int count,</div><div class='del'>-                 struct iovec **pending_vector, int *pending_count)</div><div class='add'>+__socket_writev(rpc_transport_t *this, struct iovec *vector, int count,</div><div class='add'>+                struct iovec **pending_vector, int *pending_count)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = __socket_rwv (this, vector, count,</div><div class='del'>-                            pending_vector, pending_count, NULL, 1);</div><div class='add'>+    ret = __socket_rwv(this, vector, count, pending_vector, pending_count, NULL,</div><div class='add'>+                       1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_shutdown (rpc_transport_t *this)</div><div class='add'>+__socket_shutdown(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        socket_private_t *priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        priv-&gt;connected = -1;</div><div class='del'>-        ret = shutdown (priv-&gt;sock, SHUT_RDWR);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* its already disconnected.. no need to understand</div><div class='del'>-                   why it failed to shutdown in normal cases */</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "shutdown() returned %d. %s",</div><div class='del'>-                        ret, strerror (errno));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    socket_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    priv-&gt;connected = -1;</div><div class='add'>+    ret = shutdown(priv-&gt;sock, SHUT_RDWR);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* its already disconnected.. no need to understand</div><div class='add'>+           why it failed to shutdown in normal cases */</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "shutdown() returned %d. %s", ret,</div><div class='add'>+               strerror(errno));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_teardown_connection (rpc_transport_t *this)</div><div class='add'>+__socket_teardown_connection(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;use_ssl)</div><div class='del'>-                ssl_teardown_connection(priv);</div><div class='add'>+    if (priv-&gt;use_ssl)</div><div class='add'>+        ssl_teardown_connection(priv);</div><div class='ctx'> </div><div class='del'>-        ret = __socket_shutdown(this);</div><div class='add'>+    ret = __socket_shutdown(this);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_disconnect (rpc_transport_t *this)</div><div class='add'>+__socket_disconnect(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_TRACE, "disconnecting %p, sock=%d",</div><div class='del'>-                this, priv-&gt;sock);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_TRACE, "disconnecting %p, sock=%d", this,</div><div class='add'>+           priv-&gt;sock);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;sock != -1) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                  "tearing down socket connection");</div><div class='del'>-                ret = __socket_teardown_connection (this);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "__socket_teardown_connection () failed: %s",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;sock != -1) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                         "tearing down socket connection");</div><div class='add'>+        ret = __socket_teardown_connection(this);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "__socket_teardown_connection () failed: %s",</div><div class='add'>+                   strerror(errno));</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_server_bind (rpc_transport_t *this)</div><div class='add'>+__socket_server_bind(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        int               opt = 1;</div><div class='del'>-        int               reuse_check_sock = -1;</div><div class='del'>-        struct sockaddr_storage   unix_addr = {0};</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int opt = 1;</div><div class='add'>+    int reuse_check_sock = -1;</div><div class='add'>+    struct sockaddr_storage unix_addr = {0};</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = setsockopt (priv-&gt;sock, SOL_SOCKET, SO_REUSEADDR,</div><div class='del'>-                          &amp;opt, sizeof (opt));</div><div class='add'>+    ret = setsockopt(priv-&gt;sock, SOL_SOCKET, SO_REUSEADDR, &amp;opt, sizeof(opt));</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "setsockopt() for SO_REUSEADDR failed (%s)",</div><div class='del'>-                        strerror (errno));</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "setsockopt() for SO_REUSEADDR failed (%s)", strerror(errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* reuse-address doesn't work for unix type sockets */</div><div class='del'>-        if (AF_UNIX == SA (&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family) {</div><div class='del'>-                memcpy (&amp;unix_addr, SA (&amp;this-&gt;myinfo.sockaddr),</div><div class='del'>-                        this-&gt;myinfo.sockaddr_len);</div><div class='del'>-                reuse_check_sock = socket (AF_UNIX, SOCK_STREAM, 0);</div><div class='del'>-                if (reuse_check_sock &gt;= 0) {</div><div class='del'>-                        ret = connect (reuse_check_sock, SA (&amp;unix_addr),</div><div class='del'>-                                       this-&gt;myinfo.sockaddr_len);</div><div class='del'>-                        if ((ret == -1) &amp;&amp; (ECONNREFUSED == errno)) {</div><div class='del'>-                                sys_unlink (((struct sockaddr_un *)&amp;unix_addr)-&gt;sun_path);</div><div class='del'>-                        }</div><div class='del'>-                        sys_close (reuse_check_sock);</div><div class='del'>-                }</div><div class='add'>+    /* reuse-address doesn't work for unix type sockets */</div><div class='add'>+    if (AF_UNIX == SA(&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family) {</div><div class='add'>+        memcpy(&amp;unix_addr, SA(&amp;this-&gt;myinfo.sockaddr),</div><div class='add'>+               this-&gt;myinfo.sockaddr_len);</div><div class='add'>+        reuse_check_sock = socket(AF_UNIX, SOCK_STREAM, 0);</div><div class='add'>+        if (reuse_check_sock &gt;= 0) {</div><div class='add'>+            ret = connect(reuse_check_sock, SA(&amp;unix_addr),</div><div class='add'>+                          this-&gt;myinfo.sockaddr_len);</div><div class='add'>+            if ((ret == -1) &amp;&amp; (ECONNREFUSED == errno)) {</div><div class='add'>+                sys_unlink(((struct sockaddr_un *)&amp;unix_addr)-&gt;sun_path);</div><div class='add'>+            }</div><div class='add'>+            sys_close(reuse_check_sock);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = bind (priv-&gt;sock, (struct sockaddr *)&amp;this-&gt;myinfo.sockaddr,</div><div class='del'>-                    this-&gt;myinfo.sockaddr_len);</div><div class='add'>+    ret = bind(priv-&gt;sock, (struct sockaddr *)&amp;this-&gt;myinfo.sockaddr,</div><div class='add'>+               this-&gt;myinfo.sockaddr_len);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "binding to %s failed: %s",</div><div class='del'>-                        this-&gt;myinfo.identifier, strerror (errno));</div><div class='del'>-                if (errno == EADDRINUSE) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Port is already in use");</div><div class='del'>-</div><div class='del'>-                        ret = -EADDRINUSE;</div><div class='del'>-                }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "binding to %s failed: %s",</div><div class='add'>+               this-&gt;myinfo.identifier, strerror(errno));</div><div class='add'>+        if (errno == EADDRINUSE) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "Port is already in use");</div><div class='add'>+</div><div class='add'>+            ret = -EADDRINUSE;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_nonblock (int fd)</div><div class='add'>+__socket_nonblock(int fd)</div><div class='ctx'> {</div><div class='del'>-        int flags = 0;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        flags = fcntl (fd, F_GETFL);</div><div class='add'>+    flags = fcntl(fd, F_GETFL);</div><div class='ctx'> </div><div class='del'>-        if (flags != -1)</div><div class='del'>-                ret = fcntl (fd, F_SETFL, flags | O_NONBLOCK);</div><div class='add'>+    if (flags != -1)</div><div class='add'>+        ret = fcntl(fd, F_SETFL, flags | O_NONBLOCK);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_nodelay (int fd)</div><div class='add'>+__socket_nodelay(int fd)</div><div class='ctx'> {</div><div class='del'>-        int     on = 1;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int on = 1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = setsockopt (fd, IPPROTO_TCP, TCP_NODELAY,</div><div class='del'>-                          &amp;on, sizeof (on));</div><div class='del'>-        if (!ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "NODELAY enabled for socket %d", fd);</div><div class='add'>+    ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &amp;on, sizeof(on));</div><div class='add'>+    if (!ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_TRACE, "NODELAY enabled for socket %d", fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_keepalive (int fd, int family, int keepaliveintvl,</div><div class='del'>-                    int keepaliveidle, int keepalivecnt, int timeout)</div><div class='add'>+__socket_keepalive(int fd, int family, int keepaliveintvl, int keepaliveidle,</div><div class='add'>+                   int keepalivecnt, int timeout)</div><div class='ctx'> {</div><div class='del'>-        int     on = 1;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int on = 1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #if defined(TCP_USER_TIMEOUT)</div><div class='del'>-        int     timeout_ms = timeout * 1000;</div><div class='add'>+    int timeout_ms = timeout * 1000;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = setsockopt (fd, SOL_SOCKET, SO_KEEPALIVE, &amp;on, sizeof (on));</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("socket", GF_LOG_WARNING,</div><div class='del'>-                        "failed to set keep alive option on socket %d", fd);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &amp;on, sizeof(on));</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("socket", GF_LOG_WARNING,</div><div class='add'>+               "failed to set keep alive option on socket %d", fd);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (keepaliveintvl == GF_USE_DEFAULT_KEEPALIVE)</div><div class='del'>-                goto done;</div><div class='add'>+    if (keepaliveintvl == GF_USE_DEFAULT_KEEPALIVE)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='ctx'> #if !defined(GF_LINUX_HOST_OS) &amp;&amp; !defined(__NetBSD__)</div><div class='ctx'> #if defined(GF_SOLARIS_HOST_OS) || defined(__FreeBSD__)</div><div class='del'>-        ret = setsockopt (fd, SOL_SOCKET, SO_KEEPALIVE, &amp;keepaliveintvl,</div><div class='del'>-                          sizeof (keepaliveintvl));</div><div class='add'>+    ret = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &amp;keepaliveintvl,</div><div class='add'>+                     sizeof(keepaliveintvl));</div><div class='ctx'> #else</div><div class='del'>-        ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPALIVE, &amp;keepaliveintvl,</div><div class='del'>-                          sizeof (keepaliveintvl));</div><div class='add'>+    ret = setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &amp;keepaliveintvl,</div><div class='add'>+                     sizeof(keepaliveintvl));</div><div class='ctx'> #endif</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("socket", GF_LOG_WARNING,</div><div class='del'>-                        "failed to set keep alive interval on socket %d", fd);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("socket", GF_LOG_WARNING,</div><div class='add'>+               "failed to set keep alive interval on socket %d", fd);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> #else</div><div class='del'>-        if (family != AF_INET &amp;&amp; family != AF_INET6)</div><div class='del'>-                goto done;</div><div class='add'>+    if (family != AF_INET &amp;&amp; family != AF_INET6)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPIDLE, &amp;keepaliveidle,</div><div class='del'>-                          sizeof (keepaliveidle));</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("socket", GF_LOG_WARNING,</div><div class='del'>-                        "failed to set keep idle %d on socket %d, %s",</div><div class='del'>-                        keepaliveidle, fd, strerror(errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = setsockopt (fd, IPPROTO_TCP , TCP_KEEPINTVL, &amp;keepaliveintvl,</div><div class='del'>-                          sizeof (keepaliveintvl));</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("socket", GF_LOG_WARNING,</div><div class='del'>-                        "failed to set keep interval %d on socket %d, %s",</div><div class='del'>-                        keepaliveintvl, fd, strerror(errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &amp;keepaliveidle,</div><div class='add'>+                     sizeof(keepaliveidle));</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("socket", GF_LOG_WARNING,</div><div class='add'>+               "failed to set keep idle %d on socket %d, %s", keepaliveidle, fd,</div><div class='add'>+               strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &amp;keepaliveintvl,</div><div class='add'>+                     sizeof(keepaliveintvl));</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("socket", GF_LOG_WARNING,</div><div class='add'>+               "failed to set keep interval %d on socket %d, %s",</div><div class='add'>+               keepaliveintvl, fd, strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if defined(TCP_USER_TIMEOUT)</div><div class='del'>-        if (timeout_ms &lt; 0)</div><div class='del'>-                goto done;</div><div class='del'>-        ret = setsockopt (fd, IPPROTO_TCP , TCP_USER_TIMEOUT, &amp;timeout_ms,</div><div class='del'>-                          sizeof (timeout_ms));</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("socket", GF_LOG_WARNING, "failed to set "</div><div class='del'>-                        "TCP_USER_TIMEOUT %d on socket %d, %s", timeout_ms, fd,</div><div class='del'>-                        strerror(errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (timeout_ms &lt; 0)</div><div class='add'>+        goto done;</div><div class='add'>+    ret = setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &amp;timeout_ms,</div><div class='add'>+                     sizeof(timeout_ms));</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("socket", GF_LOG_WARNING,</div><div class='add'>+               "failed to set "</div><div class='add'>+               "TCP_USER_TIMEOUT %d on socket %d, %s",</div><div class='add'>+               timeout_ms, fd, strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> #if defined(TCP_KEEPCNT)</div><div class='del'>-        ret = setsockopt (fd, IPPROTO_TCP, TCP_KEEPCNT, &amp;keepalivecnt,</div><div class='del'>-                          sizeof (keepalivecnt));</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log ("socket", GF_LOG_WARNING, "failed to set "</div><div class='del'>-                        "TCP_KEEPCNT %d on socket %d, %s", keepalivecnt, fd,</div><div class='del'>-                        strerror(errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &amp;keepalivecnt,</div><div class='add'>+                     sizeof(keepalivecnt));</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log("socket", GF_LOG_WARNING,</div><div class='add'>+               "failed to set "</div><div class='add'>+               "TCP_KEEPCNT %d on socket %d, %s",</div><div class='add'>+               keepalivecnt, fd, strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_TRACE, "Keep-alive enabled for socket: %d, "</div><div class='del'>-                "(idle: %d, interval: %d, max-probes: %d, timeout: %d)",</div><div class='del'>-                fd, keepaliveidle, keepaliveintvl, keepalivecnt,</div><div class='del'>-                timeout);</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_TRACE,</div><div class='add'>+           "Keep-alive enabled for socket: %d, "</div><div class='add'>+           "(idle: %d, interval: %d, max-probes: %d, timeout: %d)",</div><div class='add'>+           fd, keepaliveidle, keepaliveintvl, keepalivecnt, timeout);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_connect_finish (int fd)</div><div class='add'>+__socket_connect_finish(int fd)</div><div class='ctx'> {</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        int       optval = 0;</div><div class='del'>-        socklen_t optlen = sizeof (int);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int optval = 0;</div><div class='add'>+    socklen_t optlen = sizeof(int);</div><div class='ctx'> </div><div class='del'>-        ret = getsockopt (fd, SOL_SOCKET, SO_ERROR, (void *)&amp;optval, &amp;optlen);</div><div class='add'>+    ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&amp;optval, &amp;optlen);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0 &amp;&amp; optval) {</div><div class='del'>-                errno = optval;</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0 &amp;&amp; optval) {</div><div class='add'>+        errno = optval;</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__socket_reset (rpc_transport_t *this)</div><div class='add'>+__socket_reset(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* TODO: use mem-pool on incoming data */</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;incoming.iobref) {</div><div class='del'>-                iobref_unref (priv-&gt;incoming.iobref);</div><div class='del'>-                priv-&gt;incoming.iobref = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;incoming.iobuf) {</div><div class='del'>-                iobuf_unref (priv-&gt;incoming.iobuf);</div><div class='del'>-                priv-&gt;incoming.iobuf = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (priv-&gt;incoming.request_info);</div><div class='del'>-</div><div class='del'>-        memset (&amp;priv-&gt;incoming, 0, sizeof (priv-&gt;incoming));</div><div class='del'>-</div><div class='del'>-        event_unregister_close (this-&gt;ctx-&gt;event_pool, priv-&gt;sock, priv-&gt;idx);</div><div class='del'>-</div><div class='del'>-        priv-&gt;sock = -1;</div><div class='del'>-        priv-&gt;idx = -1;</div><div class='del'>-        priv-&gt;connected = -1;</div><div class='del'>-        priv-&gt;ssl_connected = _gf_false;</div><div class='del'>-        priv-&gt;ssl_accepted = _gf_false;</div><div class='del'>-        priv-&gt;ssl_context_created = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;ssl_private_key) {</div><div class='del'>-                GF_FREE (priv-&gt;ssl_private_key);</div><div class='del'>-                priv-&gt;ssl_private_key = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (priv-&gt;ssl_own_cert) {</div><div class='del'>-                GF_FREE (priv-&gt;ssl_own_cert);</div><div class='del'>-                priv-&gt;ssl_own_cert = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (priv-&gt;ssl_ca_list) {</div><div class='del'>-                GF_FREE (priv-&gt;ssl_ca_list);</div><div class='del'>-                priv-&gt;ssl_ca_list = NULL;</div><div class='del'>-        }</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* TODO: use mem-pool on incoming data */</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;incoming.iobref) {</div><div class='add'>+        iobref_unref(priv-&gt;incoming.iobref);</div><div class='add'>+        priv-&gt;incoming.iobref = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;incoming.iobuf) {</div><div class='add'>+        iobuf_unref(priv-&gt;incoming.iobuf);</div><div class='add'>+        priv-&gt;incoming.iobuf = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(priv-&gt;incoming.request_info);</div><div class='add'>+</div><div class='add'>+    memset(&amp;priv-&gt;incoming, 0, sizeof(priv-&gt;incoming));</div><div class='add'>+</div><div class='add'>+    event_unregister_close(this-&gt;ctx-&gt;event_pool, priv-&gt;sock, priv-&gt;idx);</div><div class='add'>+</div><div class='add'>+    priv-&gt;sock = -1;</div><div class='add'>+    priv-&gt;idx = -1;</div><div class='add'>+    priv-&gt;connected = -1;</div><div class='add'>+    priv-&gt;ssl_connected = _gf_false;</div><div class='add'>+    priv-&gt;ssl_accepted = _gf_false;</div><div class='add'>+    priv-&gt;ssl_context_created = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;ssl_private_key) {</div><div class='add'>+        GF_FREE(priv-&gt;ssl_private_key);</div><div class='add'>+        priv-&gt;ssl_private_key = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (priv-&gt;ssl_own_cert) {</div><div class='add'>+        GF_FREE(priv-&gt;ssl_own_cert);</div><div class='add'>+        priv-&gt;ssl_own_cert = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (priv-&gt;ssl_ca_list) {</div><div class='add'>+        GF_FREE(priv-&gt;ssl_ca_list);</div><div class='add'>+        priv-&gt;ssl_ca_list = NULL;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-socket_set_lastfrag (uint32_t *fragsize) {</div><div class='del'>-        (*fragsize) |= 0x80000000U;</div><div class='add'>+socket_set_lastfrag(uint32_t *fragsize)</div><div class='add'>+{</div><div class='add'>+    (*fragsize) |= 0x80000000U;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-socket_set_frag_header_size (uint32_t size, char *haddr)</div><div class='add'>+socket_set_frag_header_size(uint32_t size, char *haddr)</div><div class='ctx'> {</div><div class='del'>-        size = htonl (size);</div><div class='del'>-        memcpy (haddr, &amp;size, sizeof (size));</div><div class='add'>+    size = htonl(size);</div><div class='add'>+    memcpy(haddr, &amp;size, sizeof(size));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-socket_set_last_frag_header_size (uint32_t size, char *haddr)</div><div class='add'>+socket_set_last_frag_header_size(uint32_t size, char *haddr)</div><div class='ctx'> {</div><div class='del'>-        socket_set_lastfrag (&amp;size);</div><div class='del'>-        socket_set_frag_header_size (size, haddr);</div><div class='add'>+    socket_set_lastfrag(&amp;size);</div><div class='add'>+    socket_set_frag_header_size(size, haddr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct ioq *</div><div class='del'>-__socket_ioq_new (rpc_transport_t *this, rpc_transport_msg_t *msg)</div><div class='add'>+__socket_ioq_new(rpc_transport_t *this, rpc_transport_msg_t *msg)</div><div class='ctx'> {</div><div class='del'>-        struct ioq       *entry = NULL;</div><div class='del'>-        int               count = 0;</div><div class='del'>-        uint32_t          size  = 0;</div><div class='add'>+    struct ioq *entry = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    uint32_t size = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='ctx'> </div><div class='del'>-        /* TODO: use mem-pool */</div><div class='del'>-        entry = GF_CALLOC (1, sizeof (*entry), gf_common_mt_ioq);</div><div class='del'>-        if (!entry)</div><div class='del'>-                return NULL;</div><div class='add'>+    /* TODO: use mem-pool */</div><div class='add'>+    entry = GF_CALLOC(1, sizeof(*entry), gf_common_mt_ioq);</div><div class='add'>+    if (!entry)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        count = msg-&gt;rpchdrcount + msg-&gt;proghdrcount + msg-&gt;progpayloadcount;</div><div class='add'>+    count = msg-&gt;rpchdrcount + msg-&gt;proghdrcount + msg-&gt;progpayloadcount;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (count &lt;= (MAX_IOVEC - 1));</div><div class='add'>+    GF_ASSERT(count &lt;= (MAX_IOVEC - 1));</div><div class='ctx'> </div><div class='del'>-        size = iov_length (msg-&gt;rpchdr, msg-&gt;rpchdrcount)</div><div class='del'>-                + iov_length (msg-&gt;proghdr, msg-&gt;proghdrcount)</div><div class='del'>-                + iov_length (msg-&gt;progpayload, msg-&gt;progpayloadcount);</div><div class='add'>+    size = iov_length(msg-&gt;rpchdr, msg-&gt;rpchdrcount) +</div><div class='add'>+           iov_length(msg-&gt;proghdr, msg-&gt;proghdrcount) +</div><div class='add'>+           iov_length(msg-&gt;progpayload, msg-&gt;progpayloadcount);</div><div class='ctx'> </div><div class='del'>-        if (size &gt; RPC_MAX_FRAGMENT_SIZE) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "msg size (%u) bigger than the maximum allowed size on "</div><div class='del'>-                        "sockets (%u)", size, RPC_MAX_FRAGMENT_SIZE);</div><div class='del'>-                GF_FREE (entry);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (size &gt; RPC_MAX_FRAGMENT_SIZE) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "msg size (%u) bigger than the maximum allowed size on "</div><div class='add'>+               "sockets (%u)",</div><div class='add'>+               size, RPC_MAX_FRAGMENT_SIZE);</div><div class='add'>+        GF_FREE(entry);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        socket_set_last_frag_header_size (size, (char *)&amp;entry-&gt;fraghdr);</div><div class='add'>+    socket_set_last_frag_header_size(size, (char *)&amp;entry-&gt;fraghdr);</div><div class='ctx'> </div><div class='del'>-        entry-&gt;vector[0].iov_base = (char *)&amp;entry-&gt;fraghdr;</div><div class='del'>-        entry-&gt;vector[0].iov_len = sizeof (entry-&gt;fraghdr);</div><div class='del'>-        entry-&gt;count = 1;</div><div class='add'>+    entry-&gt;vector[0].iov_base = (char *)&amp;entry-&gt;fraghdr;</div><div class='add'>+    entry-&gt;vector[0].iov_len = sizeof(entry-&gt;fraghdr);</div><div class='add'>+    entry-&gt;count = 1;</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;rpchdr != NULL) {</div><div class='del'>-                memcpy (&amp;entry-&gt;vector[1], msg-&gt;rpchdr,</div><div class='del'>-                        sizeof (struct iovec) * msg-&gt;rpchdrcount);</div><div class='del'>-                entry-&gt;count += msg-&gt;rpchdrcount;</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;rpchdr != NULL) {</div><div class='add'>+        memcpy(&amp;entry-&gt;vector[1], msg-&gt;rpchdr,</div><div class='add'>+               sizeof(struct iovec) * msg-&gt;rpchdrcount);</div><div class='add'>+        entry-&gt;count += msg-&gt;rpchdrcount;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;proghdr != NULL) {</div><div class='del'>-                memcpy (&amp;entry-&gt;vector[entry-&gt;count], msg-&gt;proghdr,</div><div class='del'>-                        sizeof (struct iovec) * msg-&gt;proghdrcount);</div><div class='del'>-                entry-&gt;count += msg-&gt;proghdrcount;</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;proghdr != NULL) {</div><div class='add'>+        memcpy(&amp;entry-&gt;vector[entry-&gt;count], msg-&gt;proghdr,</div><div class='add'>+               sizeof(struct iovec) * msg-&gt;proghdrcount);</div><div class='add'>+        entry-&gt;count += msg-&gt;proghdrcount;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;progpayload != NULL) {</div><div class='del'>-                memcpy (&amp;entry-&gt;vector[entry-&gt;count], msg-&gt;progpayload,</div><div class='del'>-                        sizeof (struct iovec) * msg-&gt;progpayloadcount);</div><div class='del'>-                entry-&gt;count += msg-&gt;progpayloadcount;</div><div class='del'>-        }</div><div class='add'>+    if (msg-&gt;progpayload != NULL) {</div><div class='add'>+        memcpy(&amp;entry-&gt;vector[entry-&gt;count], msg-&gt;progpayload,</div><div class='add'>+               sizeof(struct iovec) * msg-&gt;progpayloadcount);</div><div class='add'>+        entry-&gt;count += msg-&gt;progpayloadcount;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        entry-&gt;pending_vector = entry-&gt;vector;</div><div class='del'>-        entry-&gt;pending_count  = entry-&gt;count;</div><div class='add'>+    entry-&gt;pending_vector = entry-&gt;vector;</div><div class='add'>+    entry-&gt;pending_count = entry-&gt;count;</div><div class='ctx'> </div><div class='del'>-        if (msg-&gt;iobref != NULL)</div><div class='del'>-                entry-&gt;iobref = iobref_ref (msg-&gt;iobref);</div><div class='add'>+    if (msg-&gt;iobref != NULL)</div><div class='add'>+        entry-&gt;iobref = iobref_ref(msg-&gt;iobref);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;entry-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entry-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return entry;</div><div class='add'>+    return entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__socket_ioq_entry_free (struct ioq *entry)</div><div class='add'>+__socket_ioq_entry_free(struct ioq *entry)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", entry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", entry, out);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;entry-&gt;list);</div><div class='del'>-        if (entry-&gt;iobref)</div><div class='del'>-                iobref_unref (entry-&gt;iobref);</div><div class='add'>+    list_del_init(&amp;entry-&gt;list);</div><div class='add'>+    if (entry-&gt;iobref)</div><div class='add'>+        iobref_unref(entry-&gt;iobref);</div><div class='ctx'> </div><div class='del'>-        /* TODO: use mem-pool */</div><div class='del'>-        GF_FREE (entry);</div><div class='add'>+    /* TODO: use mem-pool */</div><div class='add'>+    GF_FREE(entry);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__socket_ioq_flush (rpc_transport_t *this)</div><div class='add'>+__socket_ioq_flush(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        struct ioq       *entry = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    struct ioq *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;priv-&gt;ioq)) {</div><div class='del'>-                entry = priv-&gt;ioq_next;</div><div class='del'>-                __socket_ioq_entry_free (entry);</div><div class='del'>-        }</div><div class='add'>+    while (!list_empty(&amp;priv-&gt;ioq)) {</div><div class='add'>+        entry = priv-&gt;ioq_next;</div><div class='add'>+        __socket_ioq_entry_free(entry);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_ioq_churn_entry (rpc_transport_t *this, struct ioq *entry, int direct)</div><div class='add'>+__socket_ioq_churn_entry(rpc_transport_t *this, struct ioq *entry, int direct)</div><div class='ctx'> {</div><div class='del'>-        int               ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = __socket_writev (this, entry-&gt;pending_vector,</div><div class='del'>-                               entry-&gt;pending_count,</div><div class='del'>-                               &amp;entry-&gt;pending_vector,</div><div class='del'>-                               &amp;entry-&gt;pending_count);</div><div class='add'>+    ret = __socket_writev(this, entry-&gt;pending_vector, entry-&gt;pending_count,</div><div class='add'>+                          &amp;entry-&gt;pending_vector, &amp;entry-&gt;pending_count);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                /* current entry was completely written */</div><div class='del'>-                GF_ASSERT (entry-&gt;pending_count == 0);</div><div class='del'>-                __socket_ioq_entry_free (entry);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        /* current entry was completely written */</div><div class='add'>+        GF_ASSERT(entry-&gt;pending_count == 0);</div><div class='add'>+        __socket_ioq_entry_free(entry);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_ioq_churn (rpc_transport_t *this)</div><div class='add'>+__socket_ioq_churn(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        struct ioq       *entry = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct ioq *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;priv-&gt;ioq)) {</div><div class='del'>-                /* pick next entry */</div><div class='del'>-                entry = priv-&gt;ioq_next;</div><div class='add'>+    while (!list_empty(&amp;priv-&gt;ioq)) {</div><div class='add'>+        /* pick next entry */</div><div class='add'>+        entry = priv-&gt;ioq_next;</div><div class='ctx'> </div><div class='del'>-                ret = __socket_ioq_churn_entry (this, entry, 0);</div><div class='add'>+        ret = __socket_ioq_churn_entry(this, entry, 0);</div><div class='ctx'> </div><div class='del'>-                if (ret != 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        if (ret != 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;priv-&gt;ioq)) {</div><div class='del'>-                /* all pending writes done, not interested in POLLOUT */</div><div class='del'>-                priv-&gt;idx = event_select_on (this-&gt;ctx-&gt;event_pool,</div><div class='del'>-                                             priv-&gt;sock, priv-&gt;idx, -1, 0);</div><div class='del'>-        }</div><div class='add'>+    if (list_empty(&amp;priv-&gt;ioq)) {</div><div class='add'>+        /* all pending writes done, not interested in POLLOUT */</div><div class='add'>+        priv-&gt;idx = event_select_on(this-&gt;ctx-&gt;event_pool, priv-&gt;sock,</div><div class='add'>+                                    priv-&gt;idx, -1, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-socket_event_poll_err (rpc_transport_t *this, int gen, int idx)</div><div class='add'>+socket_event_poll_err(rpc_transport_t *this, int gen, int idx)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv          = NULL;</div><div class='del'>-        gf_boolean_t      socket_closed = _gf_false;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t socket_closed = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                if ((priv-&gt;gen == gen) &amp;&amp; (priv-&gt;idx == idx)</div><div class='del'>-                    &amp;&amp; (priv-&gt;sock != -1)) {</div><div class='del'>-                        __socket_ioq_flush (this);</div><div class='del'>-                        __socket_reset (this);</div><div class='del'>-                        socket_closed = _gf_true;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        if ((priv-&gt;gen == gen) &amp;&amp; (priv-&gt;idx == idx) &amp;&amp; (priv-&gt;sock != -1)) {</div><div class='add'>+            __socket_ioq_flush(this);</div><div class='add'>+            __socket_reset(this);</div><div class='add'>+            socket_closed = _gf_true;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='del'>-</div><div class='del'>-        if (socket_closed) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;notify.lock);</div><div class='del'>-                {</div><div class='del'>-                        while (priv-&gt;notify.in_progress)</div><div class='del'>-                                pthread_cond_wait (&amp;priv-&gt;notify.cond,</div><div class='del'>-                                                   &amp;priv-&gt;notify.lock);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;notify.lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='del'>-                rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);</div><div class='add'>+    if (socket_closed) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;notify.lock);</div><div class='add'>+        {</div><div class='add'>+            while (priv-&gt;notify.in_progress)</div><div class='add'>+                pthread_cond_wait(&amp;priv-&gt;notify.cond, &amp;priv-&gt;notify.lock);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;notify.lock);</div><div class='add'>+</div><div class='add'>+        rpc_transport_notify(this, RPC_TRANSPORT_DISCONNECT, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return socket_closed;</div><div class='add'>+    return socket_closed;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_event_poll_out (rpc_transport_t *this)</div><div class='add'>+socket_event_poll_out(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        int               ret = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;connected == 1) {</div><div class='del'>-                        ret = __socket_ioq_churn (this);</div><div class='del'>-</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "__socket_ioq_churn returned -1; "</div><div class='del'>-                                        "disconnecting socket");</div><div class='del'>-                                __socket_disconnect (this);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;connected == 1) {</div><div class='add'>+            ret = __socket_ioq_churn(this);</div><div class='add'>+</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "__socket_ioq_churn returned -1; "</div><div class='add'>+                       "disconnecting socket");</div><div class='add'>+                __socket_disconnect(this);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = rpc_transport_notify (this, RPC_TRANSPORT_MSG_SENT, NULL);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = rpc_transport_notify(this, RPC_TRANSPORT_MSG_SENT, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_read_simple_msg (rpc_transport_t *this)</div><div class='add'>+__socket_read_simple_msg(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int                           ret            = 0;</div><div class='del'>-        uint32_t                      remaining_size = 0;</div><div class='del'>-        size_t                        bytes_read     = 0;</div><div class='del'>-        socket_private_t             *priv           = NULL;</div><div class='del'>-        struct gf_sock_incoming      *in             = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag           = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t remaining_size = 0;</div><div class='add'>+    size_t bytes_read = 0;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        switch (frag-&gt;simple_state) {</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='ctx'> </div><div class='add'>+    switch (frag-&gt;simple_state) {</div><div class='ctx'>         case SP_STATE_SIMPLE_MSG_INIT:</div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, remaining_size);</div><div class='add'>+            __socket_proto_init_pending(priv, remaining_size);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;simple_state = SP_STATE_READING_SIMPLE_MSG;</div><div class='add'>+            frag-&gt;simple_state = SP_STATE_READING_SIMPLE_MSG;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_SIMPLE_MSG:</div><div class='del'>-                ret = 0;</div><div class='add'>+            ret = 0;</div><div class='ctx'> </div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='ctx'> </div><div class='del'>-                if (remaining_size &gt; 0) {</div><div class='del'>-                        ret = __socket_readv (this,</div><div class='del'>-                                              in-&gt;pending_vector, 1,</div><div class='del'>-                                              &amp;in-&gt;pending_vector,</div><div class='del'>-                                              &amp;in-&gt;pending_count,</div><div class='del'>-                                              &amp;bytes_read);</div><div class='del'>-                }</div><div class='add'>+            if (remaining_size &gt; 0) {</div><div class='add'>+                ret = __socket_readv(this, in-&gt;pending_vector, 1,</div><div class='add'>+                                     &amp;in-&gt;pending_vector, &amp;in-&gt;pending_count,</div><div class='add'>+                                     &amp;bytes_read);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "reading from socket failed. Error (%s), "</div><div class='del'>-                                "peer (%s)", strerror (errno),</div><div class='del'>-                                this-&gt;peerinfo.identifier);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "reading from socket failed. Error (%s), "</div><div class='add'>+                       "peer (%s)",</div><div class='add'>+                       strerror(errno), this-&gt;peerinfo.identifier);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                frag-&gt;bytes_read += bytes_read;</div><div class='del'>-                frag-&gt;fragcurrent += bytes_read;</div><div class='add'>+            frag-&gt;bytes_read += bytes_read;</div><div class='add'>+            frag-&gt;fragcurrent += bytes_read;</div><div class='ctx'> </div><div class='del'>-                if (ret &gt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "partial read on non-blocking socket.");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (ret &gt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "partial read on non-blocking socket.");</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        frag-&gt;simple_state =  SP_STATE_SIMPLE_MSG_INIT;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                frag-&gt;simple_state = SP_STATE_SIMPLE_MSG_INIT;</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_read_simple_request (rpc_transport_t *this)</div><div class='add'>+__socket_read_simple_request(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        return __socket_read_simple_msg (this);</div><div class='add'>+    return __socket_read_simple_msg(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #define rpc_cred_addr(buf) (buf + RPC_MSGTYPE_SIZE + RPC_CALL_BODY_SIZE - 4)</div><div class='ctx'> </div><div class='ctx'> #define rpc_verf_addr(fragcurrent) (fragcurrent - 4)</div><div class='hunk'>@@ -1464,1875 +1420,1810 @@ __socket_read_simple_request (rpc_transport_t *this)</div><div class='ctx'> #define rpc_procnum_addr(buf) (buf + RPC_MSGTYPE_SIZE + 12)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_read_vectored_request (rpc_transport_t *this, rpcsvc_vector_sizer vector_sizer)</div><div class='add'>+__socket_read_vectored_request(rpc_transport_t *this,</div><div class='add'>+                               rpcsvc_vector_sizer vector_sizer)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv                   = NULL;</div><div class='del'>-        int               ret                    = 0;</div><div class='del'>-        uint32_t          credlen                = 0, verflen = 0;</div><div class='del'>-        char             *addr                   = NULL;</div><div class='del'>-        struct iobuf     *iobuf                  = NULL;</div><div class='del'>-        uint32_t          remaining_size         = 0;</div><div class='del'>-        ssize_t           readsize               = 0;</div><div class='del'>-        size_t            size                   = 0;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-        sp_rpcfrag_request_state_t   *request    = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-        request = &amp;frag-&gt;call_body.request;</div><div class='del'>-</div><div class='del'>-        switch (request-&gt;vector_state) {</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t credlen = 0, verflen = 0;</div><div class='add'>+    char *addr = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    uint32_t remaining_size = 0;</div><div class='add'>+    ssize_t readsize = 0;</div><div class='add'>+    size_t size = 0;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+    sp_rpcfrag_request_state_t *request = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+    request = &amp;frag-&gt;call_body.request;</div><div class='add'>+</div><div class='add'>+    switch (request-&gt;vector_state) {</div><div class='ctx'>         case SP_STATE_VECTORED_REQUEST_INIT:</div><div class='del'>-                request-&gt;vector_sizer_state = 0;</div><div class='add'>+            request-&gt;vector_sizer_state = 0;</div><div class='ctx'> </div><div class='del'>-                addr = rpc_cred_addr (iobuf_ptr (in-&gt;iobuf));</div><div class='add'>+            addr = rpc_cred_addr(iobuf_ptr(in-&gt;iobuf));</div><div class='ctx'> </div><div class='del'>-                /* also read verf flavour and verflen */</div><div class='del'>-                credlen = ntoh32 (*((uint32_t *)addr))</div><div class='del'>-                        +  RPC_AUTH_FLAVOUR_N_LENGTH_SIZE;</div><div class='add'>+            /* also read verf flavour and verflen */</div><div class='add'>+            credlen = ntoh32(*((uint32_t *)addr)) +</div><div class='add'>+                      RPC_AUTH_FLAVOUR_N_LENGTH_SIZE;</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, credlen);</div><div class='add'>+            __socket_proto_init_pending(priv, credlen);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READING_CREDBYTES;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READING_CREDBYTES;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_CREDBYTES:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READ_CREDBYTES;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READ_CREDBYTES;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_CREDBYTES:</div><div class='del'>-                addr = rpc_verf_addr (frag-&gt;fragcurrent);</div><div class='del'>-                verflen = ntoh32 (*((uint32_t *)addr));</div><div class='add'>+            addr = rpc_verf_addr(frag-&gt;fragcurrent);</div><div class='add'>+            verflen = ntoh32(*((uint32_t *)addr));</div><div class='ctx'> </div><div class='del'>-                if (verflen == 0) {</div><div class='del'>-                        request-&gt;vector_state = SP_STATE_READ_VERFBYTES;</div><div class='del'>-                        goto sp_state_read_verfbytes;</div><div class='del'>-                }</div><div class='del'>-                __socket_proto_init_pending (priv, verflen);</div><div class='add'>+            if (verflen == 0) {</div><div class='add'>+                request-&gt;vector_state = SP_STATE_READ_VERFBYTES;</div><div class='add'>+                goto sp_state_read_verfbytes;</div><div class='add'>+            }</div><div class='add'>+            __socket_proto_init_pending(priv, verflen);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READING_VERFBYTES;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READING_VERFBYTES;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_VERFBYTES:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READ_VERFBYTES;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READ_VERFBYTES;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_VERFBYTES:</div><div class='del'>-sp_state_read_verfbytes:</div><div class='del'>-                /* set the base_addr 'persistently' across multiple calls</div><div class='del'>-                   into the state machine */</div><div class='del'>-                in-&gt;proghdr_base_addr = frag-&gt;fragcurrent;</div><div class='add'>+        sp_state_read_verfbytes:</div><div class='add'>+            /* set the base_addr 'persistently' across multiple calls</div><div class='add'>+               into the state machine */</div><div class='add'>+            in-&gt;proghdr_base_addr = frag-&gt;fragcurrent;</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_sizer_state =</div><div class='del'>-                        vector_sizer (request-&gt;vector_sizer_state,</div><div class='del'>-                                      &amp;readsize, in-&gt;proghdr_base_addr,</div><div class='del'>-                                      frag-&gt;fragcurrent);</div><div class='del'>-                __socket_proto_init_pending (priv, readsize);</div><div class='add'>+            request-&gt;vector_sizer_state = vector_sizer(</div><div class='add'>+                request-&gt;vector_sizer_state, &amp;readsize, in-&gt;proghdr_base_addr,</div><div class='add'>+                frag-&gt;fragcurrent);</div><div class='add'>+            __socket_proto_init_pending(priv, readsize);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READING_PROGHDR;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READING_PROGHDR;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROGHDR:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READ_PROGHDR;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READ_PROGHDR;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_PROGHDR:</div><div class='del'>-sp_state_read_proghdr:</div><div class='del'>-                request-&gt;vector_sizer_state =</div><div class='del'>-                        vector_sizer (request-&gt;vector_sizer_state,</div><div class='del'>-                                      &amp;readsize, in-&gt;proghdr_base_addr,</div><div class='del'>-                                      frag-&gt;fragcurrent);</div><div class='del'>-                if (readsize == 0) {</div><div class='del'>-                        request-&gt;vector_state = SP_STATE_READ_PROGHDR_XDATA;</div><div class='del'>-                        goto sp_state_read_proghdr_xdata;</div><div class='del'>-                }</div><div class='add'>+        sp_state_read_proghdr:</div><div class='add'>+            request-&gt;vector_sizer_state = vector_sizer(</div><div class='add'>+                request-&gt;vector_sizer_state, &amp;readsize, in-&gt;proghdr_base_addr,</div><div class='add'>+                frag-&gt;fragcurrent);</div><div class='add'>+            if (readsize == 0) {</div><div class='add'>+                request-&gt;vector_state = SP_STATE_READ_PROGHDR_XDATA;</div><div class='add'>+                goto sp_state_read_proghdr_xdata;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, readsize);</div><div class='add'>+            __socket_proto_init_pending(priv, readsize);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READING_PROGHDR_XDATA;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READING_PROGHDR_XDATA;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROGHDR_XDATA:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READ_PROGHDR;</div><div class='del'>-                /* check if the vector_sizer() has more to say */</div><div class='del'>-                goto sp_state_read_proghdr;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READ_PROGHDR;</div><div class='add'>+            /* check if the vector_sizer() has more to say */</div><div class='add'>+            goto sp_state_read_proghdr;</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_PROGHDR_XDATA:</div><div class='del'>-sp_state_read_proghdr_xdata:</div><div class='del'>-                if (in-&gt;payload_vector.iov_base == NULL) {</div><div class='del'>-</div><div class='del'>-                        size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='del'>-                        iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, size);</div><div class='del'>-                        if (!iobuf) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (in-&gt;iobref == NULL) {</div><div class='del'>-                                in-&gt;iobref = iobref_new ();</div><div class='del'>-                                if (in-&gt;iobref == NULL) {</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        iobuf_unref (iobuf);</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        sp_state_read_proghdr_xdata:</div><div class='add'>+            if (in-&gt;payload_vector.iov_base == NULL) {</div><div class='add'>+                size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+                iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, size);</div><div class='add'>+                if (!iobuf) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                if (in-&gt;iobref == NULL) {</div><div class='add'>+                    in-&gt;iobref = iobref_new();</div><div class='add'>+                    if (in-&gt;iobref == NULL) {</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        iobuf_unref(iobuf);</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        iobref_add (in-&gt;iobref, iobuf);</div><div class='add'>+                iobref_add(in-&gt;iobref, iobuf);</div><div class='ctx'> </div><div class='del'>-                        in-&gt;payload_vector.iov_base = iobuf_ptr (iobuf);</div><div class='del'>-                        frag-&gt;fragcurrent = iobuf_ptr (iobuf);</div><div class='add'>+                in-&gt;payload_vector.iov_base = iobuf_ptr(iobuf);</div><div class='add'>+                frag-&gt;fragcurrent = iobuf_ptr(iobuf);</div><div class='ctx'> </div><div class='del'>-                        iobuf_unref (iobuf);</div><div class='del'>-                }</div><div class='add'>+                iobuf_unref(iobuf);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                request-&gt;vector_state = SP_STATE_READING_PROG;</div><div class='add'>+            request-&gt;vector_state = SP_STATE_READING_PROG;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROG:</div><div class='del'>-                /* now read the remaining rpc msg into buffer pointed by</div><div class='del'>-                 * fragcurrent</div><div class='del'>-                 */</div><div class='add'>+            /* now read the remaining rpc msg into buffer pointed by</div><div class='add'>+             * fragcurrent</div><div class='add'>+             */</div><div class='ctx'> </div><div class='del'>-                ret = __socket_read_simple_msg (this);</div><div class='add'>+            ret = __socket_read_simple_msg(this);</div><div class='ctx'> </div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='ctx'> </div><div class='del'>-                if ((ret == -1) ||</div><div class='del'>-                    ((ret == 0) &amp;&amp; (remaining_size == 0)</div><div class='del'>-                     &amp;&amp; RPC_LASTFRAG (in-&gt;fraghdr))) {</div><div class='del'>-                        request-&gt;vector_state = SP_STATE_VECTORED_REQUEST_INIT;</div><div class='del'>-                        in-&gt;payload_vector.iov_len</div><div class='del'>-                                = ((unsigned long)frag-&gt;fragcurrent</div><div class='del'>-                                   - (unsigned long)in-&gt;payload_vector.iov_base);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; (remaining_size == 0) &amp;&amp;</div><div class='add'>+                                RPC_LASTFRAG(in-&gt;fraghdr))) {</div><div class='add'>+                request-&gt;vector_state = SP_STATE_VECTORED_REQUEST_INIT;</div><div class='add'>+                in-&gt;payload_vector.iov_len = ((unsigned long)frag-&gt;fragcurrent -</div><div class='add'>+                                              (unsigned long)</div><div class='add'>+                                                  in-&gt;payload_vector.iov_base);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_read_request (rpc_transport_t *this)</div><div class='add'>+__socket_read_request(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv               = NULL;</div><div class='del'>-        uint32_t          prognum            = 0, procnum = 0, progver = 0;</div><div class='del'>-        uint32_t          remaining_size     = 0;</div><div class='del'>-        int               ret                = -1;</div><div class='del'>-        char             *buf                = NULL;</div><div class='del'>-        rpcsvc_vector_sizer     vector_sizer = NULL;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-        sp_rpcfrag_request_state_t   *request    = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-        request = &amp;frag-&gt;call_body.request;</div><div class='del'>-</div><div class='del'>-        switch (request-&gt;header_state) {</div><div class='del'>-</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    uint32_t prognum = 0, procnum = 0, progver = 0;</div><div class='add'>+    uint32_t remaining_size = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    rpcsvc_vector_sizer vector_sizer = NULL;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+    sp_rpcfrag_request_state_t *request = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+    request = &amp;frag-&gt;call_body.request;</div><div class='add'>+</div><div class='add'>+    switch (request-&gt;header_state) {</div><div class='ctx'>         case SP_STATE_REQUEST_HEADER_INIT:</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, RPC_CALL_BODY_SIZE);</div><div class='add'>+            __socket_proto_init_pending(priv, RPC_CALL_BODY_SIZE);</div><div class='ctx'> </div><div class='del'>-                request-&gt;header_state = SP_STATE_READING_RPCHDR1;</div><div class='add'>+            request-&gt;header_state = SP_STATE_READING_RPCHDR1;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_RPCHDR1:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                request-&gt;header_state = SP_STATE_READ_RPCHDR1;</div><div class='add'>+            request-&gt;header_state = SP_STATE_READ_RPCHDR1;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_RPCHDR1:</div><div class='del'>-                buf = rpc_prognum_addr (iobuf_ptr (in-&gt;iobuf));</div><div class='del'>-                prognum = ntoh32 (*((uint32_t *)buf));</div><div class='add'>+            buf = rpc_prognum_addr(iobuf_ptr(in-&gt;iobuf));</div><div class='add'>+            prognum = ntoh32(*((uint32_t *)buf));</div><div class='ctx'> </div><div class='del'>-                buf = rpc_progver_addr (iobuf_ptr (in-&gt;iobuf));</div><div class='del'>-                progver = ntoh32 (*((uint32_t *)buf));</div><div class='add'>+            buf = rpc_progver_addr(iobuf_ptr(in-&gt;iobuf));</div><div class='add'>+            progver = ntoh32(*((uint32_t *)buf));</div><div class='ctx'> </div><div class='del'>-                buf = rpc_procnum_addr (iobuf_ptr (in-&gt;iobuf));</div><div class='del'>-                procnum = ntoh32 (*((uint32_t *)buf));</div><div class='add'>+            buf = rpc_procnum_addr(iobuf_ptr(in-&gt;iobuf));</div><div class='add'>+            procnum = ntoh32(*((uint32_t *)buf));</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;is_server) {</div><div class='del'>-                        /* this check is needed as rpcsvc and rpc-clnt</div><div class='del'>-                         * actor structures are not same */</div><div class='del'>-                        vector_sizer =</div><div class='del'>-                                rpcsvc_get_program_vector_sizer ((rpcsvc_t *)this-&gt;mydata,</div><div class='del'>-                                                                 prognum, progver, procnum);</div><div class='del'>-                }</div><div class='add'>+            if (priv-&gt;is_server) {</div><div class='add'>+                /* this check is needed as rpcsvc and rpc-clnt</div><div class='add'>+                 * actor structures are not same */</div><div class='add'>+                vector_sizer = rpcsvc_get_program_vector_sizer(</div><div class='add'>+                    (rpcsvc_t *)this-&gt;mydata, prognum, progver, procnum);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (vector_sizer) {</div><div class='del'>-                        ret = __socket_read_vectored_request (this, vector_sizer);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = __socket_read_simple_request (this);</div><div class='del'>-                }</div><div class='add'>+            if (vector_sizer) {</div><div class='add'>+                ret = __socket_read_vectored_request(this, vector_sizer);</div><div class='add'>+            } else {</div><div class='add'>+                ret = __socket_read_simple_request(this);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='ctx'> </div><div class='del'>-                if ((ret == -1)</div><div class='del'>-                    || ((ret == 0)</div><div class='del'>-                        &amp;&amp; (remaining_size == 0)</div><div class='del'>-                        &amp;&amp; (RPC_LASTFRAG (in-&gt;fraghdr)))) {</div><div class='del'>-                        request-&gt;header_state = SP_STATE_REQUEST_HEADER_INIT;</div><div class='del'>-                }</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; (remaining_size == 0) &amp;&amp;</div><div class='add'>+                                (RPC_LASTFRAG(in-&gt;fraghdr)))) {</div><div class='add'>+                request-&gt;header_state = SP_STATE_REQUEST_HEADER_INIT;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_read_accepted_successful_reply (rpc_transport_t *this)</div><div class='add'>+__socket_read_accepted_successful_reply(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv              = NULL;</div><div class='del'>-        int               ret               = 0;</div><div class='del'>-        struct iobuf     *iobuf             = NULL;</div><div class='del'>-        gfs3_read_rsp     read_rsp          = {0, };</div><div class='del'>-        ssize_t           size              = 0;</div><div class='del'>-        ssize_t           default_read_size = 0;</div><div class='del'>-        XDR               xdr;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        switch (frag-&gt;call_body.reply.accepted_success_state) {</div><div class='del'>-</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    gfs3_read_rsp read_rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    ssize_t default_read_size = 0;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+</div><div class='add'>+    switch (frag-&gt;call_body.reply.accepted_success_state) {</div><div class='ctx'>         case SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT:</div><div class='del'>-                default_read_size = xdr_sizeof ((xdrproc_t) xdr_gfs3_read_rsp,</div><div class='del'>-                                                &amp;read_rsp);</div><div class='add'>+            default_read_size = xdr_sizeof((xdrproc_t)xdr_gfs3_read_rsp,</div><div class='add'>+                                           &amp;read_rsp);</div><div class='ctx'> </div><div class='del'>-                /* We need to store the current base address because we will</div><div class='del'>-                 * need it after a partial read. */</div><div class='del'>-                in-&gt;proghdr_base_addr = frag-&gt;fragcurrent;</div><div class='add'>+            /* We need to store the current base address because we will</div><div class='add'>+             * need it after a partial read. */</div><div class='add'>+            in-&gt;proghdr_base_addr = frag-&gt;fragcurrent;</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, default_read_size);</div><div class='add'>+            __socket_proto_init_pending(priv, default_read_size);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READING_PROC_HEADER;</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READING_PROC_HEADER;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROC_HEADER:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                /* there can be 'xdata' in read response, figure it out */</div><div class='del'>-                default_read_size = frag-&gt;fragcurrent - in-&gt;proghdr_base_addr;</div><div class='del'>-                xdrmem_create (&amp;xdr, in-&gt;proghdr_base_addr, default_read_size,</div><div class='del'>-                               XDR_DECODE);</div><div class='add'>+            /* there can be 'xdata' in read response, figure it out */</div><div class='add'>+            default_read_size = frag-&gt;fragcurrent - in-&gt;proghdr_base_addr;</div><div class='add'>+            xdrmem_create(&amp;xdr, in-&gt;proghdr_base_addr, default_read_size,</div><div class='add'>+                          XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-                /* This will fail if there is xdata sent from server, if not,</div><div class='del'>-                   well and good, we don't need to worry about  */</div><div class='del'>-                xdr_gfs3_read_rsp (&amp;xdr, &amp;read_rsp);</div><div class='add'>+            /* This will fail if there is xdata sent from server, if not,</div><div class='add'>+               well and good, we don't need to worry about  */</div><div class='add'>+            xdr_gfs3_read_rsp(&amp;xdr, &amp;read_rsp);</div><div class='ctx'> </div><div class='del'>-                free (read_rsp.xdata.xdata_val);</div><div class='add'>+            free(read_rsp.xdata.xdata_val);</div><div class='ctx'> </div><div class='del'>-                /* need to round off to proper roof (%4), as XDR packing pads</div><div class='del'>-                   the end of opaque object with '0' */</div><div class='del'>-                size = roof (read_rsp.xdata.xdata_len, 4);</div><div class='add'>+            /* need to round off to proper roof (%4), as XDR packing pads</div><div class='add'>+               the end of opaque object with '0' */</div><div class='add'>+            size = roof(read_rsp.xdata.xdata_len, 4);</div><div class='ctx'> </div><div class='del'>-                if (!size) {</div><div class='del'>-                        frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                                = SP_STATE_READ_PROC_OPAQUE;</div><div class='del'>-                        goto read_proc_opaque;</div><div class='del'>-                }</div><div class='add'>+            if (!size) {</div><div class='add'>+                frag-&gt;call_body.reply</div><div class='add'>+                    .accepted_success_state = SP_STATE_READ_PROC_OPAQUE;</div><div class='add'>+                goto read_proc_opaque;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, size);</div><div class='add'>+            __socket_proto_init_pending(priv, size);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READING_PROC_OPAQUE;</div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READING_PROC_OPAQUE;</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROC_OPAQUE:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READ_PROC_OPAQUE;</div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READ_PROC_OPAQUE;</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_PROC_OPAQUE:</div><div class='ctx'>         read_proc_opaque:</div><div class='del'>-                if (in-&gt;payload_vector.iov_base == NULL) {</div><div class='del'>-</div><div class='del'>-                        size = (RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read);</div><div class='del'>-</div><div class='del'>-                        iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, size);</div><div class='del'>-                        if (iobuf == NULL) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+            if (in-&gt;payload_vector.iov_base == NULL) {</div><div class='add'>+                size = (RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read);</div><div class='ctx'> </div><div class='del'>-                        if (in-&gt;iobref == NULL) {</div><div class='del'>-                                in-&gt;iobref = iobref_new ();</div><div class='del'>-                                if (in-&gt;iobref == NULL) {</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        iobuf_unref (iobuf);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, size);</div><div class='add'>+                if (iobuf == NULL) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        ret = iobref_add (in-&gt;iobref, iobuf);</div><div class='del'>-                        iobuf_unref (iobuf);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                if (in-&gt;iobref == NULL) {</div><div class='add'>+                    in-&gt;iobref = iobref_new();</div><div class='add'>+                    if (in-&gt;iobref == NULL) {</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        iobuf_unref(iobuf);</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        in-&gt;payload_vector.iov_base = iobuf_ptr (iobuf);</div><div class='del'>-                        in-&gt;payload_vector.iov_len = size;</div><div class='add'>+                ret = iobref_add(in-&gt;iobref, iobuf);</div><div class='add'>+                iobuf_unref(iobuf);</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                frag-&gt;fragcurrent = in-&gt;payload_vector.iov_base;</div><div class='add'>+                in-&gt;payload_vector.iov_base = iobuf_ptr(iobuf);</div><div class='add'>+                in-&gt;payload_vector.iov_len = size;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READ_PROC_HEADER;</div><div class='add'>+            frag-&gt;fragcurrent = in-&gt;payload_vector.iov_base;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READ_PROC_HEADER;</div><div class='add'>+</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_PROC_HEADER:</div><div class='del'>-                /* now read the entire remaining msg into new iobuf */</div><div class='del'>-                ret = __socket_read_simple_msg (this);</div><div class='del'>-                if ((ret == -1)</div><div class='del'>-                    || ((ret == 0) &amp;&amp; RPC_LASTFRAG (in-&gt;fraghdr))) {</div><div class='del'>-                        frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                                = SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT;</div><div class='del'>-                }</div><div class='add'>+            /* now read the entire remaining msg into new iobuf */</div><div class='add'>+            ret = __socket_read_simple_msg(this);</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; RPC_LASTFRAG(in-&gt;fraghdr))) {</div><div class='add'>+                frag-&gt;call_body.reply.accepted_success_state =</div><div class='add'>+                    SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_read_accepted_successful_reply_v2 (rpc_transport_t *this)</div><div class='add'>+__socket_read_accepted_successful_reply_v2(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv              = NULL;</div><div class='del'>-        int               ret               = 0;</div><div class='del'>-        struct iobuf     *iobuf             = NULL;</div><div class='del'>-        gfx_read_rsp      read_rsp          = {0, };</div><div class='del'>-        ssize_t           size              = 0;</div><div class='del'>-        ssize_t           default_read_size = 0;</div><div class='del'>-        XDR               xdr;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        switch (frag-&gt;call_body.reply.accepted_success_state) {</div><div class='del'>-</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    gfx_read_rsp read_rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    ssize_t default_read_size = 0;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+</div><div class='add'>+    switch (frag-&gt;call_body.reply.accepted_success_state) {</div><div class='ctx'>         case SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT:</div><div class='del'>-                default_read_size = xdr_sizeof ((xdrproc_t) xdr_gfx_read_rsp,</div><div class='del'>-                                                &amp;read_rsp);</div><div class='add'>+            default_read_size = xdr_sizeof((xdrproc_t)xdr_gfx_read_rsp,</div><div class='add'>+                                           &amp;read_rsp);</div><div class='ctx'> </div><div class='del'>-                /* We need to store the current base address because we will</div><div class='del'>-                 * need it after a partial read. */</div><div class='del'>-                in-&gt;proghdr_base_addr = frag-&gt;fragcurrent;</div><div class='add'>+            /* We need to store the current base address because we will</div><div class='add'>+             * need it after a partial read. */</div><div class='add'>+            in-&gt;proghdr_base_addr = frag-&gt;fragcurrent;</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, default_read_size);</div><div class='add'>+            __socket_proto_init_pending(priv, default_read_size);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READING_PROC_HEADER;</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READING_PROC_HEADER;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROC_HEADER:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                /* there can be 'xdata' in read response, figure it out */</div><div class='del'>-                default_read_size = frag-&gt;fragcurrent - in-&gt;proghdr_base_addr;</div><div class='add'>+            /* there can be 'xdata' in read response, figure it out */</div><div class='add'>+            default_read_size = frag-&gt;fragcurrent - in-&gt;proghdr_base_addr;</div><div class='ctx'> </div><div class='del'>-                xdrmem_create (&amp;xdr, in-&gt;proghdr_base_addr, default_read_size,</div><div class='del'>-                               XDR_DECODE);</div><div class='add'>+            xdrmem_create(&amp;xdr, in-&gt;proghdr_base_addr, default_read_size,</div><div class='add'>+                          XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-                /* This will fail if there is xdata sent from server, if not,</div><div class='del'>-                   well and good, we don't need to worry about  */</div><div class='del'>-                xdr_gfx_read_rsp (&amp;xdr, &amp;read_rsp);</div><div class='add'>+            /* This will fail if there is xdata sent from server, if not,</div><div class='add'>+               well and good, we don't need to worry about  */</div><div class='add'>+            xdr_gfx_read_rsp(&amp;xdr, &amp;read_rsp);</div><div class='ctx'> </div><div class='del'>-                free (read_rsp.xdata.pairs.pairs_val);</div><div class='add'>+            free(read_rsp.xdata.pairs.pairs_val);</div><div class='ctx'> </div><div class='del'>-                /* need to round off to proper roof (%4), as XDR packing pads</div><div class='del'>-                   the end of opaque object with '0' */</div><div class='del'>-                size = roof (read_rsp.xdata.xdr_size, 4);</div><div class='add'>+            /* need to round off to proper roof (%4), as XDR packing pads</div><div class='add'>+               the end of opaque object with '0' */</div><div class='add'>+            size = roof(read_rsp.xdata.xdr_size, 4);</div><div class='ctx'> </div><div class='del'>-                if (!size) {</div><div class='del'>-                        frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                                = SP_STATE_READ_PROC_OPAQUE;</div><div class='del'>-                        goto read_proc_opaque;</div><div class='del'>-                }</div><div class='add'>+            if (!size) {</div><div class='add'>+                frag-&gt;call_body.reply</div><div class='add'>+                    .accepted_success_state = SP_STATE_READ_PROC_OPAQUE;</div><div class='add'>+                goto read_proc_opaque;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, size);</div><div class='add'>+            __socket_proto_init_pending(priv, size);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READING_PROC_OPAQUE;</div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READING_PROC_OPAQUE;</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_PROC_OPAQUE:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READ_PROC_OPAQUE;</div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READ_PROC_OPAQUE;</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_PROC_OPAQUE:</div><div class='ctx'>         read_proc_opaque:</div><div class='del'>-                if (in-&gt;payload_vector.iov_base == NULL) {</div><div class='del'>-</div><div class='del'>-                        size = (RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read);</div><div class='add'>+            if (in-&gt;payload_vector.iov_base == NULL) {</div><div class='add'>+                size = (RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read);</div><div class='ctx'> </div><div class='del'>-                        iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, size);</div><div class='del'>-                        if (iobuf == NULL) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (in-&gt;iobref == NULL) {</div><div class='del'>-                                in-&gt;iobref = iobref_new ();</div><div class='del'>-                                if (in-&gt;iobref == NULL) {</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        iobuf_unref (iobuf);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, size);</div><div class='add'>+                if (iobuf == NULL) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        ret = iobref_add (in-&gt;iobref, iobuf);</div><div class='del'>-                        iobuf_unref (iobuf);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                if (in-&gt;iobref == NULL) {</div><div class='add'>+                    in-&gt;iobref = iobref_new();</div><div class='add'>+                    if (in-&gt;iobref == NULL) {</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        iobuf_unref(iobuf);</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        in-&gt;payload_vector.iov_base = iobuf_ptr (iobuf);</div><div class='del'>-                        in-&gt;payload_vector.iov_len = size;</div><div class='add'>+                ret = iobref_add(in-&gt;iobref, iobuf);</div><div class='add'>+                iobuf_unref(iobuf);</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                frag-&gt;fragcurrent = in-&gt;payload_vector.iov_base;</div><div class='add'>+                in-&gt;payload_vector.iov_base = iobuf_ptr(iobuf);</div><div class='add'>+                in-&gt;payload_vector.iov_len = size;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                        = SP_STATE_READ_PROC_HEADER;</div><div class='add'>+            frag-&gt;fragcurrent = in-&gt;payload_vector.iov_base;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_success_state = SP_STATE_READ_PROC_HEADER;</div><div class='add'>+</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_PROC_HEADER:</div><div class='del'>-                /* now read the entire remaining msg into new iobuf */</div><div class='del'>-                ret = __socket_read_simple_msg (this);</div><div class='del'>-                if ((ret == -1)</div><div class='del'>-                    || ((ret == 0) &amp;&amp; RPC_LASTFRAG (in-&gt;fraghdr))) {</div><div class='del'>-                        frag-&gt;call_body.reply.accepted_success_state</div><div class='del'>-                                = SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT;</div><div class='del'>-                }</div><div class='add'>+            /* now read the entire remaining msg into new iobuf */</div><div class='add'>+            ret = __socket_read_simple_msg(this);</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; RPC_LASTFRAG(in-&gt;fraghdr))) {</div><div class='add'>+                frag-&gt;call_body.reply.accepted_success_state =</div><div class='add'>+                    SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define rpc_reply_verflen_addr(fragcurrent) ((char *)fragcurrent - 4)</div><div class='ctx'> #define rpc_reply_accept_status_addr(fragcurrent) ((char *)fragcurrent - 4)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_read_accepted_reply (rpc_transport_t *this)</div><div class='add'>+__socket_read_accepted_reply(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv           = NULL;</div><div class='del'>-        int               ret            = -1;</div><div class='del'>-        char             *buf            = NULL;</div><div class='del'>-        uint32_t          verflen        = 0, len = 0;</div><div class='del'>-        uint32_t          remaining_size = 0;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        switch (frag-&gt;call_body.reply.accepted_state) {</div><div class='del'>-</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    uint32_t verflen = 0, len = 0;</div><div class='add'>+    uint32_t remaining_size = 0;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+</div><div class='add'>+    switch (frag-&gt;call_body.reply.accepted_state) {</div><div class='ctx'>         case SP_STATE_ACCEPTED_REPLY_INIT:</div><div class='del'>-                __socket_proto_init_pending (priv,</div><div class='del'>-                                             RPC_AUTH_FLAVOUR_N_LENGTH_SIZE);</div><div class='add'>+            __socket_proto_init_pending(priv, RPC_AUTH_FLAVOUR_N_LENGTH_SIZE);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_state</div><div class='del'>-                        = SP_STATE_READING_REPLY_VERFLEN;</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_state = SP_STATE_READING_REPLY_VERFLEN;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_REPLY_VERFLEN:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_state</div><div class='del'>-                        = SP_STATE_READ_REPLY_VERFLEN;</div><div class='add'>+            frag-&gt;call_body.reply.accepted_state = SP_STATE_READ_REPLY_VERFLEN;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_REPLY_VERFLEN:</div><div class='del'>-                buf = rpc_reply_verflen_addr (frag-&gt;fragcurrent);</div><div class='add'>+            buf = rpc_reply_verflen_addr(frag-&gt;fragcurrent);</div><div class='ctx'> </div><div class='del'>-                verflen = ntoh32 (*((uint32_t *) buf));</div><div class='add'>+            verflen = ntoh32(*((uint32_t *)buf));</div><div class='ctx'> </div><div class='del'>-                /* also read accept status along with verf data */</div><div class='del'>-                len = verflen + RPC_ACCEPT_STATUS_LEN;</div><div class='add'>+            /* also read accept status along with verf data */</div><div class='add'>+            len = verflen + RPC_ACCEPT_STATUS_LEN;</div><div class='ctx'> </div><div class='del'>-                __socket_proto_init_pending (priv, len);</div><div class='add'>+            __socket_proto_init_pending(priv, len);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_state</div><div class='del'>-                        = SP_STATE_READING_REPLY_VERFBYTES;</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_state = SP_STATE_READING_REPLY_VERFBYTES;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_REPLY_VERFBYTES:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accepted_state</div><div class='del'>-                        = SP_STATE_READ_REPLY_VERFBYTES;</div><div class='add'>+            frag-&gt;call_body.reply</div><div class='add'>+                .accepted_state = SP_STATE_READ_REPLY_VERFBYTES;</div><div class='ctx'> </div><div class='del'>-                buf = rpc_reply_accept_status_addr (frag-&gt;fragcurrent);</div><div class='add'>+            buf = rpc_reply_accept_status_addr(frag-&gt;fragcurrent);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accept_status</div><div class='del'>-                        = ntoh32 (*(uint32_t *) buf);</div><div class='add'>+            frag-&gt;call_body.reply.accept_status = ntoh32(*(uint32_t *)buf);</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_REPLY_VERFBYTES:</div><div class='ctx'> </div><div class='del'>-                if (frag-&gt;call_body.reply.accept_status</div><div class='del'>-                    == SUCCESS) {</div><div class='del'>-                        /* Need two different methods here for different protocols</div><div class='del'>-                           Mainly because the exact XDR is used to calculate the</div><div class='del'>-                           size of response */</div><div class='del'>-                        if ((in-&gt;request_info-&gt;procnum == GFS3_OP_READ) &amp;&amp;</div><div class='del'>-                            (in-&gt;request_info-&gt;prognum == GLUSTER_FOP_PROGRAM) &amp;&amp;</div><div class='del'>-                            (in-&gt;request_info-&gt;progver == GLUSTER_FOP_VERSION_v2)) {</div><div class='del'>-                                ret = __socket_read_accepted_successful_reply_v2 (this);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = __socket_read_accepted_successful_reply (this);</div><div class='del'>-                        }</div><div class='add'>+            if (frag-&gt;call_body.reply.accept_status == SUCCESS) {</div><div class='add'>+                /* Need two different methods here for different protocols</div><div class='add'>+                   Mainly because the exact XDR is used to calculate the</div><div class='add'>+                   size of response */</div><div class='add'>+                if ((in-&gt;request_info-&gt;procnum == GFS3_OP_READ) &amp;&amp;</div><div class='add'>+                    (in-&gt;request_info-&gt;prognum == GLUSTER_FOP_PROGRAM) &amp;&amp;</div><div class='add'>+                    (in-&gt;request_info-&gt;progver == GLUSTER_FOP_VERSION_v2)) {</div><div class='add'>+                    ret = __socket_read_accepted_successful_reply_v2(this);</div><div class='ctx'>                 } else {</div><div class='del'>-                        /* read entire remaining msg into buffer pointed to by</div><div class='del'>-                         * fragcurrent</div><div class='del'>-                         */</div><div class='del'>-                        ret = __socket_read_simple_msg (this);</div><div class='add'>+                    ret = __socket_read_accepted_successful_reply(this);</div><div class='ctx'>                 }</div><div class='add'>+            } else {</div><div class='add'>+                /* read entire remaining msg into buffer pointed to by</div><div class='add'>+                 * fragcurrent</div><div class='add'>+                 */</div><div class='add'>+                ret = __socket_read_simple_msg(this);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr)</div><div class='del'>-                        - frag-&gt;bytes_read;</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='ctx'> </div><div class='del'>-                if ((ret == -1)</div><div class='del'>-                    || ((ret == 0) &amp;&amp; (remaining_size == 0)</div><div class='del'>-                        &amp;&amp; (RPC_LASTFRAG (in-&gt;fraghdr)))) {</div><div class='del'>-                        frag-&gt;call_body.reply.accepted_state</div><div class='del'>-                                = SP_STATE_ACCEPTED_REPLY_INIT;</div><div class='del'>-                }</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; (remaining_size == 0) &amp;&amp;</div><div class='add'>+                                (RPC_LASTFRAG(in-&gt;fraghdr)))) {</div><div class='add'>+                frag-&gt;call_body.reply</div><div class='add'>+                    .accepted_state = SP_STATE_ACCEPTED_REPLY_INIT;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_read_denied_reply (rpc_transport_t *this)</div><div class='add'>+__socket_read_denied_reply(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        return __socket_read_simple_msg (this);</div><div class='add'>+    return __socket_read_simple_msg(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #define rpc_reply_status_addr(fragcurrent) ((char *)fragcurrent - 4)</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_read_vectored_reply (rpc_transport_t *this)</div><div class='add'>+__socket_read_vectored_reply(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv           = NULL;</div><div class='del'>-        int               ret            = 0;</div><div class='del'>-        char             *buf            = NULL;</div><div class='del'>-        uint32_t          remaining_size = 0;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    uint32_t remaining_size = 0;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        switch (frag-&gt;call_body.reply.status_state) {</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='ctx'> </div><div class='add'>+    switch (frag-&gt;call_body.reply.status_state) {</div><div class='ctx'>         case SP_STATE_ACCEPTED_REPLY_INIT:</div><div class='del'>-                __socket_proto_init_pending (priv, RPC_REPLY_STATUS_SIZE);</div><div class='add'>+            __socket_proto_init_pending(priv, RPC_REPLY_STATUS_SIZE);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.status_state</div><div class='del'>-                        = SP_STATE_READING_REPLY_STATUS;</div><div class='add'>+            frag-&gt;call_body.reply.status_state = SP_STATE_READING_REPLY_STATUS;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_REPLY_STATUS:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                buf = rpc_reply_status_addr (frag-&gt;fragcurrent);</div><div class='add'>+            buf = rpc_reply_status_addr(frag-&gt;fragcurrent);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.accept_status</div><div class='del'>-                        = ntoh32 (*((uint32_t *) buf));</div><div class='add'>+            frag-&gt;call_body.reply.accept_status = ntoh32(*((uint32_t *)buf));</div><div class='ctx'> </div><div class='del'>-                frag-&gt;call_body.reply.status_state</div><div class='del'>-                        = SP_STATE_READ_REPLY_STATUS;</div><div class='add'>+            frag-&gt;call_body.reply.status_state = SP_STATE_READ_REPLY_STATUS;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_REPLY_STATUS:</div><div class='del'>-                if (frag-&gt;call_body.reply.accept_status == MSG_ACCEPTED) {</div><div class='del'>-                        ret = __socket_read_accepted_reply (this);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = __socket_read_denied_reply (this);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='del'>-</div><div class='del'>-                if ((ret == -1)</div><div class='del'>-                    || ((ret == 0) &amp;&amp; (remaining_size == 0)</div><div class='del'>-                        &amp;&amp; (RPC_LASTFRAG (in-&gt;fraghdr)))) {</div><div class='del'>-                        frag-&gt;call_body.reply.status_state</div><div class='del'>-                                = SP_STATE_VECTORED_REPLY_STATUS_INIT;</div><div class='del'>-                        in-&gt;payload_vector.iov_len</div><div class='del'>-                                = (unsigned long)frag-&gt;fragcurrent</div><div class='del'>-                                - (unsigned long)in-&gt;payload_vector.iov_base;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            if (frag-&gt;call_body.reply.accept_status == MSG_ACCEPTED) {</div><div class='add'>+                ret = __socket_read_accepted_reply(this);</div><div class='add'>+            } else {</div><div class='add'>+                ret = __socket_read_denied_reply(this);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; (remaining_size == 0) &amp;&amp;</div><div class='add'>+                                (RPC_LASTFRAG(in-&gt;fraghdr)))) {</div><div class='add'>+                frag-&gt;call_body.reply</div><div class='add'>+                    .status_state = SP_STATE_VECTORED_REPLY_STATUS_INIT;</div><div class='add'>+                in-&gt;payload_vector.iov_len = (unsigned long)frag-&gt;fragcurrent -</div><div class='add'>+                                             (unsigned long)</div><div class='add'>+                                                 in-&gt;payload_vector.iov_base;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_read_simple_reply (rpc_transport_t *this)</div><div class='add'>+__socket_read_simple_reply(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        return __socket_read_simple_msg (this);</div><div class='add'>+    return __socket_read_simple_msg(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define rpc_xid_addr(buf) (buf)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__socket_read_reply (rpc_transport_t *this)</div><div class='add'>+__socket_read_reply(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t   *priv         = NULL;</div><div class='del'>-        char               *buf          = NULL;</div><div class='del'>-        int32_t             ret          = -1;</div><div class='del'>-        rpc_request_info_t *request_info = NULL;</div><div class='del'>-        char                map_xid      = 0;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        buf = rpc_xid_addr (iobuf_ptr (in-&gt;iobuf));</div><div class='del'>-</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    rpc_request_info_t *request_info = NULL;</div><div class='add'>+    char map_xid = 0;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+</div><div class='add'>+    buf = rpc_xid_addr(iobuf_ptr(in-&gt;iobuf));</div><div class='add'>+</div><div class='add'>+    if (in-&gt;request_info == NULL) {</div><div class='add'>+        in-&gt;request_info = GF_CALLOC(1, sizeof(*request_info),</div><div class='add'>+                                     gf_common_mt_rpc_trans_reqinfo_t);</div><div class='ctx'>         if (in-&gt;request_info == NULL) {</div><div class='del'>-                in-&gt;request_info = GF_CALLOC (1, sizeof (*request_info),</div><div class='del'>-                                              gf_common_mt_rpc_trans_reqinfo_t);</div><div class='del'>-                if (in-&gt;request_info == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                map_xid = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        request_info = in-&gt;request_info;</div><div class='del'>-</div><div class='del'>-        if (map_xid) {</div><div class='del'>-                request_info-&gt;xid = ntoh32 (*((uint32_t *) buf));</div><div class='add'>+        map_xid = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                /* release priv-&gt;lock, so as to avoid deadlock b/w conn-&gt;lock</div><div class='del'>-                 * and priv-&gt;lock, since we are doing an upcall here.</div><div class='del'>-                 */</div><div class='del'>-                frag-&gt;state = SP_STATE_NOTIFYING_XID;</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='del'>-                {</div><div class='del'>-                        ret = rpc_transport_notify (this,</div><div class='del'>-                                                    RPC_TRANSPORT_MAP_XID_REQUEST,</div><div class='del'>-                                                    in-&gt;request_info);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='add'>+    request_info = in-&gt;request_info;</div><div class='ctx'> </div><div class='del'>-                /* Transition back to externally visible state. */</div><div class='del'>-                frag-&gt;state = SP_STATE_READ_MSGTYPE;</div><div class='add'>+    if (map_xid) {</div><div class='add'>+        request_info-&gt;xid = ntoh32(*((uint32_t *)buf));</div><div class='ctx'> </div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "notify for event MAP_XID failed for %s",</div><div class='del'>-                                this-&gt;peerinfo.identifier);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        /* release priv-&gt;lock, so as to avoid deadlock b/w conn-&gt;lock</div><div class='add'>+         * and priv-&gt;lock, since we are doing an upcall here.</div><div class='add'>+         */</div><div class='add'>+        frag-&gt;state = SP_STATE_NOTIFYING_XID;</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='add'>+        {</div><div class='add'>+            ret = rpc_transport_notify(this, RPC_TRANSPORT_MAP_XID_REQUEST,</div><div class='add'>+                                       in-&gt;request_info);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='del'>-        if ((request_info-&gt;prognum == GLUSTER_FOP_PROGRAM)</div><div class='del'>-            &amp;&amp; (request_info-&gt;procnum == GF_FOP_READ)) {</div><div class='del'>-                if (map_xid &amp;&amp; request_info-&gt;rsp.rsp_payload_count != 0) {</div><div class='del'>-                        in-&gt;iobref = iobref_ref (request_info-&gt;rsp.rsp_iobref);</div><div class='del'>-                        in-&gt;payload_vector = *request_info-&gt;rsp.rsp_payload;</div><div class='del'>-                }</div><div class='add'>+        /* Transition back to externally visible state. */</div><div class='add'>+        frag-&gt;state = SP_STATE_READ_MSGTYPE;</div><div class='ctx'> </div><div class='del'>-                ret = __socket_read_vectored_reply (this);</div><div class='del'>-        } else {</div><div class='del'>-                ret = __socket_read_simple_reply (this);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "notify for event MAP_XID failed for %s",</div><div class='add'>+                   this-&gt;peerinfo.identifier);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((request_info-&gt;prognum == GLUSTER_FOP_PROGRAM) &amp;&amp;</div><div class='add'>+        (request_info-&gt;procnum == GF_FOP_READ)) {</div><div class='add'>+        if (map_xid &amp;&amp; request_info-&gt;rsp.rsp_payload_count != 0) {</div><div class='add'>+            in-&gt;iobref = iobref_ref(request_info-&gt;rsp.rsp_iobref);</div><div class='add'>+            in-&gt;payload_vector = *request_info-&gt;rsp.rsp_payload;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __socket_read_vectored_reply(this);</div><div class='add'>+    } else {</div><div class='add'>+        ret = __socket_read_simple_reply(this);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* returns the number of bytes yet to be read in a fragment */</div><div class='ctx'> static int</div><div class='del'>-__socket_read_frag (rpc_transport_t *this)</div><div class='add'>+__socket_read_frag(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv           = NULL;</div><div class='del'>-        int32_t           ret            = 0;</div><div class='del'>-        char             *buf            = NULL;</div><div class='del'>-        uint32_t          remaining_size = 0;</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        switch (frag-&gt;state) {</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    uint32_t remaining_size = 0;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='add'>+</div><div class='add'>+    switch (frag-&gt;state) {</div><div class='ctx'>         case SP_STATE_NADA:</div><div class='del'>-                __socket_proto_init_pending (priv, RPC_MSGTYPE_SIZE);</div><div class='add'>+            __socket_proto_init_pending(priv, RPC_MSGTYPE_SIZE);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;state = SP_STATE_READING_MSGTYPE;</div><div class='add'>+            frag-&gt;state = SP_STATE_READING_MSGTYPE;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READING_MSGTYPE:</div><div class='del'>-                __socket_proto_read (priv, ret);</div><div class='add'>+            __socket_proto_read(priv, ret);</div><div class='ctx'> </div><div class='del'>-                frag-&gt;state = SP_STATE_READ_MSGTYPE;</div><div class='del'>-                /* fall through */</div><div class='add'>+            frag-&gt;state = SP_STATE_READ_MSGTYPE;</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_READ_MSGTYPE:</div><div class='del'>-                buf = rpc_msgtype_addr (iobuf_ptr (in-&gt;iobuf));</div><div class='del'>-                in-&gt;msg_type = ntoh32 (*((uint32_t *)buf));</div><div class='del'>-</div><div class='del'>-                if (in-&gt;msg_type == CALL) {</div><div class='del'>-                        ret = __socket_read_request (this);</div><div class='del'>-                } else if (in-&gt;msg_type == REPLY) {</div><div class='del'>-                        ret = __socket_read_reply (this);</div><div class='del'>-                } else if (in-&gt;msg_type == (msg_type_t) GF_UNIVERSAL_ANSWER) {</div><div class='del'>-                        gf_log ("rpc", GF_LOG_ERROR,</div><div class='del'>-                                "older version of protocol/process trying to "</div><div class='del'>-                                "connect from %s. use newer version on that node",</div><div class='del'>-                                this-&gt;peerinfo.identifier);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log ("rpc", GF_LOG_ERROR,</div><div class='del'>-                                "wrong MSG-TYPE (%d) received from %s",</div><div class='del'>-                                in-&gt;msg_type,</div><div class='del'>-                                this-&gt;peerinfo.identifier);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+            buf = rpc_msgtype_addr(iobuf_ptr(in-&gt;iobuf));</div><div class='add'>+            in-&gt;msg_type = ntoh32(*((uint32_t *)buf));</div><div class='add'>+</div><div class='add'>+            if (in-&gt;msg_type == CALL) {</div><div class='add'>+                ret = __socket_read_request(this);</div><div class='add'>+            } else if (in-&gt;msg_type == REPLY) {</div><div class='add'>+                ret = __socket_read_reply(this);</div><div class='add'>+            } else if (in-&gt;msg_type == (msg_type_t)GF_UNIVERSAL_ANSWER) {</div><div class='add'>+                gf_log("rpc", GF_LOG_ERROR,</div><div class='add'>+                       "older version of protocol/process trying to "</div><div class='add'>+                       "connect from %s. use newer version on that node",</div><div class='add'>+                       this-&gt;peerinfo.identifier);</div><div class='add'>+            } else {</div><div class='add'>+                gf_log("rpc", GF_LOG_ERROR,</div><div class='add'>+                       "wrong MSG-TYPE (%d) received from %s", in-&gt;msg_type,</div><div class='add'>+                       this-&gt;peerinfo.identifier);</div><div class='add'>+                ret = -1;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                remaining_size = RPC_FRAGSIZE (in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='add'>+            remaining_size = RPC_FRAGSIZE(in-&gt;fraghdr) - frag-&gt;bytes_read;</div><div class='ctx'> </div><div class='del'>-                if ((ret == -1)</div><div class='del'>-                    || ((ret == 0) &amp;&amp; (remaining_size == 0)</div><div class='del'>-                        &amp;&amp; (RPC_LASTFRAG (in-&gt;fraghdr)))) {</div><div class='del'>-                     /* frag-&gt;state = SP_STATE_NADA; */</div><div class='del'>-                        frag-&gt;state = SP_STATE_RPCFRAG_INIT;</div><div class='del'>-                }</div><div class='add'>+            if ((ret == -1) || ((ret == 0) &amp;&amp; (remaining_size == 0) &amp;&amp;</div><div class='add'>+                                (RPC_LASTFRAG(in-&gt;fraghdr)))) {</div><div class='add'>+                /* frag-&gt;state = SP_STATE_NADA; */</div><div class='add'>+                frag-&gt;state = SP_STATE_RPCFRAG_INIT;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case SP_STATE_NOTIFYING_XID:</div><div class='del'>-                /* Another epoll thread is notifying higher layers</div><div class='del'>-                 *of reply's xid. */</div><div class='del'>-                errno = EAGAIN;</div><div class='del'>-                return -1;</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+            /* Another epoll thread is notifying higher layers</div><div class='add'>+             *of reply's xid. */</div><div class='add'>+            errno = EAGAIN;</div><div class='add'>+            return -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__socket_reset_priv (socket_private_t *priv)</div><div class='add'>+__socket_reset_priv(socket_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        struct gf_sock_incoming   *in    = NULL;</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='ctx'> </div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='ctx'> </div><div class='del'>-        if (in-&gt;iobref) {</div><div class='del'>-                iobref_unref (in-&gt;iobref);</div><div class='del'>-                in-&gt;iobref = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (in-&gt;iobref) {</div><div class='add'>+        iobref_unref(in-&gt;iobref);</div><div class='add'>+        in-&gt;iobref = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (in-&gt;iobuf) {</div><div class='del'>-                iobuf_unref (in-&gt;iobuf);</div><div class='del'>-                in-&gt;iobuf = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (in-&gt;request_info != NULL) {</div><div class='del'>-                GF_FREE (in-&gt;request_info);</div><div class='del'>-                in-&gt;request_info = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (in-&gt;iobuf) {</div><div class='add'>+        iobuf_unref(in-&gt;iobuf);</div><div class='add'>+        in-&gt;iobuf = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (&amp;in-&gt;payload_vector, 0,</div><div class='del'>-                sizeof (in-&gt;payload_vector));</div><div class='add'>+    if (in-&gt;request_info != NULL) {</div><div class='add'>+        GF_FREE(in-&gt;request_info);</div><div class='add'>+        in-&gt;request_info = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    memset(&amp;in-&gt;payload_vector, 0, sizeof(in-&gt;payload_vector));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__socket_proto_state_machine (rpc_transport_t *this,</div><div class='del'>-                              rpc_transport_pollin_t **pollin)</div><div class='add'>+__socket_proto_state_machine(rpc_transport_t *this,</div><div class='add'>+                             rpc_transport_pollin_t **pollin)</div><div class='ctx'> {</div><div class='del'>-        int               ret    = -1;</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        struct iobuf     *iobuf  = NULL;</div><div class='del'>-        struct iobref    *iobref = NULL;</div><div class='del'>-        struct iovec      vector[2];</div><div class='del'>-        struct gf_sock_incoming      *in         = NULL;</div><div class='del'>-        struct gf_sock_incoming_frag *frag       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /* used to reduce the indirection */</div><div class='del'>-        in = &amp;priv-&gt;incoming;</div><div class='del'>-        frag = &amp;in-&gt;frag;</div><div class='del'>-</div><div class='del'>-        while (in-&gt;record_state != SP_STATE_COMPLETE) {</div><div class='del'>-                switch (in-&gt;record_state) {</div><div class='del'>-</div><div class='del'>-                case SP_STATE_NADA:</div><div class='del'>-                        in-&gt;total_bytes_read = 0;</div><div class='del'>-                        in-&gt;payload_vector.iov_len = 0;</div><div class='del'>-</div><div class='del'>-                        in-&gt;pending_vector = in-&gt;vector;</div><div class='del'>-                        in-&gt;pending_vector-&gt;iov_base =  &amp;in-&gt;fraghdr;</div><div class='del'>-</div><div class='del'>-                        in-&gt;pending_vector-&gt;iov_len  = sizeof (in-&gt;fraghdr);</div><div class='del'>-</div><div class='del'>-                        in-&gt;record_state = SP_STATE_READING_FRAGHDR;</div><div class='del'>-</div><div class='del'>-                        /* fall through */</div><div class='del'>-</div><div class='del'>-                case SP_STATE_READING_FRAGHDR:</div><div class='del'>-                        ret = __socket_readv (this, in-&gt;pending_vector, 1,</div><div class='del'>-                                              &amp;in-&gt;pending_vector,</div><div class='del'>-                                              &amp;in-&gt;pending_count,</div><div class='del'>-                                              NULL);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        if (ret &gt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE, "partial "</div><div class='del'>-                                        "fragment header read");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iovec vector[2];</div><div class='add'>+    struct gf_sock_incoming *in = NULL;</div><div class='add'>+    struct gf_sock_incoming_frag *frag = NULL;</div><div class='ctx'> </div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                in-&gt;record_state = SP_STATE_READ_FRAGHDR;</div><div class='del'>-                        }</div><div class='del'>-                        /* fall through */</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-                case SP_STATE_READ_FRAGHDR:</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /* used to reduce the indirection */</div><div class='add'>+    in = &amp;priv-&gt;incoming;</div><div class='add'>+    frag = &amp;in-&gt;frag;</div><div class='ctx'> </div><div class='del'>-                        in-&gt;fraghdr = ntoh32 (in-&gt;fraghdr);</div><div class='del'>-                        in-&gt;total_bytes_read += RPC_FRAGSIZE(in-&gt;fraghdr);</div><div class='add'>+    while (in-&gt;record_state != SP_STATE_COMPLETE) {</div><div class='add'>+        switch (in-&gt;record_state) {</div><div class='add'>+            case SP_STATE_NADA:</div><div class='add'>+                in-&gt;total_bytes_read = 0;</div><div class='add'>+                in-&gt;payload_vector.iov_len = 0;</div><div class='ctx'> </div><div class='del'>-                        if (in-&gt;total_bytes_read &gt;= GF_UNIT_GB) {</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                in-&gt;pending_vector = in-&gt;vector;</div><div class='add'>+                in-&gt;pending_vector-&gt;iov_base = &amp;in-&gt;fraghdr;</div><div class='ctx'> </div><div class='del'>-                        iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool,</div><div class='del'>-                                            (in-&gt;total_bytes_read +</div><div class='del'>-                                             sizeof (in-&gt;fraghdr)));</div><div class='del'>-                        if (!iobuf) {</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                in-&gt;pending_vector-&gt;iov_len = sizeof(in-&gt;fraghdr);</div><div class='ctx'> </div><div class='del'>-                        if (in-&gt;iobuf == NULL) {</div><div class='del'>-                            /* first fragment */</div><div class='del'>-                            frag-&gt;fragcurrent = iobuf_ptr (iobuf);</div><div class='del'>-                        } else {</div><div class='del'>-                            /* second or further fragment */</div><div class='del'>-                            memcpy(iobuf_ptr (iobuf), iobuf_ptr (in-&gt;iobuf),</div><div class='del'>-                               in-&gt;total_bytes_read - RPC_FRAGSIZE(in-&gt;fraghdr));</div><div class='del'>-                            iobuf_unref (in-&gt;iobuf);</div><div class='del'>-                            frag-&gt;fragcurrent = (char *) iobuf_ptr (iobuf) +</div><div class='del'>-                                in-&gt;total_bytes_read - RPC_FRAGSIZE(in-&gt;fraghdr);</div><div class='del'>-                            frag-&gt;pending_vector-&gt;iov_base = frag-&gt;fragcurrent;</div><div class='del'>-                            in-&gt;pending_vector = frag-&gt;pending_vector;</div><div class='del'>-                        }</div><div class='add'>+                in-&gt;record_state = SP_STATE_READING_FRAGHDR;</div><div class='ctx'> </div><div class='del'>-                        in-&gt;iobuf = iobuf;</div><div class='del'>-                        in-&gt;iobuf_size = 0;</div><div class='del'>-                        in-&gt;record_state = SP_STATE_READING_FRAG;</div><div class='del'>-                        /* fall through */</div><div class='add'>+                /* fall through */</div><div class='ctx'> </div><div class='del'>-                case SP_STATE_READING_FRAG:</div><div class='del'>-                        ret = __socket_read_frag (this);</div><div class='add'>+            case SP_STATE_READING_FRAGHDR:</div><div class='add'>+                ret = __socket_readv(this, in-&gt;pending_vector, 1,</div><div class='add'>+                                     &amp;in-&gt;pending_vector, &amp;in-&gt;pending_count,</div><div class='add'>+                                     NULL);</div><div class='add'>+                if (ret == -1)</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                        if ((ret == -1) ||</div><div class='del'>-                            (frag-&gt;bytes_read != RPC_FRAGSIZE (in-&gt;fraghdr))) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                if (ret &gt; 0) {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                           "partial "</div><div class='add'>+                           "fragment header read");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        frag-&gt;bytes_read = 0;</div><div class='add'>+                if (ret == 0) {</div><div class='add'>+                    in-&gt;record_state = SP_STATE_READ_FRAGHDR;</div><div class='add'>+                }</div><div class='add'>+                /* fall through */</div><div class='ctx'> </div><div class='del'>-                        if (!RPC_LASTFRAG (in-&gt;fraghdr)) {</div><div class='del'>-                                in-&gt;pending_vector = in-&gt;vector;</div><div class='del'>-                                in-&gt;pending_vector-&gt;iov_base = &amp;in-&gt;fraghdr;</div><div class='del'>-                                in-&gt;pending_vector-&gt;iov_len = sizeof(in-&gt;fraghdr);</div><div class='del'>-                                in-&gt;record_state = SP_STATE_READING_FRAGHDR;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            case SP_STATE_READ_FRAGHDR:</div><div class='add'>+</div><div class='add'>+                in-&gt;fraghdr = ntoh32(in-&gt;fraghdr);</div><div class='add'>+                in-&gt;total_bytes_read += RPC_FRAGSIZE(in-&gt;fraghdr);</div><div class='add'>+</div><div class='add'>+                if (in-&gt;total_bytes_read &gt;= GF_UNIT_GB) {</div><div class='add'>+                    ret = -ENOMEM;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                iobuf = iobuf_get2(</div><div class='add'>+                    this-&gt;ctx-&gt;iobuf_pool,</div><div class='add'>+                    (in-&gt;total_bytes_read + sizeof(in-&gt;fraghdr)));</div><div class='add'>+                if (!iobuf) {</div><div class='add'>+                    ret = -ENOMEM;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        /* we've read the entire rpc record, notify the</div><div class='del'>-                         * upper layers.</div><div class='del'>-                         */</div><div class='del'>-                        if (pollin != NULL) {</div><div class='del'>-                                int count = 0;</div><div class='del'>-                                in-&gt;iobuf_size = (in-&gt;total_bytes_read -</div><div class='del'>-                                                  in-&gt;payload_vector.iov_len);</div><div class='del'>-</div><div class='del'>-                                memset (vector, 0, sizeof (vector));</div><div class='del'>-</div><div class='del'>-                                if (in-&gt;iobref == NULL) {</div><div class='del'>-                                        in-&gt;iobref = iobref_new ();</div><div class='del'>-                                        if (in-&gt;iobref == NULL) {</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                vector[count].iov_base = iobuf_ptr (in-&gt;iobuf);</div><div class='del'>-                                vector[count].iov_len = in-&gt;iobuf_size;</div><div class='del'>-</div><div class='del'>-                                iobref = in-&gt;iobref;</div><div class='del'>-</div><div class='del'>-                                count++;</div><div class='del'>-</div><div class='del'>-                                if (in-&gt;payload_vector.iov_base != NULL) {</div><div class='del'>-                                        vector[count] = in-&gt;payload_vector;</div><div class='del'>-                                        count++;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                *pollin = rpc_transport_pollin_alloc (this,</div><div class='del'>-                                                                      vector,</div><div class='del'>-                                                                      count,</div><div class='del'>-                                                                      in-&gt;iobuf,</div><div class='del'>-                                                                      iobref,</div><div class='del'>-                                                                      in-&gt;request_info);</div><div class='del'>-                                iobuf_unref (in-&gt;iobuf);</div><div class='del'>-                                in-&gt;iobuf = NULL;</div><div class='del'>-</div><div class='del'>-                                if (*pollin == NULL) {</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                "transport pollin allocation failed");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                if (in-&gt;msg_type == REPLY)</div><div class='del'>-                                        (*pollin)-&gt;is_reply = 1;</div><div class='del'>-</div><div class='del'>-                                in-&gt;request_info = NULL;</div><div class='add'>+                if (in-&gt;iobuf == NULL) {</div><div class='add'>+                    /* first fragment */</div><div class='add'>+                    frag-&gt;fragcurrent = iobuf_ptr(iobuf);</div><div class='add'>+                } else {</div><div class='add'>+                    /* second or further fragment */</div><div class='add'>+                    memcpy(iobuf_ptr(iobuf), iobuf_ptr(in-&gt;iobuf),</div><div class='add'>+                           in-&gt;total_bytes_read - RPC_FRAGSIZE(in-&gt;fraghdr));</div><div class='add'>+                    iobuf_unref(in-&gt;iobuf);</div><div class='add'>+                    frag-&gt;fragcurrent = (char *)iobuf_ptr(iobuf) +</div><div class='add'>+                                        in-&gt;total_bytes_read -</div><div class='add'>+                                        RPC_FRAGSIZE(in-&gt;fraghdr);</div><div class='add'>+                    frag-&gt;pending_vector-&gt;iov_base = frag-&gt;fragcurrent;</div><div class='add'>+                    in-&gt;pending_vector = frag-&gt;pending_vector;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                in-&gt;iobuf = iobuf;</div><div class='add'>+                in-&gt;iobuf_size = 0;</div><div class='add'>+                in-&gt;record_state = SP_STATE_READING_FRAG;</div><div class='add'>+                /* fall through */</div><div class='add'>+</div><div class='add'>+            case SP_STATE_READING_FRAG:</div><div class='add'>+                ret = __socket_read_frag(this);</div><div class='add'>+</div><div class='add'>+                if ((ret == -1) ||</div><div class='add'>+                    (frag-&gt;bytes_read != RPC_FRAGSIZE(in-&gt;fraghdr))) {</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                frag-&gt;bytes_read = 0;</div><div class='add'>+</div><div class='add'>+                if (!RPC_LASTFRAG(in-&gt;fraghdr)) {</div><div class='add'>+                    in-&gt;pending_vector = in-&gt;vector;</div><div class='add'>+                    in-&gt;pending_vector-&gt;iov_base = &amp;in-&gt;fraghdr;</div><div class='add'>+                    in-&gt;pending_vector-&gt;iov_len = sizeof(in-&gt;fraghdr);</div><div class='add'>+                    in-&gt;record_state = SP_STATE_READING_FRAGHDR;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                /* we've read the entire rpc record, notify the</div><div class='add'>+                 * upper layers.</div><div class='add'>+                 */</div><div class='add'>+                if (pollin != NULL) {</div><div class='add'>+                    int count = 0;</div><div class='add'>+                    in-&gt;iobuf_size = (in-&gt;total_bytes_read -</div><div class='add'>+                                      in-&gt;payload_vector.iov_len);</div><div class='add'>+</div><div class='add'>+                    memset(vector, 0, sizeof(vector));</div><div class='add'>+</div><div class='add'>+                    if (in-&gt;iobref == NULL) {</div><div class='add'>+                        in-&gt;iobref = iobref_new();</div><div class='add'>+                        if (in-&gt;iobref == NULL) {</div><div class='add'>+                            ret = -1;</div><div class='add'>+                            goto out;</div><div class='ctx'>                         }</div><div class='del'>-                        in-&gt;record_state = SP_STATE_COMPLETE;</div><div class='del'>-                        break;</div><div class='add'>+                    }</div><div class='ctx'> </div><div class='del'>-                case SP_STATE_COMPLETE:</div><div class='del'>-                        /* control should not reach here */</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "control reached to "</div><div class='del'>-                                "SP_STATE_COMPLETE, which should not have "</div><div class='del'>-                                "happened");</div><div class='del'>-                        break;</div><div class='add'>+                    vector[count].iov_base = iobuf_ptr(in-&gt;iobuf);</div><div class='add'>+                    vector[count].iov_len = in-&gt;iobuf_size;</div><div class='add'>+</div><div class='add'>+                    iobref = in-&gt;iobref;</div><div class='add'>+</div><div class='add'>+                    count++;</div><div class='add'>+</div><div class='add'>+                    if (in-&gt;payload_vector.iov_base != NULL) {</div><div class='add'>+                        vector[count] = in-&gt;payload_vector;</div><div class='add'>+                        count++;</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    *pollin = rpc_transport_pollin_alloc(this, vector, count,</div><div class='add'>+                                                         in-&gt;iobuf, iobref,</div><div class='add'>+                                                         in-&gt;request_info);</div><div class='add'>+                    iobuf_unref(in-&gt;iobuf);</div><div class='add'>+                    in-&gt;iobuf = NULL;</div><div class='add'>+</div><div class='add'>+                    if (*pollin == NULL) {</div><div class='add'>+                        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                               "transport pollin allocation failed");</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        goto out;</div><div class='add'>+                    }</div><div class='add'>+                    if (in-&gt;msg_type == REPLY)</div><div class='add'>+                        (*pollin)-&gt;is_reply = 1;</div><div class='add'>+</div><div class='add'>+                    in-&gt;request_info = NULL;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='add'>+                in-&gt;record_state = SP_STATE_COMPLETE;</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-        if (in-&gt;record_state == SP_STATE_COMPLETE) {</div><div class='del'>-                in-&gt;record_state = SP_STATE_NADA;</div><div class='del'>-                __socket_reset_priv (priv);</div><div class='add'>+            case SP_STATE_COMPLETE:</div><div class='add'>+                /* control should not reach here */</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "control reached to "</div><div class='add'>+                       "SP_STATE_COMPLETE, which should not have "</div><div class='add'>+                       "happened");</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (in-&gt;record_state == SP_STATE_COMPLETE) {</div><div class='add'>+        in-&gt;record_state = SP_STATE_NADA;</div><div class='add'>+        __socket_reset_priv(priv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if ((ret == -1) &amp;&amp; (errno == EAGAIN)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    if ((ret == -1) &amp;&amp; (errno == EAGAIN)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_proto_state_machine (rpc_transport_t *this,</div><div class='del'>-                            rpc_transport_pollin_t **pollin)</div><div class='add'>+socket_proto_state_machine(rpc_transport_t *this,</div><div class='add'>+                           rpc_transport_pollin_t **pollin)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __socket_proto_state_machine (this, pollin);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __socket_proto_state_machine(this, pollin);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_event_poll_in (rpc_transport_t *this, gf_boolean_t notify_handled)</div><div class='add'>+socket_event_poll_in(rpc_transport_t *this, gf_boolean_t notify_handled)</div><div class='ctx'> {</div><div class='del'>-        int                     ret    = -1;</div><div class='del'>-        rpc_transport_pollin_t *pollin = NULL;</div><div class='del'>-        socket_private_t       *priv = this-&gt;private;</div><div class='del'>-        glusterfs_ctx_t        *ctx  = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    rpc_transport_pollin_t *pollin = NULL;</div><div class='add'>+    socket_private_t *priv = this-&gt;private;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        ret = socket_proto_state_machine (this, &amp;pollin);</div><div class='add'>+    ret = socket_proto_state_machine(this, &amp;pollin);</div><div class='ctx'> </div><div class='del'>-        if (pollin) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;notify.lock);</div><div class='del'>-                {</div><div class='del'>-                        priv-&gt;notify.in_progress++;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;notify.lock);</div><div class='add'>+    if (pollin) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;notify.lock);</div><div class='add'>+        {</div><div class='add'>+            priv-&gt;notify.in_progress++;</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;notify.lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (notify_handled &amp;&amp; (ret != -1))</div><div class='add'>+        event_handled(ctx-&gt;event_pool, priv-&gt;sock, priv-&gt;idx, priv-&gt;gen);</div><div class='ctx'> </div><div class='del'>-        if (notify_handled &amp;&amp; (ret != -1))</div><div class='del'>-                event_handled (ctx-&gt;event_pool, priv-&gt;sock, priv-&gt;idx,</div><div class='del'>-                               priv-&gt;gen);</div><div class='del'>-</div><div class='del'>-        if (pollin) {</div><div class='del'>-                ret = rpc_transport_notify (this, RPC_TRANSPORT_MSG_RECEIVED,</div><div class='del'>-                                            pollin);</div><div class='add'>+    if (pollin) {</div><div class='add'>+        ret = rpc_transport_notify(this, RPC_TRANSPORT_MSG_RECEIVED, pollin);</div><div class='ctx'> </div><div class='del'>-                rpc_transport_pollin_destroy (pollin);</div><div class='add'>+        rpc_transport_pollin_destroy(pollin);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;notify.lock);</div><div class='del'>-                {</div><div class='del'>-                        --priv-&gt;notify.in_progress;</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;notify.lock);</div><div class='add'>+        {</div><div class='add'>+            --priv-&gt;notify.in_progress;</div><div class='ctx'> </div><div class='del'>-                        if (!priv-&gt;notify.in_progress)</div><div class='del'>-                                pthread_cond_signal (&amp;priv-&gt;notify.cond);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;notify.lock);</div><div class='add'>+            if (!priv-&gt;notify.in_progress)</div><div class='add'>+                pthread_cond_signal(&amp;priv-&gt;notify.cond);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;notify.lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_connect_finish (rpc_transport_t *this)</div><div class='add'>+socket_connect_finish(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int                   ret        = -1;</div><div class='del'>-        socket_private_t     *priv       = NULL;</div><div class='del'>-        rpc_transport_event_t event      = 0;</div><div class='del'>-        char                  notify_rpc = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    rpc_transport_event_t event = 0;</div><div class='add'>+    char notify_rpc = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;connected != 0)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-                get_transport_identifiers (this);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-                ret = __socket_connect_finish (priv-&gt;sock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;connected != 0)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (ret == -1 &amp;&amp; errno == EINPROGRESS)</div><div class='del'>-                        ret = 1;</div><div class='add'>+        get_transport_identifiers(this);</div><div class='ctx'> </div><div class='del'>-                if (ret == -1 &amp;&amp; errno != EINPROGRESS) {</div><div class='del'>-                        if (!priv-&gt;connect_finish_log) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "connection to %s failed (%s); "</div><div class='del'>-                                        "disconnecting socket",</div><div class='del'>-                                        this-&gt;peerinfo.identifier,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                                priv-&gt;connect_finish_log = 1;</div><div class='del'>-                        }</div><div class='del'>-                        __socket_disconnect (this);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        ret = __socket_connect_finish(priv-&gt;sock);</div><div class='ctx'> </div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        notify_rpc = 1;</div><div class='del'>-</div><div class='del'>-                        this-&gt;myinfo.sockaddr_len =</div><div class='del'>-                                sizeof (this-&gt;myinfo.sockaddr);</div><div class='del'>-</div><div class='del'>-                        ret = getsockname (priv-&gt;sock,</div><div class='del'>-                                           SA (&amp;this-&gt;myinfo.sockaddr),</div><div class='del'>-                                           &amp;this-&gt;myinfo.sockaddr_len);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "getsockname on (%d) failed (%s) - "</div><div class='del'>-                                        "disconnecting socket",</div><div class='del'>-                                        priv-&gt;sock, strerror (errno));</div><div class='del'>-                                __socket_disconnect (this);</div><div class='del'>-                                event = RPC_TRANSPORT_DISCONNECT;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='add'>+        if (ret == -1 &amp;&amp; errno == EINPROGRESS)</div><div class='add'>+            ret = 1;</div><div class='ctx'> </div><div class='del'>-                        priv-&gt;connected = 1;</div><div class='del'>-                        priv-&gt;connect_finish_log = 0;</div><div class='del'>-                        event = RPC_TRANSPORT_CONNECT;</div><div class='del'>-                }</div><div class='add'>+        if (ret == -1 &amp;&amp; errno != EINPROGRESS) {</div><div class='add'>+            if (!priv-&gt;connect_finish_log) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "connection to %s failed (%s); "</div><div class='add'>+                       "disconnecting socket",</div><div class='add'>+                       this-&gt;peerinfo.identifier, strerror(errno));</div><div class='add'>+                priv-&gt;connect_finish_log = 1;</div><div class='add'>+            }</div><div class='add'>+            __socket_disconnect(this);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            notify_rpc = 1;</div><div class='add'>+</div><div class='add'>+            this-&gt;myinfo.sockaddr_len = sizeof(this-&gt;myinfo.sockaddr);</div><div class='add'>+</div><div class='add'>+            ret = getsockname(priv-&gt;sock, SA(&amp;this-&gt;myinfo.sockaddr),</div><div class='add'>+                              &amp;this-&gt;myinfo.sockaddr_len);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "getsockname on (%d) failed (%s) - "</div><div class='add'>+                       "disconnecting socket",</div><div class='add'>+                       priv-&gt;sock, strerror(errno));</div><div class='add'>+                __socket_disconnect(this);</div><div class='add'>+                event = RPC_TRANSPORT_DISCONNECT;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            priv-&gt;connected = 1;</div><div class='add'>+            priv-&gt;connect_finish_log = 0;</div><div class='add'>+            event = RPC_TRANSPORT_CONNECT;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='del'>-        if (notify_rpc) {</div><div class='del'>-                rpc_transport_notify (this, event, this);</div><div class='del'>-        }</div><div class='add'>+    if (notify_rpc) {</div><div class='add'>+        rpc_transport_notify(this, event, this);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int socket_disconnect (rpc_transport_t *this, gf_boolean_t wait);</div><div class='add'>+static int</div><div class='add'>+socket_disconnect(rpc_transport_t *this, gf_boolean_t wait);</div><div class='ctx'> </div><div class='ctx'> /* socket_is_connected() is for use only in socket_event_handler() */</div><div class='ctx'> static inline gf_boolean_t</div><div class='del'>-socket_is_connected (rpc_transport_t *this)</div><div class='add'>+socket_is_connected(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv          = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;use_ssl) {</div><div class='del'>-                return priv-&gt;is_server ? priv-&gt;ssl_accepted :</div><div class='del'>-                                         priv-&gt;ssl_connected;</div><div class='del'>-        } else {</div><div class='del'>-                return priv-&gt;is_server ? priv-&gt;accepted :</div><div class='del'>-                                         priv-&gt;connected;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;use_ssl) {</div><div class='add'>+        return priv-&gt;is_server ? priv-&gt;ssl_accepted : priv-&gt;ssl_connected;</div><div class='add'>+    } else {</div><div class='add'>+        return priv-&gt;is_server ? priv-&gt;accepted : priv-&gt;connected;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ssl_rearm_event_fd (rpc_transport_t *this)</div><div class='add'>+ssl_rearm_event_fd(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx    = NULL;</div><div class='del'>-        int               idx = -1;</div><div class='del'>-        int               gen = -1;</div><div class='del'>-        int               fd  = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        idx = priv-&gt;idx;</div><div class='del'>-        gen = priv-&gt;gen;</div><div class='del'>-        fd  = priv-&gt;sock;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;ssl_error_required == SSL_ERROR_WANT_READ)</div><div class='del'>-                event_select_on (ctx-&gt;event_pool, fd, idx, 1, -1);</div><div class='del'>-        if (priv-&gt;ssl_error_required == SSL_ERROR_WANT_WRITE)</div><div class='del'>-                event_select_on (ctx-&gt;event_pool, fd, idx, -1, 1);</div><div class='del'>-        event_handled (ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int gen = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    idx = priv-&gt;idx;</div><div class='add'>+    gen = priv-&gt;gen;</div><div class='add'>+    fd = priv-&gt;sock;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;ssl_error_required == SSL_ERROR_WANT_READ)</div><div class='add'>+        event_select_on(ctx-&gt;event_pool, fd, idx, 1, -1);</div><div class='add'>+    if (priv-&gt;ssl_error_required == SSL_ERROR_WANT_WRITE)</div><div class='add'>+        event_select_on(ctx-&gt;event_pool, fd, idx, -1, 1);</div><div class='add'>+    event_handled(ctx-&gt;event_pool, fd, idx, gen);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ssl_handle_server_connection_attempt (rpc_transport_t *this)</div><div class='add'>+ssl_handle_server_connection_attempt(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx    = NULL;</div><div class='del'>-        int               idx = -1;</div><div class='del'>-        int               gen = -1;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        int               fd  = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        idx = priv-&gt;idx;</div><div class='del'>-        gen = priv-&gt;gen;</div><div class='del'>-        fd  = priv-&gt;sock;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;ssl_context_created) {</div><div class='del'>-                ret = ssl_setup_connection_prefix (this);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "&gt; ssl_setup_connection_prefix() failed!");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        priv-&gt;ssl_context_created = _gf_true;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = ssl_complete_connection (this);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                /* nothing to do */</div><div class='del'>-                event_select_on (ctx-&gt;event_pool, fd, idx, 1, 0);</div><div class='del'>-                event_handled (ctx-&gt;event_pool, fd, idx, gen);</div><div class='del'>-                ret = 1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int gen = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    idx = priv-&gt;idx;</div><div class='add'>+    gen = priv-&gt;gen;</div><div class='add'>+    fd = priv-&gt;sock;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;ssl_context_created) {</div><div class='add'>+        ret = ssl_setup_connection_prefix(this);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "&gt; ssl_setup_connection_prefix() failed!");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         } else {</div><div class='del'>-                if (errno == EAGAIN) {</div><div class='del'>-                        ssl_rearm_event_fd (this);</div><div class='del'>-                        ret = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "ssl_complete_connection returned error");</div><div class='del'>-                }</div><div class='add'>+            priv-&gt;ssl_context_created = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = ssl_complete_connection(this);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        /* nothing to do */</div><div class='add'>+        event_select_on(ctx-&gt;event_pool, fd, idx, 1, 0);</div><div class='add'>+        event_handled(ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+        ret = 1;</div><div class='add'>+    } else {</div><div class='add'>+        if (errno == EAGAIN) {</div><div class='add'>+            ssl_rearm_event_fd(this);</div><div class='add'>+            ret = 1;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "ssl_complete_connection returned error");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ssl_handle_client_connection_attempt (rpc_transport_t *this)</div><div class='add'>+ssl_handle_client_connection_attempt(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx    = NULL;</div><div class='del'>-        int               idx = -1;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        int               fd  = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        idx = priv-&gt;idx;</div><div class='del'>-        fd  = priv-&gt;sock;</div><div class='del'>-</div><div class='del'>-        /* SSL client */</div><div class='del'>-        if (priv-&gt;connect_failed) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "&gt;&gt;&gt; disconnecting SSL socket");</div><div class='del'>-                ret = socket_disconnect (this, _gf_false);</div><div class='del'>-                /* Force ret to be -1, as we are officially done with</div><div class='del'>-                   this socket */</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    idx = priv-&gt;idx;</div><div class='add'>+    fd = priv-&gt;sock;</div><div class='add'>+</div><div class='add'>+    /* SSL client */</div><div class='add'>+    if (priv-&gt;connect_failed) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "&gt;&gt;&gt; disconnecting SSL socket");</div><div class='add'>+        ret = socket_disconnect(this, _gf_false);</div><div class='add'>+        /* Force ret to be -1, as we are officially done with</div><div class='add'>+           this socket */</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else {</div><div class='add'>+        if (!priv-&gt;ssl_context_created) {</div><div class='add'>+            ret = ssl_setup_connection_prefix(this);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "&gt; ssl_setup_connection_prefix() "</div><div class='add'>+                       "failed!");</div><div class='ctx'>                 ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                priv-&gt;ssl_context_created = _gf_true;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        ret = ssl_complete_connection(this);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            ret = socket_connect_finish(this);</div><div class='add'>+            event_select_on(ctx-&gt;event_pool, fd, idx, 1, 0);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "&gt;&gt;&gt; completed client connect");</div><div class='ctx'>         } else {</div><div class='del'>-                if (!priv-&gt;ssl_context_created) {</div><div class='del'>-                        ret = ssl_setup_connection_prefix (this);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "&gt; ssl_setup_connection_prefix() "</div><div class='del'>-                                        "failed!");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                priv-&gt;ssl_context_created = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = ssl_complete_connection (this);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        ret = socket_connect_finish (this);</div><div class='del'>-                        event_select_on (ctx-&gt;event_pool, fd, idx, 1, 0);</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "&gt;&gt;&gt; completed client connect");</div><div class='del'>-                } else {</div><div class='del'>-                        if (errno == EAGAIN) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "&gt;&gt;&gt; retrying client connect 2");</div><div class='del'>-                                ssl_rearm_event_fd (this);</div><div class='del'>-                                ret = 1;</div><div class='del'>-                        } else {</div><div class='del'>-                                /* this is a connection failure */</div><div class='del'>-                                ret = socket_connect_finish (this);</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "ssl_complete_connection "</div><div class='del'>-                                        "returned error");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (errno == EAGAIN) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "&gt;&gt;&gt; retrying client connect 2");</div><div class='add'>+                ssl_rearm_event_fd(this);</div><div class='add'>+                ret = 1;</div><div class='add'>+            } else {</div><div class='add'>+                /* this is a connection failure */</div><div class='add'>+                ret = socket_connect_finish(this);</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "ssl_complete_connection "</div><div class='add'>+                       "returned error");</div><div class='add'>+                ret = -1;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-socket_handle_client_connection_attempt (rpc_transport_t *this)</div><div class='add'>+socket_handle_client_connection_attempt(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx    = NULL;</div><div class='del'>-        int               idx = -1;</div><div class='del'>-        int               gen = -1;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        int               fd  = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        idx = priv-&gt;idx;</div><div class='del'>-        gen = priv-&gt;gen;</div><div class='del'>-        fd  = priv-&gt;sock;</div><div class='del'>-</div><div class='del'>-        /* non-SSL client */</div><div class='del'>-        if (priv-&gt;connect_failed) {</div><div class='del'>-                /* connect failed with some other error than</div><div class='del'>-                   EINPROGRESS or ENOENT, so nothing more to</div><div class='del'>-                   do, fail reading/writing anything even if</div><div class='del'>-                   poll_in or poll_out</div><div class='del'>-                   is set</div><div class='del'>-                   */</div><div class='del'>-                gf_log ("transport", GF_LOG_DEBUG,</div><div class='del'>-                        "connect failed with some other error "</div><div class='del'>-                        "than EINPROGRESS or ENOENT, so "</div><div class='del'>-                        "nothing more to do; disconnecting "</div><div class='del'>-                        "socket");</div><div class='del'>-                (void)socket_disconnect (this, _gf_false);</div><div class='del'>-</div><div class='del'>-                /* Force ret to be -1, as we are officially</div><div class='del'>-                 * done with this socket</div><div class='del'>-                 */</div><div class='del'>-                ret = -1;</div><div class='del'>-        } else {</div><div class='del'>-                ret = socket_connect_finish (this);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "socket_connect_finish() returned %d",</div><div class='del'>-                        ret);</div><div class='del'>-                if (ret == 0 || ret == 1) {</div><div class='del'>-                        /* we don't want to do any reads or</div><div class='del'>-                         * writes on the connection yet in</div><div class='del'>-                         * socket_event_handler, so just</div><div class='del'>-                         * return 1</div><div class='del'>-                         */</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        event_handled (ctx-&gt;event_pool, fd, idx, gen);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int gen = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    idx = priv-&gt;idx;</div><div class='add'>+    gen = priv-&gt;gen;</div><div class='add'>+    fd = priv-&gt;sock;</div><div class='add'>+</div><div class='add'>+    /* non-SSL client */</div><div class='add'>+    if (priv-&gt;connect_failed) {</div><div class='add'>+        /* connect failed with some other error than</div><div class='add'>+           EINPROGRESS or ENOENT, so nothing more to</div><div class='add'>+           do, fail reading/writing anything even if</div><div class='add'>+           poll_in or poll_out</div><div class='add'>+           is set</div><div class='add'>+           */</div><div class='add'>+        gf_log("transport", GF_LOG_DEBUG,</div><div class='add'>+               "connect failed with some other error "</div><div class='add'>+               "than EINPROGRESS or ENOENT, so "</div><div class='add'>+               "nothing more to do; disconnecting "</div><div class='add'>+               "socket");</div><div class='add'>+        (void)socket_disconnect(this, _gf_false);</div><div class='add'>+</div><div class='add'>+        /* Force ret to be -1, as we are officially</div><div class='add'>+         * done with this socket</div><div class='add'>+         */</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else {</div><div class='add'>+        ret = socket_connect_finish(this);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "socket_connect_finish() returned %d",</div><div class='add'>+               ret);</div><div class='add'>+        if (ret == 0 || ret == 1) {</div><div class='add'>+            /* we don't want to do any reads or</div><div class='add'>+             * writes on the connection yet in</div><div class='add'>+             * socket_event_handler, so just</div><div class='add'>+             * return 1</div><div class='add'>+             */</div><div class='add'>+            ret = 1;</div><div class='add'>+            event_handled(ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-socket_complete_connection (rpc_transport_t *this)</div><div class='add'>+socket_complete_connection(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx    = NULL;</div><div class='del'>-        int               idx = -1;</div><div class='del'>-        int               gen = -1;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        int               fd  = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int gen = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        idx = priv-&gt;idx;</div><div class='del'>-        gen = priv-&gt;gen;</div><div class='del'>-        fd  = priv-&gt;sock;</div><div class='add'>+    idx = priv-&gt;idx;</div><div class='add'>+    gen = priv-&gt;gen;</div><div class='add'>+    fd = priv-&gt;sock;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;use_ssl) {</div><div class='del'>-                if (priv-&gt;is_server) {</div><div class='del'>-                        ret = ssl_handle_server_connection_attempt (this);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = ssl_handle_client_connection_attempt (this);</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;use_ssl) {</div><div class='add'>+        if (priv-&gt;is_server) {</div><div class='add'>+            ret = ssl_handle_server_connection_attempt(this);</div><div class='ctx'>         } else {</div><div class='del'>-                if (priv-&gt;is_server) {</div><div class='del'>-                        /* non-SSL server: nothing much to do</div><div class='del'>-                         * connection has already been accepted in</div><div class='del'>-                         * socket_server_event_handler()</div><div class='del'>-                         */</div><div class='del'>-                        priv-&gt;accepted = _gf_true;</div><div class='del'>-                        event_handled (ctx-&gt;event_pool, fd, idx, gen);</div><div class='del'>-                        ret = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = socket_handle_client_connection_attempt (this);</div><div class='del'>-                }</div><div class='add'>+            ret = ssl_handle_client_connection_attempt(this);</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    } else {</div><div class='add'>+        if (priv-&gt;is_server) {</div><div class='add'>+            /* non-SSL server: nothing much to do</div><div class='add'>+             * connection has already been accepted in</div><div class='add'>+             * socket_server_event_handler()</div><div class='add'>+             */</div><div class='add'>+            priv-&gt;accepted = _gf_true;</div><div class='add'>+            event_handled(ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+            ret = 1;</div><div class='add'>+        } else {</div><div class='add'>+            ret = socket_handle_client_connection_attempt(this);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* reads rpc_requests during pollin */</div><div class='ctx'> static int</div><div class='del'>-socket_event_handler (int fd, int idx, int gen, void *data,</div><div class='del'>-                      int poll_in, int poll_out, int poll_err)</div><div class='add'>+socket_event_handler(int fd, int idx, int gen, void *data, int poll_in,</div><div class='add'>+                     int poll_out, int poll_err)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_t  *this          = NULL;</div><div class='del'>-        socket_private_t *priv          = NULL;</div><div class='del'>-        int               ret           = -1;</div><div class='del'>-        glusterfs_ctx_t  *ctx           = NULL;</div><div class='del'>-        gf_boolean_t      socket_closed = _gf_false, notify_handled = _gf_false;</div><div class='add'>+    rpc_transport_t *this = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    gf_boolean_t socket_closed = _gf_false, notify_handled = _gf_false;</div><div class='ctx'> </div><div class='add'>+    this = data;</div><div class='ctx'> </div><div class='del'>-        this = data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;xl, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;xl, out);</div><div class='add'>+    THIS = this-&gt;xl;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        THIS = this-&gt;xl;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        priv-&gt;idx = idx;</div><div class='add'>+        priv-&gt;gen = gen;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_TRACE, "%s (sock:%d) in:%d, out:%d, err:%d",</div><div class='add'>+           (priv-&gt;is_server ? "server" : "client"), priv-&gt;sock, poll_in,</div><div class='add'>+           poll_out, poll_err);</div><div class='add'>+</div><div class='add'>+    if (!poll_err) {</div><div class='add'>+        if (!socket_is_connected(this)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (sock:%d) socket is not connected, "</div><div class='add'>+                   "completing connection",</div><div class='add'>+                   (priv-&gt;is_server ? "server" : "client"), priv-&gt;sock);</div><div class='add'>+</div><div class='add'>+            ret = socket_complete_connection(this);</div><div class='add'>+</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "(sock:%d) "</div><div class='add'>+                   "socket_complete_connection() returned %d",</div><div class='add'>+                   priv-&gt;sock, ret);</div><div class='add'>+</div><div class='add'>+            if (ret &gt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "(sock:%d) returning to wait on socket", priv-&gt;sock);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            char *sock_type = (priv-&gt;is_server ? "Server" : "Client");</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                priv-&gt;idx = idx;</div><div class='del'>-                priv-&gt;gen = gen;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s socket (%d) is already connected", sock_type,</div><div class='add'>+                   priv-&gt;sock);</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_TRACE, "%s (sock:%d) in:%d, out:%d, err:%d",</div><div class='del'>-                (priv-&gt;is_server ? "server" : "client"),</div><div class='del'>-                priv-&gt;sock, poll_in, poll_out, poll_err);</div><div class='del'>-</div><div class='del'>-        if (!poll_err) {</div><div class='del'>-                if (!socket_is_connected (this)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s (sock:%d) socket is not connected, "</div><div class='del'>-                                "completing connection",</div><div class='del'>-                                (priv-&gt;is_server ? "server" : "client"),</div><div class='del'>-                                priv-&gt;sock);</div><div class='del'>-</div><div class='del'>-                        ret = socket_complete_connection (this);</div><div class='del'>-</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE, "(sock:%d) "</div><div class='del'>-                                "socket_complete_connection() returned %d",</div><div class='del'>-                                priv-&gt;sock, ret);</div><div class='del'>-</div><div class='del'>-                        if (ret &gt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "(sock:%d) returning to wait on socket",</div><div class='del'>-                                        priv-&gt;sock);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        char *sock_type = (priv-&gt;is_server ? "Server" :</div><div class='del'>-                                                             "Client");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s socket (%d) is already connected",</div><div class='del'>-                                sock_type, priv-&gt;sock);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (!ret &amp;&amp; poll_out) {</div><div class='add'>+        ret = socket_event_poll_out(this);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "(sock:%d) "</div><div class='add'>+               "socket_event_poll_out returned %d",</div><div class='add'>+               priv-&gt;sock, ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; poll_out) {</div><div class='del'>-                ret = socket_event_poll_out (this);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "(sock:%d) "</div><div class='del'>-                        "socket_event_poll_out returned %d", priv-&gt;sock, ret);</div><div class='del'>-        }</div><div class='add'>+    if (!ret &amp;&amp; poll_in) {</div><div class='add'>+        ret = socket_event_poll_in(this, !poll_err);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "(sock:%d) "</div><div class='add'>+               "socket_event_poll_in returned %d",</div><div class='add'>+               priv-&gt;sock, ret);</div><div class='add'>+        notify_handled = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; poll_in) {</div><div class='del'>-                ret = socket_event_poll_in (this, !poll_err);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "(sock:%d) "</div><div class='del'>-                        "socket_event_poll_in returned %d", priv-&gt;sock, ret);</div><div class='del'>-                notify_handled = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if ((ret &lt; 0) || poll_err) {</div><div class='add'>+        struct sockaddr *sa = SA(&amp;this-&gt;peerinfo.sockaddr);</div><div class='ctx'> </div><div class='del'>-        if ((ret &lt; 0) || poll_err) {</div><div class='del'>-                struct sockaddr *sa = SA(&amp;this-&gt;peerinfo.sockaddr);</div><div class='add'>+        if (priv-&gt;is_server &amp;&amp;</div><div class='add'>+            SA(&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family == AF_UNIX) {</div><div class='add'>+            sa = SA(&amp;this-&gt;myinfo.sockaddr);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;is_server &amp;&amp;</div><div class='del'>-                    SA(&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family == AF_UNIX) {</div><div class='del'>-                        sa = SA(&amp;this-&gt;myinfo.sockaddr);</div><div class='del'>-                }</div><div class='add'>+        socket_dump_info(sa, priv-&gt;is_server, priv-&gt;use_ssl, priv-&gt;sock,</div><div class='add'>+                         this-&gt;name, "disconnecting from");</div><div class='ctx'> </div><div class='del'>-                socket_dump_info (sa, priv-&gt;is_server, priv-&gt;use_ssl,</div><div class='del'>-                                  priv-&gt;sock, this-&gt;name,</div><div class='del'>-                                  "disconnecting from");</div><div class='add'>+        /* Logging has happened already in earlier cases */</div><div class='add'>+        gf_log("transport", ((ret &gt;= 0) ? GF_LOG_INFO : GF_LOG_DEBUG),</div><div class='add'>+               "EPOLLERR - disconnecting (sock:%d) (%s)", priv-&gt;sock,</div><div class='add'>+               (priv-&gt;use_ssl ? "SSL" : "non-SSL"));</div><div class='ctx'> </div><div class='del'>-                /* Logging has happened already in earlier cases */</div><div class='del'>-                gf_log ("transport", ((ret &gt;= 0) ? GF_LOG_INFO : GF_LOG_DEBUG),</div><div class='del'>-                        "EPOLLERR - disconnecting (sock:%d) (%s)",</div><div class='del'>-                        priv-&gt;sock, (priv-&gt;use_ssl ? "SSL" : "non-SSL"));</div><div class='add'>+        socket_closed = socket_event_poll_err(this, gen, idx);</div><div class='ctx'> </div><div class='del'>-                socket_closed = socket_event_poll_err (this, gen, idx);</div><div class='add'>+        if (socket_closed)</div><div class='add'>+            rpc_transport_unref(this);</div><div class='ctx'> </div><div class='del'>-                if (socket_closed)</div><div class='del'>-                        rpc_transport_unref (this);</div><div class='del'>-</div><div class='del'>-        } else if (!notify_handled) {</div><div class='del'>-                event_handled (ctx-&gt;event_pool, fd, idx, gen);</div><div class='del'>-        }</div><div class='add'>+    } else if (!notify_handled) {</div><div class='add'>+        event_handled(ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-socket_server_event_handler (int fd, int idx, int gen, void *data,</div><div class='del'>-                             int poll_in, int poll_out, int poll_err)</div><div class='add'>+socket_server_event_handler(int fd, int idx, int gen, void *data, int poll_in,</div><div class='add'>+                            int poll_out, int poll_err)</div><div class='ctx'> {</div><div class='del'>-        rpc_transport_t             *this = NULL;</div><div class='del'>-        socket_private_t        *priv = NULL;</div><div class='del'>-        int                      ret = 0;</div><div class='del'>-        int                      new_sock = -1;</div><div class='del'>-        rpc_transport_t             *new_trans = NULL;</div><div class='del'>-        struct sockaddr_storage  new_sockaddr = {0, };</div><div class='del'>-        socklen_t                addrlen = sizeof (new_sockaddr);</div><div class='del'>-        socket_private_t        *new_priv = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        this = data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;xl, out);</div><div class='del'>-</div><div class='del'>-        THIS = this-&gt;xl;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx  = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        /* NOTE:</div><div class='del'>-         * We have done away with the critical section in this function. since</div><div class='del'>-         * there's little that it helps with. There's no other code that</div><div class='del'>-         * attempts to unref the listener socket/transport from any other</div><div class='del'>-         * thread context while we are using it here.</div><div class='del'>-         */</div><div class='del'>-        priv-&gt;idx = idx;</div><div class='del'>-</div><div class='del'>-        if (poll_in) {</div><div class='del'>-                new_sock = accept (priv-&gt;sock, SA (&amp;new_sockaddr), &amp;addrlen);</div><div class='del'>-</div><div class='del'>-                if (ctx)</div><div class='del'>-                        event_handled (ctx-&gt;event_pool, fd, idx, gen);</div><div class='del'>-</div><div class='del'>-                if (new_sock == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "accept on %d failed (%s)",</div><div class='del'>-                                priv-&gt;sock, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;nodelay &amp;&amp; (new_sockaddr.ss_family != AF_UNIX)) {</div><div class='del'>-                        ret = __socket_nodelay (new_sock);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "setsockopt() failed for "</div><div class='del'>-                                        "NODELAY (%s)",</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;keepalive &amp;&amp;</div><div class='del'>-                                new_sockaddr.ss_family != AF_UNIX) {</div><div class='del'>-                        ret = __socket_keepalive (new_sock,</div><div class='del'>-                                                  new_sockaddr.ss_family,</div><div class='del'>-                                                  priv-&gt;keepaliveintvl,</div><div class='del'>-                                                  priv-&gt;keepaliveidle,</div><div class='del'>-                                                  priv-&gt;keepalivecnt,</div><div class='del'>-                                                  priv-&gt;timeout);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Failed to set keep-alive: %s",</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                new_trans = GF_CALLOC (1, sizeof (*new_trans),</div><div class='del'>-                                gf_common_mt_rpc_trans_t);</div><div class='del'>-                if (!new_trans) {</div><div class='del'>-                        sys_close (new_sock);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = pthread_mutex_init(&amp;new_trans-&gt;lock, NULL);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "pthread_mutex_init() failed: %s",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        sys_close (new_sock);</div><div class='del'>-                        GF_FREE (new_trans);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                INIT_LIST_HEAD (&amp;new_trans-&gt;list);</div><div class='del'>-</div><div class='del'>-                new_trans-&gt;name = gf_strdup (this-&gt;name);</div><div class='del'>-</div><div class='del'>-                memcpy (&amp;new_trans-&gt;peerinfo.sockaddr, &amp;new_sockaddr, addrlen);</div><div class='del'>-                new_trans-&gt;peerinfo.sockaddr_len = addrlen;</div><div class='del'>-</div><div class='del'>-                new_trans-&gt;myinfo.sockaddr_len = sizeof (new_trans-&gt;myinfo.sockaddr);</div><div class='del'>-</div><div class='del'>-                ret = getsockname (new_sock, SA (&amp;new_trans-&gt;myinfo.sockaddr),</div><div class='del'>-                                   &amp;new_trans-&gt;myinfo.sockaddr_len);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "getsockname on %d failed (%s)",</div><div class='del'>-                                new_sock, strerror (errno));</div><div class='del'>-                        sys_close (new_sock);</div><div class='del'>-                        GF_FREE (new_trans-&gt;name);</div><div class='del'>-                        GF_FREE (new_trans);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    rpc_transport_t *this = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int new_sock = -1;</div><div class='add'>+    rpc_transport_t *new_trans = NULL;</div><div class='add'>+    struct sockaddr_storage new_sockaddr = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    socklen_t addrlen = sizeof(new_sockaddr);</div><div class='add'>+    socket_private_t *new_priv = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    this = data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;xl, out);</div><div class='add'>+</div><div class='add'>+    THIS = this-&gt;xl;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    /* NOTE:</div><div class='add'>+     * We have done away with the critical section in this function. since</div><div class='add'>+     * there's little that it helps with. There's no other code that</div><div class='add'>+     * attempts to unref the listener socket/transport from any other</div><div class='add'>+     * thread context while we are using it here.</div><div class='add'>+     */</div><div class='add'>+    priv-&gt;idx = idx;</div><div class='add'>+</div><div class='add'>+    if (poll_in) {</div><div class='add'>+        new_sock = accept(priv-&gt;sock, SA(&amp;new_sockaddr), &amp;addrlen);</div><div class='add'>+</div><div class='add'>+        if (ctx)</div><div class='add'>+            event_handled(ctx-&gt;event_pool, fd, idx, gen);</div><div class='add'>+</div><div class='add'>+        if (new_sock == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "accept on %d failed (%s)",</div><div class='add'>+                   priv-&gt;sock, strerror(errno));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (priv-&gt;nodelay &amp;&amp; (new_sockaddr.ss_family != AF_UNIX)) {</div><div class='add'>+            ret = __socket_nodelay(new_sock);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "setsockopt() failed for "</div><div class='add'>+                       "NODELAY (%s)",</div><div class='add'>+                       strerror(errno));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (priv-&gt;keepalive &amp;&amp; new_sockaddr.ss_family != AF_UNIX) {</div><div class='add'>+            ret = __socket_keepalive(new_sock, new_sockaddr.ss_family,</div><div class='add'>+                                     priv-&gt;keepaliveintvl, priv-&gt;keepaliveidle,</div><div class='add'>+                                     priv-&gt;keepalivecnt, priv-&gt;timeout);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Failed to set keep-alive: %s", strerror(errno));</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        new_trans = GF_CALLOC(1, sizeof(*new_trans), gf_common_mt_rpc_trans_t);</div><div class='add'>+        if (!new_trans) {</div><div class='add'>+            sys_close(new_sock);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = pthread_mutex_init(&amp;new_trans-&gt;lock, NULL);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "pthread_mutex_init() failed: %s", strerror(errno));</div><div class='add'>+            sys_close(new_sock);</div><div class='add'>+            GF_FREE(new_trans);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        INIT_LIST_HEAD(&amp;new_trans-&gt;list);</div><div class='ctx'> </div><div class='del'>-                get_transport_identifiers (new_trans);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "XXX server:%s, client:%s",</div><div class='del'>-                        new_trans-&gt;myinfo.identifier,</div><div class='del'>-                        new_trans-&gt;peerinfo.identifier);</div><div class='add'>+        new_trans-&gt;name = gf_strdup(this-&gt;name);</div><div class='ctx'> </div><div class='del'>-                ret = socket_init(new_trans);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        sys_close (new_sock);</div><div class='del'>-                        GF_FREE (new_trans-&gt;name);</div><div class='del'>-                        GF_FREE (new_trans);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                new_trans-&gt;ops = this-&gt;ops;</div><div class='del'>-                new_trans-&gt;init = this-&gt;init;</div><div class='del'>-                new_trans-&gt;fini = this-&gt;fini;</div><div class='del'>-                new_trans-&gt;ctx  = ctx;</div><div class='del'>-                new_trans-&gt;xl   = this-&gt;xl;</div><div class='del'>-                new_trans-&gt;mydata = this-&gt;mydata;</div><div class='del'>-                new_trans-&gt;notify = this-&gt;notify;</div><div class='del'>-                new_trans-&gt;listener = this;</div><div class='del'>-                new_priv = new_trans-&gt;private;</div><div class='del'>-</div><div class='del'>-                if (new_sockaddr.ss_family == AF_UNIX) {</div><div class='del'>-                        new_priv-&gt;use_ssl = _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        switch (priv-&gt;srvr_ssl) {</div><div class='del'>-                                case MGMT_SSL_ALWAYS:</div><div class='del'>-                                        /* Glusterd with secure_mgmt. */</div><div class='del'>-                                        new_priv-&gt;use_ssl = _gf_true;</div><div class='del'>-                                        break;</div><div class='del'>-                                case MGMT_SSL_COPY_IO:</div><div class='del'>-                                        /* Glusterfsd. */</div><div class='del'>-                                        new_priv-&gt;use_ssl = priv-&gt;ssl_enabled;</div><div class='del'>-                                        break;</div><div class='del'>-                                default:</div><div class='del'>-                                        new_priv-&gt;use_ssl = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        memcpy(&amp;new_trans-&gt;peerinfo.sockaddr, &amp;new_sockaddr, addrlen);</div><div class='add'>+        new_trans-&gt;peerinfo.sockaddr_len = addrlen;</div><div class='ctx'> </div><div class='del'>-                new_priv-&gt;sock = new_sock;</div><div class='add'>+        new_trans-&gt;myinfo.sockaddr_len = sizeof(new_trans-&gt;myinfo.sockaddr);</div><div class='ctx'> </div><div class='del'>-                new_priv-&gt;ssl_enabled = priv-&gt;ssl_enabled;</div><div class='del'>-                new_priv-&gt;ssl_ctx = priv-&gt;ssl_ctx;</div><div class='del'>-                new_priv-&gt;connected = 1;</div><div class='del'>-                new_priv-&gt;is_server = _gf_true;</div><div class='del'>-</div><div class='del'>-                /* set O_NONBLOCK for plain text as well as ssl connections */</div><div class='del'>-                if (!priv-&gt;bio) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "### use non-blocking IO");</div><div class='del'>-                        ret = __socket_nonblock (new_sock);</div><div class='add'>+        ret = getsockname(new_sock, SA(&amp;new_trans-&gt;myinfo.sockaddr),</div><div class='add'>+                          &amp;new_trans-&gt;myinfo.sockaddr_len);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "getsockname on %d failed (%s)",</div><div class='add'>+                   new_sock, strerror(errno));</div><div class='add'>+            sys_close(new_sock);</div><div class='add'>+            GF_FREE(new_trans-&gt;name);</div><div class='add'>+            GF_FREE(new_trans);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        get_transport_identifiers(new_trans);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "XXX server:%s, client:%s",</div><div class='add'>+               new_trans-&gt;myinfo.identifier, new_trans-&gt;peerinfo.identifier);</div><div class='add'>+</div><div class='add'>+        ret = socket_init(new_trans);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            sys_close(new_sock);</div><div class='add'>+            GF_FREE(new_trans-&gt;name);</div><div class='add'>+            GF_FREE(new_trans);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        new_trans-&gt;ops = this-&gt;ops;</div><div class='add'>+        new_trans-&gt;init = this-&gt;init;</div><div class='add'>+        new_trans-&gt;fini = this-&gt;fini;</div><div class='add'>+        new_trans-&gt;ctx = ctx;</div><div class='add'>+        new_trans-&gt;xl = this-&gt;xl;</div><div class='add'>+        new_trans-&gt;mydata = this-&gt;mydata;</div><div class='add'>+        new_trans-&gt;notify = this-&gt;notify;</div><div class='add'>+        new_trans-&gt;listener = this;</div><div class='add'>+        new_priv = new_trans-&gt;private;</div><div class='add'>+</div><div class='add'>+        if (new_sockaddr.ss_family == AF_UNIX) {</div><div class='add'>+            new_priv-&gt;use_ssl = _gf_false;</div><div class='add'>+        } else {</div><div class='add'>+            switch (priv-&gt;srvr_ssl) {</div><div class='add'>+                case MGMT_SSL_ALWAYS:</div><div class='add'>+                    /* Glusterd with secure_mgmt. */</div><div class='add'>+                    new_priv-&gt;use_ssl = _gf_true;</div><div class='add'>+                    break;</div><div class='add'>+                case MGMT_SSL_COPY_IO:</div><div class='add'>+                    /* Glusterfsd. */</div><div class='add'>+                    new_priv-&gt;use_ssl = priv-&gt;ssl_enabled;</div><div class='add'>+                    break;</div><div class='add'>+                default:</div><div class='add'>+                    new_priv-&gt;use_ssl = _gf_false;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        new_priv-&gt;sock = new_sock;</div><div class='add'>+</div><div class='add'>+        new_priv-&gt;ssl_enabled = priv-&gt;ssl_enabled;</div><div class='add'>+        new_priv-&gt;ssl_ctx = priv-&gt;ssl_ctx;</div><div class='add'>+        new_priv-&gt;connected = 1;</div><div class='add'>+        new_priv-&gt;is_server = _gf_true;</div><div class='add'>+</div><div class='add'>+        /* set O_NONBLOCK for plain text as well as ssl connections */</div><div class='add'>+        if (!priv-&gt;bio) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "### use non-blocking IO");</div><div class='add'>+            ret = __socket_nonblock(new_sock);</div><div class='ctx'> </div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "NBIO on %d failed (%s)",</div><div class='del'>-                                        new_sock, strerror (errno));</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING, "NBIO on %d failed (%s)",</div><div class='add'>+                       new_sock, strerror(errno));</div><div class='ctx'> </div><div class='del'>-                                sys_close (new_sock);</div><div class='del'>-                                GF_FREE (new_trans-&gt;name);</div><div class='del'>-                                GF_FREE (new_trans);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                /*</div><div class='del'>-                 * This is the first ref on the newly accepted</div><div class='del'>-                 * transport.</div><div class='del'>-                 */</div><div class='del'>-                rpc_transport_ref (new_trans);</div><div class='del'>-</div><div class='del'>-                {</div><div class='del'>-                        /* Take a ref on the new_trans to avoid</div><div class='del'>-                         * getting deleted when event_register()</div><div class='del'>-                         * causes socket_event_handler() to race</div><div class='del'>-                         * ahead of this path to eventually find</div><div class='del'>-                         * a disconnect and unref the transport</div><div class='del'>-                         */</div><div class='del'>-                        rpc_transport_ref (new_trans);</div><div class='del'>-</div><div class='del'>-                        /* Send a notification to RPCSVC layer</div><div class='del'>-                         * to save the new_trans in its service</div><div class='del'>-                         * list before we register the new_sock</div><div class='del'>-                         * with epoll to begin receiving notifications</div><div class='del'>-                         * for data handling.</div><div class='del'>-                         */</div><div class='del'>-                        ret = rpc_transport_notify (this, RPC_TRANSPORT_ACCEPT, new_trans);</div><div class='del'>-</div><div class='del'>-                        if (ret != -1) {</div><div class='del'>-                                new_priv-&gt;idx =</div><div class='del'>-                                        event_register (ctx-&gt;event_pool,</div><div class='del'>-                                                        new_sock,</div><div class='del'>-                                                        socket_event_handler,</div><div class='del'>-                                                        new_trans,</div><div class='del'>-                                                        1, 0);</div><div class='del'>-                                if (new_priv-&gt;idx == -1) {</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                               "failed to register the socket "</div><div class='del'>-                                               "with event");</div><div class='del'>-</div><div class='del'>-                                        /* event_register() could have failed for some</div><div class='del'>-                                         * reason, implying that the new_sock cannot be</div><div class='del'>-                                         * added to the epoll set. If we won't get any</div><div class='del'>-                                         * more notifications for new_sock from epoll,</div><div class='del'>-                                         * then we better remove the corresponding</div><div class='del'>-                                         * new_trans object from the RPCSVC service list.</div><div class='del'>-                                         * Since we've notified RPC service of new_trans</div><div class='del'>-                                         * before we attempted event_register(), we better</div><div class='del'>-                                         * unlink the new_trans from the RPCSVC service list</div><div class='del'>-                                         * to cleanup the stateby sending out a DISCONNECT</div><div class='del'>-                                         * notification.</div><div class='del'>-                                         */</div><div class='del'>-                                        rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, new_trans);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                sys_close(new_sock);</div><div class='add'>+                GF_FREE(new_trans-&gt;name);</div><div class='add'>+                GF_FREE(new_trans);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        /*</div><div class='add'>+         * This is the first ref on the newly accepted</div><div class='add'>+         * transport.</div><div class='add'>+         */</div><div class='add'>+        rpc_transport_ref(new_trans);</div><div class='ctx'> </div><div class='del'>-                        /* this rpc_transport_unref() is for managing race between</div><div class='del'>-                         * 1. socket_server_event_handler and</div><div class='del'>-                         * 2. socket_event_handler</div><div class='del'>-                         * trying to add and remove new_trans from the rpcsvc</div><div class='del'>-                         * service list</div><div class='del'>-                         * now that we are done with the notifications, lets</div><div class='del'>-                         * reduce the reference</div><div class='del'>-                         */</div><div class='del'>-                        rpc_transport_unref (new_trans);</div><div class='del'>-                }</div><div class='add'>+        {</div><div class='add'>+            /* Take a ref on the new_trans to avoid</div><div class='add'>+             * getting deleted when event_register()</div><div class='add'>+             * causes socket_event_handler() to race</div><div class='add'>+             * ahead of this path to eventually find</div><div class='add'>+             * a disconnect and unref the transport</div><div class='add'>+             */</div><div class='add'>+            rpc_transport_ref(new_trans);</div><div class='add'>+</div><div class='add'>+            /* Send a notification to RPCSVC layer</div><div class='add'>+             * to save the new_trans in its service</div><div class='add'>+             * list before we register the new_sock</div><div class='add'>+             * with epoll to begin receiving notifications</div><div class='add'>+             * for data handling.</div><div class='add'>+             */</div><div class='add'>+            ret = rpc_transport_notify(this, RPC_TRANSPORT_ACCEPT, new_trans);</div><div class='add'>+</div><div class='add'>+            if (ret != -1) {</div><div class='add'>+                new_priv-&gt;idx = event_register(ctx-&gt;event_pool, new_sock,</div><div class='add'>+                                               socket_event_handler, new_trans,</div><div class='add'>+                                               1, 0);</div><div class='add'>+                if (new_priv-&gt;idx == -1) {</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "failed to register the socket "</div><div class='add'>+                           "with event");</div><div class='add'>+</div><div class='add'>+                    /* event_register() could have failed for some</div><div class='add'>+                     * reason, implying that the new_sock cannot be</div><div class='add'>+                     * added to the epoll set. If we won't get any</div><div class='add'>+                     * more notifications for new_sock from epoll,</div><div class='add'>+                     * then we better remove the corresponding</div><div class='add'>+                     * new_trans object from the RPCSVC service list.</div><div class='add'>+                     * Since we've notified RPC service of new_trans</div><div class='add'>+                     * before we attempted event_register(), we better</div><div class='add'>+                     * unlink the new_trans from the RPCSVC service list</div><div class='add'>+                     * to cleanup the stateby sending out a DISCONNECT</div><div class='add'>+                     * notification.</div><div class='add'>+                     */</div><div class='add'>+                    rpc_transport_notify(this, RPC_TRANSPORT_DISCONNECT,</div><div class='add'>+                                         new_trans);</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* this rpc_transport_unref() is for managing race between</div><div class='add'>+             * 1. socket_server_event_handler and</div><div class='add'>+             * 2. socket_event_handler</div><div class='add'>+             * trying to add and remove new_trans from the rpcsvc</div><div class='add'>+             * service list</div><div class='add'>+             * now that we are done with the notifications, lets</div><div class='add'>+             * reduce the reference</div><div class='add'>+             */</div><div class='add'>+            rpc_transport_unref(new_trans);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        sys_close (new_sock);</div><div class='del'>-                        /* this unref is to actually cause the destruction of</div><div class='del'>-                         * the new_trans since we've failed at everything so far</div><div class='del'>-                         */</div><div class='del'>-                        rpc_transport_unref (new_trans);</div><div class='del'>-                }</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            sys_close(new_sock);</div><div class='add'>+            /* this unref is to actually cause the destruction of</div><div class='add'>+             * the new_trans since we've failed at everything so far</div><div class='add'>+             */</div><div class='add'>+            rpc_transport_unref(new_trans);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_disconnect (rpc_transport_t *this, gf_boolean_t wait)</div><div class='add'>+socket_disconnect(rpc_transport_t *this, gf_boolean_t wait)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv   = NULL;</div><div class='del'>-        int               ret    = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __socket_disconnect (this);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __socket_disconnect(this);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void*</div><div class='del'>-socket_connect_error_cbk (void *opaque)</div><div class='add'>+void *</div><div class='add'>+socket_connect_error_cbk(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        socket_connect_error_state_t *arg;</div><div class='add'>+    socket_connect_error_state_t *arg;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (opaque);</div><div class='add'>+    GF_ASSERT(opaque);</div><div class='ctx'> </div><div class='del'>-        arg = opaque;</div><div class='del'>-        THIS = arg-&gt;this;</div><div class='add'>+    arg = opaque;</div><div class='add'>+    THIS = arg-&gt;this;</div><div class='ctx'> </div><div class='del'>-        rpc_transport_notify (arg-&gt;trans, RPC_TRANSPORT_DISCONNECT, arg-&gt;trans);</div><div class='add'>+    rpc_transport_notify(arg-&gt;trans, RPC_TRANSPORT_DISCONNECT, arg-&gt;trans);</div><div class='ctx'> </div><div class='del'>-        if (arg-&gt;refd)</div><div class='del'>-                rpc_transport_unref (arg-&gt;trans);</div><div class='add'>+    if (arg-&gt;refd)</div><div class='add'>+        rpc_transport_unref(arg-&gt;trans);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (opaque);</div><div class='del'>-        return NULL;</div><div class='add'>+    GF_FREE(opaque);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-socket_fix_ssl_opts (rpc_transport_t *this, socket_private_t *priv,</div><div class='del'>-                     uint16_t port)</div><div class='add'>+socket_fix_ssl_opts(rpc_transport_t *this, socket_private_t *priv,</div><div class='add'>+                    uint16_t port)</div><div class='ctx'> {</div><div class='del'>-        if (port == GF_DEFAULT_SOCKET_LISTEN_PORT) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "%s SSL for portmapper connection",</div><div class='del'>-                        priv-&gt;mgmt_ssl ? "enabling" : "disabling");</div><div class='del'>-                priv-&gt;use_ssl = priv-&gt;mgmt_ssl;</div><div class='del'>-        } else if (priv-&gt;ssl_enabled &amp;&amp; !priv-&gt;use_ssl) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                       "re-enabling SSL for I/O connection");</div><div class='del'>-                priv-&gt;use_ssl = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (port == GF_DEFAULT_SOCKET_LISTEN_PORT) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s SSL for portmapper connection",</div><div class='add'>+               priv-&gt;mgmt_ssl ? "enabling" : "disabling");</div><div class='add'>+        priv-&gt;use_ssl = priv-&gt;mgmt_ssl;</div><div class='add'>+    } else if (priv-&gt;ssl_enabled &amp;&amp; !priv-&gt;use_ssl) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "re-enabling SSL for I/O connection");</div><div class='add'>+        priv-&gt;use_ssl = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -3343,1009 +3234,968 @@ socket_fix_ssl_opts (rpc_transport_t *this, socket_private_t *priv,</div><div class='ctx'>  * as well.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-connect_loop (int sockfd, const struct sockaddr *addr, socklen_t addrlen)</div><div class='add'>+connect_loop(int sockfd, const struct sockaddr *addr, socklen_t addrlen)</div><div class='ctx'> {</div><div class='del'>-        int     ret;</div><div class='del'>-        int     connect_fails   = 0;</div><div class='add'>+    int ret;</div><div class='add'>+    int connect_fails = 0;</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                ret = connect (sockfd, addr, addrlen);</div><div class='del'>-                if (ret &gt;= 0) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if ((errno != ENOENT) || (++connect_fails &gt;= 5)) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                sleep (1);</div><div class='add'>+    for (;;) {</div><div class='add'>+        ret = connect(sockfd, addr, addrlen);</div><div class='add'>+        if (ret &gt;= 0) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        if ((errno != ENOENT) || (++connect_fails &gt;= 5)) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        sleep(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-socket_connect (rpc_transport_t *this, int port)</div><div class='add'>+socket_connect(rpc_transport_t *this, int port)</div><div class='ctx'> {</div><div class='del'>-        int                            ret             = -1;</div><div class='del'>-        int                            th_ret          = -1;</div><div class='del'>-        int                            sock            = -1;</div><div class='del'>-        socket_private_t              *priv            = NULL;</div><div class='del'>-        socklen_t                      sockaddr_len    = 0;</div><div class='del'>-        glusterfs_ctx_t               *ctx             = NULL;</div><div class='del'>-        sa_family_t                    sa_family       = {0, };</div><div class='del'>-        char                          *local_addr      = NULL;</div><div class='del'>-        union gf_sock_union            sock_union;</div><div class='del'>-        struct sockaddr_in            *addr            = NULL;</div><div class='del'>-        gf_boolean_t                   refd      = _gf_false;</div><div class='del'>-        socket_connect_error_state_t  *arg             = NULL;</div><div class='del'>-        pthread_t                      th_id           = {0, };</div><div class='del'>-        gf_boolean_t                   ign_enoent      = _gf_false;</div><div class='del'>-        gf_boolean_t                   connect_attempted = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "connect() called on uninitialized transport");</div><div class='del'>-                goto err;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int th_ret = -1;</div><div class='add'>+    int sock = -1;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    socklen_t sockaddr_len = 0;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    sa_family_t sa_family = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *local_addr = NULL;</div><div class='add'>+    union gf_sock_union sock_union;</div><div class='add'>+    struct sockaddr_in *addr = NULL;</div><div class='add'>+    gf_boolean_t refd = _gf_false;</div><div class='add'>+    socket_connect_error_state_t *arg = NULL;</div><div class='add'>+    pthread_t th_id = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t ign_enoent = _gf_false;</div><div class='add'>+    gf_boolean_t connect_attempted = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                         "connect() called on uninitialized transport");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;sock != -1) {</div><div class='add'>+            gf_log_callingfn(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                             "connect () called on transport "</div><div class='add'>+                             "already connected");</div><div class='add'>+            errno = EINPROGRESS;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;sock != -1) {</div><div class='del'>-                        gf_log_callingfn (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                          "connect () called on transport "</div><div class='del'>-                                          "already connected");</div><div class='del'>-                        errno = EINPROGRESS;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "connecting %p, sock=%d", this, priv-&gt;sock);</div><div class='del'>-</div><div class='del'>-                ret = socket_client_get_remote_sockaddr (this, &amp;sock_union.sa,</div><div class='del'>-                                                     &amp;sockaddr_len, &amp;sa_family);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        /* logged inside client_get_remote_sockaddr */</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (sa_family == AF_UNIX) {</div><div class='del'>-                        priv-&gt;ssl_enabled = _gf_false;</div><div class='del'>-                        priv-&gt;mgmt_ssl = _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        if (port &gt; 0) {</div><div class='del'>-                                sock_union.sin.sin_port = htons (port);</div><div class='del'>-                        }</div><div class='del'>-                        socket_fix_ssl_opts (this, priv,</div><div class='del'>-                                             ntohs(sock_union.sin.sin_port));</div><div class='del'>-                }</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "connecting %p, sock=%d", this,</div><div class='add'>+               priv-&gt;sock);</div><div class='ctx'> </div><div class='del'>-                memcpy (&amp;this-&gt;peerinfo.sockaddr, &amp;sock_union.storage,</div><div class='del'>-                        sockaddr_len);</div><div class='del'>-                this-&gt;peerinfo.sockaddr_len = sockaddr_len;</div><div class='add'>+        ret = socket_client_get_remote_sockaddr(this, &amp;sock_union.sa,</div><div class='add'>+                                                &amp;sockaddr_len, &amp;sa_family);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            /* logged inside client_get_remote_sockaddr */</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                priv-&gt;sock = socket (sa_family, SOCK_STREAM, 0);</div><div class='del'>-                if (priv-&gt;sock == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "socket creation failed (%s)",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (sa_family == AF_UNIX) {</div><div class='add'>+            priv-&gt;ssl_enabled = _gf_false;</div><div class='add'>+            priv-&gt;mgmt_ssl = _gf_false;</div><div class='add'>+        } else {</div><div class='add'>+            if (port &gt; 0) {</div><div class='add'>+                sock_union.sin.sin_port = htons(port);</div><div class='add'>+            }</div><div class='add'>+            socket_fix_ssl_opts(this, priv, ntohs(sock_union.sin.sin_port));</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* Can't help if setting socket options fails. We can continue</div><div class='del'>-                 * working nonetheless.</div><div class='del'>-                 */</div><div class='del'>-                if (priv-&gt;windowsize != 0) {</div><div class='del'>-                        if (setsockopt (priv-&gt;sock, SOL_SOCKET, SO_RCVBUF,</div><div class='del'>-                                        &amp;priv-&gt;windowsize,</div><div class='del'>-                                        sizeof (priv-&gt;windowsize)) &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "setting receive window "</div><div class='del'>-                                        "size failed: %d: %d: %s",</div><div class='del'>-                                        priv-&gt;sock, priv-&gt;windowsize,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        }</div><div class='add'>+        memcpy(&amp;this-&gt;peerinfo.sockaddr, &amp;sock_union.storage, sockaddr_len);</div><div class='add'>+        this-&gt;peerinfo.sockaddr_len = sockaddr_len;</div><div class='ctx'> </div><div class='del'>-                        if (setsockopt (priv-&gt;sock, SOL_SOCKET, SO_SNDBUF,</div><div class='del'>-                                        &amp;priv-&gt;windowsize,</div><div class='del'>-                                        sizeof (priv-&gt;windowsize)) &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "setting send window size "</div><div class='del'>-                                        "failed: %d: %d: %s",</div><div class='del'>-                                        priv-&gt;sock, priv-&gt;windowsize,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        priv-&gt;sock = socket(sa_family, SOCK_STREAM, 0);</div><div class='add'>+        if (priv-&gt;sock == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "socket creation failed (%s)",</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* Make sure we are not vulnerable to someone setting</div><div class='del'>-                 * net.ipv6.bindv6only to 1 so that gluster services are</div><div class='del'>-                 * available over IPv4 &amp; IPv6.</div><div class='del'>-                 */</div><div class='add'>+        /* Can't help if setting socket options fails. We can continue</div><div class='add'>+         * working nonetheless.</div><div class='add'>+         */</div><div class='add'>+        if (priv-&gt;windowsize != 0) {</div><div class='add'>+            if (setsockopt(priv-&gt;sock, SOL_SOCKET, SO_RCVBUF, &amp;priv-&gt;windowsize,</div><div class='add'>+                           sizeof(priv-&gt;windowsize)) &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "setting receive window "</div><div class='add'>+                       "size failed: %d: %d: %s",</div><div class='add'>+                       priv-&gt;sock, priv-&gt;windowsize, strerror(errno));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (setsockopt(priv-&gt;sock, SOL_SOCKET, SO_SNDBUF, &amp;priv-&gt;windowsize,</div><div class='add'>+                           sizeof(priv-&gt;windowsize)) &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "setting send window size "</div><div class='add'>+                       "failed: %d: %d: %s",</div><div class='add'>+                       priv-&gt;sock, priv-&gt;windowsize, strerror(errno));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* Make sure we are not vulnerable to someone setting</div><div class='add'>+         * net.ipv6.bindv6only to 1 so that gluster services are</div><div class='add'>+         * available over IPv4 &amp; IPv6.</div><div class='add'>+         */</div><div class='ctx'> #ifdef IPV6_DEFAULT</div><div class='del'>-                int     disable_v6only  = 0;</div><div class='del'>-                if (setsockopt (priv-&gt;sock, IPPROTO_IPV6, IPV6_V6ONLY,</div><div class='del'>-                                (void *)&amp;disable_v6only,</div><div class='del'>-                                sizeof (disable_v6only)) &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Error disabling sockopt IPV6_V6ONLY: \"%s\"",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                }</div><div class='add'>+        int disable_v6only = 0;</div><div class='add'>+        if (setsockopt(priv-&gt;sock, IPPROTO_IPV6, IPV6_V6ONLY,</div><div class='add'>+                       (void *)&amp;disable_v6only, sizeof(disable_v6only)) &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Error disabling sockopt IPV6_V6ONLY: \"%s\"",</div><div class='add'>+                   strerror(errno));</div><div class='add'>+        }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;nodelay &amp;&amp; (sa_family != AF_UNIX)) {</div><div class='del'>-                        ret = __socket_nodelay (priv-&gt;sock);</div><div class='add'>+        if (priv-&gt;nodelay &amp;&amp; (sa_family != AF_UNIX)) {</div><div class='add'>+            ret = __socket_nodelay(priv-&gt;sock);</div><div class='ctx'> </div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "NODELAY on %d failed (%s)",</div><div class='del'>-                                        priv-&gt;sock, strerror (errno));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;keepalive &amp;&amp; sa_family != AF_UNIX) {</div><div class='del'>-                        ret = __socket_keepalive (priv-&gt;sock,</div><div class='del'>-                                                  sa_family,</div><div class='del'>-                                                  priv-&gt;keepaliveintvl,</div><div class='del'>-                                                  priv-&gt;keepaliveidle,</div><div class='del'>-                                                  priv-&gt;keepalivecnt,</div><div class='del'>-                                                  priv-&gt;timeout);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to set keep-alive: %s",</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                SA (&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family =</div><div class='del'>-                        SA (&amp;this-&gt;peerinfo.sockaddr)-&gt;sa_family;</div><div class='del'>-</div><div class='del'>-                /* If a source addr is explicitly specified, use it */</div><div class='del'>-                ret = dict_get_str (this-&gt;options,</div><div class='del'>-                                    "transport.socket.source-addr",</div><div class='del'>-                                    &amp;local_addr);</div><div class='del'>-                if (!ret &amp;&amp; SA (&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family == AF_INET) {</div><div class='del'>-                        addr = (struct sockaddr_in *)(&amp;this-&gt;myinfo.sockaddr);</div><div class='del'>-                        ret = inet_pton (AF_INET, local_addr,</div><div class='del'>-                                         &amp;(addr-&gt;sin_addr.s_addr));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* If client wants ENOENT to be ignored */</div><div class='del'>-                ign_enoent = dict_get_str_boolean (this-&gt;options,</div><div class='del'>-                                                   "transport.socket.ignore-enoent",</div><div class='del'>-                                                   _gf_false);</div><div class='del'>-</div><div class='del'>-                ret = client_bind (this, SA (&amp;this-&gt;myinfo.sockaddr),</div><div class='del'>-                                   &amp;this-&gt;myinfo.sockaddr_len, priv-&gt;sock);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "client bind failed: %s", strerror (errno));</div><div class='del'>-                        goto handler;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* make socket non-blocking for all types of sockets */</div><div class='del'>-                if (!priv-&gt;bio) {</div><div class='del'>-                        ret = __socket_nonblock (priv-&gt;sock);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "NBIO on %d failed (%s)",</div><div class='del'>-                                        priv-&gt;sock, strerror (errno));</div><div class='del'>-                                goto handler;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "&gt;&gt;&gt; connect() with non-blocking IO for ALL");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                this-&gt;connect_failed = _gf_false;</div><div class='del'>-                priv-&gt;connect_failed = 0;</div><div class='del'>-                priv-&gt;connected = 0;</div><div class='del'>-</div><div class='del'>-                socket_dump_info (SA(&amp;this-&gt;peerinfo.sockaddr), priv-&gt;is_server,</div><div class='del'>-                                  priv-&gt;use_ssl, priv-&gt;sock, this-&gt;name,</div><div class='del'>-                                  "connecting to");</div><div class='del'>-</div><div class='del'>-                if (ign_enoent) {</div><div class='del'>-                        ret = connect_loop (priv-&gt;sock,</div><div class='del'>-                                            SA (&amp;this-&gt;peerinfo.sockaddr),</div><div class='del'>-                                            this-&gt;peerinfo.sockaddr_len);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = connect (priv-&gt;sock,</div><div class='del'>-                                       SA (&amp;this-&gt;peerinfo.sockaddr),</div><div class='del'>-                                       this-&gt;peerinfo.sockaddr_len);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                connect_attempted = _gf_true;</div><div class='del'>-</div><div class='del'>-                if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; ign_enoent) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                               "Ignore failed connection attempt on %s, (%s) ",</div><div class='del'>-                                this-&gt;peerinfo.identifier, strerror (errno));</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "NODELAY on %d failed (%s)",</div><div class='add'>+                       priv-&gt;sock, strerror(errno));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        /* connect failed with some other error than EINPROGRESS</div><div class='del'>-                        so, getsockopt (... SO_ERROR ...), will not catch any</div><div class='del'>-                        errors and return them to us, we need to remember this</div><div class='del'>-                        state, and take actions in socket_event_handler</div><div class='del'>-                        appropriately */</div><div class='del'>-                        /* TBD: What about ENOENT, we will do getsockopt there</div><div class='del'>-                        as well, so how is that exempt from such a problem? */</div><div class='del'>-                        priv-&gt;connect_failed = 1;</div><div class='del'>-                        this-&gt;connect_failed = _gf_true;</div><div class='add'>+        if (priv-&gt;keepalive &amp;&amp; sa_family != AF_UNIX) {</div><div class='add'>+            ret = __socket_keepalive(priv-&gt;sock, sa_family,</div><div class='add'>+                                     priv-&gt;keepaliveintvl, priv-&gt;keepaliveidle,</div><div class='add'>+                                     priv-&gt;keepalivecnt, priv-&gt;timeout);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to set keep-alive: %s",</div><div class='add'>+                       strerror(errno));</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        goto handler;</div><div class='del'>-                }</div><div class='add'>+        SA(&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family = SA(&amp;this-&gt;peerinfo.sockaddr)</div><div class='add'>+                                                    -&gt;sa_family;</div><div class='ctx'> </div><div class='del'>-                if (ret == -1 &amp;&amp; ((errno != EINPROGRESS) &amp;&amp; (errno != ENOENT))) {</div><div class='del'>-                        /* For unix path based sockets, the socket path is</div><div class='del'>-                         * cryptic (md5sum of path) and may not be useful for</div><div class='del'>-                         * the user in debugging so log it in DEBUG</div><div class='del'>-                         */</div><div class='del'>-                        gf_log (this-&gt;name, ((sa_family == AF_UNIX) ?</div><div class='del'>-                                GF_LOG_DEBUG : GF_LOG_ERROR),</div><div class='del'>-                                "connection attempt on %s failed, (%s)",</div><div class='del'>-                                this-&gt;peerinfo.identifier, strerror (errno));</div><div class='del'>-</div><div class='del'>-                        /* connect failed with some other error than EINPROGRESS</div><div class='del'>-                        so, getsockopt (... SO_ERROR ...), will not catch any</div><div class='del'>-                        errors and return them to us, we need to remember this</div><div class='del'>-                        state, and take actions in socket_event_handler</div><div class='del'>-                        appropriately */</div><div class='del'>-                        /* TBD: What about ENOENT, we will do getsockopt there</div><div class='del'>-                        as well, so how is that exempt from such a problem? */</div><div class='del'>-                        priv-&gt;connect_failed = 1;</div><div class='del'>-</div><div class='del'>-                        goto handler;</div><div class='del'>-                } else {</div><div class='del'>-                        /* reset connect_failed so that any previous attempts</div><div class='del'>-                        state is not carried forward */</div><div class='del'>-                        priv-&gt;connect_failed = 0;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+        /* If a source addr is explicitly specified, use it */</div><div class='add'>+        ret = dict_get_str(this-&gt;options, "transport.socket.source-addr",</div><div class='add'>+                           &amp;local_addr);</div><div class='add'>+        if (!ret &amp;&amp; SA(&amp;this-&gt;myinfo.sockaddr)-&gt;sa_family == AF_INET) {</div><div class='add'>+            addr = (struct sockaddr_in *)(&amp;this-&gt;myinfo.sockaddr);</div><div class='add'>+            ret = inet_pton(AF_INET, local_addr, &amp;(addr-&gt;sin_addr.s_addr));</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-handler:</div><div class='del'>-                if (ret &lt; 0 &amp;&amp; !connect_attempted) {</div><div class='del'>-                        /* Ignore error from connect. epoll events</div><div class='del'>-                           should be handled in the socket handler.  shutdown(2)</div><div class='del'>-                           will result in EPOLLERR, so cleanup is done in</div><div class='del'>-                           socket_event_handler or socket_poller */</div><div class='del'>-                        shutdown (priv-&gt;sock, SHUT_RDWR);</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "@@@ client shutdown(%d, SHUT_RDWR)",</div><div class='del'>-                                priv-&gt;sock);</div><div class='del'>-                }</div><div class='add'>+        /* If client wants ENOENT to be ignored */</div><div class='add'>+        ign_enoent = dict_get_str_boolean(</div><div class='add'>+            this-&gt;options, "transport.socket.ignore-enoent", _gf_false);</div><div class='ctx'> </div><div class='del'>-                priv-&gt;connected = 0;</div><div class='del'>-                priv-&gt;is_server = _gf_false;</div><div class='del'>-                rpc_transport_ref (this);</div><div class='del'>-                refd = _gf_true;</div><div class='del'>-</div><div class='del'>-                this-&gt;listener = this;</div><div class='del'>-                priv-&gt;idx = event_register (ctx-&gt;event_pool, priv-&gt;sock,</div><div class='del'>-                                            socket_event_handler,</div><div class='del'>-                                            this, 1, 1);</div><div class='del'>-                if (priv-&gt;idx == -1) {</div><div class='del'>-                        gf_log ("", GF_LOG_WARNING,</div><div class='del'>-                                "failed to register the event");</div><div class='del'>-                        sys_close (priv-&gt;sock);</div><div class='del'>-                        priv-&gt;sock = -1;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-unlock:</div><div class='del'>-                sock = priv-&gt;sock;</div><div class='add'>+        ret = client_bind(this, SA(&amp;this-&gt;myinfo.sockaddr),</div><div class='add'>+                          &amp;this-&gt;myinfo.sockaddr_len, priv-&gt;sock);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "client bind failed: %s",</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            goto handler;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='del'>-err:</div><div class='del'>-        /* if sock != -1, then cleanup is done from the event handler */</div><div class='del'>-        if (ret == -1 &amp;&amp; sock == -1) {</div><div class='del'>-                /* Cleaup requires to send notification to upper layer which</div><div class='del'>-                   intern holds the big_lock. There can be dead-lock situation</div><div class='del'>-                   if big_lock is already held by the current thread.</div><div class='del'>-                   So transfer the ownership to separate thread for cleanup.</div><div class='del'>-                */</div><div class='del'>-                arg = GF_CALLOC (1, sizeof (*arg),</div><div class='del'>-                                 gf_sock_connect_error_state_t);</div><div class='del'>-                arg-&gt;this = THIS;</div><div class='del'>-                arg-&gt;trans = this;</div><div class='del'>-                arg-&gt;refd = refd;</div><div class='del'>-                th_ret = gf_thread_create_detached (&amp;th_id,</div><div class='del'>-                                                    socket_connect_error_cbk,</div><div class='del'>-                                                    arg, "scleanup");</div><div class='del'>-                if (th_ret) {</div><div class='del'>-                        /* Error will be logged by gf_thread_create_attached */</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Thread creation "</div><div class='del'>-                               "failed");</div><div class='del'>-                        GF_FREE (arg);</div><div class='del'>-                        GF_ASSERT (0);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        /* make socket non-blocking for all types of sockets */</div><div class='add'>+        if (!priv-&gt;bio) {</div><div class='add'>+            ret = __socket_nonblock(priv-&gt;sock);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "NBIO on %d failed (%s)",</div><div class='add'>+                       priv-&gt;sock, strerror(errno));</div><div class='add'>+                goto handler;</div><div class='add'>+            } else {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "&gt;&gt;&gt; connect() with non-blocking IO for ALL");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        this-&gt;connect_failed = _gf_false;</div><div class='add'>+        priv-&gt;connect_failed = 0;</div><div class='add'>+        priv-&gt;connected = 0;</div><div class='add'>+</div><div class='add'>+        socket_dump_info(SA(&amp;this-&gt;peerinfo.sockaddr), priv-&gt;is_server,</div><div class='add'>+                         priv-&gt;use_ssl, priv-&gt;sock, this-&gt;name,</div><div class='add'>+                         "connecting to");</div><div class='add'>+</div><div class='add'>+        if (ign_enoent) {</div><div class='add'>+            ret = connect_loop(priv-&gt;sock, SA(&amp;this-&gt;peerinfo.sockaddr),</div><div class='add'>+                               this-&gt;peerinfo.sockaddr_len);</div><div class='add'>+        } else {</div><div class='add'>+            ret = connect(priv-&gt;sock, SA(&amp;this-&gt;peerinfo.sockaddr),</div><div class='add'>+                          this-&gt;peerinfo.sockaddr_len);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        connect_attempted = _gf_true;</div><div class='add'>+</div><div class='add'>+        if (ret == -1 &amp;&amp; errno == ENOENT &amp;&amp; ign_enoent) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Ignore failed connection attempt on %s, (%s) ",</div><div class='add'>+                   this-&gt;peerinfo.identifier, strerror(errno));</div><div class='add'>+</div><div class='add'>+            /* connect failed with some other error than EINPROGRESS</div><div class='add'>+            so, getsockopt (... SO_ERROR ...), will not catch any</div><div class='add'>+            errors and return them to us, we need to remember this</div><div class='add'>+            state, and take actions in socket_event_handler</div><div class='add'>+            appropriately */</div><div class='add'>+            /* TBD: What about ENOENT, we will do getsockopt there</div><div class='add'>+            as well, so how is that exempt from such a problem? */</div><div class='add'>+            priv-&gt;connect_failed = 1;</div><div class='add'>+            this-&gt;connect_failed = _gf_true;</div><div class='add'>+</div><div class='add'>+            goto handler;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (ret == -1 &amp;&amp; ((errno != EINPROGRESS) &amp;&amp; (errno != ENOENT))) {</div><div class='add'>+            /* For unix path based sockets, the socket path is</div><div class='add'>+             * cryptic (md5sum of path) and may not be useful for</div><div class='add'>+             * the user in debugging so log it in DEBUG</div><div class='add'>+             */</div><div class='add'>+            gf_log(this-&gt;name,</div><div class='add'>+                   ((sa_family == AF_UNIX) ? GF_LOG_DEBUG : GF_LOG_ERROR),</div><div class='add'>+                   "connection attempt on %s failed, (%s)",</div><div class='add'>+                   this-&gt;peerinfo.identifier, strerror(errno));</div><div class='add'>+</div><div class='add'>+            /* connect failed with some other error than EINPROGRESS</div><div class='add'>+            so, getsockopt (... SO_ERROR ...), will not catch any</div><div class='add'>+            errors and return them to us, we need to remember this</div><div class='add'>+            state, and take actions in socket_event_handler</div><div class='add'>+            appropriately */</div><div class='add'>+            /* TBD: What about ENOENT, we will do getsockopt there</div><div class='add'>+            as well, so how is that exempt from such a problem? */</div><div class='add'>+            priv-&gt;connect_failed = 1;</div><div class='add'>+</div><div class='add'>+            goto handler;</div><div class='add'>+        } else {</div><div class='add'>+            /* reset connect_failed so that any previous attempts</div><div class='add'>+            state is not carried forward */</div><div class='add'>+            priv-&gt;connect_failed = 0;</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    handler:</div><div class='add'>+        if (ret &lt; 0 &amp;&amp; !connect_attempted) {</div><div class='add'>+            /* Ignore error from connect. epoll events</div><div class='add'>+               should be handled in the socket handler.  shutdown(2)</div><div class='add'>+               will result in EPOLLERR, so cleanup is done in</div><div class='add'>+               socket_event_handler or socket_poller */</div><div class='add'>+            shutdown(priv-&gt;sock, SHUT_RDWR);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "@@@ client shutdown(%d, SHUT_RDWR)", priv-&gt;sock);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        priv-&gt;connected = 0;</div><div class='add'>+        priv-&gt;is_server = _gf_false;</div><div class='add'>+        rpc_transport_ref(this);</div><div class='add'>+        refd = _gf_true;</div><div class='add'>+</div><div class='add'>+        this-&gt;listener = this;</div><div class='add'>+        priv-&gt;idx = event_register(ctx-&gt;event_pool, priv-&gt;sock,</div><div class='add'>+                                   socket_event_handler, this, 1, 1);</div><div class='add'>+        if (priv-&gt;idx == -1) {</div><div class='add'>+            gf_log("", GF_LOG_WARNING, "failed to register the event");</div><div class='add'>+            sys_close(priv-&gt;sock);</div><div class='add'>+            priv-&gt;sock = -1;</div><div class='add'>+            ret = -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    unlock:</div><div class='add'>+        sock = priv-&gt;sock;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+err:</div><div class='add'>+    /* if sock != -1, then cleanup is done from the event handler */</div><div class='add'>+    if (ret == -1 &amp;&amp; sock == -1) {</div><div class='add'>+        /* Cleaup requires to send notification to upper layer which</div><div class='add'>+           intern holds the big_lock. There can be dead-lock situation</div><div class='add'>+           if big_lock is already held by the current thread.</div><div class='add'>+           So transfer the ownership to separate thread for cleanup.</div><div class='add'>+        */</div><div class='add'>+        arg = GF_CALLOC(1, sizeof(*arg), gf_sock_connect_error_state_t);</div><div class='add'>+        arg-&gt;this = THIS;</div><div class='add'>+        arg-&gt;trans = this;</div><div class='add'>+        arg-&gt;refd = refd;</div><div class='add'>+        th_ret = gf_thread_create_detached(&amp;th_id, socket_connect_error_cbk,</div><div class='add'>+                                           arg, "scleanup");</div><div class='add'>+        if (th_ret) {</div><div class='add'>+            /* Error will be logged by gf_thread_create_attached */</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Thread creation "</div><div class='add'>+                   "failed");</div><div class='add'>+            GF_FREE(arg);</div><div class='add'>+            GF_ASSERT(0);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_listen (rpc_transport_t *this)</div><div class='add'>+socket_listen(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *       priv = NULL;</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        int                      sock = -1;</div><div class='del'>-        struct sockaddr_storage  sockaddr;</div><div class='del'>-        socklen_t                sockaddr_len = 0;</div><div class='del'>-        peer_info_t             *myinfo = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx = NULL;</div><div class='del'>-        sa_family_t              sa_family = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv   = this-&gt;private;</div><div class='del'>-        myinfo = &amp;this-&gt;myinfo;</div><div class='del'>-        ctx    = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                sock = priv-&gt;sock;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='del'>-</div><div class='del'>-        if (sock != -1)  {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                  "already listening");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = socket_server_get_local_sockaddr (this, SA (&amp;sockaddr),</div><div class='del'>-                                                &amp;sockaddr_len, &amp;sa_family);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int sock = -1;</div><div class='add'>+    struct sockaddr_storage sockaddr;</div><div class='add'>+    socklen_t sockaddr_len = 0;</div><div class='add'>+    peer_info_t *myinfo = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    sa_family_t sa_family = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    myinfo = &amp;this-&gt;myinfo;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        sock = priv-&gt;sock;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;sock != -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "already listening");</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    if (sock != -1) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_DEBUG, "already listening");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                memcpy (&amp;myinfo-&gt;sockaddr, &amp;sockaddr, sockaddr_len);</div><div class='del'>-                myinfo-&gt;sockaddr_len = sockaddr_len;</div><div class='add'>+    ret = socket_server_get_local_sockaddr(this, SA(&amp;sockaddr), &amp;sockaddr_len,</div><div class='add'>+                                           &amp;sa_family);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                priv-&gt;sock = socket (sa_family, SOCK_STREAM, 0);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;sock != -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "already listening");</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;sock == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "socket creation failed (%s)",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        memcpy(&amp;myinfo-&gt;sockaddr, &amp;sockaddr, sockaddr_len);</div><div class='add'>+        myinfo-&gt;sockaddr_len = sockaddr_len;</div><div class='ctx'> </div><div class='del'>-                /* Can't help if setting socket options fails. We can continue</div><div class='del'>-                 * working nonetheless.</div><div class='del'>-                 */</div><div class='del'>-                if (priv-&gt;windowsize != 0) {</div><div class='del'>-                        if (setsockopt (priv-&gt;sock, SOL_SOCKET, SO_RCVBUF,</div><div class='del'>-                                        &amp;priv-&gt;windowsize,</div><div class='del'>-                                        sizeof (priv-&gt;windowsize)) &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "setting receive window size "</div><div class='del'>-                                        "failed: %d: %d: %s", priv-&gt;sock,</div><div class='del'>-                                        priv-&gt;windowsize,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        }</div><div class='add'>+        priv-&gt;sock = socket(sa_family, SOCK_STREAM, 0);</div><div class='ctx'> </div><div class='del'>-                        if (setsockopt (priv-&gt;sock, SOL_SOCKET, SO_SNDBUF,</div><div class='del'>-                                        &amp;priv-&gt;windowsize,</div><div class='del'>-                                        sizeof (priv-&gt;windowsize)) &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "setting send window size failed:"</div><div class='del'>-                                        " %d: %d: %s", priv-&gt;sock,</div><div class='del'>-                                        priv-&gt;windowsize,</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (priv-&gt;sock == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "socket creation failed (%s)",</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;nodelay &amp;&amp; (sa_family != AF_UNIX)) {</div><div class='del'>-                        ret = __socket_nodelay (priv-&gt;sock);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "setsockopt() failed for NODELAY (%s)",</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        /* Can't help if setting socket options fails. We can continue</div><div class='add'>+         * working nonetheless.</div><div class='add'>+         */</div><div class='add'>+        if (priv-&gt;windowsize != 0) {</div><div class='add'>+            if (setsockopt(priv-&gt;sock, SOL_SOCKET, SO_RCVBUF, &amp;priv-&gt;windowsize,</div><div class='add'>+                           sizeof(priv-&gt;windowsize)) &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "setting receive window size "</div><div class='add'>+                       "failed: %d: %d: %s",</div><div class='add'>+                       priv-&gt;sock, priv-&gt;windowsize, strerror(errno));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (setsockopt(priv-&gt;sock, SOL_SOCKET, SO_SNDBUF, &amp;priv-&gt;windowsize,</div><div class='add'>+                           sizeof(priv-&gt;windowsize)) &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "setting send window size failed:"</div><div class='add'>+                       " %d: %d: %s",</div><div class='add'>+                       priv-&gt;sock, priv-&gt;windowsize, strerror(errno));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (priv-&gt;nodelay &amp;&amp; (sa_family != AF_UNIX)) {</div><div class='add'>+            ret = __socket_nodelay(priv-&gt;sock);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "setsockopt() failed for NODELAY (%s)", strerror(errno));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!priv-&gt;bio) {</div><div class='del'>-                        ret = __socket_nonblock (priv-&gt;sock);</div><div class='add'>+        if (!priv-&gt;bio) {</div><div class='add'>+            ret = __socket_nonblock(priv-&gt;sock);</div><div class='ctx'> </div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "NBIO on %d failed (%s)",</div><div class='del'>-                                        priv-&gt;sock, strerror (errno));</div><div class='del'>-                                sys_close (priv-&gt;sock);</div><div class='del'>-                                priv-&gt;sock = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "NBIO on %d failed (%s)",</div><div class='add'>+                       priv-&gt;sock, strerror(errno));</div><div class='add'>+                sys_close(priv-&gt;sock);</div><div class='add'>+                priv-&gt;sock = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = __socket_server_bind (this);</div><div class='add'>+        ret = __socket_server_bind(this);</div><div class='ctx'> </div><div class='del'>-                if ((ret == -EADDRINUSE) || (ret == -1)) {</div><div class='del'>-                        /* logged inside __socket_server_bind() */</div><div class='del'>-                        sys_close (priv-&gt;sock);</div><div class='del'>-                        priv-&gt;sock = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if ((ret == -EADDRINUSE) || (ret == -1)) {</div><div class='add'>+            /* logged inside __socket_server_bind() */</div><div class='add'>+            sys_close(priv-&gt;sock);</div><div class='add'>+            priv-&gt;sock = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                socket_dump_info (SA(&amp;this-&gt;myinfo.sockaddr), priv-&gt;is_server,</div><div class='del'>-                                  priv-&gt;use_ssl, priv-&gt;sock, this-&gt;name,</div><div class='del'>-                                  "listening on");</div><div class='add'>+        socket_dump_info(SA(&amp;this-&gt;myinfo.sockaddr), priv-&gt;is_server,</div><div class='add'>+                         priv-&gt;use_ssl, priv-&gt;sock, this-&gt;name, "listening on");</div><div class='ctx'> </div><div class='del'>-                ret = listen (priv-&gt;sock, priv-&gt;backlog);</div><div class='add'>+        ret = listen(priv-&gt;sock, priv-&gt;backlog);</div><div class='ctx'> </div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "could not set socket %d to listen mode (%s)",</div><div class='del'>-                                priv-&gt;sock, strerror (errno));</div><div class='del'>-                        sys_close (priv-&gt;sock);</div><div class='del'>-                        priv-&gt;sock = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "could not set socket %d to listen mode (%s)", priv-&gt;sock,</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            sys_close(priv-&gt;sock);</div><div class='add'>+            priv-&gt;sock = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                rpc_transport_ref (this);</div><div class='add'>+        rpc_transport_ref(this);</div><div class='ctx'> </div><div class='del'>-                priv-&gt;idx = event_register (ctx-&gt;event_pool, priv-&gt;sock,</div><div class='del'>-                                            socket_server_event_handler,</div><div class='del'>-                                            this, 1, 0);</div><div class='add'>+        priv-&gt;idx = event_register(ctx-&gt;event_pool, priv-&gt;sock,</div><div class='add'>+                                   socket_server_event_handler, this, 1, 0);</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;idx == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "could not register socket %d with events",</div><div class='del'>-                                priv-&gt;sock);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        sys_close (priv-&gt;sock);</div><div class='del'>-                        priv-&gt;sock = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (priv-&gt;idx == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "could not register socket %d with events", priv-&gt;sock);</div><div class='add'>+            ret = -1;</div><div class='add'>+            sys_close(priv-&gt;sock);</div><div class='add'>+            priv-&gt;sock = -1;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-socket_submit_outgoing_msg (rpc_transport_t *this, rpc_transport_msg_t *msg)</div><div class='add'>+socket_submit_outgoing_msg(rpc_transport_t *this, rpc_transport_msg_t *msg)</div><div class='ctx'> {</div><div class='del'>-        int               ret           = -1;</div><div class='del'>-        char              need_poll_out = 0;</div><div class='del'>-        char              need_append   = 1;</div><div class='del'>-        struct ioq       *entry         = NULL;</div><div class='del'>-        glusterfs_ctx_t  *ctx           = NULL;</div><div class='del'>-        socket_private_t *priv          = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ctx  = this-&gt;ctx;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;connected != 1) {</div><div class='del'>-                        if (!priv-&gt;submit_log &amp;&amp; !priv-&gt;connect_finish_log) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                        "not connected (priv-&gt;connected = %d)",</div><div class='del'>-                                        priv-&gt;connected);</div><div class='del'>-                                priv-&gt;submit_log = 1;</div><div class='del'>-                        }</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                priv-&gt;submit_log = 0;</div><div class='del'>-                entry = __socket_ioq_new (this, msg);</div><div class='del'>-                if (!entry)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char need_poll_out = 0;</div><div class='add'>+    char need_append = 1;</div><div class='add'>+    struct ioq *entry = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;connected != 1) {</div><div class='add'>+            if (!priv-&gt;submit_log &amp;&amp; !priv-&gt;connect_finish_log) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+                       "not connected (priv-&gt;connected = %d)", priv-&gt;connected);</div><div class='add'>+                priv-&gt;submit_log = 1;</div><div class='add'>+            }</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        priv-&gt;submit_log = 0;</div><div class='add'>+        entry = __socket_ioq_new(this, msg);</div><div class='add'>+        if (!entry)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (list_empty (&amp;priv-&gt;ioq)) {</div><div class='del'>-                        ret = __socket_ioq_churn_entry (this, entry, 1);</div><div class='add'>+        if (list_empty(&amp;priv-&gt;ioq)) {</div><div class='add'>+            ret = __socket_ioq_churn_entry(this, entry, 1);</div><div class='ctx'> </div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                need_append = 0;</div><div class='del'>-                        }</div><div class='del'>-                        if (ret &gt; 0) {</div><div class='del'>-                                need_poll_out = 1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                need_append = 0;</div><div class='add'>+            }</div><div class='add'>+            if (ret &gt; 0) {</div><div class='add'>+                need_poll_out = 1;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (need_append) {</div><div class='del'>-                        list_add_tail (&amp;entry-&gt;list, &amp;priv-&gt;ioq);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-                if (need_poll_out) {</div><div class='del'>-                        /* first entry to wait. continue writing on POLLOUT */</div><div class='del'>-                        priv-&gt;idx = event_select_on (ctx-&gt;event_pool,</div><div class='del'>-                                                     priv-&gt;sock,</div><div class='del'>-                                                     priv-&gt;idx, -1, 1);</div><div class='del'>-                }</div><div class='add'>+        if (need_append) {</div><div class='add'>+            list_add_tail(&amp;entry-&gt;list, &amp;priv-&gt;ioq);</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+        if (need_poll_out) {</div><div class='add'>+            /* first entry to wait. continue writing on POLLOUT */</div><div class='add'>+            priv-&gt;idx = event_select_on(ctx-&gt;event_pool, priv-&gt;sock, priv-&gt;idx,</div><div class='add'>+                                        -1, 1);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-socket_submit_request (rpc_transport_t *this, rpc_transport_req_t *req)</div><div class='add'>+socket_submit_request(rpc_transport_t *this, rpc_transport_req_t *req)</div><div class='ctx'> {</div><div class='del'>-        return socket_submit_outgoing_msg (this, &amp;req-&gt;msg);</div><div class='add'>+    return socket_submit_outgoing_msg(this, &amp;req-&gt;msg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-socket_submit_reply (rpc_transport_t *this, rpc_transport_reply_t *reply)</div><div class='add'>+socket_submit_reply(rpc_transport_t *this, rpc_transport_reply_t *reply)</div><div class='ctx'> {</div><div class='del'>-        return socket_submit_outgoing_msg (this, &amp;reply-&gt;msg);</div><div class='add'>+    return socket_submit_outgoing_msg(this, &amp;reply-&gt;msg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-socket_getpeername (rpc_transport_t *this, char *hostname, int hostlen)</div><div class='add'>+socket_getpeername(rpc_transport_t *this, char *hostname, int hostlen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", hostname, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", hostname, out);</div><div class='ctx'> </div><div class='del'>-        if (hostlen &lt; (strlen (this-&gt;peerinfo.identifier) + 1)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (hostlen &lt; (strlen(this-&gt;peerinfo.identifier) + 1)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        strcpy (hostname, this-&gt;peerinfo.identifier);</div><div class='del'>-        ret = 0;</div><div class='add'>+    strcpy(hostname, this-&gt;peerinfo.identifier);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-socket_getpeeraddr (rpc_transport_t *this, char *peeraddr, int addrlen,</div><div class='del'>-                    struct sockaddr_storage *sa, socklen_t salen)</div><div class='add'>+socket_getpeeraddr(rpc_transport_t *this, char *peeraddr, int addrlen,</div><div class='add'>+                   struct sockaddr_storage *sa, socklen_t salen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sa, out);</div><div class='del'>-        ret = 0;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sa, out);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        *sa = this-&gt;peerinfo.sockaddr;</div><div class='add'>+    *sa = this-&gt;peerinfo.sockaddr;</div><div class='ctx'> </div><div class='del'>-        if (peeraddr != NULL) {</div><div class='del'>-                ret = socket_getpeername (this, peeraddr, addrlen);</div><div class='del'>-        }</div><div class='add'>+    if (peeraddr != NULL) {</div><div class='add'>+        ret = socket_getpeername(this, peeraddr, addrlen);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-socket_getmyname (rpc_transport_t *this, char *hostname, int hostlen)</div><div class='add'>+socket_getmyname(rpc_transport_t *this, char *hostname, int hostlen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", hostname, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", hostname, out);</div><div class='ctx'> </div><div class='del'>-        if (hostlen &lt; (strlen (this-&gt;myinfo.identifier) + 1)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (hostlen &lt; (strlen(this-&gt;myinfo.identifier) + 1)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        strcpy (hostname, this-&gt;myinfo.identifier);</div><div class='del'>-        ret = 0;</div><div class='add'>+    strcpy(hostname, this-&gt;myinfo.identifier);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-socket_getmyaddr (rpc_transport_t *this, char *myaddr, int addrlen,</div><div class='del'>-                  struct sockaddr_storage *sa, socklen_t salen)</div><div class='add'>+socket_getmyaddr(rpc_transport_t *this, char *myaddr, int addrlen,</div><div class='add'>+                 struct sockaddr_storage *sa, socklen_t salen)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", sa, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", sa, out);</div><div class='ctx'> </div><div class='del'>-        *sa =  this-&gt;myinfo.sockaddr;</div><div class='add'>+    *sa = this-&gt;myinfo.sockaddr;</div><div class='ctx'> </div><div class='del'>-        if (myaddr != NULL) {</div><div class='del'>-                ret = socket_getmyname (this, myaddr, addrlen);</div><div class='del'>-        }</div><div class='add'>+    if (myaddr != NULL) {</div><div class='add'>+        ret = socket_getmyname(this, myaddr, addrlen);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-socket_throttle (rpc_transport_t *this, gf_boolean_t onoff)</div><div class='add'>+socket_throttle(rpc_transport_t *this, gf_boolean_t onoff)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* The way we implement throttling is by taking off</div><div class='del'>-           POLLIN event from the polled flags. This way we</div><div class='del'>-           never get called with the POLLIN event and therefore</div><div class='del'>-           will never read() any more data until throttling</div><div class='del'>-           is turned off.</div><div class='del'>-        */</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-        {</div><div class='del'>-</div><div class='del'>-                /* Throttling is useless on a disconnected transport. In fact,</div><div class='del'>-                 * it's dangerous since priv-&gt;idx and priv-&gt;sock are set to -1</div><div class='del'>-                 * on a disconnected transport, which breaks epoll's event to</div><div class='del'>-                 * registered fd mapping. */</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;connected == 1)</div><div class='del'>-                        priv-&gt;idx = event_select_on (this-&gt;ctx-&gt;event_pool,</div><div class='del'>-                                                     priv-&gt;sock,</div><div class='del'>-                                                     priv-&gt;idx, (int) !onoff,</div><div class='del'>-                                                     -1);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='del'>-        return 0;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* The way we implement throttling is by taking off</div><div class='add'>+       POLLIN event from the polled flags. This way we</div><div class='add'>+       never get called with the POLLIN event and therefore</div><div class='add'>+       will never read() any more data until throttling</div><div class='add'>+       is turned off.</div><div class='add'>+    */</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+    {</div><div class='add'>+        /* Throttling is useless on a disconnected transport. In fact,</div><div class='add'>+         * it's dangerous since priv-&gt;idx and priv-&gt;sock are set to -1</div><div class='add'>+         * on a disconnected transport, which breaks epoll's event to</div><div class='add'>+         * registered fd mapping. */</div><div class='add'>+</div><div class='add'>+        if (priv-&gt;connected == 1)</div><div class='add'>+            priv-&gt;idx = event_select_on(this-&gt;ctx-&gt;event_pool, priv-&gt;sock,</div><div class='add'>+                                        priv-&gt;idx, (int)!onoff, -1);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct rpc_transport_ops tops = {</div><div class='del'>-        .listen             = socket_listen,</div><div class='del'>-        .connect            = socket_connect,</div><div class='del'>-        .disconnect         = socket_disconnect,</div><div class='del'>-        .submit_request     = socket_submit_request,</div><div class='del'>-        .submit_reply       = socket_submit_reply,</div><div class='del'>-        .get_peername       = socket_getpeername,</div><div class='del'>-        .get_peeraddr       = socket_getpeeraddr,</div><div class='del'>-        .get_myname         = socket_getmyname,</div><div class='del'>-        .get_myaddr         = socket_getmyaddr,</div><div class='del'>-        .throttle           = socket_throttle,</div><div class='add'>+    .listen = socket_listen,</div><div class='add'>+    .connect = socket_connect,</div><div class='add'>+    .disconnect = socket_disconnect,</div><div class='add'>+    .submit_request = socket_submit_request,</div><div class='add'>+    .submit_reply = socket_submit_reply,</div><div class='add'>+    .get_peername = socket_getpeername,</div><div class='add'>+    .get_peeraddr = socket_getpeeraddr,</div><div class='add'>+    .get_myname = socket_getmyname,</div><div class='add'>+    .get_myaddr = socket_getmyaddr,</div><div class='add'>+    .throttle = socket_throttle,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (rpc_transport_t *this, dict_t *options)</div><div class='add'>+reconfigure(rpc_transport_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv          = NULL;</div><div class='del'>-        gf_boolean_t      tmp_bool      = _gf_false;</div><div class='del'>-        char             *optstr        = NULL;</div><div class='del'>-        int               ret           = 0;</div><div class='del'>-        uint32_t          backlog       = 0;</div><div class='del'>-        uint64_t          windowsize    = 0;</div><div class='del'>-        uint32_t          timeout       = 0;</div><div class='del'>-        int               keepaliveidle  = GF_KEEPALIVE_TIME;</div><div class='del'>-        int               keepaliveintvl = GF_KEEPALIVE_INTERVAL;</div><div class='del'>-        int               keepalivecnt   = GF_KEEPALIVE_COUNT;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("socket", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        if (!this || !this-&gt;private) {</div><div class='del'>-                ret =-1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (options, "transport.socket.keepalive",</div><div class='del'>-                          &amp;optstr) == 0) {</div><div class='del'>-                if (gf_string2boolean (optstr, &amp;tmp_bool) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "'transport.socket.keepalive' takes only "</div><div class='del'>-                                "boolean options, not taking any action");</div><div class='del'>-                        priv-&gt;keepalive = 1;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigured transport.socket.keepalive");</div><div class='del'>-</div><div class='del'>-                priv-&gt;keepalive = tmp_bool;</div><div class='del'>-        } else</div><div class='del'>-                priv-&gt;keepalive = 1;</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (options, "transport.tcp-user-timeout",</div><div class='del'>-                            &amp;(priv-&gt;timeout)) != 0)</div><div class='del'>-                priv-&gt;timeout = timeout;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                "transport.tcp-user-timeout=%d", priv-&gt;timeout);</div><div class='del'>-</div><div class='del'>-        if (dict_get_uint32 (options, "transport.listen-backlog",</div><div class='del'>-                             &amp;backlog) == 0) {</div><div class='del'>-                priv-&gt;backlog = backlog;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                        "transport.listen-backlog=%d", priv-&gt;backlog);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (options, "transport.socket.keepalive-time",</div><div class='del'>-                            &amp;(priv-&gt;keepaliveidle)) != 0)</div><div class='del'>-                priv-&gt;keepaliveidle = keepaliveidle;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                "transport.socket.keepalive-time=%d", priv-&gt;keepaliveidle);</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (options,</div><div class='del'>-                            "transport.socket.keepalive-interval",</div><div class='del'>-                            &amp;(priv-&gt;keepaliveintvl)) != 0)</div><div class='del'>-                priv-&gt;keepaliveintvl = keepaliveintvl;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                "transport.socket.keepalive-interval=%d", priv-&gt;keepaliveintvl);</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (options, "transport.socket.keepalive-count",</div><div class='del'>-                            &amp;(priv-&gt;keepalivecnt)) != 0)</div><div class='del'>-                priv-&gt;keepalivecnt = keepalivecnt;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                "transport.socket.keepalive-count=%d", priv-&gt;keepalivecnt);</div><div class='del'>-</div><div class='del'>-        optstr = NULL;</div><div class='del'>-        if (dict_get_str (options, "tcp-window-size",</div><div class='del'>-                          &amp;optstr) == 0) {</div><div class='del'>-                if (gf_string2uint64 (optstr, &amp;windowsize) != 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "invalid number format: %s", optstr);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;windowsize = (int)windowsize;</div><div class='del'>-</div><div class='del'>-        if (dict_get (options, "non-blocking-io")) {</div><div class='del'>-                optstr = data_to_str (dict_get (options,</div><div class='del'>-                                                "non-blocking-io"));</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t tmp_bool = _gf_false;</div><div class='add'>+    char *optstr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t backlog = 0;</div><div class='add'>+    uint64_t windowsize = 0;</div><div class='add'>+    uint32_t timeout = 0;</div><div class='add'>+    int keepaliveidle = GF_KEEPALIVE_TIME;</div><div class='add'>+    int keepaliveintvl = GF_KEEPALIVE_INTERVAL;</div><div class='add'>+    int keepalivecnt = GF_KEEPALIVE_COUNT;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("socket", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    if (!this || !this-&gt;private) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(options, "transport.socket.keepalive", &amp;optstr) == 0) {</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;tmp_bool) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "'transport.socket.keepalive' takes only "</div><div class='add'>+                   "boolean options, not taking any action");</div><div class='add'>+            priv-&gt;keepalive = 1;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "Reconfigured transport.socket.keepalive");</div><div class='add'>+</div><div class='add'>+        priv-&gt;keepalive = tmp_bool;</div><div class='add'>+    } else</div><div class='add'>+        priv-&gt;keepalive = 1;</div><div class='ctx'> </div><div class='del'>-                if (gf_string2boolean (optstr, &amp;tmp_bool) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "'non-blocking-io' takes only boolean options,"</div><div class='del'>-                                " not taking any action");</div><div class='del'>-                        tmp_bool = 1;</div><div class='del'>-                }</div><div class='add'>+    if (dict_get_int32(options, "transport.tcp-user-timeout",</div><div class='add'>+                       &amp;(priv-&gt;timeout)) != 0)</div><div class='add'>+        priv-&gt;timeout = timeout;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Reconfigued "</div><div class='add'>+           "transport.tcp-user-timeout=%d",</div><div class='add'>+           priv-&gt;timeout);</div><div class='ctx'> </div><div class='del'>-                if (!tmp_bool) {</div><div class='del'>-                        priv-&gt;bio = 1;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "disabling non-blocking IO");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;bio) {</div><div class='del'>-                ret = __socket_nonblock (priv-&gt;sock);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "NBIO on %d failed (%s)",</div><div class='del'>-                                priv-&gt;sock, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (dict_get_uint32(options, "transport.listen-backlog", &amp;backlog) == 0) {</div><div class='add'>+        priv-&gt;backlog = backlog;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "Reconfigued "</div><div class='add'>+               "transport.listen-backlog=%d",</div><div class='add'>+               priv-&gt;backlog);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(options, "transport.socket.keepalive-time",</div><div class='add'>+                       &amp;(priv-&gt;keepaliveidle)) != 0)</div><div class='add'>+        priv-&gt;keepaliveidle = keepaliveidle;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Reconfigued "</div><div class='add'>+           "transport.socket.keepalive-time=%d",</div><div class='add'>+           priv-&gt;keepaliveidle);</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(options, "transport.socket.keepalive-interval",</div><div class='add'>+                       &amp;(priv-&gt;keepaliveintvl)) != 0)</div><div class='add'>+        priv-&gt;keepaliveintvl = keepaliveintvl;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Reconfigued "</div><div class='add'>+           "transport.socket.keepalive-interval=%d",</div><div class='add'>+           priv-&gt;keepaliveintvl);</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(options, "transport.socket.keepalive-count",</div><div class='add'>+                       &amp;(priv-&gt;keepalivecnt)) != 0)</div><div class='add'>+        priv-&gt;keepalivecnt = keepalivecnt;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Reconfigued "</div><div class='add'>+           "transport.socket.keepalive-count=%d",</div><div class='add'>+           priv-&gt;keepalivecnt);</div><div class='add'>+</div><div class='add'>+    optstr = NULL;</div><div class='add'>+    if (dict_get_str(options, "tcp-window-size", &amp;optstr) == 0) {</div><div class='add'>+        if (gf_string2uint64(optstr, &amp;windowsize) != 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "invalid number format: %s",</div><div class='add'>+                   optstr);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;windowsize = (int)windowsize;</div><div class='add'>+</div><div class='add'>+    if (dict_get(options, "non-blocking-io")) {</div><div class='add'>+        optstr = data_to_str(dict_get(options, "non-blocking-io"));</div><div class='add'>+</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;tmp_bool) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "'non-blocking-io' takes only boolean options,"</div><div class='add'>+                   " not taking any action");</div><div class='add'>+            tmp_bool = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!tmp_bool) {</div><div class='add'>+            priv-&gt;bio = 1;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "disabling non-blocking IO");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;bio) {</div><div class='add'>+        ret = __socket_nonblock(priv-&gt;sock);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "NBIO on %d failed (%s)",</div><div class='add'>+                   priv-&gt;sock, strerror(errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if OPENSSL_VERSION_NUMBER &lt; 0x1010000f</div><div class='del'>-static pthread_mutex_t  *lock_array     = NULL;</div><div class='add'>+static pthread_mutex_t *lock_array = NULL;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-locking_func (int mode, int type, const char *file, int line)</div><div class='add'>+locking_func(int mode, int type, const char *file, int line)</div><div class='ctx'> {</div><div class='del'>-        if (mode &amp; CRYPTO_UNLOCK) {</div><div class='del'>-                pthread_mutex_unlock (&amp;lock_array[type]);</div><div class='del'>-        } else {</div><div class='del'>-                pthread_mutex_lock (&amp;lock_array[type]);</div><div class='del'>-        }</div><div class='add'>+    if (mode &amp; CRYPTO_UNLOCK) {</div><div class='add'>+        pthread_mutex_unlock(&amp;lock_array[type]);</div><div class='add'>+    } else {</div><div class='add'>+        pthread_mutex_lock(&amp;lock_array[type]);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if OPENSSL_VERSION_NUMBER &gt;= 0x1000000f</div><div class='ctx'> static void</div><div class='del'>-threadid_func (CRYPTO_THREADID *id)</div><div class='add'>+threadid_func(CRYPTO_THREADID *id)</div><div class='ctx'> {</div><div class='del'>-        /*</div><div class='del'>-         * We're not supposed to know whether a pthread_t is a number or a</div><div class='del'>-         * pointer, but we definitely need an unsigned long.  Even though it</div><div class='del'>-         * happens to be an unsigned long already on Linux, do the cast just in</div><div class='del'>-         * case that's not so on another platform.  Note that this can still</div><div class='del'>-         * break if any platforms are left where a pointer is larger than an</div><div class='del'>-         * unsigned long.  In that case there's not much we can do; hopefully</div><div class='del'>-         * anyone porting to such a platform will be aware enough to notice the</div><div class='del'>-         * compile warnings about truncating the pointer value.</div><div class='del'>-         */</div><div class='del'>-        CRYPTO_THREADID_set_numeric (id, (unsigned long)pthread_self());</div><div class='add'>+    /*</div><div class='add'>+     * We're not supposed to know whether a pthread_t is a number or a</div><div class='add'>+     * pointer, but we definitely need an unsigned long.  Even though it</div><div class='add'>+     * happens to be an unsigned long already on Linux, do the cast just in</div><div class='add'>+     * case that's not so on another platform.  Note that this can still</div><div class='add'>+     * break if any platforms are left where a pointer is larger than an</div><div class='add'>+     * unsigned long.  In that case there's not much we can do; hopefully</div><div class='add'>+     * anyone porting to such a platform will be aware enough to notice the</div><div class='add'>+     * compile warnings about truncating the pointer value.</div><div class='add'>+     */</div><div class='add'>+    CRYPTO_THREADID_set_numeric(id, (unsigned long)pthread_self());</div><div class='ctx'> }</div><div class='del'>-#else /* older openssl */</div><div class='add'>+#else  /* older openssl */</div><div class='ctx'> static unsigned long</div><div class='del'>-legacy_threadid_func (void)</div><div class='add'>+legacy_threadid_func(void)</div><div class='ctx'> {</div><div class='del'>-        /* See comments above, it applies here too. */</div><div class='del'>-        return (unsigned long)pthread_self();</div><div class='add'>+    /* See comments above, it applies here too. */</div><div class='add'>+    return (unsigned long)pthread_self();</div><div class='ctx'> }</div><div class='ctx'> #endif /* OPENSSL_VERSION_NUMBER &gt;= 0x1000000f */</div><div class='ctx'> #endif /* OPENSSL_VERSION_NUMBER &lt; 0x1010000f */</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-init_openssl_mt (void)</div><div class='add'>+init_openssl_mt(void)</div><div class='ctx'> {</div><div class='del'>-        static gf_boolean_t initialized = _gf_false;</div><div class='add'>+    static gf_boolean_t initialized = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (initialized) {</div><div class='del'>-                /* this only needs to be initialized once GLOBALLY no</div><div class='del'>-                   matter how many translators/sockets we end up with. */</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (initialized) {</div><div class='add'>+        /* this only needs to be initialized once GLOBALLY no</div><div class='add'>+           matter how many translators/sockets we end up with. */</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        SSL_library_init();</div><div class='del'>-        SSL_load_error_strings();</div><div class='add'>+    SSL_library_init();</div><div class='add'>+    SSL_load_error_strings();</div><div class='ctx'> </div><div class='del'>-        initialized = _gf_true;</div><div class='add'>+    initialized = _gf_true;</div><div class='ctx'> </div><div class='ctx'> #if OPENSSL_VERSION_NUMBER &lt; 0x1010000f</div><div class='del'>-        int     num_locks       = CRYPTO_num_locks();</div><div class='del'>-        int     i;</div><div class='del'>-</div><div class='del'>-        lock_array = GF_CALLOC (num_locks, sizeof(pthread_mutex_t),</div><div class='del'>-                                gf_sock_mt_lock_array);</div><div class='del'>-        if (lock_array) {</div><div class='del'>-                for (i = 0; i &lt; num_locks; ++i) {</div><div class='del'>-                        pthread_mutex_init (&amp;lock_array[i], NULL);</div><div class='del'>-                }</div><div class='add'>+    int num_locks = CRYPTO_num_locks();</div><div class='add'>+    int i;</div><div class='add'>+</div><div class='add'>+    lock_array = GF_CALLOC(num_locks, sizeof(pthread_mutex_t),</div><div class='add'>+                           gf_sock_mt_lock_array);</div><div class='add'>+    if (lock_array) {</div><div class='add'>+        for (i = 0; i &lt; num_locks; ++i) {</div><div class='add'>+            pthread_mutex_init(&amp;lock_array[i], NULL);</div><div class='add'>+        }</div><div class='ctx'> #if OPENSSL_VERSION_NUMBER &gt;= 0x1000000f</div><div class='del'>-                CRYPTO_THREADID_set_callback (threadid_func);</div><div class='add'>+        CRYPTO_THREADID_set_callback(threadid_func);</div><div class='ctx'> #else /* older openssl */</div><div class='del'>-                CRYPTO_set_id_callback (legacy_threadid_func);</div><div class='add'>+        CRYPTO_set_id_callback(legacy_threadid_func);</div><div class='ctx'> #endif</div><div class='del'>-                CRYPTO_set_locking_callback (locking_func);</div><div class='del'>-        }</div><div class='add'>+        CRYPTO_set_locking_callback(locking_func);</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void __attribute__((destructor))</div><div class='del'>-fini_openssl_mt (void)</div><div class='add'>+static void __attribute__((destructor)) fini_openssl_mt(void)</div><div class='ctx'> {</div><div class='ctx'> #if OPENSSL_VERSION_NUMBER &lt; 0x1010000f</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        if (!lock_array) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!lock_array) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CRYPTO_set_locking_callback(NULL);</div><div class='add'>+    CRYPTO_set_locking_callback(NULL);</div><div class='ctx'> #if OPENSSL_VERSION_NUMBER &gt;= 0x1000000f</div><div class='del'>-        CRYPTO_THREADID_set_callback (NULL);</div><div class='add'>+    CRYPTO_THREADID_set_callback(NULL);</div><div class='ctx'> #else /* older openssl */</div><div class='del'>-        CRYPTO_set_id_callback (NULL);</div><div class='add'>+    CRYPTO_set_id_callback(NULL);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; CRYPTO_num_locks(); ++i) {</div><div class='del'>-                pthread_mutex_destroy (&amp;lock_array[i]);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; CRYPTO_num_locks(); ++i) {</div><div class='add'>+        pthread_mutex_destroy(&amp;lock_array[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (lock_array);</div><div class='del'>-        lock_array = NULL;</div><div class='add'>+    GF_FREE(lock_array);</div><div class='add'>+    lock_array = NULL;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ERR_free_strings();</div><div class='add'>+    ERR_free_strings();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> ssl_setup_connection_params(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        char             *optstr = NULL;</div><div class='del'>-        static int        session_id = 1;</div><div class='del'>-        int32_t           cert_depth = DEFAULT_VERIFY_DEPTH;</div><div class='del'>-        char             *cipher_list = DEFAULT_CIPHER_LIST;</div><div class='del'>-        char             *dh_param = DEFAULT_DH_PARAM;</div><div class='del'>-        char             *ec_curve = DEFAULT_EC_CURVE;</div><div class='del'>-        char             *crl_path = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;ssl_ctx != NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "found old SSL context!");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;ssl_own_cert = DEFAULT_CERT_PATH;</div><div class='del'>-        if (dict_get_str(this-&gt;options, SSL_OWN_CERT_OPT, &amp;optstr) == 0) {</div><div class='del'>-                if (!priv-&gt;ssl_enabled) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                               "%s specified without %s (ignored)",</div><div class='del'>-                               SSL_OWN_CERT_OPT, SSL_ENABLED_OPT);</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;ssl_own_cert = optstr;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;ssl_own_cert = gf_strdup(priv-&gt;ssl_own_cert);</div><div class='del'>-</div><div class='del'>-        priv-&gt;ssl_private_key = DEFAULT_KEY_PATH;</div><div class='del'>-        if (dict_get_str(this-&gt;options, SSL_PRIVATE_KEY_OPT, &amp;optstr) == 0) {</div><div class='del'>-                if (!priv-&gt;ssl_enabled) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                               "%s specified without %s (ignored)",</div><div class='del'>-                               SSL_PRIVATE_KEY_OPT, SSL_ENABLED_OPT);</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;ssl_private_key = optstr;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;ssl_private_key = gf_strdup(priv-&gt;ssl_private_key);</div><div class='del'>-</div><div class='del'>-        priv-&gt;ssl_ca_list = DEFAULT_CA_PATH;</div><div class='del'>-        if (dict_get_str(this-&gt;options, SSL_CA_LIST_OPT, &amp;optstr) == 0) {</div><div class='del'>-                if (!priv-&gt;ssl_enabled) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                               "%s specified without %s (ignored)",</div><div class='del'>-                               SSL_CA_LIST_OPT, SSL_ENABLED_OPT);</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;ssl_ca_list = optstr;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;ssl_ca_list = gf_strdup(priv-&gt;ssl_ca_list);</div><div class='del'>-</div><div class='del'>-        if (dict_get_str(this-&gt;options, SSL_CRL_PATH_OPT, &amp;optstr) == 0) {</div><div class='del'>-                if (!priv-&gt;ssl_enabled) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                               "%s specified without %s (ignored)",</div><div class='del'>-                               SSL_CRL_PATH_OPT, SSL_ENABLED_OPT);</div><div class='del'>-                }</div><div class='del'>-                if (strcasecmp(optstr, "NULL") == 0)</div><div class='del'>-                        crl_path = NULL;</div><div class='del'>-                else</div><div class='del'>-                        crl_path = optstr;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log(this-&gt;name, priv-&gt;ssl_enabled ? GF_LOG_INFO: GF_LOG_DEBUG,</div><div class='del'>-               "SSL support on the I/O path is %s",</div><div class='del'>-               priv-&gt;ssl_enabled ? "ENABLED" : "NOT enabled");</div><div class='del'>-        gf_log(this-&gt;name, priv-&gt;mgmt_ssl ? GF_LOG_INFO: GF_LOG_DEBUG,</div><div class='del'>-               "SSL support for glusterd is %s",</div><div class='del'>-               priv-&gt;mgmt_ssl ? "ENABLED" : "NOT enabled");</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;mgmt_ssl) {</div><div class='del'>-                if (!dict_get_int32 (this-&gt;options, SSL_CERT_DEPTH_OPT, &amp;cert_depth)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                "using certificate depth %d", cert_depth);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                cert_depth = this-&gt;ctx-&gt;ssl_cert_depth;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "using certificate depth %d", cert_depth);</div><div class='del'>-        }</div><div class='del'>-        if (!dict_get_str (this-&gt;options, SSL_CIPHER_LIST_OPT, &amp;cipher_list)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "using cipher list %s", cipher_list);</div><div class='del'>-        }</div><div class='del'>-        if (!dict_get_str (this-&gt;options, SSL_DH_PARAM_OPT, &amp;dh_param)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "using DH parameters %s", dh_param);</div><div class='del'>-        }</div><div class='del'>-        if (!dict_get_str (this-&gt;options, SSL_EC_CURVE_OPT, &amp;ec_curve)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "using EC curve %s", ec_curve);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;ssl_enabled || priv-&gt;mgmt_ssl) {</div><div class='del'>-                BIO *bio = NULL;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    char *optstr = NULL;</div><div class='add'>+    static int session_id = 1;</div><div class='add'>+    int32_t cert_depth = DEFAULT_VERIFY_DEPTH;</div><div class='add'>+    char *cipher_list = DEFAULT_CIPHER_LIST;</div><div class='add'>+    char *dh_param = DEFAULT_DH_PARAM;</div><div class='add'>+    char *ec_curve = DEFAULT_EC_CURVE;</div><div class='add'>+    char *crl_path = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;ssl_ctx != NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "found old SSL context!");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;ssl_own_cert = DEFAULT_CERT_PATH;</div><div class='add'>+    if (dict_get_str(this-&gt;options, SSL_OWN_CERT_OPT, &amp;optstr) == 0) {</div><div class='add'>+        if (!priv-&gt;ssl_enabled) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "%s specified without %s (ignored)", SSL_OWN_CERT_OPT,</div><div class='add'>+                   SSL_ENABLED_OPT);</div><div class='add'>+        }</div><div class='add'>+        priv-&gt;ssl_own_cert = optstr;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;ssl_own_cert = gf_strdup(priv-&gt;ssl_own_cert);</div><div class='add'>+</div><div class='add'>+    priv-&gt;ssl_private_key = DEFAULT_KEY_PATH;</div><div class='add'>+    if (dict_get_str(this-&gt;options, SSL_PRIVATE_KEY_OPT, &amp;optstr) == 0) {</div><div class='add'>+        if (!priv-&gt;ssl_enabled) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "%s specified without %s (ignored)", SSL_PRIVATE_KEY_OPT,</div><div class='add'>+                   SSL_ENABLED_OPT);</div><div class='add'>+        }</div><div class='add'>+        priv-&gt;ssl_private_key = optstr;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;ssl_private_key = gf_strdup(priv-&gt;ssl_private_key);</div><div class='add'>+</div><div class='add'>+    priv-&gt;ssl_ca_list = DEFAULT_CA_PATH;</div><div class='add'>+    if (dict_get_str(this-&gt;options, SSL_CA_LIST_OPT, &amp;optstr) == 0) {</div><div class='add'>+        if (!priv-&gt;ssl_enabled) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "%s specified without %s (ignored)", SSL_CA_LIST_OPT,</div><div class='add'>+                   SSL_ENABLED_OPT);</div><div class='add'>+        }</div><div class='add'>+        priv-&gt;ssl_ca_list = optstr;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;ssl_ca_list = gf_strdup(priv-&gt;ssl_ca_list);</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(this-&gt;options, SSL_CRL_PATH_OPT, &amp;optstr) == 0) {</div><div class='add'>+        if (!priv-&gt;ssl_enabled) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "%s specified without %s (ignored)", SSL_CRL_PATH_OPT,</div><div class='add'>+                   SSL_ENABLED_OPT);</div><div class='add'>+        }</div><div class='add'>+        if (strcasecmp(optstr, "NULL") == 0)</div><div class='add'>+            crl_path = NULL;</div><div class='add'>+        else</div><div class='add'>+            crl_path = optstr;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, priv-&gt;ssl_enabled ? GF_LOG_INFO : GF_LOG_DEBUG,</div><div class='add'>+           "SSL support on the I/O path is %s",</div><div class='add'>+           priv-&gt;ssl_enabled ? "ENABLED" : "NOT enabled");</div><div class='add'>+    gf_log(this-&gt;name, priv-&gt;mgmt_ssl ? GF_LOG_INFO : GF_LOG_DEBUG,</div><div class='add'>+           "SSL support for glusterd is %s",</div><div class='add'>+           priv-&gt;mgmt_ssl ? "ENABLED" : "NOT enabled");</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;mgmt_ssl) {</div><div class='add'>+        if (!dict_get_int32(this-&gt;options, SSL_CERT_DEPTH_OPT, &amp;cert_depth)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "using certificate depth %d",</div><div class='add'>+                   cert_depth);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        cert_depth = this-&gt;ctx-&gt;ssl_cert_depth;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "using certificate depth %d",</div><div class='add'>+               cert_depth);</div><div class='add'>+    }</div><div class='add'>+    if (!dict_get_str(this-&gt;options, SSL_CIPHER_LIST_OPT, &amp;cipher_list)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "using cipher list %s", cipher_list);</div><div class='add'>+    }</div><div class='add'>+    if (!dict_get_str(this-&gt;options, SSL_DH_PARAM_OPT, &amp;dh_param)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "using DH parameters %s", dh_param);</div><div class='add'>+    }</div><div class='add'>+    if (!dict_get_str(this-&gt;options, SSL_EC_CURVE_OPT, &amp;ec_curve)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "using EC curve %s", ec_curve);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;ssl_enabled || priv-&gt;mgmt_ssl) {</div><div class='add'>+        BIO *bio = NULL;</div><div class='ctx'> </div><div class='ctx'> #if HAVE_TLS_METHOD</div><div class='del'>-                priv-&gt;ssl_meth = (SSL_METHOD *)TLS_method();</div><div class='add'>+        priv-&gt;ssl_meth = (SSL_METHOD *)TLS_method();</div><div class='ctx'> #elif HAVE_TLSV1_2_METHOD</div><div class='del'>-                priv-&gt;ssl_meth = (SSL_METHOD *)TLSv1_2_method();</div><div class='add'>+        priv-&gt;ssl_meth = (SSL_METHOD *)TLSv1_2_method();</div><div class='ctx'> #else</div><div class='ctx'> /*</div><div class='ctx'>  * Nobody should use an OpenSSL so old it does not support TLS 1.2.</div><div class='hunk'>@@ -4354,560 +4204,494 @@ ssl_setup_connection_params(rpc_transport_t *this)</div><div class='ctx'> #ifndef USE_INSECURE_OPENSSL</div><div class='ctx'> #error Old and insecure OpenSSL, use -DUSE_INSECURE_OPENSSL to use it anyway</div><div class='ctx'> #endif</div><div class='del'>-                /* SSLv23_method uses highest available protocol */</div><div class='del'>-                priv-&gt;ssl_meth = SSLv23_method();</div><div class='add'>+        /* SSLv23_method uses highest available protocol */</div><div class='add'>+        priv-&gt;ssl_meth = SSLv23_method();</div><div class='ctx'> #endif</div><div class='del'>-                priv-&gt;ssl_ctx = SSL_CTX_new(priv-&gt;ssl_meth);</div><div class='add'>+        priv-&gt;ssl_ctx = SSL_CTX_new(priv-&gt;ssl_meth);</div><div class='ctx'> </div><div class='del'>-                SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_SSLv2);</div><div class='del'>-                SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_SSLv3);</div><div class='add'>+        SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_SSLv2);</div><div class='add'>+        SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_SSLv3);</div><div class='ctx'> #ifdef SSL_OP_NO_TICKET</div><div class='del'>-                SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_TICKET);</div><div class='add'>+        SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_TICKET);</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef SSL_OP_NO_COMPRESSION</div><div class='del'>-                SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_COMPRESSION);</div><div class='add'>+        SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_NO_COMPRESSION);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-                if ((bio = BIO_new_file(dh_param, "r")) == NULL) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                               "failed to open %s, "</div><div class='del'>-                               "DH ciphers are disabled", dh_param);</div><div class='del'>-                }</div><div class='add'>+        if ((bio = BIO_new_file(dh_param, "r")) == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   "failed to open %s, "</div><div class='add'>+                   "DH ciphers are disabled",</div><div class='add'>+                   dh_param);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (bio != NULL) {</div><div class='add'>+        if (bio != NULL) {</div><div class='ctx'> #ifdef HAVE_OPENSSL_DH_H</div><div class='del'>-                        DH *dh;</div><div class='del'>-                        unsigned long err;</div><div class='del'>-</div><div class='del'>-                        dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);</div><div class='del'>-                        BIO_free(bio);</div><div class='del'>-                        if (dh != NULL) {</div><div class='del'>-                                SSL_CTX_set_options(priv-&gt;ssl_ctx,</div><div class='del'>-                                                    SSL_OP_SINGLE_DH_USE);</div><div class='del'>-                                SSL_CTX_set_tmp_dh(priv-&gt;ssl_ctx, dh);</div><div class='del'>-                                DH_free(dh);</div><div class='del'>-                        } else {</div><div class='del'>-                                err = ERR_get_error();</div><div class='del'>-                                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                       "failed to read DH param from %s: %s "</div><div class='del'>-                                       "DH ciphers are disabled.",</div><div class='del'>-                                       dh_param, ERR_error_string(err, NULL));</div><div class='del'>-                        }</div><div class='del'>-#else /* HAVE_OPENSSL_DH_H */</div><div class='del'>-                        BIO_free(bio);</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "OpenSSL has no DH support");</div><div class='add'>+            DH *dh;</div><div class='add'>+            unsigned long err;</div><div class='add'>+</div><div class='add'>+            dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);</div><div class='add'>+            BIO_free(bio);</div><div class='add'>+            if (dh != NULL) {</div><div class='add'>+                SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_SINGLE_DH_USE);</div><div class='add'>+                SSL_CTX_set_tmp_dh(priv-&gt;ssl_ctx, dh);</div><div class='add'>+                DH_free(dh);</div><div class='add'>+            } else {</div><div class='add'>+                err = ERR_get_error();</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "failed to read DH param from %s: %s "</div><div class='add'>+                       "DH ciphers are disabled.",</div><div class='add'>+                       dh_param, ERR_error_string(err, NULL));</div><div class='add'>+            }</div><div class='add'>+#else  /* HAVE_OPENSSL_DH_H */</div><div class='add'>+            BIO_free(bio);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "OpenSSL has no DH support");</div><div class='ctx'> #endif /* HAVE_OPENSSL_DH_H */</div><div class='del'>-                }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ec_curve != NULL) {</div><div class='add'>+        if (ec_curve != NULL) {</div><div class='ctx'> #ifdef HAVE_OPENSSL_ECDH_H</div><div class='del'>-                        EC_KEY *ecdh = NULL;</div><div class='del'>-                        int nid;</div><div class='del'>-                        unsigned long err;</div><div class='del'>-</div><div class='del'>-                        nid = OBJ_sn2nid(ec_curve);</div><div class='del'>-                        if (nid != 0)</div><div class='del'>-                                ecdh = EC_KEY_new_by_curve_name(nid);</div><div class='del'>-</div><div class='del'>-                        if (ecdh != NULL) {</div><div class='del'>-                                SSL_CTX_set_options(priv-&gt;ssl_ctx,</div><div class='del'>-                                                    SSL_OP_SINGLE_ECDH_USE);</div><div class='del'>-                                SSL_CTX_set_tmp_ecdh(priv-&gt;ssl_ctx, ecdh);</div><div class='del'>-                                EC_KEY_free(ecdh);</div><div class='del'>-                        } else {</div><div class='del'>-                                err = ERR_get_error();</div><div class='del'>-                                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                       "failed to load EC curve %s: %s. "</div><div class='del'>-                                       "ECDH ciphers are disabled.",</div><div class='del'>-                                       ec_curve, ERR_error_string(err, NULL));</div><div class='del'>-                        }</div><div class='del'>-#else /* HAVE_OPENSSL_ECDH_H */</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "OpenSSL has no ECDH support");</div><div class='add'>+            EC_KEY *ecdh = NULL;</div><div class='add'>+            int nid;</div><div class='add'>+            unsigned long err;</div><div class='add'>+</div><div class='add'>+            nid = OBJ_sn2nid(ec_curve);</div><div class='add'>+            if (nid != 0)</div><div class='add'>+                ecdh = EC_KEY_new_by_curve_name(nid);</div><div class='add'>+</div><div class='add'>+            if (ecdh != NULL) {</div><div class='add'>+                SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_SINGLE_ECDH_USE);</div><div class='add'>+                SSL_CTX_set_tmp_ecdh(priv-&gt;ssl_ctx, ecdh);</div><div class='add'>+                EC_KEY_free(ecdh);</div><div class='add'>+            } else {</div><div class='add'>+                err = ERR_get_error();</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "failed to load EC curve %s: %s. "</div><div class='add'>+                       "ECDH ciphers are disabled.",</div><div class='add'>+                       ec_curve, ERR_error_string(err, NULL));</div><div class='add'>+            }</div><div class='add'>+#else  /* HAVE_OPENSSL_ECDH_H */</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "OpenSSL has no ECDH support");</div><div class='ctx'> #endif /* HAVE_OPENSSL_ECDH_H */</div><div class='del'>-                }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* This must be done after DH and ECDH setups */</div><div class='del'>-                if (SSL_CTX_set_cipher_list(priv-&gt;ssl_ctx, cipher_list) == 0) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "failed to find any valid ciphers");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        /* This must be done after DH and ECDH setups */</div><div class='add'>+        if (SSL_CTX_set_cipher_list(priv-&gt;ssl_ctx, cipher_list) == 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to find any valid ciphers");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                SSL_CTX_set_options(priv-&gt;ssl_ctx,</div><div class='del'>-                                    SSL_OP_CIPHER_SERVER_PREFERENCE);</div><div class='add'>+        SSL_CTX_set_options(priv-&gt;ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);</div><div class='ctx'> </div><div class='del'>-                if (!SSL_CTX_use_certificate_chain_file(priv-&gt;ssl_ctx,</div><div class='del'>-                                                        priv-&gt;ssl_own_cert)) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "could not load our cert at %s",</div><div class='del'>-                               priv-&gt;ssl_own_cert);</div><div class='del'>-                        ssl_dump_error_stack(this-&gt;name);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        if (!SSL_CTX_use_certificate_chain_file(priv-&gt;ssl_ctx,</div><div class='add'>+                                                priv-&gt;ssl_own_cert)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "could not load our cert at %s",</div><div class='add'>+                   priv-&gt;ssl_own_cert);</div><div class='add'>+            ssl_dump_error_stack(this-&gt;name);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!SSL_CTX_use_PrivateKey_file(priv-&gt;ssl_ctx,</div><div class='del'>-                                                 priv-&gt;ssl_private_key,</div><div class='del'>-                                                 SSL_FILETYPE_PEM)) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "could not load private key at %s",</div><div class='del'>-                               priv-&gt;ssl_private_key);</div><div class='del'>-                        ssl_dump_error_stack(this-&gt;name);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        if (!SSL_CTX_use_PrivateKey_file(priv-&gt;ssl_ctx, priv-&gt;ssl_private_key,</div><div class='add'>+                                         SSL_FILETYPE_PEM)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "could not load private key at %s",</div><div class='add'>+                   priv-&gt;ssl_private_key);</div><div class='add'>+            ssl_dump_error_stack(this-&gt;name);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!SSL_CTX_load_verify_locations(priv-&gt;ssl_ctx,</div><div class='del'>-                                                   priv-&gt;ssl_ca_list,</div><div class='del'>-                                                   crl_path)) {</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "could not load CA list");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        if (!SSL_CTX_load_verify_locations(priv-&gt;ssl_ctx, priv-&gt;ssl_ca_list,</div><div class='add'>+                                           crl_path)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "could not load CA list");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                SSL_CTX_set_verify_depth(priv-&gt;ssl_ctx, cert_depth);</div><div class='add'>+        SSL_CTX_set_verify_depth(priv-&gt;ssl_ctx, cert_depth);</div><div class='ctx'> </div><div class='del'>-                if (crl_path) {</div><div class='add'>+        if (crl_path) {</div><div class='ctx'> #ifdef X509_V_FLAG_CRL_CHECK_ALL</div><div class='del'>-                        X509_STORE *x509store;</div><div class='add'>+            X509_STORE *x509store;</div><div class='ctx'> </div><div class='del'>-                        x509store  = SSL_CTX_get_cert_store(priv-&gt;ssl_ctx);</div><div class='del'>-                        X509_STORE_set_flags(x509store,</div><div class='del'>-                                             X509_V_FLAG_CRL_CHECK |</div><div class='del'>-                                             X509_V_FLAG_CRL_CHECK_ALL);</div><div class='add'>+            x509store = SSL_CTX_get_cert_store(priv-&gt;ssl_ctx);</div><div class='add'>+            X509_STORE_set_flags(</div><div class='add'>+                x509store, X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL);</div><div class='ctx'> #else</div><div class='del'>-                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                               "OpenSSL version does not support CRL");</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "OpenSSL version does not support CRL");</div><div class='ctx'> #endif</div><div class='del'>-                }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                priv-&gt;ssl_session_id = session_id++;</div><div class='del'>-                SSL_CTX_set_session_id_context(priv-&gt;ssl_ctx,</div><div class='del'>-                                               (void *)&amp;priv-&gt;ssl_session_id,</div><div class='del'>-                                               sizeof(priv-&gt;ssl_session_id));</div><div class='add'>+        priv-&gt;ssl_session_id = session_id++;</div><div class='add'>+        SSL_CTX_set_session_id_context(priv-&gt;ssl_ctx,</div><div class='add'>+                                       (void *)&amp;priv-&gt;ssl_session_id,</div><div class='add'>+                                       sizeof(priv-&gt;ssl_session_id));</div><div class='ctx'> </div><div class='del'>-                SSL_CTX_set_verify(priv-&gt;ssl_ctx, SSL_VERIFY_PEER, 0);</div><div class='add'>+        SSL_CTX_set_verify(priv-&gt;ssl_ctx, SSL_VERIFY_PEER, 0);</div><div class='ctx'> </div><div class='del'>-                /*</div><div class='del'>-                 * Since glusterfs shares the same settings for client-side</div><div class='del'>-                 * and server-side of SSL, we need to ignore any certificate</div><div class='del'>-                 * usage specification (SSL client vs SSL server), otherwise</div><div class='del'>-                 * SSL connexions will fail with 'unsupported cerritifcate"</div><div class='del'>-                 */</div><div class='del'>-                SSL_CTX_set_purpose(priv-&gt;ssl_ctx, X509_PURPOSE_ANY);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+        /*</div><div class='add'>+         * Since glusterfs shares the same settings for client-side</div><div class='add'>+         * and server-side of SSL, we need to ignore any certificate</div><div class='add'>+         * usage specification (SSL client vs SSL server), otherwise</div><div class='add'>+         * SSL connexions will fail with 'unsupported cerritifcate"</div><div class='add'>+         */</div><div class='add'>+        SSL_CTX_set_purpose(priv-&gt;ssl_ctx, X509_PURPOSE_ANY);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-socket_init (rpc_transport_t *this)</div><div class='add'>+socket_init(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-        gf_boolean_t      tmp_bool = 0;</div><div class='del'>-        uint64_t          windowsize = GF_DEFAULT_SOCKET_WINDOW_SIZE;</div><div class='del'>-        char             *optstr = NULL;</div><div class='del'>-        uint32_t          timeout = 0;</div><div class='del'>-        int               keepaliveidle  = GF_KEEPALIVE_TIME;</div><div class='del'>-        int               keepaliveintvl = GF_KEEPALIVE_INTERVAL;</div><div class='del'>-        int               keepalivecnt   = GF_KEEPALIVE_COUNT;</div><div class='del'>-        uint32_t          backlog = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (this-&gt;private) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                  "double init attempted");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = GF_MALLOC (sizeof (*priv), gf_common_mt_socket_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        memset(priv, 0, sizeof(*priv));</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;in_lock, NULL);</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;out_lock, NULL);</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;cond_lock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;priv-&gt;cond, NULL);</div><div class='del'>-</div><div class='del'>-        /*GF_REF_INIT (priv, socket_poller_mayday);*/</div><div class='del'>-</div><div class='del'>-        priv-&gt;sock = -1;</div><div class='del'>-        priv-&gt;idx = -1;</div><div class='del'>-        priv-&gt;connected = -1;</div><div class='del'>-        priv-&gt;nodelay = 1;</div><div class='del'>-        priv-&gt;bio = 0;</div><div class='del'>-        priv-&gt;ssl_accepted  = _gf_false;</div><div class='del'>-        priv-&gt;ssl_connected = _gf_false;</div><div class='del'>-        priv-&gt;windowsize = GF_DEFAULT_SOCKET_WINDOW_SIZE;</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;ioq);</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;notify.lock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;priv-&gt;notify.cond, NULL);</div><div class='del'>-</div><div class='del'>-        /* All the below section needs 'this-&gt;options' to be present */</div><div class='del'>-        if (!this-&gt;options)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (dict_get (this-&gt;options, "non-blocking-io")) {</div><div class='del'>-                optstr = data_to_str (dict_get (this-&gt;options,</div><div class='del'>-                                                "non-blocking-io"));</div><div class='del'>-</div><div class='del'>-                if (gf_string2boolean (optstr, &amp;tmp_bool) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "'non-blocking-io' takes only boolean options,"</div><div class='del'>-                                " not taking any action");</div><div class='del'>-                        tmp_bool = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!tmp_bool) {</div><div class='del'>-                        priv-&gt;bio = 1;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "disabling non-blocking IO");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        optstr = NULL;</div><div class='del'>-</div><div class='del'>-        /* By default, we enable NODELAY */</div><div class='del'>-        if (dict_get (this-&gt;options, "transport.socket.nodelay")) {</div><div class='del'>-                optstr = data_to_str (dict_get (this-&gt;options,</div><div class='del'>-                                                "transport.socket.nodelay"));</div><div class='del'>-</div><div class='del'>-                if (gf_string2boolean (optstr, &amp;tmp_bool) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "'transport.socket.nodelay' takes only "</div><div class='del'>-                                "boolean options, not taking any action");</div><div class='del'>-                        tmp_bool = 1;</div><div class='del'>-                }</div><div class='del'>-                if (!tmp_bool) {</div><div class='del'>-                        priv-&gt;nodelay = 0;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "disabling nodelay");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        optstr = NULL;</div><div class='del'>-        if (dict_get_str (this-&gt;options, "tcp-window-size",</div><div class='del'>-                          &amp;optstr) == 0) {</div><div class='del'>-                if (gf_string2uint64 (optstr, &amp;windowsize) != 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "invalid number format: %s", optstr);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;windowsize = (int)windowsize;</div><div class='del'>-</div><div class='del'>-        optstr = NULL;</div><div class='del'>-        /* Enable Keep-alive by default. */</div><div class='del'>-        priv-&gt;keepalive = 1;</div><div class='del'>-        priv-&gt;keepaliveintvl = GF_KEEPALIVE_INTERVAL;</div><div class='del'>-        priv-&gt;keepaliveidle = GF_KEEPALIVE_TIME;</div><div class='del'>-        priv-&gt;keepalivecnt = GF_KEEPALIVE_COUNT;</div><div class='del'>-        if (dict_get_str (this-&gt;options, "transport.socket.keepalive",</div><div class='del'>-                          &amp;optstr) == 0) {</div><div class='del'>-                if (gf_string2boolean (optstr, &amp;tmp_bool) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "'transport.socket.keepalive' takes only "</div><div class='del'>-                                "boolean options, not taking any action");</div><div class='del'>-                        tmp_bool = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!tmp_bool)</div><div class='del'>-                        priv-&gt;keepalive = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (this-&gt;options, "transport.tcp-user-timeout",</div><div class='del'>-                            &amp;(priv-&gt;timeout)) != 0)</div><div class='del'>-                priv-&gt;timeout = timeout;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "Configued "</div><div class='del'>-                "transport.tcp-user-timeout=%d", priv-&gt;timeout);</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (this-&gt;options,</div><div class='del'>-                            "transport.socket.keepalive-time",</div><div class='del'>-                            &amp;(priv-&gt;keepaliveidle)) != 0) {</div><div class='del'>-                priv-&gt;keepaliveidle = keepaliveidle;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (this-&gt;options,</div><div class='del'>-                            "transport.socket.keepalive-interval",</div><div class='del'>-                            &amp;(priv-&gt;keepaliveintvl)) != 0) {</div><div class='del'>-                priv-&gt;keepaliveintvl = keepaliveintvl;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_int32 (this-&gt;options, "transport.socket.keepalive-count",</div><div class='del'>-                            &amp;(priv-&gt;keepalivecnt)) != 0)</div><div class='del'>-                priv-&gt;keepalivecnt = keepalivecnt;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "Reconfigued "</div><div class='del'>-                "transport.keepalivecnt=%d", keepalivecnt);</div><div class='del'>-</div><div class='del'>-        if (dict_get_uint32 (this-&gt;options,</div><div class='del'>-                             "transport.listen-backlog",</div><div class='del'>-                             &amp;backlog) != 0) {</div><div class='del'>-                backlog = GLUSTERFS_SOCKET_LISTEN_BACKLOG;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;backlog = backlog;</div><div class='del'>-</div><div class='del'>-        optstr = NULL;</div><div class='del'>-</div><div class='del'>-         /* Check if socket read failures are to be logged */</div><div class='del'>-        priv-&gt;read_fail_log = 1;</div><div class='del'>-        if (dict_get (this-&gt;options, "transport.socket.read-fail-log")) {</div><div class='del'>-                optstr = data_to_str (dict_get (this-&gt;options,</div><div class='del'>-                                                "transport.socket.read-fail-log"));</div><div class='del'>-                if (gf_string2boolean (optstr, &amp;tmp_bool) == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "'transport.socket.read-fail-log' takes only "</div><div class='del'>-                                "boolean options; logging socket read fails");</div><div class='del'>-                } else if (tmp_bool == _gf_false) {</div><div class='del'>-                        priv-&gt;read_fail_log = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;windowsize = (int)windowsize;</div><div class='del'>-</div><div class='del'>-        priv-&gt;ssl_enabled = _gf_false;</div><div class='del'>-        if (dict_get_str(this-&gt;options, SSL_ENABLED_OPT, &amp;optstr) == 0) {</div><div class='del'>-                if (gf_string2boolean (optstr, &amp;priv-&gt;ssl_enabled) != 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "invalid value given for ssl-enabled boolean");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;mgmt_ssl = this-&gt;ctx-&gt;secure_mgmt;</div><div class='del'>-        priv-&gt;srvr_ssl = this-&gt;ctx-&gt;secure_srvr;</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t tmp_bool = 0;</div><div class='add'>+    uint64_t windowsize = GF_DEFAULT_SOCKET_WINDOW_SIZE;</div><div class='add'>+    char *optstr = NULL;</div><div class='add'>+    uint32_t timeout = 0;</div><div class='add'>+    int keepaliveidle = GF_KEEPALIVE_TIME;</div><div class='add'>+    int keepaliveintvl = GF_KEEPALIVE_INTERVAL;</div><div class='add'>+    int keepalivecnt = GF_KEEPALIVE_COUNT;</div><div class='add'>+    uint32_t backlog = 0;</div><div class='add'>+</div><div class='add'>+    if (this-&gt;private) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_ERROR, "double init attempted");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ssl_setup_connection_params(this);</div><div class='add'>+    priv = GF_MALLOC(sizeof(*priv), gf_common_mt_socket_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    memset(priv, 0, sizeof(*priv));</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;in_lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;out_lock, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;cond_lock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;priv-&gt;cond, NULL);</div><div class='add'>+</div><div class='add'>+    /*GF_REF_INIT (priv, socket_poller_mayday);*/</div><div class='add'>+</div><div class='add'>+    priv-&gt;sock = -1;</div><div class='add'>+    priv-&gt;idx = -1;</div><div class='add'>+    priv-&gt;connected = -1;</div><div class='add'>+    priv-&gt;nodelay = 1;</div><div class='add'>+    priv-&gt;bio = 0;</div><div class='add'>+    priv-&gt;ssl_accepted = _gf_false;</div><div class='add'>+    priv-&gt;ssl_connected = _gf_false;</div><div class='add'>+    priv-&gt;windowsize = GF_DEFAULT_SOCKET_WINDOW_SIZE;</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;ioq);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;notify.lock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;priv-&gt;notify.cond, NULL);</div><div class='add'>+</div><div class='add'>+    /* All the below section needs 'this-&gt;options' to be present */</div><div class='add'>+    if (!this-&gt;options)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (dict_get(this-&gt;options, "non-blocking-io")) {</div><div class='add'>+        optstr = data_to_str(dict_get(this-&gt;options, "non-blocking-io"));</div><div class='add'>+</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;tmp_bool) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "'non-blocking-io' takes only boolean options,"</div><div class='add'>+                   " not taking any action");</div><div class='add'>+            tmp_bool = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!tmp_bool) {</div><div class='add'>+            priv-&gt;bio = 1;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "disabling non-blocking IO");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    optstr = NULL;</div><div class='add'>+</div><div class='add'>+    /* By default, we enable NODELAY */</div><div class='add'>+    if (dict_get(this-&gt;options, "transport.socket.nodelay")) {</div><div class='add'>+        optstr = data_to_str(</div><div class='add'>+            dict_get(this-&gt;options, "transport.socket.nodelay"));</div><div class='add'>+</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;tmp_bool) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "'transport.socket.nodelay' takes only "</div><div class='add'>+                   "boolean options, not taking any action");</div><div class='add'>+            tmp_bool = 1;</div><div class='add'>+        }</div><div class='add'>+        if (!tmp_bool) {</div><div class='add'>+            priv-&gt;nodelay = 0;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "disabling nodelay");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    optstr = NULL;</div><div class='add'>+    if (dict_get_str(this-&gt;options, "tcp-window-size", &amp;optstr) == 0) {</div><div class='add'>+        if (gf_string2uint64(optstr, &amp;windowsize) != 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "invalid number format: %s",</div><div class='add'>+                   optstr);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;windowsize = (int)windowsize;</div><div class='add'>+</div><div class='add'>+    optstr = NULL;</div><div class='add'>+    /* Enable Keep-alive by default. */</div><div class='add'>+    priv-&gt;keepalive = 1;</div><div class='add'>+    priv-&gt;keepaliveintvl = GF_KEEPALIVE_INTERVAL;</div><div class='add'>+    priv-&gt;keepaliveidle = GF_KEEPALIVE_TIME;</div><div class='add'>+    priv-&gt;keepalivecnt = GF_KEEPALIVE_COUNT;</div><div class='add'>+    if (dict_get_str(this-&gt;options, "transport.socket.keepalive", &amp;optstr) ==</div><div class='add'>+        0) {</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;tmp_bool) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "'transport.socket.keepalive' takes only "</div><div class='add'>+                   "boolean options, not taking any action");</div><div class='add'>+            tmp_bool = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!tmp_bool)</div><div class='add'>+            priv-&gt;keepalive = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(this-&gt;options, "transport.tcp-user-timeout",</div><div class='add'>+                       &amp;(priv-&gt;timeout)) != 0)</div><div class='add'>+        priv-&gt;timeout = timeout;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Configued "</div><div class='add'>+           "transport.tcp-user-timeout=%d",</div><div class='add'>+           priv-&gt;timeout);</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(this-&gt;options, "transport.socket.keepalive-time",</div><div class='add'>+                       &amp;(priv-&gt;keepaliveidle)) != 0) {</div><div class='add'>+        priv-&gt;keepaliveidle = keepaliveidle;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(this-&gt;options, "transport.socket.keepalive-interval",</div><div class='add'>+                       &amp;(priv-&gt;keepaliveintvl)) != 0) {</div><div class='add'>+        priv-&gt;keepaliveintvl = keepaliveintvl;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_int32(this-&gt;options, "transport.socket.keepalive-count",</div><div class='add'>+                       &amp;(priv-&gt;keepalivecnt)) != 0)</div><div class='add'>+        priv-&gt;keepalivecnt = keepalivecnt;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           "Reconfigued "</div><div class='add'>+           "transport.keepalivecnt=%d",</div><div class='add'>+           keepalivecnt);</div><div class='add'>+</div><div class='add'>+    if (dict_get_uint32(this-&gt;options, "transport.listen-backlog", &amp;backlog) !=</div><div class='add'>+        0) {</div><div class='add'>+        backlog = GLUSTERFS_SOCKET_LISTEN_BACKLOG;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;backlog = backlog;</div><div class='add'>+</div><div class='add'>+    optstr = NULL;</div><div class='add'>+</div><div class='add'>+    /* Check if socket read failures are to be logged */</div><div class='add'>+    priv-&gt;read_fail_log = 1;</div><div class='add'>+    if (dict_get(this-&gt;options, "transport.socket.read-fail-log")) {</div><div class='add'>+        optstr = data_to_str(</div><div class='add'>+            dict_get(this-&gt;options, "transport.socket.read-fail-log"));</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;tmp_bool) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "'transport.socket.read-fail-log' takes only "</div><div class='add'>+                   "boolean options; logging socket read fails");</div><div class='add'>+        } else if (tmp_bool == _gf_false) {</div><div class='add'>+            priv-&gt;read_fail_log = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;windowsize = (int)windowsize;</div><div class='add'>+</div><div class='add'>+    priv-&gt;ssl_enabled = _gf_false;</div><div class='add'>+    if (dict_get_str(this-&gt;options, SSL_ENABLED_OPT, &amp;optstr) == 0) {</div><div class='add'>+        if (gf_string2boolean(optstr, &amp;priv-&gt;ssl_enabled) != 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "invalid value given for ssl-enabled boolean");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;mgmt_ssl = this-&gt;ctx-&gt;secure_mgmt;</div><div class='add'>+    priv-&gt;srvr_ssl = this-&gt;ctx-&gt;secure_srvr;</div><div class='add'>+</div><div class='add'>+    ssl_setup_connection_params(this);</div><div class='ctx'> out:</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        return 0;</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fini (rpc_transport_t *this)</div><div class='add'>+fini(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        socket_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv) {</div><div class='del'>-                if (priv-&gt;sock != -1) {</div><div class='del'>-                        pthread_mutex_lock (&amp;priv-&gt;in_lock);</div><div class='del'>-                        pthread_mutex_lock (&amp;priv-&gt;out_lock);</div><div class='del'>-                        {</div><div class='del'>-                                __socket_ioq_flush (this);</div><div class='del'>-                                __socket_reset (this);</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;priv-&gt;out_lock);</div><div class='del'>-                        pthread_mutex_unlock (&amp;priv-&gt;in_lock);</div><div class='del'>-                }</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "transport %p destroyed", this);</div><div class='del'>-</div><div class='del'>-                pthread_mutex_destroy (&amp;priv-&gt;in_lock);</div><div class='del'>-                pthread_mutex_destroy (&amp;priv-&gt;out_lock);</div><div class='del'>-                pthread_mutex_destroy (&amp;priv-&gt;cond_lock);</div><div class='del'>-                pthread_cond_destroy (&amp;priv-&gt;cond);</div><div class='del'>-                if (priv-&gt;ssl_private_key) {</div><div class='del'>-                        GF_FREE(priv-&gt;ssl_private_key);</div><div class='del'>-                }</div><div class='del'>-                if (priv-&gt;ssl_own_cert) {</div><div class='del'>-                        GF_FREE(priv-&gt;ssl_own_cert);</div><div class='del'>-                }</div><div class='del'>-                if (priv-&gt;ssl_ca_list) {</div><div class='del'>-                        GF_FREE(priv-&gt;ssl_ca_list);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (priv);</div><div class='add'>+    socket_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv) {</div><div class='add'>+        if (priv-&gt;sock != -1) {</div><div class='add'>+            pthread_mutex_lock(&amp;priv-&gt;in_lock);</div><div class='add'>+            pthread_mutex_lock(&amp;priv-&gt;out_lock);</div><div class='add'>+            {</div><div class='add'>+                __socket_ioq_flush(this);</div><div class='add'>+                __socket_reset(this);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;out_lock);</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;in_lock);</div><div class='add'>+        }</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "transport %p destroyed", this);</div><div class='add'>+</div><div class='add'>+        pthread_mutex_destroy(&amp;priv-&gt;in_lock);</div><div class='add'>+        pthread_mutex_destroy(&amp;priv-&gt;out_lock);</div><div class='add'>+        pthread_mutex_destroy(&amp;priv-&gt;cond_lock);</div><div class='add'>+        pthread_cond_destroy(&amp;priv-&gt;cond);</div><div class='add'>+        if (priv-&gt;ssl_private_key) {</div><div class='add'>+            GF_FREE(priv-&gt;ssl_private_key);</div><div class='add'>+        }</div><div class='add'>+        if (priv-&gt;ssl_own_cert) {</div><div class='add'>+            GF_FREE(priv-&gt;ssl_own_cert);</div><div class='add'>+        }</div><div class='add'>+        if (priv-&gt;ssl_ca_list) {</div><div class='add'>+            GF_FREE(priv-&gt;ssl_ca_list);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (rpc_transport_t *this)</div><div class='add'>+init(rpc_transport_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        init_openssl_mt();</div><div class='add'>+    init_openssl_mt();</div><div class='ctx'> </div><div class='del'>-        ret = socket_init (this);</div><div class='add'>+    ret = socket_init(this);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "socket_init() failed");</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "socket_init() failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key   = {"remote-port",</div><div class='del'>-                    "transport.remote-port",</div><div class='del'>-                    "transport.socket.remote-port"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.listen-port", "listen-port"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.bind-address", "bind-address" },</div><div class='del'>-          .type  = GF_OPTION_TYPE_INTERNET_ADDRESS</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.connect-path", "connect-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.bind-path", "bind-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.listen-path", "listen-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.address-family", "address-family"},</div><div class='del'>-          .value = {"inet", "inet6", "unix", "inet-sdp"},</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"non-blocking-io"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"tcp-window-size"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_SIZET,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Option to set TCP SEND/RECV BUFFER SIZE",</div><div class='del'>-          .min   = GF_MIN_SOCKET_WINDOW_SIZE,</div><div class='del'>-          .max   = GF_MAX_SOCKET_WINDOW_SIZE</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.listen-backlog"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_SIZET,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_11_1},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "This option uses the value of backlog argument that "</div><div class='del'>-                         "defines the maximum length to which the queue of "</div><div class='del'>-                         "pending connections for socket fd may grow.",</div><div class='del'>-          .default_value = "1024",</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.tcp-user-timeout"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_10_2},</div><div class='del'>-          .default_value = "0"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.nodelay"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "1"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.lowlat"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.keepalive"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .op_version  = {1},</div><div class='del'>-          .default_value = "1"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.keepalive-interval"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_10_2},</div><div class='del'>-          .default_value = "2"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.keepalive-time"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_10_2},</div><div class='del'>-          .default_value = "20"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.keepalive-count"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_10_2},</div><div class='del'>-          .default_value = "9"</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"transport.socket.read-fail-log"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_ENABLED_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_OWN_CERT_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_PRIVATE_KEY_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_CA_LIST_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_CERT_DEPTH_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_CIPHER_LIST_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_DH_PARAM_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_EC_CURVE_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {SSL_CRL_PATH_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key   = {OWN_THREAD_OPT},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-own-cert"},</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "SSL certificate. Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-private-key"},</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "SSL private key. Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-ca-list"},</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "SSL CA list. Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-cert-depth"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Maximum certificate-chain depth.  If zero, the "</div><div class='del'>-                         "peer's certificate itself must be in the local "</div><div class='del'>-                         "certificate list.  Otherwise, there may be up to N "</div><div class='del'>-                         "signing certificates between the peer's and the "</div><div class='del'>-                         "local list.  Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-cipher-list"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Allowed SSL ciphers. Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-dh-param"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "DH parameters file. Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-ec-curve"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "ECDH curve name. Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"ssl-crl-path"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_4},</div><div class='del'>-          .flags      = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Path to directory containing CRL. "</div><div class='del'>-                         "Ignored if SSL is not enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key = {NULL} }</div><div class='del'>-};</div><div class='add'>+    {.key = {"remote-port", "transport.remote-port",</div><div class='add'>+             "transport.socket.remote-port"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.socket.listen-port", "listen-port"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT},</div><div class='add'>+    {.key = {"transport.socket.bind-address", "bind-address"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INTERNET_ADDRESS},</div><div class='add'>+    {.key = {"transport.socket.connect-path", "connect-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+    {.key = {"transport.socket.bind-path", "bind-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+    {.key = {"transport.socket.listen-path", "listen-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+    {.key = {"transport.address-family", "address-family"},</div><div class='add'>+     .value = {"inet", "inet6", "unix", "inet-sdp"},</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {"non-blocking-io"}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {"tcp-window-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_SIZET,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "Option to set TCP SEND/RECV BUFFER SIZE",</div><div class='add'>+     .min = GF_MIN_SOCKET_WINDOW_SIZE,</div><div class='add'>+     .max = GF_MAX_SOCKET_WINDOW_SIZE},</div><div class='add'>+    {</div><div class='add'>+        .key = {"transport.listen-backlog"},</div><div class='add'>+        .type = GF_OPTION_TYPE_SIZET,</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_11_1},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .description = "This option uses the value of backlog argument that "</div><div class='add'>+                       "defines the maximum length to which the queue of "</div><div class='add'>+                       "pending connections for socket fd may grow.",</div><div class='add'>+        .default_value = "1024",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"transport.tcp-user-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_10_2},</div><div class='add'>+     .default_value = "0"},</div><div class='add'>+    {.key = {"transport.socket.nodelay"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "1"},</div><div class='add'>+    {.key = {"transport.socket.lowlat"}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {"transport.socket.keepalive"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .default_value = "1"},</div><div class='add'>+    {.key = {"transport.socket.keepalive-interval"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_10_2},</div><div class='add'>+     .default_value = "2"},</div><div class='add'>+    {.key = {"transport.socket.keepalive-time"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_10_2},</div><div class='add'>+     .default_value = "20"},</div><div class='add'>+    {.key = {"transport.socket.keepalive-count"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_10_2},</div><div class='add'>+     .default_value = "9"},</div><div class='add'>+    {.key = {"transport.socket.read-fail-log"}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {SSL_ENABLED_OPT}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {SSL_OWN_CERT_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_PRIVATE_KEY_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_CA_LIST_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_CERT_DEPTH_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_CIPHER_LIST_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_DH_PARAM_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_EC_CURVE_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {SSL_CRL_PATH_OPT}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {OWN_THREAD_OPT}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {"ssl-own-cert"},</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "SSL certificate. Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-private-key"},</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "SSL private key. Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-ca-list"},</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "SSL CA list. Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-cert-depth"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "Maximum certificate-chain depth.  If zero, the "</div><div class='add'>+                    "peer's certificate itself must be in the local "</div><div class='add'>+                    "certificate list.  Otherwise, there may be up to N "</div><div class='add'>+                    "signing certificates between the peer's and the "</div><div class='add'>+                    "local list.  Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-cipher-list"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "Allowed SSL ciphers. Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-dh-param"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "DH parameters file. Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-ec-curve"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "ECDH curve name. Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {"ssl-crl-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_4},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "Path to directory containing CRL. "</div><div class='add'>+                    "Ignored if SSL is not enabled."},</div><div class='add'>+    {.key = {NULL}}};</div><div class='head'>diff --git a/rpc/xdr/src/msg-nfs3.c b/rpc/xdr/src/msg-nfs3.c<br/>index 040aced6a97..d14a731b62a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/xdr/src/msg-nfs3.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/xdr/src/msg-nfs3.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/xdr/src/msg-nfs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/xdr/src/msg-nfs3.c</a></div><div class='hunk'>@@ -18,35 +18,34 @@</div><div class='ctx'> #include "xdr-generic.h"</div><div class='ctx'> #include "xdr-common.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Decode the mount path from the network message in inmsg</div><div class='ctx'>  * into the memory referenced by outpath.iov_base.</div><div class='ctx'>  * The size allocated for outpath.iov_base is outpath.iov_len.</div><div class='ctx'>  * The size of the path extracted from the message is returned.</div><div class='ctx'>  */</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_mountpath (struct iovec outpath, struct iovec inmsg)</div><div class='add'>+xdr_to_mountpath(struct iovec outpath, struct iovec inmsg)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t ret = -1;</div><div class='del'>-        char    *mntpath = NULL;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    char *mntpath = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((!outpath.iov_base) || (!inmsg.iov_base))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!outpath.iov_base) || (!inmsg.iov_base))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,</div><div class='del'>-                       XDR_DECODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,</div><div class='add'>+                  XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-        mntpath = outpath.iov_base;</div><div class='del'>-        if (!xdr_dirpath (&amp;xdr, (dirpath *)&amp;mntpath)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='add'>+    mntpath = outpath.iov_base;</div><div class='add'>+    if (!xdr_dirpath(&amp;xdr, (dirpath *)&amp;mntpath)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_decoded_length (xdr);</div><div class='add'>+    ret = xdr_decoded_length(xdr);</div><div class='ctx'> </div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Translate the mountres3 structure in res into XDR format into memory</div><div class='hunk'>@@ -54,514 +53,429 @@ ret:</div><div class='ctx'>  * Returns the number of bytes used in encoding into XDR format.</div><div class='ctx'>  */</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_mountres3 (struct iovec outmsg, mountres3 *res)</div><div class='add'>+xdr_serialize_mountres3(struct iovec outmsg, mountres3 *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_mountres3);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_mountres3);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_mountbody (struct iovec outmsg, mountbody *mb)</div><div class='add'>+xdr_serialize_mountbody(struct iovec outmsg, mountbody *mb)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)mb,</div><div class='del'>-                                          (xdrproc_t)xdr_mountbody);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)mb, (xdrproc_t)xdr_mountbody);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_mountlist (struct iovec outmsg, mountlist *ml)</div><div class='add'>+xdr_serialize_mountlist(struct iovec outmsg, mountlist *ml)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)ml,</div><div class='del'>-                                          (xdrproc_t)xdr_mountlist);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)ml, (xdrproc_t)xdr_mountlist);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_mountstat3 (struct iovec outmsg, mountstat3 *m)</div><div class='add'>+xdr_serialize_mountstat3(struct iovec outmsg, mountstat3 *m)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)m,</div><div class='del'>-                                          (xdrproc_t)xdr_mountstat3);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)m, (xdrproc_t)xdr_mountstat3);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_getattr3args (struct iovec inmsg, getattr3args *ga)</div><div class='add'>+xdr_to_getattr3args(struct iovec inmsg, getattr3args *ga)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ga,</div><div class='del'>-                                   (xdrproc_t)xdr_getattr3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ga, (xdrproc_t)xdr_getattr3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_getattr3res (struct iovec outmsg, getattr3res *res)</div><div class='add'>+xdr_serialize_getattr3res(struct iovec outmsg, getattr3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_getattr3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_getattr3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_setattr3res (struct iovec outmsg, setattr3res *res)</div><div class='add'>+xdr_serialize_setattr3res(struct iovec outmsg, setattr3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_setattr3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_setattr3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_setattr3args (struct iovec inmsg, setattr3args *sa)</div><div class='add'>+xdr_to_setattr3args(struct iovec inmsg, setattr3args *sa)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)sa,</div><div class='del'>-                                   (xdrproc_t)xdr_setattr3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)sa, (xdrproc_t)xdr_setattr3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_lookup3res (struct iovec outmsg, lookup3res *res)</div><div class='add'>+xdr_serialize_lookup3res(struct iovec outmsg, lookup3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_lookup3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_lookup3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_lookup3args (struct iovec inmsg, lookup3args *la)</div><div class='add'>+xdr_to_lookup3args(struct iovec inmsg, lookup3args *la)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)la,</div><div class='del'>-                                   (xdrproc_t)xdr_lookup3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)la, (xdrproc_t)xdr_lookup3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_access3args (struct iovec inmsg, access3args *ac)</div><div class='add'>+xdr_to_access3args(struct iovec inmsg, access3args *ac)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg,(void *)ac,</div><div class='del'>-                                   (xdrproc_t)xdr_access3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ac, (xdrproc_t)xdr_access3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_access3res (struct iovec outmsg, access3res *res)</div><div class='add'>+xdr_serialize_access3res(struct iovec outmsg, access3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_access3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_access3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_readlink3args (struct iovec inmsg, readlink3args *ra)</div><div class='add'>+xdr_to_readlink3args(struct iovec inmsg, readlink3args *ra)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ra,</div><div class='del'>-                                   (xdrproc_t)xdr_readlink3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ra, (xdrproc_t)xdr_readlink3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_readlink3res (struct iovec outmsg, readlink3res *res)</div><div class='add'>+xdr_serialize_readlink3res(struct iovec outmsg, readlink3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_readlink3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_readlink3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_read3args (struct iovec inmsg, read3args *ra)</div><div class='add'>+xdr_to_read3args(struct iovec inmsg, read3args *ra)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ra, (xdrproc_t)xdr_read3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ra, (xdrproc_t)xdr_read3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_read3res (struct iovec outmsg, read3res *res)</div><div class='add'>+xdr_serialize_read3res(struct iovec outmsg, read3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_read3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_read3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_read3res_nocopy (struct iovec outmsg, read3res *res)</div><div class='add'>+xdr_serialize_read3res_nocopy(struct iovec outmsg, read3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_read3res_nocopy);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_read3res_nocopy);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_write3args (struct iovec inmsg, write3args *wa)</div><div class='add'>+xdr_to_write3args(struct iovec inmsg, write3args *wa)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)wa,(xdrproc_t)xdr_write3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)wa, (xdrproc_t)xdr_write3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_write3args_nocopy (struct iovec inmsg, write3args *wa,</div><div class='del'>-                          struct iovec *payload)</div><div class='add'>+xdr_to_write3args_nocopy(struct iovec inmsg, write3args *wa,</div><div class='add'>+                         struct iovec *payload)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic_payload (inmsg, (void *)wa,</div><div class='del'>-                                           (xdrproc_t)xdr_write3args, payload);</div><div class='add'>+    return xdr_to_generic_payload(inmsg, (void *)wa, (xdrproc_t)xdr_write3args,</div><div class='add'>+                                  payload);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_write3res (struct iovec outmsg, write3res *res)</div><div class='add'>+xdr_serialize_write3res(struct iovec outmsg, write3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_write3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_write3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_create3args (struct iovec inmsg, create3args *ca)</div><div class='add'>+xdr_to_create3args(struct iovec inmsg, create3args *ca)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ca,</div><div class='del'>-                                   (xdrproc_t)xdr_create3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ca, (xdrproc_t)xdr_create3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_create3res (struct iovec outmsg, create3res *res)</div><div class='add'>+xdr_serialize_create3res(struct iovec outmsg, create3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_create3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_create3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_mkdir3res (struct iovec outmsg, mkdir3res *res)</div><div class='add'>+xdr_serialize_mkdir3res(struct iovec outmsg, mkdir3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_mkdir3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_mkdir3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_mkdir3args (struct iovec inmsg, mkdir3args *ma)</div><div class='add'>+xdr_to_mkdir3args(struct iovec inmsg, mkdir3args *ma)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ma,</div><div class='del'>-                                   (xdrproc_t)xdr_mkdir3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ma, (xdrproc_t)xdr_mkdir3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_symlink3args (struct iovec inmsg, symlink3args *sa)</div><div class='add'>+xdr_to_symlink3args(struct iovec inmsg, symlink3args *sa)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)sa,</div><div class='del'>-                                   (xdrproc_t)xdr_symlink3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)sa, (xdrproc_t)xdr_symlink3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_symlink3res (struct iovec outmsg, symlink3res *res)</div><div class='add'>+xdr_serialize_symlink3res(struct iovec outmsg, symlink3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_symlink3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_symlink3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_mknod3args (struct iovec inmsg, mknod3args *ma)</div><div class='add'>+xdr_to_mknod3args(struct iovec inmsg, mknod3args *ma)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ma,</div><div class='del'>-                                   (xdrproc_t)xdr_mknod3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ma, (xdrproc_t)xdr_mknod3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_mknod3res (struct iovec outmsg, mknod3res *res)</div><div class='add'>+xdr_serialize_mknod3res(struct iovec outmsg, mknod3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_mknod3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_mknod3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_remove3args (struct iovec inmsg, remove3args *ra)</div><div class='add'>+xdr_to_remove3args(struct iovec inmsg, remove3args *ra)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ra,</div><div class='del'>-                                   (xdrproc_t)xdr_remove3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ra, (xdrproc_t)xdr_remove3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_remove3res (struct iovec outmsg, remove3res *res)</div><div class='add'>+xdr_serialize_remove3res(struct iovec outmsg, remove3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_remove3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_remove3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_rmdir3args (struct iovec inmsg, rmdir3args *ra)</div><div class='add'>+xdr_to_rmdir3args(struct iovec inmsg, rmdir3args *ra)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ra,</div><div class='del'>-                                   (xdrproc_t)xdr_rmdir3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ra, (xdrproc_t)xdr_rmdir3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_rmdir3res (struct iovec outmsg, rmdir3res *res)</div><div class='add'>+xdr_serialize_rmdir3res(struct iovec outmsg, rmdir3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_rmdir3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_rmdir3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_rename3res (struct iovec outmsg, rename3res *res)</div><div class='add'>+xdr_serialize_rename3res(struct iovec outmsg, rename3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_rename3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_rename3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_rename3args (struct iovec inmsg, rename3args *ra)</div><div class='add'>+xdr_to_rename3args(struct iovec inmsg, rename3args *ra)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ra,</div><div class='del'>-                                   (xdrproc_t)xdr_rename3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ra, (xdrproc_t)xdr_rename3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_link3res (struct iovec outmsg, link3res *li)</div><div class='add'>+xdr_serialize_link3res(struct iovec outmsg, link3res *li)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)li,</div><div class='del'>-                                          (xdrproc_t)xdr_link3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)li, (xdrproc_t)xdr_link3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_link3args (struct iovec inmsg, link3args *la)</div><div class='add'>+xdr_to_link3args(struct iovec inmsg, link3args *la)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)la, (xdrproc_t)xdr_link3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)la, (xdrproc_t)xdr_link3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_readdir3args (struct iovec inmsg, readdir3args *rd)</div><div class='add'>+xdr_to_readdir3args(struct iovec inmsg, readdir3args *rd)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)rd,</div><div class='del'>-                                   (xdrproc_t)xdr_readdir3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)rd, (xdrproc_t)xdr_readdir3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_readdir3res (struct iovec outmsg, readdir3res *res)</div><div class='add'>+xdr_serialize_readdir3res(struct iovec outmsg, readdir3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_readdir3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_readdir3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_readdirp3args (struct iovec inmsg, readdirp3args *rp)</div><div class='add'>+xdr_to_readdirp3args(struct iovec inmsg, readdirp3args *rp)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)rp,</div><div class='del'>-                                   (xdrproc_t)xdr_readdirp3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)rp, (xdrproc_t)xdr_readdirp3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_readdirp3res (struct iovec outmsg, readdirp3res *res)</div><div class='add'>+xdr_serialize_readdirp3res(struct iovec outmsg, readdirp3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_readdirp3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_readdirp3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_fsstat3args (struct iovec inmsg, fsstat3args *fa)</div><div class='add'>+xdr_to_fsstat3args(struct iovec inmsg, fsstat3args *fa)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)fa,</div><div class='del'>-                                   (xdrproc_t)xdr_fsstat3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)fa, (xdrproc_t)xdr_fsstat3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_fsstat3res (struct iovec outmsg, fsstat3res *res)</div><div class='add'>+xdr_serialize_fsstat3res(struct iovec outmsg, fsstat3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_fsstat3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_fsstat3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_fsinfo3args (struct iovec inmsg, fsinfo3args *fi)</div><div class='add'>+xdr_to_fsinfo3args(struct iovec inmsg, fsinfo3args *fi)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)fi,</div><div class='del'>-                                   (xdrproc_t)xdr_fsinfo3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)fi, (xdrproc_t)xdr_fsinfo3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_fsinfo3res (struct iovec outmsg, fsinfo3res *res)</div><div class='add'>+xdr_serialize_fsinfo3res(struct iovec outmsg, fsinfo3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_fsinfo3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_fsinfo3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_pathconf3args (struct iovec inmsg, pathconf3args *pc)</div><div class='add'>+xdr_to_pathconf3args(struct iovec inmsg, pathconf3args *pc)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)pc,</div><div class='del'>-                                   (xdrproc_t)xdr_pathconf3args);}</div><div class='del'>-</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)pc, (xdrproc_t)xdr_pathconf3args);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_pathconf3res (struct iovec outmsg, pathconf3res *res)</div><div class='add'>+xdr_serialize_pathconf3res(struct iovec outmsg, pathconf3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_pathconf3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_pathconf3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_commit3args (struct iovec inmsg, commit3args *ca)</div><div class='add'>+xdr_to_commit3args(struct iovec inmsg, commit3args *ca)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *)ca,</div><div class='del'>-                                   (xdrproc_t)xdr_commit3args);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)ca, (xdrproc_t)xdr_commit3args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_commit3res (struct iovec outmsg, commit3res *res)</div><div class='add'>+xdr_serialize_commit3res(struct iovec outmsg, commit3res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                          (xdrproc_t)xdr_commit3res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_commit3res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_exports (struct iovec outmsg, exports *elist)</div><div class='add'>+xdr_serialize_exports(struct iovec outmsg, exports *elist)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t  ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!outmsg.iov_base) || (!elist))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!outmsg.iov_base) || (!elist))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, outmsg.iov_base, (unsigned int)outmsg.iov_len,</div><div class='del'>-                       XDR_ENCODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, outmsg.iov_base, (unsigned int)outmsg.iov_len,</div><div class='add'>+                  XDR_ENCODE);</div><div class='ctx'> </div><div class='del'>-        if (!xdr_exports (&amp;xdr, elist))</div><div class='del'>-                goto ret;</div><div class='add'>+    if (!xdr_exports(&amp;xdr, elist))</div><div class='add'>+        goto ret;</div><div class='ctx'> </div><div class='del'>-        ret = xdr_decoded_length (xdr);</div><div class='add'>+    ret = xdr_decoded_length(xdr);</div><div class='ctx'> </div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_nfsstat3 (struct iovec outmsg, nfsstat3 *s)</div><div class='add'>+xdr_serialize_nfsstat3(struct iovec outmsg, nfsstat3 *s)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)s,</div><div class='del'>-                                          (xdrproc_t)xdr_nfsstat3);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)s, (xdrproc_t)xdr_nfsstat3);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_testargs (struct iovec inmsg, nlm4_testargs *args)</div><div class='add'>+xdr_to_nlm4_testargs(struct iovec inmsg, nlm4_testargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_testargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_testargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_nlm4_testres (struct iovec outmsg, nlm4_testres *res)</div><div class='add'>+xdr_serialize_nlm4_testres(struct iovec outmsg, nlm4_testres *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void*)res,</div><div class='del'>-                                      (xdrproc_t)xdr_nlm4_testres);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_nlm4_testres);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_lockargs (struct iovec inmsg, nlm4_lockargs *args)</div><div class='add'>+xdr_to_nlm4_lockargs(struct iovec inmsg, nlm4_lockargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_lockargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_lockargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_nlm4_res (struct iovec outmsg, nlm4_res *res)</div><div class='add'>+xdr_serialize_nlm4_res(struct iovec outmsg, nlm4_res *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void*)res,</div><div class='del'>-                                      (xdrproc_t)xdr_nlm4_res);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res, (xdrproc_t)xdr_nlm4_res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_cancelargs (struct iovec inmsg, nlm4_cancargs *args)</div><div class='add'>+xdr_to_nlm4_cancelargs(struct iovec inmsg, nlm4_cancargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_cancargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_cancargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_unlockargs (struct iovec inmsg, nlm4_unlockargs *args)</div><div class='add'>+xdr_to_nlm4_unlockargs(struct iovec inmsg, nlm4_unlockargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_unlockargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_unlockargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_shareargs (struct iovec inmsg, nlm4_shareargs *args)</div><div class='add'>+xdr_to_nlm4_shareargs(struct iovec inmsg, nlm4_shareargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_shareargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_shareargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_nlm4_shareres (struct iovec outmsg, nlm4_shareres *res)</div><div class='add'>+xdr_serialize_nlm4_shareres(struct iovec outmsg, nlm4_shareres *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void *)res,</div><div class='del'>-                                      (xdrproc_t)xdr_nlm4_shareres);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_nlm4_shareres);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_nlm4_testargs (struct iovec outmsg, nlm4_testargs *args)</div><div class='add'>+xdr_serialize_nlm4_testargs(struct iovec outmsg, nlm4_testargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (outmsg, (void*)args,</div><div class='del'>-                                      (xdrproc_t)xdr_nlm4_testargs);</div><div class='add'>+    return xdr_serialize_generic(outmsg, (void *)args,</div><div class='add'>+                                 (xdrproc_t)xdr_nlm4_testargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_res (struct iovec inmsg, nlm4_res *args)</div><div class='add'>+xdr_to_nlm4_res(struct iovec inmsg, nlm4_res *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_res);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_res);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_nlm4_freeallargs (struct iovec inmsg, nlm4_freeallargs *args)</div><div class='add'>+xdr_to_nlm4_freeallargs(struct iovec inmsg, nlm4_freeallargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void*)args,</div><div class='del'>-                               (xdrproc_t)xdr_nlm4_freeallargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_nlm4_freeallargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_getaclargs (struct iovec inmsg, getaclargs *args)</div><div class='add'>+xdr_to_getaclargs(struct iovec inmsg, getaclargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *) args,</div><div class='del'>-                               (xdrproc_t)xdr_getaclargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_getaclargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_setaclargs (struct iovec inmsg, setaclargs *args)</div><div class='add'>+xdr_to_setaclargs(struct iovec inmsg, setaclargs *args)</div><div class='ctx'> {</div><div class='del'>-        return xdr_to_generic (inmsg, (void *) args,</div><div class='del'>-                               (xdrproc_t)xdr_setaclargs);</div><div class='add'>+    return xdr_to_generic(inmsg, (void *)args, (xdrproc_t)xdr_setaclargs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_getaclreply (struct iovec inmsg, getaclreply *res)</div><div class='add'>+xdr_serialize_getaclreply(struct iovec inmsg, getaclreply *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (inmsg, (void *) res,</div><div class='del'>-                                      (xdrproc_t)xdr_getaclreply);</div><div class='add'>+    return xdr_serialize_generic(inmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_getaclreply);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_setaclreply (struct iovec inmsg, setaclreply *res)</div><div class='add'>+xdr_serialize_setaclreply(struct iovec inmsg, setaclreply *res)</div><div class='ctx'> {</div><div class='del'>-        return xdr_serialize_generic (inmsg, (void *) res,</div><div class='del'>-                                      (xdrproc_t)xdr_setaclreply);</div><div class='add'>+    return xdr_serialize_generic(inmsg, (void *)res,</div><div class='add'>+                                 (xdrproc_t)xdr_setaclreply);</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/rpc/xdr/src/xdr-generic.c b/rpc/xdr/src/xdr-generic.c<br/>index fd6fceb9425..20b54eb0a8a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/xdr/src/xdr-generic.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/xdr/src/xdr-generic.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/xdr/src/xdr-generic.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/xdr/src/xdr-generic.c</a></div><div class='hunk'>@@ -8,118 +8,113 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "xdr-generic.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_serialize_generic (struct iovec outmsg, void *res, xdrproc_t proc)</div><div class='add'>+xdr_serialize_generic(struct iovec outmsg, void *res, xdrproc_t proc)</div><div class='ctx'> {</div><div class='del'>-        ssize_t ret = -1;</div><div class='del'>-        XDR     xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='ctx'> </div><div class='del'>-        if ((!outmsg.iov_base) || (!res) || (!proc))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!outmsg.iov_base) || (!res) || (!proc))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, outmsg.iov_base, (unsigned int)outmsg.iov_len,</div><div class='del'>-                       XDR_ENCODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, outmsg.iov_base, (unsigned int)outmsg.iov_len,</div><div class='add'>+                  XDR_ENCODE);</div><div class='ctx'> </div><div class='del'>-        if (!PROC(&amp;xdr, res)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='add'>+    if (!PROC(&amp;xdr, res)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_encoded_length (xdr);</div><div class='add'>+    ret = xdr_encoded_length(xdr);</div><div class='ctx'> </div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_generic (struct iovec inmsg, void *args, xdrproc_t proc)</div><div class='add'>+xdr_to_generic(struct iovec inmsg, void *args, xdrproc_t proc)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!inmsg.iov_base) || (!args) || (!proc))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!inmsg.iov_base) || (!args) || (!proc))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,</div><div class='del'>-                       XDR_DECODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,</div><div class='add'>+                  XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-        if (!PROC (&amp;xdr, args)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='add'>+    if (!PROC(&amp;xdr, args)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_decoded_length (xdr);</div><div class='add'>+    ret = xdr_decoded_length(xdr);</div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ssize_t</div><div class='del'>-xdr_to_generic_payload (struct iovec inmsg, void *args, xdrproc_t proc,</div><div class='del'>-                        struct iovec *pendingpayload)</div><div class='add'>+xdr_to_generic_payload(struct iovec inmsg, void *args, xdrproc_t proc,</div><div class='add'>+                       struct iovec *pendingpayload)</div><div class='ctx'> {</div><div class='del'>-        XDR     xdr;</div><div class='del'>-        ssize_t ret = -1;</div><div class='add'>+    XDR xdr;</div><div class='add'>+    ssize_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((!inmsg.iov_base) || (!args) || (!proc))</div><div class='del'>-                return -1;</div><div class='add'>+    if ((!inmsg.iov_base) || (!args) || (!proc))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xdrmem_create (&amp;xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,</div><div class='del'>-                       XDR_DECODE);</div><div class='add'>+    xdrmem_create(&amp;xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,</div><div class='add'>+                  XDR_DECODE);</div><div class='ctx'> </div><div class='del'>-        if (!PROC (&amp;xdr, args)) {</div><div class='del'>-                ret  = -1;</div><div class='del'>-                goto ret;</div><div class='del'>-        }</div><div class='add'>+    if (!PROC(&amp;xdr, args)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = xdr_decoded_length (xdr);</div><div class='add'>+    ret = xdr_decoded_length(xdr);</div><div class='ctx'> </div><div class='del'>-        if (pendingpayload) {</div><div class='del'>-                pendingpayload-&gt;iov_base = xdr_decoded_remaining_addr (xdr);</div><div class='del'>-                pendingpayload-&gt;iov_len = xdr_decoded_remaining_len (xdr);</div><div class='del'>-        }</div><div class='add'>+    if (pendingpayload) {</div><div class='add'>+        pendingpayload-&gt;iov_base = xdr_decoded_remaining_addr(xdr);</div><div class='add'>+        pendingpayload-&gt;iov_len = xdr_decoded_remaining_len(xdr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> ret:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-xdr_length_round_up (size_t len, size_t bufsize)</div><div class='add'>+xdr_length_round_up(size_t len, size_t bufsize)</div><div class='ctx'> {</div><div class='del'>-        int     roundup = 0;</div><div class='add'>+    int roundup = 0;</div><div class='ctx'> </div><div class='del'>-        roundup = len % XDR_BYTES_PER_UNIT;</div><div class='del'>-        if (roundup &gt; 0)</div><div class='del'>-                roundup = XDR_BYTES_PER_UNIT - roundup;</div><div class='add'>+    roundup = len % XDR_BYTES_PER_UNIT;</div><div class='add'>+    if (roundup &gt; 0)</div><div class='add'>+        roundup = XDR_BYTES_PER_UNIT - roundup;</div><div class='ctx'> </div><div class='del'>-        if ((roundup &gt; 0) &amp;&amp; ((roundup + len) &lt;= bufsize))</div><div class='del'>-                len += roundup;</div><div class='add'>+    if ((roundup &gt; 0) &amp;&amp; ((roundup + len) &lt;= bufsize))</div><div class='add'>+        len += roundup;</div><div class='ctx'> </div><div class='del'>-        return len;</div><div class='add'>+    return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xdr_bytes_round_up (struct iovec *vec, size_t bufsize)</div><div class='add'>+xdr_bytes_round_up(struct iovec *vec, size_t bufsize)</div><div class='ctx'> {</div><div class='del'>-        vec-&gt;iov_len = xdr_length_round_up (vec-&gt;iov_len, bufsize);</div><div class='del'>-        return 0;</div><div class='add'>+    vec-&gt;iov_len = xdr_length_round_up(vec-&gt;iov_len, bufsize);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-xdr_vector_round_up (struct iovec *vec, int vcount, uint32_t count)</div><div class='add'>+xdr_vector_round_up(struct iovec *vec, int vcount, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-        uint32_t round_count = 0;</div><div class='add'>+    uint32_t round_count = 0;</div><div class='ctx'> </div><div class='del'>-        round_count = xdr_length_round_up (count, 1048576);</div><div class='del'>-        round_count -= count;</div><div class='del'>-        if (round_count == 0 || vcount &lt;= 0)</div><div class='del'>-                return;</div><div class='add'>+    round_count = xdr_length_round_up(count, 1048576);</div><div class='add'>+    round_count -= count;</div><div class='add'>+    if (round_count == 0 || vcount &lt;= 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        vec[vcount-1].iov_len += round_count;</div><div class='add'>+    vec[vcount - 1].iov_len += round_count;</div><div class='ctx'> }</div><div class='head'>diff --git a/rpc/xdr/src/xdr-nfs3.c b/rpc/xdr/src/xdr-nfs3.c<br/>index 01ccb236993..aca9a299b0e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/rpc/xdr/src/xdr-nfs3.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>rpc/xdr/src/xdr-nfs3.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/rpc/xdr/src/xdr-nfs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>rpc/xdr/src/xdr-nfs3.c</a></div><div class='hunk'>@@ -27,1877 +27,1881 @@</div><div class='ctx'> #include "xdr-common.h"</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_uint64 (XDR *xdrs, uint64 *objp)</div><div class='add'>+xdr_uint64(XDR *xdrs, uint64 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint64_t (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint64_t(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_int64 (XDR *xdrs, int64 *objp)</div><div class='add'>+xdr_int64(XDR *xdrs, int64 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_int64_t (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_int64_t(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_uint32 (XDR *xdrs, uint32 *objp)</div><div class='add'>+xdr_uint32(XDR *xdrs, uint32 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32_t (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32_t(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_int32 (XDR *xdrs, int32 *objp)</div><div class='add'>+xdr_int32(XDR *xdrs, int32 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_int32_t (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_int32_t(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_filename3 (XDR *xdrs, filename3 *objp)</div><div class='add'>+xdr_filename3(XDR *xdrs, filename3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_string (xdrs, objp, ~0))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_string(xdrs, objp, ~0))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_nfspath3 (XDR *xdrs, nfspath3 *objp)</div><div class='add'>+xdr_nfspath3(XDR *xdrs, nfspath3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_string (xdrs, objp, ~0))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_string(xdrs, objp, ~0))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fileid3 (XDR *xdrs, fileid3 *objp)</div><div class='add'>+xdr_fileid3(XDR *xdrs, fileid3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint64 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint64(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_cookie3 (XDR *xdrs, cookie3 *objp)</div><div class='add'>+xdr_cookie3(XDR *xdrs, cookie3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint64 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint64(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_cookieverf3 (XDR *xdrs, cookieverf3 objp)</div><div class='add'>+xdr_cookieverf3(XDR *xdrs, cookieverf3 objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_opaque (xdrs, objp, NFS3_COOKIEVERFSIZE))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_opaque(xdrs, objp, NFS3_COOKIEVERFSIZE))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_createverf3 (XDR *xdrs, createverf3 objp)</div><div class='add'>+xdr_createverf3(XDR *xdrs, createverf3 objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_opaque (xdrs, objp, NFS3_CREATEVERFSIZE))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_opaque(xdrs, objp, NFS3_CREATEVERFSIZE))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_writeverf3 (XDR *xdrs, writeverf3 objp)</div><div class='add'>+xdr_writeverf3(XDR *xdrs, writeverf3 objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_opaque (xdrs, objp, NFS3_WRITEVERFSIZE))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_opaque(xdrs, objp, NFS3_WRITEVERFSIZE))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_uid3 (XDR *xdrs, uid3 *objp)</div><div class='add'>+xdr_uid3(XDR *xdrs, uid3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_gid3 (XDR *xdrs, gid3 *objp)</div><div class='add'>+xdr_gid3(XDR *xdrs, gid3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_size3 (XDR *xdrs, size3 *objp)</div><div class='add'>+xdr_size3(XDR *xdrs, size3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint64 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint64(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_offset3 (XDR *xdrs, offset3 *objp)</div><div class='add'>+xdr_offset3(XDR *xdrs, offset3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint64 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint64(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mode3 (XDR *xdrs, mode3 *objp)</div><div class='add'>+xdr_mode3(XDR *xdrs, mode3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_count3 (XDR *xdrs, count3 *objp)</div><div class='add'>+xdr_count3(XDR *xdrs, count3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32 (xdrs, objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32(xdrs, objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_nfsstat3 (XDR *xdrs, nfsstat3 *objp)</div><div class='add'>+xdr_nfsstat3(XDR *xdrs, nfsstat3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_enum (xdrs, (enum_t *) objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_enum(xdrs, (enum_t *)objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_ftype3 (XDR *xdrs, ftype3 *objp)</div><div class='add'>+xdr_ftype3(XDR *xdrs, ftype3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_enum (xdrs, (enum_t *) objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_enum(xdrs, (enum_t *)objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_specdata3 (XDR *xdrs, specdata3 *objp)</div><div class='add'>+xdr_specdata3(XDR *xdrs, specdata3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;specdata1))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;specdata2))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;specdata1))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;specdata2))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_nfs_fh3 (XDR *xdrs, nfs_fh3 *objp)</div><div class='add'>+xdr_nfs_fh3(XDR *xdrs, nfs_fh3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bytes (xdrs, (char **)&amp;objp-&gt;data.data_val, (u_int *) &amp;objp-&gt;data.data_len, NFS3_FHSIZE))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bytes(xdrs, (char **)&amp;objp-&gt;data.data_val,</div><div class='add'>+                   (u_int *)&amp;objp-&gt;data.data_len, NFS3_FHSIZE))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_nfstime3 (XDR *xdrs, nfstime3 *objp)</div><div class='add'>+xdr_nfstime3(XDR *xdrs, nfstime3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;seconds))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;nseconds))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;seconds))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;nseconds))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fattr3 (XDR *xdrs, fattr3 *objp)</div><div class='add'>+xdr_fattr3(XDR *xdrs, fattr3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_ftype3 (xdrs, &amp;objp-&gt;type))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_mode3 (xdrs, &amp;objp-&gt;mode))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;nlink))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uid3 (xdrs, &amp;objp-&gt;uid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_gid3 (xdrs, &amp;objp-&gt;gid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;size))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;used))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_specdata3 (xdrs, &amp;objp-&gt;rdev))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint64 (xdrs, &amp;objp-&gt;fsid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_fileid3 (xdrs, &amp;objp-&gt;fileid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;atime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;mtime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;ctime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_ftype3(xdrs, &amp;objp-&gt;type))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_mode3(xdrs, &amp;objp-&gt;mode))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;nlink))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uid3(xdrs, &amp;objp-&gt;uid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_gid3(xdrs, &amp;objp-&gt;gid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;size))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;used))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_specdata3(xdrs, &amp;objp-&gt;rdev))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint64(xdrs, &amp;objp-&gt;fsid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_fileid3(xdrs, &amp;objp-&gt;fileid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfstime3(xdrs, &amp;objp-&gt;atime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfstime3(xdrs, &amp;objp-&gt;mtime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfstime3(xdrs, &amp;objp-&gt;ctime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_post_op_attr (XDR *xdrs, post_op_attr *objp)</div><div class='add'>+xdr_post_op_attr(XDR *xdrs, post_op_attr *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;attributes_follow))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;attributes_follow) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_fattr3 (xdrs, &amp;objp-&gt;post_op_attr_u.attributes))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	case FALSE:</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		return FALSE;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;attributes_follow))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;attributes_follow) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_fattr3(xdrs, &amp;objp-&gt;post_op_attr_u.attributes))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        case FALSE:</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            return FALSE;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_wcc_attr (XDR *xdrs, wcc_attr *objp)</div><div class='add'>+xdr_wcc_attr(XDR *xdrs, wcc_attr *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;size))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;mtime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;ctime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;size))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfstime3(xdrs, &amp;objp-&gt;mtime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfstime3(xdrs, &amp;objp-&gt;ctime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_pre_op_attr (XDR *xdrs, pre_op_attr *objp)</div><div class='add'>+xdr_pre_op_attr(XDR *xdrs, pre_op_attr *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;attributes_follow))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;attributes_follow) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_wcc_attr (xdrs, &amp;objp-&gt;pre_op_attr_u.attributes))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	case FALSE:</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		return FALSE;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;attributes_follow))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;attributes_follow) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_wcc_attr(xdrs, &amp;objp-&gt;pre_op_attr_u.attributes))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        case FALSE:</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            return FALSE;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_wcc_data (XDR *xdrs, wcc_data *objp)</div><div class='add'>+xdr_wcc_data(XDR *xdrs, wcc_data *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_pre_op_attr (xdrs, &amp;objp-&gt;before))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;after))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_pre_op_attr(xdrs, &amp;objp-&gt;before))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;after))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_post_op_fh3 (XDR *xdrs, post_op_fh3 *objp)</div><div class='del'>-{</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;handle_follows))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;handle_follows) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;post_op_fh3_u.handle))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	case FALSE:</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		return FALSE;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-bool_t</div><div class='del'>-xdr_time_how (XDR *xdrs, time_how *objp)</div><div class='del'>-{</div><div class='del'>-	 if (!xdr_enum (xdrs, (enum_t *) objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+xdr_post_op_fh3(XDR *xdrs, post_op_fh3 *objp)</div><div class='add'>+{</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;handle_follows))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;handle_follows) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;post_op_fh3_u.handle))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        case FALSE:</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            return FALSE;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+bool_t</div><div class='add'>+xdr_time_how(XDR *xdrs, time_how *objp)</div><div class='add'>+{</div><div class='add'>+    if (!xdr_enum(xdrs, (enum_t *)objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_set_mode3 (XDR *xdrs, set_mode3 *objp)</div><div class='add'>+xdr_set_mode3(XDR *xdrs, set_mode3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;set_it))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;set_it) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_mode3 (xdrs, &amp;objp-&gt;set_mode3_u.mode))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;set_it))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;set_it) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_mode3(xdrs, &amp;objp-&gt;set_mode3_u.mode))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_set_uid3 (XDR *xdrs, set_uid3 *objp)</div><div class='add'>+xdr_set_uid3(XDR *xdrs, set_uid3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;set_it))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;set_it) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_uid3 (xdrs, &amp;objp-&gt;set_uid3_u.uid))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;set_it))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;set_it) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_uid3(xdrs, &amp;objp-&gt;set_uid3_u.uid))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_set_gid3 (XDR *xdrs, set_gid3 *objp)</div><div class='add'>+xdr_set_gid3(XDR *xdrs, set_gid3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;set_it))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;set_it) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_gid3 (xdrs, &amp;objp-&gt;set_gid3_u.gid))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;set_it))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;set_it) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_gid3(xdrs, &amp;objp-&gt;set_gid3_u.gid))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_set_size3 (XDR *xdrs, set_size3 *objp)</div><div class='add'>+xdr_set_size3(XDR *xdrs, set_size3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;set_it))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;set_it) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_size3 (xdrs, &amp;objp-&gt;set_size3_u.size))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;set_it))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;set_it) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_size3(xdrs, &amp;objp-&gt;set_size3_u.size))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_set_atime (XDR *xdrs, set_atime *objp)</div><div class='add'>+xdr_set_atime(XDR *xdrs, set_atime *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_time_how (xdrs, &amp;objp-&gt;set_it))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;set_it) {</div><div class='del'>-	case SET_TO_CLIENT_TIME:</div><div class='del'>-		 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;set_atime_u.atime))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_time_how(xdrs, &amp;objp-&gt;set_it))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;set_it) {</div><div class='add'>+        case SET_TO_CLIENT_TIME:</div><div class='add'>+            if (!xdr_nfstime3(xdrs, &amp;objp-&gt;set_atime_u.atime))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_set_mtime (XDR *xdrs, set_mtime *objp)</div><div class='add'>+xdr_set_mtime(XDR *xdrs, set_mtime *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_time_how (xdrs, &amp;objp-&gt;set_it))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;set_it) {</div><div class='del'>-	case SET_TO_CLIENT_TIME:</div><div class='del'>-		 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;set_mtime_u.mtime))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_time_how(xdrs, &amp;objp-&gt;set_it))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;set_it) {</div><div class='add'>+        case SET_TO_CLIENT_TIME:</div><div class='add'>+            if (!xdr_nfstime3(xdrs, &amp;objp-&gt;set_mtime_u.mtime))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_sattr3 (XDR *xdrs, sattr3 *objp)</div><div class='add'>+xdr_sattr3(XDR *xdrs, sattr3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_set_mode3 (xdrs, &amp;objp-&gt;mode))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_set_uid3 (xdrs, &amp;objp-&gt;uid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_set_gid3 (xdrs, &amp;objp-&gt;gid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_set_size3 (xdrs, &amp;objp-&gt;size))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_set_atime (xdrs, &amp;objp-&gt;atime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_set_mtime (xdrs, &amp;objp-&gt;mtime))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_set_mode3(xdrs, &amp;objp-&gt;mode))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_set_uid3(xdrs, &amp;objp-&gt;uid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_set_gid3(xdrs, &amp;objp-&gt;gid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_set_size3(xdrs, &amp;objp-&gt;size))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_set_atime(xdrs, &amp;objp-&gt;atime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_set_mtime(xdrs, &amp;objp-&gt;mtime))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_diropargs3 (XDR *xdrs, diropargs3 *objp)</div><div class='add'>+xdr_diropargs3(XDR *xdrs, diropargs3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;dir))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_filename3 (xdrs, &amp;objp-&gt;name))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;dir))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_filename3(xdrs, &amp;objp-&gt;name))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_getattr3args (XDR *xdrs, getattr3args *objp)</div><div class='add'>+xdr_getattr3args(XDR *xdrs, getattr3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_getattr3resok (XDR *xdrs, getattr3resok *objp)</div><div class='add'>+xdr_getattr3resok(XDR *xdrs, getattr3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_fattr3 (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_fattr3(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_getattr3res (XDR *xdrs, getattr3res *objp)</div><div class='add'>+xdr_getattr3res(XDR *xdrs, getattr3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_getattr3resok (xdrs, &amp;objp-&gt;getattr3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_getattr3resok(xdrs, &amp;objp-&gt;getattr3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_sattrguard3 (XDR *xdrs, sattrguard3 *objp)</div><div class='add'>+xdr_sattrguard3(XDR *xdrs, sattrguard3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;check))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;check) {</div><div class='del'>-	case TRUE:</div><div class='del'>-		 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;sattrguard3_u.obj_ctime))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	case FALSE:</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		return FALSE;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;check))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;check) {</div><div class='add'>+        case TRUE:</div><div class='add'>+            if (!xdr_nfstime3(xdrs, &amp;objp-&gt;sattrguard3_u.obj_ctime))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        case FALSE:</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            return FALSE;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_setattr3args (XDR *xdrs, setattr3args *objp)</div><div class='add'>+xdr_setattr3args(XDR *xdrs, setattr3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_sattr3 (xdrs, &amp;objp-&gt;new_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_sattrguard3 (xdrs, &amp;objp-&gt;guard))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_sattr3(xdrs, &amp;objp-&gt;new_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_sattrguard3(xdrs, &amp;objp-&gt;guard))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_setattr3resok (XDR *xdrs, setattr3resok *objp)</div><div class='add'>+xdr_setattr3resok(XDR *xdrs, setattr3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;obj_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;obj_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_setattr3resfail (XDR *xdrs, setattr3resfail *objp)</div><div class='add'>+xdr_setattr3resfail(XDR *xdrs, setattr3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;obj_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;obj_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_setattr3res (XDR *xdrs, setattr3res *objp)</div><div class='add'>+xdr_setattr3res(XDR *xdrs, setattr3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_setattr3resok (xdrs, &amp;objp-&gt;setattr3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_setattr3resfail (xdrs, &amp;objp-&gt;setattr3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_setattr3resok(xdrs, &amp;objp-&gt;setattr3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_setattr3resfail(xdrs, &amp;objp-&gt;setattr3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_lookup3args (XDR *xdrs, lookup3args *objp)</div><div class='add'>+xdr_lookup3args(XDR *xdrs, lookup3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;what))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;what))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_lookup3resok (XDR *xdrs, lookup3resok *objp)</div><div class='add'>+xdr_lookup3resok(XDR *xdrs, lookup3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;dir_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;dir_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_lookup3resfail (XDR *xdrs, lookup3resfail *objp)</div><div class='add'>+xdr_lookup3resfail(XDR *xdrs, lookup3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;dir_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;dir_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_lookup3res (XDR *xdrs, lookup3res *objp)</div><div class='add'>+xdr_lookup3res(XDR *xdrs, lookup3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_lookup3resok (xdrs, &amp;objp-&gt;lookup3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_lookup3resfail (xdrs, &amp;objp-&gt;lookup3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_lookup3resok(xdrs, &amp;objp-&gt;lookup3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_lookup3resfail(xdrs, &amp;objp-&gt;lookup3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_access3args (XDR *xdrs, access3args *objp)</div><div class='add'>+xdr_access3args(XDR *xdrs, access3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;access))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;access))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_access3resok (XDR *xdrs, access3resok *objp)</div><div class='add'>+xdr_access3resok(XDR *xdrs, access3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;access))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;access))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_access3resfail (XDR *xdrs, access3resfail *objp)</div><div class='add'>+xdr_access3resfail(XDR *xdrs, access3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_access3res (XDR *xdrs, access3res *objp)</div><div class='add'>+xdr_access3res(XDR *xdrs, access3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_access3resok (xdrs, &amp;objp-&gt;access3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_access3resfail (xdrs, &amp;objp-&gt;access3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_access3resok(xdrs, &amp;objp-&gt;access3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_access3resfail(xdrs, &amp;objp-&gt;access3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readlink3args (XDR *xdrs, readlink3args *objp)</div><div class='add'>+xdr_readlink3args(XDR *xdrs, readlink3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;symlink))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;symlink))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readlink3resok (XDR *xdrs, readlink3resok *objp)</div><div class='add'>+xdr_readlink3resok(XDR *xdrs, readlink3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;symlink_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfspath3 (xdrs, &amp;objp-&gt;data))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;symlink_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfspath3(xdrs, &amp;objp-&gt;data))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readlink3resfail (XDR *xdrs, readlink3resfail *objp)</div><div class='add'>+xdr_readlink3resfail(XDR *xdrs, readlink3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;symlink_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;symlink_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readlink3res (XDR *xdrs, readlink3res *objp)</div><div class='add'>+xdr_readlink3res(XDR *xdrs, readlink3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_readlink3resok (xdrs, &amp;objp-&gt;readlink3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_readlink3resfail (xdrs, &amp;objp-&gt;readlink3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_readlink3resok(xdrs, &amp;objp-&gt;readlink3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_readlink3resfail(xdrs, &amp;objp-&gt;readlink3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_read3args (XDR *xdrs, read3args *objp)</div><div class='add'>+xdr_read3args(XDR *xdrs, read3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;file))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_offset3 (xdrs, &amp;objp-&gt;offset))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;file))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_offset3(xdrs, &amp;objp-&gt;offset))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_read3resok_nocopy (XDR *xdrs, read3resok *objp)</div><div class='add'>+xdr_read3resok_nocopy(XDR *xdrs, read3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;file_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;eof))</div><div class='del'>-		 return FALSE;</div><div class='del'>-         if (!xdr_u_int (xdrs, (u_int *) &amp;objp-&gt;data.data_len))</div><div class='del'>-                 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;file_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;eof))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_u_int(xdrs, (u_int *)&amp;objp-&gt;data.data_len))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> bool_t</div><div class='del'>-xdr_read3resok (XDR *xdrs, read3resok *objp)</div><div class='add'>+xdr_read3resok(XDR *xdrs, read3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;file_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;eof))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bytes (xdrs, (char **)&amp;objp-&gt;data.data_val, (u_int *) &amp;objp-&gt;data.data_len, ~0))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;file_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;eof))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bytes(xdrs, (char **)&amp;objp-&gt;data.data_val,</div><div class='add'>+                   (u_int *)&amp;objp-&gt;data.data_len, ~0))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_read3resfail (XDR *xdrs, read3resfail *objp)</div><div class='add'>+xdr_read3resfail(XDR *xdrs, read3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;file_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;file_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> bool_t</div><div class='del'>-xdr_read3res_nocopy (XDR *xdrs, read3res *objp)</div><div class='add'>+xdr_read3res_nocopy(XDR *xdrs, read3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_read3resok_nocopy (xdrs, &amp;objp-&gt;read3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_read3resfail (xdrs, &amp;objp-&gt;read3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_read3resok_nocopy(xdrs, &amp;objp-&gt;read3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_read3resfail(xdrs, &amp;objp-&gt;read3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> bool_t</div><div class='del'>-xdr_read3res (XDR *xdrs, read3res *objp)</div><div class='add'>+xdr_read3res(XDR *xdrs, read3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_read3resok (xdrs, &amp;objp-&gt;read3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_read3resfail (xdrs, &amp;objp-&gt;read3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_read3resok(xdrs, &amp;objp-&gt;read3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_read3resfail(xdrs, &amp;objp-&gt;read3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_stable_how (XDR *xdrs, stable_how *objp)</div><div class='add'>+xdr_stable_how(XDR *xdrs, stable_how *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_enum (xdrs, (enum_t *) objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_enum(xdrs, (enum_t *)objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_write3args (XDR *xdrs, write3args *objp)</div><div class='add'>+xdr_write3args(XDR *xdrs, write3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;file))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_offset3 (xdrs, &amp;objp-&gt;offset))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_stable_how (xdrs, &amp;objp-&gt;stable))</div><div class='del'>-		 return FALSE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;file))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_offset3(xdrs, &amp;objp-&gt;offset))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_stable_how(xdrs, &amp;objp-&gt;stable))</div><div class='add'>+        return FALSE;</div><div class='add'>+</div><div class='add'>+    /* Added specifically to avoid copies from the xdr buffer into</div><div class='add'>+     * the write3args structure, which will also require an already</div><div class='add'>+     * allocated buffer. That is not optimal.</div><div class='add'>+     */</div><div class='add'>+    if (!xdr_u_int(xdrs, (u_int *)&amp;objp-&gt;data.data_len))</div><div class='add'>+        return FALSE;</div><div class='ctx'> </div><div class='del'>-         /* Added specifically to avoid copies from the xdr buffer into</div><div class='del'>-          * the write3args structure, which will also require an already</div><div class='del'>-          * allocated buffer. That is not optimal.</div><div class='del'>-          */</div><div class='del'>-         if (!xdr_u_int (xdrs, (u_int *) &amp;objp-&gt;data.data_len))</div><div class='del'>-                 return FALSE;</div><div class='add'>+    /* The remaining bytes in the xdr buffer are the bytes that need to be</div><div class='add'>+     * written. See how these bytes are extracted in the xdr_to_write3args</div><div class='add'>+     * code path. Be careful, while using the write3args structure, since</div><div class='add'>+     * only the data.data_len has been filled. The actual data is</div><div class='add'>+     * extracted in xdr_to_write3args path.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-         /* The remaining bytes in the xdr buffer are the bytes that need to be</div><div class='del'>-          * written. See how these bytes are extracted in the xdr_to_write3args</div><div class='del'>-          * code path. Be careful, while using the write3args structure, since</div><div class='del'>-          * only the data.data_len has been filled. The actual data is</div><div class='del'>-          * extracted in xdr_to_write3args path.</div><div class='del'>-          */</div><div class='add'>+    /*	 if (!xdr_bytes (xdrs, (char **)&amp;objp-&gt;data.data_val, (u_int *)</div><div class='add'>+       &amp;objp-&gt;data.data_len, ~0)) return FALSE;</div><div class='add'>+            */</div><div class='add'>+    return TRUE;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-         /*	 if (!xdr_bytes (xdrs, (char **)&amp;objp-&gt;data.data_val, (u_int *) &amp;objp-&gt;data.data_len, ~0))</div><div class='del'>-		 return FALSE;</div><div class='del'>-                 */</div><div class='del'>-	return TRUE;</div><div class='add'>+bool_t</div><div class='add'>+xdr_write3resok(XDR *xdrs, write3resok *objp)</div><div class='add'>+{</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;file_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_stable_how(xdrs, &amp;objp-&gt;committed))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_writeverf3(xdrs, objp-&gt;verf))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+bool_t</div><div class='add'>+xdr_write3resfail(XDR *xdrs, write3resfail *objp)</div><div class='add'>+{</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;file_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+bool_t</div><div class='add'>+xdr_write3res(XDR *xdrs, write3res *objp)</div><div class='add'>+{</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_write3resok(xdrs, &amp;objp-&gt;write3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_write3resfail(xdrs, &amp;objp-&gt;write3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_write3resok (XDR *xdrs, write3resok *objp)</div><div class='add'>+xdr_createmode3(XDR *xdrs, createmode3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;file_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_stable_how (xdrs, &amp;objp-&gt;committed))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_writeverf3 (xdrs, objp-&gt;verf))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_enum(xdrs, (enum_t *)objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_write3resfail (XDR *xdrs, write3resfail *objp)</div><div class='add'>+xdr_createhow3(XDR *xdrs, createhow3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;file_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_createmode3(xdrs, &amp;objp-&gt;mode))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;mode) {</div><div class='add'>+        case UNCHECKED:</div><div class='add'>+        case GUARDED:</div><div class='add'>+            if (!xdr_sattr3(xdrs, &amp;objp-&gt;createhow3_u.obj_attributes))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        case EXCLUSIVE:</div><div class='add'>+            if (!xdr_createverf3(xdrs, objp-&gt;createhow3_u.verf))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            return FALSE;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_write3res (XDR *xdrs, write3res *objp)</div><div class='add'>+xdr_create3args(XDR *xdrs, create3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_write3resok (xdrs, &amp;objp-&gt;write3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_write3resfail (xdrs, &amp;objp-&gt;write3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;where))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_createhow3(xdrs, &amp;objp-&gt;how))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_createmode3 (XDR *xdrs, createmode3 *objp)</div><div class='add'>+xdr_create3resok(XDR *xdrs, create3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_enum (xdrs, (enum_t *) objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_fh3(xdrs, &amp;objp-&gt;obj))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_createhow3 (XDR *xdrs, createhow3 *objp)</div><div class='add'>+xdr_create3resfail(XDR *xdrs, create3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_createmode3 (xdrs, &amp;objp-&gt;mode))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;mode) {</div><div class='del'>-	case UNCHECKED:</div><div class='del'>-	case GUARDED:</div><div class='del'>-		 if (!xdr_sattr3 (xdrs, &amp;objp-&gt;createhow3_u.obj_attributes))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	case EXCLUSIVE:</div><div class='del'>-		 if (!xdr_createverf3 (xdrs, objp-&gt;createhow3_u.verf))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		return FALSE;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_create3args (XDR *xdrs, create3args *objp)</div><div class='add'>+xdr_create3res(XDR *xdrs, create3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;where))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_createhow3 (xdrs, &amp;objp-&gt;how))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_create3resok(xdrs, &amp;objp-&gt;create3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_create3resfail(xdrs, &amp;objp-&gt;create3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_create3resok (XDR *xdrs, create3resok *objp)</div><div class='add'>+xdr_mkdir3args(XDR *xdrs, mkdir3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_fh3 (xdrs, &amp;objp-&gt;obj))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;where))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_sattr3(xdrs, &amp;objp-&gt;attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_create3resfail (XDR *xdrs, create3resfail *objp)</div><div class='add'>+xdr_mkdir3resok(XDR *xdrs, mkdir3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_fh3(xdrs, &amp;objp-&gt;obj))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_create3res (XDR *xdrs, create3res *objp)</div><div class='add'>+xdr_mkdir3resfail(XDR *xdrs, mkdir3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_create3resok (xdrs, &amp;objp-&gt;create3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_create3resfail (xdrs, &amp;objp-&gt;create3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mkdir3args (XDR *xdrs, mkdir3args *objp)</div><div class='add'>+xdr_mkdir3res(XDR *xdrs, mkdir3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;where))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_sattr3 (xdrs, &amp;objp-&gt;attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_mkdir3resok(xdrs, &amp;objp-&gt;mkdir3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_mkdir3resfail(xdrs, &amp;objp-&gt;mkdir3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mkdir3resok (XDR *xdrs, mkdir3resok *objp)</div><div class='add'>+xdr_symlinkdata3(XDR *xdrs, symlinkdata3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_fh3 (xdrs, &amp;objp-&gt;obj))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_sattr3(xdrs, &amp;objp-&gt;symlink_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfspath3(xdrs, &amp;objp-&gt;symlink_data))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mkdir3resfail (XDR *xdrs, mkdir3resfail *objp)</div><div class='add'>+xdr_symlink3args(XDR *xdrs, symlink3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;where))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_symlinkdata3(xdrs, &amp;objp-&gt;symlink))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mkdir3res (XDR *xdrs, mkdir3res *objp)</div><div class='add'>+xdr_symlink3resok(XDR *xdrs, symlink3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_mkdir3resok (xdrs, &amp;objp-&gt;mkdir3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_mkdir3resfail (xdrs, &amp;objp-&gt;mkdir3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_fh3(xdrs, &amp;objp-&gt;obj))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_symlinkdata3 (XDR *xdrs, symlinkdata3 *objp)</div><div class='add'>+xdr_symlink3resfail(XDR *xdrs, symlink3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_sattr3 (xdrs, &amp;objp-&gt;symlink_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfspath3 (xdrs, &amp;objp-&gt;symlink_data))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_symlink3args (XDR *xdrs, symlink3args *objp)</div><div class='add'>+xdr_symlink3res(XDR *xdrs, symlink3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;where))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_symlinkdata3 (xdrs, &amp;objp-&gt;symlink))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_symlink3resok(xdrs, &amp;objp-&gt;symlink3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_symlink3resfail(xdrs, &amp;objp-&gt;symlink3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_symlink3resok (XDR *xdrs, symlink3resok *objp)</div><div class='add'>+xdr_devicedata3(XDR *xdrs, devicedata3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_fh3 (xdrs, &amp;objp-&gt;obj))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_sattr3(xdrs, &amp;objp-&gt;dev_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_specdata3(xdrs, &amp;objp-&gt;spec))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_symlink3resfail (XDR *xdrs, symlink3resfail *objp)</div><div class='add'>+xdr_mknoddata3(XDR *xdrs, mknoddata3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_ftype3(xdrs, &amp;objp-&gt;type))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;type) {</div><div class='add'>+        case NF3CHR:</div><div class='add'>+        case NF3BLK:</div><div class='add'>+            if (!xdr_devicedata3(xdrs, &amp;objp-&gt;mknoddata3_u.device))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        case NF3SOCK:</div><div class='add'>+        case NF3FIFO:</div><div class='add'>+            if (!xdr_sattr3(xdrs, &amp;objp-&gt;mknoddata3_u.pipe_attributes))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_symlink3res (XDR *xdrs, symlink3res *objp)</div><div class='add'>+xdr_mknod3args(XDR *xdrs, mknod3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_symlink3resok (xdrs, &amp;objp-&gt;symlink3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_symlink3resfail (xdrs, &amp;objp-&gt;symlink3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;where))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_mknoddata3(xdrs, &amp;objp-&gt;what))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_devicedata3 (XDR *xdrs, devicedata3 *objp)</div><div class='add'>+xdr_mknod3resok(XDR *xdrs, mknod3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_sattr3 (xdrs, &amp;objp-&gt;dev_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_specdata3 (xdrs, &amp;objp-&gt;spec))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_fh3(xdrs, &amp;objp-&gt;obj))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mknoddata3 (XDR *xdrs, mknoddata3 *objp)</div><div class='add'>+xdr_mknod3resfail(XDR *xdrs, mknod3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_ftype3 (xdrs, &amp;objp-&gt;type))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;type) {</div><div class='del'>-	case NF3CHR:</div><div class='del'>-	case NF3BLK:</div><div class='del'>-		 if (!xdr_devicedata3 (xdrs, &amp;objp-&gt;mknoddata3_u.device))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	case NF3SOCK:</div><div class='del'>-	case NF3FIFO:</div><div class='del'>-		 if (!xdr_sattr3 (xdrs, &amp;objp-&gt;mknoddata3_u.pipe_attributes))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mknod3args (XDR *xdrs, mknod3args *objp)</div><div class='add'>+xdr_mknod3res(XDR *xdrs, mknod3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;where))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_mknoddata3 (xdrs, &amp;objp-&gt;what))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_mknod3resok(xdrs, &amp;objp-&gt;mknod3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_mknod3resfail(xdrs, &amp;objp-&gt;mknod3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mknod3resok (XDR *xdrs, mknod3resok *objp)</div><div class='add'>+xdr_remove3args(XDR *xdrs, remove3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_fh3 (xdrs, &amp;objp-&gt;obj))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mknod3resfail (XDR *xdrs, mknod3resfail *objp)</div><div class='add'>+xdr_remove3resok(XDR *xdrs, remove3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mknod3res (XDR *xdrs, mknod3res *objp)</div><div class='add'>+xdr_remove3resfail(XDR *xdrs, remove3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_mknod3resok (xdrs, &amp;objp-&gt;mknod3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_mknod3resfail (xdrs, &amp;objp-&gt;mknod3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_remove3args (XDR *xdrs, remove3args *objp)</div><div class='add'>+xdr_remove3res(XDR *xdrs, remove3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_remove3resok(xdrs, &amp;objp-&gt;remove3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_remove3resfail(xdrs, &amp;objp-&gt;remove3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_remove3resok (XDR *xdrs, remove3resok *objp)</div><div class='add'>+xdr_rmdir3args(XDR *xdrs, rmdir3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_remove3resfail (XDR *xdrs, remove3resfail *objp)</div><div class='add'>+xdr_rmdir3resok(XDR *xdrs, rmdir3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_remove3res (XDR *xdrs, remove3res *objp)</div><div class='add'>+xdr_rmdir3resfail(XDR *xdrs, rmdir3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_remove3resok (xdrs, &amp;objp-&gt;remove3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_remove3resfail (xdrs, &amp;objp-&gt;remove3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;dir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rmdir3args (XDR *xdrs, rmdir3args *objp)</div><div class='add'>+xdr_rmdir3res(XDR *xdrs, rmdir3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_rmdir3resok(xdrs, &amp;objp-&gt;rmdir3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_rmdir3resfail(xdrs, &amp;objp-&gt;rmdir3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rmdir3resok (XDR *xdrs, rmdir3resok *objp)</div><div class='add'>+xdr_rename3args(XDR *xdrs, rename3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;from))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;to))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rmdir3resfail (XDR *xdrs, rmdir3resfail *objp)</div><div class='add'>+xdr_rename3resok(XDR *xdrs, rename3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;dir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;fromdir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;todir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rmdir3res (XDR *xdrs, rmdir3res *objp)</div><div class='add'>+xdr_rename3resfail(XDR *xdrs, rename3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_rmdir3resok (xdrs, &amp;objp-&gt;rmdir3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_rmdir3resfail (xdrs, &amp;objp-&gt;rmdir3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;fromdir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;todir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rename3args (XDR *xdrs, rename3args *objp)</div><div class='add'>+xdr_rename3res(XDR *xdrs, rename3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;from))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;to))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_rename3resok(xdrs, &amp;objp-&gt;rename3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_rename3resfail(xdrs, &amp;objp-&gt;rename3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rename3resok (XDR *xdrs, rename3resok *objp)</div><div class='add'>+xdr_link3args(XDR *xdrs, link3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;fromdir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;todir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;file))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_diropargs3(xdrs, &amp;objp-&gt;link))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rename3resfail (XDR *xdrs, rename3resfail *objp)</div><div class='add'>+xdr_link3resok(XDR *xdrs, link3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;fromdir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;todir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;file_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;linkdir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_rename3res (XDR *xdrs, rename3res *objp)</div><div class='add'>+xdr_link3resfail(XDR *xdrs, link3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_rename3resok (xdrs, &amp;objp-&gt;rename3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_rename3resfail (xdrs, &amp;objp-&gt;rename3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;file_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;linkdir_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_link3args (XDR *xdrs, link3args *objp)</div><div class='add'>+xdr_link3res(XDR *xdrs, link3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;file))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_diropargs3 (xdrs, &amp;objp-&gt;link))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_link3resok(xdrs, &amp;objp-&gt;link3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_link3resfail(xdrs, &amp;objp-&gt;link3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_link3resok (XDR *xdrs, link3resok *objp)</div><div class='add'>+xdr_readdir3args(XDR *xdrs, readdir3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;file_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;linkdir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;dir))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookie3(xdrs, &amp;objp-&gt;cookie))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookieverf3(xdrs, objp-&gt;cookieverf))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_link3resfail (XDR *xdrs, link3resfail *objp)</div><div class='add'>+xdr_entry3(XDR *xdrs, entry3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;file_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;linkdir_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_fileid3(xdrs, &amp;objp-&gt;fileid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_filename3(xdrs, &amp;objp-&gt;name))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookie3(xdrs, &amp;objp-&gt;cookie))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)&amp;objp-&gt;nextentry, sizeof(entry3),</div><div class='add'>+                     (xdrproc_t)xdr_entry3))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_link3res (XDR *xdrs, link3res *objp)</div><div class='add'>+xdr_dirlist3(XDR *xdrs, dirlist3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_link3resok (xdrs, &amp;objp-&gt;link3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_link3resfail (xdrs, &amp;objp-&gt;link3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)&amp;objp-&gt;entries, sizeof(entry3),</div><div class='add'>+                     (xdrproc_t)xdr_entry3))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;eof))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdir3args (XDR *xdrs, readdir3args *objp)</div><div class='add'>+xdr_readdir3resok(XDR *xdrs, readdir3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;dir))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookie3 (xdrs, &amp;objp-&gt;cookie))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookieverf3 (xdrs, objp-&gt;cookieverf))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;dir_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookieverf3(xdrs, objp-&gt;cookieverf))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_dirlist3(xdrs, &amp;objp-&gt;reply))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_entry3 (XDR *xdrs, entry3 *objp)</div><div class='add'>+xdr_readdir3resfail(XDR *xdrs, readdir3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_fileid3 (xdrs, &amp;objp-&gt;fileid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_filename3 (xdrs, &amp;objp-&gt;name))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookie3 (xdrs, &amp;objp-&gt;cookie))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)&amp;objp-&gt;nextentry, sizeof (entry3), (xdrproc_t) xdr_entry3))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;dir_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_dirlist3 (XDR *xdrs, dirlist3 *objp)</div><div class='add'>+xdr_readdir3res(XDR *xdrs, readdir3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)&amp;objp-&gt;entries, sizeof (entry3), (xdrproc_t) xdr_entry3))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;eof))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_readdir3resok(xdrs, &amp;objp-&gt;readdir3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_readdir3resfail(xdrs, &amp;objp-&gt;readdir3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdir3resok (XDR *xdrs, readdir3resok *objp)</div><div class='add'>+xdr_readdirp3args(XDR *xdrs, readdirp3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;dir_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookieverf3 (xdrs, objp-&gt;cookieverf))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_dirlist3 (xdrs, &amp;objp-&gt;reply))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;dir))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookie3(xdrs, &amp;objp-&gt;cookie))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookieverf3(xdrs, objp-&gt;cookieverf))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;dircount))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;maxcount))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdir3resfail (XDR *xdrs, readdir3resfail *objp)</div><div class='add'>+xdr_entryp3(XDR *xdrs, entryp3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;dir_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_fileid3(xdrs, &amp;objp-&gt;fileid))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_filename3(xdrs, &amp;objp-&gt;name))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookie3(xdrs, &amp;objp-&gt;cookie))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;name_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_post_op_fh3(xdrs, &amp;objp-&gt;name_handle))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)&amp;objp-&gt;nextentry, sizeof(entryp3),</div><div class='add'>+                     (xdrproc_t)xdr_entryp3))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdir3res (XDR *xdrs, readdir3res *objp)</div><div class='add'>+xdr_dirlistp3(XDR *xdrs, dirlistp3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_readdir3resok (xdrs, &amp;objp-&gt;readdir3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_readdir3resfail (xdrs, &amp;objp-&gt;readdir3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)&amp;objp-&gt;entries, sizeof(entryp3),</div><div class='add'>+                     (xdrproc_t)xdr_entryp3))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;eof))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdirp3args (XDR *xdrs, readdirp3args *objp)</div><div class='add'>+xdr_readdirp3resok(XDR *xdrs, readdirp3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;dir))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookie3 (xdrs, &amp;objp-&gt;cookie))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookieverf3 (xdrs, objp-&gt;cookieverf))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;dircount))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;maxcount))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;dir_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_cookieverf3(xdrs, objp-&gt;cookieverf))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_dirlistp3(xdrs, &amp;objp-&gt;reply))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_entryp3 (XDR *xdrs, entryp3 *objp)</div><div class='add'>+xdr_readdirp3resfail(XDR *xdrs, readdirp3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_fileid3 (xdrs, &amp;objp-&gt;fileid))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_filename3 (xdrs, &amp;objp-&gt;name))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookie3 (xdrs, &amp;objp-&gt;cookie))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;name_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_post_op_fh3 (xdrs, &amp;objp-&gt;name_handle))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)&amp;objp-&gt;nextentry, sizeof (entryp3), (xdrproc_t) xdr_entryp3))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;dir_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_dirlistp3 (XDR *xdrs, dirlistp3 *objp)</div><div class='add'>+xdr_readdirp3res(XDR *xdrs, readdirp3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)&amp;objp-&gt;entries, sizeof (entryp3), (xdrproc_t) xdr_entryp3))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;eof))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_readdirp3resok(xdrs, &amp;objp-&gt;readdirp3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_readdirp3resfail(xdrs, &amp;objp-&gt;readdirp3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdirp3resok (XDR *xdrs, readdirp3resok *objp)</div><div class='add'>+xdr_fsstat3args(XDR *xdrs, fsstat3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;dir_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_cookieverf3 (xdrs, objp-&gt;cookieverf))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_dirlistp3 (xdrs, &amp;objp-&gt;reply))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;fsroot))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdirp3resfail (XDR *xdrs, readdirp3resfail *objp)</div><div class='add'>+xdr_fsstat3resok(XDR *xdrs, fsstat3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;dir_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;tbytes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;fbytes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;abytes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;tfiles))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;ffiles))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;afiles))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;invarsec))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_readdirp3res (XDR *xdrs, readdirp3res *objp)</div><div class='add'>+xdr_fsstat3resfail(XDR *xdrs, fsstat3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_readdirp3resok (xdrs, &amp;objp-&gt;readdirp3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_readdirp3resfail (xdrs, &amp;objp-&gt;readdirp3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fsstat3args (XDR *xdrs, fsstat3args *objp)</div><div class='add'>+xdr_fsstat3res(XDR *xdrs, fsstat3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;fsroot))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_fsstat3resok(xdrs, &amp;objp-&gt;fsstat3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_fsstat3resfail(xdrs, &amp;objp-&gt;fsstat3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fsstat3resok (XDR *xdrs, fsstat3resok *objp)</div><div class='add'>+xdr_fsinfo3args(XDR *xdrs, fsinfo3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;tbytes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;fbytes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;abytes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;tfiles))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;ffiles))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;afiles))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;invarsec))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;fsroot))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fsstat3resfail (XDR *xdrs, fsstat3resfail *objp)</div><div class='add'>+xdr_fsinfo3resok(XDR *xdrs, fsinfo3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;rtmax))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;rtpref))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;rtmult))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;wtmax))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;wtpref))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;wtmult))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;dtpref))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_size3(xdrs, &amp;objp-&gt;maxfilesize))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_nfstime3(xdrs, &amp;objp-&gt;time_delta))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;properties))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fsstat3res (XDR *xdrs, fsstat3res *objp)</div><div class='add'>+xdr_fsinfo3resfail(XDR *xdrs, fsinfo3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_fsstat3resok (xdrs, &amp;objp-&gt;fsstat3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_fsstat3resfail (xdrs, &amp;objp-&gt;fsstat3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fsinfo3args (XDR *xdrs, fsinfo3args *objp)</div><div class='add'>+xdr_fsinfo3res(XDR *xdrs, fsinfo3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;fsroot))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_fsinfo3resok(xdrs, &amp;objp-&gt;fsinfo3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_fsinfo3resfail(xdrs, &amp;objp-&gt;fsinfo3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+bool_t</div><div class='add'>+xdr_pathconf3args(XDR *xdrs, pathconf3args *objp)</div><div class='add'>+{</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;object))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fsinfo3resok (XDR *xdrs, fsinfo3resok *objp)</div><div class='add'>+xdr_pathconf3resok(XDR *xdrs, pathconf3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;rtmax))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;rtpref))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;rtmult))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;wtmax))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;wtpref))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;wtmult))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;dtpref))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_size3 (xdrs, &amp;objp-&gt;maxfilesize))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_nfstime3 (xdrs, &amp;objp-&gt;time_delta))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;properties))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-bool_t</div><div class='del'>-xdr_fsinfo3resfail (XDR *xdrs, fsinfo3resfail *objp)</div><div class='del'>-{</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-bool_t</div><div class='del'>-xdr_fsinfo3res (XDR *xdrs, fsinfo3res *objp)</div><div class='del'>-{</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_fsinfo3resok (xdrs, &amp;objp-&gt;fsinfo3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_fsinfo3resfail (xdrs, &amp;objp-&gt;fsinfo3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-bool_t</div><div class='del'>-xdr_pathconf3args (XDR *xdrs, pathconf3args *objp)</div><div class='del'>-{</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;object))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-bool_t</div><div class='del'>-xdr_pathconf3resok (XDR *xdrs, pathconf3resok *objp)</div><div class='del'>-{</div><div class='del'>-	register int32_t *buf;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	if (xdrs-&gt;x_op == XDR_ENCODE) {</div><div class='del'>-		 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		 if (!xdr_uint32 (xdrs, &amp;objp-&gt;linkmax))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		 if (!xdr_uint32 (xdrs, &amp;objp-&gt;name_max))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT);</div><div class='del'>-		if (buf == NULL) {</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;no_trunc))</div><div class='del'>-				 return FALSE;</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;chown_restricted))</div><div class='del'>-				 return FALSE;</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;case_insensitive))</div><div class='del'>-				 return FALSE;</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;case_preserving))</div><div class='del'>-				 return FALSE;</div><div class='del'>-		} else {</div><div class='del'>-			IXDR_PUT_BOOL(buf, objp-&gt;no_trunc);</div><div class='del'>-			IXDR_PUT_BOOL(buf, objp-&gt;chown_restricted);</div><div class='del'>-			IXDR_PUT_BOOL(buf, objp-&gt;case_insensitive);</div><div class='del'>-			IXDR_PUT_BOOL(buf, objp-&gt;case_preserving);</div><div class='del'>-		}</div><div class='del'>-		return TRUE;</div><div class='del'>-	} else if (xdrs-&gt;x_op == XDR_DECODE) {</div><div class='del'>-		 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		 if (!xdr_uint32 (xdrs, &amp;objp-&gt;linkmax))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		 if (!xdr_uint32 (xdrs, &amp;objp-&gt;name_max))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT);</div><div class='del'>-		if (buf == NULL) {</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;no_trunc))</div><div class='del'>-				 return FALSE;</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;chown_restricted))</div><div class='del'>-				 return FALSE;</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;case_insensitive))</div><div class='del'>-				 return FALSE;</div><div class='del'>-			 if (!xdr_bool (xdrs, &amp;objp-&gt;case_preserving))</div><div class='del'>-				 return FALSE;</div><div class='del'>-		} else {</div><div class='del'>-			objp-&gt;no_trunc = IXDR_GET_BOOL(buf);</div><div class='del'>-			objp-&gt;chown_restricted = IXDR_GET_BOOL(buf);</div><div class='del'>-			objp-&gt;case_insensitive = IXDR_GET_BOOL(buf);</div><div class='del'>-			objp-&gt;case_preserving = IXDR_GET_BOOL(buf);</div><div class='del'>-		}</div><div class='del'>-	 return TRUE;</div><div class='del'>-	}</div><div class='add'>+    register int32_t *buf;</div><div class='add'>+</div><div class='add'>+    if (xdrs-&gt;x_op == XDR_ENCODE) {</div><div class='add'>+        if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+            return FALSE;</div><div class='add'>+        if (!xdr_uint32(xdrs, &amp;objp-&gt;linkmax))</div><div class='add'>+            return FALSE;</div><div class='add'>+        if (!xdr_uint32(xdrs, &amp;objp-&gt;name_max))</div><div class='add'>+            return FALSE;</div><div class='add'>+        buf = XDR_INLINE(xdrs, 4 * BYTES_PER_XDR_UNIT);</div><div class='add'>+        if (buf == NULL) {</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;no_trunc))</div><div class='add'>+                return FALSE;</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;chown_restricted))</div><div class='add'>+                return FALSE;</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;case_insensitive))</div><div class='add'>+                return FALSE;</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;case_preserving))</div><div class='add'>+                return FALSE;</div><div class='add'>+        } else {</div><div class='add'>+            IXDR_PUT_BOOL(buf, objp-&gt;no_trunc);</div><div class='add'>+            IXDR_PUT_BOOL(buf, objp-&gt;chown_restricted);</div><div class='add'>+            IXDR_PUT_BOOL(buf, objp-&gt;case_insensitive);</div><div class='add'>+            IXDR_PUT_BOOL(buf, objp-&gt;case_preserving);</div><div class='add'>+        }</div><div class='add'>+        return TRUE;</div><div class='add'>+    } else if (xdrs-&gt;x_op == XDR_DECODE) {</div><div class='add'>+        if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+            return FALSE;</div><div class='add'>+        if (!xdr_uint32(xdrs, &amp;objp-&gt;linkmax))</div><div class='add'>+            return FALSE;</div><div class='add'>+        if (!xdr_uint32(xdrs, &amp;objp-&gt;name_max))</div><div class='add'>+            return FALSE;</div><div class='add'>+        buf = XDR_INLINE(xdrs, 4 * BYTES_PER_XDR_UNIT);</div><div class='add'>+        if (buf == NULL) {</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;no_trunc))</div><div class='add'>+                return FALSE;</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;chown_restricted))</div><div class='add'>+                return FALSE;</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;case_insensitive))</div><div class='add'>+                return FALSE;</div><div class='add'>+            if (!xdr_bool(xdrs, &amp;objp-&gt;case_preserving))</div><div class='add'>+                return FALSE;</div><div class='add'>+        } else {</div><div class='add'>+            objp-&gt;no_trunc = IXDR_GET_BOOL(buf);</div><div class='add'>+            objp-&gt;chown_restricted = IXDR_GET_BOOL(buf);</div><div class='add'>+            objp-&gt;case_insensitive = IXDR_GET_BOOL(buf);</div><div class='add'>+            objp-&gt;case_preserving = IXDR_GET_BOOL(buf);</div><div class='add'>+        }</div><div class='add'>+        return TRUE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;linkmax))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_uint32 (xdrs, &amp;objp-&gt;name_max))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;no_trunc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;chown_restricted))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;case_insensitive))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_bool (xdrs, &amp;objp-&gt;case_preserving))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;linkmax))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_uint32(xdrs, &amp;objp-&gt;name_max))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;no_trunc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;chown_restricted))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;case_insensitive))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_bool(xdrs, &amp;objp-&gt;case_preserving))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_pathconf3resfail (XDR *xdrs, pathconf3resfail *objp)</div><div class='add'>+xdr_pathconf3resfail(XDR *xdrs, pathconf3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_post_op_attr (xdrs, &amp;objp-&gt;obj_attributes))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_post_op_attr(xdrs, &amp;objp-&gt;obj_attributes))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_pathconf3res (XDR *xdrs, pathconf3res *objp)</div><div class='add'>+xdr_pathconf3res(XDR *xdrs, pathconf3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_pathconf3resok (xdrs, &amp;objp-&gt;pathconf3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_pathconf3resfail (xdrs, &amp;objp-&gt;pathconf3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_pathconf3resok(xdrs, &amp;objp-&gt;pathconf3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_pathconf3resfail(xdrs, &amp;objp-&gt;pathconf3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_commit3args (XDR *xdrs, commit3args *objp)</div><div class='add'>+xdr_commit3args(XDR *xdrs, commit3args *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfs_fh3 (xdrs, &amp;objp-&gt;file))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_offset3 (xdrs, &amp;objp-&gt;offset))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_count3 (xdrs, &amp;objp-&gt;count))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfs_fh3(xdrs, &amp;objp-&gt;file))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_offset3(xdrs, &amp;objp-&gt;offset))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_count3(xdrs, &amp;objp-&gt;count))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_commit3resok (XDR *xdrs, commit3resok *objp)</div><div class='add'>+xdr_commit3resok(XDR *xdrs, commit3resok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;file_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_writeverf3 (xdrs, objp-&gt;verf))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;file_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_writeverf3(xdrs, objp-&gt;verf))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_commit3resfail (XDR *xdrs, commit3resfail *objp)</div><div class='add'>+xdr_commit3resfail(XDR *xdrs, commit3resfail *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_wcc_data (xdrs, &amp;objp-&gt;file_wcc))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_wcc_data(xdrs, &amp;objp-&gt;file_wcc))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_commit3res (XDR *xdrs, commit3res *objp)</div><div class='add'>+xdr_commit3res(XDR *xdrs, commit3res *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_nfsstat3 (xdrs, &amp;objp-&gt;status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;status) {</div><div class='del'>-	case NFS3_OK:</div><div class='del'>-		 if (!xdr_commit3resok (xdrs, &amp;objp-&gt;commit3res_u.resok))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		 if (!xdr_commit3resfail (xdrs, &amp;objp-&gt;commit3res_u.resfail))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_nfsstat3(xdrs, &amp;objp-&gt;status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;status) {</div><div class='add'>+        case NFS3_OK:</div><div class='add'>+            if (!xdr_commit3resok(xdrs, &amp;objp-&gt;commit3res_u.resok))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            if (!xdr_commit3resfail(xdrs, &amp;objp-&gt;commit3res_u.resfail))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_fhandle3 (XDR *xdrs, fhandle3 *objp)</div><div class='add'>+xdr_fhandle3(XDR *xdrs, fhandle3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_bytes (xdrs, (char **)&amp;objp-&gt;fhandle3_val, (u_int *) &amp;objp-&gt;fhandle3_len, FHSIZE3))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_bytes(xdrs, (char **)&amp;objp-&gt;fhandle3_val,</div><div class='add'>+                   (u_int *)&amp;objp-&gt;fhandle3_len, FHSIZE3))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_dirpath (XDR *xdrs, dirpath *objp)</div><div class='add'>+xdr_dirpath(XDR *xdrs, dirpath *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_string (xdrs, objp, MNTPATHLEN))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_string(xdrs, objp, MNTPATHLEN))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_name (XDR *xdrs, name *objp)</div><div class='add'>+xdr_name(XDR *xdrs, name *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_string (xdrs, objp, MNTNAMLEN))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_string(xdrs, objp, MNTNAMLEN))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mountstat3 (XDR *xdrs, mountstat3 *objp)</div><div class='add'>+xdr_mountstat3(XDR *xdrs, mountstat3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_enum (xdrs, (enum_t *) objp))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_enum(xdrs, (enum_t *)objp))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp)</div><div class='add'>+xdr_mountres3_ok(XDR *xdrs, mountres3_ok *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_fhandle3 (xdrs, &amp;objp-&gt;fhandle))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_array (xdrs, (char **)&amp;objp-&gt;auth_flavors.auth_flavors_val, (u_int *) &amp;objp-&gt;auth_flavors.auth_flavors_len, ~0,</div><div class='del'>-		sizeof (int), (xdrproc_t) xdr_int))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_fhandle3(xdrs, &amp;objp-&gt;fhandle))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_array(xdrs, (char **)&amp;objp-&gt;auth_flavors.auth_flavors_val,</div><div class='add'>+                   (u_int *)&amp;objp-&gt;auth_flavors.auth_flavors_len, ~0,</div><div class='add'>+                   sizeof(int), (xdrproc_t)xdr_int))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mountres3 (XDR *xdrs, mountres3 *objp)</div><div class='add'>+xdr_mountres3(XDR *xdrs, mountres3 *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_mountstat3 (xdrs, &amp;objp-&gt;fhs_status))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	switch (objp-&gt;fhs_status) {</div><div class='del'>-	case MNT3_OK:</div><div class='del'>-		 if (!xdr_mountres3_ok (xdrs, &amp;objp-&gt;mountres3_u.mountinfo))</div><div class='del'>-			 return FALSE;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_mountstat3(xdrs, &amp;objp-&gt;fhs_status))</div><div class='add'>+        return FALSE;</div><div class='add'>+    switch (objp-&gt;fhs_status) {</div><div class='add'>+        case MNT3_OK:</div><div class='add'>+            if (!xdr_mountres3_ok(xdrs, &amp;objp-&gt;mountres3_u.mountinfo))</div><div class='add'>+                return FALSE;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mountlist (XDR *xdrs, mountlist *objp)</div><div class='add'>+xdr_mountlist(XDR *xdrs, mountlist *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)objp, sizeof (struct mountbody), (xdrproc_t) xdr_mountbody))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct mountbody),</div><div class='add'>+                     (xdrproc_t)xdr_mountbody))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_mountbody (XDR *xdrs, mountbody *objp)</div><div class='add'>+xdr_mountbody(XDR *xdrs, mountbody *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_name (xdrs, &amp;objp-&gt;ml_hostname))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_dirpath (xdrs, &amp;objp-&gt;ml_directory))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_mountlist (xdrs, &amp;objp-&gt;ml_next))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_name(xdrs, &amp;objp-&gt;ml_hostname))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_dirpath(xdrs, &amp;objp-&gt;ml_directory))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_mountlist(xdrs, &amp;objp-&gt;ml_next))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_groups (XDR *xdrs, groups *objp)</div><div class='add'>+xdr_groups(XDR *xdrs, groups *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)objp, sizeof (struct groupnode), (xdrproc_t) xdr_groupnode))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct groupnode),</div><div class='add'>+                     (xdrproc_t)xdr_groupnode))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_groupnode (XDR *xdrs, groupnode *objp)</div><div class='add'>+xdr_groupnode(XDR *xdrs, groupnode *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_name (xdrs, &amp;objp-&gt;gr_name))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_groups (xdrs, &amp;objp-&gt;gr_next))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_name(xdrs, &amp;objp-&gt;gr_name))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_groups(xdrs, &amp;objp-&gt;gr_next))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_exports (XDR *xdrs, exports *objp)</div><div class='add'>+xdr_exports(XDR *xdrs, exports *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_pointer (xdrs, (char **)objp, sizeof (struct exportnode), (xdrproc_t) xdr_exportnode))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct exportnode),</div><div class='add'>+                     (xdrproc_t)xdr_exportnode))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> bool_t</div><div class='del'>-xdr_exportnode (XDR *xdrs, exportnode *objp)</div><div class='add'>+xdr_exportnode(XDR *xdrs, exportnode *objp)</div><div class='ctx'> {</div><div class='del'>-	 if (!xdr_dirpath (xdrs, &amp;objp-&gt;ex_dir))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_groups (xdrs, &amp;objp-&gt;ex_groups))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	 if (!xdr_exports (xdrs, &amp;objp-&gt;ex_next))</div><div class='del'>-		 return FALSE;</div><div class='del'>-	return TRUE;</div><div class='add'>+    if (!xdr_dirpath(xdrs, &amp;objp-&gt;ex_dir))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_groups(xdrs, &amp;objp-&gt;ex_groups))</div><div class='add'>+        return FALSE;</div><div class='add'>+    if (!xdr_exports(xdrs, &amp;objp-&gt;ex_next))</div><div class='add'>+        return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-xdr_free_groupnode (struct groupnode *group)</div><div class='add'>+xdr_free_groupnode(struct groupnode *group)</div><div class='ctx'> {</div><div class='del'>-        if (!group)</div><div class='del'>-                return;</div><div class='add'>+    if (!group)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (group-&gt;gr_next)</div><div class='del'>-                xdr_free_groupnode (group-&gt;gr_next);</div><div class='add'>+    if (group-&gt;gr_next)</div><div class='add'>+        xdr_free_groupnode(group-&gt;gr_next);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (group-&gt;gr_name);</div><div class='del'>-        GF_FREE (group);</div><div class='add'>+    GF_FREE(group-&gt;gr_name);</div><div class='add'>+    GF_FREE(group);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xdr_free_exports_list (struct exportnode *first)</div><div class='add'>+xdr_free_exports_list(struct exportnode *first)</div><div class='ctx'> {</div><div class='del'>-        struct exportnode       *elist = NULL;</div><div class='add'>+    struct exportnode *elist = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!first)</div><div class='del'>-                return;</div><div class='add'>+    if (!first)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        while (first) {</div><div class='del'>-                elist = first-&gt;ex_next;</div><div class='del'>-                GF_FREE (first-&gt;ex_dir);</div><div class='add'>+    while (first) {</div><div class='add'>+        elist = first-&gt;ex_next;</div><div class='add'>+        GF_FREE(first-&gt;ex_dir);</div><div class='ctx'> </div><div class='del'>-                xdr_free_groupnode (first-&gt;ex_groups);</div><div class='del'>-</div><div class='del'>-                GF_FREE (first);</div><div class='del'>-                first = elist;</div><div class='del'>-        }</div><div class='add'>+        xdr_free_groupnode(first-&gt;ex_groups);</div><div class='ctx'> </div><div class='add'>+        GF_FREE(first);</div><div class='add'>+        first = elist;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-xdr_free_mountlist (mountlist ml)</div><div class='add'>+xdr_free_mountlist(mountlist ml)</div><div class='ctx'> {</div><div class='del'>-        struct mountbody        *next = NULL;</div><div class='add'>+    struct mountbody *next = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!ml)</div><div class='del'>-                return;</div><div class='add'>+    if (!ml)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        while (ml) {</div><div class='del'>-                GF_FREE (ml-&gt;ml_hostname);</div><div class='del'>-                GF_FREE (ml-&gt;ml_directory);</div><div class='del'>-                next = ml-&gt;ml_next;</div><div class='del'>-                GF_FREE (ml);</div><div class='del'>-                ml = next;</div><div class='del'>-        }</div><div class='add'>+    while (ml) {</div><div class='add'>+        GF_FREE(ml-&gt;ml_hostname);</div><div class='add'>+        GF_FREE(ml-&gt;ml_directory);</div><div class='add'>+        next = ml-&gt;ml_next;</div><div class='add'>+        GF_FREE(ml);</div><div class='add'>+        ml = next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Free statements are based on the way sunrpc xdr decoding</div><div class='ctx'>  * code performs memory allocations.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-xdr_free_write3args_nocopy (write3args *wa)</div><div class='add'>+xdr_free_write3args_nocopy(write3args *wa)</div><div class='ctx'> {</div><div class='del'>-        if (!wa)</div><div class='del'>-                return;</div><div class='add'>+    if (!wa)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        FREE (wa-&gt;file.data.data_val);</div><div class='add'>+    FREE(wa-&gt;file.data.data_val);</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/ctime/ctime-glfs-init.c b/tests/basic/ctime/ctime-glfs-init.c<br/>index 57a3dc7820e..e4f197b8f30 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/ctime/ctime-glfs-init.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/ctime/ctime-glfs-init.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/ctime/ctime-glfs-init.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/ctime/ctime-glfs-init.c</a></div><div class='hunk'>@@ -10,58 +10,59 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(msg) do { \</div><div class='del'>-        fprintf (stderr, "%s : Error (%s)\n", msg, strerror (errno)); \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(msg)                                                           \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        fprintf(stderr, "%s : Error (%s)\n", msg, strerror(errno));            \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int         ret      = 0;</div><div class='del'>-        char       *hostname = NULL;</div><div class='del'>-        char       *volname  = NULL;</div><div class='del'>-        char       *logfile  = NULL;</div><div class='del'>-        glfs_t     *fs       = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                LOG_ERR ("glfs_new failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        LOG_ERR("glfs_new failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_volfile_server failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_volfile_server failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_logging failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_logging failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_init failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_init failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        fs = NULL;</div><div class='del'>-        return 0;</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    fs = NULL;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        fs = NULL;</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    fs = NULL;</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/ec/ec-fast-fgetxattr.c b/tests/basic/ec/ec-fast-fgetxattr.c<br/>index b40dda65de5..bf982151861 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/ec/ec-fast-fgetxattr.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/ec/ec-fast-fgetxattr.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/ec/ec-fast-fgetxattr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/ec/ec-fast-fgetxattr.c</a></div><div class='hunk'>@@ -12,123 +12,118 @@</div><div class='ctx'> int cbk_complete = 0;</div><div class='ctx'> ssize_t cbk_ret_val = 0;</div><div class='ctx'> int</div><div class='del'>-fill_iov (struct iovec *iov, char fillchar, int count)</div><div class='add'>+fill_iov(struct iovec *iov, char fillchar, int count)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        iov-&gt;iov_base = malloc (count + 1);</div><div class='del'>-        if (iov-&gt;iov_base == NULL) {</div><div class='del'>-                return ret;</div><div class='del'>-        } else {</div><div class='del'>-                iov-&gt;iov_len = count;</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        memset (iov-&gt;iov_base, fillchar, count);</div><div class='del'>-        memset (iov-&gt;iov_base + count, '\0', 1);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    iov-&gt;iov_base = malloc(count + 1);</div><div class='add'>+    if (iov-&gt;iov_base == NULL) {</div><div class='ctx'>         return ret;</div><div class='add'>+    } else {</div><div class='add'>+        iov-&gt;iov_len = count;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    memset(iov-&gt;iov_base, fillchar, count);</div><div class='add'>+    memset(iov-&gt;iov_base + count, '\0', 1);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-write_async_cbk (glfs_fd_t *fd, ssize_t ret, struct stat *prestat,</div><div class='del'>-                 struct stat *poststat, void *cookie)</div><div class='add'>+write_async_cbk(glfs_fd_t *fd, ssize_t ret, struct stat *prestat,</div><div class='add'>+                struct stat *poststat, void *cookie)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_write failed");</div><div class='del'>-        }</div><div class='del'>-        cbk_ret_val = ret;</div><div class='del'>-        cbk_complete = 1;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_write failed");</div><div class='add'>+    }</div><div class='add'>+    cbk_ret_val = ret;</div><div class='add'>+    cbk_complete = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-write_async (glfs_t *fs, glfs_fd_t *glfd, int char_count)</div><div class='add'>+write_async(glfs_t *fs, glfs_fd_t *glfd, int char_count)</div><div class='ctx'> {</div><div class='del'>-        ssize_t         ret          = -1;</div><div class='del'>-        int             flags        = O_RDWR;</div><div class='del'>-        struct iovec    iov          = {0};</div><div class='del'>-</div><div class='del'>-</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    int flags = O_RDWR;</div><div class='add'>+    struct iovec iov = {0};</div><div class='ctx'> </div><div class='del'>-        ret = fill_iov (&amp;iov, 'a', char_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "failed to create iov");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fill_iov(&amp;iov, 'a', char_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "failed to create iov");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_pwritev_async (glfd, &amp;iov, 1, 0, flags, write_async_cbk,</div><div class='del'>-                                  NULL);</div><div class='add'>+    ret = glfs_pwritev_async(glfd, &amp;iov, 1, 0, flags, write_async_cbk, NULL);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_pwritev async failed");</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_pwritev async failed");</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        int        ret = 1;</div><div class='del'>-        char       buf[1024] = {0};</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file&gt;\n", argv[0]);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[1], 24007);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_set_logging (fs, "/tmp/ec-fgetxattr.log", 7);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_open (fs, argv[3], O_RDWR | O_TRUNC);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = write_async (fs, fd, 16);</div><div class='del'>-        if (ret) {</div><div class='del'>-                fprintf (stderr, "write_async failed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sleep (1);</div><div class='del'>-        ret = glfs_fgetxattr (fd, "trusted.glusterfs.abc", buf, sizeof buf);</div><div class='del'>-        while (cbk_complete != 1) {</div><div class='del'>-                /* ret will be -ve as xattr doesn't exist, and fgetxattr should</div><div class='del'>-                 * return waaaayyy before writev */</div><div class='del'>-                ret = 0;</div><div class='del'>-                sleep (1);</div><div class='del'>-        }</div><div class='del'>-        if (cbk_ret_val &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cbk_ret_val is -ve\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-        glfs_close(fd);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+    char buf[1024] = {0};</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file&gt;\n", argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[1], 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_set_logging(fs, "/tmp/ec-fgetxattr.log", 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_open(fs, argv[3], O_RDWR | O_TRUNC);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = write_async(fs, fd, 16);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fprintf(stderr, "write_async failed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sleep(1);</div><div class='add'>+    ret = glfs_fgetxattr(fd, "trusted.glusterfs.abc", buf, sizeof buf);</div><div class='add'>+    while (cbk_complete != 1) {</div><div class='add'>+        /* ret will be -ve as xattr doesn't exist, and fgetxattr should</div><div class='add'>+         * return waaaayyy before writev */</div><div class='add'>+        ret = 0;</div><div class='add'>+        sleep(1);</div><div class='add'>+    }</div><div class='add'>+    if (cbk_ret_val &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cbk_ret_val is -ve\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+    glfs_close(fd);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        unlink ("/tmp/ec-fgetxattr.log");</div><div class='del'>-        glfs_fini (fs);</div><div class='add'>+    unlink("/tmp/ec-fgetxattr.log");</div><div class='add'>+    glfs_fini(fs);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/ec/seek.c b/tests/basic/ec/seek.c<br/>index 67036ad4e75..54fa6f463af 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/ec/seek.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/ec/seek.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/ec/seek.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/ec/seek.c</a></div><div class='hunk'>@@ -15,171 +15,168 @@ static char buffer[65536];</div><div class='ctx'> static int</div><div class='ctx'> parse_int(const char *text, size_t *value)</div><div class='ctx'> {</div><div class='del'>-        char *ptr;</div><div class='del'>-        size_t val;</div><div class='add'>+    char *ptr;</div><div class='add'>+    size_t val;</div><div class='ctx'> </div><div class='del'>-        val = strtoul(text, &amp;ptr, 0);</div><div class='del'>-        if (*ptr != 0) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    val = strtoul(text, &amp;ptr, 0);</div><div class='add'>+    if (*ptr != 0) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *value = val;</div><div class='add'>+    *value = val;</div><div class='ctx'> </div><div class='del'>-        return 1;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> fill_area(int fd, off_t offset, size_t size)</div><div class='ctx'> {</div><div class='del'>-        size_t len;</div><div class='del'>-        ssize_t res;</div><div class='del'>-</div><div class='del'>-        while (size &gt; 0) {</div><div class='del'>-                len = sizeof(buffer);</div><div class='del'>-                if (len &gt; size) {</div><div class='del'>-                        len = size;</div><div class='del'>-                }</div><div class='del'>-                res = pwrite(fd, buffer, len, offset);</div><div class='del'>-                if (res &lt; 0) {</div><div class='del'>-                        fprintf(stderr,</div><div class='del'>-                                "pwrite(%d, %p, %lu, %lu) failed: %d\n",</div><div class='del'>-                                fd, buffer, size, offset, errno);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                if (res != len) {</div><div class='del'>-                        fprintf(stderr,</div><div class='del'>-                                "pwrite(%d, %p, %lu, %lu) didn't wrote all "</div><div class='del'>-                                "data: %lu/%lu\n",</div><div class='del'>-                                fd, buffer, size, offset, res, len);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                offset += len;</div><div class='del'>-                size -= len;</div><div class='add'>+    size_t len;</div><div class='add'>+    ssize_t res;</div><div class='add'>+</div><div class='add'>+    while (size &gt; 0) {</div><div class='add'>+        len = sizeof(buffer);</div><div class='add'>+        if (len &gt; size) {</div><div class='add'>+            len = size;</div><div class='add'>+        }</div><div class='add'>+        res = pwrite(fd, buffer, len, offset);</div><div class='add'>+        if (res &lt; 0) {</div><div class='add'>+            fprintf(stderr, "pwrite(%d, %p, %lu, %lu) failed: %d\n", fd, buffer,</div><div class='add'>+                    size, offset, errno);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        if (res != len) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "pwrite(%d, %p, %lu, %lu) didn't wrote all "</div><div class='add'>+                    "data: %lu/%lu\n",</div><div class='add'>+                    fd, buffer, size, offset, res, len);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+        offset += len;</div><div class='add'>+        size -= len;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 1;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> syntax(void)</div><div class='ctx'> {</div><div class='del'>-        fprintf(stderr, "Syntax: seek create &lt;path&gt; &lt;offset&gt; &lt;size&gt; [...]\n");</div><div class='del'>-        fprintf(stderr, "        seek scan &lt;path&gt; data|hole &lt;offset&gt;\n");</div><div class='add'>+    fprintf(stderr, "Syntax: seek create &lt;path&gt; &lt;offset&gt; &lt;size&gt; [...]\n");</div><div class='add'>+    fprintf(stderr, "        seek scan &lt;path&gt; data|hole &lt;offset&gt;\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> seek_create(const char *path, int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        size_t off, size;</div><div class='del'>-        int fd;</div><div class='del'>-        int ret = 1;</div><div class='del'>-</div><div class='del'>-        fd = open(path, O_CREAT | O_TRUNC | O_RDWR, 0644);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf(stderr, "Failed to create the file\n");</div><div class='del'>-                goto out;</div><div class='add'>+    size_t off, size;</div><div class='add'>+    int fd;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    fd = open(path, O_CREAT | O_TRUNC | O_RDWR, 0644);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "Failed to create the file\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (argc &gt; 0) {</div><div class='add'>+        if (!parse_int(argv[0], &amp;off) || !parse_int(argv[1], &amp;size)) {</div><div class='add'>+            syntax();</div><div class='add'>+            goto out_close;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        while (argc &gt; 0) {</div><div class='del'>-                if (!parse_int(argv[0], &amp;off) ||</div><div class='del'>-                    !parse_int(argv[1], &amp;size)) {</div><div class='del'>-                        syntax();</div><div class='del'>-                        goto out_close;</div><div class='del'>-                }</div><div class='del'>-                if (!fill_area(fd, off, size)) {</div><div class='del'>-                        goto out_close;</div><div class='del'>-                }</div><div class='del'>-                argv += 2;</div><div class='del'>-                argc -= 2;</div><div class='add'>+        if (!fill_area(fd, off, size)) {</div><div class='add'>+            goto out_close;</div><div class='ctx'>         }</div><div class='add'>+        argv += 2;</div><div class='add'>+        argc -= 2;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out_close:</div><div class='del'>-        close(fd);</div><div class='add'>+    close(fd);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> seek_scan(const char *path, const char *type, const char *pos)</div><div class='ctx'> {</div><div class='del'>-        size_t off, res;</div><div class='del'>-        int fd, whence;</div><div class='del'>-        int ret = 1;</div><div class='del'>-</div><div class='del'>-        if (strcmp(type, "data") == 0) {</div><div class='del'>-                whence = SEEK_DATA;</div><div class='del'>-        } else if (strcmp(type, "hole") == 0) {</div><div class='del'>-                whence = SEEK_HOLE;</div><div class='del'>-        } else {</div><div class='del'>-                syntax();</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!parse_int(pos, &amp;off)) {</div><div class='del'>-                syntax();</div><div class='del'>-                goto out;</div><div class='add'>+    size_t off, res;</div><div class='add'>+    int fd, whence;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    if (strcmp(type, "data") == 0) {</div><div class='add'>+        whence = SEEK_DATA;</div><div class='add'>+    } else if (strcmp(type, "hole") == 0) {</div><div class='add'>+        whence = SEEK_HOLE;</div><div class='add'>+    } else {</div><div class='add'>+        syntax();</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!parse_int(pos, &amp;off)) {</div><div class='add'>+        syntax();</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = open(path, O_RDWR);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "Failed to open the file\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    res = lseek(fd, off, whence);</div><div class='add'>+    if (res == (off_t)-1) {</div><div class='add'>+        if (errno != ENXIO) {</div><div class='add'>+            fprintf(stderr, "seek(%d, %lu, %d) failed: %d\n", fd, off, whence,</div><div class='add'>+                    errno);</div><div class='add'>+            goto out_close;</div><div class='ctx'>         }</div><div class='add'>+        fprintf(stdout, "ENXIO\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "%lu\n", res);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = open(path, O_RDWR);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf(stderr, "Failed to open the file\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        res = lseek(fd, off, whence);</div><div class='del'>-        if (res == (off_t)-1) {</div><div class='del'>-                if (errno != ENXIO) {</div><div class='del'>-                        fprintf(stderr, "seek(%d, %lu, %d) failed: %d\n", fd,</div><div class='del'>-                                off, whence, errno);</div><div class='del'>-                        goto out_close;</div><div class='del'>-                }</div><div class='del'>-                fprintf(stdout, "ENXIO\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf(stdout, "%lu\n", res);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out_close:</div><div class='del'>-        close(fd);</div><div class='add'>+    close(fd);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int ret = 1;</div><div class='add'>+    int ret = 1;</div><div class='ctx'> </div><div class='del'>-        memset(buffer, 0x55, sizeof(buffer));</div><div class='add'>+    memset(buffer, 0x55, sizeof(buffer));</div><div class='ctx'> </div><div class='del'>-        if (argc &lt; 3) {</div><div class='del'>-                syntax();</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (argc &lt; 3) {</div><div class='add'>+        syntax();</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp(argv[1], "create") == 0) {</div><div class='del'>-                if (((argc - 3) &amp; 1) != 0) {</div><div class='del'>-                        syntax();</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = seek_create(argv[2], argc - 3, argv + 3);</div><div class='del'>-        } else if (strcmp(argv[1], "scan") == 0) {</div><div class='del'>-                if (argc != 5) {</div><div class='del'>-                        syntax();</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = seek_scan(argv[2], argv[3], argv[4]);</div><div class='del'>-        } else {</div><div class='del'>-                syntax();</div><div class='del'>-                goto out;</div><div class='add'>+    if (strcmp(argv[1], "create") == 0) {</div><div class='add'>+        if (((argc - 3) &amp; 1) != 0) {</div><div class='add'>+            syntax();</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = seek_create(argv[2], argc - 3, argv + 3);</div><div class='add'>+    } else if (strcmp(argv[1], "scan") == 0) {</div><div class='add'>+        if (argc != 5) {</div><div class='add'>+            syntax();</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = seek_scan(argv[2], argv[3], argv[4]);</div><div class='add'>+    } else {</div><div class='add'>+        syntax();</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/fops-sanity.c b/tests/basic/fops-sanity.c<br/>index 1e2ccde6bd8..aff72d89ca1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/fops-sanity.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/fops-sanity.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/fops-sanity.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/fops-sanity.c</a></div><div class='hunk'>@@ -34,858 +34,904 @@</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> /* for fd based fops after unlink */</div><div class='del'>-int fd_based_fops_1 (char *filename);</div><div class='add'>+int</div><div class='add'>+fd_based_fops_1(char *filename);</div><div class='ctx'> /* for fd based fops before unlink */</div><div class='del'>-int fd_based_fops_2 (char *filename);</div><div class='add'>+int</div><div class='add'>+fd_based_fops_2(char *filename);</div><div class='ctx'> /* fops based on fd after dup */</div><div class='del'>-int dup_fd_based_fops (char *filename);</div><div class='add'>+int</div><div class='add'>+dup_fd_based_fops(char *filename);</div><div class='ctx'> /* for fops based on path */</div><div class='del'>-int path_based_fops (char *filename);</div><div class='add'>+int</div><div class='add'>+path_based_fops(char *filename);</div><div class='ctx'> /* for fops which operate on directory */</div><div class='del'>-int dir_based_fops (char *filename);</div><div class='add'>+int</div><div class='add'>+dir_based_fops(char *filename);</div><div class='ctx'> /* for fops which operate in link files (symlinks) */</div><div class='del'>-int link_based_fops (char *filename);</div><div class='add'>+int</div><div class='add'>+link_based_fops(char *filename);</div><div class='ctx'> /* to test open syscall with open modes available. */</div><div class='del'>-int test_open_modes (char *filename);</div><div class='add'>+int</div><div class='add'>+test_open_modes(char *filename);</div><div class='ctx'> /* generic function which does open write and read. */</div><div class='del'>-int generic_open_read_write (char *filename, int flag, mode_t mode);</div><div class='add'>+int</div><div class='add'>+generic_open_read_write(char *filename, int flag, mode_t mode);</div><div class='ctx'> </div><div class='del'>-#define OPEN_MODE   0666</div><div class='add'>+#define OPEN_MODE 0666</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int   ret           = -1;</div><div class='del'>-        int   result        = 0;</div><div class='del'>-        char  filename[255] = {0,};</div><div class='del'>-</div><div class='del'>-        if (argc &gt; 1)</div><div class='del'>-                strcpy(filename, argv[1]);</div><div class='del'>-        else</div><div class='del'>-                strcpy(filename, "temp-xattr-test-file");</div><div class='del'>-</div><div class='del'>-        ret = fd_based_fops_1 (strcat(filename, "_1"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fd based file operation 1 failed\n");</div><div class='del'>-                result |= ret;</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "fd based file operation 1 passed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fd_based_fops_2 (strcat(filename, "_2"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                result |= ret;</div><div class='del'>-                fprintf (stderr, "fd based file operation 2 failed\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "fd based file operation 2 passed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dup_fd_based_fops (strcat (filename, "_3"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                result |= ret;</div><div class='del'>-                fprintf (stderr, "dup fd based file operation failed\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "dup fd based file operation passed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = path_based_fops (strcat (filename, "_4"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                result |= ret;</div><div class='del'>-                fprintf (stderr, "path based file operation failed\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "path based file operation passed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dir_based_fops (strcat (filename, "_5"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                result |= ret;</div><div class='del'>-                fprintf (stderr, "directory based file operation failed\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "directory based file operation passed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = link_based_fops (strcat (filename, "_5"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                result |= ret;</div><div class='del'>-                fprintf (stderr, "link based file operation failed\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "link based file operation passed\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = test_open_modes (strcat (filename, "_5"));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                result |= ret;</div><div class='del'>-                fprintf (stderr, "testing modes of `open' call failed\n");</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stdout, "testing modes of `open' call passed\n");</div><div class='del'>-        }</div><div class='del'>-        return result;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int result = 0;</div><div class='add'>+    char filename[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (argc &gt; 1)</div><div class='add'>+        strcpy(filename, argv[1]);</div><div class='add'>+    else</div><div class='add'>+        strcpy(filename, "temp-xattr-test-file");</div><div class='add'>+</div><div class='add'>+    ret = fd_based_fops_1(strcat(filename, "_1"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fd based file operation 1 failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "fd based file operation 1 passed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fd_based_fops_2(strcat(filename, "_2"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        result |= ret;</div><div class='add'>+        fprintf(stderr, "fd based file operation 2 failed\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "fd based file operation 2 passed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dup_fd_based_fops(strcat(filename, "_3"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        result |= ret;</div><div class='add'>+        fprintf(stderr, "dup fd based file operation failed\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "dup fd based file operation passed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = path_based_fops(strcat(filename, "_4"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        result |= ret;</div><div class='add'>+        fprintf(stderr, "path based file operation failed\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "path based file operation passed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dir_based_fops(strcat(filename, "_5"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        result |= ret;</div><div class='add'>+        fprintf(stderr, "directory based file operation failed\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "directory based file operation passed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = link_based_fops(strcat(filename, "_5"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        result |= ret;</div><div class='add'>+        fprintf(stderr, "link based file operation failed\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "link based file operation passed\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = test_open_modes(strcat(filename, "_5"));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        result |= ret;</div><div class='add'>+        fprintf(stderr, "testing modes of `open' call failed\n");</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stdout, "testing modes of `open' call passed\n");</div><div class='add'>+    }</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Execute all possible fops on a fd which is unlinked */</div><div class='ctx'> int</div><div class='del'>-fd_based_fops_1 (char *filename)</div><div class='add'>+fd_based_fops_1(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         fd        = 0;</div><div class='del'>-        int         ret       = -1;</div><div class='del'>-        int         result    = 0;</div><div class='del'>-        struct stat stbuf     = {0,};</div><div class='del'>-        char        wstr[50]  = {0,};</div><div class='del'>-        char        rstr[50]  = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT, OPEN_MODE);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = unlink (filename);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "unlink failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (wstr, "This is my string\n");</div><div class='del'>-        ret = write (fd, wstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lseek failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (fd, rstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "read failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = memcmp (rstr, wstr, strlen (wstr));</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "read returning junk\n");</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ftruncate (fd, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "ftruncate failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fstat (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fdatasync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fdatasync failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *      These metadata operations fail at the moment because kernel doesn't</div><div class='del'>- *      pass the client fd in the operation.</div><div class='del'>- *      The following bug tracks this change.</div><div class='del'>- *      https://bugzilla.redhat.com/show_bug.cgi?id=1084422</div><div class='del'>- *      ret = fchmod (fd, 0640);</div><div class='del'>- *      if (ret &lt; 0) {</div><div class='del'>- *              fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='del'>- *              result |= ret;</div><div class='del'>- *      }</div><div class='del'>-</div><div class='del'>- *      ret = fchown (fd, 10001, 10001);</div><div class='del'>- *      if (ret &lt; 0) {</div><div class='del'>- *              fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='del'>- *              result |= ret;</div><div class='del'>- *      }</div><div class='del'>-</div><div class='del'>- *      ret = fsetxattr (fd, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>- *      if (ret &lt; 0) {</div><div class='del'>- *              fprintf (stderr, "fsetxattr failed : %s\n", strerror (errno));</div><div class='del'>- *              result |= ret;</div><div class='del'>- *      }</div><div class='del'>-</div><div class='del'>- *      ret = flistxattr (fd, NULL, 0);</div><div class='del'>- *      if (ret &lt;= 0) {</div><div class='del'>- *              fprintf (stderr, "flistxattr failed : %s\n", strerror (errno));</div><div class='del'>- *              result |= ret;</div><div class='del'>- *      }</div><div class='del'>-</div><div class='del'>- *      ret = fgetxattr (fd, "trusted.xattr-test", NULL, 0);</div><div class='del'>- *      if (ret &lt;= 0) {</div><div class='del'>- *              fprintf (stderr, "fgetxattr failed : %s\n", strerror (errno));</div><div class='del'>- *              result |= ret;</div><div class='del'>- *      }</div><div class='del'>-</div><div class='del'>- *      ret = fremovexattr (fd, "trusted.xattr-test");</div><div class='del'>- *      if (ret &lt; 0) {</div><div class='del'>- *              fprintf (stderr, "fremovexattr failed : %s\n", strerror (errno));</div><div class='del'>- *              result |= ret;</div><div class='del'>- *      }</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-        if (fd)</div><div class='del'>-                close(fd);</div><div class='del'>-        return result;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int result = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char wstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, OPEN_MODE);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = unlink(filename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "unlink failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(wstr, "This is my string\n");</div><div class='add'>+    ret = write(fd, wstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lseek failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(fd, rstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "read failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = memcmp(rstr, wstr, strlen(wstr));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "read returning junk\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ftruncate(fd, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "ftruncate failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fstat(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fdatasync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fdatasync failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     *      These metadata operations fail at the moment because kernel doesn't</div><div class='add'>+     *      pass the client fd in the operation.</div><div class='add'>+     *      The following bug tracks this change.</div><div class='add'>+     *      https://bugzilla.redhat.com/show_bug.cgi?id=1084422</div><div class='add'>+     *      ret = fchmod (fd, 0640);</div><div class='add'>+     *      if (ret &lt; 0) {</div><div class='add'>+     *              fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='add'>+     *              result |= ret;</div><div class='add'>+     *      }</div><div class='add'>+</div><div class='add'>+     *      ret = fchown (fd, 10001, 10001);</div><div class='add'>+     *      if (ret &lt; 0) {</div><div class='add'>+     *              fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='add'>+     *              result |= ret;</div><div class='add'>+     *      }</div><div class='add'>+</div><div class='add'>+     *      ret = fsetxattr (fd, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+     *      if (ret &lt; 0) {</div><div class='add'>+     *              fprintf (stderr, "fsetxattr failed : %s\n", strerror</div><div class='add'>+     (errno));</div><div class='add'>+     *              result |= ret;</div><div class='add'>+     *      }</div><div class='add'>+</div><div class='add'>+     *      ret = flistxattr (fd, NULL, 0);</div><div class='add'>+     *      if (ret &lt;= 0) {</div><div class='add'>+     *              fprintf (stderr, "flistxattr failed : %s\n", strerror</div><div class='add'>+     (errno));</div><div class='add'>+     *              result |= ret;</div><div class='add'>+     *      }</div><div class='add'>+</div><div class='add'>+     *      ret = fgetxattr (fd, "trusted.xattr-test", NULL, 0);</div><div class='add'>+     *      if (ret &lt;= 0) {</div><div class='add'>+     *              fprintf (stderr, "fgetxattr failed : %s\n", strerror</div><div class='add'>+     (errno));</div><div class='add'>+     *              result |= ret;</div><div class='add'>+     *      }</div><div class='add'>+</div><div class='add'>+     *      ret = fremovexattr (fd, "trusted.xattr-test");</div><div class='add'>+     *      if (ret &lt; 0) {</div><div class='add'>+     *              fprintf (stderr, "fremovexattr failed : %s\n", strerror</div><div class='add'>+     (errno));</div><div class='add'>+     *              result |= ret;</div><div class='add'>+     *      }</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fd_based_fops_2 (char *filename)</div><div class='add'>+fd_based_fops_2(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int     fd              = 0;</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        int     result          = 0;</div><div class='del'>-        struct stat stbuf       = {0,};</div><div class='del'>-        char        wstr[50]    = {0,};</div><div class='del'>-        char        rstr[50]    = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT, OPEN_MODE);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ftruncate (fd, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "ftruncate failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (wstr, "This is my second string\n");</div><div class='del'>-        ret = write (fd, wstr, strlen (wstr));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lseek failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (fd, rstr, strlen (wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "read failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = memcmp (rstr, wstr, strlen (wstr));</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "read returning junk\n");</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fstat (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchmod (fd, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchown (fd, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsetxattr (fd, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fdatasync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fdatasync failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = flistxattr (fd, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "flistxattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fgetxattr (fd, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "fgetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fremovexattr (fd, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fremovexattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fd)</div><div class='del'>-                close (fd);</div><div class='del'>-        unlink (filename);</div><div class='del'>-</div><div class='del'>-        return result;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int result = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char wstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, OPEN_MODE);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ftruncate(fd, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "ftruncate failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(wstr, "This is my second string\n");</div><div class='add'>+    ret = write(fd, wstr, strlen(wstr));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lseek failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(fd, rstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "read failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = memcmp(rstr, wstr, strlen(wstr));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "read returning junk\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fstat(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchmod(fd, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchmod failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchown(fd, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchown failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsetxattr(fd, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fdatasync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fdatasync failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = flistxattr(fd, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "flistxattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fgetxattr(fd, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "fgetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fremovexattr(fd, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fremovexattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='add'>+    unlink(filename);</div><div class='add'>+</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-path_based_fops (char *filename)</div><div class='add'>+path_based_fops(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         ret              = -1;</div><div class='del'>-        int         fd               = 0;</div><div class='del'>-        int         result           = 0;</div><div class='del'>-        struct stat stbuf            = {0,};</div><div class='del'>-        char        newfilename[255] = {0,};</div><div class='del'>-        char        *hardlink        = "linkfile-hard.txt";</div><div class='del'>-        char        *symlnk          = "linkfile-soft.txt";</div><div class='del'>-        char        buf[1024]        = {0,};</div><div class='del'>-</div><div class='del'>-        fd = creat (filename, 0644);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "creat failed: %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = truncate (filename, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "truncate failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = stat (filename, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chmod (filename, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chmod failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chown (filename, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chown failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = setxattr (filename, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "setxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = listxattr (filename, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "listxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = getxattr (filename, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "getxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = removexattr (filename, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "removexattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = access (filename, R_OK|W_OK);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "access failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = link (filename, hardlink);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "link failed: %s\n", strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-        unlink(hardlink);</div><div class='del'>-</div><div class='del'>-        ret = symlink (filename, symlnk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "symlink failed: %s\n", strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = readlink (symlnk, buf, sizeof(buf));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "readlink failed: %s\n", strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-        unlink(symlnk);</div><div class='del'>-</div><div class='del'>-        /* Create a character special file */</div><div class='del'>-        ret = mknod ("cspecial", S_IFCHR|S_IRWXU|S_IRWXG, makedev(2,3));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cpsecial mknod failed: %s\n",</div><div class='del'>-                         strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-        unlink("cspecial");</div><div class='del'>-</div><div class='del'>-        ret = mknod ("bspecial", S_IFBLK|S_IRWXU|S_IRWXG, makedev(4,5));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "bspecial mknod failed: %s\n",</div><div class='del'>-                         strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-        unlink("bspecial");</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int result = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char newfilename[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *hardlink = "linkfile-hard.txt";</div><div class='add'>+    char *symlnk = "linkfile-soft.txt";</div><div class='add'>+    char buf[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = creat(filename, 0644);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "creat failed: %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = truncate(filename, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "truncate failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = stat(filename, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chmod(filename, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chmod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chown(filename, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chown failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = setxattr(filename, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "setxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = listxattr(filename, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "listxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = getxattr(filename, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "getxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = removexattr(filename, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "removexattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = access(filename, R_OK | W_OK);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "access failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = link(filename, hardlink);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "link failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    unlink(hardlink);</div><div class='add'>+</div><div class='add'>+    ret = symlink(filename, symlnk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "symlink failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = readlink(symlnk, buf, sizeof(buf));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "readlink failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    unlink(symlnk);</div><div class='add'>+</div><div class='add'>+    /* Create a character special file */</div><div class='add'>+    ret = mknod("cspecial", S_IFCHR | S_IRWXU | S_IRWXG, makedev(2, 3));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cpsecial mknod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    unlink("cspecial");</div><div class='add'>+</div><div class='add'>+    ret = mknod("bspecial", S_IFBLK | S_IRWXU | S_IRWXG, makedev(4, 5));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "bspecial mknod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    unlink("bspecial");</div><div class='ctx'> </div><div class='ctx'> #ifdef linux</div><div class='del'>-        ret = mknod ("fifo", S_IFIFO|S_IRWXU|S_IRWXG, 0);</div><div class='add'>+    ret = mknod("fifo", S_IFIFO | S_IRWXU | S_IRWXG, 0);</div><div class='ctx'> #else</div><div class='del'>-        ret = mkfifo ("fifo", 0);</div><div class='add'>+    ret = mkfifo("fifo", 0);</div><div class='ctx'> #endif</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fifo mknod failed: %s\n",</div><div class='del'>-                         strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-        unlink("fifo");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fifo mknod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    unlink("fifo");</div><div class='ctx'> </div><div class='ctx'> #ifdef linux</div><div class='del'>-        ret = mknod ("sock", S_IFSOCK|S_IRWXU|S_IRWXG, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "sock mknod failed: %s\n",</div><div class='del'>-                         strerror(errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='add'>+    ret = mknod("sock", S_IFSOCK | S_IRWXU | S_IRWXG, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "sock mknod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='ctx'> #else</div><div class='del'>-        {</div><div class='del'>-                int s;</div><div class='del'>-                const char *pathname = "sock";</div><div class='del'>-                struct sockaddr_un addr;</div><div class='del'>-</div><div class='del'>-                s = socket(PF_LOCAL, SOCK_STREAM, 0);</div><div class='del'>-                memset(&amp;addr, 0, sizeof(addr));</div><div class='del'>-                strncpy(addr.sun_path, pathname, sizeof(addr.sun_path));</div><div class='del'>-                ret = bind(s, (const struct sockaddr *)&amp;addr, SUN_LEN(&amp;addr));</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "fifo mknod failed: %s\n",</div><div class='del'>-                                 strerror(errno));</div><div class='del'>-                        result |= ret;</div><div class='del'>-                }</div><div class='del'>-                close(s);</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-        unlink("sock");</div><div class='add'>+    {</div><div class='add'>+        int s;</div><div class='add'>+        const char *pathname = "sock";</div><div class='add'>+        struct sockaddr_un addr;</div><div class='ctx'> </div><div class='del'>-        strcpy (newfilename, filename);</div><div class='del'>-        strcat(newfilename, "_new");</div><div class='del'>-        ret = rename (filename, newfilename);</div><div class='add'>+        s = socket(PF_LOCAL, SOCK_STREAM, 0);</div><div class='add'>+        memset(&amp;addr, 0, sizeof(addr));</div><div class='add'>+        strncpy(addr.sun_path, pathname, sizeof(addr.sun_path));</div><div class='add'>+        ret = bind(s, (const struct sockaddr *)&amp;addr, SUN_LEN(&amp;addr));</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "rename failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='add'>+            fprintf(stderr, "fifo mknod failed: %s\n", strerror(errno));</div><div class='add'>+            result |= ret;</div><div class='ctx'>         }</div><div class='del'>-        unlink (newfilename);</div><div class='del'>-</div><div class='del'>-        if (fd)</div><div class='del'>-                close (fd);</div><div class='del'>-</div><div class='del'>-        unlink (filename);</div><div class='del'>-        return result;</div><div class='add'>+        close(s);</div><div class='add'>+    }</div><div class='add'>+#endif</div><div class='add'>+    unlink("sock");</div><div class='add'>+</div><div class='add'>+    strcpy(newfilename, filename);</div><div class='add'>+    strcat(newfilename, "_new");</div><div class='add'>+    ret = rename(filename, newfilename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "rename failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    unlink(newfilename);</div><div class='add'>+</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='add'>+</div><div class='add'>+    unlink(filename);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dup_fd_based_fops (char *filename)</div><div class='add'>+dup_fd_based_fops(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         fd        = 0;</div><div class='del'>-        int         result    = 0;</div><div class='del'>-        int         newfd     = 0;</div><div class='del'>-        int         ret       = -1;</div><div class='del'>-        struct stat stbuf     = {0,};</div><div class='del'>-        char        wstr[50]  = {0,};</div><div class='del'>-        char        rstr[50]  = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT, OPEN_MODE);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open failed : %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newfd = dup (fd);</div><div class='del'>-        if (newfd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "dup failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        close (fd);</div><div class='del'>-</div><div class='del'>-        strcpy (wstr, "This is my string\n");</div><div class='del'>-        ret = write (newfd, wstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lseek (newfd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lseek failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (newfd, rstr, strlen(wstr));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "read failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = memcmp (rstr, wstr, strlen (wstr));</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "read returning junk\n");</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ftruncate (newfd, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "ftruncate failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fstat (newfd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchmod (newfd, 0640);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchmod failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fchown (newfd, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fchown failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsync (newfd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fsetxattr (newfd, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fdatasync (newfd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fdatasync failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = flistxattr (newfd, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "flistxattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fgetxattr (newfd, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "fgetxattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = fremovexattr (newfd, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fremovexattr failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (newfd)</div><div class='del'>-                close (newfd);</div><div class='del'>-        ret = unlink (filename);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "unlink failed : %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-        return result;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int result = 0;</div><div class='add'>+    int newfd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char wstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstr[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, OPEN_MODE);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open failed : %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newfd = dup(fd);</div><div class='add'>+    if (newfd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "dup failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='add'>+</div><div class='add'>+    strcpy(wstr, "This is my string\n");</div><div class='add'>+    ret = write(newfd, wstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lseek(newfd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lseek failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(newfd, rstr, strlen(wstr));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "read failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = memcmp(rstr, wstr, strlen(wstr));</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "read returning junk\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ftruncate(newfd, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "ftruncate failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fstat(newfd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchmod(newfd, 0640);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchmod failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fchown(newfd, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fchown failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsync(newfd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fsetxattr(newfd, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fdatasync(newfd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fdatasync failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = flistxattr(newfd, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "flistxattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fgetxattr(newfd, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "fgetxattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fremovexattr(newfd, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fremovexattr failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (newfd)</div><div class='add'>+        close(newfd);</div><div class='add'>+    ret = unlink(filename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "unlink failed : %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dir_based_fops (char *dirname)</div><div class='add'>+dir_based_fops(char *dirname)</div><div class='ctx'> {</div><div class='del'>-        int            ret           = -1;</div><div class='del'>-        int            result        = 0;</div><div class='del'>-        DIR           *dp            = NULL;</div><div class='del'>-        char           buff[255]     = {0,};</div><div class='del'>-        struct dirent *dbuff         = {0,};</div><div class='del'>-        struct stat    stbuff        = {0,};</div><div class='del'>-        char           newdname[255] = {0,};</div><div class='del'>-        char          *cwd           = NULL;</div><div class='del'>-</div><div class='del'>-        ret = mkdir (dirname, 0755);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "mkdir failed: %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dp = opendir (dirname);</div><div class='del'>-        if (dp == NULL) {</div><div class='del'>-                fprintf (stderr, "opendir failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dbuff = readdir (dp);</div><div class='del'>-        if (NULL == dbuff) {</div><div class='del'>-                fprintf (stderr, "readdir failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = closedir (dp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "closedir failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = stat (dirname, &amp;stbuff);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chmod (dirname, 0744);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chmod failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = chown (dirname, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chmod failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = setxattr (dirname, "trusted.xattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "setxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = listxattr (dirname, NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "listxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = getxattr (dirname, "trusted.xattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "getxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = removexattr (dirname, "trusted.xattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "removexattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newdname, dirname);</div><div class='del'>-        strcat (newdname, "/../");</div><div class='del'>-        ret = chdir (newdname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "chdir failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cwd = getcwd (buff, 255);</div><div class='del'>-        if (NULL == cwd) {</div><div class='del'>-                fprintf (stderr, "getcwd failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newdname, dirname);</div><div class='del'>-        strcat (newdname, "new");</div><div class='del'>-        ret = rename (dirname, newdname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "rename failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rmdir (newdname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "rmdir failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rmdir (dirname);</div><div class='del'>-        return result;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int result = 0;</div><div class='add'>+    DIR *dp = NULL;</div><div class='add'>+    char buff[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct dirent *dbuff = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuff = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char newdname[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *cwd = NULL;</div><div class='add'>+</div><div class='add'>+    ret = mkdir(dirname, 0755);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "mkdir failed: %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dp = opendir(dirname);</div><div class='add'>+    if (dp == NULL) {</div><div class='add'>+        fprintf(stderr, "opendir failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dbuff = readdir(dp);</div><div class='add'>+    if (NULL == dbuff) {</div><div class='add'>+        fprintf(stderr, "readdir failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = closedir(dp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "closedir failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = stat(dirname, &amp;stbuff);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chmod(dirname, 0744);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chmod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = chown(dirname, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chmod failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = setxattr(dirname, "trusted.xattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "setxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = listxattr(dirname, NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "listxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = getxattr(dirname, "trusted.xattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "getxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = removexattr(dirname, "trusted.xattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "removexattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newdname, dirname);</div><div class='add'>+    strcat(newdname, "/../");</div><div class='add'>+    ret = chdir(newdname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "chdir failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cwd = getcwd(buff, 255);</div><div class='add'>+    if (NULL == cwd) {</div><div class='add'>+        fprintf(stderr, "getcwd failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newdname, dirname);</div><div class='add'>+    strcat(newdname, "new");</div><div class='add'>+    ret = rename(dirname, newdname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "rename failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rmdir(newdname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "rmdir failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rmdir(dirname);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-link_based_fops (char *filename)</div><div class='add'>+link_based_fops(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int         ret           = -1;</div><div class='del'>-        int         result        = 0;</div><div class='del'>-        int         fd            = 0;</div><div class='del'>-        char        newname[255]  = {0,};</div><div class='del'>-        char        linkname[255] = {0,};</div><div class='del'>-        struct stat lstbuf        = {0,};</div><div class='del'>-</div><div class='del'>-        fd = creat (filename, 0644);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fd = 0;</div><div class='del'>-                fprintf (stderr, "creat failed: %s\n", strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (newname, filename);</div><div class='del'>-        strcat (newname, "_hlink");</div><div class='del'>-        ret = link (filename, newname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "link failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = unlink (filename);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "unlink failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (linkname, filename);</div><div class='del'>-        strcat (linkname, "_slink");</div><div class='del'>-        ret = symlink (newname, linkname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "symlink failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lstat (linkname, &amp;lstbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lstbuf failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lchown (linkname, 10001, 10001);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lchown failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lsetxattr (linkname, "trusted.lxattr-test", "working", 8, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lsetxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = llistxattr (linkname, NULL, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "llistxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lgetxattr (linkname, "trusted.lxattr-test", NULL, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                fprintf (stderr, "lgetxattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lremovexattr (linkname, "trusted.lxattr-test");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "lremovexattr failed: %s\n", strerror (errno));</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fd)</div><div class='del'>-                close(fd);</div><div class='del'>-        unlink (linkname);</div><div class='del'>-        unlink (newname);</div><div class='del'>-        return result;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int result = 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    char newname[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char linkname[255] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat lstbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = creat(filename, 0644);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fd = 0;</div><div class='add'>+        fprintf(stderr, "creat failed: %s\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(newname, filename);</div><div class='add'>+    strcat(newname, "_hlink");</div><div class='add'>+    ret = link(filename, newname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "link failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = unlink(filename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "unlink failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(linkname, filename);</div><div class='add'>+    strcat(linkname, "_slink");</div><div class='add'>+    ret = symlink(newname, linkname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "symlink failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lstat(linkname, &amp;lstbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lstbuf failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lchown(linkname, 10001, 10001);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lchown failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lsetxattr(linkname, "trusted.lxattr-test", "working", 8, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lsetxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = llistxattr(linkname, NULL, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "llistxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lgetxattr(linkname, "trusted.lxattr-test", NULL, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        fprintf(stderr, "lgetxattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lremovexattr(linkname, "trusted.lxattr-test");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "lremovexattr failed: %s\n", strerror(errno));</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd)</div><div class='add'>+        close(fd);</div><div class='add'>+    unlink(linkname);</div><div class='add'>+    unlink(newname);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-test_open_modes (char *filename)</div><div class='add'>+test_open_modes(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int ret         = -1;</div><div class='del'>-        int result      = 0;</div><div class='del'>-</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_WRONLY, OPEN_MODE);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-               fprintf (stderr, "flag O_CREAT|O_WRONLY failed: \n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_RDWR, OPEN_MODE);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-               fprintf (stderr, "flag O_CREAT|O_RDWR failed\n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_RDONLY, OPEN_MODE);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "flag O_CREAT|O_RDONLY failed\n");</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_WRONLY, 0);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-               fprintf (stderr, "flag O_WRONLY failed\n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_RDWR, 0);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_RDWR failed\n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_RDONLY, 0);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_RDONLY failed\n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_TRUNC|O_WRONLY, 0);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_TRUNC|O_WRONLY failed\n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int result = 0;</div><div class='add'>+</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_WRONLY, OPEN_MODE);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_WRONLY failed: \n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_RDWR, OPEN_MODE);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_RDWR failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_RDONLY, OPEN_MODE);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_RDONLY failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_WRONLY, 0);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "flag O_WRONLY failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_RDWR, 0);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_RDWR failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_RDONLY, 0);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_RDONLY failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_TRUNC | O_WRONLY, 0);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_TRUNC|O_WRONLY failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if 0 /* undefined behaviour, unable to reliably test */</div><div class='ctx'>         ret = creat (filename, 0644);</div><div class='hunk'>@@ -897,87 +943,90 @@ test_open_modes (char *filename)</div><div class='ctx'>         }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_RDWR|O_SYNC,</div><div class='del'>-                                       OPEN_MODE);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-               fprintf (stderr, "flag O_CREAT|O_RDWR|O_SYNC failed\n");</div><div class='del'>-               result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = creat (filename, 0644);</div><div class='del'>-        close (ret);</div><div class='del'>-        ret = generic_open_read_write (filename, O_CREAT|O_EXCL, OPEN_MODE);</div><div class='del'>-        if (0 != ret) {</div><div class='del'>-                fprintf (stderr, "flag O_CREAT|O_EXCL failed\n");</div><div class='del'>-                result |= ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return result;</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_RDWR | O_SYNC,</div><div class='add'>+                                  OPEN_MODE);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_RDWR|O_SYNC failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = creat(filename, 0644);</div><div class='add'>+    close(ret);</div><div class='add'>+    ret = generic_open_read_write(filename, O_CREAT | O_EXCL, OPEN_MODE);</div><div class='add'>+    if (0 != ret) {</div><div class='add'>+        fprintf(stderr, "flag O_CREAT|O_EXCL failed\n");</div><div class='add'>+        result |= ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-generic_open_read_write (char *filename, int flag, mode_t mode)</div><div class='add'>+generic_open_read_write(char *filename, int flag, mode_t mode)</div><div class='ctx'> {</div><div class='del'>-        int  fd          = 0;</div><div class='del'>-        int  ret         = -1;</div><div class='del'>-        char wstring[50] = {0,};</div><div class='del'>-        char rstring[50] = {0,};</div><div class='del'>-</div><div class='del'>-        fd = open (filename, flag, mode);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                if (flag == (O_CREAT|O_EXCL) &amp;&amp; errno == EEXIST) {</div><div class='del'>-                        unlink (filename);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        fprintf (stderr, "open failed: %s\n", strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strcpy (wstring, "My string to write\n");</div><div class='del'>-        ret = write (fd, wstring, strlen(wstring));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                if (errno != EBADF) {</div><div class='del'>-                        fprintf (stderr, "write failed: %s\n", strerror (errno));</div><div class='del'>-                        close (fd);</div><div class='del'>-                        unlink(filename);</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                close (fd);</div><div class='del'>-                unlink(filename);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = read (fd, rstring, strlen(wstring));</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; flag != (O_CREAT|O_WRONLY) &amp;&amp; flag != O_WRONLY &amp;&amp; \</div><div class='del'>-            flag != (O_TRUNC|O_WRONLY)) {</div><div class='del'>-                close (fd);</div><div class='del'>-                unlink (filename);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Compare the rstring with wstring. But we do not want to return</div><div class='del'>-         * error when the flag is either O_RDONLY, O_CREAT|O_RDONLY or</div><div class='del'>-         * O_TRUNC|O_RDONLY. Because in that case we are not writing</div><div class='del'>-         * anything to the file.*/</div><div class='del'>-</div><div class='del'>-        ret = memcmp (wstring, rstring, strlen (wstring));</div><div class='del'>-        if (0 != ret &amp;&amp; flag != (O_TRUNC|O_WRONLY) &amp;&amp; flag != O_WRONLY &amp;&amp; \</div><div class='del'>-                                 flag != (O_CREAT|O_WRONLY) &amp;&amp; !(flag == \</div><div class='del'>-                                 (O_CREAT|O_RDONLY) || flag == O_RDONLY \</div><div class='del'>-                                  || flag == (O_TRUNC|O_RDONLY))) {</div><div class='del'>-                fprintf (stderr, "read is returning junk\n");</div><div class='del'>-                close (fd);</div><div class='del'>-                unlink (filename);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        close (fd);</div><div class='del'>-        unlink (filename);</div><div class='del'>-        return 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char wstring[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char rstring[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fd = open(filename, flag, mode);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        if (flag == (O_CREAT | O_EXCL) &amp;&amp; errno == EEXIST) {</div><div class='add'>+            unlink(filename);</div><div class='add'>+            return 0;</div><div class='add'>+        } else {</div><div class='add'>+            fprintf(stderr, "open failed: %s\n", strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    strcpy(wstring, "My string to write\n");</div><div class='add'>+    ret = write(fd, wstring, strlen(wstring));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        if (errno != EBADF) {</div><div class='add'>+            fprintf(stderr, "write failed: %s\n", strerror(errno));</div><div class='add'>+            close(fd);</div><div class='add'>+            unlink(filename);</div><div class='add'>+            return ret;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        close(fd);</div><div class='add'>+        unlink(filename);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = read(fd, rstring, strlen(wstring));</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; flag != (O_CREAT | O_WRONLY) &amp;&amp; flag != O_WRONLY &amp;&amp;</div><div class='add'>+        flag != (O_TRUNC | O_WRONLY)) {</div><div class='add'>+        close(fd);</div><div class='add'>+        unlink(filename);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Compare the rstring with wstring. But we do not want to return</div><div class='add'>+     * error when the flag is either O_RDONLY, O_CREAT|O_RDONLY or</div><div class='add'>+     * O_TRUNC|O_RDONLY. Because in that case we are not writing</div><div class='add'>+     * anything to the file.*/</div><div class='add'>+</div><div class='add'>+    ret = memcmp(wstring, rstring, strlen(wstring));</div><div class='add'>+    if (0 != ret &amp;&amp; flag != (O_TRUNC | O_WRONLY) &amp;&amp; flag != O_WRONLY &amp;&amp;</div><div class='add'>+        flag != (O_CREAT | O_WRONLY) &amp;&amp;</div><div class='add'>+        !(flag == (O_CREAT | O_RDONLY) || flag == O_RDONLY ||</div><div class='add'>+          flag == (O_TRUNC | O_RDONLY))) {</div><div class='add'>+        fprintf(stderr, "read is returning junk\n");</div><div class='add'>+        close(fd);</div><div class='add'>+        unlink(filename);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='add'>+    unlink(filename);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/fuse/seek.c b/tests/basic/fuse/seek.c<br/>index e4db41c03d7..30943ad0f33 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/fuse/seek.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/fuse/seek.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/fuse/seek.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/fuse/seek.c</a></div><div class='hunk'>@@ -17,64 +17,66 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int          ret        = EXIT_SUCCESS;</div><div class='del'>-        int          fd         = -1;</div><div class='del'>-        char        *filename   = NULL;</div><div class='del'>-        struct stat  st         = { 0, };</div><div class='del'>-        off_t        hole_start = 0;</div><div class='del'>-        off_t        hole_end   = 0;</div><div class='add'>+    int ret = EXIT_SUCCESS;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    off_t hole_start = 0;</div><div class='add'>+    off_t hole_end = 0;</div><div class='ctx'> </div><div class='del'>-        if (argc != 2) {</div><div class='del'>-                fprintf (stderr, "Invalid argument, use %s &lt;file&gt;\n", argv[0]);</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        filename = argv[1];</div><div class='add'>+    if (argc != 2) {</div><div class='add'>+        fprintf(stderr, "Invalid argument, use %s &lt;file&gt;\n", argv[0]);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = open (filename, O_RDONLY);</div><div class='del'>-        if (fd &lt;= 0) {</div><div class='del'>-                perror ("open");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    filename = argv[1];</div><div class='ctx'> </div><div class='del'>-        if (fstat (fd, &amp;st)) {</div><div class='del'>-                perror ("fstat");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    fd = open(filename, O_RDONLY);</div><div class='add'>+    if (fd &lt;= 0) {</div><div class='add'>+        perror("open");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (hole_end &lt; st.st_size) {</div><div class='del'>-                hole_start = lseek (fd, hole_end, SEEK_HOLE);</div><div class='del'>-                if (hole_start == -1 &amp;&amp; errno == ENXIO) {</div><div class='del'>-                        /* no more holes */</div><div class='del'>-                        break;</div><div class='del'>-                } else if (hole_start == -1 &amp;&amp; errno == ENOTSUP) {</div><div class='del'>-                        /* SEEK_HOLE is not supported */</div><div class='del'>-                        perror ("lseek(SEEK_HOLE)");</div><div class='del'>-                        ret = EXIT_FAILURE;</div><div class='del'>-                        break;</div><div class='del'>-                } else if (hole_start == -1) {</div><div class='del'>-			perror ("no more holes");</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='add'>+    if (fstat(fd, &amp;st)) {</div><div class='add'>+        perror("fstat");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                hole_end = lseek (fd, hole_start, SEEK_DATA);</div><div class='del'>-                if (hole_end == -1 &amp;&amp; errno == ENXIO) {</div><div class='del'>-                        /* no more data */</div><div class='del'>-                        break;</div><div class='del'>-                } else if (hole_end == -1 &amp;&amp; errno == ENOTSUP) {</div><div class='del'>-                        /* SEEK_DATA is not supported */</div><div class='del'>-                        perror ("lseek(SEEK_DATA)");</div><div class='del'>-                        ret = EXIT_FAILURE;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    while (hole_end &lt; st.st_size) {</div><div class='add'>+        hole_start = lseek(fd, hole_end, SEEK_HOLE);</div><div class='add'>+        if (hole_start == -1 &amp;&amp; errno == ENXIO) {</div><div class='add'>+            /* no more holes */</div><div class='add'>+            break;</div><div class='add'>+        } else if (hole_start == -1 &amp;&amp; errno == ENOTSUP) {</div><div class='add'>+            /* SEEK_HOLE is not supported */</div><div class='add'>+            perror("lseek(SEEK_HOLE)");</div><div class='add'>+            ret = EXIT_FAILURE;</div><div class='add'>+            break;</div><div class='add'>+        } else if (hole_start == -1) {</div><div class='add'>+            perror("no more holes");</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                printf ("HOLE found: %ld - %ld%s\n", hole_start, hole_end,</div><div class='del'>-                         (hole_end == st.st_size) ? " (EOF)" : "");</div><div class='add'>+        hole_end = lseek(fd, hole_start, SEEK_DATA);</div><div class='add'>+        if (hole_end == -1 &amp;&amp; errno == ENXIO) {</div><div class='add'>+            /* no more data */</div><div class='add'>+            break;</div><div class='add'>+        } else if (hole_end == -1 &amp;&amp; errno == ENOTSUP) {</div><div class='add'>+            /* SEEK_DATA is not supported */</div><div class='add'>+            perror("lseek(SEEK_DATA)");</div><div class='add'>+            ret = EXIT_FAILURE;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        close (fd);</div><div class='add'>+        printf("HOLE found: %ld - %ld%s\n", hole_start, hole_end,</div><div class='add'>+               (hole_end == st.st_size) ? " (EOF)" : "");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/anonymous_fd_read_write.c b/tests/basic/gfapi/anonymous_fd_read_write.c<br/>index 6945dd634f0..fc276ca4310 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/anonymous_fd_read_write.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/anonymous_fd_read_write.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/anonymous_fd_read_write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/anonymous_fd_read_write.c</a></div><div class='hunk'>@@ -9,95 +9,98 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto out; \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int                     ret            = 0;</div><div class='del'>-        glfs_t                  *fs            = NULL;</div><div class='del'>-        struct glfs_object      *root = NULL, *file_obj = NULL;</div><div class='del'>-        struct stat             sb             = {0, };</div><div class='del'>-        char                    readbuf[32], writebuf[32];</div><div class='del'>-        char                    *filename      = "file.txt";</div><div class='del'>-        char                    *logfile       = NULL;</div><div class='del'>-        char                    *volname       = NULL;</div><div class='del'>-        char                    *hostname      = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of / ,%s\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        file_obj = glfs_h_creat (fs, root, filename, O_CREAT, 0644, &amp;sb);</div><div class='del'>-        if (file_obj == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_creat: error on create of %s: from (%p),%s\n",</div><div class='del'>-                         filename, root, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* test read/write based on anonymous fd */</div><div class='del'>-        memcpy (writebuf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_anonymous_write (fs, file_obj, writebuf, 32, 0);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                LOG_ERR ("glfs_h_anonymous_write", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_anonymous_read (fs, file_obj, readbuf, 32, 0);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                LOG_ERR ("glfs_h_anonymous_read", ret);</div><div class='del'>-</div><div class='del'>-        if (memcmp (readbuf, writebuf, 32)) {</div><div class='del'>-                fprintf (stderr, "Failed to read what I wrote: %s %s\n", readbuf,</div><div class='del'>-                         writebuf);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    struct glfs_object *root = NULL, *file_obj = NULL;</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char readbuf[32], writebuf[32];</div><div class='add'>+    char *filename = "file.txt";</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_lookupat: error on lookup of / ,%s\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    file_obj = glfs_h_creat(fs, root, filename, O_CREAT, 0644, &amp;sb);</div><div class='add'>+    if (file_obj == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_creat: error on create of %s: from (%p),%s\n",</div><div class='add'>+                filename, root, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* test read/write based on anonymous fd */</div><div class='add'>+    memcpy(writebuf, "abcdefghijklmnopqrstuvwxyz012345", 32);</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_anonymous_write(fs, file_obj, writebuf, 32, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        LOG_ERR("glfs_h_anonymous_write", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_anonymous_read(fs, file_obj, readbuf, 32, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        LOG_ERR("glfs_h_anonymous_read", ret);</div><div class='add'>+</div><div class='add'>+    if (memcmp(readbuf, writebuf, 32)) {</div><div class='add'>+        fprintf(stderr, "Failed to read what I wrote: %s %s\n", readbuf,</div><div class='add'>+                writebuf);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (file_obj)</div><div class='del'>-                glfs_h_close (file_obj);</div><div class='del'>-</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='del'>-        }</div><div class='del'>-        if (ret)</div><div class='del'>-                exit(1);</div><div class='del'>-        exit(0);</div><div class='add'>+    if (file_obj)</div><div class='add'>+        glfs_h_close(file_obj);</div><div class='add'>+</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='add'>+    }</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/bug-1241104.c b/tests/basic/gfapi/bug-1241104.c<br/>index 311323f672a..78c87595a71 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug-1241104.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/bug-1241104.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug-1241104.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug-1241104.c</a></div><div class='hunk'>@@ -12,81 +12,82 @@</div><div class='ctx'> </div><div class='ctx'> int gfapi = 1;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto out; \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        int        ret = 0, i, status = 0;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        char      *filename = "file_tmp";</div><div class='del'>-        char      *volname = NULL;</div><div class='del'>-        char      *logfile = NULL;</div><div class='del'>-        char      *hostname = NULL;</div><div class='del'>-        struct flock lock = {0, };</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat(fs, filename, O_RDWR|O_SYNC, 0644);</div><div class='del'>-        if (fd &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_creat", ret);</div><div class='del'>-        }</div><div class='del'>-        fprintf (stderr, "glfs-create fd - %d\n", fd);</div><div class='del'>-</div><div class='del'>-	/* validate locks for negative range */</div><div class='del'>-        lock.l_type = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 10;</div><div class='del'>-        lock.l_len = -9;</div><div class='del'>-</div><div class='del'>-        ret = glfs_posix_lock (fd, F_SETLK, &amp;lock);</div><div class='del'>-        LOG_ERR ("glfs_posix_lock", ret);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0, i, status = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *filename = "file_tmp";</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    struct flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, filename, O_RDWR | O_SYNC, 0644);</div><div class='add'>+    if (fd &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_creat", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs-create fd - %d\n", fd);</div><div class='add'>+</div><div class='add'>+    /* validate locks for negative range */</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 10;</div><div class='add'>+    lock.l_len = -9;</div><div class='add'>+</div><div class='add'>+    ret = glfs_posix_lock(fd, F_SETLK, &amp;lock);</div><div class='add'>+    LOG_ERR("glfs_posix_lock", ret);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        glfs_close(fd);</div><div class='del'>-        LOG_ERR ("glfs_close", ret);</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+    LOG_ERR("glfs_close", ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                exit(1);</div><div class='del'>-        exit(0);</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/bug1283983.c b/tests/basic/gfapi/bug1283983.c<br/>index 3334b290d9e..b920013d0e0 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug1283983.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/bug1283983.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug1283983.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug1283983.c</a></div><div class='hunk'>@@ -10,114 +10,113 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> int gfapi = 1;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error ret(%d), errno(%d)\n", \</div><div class='del'>-                         func, ret, errno); \</div><div class='del'>-                exit(1); \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='del'>-#define LOG_IF_NO_ERR(func, ret) do { \</div><div class='del'>-        if (ret == 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : hasn't returned error %d\n", \</div><div class='del'>-                         func, ret); \</div><div class='del'>-                exit(1); \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error ret(%d), errno(%d)\n", func,  \</div><div class='add'>+                    ret, errno);                                               \</div><div class='add'>+            exit(1);                                                           \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+#define LOG_IF_NO_ERR(func, ret)                                               \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret == 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : hasn't returned error %d\n", func, ret);     \</div><div class='add'>+            exit(1);                                                           \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t                   *fs = NULL;</div><div class='del'>-        int                       ret = 0, i;</div><div class='del'>-        glfs_fd_t                *fd = NULL;</div><div class='del'>-        char                     *filename = "/a1";</div><div class='del'>-        char                     *filename2 = "/a2";</div><div class='del'>-        struct stat               sb = {0, };</div><div class='del'>-        struct glfs_upcall       *cbk = NULL;</div><div class='del'>-        char                     *logfile = NULL;</div><div class='del'>-        char                     *volname = NULL;</div><div class='del'>-        int                       cnt = 1;</div><div class='del'>-        struct glfs_upcall_inode *in_arg = NULL;</div><div class='del'>-        struct glfs_object       *root = NULL, *leaf = NULL;</div><div class='del'>-</div><div class='del'>-        fprintf (stderr, "Starting libgfapi_fini\n");</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0, i;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *filename = "/a1";</div><div class='add'>+    char *filename2 = "/a2";</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct glfs_upcall *cbk = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    int cnt = 1;</div><div class='add'>+    struct glfs_upcall_inode *in_arg = NULL;</div><div class='add'>+    struct glfs_object *root = NULL, *leaf = NULL;</div><div class='add'>+</div><div class='add'>+    fprintf(stderr, "Starting libgfapi_fini\n");</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1] volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    sleep(2);</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (!root) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_h_lookupat root", ret);</div><div class='add'>+    }</div><div class='add'>+    leaf = glfs_h_lookupat(fs, root, filename, &amp;sb, 0);</div><div class='add'>+    if (!leaf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_IF_NO_ERR("glfs_h_lookupat leaf", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_creat(fs, root, filename, O_RDWR, 0644, &amp;sb);</div><div class='add'>+    if (!leaf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_h_lookupat leaf", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs_h_create leaf - %p\n", leaf);</div><div class='add'>+</div><div class='add'>+    leaf = glfs_h_lookupat(fs, root, filename2, &amp;sb, 0);</div><div class='add'>+    if (!leaf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_IF_NO_ERR("glfs_h_lookupat leaf", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_rename(fs, root, filename, root, filename2);</div><div class='add'>+    LOG_ERR("glfs_rename", ret);</div><div class='add'>+</div><div class='add'>+    while (cnt++ &lt; 5) {</div><div class='add'>+        ret = glfs_h_poll_upcall(fs, &amp;cbk);</div><div class='add'>+        LOG_ERR("glfs_h_poll_upcall", ret);</div><div class='add'>+</div><div class='add'>+        /* There should not be any upcalls sent */</div><div class='add'>+        if (glfs_upcall_get_reason(cbk) != GLFS_UPCALL_EVENT_NULL) {</div><div class='add'>+            fprintf(stderr, "Error: Upcall received(%d)\n",</div><div class='add'>+                    glfs_upcall_get_reason(cbk));</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1]</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='add'>+        glfs_free(cbk);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    LOG_ERR("glfs_fini", ret);</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        sleep (2);</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (!root) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_h_lookupat root", ret);</div><div class='del'>-        }</div><div class='del'>-        leaf = glfs_h_lookupat (fs, root, filename, &amp;sb, 0);</div><div class='del'>-        if (!leaf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_IF_NO_ERR ("glfs_h_lookupat leaf", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_creat (fs, root, filename, O_RDWR, 0644, &amp;sb);</div><div class='del'>-        if (!leaf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_h_lookupat leaf", ret);</div><div class='del'>-        }</div><div class='del'>-        fprintf (stderr, "glfs_h_create leaf - %p\n", leaf);</div><div class='del'>-</div><div class='del'>-        leaf = glfs_h_lookupat (fs, root, filename2, &amp;sb, 0);</div><div class='del'>-        if (!leaf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_IF_NO_ERR ("glfs_h_lookupat leaf", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_rename (fs, root, filename, root, filename2);</div><div class='del'>-        LOG_ERR("glfs_rename", ret);</div><div class='del'>-</div><div class='del'>-        while (cnt++ &lt; 5) {</div><div class='del'>-                ret = glfs_h_poll_upcall(fs, &amp;cbk);</div><div class='del'>-                LOG_ERR ("glfs_h_poll_upcall", ret);</div><div class='del'>-</div><div class='del'>-                /* There should not be any upcalls sent */</div><div class='del'>-                if (glfs_upcall_get_reason(cbk) != GLFS_UPCALL_EVENT_NULL) {</div><div class='del'>-                        fprintf (stderr, "Error: Upcall received(%d)\n",</div><div class='del'>-                                 glfs_upcall_get_reason(cbk));</div><div class='del'>-                        exit (1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                glfs_free (cbk);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini(fs);</div><div class='del'>-        LOG_ERR("glfs_fini", ret);</div><div class='del'>-</div><div class='del'>-        fprintf (stderr, "End of libgfapi_fini\n");</div><div class='add'>+    fprintf(stderr, "End of libgfapi_fini\n");</div><div class='ctx'> </div><div class='del'>-        exit(0);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/bug1291259.c b/tests/basic/gfapi/bug1291259.c<br/>index 26fc1e01449..cd7bc65268b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug1291259.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/bug1291259.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug1291259.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug1291259.c</a></div><div class='hunk'>@@ -10,174 +10,172 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> int gfapi = 1;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error ret(%d), errno(%d)\n", \</div><div class='del'>-                         func, ret, errno); \</div><div class='del'>-                exit(1); \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='del'>-#define LOG_IF_NO_ERR(func, ret) do { \</div><div class='del'>-        if (ret == 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : hasn't returned error %d\n", \</div><div class='del'>-                         func, ret); \</div><div class='del'>-                exit(1); \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error ret(%d), errno(%d)\n", func,  \</div><div class='add'>+                    ret, errno);                                               \</div><div class='add'>+            exit(1);                                                           \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+#define LOG_IF_NO_ERR(func, ret)                                               \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret == 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : hasn't returned error %d\n", func, ret);     \</div><div class='add'>+            exit(1);                                                           \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> #define GLAPI_UUID_LENGTH 16</div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t                     *fs = NULL;</div><div class='del'>-        glfs_t                     *fs2 = NULL;</div><div class='del'>-        int                         ret = 0, i;</div><div class='del'>-        glfs_fd_t                  *fd = NULL;</div><div class='del'>-        char                       *filename = "/a1";</div><div class='del'>-        char                       *filename2 = "/a2";</div><div class='del'>-        struct                      stat sb = {0, };</div><div class='del'>-        char                       *logfile = NULL;</div><div class='del'>-        char                       *volname = NULL;</div><div class='del'>-        char                       *hostname = NULL;</div><div class='del'>-        int                         cnt = 1;</div><div class='del'>-        int                         upcall_received = 0;</div><div class='del'>-        struct glfs_upcall         *cbk = NULL;</div><div class='del'>-        struct glfs_object         *root = NULL, *leaf = NULL;</div><div class='del'>-        unsigned char               globjhdl[GFAPI_HANDLE_LENGTH];</div><div class='del'>-        unsigned char               globjhdl2[GFAPI_HANDLE_LENGTH];</div><div class='del'>-</div><div class='del'>-        fprintf (stderr, "Starting libgfapi_fini\n");</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_t *fs2 = NULL;</div><div class='add'>+    int ret = 0, i;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *filename = "/a1";</div><div class='add'>+    char *filename2 = "/a2";</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    int cnt = 1;</div><div class='add'>+    int upcall_received = 0;</div><div class='add'>+    struct glfs_upcall *cbk = NULL;</div><div class='add'>+    struct glfs_object *root = NULL, *leaf = NULL;</div><div class='add'>+    unsigned char globjhdl[GFAPI_HANDLE_LENGTH];</div><div class='add'>+    unsigned char globjhdl2[GFAPI_HANDLE_LENGTH];</div><div class='add'>+</div><div class='add'>+    fprintf(stderr, "Starting libgfapi_fini\n");</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    /* This does not block, but enables caching of events. Real</div><div class='add'>+     * applications like NFS-Ganesha run this in a thread before activity</div><div class='add'>+     * on the fs (through this instance) happens. */</div><div class='add'>+    ret = glfs_h_poll_upcall(fs, &amp;cbk);</div><div class='add'>+    LOG_ERR("glfs_h_poll_upcall", ret);</div><div class='add'>+</div><div class='add'>+    fs2 = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs2, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs2, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs2);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    sleep(2);</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (!root) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_h_lookupat root", ret);</div><div class='add'>+    }</div><div class='add'>+    leaf = glfs_h_lookupat(fs, root, filename, &amp;sb, 0);</div><div class='add'>+    if (!leaf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_IF_NO_ERR("glfs_h_lookupat leaf", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    root = glfs_h_lookupat(fs2, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (!root) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_h_lookupat root", ret);</div><div class='add'>+    }</div><div class='add'>+    leaf = glfs_h_creat(fs2, root, filename, O_RDWR, 0644, &amp;sb);</div><div class='add'>+    if (!leaf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_h_lookupat leaf", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs_h_create leaf - %p\n", leaf);</div><div class='add'>+</div><div class='add'>+    while (cnt++ &lt; 5 &amp;&amp; !upcall_received) {</div><div class='add'>+        enum glfs_upcall_reason reason = 0;</div><div class='add'>+        struct glfs_upcall_inode *in_arg = NULL;</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='add'>+        ret = glfs_h_poll_upcall(fs, &amp;cbk);</div><div class='add'>+        LOG_ERR("glfs_h_poll_upcall", ret);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto retry;</div><div class='ctx'> </div><div class='add'>+        reason = glfs_upcall_get_reason(cbk);</div><div class='add'>+        fprintf(stderr, "Upcall received(%d)\n", reason);</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+        if (reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='add'>+            struct glfs_object *object = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+            in_arg = glfs_upcall_get_event(cbk);</div><div class='add'>+            object = glfs_upcall_inode_get_object(in_arg);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+            ret = glfs_h_extract_handle(root, globjhdl + GLAPI_UUID_LENGTH,</div><div class='add'>+                                        GFAPI_HANDLE_LENGTH);</div><div class='add'>+            LOG_ERR("glfs_h_extract_handle", (ret != 16));</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='add'>+            ret = glfs_h_extract_handle(object, globjhdl2 + GLAPI_UUID_LENGTH,</div><div class='add'>+                                        GFAPI_HANDLE_LENGTH);</div><div class='add'>+            LOG_ERR("glfs_h_extract_handle", (ret != 16));</div><div class='ctx'> </div><div class='del'>-        /* This does not block, but enables caching of events. Real</div><div class='del'>-         * applications like NFS-Ganesha run this in a thread before activity</div><div class='del'>-         * on the fs (through this instance) happens. */</div><div class='del'>-        ret = glfs_h_poll_upcall(fs, &amp;cbk);</div><div class='del'>-        LOG_ERR ("glfs_h_poll_upcall", ret);</div><div class='del'>-</div><div class='del'>-        fs2 = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='add'>+            if (memcmp(globjhdl + GLAPI_UUID_LENGTH,</div><div class='add'>+                       globjhdl2 + GLAPI_UUID_LENGTH, 16)) {</div><div class='add'>+                fprintf(stderr, "Error: gfid mismatch\n");</div><div class='add'>+                exit(1);</div><div class='add'>+            }</div><div class='add'>+            upcall_received = 1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs2, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs2, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs2);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='add'>+    retry:</div><div class='add'>+        if (!upcall_received)</div><div class='add'>+            sleep(1); /* glfs_h_poll_upcall() does not block */</div><div class='ctx'> </div><div class='del'>-        sleep (2);</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (!root) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_h_lookupat root", ret);</div><div class='del'>-        }</div><div class='del'>-        leaf = glfs_h_lookupat (fs, root, filename, &amp;sb, 0);</div><div class='del'>-        if (!leaf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_IF_NO_ERR ("glfs_h_lookupat leaf", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        root = glfs_h_lookupat (fs2, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (!root) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_h_lookupat root", ret);</div><div class='del'>-        }</div><div class='del'>-        leaf = glfs_h_creat (fs2, root, filename, O_RDWR, 0644, &amp;sb);</div><div class='del'>-        if (!leaf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_h_lookupat leaf", ret);</div><div class='del'>-        }</div><div class='del'>-        fprintf (stderr, "glfs_h_create leaf - %p\n", leaf);</div><div class='del'>-</div><div class='del'>-        while (cnt++ &lt; 5 &amp;&amp; !upcall_received) {</div><div class='del'>-                enum glfs_upcall_reason     reason = 0;</div><div class='del'>-                struct glfs_upcall_inode   *in_arg = NULL;</div><div class='del'>-</div><div class='del'>-                ret = glfs_h_poll_upcall(fs, &amp;cbk);</div><div class='del'>-                LOG_ERR ("glfs_h_poll_upcall", ret);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto retry;</div><div class='del'>-</div><div class='del'>-                reason = glfs_upcall_get_reason (cbk);</div><div class='del'>-                fprintf (stderr, "Upcall received(%d)\n", reason);</div><div class='del'>-</div><div class='del'>-                if (reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='del'>-                        struct glfs_object *object = NULL;</div><div class='del'>-</div><div class='del'>-                        in_arg = glfs_upcall_get_event (cbk);</div><div class='del'>-                        object = glfs_upcall_inode_get_object (in_arg);</div><div class='del'>-</div><div class='del'>-                        ret = glfs_h_extract_handle (root,</div><div class='del'>-                                                     globjhdl+GLAPI_UUID_LENGTH,</div><div class='del'>-                                                     GFAPI_HANDLE_LENGTH);</div><div class='del'>-                        LOG_ERR("glfs_h_extract_handle", (ret != 16));</div><div class='del'>-</div><div class='del'>-                        ret = glfs_h_extract_handle (object,</div><div class='del'>-                                                  globjhdl2+GLAPI_UUID_LENGTH,</div><div class='del'>-                                                  GFAPI_HANDLE_LENGTH);</div><div class='del'>-                        LOG_ERR("glfs_h_extract_handle", (ret != 16));</div><div class='del'>-</div><div class='del'>-                        if (memcmp (globjhdl+GLAPI_UUID_LENGTH,</div><div class='del'>-                                    globjhdl2+GLAPI_UUID_LENGTH, 16)) {</div><div class='del'>-                                fprintf (stderr, "Error: gfid mismatch\n");</div><div class='del'>-                                exit (1);</div><div class='del'>-                        }</div><div class='del'>-                        upcall_received = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-retry:</div><div class='del'>-                if (!upcall_received)</div><div class='del'>-                        sleep (1); /* glfs_h_poll_upcall() does not block */</div><div class='del'>-</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        glfs_free (cbk);</div><div class='del'>-                        cbk = NULL;</div><div class='del'>-                }</div><div class='add'>+        if (!ret) {</div><div class='add'>+            glfs_free(cbk);</div><div class='add'>+            cbk = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!upcall_received) {</div><div class='del'>-                fprintf (stderr, "Error: Upcall not received\n");</div><div class='del'>-                exit (1);</div><div class='del'>-        }</div><div class='add'>+    if (!upcall_received) {</div><div class='add'>+        fprintf(stderr, "Error: Upcall not received\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fini(fs);</div><div class='del'>-        LOG_ERR("glfs_fini", ret);</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    LOG_ERR("glfs_fini", ret);</div><div class='ctx'> </div><div class='del'>-        fprintf (stderr, "End of libgfapi_fini\n");</div><div class='add'>+    fprintf(stderr, "End of libgfapi_fini\n");</div><div class='ctx'> </div><div class='del'>-        exit(0);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/bug1613098.c b/tests/basic/gfapi/bug1613098.c<br/>index cdb69fdedfa..ee67e97a034 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug1613098.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/bug1613098.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/bug1613098.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/bug1613098.c</a></div><div class='hunk'>@@ -6,90 +6,91 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define ACL_TYPE_ACCESS	(0x8000)</div><div class='add'>+#define ACL_TYPE_ACCESS (0x8000)</div><div class='ctx'> </div><div class='del'>-#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label) do { \</div><div class='del'>-        if (ret &lt; 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto label; \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret &lt; 0) {                                                         \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             flags = O_RDWR|O_SYNC;</div><div class='del'>-        glfs_t         *fs = NULL;</div><div class='del'>-        glfs_fd_t      *fd = NULL;</div><div class='del'>-        char           *volname = NULL;</div><div class='del'>-        char           *logfile = NULL;</div><div class='del'>-        const char     *filename = "file_tmp";</div><div class='del'>-        struct glfs_object *object = NULL;</div><div class='del'>-        acl_t          acl = NULL;</div><div class='del'>-        struct stat    sb;</div><div class='del'>-</div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        volname = argv[1];</div><div class='del'>-        logfile = argv[2];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs)</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_new", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", "localhost", 24007);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_volfile_server", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_logging", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_init", ret, out);</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat(fs, filename, flags, 0044);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_creat", ret, out);</div><div class='del'>-        }</div><div class='del'>-        glfs_close(fd);</div><div class='del'>-</div><div class='del'>-        object = glfs_h_lookupat(fs, NULL, filename, NULL, 0);</div><div class='del'>-        if (object == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_h_lookupat", ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_chown(fs, filename, 99, 99);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_chown", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_setfsuid(99);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_setfsuid", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_setfsgid(99);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_setfsgid", ret, out);</div><div class='del'>-</div><div class='del'>-        acl = glfs_h_acl_get(fs, object, ACL_TYPE_ACCESS);</div><div class='del'>-        if (acl == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_h_acl_get", ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_h_acl_set(fs, object, ACL_TYPE_ACCESS, acl);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_h_acl_get", ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int flags = O_RDWR | O_SYNC;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    const char *filename = "file_tmp";</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    acl_t acl = NULL;</div><div class='add'>+    struct stat sb;</div><div class='add'>+</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    volname = argv[1];</div><div class='add'>+    logfile = argv[2];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs)</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_new", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", "localhost", 24007);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, filename, flags, 0044);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_creat", ret, out);</div><div class='add'>+    }</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+</div><div class='add'>+    object = glfs_h_lookupat(fs, NULL, filename, NULL, 0);</div><div class='add'>+    if (object == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_h_lookupat", ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_chown(fs, filename, 99, 99);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_chown", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_setfsuid(99);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_setfsuid", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_setfsgid(99);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_setfsgid", ret, out);</div><div class='add'>+</div><div class='add'>+    acl = glfs_h_acl_get(fs, object, ACL_TYPE_ACCESS);</div><div class='add'>+    if (acl == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_h_acl_get", ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_h_acl_set(fs, object, ACL_TYPE_ACCESS, acl);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_h_acl_get", ret, out);</div><div class='ctx'> out:</div><div class='del'>-        glfs_setfsuid(0);</div><div class='del'>-        glfs_setfsgid(0);</div><div class='add'>+    glfs_setfsuid(0);</div><div class='add'>+    glfs_setfsgid(0);</div><div class='ctx'> </div><div class='del'>-        if (object)</div><div class='del'>-                glfs_h_close(object);</div><div class='add'>+    if (object)</div><div class='add'>+        glfs_h_close(object);</div><div class='ctx'> </div><div class='del'>-        if (fs)</div><div class='del'>-                glfs_fini(fs);</div><div class='add'>+    if (fs)</div><div class='add'>+        glfs_fini(fs);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/gfapi-async-calls-test.c b/tests/basic/gfapi/gfapi-async-calls-test.c<br/>index b9f29a44ac0..5a291c3c76b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-async-calls-test.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/gfapi-async-calls-test.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-async-calls-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-async-calls-test.c</a></div><div class='hunk'>@@ -9,170 +9,164 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(msg) do { \</div><div class='del'>-        fprintf (stderr, "%s : Error (%s)\n", msg, strerror (errno)); \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(msg)                                                           \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        fprintf(stderr, "%s : Error (%s)\n", msg, strerror(errno));            \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int cbk_complete = 0;</div><div class='ctx'> int cbk_ret_val = -1;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fill_iov (struct iovec *iov, char fillchar, int count)</div><div class='add'>+fill_iov(struct iovec *iov, char fillchar, int count)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        iov-&gt;iov_base = malloc (count + 1);</div><div class='del'>-        if (iov-&gt;iov_base == NULL) {</div><div class='del'>-                return ret;</div><div class='del'>-        } else {</div><div class='del'>-                iov-&gt;iov_len = count;</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        memset (iov-&gt;iov_base, fillchar, count);</div><div class='del'>-        memset (iov-&gt;iov_base + count, '\0', 1);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    iov-&gt;iov_base = malloc(count + 1);</div><div class='add'>+    if (iov-&gt;iov_base == NULL) {</div><div class='ctx'>         return ret;</div><div class='add'>+    } else {</div><div class='add'>+        iov-&gt;iov_len = count;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    memset(iov-&gt;iov_base, fillchar, count);</div><div class='add'>+    memset(iov-&gt;iov_base + count, '\0', 1);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> glfs_t *</div><div class='del'>-init_glfs (const char *hostname, const char *volname,</div><div class='del'>-           const char *logfile)</div><div class='add'>+init_glfs(const char *hostname, const char *volname, const char *logfile)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='del'>-        glfs_t *fs      = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                LOG_ERR ("glfs_new failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_volfile_server failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_logging failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        LOG_ERR("glfs_new failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_volfile_server failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_logging failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                glfs_fini (fs);</div><div class='del'>-                fs = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        glfs_fini(fs);</div><div class='add'>+        fs = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-write_async_cbk (glfs_fd_t *fd, ssize_t ret, struct stat *prestat,</div><div class='del'>-                 struct stat *poststat, void *cookie)</div><div class='add'>+write_async_cbk(glfs_fd_t *fd, ssize_t ret, struct stat *prestat,</div><div class='add'>+                struct stat *poststat, void *cookie)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_write failed");</div><div class='del'>-        }</div><div class='del'>-        cbk_ret_val = ret;</div><div class='del'>-        cbk_complete = 1;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_write failed");</div><div class='add'>+    }</div><div class='add'>+    cbk_ret_val = ret;</div><div class='add'>+    cbk_complete = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-write_async (glfs_t *fs, glfs_fd_t *glfd, int char_count)</div><div class='add'>+write_async(glfs_t *fs, glfs_fd_t *glfd, int char_count)</div><div class='ctx'> {</div><div class='del'>-        ssize_t         ret          = -1;</div><div class='del'>-        int             flags        = O_RDWR;</div><div class='del'>-        const char     *buff         = "This is from my prog\n";</div><div class='del'>-        struct iovec    iov          = {0};</div><div class='del'>-        void           *write_cookie = NULL;</div><div class='del'>-        void           *read_cookie  = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = fill_iov (&amp;iov, 'a', char_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                LOG_ERR ("failed to create iov");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        write_cookie = strdup ("write_cookie");</div><div class='del'>-        ret = glfs_pwritev_async (glfd, &amp;iov, 1, 0, flags, write_async_cbk,</div><div class='del'>-                                  &amp;write_cookie);</div><div class='add'>+    ssize_t ret = -1;</div><div class='add'>+    int flags = O_RDWR;</div><div class='add'>+    const char *buff = "This is from my prog\n";</div><div class='add'>+    struct iovec iov = {0};</div><div class='add'>+    void *write_cookie = NULL;</div><div class='add'>+    void *read_cookie = NULL;</div><div class='add'>+</div><div class='add'>+    ret = fill_iov(&amp;iov, 'a', char_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        LOG_ERR("failed to create iov");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    write_cookie = strdup("write_cookie");</div><div class='add'>+    ret = glfs_pwritev_async(glfd, &amp;iov, 1, 0, flags, write_async_cbk,</div><div class='add'>+                             &amp;write_cookie);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_pwritev async failed");</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_pwritev async failed");</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int         ret      = 0;</div><div class='del'>-        char       *hostname = NULL;</div><div class='del'>-        char       *volname  = NULL;</div><div class='del'>-        char       *logfile  = NULL;</div><div class='del'>-        glfs_t     *fs       = NULL;</div><div class='del'>-        const char *filename = "glfs_test.txt";</div><div class='del'>-        int         flags    = (O_RDWR|O_CREAT);</div><div class='del'>-        glfs_fd_t  *glfd     = NULL;</div><div class='del'>-        int         count    = 200;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = init_glfs (hostname, volname, logfile);</div><div class='del'>-        if (fs == NULL) {</div><div class='del'>-                LOG_ERR ("init_glfs failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfd = glfs_creat (fs, filename, flags, 0644);</div><div class='del'>-        if (glfd == NULL) {</div><div class='del'>-                LOG_ERR ("glfs_creat failed");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = write_async (fs, glfd, count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                LOG_ERR ("glfs_test_function failed");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (cbk_complete != 1) {</div><div class='del'>-                sleep(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (glfd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs close  failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * skipping fini</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (cbk_ret_val == count)</div><div class='del'>-                return 0;</div><div class='del'>-        else</div><div class='del'>-                return -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    const char *filename = "glfs_test.txt";</div><div class='add'>+    int flags = (O_RDWR | O_CREAT);</div><div class='add'>+    glfs_fd_t *glfd = NULL;</div><div class='add'>+    int count = 200;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = init_glfs(hostname, volname, logfile);</div><div class='add'>+    if (fs == NULL) {</div><div class='add'>+        LOG_ERR("init_glfs failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_creat(fs, filename, flags, 0644);</div><div class='add'>+    if (glfd == NULL) {</div><div class='add'>+        LOG_ERR("glfs_creat failed");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = write_async(fs, glfd, count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        LOG_ERR("glfs_test_function failed");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (cbk_complete != 1) {</div><div class='add'>+        sleep(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(glfd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs close  failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * skipping fini</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (cbk_ret_val == count)</div><div class='add'>+        return 0;</div><div class='add'>+    else</div><div class='add'>+        return -1;</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/gfapi-dup.c b/tests/basic/gfapi/gfapi-dup.c<br/>index 96f133eae33..028108e4590 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-dup.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/gfapi-dup.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-dup.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-dup.c</a></div><div class='hunk'>@@ -4,81 +4,81 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label) do { \</div><div class='del'>-        if (ret &lt; 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto label; \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret &lt; 0) {                                                         \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             flags = O_RDWR|O_SYNC;</div><div class='del'>-        glfs_t         *fs = NULL;</div><div class='del'>-        glfs_fd_t      *fd1 = NULL;</div><div class='del'>-        glfs_fd_t      *fd2 = NULL;</div><div class='del'>-        char           *volname = NULL;</div><div class='del'>-        char           *logfile = NULL;</div><div class='del'>-        char           *hostname = NULL;</div><div class='del'>-        const char     *filename = "file_tmp";</div><div class='del'>-        const char     *buff = "An opinion should be the result of thought, "</div><div class='del'>-                                "not a substitute for it.";</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs)</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_new", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_volfile_server", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_logging", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_init", ret, out);</div><div class='del'>-</div><div class='del'>-        fd1 = glfs_creat(fs, filename, flags, 0644);</div><div class='del'>-        if (fd1 == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_creat", ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_write (fd1, buff, strlen (buff), flags);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_write", ret, out);</div><div class='del'>-</div><div class='del'>-        fd2 = glfs_dup(fd1);</div><div class='del'>-        if (fd2 == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_dup", ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_lseek (fd2, 0, SEEK_SET);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_lseek", ret, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int flags = O_RDWR | O_SYNC;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    const char *filename = "file_tmp";</div><div class='add'>+    const char *buff =</div><div class='add'>+        "An opinion should be the result of thought, "</div><div class='add'>+        "not a substitute for it.";</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs)</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_new", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);</div><div class='add'>+</div><div class='add'>+    fd1 = glfs_creat(fs, filename, flags, 0644);</div><div class='add'>+    if (fd1 == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_creat", ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_write(fd1, buff, strlen(buff), flags);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_write", ret, out);</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_dup(fd1);</div><div class='add'>+    if (fd2 == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_dup", ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_lseek(fd2, 0, SEEK_SET);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_lseek", ret, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd1 != NULL)</div><div class='del'>-                glfs_close(fd1);</div><div class='del'>-        if (fd2 != NULL)</div><div class='del'>-                glfs_close(fd2);</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                if (ret)</div><div class='del'>-                        fprintf (stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd1 != NULL)</div><div class='add'>+        glfs_close(fd1);</div><div class='add'>+    if (fd2 != NULL)</div><div class='add'>+        glfs_close(fd2);</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        if (ret)</div><div class='add'>+            fprintf(stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/gfapi-load-volfile.c b/tests/basic/gfapi/gfapi-load-volfile.c<br/>index 79502f7a44f..fbfc6045cd7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-load-volfile.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/gfapi-load-volfile.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-load-volfile.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-load-volfile.c</a></div><div class='hunk'>@@ -16,50 +16,50 @@</div><div class='ctx'> void</div><div class='ctx'> usage(FILE *output)</div><div class='ctx'> {</div><div class='del'>-	fprintf(output, "Usage: " PROGNAME " &lt;volfile&gt;\n");</div><div class='add'>+    fprintf(output, "Usage: " PROGNAME " &lt;volfile&gt;\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='ctx'> </div><div class='del'>-	if (argc != 2) {</div><div class='del'>-		usage(stderr);</div><div class='del'>-		exit(EXIT_FAILURE);</div><div class='del'>-	}</div><div class='add'>+    if (argc != 2) {</div><div class='add'>+        usage(stderr);</div><div class='add'>+        exit(EXIT_FAILURE);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "-h")) {</div><div class='del'>-		usage(stdout);</div><div class='del'>-		exit(EXIT_SUCCESS);</div><div class='del'>-	}</div><div class='add'>+    if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "-h")) {</div><div class='add'>+        usage(stdout);</div><div class='add'>+        exit(EXIT_SUCCESS);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	fs = glfs_new(PROGNAME);</div><div class='del'>-	if (!fs) {</div><div class='del'>-		perror("glfs_new failed");</div><div class='del'>-		exit(EXIT_FAILURE);</div><div class='del'>-	}</div><div class='add'>+    fs = glfs_new(PROGNAME);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        perror("glfs_new failed");</div><div class='add'>+        exit(EXIT_FAILURE);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	glfs_set_logging(fs, PROGNAME ".log", 9);</div><div class='add'>+    glfs_set_logging(fs, PROGNAME ".log", 9);</div><div class='ctx'> </div><div class='del'>-	ret = glfs_set_volfile(fs, argv[1]);</div><div class='del'>-	if (ret) {</div><div class='del'>-		perror("glfs_set_volfile failed");</div><div class='del'>-		ret = EXIT_FAILURE;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    ret = glfs_set_volfile(fs, argv[1]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        perror("glfs_set_volfile failed");</div><div class='add'>+        ret = EXIT_FAILURE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = glfs_init(fs);</div><div class='del'>-	if (ret) {</div><div class='del'>-		perror("glfs_init failed");</div><div class='del'>-		ret = EXIT_FAILURE;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret) {</div><div class='add'>+        perror("glfs_init failed");</div><div class='add'>+        ret = EXIT_FAILURE;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = EXIT_SUCCESS;</div><div class='add'>+    ret = EXIT_SUCCESS;</div><div class='ctx'> out:</div><div class='del'>-	glfs_fini(fs);</div><div class='add'>+    glfs_fini(fs);</div><div class='ctx'> </div><div class='del'>-	exit(ret);</div><div class='add'>+    exit(ret);</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/gfapi-ssl-test.c b/tests/basic/gfapi/gfapi-ssl-test.c<br/>index 41126bdc6db..a27b5233702 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-ssl-test.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/gfapi-ssl-test.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-ssl-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-ssl-test.c</a></div><div class='hunk'>@@ -9,118 +9,116 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(msg) do { \</div><div class='del'>-        fprintf (stderr, "%s : Error (%s)\n", msg, strerror (errno)); \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(msg)                                                           \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        fprintf(stderr, "%s : Error (%s)\n", msg, strerror(errno));            \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> glfs_t *</div><div class='del'>-init_glfs (const char *hostname, const char *volname,</div><div class='del'>-           const char *logfile)</div><div class='add'>+init_glfs(const char *hostname, const char *volname, const char *logfile)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='del'>-        glfs_t *fs      = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                LOG_ERR ("glfs_new failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_volfile_server failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_logging failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        LOG_ERR("glfs_new failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_volfile_server failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_logging failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                glfs_fini (fs);</div><div class='del'>-                fs = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        glfs_fini(fs);</div><div class='add'>+        fs = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-glfs_test_function (const char *hostname, const char *volname,</div><div class='del'>-                    const char *logfile)</div><div class='add'>+glfs_test_function(const char *hostname, const char *volname,</div><div class='add'>+                   const char *logfile)</div><div class='ctx'> {</div><div class='del'>-        int             ret      = -1;</div><div class='del'>-        int             flags    = O_CREAT | O_RDWR;</div><div class='del'>-        glfs_t         *fs       = NULL;</div><div class='del'>-        glfs_fd_t      *glfd     = NULL;</div><div class='del'>-        const char     *buff     = "This is from my prog\n";</div><div class='del'>-        const char     *filename = "glfs_test.txt";</div><div class='del'>-</div><div class='del'>-        fs = init_glfs (hostname, volname, logfile);</div><div class='del'>-        if (fs == NULL) {</div><div class='del'>-                LOG_ERR ("init_glfs failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfd = glfs_creat (fs, filename, flags, 0644);</div><div class='del'>-        if (glfd == NULL) {</div><div class='del'>-                LOG_ERR ("glfs_creat failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_write (glfd, buff, strlen (buff), flags);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_write failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (glfd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_write failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int flags = O_CREAT | O_RDWR;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *glfd = NULL;</div><div class='add'>+    const char *buff = "This is from my prog\n";</div><div class='add'>+    const char *filename = "glfs_test.txt";</div><div class='add'>+</div><div class='add'>+    fs = init_glfs(hostname, volname, logfile);</div><div class='add'>+    if (fs == NULL) {</div><div class='add'>+        LOG_ERR("init_glfs failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfd = glfs_creat(fs, filename, flags, 0644);</div><div class='add'>+    if (glfd == NULL) {</div><div class='add'>+        LOG_ERR("glfs_creat failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_write(glfd, buff, strlen(buff), flags);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_write failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(glfd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_write failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ret = glfs_fini (fs);</div><div class='del'>-        if (ret) {</div><div class='del'>-                LOG_ERR ("glfs_fini failed");</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    if (ret) {</div><div class='add'>+        LOG_ERR("glfs_fini failed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int   ret = 0;</div><div class='del'>-        char *hostname = NULL;</div><div class='del'>-        char *volname = NULL;</div><div class='del'>-        char *logfile = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        ret = glfs_test_function (hostname, volname, logfile);</div><div class='del'>-        if (ret) {</div><div class='del'>-                LOG_ERR ("glfs_test_function failed");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    ret = glfs_test_function(hostname, volname, logfile);</div><div class='add'>+    if (ret) {</div><div class='add'>+        LOG_ERR("glfs_test_function failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/gfapi-trunc.c b/tests/basic/gfapi/gfapi-trunc.c<br/>index af187e50c78..769f6cfa1d9 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-trunc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/gfapi-trunc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/gfapi-trunc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/gfapi-trunc.c</a></div><div class='hunk'>@@ -5,86 +5,85 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label) do { \</div><div class='del'>-        if (ret &lt; 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto label; \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define WRITE_SIZE      4096</div><div class='del'>-#define TRUNC_SIZE      1234</div><div class='add'>+#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret &lt; 0) {                                                         \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define WRITE_SIZE 4096</div><div class='add'>+#define TRUNC_SIZE 1234</div><div class='ctx'> /* Make sure TRUNC_SIZE is smaller than WRITE_SIZE at compile time. */</div><div class='del'>-typedef char _size_check[WRITE_SIZE-TRUNC_SIZE];</div><div class='add'>+typedef char _size_check[WRITE_SIZE - TRUNC_SIZE];</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             flags = O_RDWR|O_SYNC;</div><div class='del'>-        glfs_t         *fs = NULL;</div><div class='del'>-        glfs_fd_t      *fd1 = NULL;</div><div class='del'>-        char           *volname = NULL;</div><div class='del'>-        char           *logfile = NULL;</div><div class='del'>-        const char     *filename = "file_tmp";</div><div class='del'>-        const char     buff[WRITE_SIZE];</div><div class='del'>-        struct stat    sb;</div><div class='del'>-</div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        volname = argv[1];</div><div class='del'>-        logfile = argv[2];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs)</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_new", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", "localhost", 24007);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_volfile_server", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_logging", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_init", ret, out);</div><div class='del'>-</div><div class='del'>-        fd1 = glfs_creat(fs, filename, flags, 0644);</div><div class='del'>-        if (fd1 == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_creat", ret, out);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_write (fd1, buff, WRITE_SIZE, flags);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_write", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_truncate (fs, filename, TRUNC_SIZE);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_truncate", ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_fstat (fd1, &amp;sb);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_fstat", ret, out);</div><div class='del'>-</div><div class='del'>-        if (sb.st_size != TRUNC_SIZE) {</div><div class='del'>-                fprintf (stderr, "wrong size %jd should be %jd\n",</div><div class='del'>-                         (intmax_t)sb.st_size, (intmax_t)2048);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int flags = O_RDWR | O_SYNC;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    const char *filename = "file_tmp";</div><div class='add'>+    const char buff[WRITE_SIZE];</div><div class='add'>+    struct stat sb;</div><div class='add'>+</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    volname = argv[1];</div><div class='add'>+    logfile = argv[2];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs)</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_new", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", "localhost", 24007);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);</div><div class='add'>+</div><div class='add'>+    fd1 = glfs_creat(fs, filename, flags, 0644);</div><div class='add'>+    if (fd1 == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_creat", ret, out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_write(fd1, buff, WRITE_SIZE, flags);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_write", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_truncate(fs, filename, TRUNC_SIZE);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_truncate", ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_fstat(fd1, &amp;sb);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_fstat", ret, out);</div><div class='add'>+</div><div class='add'>+    if (sb.st_size != TRUNC_SIZE) {</div><div class='add'>+        fprintf(stderr, "wrong size %jd should be %jd\n", (intmax_t)sb.st_size,</div><div class='add'>+                (intmax_t)2048);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd1 != NULL)</div><div class='del'>-                glfs_close(fd1);</div><div class='del'>-        if (fs) {</div><div class='del'>-                /*</div><div class='del'>-                 * If this fails (as it does on Special Snowflake NetBSD for no</div><div class='del'>-                 * good reason), it shouldn't affect the result of the test.</div><div class='del'>-                 */</div><div class='del'>-                (void) glfs_fini(fs);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd1 != NULL)</div><div class='add'>+        glfs_close(fd1);</div><div class='add'>+    if (fs) {</div><div class='add'>+        /*</div><div class='add'>+         * If this fails (as it does on Special Snowflake NetBSD for no</div><div class='add'>+         * good reason), it shouldn't affect the result of the test.</div><div class='add'>+         */</div><div class='add'>+        (void)glfs_fini(fs);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/glfd-lkowner.c b/tests/basic/gfapi/glfd-lkowner.c<br/>index 031a076683c..ec0429dc3c4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/glfd-lkowner.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/glfd-lkowner.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/glfd-lkowner.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/glfd-lkowner.c</a></div><div class='hunk'>@@ -13,200 +13,202 @@</div><div class='ctx'> </div><div class='ctx'> int gfapi = 1;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto out; \</div><div class='del'>-        } else { \</div><div class='del'>-               fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> char lownera[8] = "lownera", lownerb[8] = "lownerb";</div><div class='ctx'> char lownerc[8] = "lownerc";</div><div class='ctx'> </div><div class='del'>-int lock_test (glfs_fd_t *glfd1, glfs_fd_t *glfd2, bool should_fail,</div><div class='del'>-               int l1_start, int l1_len, char *l1_owner, int lo1_len,</div><div class='del'>-               int l2_start, int l2_len, char *l2_owner, int lo2_len)</div><div class='add'>+int</div><div class='add'>+lock_test(glfs_fd_t *glfd1, glfs_fd_t *glfd2, bool should_fail, int l1_start,</div><div class='add'>+          int l1_len, char *l1_owner, int lo1_len, int l2_start, int l2_len,</div><div class='add'>+          char *l2_owner, int lo2_len)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1, f_ret = -1;</div><div class='del'>-        struct flock lock1 = {0, }, lock2 = {0, };</div><div class='add'>+    int ret = -1, f_ret = -1;</div><div class='add'>+    struct flock lock1 =</div><div class='add'>+                     {</div><div class='add'>+                         0,</div><div class='add'>+                     },</div><div class='add'>+                 lock2 = {</div><div class='add'>+                     0,</div><div class='add'>+                 };</div><div class='ctx'> </div><div class='ctx'> lock1:</div><div class='del'>-        if (!glfd1)</div><div class='del'>-                goto lock2;</div><div class='add'>+    if (!glfd1)</div><div class='add'>+        goto lock2;</div><div class='ctx'> </div><div class='del'>-        /* lock on glfd1 */</div><div class='del'>-        lock1.l_type = F_WRLCK;</div><div class='del'>-        lock1.l_whence = SEEK_SET;</div><div class='del'>-        lock1.l_start = l1_start;</div><div class='del'>-        lock1.l_len = l1_len;</div><div class='add'>+    /* lock on glfd1 */</div><div class='add'>+    lock1.l_type = F_WRLCK;</div><div class='add'>+    lock1.l_whence = SEEK_SET;</div><div class='add'>+    lock1.l_start = l1_start;</div><div class='add'>+    lock1.l_len = l1_len;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fd_set_lkowner (glfd1, l1_owner, lo1_len);</div><div class='del'>-        LOG_ERR ("glfs_fd_set_lkowner on glfd1", ret);</div><div class='add'>+    ret = glfs_fd_set_lkowner(glfd1, l1_owner, lo1_len);</div><div class='add'>+    LOG_ERR("glfs_fd_set_lkowner on glfd1", ret);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_posix_lock (glfd1, F_SETLK, &amp;lock1);</div><div class='del'>-        LOG_ERR ("glfs_posix_lock on glfd1", ret);</div><div class='add'>+    ret = glfs_posix_lock(glfd1, F_SETLK, &amp;lock1);</div><div class='add'>+    LOG_ERR("glfs_posix_lock on glfd1", ret);</div><div class='ctx'> </div><div class='ctx'> lock2:</div><div class='del'>-        if (!glfd2)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* lock on glfd2 */</div><div class='del'>-        lock2.l_type = F_WRLCK;</div><div class='del'>-        lock2.l_whence = SEEK_SET;</div><div class='del'>-        lock2.l_start = l2_start;</div><div class='del'>-        lock2.l_len = l2_len;</div><div class='del'>-</div><div class='del'>-        ret = glfs_fd_set_lkowner (glfd2, l2_owner, lo2_len);</div><div class='del'>-        LOG_ERR ("glfs_fd_set_lkowner on glfd2", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_posix_lock (glfd2, F_SETLK, &amp;lock2);</div><div class='del'>-</div><div class='del'>-        if (should_fail &amp;&amp; ret) {</div><div class='del'>-                f_ret = 0;</div><div class='del'>-        } else if (!ret &amp;&amp; !should_fail) {</div><div class='del'>-                f_ret = 0;</div><div class='del'>-        } else {</div><div class='del'>-                f_ret = -1;</div><div class='del'>-        }</div><div class='add'>+    if (!glfd2)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* lock on glfd2 */</div><div class='add'>+    lock2.l_type = F_WRLCK;</div><div class='add'>+    lock2.l_whence = SEEK_SET;</div><div class='add'>+    lock2.l_start = l2_start;</div><div class='add'>+    lock2.l_len = l2_len;</div><div class='add'>+</div><div class='add'>+    ret = glfs_fd_set_lkowner(glfd2, l2_owner, lo2_len);</div><div class='add'>+    LOG_ERR("glfs_fd_set_lkowner on glfd2", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_posix_lock(glfd2, F_SETLK, &amp;lock2);</div><div class='add'>+</div><div class='add'>+    if (should_fail &amp;&amp; ret) {</div><div class='add'>+        f_ret = 0;</div><div class='add'>+    } else if (!ret &amp;&amp; !should_fail) {</div><div class='add'>+        f_ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        f_ret = -1;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        fprintf (stderr, "Lock test on glfd1 (start(%d), len(%d),"</div><div class='del'>-                         " lk_owner(%s)) and glfd2 (start(%d), len(%d), "</div><div class='del'>-                         "lk_owner(%s)) - expected(%s) - result(%s)\n",</div><div class='del'>-                         l1_start, l1_len, l1_owner, l2_start, l2_len, l2_owner,</div><div class='del'>-                         (should_fail ? "FAIL" : "SUCCESS"),</div><div class='del'>-                         (ret ? "FAIL" : "SUCCESS"));</div><div class='del'>-        return f_ret;</div><div class='add'>+    fprintf(stderr,</div><div class='add'>+            "Lock test on glfd1 (start(%d), len(%d),"</div><div class='add'>+            " lk_owner(%s)) and glfd2 (start(%d), len(%d), "</div><div class='add'>+            "lk_owner(%s)) - expected(%s) - result(%s)\n",</div><div class='add'>+            l1_start, l1_len, l1_owner, l2_start, l2_len, l2_owner,</div><div class='add'>+            (should_fail ? "FAIL" : "SUCCESS"), (ret ? "FAIL" : "SUCCESS"));</div><div class='add'>+    return f_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        int        ret = 0, i, status = 0;</div><div class='del'>-        glfs_fd_t *fd1 = NULL;</div><div class='del'>-        glfs_fd_t *fd2 = NULL;</div><div class='del'>-        glfs_fd_t *fd3 = NULL;</div><div class='del'>-        char      *filename = "file_tmp";</div><div class='del'>-        char      *volname = NULL;</div><div class='del'>-        char      *logfile = NULL;</div><div class='del'>-        char      *hostname = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        fd1 = glfs_creat(fs, filename, O_RDWR|O_SYNC, 0644);</div><div class='del'>-        if (fd1 &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_creat", ret);</div><div class='del'>-        }</div><div class='del'>-        fprintf (stderr, "glfs-create fd1 - %d\n", fd1);</div><div class='del'>-</div><div class='del'>-        fd2 = glfs_dup(fd1);</div><div class='del'>-        fprintf (stderr, "glfs-dup fd2 - %d\n", fd2);</div><div class='del'>-</div><div class='del'>-        fd3 = glfs_open(fs, filename, O_RDWR|O_SYNC);</div><div class='del'>-        if (fd2 &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_open", ret);</div><div class='del'>-        }</div><div class='del'>-        fprintf (stderr, "glfs-open fd3 - %d\n", fd3);</div><div class='del'>-</div><div class='del'>-        /* TEST 1: Conflicting ranges, same lk_owner</div><div class='del'>-         * lock1 (0, 10, lownera)</div><div class='del'>-         * lock2 (5, 10, lownera)</div><div class='del'>-         * Expected: should not fail but get merged</div><div class='del'>-         */</div><div class='del'>-        ret = lock_test (fd1, fd2, false, 0, 10, lownera, 8,</div><div class='del'>-                         5, 10, lownera, 8);</div><div class='del'>-        LOG_ERR ("==== glfs_lock_test_1", ret);</div><div class='del'>-</div><div class='del'>-        /* TEST 2: Conflicting ranges, different lk_owner</div><div class='del'>-         * lock1 (0, 10, lownera) - already taken</div><div class='del'>-         * lock2 (5, 10, lownerb)</div><div class='del'>-         * Expected: should fail and not get merged</div><div class='del'>-         */</div><div class='del'>-        ret = lock_test (NULL, fd2, true, 0, 10, lownera, 8,</div><div class='del'>-                         5, 10, lownerb, 8);</div><div class='del'>-        LOG_ERR ("==== glfs_lock_test_2", ret);</div><div class='del'>-</div><div class='del'>-        /* TEST 3: Different ranges, same lk_owner</div><div class='del'>-         * lock1 (0, 10, lownera) - already taken</div><div class='del'>-         * lock2 (30, 10, lownera)</div><div class='del'>-         * Expected: should not fail</div><div class='del'>-         */</div><div class='del'>-        ret = lock_test (NULL, fd2, false, 0, 10, lownera, 8,</div><div class='del'>-                         30, 10, lownera, 8);</div><div class='del'>-        LOG_ERR ("==== glfs_lock_test_3", ret);</div><div class='del'>-</div><div class='del'>-        /* TEST 4: Conflicting ranges, different lk_owner</div><div class='del'>-         * lock1 (0, 10, lownera) - already taken</div><div class='del'>-         * lock2 (50, 10, lownerb)</div><div class='del'>-         * Expected: should not fail</div><div class='del'>-         */</div><div class='del'>-        ret = lock_test (NULL, fd2, false, 0, 10, lownera, 8,</div><div class='del'>-                         50, 10, lownerb, 8);</div><div class='del'>-        LOG_ERR ("==== glfs_lock_test_4", ret);</div><div class='del'>-</div><div class='del'>-        /* TEST 5: Close fd1 &amp; retry TEST2</div><div class='del'>-         * lock1 (not applicable)</div><div class='del'>-         * lock2 (5, 10, lownerb)</div><div class='del'>-         * Expected: should succeed now</div><div class='del'>-         */</div><div class='del'>-        ret = glfs_close(fd1);</div><div class='del'>-        LOG_ERR ("glfs_close", ret);</div><div class='del'>-</div><div class='del'>-        ret = lock_test (NULL, fd2, false, 0, 10, lownera, 8,</div><div class='del'>-                         5, 10, lownerb, 8);</div><div class='del'>-        LOG_ERR ("==== glfs_lock_test_5", ret);</div><div class='del'>-</div><div class='del'>-        /* TEST 6: Check closing fd1 doesn't flush fd2 locks</div><div class='del'>-         * retry TEST 4 but with fd2 and fd3.</div><div class='del'>-         * lock1 (50, 10, lownerb) - already taken</div><div class='del'>-         * lock2 (55, 10, lownerc)</div><div class='del'>-         * Expected: should fail</div><div class='del'>-         */</div><div class='del'>-        ret = lock_test (NULL, fd3, true, 50, 10, lownerb, 8,</div><div class='del'>-                         55, 10, lownerc, 8);</div><div class='del'>-        LOG_ERR ("==== glfs_lock_test_6", ret);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0, i, status = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    glfs_fd_t *fd3 = NULL;</div><div class='add'>+    char *filename = "file_tmp";</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    fd1 = glfs_creat(fs, filename, O_RDWR | O_SYNC, 0644);</div><div class='add'>+    if (fd1 &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_creat", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs-create fd1 - %d\n", fd1);</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_dup(fd1);</div><div class='add'>+    fprintf(stderr, "glfs-dup fd2 - %d\n", fd2);</div><div class='add'>+</div><div class='add'>+    fd3 = glfs_open(fs, filename, O_RDWR | O_SYNC);</div><div class='add'>+    if (fd2 &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_open", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs-open fd3 - %d\n", fd3);</div><div class='add'>+</div><div class='add'>+    /* TEST 1: Conflicting ranges, same lk_owner</div><div class='add'>+     * lock1 (0, 10, lownera)</div><div class='add'>+     * lock2 (5, 10, lownera)</div><div class='add'>+     * Expected: should not fail but get merged</div><div class='add'>+     */</div><div class='add'>+    ret = lock_test(fd1, fd2, false, 0, 10, lownera, 8, 5, 10, lownera, 8);</div><div class='add'>+    LOG_ERR("==== glfs_lock_test_1", ret);</div><div class='add'>+</div><div class='add'>+    /* TEST 2: Conflicting ranges, different lk_owner</div><div class='add'>+     * lock1 (0, 10, lownera) - already taken</div><div class='add'>+     * lock2 (5, 10, lownerb)</div><div class='add'>+     * Expected: should fail and not get merged</div><div class='add'>+     */</div><div class='add'>+    ret = lock_test(NULL, fd2, true, 0, 10, lownera, 8, 5, 10, lownerb, 8);</div><div class='add'>+    LOG_ERR("==== glfs_lock_test_2", ret);</div><div class='add'>+</div><div class='add'>+    /* TEST 3: Different ranges, same lk_owner</div><div class='add'>+     * lock1 (0, 10, lownera) - already taken</div><div class='add'>+     * lock2 (30, 10, lownera)</div><div class='add'>+     * Expected: should not fail</div><div class='add'>+     */</div><div class='add'>+    ret = lock_test(NULL, fd2, false, 0, 10, lownera, 8, 30, 10, lownera, 8);</div><div class='add'>+    LOG_ERR("==== glfs_lock_test_3", ret);</div><div class='add'>+</div><div class='add'>+    /* TEST 4: Conflicting ranges, different lk_owner</div><div class='add'>+     * lock1 (0, 10, lownera) - already taken</div><div class='add'>+     * lock2 (50, 10, lownerb)</div><div class='add'>+     * Expected: should not fail</div><div class='add'>+     */</div><div class='add'>+    ret = lock_test(NULL, fd2, false, 0, 10, lownera, 8, 50, 10, lownerb, 8);</div><div class='add'>+    LOG_ERR("==== glfs_lock_test_4", ret);</div><div class='add'>+</div><div class='add'>+    /* TEST 5: Close fd1 &amp; retry TEST2</div><div class='add'>+     * lock1 (not applicable)</div><div class='add'>+     * lock2 (5, 10, lownerb)</div><div class='add'>+     * Expected: should succeed now</div><div class='add'>+     */</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    LOG_ERR("glfs_close", ret);</div><div class='add'>+</div><div class='add'>+    ret = lock_test(NULL, fd2, false, 0, 10, lownera, 8, 5, 10, lownerb, 8);</div><div class='add'>+    LOG_ERR("==== glfs_lock_test_5", ret);</div><div class='add'>+</div><div class='add'>+    /* TEST 6: Check closing fd1 doesn't flush fd2 locks</div><div class='add'>+     * retry TEST 4 but with fd2 and fd3.</div><div class='add'>+     * lock1 (50, 10, lownerb) - already taken</div><div class='add'>+     * lock2 (55, 10, lownerc)</div><div class='add'>+     * Expected: should fail</div><div class='add'>+     */</div><div class='add'>+    ret = lock_test(NULL, fd3, true, 50, 10, lownerb, 8, 55, 10, lownerc, 8);</div><div class='add'>+    LOG_ERR("==== glfs_lock_test_6", ret);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        ret = glfs_close(fd2);</div><div class='del'>-        LOG_ERR ("glfs_close", ret);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    LOG_ERR("glfs_close", ret);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close(fd3);</div><div class='del'>-        LOG_ERR ("glfs_close", ret);</div><div class='add'>+    ret = glfs_close(fd3);</div><div class='add'>+    LOG_ERR("glfs_close", ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                exit(1);</div><div class='del'>-        exit(0);</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/glfs_sysrq.c b/tests/basic/gfapi/glfs_sysrq.c<br/>index c843c2a3559..13e06be6df2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/glfs_sysrq.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/glfs_sysrq.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/glfs_sysrq.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/glfs_sysrq.c</a></div><div class='hunk'>@@ -10,52 +10,51 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        /* cmdline arguments */</div><div class='del'>-        char   *host    = NULL;</div><div class='del'>-        char   *volume  = NULL;</div><div class='del'>-        char   *logfile = NULL;</div><div class='del'>-</div><div class='del'>-        /* other variables */</div><div class='del'>-        glfs_t *fs      = NULL;</div><div class='del'>-        int     ret     = 0;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Usage: %s &lt;host&gt; &lt;volume&gt; &lt;logfile&gt;\n",</div><div class='del'>-                         argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        host = argv[1];</div><div class='del'>-        volume = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volume);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", host, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* checking of the results is easier in the script running this test */</div><div class='del'>-        glfs_sysrq (fs, GLFS_SYSRQ_HELP);</div><div class='del'>-        glfs_sysrq (fs, GLFS_SYSRQ_STATEDUMP);</div><div class='del'>-</div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    /* cmdline arguments */</div><div class='add'>+    char *host = NULL;</div><div class='add'>+    char *volume = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+</div><div class='add'>+    /* other variables */</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Usage: %s &lt;host&gt; &lt;volume&gt; &lt;logfile&gt;\n", argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    host = argv[1];</div><div class='add'>+    volume = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volume);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", host, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* checking of the results is easier in the script running this test */</div><div class='add'>+    glfs_sysrq(fs, GLFS_SYSRQ_HELP);</div><div class='add'>+    glfs_sysrq(fs, GLFS_SYSRQ_STATEDUMP);</div><div class='add'>+</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/glfs_xreaddirplus_r.c b/tests/basic/gfapi/glfs_xreaddirplus_r.c<br/>index 17f4d1b1d57..0c4c79123eb 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/glfs_xreaddirplus_r.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/glfs_xreaddirplus_r.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/glfs_xreaddirplus_r.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/glfs_xreaddirplus_r.c</a></div><div class='hunk'>@@ -6,237 +6,237 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> #include &lt;time.h&gt;</div><div class='ctx'> </div><div class='del'>-#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label) do { \</div><div class='del'>-        if (ret &lt; 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto label; \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR(func, bool_var, ret, label) do { \</div><div class='del'>-        if (!bool_var) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error (%s)\n", \</div><div class='del'>-                         func, strerror (errno)); \</div><div class='del'>-                ret = -1;                         \</div><div class='del'>-                goto label; \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret &lt; 0) {                                                         \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR(func, bool_var, ret, label)      \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!bool_var) {                                                       \</div><div class='add'>+            fprintf(stderr, "%s : returned error (%s)\n", func,                \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            ret = -1;                                                          \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> #define MAX_FILES_CREATE 10</div><div class='del'>-#define MAXPATHNAME      512</div><div class='add'>+#define MAXPATHNAME 512</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-assimilatetime (struct timespec *ts, struct timespec ts_st,</div><div class='del'>-                struct timespec ts_ed)</div><div class='add'>+assimilatetime(struct timespec *ts, struct timespec ts_st,</div><div class='add'>+               struct timespec ts_ed)</div><div class='ctx'> {</div><div class='del'>-        if ((ts_ed.tv_nsec - ts_st.tv_nsec) &lt; 0) {</div><div class='del'>-                ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec - 1;</div><div class='del'>-                ts-&gt;tv_nsec += 1000000000 + ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='del'>-        } else {</div><div class='del'>-                ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec;</div><div class='del'>-                ts-&gt;tv_nsec += ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ts-&gt;tv_nsec &gt; 1000000000) {</div><div class='del'>-                ts-&gt;tv_nsec = ts-&gt;tv_nsec - 1000000000;</div><div class='del'>-                ts-&gt;tv_sec += 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    if ((ts_ed.tv_nsec - ts_st.tv_nsec) &lt; 0) {</div><div class='add'>+        ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec - 1;</div><div class='add'>+        ts-&gt;tv_nsec += 1000000000 + ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='add'>+    } else {</div><div class='add'>+        ts-&gt;tv_sec += ts_ed.tv_sec - ts_st.tv_sec;</div><div class='add'>+        ts-&gt;tv_nsec += ts_ed.tv_nsec - ts_st.tv_nsec;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ts-&gt;tv_nsec &gt; 1000000000) {</div><div class='add'>+        ts-&gt;tv_nsec = ts-&gt;tv_nsec - 1000000000;</div><div class='add'>+        ts-&gt;tv_sec += 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Returns '%' difference between ts1 &amp; ts2</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-comparetime (struct timespec ts1, struct timespec ts2)</div><div class='add'>+comparetime(struct timespec ts1, struct timespec ts2)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ts1_n, ts2_n;</div><div class='del'>-        int pct = 0;</div><div class='add'>+    uint64_t ts1_n, ts2_n;</div><div class='add'>+    int pct = 0;</div><div class='ctx'> </div><div class='del'>-        ts1_n = (ts1.tv_sec * 1000000000) + ts1.tv_nsec;</div><div class='del'>-        ts2_n = (ts2.tv_sec * 1000000000) + ts2.tv_nsec;</div><div class='add'>+    ts1_n = (ts1.tv_sec * 1000000000) + ts1.tv_nsec;</div><div class='add'>+    ts2_n = (ts2.tv_sec * 1000000000) + ts2.tv_nsec;</div><div class='ctx'> </div><div class='del'>-        pct = ((ts1_n - ts2_n)*100)/ts1_n;</div><div class='add'>+    pct = ((ts1_n - ts2_n) * 100) / ts1_n;</div><div class='ctx'> </div><div class='del'>-        return pct;</div><div class='add'>+    return pct;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-old_readdir (glfs_t *fs)</div><div class='add'>+old_readdir(glfs_t *fs)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_object     *root = NULL;</div><div class='del'>-        struct glfs_fd         *fd = NULL;</div><div class='del'>-        struct stat            *sb = NULL;</div><div class='del'>-        char buf[512];</div><div class='del'>-        struct dirent          *entry = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        struct glfs_object     *glhandle = NULL;</div><div class='del'>-</div><div class='del'>-        if (!fs)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", sb, 0);</div><div class='del'>-        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_h_lookupat", !!root, ret, out);</div><div class='del'>-</div><div class='del'>-        fd = glfs_opendir (fs, "/");</div><div class='del'>-        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_opendir", !!fd, ret, out);</div><div class='del'>-</div><div class='del'>-        while (glfs_readdir_r (fd, (struct dirent *)buf, &amp;entry), entry) {</div><div class='del'>-                if (strcmp(entry-&gt;d_name, ".") &amp;&amp; strcmp(entry-&gt;d_name, "..")) {</div><div class='del'>-                        glhandle = glfs_h_lookupat (fs, root, "/", sb, 0);</div><div class='del'>-                        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_h_lookupat", !!glhandle, ret, out);</div><div class='del'>-                }</div><div class='add'>+    struct glfs_object *root = NULL;</div><div class='add'>+    struct glfs_fd *fd = NULL;</div><div class='add'>+    struct stat *sb = NULL;</div><div class='add'>+    char buf[512];</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct glfs_object *glhandle = NULL;</div><div class='add'>+</div><div class='add'>+    if (!fs)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", sb, 0);</div><div class='add'>+    VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_h_lookupat", !!root, ret, out);</div><div class='add'>+</div><div class='add'>+    fd = glfs_opendir(fs, "/");</div><div class='add'>+    VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_opendir", !!fd, ret, out);</div><div class='add'>+</div><div class='add'>+    while (glfs_readdir_r(fd, (struct dirent *)buf, &amp;entry), entry) {</div><div class='add'>+        if (strcmp(entry-&gt;d_name, ".") &amp;&amp; strcmp(entry-&gt;d_name, "..")) {</div><div class='add'>+            glhandle = glfs_h_lookupat(fs, root, "/", sb, 0);</div><div class='add'>+            VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_h_lookupat", !!glhandle,</div><div class='add'>+                                                  ret, out);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfs_closedir (fd);</div><div class='add'>+    glfs_closedir(fd);</div><div class='ctx'> </div><div class='del'>-        ret  = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-new_xreaddirplus (glfs_t *fs)</div><div class='add'>+new_xreaddirplus(glfs_t *fs)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_fd         *fd = NULL;</div><div class='del'>-        struct stat            *sb = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        uint32_t                rflags = (GFAPI_XREADDIRP_STAT |</div><div class='del'>-                                          GFAPI_XREADDIRP_HANDLE);</div><div class='del'>-        struct glfs_xreaddirp_stat   *xstat = NULL;</div><div class='del'>-        struct dirent           de;</div><div class='del'>-        struct dirent          *pde = NULL;</div><div class='del'>-        struct glfs_object     *glhandle = NULL;</div><div class='del'>-</div><div class='del'>-        if (!fs)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        fd = glfs_opendir (fs, "/");</div><div class='del'>-        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_opendir", !!fd, ret, out);</div><div class='del'>-</div><div class='del'>-        ret = glfs_xreaddirplus_r(fd, rflags, &amp;xstat, &amp;de, &amp;pde);</div><div class='del'>-        while (ret &gt; 0 &amp;&amp; pde != NULL) {</div><div class='del'>-                if (xstat) {</div><div class='del'>-                        sb = glfs_xreaddirplus_get_stat (xstat);</div><div class='del'>-                        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_xreaddirplus_get_stat", !!sb, ret, out);</div><div class='del'>-</div><div class='del'>-                        if (strcmp(de.d_name, ".") &amp;&amp; strcmp(de.d_name, "..")) {</div><div class='del'>-                                glhandle = glfs_xreaddirplus_get_object (xstat);</div><div class='del'>-                                VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_xreaddirplus_get_object", !!glhandle, ret, out);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (xstat) {</div><div class='del'>-                        glfs_free(xstat);</div><div class='del'>-                        xstat = NULL;</div><div class='del'>-                }</div><div class='add'>+    struct glfs_fd *fd = NULL;</div><div class='add'>+    struct stat *sb = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t rflags = (GFAPI_XREADDIRP_STAT | GFAPI_XREADDIRP_HANDLE);</div><div class='add'>+    struct glfs_xreaddirp_stat *xstat = NULL;</div><div class='add'>+    struct dirent de;</div><div class='add'>+    struct dirent *pde = NULL;</div><div class='add'>+    struct glfs_object *glhandle = NULL;</div><div class='add'>+</div><div class='add'>+    if (!fs)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    fd = glfs_opendir(fs, "/");</div><div class='add'>+    VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_opendir", !!fd, ret, out);</div><div class='add'>+</div><div class='add'>+    ret = glfs_xreaddirplus_r(fd, rflags, &amp;xstat, &amp;de, &amp;pde);</div><div class='add'>+    while (ret &gt; 0 &amp;&amp; pde != NULL) {</div><div class='add'>+        if (xstat) {</div><div class='add'>+            sb = glfs_xreaddirplus_get_stat(xstat);</div><div class='add'>+            VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_xreaddirplus_get_stat",</div><div class='add'>+                                                  !!sb, ret, out);</div><div class='add'>+</div><div class='add'>+            if (strcmp(de.d_name, ".") &amp;&amp; strcmp(de.d_name, "..")) {</div><div class='add'>+                glhandle = glfs_xreaddirplus_get_object(xstat);</div><div class='add'>+                VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR(</div><div class='add'>+                    "glfs_xreaddirplus_get_object", !!glhandle, ret, out);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = glfs_xreaddirplus_r(fd, rflags, &amp;xstat, &amp;de, &amp;pde);</div><div class='add'>+        if (xstat) {</div><div class='add'>+            glfs_free(xstat);</div><div class='add'>+            xstat = NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_xreaddirp_r", ret, out);</div><div class='add'>+        ret = glfs_xreaddirplus_r(fd, rflags, &amp;xstat, &amp;de, &amp;pde);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_xreaddirp_r", ret, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xstat)</div><div class='del'>-                glfs_free(xstat);</div><div class='add'>+    if (xstat)</div><div class='add'>+        glfs_free(xstat);</div><div class='ctx'> </div><div class='del'>-        ret  = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        glfs_t                 *fs = NULL;</div><div class='del'>-        char                   *volname = NULL;</div><div class='del'>-        char                   *logfile = NULL;</div><div class='del'>-        char                   *hostname = NULL;</div><div class='del'>-        char                   *my_file = "file_";</div><div class='del'>-        char                    my_file_name[MAXPATHNAME];</div><div class='del'>-        uint32_t                flags = O_RDWR|O_SYNC;</div><div class='del'>-        struct glfs_fd         *fd = NULL;</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        int                     pct = 0;</div><div class='del'>-        struct timespec         timestamp = {0, 0}, st_timestamp, ed_timestamp;</div><div class='del'>-        struct timespec         otimestamp = {0, 0}, ost_timestamp, oed_timestamp;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *my_file = "file_";</div><div class='add'>+    char my_file_name[MAXPATHNAME];</div><div class='add'>+    uint32_t flags = O_RDWR | O_SYNC;</div><div class='add'>+    struct glfs_fd *fd = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int pct = 0;</div><div class='add'>+    struct timespec timestamp = {0, 0}, st_timestamp, ed_timestamp;</div><div class='add'>+    struct timespec otimestamp = {0, 0}, ost_timestamp, oed_timestamp;</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_new", !!fs, ret, out);</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_volfile_server", ret, out);</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_new", !!fs, ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_set_logging", ret, out);</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("glfs_init", ret, out);</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; MAX_FILES_CREATE; i++) {</div><div class='del'>-                sprintf (my_file_name, "%s%d", my_file, i);</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);</div><div class='ctx'> </div><div class='del'>-                fd = glfs_creat(fs, my_file_name, flags, 0644);</div><div class='del'>-                VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR ("glfs_creat", !!fd, ret, out);</div><div class='add'>+    for (i = 0; i &lt; MAX_FILES_CREATE; i++) {</div><div class='add'>+        sprintf(my_file_name, "%s%d", my_file, i);</div><div class='ctx'> </div><div class='del'>-                glfs_close (fd);</div><div class='del'>-        }</div><div class='add'>+        fd = glfs_creat(fs, my_file_name, flags, 0644);</div><div class='add'>+        VALIDATE_BOOL_AND_GOTO_LABEL_ON_ERROR("glfs_creat", !!fd, ret, out);</div><div class='ctx'> </div><div class='del'>-        /* measure performance using old readdir call and new xreaddirplus call and compare */</div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;ost_timestamp);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("clock_gettime", ret, out);</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = old_readdir (fs);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("old_readdir", ret, out);</div><div class='add'>+    /* measure performance using old readdir call and new xreaddirplus call and</div><div class='add'>+     * compare */</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;ost_timestamp);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("clock_gettime", ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;oed_timestamp);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("clock_gettime", ret, out);</div><div class='add'>+    ret = old_readdir(fs);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("old_readdir", ret, out);</div><div class='ctx'> </div><div class='del'>-        assimilatetime (&amp;otimestamp, ost_timestamp, oed_timestamp);</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;oed_timestamp);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("clock_gettime", ret, out);</div><div class='ctx'> </div><div class='del'>-        printf ("\tOverall time using readdir:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='del'>-                otimestamp.tv_sec, otimestamp.tv_nsec);</div><div class='add'>+    assimilatetime(&amp;otimestamp, ost_timestamp, oed_timestamp);</div><div class='ctx'> </div><div class='add'>+    printf("\tOverall time using readdir:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='add'>+           otimestamp.tv_sec, otimestamp.tv_nsec);</div><div class='ctx'> </div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;st_timestamp);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("clock_gettime", ret, out);</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;st_timestamp);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("clock_gettime", ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = new_xreaddirplus (fs);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("new_xreaddirplus", ret, out);</div><div class='add'>+    ret = new_xreaddirplus(fs);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("new_xreaddirplus", ret, out);</div><div class='ctx'> </div><div class='del'>-        ret = clock_gettime (CLOCK_REALTIME, &amp;ed_timestamp);</div><div class='del'>-        VALIDATE_AND_GOTO_LABEL_ON_ERROR ("clock_gettime", ret, out);</div><div class='add'>+    ret = clock_gettime(CLOCK_REALTIME, &amp;ed_timestamp);</div><div class='add'>+    VALIDATE_AND_GOTO_LABEL_ON_ERROR("clock_gettime", ret, out);</div><div class='ctx'> </div><div class='del'>-        assimilatetime (&amp;timestamp, st_timestamp, ed_timestamp);</div><div class='add'>+    assimilatetime(&amp;timestamp, st_timestamp, ed_timestamp);</div><div class='ctx'> </div><div class='del'>-        printf ("\tOverall time using xreaddirplus:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='del'>-                timestamp.tv_sec, timestamp.tv_nsec);</div><div class='add'>+    printf("\tOverall time using xreaddirplus:\n\t\tSecs:%ld\n\t\tnSecs:%ld\n",</div><div class='add'>+           timestamp.tv_sec, timestamp.tv_nsec);</div><div class='ctx'> </div><div class='add'>+    pct = comparetime(otimestamp, timestamp);</div><div class='add'>+    printf("There is improvement by %d%%\n", pct);</div><div class='ctx'> </div><div class='del'>-        pct = comparetime (otimestamp, timestamp);</div><div class='del'>-        printf ("There is improvement by %d%%\n", pct);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                if (ret)</div><div class='del'>-                        fprintf (stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='del'>-        }</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        if (ret)</div><div class='add'>+            fprintf(stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/libgfapi-fini-hang.c b/tests/basic/gfapi/libgfapi-fini-hang.c<br/>index e192751f295..37800e3188b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/libgfapi-fini-hang.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/libgfapi-fini-hang.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/libgfapi-fini-hang.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/libgfapi-fini-hang.c</a></div><div class='hunk'>@@ -8,56 +8,55 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d\n", func, ret); \</div><div class='del'>-                exit(1); \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-} while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d\n", func, ret);            \</div><div class='add'>+            exit(1);                                                           \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        int        ret = 0, i;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        char       readbuf[32];</div><div class='del'>-        char      *logname = NULL;</div><div class='del'>-        char      *hostname = NULL;</div><div class='del'>-        char      *volname = NULL;</div><div class='del'>-</div><div class='del'>-        fprintf (stderr, "Starting libgfapi_fini\n");</div><div class='del'>-</div><div class='del'>-        if (argc &lt; 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logname = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 0);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logname, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        /* Do not call glfs_init.</div><div class='del'>-         * glfs_fini() shouldn't hang in that case*/</div><div class='del'>-        ret = glfs_fini(fs);</div><div class='del'>-        LOG_ERR("glfs_fini", ret);</div><div class='del'>-        fprintf (stderr, "End of libgfapi_fini\n");</div><div class='del'>-</div><div class='del'>-        exit(0);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0, i;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char readbuf[32];</div><div class='add'>+    char *logname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+</div><div class='add'>+    fprintf(stderr, "Starting libgfapi_fini\n");</div><div class='add'>+</div><div class='add'>+    if (argc &lt; 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logname = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 0);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logname, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    /* Do not call glfs_init.</div><div class='add'>+     * glfs_fini() shouldn't hang in that case*/</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    LOG_ERR("glfs_fini", ret);</div><div class='add'>+    fprintf(stderr, "End of libgfapi_fini\n");</div><div class='add'>+</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/mandatory-lock-optimal.c b/tests/basic/gfapi/mandatory-lock-optimal.c<br/>index 4142258c06d..34fef8d0b80 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/mandatory-lock-optimal.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/mandatory-lock-optimal.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/mandatory-lock-optimal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/mandatory-lock-optimal.c</a></div><div class='hunk'>@@ -1,11 +1,13 @@</div><div class='ctx'> /* Pre-requisites:-</div><div class='ctx'>  *</div><div class='del'>- * 1. Make sure that performance translators are switched off while running this test.</div><div class='add'>+ * 1. Make sure that performance translators are switched off while running this</div><div class='add'>+ * test.</div><div class='ctx'>  * 2. Perform the following volume set operation:</div><div class='ctx'>  *    # gluster volume set &lt;VOLNAME&gt; locks.mandatory-locking optimal</div><div class='ctx'>  * 3. For installation under non-standard paths, export LD_LIBRARY_PATH to</div><div class='ctx'>  *    automatically load exact libgfapi.so and compile this C file as follows:</div><div class='del'>- *    $ gcc mandatory-lock-optimal.c -lgfapi -I &lt;include path for api/glfs.h&gt; -L &lt;include path for libgfapi shared library&gt;</div><div class='add'>+ *    $ gcc mandatory-lock-optimal.c -lgfapi -I &lt;include path for api/glfs.h&gt; -L</div><div class='add'>+ * &lt;include path for libgfapi shared library&gt;</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include &lt;errno.h&gt;</div><div class='hunk'>@@ -70,434 +72,461 @@ off_t offset;</div><div class='ctx'>    Expected result : First write should fail with EAGAIN.</div><div class='ctx'>                      Second write should pass. */</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, err) do {                                                         \</div><div class='del'>-        if (!fp)                                                                        \</div><div class='del'>-                fprintf (stderr, "\n%s : returned error (%s)\n", func, strerror (err)); \</div><div class='del'>-        else                                                                            \</div><div class='del'>-                fprintf (fp, "\n%s : returned error (%s)\n", func, strerror (err));     \</div><div class='del'>-        cleanup_and_exit (err);                                                         \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-void cleanup_and_exit (int exit_status) {</div><div class='del'>-        if (exit_status || test_count != TOTAL_TEST_COUNT) {</div><div class='del'>-                fprintf (fp, "\nAborting due to some test failures.\n");</div><div class='del'>-                exit_status = 1;</div><div class='del'>-        } else</div><div class='del'>-                fprintf (fp, "\nAll tests ran successfully.\n");</div><div class='del'>-        if (fp)</div><div class='del'>-                fclose (fp);</div><div class='del'>-        if (fd)</div><div class='del'>-                glfs_close (fd);</div><div class='del'>-        if (fd1)</div><div class='del'>-                glfs_close (fd1);</div><div class='del'>-        if (fd2)</div><div class='del'>-                glfs_close (fd2);</div><div class='del'>-</div><div class='del'>-        glfs_unlink (fs1, fname);</div><div class='del'>-</div><div class='del'>-        if (fs1)</div><div class='del'>-                glfs_fini (fs1);</div><div class='del'>-        if (fs2)</div><div class='del'>-                glfs_fini (fs2);</div><div class='del'>-</div><div class='del'>-        exit (exit_status);</div><div class='add'>+#define LOG_ERR(func, err)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!fp)                                                               \</div><div class='add'>+            fprintf(stderr, "\n%s : returned error (%s)\n", func,              \</div><div class='add'>+                    strerror(err));                                            \</div><div class='add'>+        else                                                                   \</div><div class='add'>+            fprintf(fp, "\n%s : returned error (%s)\n", func, strerror(err));  \</div><div class='add'>+        cleanup_and_exit(err);                                                 \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+cleanup_and_exit(int exit_status)</div><div class='add'>+{</div><div class='add'>+    if (exit_status || test_count != TOTAL_TEST_COUNT) {</div><div class='add'>+        fprintf(fp, "\nAborting due to some test failures.\n");</div><div class='add'>+        exit_status = 1;</div><div class='add'>+    } else</div><div class='add'>+        fprintf(fp, "\nAll tests ran successfully.\n");</div><div class='add'>+    if (fp)</div><div class='add'>+        fclose(fp);</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    if (fd1)</div><div class='add'>+        glfs_close(fd1);</div><div class='add'>+    if (fd2)</div><div class='add'>+        glfs_close(fd2);</div><div class='add'>+</div><div class='add'>+    glfs_unlink(fs1, fname);</div><div class='add'>+</div><div class='add'>+    if (fs1)</div><div class='add'>+        glfs_fini(fs1);</div><div class='add'>+    if (fs2)</div><div class='add'>+        glfs_fini(fs2);</div><div class='add'>+</div><div class='add'>+    exit(exit_status);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-glfs_t *new_client_create (char *hostname, char *volname, char *logfile_name) {</div><div class='del'>-        glfs_t *fs = NULL;</div><div class='add'>+glfs_t *</div><div class='add'>+new_client_create(char *hostname, char *volname, char *logfile_name)</div><div class='add'>+{</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs)</div><div class='del'>-                LOG_ERR ("glfs_new", errno);</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs)</div><div class='add'>+        LOG_ERR("glfs_new", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_set_volfile_server", errno);</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_set_volfile_server", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, logfile_name, 7);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_set_logging", errno);</div><div class='add'>+    ret = glfs_set_logging(fs, logfile_name, 7);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_set_logging", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_init", errno);</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_init", errno);</div><div class='ctx'> </div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_1 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='del'>-</div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='del'>-</div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='del'>-</div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        /* On successful read, 0 is returned as there is no content inside the</div><div class='del'>-         * file</div><div class='del'>-         */</div><div class='del'>-        ret = glfs_read (fd2, buf1, 10, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_read", errno);</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='del'>-</div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+void</div><div class='add'>+run_test_1(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='add'>+</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    /* On successful read, 0 is returned as there is no content inside the</div><div class='add'>+     * file</div><div class='add'>+     */</div><div class='add'>+    ret = glfs_read(fd2, buf1, 10, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_read", errno);</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='add'>+</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_2 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+void</div><div class='add'>+run_test_2(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='ctx'> </div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_WRONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_WRONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_write (fd2, buf2, 10, 0);</div><div class='del'>-        if (ret == 10 || errno != EAGAIN)</div><div class='del'>-                LOG_ERR ("glfs_write", errno);</div><div class='add'>+    ret = glfs_write(fd2, buf2, 10, 0);</div><div class='add'>+    if (ret == 10 || errno != EAGAIN)</div><div class='add'>+        LOG_ERR("glfs_write", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='ctx'> </div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_3 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='del'>-</div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_WRONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        lock.l_type = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='del'>-</div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='del'>-</div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        /* Still there is no content inside file. So following read should</div><div class='del'>-         * return 0</div><div class='del'>-         */</div><div class='del'>-        ret = glfs_read (fd2, buf1, 10, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_read", errno);</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='del'>-</div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+void</div><div class='add'>+run_test_3(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_WRONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='add'>+</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    /* Still there is no content inside file. So following read should</div><div class='add'>+     * return 0</div><div class='add'>+     */</div><div class='add'>+    ret = glfs_read(fd2, buf1, 10, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_read", errno);</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='add'>+</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_4 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+void</div><div class='add'>+run_test_4(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='ctx'> </div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_WRONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_WRONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        lock.l_type = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_WRONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_WRONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_write (fd2, buf2, 10, 0);</div><div class='del'>-        if (ret != 10)</div><div class='del'>-                LOG_ERR ("glfs_write", errno);</div><div class='add'>+    ret = glfs_write(fd2, buf2, 10, 0);</div><div class='add'>+    if (ret != 10)</div><div class='add'>+        LOG_ERR("glfs_write", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='ctx'> </div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_5 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+void</div><div class='add'>+run_test_5(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='ctx'> </div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_RDONLY | O_NONBLOCK | O_TRUNC);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_RDONLY | O_NONBLOCK | O_TRUNC);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='ctx'> </div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_6 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+void</div><div class='add'>+run_test_6(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='ctx'> </div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_RDONLY | O_NONBLOCK | O_TRUNC);</div><div class='del'>-        if (fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_RDONLY | O_NONBLOCK | O_TRUNC);</div><div class='add'>+    if (fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='ctx'> </div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_7 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+void</div><div class='add'>+run_test_7(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='ctx'> </div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 5L;</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 5L;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_RDWR | O_NONBLOCK);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_RDWR | O_NONBLOCK);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_ftruncate (fd2, 4, NULL, NULL);</div><div class='del'>-        if (ret == 0 || errno != EAGAIN)</div><div class='del'>-                LOG_ERR ("glfs_ftruncate", errno);</div><div class='add'>+    ret = glfs_ftruncate(fd2, 4, NULL, NULL);</div><div class='add'>+    if (ret == 0 || errno != EAGAIN)</div><div class='add'>+        LOG_ERR("glfs_ftruncate", errno);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='ctx'> </div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void run_test_8 (int i) {</div><div class='del'>-        fprintf (fp, "\nRunning Test-%d . . . ", i);</div><div class='del'>-</div><div class='del'>-        fd1 = glfs_open (fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd1)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 10L;</div><div class='del'>-</div><div class='del'>-        ret = glfs_file_lock (fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='del'>-</div><div class='del'>-        fd2 = glfs_open (fs2, fname, O_RDONLY | O_NONBLOCK);</div><div class='del'>-        if (!fd2)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        lock.l_type = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 5L;</div><div class='del'>-        lock.l_len = 2L;</div><div class='del'>-</div><div class='del'>-        ret = glfs_file_lock (fd2, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_file_lock", errno);</div><div class='del'>-</div><div class='del'>-        fd3 = glfs_open (fs3, fname, O_RDWR | O_NONBLOCK);</div><div class='del'>-        if (!fd3)</div><div class='del'>-                LOG_ERR ("glfs_open", errno);</div><div class='del'>-</div><div class='del'>-        offset = glfs_lseek (fd3, 5L, SEEK_SET);</div><div class='del'>-        if (offset != 5)</div><div class='del'>-                LOG_ERR ("glfs_lseek", errno);</div><div class='del'>-</div><div class='del'>-        ret = glfs_write (fd3, buf2, 10, 0);</div><div class='del'>-        if (ret == 10 || errno != EAGAIN)</div><div class='del'>-                LOG_ERR ("glfs_write", errno);</div><div class='del'>-</div><div class='del'>-        offset = glfs_lseek (fd3, 8L, SEEK_SET);</div><div class='del'>-        if (offset != 8)</div><div class='del'>-                LOG_ERR ("glfs_lseek", errno);</div><div class='del'>-</div><div class='del'>-        ret = glfs_write (fd3, buf2, 10, 0);</div><div class='del'>-        if (ret != 10)</div><div class='del'>-                LOG_ERR ("glfs_write", errno);</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd1 = NULL;</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd2 = NULL;</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd3);</div><div class='del'>-        if (ret)</div><div class='del'>-                LOG_ERR ("glfs_close", errno);</div><div class='del'>-        fd3 = NULL;</div><div class='del'>-</div><div class='del'>-        test_count++;</div><div class='del'>-        fprintf (fp, "OK\n", i);</div><div class='add'>+void</div><div class='add'>+run_test_8(int i)</div><div class='add'>+{</div><div class='add'>+    fprintf(fp, "\nRunning Test-%d . . . ", i);</div><div class='add'>+</div><div class='add'>+    fd1 = glfs_open(fs1, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd1)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 10L;</div><div class='add'>+</div><div class='add'>+    ret = glfs_file_lock(fd1, F_SETLK, &amp;lock, GLFS_LK_ADVISORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_open(fs2, fname, O_RDONLY | O_NONBLOCK);</div><div class='add'>+    if (!fd2)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 5L;</div><div class='add'>+    lock.l_len = 2L;</div><div class='add'>+</div><div class='add'>+    ret = glfs_file_lock(fd2, F_SETLK, &amp;lock, GLFS_LK_MANDATORY);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_file_lock", errno);</div><div class='add'>+</div><div class='add'>+    fd3 = glfs_open(fs3, fname, O_RDWR | O_NONBLOCK);</div><div class='add'>+    if (!fd3)</div><div class='add'>+        LOG_ERR("glfs_open", errno);</div><div class='add'>+</div><div class='add'>+    offset = glfs_lseek(fd3, 5L, SEEK_SET);</div><div class='add'>+    if (offset != 5)</div><div class='add'>+        LOG_ERR("glfs_lseek", errno);</div><div class='add'>+</div><div class='add'>+    ret = glfs_write(fd3, buf2, 10, 0);</div><div class='add'>+    if (ret == 10 || errno != EAGAIN)</div><div class='add'>+        LOG_ERR("glfs_write", errno);</div><div class='add'>+</div><div class='add'>+    offset = glfs_lseek(fd3, 8L, SEEK_SET);</div><div class='add'>+    if (offset != 8)</div><div class='add'>+        LOG_ERR("glfs_lseek", errno);</div><div class='add'>+</div><div class='add'>+    ret = glfs_write(fd3, buf2, 10, 0);</div><div class='add'>+    if (ret != 10)</div><div class='add'>+        LOG_ERR("glfs_write", errno);</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd1 = NULL;</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd2 = NULL;</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd3);</div><div class='add'>+    if (ret)</div><div class='add'>+        LOG_ERR("glfs_close", errno);</div><div class='add'>+    fd3 = NULL;</div><div class='add'>+</div><div class='add'>+    test_count++;</div><div class='add'>+    fprintf(fp, "OK\n", i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int main (int argc, char *argv[]) {</div><div class='del'>-        char logfile[50];</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Usage: %s &lt;server ip/hostname&gt; &lt;volume name&gt; &lt;test log directory&gt;\n", argv[0]);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sprintf (logfile, "%s/%s", argv[3], "mandatory-lock-optimal-test.log");</div><div class='del'>-        fp = fopen (logfile, "w");</div><div class='del'>-        if (!fp) {</div><div class='del'>-                fprintf (stderr, "\n%s\n", logfile);</div><div class='del'>-                LOG_ERR ("Log file creation", errno);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sprintf (logfile, "%s/%s", argv[3], "glfs-client-1.log");</div><div class='del'>-        fs1 = new_client_create (argv[1], argv[2], logfile);</div><div class='del'>-        if (!fs1)</div><div class='del'>-                LOG_ERR ("client-1 creation", EINVAL);</div><div class='del'>-</div><div class='del'>-        sprintf (logfile, "%s/%s", argv[3], "glfs-client-2.log");</div><div class='del'>-        fs2 = new_client_create (argv[1], argv[2], logfile);</div><div class='del'>-        if (!fs2)</div><div class='del'>-                LOG_ERR ("client-2 creation", EINVAL);</div><div class='del'>-</div><div class='del'>-        sprintf (logfile, "%s/%s", argv[3], "glfs-client-3.log");</div><div class='del'>-        fs3 = new_client_create (argv[1], argv[2], logfile);</div><div class='del'>-        if (!fs3)</div><div class='del'>-                LOG_ERR ("client-3 creation", EINVAL);</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat (fs1, fname, O_RDWR, 0644);</div><div class='del'>-        if (!fd)</div><div class='del'>-                LOG_ERR ("glfs_creat", errno);</div><div class='del'>-</div><div class='del'>-        test_count = 0;</div><div class='del'>-</div><div class='del'>-        run_test_1 (1);</div><div class='del'>-        run_test_2 (2);</div><div class='del'>-        run_test_3 (3);</div><div class='del'>-        run_test_4 (4);</div><div class='del'>-        run_test_5 (5);</div><div class='del'>-        run_test_6 (6);</div><div class='del'>-        run_test_7 (7);</div><div class='del'>-        run_test_8 (8);</div><div class='del'>-</div><div class='del'>-        cleanup_and_exit (0);</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='add'>+{</div><div class='add'>+    char logfile[50];</div><div class='ctx'> </div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Usage: %s &lt;server ip/hostname&gt; &lt;volume name&gt; &lt;test log "</div><div class='add'>+                "directory&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(logfile, "%s/%s", argv[3], "mandatory-lock-optimal-test.log");</div><div class='add'>+    fp = fopen(logfile, "w");</div><div class='add'>+    if (!fp) {</div><div class='add'>+        fprintf(stderr, "\n%s\n", logfile);</div><div class='add'>+        LOG_ERR("Log file creation", errno);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(logfile, "%s/%s", argv[3], "glfs-client-1.log");</div><div class='add'>+    fs1 = new_client_create(argv[1], argv[2], logfile);</div><div class='add'>+    if (!fs1)</div><div class='add'>+        LOG_ERR("client-1 creation", EINVAL);</div><div class='add'>+</div><div class='add'>+    sprintf(logfile, "%s/%s", argv[3], "glfs-client-2.log");</div><div class='add'>+    fs2 = new_client_create(argv[1], argv[2], logfile);</div><div class='add'>+    if (!fs2)</div><div class='add'>+        LOG_ERR("client-2 creation", EINVAL);</div><div class='add'>+</div><div class='add'>+    sprintf(logfile, "%s/%s", argv[3], "glfs-client-3.log");</div><div class='add'>+    fs3 = new_client_create(argv[1], argv[2], logfile);</div><div class='add'>+    if (!fs3)</div><div class='add'>+        LOG_ERR("client-3 creation", EINVAL);</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs1, fname, O_RDWR, 0644);</div><div class='add'>+    if (!fd)</div><div class='add'>+        LOG_ERR("glfs_creat", errno);</div><div class='add'>+</div><div class='add'>+    test_count = 0;</div><div class='add'>+</div><div class='add'>+    run_test_1(1);</div><div class='add'>+    run_test_2(2);</div><div class='add'>+    run_test_3(3);</div><div class='add'>+    run_test_4(4);</div><div class='add'>+    run_test_5(5);</div><div class='add'>+    run_test_6(6);</div><div class='add'>+    run_test_7(7);</div><div class='add'>+    run_test_8(8);</div><div class='add'>+</div><div class='add'>+    cleanup_and_exit(0);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/seek.c b/tests/basic/gfapi/seek.c<br/>index fb2f6361bf3..85ea9b88141 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/seek.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/seek.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/seek.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/seek.c</a></div><div class='hunk'>@@ -18,80 +18,82 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        glfs_t      *fs       = NULL;</div><div class='del'>-        int          ret      = 0;</div><div class='del'>-        glfs_fd_t   *fd       = NULL;</div><div class='del'>-        char        *filename = NULL;</div><div class='del'>-        char        *volname  = NULL;</div><div class='del'>-        char        *hostname = NULL;</div><div class='del'>-        struct stat  st       = { 0, };</div><div class='del'>-        off_t        hole_start = 0;</div><div class='del'>-        off_t        hole_end   = 0;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument, use %s &lt;hostname&gt; &lt;vol&gt; &lt;file&gt;\n",</div><div class='del'>-                                 argv[0]);</div><div class='del'>-                exit (1);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    off_t hole_start = 0;</div><div class='add'>+    off_t hole_end = 0;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument, use %s &lt;hostname&gt; &lt;vol&gt; &lt;file&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    filename = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        perror("glfs_new() returned NULL");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfs_set_volfile_server(fs, "tcp", hostname, 24007)) {</div><div class='add'>+        perror("glfs_set_volfile_server");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfs_init(fs)) {</div><div class='add'>+        perror("glfs_init");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_open(fs, filename, O_RDONLY);</div><div class='add'>+    if (fd &lt;= 0) {</div><div class='add'>+        perror("glfs_open");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfs_fstat(fd, &amp;st)) {</div><div class='add'>+        perror("glfs_fstat");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (hole_end &lt; st.st_size) {</div><div class='add'>+        hole_start = glfs_lseek(fd, hole_end, SEEK_HOLE);</div><div class='add'>+        if (hole_start == -1 &amp;&amp; errno == ENXIO)</div><div class='add'>+            /* no more holes */</div><div class='add'>+            break;</div><div class='add'>+        if (hole_start == -1) {</div><div class='add'>+            perror("no more holes");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        filename = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                perror ("glfs_new() returned NULL");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (glfs_set_volfile_server (fs, "tcp", hostname, 24007)) {</div><div class='del'>-                perror ("glfs_set_volfile_server");</div><div class='del'>-                return 1;</div><div class='add'>+        hole_end = glfs_lseek(fd, hole_start, SEEK_DATA);</div><div class='add'>+        if (hole_end == -1 &amp;&amp; errno == ENXIO) {</div><div class='add'>+            /* no more data */</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (glfs_init (fs)) {</div><div class='del'>-                perror ("glfs_init");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+        printf("HOLE found: %ld - %ld%s\n", hole_start, hole_end,</div><div class='add'>+               (hole_end == st.st_size) ? " (EOF)" : "");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = glfs_open (fs, filename, O_RDONLY);</div><div class='del'>-        if (fd &lt;= 0) {</div><div class='del'>-                perror ("glfs_open");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    glfs_close(fd);</div><div class='ctx'> </div><div class='del'>-        if (glfs_fstat (fd, &amp;st)) {</div><div class='del'>-                perror ("glfs_fstat");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (hole_end &lt; st.st_size) {</div><div class='del'>-                hole_start = glfs_lseek (fd, hole_end, SEEK_HOLE);</div><div class='del'>-                if (hole_start == -1 &amp;&amp; errno == ENXIO)</div><div class='del'>-                        /* no more holes */</div><div class='del'>-                        break;</div><div class='del'>-                if (hole_start == -1) {</div><div class='del'>-			perror ("no more holes");</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                hole_end = glfs_lseek (fd, hole_start, SEEK_DATA);</div><div class='del'>-                if (hole_end == -1 &amp;&amp; errno == ENXIO) {</div><div class='del'>-                        /* no more data */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                printf ("HOLE found: %ld - %ld%s\n", hole_start, hole_end,</div><div class='del'>-                         (hole_end == st.st_size) ? " (EOF)" : "");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_close (fd);</div><div class='del'>-</div><div class='del'>-        if (fs) {</div><div class='del'>-                glfs_fini (fs);</div><div class='del'>-        }</div><div class='add'>+    if (fs) {</div><div class='add'>+        glfs_fini(fs);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/gfapi/upcall-cache-invalidate.c b/tests/basic/gfapi/upcall-cache-invalidate.c<br/>index 2014bb9dccf..078286a8956 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/upcall-cache-invalidate.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/upcall-cache-invalidate.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/upcall-cache-invalidate.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/upcall-cache-invalidate.c</a></div><div class='hunk'>@@ -9,204 +9,201 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto out; \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t                   *fs = NULL;</div><div class='del'>-        glfs_t                   *fs2 = NULL;</div><div class='del'>-        glfs_t                   *fs_tmp = NULL;</div><div class='del'>-        glfs_t                   *fs_tmp2 = NULL;</div><div class='del'>-        int                       ret = 0, i;</div><div class='del'>-        glfs_fd_t                *fd = NULL;</div><div class='del'>-        glfs_fd_t                *fd2 = NULL;</div><div class='del'>-        glfs_fd_t                *fd_tmp = NULL;</div><div class='del'>-        glfs_fd_t                *fd_tmp2 = NULL;</div><div class='del'>-        char                      readbuf[32];</div><div class='del'>-        char                     *filename = "file_tmp";</div><div class='del'>-        char                     *writebuf = NULL;</div><div class='del'>-        char                     *vol_id  = NULL;</div><div class='del'>-        unsigned int              cnt = 1;</div><div class='del'>-        struct glfs_upcall       *cbk = NULL;</div><div class='del'>-        char                     *logfile = NULL;</div><div class='del'>-        char                     *volname = NULL;</div><div class='del'>-        char                     *hostname = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_t *fs2 = NULL;</div><div class='add'>+    glfs_t *fs_tmp = NULL;</div><div class='add'>+    glfs_t *fs_tmp2 = NULL;</div><div class='add'>+    int ret = 0, i;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    glfs_fd_t *fd_tmp = NULL;</div><div class='add'>+    glfs_fd_t *fd_tmp2 = NULL;</div><div class='add'>+    char readbuf[32];</div><div class='add'>+    char *filename = "file_tmp";</div><div class='add'>+    char *writebuf = NULL;</div><div class='add'>+    char *vol_id = NULL;</div><div class='add'>+    unsigned int cnt = 1;</div><div class='add'>+    struct glfs_upcall *cbk = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    /* This does not block, but enables caching of events. Real</div><div class='add'>+     * applications like NFS-Ganesha run this in a thread before activity</div><div class='add'>+     * on the fs (through this instance) happens. */</div><div class='add'>+    ret = glfs_h_poll_upcall(fs_tmp, &amp;cbk);</div><div class='add'>+    LOG_ERR("glfs_h_poll_upcall", ret);</div><div class='add'>+</div><div class='add'>+    fs2 = glfs_new(volname);</div><div class='add'>+    if (!fs2) {</div><div class='add'>+        fprintf(stderr, "glfs_new fs2: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs2, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server-fs2", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs2, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging-fs2", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs2);</div><div class='add'>+    LOG_ERR("glfs_init-fs2", ret);</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, filename, O_RDWR | O_SYNC, 0644);</div><div class='add'>+    if (fd &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_creat", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs-create fd - %d\n", fd);</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_open(fs2, filename, O_SYNC | O_RDWR | O_CREAT);</div><div class='add'>+    if (fd2 &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_open-fs2", ret);</div><div class='add'>+    }</div><div class='add'>+    fprintf(stderr, "glfs-open fd2 - %d\n", fd2);</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        if (cnt % 2) {</div><div class='add'>+            fd_tmp = fd;</div><div class='add'>+            fs_tmp = fs;</div><div class='add'>+            fd_tmp2 = fd2;</div><div class='add'>+            fs_tmp2 = fs2;</div><div class='add'>+        } else {</div><div class='add'>+            fd_tmp = fd2;</div><div class='add'>+            fs_tmp = fs2;</div><div class='add'>+            fd_tmp2 = fd;</div><div class='add'>+            fs_tmp2 = fs;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return -1;</div><div class='add'>+        /* WRITE on fd_tmp */</div><div class='add'>+        writebuf = malloc(10);</div><div class='add'>+        if (writebuf) {</div><div class='add'>+            memcpy(writebuf, "abcd", 4);</div><div class='add'>+            ret = glfs_write(fd_tmp, writebuf, 4, 0);</div><div class='add'>+            if (ret &lt;= 0) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                LOG_ERR("glfs_write", ret);</div><div class='add'>+            } else {</div><div class='add'>+                fprintf(stderr, "glfs_write succeeded\n");</div><div class='add'>+            }</div><div class='add'>+            free(writebuf);</div><div class='add'>+        } else {</div><div class='add'>+            fprintf(stderr, "Could not allocate writebuf\n");</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='add'>+        /* READ on fd_tmp2 */</div><div class='add'>+        ret = glfs_lseek(fd_tmp2, 0, SEEK_SET);</div><div class='add'>+        LOG_ERR("glfs_lseek", ret);</div><div class='ctx'> </div><div class='del'>-        /* This does not block, but enables caching of events. Real</div><div class='del'>-         * applications like NFS-Ganesha run this in a thread before activity</div><div class='del'>-         * on the fs (through this instance) happens. */</div><div class='del'>-        ret = glfs_h_poll_upcall(fs_tmp, &amp;cbk);</div><div class='del'>-        LOG_ERR ("glfs_h_poll_upcall", ret);</div><div class='add'>+        memset(readbuf, 0, sizeof(readbuf));</div><div class='add'>+        ret = glfs_pread(fd_tmp2, readbuf, 4, 0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        fs2 = glfs_new (volname);</div><div class='del'>-        if (!fs2) {</div><div class='del'>-                fprintf (stderr, "glfs_new fs2: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='add'>+        if (ret &lt;= 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            LOG_ERR("glfs_pread", ret);</div><div class='add'>+        } else {</div><div class='add'>+            fprintf(stderr, "glfs_read: %s\n", readbuf);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs2, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server-fs2", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs2, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging-fs2", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs2);</div><div class='del'>-        LOG_ERR("glfs_init-fs2", ret);</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat(fs, filename, O_RDWR|O_SYNC, 0644);</div><div class='del'>-        if (fd &lt;= 0) {</div><div class='add'>+        /* Open() fops seem to be not performed on server side until</div><div class='add'>+         * there are I/Os on that fd</div><div class='add'>+         */</div><div class='add'>+        if (cnt &gt; 2) {</div><div class='add'>+            struct glfs_upcall_inode *in_arg = NULL;</div><div class='add'>+            enum glfs_upcall_reason reason = 0;</div><div class='add'>+            struct glfs_object *object = NULL;</div><div class='add'>+            uint64_t flags = 0;</div><div class='add'>+            uint64_t expire = 0;</div><div class='add'>+</div><div class='add'>+            ret = glfs_h_poll_upcall(fs_tmp, &amp;cbk);</div><div class='add'>+            LOG_ERR("glfs_h_poll_upcall", ret);</div><div class='add'>+</div><div class='add'>+            reason = glfs_upcall_get_reason(cbk);</div><div class='add'>+</div><div class='add'>+            /* Expect 'GLFS_INODE_INVALIDATE' upcall event. */</div><div class='add'>+            if (reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='add'>+                in_arg = glfs_upcall_get_event(cbk);</div><div class='add'>+</div><div class='add'>+                object = glfs_upcall_inode_get_object(in_arg);</div><div class='add'>+                flags = glfs_upcall_inode_get_flags(in_arg);</div><div class='add'>+                expire = glfs_upcall_inode_get_expire(in_arg);</div><div class='add'>+</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        " upcall event type - %d,"</div><div class='add'>+                        " object(%p), flags(%d), "</div><div class='add'>+                        " expire_time_attr(%d)\n",</div><div class='add'>+                        reason, object, flags, expire);</div><div class='add'>+            } else {</div><div class='add'>+                fprintf(stderr, "Didn't receive upcall notify event");</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_creat", ret);</div><div class='del'>-        }</div><div class='del'>-        fprintf (stderr, "glfs-create fd - %d\n", fd);</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open(fs2, filename, O_SYNC|O_RDWR|O_CREAT);</div><div class='del'>-        if (fd2 &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_open-fs2", ret);</div><div class='add'>+            glfs_free(cbk);</div><div class='ctx'>         }</div><div class='del'>-        fprintf (stderr, "glfs-open fd2 - %d\n", fd2);</div><div class='del'>-</div><div class='del'>-        do {</div><div class='del'>-                if (cnt%2) {</div><div class='del'>-                        fd_tmp = fd;</div><div class='del'>-                        fs_tmp = fs;</div><div class='del'>-                        fd_tmp2 = fd2;</div><div class='del'>-                        fs_tmp2 = fs2;</div><div class='del'>-                } else {</div><div class='del'>-                        fd_tmp = fd2;</div><div class='del'>-                        fs_tmp = fs2;</div><div class='del'>-                        fd_tmp2 = fd;</div><div class='del'>-                        fs_tmp2 = fs;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* WRITE on fd_tmp */</div><div class='del'>-                writebuf = malloc(10);</div><div class='del'>-                if (writebuf) {</div><div class='del'>-                        memcpy (writebuf, "abcd", 4);</div><div class='del'>-                        ret = glfs_write (fd_tmp, writebuf, 4, 0);</div><div class='del'>-                        if (ret &lt;= 0)   {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                LOG_ERR ("glfs_write", ret);</div><div class='del'>-                        } else {</div><div class='del'>-                                fprintf (stderr,</div><div class='del'>-                                         "glfs_write succeeded\n");</div><div class='del'>-                        }</div><div class='del'>-                        free(writebuf);</div><div class='del'>-                } else {</div><div class='del'>-                        fprintf (stderr,</div><div class='del'>-                                 "Could not allocate writebuf\n");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* READ on fd_tmp2 */</div><div class='del'>-                ret = glfs_lseek (fd_tmp2, 0, SEEK_SET);</div><div class='del'>-                LOG_ERR ("glfs_lseek", ret);</div><div class='del'>-</div><div class='del'>-                memset (readbuf, 0, sizeof(readbuf));</div><div class='del'>-                ret = glfs_pread (fd_tmp2, readbuf, 4, 0, 0, NULL);</div><div class='del'>-</div><div class='del'>-                if (ret &lt;= 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        LOG_ERR ("glfs_pread", ret);</div><div class='del'>-                } else {</div><div class='del'>-                        fprintf (stderr, "glfs_read: %s\n", readbuf);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Open() fops seem to be not performed on server side until</div><div class='del'>-                 * there are I/Os on that fd</div><div class='del'>-                 */</div><div class='del'>-                if (cnt &gt; 2) {</div><div class='del'>-                        struct glfs_upcall_inode *in_arg = NULL;</div><div class='del'>-                        enum glfs_upcall_reason   reason = 0;</div><div class='del'>-                        struct glfs_object       *object = NULL;</div><div class='del'>-                        uint64_t                  flags = 0;</div><div class='del'>-                        uint64_t                  expire = 0;</div><div class='del'>-</div><div class='del'>-                        ret = glfs_h_poll_upcall(fs_tmp, &amp;cbk);</div><div class='del'>-                        LOG_ERR ("glfs_h_poll_upcall", ret);</div><div class='del'>-</div><div class='del'>-                        reason = glfs_upcall_get_reason (cbk);</div><div class='del'>-</div><div class='del'>-                        /* Expect 'GLFS_INODE_INVALIDATE' upcall event. */</div><div class='del'>-                        if (reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='del'>-                                in_arg = glfs_upcall_get_event (cbk);</div><div class='del'>-</div><div class='del'>-                                object = glfs_upcall_inode_get_object (in_arg);</div><div class='del'>-                                flags = glfs_upcall_inode_get_flags (in_arg);</div><div class='del'>-                                expire = glfs_upcall_inode_get_expire (in_arg);</div><div class='del'>-</div><div class='del'>-                                fprintf (stderr, " upcall event type - %d,"</div><div class='del'>-                                         " object(%p), flags(%d), "</div><div class='del'>-                                         " expire_time_attr(%d)\n" ,</div><div class='del'>-                                         reason, object, flags, expire);</div><div class='del'>-                        } else {</div><div class='del'>-                                fprintf (stderr,</div><div class='del'>-                                         "Didn't receive upcall notify event");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        glfs_free (cbk);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                sleep(5);</div><div class='del'>-        } while (++cnt &lt; 5);</div><div class='add'>+</div><div class='add'>+        sleep(5);</div><div class='add'>+    } while (++cnt &lt; 5);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        glfs_close(fd);</div><div class='del'>-        LOG_ERR ("glfs_close", ret);</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+    LOG_ERR("glfs_close", ret);</div><div class='ctx'> </div><div class='del'>-        glfs_close(fd2);</div><div class='del'>-        LOG_ERR ("glfs_close-fd2", ret);</div><div class='add'>+    glfs_close(fd2);</div><div class='add'>+    LOG_ERR("glfs_close-fd2", ret);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fs2) {</div><div class='del'>-                ret = glfs_fini(fs2);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs2) returned %d \n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                exit(1);</div><div class='del'>-        exit(0);</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fs2) {</div><div class='add'>+        ret = glfs_fini(fs2);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs2) returned %d \n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/tests/basic/gfapi/upcall-register-api.c b/tests/basic/gfapi/upcall-register-api.c<br/>index 994069c0446..78594dbb108 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/upcall-register-api.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/gfapi/upcall-register-api.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/gfapi/upcall-register-api.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/gfapi/upcall-register-api.c</a></div><div class='hunk'>@@ -9,273 +9,278 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto out; \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int upcall_recv = 0;</div><div class='ctx'> </div><div class='del'>-void up_async_invalidate (struct glfs_upcall *up_arg, void *data)</div><div class='add'>+void</div><div class='add'>+up_async_invalidate(struct glfs_upcall *up_arg, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct glfs_upcall_inode *in_arg = NULL;</div><div class='del'>-        enum glfs_upcall_reason   reason = 0;</div><div class='del'>-        struct glfs_object       *object = NULL;</div><div class='del'>-        uint64_t                  flags = 0;</div><div class='del'>-        uint64_t                  expire = 0;</div><div class='add'>+    struct glfs_upcall_inode *in_arg = NULL;</div><div class='add'>+    enum glfs_upcall_reason reason = 0;</div><div class='add'>+    struct glfs_object *object = NULL;</div><div class='add'>+    uint64_t flags = 0;</div><div class='add'>+    uint64_t expire = 0;</div><div class='ctx'> </div><div class='del'>-        if (!up_arg)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        reason = glfs_upcall_get_reason (up_arg);</div><div class='del'>-</div><div class='del'>-        /* Expect 'GLFS_INODE_INVALIDATE' upcall event. */</div><div class='del'>-</div><div class='del'>-        if (reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='del'>-                in_arg = glfs_upcall_get_event (up_arg);</div><div class='del'>-</div><div class='del'>-                object = glfs_upcall_inode_get_object (in_arg);</div><div class='del'>-                flags = glfs_upcall_inode_get_flags (in_arg);</div><div class='del'>-                expire = glfs_upcall_inode_get_expire (in_arg);</div><div class='del'>-</div><div class='del'>-                fprintf (stderr, " upcall event type - %d,"</div><div class='del'>-                                 " object(%p), flags(%d), "</div><div class='del'>-                                 " expire_time_attr(%d)\n" ,</div><div class='del'>-                                 reason, object, flags, expire);</div><div class='del'>-                upcall_recv++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_free (up_arg);</div><div class='add'>+    if (!up_arg)</div><div class='ctx'>         return;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-int perform_io (glfs_t *fs, glfs_t *fs2, int cnt)</div><div class='del'>-{</div><div class='del'>-        glfs_t                   *fs_tmp = NULL;</div><div class='del'>-        glfs_t                   *fs_tmp2 = NULL;</div><div class='del'>-        glfs_fd_t                *fd_tmp = NULL;</div><div class='del'>-        glfs_fd_t                *fd_tmp2 = NULL;</div><div class='del'>-        char                      readbuf[32];</div><div class='del'>-        char                     *writebuf = NULL;</div><div class='del'>-        glfs_fd_t                *fd = NULL;</div><div class='del'>-        glfs_fd_t                *fd2 = NULL;</div><div class='del'>-        char                     *filename = "file_tmp";</div><div class='del'>-        int                       ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!fs || !fs2)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        /* Create file from fs and open it from fs2 */</div><div class='del'>-        fd = glfs_creat(fs, filename, O_RDWR|O_SYNC, 0644);</div><div class='del'>-        if (fd &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_creat", ret);</div><div class='del'>-        }</div><div class='add'>+    reason = glfs_upcall_get_reason(up_arg);</div><div class='ctx'> </div><div class='del'>-        fd2 = glfs_open(fs2, filename, O_SYNC|O_RDWR|O_CREAT);</div><div class='del'>-        if (fd2 &lt;= 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                LOG_ERR ("glfs_open-fs2", ret);</div><div class='del'>-        }</div><div class='add'>+    /* Expect 'GLFS_INODE_INVALIDATE' upcall event. */</div><div class='ctx'> </div><div class='del'>-        do {</div><div class='del'>-                if (cnt%2) {</div><div class='del'>-                        fd_tmp = fd;</div><div class='del'>-                        fs_tmp = fs;</div><div class='del'>-                        fd_tmp2 = fd2;</div><div class='del'>-                        fs_tmp2 = fs2;</div><div class='del'>-                } else {</div><div class='del'>-                        fd_tmp = fd2;</div><div class='del'>-                        fs_tmp = fs2;</div><div class='del'>-                        fd_tmp2 = fd;</div><div class='del'>-                        fs_tmp2 = fs;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* WRITE on fd_tmp */</div><div class='del'>-                writebuf = malloc(10);</div><div class='del'>-                if (writebuf) {</div><div class='del'>-                        memcpy (writebuf, "abcd", 4);</div><div class='del'>-                        ret = glfs_write (fd_tmp, writebuf, 4, 0);</div><div class='del'>-                        if (ret &lt;= 0)   {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                LOG_ERR ("glfs_write", ret);</div><div class='del'>-                        }</div><div class='del'>-                        free(writebuf);</div><div class='del'>-                } else {</div><div class='del'>-                        fprintf (stderr,</div><div class='del'>-                                 "Could not allocate writebuf\n");</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* READ on fd_tmp2 */</div><div class='del'>-                ret = glfs_lseek (fd_tmp2, 0, SEEK_SET);</div><div class='del'>-                LOG_ERR ("glfs_lseek", ret);</div><div class='del'>-</div><div class='del'>-                memset (readbuf, 0, sizeof(readbuf));</div><div class='del'>-                ret = glfs_pread (fd_tmp2, readbuf, 4, 0, 0, NULL);</div><div class='del'>-</div><div class='del'>-                if (ret &lt;= 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        LOG_ERR ("glfs_pread", ret);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                sleep(2);</div><div class='del'>-        } while (--cnt &gt; 0);</div><div class='add'>+    if (reason == GLFS_UPCALL_INODE_INVALIDATE) {</div><div class='add'>+        in_arg = glfs_upcall_get_event(up_arg);</div><div class='ctx'> </div><div class='del'>-        sleep(2);</div><div class='add'>+        object = glfs_upcall_inode_get_object(in_arg);</div><div class='add'>+        flags = glfs_upcall_inode_get_flags(in_arg);</div><div class='add'>+        expire = glfs_upcall_inode_get_expire(in_arg);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-err:</div><div class='del'>-        glfs_close(fd);</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                " upcall event type - %d,"</div><div class='add'>+                " object(%p), flags(%d), "</div><div class='add'>+                " expire_time_attr(%d)\n",</div><div class='add'>+                reason, object, flags, expire);</div><div class='add'>+        upcall_recv++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        glfs_close(fd2);</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='add'>+    glfs_free(up_arg);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+perform_io(glfs_t *fs, glfs_t *fs2, int cnt)</div><div class='ctx'> {</div><div class='del'>-        glfs_t                   *fs = NULL;</div><div class='del'>-        glfs_t                   *fs2 = NULL;</div><div class='del'>-        int                       ret = 0, i;</div><div class='del'>-        char                     *vol_id  = NULL;</div><div class='del'>-        unsigned int              cnt = 5;</div><div class='del'>-        struct glfs_upcall       *cbk = NULL;</div><div class='del'>-        char                     *logfile = NULL;</div><div class='del'>-        char                     *volname = NULL;</div><div class='del'>-        char                     *hostname = NULL;</div><div class='del'>-        int                      up_events = GLFS_EVENT_ANY;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        /* Initialize fs */</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        /* Initialize fs2 */</div><div class='del'>-        fs2 = glfs_new (volname);</div><div class='del'>-        if (!fs2) {</div><div class='del'>-                fprintf (stderr, "glfs_new fs2: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs2, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server-fs2", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs2, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging-fs2", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs2);</div><div class='del'>-        LOG_ERR("glfs_init-fs2", ret);</div><div class='del'>-</div><div class='del'>-        /* Register Upcalls */</div><div class='del'>-        ret = glfs_upcall_register (fs, up_events, up_async_invalidate, NULL);</div><div class='del'>-</div><div class='del'>-        /* Check if the return mask contains the event */</div><div class='del'>-        if (!(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='del'>-                fprintf (stderr, "glfs_upcall_register return doesn't contain"</div><div class='del'>-                         " upcall event\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_upcall_register (fs2, up_events, up_async_invalidate, NULL);</div><div class='del'>-</div><div class='del'>-        /* Check if the return mask contains the event */</div><div class='del'>-        if ((ret &lt; 0) || !(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='del'>-                fprintf (stderr, "glfs_upcall_register return doesn't contain"</div><div class='del'>-                         " upcall event\n");</div><div class='del'>-                return -1;</div><div class='add'>+    glfs_t *fs_tmp = NULL;</div><div class='add'>+    glfs_t *fs_tmp2 = NULL;</div><div class='add'>+    glfs_fd_t *fd_tmp = NULL;</div><div class='add'>+    glfs_fd_t *fd_tmp2 = NULL;</div><div class='add'>+    char readbuf[32];</div><div class='add'>+    char *writebuf = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    char *filename = "file_tmp";</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!fs || !fs2)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    /* Create file from fs and open it from fs2 */</div><div class='add'>+    fd = glfs_creat(fs, filename, O_RDWR | O_SYNC, 0644);</div><div class='add'>+    if (fd &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_creat", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd2 = glfs_open(fs2, filename, O_SYNC | O_RDWR | O_CREAT);</div><div class='add'>+    if (fd2 &lt;= 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        LOG_ERR("glfs_open-fs2", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        if (cnt % 2) {</div><div class='add'>+            fd_tmp = fd;</div><div class='add'>+            fs_tmp = fs;</div><div class='add'>+            fd_tmp2 = fd2;</div><div class='add'>+            fs_tmp2 = fs2;</div><div class='add'>+        } else {</div><div class='add'>+            fd_tmp = fd2;</div><div class='add'>+            fs_tmp = fs2;</div><div class='add'>+            fd_tmp2 = fd;</div><div class='add'>+            fs_tmp2 = fs;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Perform I/O */</div><div class='del'>-        ret = perform_io (fs, fs2, cnt);</div><div class='del'>-        LOG_ERR("perform_io", ret);</div><div class='del'>-</div><div class='del'>-        if (upcall_recv == 0) {</div><div class='del'>-                fprintf (stderr, "Upcalls are not received.\n");</div><div class='add'>+        /* WRITE on fd_tmp */</div><div class='add'>+        writebuf = malloc(10);</div><div class='add'>+        if (writebuf) {</div><div class='add'>+            memcpy(writebuf, "abcd", 4);</div><div class='add'>+            ret = glfs_write(fd_tmp, writebuf, 4, 0);</div><div class='add'>+            if (ret &lt;= 0) {</div><div class='ctx'>                 ret = -1;</div><div class='add'>+                LOG_ERR("glfs_write", ret);</div><div class='add'>+            }</div><div class='add'>+            free(writebuf);</div><div class='ctx'>         } else {</div><div class='del'>-                fprintf (stderr, "Received %d upcalls as expected\n",</div><div class='del'>-                         upcall_recv);</div><div class='del'>-                ret = 0;</div><div class='add'>+            fprintf(stderr, "Could not allocate writebuf\n");</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        sleep(5); /* to flush out previous upcalls if any */</div><div class='add'>+        /* READ on fd_tmp2 */</div><div class='add'>+        ret = glfs_lseek(fd_tmp2, 0, SEEK_SET);</div><div class='add'>+        LOG_ERR("glfs_lseek", ret);</div><div class='ctx'> </div><div class='del'>-        /* Now unregister and check there are no upcall events received */</div><div class='del'>-        ret = glfs_upcall_unregister (fs, up_events);</div><div class='add'>+        memset(readbuf, 0, sizeof(readbuf));</div><div class='add'>+        ret = glfs_pread(fd_tmp2, readbuf, 4, 0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        /* Check if the return mask contains the event */</div><div class='del'>-        if ((ret &lt; 0) || !(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='del'>-                fprintf (stderr, "glfs_upcall_register return doesn't contain"</div><div class='del'>-                         " upcall event\n");</div><div class='del'>-                return -1;</div><div class='add'>+        if (ret &lt;= 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            LOG_ERR("glfs_pread", ret);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_upcall_unregister (fs2, up_events);</div><div class='add'>+        sleep(2);</div><div class='add'>+    } while (--cnt &gt; 0);</div><div class='ctx'> </div><div class='del'>-        /* Check if the return mask contains the event */</div><div class='del'>-        if ((ret &lt; 0) || !(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='del'>-                fprintf (stderr, "glfs_upcall_register return doesn't contain"</div><div class='del'>-                         " upcall event\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    sleep(2);</div><div class='ctx'> </div><div class='del'>-        upcall_recv = 0;</div><div class='add'>+    ret = 0;</div><div class='add'>+err:</div><div class='add'>+    glfs_close(fd);</div><div class='ctx'> </div><div class='del'>-        ret = perform_io (fs, fs2, cnt);</div><div class='del'>-        LOG_ERR("perform_io", ret);</div><div class='del'>-</div><div class='del'>-        if (upcall_recv != 0) {</div><div class='del'>-                fprintf (stderr, "%d upcalls received even after unregister.\n",</div><div class='del'>-                         upcall_recv);</div><div class='del'>-                ret = -1;</div><div class='del'>-        } else {</div><div class='del'>-                fprintf (stderr, "Post unregister, no upcalls received as"</div><div class='del'>-                         " expected\n");</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    glfs_close(fd2);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fs2) {</div><div class='del'>-                ret = glfs_fini(fs2);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs2) returned %d\n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                exit(1);</div><div class='del'>-        exit(0);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='add'>+{</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_t *fs2 = NULL;</div><div class='add'>+    int ret = 0, i;</div><div class='add'>+    char *vol_id = NULL;</div><div class='add'>+    unsigned int cnt = 5;</div><div class='add'>+    struct glfs_upcall *cbk = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    int up_events = GLFS_EVENT_ANY;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    /* Initialize fs */</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    /* Initialize fs2 */</div><div class='add'>+    fs2 = glfs_new(volname);</div><div class='add'>+    if (!fs2) {</div><div class='add'>+        fprintf(stderr, "glfs_new fs2: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs2, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server-fs2", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs2, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging-fs2", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs2);</div><div class='add'>+    LOG_ERR("glfs_init-fs2", ret);</div><div class='add'>+</div><div class='add'>+    /* Register Upcalls */</div><div class='add'>+    ret = glfs_upcall_register(fs, up_events, up_async_invalidate, NULL);</div><div class='add'>+</div><div class='add'>+    /* Check if the return mask contains the event */</div><div class='add'>+    if (!(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_upcall_register return doesn't contain"</div><div class='add'>+                " upcall event\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_upcall_register(fs2, up_events, up_async_invalidate, NULL);</div><div class='add'>+</div><div class='add'>+    /* Check if the return mask contains the event */</div><div class='add'>+    if ((ret &lt; 0) || !(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_upcall_register return doesn't contain"</div><div class='add'>+                " upcall event\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Perform I/O */</div><div class='add'>+    ret = perform_io(fs, fs2, cnt);</div><div class='add'>+    LOG_ERR("perform_io", ret);</div><div class='add'>+</div><div class='add'>+    if (upcall_recv == 0) {</div><div class='add'>+        fprintf(stderr, "Upcalls are not received.\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stderr, "Received %d upcalls as expected\n", upcall_recv);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sleep(5); /* to flush out previous upcalls if any */</div><div class='add'>+</div><div class='add'>+    /* Now unregister and check there are no upcall events received */</div><div class='add'>+    ret = glfs_upcall_unregister(fs, up_events);</div><div class='add'>+</div><div class='add'>+    /* Check if the return mask contains the event */</div><div class='add'>+    if ((ret &lt; 0) || !(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_upcall_register return doesn't contain"</div><div class='add'>+                " upcall event\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_upcall_unregister(fs2, up_events);</div><div class='add'>+</div><div class='add'>+    /* Check if the return mask contains the event */</div><div class='add'>+    if ((ret &lt; 0) || !(ret &amp; GLFS_EVENT_INODE_INVALIDATE)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_upcall_register return doesn't contain"</div><div class='add'>+                " upcall event\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    upcall_recv = 0;</div><div class='add'>+</div><div class='add'>+    ret = perform_io(fs, fs2, cnt);</div><div class='add'>+    LOG_ERR("perform_io", ret);</div><div class='add'>+</div><div class='add'>+    if (upcall_recv != 0) {</div><div class='add'>+        fprintf(stderr, "%d upcalls received even after unregister.\n",</div><div class='add'>+                upcall_recv);</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Post unregister, no upcalls received as"</div><div class='add'>+                " expected\n");</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+out:</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d\n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fs2) {</div><div class='add'>+        ret = glfs_fini(fs2);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs2) returned %d\n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='add'>+}</div><div class='head'>diff --git a/tests/basic/logchecks.c b/tests/basic/logchecks.c<br/>index a40278b0d77..86891057230 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/logchecks.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/logchecks.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/logchecks.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/logchecks.c</a></div><div class='hunk'>@@ -18,191 +18,197 @@</div><div class='ctx'> #include "logchecks-messages.h"</div><div class='ctx'> #include "../../libglusterfs/src/logging.h"</div><div class='ctx'> </div><div class='del'>-glusterfs_ctx_t   *ctx = NULL;</div><div class='add'>+glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-#define TEST_FILENAME           "/tmp/logchecks.log"</div><div class='del'>-#define GF_LOG_CONTROL_FILE     "/etc/glusterfs/logger.conf"</div><div class='add'>+#define TEST_FILENAME "/tmp/logchecks.log"</div><div class='add'>+#define GF_LOG_CONTROL_FILE "/etc/glusterfs/logger.conf"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> go_log_vargs(gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='del'>-        va_list  ap;</div><div class='add'>+    va_list ap;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, fmt);</div><div class='del'>-        gf_msg_vplain (level, fmt, ap);</div><div class='del'>-        va_end (ap);</div><div class='add'>+    va_start(ap, fmt);</div><div class='add'>+    gf_msg_vplain(level, fmt, ap);</div><div class='add'>+    va_end(ap);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-go_log (void)</div><div class='add'>+go_log(void)</div><div class='ctx'> {</div><div class='del'>-        /*** gf_msg ***/</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_INFO, 0, logchecks_msg_1);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_INFO, 22, logchecks_msg_2, 42, "Forty-Two",</div><div class='del'>-                42);</div><div class='del'>-        /* change criticality */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_3);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_CRITICAL, 22, logchecks_msg_4, 42,</div><div class='del'>-                "Forty-Two", 42);</div><div class='del'>-</div><div class='del'>-        /*** msg_nomem ***/</div><div class='del'>-        gf_msg_nomem ("logchecks", GF_LOG_ALERT, 555);</div><div class='del'>-        gf_msg_nomem ("logchecks", GF_LOG_INFO, 555);</div><div class='del'>-</div><div class='del'>-        /*** msg_plain ***/</div><div class='del'>-        gf_msg_plain (GF_LOG_INFO, "Informational: gf_msg_plain with"</div><div class='del'>-                        " args %d:%s:%x", 42, "Forty-Two", 42);</div><div class='del'>-        gf_msg_plain (GF_LOG_ALERT, "Alert: gf_msg_plain with"</div><div class='del'>-                        " args %d:%s:%x", 42, "Forty-Two", 42);</div><div class='del'>-</div><div class='del'>-        /*** msg_vplain ***/</div><div class='del'>-        go_log_vargs (GF_LOG_INFO, "Informational: gf_msg_vplain: No args!!!");</div><div class='del'>-        go_log_vargs (GF_LOG_INFO, "Informational: gf_msg_vplain: Some"</div><div class='del'>-                        " args %d:%s:%x", 42, "Forty-Two", 42);</div><div class='del'>-        go_log_vargs (GF_LOG_INFO, "Critical: gf_msg_vplain: No args!!!");</div><div class='del'>-        go_log_vargs (GF_LOG_INFO, "Critical: gf_msg_vplain: Some"</div><div class='del'>-                        " args %d:%s:%x", 42, "Forty-Two", 42);</div><div class='del'>-</div><div class='del'>-        /*** msg_plain_nomem ***/</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_INFO, "Informational: gf_msg_plain_nomem");</div><div class='del'>-        gf_msg_plain_nomem (GF_LOG_ALERT, "Alert: gf_msg_plain_nomem");</div><div class='del'>-</div><div class='del'>-        /*** msg_backtrace_nomem ***/</div><div class='del'>-        // TODO: Need to create a stack depth and then call</div><div class='del'>-        gf_msg_backtrace_nomem (GF_LOG_INFO, 5);</div><div class='del'>-        gf_msg_backtrace_nomem (GF_LOG_ALERT, 5);</div><div class='del'>-</div><div class='del'>-        /*** gf_msg_callingfn ***/</div><div class='del'>-        // TODO: Need to create a stack depth and then call</div><div class='del'>-        gf_msg_callingfn ("logchecks", GF_LOG_INFO, 0, logchecks_msg_7);</div><div class='del'>-        gf_msg_callingfn ("logchecks", GF_LOG_INFO, 0, logchecks_msg_8, 42,</div><div class='del'>-                          "Forty-Two", 42);</div><div class='del'>-        gf_msg_callingfn ("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_9);</div><div class='del'>-        gf_msg_callingfn ("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_10, 42,</div><div class='del'>-                          "Forty-Two", 42);</div><div class='del'>-</div><div class='del'>-        /*** gf_msg_debug ***/</div><div class='del'>-        gf_msg_debug ("logchecks", 0, "Debug: Hello World!!!");</div><div class='del'>-        gf_msg_debug ("logchecks", 22, "Debug: With args %d:%s:%x", 42,</div><div class='del'>-                      "Forty-Two", 42);</div><div class='del'>-</div><div class='del'>-        /*** gf_msg_trace ***/</div><div class='del'>-        gf_msg_trace ("logchecks", 0, "Trace: Hello World!!!");</div><div class='del'>-        gf_msg_trace ("logchecks", 22, "Trace: With args %d:%s:%x", 42,</div><div class='del'>-                      "Forty-Two", 42);</div><div class='del'>-</div><div class='del'>-        /*** gf_msg_backtrace ***/</div><div class='del'>-        // TODO: Test with lower callstr values to check truncation</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    /*** gf_msg ***/</div><div class='add'>+    gf_msg("logchecks", GF_LOG_INFO, 0, logchecks_msg_1);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_INFO, 22, logchecks_msg_2, 42, "Forty-Two", 42);</div><div class='add'>+    /* change criticality */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_3);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_CRITICAL, 22, logchecks_msg_4, 42, "Forty-Two",</div><div class='add'>+           42);</div><div class='add'>+</div><div class='add'>+    /*** msg_nomem ***/</div><div class='add'>+    gf_msg_nomem("logchecks", GF_LOG_ALERT, 555);</div><div class='add'>+    gf_msg_nomem("logchecks", GF_LOG_INFO, 555);</div><div class='add'>+</div><div class='add'>+    /*** msg_plain ***/</div><div class='add'>+    gf_msg_plain(GF_LOG_INFO,</div><div class='add'>+                 "Informational: gf_msg_plain with"</div><div class='add'>+                 " args %d:%s:%x",</div><div class='add'>+                 42, "Forty-Two", 42);</div><div class='add'>+    gf_msg_plain(GF_LOG_ALERT,</div><div class='add'>+                 "Alert: gf_msg_plain with"</div><div class='add'>+                 " args %d:%s:%x",</div><div class='add'>+                 42, "Forty-Two", 42);</div><div class='add'>+</div><div class='add'>+    /*** msg_vplain ***/</div><div class='add'>+    go_log_vargs(GF_LOG_INFO, "Informational: gf_msg_vplain: No args!!!");</div><div class='add'>+    go_log_vargs(GF_LOG_INFO,</div><div class='add'>+                 "Informational: gf_msg_vplain: Some"</div><div class='add'>+                 " args %d:%s:%x",</div><div class='add'>+                 42, "Forty-Two", 42);</div><div class='add'>+    go_log_vargs(GF_LOG_INFO, "Critical: gf_msg_vplain: No args!!!");</div><div class='add'>+    go_log_vargs(GF_LOG_INFO,</div><div class='add'>+                 "Critical: gf_msg_vplain: Some"</div><div class='add'>+                 " args %d:%s:%x",</div><div class='add'>+                 42, "Forty-Two", 42);</div><div class='add'>+</div><div class='add'>+    /*** msg_plain_nomem ***/</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_INFO, "Informational: gf_msg_plain_nomem");</div><div class='add'>+    gf_msg_plain_nomem(GF_LOG_ALERT, "Alert: gf_msg_plain_nomem");</div><div class='add'>+</div><div class='add'>+    /*** msg_backtrace_nomem ***/</div><div class='add'>+    // TODO: Need to create a stack depth and then call</div><div class='add'>+    gf_msg_backtrace_nomem(GF_LOG_INFO, 5);</div><div class='add'>+    gf_msg_backtrace_nomem(GF_LOG_ALERT, 5);</div><div class='add'>+</div><div class='add'>+    /*** gf_msg_callingfn ***/</div><div class='add'>+    // TODO: Need to create a stack depth and then call</div><div class='add'>+    gf_msg_callingfn("logchecks", GF_LOG_INFO, 0, logchecks_msg_7);</div><div class='add'>+    gf_msg_callingfn("logchecks", GF_LOG_INFO, 0, logchecks_msg_8, 42,</div><div class='add'>+                     "Forty-Two", 42);</div><div class='add'>+    gf_msg_callingfn("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_9);</div><div class='add'>+    gf_msg_callingfn("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_10, 42,</div><div class='add'>+                     "Forty-Two", 42);</div><div class='add'>+</div><div class='add'>+    /*** gf_msg_debug ***/</div><div class='add'>+    gf_msg_debug("logchecks", 0, "Debug: Hello World!!!");</div><div class='add'>+    gf_msg_debug("logchecks", 22, "Debug: With args %d:%s:%x", 42, "Forty-Two",</div><div class='add'>+                 42);</div><div class='add'>+</div><div class='add'>+    /*** gf_msg_trace ***/</div><div class='add'>+    gf_msg_trace("logchecks", 0, "Trace: Hello World!!!");</div><div class='add'>+    gf_msg_trace("logchecks", 22, "Trace: With args %d:%s:%x", 42, "Forty-Two",</div><div class='add'>+                 42);</div><div class='add'>+</div><div class='add'>+    /*** gf_msg_backtrace ***/</div><div class='add'>+    // TODO: Test with lower callstr values to check truncation</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int                ret = -1;</div><div class='del'>-</div><div class='del'>-        unlink (GF_LOG_CONTROL_FILE);</div><div class='del'>-        creat (GF_LOG_CONTROL_FILE, O_RDONLY);</div><div class='del'>-        ctx = glusterfs_ctx_new ();</div><div class='del'>-        if (!ctx)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_globals_init (ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("Error from glusterfs_globals_init [%s]\n",</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Pre init test, message should not be printed */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_19);</div><div class='del'>-</div><div class='del'>-        THIS-&gt;ctx = ctx;</div><div class='del'>-</div><div class='del'>-        /* TEST 1: messages before initializing the log, goes to stderr</div><div class='del'>-         * and syslog based on criticality */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_12);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 2: messages post initialization, goes to glusterlog and</div><div class='del'>-         * syslog based on severity */</div><div class='del'>-        ret = gf_log_init(ctx, TEST_FILENAME, "logchecks");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                printf ("Error from gf_log_init [%s]\n", strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_13);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 3: Test rotation */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_logrotate (0);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_5);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 4: Check flush, nothing noticeable should occur :) */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_flush ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_6);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 5: Change format */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_set_logformat (gf_logformat_traditional);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_14);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 6: Change level */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_set_loglevel (ctx, GF_LOG_CRITICAL);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_15);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* Reset to run with syslog */</div><div class='del'>-        gf_log_set_logformat (gf_logformat_withmsgid);</div><div class='del'>-        gf_log_set_loglevel (ctx, GF_LOG_INFO);</div><div class='del'>-</div><div class='del'>-        /* Run tests with logger changed to syslog */</div><div class='del'>-        /* TEST 7: No more gluster logs */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_set_logger (gf_logger_syslog);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_16);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 8: Change format */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_set_logformat (gf_logformat_traditional);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_14);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        /* TEST 9: Change level */</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-        gf_log_set_loglevel (ctx, GF_LOG_CRITICAL);</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_15);</div><div class='del'>-        go_log ();</div><div class='del'>-        gf_msg ("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='del'>-</div><div class='del'>-        // TODO: signal crash prints, but not yet feasible here</div><div class='del'>-        // TODO: Graph printing</div><div class='del'>-        // TODO: Multi threaded logging</div><div class='del'>-</div><div class='del'>-        /* Close out the logging */</div><div class='del'>-        gf_log_fini (ctx);</div><div class='del'>-        gf_log_globals_fini ();</div><div class='del'>-</div><div class='del'>-        unlink (GF_LOG_CONTROL_FILE);</div><div class='del'>-        unlink (TEST_FILENAME);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    unlink(GF_LOG_CONTROL_FILE);</div><div class='add'>+    creat(GF_LOG_CONTROL_FILE, O_RDONLY);</div><div class='add'>+    ctx = glusterfs_ctx_new();</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_globals_init(ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("Error from glusterfs_globals_init [%s]\n", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Pre init test, message should not be printed */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_19);</div><div class='add'>+</div><div class='add'>+    THIS-&gt;ctx = ctx;</div><div class='add'>+</div><div class='add'>+    /* TEST 1: messages before initializing the log, goes to stderr</div><div class='add'>+     * and syslog based on criticality */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_12);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 2: messages post initialization, goes to glusterlog and</div><div class='add'>+     * syslog based on severity */</div><div class='add'>+    ret = gf_log_init(ctx, TEST_FILENAME, "logchecks");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        printf("Error from gf_log_init [%s]\n", strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_13);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 3: Test rotation */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_logrotate(0);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_5);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 4: Check flush, nothing noticeable should occur :) */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_flush();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_CRITICAL, 0, logchecks_msg_6);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 5: Change format */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_set_logformat(gf_logformat_traditional);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_14);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 6: Change level */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_set_loglevel(ctx, GF_LOG_CRITICAL);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_15);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* Reset to run with syslog */</div><div class='add'>+    gf_log_set_logformat(gf_logformat_withmsgid);</div><div class='add'>+    gf_log_set_loglevel(ctx, GF_LOG_INFO);</div><div class='add'>+</div><div class='add'>+    /* Run tests with logger changed to syslog */</div><div class='add'>+    /* TEST 7: No more gluster logs */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_set_logger(gf_logger_syslog);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_16);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 8: Change format */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_set_logformat(gf_logformat_traditional);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_14);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    /* TEST 9: Change level */</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+    gf_log_set_loglevel(ctx, GF_LOG_CRITICAL);</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_15);</div><div class='add'>+    go_log();</div><div class='add'>+    gf_msg("logchecks", GF_LOG_ALERT, 0, logchecks_msg_11);</div><div class='add'>+</div><div class='add'>+    // TODO: signal crash prints, but not yet feasible here</div><div class='add'>+    // TODO: Graph printing</div><div class='add'>+    // TODO: Multi threaded logging</div><div class='add'>+</div><div class='add'>+    /* Close out the logging */</div><div class='add'>+    gf_log_fini(ctx);</div><div class='add'>+    gf_log_globals_fini();</div><div class='add'>+</div><div class='add'>+    unlink(GF_LOG_CONTROL_FILE);</div><div class='add'>+    unlink(TEST_FILENAME);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/posix/zero-fill-enospace.c b/tests/basic/posix/zero-fill-enospace.c<br/>index 7c0d31128b3..1371ff59a5f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/posix/zero-fill-enospace.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/posix/zero-fill-enospace.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/posix/zero-fill-enospace.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/posix/zero-fill-enospace.c</a></div><div class='hunk'>@@ -3,62 +3,64 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        int        ret = 1;</div><div class='del'>-        int        size = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+    int size = 0;</div><div class='ctx'> </div><div class='del'>-        if (argc != 6) {</div><div class='del'>-                fprintf (stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;log-file&gt; &lt;size&gt;\n", argv[0]);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 6) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;log-file&gt; &lt;size&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[1], 24007);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_set_logging (fs, argv[4], 7);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[1], 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_set_logging(fs, argv[4], 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = glfs_open (fs, argv[3], O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = glfs_open(fs, argv[3], O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        size = atoi(argv[5]);</div><div class='del'>-        if (size &lt; 0) {</div><div class='del'>-                fprintf (stderr, "Wrong size %s", argv[5]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_zerofill (fd, 0, atoi(argv[5]));</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "glfs_zerofill: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    size = atoi(argv[5]);</div><div class='add'>+    if (size &lt; 0) {</div><div class='add'>+        fprintf(stderr, "Wrong size %s", argv[5]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_zerofill(fd, 0, atoi(argv[5]));</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "glfs_zerofill: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                glfs_close(fd);</div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/quota.c b/tests/basic/quota.c<br/>index f69b0ea9bc5..809ceb8e54c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/quota.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/quota.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/quota.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/quota.c</a></div><div class='hunk'>@@ -8,83 +8,82 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-nwrite (int fd, const void *buf, size_t count)</div><div class='add'>+nwrite(int fd, const void *buf, size_t count)</div><div class='ctx'> {</div><div class='del'>-        ssize_t  ret        = 0;</div><div class='del'>-        ssize_t  written    = 0;</div><div class='add'>+    ssize_t ret = 0;</div><div class='add'>+    ssize_t written = 0;</div><div class='ctx'> </div><div class='del'>-        for (written = 0; written != count; written += ret) {</div><div class='del'>-                ret = write (fd, buf + written, count - written);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        if (errno == EINTR)</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        else</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+    for (written = 0; written != count; written += ret) {</div><div class='add'>+        ret = write(fd, buf + written, count - written);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            if (errno == EINTR)</div><div class='add'>+                ret = 0;</div><div class='add'>+            else</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = written;</div><div class='add'>+    ret = written;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-file_write (char *filename, int bs, int count)</div><div class='add'>+file_write(char *filename, int bs, int count)</div><div class='ctx'> {</div><div class='del'>-        int  fd              = 0;</div><div class='del'>-        int  ret             = -1;</div><div class='del'>-        int  i               = 0;</div><div class='del'>-        char *buf            = NULL;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        bs = bs * 1024;</div><div class='add'>+    bs = bs * 1024;</div><div class='ctx'> </div><div class='del'>-        buf = (char *) malloc (bs);</div><div class='del'>-        if (buf == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    buf = (char *)malloc(bs);</div><div class='add'>+    if (buf == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        memset (buf, 0, bs);</div><div class='add'>+    memset(buf, 0, bs);</div><div class='ctx'> </div><div class='del'>-        fd = open (filename, O_RDWR|O_CREAT|O_SYNC, 0600);</div><div class='del'>-        while (i &lt; count) {</div><div class='del'>-                ret = nwrite(fd, buf, bs);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        close (fd);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                i++;</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT | O_SYNC, 0600);</div><div class='add'>+    while (i &lt; count) {</div><div class='add'>+        ret = nwrite(fd, buf, bs);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            close(fd);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fdatasync(fd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                close (fd);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fdatasync(fd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        close(fd);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = close(fd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = close(fd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (buf)</div><div class='del'>-                free (buf);</div><div class='del'>-        return ret;</div><div class='add'>+    if (buf)</div><div class='add'>+        free(buf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                printf("Usage: %s &lt;filename&gt; &lt;block size in k&gt; &lt;count&gt;\n",</div><div class='del'>-                        argv[0]);</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        printf("Usage: %s &lt;filename&gt; &lt;block size in k&gt; &lt;count&gt;\n", argv[0]);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (file_write (argv[1], atoi(argv[2]), atoi(argv[3])) &lt; 0) {</div><div class='del'>-                perror ("write failed");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    if (file_write(argv[1], atoi(argv[2]), atoi(argv[3])) &lt; 0) {</div><div class='add'>+        perror("write failed");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return EXIT_SUCCESS;</div><div class='add'>+    return EXIT_SUCCESS;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/basic/tier/file_lock.c b/tests/basic/tier/file_lock.c<br/>index 730cca92e42..20fdbc0f668 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/basic/tier/file_lock.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/basic/tier/file_lock.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/basic/tier/file_lock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/basic/tier/file_lock.c</a></div><div class='hunk'>@@ -3,73 +3,70 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-void usage (void)</div><div class='add'>+void</div><div class='add'>+usage(void)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        printf ("Usage: testlock &lt;filepath&gt; [R|W]\n");</div><div class='del'>-        return;</div><div class='add'>+    printf("Usage: testlock &lt;filepath&gt; [R|W]\n");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int main (int argc, char *argv[])</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char *file_path = NULL;</div><div class='del'>-        int fd = -1;</div><div class='del'>-        struct flock lock = {0};</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int c = 0;</div><div class='del'>-</div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                usage ();</div><div class='del'>-                exit (1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        file_path = argv[1];</div><div class='del'>-        fd = open (file_path, O_RDWR);</div><div class='del'>-</div><div class='del'>-        if (-1 == fd) {</div><div class='del'>-                printf ("Failed to open file %s. %m\n", file_path);</div><div class='del'>-                exit (1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: Check for invalid input*/</div><div class='del'>-</div><div class='del'>-        if (!strcmp (argv[2], "W")) {</div><div class='del'>-                lock.l_type = F_WRLCK;</div><div class='del'>-                printf("Taking write lock\n");</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                lock.l_type = F_RDLCK;</div><div class='del'>-                printf("Taking read lock\n");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0;</div><div class='del'>-        lock.l_len = 0;</div><div class='del'>-        lock.l_pid = getpid ();</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        printf ("Acquiring lock on %s\n", file_path);</div><div class='del'>-        ret = fcntl (fd, F_SETLK, &amp;lock);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("Failed to acquire lock on %s (%m)\n", file_path);</div><div class='del'>-                close (fd);</div><div class='del'>-                exit (1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sleep(10);</div><div class='del'>-</div><div class='del'>-        /*Unlock*/</div><div class='del'>-</div><div class='del'>-        printf ("Releasing lock on %s\n", file_path);</div><div class='del'>-        lock.l_type = F_UNLCK;</div><div class='del'>-        ret = fcntl (fd, F_SETLK, &amp;lock);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("Failed to release lock on %s (%m)\n", file_path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        close (fd);</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    char *file_path = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    struct flock lock = {0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int c = 0;</div><div class='add'>+</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        usage();</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    file_path = argv[1];</div><div class='add'>+    fd = open(file_path, O_RDWR);</div><div class='add'>+</div><div class='add'>+    if (-1 == fd) {</div><div class='add'>+        printf("Failed to open file %s. %m\n", file_path);</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: Check for invalid input*/</div><div class='add'>+</div><div class='add'>+    if (!strcmp(argv[2], "W")) {</div><div class='add'>+        lock.l_type = F_WRLCK;</div><div class='add'>+        printf("Taking write lock\n");</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        lock.l_type = F_RDLCK;</div><div class='add'>+        printf("Taking read lock\n");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_pid = getpid();</div><div class='add'>+</div><div class='add'>+    printf("Acquiring lock on %s\n", file_path);</div><div class='add'>+    ret = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("Failed to acquire lock on %s (%m)\n", file_path);</div><div class='add'>+        close(fd);</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sleep(10);</div><div class='add'>+</div><div class='add'>+    /*Unlock*/</div><div class='add'>+</div><div class='add'>+    printf("Releasing lock on %s\n", file_path);</div><div class='add'>+    lock.l_type = F_UNLCK;</div><div class='add'>+    ret = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("Failed to release lock on %s (%m)\n", file_path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bitrot/br-stub.c b/tests/bitrot/br-stub.c<br/>index 5b862832e77..1111f710f59 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bitrot/br-stub.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bitrot/br-stub.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bitrot/br-stub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bitrot/br-stub.c</a></div><div class='hunk'>@@ -15,179 +15,181 @@</div><div class='ctx'> </div><div class='ctx'> /* NOTE: no size discovery */</div><div class='ctx'> int</div><div class='del'>-brstub_validate_version (char *bpath, unsigned long version)</div><div class='add'>+brstub_validate_version(char *bpath, unsigned long version)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int match = 0;</div><div class='del'>-        size_t xsize = 0;</div><div class='del'>-        br_version_t *xv = NULL;</div><div class='del'>-</div><div class='del'>-        xsize = sizeof (br_version_t);</div><div class='del'>-</div><div class='del'>-        xv = calloc (1, xsize);</div><div class='del'>-        if (!xv) {</div><div class='del'>-                match = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = getxattr (bpath, "trusted.bit-rot.version", xv, xsize);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (errno == ENODATA)</div><div class='del'>-                        match = -2;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xv-&gt;ongoingversion != version) {</div><div class='del'>-                match = -3;</div><div class='del'>-                fprintf (stderr, "ongoingversion: %lu\n", xv-&gt;ongoingversion);</div><div class='del'>-        }</div><div class='del'>-        free (xv);</div><div class='del'>-</div><div class='del'>- err:</div><div class='del'>-        return match;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int match = 0;</div><div class='add'>+    size_t xsize = 0;</div><div class='add'>+    br_version_t *xv = NULL;</div><div class='add'>+</div><div class='add'>+    xsize = sizeof(br_version_t);</div><div class='add'>+</div><div class='add'>+    xv = calloc(1, xsize);</div><div class='add'>+    if (!xv) {</div><div class='add'>+        match = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = getxattr(bpath, "trusted.bit-rot.version", xv, xsize);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (errno == ENODATA)</div><div class='add'>+            match = -2;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xv-&gt;ongoingversion != version) {</div><div class='add'>+        match = -3;</div><div class='add'>+        fprintf(stderr, "ongoingversion: %lu\n", xv-&gt;ongoingversion);</div><div class='add'>+    }</div><div class='add'>+    free(xv);</div><div class='add'>+</div><div class='add'>+err:</div><div class='add'>+    return match;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-brstub_write_validation (char *filp, char *bpath, unsigned long startversion)</div><div class='add'>+brstub_write_validation(char *filp, char *bpath, unsigned long startversion)</div><div class='ctx'> {</div><div class='del'>-        int fd1 = 0;</div><div class='del'>-        int fd2 = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *string = "string\n";</div><div class='del'>-</div><div class='del'>-        /* read only check */</div><div class='del'>-        fd1 = open (filp, O_RDONLY);</div><div class='del'>-        if (fd1 &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        close (fd1);</div><div class='del'>-</div><div class='del'>-        ret = brstub_validate_version (bpath, startversion);</div><div class='del'>-        if (ret != -2)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        /* single open (write/) check */</div><div class='del'>-        fd1 = open (filp, O_RDWR);</div><div class='del'>-        if (fd1 &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = write (fd1, string, strlen (string));</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto err;</div><div class='del'>-        /**</div><div class='del'>-         * Fsync is done so that the write call has properly reached the</div><div class='del'>-         * disk. For fuse mounts write-behind xlator would have held the</div><div class='del'>-         * writes with itself and for nfs, client would have held the</div><div class='del'>-         * write in its cache. So write fop would not have triggered the</div><div class='del'>-         * versioning as it would have not reached the bit-rot-stub.</div><div class='del'>-         */</div><div class='del'>-        fsync (fd1);</div><div class='del'>-        ret = brstub_validate_version (bpath, startversion);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto err;</div><div class='del'>-        ret = write (fd1, string, strlen (string));</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto err;</div><div class='del'>-        fsync (fd1); /* let it reach the disk */</div><div class='del'>-</div><div class='del'>-        ret = brstub_validate_version (bpath, startversion);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        close (fd1);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Well, this is not a _real_ test per se . For this test to pass</div><div class='del'>-         * the inode should not get a forget() in the interim. Therefore,</div><div class='del'>-         * perform this test asap.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /* multi open (write/) check */</div><div class='del'>-        fd1 = open (filp, O_RDWR);</div><div class='del'>-        if (fd1 &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        fd2 = open (filp, O_WRONLY);</div><div class='del'>-        if (fd1 &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = write (fd1, string, strlen (string));</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = write (fd2, string, strlen (string));</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        /* probably do a syncfs() */</div><div class='del'>-        fsync (fd1);</div><div class='del'>-        fsync (fd2);</div><div class='del'>-</div><div class='del'>-        close (fd1);</div><div class='del'>-        close (fd2);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * incremented once per write()/write().../close()/close() sequence</div><div class='del'>-         */</div><div class='del'>-        ret = brstub_validate_version (bpath, startversion);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- err:</div><div class='del'>-        return -1;</div><div class='add'>+    int fd1 = 0;</div><div class='add'>+    int fd2 = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *string = "string\n";</div><div class='add'>+</div><div class='add'>+    /* read only check */</div><div class='add'>+    fd1 = open(filp, O_RDONLY);</div><div class='add'>+    if (fd1 &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    close(fd1);</div><div class='add'>+</div><div class='add'>+    ret = brstub_validate_version(bpath, startversion);</div><div class='add'>+    if (ret != -2)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    /* single open (write/) check */</div><div class='add'>+    fd1 = open(filp, O_RDWR);</div><div class='add'>+    if (fd1 &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = write(fd1, string, strlen(string));</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto err;</div><div class='add'>+    /**</div><div class='add'>+     * Fsync is done so that the write call has properly reached the</div><div class='add'>+     * disk. For fuse mounts write-behind xlator would have held the</div><div class='add'>+     * writes with itself and for nfs, client would have held the</div><div class='add'>+     * write in its cache. So write fop would not have triggered the</div><div class='add'>+     * versioning as it would have not reached the bit-rot-stub.</div><div class='add'>+     */</div><div class='add'>+    fsync(fd1);</div><div class='add'>+    ret = brstub_validate_version(bpath, startversion);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto err;</div><div class='add'>+    ret = write(fd1, string, strlen(string));</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto err;</div><div class='add'>+    fsync(fd1); /* let it reach the disk */</div><div class='add'>+</div><div class='add'>+    ret = brstub_validate_version(bpath, startversion);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    close(fd1);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Well, this is not a _real_ test per se . For this test to pass</div><div class='add'>+     * the inode should not get a forget() in the interim. Therefore,</div><div class='add'>+     * perform this test asap.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    /* multi open (write/) check */</div><div class='add'>+    fd1 = open(filp, O_RDWR);</div><div class='add'>+    if (fd1 &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    fd2 = open(filp, O_WRONLY);</div><div class='add'>+    if (fd1 &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = write(fd1, string, strlen(string));</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = write(fd2, string, strlen(string));</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    /* probably do a syncfs() */</div><div class='add'>+    fsync(fd1);</div><div class='add'>+    fsync(fd2);</div><div class='add'>+</div><div class='add'>+    close(fd1);</div><div class='add'>+    close(fd2);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * incremented once per write()/write().../close()/close() sequence</div><div class='add'>+     */</div><div class='add'>+    ret = brstub_validate_version(bpath, startversion);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+err:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-brstub_new_object_validate (char *filp, char *brick)</div><div class='add'>+brstub_new_object_validate(char *filp, char *brick)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *fname = NULL;</div><div class='del'>-        char bpath[PATH_MAX] = {0,};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *fname = NULL;</div><div class='add'>+    char bpath[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        fname = basename (filp);</div><div class='del'>-        if (!fname)</div><div class='del'>-                goto err;</div><div class='add'>+    fname = basename(filp);</div><div class='add'>+    if (!fname)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        (void) snprintf (bpath, PATH_MAX, "%s/%s", brick, fname);</div><div class='add'>+    (void)snprintf(bpath, PATH_MAX, "%s/%s", brick, fname);</div><div class='ctx'> </div><div class='del'>-        printf ("Validating initial version..\n");</div><div class='del'>-        ret = brstub_validate_version (bpath, 2);</div><div class='del'>-        if (ret != -2) /* version _should_ be missing */</div><div class='del'>-                goto err;</div><div class='add'>+    printf("Validating initial version..\n");</div><div class='add'>+    ret = brstub_validate_version(bpath, 2);</div><div class='add'>+    if (ret != -2) /* version _should_ be missing */</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        printf ("Validating version on modifications..\n");</div><div class='del'>-        ret = brstub_write_validation (filp, bpath, 2);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    printf("Validating version on modifications..\n");</div><div class='add'>+    ret = brstub_write_validation(filp, bpath, 2);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- err:</div><div class='del'>-        return -1;</div><div class='add'>+err:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *filp = NULL;</div><div class='del'>-        char *brick = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *filp = NULL;</div><div class='add'>+    char *brick = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                printf ("Usage: %s &lt;path&gt; &lt;brick&gt;\n", argv[0]);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        printf("Usage: %s &lt;path&gt; &lt;brick&gt;\n", argv[0]);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        filp = argv[1];</div><div class='del'>-        brick = argv[2];</div><div class='add'>+    filp = argv[1];</div><div class='add'>+    brick = argv[2];</div><div class='ctx'> </div><div class='del'>-        printf ("Validating object version [%s]\n", filp);</div><div class='del'>-        ret = brstub_new_object_validate (filp, brick);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    printf("Validating object version [%s]\n", filp);</div><div class='add'>+    ret = brstub_new_object_validate(filp, brick);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- err:</div><div class='del'>-        return -1;</div><div class='add'>+err:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/access-control/bug-1051896.c b/tests/bugs/access-control/bug-1051896.c<br/>index 27aa1559453..31799d97a71 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/access-control/bug-1051896.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/access-control/bug-1051896.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/access-control/bug-1051896.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/access-control/bug-1051896.c</a></div><div class='hunk'>@@ -13,85 +13,82 @@</div><div class='ctx'> #include &lt;utime.h&gt;</div><div class='ctx'> #include &lt;sys/acl.h&gt;</div><div class='ctx'> </div><div class='del'>-int do_setfacl(const char *path, const char *options, const char *textacl)</div><div class='add'>+int</div><div class='add'>+do_setfacl(const char *path, const char *options, const char *textacl)</div><div class='ctx'> {</div><div class='del'>-	int r;</div><div class='del'>-	int type;</div><div class='del'>-	acl_t acl;</div><div class='del'>-	int dob;</div><div class='del'>-	int dok;</div><div class='del'>-	int dom;</div><div class='del'>-	struct stat st;</div><div class='del'>-	char textmode[30];</div><div class='add'>+    int r;</div><div class='add'>+    int type;</div><div class='add'>+    acl_t acl;</div><div class='add'>+    int dob;</div><div class='add'>+    int dok;</div><div class='add'>+    int dom;</div><div class='add'>+    struct stat st;</div><div class='add'>+    char textmode[30];</div><div class='ctx'> </div><div class='del'>-	r = 0;</div><div class='del'>-	dob = strchr(options, 'b') != (char *)NULL;</div><div class='del'>-	dok = strchr(options, 'k') != (char *)NULL;</div><div class='del'>-	dom = strchr(options, 'm') != (char *)NULL;</div><div class='del'>-	if ((dom &amp;&amp; !textacl)</div><div class='del'>-	    || (!dom &amp;&amp; (textacl || (!dok &amp;&amp; !dob) ||</div><div class='del'>-                                    strchr(options, 'd')))) {</div><div class='del'>-		errno = EBADRQC; /* "bad request" */</div><div class='del'>-		r = -1;</div><div class='del'>-	} else {</div><div class='del'>-		if (dob || dok) {</div><div class='del'>-			r = acl_delete_def_file(path);</div><div class='del'>-		}</div><div class='del'>-		if (dob &amp;&amp; !r) {</div><div class='del'>-			if (!stat(path, &amp;st)) {</div><div class='del'>-				sprintf(textmode,</div><div class='del'>-                                        "u::%c%c%c,g::%c%c%c,o::%c%c%c",</div><div class='del'>-					(st.st_mode &amp; 0400 ? 'r' : '-'),</div><div class='del'>-					(st.st_mode &amp; 0200 ? 'w' : '-'),</div><div class='del'>-					(st.st_mode &amp; 0100 ? 'x' : '-'),</div><div class='del'>-					(st.st_mode &amp; 0040 ? 'r' : '-'),</div><div class='del'>-					(st.st_mode &amp; 0020 ? 'w' : '-'),</div><div class='del'>-					(st.st_mode &amp; 0010 ? 'x' : '-'),</div><div class='del'>-					(st.st_mode &amp; 004 ? 'r' : '-'),</div><div class='del'>-					(st.st_mode &amp; 002 ? 'w' : '-'),</div><div class='del'>-					(st.st_mode &amp; 001 ? 'x' : '-'));</div><div class='del'>-				acl = acl_from_text(textmode);</div><div class='del'>-				if (acl) {</div><div class='del'>-					r = acl_set_file(path,</div><div class='del'>-                                                         ACL_TYPE_ACCESS, acl);</div><div class='del'>-					acl_free(acl);</div><div class='del'>-				} else</div><div class='del'>-					r = -1;</div><div class='del'>-			} else</div><div class='del'>-				r = -1;</div><div class='del'>-		}</div><div class='del'>-		if (!r &amp;&amp; dom) {</div><div class='del'>-			if (strchr(options, 'd'))</div><div class='del'>-				type = ACL_TYPE_DEFAULT;</div><div class='del'>-			else</div><div class='del'>-				type = ACL_TYPE_ACCESS;</div><div class='del'>-			acl = acl_from_text(textacl);</div><div class='del'>-			if (acl) {</div><div class='del'>-				r = acl_set_file(path, type, acl);</div><div class='del'>-				acl_free(acl);</div><div class='del'>-			} else</div><div class='del'>-				r = -1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	if (r)</div><div class='del'>-		r = -errno;</div><div class='del'>-	return r;</div><div class='add'>+    r = 0;</div><div class='add'>+    dob = strchr(options, 'b') != (char *)NULL;</div><div class='add'>+    dok = strchr(options, 'k') != (char *)NULL;</div><div class='add'>+    dom = strchr(options, 'm') != (char *)NULL;</div><div class='add'>+    if ((dom &amp;&amp; !textacl) ||</div><div class='add'>+        (!dom &amp;&amp; (textacl || (!dok &amp;&amp; !dob) || strchr(options, 'd')))) {</div><div class='add'>+        errno = EBADRQC; /* "bad request" */</div><div class='add'>+        r = -1;</div><div class='add'>+    } else {</div><div class='add'>+        if (dob || dok) {</div><div class='add'>+            r = acl_delete_def_file(path);</div><div class='add'>+        }</div><div class='add'>+        if (dob &amp;&amp; !r) {</div><div class='add'>+            if (!stat(path, &amp;st)) {</div><div class='add'>+                sprintf(textmode, "u::%c%c%c,g::%c%c%c,o::%c%c%c",</div><div class='add'>+                        (st.st_mode &amp; 0400 ? 'r' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 0200 ? 'w' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 0100 ? 'x' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 0040 ? 'r' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 0020 ? 'w' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 0010 ? 'x' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 004 ? 'r' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 002 ? 'w' : '-'),</div><div class='add'>+                        (st.st_mode &amp; 001 ? 'x' : '-'));</div><div class='add'>+                acl = acl_from_text(textmode);</div><div class='add'>+                if (acl) {</div><div class='add'>+                    r = acl_set_file(path, ACL_TYPE_ACCESS, acl);</div><div class='add'>+                    acl_free(acl);</div><div class='add'>+                } else</div><div class='add'>+                    r = -1;</div><div class='add'>+            } else</div><div class='add'>+                r = -1;</div><div class='add'>+        }</div><div class='add'>+        if (!r &amp;&amp; dom) {</div><div class='add'>+            if (strchr(options, 'd'))</div><div class='add'>+                type = ACL_TYPE_DEFAULT;</div><div class='add'>+            else</div><div class='add'>+                type = ACL_TYPE_ACCESS;</div><div class='add'>+            acl = acl_from_text(textacl);</div><div class='add'>+            if (acl) {</div><div class='add'>+                r = acl_set_file(path, type, acl);</div><div class='add'>+                acl_free(acl);</div><div class='add'>+            } else</div><div class='add'>+                r = -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (r)</div><div class='add'>+        r = -errno;</div><div class='add'>+    return r;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int main(int argc, char *argv[])</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-	int rc = 0;</div><div class='add'>+    int rc = 0;</div><div class='ctx'> </div><div class='del'>-	if (argc != 4) {</div><div class='del'>-		fprintf(stderr,</div><div class='del'>-                        "usage: ./setfacl_test &lt;path&gt; &lt;options&gt; &lt;textacl&gt;\n");</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-	rc = do_setfacl(argv[1], argv[2], argv[3]);</div><div class='del'>-	if (rc != 0) {</div><div class='del'>-		fprintf(stderr, "do_setfacl failed: %s\n", strerror(errno));</div><div class='del'>-		return rc;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "usage: ./setfacl_test &lt;path&gt; &lt;options&gt; &lt;textacl&gt;\n");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    rc = do_setfacl(argv[1], argv[2], argv[3]);</div><div class='add'>+    if (rc != 0) {</div><div class='add'>+        fprintf(stderr, "do_setfacl failed: %s\n", strerror(errno));</div><div class='add'>+        return rc;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/access-control/bug-1387241.c b/tests/bugs/access-control/bug-1387241.c<br/>index 04e0d6ea11f..e2e843a2fda 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/access-control/bug-1387241.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/access-control/bug-1387241.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/access-control/bug-1387241.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/access-control/bug-1387241.c</a></div><div class='hunk'>@@ -3,15 +3,16 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> </div><div class='del'>-int main(int argc, char *argv[])</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int ret = EXIT_FAILURE;</div><div class='del'>-        int fd = open(argv[1], O_RDONLY|O_TRUNC);</div><div class='add'>+    int ret = EXIT_FAILURE;</div><div class='add'>+    int fd = open(argv[1], O_RDONLY | O_TRUNC);</div><div class='ctx'> </div><div class='del'>-        if (fd) {</div><div class='del'>-                ret = EXIT_SUCCESS;</div><div class='del'>-                close(fd);</div><div class='del'>-        }</div><div class='add'>+    if (fd) {</div><div class='add'>+        ret = EXIT_SUCCESS;</div><div class='add'>+        close(fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/cli/bug-1169302.c b/tests/bugs/cli/bug-1169302.c<br/>index aa9f950abf2..7c6b5fbf856 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/cli/bug-1169302.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/cli/bug-1169302.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/cli/bug-1169302.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/cli/bug-1169302.c</a></div><div class='hunk'>@@ -7,72 +7,73 @@</div><div class='ctx'> </div><div class='ctx'> int keep_running = 1;</div><div class='ctx'> </div><div class='del'>-void stop_running(int sig)</div><div class='add'>+void</div><div class='add'>+stop_running(int sig)</div><div class='ctx'> {</div><div class='del'>-        if (sig == SIGTERM)</div><div class='del'>-                keep_running = 0;</div><div class='add'>+    if (sig == SIGTERM)</div><div class='add'>+        keep_running = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t *fs = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        char *filename = NULL;</div><div class='del'>-        char *logfile = NULL;</div><div class='del'>-        char *host = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 5) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        host = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-        filename = argv[4];</div><div class='del'>-</div><div class='del'>-        /* setup signal handler for exiting */</div><div class='del'>-        signal (SIGTERM, stop_running);</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (argv[1]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", host, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat (fs, filename, O_RDWR, 0644);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* sleep until SIGTERM has been received */</div><div class='del'>-        while (keep_running) {</div><div class='del'>-                sleep (1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_close (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *host = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 5) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    host = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+    filename = argv[4];</div><div class='add'>+</div><div class='add'>+    /* setup signal handler for exiting */</div><div class='add'>+    signal(SIGTERM, stop_running);</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(argv[1]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", host, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, filename, O_RDWR, 0644);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* sleep until SIGTERM has been received */</div><div class='add'>+    while (keep_running) {</div><div class='add'>+        sleep(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_close(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/core/bug-834465.c b/tests/bugs/core/bug-834465.c<br/>index 61d3deac077..33dd270b112 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/core/bug-834465.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/core/bug-834465.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/core/bug-834465.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/core/bug-834465.c</a></div><div class='hunk'>@@ -7,55 +7,54 @@</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int          fd       = -1;</div><div class='del'>-        char        *filename = NULL;</div><div class='del'>-        struct flock lock     = {0, };</div><div class='del'>-        int          i        = 0;</div><div class='del'>-        int          ret      = -1;</div><div class='del'>-</div><div class='del'>-        if (argc != 2) {</div><div class='del'>-                fprintf (stderr, "Usage: %s &lt;filename&gt; ", argv[0]);</div><div class='del'>-                goto out;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    struct flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (argc != 2) {</div><div class='add'>+        fprintf(stderr, "Usage: %s &lt;filename&gt; ", argv[0]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    filename = argv[1];</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, 0);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open (%s) failed (%s)\n", filename, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 1;</div><div class='add'>+    lock.l_len = 1;</div><div class='add'>+</div><div class='add'>+    while (i &lt; 100) {</div><div class='add'>+        lock.l_type = F_WRLCK;</div><div class='add'>+        ret = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "fcntl setlk failed (%s)\n", strerror(errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        filename = argv[1];</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR | O_CREAT, 0);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open (%s) failed (%s)\n", filename,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='add'>+        lock.l_type = F_UNLCK;</div><div class='add'>+        ret = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "fcntl setlk failed (%s)\n", strerror(errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        lock.l_type = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 1;</div><div class='del'>-        lock.l_len = 1;</div><div class='del'>-</div><div class='del'>-        while (i &lt; 100) {</div><div class='del'>-                lock.l_type = F_WRLCK;</div><div class='del'>-                ret = fcntl (fd, F_SETLK, &amp;lock);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "fcntl setlk failed (%s)\n",</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                lock.l_type = F_UNLCK;</div><div class='del'>-                ret = fcntl (fd, F_SETLK, &amp;lock);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "fcntl setlk failed (%s)\n",</div><div class='del'>-                                        strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/distribute/bug-1193636.c b/tests/bugs/distribute/bug-1193636.c<br/>index 438efa8e686..ea3f79a4e06 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/distribute/bug-1193636.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/distribute/bug-1193636.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/distribute/bug-1193636.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/distribute/bug-1193636.c</a></div><div class='hunk'>@@ -5,66 +5,64 @@</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='add'>+#define MY_XATTR_NAME "user.ftest"</div><div class='add'>+#define MY_XATTR_VAL "ftestval"</div><div class='ctx'> </div><div class='del'>-#define MY_XATTR_NAME   "user.ftest"</div><div class='del'>-#define MY_XATTR_VAL    "ftestval"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-void usage (void)</div><div class='add'>+void</div><div class='add'>+usage(void)</div><div class='ctx'> {</div><div class='del'>-        printf ("Usage : bug-1193636 &lt;filename&gt; &lt;xattr_name&gt; &lt;op&gt;\n");</div><div class='del'>-        printf ("   op : 0 - set, 1 - remove\n");</div><div class='add'>+    printf("Usage : bug-1193636 &lt;filename&gt; &lt;xattr_name&gt; &lt;op&gt;\n");</div><div class='add'>+    printf("   op : 0 - set, 1 - remove\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int main (int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int fd;</div><div class='del'>-        int err = 0;</div><div class='del'>-        char *xattr_name = NULL;</div><div class='del'>-        int op = 0;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                usage ();</div><div class='del'>-                exit (1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op = atoi (argv[3]);</div><div class='del'>-</div><div class='del'>-        if ((op != 0) &amp;&amp; (op != 1)) {</div><div class='del'>-                printf ("Invalid operation specified.\n");</div><div class='del'>-                usage ();</div><div class='del'>-                exit (1);</div><div class='add'>+    int fd;</div><div class='add'>+    int err = 0;</div><div class='add'>+    char *xattr_name = NULL;</div><div class='add'>+    int op = 0;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        usage();</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op = atoi(argv[3]);</div><div class='add'>+</div><div class='add'>+    if ((op != 0) &amp;&amp; (op != 1)) {</div><div class='add'>+        printf("Invalid operation specified.\n");</div><div class='add'>+        usage();</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_name = argv[2];</div><div class='add'>+</div><div class='add'>+    fd = open(argv[1], O_RDWR);</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        printf("Failed to open file %s\n", argv[1]);</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!op) {</div><div class='add'>+        err = fsetxattr(fd, xattr_name, MY_XATTR_VAL, strlen(MY_XATTR_VAL) + 1,</div><div class='add'>+                        XATTR_CREATE);</div><div class='add'>+</div><div class='add'>+        if (err) {</div><div class='add'>+            printf("Failed to set xattr %s: %m\n", xattr_name);</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        xattr_name = argv[2];</div><div class='add'>+    } else {</div><div class='add'>+        err = fremovexattr(fd, xattr_name);</div><div class='ctx'> </div><div class='del'>-        fd = open(argv[1], O_RDWR);</div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                printf ("Failed to open file %s\n", argv[1]);</div><div class='del'>-                exit (1);</div><div class='add'>+        if (err) {</div><div class='add'>+            printf("Failed to remove xattr %s: %m\n", xattr_name);</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!op) {</div><div class='del'>-                err = fsetxattr (fd, xattr_name, MY_XATTR_VAL,</div><div class='del'>-                                 strlen (MY_XATTR_VAL) + 1, XATTR_CREATE);</div><div class='add'>+    close(fd);</div><div class='ctx'> </div><div class='del'>-                if (err) {</div><div class='del'>-                        printf ("Failed to set xattr %s: %m\n", xattr_name);</div><div class='del'>-                        exit (1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                err = fremovexattr (fd, xattr_name);</div><div class='del'>-</div><div class='del'>-                if (err) {</div><div class='del'>-                        printf ("Failed to remove xattr %s: %m\n", xattr_name);</div><div class='del'>-                        exit (1);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        close (fd);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/tests/bugs/distribute/bug-860663.c b/tests/bugs/distribute/bug-860663.c<br/>index bee4e7d40b1..ca0c31ffe8f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/distribute/bug-860663.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/distribute/bug-860663.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/distribute/bug-860663.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/distribute/bug-860663.c</a></div><div class='hunk'>@@ -6,38 +6,36 @@</div><div class='ctx'> #include &lt;err.h&gt;</div><div class='ctx'> #include &lt;sys/param.h&gt;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-main(argc, argv)</div><div class='del'>-        int argc;</div><div class='del'>-        char **argv;</div><div class='add'>+int main(argc, argv) int argc;</div><div class='add'>+char **argv;</div><div class='ctx'> {</div><div class='del'>-        char *basepath;</div><div class='del'>-        char path[MAXPATHLEN + 1];</div><div class='del'>-        unsigned int count;</div><div class='del'>-        int i, fd;</div><div class='add'>+    char *basepath;</div><div class='add'>+    char path[MAXPATHLEN + 1];</div><div class='add'>+    unsigned int count;</div><div class='add'>+    int i, fd;</div><div class='ctx'> </div><div class='del'>-        if (argc != 3)</div><div class='del'>-                errx(1, "usage: %s path count", argv[0]);</div><div class='add'>+    if (argc != 3)</div><div class='add'>+        errx(1, "usage: %s path count", argv[0]);</div><div class='ctx'> </div><div class='del'>-        basepath = argv[1];</div><div class='del'>-        count = atoi(argv[2]);</div><div class='add'>+    basepath = argv[1];</div><div class='add'>+    count = atoi(argv[2]);</div><div class='ctx'> </div><div class='del'>-        if (count &gt; 999999)</div><div class='del'>-                errx(1, "count too big");</div><div class='add'>+    if (count &gt; 999999)</div><div class='add'>+        errx(1, "count too big");</div><div class='ctx'> </div><div class='del'>-        if (strlen(basepath) &gt; MAXPATHLEN - 6)</div><div class='del'>-                errx(1, "path too long");</div><div class='add'>+    if (strlen(basepath) &gt; MAXPATHLEN - 6)</div><div class='add'>+        errx(1, "path too long");</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                (void)sprintf(path, "%s%06d", basepath, i);</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        (void)sprintf(path, "%s%06d", basepath, i);</div><div class='ctx'> </div><div class='del'>-                fd = open(path, O_CREAT|O_RDWR, 0644);</div><div class='del'>-                if (fd == -1)</div><div class='del'>-                        err(1, "create %s failed", path);</div><div class='add'>+        fd = open(path, O_CREAT | O_RDWR, 0644);</div><div class='add'>+        if (fd == -1)</div><div class='add'>+            err(1, "create %s failed", path);</div><div class='ctx'> </div><div class='del'>-                if (close(fd) != 0)</div><div class='del'>-                        warn("close %s failed", path);</div><div class='del'>-        }</div><div class='add'>+        if (close(fd) != 0)</div><div class='add'>+            warn("close %s failed", path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/ec/bug-1161886.c b/tests/bugs/ec/bug-1161886.c<br/>index 1faae831898..1f12650ea6d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/ec/bug-1161886.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/ec/bug-1161886.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/ec/bug-1161886.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/ec/bug-1161886.c</a></div><div class='hunk'>@@ -4,50 +4,50 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        int        ret = 1;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file&gt;\n", argv[0]);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[1], 24007);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_set_logging (fs, "/dev/null", 7);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_open (fs, argv[3], O_RDWR | O_TRUNC);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        glfs_close(fd);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file&gt;\n", argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[1], 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_set_logging(fs, "/dev/null", 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_open(fs, argv[3], O_RDWR | O_TRUNC);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        glfs_fini (fs);</div><div class='add'>+    glfs_fini(fs);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/fuse/bug-1126048.c b/tests/bugs/fuse/bug-1126048.c<br/>index 01c3484172d..19165ecf6f7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/fuse/bug-1126048.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/fuse/bug-1126048.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/fuse/bug-1126048.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/fuse/bug-1126048.c</a></div><div class='hunk'>@@ -12,30 +12,32 @@</div><div class='ctx'>  * fsync should fail without crashing the mount process.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int fd = 0;</div><div class='del'>-        char    *cmd = argv[1];</div><div class='del'>-        struct stat stbuf = {0, };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    char *cmd = argv[1];</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        printf ("cmd is: %s\n", cmd);</div><div class='del'>-        fd = open("a.txt", O_CREAT|O_RDWR, 0644);</div><div class='del'>-        if (fd &lt; 0)</div><div class='del'>-                printf ("open failed: %s\n", strerror(errno));</div><div class='add'>+    printf("cmd is: %s\n", cmd);</div><div class='add'>+    fd = open("a.txt", O_CREAT | O_RDWR, 0644);</div><div class='add'>+    if (fd &lt; 0)</div><div class='add'>+        printf("open failed: %s\n", strerror(errno));</div><div class='ctx'> </div><div class='del'>-        ret = unlink("a.txt");</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                printf ("unlink failed: %s\n", strerror(errno));</div><div class='del'>-        if (write (fd, "abc", 3) &lt; 0)</div><div class='del'>-                printf ("Not able to print %s\n", strerror (errno));</div><div class='del'>-        system(cmd);</div><div class='del'>-        sleep(1); /* No way to confirm graph switch so sleep 1 */</div><div class='del'>-        ret = fstat (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                printf ("fstat failed %\n", strerror (errno));</div><div class='del'>-        ret = fsync(fd);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                printf ("Not able to fsync %s\n", strerror (errno));</div><div class='del'>-        return 0;</div><div class='add'>+    ret = unlink("a.txt");</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        printf("unlink failed: %s\n", strerror(errno));</div><div class='add'>+    if (write(fd, "abc", 3) &lt; 0)</div><div class='add'>+        printf("Not able to print %s\n", strerror(errno));</div><div class='add'>+    system(cmd);</div><div class='add'>+    sleep(1); /* No way to confirm graph switch so sleep 1 */</div><div class='add'>+    ret = fstat(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        printf("fstat failed %\n", strerror(errno));</div><div class='add'>+    ret = fsync(fd);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        printf("Not able to fsync %s\n", strerror(errno));</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/gfapi/bug-1093594.c b/tests/bugs/gfapi/bug-1093594.c<br/>index aff271e4caf..f7a06dd5ba8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1093594.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/gfapi/bug-1093594.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1093594.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1093594.c</a></div><div class='hunk'>@@ -5,7 +5,7 @@</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='del'>-#define WRITE_SIZE (128*1024)</div><div class='add'>+#define WRITE_SIZE (128 * 1024)</div><div class='ctx'> #define READ_WRITE_LOOP 100</div><div class='ctx'> #define FOP_LOOP_COUNT 20</div><div class='ctx'> #define TEST_CASE_LOOP 20</div><div class='hunk'>@@ -14,304 +14,298 @@ int gfapi = 1;</div><div class='ctx'> static int extension = 1;</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-large_number_of_fops (glfs_t *fs) {</div><div class='del'>-        int       ret       = 0;</div><div class='del'>-        int       i         = 0;</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        char      *dir1     = NULL, *dir2 = NULL, *filename1 = NULL, *filename2 = NULL;</div><div class='del'>-        char      *buf      = NULL;</div><div class='del'>-        struct stat sb      = {0, };</div><div class='del'>-</div><div class='del'>-        for (i = 0 ; i &lt; FOP_LOOP_COUNT ; i++) {</div><div class='del'>-                ret = asprintf (&amp;dir1, "dir%d", extension);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "cannot construct filename (%s)",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                extension++;</div><div class='del'>-</div><div class='del'>-                ret = glfs_mkdir (fs, dir1, 0755);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "mkdir(%s): %s\n", dir1, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd = glfs_opendir (fs, dir1);</div><div class='del'>-                if (!fd) {</div><div class='del'>-                        fprintf (stderr, "/: %s\n", strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_fsetxattr (fd, "user.dirfattr", "fsetxattr", 8, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "fsetxattr(%s): %d (%s)\n", dir1, ret,</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_closedir (fd);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_closedir failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_rmdir (fs, dir1);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_unlink failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = asprintf (&amp;filename1, "file%d", extension);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "cannot construct filename (%s)",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = asprintf (&amp;filename2, "file-%d", extension);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "cannot construct filename (%s)",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                extension++;</div><div class='del'>-</div><div class='del'>-                fd = glfs_creat (fs, filename1, O_RDWR, 0644);</div><div class='del'>-                if (!fd) {</div><div class='del'>-                        fprintf (stderr, "%s: (%p) %s\n", filename1, fd,</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_rename (fs, filename1, filename2);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_rename failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_lstat (fs, filename2, &amp;sb);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_lstat failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_close (fd);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_close failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_unlink (fs, filename2);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_unlink failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+large_number_of_fops(glfs_t *fs)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    char *dir1 = NULL, *dir2 = NULL, *filename1 = NULL, *filename2 = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; FOP_LOOP_COUNT; i++) {</div><div class='add'>+        ret = asprintf(&amp;dir1, "dir%d", extension);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "cannot construct filename (%s)", strerror(errno));</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-large_read_write (glfs_t *fs) {</div><div class='add'>+        extension++;</div><div class='ctx'> </div><div class='del'>-        int       ret       = 0;</div><div class='del'>-        int       j         = 0;</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        char      *filename = NULL;</div><div class='del'>-        char      *buf      = NULL;</div><div class='add'>+        ret = glfs_mkdir(fs, dir1, 0755);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "mkdir(%s): %s\n", dir1, strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = asprintf (&amp;filename, "filerw%d", extension);</div><div class='add'>+        fd = glfs_opendir(fs, dir1);</div><div class='add'>+        if (!fd) {</div><div class='add'>+            fprintf(stderr, "/: %s\n", strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = glfs_fsetxattr(fd, "user.dirfattr", "fsetxattr", 8, 0);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot construct filename (%s)",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return ret;</div><div class='add'>+            fprintf(stderr, "fsetxattr(%s): %d (%s)\n", dir1, ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        extension++;</div><div class='add'>+        ret = glfs_closedir(fd);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_closedir failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        fd = glfs_creat (fs, filename, O_RDWR, 0644);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                fprintf (stderr, "%s: (%p) %s\n", filename, fd,</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                return -1;</div><div class='add'>+        ret = glfs_rmdir(fs, dir1);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_unlink failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        buf = (char *) malloc (WRITE_SIZE);</div><div class='del'>-        memset (buf, '-', WRITE_SIZE);</div><div class='add'>+        ret = asprintf(&amp;filename1, "file%d", extension);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "cannot construct filename (%s)", strerror(errno));</div><div class='add'>+            return ret;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        for (j = 0; j &lt; READ_WRITE_LOOP; j++) {</div><div class='del'>-                ret = glfs_write (fd, buf, WRITE_SIZE, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "Write(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='add'>+        ret = asprintf(&amp;filename2, "file-%d", extension);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "cannot construct filename (%s)", strerror(errno));</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd1 = glfs_open (fs, filename, O_RDWR);</div><div class='del'>-        if (fd1 &lt; 0) {</div><div class='del'>-                fprintf (stderr, "Open(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                return -1;</div><div class='add'>+        extension++;</div><div class='add'>+</div><div class='add'>+        fd = glfs_creat(fs, filename1, O_RDWR, 0644);</div><div class='add'>+        if (!fd) {</div><div class='add'>+            fprintf(stderr, "%s: (%p) %s\n", filename1, fd, strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        glfs_lseek (fd1, 0, SEEK_SET);</div><div class='del'>-        for (j = 0; j &lt; READ_WRITE_LOOP; j++) {</div><div class='del'>-                ret = glfs_read (fd1, buf, WRITE_SIZE, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "Read(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='add'>+        ret = glfs_rename(fs, filename1, filename2);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_rename failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (j = 0; j &lt; READ_WRITE_LOOP; j++) {</div><div class='del'>-                ret = glfs_write (fd1, buf, WRITE_SIZE, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "Write(%s): %d (%s)\n", filename, ret,</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='add'>+        ret = glfs_lstat(fs, filename2, &amp;sb);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_lstat failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        glfs_close (fd);</div><div class='del'>-        glfs_close (fd1);</div><div class='del'>-        ret = glfs_unlink (fs, filename);</div><div class='add'>+        ret = glfs_close(fd);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_unlink failed with ret: %d (%s)\n",</div><div class='del'>-                        ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='add'>+            fprintf(stderr, "glfs_close failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        free (buf);</div><div class='del'>-        free (filename);</div><div class='add'>+        ret = glfs_unlink(fs, filename2);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_unlink failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-volfile_change (const char *volname) {</div><div class='del'>-        int   ret = 0;</div><div class='del'>-        char *cmd = NULL, *cmd1 = NULL;</div><div class='add'>+large_read_write(glfs_t *fs)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+</div><div class='add'>+    ret = asprintf(&amp;filename, "filerw%d", extension);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot construct filename (%s)", strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = asprintf (&amp;cmd, "gluster volume set %s stat-prefetch off",</div><div class='del'>-                        volname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot construct cli command string (%s)",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    extension++;</div><div class='ctx'> </div><div class='del'>-        ret = asprintf (&amp;cmd1, "gluster volume set %s stat-prefetch on",</div><div class='del'>-                        volname);</div><div class='add'>+    fd = glfs_creat(fs, filename, O_RDWR, 0644);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        fprintf(stderr, "%s: (%p) %s\n", filename, fd, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = (char *)malloc(WRITE_SIZE);</div><div class='add'>+    memset(buf, '-', WRITE_SIZE);</div><div class='add'>+</div><div class='add'>+    for (j = 0; j &lt; READ_WRITE_LOOP; j++) {</div><div class='add'>+        ret = glfs_write(fd, buf, WRITE_SIZE, 0);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot construct cli command string (%s)",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return ret;</div><div class='add'>+            fprintf(stderr, "Write(%s): %d (%s)\n", filename, ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = system (cmd);</div><div class='add'>+    fd1 = glfs_open(fs, filename, O_RDWR);</div><div class='add'>+    if (fd1 &lt; 0) {</div><div class='add'>+        fprintf(stderr, "Open(%s): %d (%s)\n", filename, ret, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_lseek(fd1, 0, SEEK_SET);</div><div class='add'>+    for (j = 0; j &lt; READ_WRITE_LOOP; j++) {</div><div class='add'>+        ret = glfs_read(fd1, buf, WRITE_SIZE, 0);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat-prefetch off on (%s) failed", volname);</div><div class='del'>-                return ret;</div><div class='add'>+            fprintf(stderr, "Read(%s): %d (%s)\n", filename, ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = system (cmd1);</div><div class='add'>+    for (j = 0; j &lt; READ_WRITE_LOOP; j++) {</div><div class='add'>+        ret = glfs_write(fd1, buf, WRITE_SIZE, 0);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat-prefetch on on (%s) failed", volname);</div><div class='del'>-                return ret;</div><div class='add'>+            fprintf(stderr, "Write(%s): %d (%s)\n", filename, ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+    glfs_close(fd1);</div><div class='add'>+    ret = glfs_unlink(fs, filename);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_unlink failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(buf);</div><div class='add'>+    free(filename);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        free (cmd);</div><div class='del'>-        free (cmd1);</div><div class='add'>+static int</div><div class='add'>+volfile_change(const char *volname)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *cmd = NULL, *cmd1 = NULL;</div><div class='add'>+</div><div class='add'>+    ret = asprintf(&amp;cmd, "gluster volume set %s stat-prefetch off", volname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot construct cli command string (%s)",</div><div class='add'>+                strerror(errno));</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = asprintf(&amp;cmd1, "gluster volume set %s stat-prefetch on", volname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot construct cli command string (%s)",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = system(cmd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat-prefetch off on (%s) failed", volname);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = system(cmd1);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat-prefetch on on (%s) failed", volname);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(cmd);</div><div class='add'>+    free(cmd1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs       = NULL;</div><div class='del'>-        int       ret       = 0;</div><div class='del'>-        int       i         = 0;</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        char      *topdir   = "topdir", *filename = "file1";</div><div class='del'>-        char      *buf      = NULL;</div><div class='del'>-        char      *logfile  = NULL;</div><div class='del'>-        char      *hostname = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                        "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file&gt;\n"</div><div class='del'>-                        , argv[0]);</div><div class='del'>-                return -1;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    char *topdir = "topdir", *filename = "file1";</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; TEST_CASE_LOOP; i++) {</div><div class='add'>+        fs = glfs_new(argv[2]);</div><div class='add'>+        if (!fs) {</div><div class='add'>+            fprintf(stderr, "glfs_new: returned NULL (%s)\n", strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; TEST_CASE_LOOP; i++) {</div><div class='del'>-                fs = glfs_new (argv[2]);</div><div class='del'>-                if (!fs) {</div><div class='del'>-                        fprintf (stderr, "glfs_new: returned NULL (%s)\n",</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_set_volfile_server failed ret:%d (%s)\n",</div><div class='del'>-                        ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_set_logging failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = glfs_init (fs);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = large_number_of_fops (fs);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                ret = large_read_write (fs);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                ret = volfile_change (argv[2]);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                ret = large_number_of_fops (fs);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                ret = large_read_write (fs);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                ret = glfs_fini (fs);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+        ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_set_volfile_server failed ret:%d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_set_logging failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = glfs_init(fs);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = large_number_of_fops(fs);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        ret = large_read_write(fs);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        ret = volfile_change(argv[2]);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        ret = large_number_of_fops(fs);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        ret = large_read_write(fs);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/gfapi/bug-1319374.c b/tests/bugs/gfapi/bug-1319374.c<br/>index bf2da998d6e..bd80462e3ba 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1319374.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/gfapi/bug-1319374.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1319374.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1319374.c</a></div><div class='hunk'>@@ -9,122 +9,122 @@</div><div class='ctx'> glfs_t *</div><div class='ctx'> setup_new_client(char *hostname, char *volname, char *log_file, int flag)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        glfs_t *fs = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "\nglfs_new: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, log_file, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_set_logging failed with ret: %d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (flag == NO_INIT)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                                  ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "\nglfs_new: returned NULL (%s)\n", strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, log_file, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_set_logging failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (flag == NO_INIT)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> error:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int        ret         = 0;</div><div class='del'>-        glfs_t    *fs1         = NULL;</div><div class='del'>-        glfs_t    *fs2         = NULL;</div><div class='del'>-        glfs_t    *fs3         = NULL;</div><div class='del'>-        char      *volname     = NULL;</div><div class='del'>-        char      *log_file    = NULL;</div><div class='del'>-        char      *hostname    = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                                "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file location&gt;\n"</div><div class='del'>-                                , argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        log_file = argv[3];</div><div class='del'>-</div><div class='del'>-        fs1 = setup_new_client (hostname, volname, log_file, NO_INIT);</div><div class='del'>-        if (!fs1) {</div><div class='del'>-                fprintf (stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs2 = setup_new_client (hostname, volname, log_file, 0);</div><div class='del'>-        if (!fs2) {</div><div class='del'>-                fprintf (stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs3 = setup_new_client (hostname, volname, log_file, 0);</div><div class='del'>-        if (!fs3) {</div><div class='del'>-                fprintf (stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini (fs3);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                         ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* The crash is seen in gf_log_flush_timeout_cbk(), and this gets</div><div class='del'>-         * triggered when 30s timer expires, hence the sleep of 31s</div><div class='del'>-         */</div><div class='del'>-        sleep (31);</div><div class='del'>-        ret = glfs_fini (fs2);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                         ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs1);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                                  ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini (fs1);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                         ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-error:</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs1 = NULL;</div><div class='add'>+    glfs_t *fs2 = NULL;</div><div class='add'>+    glfs_t *fs3 = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *log_file = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file location&gt;\n",</div><div class='add'>+            argv[0]);</div><div class='ctx'>         return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    log_file = argv[3];</div><div class='add'>+</div><div class='add'>+    fs1 = setup_new_client(hostname, volname, log_file, NO_INIT);</div><div class='add'>+    if (!fs1) {</div><div class='add'>+        fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs2 = setup_new_client(hostname, volname, log_file, 0);</div><div class='add'>+    if (!fs2) {</div><div class='add'>+        fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs3 = setup_new_client(hostname, volname, log_file, 0);</div><div class='add'>+    if (!fs3) {</div><div class='add'>+        fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_fini(fs3);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* The crash is seen in gf_log_flush_timeout_cbk(), and this gets</div><div class='add'>+     * triggered when 30s timer expires, hence the sleep of 31s</div><div class='add'>+     */</div><div class='add'>+    sleep(31);</div><div class='add'>+    ret = glfs_fini(fs2);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs1);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_fini(fs1);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/gfapi/bug-1447266/1460514.c b/tests/bugs/gfapi/bug-1447266/1460514.c<br/>index f04d2d1463f..c721559a668 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1447266/1460514.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/gfapi/bug-1447266/1460514.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1447266/1460514.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1447266/1460514.c</a></div><div class='hunk'>@@ -9,135 +9,142 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, ret) do { \</div><div class='del'>-        if (ret != 0) {            \</div><div class='del'>-                fprintf (stderr, "%s : returned error %d (%s)\n", \</div><div class='del'>-                         func, ret, strerror (errno)); \</div><div class='del'>-                goto out; \</div><div class='del'>-        } else { \</div><div class='del'>-                fprintf (stderr, "%s : returned %d\n", func, ret); \</div><div class='del'>-        } \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(func, ret)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != 0) {                                                        \</div><div class='add'>+            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            goto out;                                                          \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            fprintf(stderr, "%s : returned %d\n", func, ret);                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int                     ret            = 0;</div><div class='del'>-        glfs_t                  *fs            = NULL;</div><div class='del'>-        struct glfs_object      *root = NULL, *dir = NULL, *subdir = NULL;</div><div class='del'>-        struct stat             sb             = {0, };</div><div class='del'>-        char                    *dirname       = "dir";</div><div class='del'>-        char                    *subdirname    = "subdir";</div><div class='del'>-        char                    *logfile       = NULL;</div><div class='del'>-        char                    *volname       = NULL;</div><div class='del'>-        char                    *hostname      = NULL;</div><div class='del'>-        unsigned char subdir_handle[GFAPI_HANDLE_LENGTH] = {'\0'};</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("first attempt glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        root = glfs_h_lookupat (fs, NULL, "/", &amp;sb, 0);</div><div class='del'>-        if (root == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on lookup of / ,%s\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dir = glfs_h_mkdir (fs, root, dirname, 0644, &amp;sb);</div><div class='del'>-        if (dir == NULL) {</div><div class='del'>-                 fprintf (stderr, "glfs_h_mkdir: error on directory creation dir ,%s\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        subdir = glfs_h_mkdir (fs, root, subdirname, 0644, &amp;sb);</div><div class='del'>-        if (subdir == NULL) {</div><div class='del'>-                 fprintf (stderr, "glfs_h_mkdir: error on directory creation subdir ,%s\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_h_extract_handle (subdir, subdir_handle,</div><div class='del'>-                                             GFAPI_HANDLE_LENGTH);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_h_extract_handle: error extracting handle of %s: %s\n",</div><div class='del'>-                         subdirname, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_h_close (subdir);</div><div class='del'>-        subdir = NULL;</div><div class='del'>-        glfs_h_close (dir);</div><div class='del'>-        dir = NULL;</div><div class='del'>-</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        LOG_ERR("glfs_set_volfile_server", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        LOG_ERR("glfs_set_logging", ret);</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        LOG_ERR("second attempt glfs_init", ret);</div><div class='del'>-</div><div class='del'>-        subdir = glfs_h_create_from_handle (fs, subdir_handle, GFAPI_HANDLE_LENGTH,</div><div class='del'>-                                          &amp;sb);</div><div class='del'>-        if (subdir == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_create_from_handle: error on create of %s: from (%p),%s\n",</div><div class='del'>-                         subdirname, subdir_handle, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dir = glfs_h_lookupat (fs, subdir, "..", &amp;sb, 0);</div><div class='del'>-        if (dir == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_h_lookupat: error on directory lookup dir using .. ,%s\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    struct glfs_object *root = NULL, *dir = NULL, *subdir = NULL;</div><div class='add'>+    struct stat sb = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *dirname = "dir";</div><div class='add'>+    char *subdirname = "subdir";</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    unsigned char subdir_handle[GFAPI_HANDLE_LENGTH] = {'\0'};</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("first attempt glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    root = glfs_h_lookupat(fs, NULL, "/", &amp;sb, 0);</div><div class='add'>+    if (root == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_lookupat: error on lookup of / ,%s\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dir = glfs_h_mkdir(fs, root, dirname, 0644, &amp;sb);</div><div class='add'>+    if (dir == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_h_mkdir: error on directory creation dir ,%s\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    subdir = glfs_h_mkdir(fs, root, subdirname, 0644, &amp;sb);</div><div class='add'>+    if (subdir == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_mkdir: error on directory creation subdir ,%s\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_h_extract_handle(subdir, subdir_handle, GFAPI_HANDLE_LENGTH);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_extract_handle: error extracting handle of %s: %s\n",</div><div class='add'>+                subdirname, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_h_close(subdir);</div><div class='add'>+    subdir = NULL;</div><div class='add'>+    glfs_h_close(dir);</div><div class='add'>+    dir = NULL;</div><div class='add'>+</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    LOG_ERR("glfs_set_volfile_server", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    LOG_ERR("glfs_set_logging", ret);</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    LOG_ERR("second attempt glfs_init", ret);</div><div class='add'>+</div><div class='add'>+    subdir = glfs_h_create_from_handle(fs, subdir_handle, GFAPI_HANDLE_LENGTH,</div><div class='add'>+                                       &amp;sb);</div><div class='add'>+    if (subdir == NULL) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "glfs_h_create_from_handle: error on create of %s: from (%p),%s\n",</div><div class='add'>+            subdirname, subdir_handle, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dir = glfs_h_lookupat(fs, subdir, "..", &amp;sb, 0);</div><div class='add'>+    if (dir == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_h_lookupat: error on directory lookup dir using .. ,%s\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (subdir)</div><div class='del'>-                glfs_h_close (subdir);</div><div class='del'>-        if (dir)</div><div class='del'>-                glfs_h_close (dir);</div><div class='del'>-</div><div class='del'>-        if (fs) {</div><div class='del'>-                ret = glfs_fini(fs);</div><div class='del'>-                fprintf (stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                exit(1);</div><div class='del'>-        exit(0);</div><div class='add'>+    if (subdir)</div><div class='add'>+        glfs_h_close(subdir);</div><div class='add'>+    if (dir)</div><div class='add'>+        glfs_h_close(dir);</div><div class='add'>+</div><div class='add'>+    if (fs) {</div><div class='add'>+        ret = glfs_fini(fs);</div><div class='add'>+        fprintf(stderr, "glfs_fini(fs) returned %d \n", ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/gfapi/bug-1447266/bug-1447266.c b/tests/bugs/gfapi/bug-1447266/bug-1447266.c<br/>index e4b3c888a57..2b7e2d627fe 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1447266/bug-1447266.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/gfapi/bug-1447266/bug-1447266.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/bug-1447266/bug-1447266.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/bug-1447266/bug-1447266.c</a></div><div class='hunk'>@@ -4,102 +4,104 @@</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='ctx'> #define TOTAL_ARGS 4</div><div class='del'>-int main(int argc, char *argv[])</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char *cwd = (char *)malloc(PATH_MAX*sizeof(char *));</div><div class='del'>-        char *resolved = NULL;</div><div class='del'>-        char *result = NULL;</div><div class='del'>-        char *buf = NULL;</div><div class='del'>-        struct stat st;</div><div class='del'>-        char *path = NULL;</div><div class='del'>-        int ret;</div><div class='del'>-</div><div class='del'>-        if (argc != TOTAL_ARGS) {</div><div class='del'>-                printf ("Please give all required command line args.\n"</div><div class='del'>-                         "Format : &lt;volname&gt; &lt;server_ip&gt; &lt;path_name&gt;\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_t *fs = glfs_new (argv[1]);</div><div class='del'>-</div><div class='del'>-        if (fs == NULL) {</div><div class='del'>-                printf ("glfs_new: %s\n", strerror(errno));</div><div class='del'>-                /* No need to fail the test for this error */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server(fs, "tcp", argv[2], 24007);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("glfs_set_volfile_server: %s\n", strerror(errno));</div><div class='del'>-                /* No need to fail the test for this error */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        path = argv[3];</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging(fs, "/tmp/gfapi.log", 7);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("glfs_set_logging: %s\n", strerror(errno));</div><div class='del'>-                /* No need to fail the test for this error */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init(fs);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("glfs_init: %s\n", strerror(errno));</div><div class='del'>-                /* No need to fail the test for this error */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sleep(1);</div><div class='del'>-</div><div class='del'>-        ret = glfs_chdir(fs, path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("glfs_chdir: %s\n", strerror(errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = glfs_getcwd(fs, cwd, PATH_MAX);</div><div class='del'>-        if (cwd == NULL) {</div><div class='del'>-                printf ("glfs_getcwd: %s\n", strerror(errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        printf ("\ncwd = %s\n\n", cwd);</div><div class='del'>-</div><div class='del'>-        result = glfs_realpath(fs, path, resolved);</div><div class='del'>-        if (result == NULL) {</div><div class='del'>-                printf ("glfs_realpath: %s\n", strerror(errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_stat(fs, path, &amp;st);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("glfs_stat: %s\n", strerror(errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (cwd)</div><div class='del'>-                free(cwd);</div><div class='del'>-</div><div class='del'>-        result = glfs_realpath(fs, path, resolved);</div><div class='del'>-        if (result == NULL) {</div><div class='del'>-                printf ("glfs_realpath: %s\n", strerror(errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini(fs);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("glfs_fini: %s\n", strerror(errno));</div><div class='del'>-                /* No need to fail the test for this error */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        printf ("\n");</div><div class='add'>+    char *cwd = (char *)malloc(PATH_MAX * sizeof(char *));</div><div class='add'>+    char *resolved = NULL;</div><div class='add'>+    char *result = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    struct stat st;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int ret;</div><div class='add'>+</div><div class='add'>+    if (argc != TOTAL_ARGS) {</div><div class='add'>+        printf(</div><div class='add'>+            "Please give all required command line args.\n"</div><div class='add'>+            "Format : &lt;volname&gt; &lt;server_ip&gt; &lt;path_name&gt;\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_t *fs = glfs_new(argv[1]);</div><div class='add'>+</div><div class='add'>+    if (fs == NULL) {</div><div class='add'>+        printf("glfs_new: %s\n", strerror(errno));</div><div class='add'>+        /* No need to fail the test for this error */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[2], 24007);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("glfs_set_volfile_server: %s\n", strerror(errno));</div><div class='add'>+        /* No need to fail the test for this error */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    path = argv[3];</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, "/tmp/gfapi.log", 7);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("glfs_set_logging: %s\n", strerror(errno));</div><div class='add'>+        /* No need to fail the test for this error */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("glfs_init: %s\n", strerror(errno));</div><div class='add'>+        /* No need to fail the test for this error */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sleep(1);</div><div class='add'>+</div><div class='add'>+    ret = glfs_chdir(fs, path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("glfs_chdir: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = glfs_getcwd(fs, cwd, PATH_MAX);</div><div class='add'>+    if (cwd == NULL) {</div><div class='add'>+        printf("glfs_getcwd: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("\ncwd = %s\n\n", cwd);</div><div class='add'>+</div><div class='add'>+    result = glfs_realpath(fs, path, resolved);</div><div class='add'>+    if (result == NULL) {</div><div class='add'>+        printf("glfs_realpath: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_stat(fs, path, &amp;st);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("glfs_stat: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (cwd)</div><div class='add'>+        free(cwd);</div><div class='add'>+</div><div class='add'>+    result = glfs_realpath(fs, path, resolved);</div><div class='add'>+    if (result == NULL) {</div><div class='add'>+        printf("glfs_realpath: %s\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("glfs_fini: %s\n", strerror(errno));</div><div class='add'>+        /* No need to fail the test for this error */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("\n");</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/gfapi/glfs_vol_set_IO_ERR.c b/tests/bugs/gfapi/glfs_vol_set_IO_ERR.c<br/>index 68011171744..f38f01144d3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/glfs_vol_set_IO_ERR.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/gfapi/glfs_vol_set_IO_ERR.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/gfapi/glfs_vol_set_IO_ERR.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/gfapi/glfs_vol_set_IO_ERR.c</a></div><div class='hunk'>@@ -10,156 +10,154 @@</div><div class='ctx'> glfs_t *</div><div class='ctx'> setup_new_client(char *hostname, char *volname, char *log_fileile)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        glfs_t *fs = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "\nglfs_new: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, log_fileile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_set_logging failed with ret: %d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                                  ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-        return fs;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "\nglfs_new: returned NULL (%s)\n", strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, log_fileile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_set_logging failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    return fs;</div><div class='ctx'> error:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-write_something (glfs_t *fs)</div><div class='add'>+write_something(glfs_t *fs)</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-        char      *buf      = NULL;</div><div class='del'>-        int       ret       = 0;</div><div class='del'>-        int       j         = 0;</div><div class='del'>-</div><div class='del'>-        fd = glfs_creat (fs, "filename", O_RDWR, 0644);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                fprintf (stderr, "%s: (%p) %s\n", "filename", fd,</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, "filename", O_RDWR, 0644);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        fprintf(stderr, "%s: (%p) %s\n", "filename", fd, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = (char *)malloc(WRITE_SIZE);</div><div class='add'>+    memset(buf, '-', WRITE_SIZE);</div><div class='ctx'> </div><div class='del'>-        buf = (char *) malloc (WRITE_SIZE);</div><div class='del'>-        memset (buf, '-', WRITE_SIZE);</div><div class='del'>-</div><div class='del'>-        for (j = 0; j &lt; 4; j++) {</div><div class='del'>-                ret = glfs_write (fd, buf, WRITE_SIZE, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "Write(%s): %d (%s)\n", "filename", ret,</div><div class='del'>-                                strerror (errno));</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                glfs_lseek (fd, 0, SEEK_SET);</div><div class='add'>+    for (j = 0; j &lt; 4; j++) {</div><div class='add'>+        ret = glfs_write(fd, buf, WRITE_SIZE, 0);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            fprintf(stderr, "Write(%s): %d (%s)\n", "filename", ret,</div><div class='add'>+                    strerror(errno));</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        glfs_lseek(fd, 0, SEEK_SET);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-volfile_change (const char *volname) {</div><div class='del'>-        int   ret = 0;</div><div class='del'>-        char *cmd = NULL, *cmd1 = NULL;</div><div class='del'>-</div><div class='del'>-        ret = asprintf (&amp;cmd, "gluster volume set %s quick-read on",</div><div class='del'>-                        volname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot construct cli command string (%s)",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+volfile_change(const char *volname)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *cmd = NULL, *cmd1 = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = asprintf (&amp;cmd1, "gluster volume set %s quick-read off",</div><div class='del'>-                        volname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot construct cli command string (%s)",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = asprintf(&amp;cmd, "gluster volume set %s quick-read on", volname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot construct cli command string (%s)",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = system (cmd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "quick-read off on (%s) failed", volname);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = asprintf(&amp;cmd1, "gluster volume set %s quick-read off", volname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot construct cli command string (%s)",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = system (cmd1);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "quick-read on on (%s) failed", volname);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = system(cmd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "quick-read off on (%s) failed", volname);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = system (cmd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "quick-read off on (%s) failed", volname);</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = system(cmd1);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "quick-read on on (%s) failed", volname);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        free (cmd);</div><div class='del'>-        free (cmd1);</div><div class='add'>+    ret = system(cmd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "quick-read off on (%s) failed", volname);</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(cmd);</div><div class='add'>+    free(cmd1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int        ret      = 0;</div><div class='del'>-        glfs_t    *fs       = NULL;</div><div class='del'>-	char       buf[100];</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                                "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file location&gt;\n"</div><div class='del'>-                                , argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = setup_new_client (argv[1], argv[2], argv[3]);</div><div class='del'>-	if (!fs)</div><div class='del'>-		goto error;</div><div class='del'>-</div><div class='del'>-        ret = volfile_change (argv[2]);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto error;</div><div class='del'>-</div><div class='del'>-        /* This is required as volfile change takes a while to reach this</div><div class='del'>-         * gfapi client and precess the graph change. Without this the issue</div><div class='del'>-         * cannot be reproduced as in cannot be tested.</div><div class='del'>-         */</div><div class='del'>-        sleep (10);</div><div class='del'>-</div><div class='del'>-	ret = write_something (fs);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto error;</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                         ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-error:</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    char buf[100];</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file location&gt;\n",</div><div class='add'>+            argv[0]);</div><div class='ctx'>         return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = setup_new_client(argv[1], argv[2], argv[3]);</div><div class='add'>+    if (!fs)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    ret = volfile_change(argv[2]);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    /* This is required as volfile change takes a while to reach this</div><div class='add'>+     * gfapi client and precess the graph change. Without this the issue</div><div class='add'>+     * cannot be reproduced as in cannot be tested.</div><div class='add'>+     */</div><div class='add'>+    sleep(10);</div><div class='add'>+</div><div class='add'>+    ret = write_something(fs);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/glusterd/bug-824753-file-locker.c b/tests/bugs/glusterd/bug-824753-file-locker.c<br/>index 915161b626b..f5dababad30 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/glusterd/bug-824753-file-locker.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/glusterd/bug-824753-file-locker.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/glusterd/bug-824753-file-locker.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/glusterd/bug-824753-file-locker.c</a></div><div class='hunk'>@@ -5,13 +5,13 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int main (int argc, char *argv[])</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-    int              fd            = -1;</div><div class='del'>-    int              ret           = -1;</div><div class='del'>-    char             command[2048] = "";</div><div class='del'>-    char             filepath[255]     = "";</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char command[2048] = "";</div><div class='add'>+    char filepath[255] = "";</div><div class='ctx'>     struct flock fl;</div><div class='ctx'> </div><div class='ctx'>     fl.l_type = F_WRLCK;</div><div class='hunk'>@@ -36,7 +36,7 @@ int main (int argc, char *argv[])</div><div class='ctx'>              " grep %s | awk -F'..: ' '{print $1}' | grep %s:%s/%s",</div><div class='ctx'>              argv[1], argv[5], argv[2], argv[2], argv[3], argv[1]);</div><div class='ctx'> </div><div class='del'>-    ret = system (command);</div><div class='add'>+    ret = system(command);</div><div class='ctx'>     close(fd);</div><div class='ctx'> </div><div class='ctx'>     if (ret)</div><div class='head'>diff --git a/tests/bugs/glusterfs-server/bug-905864.c b/tests/bugs/glusterfs-server/bug-905864.c<br/>index 3cc4cc5d232..f70003736e7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/glusterfs-server/bug-905864.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/glusterfs-server/bug-905864.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/glusterfs-server/bug-905864.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/glusterfs-server/bug-905864.c</a></div><div class='hunk'>@@ -4,10 +4,9 @@</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> #include &lt;pthread.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-pthread_t   th[5] = {0};</div><div class='add'>+pthread_t th[5] = {0};</div><div class='ctx'> void</div><div class='del'>-flock_init (struct flock *f, short int type, off_t start, off_t len)</div><div class='add'>+flock_init(struct flock *f, short int type, off_t start, off_t len)</div><div class='ctx'> {</div><div class='ctx'>     f-&gt;l_type = type;</div><div class='ctx'>     f-&gt;l_start = start;</div><div class='hunk'>@@ -15,68 +14,70 @@ flock_init (struct flock *f, short int type, off_t start, off_t len)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-flock_range_in_steps (int fd, int is_set, short l_type,</div><div class='del'>-                      int start, int end, int step)</div><div class='add'>+flock_range_in_steps(int fd, int is_set, short l_type, int start, int end,</div><div class='add'>+                     int step)</div><div class='ctx'> {</div><div class='del'>-        int         ret = 0;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        struct      flock f = {0,};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct flock f = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        for (i = start; i+step &lt; end; i += step) {</div><div class='del'>-                flock_init (&amp;f, l_type, i, step);</div><div class='del'>-                ret = fcntl (fd, (is_set) ? F_SETLKW : F_GETLK, &amp;f);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        perror ("fcntl");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = start; i + step &lt; end; i += step) {</div><div class='add'>+        flock_init(&amp;f, l_type, i, step);</div><div class='add'>+        ret = fcntl(fd, (is_set) ? F_SETLKW : F_GETLK, &amp;f);</div><div class='add'>+        if (ret) {</div><div class='add'>+            perror("fcntl");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-random_locker (void *arg)</div><div class='add'>+random_locker(void *arg)</div><div class='ctx'> {</div><div class='del'>-        int         fd = *(int *)arg;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        int         is_set = 0;</div><div class='add'>+    int fd = *(int *)arg;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int is_set = 0;</div><div class='ctx'> </div><div class='del'>-        /* use thread id to choose GETLK or SETLK operation*/</div><div class='del'>-        is_set = pthread_self () % 2;</div><div class='del'>-        (void)flock_range_in_steps (fd, is_set, F_WRLCK, 0, 400, 1);</div><div class='add'>+    /* use thread id to choose GETLK or SETLK operation*/</div><div class='add'>+    is_set = pthread_self() % 2;</div><div class='add'>+    (void)flock_range_in_steps(fd, is_set, F_WRLCK, 0, 400, 1);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int main (int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int         fd = -1;</div><div class='del'>-        int         ret = 1;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        char        *fname = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int ret = 1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *fname = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc &lt; 2)</div><div class='del'>-                goto out;</div><div class='add'>+    if (argc &lt; 2)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fname = argv[1];</div><div class='del'>-        fd = open (fname, O_RDWR);</div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                perror ("open");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fname = argv[1];</div><div class='add'>+    fd = open(fname, O_RDWR);</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        perror("open");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = flock_range_in_steps (fd, 1, F_WRLCK, 0, 2000, 2);</div><div class='del'>-        for (i = 0; i &lt; 5; i++) {</div><div class='del'>-                pthread_create (&amp;th[i], NULL, random_locker, (void *) &amp;fd);</div><div class='del'>-        }</div><div class='del'>-        ret = flock_range_in_steps (fd, 1, F_WRLCK, 0, 2000, 2);</div><div class='del'>-        for (i = 0; i &lt; 5; i++) {</div><div class='del'>-                pthread_join (th[i], NULL);</div><div class='del'>-        }</div><div class='add'>+    ret = flock_range_in_steps(fd, 1, F_WRLCK, 0, 2000, 2);</div><div class='add'>+    for (i = 0; i &lt; 5; i++) {</div><div class='add'>+        pthread_create(&amp;th[i], NULL, random_locker, (void *)&amp;fd);</div><div class='add'>+    }</div><div class='add'>+    ret = flock_range_in_steps(fd, 1, F_WRLCK, 0, 2000, 2);</div><div class='add'>+    for (i = 0; i &lt; 5; i++) {</div><div class='add'>+        pthread_join(th[i], NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (fd != -1)</div><div class='del'>-                close (fd);</div><div class='add'>+    if (fd != -1)</div><div class='add'>+        close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/glusterfs/getlk_owner.c b/tests/bugs/glusterfs/getlk_owner.c<br/>index 85fd1042496..cbe277318c1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/glusterfs/getlk_owner.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/glusterfs/getlk_owner.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/glusterfs/getlk_owner.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/glusterfs/getlk_owner.c</a></div><div class='hunk'>@@ -3,24 +3,24 @@</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='del'>-#define GETLK_OWNER_CHECK(f, cp, label)                     \</div><div class='del'>-    do {                                                    \</div><div class='del'>-        switch (f.l_type) {                                 \</div><div class='del'>-        case F_RDLCK:                                       \</div><div class='del'>-        case F_WRLCK:                                       \</div><div class='del'>-            ret = 1;                                        \</div><div class='del'>-            goto label;                                     \</div><div class='del'>-        case F_UNLCK:                                       \</div><div class='del'>-            if (!are_flocks_sane (&amp;f, &amp;cp)) {               \</div><div class='del'>-                ret = 1;                                    \</div><div class='del'>-                goto label;                                 \</div><div class='del'>-            }                                               \</div><div class='del'>-            break;                                          \</div><div class='del'>-        }                                                   \</div><div class='add'>+#define GETLK_OWNER_CHECK(f, cp, label)                                        \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        switch (f.l_type) {                                                    \</div><div class='add'>+            case F_RDLCK:                                                      \</div><div class='add'>+            case F_WRLCK:                                                      \</div><div class='add'>+                ret = 1;                                                       \</div><div class='add'>+                goto label;                                                    \</div><div class='add'>+            case F_UNLCK:                                                      \</div><div class='add'>+                if (!are_flocks_sane(&amp;f, &amp;cp)) {                               \</div><div class='add'>+                    ret = 1;                                                   \</div><div class='add'>+                    goto label;                                                \</div><div class='add'>+                }                                                              \</div><div class='add'>+                break;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='ctx'>     } while (0)</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-flock_init (struct flock *f, short int type, off_t start, off_t len)</div><div class='add'>+flock_init(struct flock *f, short int type, off_t start, off_t len)</div><div class='ctx'> {</div><div class='ctx'>     f-&gt;l_type = type;</div><div class='ctx'>     f-&gt;l_start = start;</div><div class='hunk'>@@ -28,17 +28,16 @@ flock_init (struct flock *f, short int type, off_t start, off_t len)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-flock_cp (struct flock *dst, struct flock *src)</div><div class='add'>+flock_cp(struct flock *dst, struct flock *src)</div><div class='ctx'> {</div><div class='del'>-    memcpy ((void *) dst, (void *) src, sizeof (struct flock));</div><div class='add'>+    memcpy((void *)dst, (void *)src, sizeof(struct flock));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-are_flocks_sane (struct flock *src, struct flock *cpy)</div><div class='add'>+are_flocks_sane(struct flock *src, struct flock *cpy)</div><div class='ctx'> {</div><div class='ctx'>     return ((src-&gt;l_whence == cpy-&gt;l_whence) &amp;&amp;</div><div class='del'>-            (src-&gt;l_start == cpy-&gt;l_start) &amp;&amp;</div><div class='del'>-            (src-&gt;l_len == cpy-&gt;l_len));</div><div class='add'>+            (src-&gt;l_start == cpy-&gt;l_start) &amp;&amp; (src-&gt;l_len == cpy-&gt;l_len));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -53,68 +52,73 @@ are_flocks_sane (struct flock *src, struct flock *cpy)</div><div class='ctx'>  *</div><div class='ctx'>  * */</div><div class='ctx'> </div><div class='del'>-int main (int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='ctx'>     int fd = -1;</div><div class='ctx'>     int ret = 1;</div><div class='ctx'>     char *fname = NULL;</div><div class='del'>-    struct flock f = {0,};</div><div class='del'>-    struct flock cp = {0,};</div><div class='add'>+    struct flock f = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct flock cp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='ctx'>     if (argc &lt; 2)</div><div class='ctx'>         goto out;</div><div class='ctx'> </div><div class='ctx'>     fname = argv[1];</div><div class='del'>-    fd = open (fname, O_RDWR);</div><div class='add'>+    fd = open(fname, O_RDWR);</div><div class='ctx'>     if (fd == -1) {</div><div class='del'>-        perror ("open");</div><div class='add'>+        perror("open");</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    flock_init (&amp;f, F_WRLCK, 0, 3);</div><div class='del'>-    flock_cp (&amp;cp, &amp;f);</div><div class='del'>-    ret = fcntl (fd, F_SETLK, &amp;f);</div><div class='add'>+    flock_init(&amp;f, F_WRLCK, 0, 3);</div><div class='add'>+    flock_cp(&amp;cp, &amp;f);</div><div class='add'>+    ret = fcntl(fd, F_SETLK, &amp;f);</div><div class='ctx'>     if (ret) {</div><div class='del'>-        perror ("fcntl");</div><div class='add'>+        perror("fcntl");</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='del'>-    if (!are_flocks_sane (&amp;f, &amp;cp)) {</div><div class='add'>+    if (!are_flocks_sane(&amp;f, &amp;cp)) {</div><div class='ctx'>         ret = 1;</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    flock_init (&amp;f, F_WRLCK, 3, 3);</div><div class='del'>-    flock_cp (&amp;cp, &amp;f);</div><div class='del'>-    ret = fcntl (fd, F_SETLK, &amp;f);</div><div class='add'>+    flock_init(&amp;f, F_WRLCK, 3, 3);</div><div class='add'>+    flock_cp(&amp;cp, &amp;f);</div><div class='add'>+    ret = fcntl(fd, F_SETLK, &amp;f);</div><div class='ctx'>     if (ret) {</div><div class='del'>-        perror ("fcntl");</div><div class='add'>+        perror("fcntl");</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='del'>-    if (!are_flocks_sane (&amp;f, &amp;cp)) {</div><div class='add'>+    if (!are_flocks_sane(&amp;f, &amp;cp)) {</div><div class='ctx'>         ret = 1;</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    flock_init (&amp;f, F_WRLCK, 3, 3);</div><div class='del'>-    flock_cp (&amp;cp, &amp;f);</div><div class='del'>-    ret = fcntl (fd, F_GETLK, &amp;f);</div><div class='add'>+    flock_init(&amp;f, F_WRLCK, 3, 3);</div><div class='add'>+    flock_cp(&amp;cp, &amp;f);</div><div class='add'>+    ret = fcntl(fd, F_GETLK, &amp;f);</div><div class='ctx'>     if (ret) {</div><div class='del'>-        perror ("fcntl");</div><div class='add'>+        perror("fcntl");</div><div class='ctx'>         return 1;</div><div class='ctx'>     }</div><div class='del'>-    GETLK_OWNER_CHECK (f, cp, out);</div><div class='add'>+    GETLK_OWNER_CHECK(f, cp, out);</div><div class='ctx'> </div><div class='del'>-    flock_init (&amp;f, F_RDLCK, 3, 3);</div><div class='del'>-    flock_cp (&amp;cp, &amp;f);</div><div class='del'>-    ret = fcntl (fd, F_GETLK, &amp;f);</div><div class='add'>+    flock_init(&amp;f, F_RDLCK, 3, 3);</div><div class='add'>+    flock_cp(&amp;cp, &amp;f);</div><div class='add'>+    ret = fcntl(fd, F_GETLK, &amp;f);</div><div class='ctx'>     if (ret) {</div><div class='del'>-        perror ("fcntl");</div><div class='add'>+        perror("fcntl");</div><div class='ctx'>         return 1;</div><div class='ctx'>     }</div><div class='del'>-    GETLK_OWNER_CHECK (f, cp, out);</div><div class='add'>+    GETLK_OWNER_CHECK(f, cp, out);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fd != -1)</div><div class='del'>-        close (fd);</div><div class='add'>+        close(fd);</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/io-cache/bug-858242.c b/tests/bugs/io-cache/bug-858242.c<br/>index b6a412d578c..ac87a15533e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/io-cache/bug-858242.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/io-cache/bug-858242.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/io-cache/bug-858242.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/io-cache/bug-858242.c</a></div><div class='hunk'>@@ -10,72 +10,75 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char        *filename = NULL, *volname = NULL, *cmd = NULL;</div><div class='del'>-        char  buffer[1024]    = {0, };</div><div class='del'>-        int          fd       = -1;</div><div class='del'>-        int          ret      = -1;</div><div class='del'>-        struct stat  statbuf  = {0, };</div><div class='add'>+    char *filename = NULL, *volname = NULL, *cmd = NULL;</div><div class='add'>+    char buffer[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat statbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                fprintf (stderr, "usage: %s &lt;file-name&gt; &lt;volname&gt;\n", argv[0]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        fprintf(stderr, "usage: %s &lt;file-name&gt; &lt;volname&gt;\n", argv[0]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        filename = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='add'>+    filename = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='ctx'> </div><div class='del'>-        fd = open (filename, O_RDWR | O_CREAT, 0);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open (%s) failed (%s)\n", filename,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, 0);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open (%s) failed (%s)\n", filename, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = write (fd, "test-content", 12);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "write failed (%s)", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = write(fd, "test-content", 12);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "write failed (%s)", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fsync (fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fsync failed (%s)", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fsync(fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fsync failed (%s)", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fstat (fd, &amp;statbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat failed (%s)", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fstat(fd, &amp;statbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat failed (%s)", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = asprintf (&amp;cmd, "gluster --mode=script volume stop %s force",</div><div class='del'>-                        volname);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "cannot construct cli command string (%s)",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = asprintf(&amp;cmd, "gluster --mode=script volume stop %s force", volname);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "cannot construct cli command string (%s)",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = system (cmd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stopping volume (%s) failed", volname);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = system(cmd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stopping volume (%s) failed", volname);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sleep (3);</div><div class='add'>+    sleep(3);</div><div class='ctx'> </div><div class='del'>-        ret = read (fd, buffer, 1024);</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                fprintf (stderr, "read should've returned error, "</div><div class='del'>-                         "but is successful\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = read(fd, buffer, 1024);</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "read should've returned error, "</div><div class='add'>+                "but is successful\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/io-cache/bug-read-hang.c b/tests/bugs/io-cache/bug-read-hang.c<br/>index 7709a41719d..e1fae97e7e8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/io-cache/bug-read-hang.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/io-cache/bug-read-hang.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/io-cache/bug-read-hang.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/io-cache/bug-read-hang.c</a></div><div class='hunk'>@@ -9,117 +9,117 @@</div><div class='ctx'> </div><div class='ctx'> int count = 0;</div><div class='ctx'> void</div><div class='del'>-read_cbk (glfs_fd_t *fd, ssize_t ret, void *data) {</div><div class='del'>-count++;</div><div class='add'>+read_cbk(glfs_fd_t *fd, ssize_t ret, void *data)</div><div class='add'>+{</div><div class='add'>+    count++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> glfs_t *</div><div class='ctx'> setup_new_client(char *hostname, char *volname, char *log_file, int flag)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        glfs_t *fs = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "\nglfs_new: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, log_file, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_set_logging failed with ret: %d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (flag == NO_INIT)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "\nglfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                                  ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "\nglfs_new: returned NULL (%s)\n", strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, log_file, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_set_logging failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (flag == NO_INIT)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> error:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int        ret         = 0;</div><div class='del'>-        glfs_t    *fs          = NULL;</div><div class='del'>-        struct glfs_fd *fd     = NULL;</div><div class='del'>-        char      *volname     = NULL;</div><div class='del'>-        char      *log_file    = NULL;</div><div class='del'>-        char      *hostname    = NULL;</div><div class='del'>-        char      *buf = NULL;</div><div class='del'>-        struct stat stat;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                                "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file location&gt;\n"</div><div class='del'>-                                , argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        log_file = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = setup_new_client (hostname, volname, log_file, 0);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_opendir (fs, "/");</div><div class='del'>-        if (!fd) {</div><div class='del'>-                fprintf (stderr, "/: %s\n", strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        glfs_readdirplus (fd, &amp;stat);</div><div class='del'>-</div><div class='del'>-        fd = glfs_open (fs, "/test", O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = (char *) malloc (5);</div><div class='del'>-</div><div class='del'>-        ret = glfs_pread (fd, buf, 5, 0, 0, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "Read(%s): %d (%s)\n", "test", ret,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        free (buf);</div><div class='del'>-        glfs_close (fd);</div><div class='del'>-</div><div class='del'>-        ret = glfs_fini (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                         ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-error:</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    struct glfs_fd *fd = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *log_file = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    struct stat stat;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file location&gt;\n",</div><div class='add'>+            argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    log_file = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = setup_new_client(hostname, volname, log_file, 0);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_opendir(fs, "/");</div><div class='add'>+    if (!fd) {</div><div class='add'>+        fprintf(stderr, "/: %s\n", strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    glfs_readdirplus(fd, &amp;stat);</div><div class='add'>+</div><div class='add'>+    fd = glfs_open(fs, "/test", O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = (char *)malloc(5);</div><div class='add'>+</div><div class='add'>+    ret = glfs_pread(fd, buf, 5, 0, 0, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "Read(%s): %d (%s)\n", "test", ret, strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    free(buf);</div><div class='add'>+    glfs_close(fd);</div><div class='add'>+</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='ctx'>         return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/nfs/bug-1210338.c b/tests/bugs/nfs/bug-1210338.c<br/>index 7a17b9d68ce..d4099244176 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/nfs/bug-1210338.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/nfs/bug-1210338.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/nfs/bug-1210338.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/nfs/bug-1210338.c</a></div><div class='hunk'>@@ -7,26 +7,25 @@</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> #include &lt;sys/stat.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int   ret  = -1;</div><div class='del'>-        int   fd   = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd = -1;</div><div class='ctx'> </div><div class='del'>-        fd = open (argv[1], O_CREAT|O_EXCL, 0644);</div><div class='add'>+    fd = open(argv[1], O_CREAT | O_EXCL, 0644);</div><div class='ctx'> </div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                fprintf (stderr, "creation of the file %s failed (%s)\n", argv[1],</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        fprintf(stderr, "creation of the file %s failed (%s)\n", argv[1],</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd &gt; 0)</div><div class='del'>-                close (fd);</div><div class='add'>+    if (fd &gt; 0)</div><div class='add'>+        close(fd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/posix/bug-1175711.c b/tests/bugs/posix/bug-1175711.c<br/>index fbbea3f636b..8ab193c4014 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/posix/bug-1175711.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/posix/bug-1175711.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/posix/bug-1175711.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/posix/bug-1175711.c</a></div><div class='hunk'>@@ -6,32 +6,32 @@</div><div class='ctx'> int</div><div class='ctx'> main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        DIR *dir = NULL;</div><div class='del'>-        struct dirent *entry = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *path = NULL;</div><div class='add'>+    DIR *dir = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *path = NULL;</div><div class='ctx'> </div><div class='del'>-        assert (argc == 2);</div><div class='del'>-        path = argv[1];</div><div class='add'>+    assert(argc == 2);</div><div class='add'>+    path = argv[1];</div><div class='ctx'> </div><div class='del'>-        dir = opendir(path);</div><div class='del'>-        if (!dir) {</div><div class='del'>-                printf("opendir(%s) failed.\n", path);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    dir = opendir(path);</div><div class='add'>+    if (!dir) {</div><div class='add'>+        printf("opendir(%s) failed.\n", path);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #ifdef _DIRENT_HAVE_D_TYPE</div><div class='del'>-        while ((entry = readdir(dir)) != NULL) {</div><div class='del'>-                if (entry-&gt;d_type == DT_UNKNOWN) {</div><div class='del'>-                        printf("d_type found to be DT_UNKNOWN\n");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    while ((entry = readdir(dir)) != NULL) {</div><div class='add'>+        if (entry-&gt;d_type == DT_UNKNOWN) {</div><div class='add'>+            printf("d_type found to be DT_UNKNOWN\n");</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (dir)</div><div class='del'>-                closedir(dir);</div><div class='add'>+    if (dir)</div><div class='add'>+        closedir(dir);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c b/tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c<br/>index 325edbbed97..4ed3181d48f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/posix/disallow-gfid-volumeid-fremovexattr.c</a></div><div class='hunk'>@@ -5,94 +5,100 @@</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs       = NULL;</div><div class='del'>-        int       ret       = 0;</div><div class='del'>-        int       i         = 0;</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-        char      *logfile  = NULL;</div><div class='del'>-        char      *hostname = NULL;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                        "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file&gt;\n"</div><div class='del'>-                        , argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Expect following args %s &lt;hostname&gt; &lt;Vol&gt; &lt;log file&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        logfile = argv[3];</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    logfile = argv[3];</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL (%s)\n",</div><div class='del'>-                        strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL (%s)\n", strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server failed ret:%d (%s)\n",</div><div class='del'>-                ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server failed ret:%d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging failed with ret: %d (%s)\n",</div><div class='del'>-                        ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                        ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = glfs_opendir (fs, "/");</div><div class='del'>-        if (!fd) {</div><div class='del'>-                fprintf (stderr, "glfs_opendir failed with (%s)\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    fd = glfs_opendir(fs, "/");</div><div class='add'>+    if (!fd) {</div><div class='add'>+        fprintf(stderr, "glfs_opendir failed with (%s)\n", strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fremovexattr (fd, "trusted.gfid");</div><div class='del'>-        if (ret == 0 || errno != EPERM) {</div><div class='del'>-                fprintf (stderr, "glfs_fremovexattr gfid exited with ret: "</div><div class='del'>-                         "%d (%s)\n", ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_fremovexattr(fd, "trusted.gfid");</div><div class='add'>+    if (ret == 0 || errno != EPERM) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_fremovexattr gfid exited with ret: "</div><div class='add'>+                "%d (%s)\n",</div><div class='add'>+                ret, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fremovexattr (fd, "trusted.glusterfs.volume-id");</div><div class='del'>-        if (ret == 0 || errno != EPERM) {</div><div class='del'>-                fprintf (stderr, "glfs_fremovexattr volume-id exited with ret: "</div><div class='del'>-                         "%d (%s)\n", ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_fremovexattr(fd, "trusted.glusterfs.volume-id");</div><div class='add'>+    if (ret == 0 || errno != EPERM) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_fremovexattr volume-id exited with ret: "</div><div class='add'>+                "%d (%s)\n",</div><div class='add'>+                ret, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fsetxattr (fd, "trusted.abc", "abc", 3, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fsetxattr trusted.abc exited with ret: "</div><div class='del'>-                         "%d (%s)\n", ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_fsetxattr(fd, "trusted.abc", "abc", 3, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_fsetxattr trusted.abc exited with ret: "</div><div class='add'>+                "%d (%s)\n",</div><div class='add'>+                ret, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fremovexattr (fd, "trusted.abc");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fremovexattr trusted.abc exited with "</div><div class='del'>-                         "ret: %d (%s)\n", ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_fremovexattr(fd, "trusted.abc");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "glfs_fremovexattr trusted.abc exited with "</div><div class='add'>+                "ret: %d (%s)\n",</div><div class='add'>+                ret, strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) glfs_closedir(fd);</div><div class='del'>-        ret = glfs_fini (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fini failed with ret: %d (%s)\n",</div><div class='del'>-                        ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    (void)glfs_closedir(fd);</div><div class='add'>+    ret = glfs_fini(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/protocol/bug-808400-fcntl.c b/tests/bugs/protocol/bug-808400-fcntl.c<br/>index 87a83f317b8..a703ca5c120 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/protocol/bug-808400-fcntl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/protocol/bug-808400-fcntl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/protocol/bug-808400-fcntl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/protocol/bug-808400-fcntl.c</a></div><div class='hunk'>@@ -12,106 +12,113 @@</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-run_child (char *filename)</div><div class='add'>+run_child(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int          fd   = -1, ret = -1;</div><div class='del'>-        struct flock lock = {0, };</div><div class='del'>-        int          ppid = 0;</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open failed (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ppid = getppid ();</div><div class='del'>-</div><div class='del'>-        lock.l_type = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0;</div><div class='del'>-        lock.l_len = 0;</div><div class='del'>-</div><div class='del'>-        ret = fcntl (fd, F_GETLK, &amp;lock);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "GETLK failed (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((lock.l_type == F_UNLCK) ||</div><div class='del'>-            (ppid != lock.l_pid)) {</div><div class='del'>-                fprintf (stderr, "no locks present, though parent has held "</div><div class='del'>-                         "one\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int fd = -1, ret = -1;</div><div class='add'>+    struct flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ppid = 0;</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open failed (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ppid = getppid();</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+</div><div class='add'>+    ret = fcntl(fd, F_GETLK, &amp;lock);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "GETLK failed (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((lock.l_type == F_UNLCK) || (ppid != lock.l_pid)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "no locks present, though parent has held "</div><div class='add'>+                "one\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int          fd       = -1, ret = -1, status = 0;</div><div class='del'>-        char        *filename = NULL, *cmd = NULL;</div><div class='del'>-        struct stat  stbuf    = {0, };</div><div class='del'>-        struct flock lock     = {0, };</div><div class='del'>-</div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                fprintf (stderr, "Usage: %s &lt;filename&gt; "</div><div class='del'>-                         "&lt;gluster-cmd-to-trigger-graph-switch&gt;\n", argv[0]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        filename = argv[1];</div><div class='del'>-        cmd = argv[2];</div><div class='del'>-</div><div class='del'>-        fd = open (filename, O_RDWR | O_CREAT, 0);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open (%s) failed (%s)\n", filename,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock.l_type = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0;</div><div class='del'>-        lock.l_len = 0;</div><div class='del'>-</div><div class='del'>-        ret = fcntl (fd, F_SETLK, &amp;lock);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fcntl failed (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        system (cmd);</div><div class='del'>-</div><div class='del'>-        /* wait till graph switch completes */</div><div class='del'>-        ret = fstat64 (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat64 failure (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sleep (10);</div><div class='del'>-</div><div class='del'>-        /* By now old-graph would be disconnected and locks should be cleaned</div><div class='del'>-         * up if they are not migrated. Check that by trying to acquire a lock</div><div class='del'>-         * on a new fd opened by another process on same file.</div><div class='del'>-         */</div><div class='del'>-        ret = fork ();</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = run_child (filename);</div><div class='add'>+    int fd = -1, ret = -1, status = 0;</div><div class='add'>+    char *filename = NULL, *cmd = NULL;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Usage: %s &lt;filename&gt; "</div><div class='add'>+                "&lt;gluster-cmd-to-trigger-graph-switch&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    filename = argv[1];</div><div class='add'>+    cmd = argv[2];</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, 0);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open (%s) failed (%s)\n", filename, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+</div><div class='add'>+    ret = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fcntl failed (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    system(cmd);</div><div class='add'>+</div><div class='add'>+    /* wait till graph switch completes */</div><div class='add'>+    ret = fstat64(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat64 failure (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sleep(10);</div><div class='add'>+</div><div class='add'>+    /* By now old-graph would be disconnected and locks should be cleaned</div><div class='add'>+     * up if they are not migrated. Check that by trying to acquire a lock</div><div class='add'>+     * on a new fd opened by another process on same file.</div><div class='add'>+     */</div><div class='add'>+    ret = fork();</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = run_child(filename);</div><div class='add'>+    } else {</div><div class='add'>+        wait(&amp;status);</div><div class='add'>+        if (WIFEXITED(status)) {</div><div class='add'>+            ret = WEXITSTATUS(status);</div><div class='ctx'>         } else {</div><div class='del'>-                wait (&amp;status);</div><div class='del'>-                if (WIFEXITED(status)) {</div><div class='del'>-                        ret = WEXITSTATUS(status);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/protocol/bug-808400-flock.c b/tests/bugs/protocol/bug-808400-flock.c<br/>index bd2ce8cfb01..54a507cc227 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/protocol/bug-808400-flock.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/protocol/bug-808400-flock.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/protocol/bug-808400-flock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/protocol/bug-808400-flock.c</a></div><div class='hunk'>@@ -12,85 +12,89 @@</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-run_child (char *filename)</div><div class='add'>+run_child(char *filename)</div><div class='ctx'> {</div><div class='del'>-        int fd = -1, ret = -1;</div><div class='add'>+    int fd = -1, ret = -1;</div><div class='ctx'> </div><div class='del'>-        fd = open (filename, O_RDWR);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open failed (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = open(filename, O_RDWR);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open failed (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = flock (fd, LOCK_EX | LOCK_NB);</div><div class='del'>-        if ((ret == 0) || (errno != EWOULDBLOCK)) {</div><div class='del'>-                fprintf (stderr, "no locks present, though parent has held "</div><div class='del'>-                         "one\n");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = flock(fd, LOCK_EX | LOCK_NB);</div><div class='add'>+    if ((ret == 0) || (errno != EWOULDBLOCK)) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "no locks present, though parent has held "</div><div class='add'>+                "one\n");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int          fd       = -1, ret = -1, status = 0;</div><div class='del'>-        char        *filename = NULL, *cmd = NULL;</div><div class='del'>-        struct stat  stbuf    = {0, };</div><div class='add'>+    int fd = -1, ret = -1, status = 0;</div><div class='add'>+    char *filename = NULL, *cmd = NULL;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (argc != 3) {</div><div class='del'>-                fprintf (stderr, "Usage: %s &lt;filename&gt; "</div><div class='del'>-                         "&lt;gluster-cmd-to-trigger-graph-switch&gt;\n", argv[0]);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 3) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Usage: %s &lt;filename&gt; "</div><div class='add'>+                "&lt;gluster-cmd-to-trigger-graph-switch&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        filename = argv[1];</div><div class='del'>-        cmd = argv[2];</div><div class='add'>+    filename = argv[1];</div><div class='add'>+    cmd = argv[2];</div><div class='ctx'> </div><div class='del'>-        fd = open (filename, O_RDWR | O_CREAT, 0);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open (%s) failed (%s)\n", filename,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT, 0);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open (%s) failed (%s)\n", filename, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = flock (fd, LOCK_EX);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "flock failed (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = flock(fd, LOCK_EX);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "flock failed (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        system (cmd);</div><div class='add'>+    system(cmd);</div><div class='ctx'> </div><div class='del'>-        /* wait till graph switch completes */</div><div class='del'>-        ret = fstat64 (fd, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "fstat64 failure (%s)\n", strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* wait till graph switch completes */</div><div class='add'>+    ret = fstat64(fd, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "fstat64 failure (%s)\n", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sleep (10);</div><div class='add'>+    sleep(10);</div><div class='ctx'> </div><div class='del'>-        /* By now old-graph would be disconnected and locks should be cleaned</div><div class='del'>-         * up if they are not migrated. Check that by trying to acquire a lock</div><div class='del'>-         * on a new fd opened by another process on same file</div><div class='del'>-         */</div><div class='del'>-        ret = fork ();</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = run_child (filename);</div><div class='add'>+    /* By now old-graph would be disconnected and locks should be cleaned</div><div class='add'>+     * up if they are not migrated. Check that by trying to acquire a lock</div><div class='add'>+     * on a new fd opened by another process on same file</div><div class='add'>+     */</div><div class='add'>+    ret = fork();</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = run_child(filename);</div><div class='add'>+    } else {</div><div class='add'>+        wait(&amp;status);</div><div class='add'>+        if (WIFEXITED(status)) {</div><div class='add'>+            ret = WEXITSTATUS(status);</div><div class='ctx'>         } else {</div><div class='del'>-                wait (&amp;status);</div><div class='del'>-                if (WIFEXITED(status)) {</div><div class='del'>-                        ret = WEXITSTATUS(status);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/quick-read/bz1523599/test_bz1523599.c b/tests/bugs/quick-read/bz1523599/test_bz1523599.c<br/>index 843408680a7..5076a9447f3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/quick-read/bz1523599/test_bz1523599.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/quick-read/bz1523599/test_bz1523599.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/quick-read/bz1523599/test_bz1523599.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/quick-read/bz1523599/test_bz1523599.c</a></div><div class='hunk'>@@ -1,7 +1,8 @@</div><div class='ctx'> /*</div><div class='ctx'>  * ./test_bz1523599 0 vm140-111 gv0 test211 log</div><div class='ctx'>  * ./test_bz1523599 1 vm140-111 gv0 test211 log</div><div class='del'>- * Open - Discard - Read - Then check read information to see if the initial TEST_STR_LEN/2 bytes read zero</div><div class='add'>+ * Open - Discard - Read - Then check read information to see if the initial</div><div class='add'>+ * TEST_STR_LEN/2 bytes read zero</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #define _GNU_SOURCE</div><div class='hunk'>@@ -15,182 +16,183 @@</div><div class='ctx'> #define TEST_STR_LEN 2048</div><div class='ctx'> </div><div class='ctx'> enum fallocate_flag {</div><div class='del'>-	TEST_WRITE,</div><div class='del'>-	TEST_DISCARD,</div><div class='del'>-	TEST_ZEROFILL,</div><div class='add'>+    TEST_WRITE,</div><div class='add'>+    TEST_DISCARD,</div><div class='add'>+    TEST_ZEROFILL,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-void print_str(char *str, int len)</div><div class='add'>+void</div><div class='add'>+print_str(char *str, int len)</div><div class='ctx'> {</div><div class='del'>-	int i, addr;</div><div class='del'>-</div><div class='del'>-	printf("%07x\t", 0);</div><div class='del'>-	for (i = 0; i &lt; len; i++) {</div><div class='del'>-		printf("%02x", str[i]);</div><div class='del'>-		if (i) {</div><div class='del'>-			if ((i + 1) % 16 == 0)</div><div class='del'>-				printf("\n%07x\t", i+1);</div><div class='del'>-			else if ((i + 1) % 4 == 0)</div><div class='del'>-				printf(" ");</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	printf("\n");</div><div class='add'>+    int i, addr;</div><div class='add'>+</div><div class='add'>+    printf("%07x\t", 0);</div><div class='add'>+    for (i = 0; i &lt; len; i++) {</div><div class='add'>+        printf("%02x", str[i]);</div><div class='add'>+        if (i) {</div><div class='add'>+            if ((i + 1) % 16 == 0)</div><div class='add'>+                printf("\n%07x\t", i + 1);</div><div class='add'>+            else if ((i + 1) % 4 == 0)</div><div class='add'>+                printf(" ");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    printf("\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> test_read(char *str, int total_length, int len_zero)</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	int ret = 0;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; len_zero; i++) {</div><div class='del'>-		if (str[i]) {</div><div class='del'>-			fprintf(stderr, "char at position %d not zeroed out\n",</div><div class='del'>-				i);</div><div class='del'>-			ret = -EIO;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	for (i = len_zero; i &lt; total_length; i++) {</div><div class='del'>-		if (str[i] != 0x11) {</div><div class='del'>-			fprintf(stderr,</div><div class='del'>-				"char at position %d does not contain pattern\n",</div><div class='del'>-				i);</div><div class='del'>-			ret = -EIO;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    int i;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; len_zero; i++) {</div><div class='add'>+        if (str[i]) {</div><div class='add'>+            fprintf(stderr, "char at position %d not zeroed out\n", i);</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = len_zero; i &lt; total_length; i++) {</div><div class='add'>+        if (str[i] != 0x11) {</div><div class='add'>+            fprintf(stderr, "char at position %d does not contain pattern\n",</div><div class='add'>+                    i);</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int main(int argc, char *argv[])</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-	int opcode;</div><div class='del'>-	char *host_name, *volume_name, *file_path, *glfs_log_path;</div><div class='del'>-	glfs_t *fs = NULL;</div><div class='del'>-	glfs_fd_t *fd = NULL;</div><div class='del'>-	off_t offset = 0;</div><div class='del'>-	size_t len_zero = TEST_STR_LEN / 2;</div><div class='del'>-	char writestr[TEST_STR_LEN];</div><div class='del'>-	char readstr[TEST_STR_LEN];</div><div class='del'>-	struct iovec iov = {&amp;readstr, TEST_STR_LEN};</div><div class='del'>-	int i;</div><div class='del'>-	int ret = 1;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; TEST_STR_LEN; i++)</div><div class='del'>-		writestr[i] = 0x11;</div><div class='del'>-	for (i = 0; i &lt; TEST_STR_LEN; i++)</div><div class='del'>-		readstr[i] = 0x22;</div><div class='del'>-</div><div class='del'>-	if (argc != 6) {</div><div class='del'>-		fprintf(stderr,</div><div class='del'>-			"Syntax: %s &lt;test type&gt; &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;log-file&gt;\n",</div><div class='del'>-			argv[0]);</div><div class='del'>-		return 1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	opcode = atoi(argv[1]);</div><div class='del'>-	host_name = argv[2];</div><div class='del'>-	volume_name = argv[3];</div><div class='del'>-	file_path = argv[4];</div><div class='del'>-	glfs_log_path = argv[5];</div><div class='del'>-</div><div class='del'>-	fs = glfs_new(volume_name);</div><div class='del'>-	if (!fs) {</div><div class='del'>-		perror("glfs_new");</div><div class='del'>-		return 1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glfs_set_volfile_server(fs, "tcp", host_name, 24007);</div><div class='del'>-	if (ret != 0) {</div><div class='del'>-		perror("glfs_set_volfile_server");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glfs_set_logging(fs, glfs_log_path, 7);</div><div class='del'>-	if (ret != 0) {</div><div class='del'>-		perror("glfs_set_logging");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = glfs_init(fs);</div><div class='del'>-	if (ret != 0) {</div><div class='del'>-		perror("glfs_init");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd = glfs_creat(fs, file_path, O_RDWR, 0777);</div><div class='del'>-	if (fd == NULL) {</div><div class='del'>-		perror("glfs_creat");</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	switch (opcode) {</div><div class='del'>-		case TEST_WRITE:</div><div class='del'>-			fprintf(stderr, "Test Write\n");</div><div class='del'>-			ret = glfs_write(fd, writestr, TEST_STR_LEN, 0);</div><div class='del'>-			if (ret &lt; 0) {</div><div class='del'>-				perror("glfs_write");</div><div class='del'>-				goto out;</div><div class='del'>-			} else if (ret != TEST_STR_LEN) {</div><div class='del'>-				fprintf(stderr, "insufficient data written %d \n", ret);</div><div class='del'>-				ret = -EIO;</div><div class='del'>-				goto out;</div><div class='del'>-			}</div><div class='del'>-			ret = 0;</div><div class='del'>-			goto out;</div><div class='del'>-		case TEST_DISCARD:</div><div class='del'>-			fprintf(stderr, "Test Discard\n");</div><div class='del'>-			ret = glfs_discard(fd, offset, len_zero);</div><div class='del'>-			if (ret &lt; 0) {</div><div class='del'>-				if (errno == EOPNOTSUPP) {</div><div class='del'>-					fprintf(stderr, "Operation not supported\n");</div><div class='del'>-					ret = 0;</div><div class='del'>-					goto out;</div><div class='del'>-				}</div><div class='del'>-				perror("glfs_discard");</div><div class='del'>-				goto out;</div><div class='del'>-			}</div><div class='del'>-			goto test_read;</div><div class='del'>-		case TEST_ZEROFILL:</div><div class='del'>-			fprintf(stderr, "Test Zerofill\n");</div><div class='del'>-			ret = glfs_zerofill(fd, offset, len_zero);</div><div class='del'>-			if (ret &lt; 0) {</div><div class='del'>-				if (errno == EOPNOTSUPP) {</div><div class='del'>-					fprintf(stderr, "Operation not supported\n");</div><div class='del'>-					ret = 0;</div><div class='del'>-					goto out;</div><div class='del'>-				}</div><div class='del'>-				perror("glfs_zerofill");</div><div class='del'>-				goto out;</div><div class='del'>-			}</div><div class='del'>-			goto test_read;</div><div class='del'>-		default:</div><div class='del'>-			ret = -1;</div><div class='del'>-			fprintf(stderr, "Incorrect test code %d\n", opcode);</div><div class='del'>-			goto out;</div><div class='del'>-	}</div><div class='add'>+    int opcode;</div><div class='add'>+    char *host_name, *volume_name, *file_path, *glfs_log_path;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    size_t len_zero = TEST_STR_LEN / 2;</div><div class='add'>+    char writestr[TEST_STR_LEN];</div><div class='add'>+    char readstr[TEST_STR_LEN];</div><div class='add'>+    struct iovec iov = {&amp;readstr, TEST_STR_LEN};</div><div class='add'>+    int i;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; TEST_STR_LEN; i++)</div><div class='add'>+        writestr[i] = 0x11;</div><div class='add'>+    for (i = 0; i &lt; TEST_STR_LEN; i++)</div><div class='add'>+        readstr[i] = 0x22;</div><div class='add'>+</div><div class='add'>+    if (argc != 6) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "Syntax: %s &lt;test type&gt; &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;log-file&gt;\n",</div><div class='add'>+            argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    opcode = atoi(argv[1]);</div><div class='add'>+    host_name = argv[2];</div><div class='add'>+    volume_name = argv[3];</div><div class='add'>+    file_path = argv[4];</div><div class='add'>+    glfs_log_path = argv[5];</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volume_name);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        perror("glfs_new");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", host_name, 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        perror("glfs_set_volfile_server");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, glfs_log_path, 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        perror("glfs_set_logging");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        perror("glfs_init");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_creat(fs, file_path, O_RDWR, 0777);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        perror("glfs_creat");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (opcode) {</div><div class='add'>+        case TEST_WRITE:</div><div class='add'>+            fprintf(stderr, "Test Write\n");</div><div class='add'>+            ret = glfs_write(fd, writestr, TEST_STR_LEN, 0);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                perror("glfs_write");</div><div class='add'>+                goto out;</div><div class='add'>+            } else if (ret != TEST_STR_LEN) {</div><div class='add'>+                fprintf(stderr, "insufficient data written %d \n", ret);</div><div class='add'>+                ret = -EIO;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        case TEST_DISCARD:</div><div class='add'>+            fprintf(stderr, "Test Discard\n");</div><div class='add'>+            ret = glfs_discard(fd, offset, len_zero);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                if (errno == EOPNOTSUPP) {</div><div class='add'>+                    fprintf(stderr, "Operation not supported\n");</div><div class='add'>+                    ret = 0;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                perror("glfs_discard");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            goto test_read;</div><div class='add'>+        case TEST_ZEROFILL:</div><div class='add'>+            fprintf(stderr, "Test Zerofill\n");</div><div class='add'>+            ret = glfs_zerofill(fd, offset, len_zero);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                if (errno == EOPNOTSUPP) {</div><div class='add'>+                    fprintf(stderr, "Operation not supported\n");</div><div class='add'>+                    ret = 0;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                perror("glfs_zerofill");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            goto test_read;</div><div class='add'>+        default:</div><div class='add'>+            ret = -1;</div><div class='add'>+            fprintf(stderr, "Incorrect test code %d\n", opcode);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> test_read:</div><div class='del'>-	ret = glfs_readv(fd, &amp;iov, 1, 0);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		perror("glfs_readv");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    ret = glfs_readv(fd, &amp;iov, 1, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        perror("glfs_readv");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* printf("Read str\n"); print_str(readstr, TEST_STR_LEN); printf("\n"); */</div><div class='del'>-	ret = test_read(readstr, TEST_STR_LEN, len_zero);</div><div class='add'>+    /* printf("Read str\n"); print_str(readstr, TEST_STR_LEN); printf("\n"); */</div><div class='add'>+    ret = test_read(readstr, TEST_STR_LEN, len_zero);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	if (fd)</div><div class='del'>-		glfs_close(fd);</div><div class='del'>-	glfs_fini(fs);</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    glfs_fini(fs);</div><div class='ctx'> </div><div class='del'>-	if (ret)</div><div class='del'>-		return -1;</div><div class='add'>+    if (ret)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/readdir-ahead/bug-1390050.c b/tests/bugs/readdir-ahead/bug-1390050.c<br/>index 5593a1d4c0c..9578df2dd90 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/readdir-ahead/bug-1390050.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/readdir-ahead/bug-1390050.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/readdir-ahead/bug-1390050.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/readdir-ahead/bug-1390050.c</a></div><div class='hunk'>@@ -8,63 +8,65 @@</div><div class='ctx'> #include &lt;errno.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        const char  *glfs_dir          = NULL, *filepath = NULL;</div><div class='del'>-        DIR         *dirfd             = NULL;</div><div class='del'>-        int          filefd            = 0, ret = 0;</div><div class='del'>-        struct stat  stbuf             = {0, };</div><div class='del'>-        size_t       size_before_write = 0;</div><div class='add'>+    const char *glfs_dir = NULL, *filepath = NULL;</div><div class='add'>+    DIR *dirfd = NULL;</div><div class='add'>+    int filefd = 0, ret = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t size_before_write = 0;</div><div class='ctx'> </div><div class='del'>-        glfs_dir = argv[1];</div><div class='del'>-        filepath = argv[2];</div><div class='del'>-        dirfd = opendir (glfs_dir);</div><div class='del'>-        if (dirfd == NULL) {</div><div class='del'>-                fprintf (stderr, "opening directory failed (%s)\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    glfs_dir = argv[1];</div><div class='add'>+    filepath = argv[2];</div><div class='add'>+    dirfd = opendir(glfs_dir);</div><div class='add'>+    if (dirfd == NULL) {</div><div class='add'>+        fprintf(stderr, "opening directory failed (%s)\n", strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        filefd = open (filepath, O_RDWR);</div><div class='del'>-        if (filefd &lt; 0) {</div><div class='del'>-                fprintf (stderr, "open failed on path %s (%s)\n", filepath,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    filefd = open(filepath, O_RDWR);</div><div class='add'>+    if (filefd &lt; 0) {</div><div class='add'>+        fprintf(stderr, "open failed on path %s (%s)\n", filepath,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = stat (filepath, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat failed on path %s (%s)\n", filepath,</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = stat(filepath, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat failed on path %s (%s)\n", filepath,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        size_before_write = stbuf.st_size;</div><div class='add'>+    size_before_write = stbuf.st_size;</div><div class='ctx'> </div><div class='del'>-        ret = write (filefd, "testdata", strlen ("testdata123") + 1);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "write failed (%s)\n", strerror (errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = write(filefd, "testdata", strlen("testdata123") + 1);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "write failed (%s)\n", strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (readdir (dirfd)) {</div><div class='del'>-                /* do nothing */</div><div class='del'>-        }</div><div class='add'>+    while (readdir(dirfd)) {</div><div class='add'>+        /* do nothing */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = stat (filepath, &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "stat failed on path %s (%s)\n",</div><div class='del'>-                         strerror (errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = stat(filepath, &amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "stat failed on path %s (%s)\n", strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (stbuf.st_size == size_before_write) {</div><div class='del'>-                fprintf (stderr, "file size (%lu) has not changed even after "</div><div class='del'>-                         "its written to\n", stbuf.st_size);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (stbuf.st_size == size_before_write) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "file size (%lu) has not changed even after "</div><div class='add'>+                "its written to\n",</div><div class='add'>+                stbuf.st_size);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/replicate/bug-1250170-fsync.c b/tests/bugs/replicate/bug-1250170-fsync.c<br/>index 421fb5c5067..21fd96594aa 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/replicate/bug-1250170-fsync.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/replicate/bug-1250170-fsync.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/replicate/bug-1250170-fsync.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/replicate/bug-1250170-fsync.c</a></div><div class='hunk'>@@ -7,50 +7,50 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> </div><div class='del'>-int main (int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        char *file = NULL;</div><div class='del'>-        int fd = -1;</div><div class='del'>-        char *buffer = NULL;</div><div class='del'>-        size_t buf_size = 0;</div><div class='del'>-        size_t written = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        off_t offset = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int loop_count = 5;</div><div class='add'>+    char *file = NULL;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    size_t buf_size = 0;</div><div class='add'>+    size_t written = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int loop_count = 5;</div><div class='ctx'> </div><div class='del'>-        if (argc &lt; 2) {</div><div class='del'>-                printf ("Usage:%s &lt;filename&gt;\n", argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (argc &lt; 2) {</div><div class='add'>+        printf("Usage:%s &lt;filename&gt;\n", argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        file = argv[1];</div><div class='del'>-        buf_size = 1024;</div><div class='del'>-        buffer = malloc(buf_size);</div><div class='del'>-        if (!buffer) {</div><div class='del'>-                perror("malloc");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        memset (buffer, 'R', buf_size);</div><div class='add'>+    file = argv[1];</div><div class='add'>+    buf_size = 1024;</div><div class='add'>+    buffer = malloc(buf_size);</div><div class='add'>+    if (!buffer) {</div><div class='add'>+        perror("malloc");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    memset(buffer, 'R', buf_size);</div><div class='ctx'> </div><div class='del'>-        fd = open(file, O_WRONLY);</div><div class='del'>-        if (fd == -1) {</div><div class='del'>-                perror("open");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    fd = open(file, O_WRONLY);</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+        perror("open");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; loop_count; i++) {</div><div class='del'>-                ret =  write (fd, buffer, buf_size);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        perror("write");</div><div class='del'>-                        return ret;</div><div class='del'>-                } else {</div><div class='del'>-                        written += ret;</div><div class='del'>-                }</div><div class='del'>-                offset = lseek (fd, 0 , SEEK_SET);</div><div class='add'>+    for (i = 0; i &lt; loop_count; i++) {</div><div class='add'>+        ret = write(fd, buffer, buf_size);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            perror("write");</div><div class='add'>+            return ret;</div><div class='add'>+        } else {</div><div class='add'>+            written += ret;</div><div class='ctx'>         }</div><div class='add'>+        offset = lseek(fd, 0, SEEK_SET);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        free(buffer);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    free(buffer);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/shard/bug-shard-discard.c b/tests/bugs/shard/bug-shard-discard.c<br/>index b1268278fa5..15dca6c2181 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/bug-shard-discard.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/shard/bug-shard-discard.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/bug-shard-discard.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/bug-shard-discard.c</a></div><div class='hunk'>@@ -4,63 +4,66 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int        ret = 0;</div><div class='del'>-        off_t      off = 0;</div><div class='del'>-        size_t     len = 0;</div><div class='del'>-        glfs_t    *fs  = NULL;</div><div class='del'>-        glfs_fd_t *fd  = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    off_t off = 0;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc != 7) {</div><div class='del'>-                fprintf (stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;off&gt; &lt;len&gt; &lt;log-file&gt;\n", argv[0]);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 7) {</div><div class='add'>+        fprintf(</div><div class='add'>+            stderr,</div><div class='add'>+            "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;off&gt; &lt;len&gt; &lt;log-file&gt;\n",</div><div class='add'>+            argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[1], 24007);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[1], 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, argv[6], 7);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_logging(fs, argv[6], 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = glfs_open (fs, argv[3], O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = glfs_open(fs, argv[3], O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        off = atoi (argv[4]);</div><div class='del'>-        len = atoi (argv[5]);</div><div class='add'>+    off = atoi(argv[4]);</div><div class='add'>+    len = atoi(argv[5]);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_discard (fd, off, len);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "glfs_discard: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_discard(fd, off, len);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "glfs_discard: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                glfs_close (fd);</div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/shard/bug-shard-zerofill.c b/tests/bugs/shard/bug-shard-zerofill.c<br/>index c0525a58afc..ed4c8c54dc2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/bug-shard-zerofill.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/shard/bug-shard-zerofill.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/bug-shard-zerofill.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/bug-shard-zerofill.c</a></div><div class='hunk'>@@ -3,57 +3,58 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='del'>-        int        ret = 1;</div><div class='del'>-</div><div class='del'>-        if (argc != 5) {</div><div class='del'>-                fprintf (stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;log-file&gt;\n", argv[0]);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[1], 24007);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_set_logging (fs, argv[4], 7);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = glfs_open (fs, argv[3], O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Zero-fill "foo" with 10MB of data */</div><div class='del'>-        ret = glfs_zerofill (fd, 0, 10485760);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "glfs_zerofill: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    if (argc != 5) {</div><div class='add'>+        fprintf(stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;file-path&gt; &lt;log-file&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[1], 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_set_logging(fs, argv[4], 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = glfs_open(fs, argv[3], O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Zero-fill "foo" with 10MB of data */</div><div class='add'>+    ret = glfs_zerofill(fd, 0, 10485760);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "glfs_zerofill: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                glfs_close(fd);</div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/shard/shard-append-test.c b/tests/bugs/shard/shard-append-test.c<br/>index 92dff3d078d..c7debb2b182 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/shard-append-test.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/shard/shard-append-test.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/shard-append-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/shard-append-test.c</a></div><div class='hunk'>@@ -10,9 +10,10 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs.h&gt;</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(msg) do { \</div><div class='del'>-        fprintf (stderr, "%s : Error (%s)\n", msg, strerror (errno)); \</div><div class='del'>-        } while (0)</div><div class='add'>+#define LOG_ERR(msg)                                                           \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        fprintf(stderr, "%s : Error (%s)\n", msg, strerror(errno));            \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> /*This test tests that shard xlator handles offset in appending writes</div><div class='ctx'>  * correctly. This test performs writes of 1025 bytes 1025 times, in 5 threads</div><div class='hunk'>@@ -26,154 +27,157 @@ pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;</div><div class='ctx'> int thread_data = '1';</div><div class='ctx'> </div><div class='ctx'> glfs_t *</div><div class='del'>-init_glfs (const char *hostname, const char *volname,</div><div class='del'>-           const char *logfile)</div><div class='add'>+init_glfs(const char *hostname, const char *volname, const char *logfile)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='del'>-        glfs_t *fs      = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                LOG_ERR ("glfs_new failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", hostname, 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_volfile_server failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, logfile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_set_logging failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                LOG_ERR ("glfs_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        LOG_ERR("glfs_new failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_volfile_server failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, logfile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_set_logging failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        LOG_ERR("glfs_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                glfs_fini (fs);</div><div class='del'>-                fs = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        glfs_fini(fs);</div><div class='add'>+        fs = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fs;</div><div class='add'>+    return fs;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void*</div><div class='del'>-write_data (void *data)</div><div class='add'>+void *</div><div class='add'>+write_data(void *data)</div><div class='ctx'> {</div><div class='del'>-        char           buf[1025] = {0};</div><div class='del'>-        glfs_fd_t      *glfd = NULL;</div><div class='del'>-        glfs_t         *fs       = data;</div><div class='del'>-        int            i     = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;lock);</div><div class='del'>-        {</div><div class='del'>-                memset(buf, thread_data, sizeof(buf));</div><div class='del'>-                thread_data++;</div><div class='add'>+    char buf[1025] = {0};</div><div class='add'>+    glfs_fd_t *glfd = NULL;</div><div class='add'>+    glfs_t *fs = data;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;lock);</div><div class='add'>+    {</div><div class='add'>+        memset(buf, thread_data, sizeof(buf));</div><div class='add'>+        thread_data++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lock);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 1025; i++) {</div><div class='add'>+        glfd = glfs_creat(fs, "parallel-write.txt", O_WRONLY | O_APPEND,</div><div class='add'>+                          S_IRUSR | S_IWUSR | O_SYNC);</div><div class='add'>+        if (!glfd) {</div><div class='add'>+            LOG_ERR("Failed to create file");</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;lock);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 1025; i++) {</div><div class='del'>-                glfd = glfs_creat(fs, "parallel-write.txt", O_WRONLY | O_APPEND,</div><div class='del'>-                                   S_IRUSR | S_IWUSR | O_SYNC);</div><div class='del'>-                if (!glfd) {</div><div class='del'>-                        LOG_ERR ("Failed to create file");</div><div class='del'>-                        exit(1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (glfs_write (glfd, buf, sizeof(buf), 0) &lt; 0) {</div><div class='del'>-                        LOG_ERR ("Failed to write to file");</div><div class='del'>-                        exit(1);</div><div class='del'>-                }</div><div class='del'>-                if (glfs_close(glfd) != 0) {</div><div class='del'>-                        LOG_ERR ("Failed to close file");</div><div class='del'>-                        exit(1);</div><div class='del'>-                }</div><div class='add'>+</div><div class='add'>+        if (glfs_write(glfd, buf, sizeof(buf), 0) &lt; 0) {</div><div class='add'>+            LOG_ERR("Failed to write to file");</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='del'>-        return NULL;</div><div class='add'>+        if (glfs_close(glfd) != 0) {</div><div class='add'>+            LOG_ERR("Failed to close file");</div><div class='add'>+            exit(1);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        pthread_t  tid[5] = {0};</div><div class='del'>-        char       buf[1025] = {0};</div><div class='del'>-        char       cmp_buf[1025] = {0};</div><div class='del'>-        int         ret      = 0;</div><div class='del'>-        char       *hostname = NULL;</div><div class='del'>-        char       *volname  = NULL;</div><div class='del'>-        char       *logfile  = NULL;</div><div class='del'>-        glfs_t     *fs       = NULL;</div><div class='del'>-        glfs_fd_t  *glfd     = NULL;</div><div class='del'>-        ssize_t     bytes_read = 0;</div><div class='del'>-        ssize_t     total_bytes_read = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr, "Invalid argument\n");</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hostname = argv[1];</div><div class='del'>-        volname = argv[2];</div><div class='del'>-        logfile = argv[3];</div><div class='del'>-</div><div class='del'>-        fs = init_glfs (hostname, volname, logfile);</div><div class='del'>-        if (fs == NULL) {</div><div class='del'>-                LOG_ERR ("init_glfs failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 5; i++) {</div><div class='del'>-                pthread_create(&amp;tid[i], NULL, write_data, fs);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 5; i++) {</div><div class='del'>-                pthread_join(tid[i], NULL);</div><div class='del'>-        }</div><div class='del'>-        glfd = glfs_open(fs, "parallel-write.txt", O_RDONLY);</div><div class='del'>-        if (!glfd) {</div><div class='del'>-                LOG_ERR ("Failed to open file for reading");</div><div class='del'>-                exit(1);</div><div class='add'>+    pthread_t tid[5] = {0};</div><div class='add'>+    char buf[1025] = {0};</div><div class='add'>+    char cmp_buf[1025] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *logfile = NULL;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *glfd = NULL;</div><div class='add'>+    ssize_t bytes_read = 0;</div><div class='add'>+    ssize_t total_bytes_read = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr, "Invalid argument\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hostname = argv[1];</div><div class='add'>+    volname = argv[2];</div><div class='add'>+    logfile = argv[3];</div><div class='add'>+</div><div class='add'>+    fs = init_glfs(hostname, volname, logfile);</div><div class='add'>+    if (fs == NULL) {</div><div class='add'>+        LOG_ERR("init_glfs failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 5; i++) {</div><div class='add'>+        pthread_create(&amp;tid[i], NULL, write_data, fs);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 5; i++) {</div><div class='add'>+        pthread_join(tid[i], NULL);</div><div class='add'>+    }</div><div class='add'>+    glfd = glfs_open(fs, "parallel-write.txt", O_RDONLY);</div><div class='add'>+    if (!glfd) {</div><div class='add'>+        LOG_ERR("Failed to open file for reading");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while ((bytes_read = glfs_read(glfd, buf, sizeof(buf), 0)) &gt; 0) {</div><div class='add'>+        if (bytes_read != sizeof(buf)) {</div><div class='add'>+            fprintf(stderr,</div><div class='add'>+                    "Didn't read complete data read: %zd "</div><div class='add'>+                    "expected: %lu",</div><div class='add'>+                    bytes_read, sizeof(buf));</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while ((bytes_read = glfs_read (glfd, buf, sizeof(buf), 0)) &gt; 0) {</div><div class='del'>-                if (bytes_read != sizeof(buf)) {</div><div class='del'>-                        fprintf (stderr, "Didn't read complete data read: %zd "</div><div class='del'>-                                 "expected: %lu", bytes_read, sizeof(buf));</div><div class='del'>-                        exit(1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                total_bytes_read += bytes_read;</div><div class='del'>-                if (buf[0] &lt; '1' || buf[0] &gt;= thread_data) {</div><div class='del'>-                        fprintf(stderr, "Invalid character found: %c", buf[0]);</div><div class='del'>-                        exit(1);</div><div class='del'>-                }</div><div class='del'>-                memset(cmp_buf, buf[0], sizeof(cmp_buf));</div><div class='del'>-                if (memcmp(cmp_buf, buf, sizeof(cmp_buf))) {</div><div class='del'>-                        LOG_ERR ("Data corrupted");</div><div class='del'>-                        exit(1);</div><div class='del'>-                }</div><div class='del'>-                memset(cmp_buf, 0, sizeof(cmp_buf));</div><div class='add'>+        total_bytes_read += bytes_read;</div><div class='add'>+        if (buf[0] &lt; '1' || buf[0] &gt;= thread_data) {</div><div class='add'>+            fprintf(stderr, "Invalid character found: %c", buf[0]);</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (total_bytes_read != 5*1025*1025) {</div><div class='del'>-                fprintf(stderr, "Failed to read what is written, read; %zd, "</div><div class='del'>-                        "expected %zu", total_bytes_read, 5*1025*1025);</div><div class='del'>-                exit(1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (glfs_close(glfd) != 0) {</div><div class='del'>-                LOG_ERR ("Failed to close");</div><div class='del'>-                exit(1);</div><div class='add'>+        memset(cmp_buf, buf[0], sizeof(cmp_buf));</div><div class='add'>+        if (memcmp(cmp_buf, buf, sizeof(cmp_buf))) {</div><div class='add'>+            LOG_ERR("Data corrupted");</div><div class='add'>+            exit(1);</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        memset(cmp_buf, 0, sizeof(cmp_buf));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (total_bytes_read != 5 * 1025 * 1025) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Failed to read what is written, read; %zd, "</div><div class='add'>+                "expected %zu",</div><div class='add'>+                total_bytes_read, 5 * 1025 * 1025);</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (glfs_close(glfd) != 0) {</div><div class='add'>+        LOG_ERR("Failed to close");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/shard/shard-fallocate.c b/tests/bugs/shard/shard-fallocate.c<br/>index 8745c0ece1d..3a784d3c02c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/shard-fallocate.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/shard/shard-fallocate.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/shard/shard-fallocate.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/shard/shard-fallocate.c</a></div><div class='hunk'>@@ -6,104 +6,107 @@</div><div class='ctx'> #include &lt;glusterfs/api/glfs-handles.h&gt;</div><div class='ctx'> </div><div class='ctx'> enum fallocate_flag {</div><div class='del'>-        TEST_FALLOCATE_NONE,</div><div class='del'>-        TEST_FALLOCATE_KEEP_SIZE,</div><div class='del'>-        TEST_FALLOCATE_ZERO_RANGE,</div><div class='del'>-        TEST_FALLOCATE_PUNCH_HOLE,</div><div class='del'>-        TEST_FALLOCATE_MAX,</div><div class='add'>+    TEST_FALLOCATE_NONE,</div><div class='add'>+    TEST_FALLOCATE_KEEP_SIZE,</div><div class='add'>+    TEST_FALLOCATE_ZERO_RANGE,</div><div class='add'>+    TEST_FALLOCATE_PUNCH_HOLE,</div><div class='add'>+    TEST_FALLOCATE_MAX,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-get_fallocate_flag (int opcode)</div><div class='add'>+get_fallocate_flag(int opcode)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        switch (opcode) {</div><div class='add'>+    switch (opcode) {</div><div class='ctx'>         case TEST_FALLOCATE_NONE:</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         case TEST_FALLOCATE_KEEP_SIZE:</div><div class='del'>-                ret = FALLOC_FL_KEEP_SIZE;</div><div class='del'>-                break;</div><div class='add'>+            ret = FALLOC_FL_KEEP_SIZE;</div><div class='add'>+            break;</div><div class='ctx'>         case TEST_FALLOCATE_ZERO_RANGE:</div><div class='del'>-                ret = FALLOC_FL_ZERO_RANGE;</div><div class='del'>-                break;</div><div class='add'>+            ret = FALLOC_FL_ZERO_RANGE;</div><div class='add'>+            break;</div><div class='ctx'>         case TEST_FALLOCATE_PUNCH_HOLE:</div><div class='del'>-                ret = FALLOC_FL_PUNCH_HOLE;</div><div class='del'>-                break;</div><div class='add'>+            ret = FALLOC_FL_PUNCH_HOLE;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int        ret = 1;</div><div class='del'>-        int        opcode = -1;</div><div class='del'>-        off_t      offset = 0;</div><div class='del'>-        size_t     len = 0;</div><div class='del'>-        glfs_t    *fs = NULL;</div><div class='del'>-        glfs_fd_t *fd = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+    int opcode = -1;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc != 8) {</div><div class='del'>-                fprintf (stderr, "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;opcode&gt; &lt;offset&gt; &lt;len&gt; &lt;file-path&gt; &lt;log-file&gt;\n", argv[0]);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 8) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Syntax: %s &lt;host&gt; &lt;volname&gt; &lt;opcode&gt; &lt;offset&gt; &lt;len&gt; "</div><div class='add'>+                "&lt;file-path&gt; &lt;log-file&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new (argv[2]);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new: returned NULL\n");</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new(argv[2]);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new: returned NULL\n");</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", argv[1], 24007);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", argv[1], 24007);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile_server: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_logging (fs, argv[7], 7);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_logging(fs, argv[7], 7);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "glfs_init: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "glfs_init: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        opcode = atoi (argv[3]);</div><div class='del'>-        opcode = get_fallocate_flag (opcode);</div><div class='del'>-        if (opcode &lt; 0) {</div><div class='del'>-                fprintf (stderr, "get_fallocate_flag: invalid flag \n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    opcode = atoi(argv[3]);</div><div class='add'>+    opcode = get_fallocate_flag(opcode);</div><div class='add'>+    if (opcode &lt; 0) {</div><div class='add'>+        fprintf(stderr, "get_fallocate_flag: invalid flag \n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        offset = atoi (argv[4]);</div><div class='del'>-        len    = atoi (argv[5]);</div><div class='add'>+    offset = atoi(argv[4]);</div><div class='add'>+    len = atoi(argv[5]);</div><div class='ctx'> </div><div class='del'>-        fd = glfs_open (fs, argv[6], O_RDWR);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                fprintf (stderr, "glfs_open: returned NULL\n");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = glfs_open(fs, argv[6], O_RDWR);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        fprintf(stderr, "glfs_open: returned NULL\n");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fallocate (fd, opcode, offset, len);</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                fprintf (stderr, "glfs_fallocate: returned %d\n", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_fallocate(fd, opcode, offset, len);</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        fprintf(stderr, "glfs_fallocate: returned %d\n", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                glfs_close(fd);</div><div class='del'>-        glfs_fini (fs);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        glfs_close(fd);</div><div class='add'>+    glfs_fini(fs);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/write-behind/bug-1058663.c b/tests/bugs/write-behind/bug-1058663.c<br/>index 5e522e98048..aedf97d7487 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/write-behind/bug-1058663.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/write-behind/bug-1058663.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/write-behind/bug-1058663.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/write-behind/bug-1058663.c</a></div><div class='hunk'>@@ -19,101 +19,105 @@ static int sigbus_received;</div><div class='ctx'> /* test for truncate()/seek()/write()/mmap()</div><div class='ctx'>  * There should ne no SIGBUS triggered.</div><div class='ctx'>  */</div><div class='del'>-void seek_write(char *filename)</div><div class='add'>+void</div><div class='add'>+seek_write(char *filename)</div><div class='ctx'> {</div><div class='del'>-	int fd;</div><div class='del'>-	uint8_t *map;</div><div class='del'>-	int i;</div><div class='del'>-</div><div class='del'>-	fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0600);</div><div class='del'>-	lseek(fd, FILE_SIZE - 1, SEEK_SET);</div><div class='del'>-	write(fd, "\xff", 1);</div><div class='del'>-</div><div class='del'>-	map = mmap(NULL, FILE_SIZE, PROT_READ, MAP_PRIVATE, fd, 0);</div><div class='del'>-	for (i = 0; i &lt; (FILE_SIZE - 1); i++) {</div><div class='del'>-		if (map[i] != 0) /* should never be true */</div><div class='del'>-			abort();</div><div class='del'>-	}</div><div class='del'>-	munmap(map, FILE_SIZE);</div><div class='del'>-</div><div class='del'>-	close(fd);</div><div class='add'>+    int fd;</div><div class='add'>+    uint8_t *map;</div><div class='add'>+    int i;</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600);</div><div class='add'>+    lseek(fd, FILE_SIZE - 1, SEEK_SET);</div><div class='add'>+    write(fd, "\xff", 1);</div><div class='add'>+</div><div class='add'>+    map = mmap(NULL, FILE_SIZE, PROT_READ, MAP_PRIVATE, fd, 0);</div><div class='add'>+    for (i = 0; i &lt; (FILE_SIZE - 1); i++) {</div><div class='add'>+        if (map[i] != 0) /* should never be true */</div><div class='add'>+            abort();</div><div class='add'>+    }</div><div class='add'>+    munmap(map, FILE_SIZE);</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int read_after_eof(char *filename)</div><div class='add'>+int</div><div class='add'>+read_after_eof(char *filename)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int fd;</div><div class='del'>-	char *data;</div><div class='del'>-	uint8_t *map;</div><div class='del'>-</div><div class='del'>-	fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0600);</div><div class='del'>-	lseek(fd, FILE_SIZE - 1, SEEK_SET);</div><div class='del'>-	write(fd, "\xff", 1);</div><div class='del'>-</div><div class='del'>-	/* trigger verify that reading after EOF fails */</div><div class='del'>-	ret = read(fd, data, FILE_SIZE / 2);</div><div class='del'>-	if (ret != 0)</div><div class='del'>-		return 1;</div><div class='del'>-</div><div class='del'>-	/* map an area of 1 byte after FILE_SIZE */</div><div class='del'>-	map = mmap(NULL, 1, PROT_READ, MAP_PRIVATE, fd, FILE_SIZE);</div><div class='del'>-	/* map[0] is an access after EOF, it should trigger SIGBUS */</div><div class='del'>-	if (map[0] != 0)</div><div class='del'>-		/* it is expected that we exit before we get here */</div><div class='del'>-		if (!sigbus_received)</div><div class='del'>-			return 1;</div><div class='del'>-	munmap(map, FILE_SIZE);</div><div class='del'>-</div><div class='del'>-	close(fd);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd;</div><div class='add'>+    char *data;</div><div class='add'>+    uint8_t *map;</div><div class='add'>+</div><div class='add'>+    fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600);</div><div class='add'>+    lseek(fd, FILE_SIZE - 1, SEEK_SET);</div><div class='add'>+    write(fd, "\xff", 1);</div><div class='add'>+</div><div class='add'>+    /* trigger verify that reading after EOF fails */</div><div class='add'>+    ret = read(fd, data, FILE_SIZE / 2);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        return 1;</div><div class='add'>+</div><div class='add'>+    /* map an area of 1 byte after FILE_SIZE */</div><div class='add'>+    map = mmap(NULL, 1, PROT_READ, MAP_PRIVATE, fd, FILE_SIZE);</div><div class='add'>+    /* map[0] is an access after EOF, it should trigger SIGBUS */</div><div class='add'>+    if (map[0] != 0)</div><div class='add'>+        /* it is expected that we exit before we get here */</div><div class='add'>+        if (!sigbus_received)</div><div class='add'>+            return 1;</div><div class='add'>+    munmap(map, FILE_SIZE);</div><div class='add'>+</div><div class='add'>+    close(fd);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* signal handler for SIGBUS */</div><div class='del'>-void catch_sigbus(int signum)</div><div class='add'>+void</div><div class='add'>+catch_sigbus(int signum)</div><div class='ctx'> {</div><div class='del'>-	switch (signum) {</div><div class='add'>+    switch (signum) {</div><div class='ctx'> #ifdef __NetBSD__</div><div class='del'>-	/* Depending on architecture, we can get SIGSEGV */</div><div class='del'>-	case SIGSEGV: /* FALLTHROUGH */</div><div class='add'>+        /* Depending on architecture, we can get SIGSEGV */</div><div class='add'>+        case SIGSEGV: /* FALLTHROUGH */</div><div class='ctx'> #endif</div><div class='del'>-	case SIGBUS:</div><div class='del'>-		sigbus_received++;</div><div class='del'>-		if (!expect_sigbus)</div><div class='del'>-			exit(EXIT_FAILURE);</div><div class='del'>-		if (sigbus_received &gt;= MAX_SIGBUS)</div><div class='del'>-			exit(EXIT_SUCCESS);</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		printf("Unexpected signal received: %d\n", signum);</div><div class='del'>-	}</div><div class='add'>+        case SIGBUS:</div><div class='add'>+            sigbus_received++;</div><div class='add'>+            if (!expect_sigbus)</div><div class='add'>+                exit(EXIT_FAILURE);</div><div class='add'>+            if (sigbus_received &gt;= MAX_SIGBUS)</div><div class='add'>+                exit(EXIT_SUCCESS);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            printf("Unexpected signal received: %d\n", signum);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int main(int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-	if (argc == 1) {</div><div class='del'>-		printf("Usage: %s &lt;filename&gt;\n", argv[0]);</div><div class='del'>-		return EXIT_FAILURE;</div><div class='del'>-	}</div><div class='add'>+    if (argc == 1) {</div><div class='add'>+        printf("Usage: %s &lt;filename&gt;\n", argv[0]);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #ifdef __NetBSD__</div><div class='del'>-	/* Depending on architecture, we can get SIGSEGV */</div><div class='del'>-	signal(SIGSEGV, catch_sigbus);</div><div class='add'>+    /* Depending on architecture, we can get SIGSEGV */</div><div class='add'>+    signal(SIGSEGV, catch_sigbus);</div><div class='ctx'> #endif</div><div class='del'>-	signal(SIGBUS, catch_sigbus);</div><div class='add'>+    signal(SIGBUS, catch_sigbus);</div><div class='ctx'> </div><div class='del'>-	/* the next test should not trigger SIGBUS */</div><div class='del'>-	expect_sigbus = 0;</div><div class='del'>-	for (i = 0; i &lt; RUN_LOOP; i++) {</div><div class='del'>-		seek_write(argv[1]);</div><div class='del'>-	}</div><div class='add'>+    /* the next test should not trigger SIGBUS */</div><div class='add'>+    expect_sigbus = 0;</div><div class='add'>+    for (i = 0; i &lt; RUN_LOOP; i++) {</div><div class='add'>+        seek_write(argv[1]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* the next test should trigger SIGBUS */</div><div class='del'>-	expect_sigbus = 1;</div><div class='del'>-	if (read_after_eof(argv[1]))</div><div class='del'>-		return EXIT_FAILURE;</div><div class='add'>+    /* the next test should trigger SIGBUS */</div><div class='add'>+    expect_sigbus = 1;</div><div class='add'>+    if (read_after_eof(argv[1]))</div><div class='add'>+        return EXIT_FAILURE;</div><div class='ctx'> </div><div class='del'>-	return EXIT_SUCCESS;</div><div class='add'>+    return EXIT_SUCCESS;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/bugs/write-behind/bug-1279730.c b/tests/bugs/write-behind/bug-1279730.c<br/>index 535d289c582..706ae67b102 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/bugs/write-behind/bug-1279730.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/bugs/write-behind/bug-1279730.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/bugs/write-behind/bug-1279730.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/bugs/write-behind/bug-1279730.c</a></div><div class='hunk'>@@ -8,124 +8,142 @@</div><div class='ctx'> #include &lt;assert.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int          fd                = -1, ret = -1, len = 0;</div><div class='del'>-        char        *path              = NULL, buf[128] = {0, }, *cmd = NULL;</div><div class='del'>-        struct stat  stbuf             = {0, };</div><div class='del'>-        int          write_to_child[2] = {0, }, write_to_parent[2] = {0, };</div><div class='add'>+    int fd = -1, ret = -1, len = 0;</div><div class='add'>+    char *path = NULL,</div><div class='add'>+         buf[128] =</div><div class='add'>+             {</div><div class='add'>+                 0,</div><div class='add'>+             },</div><div class='add'>+         *cmd = NULL;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int write_to_child[2] =</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+        write_to_parent[2] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+    path = argv[1];</div><div class='add'>+    cmd = argv[2];</div><div class='add'>+</div><div class='add'>+    assert(argc == 3);</div><div class='add'>+</div><div class='add'>+    ret = pipe(write_to_child);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "creation of write-to-child pipe failed "</div><div class='add'>+                "(%s)\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pipe(write_to_parent);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "creation of write-to-parent pipe failed "</div><div class='add'>+                "(%s)\n",</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = fork();</div><div class='add'>+    switch (ret) {</div><div class='add'>+        case 0:</div><div class='add'>+            close(write_to_child[1]);</div><div class='add'>+            close(write_to_parent[0]);</div><div class='add'>+</div><div class='add'>+            /* child, wait for instructions to execute command */</div><div class='add'>+            ret = read(write_to_child[0], buf, 128);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                fprintf(stderr, "child: read on pipe failed (%s)\n",</div><div class='add'>+                        strerror(errno));</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        path = argv[1];</div><div class='del'>-        cmd = argv[2];</div><div class='add'>+            system(cmd);</div><div class='add'>+</div><div class='add'>+            ret = write(write_to_parent[1], "1", 2);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                fprintf(stderr, "child: write to pipe failed (%s)\n",</div><div class='add'>+                        strerror(errno));</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        assert (argc == 3);</div><div class='add'>+        case -1:</div><div class='add'>+            fprintf(stderr, "fork failed (%s)\n", strerror(errno));</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        default:</div><div class='add'>+            close(write_to_parent[1]);</div><div class='add'>+            close(write_to_child[0]);</div><div class='ctx'> </div><div class='del'>-        ret = pipe (write_to_child);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "creation of write-to-child pipe failed "</div><div class='del'>-                         "(%s)\n", strerror (errno));</div><div class='add'>+            fd = open(path, O_CREAT | O_RDWR | O_APPEND, S_IRWXU);</div><div class='add'>+            if (fd &lt; 0) {</div><div class='add'>+                fprintf(stderr, "open failed (%s)\n", strerror(errno));</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            len = strlen("test-content") + 1;</div><div class='add'>+            ret = write(fd, "test-content", len);</div><div class='add'>+</div><div class='add'>+            if (ret &lt; len) {</div><div class='add'>+                fprintf(stderr, "write failed %d (%s)\n", ret, strerror(errno));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = pread(fd, buf, 128, 0);</div><div class='add'>+            if ((ret == len) &amp;&amp; (strcmp(buf, "test-content") == 0)) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "read should've failed as previous "</div><div class='add'>+                        "write would've failed with EDQUOT, but its "</div><div class='add'>+                        "successful");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = pipe (write_to_parent);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (stderr, "creation of write-to-parent pipe failed "</div><div class='del'>-                         "(%s)\n", strerror (errno));</div><div class='add'>+            ret = write(write_to_child[1], "1", 2);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                fprintf(stderr, "parent: write to pipe failed (%s)\n",</div><div class='add'>+                        strerror(errno));</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = fork ();</div><div class='del'>-        switch (ret) {</div><div class='del'>-        case 0:</div><div class='del'>-                close (write_to_child[1]);</div><div class='del'>-                close (write_to_parent[0]);</div><div class='del'>-</div><div class='del'>-                /* child, wait for instructions to execute command */</div><div class='del'>-                ret = read (write_to_child[0], buf, 128);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "child: read on pipe failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                system (cmd);</div><div class='del'>-</div><div class='del'>-                ret = write (write_to_parent[1], "1", 2);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "child: write to pipe failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            ret = read(write_to_parent[0], buf, 128);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                fprintf(stderr, "parent: read from pipe failed (%s)\n",</div><div class='add'>+                        strerror(errno));</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* this will force a sync on cached-write and now that quota</div><div class='add'>+               limit is increased, sync will be successful. ignore return</div><div class='add'>+               value as fstat would fail with EDQUOT (picked up from</div><div class='add'>+               cached-write because of previous sync failure.</div><div class='add'>+            */</div><div class='add'>+            fstat(fd, &amp;stbuf);</div><div class='add'>+</div><div class='add'>+            ret = pread(fd, buf, 128, 0);</div><div class='add'>+            if (ret != len) {</div><div class='add'>+                fprintf(stderr,</div><div class='add'>+                        "post cmd read failed %d (data:%s) "</div><div class='add'>+                        "(error:%s)\n",</div><div class='add'>+                        ret, buf, strerror(errno));</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case -1:</div><div class='del'>-                fprintf (stderr, "fork failed (%s)\n", strerror (errno));</div><div class='add'>+            if (strcmp(buf, "test-content")) {</div><div class='add'>+                fprintf(stderr, "wrong data (%s)\n", buf);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        default:</div><div class='del'>-                close (write_to_parent[1]);</div><div class='del'>-                close (write_to_child[0]);</div><div class='del'>-</div><div class='del'>-                fd = open (path, O_CREAT | O_RDWR | O_APPEND, S_IRWXU);</div><div class='del'>-                if (fd &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "open failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                len = strlen ("test-content") + 1;</div><div class='del'>-                ret = write (fd, "test-content", len);</div><div class='del'>-</div><div class='del'>-                if (ret &lt; len) {</div><div class='del'>-                        fprintf (stderr, "write failed %d (%s)\n", ret,</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = pread (fd, buf, 128, 0);</div><div class='del'>-                if ((ret == len) &amp;&amp; (strcmp (buf, "test-content") == 0)) {</div><div class='del'>-                        fprintf (stderr, "read should've failed as previous "</div><div class='del'>-                                 "write would've failed with EDQUOT, but its "</div><div class='del'>-                                 "successful");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = write (write_to_child[1], "1", 2);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "parent: write to pipe failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = read (write_to_parent[0], buf, 128);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        fprintf (stderr, "parent: read from pipe failed (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* this will force a sync on cached-write and now that quota</div><div class='del'>-                   limit is increased, sync will be successful. ignore return</div><div class='del'>-                   value as fstat would fail with EDQUOT (picked up from</div><div class='del'>-                   cached-write because of previous sync failure.</div><div class='del'>-                */</div><div class='del'>-                fstat (fd, &amp;stbuf);</div><div class='del'>-</div><div class='del'>-                ret = pread (fd, buf, 128, 0);</div><div class='del'>-                if (ret != len) {</div><div class='del'>-                        fprintf (stderr, "post cmd read failed %d (data:%s) "</div><div class='del'>-                                 "(error:%s)\n", ret, buf, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (strcmp (buf, "test-content")) {</div><div class='del'>-                        fprintf (stderr, "wrong data (%s)\n", buf);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/encryption/frag.c b/tests/encryption/frag.c<br/>index 86da037c607..7b4510f6a4d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/encryption/frag.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/encryption/frag.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/encryption/frag.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/encryption/frag.c</a></div><div class='hunk'>@@ -20,300 +20,296 @@</div><div class='ctx'> #define MAX_NUM_OPS (1 &lt;&lt; 20)</div><div class='ctx'> #define MAX_FILE_SIZE (1 &lt;&lt; 30)</div><div class='ctx'> </div><div class='del'>-typedef enum {</div><div class='del'>-	READ_OP,</div><div class='del'>-	WRITE_OP,</div><div class='del'>-	TRUNC_OP,</div><div class='del'>-	LAST_OP</div><div class='del'>-} frag_op;</div><div class='add'>+typedef enum { READ_OP, WRITE_OP, TRUNC_OP, LAST_OP } frag_op;</div><div class='ctx'> </div><div class='ctx'> struct frag_ctx {</div><div class='del'>-	int test_fd;</div><div class='del'>-	int good_fd;</div><div class='del'>-	char *test_buf;</div><div class='del'>-	char *good_buf;</div><div class='del'>-	char *content;</div><div class='del'>-	int max_file_size;</div><div class='add'>+    int test_fd;</div><div class='add'>+    int good_fd;</div><div class='add'>+    char *test_buf;</div><div class='add'>+    char *good_buf;</div><div class='add'>+    char *content;</div><div class='add'>+    int max_file_size;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> typedef int (*frag_op_t)(struct frag_ctx *ctx, off_t offset, size_t count);</div><div class='ctx'> </div><div class='del'>-static int doread(int fd, off_t offset, size_t count,</div><div class='del'>-		  char *buf, int max_file_size)</div><div class='add'>+static int</div><div class='add'>+doread(int fd, off_t offset, size_t count, char *buf, int max_file_size)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int was_read = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int was_read = 0;</div><div class='ctx'> </div><div class='del'>-	if (lseek(fd, offset, SEEK_SET) == -1) {</div><div class='del'>-		perror("lseek failed");</div><div class='del'>-                return -1;</div><div class='del'>-	}</div><div class='del'>-	while (count) {</div><div class='del'>-		ret = read(fd, buf + offset + was_read, count);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			return -1;</div><div class='del'>-		if (ret == 0)</div><div class='del'>-			break;</div><div class='del'>-		if (ret &gt; count) {</div><div class='del'>-			fprintf(stderr, "READ: read more than asked\n");</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-		count -= ret;</div><div class='del'>-		was_read += ret;</div><div class='del'>-	}</div><div class='del'>-	return ret;</div><div class='add'>+    if (lseek(fd, offset, SEEK_SET) == -1) {</div><div class='add'>+        perror("lseek failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    while (count) {</div><div class='add'>+        ret = read(fd, buf + offset + was_read, count);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            break;</div><div class='add'>+        if (ret &gt; count) {</div><div class='add'>+            fprintf(stderr, "READ: read more than asked\n");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        count -= ret;</div><div class='add'>+        was_read += ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int dowrite(int fd, off_t offset, size_t count, char *buf)</div><div class='add'>+static int</div><div class='add'>+dowrite(int fd, off_t offset, size_t count, char *buf)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-	ret = lseek(fd, offset, SEEK_SET);</div><div class='del'>-	if (ret == -1)</div><div class='del'>-                return ret;</div><div class='del'>-	return write(fd, buf, count);</div><div class='add'>+    ret = lseek(fd, offset, SEEK_SET);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        return ret;</div><div class='add'>+    return write(fd, buf, count);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int dotrunc(int fd, off_t offset)</div><div class='add'>+static int</div><div class='add'>+dotrunc(int fd, off_t offset)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-	ret = ftruncate(fd, offset);</div><div class='del'>-	if (ret == -1)</div><div class='del'>-		perror("truncate failed");</div><div class='del'>-	return ret;</div><div class='add'>+    ret = ftruncate(fd, offset);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        perror("truncate failed");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int prepare_file(char *filename, int *fd, char **buf, int max_file_size)</div><div class='add'>+static int</div><div class='add'>+prepare_file(char *filename, int *fd, char **buf, int max_file_size)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='add'>+    int ret;</div><div class='ctx'> </div><div class='del'>-	*buf = malloc(max_file_size);</div><div class='del'>-	if (*buf == NULL) {</div><div class='del'>-		perror("malloc failed");</div><div class='del'>-	        return -1;</div><div class='del'>-	}</div><div class='del'>-	*fd = open(filename, O_CREAT | O_RDWR, S_IRWXU);</div><div class='del'>-	if (*fd == -1) {</div><div class='del'>-		perror("open failed");</div><div class='del'>-		free(*buf);</div><div class='del'>-		*buf = NULL;</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    *buf = malloc(max_file_size);</div><div class='add'>+    if (*buf == NULL) {</div><div class='add'>+        perror("malloc failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    *fd = open(filename, O_CREAT | O_RDWR, S_IRWXU);</div><div class='add'>+    if (*fd == -1) {</div><div class='add'>+        perror("open failed");</div><div class='add'>+        free(*buf);</div><div class='add'>+        *buf = NULL;</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * @offset, @count: random values from [0, max_file_size - 1]</div><div class='ctx'>  */</div><div class='del'>-static int frag_write(struct frag_ctx *ctx, off_t offset, size_t count)</div><div class='add'>+static int</div><div class='add'>+frag_write(struct frag_ctx *ctx, off_t offset, size_t count)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='del'>-	struct stat test_stbuf;</div><div class='del'>-	struct stat good_stbuf;</div><div class='add'>+    int ret;</div><div class='add'>+    struct stat test_stbuf;</div><div class='add'>+    struct stat good_stbuf;</div><div class='ctx'> </div><div class='del'>-	if (offset + count &gt; ctx-&gt;max_file_size)</div><div class='del'>-		offset = offset / 2;</div><div class='del'>-	if (offset + count &gt; ctx-&gt;max_file_size)</div><div class='del'>-		count = count / 2;</div><div class='add'>+    if (offset + count &gt; ctx-&gt;max_file_size)</div><div class='add'>+        offset = offset / 2;</div><div class='add'>+    if (offset + count &gt; ctx-&gt;max_file_size)</div><div class='add'>+        count = count / 2;</div><div class='ctx'> </div><div class='del'>-	if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='del'>-		fprintf(stderr, "WRITE: fstat of test file failed\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (offset &gt; test_stbuf.st_size)</div><div class='del'>-		printf("writing hole\n");</div><div class='add'>+    if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='add'>+        fprintf(stderr, "WRITE: fstat of test file failed\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (offset &gt; test_stbuf.st_size)</div><div class='add'>+        printf("writing hole\n");</div><div class='ctx'> </div><div class='del'>-	ret = dowrite(ctx-&gt;test_fd, offset, count, ctx-&gt;content);</div><div class='del'>-	if (ret &lt; 0 || ret != count){</div><div class='del'>-		fprintf(stderr, "WRITE: failed to write test file\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	ret = dowrite(ctx-&gt;good_fd, offset, count, ctx-&gt;content);</div><div class='del'>-	if (ret &lt; 0 || ret != count) {</div><div class='del'>-		fprintf(stderr, "WRITE: failed to write test file\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}	</div><div class='del'>-	if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='del'>-                fprintf(stderr, "WRITE: fstat of test file failed\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (fstat(ctx-&gt;good_fd, &amp;good_stbuf)) {</div><div class='del'>-                fprintf(stderr, "WRITE: fstat of good file failed\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (test_stbuf.st_size != good_stbuf.st_size) {</div><div class='del'>-		fprintf(stderr,</div><div class='del'>-			"READ: Bad file size %d (expected %d)\n",</div><div class='del'>-			(int)test_stbuf.st_size,</div><div class='del'>-			(int)good_stbuf.st_size);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    ret = dowrite(ctx-&gt;test_fd, offset, count, ctx-&gt;content);</div><div class='add'>+    if (ret &lt; 0 || ret != count) {</div><div class='add'>+        fprintf(stderr, "WRITE: failed to write test file\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = dowrite(ctx-&gt;good_fd, offset, count, ctx-&gt;content);</div><div class='add'>+    if (ret &lt; 0 || ret != count) {</div><div class='add'>+        fprintf(stderr, "WRITE: failed to write test file\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='add'>+        fprintf(stderr, "WRITE: fstat of test file failed\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (fstat(ctx-&gt;good_fd, &amp;good_stbuf)) {</div><div class='add'>+        fprintf(stderr, "WRITE: fstat of good file failed\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (test_stbuf.st_size != good_stbuf.st_size) {</div><div class='add'>+        fprintf(stderr, "READ: Bad file size %d (expected %d)\n",</div><div class='add'>+                (int)test_stbuf.st_size, (int)good_stbuf.st_size);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * @offset, @count: random values from [0, max_file_size - 1]</div><div class='ctx'>  */</div><div class='del'>-static int frag_read(struct frag_ctx *ctx, off_t offset, size_t count)</div><div class='add'>+static int</div><div class='add'>+frag_read(struct frag_ctx *ctx, off_t offset, size_t count)</div><div class='ctx'> {</div><div class='del'>-	ssize_t test_ret;</div><div class='del'>-	ssize_t good_ret;</div><div class='add'>+    ssize_t test_ret;</div><div class='add'>+    ssize_t good_ret;</div><div class='ctx'> </div><div class='del'>-	test_ret = doread(ctx-&gt;test_fd,</div><div class='del'>-			  offset, count, ctx-&gt;test_buf, ctx-&gt;max_file_size);</div><div class='del'>-	if (test_ret &lt; 0) {</div><div class='del'>-		fprintf(stderr, "READ: failed to read test file\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	good_ret = doread(ctx-&gt;good_fd,</div><div class='del'>-			  offset, count, ctx-&gt;good_buf, ctx-&gt;max_file_size);</div><div class='del'>-	if (good_ret &lt; 0) {</div><div class='del'>-		fprintf(stderr, "READ: failed to read good file\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (test_ret != good_ret) {</div><div class='del'>-		fprintf(stderr,</div><div class='del'>-			"READ: Bad return value %d (expected %d\n)",</div><div class='del'>-			test_ret, good_ret);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (memcmp(ctx-&gt;test_buf + offset, ctx-&gt;good_buf + offset, good_ret)) {</div><div class='del'>-		fprintf(stderr, "READ: bad data\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    test_ret = doread(ctx-&gt;test_fd, offset, count, ctx-&gt;test_buf,</div><div class='add'>+                      ctx-&gt;max_file_size);</div><div class='add'>+    if (test_ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "READ: failed to read test file\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    good_ret = doread(ctx-&gt;good_fd, offset, count, ctx-&gt;good_buf,</div><div class='add'>+                      ctx-&gt;max_file_size);</div><div class='add'>+    if (good_ret &lt; 0) {</div><div class='add'>+        fprintf(stderr, "READ: failed to read good file\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (test_ret != good_ret) {</div><div class='add'>+        fprintf(stderr, "READ: Bad return value %d (expected %d\n)", test_ret,</div><div class='add'>+                good_ret);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (memcmp(ctx-&gt;test_buf + offset, ctx-&gt;good_buf + offset, good_ret)) {</div><div class='add'>+        fprintf(stderr, "READ: bad data\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * @offset: random value from [0, max_file_size - 1]</div><div class='ctx'>  */</div><div class='del'>-static int frag_truncate(struct frag_ctx *ctx,</div><div class='del'>-			 off_t offset, __attribute__((unused))size_t count)</div><div class='add'>+static int</div><div class='add'>+frag_truncate(struct frag_ctx *ctx, off_t offset,</div><div class='add'>+              __attribute__((unused)) size_t count)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='del'>-	struct stat test_stbuf;</div><div class='del'>-	struct stat good_stbuf;</div><div class='add'>+    int ret;</div><div class='add'>+    struct stat test_stbuf;</div><div class='add'>+    struct stat good_stbuf;</div><div class='add'>+</div><div class='add'>+    if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='add'>+        fprintf(stderr, "TRUNCATE: fstat of test file failed\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (offset &gt; test_stbuf.st_size)</div><div class='add'>+        printf("expanding truncate to %d\n", offset);</div><div class='add'>+    else if (offset &lt; test_stbuf.st_size)</div><div class='add'>+        printf("shrinking truncate to %d\n", offset);</div><div class='add'>+    else</div><div class='add'>+        printf("trivial truncate\n");</div><div class='ctx'> </div><div class='del'>-	if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='del'>-		fprintf(stderr, "TRUNCATE: fstat of test file failed\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (offset &gt; test_stbuf.st_size)</div><div class='del'>-		printf("expanding truncate to %d\n", offset);</div><div class='del'>-	else if (offset &lt; test_stbuf.st_size)</div><div class='del'>-		printf("shrinking truncate to %d\n", offset);</div><div class='del'>-	else</div><div class='del'>-		printf("trivial truncate\n");</div><div class='del'>-	</div><div class='del'>-	ret = dotrunc(ctx-&gt;test_fd, offset);</div><div class='del'>-	if (ret == -1) {</div><div class='del'>-		fprintf(stderr, "TRUNCATE: failed for test file\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	ret = dotrunc(ctx-&gt;good_fd, offset);</div><div class='del'>-	if (ret == -1) {</div><div class='del'>-		fprintf(stderr, "TRUNCATE: failed for good file\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='del'>-		fprintf(stderr, "TRUNCATE: fstat of test file failed\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (fstat(ctx-&gt;good_fd, &amp;good_stbuf)) {</div><div class='del'>-		fprintf(stderr, "TRUNCATE: fstat of good file failed\n");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	if (test_stbuf.st_size != good_stbuf.st_size) {</div><div class='del'>-		fprintf(stderr,</div><div class='del'>-			"TRUNCATE: bad test file size %d (expected %d)\n",</div><div class='del'>-			test_stbuf.st_size,</div><div class='del'>-			good_stbuf.st_size);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    ret = dotrunc(ctx-&gt;test_fd, offset);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        fprintf(stderr, "TRUNCATE: failed for test file\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = dotrunc(ctx-&gt;good_fd, offset);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        fprintf(stderr, "TRUNCATE: failed for good file\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (fstat(ctx-&gt;test_fd, &amp;test_stbuf)) {</div><div class='add'>+        fprintf(stderr, "TRUNCATE: fstat of test file failed\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (fstat(ctx-&gt;good_fd, &amp;good_stbuf)) {</div><div class='add'>+        fprintf(stderr, "TRUNCATE: fstat of good file failed\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (test_stbuf.st_size != good_stbuf.st_size) {</div><div class='add'>+        fprintf(stderr, "TRUNCATE: bad test file size %d (expected %d)\n",</div><div class='add'>+                test_stbuf.st_size, good_stbuf.st_size);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-frag_op_t frag_ops[LAST_OP] = {</div><div class='del'>-	[READ_OP]  = frag_read,</div><div class='del'>-	[WRITE_OP] = frag_write,</div><div class='del'>-	[TRUNC_OP] = frag_truncate</div><div class='del'>-};</div><div class='add'>+frag_op_t frag_ops[LAST_OP] = {[READ_OP] = frag_read,</div><div class='add'>+                               [WRITE_OP] = frag_write,</div><div class='add'>+                               [TRUNC_OP] = frag_truncate};</div><div class='ctx'> </div><div class='del'>-static void put_ctx(struct frag_ctx *ctx)</div><div class='add'>+static void</div><div class='add'>+put_ctx(struct frag_ctx *ctx)</div><div class='ctx'> {</div><div class='del'>-	if (ctx-&gt;test_buf)</div><div class='del'>-		free(ctx-&gt;test_buf);</div><div class='del'>-	if (ctx-&gt;good_buf)</div><div class='del'>-		free(ctx-&gt;good_buf);</div><div class='del'>-	if (ctx-&gt;content)</div><div class='del'>-		free(ctx-&gt;content);</div><div class='add'>+    if (ctx-&gt;test_buf)</div><div class='add'>+        free(ctx-&gt;test_buf);</div><div class='add'>+    if (ctx-&gt;good_buf)</div><div class='add'>+        free(ctx-&gt;good_buf);</div><div class='add'>+    if (ctx-&gt;content)</div><div class='add'>+        free(ctx-&gt;content);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	struct frag_ctx ctx;</div><div class='del'>-	char *test_filename = NULL;</div><div class='del'>-	char *good_filename = NULL;</div><div class='del'>-	int num_ops;</div><div class='del'>-	int max_file_size;</div><div class='add'>+    int i;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct frag_ctx ctx;</div><div class='add'>+    char *test_filename = NULL;</div><div class='add'>+    char *good_filename = NULL;</div><div class='add'>+    int num_ops;</div><div class='add'>+    int max_file_size;</div><div class='ctx'> </div><div class='del'>-	memset(&amp;ctx, 0, sizeof(ctx));</div><div class='del'>-	if (argc != 5) {</div><div class='del'>-                fprintf(stderr,</div><div class='del'>-			"usage: %s &lt;test-file-name&gt; &lt;good-file-name&gt; &lt;max-file-size&gt; &lt;number-of-operations&gt;\n",</div><div class='del'>-			argv[0]);</div><div class='del'>-		ret = -1;</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='del'>-	test_filename = argv[1];</div><div class='del'>-	good_filename = argv[2];</div><div class='del'>-	max_file_size = atoi(argv[3]);</div><div class='del'>-	if (max_file_size &gt; MAX_FILE_SIZE)</div><div class='del'>-		max_file_size = MAX_FILE_SIZE;</div><div class='del'>-	num_ops = atoi(argv[4]);</div><div class='del'>-	if (num_ops &gt; MAX_NUM_OPS)</div><div class='del'>-		num_ops = MAX_NUM_OPS;</div><div class='add'>+    memset(&amp;ctx, 0, sizeof(ctx));</div><div class='add'>+    if (argc != 5) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "usage: %s &lt;test-file-name&gt; &lt;good-file-name&gt; &lt;max-file-size&gt; "</div><div class='add'>+                "&lt;number-of-operations&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    test_filename = argv[1];</div><div class='add'>+    good_filename = argv[2];</div><div class='add'>+    max_file_size = atoi(argv[3]);</div><div class='add'>+    if (max_file_size &gt; MAX_FILE_SIZE)</div><div class='add'>+        max_file_size = MAX_FILE_SIZE;</div><div class='add'>+    num_ops = atoi(argv[4]);</div><div class='add'>+    if (num_ops &gt; MAX_NUM_OPS)</div><div class='add'>+        num_ops = MAX_NUM_OPS;</div><div class='ctx'> </div><div class='del'>-	ret = prepare_file(test_filename,</div><div class='del'>-			   &amp;ctx.test_fd, &amp;ctx.test_buf, max_file_size);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto exit;</div><div class='del'>-	ret = prepare_file(good_filename,</div><div class='del'>-			   &amp;ctx.good_fd, &amp;ctx.good_buf, max_file_size);</div><div class='del'>-	if (ret) {</div><div class='del'>-		if (close(ctx.test_fd) == -1)</div><div class='del'>-			perror("close test_buf failed");</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	ctx.content = malloc(max_file_size);</div><div class='del'>-	if (!ctx.content) {</div><div class='del'>-		perror("malloc failed");</div><div class='del'>-		goto close;</div><div class='del'>-	}</div><div class='del'>-	ctx.max_file_size = max_file_size;</div><div class='del'>-	for (i = 0; i &lt; max_file_size; i++)</div><div class='del'>-                ctx.content[i] = random() % 256;</div><div class='add'>+    ret = prepare_file(test_filename, &amp;ctx.test_fd, &amp;ctx.test_buf,</div><div class='add'>+                       max_file_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto exit;</div><div class='add'>+    ret = prepare_file(good_filename, &amp;ctx.good_fd, &amp;ctx.good_buf,</div><div class='add'>+                       max_file_size);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (close(ctx.test_fd) == -1)</div><div class='add'>+            perror("close test_buf failed");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    ctx.content = malloc(max_file_size);</div><div class='add'>+    if (!ctx.content) {</div><div class='add'>+        perror("malloc failed");</div><div class='add'>+        goto close;</div><div class='add'>+    }</div><div class='add'>+    ctx.max_file_size = max_file_size;</div><div class='add'>+    for (i = 0; i &lt; max_file_size; i++)</div><div class='add'>+        ctx.content[i] = random() % 256;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; num_ops; i++) {</div><div class='del'>-		ret = frag_ops[random() % LAST_OP](&amp;ctx,</div><div class='del'>-					random() % max_file_size, /* offset */</div><div class='del'>-					random() % max_file_size  /* count */);</div><div class='del'>-		if (ret)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='del'>- close:</div><div class='del'>-	if (close(ctx.test_fd) == -1)</div><div class='del'>-		perror("close test_fd failed");</div><div class='del'>-	if (close(ctx.good_fd) == -1)</div><div class='del'>-		perror("close good_fd failed");	</div><div class='del'>- exit:</div><div class='del'>-	put_ctx(&amp;ctx);</div><div class='del'>-	if (ret)</div><div class='del'>-		exit(1);</div><div class='del'>-	exit(0);</div><div class='add'>+    for (i = 0; i &lt; num_ops; i++) {</div><div class='add'>+        ret = frag_ops[random() % LAST_OP](</div><div class='add'>+            &amp;ctx, random() % max_file_size, /* offset */</div><div class='add'>+            random() % max_file_size /* count */);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+close:</div><div class='add'>+    if (close(ctx.test_fd) == -1)</div><div class='add'>+        perror("close test_fd failed");</div><div class='add'>+    if (close(ctx.good_fd) == -1)</div><div class='add'>+        perror("close good_fd failed");</div><div class='add'>+exit:</div><div class='add'>+    put_ctx(&amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        exit(1);</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='head'>diff --git a/tests/features/glfs-lease.c b/tests/features/glfs-lease.c<br/>index 535b3019a8c..f781f46c4ca 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/features/glfs-lease.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/features/glfs-lease.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/features/glfs-lease.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/features/glfs-lease.c</a></div><div class='hunk'>@@ -8,16 +8,20 @@</div><div class='ctx'> #include &lt;sys/stat.h&gt;</div><div class='ctx'> </div><div class='ctx'> /* Few rules:</div><div class='del'>- * 1. A client may have multiple lease keys, but a lease key cannot be shared by multiple clients.</div><div class='del'>- * 2. Lease key can be set before open, or in glfs_lease request. A lease key set like this is</div><div class='del'>- *    valid for the lifetime of the fd, i.e. a fd cannot have multiple lease key. But a lease key</div><div class='del'>- *    can be shared across multiple fds.</div><div class='add'>+ * 1. A client may have multiple lease keys, but a lease key cannot be shared by</div><div class='add'>+ * multiple clients.</div><div class='add'>+ * 2. Lease key can be set before open, or in glfs_lease request. A lease key</div><div class='add'>+ * set like this is valid for the lifetime of the fd, i.e. a fd cannot have</div><div class='add'>+ * multiple lease key. But a lease key can be shared across multiple fds.</div><div class='ctx'>  */</div><div class='ctx'> glfs_t *client1 = NULL, *client2 = NULL, *client3 = NULL, *client4 = NULL;</div><div class='ctx'> glfs_fd_t *fd1 = NULL, *fd2 = NULL, *fd3 = NULL, *fd4 = NULL;</div><div class='ctx'> FILE *log_file = NULL;</div><div class='del'>-char lid1[GLFS_LEASE_ID_SIZE] = "lid1-clnt1", lid2[GLFS_LEASE_ID_SIZE] = "lid2-clnt2";</div><div class='del'>-char lid3[GLFS_LEASE_ID_SIZE] = "lid3-clnt2", lid4[GLFS_LEASE_ID_SIZE] = {0,};</div><div class='add'>+char lid1[GLFS_LEASE_ID_SIZE] = "lid1-clnt1",</div><div class='add'>+     lid2[GLFS_LEASE_ID_SIZE] = "lid2-clnt2";</div><div class='add'>+char lid3[GLFS_LEASE_ID_SIZE] = "lid3-clnt2", lid4[GLFS_LEASE_ID_SIZE] = {</div><div class='add'>+                                                  0,</div><div class='add'>+};</div><div class='ctx'> char *volname = NULL, *glfs_log_file = NULL;</div><div class='ctx'> </div><div class='ctx'> #define MAX_CLIENTS 4</div><div class='hunk'>@@ -28,668 +32,686 @@ char *volname = NULL, *glfs_log_file = NULL;</div><div class='ctx'> #define NONE 0</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-recall_cbk (struct glfs_lease lease, void *data);</div><div class='add'>+recall_cbk(struct glfs_lease lease, void *data);</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-set_read_lease (glfs_fd_t *fd, char ld[])</div><div class='add'>+set_read_lease(glfs_fd_t *fd, char ld[])</div><div class='ctx'> {</div><div class='del'>-        struct glfs_lease lease = {0, };</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        memset (&amp;lease, 0, sizeof (lease));</div><div class='del'>-        lease.cmd = GLFS_SET_LEASE;</div><div class='del'>-        lease.lease_type = GLFS_RD_LEASE;</div><div class='del'>-        memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='del'>-        ret = glfs_lease (fd, &amp;lease, &amp;recall_cbk, fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\n    RD_LEASE failed with ret: %d (%s)",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        fprintf (log_file, "\n    Took RD_LEASE");</div><div class='del'>-        return ret;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    memset(&amp;lease, 0, sizeof(lease));</div><div class='add'>+    lease.cmd = GLFS_SET_LEASE;</div><div class='add'>+    lease.lease_type = GLFS_RD_LEASE;</div><div class='add'>+    memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='add'>+    ret = glfs_lease(fd, &amp;lease, &amp;recall_cbk, fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\n    RD_LEASE failed with ret: %d (%s)", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    fprintf(log_file, "\n    Took RD_LEASE");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-set_write_lease (glfs_fd_t *fd, char ld[])</div><div class='add'>+set_write_lease(glfs_fd_t *fd, char ld[])</div><div class='ctx'> {</div><div class='del'>-        struct glfs_lease lease = {0, };</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        memset (&amp;lease, 0, sizeof (lease));</div><div class='del'>-        lease.cmd = GLFS_SET_LEASE;</div><div class='del'>-        lease.lease_type = GLFS_RW_LEASE;</div><div class='del'>-        memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='del'>-        ret = glfs_lease (fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\n    RW_LEASE failed with ret: %d (%s)",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        fprintf (log_file, "\n    Took RW_LEASE");</div><div class='del'>-        return ret;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    memset(&amp;lease, 0, sizeof(lease));</div><div class='add'>+    lease.cmd = GLFS_SET_LEASE;</div><div class='add'>+    lease.lease_type = GLFS_RW_LEASE;</div><div class='add'>+    memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='add'>+    ret = glfs_lease(fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\n    RW_LEASE failed with ret: %d (%s)", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    fprintf(log_file, "\n    Took RW_LEASE");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-get_lease (glfs_fd_t *fd, char ld[])</div><div class='add'>+get_lease(glfs_fd_t *fd, char ld[])</div><div class='ctx'> {</div><div class='del'>-        struct glfs_lease lease = {0, };</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        memset (&amp;lease, 0, sizeof (lease));</div><div class='del'>-        lease.cmd = GLFS_GET_LEASE;</div><div class='del'>-        lease.lease_type = -1;</div><div class='del'>-        memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='del'>-        ret = glfs_lease (fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\n    GET_LEASE failed with ret: %d (%s)",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        if (lease.lease_type == GLFS_RD_LEASE)</div><div class='del'>-                fprintf (log_file, "\n    Esisting Lease: RD_LEASE");</div><div class='del'>-        else if (lease.lease_type == GLFS_RW_LEASE)</div><div class='del'>-                fprintf (log_file, "\n    Esisting Lease: RW_LEASE");</div><div class='del'>-        else if (lease.lease_type == 3)</div><div class='del'>-                fprintf (log_file, "\n    Esisting Lease: RD_LEASE|RW_LEASE");</div><div class='del'>-        else if (lease.lease_type == 0)</div><div class='del'>-                fprintf (log_file, "\n    Esisting Lease: NONE");</div><div class='del'>-        else</div><div class='del'>-                fprintf (log_file, "\n    Existing lease type:%d", lease.lease_type);</div><div class='del'>-        return lease.lease_type;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    memset(&amp;lease, 0, sizeof(lease));</div><div class='add'>+    lease.cmd = GLFS_GET_LEASE;</div><div class='add'>+    lease.lease_type = -1;</div><div class='add'>+    memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='add'>+    ret = glfs_lease(fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\n    GET_LEASE failed with ret: %d (%s)", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (lease.lease_type == GLFS_RD_LEASE)</div><div class='add'>+        fprintf(log_file, "\n    Esisting Lease: RD_LEASE");</div><div class='add'>+    else if (lease.lease_type == GLFS_RW_LEASE)</div><div class='add'>+        fprintf(log_file, "\n    Esisting Lease: RW_LEASE");</div><div class='add'>+    else if (lease.lease_type == 3)</div><div class='add'>+        fprintf(log_file, "\n    Esisting Lease: RD_LEASE|RW_LEASE");</div><div class='add'>+    else if (lease.lease_type == 0)</div><div class='add'>+        fprintf(log_file, "\n    Esisting Lease: NONE");</div><div class='add'>+    else</div><div class='add'>+        fprintf(log_file, "\n    Existing lease type:%d", lease.lease_type);</div><div class='add'>+    return lease.lease_type;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-unlk_write_lease (glfs_fd_t *fd, char ld[])</div><div class='add'>+unlk_write_lease(glfs_fd_t *fd, char ld[])</div><div class='ctx'> {</div><div class='del'>-        struct glfs_lease lease = {0, };</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        memset (&amp;lease, 0, sizeof (lease));</div><div class='del'>-        lease.cmd = GLFS_UNLK_LEASE;</div><div class='del'>-        lease.lease_type = GLFS_RW_LEASE;</div><div class='del'>-        memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='del'>-        ret = glfs_lease (fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\n    Unlock RW_LESAE failed with ret: %d (%s)",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        fprintf (log_file, "\n    Unlocked RW_LEASE");</div><div class='del'>-        return ret;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    memset(&amp;lease, 0, sizeof(lease));</div><div class='add'>+    lease.cmd = GLFS_UNLK_LEASE;</div><div class='add'>+    lease.lease_type = GLFS_RW_LEASE;</div><div class='add'>+    memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='add'>+    ret = glfs_lease(fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\n    Unlock RW_LESAE failed with ret: %d (%s)", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    fprintf(log_file, "\n    Unlocked RW_LEASE");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-unlk_read_lease (glfs_fd_t *fd, char ld[])</div><div class='add'>+unlk_read_lease(glfs_fd_t *fd, char ld[])</div><div class='ctx'> {</div><div class='del'>-        struct glfs_lease lease = {0, };</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        memset (&amp;lease, 0, sizeof (lease));</div><div class='del'>-        lease.cmd = GLFS_UNLK_LEASE;</div><div class='del'>-        lease.lease_type = GLFS_RD_LEASE;</div><div class='del'>-        memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='del'>-</div><div class='del'>-        ret = glfs_lease (fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\n    Unlock RD_LEASE failed with ret: %d (%s)",</div><div class='del'>-                                ret, strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        fprintf (log_file, "\n    Unlocked RD_LEASE");</div><div class='del'>-        return ret;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    memset(&amp;lease, 0, sizeof(lease));</div><div class='add'>+    lease.cmd = GLFS_UNLK_LEASE;</div><div class='add'>+    lease.lease_type = GLFS_RD_LEASE;</div><div class='add'>+    memcpy(&amp;lease.lease_id, ld, GLFS_LEASE_ID_SIZE);</div><div class='add'>+</div><div class='add'>+    ret = glfs_lease(fd, &amp;lease, &amp;recall_cbk, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\n    Unlock RD_LEASE failed with ret: %d (%s)", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    fprintf(log_file, "\n    Unlocked RD_LEASE");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> glfs_t *</div><div class='ctx'> setup_new_client(char *volname, char *log_fileile)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        glfs_t *fs = NULL;</div><div class='del'>-</div><div class='del'>-        fs = glfs_new (volname);</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (log_file, "\nglfs_new: returned NULL (%s)\n",</div><div class='del'>-                                 strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_volfile_server (fs, "tcp", "localhost", 24007);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\nglfs_set_volfile_server failed ret:%d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_set_logging (fs, log_fileile, 7);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\nglfs_set_logging failed with ret: %d (%s)\n",</div><div class='del'>-                                 ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fprintf (log_file, "\nglfs_init failed with ret: %d (%s)\n",</div><div class='del'>-                                  ret, strerror (errno));</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-        return fs;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    glfs_t *fs = NULL;</div><div class='add'>+</div><div class='add'>+    fs = glfs_new(volname);</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(log_file, "\nglfs_new: returned NULL (%s)\n", strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_volfile_server(fs, "tcp", "localhost", 24007);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\nglfs_set_volfile_server failed ret:%d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_set_logging(fs, log_fileile, 7);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\nglfs_set_logging failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fprintf(log_file, "\nglfs_init failed with ret: %d (%s)\n", ret,</div><div class='add'>+                strerror(errno));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    return fs;</div><div class='ctx'> error:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define OPEN(client, flags, fd, lease_id)                                                   \</div><div class='del'>-do {                                                                                        \</div><div class='del'>-        int ret_val = 0;                                                                    \</div><div class='del'>-        ret_val = glfs_setfsleaseid (lease_id);                                          \</div><div class='del'>-        if (ret_val) {                                                                      \</div><div class='del'>-                fprintf (log_file, "\nglfs_setfsleaseid failed with ret: %d (%s)\n",        \</div><div class='del'>-                                ret, strerror (errno));                                     \</div><div class='del'>-                return -1;                                                                  \</div><div class='del'>-        }                                                                                   \</div><div class='del'>-        fd = glfs_open (client, TEST_FILE, flags);                                          \</div><div class='del'>-        if (fd == NULL) {                                                                   \</div><div class='del'>-                fprintf (log_file, "\nglfs_open failed with ret: %d (%s)\n",                \</div><div class='del'>-                                ret, strerror (errno));                                     \</div><div class='del'>-                return -1;                                                                  \</div><div class='del'>-        }                                                                                   \</div><div class='del'>-} while (0)                                                                                 \</div><div class='del'>-</div><div class='del'>-#define VERIFY_RESULT(test_case, ret, value)                                                \</div><div class='del'>-do {                                                                                        \</div><div class='del'>-        if (ret != value) {                                                                 \</div><div class='del'>-                fprintf (log_file, "\n    Testcase %d failed, ret = %d, value=%d\n", test_case, ret, value); \</div><div class='del'>-                goto error; /*test unsuccessful*/                                           \</div><div class='del'>-        }                                                                                   \</div><div class='del'>-        fprintf (log_file, "\n    Testcase %d Succeeded\n", test_case);                       \</div><div class='del'>-} while (0)                                                                                 \</div><div class='add'>+#define OPEN(client, flags, fd, lease_id)                                      \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int ret_val = 0;                                                       \</div><div class='add'>+        ret_val = glfs_setfsleaseid(lease_id);                                 \</div><div class='add'>+        if (ret_val) {                                                         \</div><div class='add'>+            fprintf(log_file,                                                  \</div><div class='add'>+                    "\nglfs_setfsleaseid failed with ret: %d (%s)\n", ret,     \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            return -1;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        fd = glfs_open(client, TEST_FILE, flags);                              \</div><div class='add'>+        if (fd == NULL) {                                                      \</div><div class='add'>+            fprintf(log_file, "\nglfs_open failed with ret: %d (%s)\n", ret,   \</div><div class='add'>+                    strerror(errno));                                          \</div><div class='add'>+            return -1;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define VERIFY_RESULT(test_case, ret, value)                                   \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ret != value) {                                                    \</div><div class='add'>+            fprintf(log_file,                                                  \</div><div class='add'>+                    "\n    Testcase %d failed, ret = %d, value=%d\n",          \</div><div class='add'>+                    test_case, ret, value);                                    \</div><div class='add'>+            goto error; /*test unsuccessful*/                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        fprintf(log_file, "\n    Testcase %d Succeeded\n", test_case);         \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-recall_cbk (struct glfs_lease lease, void *data)</div><div class='add'>+recall_cbk(struct glfs_lease lease, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char ld[GLFS_LEASE_ID_SIZE] = "";</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char ld[GLFS_LEASE_ID_SIZE] = "";</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\nRECALL received on lease_id:(%s)", lease.lease_id);</div><div class='del'>-        memcpy (ld, lease.lease_id, GLFS_LEASE_ID_SIZE);</div><div class='del'>-        ret = unlk_write_lease ((glfs_fd_t *)data, ld);</div><div class='del'>-        VERIFY_RESULT (500, ret, SHUD_PASS);</div><div class='add'>+    fprintf(log_file, "\nRECALL received on lease_id:(%s)", lease.lease_id);</div><div class='add'>+    memcpy(ld, lease.lease_id, GLFS_LEASE_ID_SIZE);</div><div class='add'>+    ret = unlk_write_lease((glfs_fd_t *)data, ld);</div><div class='add'>+    VERIFY_RESULT(500, ret, SHUD_PASS);</div><div class='ctx'> error:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-testcase1_rd_lease ()</div><div class='add'>+testcase1_rd_lease()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	fprintf (log_file, "\n Basic test case for Read lease:");</div><div class='del'>-        /* Open fd on client 1 in RD mode */</div><div class='del'>-        OPEN (client1, O_RDONLY, fd1, lid1);</div><div class='del'>-        ret = set_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_FAIL);</div><div class='add'>+    fprintf(log_file, "\n Basic test case for Read lease:");</div><div class='add'>+    /* Open fd on client 1 in RD mode */</div><div class='add'>+    OPEN(client1, O_RDONLY, fd1, lid1);</div><div class='add'>+    ret = set_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_FAIL);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (3, ret, GLFS_RD_LEASE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(3, ret, GLFS_RD_LEASE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_FAIL);</div><div class='add'>+    ret = unlk_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_FAIL);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (6, ret, NONE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(6, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (7, ret, SHUD_FAIL);</div><div class='add'>+    ret = unlk_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(7, ret, SHUD_FAIL);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (8, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(8, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase2_wr_lease ()</div><div class='add'>+testcase2_wr_lease()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for Write lease:");</div><div class='del'>-        /* Open fd on client 1 in WRonly mode */</div><div class='del'>-        OPEN (client1, O_WRONLY, fd1, lid1);</div><div class='del'>-        ret = set_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_FAIL);</div><div class='add'>+    fprintf(log_file, "\n Basic test case for Write lease:");</div><div class='add'>+    /* Open fd on client 1 in WRonly mode */</div><div class='add'>+    OPEN(client1, O_WRONLY, fd1, lid1);</div><div class='add'>+    ret = set_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_FAIL);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_FAIL);</div><div class='add'>+    ret = unlk_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_FAIL);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (3, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(3, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (4, ret, GLFS_RW_LEASE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(4, ret, GLFS_RW_LEASE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (6, ret, NONE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(6, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (7, ret, SHUD_FAIL);</div><div class='add'>+    ret = unlk_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(7, ret, SHUD_FAIL);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (8, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(8, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase3_rd_wr_lease ()</div><div class='add'>+testcase3_rd_wr_lease()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for Read Write lease:");</div><div class='del'>-        /* Open fd on client 1 in WRonly mode */</div><div class='del'>-        OPEN (client1, O_RDWR, fd1, lid1);</div><div class='del'>-        ret = set_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_PASS);</div><div class='add'>+    fprintf(log_file, "\n Basic test case for Read Write lease:");</div><div class='add'>+    /* Open fd on client 1 in WRonly mode */</div><div class='add'>+    OPEN(client1, O_RDWR, fd1, lid1);</div><div class='add'>+    ret = set_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (3, ret, (GLFS_RW_LEASE | GLFS_RD_LEASE));</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(3, ret, (GLFS_RW_LEASE | GLFS_RD_LEASE));</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (5, ret, GLFS_RD_LEASE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(5, ret, GLFS_RD_LEASE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (6, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(6, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (7, ret, NONE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(7, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (8, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(8, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase4_rd_lease_multi_clnt ()</div><div class='add'>+testcase4_rd_lease_multi_clnt()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        glfs_fd_t *fd2      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for multi client Read lease:");</div><div class='add'>+    fprintf(log_file, "\n Basic test case for multi client Read lease:");</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 1 in RD mode */</div><div class='del'>-        OPEN (client1, O_RDONLY, fd1, lid1);</div><div class='add'>+    /* Open fd on client 1 in RD mode */</div><div class='add'>+    OPEN(client1, O_RDONLY, fd1, lid1);</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 2 in RW mode */</div><div class='del'>-        OPEN (client2, O_RDONLY, fd2, lid2);</div><div class='add'>+    /* Open fd on client 2 in RW mode */</div><div class='add'>+    OPEN(client2, O_RDONLY, fd2, lid2);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (3, ret, GLFS_RD_LEASE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(3, ret, GLFS_RD_LEASE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (6, ret, NONE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(6, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (7, ret, NONE);</div><div class='add'>+    ret = get_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(7, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (8, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(8, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        VERIFY_RESULT (9, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    VERIFY_RESULT(9, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase5_openfd_multi_lid ()</div><div class='add'>+testcase5_openfd_multi_lid()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        glfs_fd_t *fd2      = NULL;</div><div class='del'>-        glfs_fd_t *fd3      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    glfs_fd_t *fd3 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for multi lid openfd check:");</div><div class='add'>+    fprintf(log_file, "\n Basic test case for multi lid openfd check:");</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 1 in RD mode */</div><div class='del'>-        OPEN (client1, O_RDONLY, fd1, lid1);</div><div class='add'>+    /* Open fd on client 1 in RD mode */</div><div class='add'>+    OPEN(client1, O_RDONLY, fd1, lid1);</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 2 in RW mode */</div><div class='del'>-        OPEN (client2, O_RDWR, fd2, lid2);</div><div class='del'>-        OPEN (client2, O_RDWR, fd3, lid2);</div><div class='add'>+    /* Open fd on client 2 in RW mode */</div><div class='add'>+    OPEN(client2, O_RDWR, fd2, lid2);</div><div class='add'>+    OPEN(client2, O_RDWR, fd3, lid2);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_FAIL); /*As there are other openfds in WR mode from diff lid*/</div><div class='add'>+    ret = set_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(</div><div class='add'>+        1, ret,</div><div class='add'>+        SHUD_FAIL); /*As there are other openfds in WR mode from diff lid*/</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_FAIL); /*As thers is another fd in RD mode from diff lid */</div><div class='add'>+    ret = set_write_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(</div><div class='add'>+        2, ret, SHUD_FAIL); /*As thers is another fd in RD mode from diff lid */</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (3, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(3, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_write_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        VERIFY_RESULT (6, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    VERIFY_RESULT(6, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd3);</div><div class='del'>-        VERIFY_RESULT (7, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd3);</div><div class='add'>+    VERIFY_RESULT(7, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase6_openfd_same_lid ()</div><div class='add'>+testcase6_openfd_same_lid()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        glfs_fd_t *fd2      = NULL;</div><div class='del'>-        glfs_fd_t *fd3      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    glfs_fd_t *fd3 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for same lid openfd check:");</div><div class='add'>+    fprintf(log_file, "\n Basic test case for same lid openfd check:");</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 2 in RW mode */</div><div class='del'>-        OPEN (client1, O_RDWR, fd1, lid2);</div><div class='del'>-        OPEN (client1, O_RDWR, fd2, lid2);</div><div class='add'>+    /* Open fd on client 2 in RW mode */</div><div class='add'>+    OPEN(client1, O_RDWR, fd1, lid2);</div><div class='add'>+    OPEN(client1, O_RDWR, fd2, lid2);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd1, lid2);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd1, lid2);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd1, lid2);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_write_lease(fd1, lid2);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_write_lease (fd2, lid2);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_write_lease(fd2, lid2);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (6, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(6, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        VERIFY_RESULT (7, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    VERIFY_RESULT(7, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase7_rd_multi_lid ()</div><div class='add'>+testcase7_rd_multi_lid()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        glfs_fd_t *fd2      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for multi lease id Read lease:");</div><div class='add'>+    fprintf(log_file, "\n Basic test case for multi lease id Read lease:");</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 1 in RD mode */</div><div class='del'>-        OPEN (client2, O_RDONLY, fd1, lid2);</div><div class='add'>+    /* Open fd on client 1 in RD mode */</div><div class='add'>+    OPEN(client2, O_RDONLY, fd1, lid2);</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 2 in RD mode */</div><div class='del'>-        OPEN (client2, O_RDONLY, fd2, lid3);</div><div class='add'>+    /* Open fd on client 2 in RD mode */</div><div class='add'>+    OPEN(client2, O_RDONLY, fd2, lid3);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd1, lid2);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd1, lid2);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd2, lid3);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd2, lid3);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid2);</div><div class='del'>-        VERIFY_RESULT (3, ret, GLFS_RD_LEASE);</div><div class='add'>+    ret = get_lease(fd1, lid2);</div><div class='add'>+    VERIFY_RESULT(3, ret, GLFS_RD_LEASE);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd1, lid2);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd1, lid2);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = unlk_read_lease (fd2, lid3);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = unlk_read_lease(fd2, lid3);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid2);</div><div class='del'>-        VERIFY_RESULT (6, ret, NONE);</div><div class='add'>+    ret = get_lease(fd1, lid2);</div><div class='add'>+    VERIFY_RESULT(6, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd2, lid3);</div><div class='del'>-        VERIFY_RESULT (7, ret, NONE);</div><div class='add'>+    ret = get_lease(fd2, lid3);</div><div class='add'>+    VERIFY_RESULT(7, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (8, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(8, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        VERIFY_RESULT (9, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    VERIFY_RESULT(9, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase8_client_disconnect ()</div><div class='add'>+testcase8_client_disconnect()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        glfs_fd_t *fd2      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for client disconnect cleanup");</div><div class='add'>+    fprintf(log_file, "\n Basic test case for client disconnect cleanup");</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 1 in RD mode */</div><div class='del'>-        OPEN (client1, O_RDWR, fd1, lid1);</div><div class='add'>+    /* Open fd on client 1 in RD mode */</div><div class='add'>+    OPEN(client1, O_RDWR, fd1, lid1);</div><div class='ctx'> </div><div class='del'>-        ret = set_read_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_PASS);</div><div class='add'>+    ret = set_read_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (2, ret, GLFS_RD_LEASE);</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(2, ret, GLFS_RD_LEASE);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (3, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(3, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (4, ret, (GLFS_RD_LEASE | GLFS_RW_LEASE));</div><div class='add'>+    ret = get_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(4, ret, (GLFS_RD_LEASE | GLFS_RW_LEASE));</div><div class='ctx'> </div><div class='del'>-        ret = glfs_fini (client1);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_fini(client1);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 2 in RD mode */</div><div class='del'>-        OPEN (client2, O_RDONLY, fd2, lid3);</div><div class='add'>+    /* Open fd on client 2 in RD mode */</div><div class='add'>+    OPEN(client2, O_RDONLY, fd2, lid3);</div><div class='ctx'> </div><div class='del'>-        ret = get_lease (fd2, lid3);</div><div class='del'>-        VERIFY_RESULT (6, ret, NONE);</div><div class='add'>+    ret = get_lease(fd2, lid3);</div><div class='add'>+    VERIFY_RESULT(6, ret, NONE);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        VERIFY_RESULT (7, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    VERIFY_RESULT(7, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        client1 = setup_new_client (volname, glfs_log_file);</div><div class='add'>+    client1 = setup_new_client(volname, glfs_log_file);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase9_recall_conflict_lease ()</div><div class='add'>+testcase9_recall_conflict_lease()</div><div class='ctx'> {</div><div class='del'>-        struct glfs_object *obj = NULL;</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='del'>-        struct glfs_lease lease = {0, };</div><div class='del'>-</div><div class='del'>-        fprintf (log_file, "\n Basic test case for conflicting lease causing recall");</div><div class='del'>-</div><div class='del'>-        memset (&amp;lease, 0, sizeof (lease));</div><div class='del'>-        lease.cmd = GLFS_SET_LEASE;</div><div class='del'>-        lease.lease_type = GLFS_RD_LEASE;</div><div class='del'>-        memcpy(&amp;lease.lease_id, lid2, GLFS_LEASE_ID_SIZE);</div><div class='del'>-        /* Open fd on client 1 in RD mode */</div><div class='del'>-        OPEN (client1, O_RDWR, fd1, lid1);</div><div class='del'>-        ret = set_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_PASS);</div><div class='del'>-</div><div class='del'>-        obj = glfs_h_lookupat (client2, NULL, TEST_FILE, NULL, 0);</div><div class='del'>-        ret = glfs_h_lease (client2, obj, &amp;lease);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_FAIL);</div><div class='del'>-</div><div class='del'>-        ret = unlk_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (5, ret, SHUD_PASS);</div><div class='del'>-</div><div class='del'>-        sleep (3);</div><div class='del'>-        ret = glfs_h_close (obj);</div><div class='del'>-        VERIFY_RESULT (3, ret, SHUD_PASS);</div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (4, ret, SHUD_PASS);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    struct glfs_object *obj = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct glfs_lease lease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    fprintf(log_file,</div><div class='add'>+            "\n Basic test case for conflicting lease causing recall");</div><div class='add'>+</div><div class='add'>+    memset(&amp;lease, 0, sizeof(lease));</div><div class='add'>+    lease.cmd = GLFS_SET_LEASE;</div><div class='add'>+    lease.lease_type = GLFS_RD_LEASE;</div><div class='add'>+    memcpy(&amp;lease.lease_id, lid2, GLFS_LEASE_ID_SIZE);</div><div class='add'>+    /* Open fd on client 1 in RD mode */</div><div class='add'>+    OPEN(client1, O_RDWR, fd1, lid1);</div><div class='add'>+    ret = set_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_PASS);</div><div class='add'>+</div><div class='add'>+    obj = glfs_h_lookupat(client2, NULL, TEST_FILE, NULL, 0);</div><div class='add'>+    ret = glfs_h_lease(client2, obj, &amp;lease);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_FAIL);</div><div class='add'>+</div><div class='add'>+    ret = unlk_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(5, ret, SHUD_PASS);</div><div class='add'>+</div><div class='add'>+    sleep(3);</div><div class='add'>+    ret = glfs_h_close(obj);</div><div class='add'>+    VERIFY_RESULT(3, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(4, ret, SHUD_PASS);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-testcase10_recall_open_conflict ()</div><div class='add'>+testcase10_recall_open_conflict()</div><div class='ctx'> {</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        glfs_fd_t *fd2      = NULL;</div><div class='del'>-        int        ret      = 0;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    glfs_fd_t *fd2 = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        fprintf (log_file, "\n Basic test case for conflicting open causing recall");</div><div class='add'>+    fprintf(log_file, "\n Basic test case for conflicting open causing recall");</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 1 in RW mode */</div><div class='del'>-        OPEN (client1, O_RDWR, fd1, lid1);</div><div class='add'>+    /* Open fd on client 1 in RW mode */</div><div class='add'>+    OPEN(client1, O_RDWR, fd1, lid1);</div><div class='ctx'> </div><div class='del'>-        ret = set_write_lease (fd1, lid1);</div><div class='del'>-        VERIFY_RESULT (1, ret, SHUD_PASS);</div><div class='add'>+    ret = set_write_lease(fd1, lid1);</div><div class='add'>+    VERIFY_RESULT(1, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        /* Open fd on client 1 in RW mode */</div><div class='del'>-        OPEN (client2, O_RDWR, fd2, lid2);</div><div class='add'>+    /* Open fd on client 1 in RW mode */</div><div class='add'>+    OPEN(client2, O_RDWR, fd2, lid2);</div><div class='ctx'> </div><div class='del'>-        /* TODO: Check for recall cbk functionality */</div><div class='del'>-        ret = glfs_close (fd1);</div><div class='del'>-        VERIFY_RESULT (2, ret, SHUD_PASS);</div><div class='add'>+    /* TODO: Check for recall cbk functionality */</div><div class='add'>+    ret = glfs_close(fd1);</div><div class='add'>+    VERIFY_RESULT(2, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = glfs_close (fd2);</div><div class='del'>-        VERIFY_RESULT (3, ret, SHUD_PASS);</div><div class='add'>+    ret = glfs_close(fd2);</div><div class='add'>+    VERIFY_RESULT(3, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int        ret      = 0;</div><div class='del'>-        int        i        = 0;</div><div class='del'>-        glfs_fd_t *fd       = NULL;</div><div class='del'>-        glfs_fd_t *fd1      = NULL;</div><div class='del'>-        char      *topdir   = "topdir", *filename = "file1";</div><div class='del'>-        char      *buf      = NULL;</div><div class='del'>-        int        x        = 0;</div><div class='del'>-        ssize_t    xattr_size = -1;</div><div class='del'>-</div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                                "Expect following args %s &lt;Vol&gt; &lt;glfs client log file&gt; &lt;testcase log file&gt;\n"</div><div class='del'>-                                , argv[0]);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    glfs_fd_t *fd = NULL;</div><div class='add'>+    glfs_fd_t *fd1 = NULL;</div><div class='add'>+    char *topdir = "topdir", *filename = "file1";</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    int x = 0;</div><div class='add'>+    ssize_t xattr_size = -1;</div><div class='add'>+</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Expect following args %s &lt;Vol&gt; &lt;glfs client log file&gt; "</div><div class='add'>+                "&lt;testcase log file&gt;\n",</div><div class='add'>+                argv[0]);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        log_file = fopen (argv[3], "w");</div><div class='del'>-	if (!log_file)</div><div class='del'>-		goto error;</div><div class='add'>+    log_file = fopen(argv[3], "w");</div><div class='add'>+    if (!log_file)</div><div class='add'>+        goto error;</div><div class='ctx'> </div><div class='del'>-        volname = argv[1];</div><div class='del'>-        glfs_log_file = argv[2];</div><div class='add'>+    volname = argv[1];</div><div class='add'>+    glfs_log_file = argv[2];</div><div class='ctx'> </div><div class='del'>-        /* Setup 3 clients */</div><div class='del'>-        client1 = setup_new_client (volname, glfs_log_file);</div><div class='del'>-        client2 = setup_new_client (volname, glfs_log_file);</div><div class='del'>-        client3 = setup_new_client (volname, glfs_log_file);</div><div class='add'>+    /* Setup 3 clients */</div><div class='add'>+    client1 = setup_new_client(volname, glfs_log_file);</div><div class='add'>+    client2 = setup_new_client(volname, glfs_log_file);</div><div class='add'>+    client3 = setup_new_client(volname, glfs_log_file);</div><div class='ctx'> </div><div class='del'>-        ret = testcase1_rd_lease ();</div><div class='del'>-        VERIFY_RESULT (101, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase1_rd_lease();</div><div class='add'>+    VERIFY_RESULT(101, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase2_wr_lease ();</div><div class='del'>-        VERIFY_RESULT (102, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase2_wr_lease();</div><div class='add'>+    VERIFY_RESULT(102, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase3_rd_wr_lease ();</div><div class='del'>-        VERIFY_RESULT (103, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase3_rd_wr_lease();</div><div class='add'>+    VERIFY_RESULT(103, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase4_rd_lease_multi_clnt ();</div><div class='del'>-        VERIFY_RESULT (104, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase4_rd_lease_multi_clnt();</div><div class='add'>+    VERIFY_RESULT(104, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase5_openfd_multi_lid ();</div><div class='del'>-        VERIFY_RESULT (105, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase5_openfd_multi_lid();</div><div class='add'>+    VERIFY_RESULT(105, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase6_openfd_same_lid ();</div><div class='del'>-        VERIFY_RESULT (106, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase6_openfd_same_lid();</div><div class='add'>+    VERIFY_RESULT(106, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase7_rd_multi_lid ();</div><div class='del'>-        VERIFY_RESULT (107, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase7_rd_multi_lid();</div><div class='add'>+    VERIFY_RESULT(107, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-	ret = testcase8_client_disconnect ();</div><div class='del'>-        VERIFY_RESULT (108, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase8_client_disconnect();</div><div class='add'>+    VERIFY_RESULT(108, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase9_recall_conflict_lease ();</div><div class='del'>-        VERIFY_RESULT (109, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase9_recall_conflict_lease();</div><div class='add'>+    VERIFY_RESULT(109, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        ret = testcase10_recall_open_conflict ();</div><div class='del'>-        VERIFY_RESULT (110, ret, SHUD_PASS);</div><div class='add'>+    ret = testcase10_recall_open_conflict();</div><div class='add'>+    VERIFY_RESULT(110, ret, SHUD_PASS);</div><div class='ctx'> </div><div class='del'>-        glfs_fini (client1);</div><div class='del'>-        glfs_fini (client2);</div><div class='del'>-        glfs_fini (client3);</div><div class='add'>+    glfs_fini(client1);</div><div class='add'>+    glfs_fini(client2);</div><div class='add'>+    glfs_fini(client3);</div><div class='ctx'> </div><div class='del'>-	fclose (log_file);</div><div class='del'>-        return 0;</div><div class='add'>+    fclose(log_file);</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/features/mandatory-lock-forced.c b/tests/features/mandatory-lock-forced.c<br/>index f37206845f1..4028d6c6eaf 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/features/mandatory-lock-forced.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/features/mandatory-lock-forced.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/features/mandatory-lock-forced.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/features/mandatory-lock-forced.c</a></div><div class='hunk'>@@ -6,133 +6,138 @@</div><div class='ctx'> #include &lt;string.h&gt;</div><div class='ctx'> #include &lt;sys/wait.h&gt;</div><div class='ctx'> </div><div class='del'>-#define LOG_ERR(func, err) do {                                                \</div><div class='del'>-        fprintf (stderr, "%s : returned error (%s)\n", func, strerror(err));   \</div><div class='del'>-        exit (err);                                                            \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-int       fd;</div><div class='del'>-struct    flock lock;</div><div class='del'>-char      *buf = "ten bytes!";</div><div class='del'>-char      *fname = "/mnt/glusterfs/0/mand.lock";</div><div class='del'>-int       open_flags, child, err, status, blocked = 0;</div><div class='del'>-</div><div class='del'>-int do_child (char *argv[]) {</div><div class='del'>-        /* Initialize file open flags */</div><div class='del'>-        if (strcmp (argv[2], "BLOCK") == 0)</div><div class='del'>-                open_flags = O_RDWR;</div><div class='del'>-        else if (strcmp (argv[2], "TRUNC") == 0)</div><div class='del'>-                open_flags = O_RDWR | O_TRUNC | O_NONBLOCK;</div><div class='del'>-        else if (strcmp (argv[2], "NONE") == 0)</div><div class='del'>-                open_flags = O_RDWR | O_NONBLOCK;</div><div class='del'>-        else</div><div class='del'>-                LOG_ERR ("Invalid option:", EINVAL);</div><div class='del'>-</div><div class='del'>-        /* Open the file */</div><div class='del'>-        fd = open (fname, open_flags);</div><div class='del'>-        if (fd == -1)</div><div class='del'>-                LOG_ERR ("Child open", errno);</div><div class='del'>-</div><div class='del'>-        /* Perform the file operation*/</div><div class='del'>-        if (strcmp (argv[3], "READ") == 0) {</div><div class='del'>-                buf = NULL;</div><div class='del'>-                err = read (fd, buf, 10);</div><div class='del'>-                if (err == -1)</div><div class='del'>-                        LOG_ERR ("Child read", errno);</div><div class='del'>-        } else if (strcmp (argv[3], "WRITE") == 0) {</div><div class='del'>-                err = write (fd, buf, 10);</div><div class='del'>-                if (err == -1)</div><div class='del'>-                        LOG_ERR ("Child write", errno);</div><div class='del'>-        } else if (strcmp (argv[3], "FTRUNCATE") == 0) {</div><div class='del'>-                err = ftruncate (fd, 5);</div><div class='del'>-                if (err)</div><div class='del'>-                        LOG_ERR ("Child ftruncate", errno);</div><div class='del'>-        } else</div><div class='del'>-                LOG_ERR ("Invalid operation:", EINVAL);</div><div class='del'>-</div><div class='del'>-        /* Close child fd */</div><div class='del'>-        err = close (fd);</div><div class='add'>+#define LOG_ERR(func, err)                                                     \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        fprintf(stderr, "%s : returned error (%s)\n", func, strerror(err));    \</div><div class='add'>+        exit(err);                                                             \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+int fd;</div><div class='add'>+struct flock lock;</div><div class='add'>+char *buf = "ten bytes!";</div><div class='add'>+char *fname = "/mnt/glusterfs/0/mand.lock";</div><div class='add'>+int open_flags, child, err, status, blocked = 0;</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+do_child(char *argv[])</div><div class='add'>+{</div><div class='add'>+    /* Initialize file open flags */</div><div class='add'>+    if (strcmp(argv[2], "BLOCK") == 0)</div><div class='add'>+        open_flags = O_RDWR;</div><div class='add'>+    else if (strcmp(argv[2], "TRUNC") == 0)</div><div class='add'>+        open_flags = O_RDWR | O_TRUNC | O_NONBLOCK;</div><div class='add'>+    else if (strcmp(argv[2], "NONE") == 0)</div><div class='add'>+        open_flags = O_RDWR | O_NONBLOCK;</div><div class='add'>+    else</div><div class='add'>+        LOG_ERR("Invalid option:", EINVAL);</div><div class='add'>+</div><div class='add'>+    /* Open the file */</div><div class='add'>+    fd = open(fname, open_flags);</div><div class='add'>+    if (fd == -1)</div><div class='add'>+        LOG_ERR("Child open", errno);</div><div class='add'>+</div><div class='add'>+    /* Perform the file operation*/</div><div class='add'>+    if (strcmp(argv[3], "READ") == 0) {</div><div class='add'>+        buf = NULL;</div><div class='add'>+        err = read(fd, buf, 10);</div><div class='add'>+        if (err == -1)</div><div class='add'>+            LOG_ERR("Child read", errno);</div><div class='add'>+    } else if (strcmp(argv[3], "WRITE") == 0) {</div><div class='add'>+        err = write(fd, buf, 10);</div><div class='add'>+        if (err == -1)</div><div class='add'>+            LOG_ERR("Child write", errno);</div><div class='add'>+    } else if (strcmp(argv[3], "FTRUNCATE") == 0) {</div><div class='add'>+        err = ftruncate(fd, 5);</div><div class='ctx'>         if (err)</div><div class='del'>-                LOG_ERR ("Child close", errno);</div><div class='add'>+            LOG_ERR("Child ftruncate", errno);</div><div class='add'>+    } else</div><div class='add'>+        LOG_ERR("Invalid operation:", EINVAL);</div><div class='ctx'> </div><div class='del'>-        /* Exit success */</div><div class='del'>-        exit (0);</div><div class='add'>+    /* Close child fd */</div><div class='add'>+    err = close(fd);</div><div class='add'>+    if (err)</div><div class='add'>+        LOG_ERR("Child close", errno);</div><div class='add'>+</div><div class='add'>+    /* Exit success */</div><div class='add'>+    exit(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int main (int argc, char *argv[]) {</div><div class='del'>-        if (argc &lt; 4) {</div><div class='del'>-                fprintf (stderr, "Wrong usage: Use as ./mandatory-lock "</div><div class='del'>-                                "&lt;RD_LCK/WR_LCK&gt; &lt;BLOCK/TRUNC/NONE&gt; "</div><div class='del'>-                                "&lt;READ/WRITE/FTRUNCATE\n");</div><div class='del'>-                exit(EINVAL);</div><div class='add'>+int</div><div class='add'>+main(int argc, char *argv[])</div><div class='add'>+{</div><div class='add'>+    if (argc &lt; 4) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Wrong usage: Use as ./mandatory-lock "</div><div class='add'>+                "&lt;RD_LCK/WR_LCK&gt; &lt;BLOCK/TRUNC/NONE&gt; "</div><div class='add'>+                "&lt;READ/WRITE/FTRUNCATE\n");</div><div class='add'>+        exit(EINVAL);</div><div class='add'>+    }</div><div class='add'>+    /* Create an empty lock file */</div><div class='add'>+    fd = open(fname, O_CREAT | O_RDWR, 0755);</div><div class='add'>+    if (fd == -1)</div><div class='add'>+        LOG_ERR("Parent create", errno);</div><div class='add'>+</div><div class='add'>+    /* Determine the type of lock */</div><div class='add'>+    if (strcmp(argv[1], "RD_LCK") == 0)</div><div class='add'>+        lock.l_type = F_RDLCK;</div><div class='add'>+    else if (strcmp(argv[1], "WR_LCK") == 0)</div><div class='add'>+        lock.l_type = F_WRLCK;</div><div class='add'>+    else</div><div class='add'>+        LOG_ERR("Parent lock type", EINVAL);</div><div class='add'>+</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0L;</div><div class='add'>+    lock.l_len = 0L;</div><div class='add'>+</div><div class='add'>+    /* Let parent acquire the initial lock */</div><div class='add'>+    err = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+    if (err)</div><div class='add'>+        LOG_ERR("Parent lock", errno);</div><div class='add'>+</div><div class='add'>+    /* Now fork a child */</div><div class='add'>+    child = fork();</div><div class='add'>+    if (child == 0)</div><div class='add'>+        /* Perform the child operations */</div><div class='add'>+        do_child(argv);</div><div class='add'>+    else {</div><div class='add'>+        /* If blocking mode, then sleep for 2 seconds</div><div class='add'>+         * and wait for the child */</div><div class='add'>+        if (strcmp(argv[2], "NONE") != 0) {</div><div class='add'>+            sleep(2);</div><div class='add'>+            if (waitpid(child, &amp;status, WNOHANG) == 0)</div><div class='add'>+                blocked = 1;</div><div class='add'>+            /* Release the parent lock so that the</div><div class='add'>+             * child can terminate */</div><div class='add'>+            lock.l_type = F_UNLCK;</div><div class='add'>+            err = fcntl(fd, F_SETLK, &amp;lock);</div><div class='add'>+            if (err)</div><div class='add'>+                LOG_ERR("Parent unlock", errno);</div><div class='ctx'>         }</div><div class='del'>-        /* Create an empty lock file */</div><div class='del'>-        fd = open (fname, O_CREAT | O_RDWR, 0755);</div><div class='del'>-        if (fd == -1)</div><div class='del'>-                LOG_ERR ("Parent create", errno);</div><div class='del'>-</div><div class='del'>-        /* Determine the type of lock */</div><div class='del'>-        if (strcmp (argv[1], "RD_LCK") == 0)</div><div class='del'>-                lock.l_type = F_RDLCK;</div><div class='del'>-        else if (strcmp (argv[1], "WR_LCK") == 0)</div><div class='del'>-                lock.l_type = F_WRLCK;</div><div class='del'>-        else</div><div class='del'>-                LOG_ERR ("Parent lock type", EINVAL);</div><div class='del'>-</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start = 0L;</div><div class='del'>-        lock.l_len = 0L;</div><div class='del'>-</div><div class='del'>-        /* Let parent acquire the initial lock */</div><div class='del'>-        err = fcntl (fd, F_SETLK, &amp;lock);</div><div class='add'>+</div><div class='add'>+        /* Wait for child to finish */</div><div class='add'>+        waitpid(child, &amp;status, 0);</div><div class='add'>+</div><div class='add'>+        /* Close the parent fd */</div><div class='add'>+        err = close(fd);</div><div class='ctx'>         if (err)</div><div class='del'>-                LOG_ERR ("Parent lock", errno);</div><div class='del'>-</div><div class='del'>-        /* Now fork a child */</div><div class='del'>-        child = fork ();</div><div class='del'>-        if (child == 0)</div><div class='del'>-                /* Perform the child operations */</div><div class='del'>-                do_child (argv);</div><div class='del'>-        else {</div><div class='del'>-                /* If blocking mode, then sleep for 2 seconds</div><div class='del'>-                 * and wait for the child */</div><div class='del'>-                if (strcmp (argv[2], "NONE") != 0) {</div><div class='del'>-                        sleep (2);</div><div class='del'>-                        if (waitpid (child, &amp;status, WNOHANG) == 0)</div><div class='del'>-                                blocked = 1;</div><div class='del'>-                        /* Release the parent lock so that the</div><div class='del'>-                         * child can terminate */</div><div class='del'>-                        lock.l_type = F_UNLCK;</div><div class='del'>-                        err = fcntl (fd, F_SETLK, &amp;lock);</div><div class='del'>-                        if (err)</div><div class='del'>-                                LOG_ERR ("Parent unlock", errno);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Wait for child to finish */</div><div class='del'>-                waitpid (child, &amp;status, 0);</div><div class='del'>-</div><div class='del'>-                /* Close the parent fd */</div><div class='del'>-                err = close (fd);</div><div class='del'>-                if (err)</div><div class='del'>-                        LOG_ERR ("Parent close", errno);</div><div class='del'>-</div><div class='del'>-                /* Remove the lock file*/</div><div class='del'>-                err = unlink (fname);</div><div class='del'>-                if (err)</div><div class='del'>-                        LOG_ERR ("Parent unlink", errno);</div><div class='del'>-</div><div class='del'>-                /* If not blocked, exit with child exit status*/</div><div class='del'>-                errno = WEXITSTATUS(status);</div><div class='del'>-</div><div class='del'>-                /* If blocked, exit with corresponding</div><div class='del'>-                 * error code */</div><div class='del'>-                if (blocked)</div><div class='del'>-                        errno = EWOULDBLOCK;</div><div class='del'>-</div><div class='del'>-                if (errno != 0)</div><div class='del'>-                        printf ("%s\n", strerror(errno));</div><div class='del'>-</div><div class='del'>-                exit (errno);</div><div class='add'>+            LOG_ERR("Parent close", errno);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+        /* Remove the lock file*/</div><div class='add'>+        err = unlink(fname);</div><div class='add'>+        if (err)</div><div class='add'>+            LOG_ERR("Parent unlink", errno);</div><div class='add'>+</div><div class='add'>+        /* If not blocked, exit with child exit status*/</div><div class='add'>+        errno = WEXITSTATUS(status);</div><div class='add'>+</div><div class='add'>+        /* If blocked, exit with corresponding</div><div class='add'>+         * error code */</div><div class='add'>+        if (blocked)</div><div class='add'>+            errno = EWOULDBLOCK;</div><div class='add'>+</div><div class='add'>+        if (errno != 0)</div><div class='add'>+            printf("%s\n", strerror(errno));</div><div class='add'>+</div><div class='add'>+        exit(errno);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/utils/arequal-checksum.c b/tests/utils/arequal-checksum.c<br/>index 6ab68f38db8..b51a054162b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/utils/arequal-checksum.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/utils/arequal-checksum.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/utils/arequal-checksum.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/utils/arequal-checksum.c</a></div><div class='hunk'>@@ -41,605 +41,593 @@</div><div class='ctx'> int debug = 0;</div><div class='ctx'> </div><div class='ctx'> typedef struct {</div><div class='del'>-        char test_directory[4096];</div><div class='del'>-        char **ignored_directory;</div><div class='del'>-        unsigned int directories_ignored;</div><div class='add'>+    char test_directory[4096];</div><div class='add'>+    char **ignored_directory;</div><div class='add'>+    unsigned int directories_ignored;</div><div class='ctx'> } arequal_config_t;</div><div class='ctx'> </div><div class='ctx'> static arequal_config_t arequal_config;</div><div class='ctx'> </div><div class='ctx'> static error_t</div><div class='del'>-arequal_parse_opts (int key, char *arg, struct argp_state *_state);</div><div class='add'>+arequal_parse_opts(int key, char *arg, struct argp_state *_state);</div><div class='ctx'> </div><div class='ctx'> static struct argp_option arequal_options[] = {</div><div class='del'>-        { "ignore", 'i', "IGNORED", 0,</div><div class='del'>-          "entry in the given path to be ignored"},</div><div class='del'>-        { "path", 'p', "PATH", 0, "path where arequal has to be run"},</div><div class='del'>-        {0, 0, 0, 0, 0}</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define DBG(fmt ...) do {                       \</div><div class='del'>-                if (debug) {                    \</div><div class='del'>-                        fprintf (stderr, "D "); \</div><div class='del'>-                        fprintf (stderr, fmt);  \</div><div class='del'>-                }                               \</div><div class='del'>-        } while (0)</div><div class='add'>+    {"ignore", 'i', "IGNORED", 0, "entry in the given path to be ignored"},</div><div class='add'>+    {"path", 'p', "PATH", 0, "path where arequal has to be run"},</div><div class='add'>+    {0, 0, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+#define DBG(fmt...)                                                            \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (debug) {                                                           \</div><div class='add'>+            fprintf(stderr, "D ");                                             \</div><div class='add'>+            fprintf(stderr, fmt);                                              \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-add_to_list (char *arg);</div><div class='add'>+add_to_list(char *arg);</div><div class='ctx'> void</div><div class='del'>-get_absolute_path (char directory[], char *arg);</div><div class='add'>+get_absolute_path(char directory[], char *arg);</div><div class='ctx'> </div><div class='del'>-static int roof(int a, int b)</div><div class='add'>+static int</div><div class='add'>+roof(int a, int b)</div><div class='ctx'> {</div><div class='del'>-        return ((((a)+(b)-1)/((b)?(b):1))*(b));</div><div class='add'>+    return ((((a) + (b)-1) / ((b) ? (b) : 1)) * (b));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-add_to_list (char *arg)</div><div class='add'>+add_to_list(char *arg)</div><div class='ctx'> {</div><div class='del'>-        char *string = NULL;</div><div class='del'>-        int index = 0;</div><div class='add'>+    char *string = NULL;</div><div class='add'>+    int index = 0;</div><div class='ctx'> </div><div class='del'>-        index = arequal_config.directories_ignored - 1;</div><div class='del'>-        string = strdup (arg);</div><div class='add'>+    index = arequal_config.directories_ignored - 1;</div><div class='add'>+    string = strdup(arg);</div><div class='ctx'> </div><div class='del'>-        if (!arequal_config.ignored_directory) {</div><div class='del'>-                arequal_config.ignored_directory = calloc (1, sizeof (char *));</div><div class='del'>-        } else</div><div class='del'>-                arequal_config.ignored_directory =</div><div class='del'>-                        realloc (arequal_config.ignored_directory,</div><div class='del'>-                                 sizeof (char *) * (index+1));</div><div class='add'>+    if (!arequal_config.ignored_directory) {</div><div class='add'>+        arequal_config.ignored_directory = calloc(1, sizeof(char *));</div><div class='add'>+    } else</div><div class='add'>+        arequal_config.ignored_directory = realloc(</div><div class='add'>+            arequal_config.ignored_directory, sizeof(char *) * (index + 1));</div><div class='ctx'> </div><div class='del'>-        arequal_config.ignored_directory[index] = string;</div><div class='add'>+    arequal_config.ignored_directory[index] = string;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static error_t</div><div class='del'>-arequal_parse_opts (int key, char *arg, struct argp_state *_state)</div><div class='add'>+arequal_parse_opts(int key, char *arg, struct argp_state *_state)</div><div class='ctx'> {</div><div class='del'>-        switch (key) {</div><div class='del'>-        case 'i':</div><div class='del'>-        {</div><div class='del'>-                arequal_config.directories_ignored++;</div><div class='del'>-                add_to_list (arg);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-        case 'p':</div><div class='del'>-        {</div><div class='del'>-                if (arg[0] == '/')</div><div class='del'>-                        strcpy (arequal_config.test_directory, arg);</div><div class='del'>-                else</div><div class='del'>-                        get_absolute_path (arequal_config.test_directory, arg);</div><div class='del'>-</div><div class='del'>-                if (arequal_config.test_directory</div><div class='del'>-                    [strlen(arequal_config.test_directory) - 1] == '/')</div><div class='del'>-                        arequal_config.test_directory</div><div class='del'>-                                [strlen(arequal_config.test_directory) - 1] = '\0';</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='add'>+    switch (key) {</div><div class='add'>+        case 'i': {</div><div class='add'>+            arequal_config.directories_ignored++;</div><div class='add'>+            add_to_list(arg);</div><div class='add'>+        } break;</div><div class='add'>+        case 'p': {</div><div class='add'>+            if (arg[0] == '/')</div><div class='add'>+                strcpy(arequal_config.test_directory, arg);</div><div class='add'>+            else</div><div class='add'>+                get_absolute_path(arequal_config.test_directory, arg);</div><div class='add'>+</div><div class='add'>+            if (arequal_config</div><div class='add'>+                    .test_directory[strlen(arequal_config.test_directory) -</div><div class='add'>+                                    1] == '/')</div><div class='add'>+                arequal_config</div><div class='add'>+                    .test_directory[strlen(arequal_config.test_directory) - 1] =</div><div class='add'>+                    '\0';</div><div class='add'>+        } break;</div><div class='ctx'> </div><div class='ctx'>         case ARGP_KEY_NO_ARGS:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_KEY_ARG:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case ARGP_KEY_END:</div><div class='del'>-                if (_state-&gt;argc == 1) {</div><div class='del'>-                       argp_usage (_state);</div><div class='del'>-                }</div><div class='add'>+            if (_state-&gt;argc == 1) {</div><div class='add'>+                argp_usage(_state);</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-get_absolute_path (char directory[], char *arg)</div><div class='add'>+get_absolute_path(char directory[], char *arg)</div><div class='ctx'> {</div><div class='del'>-        char   cwd[4096] = {0,};</div><div class='del'>-</div><div class='del'>-        if (getcwd (cwd, sizeof (cwd)) == NULL)</div><div class='del'>-                printf ("some error in getting cwd\n");</div><div class='del'>-</div><div class='del'>-        if (strcmp (arg, ".") != 0) {</div><div class='del'>-                if (cwd[strlen(cwd)] != '/')</div><div class='del'>-                        cwd[strlen (cwd)] = '/';</div><div class='del'>-                strcat (cwd, arg);</div><div class='del'>-        }</div><div class='del'>-        strcpy (directory, cwd);</div><div class='add'>+    char cwd[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (getcwd(cwd, sizeof(cwd)) == NULL)</div><div class='add'>+        printf("some error in getting cwd\n");</div><div class='add'>+</div><div class='add'>+    if (strcmp(arg, ".") != 0) {</div><div class='add'>+        if (cwd[strlen(cwd)] != '/')</div><div class='add'>+            cwd[strlen(cwd)] = '/';</div><div class='add'>+        strcat(cwd, arg);</div><div class='add'>+    }</div><div class='add'>+    strcpy(directory, cwd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct argp argp = {</div><div class='del'>-        arequal_options,</div><div class='del'>-        arequal_parse_opts,</div><div class='del'>-        "",</div><div class='del'>-        "arequal - Tool which calculates the checksum of all the entries"</div><div class='del'>-        "present in a given directory"</div><div class='del'>-};</div><div class='add'>+    arequal_options, arequal_parse_opts, "",</div><div class='add'>+    "arequal - Tool which calculates the checksum of all the entries"</div><div class='add'>+    "present in a given directory"};</div><div class='ctx'> </div><div class='ctx'> /* All this runs in single thread, hence using 'global' variables */</div><div class='ctx'> </div><div class='del'>-unsigned long long     avg_uid_file    = 0;</div><div class='del'>-unsigned long long     avg_uid_dir     = 0;</div><div class='del'>-unsigned long long     avg_uid_symlink = 0;</div><div class='del'>-unsigned long long     avg_uid_other   = 0;</div><div class='add'>+unsigned long long avg_uid_file = 0;</div><div class='add'>+unsigned long long avg_uid_dir = 0;</div><div class='add'>+unsigned long long avg_uid_symlink = 0;</div><div class='add'>+unsigned long long avg_uid_other = 0;</div><div class='ctx'> </div><div class='del'>-unsigned long long     avg_gid_file    = 0;</div><div class='del'>-unsigned long long     avg_gid_dir     = 0;</div><div class='del'>-unsigned long long     avg_gid_symlink = 0;</div><div class='del'>-unsigned long long     avg_gid_other   = 0;</div><div class='add'>+unsigned long long avg_gid_file = 0;</div><div class='add'>+unsigned long long avg_gid_dir = 0;</div><div class='add'>+unsigned long long avg_gid_symlink = 0;</div><div class='add'>+unsigned long long avg_gid_other = 0;</div><div class='ctx'> </div><div class='del'>-unsigned long long     avg_mode_file    = 0;</div><div class='del'>-unsigned long long     avg_mode_dir     = 0;</div><div class='del'>-unsigned long long     avg_mode_symlink = 0;</div><div class='del'>-unsigned long long     avg_mode_other   = 0;</div><div class='add'>+unsigned long long avg_mode_file = 0;</div><div class='add'>+unsigned long long avg_mode_dir = 0;</div><div class='add'>+unsigned long long avg_mode_symlink = 0;</div><div class='add'>+unsigned long long avg_mode_other = 0;</div><div class='ctx'> </div><div class='ctx'> unsigned long long global_ctime_checksum = 0;</div><div class='ctx'> </div><div class='add'>+unsigned long long count_dir = 0;</div><div class='add'>+unsigned long long count_file = 0;</div><div class='add'>+unsigned long long count_symlink = 0;</div><div class='add'>+unsigned long long count_other = 0;</div><div class='ctx'> </div><div class='del'>-unsigned long long      count_dir        = 0;</div><div class='del'>-unsigned long long      count_file       = 0;</div><div class='del'>-unsigned long long      count_symlink    = 0;</div><div class='del'>-unsigned long long      count_other      = 0;</div><div class='add'>+unsigned long long checksum_file1 = 0;</div><div class='add'>+unsigned long long checksum_file2 = 0;</div><div class='add'>+unsigned long long checksum_dir = 0;</div><div class='add'>+unsigned long long checksum_symlink = 0;</div><div class='add'>+unsigned long long checksum_other = 0;</div><div class='ctx'> </div><div class='add'>+unsigned long long</div><div class='add'>+checksum_path(const char *path)</div><div class='add'>+{</div><div class='add'>+    unsigned long long csum = 0;</div><div class='add'>+    unsigned long long *nums = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+    int cnt = 0;</div><div class='ctx'> </div><div class='del'>-unsigned long long      checksum_file1   = 0;</div><div class='del'>-unsigned long long      checksum_file2   = 0;</div><div class='del'>-unsigned long long      checksum_dir     = 0;</div><div class='del'>-unsigned long long      checksum_symlink = 0;</div><div class='del'>-unsigned long long      checksum_other   = 0;</div><div class='add'>+    len = roof(strlen(path), sizeof(csum));</div><div class='add'>+    cnt = len / sizeof(csum);</div><div class='ctx'> </div><div class='add'>+    nums = __builtin_alloca(len);</div><div class='add'>+    memset(nums, 0, len);</div><div class='add'>+    strcpy((char *)nums, path);</div><div class='ctx'> </div><div class='del'>-unsigned long long</div><div class='del'>-checksum_path (const char *path)</div><div class='del'>-{</div><div class='del'>-        unsigned long long   csum = 0;</div><div class='del'>-        unsigned long long  *nums = 0;</div><div class='del'>-        int                  len = 0;</div><div class='del'>-        int                  cnt = 0;</div><div class='del'>-</div><div class='del'>-        len = roof (strlen (path), sizeof (csum));</div><div class='del'>-        cnt = len / sizeof (csum);</div><div class='del'>-</div><div class='del'>-        nums = __builtin_alloca (len);</div><div class='del'>-        memset (nums, 0, len);</div><div class='del'>-        strcpy ((char *)nums, path);</div><div class='del'>-</div><div class='del'>-        while (cnt) {</div><div class='del'>-                csum ^= *nums;</div><div class='del'>-                nums++;</div><div class='del'>-                cnt--;</div><div class='del'>-        }</div><div class='add'>+    while (cnt) {</div><div class='add'>+        csum ^= *nums;</div><div class='add'>+        nums++;</div><div class='add'>+        cnt--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return csum;</div><div class='add'>+    return csum;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-checksum_md5 (const char *path, const struct stat *sb)</div><div class='add'>+checksum_md5(const char *path, const struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        uint64_t    this_data_checksum = 0;</div><div class='del'>-        FILE       *filep              = NULL;</div><div class='del'>-        char        *cmd               = NULL;</div><div class='del'>-        char        strvalue[17]       = {0,};</div><div class='del'>-        int         ret                = -1;</div><div class='del'>-        int         len                = 0;</div><div class='del'>-        const char  *pos               = NULL;</div><div class='del'>-        char        *cpos              = NULL;</div><div class='del'>-</div><div class='del'>-        /* Have to escape single-quotes in filename.</div><div class='del'>-         * First, calculate the size of the buffer I'll need.</div><div class='del'>-         */</div><div class='del'>-        for (pos = path; *pos; pos++) {</div><div class='del'>-                if ( *pos == '\'' )</div><div class='del'>-                        len += 4;</div><div class='del'>-                else</div><div class='del'>-                        len += 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cmd = malloc(sizeof(char) * (len + 20));</div><div class='del'>-        cmd[0] = '\0';</div><div class='del'>-</div><div class='del'>-        /* Now, build the command with single quotes escaped. */</div><div class='del'>-</div><div class='del'>-        cpos = cmd;</div><div class='add'>+    uint64_t this_data_checksum = 0;</div><div class='add'>+    FILE *filep = NULL;</div><div class='add'>+    char *cmd = NULL;</div><div class='add'>+    char strvalue[17] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int len = 0;</div><div class='add'>+    const char *pos = NULL;</div><div class='add'>+    char *cpos = NULL;</div><div class='add'>+</div><div class='add'>+    /* Have to escape single-quotes in filename.</div><div class='add'>+     * First, calculate the size of the buffer I'll need.</div><div class='add'>+     */</div><div class='add'>+    for (pos = path; *pos; pos++) {</div><div class='add'>+        if (*pos == '\'')</div><div class='add'>+            len += 4;</div><div class='add'>+        else</div><div class='add'>+            len += 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cmd = malloc(sizeof(char) * (len + 20));</div><div class='add'>+    cmd[0] = '\0';</div><div class='add'>+</div><div class='add'>+    /* Now, build the command with single quotes escaped. */</div><div class='add'>+</div><div class='add'>+    cpos = cmd;</div><div class='ctx'> #if defined(linux)</div><div class='del'>-        strcpy(cpos, "md5sum '");</div><div class='del'>-        cpos += 8;</div><div class='add'>+    strcpy(cpos, "md5sum '");</div><div class='add'>+    cpos += 8;</div><div class='ctx'> #elif defined(__NetBSD__)</div><div class='del'>-        strcpy(cpos, "md5 -n '");</div><div class='del'>-        cpos += 8;</div><div class='add'>+    strcpy(cpos, "md5 -n '");</div><div class='add'>+    cpos += 8;</div><div class='ctx'> #elif defined(__FreeBSD__) || defined(__APPLE__)</div><div class='del'>-        strcpy(cpos, "md5 -q '");</div><div class='del'>-        cpos += 8;</div><div class='add'>+    strcpy(cpos, "md5 -q '");</div><div class='add'>+    cpos += 8;</div><div class='ctx'> #else</div><div class='ctx'> #error "Please add system-specific md5 command"</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /* Add the file path, with every single quotes replaced with this sequence:</div><div class='del'>-         * '\''</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        for (pos = path; *pos; pos++) {</div><div class='del'>-                if ( *pos == '\'' ) {</div><div class='del'>-                        strcpy(cpos, "'\\''");</div><div class='del'>-                        cpos += 4;</div><div class='del'>-                } else {</div><div class='del'>-                        *cpos = *pos;</div><div class='del'>-                        cpos++;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Add on the trailing single-quote and null-terminate. */</div><div class='del'>-        strcpy(cpos, "'");</div><div class='del'>-</div><div class='del'>-        filep = popen (cmd, "r");</div><div class='del'>-        if (!filep) {</div><div class='del'>-                perror (path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fread (strvalue, sizeof (char), 16, filep) != 16) {</div><div class='del'>-                fprintf (stderr, "%s: short read\n", path);</div><div class='del'>-                goto out;</div><div class='add'>+    /* Add the file path, with every single quotes replaced with this sequence:</div><div class='add'>+     * '\''</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    for (pos = path; *pos; pos++) {</div><div class='add'>+        if (*pos == '\'') {</div><div class='add'>+            strcpy(cpos, "'\\''");</div><div class='add'>+            cpos += 4;</div><div class='add'>+        } else {</div><div class='add'>+            *cpos = *pos;</div><div class='add'>+            cpos++;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        this_data_checksum = strtoull (strvalue, NULL, 16);</div><div class='del'>-        if (-1 == this_data_checksum) {</div><div class='del'>-                fprintf (stderr, "%s: %s\n", strvalue, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        checksum_file1 ^= this_data_checksum;</div><div class='del'>-</div><div class='del'>-        if (fread (strvalue, sizeof (char), 16, filep) != 16) {</div><div class='del'>-                fprintf (stderr, "%s: short read\n", path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this_data_checksum = strtoull (strvalue, NULL, 16);</div><div class='del'>-        if (-1 == this_data_checksum) {</div><div class='del'>-                fprintf (stderr, "%s: %s\n", strvalue, strerror (errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        checksum_file2 ^= this_data_checksum;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Add on the trailing single-quote and null-terminate. */</div><div class='add'>+    strcpy(cpos, "'");</div><div class='add'>+</div><div class='add'>+    filep = popen(cmd, "r");</div><div class='add'>+    if (!filep) {</div><div class='add'>+        perror(path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fread(strvalue, sizeof(char), 16, filep) != 16) {</div><div class='add'>+        fprintf(stderr, "%s: short read\n", path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this_data_checksum = strtoull(strvalue, NULL, 16);</div><div class='add'>+    if (-1 == this_data_checksum) {</div><div class='add'>+        fprintf(stderr, "%s: %s\n", strvalue, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    checksum_file1 ^= this_data_checksum;</div><div class='add'>+</div><div class='add'>+    if (fread(strvalue, sizeof(char), 16, filep) != 16) {</div><div class='add'>+        fprintf(stderr, "%s: short read\n", path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this_data_checksum = strtoull(strvalue, NULL, 16);</div><div class='add'>+    if (-1 == this_data_checksum) {</div><div class='add'>+        fprintf(stderr, "%s: %s\n", strvalue, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    checksum_file2 ^= this_data_checksum;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (filep)</div><div class='del'>-                pclose (filep);</div><div class='add'>+    if (filep)</div><div class='add'>+        pclose(filep);</div><div class='ctx'> </div><div class='del'>-        if (cmd)</div><div class='del'>-                free(cmd);</div><div class='add'>+    if (cmd)</div><div class='add'>+        free(cmd);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-checksum_filenames (const char *path, const struct stat *sb)</div><div class='add'>+checksum_filenames(const char *path, const struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        DIR                *dirp = NULL;</div><div class='del'>-        struct dirent      *entry = NULL;</div><div class='del'>-        unsigned long long  csum = 0;</div><div class='del'>-        int                 i = 0;</div><div class='del'>-        int                 found = 0;</div><div class='del'>-</div><div class='del'>-        dirp = opendir (path);</div><div class='del'>-        if (!dirp) {</div><div class='del'>-                perror (path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        errno = 0;</div><div class='del'>-        while ((entry = readdir (dirp))) {</div><div class='del'>-                /* do not calculate the checksum of the entries which user has</div><div class='del'>-                   told to ignore and proceed to other siblings.*/</div><div class='del'>-                if (arequal_config.ignored_directory) {</div><div class='del'>-                        for (i = 0;i &lt; arequal_config.directories_ignored;i++) {</div><div class='del'>-                                if ((strcmp (entry-&gt;d_name,</div><div class='del'>-                                             arequal_config.ignored_directory[i])</div><div class='del'>-                                     == 0)) {</div><div class='del'>-                                        found = 1;</div><div class='del'>-                                        DBG ("ignoring the entry %s\n",</div><div class='del'>-                                             entry-&gt;d_name);</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        if (found == 1) {</div><div class='del'>-                                found = 0;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+    DIR *dirp = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    unsigned long long csum = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int found = 0;</div><div class='add'>+</div><div class='add'>+    dirp = opendir(path);</div><div class='add'>+    if (!dirp) {</div><div class='add'>+        perror(path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    errno = 0;</div><div class='add'>+    while ((entry = readdir(dirp))) {</div><div class='add'>+        /* do not calculate the checksum of the entries which user has</div><div class='add'>+           told to ignore and proceed to other siblings.*/</div><div class='add'>+        if (arequal_config.ignored_directory) {</div><div class='add'>+            for (i = 0; i &lt; arequal_config.directories_ignored; i++) {</div><div class='add'>+                if ((strcmp(entry-&gt;d_name,</div><div class='add'>+                            arequal_config.ignored_directory[i]) == 0)) {</div><div class='add'>+                    found = 1;</div><div class='add'>+                    DBG("ignoring the entry %s\n", entry-&gt;d_name);</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                csum = checksum_path (entry-&gt;d_name);</div><div class='del'>-                checksum_dir ^= csum;</div><div class='add'>+            }</div><div class='add'>+            if (found == 1) {</div><div class='add'>+                found = 0;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        csum = checksum_path(entry-&gt;d_name);</div><div class='add'>+        checksum_dir ^= csum;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (errno) {</div><div class='del'>-                perror (path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (errno) {</div><div class='add'>+        perror(path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dirp)</div><div class='del'>-                closedir (dirp);</div><div class='add'>+    if (dirp)</div><div class='add'>+        closedir(dirp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-process_file (const char *path, const struct stat *sb)</div><div class='add'>+process_file(const char *path, const struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        int    ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        count_file++;</div><div class='add'>+    count_file++;</div><div class='ctx'> </div><div class='del'>-        avg_uid_file ^= sb-&gt;st_uid;</div><div class='del'>-        avg_gid_file ^= sb-&gt;st_gid;</div><div class='del'>-        avg_mode_file ^= sb-&gt;st_mode;</div><div class='add'>+    avg_uid_file ^= sb-&gt;st_uid;</div><div class='add'>+    avg_gid_file ^= sb-&gt;st_gid;</div><div class='add'>+    avg_mode_file ^= sb-&gt;st_mode;</div><div class='ctx'> </div><div class='del'>-        ret = checksum_md5 (path, sb);</div><div class='add'>+    ret = checksum_md5(path, sb);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-process_dir (const char *path, const struct stat *sb)</div><div class='add'>+process_dir(const char *path, const struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        unsigned long long csum = 0;</div><div class='add'>+    unsigned long long csum = 0;</div><div class='ctx'> </div><div class='del'>-        count_dir++;</div><div class='add'>+    count_dir++;</div><div class='ctx'> </div><div class='del'>-        avg_uid_dir ^= sb-&gt;st_uid;</div><div class='del'>-        avg_gid_dir ^= sb-&gt;st_gid;</div><div class='del'>-        avg_mode_dir ^= sb-&gt;st_mode;</div><div class='add'>+    avg_uid_dir ^= sb-&gt;st_uid;</div><div class='add'>+    avg_gid_dir ^= sb-&gt;st_gid;</div><div class='add'>+    avg_mode_dir ^= sb-&gt;st_mode;</div><div class='ctx'> </div><div class='del'>-        csum = checksum_filenames (path, sb);</div><div class='add'>+    csum = checksum_filenames(path, sb);</div><div class='ctx'> </div><div class='del'>-        checksum_dir ^= csum;</div><div class='add'>+    checksum_dir ^= csum;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-process_symlink (const char *path, const struct stat *sb)</div><div class='add'>+process_symlink(const char *path, const struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        int                ret = 0;</div><div class='del'>-        char               buf[4096] = {0, };</div><div class='del'>-        unsigned long long csum = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char buf[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    unsigned long long csum = 0;</div><div class='ctx'> </div><div class='del'>-        count_symlink++;</div><div class='add'>+    count_symlink++;</div><div class='ctx'> </div><div class='del'>-        avg_uid_symlink ^= sb-&gt;st_uid;</div><div class='del'>-        avg_gid_symlink ^= sb-&gt;st_gid;</div><div class='del'>-        avg_mode_symlink ^= sb-&gt;st_mode;</div><div class='add'>+    avg_uid_symlink ^= sb-&gt;st_uid;</div><div class='add'>+    avg_gid_symlink ^= sb-&gt;st_gid;</div><div class='add'>+    avg_mode_symlink ^= sb-&gt;st_mode;</div><div class='ctx'> </div><div class='del'>-        ret = readlink (path, buf, 4096);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                perror (path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = readlink(path, buf, 4096);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        perror(path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DBG ("readlink (%s) =&gt; %s\n", path, buf);</div><div class='add'>+    DBG("readlink (%s) =&gt; %s\n", path, buf);</div><div class='ctx'> </div><div class='del'>-        csum = checksum_path (buf);</div><div class='add'>+    csum = checksum_path(buf);</div><div class='ctx'> </div><div class='del'>-        DBG ("checksum_path (%s) =&gt; %llx\n", buf, csum);</div><div class='add'>+    DBG("checksum_path (%s) =&gt; %llx\n", buf, csum);</div><div class='ctx'> </div><div class='del'>-        checksum_symlink ^= csum;</div><div class='add'>+    checksum_symlink ^= csum;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-process_other (const char *path, const struct stat *sb)</div><div class='add'>+process_other(const char *path, const struct stat *sb)</div><div class='ctx'> {</div><div class='del'>-        count_other++;</div><div class='add'>+    count_other++;</div><div class='ctx'> </div><div class='del'>-        avg_uid_other ^= sb-&gt;st_uid;</div><div class='del'>-        avg_gid_other ^= sb-&gt;st_gid;</div><div class='del'>-        avg_mode_other ^= sb-&gt;st_mode;</div><div class='add'>+    avg_uid_other ^= sb-&gt;st_uid;</div><div class='add'>+    avg_gid_other ^= sb-&gt;st_gid;</div><div class='add'>+    avg_mode_other ^= sb-&gt;st_mode;</div><div class='ctx'> </div><div class='del'>-        checksum_other ^= sb-&gt;st_rdev;</div><div class='add'>+    checksum_other ^= sb-&gt;st_rdev;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> ignore_entry(const char *bname, const char *dname)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-	for (i  = 0; i &lt; arequal_config.directories_ignored; i++) {</div><div class='del'>-		if (strcmp(bname, arequal_config.ignored_directory[i]) == 0 &amp;&amp;</div><div class='del'>-                    strncmp(arequal_config.test_directory, dname,</div><div class='del'>-                            strlen(arequal_config.test_directory)) == 0)</div><div class='del'>-                        return 1;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; arequal_config.directories_ignored; i++) {</div><div class='add'>+        if (strcmp(bname, arequal_config.ignored_directory[i]) == 0 &amp;&amp;</div><div class='add'>+            strncmp(arequal_config.test_directory, dname,</div><div class='add'>+                    strlen(arequal_config.test_directory)) == 0)</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-process_entry (const char *path, const struct stat *sb,</div><div class='del'>-               int typeflag, struct FTW *ftwbuf)</div><div class='add'>+process_entry(const char *path, const struct stat *sb, int typeflag,</div><div class='add'>+              struct FTW *ftwbuf)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *name = NULL;</div><div class='del'>-        char *bname = NULL;</div><div class='del'>-        char *dname = NULL;</div><div class='del'>-        int  i = 0;</div><div class='del'>-</div><div class='del'>-        /* The if condition below helps in ignoring some directories in</div><div class='del'>-           the given path. If the name of the entry is one of the directory</div><div class='del'>-           names that the user told to ignore, then that directory will not</div><div class='del'>-           be processed and will return FTW_SKIP_SUBTREE to nftw which will</div><div class='del'>-           not crawl this directory and move on to other siblings.</div><div class='del'>-           Note that for nftw to recognize FTW_SKIP_TREE, FTW_ACTIONRETVAL</div><div class='del'>-           should be passed as an argument to nftw.</div><div class='del'>-</div><div class='del'>-           This mainly helps in calculating the checksum of network filesystems</div><div class='del'>-           (client-server), where the server might have some hidden directories</div><div class='del'>-           for managing the filesystem. So to calculate the sanity of filesystem</div><div class='del'>-           one has to get the checksum of the client and then the export directory</div><div class='del'>-           of server by telling arequal to ignore some of the directories which</div><div class='del'>-           are not part of the namespace.</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        if (arequal_config.ignored_directory) {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    char *bname = NULL;</div><div class='add'>+    char *dname = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    /* The if condition below helps in ignoring some directories in</div><div class='add'>+       the given path. If the name of the entry is one of the directory</div><div class='add'>+       names that the user told to ignore, then that directory will not</div><div class='add'>+       be processed and will return FTW_SKIP_SUBTREE to nftw which will</div><div class='add'>+       not crawl this directory and move on to other siblings.</div><div class='add'>+       Note that for nftw to recognize FTW_SKIP_TREE, FTW_ACTIONRETVAL</div><div class='add'>+       should be passed as an argument to nftw.</div><div class='add'>+</div><div class='add'>+       This mainly helps in calculating the checksum of network filesystems</div><div class='add'>+       (client-server), where the server might have some hidden directories</div><div class='add'>+       for managing the filesystem. So to calculate the sanity of filesystem</div><div class='add'>+       one has to get the checksum of the client and then the export directory</div><div class='add'>+       of server by telling arequal to ignore some of the directories which</div><div class='add'>+       are not part of the namespace.</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    if (arequal_config.ignored_directory) {</div><div class='ctx'> #ifndef FTW_SKIP_SUBTREE</div><div class='del'>-                char *cp;</div><div class='del'>-</div><div class='del'>-                name = strdup (path);</div><div class='del'>-                dname = dirname (name);</div><div class='del'>-</div><div class='del'>-                for (cp = strtok(name, "/"); cp; cp = strtok(NULL, "/")) {</div><div class='del'>-                        if (ignore_entry(cp, dname)) {</div><div class='del'>-                                DBG ("ignoring %s\n", path);</div><div class='del'>-                                if (name)</div><div class='del'>-                                        free (name);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-#else /* FTW_SKIP_SUBTREE */</div><div class='del'>-                name = strdup (path);</div><div class='del'>-</div><div class='del'>-                name[strlen(name)] = '\0';</div><div class='del'>-</div><div class='del'>-                bname = strrchr (name, '/');</div><div class='del'>-                if (bname)</div><div class='del'>-                        bname++;</div><div class='del'>-</div><div class='del'>-                dname = dirname (name);</div><div class='del'>-                if (ignore_entry(bname, dname)) {</div><div class='del'>-                                DBG ("ignoring %s\n", bname);</div><div class='del'>-                                ret = FTW_SKIP_SUBTREE;</div><div class='del'>-                                if (name)</div><div class='del'>-                                        free (name);</div><div class='del'>-                                return ret;</div><div class='del'>-                }</div><div class='del'>-#endif /* FTW_SKIP_SUBTREE */</div><div class='add'>+        char *cp;</div><div class='add'>+</div><div class='add'>+        name = strdup(path);</div><div class='add'>+        dname = dirname(name);</div><div class='add'>+</div><div class='add'>+        for (cp = strtok(name, "/"); cp; cp = strtok(NULL, "/")) {</div><div class='add'>+            if (ignore_entry(cp, dname)) {</div><div class='add'>+                DBG("ignoring %s\n", path);</div><div class='add'>+                if (name)</div><div class='add'>+                    free(name);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+#else  /* FTW_SKIP_SUBTREE */</div><div class='add'>+        name = strdup(path);</div><div class='add'>+</div><div class='add'>+        name[strlen(name)] = '\0';</div><div class='add'>+</div><div class='add'>+        bname = strrchr(name, '/');</div><div class='add'>+        if (bname)</div><div class='add'>+            bname++;</div><div class='add'>+</div><div class='add'>+        dname = dirname(name);</div><div class='add'>+        if (ignore_entry(bname, dname)) {</div><div class='add'>+            DBG("ignoring %s\n", bname);</div><div class='add'>+            ret = FTW_SKIP_SUBTREE;</div><div class='add'>+            if (name)</div><div class='add'>+                free(name);</div><div class='add'>+            return ret;</div><div class='add'>+        }</div><div class='add'>+#endif /* FTW_SKIP_SUBTREE */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DBG ("processing entry %s\n", path);</div><div class='add'>+    DBG("processing entry %s\n", path);</div><div class='ctx'> </div><div class='del'>-        switch ((S_IFMT &amp; sb-&gt;st_mode)) {</div><div class='add'>+    switch ((S_IFMT &amp; sb-&gt;st_mode)) {</div><div class='ctx'>         case S_IFDIR:</div><div class='del'>-                ret = process_dir (path, sb);</div><div class='del'>-                break;</div><div class='add'>+            ret = process_dir(path, sb);</div><div class='add'>+            break;</div><div class='ctx'>         case S_IFREG:</div><div class='del'>-                ret = process_file (path, sb);</div><div class='del'>-                break;</div><div class='add'>+            ret = process_file(path, sb);</div><div class='add'>+            break;</div><div class='ctx'>         case S_IFLNK:</div><div class='del'>-                ret = process_symlink (path, sb);</div><div class='del'>-                break;</div><div class='add'>+            ret = process_symlink(path, sb);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = process_other (path, sb);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = process_other(path, sb);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (name)</div><div class='del'>-                free (name);</div><div class='del'>-        return ret;</div><div class='add'>+    if (name)</div><div class='add'>+        free(name);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-display_counts (FILE *fp)</div><div class='add'>+display_counts(FILE *fp)</div><div class='ctx'> {</div><div class='del'>-        fprintf (fp, "\n");</div><div class='del'>-        fprintf (fp, "Entry counts\n");</div><div class='del'>-        fprintf (fp, "Regular files   : %lld\n", count_file);</div><div class='del'>-        fprintf (fp, "Directories     : %lld\n", count_dir);</div><div class='del'>-        fprintf (fp, "Symbolic links  : %lld\n", count_symlink);</div><div class='del'>-        fprintf (fp, "Other           : %lld\n", count_other);</div><div class='del'>-        fprintf (fp, "Total           : %lld\n",</div><div class='del'>-                 (count_file + count_dir + count_symlink + count_other));</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    fprintf(fp, "\n");</div><div class='add'>+    fprintf(fp, "Entry counts\n");</div><div class='add'>+    fprintf(fp, "Regular files   : %lld\n", count_file);</div><div class='add'>+    fprintf(fp, "Directories     : %lld\n", count_dir);</div><div class='add'>+    fprintf(fp, "Symbolic links  : %lld\n", count_symlink);</div><div class='add'>+    fprintf(fp, "Other           : %lld\n", count_other);</div><div class='add'>+    fprintf(fp, "Total           : %lld\n",</div><div class='add'>+            (count_file + count_dir + count_symlink + count_other));</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-display_checksums (FILE *fp)</div><div class='add'>+display_checksums(FILE *fp)</div><div class='ctx'> {</div><div class='del'>-        fprintf (fp, "\n");</div><div class='del'>-        fprintf (fp, "Checksums\n");</div><div class='del'>-        fprintf (fp, "Regular files   : %llx%llx\n", checksum_file1, checksum_file2);</div><div class='del'>-        fprintf (fp, "Directories     : %llx\n", checksum_dir);</div><div class='del'>-        fprintf (fp, "Symbolic links  : %llx\n", checksum_symlink);</div><div class='del'>-        fprintf (fp, "Other           : %llx\n", checksum_other);</div><div class='del'>-        fprintf (fp, "Total           : %llx\n",</div><div class='del'>-                 (checksum_file1 ^ checksum_file2 ^ checksum_dir ^ checksum_symlink ^ checksum_other));</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    fprintf(fp, "\n");</div><div class='add'>+    fprintf(fp, "Checksums\n");</div><div class='add'>+    fprintf(fp, "Regular files   : %llx%llx\n", checksum_file1, checksum_file2);</div><div class='add'>+    fprintf(fp, "Directories     : %llx\n", checksum_dir);</div><div class='add'>+    fprintf(fp, "Symbolic links  : %llx\n", checksum_symlink);</div><div class='add'>+    fprintf(fp, "Other           : %llx\n", checksum_other);</div><div class='add'>+    fprintf(fp, "Total           : %llx\n",</div><div class='add'>+            (checksum_file1 ^ checksum_file2 ^ checksum_dir ^ checksum_symlink ^</div><div class='add'>+             checksum_other));</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-display_metadata (FILE *fp)</div><div class='add'>+display_metadata(FILE *fp)</div><div class='ctx'> {</div><div class='del'>-        fprintf (fp, "\n");</div><div class='del'>-        fprintf (fp, "Metadata checksums\n");</div><div class='del'>-        fprintf (fp, "Regular files   : %llx\n",</div><div class='del'>-                 (avg_uid_file + 13) * (avg_gid_file + 11) * (avg_mode_file + 7));</div><div class='del'>-        fprintf (fp, "Directories     : %llx\n",</div><div class='del'>-                 (avg_uid_dir + 13) * (avg_gid_dir + 11) * (avg_mode_dir + 7));</div><div class='del'>-        fprintf (fp, "Symbolic links  : %llx\n",</div><div class='del'>-                 (avg_uid_symlink + 13) * (avg_gid_symlink + 11) * (avg_mode_symlink + 7));</div><div class='del'>-        fprintf (fp, "Other           : %llx\n",</div><div class='del'>-                 (avg_uid_other + 13) * (avg_gid_other + 11) * (avg_mode_other + 7));</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    fprintf(fp, "\n");</div><div class='add'>+    fprintf(fp, "Metadata checksums\n");</div><div class='add'>+    fprintf(fp, "Regular files   : %llx\n",</div><div class='add'>+            (avg_uid_file + 13) * (avg_gid_file + 11) * (avg_mode_file + 7));</div><div class='add'>+    fprintf(fp, "Directories     : %llx\n",</div><div class='add'>+            (avg_uid_dir + 13) * (avg_gid_dir + 11) * (avg_mode_dir + 7));</div><div class='add'>+    fprintf(fp, "Symbolic links  : %llx\n",</div><div class='add'>+            (avg_uid_symlink + 13) * (avg_gid_symlink + 11) *</div><div class='add'>+                (avg_mode_symlink + 7));</div><div class='add'>+    fprintf(fp, "Other           : %llx\n",</div><div class='add'>+            (avg_uid_other + 13) * (avg_gid_other + 11) * (avg_mode_other + 7));</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-display_stats (FILE *fp)</div><div class='add'>+display_stats(FILE *fp)</div><div class='ctx'> {</div><div class='del'>-        display_counts (fp);</div><div class='add'>+    display_counts(fp);</div><div class='ctx'> </div><div class='del'>-        display_metadata (fp);</div><div class='add'>+    display_metadata(fp);</div><div class='ctx'> </div><div class='del'>-        display_checksums (fp);</div><div class='add'>+    display_checksums(fp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        int  i = 0;</div><div class='del'>-</div><div class='del'>-        ret = argp_parse (&amp;argp, argc, argv, 0, 0, NULL);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "parsing arguments failed\n");</div><div class='del'>-                return -2;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-         /* Use FTW_ACTIONRETVAL to take decision on what to do depending upon */</div><div class='del'>-         /* the return value of the callback function */</div><div class='del'>-         /* (process_entry in this case) */</div><div class='del'>-        ret = nftw (arequal_config.test_directory, process_entry, 30,</div><div class='del'>-                    FTW_ACTIONRETVAL|FTW_PHYS|FTW_MOUNT);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "ftw (%s) returned %d (%s), terminating\n",</div><div class='del'>-                         argv[1], ret, strerror (errno));</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        display_stats (stdout);</div><div class='del'>-</div><div class='del'>-        if (arequal_config.ignored_directory) {</div><div class='del'>-                for (i = 0; i &lt; arequal_config.directories_ignored; i++) {</div><div class='del'>-                        if (arequal_config.ignored_directory[i])</div><div class='del'>-                            free (arequal_config.ignored_directory[i]);</div><div class='del'>-                }</div><div class='del'>-                free (arequal_config.ignored_directory);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    ret = argp_parse(&amp;argp, argc, argv, 0, 0, NULL);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "parsing arguments failed\n");</div><div class='add'>+        return -2;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Use FTW_ACTIONRETVAL to take decision on what to do depending upon */</div><div class='add'>+    /* the return value of the callback function */</div><div class='add'>+    /* (process_entry in this case) */</div><div class='add'>+    ret = nftw(arequal_config.test_directory, process_entry, 30,</div><div class='add'>+               FTW_ACTIONRETVAL | FTW_PHYS | FTW_MOUNT);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "ftw (%s) returned %d (%s), terminating\n", argv[1],</div><div class='add'>+                ret, strerror(errno));</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    display_stats(stdout);</div><div class='add'>+</div><div class='add'>+    if (arequal_config.ignored_directory) {</div><div class='add'>+        for (i = 0; i &lt; arequal_config.directories_ignored; i++) {</div><div class='add'>+            if (arequal_config.ignored_directory[i])</div><div class='add'>+                free(arequal_config.ignored_directory[i]);</div><div class='ctx'>         }</div><div class='add'>+        free(arequal_config.ignored_directory);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tests/utils/changelog/get-history.c b/tests/utils/changelog/get-history.c<br/>index 29dc60987ae..9963ab76958 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tests/utils/changelog/get-history.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tests/utils/changelog/get-history.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tests/utils/changelog/get-history.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tests/utils/changelog/get-history.c</a></div><div class='hunk'>@@ -27,47 +27,45 @@</div><div class='ctx'> #include "changelog.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int     ret          = 0;</div><div class='del'>-        unsigned long end_ts = 0;</div><div class='del'>-        int start  = 0;</div><div class='del'>-        int end    = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned long end_ts = 0;</div><div class='add'>+    int start = 0;</div><div class='add'>+    int end = 0;</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_init (NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("-1");</div><div class='del'>-                fflush(stdout);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_changelog_register ("/d/backends/patchy0",</div><div class='del'>-                                     "/tmp/scratch_v1",</div><div class='del'>-                                     "/var/log/glusterfs/changes.log",</div><div class='del'>-                                     9, 5);</div><div class='del'>-        if (ret) {</div><div class='del'>-                printf ("-2");</div><div class='del'>-                fflush(stdout);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_changelog_init(NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("-1");</div><div class='add'>+        fflush(stdout);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        start = atoi(argv[1]);</div><div class='del'>-        end = atoi(argv[2]);</div><div class='add'>+    ret = gf_changelog_register("/d/backends/patchy0", "/tmp/scratch_v1",</div><div class='add'>+                                "/var/log/glusterfs/changes.log", 9, 5);</div><div class='add'>+    if (ret) {</div><div class='add'>+        printf("-2");</div><div class='add'>+        fflush(stdout);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_history_changelog ("/d/backends/patchy0/.glusterfs/changelogs",</div><div class='del'>-                                    start, end, 3, &amp;end_ts);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                printf ("-3");</div><div class='del'>-                fflush(stdout);</div><div class='del'>-                return -1;</div><div class='del'>-        } else if (ret == 1) {</div><div class='del'>-                printf ("1");</div><div class='del'>-                fflush(stdout);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    start = atoi(argv[1]);</div><div class='add'>+    end = atoi(argv[2]);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        printf ("0");</div><div class='add'>+    ret = gf_history_changelog("/d/backends/patchy0/.glusterfs/changelogs",</div><div class='add'>+                               start, end, 3, &amp;end_ts);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        printf("-3");</div><div class='add'>+        fflush(stdout);</div><div class='add'>+        return -1;</div><div class='add'>+    } else if (ret == 1) {</div><div class='add'>+        printf("1");</div><div class='ctx'>         fflush(stdout);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    printf("0");</div><div class='add'>+    fflush(stdout);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tools/gfind_missing_files/gcrawler.c b/tools/gfind_missing_files/gcrawler.c<br/>index 02b644a1a77..9b3d243841c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tools/gfind_missing_files/gcrawler.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tools/gfind_missing_files/gcrawler.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tools/gfind_missing_files/gcrawler.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tools/gfind_missing_files/gcrawler.c</a></div><div class='hunk'>@@ -26,23 +26,40 @@</div><div class='ctx'> #define BUMP(name) INC(name, 1)</div><div class='ctx'> #define DEFAULT_WORKERS 4</div><div class='ctx'> </div><div class='del'>-#define NEW(x) {                              \</div><div class='del'>-        x = calloc (1, sizeof (typeof (*x))); \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-#define err(x ...) fprintf(stderr, x)</div><div class='del'>-#define out(x ...) fprintf(stdout, x)</div><div class='del'>-#define dbg(x ...) do { if (debug) fprintf(stdout, x); } while (0)</div><div class='del'>-#define tout(x ...) do { out("[%ld] ", pthread_self()); out(x); } while (0)</div><div class='del'>-#define terr(x ...) do { err("[%ld] ", pthread_self()); err(x); } while (0)</div><div class='del'>-#define tdbg(x ...) do { dbg("[%ld] ", pthread_self()); dbg(x); } while (0)</div><div class='add'>+#define NEW(x)                                                                 \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        x = calloc(1, sizeof(typeof(*x)));                                     \</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+#define err(x...) fprintf(stderr, x)</div><div class='add'>+#define out(x...) fprintf(stdout, x)</div><div class='add'>+#define dbg(x...)                                                              \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (debug)                                                             \</div><div class='add'>+            fprintf(stdout, x);                                                \</div><div class='add'>+    } while (0)</div><div class='add'>+#define tout(x...)                                                             \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        out("[%ld] ", pthread_self());                                         \</div><div class='add'>+        out(x);                                                                \</div><div class='add'>+    } while (0)</div><div class='add'>+#define terr(x...)                                                             \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        err("[%ld] ", pthread_self());                                         \</div><div class='add'>+        err(x);                                                                \</div><div class='add'>+    } while (0)</div><div class='add'>+#define tdbg(x...)                                                             \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        dbg("[%ld] ", pthread_self());                                         \</div><div class='add'>+        dbg(x);                                                                \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int debug = 0;</div><div class='ctx'> const char *slavemnt = NULL;</div><div class='ctx'> int workers = 0;</div><div class='ctx'> </div><div class='ctx'> struct stats {</div><div class='del'>-        unsigned long long int cnt_skipped_gfids;</div><div class='add'>+    unsigned long long int cnt_skipped_gfids;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> pthread_spinlock_t stats_lock;</div><div class='hunk'>@@ -50,518 +67,515 @@ pthread_spinlock_t stats_lock;</div><div class='ctx'> struct stats stats_total;</div><div class='ctx'> int stats = 0;</div><div class='ctx'> </div><div class='del'>-#define INC(name, val) do {                             \</div><div class='del'>-        if (!stats)                                     \</div><div class='del'>-                break;                                  \</div><div class='del'>-        pthread_spin_lock(&amp;stats_lock);                 \</div><div class='del'>-        {                                               \</div><div class='del'>-                stats_total.cnt_##name += val;          \</div><div class='del'>-        }                                               \</div><div class='del'>-        pthread_spin_unlock(&amp;stats_lock);               \</div><div class='del'>-        } while (0)</div><div class='add'>+#define INC(name, val)                                                         \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (!stats)                                                            \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        pthread_spin_lock(&amp;stats_lock);                                        \</div><div class='add'>+        {                                                                      \</div><div class='add'>+            stats_total.cnt_##name += val;                                     \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        pthread_spin_unlock(&amp;stats_lock);                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> stats_dump()</div><div class='ctx'> {</div><div class='del'>-        if (!stats)</div><div class='del'>-                return;</div><div class='add'>+    if (!stats)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        out("-------------------------------------------\n");</div><div class='del'>-        out("Skipped_Files : %10lld\n", stats_total.cnt_skipped_gfids);</div><div class='del'>-        out("-------------------------------------------\n");</div><div class='add'>+    out("-------------------------------------------\n");</div><div class='add'>+    out("Skipped_Files : %10lld\n", stats_total.cnt_skipped_gfids);</div><div class='add'>+    out("-------------------------------------------\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct dirjob {</div><div class='del'>-        struct list_head    list;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> </div><div class='del'>-        char               *dirname;</div><div class='add'>+    char *dirname;</div><div class='ctx'> </div><div class='del'>-        struct dirjob      *parent;</div><div class='del'>-        int                 ret;    /* final status of this subtree */</div><div class='del'>-        int                 refcnt; /* how many dirjobs have this as parent */</div><div class='add'>+    struct dirjob *parent;</div><div class='add'>+    int ret;    /* final status of this subtree */</div><div class='add'>+    int refcnt; /* how many dirjobs have this as parent */</div><div class='ctx'> </div><div class='del'>-        pthread_spinlock_t  lock;</div><div class='add'>+    pthread_spinlock_t lock;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xwork {</div><div class='del'>-        pthread_t        cthreads[THREAD_MAX]; /* crawler threads */</div><div class='del'>-        int              count;</div><div class='del'>-        int              idle;</div><div class='del'>-        int              stop;</div><div class='add'>+    pthread_t cthreads[THREAD_MAX]; /* crawler threads */</div><div class='add'>+    int count;</div><div class='add'>+    int idle;</div><div class='add'>+    int stop;</div><div class='ctx'> </div><div class='del'>-        struct dirjob    crawl;</div><div class='add'>+    struct dirjob crawl;</div><div class='ctx'> </div><div class='del'>-        struct dirjob   *rootjob; /* to verify completion in xwork_fini() */</div><div class='add'>+    struct dirjob *rootjob; /* to verify completion in xwork_fini() */</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_t  mutex;</div><div class='del'>-        pthread_cond_t   cond;</div><div class='add'>+    pthread_mutex_t mutex;</div><div class='add'>+    pthread_cond_t cond;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirjob *</div><div class='del'>-dirjob_ref (struct dirjob *job)</div><div class='add'>+dirjob_ref(struct dirjob *job)</div><div class='ctx'> {</div><div class='del'>-        pthread_spin_lock (&amp;job-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                job-&gt;refcnt++;</div><div class='del'>-        }</div><div class='del'>-        pthread_spin_unlock (&amp;job-&gt;lock);</div><div class='add'>+    pthread_spin_lock(&amp;job-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        job-&gt;refcnt++;</div><div class='add'>+    }</div><div class='add'>+    pthread_spin_unlock(&amp;job-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return job;</div><div class='add'>+    return job;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dirjob_free (struct dirjob *job)</div><div class='add'>+dirjob_free(struct dirjob *job)</div><div class='ctx'> {</div><div class='del'>-        assert (list_empty (&amp;job-&gt;list));</div><div class='add'>+    assert(list_empty(&amp;job-&gt;list));</div><div class='ctx'> </div><div class='del'>-        pthread_spin_destroy (&amp;job-&gt;lock);</div><div class='del'>-        free (job-&gt;dirname);</div><div class='del'>-        free (job);</div><div class='add'>+    pthread_spin_destroy(&amp;job-&gt;lock);</div><div class='add'>+    free(job-&gt;dirname);</div><div class='add'>+    free(job);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dirjob_ret (struct dirjob *job, int err)</div><div class='add'>+dirjob_ret(struct dirjob *job, int err)</div><div class='ctx'> {</div><div class='del'>-        int            ret = 0;</div><div class='del'>-        int            refcnt = 0;</div><div class='del'>-        struct dirjob *parent = NULL;</div><div class='del'>-</div><div class='del'>-        pthread_spin_lock (&amp;job-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                refcnt = --job-&gt;refcnt;</div><div class='del'>-                job-&gt;ret = (job-&gt;ret || err);</div><div class='del'>-        }</div><div class='del'>-        pthread_spin_unlock (&amp;job-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (refcnt == 0) {</div><div class='del'>-                ret = job-&gt;ret;</div><div class='del'>-</div><div class='del'>-                if (ret)</div><div class='del'>-                        terr ("Failed: %s (%d)\n", job-&gt;dirname, ret);</div><div class='del'>-                else</div><div class='del'>-                        tdbg ("Finished: %s\n", job-&gt;dirname);</div><div class='del'>-</div><div class='del'>-                parent = job-&gt;parent;</div><div class='del'>-                if (parent)</div><div class='del'>-                        dirjob_ret (parent, ret);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int refcnt = 0;</div><div class='add'>+    struct dirjob *parent = NULL;</div><div class='add'>+</div><div class='add'>+    pthread_spin_lock(&amp;job-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        refcnt = --job-&gt;refcnt;</div><div class='add'>+        job-&gt;ret = (job-&gt;ret || err);</div><div class='add'>+    }</div><div class='add'>+    pthread_spin_unlock(&amp;job-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (refcnt == 0) {</div><div class='add'>+        ret = job-&gt;ret;</div><div class='add'>+</div><div class='add'>+        if (ret)</div><div class='add'>+            terr("Failed: %s (%d)\n", job-&gt;dirname, ret);</div><div class='add'>+        else</div><div class='add'>+            tdbg("Finished: %s\n", job-&gt;dirname);</div><div class='add'>+</div><div class='add'>+        parent = job-&gt;parent;</div><div class='add'>+        if (parent)</div><div class='add'>+            dirjob_ret(parent, ret);</div><div class='ctx'> </div><div class='del'>-                dirjob_free (job);</div><div class='del'>-                job = NULL;</div><div class='del'>-        }</div><div class='add'>+        dirjob_free(job);</div><div class='add'>+        job = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirjob *</div><div class='del'>-dirjob_new (const char *dir, struct dirjob *parent)</div><div class='add'>+dirjob_new(const char *dir, struct dirjob *parent)</div><div class='ctx'> {</div><div class='del'>-        struct dirjob *job = NULL;</div><div class='add'>+    struct dirjob *job = NULL;</div><div class='ctx'> </div><div class='del'>-        NEW(job);</div><div class='del'>-        if (!job)</div><div class='del'>-                return NULL;</div><div class='add'>+    NEW(job);</div><div class='add'>+    if (!job)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        job-&gt;dirname = strdup (dir);</div><div class='del'>-        if (!job-&gt;dirname) {</div><div class='del'>-                free (job);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    job-&gt;dirname = strdup(dir);</div><div class='add'>+    if (!job-&gt;dirname) {</div><div class='add'>+        free(job);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD(&amp;job-&gt;list);</div><div class='del'>-        pthread_spin_init (&amp;job-&gt;lock, PTHREAD_PROCESS_PRIVATE);</div><div class='del'>-        job-&gt;ret = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;job-&gt;list);</div><div class='add'>+    pthread_spin_init(&amp;job-&gt;lock, PTHREAD_PROCESS_PRIVATE);</div><div class='add'>+    job-&gt;ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                job-&gt;parent = dirjob_ref (parent);</div><div class='add'>+    if (parent)</div><div class='add'>+        job-&gt;parent = dirjob_ref(parent);</div><div class='ctx'> </div><div class='del'>-        job-&gt;refcnt = 1;</div><div class='add'>+    job-&gt;refcnt = 1;</div><div class='ctx'> </div><div class='del'>-        return job;</div><div class='add'>+    return job;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xwork_addcrawl (struct xwork *xwork, struct dirjob *job)</div><div class='add'>+xwork_addcrawl(struct xwork *xwork, struct dirjob *job)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;xwork-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;job-&gt;list, &amp;xwork-&gt;crawl.list);</div><div class='del'>-                pthread_cond_broadcast (&amp;xwork-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;xwork-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;xwork-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;job-&gt;list, &amp;xwork-&gt;crawl.list);</div><div class='add'>+        pthread_cond_broadcast(&amp;xwork-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;xwork-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xwork_add (struct xwork *xwork, const char *dir, struct dirjob *parent)</div><div class='add'>+xwork_add(struct xwork *xwork, const char *dir, struct dirjob *parent)</div><div class='ctx'> {</div><div class='del'>-        struct dirjob *job = NULL;</div><div class='add'>+    struct dirjob *job = NULL;</div><div class='ctx'> </div><div class='del'>-        job = dirjob_new (dir, parent);</div><div class='del'>-        if (!job)</div><div class='del'>-                return -1;</div><div class='add'>+    job = dirjob_new(dir, parent);</div><div class='add'>+    if (!job)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        xwork_addcrawl (xwork, job);</div><div class='add'>+    xwork_addcrawl(xwork, job);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct dirjob *</div><div class='del'>-xwork_pick (struct xwork *xwork, int block)</div><div class='add'>+xwork_pick(struct xwork *xwork, int block)</div><div class='ctx'> {</div><div class='del'>-        struct dirjob *job = NULL;</div><div class='del'>-        struct list_head *head = NULL;</div><div class='add'>+    struct dirjob *job = NULL;</div><div class='add'>+    struct list_head *head = NULL;</div><div class='ctx'> </div><div class='del'>-        head = &amp;xwork-&gt;crawl.list;</div><div class='add'>+    head = &amp;xwork-&gt;crawl.list;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;xwork-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                for (;;) {</div><div class='del'>-                        if (xwork-&gt;stop)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        if (!list_empty (head)) {</div><div class='del'>-                                job = list_entry (head-&gt;next, typeof(*job),</div><div class='del'>-                                                  list);</div><div class='del'>-                                list_del_init (&amp;job-&gt;list);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (((xwork-&gt;count * 2) == xwork-&gt;idle) &amp;&amp;</div><div class='del'>-                            list_empty (&amp;xwork-&gt;crawl.list)) {</div><div class='del'>-                                /* no outstanding jobs, and no</div><div class='del'>-                                   active workers</div><div class='del'>-                                */</div><div class='del'>-                                tdbg ("Jobless. Terminating\n");</div><div class='del'>-                                xwork-&gt;stop = 1;</div><div class='del'>-                                pthread_cond_broadcast (&amp;xwork-&gt;cond);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (!block)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        xwork-&gt;idle++;</div><div class='del'>-                        pthread_cond_wait (&amp;xwork-&gt;cond, &amp;xwork-&gt;mutex);</div><div class='del'>-                        xwork-&gt;idle--;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;xwork-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        for (;;) {</div><div class='add'>+            if (xwork-&gt;stop)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            if (!list_empty(head)) {</div><div class='add'>+                job = list_entry(head-&gt;next, typeof(*job), list);</div><div class='add'>+                list_del_init(&amp;job-&gt;list);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (((xwork-&gt;count * 2) == xwork-&gt;idle) &amp;&amp;</div><div class='add'>+                list_empty(&amp;xwork-&gt;crawl.list)) {</div><div class='add'>+                /* no outstanding jobs, and no</div><div class='add'>+                   active workers</div><div class='add'>+                */</div><div class='add'>+                tdbg("Jobless. Terminating\n");</div><div class='add'>+                xwork-&gt;stop = 1;</div><div class='add'>+                pthread_cond_broadcast(&amp;xwork-&gt;cond);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (!block)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            xwork-&gt;idle++;</div><div class='add'>+            pthread_cond_wait(&amp;xwork-&gt;cond, &amp;xwork-&gt;mutex);</div><div class='add'>+            xwork-&gt;idle--;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;xwork-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;xwork-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return job;</div><div class='add'>+    return job;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-skip_name (const char *dirname, const char *name)</div><div class='add'>+skip_name(const char *dirname, const char *name)</div><div class='ctx'> {</div><div class='del'>-        if (strcmp (name, ".") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(name, ".") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (name, "..") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(name, "..") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (name, "changelogs") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(name, "changelogs") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (name, "health_check") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(name, "health_check") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (name, "indices") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(name, "indices") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (name, "landfill") == 0)</div><div class='del'>-                return 1;</div><div class='add'>+    if (strcmp(name, "landfill") == 0)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-skip_stat (struct dirjob *job, const char *name)</div><div class='add'>+skip_stat(struct dirjob *job, const char *name)</div><div class='ctx'> {</div><div class='del'>-        if (job == NULL)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        if (strcmp (job-&gt;dirname, ".glusterfs") == 0) {</div><div class='del'>-                tdbg ("Directly adding directories under .glusterfs "</div><div class='del'>-                      "to global list: %s\n", name);</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    if (job == NULL)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (job-&gt;parent != NULL) {</div><div class='del'>-                if (strcmp (job-&gt;parent-&gt;dirname, ".glusterfs") == 0) {</div><div class='del'>-                        tdbg ("Directly adding directories under .glusterfs/XX "</div><div class='del'>-                              "to global list: %s\n", name);</div><div class='del'>-                        return 1;</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(job-&gt;dirname, ".glusterfs") == 0) {</div><div class='add'>+        tdbg(</div><div class='add'>+            "Directly adding directories under .glusterfs "</div><div class='add'>+            "to global list: %s\n",</div><div class='add'>+            name);</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (job-&gt;parent != NULL) {</div><div class='add'>+        if (strcmp(job-&gt;parent-&gt;dirname, ".glusterfs") == 0) {</div><div class='add'>+            tdbg(</div><div class='add'>+                "Directly adding directories under .glusterfs/XX "</div><div class='add'>+                "to global list: %s\n",</div><div class='add'>+                name);</div><div class='add'>+            return 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xworker_do_crawl (struct xwork *xwork, struct dirjob *job)</div><div class='add'>+xworker_do_crawl(struct xwork *xwork, struct dirjob *job)</div><div class='ctx'> {</div><div class='del'>-        DIR            *dirp = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        int             boff;</div><div class='del'>-        int             plen;</div><div class='del'>-        char           *path = NULL;</div><div class='del'>-        struct dirjob  *cjob = NULL;</div><div class='del'>-        struct stat     statbuf = {0,};</div><div class='del'>-        struct dirent  *entry;</div><div class='del'>-        struct dirent   scratch[2] = {{0,},};</div><div class='del'>-        char            gfid_path[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        plen = strlen (job-&gt;dirname) + 256 + 2;</div><div class='del'>-        path = alloca (plen);</div><div class='del'>-</div><div class='del'>-        tdbg ("Entering: %s\n", job-&gt;dirname);</div><div class='del'>-</div><div class='del'>-        dirp = sys_opendir (job-&gt;dirname);</div><div class='del'>-        if (!dirp) {</div><div class='del'>-                terr ("opendir failed on %s (%s)\n", job-&gt;dirname,</div><div class='del'>-                     strerror (errno));</div><div class='add'>+    DIR *dirp = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int boff;</div><div class='add'>+    int plen;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    struct dirjob *cjob = NULL;</div><div class='add'>+    struct stat statbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct dirent *entry;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    char gfid_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    plen = strlen(job-&gt;dirname) + 256 + 2;</div><div class='add'>+    path = alloca(plen);</div><div class='add'>+</div><div class='add'>+    tdbg("Entering: %s\n", job-&gt;dirname);</div><div class='add'>+</div><div class='add'>+    dirp = sys_opendir(job-&gt;dirname);</div><div class='add'>+    if (!dirp) {</div><div class='add'>+        terr("opendir failed on %s (%s)\n", job-&gt;dirname, strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    boff = sprintf(path, "%s/", job-&gt;dirname);</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(dirp, scratch);</div><div class='add'>+        if (!entry || errno != 0) {</div><div class='add'>+            if (errno != 0) {</div><div class='add'>+                err("readdir(%s): %s\n", job-&gt;dirname, strerror(errno));</div><div class='add'>+                ret = errno;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        boff = sprintf (path, "%s/", job-&gt;dirname);</div><div class='add'>+        if (entry-&gt;d_ino == 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (skip_name(job-&gt;dirname, entry-&gt;d_name))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /* It is sure that, children and grandchildren of .glusterfs</div><div class='add'>+         * are directories, just add them to global queue.</div><div class='add'>+         */</div><div class='add'>+        if (skip_stat(job, entry-&gt;d_name)) {</div><div class='add'>+            strncpy(path + boff, entry-&gt;d_name, (plen - boff));</div><div class='add'>+            cjob = dirjob_new(path, job);</div><div class='add'>+            if (!cjob) {</div><div class='add'>+                err("dirjob_new(%s): %s\n", path, strerror(errno));</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            xwork_addcrawl(xwork, cjob);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (dirp, scratch);</div><div class='del'>-                if (!entry || errno != 0) {</div><div class='del'>-                        if (errno != 0) {</div><div class='del'>-                                err ("readdir(%s): %s\n", job-&gt;dirname,</div><div class='del'>-                                     strerror (errno));</div><div class='del'>-                                ret = errno;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (entry-&gt;d_ino == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (skip_name (job-&gt;dirname, entry-&gt;d_name))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* It is sure that, children and grandchildren of .glusterfs</div><div class='del'>-                 * are directories, just add them to global queue.</div><div class='del'>-                 */</div><div class='del'>-                if (skip_stat (job, entry-&gt;d_name)) {</div><div class='del'>-                        strncpy (path + boff, entry-&gt;d_name, (plen-boff));</div><div class='del'>-                        cjob = dirjob_new (path, job);</div><div class='del'>-                        if (!cjob) {</div><div class='del'>-                                err ("dirjob_new(%s): %s\n",</div><div class='del'>-                                     path, strerror (errno));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        xwork_addcrawl (xwork, cjob);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                (void) snprintf (gfid_path, sizeof(gfid_path), "%s/.gfid/%s",</div><div class='del'>-                                 slavemnt, entry-&gt;d_name);</div><div class='del'>-                ret = sys_lstat (gfid_path, &amp;statbuf);</div><div class='del'>-</div><div class='del'>-                if (ret &amp;&amp; errno == ENOENT) {</div><div class='del'>-                        out ("%s\n", entry-&gt;d_name);</div><div class='del'>-                        BUMP (skipped_gfids);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret &amp;&amp; errno != ENOENT) {</div><div class='del'>-                        err ("stat on slave failed(%s): %s\n",</div><div class='del'>-                             gfid_path, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        (void)snprintf(gfid_path, sizeof(gfid_path), "%s/.gfid/%s", slavemnt,</div><div class='add'>+                       entry-&gt;d_name);</div><div class='add'>+        ret = sys_lstat(gfid_path, &amp;statbuf);</div><div class='add'>+</div><div class='add'>+        if (ret &amp;&amp; errno == ENOENT) {</div><div class='add'>+            out("%s\n", entry-&gt;d_name);</div><div class='add'>+            BUMP(skipped_gfids);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (ret &amp;&amp; errno != ENOENT) {</div><div class='add'>+            err("stat on slave failed(%s): %s\n", gfid_path, strerror(errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dirp)</div><div class='del'>-                (void) sys_closedir (dirp);</div><div class='add'>+    if (dirp)</div><div class='add'>+        (void)sys_closedir(dirp);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-xworker_crawl (void *data)</div><div class='add'>+xworker_crawl(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct xwork *xwork = data;</div><div class='del'>-        struct dirjob *job = NULL;</div><div class='del'>-        int            ret = -1;</div><div class='add'>+    struct xwork *xwork = data;</div><div class='add'>+    struct dirjob *job = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        while ((job = xwork_pick (xwork, 0))) {</div><div class='del'>-                ret = xworker_do_crawl (xwork, job);</div><div class='del'>-                dirjob_ret (job, ret);</div><div class='del'>-        }</div><div class='add'>+    while ((job = xwork_pick(xwork, 0))) {</div><div class='add'>+        ret = xworker_do_crawl(xwork, job);</div><div class='add'>+        dirjob_ret(job, ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xwork_fini (struct xwork *xwork, int stop)</div><div class='add'>+xwork_fini(struct xwork *xwork, int stop)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        void *tret = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;xwork-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                xwork-&gt;stop = (xwork-&gt;stop || stop);</div><div class='del'>-                pthread_cond_broadcast (&amp;xwork-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;xwork-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; xwork-&gt;count; i++) {</div><div class='del'>-                pthread_join (xwork-&gt;cthreads[i], &amp;tret);</div><div class='del'>-                tdbg ("CThread id %ld returned %p\n",</div><div class='del'>-                      xwork-&gt;cthreads[i], tret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (debug) {</div><div class='del'>-                assert (xwork-&gt;rootjob-&gt;refcnt == 1);</div><div class='del'>-                dirjob_ret (xwork-&gt;rootjob, 0);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (stats)</div><div class='del'>-                pthread_spin_destroy(&amp;stats_lock);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *tret = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;xwork-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        xwork-&gt;stop = (xwork-&gt;stop || stop);</div><div class='add'>+        pthread_cond_broadcast(&amp;xwork-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;xwork-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; xwork-&gt;count; i++) {</div><div class='add'>+        pthread_join(xwork-&gt;cthreads[i], &amp;tret);</div><div class='add'>+        tdbg("CThread id %ld returned %p\n", xwork-&gt;cthreads[i], tret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (debug) {</div><div class='add'>+        assert(xwork-&gt;rootjob-&gt;refcnt == 1);</div><div class='add'>+        dirjob_ret(xwork-&gt;rootjob, 0);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (stats)</div><div class='add'>+        pthread_spin_destroy(&amp;stats_lock);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xwork_init (struct xwork *xwork, int count)</div><div class='add'>+xwork_init(struct xwork *xwork, int count)</div><div class='ctx'> {</div><div class='del'>-        int  i = 0;</div><div class='del'>-        int  ret = 0;</div><div class='del'>-        struct dirjob *rootjob = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct dirjob *rootjob = NULL;</div><div class='ctx'> </div><div class='del'>-        if (stats)</div><div class='del'>-                pthread_spin_init (&amp;stats_lock, PTHREAD_PROCESS_PRIVATE);</div><div class='add'>+    if (stats)</div><div class='add'>+        pthread_spin_init(&amp;stats_lock, PTHREAD_PROCESS_PRIVATE);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;xwork-&gt;mutex, NULL);</div><div class='del'>-        pthread_cond_init (&amp;xwork-&gt;cond, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;xwork-&gt;mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;xwork-&gt;cond, NULL);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;xwork-&gt;crawl.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;xwork-&gt;crawl.list);</div><div class='ctx'> </div><div class='del'>-        rootjob = dirjob_new (".glusterfs", NULL);</div><div class='del'>-        if (debug)</div><div class='del'>-                xwork-&gt;rootjob = dirjob_ref (rootjob);</div><div class='add'>+    rootjob = dirjob_new(".glusterfs", NULL);</div><div class='add'>+    if (debug)</div><div class='add'>+        xwork-&gt;rootjob = dirjob_ref(rootjob);</div><div class='ctx'> </div><div class='del'>-        xwork_addcrawl (xwork, rootjob);</div><div class='add'>+    xwork_addcrawl(xwork, rootjob);</div><div class='ctx'> </div><div class='del'>-        xwork-&gt;count = count;</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                ret = pthread_create (&amp;xwork-&gt;cthreads[i], NULL,</div><div class='del'>-                                      xworker_crawl, xwork);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-                tdbg ("Spawned crawler %d thread %ld\n", i,</div><div class='del'>-                      xwork-&gt;cthreads[i]);</div><div class='del'>-        }</div><div class='add'>+    xwork-&gt;count = count;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        ret = pthread_create(&amp;xwork-&gt;cthreads[i], NULL, xworker_crawl, xwork);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+        tdbg("Spawned crawler %d thread %ld\n", i, xwork-&gt;cthreads[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-xfind (const char *basedir)</div><div class='add'>+xfind(const char *basedir)</div><div class='ctx'> {</div><div class='del'>-        struct xwork xwork;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        char         *cwd = NULL;</div><div class='del'>-</div><div class='del'>-        ret = chdir (basedir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                err ("%s: %s\n", basedir, strerror (errno));</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    struct xwork xwork;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *cwd = NULL;</div><div class='ctx'> </div><div class='del'>-        cwd = getcwd (0, 0);</div><div class='del'>-        if (!cwd) {</div><div class='del'>-                err ("getcwd(): %s\n", strerror (errno));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = chdir(basedir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        err("%s: %s\n", basedir, strerror(errno));</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tdbg ("Working directory: %s\n", cwd);</div><div class='del'>-        free (cwd);</div><div class='add'>+    cwd = getcwd(0, 0);</div><div class='add'>+    if (!cwd) {</div><div class='add'>+        err("getcwd(): %s\n", strerror(errno));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (&amp;xwork, 0, sizeof (xwork));</div><div class='add'>+    tdbg("Working directory: %s\n", cwd);</div><div class='add'>+    free(cwd);</div><div class='ctx'> </div><div class='del'>-        ret = xwork_init (&amp;xwork, workers);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                xworker_crawl (&amp;xwork);</div><div class='add'>+    memset(&amp;xwork, 0, sizeof(xwork));</div><div class='ctx'> </div><div class='del'>-        ret = xwork_fini (&amp;xwork, ret);</div><div class='del'>-        stats_dump ();</div><div class='add'>+    ret = xwork_init(&amp;xwork, workers);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        xworker_crawl(&amp;xwork);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    ret = xwork_fini(&amp;xwork, ret);</div><div class='add'>+    stats_dump();</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-parse_and_validate_args (int argc, char *argv[])</div><div class='add'>+parse_and_validate_args(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char        *basedir = NULL;</div><div class='del'>-        struct stat  d = {0, };</div><div class='del'>-        int          ret = -1;</div><div class='add'>+    char *basedir = NULL;</div><div class='add'>+    struct stat d = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='ctx'> #ifndef __FreeBSD__</div><div class='del'>-        unsigned char volume_id[16];</div><div class='add'>+    unsigned char volume_id[16];</div><div class='ctx'> #endif /* __FreeBSD__ */</div><div class='del'>-        char        *slv_mnt = NULL;</div><div class='add'>+    char *slv_mnt = NULL;</div><div class='ctx'> </div><div class='del'>-        if (argc != 4) {</div><div class='del'>-                err ("Usage: %s &lt;DIR&gt; &lt;SLAVE-VOL-MOUNT&gt; &lt;CRAWL-THREAD-COUNT&gt;\n",</div><div class='del'>-                      argv[0]);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (argc != 4) {</div><div class='add'>+        err("Usage: %s &lt;DIR&gt; &lt;SLAVE-VOL-MOUNT&gt; &lt;CRAWL-THREAD-COUNT&gt;\n",</div><div class='add'>+            argv[0]);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        basedir = argv[1];</div><div class='del'>-        ret = sys_lstat (basedir, &amp;d);</div><div class='del'>-        if (ret) {</div><div class='del'>-                err ("%s: %s\n", basedir, strerror (errno));</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    basedir = argv[1];</div><div class='add'>+    ret = sys_lstat(basedir, &amp;d);</div><div class='add'>+    if (ret) {</div><div class='add'>+        err("%s: %s\n", basedir, strerror(errno));</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #ifndef __FreeBSD__</div><div class='del'>-        ret = sys_lgetxattr (basedir, "trusted.glusterfs.volume-id",</div><div class='del'>-                             volume_id, 16);</div><div class='del'>-        if (ret != 16) {</div><div class='del'>-                err ("%s:Not a valid brick path.\n", basedir);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    ret = sys_lgetxattr(basedir, "trusted.glusterfs.volume-id", volume_id, 16);</div><div class='add'>+    if (ret != 16) {</div><div class='add'>+        err("%s:Not a valid brick path.\n", basedir);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> #endif /* __FreeBSD__ */</div><div class='ctx'> </div><div class='del'>-        slv_mnt = argv[2];</div><div class='del'>-        ret = sys_lstat (slv_mnt, &amp;d);</div><div class='del'>-        if (ret) {</div><div class='del'>-                err ("%s: %s\n", slv_mnt, strerror (errno));</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        slavemnt = argv[2];</div><div class='add'>+    slv_mnt = argv[2];</div><div class='add'>+    ret = sys_lstat(slv_mnt, &amp;d);</div><div class='add'>+    if (ret) {</div><div class='add'>+        err("%s: %s\n", slv_mnt, strerror(errno));</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    slavemnt = argv[2];</div><div class='ctx'> </div><div class='del'>-        workers = atoi(argv[3]);</div><div class='del'>-        if (workers &lt;= 0)</div><div class='del'>-                workers = DEFAULT_WORKERS;</div><div class='add'>+    workers = atoi(argv[3]);</div><div class='add'>+    if (workers &lt;= 0)</div><div class='add'>+        workers = DEFAULT_WORKERS;</div><div class='ctx'> </div><div class='del'>-        return basedir;</div><div class='add'>+    return basedir;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char *argv[])</div><div class='add'>+main(int argc, char *argv[])</div><div class='ctx'> {</div><div class='del'>-        char *basedir = NULL;</div><div class='add'>+    char *basedir = NULL;</div><div class='ctx'> </div><div class='del'>-        basedir = parse_and_validate_args (argc, argv);</div><div class='del'>-        if (!basedir)</div><div class='del'>-                return 1;</div><div class='add'>+    basedir = parse_and_validate_args(argc, argv);</div><div class='add'>+    if (!basedir)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        xfind (basedir);</div><div class='add'>+    xfind(basedir);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/tools/setgfid2path/src/main.c b/tools/setgfid2path/src/main.c<br/>index dfa561f4f51..c9e71c12815 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/tools/setgfid2path/src/main.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>tools/setgfid2path/src/main.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/tools/setgfid2path/src/main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>tools/setgfid2path/src/main.c</a></div><div class='hunk'>@@ -17,112 +17,114 @@</div><div class='ctx'> #define GFID_SIZE 16</div><div class='ctx'> #define GFID_XATTR_KEY "trusted.gfid"</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int main(int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int             ret                               = 0;</div><div class='del'>-        struct stat     st;</div><div class='del'>-        char           *dname                             = NULL;</div><div class='del'>-        char           *bname                             = NULL;</div><div class='del'>-        ssize_t         ret_size                          = 0;</div><div class='del'>-        uuid_t          pgfid_raw                         = {0,};</div><div class='del'>-        char            pgfid[36]                         = "";</div><div class='del'>-        char            xxh64[GF_XXH64_DIGEST_LENGTH*2+1] = {0,};</div><div class='del'>-        char            pgfid_bname[1024]                 = {0,};</div><div class='del'>-        char           *key                               = NULL;</div><div class='del'>-        char           *val                               = NULL;</div><div class='del'>-        size_t          key_size                          = 0;</div><div class='del'>-        size_t          val_size                          = 0;</div><div class='del'>-        const char     *file_path                         = NULL;</div><div class='del'>-        char           *file_path1                        = NULL;</div><div class='del'>-        char           *file_path2                        = NULL;</div><div class='del'>-</div><div class='del'>-        if (argc != 2) {</div><div class='del'>-                fprintf (stderr, "Usage: setgfid2path &lt;file-path&gt;\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_lstat (argv[1], &amp;st);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                fprintf (stderr, "Invalid File Path\n");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (st.st_nlink &gt;= MAX_GFID2PATH_LINK_SUP) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "Number of Hardlink support exceeded. "</div><div class='del'>-                         "max=%d\n", MAX_GFID2PATH_LINK_SUP);</div><div class='del'>-                return -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct stat st;</div><div class='add'>+    char *dname = NULL;</div><div class='add'>+    char *bname = NULL;</div><div class='add'>+    ssize_t ret_size = 0;</div><div class='add'>+    uuid_t pgfid_raw = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char pgfid[36] = "";</div><div class='add'>+    char xxh64[GF_XXH64_DIGEST_LENGTH * 2 + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char pgfid_bname[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *val = NULL;</div><div class='add'>+    size_t key_size = 0;</div><div class='add'>+    size_t val_size = 0;</div><div class='add'>+    const char *file_path = NULL;</div><div class='add'>+    char *file_path1 = NULL;</div><div class='add'>+    char *file_path2 = NULL;</div><div class='add'>+</div><div class='add'>+    if (argc != 2) {</div><div class='add'>+        fprintf(stderr, "Usage: setgfid2path &lt;file-path&gt;\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_lstat(argv[1], &amp;st);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        fprintf(stderr, "Invalid File Path\n");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (st.st_nlink &gt;= MAX_GFID2PATH_LINK_SUP) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Number of Hardlink support exceeded. "</div><div class='add'>+                "max=%d\n",</div><div class='add'>+                MAX_GFID2PATH_LINK_SUP);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    file_path = argv[1];</div><div class='add'>+    file_path1 = strdup(file_path);</div><div class='add'>+    file_path2 = strdup(file_path);</div><div class='add'>+</div><div class='add'>+    dname = dirname(file_path1);</div><div class='add'>+    bname = basename(file_path2);</div><div class='add'>+</div><div class='add'>+    /* Get GFID of Parent directory */</div><div class='add'>+    ret_size = sys_lgetxattr(dname, GFID_XATTR_KEY, pgfid_raw, GFID_SIZE);</div><div class='add'>+    if (ret_size != GFID_SIZE) {</div><div class='add'>+        fprintf(stderr, "Failed to get GFID of parent directory. dir=%s\n",</div><div class='add'>+                dname);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Convert to UUID format */</div><div class='add'>+    if (uuid_utoa_r(pgfid_raw, pgfid) == NULL) {</div><div class='add'>+        fprintf(stderr,</div><div class='add'>+                "Failed to format GFID of parent directory. "</div><div class='add'>+                "dir=%s GFID=%s\n",</div><div class='add'>+                dname, pgfid_raw);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Find xxhash for PGFID/BaseName */</div><div class='add'>+    snprintf(pgfid_bname, sizeof(pgfid_bname), "%s/%s", pgfid, bname);</div><div class='add'>+    gf_xxh64_wrapper((unsigned char *)pgfid_bname, strlen(pgfid_bname),</div><div class='add'>+                     GF_XXHSUM64_DEFAULT_SEED, xxh64);</div><div class='add'>+</div><div class='add'>+    key_size = SLEN(GFID2PATH_XATTR_KEY_PREFIX) + GF_XXH64_DIGEST_LENGTH * 2 +</div><div class='add'>+               1;</div><div class='add'>+    key = alloca(key_size);</div><div class='add'>+    snprintf(key, key_size, GFID2PATH_XATTR_KEY_PREFIX "%s", xxh64);</div><div class='add'>+</div><div class='add'>+    val_size = UUID_CANONICAL_FORM_LEN + NAME_MAX + 2;</div><div class='add'>+    val = alloca(val_size);</div><div class='add'>+    snprintf(val, val_size, "%s/%s", pgfid, bname);</div><div class='add'>+</div><div class='add'>+    /* Set the Xattr, ignore if same key xattr already exists */</div><div class='add'>+    ret = sys_lsetxattr(file_path, key, val, strlen(val), XATTR_CREATE);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (errno == EEXIST) {</div><div class='add'>+            printf("Xattr already exists, ignoring..\n");</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        file_path = argv[1];</div><div class='del'>-        file_path1 = strdup (file_path);</div><div class='del'>-        file_path2 = strdup (file_path);</div><div class='del'>-</div><div class='del'>-        dname = dirname (file_path1);</div><div class='del'>-        bname = basename (file_path2);</div><div class='del'>-</div><div class='del'>-        /* Get GFID of Parent directory */</div><div class='del'>-        ret_size = sys_lgetxattr (dname, GFID_XATTR_KEY, pgfid_raw, GFID_SIZE);</div><div class='del'>-        if (ret_size != GFID_SIZE) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "Failed to get GFID of parent directory. dir=%s\n",</div><div class='del'>-                         dname);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Convert to UUID format */</div><div class='del'>-        if (uuid_utoa_r (pgfid_raw, pgfid) == NULL) {</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "Failed to format GFID of parent directory. "</div><div class='del'>-                         "dir=%s GFID=%s\n", dname, pgfid_raw);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Find xxhash for PGFID/BaseName */</div><div class='del'>-        snprintf (pgfid_bname, sizeof (pgfid_bname), "%s/%s", pgfid, bname);</div><div class='del'>-        gf_xxh64_wrapper (</div><div class='del'>-                        (unsigned char *)pgfid_bname,</div><div class='del'>-                        strlen (pgfid_bname),</div><div class='del'>-                        GF_XXHSUM64_DEFAULT_SEED,</div><div class='del'>-                        xxh64</div><div class='del'>-                        );</div><div class='del'>-</div><div class='del'>-        key_size = SLEN (GFID2PATH_XATTR_KEY_PREFIX) +</div><div class='del'>-                GF_XXH64_DIGEST_LENGTH*2+1;</div><div class='del'>-        key = alloca (key_size);</div><div class='del'>-        snprintf (key, key_size, GFID2PATH_XATTR_KEY_PREFIX"%s", xxh64);</div><div class='del'>-</div><div class='del'>-        val_size = UUID_CANONICAL_FORM_LEN + NAME_MAX + 2;</div><div class='del'>-        val = alloca (val_size);</div><div class='del'>-        snprintf (val, val_size, "%s/%s", pgfid, bname);</div><div class='del'>-</div><div class='del'>-        /* Set the Xattr, ignore if same key xattr already exists */</div><div class='del'>-        ret = sys_lsetxattr (file_path, key, val, strlen(val), XATTR_CREATE);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (errno == EEXIST) {</div><div class='del'>-                        printf ("Xattr already exists, ignoring..\n");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fprintf (stderr,</div><div class='del'>-                         "Failed to set gfid2path xattr. errno=%d\n error=%s",</div><div class='del'>-                         errno, strerror(errno));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        fprintf(stderr, "Failed to set gfid2path xattr. errno=%d\n error=%s",</div><div class='add'>+                errno, strerror(errno));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        printf ("Success. file=%s key=%s value=%s\n", file_path, key, val);</div><div class='add'>+    printf("Success. file=%s key=%s value=%s\n", file_path, key, val);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (file_path1 != NULL)</div><div class='del'>-                free (file_path1);</div><div class='add'>+    if (file_path1 != NULL)</div><div class='add'>+        free(file_path1);</div><div class='ctx'> </div><div class='del'>-        if (file_path2 != NULL)</div><div class='del'>-                free (file_path2);</div><div class='add'>+    if (file_path2 != NULL)</div><div class='add'>+        free(file_path2);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c<br/>index 3a32ebc31a4..eb0e7330a91 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-common.c</a></div><div class='hunk'>@@ -42,157 +42,155 @@</div><div class='ctx'> #include "afr-messages.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_quorum_errno (afr_private_t *priv)</div><div class='add'>+afr_quorum_errno(afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        return ENOTCONN;</div><div class='add'>+    return ENOTCONN;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fav_child_reset_sink_xattrs (void *opaque);</div><div class='add'>+afr_fav_child_reset_sink_xattrs(void *opaque);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fav_child_reset_sink_xattrs_cbk (int ret, call_frame_t *frame,</div><div class='del'>-                                     void *opaque);</div><div class='add'>+afr_fav_child_reset_sink_xattrs_cbk(int ret, call_frame_t *frame, void *opaque);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_discover_done (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_discover_done(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_consistent_io_possible (afr_local_t *local, afr_private_t *priv,</div><div class='del'>-                               int32_t *op_errno)</div><div class='del'>-{</div><div class='del'>-        if (priv-&gt;consistent_io &amp;&amp; local-&gt;call_count != priv-&gt;child_count) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        AFR_MSG_SUBVOLS_DOWN, "All subvolumes are not up");</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = ENOTCONN;</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-        return _gf_true;</div><div class='add'>+afr_is_consistent_io_possible(afr_local_t *local, afr_private_t *priv,</div><div class='add'>+                              int32_t *op_errno)</div><div class='add'>+{</div><div class='add'>+    if (priv-&gt;consistent_io &amp;&amp; local-&gt;call_count != priv-&gt;child_count) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SUBVOLS_DOWN,</div><div class='add'>+               "All subvolumes are not up");</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOTCONN;</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_frame_t *</div><div class='del'>-afr_copy_frame (call_frame_t *base)</div><div class='add'>+afr_copy_frame(call_frame_t *base)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	call_frame_t *frame = NULL;</div><div class='del'>-	int op_errno = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='ctx'> </div><div class='del'>-	frame = copy_frame (base);</div><div class='del'>-	if (!frame)</div><div class='del'>-		return NULL;</div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local) {</div><div class='del'>-		AFR_STACK_DESTROY (frame);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    frame = copy_frame(base);</div><div class='add'>+    if (!frame)</div><div class='add'>+        return NULL;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local) {</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return frame;</div><div class='add'>+    return frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Check if an entry or inode could be undergoing a transaction. */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_possibly_under_txn (afr_transaction_type type, afr_local_t *local,</div><div class='del'>-                           xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        int tmp = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        GF_UNUSED char *key = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (type == AFR_ENTRY_TRANSACTION)</div><div class='del'>-                key = GLUSTERFS_PARENT_ENTRYLK;</div><div class='del'>-        else if (type == AFR_DATA_TRANSACTION)</div><div class='del'>-                /*FIXME: Use GLUSTERFS_INODELK_DOM_COUNT etc. once</div><div class='del'>-                 * pl_inodelk_xattr_fill supports separate keys for different</div><div class='del'>-                 * domains.*/</div><div class='del'>-                key = GLUSTERFS_INODELK_COUNT;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!local-&gt;replies[i].xdata)</div><div class='del'>-			continue;</div><div class='del'>-		if (dict_get_int32 (local-&gt;replies[i].xdata, key, &amp;tmp) == 0)</div><div class='del'>-			if (tmp)</div><div class='del'>-				return _gf_true;</div><div class='del'>-	}</div><div class='add'>+afr_is_possibly_under_txn(afr_transaction_type type, afr_local_t *local,</div><div class='add'>+                          xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int tmp = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    GF_UNUSED char *key = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (type == AFR_ENTRY_TRANSACTION)</div><div class='add'>+        key = GLUSTERFS_PARENT_ENTRYLK;</div><div class='add'>+    else if (type == AFR_DATA_TRANSACTION)</div><div class='add'>+        /*FIXME: Use GLUSTERFS_INODELK_DOM_COUNT etc. once</div><div class='add'>+         * pl_inodelk_xattr_fill supports separate keys for different</div><div class='add'>+         * domains.*/</div><div class='add'>+        key = GLUSTERFS_INODELK_COUNT;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].xdata)</div><div class='add'>+            continue;</div><div class='add'>+        if (dict_get_int32(local-&gt;replies[i].xdata, key, &amp;tmp) == 0)</div><div class='add'>+            if (tmp)</div><div class='add'>+                return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_inode_ctx_destroy (afr_inode_ctx_t *ctx)</div><div class='add'>+afr_inode_ctx_destroy(afr_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                return;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; AFR_NUM_CHANGE_LOGS; i++) {</div><div class='del'>-                GF_FREE (ctx-&gt;pre_op_done[i]);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; AFR_NUM_CHANGE_LOGS; i++) {</div><div class='add'>+        GF_FREE(ctx-&gt;pre_op_done[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    GF_FREE(ctx);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_ctx_get (xlator_t *this, inode_t *inode, afr_inode_ctx_t **ctx)</div><div class='del'>-{</div><div class='del'>-        uint64_t        ctx_int   = 0;</div><div class='del'>-        int             ret       = -1;</div><div class='del'>-        int             i         = -1;</div><div class='del'>-        int             num_locks = -1;</div><div class='del'>-        afr_inode_ctx_t *ictx     = NULL;</div><div class='del'>-        afr_lock_t      *lock     = NULL;</div><div class='del'>-        afr_private_t   *priv     = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctx_int);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                *ctx = (afr_inode_ctx_t *)ctx_int;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ictx = GF_CALLOC (1, sizeof (afr_inode_ctx_t), gf_afr_mt_inode_ctx_t);</div><div class='del'>-        if (!ictx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; AFR_NUM_CHANGE_LOGS; i++) {</div><div class='del'>-                ictx-&gt;pre_op_done[i] = GF_CALLOC (sizeof *ictx-&gt;pre_op_done[i],</div><div class='del'>-                                                  priv-&gt;child_count,</div><div class='del'>-                                                  gf_afr_mt_int32_t);</div><div class='del'>-                if (!ictx-&gt;pre_op_done[i]) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        num_locks = sizeof(ictx-&gt;lock)/sizeof(afr_lock_t);</div><div class='del'>-        for (i = 0; i &lt; num_locks; i++) {</div><div class='del'>-                lock = &amp;ictx-&gt;lock[i];</div><div class='del'>-                INIT_LIST_HEAD (&amp;lock-&gt;post_op);</div><div class='del'>-                INIT_LIST_HEAD (&amp;lock-&gt;frozen);</div><div class='del'>-                INIT_LIST_HEAD (&amp;lock-&gt;waiting);</div><div class='del'>-                INIT_LIST_HEAD (&amp;lock-&gt;owners);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx_int = (uint64_t)ictx;</div><div class='del'>-        ret = __inode_ctx_set (inode, this, &amp;ctx_int);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ictx-&gt;spb_choice = -1;</div><div class='del'>-        ictx-&gt;read_subvol = 0;</div><div class='del'>-        ictx-&gt;write_subvol = 0;</div><div class='del'>-        ictx-&gt;lock_count = 0;</div><div class='del'>-        ret = 0;</div><div class='del'>-        *ctx = ictx;</div><div class='add'>+__afr_inode_ctx_get(xlator_t *this, inode_t *inode, afr_inode_ctx_t **ctx)</div><div class='add'>+{</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int num_locks = -1;</div><div class='add'>+    afr_inode_ctx_t *ictx = NULL;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;ctx_int);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        *ctx = (afr_inode_ctx_t *)ctx_int;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ictx = GF_CALLOC(1, sizeof(afr_inode_ctx_t), gf_afr_mt_inode_ctx_t);</div><div class='add'>+    if (!ictx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; AFR_NUM_CHANGE_LOGS; i++) {</div><div class='add'>+        ictx-&gt;pre_op_done[i] = GF_CALLOC(sizeof *ictx-&gt;pre_op_done[i],</div><div class='add'>+                                         priv-&gt;child_count, gf_afr_mt_int32_t);</div><div class='add'>+        if (!ictx-&gt;pre_op_done[i]) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    num_locks = sizeof(ictx-&gt;lock) / sizeof(afr_lock_t);</div><div class='add'>+    for (i = 0; i &lt; num_locks; i++) {</div><div class='add'>+        lock = &amp;ictx-&gt;lock[i];</div><div class='add'>+        INIT_LIST_HEAD(&amp;lock-&gt;post_op);</div><div class='add'>+        INIT_LIST_HEAD(&amp;lock-&gt;frozen);</div><div class='add'>+        INIT_LIST_HEAD(&amp;lock-&gt;waiting);</div><div class='add'>+        INIT_LIST_HEAD(&amp;lock-&gt;owners);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx_int = (uint64_t)ictx;</div><div class='add'>+    ret = __inode_ctx_set(inode, this, &amp;ctx_int);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ictx-&gt;spb_choice = -1;</div><div class='add'>+    ictx-&gt;read_subvol = 0;</div><div class='add'>+    ictx-&gt;write_subvol = 0;</div><div class='add'>+    ictx-&gt;lock_count = 0;</div><div class='add'>+    ret = 0;</div><div class='add'>+    *ctx = ictx;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                afr_inode_ctx_destroy (ictx);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        afr_inode_ctx_destroy(ictx);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -226,1723 +224,1670 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_set_in_flight_sb_status (xlator_t *this, afr_local_t *local,</div><div class='del'>-                               inode_t *inode)</div><div class='del'>-{</div><div class='del'>-        int                 i               = 0;</div><div class='del'>-        int                 txn_type        = 0;</div><div class='del'>-        int                 count           = 0;</div><div class='del'>-        int                 index           = -1;</div><div class='del'>-        uint16_t            datamap_old     = 0;</div><div class='del'>-        uint16_t            metadatamap_old = 0;</div><div class='del'>-        uint16_t            datamap         = 0;</div><div class='del'>-        uint16_t            metadatamap     = 0;</div><div class='del'>-        uint16_t            tmp_map         = 0;</div><div class='del'>-        uint16_t            mask            = 0;</div><div class='del'>-        uint32_t            event           = 0;</div><div class='del'>-        uint64_t            val             = 0;</div><div class='del'>-        afr_private_t      *priv            = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        txn_type = local-&gt;transaction.type;</div><div class='del'>-</div><div class='del'>-        if (txn_type == AFR_DATA_TRANSACTION)</div><div class='del'>-                val = local-&gt;inode_ctx-&gt;write_subvol;</div><div class='del'>-        else</div><div class='del'>-                val = local-&gt;inode_ctx-&gt;read_subvol;</div><div class='del'>-</div><div class='del'>-        metadatamap_old = metadatamap = (val &amp; 0x000000000000ffff);</div><div class='del'>-        datamap_old = datamap = (val &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='del'>-        event = (val &amp; 0xffffffff00000000) &gt;&gt; 32;</div><div class='del'>-</div><div class='del'>-        if (txn_type == AFR_DATA_TRANSACTION)</div><div class='del'>-                tmp_map = datamap;</div><div class='del'>-        else if (txn_type == AFR_METADATA_TRANSACTION)</div><div class='del'>-                tmp_map = metadatamap;</div><div class='del'>-</div><div class='del'>-        count = gf_bits_count (tmp_map);</div><div class='del'>-</div><div class='del'>-        if (count == 1)</div><div class='del'>-                index = gf_bits_index (tmp_map);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                mask = 0;</div><div class='del'>-                if (!local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                mask = 1 &lt;&lt; i;</div><div class='del'>-                if (txn_type == AFR_METADATA_TRANSACTION)</div><div class='del'>-                        metadatamap &amp;= ~mask;</div><div class='del'>-                else if (txn_type == AFR_DATA_TRANSACTION)</div><div class='del'>-                        datamap &amp;= ~mask;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (txn_type) {</div><div class='add'>+__afr_set_in_flight_sb_status(xlator_t *this, afr_local_t *local,</div><div class='add'>+                              inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int txn_type = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int index = -1;</div><div class='add'>+    uint16_t datamap_old = 0;</div><div class='add'>+    uint16_t metadatamap_old = 0;</div><div class='add'>+    uint16_t datamap = 0;</div><div class='add'>+    uint16_t metadatamap = 0;</div><div class='add'>+    uint16_t tmp_map = 0;</div><div class='add'>+    uint16_t mask = 0;</div><div class='add'>+    uint32_t event = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    txn_type = local-&gt;transaction.type;</div><div class='add'>+</div><div class='add'>+    if (txn_type == AFR_DATA_TRANSACTION)</div><div class='add'>+        val = local-&gt;inode_ctx-&gt;write_subvol;</div><div class='add'>+    else</div><div class='add'>+        val = local-&gt;inode_ctx-&gt;read_subvol;</div><div class='add'>+</div><div class='add'>+    metadatamap_old = metadatamap = (val &amp; 0x000000000000ffff);</div><div class='add'>+    datamap_old = datamap = (val &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='add'>+    event = (val &amp; 0xffffffff00000000) &gt;&gt; 32;</div><div class='add'>+</div><div class='add'>+    if (txn_type == AFR_DATA_TRANSACTION)</div><div class='add'>+        tmp_map = datamap;</div><div class='add'>+    else if (txn_type == AFR_METADATA_TRANSACTION)</div><div class='add'>+        tmp_map = metadatamap;</div><div class='add'>+</div><div class='add'>+    count = gf_bits_count(tmp_map);</div><div class='add'>+</div><div class='add'>+    if (count == 1)</div><div class='add'>+        index = gf_bits_index(tmp_map);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        mask = 0;</div><div class='add'>+        if (!local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        mask = 1 &lt;&lt; i;</div><div class='add'>+        if (txn_type == AFR_METADATA_TRANSACTION)</div><div class='add'>+            metadatamap &amp;= ~mask;</div><div class='add'>+        else if (txn_type == AFR_DATA_TRANSACTION)</div><div class='add'>+            datamap &amp;= ~mask;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (txn_type) {</div><div class='ctx'>         case AFR_METADATA_TRANSACTION:</div><div class='del'>-                if ((metadatamap_old != 0) &amp;&amp; (metadatamap == 0) &amp;&amp;</div><div class='del'>-                    (count == 1)) {</div><div class='del'>-                        local-&gt;transaction.in_flight_sb_errno =</div><div class='del'>-                                                local-&gt;replies[index].op_errno;</div><div class='del'>-                        local-&gt;transaction.in_flight_sb = _gf_true;</div><div class='del'>-                        metadatamap |= (1 &lt;&lt; index);</div><div class='del'>-                }</div><div class='del'>-                if (metadatamap_old != metadatamap) {</div><div class='del'>-                        event = 0;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if ((metadatamap_old != 0) &amp;&amp; (metadatamap == 0) &amp;&amp; (count == 1)) {</div><div class='add'>+                local-&gt;transaction.in_flight_sb_errno = local-&gt;replies[index]</div><div class='add'>+                                                            .op_errno;</div><div class='add'>+                local-&gt;transaction.in_flight_sb = _gf_true;</div><div class='add'>+                metadatamap |= (1 &lt;&lt; index);</div><div class='add'>+            }</div><div class='add'>+            if (metadatamap_old != metadatamap) {</div><div class='add'>+                event = 0;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_DATA_TRANSACTION:</div><div class='del'>-                if ((datamap_old != 0) &amp;&amp; (datamap == 0) &amp;&amp; (count == 1)) {</div><div class='del'>-                        local-&gt;transaction.in_flight_sb_errno =</div><div class='del'>-                                                local-&gt;replies[index].op_errno;</div><div class='del'>-                        local-&gt;transaction.in_flight_sb = _gf_true;</div><div class='del'>-                        datamap |= (1 &lt;&lt; index);</div><div class='del'>-                }</div><div class='del'>-                if (datamap_old != datamap)</div><div class='del'>-                        event = 0;</div><div class='del'>-                break;</div><div class='add'>+            if ((datamap_old != 0) &amp;&amp; (datamap == 0) &amp;&amp; (count == 1)) {</div><div class='add'>+                local-&gt;transaction.in_flight_sb_errno = local-&gt;replies[index]</div><div class='add'>+                                                            .op_errno;</div><div class='add'>+                local-&gt;transaction.in_flight_sb = _gf_true;</div><div class='add'>+                datamap |= (1 &lt;&lt; index);</div><div class='add'>+            }</div><div class='add'>+            if (datamap_old != datamap)</div><div class='add'>+                event = 0;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        val = ((uint64_t) metadatamap) |</div><div class='del'>-                (((uint64_t) datamap) &lt;&lt; 16) |</div><div class='del'>-                (((uint64_t) event) &lt;&lt; 32);</div><div class='add'>+    val = ((uint64_t)metadatamap) | (((uint64_t)datamap) &lt;&lt; 16) |</div><div class='add'>+          (((uint64_t)event) &lt;&lt; 32);</div><div class='ctx'> </div><div class='del'>-        if (txn_type == AFR_DATA_TRANSACTION)</div><div class='del'>-                local-&gt;inode_ctx-&gt;write_subvol = val;</div><div class='del'>-        local-&gt;inode_ctx-&gt;read_subvol = val;</div><div class='add'>+    if (txn_type == AFR_DATA_TRANSACTION)</div><div class='add'>+        local-&gt;inode_ctx-&gt;write_subvol = val;</div><div class='add'>+    local-&gt;inode_ctx-&gt;read_subvol = val;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_symmetric_error (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_is_symmetric_error(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        int i_errno = 0;</div><div class='del'>-        gf_boolean_t matching_errors = _gf_true;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int i_errno = 0;</div><div class='add'>+    gf_boolean_t matching_errors = _gf_true;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-                if (local-&gt;replies[i].op_ret != -1) {</div><div class='del'>-                        /* Operation succeeded on at least one subvol,</div><div class='del'>-                           so it is not a failed-everywhere situation.</div><div class='del'>-                        */</div><div class='del'>-                        matching_errors = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                i_errno = local-&gt;replies[i].op_errno;</div><div class='del'>-</div><div class='del'>-                if (i_errno == ENOTCONN) {</div><div class='del'>-                        /* ENOTCONN is not a symmetric error. We do not</div><div class='del'>-                           know if the operation was performed on the</div><div class='del'>-                           backend or not.</div><div class='del'>-                        */</div><div class='del'>-                        matching_errors = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret != -1) {</div><div class='add'>+            /* Operation succeeded on at least one subvol,</div><div class='add'>+               so it is not a failed-everywhere situation.</div><div class='add'>+            */</div><div class='add'>+            matching_errors = _gf_false;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        i_errno = local-&gt;replies[i].op_errno;</div><div class='ctx'> </div><div class='del'>-                if (!op_errno) {</div><div class='del'>-                        op_errno = i_errno;</div><div class='del'>-                } else if (op_errno != i_errno) {</div><div class='del'>-                        /* Mismatching op_errno's */</div><div class='del'>-                        matching_errors = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (i_errno == ENOTCONN) {</div><div class='add'>+            /* ENOTCONN is not a symmetric error. We do not</div><div class='add'>+               know if the operation was performed on the</div><div class='add'>+               backend or not.</div><div class='add'>+            */</div><div class='add'>+            matching_errors = _gf_false;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!op_errno) {</div><div class='add'>+            op_errno = i_errno;</div><div class='add'>+        } else if (op_errno != i_errno) {</div><div class='add'>+            /* Mismatching op_errno's */</div><div class='add'>+            matching_errors = _gf_false;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return matching_errors;</div><div class='add'>+    return matching_errors;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_set_in_flight_sb_status (xlator_t *this, call_frame_t *frame,</div><div class='del'>-                             inode_t *inode)</div><div class='add'>+afr_set_in_flight_sb_status(xlator_t *this, call_frame_t *frame, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        /* If this transaction saw no failures, then exit. */</div><div class='del'>-        if (AFR_COUNT (local-&gt;transaction.failed_subvols,</div><div class='del'>-                       priv-&gt;child_count) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    /* If this transaction saw no failures, then exit. */</div><div class='add'>+    if (AFR_COUNT(local-&gt;transaction.failed_subvols, priv-&gt;child_count) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (afr_is_symmetric_error (frame, this))</div><div class='del'>-                return 0;</div><div class='add'>+    if (afr_is_symmetric_error(frame, this))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_set_in_flight_sb_status (this, local, inode);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_set_in_flight_sb_status(this, local, inode);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_read_subvol_get_small (inode_t *inode, xlator_t *this,</div><div class='del'>-				   unsigned char *data, unsigned char *metadata,</div><div class='del'>-				   int *event_p)</div><div class='del'>-{</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	uint16_t datamap = 0;</div><div class='del'>-	uint16_t metadatamap = 0;</div><div class='del'>-	uint32_t event = 0;</div><div class='del'>-	uint64_t val = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		return ret;</div><div class='add'>+__afr_inode_read_subvol_get_small(inode_t *inode, xlator_t *this,</div><div class='add'>+                                  unsigned char *data, unsigned char *metadata,</div><div class='add'>+                                  int *event_p)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint16_t datamap = 0;</div><div class='add'>+    uint16_t metadatamap = 0;</div><div class='add'>+    uint32_t event = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        val = ctx-&gt;read_subvol;</div><div class='add'>+    val = ctx-&gt;read_subvol;</div><div class='ctx'> </div><div class='del'>-	metadatamap = (val &amp; 0x000000000000ffff);</div><div class='del'>-	datamap =     (val &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='del'>-	event =       (val &amp; 0xffffffff00000000) &gt;&gt; 32;</div><div class='add'>+    metadatamap = (val &amp; 0x000000000000ffff);</div><div class='add'>+    datamap = (val &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='add'>+    event = (val &amp; 0xffffffff00000000) &gt;&gt; 32;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (metadata)</div><div class='del'>-			metadata[i] = (metadatamap &gt;&gt; i) &amp; 1;</div><div class='del'>-		if (data)</div><div class='del'>-			data[i] = (datamap &gt;&gt; i) &amp; 1;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (metadata)</div><div class='add'>+            metadata[i] = (metadatamap &gt;&gt; i) &amp; 1;</div><div class='add'>+        if (data)</div><div class='add'>+            data[i] = (datamap &gt;&gt; i) &amp; 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (event_p)</div><div class='del'>-		*event_p = event;</div><div class='del'>-	return ret;</div><div class='add'>+    if (event_p)</div><div class='add'>+        *event_p = event;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_inode_read_subvol_set_small (inode_t *inode, xlator_t *this,</div><div class='del'>-				   unsigned char *data, unsigned char *metadata,</div><div class='del'>-				   int event)</div><div class='add'>+__afr_inode_read_subvol_set_small(inode_t *inode, xlator_t *this,</div><div class='add'>+                                  unsigned char *data, unsigned char *metadata,</div><div class='add'>+                                  int event)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	uint16_t datamap = 0;</div><div class='del'>-	uint16_t metadatamap = 0;</div><div class='del'>-	uint64_t val = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint16_t datamap = 0;</div><div class='add'>+    uint16_t metadatamap = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (data[i])</div><div class='del'>-			datamap |= (1 &lt;&lt; i);</div><div class='del'>-		if (metadata[i])</div><div class='del'>-			metadatamap |= (1 &lt;&lt; i);</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (data[i])</div><div class='add'>+            datamap |= (1 &lt;&lt; i);</div><div class='add'>+        if (metadata[i])</div><div class='add'>+            metadatamap |= (1 &lt;&lt; i);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	val = ((uint64_t) metadatamap) |</div><div class='del'>-		(((uint64_t) datamap) &lt;&lt; 16) |</div><div class='del'>-		(((uint64_t) event) &lt;&lt; 32);</div><div class='add'>+    val = ((uint64_t)metadatamap) | (((uint64_t)datamap) &lt;&lt; 16) |</div><div class='add'>+          (((uint64_t)event) &lt;&lt; 32);</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;read_subvol = val;</div><div class='add'>+    ctx-&gt;read_subvol = val;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_event_gen_reset_small (inode_t *inode, xlator_t *this)</div><div class='add'>+__afr_inode_event_gen_reset_small(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	int               ret         = -1;</div><div class='del'>-	uint16_t          datamap     = 0;</div><div class='del'>-	uint16_t          metadatamap = 0;</div><div class='del'>-	uint32_t          event       = 0;</div><div class='del'>-	uint64_t          val         = 0;</div><div class='del'>-        afr_inode_ctx_t  *ctx         = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint16_t datamap = 0;</div><div class='add'>+    uint16_t metadatamap = 0;</div><div class='add'>+    uint32_t event = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-	ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        val = ctx-&gt;read_subvol;</div><div class='add'>+    val = ctx-&gt;read_subvol;</div><div class='ctx'> </div><div class='del'>-	metadatamap = (val &amp; 0x000000000000ffff) &gt;&gt; 0;</div><div class='del'>-	datamap =     (val &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='del'>-	event = 0;</div><div class='add'>+    metadatamap = (val &amp; 0x000000000000ffff) &gt;&gt; 0;</div><div class='add'>+    datamap = (val &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='add'>+    event = 0;</div><div class='ctx'> </div><div class='del'>-	val = ((uint64_t) metadatamap) |</div><div class='del'>-		(((uint64_t) datamap) &lt;&lt; 16) |</div><div class='del'>-		(((uint64_t) event) &lt;&lt; 32);</div><div class='add'>+    val = ((uint64_t)metadatamap) | (((uint64_t)datamap) &lt;&lt; 16) |</div><div class='add'>+          (((uint64_t)event) &lt;&lt; 32);</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;read_subvol = val;</div><div class='add'>+    ctx-&gt;read_subvol = val;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_inode_read_subvol_get (inode_t *inode, xlator_t *this,</div><div class='del'>-			     unsigned char *data, unsigned char *metadata,</div><div class='del'>-			     int *event_p)</div><div class='add'>+__afr_inode_read_subvol_get(inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='add'>+                            unsigned char *metadata, int *event_p)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	if (priv-&gt;child_count &lt;= 16)</div><div class='del'>-		ret = __afr_inode_read_subvol_get_small (inode, this, data,</div><div class='del'>-							 metadata, event_p);</div><div class='del'>-	else</div><div class='del'>-		/* TBD: allocate structure with array and read from it */</div><div class='del'>-		ret = -1;</div><div class='add'>+    if (priv-&gt;child_count &lt;= 16)</div><div class='add'>+        ret = __afr_inode_read_subvol_get_small(inode, this, data, metadata,</div><div class='add'>+                                                event_p);</div><div class='add'>+    else</div><div class='add'>+        /* TBD: allocate structure with array and read from it */</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_split_brain_choice_get (inode_t *inode, xlator_t *this,</div><div class='del'>-			            int *spb_choice)</div><div class='add'>+__afr_inode_split_brain_choice_get(inode_t *inode, xlator_t *this,</div><div class='add'>+                                   int *spb_choice)</div><div class='ctx'> {</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        *spb_choice = ctx-&gt;spb_choice;</div><div class='del'>-        return 0;</div><div class='add'>+    *spb_choice = ctx-&gt;spb_choice;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_read_subvol_set (inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='del'>-			     unsigned char *metadata, int event)</div><div class='add'>+__afr_inode_read_subvol_set(inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='add'>+                            unsigned char *metadata, int event)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	if (priv-&gt;child_count &lt;= 16)</div><div class='del'>-		ret = __afr_inode_read_subvol_set_small (inode, this, data,</div><div class='del'>-							 metadata, event);</div><div class='del'>-	else</div><div class='del'>-		ret = -1;</div><div class='add'>+    if (priv-&gt;child_count &lt;= 16)</div><div class='add'>+        ret = __afr_inode_read_subvol_set_small(inode, this, data, metadata,</div><div class='add'>+                                                event);</div><div class='add'>+    else</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_split_brain_choice_set (inode_t *inode, xlator_t *this,</div><div class='del'>-                                    int spb_choice)</div><div class='add'>+__afr_inode_split_brain_choice_set(inode_t *inode, xlator_t *this,</div><div class='add'>+                                   int spb_choice)</div><div class='ctx'> {</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='del'>-	int ret = -1;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;spb_choice = spb_choice;</div><div class='add'>+    ctx-&gt;spb_choice = spb_choice;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_inode_event_gen_reset (inode_t *inode, xlator_t *this)</div><div class='add'>+__afr_inode_event_gen_reset(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	if (priv-&gt;child_count &lt;= 16)</div><div class='del'>-		ret = __afr_inode_event_gen_reset_small (inode, this);</div><div class='del'>-	else</div><div class='del'>-		ret = -1;</div><div class='add'>+    if (priv-&gt;child_count &lt;= 16)</div><div class='add'>+        ret = __afr_inode_event_gen_reset_small(inode, this);</div><div class='add'>+    else</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_inode_read_subvol_get (inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='del'>-			   unsigned char *metadata, int *event_p)</div><div class='add'>+afr_inode_read_subvol_get(inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='add'>+                          unsigned char *metadata, int *event_p)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		ret = __afr_inode_read_subvol_get (inode, this, data,</div><div class='del'>-						   metadata, event_p);</div><div class='del'>-	}</div><div class='del'>-	UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_read_subvol_get(inode, this, data, metadata, event_p);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_get_readable (call_frame_t *frame, inode_t *inode, xlator_t *this,</div><div class='add'>+afr_inode_get_readable(call_frame_t *frame, inode_t *inode, xlator_t *this,</div><div class='ctx'>                        unsigned char *readable, int *event_p, int type)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        unsigned char *data = alloca0 (priv-&gt;child_count);</div><div class='del'>-        unsigned char *metadata = alloca0 (priv-&gt;child_count);</div><div class='del'>-        int data_count = 0;</div><div class='del'>-        int metadata_count = 0;</div><div class='del'>-        int event_generation = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = afr_inode_read_subvol_get (inode, this, data, metadata,</div><div class='del'>-                                         &amp;event_generation);</div><div class='del'>-        if (ret == -1)</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    unsigned char *data = alloca0(priv-&gt;child_count);</div><div class='add'>+    unsigned char *metadata = alloca0(priv-&gt;child_count);</div><div class='add'>+    int data_count = 0;</div><div class='add'>+    int metadata_count = 0;</div><div class='add'>+    int event_generation = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = afr_inode_read_subvol_get(inode, this, data, metadata,</div><div class='add'>+                                    &amp;event_generation);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        return -EIO;</div><div class='add'>+</div><div class='add'>+    data_count = AFR_COUNT(data, priv-&gt;child_count);</div><div class='add'>+    metadata_count = AFR_COUNT(metadata, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        /* For directories, allow even if it is in data split-brain. */</div><div class='add'>+        if (type == AFR_METADATA_TRANSACTION || local-&gt;op == GF_FOP_STAT ||</div><div class='add'>+            local-&gt;op == GF_FOP_FSTAT) {</div><div class='add'>+            if (!metadata_count)</div><div class='ctx'>                 return -EIO;</div><div class='del'>-</div><div class='del'>-        data_count = AFR_COUNT (data, priv-&gt;child_count);</div><div class='del'>-        metadata_count = AFR_COUNT (metadata, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                /* For directories, allow even if it is in data split-brain. */</div><div class='del'>-                if (type == AFR_METADATA_TRANSACTION ||</div><div class='del'>-                    local-&gt;op == GF_FOP_STAT || local-&gt;op == GF_FOP_FSTAT) {</div><div class='del'>-                        if (!metadata_count)</div><div class='del'>-                                return -EIO;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                /* For files, abort in case of data/metadata split-brain. */</div><div class='del'>-                if (!data_count || !metadata_count) {</div><div class='del'>-                        return -EIO;</div><div class='del'>-                }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (type == AFR_METADATA_TRANSACTION &amp;&amp; readable)</div><div class='del'>-                memcpy (readable, metadata, priv-&gt;child_count * sizeof *metadata);</div><div class='del'>-        if (type == AFR_DATA_TRANSACTION &amp;&amp; readable) {</div><div class='del'>-                if (!data_count)</div><div class='del'>-                        memcpy (readable, local-&gt;child_up,</div><div class='del'>-                                priv-&gt;child_count * sizeof *readable);</div><div class='del'>-                else</div><div class='del'>-                        memcpy (readable, data, priv-&gt;child_count * sizeof *data);</div><div class='add'>+    } else {</div><div class='add'>+        /* For files, abort in case of data/metadata split-brain. */</div><div class='add'>+        if (!data_count || !metadata_count) {</div><div class='add'>+            return -EIO;</div><div class='ctx'>         }</div><div class='del'>-        if (event_p)</div><div class='del'>-                *event_p = event_generation;</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (type == AFR_METADATA_TRANSACTION &amp;&amp; readable)</div><div class='add'>+        memcpy(readable, metadata, priv-&gt;child_count * sizeof *metadata);</div><div class='add'>+    if (type == AFR_DATA_TRANSACTION &amp;&amp; readable) {</div><div class='add'>+        if (!data_count)</div><div class='add'>+            memcpy(readable, local-&gt;child_up,</div><div class='add'>+                   priv-&gt;child_count * sizeof *readable);</div><div class='add'>+        else</div><div class='add'>+            memcpy(readable, data, priv-&gt;child_count * sizeof *data);</div><div class='add'>+    }</div><div class='add'>+    if (event_p)</div><div class='add'>+        *event_p = event_generation;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_split_brain_choice_get (inode_t *inode, xlator_t *this,</div><div class='del'>-                                  int *spb_choice)</div><div class='add'>+afr_inode_split_brain_choice_get(inode_t *inode, xlator_t *this,</div><div class='add'>+                                 int *spb_choice)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-	LOCK(&amp;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		ret = __afr_inode_split_brain_choice_get (inode, this,</div><div class='del'>-                                                          spb_choice);</div><div class='del'>-	}</div><div class='del'>-	UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_split_brain_choice_get(inode, this, spb_choice);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_inode_read_subvol_set (inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='del'>-			   unsigned char *metadata, int event)</div><div class='add'>+afr_inode_read_subvol_set(inode_t *inode, xlator_t *this, unsigned char *data,</div><div class='add'>+                          unsigned char *metadata, int event)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		ret = __afr_inode_read_subvol_set (inode, this, data, metadata,</div><div class='del'>-						   event);</div><div class='del'>-	}</div><div class='del'>-	UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_read_subvol_set(inode, this, data, metadata, event);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_inode_split_brain_choice_set (inode_t *inode, xlator_t *this,</div><div class='del'>-                                  int spb_choice)</div><div class='add'>+afr_inode_split_brain_choice_set(inode_t *inode, xlator_t *this, int spb_choice)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-	LOCK(&amp;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		ret = __afr_inode_split_brain_choice_set (inode, this,</div><div class='del'>-                                                          spb_choice);</div><div class='del'>-	}</div><div class='del'>-	UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_split_brain_choice_set(inode, this, spb_choice);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* The caller of this should perform afr_inode_refresh, if this function</div><div class='ctx'>  * returns _gf_true</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_inode_refresh_reqd (inode_t *inode, xlator_t *this,</div><div class='del'>-                           int event_gen1, int event_gen2)</div><div class='add'>+afr_is_inode_refresh_reqd(inode_t *inode, xlator_t *this, int event_gen1,</div><div class='add'>+                          int event_gen2)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t     need_refresh = _gf_false;</div><div class='del'>-        afr_inode_ctx_t  *ctx         = NULL;</div><div class='del'>-        int              ret          = -1;</div><div class='add'>+    gf_boolean_t need_refresh = _gf_false;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                need_refresh = ctx-&gt;need_refresh;</div><div class='del'>-                /* Hoping that the caller will do inode_refresh followed by</div><div class='del'>-                 * this, hence setting the need_refresh to false */</div><div class='del'>-                ctx-&gt;need_refresh = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        need_refresh = ctx-&gt;need_refresh;</div><div class='add'>+        /* Hoping that the caller will do inode_refresh followed by</div><div class='add'>+         * this, hence setting the need_refresh to false */</div><div class='add'>+        ctx-&gt;need_refresh = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (event_gen1 != event_gen2)</div><div class='del'>-                need_refresh = _gf_true;</div><div class='add'>+    if (event_gen1 != event_gen2)</div><div class='add'>+        need_refresh = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return need_refresh;</div><div class='add'>+    return need_refresh;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-afr_inode_need_refresh_set (inode_t *inode, xlator_t *this)</div><div class='add'>+afr_inode_need_refresh_set(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret         = -1;</div><div class='del'>-        afr_inode_ctx_t  *ctx         = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                ctx-&gt;need_refresh = _gf_true;</div><div class='del'>-        }</div><div class='add'>+        ctx-&gt;need_refresh = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_event_gen_reset (inode_t *inode, xlator_t *this)</div><div class='add'>+afr_inode_event_gen_reset(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_inode_event_gen_reset (inode, this);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_event_gen_reset(inode, this);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_spb_choice_timeout_cancel (xlator_t *this, inode_t *inode)</div><div class='add'>+afr_spb_choice_timeout_cancel(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        afr_inode_ctx_t *ctx    = NULL;</div><div class='del'>-        int              ret    = -1;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-                if (ret &lt; 0 || !ctx) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='del'>-                                "Failed to cancel split-brain choice timer.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ctx-&gt;spb_choice = -1;</div><div class='del'>-                if (ctx-&gt;timer) {</div><div class='del'>-                        gf_timer_call_cancel (this-&gt;ctx, ctx-&gt;timer);</div><div class='del'>-                        ctx-&gt;timer = NULL;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+        if (ret &lt; 0 || !ctx) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                   AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='add'>+                   "Failed to cancel split-brain choice timer.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ctx-&gt;spb_choice = -1;</div><div class='add'>+        if (ctx-&gt;timer) {</div><div class='add'>+            gf_timer_call_cancel(this-&gt;ctx, ctx-&gt;timer);</div><div class='add'>+            ctx-&gt;timer = NULL;</div><div class='add'>+        }</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-        return ret;</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_set_split_brain_choice_cbk (void *data)</div><div class='add'>+afr_set_split_brain_choice_cbk(void *data)</div><div class='ctx'> {</div><div class='del'>-        inode_t      *inode     = data;</div><div class='del'>-        xlator_t     *this      = THIS;</div><div class='add'>+    inode_t *inode = data;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        afr_spb_choice_timeout_cancel (this, inode);</div><div class='del'>-        inode_invalidate (inode);</div><div class='del'>-        inode_unref (inode);</div><div class='del'>-        return;</div><div class='add'>+    afr_spb_choice_timeout_cancel(this, inode);</div><div class='add'>+    inode_invalidate(inode);</div><div class='add'>+    inode_unref(inode);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_set_split_brain_choice (int ret, call_frame_t *frame, void *opaque)</div><div class='del'>-{</div><div class='del'>-        int                 op_errno         = ENOMEM;</div><div class='del'>-        afr_private_t      *priv             = NULL;</div><div class='del'>-        afr_inode_ctx_t    *ctx              = NULL;</div><div class='del'>-        inode_t            *inode            = NULL;</div><div class='del'>-        loc_t              *loc              = NULL;</div><div class='del'>-        xlator_t           *this             = NULL;</div><div class='del'>-        afr_spbc_timeout_t *data             = opaque;</div><div class='del'>-        struct              timespec delta   = {0, };</div><div class='del'>-        gf_boolean_t        timer_set        = _gf_false;</div><div class='del'>-        gf_boolean_t        timer_cancelled  = _gf_false;</div><div class='del'>-        gf_boolean_t        timer_reset      = _gf_false;</div><div class='del'>-        gf_boolean_t        need_invalidate  = _gf_true;</div><div class='del'>-        int                 old_spb_choice   = -1;</div><div class='del'>-</div><div class='del'>-        frame = data-&gt;frame;</div><div class='del'>-        loc = data-&gt;loc;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='add'>+afr_set_split_brain_choice(int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+{</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    afr_spbc_timeout_t *data = opaque;</div><div class='add'>+    struct timespec delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t timer_set = _gf_false;</div><div class='add'>+    gf_boolean_t timer_cancelled = _gf_false;</div><div class='add'>+    gf_boolean_t timer_reset = _gf_false;</div><div class='add'>+    gf_boolean_t need_invalidate = _gf_true;</div><div class='add'>+    int old_spb_choice = -1;</div><div class='add'>+</div><div class='add'>+    frame = data-&gt;frame;</div><div class='add'>+    loc = data-&gt;loc;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    delta.tv_sec = priv-&gt;spb_choice_timeout;</div><div class='add'>+    delta.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+    if (!loc-&gt;inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(data-&gt;d_spb || data-&gt;m_spb)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='add'>+               "Cannot set "</div><div class='add'>+               "replica.split-brain-choice on %s. File is"</div><div class='add'>+               " not in data/metadata split-brain.",</div><div class='add'>+               uuid_utoa(loc-&gt;gfid));</div><div class='add'>+        ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * we're ref'ing the inode before LOCK like it is done elsewhere in the</div><div class='add'>+     * code. If we ref after LOCK, coverity complains of possible deadlocks.</div><div class='add'>+     */</div><div class='add'>+    inode = inode_ref(loc-&gt;inode);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='add'>+                   "Failed to get inode_ctx for %s", loc-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        delta.tv_sec = priv-&gt;spb_choice_timeout;</div><div class='del'>-        delta.tv_nsec = 0;</div><div class='add'>+        old_spb_choice = ctx-&gt;spb_choice;</div><div class='add'>+        ctx-&gt;spb_choice = data-&gt;spb_child_index;</div><div class='ctx'> </div><div class='del'>-        if (!loc-&gt;inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(data-&gt;d_spb || data-&gt;m_spb)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, "Cannot set "</div><div class='del'>-                        "replica.split-brain-choice on %s. File is"</div><div class='del'>-                        " not in data/metadata split-brain.",</div><div class='del'>-                        uuid_utoa (loc-&gt;gfid));</div><div class='del'>-                ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * we're ref'ing the inode before LOCK like it is done elsewhere in the</div><div class='del'>-         * code. If we ref after LOCK, coverity complains of possible deadlocks.</div><div class='add'>+        /* Possible changes in spb-choice :</div><div class='add'>+         *         valid to -1    : cancel timer and unref</div><div class='add'>+         *         valid to valid : cancel timer and inject new one</div><div class='add'>+         *         -1    to -1    : unref and do not do anything</div><div class='add'>+         *         -1 to valid    : inject timer</div><div class='ctx'>          */</div><div class='del'>-        inode = inode_ref (loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='del'>-                                "Failed to get inode_ctx for %s", loc-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='add'>+        /* ctx-&gt;timer is NULL iff previous value of</div><div class='add'>+         * ctx-&gt;spb_choice is -1</div><div class='add'>+         */</div><div class='add'>+        if (ctx-&gt;timer) {</div><div class='add'>+            if (ctx-&gt;spb_choice == -1) {</div><div class='add'>+                if (!gf_timer_call_cancel(this-&gt;ctx, ctx-&gt;timer)) {</div><div class='add'>+                    ctx-&gt;timer = NULL;</div><div class='add'>+                    timer_cancelled = _gf_true;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                old_spb_choice = ctx-&gt;spb_choice;</div><div class='del'>-                ctx-&gt;spb_choice = data-&gt;spb_child_index;</div><div class='del'>-</div><div class='del'>-                /* Possible changes in spb-choice :</div><div class='del'>-                 *         valid to -1    : cancel timer and unref</div><div class='del'>-                 *         valid to valid : cancel timer and inject new one</div><div class='del'>-                 *         -1    to -1    : unref and do not do anything</div><div class='del'>-                 *         -1 to valid    : inject timer</div><div class='add'>+                /* If timer cancel failed here it means that the</div><div class='add'>+                 *  previous cbk will be executed which will set</div><div class='add'>+                 *  spb_choice to -1. So we can consider the</div><div class='add'>+                 *  'valid to -1' case to be a success</div><div class='add'>+                 *  (i.e. ret = 0) and goto unlock.</div><div class='ctx'>                  */</div><div class='del'>-</div><div class='del'>-                /* ctx-&gt;timer is NULL iff previous value of</div><div class='del'>-                 * ctx-&gt;spb_choice is -1</div><div class='del'>-                 */</div><div class='del'>-                if (ctx-&gt;timer) {</div><div class='del'>-                        if (ctx-&gt;spb_choice == -1) {</div><div class='del'>-                                if (!gf_timer_call_cancel (this-&gt;ctx,</div><div class='del'>-                                                            ctx-&gt;timer)) {</div><div class='del'>-                                        ctx-&gt;timer = NULL;</div><div class='del'>-                                        timer_cancelled = _gf_true;</div><div class='del'>-                                }</div><div class='del'>-                                /* If timer cancel failed here it means that the</div><div class='del'>-                                *  previous cbk will be executed which will set</div><div class='del'>-                                *  spb_choice to -1. So we can consider the</div><div class='del'>-                                *  'valid to -1' case to be a success</div><div class='del'>-                                *  (i.e. ret = 0) and goto unlock.</div><div class='del'>-                                */</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        goto reset_timer;</div><div class='del'>-                } else {</div><div class='del'>-                        if (ctx-&gt;spb_choice == -1)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        goto set_timer;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-reset_timer:</div><div class='del'>-                ret = gf_timer_call_cancel (this-&gt;ctx, ctx-&gt;timer);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        /* We need to bail out now instead of launching a new</div><div class='del'>-                         * timer. Otherwise the cbk of the previous timer event</div><div class='del'>-                         * will cancel the new ctx-&gt;timer.</div><div class='del'>-                         */</div><div class='del'>-                        ctx-&gt;spb_choice = old_spb_choice;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        op_errno = EAGAIN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ctx-&gt;timer = NULL;</div><div class='del'>-                timer_reset = _gf_true;</div><div class='del'>-</div><div class='del'>-set_timer:</div><div class='del'>-                ctx-&gt;timer = gf_timer_call_after (this-&gt;ctx, delta,</div><div class='del'>-                                                  afr_set_split_brain_choice_cbk,</div><div class='del'>-                                                  inode);</div><div class='del'>-                if (!ctx-&gt;timer) {</div><div class='del'>-                        ctx-&gt;spb_choice = old_spb_choice;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='del'>-                if (!timer_reset &amp;&amp; ctx-&gt;timer)</div><div class='del'>-                        timer_set = _gf_true;</div><div class='del'>-                if (timer_reset &amp;&amp; !ctx-&gt;timer)</div><div class='del'>-                        timer_cancelled = _gf_true;</div><div class='del'>-                need_invalidate = _gf_false;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+            goto reset_timer;</div><div class='add'>+        } else {</div><div class='add'>+            if (ctx-&gt;spb_choice == -1)</div><div class='add'>+                goto unlock;</div><div class='add'>+            goto set_timer;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+    reset_timer:</div><div class='add'>+        ret = gf_timer_call_cancel(this-&gt;ctx, ctx-&gt;timer);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            /* We need to bail out now instead of launching a new</div><div class='add'>+             * timer. Otherwise the cbk of the previous timer event</div><div class='add'>+             * will cancel the new ctx-&gt;timer.</div><div class='add'>+             */</div><div class='add'>+            ctx-&gt;spb_choice = old_spb_choice;</div><div class='add'>+            ret = -1;</div><div class='add'>+            op_errno = EAGAIN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ctx-&gt;timer = NULL;</div><div class='add'>+        timer_reset = _gf_true;</div><div class='add'>+</div><div class='add'>+    set_timer:</div><div class='add'>+        ctx-&gt;timer = gf_timer_call_after(this-&gt;ctx, delta,</div><div class='add'>+                                         afr_set_split_brain_choice_cbk, inode);</div><div class='add'>+        if (!ctx-&gt;timer) {</div><div class='add'>+            ctx-&gt;spb_choice = old_spb_choice;</div><div class='add'>+            ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+        }</div><div class='add'>+        if (!timer_reset &amp;&amp; ctx-&gt;timer)</div><div class='add'>+            timer_set = _gf_true;</div><div class='add'>+        if (timer_reset &amp;&amp; !ctx-&gt;timer)</div><div class='add'>+            timer_cancelled = _gf_true;</div><div class='add'>+        need_invalidate = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-        if (!timer_set)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        if (timer_cancelled)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        /*</div><div class='del'>-         * We need to invalidate the inode to prevent the kernel from serving</div><div class='del'>-         * reads from an older cached value despite a change in spb_choice to</div><div class='del'>-         * a new value.</div><div class='del'>-         */</div><div class='del'>-        if (need_invalidate)</div><div class='del'>-                inode_invalidate (inode);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (!timer_set)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (timer_cancelled)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    /*</div><div class='add'>+     * We need to invalidate the inode to prevent the kernel from serving</div><div class='add'>+     * reads from an older cached value despite a change in spb_choice to</div><div class='add'>+     * a new value.</div><div class='add'>+     */</div><div class='add'>+    if (need_invalidate)</div><div class='add'>+        inode_invalidate(inode);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (data);</div><div class='del'>-        AFR_STACK_UNWIND (setxattr, frame, ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(data);</div><div class='add'>+    AFR_STACK_UNWIND(setxattr, frame, ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_accused_fill (xlator_t *this, dict_t *xdata, unsigned char *accused,</div><div class='del'>-		  afr_transaction_type type)</div><div class='add'>+afr_accused_fill(xlator_t *this, dict_t *xdata, unsigned char *accused,</div><div class='add'>+                 afr_transaction_type type)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int idx = afr_index_for_transaction_type (type);</div><div class='del'>-	void *pending_raw = NULL;</div><div class='del'>-	int pending[3];</div><div class='del'>-	int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int idx = afr_index_for_transaction_type(type);</div><div class='add'>+    void *pending_raw = NULL;</div><div class='add'>+    int pending[3];</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		ret = dict_get_ptr (xdata, priv-&gt;pending_key[i],</div><div class='del'>-				    &amp;pending_raw);</div><div class='del'>-		if (ret) /* no pending flags */</div><div class='del'>-			continue;</div><div class='del'>-		memcpy (pending, pending_raw, sizeof(pending));</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        ret = dict_get_ptr(xdata, priv-&gt;pending_key[i], &amp;pending_raw);</div><div class='add'>+        if (ret) /* no pending flags */</div><div class='add'>+            continue;</div><div class='add'>+        memcpy(pending, pending_raw, sizeof(pending));</div><div class='ctx'> </div><div class='del'>-		if (ntoh32 (pending[idx]))</div><div class='del'>-			accused[i] = 1;</div><div class='del'>-	}</div><div class='add'>+        if (ntoh32(pending[idx]))</div><div class='add'>+            accused[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_accuse_smallfiles (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-		       unsigned char *data_accused)</div><div class='add'>+afr_accuse_smallfiles(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                      unsigned char *data_accused)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	uint64_t maxsize = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t maxsize = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (replies[i].valid &amp;&amp; replies[i].xdata &amp;&amp;</div><div class='del'>-                    dict_get (replies[i].xdata, GLUSTERFS_BAD_INODE))</div><div class='del'>-                        continue;</div><div class='del'>-		if (data_accused[i])</div><div class='del'>-			continue;</div><div class='del'>-		if (replies[i].poststat.ia_size &gt; maxsize)</div><div class='del'>-			maxsize = replies[i].poststat.ia_size;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].xdata &amp;&amp;</div><div class='add'>+            dict_get(replies[i].xdata, GLUSTERFS_BAD_INODE))</div><div class='add'>+            continue;</div><div class='add'>+        if (data_accused[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].poststat.ia_size &gt; maxsize)</div><div class='add'>+            maxsize = replies[i].poststat.ia_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (data_accused[i])</div><div class='del'>-			continue;</div><div class='del'>-                if (AFR_IS_ARBITER_BRICK(priv, i))</div><div class='del'>-                        continue;</div><div class='del'>-		if (replies[i].poststat.ia_size &lt; maxsize)</div><div class='del'>-			data_accused[i] = 1;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (data_accused[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (AFR_IS_ARBITER_BRICK(priv, i))</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].poststat.ia_size &lt; maxsize)</div><div class='add'>+            data_accused[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_readables_fill (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-                    unsigned char *data_accused,</div><div class='del'>-                    unsigned char *metadata_accused,</div><div class='del'>-                    unsigned char *data_readable,</div><div class='del'>-                    unsigned char *metadata_readable,</div><div class='del'>-                    struct afr_reply *replies)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        ia_type_t ia_type = IA_INVAL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+afr_readables_fill(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                   unsigned char *data_accused, unsigned char *metadata_accused,</div><div class='add'>+                   unsigned char *data_readable,</div><div class='add'>+                   unsigned char *metadata_readable, struct afr_reply *replies)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    ia_type_t ia_type = IA_INVAL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        data_readable[i] = 1;</div><div class='add'>+        metadata_readable[i] = 1;</div><div class='add'>+    }</div><div class='add'>+    if (AFR_IS_ARBITER_BRICK(priv, ARBITER_BRICK_INDEX)) {</div><div class='add'>+        data_readable[ARBITER_BRICK_INDEX] = 0;</div><div class='add'>+        metadata_readable[ARBITER_BRICK_INDEX] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies) { /* Lookup */</div><div class='add'>+            if (!replies[i].valid || replies[i].op_ret == -1 ||</div><div class='add'>+                (replies[i].xdata &amp;&amp;</div><div class='add'>+                 dict_get(replies[i].xdata, GLUSTERFS_BAD_INODE))) {</div><div class='add'>+                data_readable[i] = 0;</div><div class='add'>+                metadata_readable[i] = 0;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                data_readable[i] = 1;</div><div class='del'>-                metadata_readable[i] = 1;</div><div class='del'>-        }</div><div class='del'>-        if (AFR_IS_ARBITER_BRICK (priv, ARBITER_BRICK_INDEX)) {</div><div class='del'>-                data_readable[ARBITER_BRICK_INDEX] =  0;</div><div class='del'>-                metadata_readable[ARBITER_BRICK_INDEX] = 0;</div><div class='add'>+            xdata = replies[i].xdata;</div><div class='add'>+            ia_type = replies[i].poststat.ia_type;</div><div class='add'>+        } else { /* pre-op xattrop */</div><div class='add'>+            xdata = local-&gt;transaction.changelog_xdata[i];</div><div class='add'>+            ia_type = inode-&gt;ia_type;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (replies) {/* Lookup */</div><div class='del'>-                        if (!replies[i].valid || replies[i].op_ret == -1 ||</div><div class='del'>-                            (replies[i].xdata &amp;&amp; dict_get (replies[i].xdata,</div><div class='del'>-                                                        GLUSTERFS_BAD_INODE))) {</div><div class='del'>-                                data_readable[i] = 0;</div><div class='del'>-                                metadata_readable[i] = 0;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        xdata = replies[i].xdata;</div><div class='del'>-                        ia_type = replies[i].poststat.ia_type;</div><div class='del'>-                } else {/* pre-op xattrop */</div><div class='del'>-                        xdata = local-&gt;transaction.changelog_xdata[i];</div><div class='del'>-                        ia_type = inode-&gt;ia_type;</div><div class='del'>-                }</div><div class='add'>+        afr_accused_fill(this, xdata, data_accused,</div><div class='add'>+                         (ia_type == IA_IFDIR) ? AFR_ENTRY_TRANSACTION</div><div class='add'>+                                               : AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-                afr_accused_fill (this, xdata, data_accused,</div><div class='del'>-                                  (ia_type == IA_IFDIR) ?</div><div class='del'>-                                  AFR_ENTRY_TRANSACTION : AFR_DATA_TRANSACTION);</div><div class='add'>+        afr_accused_fill(this, xdata, metadata_accused,</div><div class='add'>+                         AFR_METADATA_TRANSACTION);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                afr_accused_fill (this, xdata,</div><div class='del'>-                                  metadata_accused, AFR_METADATA_TRANSACTION);</div><div class='del'>-        }</div><div class='add'>+    if (replies &amp;&amp; ia_type != IA_INVAL &amp;&amp; ia_type != IA_IFDIR &amp;&amp;</div><div class='add'>+        /* We want to accuse small files only when we know for</div><div class='add'>+         * sure that there is no IO happening. Otherwise, the</div><div class='add'>+         * ia_sizes obtained in post-refresh replies may</div><div class='add'>+         * mismatch due to a race between inode-refresh and</div><div class='add'>+         * ongoing writes, causing spurious heal launches*/</div><div class='add'>+        !afr_is_possibly_under_txn(AFR_DATA_TRANSACTION, local, this)) {</div><div class='add'>+        afr_accuse_smallfiles(this, replies, data_accused);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (replies &amp;&amp; ia_type != IA_INVAL &amp;&amp; ia_type != IA_IFDIR &amp;&amp;</div><div class='del'>-            /* We want to accuse small files only when we know for</div><div class='del'>-             * sure that there is no IO happening. Otherwise, the</div><div class='del'>-             * ia_sizes obtained in post-refresh replies may</div><div class='del'>-             * mismatch due to a race between inode-refresh and</div><div class='del'>-             * ongoing writes, causing spurious heal launches*/</div><div class='del'>-            !afr_is_possibly_under_txn (AFR_DATA_TRANSACTION, local, this)) {</div><div class='del'>-                afr_accuse_smallfiles (this, replies, data_accused);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (data_accused[i]) {</div><div class='add'>+            data_readable[i] = 0;</div><div class='add'>+            ret = 1;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (data_accused[i]) {</div><div class='del'>-                        data_readable[i] = 0;</div><div class='del'>-                        ret = 1;</div><div class='del'>-                }</div><div class='del'>-                if (metadata_accused[i]) {</div><div class='del'>-                        metadata_readable[i] = 0;</div><div class='del'>-                        ret = 1;</div><div class='del'>-                }</div><div class='add'>+        if (metadata_accused[i]) {</div><div class='add'>+            metadata_readable[i] = 0;</div><div class='add'>+            ret = 1;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_replies_interpret (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-                       gf_boolean_t *start_heal)</div><div class='del'>-{</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	struct afr_reply *replies = NULL;</div><div class='del'>-	int event_generation = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-	unsigned char *data_accused = NULL;</div><div class='del'>-	unsigned char *metadata_accused = NULL;</div><div class='del'>-	unsigned char *data_readable = NULL;</div><div class='del'>-	unsigned char *metadata_readable = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	replies = local-&gt;replies;</div><div class='del'>-	event_generation = local-&gt;event_generation;</div><div class='del'>-</div><div class='del'>-	data_accused = alloca0 (priv-&gt;child_count);</div><div class='del'>-	data_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-	metadata_accused = alloca0 (priv-&gt;child_count);</div><div class='del'>-	metadata_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = afr_readables_fill (frame, this, inode, data_accused,</div><div class='del'>-                                  metadata_accused, data_readable,</div><div class='del'>-                                  metadata_readable, replies);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (start_heal &amp;&amp; priv-&gt;child_up[i] &amp;&amp;</div><div class='del'>-                    (data_accused[i] || metadata_accused[i])) {</div><div class='del'>-                        *start_heal = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-	afr_inode_read_subvol_set (inode, this, data_readable,</div><div class='del'>-				   metadata_readable, event_generation);</div><div class='del'>-	return ret;</div><div class='add'>+afr_replies_interpret(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                      gf_boolean_t *start_heal)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int event_generation = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    unsigned char *data_accused = NULL;</div><div class='add'>+    unsigned char *metadata_accused = NULL;</div><div class='add'>+    unsigned char *data_readable = NULL;</div><div class='add'>+    unsigned char *metadata_readable = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+    event_generation = local-&gt;event_generation;</div><div class='add'>+</div><div class='add'>+    data_accused = alloca0(priv-&gt;child_count);</div><div class='add'>+    data_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata_accused = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_readables_fill(frame, this, inode, data_accused, metadata_accused,</div><div class='add'>+                             data_readable, metadata_readable, replies);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (start_heal &amp;&amp; priv-&gt;child_up[i] &amp;&amp;</div><div class='add'>+            (data_accused[i] || metadata_accused[i])) {</div><div class='add'>+            *start_heal = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    afr_inode_read_subvol_set(inode, this, data_readable, metadata_readable,</div><div class='add'>+                              event_generation);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_refresh_selfheal_done (int ret, call_frame_t *heal, void *opaque)</div><div class='add'>+afr_refresh_selfheal_done(int ret, call_frame_t *heal, void *opaque)</div><div class='ctx'> {</div><div class='del'>-	if (heal)</div><div class='del'>-                AFR_STACK_DESTROY (heal);</div><div class='del'>-	return 0;</div><div class='add'>+    if (heal)</div><div class='add'>+        AFR_STACK_DESTROY(heal);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_err (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_inode_refresh_err(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int err = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int err = 0;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (local-&gt;replies[i].valid &amp;&amp; !local-&gt;replies[i].op_ret) {</div><div class='del'>-			err = 0;</div><div class='del'>-			goto ret;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;replies[i].valid &amp;&amp; !local-&gt;replies[i].op_ret) {</div><div class='add'>+            err = 0;</div><div class='add'>+            goto ret;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	err = afr_final_errno (local, priv);</div><div class='add'>+    err = afr_final_errno(local, priv);</div><div class='ctx'> ret:</div><div class='del'>-	return err;</div><div class='add'>+    return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_selfheal_enabled (xlator_t *this)</div><div class='add'>+afr_selfheal_enabled(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	gf_boolean_t data = _gf_false;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t data = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	ret = gf_string2boolean (priv-&gt;data_self_heal, &amp;data);</div><div class='del'>-        GF_ASSERT (!ret);</div><div class='add'>+    ret = gf_string2boolean(priv-&gt;data_self_heal, &amp;data);</div><div class='add'>+    GF_ASSERT(!ret);</div><div class='ctx'> </div><div class='del'>-	return data || priv-&gt;metadata_self_heal || priv-&gt;entry_self_heal;</div><div class='add'>+    return data || priv-&gt;metadata_self_heal || priv-&gt;entry_self_heal;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_txn_refresh_done (call_frame_t *frame, xlator_t *this, int err)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        call_frame_t *heal_frame = NULL;</div><div class='del'>-        afr_local_t *heal_local = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        inode_t *inode = NULL;</div><div class='del'>-        int event_generation = 0;</div><div class='del'>-        int read_subvol = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        inode = local-&gt;inode;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (err)</div><div class='del'>-                goto refresh_done;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op == GF_FOP_LOOKUP)</div><div class='del'>-                goto refresh_done;</div><div class='del'>-</div><div class='del'>-        ret = afr_inode_get_readable (frame, inode, this, local-&gt;readable,</div><div class='del'>-                                      &amp;event_generation,</div><div class='del'>-                                      local-&gt;transaction.type);</div><div class='del'>-</div><div class='del'>-        if (ret == -EIO || (local-&gt;is_read_txn &amp;&amp; !event_generation)) {</div><div class='del'>-                /* No readable subvolume even after refresh ==&gt; splitbrain.*/</div><div class='del'>-                if (!priv-&gt;fav_child_policy) {</div><div class='del'>-                        err = EIO;</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-                read_subvol = afr_sh_get_fav_by_policy (this, local-&gt;replies,</div><div class='del'>-                                                        inode, NULL);</div><div class='del'>-                if (read_subvol == -1) {</div><div class='del'>-                        err = EIO;</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                heal_frame = copy_frame (frame);</div><div class='del'>-                if (!heal_frame) {</div><div class='del'>-                        err = EIO;</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-                heal_frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='del'>-                heal_local = AFR_FRAME_INIT (heal_frame, op_errno);</div><div class='del'>-                if (!heal_local) {</div><div class='del'>-                        err = EIO;</div><div class='del'>-                        AFR_STACK_DESTROY (heal_frame);</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-                heal_local-&gt;xdata_req = dict_new();</div><div class='del'>-                if (!heal_local-&gt;xdata_req) {</div><div class='del'>-                        err = EIO;</div><div class='del'>-                        AFR_STACK_DESTROY (heal_frame);</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-                heal_local-&gt;heal_frame = frame;</div><div class='del'>-                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                    afr_fav_child_reset_sink_xattrs,</div><div class='del'>-                                    afr_fav_child_reset_sink_xattrs_cbk,</div><div class='del'>-                                    heal_frame,</div><div class='del'>-                                    heal_frame);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+afr_txn_refresh_done(call_frame_t *frame, xlator_t *this, int err)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='add'>+    afr_local_t *heal_local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int event_generation = 0;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    inode = local-&gt;inode;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (err)</div><div class='add'>+        goto refresh_done;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;op == GF_FOP_LOOKUP)</div><div class='add'>+        goto refresh_done;</div><div class='add'>+</div><div class='add'>+    ret = afr_inode_get_readable(frame, inode, this, local-&gt;readable,</div><div class='add'>+                                 &amp;event_generation, local-&gt;transaction.type);</div><div class='add'>+</div><div class='add'>+    if (ret == -EIO || (local-&gt;is_read_txn &amp;&amp; !event_generation)) {</div><div class='add'>+        /* No readable subvolume even after refresh ==&gt; splitbrain.*/</div><div class='add'>+        if (!priv-&gt;fav_child_policy) {</div><div class='add'>+            err = EIO;</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+        read_subvol = afr_sh_get_fav_by_policy(this, local-&gt;replies, inode,</div><div class='add'>+                                               NULL);</div><div class='add'>+        if (read_subvol == -1) {</div><div class='add'>+            err = EIO;</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        heal_frame = copy_frame(frame);</div><div class='add'>+        if (!heal_frame) {</div><div class='add'>+            err = EIO;</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+        heal_frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='add'>+        heal_local = AFR_FRAME_INIT(heal_frame, op_errno);</div><div class='add'>+        if (!heal_local) {</div><div class='add'>+            err = EIO;</div><div class='add'>+            AFR_STACK_DESTROY(heal_frame);</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+        heal_local-&gt;xdata_req = dict_new();</div><div class='add'>+        if (!heal_local-&gt;xdata_req) {</div><div class='add'>+            err = EIO;</div><div class='add'>+            AFR_STACK_DESTROY(heal_frame);</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+        heal_local-&gt;heal_frame = frame;</div><div class='add'>+        ret = synctask_new(this-&gt;ctx-&gt;env, afr_fav_child_reset_sink_xattrs,</div><div class='add'>+                           afr_fav_child_reset_sink_xattrs_cbk, heal_frame,</div><div class='add'>+                           heal_frame);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> refresh_done:</div><div class='del'>-        afr_local_replies_wipe (local, this-&gt;private);</div><div class='del'>-        local-&gt;refreshfn (frame, this, err);</div><div class='add'>+    afr_local_replies_wipe(local, this-&gt;private);</div><div class='add'>+    local-&gt;refreshfn(frame, this, err);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_fill_success_replies (afr_local_t *local, afr_private_t *priv,</div><div class='del'>-                          unsigned char *replies)</div><div class='add'>+afr_fill_success_replies(afr_local_t *local, afr_private_t *priv,</div><div class='add'>+                         unsigned char *replies)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].op_ret == 0)</div><div class='del'>-                        replies[i] = 1;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].op_ret == 0)</div><div class='add'>+            replies[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_done (call_frame_t *frame, xlator_t *this, int error)</div><div class='del'>-{</div><div class='del'>-	call_frame_t *heal_frame = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        gf_boolean_t start_heal = _gf_false;</div><div class='del'>-        afr_local_t *heal_local = NULL;</div><div class='del'>-        unsigned char *success_replies = NULL;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='del'>-	int ret = 0;</div><div class='del'>-</div><div class='del'>-	if (error != 0) {</div><div class='del'>-		goto refresh_done;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        success_replies = alloca0 (priv-&gt;child_count);</div><div class='del'>-        afr_fill_success_replies (local, priv, success_replies);</div><div class='del'>-</div><div class='del'>-        if (!afr_has_quorum (success_replies, this)) {</div><div class='del'>-                error = afr_final_errno (frame-&gt;local, this-&gt;private);</div><div class='del'>-                if (!error)</div><div class='del'>-                        error = afr_quorum_errno(priv);</div><div class='del'>-                goto refresh_done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;thin_arbiter_count &amp;&amp; local-&gt;is_read_txn &amp;&amp;</div><div class='del'>-            AFR_COUNT (success_replies, priv-&gt;child_count) !=</div><div class='del'>-                       priv-&gt;child_count) {</div><div class='del'>-                /* We need to query the good bricks and/or thin-arbiter.*/</div><div class='del'>-                error = EINVAL;</div><div class='del'>-                goto refresh_done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	ret = afr_replies_interpret (frame, this, local-&gt;refreshinode,</div><div class='del'>-                                     &amp;start_heal);</div><div class='del'>-</div><div class='del'>-	if (ret &amp;&amp; afr_selfheal_enabled (this) &amp;&amp; start_heal) {</div><div class='del'>-                heal_frame = copy_frame (frame);</div><div class='del'>-                if (!heal_frame)</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                heal_frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='del'>-                heal_local = AFR_FRAME_INIT (heal_frame, op_errno);</div><div class='del'>-                if (!heal_local) {</div><div class='del'>-                        AFR_STACK_DESTROY (heal_frame);</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-                heal_local-&gt;refreshinode = inode_ref (local-&gt;refreshinode);</div><div class='del'>-                heal_local-&gt;heal_frame = heal_frame;</div><div class='del'>-                if (!afr_throttled_selfheal (heal_frame, this)) {</div><div class='del'>-                        AFR_STACK_DESTROY (heal_frame);</div><div class='del'>-                        goto refresh_done;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+afr_inode_refresh_done(call_frame_t *frame, xlator_t *this, int error)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t start_heal = _gf_false;</div><div class='add'>+    afr_local_t *heal_local = NULL;</div><div class='add'>+    unsigned char *success_replies = NULL;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (error != 0) {</div><div class='add'>+        goto refresh_done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    success_replies = alloca0(priv-&gt;child_count);</div><div class='add'>+    afr_fill_success_replies(local, priv, success_replies);</div><div class='add'>+</div><div class='add'>+    if (!afr_has_quorum(success_replies, this)) {</div><div class='add'>+        error = afr_final_errno(frame-&gt;local, this-&gt;private);</div><div class='add'>+        if (!error)</div><div class='add'>+            error = afr_quorum_errno(priv);</div><div class='add'>+        goto refresh_done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;thin_arbiter_count &amp;&amp; local-&gt;is_read_txn &amp;&amp;</div><div class='add'>+        AFR_COUNT(success_replies, priv-&gt;child_count) != priv-&gt;child_count) {</div><div class='add'>+        /* We need to query the good bricks and/or thin-arbiter.*/</div><div class='add'>+        error = EINVAL;</div><div class='add'>+        goto refresh_done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_replies_interpret(frame, this, local-&gt;refreshinode, &amp;start_heal);</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; afr_selfheal_enabled(this) &amp;&amp; start_heal) {</div><div class='add'>+        heal_frame = copy_frame(frame);</div><div class='add'>+        if (!heal_frame)</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        heal_frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='add'>+        heal_local = AFR_FRAME_INIT(heal_frame, op_errno);</div><div class='add'>+        if (!heal_local) {</div><div class='add'>+            AFR_STACK_DESTROY(heal_frame);</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+        heal_local-&gt;refreshinode = inode_ref(local-&gt;refreshinode);</div><div class='add'>+        heal_local-&gt;heal_frame = heal_frame;</div><div class='add'>+        if (!afr_throttled_selfheal(heal_frame, this)) {</div><div class='add'>+            AFR_STACK_DESTROY(heal_frame);</div><div class='add'>+            goto refresh_done;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> refresh_done:</div><div class='del'>-        afr_txn_refresh_done (frame, this, error);</div><div class='add'>+    afr_txn_refresh_done(frame, this, error);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_inode_refresh_subvol_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                              int op_ret, int op_errno, struct iatt *buf,</div><div class='del'>-                              dict_t *xdata, struct iatt *par)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int call_child = (long) cookie;</div><div class='del'>-        int8_t need_heal = 1;</div><div class='del'>-        int call_count = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        local-&gt;replies[call_child].valid = 1;</div><div class='del'>-        local-&gt;replies[call_child].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[call_child].op_errno = op_errno;</div><div class='del'>-	if (op_ret != -1) {</div><div class='del'>-		local-&gt;replies[call_child].poststat = *buf;</div><div class='del'>-		if (par)</div><div class='del'>-                        local-&gt;replies[call_child].postparent = *par;</div><div class='del'>-                if (xdata)</div><div class='del'>-		        local-&gt;replies[call_child].xdata = dict_ref (xdata);</div><div class='del'>-	}</div><div class='del'>-        if (xdata) {</div><div class='del'>-                ret = dict_get_int8 (xdata, "link-count", &amp;need_heal);</div><div class='del'>-                local-&gt;replies[call_child].need_heal = need_heal;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;replies[call_child].need_heal = need_heal;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                afr_set_need_heal (this, local);</div><div class='del'>-                ret = afr_inode_refresh_err (frame, this);</div><div class='del'>-		afr_inode_refresh_done (frame, this, ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+afr_inode_refresh_subvol_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int op_ret, int op_errno, struct iatt *buf,</div><div class='add'>+                             dict_t *xdata, struct iatt *par)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_child = (long)cookie;</div><div class='add'>+    int8_t need_heal = 1;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    local-&gt;replies[call_child].valid = 1;</div><div class='add'>+    local-&gt;replies[call_child].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[call_child].op_errno = op_errno;</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        local-&gt;replies[call_child].poststat = *buf;</div><div class='add'>+        if (par)</div><div class='add'>+            local-&gt;replies[call_child].postparent = *par;</div><div class='add'>+        if (xdata)</div><div class='add'>+            local-&gt;replies[call_child].xdata = dict_ref(xdata);</div><div class='add'>+    }</div><div class='add'>+    if (xdata) {</div><div class='add'>+        ret = dict_get_int8(xdata, "link-count", &amp;need_heal);</div><div class='add'>+        local-&gt;replies[call_child].need_heal = need_heal;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;replies[call_child].need_heal = need_heal;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        afr_set_need_heal(this, local);</div><div class='add'>+        ret = afr_inode_refresh_err(frame, this);</div><div class='add'>+        afr_inode_refresh_done(frame, this, ret);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_subvol_with_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                          xlator_t *this, int op_ret,</div><div class='del'>-                                          int op_errno, inode_t *inode,</div><div class='del'>-                                          struct iatt *buf, dict_t *xdata,</div><div class='del'>-                                          struct iatt *par)</div><div class='add'>+afr_inode_refresh_subvol_with_lookup_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                         xlator_t *this, int op_ret,</div><div class='add'>+                                         int op_errno, inode_t *inode,</div><div class='add'>+                                         struct iatt *buf, dict_t *xdata,</div><div class='add'>+                                         struct iatt *par)</div><div class='ctx'> {</div><div class='del'>-        afr_inode_refresh_subvol_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                                      buf, xdata, par);</div><div class='del'>-	return 0;</div><div class='add'>+    afr_inode_refresh_subvol_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                                 xdata, par);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_subvol_with_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                      int i, inode_t *inode, uuid_t gfid,</div><div class='del'>-                                      dict_t *xdata)</div><div class='add'>+afr_inode_refresh_subvol_with_lookup(call_frame_t *frame, xlator_t *this, int i,</div><div class='add'>+                                     inode_t *inode, uuid_t gfid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode;</div><div class='del'>-        if (gf_uuid_is_null (inode-&gt;gfid) &amp;&amp; gfid) {</div><div class='del'>-                /* To handle setattr/setxattr on yet to be linked inode from</div><div class='del'>-                 * dht */</div><div class='del'>-                gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-        } else {</div><div class='del'>-                gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        }</div><div class='add'>+    loc.inode = inode;</div><div class='add'>+    if (gf_uuid_is_null(inode-&gt;gfid) &amp;&amp; gfid) {</div><div class='add'>+        /* To handle setattr/setxattr on yet to be linked inode from</div><div class='add'>+         * dht */</div><div class='add'>+        gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+    } else {</div><div class='add'>+        gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_inode_refresh_subvol_with_lookup_cbk,</div><div class='del'>-			   (void *) (long) i, priv-&gt;children[i],</div><div class='del'>-			   priv-&gt;children[i]-&gt;fops-&gt;lookup, &amp;loc, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_inode_refresh_subvol_with_lookup_cbk,</div><div class='add'>+                      (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                      priv-&gt;children[i]-&gt;fops-&gt;lookup, &amp;loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_subvol_with_fstat_cbk (call_frame_t *frame,</div><div class='del'>-                                         void *cookie, xlator_t *this,</div><div class='del'>-                                         int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                         struct iatt *buf, dict_t *xdata)</div><div class='add'>+afr_inode_refresh_subvol_with_fstat_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                        xlator_t *this, int32_t op_ret,</div><div class='add'>+                                        int32_t op_errno, struct iatt *buf,</div><div class='add'>+                                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_inode_refresh_subvol_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                                      buf, xdata, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_inode_refresh_subvol_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                                 xdata, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_subvol_with_fstat (call_frame_t *frame, xlator_t *this, int i,</div><div class='del'>-			             dict_t *xdata)</div><div class='add'>+afr_inode_refresh_subvol_with_fstat(call_frame_t *frame, xlator_t *this, int i,</div><div class='add'>+                                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_inode_refresh_subvol_with_fstat_cbk,</div><div class='del'>-                           (void *) (long) i, priv-&gt;children[i],</div><div class='del'>-                           priv-&gt;children[i]-&gt;fops-&gt;fstat, local-&gt;fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_inode_refresh_subvol_with_fstat_cbk,</div><div class='add'>+                      (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                      priv-&gt;children[i]-&gt;fops-&gt;fstat, local-&gt;fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh_do (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int call_count = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-	dict_t *xdata = NULL;</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx = NULL;</div><div class='del'>-        unsigned char *wind_subvols = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        wind_subvols = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        afr_local_replies_wipe (local, priv);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                fd_ctx = afr_fd_ctx_get (local-&gt;fd, this);</div><div class='del'>-                if (!fd_ctx) {</div><div class='del'>-                        afr_inode_refresh_done (frame, this, EINVAL);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+afr_inode_refresh_do(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    unsigned char *wind_subvols = NULL;</div><div class='ctx'> </div><div class='del'>-	xdata = dict_new ();</div><div class='del'>-	if (!xdata) {</div><div class='del'>-		afr_inode_refresh_done (frame, this, ENOMEM);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    wind_subvols = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	ret = afr_xattr_req_prepare (this, xdata);</div><div class='del'>-	if (ret != 0) {</div><div class='del'>-		dict_unref (xdata);</div><div class='del'>-		afr_inode_refresh_done (frame, this, -ret);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    afr_local_replies_wipe(local, priv);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (xdata, "link-count", GF_XATTROP_INDEX_COUNT);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret,</div><div class='del'>-                              "Unable to set link-count in dict ");</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        fd_ctx = afr_fd_ctx_get(local-&gt;fd, this);</div><div class='add'>+        if (!fd_ctx) {</div><div class='add'>+            afr_inode_refresh_done(frame, this, EINVAL);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (xdata, GLUSTERFS_INODELK_DOM_COUNT, this-&gt;name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret,</div><div class='del'>-                              "Unable to set inodelk-dom-count in dict ");</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        afr_inode_refresh_done(frame, this, ENOMEM);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    ret = afr_xattr_req_prepare(this, xdata);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+        afr_inode_refresh_done(frame, this, -ret);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (local-&gt;child_up[i] &amp;&amp;</div><div class='del'>-                            fd_ctx-&gt;opened_on[i] == AFR_FD_OPENED)</div><div class='del'>-                                wind_subvols[i] = 1;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                memcpy (wind_subvols, local-&gt;child_up,</div><div class='del'>-                        sizeof (*local-&gt;child_up) * priv-&gt;child_count);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_str(xdata, "link-count", GF_XATTROP_INDEX_COUNT);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret, "Unable to set link-count in dict ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	local-&gt;call_count = AFR_COUNT (wind_subvols, priv-&gt;child_count);</div><div class='add'>+    ret = dict_set_str(xdata, GLUSTERFS_INODELK_DOM_COUNT, this-&gt;name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret,</div><div class='add'>+                     "Unable to set inodelk-dom-count in dict ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	call_count = local-&gt;call_count;</div><div class='del'>-        if (!call_count) {</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-		if (local-&gt;fd &amp;&amp; AFR_COUNT(local-&gt;child_up, priv-&gt;child_count))</div><div class='del'>-	                afr_inode_refresh_done (frame, this, EBADFD);</div><div class='del'>-		else</div><div class='del'>-	                afr_inode_refresh_done (frame, this, ENOTCONN);</div><div class='del'>-                return 0;</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (local-&gt;child_up[i] &amp;&amp; fd_ctx-&gt;opened_on[i] == AFR_FD_OPENED)</div><div class='add'>+                wind_subvols[i] = 1;</div><div class='ctx'>         }</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!wind_subvols[i])</div><div class='del'>-			continue;</div><div class='add'>+    } else {</div><div class='add'>+        memcpy(wind_subvols, local-&gt;child_up,</div><div class='add'>+               sizeof(*local-&gt;child_up) * priv-&gt;child_count);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;fd)</div><div class='del'>-                        afr_inode_refresh_subvol_with_fstat (frame, this, i,</div><div class='del'>-                                                             xdata);</div><div class='del'>-                else</div><div class='del'>-                        afr_inode_refresh_subvol_with_lookup (frame, this, i,</div><div class='del'>-                                                    local-&gt;refreshinode,</div><div class='del'>-                                                    local-&gt;refreshgfid, xdata);</div><div class='add'>+    local-&gt;call_count = AFR_COUNT(wind_subvols, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-		if (!--call_count)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='add'>+    if (!call_count) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+        if (local-&gt;fd &amp;&amp; AFR_COUNT(local-&gt;child_up, priv-&gt;child_count))</div><div class='add'>+            afr_inode_refresh_done(frame, this, EBADFD);</div><div class='add'>+        else</div><div class='add'>+            afr_inode_refresh_done(frame, this, ENOTCONN);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!wind_subvols[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-	dict_unref (xdata);</div><div class='add'>+        if (local-&gt;fd)</div><div class='add'>+            afr_inode_refresh_subvol_with_fstat(frame, this, i, xdata);</div><div class='add'>+        else</div><div class='add'>+            afr_inode_refresh_subvol_with_lookup(</div><div class='add'>+                frame, this, i, local-&gt;refreshinode, local-&gt;refreshgfid, xdata);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict_unref(xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_refresh (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-                   uuid_t gfid, afr_inode_refresh_cbk_t refreshfn)</div><div class='add'>+afr_inode_refresh(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                  uuid_t gfid, afr_inode_refresh_cbk_t refreshfn)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	local-&gt;refreshfn = refreshfn;</div><div class='add'>+    local-&gt;refreshfn = refreshfn;</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;refreshinode) {</div><div class='del'>-		inode_unref (local-&gt;refreshinode);</div><div class='del'>-		local-&gt;refreshinode = NULL;</div><div class='del'>-	}</div><div class='add'>+    if (local-&gt;refreshinode) {</div><div class='add'>+        inode_unref(local-&gt;refreshinode);</div><div class='add'>+        local-&gt;refreshinode = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	local-&gt;refreshinode = inode_ref (inode);</div><div class='add'>+    local-&gt;refreshinode = inode_ref(inode);</div><div class='ctx'> </div><div class='del'>-        if (gfid)</div><div class='del'>-                gf_uuid_copy (local-&gt;refreshgfid, gfid);</div><div class='del'>-        else</div><div class='del'>-                gf_uuid_clear (local-&gt;refreshgfid);</div><div class='add'>+    if (gfid)</div><div class='add'>+        gf_uuid_copy(local-&gt;refreshgfid, gfid);</div><div class='add'>+    else</div><div class='add'>+        gf_uuid_clear(local-&gt;refreshgfid);</div><div class='ctx'> </div><div class='del'>-	afr_inode_refresh_do (frame, this);</div><div class='add'>+    afr_inode_refresh_do(frame, this);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_xattr_req_prepare (xlator_t *this, dict_t *xattr_req)</div><div class='add'>+afr_xattr_req_prepare(xlator_t *this, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        int             i           = 0;</div><div class='del'>-        afr_private_t   *priv       = NULL;</div><div class='del'>-        int             ret         = 0;</div><div class='del'>-</div><div class='del'>-        priv   = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                ret = dict_set_uint64 (xattr_req, priv-&gt;pending_key[i],</div><div class='del'>-                                       AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Unable to set dict value for %s",</div><div class='del'>-                                priv-&gt;pending_key[i]);</div><div class='del'>-                /* 3 = data+metadata+entry */</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_uint64 (xattr_req, AFR_DIRTY,</div><div class='del'>-			       AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret, "failed to set dirty "</div><div class='del'>-                              "query flag");</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xattr_req, "list-xattr", 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret,</div><div class='del'>-                              "Unable to set list-xattr in dict ");</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        ret = dict_set_uint64(xattr_req, priv-&gt;pending_key[i],</div><div class='add'>+                              AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Unable to set dict value for %s", priv-&gt;pending_key[i]);</div><div class='add'>+        /* 3 = data+metadata+entry */</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_uint64(xattr_req, AFR_DIRTY,</div><div class='add'>+                          AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret,</div><div class='add'>+                     "failed to set dirty "</div><div class='add'>+                     "query flag");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(xattr_req, "list-xattr", 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret, "Unable to set list-xattr in dict ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup_xattr_req_prepare (afr_local_t *local, xlator_t *this,</div><div class='del'>-                              dict_t *xattr_req, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        int     ret = -ENOMEM;</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;xattr_req)</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;xattr_req)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (xattr_req &amp;&amp; (xattr_req != local-&gt;xattr_req))</div><div class='del'>-                dict_copy (xattr_req, local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-        ret = afr_xattr_req_prepare (this, local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (local-&gt;xattr_req, GLUSTERFS_INODELK_COUNT, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Unable to set dict value for %s",</div><div class='del'>-                        loc-&gt;path, GLUSTERFS_INODELK_COUNT);</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_uint64 (local-&gt;xattr_req, GLUSTERFS_ENTRYLK_COUNT, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Unable to set dict value for %s",</div><div class='del'>-                        loc-&gt;path, GLUSTERFS_ENTRYLK_COUNT);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (local-&gt;xattr_req, GLUSTERFS_PARENT_ENTRYLK, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Unable to set dict value for %s",</div><div class='del'>-                        loc-&gt;path, GLUSTERFS_PARENT_ENTRYLK);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (local-&gt;xattr_req, "link-count",</div><div class='del'>-                            GF_XATTROP_INDEX_COUNT);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret,</div><div class='del'>-                              "Unable to set link-count in dict ");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+afr_lookup_xattr_req_prepare(afr_local_t *local, xlator_t *this,</div><div class='add'>+                             dict_t *xattr_req, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    int ret = -ENOMEM;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xattr_req)</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xattr_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (xattr_req &amp;&amp; (xattr_req != local-&gt;xattr_req))</div><div class='add'>+        dict_copy(xattr_req, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    ret = afr_xattr_req_prepare(this, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(local-&gt;xattr_req, GLUSTERFS_INODELK_COUNT, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Unable to set dict value for %s", loc-&gt;path,</div><div class='add'>+               GLUSTERFS_INODELK_COUNT);</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_uint64(local-&gt;xattr_req, GLUSTERFS_ENTRYLK_COUNT, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Unable to set dict value for %s", loc-&gt;path,</div><div class='add'>+               GLUSTERFS_ENTRYLK_COUNT);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(local-&gt;xattr_req, GLUSTERFS_PARENT_ENTRYLK, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Unable to set dict value for %s", loc-&gt;path,</div><div class='add'>+               GLUSTERFS_PARENT_ENTRYLK);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(local-&gt;xattr_req, "link-count", GF_XATTROP_INDEX_COUNT);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret, "Unable to set link-count in dict ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_least_pending_reads_child (afr_private_t *priv)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        int child = 0;</div><div class='del'>-        int64_t read_iter = -1;</div><div class='del'>-        int64_t pending_read = -1;</div><div class='del'>-</div><div class='del'>-        pending_read = GF_ATOMIC_GET (priv-&gt;pending_reads[0]);</div><div class='del'>-        for (i = 1; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (AFR_IS_ARBITER_BRICK(priv, i))</div><div class='del'>-                        continue;</div><div class='del'>-                read_iter =  GF_ATOMIC_GET(priv-&gt;pending_reads[i]);</div><div class='del'>-                if (read_iter &lt; pending_read) {</div><div class='del'>-                        pending_read = read_iter;</div><div class='del'>-                        child = i;</div><div class='del'>-                }</div><div class='add'>+afr_least_pending_reads_child(afr_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int child = 0;</div><div class='add'>+    int64_t read_iter = -1;</div><div class='add'>+    int64_t pending_read = -1;</div><div class='add'>+</div><div class='add'>+    pending_read = GF_ATOMIC_GET(priv-&gt;pending_reads[0]);</div><div class='add'>+    for (i = 1; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (AFR_IS_ARBITER_BRICK(priv, i))</div><div class='add'>+            continue;</div><div class='add'>+        read_iter = GF_ATOMIC_GET(priv-&gt;pending_reads[i]);</div><div class='add'>+        if (read_iter &lt; pending_read) {</div><div class='add'>+            pending_read = read_iter;</div><div class='add'>+            child = i;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return child;</div><div class='add'>+    return child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_hash_child (afr_read_subvol_args_t *args, afr_private_t *priv)</div><div class='add'>+afr_hash_child(afr_read_subvol_args_t *args, afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        uuid_t gfid_copy = {0,};</div><div class='del'>-        pid_t pid;</div><div class='del'>-        int child = -1;</div><div class='add'>+    uuid_t gfid_copy = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    pid_t pid;</div><div class='add'>+    int child = -1;</div><div class='ctx'> </div><div class='del'>-        switch (priv-&gt;hash_mode) {</div><div class='add'>+    switch (priv-&gt;hash_mode) {</div><div class='ctx'>         case 0:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case 1:</div><div class='del'>-                gf_uuid_copy (gfid_copy, args-&gt;gfid);</div><div class='del'>-                child = SuperFastHash((char *)gfid_copy,</div><div class='del'>-                                      sizeof(gfid_copy)) % priv-&gt;child_count;</div><div class='del'>-                break;</div><div class='add'>+            gf_uuid_copy(gfid_copy, args-&gt;gfid);</div><div class='add'>+            child = SuperFastHash((char *)gfid_copy, sizeof(gfid_copy)) %</div><div class='add'>+                    priv-&gt;child_count;</div><div class='add'>+            break;</div><div class='ctx'>         case 2:</div><div class='del'>-                if (args-&gt;ia_type != IA_IFDIR) {</div><div class='del'>-                        /*</div><div class='del'>-                         * Why getpid?  Because it's one of the cheapest calls</div><div class='del'>-                         * available - faster than gethostname etc. - and</div><div class='del'>-                         * returns a constant-length value that's sure to be</div><div class='del'>-                         * shorter than a UUID. It's still very unlikely to be</div><div class='del'>-                         * the same across clients, so it still provides good</div><div class='del'>-                         * mixing.  We're not trying for perfection here. All we</div><div class='del'>-                         * need is a low probability that multiple clients</div><div class='del'>-                         * won't converge on the same subvolume.</div><div class='del'>-                         */</div><div class='del'>-                        pid = getpid();</div><div class='del'>-                        memcpy (gfid_copy, &amp;pid, sizeof(pid));</div><div class='del'>-                }</div><div class='del'>-                child = SuperFastHash((char *)gfid_copy,</div><div class='del'>-                                      sizeof(gfid_copy)) % priv-&gt;child_count;</div><div class='del'>-                break;</div><div class='add'>+            if (args-&gt;ia_type != IA_IFDIR) {</div><div class='add'>+                /*</div><div class='add'>+                 * Why getpid?  Because it's one of the cheapest calls</div><div class='add'>+                 * available - faster than gethostname etc. - and</div><div class='add'>+                 * returns a constant-length value that's sure to be</div><div class='add'>+                 * shorter than a UUID. It's still very unlikely to be</div><div class='add'>+                 * the same across clients, so it still provides good</div><div class='add'>+                 * mixing.  We're not trying for perfection here. All we</div><div class='add'>+                 * need is a low probability that multiple clients</div><div class='add'>+                 * won't converge on the same subvolume.</div><div class='add'>+                 */</div><div class='add'>+                pid = getpid();</div><div class='add'>+                memcpy(gfid_copy, &amp;pid, sizeof(pid));</div><div class='add'>+            }</div><div class='add'>+            child = SuperFastHash((char *)gfid_copy, sizeof(gfid_copy)) %</div><div class='add'>+                    priv-&gt;child_count;</div><div class='add'>+            break;</div><div class='ctx'>         case 3:</div><div class='del'>-                child = afr_least_pending_reads_child (priv);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            child = afr_least_pending_reads_child(priv);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return child;</div><div class='add'>+    return child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_subvol_select_by_policy (inode_t *inode, xlator_t *this,</div><div class='del'>-				  unsigned char *readable,</div><div class='del'>-                                  afr_read_subvol_args_t *args)</div><div class='del'>-{</div><div class='del'>-	int             i           = 0;</div><div class='del'>-	int             read_subvol = -1;</div><div class='del'>-	afr_private_t  *priv        = NULL;</div><div class='del'>-        afr_read_subvol_args_t local_args = {0,};</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	/* first preference - explicitly specified or local subvolume */</div><div class='del'>-	if (priv-&gt;read_child &gt;= 0 &amp;&amp; readable[priv-&gt;read_child])</div><div class='del'>-                return priv-&gt;read_child;</div><div class='del'>-</div><div class='del'>-        if (inode_is_linked (inode)) {</div><div class='del'>-                gf_uuid_copy (local_args.gfid, inode-&gt;gfid);</div><div class='del'>-                local_args.ia_type = inode-&gt;ia_type;</div><div class='del'>-        } else if (args) {</div><div class='del'>-                local_args = *args;</div><div class='del'>-        }</div><div class='add'>+afr_read_subvol_select_by_policy(inode_t *inode, xlator_t *this,</div><div class='add'>+                                 unsigned char *readable,</div><div class='add'>+                                 afr_read_subvol_args_t *args)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_read_subvol_args_t local_args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	/* second preference - use hashed mode */</div><div class='del'>-        read_subvol = afr_hash_child (&amp;local_args, priv);</div><div class='del'>-	if (read_subvol &gt;= 0 &amp;&amp; readable[read_subvol])</div><div class='del'>-                return read_subvol;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (readable[i])</div><div class='del'>-                return i;</div><div class='del'>-	}</div><div class='add'>+    /* first preference - explicitly specified or local subvolume */</div><div class='add'>+    if (priv-&gt;read_child &gt;= 0 &amp;&amp; readable[priv-&gt;read_child])</div><div class='add'>+        return priv-&gt;read_child;</div><div class='ctx'> </div><div class='del'>-        /* no readable subvolumes, either split brain or all subvols down */</div><div class='add'>+    if (inode_is_linked(inode)) {</div><div class='add'>+        gf_uuid_copy(local_args.gfid, inode-&gt;gfid);</div><div class='add'>+        local_args.ia_type = inode-&gt;ia_type;</div><div class='add'>+    } else if (args) {</div><div class='add'>+        local_args = *args;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='del'>-}</div><div class='add'>+    /* second preference - use hashed mode */</div><div class='add'>+    read_subvol = afr_hash_child(&amp;local_args, priv);</div><div class='add'>+    if (read_subvol &gt;= 0 &amp;&amp; readable[read_subvol])</div><div class='add'>+        return read_subvol;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (readable[i])</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* no readable subvolumes, either split brain or all subvols down */</div><div class='add'>+</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_inode_read_subvol_type_get (inode_t *inode, xlator_t *this,</div><div class='del'>-				unsigned char *readable, int *event_p,</div><div class='del'>-				int type)</div><div class='add'>+afr_inode_read_subvol_type_get(inode_t *inode, xlator_t *this,</div><div class='add'>+                               unsigned char *readable, int *event_p, int type)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	if (type == AFR_METADATA_TRANSACTION)</div><div class='del'>-		ret = afr_inode_read_subvol_get (inode, this, 0, readable,</div><div class='del'>-						 event_p);</div><div class='del'>-	else</div><div class='del'>-		ret = afr_inode_read_subvol_get (inode, this, readable, 0,</div><div class='del'>-						 event_p);</div><div class='del'>-	return ret;</div><div class='add'>+    if (type == AFR_METADATA_TRANSACTION)</div><div class='add'>+        ret = afr_inode_read_subvol_get(inode, this, 0, readable, event_p);</div><div class='add'>+    else</div><div class='add'>+        ret = afr_inode_read_subvol_get(inode, this, readable, 0, event_p);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_readables_intersect_get (inode_t *inode, xlator_t *this, int *event,</div><div class='del'>-                             unsigned char *intersection)</div><div class='add'>+afr_readables_intersect_get(inode_t *inode, xlator_t *this, int *event,</div><div class='add'>+                            unsigned char *intersection)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	unsigned char *data_readable = NULL;</div><div class='del'>-	unsigned char *metadata_readable = NULL;</div><div class='del'>-	unsigned char *intersect = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *data_readable = NULL;</div><div class='add'>+    unsigned char *metadata_readable = NULL;</div><div class='add'>+    unsigned char *intersect = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	data_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-	metadata_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-	intersect = alloca0 (priv-&gt;child_count);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    data_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    intersect = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	afr_inode_read_subvol_get (inode, this, data_readable,</div><div class='del'>-                                   metadata_readable, event);</div><div class='add'>+    afr_inode_read_subvol_get(inode, this, data_readable, metadata_readable,</div><div class='add'>+                              event);</div><div class='ctx'> </div><div class='del'>-	AFR_INTERSECT (intersect, data_readable, metadata_readable,</div><div class='del'>-		       priv-&gt;child_count);</div><div class='del'>-        if (intersection)</div><div class='del'>-                memcpy (intersection, intersect,</div><div class='del'>-                        sizeof (*intersection) * priv-&gt;child_count);</div><div class='add'>+    AFR_INTERSECT(intersect, data_readable, metadata_readable,</div><div class='add'>+                  priv-&gt;child_count);</div><div class='add'>+    if (intersection)</div><div class='add'>+        memcpy(intersection, intersect,</div><div class='add'>+               sizeof(*intersection) * priv-&gt;child_count);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_subvol_get (inode_t *inode, xlator_t *this, int *subvol_p,</div><div class='del'>-                     unsigned char *readables,</div><div class='del'>-		     int *event_p, afr_transaction_type type,</div><div class='del'>-                     afr_read_subvol_args_t *args)</div><div class='add'>+afr_read_subvol_get(inode_t *inode, xlator_t *this, int *subvol_p,</div><div class='add'>+                    unsigned char *readables, int *event_p,</div><div class='add'>+                    afr_transaction_type type, afr_read_subvol_args_t *args)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	unsigned char *readable = NULL;</div><div class='del'>-	unsigned char *intersection = NULL;</div><div class='del'>-	int subvol = -1;</div><div class='del'>-	int event = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *readable = NULL;</div><div class='add'>+    unsigned char *intersection = NULL;</div><div class='add'>+    int subvol = -1;</div><div class='add'>+    int event = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-	intersection = alloca0 (priv-&gt;child_count);</div><div class='add'>+    readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    intersection = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	afr_inode_read_subvol_type_get (inode, this, readable, &amp;event, type);</div><div class='add'>+    afr_inode_read_subvol_type_get(inode, this, readable, &amp;event, type);</div><div class='ctx'> </div><div class='del'>-        afr_readables_intersect_get (inode, this, &amp;event, intersection);</div><div class='add'>+    afr_readables_intersect_get(inode, this, &amp;event, intersection);</div><div class='ctx'> </div><div class='del'>-	if (AFR_COUNT (intersection, priv-&gt;child_count) &gt; 0)</div><div class='del'>-		subvol = afr_read_subvol_select_by_policy (inode, this,</div><div class='del'>-							   intersection, args);</div><div class='del'>-	else</div><div class='del'>-		subvol = afr_read_subvol_select_by_policy (inode, this,</div><div class='del'>-							   readable, args);</div><div class='del'>-	if (subvol_p)</div><div class='del'>-		*subvol_p = subvol;</div><div class='del'>-	if (event_p)</div><div class='del'>-		*event_p = event;</div><div class='del'>-        if (readables)</div><div class='del'>-                memcpy (readables, readable,</div><div class='del'>-                        sizeof (*readables) * priv-&gt;child_count);</div><div class='del'>-	return subvol;</div><div class='add'>+    if (AFR_COUNT(intersection, priv-&gt;child_count) &gt; 0)</div><div class='add'>+        subvol = afr_read_subvol_select_by_policy(inode, this, intersection,</div><div class='add'>+                                                  args);</div><div class='add'>+    else</div><div class='add'>+        subvol = afr_read_subvol_select_by_policy(inode, this, readable, args);</div><div class='add'>+    if (subvol_p)</div><div class='add'>+        *subvol_p = subvol;</div><div class='add'>+    if (event_p)</div><div class='add'>+        *event_p = event;</div><div class='add'>+    if (readables)</div><div class='add'>+        memcpy(readables, readable, sizeof(*readables) * priv-&gt;child_count);</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_local_transaction_cleanup (afr_local_t *local, xlator_t *this)</div><div class='add'>+afr_local_transaction_cleanup(afr_local_t *local, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv    = NULL;</div><div class='del'>-        int           i        = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        afr_matrix_cleanup (local-&gt;pending, priv-&gt;child_count);</div><div class='add'>+    afr_matrix_cleanup(local-&gt;pending, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;internal_lock.locked_nodes);</div><div class='add'>+    GF_FREE(local-&gt;internal_lock.locked_nodes);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;internal_lock.lower_locked_nodes);</div><div class='add'>+    GF_FREE(local-&gt;internal_lock.lower_locked_nodes);</div><div class='ctx'> </div><div class='del'>-        afr_entry_lockee_cleanup (&amp;local-&gt;internal_lock);</div><div class='add'>+    afr_entry_lockee_cleanup(&amp;local-&gt;internal_lock);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;transaction.pre_op);</div><div class='add'>+    GF_FREE(local-&gt;transaction.pre_op);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;transaction.pre_op_sources);</div><div class='del'>-        if (local-&gt;transaction.changelog_xdata) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (!local-&gt;transaction.changelog_xdata[i])</div><div class='del'>-                                continue;</div><div class='del'>-                        dict_unref (local-&gt;transaction.changelog_xdata[i]);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (local-&gt;transaction.changelog_xdata);</div><div class='add'>+    GF_FREE(local-&gt;transaction.pre_op_sources);</div><div class='add'>+    if (local-&gt;transaction.changelog_xdata) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (!local-&gt;transaction.changelog_xdata[i])</div><div class='add'>+                continue;</div><div class='add'>+            dict_unref(local-&gt;transaction.changelog_xdata[i]);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(local-&gt;transaction.changelog_xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;transaction.failed_subvols);</div><div class='add'>+    GF_FREE(local-&gt;transaction.failed_subvols);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;transaction.basename);</div><div class='del'>-        GF_FREE (local-&gt;transaction.new_basename);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;local-&gt;transaction.parent_loc);</div><div class='del'>-        loc_wipe (&amp;local-&gt;transaction.new_parent_loc);</div><div class='add'>+    GF_FREE(local-&gt;transaction.basename);</div><div class='add'>+    GF_FREE(local-&gt;transaction.new_basename);</div><div class='ctx'> </div><div class='add'>+    loc_wipe(&amp;local-&gt;transaction.parent_loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;transaction.new_parent_loc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_reply_wipe (struct afr_reply *reply)</div><div class='add'>+afr_reply_wipe(struct afr_reply *reply)</div><div class='ctx'> {</div><div class='del'>-        if (reply-&gt;xdata) {</div><div class='del'>-                dict_unref (reply-&gt;xdata);</div><div class='del'>-                reply-&gt;xdata = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (reply-&gt;xdata) {</div><div class='add'>+        dict_unref(reply-&gt;xdata);</div><div class='add'>+        reply-&gt;xdata = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (reply-&gt;xattr) {</div><div class='del'>-                dict_unref (reply-&gt;xattr);</div><div class='del'>-                reply-&gt;xattr = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (reply-&gt;xattr) {</div><div class='add'>+        dict_unref(reply-&gt;xattr);</div><div class='add'>+        reply-&gt;xattr = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_replies_wipe (struct afr_reply *replies, int count)</div><div class='add'>+afr_replies_wipe(struct afr_reply *replies, int count)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                afr_reply_wipe (&amp;replies[i]);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        afr_reply_wipe(&amp;replies[i]);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_local_replies_wipe (afr_local_t *local, afr_private_t *priv)</div><div class='add'>+afr_local_replies_wipe(afr_local_t *local, afr_private_t *priv)</div><div class='ctx'> {</div><div class='add'>+    if (!local-&gt;replies)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;replies)</div><div class='del'>-		return;</div><div class='del'>-</div><div class='del'>-        afr_replies_wipe (local-&gt;replies, priv-&gt;child_count);</div><div class='add'>+    afr_replies_wipe(local-&gt;replies, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	memset (local-&gt;replies, 0, sizeof(*local-&gt;replies) * priv-&gt;child_count);</div><div class='add'>+    memset(local-&gt;replies, 0, sizeof(*local-&gt;replies) * priv-&gt;child_count);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_fop_lock_is_unlock (call_frame_t *frame)</div><div class='add'>+afr_fop_lock_is_unlock(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        switch (local-&gt;op) {</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    switch (local-&gt;op) {</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-                if ((F_UNLCK == local-&gt;cont.inodelk.in_flock.l_type) &amp;&amp;</div><div class='del'>-                   (local-&gt;cont.inodelk.in_cmd == F_SETLKW ||</div><div class='del'>-                    local-&gt;cont.inodelk.in_cmd == F_SETLK))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            if ((F_UNLCK == local-&gt;cont.inodelk.in_flock.l_type) &amp;&amp;</div><div class='add'>+                (local-&gt;cont.inodelk.in_cmd == F_SETLKW ||</div><div class='add'>+                 local-&gt;cont.inodelk.in_cmd == F_SETLK))</div><div class='add'>+                return _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-                if (ENTRYLK_UNLOCK == local-&gt;cont.entrylk.in_cmd)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            if (ENTRYLK_UNLOCK == local-&gt;cont.entrylk.in_cmd)</div><div class='add'>+                return _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_lk_is_unlock (int32_t cmd, struct gf_flock *flock)</div><div class='add'>+afr_lk_is_unlock(int32_t cmd, struct gf_flock *flock)</div><div class='ctx'> {</div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case F_RESLK_UNLCK:</div><div class='del'>-                return _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            return _gf_true;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLKW != F_SETLKW64</div><div class='ctx'>         case F_SETLKW64:</div><div class='hunk'>@@ -1953,571 +1898,565 @@ afr_lk_is_unlock (int32_t cmd, struct gf_flock *flock)</div><div class='ctx'>         case F_SETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLK:</div><div class='del'>-                if (F_UNLCK == flock-&gt;l_type)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            if (F_UNLCK == flock-&gt;l_type)</div><div class='add'>+                return _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_handle_inconsistent_fop (call_frame_t *frame, int32_t *op_ret,</div><div class='del'>-                             int32_t *op_errno)</div><div class='add'>+afr_handle_inconsistent_fop(call_frame_t *frame, int32_t *op_ret,</div><div class='add'>+                            int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;this || !frame-&gt;local || !frame-&gt;this-&gt;private)</div><div class='del'>-                return;</div><div class='add'>+    if (!frame || !frame-&gt;this || !frame-&gt;local || !frame-&gt;this-&gt;private)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (*op_ret &lt; 0)</div><div class='del'>-                return;</div><div class='add'>+    if (*op_ret &lt; 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        /* Failing inodelk/entrylk/lk here is not a good idea because we</div><div class='del'>-         * need to cleanup the locks on the other bricks if we choose to fail</div><div class='del'>-         * the fop here. The brick may go down just after unwind happens as well</div><div class='del'>-         * so anyways the fop will fail when the next fop is sent so leaving</div><div class='del'>-         * it like this for now.*/</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        switch (local-&gt;op) {</div><div class='add'>+    /* Failing inodelk/entrylk/lk here is not a good idea because we</div><div class='add'>+     * need to cleanup the locks on the other bricks if we choose to fail</div><div class='add'>+     * the fop here. The brick may go down just after unwind happens as well</div><div class='add'>+     * so anyways the fop will fail when the next fop is sent so leaving</div><div class='add'>+     * it like this for now.*/</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    switch (local-&gt;op) {</div><div class='ctx'>         case GF_FOP_LOOKUP:</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='ctx'>         case GF_FOP_LK:</div><div class='del'>-                return;</div><div class='add'>+            return;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = frame-&gt;this-&gt;private;</div><div class='del'>-        if (!priv-&gt;consistent_io)</div><div class='del'>-                return;</div><div class='add'>+    priv = frame-&gt;this-&gt;private;</div><div class='add'>+    if (!priv-&gt;consistent_io)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;event_generation &amp;&amp;</div><div class='del'>-            (local-&gt;event_generation != priv-&gt;event_generation))</div><div class='del'>-                goto inconsistent;</div><div class='add'>+    if (local-&gt;event_generation &amp;&amp;</div><div class='add'>+        (local-&gt;event_generation != priv-&gt;event_generation))</div><div class='add'>+        goto inconsistent;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> inconsistent:</div><div class='del'>-        *op_ret = -1;</div><div class='del'>-        *op_errno = ENOTCONN;</div><div class='add'>+    *op_ret = -1;</div><div class='add'>+    *op_errno = ENOTCONN;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_local_cleanup (afr_local_t *local, xlator_t *this)</div><div class='add'>+afr_local_cleanup(afr_local_t *local, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t * priv = NULL;</div><div class='del'>-</div><div class='del'>-        if (!local)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-	syncbarrier_destroy (&amp;local-&gt;barrier);</div><div class='del'>-</div><div class='del'>-        afr_local_transaction_cleanup (local, this);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        loc_wipe (&amp;local-&gt;newloc);</div><div class='add'>+    if (!local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd)</div><div class='del'>-                fd_unref (local-&gt;fd);</div><div class='add'>+    syncbarrier_destroy(&amp;local-&gt;barrier);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr_req)</div><div class='del'>-                dict_unref (local-&gt;xattr_req);</div><div class='add'>+    afr_local_transaction_cleanup(local, this);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr_rsp)</div><div class='del'>-                dict_unref (local-&gt;xattr_rsp);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;dict)</div><div class='del'>-                dict_unref (local-&gt;dict);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;newloc);</div><div class='ctx'> </div><div class='del'>-        afr_local_replies_wipe (local, priv);</div><div class='del'>-	GF_FREE(local-&gt;replies);</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;child_up);</div><div class='add'>+    if (local-&gt;xattr_req)</div><div class='add'>+        dict_unref(local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;read_attempted);</div><div class='add'>+    if (local-&gt;xattr_rsp)</div><div class='add'>+        dict_unref(local-&gt;xattr_rsp);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;readable);</div><div class='del'>-        GF_FREE (local-&gt;readable2);</div><div class='add'>+    if (local-&gt;dict)</div><div class='add'>+        dict_unref(local-&gt;dict);</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;inode)</div><div class='del'>-		inode_unref (local-&gt;inode);</div><div class='add'>+    afr_local_replies_wipe(local, priv);</div><div class='add'>+    GF_FREE(local-&gt;replies);</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;parent)</div><div class='del'>-		inode_unref (local-&gt;parent);</div><div class='add'>+    GF_FREE(local-&gt;child_up);</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;parent2)</div><div class='del'>-		inode_unref (local-&gt;parent2);</div><div class='add'>+    GF_FREE(local-&gt;read_attempted);</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;refreshinode)</div><div class='del'>-		inode_unref (local-&gt;refreshinode);</div><div class='add'>+    GF_FREE(local-&gt;readable);</div><div class='add'>+    GF_FREE(local-&gt;readable2);</div><div class='ctx'> </div><div class='del'>-        { /* getxattr */</div><div class='del'>-                GF_FREE (local-&gt;cont.getxattr.name);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;inode)</div><div class='add'>+        inode_unref(local-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        { /* lk */</div><div class='del'>-                GF_FREE (local-&gt;cont.lk.locked_nodes);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;parent)</div><div class='add'>+        inode_unref(local-&gt;parent);</div><div class='ctx'> </div><div class='del'>-        { /* create */</div><div class='del'>-                if (local-&gt;cont.create.fd)</div><div class='del'>-                        fd_unref (local-&gt;cont.create.fd);</div><div class='del'>-                if (local-&gt;cont.create.params)</div><div class='del'>-                        dict_unref (local-&gt;cont.create.params);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;parent2)</div><div class='add'>+        inode_unref(local-&gt;parent2);</div><div class='ctx'> </div><div class='del'>-        { /* mknod */</div><div class='del'>-                if (local-&gt;cont.mknod.params)</div><div class='del'>-                        dict_unref (local-&gt;cont.mknod.params);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;refreshinode)</div><div class='add'>+        inode_unref(local-&gt;refreshinode);</div><div class='ctx'> </div><div class='del'>-        { /* mkdir */</div><div class='del'>-                if (local-&gt;cont.mkdir.params)</div><div class='del'>-                        dict_unref (local-&gt;cont.mkdir.params);</div><div class='del'>-        }</div><div class='add'>+    { /* getxattr */</div><div class='add'>+        GF_FREE(local-&gt;cont.getxattr.name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* symlink */</div><div class='del'>-                if (local-&gt;cont.symlink.params)</div><div class='del'>-                        dict_unref (local-&gt;cont.symlink.params);</div><div class='del'>-        }</div><div class='add'>+    { /* lk */</div><div class='add'>+        GF_FREE(local-&gt;cont.lk.locked_nodes);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* writev */</div><div class='del'>-                GF_FREE (local-&gt;cont.writev.vector);</div><div class='del'>-                if (local-&gt;cont.writev.iobref)</div><div class='del'>-                        iobref_unref (local-&gt;cont.writev.iobref);</div><div class='del'>-        }</div><div class='add'>+    { /* create */</div><div class='add'>+        if (local-&gt;cont.create.fd)</div><div class='add'>+            fd_unref(local-&gt;cont.create.fd);</div><div class='add'>+        if (local-&gt;cont.create.params)</div><div class='add'>+            dict_unref(local-&gt;cont.create.params);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* setxattr */</div><div class='del'>-                if (local-&gt;cont.setxattr.dict)</div><div class='del'>-                        dict_unref (local-&gt;cont.setxattr.dict);</div><div class='del'>-        }</div><div class='add'>+    { /* mknod */</div><div class='add'>+        if (local-&gt;cont.mknod.params)</div><div class='add'>+            dict_unref(local-&gt;cont.mknod.params);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* fsetxattr */</div><div class='del'>-                if (local-&gt;cont.fsetxattr.dict)</div><div class='del'>-                        dict_unref (local-&gt;cont.fsetxattr.dict);</div><div class='del'>-        }</div><div class='add'>+    { /* mkdir */</div><div class='add'>+        if (local-&gt;cont.mkdir.params)</div><div class='add'>+            dict_unref(local-&gt;cont.mkdir.params);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* removexattr */</div><div class='del'>-                GF_FREE (local-&gt;cont.removexattr.name);</div><div class='del'>-        }</div><div class='del'>-        { /* xattrop */</div><div class='del'>-                if (local-&gt;cont.xattrop.xattr)</div><div class='del'>-                        dict_unref (local-&gt;cont.xattrop.xattr);</div><div class='del'>-        }</div><div class='del'>-        { /* symlink */</div><div class='del'>-                GF_FREE (local-&gt;cont.symlink.linkpath);</div><div class='del'>-        }</div><div class='add'>+    { /* symlink */</div><div class='add'>+        if (local-&gt;cont.symlink.params)</div><div class='add'>+            dict_unref(local-&gt;cont.symlink.params);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* opendir */</div><div class='del'>-                GF_FREE (local-&gt;cont.opendir.checksum);</div><div class='del'>-        }</div><div class='add'>+    { /* writev */</div><div class='add'>+        GF_FREE(local-&gt;cont.writev.vector);</div><div class='add'>+        if (local-&gt;cont.writev.iobref)</div><div class='add'>+            iobref_unref(local-&gt;cont.writev.iobref);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* open */</div><div class='del'>-                if (local-&gt;cont.open.fd)</div><div class='del'>-                        fd_unref (local-&gt;cont.open.fd);</div><div class='del'>-        }</div><div class='add'>+    { /* setxattr */</div><div class='add'>+        if (local-&gt;cont.setxattr.dict)</div><div class='add'>+            dict_unref(local-&gt;cont.setxattr.dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* readdirp */</div><div class='del'>-                if (local-&gt;cont.readdir.dict)</div><div class='del'>-                        dict_unref (local-&gt;cont.readdir.dict);</div><div class='del'>-        }</div><div class='add'>+    { /* fsetxattr */</div><div class='add'>+        if (local-&gt;cont.fsetxattr.dict)</div><div class='add'>+            dict_unref(local-&gt;cont.fsetxattr.dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* inodelk */</div><div class='del'>-                GF_FREE (local-&gt;cont.inodelk.volume);</div><div class='del'>-                if (local-&gt;cont.inodelk.xdata)</div><div class='del'>-                        dict_unref (local-&gt;cont.inodelk.xdata);</div><div class='del'>-        }</div><div class='add'>+    { /* removexattr */</div><div class='add'>+        GF_FREE(local-&gt;cont.removexattr.name);</div><div class='add'>+    }</div><div class='add'>+    { /* xattrop */</div><div class='add'>+        if (local-&gt;cont.xattrop.xattr)</div><div class='add'>+            dict_unref(local-&gt;cont.xattrop.xattr);</div><div class='add'>+    }</div><div class='add'>+    { /* symlink */</div><div class='add'>+        GF_FREE(local-&gt;cont.symlink.linkpath);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        { /* entrylk */</div><div class='del'>-                GF_FREE (local-&gt;cont.entrylk.volume);</div><div class='del'>-                GF_FREE (local-&gt;cont.entrylk.basename);</div><div class='del'>-                if (local-&gt;cont.entrylk.xdata)</div><div class='del'>-                        dict_unref (local-&gt;cont.entrylk.xdata);</div><div class='del'>-        }</div><div class='add'>+    { /* opendir */</div><div class='add'>+        GF_FREE(local-&gt;cont.opendir.checksum);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata_req)</div><div class='del'>-                dict_unref (local-&gt;xdata_req);</div><div class='add'>+    { /* open */</div><div class='add'>+        if (local-&gt;cont.open.fd)</div><div class='add'>+            fd_unref(local-&gt;cont.open.fd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata_rsp)</div><div class='del'>-                dict_unref (local-&gt;xdata_rsp);</div><div class='add'>+    { /* readdirp */</div><div class='add'>+        if (local-&gt;cont.readdir.dict)</div><div class='add'>+            dict_unref(local-&gt;cont.readdir.dict);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    { /* inodelk */</div><div class='add'>+        GF_FREE(local-&gt;cont.inodelk.volume);</div><div class='add'>+        if (local-&gt;cont.inodelk.xdata)</div><div class='add'>+            dict_unref(local-&gt;cont.inodelk.xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    { /* entrylk */</div><div class='add'>+        GF_FREE(local-&gt;cont.entrylk.volume);</div><div class='add'>+        GF_FREE(local-&gt;cont.entrylk.basename);</div><div class='add'>+        if (local-&gt;cont.entrylk.xdata)</div><div class='add'>+            dict_unref(local-&gt;cont.entrylk.xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;xdata_req)</div><div class='add'>+        dict_unref(local-&gt;xdata_req);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;xdata_rsp)</div><div class='add'>+        dict_unref(local-&gt;xdata_rsp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_frame_return (call_frame_t *frame)</div><div class='add'>+afr_frame_return(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int          call_count = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                call_count = --local-&gt;call_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        call_count = --local-&gt;call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return call_count;</div><div class='add'>+    return call_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *afr_ignore_xattrs[] = {</div><div class='del'>-        GF_SELINUX_XATTR_KEY,</div><div class='del'>-        QUOTA_SIZE_KEY,</div><div class='del'>-        NULL</div><div class='del'>-};</div><div class='add'>+static char *afr_ignore_xattrs[] = {GF_SELINUX_XATTR_KEY, QUOTA_SIZE_KEY, NULL};</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_xattr_ignorable (char *key)</div><div class='add'>+afr_is_xattr_ignorable(char *key)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!strncmp (key, AFR_XATTR_PREFIX, SLEN (AFR_XATTR_PREFIX)))</div><div class='del'>-                return _gf_true;</div><div class='del'>-        for (i = 0; afr_ignore_xattrs[i]; i++) {</div><div class='del'>-                if (!strcmp (key, afr_ignore_xattrs[i]))</div><div class='del'>-                       return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (!strncmp(key, AFR_XATTR_PREFIX, SLEN(AFR_XATTR_PREFIX)))</div><div class='add'>+        return _gf_true;</div><div class='add'>+    for (i = 0; afr_ignore_xattrs[i]; i++) {</div><div class='add'>+        if (!strcmp(key, afr_ignore_xattrs[i]))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_xattr_match_needed (dict_t *this, char *key1, data_t *value1, void *data)</div><div class='add'>+afr_xattr_match_needed(dict_t *this, char *key1, data_t *value1, void *data)</div><div class='ctx'> {</div><div class='del'>-        /* Ignore all non-disk (i.e. virtual) xattrs right away. */</div><div class='del'>-        if (!gf_is_valid_xattr_namespace (key1))</div><div class='del'>-                return _gf_false;</div><div class='add'>+    /* Ignore all non-disk (i.e. virtual) xattrs right away. */</div><div class='add'>+    if (!gf_is_valid_xattr_namespace(key1))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        /* Ignore on-disk xattrs that AFR doesn't need to heal. */</div><div class='del'>-        if (!afr_is_xattr_ignorable (key1))</div><div class='del'>-                return _gf_true;</div><div class='add'>+    /* Ignore on-disk xattrs that AFR doesn't need to heal. */</div><div class='add'>+    if (!afr_is_xattr_ignorable(key1))</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_xattrs_are_equal (dict_t *dict1, dict_t *dict2)</div><div class='add'>+afr_xattrs_are_equal(dict_t *dict1, dict_t *dict2)</div><div class='ctx'> {</div><div class='del'>-        return are_dicts_equal (dict1, dict2, afr_xattr_match_needed, NULL);</div><div class='add'>+    return are_dicts_equal(dict1, dict2, afr_xattr_match_needed, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_get_parent_read_subvol (xlator_t *this, inode_t *parent,</div><div class='del'>-                            struct afr_reply *replies, unsigned char *readable)</div><div class='add'>+afr_get_parent_read_subvol(xlator_t *this, inode_t *parent,</div><div class='add'>+                           struct afr_reply *replies, unsigned char *readable)</div><div class='ctx'> {</div><div class='del'>-        int             i                    = 0;</div><div class='del'>-        int             par_read_subvol      = -1;</div><div class='del'>-        int             par_read_subvol_iter = -1;</div><div class='del'>-        afr_private_t  *priv                 = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int par_read_subvol = -1;</div><div class='add'>+    int par_read_subvol_iter = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                par_read_subvol = afr_data_subvol_get (parent, this, NULL, NULL,</div><div class='del'>-                                                       NULL, NULL);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='add'>+    if (parent)</div><div class='add'>+        par_read_subvol = afr_data_subvol_get(parent, this, NULL, NULL, NULL,</div><div class='add'>+                                              NULL);</div><div class='ctx'> </div><div class='del'>-                if (replies[i].op_ret &lt; 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (par_read_subvol_iter == -1) {</div><div class='del'>-                        par_read_subvol_iter = i;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if ((par_read_subvol_iter != par_read_subvol) &amp;&amp; readable[i])</div><div class='del'>-                        par_read_subvol_iter = i;</div><div class='add'>+        if (replies[i].op_ret &lt; 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (i == par_read_subvol)</div><div class='del'>-                        par_read_subvol_iter = i;</div><div class='add'>+        if (par_read_subvol_iter == -1) {</div><div class='add'>+            par_read_subvol_iter = i;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-        /* At the end of the for-loop, the only reason why @par_read_subvol_iter</div><div class='del'>-         * could be -1 is when this LOOKUP has failed on all sub-volumes.</div><div class='del'>-         * So it is okay to send an arbitrary subvolume (0 in this case)</div><div class='del'>-         * as parent read subvol.</div><div class='del'>-         */</div><div class='del'>-        if (par_read_subvol_iter == -1)</div><div class='del'>-                par_read_subvol_iter = 0;</div><div class='ctx'> </div><div class='del'>-        return par_read_subvol_iter;</div><div class='add'>+        if ((par_read_subvol_iter != par_read_subvol) &amp;&amp; readable[i])</div><div class='add'>+            par_read_subvol_iter = i;</div><div class='add'>+</div><div class='add'>+        if (i == par_read_subvol)</div><div class='add'>+            par_read_subvol_iter = i;</div><div class='add'>+    }</div><div class='add'>+    /* At the end of the for-loop, the only reason why @par_read_subvol_iter</div><div class='add'>+     * could be -1 is when this LOOKUP has failed on all sub-volumes.</div><div class='add'>+     * So it is okay to send an arbitrary subvolume (0 in this case)</div><div class='add'>+     * as parent read subvol.</div><div class='add'>+     */</div><div class='add'>+    if (par_read_subvol_iter == -1)</div><div class='add'>+        par_read_subvol_iter = 0;</div><div class='ctx'> </div><div class='add'>+    return par_read_subvol_iter;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_subvol_decide (inode_t *inode, xlator_t *this,</div><div class='del'>-                        afr_read_subvol_args_t *args, unsigned char *readable)</div><div class='add'>+afr_read_subvol_decide(inode_t *inode, xlator_t *this,</div><div class='add'>+                       afr_read_subvol_args_t *args, unsigned char *readable)</div><div class='ctx'> {</div><div class='del'>-        int event = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        unsigned char *intersection = NULL;</div><div class='add'>+    int event = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *intersection = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        intersection = alloca0 (priv-&gt;child_count);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    intersection = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        afr_readables_intersect_get (inode, this, &amp;event, intersection);</div><div class='add'>+    afr_readables_intersect_get(inode, this, &amp;event, intersection);</div><div class='ctx'> </div><div class='del'>-        if (AFR_COUNT (intersection, priv-&gt;child_count) &lt;= 0) {</div><div class='del'>-                /* TODO: If we have one brick with valid data_readable and</div><div class='del'>-                 * another with metadata_readable, try to send an iatt with</div><div class='del'>-                 * valid bits from both.*/</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (AFR_COUNT(intersection, priv-&gt;child_count) &lt;= 0) {</div><div class='add'>+        /* TODO: If we have one brick with valid data_readable and</div><div class='add'>+         * another with metadata_readable, try to send an iatt with</div><div class='add'>+         * valid bits from both.*/</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (readable, intersection, sizeof (*readable) * priv-&gt;child_count);</div><div class='add'>+    memcpy(readable, intersection, sizeof(*readable) * priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        return afr_read_subvol_select_by_policy (inode, this, intersection,</div><div class='del'>-                                                 args);</div><div class='add'>+    return afr_read_subvol_select_by_policy(inode, this, intersection, args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static inline int</div><div class='del'>-afr_first_up_child (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_first_up_child(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t       *priv  = NULL;</div><div class='del'>-        afr_local_t         *local = NULL;</div><div class='del'>-        int                  i     = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (local-&gt;replies[i].valid &amp;&amp;</div><div class='del'>-                    local-&gt;replies[i].op_ret == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        return -1;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].op_ret == 0)</div><div class='add'>+            return i;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_attempt_readsubvol_set (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                            unsigned char *success_replies,</div><div class='del'>-                            unsigned char *data_readable, int *read_subvol)</div><div class='add'>+afr_attempt_readsubvol_set(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                           unsigned char *success_replies,</div><div class='add'>+                           unsigned char *data_readable, int *read_subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int spb_choice = -1;</div><div class='del'>-        int child_count = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int spb_choice = -1;</div><div class='add'>+    int child_count = -1;</div><div class='ctx'> </div><div class='del'>-        if (*read_subvol != -1)</div><div class='del'>-                return;</div><div class='add'>+    if (*read_subvol != -1)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        child_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        afr_inode_split_brain_choice_get (local-&gt;inode, this,</div><div class='del'>-                                          &amp;spb_choice);</div><div class='del'>-        if ((spb_choice &gt;= 0) &amp;&amp;</div><div class='del'>-            (AFR_COUNT(success_replies, child_count) == child_count)) {</div><div class='del'>-                *read_subvol = spb_choice;</div><div class='del'>-        } else if (!priv-&gt;quorum_count) {</div><div class='del'>-                *read_subvol = afr_first_up_child (frame, this);</div><div class='del'>-        } else if (priv-&gt;quorum_count &amp;&amp;</div><div class='del'>-                   afr_has_quorum (data_readable, this)) {</div><div class='del'>-                /* read_subvol is guaranteed to be valid if we hit this path. */</div><div class='del'>-                *read_subvol = afr_first_up_child (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-               /* If quorum is enabled and we do not have a</div><div class='del'>-                  readable yet, it means all good copies are down.</div><div class='del'>-               */</div><div class='del'>-               local-&gt;op_ret = -1;</div><div class='del'>-               local-&gt;op_errno = ENOTCONN;</div><div class='del'>-               gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                       AFR_MSG_READ_SUBVOL_ERROR, "no read "</div><div class='del'>-                       "subvols for %s", local-&gt;loc.path);</div><div class='del'>-        }</div><div class='del'>-        if (*read_subvol &gt;= 0)</div><div class='del'>-                dict_del (local-&gt;replies[*read_subvol].xdata, GF_CONTENT_KEY);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    child_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    afr_inode_split_brain_choice_get(local-&gt;inode, this, &amp;spb_choice);</div><div class='add'>+    if ((spb_choice &gt;= 0) &amp;&amp;</div><div class='add'>+        (AFR_COUNT(success_replies, child_count) == child_count)) {</div><div class='add'>+        *read_subvol = spb_choice;</div><div class='add'>+    } else if (!priv-&gt;quorum_count) {</div><div class='add'>+        *read_subvol = afr_first_up_child(frame, this);</div><div class='add'>+    } else if (priv-&gt;quorum_count &amp;&amp; afr_has_quorum(data_readable, this)) {</div><div class='add'>+        /* read_subvol is guaranteed to be valid if we hit this path. */</div><div class='add'>+        *read_subvol = afr_first_up_child(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        /* If quorum is enabled and we do not have a</div><div class='add'>+           readable yet, it means all good copies are down.</div><div class='add'>+        */</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTCONN;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_READ_SUBVOL_ERROR,</div><div class='add'>+               "no read "</div><div class='add'>+               "subvols for %s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+    }</div><div class='add'>+    if (*read_subvol &gt;= 0)</div><div class='add'>+        dict_del(local-&gt;replies[*read_subvol].xdata, GF_CONTENT_KEY);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_lookup_done (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_private_t       *priv  = NULL;</div><div class='del'>-        afr_local_t         *local = NULL;</div><div class='del'>-	int                 i = -1;</div><div class='del'>-	int                 op_errno = 0;</div><div class='del'>-	int                 read_subvol = 0;</div><div class='del'>-        int                 par_read_subvol = 0;</div><div class='del'>-        int                 ret         = -1;</div><div class='del'>-	unsigned char      *readable = NULL;</div><div class='del'>-        unsigned char      *success_replies = NULL;</div><div class='del'>-	int                 event = 0;</div><div class='del'>-	struct afr_reply   *replies = NULL;</div><div class='del'>-	uuid_t              read_gfid = {0, };</div><div class='del'>-	gf_boolean_t        locked_entry = _gf_false;</div><div class='del'>-	gf_boolean_t        can_interpret = _gf_true;</div><div class='del'>-        inode_t            *parent = NULL;</div><div class='del'>-        ia_type_t           ia_type = IA_INVAL;</div><div class='del'>-        afr_read_subvol_args_t args = {0,};</div><div class='del'>-        char               *gfid_heal_msg = NULL;</div><div class='del'>-</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	replies = local-&gt;replies;</div><div class='del'>-        parent = local-&gt;loc.parent;</div><div class='del'>-</div><div class='del'>-	locked_entry = afr_is_possibly_under_txn (AFR_ENTRY_TRANSACTION, local,</div><div class='del'>-                                                  this);</div><div class='del'>-</div><div class='del'>-	readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-	success_replies = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	afr_inode_read_subvol_get (parent, this, readable, NULL, &amp;event);</div><div class='del'>-        par_read_subvol = afr_get_parent_read_subvol (this, parent, replies,</div><div class='del'>-                                                      readable);</div><div class='del'>-</div><div class='del'>-	/* First, check if we have a gfid-change from somewhere,</div><div class='del'>-	   If so, propagate that so that a fresh lookup can be</div><div class='del'>-	   issued</div><div class='del'>-	*/</div><div class='del'>-        if (local-&gt;cont.lookup.needs_fresh_lookup) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ESTALE;</div><div class='del'>-                goto error;</div><div class='add'>+afr_lookup_done(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int read_subvol = 0;</div><div class='add'>+    int par_read_subvol = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned char *readable = NULL;</div><div class='add'>+    unsigned char *success_replies = NULL;</div><div class='add'>+    int event = 0;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    uuid_t read_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t locked_entry = _gf_false;</div><div class='add'>+    gf_boolean_t can_interpret = _gf_true;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    ia_type_t ia_type = IA_INVAL;</div><div class='add'>+    afr_read_subvol_args_t args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *gfid_heal_msg = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+    parent = local-&gt;loc.parent;</div><div class='add'>+</div><div class='add'>+    locked_entry = afr_is_possibly_under_txn(AFR_ENTRY_TRANSACTION, local,</div><div class='add'>+                                             this);</div><div class='add'>+</div><div class='add'>+    readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    success_replies = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    afr_inode_read_subvol_get(parent, this, readable, NULL, &amp;event);</div><div class='add'>+    par_read_subvol = afr_get_parent_read_subvol(this, parent, replies,</div><div class='add'>+                                                 readable);</div><div class='add'>+</div><div class='add'>+    /* First, check if we have a gfid-change from somewhere,</div><div class='add'>+       If so, propagate that so that a fresh lookup can be</div><div class='add'>+       issued</div><div class='add'>+    */</div><div class='add'>+    if (local-&gt;cont.lookup.needs_fresh_lookup) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ESTALE;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_errno = afr_final_errno(frame-&gt;local, this-&gt;private);</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    read_subvol = -1;</div><div class='add'>+    afr_fill_success_replies(local, priv, success_replies);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (locked_entry &amp;&amp; replies[i].op_ret == -1 &amp;&amp;</div><div class='add'>+            replies[i].op_errno == ENOENT) {</div><div class='add'>+            /* Second, check entry is still</div><div class='add'>+               "underway" in creation */</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOENT;</div><div class='add'>+            goto error;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	op_errno = afr_final_errno (frame-&gt;local, this-&gt;private);</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='add'>+        if (replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-	read_subvol = -1;</div><div class='del'>-        afr_fill_success_replies (local, priv, success_replies);</div><div class='add'>+        if (read_subvol == -1 || !readable[read_subvol]) {</div><div class='add'>+            read_subvol = i;</div><div class='add'>+            gf_uuid_copy(read_gfid, replies[i].poststat.ia_gfid);</div><div class='add'>+            ia_type = replies[i].poststat.ia_type;</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid)</div><div class='del'>-			continue;</div><div class='add'>+    if (read_subvol == -1)</div><div class='add'>+        goto error;</div><div class='add'>+    /* We now have a read_subvol, which is readable[] (if there</div><div class='add'>+       were any). Next we look for GFID mismatches. We don't</div><div class='add'>+       consider a GFID mismatch as an error if read_subvol is</div><div class='add'>+       readable[] but the mismatching GFID subvol is not.</div><div class='add'>+    */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (locked_entry &amp;&amp; replies[i].op_ret == -1 &amp;&amp;</div><div class='del'>-		    replies[i].op_errno == ENOENT) {</div><div class='del'>-			/* Second, check entry is still</div><div class='del'>-			   "underway" in creation */</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOENT;</div><div class='del'>-                        goto error;</div><div class='del'>-		}</div><div class='add'>+        if (!gf_uuid_compare(replies[i].poststat.ia_gfid, read_gfid))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		if (replies[i].op_ret == -1)</div><div class='del'>-			continue;</div><div class='add'>+        can_interpret = _gf_false;</div><div class='ctx'> </div><div class='del'>-		if (read_subvol == -1 || !readable[read_subvol]) {</div><div class='del'>-			read_subvol = i;</div><div class='del'>-			gf_uuid_copy (read_gfid, replies[i].poststat.ia_gfid);</div><div class='del'>-                        ia_type = replies[i].poststat.ia_type;</div><div class='del'>-			local-&gt;op_ret = 0;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+        if (locked_entry)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        if (read_subvol == -1)</div><div class='del'>-                goto error;</div><div class='del'>-	/* We now have a read_subvol, which is readable[] (if there</div><div class='del'>-	   were any). Next we look for GFID mismatches. We don't</div><div class='del'>-	   consider a GFID mismatch as an error if read_subvol is</div><div class='del'>-	   readable[] but the mismatching GFID subvol is not.</div><div class='del'>-	*/</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid || replies[i].op_ret == -1) {</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!gf_uuid_compare (replies[i].poststat.ia_gfid, read_gfid))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-		can_interpret = _gf_false;</div><div class='del'>-</div><div class='del'>-		if (locked_entry)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		/* Now GFIDs mismatch. It's OK as long as this subvol</div><div class='del'>-		   is not readable[] but read_subvol is */</div><div class='del'>-		if (readable[read_subvol] &amp;&amp; !readable[i])</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-                /* If we were called from glfsheal and there is still a gfid</div><div class='del'>-                 * mismatch, succeed the lookup and let glfsheal print the</div><div class='del'>-                 * response via gfid-heal-msg.*/</div><div class='del'>-                if (!dict_get_str (local-&gt;xattr_req, "gfid-heal-msg",</div><div class='del'>-                                   &amp;gfid_heal_msg))</div><div class='del'>-                        goto cant_interpret;</div><div class='del'>-</div><div class='del'>-		/* LOG ERROR */</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = EIO;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Forth, for the finalized GFID, pick the best subvolume</div><div class='del'>-	   to return stats from.</div><div class='del'>-	*/</div><div class='del'>-        read_subvol = -1;</div><div class='del'>-        memset (readable, 0, sizeof (*readable) * priv-&gt;child_count);</div><div class='del'>-	if (can_interpret) {</div><div class='del'>-                if (!afr_has_quorum (success_replies, this))</div><div class='del'>-                        goto cant_interpret;</div><div class='del'>-		/* It is safe to call afr_replies_interpret() because we have</div><div class='del'>-		   a response from all the UP subvolumes and all of them resolved</div><div class='del'>-		   to the same GFID</div><div class='del'>-		*/</div><div class='del'>-                gf_uuid_copy (args.gfid, read_gfid);</div><div class='del'>-                args.ia_type = ia_type;</div><div class='del'>-		ret = afr_replies_interpret (frame, this, local-&gt;inode, NULL);</div><div class='del'>-                read_subvol = afr_read_subvol_decide (local-&gt;inode, this, &amp;args,</div><div class='del'>-                                                      readable);</div><div class='del'>-                if (read_subvol == -1)</div><div class='del'>-                        goto cant_interpret;</div><div class='del'>-                if (ret) {</div><div class='del'>-			afr_inode_event_gen_reset (local-&gt;inode, this);</div><div class='del'>-                        dict_del (local-&gt;replies[read_subvol].xdata,</div><div class='del'>-                                  GF_CONTENT_KEY);</div><div class='del'>-                }</div><div class='del'>-	} else {</div><div class='del'>-	cant_interpret:</div><div class='del'>-                afr_attempt_readsubvol_set (frame, this, success_replies,</div><div class='del'>-                                            readable, &amp;read_subvol);</div><div class='del'>-                if (read_subvol == -1) {</div><div class='del'>-                        goto error;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+        /* Now GFIDs mismatch. It's OK as long as this subvol</div><div class='add'>+           is not readable[] but read_subvol is */</div><div class='add'>+        if (readable[read_subvol] &amp;&amp; !readable[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-	afr_handle_quota_size (frame, this);</div><div class='add'>+        /* If we were called from glfsheal and there is still a gfid</div><div class='add'>+         * mismatch, succeed the lookup and let glfsheal print the</div><div class='add'>+         * response via gfid-heal-msg.*/</div><div class='add'>+        if (!dict_get_str(local-&gt;xattr_req, "gfid-heal-msg", &amp;gfid_heal_msg))</div><div class='add'>+            goto cant_interpret;</div><div class='ctx'> </div><div class='del'>-        afr_set_need_heal (this, local);</div><div class='del'>-        if (AFR_IS_ARBITER_BRICK (priv, read_subvol) &amp;&amp; local-&gt;op_ret == 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOTCONN;</div><div class='del'>-                gf_msg_debug(this-&gt;name, 0, "Arbiter cannot be a read subvol "</div><div class='del'>-                             "for %s", local-&gt;loc.path);</div><div class='del'>-                goto error;</div><div class='add'>+        /* LOG ERROR */</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Forth, for the finalized GFID, pick the best subvolume</div><div class='add'>+       to return stats from.</div><div class='add'>+    */</div><div class='add'>+    read_subvol = -1;</div><div class='add'>+    memset(readable, 0, sizeof(*readable) * priv-&gt;child_count);</div><div class='add'>+    if (can_interpret) {</div><div class='add'>+        if (!afr_has_quorum(success_replies, this))</div><div class='add'>+            goto cant_interpret;</div><div class='add'>+        /* It is safe to call afr_replies_interpret() because we have</div><div class='add'>+           a response from all the UP subvolumes and all of them resolved</div><div class='add'>+           to the same GFID</div><div class='add'>+        */</div><div class='add'>+        gf_uuid_copy(args.gfid, read_gfid);</div><div class='add'>+        args.ia_type = ia_type;</div><div class='add'>+        ret = afr_replies_interpret(frame, this, local-&gt;inode, NULL);</div><div class='add'>+        read_subvol = afr_read_subvol_decide(local-&gt;inode, this, &amp;args,</div><div class='add'>+                                             readable);</div><div class='add'>+        if (read_subvol == -1)</div><div class='add'>+            goto cant_interpret;</div><div class='add'>+        if (ret) {</div><div class='add'>+            afr_inode_event_gen_reset(local-&gt;inode, this);</div><div class='add'>+            dict_del(local-&gt;replies[read_subvol].xdata, GF_CONTENT_KEY);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+    cant_interpret:</div><div class='add'>+        afr_attempt_readsubvol_set(frame, this, success_replies, readable,</div><div class='add'>+                                   &amp;read_subvol);</div><div class='add'>+        if (read_subvol == -1) {</div><div class='add'>+            goto error;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;xattr_req, "gfid-heal-msg", &amp;gfid_heal_msg);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = dict_set_str (local-&gt;replies[read_subvol].xdata,</div><div class='del'>-                                    "gfid-heal-msg", gfid_heal_msg);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Error setting gfid-heal-msg dict");</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='add'>+    afr_handle_quota_size(frame, this);</div><div class='add'>+</div><div class='add'>+    afr_set_need_heal(this, local);</div><div class='add'>+    if (AFR_IS_ARBITER_BRICK(priv, read_subvol) &amp;&amp; local-&gt;op_ret == 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTCONN;</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Arbiter cannot be a read subvol "</div><div class='add'>+                     "for %s",</div><div class='add'>+                     local-&gt;loc.path);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(local-&gt;xattr_req, "gfid-heal-msg", &amp;gfid_heal_msg);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = dict_set_str(local-&gt;replies[read_subvol].xdata, "gfid-heal-msg",</div><div class='add'>+                           gfid_heal_msg);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Error setting gfid-heal-msg dict");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;inode, &amp;local-&gt;replies[read_subvol].poststat,</div><div class='del'>-			  local-&gt;replies[read_subvol].xdata,</div><div class='del'>-			  &amp;local-&gt;replies[par_read_subvol].postparent);</div><div class='del'>-        return;</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;replies[read_subvol].poststat,</div><div class='add'>+                     local-&gt;replies[read_subvol].xdata,</div><div class='add'>+                     &amp;local-&gt;replies[par_read_subvol].postparent);</div><div class='add'>+    return;</div><div class='ctx'> </div><div class='ctx'> error:</div><div class='del'>-        AFR_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno, NULL, NULL,</div><div class='add'>+                     NULL, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2529,843 +2468,834 @@ error:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_higher_errno (int32_t old_errno, int32_t new_errno)</div><div class='add'>+afr_higher_errno(int32_t old_errno, int32_t new_errno)</div><div class='ctx'> {</div><div class='del'>-	if (old_errno == ENODATA || new_errno == ENODATA)</div><div class='del'>-		return ENODATA;</div><div class='del'>-        if (old_errno == ENOENT || new_errno == ENOENT)</div><div class='del'>-                return ENOENT;</div><div class='del'>-	if (old_errno == ESTALE || new_errno == ESTALE)</div><div class='del'>-		return ESTALE;</div><div class='add'>+    if (old_errno == ENODATA || new_errno == ENODATA)</div><div class='add'>+        return ENODATA;</div><div class='add'>+    if (old_errno == ENOENT || new_errno == ENOENT)</div><div class='add'>+        return ENOENT;</div><div class='add'>+    if (old_errno == ESTALE || new_errno == ESTALE)</div><div class='add'>+        return ESTALE;</div><div class='ctx'> </div><div class='del'>-	return new_errno;</div><div class='add'>+    return new_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_final_errno (afr_local_t *local, afr_private_t *priv)</div><div class='add'>+afr_final_errno(afr_local_t *local, afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	int op_errno = 0;</div><div class='del'>-	int tmp_errno = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int tmp_errno = 0;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!local-&gt;replies[i].valid)</div><div class='del'>-			continue;</div><div class='del'>-		if (local-&gt;replies[i].op_ret &gt;= 0)</div><div class='del'>-			continue;</div><div class='del'>-		tmp_errno = local-&gt;replies[i].op_errno;</div><div class='del'>-		op_errno = afr_higher_errno (op_errno, tmp_errno);</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret &gt;= 0)</div><div class='add'>+            continue;</div><div class='add'>+        tmp_errno = local-&gt;replies[i].op_errno;</div><div class='add'>+        op_errno = afr_higher_errno(op_errno, tmp_errno);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return op_errno;</div><div class='add'>+    return op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_local_discovery_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-			 int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-			 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int              ret            = 0;</div><div class='del'>-        char            *pathinfo       = NULL;</div><div class='del'>-        gf_boolean_t     is_local        = _gf_false;</div><div class='del'>-        afr_private_t   *priv           = NULL;</div><div class='del'>-        int32_t          child_index    = -1;</div><div class='del'>-</div><div class='del'>-        if (op_ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	child_index = (int32_t)(long)cookie;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, GF_XATTR_PATHINFO_KEY, &amp;pathinfo);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = glusterfs_is_local_pathinfo (pathinfo, &amp;is_local);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Note that one local subvolume will override another here.  The only</div><div class='del'>-         * way to avoid that would be to retain extra information about whether</div><div class='del'>-         * the previous read_child is local, and it's just not worth it.  Even</div><div class='del'>-         * the slowest local subvolume is far preferable to a remote one.</div><div class='del'>-         */</div><div class='del'>-        if (is_local) {</div><div class='del'>-                priv-&gt;local[child_index] = 1;</div><div class='del'>-                /* Don't set arbiter as read child. */</div><div class='del'>-                if (AFR_IS_ARBITER_BRICK(priv, child_index))</div><div class='del'>-                        goto out;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        AFR_MSG_LOCAL_CHILD, "selecting local read_child %s",</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name);</div><div class='del'>-</div><div class='del'>-                priv-&gt;read_child = child_index;</div><div class='del'>-        }</div><div class='add'>+afr_local_discovery_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                        dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *pathinfo = NULL;</div><div class='add'>+    gf_boolean_t is_local = _gf_false;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int32_t child_index = -1;</div><div class='add'>+</div><div class='add'>+    if (op_ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    child_index = (int32_t)(long)cookie;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, GF_XATTR_PATHINFO_KEY, &amp;pathinfo);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = glusterfs_is_local_pathinfo(pathinfo, &amp;is_local);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Note that one local subvolume will override another here.  The only</div><div class='add'>+     * way to avoid that would be to retain extra information about whether</div><div class='add'>+     * the previous read_child is local, and it's just not worth it.  Even</div><div class='add'>+     * the slowest local subvolume is far preferable to a remote one.</div><div class='add'>+     */</div><div class='add'>+    if (is_local) {</div><div class='add'>+        priv-&gt;local[child_index] = 1;</div><div class='add'>+        /* Don't set arbiter as read child. */</div><div class='add'>+        if (AFR_IS_ARBITER_BRICK(priv, child_index))</div><div class='add'>+            goto out;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_LOCAL_CHILD,</div><div class='add'>+               "selecting local read_child %s",</div><div class='add'>+               priv-&gt;children[child_index]-&gt;name);</div><div class='add'>+</div><div class='add'>+        priv-&gt;read_child = child_index;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_DESTROY(frame-&gt;root);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_attempt_local_discovery (xlator_t *this, int32_t child_index)</div><div class='add'>+afr_attempt_local_discovery(xlator_t *this, int32_t child_index)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *newframe = NULL;</div><div class='del'>-        loc_t            tmploc = {0,};</div><div class='del'>-        afr_private_t   *priv = this-&gt;private;</div><div class='add'>+    call_frame_t *newframe = NULL;</div><div class='add'>+    loc_t tmploc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        newframe = create_frame(this,this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!newframe) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    newframe = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!newframe) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmploc.gfid[sizeof(tmploc.gfid)-1] = 1;</div><div class='del'>-        STACK_WIND_COOKIE (newframe, afr_local_discovery_cbk,</div><div class='del'>-                           (void *)(long)child_index,</div><div class='del'>-                           priv-&gt;children[child_index],</div><div class='del'>-                           priv-&gt;children[child_index]-&gt;fops-&gt;getxattr,</div><div class='del'>-                           &amp;tmploc, GF_XATTR_PATHINFO_KEY, NULL);</div><div class='add'>+    tmploc.gfid[sizeof(tmploc.gfid) - 1] = 1;</div><div class='add'>+    STACK_WIND_COOKIE(newframe, afr_local_discovery_cbk,</div><div class='add'>+                      (void *)(long)child_index, priv-&gt;children[child_index],</div><div class='add'>+                      priv-&gt;children[child_index]-&gt;fops-&gt;getxattr, &amp;tmploc,</div><div class='add'>+                      GF_XATTR_PATHINFO_KEY, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup_sh_metadata_wrap (void *opaque)</div><div class='del'>-{</div><div class='del'>-        call_frame_t *frame       = opaque;</div><div class='del'>-        afr_local_t  *local       = NULL;</div><div class='del'>-        xlator_t     *this        = NULL;</div><div class='del'>-        inode_t      *inode       = NULL;</div><div class='del'>-        afr_private_t *priv       = NULL;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-        int i= 0, first = -1;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        dict_t *dict = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this  = frame-&gt;this;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        replies = local-&gt;replies;</div><div class='del'>-</div><div class='del'>-        for (i =0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if(!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                first = i;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        if (first == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (afr_selfheal_metadata_by_stbuf (this, &amp;replies[first].poststat))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        afr_local_replies_wipe (local, this-&gt;private);</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_str (dict, "link-count", GF_XATTROP_INDEX_COUNT);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret,</div><div class='del'>-                              "Unable to set link-count in dict ");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (loc_is_nameless (&amp;local-&gt;loc)) {</div><div class='del'>-                ret = afr_selfheal_unlocked_discover_on (frame, local-&gt;inode,</div><div class='del'>-                                                         local-&gt;loc.gfid,</div><div class='del'>-                                                         local-&gt;replies,</div><div class='del'>-                                                         local-&gt;child_up);</div><div class='del'>-        } else {</div><div class='del'>-                inode = afr_selfheal_unlocked_lookup_on (frame,</div><div class='del'>-                                                        local-&gt;loc.parent,</div><div class='del'>-                                                        local-&gt;loc.name,</div><div class='del'>-                                                        local-&gt;replies,</div><div class='del'>-                                                        local-&gt;child_up, dict);</div><div class='del'>-        }</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+afr_lookup_sh_metadata_wrap(void *opaque)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *frame = opaque;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int i = 0, first = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        first = i;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+    if (first == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (afr_selfheal_metadata_by_stbuf(this, &amp;replies[first].poststat))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    afr_local_replies_wipe(local, this-&gt;private);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_str(dict, "link-count", GF_XATTROP_INDEX_COUNT);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret, "Unable to set link-count in dict ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (loc_is_nameless(&amp;local-&gt;loc)) {</div><div class='add'>+        ret = afr_selfheal_unlocked_discover_on(frame, local-&gt;inode,</div><div class='add'>+                                                local-&gt;loc.gfid, local-&gt;replies,</div><div class='add'>+                                                local-&gt;child_up);</div><div class='add'>+    } else {</div><div class='add'>+        inode = afr_selfheal_unlocked_lookup_on(frame, local-&gt;loc.parent,</div><div class='add'>+                                                local-&gt;loc.name, local-&gt;replies,</div><div class='add'>+                                                local-&gt;child_up, dict);</div><div class='add'>+    }</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> out:</div><div class='del'>-        if (loc_is_nameless (&amp;local-&gt;loc))</div><div class='del'>-                afr_discover_done (frame, this);</div><div class='del'>-        else</div><div class='del'>-                afr_lookup_done (frame, this);</div><div class='add'>+    if (loc_is_nameless(&amp;local-&gt;loc))</div><div class='add'>+        afr_discover_done(frame, this);</div><div class='add'>+    else</div><div class='add'>+        afr_lookup_done(frame, this);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_pending_set (xlator_t *this, dict_t *xdata, int type)</div><div class='add'>+afr_is_pending_set(xlator_t *this, dict_t *xdata, int type)</div><div class='ctx'> {</div><div class='del'>-        int idx = -1;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        void *pending_raw = NULL;</div><div class='del'>-        int *pending_int = NULL;</div><div class='del'>-        int i = 0;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    void *pending_raw = NULL;</div><div class='add'>+    int *pending_int = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        idx = afr_index_for_transaction_type (type);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    idx = afr_index_for_transaction_type(type);</div><div class='ctx'> </div><div class='del'>-        if (dict_get_ptr (xdata, AFR_DIRTY, &amp;pending_raw) == 0) {</div><div class='del'>-                if (pending_raw) {</div><div class='del'>-                        pending_int = pending_raw;</div><div class='add'>+    if (dict_get_ptr(xdata, AFR_DIRTY, &amp;pending_raw) == 0) {</div><div class='add'>+        if (pending_raw) {</div><div class='add'>+            pending_int = pending_raw;</div><div class='ctx'> </div><div class='del'>-                        if (ntoh32 (pending_int[idx]))</div><div class='del'>-                                return _gf_true;</div><div class='del'>-                }</div><div class='add'>+            if (ntoh32(pending_int[idx]))</div><div class='add'>+                return _gf_true;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (dict_get_ptr (xdata, priv-&gt;pending_key[i],</div><div class='del'>-                                  &amp;pending_raw))</div><div class='del'>-                        continue;</div><div class='del'>-                if (!pending_raw)</div><div class='del'>-                        continue;</div><div class='del'>-                pending_int = pending_raw;</div><div class='del'>-</div><div class='del'>-                if (ntoh32 (pending_int[idx]))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (dict_get_ptr(xdata, priv-&gt;pending_key[i], &amp;pending_raw))</div><div class='add'>+            continue;</div><div class='add'>+        if (!pending_raw)</div><div class='add'>+            continue;</div><div class='add'>+        pending_int = pending_raw;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+        if (ntoh32(pending_int[idx]))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> afr_can_start_metadata_self_heal(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-        int i = 0, first = -1;</div><div class='del'>-        gf_boolean_t start = _gf_false;</div><div class='del'>-        struct iatt stbuf = {0, };</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        replies = local-&gt;replies;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int i = 0, first = -1;</div><div class='add'>+    gf_boolean_t start = _gf_false;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;metadata_self_heal)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if(!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                if (first == -1) {</div><div class='del'>-                        first = i;</div><div class='del'>-                        stbuf = replies[i].poststat;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    if (!priv-&gt;metadata_self_heal)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-                if (afr_is_pending_set (this, replies[i].xdata,</div><div class='del'>-                                        AFR_METADATA_TRANSACTION)) {</div><div class='del'>-                        /* Let shd do the heal so that lookup is not blocked</div><div class='del'>-                         * on getting metadata lock/doing the heal */</div><div class='del'>-                        start = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        if (first == -1) {</div><div class='add'>+            first = i;</div><div class='add'>+            stbuf = replies[i].poststat;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_compare (stbuf.ia_gfid, replies[i].poststat.ia_gfid)) {</div><div class='del'>-                        start = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (!IA_EQUAL (stbuf, replies[i].poststat, type)) {</div><div class='del'>-                        start = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (afr_is_pending_set(this, replies[i].xdata,</div><div class='add'>+                               AFR_METADATA_TRANSACTION)) {</div><div class='add'>+            /* Let shd do the heal so that lookup is not blocked</div><div class='add'>+             * on getting metadata lock/doing the heal */</div><div class='add'>+            start = _gf_false;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /*Check if iattrs need heal*/</div><div class='del'>-                if ((!IA_EQUAL (stbuf, replies[i].poststat, uid)) ||</div><div class='del'>-                    (!IA_EQUAL (stbuf, replies[i].poststat, gid)) ||</div><div class='del'>-                    (!IA_EQUAL (stbuf, replies[i].poststat, prot))) {</div><div class='del'>-                        start = _gf_true;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        if (gf_uuid_compare(stbuf.ia_gfid, replies[i].poststat.ia_gfid)) {</div><div class='add'>+            start = _gf_false;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        if (!IA_EQUAL(stbuf, replies[i].poststat, type)) {</div><div class='add'>+            start = _gf_false;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /*Check if xattrs need heal*/</div><div class='del'>-                if (!afr_xattrs_are_equal (replies[first].xdata,</div><div class='del'>-                                           replies[i].xdata))</div><div class='del'>-                        start = _gf_true;</div><div class='add'>+        /*Check if iattrs need heal*/</div><div class='add'>+        if ((!IA_EQUAL(stbuf, replies[i].poststat, uid)) ||</div><div class='add'>+            (!IA_EQUAL(stbuf, replies[i].poststat, gid)) ||</div><div class='add'>+            (!IA_EQUAL(stbuf, replies[i].poststat, prot))) {</div><div class='add'>+            start = _gf_true;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return start;</div><div class='add'>+        /*Check if xattrs need heal*/</div><div class='add'>+        if (!afr_xattrs_are_equal(replies[first].xdata, replies[i].xdata))</div><div class='add'>+            start = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return start;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup_metadata_heal_check (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_lookup_metadata_heal_check(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        call_frame_t *heal = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int ret            = 0;</div><div class='add'>+    call_frame_t *heal = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!afr_can_start_metadata_self_heal (frame, this))</div><div class='del'>-                goto out;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!afr_can_start_metadata_self_heal(frame, this))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        heal = afr_frame_create (this, &amp;ret);</div><div class='del'>-        if (!heal) {</div><div class='del'>-                ret = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    heal = afr_frame_create(this, &amp;ret);</div><div class='add'>+    if (!heal) {</div><div class='add'>+        ret = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, afr_lookup_sh_metadata_wrap,</div><div class='del'>-                            afr_refresh_selfheal_done, heal, frame);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        return ret;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, afr_lookup_sh_metadata_wrap,</div><div class='add'>+                       afr_refresh_selfheal_done, heal, frame);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    return ret;</div><div class='ctx'> out:</div><div class='del'>-        if (loc_is_nameless (&amp;local-&gt;loc))</div><div class='del'>-                afr_discover_done (frame, this);</div><div class='del'>-        else</div><div class='del'>-                afr_lookup_done (frame, this);</div><div class='del'>-        if (heal)</div><div class='del'>-                AFR_STACK_DESTROY (heal);</div><div class='del'>-        return ret;</div><div class='add'>+    if (loc_is_nameless(&amp;local-&gt;loc))</div><div class='add'>+        afr_discover_done(frame, this);</div><div class='add'>+    else</div><div class='add'>+        afr_lookup_done(frame, this);</div><div class='add'>+    if (heal)</div><div class='add'>+        AFR_STACK_DESTROY(heal);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup_selfheal_wrap (void *opaque)</div><div class='add'>+afr_lookup_selfheal_wrap(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-	call_frame_t *frame = opaque;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	xlator_t *this = NULL;</div><div class='del'>-	inode_t *inode = NULL;</div><div class='del'>-        uuid_t pargfid = {0,};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = opaque;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    uuid_t pargfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	this = frame-&gt;this;</div><div class='del'>-        loc_pargfid (&amp;local-&gt;loc, pargfid);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    loc_pargfid(&amp;local-&gt;loc, pargfid);</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_name (frame-&gt;this, pargfid, local-&gt;loc.name,</div><div class='del'>-                                 &amp;local-&gt;cont.lookup.gfid_req, local-&gt;xattr_req);</div><div class='del'>-        if (ret == -EIO)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = afr_selfheal_name(frame-&gt;this, pargfid, local-&gt;loc.name,</div><div class='add'>+                            &amp;local-&gt;cont.lookup.gfid_req, local-&gt;xattr_req);</div><div class='add'>+    if (ret == -EIO)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        afr_local_replies_wipe (local, this-&gt;private);</div><div class='add'>+    afr_local_replies_wipe(local, this-&gt;private);</div><div class='ctx'> </div><div class='del'>-	inode = afr_selfheal_unlocked_lookup_on (frame, local-&gt;loc.parent,</div><div class='del'>-						 local-&gt;loc.name, local-&gt;replies,</div><div class='del'>-						 local-&gt;child_up, NULL);</div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref (inode);</div><div class='add'>+    inode = afr_selfheal_unlocked_lookup_on(frame, local-&gt;loc.parent,</div><div class='add'>+                                            local-&gt;loc.name, local-&gt;replies,</div><div class='add'>+                                            local-&gt;child_up, NULL);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        afr_lookup_metadata_heal_check(frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_lookup_metadata_heal_check(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, -1, EIO, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, -1, EIO, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup_entry_heal (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	call_frame_t *heal = NULL;</div><div class='del'>-	int i = 0, first = -1;</div><div class='del'>-	gf_boolean_t name_state_mismatch = _gf_false;</div><div class='del'>-	struct afr_reply *replies = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-        unsigned char *par_readables = NULL;</div><div class='del'>-        unsigned char *success = NULL;</div><div class='del'>-        int32_t op_errno = 0;</div><div class='del'>-        uuid_t gfid = {0};</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	replies = local-&gt;replies;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        par_readables = alloca0(priv-&gt;child_count);</div><div class='del'>-        success = alloca0(priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = afr_inode_read_subvol_get (local-&gt;loc.parent, this, par_readables,</div><div class='del'>-                                         NULL, NULL);</div><div class='del'>-        if (ret &lt; 0 || AFR_COUNT (par_readables, priv-&gt;child_count) == 0) {</div><div class='del'>-                /* In this case set par_readables to all 1 so that name_heal</div><div class='del'>-                 * need checks at the end of this function will flag missing</div><div class='del'>-                 * entry when name state mismatches*/</div><div class='del'>-                memset (par_readables, 1, priv-&gt;child_count);</div><div class='add'>+afr_lookup_entry_heal(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *heal = NULL;</div><div class='add'>+    int i = 0, first = -1;</div><div class='add'>+    gf_boolean_t name_state_mismatch = _gf_false;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned char *par_readables = NULL;</div><div class='add'>+    unsigned char *success = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    uuid_t gfid = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    par_readables = alloca0(priv-&gt;child_count);</div><div class='add'>+    success = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_inode_read_subvol_get(local-&gt;loc.parent, this, par_readables,</div><div class='add'>+                                    NULL, NULL);</div><div class='add'>+    if (ret &lt; 0 || AFR_COUNT(par_readables, priv-&gt;child_count) == 0) {</div><div class='add'>+        /* In this case set par_readables to all 1 so that name_heal</div><div class='add'>+         * need checks at the end of this function will flag missing</div><div class='add'>+         * entry when name state mismatches*/</div><div class='add'>+        memset(par_readables, 1, priv-&gt;child_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (replies[i].op_ret == 0) {</div><div class='add'>+            if (uuid_is_null(gfid)) {</div><div class='add'>+                gf_uuid_copy(gfid, replies[i].poststat.ia_gfid);</div><div class='add'>+            }</div><div class='add'>+            success[i] = 1;</div><div class='add'>+        } else {</div><div class='add'>+            if ((replies[i].op_errno != ENOTCONN) &amp;&amp;</div><div class='add'>+                (replies[i].op_errno != ENOENT) &amp;&amp;</div><div class='add'>+                (replies[i].op_errno != ESTALE)) {</div><div class='add'>+                op_errno = replies[i].op_errno;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret == 0) {</div><div class='del'>-                        if (uuid_is_null (gfid)) {</div><div class='del'>-                                gf_uuid_copy (gfid,</div><div class='del'>-                                              replies[i].poststat.ia_gfid);</div><div class='del'>-                        }</div><div class='del'>-                        success[i] = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        if ((replies[i].op_errno != ENOTCONN) &amp;&amp;</div><div class='del'>-                            (replies[i].op_errno != ENOENT) &amp;&amp;</div><div class='del'>-                            (replies[i].op_errno != ESTALE)) {</div><div class='del'>-                                op_errno = replies[i].op_errno;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        /*gfid is missing, needs heal*/</div><div class='add'>+        if ((replies[i].op_ret == -1) &amp;&amp; (replies[i].op_errno == ENODATA)) {</div><div class='add'>+            goto name_heal;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /*gfid is missing, needs heal*/</div><div class='del'>-                if ((replies[i].op_ret == -1) &amp;&amp;</div><div class='del'>-                    (replies[i].op_errno == ENODATA)) {</div><div class='del'>-                        goto name_heal;</div><div class='del'>-                }</div><div class='add'>+        if (first == -1) {</div><div class='add'>+            first = i;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (first == -1) {</div><div class='del'>-			first = i;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (replies[i].op_ret != replies[first].op_ret) {</div><div class='del'>-                        name_state_mismatch = _gf_true;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret == 0) {</div><div class='del'>-                        /* Rename after this lookup may succeed if we don't do</div><div class='del'>-                         * a name-heal and the destination may not have pending xattrs</div><div class='del'>-                         * to indicate which name is good and which is bad so always do</div><div class='del'>-                         * this heal*/</div><div class='del'>-                        if (gf_uuid_compare (replies[i].poststat.ia_gfid,</div><div class='del'>-                                             gfid)) {</div><div class='del'>-                                goto name_heal;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (name_state_mismatch) {</div><div class='del'>-                if (!priv-&gt;quorum_count)</div><div class='del'>-                        goto name_heal;</div><div class='del'>-                if (!afr_has_quorum (success, this))</div><div class='del'>-                        goto name_heal;</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        goto name_heal;</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (!replies[i].valid)</div><div class='del'>-                                continue;</div><div class='del'>-                        if (par_readables[i] &amp;&amp; replies[i].op_ret &lt; 0 &amp;&amp;</div><div class='del'>-                            replies[i].op_errno != ENOTCONN) {</div><div class='del'>-                                goto name_heal;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (replies[i].op_ret != replies[first].op_ret) {</div><div class='add'>+            name_state_mismatch = _gf_true;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        goto metadata_heal;</div><div class='add'>+        if (replies[i].op_ret == 0) {</div><div class='add'>+            /* Rename after this lookup may succeed if we don't do</div><div class='add'>+             * a name-heal and the destination may not have pending xattrs</div><div class='add'>+             * to indicate which name is good and which is bad so always do</div><div class='add'>+             * this heal*/</div><div class='add'>+            if (gf_uuid_compare(replies[i].poststat.ia_gfid, gfid)) {</div><div class='add'>+                goto name_heal;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (name_state_mismatch) {</div><div class='add'>+        if (!priv-&gt;quorum_count)</div><div class='add'>+            goto name_heal;</div><div class='add'>+        if (!afr_has_quorum(success, this))</div><div class='add'>+            goto name_heal;</div><div class='add'>+        if (op_errno)</div><div class='add'>+            goto name_heal;</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (!replies[i].valid)</div><div class='add'>+                continue;</div><div class='add'>+            if (par_readables[i] &amp;&amp; replies[i].op_ret &lt; 0 &amp;&amp;</div><div class='add'>+                replies[i].op_errno != ENOTCONN) {</div><div class='add'>+                goto name_heal;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    goto metadata_heal;</div><div class='ctx'> </div><div class='ctx'> name_heal:</div><div class='del'>-        heal = afr_frame_create (this, NULL);</div><div class='del'>-        if (!heal)</div><div class='del'>-                goto metadata_heal;</div><div class='add'>+    heal = afr_frame_create(this, NULL);</div><div class='add'>+    if (!heal)</div><div class='add'>+        goto metadata_heal;</div><div class='ctx'> </div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, afr_lookup_selfheal_wrap,</div><div class='del'>-                            afr_refresh_selfheal_done, heal, frame);</div><div class='del'>-        if (ret) {</div><div class='del'>-                AFR_STACK_DESTROY (heal);</div><div class='del'>-                goto metadata_heal;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, afr_lookup_selfheal_wrap,</div><div class='add'>+                       afr_refresh_selfheal_done, heal, frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        AFR_STACK_DESTROY(heal);</div><div class='add'>+        goto metadata_heal;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> metadata_heal:</div><div class='del'>-        ret = afr_lookup_metadata_heal_check (frame, this);</div><div class='add'>+    ret = afr_lookup_metadata_heal_check(frame, this);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		int op_ret, int op_errno, inode_t *inode, struct iatt *buf,</div><div class='del'>-		dict_t *xdata, struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        int             call_count      = -1;</div><div class='del'>-        int             child_index     = -1;</div><div class='del'>-        GF_UNUSED int   ret             = 0;</div><div class='del'>-	int8_t need_heal                = 1;</div><div class='del'>-</div><div class='del'>-	child_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;replies[child_index].valid = 1;</div><div class='del'>-	local-&gt;replies[child_index].op_ret = op_ret;</div><div class='del'>-	local-&gt;replies[child_index].op_errno = op_errno;</div><div class='del'>-        /*</div><div class='del'>-         * On revalidate lookup if the gfid-changed, afr should unwind the fop</div><div class='del'>-         * with ESTALE so that a fresh lookup will be sent by the top xlator.</div><div class='del'>-         * So remember it.</div><div class='del'>-         */</div><div class='del'>-        if (xdata &amp;&amp; dict_get (xdata, "gfid-changed"))</div><div class='del'>-                local-&gt;cont.lookup.needs_fresh_lookup = _gf_true;</div><div class='add'>+afr_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+               struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int child_index = -1;</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+    int8_t need_heal = 1;</div><div class='add'>+</div><div class='add'>+    child_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;replies[child_index].valid = 1;</div><div class='add'>+    local-&gt;replies[child_index].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[child_index].op_errno = op_errno;</div><div class='add'>+    /*</div><div class='add'>+     * On revalidate lookup if the gfid-changed, afr should unwind the fop</div><div class='add'>+     * with ESTALE so that a fresh lookup will be sent by the top xlator.</div><div class='add'>+     * So remember it.</div><div class='add'>+     */</div><div class='add'>+    if (xdata &amp;&amp; dict_get(xdata, "gfid-changed"))</div><div class='add'>+        local-&gt;cont.lookup.needs_fresh_lookup = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (xdata) {</div><div class='add'>+        ret = dict_get_int8(xdata, "link-count", &amp;need_heal);</div><div class='add'>+        local-&gt;replies[child_index].need_heal = need_heal;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;replies[child_index].need_heal = need_heal;</div><div class='add'>+    }</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        local-&gt;replies[child_index].poststat = *buf;</div><div class='add'>+        local-&gt;replies[child_index].postparent = *postparent;</div><div class='add'>+        if (xdata)</div><div class='add'>+            local-&gt;replies[child_index].xdata = dict_ref(xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata) {</div><div class='del'>-                ret = dict_get_int8 (xdata, "link-count", &amp;need_heal);</div><div class='del'>-                local-&gt;replies[child_index].need_heal = need_heal;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;replies[child_index].need_heal = need_heal;</div><div class='del'>-        }</div><div class='del'>-	if (op_ret != -1) {</div><div class='del'>-		local-&gt;replies[child_index].poststat = *buf;</div><div class='del'>-		local-&gt;replies[child_index].postparent = *postparent;</div><div class='del'>-		if (xdata)</div><div class='del'>-			local-&gt;replies[child_index].xdata = dict_ref (xdata);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                afr_set_need_heal (this, local);</div><div class='del'>-		afr_lookup_entry_heal (frame, this);</div><div class='del'>-        }</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        afr_set_need_heal(this, local);</div><div class='add'>+        afr_lookup_entry_heal(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_discover_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_discover_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t       *priv  = NULL;</div><div class='del'>-        afr_local_t         *local = NULL;</div><div class='del'>-	int                 op_errno = 0;</div><div class='del'>-	int                 read_subvol = -1;</div><div class='del'>-        unsigned char *data_readable = NULL;</div><div class='del'>-        unsigned char *success_replies = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+    unsigned char *data_readable = NULL;</div><div class='add'>+    unsigned char *success_replies = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        data_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-        success_replies = alloca0 (priv-&gt;child_count);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    data_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    success_replies = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        afr_fill_success_replies (local, priv, success_replies);</div><div class='del'>-        if (AFR_COUNT (success_replies, priv-&gt;child_count) &gt; 0)</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    afr_fill_success_replies(local, priv, success_replies);</div><div class='add'>+    if (AFR_COUNT(success_replies, priv-&gt;child_count) &gt; 0)</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-	op_errno = afr_final_errno (frame-&gt;local, this-&gt;private);</div><div class='add'>+    op_errno = afr_final_errno(frame-&gt;local, this-&gt;private);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret &lt; 0) {</div><div class='del'>-                AFR_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                  NULL, NULL);</div><div class='del'>-                return;</div><div class='del'>-	}</div><div class='add'>+    if (local-&gt;op_ret &lt; 0) {</div><div class='add'>+        AFR_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!afr_has_quorum (success_replies, this))</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (!afr_has_quorum(success_replies, this))</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-	afr_replies_interpret (frame, this, local-&gt;inode, NULL);</div><div class='add'>+    afr_replies_interpret(frame, this, local-&gt;inode, NULL);</div><div class='ctx'> </div><div class='del'>-	read_subvol = afr_read_subvol_decide (local-&gt;inode, this, NULL,</div><div class='del'>-                                              data_readable);</div><div class='add'>+    read_subvol = afr_read_subvol_decide(local-&gt;inode, this, NULL,</div><div class='add'>+                                         data_readable);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        afr_attempt_readsubvol_set (frame, this, success_replies, data_readable,</div><div class='del'>-                                    &amp;read_subvol);</div><div class='del'>-	if (read_subvol == -1) {</div><div class='del'>-                AFR_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  NULL, NULL, NULL, NULL);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    afr_attempt_readsubvol_set(frame, this, success_replies, data_readable,</div><div class='add'>+                               &amp;read_subvol);</div><div class='add'>+    if (read_subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                         NULL, NULL, NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (AFR_IS_ARBITER_BRICK (priv, read_subvol) &amp;&amp; local-&gt;op_ret == 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOTCONN;</div><div class='del'>-	        gf_msg_debug (this-&gt;name, 0, "Arbiter cannot be a read subvol "</div><div class='del'>-                              "for %s", local-&gt;loc.path);</div><div class='del'>-        }</div><div class='add'>+    if (AFR_IS_ARBITER_BRICK(priv, read_subvol) &amp;&amp; local-&gt;op_ret == 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTCONN;</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Arbiter cannot be a read subvol "</div><div class='add'>+                     "for %s",</div><div class='add'>+                     local-&gt;loc.path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;inode, &amp;local-&gt;replies[read_subvol].poststat,</div><div class='del'>-			  local-&gt;replies[read_subvol].xdata,</div><div class='del'>-			  &amp;local-&gt;replies[read_subvol].postparent);</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;replies[read_subvol].poststat,</div><div class='add'>+                     local-&gt;replies[read_subvol].xdata,</div><div class='add'>+                     &amp;local-&gt;replies[read_subvol].postparent);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_ta_id_file_check (void *opaque)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        loc_t loc = {0, };</div><div class='del'>-        struct iatt  stbuf = {0,};</div><div class='del'>-        dict_t *dict = NULL;</div><div class='del'>-        uuid_t  gfid = {0,};</div><div class='del'>-        fd_t *fd = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        this = opaque;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = afr_fill_ta_loc (this, &amp;loc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to populate thin-arbiter loc for: %s.",</div><div class='del'>-                        loc.name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc,</div><div class='del'>-                             &amp;stbuf, 0, 0, 0);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret == -ENOENT) {</div><div class='del'>-                fd = fd_create (loc.inode, getpid());</div><div class='del'>-                if (!fd)</div><div class='del'>-                        goto out;</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict)</div><div class='del'>-                        goto out;</div><div class='del'>-                gf_uuid_generate (gfid);</div><div class='del'>-                ret = dict_set_gfuuid (dict, "gfid-req", gfid, true);</div><div class='del'>-                ret = syncop_create (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                                     &amp;loc, O_RDWR, 0664, fd, &amp;stbuf, dict,</div><div class='del'>-                                     NULL);</div><div class='del'>-        }</div><div class='add'>+afr_ta_id_file_check(void *opaque)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    this = opaque;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = afr_fill_ta_loc(this, &amp;loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to populate thin-arbiter loc for: %s.", loc.name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc, &amp;stbuf,</div><div class='add'>+                        0, 0, 0);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret == -ENOENT) {</div><div class='add'>+        fd = fd_create(loc.inode, getpid());</div><div class='add'>+        if (!fd)</div><div class='add'>+            goto out;</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict)</div><div class='add'>+            goto out;</div><div class='add'>+        gf_uuid_generate(gfid);</div><div class='add'>+        ret = dict_set_gfuuid(dict, "gfid-req", gfid, true);</div><div class='add'>+        ret = syncop_create(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc,</div><div class='add'>+                            O_RDWR, 0664, fd, &amp;stbuf, dict, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                gf_uuid_copy (priv-&gt;ta_gfid, stbuf.ia_gfid);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to lookup/create thin-arbiter id file.");</div><div class='del'>-        }</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        gf_uuid_copy(priv-&gt;ta_gfid, stbuf.ia_gfid);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to lookup/create thin-arbiter id file.");</div><div class='add'>+    }</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_ta_id_file_check_cbk (int ret, call_frame_t *ta_frame, void *opaque)</div><div class='add'>+afr_ta_id_file_check_cbk(int ret, call_frame_t *ta_frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_discover_done (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_discover_done(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;thin_arbiter_count)</div><div class='del'>-                goto unwind;</div><div class='del'>-        if (!gf_uuid_is_null(priv-&gt;ta_gfid))</div><div class='del'>-                goto unwind;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;thin_arbiter_count)</div><div class='add'>+        goto unwind;</div><div class='add'>+    if (!gf_uuid_is_null(priv-&gt;ta_gfid))</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, afr_ta_id_file_check,</div><div class='del'>-                            afr_ta_id_file_check_cbk, NULL, this);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, afr_ta_id_file_check,</div><div class='add'>+                       afr_ta_id_file_check_cbk, NULL, this);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> unwind:</div><div class='del'>-        afr_discover_unwind (frame, this);</div><div class='add'>+    afr_discover_unwind(frame, this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_discover_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		  int op_ret, int op_errno, inode_t *inode, struct iatt *buf,</div><div class='del'>-		  dict_t *xdata, struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        int             call_count      = -1;</div><div class='del'>-        int             child_index     = -1;</div><div class='del'>-        GF_UNUSED int ret               = 0;</div><div class='del'>-	int8_t need_heal                = 1;</div><div class='del'>-</div><div class='del'>-	child_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;replies[child_index].valid = 1;</div><div class='del'>-	local-&gt;replies[child_index].op_ret = op_ret;</div><div class='del'>-	local-&gt;replies[child_index].op_errno = op_errno;</div><div class='del'>-	if (op_ret != -1) {</div><div class='del'>-		local-&gt;replies[child_index].poststat = *buf;</div><div class='del'>-		local-&gt;replies[child_index].postparent = *postparent;</div><div class='del'>-		if (xdata)</div><div class='del'>-			local-&gt;replies[child_index].xdata = dict_ref (xdata);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (local-&gt;do_discovery &amp;&amp; (op_ret == 0))</div><div class='del'>-                afr_attempt_local_discovery (this, child_index);</div><div class='del'>-</div><div class='del'>-        if (xdata) {</div><div class='del'>-                ret = dict_get_int8 (xdata, "link-count", &amp;need_heal);</div><div class='del'>-                local-&gt;replies[child_index].need_heal = need_heal;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;replies[child_index].need_heal = need_heal;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                afr_set_need_heal (this, local);</div><div class='del'>-                afr_lookup_metadata_heal_check (frame, this);</div><div class='del'>-        }</div><div class='add'>+afr_discover_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+                 struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int child_index = -1;</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+    int8_t need_heal = 1;</div><div class='add'>+</div><div class='add'>+    child_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;replies[child_index].valid = 1;</div><div class='add'>+    local-&gt;replies[child_index].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[child_index].op_errno = op_errno;</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        local-&gt;replies[child_index].poststat = *buf;</div><div class='add'>+        local-&gt;replies[child_index].postparent = *postparent;</div><div class='add'>+        if (xdata)</div><div class='add'>+            local-&gt;replies[child_index].xdata = dict_ref(xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;do_discovery &amp;&amp; (op_ret == 0))</div><div class='add'>+        afr_attempt_local_discovery(this, child_index);</div><div class='add'>+</div><div class='add'>+    if (xdata) {</div><div class='add'>+        ret = dict_get_int8(xdata, "link-count", &amp;need_heal);</div><div class='add'>+        local-&gt;replies[child_index].need_heal = need_heal;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;replies[child_index].need_heal = need_heal;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        afr_set_need_heal(this, local);</div><div class='add'>+        afr_lookup_metadata_heal_check(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_discover_do (call_frame_t *frame, xlator_t *this, int err)</div><div class='del'>-{</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int call_count = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (err) {</div><div class='del'>-		local-&gt;op_errno = err;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	call_count = local-&gt;call_count = AFR_COUNT (local-&gt;child_up,</div><div class='del'>-						    priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = afr_lookup_xattr_req_prepare (local, this, local-&gt;xattr_req,</div><div class='del'>-					    &amp;local-&gt;loc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_discover_cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+afr_discover_do(call_frame_t *frame, xlator_t *this, int err)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (err) {</div><div class='add'>+        local-&gt;op_errno = err;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_count = local-&gt;call_count = AFR_COUNT(local-&gt;child_up,</div><div class='add'>+                                               priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_lookup_xattr_req_prepare(local, this, local-&gt;xattr_req,</div><div class='add'>+                                       &amp;local-&gt;loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_discover_cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                priv-&gt;children[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, -1, local-&gt;op_errno, 0, 0, 0, 0);</div><div class='del'>-	return 0;</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, -1, local-&gt;op_errno, 0, 0, 0, 0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_discover (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='add'>+afr_discover(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-	int op_errno = ENOMEM;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int event = 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int event = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;call_count) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;call_count) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (__is_root_gfid (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-		if (!this-&gt;itable)</div><div class='del'>-			this-&gt;itable = loc-&gt;inode-&gt;table;</div><div class='del'>-		if (!priv-&gt;root_inode)</div><div class='del'>-			priv-&gt;root_inode = inode_ref (loc-&gt;inode);</div><div class='del'>-</div><div class='del'>-		if (priv-&gt;choose_local &amp;&amp; !priv-&gt;did_discovery) {</div><div class='del'>-			/* Logic to detect which subvolumes of AFR are</div><div class='del'>-			   local, in order to prefer them for reads</div><div class='del'>-			*/</div><div class='del'>-			local-&gt;do_discovery = _gf_true;</div><div class='del'>-                        priv-&gt;did_discovery = _gf_true;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+    if (__is_root_gfid(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+        if (!this-&gt;itable)</div><div class='add'>+            this-&gt;itable = loc-&gt;inode-&gt;table;</div><div class='add'>+        if (!priv-&gt;root_inode)</div><div class='add'>+            priv-&gt;root_inode = inode_ref(loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_LOOKUP;</div><div class='add'>+        if (priv-&gt;choose_local &amp;&amp; !priv-&gt;did_discovery) {</div><div class='add'>+            /* Logic to detect which subvolumes of AFR are</div><div class='add'>+               local, in order to prefer them for reads</div><div class='add'>+            */</div><div class='add'>+            local-&gt;do_discovery = _gf_true;</div><div class='add'>+            priv-&gt;did_discovery = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;op = GF_FOP_LOOKUP;</div><div class='ctx'> </div><div class='del'>-	local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-	if (xattr_req)</div><div class='del'>-		/* If xattr_req was null, afr_lookup_xattr_req_prepare() will</div><div class='del'>-		   allocate one for us */</div><div class='del'>-		local-&gt;xattr_req = dict_ref (xattr_req);</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-	if (gf_uuid_is_null (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-		afr_discover_do (frame, this, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        /* If xattr_req was null, afr_lookup_xattr_req_prepare() will</div><div class='add'>+           allocate one for us */</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	afr_read_subvol_get (loc-&gt;inode, this, NULL, NULL, &amp;event,</div><div class='del'>-			     AFR_DATA_TRANSACTION, NULL);</div><div class='add'>+    if (gf_uuid_is_null(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+        afr_discover_do(frame, this, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (afr_is_inode_refresh_reqd (loc-&gt;inode, this, event,</div><div class='del'>-                                       local-&gt;event_generation))</div><div class='del'>-		afr_inode_refresh (frame, this, loc-&gt;inode, NULL,</div><div class='del'>-                                   afr_discover_do);</div><div class='del'>-	else</div><div class='del'>-		afr_discover_do (frame, this, 0);</div><div class='add'>+    afr_read_subvol_get(loc-&gt;inode, this, NULL, NULL, &amp;event,</div><div class='add'>+                        AFR_DATA_TRANSACTION, NULL);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    if (afr_is_inode_refresh_reqd(loc-&gt;inode, this, event,</div><div class='add'>+                                  local-&gt;event_generation))</div><div class='add'>+        afr_inode_refresh(frame, this, loc-&gt;inode, NULL, afr_discover_do);</div><div class='add'>+    else</div><div class='add'>+        afr_discover_do(frame, this, 0);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_lookup_do (call_frame_t *frame, xlator_t *this, int err)</div><div class='del'>-{</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int call_count = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (err &lt; 0) {</div><div class='del'>-		local-&gt;op_errno = err;</div><div class='del'>-		ret = -1;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	call_count = local-&gt;call_count = AFR_COUNT (local-&gt;child_up,</div><div class='del'>-						    priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = afr_lookup_xattr_req_prepare (local, this, local-&gt;xattr_req,</div><div class='del'>-					    &amp;local-&gt;loc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-		ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_lookup_cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+afr_lookup_do(call_frame_t *frame, xlator_t *this, int err)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (err &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = err;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_count = local-&gt;call_count = AFR_COUNT(local-&gt;child_up,</div><div class='add'>+                                               priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_lookup_xattr_req_prepare(local, this, local-&gt;xattr_req,</div><div class='add'>+                                       &amp;local-&gt;loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_lookup_cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                priv-&gt;children[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-	return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, -1, local-&gt;op_errno, 0, 0, 0, 0);</div><div class='del'>-	return 0;</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, -1, local-&gt;op_errno, 0, 0, 0, 0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -3405,1619 +3335,1568 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='del'>-        int32_t        op_errno = 0;</div><div class='del'>-	int            event = 0;</div><div class='del'>-        int            ret = 0;</div><div class='del'>-</div><div class='del'>-        if (loc_is_nameless (loc)) {</div><div class='del'>-                if (xattr_req)</div><div class='del'>-                        dict_del (xattr_req, "gfid-req");</div><div class='del'>-		afr_discover (frame, this, loc, xattr_req);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (__is_root_gfid (loc-&gt;parent-&gt;gfid)) {</div><div class='del'>-		if (!strcmp (loc-&gt;name, GF_REPLICATE_TRASH_DIR)) {</div><div class='del'>-			op_errno = EPERM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;call_count) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto out;</div><div class='add'>+afr_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int event = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (loc_is_nameless(loc)) {</div><div class='add'>+        if (xattr_req)</div><div class='add'>+            dict_del(xattr_req, "gfid-req");</div><div class='add'>+        afr_discover(frame, this, loc, xattr_req);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (__is_root_gfid(loc-&gt;parent-&gt;gfid)) {</div><div class='add'>+        if (!strcmp(loc-&gt;name, GF_REPLICATE_TRASH_DIR)) {</div><div class='add'>+            op_errno = EPERM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_LOOKUP;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    if (!local-&gt;call_count) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='add'>+    local-&gt;op = GF_FOP_LOOKUP;</div><div class='ctx'> </div><div class='del'>-	if (xattr_req) {</div><div class='del'>-		/* If xattr_req was null, afr_lookup_xattr_req_prepare() will</div><div class='del'>-		   allocate one for us */</div><div class='del'>-		local-&gt;xattr_req = dict_copy_with_ref (xattr_req, NULL);</div><div class='del'>-		if (!local-&gt;xattr_req) {</div><div class='del'>-		        op_errno = ENOMEM;</div><div class='del'>-		        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_get_gfuuid (local-&gt;xattr_req, "gfid-req",</div><div class='del'>-                                       &amp;local-&gt;cont.lookup.gfid_req);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        dict_del (local-&gt;xattr_req, "gfid-req");</div><div class='del'>-                }</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+</div><div class='add'>+    if (xattr_req) {</div><div class='add'>+        /* If xattr_req was null, afr_lookup_xattr_req_prepare() will</div><div class='add'>+           allocate one for us */</div><div class='add'>+        local-&gt;xattr_req = dict_copy_with_ref(xattr_req, NULL);</div><div class='add'>+        if (!local-&gt;xattr_req) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_get_gfuuid(local-&gt;xattr_req, "gfid-req",</div><div class='add'>+                              &amp;local-&gt;cont.lookup.gfid_req);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            dict_del(local-&gt;xattr_req, "gfid-req");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	afr_read_subvol_get (loc-&gt;parent, this, NULL, NULL, &amp;event,</div><div class='del'>-			     AFR_DATA_TRANSACTION, NULL);</div><div class='add'>+    afr_read_subvol_get(loc-&gt;parent, this, NULL, NULL, &amp;event,</div><div class='add'>+                        AFR_DATA_TRANSACTION, NULL);</div><div class='ctx'> </div><div class='del'>-	if (afr_is_inode_refresh_reqd (loc-&gt;inode, this, event,</div><div class='del'>-                                       local-&gt;event_generation))</div><div class='del'>-		afr_inode_refresh (frame, this, loc-&gt;parent, NULL,</div><div class='del'>-                                   afr_lookup_do);</div><div class='del'>-	else</div><div class='del'>-		afr_lookup_do (frame, this, 0);</div><div class='add'>+    if (afr_is_inode_refresh_reqd(loc-&gt;inode, this, event,</div><div class='add'>+                                  local-&gt;event_generation))</div><div class='add'>+        afr_inode_refresh(frame, this, loc-&gt;parent, NULL, afr_lookup_do);</div><div class='add'>+    else</div><div class='add'>+        afr_lookup_do(frame, this, 0);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_afr_cleanup_fd_ctx (afr_fd_ctx_t *fd_ctx)</div><div class='add'>+_afr_cleanup_fd_ctx(afr_fd_ctx_t *fd_ctx)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (fd_ctx-&gt;opened_on);</div><div class='del'>-        GF_FREE (fd_ctx);</div><div class='del'>-        return;</div><div class='add'>+    GF_FREE(fd_ctx-&gt;opened_on);</div><div class='add'>+    GF_FREE(fd_ctx);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_cleanup_fd_ctx (xlator_t *this, fd_t *fd)</div><div class='add'>+afr_cleanup_fd_ctx(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        ctx = 0;</div><div class='del'>-        afr_fd_ctx_t    *fd_ctx = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_get (fd, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = fd_ctx_get(fd, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd_ctx = (afr_fd_ctx_t *)(long) ctx;</div><div class='add'>+    fd_ctx = (afr_fd_ctx_t *)(long)ctx;</div><div class='ctx'> </div><div class='del'>-        if (fd_ctx) {</div><div class='del'>-                _afr_cleanup_fd_ctx (fd_ctx);</div><div class='del'>-        }</div><div class='add'>+    if (fd_ctx) {</div><div class='add'>+        _afr_cleanup_fd_ctx(fd_ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_release (xlator_t *this, fd_t *fd)</div><div class='add'>+afr_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        afr_cleanup_fd_ctx (this, fd);</div><div class='add'>+    afr_cleanup_fd_ctx(this, fd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> afr_fd_ctx_t *</div><div class='del'>-__afr_fd_ctx_get (fd_t *fd, xlator_t *this)</div><div class='add'>+__afr_fd_ctx_get(fd_t *fd, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        uint64_t       ctx = 0;</div><div class='del'>-        int            ret = 0;</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = __fd_ctx_get (fd, this, &amp;ctx);</div><div class='add'>+    ret = __fd_ctx_get(fd, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = __afr_fd_ctx_set (this, fd);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = __afr_fd_ctx_set(this, fd);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                ret = __fd_ctx_get (fd, this, &amp;ctx);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = __fd_ctx_get(fd, this, &amp;ctx);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_ctx = (afr_fd_ctx_t *)(long) ctx;</div><div class='add'>+    fd_ctx = (afr_fd_ctx_t *)(long)ctx;</div><div class='ctx'> out:</div><div class='del'>-        return fd_ctx;</div><div class='add'>+    return fd_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> afr_fd_ctx_t *</div><div class='del'>-afr_fd_ctx_get (fd_t *fd, xlator_t *this)</div><div class='add'>+afr_fd_ctx_get(fd_t *fd, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd_ctx = __afr_fd_ctx_get (fd, this);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd_ctx = __afr_fd_ctx_get(fd, this);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fd_ctx;</div><div class='add'>+    return fd_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_fd_ctx_set (xlator_t *this, fd_t *fd)</div><div class='add'>+__afr_fd_ctx_set(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t * priv   = NULL;</div><div class='del'>-        int             ret    = -1;</div><div class='del'>-        uint64_t        ctx    = 0;</div><div class='del'>-        afr_fd_ctx_t *  fd_ctx = NULL;</div><div class='del'>-	int             i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, out);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = __fd_ctx_get (fd, this, &amp;ctx);</div><div class='add'>+    ret = __fd_ctx_get(fd, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd_ctx = GF_CALLOC (1, sizeof (afr_fd_ctx_t),</div><div class='del'>-                            gf_afr_mt_afr_fd_ctx_t);</div><div class='del'>-        if (!fd_ctx) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd_ctx = GF_CALLOC(1, sizeof(afr_fd_ctx_t), gf_afr_mt_afr_fd_ctx_t);</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_ctx-&gt;opened_on = GF_CALLOC (sizeof (*fd_ctx-&gt;opened_on),</div><div class='del'>-                                       priv-&gt;child_count,</div><div class='del'>-                                       gf_afr_mt_int32_t);</div><div class='del'>-        if (!fd_ctx-&gt;opened_on) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd_ctx-&gt;opened_on = GF_CALLOC(sizeof(*fd_ctx-&gt;opened_on), priv-&gt;child_count,</div><div class='add'>+                                  gf_afr_mt_int32_t);</div><div class='add'>+    if (!fd_ctx-&gt;opened_on) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (fd_is_anonymous (fd))</div><div class='del'>-			fd_ctx-&gt;opened_on[i] = AFR_FD_OPENED;</div><div class='del'>-		else</div><div class='del'>-			fd_ctx-&gt;opened_on[i] = AFR_FD_NOT_OPENED;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (fd_is_anonymous(fd))</div><div class='add'>+            fd_ctx-&gt;opened_on[i] = AFR_FD_OPENED;</div><div class='add'>+        else</div><div class='add'>+            fd_ctx-&gt;opened_on[i] = AFR_FD_NOT_OPENED;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	fd_ctx-&gt;readdir_subvol = -1;</div><div class='add'>+    fd_ctx-&gt;readdir_subvol = -1;</div><div class='ctx'> </div><div class='del'>-        ret = __fd_ctx_set (fd, this, (uint64_t)(long) fd_ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "failed to set fd ctx (%p)", fd);</div><div class='add'>+    ret = __fd_ctx_set(fd, this, (uint64_t)(long)fd_ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to set fd ctx (%p)", fd);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; fd_ctx)</div><div class='del'>-                _afr_cleanup_fd_ctx (fd_ctx);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; fd_ctx)</div><div class='add'>+        _afr_cleanup_fd_ctx(fd_ctx);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* {{{ flush */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int call_count = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret != -1) {</div><div class='del'>-			local-&gt;op_ret = op_ret;</div><div class='del'>-			if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-				local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-		} else {</div><div class='del'>-			local-&gt;op_errno = op_errno;</div><div class='del'>-		}</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret != -1) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-	if (call_count == 0)</div><div class='del'>-		AFR_STACK_UNWIND (flush, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, local-&gt;xdata_rsp);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_UNWIND(flush, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;xdata_rsp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_flush_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int           i      = 0;</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        int call_count       = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_flush_cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;flush,</div><div class='del'>-                                           local-&gt;fd, xdata);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                }</div><div class='add'>+afr_flush_wrapper(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, afr_flush_cbk, (void *)(long)i,</div><div class='add'>+                              priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;flush,</div><div class='add'>+                              local-&gt;fd, xdata);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-afr_local_t*</div><div class='del'>-afr_wakeup_same_fd_delayed_op (xlator_t *this, afr_lock_t *lock, fd_t *fd)</div><div class='add'>+afr_local_t *</div><div class='add'>+afr_wakeup_same_fd_delayed_op(xlator_t *this, afr_lock_t *lock, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (lock-&gt;delay_timer) {</div><div class='del'>-                local = list_entry(lock-&gt;post_op.next, afr_local_t,</div><div class='del'>-                                   transaction.owner_list);</div><div class='del'>-                if (fd == local-&gt;fd) {</div><div class='del'>-                        if (gf_timer_call_cancel (this-&gt;ctx,</div><div class='del'>-                                                  lock-&gt;delay_timer)) {</div><div class='del'>-                                local = NULL;</div><div class='del'>-                        } else {</div><div class='del'>-                                lock-&gt;delay_timer = NULL;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        local = NULL;</div><div class='del'>-                }</div><div class='add'>+    if (lock-&gt;delay_timer) {</div><div class='add'>+        local = list_entry(lock-&gt;post_op.next, afr_local_t,</div><div class='add'>+                           transaction.owner_list);</div><div class='add'>+        if (fd == local-&gt;fd) {</div><div class='add'>+            if (gf_timer_call_cancel(this-&gt;ctx, lock-&gt;delay_timer)) {</div><div class='add'>+                local = NULL;</div><div class='add'>+            } else {</div><div class='add'>+                lock-&gt;delay_timer = NULL;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            local = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_delayed_changelog_wake_resume (xlator_t *this, inode_t *inode,</div><div class='del'>-                                   call_stub_t *stub)</div><div class='del'>-{</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='del'>-        afr_lock_t      *lock = NULL;</div><div class='del'>-        afr_local_t     *metadata_local = NULL;</div><div class='del'>-        afr_local_t     *data_local = NULL;</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                (void)__afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-                lock = &amp;ctx-&gt;lock[AFR_DATA_TRANSACTION];</div><div class='del'>-                data_local = afr_wakeup_same_fd_delayed_op (this, lock,</div><div class='del'>-                                                            stub-&gt;args.fd);</div><div class='del'>-                lock = &amp;ctx-&gt;lock[AFR_METADATA_TRANSACTION];</div><div class='del'>-                metadata_local = afr_wakeup_same_fd_delayed_op (this, lock,</div><div class='del'>-                                                                stub-&gt;args.fd);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (data_local) {</div><div class='del'>-                data_local-&gt;transaction.resume_stub = stub;</div><div class='del'>-        } else if (metadata_local) {</div><div class='del'>-                metadata_local-&gt;transaction.resume_stub = stub;</div><div class='del'>-        } else {</div><div class='del'>-                call_resume (stub);</div><div class='del'>-        }</div><div class='del'>-        if (data_local) {</div><div class='del'>-                afr_delayed_changelog_wake_up_cbk (data_local);</div><div class='del'>-        }</div><div class='del'>-        if (metadata_local) {</div><div class='del'>-                afr_delayed_changelog_wake_up_cbk (metadata_local);</div><div class='del'>-        }</div><div class='add'>+afr_delayed_changelog_wake_resume(xlator_t *this, inode_t *inode,</div><div class='add'>+                                  call_stub_t *stub)</div><div class='add'>+{</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    afr_local_t *metadata_local = NULL;</div><div class='add'>+    afr_local_t *data_local = NULL;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        (void)__afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+        lock = &amp;ctx-&gt;lock[AFR_DATA_TRANSACTION];</div><div class='add'>+        data_local = afr_wakeup_same_fd_delayed_op(this, lock, stub-&gt;args.fd);</div><div class='add'>+        lock = &amp;ctx-&gt;lock[AFR_METADATA_TRANSACTION];</div><div class='add'>+        metadata_local = afr_wakeup_same_fd_delayed_op(this, lock,</div><div class='add'>+                                                       stub-&gt;args.fd);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (data_local) {</div><div class='add'>+        data_local-&gt;transaction.resume_stub = stub;</div><div class='add'>+    } else if (metadata_local) {</div><div class='add'>+        metadata_local-&gt;transaction.resume_stub = stub;</div><div class='add'>+    } else {</div><div class='add'>+        call_resume(stub);</div><div class='add'>+    }</div><div class='add'>+    if (data_local) {</div><div class='add'>+        afr_delayed_changelog_wake_up_cbk(data_local);</div><div class='add'>+    }</div><div class='add'>+    if (metadata_local) {</div><div class='add'>+        afr_delayed_changelog_wake_up_cbk(metadata_local);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local   = NULL;</div><div class='del'>-        call_stub_t *stub    = NULL;</div><div class='del'>-        int         op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_FLUSH;</div><div class='del'>-	if (!afr_is_consistent_io_possible (local, this-&gt;private, &amp;op_errno))</div><div class='del'>-		goto out;</div><div class='add'>+    local-&gt;op = GF_FOP_FLUSH;</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, this-&gt;private, &amp;op_errno))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        stub = fop_flush_stub (frame, afr_flush_wrapper, fd, xdata);</div><div class='del'>-        if (!stub)</div><div class='del'>-                goto out;</div><div class='add'>+    stub = fop_flush_stub(frame, afr_flush_wrapper, fd, xdata);</div><div class='add'>+    if (!stub)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        afr_delayed_changelog_wake_resume (this, fd-&gt;inode, stub);</div><div class='add'>+    afr_delayed_changelog_wake_resume(this, fd-&gt;inode, stub);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (flush, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(flush, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int call_count = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-			if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-				local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-		} else {</div><div class='del'>-			local-&gt;op_errno = op_errno;</div><div class='del'>-		}</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                AFR_STACK_UNWIND (fsyncdir, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, local-&gt;xdata_rsp);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_UNWIND(fsyncdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;xdata_rsp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='del'>-	      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int32_t call_count = 0;</div><div class='del'>-        int32_t op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_FSYNCDIR;</div><div class='del'>-	if (!afr_is_consistent_io_possible (local, priv, &amp;op_errno))</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND (frame, afr_fsyncdir_cbk,</div><div class='del'>-                                    priv-&gt;children[i],</div><div class='del'>-                                    priv-&gt;children[i]-&gt;fops-&gt;fsyncdir,</div><div class='del'>-                                    fd, datasync, xdata);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+afr_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t call_count = 0;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_FSYNCDIR;</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, priv, &amp;op_errno))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND(frame, afr_fsyncdir_cbk, priv-&gt;children[i],</div><div class='add'>+                       priv-&gt;children[i]-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (fsyncdir, frame, -1, op_errno, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(fsyncdir, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_serialized_lock_wind (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_serialized_lock_wind(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_is_conflicting_lock_present (int32_t op_ret, int32_t op_errno)</div><div class='add'>+afr_is_conflicting_lock_present(int32_t op_ret, int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        if (op_ret == -1 &amp;&amp; op_errno == EAGAIN)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (op_ret == -1 &amp;&amp; op_errno == EAGAIN)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_fop_lock_unwind (call_frame_t *frame, glusterfs_fop_t op, int32_t op_ret,</div><div class='del'>-                     int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_fop_lock_unwind(call_frame_t *frame, glusterfs_fop_t op, int32_t op_ret,</div><div class='add'>+                    int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        switch (op) {</div><div class='add'>+    switch (op) {</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='del'>-                AFR_STACK_UNWIND (inodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-                break;</div><div class='add'>+            AFR_STACK_UNWIND(inodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-                AFR_STACK_UNWIND (finodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-                break;</div><div class='add'>+            AFR_STACK_UNWIND(finodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='del'>-                AFR_STACK_UNWIND (entrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-                break;</div><div class='add'>+            AFR_STACK_UNWIND(entrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-                AFR_STACK_UNWIND (fentrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-                break;</div><div class='add'>+            AFR_STACK_UNWIND(fentrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_fop_lock_wind (call_frame_t *frame, xlator_t *this, int child_index,</div><div class='del'>-                   int32_t (*lock_cbk) (call_frame_t *, void *, xlator_t *,</div><div class='del'>-                                        int32_t, int32_t, dict_t *))</div><div class='add'>+afr_fop_lock_wind(call_frame_t *frame, xlator_t *this, int child_index,</div><div class='add'>+                  int32_t (*lock_cbk)(call_frame_t *, void *, xlator_t *,</div><div class='add'>+                                      int32_t, int32_t, dict_t *))</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        int i = child_index;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    int i = child_index;</div><div class='ctx'> </div><div class='del'>-        switch (local-&gt;op) {</div><div class='add'>+    switch (local-&gt;op) {</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='del'>-                STACK_WIND_COOKIE (frame, lock_cbk, (void *) (long) i,</div><div class='del'>-                                   priv-&gt;children[i],</div><div class='del'>-                                   priv-&gt;children[i]-&gt;fops-&gt;inodelk,</div><div class='del'>-                                   (const char *)local-&gt;cont.inodelk.volume,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;cont.inodelk.cmd,</div><div class='del'>-                                   &amp;local-&gt;cont.inodelk.flock,</div><div class='del'>-                                   local-&gt;cont.inodelk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, lock_cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                priv-&gt;children[i]-&gt;fops-&gt;inodelk,</div><div class='add'>+                (const char *)local-&gt;cont.inodelk.volume, &amp;local-&gt;loc,</div><div class='add'>+                local-&gt;cont.inodelk.cmd, &amp;local-&gt;cont.inodelk.flock,</div><div class='add'>+                local-&gt;cont.inodelk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-                STACK_WIND_COOKIE (frame, lock_cbk, (void *) (long) i,</div><div class='del'>-                                   priv-&gt;children[i],</div><div class='del'>-                                   priv-&gt;children[i]-&gt;fops-&gt;finodelk,</div><div class='del'>-                                   (const char *)local-&gt;cont.inodelk.volume,</div><div class='del'>-                                   local-&gt;fd, local-&gt;cont.inodelk.cmd,</div><div class='del'>-                                   &amp;local-&gt;cont.inodelk.flock,</div><div class='del'>-                                   local-&gt;cont.inodelk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, lock_cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                priv-&gt;children[i]-&gt;fops-&gt;finodelk,</div><div class='add'>+                (const char *)local-&gt;cont.inodelk.volume, local-&gt;fd,</div><div class='add'>+                local-&gt;cont.inodelk.cmd, &amp;local-&gt;cont.inodelk.flock,</div><div class='add'>+                local-&gt;cont.inodelk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='del'>-                STACK_WIND_COOKIE (frame, lock_cbk, (void *) (long) i,</div><div class='del'>-                                   priv-&gt;children[i],</div><div class='del'>-                                   priv-&gt;children[i]-&gt;fops-&gt;entrylk,</div><div class='del'>-                                   local-&gt;cont.entrylk.volume, &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;cont.entrylk.basename,</div><div class='del'>-                                   local-&gt;cont.entrylk.cmd,</div><div class='del'>-                                   local-&gt;cont.entrylk.type,</div><div class='del'>-                                   local-&gt;cont.entrylk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, lock_cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                priv-&gt;children[i]-&gt;fops-&gt;entrylk, local-&gt;cont.entrylk.volume,</div><div class='add'>+                &amp;local-&gt;loc, local-&gt;cont.entrylk.basename,</div><div class='add'>+                local-&gt;cont.entrylk.cmd, local-&gt;cont.entrylk.type,</div><div class='add'>+                local-&gt;cont.entrylk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-                STACK_WIND_COOKIE (frame, lock_cbk, (void *) (long) i,</div><div class='del'>-                                   priv-&gt;children[i],</div><div class='del'>-                                   priv-&gt;children[i]-&gt;fops-&gt;fentrylk,</div><div class='del'>-                                   local-&gt;cont.entrylk.volume, local-&gt;fd,</div><div class='del'>-                                   local-&gt;cont.entrylk.basename,</div><div class='del'>-                                   local-&gt;cont.entrylk.cmd,</div><div class='del'>-                                   local-&gt;cont.entrylk.type,</div><div class='del'>-                                   local-&gt;cont.entrylk.xdata);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, lock_cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                priv-&gt;children[i]-&gt;fops-&gt;fentrylk, local-&gt;cont.entrylk.volume,</div><div class='add'>+                local-&gt;fd, local-&gt;cont.entrylk.basename,</div><div class='add'>+                local-&gt;cont.entrylk.cmd, local-&gt;cont.entrylk.type,</div><div class='add'>+                local-&gt;cont.entrylk.xdata);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_fop_lock_proceed (call_frame_t *frame)</div><div class='add'>+afr_fop_lock_proceed(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = frame-&gt;this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = frame-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop_lock_state != AFR_FOP_LOCK_PARALLEL) {</div><div class='del'>-                afr_fop_lock_unwind (frame, local-&gt;op, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;xdata_rsp);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-        /* At least one child is up */</div><div class='del'>-        /*</div><div class='del'>-         * Non-blocking locks also need to be serialized.  Otherwise there is</div><div class='del'>-         * a chance that both the mounts which issued same non-blocking inodelk</div><div class='del'>-         * may endup not acquiring the lock on any-brick.</div><div class='del'>-         * Ex: Mount1 and Mount2</div><div class='del'>-         * request for full length lock on file f1.  Mount1 afr may acquire the</div><div class='del'>-         * partial lock on brick-1 and may not acquire the lock on brick-2</div><div class='del'>-         * because Mount2 already got the lock on brick-2, vice versa.  Since</div><div class='del'>-         * both the mounts only got partial locks, afr treats them as failure in</div><div class='del'>-         * gaining the locks and unwinds with EAGAIN errno.</div><div class='del'>-         */</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;op_errno = EUCLEAN;</div><div class='del'>-        local-&gt;fop_lock_state = AFR_FOP_LOCK_SERIAL;</div><div class='del'>-        afr_local_replies_wipe (local, priv);</div><div class='del'>-        if (local-&gt;xdata_rsp)</div><div class='del'>-                dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-        local-&gt;xdata_rsp = NULL;</div><div class='del'>-        switch (local-&gt;op) {</div><div class='add'>+    if (local-&gt;fop_lock_state != AFR_FOP_LOCK_PARALLEL) {</div><div class='add'>+        afr_fop_lock_unwind(frame, local-&gt;op, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;xdata_rsp);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    /* At least one child is up */</div><div class='add'>+    /*</div><div class='add'>+     * Non-blocking locks also need to be serialized.  Otherwise there is</div><div class='add'>+     * a chance that both the mounts which issued same non-blocking inodelk</div><div class='add'>+     * may endup not acquiring the lock on any-brick.</div><div class='add'>+     * Ex: Mount1 and Mount2</div><div class='add'>+     * request for full length lock on file f1.  Mount1 afr may acquire the</div><div class='add'>+     * partial lock on brick-1 and may not acquire the lock on brick-2</div><div class='add'>+     * because Mount2 already got the lock on brick-2, vice versa.  Since</div><div class='add'>+     * both the mounts only got partial locks, afr treats them as failure in</div><div class='add'>+     * gaining the locks and unwinds with EAGAIN errno.</div><div class='add'>+     */</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = EUCLEAN;</div><div class='add'>+    local-&gt;fop_lock_state = AFR_FOP_LOCK_SERIAL;</div><div class='add'>+    afr_local_replies_wipe(local, priv);</div><div class='add'>+    if (local-&gt;xdata_rsp)</div><div class='add'>+        dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+    local-&gt;xdata_rsp = NULL;</div><div class='add'>+    switch (local-&gt;op) {</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-                local-&gt;cont.inodelk.cmd = local-&gt;cont.inodelk.in_cmd;</div><div class='del'>-                local-&gt;cont.inodelk.flock = local-&gt;cont.inodelk.in_flock;</div><div class='del'>-                if (local-&gt;cont.inodelk.xdata)</div><div class='del'>-                        dict_unref (local-&gt;cont.inodelk.xdata);</div><div class='del'>-                local-&gt;cont.inodelk.xdata = NULL;</div><div class='del'>-                if (local-&gt;xdata_req)</div><div class='del'>-                        local-&gt;cont.inodelk.xdata = dict_ref (local-&gt;xdata_req);</div><div class='del'>-                break;</div><div class='add'>+            local-&gt;cont.inodelk.cmd = local-&gt;cont.inodelk.in_cmd;</div><div class='add'>+            local-&gt;cont.inodelk.flock = local-&gt;cont.inodelk.in_flock;</div><div class='add'>+            if (local-&gt;cont.inodelk.xdata)</div><div class='add'>+                dict_unref(local-&gt;cont.inodelk.xdata);</div><div class='add'>+            local-&gt;cont.inodelk.xdata = NULL;</div><div class='add'>+            if (local-&gt;xdata_req)</div><div class='add'>+                local-&gt;cont.inodelk.xdata = dict_ref(local-&gt;xdata_req);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-                local-&gt;cont.entrylk.cmd = local-&gt;cont.entrylk.in_cmd;</div><div class='del'>-                if (local-&gt;cont.entrylk.xdata)</div><div class='del'>-                        dict_unref (local-&gt;cont.entrylk.xdata);</div><div class='del'>-                local-&gt;cont.entrylk.xdata = NULL;</div><div class='del'>-                if (local-&gt;xdata_req)</div><div class='del'>-                        local-&gt;cont.entrylk.xdata = dict_ref (local-&gt;xdata_req);</div><div class='del'>-                break;</div><div class='add'>+            local-&gt;cont.entrylk.cmd = local-&gt;cont.entrylk.in_cmd;</div><div class='add'>+            if (local-&gt;cont.entrylk.xdata)</div><div class='add'>+                dict_unref(local-&gt;cont.entrylk.xdata);</div><div class='add'>+            local-&gt;cont.entrylk.xdata = NULL;</div><div class='add'>+            if (local-&gt;xdata_req)</div><div class='add'>+                local-&gt;cont.entrylk.xdata = dict_ref(local-&gt;xdata_req);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        afr_serialized_lock_wind (frame, frame-&gt;this);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    afr_serialized_lock_wind(frame, frame-&gt;this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_unlock_partial_lock_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                             xlator_t *this, int32_t op_ret,</div><div class='del'>-                             int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_unlock_partial_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        int child_index = (long)cookie;</div><div class='del'>-        uuid_t  gfid = {0};</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    uuid_t gfid = {0};</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN) {</div><div class='del'>-                if (local-&gt;fd)</div><div class='del'>-                        gf_uuid_copy (gfid, local-&gt;fd-&gt;inode-&gt;gfid);</div><div class='del'>-                else</div><div class='del'>-                        loc_gfid (&amp;local-&gt;loc, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        AFR_MSG_UNLOCK_FAIL,</div><div class='del'>-                        "%s: Failed to unlock %s on %s "</div><div class='del'>-                        "with lk_owner: %s", uuid_utoa (gfid),</div><div class='del'>-                        gf_fop_list[local-&gt;op],</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name,</div><div class='del'>-                        lkowner_utoa (&amp;frame-&gt;root-&gt;lk_owner));</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN) {</div><div class='add'>+        if (local-&gt;fd)</div><div class='add'>+            gf_uuid_copy(gfid, local-&gt;fd-&gt;inode-&gt;gfid);</div><div class='add'>+        else</div><div class='add'>+            loc_gfid(&amp;local-&gt;loc, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, AFR_MSG_UNLOCK_FAIL,</div><div class='add'>+               "%s: Failed to unlock %s on %s "</div><div class='add'>+               "with lk_owner: %s",</div><div class='add'>+               uuid_utoa(gfid), gf_fop_list[local-&gt;op],</div><div class='add'>+               priv-&gt;children[child_index]-&gt;name,</div><div class='add'>+               lkowner_utoa(&amp;frame-&gt;root-&gt;lk_owner));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                afr_fop_lock_proceed (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        afr_fop_lock_proceed(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_unlock_locks_and_proceed (call_frame_t *frame, xlator_t *this,</div><div class='add'>+afr_unlock_locks_and_proceed(call_frame_t *frame, xlator_t *this,</div><div class='ctx'>                              int call_count)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                afr_fop_lock_proceed (frame);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        afr_fop_lock_proceed(frame);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local-&gt;call_count = call_count;</div><div class='del'>-        switch (local-&gt;op) {</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local-&gt;call_count = call_count;</div><div class='add'>+    switch (local-&gt;op) {</div><div class='ctx'>         case GF_FOP_INODELK:</div><div class='ctx'>         case GF_FOP_FINODELK:</div><div class='del'>-                local-&gt;cont.inodelk.flock.l_type = F_UNLCK;</div><div class='del'>-                local-&gt;cont.inodelk.cmd = F_SETLK;</div><div class='del'>-                if (local-&gt;cont.inodelk.xdata)</div><div class='del'>-                        dict_unref (local-&gt;cont.inodelk.xdata);</div><div class='del'>-                local-&gt;cont.inodelk.xdata = NULL;</div><div class='del'>-                break;</div><div class='add'>+            local-&gt;cont.inodelk.flock.l_type = F_UNLCK;</div><div class='add'>+            local-&gt;cont.inodelk.cmd = F_SETLK;</div><div class='add'>+            if (local-&gt;cont.inodelk.xdata)</div><div class='add'>+                dict_unref(local-&gt;cont.inodelk.xdata);</div><div class='add'>+            local-&gt;cont.inodelk.xdata = NULL;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_ENTRYLK:</div><div class='ctx'>         case GF_FOP_FENTRYLK:</div><div class='del'>-                local-&gt;cont.entrylk.cmd = ENTRYLK_UNLOCK;</div><div class='del'>-                if (local-&gt;cont.entrylk.xdata)</div><div class='del'>-                        dict_unref (local-&gt;cont.entrylk.xdata);</div><div class='del'>-                local-&gt;cont.entrylk.xdata = NULL;</div><div class='del'>-                break;</div><div class='add'>+            local-&gt;cont.entrylk.cmd = ENTRYLK_UNLOCK;</div><div class='add'>+            if (local-&gt;cont.entrylk.xdata)</div><div class='add'>+                dict_unref(local-&gt;cont.entrylk.xdata);</div><div class='add'>+            local-&gt;cont.entrylk.xdata = NULL;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                afr_fop_lock_wind (frame, this, i, afr_unlock_partial_lock_cbk);</div><div class='add'>+        afr_fop_lock_wind(frame, this, i, afr_unlock_partial_lock_cbk);</div><div class='ctx'> </div><div class='del'>-                if (!--call_count)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fop_lock_done (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fop_lock_done(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int lock_count = 0;</div><div class='del'>-        unsigned char *success = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int lock_count = 0;</div><div class='add'>+    unsigned char *success = NULL;</div><div class='ctx'> </div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        success = alloca0(priv-&gt;child_count);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    success = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;replies[i].op_ret == 0) {</div><div class='del'>-                        lock_count++;</div><div class='del'>-                        success[i] = 1;</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;replies[i].op_ret == 0) {</div><div class='add'>+            lock_count++;</div><div class='add'>+            success[i] = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret == -1 &amp;&amp; local-&gt;op_errno == EAGAIN)</div><div class='del'>-                        continue;</div><div class='add'>+        if (local-&gt;op_ret == -1 &amp;&amp; local-&gt;op_errno == EAGAIN)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if ((local-&gt;replies[i].op_ret == -1) &amp;&amp;</div><div class='del'>-                    (local-&gt;replies[i].op_errno == EAGAIN)) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = EAGAIN;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        if ((local-&gt;replies[i].op_ret == -1) &amp;&amp;</div><div class='add'>+            (local-&gt;replies[i].op_errno == EAGAIN)) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EAGAIN;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;replies[i].op_ret == 0)</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='add'>+        if (local-&gt;replies[i].op_ret == 0)</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='del'>-        }</div><div class='add'>+        local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (afr_fop_lock_is_unlock (frame))</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (afr_is_conflicting_lock_present (local-&gt;op_ret, local-&gt;op_errno)) {</div><div class='del'>-                afr_unlock_locks_and_proceed (frame, this, lock_count);</div><div class='del'>-        } else if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum (success, this)) {</div><div class='del'>-                local-&gt;fop_lock_state = AFR_FOP_LOCK_QUORUM_FAILED;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-                if (local-&gt;op_errno == 0)</div><div class='del'>-                        local-&gt;op_errno = afr_quorum_errno (priv);</div><div class='del'>-                afr_unlock_locks_and_proceed (frame, this, lock_count);</div><div class='del'>-        } else {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (afr_fop_lock_is_unlock(frame))</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (afr_is_conflicting_lock_present(local-&gt;op_ret, local-&gt;op_errno)) {</div><div class='add'>+        afr_unlock_locks_and_proceed(frame, this, lock_count);</div><div class='add'>+    } else if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum(success, this)) {</div><div class='add'>+        local-&gt;fop_lock_state = AFR_FOP_LOCK_QUORUM_FAILED;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='add'>+        if (local-&gt;op_errno == 0)</div><div class='add'>+            local-&gt;op_errno = afr_quorum_errno(priv);</div><div class='add'>+        afr_unlock_locks_and_proceed(frame, this, lock_count);</div><div class='add'>+    } else {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        afr_fop_lock_unwind (frame, local-&gt;op, local-&gt;op_ret,</div><div class='del'>-                             local-&gt;op_errno, local-&gt;xdata_rsp);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_fop_lock_unwind(frame, local-&gt;op, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                        local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_common_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_common_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int child_index = (long)cookie;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;replies[child_index].valid = 1;</div><div class='del'>-        local-&gt;replies[child_index].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[child_index].op_errno = op_errno;</div><div class='del'>-        if (op_ret == 0 &amp;&amp; xdata) {</div><div class='del'>-                local-&gt;replies[child_index].xdata = dict_ref (xdata);</div><div class='del'>-                LOCK (&amp;frame-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (!local-&gt;xdata_rsp)</div><div class='del'>-                                local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    local-&gt;replies[child_index].valid = 1;</div><div class='add'>+    local-&gt;replies[child_index].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[child_index].op_errno = op_errno;</div><div class='add'>+    if (op_ret == 0 &amp;&amp; xdata) {</div><div class='add'>+        local-&gt;replies[child_index].xdata = dict_ref(xdata);</div><div class='add'>+        LOCK(&amp;frame-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            if (!local-&gt;xdata_rsp)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_serialized_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_serialized_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int child_index = (long)cookie;</div><div class='del'>-        int next_child  = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int next_child = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        afr_common_lock_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    afr_common_lock_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        for (next_child = child_index + 1; next_child &lt; priv-&gt;child_count;</div><div class='del'>-             next_child++) {</div><div class='del'>-                if (local-&gt;child_up[next_child])</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (next_child = child_index + 1; next_child &lt; priv-&gt;child_count;</div><div class='add'>+         next_child++) {</div><div class='add'>+        if (local-&gt;child_up[next_child])</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (afr_is_conflicting_lock_present (op_ret, op_errno) ||</div><div class='del'>-            (next_child == priv-&gt;child_count)) {</div><div class='del'>-                afr_fop_lock_done (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                afr_fop_lock_wind (frame, this, next_child,</div><div class='del'>-                                   afr_serialized_lock_cbk);</div><div class='del'>-        }</div><div class='add'>+    if (afr_is_conflicting_lock_present(op_ret, op_errno) ||</div><div class='add'>+        (next_child == priv-&gt;child_count)) {</div><div class='add'>+        afr_fop_lock_done(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        afr_fop_lock_wind(frame, this, next_child, afr_serialized_lock_cbk);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_serialized_lock_wind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_serialized_lock_wind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local  = NULL;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        afr_fop_lock_wind (frame, this, i,</div><div class='del'>-                                           afr_serialized_lock_cbk);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            afr_fop_lock_wind(frame, this, i, afr_serialized_lock_cbk);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_parallel_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_parallel_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        int     call_count = 0;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        afr_common_lock_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    afr_common_lock_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                afr_fop_lock_done (frame, this);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        afr_fop_lock_done(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_parallel_lock_wind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_parallel_lock_wind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local  = NULL;</div><div class='del'>-        int         call_count = 0;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;child_up[i])</div><div class='del'>-                        continue;</div><div class='del'>-                afr_fop_lock_wind (frame, this, i, afr_parallel_lock_cbk);</div><div class='del'>-                if (!--call_count)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;child_up[i])</div><div class='add'>+            continue;</div><div class='add'>+        afr_fop_lock_wind(frame, this, i, afr_parallel_lock_cbk);</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_fop_handle_lock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fop_handle_lock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        int op_errno = 0;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    int op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        if (!afr_fop_lock_is_unlock (frame)) {</div><div class='del'>-                if (!afr_is_consistent_io_possible (local, this-&gt;private,</div><div class='del'>-                                                &amp;op_errno))</div><div class='del'>-                        goto out;</div><div class='add'>+    if (!afr_fop_lock_is_unlock(frame)) {</div><div class='add'>+        if (!afr_is_consistent_io_possible(local, this-&gt;private, &amp;op_errno))</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                switch (local-&gt;op) {</div><div class='del'>-                case GF_FOP_INODELK:</div><div class='del'>-                case GF_FOP_FINODELK:</div><div class='del'>-                        local-&gt;cont.inodelk.cmd = F_SETLK;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_FOP_ENTRYLK:</div><div class='del'>-                case GF_FOP_FENTRYLK:</div><div class='del'>-                        local-&gt;cont.entrylk.cmd = ENTRYLK_LOCK_NB;</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        switch (local-&gt;op) {</div><div class='add'>+            case GF_FOP_INODELK:</div><div class='add'>+            case GF_FOP_FINODELK:</div><div class='add'>+                local-&gt;cont.inodelk.cmd = F_SETLK;</div><div class='add'>+                break;</div><div class='add'>+            case GF_FOP_ENTRYLK:</div><div class='add'>+            case GF_FOP_FENTRYLK:</div><div class='add'>+                local-&gt;cont.entrylk.cmd = ENTRYLK_LOCK_NB;</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata_req) {</div><div class='del'>-                switch (local-&gt;op) {</div><div class='del'>-                case GF_FOP_INODELK:</div><div class='del'>-                case GF_FOP_FINODELK:</div><div class='del'>-                        local-&gt;cont.inodelk.xdata = dict_ref (local-&gt;xdata_req);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_FOP_ENTRYLK:</div><div class='del'>-                case GF_FOP_FENTRYLK:</div><div class='del'>-                        local-&gt;cont.entrylk.xdata = dict_ref (local-&gt;xdata_req);</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (local-&gt;xdata_req) {</div><div class='add'>+        switch (local-&gt;op) {</div><div class='add'>+            case GF_FOP_INODELK:</div><div class='add'>+            case GF_FOP_FINODELK:</div><div class='add'>+                local-&gt;cont.inodelk.xdata = dict_ref(local-&gt;xdata_req);</div><div class='add'>+                break;</div><div class='add'>+            case GF_FOP_ENTRYLK:</div><div class='add'>+            case GF_FOP_FENTRYLK:</div><div class='add'>+                local-&gt;cont.entrylk.xdata = dict_ref(local-&gt;xdata_req);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;fop_lock_state = AFR_FOP_LOCK_PARALLEL;</div><div class='del'>-        afr_parallel_lock_wind (frame, this);</div><div class='add'>+    local-&gt;fop_lock_state = AFR_FOP_LOCK_PARALLEL;</div><div class='add'>+    afr_parallel_lock_wind(frame, this);</div><div class='ctx'> out:</div><div class='del'>-        return -op_errno;</div><div class='add'>+    return -op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_handle_inodelk (call_frame_t *frame, glusterfs_fop_t fop,</div><div class='del'>-                    const char *volume, loc_t *loc, fd_t *fd, int32_t cmd,</div><div class='del'>-                    struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+afr_handle_inodelk(call_frame_t *frame, glusterfs_fop_t fop, const char *volume,</div><div class='add'>+                   loc_t *loc, fd_t *fd, int32_t cmd, struct gf_flock *flock,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local  = NULL;</div><div class='del'>-        int32_t op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = fop;</div><div class='del'>-        if (loc)</div><div class='del'>-                loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        if (fd)</div><div class='del'>-                local-&gt;fd = fd_ref (fd);</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.inodelk.volume = gf_strdup (volume);</div><div class='del'>-        if (!local-&gt;cont.inodelk.volume) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.inodelk.in_cmd = cmd;</div><div class='del'>-        local-&gt;cont.inodelk.cmd = cmd;</div><div class='del'>-        local-&gt;cont.inodelk.in_flock = *flock;</div><div class='del'>-        local-&gt;cont.inodelk.flock = *flock;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        op_errno = -afr_fop_handle_lock (frame, frame-&gt;this);</div><div class='del'>-        if (op_errno)</div><div class='del'>-                goto out;</div><div class='del'>-        return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = fop;</div><div class='add'>+    if (loc)</div><div class='add'>+        loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    if (fd)</div><div class='add'>+        local-&gt;fd = fd_ref(fd);</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.inodelk.volume = gf_strdup(volume);</div><div class='add'>+    if (!local-&gt;cont.inodelk.volume) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.inodelk.in_cmd = cmd;</div><div class='add'>+    local-&gt;cont.inodelk.cmd = cmd;</div><div class='add'>+    local-&gt;cont.inodelk.in_flock = *flock;</div><div class='add'>+    local-&gt;cont.inodelk.flock = *flock;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    op_errno = -afr_fop_handle_lock(frame, frame-&gt;this);</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto out;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        afr_fop_lock_unwind (frame, fop, -1, op_errno, NULL);</div><div class='add'>+    afr_fop_lock_unwind(frame, fop, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *volume, loc_t *loc, int32_t cmd,</div><div class='del'>-             struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+afr_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+            int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_handle_inodelk (frame, GF_FOP_INODELK, volume, loc, NULL, cmd,</div><div class='del'>-                            flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_handle_inodelk(frame, GF_FOP_INODELK, volume, loc, NULL, cmd, flock,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_finodelk (call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='del'>-	      int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+afr_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+             int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_handle_inodelk (frame, GF_FOP_FINODELK, volume, NULL, fd, cmd,</div><div class='del'>-                            flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_handle_inodelk(frame, GF_FOP_FINODELK, volume, NULL, fd, cmd, flock,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_handle_entrylk (call_frame_t *frame, glusterfs_fop_t fop,</div><div class='del'>-                    const char *volume, loc_t *loc, fd_t *fd,</div><div class='del'>-                    const char *basename, entrylk_cmd cmd,</div><div class='del'>-                    entrylk_type type, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local  = NULL;</div><div class='del'>-        int32_t op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = fop;</div><div class='del'>-        if (loc)</div><div class='del'>-                loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        if (fd)</div><div class='del'>-                local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;cont.entrylk.cmd = cmd;</div><div class='del'>-        local-&gt;cont.entrylk.in_cmd = cmd;</div><div class='del'>-        local-&gt;cont.entrylk.type = type;</div><div class='del'>-        local-&gt;cont.entrylk.volume = gf_strdup (volume);</div><div class='del'>-        local-&gt;cont.entrylk.basename = gf_strdup (basename);</div><div class='del'>-        if (!local-&gt;cont.entrylk.volume || !local-&gt;cont.entrylk.basename) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_ref (xdata);</div><div class='del'>-        op_errno = -afr_fop_handle_lock (frame, frame-&gt;this);</div><div class='del'>-        if (op_errno)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+afr_handle_entrylk(call_frame_t *frame, glusterfs_fop_t fop, const char *volume,</div><div class='add'>+                   loc_t *loc, fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                   entrylk_type type, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = fop;</div><div class='add'>+    if (loc)</div><div class='add'>+        loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    if (fd)</div><div class='add'>+        local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;cont.entrylk.cmd = cmd;</div><div class='add'>+    local-&gt;cont.entrylk.in_cmd = cmd;</div><div class='add'>+    local-&gt;cont.entrylk.type = type;</div><div class='add'>+    local-&gt;cont.entrylk.volume = gf_strdup(volume);</div><div class='add'>+    local-&gt;cont.entrylk.basename = gf_strdup(basename);</div><div class='add'>+    if (!local-&gt;cont.entrylk.volume || !local-&gt;cont.entrylk.basename) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='add'>+    op_errno = -afr_fop_handle_lock(frame, frame-&gt;this);</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        afr_fop_lock_unwind (frame, fop, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_fop_lock_unwind(frame, fop, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_entrylk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-	     loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='del'>-	     entrylk_type type, dict_t *xdata)</div><div class='add'>+afr_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+            const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_handle_entrylk (frame, GF_FOP_ENTRYLK, volume, loc, NULL, basename,</div><div class='del'>-                            cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_handle_entrylk(frame, GF_FOP_ENTRYLK, volume, loc, NULL, basename, cmd,</div><div class='add'>+                       type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='del'>-              const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='del'>-	      dict_t *xdata)</div><div class='add'>+afr_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+             const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_handle_entrylk (frame, GF_FOP_FENTRYLK, volume, NULL, fd, basename,</div><div class='del'>-                            cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_handle_entrylk(frame, GF_FOP_FENTRYLK, volume, NULL, fd, basename, cmd,</div><div class='add'>+                       type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='del'>-		int op_errno, struct statvfs *statvfs, dict_t *xdata)</div><div class='add'>+afr_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, struct statvfs *statvfs, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int call_count = 0;</div><div class='del'>-	struct statvfs *buf = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    struct statvfs *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-                if (op_ret != 0) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		local-&gt;op_ret = op_ret;</div><div class='del'>-</div><div class='del'>-		buf = &amp;local-&gt;cont.statfs.buf;</div><div class='del'>-		if (local-&gt;cont.statfs.buf_set) {</div><div class='del'>-			if (statvfs-&gt;f_bavail &lt; buf-&gt;f_bavail) {</div><div class='del'>-				*buf = *statvfs;</div><div class='del'>-				if (xdata) {</div><div class='del'>-					if (local-&gt;xdata_rsp)</div><div class='del'>-						dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-					local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-				}</div><div class='del'>-			}</div><div class='del'>-		} else {</div><div class='del'>-			*buf = *statvfs;</div><div class='del'>-			local-&gt;cont.statfs.buf_set = 1;</div><div class='del'>-			if (xdata)</div><div class='del'>-				local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-		}</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+        if (op_ret != 0) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+</div><div class='add'>+        buf = &amp;local-&gt;cont.statfs.buf;</div><div class='add'>+        if (local-&gt;cont.statfs.buf_set) {</div><div class='add'>+            if (statvfs-&gt;f_bavail &lt; buf-&gt;f_bavail) {</div><div class='add'>+                *buf = *statvfs;</div><div class='add'>+                if (xdata) {</div><div class='add'>+                    if (local-&gt;xdata_rsp)</div><div class='add'>+                        dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+                    local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            *buf = *statvfs;</div><div class='add'>+            local-&gt;cont.statfs.buf_set = 1;</div><div class='add'>+            if (xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                AFR_STACK_UNWIND (statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;cont.statfs.buf, local-&gt;xdata_rsp);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_UNWIND(statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;cont.statfs.buf, local-&gt;xdata_rsp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *  local       = NULL;</div><div class='del'>-	afr_private_t   *priv        = NULL;</div><div class='del'>-        int              i           = 0;</div><div class='del'>-        int              call_count = 0;</div><div class='del'>-        int32_t          op_errno    = ENOMEM;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_STATFS;</div><div class='del'>-	if (!afr_is_consistent_io_possible (local, priv, &amp;op_errno))</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;arbiter_count == 1 &amp;&amp; local-&gt;child_up[ARBITER_BRICK_INDEX])</div><div class='del'>-                local-&gt;call_count--;</div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='del'>-	if (!call_count) {</div><div class='del'>-		op_errno = ENOTCONN;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        if (AFR_IS_ARBITER_BRICK(priv, i))</div><div class='del'>-                                continue;</div><div class='del'>-                        STACK_WIND (frame, afr_statfs_cbk,</div><div class='del'>-                                    priv-&gt;children[i],</div><div class='del'>-                                    priv-&gt;children[i]-&gt;fops-&gt;statfs,</div><div class='del'>-                                    loc, xdata);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+afr_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_STATFS;</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, priv, &amp;op_errno))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;arbiter_count == 1 &amp;&amp; local-&gt;child_up[ARBITER_BRICK_INDEX])</div><div class='add'>+        local-&gt;call_count--;</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='add'>+    if (!call_count) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            if (AFR_IS_ARBITER_BRICK(priv, i))</div><div class='add'>+                continue;</div><div class='add'>+            STACK_WIND(frame, afr_statfs_cbk, priv-&gt;children[i],</div><div class='add'>+                       priv-&gt;children[i]-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (statfs, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(statfs, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_lk_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+afr_lk_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        int child_index = (long)cookie;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN &amp;&amp; op_errno != EBADFD) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        AFR_MSG_UNLOCK_FAIL,</div><div class='del'>-                        "gfid=%s: unlock failed on subvolume %s "</div><div class='del'>-                        "with lock owner %s",</div><div class='del'>-                        uuid_utoa (local-&gt;fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name,</div><div class='del'>-                        lkowner_utoa (&amp;frame-&gt;root-&gt;lk_owner));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN &amp;&amp; op_errno != EBADFD) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, AFR_MSG_UNLOCK_FAIL,</div><div class='add'>+               "gfid=%s: unlock failed on subvolume %s "</div><div class='add'>+               "with lock owner %s",</div><div class='add'>+               uuid_utoa(local-&gt;fd-&gt;inode-&gt;gfid),</div><div class='add'>+               priv-&gt;children[child_index]-&gt;name,</div><div class='add'>+               lkowner_utoa(&amp;frame-&gt;root-&gt;lk_owner));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                AFR_STACK_UNWIND (lk, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  NULL, local-&gt;xdata_rsp);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_UNWIND(lk, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                         local-&gt;xdata_rsp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_lk_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_lk_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   * local = NULL;</div><div class='del'>-        afr_private_t * priv  = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int call_count = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        call_count = afr_locked_nodes_count (local-&gt;cont.lk.locked_nodes,</div><div class='del'>-                                             priv-&gt;child_count);</div><div class='add'>+    call_count = afr_locked_nodes_count(local-&gt;cont.lk.locked_nodes,</div><div class='add'>+                                        priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                AFR_STACK_UNWIND (lk, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  NULL, local-&gt;xdata_rsp);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        AFR_STACK_UNWIND(lk, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                         local-&gt;xdata_rsp);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count = call_count;</div><div class='add'>+    local-&gt;call_count = call_count;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.lk.user_flock.l_type = F_UNLCK;</div><div class='add'>+    local-&gt;cont.lk.user_flock.l_type = F_UNLCK;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;cont.lk.locked_nodes[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_lk_unlock_cbk,</div><div class='del'>-                                    (void *) (long) i, priv-&gt;children[i],</div><div class='del'>-                                    priv-&gt;children[i]-&gt;fops-&gt;lk,</div><div class='del'>-                                    local-&gt;fd, F_SETLK,</div><div class='del'>-                                    &amp;local-&gt;cont.lk.user_flock, NULL);</div><div class='del'>-</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;cont.lk.locked_nodes[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, afr_lk_unlock_cbk, (void *)(long)i,</div><div class='add'>+                              priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;lk,</div><div class='add'>+                              local-&gt;fd, F_SETLK, &amp;local-&gt;cont.lk.user_flock,</div><div class='add'>+                              NULL);</div><div class='add'>+</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-            int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+afr_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+           int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int child_index = -1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int child_index = -1;</div><div class='ctx'> </div><div class='del'>-        child_index = (long) cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        afr_common_lock_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='del'>-        if (op_ret &lt; 0 &amp;&amp; op_errno == EAGAIN) {</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = EAGAIN;</div><div class='add'>+    child_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-                afr_lk_unlock (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    afr_common_lock_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; op_errno == EAGAIN) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EAGAIN;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                local-&gt;op_ret        = 0;</div><div class='del'>-                local-&gt;op_errno      = 0;</div><div class='del'>-                local-&gt;cont.lk.locked_nodes[child_index] = 1;</div><div class='del'>-                local-&gt;cont.lk.ret_flock = *lock;</div><div class='del'>-        }</div><div class='add'>+        afr_lk_unlock(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+        local-&gt;cont.lk.locked_nodes[child_index] = 1;</div><div class='add'>+        local-&gt;cont.lk.ret_flock = *lock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    child_index++;</div><div class='add'>+</div><div class='add'>+    if (child_index &lt; priv-&gt;child_count) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_lk_cbk, (void *)(long)child_index,</div><div class='add'>+                          priv-&gt;children[child_index],</div><div class='add'>+                          priv-&gt;children[child_index]-&gt;fops-&gt;lk, local-&gt;fd,</div><div class='add'>+                          local-&gt;cont.lk.cmd, &amp;local-&gt;cont.lk.user_flock,</div><div class='add'>+                          local-&gt;xdata_req);</div><div class='add'>+    } else if (priv-&gt;quorum_count &amp;&amp;</div><div class='add'>+               !afr_has_quorum(local-&gt;cont.lk.locked_nodes, this)) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='ctx'> </div><div class='del'>-        child_index++;</div><div class='del'>-</div><div class='del'>-        if (child_index &lt; priv-&gt;child_count) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_lk_cbk, (void *) (long) child_index,</div><div class='del'>-                                   priv-&gt;children[child_index],</div><div class='del'>-                                   priv-&gt;children[child_index]-&gt;fops-&gt;lk,</div><div class='del'>-                                   local-&gt;fd, local-&gt;cont.lk.cmd,</div><div class='del'>-                                   &amp;local-&gt;cont.lk.user_flock,</div><div class='del'>-                                   local-&gt;xdata_req);</div><div class='del'>-        } else if (priv-&gt;quorum_count &amp;&amp;</div><div class='del'>-                   !afr_has_quorum (local-&gt;cont.lk.locked_nodes, this)) {</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-</div><div class='del'>-                afr_lk_unlock (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                if (local-&gt;op_ret &lt; 0)</div><div class='del'>-                        local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='add'>+        afr_lk_unlock(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        if (local-&gt;op_ret &lt; 0)</div><div class='add'>+            local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='ctx'> </div><div class='del'>-                AFR_STACK_UNWIND (lk, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;cont.lk.ret_flock, local-&gt;xdata_rsp);</div><div class='del'>-        }</div><div class='add'>+        AFR_STACK_UNWIND(lk, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;cont.lk.ret_flock, local-&gt;xdata_rsp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int32_t op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_LK;</div><div class='del'>-        if (!afr_lk_is_unlock (cmd, flock) &amp;&amp;</div><div class='del'>-            !afr_is_consistent_io_possible (local, priv, &amp;op_errno))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.lk.locked_nodes = GF_CALLOC (priv-&gt;child_count,</div><div class='del'>-                                                 sizeof (*local-&gt;cont.lk.locked_nodes),</div><div class='del'>-                                                 gf_afr_mt_char);</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;cont.lk.locked_nodes) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;fd            = fd_ref (fd);</div><div class='del'>-        local-&gt;cont.lk.cmd   = cmd;</div><div class='del'>-        local-&gt;cont.lk.user_flock = *flock;</div><div class='del'>-        local-&gt;cont.lk.ret_flock = *flock;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_lk_cbk, (void *) (long) 0,</div><div class='del'>-                           priv-&gt;children[i],</div><div class='del'>-                           priv-&gt;children[i]-&gt;fops-&gt;lk,</div><div class='del'>-                           fd, cmd, flock, local-&gt;xdata_req);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+afr_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+       struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_LK;</div><div class='add'>+    if (!afr_lk_is_unlock(cmd, flock) &amp;&amp;</div><div class='add'>+        !afr_is_consistent_io_possible(local, priv, &amp;op_errno))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.lk.locked_nodes = GF_CALLOC(</div><div class='add'>+        priv-&gt;child_count, sizeof(*local-&gt;cont.lk.locked_nodes),</div><div class='add'>+        gf_afr_mt_char);</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;cont.lk.locked_nodes) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;cont.lk.cmd = cmd;</div><div class='add'>+    local-&gt;cont.lk.user_flock = *flock;</div><div class='add'>+    local-&gt;cont.lk.ret_flock = *flock;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_lk_cbk, (void *)(long)0, priv-&gt;children[i],</div><div class='add'>+                      priv-&gt;children[i]-&gt;fops-&gt;lk, fd, cmd, flock,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (lk, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(lk, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_lease_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct gf_lease *lease,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+afr_lease_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct gf_lease *lease,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t  *local      = NULL;</div><div class='del'>-        int           call_count = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                AFR_STACK_UNWIND (lease, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  lease, xdata);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_UNWIND(lease, frame, local-&gt;op_ret, local-&gt;op_errno, lease,</div><div class='add'>+                         xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_lease_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_lease_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local      = NULL;</div><div class='del'>-        afr_private_t *priv       = NULL;</div><div class='del'>-        int            i          = 0;</div><div class='del'>-        int            call_count = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        call_count = afr_locked_nodes_count (local-&gt;cont.lease.locked_nodes,</div><div class='del'>-                                             priv-&gt;child_count);</div><div class='add'>+    call_count = afr_locked_nodes_count(local-&gt;cont.lease.locked_nodes,</div><div class='add'>+                                        priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                AFR_STACK_UNWIND (lease, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;cont.lease.ret_lease, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        AFR_STACK_UNWIND(lease, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;cont.lease.ret_lease, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count = call_count;</div><div class='add'>+    local-&gt;call_count = call_count;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.lease.user_lease.cmd = GF_UNLK_LEASE;</div><div class='add'>+    local-&gt;cont.lease.user_lease.cmd = GF_UNLK_LEASE;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;cont.lease.locked_nodes[i]) {</div><div class='del'>-                        STACK_WIND (frame, afr_lease_unlock_cbk,</div><div class='del'>-                                    priv-&gt;children[i],</div><div class='del'>-                                    priv-&gt;children[i]-&gt;fops-&gt;lease,</div><div class='del'>-                                    &amp;local-&gt;loc, &amp;local-&gt;cont.lease.user_lease, NULL);</div><div class='del'>-</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;cont.lease.locked_nodes[i]) {</div><div class='add'>+            STACK_WIND(frame, afr_lease_unlock_cbk, priv-&gt;children[i],</div><div class='add'>+                       priv-&gt;children[i]-&gt;fops-&gt;lease, &amp;local-&gt;loc,</div><div class='add'>+                       &amp;local-&gt;cont.lease.user_lease, NULL);</div><div class='add'>+</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_lease_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct gf_lease *lease,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+afr_lease_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local       = NULL;</div><div class='del'>-        afr_private_t *priv        = NULL;</div><div class='del'>-        int            child_index = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int child_index = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        child_index = (long) cookie;</div><div class='add'>+    child_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        afr_common_lock_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='del'>-        if (op_ret &lt; 0 &amp;&amp; op_errno == EAGAIN) {</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = EAGAIN;</div><div class='add'>+    afr_common_lock_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; op_errno == EAGAIN) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EAGAIN;</div><div class='ctx'> </div><div class='del'>-                afr_lease_unlock (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        afr_lease_unlock(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                local-&gt;op_ret        = 0;</div><div class='del'>-                local-&gt;op_errno      = 0;</div><div class='del'>-                local-&gt;cont.lease.locked_nodes[child_index] = 1;</div><div class='del'>-                local-&gt;cont.lease.ret_lease = *lease;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+        local-&gt;cont.lease.locked_nodes[child_index] = 1;</div><div class='add'>+        local-&gt;cont.lease.ret_lease = *lease;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    child_index++;</div><div class='add'>+    if (child_index &lt; priv-&gt;child_count) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_lease_cbk, (void *)(long)child_index,</div><div class='add'>+                          priv-&gt;children[child_index],</div><div class='add'>+                          priv-&gt;children[child_index]-&gt;fops-&gt;lease, &amp;local-&gt;loc,</div><div class='add'>+                          &amp;local-&gt;cont.lease.user_lease, xdata);</div><div class='add'>+    } else if (priv-&gt;quorum_count &amp;&amp;</div><div class='add'>+               !afr_has_quorum(local-&gt;cont.lk.locked_nodes, this)) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='ctx'> </div><div class='del'>-        child_index++;</div><div class='del'>-        if (child_index &lt; priv-&gt;child_count) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_lease_cbk, (void *) (long) child_index,</div><div class='del'>-                                   priv-&gt;children[child_index],</div><div class='del'>-                                   priv-&gt;children[child_index]-&gt;fops-&gt;lease,</div><div class='del'>-                                   &amp;local-&gt;loc, &amp;local-&gt;cont.lease.user_lease, xdata);</div><div class='del'>-        } else if  (priv-&gt;quorum_count &amp;&amp;</div><div class='del'>-                   !afr_has_quorum (local-&gt;cont.lk.locked_nodes, this)) {</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-</div><div class='del'>-                afr_lease_unlock (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                if (local-&gt;op_ret &lt; 0)</div><div class='del'>-                        local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-                AFR_STACK_UNWIND (lease, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;cont.lease.ret_lease, NULL);</div><div class='del'>-        }</div><div class='add'>+        afr_lease_unlock(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        if (local-&gt;op_ret &lt; 0)</div><div class='add'>+            local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='add'>+        AFR_STACK_UNWIND(lease, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;cont.lease.ret_lease, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lease (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+afr_lease(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+          struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv     = NULL;</div><div class='del'>-        afr_local_t   *local    = NULL;</div><div class='del'>-        int32_t        op_errno = ENOMEM;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_LEASE;</div><div class='del'>-        local-&gt;cont.lease.locked_nodes = GF_CALLOC (priv-&gt;child_count,</div><div class='del'>-                                                    sizeof (*local-&gt;cont.lease.locked_nodes),</div><div class='del'>-                                                    gf_afr_mt_char);</div><div class='add'>+    local-&gt;op = GF_FOP_LEASE;</div><div class='add'>+    local-&gt;cont.lease.locked_nodes = GF_CALLOC(</div><div class='add'>+        priv-&gt;child_count, sizeof(*local-&gt;cont.lease.locked_nodes),</div><div class='add'>+        gf_afr_mt_char);</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;cont.lease.locked_nodes) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;cont.lease.locked_nodes) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;cont.lease.user_lease = *lease;</div><div class='del'>-        local-&gt;cont.lease.ret_lease = *lease;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;cont.lease.user_lease = *lease;</div><div class='add'>+    local-&gt;cont.lease.ret_lease = *lease;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_lease_cbk, (void *) (long) 0,</div><div class='del'>-                           priv-&gt;children[0],</div><div class='del'>-                           priv-&gt;children[0]-&gt;fops-&gt;lease,</div><div class='del'>-                           loc, lease, xdata);</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_lease_cbk, (void *)(long)0, priv-&gt;children[0],</div><div class='add'>+                      priv-&gt;children[0]-&gt;fops-&gt;lease, loc, lease, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        AFR_STACK_UNWIND (lease, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(lease, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_ipc_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *local          = NULL;</div><div class='del'>-        int            child_index    = (long)cookie;</div><div class='del'>-        int            call_count     = 0;</div><div class='del'>-        gf_boolean_t   failed         = _gf_false;</div><div class='del'>-        gf_boolean_t   succeeded      = _gf_false;</div><div class='del'>-        int            i              = 0;</div><div class='del'>-        afr_private_t *priv           = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local-&gt;replies[child_index].valid = 1;</div><div class='del'>-        local-&gt;replies[child_index].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[child_index].op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;replies[child_index].xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count)</div><div class='del'>-                goto out;</div><div class='del'>-        /* If any of the subvolumes failed with other than ENOTCONN</div><div class='del'>-         * return error else return success unless all the subvolumes</div><div class='del'>-         * failed.</div><div class='del'>-         * TODO: In case of failure, we need to unregister the xattrs</div><div class='del'>-         * from the other subvolumes where it succeeded (once upcall</div><div class='del'>-         * fixes the Bz-1371622)*/</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-                if (local-&gt;replies[i].op_ret &lt; 0 &amp;&amp;</div><div class='del'>-                    local-&gt;replies[i].op_errno != ENOTCONN) {</div><div class='del'>-                        local-&gt;op_ret = local-&gt;replies[i].op_ret;</div><div class='del'>-                        local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='del'>-                        if (local-&gt;xdata_rsp)</div><div class='del'>-                                dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-                        local-&gt;xdata_rsp = NULL;</div><div class='del'>-                        if (local-&gt;replies[i].xdata) {</div><div class='del'>-                                local-&gt;xdata_rsp =</div><div class='del'>-                                        dict_ref (local-&gt;replies[i].xdata);</div><div class='del'>-                        }</div><div class='del'>-                        failed = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;replies[i].op_ret == 0) {</div><div class='del'>-                        succeeded = _gf_true;</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-                        local-&gt;op_errno = 0;</div><div class='del'>-                        if (!local-&gt;xdata_rsp &amp;&amp; local-&gt;replies[i].xdata) {</div><div class='del'>-                                local-&gt;xdata_rsp =</div><div class='del'>-                                        dict_ref (local-&gt;replies[i].xdata);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+afr_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    gf_boolean_t failed = _gf_false;</div><div class='add'>+    gf_boolean_t succeeded = _gf_false;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local-&gt;replies[child_index].valid = 1;</div><div class='add'>+    local-&gt;replies[child_index].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[child_index].op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;replies[child_index].xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count)</div><div class='add'>+        goto out;</div><div class='add'>+    /* If any of the subvolumes failed with other than ENOTCONN</div><div class='add'>+     * return error else return success unless all the subvolumes</div><div class='add'>+     * failed.</div><div class='add'>+     * TODO: In case of failure, we need to unregister the xattrs</div><div class='add'>+     * from the other subvolumes where it succeeded (once upcall</div><div class='add'>+     * fixes the Bz-1371622)*/</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret &lt; 0 &amp;&amp;</div><div class='add'>+            local-&gt;replies[i].op_errno != ENOTCONN) {</div><div class='add'>+            local-&gt;op_ret = local-&gt;replies[i].op_ret;</div><div class='add'>+            local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='add'>+            if (local-&gt;xdata_rsp)</div><div class='add'>+                dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+            local-&gt;xdata_rsp = NULL;</div><div class='add'>+            if (local-&gt;replies[i].xdata) {</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(local-&gt;replies[i].xdata);</div><div class='add'>+            }</div><div class='add'>+            failed = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        if (local-&gt;replies[i].op_ret == 0) {</div><div class='add'>+            succeeded = _gf_true;</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+            local-&gt;op_errno = 0;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; local-&gt;replies[i].xdata) {</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(local-&gt;replies[i].xdata);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!succeeded &amp;&amp; !failed) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOTCONN;</div><div class='del'>-        }</div><div class='add'>+    if (!succeeded &amp;&amp; !failed) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTCONN;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_UNWIND (ipc, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          local-&gt;xdata_rsp);</div><div class='add'>+    AFR_STACK_UNWIND(ipc, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xdata_rsp);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+afr_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t    *local    = NULL;</div><div class='del'>-        int32_t         op_errno = -1;</div><div class='del'>-        afr_private_t  *priv     = NULL;</div><div class='del'>-        int             i        = 0;</div><div class='del'>-        int             call_cnt = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = -1;</div><div class='ctx'> </div><div class='del'>-        if (op != GF_IPC_TARGET_UPCALL)</div><div class='del'>-                goto wind_default;</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    if (op != GF_IPC_TARGET_UPCALL)</div><div class='add'>+        goto wind_default;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        call_cnt = local-&gt;call_count;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (xdata) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (dict_set_int8 (xdata, priv-&gt;pending_key[i], 0) &lt; 0)</div><div class='del'>-                                goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    call_cnt = local-&gt;call_count;</div><div class='ctx'> </div><div class='add'>+    if (xdata) {</div><div class='ctx'>         for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;child_up[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_ipc_cbk,</div><div class='del'>-                                   (void *) (long) i,</div><div class='del'>-                                   priv-&gt;children[i],</div><div class='del'>-                                   priv-&gt;children[i]-&gt;fops-&gt;ipc,</div><div class='del'>-                                   op, xdata);</div><div class='del'>-                if (!--call_cnt)</div><div class='del'>-                        break;</div><div class='add'>+            if (dict_set_int8(xdata, priv-&gt;pending_key[i], 0) &lt; 0)</div><div class='add'>+                goto err;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;child_up[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_ipc_cbk, (void *)(long)i,</div><div class='add'>+                          priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;ipc, op,</div><div class='add'>+                          xdata);</div><div class='add'>+        if (!--call_cnt)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (op_errno == -1)</div><div class='del'>-                op_errno = errno;</div><div class='del'>-        AFR_STACK_UNWIND (ipc, frame, -1, op_errno, NULL);</div><div class='add'>+    if (op_errno == -1)</div><div class='add'>+        op_errno = errno;</div><div class='add'>+    AFR_STACK_UNWIND(ipc, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> wind_default:</div><div class='del'>-        STACK_WIND (frame, default_ipc_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_ipc_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+afr_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        ctx_int = 0;</div><div class='del'>-        afr_inode_ctx_t *ctx    = NULL;</div><div class='del'>-</div><div class='del'>-        afr_spb_choice_timeout_cancel (this, inode);</div><div class='del'>-        inode_ctx_del (inode, this, &amp;ctx_int);</div><div class='del'>-        if (!ctx_int)</div><div class='del'>-                return 0;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = (afr_inode_ctx_t *)ctx_int;</div><div class='del'>-        afr_inode_ctx_destroy (ctx);</div><div class='add'>+    afr_spb_choice_timeout_cancel(this, inode);</div><div class='add'>+    inode_ctx_del(inode, this, &amp;ctx_int);</div><div class='add'>+    if (!ctx_int)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    ctx = (afr_inode_ctx_t *)ctx_int;</div><div class='add'>+    afr_inode_ctx_destroy(ctx);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_priv_dump (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        char  key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        char  key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int   i = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (priv);</div><div class='del'>-        snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "%s.%s", this-&gt;type, this-&gt;name);</div><div class='del'>-        gf_proc_dump_add_section(key_prefix);</div><div class='del'>-        gf_proc_dump_write("child_count", "%u", priv-&gt;child_count);</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                sprintf (key, "child_up[%d]", i);</div><div class='del'>-                gf_proc_dump_write(key, "%d", priv-&gt;child_up[i]);</div><div class='del'>-                sprintf (key, "pending_key[%d]", i);</div><div class='del'>-                gf_proc_dump_write(key, "%s", priv-&gt;pending_key[i]);</div><div class='del'>-                sprintf (key, "pending_reads[%d]", i);</div><div class='del'>-                gf_proc_dump_write(key, "%"PRId64, GF_ATOMIC_GET(priv-&gt;pending_reads[i]));</div><div class='del'>-                sprintf (key, "child_latency[%d]", i);</div><div class='del'>-                gf_proc_dump_write(key, "%"PRId64, priv-&gt;child_latency[i]);</div><div class='del'>-        }</div><div class='del'>-        gf_proc_dump_write("data_self_heal", "%s", priv-&gt;data_self_heal);</div><div class='del'>-        gf_proc_dump_write("metadata_self_heal", "%d", priv-&gt;metadata_self_heal);</div><div class='del'>-        gf_proc_dump_write("entry_self_heal", "%d", priv-&gt;entry_self_heal);</div><div class='del'>-        gf_proc_dump_write("read_child", "%d", priv-&gt;read_child);</div><div class='del'>-        gf_proc_dump_write("wait_count", "%u", priv-&gt;wait_count);</div><div class='del'>-        gf_proc_dump_write("heal-wait-queue-length", "%d",</div><div class='del'>-                           priv-&gt;heal_wait_qlen);</div><div class='del'>-        gf_proc_dump_write("heal-waiters", "%d", priv-&gt;heal_waiters);</div><div class='del'>-        gf_proc_dump_write("background-self-heal-count", "%d",</div><div class='del'>-                           priv-&gt;background_self_heal_count);</div><div class='del'>-        gf_proc_dump_write("healers", "%d", priv-&gt;healers);</div><div class='del'>-        gf_proc_dump_write("read-hash-mode", "%d", priv-&gt;hash_mode);</div><div class='del'>-        if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='del'>-                gf_proc_dump_write ("quorum-type", "auto");</div><div class='del'>-        } else if (priv-&gt;quorum_count == 0) {</div><div class='del'>-                gf_proc_dump_write ("quorum-type", "none");</div><div class='del'>-        } else {</div><div class='del'>-                gf_proc_dump_write("quorum-type", "fixed");</div><div class='del'>-                gf_proc_dump_write("quorum-count", "%d", priv-&gt;quorum_count);</div><div class='del'>-        }</div><div class='del'>-        gf_proc_dump_write("up", "%u", afr_has_quorum (priv-&gt;child_up, this));</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+afr_priv_dump(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(priv);</div><div class='add'>+    snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "%s.%s", this-&gt;type, this-&gt;name);</div><div class='add'>+    gf_proc_dump_add_section(key_prefix);</div><div class='add'>+    gf_proc_dump_write("child_count", "%u", priv-&gt;child_count);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        sprintf(key, "child_up[%d]", i);</div><div class='add'>+        gf_proc_dump_write(key, "%d", priv-&gt;child_up[i]);</div><div class='add'>+        sprintf(key, "pending_key[%d]", i);</div><div class='add'>+        gf_proc_dump_write(key, "%s", priv-&gt;pending_key[i]);</div><div class='add'>+        sprintf(key, "pending_reads[%d]", i);</div><div class='add'>+        gf_proc_dump_write(key, "%" PRId64,</div><div class='add'>+                           GF_ATOMIC_GET(priv-&gt;pending_reads[i]));</div><div class='add'>+        sprintf(key, "child_latency[%d]", i);</div><div class='add'>+        gf_proc_dump_write(key, "%" PRId64, priv-&gt;child_latency[i]);</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_write("data_self_heal", "%s", priv-&gt;data_self_heal);</div><div class='add'>+    gf_proc_dump_write("metadata_self_heal", "%d", priv-&gt;metadata_self_heal);</div><div class='add'>+    gf_proc_dump_write("entry_self_heal", "%d", priv-&gt;entry_self_heal);</div><div class='add'>+    gf_proc_dump_write("read_child", "%d", priv-&gt;read_child);</div><div class='add'>+    gf_proc_dump_write("wait_count", "%u", priv-&gt;wait_count);</div><div class='add'>+    gf_proc_dump_write("heal-wait-queue-length", "%d", priv-&gt;heal_wait_qlen);</div><div class='add'>+    gf_proc_dump_write("heal-waiters", "%d", priv-&gt;heal_waiters);</div><div class='add'>+    gf_proc_dump_write("background-self-heal-count", "%d",</div><div class='add'>+                       priv-&gt;background_self_heal_count);</div><div class='add'>+    gf_proc_dump_write("healers", "%d", priv-&gt;healers);</div><div class='add'>+    gf_proc_dump_write("read-hash-mode", "%d", priv-&gt;hash_mode);</div><div class='add'>+    if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='add'>+        gf_proc_dump_write("quorum-type", "auto");</div><div class='add'>+    } else if (priv-&gt;quorum_count == 0) {</div><div class='add'>+        gf_proc_dump_write("quorum-type", "none");</div><div class='add'>+    } else {</div><div class='add'>+        gf_proc_dump_write("quorum-type", "fixed");</div><div class='add'>+        gf_proc_dump_write("quorum-count", "%d", priv-&gt;quorum_count);</div><div class='add'>+    }</div><div class='add'>+    gf_proc_dump_write("up", "%u", afr_has_quorum(priv-&gt;child_up, this));</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * find_child_index - find the child's index in the array of subvolumes</div><div class='ctx'>  * @this: AFR</div><div class='hunk'>@@ -5025,1974 +4904,1924 @@ afr_priv_dump (xlator_t *this)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-find_child_index (xlator_t *this, xlator_t *child)</div><div class='add'>+find_child_index(xlator_t *this, xlator_t *child)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int i = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = -1;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if ((xlator_t *) child == priv-&gt;children[i])</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if ((xlator_t *)child == priv-&gt;children[i])</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_get_up_children_count (afr_private_t *priv)</div><div class='add'>+__afr_get_up_children_count(afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int             up_children         = 0;</div><div class='del'>-        int             i = 0;</div><div class='add'>+    int up_children = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (priv-&gt;child_up[i] == 1)</div><div class='del'>-                        up_children++;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (priv-&gt;child_up[i] == 1)</div><div class='add'>+            up_children++;</div><div class='ctx'> </div><div class='del'>-        return up_children;</div><div class='add'>+    return up_children;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> glusterfs_event_t</div><div class='del'>-__afr_transform_event_from_state (afr_private_t *priv)</div><div class='add'>+__afr_transform_event_from_state(afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int up_children = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int up_children = 0;</div><div class='ctx'> </div><div class='del'>-        if (AFR_COUNT (priv-&gt;last_event, priv-&gt;child_count) ==</div><div class='del'>-                       priv-&gt;child_count)</div><div class='del'>-                /* have_heard_from_all. Let afr_notify() do the propagation. */</div><div class='del'>-                return GF_EVENT_MAXVAL;</div><div class='add'>+    if (AFR_COUNT(priv-&gt;last_event, priv-&gt;child_count) == priv-&gt;child_count)</div><div class='add'>+        /* have_heard_from_all. Let afr_notify() do the propagation. */</div><div class='add'>+        return GF_EVENT_MAXVAL;</div><div class='ctx'> </div><div class='del'>-        up_children = __afr_get_up_children_count (priv);</div><div class='del'>-        /* Treat the children with pending notification, as having sent a</div><div class='del'>-         * GF_EVENT_CHILD_DOWN. i.e. set the event as GF_EVENT_SOME_DESCENDENT_DOWN,</div><div class='del'>-         * as done in afr_notify() */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (priv-&gt;last_event[i])</div><div class='del'>-                        continue;</div><div class='del'>-                priv-&gt;last_event[i] = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='del'>-                priv-&gt;child_up[i] = 0;</div><div class='del'>-        }</div><div class='add'>+    up_children = __afr_get_up_children_count(priv);</div><div class='add'>+    /* Treat the children with pending notification, as having sent a</div><div class='add'>+     * GF_EVENT_CHILD_DOWN. i.e. set the event as GF_EVENT_SOME_DESCENDENT_DOWN,</div><div class='add'>+     * as done in afr_notify() */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (priv-&gt;last_event[i])</div><div class='add'>+            continue;</div><div class='add'>+        priv-&gt;last_event[i] = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='add'>+        priv-&gt;child_up[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (up_children)</div><div class='del'>-                /* We received at least one child up */</div><div class='del'>-                return GF_EVENT_CHILD_UP;</div><div class='del'>-        else</div><div class='del'>-                return GF_EVENT_CHILD_DOWN;</div><div class='add'>+    if (up_children)</div><div class='add'>+        /* We received at least one child up */</div><div class='add'>+        return GF_EVENT_CHILD_UP;</div><div class='add'>+    else</div><div class='add'>+        return GF_EVENT_CHILD_DOWN;</div><div class='ctx'> </div><div class='del'>-        return GF_EVENT_MAXVAL;</div><div class='add'>+    return GF_EVENT_MAXVAL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_notify_cbk (void *data)</div><div class='del'>-{</div><div class='del'>-        xlator_t *this = data;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        glusterfs_event_t event = GF_EVENT_MAXVAL;</div><div class='del'>-        gf_boolean_t propagate = _gf_false;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (!priv-&gt;timer) {</div><div class='del'>-                        /*</div><div class='del'>-                         * Either child_up/child_down is already sent to parent.</div><div class='del'>-                         * This is a spurious wake up.</div><div class='del'>-                         */</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;timer = NULL;</div><div class='del'>-                event = __afr_transform_event_from_state (priv);</div><div class='del'>-                if (event != GF_EVENT_MAXVAL)</div><div class='del'>-                        propagate = _gf_true;</div><div class='del'>-        }</div><div class='add'>+afr_notify_cbk(void *data)</div><div class='add'>+{</div><div class='add'>+    xlator_t *this = data;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    glusterfs_event_t event = GF_EVENT_MAXVAL;</div><div class='add'>+    gf_boolean_t propagate = _gf_false;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!priv-&gt;timer) {</div><div class='add'>+            /*</div><div class='add'>+             * Either child_up/child_down is already sent to parent.</div><div class='add'>+             * This is a spurious wake up.</div><div class='add'>+             */</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        priv-&gt;timer = NULL;</div><div class='add'>+        event = __afr_transform_event_from_state(priv);</div><div class='add'>+        if (event != GF_EVENT_MAXVAL)</div><div class='add'>+            propagate = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        if (propagate)</div><div class='del'>-                default_notify (this, event, NULL);</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+    if (propagate)</div><div class='add'>+        default_notify(this, event, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__afr_launch_notify_timer (xlator_t *this, afr_private_t *priv)</div><div class='add'>+__afr_launch_notify_timer(xlator_t *this, afr_private_t *priv)</div><div class='ctx'> {</div><div class='add'>+    struct timespec delay = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        struct timespec delay = {0, };</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Initiating child-down timer");</div><div class='del'>-        delay.tv_sec = 10;</div><div class='del'>-        delay.tv_nsec = 0;</div><div class='del'>-        priv-&gt;timer = gf_timer_call_after (this-&gt;ctx, delay,</div><div class='del'>-                                           afr_notify_cbk, this);</div><div class='del'>-        if (priv-&gt;timer == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_TIMER_CREATE_FAIL,</div><div class='del'>-                        "Cannot create timer for delayed initialization");</div><div class='del'>-        }</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Initiating child-down timer");</div><div class='add'>+    delay.tv_sec = 10;</div><div class='add'>+    delay.tv_nsec = 0;</div><div class='add'>+    priv-&gt;timer = gf_timer_call_after(this-&gt;ctx, delay, afr_notify_cbk, this);</div><div class='add'>+    if (priv-&gt;timer == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_TIMER_CREATE_FAIL,</div><div class='add'>+               "Cannot create timer for delayed initialization");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__get_heard_from_all_status (xlator_t *this)</div><div class='add'>+__get_heard_from_all_status(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv          = this-&gt;private;</div><div class='del'>-        int           heard_from_all = 1;</div><div class='del'>-        int           i              = 0;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    int heard_from_all = 1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!priv-&gt;last_event[i]) {</div><div class='del'>-                        heard_from_all = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!priv-&gt;last_event[i]) {</div><div class='add'>+            heard_from_all = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        return heard_from_all;</div><div class='add'>+    }</div><div class='add'>+    return heard_from_all;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-find_best_down_child (xlator_t *this)</div><div class='add'>+find_best_down_child(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv               = NULL;</div><div class='del'>-        int             i                   = -1;</div><div class='del'>-        int32_t         best_child          = -1;</div><div class='del'>-        int64_t         best_latency        = INT64_MAX;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int32_t best_child = -1;</div><div class='add'>+    int64_t best_latency = INT64_MAX;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (priv-&gt;child_up[i] &amp;&amp;</div><div class='del'>-                    priv-&gt;child_latency[i] &gt;= 0 &amp;&amp;</div><div class='del'>-                    priv-&gt;child_latency[i] &lt; best_latency) {</div><div class='del'>-                        best_child = i;</div><div class='del'>-                        best_latency = priv-&gt;child_latency[i];</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (best_child &gt;= 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Found best down child (%d) "</div><div class='del'>-                              "@ %ld ms latency", best_child, best_latency);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (priv-&gt;child_up[i] &amp;&amp; priv-&gt;child_latency[i] &gt;= 0 &amp;&amp;</div><div class='add'>+            priv-&gt;child_latency[i] &lt; best_latency) {</div><div class='add'>+            best_child = i;</div><div class='add'>+            best_latency = priv-&gt;child_latency[i];</div><div class='ctx'>         }</div><div class='del'>-        return best_child;</div><div class='add'>+    }</div><div class='add'>+    if (best_child &gt;= 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Found best down child (%d) "</div><div class='add'>+                     "@ %ld ms latency",</div><div class='add'>+                     best_child, best_latency);</div><div class='add'>+    }</div><div class='add'>+    return best_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-find_worst_up_child (xlator_t *this)</div><div class='add'>+find_worst_up_child(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv               = NULL;</div><div class='del'>-        int             i                   = -1;</div><div class='del'>-        int32_t         worst_child         = -1;</div><div class='del'>-        int64_t         worst_latency       = INT64_MIN;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int32_t worst_child = -1;</div><div class='add'>+    int64_t worst_latency = INT64_MIN;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (priv-&gt;child_up[i] &amp;&amp;</div><div class='del'>-                    priv-&gt;child_latency[i] &gt;= 0 &amp;&amp;</div><div class='del'>-                    priv-&gt;child_latency[i] &gt; worst_latency) {</div><div class='del'>-                        worst_child = i;</div><div class='del'>-                        worst_latency = priv-&gt;child_latency[i];</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (worst_child &gt;= 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Found worst up child (%d)"</div><div class='del'>-                              " @ %ld ms latency", worst_child, worst_latency);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (priv-&gt;child_up[i] &amp;&amp; priv-&gt;child_latency[i] &gt;= 0 &amp;&amp;</div><div class='add'>+            priv-&gt;child_latency[i] &gt; worst_latency) {</div><div class='add'>+            worst_child = i;</div><div class='add'>+            worst_latency = priv-&gt;child_latency[i];</div><div class='ctx'>         }</div><div class='del'>-        return worst_child;</div><div class='add'>+    }</div><div class='add'>+    if (worst_child &gt;= 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Found worst up child (%d)"</div><div class='add'>+                     " @ %ld ms latency",</div><div class='add'>+                     worst_child, worst_latency);</div><div class='add'>+    }</div><div class='add'>+    return worst_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__afr_handle_ping_event (xlator_t *this, xlator_t *child_xlator,</div><div class='del'>-                const int idx, int64_t halo_max_latency_msec, int32_t *event,</div><div class='del'>-                int64_t child_latency_msec)</div><div class='add'>+__afr_handle_ping_event(xlator_t *this, xlator_t *child_xlator, const int idx,</div><div class='add'>+                        int64_t halo_max_latency_msec, int32_t *event,</div><div class='add'>+                        int64_t child_latency_msec)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv               = NULL;</div><div class='del'>-        int             up_children         = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int up_children = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;child_latency[idx] = child_latency_msec;</div><div class='del'>-        gf_msg_debug (child_xlator-&gt;name, 0, "Client ping @ %ld ms",</div><div class='del'>-                      child_latency_msec);</div><div class='del'>-        if (priv-&gt;shd.iamshd)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        up_children = __afr_get_up_children_count (priv);</div><div class='del'>-</div><div class='del'>-        if (child_latency_msec &gt; halo_max_latency_msec &amp;&amp;</div><div class='del'>-            priv-&gt;child_up[idx] == 1 &amp;&amp;</div><div class='del'>-            up_children &gt; priv-&gt;halo_min_replicas) {</div><div class='del'>-                if ((up_children - 1) &lt;</div><div class='del'>-                    priv-&gt;halo_min_replicas) {</div><div class='del'>-                        gf_log (child_xlator-&gt;name, GF_LOG_INFO,</div><div class='del'>-                               "Overriding halo threshold, "</div><div class='del'>-                               "min replicas: %d",</div><div class='del'>-                               priv-&gt;halo_min_replicas);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (child_xlator-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                "Child latency (%ld ms) "</div><div class='del'>-                                "exceeds halo threshold (%ld), "</div><div class='del'>-                                "marking child down.",</div><div class='del'>-                                child_latency_msec,</div><div class='del'>-                                halo_max_latency_msec);</div><div class='del'>-                        *event = GF_EVENT_CHILD_DOWN;</div><div class='del'>-                }</div><div class='del'>-        } else if (child_latency_msec &lt; halo_max_latency_msec &amp;&amp;</div><div class='del'>-                   priv-&gt;child_up[idx] == 0) {</div><div class='del'>-                if (up_children &lt; priv-&gt;halo_max_replicas) {</div><div class='del'>-                        gf_log (child_xlator-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                "Child latency (%ld ms) "</div><div class='del'>-                                "below halo threshold (%ld), "</div><div class='del'>-                                "marking child up.",</div><div class='del'>-                                child_latency_msec,</div><div class='del'>-                                halo_max_latency_msec);</div><div class='del'>-                        *event = GF_EVENT_CHILD_UP;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (child_xlator-&gt;name, GF_LOG_INFO,</div><div class='del'>-                            "Not marking child %d up, "</div><div class='del'>-                            "max replicas (%d) reached.", idx,</div><div class='del'>-                            priv-&gt;halo_max_replicas);</div><div class='del'>-                }</div><div class='add'>+    priv-&gt;child_latency[idx] = child_latency_msec;</div><div class='add'>+    gf_msg_debug(child_xlator-&gt;name, 0, "Client ping @ %ld ms",</div><div class='add'>+                 child_latency_msec);</div><div class='add'>+    if (priv-&gt;shd.iamshd)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    up_children = __afr_get_up_children_count(priv);</div><div class='add'>+</div><div class='add'>+    if (child_latency_msec &gt; halo_max_latency_msec &amp;&amp;</div><div class='add'>+        priv-&gt;child_up[idx] == 1 &amp;&amp; up_children &gt; priv-&gt;halo_min_replicas) {</div><div class='add'>+        if ((up_children - 1) &lt; priv-&gt;halo_min_replicas) {</div><div class='add'>+            gf_log(child_xlator-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   "Overriding halo threshold, "</div><div class='add'>+                   "min replicas: %d",</div><div class='add'>+                   priv-&gt;halo_min_replicas);</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(child_xlator-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   "Child latency (%ld ms) "</div><div class='add'>+                   "exceeds halo threshold (%ld), "</div><div class='add'>+                   "marking child down.",</div><div class='add'>+                   child_latency_msec, halo_max_latency_msec);</div><div class='add'>+            *event = GF_EVENT_CHILD_DOWN;</div><div class='add'>+        }</div><div class='add'>+    } else if (child_latency_msec &lt; halo_max_latency_msec &amp;&amp;</div><div class='add'>+               priv-&gt;child_up[idx] == 0) {</div><div class='add'>+        if (up_children &lt; priv-&gt;halo_max_replicas) {</div><div class='add'>+            gf_log(child_xlator-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   "Child latency (%ld ms) "</div><div class='add'>+                   "below halo threshold (%ld), "</div><div class='add'>+                   "marking child up.",</div><div class='add'>+                   child_latency_msec, halo_max_latency_msec);</div><div class='add'>+            *event = GF_EVENT_CHILD_UP;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(child_xlator-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   "Not marking child %d up, "</div><div class='add'>+                   "max replicas (%d) reached.",</div><div class='add'>+                   idx, priv-&gt;halo_max_replicas);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int64_t</div><div class='del'>-afr_get_halo_latency (xlator_t *this)</div><div class='add'>+afr_get_halo_latency(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv           = NULL;</div><div class='del'>-        int64_t halo_max_latency_msec = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int64_t halo_max_latency_msec = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;shd.iamshd) {</div><div class='del'>-                halo_max_latency_msec = priv-&gt;shd.halo_max_latency_msec;</div><div class='del'>-        } else if (priv-&gt;nfsd.iamnfsd) {</div><div class='del'>-                halo_max_latency_msec =</div><div class='del'>-                        priv-&gt;nfsd.halo_max_latency_msec;</div><div class='del'>-        } else {</div><div class='del'>-                halo_max_latency_msec = priv-&gt;halo_max_latency_msec;</div><div class='del'>-        }</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Using halo latency %ld",</div><div class='del'>-                halo_max_latency_msec);</div><div class='del'>-        return halo_max_latency_msec;</div><div class='add'>+    if (priv-&gt;shd.iamshd) {</div><div class='add'>+        halo_max_latency_msec = priv-&gt;shd.halo_max_latency_msec;</div><div class='add'>+    } else if (priv-&gt;nfsd.iamnfsd) {</div><div class='add'>+        halo_max_latency_msec = priv-&gt;nfsd.halo_max_latency_msec;</div><div class='add'>+    } else {</div><div class='add'>+        halo_max_latency_msec = priv-&gt;halo_max_latency_msec;</div><div class='add'>+    }</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Using halo latency %ld",</div><div class='add'>+                 halo_max_latency_msec);</div><div class='add'>+    return halo_max_latency_msec;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__afr_handle_child_up_event (xlator_t *this, xlator_t *child_xlator,</div><div class='del'>-                const int idx, int64_t child_latency_msec,</div><div class='del'>-                int32_t *event, int32_t *call_psh, int32_t *up_child)</div><div class='del'>-{</div><div class='del'>-        afr_private_t   *priv               = NULL;</div><div class='del'>-        int             up_children         = 0;</div><div class='del'>-        int             worst_up_child      = -1;</div><div class='del'>-        int64_t         halo_max_latency_msec = afr_get_halo_latency (this);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * This only really counts if the child was never up</div><div class='del'>-         * (value = -1) or had been down (value = 0).  See</div><div class='del'>-         * comment at GF_EVENT_CHILD_DOWN for a more detailed</div><div class='del'>-         * explanation.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;child_up[idx] != 1) {</div><div class='del'>-                priv-&gt;event_generation++;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;child_up[idx] = 1;</div><div class='del'>-</div><div class='del'>-        *call_psh = 1;</div><div class='del'>-        *up_child = idx;</div><div class='del'>-        up_children = __afr_get_up_children_count (priv);</div><div class='del'>-        /*</div><div class='del'>-         * If this is an _actual_ CHILD_UP event, we</div><div class='del'>-         * want to set the child_latency to MAX to indicate</div><div class='del'>-         * the child needs ping data to be available before doing child-up</div><div class='del'>-         */</div><div class='del'>-        if (child_latency_msec &lt; 0 &amp;&amp; priv-&gt;halo_enabled) {</div><div class='del'>-                /*set to INT64_MAX-1 so that it is found for best_down_child*/</div><div class='del'>-                priv-&gt;child_latency[idx] = AFR_HALO_MAX_LATENCY;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Handle the edge case where we exceed</div><div class='del'>-         * halo_min_replicas and we've got a child which is</div><div class='del'>-         * marked up as it was helping to satisfy the</div><div class='del'>-         * halo_min_replicas even though it's latency exceeds</div><div class='del'>-         * halo_max_latency_msec.</div><div class='del'>-         */</div><div class='del'>-        if (up_children &gt; priv-&gt;halo_min_replicas) {</div><div class='del'>-                worst_up_child = find_worst_up_child (this);</div><div class='del'>-                if (worst_up_child &gt;= 0 &amp;&amp;</div><div class='del'>-                    priv-&gt;child_latency[worst_up_child] &gt;</div><div class='del'>-                    halo_max_latency_msec) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Marking child %d down, "</div><div class='del'>-                                "doesn't meet halo threshold (%ld), and &gt; "</div><div class='del'>-                                "halo_min_replicas (%d)",</div><div class='del'>-                                worst_up_child, halo_max_latency_msec,</div><div class='del'>-                                priv-&gt;halo_min_replicas);</div><div class='del'>-                        priv-&gt;child_up[worst_up_child] = 0;</div><div class='del'>-                        up_children--;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (up_children &gt; priv-&gt;halo_max_replicas &amp;&amp;</div><div class='del'>-            !priv-&gt;shd.iamshd) {</div><div class='del'>-                worst_up_child = find_worst_up_child (this);</div><div class='del'>-                if (worst_up_child &lt; 0) {</div><div class='del'>-                        worst_up_child = idx;</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;child_up[worst_up_child] = 0;</div><div class='del'>-                up_children--;</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Marking child %d down, "</div><div class='del'>-                        "up_children (%d) &gt; halo_max_replicas (%d)",</div><div class='del'>-                        worst_up_child, up_children, priv-&gt;halo_max_replicas);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (up_children == 1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SUBVOL_UP,</div><div class='del'>-                        "Subvolume '%s' came back up; "</div><div class='del'>-                        "going online.",</div><div class='del'>-                        child_xlator-&gt;name);</div><div class='del'>-                gf_event (EVENT_AFR_SUBVOL_UP, "subvol=%s", this-&gt;name);</div><div class='del'>-        } else {</div><div class='del'>-                *event = GF_EVENT_SOME_DESCENDENT_UP;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;last_event[idx] = *event;</div><div class='add'>+__afr_handle_child_up_event(xlator_t *this, xlator_t *child_xlator,</div><div class='add'>+                            const int idx, int64_t child_latency_msec,</div><div class='add'>+                            int32_t *event, int32_t *call_psh,</div><div class='add'>+                            int32_t *up_child)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int up_children = 0;</div><div class='add'>+    int worst_up_child = -1;</div><div class='add'>+    int64_t halo_max_latency_msec = afr_get_halo_latency(this);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * This only really counts if the child was never up</div><div class='add'>+     * (value = -1) or had been down (value = 0).  See</div><div class='add'>+     * comment at GF_EVENT_CHILD_DOWN for a more detailed</div><div class='add'>+     * explanation.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;child_up[idx] != 1) {</div><div class='add'>+        priv-&gt;event_generation++;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;child_up[idx] = 1;</div><div class='add'>+</div><div class='add'>+    *call_psh = 1;</div><div class='add'>+    *up_child = idx;</div><div class='add'>+    up_children = __afr_get_up_children_count(priv);</div><div class='add'>+    /*</div><div class='add'>+     * If this is an _actual_ CHILD_UP event, we</div><div class='add'>+     * want to set the child_latency to MAX to indicate</div><div class='add'>+     * the child needs ping data to be available before doing child-up</div><div class='add'>+     */</div><div class='add'>+    if (child_latency_msec &lt; 0 &amp;&amp; priv-&gt;halo_enabled) {</div><div class='add'>+        /*set to INT64_MAX-1 so that it is found for best_down_child*/</div><div class='add'>+        priv-&gt;child_latency[idx] = AFR_HALO_MAX_LATENCY;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Handle the edge case where we exceed</div><div class='add'>+     * halo_min_replicas and we've got a child which is</div><div class='add'>+     * marked up as it was helping to satisfy the</div><div class='add'>+     * halo_min_replicas even though it's latency exceeds</div><div class='add'>+     * halo_max_latency_msec.</div><div class='add'>+     */</div><div class='add'>+    if (up_children &gt; priv-&gt;halo_min_replicas) {</div><div class='add'>+        worst_up_child = find_worst_up_child(this);</div><div class='add'>+        if (worst_up_child &gt;= 0 &amp;&amp;</div><div class='add'>+            priv-&gt;child_latency[worst_up_child] &gt; halo_max_latency_msec) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Marking child %d down, "</div><div class='add'>+                         "doesn't meet halo threshold (%ld), and &gt; "</div><div class='add'>+                         "halo_min_replicas (%d)",</div><div class='add'>+                         worst_up_child, halo_max_latency_msec,</div><div class='add'>+                         priv-&gt;halo_min_replicas);</div><div class='add'>+            priv-&gt;child_up[worst_up_child] = 0;</div><div class='add'>+            up_children--;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (up_children &gt; priv-&gt;halo_max_replicas &amp;&amp; !priv-&gt;shd.iamshd) {</div><div class='add'>+        worst_up_child = find_worst_up_child(this);</div><div class='add'>+        if (worst_up_child &lt; 0) {</div><div class='add'>+            worst_up_child = idx;</div><div class='add'>+        }</div><div class='add'>+        priv-&gt;child_up[worst_up_child] = 0;</div><div class='add'>+        up_children--;</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Marking child %d down, "</div><div class='add'>+                     "up_children (%d) &gt; halo_max_replicas (%d)",</div><div class='add'>+                     worst_up_child, up_children, priv-&gt;halo_max_replicas);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (up_children == 1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SUBVOL_UP,</div><div class='add'>+               "Subvolume '%s' came back up; "</div><div class='add'>+               "going online.",</div><div class='add'>+               child_xlator-&gt;name);</div><div class='add'>+        gf_event(EVENT_AFR_SUBVOL_UP, "subvol=%s", this-&gt;name);</div><div class='add'>+    } else {</div><div class='add'>+        *event = GF_EVENT_SOME_DESCENDENT_UP;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;last_event[idx] = *event;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__afr_handle_child_down_event (xlator_t *this, xlator_t *child_xlator,</div><div class='del'>-                int idx, int64_t child_latency_msec, int32_t *event,</div><div class='del'>-                int32_t *call_psh, int32_t *up_child)</div><div class='del'>-{</div><div class='del'>-        afr_private_t   *priv               = NULL;</div><div class='del'>-        int             i                   = 0;</div><div class='del'>-        int             up_children         = 0;</div><div class='del'>-        int             down_children       = 0;</div><div class='del'>-        int             best_down_child     = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * If a brick is down when we start, we'll get a</div><div class='del'>-         * CHILD_DOWN to indicate its initial state.  There</div><div class='del'>-         * was never a CHILD_UP in this case, so if we</div><div class='del'>-         * increment "down_count" the difference between than</div><div class='del'>-         * and "up_count" will no longer be the number of</div><div class='del'>-         * children that are currently up.  This has serious</div><div class='del'>-         * implications e.g. for quorum enforcement, so we</div><div class='del'>-         * don't increment these values unless the event</div><div class='del'>-         * represents an actual state transition between "up"</div><div class='del'>-         * (value = 1) and anything else.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;child_up[idx] == 1) {</div><div class='del'>-                priv-&gt;event_generation++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * If this is an _actual_ CHILD_DOWN event, we</div><div class='del'>-         * want to set the child_latency to &lt; 0 to indicate</div><div class='del'>-         * the child is really disconnected.</div><div class='del'>-         */</div><div class='del'>-        if (child_latency_msec &lt; 0) {</div><div class='del'>-                priv-&gt;child_latency[idx] = child_latency_msec;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;child_up[idx] = 0;</div><div class='del'>-</div><div class='del'>-        up_children = __afr_get_up_children_count (priv);</div><div class='del'>-        /*</div><div class='del'>-         * Handle the edge case where we need to find the</div><div class='del'>-         * next best child (to mark up) as marking this child</div><div class='del'>-         * down would cause us to fall below halo_min_replicas.</div><div class='del'>-         * We will also force the SHD to heal this child _now_</div><div class='del'>-         * as we want it to be up to date if we are going to</div><div class='del'>-         * begin using it synchronously.</div><div class='del'>-         */</div><div class='del'>-        if (up_children &lt; priv-&gt;halo_min_replicas) {</div><div class='del'>-                best_down_child = find_best_down_child (this);</div><div class='del'>-                if (best_down_child &gt;= 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                "Swapping out child %d for "</div><div class='del'>-                                "child %d to satisfy halo_min_replicas (%d).",</div><div class='del'>-                                idx, best_down_child, priv-&gt;halo_min_replicas);</div><div class='del'>-                        priv-&gt;child_up[best_down_child] = 1;</div><div class='del'>-                        *call_psh = 1;</div><div class='del'>-                        *up_child = best_down_child;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (priv-&gt;child_up[i] == 0)</div><div class='del'>-                        down_children++;</div><div class='del'>-        if (down_children == priv-&gt;child_count) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SUBVOLS_DOWN,</div><div class='del'>-                        "All subvolumes are down. Going "</div><div class='del'>-                        "offline until at least one of them "</div><div class='del'>-                        "comes back up.");</div><div class='del'>-                gf_event (EVENT_AFR_SUBVOLS_DOWN, "subvol=%s", this-&gt;name);</div><div class='del'>-        } else {</div><div class='del'>-                *event = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;last_event[idx] = *event;</div><div class='add'>+__afr_handle_child_down_event(xlator_t *this, xlator_t *child_xlator, int idx,</div><div class='add'>+                              int64_t child_latency_msec, int32_t *event,</div><div class='add'>+                              int32_t *call_psh, int32_t *up_child)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int up_children = 0;</div><div class='add'>+    int down_children = 0;</div><div class='add'>+    int best_down_child = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If a brick is down when we start, we'll get a</div><div class='add'>+     * CHILD_DOWN to indicate its initial state.  There</div><div class='add'>+     * was never a CHILD_UP in this case, so if we</div><div class='add'>+     * increment "down_count" the difference between than</div><div class='add'>+     * and "up_count" will no longer be the number of</div><div class='add'>+     * children that are currently up.  This has serious</div><div class='add'>+     * implications e.g. for quorum enforcement, so we</div><div class='add'>+     * don't increment these values unless the event</div><div class='add'>+     * represents an actual state transition between "up"</div><div class='add'>+     * (value = 1) and anything else.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;child_up[idx] == 1) {</div><div class='add'>+        priv-&gt;event_generation++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If this is an _actual_ CHILD_DOWN event, we</div><div class='add'>+     * want to set the child_latency to &lt; 0 to indicate</div><div class='add'>+     * the child is really disconnected.</div><div class='add'>+     */</div><div class='add'>+    if (child_latency_msec &lt; 0) {</div><div class='add'>+        priv-&gt;child_latency[idx] = child_latency_msec;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;child_up[idx] = 0;</div><div class='add'>+</div><div class='add'>+    up_children = __afr_get_up_children_count(priv);</div><div class='add'>+    /*</div><div class='add'>+     * Handle the edge case where we need to find the</div><div class='add'>+     * next best child (to mark up) as marking this child</div><div class='add'>+     * down would cause us to fall below halo_min_replicas.</div><div class='add'>+     * We will also force the SHD to heal this child _now_</div><div class='add'>+     * as we want it to be up to date if we are going to</div><div class='add'>+     * begin using it synchronously.</div><div class='add'>+     */</div><div class='add'>+    if (up_children &lt; priv-&gt;halo_min_replicas) {</div><div class='add'>+        best_down_child = find_best_down_child(this);</div><div class='add'>+        if (best_down_child &gt;= 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Swapping out child %d for "</div><div class='add'>+                         "child %d to satisfy halo_min_replicas (%d).",</div><div class='add'>+                         idx, best_down_child, priv-&gt;halo_min_replicas);</div><div class='add'>+            priv-&gt;child_up[best_down_child] = 1;</div><div class='add'>+            *call_psh = 1;</div><div class='add'>+            *up_child = best_down_child;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (priv-&gt;child_up[i] == 0)</div><div class='add'>+            down_children++;</div><div class='add'>+    if (down_children == priv-&gt;child_count) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SUBVOLS_DOWN,</div><div class='add'>+               "All subvolumes are down. Going "</div><div class='add'>+               "offline until at least one of them "</div><div class='add'>+               "comes back up.");</div><div class='add'>+        gf_event(EVENT_AFR_SUBVOLS_DOWN, "subvol=%s", this-&gt;name);</div><div class='add'>+    } else {</div><div class='add'>+        *event = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;last_event[idx] = *event;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_notify (xlator_t *this, int32_t event,</div><div class='del'>-            void *data, void *data2)</div><div class='del'>-{</div><div class='del'>-        afr_private_t   *priv               = NULL;</div><div class='del'>-        xlator_t        *child_xlator       = NULL;</div><div class='del'>-        int             i                   = -1;</div><div class='del'>-        int             propagate           = 0;</div><div class='del'>-        int             had_heard_from_all  = 0;</div><div class='del'>-        int             have_heard_from_all = 0;</div><div class='del'>-        int             idx                 = -1;</div><div class='del'>-        int             ret                 = -1;</div><div class='del'>-        int             call_psh            = 0;</div><div class='del'>-        int             up_child            = -1;</div><div class='del'>-        dict_t          *input              = NULL;</div><div class='del'>-        dict_t          *output             = NULL;</div><div class='del'>-        gf_boolean_t    had_quorum          = _gf_false;</div><div class='del'>-        gf_boolean_t    has_quorum          = _gf_false;</div><div class='del'>-        struct gf_upcall *up_data           = NULL;</div><div class='del'>-        struct gf_upcall_cache_invalidation *up_ci = NULL;</div><div class='del'>-        inode_table_t  *itable              = NULL;</div><div class='del'>-        inode_t        *inode               = NULL;</div><div class='del'>-        int64_t         halo_max_latency_msec = 0;</div><div class='del'>-        int64_t         child_latency_msec   = -1;</div><div class='del'>-</div><div class='del'>-        child_xlator = (xlator_t *)data;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!priv)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * We need to reset this in case children come up in "staggered"</div><div class='del'>-         * fashion, so that we discover a late-arriving local subvolume.  Note</div><div class='del'>-         * that we could end up issuing N lookups to the first subvolume, and</div><div class='del'>-         * O(N^2) overall, but N is small for AFR so it shouldn't be an issue.</div><div class='del'>-         */</div><div class='del'>-        priv-&gt;did_discovery = _gf_false;</div><div class='del'>-</div><div class='add'>+afr_notify(xlator_t *this, int32_t event, void *data, void *data2)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t *child_xlator = NULL;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int propagate = 0;</div><div class='add'>+    int had_heard_from_all = 0;</div><div class='add'>+    int have_heard_from_all = 0;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int call_psh = 0;</div><div class='add'>+    int up_child = -1;</div><div class='add'>+    dict_t *input = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    gf_boolean_t had_quorum = _gf_false;</div><div class='add'>+    gf_boolean_t has_quorum = _gf_false;</div><div class='add'>+    struct gf_upcall *up_data = NULL;</div><div class='add'>+    struct gf_upcall_cache_invalidation *up_ci = NULL;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int64_t halo_max_latency_msec = 0;</div><div class='add'>+    int64_t child_latency_msec = -1;</div><div class='add'>+</div><div class='add'>+    child_xlator = (xlator_t *)data;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!priv)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        /* parent xlators don't need to know about every child_up, child_down</div><div class='del'>-         * because of afr ha. If all subvolumes go down, child_down has</div><div class='del'>-         * to be triggered. In that state when 1 subvolume comes up child_up</div><div class='del'>-         * needs to be triggered. dht optimizes revalidate lookup by sending</div><div class='del'>-         * it only to one of its subvolumes. When child up/down happens</div><div class='del'>-         * for afr's subvolumes dht should be notified by child_modified. The</div><div class='del'>-         * subsequent revalidate lookup happens on all the dht's subvolumes</div><div class='del'>-         * which triggers afr self-heals if any.</div><div class='del'>-         */</div><div class='del'>-        idx = find_child_index (this, child_xlator);</div><div class='del'>-        if (idx &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_CHILD_UP,</div><div class='del'>-                        "Received child_up from invalid subvolume");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /*</div><div class='add'>+     * We need to reset this in case children come up in "staggered"</div><div class='add'>+     * fashion, so that we discover a late-arriving local subvolume.  Note</div><div class='add'>+     * that we could end up issuing N lookups to the first subvolume, and</div><div class='add'>+     * O(N^2) overall, but N is small for AFR so it shouldn't be an issue.</div><div class='add'>+     */</div><div class='add'>+    priv-&gt;did_discovery = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* parent xlators don't need to know about every child_up, child_down</div><div class='add'>+     * because of afr ha. If all subvolumes go down, child_down has</div><div class='add'>+     * to be triggered. In that state when 1 subvolume comes up child_up</div><div class='add'>+     * needs to be triggered. dht optimizes revalidate lookup by sending</div><div class='add'>+     * it only to one of its subvolumes. When child up/down happens</div><div class='add'>+     * for afr's subvolumes dht should be notified by child_modified. The</div><div class='add'>+     * subsequent revalidate lookup happens on all the dht's subvolumes</div><div class='add'>+     * which triggers afr self-heals if any.</div><div class='add'>+     */</div><div class='add'>+    idx = find_child_index(this, child_xlator);</div><div class='add'>+    if (idx &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_CHILD_UP,</div><div class='add'>+               "Received child_up from invalid subvolume");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    had_quorum = priv-&gt;quorum_count &amp;&amp; afr_has_quorum(priv-&gt;child_up, this);</div><div class='add'>+    if (priv-&gt;halo_enabled) {</div><div class='add'>+        halo_max_latency_msec = afr_get_halo_latency(this);</div><div class='ctx'> </div><div class='del'>-        had_quorum = priv-&gt;quorum_count &amp;&amp; afr_has_quorum (priv-&gt;child_up,</div><div class='del'>-                                                           this);</div><div class='del'>-        if (priv-&gt;halo_enabled) {</div><div class='del'>-                halo_max_latency_msec = afr_get_halo_latency (this);</div><div class='del'>-</div><div class='del'>-                if (event == GF_EVENT_CHILD_PING) {</div><div class='del'>-                        /* Calculates the child latency and sets event</div><div class='del'>-                         */</div><div class='del'>-                        child_latency_msec = (int64_t)(uintptr_t)data2;</div><div class='del'>-                        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                __afr_handle_ping_event (this, child_xlator,</div><div class='del'>-                                        idx, halo_max_latency_msec, &amp;event,</div><div class='add'>+        if (event == GF_EVENT_CHILD_PING) {</div><div class='add'>+            /* Calculates the child latency and sets event</div><div class='add'>+             */</div><div class='add'>+            child_latency_msec = (int64_t)(uintptr_t)data2;</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                __afr_handle_ping_event(this, child_xlator, idx,</div><div class='add'>+                                        halo_max_latency_msec, &amp;event,</div><div class='ctx'>                                         child_latency_msec);</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-                }</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (event == GF_EVENT_CHILD_PING) {</div><div class='del'>-                /* This is the only xlator that handles PING, no reason to</div><div class='del'>-                 * propagate.</div><div class='del'>-                 */</div><div class='del'>-                goto out;</div><div class='del'>-            }</div><div class='add'>+    if (event == GF_EVENT_CHILD_PING) {</div><div class='add'>+        /* This is the only xlator that handles PING, no reason to</div><div class='add'>+         * propagate.</div><div class='add'>+         */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (event == GF_EVENT_TRANSLATOR_OP) {</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        had_heard_from_all = __get_heard_from_all_status (this);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                if (!had_heard_from_all) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                } else {</div><div class='del'>-                        input = data;</div><div class='del'>-                        output = data2;</div><div class='del'>-                        ret = afr_xl_op (this, input, output);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    if (event == GF_EVENT_TRANSLATOR_OP) {</div><div class='add'>+        LOCK(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            had_heard_from_all = __get_heard_from_all_status(this);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                had_heard_from_all = __get_heard_from_all_status (this);</div><div class='del'>-                switch (event) {</div><div class='del'>-                case GF_EVENT_PARENT_UP:</div><div class='del'>-                        __afr_launch_notify_timer (this, priv);</div><div class='del'>-                        propagate = 1;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_EVENT_CHILD_UP:</div><div class='del'>-                        __afr_handle_child_up_event (this, child_xlator,</div><div class='del'>-                                idx, child_latency_msec, &amp;event, &amp;call_psh,</div><div class='del'>-                                &amp;up_child);</div><div class='del'>-                        break;</div><div class='add'>+        if (!had_heard_from_all) {</div><div class='add'>+            ret = -1;</div><div class='add'>+        } else {</div><div class='add'>+            input = data;</div><div class='add'>+            output = data2;</div><div class='add'>+            ret = afr_xl_op(this, input, output);</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        had_heard_from_all = __get_heard_from_all_status(this);</div><div class='add'>+        switch (event) {</div><div class='add'>+            case GF_EVENT_PARENT_UP:</div><div class='add'>+                __afr_launch_notify_timer(this, priv);</div><div class='add'>+                propagate = 1;</div><div class='add'>+                break;</div><div class='add'>+            case GF_EVENT_CHILD_UP:</div><div class='add'>+                __afr_handle_child_up_event(this, child_xlator, idx,</div><div class='add'>+                                            child_latency_msec, &amp;event,</div><div class='add'>+                                            &amp;call_psh, &amp;up_child);</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                case GF_EVENT_CHILD_DOWN:</div><div class='del'>-                        __afr_handle_child_down_event (this, child_xlator, idx,</div><div class='del'>-                                child_latency_msec, &amp;event, &amp;call_psh,</div><div class='del'>-                                &amp;up_child);</div><div class='del'>-                        break;</div><div class='add'>+            case GF_EVENT_CHILD_DOWN:</div><div class='add'>+                __afr_handle_child_down_event(this, child_xlator, idx,</div><div class='add'>+                                              child_latency_msec, &amp;event,</div><div class='add'>+                                              &amp;call_psh, &amp;up_child);</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                case GF_EVENT_CHILD_CONNECTING:</div><div class='del'>-                        priv-&gt;last_event[idx] = event;</div><div class='add'>+            case GF_EVENT_CHILD_CONNECTING:</div><div class='add'>+                priv-&gt;last_event[idx] = event;</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            case GF_EVENT_SOME_DESCENDENT_DOWN:</div><div class='add'>+                priv-&gt;last_event[idx] = event;</div><div class='add'>+                break;</div><div class='add'>+            case GF_EVENT_UPCALL:</div><div class='add'>+                up_data = (struct gf_upcall *)data;</div><div class='add'>+                if (up_data-&gt;event_type != GF_UPCALL_CACHE_INVALIDATION)</div><div class='add'>+                    break;</div><div class='add'>+                up_ci = (struct gf_upcall_cache_invalidation *)up_data-&gt;data;</div><div class='add'>+</div><div class='add'>+                /* Since md-cache will be aggressively filtering</div><div class='add'>+                 * lookups, the stale read issue will be more</div><div class='add'>+                 * pronounced. Hence when a pending xattr is set notify</div><div class='add'>+                 * all the md-cache clients to invalidate the existing</div><div class='add'>+                 * stat cache and send the lookup next time */</div><div class='add'>+                if (!up_ci-&gt;dict)</div><div class='add'>+                    break;</div><div class='add'>+                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                    if (dict_get(up_ci-&gt;dict, priv-&gt;pending_key[i])) {</div><div class='add'>+                        up_ci-&gt;flags |= UP_INVAL_ATTR;</div><div class='add'>+                        itable = ((xlator_t *)this-&gt;graph-&gt;top)-&gt;itable;</div><div class='add'>+                        /*Internal processes may not have itable for top</div><div class='add'>+                         * xlator*/</div><div class='add'>+                        if (itable)</div><div class='add'>+                            inode = inode_find(itable, up_data-&gt;gfid);</div><div class='add'>+                        if (inode)</div><div class='add'>+                            afr_inode_need_refresh_set(inode, this);</div><div class='ctx'> </div><div class='del'>-                case GF_EVENT_SOME_DESCENDENT_DOWN:</div><div class='del'>-                        priv-&gt;last_event[idx] = event;</div><div class='del'>-                        break;</div><div class='del'>-                case GF_EVENT_UPCALL:</div><div class='del'>-                        up_data = (struct gf_upcall *)data;</div><div class='del'>-                        if (up_data-&gt;event_type != GF_UPCALL_CACHE_INVALIDATION)</div><div class='del'>-                                break;</div><div class='del'>-                        up_ci = (struct gf_upcall_cache_invalidation *)up_data-&gt;data;</div><div class='del'>-</div><div class='del'>-                        /* Since md-cache will be aggressively filtering</div><div class='del'>-                         * lookups, the stale read issue will be more</div><div class='del'>-                         * pronounced. Hence when a pending xattr is set notify</div><div class='del'>-                         * all the md-cache clients to invalidate the existing</div><div class='del'>-                         * stat cache and send the lookup next time */</div><div class='del'>-                        if (!up_ci-&gt;dict)</div><div class='del'>-                                break;</div><div class='del'>-                        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                                if (dict_get (up_ci-&gt;dict, priv-&gt;pending_key[i])) {</div><div class='del'>-                                         up_ci-&gt;flags |= UP_INVAL_ATTR;</div><div class='del'>-                                         itable = ((xlator_t *)this-&gt;graph-&gt;top)-&gt;itable;</div><div class='del'>-                                         /*Internal processes may not have itable for top xlator*/</div><div class='del'>-                                         if (itable)</div><div class='del'>-                                                 inode = inode_find (itable, up_data-&gt;gfid);</div><div class='del'>-                                         if (inode)</div><div class='del'>-                                                 afr_inode_need_refresh_set (inode, this);</div><div class='del'>-</div><div class='del'>-                                         break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        propagate = 1;</div><div class='ctx'>                         break;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                have_heard_from_all = __get_heard_from_all_status (this);</div><div class='del'>-                if (!had_heard_from_all &amp;&amp; have_heard_from_all) {</div><div class='del'>-                        if (priv-&gt;timer) {</div><div class='del'>-                                gf_timer_call_cancel (this-&gt;ctx, priv-&gt;timer);</div><div class='del'>-                                priv-&gt;timer = NULL;</div><div class='del'>-                        }</div><div class='del'>-                        /* This is the first event which completes aggregation</div><div class='del'>-                           of events from all subvolumes. If at least one subvol</div><div class='del'>-                           had come up, propagate CHILD_UP, but only this time</div><div class='del'>-                        */</div><div class='del'>-                        event = GF_EVENT_CHILD_DOWN;</div><div class='del'>-                        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                                if (priv-&gt;last_event[i] == GF_EVENT_CHILD_UP) {</div><div class='del'>-                                        event = GF_EVENT_CHILD_UP;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (priv-&gt;last_event[i] ==</div><div class='del'>-                                                GF_EVENT_CHILD_CONNECTING) {</div><div class='del'>-                                        event = GF_EVENT_CHILD_CONNECTING;</div><div class='del'>-                               /* continue to check other events for CHILD_UP */</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                propagate = 1;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;quorum_count) {</div><div class='del'>-                has_quorum = afr_has_quorum (priv-&gt;child_up, this);</div><div class='del'>-                if (!had_quorum &amp;&amp; has_quorum) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_QUORUM_MET,</div><div class='del'>-                                "Client-quorum is met");</div><div class='del'>-                        gf_event  (EVENT_AFR_QUORUM_MET,</div><div class='del'>-                                   "subvol=%s", this-&gt;name);</div><div class='del'>-                }</div><div class='del'>-                if (had_quorum &amp;&amp; !has_quorum) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_QUORUM_FAIL,</div><div class='del'>-                                "Client-quorum is not met");</div><div class='del'>-                        gf_event  (EVENT_AFR_QUORUM_FAIL, "subvol=%s",</div><div class='del'>-                                   this-&gt;name);</div><div class='add'>+        have_heard_from_all = __get_heard_from_all_status(this);</div><div class='add'>+        if (!had_heard_from_all &amp;&amp; have_heard_from_all) {</div><div class='add'>+            if (priv-&gt;timer) {</div><div class='add'>+                gf_timer_call_cancel(this-&gt;ctx, priv-&gt;timer);</div><div class='add'>+                priv-&gt;timer = NULL;</div><div class='add'>+            }</div><div class='add'>+            /* This is the first event which completes aggregation</div><div class='add'>+               of events from all subvolumes. If at least one subvol</div><div class='add'>+               had come up, propagate CHILD_UP, but only this time</div><div class='add'>+            */</div><div class='add'>+            event = GF_EVENT_CHILD_DOWN;</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                if (priv-&gt;last_event[i] == GF_EVENT_CHILD_UP) {</div><div class='add'>+                    event = GF_EVENT_CHILD_UP;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if all subvols have reported status, no need to hide anything</div><div class='del'>-           or wait for anything else. Just propagate blindly */</div><div class='del'>-        if (have_heard_from_all)</div><div class='del'>-                propagate = 1;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        if (propagate)</div><div class='del'>-                ret = default_notify (this, event, data);</div><div class='del'>-</div><div class='del'>-        if ((!had_heard_from_all) || call_psh) {</div><div class='del'>-                /* Launch self-heal on all local subvolumes if:</div><div class='del'>-                 * a) We have_heard_from_all for the first time</div><div class='del'>-                 * b) Already heard from everyone, but we now got a child-up</div><div class='del'>-                 *    event.</div><div class='del'>-                 */</div><div class='del'>-                if (have_heard_from_all &amp;&amp; priv-&gt;shd.iamshd) {</div><div class='del'>-                        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                                if (priv-&gt;child_up[i])</div><div class='del'>-                                        afr_selfheal_childup (this, i);</div><div class='add'>+                if (priv-&gt;last_event[i] == GF_EVENT_CHILD_CONNECTING) {</div><div class='add'>+                    event = GF_EVENT_CHILD_CONNECTING;</div><div class='add'>+                    /* continue to check other events for CHILD_UP */</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;quorum_count) {</div><div class='add'>+        has_quorum = afr_has_quorum(priv-&gt;child_up, this);</div><div class='add'>+        if (!had_quorum &amp;&amp; has_quorum) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_QUORUM_MET,</div><div class='add'>+                   "Client-quorum is met");</div><div class='add'>+            gf_event(EVENT_AFR_QUORUM_MET, "subvol=%s", this-&gt;name);</div><div class='add'>+        }</div><div class='add'>+        if (had_quorum &amp;&amp; !has_quorum) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_QUORUM_FAIL,</div><div class='add'>+                   "Client-quorum is not met");</div><div class='add'>+            gf_event(EVENT_AFR_QUORUM_FAIL, "subvol=%s", this-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* if all subvols have reported status, no need to hide anything</div><div class='add'>+       or wait for anything else. Just propagate blindly */</div><div class='add'>+    if (have_heard_from_all)</div><div class='add'>+        propagate = 1;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (propagate)</div><div class='add'>+        ret = default_notify(this, event, data);</div><div class='add'>+</div><div class='add'>+    if ((!had_heard_from_all) || call_psh) {</div><div class='add'>+        /* Launch self-heal on all local subvolumes if:</div><div class='add'>+         * a) We have_heard_from_all for the first time</div><div class='add'>+         * b) Already heard from everyone, but we now got a child-up</div><div class='add'>+         *    event.</div><div class='add'>+         */</div><div class='add'>+        if (have_heard_from_all &amp;&amp; priv-&gt;shd.iamshd) {</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+                if (priv-&gt;child_up[i])</div><div class='add'>+                    afr_selfheal_childup(this, i);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_local_init (afr_local_t *local, afr_private_t *priv, int32_t *op_errno)</div><div class='add'>+afr_local_init(afr_local_t *local, afr_private_t *priv, int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        int __ret = -1;</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;op_errno = EUCLEAN;</div><div class='add'>+    int __ret = -1;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = EUCLEAN;</div><div class='ctx'> </div><div class='del'>-	__ret = syncbarrier_init (&amp;local-&gt;barrier);</div><div class='del'>-        if (__ret) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = __ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    __ret = syncbarrier_init(&amp;local-&gt;barrier);</div><div class='add'>+    if (__ret) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = __ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;child_up = GF_CALLOC (priv-&gt;child_count,</div><div class='del'>-                                     sizeof (*local-&gt;child_up),</div><div class='del'>-                                     gf_afr_mt_char);</div><div class='del'>-        if (!local-&gt;child_up) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;child_up = GF_CALLOC(priv-&gt;child_count, sizeof(*local-&gt;child_up),</div><div class='add'>+                                gf_afr_mt_char);</div><div class='add'>+    if (!local-&gt;child_up) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(local-&gt;child_up, priv-&gt;child_up,</div><div class='add'>+           sizeof(*local-&gt;child_up) * priv-&gt;child_count);</div><div class='add'>+    local-&gt;call_count = AFR_COUNT(local-&gt;child_up, priv-&gt;child_count);</div><div class='add'>+    if (local-&gt;call_count == 0) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SUBVOLS_DOWN,</div><div class='add'>+               "no subvolumes up");</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (local-&gt;child_up, priv-&gt;child_up,</div><div class='del'>-                sizeof (*local-&gt;child_up) * priv-&gt;child_count);</div><div class='del'>-        local-&gt;call_count = AFR_COUNT (local-&gt;child_up, priv-&gt;child_count);</div><div class='del'>-        if (local-&gt;call_count == 0) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        AFR_MSG_SUBVOLS_DOWN, "no subvolumes up");</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;event_generation = priv-&gt;event_generation;</div><div class='ctx'> </div><div class='del'>-	local-&gt;event_generation = priv-&gt;event_generation;</div><div class='del'>-</div><div class='del'>-	local-&gt;read_attempted = GF_CALLOC (priv-&gt;child_count, sizeof (char),</div><div class='del'>-					   gf_afr_mt_char);</div><div class='del'>-	if (!local-&gt;read_attempted) {</div><div class='del'>-		if (op_errno)</div><div class='del'>-			*op_errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local-&gt;readable = GF_CALLOC (priv-&gt;child_count, sizeof (char),</div><div class='del'>-				     gf_afr_mt_char);</div><div class='del'>-	if (!local-&gt;readable) {</div><div class='del'>-		if (op_errno)</div><div class='del'>-			*op_errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        local-&gt;readable2 = GF_CALLOC (priv-&gt;child_count, sizeof (char),</div><div class='add'>+    local-&gt;read_attempted = GF_CALLOC(priv-&gt;child_count, sizeof(char),</div><div class='ctx'>                                       gf_afr_mt_char);</div><div class='del'>-        if (!local-&gt;readable2) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;read_attempted) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;read_subvol = -1;</div><div class='add'>+    local-&gt;readable = GF_CALLOC(priv-&gt;child_count, sizeof(char),</div><div class='add'>+                                gf_afr_mt_char);</div><div class='add'>+    if (!local-&gt;readable) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	local-&gt;replies = GF_CALLOC(priv-&gt;child_count, sizeof(*local-&gt;replies),</div><div class='del'>-				   gf_afr_mt_reply_t);</div><div class='del'>-	if (!local-&gt;replies) {</div><div class='del'>-		if (op_errno)</div><div class='del'>-			*op_errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    local-&gt;readable2 = GF_CALLOC(priv-&gt;child_count, sizeof(char),</div><div class='add'>+                                 gf_afr_mt_char);</div><div class='add'>+    if (!local-&gt;readable2) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;need_full_crawl = _gf_false;</div><div class='add'>+    local-&gt;read_subvol = -1;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;local-&gt;healer);</div><div class='del'>-	return 0;</div><div class='add'>+    local-&gt;replies = GF_CALLOC(priv-&gt;child_count, sizeof(*local-&gt;replies),</div><div class='add'>+                               gf_afr_mt_reply_t);</div><div class='add'>+    if (!local-&gt;replies) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;need_full_crawl = _gf_false;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;healer);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_internal_lock_init (afr_internal_lock_t *lk, size_t child_count)</div><div class='add'>+afr_internal_lock_init(afr_internal_lock_t *lk, size_t child_count)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -ENOMEM;</div><div class='add'>+    int ret = -ENOMEM;</div><div class='ctx'> </div><div class='del'>-        lk-&gt;locked_nodes = GF_CALLOC (sizeof (*lk-&gt;locked_nodes),</div><div class='del'>-                                      child_count, gf_afr_mt_char);</div><div class='del'>-        if (NULL == lk-&gt;locked_nodes)</div><div class='del'>-                goto out;</div><div class='add'>+    lk-&gt;locked_nodes = GF_CALLOC(sizeof(*lk-&gt;locked_nodes), child_count,</div><div class='add'>+                                 gf_afr_mt_char);</div><div class='add'>+    if (NULL == lk-&gt;locked_nodes)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        lk-&gt;lower_locked_nodes = GF_CALLOC (sizeof (*lk-&gt;lower_locked_nodes),</div><div class='del'>-                                            child_count, gf_afr_mt_char);</div><div class='del'>-        if (NULL == lk-&gt;lower_locked_nodes)</div><div class='del'>-                goto out;</div><div class='add'>+    lk-&gt;lower_locked_nodes = GF_CALLOC(sizeof(*lk-&gt;lower_locked_nodes),</div><div class='add'>+                                       child_count, gf_afr_mt_char);</div><div class='add'>+    if (NULL == lk-&gt;lower_locked_nodes)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        lk-&gt;lock_op_ret   = -1;</div><div class='del'>-        lk-&gt;lock_op_errno = EUCLEAN;</div><div class='add'>+    lk-&gt;lock_op_ret = -1;</div><div class='add'>+    lk-&gt;lock_op_errno = EUCLEAN;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_matrix_cleanup (int32_t **matrix, unsigned int m)</div><div class='add'>+afr_matrix_cleanup(int32_t **matrix, unsigned int m)</div><div class='ctx'> {</div><div class='del'>-        int             i         = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!matrix)</div><div class='del'>-                goto out;</div><div class='del'>-        for (i = 0; i &lt; m; i++) {</div><div class='del'>-                GF_FREE (matrix[i]);</div><div class='del'>-        }</div><div class='add'>+    if (!matrix)</div><div class='add'>+        goto out;</div><div class='add'>+    for (i = 0; i &lt; m; i++) {</div><div class='add'>+        GF_FREE(matrix[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (matrix);</div><div class='add'>+    GF_FREE(matrix);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t**</div><div class='del'>-afr_matrix_create (unsigned int m, unsigned int n)</div><div class='add'>+int32_t **</div><div class='add'>+afr_matrix_create(unsigned int m, unsigned int n)</div><div class='ctx'> {</div><div class='del'>-        int32_t         **matrix = NULL;</div><div class='del'>-        int             i       = 0;</div><div class='add'>+    int32_t **matrix = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        matrix = GF_CALLOC (sizeof (*matrix), m, gf_afr_mt_int32_t);</div><div class='del'>-        if (!matrix)</div><div class='del'>-                goto out;</div><div class='add'>+    matrix = GF_CALLOC(sizeof(*matrix), m, gf_afr_mt_int32_t);</div><div class='add'>+    if (!matrix)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; m; i++) {</div><div class='del'>-                matrix[i] = GF_CALLOC (sizeof (*matrix[i]), n,</div><div class='del'>-                                       gf_afr_mt_int32_t);</div><div class='del'>-                if (!matrix[i])</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        return matrix;</div><div class='add'>+    for (i = 0; i &lt; m; i++) {</div><div class='add'>+        matrix[i] = GF_CALLOC(sizeof(*matrix[i]), n, gf_afr_mt_int32_t);</div><div class='add'>+        if (!matrix[i])</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    return matrix;</div><div class='ctx'> out:</div><div class='del'>-        afr_matrix_cleanup (matrix, m);</div><div class='del'>-        return NULL;</div><div class='add'>+    afr_matrix_cleanup(matrix, m);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_transaction_local_init (afr_local_t *local, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int            ret = -ENOMEM;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ret = afr_internal_lock_init (&amp;local-&gt;internal_lock, priv-&gt;child_count);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = -ENOMEM;</div><div class='del'>-	local-&gt;pre_op_compat = priv-&gt;pre_op_compat;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.pre_op = GF_CALLOC (sizeof (*local-&gt;transaction.pre_op),</div><div class='del'>-                                               priv-&gt;child_count,</div><div class='del'>-                                               gf_afr_mt_char);</div><div class='del'>-        if (!local-&gt;transaction.pre_op)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.changelog_xdata =</div><div class='del'>-                GF_CALLOC (sizeof (*local-&gt;transaction.changelog_xdata),</div><div class='del'>-                           priv-&gt;child_count, gf_afr_mt_dict_t);</div><div class='del'>-        if (!local-&gt;transaction.changelog_xdata)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;arbiter_count == 1) {</div><div class='del'>-                local-&gt;transaction.pre_op_sources =</div><div class='del'>-                        GF_CALLOC (sizeof (*local-&gt;transaction.pre_op_sources),</div><div class='del'>-                                   priv-&gt;child_count, gf_afr_mt_char);</div><div class='del'>-                if (!local-&gt;transaction.pre_op_sources)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.failed_subvols = GF_CALLOC (sizeof (*local-&gt;transaction.failed_subvols),</div><div class='del'>-						       priv-&gt;child_count,</div><div class='del'>-						       gf_afr_mt_char);</div><div class='del'>-        if (!local-&gt;transaction.failed_subvols)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;pending = afr_matrix_create (priv-&gt;child_count,</div><div class='del'>-                                            AFR_NUM_CHANGE_LOGS);</div><div class='del'>-        if (!local-&gt;pending)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-        INIT_LIST_HEAD (&amp;local-&gt;transaction.wait_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;local-&gt;transaction.owner_list);</div><div class='add'>+afr_transaction_local_init(afr_local_t *local, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret = -ENOMEM;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ret = afr_internal_lock_init(&amp;local-&gt;internal_lock, priv-&gt;child_count);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = -ENOMEM;</div><div class='add'>+    local-&gt;pre_op_compat = priv-&gt;pre_op_compat;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.pre_op = GF_CALLOC(sizeof(*local-&gt;transaction.pre_op),</div><div class='add'>+                                          priv-&gt;child_count, gf_afr_mt_char);</div><div class='add'>+    if (!local-&gt;transaction.pre_op)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.changelog_xdata = GF_CALLOC(</div><div class='add'>+        sizeof(*local-&gt;transaction.changelog_xdata), priv-&gt;child_count,</div><div class='add'>+        gf_afr_mt_dict_t);</div><div class='add'>+    if (!local-&gt;transaction.changelog_xdata)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;arbiter_count == 1) {</div><div class='add'>+        local-&gt;transaction.pre_op_sources = GF_CALLOC(</div><div class='add'>+            sizeof(*local-&gt;transaction.pre_op_sources), priv-&gt;child_count,</div><div class='add'>+            gf_afr_mt_char);</div><div class='add'>+        if (!local-&gt;transaction.pre_op_sources)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.failed_subvols = GF_CALLOC(</div><div class='add'>+        sizeof(*local-&gt;transaction.failed_subvols), priv-&gt;child_count,</div><div class='add'>+        gf_afr_mt_char);</div><div class='add'>+    if (!local-&gt;transaction.failed_subvols)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;pending = afr_matrix_create(priv-&gt;child_count, AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (!local-&gt;pending)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;transaction.wait_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;transaction.owner_list);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_set_low_priority (call_frame_t *frame)</div><div class='add'>+afr_set_low_priority(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;root-&gt;pid = LOW_PRIO_PROC_PID;</div><div class='add'>+    frame-&gt;root-&gt;pid = LOW_PRIO_PROC_PID;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_priv_destroy (afr_private_t *priv)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        int child_count = -1;</div><div class='del'>-</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-        GF_FREE (priv-&gt;last_event);</div><div class='del'>-</div><div class='del'>-        child_count = priv-&gt;child_count;</div><div class='del'>-        if (priv-&gt;thin_arbiter_count) {</div><div class='del'>-                child_count++;</div><div class='del'>-        }</div><div class='del'>-        if (priv-&gt;pending_key) {</div><div class='del'>-                for (i = 0; i &lt; child_count; i++)</div><div class='del'>-                        GF_FREE (priv-&gt;pending_key[i]);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (priv-&gt;pending_reads);</div><div class='del'>-        GF_FREE (priv-&gt;local);</div><div class='del'>-        GF_FREE (priv-&gt;pending_key);</div><div class='del'>-        GF_FREE (priv-&gt;children);</div><div class='del'>-        GF_FREE (priv-&gt;child_up);</div><div class='del'>-        GF_FREE (priv-&gt;child_latency);</div><div class='del'>-        LOCK_DESTROY (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        GF_FREE (priv);</div><div class='add'>+afr_priv_destroy(afr_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int child_count = -1;</div><div class='add'>+</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+    GF_FREE(priv-&gt;last_event);</div><div class='add'>+</div><div class='add'>+    child_count = priv-&gt;child_count;</div><div class='add'>+    if (priv-&gt;thin_arbiter_count) {</div><div class='add'>+        child_count++;</div><div class='add'>+    }</div><div class='add'>+    if (priv-&gt;pending_key) {</div><div class='add'>+        for (i = 0; i &lt; child_count; i++)</div><div class='add'>+            GF_FREE(priv-&gt;pending_key[i]);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(priv-&gt;pending_reads);</div><div class='add'>+    GF_FREE(priv-&gt;local);</div><div class='add'>+    GF_FREE(priv-&gt;pending_key);</div><div class='add'>+    GF_FREE(priv-&gt;children);</div><div class='add'>+    GF_FREE(priv-&gt;child_up);</div><div class='add'>+    GF_FREE(priv-&gt;child_latency);</div><div class='add'>+    LOCK_DESTROY(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int**</div><div class='del'>-afr_mark_pending_changelog (afr_private_t *priv, unsigned char *pending,</div><div class='del'>-                            dict_t *xattr, ia_type_t iat)</div><div class='add'>+int **</div><div class='add'>+afr_mark_pending_changelog(afr_private_t *priv, unsigned char *pending,</div><div class='add'>+                           dict_t *xattr, ia_type_t iat)</div><div class='ctx'> {</div><div class='del'>-       int i = 0;</div><div class='del'>-       int **changelog = NULL;</div><div class='del'>-       int idx = -1;</div><div class='del'>-       int m_idx = 0;</div><div class='del'>-       int d_idx = 0;</div><div class='del'>-       int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int **changelog = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int m_idx = 0;</div><div class='add'>+    int d_idx = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-       m_idx = afr_index_for_transaction_type (AFR_METADATA_TRANSACTION);</div><div class='del'>-       d_idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);</div><div class='add'>+    m_idx = afr_index_for_transaction_type(AFR_METADATA_TRANSACTION);</div><div class='add'>+    d_idx = afr_index_for_transaction_type(AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-       idx = afr_index_from_ia_type (iat);</div><div class='add'>+    idx = afr_index_from_ia_type(iat);</div><div class='ctx'> </div><div class='del'>-       changelog = afr_matrix_create (priv-&gt;child_count, AFR_NUM_CHANGE_LOGS);</div><div class='del'>-       if (!changelog)</div><div class='del'>-                goto out;</div><div class='add'>+    changelog = afr_matrix_create(priv-&gt;child_count, AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (!changelog)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-       for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-               if (!pending[i])</div><div class='del'>-                       continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!pending[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-               changelog[i][m_idx] = hton32(1);</div><div class='del'>-               if (idx != -1)</div><div class='del'>-                       changelog[i][idx] = hton32(1);</div><div class='del'>-                /* If the newentry marking is on a newly created directory,</div><div class='del'>-                 * then mark it with the full-heal indicator.</div><div class='del'>-                 */</div><div class='del'>-                if ((IA_ISDIR (iat)) &amp;&amp; (priv-&gt;esh_granular))</div><div class='del'>-                        changelog[i][d_idx] = hton32(1);</div><div class='del'>-       }</div><div class='del'>-       ret = afr_set_pending_dict (priv, xattr, changelog);</div><div class='del'>-       if (ret &lt; 0) {</div><div class='del'>-               afr_matrix_cleanup (changelog, priv-&gt;child_count);</div><div class='del'>-               return NULL;</div><div class='del'>-       }</div><div class='add'>+        changelog[i][m_idx] = hton32(1);</div><div class='add'>+        if (idx != -1)</div><div class='add'>+            changelog[i][idx] = hton32(1);</div><div class='add'>+        /* If the newentry marking is on a newly created directory,</div><div class='add'>+         * then mark it with the full-heal indicator.</div><div class='add'>+         */</div><div class='add'>+        if ((IA_ISDIR(iat)) &amp;&amp; (priv-&gt;esh_granular))</div><div class='add'>+            changelog[i][d_idx] = hton32(1);</div><div class='add'>+    }</div><div class='add'>+    ret = afr_set_pending_dict(priv, xattr, changelog);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        afr_matrix_cleanup(changelog, priv-&gt;child_count);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-       return changelog;</div><div class='add'>+    return changelog;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_decide_heal_info (afr_private_t *priv, unsigned char *sources, int source)</div><div class='add'>+afr_decide_heal_info(afr_private_t *priv, unsigned char *sources, int source)</div><div class='ctx'> {</div><div class='del'>-        int sources_count = 0;</div><div class='add'>+    int sources_count = 0;</div><div class='ctx'> </div><div class='del'>-        if (source &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (source &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        sources_count = AFR_COUNT (sources, priv-&gt;child_count);</div><div class='del'>-        if (sources_count == priv-&gt;child_count)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    sources_count = AFR_COUNT(sources, priv-&gt;child_count);</div><div class='add'>+    if (sources_count == priv-&gt;child_count)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> out:</div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_locked_metadata_inspect (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                      inode_t *inode, gf_boolean_t *msh,</div><div class='del'>-                                      gf_boolean_t *pending)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        unsigned char *locked_on = NULL;</div><div class='del'>-        unsigned char *sources = NULL;</div><div class='del'>-        unsigned char *sinks = NULL;</div><div class='del'>-        unsigned char *healed_sinks = NULL;</div><div class='del'>-        unsigned char *undid_pending = NULL;</div><div class='del'>-        struct afr_reply *locked_replies = NULL;</div><div class='del'>-</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        undid_pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = afr_selfheal_inodelk (frame, this, inode, this-&gt;name,</div><div class='del'>-                                    LLONG_MAX - 1, 0, locked_on);</div><div class='del'>-        {</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        /* Not a single lock */</div><div class='del'>-                        ret = -afr_final_errno (frame-&gt;local, priv);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                ret = -ENOTCONN;/* all invalid responses */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = __afr_selfheal_metadata_prepare (frame, this, inode,</div><div class='del'>-                                                       locked_on, sources,</div><div class='del'>-                                                       sinks, healed_sinks,</div><div class='del'>-                                                       undid_pending,</div><div class='del'>-                                                       locked_replies,</div><div class='del'>-                                                       pending);</div><div class='del'>-                *msh = afr_decide_heal_info (priv, sources, ret);</div><div class='del'>-        }</div><div class='del'>-        afr_selfheal_uninodelk (frame, this, inode, this-&gt;name,</div><div class='del'>-                                LLONG_MAX - 1, 0, locked_on);</div><div class='add'>+afr_selfheal_locked_metadata_inspect(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                     inode_t *inode, gf_boolean_t *msh,</div><div class='add'>+                                     gf_boolean_t *pending)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *undid_pending = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    undid_pending = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_inodelk(frame, this, inode, this-&gt;name, LLONG_MAX - 1, 0,</div><div class='add'>+                               locked_on);</div><div class='add'>+    {</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            /* Not a single lock */</div><div class='add'>+            ret = -afr_final_errno(frame-&gt;local, priv);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                ret = -ENOTCONN; /* all invalid responses */</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = __afr_selfheal_metadata_prepare(</div><div class='add'>+            frame, this, inode, locked_on, sources, sinks, healed_sinks,</div><div class='add'>+            undid_pending, locked_replies, pending);</div><div class='add'>+        *msh = afr_decide_heal_info(priv, sources, ret);</div><div class='add'>+    }</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, inode, this-&gt;name, LLONG_MAX - 1, 0,</div><div class='add'>+                           locked_on);</div><div class='ctx'> out:</div><div class='del'>-        if (locked_replies)</div><div class='del'>-                afr_replies_wipe (locked_replies, priv-&gt;child_count);</div><div class='del'>-        return ret;</div><div class='add'>+    if (locked_replies)</div><div class='add'>+        afr_replies_wipe(locked_replies, priv-&gt;child_count);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_locked_data_inspect (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                  fd_t *fd, gf_boolean_t *dsh,</div><div class='del'>-                                  gf_boolean_t *pflag)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        unsigned char *data_lock = NULL;</div><div class='del'>-        unsigned char *sources = NULL;</div><div class='del'>-        unsigned char *sinks = NULL;</div><div class='del'>-        unsigned char *healed_sinks = NULL;</div><div class='del'>-        unsigned char *undid_pending = NULL;</div><div class='del'>-        afr_private_t   *priv = NULL;</div><div class='del'>-        struct afr_reply *locked_replies = NULL;</div><div class='del'>-        inode_t *inode = fd-&gt;inode;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        data_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        undid_pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = afr_selfheal_inodelk (frame, this, inode, this-&gt;name,</div><div class='del'>-                                    0, 0, data_lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        ret = -afr_final_errno (frame-&gt;local, priv);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                ret = -ENOTCONN; /* all invalid responses */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = __afr_selfheal_data_prepare (frame, this, inode,</div><div class='del'>-                                                   data_lock, sources, sinks,</div><div class='del'>-                                                   healed_sinks, undid_pending,</div><div class='del'>-                                                   locked_replies, pflag);</div><div class='del'>-                *dsh = afr_decide_heal_info (priv, sources, ret);</div><div class='del'>-        }</div><div class='del'>-        afr_selfheal_uninodelk (frame, this, inode, this-&gt;name, 0, 0,</div><div class='del'>-                                data_lock);</div><div class='add'>+afr_selfheal_locked_data_inspect(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                                 gf_boolean_t *dsh, gf_boolean_t *pflag)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned char *data_lock = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *undid_pending = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+    inode_t *inode = fd-&gt;inode;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    data_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    undid_pending = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_inodelk(frame, this, inode, this-&gt;name, 0, 0, data_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            ret = -afr_final_errno(frame-&gt;local, priv);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                ret = -ENOTCONN; /* all invalid responses */</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = __afr_selfheal_data_prepare(frame, this, inode, data_lock,</div><div class='add'>+                                          sources, sinks, healed_sinks,</div><div class='add'>+                                          undid_pending, locked_replies, pflag);</div><div class='add'>+        *dsh = afr_decide_heal_info(priv, sources, ret);</div><div class='add'>+    }</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, inode, this-&gt;name, 0, 0, data_lock);</div><div class='ctx'> out:</div><div class='del'>-        if (locked_replies)</div><div class='del'>-                afr_replies_wipe (locked_replies, priv-&gt;child_count);</div><div class='del'>-        return ret;</div><div class='add'>+    if (locked_replies)</div><div class='add'>+        afr_replies_wipe(locked_replies, priv-&gt;child_count);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_locked_entry_inspect (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                   inode_t *inode,</div><div class='del'>-                                   gf_boolean_t *esh, gf_boolean_t *pflag)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int source = -1;</div><div class='del'>-        afr_private_t   *priv = NULL;</div><div class='del'>-        unsigned char *locked_on = NULL;</div><div class='del'>-        unsigned char *data_lock = NULL;</div><div class='del'>-        unsigned char *sources = NULL;</div><div class='del'>-        unsigned char *sinks = NULL;</div><div class='del'>-        unsigned char *healed_sinks = NULL;</div><div class='del'>-        struct afr_reply *locked_replies = NULL;</div><div class='del'>-        gf_boolean_t granular_locks = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-	if (strcmp ("granular", priv-&gt;locking_scheme) == 0)</div><div class='del'>-	        granular_locks = _gf_true;</div><div class='del'>-        locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-        data_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        if (!granular_locks) {</div><div class='del'>-                ret = afr_selfheal_tryentrylk (frame, this, inode,</div><div class='del'>-                                              priv-&gt;sh_domain, NULL, locked_on);</div><div class='del'>-        }</div><div class='add'>+afr_selfheal_locked_entry_inspect(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                  inode_t *inode, gf_boolean_t *esh,</div><div class='add'>+                                  gf_boolean_t *pflag)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *data_lock = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+    gf_boolean_t granular_locks = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (strcmp("granular", priv-&gt;locking_scheme) == 0)</div><div class='add'>+        granular_locks = _gf_true;</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+    data_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    if (!granular_locks) {</div><div class='add'>+        ret = afr_selfheal_tryentrylk(frame, this, inode, priv-&gt;sh_domain, NULL,</div><div class='add'>+                                      locked_on);</div><div class='add'>+    }</div><div class='add'>+    {</div><div class='add'>+        if (!granular_locks &amp;&amp; ret == 0) {</div><div class='add'>+            ret = -afr_final_errno(frame-&gt;local, priv);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                ret = -ENOTCONN; /* all invalid responses */</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = afr_selfheal_entrylk(frame, this, inode, this-&gt;name, NULL,</div><div class='add'>+                                   data_lock);</div><div class='ctx'>         {</div><div class='del'>-                if (!granular_locks &amp;&amp; ret == 0) {</div><div class='del'>-                        ret = -afr_final_errno (frame-&gt;local, priv);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                ret = -ENOTCONN;/* all invalid responses */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = afr_selfheal_entrylk (frame, this, inode, this-&gt;name,</div><div class='del'>-                                            NULL, data_lock);</div><div class='del'>-                {</div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                ret = -afr_final_errno (frame-&gt;local, priv);</div><div class='del'>-                                if (ret == 0)</div><div class='del'>-                                        ret = -ENOTCONN;</div><div class='del'>-                                /* all invalid responses */</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        ret = __afr_selfheal_entry_prepare (frame, this, inode,</div><div class='del'>-                                                            data_lock, sources,</div><div class='del'>-                                                            sinks, healed_sinks,</div><div class='del'>-                                                            locked_replies,</div><div class='del'>-                                                            &amp;source, pflag);</div><div class='del'>-                        if ((ret == 0) &amp;&amp; source &lt; 0)</div><div class='del'>-                                ret = -EIO;</div><div class='del'>-                        *esh = afr_decide_heal_info (priv, sources, ret);</div><div class='del'>-                }</div><div class='del'>-                afr_selfheal_unentrylk (frame, this, inode, this-&gt;name, NULL,</div><div class='del'>-                                        data_lock, NULL);</div><div class='del'>-        }</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                ret = -afr_final_errno(frame-&gt;local, priv);</div><div class='add'>+                if (ret == 0)</div><div class='add'>+                    ret = -ENOTCONN;</div><div class='add'>+                /* all invalid responses */</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+            ret = __afr_selfheal_entry_prepare(frame, this, inode, data_lock,</div><div class='add'>+                                               sources, sinks, healed_sinks,</div><div class='add'>+                                               locked_replies, &amp;source, pflag);</div><div class='add'>+            if ((ret == 0) &amp;&amp; source &lt; 0)</div><div class='add'>+                ret = -EIO;</div><div class='add'>+            *esh = afr_decide_heal_info(priv, sources, ret);</div><div class='add'>+        }</div><div class='add'>+        afr_selfheal_unentrylk(frame, this, inode, this-&gt;name, NULL, data_lock,</div><div class='add'>+                               NULL);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        if (!granular_locks)</div><div class='del'>-                afr_selfheal_unentrylk (frame, this, inode, priv-&gt;sh_domain,</div><div class='del'>-                                        NULL, locked_on, NULL);</div><div class='add'>+    if (!granular_locks)</div><div class='add'>+        afr_selfheal_unentrylk(frame, this, inode, priv-&gt;sh_domain, NULL,</div><div class='add'>+                               locked_on, NULL);</div><div class='ctx'> out:</div><div class='del'>-        if (locked_replies)</div><div class='del'>-                afr_replies_wipe (locked_replies, priv-&gt;child_count);</div><div class='del'>-        return ret;</div><div class='add'>+    if (locked_replies)</div><div class='add'>+        afr_replies_wipe(locked_replies, priv-&gt;child_count);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_locked_inspect (call_frame_t *frame, xlator_t *this, uuid_t gfid,</div><div class='del'>-                             inode_t **inode,</div><div class='del'>-                             gf_boolean_t *entry_selfheal,</div><div class='del'>-                             gf_boolean_t *data_selfheal,</div><div class='del'>-                             gf_boolean_t *metadata_selfheal,</div><div class='del'>-                             gf_boolean_t *pending)</div><div class='del'>-</div><div class='del'>-{</div><div class='del'>-        int ret             = -1;</div><div class='del'>-        fd_t *fd            = NULL;</div><div class='del'>-        gf_boolean_t    dsh = _gf_false;</div><div class='del'>-        gf_boolean_t    msh = _gf_false;</div><div class='del'>-        gf_boolean_t    esh = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = afr_selfheal_unlocked_inspect (frame, this, gfid, inode,</div><div class='del'>-                                             &amp;dsh, &amp;msh, &amp;esh);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* For every heal type hold locks and check if it indeed needs heal */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Heal-info does an open() on the file being examined so that the</div><div class='del'>-         * current eager-lock holding client, if present, at some point sees</div><div class='del'>-         * open-fd count being &gt; 1 and releases the eager-lock so that heal-info</div><div class='del'>-         * doesn't remain blocked forever until IO completes.</div><div class='del'>-         */</div><div class='del'>-        if ((*inode)-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                ret = afr_selfheal_data_open (this, *inode, &amp;fd);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, -ret, "%s: Failed to open",</div><div class='del'>-                                      uuid_utoa ((*inode)-&gt;gfid));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+afr_selfheal_locked_inspect(call_frame_t *frame, xlator_t *this, uuid_t gfid,</div><div class='add'>+                            inode_t **inode, gf_boolean_t *entry_selfheal,</div><div class='add'>+                            gf_boolean_t *data_selfheal,</div><div class='add'>+                            gf_boolean_t *metadata_selfheal,</div><div class='add'>+                            gf_boolean_t *pending)</div><div class='add'>+</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    gf_boolean_t dsh = _gf_false;</div><div class='add'>+    gf_boolean_t msh = _gf_false;</div><div class='add'>+    gf_boolean_t esh = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_unlocked_inspect(frame, this, gfid, inode, &amp;dsh, &amp;msh,</div><div class='add'>+                                        &amp;esh);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* For every heal type hold locks and check if it indeed needs heal */</div><div class='add'>+</div><div class='add'>+    /* Heal-info does an open() on the file being examined so that the</div><div class='add'>+     * current eager-lock holding client, if present, at some point sees</div><div class='add'>+     * open-fd count being &gt; 1 and releases the eager-lock so that heal-info</div><div class='add'>+     * doesn't remain blocked forever until IO completes.</div><div class='add'>+     */</div><div class='add'>+    if ((*inode)-&gt;ia_type == IA_IFREG) {</div><div class='add'>+        ret = afr_selfheal_data_open(this, *inode, &amp;fd);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, -ret, "%s: Failed to open",</div><div class='add'>+                         uuid_utoa((*inode)-&gt;gfid));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (msh) {</div><div class='del'>-                ret = afr_selfheal_locked_metadata_inspect (frame, this,</div><div class='del'>-                                                            *inode, &amp;msh,</div><div class='del'>-                                                            pending);</div><div class='del'>-                if (ret == -EIO)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (msh) {</div><div class='add'>+        ret = afr_selfheal_locked_metadata_inspect(frame, this, *inode, &amp;msh,</div><div class='add'>+                                                   pending);</div><div class='add'>+        if (ret == -EIO)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dsh) {</div><div class='del'>-                ret = afr_selfheal_locked_data_inspect (frame, this, fd,</div><div class='del'>-                                                        &amp;dsh, pending);</div><div class='del'>-                if (ret == -EIO || (ret == -EAGAIN))</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dsh) {</div><div class='add'>+        ret = afr_selfheal_locked_data_inspect(frame, this, fd, &amp;dsh, pending);</div><div class='add'>+        if (ret == -EIO || (ret == -EAGAIN))</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (esh) {</div><div class='del'>-                ret = afr_selfheal_locked_entry_inspect (frame, this, *inode,</div><div class='del'>-                                                         &amp;esh, pending);</div><div class='del'>-        }</div><div class='add'>+    if (esh) {</div><div class='add'>+        ret = afr_selfheal_locked_entry_inspect(frame, this, *inode, &amp;esh,</div><div class='add'>+                                                pending);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        *data_selfheal = dsh;</div><div class='del'>-        *entry_selfheal = esh;</div><div class='del'>-        *metadata_selfheal = msh;</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return ret;</div><div class='add'>+    *data_selfheal = dsh;</div><div class='add'>+    *entry_selfheal = esh;</div><div class='add'>+    *metadata_selfheal = msh;</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-dict_t*</div><div class='del'>-afr_set_heal_info (char *status)</div><div class='add'>+dict_t *</div><div class='add'>+afr_set_heal_info(char *status)</div><div class='ctx'> {</div><div class='del'>-        dict_t *dict = NULL;</div><div class='del'>-        int    ret   = -1;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, "heal-info", status);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg ("", GF_LOG_WARNING, -ret,</div><div class='del'>-                        AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set heal-info key to "</div><div class='del'>-                        "%s", status);</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, "heal-info", status);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg("", GF_LOG_WARNING, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set heal-info key to "</div><div class='add'>+               "%s",</div><div class='add'>+               status);</div><div class='ctx'> out:</div><div class='del'>-        return dict;</div><div class='add'>+    return dict;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_get_heal_info (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t    data_selfheal     = _gf_false;</div><div class='del'>-        gf_boolean_t    metadata_selfheal = _gf_false;</div><div class='del'>-        gf_boolean_t    entry_selfheal    = _gf_false;</div><div class='del'>-        gf_boolean_t    pending           = _gf_false;</div><div class='del'>-        dict_t         *dict              = NULL;</div><div class='del'>-        int             ret               = -1;</div><div class='del'>-        int             op_errno          = 0;</div><div class='del'>-        inode_t        *inode             = NULL;</div><div class='del'>-        char           *substr            = NULL;</div><div class='del'>-        char           *status            = NULL;</div><div class='del'>-</div><div class='del'>-        ret = afr_selfheal_locked_inspect (frame, this, loc-&gt;gfid, &amp;inode,</div><div class='del'>-                                           &amp;entry_selfheal,</div><div class='del'>-                                           &amp;data_selfheal, &amp;metadata_selfheal,</div><div class='del'>-                                           &amp;pending);</div><div class='del'>-</div><div class='del'>-        if (ret == -ENOMEM) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='add'>+afr_get_heal_info(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t data_selfheal = _gf_false;</div><div class='add'>+    gf_boolean_t metadata_selfheal = _gf_false;</div><div class='add'>+    gf_boolean_t entry_selfheal = _gf_false;</div><div class='add'>+    gf_boolean_t pending = _gf_false;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    char *substr = NULL;</div><div class='add'>+    char *status = NULL;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_locked_inspect(frame, this, loc-&gt;gfid, &amp;inode,</div><div class='add'>+                                      &amp;entry_selfheal, &amp;data_selfheal,</div><div class='add'>+                                      &amp;metadata_selfheal, &amp;pending);</div><div class='add'>+</div><div class='add'>+    if (ret == -ENOMEM) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (pending) {</div><div class='add'>+        gf_asprintf(&amp;substr, "-pending");</div><div class='add'>+        if (!substr)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == -EIO) {</div><div class='add'>+        ret = gf_asprintf(&amp;status, "split-brain%s", substr ? substr : "");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        dict = afr_set_heal_info(status);</div><div class='add'>+    } else if (ret == -EAGAIN) {</div><div class='add'>+        ret = gf_asprintf(&amp;status, "possibly-healing%s", substr ? substr : "");</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        dict = afr_set_heal_info(status);</div><div class='add'>+    } else if (ret &gt;= 0) {</div><div class='add'>+        /* value of ret = source index</div><div class='add'>+         * so ret &gt;= 0 and at least one of the 3 booleans set to</div><div class='add'>+         * true means a source is identified; heal is required.</div><div class='add'>+         */</div><div class='add'>+        if (!data_selfheal &amp;&amp; !entry_selfheal &amp;&amp; !metadata_selfheal) {</div><div class='add'>+            dict = afr_set_heal_info("no-heal");</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_asprintf(&amp;status, "heal%s", substr ? substr : "");</div><div class='add'>+            if (ret &lt; 0)</div><div class='ctx'>                 goto out;</div><div class='add'>+            dict = afr_set_heal_info(status);</div><div class='add'>+        }</div><div class='add'>+    } else if (ret &lt; 0) {</div><div class='add'>+        /* Apart from above checked -ve ret values, there are</div><div class='add'>+         * other possible ret values like ENOTCONN</div><div class='add'>+         * (returned when number of valid replies received are</div><div class='add'>+         * less than 2)</div><div class='add'>+         * in which case heal is required when one of the</div><div class='add'>+         * selfheal booleans is set.</div><div class='add'>+         */</div><div class='add'>+        if (data_selfheal || entry_selfheal || metadata_selfheal) {</div><div class='add'>+            ret = gf_asprintf(&amp;status, "heal%s", substr ? substr : "");</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+            dict = afr_set_heal_info(status);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (pending) {</div><div class='del'>-                gf_asprintf (&amp;substr, "-pending");</div><div class='del'>-                if (!substr)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == -EIO) {</div><div class='del'>-                ret = gf_asprintf (&amp;status, "split-brain%s",</div><div class='del'>-                                   substr? substr : "");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                dict = afr_set_heal_info (status);</div><div class='del'>-        } else if (ret == -EAGAIN) {</div><div class='del'>-                ret = gf_asprintf (&amp;status, "possibly-healing%s",</div><div class='del'>-                                   substr? substr : "");</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                dict = afr_set_heal_info (status);</div><div class='del'>-        } else if (ret &gt;= 0) {</div><div class='del'>-                /* value of ret = source index</div><div class='del'>-                 * so ret &gt;= 0 and at least one of the 3 booleans set to</div><div class='del'>-                 * true means a source is identified; heal is required.</div><div class='del'>-                 */</div><div class='del'>-                if (!data_selfheal &amp;&amp; !entry_selfheal &amp;&amp;</div><div class='del'>-                    !metadata_selfheal) {</div><div class='del'>-                        dict = afr_set_heal_info ("no-heal");</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_asprintf (&amp;status, "heal%s",</div><div class='del'>-                                           substr? substr : "");</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                        dict = afr_set_heal_info (status);</div><div class='del'>-                }</div><div class='del'>-        } else if (ret &lt; 0) {</div><div class='del'>-                /* Apart from above checked -ve ret values, there are</div><div class='del'>-                 * other possible ret values like ENOTCONN</div><div class='del'>-                 * (returned when number of valid replies received are</div><div class='del'>-                 * less than 2)</div><div class='del'>-                 * in which case heal is required when one of the</div><div class='del'>-                 * selfheal booleans is set.</div><div class='del'>-                 */</div><div class='del'>-                if (data_selfheal || entry_selfheal ||</div><div class='del'>-                    metadata_selfheal) {</div><div class='del'>-                        ret = gf_asprintf (&amp;status, "heal%s",</div><div class='del'>-                                           substr? substr : "");</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                        dict = afr_set_heal_info (status);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        AFR_STACK_UNWIND (getxattr, frame, ret, op_errno, dict, NULL);</div><div class='del'>-        if (dict)</div><div class='del'>-               dict_unref (dict);</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        GF_FREE (substr);</div><div class='del'>-        return ret;</div><div class='add'>+    AFR_STACK_UNWIND(getxattr, frame, ret, op_errno, dict, NULL);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    GF_FREE(substr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_afr_is_split_brain (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         struct afr_reply *replies,</div><div class='del'>-                         afr_transaction_type type,</div><div class='del'>-                         gf_boolean_t *spb)</div><div class='del'>-{</div><div class='del'>-        afr_private_t    *priv              = NULL;</div><div class='del'>-        uint64_t         *witness           = NULL;</div><div class='del'>-        unsigned char    *sources           = NULL;</div><div class='del'>-        unsigned char    *sinks             = NULL;</div><div class='del'>-        int               sources_count     = 0;</div><div class='del'>-        int               ret               = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        witness = alloca0(priv-&gt;child_count * sizeof (*witness));</div><div class='del'>-</div><div class='del'>-        ret = afr_selfheal_find_direction (frame, this, replies,</div><div class='del'>-					   type, priv-&gt;child_up, sources,</div><div class='del'>-                                           sinks, witness, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+_afr_is_split_brain(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                    struct afr_reply *replies, afr_transaction_type type,</div><div class='add'>+                    gf_boolean_t *spb)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t *witness = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    int sources_count = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    witness = alloca0(priv-&gt;child_count * sizeof(*witness));</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_find_direction(frame, this, replies, type,</div><div class='add'>+                                      priv-&gt;child_up, sources, sinks, witness,</div><div class='add'>+                                      NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        sources_count = AFR_COUNT (sources, priv-&gt;child_count);</div><div class='del'>-        if (!sources_count)</div><div class='del'>-                *spb = _gf_true;</div><div class='add'>+    sources_count = AFR_COUNT(sources, priv-&gt;child_count);</div><div class='add'>+    if (!sources_count)</div><div class='add'>+        *spb = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_is_split_brain (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-                    uuid_t gfid, gf_boolean_t *d_spb, gf_boolean_t *m_spb)</div><div class='add'>+afr_is_split_brain(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                   uuid_t gfid, gf_boolean_t *d_spb, gf_boolean_t *m_spb)</div><div class='ctx'> {</div><div class='del'>-        int    ret                          = -1;</div><div class='del'>-        afr_private_t    *priv              = NULL;</div><div class='del'>-        struct afr_reply *replies           = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        replies = alloca0 (sizeof (*replies) * priv-&gt;child_count);</div><div class='add'>+    replies = alloca0(sizeof(*replies) * priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_unlocked_discover (frame, inode, gfid, replies);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = afr_selfheal_unlocked_discover(frame, inode, gfid, replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!afr_can_decide_split_brain_source_sinks (replies,</div><div class='del'>-                                                      priv-&gt;child_count)) {</div><div class='del'>-                ret = -EAGAIN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!afr_can_decide_split_brain_source_sinks(replies, priv-&gt;child_count)) {</div><div class='add'>+        ret = -EAGAIN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _afr_is_split_brain (frame, this, replies,</div><div class='del'>-                                    AFR_DATA_TRANSACTION, d_spb);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = _afr_is_split_brain(frame, this, replies, AFR_DATA_TRANSACTION,</div><div class='add'>+                              d_spb);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = _afr_is_split_brain (frame, this, replies,</div><div class='del'>-                                    AFR_METADATA_TRANSACTION, m_spb);</div><div class='add'>+    ret = _afr_is_split_brain(frame, this, replies, AFR_METADATA_TRANSACTION,</div><div class='add'>+                              m_spb);</div><div class='ctx'> out:</div><div class='del'>-        if (replies) {</div><div class='del'>-                afr_replies_wipe (replies, priv-&gt;child_count);</div><div class='del'>-                replies = NULL;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (replies) {</div><div class='add'>+        afr_replies_wipe(replies, priv-&gt;child_count);</div><div class='add'>+        replies = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_get_split_brain_status_cbk (int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+afr_get_split_brain_status_cbk(int ret, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (opaque);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(opaque);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_get_split_brain_status (void *opaque)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t      d_spb             = _gf_false;</div><div class='del'>-        gf_boolean_t      m_spb             = _gf_false;</div><div class='del'>-        int               ret               = -1;</div><div class='del'>-        int               op_errno          = 0;</div><div class='del'>-        int               i                 = 0;</div><div class='del'>-        char             *choices           = NULL;</div><div class='del'>-        char             *status            = NULL;</div><div class='del'>-        dict_t           *dict              = NULL;</div><div class='del'>-        inode_t          *inode             = NULL;</div><div class='del'>-        afr_private_t    *priv              = NULL;</div><div class='del'>-        xlator_t         **children         = NULL;</div><div class='del'>-        call_frame_t     *frame             = NULL;</div><div class='del'>-        xlator_t         *this              = NULL;</div><div class='del'>-        loc_t            *loc               = NULL;</div><div class='del'>-        afr_spb_status_t *data              = NULL;</div><div class='del'>-</div><div class='del'>-        data     = opaque;</div><div class='del'>-        frame    = data-&gt;frame;</div><div class='del'>-        this     = frame-&gt;this;</div><div class='del'>-        loc      = data-&gt;loc;</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        children = priv-&gt;children;</div><div class='del'>-</div><div class='del'>-        inode = afr_inode_find (this, loc-&gt;gfid);</div><div class='del'>-        if (!inode)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+afr_get_split_brain_status(void *opaque)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t d_spb = _gf_false;</div><div class='add'>+    gf_boolean_t m_spb = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *choices = NULL;</div><div class='add'>+    char *status = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t **children = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    afr_spb_status_t *data = NULL;</div><div class='add'>+</div><div class='add'>+    data = opaque;</div><div class='add'>+    frame = data-&gt;frame;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    loc = data-&gt;loc;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    children = priv-&gt;children;</div><div class='add'>+</div><div class='add'>+    inode = afr_inode_find(this, loc-&gt;gfid);</div><div class='add'>+    if (!inode)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Calculation for string length :</div><div class='add'>+     * (child_count X length of child-name) + SLEN ("    Choices :")</div><div class='add'>+     * child-name consists of :</div><div class='add'>+     * a) 251 = max characters for volname according to GD_VOLUME_NAME_MAX</div><div class='add'>+     * b) strlen ("-client-00,") assuming 16 replicas</div><div class='add'>+     */</div><div class='add'>+    choices = alloca0(priv-&gt;child_count * (256 + SLEN("-client-00,")) +</div><div class='add'>+                      SLEN("    Choices:"));</div><div class='add'>+</div><div class='add'>+    ret = afr_is_split_brain(frame, this, inode, loc-&gt;gfid, &amp;d_spb, &amp;m_spb);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        if (ret == -EAGAIN) {</div><div class='add'>+            ret = dict_set_str(dict, GF_AFR_SBRAIN_STATUS,</div><div class='add'>+                               SBRAIN_HEAL_NO_GO_MSG);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                       AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set GF_AFR_SBRAIN_STATUS in dict");</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Calculation for string length :</div><div class='del'>-        * (child_count X length of child-name) + SLEN ("    Choices :")</div><div class='del'>-        * child-name consists of :</div><div class='del'>-        * a) 251 = max characters for volname according to GD_VOLUME_NAME_MAX</div><div class='del'>-        * b) strlen ("-client-00,") assuming 16 replicas</div><div class='del'>-        */</div><div class='del'>-        choices = alloca0 (priv-&gt;child_count * (256 + SLEN ("-client-00,")) +</div><div class='del'>-                           SLEN ("    Choices:"));</div><div class='del'>-</div><div class='del'>-        ret = afr_is_split_brain (frame, this, inode, loc-&gt;gfid, &amp;d_spb,</div><div class='del'>-                                  &amp;m_spb);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                if (ret == -EAGAIN) {</div><div class='del'>-                        ret = dict_set_str (dict, GF_AFR_SBRAIN_STATUS,</div><div class='del'>-                                            SBRAIN_HEAL_NO_GO_MSG);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Failed to set GF_AFR_SBRAIN_STATUS in dict");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    if (d_spb || m_spb) {</div><div class='add'>+        sprintf(choices, "    Choices:");</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            strcat(choices, children[i]-&gt;name);</div><div class='add'>+            strcat(choices, ",");</div><div class='ctx'>         }</div><div class='add'>+        choices[strlen(choices) - 1] = '\0';</div><div class='ctx'> </div><div class='del'>-        if (d_spb || m_spb) {</div><div class='del'>-                sprintf (choices, "    Choices:");</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        strcat (choices, children[i]-&gt;name);</div><div class='del'>-                        strcat (choices, ",");</div><div class='del'>-                }</div><div class='del'>-                choices[strlen (choices) - 1] = '\0';</div><div class='del'>-</div><div class='del'>-                ret = gf_asprintf (&amp;status, "data-split-brain:%s    "</div><div class='del'>-                                    "metadata-split-brain:%s%s",</div><div class='del'>-                                    (d_spb) ? "yes" : "no",</div><div class='del'>-                                    (m_spb) ? "yes" : "no", choices);</div><div class='add'>+        ret = gf_asprintf(&amp;status,</div><div class='add'>+                          "data-split-brain:%s    "</div><div class='add'>+                          "metadata-split-brain:%s%s",</div><div class='add'>+                          (d_spb) ? "yes" : "no", (m_spb) ? "yes" : "no",</div><div class='add'>+                          choices);</div><div class='ctx'> </div><div class='del'>-                if (-1 == ret) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_dynstr (dict, GF_AFR_SBRAIN_STATUS, status);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_set_str (dict, GF_AFR_SBRAIN_STATUS,</div><div class='del'>-                                    "The file is not under data or"</div><div class='del'>-                                    " metadata split-brain");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (-1 == ret) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = dict_set_dynstr(dict, GF_AFR_SBRAIN_STATUS, status);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_set_str(dict, GF_AFR_SBRAIN_STATUS,</div><div class='add'>+                           "The file is not under data or"</div><div class='add'>+                           " metadata split-brain");</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        AFR_STACK_UNWIND (getxattr, frame, ret, op_errno, dict, NULL);</div><div class='del'>-        if (dict)</div><div class='del'>-               dict_unref (dict);</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        return ret;</div><div class='add'>+    AFR_STACK_UNWIND(getxattr, frame, ret, op_errno, dict, NULL);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> afr_heal_splitbrain_file(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int             ret               = 0;</div><div class='del'>-        int             op_errno          = 0;</div><div class='del'>-        dict_t         *dict              = NULL;</div><div class='del'>-        afr_local_t    *local             = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_do (frame, this, loc-&gt;gfid);</div><div class='add'>+    ret = afr_selfheal_do(frame, this, loc-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        if (ret == 1 || ret == 2) {</div><div class='del'>-                ret = dict_set_str (dict, "sh-fail-msg",</div><div class='del'>-                                    "File not in split-brain");</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set sh-fail-msg in dict");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                if (local-&gt;xdata_rsp) {</div><div class='del'>-                        /* 'sh-fail-msg' has been set in the dict during self-heal.*/</div><div class='del'>-                        dict_copy (local-&gt;xdata_rsp, dict);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else if (ret &lt; 0) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+    if (ret == 1 || ret == 2) {</div><div class='add'>+        ret = dict_set_str(dict, "sh-fail-msg", "File not in split-brain");</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set sh-fail-msg in dict");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        if (local-&gt;xdata_rsp) {</div><div class='add'>+            /* 'sh-fail-msg' has been set in the dict during self-heal.*/</div><div class='add'>+            dict_copy(local-&gt;xdata_rsp, dict);</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else if (ret &lt; 0) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (local-&gt;op == GF_FOP_GETXATTR)</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, ret, op_errno, dict, NULL);</div><div class='del'>-        else if (local-&gt;op == GF_FOP_SETXATTR)</div><div class='del'>-                AFR_STACK_UNWIND (setxattr, frame, ret, op_errno, NULL);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref(dict);</div><div class='del'>-        return ret;</div><div class='add'>+    if (local-&gt;op == GF_FOP_GETXATTR)</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, ret, op_errno, dict, NULL);</div><div class='add'>+    else if (local-&gt;op == GF_FOP_SETXATTR)</div><div class='add'>+        AFR_STACK_UNWIND(setxattr, frame, ret, op_errno, NULL);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_get_child_index_from_name (xlator_t *this, char *name)</div><div class='add'>+afr_get_child_index_from_name(xlator_t *this, char *name)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv  = this-&gt;private;</div><div class='del'>-        int            index = -1;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    int index = -1;</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; priv-&gt;child_count; index++) {</div><div class='del'>-                if (!strcmp (priv-&gt;children[index]-&gt;name, name))</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        index = -1;</div><div class='add'>+    for (index = 0; index &lt; priv-&gt;child_count; index++) {</div><div class='add'>+        if (!strcmp(priv-&gt;children[index]-&gt;name, name))</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    index = -1;</div><div class='ctx'> out:</div><div class='del'>-        return index;</div><div class='add'>+    return index;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_priv_need_heal_set (afr_private_t *priv, gf_boolean_t need_heal)</div><div class='add'>+afr_priv_need_heal_set(afr_private_t *priv, gf_boolean_t need_heal)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                priv-&gt;need_heal = need_heal;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        priv-&gt;need_heal = need_heal;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_set_need_heal (xlator_t *this, afr_local_t *local)</div><div class='add'>+afr_set_need_heal(xlator_t *this, afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int             i         = 0;</div><div class='del'>-        afr_private_t  *priv      = this-&gt;private;</div><div class='del'>-        gf_boolean_t    need_heal = _gf_false;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    gf_boolean_t need_heal = _gf_false;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].need_heal) {</div><div class='del'>-                        need_heal = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].need_heal) {</div><div class='add'>+            need_heal = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        afr_priv_need_heal_set (priv, need_heal);</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    afr_priv_need_heal_set(priv, need_heal);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_get_need_heal (xlator_t *this)</div><div class='add'>+afr_get_need_heal(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t  *priv      = this-&gt;private;</div><div class='del'>-        gf_boolean_t    need_heal = _gf_true;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    gf_boolean_t need_heal = _gf_true;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                need_heal = priv-&gt;need_heal;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        return need_heal;</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        need_heal = priv-&gt;need_heal;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+    return need_heal;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_get_msg_id (char *op_type)</div><div class='add'>+afr_get_msg_id(char *op_type)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        if (!strcmp (op_type, GF_AFR_REPLACE_BRICK))</div><div class='del'>-                return AFR_MSG_REPLACE_BRICK_STATUS;</div><div class='del'>-        else if (!strcmp (op_type, GF_AFR_ADD_BRICK))</div><div class='del'>-                return AFR_MSG_ADD_BRICK_STATUS;</div><div class='del'>-        return -1;</div><div class='add'>+    if (!strcmp(op_type, GF_AFR_REPLACE_BRICK))</div><div class='add'>+        return AFR_MSG_REPLACE_BRICK_STATUS;</div><div class='add'>+    else if (!strcmp(op_type, GF_AFR_ADD_BRICK))</div><div class='add'>+        return AFR_MSG_ADD_BRICK_STATUS;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fav_child_reset_sink_xattrs_cbk (int ret, call_frame_t *heal_frame,</div><div class='del'>-                                     void *opaque)</div><div class='add'>+afr_fav_child_reset_sink_xattrs_cbk(int ret, call_frame_t *heal_frame,</div><div class='add'>+                                    void *opaque)</div><div class='ctx'> {</div><div class='add'>+    call_frame_t *txn_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *heal_local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        call_frame_t *txn_frame = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_local_t *heal_local = NULL;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-</div><div class='del'>-        heal_local = heal_frame-&gt;local;</div><div class='del'>-        txn_frame = heal_local-&gt;heal_frame;</div><div class='del'>-        local = txn_frame-&gt;local;</div><div class='del'>-        this = txn_frame-&gt;this;</div><div class='add'>+    heal_local = heal_frame-&gt;local;</div><div class='add'>+    txn_frame = heal_local-&gt;heal_frame;</div><div class='add'>+    local = txn_frame-&gt;local;</div><div class='add'>+    this = txn_frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        /* Refresh the inode agan and proceed with the transaction.*/</div><div class='del'>-        afr_inode_refresh (txn_frame, this, local-&gt;inode, NULL,</div><div class='del'>-                           local-&gt;refreshfn);</div><div class='add'>+    /* Refresh the inode agan and proceed with the transaction.*/</div><div class='add'>+    afr_inode_refresh(txn_frame, this, local-&gt;inode, NULL, local-&gt;refreshfn);</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_DESTROY (heal_frame);</div><div class='add'>+    AFR_STACK_DESTROY(heal_frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fav_child_reset_sink_xattrs (void *opaque)</div><div class='del'>-{</div><div class='del'>-        call_frame_t *heal_frame = NULL;</div><div class='del'>-        call_frame_t *txn_frame = NULL;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_boolean_t d_spb = _gf_false;</div><div class='del'>-        gf_boolean_t m_spb = _gf_false;</div><div class='del'>-        afr_local_t *heal_local = NULL;</div><div class='del'>-        afr_local_t *txn_local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        inode_t *inode  = NULL;</div><div class='del'>-        unsigned char *locked_on = NULL;</div><div class='del'>-        unsigned char *sources = NULL;</div><div class='del'>-        unsigned char *sinks = NULL;</div><div class='del'>-        unsigned char *healed_sinks = NULL;</div><div class='del'>-        unsigned char *undid_pending = NULL;</div><div class='del'>-        struct afr_reply *locked_replies = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        heal_frame = (call_frame_t *) opaque;</div><div class='del'>-        heal_local = heal_frame-&gt;local;</div><div class='del'>-        txn_frame = heal_local-&gt;heal_frame;</div><div class='del'>-        txn_local = txn_frame-&gt;local;</div><div class='del'>-        this = txn_frame-&gt;this;</div><div class='del'>-        inode = txn_local-&gt;inode;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-        undid_pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-        locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        ret = _afr_is_split_brain (txn_frame, this, txn_local-&gt;replies,</div><div class='del'>-                                   AFR_DATA_TRANSACTION, &amp;d_spb);</div><div class='del'>-</div><div class='del'>-        ret = _afr_is_split_brain (txn_frame, this, txn_local-&gt;replies,</div><div class='del'>-                                   AFR_METADATA_TRANSACTION, &amp;m_spb);</div><div class='del'>-</div><div class='del'>-        /* Take appropriate locks and reset sink xattrs. */</div><div class='del'>-        if (d_spb) {</div><div class='del'>-                ret = afr_selfheal_inodelk (heal_frame, this, inode, this-&gt;name,</div><div class='del'>-                                            0, 0, locked_on);</div><div class='del'>-                {</div><div class='del'>-                        if (ret &lt; AFR_SH_MIN_PARTICIPANTS)</div><div class='del'>-                                goto data_unlock;</div><div class='del'>-                        ret = __afr_selfheal_data_prepare (heal_frame, this,</div><div class='del'>-                                                           inode, locked_on,</div><div class='del'>-                                                           sources, sinks,</div><div class='del'>-                                                           healed_sinks,</div><div class='del'>-                                                           undid_pending,</div><div class='del'>-                                                           locked_replies,</div><div class='del'>-                                                           NULL);</div><div class='del'>-                }</div><div class='del'>-data_unlock:</div><div class='del'>-                afr_selfheal_uninodelk (heal_frame, this, inode, this-&gt;name,</div><div class='del'>-                                        0, 0, locked_on);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (m_spb) {</div><div class='del'>-                memset (locked_on, 0, sizeof (*locked_on) * priv-&gt;child_count);</div><div class='del'>-                memset (undid_pending, 0,</div><div class='del'>-                        sizeof (*undid_pending) * priv-&gt;child_count);</div><div class='del'>-                ret = afr_selfheal_inodelk (heal_frame, this, inode, this-&gt;name,</div><div class='del'>-                                            LLONG_MAX-1, 0, locked_on);</div><div class='del'>-                {</div><div class='del'>-                        if (ret &lt; AFR_SH_MIN_PARTICIPANTS)</div><div class='del'>-                                goto mdata_unlock;</div><div class='del'>-                        ret = __afr_selfheal_metadata_prepare (heal_frame, this,</div><div class='del'>-                                                               inode, locked_on,</div><div class='del'>-                                                               sources, sinks,</div><div class='del'>-                                                               healed_sinks,</div><div class='del'>-                                                               undid_pending,</div><div class='del'>-                                                               locked_replies,</div><div class='del'>-                                                               NULL);</div><div class='del'>-</div><div class='del'>-                }</div><div class='del'>-mdata_unlock:</div><div class='del'>-                afr_selfheal_uninodelk (heal_frame, this, inode, this-&gt;name,</div><div class='del'>-                                        LLONG_MAX-1, 0, locked_on);</div><div class='add'>+afr_fav_child_reset_sink_xattrs(void *opaque)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='add'>+    call_frame_t *txn_frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_boolean_t d_spb = _gf_false;</div><div class='add'>+    gf_boolean_t m_spb = _gf_false;</div><div class='add'>+    afr_local_t *heal_local = NULL;</div><div class='add'>+    afr_local_t *txn_local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *undid_pending = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    heal_frame = (call_frame_t *)opaque;</div><div class='add'>+    heal_local = heal_frame-&gt;local;</div><div class='add'>+    txn_frame = heal_local-&gt;heal_frame;</div><div class='add'>+    txn_local = txn_frame-&gt;local;</div><div class='add'>+    this = txn_frame-&gt;this;</div><div class='add'>+    inode = txn_local-&gt;inode;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    undid_pending = alloca0(priv-&gt;child_count);</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = _afr_is_split_brain(txn_frame, this, txn_local-&gt;replies,</div><div class='add'>+                              AFR_DATA_TRANSACTION, &amp;d_spb);</div><div class='add'>+</div><div class='add'>+    ret = _afr_is_split_brain(txn_frame, this, txn_local-&gt;replies,</div><div class='add'>+                              AFR_METADATA_TRANSACTION, &amp;m_spb);</div><div class='add'>+</div><div class='add'>+    /* Take appropriate locks and reset sink xattrs. */</div><div class='add'>+    if (d_spb) {</div><div class='add'>+        ret = afr_selfheal_inodelk(heal_frame, this, inode, this-&gt;name, 0, 0,</div><div class='add'>+                                   locked_on);</div><div class='add'>+        {</div><div class='add'>+            if (ret &lt; AFR_SH_MIN_PARTICIPANTS)</div><div class='add'>+                goto data_unlock;</div><div class='add'>+            ret = __afr_selfheal_data_prepare(</div><div class='add'>+                heal_frame, this, inode, locked_on, sources, sinks,</div><div class='add'>+                healed_sinks, undid_pending, locked_replies, NULL);</div><div class='add'>+        }</div><div class='add'>+    data_unlock:</div><div class='add'>+        afr_selfheal_uninodelk(heal_frame, this, inode, this-&gt;name, 0, 0,</div><div class='add'>+                               locked_on);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (m_spb) {</div><div class='add'>+        memset(locked_on, 0, sizeof(*locked_on) * priv-&gt;child_count);</div><div class='add'>+        memset(undid_pending, 0, sizeof(*undid_pending) * priv-&gt;child_count);</div><div class='add'>+        ret = afr_selfheal_inodelk(heal_frame, this, inode, this-&gt;name,</div><div class='add'>+                                   LLONG_MAX - 1, 0, locked_on);</div><div class='add'>+        {</div><div class='add'>+            if (ret &lt; AFR_SH_MIN_PARTICIPANTS)</div><div class='add'>+                goto mdata_unlock;</div><div class='add'>+            ret = __afr_selfheal_metadata_prepare(</div><div class='add'>+                heal_frame, this, inode, locked_on, sources, sinks,</div><div class='add'>+                healed_sinks, undid_pending, locked_replies, NULL);</div><div class='ctx'>         }</div><div class='add'>+    mdata_unlock:</div><div class='add'>+        afr_selfheal_uninodelk(heal_frame, this, inode, this-&gt;name,</div><div class='add'>+                               LLONG_MAX - 1, 0, locked_on);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Concatenates the xattrs in local-&gt;replies separated by a delimiter.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-afr_serialize_xattrs_with_delimiter (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                     char *buf, const char *default_str,</div><div class='del'>-                                     int32_t *serz_len, char delimiter)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv      = NULL;</div><div class='del'>-        afr_local_t   *local     = NULL;</div><div class='del'>-        char          *xattr     = NULL;</div><div class='del'>-        int            i         = 0;</div><div class='del'>-        int            len       = 0;</div><div class='del'>-        size_t         str_len   = 0;</div><div class='del'>-        int            ret       = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid || local-&gt;replies[i].op_ret) {</div><div class='del'>-                        str_len = strlen (default_str);</div><div class='del'>-                        buf = strncat (buf, default_str, str_len);</div><div class='del'>-                        len += str_len;</div><div class='del'>-                        buf[len++] = delimiter;</div><div class='del'>-                        buf[len] = '\0';</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dict_get_str (local-&gt;replies[i].xattr,</div><div class='del'>-                                            local-&gt;cont.getxattr.name, &amp;xattr);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg ("TEST", GF_LOG_ERROR, -ret,</div><div class='del'>-                                        AFR_MSG_DICT_GET_FAILED,</div><div class='del'>-                                        "Failed to get the node_uuid of brick "</div><div class='del'>-                                        "%d", i);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        str_len = strlen (xattr);</div><div class='del'>-                        buf = strncat (buf, xattr, str_len);</div><div class='del'>-                        len += str_len;</div><div class='del'>-                        buf[len++] = delimiter;</div><div class='del'>-                        buf[len] = '\0';</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        buf[--len] = '\0'; /*remove the last delimiter*/</div><div class='del'>-        if (serz_len)</div><div class='del'>-                *serz_len = ++len;</div><div class='del'>-        ret = 0;</div><div class='add'>+afr_serialize_xattrs_with_delimiter(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                    char *buf, const char *default_str,</div><div class='add'>+                                    int32_t *serz_len, char delimiter)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    char *xattr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+    size_t str_len = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid || local-&gt;replies[i].op_ret) {</div><div class='add'>+            str_len = strlen(default_str);</div><div class='add'>+            buf = strncat(buf, default_str, str_len);</div><div class='add'>+            len += str_len;</div><div class='add'>+            buf[len++] = delimiter;</div><div class='add'>+            buf[len] = '\0';</div><div class='add'>+        } else {</div><div class='add'>+            ret = dict_get_str(local-&gt;replies[i].xattr,</div><div class='add'>+                               local-&gt;cont.getxattr.name, &amp;xattr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg("TEST", GF_LOG_ERROR, -ret, AFR_MSG_DICT_GET_FAILED,</div><div class='add'>+                       "Failed to get the node_uuid of brick "</div><div class='add'>+                       "%d",</div><div class='add'>+                       i);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            str_len = strlen(xattr);</div><div class='add'>+            buf = strncat(buf, xattr, str_len);</div><div class='add'>+            len += str_len;</div><div class='add'>+            buf[len++] = delimiter;</div><div class='add'>+            buf[len] = '\0';</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    buf[--len] = '\0'; /*remove the last delimiter*/</div><div class='add'>+    if (serz_len)</div><div class='add'>+        *serz_len = ++len;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-afr_write_subvol_get (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_write_subvol_get(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        uint64_t write_subvol = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    uint64_t write_subvol = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-                write_subvol = local-&gt;inode_ctx-&gt;write_subvol;</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    write_subvol = local-&gt;inode_ctx-&gt;write_subvol;</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return write_subvol;</div><div class='add'>+    return write_subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_write_subvol_set (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_local_t      *local = NULL;</div><div class='del'>-        afr_private_t    *priv  = NULL;</div><div class='del'>-        unsigned char    *data_accused = NULL;</div><div class='del'>-        unsigned char    *metadata_accused = NULL;</div><div class='del'>-        unsigned char    *data_readable = NULL;</div><div class='del'>-        unsigned char    *metadata_readable = NULL;</div><div class='del'>-        uint16_t          datamap = 0;</div><div class='del'>-        uint16_t          metadatamap = 0;</div><div class='del'>-        uint64_t          val   = 0;</div><div class='del'>-        int               event = 0;</div><div class='del'>-        int               i     = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        data_accused = alloca0 (priv-&gt;child_count);</div><div class='del'>-        metadata_accused = alloca0 (priv-&gt;child_count);</div><div class='del'>-        data_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-        metadata_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-        event = local-&gt;event_generation;</div><div class='del'>-</div><div class='del'>-        afr_readables_fill (frame, this, local-&gt;inode, data_accused,</div><div class='del'>-                            metadata_accused, data_readable, metadata_readable,</div><div class='del'>-                            NULL);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (data_readable[i])</div><div class='del'>-                        datamap |= (1 &lt;&lt; i);</div><div class='del'>-                if (metadata_readable[i])</div><div class='del'>-                        metadatamap |= (1 &lt;&lt; i);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        val = ((uint64_t) metadatamap) |</div><div class='del'>-              (((uint64_t) datamap) &lt;&lt; 16) |</div><div class='del'>-              (((uint64_t) event) &lt;&lt; 32);</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (local-&gt;inode_ctx-&gt;write_subvol == 0 &amp;&amp;</div><div class='del'>-                    local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='del'>-                        local-&gt;inode_ctx-&gt;write_subvol = val;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+afr_write_subvol_set(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *data_accused = NULL;</div><div class='add'>+    unsigned char *metadata_accused = NULL;</div><div class='add'>+    unsigned char *data_readable = NULL;</div><div class='add'>+    unsigned char *metadata_readable = NULL;</div><div class='add'>+    uint16_t datamap = 0;</div><div class='add'>+    uint16_t metadatamap = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+    int event = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    data_accused = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata_accused = alloca0(priv-&gt;child_count);</div><div class='add'>+    data_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    event = local-&gt;event_generation;</div><div class='add'>+</div><div class='add'>+    afr_readables_fill(frame, this, local-&gt;inode, data_accused,</div><div class='add'>+                       metadata_accused, data_readable, metadata_readable,</div><div class='add'>+                       NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (data_readable[i])</div><div class='add'>+            datamap |= (1 &lt;&lt; i);</div><div class='add'>+        if (metadata_readable[i])</div><div class='add'>+            metadatamap |= (1 &lt;&lt; i);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    val = ((uint64_t)metadatamap) | (((uint64_t)datamap) &lt;&lt; 16) |</div><div class='add'>+          (((uint64_t)event) &lt;&lt; 32);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (local-&gt;inode_ctx-&gt;write_subvol == 0 &amp;&amp;</div><div class='add'>+            local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='add'>+            local-&gt;inode_ctx-&gt;write_subvol = val;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_write_subvol_reset (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_write_subvol_reset(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t      *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                GF_ASSERT (local-&gt;inode_ctx-&gt;lock_count &gt; 0);</div><div class='del'>-                local-&gt;inode_ctx-&gt;lock_count--;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        GF_ASSERT(local-&gt;inode_ctx-&gt;lock_count &gt; 0);</div><div class='add'>+        local-&gt;inode_ctx-&gt;lock_count--;</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;inode_ctx-&gt;lock_count)</div><div class='del'>-                        local-&gt;inode_ctx-&gt;write_subvol = 0;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+        if (!local-&gt;inode_ctx-&gt;lock_count)</div><div class='add'>+            local-&gt;inode_ctx-&gt;write_subvol = 0;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_set_inode_local (xlator_t *this, afr_local_t *local, inode_t *inode)</div><div class='add'>+afr_set_inode_local(xlator_t *this, afr_local_t *local, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local-&gt;inode = inode_ref (inode);</div><div class='del'>-        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __afr_inode_ctx_get (this, local-&gt;inode,</div><div class='del'>-                                           &amp;local-&gt;inode_ctx);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_callingfn (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                  AFR_MSG_INODE_CTX_GET_FAILED,</div><div class='del'>-                                  "Error getting inode ctx %s",</div><div class='del'>-                                  uuid_utoa (local-&gt;inode-&gt;gfid));</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    local-&gt;inode = inode_ref(inode);</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_inode_ctx_get(this, local-&gt;inode, &amp;local-&gt;inode_ctx);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_callingfn(</div><div class='add'>+            this-&gt;name, GF_LOG_ERROR, ENOMEM, AFR_MSG_INODE_CTX_GET_FAILED,</div><div class='add'>+            "Error getting inode ctx %s", uuid_utoa(local-&gt;inode-&gt;gfid));</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_ta_is_fop_called_from_synctask (xlator_t *this)</div><div class='add'>+afr_ta_is_fop_called_from_synctask(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        struct synctask *task      = NULL;</div><div class='del'>-        gf_lkowner_t    tmp_owner  = {0,};</div><div class='add'>+    struct synctask *task = NULL;</div><div class='add'>+    gf_lkowner_t tmp_owner = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        task = synctask_get ();</div><div class='del'>-        if (!task)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    task = synctask_get();</div><div class='add'>+    if (!task)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        set_lk_owner_from_ptr(&amp;tmp_owner, (void *)this);</div><div class='add'>+    set_lk_owner_from_ptr(&amp;tmp_owner, (void *)this);</div><div class='ctx'> </div><div class='del'>-        if (!is_same_lkowner (&amp;tmp_owner, &amp;task-&gt;frame-&gt;root-&gt;lk_owner))</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!is_same_lkowner(&amp;tmp_owner, &amp;task-&gt;frame-&gt;root-&gt;lk_owner))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_ta_post_op_lock (xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        /*Note: At any given time, only one instance of this function must</div><div class='del'>-        * be in progress.*/</div><div class='del'>-</div><div class='del'>-        int             ret    = 0;</div><div class='del'>-        uuid_t          gfid   = {0,};</div><div class='del'>-        afr_private_t   *priv  = this-&gt;private;</div><div class='del'>-        gf_boolean_t    locked = _gf_false;</div><div class='del'>-        struct gf_flock flock1 = {0, };</div><div class='del'>-        struct gf_flock flock2 = {0, };</div><div class='del'>-        int32_t         cmd    = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (afr_ta_is_fop_called_from_synctask (this));</div><div class='del'>-        flock1.l_type = F_WRLCK;</div><div class='del'>-</div><div class='del'>-        while (!locked) {</div><div class='del'>-                if (priv-&gt;shd.iamshd) {</div><div class='del'>-                        cmd = F_SETLKW;</div><div class='del'>-                        flock1.l_start = 0;</div><div class='del'>-                        flock1.l_len = 0;</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        cmd = F_SETLK;</div><div class='del'>-                        if (priv-&gt;ta_notify_dom_lock_offset) {</div><div class='del'>-                                flock1.l_start =</div><div class='del'>-                                        priv-&gt;ta_notify_dom_lock_offset;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_uuid_generate (gfid);</div><div class='del'>-                                flock1.l_start = gfid_to_ino (gfid);</div><div class='del'>-                                if (flock1.l_start &lt; 0)</div><div class='del'>-                                        flock1.l_start = -flock1.l_start;</div><div class='del'>-                        }</div><div class='del'>-                        flock1.l_len = 1;</div><div class='del'>-                }</div><div class='del'>-                ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                                      AFR_TA_DOM_NOTIFY, loc, cmd, &amp;flock1,</div><div class='del'>-                                      NULL, NULL);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        locked = _gf_true;</div><div class='del'>-                        priv-&gt;ta_notify_dom_lock_offset = flock1.l_start;</div><div class='del'>-                } else if (ret == -EAGAIN) {</div><div class='del'>-                        continue;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                AFR_MSG_THIN_ARB, "Failed to get "</div><div class='del'>-                                "AFR_TA_DOM_NOTIFY lock on %s.", loc-&gt;name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+afr_ta_post_op_lock(xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    /*Note: At any given time, only one instance of this function must</div><div class='add'>+     * be in progress.*/</div><div class='add'>+</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    gf_boolean_t locked = _gf_false;</div><div class='add'>+    struct gf_flock flock1 = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock flock2 = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t cmd = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(afr_ta_is_fop_called_from_synctask(this));</div><div class='add'>+    flock1.l_type = F_WRLCK;</div><div class='add'>+</div><div class='add'>+    while (!locked) {</div><div class='add'>+        if (priv-&gt;shd.iamshd) {</div><div class='add'>+            cmd = F_SETLKW;</div><div class='add'>+            flock1.l_start = 0;</div><div class='add'>+            flock1.l_len = 0;</div><div class='ctx'> </div><div class='del'>-        flock2.l_type = F_WRLCK;</div><div class='del'>-        flock2.l_start = 0;</div><div class='del'>-        flock2.l_len = 0;</div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_MODIFY, loc, F_SETLKW, &amp;flock2,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to get AFR_TA_DOM_MODIFY lock.");</div><div class='del'>-                flock1.l_type = F_UNLCK;</div><div class='del'>-                ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                                      AFR_TA_DOM_NOTIFY, loc, F_SETLK, &amp;flock1,</div><div class='del'>-                                      NULL, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            cmd = F_SETLK;</div><div class='add'>+            if (priv-&gt;ta_notify_dom_lock_offset) {</div><div class='add'>+                flock1.l_start = priv-&gt;ta_notify_dom_lock_offset;</div><div class='add'>+            } else {</div><div class='add'>+                gf_uuid_generate(gfid);</div><div class='add'>+                flock1.l_start = gfid_to_ino(gfid);</div><div class='add'>+                if (flock1.l_start &lt; 0)</div><div class='add'>+                    flock1.l_start = -flock1.l_start;</div><div class='add'>+            }</div><div class='add'>+            flock1.l_len = 1;</div><div class='ctx'>         }</div><div class='add'>+        ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                             AFR_TA_DOM_NOTIFY, loc, cmd, &amp;flock1, NULL, NULL);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            locked = _gf_true;</div><div class='add'>+            priv-&gt;ta_notify_dom_lock_offset = flock1.l_start;</div><div class='add'>+        } else if (ret == -EAGAIN) {</div><div class='add'>+            continue;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+                   "Failed to get "</div><div class='add'>+                   "AFR_TA_DOM_NOTIFY lock on %s.",</div><div class='add'>+                   loc-&gt;name);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    flock2.l_type = F_WRLCK;</div><div class='add'>+    flock2.l_start = 0;</div><div class='add'>+    flock2.l_len = 0;</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_MODIFY, loc, F_SETLKW, &amp;flock2, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to get AFR_TA_DOM_MODIFY lock.");</div><div class='add'>+        flock1.l_type = F_UNLCK;</div><div class='add'>+        ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                             AFR_TA_DOM_NOTIFY, loc, F_SETLK, &amp;flock1, NULL,</div><div class='add'>+                             NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_ta_post_op_unlock (xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        afr_private_t           *priv = this-&gt;private;</div><div class='del'>-        struct gf_flock         flock = {0, };</div><div class='del'>-        int                     ret   = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (afr_ta_is_fop_called_from_synctask (this));</div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='del'>-        flock.l_start = 0;</div><div class='del'>-        flock.l_len = 0;</div><div class='del'>-</div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_MODIFY, loc, F_SETLK, &amp;flock, NULL,</div><div class='del'>-                              NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to unlock AFR_TA_DOM_MODIFY lock.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;shd.iamshd)</div><div class='del'>-                /* Mounts (clients) will not release the AFR_TA_DOM_NOTIFY lock</div><div class='del'>-                 * in post-op as they use it as a notification mechanism. When</div><div class='del'>-                 * shd sends a lock request on TA during heal, the clients will</div><div class='del'>-                 * receive a lock-contention upcall notification upon which they</div><div class='del'>-                 * will release the AFR_TA_DOM_NOTIFY lock after completing the</div><div class='del'>-                 * in flight I/O.*/</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_NOTIFY, loc, F_SETLK, &amp;flock,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to unlock AFR_TA_DOM_NOTIFY lock.");</div><div class='del'>-        }</div><div class='add'>+afr_ta_post_op_unlock(xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(afr_ta_is_fop_called_from_synctask(this));</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    flock.l_start = 0;</div><div class='add'>+    flock.l_len = 0;</div><div class='add'>+</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_MODIFY, loc, F_SETLK, &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to unlock AFR_TA_DOM_MODIFY lock.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;shd.iamshd)</div><div class='add'>+        /* Mounts (clients) will not release the AFR_TA_DOM_NOTIFY lock</div><div class='add'>+         * in post-op as they use it as a notification mechanism. When</div><div class='add'>+         * shd sends a lock request on TA during heal, the clients will</div><div class='add'>+         * receive a lock-contention upcall notification upon which they</div><div class='add'>+         * will release the AFR_TA_DOM_NOTIFY lock after completing the</div><div class='add'>+         * in flight I/O.*/</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_NOTIFY, loc, F_SETLK, &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to unlock AFR_TA_DOM_NOTIFY lock.");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_frame_t *</div><div class='del'>-afr_ta_frame_create (xlator_t *this)</div><div class='add'>+afr_ta_frame_create(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *frame    = NULL;</div><div class='del'>-        void         *lk_owner = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    void *lk_owner = NULL;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                return NULL;</div><div class='del'>-        lk_owner = (void *)this;</div><div class='del'>-        afr_set_lk_owner (frame, this, lk_owner);</div><div class='del'>-        return frame;</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        return NULL;</div><div class='add'>+    lk_owner = (void *)this;</div><div class='add'>+    afr_set_lk_owner(frame, this, lk_owner);</div><div class='add'>+    return frame;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-dir-read.c b/xlators/cluster/afr/src/afr-dir-read.c<br/>index 76d0cdfa826..4c40e85f393 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-dir-read.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-dir-read.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-dir-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-dir-read.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include &lt;libgen.h&gt;</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;fnmatch.h&gt;</div><div class='hunk'>@@ -33,327 +32,309 @@</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-transaction.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_opendir_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                 xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local             = NULL;</div><div class='del'>-        int            call_count        = -1;</div><div class='del'>-        int32_t        child_index       = 0;</div><div class='del'>-	afr_fd_ctx_t  *fd_ctx = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	fd_ctx = local-&gt;fd_ctx;</div><div class='del'>-        child_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-			fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-			fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='del'>-			if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-				local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-                }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int32_t child_index = 0;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    fd_ctx = local-&gt;fd_ctx;</div><div class='add'>+    child_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0)</div><div class='del'>-		AFR_STACK_UNWIND (opendir, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, local-&gt;fd, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_UNWIND(opendir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;fd, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)</div><div class='add'>+afr_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t * priv        = NULL;</div><div class='del'>-        afr_local_t   * local       = NULL;</div><div class='del'>-        int             i           = 0;</div><div class='del'>-        int             call_count  = -1;</div><div class='del'>-        int32_t         op_errno    = ENOMEM;</div><div class='del'>-	afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_OPENDIR;</div><div class='del'>-        if (!afr_is_consistent_io_possible (local, priv, &amp;op_errno))</div><div class='del'>-		goto out;</div><div class='add'>+    local-&gt;op = GF_FOP_OPENDIR;</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, priv, &amp;op_errno))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	fd_ctx = afr_fd_ctx_get (fd, this);</div><div class='del'>-	if (!fd_ctx)</div><div class='del'>-		goto out;</div><div class='add'>+    fd_ctx = afr_fd_ctx_get(fd, this);</div><div class='add'>+    if (!fd_ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd    = fd_ref (fd);</div><div class='del'>-	local-&gt;fd_ctx = fd_ctx;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;fd_ctx = fd_ctx;</div><div class='ctx'> </div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_opendir_cbk,</div><div class='del'>-                                           (void*) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;opendir,</div><div class='del'>-                                           loc, fd, NULL);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, afr_opendir_cbk, (void *)(long)i,</div><div class='add'>+                              priv-&gt;children[i],</div><div class='add'>+                              priv-&gt;children[i]-&gt;fops-&gt;opendir, loc, fd, NULL);</div><div class='ctx'> </div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (opendir, frame, -1, op_errno, fd, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(opendir, frame, -1, op_errno, fd, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_validate_read_subvol (inode_t *inode, xlator_t *this, int par_read_subvol)</div><div class='add'>+afr_validate_read_subvol(inode_t *inode, xlator_t *this, int par_read_subvol)</div><div class='ctx'> {</div><div class='del'>-	int             gen               = 0;</div><div class='del'>-        int             entry_read_subvol = 0;</div><div class='del'>-	unsigned char  *data_readable     = NULL;</div><div class='del'>-	unsigned char  *metadata_readable = NULL;</div><div class='del'>-        afr_private_t  *priv              = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-	data_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-	metadata_readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	afr_inode_read_subvol_get (inode, this, data_readable,</div><div class='del'>-				   metadata_readable, &amp;gen);</div><div class='del'>-</div><div class='del'>-        if (gen != priv-&gt;event_generation ||</div><div class='del'>-                !data_readable[par_read_subvol] ||</div><div class='del'>-                !metadata_readable[par_read_subvol])</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        /* Once the control reaches the following statement, it means that the</div><div class='del'>-         * parent's read subvol is perfectly readable. So calling</div><div class='del'>-         * either afr_data_subvol_get() or afr_metadata_subvol_get() would</div><div class='del'>-         * yield the same result. Hence, choosing afr_data_subvol_get() below.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;consistent_metadata)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        /* For an inode fetched through readdirp which is yet to be linked,</div><div class='del'>-         * inode ctx would not be initialised (yet). So this function returns</div><div class='del'>-         * -1 above due to gen being 0, which is why it is OK to pass NULL for</div><div class='del'>-         *  read_subvol_args here.</div><div class='del'>-         */</div><div class='del'>-        entry_read_subvol = afr_data_subvol_get (inode, this, NULL, NULL,</div><div class='del'>-                                                 NULL, NULL);</div><div class='del'>-        if (entry_read_subvol != par_read_subvol)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='add'>+    int gen = 0;</div><div class='add'>+    int entry_read_subvol = 0;</div><div class='add'>+    unsigned char *data_readable = NULL;</div><div class='add'>+    unsigned char *metadata_readable = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    data_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata_readable = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    afr_inode_read_subvol_get(inode, this, data_readable, metadata_readable,</div><div class='add'>+                              &amp;gen);</div><div class='add'>+</div><div class='add'>+    if (gen != priv-&gt;event_generation || !data_readable[par_read_subvol] ||</div><div class='add'>+        !metadata_readable[par_read_subvol])</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    /* Once the control reaches the following statement, it means that the</div><div class='add'>+     * parent's read subvol is perfectly readable. So calling</div><div class='add'>+     * either afr_data_subvol_get() or afr_metadata_subvol_get() would</div><div class='add'>+     * yield the same result. Hence, choosing afr_data_subvol_get() below.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;consistent_metadata)</div><div class='ctx'>         return 0;</div><div class='ctx'> </div><div class='add'>+    /* For an inode fetched through readdirp which is yet to be linked,</div><div class='add'>+     * inode ctx would not be initialised (yet). So this function returns</div><div class='add'>+     * -1 above due to gen being 0, which is why it is OK to pass NULL for</div><div class='add'>+     *  read_subvol_args here.</div><div class='add'>+     */</div><div class='add'>+    entry_read_subvol = afr_data_subvol_get(inode, this, NULL, NULL, NULL,</div><div class='add'>+                                            NULL);</div><div class='add'>+    if (entry_read_subvol != par_read_subvol)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_readdir_transform_entries (gf_dirent_t *subvol_entries, int subvol,</div><div class='del'>-			       gf_dirent_t *entries, fd_t *fd)</div><div class='add'>+afr_readdir_transform_entries(gf_dirent_t *subvol_entries, int subvol,</div><div class='add'>+                              gf_dirent_t *entries, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int            ret   = -1;</div><div class='del'>-        gf_dirent_t   *entry = NULL;</div><div class='del'>-        gf_dirent_t   *tmp   = NULL;</div><div class='del'>-        xlator_t      *this  = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        gf_boolean_t  need_heal = _gf_false;</div><div class='del'>-        gf_boolean_t  validate_subvol = _gf_false;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        need_heal = afr_get_need_heal (this);</div><div class='del'>-        validate_subvol = need_heal | priv-&gt;consistent_metadata;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (entry, tmp, &amp;subvol_entries-&gt;list, list) {</div><div class='del'>-                if (__is_root_gfid (fd-&gt;inode-&gt;gfid) &amp;&amp;</div><div class='del'>-                    !strcmp (entry-&gt;d_name, GF_REPLICATE_TRASH_DIR)) {</div><div class='del'>-			continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		list_del_init (&amp;entry-&gt;list);</div><div class='del'>-		list_add_tail (&amp;entry-&gt;list, &amp;entries-&gt;list);</div><div class='del'>-</div><div class='del'>-                if (!validate_subvol)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-		if (entry-&gt;inode) {</div><div class='del'>-                        ret = afr_validate_read_subvol (entry-&gt;inode, this,</div><div class='del'>-                                                        subvol);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-				inode_unref (entry-&gt;inode);</div><div class='del'>-				entry-&gt;inode = NULL;</div><div class='del'>-                                continue;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t need_heal = _gf_false;</div><div class='add'>+    gf_boolean_t validate_subvol = _gf_false;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    need_heal = afr_get_need_heal(this);</div><div class='add'>+    validate_subvol = need_heal | priv-&gt;consistent_metadata;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(entry, tmp, &amp;subvol_entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if (__is_root_gfid(fd-&gt;inode-&gt;gfid) &amp;&amp;</div><div class='add'>+            !strcmp(entry-&gt;d_name, GF_REPLICATE_TRASH_DIR)) {</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+        list_del_init(&amp;entry-&gt;list);</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;entries-&gt;list);</div><div class='add'>+</div><div class='add'>+        if (!validate_subvol)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (entry-&gt;inode) {</div><div class='add'>+            ret = afr_validate_read_subvol(entry-&gt;inode, this, subvol);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                inode_unref(entry-&gt;inode);</div><div class='add'>+                entry-&gt;inode = NULL;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		 int32_t op_ret, int32_t op_errno, gf_dirent_t *subvol_entries,</div><div class='del'>-		 dict_t *xdata)</div><div class='add'>+afr_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, gf_dirent_t *subvol_entries,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	gf_dirent_t  entries;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='ctx'> </div><div class='del'>-	INIT_LIST_HEAD (&amp;entries.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0 &amp;&amp; !local-&gt;cont.readdir.offset) {</div><div class='del'>-		/* failover only if this was first readdir, detected</div><div class='del'>-		   by offset == 0 */</div><div class='del'>-		local-&gt;op_ret = op_ret;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; !local-&gt;cont.readdir.offset) {</div><div class='add'>+        /* failover only if this was first readdir, detected</div><div class='add'>+           by offset == 0 */</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (op_ret &gt;= 0)</div><div class='del'>-		afr_readdir_transform_entries (subvol_entries, (long) cookie,</div><div class='del'>-					       &amp;entries, local-&gt;fd);</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        afr_readdir_transform_entries(subvol_entries, (long)cookie, &amp;entries,</div><div class='add'>+                                      local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_UNWIND (readdir, frame, op_ret, op_errno, &amp;entries, xdata);</div><div class='add'>+    AFR_STACK_UNWIND(readdir, frame, op_ret, op_errno, &amp;entries, xdata);</div><div class='ctx'> </div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_readdir_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_readdir_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_fd_ctx_t *fd_ctx = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	fd_ctx = afr_fd_ctx_get (local-&gt;fd, this);</div><div class='del'>-        if (!fd_ctx) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (subvol == -1 || !fd_ctx) {</div><div class='del'>-		AFR_STACK_UNWIND (readdir, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, 0, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	fd_ctx-&gt;readdir_subvol = subvol;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op == GF_FOP_READDIR)</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_readdir_cbk,</div><div class='del'>-                                   (void *) (long) subvol,</div><div class='del'>-                                   priv-&gt;children[subvol],</div><div class='del'>-                                   priv-&gt;children[subvol]-&gt;fops-&gt;readdir,</div><div class='del'>-				   local-&gt;fd, local-&gt;cont.readdir.size,</div><div class='del'>-                                   local-&gt;cont.readdir.offset,</div><div class='del'>-				   local-&gt;xdata_req);</div><div class='del'>-        else</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_readdir_cbk,</div><div class='del'>-                                   (void *) (long) subvol,</div><div class='del'>-                                   priv-&gt;children[subvol],</div><div class='del'>-                                   priv-&gt;children[subvol]-&gt;fops-&gt;readdirp,</div><div class='del'>-				   local-&gt;fd, local-&gt;cont.readdir.size,</div><div class='del'>-				   local-&gt;cont.readdir.offset,</div><div class='del'>-				   local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    fd_ctx = afr_fd_ctx_get(local-&gt;fd, this);</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (subvol == -1 || !fd_ctx) {</div><div class='add'>+        AFR_STACK_UNWIND(readdir, frame, local-&gt;op_ret, local-&gt;op_errno, 0, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_ctx-&gt;readdir_subvol = subvol;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;op == GF_FOP_READDIR)</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_readdir_cbk, (void *)(long)subvol,</div><div class='add'>+                          priv-&gt;children[subvol],</div><div class='add'>+                          priv-&gt;children[subvol]-&gt;fops-&gt;readdir, local-&gt;fd,</div><div class='add'>+                          local-&gt;cont.readdir.size, local-&gt;cont.readdir.offset,</div><div class='add'>+                          local-&gt;xdata_req);</div><div class='add'>+    else</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_readdir_cbk, (void *)(long)subvol,</div><div class='add'>+                          priv-&gt;children[subvol],</div><div class='add'>+                          priv-&gt;children[subvol]-&gt;fops-&gt;readdirp, local-&gt;fd,</div><div class='add'>+                          local-&gt;cont.readdir.size, local-&gt;cont.readdir.offset,</div><div class='add'>+                          local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-		off_t offset, int whichop, dict_t *dict)</div><div class='add'>+afr_do_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t offset, int whichop, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local     = NULL;</div><div class='del'>-        int32_t       op_errno   = 0;</div><div class='del'>-	int           subvol = -1;</div><div class='del'>-	afr_fd_ctx_t *fd_ctx = NULL;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	fd_ctx = afr_fd_ctx_get (fd, this);</div><div class='del'>-	if (!fd_ctx) {</div><div class='del'>-	        op_errno = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	local-&gt;op = whichop;</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;cont.readdir.size = size;</div><div class='del'>-	local-&gt;cont.readdir.offset = offset;</div><div class='del'>-        local-&gt;xdata_req = (dict)? dict_ref (dict) : NULL;</div><div class='del'>-</div><div class='del'>-	subvol = fd_ctx-&gt;readdir_subvol;</div><div class='del'>-</div><div class='del'>-	if (offset == 0 || subvol == -1) {</div><div class='del'>-		/* First readdir has option of failing over and selecting</div><div class='del'>-		   an appropriate read subvolume */</div><div class='del'>-		afr_read_txn (frame, this, fd-&gt;inode, afr_readdir_wind,</div><div class='del'>-			      AFR_DATA_TRANSACTION);</div><div class='del'>-	} else {</div><div class='del'>-		/* But continued readdirs MUST stick to the same subvolume</div><div class='del'>-		   without an option to failover */</div><div class='del'>-		afr_readdir_wind (frame, this, subvol);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int subvol = -1;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fd_ctx = afr_fd_ctx_get(fd, this);</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op = whichop;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;cont.readdir.size = size;</div><div class='add'>+    local-&gt;cont.readdir.offset = offset;</div><div class='add'>+    local-&gt;xdata_req = (dict) ? dict_ref(dict) : NULL;</div><div class='add'>+</div><div class='add'>+    subvol = fd_ctx-&gt;readdir_subvol;</div><div class='add'>+</div><div class='add'>+    if (offset == 0 || subvol == -1) {</div><div class='add'>+        /* First readdir has option of failing over and selecting</div><div class='add'>+           an appropriate read subvolume */</div><div class='add'>+        afr_read_txn(frame, this, fd-&gt;inode, afr_readdir_wind,</div><div class='add'>+                     AFR_DATA_TRANSACTION);</div><div class='add'>+    } else {</div><div class='add'>+        /* But continued readdirs MUST stick to the same subvolume</div><div class='add'>+           without an option to failover */</div><div class='add'>+        afr_readdir_wind(frame, this, subvol);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        AFR_STACK_UNWIND (readdir, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(readdir, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-             off_t offset, dict_t *xdata)</div><div class='add'>+afr_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_do_readdir (frame, this, fd, size, offset, GF_FOP_READDIR, xdata);</div><div class='add'>+    afr_do_readdir(frame, this, fd, size, offset, GF_FOP_READDIR, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-              off_t offset, dict_t *dict)</div><div class='add'>+afr_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+             off_t offset, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        afr_do_readdir (frame, this, fd, size, offset, GF_FOP_READDIRP, dict);</div><div class='add'>+    afr_do_readdir(frame, this, fd, size, offset, GF_FOP_READDIRP, dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+afr_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        afr_cleanup_fd_ctx (this, fd);</div><div class='add'>+    afr_cleanup_fd_ctx(this, fd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c<br/>index 0e3ae18b46a..5725b1c5cb3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-dir-write.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-dir-write.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-dir-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-dir-write.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include &lt;libgen.h&gt;</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;fnmatch.h&gt;</div><div class='hunk'>@@ -34,501 +33,470 @@</div><div class='ctx'> #include "afr-transaction.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_mark_entry_pending_changelog (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_mark_entry_pending_changelog(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_build_parent_loc (loc_t *parent, loc_t *child, int32_t *op_errno)</div><div class='add'>+afr_build_parent_loc(loc_t *parent, loc_t *child, int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        char    *child_path = NULL;</div><div class='del'>-</div><div class='del'>-        if (!child-&gt;parent) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        child_path = gf_strdup (child-&gt;path);</div><div class='del'>-        if (!child_path) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        parent-&gt;path = gf_strdup (dirname (child_path));</div><div class='del'>-        if (!parent-&gt;path) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        parent-&gt;inode = inode_ref (child-&gt;parent);</div><div class='del'>-	gf_uuid_copy (parent-&gt;gfid, child-&gt;pargfid);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *child_path = NULL;</div><div class='add'>+</div><div class='add'>+    if (!child-&gt;parent) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    child_path = gf_strdup(child-&gt;path);</div><div class='add'>+    if (!child_path) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent-&gt;path = gf_strdup(dirname(child_path));</div><div class='add'>+    if (!parent-&gt;path) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent-&gt;inode = inode_ref(child-&gt;parent);</div><div class='add'>+    gf_uuid_copy(parent-&gt;gfid, child-&gt;pargfid);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (child_path);</div><div class='add'>+    GF_FREE(child_path);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__afr_dir_write_finalize (call_frame_t *frame, xlator_t *this)</div><div class='add'>+__afr_dir_write_finalize(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int inode_read_subvol = -1;</div><div class='del'>-	int parent_read_subvol = -1;</div><div class='del'>-	int parent2_read_subvol = -1;</div><div class='del'>-	int i = 0;</div><div class='del'>-        afr_read_subvol_args_t args = {0,};</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-	        if (!local-&gt;replies[i].valid)</div><div class='del'>-	                continue;</div><div class='del'>-	        if (local-&gt;replies[i].op_ret == -1)</div><div class='del'>-	                continue;</div><div class='del'>-                gf_uuid_copy (args.gfid, local-&gt;replies[i].poststat.ia_gfid);</div><div class='del'>-                args.ia_type = local-&gt;replies[i].poststat.ia_type;</div><div class='del'>-                break;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int inode_read_subvol = -1;</div><div class='add'>+    int parent_read_subvol = -1;</div><div class='add'>+    int parent2_read_subvol = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_read_subvol_args_t args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        gf_uuid_copy(args.gfid, local-&gt;replies[i].poststat.ia_gfid);</div><div class='add'>+        args.ia_type = local-&gt;replies[i].poststat.ia_type;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;inode) {</div><div class='add'>+        afr_replies_interpret(frame, this, local-&gt;inode, NULL);</div><div class='add'>+        inode_read_subvol = afr_data_subvol_get(local-&gt;inode, this, NULL, NULL,</div><div class='add'>+                                                NULL, &amp;args);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;parent)</div><div class='add'>+        parent_read_subvol = afr_data_subvol_get(local-&gt;parent, this, NULL,</div><div class='add'>+                                                 local-&gt;readable, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;parent2)</div><div class='add'>+        parent2_read_subvol = afr_data_subvol_get(local-&gt;parent2, this, NULL,</div><div class='add'>+                                                  local-&gt;readable2, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='add'>+    afr_pick_error_xdata(local, priv, local-&gt;parent, local-&gt;readable,</div><div class='add'>+                         local-&gt;parent2, local-&gt;readable2);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret &lt; 0) {</div><div class='add'>+            if (local-&gt;inode)</div><div class='add'>+                afr_inode_event_gen_reset(local-&gt;inode, this);</div><div class='add'>+            if (local-&gt;parent)</div><div class='add'>+                afr_inode_event_gen_reset(local-&gt;parent, this);</div><div class='add'>+            if (local-&gt;parent2)</div><div class='add'>+                afr_inode_event_gen_reset(local-&gt;parent2, this);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;inode) {</div><div class='del'>-		afr_replies_interpret (frame, this, local-&gt;inode, NULL);</div><div class='del'>-		inode_read_subvol = afr_data_subvol_get (local-&gt;inode, this,</div><div class='del'>-                                                       NULL, NULL, NULL, &amp;args);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (local-&gt;parent)</div><div class='del'>-		parent_read_subvol = afr_data_subvol_get (local-&gt;parent, this,</div><div class='del'>-                                             NULL, local-&gt;readable, NULL, NULL);</div><div class='del'>-</div><div class='del'>-	if (local-&gt;parent2)</div><div class='del'>-		parent2_read_subvol = afr_data_subvol_get (local-&gt;parent2, this,</div><div class='del'>-                                            NULL, local-&gt;readable2, NULL, NULL);</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-        afr_pick_error_xdata (local, priv, local-&gt;parent, local-&gt;readable,</div><div class='del'>-                              local-&gt;parent2, local-&gt;readable2);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!local-&gt;replies[i].valid)</div><div class='del'>-			continue;</div><div class='del'>-		if (local-&gt;replies[i].op_ret &lt; 0) {</div><div class='del'>-			if (local-&gt;inode)</div><div class='del'>-				afr_inode_event_gen_reset (local-&gt;inode, this);</div><div class='del'>-			if (local-&gt;parent)</div><div class='del'>-				afr_inode_event_gen_reset (local-&gt;parent,</div><div class='del'>-							     this);</div><div class='del'>-			if (local-&gt;parent2)</div><div class='del'>-				afr_inode_event_gen_reset (local-&gt;parent2,</div><div class='del'>-							     this);</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (local-&gt;op_ret == -1) {</div><div class='del'>-			local-&gt;op_ret = local-&gt;replies[i].op_ret;</div><div class='del'>-			local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='del'>-</div><div class='del'>-			local-&gt;cont.dir_fop.buf =</div><div class='del'>-				local-&gt;replies[i].poststat;</div><div class='del'>-			local-&gt;cont.dir_fop.preparent =</div><div class='del'>-				local-&gt;replies[i].preparent;</div><div class='del'>-			local-&gt;cont.dir_fop.postparent =</div><div class='del'>-				local-&gt;replies[i].postparent;</div><div class='del'>-			local-&gt;cont.dir_fop.prenewparent =</div><div class='del'>-				local-&gt;replies[i].preparent2;</div><div class='del'>-			local-&gt;cont.dir_fop.postnewparent =</div><div class='del'>-				local-&gt;replies[i].postparent2;</div><div class='del'>-                        if (local-&gt;xdata_rsp) {</div><div class='del'>-                                dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-                                local-&gt;xdata_rsp = NULL;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-			if (local-&gt;replies[i].xdata)</div><div class='del'>-				local-&gt;xdata_rsp =</div><div class='del'>-					dict_ref (local-&gt;replies[i].xdata);</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (i == inode_read_subvol) {</div><div class='del'>-			local-&gt;cont.dir_fop.buf =</div><div class='del'>-				local-&gt;replies[i].poststat;</div><div class='del'>-			if (local-&gt;replies[i].xdata) {</div><div class='del'>-				if (local-&gt;xdata_rsp)</div><div class='del'>-					dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-				local-&gt;xdata_rsp =</div><div class='del'>-					dict_ref (local-&gt;replies[i].xdata);</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (i == parent_read_subvol) {</div><div class='del'>-			local-&gt;cont.dir_fop.preparent =</div><div class='del'>-				local-&gt;replies[i].preparent;</div><div class='del'>-			local-&gt;cont.dir_fop.postparent =</div><div class='del'>-				local-&gt;replies[i].postparent;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (i == parent2_read_subvol) {</div><div class='del'>-			local-&gt;cont.dir_fop.prenewparent =</div><div class='del'>-				local-&gt;replies[i].preparent2;</div><div class='del'>-			local-&gt;cont.dir_fop.postnewparent =</div><div class='del'>-				local-&gt;replies[i].postparent2;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+        if (local-&gt;op_ret == -1) {</div><div class='add'>+            local-&gt;op_ret = local-&gt;replies[i].op_ret;</div><div class='add'>+            local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='add'>+</div><div class='add'>+            local-&gt;cont.dir_fop.buf = local-&gt;replies[i].poststat;</div><div class='add'>+            local-&gt;cont.dir_fop.preparent = local-&gt;replies[i].preparent;</div><div class='add'>+            local-&gt;cont.dir_fop.postparent = local-&gt;replies[i].postparent;</div><div class='add'>+            local-&gt;cont.dir_fop.prenewparent = local-&gt;replies[i].preparent2;</div><div class='add'>+            local-&gt;cont.dir_fop.postnewparent = local-&gt;replies[i].postparent2;</div><div class='add'>+            if (local-&gt;xdata_rsp) {</div><div class='add'>+                dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+                local-&gt;xdata_rsp = NULL;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (local-&gt;replies[i].xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(local-&gt;replies[i].xdata);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-}</div><div class='add'>+        if (i == inode_read_subvol) {</div><div class='add'>+            local-&gt;cont.dir_fop.buf = local-&gt;replies[i].poststat;</div><div class='add'>+            if (local-&gt;replies[i].xdata) {</div><div class='add'>+                if (local-&gt;xdata_rsp)</div><div class='add'>+                    dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(local-&gt;replies[i].xdata);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        if (i == parent_read_subvol) {</div><div class='add'>+            local-&gt;cont.dir_fop.preparent = local-&gt;replies[i].preparent;</div><div class='add'>+            local-&gt;cont.dir_fop.postparent = local-&gt;replies[i].postparent;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (i == parent2_read_subvol) {</div><div class='add'>+            local-&gt;cont.dir_fop.prenewparent = local-&gt;replies[i].preparent2;</div><div class='add'>+            local-&gt;cont.dir_fop.postnewparent = local-&gt;replies[i].postparent2;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__afr_dir_write_fill (call_frame_t *frame, xlator_t *this, int child_index,</div><div class='del'>-		      int op_ret, int op_errno, struct iatt *poststat,</div><div class='del'>-		      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		      struct iatt *preparent2, struct iatt *postparent2,</div><div class='del'>-		      dict_t *xdata)</div><div class='add'>+__afr_dir_write_fill(call_frame_t *frame, xlator_t *this, int child_index,</div><div class='add'>+                     int op_ret, int op_errno, struct iatt *poststat,</div><div class='add'>+                     struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                     struct iatt *preparent2, struct iatt *postparent2,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	afr_fd_ctx_t *fd_ctx = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	fd_ctx = local-&gt;fd_ctx;</div><div class='del'>-</div><div class='del'>-	local-&gt;replies[child_index].valid = 1;</div><div class='del'>-	local-&gt;replies[child_index].op_ret = op_ret;</div><div class='del'>-	local-&gt;replies[child_index].op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;replies[child_index].xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	if (op_ret &gt;= 0) {</div><div class='del'>-		if (poststat)</div><div class='del'>-			local-&gt;replies[child_index].poststat = *poststat;</div><div class='del'>-		if (preparent)</div><div class='del'>-			local-&gt;replies[child_index].preparent = *preparent;</div><div class='del'>-		if (postparent)</div><div class='del'>-			local-&gt;replies[child_index].postparent = *postparent;</div><div class='del'>-		if (preparent2)</div><div class='del'>-			local-&gt;replies[child_index].preparent2 = *preparent2;</div><div class='del'>-		if (postparent2)</div><div class='del'>-			local-&gt;replies[child_index].postparent2 = *postparent2;</div><div class='del'>-		if (fd_ctx)</div><div class='del'>-			fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='del'>-	} else {</div><div class='del'>-		if (op_errno != ENOTEMPTY)</div><div class='del'>-			afr_transaction_fop_failed (frame, this, child_index);</div><div class='del'>-		if (fd_ctx)</div><div class='del'>-			fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    fd_ctx = local-&gt;fd_ctx;</div><div class='add'>+</div><div class='add'>+    local-&gt;replies[child_index].valid = 1;</div><div class='add'>+    local-&gt;replies[child_index].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[child_index].op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;replies[child_index].xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        if (poststat)</div><div class='add'>+            local-&gt;replies[child_index].poststat = *poststat;</div><div class='add'>+        if (preparent)</div><div class='add'>+            local-&gt;replies[child_index].preparent = *preparent;</div><div class='add'>+        if (postparent)</div><div class='add'>+            local-&gt;replies[child_index].postparent = *postparent;</div><div class='add'>+        if (preparent2)</div><div class='add'>+            local-&gt;replies[child_index].preparent2 = *preparent2;</div><div class='add'>+        if (postparent2)</div><div class='add'>+            local-&gt;replies[child_index].postparent2 = *postparent2;</div><div class='add'>+        if (fd_ctx)</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='add'>+    } else {</div><div class='add'>+        if (op_errno != ENOTEMPTY)</div><div class='add'>+            afr_transaction_fop_failed(frame, this, child_index);</div><div class='add'>+        if (fd_ctx)</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__afr_dir_write_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		     int op_ret, int op_errno, struct iatt *buf,</div><div class='del'>-		     struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-		     struct iatt *preparent2, struct iatt *postparent2,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+__afr_dir_write_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, struct iatt *buf,</div><div class='add'>+                    struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                    struct iatt *preparent2, struct iatt *postparent2,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int child_index = (long) cookie;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;frame-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		__afr_dir_write_fill (frame, this, child_index, op_ret,</div><div class='del'>-				      op_errno, buf, preparent, postparent,</div><div class='del'>-				      preparent2, postparent2, xdata);</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-		__afr_dir_write_finalize (frame, this);</div><div class='del'>-</div><div class='del'>-		if (afr_txn_nothing_failed (frame, this)) {</div><div class='del'>-                        /*if it did pre-op, it will do post-op changing ctime*/</div><div class='del'>-                        if (priv-&gt;consistent_metadata &amp;&amp;</div><div class='del'>-                            afr_needs_changelog_update (local))</div><div class='del'>-                                afr_zero_fill_stat (local);</div><div class='del'>-                        local-&gt;transaction.unwind (frame, this);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		afr_mark_entry_pending_changelog (frame, this);</div><div class='del'>-</div><div class='del'>-                afr_transaction_resume (frame, this);</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __afr_dir_write_fill(frame, this, child_index, op_ret, op_errno, buf,</div><div class='add'>+                             preparent, postparent, preparent2, postparent2,</div><div class='add'>+                             xdata);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        __afr_dir_write_finalize(frame, this);</div><div class='add'>+</div><div class='add'>+        if (afr_txn_nothing_failed(frame, this)) {</div><div class='add'>+            /*if it did pre-op, it will do post-op changing ctime*/</div><div class='add'>+            if (priv-&gt;consistent_metadata &amp;&amp; afr_needs_changelog_update(local))</div><div class='add'>+                afr_zero_fill_stat(local);</div><div class='add'>+            local-&gt;transaction.unwind(frame, this);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        afr_mark_entry_pending_changelog(frame, this);</div><div class='ctx'> </div><div class='add'>+        afr_transaction_resume(frame, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mark_new_entry_changelog_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-				  xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                  dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_mark_new_entry_changelog_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                 xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                 dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int call_count = 0;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_mark_new_entry_changelog (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_mark_new_entry_changelog(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t  *new_frame  = NULL;</div><div class='del'>-        afr_local_t   *local      = NULL;</div><div class='del'>-        afr_local_t   *new_local  = NULL;</div><div class='del'>-        afr_private_t *priv       = NULL;</div><div class='del'>-        dict_t        *xattr      = NULL;</div><div class='del'>-        int32_t       **changelog = NULL;</div><div class='del'>-        int           i           = 0;</div><div class='del'>-        int           op_errno    = ENOMEM;</div><div class='del'>-	unsigned char *pending    = NULL;</div><div class='del'>-	int           call_count   = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        new_frame = copy_frame (frame);</div><div class='del'>-        if (!new_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	new_local = AFR_FRAME_INIT (new_frame, op_errno);</div><div class='del'>-	if (!new_local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-	if (!xattr)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (local-&gt;transaction.pre_op[i] &amp;&amp;</div><div class='del'>-		    !local-&gt;transaction.failed_subvols[i]) {</div><div class='del'>-			call_count ++;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-		pending[i] = 1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        changelog = afr_mark_pending_changelog (priv, pending, xattr,</div><div class='del'>-                                            local-&gt;cont.dir_fop.buf.ia_type);</div><div class='del'>-        if (!changelog)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        new_local-&gt;pending = changelog;</div><div class='del'>-        gf_uuid_copy (new_local-&gt;loc.gfid, local-&gt;cont.dir_fop.buf.ia_gfid);</div><div class='del'>-        new_local-&gt;loc.inode = inode_ref (local-&gt;inode);</div><div class='del'>-</div><div class='del'>-        new_local-&gt;call_count = call_count;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (pending[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (new_frame, afr_mark_new_entry_changelog_cbk,</div><div class='del'>-                                   (void *) (long) i, priv-&gt;children[i],</div><div class='del'>-                                   priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='del'>-                                   &amp;new_local-&gt;loc, GF_XATTROP_ADD_ARRAY,</div><div class='del'>-                                   xattr, NULL);</div><div class='del'>-		if (!--call_count)</div><div class='del'>-			break;</div><div class='add'>+    call_frame_t *new_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *new_local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int32_t **changelog = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    unsigned char *pending = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    new_frame = copy_frame(frame);</div><div class='add'>+    if (!new_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    new_local = AFR_FRAME_INIT(new_frame, op_errno);</div><div class='add'>+    if (!new_local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pending = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.pre_op[i] &amp;&amp;</div><div class='add'>+            !local-&gt;transaction.failed_subvols[i]) {</div><div class='add'>+            call_count++;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+        pending[i] = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    changelog = afr_mark_pending_changelog(priv, pending, xattr,</div><div class='add'>+                                           local-&gt;cont.dir_fop.buf.ia_type);</div><div class='add'>+    if (!changelog)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    new_local-&gt;pending = changelog;</div><div class='add'>+    gf_uuid_copy(new_local-&gt;loc.gfid, local-&gt;cont.dir_fop.buf.ia_gfid);</div><div class='add'>+    new_local-&gt;loc.inode = inode_ref(local-&gt;inode);</div><div class='add'>+</div><div class='add'>+    new_local-&gt;call_count = call_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (pending[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        new_frame = NULL;</div><div class='add'>+        STACK_WIND_COOKIE(new_frame, afr_mark_new_entry_changelog_cbk,</div><div class='add'>+                          (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                          priv-&gt;children[i]-&gt;fops-&gt;xattrop, &amp;new_local-&gt;loc,</div><div class='add'>+                          GF_XATTROP_ADD_ARRAY, xattr, NULL);</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    new_frame = NULL;</div><div class='ctx'> out:</div><div class='del'>-        if (new_frame)</div><div class='del'>-                AFR_STACK_DESTROY (new_frame);</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref (xattr);</div><div class='del'>-        return;</div><div class='add'>+    if (new_frame)</div><div class='add'>+        AFR_STACK_DESTROY(new_frame);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_mark_entry_pending_changelog (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_mark_entry_pending_changelog(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-	int pre_op_count = 0;</div><div class='del'>-	int failed_count = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int pre_op_count = 0;</div><div class='add'>+    int failed_count = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret &lt; 0)</div><div class='del'>-		return;</div><div class='add'>+    if (local-&gt;op_ret &lt; 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;op != GF_FOP_CREATE &amp;&amp; local-&gt;op != GF_FOP_MKNOD &amp;&amp;</div><div class='del'>-            local-&gt;op != GF_FOP_MKDIR)</div><div class='del'>-		return;</div><div class='add'>+    if (local-&gt;op != GF_FOP_CREATE &amp;&amp; local-&gt;op != GF_FOP_MKNOD &amp;&amp;</div><div class='add'>+        local-&gt;op != GF_FOP_MKDIR)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	pre_op_count = AFR_COUNT (local-&gt;transaction.pre_op, priv-&gt;child_count);</div><div class='del'>-	failed_count = AFR_COUNT (local-&gt;transaction.failed_subvols,</div><div class='del'>-				  priv-&gt;child_count);</div><div class='add'>+    pre_op_count = AFR_COUNT(local-&gt;transaction.pre_op, priv-&gt;child_count);</div><div class='add'>+    failed_count = AFR_COUNT(local-&gt;transaction.failed_subvols,</div><div class='add'>+                             priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	if (pre_op_count == priv-&gt;child_count &amp;&amp; !failed_count)</div><div class='del'>-		return;</div><div class='add'>+    if (pre_op_count == priv-&gt;child_count &amp;&amp; !failed_count)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        afr_mark_new_entry_changelog (frame, this);</div><div class='add'>+    afr_mark_new_entry_changelog(frame, this);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* {{{ create */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_create_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_create_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (create, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;cont.create.fd, local-&gt;inode,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.buf,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(create, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;cont.create.fd, local-&gt;inode,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.buf, &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_create_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+afr_create_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, buf,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_create_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_create_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_create_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;create,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.create.flags,</div><div class='del'>-			   local-&gt;cont.create.mode, local-&gt;umask,</div><div class='del'>-			   local-&gt;cont.create.fd, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_create_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;create, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.create.flags, local-&gt;cont.create.mode,</div><div class='add'>+                      local-&gt;umask, local-&gt;cont.create.fd, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-	    mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-</div><div class='del'>-	local-&gt;fd_ctx = afr_fd_ctx_get (fd, this);</div><div class='del'>-	if (!local-&gt;fd_ctx)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        local-&gt;op                = GF_FOP_CREATE;</div><div class='del'>-        local-&gt;cont.create.flags = flags;</div><div class='del'>-        local-&gt;fd_ctx-&gt;flags     = flags;</div><div class='del'>-        local-&gt;cont.create.mode  = mode;</div><div class='del'>-        local-&gt;cont.create.fd    = fd_ref (fd);</div><div class='del'>-        local-&gt;umask  = umask;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.wind   = afr_create_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_create_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, loc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.basename = AFR_BASENAME (loc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[0], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count++;</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-            op_errno = -ret;</div><div class='del'>-            goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    local-&gt;fd_ctx = afr_fd_ctx_get(fd, this);</div><div class='add'>+    if (!local-&gt;fd_ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_CREATE;</div><div class='add'>+    local-&gt;cont.create.flags = flags;</div><div class='add'>+    local-&gt;fd_ctx-&gt;flags = flags;</div><div class='add'>+    local-&gt;cont.create.mode = mode;</div><div class='add'>+    local-&gt;cont.create.fd = fd_ref(fd);</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.wind = afr_create_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_create_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, loc, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(loc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[0], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count++;</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-			  NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -536,516 +504,492 @@ out:</div><div class='ctx'> /* {{{ mknod */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mknod_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_mknod_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (mknod, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(mknod, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mknod_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+afr_mknod_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, buf,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_mknod_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_mknod_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_mknod_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;mknod,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.mknod.mode,</div><div class='del'>-			   local-&gt;cont.mknod.dev, local-&gt;umask,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_mknod_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;mknod, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.mknod.mode, local-&gt;cont.mknod.dev,</div><div class='add'>+                      local-&gt;umask, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-           dev_t dev, mode_t umask, dict_t *xdata)</div><div class='add'>+afr_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+          dev_t dev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        local-&gt;op               = GF_FOP_MKNOD;</div><div class='del'>-        local-&gt;cont.mknod.mode  = mode;</div><div class='del'>-        local-&gt;cont.mknod.dev   = dev;</div><div class='del'>-        local-&gt;umask = umask;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.wind   = afr_mknod_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_mknod_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, loc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.basename = AFR_BASENAME (loc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[0], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count++;</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_MKNOD;</div><div class='add'>+    local-&gt;cont.mknod.mode = mode;</div><div class='add'>+    local-&gt;cont.mknod.dev = dev;</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.wind = afr_mknod_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_mknod_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, loc, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(loc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[0], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count++;</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-			  NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ mkdir */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_mkdir_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_mkdir_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (mkdir, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(mkdir, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mkdir_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+afr_mkdir_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, buf,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_mkdir_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_mkdir_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_mkdir_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;mkdir, &amp;local-&gt;loc,</div><div class='del'>-			   local-&gt;cont.mkdir.mode, local-&gt;umask,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_mkdir_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;mkdir, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.mkdir.mode, local-&gt;umask, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-	   mode_t umask, dict_t *xdata)</div><div class='add'>+afr_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+          mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.mkdir.mode  = mode;</div><div class='del'>-        local-&gt;umask = umask;</div><div class='del'>-</div><div class='del'>-        if (!xdata || !dict_get (xdata, "gfid-req")) {</div><div class='del'>-                op_errno = EPERM;</div><div class='del'>-                gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                                  AFR_MSG_GFID_NULL, "mkdir: %s is received "</div><div class='del'>-                                  "without gfid-req %p", loc-&gt;path, xdata);</div><div class='del'>-	        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-        if (!local-&gt;xdata_req) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_MKDIR;</div><div class='del'>-        local-&gt;transaction.wind   = afr_mkdir_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_mkdir_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, loc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.basename = AFR_BASENAME (loc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[0], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count++;</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.mkdir.mode = mode;</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+</div><div class='add'>+    if (!xdata || !dict_get(xdata, "gfid-req")) {</div><div class='add'>+        op_errno = EPERM;</div><div class='add'>+        gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+                         AFR_MSG_GFID_NULL,</div><div class='add'>+                         "mkdir: %s is received "</div><div class='add'>+                         "without gfid-req %p",</div><div class='add'>+                         loc-&gt;path, xdata);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    if (!local-&gt;xdata_req) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_MKDIR;</div><div class='add'>+    local-&gt;transaction.wind = afr_mkdir_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_mkdir_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, loc, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(loc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[0], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count++;</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-			  NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ link */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_link_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_link_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (link, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(link, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_link_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+afr_link_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, buf,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_link_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_link_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_link_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;link,</div><div class='del'>-			   &amp;local-&gt;loc, &amp;local-&gt;newloc, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_link_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;link, &amp;local-&gt;loc,</div><div class='add'>+                      &amp;local-&gt;newloc, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-	  dict_t *xdata)</div><div class='add'>+afr_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc,    oldloc);</div><div class='del'>-        loc_copy (&amp;local-&gt;newloc, newloc);</div><div class='del'>-</div><div class='del'>-        local-&gt;inode = inode_ref (oldloc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (newloc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_LINK;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.wind   = afr_link_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_link_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, newloc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame   = frame;</div><div class='del'>-        local-&gt;transaction.basename     = AFR_BASENAME (newloc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[0], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count++;</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, oldloc);</div><div class='add'>+    loc_copy(&amp;local-&gt;newloc, newloc);</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(oldloc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(newloc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_LINK;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.wind = afr_link_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_link_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, newloc,</div><div class='add'>+                               &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(newloc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[0], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count++;</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-			  NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ symlink */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_symlink_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_symlink_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (symlink, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(symlink, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;cont.dir_fop.buf,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_symlink_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                      struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                      struct iatt *postparent, dict_t *xdata)</div><div class='add'>+afr_symlink_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                     struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, buf,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_symlink_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_symlink_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_symlink_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;symlink,</div><div class='del'>-			   local-&gt;cont.symlink.linkpath, &amp;local-&gt;loc,</div><div class='del'>-			   local-&gt;umask, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_symlink_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;symlink,</div><div class='add'>+                      local-&gt;cont.symlink.linkpath, &amp;local-&gt;loc, local-&gt;umask,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-	     loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+afr_symlink(call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+            loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.symlink.linkpath = gf_strdup (linkpath);</div><div class='del'>-        local-&gt;umask = umask;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_SYMLINK;</div><div class='del'>-        local-&gt;transaction.wind   = afr_symlink_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_symlink_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, loc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame   = frame;</div><div class='del'>-        local-&gt;transaction.basename     = AFR_BASENAME (loc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[0], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count++;</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.symlink.linkpath = gf_strdup(linkpath);</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_SYMLINK;</div><div class='add'>+    local-&gt;transaction.wind = afr_symlink_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_symlink_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, loc, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(loc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[0], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count++;</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (symlink, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-			  NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(symlink, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -1053,159 +997,152 @@ out:</div><div class='ctx'> /* {{{ rename */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_rename_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_rename_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (rename, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.buf,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.prenewparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postnewparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(rename, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.buf, &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.prenewparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postnewparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_rename_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                     struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                     struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+afr_rename_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, buf,</div><div class='del'>-				    preoldparent, postoldparent, prenewparent,</div><div class='del'>-				    postnewparent, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, buf,</div><div class='add'>+                               preoldparent, postoldparent, prenewparent,</div><div class='add'>+                               postnewparent, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_rename_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_rename_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_rename_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;rename,</div><div class='del'>-			   &amp;local-&gt;loc, &amp;local-&gt;newloc, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_rename_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;rename, &amp;local-&gt;loc,</div><div class='add'>+                      &amp;local-&gt;newloc, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-	    dict_t *xdata)</div><div class='add'>+afr_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-        int                     nlockee                 = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc,    oldloc);</div><div class='del'>-        loc_copy (&amp;local-&gt;newloc, newloc);</div><div class='del'>-</div><div class='del'>-        local-&gt;inode = inode_ref (oldloc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (oldloc-&gt;parent);</div><div class='del'>-	local-&gt;parent2 = inode_ref (newloc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_RENAME;</div><div class='del'>-        local-&gt;transaction.wind   = afr_rename_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_rename_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, oldloc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int nlockee = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, oldloc);</div><div class='add'>+    loc_copy(&amp;local-&gt;newloc, newloc);</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(oldloc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(oldloc-&gt;parent);</div><div class='add'>+    local-&gt;parent2 = inode_ref(newloc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_RENAME;</div><div class='add'>+    local-&gt;transaction.wind = afr_rename_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_rename_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, oldloc,</div><div class='add'>+                               &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.new_parent_loc, newloc,</div><div class='add'>+                               &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(oldloc-&gt;path);</div><div class='add'>+    local-&gt;transaction.new_basename = AFR_BASENAME(newloc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = nlockee = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(</div><div class='add'>+        &amp;int_lock-&gt;lockee[nlockee], local, &amp;local-&gt;transaction.new_parent_loc,</div><div class='add'>+        local-&gt;transaction.new_basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    nlockee++;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    nlockee++;</div><div class='add'>+    if (local-&gt;newloc.inode &amp;&amp; IA_ISDIR(local-&gt;newloc.inode-&gt;ia_type)) {</div><div class='add'>+        ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='add'>+                                    &amp;local-&gt;newloc, NULL, priv-&gt;child_count);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.new_parent_loc, newloc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame   = frame;</div><div class='del'>-        local-&gt;transaction.basename     = AFR_BASENAME (oldloc-&gt;path);</div><div class='del'>-        local-&gt;transaction.new_basename = AFR_BASENAME (newloc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = nlockee = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.new_parent_loc,</div><div class='del'>-                                     local-&gt;transaction.new_basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        nlockee++;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='ctx'>         nlockee++;</div><div class='del'>-        if (local-&gt;newloc.inode &amp;&amp; IA_ISDIR (local-&gt;newloc.inode-&gt;ia_type)) {</div><div class='del'>-                ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='del'>-                                             &amp;local-&gt;newloc,</div><div class='del'>-                                             NULL,</div><div class='del'>-                                             priv-&gt;child_count);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                nlockee++;</div><div class='del'>-        }</div><div class='del'>-        qsort (int_lock-&gt;lockee, nlockee, sizeof (*int_lock-&gt;lockee),</div><div class='del'>-               afr_entry_lockee_cmp);</div><div class='del'>-        int_lock-&gt;lockee_count = nlockee;</div><div class='del'>-</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_RENAME_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    }</div><div class='add'>+    qsort(int_lock-&gt;lockee, nlockee, sizeof(*int_lock-&gt;lockee),</div><div class='add'>+          afr_entry_lockee_cmp);</div><div class='add'>+    int_lock-&gt;lockee_count = nlockee;</div><div class='add'>+</div><div class='add'>+    ret = afr_transaction(transaction_frame, this,</div><div class='add'>+                          AFR_ENTRY_RENAME_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-			  NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -1213,259 +1150,244 @@ out:</div><div class='ctx'> /* {{{ unlink */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_unlink_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_unlink_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (unlink, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(unlink, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_unlink_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+afr_unlink_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, NULL,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_unlink_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_unlink_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_unlink_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;unlink,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;xflag, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_unlink_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;unlink, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;xflag, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-	    dict_t *xdata)</div><div class='add'>+afr_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;xflag = xflag;</div><div class='del'>-</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_UNLINK;</div><div class='del'>-        local-&gt;transaction.wind   = afr_unlink_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_unlink_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, loc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.basename = AFR_BASENAME (loc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[0], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count++;</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;xflag = xflag;</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_UNLINK;</div><div class='add'>+    local-&gt;transaction.wind = afr_unlink_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_unlink_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, loc, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(loc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[0], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count++;</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ rmdir */</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_rmdir_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_rmdir_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (rmdir, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.preparent,</div><div class='del'>-			  &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(rmdir, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.preparent,</div><div class='add'>+                     &amp;local-&gt;cont.dir_fop.postparent, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_rmdir_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+afr_rmdir_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_dir_write_cbk (frame, cookie, this, op_ret, op_errno, NULL,</div><div class='del'>-				    preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return __afr_dir_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                               preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_rmdir_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_rmdir_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_rmdir_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;rmdir,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.rmdir.flags, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_rmdir_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;rmdir, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.rmdir.flags, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-	   dict_t *xdata)</div><div class='add'>+afr_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv                   = NULL;</div><div class='del'>-        afr_local_t             *local                  = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock               = NULL;</div><div class='del'>-        call_frame_t            *transaction_frame      = NULL;</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        int                     op_errno                = ENOMEM;</div><div class='del'>-        int                     nlockee                 = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-	local-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.rmdir.flags = flags;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_RMDIR;</div><div class='del'>-        local-&gt;transaction.wind   = afr_rmdir_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_rmdir_unwind;</div><div class='del'>-</div><div class='del'>-        ret = afr_build_parent_loc (&amp;local-&gt;transaction.parent_loc, loc,</div><div class='del'>-                                    &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.basename = AFR_BASENAME (loc-&gt;path);</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lockee_count = nlockee = 0;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='del'>-                                     &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-                                     local-&gt;transaction.basename,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        nlockee++;</div><div class='del'>-        ret = afr_init_entry_lockee (&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='del'>-                                     &amp;local-&gt;loc,</div><div class='del'>-                                     NULL,</div><div class='del'>-                                     priv-&gt;child_count);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        nlockee++;</div><div class='del'>-        qsort (int_lock-&gt;lockee, nlockee, sizeof (*int_lock-&gt;lockee),</div><div class='del'>-               afr_entry_lockee_cmp);</div><div class='del'>-        int_lock-&gt;lockee_count = nlockee;</div><div class='del'>-</div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int nlockee = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    local-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.rmdir.flags = flags;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_RMDIR;</div><div class='add'>+    local-&gt;transaction.wind = afr_rmdir_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_rmdir_unwind;</div><div class='add'>+</div><div class='add'>+    ret = afr_build_parent_loc(&amp;local-&gt;transaction.parent_loc, loc, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.basename = AFR_BASENAME(loc-&gt;path);</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lockee_count = nlockee = 0;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[nlockee], local,</div><div class='add'>+                                &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                local-&gt;transaction.basename, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    nlockee++;</div><div class='add'>+    ret = afr_init_entry_lockee(&amp;int_lock-&gt;lockee[nlockee], local, &amp;local-&gt;loc,</div><div class='add'>+                                NULL, priv-&gt;child_count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    nlockee++;</div><div class='add'>+    qsort(int_lock-&gt;lockee, nlockee, sizeof(*int_lock-&gt;lockee),</div><div class='add'>+          afr_entry_lockee_cmp);</div><div class='add'>+    int_lock-&gt;lockee_count = nlockee;</div><div class='add'>+</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-inode-read.c b/xlators/cluster/afr/src/afr-inode-read.c<br/>index d0b07e9064f..113e39acfe8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-inode-read.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-inode-read.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-inode-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-inode-read.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include &lt;libgen.h&gt;</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;fnmatch.h&gt;</div><div class='hunk'>@@ -44,146 +43,145 @@</div><div class='ctx'>  * */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_handle_quota_size (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_handle_quota_size(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        unsigned char *readable   = NULL;</div><div class='del'>-        afr_local_t *local        = NULL;</div><div class='del'>-        afr_private_t *priv       = NULL;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-        int i                     = 0;</div><div class='del'>-        int ret                   = 0;</div><div class='del'>-        quota_meta_t size         = {0, };</div><div class='del'>-        quota_meta_t max_size     = {0, };</div><div class='del'>-        int readable_cnt          = 0;</div><div class='del'>-        int read_subvol           = -1;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        replies = local-&gt;replies;</div><div class='del'>-</div><div class='del'>-        readable = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        afr_inode_read_subvol_get (local-&gt;inode, this, readable, 0, 0);</div><div class='del'>-</div><div class='del'>-        readable_cnt = AFR_COUNT (readable, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                if (readable_cnt &amp;&amp; !readable[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (!replies[i].xdata)</div><div class='del'>-                        continue;</div><div class='del'>-                ret = quota_dict_get_meta (replies[i].xdata, QUOTA_SIZE_KEY,</div><div class='del'>-                                           &amp;size);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                if (read_subvol == -1)</div><div class='del'>-                        read_subvol = i;</div><div class='del'>-                if (size.size &gt; max_size.size ||</div><div class='del'>-                    (size.file_count + size.dir_count) &gt;</div><div class='del'>-                    (max_size.file_count + max_size.dir_count))</div><div class='del'>-                        read_subvol = i;</div><div class='del'>-</div><div class='del'>-                if (size.size &gt; max_size.size)</div><div class='del'>-                        max_size.size = size.size;</div><div class='del'>-                if (size.file_count &gt; max_size.file_count)</div><div class='del'>-                        max_size.file_count = size.file_count;</div><div class='del'>-                if (size.dir_count &gt; max_size.dir_count)</div><div class='del'>-                        max_size.dir_count = size.dir_count;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (max_size.size == 0 &amp;&amp; max_size.file_count == 0 &amp;&amp;</div><div class='del'>-            max_size.dir_count == 0)</div><div class='del'>-                return read_subvol;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                if (readable_cnt &amp;&amp; !readable[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (!replies[i].xdata)</div><div class='del'>-                        continue;</div><div class='del'>-                quota_dict_set_meta (replies[i].xdata, QUOTA_SIZE_KEY,</div><div class='del'>-                                     &amp;max_size, IA_IFDIR);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    unsigned char *readable = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t max_size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int readable_cnt = 0;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+</div><div class='add'>+    readable = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    afr_inode_read_subvol_get(local-&gt;inode, this, readable, 0, 0);</div><div class='add'>+</div><div class='add'>+    readable_cnt = AFR_COUNT(readable, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        if (readable_cnt &amp;&amp; !readable[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (!replies[i].xdata)</div><div class='add'>+            continue;</div><div class='add'>+        ret = quota_dict_get_meta(replies[i].xdata, QUOTA_SIZE_KEY, &amp;size);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        if (read_subvol == -1)</div><div class='add'>+            read_subvol = i;</div><div class='add'>+        if (size.size &gt; max_size.size ||</div><div class='add'>+            (size.file_count + size.dir_count) &gt;</div><div class='add'>+                (max_size.file_count + max_size.dir_count))</div><div class='add'>+            read_subvol = i;</div><div class='add'>+</div><div class='add'>+        if (size.size &gt; max_size.size)</div><div class='add'>+            max_size.size = size.size;</div><div class='add'>+        if (size.file_count &gt; max_size.file_count)</div><div class='add'>+            max_size.file_count = size.file_count;</div><div class='add'>+        if (size.dir_count &gt; max_size.dir_count)</div><div class='add'>+            max_size.dir_count = size.dir_count;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (max_size.size == 0 &amp;&amp; max_size.file_count == 0 &amp;&amp;</div><div class='add'>+        max_size.dir_count == 0)</div><div class='ctx'>         return read_subvol;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        if (readable_cnt &amp;&amp; !readable[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (!replies[i].xdata)</div><div class='add'>+            continue;</div><div class='add'>+        quota_dict_set_meta(replies[i].xdata, QUOTA_SIZE_KEY, &amp;max_size,</div><div class='add'>+                            IA_IFDIR);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return read_subvol;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* {{{ access */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+afr_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = op_ret;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (access, frame, op_ret, op_errno, xdata);</div><div class='add'>+    AFR_STACK_UNWIND(access, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_access_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_access_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-		AFR_STACK_UNWIND (access, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_access_cbk, (void *) (long) subvol,</div><div class='del'>-                           priv-&gt;children[subvol],</div><div class='del'>-                           priv-&gt;children[subvol]-&gt;fops-&gt;access,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;cont.access.mask,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(access, frame, local-&gt;op_ret, local-&gt;op_errno, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_access_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;access, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.access.mask, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_access (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-	    int mask, dict_t *xdata)</div><div class='add'>+afr_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int mask,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	int op_errno = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_ACCESS;</div><div class='del'>-	loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-	local-&gt;cont.access.mask = mask;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_ACCESS;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;cont.access.mask = mask;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, loc-&gt;inode, afr_access_wind,</div><div class='del'>-		      AFR_METADATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, loc-&gt;inode, afr_access_wind,</div><div class='add'>+                 AFR_METADATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (access, frame, -1, op_errno, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(access, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -191,152 +189,139 @@ out:</div><div class='ctx'> /* {{{ stat */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_stat_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-              xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-              struct iatt *buf, dict_t *xdata)</div><div class='add'>+afr_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = op_ret;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (stat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    AFR_STACK_UNWIND(stat, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_stat_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_stat_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-		AFR_STACK_UNWIND (stat, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-				  0, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_stat_cbk, (void *) (long) subvol,</div><div class='del'>-                           priv-&gt;children[subvol],</div><div class='del'>-                           priv-&gt;children[subvol]-&gt;fops-&gt;stat,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(stat, frame, local-&gt;op_ret, local-&gt;op_errno, 0, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, afr_stat_cbk, (void *)(long)subvol, priv-&gt;children[subvol],</div><div class='add'>+        priv-&gt;children[subvol]-&gt;fops-&gt;stat, &amp;local-&gt;loc, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+afr_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	int op_errno = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_STAT;</div><div class='del'>-	loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_STAT;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, loc-&gt;inode, afr_stat_wind,</div><div class='del'>-		      AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, loc-&gt;inode, afr_stat_wind, AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (stat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(stat, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ fstat */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+afr_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = op_ret;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    AFR_STACK_UNWIND(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fstat_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fstat_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-		AFR_STACK_UNWIND (fstat, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-				  0, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_fstat_cbk, (void *) (long) subvol,</div><div class='del'>-                           priv-&gt;children[subvol],</div><div class='del'>-                           priv-&gt;children[subvol]-&gt;fops-&gt;fstat,</div><div class='del'>-                           local-&gt;fd, local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(fstat, frame, local-&gt;op_ret, local-&gt;op_errno, 0, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, afr_fstat_cbk, (void *)(long)subvol, priv-&gt;children[subvol],</div><div class='add'>+        priv-&gt;children[subvol]-&gt;fops-&gt;fstat, local-&gt;fd, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fstat (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	int op_errno = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_FSTAT;</div><div class='del'>-	local-&gt;fd = fd_ref (fd);</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_FSTAT;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, fd-&gt;inode, afr_fstat_wind,</div><div class='del'>-		      AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, fd-&gt;inode, afr_fstat_wind, AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (fstat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(fstat, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -344,1565 +329,1484 @@ out:</div><div class='ctx'> /* {{{ readlink */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_readlink_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                  xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  const char *buf, struct iatt *sbuf, dict_t *xdata)</div><div class='add'>+afr_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, const char *buf,</div><div class='add'>+                 struct iatt *sbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (readlink, frame, op_ret, op_errno,</div><div class='del'>-			  buf, sbuf, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    AFR_STACK_UNWIND(readlink, frame, op_ret, op_errno, buf, sbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_readlink_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_readlink_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-		AFR_STACK_UNWIND (readlink, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, 0, 0, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_readlink_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;readlink,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.readlink.size,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(readlink, frame, local-&gt;op_ret, local-&gt;op_errno, 0, 0,</div><div class='add'>+                         0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_readlink_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;readlink, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.readlink.size, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_readlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, size_t size, dict_t *xdata)</div><div class='add'>+afr_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   * local      = NULL;</div><div class='del'>-        int32_t         op_errno   = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_READLINK;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;cont.readlink.size = size;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_READLINK;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;cont.readlink.size = size;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, loc-&gt;inode, afr_readlink_wind,</div><div class='del'>-		      AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, loc-&gt;inode, afr_readlink_wind,</div><div class='add'>+                 AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND(readlink, frame, -1, op_errno, 0, 0, 0);</div><div class='add'>+    AFR_STACK_UNWIND(readlink, frame, -1, op_errno, 0, 0, 0);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ getxattr */</div><div class='ctx'> </div><div class='ctx'> struct _xattr_key {</div><div class='del'>-        char *key;</div><div class='del'>-        struct list_head list;</div><div class='add'>+    char *key;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__gather_xattr_keys (dict_t *dict, char *key, data_t *value,</div><div class='del'>-                     void *data)</div><div class='add'>+__gather_xattr_keys(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct list_head *  list  = data;</div><div class='del'>-        struct _xattr_key * xkey  = NULL;</div><div class='del'>-</div><div class='del'>-        if (!strncmp (key, AFR_XATTR_PREFIX,</div><div class='del'>-                      SLEN (AFR_XATTR_PREFIX))) {</div><div class='add'>+    struct list_head *list = data;</div><div class='add'>+    struct _xattr_key *xkey = NULL;</div><div class='ctx'> </div><div class='del'>-                xkey = GF_MALLOC (sizeof (*xkey), gf_afr_mt_xattr_key);</div><div class='del'>-                if (!xkey)</div><div class='del'>-                        return -1;</div><div class='add'>+    if (!strncmp(key, AFR_XATTR_PREFIX, SLEN(AFR_XATTR_PREFIX))) {</div><div class='add'>+        xkey = GF_MALLOC(sizeof(*xkey), gf_afr_mt_xattr_key);</div><div class='add'>+        if (!xkey)</div><div class='add'>+            return -1;</div><div class='ctx'> </div><div class='del'>-                xkey-&gt;key = key;</div><div class='del'>-                INIT_LIST_HEAD (&amp;xkey-&gt;list);</div><div class='add'>+        xkey-&gt;key = key;</div><div class='add'>+        INIT_LIST_HEAD(&amp;xkey-&gt;list);</div><div class='ctx'> </div><div class='del'>-                list_add_tail (&amp;xkey-&gt;list, list);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+        list_add_tail(&amp;xkey-&gt;list, list);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_filter_xattrs (dict_t *dict)</div><div class='add'>+afr_filter_xattrs(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        struct list_head   keys = {0,};</div><div class='del'>-        struct _xattr_key *key  = NULL;</div><div class='del'>-        struct _xattr_key *tmp  = NULL;</div><div class='add'>+    struct list_head keys = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct _xattr_key *key = NULL;</div><div class='add'>+    struct _xattr_key *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;keys);</div><div class='add'>+    INIT_LIST_HEAD(&amp;keys);</div><div class='ctx'> </div><div class='del'>-        dict_foreach (dict, __gather_xattr_keys,</div><div class='del'>-                      (void *) &amp;keys);</div><div class='add'>+    dict_foreach(dict, __gather_xattr_keys, (void *)&amp;keys);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (key, tmp, &amp;keys, list) {</div><div class='del'>-                dict_del (dict, key-&gt;key);</div><div class='add'>+    list_for_each_entry_safe(key, tmp, &amp;keys, list)</div><div class='add'>+    {</div><div class='add'>+        dict_del(dict, key-&gt;key);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;key-&gt;list);</div><div class='add'>+        list_del_init(&amp;key-&gt;list);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (key);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(key);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-gf_boolean_t</div><div class='del'>-afr_getxattr_ignorable_errnos (int32_t op_errno)</div><div class='add'>+static gf_boolean_t</div><div class='add'>+afr_getxattr_ignorable_errnos(int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        if (op_errno == ENODATA || op_errno == ENOTSUP || op_errno == ERANGE ||</div><div class='del'>-            op_errno == ENAMETOOLONG)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (op_errno == ENODATA || op_errno == ENOTSUP || op_errno == ERANGE ||</div><div class='add'>+        op_errno == ENAMETOOLONG)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-afr_getxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                  xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0 &amp;&amp; !afr_getxattr_ignorable_errnos(op_errno)) {</div><div class='del'>-		local-&gt;op_ret = op_ret;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; !afr_getxattr_ignorable_errnos(op_errno)) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (dict)</div><div class='del'>-		afr_filter_xattrs (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        afr_filter_xattrs(dict);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    AFR_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_getxattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_getxattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_getxattr_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;getxattr,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.getxattr.name,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_getxattr_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;getxattr, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.getxattr.name, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_unwind (call_frame_t *frame, int op_ret, int op_errno,</div><div class='del'>-                     dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_unwind(call_frame_t *frame, int op_ret, int op_errno, dict_t *dict,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fgetxattr_clrlk_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_fgetxattr_clrlk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local                  = NULL;</div><div class='del'>-        afr_private_t   *priv                   = NULL;</div><div class='del'>-        xlator_t        **children              = NULL;</div><div class='del'>-        dict_t          *xattr                  = NULL;</div><div class='del'>-        char            *tmp_report             = NULL;</div><div class='del'>-        char            lk_summary[1024]        = {0,};</div><div class='del'>-        int             serz_len                = 0;</div><div class='del'>-        int32_t         callcnt                 = 0;</div><div class='del'>-        long int        cky                     = 0;</div><div class='del'>-        int             ret                     = 0;</div><div class='del'>-</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        children = priv-&gt;children;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        cky = (long) cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-                if (op_ret == -1)</div><div class='del'>-                        local-&gt;replies[cky].op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;dict)</div><div class='del'>-                        local-&gt;dict = dict_new ();</div><div class='del'>-                if (local-&gt;dict) {</div><div class='del'>-                        ret = dict_get_str (dict, local-&gt;cont.getxattr.name,</div><div class='del'>-                                            &amp;tmp_report);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        ret = dict_set_dynstr (local-&gt;dict,</div><div class='del'>-                                               children[cky]-&gt;name,</div><div class='del'>-                                               gf_strdup (tmp_report));</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t **children = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    char *tmp_report = NULL;</div><div class='add'>+    char lk_summary[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int serz_len = 0;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    long int cky = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    children = priv-&gt;children;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    cky = (long)cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+        if (op_ret == -1)</div><div class='add'>+            local-&gt;replies[cky].op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;dict)</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='add'>+        if (local-&gt;dict) {</div><div class='add'>+            ret = dict_get_str(dict, local-&gt;cont.getxattr.name, &amp;tmp_report);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+            ret = dict_set_dynstr(local-&gt;dict, children[cky]-&gt;name,</div><div class='add'>+                                  gf_strdup(tmp_report));</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                xattr = dict_new ();</div><div class='del'>-                if (!xattr) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_serialize_value_with_delim (local-&gt;dict,</div><div class='del'>-                                                       lk_summary,</div><div class='del'>-                                                       &amp;serz_len, '\n');</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                if (serz_len == -1)</div><div class='del'>-                        snprintf (lk_summary, sizeof (lk_summary),</div><div class='del'>-                                  "No locks cleared.");</div><div class='del'>-                ret = dict_set_dynstr (xattr, local-&gt;cont.getxattr.name,</div><div class='del'>-                                       gf_strdup (lk_summary));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                ENOMEM, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Error setting dictionary");</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        xattr = dict_new();</div><div class='add'>+        if (!xattr) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_serialize_value_with_delim(local-&gt;dict, lk_summary,</div><div class='add'>+                                              &amp;serz_len, '\n');</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='add'>+        if (serz_len == -1)</div><div class='add'>+            snprintf(lk_summary, sizeof(lk_summary), "No locks cleared.");</div><div class='add'>+        ret = dict_set_dynstr(xattr, local-&gt;cont.getxattr.name,</div><div class='add'>+                              gf_strdup(lk_summary));</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Error setting dictionary");</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_errno = afr_final_errno (local, priv);</div><div class='add'>+        op_errno = afr_final_errno(local, priv);</div><div class='ctx'> </div><div class='del'>-unwind:</div><div class='del'>-                AFR_STACK_UNWIND (fgetxattr, frame, op_ret, op_errno, xattr,</div><div class='del'>-                                  xdata);</div><div class='del'>-                if (xattr)</div><div class='del'>-                        dict_unref (xattr);</div><div class='del'>-        }</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(fgetxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+        if (xattr)</div><div class='add'>+            dict_unref(xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_clrlk_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                        xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_clrlk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local                  = NULL;</div><div class='del'>-        afr_private_t   *priv                   = NULL;</div><div class='del'>-        xlator_t        **children              = NULL;</div><div class='del'>-        dict_t          *xattr                  = NULL;</div><div class='del'>-        char            *tmp_report             = NULL;</div><div class='del'>-        char            lk_summary[1024]        = {0,};</div><div class='del'>-        int             serz_len                = 0;</div><div class='del'>-        int32_t         callcnt                 = 0;</div><div class='del'>-        long int        cky                     = 0;</div><div class='del'>-        int             ret                     = 0;</div><div class='del'>-</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        children = priv-&gt;children;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        cky = (long) cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-                if (op_ret == -1)</div><div class='del'>-                        local-&gt;replies[cky].op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;dict)</div><div class='del'>-                        local-&gt;dict = dict_new ();</div><div class='del'>-                if (local-&gt;dict) {</div><div class='del'>-                        ret = dict_get_str (dict, local-&gt;cont.getxattr.name,</div><div class='del'>-                                            &amp;tmp_report);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        ret = dict_set_dynstr (local-&gt;dict,</div><div class='del'>-                                               children[cky]-&gt;name,</div><div class='del'>-                                               gf_strdup (tmp_report));</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t **children = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    char *tmp_report = NULL;</div><div class='add'>+    char lk_summary[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int serz_len = 0;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    long int cky = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    children = priv-&gt;children;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    cky = (long)cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+        if (op_ret == -1)</div><div class='add'>+            local-&gt;replies[cky].op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;dict)</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='add'>+        if (local-&gt;dict) {</div><div class='add'>+            ret = dict_get_str(dict, local-&gt;cont.getxattr.name, &amp;tmp_report);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+            ret = dict_set_dynstr(local-&gt;dict, children[cky]-&gt;name,</div><div class='add'>+                                  gf_strdup(tmp_report));</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                xattr = dict_new ();</div><div class='del'>-                if (!xattr) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_serialize_value_with_delim (local-&gt;dict,</div><div class='del'>-                                                       lk_summary,</div><div class='del'>-                                                       &amp;serz_len, '\n');</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                if (serz_len == -1)</div><div class='del'>-                        snprintf (lk_summary, sizeof (lk_summary),</div><div class='del'>-                                  "No locks cleared.");</div><div class='del'>-                ret = dict_set_dynstr (xattr, local-&gt;cont.getxattr.name,</div><div class='del'>-                                       gf_strdup (lk_summary));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                ENOMEM, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Error setting dictionary");</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        xattr = dict_new();</div><div class='add'>+        if (!xattr) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_serialize_value_with_delim(local-&gt;dict, lk_summary,</div><div class='add'>+                                              &amp;serz_len, '\n');</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='add'>+        if (serz_len == -1)</div><div class='add'>+            snprintf(lk_summary, sizeof(lk_summary), "No locks cleared.");</div><div class='add'>+        ret = dict_set_dynstr(xattr, local-&gt;cont.getxattr.name,</div><div class='add'>+                              gf_strdup(lk_summary));</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Error setting dictionary");</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_errno = afr_final_errno (local, priv);</div><div class='add'>+        op_errno = afr_final_errno(local, priv);</div><div class='ctx'> </div><div class='del'>-unwind:</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> </div><div class='del'>-                if (xattr)</div><div class='del'>-                        dict_unref (xattr);</div><div class='del'>-        }</div><div class='add'>+        if (xattr)</div><div class='add'>+            dict_unref(xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * node-uuid cbk uses next child querying mechanism</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_node_uuid_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                            xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                            dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_node_uuid_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t  *priv            = NULL;</div><div class='del'>-        afr_local_t    *local           = NULL;</div><div class='del'>-        xlator_t      **children        = NULL;</div><div class='del'>-        int             unwind          = 1;</div><div class='del'>-        int             curr_call_child = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    xlator_t **children = NULL;</div><div class='add'>+    int unwind = 1;</div><div class='add'>+    int curr_call_child = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        children = priv-&gt;children;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    children = priv-&gt;children;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) { /** query the _next_ child */</div><div class='del'>-</div><div class='del'>-                /**</div><div class='del'>-                 * _current_ becomes _next_</div><div class='del'>-                 * If done with all children and yet no success; give up !</div><div class='del'>-                 */</div><div class='del'>-                curr_call_child = (int) ((long)cookie);</div><div class='del'>-                if (++curr_call_child == priv-&gt;child_count)</div><div class='del'>-                        goto unwind;</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "op_ret (-1): Re-querying afr-child (%d/%d)",</div><div class='del'>-                              curr_call_child, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-                unwind = 0;</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_getxattr_node_uuid_cbk,</div><div class='del'>-                                   (void *) (long) curr_call_child,</div><div class='del'>-                                   children[curr_call_child],</div><div class='del'>-                                   children[curr_call_child]-&gt;fops-&gt;getxattr,</div><div class='del'>-                                   &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;cont.getxattr.name,</div><div class='del'>-                                   local-&gt;xdata_req);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) { /** query the _next_ child */</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        if (unwind)</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict,</div><div class='del'>-                                  xdata);</div><div class='add'>+        /**</div><div class='add'>+         * _current_ becomes _next_</div><div class='add'>+         * If done with all children and yet no success; give up !</div><div class='add'>+         */</div><div class='add'>+        curr_call_child = (int)((long)cookie);</div><div class='add'>+        if (++curr_call_child == priv-&gt;child_count)</div><div class='add'>+            goto unwind;</div><div class='add'>+</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                     "op_ret (-1): Re-querying afr-child (%d/%d)",</div><div class='add'>+                     curr_call_child, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+        unwind = 0;</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, afr_getxattr_node_uuid_cbk, (void *)(long)curr_call_child,</div><div class='add'>+            children[curr_call_child],</div><div class='add'>+            children[curr_call_child]-&gt;fops-&gt;getxattr, &amp;local-&gt;loc,</div><div class='add'>+            local-&gt;cont.getxattr.name, local-&gt;xdata_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    if (unwind)</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * list-node-uuids cbk returns the list of node_uuids for the subvolume.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_list_node_uuids_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                  xlator_t *this, int32_t op_ret,</div><div class='del'>-                                  int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_list_node_uuids_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                 xlator_t *this, int32_t op_ret,</div><div class='add'>+                                 int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t    *local          = NULL;</div><div class='del'>-        afr_private_t  *priv           = NULL;</div><div class='del'>-        int32_t         callcnt        = 0;</div><div class='del'>-        int             ret            = 0;</div><div class='del'>-        char           *xattr_serz     = NULL;</div><div class='del'>-        long            cky            = 0;</div><div class='del'>-        int32_t         tlen           = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        cky = (long) cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-                local-&gt;replies[cky].valid = 1;</div><div class='del'>-                local-&gt;replies[cky].op_ret = op_ret;</div><div class='del'>-                local-&gt;replies[cky].op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                if (op_ret &lt; 0)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-                                local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-                local-&gt;replies[cky].xattr = dict_ref (dict);</div><div class='del'>-        }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *xattr_serz = NULL;</div><div class='add'>+    long cky = 0;</div><div class='add'>+    int32_t tlen = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    cky = (long)cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+        local-&gt;replies[cky].valid = 1;</div><div class='add'>+        local-&gt;replies[cky].op_ret = op_ret;</div><div class='add'>+        local-&gt;replies[cky].op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+        if (op_ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+            local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='add'>+        local-&gt;replies[cky].xattr = dict_ref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != 0) {</div><div class='del'>-                        /* All bricks gave an error. */</div><div class='del'>-                        local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;op_ret != 0) {</div><div class='add'>+            /* All bricks gave an error. */</div><div class='add'>+            local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /*Since we store the UUID0_STR as node uuid for down bricks and</div><div class='del'>-                 *for non zero op_ret, assigning length to  priv-&gt;child_count</div><div class='del'>-                 *number of uuids*/</div><div class='del'>-                local-&gt;cont.getxattr.xattr_len = (SLEN (UUID0_STR) + 2) *</div><div class='del'>-                                                  priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;dict)</div><div class='del'>-                        local-&gt;dict = dict_new ();</div><div class='del'>-                if (!local-&gt;dict) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        /*Since we store the UUID0_STR as node uuid for down bricks and</div><div class='add'>+         *for non zero op_ret, assigning length to  priv-&gt;child_count</div><div class='add'>+         *number of uuids*/</div><div class='add'>+        local-&gt;cont.getxattr.xattr_len = (SLEN(UUID0_STR) + 2) *</div><div class='add'>+                                         priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;dict)</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='add'>+        if (!local-&gt;dict) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                xattr_serz = GF_CALLOC (local-&gt;cont.getxattr.xattr_len,</div><div class='del'>-                                        sizeof (char), gf_common_mt_char);</div><div class='add'>+        xattr_serz = GF_CALLOC(local-&gt;cont.getxattr.xattr_len, sizeof(char),</div><div class='add'>+                               gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-                if (!xattr_serz) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = afr_serialize_xattrs_with_delimiter (frame, this,</div><div class='del'>-                                                           xattr_serz,</div><div class='del'>-                                                           UUID0_STR, &amp;tlen,</div><div class='del'>-                                                           ' ');</div><div class='del'>-                if (ret) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_dynstr (local-&gt;dict,</div><div class='del'>-                                       GF_XATTR_LIST_NODE_UUIDS_KEY,</div><div class='del'>-                                       xattr_serz);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Cannot set node_uuid key in dict");</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;op_ret = local-&gt;cont.getxattr.xattr_len - 1;</div><div class='del'>-                        local-&gt;op_errno = 0;</div><div class='del'>-                }</div><div class='add'>+        if (!xattr_serz) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-unwind:</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;dict,</div><div class='del'>-                                  local-&gt;xdata_rsp);</div><div class='add'>+        ret = afr_serialize_xattrs_with_delimiter(frame, this, xattr_serz,</div><div class='add'>+                                                  UUID0_STR, &amp;tlen, ' ');</div><div class='add'>+        if (ret) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_dynstr(local-&gt;dict, GF_XATTR_LIST_NODE_UUIDS_KEY,</div><div class='add'>+                              xattr_serz);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Cannot set node_uuid key in dict");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_ret = local-&gt;cont.getxattr.xattr_len - 1;</div><div class='add'>+            local-&gt;op_errno = 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;dict, local-&gt;xdata_rsp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_quota_size_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                             xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_quota_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int         idx         = (long) cookie;</div><div class='del'>-        int         call_count  = 0;</div><div class='del'>-        afr_local_t *local      = frame-&gt;local;</div><div class='del'>-        int         read_subvol = -1;</div><div class='del'>-</div><div class='del'>-        local-&gt;replies[idx].valid = 1;</div><div class='del'>-        local-&gt;replies[idx].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[idx].op_errno = op_errno;</div><div class='del'>-        if (dict)</div><div class='del'>-                local-&gt;replies[idx].xdata = dict_ref (dict);</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                local-&gt;inode = inode_ref (local-&gt;loc.inode);</div><div class='del'>-                read_subvol = afr_handle_quota_size (frame, this);</div><div class='del'>-                if (read_subvol != -1) {</div><div class='del'>-                        op_ret = local-&gt;replies[read_subvol].op_ret;</div><div class='del'>-                        op_errno = local-&gt;replies[read_subvol].op_errno;</div><div class='del'>-                        dict = local-&gt;replies[read_subvol].xdata;</div><div class='del'>-                }</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict,</div><div class='del'>-                                  xdata);</div><div class='add'>+    int idx = (long)cookie;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+</div><div class='add'>+    local-&gt;replies[idx].valid = 1;</div><div class='add'>+    local-&gt;replies[idx].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[idx].op_errno = op_errno;</div><div class='add'>+    if (dict)</div><div class='add'>+        local-&gt;replies[idx].xdata = dict_ref(dict);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        local-&gt;inode = inode_ref(local-&gt;loc.inode);</div><div class='add'>+        read_subvol = afr_handle_quota_size(frame, this);</div><div class='add'>+        if (read_subvol != -1) {</div><div class='add'>+            op_ret = local-&gt;replies[read_subvol].op_ret;</div><div class='add'>+            op_errno = local-&gt;replies[read_subvol].op_errno;</div><div class='add'>+            dict = local-&gt;replies[read_subvol].xdata;</div><div class='ctx'>         }</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_lockinfo_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                           xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                           dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_lockinfo_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          call_cnt     = 0, len = 0;</div><div class='del'>-        char        *lockinfo_buf = NULL;</div><div class='del'>-        dict_t      *lockinfo     = NULL, *newdict = NULL;</div><div class='del'>-        afr_local_t *local        = NULL;</div><div class='add'>+    int call_cnt = 0, len = 0;</div><div class='add'>+    char *lockinfo_buf = NULL;</div><div class='add'>+    dict_t *lockinfo = NULL, *newdict = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-                call_cnt = --local-&gt;call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                if ((op_ret &lt; 0) || (!dict &amp;&amp; !xdata)) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        call_cnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (xdata) {</div><div class='del'>-                        if (!local-&gt;xdata_rsp) {</div><div class='del'>-                                local-&gt;xdata_rsp = dict_new ();</div><div class='del'>-                                if (!local-&gt;xdata_rsp) {</div><div class='del'>-                                        local-&gt;op_ret = -1;</div><div class='del'>-                                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if ((op_ret &lt; 0) || (!dict &amp;&amp; !xdata)) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!dict) {</div><div class='del'>-                        goto unlock;</div><div class='add'>+        if (xdata) {</div><div class='add'>+            if (!local-&gt;xdata_rsp) {</div><div class='add'>+                local-&gt;xdata_rsp = dict_new();</div><div class='add'>+                if (!local-&gt;xdata_rsp) {</div><div class='add'>+                    local-&gt;op_ret = -1;</div><div class='add'>+                    local-&gt;op_errno = ENOMEM;</div><div class='add'>+                    goto unlock;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_ret = dict_get_ptr_and_len (dict, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                                               (void **)&amp;lockinfo_buf, &amp;len);</div><div class='add'>+        if (!dict) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!lockinfo_buf) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        op_ret = dict_get_ptr_and_len(dict, GF_XATTR_LOCKINFO_KEY,</div><div class='add'>+                                      (void **)&amp;lockinfo_buf, &amp;len);</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;dict) {</div><div class='del'>-                        local-&gt;dict = dict_new ();</div><div class='del'>-                        if (!local-&gt;dict) {</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (lockinfo_buf != NULL) {</div><div class='del'>-                lockinfo = dict_new ();</div><div class='del'>-                if (lockinfo == NULL) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                } else {</div><div class='del'>-                        op_ret = dict_unserialize (lockinfo_buf, len,</div><div class='del'>-                                                   &amp;lockinfo);</div><div class='del'>-</div><div class='del'>-                        if (lockinfo &amp;&amp; local-&gt;dict) {</div><div class='del'>-                                dict_copy (lockinfo, local-&gt;dict);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!lockinfo_buf) {</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xdata &amp;&amp; local-&gt;xdata_rsp) {</div><div class='del'>-                dict_copy (xdata, local-&gt;xdata_rsp);</div><div class='add'>+        if (!local-&gt;dict) {</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='add'>+            if (!local-&gt;dict) {</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = ENOMEM;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!call_cnt) {</div><div class='del'>-                newdict = dict_new ();</div><div class='del'>-                if (!newdict) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    if (lockinfo_buf != NULL) {</div><div class='add'>+        lockinfo = dict_new();</div><div class='add'>+        if (lockinfo == NULL) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+        } else {</div><div class='add'>+            op_ret = dict_unserialize(lockinfo_buf, len, &amp;lockinfo);</div><div class='ctx'> </div><div class='del'>-                len = dict_serialized_length (local-&gt;dict);</div><div class='del'>-                if (len &lt;= 0) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+            if (lockinfo &amp;&amp; local-&gt;dict) {</div><div class='add'>+                dict_copy(lockinfo, local-&gt;dict);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata &amp;&amp; local-&gt;xdata_rsp) {</div><div class='add'>+        dict_copy(xdata, local-&gt;xdata_rsp);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!call_cnt) {</div><div class='add'>+        newdict = dict_new();</div><div class='add'>+        if (!newdict) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                lockinfo_buf = GF_CALLOC (1, len, gf_common_mt_char);</div><div class='del'>-                if (!lockinfo_buf) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        len = dict_serialized_length(local-&gt;dict);</div><div class='add'>+        if (len &lt;= 0) {</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_ret = dict_serialize (local-&gt;dict, lockinfo_buf);</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = -op_ret;</div><div class='del'>-                }</div><div class='add'>+        lockinfo_buf = GF_CALLOC(1, len, gf_common_mt_char);</div><div class='add'>+        if (!lockinfo_buf) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_ret = dict_set_dynptr (newdict, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                                          (void *)lockinfo_buf, len);</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = -op_ret;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        op_ret = dict_serialize(local-&gt;dict, lockinfo_buf);</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = -op_ret;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        unwind:</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, op_ret,</div><div class='del'>-                                  op_errno, newdict,</div><div class='del'>-                                  local-&gt;xdata_rsp);</div><div class='add'>+        op_ret = dict_set_dynptr(newdict, GF_XATTR_LOCKINFO_KEY,</div><div class='add'>+                                 (void *)lockinfo_buf, len);</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = -op_ret;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dict_unref (lockinfo);</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, op_ret, op_errno, newdict,</div><div class='add'>+                         local-&gt;xdata_rsp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    dict_unref(lockinfo);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fgetxattr_lockinfo_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                            xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                            dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_fgetxattr_lockinfo_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          call_cnt     = 0, len = 0;</div><div class='del'>-        char        *lockinfo_buf = NULL;</div><div class='del'>-        dict_t      *lockinfo     = NULL, *newdict = NULL;</div><div class='del'>-        afr_local_t *local        = NULL;</div><div class='add'>+    int call_cnt = 0, len = 0;</div><div class='add'>+    char *lockinfo_buf = NULL;</div><div class='add'>+    dict_t *lockinfo = NULL, *newdict = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-                call_cnt = --local-&gt;call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                if ((op_ret &lt; 0) || (!dict &amp;&amp; !xdata)) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        call_cnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (xdata) {</div><div class='del'>-                        if (!local-&gt;xdata_rsp) {</div><div class='del'>-                                local-&gt;xdata_rsp = dict_new ();</div><div class='del'>-                                if (!local-&gt;xdata_rsp) {</div><div class='del'>-                                        local-&gt;op_ret = -1;</div><div class='del'>-                                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if ((op_ret &lt; 0) || (!dict &amp;&amp; !xdata)) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!dict) {</div><div class='del'>-                        goto unlock;</div><div class='add'>+        if (xdata) {</div><div class='add'>+            if (!local-&gt;xdata_rsp) {</div><div class='add'>+                local-&gt;xdata_rsp = dict_new();</div><div class='add'>+                if (!local-&gt;xdata_rsp) {</div><div class='add'>+                    local-&gt;op_ret = -1;</div><div class='add'>+                    local-&gt;op_errno = ENOMEM;</div><div class='add'>+                    goto unlock;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_ret = dict_get_ptr_and_len (dict, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                                               (void **)&amp;lockinfo_buf, &amp;len);</div><div class='add'>+        if (!dict) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!lockinfo_buf) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        op_ret = dict_get_ptr_and_len(dict, GF_XATTR_LOCKINFO_KEY,</div><div class='add'>+                                      (void **)&amp;lockinfo_buf, &amp;len);</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;dict) {</div><div class='del'>-                        local-&gt;dict = dict_new ();</div><div class='del'>-                        if (!local-&gt;dict) {</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (lockinfo_buf != NULL) {</div><div class='del'>-                lockinfo = dict_new ();</div><div class='del'>-                if (lockinfo == NULL) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                } else {</div><div class='del'>-                        op_ret = dict_unserialize (lockinfo_buf, len,</div><div class='del'>-                                                   &amp;lockinfo);</div><div class='del'>-</div><div class='del'>-                        if (lockinfo &amp;&amp; local-&gt;dict) {</div><div class='del'>-                                dict_copy (lockinfo, local-&gt;dict);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!lockinfo_buf) {</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xdata &amp;&amp; local-&gt;xdata_rsp) {</div><div class='del'>-                dict_copy (xdata, local-&gt;xdata_rsp);</div><div class='add'>+        if (!local-&gt;dict) {</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='add'>+            if (!local-&gt;dict) {</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = ENOMEM;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!call_cnt) {</div><div class='del'>-                newdict = dict_new ();</div><div class='del'>-                if (!newdict) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    if (lockinfo_buf != NULL) {</div><div class='add'>+        lockinfo = dict_new();</div><div class='add'>+        if (lockinfo == NULL) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+        } else {</div><div class='add'>+            op_ret = dict_unserialize(lockinfo_buf, len, &amp;lockinfo);</div><div class='ctx'> </div><div class='del'>-                len = dict_serialized_length (local-&gt;dict);</div><div class='del'>-                if (len &lt;= 0) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+            if (lockinfo &amp;&amp; local-&gt;dict) {</div><div class='add'>+                dict_copy(lockinfo, local-&gt;dict);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata &amp;&amp; local-&gt;xdata_rsp) {</div><div class='add'>+        dict_copy(xdata, local-&gt;xdata_rsp);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!call_cnt) {</div><div class='add'>+        newdict = dict_new();</div><div class='add'>+        if (!newdict) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                lockinfo_buf = GF_CALLOC (1, len, gf_common_mt_char);</div><div class='del'>-                if (!lockinfo_buf) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        len = dict_serialized_length(local-&gt;dict);</div><div class='add'>+        if (len &lt;= 0) {</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_ret = dict_serialize (local-&gt;dict, lockinfo_buf);</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = -op_ret;</div><div class='del'>-                }</div><div class='add'>+        lockinfo_buf = GF_CALLOC(1, len, gf_common_mt_char);</div><div class='add'>+        if (!lockinfo_buf) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                op_ret = dict_set_dynptr (newdict, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                                          (void *)lockinfo_buf, len);</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = -op_ret;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        op_ret = dict_serialize(local-&gt;dict, lockinfo_buf);</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = -op_ret;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        unwind:</div><div class='del'>-                AFR_STACK_UNWIND (fgetxattr, frame, op_ret,</div><div class='del'>-                                  op_errno, newdict,</div><div class='del'>-                                  local-&gt;xdata_rsp);</div><div class='add'>+        op_ret = dict_set_dynptr(newdict, GF_XATTR_LOCKINFO_KEY,</div><div class='add'>+                                 (void *)lockinfo_buf, len);</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = -op_ret;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dict_unref (lockinfo);</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(fgetxattr, frame, op_ret, op_errno, newdict,</div><div class='add'>+                         local-&gt;xdata_rsp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    dict_unref(lockinfo);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fgetxattr_pathinfo_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                            xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                            dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_fgetxattr_pathinfo_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local          = NULL;</div><div class='del'>-        int32_t      callcnt        = 0;</div><div class='del'>-        int          ret            = 0;</div><div class='del'>-        char        *xattr          = NULL;</div><div class='del'>-        char        *xattr_serz     = NULL;</div><div class='del'>-        char        xattr_cky[1024] = {0,};</div><div class='del'>-        dict_t      *nxattr         = NULL;</div><div class='del'>-        long         cky            = 0;</div><div class='del'>-        int32_t      padding        = 0;</div><div class='del'>-        int32_t      tlen           = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !frame-&gt;local || !this) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_INVALID_ARG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *xattr = NULL;</div><div class='add'>+    char *xattr_serz = NULL;</div><div class='add'>+    char xattr_cky[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *nxattr = NULL;</div><div class='add'>+    long cky = 0;</div><div class='add'>+    int32_t padding = 0;</div><div class='add'>+    int32_t tlen = 0;</div><div class='add'>+</div><div class='add'>+    if (!frame || !frame-&gt;local || !this) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, AFR_MSG_INVALID_ARG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    cky = (long)cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        cky = (long) cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-                                local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-                }</div><div class='add'>+        if (!dict || (op_ret &lt; 0))</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (!dict || (op_ret &lt; 0))</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;dict)</div><div class='del'>-                        local-&gt;dict = dict_new ();</div><div class='del'>-</div><div class='del'>-                if (local-&gt;dict) {</div><div class='del'>-                        ret = dict_get_str (dict,</div><div class='del'>-                                            local-&gt;cont.getxattr.name,</div><div class='del'>-                                            &amp;xattr);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        xattr = gf_strdup (xattr);</div><div class='del'>-</div><div class='del'>-                        (void)snprintf (xattr_cky, sizeof(xattr_cky), "%s-%ld",</div><div class='del'>-                                        local-&gt;cont.getxattr.name, cky);</div><div class='del'>-                        ret = dict_set_dynstr (local-&gt;dict,</div><div class='del'>-                                               xattr_cky, xattr);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Cannot set xattr cookie key");</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local-&gt;cont.getxattr.xattr_len</div><div class='del'>-                                += strlen (xattr) + 1;</div><div class='del'>-                }</div><div class='add'>+        if (!local-&gt;dict)</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='add'>+</div><div class='add'>+        if (local-&gt;dict) {</div><div class='add'>+            ret = dict_get_str(dict, local-&gt;cont.getxattr.name, &amp;xattr);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+</div><div class='add'>+            xattr = gf_strdup(xattr);</div><div class='add'>+</div><div class='add'>+            (void)snprintf(xattr_cky, sizeof(xattr_cky), "%s-%ld",</div><div class='add'>+                           local-&gt;cont.getxattr.name, cky);</div><div class='add'>+            ret = dict_set_dynstr(local-&gt;dict, xattr_cky, xattr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Cannot set xattr cookie key");</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            local-&gt;cont.getxattr.xattr_len += strlen(xattr) + 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (!local-&gt;cont.getxattr.xattr_len)</div><div class='del'>-                        goto unwind;</div><div class='del'>-</div><div class='del'>-                nxattr = dict_new ();</div><div class='del'>-                if (!nxattr)</div><div class='del'>-                        goto unwind;</div><div class='del'>-</div><div class='del'>-                /* extra bytes for decorations (brackets and &lt;&gt;'s) */</div><div class='del'>-                padding += strlen (this-&gt;name)</div><div class='del'>-                        + SLEN (AFR_PATHINFO_HEADER) + 4;</div><div class='del'>-                local-&gt;cont.getxattr.xattr_len += (padding + 2);</div><div class='del'>-</div><div class='del'>-                xattr_serz = GF_MALLOC (local-&gt;cont.getxattr.xattr_len,</div><div class='del'>-                                        gf_common_mt_char);</div><div class='del'>-</div><div class='del'>-                if (!xattr_serz)</div><div class='del'>-                        goto unwind;</div><div class='del'>-</div><div class='del'>-                /* the xlator info */</div><div class='del'>-                int xattr_serz_len = sprintf (xattr_serz,</div><div class='del'>-                                              "(&lt;"AFR_PATHINFO_HEADER"%s&gt; ",</div><div class='del'>-                                              this-&gt;name);</div><div class='del'>-</div><div class='del'>-                /* actual series of pathinfo */</div><div class='del'>-                ret = dict_serialize_value_with_delim (local-&gt;dict,</div><div class='del'>-                                                       xattr_serz</div><div class='del'>-                                                       + xattr_serz_len,</div><div class='del'>-                                                       &amp;tlen, ' ');</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (!local-&gt;cont.getxattr.xattr_len)</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-                /* closing part */</div><div class='del'>-                *(xattr_serz + padding + tlen) = ')';</div><div class='del'>-                *(xattr_serz + padding + tlen + 1) = '\0';</div><div class='add'>+        nxattr = dict_new();</div><div class='add'>+        if (!nxattr)</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_dynstr (nxattr, local-&gt;cont.getxattr.name,</div><div class='del'>-                                       xattr_serz);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Cannot set pathinfo key in dict");</div><div class='add'>+        /* extra bytes for decorations (brackets and &lt;&gt;'s) */</div><div class='add'>+        padding += strlen(this-&gt;name) + SLEN(AFR_PATHINFO_HEADER) + 4;</div><div class='add'>+        local-&gt;cont.getxattr.xattr_len += (padding + 2);</div><div class='ctx'> </div><div class='del'>-        unwind:</div><div class='del'>-                AFR_STACK_UNWIND (fgetxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, nxattr, local-&gt;xdata_rsp);</div><div class='add'>+        xattr_serz = GF_MALLOC(local-&gt;cont.getxattr.xattr_len,</div><div class='add'>+                               gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-                if (nxattr)</div><div class='del'>-                        dict_unref (nxattr);</div><div class='add'>+        if (!xattr_serz)</div><div class='add'>+            goto unwind;</div><div class='add'>+</div><div class='add'>+        /* the xlator info */</div><div class='add'>+        int xattr_serz_len = sprintf(</div><div class='add'>+            xattr_serz, "(&lt;" AFR_PATHINFO_HEADER "%s&gt; ", this-&gt;name);</div><div class='add'>+</div><div class='add'>+        /* actual series of pathinfo */</div><div class='add'>+        ret = dict_serialize_value_with_delim(</div><div class='add'>+            local-&gt;dict, xattr_serz + xattr_serz_len, &amp;tlen, ' ');</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        /* closing part */</div><div class='add'>+        *(xattr_serz + padding + tlen) = ')';</div><div class='add'>+        *(xattr_serz + padding + tlen + 1) = '\0';</div><div class='add'>+</div><div class='add'>+        ret = dict_set_dynstr(nxattr, local-&gt;cont.getxattr.name, xattr_serz);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Cannot set pathinfo key in dict");</div><div class='add'>+</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(fgetxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         nxattr, local-&gt;xdata_rsp);</div><div class='add'>+</div><div class='add'>+        if (nxattr)</div><div class='add'>+            dict_unref(nxattr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr_pathinfo_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                           xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                           dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_getxattr_pathinfo_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local          = NULL;</div><div class='del'>-        int32_t      callcnt        = 0;</div><div class='del'>-        int          ret            = 0;</div><div class='del'>-        char        *xattr          = NULL;</div><div class='del'>-        char        *xattr_serz     = NULL;</div><div class='del'>-        char        xattr_cky[1024] = {0,};</div><div class='del'>-        dict_t      *nxattr         = NULL;</div><div class='del'>-        long         cky            = 0;</div><div class='del'>-        int32_t      padding        = 0;</div><div class='del'>-        int32_t      tlen           = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !frame-&gt;local || !this) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_INVALID_ARG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *xattr = NULL;</div><div class='add'>+    char *xattr_serz = NULL;</div><div class='add'>+    char xattr_cky[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *nxattr = NULL;</div><div class='add'>+    long cky = 0;</div><div class='add'>+    int32_t padding = 0;</div><div class='add'>+    int32_t tlen = 0;</div><div class='add'>+</div><div class='add'>+    if (!frame || !frame-&gt;local || !this) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, AFR_MSG_INVALID_ARG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    cky = (long)cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        cky = (long) cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                        if (op_ret &lt; 0) {</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                        } else {</div><div class='del'>-                                local-&gt;op_ret = op_ret;</div><div class='del'>-                                if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-                                        local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (!dict || (op_ret &lt; 0))</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        if (!local-&gt;dict)</div><div class='del'>-                                local-&gt;dict = dict_new ();</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;dict) {</div><div class='del'>-                                ret = dict_get_str (dict,</div><div class='del'>-                                                    local-&gt;cont.getxattr.name,</div><div class='del'>-                                                    &amp;xattr);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto unlock;</div><div class='del'>-</div><div class='del'>-                                xattr = gf_strdup (xattr);</div><div class='del'>-</div><div class='del'>-                                (void)snprintf (xattr_cky, 1024, "%s-%ld",</div><div class='del'>-                                                local-&gt;cont.getxattr.name, cky);</div><div class='del'>-                                ret = dict_set_dynstr (local-&gt;dict,</div><div class='del'>-                                                       xattr_cky, xattr);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                -ret,</div><div class='del'>-                                                AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "Cannot set xattr "</div><div class='del'>-                                                "cookie key");</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                local-&gt;cont.getxattr.xattr_len += strlen (xattr) + 1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        if (!dict || (op_ret &lt; 0))</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;dict)</div><div class='add'>+            local-&gt;dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (!local-&gt;cont.getxattr.xattr_len)</div><div class='del'>-                        goto unwind;</div><div class='add'>+        if (local-&gt;dict) {</div><div class='add'>+            ret = dict_get_str(dict, local-&gt;cont.getxattr.name, &amp;xattr);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='ctx'> </div><div class='del'>-                nxattr = dict_new ();</div><div class='del'>-                if (!nxattr)</div><div class='del'>-                        goto unwind;</div><div class='add'>+            xattr = gf_strdup(xattr);</div><div class='ctx'> </div><div class='del'>-                /* extra bytes for decorations (brackets and &lt;&gt;'s) */</div><div class='del'>-                padding += strlen (this-&gt;name) + SLEN (AFR_PATHINFO_HEADER) + 4;</div><div class='del'>-                local-&gt;cont.getxattr.xattr_len += (padding + 2);</div><div class='add'>+            (void)snprintf(xattr_cky, 1024, "%s-%ld", local-&gt;cont.getxattr.name,</div><div class='add'>+                           cky);</div><div class='add'>+            ret = dict_set_dynstr(local-&gt;dict, xattr_cky, xattr);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Cannot set xattr "</div><div class='add'>+                       "cookie key");</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                xattr_serz = GF_MALLOC (local-&gt;cont.getxattr.xattr_len,</div><div class='del'>-                                        gf_common_mt_char);</div><div class='add'>+            local-&gt;cont.getxattr.xattr_len += strlen(xattr) + 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (!xattr_serz)</div><div class='del'>-                        goto unwind;</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (!local-&gt;cont.getxattr.xattr_len)</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-                /* the xlator info */</div><div class='del'>-                int xattr_serz_len = sprintf (xattr_serz,</div><div class='del'>-                                              "(&lt;"AFR_PATHINFO_HEADER"%s&gt; ",</div><div class='del'>-                                              this-&gt;name);</div><div class='add'>+        nxattr = dict_new();</div><div class='add'>+        if (!nxattr)</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-                /* actual series of pathinfo */</div><div class='del'>-                ret = dict_serialize_value_with_delim (local-&gt;dict,</div><div class='del'>-                                                       xattr_serz + xattr_serz_len,</div><div class='del'>-                                                       &amp;tlen, ' ');</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        /* extra bytes for decorations (brackets and &lt;&gt;'s) */</div><div class='add'>+        padding += strlen(this-&gt;name) + SLEN(AFR_PATHINFO_HEADER) + 4;</div><div class='add'>+        local-&gt;cont.getxattr.xattr_len += (padding + 2);</div><div class='ctx'> </div><div class='del'>-                /* closing part */</div><div class='del'>-                *(xattr_serz + padding + tlen) = ')';</div><div class='del'>-                *(xattr_serz + padding + tlen + 1) = '\0';</div><div class='add'>+        xattr_serz = GF_MALLOC(local-&gt;cont.getxattr.xattr_len,</div><div class='add'>+                               gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_dynstr (nxattr, local-&gt;cont.getxattr.name,</div><div class='del'>-                                       xattr_serz);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Cannot set pathinfo key in dict");</div><div class='add'>+        if (!xattr_serz)</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-        unwind:</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, nxattr, local-&gt;xdata_rsp);</div><div class='add'>+        /* the xlator info */</div><div class='add'>+        int xattr_serz_len = sprintf(</div><div class='add'>+            xattr_serz, "(&lt;" AFR_PATHINFO_HEADER "%s&gt; ", this-&gt;name);</div><div class='ctx'> </div><div class='del'>-                if (nxattr)</div><div class='del'>-                        dict_unref (nxattr);</div><div class='add'>+        /* actual series of pathinfo */</div><div class='add'>+        ret = dict_serialize_value_with_delim(</div><div class='add'>+            local-&gt;dict, xattr_serz + xattr_serz_len, &amp;tlen, ' ');</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        /* closing part */</div><div class='add'>+        *(xattr_serz + padding + tlen) = ')';</div><div class='add'>+        *(xattr_serz + padding + tlen + 1) = '\0';</div><div class='add'>+</div><div class='add'>+        ret = dict_set_dynstr(nxattr, local-&gt;cont.getxattr.name, xattr_serz);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Cannot set pathinfo key in dict");</div><div class='add'>+</div><div class='add'>+    unwind:</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         nxattr, local-&gt;xdata_rsp);</div><div class='add'>+</div><div class='add'>+        if (nxattr)</div><div class='add'>+            dict_unref(nxattr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_aggregate_stime_xattr (dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+afr_aggregate_stime_xattr(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (fnmatch (GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0)</div><div class='del'>-                ret = gf_get_max_stime (THIS, data, key, value);</div><div class='add'>+    if (fnmatch(GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0)</div><div class='add'>+        ret = gf_get_max_stime(THIS, data, key, value);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_common_getxattr_stime_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                               dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_common_getxattr_stime_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                              int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local          = NULL;</div><div class='del'>-        int32_t      callcnt        = 0;</div><div class='del'>-</div><div class='del'>-        if (!frame || !frame-&gt;local || !this) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_INVALID_ARG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (!frame || !frame-&gt;local || !this) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, AFR_MSG_INVALID_ARG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                if (!dict || (op_ret &lt; 0)) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto cleanup;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;dict)</div><div class='del'>-                        local-&gt;dict = dict_copy_with_ref (dict, NULL);</div><div class='del'>-                else</div><div class='del'>-                        dict_foreach (dict, afr_aggregate_stime_xattr,</div><div class='del'>-                                      local-&gt;dict);</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+        if (!dict || (op_ret &lt; 0)) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto cleanup;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if (!local-&gt;dict)</div><div class='add'>+            local-&gt;dict = dict_copy_with_ref(dict, NULL);</div><div class='add'>+        else</div><div class='add'>+            dict_foreach(dict, afr_aggregate_stime_xattr, local-&gt;dict);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> cleanup:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;dict, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;dict, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_is_special_xattr (const char *name, fop_getxattr_cbk_t *cbk,</div><div class='del'>-                      gf_boolean_t is_fgetxattr)</div><div class='add'>+afr_is_special_xattr(const char *name, fop_getxattr_cbk_t *cbk,</div><div class='add'>+                     gf_boolean_t is_fgetxattr)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    is_spl = _gf_true;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (cbk);</div><div class='del'>-        if (!cbk || !name) {</div><div class='del'>-                is_spl = _gf_false;</div><div class='del'>-                goto out;</div><div class='add'>+    gf_boolean_t is_spl = _gf_true;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(cbk);</div><div class='add'>+    if (!cbk || !name) {</div><div class='add'>+        is_spl = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(name, GF_XATTR_PATHINFO_KEY) ||</div><div class='add'>+        !strcmp(name, GF_XATTR_USER_PATHINFO_KEY)) {</div><div class='add'>+        if (is_fgetxattr) {</div><div class='add'>+            *cbk = afr_fgetxattr_pathinfo_cbk;</div><div class='add'>+        } else {</div><div class='add'>+            *cbk = afr_getxattr_pathinfo_cbk;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!strcmp (name, GF_XATTR_PATHINFO_KEY) ||</div><div class='del'>-	    !strcmp (name, GF_XATTR_USER_PATHINFO_KEY)) {</div><div class='del'>-                if (is_fgetxattr) {</div><div class='del'>-                        *cbk = afr_fgetxattr_pathinfo_cbk;</div><div class='del'>-                } else {</div><div class='del'>-                        *cbk = afr_getxattr_pathinfo_cbk;</div><div class='del'>-                }</div><div class='del'>-        } else if (!strncmp (name, GF_XATTR_CLRLK_CMD,</div><div class='del'>-                             SLEN (GF_XATTR_CLRLK_CMD))) {</div><div class='del'>-                if (is_fgetxattr) {</div><div class='del'>-                        *cbk = afr_fgetxattr_clrlk_cbk;</div><div class='del'>-                } else {</div><div class='del'>-                        *cbk = afr_getxattr_clrlk_cbk;</div><div class='del'>-                }</div><div class='del'>-        } else if (!strncmp (name, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                             SLEN (GF_XATTR_LOCKINFO_KEY))) {</div><div class='del'>-                if (is_fgetxattr) {</div><div class='del'>-                        *cbk = afr_fgetxattr_lockinfo_cbk;</div><div class='del'>-                } else {</div><div class='del'>-                        *cbk = afr_getxattr_lockinfo_cbk;</div><div class='del'>-                }</div><div class='del'>-        } else if (fnmatch (GF_XATTR_STIME_PATTERN, name, FNM_NOESCAPE) == 0) {</div><div class='del'>-                *cbk = afr_common_getxattr_stime_cbk;</div><div class='del'>-        } else if (strcmp (name, QUOTA_SIZE_KEY) == 0) {</div><div class='del'>-                *cbk = afr_getxattr_quota_size_cbk;</div><div class='del'>-        } else if (!strcmp (name, GF_XATTR_LIST_NODE_UUIDS_KEY)) {</div><div class='del'>-                *cbk = afr_getxattr_list_node_uuids_cbk;</div><div class='add'>+    } else if (!strncmp(name, GF_XATTR_CLRLK_CMD, SLEN(GF_XATTR_CLRLK_CMD))) {</div><div class='add'>+        if (is_fgetxattr) {</div><div class='add'>+            *cbk = afr_fgetxattr_clrlk_cbk;</div><div class='add'>+        } else {</div><div class='add'>+            *cbk = afr_getxattr_clrlk_cbk;</div><div class='add'>+        }</div><div class='add'>+    } else if (!strncmp(name, GF_XATTR_LOCKINFO_KEY,</div><div class='add'>+                        SLEN(GF_XATTR_LOCKINFO_KEY))) {</div><div class='add'>+        if (is_fgetxattr) {</div><div class='add'>+            *cbk = afr_fgetxattr_lockinfo_cbk;</div><div class='ctx'>         } else {</div><div class='del'>-                is_spl = _gf_false;</div><div class='add'>+            *cbk = afr_getxattr_lockinfo_cbk;</div><div class='ctx'>         }</div><div class='add'>+    } else if (fnmatch(GF_XATTR_STIME_PATTERN, name, FNM_NOESCAPE) == 0) {</div><div class='add'>+        *cbk = afr_common_getxattr_stime_cbk;</div><div class='add'>+    } else if (strcmp(name, QUOTA_SIZE_KEY) == 0) {</div><div class='add'>+        *cbk = afr_getxattr_quota_size_cbk;</div><div class='add'>+    } else if (!strcmp(name, GF_XATTR_LIST_NODE_UUIDS_KEY)) {</div><div class='add'>+        *cbk = afr_getxattr_list_node_uuids_cbk;</div><div class='add'>+    } else {</div><div class='add'>+        is_spl = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return is_spl;</div><div class='add'>+    return is_spl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_getxattr_all_subvols (xlator_t *this, call_frame_t *frame,</div><div class='del'>-			  const char *name, loc_t *loc,</div><div class='del'>-			  fop_getxattr_cbk_t cbk)</div><div class='add'>+afr_getxattr_all_subvols(xlator_t *this, call_frame_t *frame, const char *name,</div><div class='add'>+                         loc_t *loc, fop_getxattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv           = NULL;</div><div class='del'>-        afr_local_t     *local          = NULL;</div><div class='del'>-        int             i               = 0;</div><div class='del'>-        int             call_count      = 0;</div><div class='del'>-</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        //local-&gt;call_count set in afr_local_init</div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-        if (!strcmp (name, GF_XATTR_LIST_NODE_UUIDS_KEY)) {</div><div class='del'>-                GF_FREE (local-&gt;cont.getxattr.name);</div><div class='del'>-                local-&gt;cont.getxattr.name = gf_strdup (GF_XATTR_NODE_UUID_KEY);</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    // local-&gt;call_count set in afr_local_init</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(name, GF_XATTR_LIST_NODE_UUIDS_KEY)) {</div><div class='add'>+        GF_FREE(local-&gt;cont.getxattr.name);</div><div class='add'>+        local-&gt;cont.getxattr.name = gf_strdup(GF_XATTR_NODE_UUID_KEY);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // If up-children count is 0, afr_local_init would have failed already</div><div class='add'>+    // and the call would have unwound so not handling it here.</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                              priv-&gt;children[i]-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                              local-&gt;cont.getxattr.name, NULL);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        //If up-children count is 0, afr_local_init would have failed already</div><div class='del'>-        //and the call would have unwound so not handling it here.</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, cbk,</div><div class='del'>-                                           (void *) (long) i, priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;getxattr,</div><div class='del'>-                                           loc, local-&gt;cont.getxattr.name,</div><div class='del'>-                                           NULL);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_marker_populate_args (call_frame_t *frame, int type, int *gauge,</div><div class='del'>-                          xlator_t **subvols)</div><div class='add'>+afr_marker_populate_args(call_frame_t *frame, int type, int *gauge,</div><div class='add'>+                         xlator_t **subvols)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = frame-&gt;this;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        memcpy (subvols, priv-&gt;children, sizeof (*subvols) * priv-&gt;child_count);</div><div class='add'>+    memcpy(subvols, priv-&gt;children, sizeof(*subvols) * priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        if (type == MARKER_XTIME_TYPE) {</div><div class='del'>-                /*Don't error out on ENOENT/ENOTCONN */</div><div class='del'>-                gauge[MCNT_NOTFOUND] = 0;</div><div class='del'>-                gauge[MCNT_ENOTCONN] = 0;</div><div class='del'>-        }</div><div class='del'>-        return priv-&gt;child_count;</div><div class='add'>+    if (type == MARKER_XTIME_TYPE) {</div><div class='add'>+        /*Don't error out on ENOENT/ENOTCONN */</div><div class='add'>+        gauge[MCNT_NOTFOUND] = 0;</div><div class='add'>+        gauge[MCNT_ENOTCONN] = 0;</div><div class='add'>+    }</div><div class='add'>+    return priv-&gt;child_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_handle_heal_xattrs (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                        const char *heal_op)</div><div class='add'>+afr_handle_heal_xattrs(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                       const char *heal_op)</div><div class='ctx'> {</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-        afr_spb_status_t       *data    = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    afr_spb_status_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (heal_op, GF_HEAL_INFO)) {</div><div class='del'>-                afr_get_heal_info (frame, this, loc);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!strcmp(heal_op, GF_HEAL_INFO)) {</div><div class='add'>+        afr_get_heal_info(frame, this, loc);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (heal_op, GF_AFR_HEAL_SBRAIN)) {</div><div class='del'>-                afr_heal_splitbrain_file (frame, this, loc);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    if (!strcmp(heal_op, GF_AFR_HEAL_SBRAIN)) {</div><div class='add'>+        afr_heal_splitbrain_file(frame, this, loc);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(heal_op, GF_AFR_SBRAIN_STATUS)) {</div><div class='add'>+        data = GF_CALLOC(1, sizeof(*data), gf_afr_mt_spb_status_t);</div><div class='add'>+        if (!data) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!strcmp (heal_op, GF_AFR_SBRAIN_STATUS)) {</div><div class='del'>-                data = GF_CALLOC (1, sizeof (*data), gf_afr_mt_spb_status_t);</div><div class='del'>-                if (!data) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                data-&gt;frame = frame;</div><div class='del'>-                data-&gt;loc = loc;</div><div class='del'>-                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                    afr_get_split_brain_status,</div><div class='del'>-                                    afr_get_split_brain_status_cbk,</div><div class='del'>-                                    NULL, data);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN_STATUS,</div><div class='del'>-                                "Failed to create"</div><div class='del'>-                                " synctask. Unable to fetch split-brain status"</div><div class='del'>-                                " for %s.", loc-&gt;name);</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+        data-&gt;frame = frame;</div><div class='add'>+        data-&gt;loc = loc;</div><div class='add'>+        ret = synctask_new(this-&gt;ctx-&gt;env, afr_get_split_brain_status,</div><div class='add'>+                           afr_get_split_brain_status_cbk, NULL, data);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN_STATUS,</div><div class='add'>+                   "Failed to create"</div><div class='add'>+                   " synctask. Unable to fetch split-brain status"</div><div class='add'>+                   " for %s.",</div><div class='add'>+                   loc-&gt;name);</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-                if (data)</div><div class='del'>-                        GF_FREE (data);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+        if (data)</div><div class='add'>+            GF_FREE(data);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+afr_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv         = NULL;</div><div class='del'>-        afr_local_t             *local        = NULL;</div><div class='del'>-        xlator_t                **children    = NULL;</div><div class='del'>-        int                     i             = 0;</div><div class='del'>-        int32_t                 op_errno      = 0;</div><div class='del'>-        int                     ret           = -1;</div><div class='del'>-        fop_getxattr_cbk_t      cbk           = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    xlator_t **children = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fop_getxattr_cbk_t cbk = NULL;</div><div class='ctx'> </div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv     = this-&gt;private;</div><div class='add'>+    children = priv-&gt;children;</div><div class='ctx'> </div><div class='del'>-        children = priv-&gt;children;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;op = GF_FOP_GETXATTR;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_GETXATTR;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    if (!name)</div><div class='add'>+        goto no_name;</div><div class='ctx'> </div><div class='del'>-        if (!name)</div><div class='del'>-                goto no_name;</div><div class='add'>+    local-&gt;cont.getxattr.name = gf_strdup(name);</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.getxattr.name = gf_strdup (name);</div><div class='add'>+    if (!local-&gt;cont.getxattr.name) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;cont.getxattr.name) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (!strncmp (name, AFR_XATTR_PREFIX,</div><div class='del'>-                      SLEN (AFR_XATTR_PREFIX))) {</div><div class='del'>-                op_errno = ENODATA;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!strncmp(name, AFR_XATTR_PREFIX, SLEN(AFR_XATTR_PREFIX))) {</div><div class='add'>+        op_errno = ENODATA;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cluster_handle_marker_getxattr (frame, loc, name, priv-&gt;vol_uuid,</div><div class='del'>-                                            afr_getxattr_unwind,</div><div class='del'>-                                            afr_marker_populate_args) == 0)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        ret = afr_handle_heal_xattrs (frame, this, &amp;local-&gt;loc, name);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (cluster_handle_marker_getxattr(frame, loc, name, priv-&gt;vol_uuid,</div><div class='add'>+                                       afr_getxattr_unwind,</div><div class='add'>+                                       afr_marker_populate_args) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Heal daemons don't have IO threads ... and as a result they</div><div class='del'>-         * send this getxattr down and eventually crash :(</div><div class='del'>-         */</div><div class='del'>-        op_errno = -1;</div><div class='del'>-        GF_CHECK_XATTR_KEY_AND_GOTO(name, IO_THREADS_QUEUE_SIZE_KEY, op_errno,</div><div class='del'>-                                    out);</div><div class='add'>+    ret = afr_handle_heal_xattrs(frame, this, &amp;local-&gt;loc, name);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Special xattrs which need responses from all subvols</div><div class='del'>-         */</div><div class='del'>-        if (afr_is_special_xattr (name, &amp;cbk, 0)) {</div><div class='del'>-                afr_getxattr_all_subvols (this, frame, name, loc, cbk);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /*</div><div class='add'>+     * Heal daemons don't have IO threads ... and as a result they</div><div class='add'>+     * send this getxattr down and eventually crash :(</div><div class='add'>+     */</div><div class='add'>+    op_errno = -1;</div><div class='add'>+    GF_CHECK_XATTR_KEY_AND_GOTO(name, IO_THREADS_QUEUE_SIZE_KEY, op_errno, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Special xattrs which need responses from all subvols</div><div class='add'>+     */</div><div class='add'>+    if (afr_is_special_xattr(name, &amp;cbk, 0)) {</div><div class='add'>+        afr_getxattr_all_subvols(this, frame, name, loc, cbk);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (XATTR_IS_NODE_UUID (name)) {</div><div class='del'>-                i = 0;</div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_getxattr_node_uuid_cbk,</div><div class='del'>-                                   (void *) (long) i,</div><div class='del'>-                                   children[i],</div><div class='del'>-                                   children[i]-&gt;fops-&gt;getxattr,</div><div class='del'>-                                   loc, name, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (XATTR_IS_NODE_UUID(name)) {</div><div class='add'>+        i = 0;</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_getxattr_node_uuid_cbk, (void *)(long)i,</div><div class='add'>+                          children[i], children[i]-&gt;fops-&gt;getxattr, loc, name,</div><div class='add'>+                          xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> no_name:</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, local-&gt;loc.inode, afr_getxattr_wind,</div><div class='del'>-		      AFR_METADATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, local-&gt;loc.inode, afr_getxattr_wind,</div><div class='add'>+                 AFR_METADATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                AFR_STACK_UNWIND (getxattr, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        AFR_STACK_UNWIND(getxattr, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {{{ fgetxattr */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-afr_fgetxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                   xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   dict_t *dict, dict_t *xdata)</div><div class='add'>+afr_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (dict)</div><div class='del'>-		afr_filter_xattrs (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        afr_filter_xattrs(dict);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    AFR_STACK_UNWIND(fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fgetxattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fgetxattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-		AFR_STACK_UNWIND (fgetxattr, frame, local-&gt;op_ret,</div><div class='del'>-				  local-&gt;op_errno, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_fgetxattr_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;fgetxattr,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.getxattr.name,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-afr_fgetxattr_all_subvols (xlator_t *this, call_frame_t *frame,</div><div class='del'>-			   fop_fgetxattr_cbk_t cbk)</div><div class='del'>-{</div><div class='del'>-        afr_private_t   *priv           = NULL;</div><div class='del'>-        afr_local_t     *local          = NULL;</div><div class='del'>-        int             i               = 0;</div><div class='del'>-        int             call_count      = 0;</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(fgetxattr, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv     = this-&gt;private;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fgetxattr_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.getxattr.name, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        //local-&gt;call_count set in afr_local_init</div><div class='del'>-        call_count = local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-        //If up-children count is 0, afr_local_init would have failed already</div><div class='del'>-        //and the call would have unwound so not handling it here.</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i]) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                                           local-&gt;fd, local-&gt;cont.getxattr.name,</div><div class='del'>-					   NULL);</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+static void</div><div class='add'>+afr_fgetxattr_all_subvols(xlator_t *this, call_frame_t *frame,</div><div class='add'>+                          fop_fgetxattr_cbk_t cbk)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    // local-&gt;call_count set in afr_local_init</div><div class='add'>+    call_count = local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+    // If up-children count is 0, afr_local_init would have failed already</div><div class='add'>+    // and the call would have unwound so not handling it here.</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i]) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, cbk, (void *)(long)i, priv-&gt;children[i],</div><div class='add'>+                              priv-&gt;children[i]-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+                              local-&gt;cont.getxattr.name, NULL);</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fgetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+afr_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t          *local      = NULL;</div><div class='del'>-        int32_t               op_errno   = 0;</div><div class='del'>-        fop_fgetxattr_cbk_t   cbk        = NULL;</div><div class='del'>-</div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	local-&gt;op = GF_FOP_FGETXATTR;</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        if (name) {</div><div class='del'>-                local-&gt;cont.getxattr.name = gf_strdup (name);</div><div class='del'>-		if (!local-&gt;cont.getxattr.name) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        /* pathinfo gets handled only in getxattr(), but we need to handle</div><div class='del'>-         * lockinfo.</div><div class='del'>-         * If we are doing fgetxattr with lockinfo as the key then we</div><div class='del'>-         * collect information from all children.</div><div class='del'>-         */</div><div class='del'>-        if (afr_is_special_xattr (name, &amp;cbk, 1)) {</div><div class='del'>-                afr_fgetxattr_all_subvols (this, frame, cbk);</div><div class='del'>-                return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    fop_fgetxattr_cbk_t cbk = NULL;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_FGETXATTR;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (name) {</div><div class='add'>+        local-&gt;cont.getxattr.name = gf_strdup(name);</div><div class='add'>+        if (!local-&gt;cont.getxattr.name) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    /* pathinfo gets handled only in getxattr(), but we need to handle</div><div class='add'>+     * lockinfo.</div><div class='add'>+     * If we are doing fgetxattr with lockinfo as the key then we</div><div class='add'>+     * collect information from all children.</div><div class='add'>+     */</div><div class='add'>+    if (afr_is_special_xattr(name, &amp;cbk, 1)) {</div><div class='add'>+        afr_fgetxattr_all_subvols(this, frame, cbk);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, fd-&gt;inode, afr_fgetxattr_wind,</div><div class='del'>-		      AFR_METADATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, fd-&gt;inode, afr_fgetxattr_wind,</div><div class='add'>+                 AFR_METADATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (fgetxattr, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(fgetxattr, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ readv */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_readv_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-               struct iovec *vector, int32_t count, struct iatt *buf,</div><div class='del'>-               struct iobref *iobref, dict_t *xdata)</div><div class='add'>+afr_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iovec *vector, int32_t count,</div><div class='add'>+              struct iatt *buf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-		afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (readv, frame, op_ret, op_errno,</div><div class='del'>-			  vector, count, buf, iobref, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    AFR_STACK_UNWIND(readv, frame, op_ret, op_errno, vector, count, buf, iobref,</div><div class='add'>+                     xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_readv_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_readv_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	if (subvol == -1) {</div><div class='del'>-		AFR_STACK_UNWIND (readv, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-				  0, 0, 0, 0, 0);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_readv_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;readv,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.readv.size,</div><div class='del'>-			   local-&gt;cont.readv.offset, local-&gt;cont.readv.flags,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(readv, frame, local-&gt;op_ret, local-&gt;op_errno, 0, 0, 0,</div><div class='add'>+                         0, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, afr_readv_cbk, (void *)(long)subvol, priv-&gt;children[subvol],</div><div class='add'>+        priv-&gt;children[subvol]-&gt;fops-&gt;readv, local-&gt;fd, local-&gt;cont.readv.size,</div><div class='add'>+        local-&gt;cont.readv.offset, local-&gt;cont.readv.flags, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-	   off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+afr_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+          off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   * local      = NULL;</div><div class='del'>-        int32_t         op_errno   = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_READ;</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;cont.readv.size = size;</div><div class='del'>-        local-&gt;cont.readv.offset = offset;</div><div class='del'>-        local-&gt;cont.readv.flags = flags;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_READ;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;cont.readv.size = size;</div><div class='add'>+    local-&gt;cont.readv.offset = offset;</div><div class='add'>+    local-&gt;cont.readv.flags = flags;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-	afr_read_txn (frame, this, fd-&gt;inode, afr_readv_wind,</div><div class='del'>-		      AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, fd-&gt;inode, afr_readv_wind, AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND(readv, frame, -1, op_errno, 0, 0, 0, 0, 0);</div><div class='add'>+    AFR_STACK_UNWIND(readv, frame, -1, op_errno, 0, 0, 0, 0, 0);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -1910,77 +1814,72 @@ out:</div><div class='ctx'> /* {{{ seek */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_seek_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='add'>+afr_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                afr_read_txn_continue (frame, this, (long) cookie);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_UNWIND (seek, frame, op_ret, op_errno, offset, xdata);</div><div class='add'>+        afr_read_txn_continue(frame, this, (long)cookie);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(seek, frame, op_ret, op_errno, offset, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_seek_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_seek_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (subvol == -1) {</div><div class='del'>-                AFR_STACK_UNWIND (seek, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  0, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_seek_cbk, (void *) (long) subvol,</div><div class='del'>-                           priv-&gt;children[subvol],</div><div class='del'>-                           priv-&gt;children[subvol]-&gt;fops-&gt;seek,</div><div class='del'>-                           local-&gt;fd, local-&gt;cont.seek.offset,</div><div class='del'>-                           local-&gt;cont.seek.what, local-&gt;xdata_req);</div><div class='add'>+    if (subvol == -1) {</div><div class='add'>+        AFR_STACK_UNWIND(seek, frame, local-&gt;op_ret, local-&gt;op_errno, 0, NULL);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, afr_seek_cbk, (void *)(long)subvol, priv-&gt;children[subvol],</div><div class='add'>+        priv-&gt;children[subvol]-&gt;fops-&gt;seek, local-&gt;fd, local-&gt;cont.seek.offset,</div><div class='add'>+        local-&gt;cont.seek.what, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_seek (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-          gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+afr_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+         gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t    *local      = NULL;</div><div class='del'>-        int32_t         op_errno   = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_SEEK;</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;cont.seek.offset = offset;</div><div class='del'>-        local-&gt;cont.seek.what = what;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_SEEK;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;cont.seek.offset = offset;</div><div class='add'>+    local-&gt;cont.seek.what = what;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-        afr_read_txn (frame, this, fd-&gt;inode, afr_seek_wind,</div><div class='del'>-                      AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_read_txn(frame, this, fd-&gt;inode, afr_seek_wind, AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        AFR_STACK_UNWIND (seek, frame, -1, op_errno, 0, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(seek, frame, -1, op_errno, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> /* }}} */</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c<br/>index 755e928ef62..f9e2b302f8d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-inode-write.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-inode-write.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-inode-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-inode-write.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include &lt;libgen.h&gt;</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;fnmatch.h&gt;</div><div class='hunk'>@@ -35,771 +34,736 @@</div><div class='ctx'> #include "afr-messages.h"</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__afr_inode_write_finalize (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	int                       i               = 0;</div><div class='del'>-        int                       ret             = 0;</div><div class='del'>-	int                       read_subvol     = 0;</div><div class='del'>-        struct iatt              *stbuf           = NULL;</div><div class='del'>-	afr_local_t              *local           = NULL;</div><div class='del'>-	afr_private_t            *priv            = NULL;</div><div class='del'>-        afr_read_subvol_args_t    args            = {0,};</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local-&gt;inode, out);</div><div class='del'>-</div><div class='del'>-        /*This code needs to stay till DHT sends fops on linked</div><div class='del'>-         * inodes*/</div><div class='del'>-        if (!inode_is_linked (local-&gt;inode)) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (!local-&gt;replies[i].valid)</div><div class='del'>-                                continue;</div><div class='del'>-                        if (local-&gt;replies[i].op_ret == -1)</div><div class='del'>-                                continue;</div><div class='del'>-                        if (!gf_uuid_is_null</div><div class='del'>-                                        (local-&gt;replies[i].poststat.ia_gfid)) {</div><div class='del'>-                                gf_uuid_copy (args.gfid,</div><div class='del'>-                                            local-&gt;replies[i].poststat.ia_gfid);</div><div class='del'>-                                args.ia_type =</div><div class='del'>-                                        local-&gt;replies[i].poststat.ia_type;</div><div class='del'>-                                break;</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = dict_get_bin (local-&gt;replies[i].xdata,</div><div class='del'>-                                                    DHT_IATT_IN_XDATA_KEY,</div><div class='del'>-                                                    (void **) &amp;stbuf);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        continue;</div><div class='del'>-                                gf_uuid_copy (args.gfid, stbuf-&gt;ia_gfid);</div><div class='del'>-                                args.ia_type = stbuf-&gt;ia_type;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+__afr_inode_write_finalize(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int read_subvol = 0;</div><div class='add'>+    struct iatt *stbuf = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_read_subvol_args_t args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local-&gt;inode, out);</div><div class='add'>+</div><div class='add'>+    /*This code needs to stay till DHT sends fops on linked</div><div class='add'>+     * inodes*/</div><div class='add'>+    if (!inode_is_linked(local-&gt;inode)) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (!local-&gt;replies[i].valid)</div><div class='add'>+                continue;</div><div class='add'>+            if (local-&gt;replies[i].op_ret == -1)</div><div class='add'>+                continue;</div><div class='add'>+            if (!gf_uuid_is_null(local-&gt;replies[i].poststat.ia_gfid)) {</div><div class='add'>+                gf_uuid_copy(args.gfid, local-&gt;replies[i].poststat.ia_gfid);</div><div class='add'>+                args.ia_type = local-&gt;replies[i].poststat.ia_type;</div><div class='add'>+                break;</div><div class='add'>+            } else {</div><div class='add'>+                ret = dict_get_bin(local-&gt;replies[i].xdata,</div><div class='add'>+                                   DHT_IATT_IN_XDATA_KEY, (void **)&amp;stbuf);</div><div class='add'>+                if (ret)</div><div class='add'>+                    continue;</div><div class='add'>+                gf_uuid_copy(args.gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+                args.ia_type = stbuf-&gt;ia_type;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;transaction.type == AFR_METADATA_TRANSACTION) {</div><div class='del'>-                read_subvol = afr_metadata_subvol_get (local-&gt;inode, this,</div><div class='del'>-                                                       NULL, local-&gt;readable,</div><div class='del'>-                                                       NULL, &amp;args);</div><div class='del'>-	} else {</div><div class='del'>-                read_subvol = afr_data_subvol_get (local-&gt;inode, this,</div><div class='del'>-                                                   NULL, local-&gt;readable,</div><div class='del'>-                                                   NULL, &amp;args);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;transaction.type == AFR_METADATA_TRANSACTION) {</div><div class='add'>+        read_subvol = afr_metadata_subvol_get(local-&gt;inode, this, NULL,</div><div class='add'>+                                              local-&gt;readable, NULL, &amp;args);</div><div class='add'>+    } else {</div><div class='add'>+        read_subvol = afr_data_subvol_get(local-&gt;inode, this, NULL,</div><div class='add'>+                                          local-&gt;readable, NULL, &amp;args);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='add'>+    afr_pick_error_xdata(local, priv, local-&gt;inode, local-&gt;readable, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (local-&gt;replies[i].op_ret &lt; 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /* Order of checks in the compound conditional</div><div class='add'>+           below is important.</div><div class='add'>+</div><div class='add'>+           - Highest precedence: largest op_ret</div><div class='add'>+           - Next precedence: if all op_rets are equal, read subvol</div><div class='add'>+           - Least precedence: any succeeded subvol</div><div class='add'>+        */</div><div class='add'>+        if ((local-&gt;op_ret &lt; local-&gt;replies[i].op_ret) ||</div><div class='add'>+            ((local-&gt;op_ret == local-&gt;replies[i].op_ret) &amp;&amp;</div><div class='add'>+             (i == read_subvol))) {</div><div class='add'>+            local-&gt;op_ret = local-&gt;replies[i].op_ret;</div><div class='add'>+            local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='add'>+</div><div class='add'>+            local-&gt;cont.inode_wfop.prebuf = local-&gt;replies[i].prestat;</div><div class='add'>+            local-&gt;cont.inode_wfop.postbuf = local-&gt;replies[i].poststat;</div><div class='add'>+</div><div class='add'>+            if (local-&gt;replies[i].xdata) {</div><div class='add'>+                if (local-&gt;xdata_rsp)</div><div class='add'>+                    dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(local-&gt;replies[i].xdata);</div><div class='add'>+            }</div><div class='add'>+            if (local-&gt;replies[i].xattr) {</div><div class='add'>+                if (local-&gt;xattr_rsp)</div><div class='add'>+                    dict_unref(local-&gt;xattr_rsp);</div><div class='add'>+                local-&gt;xattr_rsp = dict_ref(local-&gt;replies[i].xattr);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-        afr_pick_error_xdata (local, priv, local-&gt;inode, local-&gt;readable, NULL,</div><div class='del'>-                              NULL);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!local-&gt;replies[i].valid)</div><div class='del'>-			continue;</div><div class='del'>-		if (local-&gt;replies[i].op_ret &lt; 0)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		/* Order of checks in the compound conditional</div><div class='del'>-		   below is important.</div><div class='del'>-</div><div class='del'>-		   - Highest precedence: largest op_ret</div><div class='del'>-		   - Next precedence: if all op_rets are equal, read subvol</div><div class='del'>-		   - Least precedence: any succeeded subvol</div><div class='del'>-		*/</div><div class='del'>-		if ((local-&gt;op_ret &lt; local-&gt;replies[i].op_ret) ||</div><div class='del'>-		    ((local-&gt;op_ret == local-&gt;replies[i].op_ret) &amp;&amp;</div><div class='del'>-		     (i == read_subvol))) {</div><div class='del'>-</div><div class='del'>-			local-&gt;op_ret = local-&gt;replies[i].op_ret;</div><div class='del'>-			local-&gt;op_errno = local-&gt;replies[i].op_errno;</div><div class='del'>-</div><div class='del'>-			local-&gt;cont.inode_wfop.prebuf =</div><div class='del'>-				local-&gt;replies[i].prestat;</div><div class='del'>-			local-&gt;cont.inode_wfop.postbuf =</div><div class='del'>-				local-&gt;replies[i].poststat;</div><div class='del'>-</div><div class='del'>-			if (local-&gt;replies[i].xdata) {</div><div class='del'>-				if (local-&gt;xdata_rsp)</div><div class='del'>-					dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-				local-&gt;xdata_rsp =</div><div class='del'>-					dict_ref (local-&gt;replies[i].xdata);</div><div class='del'>-			}</div><div class='del'>-			if (local-&gt;replies[i].xattr) {</div><div class='del'>-				if (local-&gt;xattr_rsp)</div><div class='del'>-					dict_unref (local-&gt;xattr_rsp);</div><div class='del'>-				local-&gt;xattr_rsp =</div><div class='del'>-					dict_ref (local-&gt;replies[i].xattr);</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        afr_set_in_flight_sb_status (this, frame, local-&gt;inode);</div><div class='add'>+    afr_set_in_flight_sb_status(this, frame, local-&gt;inode);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__afr_inode_write_fill (call_frame_t *frame, xlator_t *this, int child_index,</div><div class='del'>-			int op_ret, int op_errno,</div><div class='del'>-			struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-			dict_t *xattr, dict_t *xdata)</div><div class='add'>+__afr_inode_write_fill(call_frame_t *frame, xlator_t *this, int child_index,</div><div class='add'>+                       int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	local-&gt;replies[child_index].valid = 1;</div><div class='add'>+    local-&gt;replies[child_index].valid = 1;</div><div class='ctx'> </div><div class='del'>-        if (AFR_IS_ARBITER_BRICK(priv, child_index) &amp;&amp; op_ret == 1)</div><div class='del'>-                op_ret = iov_length (local-&gt;cont.writev.vector,</div><div class='del'>-                                     local-&gt;cont.writev.count);</div><div class='add'>+    if (AFR_IS_ARBITER_BRICK(priv, child_index) &amp;&amp; op_ret == 1)</div><div class='add'>+        op_ret = iov_length(local-&gt;cont.writev.vector,</div><div class='add'>+                            local-&gt;cont.writev.count);</div><div class='ctx'> </div><div class='del'>-	local-&gt;replies[child_index].op_ret = op_ret;</div><div class='del'>-	local-&gt;replies[child_index].op_errno = op_errno;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;replies[child_index].xdata = dict_ref (xdata);</div><div class='add'>+    local-&gt;replies[child_index].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[child_index].op_errno = op_errno;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;replies[child_index].xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-	if (op_ret &gt;= 0) {</div><div class='del'>-		if (prebuf)</div><div class='del'>-			local-&gt;replies[child_index].prestat = *prebuf;</div><div class='del'>-		if (postbuf)</div><div class='del'>-			local-&gt;replies[child_index].poststat = *postbuf;</div><div class='del'>-		if (xattr)</div><div class='del'>-			local-&gt;replies[child_index].xattr = dict_ref (xattr);</div><div class='del'>-	} else {</div><div class='del'>-		afr_transaction_fop_failed (frame, this, child_index);</div><div class='del'>-	}</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        if (prebuf)</div><div class='add'>+            local-&gt;replies[child_index].prestat = *prebuf;</div><div class='add'>+        if (postbuf)</div><div class='add'>+            local-&gt;replies[child_index].poststat = *postbuf;</div><div class='add'>+        if (xattr)</div><div class='add'>+            local-&gt;replies[child_index].xattr = dict_ref(xattr);</div><div class='add'>+    } else {</div><div class='add'>+        afr_transaction_fop_failed(frame, this, child_index);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__afr_inode_write_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xattr, dict_t *xdata)</div><div class='add'>+__afr_inode_write_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int child_index = (long) cookie;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __afr_inode_write_fill (frame, this, child_index, op_ret,</div><div class='del'>-					op_errno, prebuf, postbuf, xattr,</div><div class='del'>-					xdata);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __afr_inode_write_fill(frame, this, child_index, op_ret, op_errno,</div><div class='add'>+                               prebuf, postbuf, xattr, xdata);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-		__afr_inode_write_finalize (frame, this);</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        __afr_inode_write_finalize(frame, this);</div><div class='ctx'> </div><div class='del'>-		if (afr_txn_nothing_failed (frame, this)) {</div><div class='del'>-                        /*if it did pre-op, it will do post-op changing ctime*/</div><div class='del'>-                        if (priv-&gt;consistent_metadata &amp;&amp;</div><div class='del'>-                            afr_needs_changelog_update (local))</div><div class='del'>-                                afr_zero_fill_stat (local);</div><div class='del'>-                        local-&gt;transaction.unwind (frame, this);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                afr_transaction_resume (frame, this);</div><div class='add'>+        if (afr_txn_nothing_failed(frame, this)) {</div><div class='add'>+            /*if it did pre-op, it will do post-op changing ctime*/</div><div class='add'>+            if (priv-&gt;consistent_metadata &amp;&amp; afr_needs_changelog_update(local))</div><div class='add'>+                afr_zero_fill_stat(local);</div><div class='add'>+            local-&gt;transaction.unwind(frame, this);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        afr_transaction_resume(frame, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {{{ writev */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_writev_copy_outvars (call_frame_t *src_frame, call_frame_t *dst_frame)</div><div class='add'>+afr_writev_copy_outvars(call_frame_t *src_frame, call_frame_t *dst_frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *src_local = NULL;</div><div class='del'>-        afr_local_t *dst_local = NULL;</div><div class='add'>+    afr_local_t *src_local = NULL;</div><div class='add'>+    afr_local_t *dst_local = NULL;</div><div class='ctx'> </div><div class='del'>-        src_local = src_frame-&gt;local;</div><div class='del'>-        dst_local = dst_frame-&gt;local;</div><div class='add'>+    src_local = src_frame-&gt;local;</div><div class='add'>+    dst_local = dst_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        dst_local-&gt;op_ret = src_local-&gt;op_ret;</div><div class='del'>-        dst_local-&gt;op_errno = src_local-&gt;op_errno;</div><div class='del'>-        dst_local-&gt;cont.inode_wfop.prebuf = src_local-&gt;cont.inode_wfop.prebuf;</div><div class='del'>-        dst_local-&gt;cont.inode_wfop.postbuf = src_local-&gt;cont.inode_wfop.postbuf;</div><div class='del'>-	if (src_local-&gt;xdata_rsp)</div><div class='del'>-		dst_local-&gt;xdata_rsp = dict_ref (src_local-&gt;xdata_rsp);</div><div class='add'>+    dst_local-&gt;op_ret = src_local-&gt;op_ret;</div><div class='add'>+    dst_local-&gt;op_errno = src_local-&gt;op_errno;</div><div class='add'>+    dst_local-&gt;cont.inode_wfop.prebuf = src_local-&gt;cont.inode_wfop.prebuf;</div><div class='add'>+    dst_local-&gt;cont.inode_wfop.postbuf = src_local-&gt;cont.inode_wfop.postbuf;</div><div class='add'>+    if (src_local-&gt;xdata_rsp)</div><div class='add'>+        dst_local-&gt;xdata_rsp = dict_ref(src_local-&gt;xdata_rsp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_writev_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_writev_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-       if (priv-&gt;consistent_metadata)</div><div class='del'>-               afr_zero_fill_stat (local);</div><div class='add'>+    if (priv-&gt;consistent_metadata)</div><div class='add'>+        afr_zero_fill_stat(local);</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_UNWIND (writev, frame,</div><div class='del'>-                          local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-                          &amp;local-&gt;cont.inode_wfop.postbuf,</div><div class='del'>-                          local-&gt;xdata_rsp);</div><div class='add'>+    AFR_STACK_UNWIND(writev, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_transaction_writev_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_transaction_writev_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *fop_frame = NULL;</div><div class='add'>+    call_frame_t *fop_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        fop_frame = afr_transaction_detach_fop_frame (frame);</div><div class='add'>+    fop_frame = afr_transaction_detach_fop_frame(frame);</div><div class='ctx'> </div><div class='del'>-        if (fop_frame) {</div><div class='del'>-                afr_writev_copy_outvars (frame, fop_frame);</div><div class='del'>-                afr_writev_unwind (fop_frame, this);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (fop_frame) {</div><div class='add'>+        afr_writev_copy_outvars(frame, fop_frame);</div><div class='add'>+        afr_writev_unwind(fop_frame, this);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_writev_handle_short_writes (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        int           i      = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /*</div><div class='del'>-         * We already have the best case result of the writev calls staged</div><div class='del'>-         * as the return value. Any writev that returns some value less</div><div class='del'>-         * than the best case is now out of sync, so mark the fop as</div><div class='del'>-         * failed. Note that fops that have returned with errors have</div><div class='del'>-         * already been marked as failed.</div><div class='del'>-         */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if ((!local-&gt;replies[i].valid) ||</div><div class='del'>-                    (local-&gt;replies[i].op_ret == -1))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;replies[i].op_ret &lt; local-&gt;op_ret)</div><div class='del'>-                        afr_transaction_fop_failed (frame, this, i);</div><div class='del'>-        }</div><div class='add'>+afr_writev_handle_short_writes(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /*</div><div class='add'>+     * We already have the best case result of the writev calls staged</div><div class='add'>+     * as the return value. Any writev that returns some value less</div><div class='add'>+     * than the best case is now out of sync, so mark the fop as</div><div class='add'>+     * failed. Note that fops that have returned with errors have</div><div class='add'>+     * already been marked as failed.</div><div class='add'>+     */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if ((!local-&gt;replies[i].valid) || (local-&gt;replies[i].op_ret == -1))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;replies[i].op_ret &lt; local-&gt;op_ret)</div><div class='add'>+            afr_transaction_fop_failed(frame, this, i);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_inode_write_fill (call_frame_t *frame, xlator_t *this, int child_index,</div><div class='add'>+afr_inode_write_fill(call_frame_t *frame, xlator_t *this, int child_index,</div><div class='ctx'>                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='ctx'>                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        uint32_t open_fd_count = 0;</div><div class='del'>-        uint32_t write_is_append = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __afr_inode_write_fill (frame, this, child_index, op_ret,</div><div class='del'>-					op_errno, prebuf, postbuf, NULL, xdata);</div><div class='del'>-		if (op_ret == -1 || !xdata)</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='del'>-		write_is_append = 0;</div><div class='del'>-		ret = dict_get_uint32 (xdata, GLUSTERFS_WRITE_IS_APPEND,</div><div class='del'>-				       &amp;write_is_append);</div><div class='del'>-		if (ret || !write_is_append)</div><div class='del'>-			local-&gt;append_write = _gf_false;</div><div class='del'>-</div><div class='del'>-                ret = dict_get_uint32 (xdata, GLUSTERFS_ACTIVE_FD_COUNT,</div><div class='del'>-                                       &amp;open_fd_count);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto unlock;</div><div class='del'>-		if (open_fd_count &gt; local-&gt;open_fd_count) {</div><div class='del'>-                        local-&gt;open_fd_count = open_fd_count;</div><div class='del'>-                        local-&gt;update_open_fd_count = _gf_true;</div><div class='del'>-		}</div><div class='add'>+    int ret = 0;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    uint32_t open_fd_count = 0;</div><div class='add'>+    uint32_t write_is_append = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __afr_inode_write_fill(frame, this, child_index, op_ret, op_errno,</div><div class='add'>+                               prebuf, postbuf, NULL, xdata);</div><div class='add'>+        if (op_ret == -1 || !xdata)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        write_is_append = 0;</div><div class='add'>+        ret = dict_get_uint32(xdata, GLUSTERFS_WRITE_IS_APPEND,</div><div class='add'>+                              &amp;write_is_append);</div><div class='add'>+        if (ret || !write_is_append)</div><div class='add'>+            local-&gt;append_write = _gf_false;</div><div class='add'>+</div><div class='add'>+        ret = dict_get_uint32(xdata, GLUSTERFS_ACTIVE_FD_COUNT, &amp;open_fd_count);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='add'>+        if (open_fd_count &gt; local-&gt;open_fd_count) {</div><div class='add'>+            local-&gt;open_fd_count = open_fd_count;</div><div class='add'>+            local-&gt;update_open_fd_count = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_process_post_writev (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_process_post_writev(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;stable_write &amp;&amp; !local-&gt;append_write)</div><div class='del'>-                /* An appended write removes the necessity to</div><div class='del'>-                   fsync() the file. This is because self-heal</div><div class='del'>-                   has the logic to check for larger file when</div><div class='del'>-                   the xattrs are not reliably pointing at</div><div class='del'>-                   a stale file.</div><div class='del'>-                */</div><div class='del'>-                afr_fd_report_unstable_write (this, local);</div><div class='add'>+    if (!local-&gt;stable_write &amp;&amp; !local-&gt;append_write)</div><div class='add'>+        /* An appended write removes the necessity to</div><div class='add'>+           fsync() the file. This is because self-heal</div><div class='add'>+           has the logic to check for larger file when</div><div class='add'>+           the xattrs are not reliably pointing at</div><div class='add'>+           a stale file.</div><div class='add'>+        */</div><div class='add'>+        afr_fd_report_unstable_write(this, local);</div><div class='ctx'> </div><div class='del'>-        __afr_inode_write_finalize (frame, this);</div><div class='add'>+    __afr_inode_write_finalize(frame, this);</div><div class='ctx'> </div><div class='del'>-        afr_writev_handle_short_writes (frame, this);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;update_open_fd_count)</div><div class='del'>-                local-&gt;inode_ctx-&gt;open_fd_count = local-&gt;open_fd_count;</div><div class='add'>+    afr_writev_handle_short_writes(frame, this);</div><div class='ctx'> </div><div class='add'>+    if (local-&gt;update_open_fd_count)</div><div class='add'>+        local-&gt;inode_ctx-&gt;open_fd_count = local-&gt;open_fd_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_writev_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_writev_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *fop_frame = NULL;</div><div class='del'>-        int child_index = (long) cookie;</div><div class='del'>-        int call_count  = -1;</div><div class='del'>-</div><div class='del'>-        afr_inode_write_fill (frame, this, child_index, op_ret, op_errno,</div><div class='del'>-                              prebuf, postbuf, xdata);</div><div class='del'>-</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                afr_process_post_writev (frame, this);</div><div class='del'>-</div><div class='del'>-                if (!afr_txn_nothing_failed (frame, this)) {</div><div class='del'>-                        //Don't unwind until post-op is complete</div><div class='del'>-                        afr_transaction_resume (frame, this);</div><div class='del'>-                } else {</div><div class='del'>-                /*</div><div class='del'>-                 * Generally inode-write fops do transaction.unwind then</div><div class='del'>-                 * transaction.resume, but writev needs to make sure that</div><div class='del'>-                 * delayed post-op frame is placed in fdctx before unwind</div><div class='del'>-                 * happens. This prevents the race of flush doing the</div><div class='del'>-                 * changelog wakeup first in fuse thread and then this</div><div class='del'>-                 * writev placing its delayed post-op frame in fdctx.</div><div class='del'>-                 * This helps flush make sure all the delayed post-ops are</div><div class='del'>-                 * completed.</div><div class='del'>-                 */</div><div class='del'>-</div><div class='del'>-                        fop_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-                        afr_writev_copy_outvars (frame, fop_frame);</div><div class='del'>-                        afr_transaction_resume (frame, this);</div><div class='del'>-                        afr_writev_unwind (fop_frame, this);</div><div class='del'>-                }</div><div class='add'>+    call_frame_t *fop_frame = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+</div><div class='add'>+    afr_inode_write_fill(frame, this, child_index, op_ret, op_errno, prebuf,</div><div class='add'>+                         postbuf, xdata);</div><div class='add'>+</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        afr_process_post_writev(frame, this);</div><div class='add'>+</div><div class='add'>+        if (!afr_txn_nothing_failed(frame, this)) {</div><div class='add'>+            // Don't unwind until post-op is complete</div><div class='add'>+            afr_transaction_resume(frame, this);</div><div class='add'>+        } else {</div><div class='add'>+            /*</div><div class='add'>+             * Generally inode-write fops do transaction.unwind then</div><div class='add'>+             * transaction.resume, but writev needs to make sure that</div><div class='add'>+             * delayed post-op frame is placed in fdctx before unwind</div><div class='add'>+             * happens. This prevents the race of flush doing the</div><div class='add'>+             * changelog wakeup first in fuse thread and then this</div><div class='add'>+             * writev placing its delayed post-op frame in fdctx.</div><div class='add'>+             * This helps flush make sure all the delayed post-ops are</div><div class='add'>+             * completed.</div><div class='add'>+             */</div><div class='add'>+</div><div class='add'>+            fop_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+            afr_writev_copy_outvars(frame, fop_frame);</div><div class='add'>+            afr_transaction_resume(frame, this);</div><div class='add'>+            afr_writev_unwind(fop_frame, this);</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_arbiter_writev_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_arbiter_writev_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        static char byte = 0xFF;</div><div class='del'>-        static struct iovec vector = {&amp;byte, 1};</div><div class='del'>-        int32_t count = 1;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    static char byte = 0xFF;</div><div class='add'>+    static struct iovec vector = {&amp;byte, 1};</div><div class='add'>+    int32_t count = 1;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_writev_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;writev,</div><div class='del'>-			   local-&gt;fd, &amp;vector, count, local-&gt;cont.writev.offset,</div><div class='del'>-			   local-&gt;cont.writev.flags, local-&gt;cont.writev.iobref,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, afr_writev_wind_cbk, (void *)(long)subvol,</div><div class='add'>+        priv-&gt;children[subvol], priv-&gt;children[subvol]-&gt;fops-&gt;writev, local-&gt;fd,</div><div class='add'>+        &amp;vector, count, local-&gt;cont.writev.offset, local-&gt;cont.writev.flags,</div><div class='add'>+        local-&gt;cont.writev.iobref, local-&gt;xdata_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_writev_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_writev_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (AFR_IS_ARBITER_BRICK(priv, subvol)) {</div><div class='del'>-                afr_arbiter_writev_wind (frame, this, subvol);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_writev_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;writev,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.writev.vector,</div><div class='del'>-			   local-&gt;cont.writev.count, local-&gt;cont.writev.offset,</div><div class='del'>-			   local-&gt;cont.writev.flags, local-&gt;cont.writev.iobref,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='add'>+    if (AFR_IS_ARBITER_BRICK(priv, subvol)) {</div><div class='add'>+        afr_arbiter_writev_wind(frame, this, subvol);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_writev_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;writev, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.writev.vector, local-&gt;cont.writev.count,</div><div class='add'>+                      local-&gt;cont.writev.offset, local-&gt;cont.writev.flags,</div><div class='add'>+                      local-&gt;cont.writev.iobref, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_do_writev (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_do_writev(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *transaction_frame = NULL;</div><div class='del'>-        afr_local_t     *local             = NULL;</div><div class='del'>-        int             ret   = -1;</div><div class='del'>-        int             op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        transaction_frame-&gt;local = local;</div><div class='del'>-	frame-&gt;local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-	if (!AFR_FRAME_INIT (frame, op_errno))</div><div class='del'>-		goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_WRITE;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    transaction_frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_writev_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_transaction_writev_unwind;</div><div class='add'>+    if (!AFR_FRAME_INIT(frame, op_errno))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;op = GF_FOP_WRITE;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd-&gt;flags &amp; O_APPEND) {</div><div class='del'>-               /*</div><div class='del'>-                * Backend vfs ignores the 'offset' for append mode fd so</div><div class='del'>-                * locking just the region provided for the writev does not</div><div class='del'>-                * give consistency guarantee. The actual write may happen at a</div><div class='del'>-                * completely different range than the one provided by the</div><div class='del'>-                * offset, len in the fop. So lock the entire file.</div><div class='del'>-                */</div><div class='del'>-                local-&gt;transaction.start   = 0;</div><div class='del'>-                local-&gt;transaction.len     = 0;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;transaction.start   = local-&gt;cont.writev.offset;</div><div class='del'>-                local-&gt;transaction.len     = iov_length (local-&gt;cont.writev.vector,</div><div class='del'>-                                                         local-&gt;cont.writev.count);</div><div class='del'>-        }</div><div class='add'>+    local-&gt;transaction.wind = afr_writev_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_transaction_writev_unwind;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-            op_errno = -ret;</div><div class='del'>-            goto out;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    if (local-&gt;fd-&gt;flags &amp; O_APPEND) {</div><div class='add'>+        /*</div><div class='add'>+         * Backend vfs ignores the 'offset' for append mode fd so</div><div class='add'>+         * locking just the region provided for the writev does not</div><div class='add'>+         * give consistency guarantee. The actual write may happen at a</div><div class='add'>+         * completely different range than the one provided by the</div><div class='add'>+         * offset, len in the fop. So lock the entire file.</div><div class='add'>+         */</div><div class='add'>+        local-&gt;transaction.start = 0;</div><div class='add'>+        local-&gt;transaction.len = 0;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;transaction.start = local-&gt;cont.writev.offset;</div><div class='add'>+        local-&gt;transaction.len = iov_length(local-&gt;cont.writev.vector,</div><div class='add'>+                                            local-&gt;cont.writev.count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-            struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-            uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+afr_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+           int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='del'>-        int ret = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.writev.vector = iov_dup (vector, count);</div><div class='del'>-	if (!local-&gt;cont.writev.vector)</div><div class='del'>-		goto out;</div><div class='del'>-        local-&gt;cont.writev.count      = count;</div><div class='del'>-        local-&gt;cont.writev.offset     = offset;</div><div class='del'>-        local-&gt;cont.writev.flags      = flags;</div><div class='del'>-        local-&gt;cont.writev.iobref     = iobref_ref (iobref);</div><div class='add'>+    local-&gt;cont.writev.vector = iov_dup(vector, count);</div><div class='add'>+    if (!local-&gt;cont.writev.vector)</div><div class='add'>+        goto out;</div><div class='add'>+    local-&gt;cont.writev.count = count;</div><div class='add'>+    local-&gt;cont.writev.offset = offset;</div><div class='add'>+    local-&gt;cont.writev.flags = flags;</div><div class='add'>+    local-&gt;cont.writev.iobref = iobref_ref(iobref);</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (dict_set_uint32 (local-&gt;xdata_req, GLUSTERFS_ACTIVE_FD_COUNT, 4)) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dict_set_uint32(local-&gt;xdata_req, GLUSTERFS_ACTIVE_FD_COUNT, 4)) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (dict_set_uint32 (local-&gt;xdata_req, GLUSTERFS_WRITE_IS_APPEND, 4)) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    if (dict_set_uint32(local-&gt;xdata_req, GLUSTERFS_WRITE_IS_APPEND, 4)) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* Set append_write to be true speculatively. If on any</div><div class='del'>-	   server it turns not be true, we unset it in the</div><div class='del'>-	   callback.</div><div class='del'>-	*/</div><div class='del'>-	local-&gt;append_write = _gf_true;</div><div class='add'>+    /* Set append_write to be true speculatively. If on any</div><div class='add'>+       server it turns not be true, we unset it in the</div><div class='add'>+       callback.</div><div class='add'>+    */</div><div class='add'>+    local-&gt;append_write = _gf_true;</div><div class='ctx'> </div><div class='del'>-	/* detect here, but set it in writev_wind_cbk *after* the unstable</div><div class='del'>-	   write is performed</div><div class='del'>-	*/</div><div class='del'>-	local-&gt;stable_write = !!((fd-&gt;flags|flags)&amp;(O_SYNC|O_DSYNC));</div><div class='add'>+    /* detect here, but set it in writev_wind_cbk *after* the unstable</div><div class='add'>+       write is performed</div><div class='add'>+    */</div><div class='add'>+    local-&gt;stable_write = !!((fd-&gt;flags | flags) &amp; (O_SYNC | O_DSYNC));</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-        afr_do_writev (frame, this);</div><div class='add'>+    afr_do_writev(frame, this);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ truncate */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_truncate_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_truncate_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (truncate, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(truncate, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_truncate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_truncate_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret == 0 &amp;&amp; prebuf-&gt;ia_size != postbuf-&gt;ia_size)</div><div class='del'>-		local-&gt;stable_write = _gf_false;</div><div class='add'>+    if (op_ret == 0 &amp;&amp; prebuf-&gt;ia_size != postbuf-&gt;ia_size)</div><div class='add'>+        local-&gt;stable_write = _gf_false;</div><div class='ctx'> </div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      prebuf, postbuf, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf,</div><div class='add'>+                                 postbuf, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_truncate_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_truncate_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_truncate_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;truncate,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.truncate.offset,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_truncate_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;truncate, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.truncate.offset, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_truncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, off_t offset, dict_t *xdata)</div><div class='add'>+afr_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   * local = NULL;</div><div class='del'>-        call_frame_t   *transaction_frame = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.truncate.offset  = offset;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    local-&gt;cont.truncate.offset = offset;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;transaction.wind   = afr_truncate_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_truncate_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_truncate_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_truncate_unwind;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        ret = afr_set_inode_local (this, local, loc-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = afr_set_inode_local(this, local, loc-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_TRUNCATE;</div><div class='add'>+    local-&gt;op = GF_FOP_TRUNCATE;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = offset;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = offset;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-	/* Set it true speculatively, will get reset in afr_truncate_wind_cbk</div><div class='del'>-	   if truncate was not a NOP */</div><div class='del'>-	local-&gt;stable_write = _gf_true;</div><div class='add'>+    /* Set it true speculatively, will get reset in afr_truncate_wind_cbk</div><div class='add'>+       if truncate was not a NOP */</div><div class='add'>+    local-&gt;stable_write = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ ftruncate */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_ftruncate_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_ftruncate_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (ftruncate, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(ftruncate, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_ftruncate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_ftruncate_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret == 0 &amp;&amp; prebuf-&gt;ia_size != postbuf-&gt;ia_size)</div><div class='del'>-		local-&gt;stable_write = _gf_false;</div><div class='add'>+    if (op_ret == 0 &amp;&amp; prebuf-&gt;ia_size != postbuf-&gt;ia_size)</div><div class='add'>+        local-&gt;stable_write = _gf_false;</div><div class='ctx'> </div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      prebuf, postbuf, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf,</div><div class='add'>+                                 postbuf, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_ftruncate_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_ftruncate_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_ftruncate_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;ftruncate,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.ftruncate.offset,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_ftruncate_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;ftruncate, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.ftruncate.offset, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-	       dict_t *xdata)</div><div class='add'>+afr_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	call_frame_t *transaction_frame = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-	transaction_frame = copy_frame (frame);</div><div class='del'>-	if (!transaction_frame)</div><div class='del'>-		goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.ftruncate.offset  = offset;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    local-&gt;cont.ftruncate.offset = offset;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_FTRUNCATE;</div><div class='add'>+    local-&gt;op = GF_FOP_FTRUNCATE;</div><div class='ctx'> </div><div class='del'>-	local-&gt;transaction.wind   = afr_ftruncate_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_ftruncate_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_ftruncate_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_ftruncate_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.start   = local-&gt;cont.ftruncate.offset;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.start = local-&gt;cont.ftruncate.offset;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-	/* Set it true speculatively, will get reset in afr_ftruncate_wind_cbk</div><div class='del'>-	   if truncate was not a NOP */</div><div class='del'>-	local-&gt;stable_write = _gf_true;</div><div class='add'>+    /* Set it true speculatively, will get reset in afr_ftruncate_wind_cbk</div><div class='add'>+       if truncate was not a NOP */</div><div class='add'>+    local-&gt;stable_write = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -807,1813 +771,1743 @@ out:</div><div class='ctx'> /* {{{ setattr */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_setattr_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_setattr_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (setattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf,</div><div class='del'>-			  local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(setattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_setattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno,</div><div class='del'>-                      struct iatt *preop, struct iatt *postop, dict_t *xdata)</div><div class='add'>+afr_setattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, struct iatt *preop,</div><div class='add'>+                     struct iatt *postop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      preop, postop, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, preop,</div><div class='add'>+                                 postop, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_setattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_setattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_setattr_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;setattr,</div><div class='del'>-			   &amp;local-&gt;loc, &amp;local-&gt;cont.setattr.in_buf,</div><div class='del'>-			   local-&gt;cont.setattr.valid, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_setattr_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;setattr, &amp;local-&gt;loc,</div><div class='add'>+                      &amp;local-&gt;cont.setattr.in_buf, local-&gt;cont.setattr.valid,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *buf,</div><div class='del'>-	     int32_t valid, dict_t *xdata)</div><div class='add'>+afr_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *buf,</div><div class='add'>+            int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.setattr.in_buf = *buf;</div><div class='del'>-        local-&gt;cont.setattr.valid  = valid;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    local-&gt;cont.setattr.in_buf = *buf;</div><div class='add'>+    local-&gt;cont.setattr.valid = valid;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_setattr_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_setattr_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_setattr_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_setattr_unwind;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        ret = afr_set_inode_local (this, local, loc-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = afr_set_inode_local(this, local, loc-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_SETATTR;</div><div class='add'>+    local-&gt;op = GF_FOP_SETATTR;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {{{ fsetattr */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fsetattr_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fsetattr_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fsetattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(fsetattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fsetattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *preop, struct iatt *postop, dict_t *xdata)</div><div class='add'>+afr_fsetattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *preop,</div><div class='add'>+                      struct iatt *postop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      preop, postop, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, preop,</div><div class='add'>+                                 postop, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsetattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fsetattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_fsetattr_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;fsetattr,</div><div class='del'>-			   local-&gt;fd, &amp;local-&gt;cont.fsetattr.in_buf,</div><div class='del'>-			   local-&gt;cont.fsetattr.valid, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fsetattr_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fsetattr, local-&gt;fd,</div><div class='add'>+                      &amp;local-&gt;cont.fsetattr.in_buf, local-&gt;cont.fsetattr.valid,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsetattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, struct iatt *buf, int32_t valid, dict_t *xdata)</div><div class='add'>+afr_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *buf,</div><div class='add'>+             int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.fsetattr.in_buf = *buf;</div><div class='del'>-        local-&gt;cont.fsetattr.valid  = valid;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    local-&gt;cont.fsetattr.in_buf = *buf;</div><div class='add'>+    local-&gt;cont.fsetattr.valid = valid;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_fsetattr_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_fsetattr_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_fsetattr_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_fsetattr_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd                 = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_FSETATTR;</div><div class='add'>+    local-&gt;op = GF_FOP_FSETATTR;</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* {{{ setxattr */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_setxattr_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_setxattr_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (setxattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(setxattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_setxattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_setxattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      NULL, NULL, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                                 NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_setxattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_setxattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t      *local         = NULL;</div><div class='del'>-        afr_private_t    *priv          = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_setxattr_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;setxattr,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.setxattr.dict,</div><div class='del'>-			   local-&gt;cont.setxattr.flags, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_setxattr_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.setxattr.dict, local-&gt;cont.setxattr.flags,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_emptyb_set_pending_changelog_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                  xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                  dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_emptyb_set_pending_changelog_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                     xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                     dict_t *xattr, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int i, ret = 0;</div><div class='del'>-        char *op_type = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i, ret = 0;</div><div class='add'>+    char *op_type = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        i = (long) cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    i = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        local-&gt;replies[i].valid = 1;</div><div class='del'>-        local-&gt;replies[i].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[i].op_errno = op_errno;</div><div class='add'>+    local-&gt;replies[i].valid = 1;</div><div class='add'>+    local-&gt;replies[i].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[i].op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (local-&gt;xdata_req, "replicate-brick-op", &amp;op_type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(local-&gt;xdata_req, "replicate-brick-op", &amp;op_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, op_ret ? GF_LOG_ERROR : GF_LOG_INFO,</div><div class='del'>-                op_ret ? op_errno : 0,</div><div class='del'>-                afr_get_msg_id (op_type),</div><div class='del'>-                "Set of pending xattr %s on"</div><div class='del'>-                " %s.", op_ret ? "failed" : "succeeded",</div><div class='del'>-                priv-&gt;children[i]-&gt;name);</div><div class='add'>+    gf_msg(this-&gt;name, op_ret ? GF_LOG_ERROR : GF_LOG_INFO,</div><div class='add'>+           op_ret ? op_errno : 0, afr_get_msg_id(op_type),</div><div class='add'>+           "Set of pending xattr %s on"</div><div class='add'>+           " %s.",</div><div class='add'>+           op_ret ? "failed" : "succeeded", priv-&gt;children[i]-&gt;name);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='del'>-        return 0;</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_emptyb_set_pending_changelog (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                unsigned char *locked_nodes)</div><div class='add'>+afr_emptyb_set_pending_changelog(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                 unsigned char *locked_nodes)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int ret = 0, i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = 0, i = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        AFR_ONLIST (locked_nodes, frame, afr_emptyb_set_pending_changelog_cbk,</div><div class='del'>-                    xattrop, &amp;local-&gt;loc, GF_XATTROP_ADD_ARRAY,</div><div class='del'>-                    local-&gt;xattr_req, NULL);</div><div class='add'>+    AFR_ONLIST(locked_nodes, frame, afr_emptyb_set_pending_changelog_cbk,</div><div class='add'>+               xattrop, &amp;local-&gt;loc, GF_XATTROP_ADD_ARRAY, local-&gt;xattr_req,</div><div class='add'>+               NULL);</div><div class='ctx'> </div><div class='del'>-        /* It is sufficient if xattrop was successful on one child */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;replies[i].op_ret == 0) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = afr_higher_errno (ret,</div><div class='del'>-                                                local-&gt;replies[i].op_errno);</div><div class='del'>-                }</div><div class='add'>+    /* It is sufficient if xattrop was successful on one child */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;replies[i].op_ret == 0) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = afr_higher_errno(ret, local-&gt;replies[i].op_errno);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return -ret;</div><div class='add'>+    return -ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_afr_handle_empty_brick_type (xlator_t *this, call_frame_t *frame,</div><div class='del'>-                            loc_t *loc, int empty_index,</div><div class='del'>-                            afr_transaction_type type,</div><div class='del'>-                            char *op_type)</div><div class='add'>+_afr_handle_empty_brick_type(xlator_t *this, call_frame_t *frame, loc_t *loc,</div><div class='add'>+                             int empty_index, afr_transaction_type type,</div><div class='add'>+                             char *op_type)</div><div class='ctx'> {</div><div class='del'>-        int              count            = 0;</div><div class='del'>-        int              ret              = -ENOMEM;</div><div class='del'>-        int              idx              = -1;</div><div class='del'>-        int              d_idx            = -1;</div><div class='del'>-        unsigned char   *locked_nodes     = NULL;</div><div class='del'>-        afr_local_t     *local            = NULL;</div><div class='del'>-        afr_private_t   *priv             = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = -ENOMEM;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int d_idx = -1;</div><div class='add'>+    unsigned char *locked_nodes = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        locked_nodes = alloca0 (priv-&gt;child_count);</div><div class='add'>+    locked_nodes = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        idx = afr_index_for_transaction_type (type);</div><div class='del'>-        d_idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);</div><div class='add'>+    idx = afr_index_for_transaction_type(type);</div><div class='add'>+    d_idx = afr_index_for_transaction_type(AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-        local-&gt;pending = afr_matrix_create (priv-&gt;child_count,</div><div class='del'>-                                            AFR_NUM_CHANGE_LOGS);</div><div class='del'>-        if (!local-&gt;pending)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;pending = afr_matrix_create(priv-&gt;child_count, AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (!local-&gt;pending)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;pending[empty_index][idx] = hton32 (1);</div><div class='add'>+    local-&gt;pending[empty_index][idx] = hton32(1);</div><div class='ctx'> </div><div class='del'>-        if ((priv-&gt;esh_granular) &amp;&amp; (type == AFR_ENTRY_TRANSACTION))</div><div class='del'>-                        local-&gt;pending[empty_index][d_idx] = hton32 (1);</div><div class='add'>+    if ((priv-&gt;esh_granular) &amp;&amp; (type == AFR_ENTRY_TRANSACTION))</div><div class='add'>+        local-&gt;pending[empty_index][d_idx] = hton32(1);</div><div class='ctx'> </div><div class='del'>-        local-&gt;xdata_req = dict_new ();</div><div class='del'>-        if (!local-&gt;xdata_req)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;xdata_req = dict_new();</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (local-&gt;xdata_req, "replicate-brick-op", op_type);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_str(local-&gt;xdata_req, "replicate-brick-op", op_type);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;xattr_req = dict_new ();</div><div class='del'>-        if (!local-&gt;xattr_req)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;xattr_req = dict_new();</div><div class='add'>+    if (!local-&gt;xattr_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = afr_set_pending_dict (priv, local-&gt;xattr_req, local-&gt;pending);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = afr_set_pending_dict(priv, local-&gt;xattr_req, local-&gt;pending);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (AFR_ENTRY_TRANSACTION == type) {</div><div class='del'>-                count = afr_selfheal_entrylk (frame, this, loc-&gt;inode,</div><div class='del'>-                                              this-&gt;name, NULL, locked_nodes);</div><div class='del'>-        } else {</div><div class='del'>-                count = afr_selfheal_inodelk (frame, this, loc-&gt;inode,</div><div class='del'>-                                              this-&gt;name, LLONG_MAX - 1, 0,</div><div class='del'>-                                              locked_nodes);</div><div class='del'>-        }</div><div class='add'>+    if (AFR_ENTRY_TRANSACTION == type) {</div><div class='add'>+        count = afr_selfheal_entrylk(frame, this, loc-&gt;inode, this-&gt;name, NULL,</div><div class='add'>+                                     locked_nodes);</div><div class='add'>+    } else {</div><div class='add'>+        count = afr_selfheal_inodelk(frame, this, loc-&gt;inode, this-&gt;name,</div><div class='add'>+                                     LLONG_MAX - 1, 0, locked_nodes);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!count) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EAGAIN,</div><div class='del'>-                        AFR_MSG_REPLACE_BRICK_STATUS, "Couldn't acquire lock on"</div><div class='del'>-                        " any child.");</div><div class='del'>-                ret = -EAGAIN;</div><div class='del'>-                goto unlock;</div><div class='del'>-        }</div><div class='add'>+    if (!count) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EAGAIN, AFR_MSG_REPLACE_BRICK_STATUS,</div><div class='add'>+               "Couldn't acquire lock on"</div><div class='add'>+               " any child.");</div><div class='add'>+        ret = -EAGAIN;</div><div class='add'>+        goto unlock;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = afr_emptyb_set_pending_changelog (frame, this, locked_nodes);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unlock;</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = afr_emptyb_set_pending_changelog(frame, this, locked_nodes);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unlock;</div><div class='add'>+    ret = 0;</div><div class='ctx'> unlock:</div><div class='del'>-        if (AFR_ENTRY_TRANSACTION == type) {</div><div class='del'>-                afr_selfheal_unentrylk (frame, this, loc-&gt;inode, this-&gt;name,</div><div class='del'>-                                        NULL, locked_nodes, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                afr_selfheal_uninodelk (frame, this, loc-&gt;inode, this-&gt;name,</div><div class='del'>-                                        LLONG_MAX - 1, 0, locked_nodes);</div><div class='del'>-        }</div><div class='add'>+    if (AFR_ENTRY_TRANSACTION == type) {</div><div class='add'>+        afr_selfheal_unentrylk(frame, this, loc-&gt;inode, this-&gt;name, NULL,</div><div class='add'>+                               locked_nodes, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        afr_selfheal_uninodelk(frame, this, loc-&gt;inode, this-&gt;name,</div><div class='add'>+                               LLONG_MAX - 1, 0, locked_nodes);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_brick_args_cleanup (void *opaque)</div><div class='add'>+afr_brick_args_cleanup(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        afr_empty_brick_args_t *data = NULL;</div><div class='add'>+    afr_empty_brick_args_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        data = opaque;</div><div class='del'>-        loc_wipe (&amp;data-&gt;loc);</div><div class='del'>-        GF_FREE (data);</div><div class='add'>+    data = opaque;</div><div class='add'>+    loc_wipe(&amp;data-&gt;loc);</div><div class='add'>+    GF_FREE(data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_afr_handle_empty_brick_cbk (int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+_afr_handle_empty_brick_cbk(int ret, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        afr_brick_args_cleanup (opaque);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_brick_args_cleanup(opaque);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_afr_handle_empty_brick (void *opaque)</div><div class='add'>+_afr_handle_empty_brick(void *opaque)</div><div class='ctx'> {</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int empty_index = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char *op_type = NULL;</div><div class='add'>+    afr_empty_brick_args_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        afr_local_t     *local          = NULL;</div><div class='del'>-        afr_private_t   *priv           = NULL;</div><div class='del'>-        int              empty_index       = -1;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        int              op_errno       = ENOMEM;</div><div class='del'>-        call_frame_t    *frame          = NULL;</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        char            *op_type        = NULL;</div><div class='del'>-        afr_empty_brick_args_t *data  = NULL;</div><div class='add'>+    data = opaque;</div><div class='add'>+    frame = data-&gt;frame;</div><div class='add'>+    empty_index = data-&gt;empty_index;</div><div class='add'>+    op_type = data-&gt;op_type;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        data = opaque;</div><div class='del'>-        frame = data-&gt;frame;</div><div class='del'>-        empty_index = data-&gt;empty_index;</div><div class='del'>-        op_type = data-&gt;op_type;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, &amp;data-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, &amp;data-&gt;loc);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0, "New brick is : %s",</div><div class='add'>+           priv-&gt;children[empty_index]-&gt;name);</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "New brick is : %s",</div><div class='del'>-                priv-&gt;children[empty_index]-&gt;name);</div><div class='add'>+    ret = _afr_handle_empty_brick_type(this, frame, &amp;local-&gt;loc, empty_index,</div><div class='add'>+                                       AFR_METADATA_TRANSACTION, op_type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _afr_handle_empty_brick_type (this, frame, &amp;local-&gt;loc, empty_index,</div><div class='del'>-                                          AFR_METADATA_TRANSACTION, op_type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict_unref (local-&gt;xdata_req);</div><div class='del'>-        dict_unref (local-&gt;xattr_req);</div><div class='del'>-        afr_matrix_cleanup (local-&gt;pending, priv-&gt;child_count);</div><div class='del'>-        local-&gt;pending = NULL;</div><div class='del'>-        local-&gt;xattr_req = NULL;</div><div class='del'>-        local-&gt;xdata_req = NULL;</div><div class='add'>+    dict_unref(local-&gt;xdata_req);</div><div class='add'>+    dict_unref(local-&gt;xattr_req);</div><div class='add'>+    afr_matrix_cleanup(local-&gt;pending, priv-&gt;child_count);</div><div class='add'>+    local-&gt;pending = NULL;</div><div class='add'>+    local-&gt;xattr_req = NULL;</div><div class='add'>+    local-&gt;xdata_req = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = _afr_handle_empty_brick_type (this, frame, &amp;local-&gt;loc, empty_index,</div><div class='del'>-                                          AFR_ENTRY_TRANSACTION, op_type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = _afr_handle_empty_brick_type(this, frame, &amp;local-&gt;loc, empty_index,</div><div class='add'>+                                       AFR_ENTRY_TRANSACTION, op_type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        AFR_STACK_UNWIND (setxattr, frame, ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(setxattr, frame, ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+afr_split_brain_resolve_do(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                           char *data)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    local-&gt;xdata_req = dict_new();</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;xdata_req) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(local-&gt;xdata_req, "heal-op",</div><div class='add'>+                         GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(local-&gt;xdata_req, "child-name", data);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* set spb choice to -1 whether heal succeeds or not:</div><div class='add'>+     * If heal succeeds : spb-choice should be set to -1 as</div><div class='add'>+     *                    it is no longer valid; file is not</div><div class='add'>+     *                    in split-brain anymore.</div><div class='add'>+     * If heal doesn't succeed:</div><div class='add'>+     *                    spb-choice should be set to -1</div><div class='add'>+     *                    otherwise reads will be served</div><div class='add'>+     *                    from spb-choice which is misleading.</div><div class='add'>+     */</div><div class='add'>+    ret = afr_inode_split_brain_choice_set(loc-&gt;inode, this, -1);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='add'>+               "Failed to set"</div><div class='add'>+               "split-brain choice to -1");</div><div class='add'>+    afr_heal_splitbrain_file(frame, this, loc);</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_split_brain_resolve_do (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                            char *data)</div><div class='add'>+afr_get_split_brain_child_index(xlator_t *this, void *value, size_t len)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t    *local             = NULL;</div><div class='del'>-        int     ret                       = -1;</div><div class='del'>-        int     op_errno                  = EINVAL;</div><div class='add'>+    int spb_child_index = -1;</div><div class='add'>+    char *spb_child_str = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        local-&gt;xdata_req = dict_new ();</div><div class='add'>+    spb_child_str = alloca0(len + 1);</div><div class='add'>+    memcpy(spb_child_str, value, len);</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;xdata_req) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!strcmp(spb_child_str, "none"))</div><div class='add'>+        return -2;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (local-&gt;xdata_req, "heal-op",</div><div class='del'>-                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (local-&gt;xdata_req, "child-name", data);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* set spb choice to -1 whether heal succeeds or not:</div><div class='del'>-         * If heal succeeds : spb-choice should be set to -1 as</div><div class='del'>-         *                    it is no longer valid; file is not</div><div class='del'>-         *                    in split-brain anymore.</div><div class='del'>-         * If heal doesn't succeed:</div><div class='del'>-         *                    spb-choice should be set to -1</div><div class='del'>-         *                    otherwise reads will be served</div><div class='del'>-         *                    from spb-choice which is misleading.</div><div class='del'>-         */</div><div class='del'>-        ret = afr_inode_split_brain_choice_set (loc-&gt;inode, this, -1);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, "Failed to set"</div><div class='del'>-                        "split-brain choice to -1");</div><div class='del'>-        afr_heal_splitbrain_file (frame, this, loc);</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    spb_child_index = afr_get_child_index_from_name(this, spb_child_str);</div><div class='add'>+    if (spb_child_index &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_SUBVOL,</div><div class='add'>+               "Invalid subvol: %s", spb_child_str);</div><div class='add'>+    }</div><div class='add'>+    return spb_child_index;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_get_split_brain_child_index (xlator_t *this, void *value, size_t len)</div><div class='add'>+afr_can_set_split_brain_choice(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int             spb_child_index   = -1;</div><div class='del'>-        char           *spb_child_str     = NULL;</div><div class='add'>+    afr_spbc_timeout_t *data = opaque;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        spb_child_str =  alloca0 (len + 1);</div><div class='del'>-        memcpy (spb_child_str, value, len);</div><div class='add'>+    frame = data-&gt;frame;</div><div class='add'>+    loc = data-&gt;loc;</div><div class='add'>+    this = frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (spb_child_str, "none"))</div><div class='del'>-                return -2;</div><div class='add'>+    ret = afr_is_split_brain(frame, this, loc-&gt;inode, loc-&gt;gfid, &amp;data-&gt;d_spb,</div><div class='add'>+                             &amp;data-&gt;m_spb);</div><div class='ctx'> </div><div class='del'>-        spb_child_index = afr_get_child_index_from_name (this,</div><div class='del'>-                                                         spb_child_str);</div><div class='del'>-        if (spb_child_index &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_INVALID_SUBVOL, "Invalid subvol: %s",</div><div class='del'>-                        spb_child_str);</div><div class='del'>-        }</div><div class='del'>-        return spb_child_index;</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='add'>+               "Failed to determine if %s"</div><div class='add'>+               " is in split-brain. "</div><div class='add'>+               "Aborting split-brain-choice set.",</div><div class='add'>+               uuid_utoa(loc-&gt;gfid));</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_can_set_split_brain_choice (void *opaque)</div><div class='add'>+afr_handle_split_brain_commands(xlator_t *this, call_frame_t *frame, loc_t *loc,</div><div class='add'>+                                dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        afr_spbc_timeout_t        *data         = opaque;</div><div class='del'>-        call_frame_t              *frame        = NULL;</div><div class='del'>-        xlator_t                  *this         = NULL;</div><div class='del'>-        loc_t                     *loc          = NULL;</div><div class='del'>-        int                        ret          = -1;</div><div class='add'>+    void *value = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_spbc_timeout_t *data = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    int spb_child_index = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        frame = data-&gt;frame;</div><div class='del'>-        loc = data-&gt;loc;</div><div class='del'>-        this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = afr_is_split_brain (frame, this, loc-&gt;inode, loc-&gt;gfid,</div><div class='del'>-                                  &amp;data-&gt;d_spb, &amp;data-&gt;m_spb);</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='del'>-                        "Failed to determine if %s"</div><div class='del'>-                        " is in split-brain. "</div><div class='del'>-                        "Aborting split-brain-choice set.",</div><div class='del'>-                        uuid_utoa (loc-&gt;gfid));</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    local-&gt;op = GF_FOP_SETXATTR;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-afr_handle_split_brain_commands (xlator_t *this, call_frame_t *frame,</div><div class='del'>-                                loc_t *loc, dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        void           *value             = NULL;</div><div class='del'>-        afr_private_t  *priv              = NULL;</div><div class='del'>-        afr_local_t    *local             = NULL;</div><div class='del'>-        afr_spbc_timeout_t *data          = NULL;</div><div class='del'>-        int             len               = 0;</div><div class='del'>-        int             spb_child_index   = -1;</div><div class='del'>-        int             ret               = -1;</div><div class='del'>-        int             op_errno          = EINVAL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-        if (!local) {</div><div class='add'>+    ret = dict_get_ptr_and_len(dict, GF_AFR_SBRAIN_CHOICE, &amp;value, &amp;len);</div><div class='add'>+    if (value) {</div><div class='add'>+        spb_child_index = afr_get_split_brain_child_index(this, value, len);</div><div class='add'>+        if (spb_child_index &lt; 0) {</div><div class='add'>+            /* Case where value was "none" */</div><div class='add'>+            if (spb_child_index == -2)</div><div class='add'>+                spb_child_index = -1;</div><div class='add'>+            else {</div><div class='ctx'>                 ret = 1;</div><div class='add'>+                op_errno = EINVAL;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_SETXATTR;</div><div class='del'>-</div><div class='del'>-        ret =  dict_get_ptr_and_len (dict, GF_AFR_SBRAIN_CHOICE, &amp;value,</div><div class='del'>-                                     &amp;len);</div><div class='del'>-        if (value) {</div><div class='del'>-                spb_child_index = afr_get_split_brain_child_index (this, value,</div><div class='del'>-                                                                   len);</div><div class='del'>-                if (spb_child_index &lt; 0) {</div><div class='del'>-                        /* Case where value was "none" */</div><div class='del'>-                        if (spb_child_index == -2)</div><div class='del'>-                                spb_child_index = -1;</div><div class='del'>-                        else {</div><div class='del'>-                                ret = 1;</div><div class='del'>-                                op_errno = EINVAL;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                data = GF_CALLOC (1, sizeof (*data), gf_afr_mt_spbc_timeout_t);</div><div class='del'>-                if (!data) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                data-&gt;spb_child_index = spb_child_index;</div><div class='del'>-                data-&gt;frame = frame;</div><div class='del'>-                loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-                data-&gt;loc = &amp;local-&gt;loc;</div><div class='del'>-                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                    afr_can_set_split_brain_choice,</div><div class='del'>-                                    afr_set_split_brain_choice, NULL, data);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='del'>-                                "Failed to create"</div><div class='del'>-                                " synctask. Aborting split-brain choice set"</div><div class='del'>-                                " for %s", loc-&gt;name);</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+        data = GF_CALLOC(1, sizeof(*data), gf_afr_mt_spbc_timeout_t);</div><div class='add'>+        if (!data) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        data-&gt;spb_child_index = spb_child_index;</div><div class='add'>+        data-&gt;frame = frame;</div><div class='add'>+        loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+        data-&gt;loc = &amp;local-&gt;loc;</div><div class='add'>+        ret = synctask_new(this-&gt;ctx-&gt;env, afr_can_set_split_brain_choice,</div><div class='add'>+                           afr_set_split_brain_choice, NULL, data);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR,</div><div class='add'>+                   "Failed to create"</div><div class='add'>+                   " synctask. Aborting split-brain choice set"</div><div class='add'>+                   " for %s",</div><div class='add'>+                   loc-&gt;name);</div><div class='add'>+            ret = 1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_ptr_and_len (dict, GF_AFR_SBRAIN_RESOLVE, &amp;value, &amp;len);</div><div class='del'>-        if (value) {</div><div class='del'>-                spb_child_index = afr_get_split_brain_child_index (this, value,</div><div class='del'>-                                                                   len);</div><div class='del'>-                if (spb_child_index &lt; 0) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                afr_split_brain_resolve_do (frame, this, loc,</div><div class='del'>-                                            priv-&gt;children[spb_child_index]-&gt;name);</div><div class='del'>-                ret = 0;</div><div class='add'>+    ret = dict_get_ptr_and_len(dict, GF_AFR_SBRAIN_RESOLVE, &amp;value, &amp;len);</div><div class='add'>+    if (value) {</div><div class='add'>+        spb_child_index = afr_get_split_brain_child_index(this, value, len);</div><div class='add'>+        if (spb_child_index &lt; 0) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        afr_split_brain_resolve_do(frame, this, loc,</div><div class='add'>+                                   priv-&gt;children[spb_child_index]-&gt;name);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        /* key was correct but value was invalid when ret == 1 */</div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL);</div><div class='del'>-                if (data)</div><div class='del'>-                        GF_FREE (data);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    /* key was correct but value was invalid when ret == 1 */</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+        if (data)</div><div class='add'>+            GF_FREE(data);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_handle_spb_choice_timeout (xlator_t *this, call_frame_t *frame,</div><div class='del'>-                               dict_t *dict)</div><div class='add'>+afr_handle_spb_choice_timeout(xlator_t *this, call_frame_t *frame, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret               = -1;</div><div class='del'>-        int             op_errno          = 0;</div><div class='del'>-        uint64_t        timeout           = 0;</div><div class='del'>-        afr_private_t  *priv              = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    uint64_t timeout = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_uint64 (dict, GF_AFR_SPB_CHOICE_TIMEOUT, &amp;timeout);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                priv-&gt;spb_choice_timeout = timeout * 60;</div><div class='del'>-                AFR_STACK_UNWIND (setxattr, frame, ret, op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_uint64(dict, GF_AFR_SPB_CHOICE_TIMEOUT, &amp;timeout);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        priv-&gt;spb_choice_timeout = timeout * 60;</div><div class='add'>+        AFR_STACK_UNWIND(setxattr, frame, ret, op_errno, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_handle_empty_brick (xlator_t *this, call_frame_t *frame, loc_t *loc,</div><div class='del'>-                        dict_t *dict)</div><div class='add'>+afr_handle_empty_brick(xlator_t *this, call_frame_t *frame, loc_t *loc,</div><div class='add'>+                       dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int             ret               = -1;</div><div class='del'>-        int             ab_ret            = -1;</div><div class='del'>-        int             empty_index        = -1;</div><div class='del'>-        int             op_errno          = EPERM;</div><div class='del'>-        char           *empty_brick         = NULL;</div><div class='del'>-        char           *op_type           = NULL;</div><div class='del'>-        afr_empty_brick_args_t *data        = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int ab_ret = -1;</div><div class='add'>+    int empty_index = -1;</div><div class='add'>+    int op_errno = EPERM;</div><div class='add'>+    char *empty_brick = NULL;</div><div class='add'>+    char *op_type = NULL;</div><div class='add'>+    afr_empty_brick_args_t *data = NULL;</div><div class='ctx'> </div><div class='del'>-        ret =  dict_get_str (dict, GF_AFR_REPLACE_BRICK, &amp;empty_brick);</div><div class='del'>-        if (!ret)</div><div class='del'>-                op_type = GF_AFR_REPLACE_BRICK;</div><div class='add'>+    ret = dict_get_str(dict, GF_AFR_REPLACE_BRICK, &amp;empty_brick);</div><div class='add'>+    if (!ret)</div><div class='add'>+        op_type = GF_AFR_REPLACE_BRICK;</div><div class='ctx'> </div><div class='del'>-        ab_ret = dict_get_str (dict, GF_AFR_ADD_BRICK, &amp;empty_brick);</div><div class='del'>-        if (!ab_ret)</div><div class='del'>-                op_type = GF_AFR_ADD_BRICK;</div><div class='add'>+    ab_ret = dict_get_str(dict, GF_AFR_ADD_BRICK, &amp;empty_brick);</div><div class='add'>+    if (!ab_ret)</div><div class='add'>+        op_type = GF_AFR_ADD_BRICK;</div><div class='ctx'> </div><div class='del'>-        if (ret &amp;&amp; ab_ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret &amp;&amp; ab_ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_SELF_HEALD) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EPERM,</div><div class='del'>-                        afr_get_msg_id (op_type),</div><div class='del'>-                        "'%s' is an internal extended attribute.",</div><div class='del'>-                        op_type);</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='add'>+    if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_SELF_HEALD) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EPERM, afr_get_msg_id(op_type),</div><div class='add'>+               "'%s' is an internal extended attribute.", op_type);</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    empty_index = afr_get_child_index_from_name(this, empty_brick);</div><div class='add'>+</div><div class='add'>+    if (empty_index &lt; 0) {</div><div class='add'>+        /* Didn't belong to this replica pair</div><div class='add'>+         * Just do a no-op</div><div class='add'>+         */</div><div class='add'>+        AFR_STACK_UNWIND(setxattr, frame, 0, 0, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    } else {</div><div class='add'>+        data = GF_CALLOC(1, sizeof(*data), gf_afr_mt_empty_brick_t);</div><div class='add'>+        if (!data) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        empty_index = afr_get_child_index_from_name (this, empty_brick);</div><div class='del'>-</div><div class='del'>-        if (empty_index &lt; 0) {</div><div class='del'>-                 /* Didn't belong to this replica pair</div><div class='del'>-                  * Just do a no-op</div><div class='del'>-                  */</div><div class='del'>-                AFR_STACK_UNWIND (setxattr, frame, 0, 0, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        } else {</div><div class='del'>-                data = GF_CALLOC (1, sizeof (*data),</div><div class='del'>-                                  gf_afr_mt_empty_brick_t);</div><div class='del'>-                if (!data) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                data-&gt;frame = frame;</div><div class='del'>-                loc_copy (&amp;data-&gt;loc, loc);</div><div class='del'>-                data-&gt;empty_index = empty_index;</div><div class='del'>-                data-&gt;op_type = op_type;</div><div class='del'>-                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                    _afr_handle_empty_brick,</div><div class='del'>-                                    _afr_handle_empty_brick_cbk,</div><div class='del'>-                                    NULL, data);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                afr_get_msg_id (op_type),</div><div class='del'>-                                "Failed to create synctask.");</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        afr_brick_args_cleanup (data);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        data-&gt;frame = frame;</div><div class='add'>+        loc_copy(&amp;data-&gt;loc, loc);</div><div class='add'>+        data-&gt;empty_index = empty_index;</div><div class='add'>+        data-&gt;op_type = op_type;</div><div class='add'>+        ret = synctask_new(this-&gt;ctx-&gt;env, _afr_handle_empty_brick,</div><div class='add'>+                           _afr_handle_empty_brick_cbk, NULL, data);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, afr_get_msg_id(op_type),</div><div class='add'>+                   "Failed to create synctask.");</div><div class='add'>+            ret = 1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            afr_brick_args_cleanup(data);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_handle_special_xattr (xlator_t *this, call_frame_t *frame, loc_t *loc,</div><div class='del'>-                          dict_t *dict)</div><div class='add'>+afr_handle_special_xattr(xlator_t *this, call_frame_t *frame, loc_t *loc,</div><div class='add'>+                         dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = afr_handle_split_brain_commands (this, frame, loc, dict);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = afr_handle_split_brain_commands(this, frame, loc, dict);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = afr_handle_spb_choice_timeout (this, frame, dict);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = afr_handle_spb_choice_timeout(this, frame, dict);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* Applicable for replace-brick and add-brick commands */</div><div class='del'>-        ret = afr_handle_empty_brick (this, frame, loc, dict);</div><div class='add'>+    /* Applicable for replace-brick and add-brick commands */</div><div class='add'>+    ret = afr_handle_empty_brick(this, frame, loc, dict);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='del'>-	      int32_t flags, dict_t *xdata)</div><div class='add'>+afr_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+             int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t    *local             = NULL;</div><div class='del'>-        call_frame_t   *transaction_frame = NULL;</div><div class='del'>-        int             ret               = -1;</div><div class='del'>-        int             op_errno          = EINVAL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        GF_IF_INTERNAL_XATTR_GOTO ("trusted.afr.*", dict,</div><div class='del'>-                                   op_errno, out);</div><div class='add'>+    GF_IF_INTERNAL_XATTR_GOTO("trusted.afr.*", dict, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.afr.*", dict,</div><div class='del'>-                                   op_errno, out);</div><div class='add'>+    GF_IF_INTERNAL_XATTR_GOTO("trusted.glusterfs.afr.*", dict, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = afr_handle_special_xattr (this, frame, loc, dict);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    ret = afr_handle_special_xattr(this, frame, loc, dict);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.setxattr.dict  = dict_ref (dict);</div><div class='del'>-        local-&gt;cont.setxattr.flags = flags;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    local-&gt;cont.setxattr.dict = dict_ref(dict);</div><div class='add'>+    local-&gt;cont.setxattr.flags = flags;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_setxattr_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_setxattr_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_setxattr_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_setxattr_unwind;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        ret = afr_set_inode_local (this, local, loc-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = afr_set_inode_local(this, local, loc-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_SETXATTR;</div><div class='add'>+    local-&gt;op = GF_FOP_SETXATTR;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {{{ fsetxattr */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsetxattr_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fsetxattr_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t    *local         = NULL;</div><div class='del'>-        call_frame_t   *main_frame    = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (fsetxattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(fsetxattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fsetxattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_fsetxattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      NULL, NULL, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                                 NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsetxattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fsetxattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t        *local       = NULL;</div><div class='del'>-        afr_private_t      *priv        = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_fsetxattr_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;fsetxattr,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.fsetxattr.dict,</div><div class='del'>-			   local-&gt;cont.fsetxattr.flags, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fsetxattr_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.fsetxattr.dict, local-&gt;cont.fsetxattr.flags,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+afr_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+              int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t      *local             = NULL;</div><div class='del'>-        call_frame_t     *transaction_frame = NULL;</div><div class='del'>-        int               ret               = -1;</div><div class='del'>-        int               op_errno          = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GF_IF_INTERNAL_XATTR_GOTO ("trusted.afr.*", dict,</div><div class='del'>-                                   op_errno, out);</div><div class='add'>+    GF_IF_INTERNAL_XATTR_GOTO("trusted.afr.*", dict, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.afr.*", dict,</div><div class='del'>-                                   op_errno, out);</div><div class='add'>+    GF_IF_INTERNAL_XATTR_GOTO("trusted.glusterfs.afr.*", dict, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.fsetxattr.dict  = dict_ref (dict);</div><div class='del'>-        local-&gt;cont.fsetxattr.flags = flags;</div><div class='add'>+    local-&gt;cont.fsetxattr.dict = dict_ref(dict);</div><div class='add'>+    local-&gt;cont.fsetxattr.flags = flags;</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_fsetxattr_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_fsetxattr_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_fsetxattr_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_fsetxattr_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd                 = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_FSETXATTR;</div><div class='add'>+    local-&gt;op = GF_FOP_FSETXATTR;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start  = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len    = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fsetxattr, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(fsetxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* {{{ removexattr */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_removexattr_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_removexattr_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (removexattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(removexattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_removexattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_removexattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      NULL, NULL, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                                 NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_removexattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_removexattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_removexattr_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;removexattr,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.removexattr.name,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_removexattr_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;removexattr, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.removexattr.name, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+afr_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local             = NULL;</div><div class='del'>-        call_frame_t    *transaction_frame = NULL;</div><div class='del'>-        int              ret               = -1;</div><div class='del'>-        int              op_errno          = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO ("trusted.afr.*",</div><div class='del'>-                                 name, op_errno, out);</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO("trusted.afr.*", name, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO ("trusted.glusterfs.afr.*",</div><div class='del'>-                                 name, op_errno, out);</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO("trusted.glusterfs.afr.*", name, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.removexattr.name = gf_strdup (name);</div><div class='add'>+    local-&gt;cont.removexattr.name = gf_strdup(name);</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_removexattr_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_removexattr_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_removexattr_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_removexattr_unwind;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        ret = afr_set_inode_local (this, local, loc-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = afr_set_inode_local(this, local, loc-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_REMOVEXATTR;</div><div class='add'>+    local-&gt;op = GF_FOP_REMOVEXATTR;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (removexattr, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(removexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* ffremovexattr */</div><div class='ctx'> int</div><div class='del'>-afr_fremovexattr_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fremovexattr_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fremovexattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(fremovexattr, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fremovexattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+afr_fremovexattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      NULL, NULL, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                                 NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fremovexattr_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fremovexattr_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_fremovexattr_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;fremovexattr,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.removexattr.name,</div><div class='del'>-			   local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fremovexattr_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fremovexattr, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.removexattr.name, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		  const char *name, dict_t *xdata)</div><div class='add'>+afr_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                 const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO ("trusted.afr.*",</div><div class='del'>-                                 name, op_errno, out);</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO("trusted.afr.*", name, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO ("trusted.glusterfs.afr.*",</div><div class='del'>-                                 name, op_errno, out);</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO("trusted.glusterfs.afr.*", name, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.removexattr.name = gf_strdup (name);</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    local-&gt;cont.removexattr.name = gf_strdup(name);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_fremovexattr_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_fremovexattr_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_fremovexattr_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_fremovexattr_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_FREMOVEXATTR;</div><div class='add'>+    local-&gt;op = GF_FOP_FREMOVEXATTR;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fremovexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(fremovexattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fallocate_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fallocate_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fallocate, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(fallocate, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fallocate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_fallocate_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      prebuf, postbuf, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf,</div><div class='add'>+                                 postbuf, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fallocate_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fallocate_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_fallocate_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;fallocate,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.fallocate.mode,</div><div class='del'>-			   local-&gt;cont.fallocate.offset,</div><div class='del'>-			   local-&gt;cont.fallocate.len, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fallocate_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fallocate, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.fallocate.mode, local-&gt;cont.fallocate.offset,</div><div class='add'>+                      local-&gt;cont.fallocate.len, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='del'>-               off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+afr_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='add'>+              off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.fallocate.mode = mode;</div><div class='del'>-        local-&gt;cont.fallocate.offset  = offset;</div><div class='del'>-        local-&gt;cont.fallocate.len = len;</div><div class='add'>+    local-&gt;cont.fallocate.mode = mode;</div><div class='add'>+    local-&gt;cont.fallocate.offset = offset;</div><div class='add'>+    local-&gt;cont.fallocate.len = len;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_FALLOCATE;</div><div class='add'>+    local-&gt;op = GF_FOP_FALLOCATE;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_fallocate_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_fallocate_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_fallocate_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_fallocate_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.start   = local-&gt;cont.fallocate.offset;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.start = local-&gt;cont.fallocate.offset;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ discard */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_discard_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_discard_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (discard, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(discard, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_discard_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_discard_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      prebuf, postbuf, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf,</div><div class='add'>+                                 postbuf, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_discard_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_discard_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_discard_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;discard,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.discard.offset,</div><div class='del'>-			   local-&gt;cont.discard.len, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_discard_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;discard, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.discard.offset, local-&gt;cont.discard.len,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-             size_t len, dict_t *xdata)</div><div class='add'>+afr_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+            size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-	transaction_frame = copy_frame (frame);</div><div class='del'>-	if (!transaction_frame)</div><div class='del'>-		goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.discard.offset  = offset;</div><div class='del'>-        local-&gt;cont.discard.len = len;</div><div class='add'>+    local-&gt;cont.discard.offset = offset;</div><div class='add'>+    local-&gt;cont.discard.len = len;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_DISCARD;</div><div class='add'>+    local-&gt;op = GF_FOP_DISCARD;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_discard_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_discard_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_discard_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_discard_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.start   = local-&gt;cont.discard.offset;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.start = local-&gt;cont.discard.offset;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* {{{ zerofill */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_zerofill_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_zerofill_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (discard, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-			  &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    AFR_STACK_UNWIND(discard, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_zerofill_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+afr_zerofill_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='ctx'>                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      prebuf, postbuf, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf,</div><div class='add'>+                                 postbuf, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_zerofill_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_zerofill_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_zerofill_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;zerofill,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.zerofill.offset,</div><div class='del'>-			   local-&gt;cont.zerofill.len, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_zerofill_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;zerofill, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.zerofill.offset, local-&gt;cont.zerofill.len,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+afr_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='ctx'>              size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-	transaction_frame = copy_frame (frame);</div><div class='del'>-	if (!transaction_frame)</div><div class='del'>-		goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.zerofill.offset  = offset;</div><div class='del'>-        local-&gt;cont.zerofill.len = len;</div><div class='add'>+    local-&gt;cont.zerofill.offset = offset;</div><div class='add'>+    local-&gt;cont.zerofill.len = len;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;xdata_req)</div><div class='del'>-		goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_ZEROFILL;</div><div class='add'>+    local-&gt;op = GF_FOP_ZEROFILL;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_zerofill_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_zerofill_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_zerofill_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_zerofill_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.start   = local-&gt;cont.discard.offset;</div><div class='del'>-        local-&gt;transaction.len     = len;</div><div class='add'>+    local-&gt;transaction.start = local-&gt;cont.discard.offset;</div><div class='add'>+    local-&gt;transaction.len = len;</div><div class='ctx'> </div><div class='del'>-        afr_fix_open (fd, this);</div><div class='add'>+    afr_fix_open(fd, this);</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_xattrop_wind_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_xattrop_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      NULL, NULL, xattr, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                                 NULL, xattr, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_xattrop_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_xattrop_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_xattrop_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;xattrop,</div><div class='del'>-			   &amp;local-&gt;loc, local-&gt;cont.xattrop.optype,</div><div class='del'>-			   local-&gt;cont.xattrop.xattr, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_xattrop_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;xattrop, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;cont.xattrop.optype, local-&gt;cont.xattrop.xattr,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_xattrop_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_xattrop_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	AFR_STACK_UNWIND (xattrop, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;xattr_rsp, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    AFR_STACK_UNWIND(xattrop, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xattr_rsp, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+            gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.xattrop.xattr = dict_ref (xattr);</div><div class='del'>-        local-&gt;cont.xattrop.optype = optype;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;cont.xattrop.xattr = dict_ref(xattr);</div><div class='add'>+    local-&gt;cont.xattrop.optype = optype;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_xattrop_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_xattrop_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_xattrop_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_xattrop_unwind;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        ret = afr_set_inode_local (this, local, loc-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = afr_set_inode_local(this, local, loc-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_XATTROP;</div><div class='add'>+    local-&gt;op = GF_FOP_XATTROP;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(xattrop, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fxattrop_wind_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                       xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_fxattrop_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-				      NULL, NULL, xattr, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL,</div><div class='add'>+                                 NULL, xattr, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fxattrop_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fxattrop_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, afr_fxattrop_wind_cbk, (void *) (long) subvol,</div><div class='del'>-			   priv-&gt;children[subvol],</div><div class='del'>-			   priv-&gt;children[subvol]-&gt;fops-&gt;fxattrop,</div><div class='del'>-			   local-&gt;fd, local-&gt;cont.xattrop.optype,</div><div class='del'>-			   local-&gt;cont.xattrop.xattr, local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fxattrop_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fxattrop, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.xattrop.optype, local-&gt;cont.xattrop.xattr,</div><div class='add'>+                      local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fxattrop_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fxattrop_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-	main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-	if (!main_frame)</div><div class='del'>-		return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fxattrop, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-			  local-&gt;xattr_rsp, local-&gt;xdata_rsp);</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    AFR_STACK_UNWIND(fxattrop, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;xattr_rsp, local-&gt;xdata_rsp);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+             gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;cont.xattrop.xattr = dict_ref (xattr);</div><div class='del'>-        local-&gt;cont.xattrop.optype = optype;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;cont.xattrop.xattr = dict_ref(xattr);</div><div class='add'>+    local-&gt;cont.xattrop.optype = optype;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_fxattrop_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_fxattrop_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_fxattrop_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_fxattrop_unwind;</div><div class='ctx'> </div><div class='del'>-	local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op = GF_FOP_FXATTROP;</div><div class='add'>+    local-&gt;op = GF_FOP_FXATTROP;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='del'>-        local-&gt;transaction.start   = LLONG_MAX - 1;</div><div class='del'>-        local-&gt;transaction.len     = 0;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.start = LLONG_MAX - 1;</div><div class='add'>+    local-&gt;transaction.len = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this,</div><div class='del'>-                               AFR_METADATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-		op_errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(fxattrop, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsync_unwind (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_fsync_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *main_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        main_frame = afr_transaction_detach_fop_frame (frame);</div><div class='del'>-        if (!main_frame)</div><div class='del'>-                return 0;</div><div class='add'>+    main_frame = afr_transaction_detach_fop_frame(frame);</div><div class='add'>+    if (!main_frame)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_UNWIND (fsync, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='del'>-                          &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='add'>+    AFR_STACK_UNWIND(fsync, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.prebuf,</div><div class='add'>+                     &amp;local-&gt;cont.inode_wfop.postbuf, local-&gt;xdata_rsp);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsync_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_fsync_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                                      prebuf, postbuf, NULL, xdata);</div><div class='add'>+    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf,</div><div class='add'>+                                 postbuf, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_fsync_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_fsync_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, afr_fsync_wind_cbk, (void *)(long) subvol,</div><div class='del'>-                           priv-&gt;children[subvol],</div><div class='del'>-                           priv-&gt;children[subvol]-&gt;fops-&gt;fsync,</div><div class='del'>-                           local-&gt;fd, local-&gt;cont.fsync.datasync,</div><div class='del'>-                           local-&gt;xdata_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, afr_fsync_wind_cbk, (void *)(long)subvol,</div><div class='add'>+                      priv-&gt;children[subvol],</div><div class='add'>+                      priv-&gt;children[subvol]-&gt;fops-&gt;fsync, local-&gt;fd,</div><div class='add'>+                      local-&gt;cont.fsync.datasync, local-&gt;xdata_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='del'>-	   dict_t *xdata)</div><div class='add'>+afr_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        call_frame_t *transaction_frame = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int32_t op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *transaction_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        transaction_frame = copy_frame (frame);</div><div class='del'>-        if (!transaction_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    transaction_frame = copy_frame(frame);</div><div class='add'>+    if (!transaction_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (transaction_frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(transaction_frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-        else</div><div class='del'>-                local-&gt;xdata_req = dict_new ();</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;xdata_req)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local-&gt;xdata_req)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        ret = afr_set_inode_local (this, local, fd-&gt;inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    ret = afr_set_inode_local(this, local, fd-&gt;inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op = GF_FOP_FSYNC;</div><div class='del'>-        local-&gt;cont.fsync.datasync = datasync;</div><div class='add'>+    local-&gt;op = GF_FOP_FSYNC;</div><div class='add'>+    local-&gt;cont.fsync.datasync = datasync;</div><div class='ctx'> </div><div class='del'>-	if (afr_fd_has_witnessed_unstable_write (this, fd-&gt;inode)) {</div><div class='del'>-		/* don't care. we only wanted to CLEAR the bit */</div><div class='del'>-	}</div><div class='add'>+    if (afr_fd_has_witnessed_unstable_write(this, fd-&gt;inode)) {</div><div class='add'>+        /* don't care. we only wanted to CLEAR the bit */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.wind   = afr_fsync_wind;</div><div class='del'>-        local-&gt;transaction.unwind = afr_fsync_unwind;</div><div class='add'>+    local-&gt;transaction.wind = afr_fsync_wind;</div><div class='add'>+    local-&gt;transaction.unwind = afr_fsync_unwind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.main_frame = frame;</div><div class='add'>+    local-&gt;transaction.main_frame = frame;</div><div class='ctx'> </div><div class='del'>-        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	if (transaction_frame)</div><div class='del'>-		AFR_STACK_DESTROY (transaction_frame);</div><div class='add'>+    if (transaction_frame)</div><div class='add'>+        AFR_STACK_DESTROY(transaction_frame);</div><div class='ctx'> </div><div class='del'>-	AFR_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-lk-common.c b/xlators/cluster/afr/src/afr-lk-common.c<br/>index d7ff2b01a06..95e52ff4a09 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-lk-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-lk-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-lk-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-lk-common.c</a></div><div class='hunk'>@@ -18,1122 +18,1075 @@</div><div class='ctx'> </div><div class='ctx'> #include &lt;signal.h&gt;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-#define LOCKED_NO       0x0        /* no lock held */</div><div class='del'>-#define LOCKED_YES      0x1        /* for DATA, METADATA, ENTRY and higher_path */</div><div class='del'>-#define LOCKED_LOWER    0x2        /* for lower path */</div><div class='add'>+#define LOCKED_NO 0x0    /* no lock held */</div><div class='add'>+#define LOCKED_YES 0x1   /* for DATA, METADATA, ENTRY and higher_path */</div><div class='add'>+#define LOCKED_LOWER 0x2 /* for lower path */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_entry_lockee_cmp (const void *l1, const void *l2)</div><div class='add'>+afr_entry_lockee_cmp(const void *l1, const void *l2)</div><div class='ctx'> {</div><div class='del'>-        const afr_entry_lockee_t       *r1 = l1;</div><div class='del'>-        const afr_entry_lockee_t       *r2 = l2;</div><div class='del'>-        int                            ret = 0;</div><div class='del'>-        uuid_t                         gfid1 = {0};</div><div class='del'>-        uuid_t                         gfid2 = {0};</div><div class='del'>-</div><div class='del'>-        loc_gfid ((loc_t*)&amp;r1-&gt;loc, gfid1);</div><div class='del'>-        loc_gfid ((loc_t*)&amp;r2-&gt;loc, gfid2);</div><div class='del'>-        ret = gf_uuid_compare (gfid1, gfid2);</div><div class='del'>-        /*Entrylks with NULL basename are the 'smallest'*/</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                if (!r1-&gt;basename)</div><div class='del'>-                        return -1;</div><div class='del'>-                if (!r2-&gt;basename)</div><div class='del'>-                        return 1;</div><div class='del'>-                ret = strcmp (r1-&gt;basename, r2-&gt;basename);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                return -1;</div><div class='del'>-        else</div><div class='del'>-                return 1;</div><div class='add'>+    const afr_entry_lockee_t *r1 = l1;</div><div class='add'>+    const afr_entry_lockee_t *r2 = l2;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uuid_t gfid1 = {0};</div><div class='add'>+    uuid_t gfid2 = {0};</div><div class='add'>+</div><div class='add'>+    loc_gfid((loc_t *)&amp;r1-&gt;loc, gfid1);</div><div class='add'>+    loc_gfid((loc_t *)&amp;r2-&gt;loc, gfid2);</div><div class='add'>+    ret = gf_uuid_compare(gfid1, gfid2);</div><div class='add'>+    /*Entrylks with NULL basename are the 'smallest'*/</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        if (!r1-&gt;basename)</div><div class='add'>+            return -1;</div><div class='add'>+        if (!r2-&gt;basename)</div><div class='add'>+            return 1;</div><div class='add'>+        ret = strcmp(r1-&gt;basename, r2-&gt;basename);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        return -1;</div><div class='add'>+    else</div><div class='add'>+        return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int afr_lock_blocking (call_frame_t *frame, xlator_t *this, int child_index);</div><div class='add'>+int</div><div class='add'>+afr_lock_blocking(call_frame_t *frame, xlator_t *this, int child_index);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_set_lk_owner (call_frame_t *frame, xlator_t *this, void *lk_owner)</div><div class='add'>+afr_set_lk_owner(call_frame_t *frame, xlator_t *this, void *lk_owner)</div><div class='ctx'> {</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "Setting lk-owner=%llu",</div><div class='del'>-                      (unsigned long long) (unsigned long)lk_owner);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "Setting lk-owner=%llu",</div><div class='add'>+                 (unsigned long long)(unsigned long)lk_owner);</div><div class='ctx'> </div><div class='del'>-        set_lk_owner_from_ptr (&amp;frame-&gt;root-&gt;lk_owner, lk_owner);</div><div class='add'>+    set_lk_owner_from_ptr(&amp;frame-&gt;root-&gt;lk_owner, lk_owner);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-internal_lock_count (call_frame_t *frame, xlator_t *this)</div><div class='add'>+internal_lock_count(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        int32_t call_count = 0;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int32_t call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;child_up[i])</div><div class='del'>-                        ++call_count;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;child_up[i])</div><div class='add'>+            ++call_count;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return call_count;</div><div class='add'>+    return call_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> afr_is_inodelk_transaction(afr_transaction_type type)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case AFR_DATA_TRANSACTION:</div><div class='ctx'>         case AFR_METADATA_TRANSACTION:</div><div class='del'>-                ret = 1;</div><div class='del'>-                break;</div><div class='add'>+            ret = 1;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='ctx'>         case AFR_ENTRY_TRANSACTION:</div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_init_entry_lockee (afr_entry_lockee_t *lockee, afr_local_t *local,</div><div class='del'>-                       loc_t *loc, char *basename, int child_count)</div><div class='add'>+afr_init_entry_lockee(afr_entry_lockee_t *lockee, afr_local_t *local,</div><div class='add'>+                      loc_t *loc, char *basename, int child_count)</div><div class='ctx'> {</div><div class='del'>-        int     ret     = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;lockee-&gt;loc, loc);</div><div class='del'>-        lockee-&gt;basename        = (basename)? gf_strdup (basename): NULL;</div><div class='del'>-        if (basename &amp;&amp; !lockee-&gt;basename)</div><div class='del'>-                goto out;</div><div class='add'>+    loc_copy(&amp;lockee-&gt;loc, loc);</div><div class='add'>+    lockee-&gt;basename = (basename) ? gf_strdup(basename) : NULL;</div><div class='add'>+    if (basename &amp;&amp; !lockee-&gt;basename)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        lockee-&gt;locked_count    = 0;</div><div class='del'>-        lockee-&gt;locked_nodes    = GF_CALLOC (child_count,</div><div class='del'>-                                             sizeof (*lockee-&gt;locked_nodes),</div><div class='del'>-                                             gf_afr_mt_afr_node_character);</div><div class='add'>+    lockee-&gt;locked_count = 0;</div><div class='add'>+    lockee-&gt;locked_nodes = GF_CALLOC(child_count, sizeof(*lockee-&gt;locked_nodes),</div><div class='add'>+                                     gf_afr_mt_afr_node_character);</div><div class='ctx'> </div><div class='del'>-        if (!lockee-&gt;locked_nodes)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!lockee-&gt;locked_nodes)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_entry_lockee_cleanup (afr_internal_lock_t *int_lock)</div><div class='add'>+afr_entry_lockee_cleanup(afr_internal_lock_t *int_lock)</div><div class='ctx'> {</div><div class='del'>-        int     i   = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; int_lock-&gt;lockee_count; i++) {</div><div class='del'>-                loc_wipe (&amp;int_lock-&gt;lockee[i].loc);</div><div class='del'>-                if (int_lock-&gt;lockee[i].basename)</div><div class='del'>-                        GF_FREE (int_lock-&gt;lockee[i].basename);</div><div class='del'>-                if (int_lock-&gt;lockee[i].locked_nodes)</div><div class='del'>-                       GF_FREE (int_lock-&gt;lockee[i].locked_nodes);</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; int_lock-&gt;lockee_count; i++) {</div><div class='add'>+        loc_wipe(&amp;int_lock-&gt;lockee[i].loc);</div><div class='add'>+        if (int_lock-&gt;lockee[i].basename)</div><div class='add'>+            GF_FREE(int_lock-&gt;lockee[i].basename);</div><div class='add'>+        if (int_lock-&gt;lockee[i].locked_nodes)</div><div class='add'>+            GF_FREE(int_lock-&gt;lockee[i].locked_nodes);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-initialize_entrylk_variables (call_frame_t *frame, xlator_t *this)</div><div class='add'>+initialize_entrylk_variables(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_private_t       *priv     = NULL;</div><div class='del'>-</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;entrylk_lock_count = 0;</div><div class='del'>-        int_lock-&gt;lock_op_ret        = -1;</div><div class='del'>-        int_lock-&gt;lock_op_errno      = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; AFR_LOCKEE_COUNT_MAX; i++) {</div><div class='del'>-                if (!int_lock-&gt;lockee[i].locked_nodes)</div><div class='del'>-                        break;</div><div class='del'>-                int_lock-&gt;lockee[i].locked_count = 0;</div><div class='del'>-                memset (int_lock-&gt;lockee[i].locked_nodes, 0,</div><div class='del'>-                        sizeof (*int_lock-&gt;lockee[i].locked_nodes) *</div><div class='del'>-                        priv-&gt;child_count);</div><div class='del'>-        }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;entrylk_lock_count = 0;</div><div class='add'>+    int_lock-&gt;lock_op_ret = -1;</div><div class='add'>+    int_lock-&gt;lock_op_errno = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; AFR_LOCKEE_COUNT_MAX; i++) {</div><div class='add'>+        if (!int_lock-&gt;lockee[i].locked_nodes)</div><div class='add'>+            break;</div><div class='add'>+        int_lock-&gt;lockee[i].locked_count = 0;</div><div class='add'>+        memset(int_lock-&gt;lockee[i].locked_nodes, 0,</div><div class='add'>+               sizeof(*int_lock-&gt;lockee[i].locked_nodes) * priv-&gt;child_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-initialize_inodelk_variables (call_frame_t *frame, xlator_t *this)</div><div class='add'>+initialize_inodelk_variables(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_private_t       *priv     = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        int_lock-&gt;lock_count    = 0;</div><div class='del'>-        int_lock-&gt;lk_attempted_count = 0;</div><div class='del'>-        int_lock-&gt;lock_op_ret   = -1;</div><div class='del'>-        int_lock-&gt;lock_op_errno = 0;</div><div class='add'>+    int_lock-&gt;lock_count = 0;</div><div class='add'>+    int_lock-&gt;lk_attempted_count = 0;</div><div class='add'>+    int_lock-&gt;lock_op_ret = -1;</div><div class='add'>+    int_lock-&gt;lock_op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        memset (int_lock-&gt;locked_nodes, 0,</div><div class='del'>-                sizeof (*int_lock-&gt;locked_nodes) * priv-&gt;child_count);</div><div class='add'>+    memset(int_lock-&gt;locked_nodes, 0,</div><div class='add'>+           sizeof(*int_lock-&gt;locked_nodes) * priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lockee_locked_nodes_count (afr_internal_lock_t *int_lock)</div><div class='add'>+afr_lockee_locked_nodes_count(afr_internal_lock_t *int_lock)</div><div class='ctx'> {</div><div class='del'>-        int call_count  = 0;</div><div class='del'>-        int i           = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; int_lock-&gt;lockee_count; i++)</div><div class='del'>-                call_count += int_lock-&gt;lockee[i].locked_count;</div><div class='add'>+    for (i = 0; i &lt; int_lock-&gt;lockee_count; i++)</div><div class='add'>+        call_count += int_lock-&gt;lockee[i].locked_count;</div><div class='ctx'> </div><div class='del'>-        return call_count;</div><div class='add'>+    return call_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_locked_nodes_count (unsigned char *locked_nodes, int child_count)</div><div class='add'>+afr_locked_nodes_count(unsigned char *locked_nodes, int child_count)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; child_count; i++) {</div><div class='del'>-                if (locked_nodes[i] &amp; LOCKED_YES)</div><div class='del'>-                        call_count++;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; child_count; i++) {</div><div class='add'>+        if (locked_nodes[i] &amp; LOCKED_YES)</div><div class='add'>+            call_count++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return call_count;</div><div class='add'>+    return call_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FIXME: What if UNLOCK fails */</div><div class='ctx'> static int32_t</div><div class='del'>-afr_unlock_common_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_unlock_common_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t             *local          = NULL;</div><div class='del'>-        afr_internal_lock_t     *int_lock       = NULL;</div><div class='del'>-        int                      call_count     = 0;</div><div class='del'>-        int                      ret            = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION &amp;&amp; op_ret != 1)</div><div class='del'>-                ret = afr_write_subvol_reset (frame, this);</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION &amp;&amp; op_ret != 1)</div><div class='add'>+        ret = afr_write_subvol_reset(frame, this);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                call_count = --int_lock-&gt;lk_call_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        call_count = --int_lock-&gt;lk_call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "All internal locks unlocked");</div><div class='del'>-                int_lock-&gt;lock_cbk (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "All internal locks unlocked");</div><div class='add'>+        int_lock-&gt;lock_cbk(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_update_uninodelk (afr_local_t *local, afr_internal_lock_t *int_lock,</div><div class='del'>-                    int32_t child_index)</div><div class='add'>+afr_update_uninodelk(afr_local_t *local, afr_internal_lock_t *int_lock,</div><div class='add'>+                     int32_t child_index)</div><div class='ctx'> {</div><div class='del'>-        int_lock-&gt;locked_nodes[child_index] &amp;= LOCKED_NO;</div><div class='del'>-</div><div class='add'>+    int_lock-&gt;locked_nodes[child_index] &amp;= LOCKED_NO;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_unlock_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_unlock_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t         *local = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        int32_t             child_index = (long)cookie;</div><div class='del'>-        afr_private_t       *priv = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN &amp;&amp; op_errno != EBADFD) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        AFR_MSG_UNLOCK_FAIL,</div><div class='del'>-                        "path=%s gfid=%s: unlock failed on subvolume %s "</div><div class='del'>-                        "with lock owner %s", local-&gt;loc.path,</div><div class='del'>-                        loc_gfid_utoa (&amp;(local-&gt;loc)),</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name,</div><div class='del'>-                        lkowner_utoa (&amp;frame-&gt;root-&gt;lk_owner));</div><div class='del'>-        }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    int32_t child_index = (long)cookie;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        afr_update_uninodelk (local, int_lock, child_index);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        afr_unlock_common_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN &amp;&amp; op_errno != EBADFD) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, AFR_MSG_UNLOCK_FAIL,</div><div class='add'>+               "path=%s gfid=%s: unlock failed on subvolume %s "</div><div class='add'>+               "with lock owner %s",</div><div class='add'>+               local-&gt;loc.path, loc_gfid_utoa(&amp;(local-&gt;loc)),</div><div class='add'>+               priv-&gt;children[child_index]-&gt;name,</div><div class='add'>+               lkowner_utoa(&amp;frame-&gt;root-&gt;lk_owner));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    afr_update_uninodelk(local, int_lock, child_index);</div><div class='add'>+</div><div class='add'>+    afr_unlock_common_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_unlock_inodelk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_unlock_inodelk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-        afr_private_t       *priv     = NULL;</div><div class='del'>-        struct gf_flock flock = {0,};</div><div class='del'>-        int call_count = 0;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-        priv     = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        flock.l_start = int_lock-&gt;flock.l_start;</div><div class='del'>-        flock.l_len   = int_lock-&gt;flock.l_len;</div><div class='del'>-        flock.l_type  = F_UNLCK;</div><div class='add'>+    flock.l_start = int_lock-&gt;flock.l_start;</div><div class='add'>+    flock.l_len = int_lock-&gt;flock.l_len;</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='ctx'> </div><div class='del'>-        call_count = afr_locked_nodes_count (int_lock-&gt;locked_nodes,</div><div class='del'>-                                             priv-&gt;child_count);</div><div class='add'>+    call_count = afr_locked_nodes_count(int_lock-&gt;locked_nodes,</div><div class='add'>+                                        priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        int_lock-&gt;lk_call_count = call_count;</div><div class='add'>+    int_lock-&gt;lk_call_count = call_count;</div><div class='ctx'> </div><div class='del'>-        if (!call_count) {</div><div class='del'>-                GF_ASSERT (!local-&gt;transaction.do_eager_unlock);</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "No internal locks unlocked");</div><div class='add'>+    if (!call_count) {</div><div class='add'>+        GF_ASSERT(!local-&gt;transaction.do_eager_unlock);</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "No internal locks unlocked");</div><div class='ctx'> </div><div class='del'>-                int_lock-&gt;lock_cbk (frame, this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        int_lock-&gt;lock_cbk(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if ((int_lock-&gt;locked_nodes[i] &amp; LOCKED_YES) != LOCKED_YES)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_unlock_inodelk_cbk,</div><div class='del'>-                                           (void *) (long)i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;finodelk,</div><div class='del'>-                                           int_lock-&gt;domain, local-&gt;fd,</div><div class='del'>-                                           F_SETLK, &amp;flock, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_unlock_inodelk_cbk,</div><div class='del'>-                                           (void *) (long)i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;inodelk,</div><div class='del'>-                                           int_lock-&gt;domain, &amp;local-&gt;loc,</div><div class='del'>-                                           F_SETLK, &amp;flock, NULL);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if ((int_lock-&gt;locked_nodes[i] &amp; LOCKED_YES) != LOCKED_YES)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!--call_count)</div><div class='del'>-                        break;</div><div class='add'>+        if (local-&gt;fd) {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_unlock_inodelk_cbk, (void *)(long)i,</div><div class='add'>+                priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;finodelk,</div><div class='add'>+                int_lock-&gt;domain, local-&gt;fd, F_SETLK, &amp;flock, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_unlock_inodelk_cbk, (void *)(long)i,</div><div class='add'>+                priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;inodelk,</div><div class='add'>+                int_lock-&gt;domain, &amp;local-&gt;loc, F_SETLK, &amp;flock, NULL);</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_unlock_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_unlock_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t         *local = NULL;</div><div class='del'>-        afr_private_t       *priv  = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        int32_t             child_index = 0;</div><div class='del'>-        int                 lockee_no   = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    int32_t child_index = 0;</div><div class='add'>+    int lockee_no = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        lockee_no = (int)((long) cookie) / priv-&gt;child_count;</div><div class='del'>-        child_index = (int) ((long) cookie) % priv-&gt;child_count;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    lockee_no = (int)((long)cookie) / priv-&gt;child_count;</div><div class='add'>+    child_index = (int)((long)cookie) % priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        AFR_MSG_ENTRY_UNLOCK_FAIL,</div><div class='del'>-                        "%s: unlock failed on %s", local-&gt;loc.path,</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, AFR_MSG_ENTRY_UNLOCK_FAIL,</div><div class='add'>+               "%s: unlock failed on %s", local-&gt;loc.path,</div><div class='add'>+               priv-&gt;children[child_index]-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        int_lock-&gt;lockee[lockee_no].locked_nodes[child_index] &amp;= LOCKED_NO;</div><div class='del'>-        afr_unlock_common_cbk (frame, cookie, this, op_ret, op_errno, NULL);</div><div class='add'>+    int_lock-&gt;lockee[lockee_no].locked_nodes[child_index] &amp;= LOCKED_NO;</div><div class='add'>+    afr_unlock_common_cbk(frame, cookie, this, op_ret, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_unlock_entrylk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_unlock_entrylk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t     *int_lock       = NULL;</div><div class='del'>-        afr_local_t             *local          = NULL;</div><div class='del'>-        afr_private_t           *priv           = NULL;</div><div class='del'>-        int                     call_count      = 0;</div><div class='del'>-        int                     index           = 0;</div><div class='del'>-        int                     lockee_no       = 0;</div><div class='del'>-        int                     copies          = 0;</div><div class='del'>-        int                     i               = -1;</div><div class='del'>-</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        copies   = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        call_count = afr_lockee_locked_nodes_count (int_lock);</div><div class='del'>-</div><div class='del'>-        int_lock-&gt;lk_call_count = call_count;</div><div class='del'>-</div><div class='del'>-        if (!call_count){</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "No internal locks unlocked");</div><div class='del'>-                int_lock-&gt;lock_cbk (frame, this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; int_lock-&gt;lockee_count * priv-&gt;child_count; i++) {</div><div class='del'>-                lockee_no = i / copies;</div><div class='del'>-                index     = i % copies;</div><div class='del'>-                if (int_lock-&gt;lockee[lockee_no].locked_nodes[index] &amp; LOCKED_YES) {</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_unlock_entrylk_cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[index],</div><div class='del'>-                                           priv-&gt;children[index]-&gt;fops-&gt;entrylk,</div><div class='del'>-                                           int_lock-&gt;domain,</div><div class='del'>-                                           &amp;int_lock-&gt;lockee[lockee_no].loc,</div><div class='del'>-                                           int_lock-&gt;lockee[lockee_no].basename,</div><div class='del'>-                                           ENTRYLK_UNLOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-</div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int lockee_no = 0;</div><div class='add'>+    int copies = 0;</div><div class='add'>+    int i = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    copies = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    call_count = afr_lockee_locked_nodes_count(int_lock);</div><div class='add'>+</div><div class='add'>+    int_lock-&gt;lk_call_count = call_count;</div><div class='add'>+</div><div class='add'>+    if (!call_count) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "No internal locks unlocked");</div><div class='add'>+        int_lock-&gt;lock_cbk(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; int_lock-&gt;lockee_count * priv-&gt;child_count; i++) {</div><div class='add'>+        lockee_no = i / copies;</div><div class='add'>+        index = i % copies;</div><div class='add'>+        if (int_lock-&gt;lockee[lockee_no].locked_nodes[index] &amp; LOCKED_YES) {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_unlock_entrylk_cbk, (void *)(long)i,</div><div class='add'>+                priv-&gt;children[index], priv-&gt;children[index]-&gt;fops-&gt;entrylk,</div><div class='add'>+                int_lock-&gt;domain, &amp;int_lock-&gt;lockee[lockee_no].loc,</div><div class='add'>+                int_lock-&gt;lockee[lockee_no].basename, ENTRYLK_UNLOCK,</div><div class='add'>+                ENTRYLK_WRLCK, NULL);</div><div class='add'>+</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_unlock_now (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_unlock_now(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (afr_is_inodelk_transaction(local-&gt;transaction.type))</div><div class='del'>-                afr_unlock_inodelk (frame, this);</div><div class='del'>-        else</div><div class='del'>-                afr_unlock_entrylk (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    if (afr_is_inodelk_transaction(local-&gt;transaction.type))</div><div class='add'>+        afr_unlock_inodelk(frame, this);</div><div class='add'>+    else</div><div class='add'>+        afr_unlock_entrylk(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t     *int_lock       = NULL;</div><div class='del'>-        afr_local_t             *local          = NULL;</div><div class='del'>-        afr_private_t           *priv           = NULL;</div><div class='del'>-        int                     cky             = (long) cookie;</div><div class='del'>-        int                     child_index     = 0;</div><div class='del'>-        int                     lockee_no       = 0;</div><div class='del'>-</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-        child_index = ((int)cky) % priv-&gt;child_count;</div><div class='del'>-        lockee_no   = ((int)cky) / priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        if (op_errno == ENOSYS) {</div><div class='del'>-                                /* return ENOTSUP */</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOSYS,</div><div class='del'>-                                        AFR_MSG_LOCK_XLATOR_NOT_LOADED,</div><div class='del'>-                                        "subvolume does not support locking. "</div><div class='del'>-                                        "please load features/locks xlator on server");</div><div class='del'>-                                local-&gt;op_ret = op_ret;</div><div class='del'>-                                int_lock-&gt;lock_op_ret = op_ret;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local-&gt;op_errno              = op_errno;</div><div class='del'>-                        int_lock-&gt;lock_op_errno      = op_errno;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		int_lock-&gt;lk_attempted_count++;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int cky = (long)cookie;</div><div class='add'>+    int child_index = 0;</div><div class='add'>+    int lockee_no = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    child_index = ((int)cky) % priv-&gt;child_count;</div><div class='add'>+    lockee_no = ((int)cky) / priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if (op_errno == ENOSYS) {</div><div class='add'>+                /* return ENOTSUP */</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOSYS,</div><div class='add'>+                       AFR_MSG_LOCK_XLATOR_NOT_LOADED,</div><div class='add'>+                       "subvolume does not support locking. "</div><div class='add'>+                       "please load features/locks xlator on server");</div><div class='add'>+                local-&gt;op_ret = op_ret;</div><div class='add'>+                int_lock-&gt;lock_op_ret = op_ret;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            int_lock-&gt;lock_op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if ((op_ret == -1) &amp;&amp;</div><div class='del'>-            (op_errno == ENOSYS)) {</div><div class='del'>-                afr_unlock_now (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION ||</div><div class='del'>-                            local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION) {</div><div class='del'>-                                int_lock-&gt;lockee[lockee_no].locked_nodes[child_index] |= LOCKED_YES;</div><div class='del'>-                                int_lock-&gt;lockee[lockee_no].locked_count++;</div><div class='del'>-                                int_lock-&gt;entrylk_lock_count++;</div><div class='del'>-                        } else {</div><div class='del'>-                                int_lock-&gt;locked_nodes[child_index] |= LOCKED_YES;</div><div class='del'>-                                int_lock-&gt;lock_count++;</div><div class='del'>-</div><div class='del'>-                                if (local-&gt;transaction.type ==</div><div class='del'>-                                    AFR_DATA_TRANSACTION) {</div><div class='del'>-                                        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-                                        {</div><div class='del'>-                                                local-&gt;inode_ctx-&gt;lock_count++;</div><div class='del'>-                                        }</div><div class='del'>-                                        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        int_lock-&gt;lk_attempted_count++;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; (op_errno == ENOSYS)) {</div><div class='add'>+        afr_unlock_now(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION ||</div><div class='add'>+                local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION) {</div><div class='add'>+                int_lock-&gt;lockee[lockee_no]</div><div class='add'>+                    .locked_nodes[child_index] |= LOCKED_YES;</div><div class='add'>+                int_lock-&gt;lockee[lockee_no].locked_count++;</div><div class='add'>+                int_lock-&gt;entrylk_lock_count++;</div><div class='add'>+            } else {</div><div class='add'>+                int_lock-&gt;locked_nodes[child_index] |= LOCKED_YES;</div><div class='add'>+                int_lock-&gt;lock_count++;</div><div class='add'>+</div><div class='add'>+                if (local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='add'>+                    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+                    {</div><div class='add'>+                        local-&gt;inode_ctx-&gt;lock_count++;</div><div class='add'>+                    }</div><div class='add'>+                    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'>                 }</div><div class='del'>-                afr_lock_blocking (frame, this, cky + 1);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        afr_lock_blocking(frame, this, cky + 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_blocking_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_blocking_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_lock_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    afr_lock_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_blocking_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_blocking_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_lock_cbk (frame, cookie, this, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_lock_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_is_entrylk (afr_transaction_type trans_type)</div><div class='add'>+afr_is_entrylk(afr_transaction_type trans_type)</div><div class='ctx'> {</div><div class='del'>-        if (afr_is_inodelk_transaction (trans_type))</div><div class='del'>-                return _gf_false;</div><div class='del'>-        return _gf_true;</div><div class='add'>+    if (afr_is_inodelk_transaction(trans_type))</div><div class='add'>+        return _gf_false;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-_is_lock_wind_needed (afr_local_t *local, int child_index)</div><div class='add'>+_is_lock_wind_needed(afr_local_t *local, int child_index)</div><div class='ctx'> {</div><div class='del'>-        if (!local-&gt;child_up[child_index])</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!local-&gt;child_up[child_index])</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> afr_log_entry_locks_failure(xlator_t *this, afr_local_t *local,</div><div class='ctx'>                             afr_internal_lock_t *int_lock)</div><div class='ctx'> {</div><div class='del'>-        const char *fop = NULL;</div><div class='del'>-        char *pargfid = NULL;</div><div class='del'>-        const char *name = NULL;</div><div class='add'>+    const char *fop = NULL;</div><div class='add'>+    char *pargfid = NULL;</div><div class='add'>+    const char *name = NULL;</div><div class='ctx'> </div><div class='del'>-        fop = gf_fop_list[local-&gt;op];</div><div class='add'>+    fop = gf_fop_list[local-&gt;op];</div><div class='ctx'> </div><div class='del'>-        switch (local-&gt;op) {</div><div class='add'>+    switch (local-&gt;op) {</div><div class='ctx'>         case GF_FOP_LINK:</div><div class='del'>-                pargfid = uuid_utoa(local-&gt;newloc.pargfid);</div><div class='del'>-                name = local-&gt;newloc.name;</div><div class='del'>-                break;</div><div class='add'>+            pargfid = uuid_utoa(local-&gt;newloc.pargfid);</div><div class='add'>+            name = local-&gt;newloc.name;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                pargfid = uuid_utoa(local-&gt;loc.pargfid);</div><div class='del'>-                name = local-&gt;loc.name;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_BLOCKING_LKS_FAILED,</div><div class='del'>-                "Unable to obtain sufficient blocking entry locks on at least "</div><div class='del'>-                "one child while attempting %s on {pgfid:%s, name:%s}.", fop,</div><div class='del'>-                pargfid, name);</div><div class='add'>+            pargfid = uuid_utoa(local-&gt;loc.pargfid);</div><div class='add'>+            name = local-&gt;loc.name;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_BLOCKING_LKS_FAILED,</div><div class='add'>+           "Unable to obtain sufficient blocking entry locks on at least "</div><div class='add'>+           "one child while attempting %s on {pgfid:%s, name:%s}.",</div><div class='add'>+           fop, pargfid, name);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_blocking_locks_count_sufficient (call_frame_t *frame, xlator_t *this)</div><div class='add'>+is_blocking_locks_count_sufficient(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        gf_boolean_t is_entrylk = _gf_false;</div><div class='del'>-        int child = 0;</div><div class='del'>-        int nlockee = 0;</div><div class='del'>-        int lockee_count = 0;</div><div class='del'>-        gf_boolean_t ret = _gf_true;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-        lockee_count = int_lock-&gt;lockee_count;</div><div class='del'>-        is_entrylk = afr_is_entrylk (local-&gt;transaction.type);</div><div class='del'>-</div><div class='del'>-        if (!is_entrylk) {</div><div class='del'>-                if (int_lock-&gt;lock_count == 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_BLOCKING_LKS_FAILED, "Unable to obtain "</div><div class='del'>-                                "blocking inode lock on even one child for "</div><div class='del'>-                                "gfid:%s.", uuid_utoa (local-&gt;inode-&gt;gfid));</div><div class='del'>-                        return _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        /*inodelk succeeded on at least one child. */</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    gf_boolean_t is_entrylk = _gf_false;</div><div class='add'>+    int child = 0;</div><div class='add'>+    int nlockee = 0;</div><div class='add'>+    int lockee_count = 0;</div><div class='add'>+    gf_boolean_t ret = _gf_true;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    lockee_count = int_lock-&gt;lockee_count;</div><div class='add'>+    is_entrylk = afr_is_entrylk(local-&gt;transaction.type);</div><div class='add'>+</div><div class='add'>+    if (!is_entrylk) {</div><div class='add'>+        if (int_lock-&gt;lock_count == 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_BLOCKING_LKS_FAILED,</div><div class='add'>+                   "Unable to obtain "</div><div class='add'>+                   "blocking inode lock on even one child for "</div><div class='add'>+                   "gfid:%s.",</div><div class='add'>+                   uuid_utoa(local-&gt;inode-&gt;gfid));</div><div class='add'>+            return _gf_false;</div><div class='ctx'>         } else {</div><div class='del'>-                if (int_lock-&gt;entrylk_lock_count == 0) {</div><div class='del'>-                        afr_log_entry_locks_failure (this, local, int_lock);</div><div class='del'>-                        return _gf_false;</div><div class='del'>-                }</div><div class='del'>-                /* For FOPS that take multiple sets of locks (mkdir, rename),</div><div class='del'>-                 * there must be at least one brick on which the locks from</div><div class='del'>-                 * all lock sets were successful. */</div><div class='del'>-                for (child = 0; child &lt; priv-&gt;child_count; child++) {</div><div class='del'>-                        ret = _gf_true;</div><div class='del'>-                        for (nlockee = 0; nlockee &lt; lockee_count; nlockee++) {</div><div class='del'>-                                if (!(int_lock-&gt;lockee[nlockee].locked_nodes[child] &amp; LOCKED_YES))</div><div class='del'>-                                        ret = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                        if (ret)</div><div class='del'>-                                return ret;</div><div class='del'>-                }</div><div class='del'>-                if (!ret)</div><div class='del'>-                        afr_log_entry_locks_failure (this, local, int_lock);</div><div class='add'>+            /*inodelk succeeded on at least one child. */</div><div class='add'>+            return _gf_true;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    } else {</div><div class='add'>+        if (int_lock-&gt;entrylk_lock_count == 0) {</div><div class='add'>+            afr_log_entry_locks_failure(this, local, int_lock);</div><div class='add'>+            return _gf_false;</div><div class='add'>+        }</div><div class='add'>+        /* For FOPS that take multiple sets of locks (mkdir, rename),</div><div class='add'>+         * there must be at least one brick on which the locks from</div><div class='add'>+         * all lock sets were successful. */</div><div class='add'>+        for (child = 0; child &lt; priv-&gt;child_count; child++) {</div><div class='add'>+            ret = _gf_true;</div><div class='add'>+            for (nlockee = 0; nlockee &lt; lockee_count; nlockee++) {</div><div class='add'>+                if (!(int_lock-&gt;lockee[nlockee].locked_nodes[child] &amp;</div><div class='add'>+                      LOCKED_YES))</div><div class='add'>+                    ret = _gf_false;</div><div class='add'>+            }</div><div class='add'>+            if (ret)</div><div class='add'>+                return ret;</div><div class='add'>+        }</div><div class='add'>+        if (!ret)</div><div class='add'>+            afr_log_entry_locks_failure(this, local, int_lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lock_blocking (call_frame_t *frame, xlator_t *this, int cookie)</div><div class='add'>+afr_lock_blocking(call_frame_t *frame, xlator_t *this, int cookie)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock    = NULL;</div><div class='del'>-        afr_local_t         *local       = NULL;</div><div class='del'>-        afr_private_t       *priv        = NULL;</div><div class='del'>-        struct gf_flock flock = {0,};</div><div class='del'>-        uint64_t ctx = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int child_index = 0;</div><div class='del'>-        int lockee_no   = 0;</div><div class='del'>-        gf_boolean_t is_entrylk = _gf_false;</div><div class='del'>-</div><div class='del'>-        local         = frame-&gt;local;</div><div class='del'>-        int_lock      = &amp;local-&gt;internal_lock;</div><div class='del'>-        priv          = this-&gt;private;</div><div class='del'>-        child_index   = cookie % priv-&gt;child_count;</div><div class='del'>-        lockee_no     = cookie / priv-&gt;child_count;</div><div class='del'>-        is_entrylk    = afr_is_entrylk (local-&gt;transaction.type);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (!is_entrylk) {</div><div class='del'>-                flock.l_start = int_lock-&gt;flock.l_start;</div><div class='del'>-                flock.l_len   = int_lock-&gt;flock.l_len;</div><div class='del'>-                flock.l_type  = int_lock-&gt;flock.l_type;</div><div class='del'>-        }</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int child_index = 0;</div><div class='add'>+    int lockee_no = 0;</div><div class='add'>+    gf_boolean_t is_entrylk = _gf_false;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    child_index = cookie % priv-&gt;child_count;</div><div class='add'>+    lockee_no = cookie / priv-&gt;child_count;</div><div class='add'>+    is_entrylk = afr_is_entrylk(local-&gt;transaction.type);</div><div class='add'>+</div><div class='add'>+    if (!is_entrylk) {</div><div class='add'>+        flock.l_start = int_lock-&gt;flock.l_start;</div><div class='add'>+        flock.l_len = int_lock-&gt;flock.l_len;</div><div class='add'>+        flock.l_type = int_lock-&gt;flock.l_type;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                ret = fd_ctx_get (local-&gt;fd, this, &amp;ctx);</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        ret = fd_ctx_get(local-&gt;fd, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                AFR_MSG_FD_CTX_GET_FAILED,</div><div class='del'>-                                "unable to get fd ctx for fd=%p",</div><div class='del'>-                                local-&gt;fd);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_FD_CTX_GET_FAILED,</div><div class='add'>+                   "unable to get fd ctx for fd=%p", local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-                        local-&gt;op_ret           = -1;</div><div class='del'>-                        int_lock-&gt;lock_op_ret   = -1;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            int_lock-&gt;lock_op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                        afr_unlock_now (frame, this);</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='ctx'> </div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (int_lock-&gt;lk_expected_count == int_lock-&gt;lk_attempted_count) {</div><div class='del'>-                if (!is_blocking_locks_count_sufficient (frame, this)) {</div><div class='del'>-</div><div class='del'>-                        local-&gt;op_ret           = -1;</div><div class='del'>-                        int_lock-&gt;lock_op_ret   = -1;</div><div class='add'>+    if (int_lock-&gt;lk_expected_count == int_lock-&gt;lk_attempted_count) {</div><div class='add'>+        if (!is_blocking_locks_count_sufficient(frame, this)) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            int_lock-&gt;lock_op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                        afr_unlock_now(frame, this);</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='ctx'> </div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (int_lock-&gt;lk_expected_count == int_lock-&gt;lk_attempted_count) {</div><div class='del'>-                /* we're done locking */</div><div class='add'>+    if (int_lock-&gt;lk_expected_count == int_lock-&gt;lk_attempted_count) {</div><div class='add'>+        /* we're done locking */</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "we're done locking");</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "we're done locking");</div><div class='ctx'> </div><div class='del'>-                int_lock-&gt;lock_op_ret = 0;</div><div class='del'>-                int_lock-&gt;lock_cbk (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        int_lock-&gt;lock_op_ret = 0;</div><div class='add'>+        int_lock-&gt;lock_cbk(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!_is_lock_wind_needed (local, child_index)) {</div><div class='del'>-                afr_lock_blocking (frame, this, cookie + 1);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!_is_lock_wind_needed(local, child_index)) {</div><div class='add'>+        afr_lock_blocking(frame, this, cookie + 1);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (local-&gt;transaction.type) {</div><div class='add'>+    switch (local-&gt;transaction.type) {</div><div class='ctx'>         case AFR_DATA_TRANSACTION:</div><div class='ctx'>         case AFR_METADATA_TRANSACTION:</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_blocking_inodelk_cbk,</div><div class='del'>-                                           (void *) (long) child_index,</div><div class='del'>-                                           priv-&gt;children[child_index],</div><div class='del'>-                                           priv-&gt;children[child_index]-&gt;fops-&gt;finodelk,</div><div class='del'>-                                           int_lock-&gt;domain, local-&gt;fd,</div><div class='del'>-                                           F_SETLKW, &amp;flock, NULL);</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_blocking_inodelk_cbk,</div><div class='del'>-                                           (void *) (long) child_index,</div><div class='del'>-                                           priv-&gt;children[child_index],</div><div class='del'>-                                           priv-&gt;children[child_index]-&gt;fops-&gt;inodelk,</div><div class='del'>-                                           int_lock-&gt;domain, &amp;local-&gt;loc,</div><div class='del'>-                                           F_SETLKW, &amp;flock, NULL);</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;fd) {</div><div class='add'>+                STACK_WIND_COOKIE(</div><div class='add'>+                    frame, afr_blocking_inodelk_cbk, (void *)(long)child_index,</div><div class='add'>+                    priv-&gt;children[child_index],</div><div class='add'>+                    priv-&gt;children[child_index]-&gt;fops-&gt;finodelk,</div><div class='add'>+                    int_lock-&gt;domain, local-&gt;fd, F_SETLKW, &amp;flock, NULL);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            } else {</div><div class='add'>+                STACK_WIND_COOKIE(</div><div class='add'>+                    frame, afr_blocking_inodelk_cbk, (void *)(long)child_index,</div><div class='add'>+                    priv-&gt;children[child_index],</div><div class='add'>+                    priv-&gt;children[child_index]-&gt;fops-&gt;inodelk,</div><div class='add'>+                    int_lock-&gt;domain, &amp;local-&gt;loc, F_SETLKW, &amp;flock, NULL);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='ctx'>         case AFR_ENTRY_TRANSACTION:</div><div class='del'>-                /*Accounting for child_index increments on 'down'</div><div class='del'>-                 *and 'fd-less' children */</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_blocking_entrylk_cbk,</div><div class='del'>-                                           (void *) (long) cookie,</div><div class='del'>-                                           priv-&gt;children[child_index],</div><div class='del'>-                                           priv-&gt;children[child_index]-&gt;fops-&gt;fentrylk,</div><div class='del'>-                                           int_lock-&gt;domain, local-&gt;fd,</div><div class='del'>-                                           int_lock-&gt;lockee[lockee_no].basename,</div><div class='del'>-                                           ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_blocking_entrylk_cbk,</div><div class='del'>-                                           (void *) (long) cookie,</div><div class='del'>-                                           priv-&gt;children[child_index],</div><div class='del'>-                                           priv-&gt;children[child_index]-&gt;fops-&gt;entrylk,</div><div class='del'>-                                           int_lock-&gt;domain,</div><div class='del'>-                                           &amp;int_lock-&gt;lockee[lockee_no].loc,</div><div class='del'>-                                           int_lock-&gt;lockee[lockee_no].basename,</div><div class='del'>-                                           ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+            /*Accounting for child_index increments on 'down'</div><div class='add'>+             *and 'fd-less' children */</div><div class='add'>+</div><div class='add'>+            if (local-&gt;fd) {</div><div class='add'>+                STACK_WIND_COOKIE(frame, afr_blocking_entrylk_cbk,</div><div class='add'>+                                  (void *)(long)cookie,</div><div class='add'>+                                  priv-&gt;children[child_index],</div><div class='add'>+                                  priv-&gt;children[child_index]-&gt;fops-&gt;fentrylk,</div><div class='add'>+                                  int_lock-&gt;domain, local-&gt;fd,</div><div class='add'>+                                  int_lock-&gt;lockee[lockee_no].basename,</div><div class='add'>+                                  ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='add'>+            } else {</div><div class='add'>+                STACK_WIND_COOKIE(</div><div class='add'>+                    frame, afr_blocking_entrylk_cbk, (void *)(long)cookie,</div><div class='add'>+                    priv-&gt;children[child_index],</div><div class='add'>+                    priv-&gt;children[child_index]-&gt;fops-&gt;entrylk,</div><div class='add'>+                    int_lock-&gt;domain, &amp;int_lock-&gt;lockee[lockee_no].loc,</div><div class='add'>+                    int_lock-&gt;lockee[lockee_no].basename, ENTRYLK_LOCK,</div><div class='add'>+                    ENTRYLK_WRLCK, NULL);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_blocking_lock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_blocking_lock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-        afr_private_t       *priv     = NULL;</div><div class='del'>-        int                  up_count = 0;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int up_count = 0;</div><div class='ctx'> </div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        switch (local-&gt;transaction.type) {</div><div class='add'>+    switch (local-&gt;transaction.type) {</div><div class='ctx'>         case AFR_DATA_TRANSACTION:</div><div class='ctx'>         case AFR_METADATA_TRANSACTION:</div><div class='del'>-                initialize_inodelk_variables (frame, this);</div><div class='del'>-                break;</div><div class='add'>+            initialize_inodelk_variables(frame, this);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='ctx'>         case AFR_ENTRY_TRANSACTION:</div><div class='del'>-                up_count = AFR_COUNT (local-&gt;child_up, priv-&gt;child_count);</div><div class='del'>-                int_lock-&gt;lk_call_count = int_lock-&gt;lk_expected_count</div><div class='del'>-                                        = (int_lock-&gt;lockee_count *</div><div class='del'>-                                           up_count);</div><div class='del'>-                initialize_entrylk_variables (frame, this);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            up_count = AFR_COUNT(local-&gt;child_up, priv-&gt;child_count);</div><div class='add'>+            int_lock-&gt;lk_call_count = int_lock-&gt;lk_expected_count =</div><div class='add'>+                (int_lock-&gt;lockee_count * up_count);</div><div class='add'>+            initialize_entrylk_variables(frame, this);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        afr_lock_blocking (frame, this, 0);</div><div class='add'>+    afr_lock_blocking(frame, this, 0);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-afr_nonblocking_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_nonblocking_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-        int call_count          = 0;</div><div class='del'>-        int child_index         = (long) cookie;</div><div class='del'>-        int copies              = 0;</div><div class='del'>-        int index               = 0;</div><div class='del'>-        int lockee_no           = 0;</div><div class='del'>-        afr_private_t       *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        copies = priv-&gt;child_count;</div><div class='del'>-        index = child_index % copies;</div><div class='del'>-        lockee_no = child_index / copies;</div><div class='del'>-</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;frame-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		if (op_ret &lt; 0 ) {</div><div class='del'>-			if (op_errno == ENOSYS) {</div><div class='del'>-                        /* return ENOTSUP */</div><div class='del'>-			        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        ENOSYS, AFR_MSG_LOCK_XLATOR_NOT_LOADED,</div><div class='del'>-                                        "subvolume does not support "</div><div class='del'>-                                        "locking. please load features/locks"</div><div class='del'>-                                        " xlator on server");</div><div class='del'>-				local-&gt;op_ret         = op_ret;</div><div class='del'>-				int_lock-&gt;lock_op_ret = op_ret;</div><div class='del'>-</div><div class='del'>-				int_lock-&gt;lock_op_errno      = op_errno;</div><div class='del'>-				local-&gt;op_errno              = op_errno;</div><div class='del'>-			}</div><div class='del'>-		} else if (op_ret == 0) {</div><div class='del'>-			int_lock-&gt;lockee[lockee_no].locked_nodes[index] |= \</div><div class='del'>-				LOCKED_YES;</div><div class='del'>-			int_lock-&gt;lockee[lockee_no].locked_count++;</div><div class='del'>-			int_lock-&gt;entrylk_lock_count++;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                call_count = --int_lock-&gt;lk_call_count;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int copies = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int lockee_no = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    copies = priv-&gt;child_count;</div><div class='add'>+    index = child_index % copies;</div><div class='add'>+    lockee_no = child_index / copies;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            if (op_errno == ENOSYS) {</div><div class='add'>+                /* return ENOTSUP */</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOSYS,</div><div class='add'>+                       AFR_MSG_LOCK_XLATOR_NOT_LOADED,</div><div class='add'>+                       "subvolume does not support "</div><div class='add'>+                       "locking. please load features/locks"</div><div class='add'>+                       " xlator on server");</div><div class='add'>+                local-&gt;op_ret = op_ret;</div><div class='add'>+                int_lock-&gt;lock_op_ret = op_ret;</div><div class='add'>+</div><div class='add'>+                int_lock-&gt;lock_op_errno = op_errno;</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            }</div><div class='add'>+        } else if (op_ret == 0) {</div><div class='add'>+            int_lock-&gt;lockee[lockee_no].locked_nodes[index] |= LOCKED_YES;</div><div class='add'>+            int_lock-&gt;lockee[lockee_no].locked_count++;</div><div class='add'>+            int_lock-&gt;entrylk_lock_count++;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "Last locking reply received");</div><div class='del'>-                /* all locks successful. Proceed to call FOP */</div><div class='del'>-                if (int_lock-&gt;entrylk_lock_count ==</div><div class='del'>-                                int_lock-&gt;lk_expected_count) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "All servers locked. Calling the cbk");</div><div class='del'>-                        int_lock-&gt;lock_op_ret = 0;</div><div class='del'>-                        int_lock-&gt;lock_cbk (frame, this);</div><div class='del'>-                }</div><div class='del'>-                /* Not all locks were successful. Unlock and try locking</div><div class='del'>-                   again, this time with serially blocking locks */</div><div class='del'>-                else {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "%d servers locked. Trying again "</div><div class='del'>-                                      "with blocking calls",</div><div class='del'>-                                      int_lock-&gt;lock_count);</div><div class='del'>-</div><div class='del'>-                        afr_unlock_now(frame, this);</div><div class='del'>-                }</div><div class='add'>+</div><div class='add'>+        call_count = --int_lock-&gt;lk_call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Last locking reply received");</div><div class='add'>+        /* all locks successful. Proceed to call FOP */</div><div class='add'>+        if (int_lock-&gt;entrylk_lock_count == int_lock-&gt;lk_expected_count) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "All servers locked. Calling the cbk");</div><div class='add'>+            int_lock-&gt;lock_op_ret = 0;</div><div class='add'>+            int_lock-&gt;lock_cbk(frame, this);</div><div class='add'>+        }</div><div class='add'>+        /* Not all locks were successful. Unlock and try locking</div><div class='add'>+           again, this time with serially blocking locks */</div><div class='add'>+        else {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                         "%d servers locked. Trying again "</div><div class='add'>+                         "with blocking calls",</div><div class='add'>+                         int_lock-&gt;lock_count);</div><div class='add'>+</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_nonblocking_entrylk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_nonblocking_entrylk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock   = NULL;</div><div class='del'>-        afr_local_t         *local      = NULL;</div><div class='del'>-        afr_private_t       *priv       = NULL;</div><div class='del'>-        afr_fd_ctx_t        *fd_ctx     = NULL;</div><div class='del'>-        int                 copies      = 0;</div><div class='del'>-        int                 index       = 0;</div><div class='del'>-        int                 lockee_no   = 0;</div><div class='del'>-        int32_t             call_count  = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        copies = priv-&gt;child_count;</div><div class='del'>-        initialize_entrylk_variables (frame, this);</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    int copies = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int lockee_no = 0;</div><div class='add'>+    int32_t call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    copies = priv-&gt;child_count;</div><div class='add'>+    initialize_entrylk_variables(frame, this);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        fd_ctx = afr_fd_ctx_get(local-&gt;fd, this);</div><div class='add'>+        if (!fd_ctx) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_FD_CTX_GET_FAILED,</div><div class='add'>+                   "unable to get fd ctx for fd=%p", local-&gt;fd);</div><div class='add'>+</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            int_lock-&gt;lock_op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='add'>+            int_lock-&gt;lock_op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                fd_ctx = afr_fd_ctx_get (local-&gt;fd, this);</div><div class='del'>-                if (!fd_ctx) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                AFR_MSG_FD_CTX_GET_FAILED,</div><div class='del'>-                                "unable to get fd ctx for fd=%p",</div><div class='del'>-                                local-&gt;fd);</div><div class='del'>-</div><div class='del'>-                        local-&gt;op_ret           = -1;</div><div class='del'>-                        int_lock-&gt;lock_op_ret   = -1;</div><div class='del'>-                        local-&gt;op_errno         = EINVAL;</div><div class='del'>-                        int_lock-&gt;lock_op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-			afr_unlock_now (frame, this);</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+        call_count = int_lock-&gt;lockee_count * internal_lock_count(frame, this);</div><div class='add'>+        int_lock-&gt;lk_call_count = call_count;</div><div class='add'>+        int_lock-&gt;lk_expected_count = call_count;</div><div class='ctx'> </div><div class='del'>-                call_count = int_lock-&gt;lockee_count * internal_lock_count (frame, this);</div><div class='del'>-                int_lock-&gt;lk_call_count = call_count;</div><div class='del'>-                int_lock-&gt;lk_expected_count = call_count;</div><div class='add'>+        if (!call_count) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_INFO_COMMON,</div><div class='add'>+                   "fd not open on any subvolumes. aborting.");</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!call_count) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                AFR_MSG_INFO_COMMON,</div><div class='del'>-                                "fd not open on any subvolumes. aborting.");</div><div class='del'>-                        afr_unlock_now (frame, this);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        /* Send non-blocking entrylk calls only on up children</div><div class='add'>+           and where the fd has been opened */</div><div class='add'>+        for (i = 0; i &lt; int_lock-&gt;lockee_count * priv-&gt;child_count; i++) {</div><div class='add'>+            index = i % copies;</div><div class='add'>+            lockee_no = i / copies;</div><div class='add'>+            if (local-&gt;child_up[index]) {</div><div class='add'>+                STACK_WIND_COOKIE(frame, afr_nonblocking_entrylk_cbk,</div><div class='add'>+                                  (void *)(long)i, priv-&gt;children[index],</div><div class='add'>+                                  priv-&gt;children[index]-&gt;fops-&gt;fentrylk,</div><div class='add'>+                                  this-&gt;name, local-&gt;fd,</div><div class='add'>+                                  int_lock-&gt;lockee[lockee_no].basename,</div><div class='add'>+                                  ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+                if (!--call_count)</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        call_count = int_lock-&gt;lockee_count * internal_lock_count(frame, this);</div><div class='add'>+        int_lock-&gt;lk_call_count = call_count;</div><div class='add'>+        int_lock-&gt;lk_expected_count = call_count;</div><div class='ctx'> </div><div class='del'>-                /* Send non-blocking entrylk calls only on up children</div><div class='del'>-                   and where the fd has been opened */</div><div class='del'>-                for (i = 0; i &lt; int_lock-&gt;lockee_count*priv-&gt;child_count; i++) {</div><div class='del'>-                        index = i%copies;</div><div class='del'>-                        lockee_no = i/copies;</div><div class='del'>-                        if (local-&gt;child_up[index]) {</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_nonblocking_entrylk_cbk,</div><div class='del'>-                                                   (void *) (long) i,</div><div class='del'>-                                                   priv-&gt;children[index],</div><div class='del'>-                                                   priv-&gt;children[index]-&gt;fops-&gt;fentrylk,</div><div class='del'>-                                                   this-&gt;name, local-&gt;fd,</div><div class='del'>-                                                   int_lock-&gt;lockee[lockee_no].basename,</div><div class='del'>-                                                   ENTRYLK_LOCK_NB, ENTRYLK_WRLCK,</div><div class='del'>-                                                   NULL);</div><div class='del'>-                                if (!--call_count)</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                call_count = int_lock-&gt;lockee_count * internal_lock_count (frame, this);</div><div class='del'>-                int_lock-&gt;lk_call_count = call_count;</div><div class='del'>-                int_lock-&gt;lk_expected_count = call_count;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; int_lock-&gt;lockee_count*priv-&gt;child_count; i++) {</div><div class='del'>-                        index = i%copies;</div><div class='del'>-                        lockee_no = i/copies;</div><div class='del'>-                        if (local-&gt;child_up[index]) {</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_nonblocking_entrylk_cbk,</div><div class='del'>-                                                   (void *) (long) i,</div><div class='del'>-                                                   priv-&gt;children[index],</div><div class='del'>-                                                   priv-&gt;children[index]-&gt;fops-&gt;entrylk,</div><div class='del'>-                                                   this-&gt;name, &amp;int_lock-&gt;lockee[lockee_no].loc,</div><div class='del'>-                                                   int_lock-&gt;lockee[lockee_no].basename,</div><div class='del'>-                                                   ENTRYLK_LOCK_NB, ENTRYLK_WRLCK,</div><div class='del'>-                                                   NULL);</div><div class='del'>-</div><div class='del'>-                                if (!--call_count)</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        for (i = 0; i &lt; int_lock-&gt;lockee_count * priv-&gt;child_count; i++) {</div><div class='add'>+            index = i % copies;</div><div class='add'>+            lockee_no = i / copies;</div><div class='add'>+            if (local-&gt;child_up[index]) {</div><div class='add'>+                STACK_WIND_COOKIE(frame, afr_nonblocking_entrylk_cbk,</div><div class='add'>+                                  (void *)(long)i, priv-&gt;children[index],</div><div class='add'>+                                  priv-&gt;children[index]-&gt;fops-&gt;entrylk,</div><div class='add'>+                                  this-&gt;name, &amp;int_lock-&gt;lockee[lockee_no].loc,</div><div class='add'>+                                  int_lock-&gt;lockee[lockee_no].basename,</div><div class='add'>+                                  ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+</div><div class='add'>+                if (!--call_count)</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_nonblocking_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+afr_nonblocking_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock    = NULL;</div><div class='del'>-        afr_local_t         *local       = NULL;</div><div class='del'>-        int                  call_count  = 0;</div><div class='del'>-        int                  child_index = (long) cookie;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0 &amp;&amp; local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='del'>-                LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        local-&gt;inode_ctx-&gt;lock_count++;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    if (op_ret == 0 &amp;&amp; local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='add'>+        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            local-&gt;inode_ctx-&gt;lock_count++;</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-		if (op_ret &lt; 0) {</div><div class='del'>-			if (op_errno == ENOSYS) {</div><div class='del'>-				/* return ENOTSUP */</div><div class='del'>-		                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOSYS,</div><div class='del'>-                                        AFR_MSG_LOCK_XLATOR_NOT_LOADED,</div><div class='del'>-					"subvolume does not support "</div><div class='del'>-                                        "locking. please load features/locks"</div><div class='del'>-                                        " xlator on server");</div><div class='del'>-				local-&gt;op_ret                = op_ret;</div><div class='del'>-				int_lock-&gt;lock_op_ret        = op_ret;</div><div class='del'>-				int_lock-&gt;lock_op_errno      = op_errno;</div><div class='del'>-				local-&gt;op_errno              = op_errno;</div><div class='del'>-			}</div><div class='del'>-		} else {</div><div class='del'>-			int_lock-&gt;locked_nodes[child_index] |= LOCKED_YES;</div><div class='del'>-			int_lock-&gt;lock_count++;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                call_count = --int_lock-&gt;lk_call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            if (op_errno == ENOSYS) {</div><div class='add'>+                /* return ENOTSUP */</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOSYS,</div><div class='add'>+                       AFR_MSG_LOCK_XLATOR_NOT_LOADED,</div><div class='add'>+                       "subvolume does not support "</div><div class='add'>+                       "locking. please load features/locks"</div><div class='add'>+                       " xlator on server");</div><div class='add'>+                local-&gt;op_ret = op_ret;</div><div class='add'>+                int_lock-&gt;lock_op_ret = op_ret;</div><div class='add'>+                int_lock-&gt;lock_op_errno = op_errno;</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            int_lock-&gt;locked_nodes[child_index] |= LOCKED_YES;</div><div class='add'>+            int_lock-&gt;lock_count++;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "Last inode locking reply received");</div><div class='del'>-                /* all locks successful. Proceed to call FOP */</div><div class='del'>-                if (int_lock-&gt;lock_count == int_lock-&gt;lk_expected_count) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "All servers locked. Calling the cbk");</div><div class='del'>-                        int_lock-&gt;lock_op_ret = 0;</div><div class='del'>-                        int_lock-&gt;lock_cbk (frame, this);</div><div class='del'>-                }</div><div class='del'>-                /* Not all locks were successful. Unlock and try locking</div><div class='del'>-                   again, this time with serially blocking locks */</div><div class='del'>-                else {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "%d servers locked. "</div><div class='del'>-                                      "Trying again with blocking calls",</div><div class='del'>-                                      int_lock-&gt;lock_count);</div><div class='del'>-</div><div class='del'>-                        afr_unlock_now(frame, this);</div><div class='del'>-                }</div><div class='add'>+</div><div class='add'>+        call_count = --int_lock-&gt;lk_call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Last inode locking reply received");</div><div class='add'>+        /* all locks successful. Proceed to call FOP */</div><div class='add'>+        if (int_lock-&gt;lock_count == int_lock-&gt;lk_expected_count) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "All servers locked. Calling the cbk");</div><div class='add'>+            int_lock-&gt;lock_op_ret = 0;</div><div class='add'>+            int_lock-&gt;lock_cbk(frame, this);</div><div class='add'>+        }</div><div class='add'>+        /* Not all locks were successful. Unlock and try locking</div><div class='add'>+           again, this time with serially blocking locks */</div><div class='add'>+        else {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                         "%d servers locked. "</div><div class='add'>+                         "Trying again with blocking calls",</div><div class='add'>+                         int_lock-&gt;lock_count);</div><div class='add'>+</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_nonblocking_inodelk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_nonblocking_inodelk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-        afr_private_t       *priv     = NULL;</div><div class='del'>-        afr_fd_ctx_t        *fd_ctx   = NULL;</div><div class='del'>-        int32_t             call_count = 0;</div><div class='del'>-        int                 i          = 0;</div><div class='del'>-        int                 ret        = 0;</div><div class='del'>-</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        initialize_inodelk_variables (frame, this);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                fd_ctx = afr_fd_ctx_get (local-&gt;fd, this);</div><div class='del'>-                if (!fd_ctx) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                AFR_MSG_FD_CTX_GET_FAILED,</div><div class='del'>-                                "unable to get fd ctx for fd=%p",</div><div class='del'>-                                local-&gt;fd);</div><div class='del'>-</div><div class='del'>-                        local-&gt;op_ret           = -1;</div><div class='del'>-                        int_lock-&gt;lock_op_ret   = -1;</div><div class='del'>-                        local-&gt;op_errno         = EINVAL;</div><div class='del'>-                        int_lock-&gt;lock_op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-			afr_unlock_now (frame, this);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    int32_t call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    initialize_inodelk_variables(frame, this);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        fd_ctx = afr_fd_ctx_get(local-&gt;fd, this);</div><div class='add'>+        if (!fd_ctx) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_FD_CTX_GET_FAILED,</div><div class='add'>+                   "unable to get fd ctx for fd=%p", local-&gt;fd);</div><div class='add'>+</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            int_lock-&gt;lock_op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='add'>+            int_lock-&gt;lock_op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+            afr_unlock_now(frame, this);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_count = internal_lock_count (frame, this);</div><div class='del'>-        int_lock-&gt;lk_call_count = call_count;</div><div class='del'>-        int_lock-&gt;lk_expected_count = call_count;</div><div class='add'>+    call_count = internal_lock_count(frame, this);</div><div class='add'>+    int_lock-&gt;lk_call_count = call_count;</div><div class='add'>+    int_lock-&gt;lk_expected_count = call_count;</div><div class='ctx'> </div><div class='del'>-        if (!call_count) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        AFR_MSG_SUBVOLS_DOWN,</div><div class='del'>-                        "All bricks are down, aborting.");</div><div class='del'>-                afr_unlock_now (frame, this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!call_count) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SUBVOLS_DOWN,</div><div class='add'>+               "All bricks are down, aborting.");</div><div class='add'>+        afr_unlock_now(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Send non-blocking inodelk calls only on up children</div><div class='del'>-           and where the fd has been opened */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;child_up[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_nonblocking_inodelk_cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;finodelk,</div><div class='del'>-                                           int_lock-&gt;domain, local-&gt;fd,</div><div class='del'>-                                           F_SETLK, &amp;int_lock-&gt;flock, NULL);</div><div class='del'>-                } else {</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_nonblocking_inodelk_cbk,</div><div class='del'>-                                           (void *) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;inodelk,</div><div class='del'>-                                           int_lock-&gt;domain, &amp;local-&gt;loc,</div><div class='del'>-                                           F_SETLK, &amp;int_lock-&gt;flock, NULL);</div><div class='del'>-                }</div><div class='del'>-                if (!--call_count)</div><div class='del'>-                        break;</div><div class='add'>+    /* Send non-blocking inodelk calls only on up children</div><div class='add'>+       and where the fd has been opened */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;child_up[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;fd) {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_nonblocking_inodelk_cbk, (void *)(long)i,</div><div class='add'>+                priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;finodelk,</div><div class='add'>+                int_lock-&gt;domain, local-&gt;fd, F_SETLK, &amp;int_lock-&gt;flock, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, afr_nonblocking_inodelk_cbk, (void *)(long)i,</div><div class='add'>+                priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;inodelk,</div><div class='add'>+                int_lock-&gt;domain, &amp;local-&gt;loc, F_SETLK, &amp;int_lock-&gt;flock, NULL);</div><div class='ctx'>         }</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-afr_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_lock_t  *lock  = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on)</div><div class='del'>-                goto out;</div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-        LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_del_init (&amp;local-&gt;transaction.owner_list);</div><div class='del'>-                if (list_empty (&amp;lock-&gt;owners) &amp;&amp; list_empty (&amp;lock-&gt;post_op)) {</div><div class='del'>-                        local-&gt;transaction.do_eager_unlock = _gf_true;</div><div class='del'>-        /*TODO: Need to get metadata use on_disk and inherit/uninherit</div><div class='del'>-         *GF_ASSERT (!local-&gt;inode_ctx-&gt;on_disk[local-&gt;transaction.type]);</div><div class='del'>-         *GF_ASSERT (!local-&gt;inode_ctx-&gt;inherited[local-&gt;transaction.type]);</div><div class='del'>-        */</div><div class='del'>-                        GF_ASSERT (lock-&gt;release);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        if (!local-&gt;transaction.do_eager_unlock) {</div><div class='del'>-                local-&gt;internal_lock.lock_cbk (frame, this);</div><div class='del'>-                return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on)</div><div class='add'>+        goto out;</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;local-&gt;transaction.owner_list);</div><div class='add'>+        if (list_empty(&amp;lock-&gt;owners) &amp;&amp; list_empty(&amp;lock-&gt;post_op)) {</div><div class='add'>+            local-&gt;transaction.do_eager_unlock = _gf_true;</div><div class='add'>+            /*TODO: Need to get metadata use on_disk and inherit/uninherit</div><div class='add'>+             *GF_ASSERT (!local-&gt;inode_ctx-&gt;on_disk[local-&gt;transaction.type]);</div><div class='add'>+             *GF_ASSERT (!local-&gt;inode_ctx-&gt;inherited[local-&gt;transaction.type]);</div><div class='add'>+             */</div><div class='add'>+            GF_ASSERT(lock-&gt;release);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    if (!local-&gt;transaction.do_eager_unlock) {</div><div class='add'>+        local-&gt;internal_lock.lock_cbk(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        afr_unlock_now (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_unlock_now(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-open.c b/xlators/cluster/afr/src/afr-open.c<br/>index 3057deed604..a202d528ec8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-open.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-open.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-open.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-open.c</a></div><div class='hunk'>@@ -36,336 +36,318 @@</div><div class='ctx'> #include "afr-dir-write.h"</div><div class='ctx'> #include "afr-transaction.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_fd_fixable (fd_t *fd)</div><div class='add'>+afr_is_fd_fixable(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        if (!fd || !fd-&gt;inode)</div><div class='del'>-                return _gf_false;</div><div class='del'>-        else if (fd_is_anonymous (fd))</div><div class='del'>-                return _gf_false;</div><div class='del'>-        else if (gf_uuid_is_null (fd-&gt;inode-&gt;gfid))</div><div class='del'>-                return _gf_false;</div><div class='del'>-</div><div class='del'>-        return _gf_true;</div><div class='add'>+    if (!fd || !fd-&gt;inode)</div><div class='add'>+        return _gf_false;</div><div class='add'>+    else if (fd_is_anonymous(fd))</div><div class='add'>+        return _gf_false;</div><div class='add'>+    else if (gf_uuid_is_null(fd-&gt;inode-&gt;gfid))</div><div class='add'>+        return _gf_false;</div><div class='add'>+</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_open_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+afr_open_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t * local = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_UNWIND (open, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          local-&gt;fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_UNWIND(open, frame, local-&gt;op_ret, local-&gt;op_errno, local-&gt;fd,</div><div class='add'>+                     xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_open_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-              xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-              fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local           = NULL;</div><div class='del'>-        int           call_count       = -1;</div><div class='del'>-        int           child_index      = (long) cookie;</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx          = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	fd_ctx = local-&gt;fd_ctx;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-			fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-			fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='del'>-			if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='del'>-				local-&gt;xdata_rsp = dict_ref (xdata);</div><div class='del'>-                }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    fd_ctx = local-&gt;fd_ctx;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='add'>+            if (!local-&gt;xdata_rsp &amp;&amp; xdata)</div><div class='add'>+                local-&gt;xdata_rsp = dict_ref(xdata);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                if ((fd_ctx-&gt;flags &amp; O_TRUNC) &amp;&amp; (local-&gt;op_ret &gt;= 0)) {</div><div class='del'>-                        STACK_WIND (frame, afr_open_ftruncate_cbk,</div><div class='del'>-                                    this, this-&gt;fops-&gt;ftruncate,</div><div class='del'>-                                    fd, 0, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        AFR_STACK_UNWIND (open, frame, local-&gt;op_ret,</div><div class='del'>-                                          local-&gt;op_errno, local-&gt;cont.open.fd,</div><div class='del'>-                                          local-&gt;xdata_rsp);</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        if ((fd_ctx-&gt;flags &amp; O_TRUNC) &amp;&amp; (local-&gt;op_ret &gt;= 0)) {</div><div class='add'>+            STACK_WIND(frame, afr_open_ftruncate_cbk, this,</div><div class='add'>+                       this-&gt;fops-&gt;ftruncate, fd, 0, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            AFR_STACK_UNWIND(open, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                             local-&gt;cont.open.fd, local-&gt;xdata_rsp);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_open_continue (call_frame_t *frame, xlator_t *this, int err)</div><div class='add'>+afr_open_continue(call_frame_t *frame, xlator_t *this, int err)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local     = NULL;</div><div class='del'>-        afr_private_t *priv      = NULL;</div><div class='del'>-        int           call_count = 0;</div><div class='del'>-        int           i          = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        priv   = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (err) {</div><div class='del'>-                AFR_STACK_UNWIND (open, frame, -1, err, NULL, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;call_count = AFR_COUNT (local-&gt;child_up,</div><div class='del'>-                                               priv-&gt;child_count);</div><div class='del'>-                call_count = local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (local-&gt;child_up[i]) {</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_open_cbk,</div><div class='del'>-                                                   (void *)(long)i,</div><div class='del'>-                                                   priv-&gt;children[i],</div><div class='del'>-                                                  priv-&gt;children[i]-&gt;fops-&gt;open,</div><div class='del'>-                                                   &amp;local-&gt;loc,</div><div class='del'>-                                            (local-&gt;cont.open.flags &amp; ~O_TRUNC),</div><div class='del'>-                                                   local-&gt;cont.open.fd,</div><div class='del'>-                                                   local-&gt;xdata_req);</div><div class='del'>-                                if (!--call_count)</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    if (err) {</div><div class='add'>+        AFR_STACK_UNWIND(open, frame, -1, err, NULL, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;call_count = AFR_COUNT(local-&gt;child_up, priv-&gt;child_count);</div><div class='add'>+        call_count = local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (local-&gt;child_up[i]) {</div><div class='add'>+                STACK_WIND_COOKIE(frame, afr_open_cbk, (void *)(long)i,</div><div class='add'>+                                  priv-&gt;children[i],</div><div class='add'>+                                  priv-&gt;children[i]-&gt;fops-&gt;open, &amp;local-&gt;loc,</div><div class='add'>+                                  (local-&gt;cont.open.flags &amp; ~O_TRUNC),</div><div class='add'>+                                  local-&gt;cont.open.fd, local-&gt;xdata_req);</div><div class='add'>+                if (!--call_count)</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-          fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+         fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv            = NULL;</div><div class='del'>-        afr_local_t   *local           = NULL;</div><div class='del'>-        int           spb_choice       = 0;</div><div class='del'>-        int           event_generation = 0;</div><div class='del'>-        int           ret              = 0;</div><div class='del'>-        int32_t       op_errno         = 0;</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx          = NULL;</div><div class='del'>-</div><div class='del'>-        //We can't let truncation to happen outside transaction.</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;op = GF_FOP_OPEN;</div><div class='del'>-	fd_ctx = afr_fd_ctx_get (fd, this);</div><div class='del'>-	if (!fd_ctx) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (!afr_is_consistent_io_possible (local, priv, &amp;op_errno))</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-	local-&gt;fd_ctx = fd_ctx;</div><div class='del'>-	fd_ctx-&gt;flags = flags;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        local-&gt;cont.open.flags = flags;</div><div class='del'>-        local-&gt;cont.open.fd = fd_ref (fd);</div><div class='del'>-</div><div class='del'>-        ret = afr_inode_get_readable (frame, local-&gt;inode, this,</div><div class='del'>-                                      NULL, &amp;event_generation,</div><div class='del'>-                                      AFR_DATA_TRANSACTION);</div><div class='del'>-        if ((ret &lt; 0) &amp;&amp;</div><div class='del'>-            (afr_inode_split_brain_choice_get (local-&gt;inode,</div><div class='del'>-                                             this, &amp;spb_choice) == 0) &amp;&amp;</div><div class='del'>-            spb_choice &lt; 0) {</div><div class='del'>-                afr_inode_refresh (frame, this, local-&gt;inode,</div><div class='del'>-                                   local-&gt;inode-&gt;gfid, afr_open_continue);</div><div class='del'>-        } else {</div><div class='del'>-                afr_open_continue (frame, this, 0);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int spb_choice = 0;</div><div class='add'>+    int event_generation = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    // We can't let truncation to happen outside transaction.</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op = GF_FOP_OPEN;</div><div class='add'>+    fd_ctx = afr_fd_ctx_get(fd, this);</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, priv, &amp;op_errno))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;fd_ctx = fd_ctx;</div><div class='add'>+    fd_ctx-&gt;flags = flags;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    local-&gt;cont.open.flags = flags;</div><div class='add'>+    local-&gt;cont.open.fd = fd_ref(fd);</div><div class='add'>+</div><div class='add'>+    ret = afr_inode_get_readable(frame, local-&gt;inode, this, NULL,</div><div class='add'>+                                 &amp;event_generation, AFR_DATA_TRANSACTION);</div><div class='add'>+    if ((ret &lt; 0) &amp;&amp;</div><div class='add'>+        (afr_inode_split_brain_choice_get(local-&gt;inode, this, &amp;spb_choice) ==</div><div class='add'>+         0) &amp;&amp;</div><div class='add'>+        spb_choice &lt; 0) {</div><div class='add'>+        afr_inode_refresh(frame, this, local-&gt;inode, local-&gt;inode-&gt;gfid,</div><div class='add'>+                          afr_open_continue);</div><div class='add'>+    } else {</div><div class='add'>+        afr_open_continue(frame, this, 0);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-	AFR_STACK_UNWIND (open, frame, -1, op_errno, fd, NULL);</div><div class='add'>+    AFR_STACK_UNWIND(open, frame, -1, op_errno, fd, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_openfd_fix_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+afr_openfd_fix_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local      = NULL;</div><div class='del'>-        afr_private_t *priv       = NULL;</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx     = NULL;</div><div class='del'>-        int           call_count  = 0;</div><div class='del'>-        int           child_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-        priv     = this-&gt;private;</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "fd for %s opened "</div><div class='add'>+                     "successfully on subvolume %s",</div><div class='add'>+                     local-&gt;loc.path, priv-&gt;children[child_index]-&gt;name);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, fop_log_level(GF_FOP_OPEN, op_errno), op_errno,</div><div class='add'>+               AFR_MSG_OPEN_FAIL,</div><div class='add'>+               "Failed to open %s on "</div><div class='add'>+               "subvolume %s",</div><div class='add'>+               local-&gt;loc.path, priv-&gt;children[child_index]-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_ctx = local-&gt;fd_ctx;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;local-&gt;fd-&gt;lock);</div><div class='add'>+    {</div><div class='ctx'>         if (op_ret &gt;= 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "fd for %s opened "</div><div class='del'>-                              "successfully on subvolume %s", local-&gt;loc.path,</div><div class='del'>-                              priv-&gt;children[child_index]-&gt;name);</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='ctx'>         } else {</div><div class='del'>-                gf_msg (this-&gt;name, fop_log_level (GF_FOP_OPEN, op_errno),</div><div class='del'>-                        op_errno, AFR_MSG_OPEN_FAIL, "Failed to open %s on "</div><div class='del'>-                        "subvolume %s", local-&gt;loc.path,</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name);</div><div class='add'>+            fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        fd_ctx = local-&gt;fd_ctx;</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;local-&gt;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        fd_ctx-&gt;opened_on[child_index] = AFR_FD_OPENED;</div><div class='del'>-                } else {</div><div class='del'>-                        fd_ctx-&gt;opened_on[child_index] = AFR_FD_NOT_OPENED;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;fd-&gt;lock);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='del'>-        if (call_count == 0)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='add'>+static int</div><div class='add'>+afr_fd_ctx_need_open(fd_t *fd, xlator_t *this, unsigned char *need_open)</div><div class='add'>+{</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    fd_ctx = afr_fd_ctx_get(fd, this);</div><div class='add'>+    if (!fd_ctx)</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='ctx'> </div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (fd_ctx-&gt;opened_on[i] == AFR_FD_NOT_OPENED &amp;&amp;</div><div class='add'>+                priv-&gt;child_up[i]) {</div><div class='add'>+                fd_ctx-&gt;opened_on[i] = AFR_FD_OPENING;</div><div class='add'>+                need_open[i] = 1;</div><div class='add'>+                count++;</div><div class='add'>+            } else {</div><div class='add'>+                need_open[i] = 0;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-afr_fd_ctx_need_open (fd_t *fd, xlator_t *this, unsigned char *need_open)</div><div class='del'>-{</div><div class='del'>-	afr_fd_ctx_t *fd_ctx = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int count = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	fd_ctx = afr_fd_ctx_get (fd, this);</div><div class='del'>-	if (!fd_ctx)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;fd-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			if (fd_ctx-&gt;opened_on[i] == AFR_FD_NOT_OPENED &amp;&amp;</div><div class='del'>-			    priv-&gt;child_up[i]) {</div><div class='del'>-				fd_ctx-&gt;opened_on[i] = AFR_FD_OPENING;</div><div class='del'>-				need_open[i] = 1;</div><div class='del'>-				count++;</div><div class='del'>-			} else {</div><div class='del'>-				need_open[i] = 0;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;fd-&gt;lock);</div><div class='del'>-</div><div class='del'>-	return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_fix_open (fd_t *fd, xlator_t *this)</div><div class='add'>+afr_fix_open(fd_t *fd, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv    = NULL;</div><div class='del'>-        int           i        = 0;</div><div class='del'>-        call_frame_t  *frame   = NULL;</div><div class='del'>-        afr_local_t   *local   = NULL;</div><div class='del'>-        int           ret      = -1;</div><div class='del'>-        int32_t       op_errno = 0;</div><div class='del'>-        afr_fd_ctx_t  *fd_ctx  = NULL;</div><div class='del'>-	unsigned char *need_open = NULL;</div><div class='del'>-	int call_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    afr_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    unsigned char *need_open = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!afr_is_fd_fixable (fd))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!afr_is_fd_fixable(fd))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fd_ctx = afr_fd_ctx_get (fd, this);</div><div class='del'>-        if (!fd_ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    fd_ctx = afr_fd_ctx_get(fd, this);</div><div class='add'>+    if (!fd_ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	need_open = alloca0 (priv-&gt;child_count);</div><div class='add'>+    need_open = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	call_count = afr_fd_ctx_need_open (fd, this, need_open);</div><div class='del'>-	if (!call_count)</div><div class='del'>-		goto out;</div><div class='add'>+    call_count = afr_fd_ctx_need_open(fd, this, need_open);</div><div class='add'>+    if (!call_count)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, op_errno);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = AFR_FRAME_INIT(frame, op_errno);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;loc.inode = inode_ref (fd-&gt;inode);</div><div class='del'>-        ret = loc_path (&amp;local-&gt;loc, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    local-&gt;loc.inode = inode_ref(fd-&gt;inode);</div><div class='add'>+    ret = loc_path(&amp;local-&gt;loc, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-	local-&gt;fd_ctx = fd_ctx;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;fd_ctx = fd_ctx;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count = call_count;</div><div class='add'>+    local-&gt;call_count = call_count;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "need open count: %d",</div><div class='del'>-                      call_count);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "need open count: %d", call_count);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!need_open[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (IA_IFDIR == fd-&gt;inode-&gt;ia_type) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "opening fd for dir %s on subvolume %s",</div><div class='del'>-                                      local-&gt;loc.path, priv-&gt;children[i]-&gt;name);</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_openfd_fix_open_cbk,</div><div class='del'>-                                           (void*) (long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;opendir,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;fd,</div><div class='del'>-                                           NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "opening fd for file %s on subvolume %s",</div><div class='del'>-                                      local-&gt;loc.path, priv-&gt;children[i]-&gt;name);</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, afr_openfd_fix_open_cbk,</div><div class='del'>-                                           (void *)(long) i,</div><div class='del'>-                                           priv-&gt;children[i],</div><div class='del'>-                                           priv-&gt;children[i]-&gt;fops-&gt;open,</div><div class='del'>-                                           &amp;local-&gt;loc,</div><div class='del'>-                                           fd_ctx-&gt;flags &amp; (~O_TRUNC),</div><div class='del'>-                                           local-&gt;fd, NULL);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		if (!--call_count)</div><div class='del'>-			break;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!need_open[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (IA_IFDIR == fd-&gt;inode-&gt;ia_type) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "opening fd for dir %s on subvolume %s",</div><div class='add'>+                         local-&gt;loc.path, priv-&gt;children[i]-&gt;name);</div><div class='add'>+</div><div class='add'>+            STACK_WIND_COOKIE(frame, afr_openfd_fix_open_cbk, (void *)(long)i,</div><div class='add'>+                              priv-&gt;children[i],</div><div class='add'>+                              priv-&gt;children[i]-&gt;fops-&gt;opendir, &amp;local-&gt;loc,</div><div class='add'>+                              local-&gt;fd, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "opening fd for file %s on subvolume %s",</div><div class='add'>+                         local-&gt;loc.path, priv-&gt;children[i]-&gt;name);</div><div class='add'>+</div><div class='add'>+            STACK_WIND_COOKIE(frame, afr_openfd_fix_open_cbk, (void *)(long)i,</div><div class='add'>+                              priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;open,</div><div class='add'>+                              &amp;local-&gt;loc, fd_ctx-&gt;flags &amp; (~O_TRUNC),</div><div class='add'>+                              local-&gt;fd, NULL);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-read-txn.c b/xlators/cluster/afr/src/afr-read-txn.c<br/>index 945c050da03..1df39c35fce 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-read-txn.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-read-txn.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-read-txn.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-read-txn.c</a></div><div class='hunk'>@@ -13,347 +13,343 @@</div><div class='ctx'> #include "afr-messages.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_pending_read_increment (afr_private_t *priv, int child_index)</div><div class='add'>+afr_pending_read_increment(afr_private_t *priv, int child_index)</div><div class='ctx'> {</div><div class='del'>-        if (child_index &lt; 0 || child_index &gt; priv-&gt;child_count)</div><div class='del'>-                return;</div><div class='add'>+    if (child_index &lt; 0 || child_index &gt; priv-&gt;child_count)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC(priv-&gt;pending_reads[child_index]);</div><div class='add'>+    GF_ATOMIC_INC(priv-&gt;pending_reads[child_index]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_pending_read_decrement (afr_private_t *priv, int child_index)</div><div class='add'>+afr_pending_read_decrement(afr_private_t *priv, int child_index)</div><div class='ctx'> {</div><div class='del'>-        if (child_index &lt; 0 || child_index &gt; priv-&gt;child_count)</div><div class='del'>-                return;</div><div class='add'>+    if (child_index &lt; 0 || child_index &gt; priv-&gt;child_count)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_DEC(priv-&gt;pending_reads[child_index]);</div><div class='add'>+    GF_ATOMIC_DEC(priv-&gt;pending_reads[child_index]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_ta_dict_contains_pending_xattr (dict_t *dict, afr_private_t *priv,</div><div class='del'>-                                    int child)</div><div class='add'>+afr_ta_dict_contains_pending_xattr(dict_t *dict, afr_private_t *priv, int child)</div><div class='ctx'> {</div><div class='del'>-        int     *pending                     = NULL;</div><div class='del'>-        int     ret                          = 0;</div><div class='del'>-        int     i                            = 0;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_ptr (dict, priv-&gt;pending_key[child], (void *)&amp;pending);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                for (i = 0; i &lt; AFR_NUM_CHANGE_LOGS; i++) {</div><div class='del'>-                        /* Not doing a ntoh32(pending) as we just want to check</div><div class='del'>-                         * if it is non-zero or not. */</div><div class='del'>-                        if (pending[i]) {</div><div class='del'>-                                return _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int *pending = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_ptr(dict, priv-&gt;pending_key[child], (void *)&amp;pending);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        for (i = 0; i &lt; AFR_NUM_CHANGE_LOGS; i++) {</div><div class='add'>+            /* Not doing a ntoh32(pending) as we just want to check</div><div class='add'>+             * if it is non-zero or not. */</div><div class='add'>+            if (pending[i]) {</div><div class='add'>+                return _gf_true;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_read_txn_wind (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_read_txn_wind(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        afr_pending_read_decrement (priv, local-&gt;read_subvol);</div><div class='del'>-        local-&gt;read_subvol = subvol;</div><div class='del'>-        afr_pending_read_increment (priv, subvol);</div><div class='del'>-        local-&gt;readfn (frame, this, subvol);</div><div class='add'>+    afr_pending_read_decrement(priv, local-&gt;read_subvol);</div><div class='add'>+    local-&gt;read_subvol = subvol;</div><div class='add'>+    afr_pending_read_increment(priv, subvol);</div><div class='add'>+    local-&gt;readfn(frame, this, subvol);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_txn_next_subvol (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_read_txn_next_subvol(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int subvol = -1;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!local-&gt;readable[i]) {</div><div class='del'>-			/* don't even bother trying here.</div><div class='del'>-			   just mark as attempted and move on. */</div><div class='del'>-			local-&gt;read_attempted[i] = 1;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!local-&gt;read_attempted[i]) {</div><div class='del'>-			subvol = i;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* If no more subvols were available for reading, we leave</div><div class='del'>-	   @subvol as -1, which is an indication we have run out of</div><div class='del'>-	   readable subvols. */</div><div class='del'>-	if (subvol != -1)</div><div class='del'>-		local-&gt;read_attempted[subvol] = 1;</div><div class='del'>-	afr_read_txn_wind (frame, this, subvol);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int subvol = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;readable[i]) {</div><div class='add'>+            /* don't even bother trying here.</div><div class='add'>+               just mark as attempted and move on. */</div><div class='add'>+            local-&gt;read_attempted[i] = 1;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;read_attempted[i]) {</div><div class='add'>+            subvol = i;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If no more subvols were available for reading, we leave</div><div class='add'>+       @subvol as -1, which is an indication we have run out of</div><div class='add'>+       readable subvols. */</div><div class='add'>+    if (subvol != -1)</div><div class='add'>+        local-&gt;read_attempted[subvol] = 1;</div><div class='add'>+    afr_read_txn_wind(frame, this, subvol);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_ta_read_txn_done (int ret, call_frame_t *ta_frame, void *opaque)</div><div class='add'>+afr_ta_read_txn_done(int ret, call_frame_t *ta_frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        STACK_DESTROY(ta_frame-&gt;root);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_DESTROY(ta_frame-&gt;root);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_ta_read_txn (void *opaque)</div><div class='add'>+afr_ta_read_txn(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *frame             = NULL;</div><div class='del'>-        xlator_t        *this              = NULL;</div><div class='del'>-        int             read_subvol        = -1;</div><div class='del'>-        int             up_child           = AFR_CHILD_UNKNOWN;</div><div class='del'>-        int             possible_bad_child = AFR_CHILD_UNKNOWN;</div><div class='del'>-        int             ret                = 0;</div><div class='del'>-        int             op_errno           = ENOMEM;</div><div class='del'>-        afr_local_t     *local             = NULL;</div><div class='del'>-        afr_private_t   *priv              = NULL;</div><div class='del'>-        struct gf_flock flock              = {0, };</div><div class='del'>-        dict_t          *xdata_req         = NULL;</div><div class='del'>-        dict_t          *xdata_rsp         = NULL;</div><div class='del'>-        int             **pending          = NULL;</div><div class='del'>-        loc_t           loc                = {0,};</div><div class='del'>-</div><div class='del'>-        frame = (call_frame_t *)opaque;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;child_up[AFR_CHILD_ZERO]) {</div><div class='del'>-                up_child = AFR_CHILD_ZERO;</div><div class='del'>-                possible_bad_child = AFR_CHILD_ONE;</div><div class='del'>-        } else if (local-&gt;child_up[AFR_CHILD_ONE]) {</div><div class='del'>-                up_child = AFR_CHILD_ONE;</div><div class='del'>-                possible_bad_child = AFR_CHILD_ZERO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (up_child != AFR_CHILD_UNKNOWN);</div><div class='del'>-</div><div class='del'>-        /* Query the up_child to see if it blames the down one. */</div><div class='del'>-        xdata_req = dict_new();</div><div class='del'>-        if (!xdata_req)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pending = afr_matrix_create (priv-&gt;child_count, AFR_NUM_CHANGE_LOGS);</div><div class='del'>-        if (!pending)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = afr_set_pending_dict (priv, xdata_req, pending);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                ret = syncop_fxattrop (priv-&gt;children[up_child], local-&gt;fd,</div><div class='del'>-                                       GF_XATTROP_ADD_ARRAY, xdata_req, NULL,</div><div class='del'>-                                       &amp;xdata_rsp, NULL);</div><div class='del'>-        } else {</div><div class='del'>-               ret = syncop_xattrop (priv-&gt;children[up_child], &amp;local-&gt;loc,</div><div class='del'>-                                     GF_XATTROP_ADD_ARRAY, xdata_req, NULL,</div><div class='del'>-                                     &amp;xdata_rsp, NULL);</div><div class='del'>-        }</div><div class='del'>-        if (ret || !xdata_rsp) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed xattrop for gfid %s on %s",</div><div class='del'>-                        uuid_utoa (local-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;children[up_child]-&gt;name);</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (afr_ta_dict_contains_pending_xattr (xdata_rsp, priv,</div><div class='del'>-                                                possible_bad_child)) {</div><div class='del'>-                read_subvol = up_child;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict_unref (xdata_rsp);</div><div class='del'>-        /* Query thin-arbiter to see if it blames any data brick. */</div><div class='del'>-        ret = afr_fill_ta_loc (this, &amp;loc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to populate thin-arbiter loc for: %s.",</div><div class='del'>-                        loc.name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        flock.l_type = F_WRLCK;/*start and length are already zero. */</div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_MODIFY, &amp;loc, F_SETLKW, &amp;flock,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "gfid:%s: Failed to get AFR_TA_DOM_MODIFY lock on %s.",</div><div class='del'>-                        uuid_utoa (local-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX]);</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_xattrop (priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc,</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+    int up_child = AFR_CHILD_UNKNOWN;</div><div class='add'>+    int possible_bad_child = AFR_CHILD_UNKNOWN;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xdata_req = NULL;</div><div class='add'>+    dict_t *xdata_rsp = NULL;</div><div class='add'>+    int **pending = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    frame = (call_frame_t *)opaque;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;child_up[AFR_CHILD_ZERO]) {</div><div class='add'>+        up_child = AFR_CHILD_ZERO;</div><div class='add'>+        possible_bad_child = AFR_CHILD_ONE;</div><div class='add'>+    } else if (local-&gt;child_up[AFR_CHILD_ONE]) {</div><div class='add'>+        up_child = AFR_CHILD_ONE;</div><div class='add'>+        possible_bad_child = AFR_CHILD_ZERO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(up_child != AFR_CHILD_UNKNOWN);</div><div class='add'>+</div><div class='add'>+    /* Query the up_child to see if it blames the down one. */</div><div class='add'>+    xdata_req = dict_new();</div><div class='add'>+    if (!xdata_req)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pending = afr_matrix_create(priv-&gt;child_count, AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (!pending)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = afr_set_pending_dict(priv, xdata_req, pending);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        ret = syncop_fxattrop(priv-&gt;children[up_child], local-&gt;fd,</div><div class='ctx'>                               GF_XATTROP_ADD_ARRAY, xdata_req, NULL, &amp;xdata_rsp,</div><div class='ctx'>                               NULL);</div><div class='del'>-        if (ret || !xdata_rsp) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "gfid:%s: Failed xattrop on %s.",</div><div class='del'>-                        uuid_utoa (local-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX]);</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto unlock;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!afr_ta_dict_contains_pending_xattr(xdata_rsp, priv, up_child)) {</div><div class='del'>-                read_subvol = up_child;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EIO, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failing read for gfid %s since good brick %s is down",</div><div class='del'>-                        uuid_utoa (local-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;children[possible_bad_child]-&gt;name);</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = syncop_xattrop(priv-&gt;children[up_child], &amp;local-&gt;loc,</div><div class='add'>+                             GF_XATTROP_ADD_ARRAY, xdata_req, NULL, &amp;xdata_rsp,</div><div class='add'>+                             NULL);</div><div class='add'>+    }</div><div class='add'>+    if (ret || !xdata_rsp) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed xattrop for gfid %s on %s",</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid), priv-&gt;children[up_child]-&gt;name);</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (afr_ta_dict_contains_pending_xattr(xdata_rsp, priv,</div><div class='add'>+                                           possible_bad_child)) {</div><div class='add'>+        read_subvol = up_child;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict_unref(xdata_rsp);</div><div class='add'>+    /* Query thin-arbiter to see if it blames any data brick. */</div><div class='add'>+    ret = afr_fill_ta_loc(this, &amp;loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to populate thin-arbiter loc for: %s.", loc.name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    flock.l_type = F_WRLCK; /*start and length are already zero. */</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_MODIFY, &amp;loc, F_SETLKW, &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "gfid:%s: Failed to get AFR_TA_DOM_MODIFY lock on %s.",</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid),</div><div class='add'>+               priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX]);</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_xattrop(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc,</div><div class='add'>+                         GF_XATTROP_ADD_ARRAY, xdata_req, NULL, &amp;xdata_rsp,</div><div class='add'>+                         NULL);</div><div class='add'>+    if (ret || !xdata_rsp) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "gfid:%s: Failed xattrop on %s.", uuid_utoa(local-&gt;inode-&gt;gfid),</div><div class='add'>+               priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX]);</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto unlock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!afr_ta_dict_contains_pending_xattr(xdata_rsp, priv, up_child)) {</div><div class='add'>+        read_subvol = up_child;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EIO, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failing read for gfid %s since good brick %s is down",</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid),</div><div class='add'>+               priv-&gt;children[possible_bad_child]-&gt;name);</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unlock:</div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_MODIFY, &amp;loc, F_SETLK, &amp;flock,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "gfid:%s: Failed to unlock AFR_TA_DOM_MODIFY lock on "</div><div class='del'>-                        "%s.", uuid_utoa (local-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX]);</div><div class='del'>-        }</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_MODIFY, &amp;loc, F_SETLK, &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "gfid:%s: Failed to unlock AFR_TA_DOM_MODIFY lock on "</div><div class='add'>+               "%s.",</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid),</div><div class='add'>+               priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX]);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (xdata_req)</div><div class='del'>-                dict_unref(xdata_req);</div><div class='del'>-        if (xdata_rsp)</div><div class='del'>-                dict_unref(xdata_rsp);</div><div class='del'>-        if (pending)</div><div class='del'>-                afr_matrix_cleanup (pending, priv-&gt;child_count);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-        if (read_subvol == -1) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-        }</div><div class='del'>-        afr_read_txn_wind (frame, this, read_subvol);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xdata_req)</div><div class='add'>+        dict_unref(xdata_req);</div><div class='add'>+    if (xdata_rsp)</div><div class='add'>+        dict_unref(xdata_rsp);</div><div class='add'>+    if (pending)</div><div class='add'>+        afr_matrix_cleanup(pending, priv-&gt;child_count);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+    if (read_subvol == -1) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    }</div><div class='add'>+    afr_read_txn_wind(frame, this, read_subvol);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_ta_read_txn_synctask (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_ta_read_txn_synctask(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *ta_frame  = NULL;</div><div class='del'>-        afr_local_t  *local     = NULL;</div><div class='del'>-        int          ret        = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        ta_frame = afr_ta_frame_create(this);</div><div class='del'>-        if (!ta_frame) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, afr_ta_read_txn,</div><div class='del'>-                            afr_ta_read_txn_done, ta_frame, frame);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        AFR_MSG_THIN_ARB, "Failed to launch "</div><div class='del'>-                        "afr_ta_read_txn synctask for gfid %s.",</div><div class='del'>-                        uuid_utoa(local-&gt;inode-&gt;gfid));</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                STACK_DESTROY(ta_frame-&gt;root);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+    call_frame_t *ta_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    ta_frame = afr_ta_frame_create(this);</div><div class='add'>+    if (!ta_frame) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, afr_ta_read_txn, afr_ta_read_txn_done,</div><div class='add'>+                       ta_frame, frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to launch "</div><div class='add'>+               "afr_ta_read_txn synctask for gfid %s.",</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid));</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        STACK_DESTROY(ta_frame-&gt;root);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> out:</div><div class='del'>-        afr_read_txn_wind (frame, this, -1);</div><div class='add'>+    afr_read_txn_wind(frame, this, -1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_txn_refresh_done (call_frame_t *frame, xlator_t *this, int err)</div><div class='add'>+afr_read_txn_refresh_done(call_frame_t *frame, xlator_t *this, int err)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv           = NULL;</div><div class='del'>-        afr_local_t     *local          = NULL;</div><div class='del'>-        int             read_subvol     = -1;</div><div class='del'>-        inode_t         *inode          = NULL;</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        int             spb_choice      = -1;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	inode = local-&gt;inode;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (err) {</div><div class='del'>-                if (!priv-&gt;thin_arbiter_count)</div><div class='del'>-                        goto readfn;</div><div class='del'>-                if (err != EINVAL)</div><div class='del'>-                        goto readfn;</div><div class='del'>-                /* We need to query the good bricks and/or thin-arbiter.*/</div><div class='del'>-                afr_ta_read_txn_synctask (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int spb_choice = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    inode = local-&gt;inode;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (err) {</div><div class='add'>+        if (!priv-&gt;thin_arbiter_count)</div><div class='add'>+            goto readfn;</div><div class='add'>+        if (err != EINVAL)</div><div class='add'>+            goto readfn;</div><div class='add'>+        /* We need to query the good bricks and/or thin-arbiter.*/</div><div class='add'>+        afr_ta_read_txn_synctask(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	read_subvol = afr_read_subvol_select_by_policy (inode, this,</div><div class='del'>-							local-&gt;readable, NULL);</div><div class='del'>-	if (read_subvol == -1) {</div><div class='del'>-                err = EIO;</div><div class='del'>-                goto readfn;</div><div class='del'>-        }</div><div class='add'>+    read_subvol = afr_read_subvol_select_by_policy(inode, this, local-&gt;readable,</div><div class='add'>+                                                   NULL);</div><div class='add'>+    if (read_subvol == -1) {</div><div class='add'>+        err = EIO;</div><div class='add'>+        goto readfn;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;read_attempted[read_subvol]) {</div><div class='del'>-		afr_read_txn_next_subvol (frame, this);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (local-&gt;read_attempted[read_subvol]) {</div><div class='add'>+        afr_read_txn_next_subvol(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	local-&gt;read_attempted[read_subvol] = 1;</div><div class='add'>+    local-&gt;read_attempted[read_subvol] = 1;</div><div class='ctx'> readfn:</div><div class='del'>-        if (read_subvol == -1) {</div><div class='del'>-                ret = afr_inode_split_brain_choice_get (inode, this,</div><div class='del'>-                                                        &amp;spb_choice);</div><div class='del'>-                if ((ret == 0) &amp;&amp; spb_choice &gt;= 0)</div><div class='del'>-                        read_subvol = spb_choice;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (read_subvol == -1) {</div><div class='del'>-                AFR_SET_ERROR_AND_CHECK_SPLIT_BRAIN (-1, err);</div><div class='del'>-        }</div><div class='del'>-        afr_read_txn_wind (frame, this, read_subvol);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    if (read_subvol == -1) {</div><div class='add'>+        ret = afr_inode_split_brain_choice_get(inode, this, &amp;spb_choice);</div><div class='add'>+        if ((ret == 0) &amp;&amp; spb_choice &gt;= 0)</div><div class='add'>+            read_subvol = spb_choice;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (read_subvol == -1) {</div><div class='add'>+        AFR_SET_ERROR_AND_CHECK_SPLIT_BRAIN(-1, err);</div><div class='add'>+    }</div><div class='add'>+    afr_read_txn_wind(frame, this, read_subvol);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_txn_continue (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='add'>+afr_read_txn_continue(call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;refreshed) {</div><div class='del'>-		local-&gt;refreshed = _gf_true;</div><div class='del'>-		afr_inode_refresh (frame, this, local-&gt;inode, NULL,</div><div class='del'>-				   afr_read_txn_refresh_done);</div><div class='del'>-	} else {</div><div class='del'>-		afr_read_txn_next_subvol (frame, this);</div><div class='del'>-	}</div><div class='add'>+    if (!local-&gt;refreshed) {</div><div class='add'>+        local-&gt;refreshed = _gf_true;</div><div class='add'>+        afr_inode_refresh(frame, this, local-&gt;inode, NULL,</div><div class='add'>+                          afr_read_txn_refresh_done);</div><div class='add'>+    } else {</div><div class='add'>+        afr_read_txn_next_subvol(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* afr_read_txn_wipe:</div><div class='ctx'> </div><div class='ctx'>    clean internal variables in @local in order to make</div><div class='hunk'>@@ -362,24 +358,24 @@ afr_read_txn_continue (call_frame_t *frame, xlator_t *this, int subvol)</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_read_txn_wipe (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_read_txn_wipe(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	local-&gt;readfn = NULL;</div><div class='add'>+    local-&gt;readfn = NULL;</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;inode)</div><div class='del'>-		inode_unref (local-&gt;inode);</div><div class='add'>+    if (local-&gt;inode)</div><div class='add'>+        inode_unref(local-&gt;inode);</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		local-&gt;read_attempted[i] = 0;</div><div class='del'>-		local-&gt;readable[i] = 0;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        local-&gt;read_attempted[i] = 0;</div><div class='add'>+        local-&gt;readable[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -410,92 +406,94 @@ afr_read_txn_wipe (call_frame_t *frame, xlator_t *this)</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_read_txn (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-	      afr_read_txn_wind_t readfn, afr_transaction_type type)</div><div class='add'>+afr_read_txn(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+             afr_read_txn_wind_t readfn, afr_transaction_type type)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t     *local           = NULL;</div><div class='del'>-        afr_private_t   *priv            = NULL;</div><div class='del'>-        unsigned char   *data            = NULL;</div><div class='del'>-        unsigned char   *metadata        = NULL;</div><div class='del'>-        int             read_subvol      = -1;</div><div class='del'>-        int             event_generation = 0;</div><div class='del'>-        int             ret              = -1;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        data = alloca0 (priv-&gt;child_count);</div><div class='del'>-        metadata = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	afr_read_txn_wipe (frame, this);</div><div class='del'>-</div><div class='del'>-	local-&gt;readfn = readfn;</div><div class='del'>-	local-&gt;inode = inode_ref (inode);</div><div class='del'>-        local-&gt;is_read_txn = _gf_true;</div><div class='del'>-        local-&gt;transaction.type = type;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum (local-&gt;child_up, this)) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = afr_quorum_errno(priv);</div><div class='del'>-                goto read;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!afr_is_consistent_io_possible (local, priv, &amp;local-&gt;op_errno)) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                goto read;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;thin_arbiter_count &amp;&amp;</div><div class='del'>-            AFR_COUNT (local-&gt;child_up, priv-&gt;child_count) !=</div><div class='del'>-                       priv-&gt;child_count) {</div><div class='del'>-                afr_ta_read_txn_synctask (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = afr_inode_read_subvol_get (inode, this, data, metadata,</div><div class='del'>-                                         &amp;event_generation);</div><div class='del'>-	if (ret == -1)</div><div class='del'>-		/* very first transaction on this inode */</div><div class='del'>-		goto refresh;</div><div class='del'>-        AFR_INTERSECT (local-&gt;readable, data, metadata, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "%s: generation now vs cached: %d, "</div><div class='del'>-                      "%d", uuid_utoa (inode-&gt;gfid), local-&gt;event_generation,</div><div class='del'>-                      event_generation);</div><div class='del'>-	if (afr_is_inode_refresh_reqd (inode, this, local-&gt;event_generation,</div><div class='del'>-                                       event_generation))</div><div class='del'>-		/* servers have disconnected / reconnected, and possibly</div><div class='del'>-		   rebooted, very likely changing the state of freshness</div><div class='del'>-		   of copies */</div><div class='del'>-		goto refresh;</div><div class='del'>-</div><div class='del'>-	read_subvol = afr_read_subvol_select_by_policy (inode, this,</div><div class='del'>-							local-&gt;readable, NULL);</div><div class='del'>-</div><div class='del'>-	if (read_subvol &lt; 0 || read_subvol &gt; priv-&gt;child_count) {</div><div class='del'>-	        gf_msg_debug (this-&gt;name, 0, "Unreadable subvolume %d found "</div><div class='del'>-                       "with event generation %d for gfid %s.",</div><div class='del'>-                        read_subvol, event_generation, uuid_utoa(inode-&gt;gfid));</div><div class='del'>-		goto refresh;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;child_up[read_subvol]) {</div><div class='del'>-		/* should never happen, just in case */</div><div class='del'>-	        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        AFR_MSG_READ_SUBVOL_ERROR, "subvolume %d is the "</div><div class='del'>-			"read subvolume in this generation, but is not up",</div><div class='del'>-			read_subvol);</div><div class='del'>-		goto refresh;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local-&gt;read_attempted[read_subvol] = 1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *data = NULL;</div><div class='add'>+    unsigned char *metadata = NULL;</div><div class='add'>+    int read_subvol = -1;</div><div class='add'>+    int event_generation = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    data = alloca0(priv-&gt;child_count);</div><div class='add'>+    metadata = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    afr_read_txn_wipe(frame, this);</div><div class='add'>+</div><div class='add'>+    local-&gt;readfn = readfn;</div><div class='add'>+    local-&gt;inode = inode_ref(inode);</div><div class='add'>+    local-&gt;is_read_txn = _gf_true;</div><div class='add'>+    local-&gt;transaction.type = type;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum(local-&gt;child_up, this)) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = afr_quorum_errno(priv);</div><div class='add'>+        goto read;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, priv, &amp;local-&gt;op_errno)) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        goto read;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;thin_arbiter_count &amp;&amp;</div><div class='add'>+        AFR_COUNT(local-&gt;child_up, priv-&gt;child_count) != priv-&gt;child_count) {</div><div class='add'>+        afr_ta_read_txn_synctask(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_inode_read_subvol_get(inode, this, data, metadata,</div><div class='add'>+                                    &amp;event_generation);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        /* very first transaction on this inode */</div><div class='add'>+        goto refresh;</div><div class='add'>+    AFR_INTERSECT(local-&gt;readable, data, metadata, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "%s: generation now vs cached: %d, "</div><div class='add'>+                 "%d",</div><div class='add'>+                 uuid_utoa(inode-&gt;gfid), local-&gt;event_generation,</div><div class='add'>+                 event_generation);</div><div class='add'>+    if (afr_is_inode_refresh_reqd(inode, this, local-&gt;event_generation,</div><div class='add'>+                                  event_generation))</div><div class='add'>+        /* servers have disconnected / reconnected, and possibly</div><div class='add'>+           rebooted, very likely changing the state of freshness</div><div class='add'>+           of copies */</div><div class='add'>+        goto refresh;</div><div class='add'>+</div><div class='add'>+    read_subvol = afr_read_subvol_select_by_policy(inode, this, local-&gt;readable,</div><div class='add'>+                                                   NULL);</div><div class='add'>+</div><div class='add'>+    if (read_subvol &lt; 0 || read_subvol &gt; priv-&gt;child_count) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Unreadable subvolume %d found "</div><div class='add'>+                     "with event generation %d for gfid %s.",</div><div class='add'>+                     read_subvol, event_generation, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto refresh;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;child_up[read_subvol]) {</div><div class='add'>+        /* should never happen, just in case */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_READ_SUBVOL_ERROR,</div><div class='add'>+               "subvolume %d is the "</div><div class='add'>+               "read subvolume in this generation, but is not up",</div><div class='add'>+               read_subvol);</div><div class='add'>+        goto refresh;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;read_attempted[read_subvol] = 1;</div><div class='ctx'> </div><div class='ctx'> read:</div><div class='del'>-	afr_read_txn_wind (frame, this, read_subvol);</div><div class='add'>+    afr_read_txn_wind(frame, this, read_subvol);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> refresh:</div><div class='del'>-	afr_inode_refresh (frame, this, inode, NULL, afr_read_txn_refresh_done);</div><div class='add'>+    afr_inode_refresh(frame, this, inode, NULL, afr_read_txn_refresh_done);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c<br/>index be5dd327c9d..c48c47683c3 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-self-heal-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-common.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-self-heal.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='hunk'>@@ -17,757 +16,767 @@</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_heal_synctask (xlator_t *this, afr_local_t *local);</div><div class='add'>+afr_heal_synctask(xlator_t *this, afr_local_t *local);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lookup_and_heal_gfid (xlator_t *this, inode_t *parent, const char *name,</div><div class='del'>-                          inode_t *inode, struct afr_reply *replies,</div><div class='del'>-                          int source,  unsigned char *sources, void *gfid)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        call_frame_t   *frame    = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        unsigned char *wind_on = NULL;</div><div class='del'>-        ia_type_t ia_type = IA_INVAL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        loc_t loc = {0, };</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        wind_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-        ia_type = replies[source].poststat.ia_type;</div><div class='del'>-        if ((ia_type == IA_INVAL) &amp;&amp;</div><div class='del'>-            (AFR_COUNT(sources, priv-&gt;child_count) == priv-&gt;child_count)) {</div><div class='del'>-                /* If a file is present on some bricks of the replica but parent</div><div class='del'>-                 * dir does not have pending xattrs, all bricks are sources and</div><div class='del'>-                 * the 'source' we  selected earlier might be one where the file</div><div class='del'>-                 * is not actually present. Hence check if file is present in</div><div class='del'>-                 * any of the sources.*/</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (i == source)</div><div class='del'>-                                continue;</div><div class='del'>-                        if (sources[i] &amp;&amp; replies[i].valid &amp;&amp;</div><div class='del'>-                            replies[i].op_ret == 0) {</div><div class='del'>-                                ia_type = replies[i].poststat.ia_type;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* gfid heal on those subvolumes that do not have gfid associated</div><div class='del'>-         * with the inode and update those replies.</div><div class='del'>-         */</div><div class='add'>+afr_lookup_and_heal_gfid(xlator_t *this, inode_t *parent, const char *name,</div><div class='add'>+                         inode_t *inode, struct afr_reply *replies, int source,</div><div class='add'>+                         unsigned char *sources, void *gfid)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    unsigned char *wind_on = NULL;</div><div class='add'>+    ia_type_t ia_type = IA_INVAL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    wind_on = alloca0(priv-&gt;child_count);</div><div class='add'>+    ia_type = replies[source].poststat.ia_type;</div><div class='add'>+    if ((ia_type == IA_INVAL) &amp;&amp;</div><div class='add'>+        (AFR_COUNT(sources, priv-&gt;child_count) == priv-&gt;child_count)) {</div><div class='add'>+        /* If a file is present on some bricks of the replica but parent</div><div class='add'>+         * dir does not have pending xattrs, all bricks are sources and</div><div class='add'>+         * the 'source' we  selected earlier might be one where the file</div><div class='add'>+         * is not actually present. Hence check if file is present in</div><div class='add'>+         * any of the sources.*/</div><div class='ctx'>         for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if (!gf_uuid_is_null (replies[i].poststat.ia_gfid) ||</div><div class='del'>-                    replies[i].poststat.ia_type != ia_type)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                wind_on[i] = 1;</div><div class='add'>+            if (i == source)</div><div class='add'>+                continue;</div><div class='add'>+            if (sources[i] &amp;&amp; replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='add'>+                ia_type = replies[i].poststat.ia_type;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (AFR_COUNT(wind_on, priv-&gt;child_count) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    /* gfid heal on those subvolumes that do not have gfid associated</div><div class='add'>+     * with the inode and update those replies.</div><div class='add'>+     */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='add'>+        if (!gf_uuid_is_null(replies[i].poststat.ia_gfid) ||</div><div class='add'>+            replies[i].poststat.ia_type != ia_type)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_gfuuid (xdata, "gfid-req", gfid, true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        wind_on[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = afr_frame_create (this, &amp;ret);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (AFR_COUNT(wind_on, priv-&gt;child_count) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        loc.parent = inode_ref (parent);</div><div class='del'>-        gf_uuid_copy (loc.pargfid, parent-&gt;gfid);</div><div class='del'>-        loc.name = name;</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        AFR_ONLIST (wind_on, frame, afr_selfheal_discover_cbk, lookup,</div><div class='del'>-                    &amp;loc, xdata);</div><div class='add'>+    ret = dict_set_gfuuid(xdata, "gfid-req", gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!wind_on[i])</div><div class='del'>-                        continue;</div><div class='del'>-                afr_reply_wipe (&amp;replies[i]);</div><div class='del'>-                afr_reply_copy (&amp;replies[i], &amp;local-&gt;replies[i]);</div><div class='del'>-        }</div><div class='add'>+    frame = afr_frame_create(this, &amp;ret);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, parent-&gt;gfid);</div><div class='add'>+    loc.name = name;</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    AFR_ONLIST(wind_on, frame, afr_selfheal_discover_cbk, lookup, &amp;loc, xdata);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!wind_on[i])</div><div class='add'>+            continue;</div><div class='add'>+        afr_reply_wipe(&amp;replies[i]);</div><div class='add'>+        afr_reply_copy(&amp;replies[i], &amp;local-&gt;replies[i]);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (frame)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_gfid_sbrain_source_from_src_brick (xlator_t *this,</div><div class='del'>-                                       struct afr_reply *replies,</div><div class='del'>-                                       char *src_brick)</div><div class='add'>+afr_gfid_sbrain_source_from_src_brick(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                                      char *src_brick)</div><div class='ctx'> {</div><div class='del'>-        int             i        = 0;</div><div class='del'>-        afr_private_t  *priv     = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                if (strcmp (priv-&gt;children[i]-&gt;name, src_brick) == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        if (strcmp(priv-&gt;children[i]-&gt;name, src_brick) == 0)</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_gfid_mismatch_by_majority (struct afr_reply *replies,</div><div class='del'>-                                        int child_count)</div><div class='del'>-{</div><div class='del'>-        int             j                  = 0;</div><div class='del'>-        int             i                  = 0;</div><div class='del'>-        int             src                = -1;</div><div class='del'>-        int             votes[child_count];</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                votes[i] = 1;</div><div class='del'>-                for (j = i+1; j &lt; child_count; j++) {</div><div class='del'>-                        if ((!gf_uuid_compare (replies[i].poststat.ia_gfid,</div><div class='del'>-                            replies[j].poststat.ia_gfid)))</div><div class='del'>-                                votes[i]++;</div><div class='del'>-                        if (votes[i] &gt; child_count / 2) {</div><div class='del'>-                                src = i;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+afr_selfheal_gfid_mismatch_by_majority(struct afr_reply *replies,</div><div class='add'>+                                       int child_count)</div><div class='add'>+{</div><div class='add'>+    int j = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int src = -1;</div><div class='add'>+    int votes[child_count];</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        votes[i] = 1;</div><div class='add'>+        for (j = i + 1; j &lt; child_count; j++) {</div><div class='add'>+            if ((!gf_uuid_compare(replies[i].poststat.ia_gfid,</div><div class='add'>+                                  replies[j].poststat.ia_gfid)))</div><div class='add'>+                votes[i]++;</div><div class='add'>+            if (votes[i] &gt; child_count / 2) {</div><div class='add'>+                src = i;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return src;</div><div class='add'>+    return src;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int afr_gfid_sbrain_source_from_bigger_file (struct afr_reply *replies,</div><div class='del'>-                                             int child_count)</div><div class='add'>+int</div><div class='add'>+afr_gfid_sbrain_source_from_bigger_file(struct afr_reply *replies,</div><div class='add'>+                                        int child_count)</div><div class='ctx'> {</div><div class='del'>-        int       i       = 0;</div><div class='del'>-        int       src     = -1;</div><div class='del'>-        uint64_t  size    = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int src = -1;</div><div class='add'>+    uint64_t size = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-                if (size &lt; replies[i].poststat.ia_size) {</div><div class='del'>-                        src = i;</div><div class='del'>-                        size = replies[i].poststat.ia_size;</div><div class='del'>-                } else if (replies[i].poststat.ia_size == size) {</div><div class='del'>-                        src = -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return src;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int afr_gfid_sbrain_source_from_latest_mtime (struct afr_reply *replies,</div><div class='del'>-                                              int child_count)</div><div class='del'>-{</div><div class='del'>-        int       i             = 0;</div><div class='del'>-        int       src           = -1;</div><div class='del'>-        uint32_t  mtime         = 0;</div><div class='del'>-        uint32_t  mtime_nsec    = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if ((mtime &lt; replies[i].poststat.ia_mtime) ||</div><div class='del'>-                    ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='del'>-                     (mtime_nsec &lt; replies[i].poststat.ia_mtime_nsec))) {</div><div class='del'>-                        src = i;</div><div class='del'>-                        mtime = replies[i].poststat.ia_mtime;</div><div class='del'>-                        mtime_nsec = replies[i].poststat.ia_mtime_nsec;</div><div class='del'>-                } else if ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='del'>-                           (mtime_nsec == replies[i].poststat.ia_mtime_nsec)) {</div><div class='del'>-                        src = -1;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+        if (size &lt; replies[i].poststat.ia_size) {</div><div class='add'>+            src = i;</div><div class='add'>+            size = replies[i].poststat.ia_size;</div><div class='add'>+        } else if (replies[i].poststat.ia_size == size) {</div><div class='add'>+            src = -1;</div><div class='ctx'>         }</div><div class='del'>-        return src;</div><div class='add'>+    }</div><div class='add'>+    return src;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_gfid_split_brain_source (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                             inode_t *inode, uuid_t pargfid, const char *bname,</div><div class='del'>-                             int src_idx, int child_idx,</div><div class='del'>-                             unsigned char *locked_on, int *src, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        afr_private_t   *priv      = NULL;</div><div class='del'>-        char             g1[64]    = {0,};</div><div class='del'>-        char             g2[64]    = {0,};</div><div class='del'>-        int              up_count  = 0;</div><div class='del'>-        int              heal_op   = -1;</div><div class='del'>-        int              ret       = -1;</div><div class='del'>-        char            *src_brick = NULL;</div><div class='del'>-</div><div class='del'>-        *src = -1;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        up_count = AFR_COUNT (locked_on, priv-&gt;child_count);</div><div class='del'>-        if (up_count != priv-&gt;child_count) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='del'>-                        "All the bricks should be up to resolve the gfid split "</div><div class='del'>-                        "barin");</div><div class='del'>-                if (xdata) {</div><div class='del'>-                        ret = dict_set_str (xdata, "gfid-heal-msg", "All the "</div><div class='del'>-                                            "bricks should be up to resolve the"</div><div class='del'>-                                            " gfid split barin");</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        AFR_MSG_DICT_SET_FAILED, "Error setting"</div><div class='del'>-                                        " gfid-heal-msg dict");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+afr_gfid_sbrain_source_from_latest_mtime(struct afr_reply *replies,</div><div class='add'>+                                         int child_count)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int src = -1;</div><div class='add'>+    uint32_t mtime = 0;</div><div class='add'>+    uint32_t mtime_nsec = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='add'>+        if ((mtime &lt; replies[i].poststat.ia_mtime) ||</div><div class='add'>+            ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='add'>+             (mtime_nsec &lt; replies[i].poststat.ia_mtime_nsec))) {</div><div class='add'>+            src = i;</div><div class='add'>+            mtime = replies[i].poststat.ia_mtime;</div><div class='add'>+            mtime_nsec = replies[i].poststat.ia_mtime_nsec;</div><div class='add'>+        } else if ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='add'>+                   (mtime_nsec == replies[i].poststat.ia_mtime_nsec)) {</div><div class='add'>+            src = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    return src;</div><div class='add'>+}</div><div class='ctx'> </div><div class='add'>+int</div><div class='add'>+afr_gfid_split_brain_source(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                            inode_t *inode, uuid_t pargfid, const char *bname,</div><div class='add'>+                            int src_idx, int child_idx,</div><div class='add'>+                            unsigned char *locked_on, int *src, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    char g1[64] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char g2[64] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int up_count = 0;</div><div class='add'>+    int heal_op = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *src_brick = NULL;</div><div class='add'>+</div><div class='add'>+    *src = -1;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    up_count = AFR_COUNT(locked_on, priv-&gt;child_count);</div><div class='add'>+    if (up_count != priv-&gt;child_count) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+               "All the bricks should be up to resolve the gfid split "</div><div class='add'>+               "barin");</div><div class='ctx'>         if (xdata) {</div><div class='del'>-                ret = dict_get_int32 (xdata, "heal-op", &amp;heal_op);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto fav_child;</div><div class='del'>-        } else {</div><div class='del'>-                goto fav_child;</div><div class='add'>+            ret = dict_set_str(xdata, "gfid-heal-msg",</div><div class='add'>+                               "All the "</div><div class='add'>+                               "bricks should be up to resolve the"</div><div class='add'>+                               " gfid split barin");</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Error setting"</div><div class='add'>+                       " gfid-heal-msg dict");</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (heal_op) {</div><div class='add'>+    if (xdata) {</div><div class='add'>+        ret = dict_get_int32(xdata, "heal-op", &amp;heal_op);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto fav_child;</div><div class='add'>+    } else {</div><div class='add'>+        goto fav_child;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (heal_op) {</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:</div><div class='del'>-                *src = afr_gfid_sbrain_source_from_bigger_file (replies,</div><div class='del'>-                                                                priv-&gt;child_count);</div><div class='del'>-                if (*src == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "No bigger file");</div><div class='del'>-                        if (xdata) {</div><div class='del'>-                                ret = dict_set_str (xdata, "gfid-heal-msg",</div><div class='del'>-                                                    "No bigger file");</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                AFR_MSG_DICT_SET_FAILED, "Error"</div><div class='del'>-                                                " setting gfid-heal-msg dict");</div><div class='del'>-                        }</div><div class='add'>+            *src = afr_gfid_sbrain_source_from_bigger_file(replies,</div><div class='add'>+                                                           priv-&gt;child_count);</div><div class='add'>+            if (*src == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "No bigger file");</div><div class='add'>+                if (xdata) {</div><div class='add'>+                    ret = dict_set_str(xdata, "gfid-heal-msg",</div><div class='add'>+                                       "No bigger file");</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                               AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "Error"</div><div class='add'>+                               " setting gfid-heal-msg dict");</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME:</div><div class='del'>-                *src = afr_gfid_sbrain_source_from_latest_mtime (replies,</div><div class='del'>-                                                                 priv-&gt;child_count);</div><div class='del'>-                if (*src == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "No difference in mtime");</div><div class='del'>-                        if (xdata) {</div><div class='del'>-                                ret = dict_set_str (xdata, "gfid-heal-msg",</div><div class='del'>-                                                    "No difference in mtime");</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                AFR_MSG_DICT_SET_FAILED, "Error"</div><div class='del'>-                                                "setting gfid-heal-msg dict");</div><div class='del'>-                        }</div><div class='add'>+            *src = afr_gfid_sbrain_source_from_latest_mtime(replies,</div><div class='add'>+                                                            priv-&gt;child_count);</div><div class='add'>+            if (*src == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "No difference in mtime");</div><div class='add'>+                if (xdata) {</div><div class='add'>+                    ret = dict_set_str(xdata, "gfid-heal-msg",</div><div class='add'>+                                       "No difference in mtime");</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                               AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "Error"</div><div class='add'>+                               "setting gfid-heal-msg dict");</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='del'>-                ret = dict_get_str (xdata, "child-name", &amp;src_brick);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "Error getting the source "</div><div class='del'>-                                "brick");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                *src = afr_gfid_sbrain_source_from_src_brick (this, replies,</div><div class='del'>-                                                              src_brick);</div><div class='del'>-                if (*src == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "Error getting the source "</div><div class='del'>-                                "brick");</div><div class='del'>-                        if (xdata) {</div><div class='del'>-                                ret = dict_set_str (xdata, "gfid-heal-msg",</div><div class='del'>-                                                    "Error getting the source "</div><div class='del'>-                                                    "brick");</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                AFR_MSG_DICT_SET_FAILED, "Error"</div><div class='del'>-                                                " setting gfid-heal-msg dict");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            ret = dict_get_str(xdata, "child-name", &amp;src_brick);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "Error getting the source "</div><div class='add'>+                       "brick");</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+            *src = afr_gfid_sbrain_source_from_src_brick(this, replies,</div><div class='add'>+                                                         src_brick);</div><div class='add'>+            if (*src == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "Error getting the source "</div><div class='add'>+                       "brick");</div><div class='add'>+                if (xdata) {</div><div class='add'>+                    ret = dict_set_str(xdata, "gfid-heal-msg",</div><div class='add'>+                                       "Error getting the source "</div><div class='add'>+                                       "brick");</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                               AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "Error"</div><div class='add'>+                               " setting gfid-heal-msg dict");</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        goto out;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='ctx'> fav_child:</div><div class='del'>-        switch (priv-&gt;fav_child_policy) {</div><div class='add'>+    switch (priv-&gt;fav_child_policy) {</div><div class='ctx'>         case AFR_FAV_CHILD_BY_SIZE:</div><div class='del'>-                *src = afr_sh_fav_by_size (this, replies, inode);</div><div class='del'>-                break;</div><div class='add'>+            *src = afr_sh_fav_by_size(this, replies, inode);</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_BY_MTIME:</div><div class='del'>-                *src = afr_sh_fav_by_mtime (this, replies, inode);</div><div class='del'>-                break;</div><div class='add'>+            *src = afr_sh_fav_by_mtime(this, replies, inode);</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_BY_CTIME:</div><div class='del'>-                *src = afr_sh_fav_by_ctime(this, replies, inode);</div><div class='del'>-                break;</div><div class='add'>+            *src = afr_sh_fav_by_ctime(this, replies, inode);</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_BY_MAJORITY:</div><div class='del'>-                if (priv-&gt;child_count != 2)</div><div class='del'>-                        *src = afr_selfheal_gfid_mismatch_by_majority (replies,</div><div class='del'>-                                                                       priv-&gt;child_count);</div><div class='del'>-                else</div><div class='del'>-                        *src = -1;</div><div class='del'>-</div><div class='del'>-                if (*src == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "No majority to resolve "</div><div class='del'>-                                "gfid split brain");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (priv-&gt;child_count != 2)</div><div class='add'>+                *src = afr_selfheal_gfid_mismatch_by_majority(</div><div class='add'>+                    replies, priv-&gt;child_count);</div><div class='add'>+            else</div><div class='add'>+                *src = -1;</div><div class='add'>+</div><div class='add'>+            if (*src == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "No majority to resolve "</div><div class='add'>+                       "gfid split brain");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (*src == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='del'>-                        "Gfid mismatch detected for &lt;gfid:%s&gt;/%s&gt;, %s on %s and"</div><div class='del'>-                        " %s on %s.", uuid_utoa (pargfid), bname,</div><div class='del'>-                        uuid_utoa_r (replies[child_idx].poststat.ia_gfid, g1),</div><div class='del'>-                        priv-&gt;children[child_idx]-&gt;name,</div><div class='del'>-                        uuid_utoa_r (replies[src_idx].poststat.ia_gfid, g2),</div><div class='del'>-                        priv-&gt;children[src_idx]-&gt;name);</div><div class='del'>-                gf_event (EVENT_AFR_SPLIT_BRAIN, "subvol=%s;type=gfid;file="</div><div class='del'>-                          "&lt;gfid:%s&gt;/%s&gt;;count=2;child-%d=%s;gfid-%d=%s;"</div><div class='del'>-                          "child-%d=%s;gfid-%d=%s", this-&gt;name,</div><div class='del'>-                          uuid_utoa (pargfid), bname, child_idx,</div><div class='del'>-                          priv-&gt;children[child_idx]-&gt;name, child_idx,</div><div class='del'>-                          uuid_utoa_r (replies[child_idx].poststat.ia_gfid, g1),</div><div class='del'>-                          src_idx, priv-&gt;children[src_idx]-&gt;name, src_idx,</div><div class='del'>-                          uuid_utoa_r (replies[src_idx].poststat.ia_gfid, g2));</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (*src == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+               "Gfid mismatch detected for &lt;gfid:%s&gt;/%s&gt;, %s on %s and"</div><div class='add'>+               " %s on %s.",</div><div class='add'>+               uuid_utoa(pargfid), bname,</div><div class='add'>+               uuid_utoa_r(replies[child_idx].poststat.ia_gfid, g1),</div><div class='add'>+               priv-&gt;children[child_idx]-&gt;name,</div><div class='add'>+               uuid_utoa_r(replies[src_idx].poststat.ia_gfid, g2),</div><div class='add'>+               priv-&gt;children[src_idx]-&gt;name);</div><div class='add'>+        gf_event(EVENT_AFR_SPLIT_BRAIN,</div><div class='add'>+                 "subvol=%s;type=gfid;file="</div><div class='add'>+                 "&lt;gfid:%s&gt;/%s&gt;;count=2;child-%d=%s;gfid-%d=%s;"</div><div class='add'>+                 "child-%d=%s;gfid-%d=%s",</div><div class='add'>+                 this-&gt;name, uuid_utoa(pargfid), bname, child_idx,</div><div class='add'>+                 priv-&gt;children[child_idx]-&gt;name, child_idx,</div><div class='add'>+                 uuid_utoa_r(replies[child_idx].poststat.ia_gfid, g1), src_idx,</div><div class='add'>+                 priv-&gt;children[src_idx]-&gt;name, src_idx,</div><div class='add'>+                 uuid_utoa_r(replies[src_idx].poststat.ia_gfid, g2));</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_post_op_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-			  int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_selfheal_post_op_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-	syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_post_op (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-		      int subvol, dict_t *xattr, dict_t *xdata)</div><div class='add'>+afr_selfheal_post_op(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                     int subvol, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-        int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND (frame, afr_selfheal_post_op_cbk, priv-&gt;children[subvol],</div><div class='del'>-		    priv-&gt;children[subvol]-&gt;fops-&gt;xattrop, &amp;loc,</div><div class='del'>-		    GF_XATTROP_ADD_ARRAY, xattr, xdata);</div><div class='add'>+    STACK_WIND(frame, afr_selfheal_post_op_cbk, priv-&gt;children[subvol],</div><div class='add'>+               priv-&gt;children[subvol]-&gt;fops-&gt;xattrop, &amp;loc,</div><div class='add'>+               GF_XATTROP_ADD_ARRAY, xattr, xdata);</div><div class='ctx'> </div><div class='del'>-	syncbarrier_wait (&amp;local-&gt;barrier, 1);</div><div class='del'>-        if (local-&gt;op_ret &lt; 0)</div><div class='del'>-                ret = -local-&gt;op_errno;</div><div class='add'>+    syncbarrier_wait(&amp;local-&gt;barrier, 1);</div><div class='add'>+    if (local-&gt;op_ret &lt; 0)</div><div class='add'>+        ret = -local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_check_stale_error (struct afr_reply *replies, afr_private_t *priv)</div><div class='add'>+afr_check_stale_error(struct afr_reply *replies, afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        int tmp_errno = 0;</div><div class='del'>-        int stale_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int tmp_errno = 0;</div><div class='add'>+    int stale_count = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                tmp_errno = replies[i].op_errno;</div><div class='del'>-                if (tmp_errno == ENOENT || tmp_errno == ESTALE) {</div><div class='del'>-                        op_errno = afr_higher_errno (op_errno, tmp_errno);</div><div class='del'>-                        stale_count++;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        tmp_errno = replies[i].op_errno;</div><div class='add'>+        if (tmp_errno == ENOENT || tmp_errno == ESTALE) {</div><div class='add'>+            op_errno = afr_higher_errno(op_errno, tmp_errno);</div><div class='add'>+            stale_count++;</div><div class='ctx'>         }</div><div class='del'>-        if (stale_count != priv-&gt;child_count)</div><div class='del'>-                return -ENOTCONN;</div><div class='del'>-        else</div><div class='del'>-                return -op_errno;</div><div class='add'>+    }</div><div class='add'>+    if (stale_count != priv-&gt;child_count)</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    else</div><div class='add'>+        return -op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_sh_generic_fop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-          int op_ret, int op_errno, struct iatt *pre, struct iatt *post,</div><div class='del'>-          dict_t *xdata)</div><div class='add'>+afr_sh_generic_fop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, struct iatt *pre,</div><div class='add'>+                       struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int i = (long) cookie;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    int i = (long)cookie;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;replies[i].valid = 1;</div><div class='del'>-        local-&gt;replies[i].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[i].op_errno = op_errno;</div><div class='del'>-        if (pre)</div><div class='del'>-                local-&gt;replies[i].prestat = *pre;</div><div class='del'>-        if (post)</div><div class='del'>-                local-&gt;replies[i].poststat = *post;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;replies[i].xdata = dict_ref (xdata);</div><div class='add'>+    local-&gt;replies[i].valid = 1;</div><div class='add'>+    local-&gt;replies[i].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[i].op_errno = op_errno;</div><div class='add'>+    if (pre)</div><div class='add'>+        local-&gt;replies[i].prestat = *pre;</div><div class='add'>+    if (post)</div><div class='add'>+        local-&gt;replies[i].poststat = *post;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;replies[i].xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_restore_time (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-                           int source, unsigned char *healed_sinks,</div><div class='del'>-                           struct afr_reply *replies)</div><div class='add'>+afr_selfheal_restore_time(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                          int source, unsigned char *healed_sinks,</div><div class='add'>+                          struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0, };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        AFR_ONLIST (healed_sinks, frame, afr_sh_generic_fop_cbk, setattr, &amp;loc,</div><div class='del'>-                    &amp;replies[source].poststat,</div><div class='del'>-                    (GF_SET_ATTR_ATIME|GF_SET_ATTR_MTIME), NULL);</div><div class='add'>+    AFR_ONLIST(healed_sinks, frame, afr_sh_generic_fop_cbk, setattr, &amp;loc,</div><div class='add'>+               &amp;replies[source].poststat,</div><div class='add'>+               (GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME), NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dict_t *</div><div class='del'>-afr_selfheal_output_xattr (xlator_t *this, gf_boolean_t is_full_crawl,</div><div class='del'>-                           afr_transaction_type type, int *output_dirty,</div><div class='del'>-                           int **output_matrix, int subvol,</div><div class='del'>-                           int **full_heal_mtx_out)</div><div class='del'>-{</div><div class='del'>-	int                j     = 0;</div><div class='del'>-	int                idx   = 0;</div><div class='del'>-	int                d_idx = 0;</div><div class='del'>-	int                ret   = 0;</div><div class='del'>-	int               *raw   = 0;</div><div class='del'>-	dict_t            *xattr = NULL;</div><div class='del'>-	afr_private_t     *priv  = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	idx = afr_index_for_transaction_type (type);</div><div class='del'>-        d_idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);</div><div class='del'>-</div><div class='del'>-	xattr = dict_new ();</div><div class='del'>-	if (!xattr)</div><div class='del'>-		return NULL;</div><div class='del'>-</div><div class='del'>-	/* clear dirty */</div><div class='del'>-	raw = GF_CALLOC (sizeof(int), AFR_NUM_CHANGE_LOGS, gf_afr_mt_int32_t);</div><div class='del'>-	if (!raw)</div><div class='del'>-		goto err;</div><div class='del'>-</div><div class='del'>-	raw[idx] = hton32 (output_dirty[subvol]);</div><div class='del'>-	ret = dict_set_bin (xattr, AFR_DIRTY, raw,</div><div class='del'>-			    sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='del'>-	if (ret) {</div><div class='del'>-                GF_FREE (raw);</div><div class='del'>-		goto err;</div><div class='del'>-        }</div><div class='add'>+afr_selfheal_output_xattr(xlator_t *this, gf_boolean_t is_full_crawl,</div><div class='add'>+                          afr_transaction_type type, int *output_dirty,</div><div class='add'>+                          int **output_matrix, int subvol,</div><div class='add'>+                          int **full_heal_mtx_out)</div><div class='add'>+{</div><div class='add'>+    int j = 0;</div><div class='add'>+    int idx = 0;</div><div class='add'>+    int d_idx = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int *raw = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    idx = afr_index_for_transaction_type(type);</div><div class='add'>+    d_idx = afr_index_for_transaction_type(AFR_DATA_TRANSACTION);</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	/* clear/set pending */</div><div class='del'>-	for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='del'>-		raw = GF_CALLOC (sizeof(int), AFR_NUM_CHANGE_LOGS,</div><div class='del'>-				 gf_afr_mt_int32_t);</div><div class='del'>-		if (!raw)</div><div class='del'>-			goto err;</div><div class='del'>-</div><div class='del'>-		raw[idx] = hton32 (output_matrix[subvol][j]);</div><div class='del'>-                if (is_full_crawl)</div><div class='del'>-                        raw[d_idx] = hton32 (full_heal_mtx_out[subvol][j]);</div><div class='del'>-</div><div class='del'>-		ret = dict_set_bin (xattr, priv-&gt;pending_key[j],</div><div class='del'>-				    raw, sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='del'>-		if (ret) {</div><div class='del'>-                        GF_FREE (raw);</div><div class='del'>-			goto err;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+    /* clear dirty */</div><div class='add'>+    raw = GF_CALLOC(sizeof(int), AFR_NUM_CHANGE_LOGS, gf_afr_mt_int32_t);</div><div class='add'>+    if (!raw)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    raw[idx] = hton32(output_dirty[subvol]);</div><div class='add'>+    ret = dict_set_bin(xattr, AFR_DIRTY, raw,</div><div class='add'>+                       sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(raw);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* clear/set pending */</div><div class='add'>+    for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='add'>+        raw = GF_CALLOC(sizeof(int), AFR_NUM_CHANGE_LOGS, gf_afr_mt_int32_t);</div><div class='add'>+        if (!raw)</div><div class='add'>+            goto err;</div><div class='add'>+</div><div class='add'>+        raw[idx] = hton32(output_matrix[subvol][j]);</div><div class='add'>+        if (is_full_crawl)</div><div class='add'>+            raw[d_idx] = hton32(full_heal_mtx_out[subvol][j]);</div><div class='add'>+</div><div class='add'>+        ret = dict_set_bin(xattr, priv-&gt;pending_key[j], raw,</div><div class='add'>+                           sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='add'>+        if (ret) {</div><div class='add'>+            GF_FREE(raw);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return xattr;</div><div class='add'>+    return xattr;</div><div class='ctx'> err:</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref (xattr);</div><div class='del'>-	return NULL;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_undo_pending (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-			   unsigned char *sources, unsigned char *sinks,</div><div class='del'>-			   unsigned char *healed_sinks,</div><div class='del'>-                           unsigned char *undid_pending,</div><div class='del'>-                           afr_transaction_type type, struct afr_reply *replies,</div><div class='del'>-                           unsigned char *locked_on)</div><div class='del'>-{</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int j = 0;</div><div class='del'>-	unsigned char *pending = NULL;</div><div class='del'>-	int *input_dirty = NULL;</div><div class='del'>-	int **input_matrix = NULL;</div><div class='del'>-	int **full_heal_mtx_in = NULL;</div><div class='del'>-	int **full_heal_mtx_out = NULL;</div><div class='del'>-	int *output_dirty = NULL;</div><div class='del'>-	int **output_matrix = NULL;</div><div class='del'>-	dict_t *xattr = NULL;</div><div class='del'>-	dict_t *xdata = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	input_dirty = alloca0 (priv-&gt;child_count * sizeof (int));</div><div class='del'>-	input_matrix = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='del'>-	full_heal_mtx_in = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='del'>-	full_heal_mtx_out = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='del'>-	output_dirty = alloca0 (priv-&gt;child_count * sizeof (int));</div><div class='del'>-	output_matrix = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                return -1;</div><div class='add'>+afr_selfheal_undo_pending(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                          unsigned char *sources, unsigned char *sinks,</div><div class='add'>+                          unsigned char *healed_sinks,</div><div class='add'>+                          unsigned char *undid_pending,</div><div class='add'>+                          afr_transaction_type type, struct afr_reply *replies,</div><div class='add'>+                          unsigned char *locked_on)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    unsigned char *pending = NULL;</div><div class='add'>+    int *input_dirty = NULL;</div><div class='add'>+    int **input_matrix = NULL;</div><div class='add'>+    int **full_heal_mtx_in = NULL;</div><div class='add'>+    int **full_heal_mtx_out = NULL;</div><div class='add'>+    int *output_dirty = NULL;</div><div class='add'>+    int **output_matrix = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    pending = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    input_dirty = alloca0(priv-&gt;child_count * sizeof(int));</div><div class='add'>+    input_matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+    full_heal_mtx_in = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+    full_heal_mtx_out = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+    output_dirty = alloca0(priv-&gt;child_count * sizeof(int));</div><div class='add'>+    output_matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	afr_selfheal_extract_xattr (this, replies, type, input_dirty,</div><div class='del'>-				    input_matrix);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;need_full_crawl)</div><div class='del'>-                afr_selfheal_extract_xattr (this, replies, AFR_DATA_TRANSACTION,</div><div class='del'>-                                            NULL, full_heal_mtx_in);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-		if (sinks[i] &amp;&amp; !healed_sinks[i])</div><div class='del'>-			pending[i] = 1;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='del'>-			if (pending[j]) {</div><div class='del'>-				output_matrix[i][j] = 1;</div><div class='del'>-                                if (type == AFR_ENTRY_TRANSACTION)</div><div class='del'>-                                        full_heal_mtx_out[i][j] = 1;</div><div class='del'>-			} else if (locked_on[j]) {</div><div class='del'>-				output_matrix[i][j] = -input_matrix[i][j];</div><div class='del'>-                                if (type == AFR_ENTRY_TRANSACTION)</div><div class='del'>-                                        full_heal_mtx_out[i][j] = -full_heal_mtx_in[i][j];</div><div class='del'>-                        }</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!pending[i])</div><div class='del'>-			output_dirty[i] = -input_dirty[i];</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!locked_on[i])</div><div class='del'>-			/* perform post-op only on subvols we had locked</div><div class='del'>-			   and inspected on.</div><div class='del'>-			*/</div><div class='del'>-			continue;</div><div class='del'>-                if (undid_pending[i])</div><div class='del'>-                        /* We already unset the pending xattrs in</div><div class='del'>-                         * _afr_fav_child_reset_sink_xattrs(). */</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-		xattr = afr_selfheal_output_xattr (this, local-&gt;need_full_crawl,</div><div class='del'>-                                                   type, output_dirty,</div><div class='del'>-                                                   output_matrix, i,</div><div class='del'>-                                                   full_heal_mtx_out);</div><div class='del'>-		if (!xattr) {</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                if ((type == AFR_ENTRY_TRANSACTION) &amp;&amp; (priv-&gt;esh_granular)) {</div><div class='del'>-                        if (xdata &amp;&amp;</div><div class='del'>-                            dict_set_int8 (xdata, GF_XATTROP_PURGE_INDEX, 1))</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        AFR_MSG_DICT_SET_FAILED, "Failed to set"</div><div class='del'>-                                        " dict value for %s",</div><div class='del'>-                                        GF_XATTROP_PURGE_INDEX);</div><div class='del'>-                }</div><div class='add'>+    afr_selfheal_extract_xattr(this, replies, type, input_dirty, input_matrix);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;need_full_crawl)</div><div class='add'>+        afr_selfheal_extract_xattr(this, replies, AFR_DATA_TRANSACTION, NULL,</div><div class='add'>+                                   full_heal_mtx_in);</div><div class='ctx'> </div><div class='del'>-		afr_selfheal_post_op (frame, this, inode, i, xattr, xdata);</div><div class='del'>-		dict_unref (xattr);</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (sinks[i] &amp;&amp; !healed_sinks[i])</div><div class='add'>+            pending[i] = 1;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='add'>+            if (pending[j]) {</div><div class='add'>+                output_matrix[i][j] = 1;</div><div class='add'>+                if (type == AFR_ENTRY_TRANSACTION)</div><div class='add'>+                    full_heal_mtx_out[i][j] = 1;</div><div class='add'>+            } else if (locked_on[j]) {</div><div class='add'>+                output_matrix[i][j] = -input_matrix[i][j];</div><div class='add'>+                if (type == AFR_ENTRY_TRANSACTION)</div><div class='add'>+                    full_heal_mtx_out[i][j] = -full_heal_mtx_in[i][j];</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!pending[i])</div><div class='add'>+            output_dirty[i] = -input_dirty[i];</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!locked_on[i])</div><div class='add'>+            /* perform post-op only on subvols we had locked</div><div class='add'>+               and inspected on.</div><div class='add'>+            */</div><div class='add'>+            continue;</div><div class='add'>+        if (undid_pending[i])</div><div class='add'>+            /* We already unset the pending xattrs in</div><div class='add'>+             * _afr_fav_child_reset_sink_xattrs(). */</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        xattr = afr_selfheal_output_xattr(this, local-&gt;need_full_crawl, type,</div><div class='add'>+                                          output_dirty, output_matrix, i,</div><div class='add'>+                                          full_heal_mtx_out);</div><div class='add'>+        if (!xattr) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if ((type == AFR_ENTRY_TRANSACTION) &amp;&amp; (priv-&gt;esh_granular)) {</div><div class='add'>+            if (xdata &amp;&amp; dict_set_int8(xdata, GF_XATTROP_PURGE_INDEX, 1))</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set"</div><div class='add'>+                       " dict value for %s",</div><div class='add'>+                       GF_XATTROP_PURGE_INDEX);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        afr_selfheal_post_op(frame, this, inode, i, xattr, xdata);</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_reply_copy (struct afr_reply *dst, struct afr_reply *src)</div><div class='del'>-{</div><div class='del'>-	dict_t *xdata = NULL;</div><div class='del'>-</div><div class='del'>-        dst-&gt;valid = src-&gt;valid;</div><div class='del'>-	dst-&gt;op_ret = src-&gt;op_ret;</div><div class='del'>-	dst-&gt;op_errno = src-&gt;op_errno;</div><div class='del'>-	dst-&gt;prestat = src-&gt;prestat;</div><div class='del'>-	dst-&gt;poststat = src-&gt;poststat;</div><div class='del'>-	dst-&gt;preparent = src-&gt;preparent;</div><div class='del'>-	dst-&gt;postparent = src-&gt;postparent;</div><div class='del'>-	dst-&gt;preparent2 = src-&gt;preparent2;</div><div class='del'>-	dst-&gt;postparent2 = src-&gt;postparent2;</div><div class='del'>-	if (src-&gt;xdata)</div><div class='del'>-		xdata = dict_ref (src-&gt;xdata);</div><div class='del'>-	else</div><div class='del'>-		xdata = NULL;</div><div class='del'>-	if (dst-&gt;xdata)</div><div class='del'>-		dict_unref (dst-&gt;xdata);</div><div class='del'>-	dst-&gt;xdata = xdata;</div><div class='del'>-        if (xdata &amp;&amp; dict_get_str_boolean (xdata, "fips-mode-rchecksum",</div><div class='del'>-            _gf_false) == _gf_true) {</div><div class='del'>-                memcpy (dst-&gt;checksum, src-&gt;checksum, SHA256_DIGEST_LENGTH);</div><div class='del'>-        } else {</div><div class='del'>-                memcpy (dst-&gt;checksum, src-&gt;checksum, MD5_DIGEST_LENGTH);</div><div class='del'>-        }</div><div class='del'>-        dst-&gt;fips_mode_rchecksum = src-&gt;fips_mode_rchecksum;</div><div class='add'>+afr_reply_copy(struct afr_reply *dst, struct afr_reply *src)</div><div class='add'>+{</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+</div><div class='add'>+    dst-&gt;valid = src-&gt;valid;</div><div class='add'>+    dst-&gt;op_ret = src-&gt;op_ret;</div><div class='add'>+    dst-&gt;op_errno = src-&gt;op_errno;</div><div class='add'>+    dst-&gt;prestat = src-&gt;prestat;</div><div class='add'>+    dst-&gt;poststat = src-&gt;poststat;</div><div class='add'>+    dst-&gt;preparent = src-&gt;preparent;</div><div class='add'>+    dst-&gt;postparent = src-&gt;postparent;</div><div class='add'>+    dst-&gt;preparent2 = src-&gt;preparent2;</div><div class='add'>+    dst-&gt;postparent2 = src-&gt;postparent2;</div><div class='add'>+    if (src-&gt;xdata)</div><div class='add'>+        xdata = dict_ref(src-&gt;xdata);</div><div class='add'>+    else</div><div class='add'>+        xdata = NULL;</div><div class='add'>+    if (dst-&gt;xdata)</div><div class='add'>+        dict_unref(dst-&gt;xdata);</div><div class='add'>+    dst-&gt;xdata = xdata;</div><div class='add'>+    if (xdata &amp;&amp; dict_get_str_boolean(xdata, "fips-mode-rchecksum",</div><div class='add'>+                                      _gf_false) == _gf_true) {</div><div class='add'>+        memcpy(dst-&gt;checksum, src-&gt;checksum, SHA256_DIGEST_LENGTH);</div><div class='add'>+    } else {</div><div class='add'>+        memcpy(dst-&gt;checksum, src-&gt;checksum, MD5_DIGEST_LENGTH);</div><div class='add'>+    }</div><div class='add'>+    dst-&gt;fips_mode_rchecksum = src-&gt;fips_mode_rchecksum;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_replies_copy (struct afr_reply *dst, struct afr_reply *src, int count)</div><div class='add'>+afr_replies_copy(struct afr_reply *dst, struct afr_reply *src, int count)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-	if (dst == src)</div><div class='del'>-		return;</div><div class='add'>+    if (dst == src)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; count; i++) {</div><div class='del'>-                afr_reply_copy (&amp;dst[i], &amp;src[i]);</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        afr_reply_copy(&amp;dst[i], &amp;src[i]);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_fill_dirty (xlator_t *this, int *dirty, int subvol,</div><div class='del'>-			 int idx, dict_t *xdata)</div><div class='add'>+afr_selfheal_fill_dirty(xlator_t *this, int *dirty, int subvol, int idx,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	void *pending_raw = NULL;</div><div class='del'>-	int pending[3] = {0, };</div><div class='add'>+    void *pending_raw = NULL;</div><div class='add'>+    int pending[3] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!dirty)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!dirty)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	if (dict_get_ptr (xdata, AFR_DIRTY, &amp;pending_raw))</div><div class='del'>-		return -1;</div><div class='add'>+    if (dict_get_ptr(xdata, AFR_DIRTY, &amp;pending_raw))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	if (!pending_raw)</div><div class='del'>-		return -1;</div><div class='add'>+    if (!pending_raw)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-	memcpy (pending, pending_raw, sizeof(pending));</div><div class='add'>+    memcpy(pending, pending_raw, sizeof(pending));</div><div class='ctx'> </div><div class='del'>-	dirty[subvol] = ntoh32 (pending[idx]);</div><div class='add'>+    dirty[subvol] = ntoh32(pending[idx]);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_fill_matrix (xlator_t *this, int **matrix, int subvol,</div><div class='del'>-			  int idx, dict_t *xdata)</div><div class='add'>+afr_selfheal_fill_matrix(xlator_t *this, int **matrix, int subvol, int idx,</div><div class='add'>+                         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	void *pending_raw = NULL;</div><div class='del'>-	int pending[3] = {0, };</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    void *pending_raw = NULL;</div><div class='add'>+    int pending[3] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!matrix)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!matrix)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (dict_get_ptr (xdata, priv-&gt;pending_key[i], &amp;pending_raw))</div><div class='del'>-			continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (dict_get_ptr(xdata, priv-&gt;pending_key[i], &amp;pending_raw))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		if (!pending_raw)</div><div class='del'>-			continue;</div><div class='add'>+        if (!pending_raw)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		memcpy (pending, pending_raw, sizeof(pending));</div><div class='add'>+        memcpy(pending, pending_raw, sizeof(pending));</div><div class='ctx'> </div><div class='del'>-		matrix[subvol][i] = ntoh32 (pending[idx]);</div><div class='del'>-	}</div><div class='add'>+        matrix[subvol][i] = ntoh32(pending[idx]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_extract_xattr (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-			    afr_transaction_type type, int *dirty, int **matrix)</div><div class='add'>+afr_selfheal_extract_xattr(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                           afr_transaction_type type, int *dirty, int **matrix)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	dict_t *xdata = NULL;</div><div class='del'>-	int idx = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int idx = -1;</div><div class='ctx'> </div><div class='del'>-	idx = afr_index_for_transaction_type (type);</div><div class='add'>+    idx = afr_index_for_transaction_type(type);</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		if (!replies[i].xdata)</div><div class='del'>-			continue;</div><div class='add'>+        if (!replies[i].xdata)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		xdata = replies[i].xdata;</div><div class='add'>+        xdata = replies[i].xdata;</div><div class='ctx'> </div><div class='del'>-		afr_selfheal_fill_dirty (this, dirty, i, idx, xdata);</div><div class='del'>-		afr_selfheal_fill_matrix (this, matrix, i, idx, xdata);</div><div class='del'>-	}</div><div class='add'>+        afr_selfheal_fill_dirty(this, dirty, i, idx, xdata);</div><div class='add'>+        afr_selfheal_fill_matrix(this, matrix, i, idx, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -777,573 +786,547 @@ afr_selfheal_extract_xattr (xlator_t *this, struct afr_reply *replies,</div><div class='ctx'>  * This can happen if data was directly modified in the backend or for snapshots</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-afr_mark_largest_file_as_source (xlator_t *this, unsigned char *sources,</div><div class='del'>-                                 struct afr_reply *replies)</div><div class='add'>+afr_mark_largest_file_as_source(xlator_t *this, unsigned char *sources,</div><div class='add'>+                                struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        uint64_t size = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t size = 0;</div><div class='ctx'> </div><div class='del'>-        /* Find source with biggest file size */</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0) {</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (size &lt;= replies[i].poststat.ia_size) {</div><div class='del'>-                        size = replies[i].poststat.ia_size;</div><div class='del'>-                }</div><div class='add'>+    /* Find source with biggest file size */</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0) {</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Mark sources with less size as not source */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (size &gt; replies[i].poststat.ia_size)</div><div class='del'>-                        sources[i] = 0;</div><div class='add'>+        if (size &lt;= replies[i].poststat.ia_size) {</div><div class='add'>+            size = replies[i].poststat.ia_size;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Mark sources with less size as not source */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (size &gt; replies[i].poststat.ia_size)</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_mark_latest_mtime_file_as_source (xlator_t *this, unsigned char *sources,</div><div class='del'>-                                 struct afr_reply *replies)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        uint32_t mtime = 0;</div><div class='del'>-        uint32_t mtime_nsec = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0) {</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if ((mtime &lt; replies[i].poststat.ia_mtime) ||</div><div class='del'>-                    ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='del'>-                     (mtime_nsec &lt; replies[i].poststat.ia_mtime_nsec))) {</div><div class='del'>-                        mtime = replies[i].poststat.ia_mtime;</div><div class='del'>-                        mtime_nsec = replies[i].poststat.ia_mtime_nsec;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if ((mtime &gt; replies[i].poststat.ia_mtime) ||</div><div class='del'>-                    ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='del'>-                     (mtime_nsec &gt; replies[i].poststat.ia_mtime_nsec))) {</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+afr_mark_latest_mtime_file_as_source(xlator_t *this, unsigned char *sources,</div><div class='add'>+                                     struct afr_reply *replies)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint32_t mtime = 0;</div><div class='add'>+    uint32_t mtime_nsec = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0) {</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if ((mtime &lt; replies[i].poststat.ia_mtime) ||</div><div class='add'>+            ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='add'>+             (mtime_nsec &lt; replies[i].poststat.ia_mtime_nsec))) {</div><div class='add'>+            mtime = replies[i].poststat.ia_mtime;</div><div class='add'>+            mtime_nsec = replies[i].poststat.ia_mtime_nsec;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if ((mtime &gt; replies[i].poststat.ia_mtime) ||</div><div class='add'>+            ((mtime == replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='add'>+             (mtime_nsec &gt; replies[i].poststat.ia_mtime_nsec))) {</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_mark_active_sinks (xlator_t *this, unsigned char *sources,</div><div class='del'>-                       unsigned char *locked_on, unsigned char *sinks)</div><div class='add'>+afr_mark_active_sinks(xlator_t *this, unsigned char *sources,</div><div class='add'>+                      unsigned char *locked_on, unsigned char *sinks)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i] &amp;&amp; locked_on[i])</div><div class='del'>-                        sinks[i] = 1;</div><div class='del'>-                else</div><div class='del'>-                        sinks[i] = 0;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i] &amp;&amp; locked_on[i])</div><div class='add'>+            sinks[i] = 1;</div><div class='add'>+        else</div><div class='add'>+            sinks[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_dict_contains_heal_op (call_frame_t *frame)</div><div class='add'>+afr_dict_contains_heal_op(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local     = NULL;</div><div class='del'>-        dict_t        *xdata_req = NULL;</div><div class='del'>-        int            ret       = 0;</div><div class='del'>-        int            heal_op   = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    dict_t *xdata_req = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int heal_op = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        xdata_req = local-&gt;xdata_req;</div><div class='del'>-        ret = dict_get_int32 (xdata_req, "heal-op", &amp;heal_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                return _gf_false;</div><div class='del'>-        if (local-&gt;xdata_rsp == NULL) {</div><div class='del'>-                local-&gt;xdata_rsp = dict_new();</div><div class='del'>-                if (!local-&gt;xdata_rsp)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (local-&gt;xdata_rsp, "sh-fail-msg",</div><div class='del'>-                            "File not in split-brain");</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    xdata_req = local-&gt;xdata_req;</div><div class='add'>+    ret = dict_get_int32(xdata_req, "heal-op", &amp;heal_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        return _gf_false;</div><div class='add'>+    if (local-&gt;xdata_rsp == NULL) {</div><div class='add'>+        local-&gt;xdata_rsp = dict_new();</div><div class='add'>+        if (!local-&gt;xdata_rsp)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(local-&gt;xdata_rsp, "sh-fail-msg",</div><div class='add'>+                       "File not in split-brain");</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_can_decide_split_brain_source_sinks (struct afr_reply *replies,</div><div class='del'>-                                         int child_count)</div><div class='add'>+afr_can_decide_split_brain_source_sinks(struct afr_reply *replies,</div><div class='add'>+                                        int child_count)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; child_count; i++)</div><div class='del'>-                if (replies[i].valid != 1 || replies[i].op_ret != 0)</div><div class='del'>-                        return _gf_false;</div><div class='add'>+    for (i = 0; i &lt; child_count; i++)</div><div class='add'>+        if (replies[i].valid != 1 || replies[i].op_ret != 0)</div><div class='add'>+            return _gf_false;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mark_split_brain_source_sinks_by_heal_op (call_frame_t *frame,</div><div class='del'>-                                   xlator_t *this, unsigned char *sources,</div><div class='del'>-                                   unsigned char *sinks,</div><div class='del'>-                                   unsigned char *healed_sinks,</div><div class='del'>-                                   unsigned char *locked_on,</div><div class='del'>-                                   struct afr_reply *replies,</div><div class='del'>-                                   afr_transaction_type type, int heal_op)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *local     = NULL;</div><div class='del'>-        afr_private_t *priv      = NULL;</div><div class='del'>-        dict_t        *xdata_req = NULL;</div><div class='del'>-        dict_t        *xdata_rsp = NULL;</div><div class='del'>-        int            ret       = 0;</div><div class='del'>-        int            i         = 0;</div><div class='del'>-        char          *name      = NULL;</div><div class='del'>-        int            source     = -1;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        xdata_req = local-&gt;xdata_req;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (locked_on[i])</div><div class='del'>-                        if (sources[i] || !sinks[i] || !healed_sinks[i]) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-        }</div><div class='del'>-        if (local-&gt;xdata_rsp == NULL) {</div><div class='del'>-                local-&gt;xdata_rsp = dict_new();</div><div class='del'>-                if (!local-&gt;xdata_rsp) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        xdata_rsp = local-&gt;xdata_rsp;</div><div class='del'>-</div><div class='del'>-        if (!afr_can_decide_split_brain_source_sinks (replies,</div><div class='del'>-                                                      priv-&gt;child_count)) {</div><div class='del'>-                ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                    SBRAIN_HEAL_NO_GO_MSG);</div><div class='add'>+afr_mark_split_brain_source_sinks_by_heal_op(</div><div class='add'>+    call_frame_t *frame, xlator_t *this, unsigned char *sources,</div><div class='add'>+    unsigned char *sinks, unsigned char *healed_sinks, unsigned char *locked_on,</div><div class='add'>+    struct afr_reply *replies, afr_transaction_type type, int heal_op)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata_req = NULL;</div><div class='add'>+    dict_t *xdata_rsp = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    xdata_req = local-&gt;xdata_req;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (locked_on[i])</div><div class='add'>+            if (sources[i] || !sinks[i] || !healed_sinks[i]) {</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;xdata_rsp == NULL) {</div><div class='add'>+        local-&gt;xdata_rsp = dict_new();</div><div class='add'>+        if (!local-&gt;xdata_rsp) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    xdata_rsp = local-&gt;xdata_rsp;</div><div class='add'>+</div><div class='add'>+    if (!afr_can_decide_split_brain_source_sinks(replies, priv-&gt;child_count)) {</div><div class='add'>+        ret = dict_set_str(xdata_rsp, "sh-fail-msg", SBRAIN_HEAL_NO_GO_MSG);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (locked_on[i])</div><div class='del'>-                        sources[i] = 1;</div><div class='del'>-        switch (heal_op) {</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (locked_on[i])</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+    switch (heal_op) {</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BIGGER_FILE:</div><div class='del'>-                if (type == AFR_METADATA_TRANSACTION) {</div><div class='del'>-                        ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                            "Use source-brick option to"</div><div class='del'>-                                            " heal metadata split-brain");</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                afr_mark_largest_file_as_source (this, sources, replies);</div><div class='del'>-                if (AFR_COUNT (sources, priv-&gt;child_count) != 1) {</div><div class='del'>-                        ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                            "No bigger file");</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (type == AFR_METADATA_TRANSACTION) {</div><div class='add'>+                ret = dict_set_str(xdata_rsp, "sh-fail-msg",</div><div class='add'>+                                   "Use source-brick option to"</div><div class='add'>+                                   " heal metadata split-brain");</div><div class='add'>+                if (!ret)</div><div class='add'>+                    ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            afr_mark_largest_file_as_source(this, sources, replies);</div><div class='add'>+            if (AFR_COUNT(sources, priv-&gt;child_count) != 1) {</div><div class='add'>+                ret = dict_set_str(xdata_rsp, "sh-fail-msg", "No bigger file");</div><div class='add'>+                if (!ret)</div><div class='add'>+                    ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_LATEST_MTIME:</div><div class='del'>-                if (type == AFR_METADATA_TRANSACTION) {</div><div class='del'>-                        ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                            "Use source-brick option to"</div><div class='del'>-                                            " heal metadata split-brain");</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                afr_mark_latest_mtime_file_as_source (this, sources, replies);</div><div class='del'>-                if (AFR_COUNT (sources, priv-&gt;child_count) != 1) {</div><div class='del'>-                        ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                            "No difference in mtime");</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (type == AFR_METADATA_TRANSACTION) {</div><div class='add'>+                ret = dict_set_str(xdata_rsp, "sh-fail-msg",</div><div class='add'>+                                   "Use source-brick option to"</div><div class='add'>+                                   " heal metadata split-brain");</div><div class='add'>+                if (!ret)</div><div class='add'>+                    ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            afr_mark_latest_mtime_file_as_source(this, sources, replies);</div><div class='add'>+            if (AFR_COUNT(sources, priv-&gt;child_count) != 1) {</div><div class='add'>+                ret = dict_set_str(xdata_rsp, "sh-fail-msg",</div><div class='add'>+                                   "No difference in mtime");</div><div class='add'>+                if (!ret)</div><div class='add'>+                    ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK:</div><div class='del'>-                ret = dict_get_str (xdata_req, "child-name", &amp;name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                source = afr_get_child_index_from_name (this, name);</div><div class='del'>-                if (source &lt; 0) {</div><div class='del'>-                        ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                            "Invalid brick name");</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (locked_on[source] != 1) {</div><div class='del'>-                        ret = dict_set_str (xdata_rsp, "sh-fail-msg",</div><div class='del'>-                                            "Brick is not up");</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                memset (sources, 0, sizeof (*sources) * priv-&gt;child_count);</div><div class='del'>-                sources[source] = 1;</div><div class='del'>-                break;</div><div class='del'>-        default:</div><div class='del'>-                ret = -1;</div><div class='add'>+            ret = dict_get_str(xdata_req, "child-name", &amp;name);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0 ; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (sources[i]) {</div><div class='del'>-                        source = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        sinks[source] = 0;</div><div class='del'>-        healed_sinks[source] = 0;</div><div class='del'>-        ret = source;</div><div class='add'>+            source = afr_get_child_index_from_name(this, name);</div><div class='add'>+            if (source &lt; 0) {</div><div class='add'>+                ret = dict_set_str(xdata_rsp, "sh-fail-msg",</div><div class='add'>+                                   "Invalid brick name");</div><div class='add'>+                if (!ret)</div><div class='add'>+                    ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            if (locked_on[source] != 1) {</div><div class='add'>+                ret = dict_set_str(xdata_rsp, "sh-fail-msg", "Brick is not up");</div><div class='add'>+                if (!ret)</div><div class='add'>+                    ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            memset(sources, 0, sizeof(*sources) * priv-&gt;child_count);</div><div class='add'>+            sources[source] = 1;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (sources[i]) {</div><div class='add'>+            source = i;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    sinks[source] = 0;</div><div class='add'>+    healed_sinks[source] = 0;</div><div class='add'>+    ret = source;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                memset (sources, 0, sizeof (*sources) * priv-&gt;child_count);</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        memset(sources, 0, sizeof(*sources) * priv-&gt;child_count);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_sh_fav_by_majority (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                        inode_t *inode)</div><div class='del'>-{</div><div class='del'>-        afr_private_t   *priv;</div><div class='del'>-        int             vote_count = -1;</div><div class='del'>-        int             fav_child = -1;</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             k = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (replies[i].valid == 1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Child:%s "</div><div class='del'>-                                "mtime_sec = %ld, size = %lu for gfid %s",</div><div class='del'>-                                priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                replies[i].poststat.ia_mtime,</div><div class='del'>-                                replies[i].poststat.ia_size,</div><div class='del'>-                                uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                                vote_count = 0;</div><div class='del'>-                        for (k = 0; k &lt; priv-&gt;child_count; k++) {</div><div class='del'>-                                if ((replies[k].poststat.ia_mtime ==</div><div class='del'>-                                     replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='del'>-                                    (replies[k].poststat.ia_size ==</div><div class='del'>-                                     replies[i].poststat.ia_size)</div><div class='del'>-                                   ) {</div><div class='del'>-                                        vote_count++;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        if (vote_count &gt; priv-&gt;child_count/2) {</div><div class='del'>-                                fav_child = i;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+afr_sh_fav_by_majority(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                       inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv;</div><div class='add'>+    int vote_count = -1;</div><div class='add'>+    int fav_child = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int k = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid == 1) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Child:%s "</div><div class='add'>+                         "mtime_sec = %ld, size = %lu for gfid %s",</div><div class='add'>+                         priv-&gt;children[i]-&gt;name, replies[i].poststat.ia_mtime,</div><div class='add'>+                         replies[i].poststat.ia_size, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            vote_count = 0;</div><div class='add'>+            for (k = 0; k &lt; priv-&gt;child_count; k++) {</div><div class='add'>+                if ((replies[k].poststat.ia_mtime ==</div><div class='add'>+                     replies[i].poststat.ia_mtime) &amp;&amp;</div><div class='add'>+                    (replies[k].poststat.ia_size ==</div><div class='add'>+                     replies[i].poststat.ia_size)) {</div><div class='add'>+                    vote_count++;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            if (vote_count &gt; priv-&gt;child_count / 2) {</div><div class='add'>+                fav_child = i;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return fav_child;</div><div class='add'>+    }</div><div class='add'>+    return fav_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * afr_sh_fav_by_mtime: Choose favorite child by mtime.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-afr_sh_fav_by_mtime (xlator_t *this, struct afr_reply *replies, inode_t *inode)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv;</div><div class='del'>-        int fav_child = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        uint32_t cmp_mtime = 0;</div><div class='del'>-        uint32_t cmp_mtime_nsec = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (replies[i].valid == 1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Child:%s "</div><div class='del'>-                                "mtime = %ld, mtime_nsec = %d for gfid %s",</div><div class='del'>-                                priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                replies[i].poststat.ia_mtime,</div><div class='del'>-                                replies[i].poststat.ia_mtime_nsec,</div><div class='del'>-                                uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        if (replies[i].poststat.ia_mtime &gt; cmp_mtime) {</div><div class='del'>-                                cmp_mtime = replies[i].poststat.ia_mtime;</div><div class='del'>-                                cmp_mtime_nsec =</div><div class='del'>-                                        replies[i].poststat.ia_mtime_nsec;</div><div class='del'>-                                fav_child = i;</div><div class='del'>-                        } else if ((replies[i].poststat.ia_mtime == cmp_mtime)</div><div class='del'>-                                    &amp;&amp; (replies[i].poststat.ia_mtime_nsec &gt;</div><div class='del'>-                                    cmp_mtime_nsec)) {</div><div class='del'>-                                cmp_mtime = replies[i].poststat.ia_mtime;</div><div class='del'>-                                cmp_mtime_nsec =</div><div class='del'>-                                        replies[i].poststat.ia_mtime_nsec;</div><div class='del'>-                                fav_child = i;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return fav_child;</div><div class='add'>+afr_sh_fav_by_mtime(xlator_t *this, struct afr_reply *replies, inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv;</div><div class='add'>+    int fav_child = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t cmp_mtime = 0;</div><div class='add'>+    uint32_t cmp_mtime_nsec = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid == 1) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Child:%s "</div><div class='add'>+                         "mtime = %ld, mtime_nsec = %d for gfid %s",</div><div class='add'>+                         priv-&gt;children[i]-&gt;name, replies[i].poststat.ia_mtime,</div><div class='add'>+                         replies[i].poststat.ia_mtime_nsec,</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            if (replies[i].poststat.ia_mtime &gt; cmp_mtime) {</div><div class='add'>+                cmp_mtime = replies[i].poststat.ia_mtime;</div><div class='add'>+                cmp_mtime_nsec = replies[i].poststat.ia_mtime_nsec;</div><div class='add'>+                fav_child = i;</div><div class='add'>+            } else if ((replies[i].poststat.ia_mtime == cmp_mtime) &amp;&amp;</div><div class='add'>+                       (replies[i].poststat.ia_mtime_nsec &gt; cmp_mtime_nsec)) {</div><div class='add'>+                cmp_mtime = replies[i].poststat.ia_mtime;</div><div class='add'>+                cmp_mtime_nsec = replies[i].poststat.ia_mtime_nsec;</div><div class='add'>+                fav_child = i;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return fav_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * afr_sh_fav_by_ctime: Choose favorite child by ctime.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-afr_sh_fav_by_ctime (xlator_t *this, struct afr_reply *replies, inode_t *inode)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv;</div><div class='del'>-        int fav_child = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        uint32_t cmp_ctime = 0;</div><div class='del'>-        uint32_t cmp_ctime_nsec = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (replies[i].valid == 1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Child:%s "</div><div class='del'>-                                "ctime = %ld, ctime_nsec = %d for gfid %s",</div><div class='del'>-                                priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                replies[i].poststat.ia_ctime,</div><div class='del'>-                                replies[i].poststat.ia_ctime_nsec,</div><div class='del'>-                                uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        if (replies[i].poststat.ia_ctime &gt; cmp_ctime) {</div><div class='del'>-                                cmp_ctime = replies[i].poststat.ia_ctime;</div><div class='del'>-                                cmp_ctime_nsec =</div><div class='del'>-                                        replies[i].poststat.ia_ctime_nsec;</div><div class='del'>-                                fav_child = i;</div><div class='del'>-                        } else if ((replies[i].poststat.ia_ctime == cmp_ctime)</div><div class='del'>-                                    &amp;&amp; (replies[i].poststat.ia_ctime_nsec &gt;</div><div class='del'>-                                    cmp_ctime_nsec)) {</div><div class='del'>-                                cmp_ctime = replies[i].poststat.ia_ctime;</div><div class='del'>-                                cmp_ctime_nsec =</div><div class='del'>-                                        replies[i].poststat.ia_ctime_nsec;</div><div class='del'>-                                fav_child = i;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return fav_child;</div><div class='add'>+afr_sh_fav_by_ctime(xlator_t *this, struct afr_reply *replies, inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv;</div><div class='add'>+    int fav_child = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t cmp_ctime = 0;</div><div class='add'>+    uint32_t cmp_ctime_nsec = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid == 1) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Child:%s "</div><div class='add'>+                         "ctime = %ld, ctime_nsec = %d for gfid %s",</div><div class='add'>+                         priv-&gt;children[i]-&gt;name, replies[i].poststat.ia_ctime,</div><div class='add'>+                         replies[i].poststat.ia_ctime_nsec,</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            if (replies[i].poststat.ia_ctime &gt; cmp_ctime) {</div><div class='add'>+                cmp_ctime = replies[i].poststat.ia_ctime;</div><div class='add'>+                cmp_ctime_nsec = replies[i].poststat.ia_ctime_nsec;</div><div class='add'>+                fav_child = i;</div><div class='add'>+            } else if ((replies[i].poststat.ia_ctime == cmp_ctime) &amp;&amp;</div><div class='add'>+                       (replies[i].poststat.ia_ctime_nsec &gt; cmp_ctime_nsec)) {</div><div class='add'>+                cmp_ctime = replies[i].poststat.ia_ctime;</div><div class='add'>+                cmp_ctime_nsec = replies[i].poststat.ia_ctime_nsec;</div><div class='add'>+                fav_child = i;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return fav_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * afr_sh_fav_by_size: Choose favorite child by size.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-afr_sh_fav_by_size (xlator_t *this, struct afr_reply *replies, inode_t *inode)</div><div class='add'>+afr_sh_fav_by_size(xlator_t *this, struct afr_reply *replies, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv;</div><div class='del'>-        int fav_child = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        uint64_t cmp_sz = 0;</div><div class='add'>+    afr_private_t *priv;</div><div class='add'>+    int fav_child = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t cmp_sz = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (replies[i].valid == 1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Child:%s "</div><div class='del'>-                                "file size = %lu for gfid %s",</div><div class='del'>-                                priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                replies[i].poststat.ia_size,</div><div class='del'>-                                uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        if (replies[i].poststat.ia_size &gt; cmp_sz) {</div><div class='del'>-                                cmp_sz = replies[i].poststat.ia_size;</div><div class='del'>-                                fav_child = i;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid == 1) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Child:%s "</div><div class='add'>+                         "file size = %lu for gfid %s",</div><div class='add'>+                         priv-&gt;children[i]-&gt;name, replies[i].poststat.ia_size,</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            if (replies[i].poststat.ia_size &gt; cmp_sz) {</div><div class='add'>+                cmp_sz = replies[i].poststat.ia_size;</div><div class='add'>+                fav_child = i;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return fav_child;</div><div class='add'>+    }</div><div class='add'>+    return fav_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_sh_get_fav_by_policy (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                          inode_t *inode, char **policy_str)</div><div class='add'>+afr_sh_get_fav_by_policy(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                         inode_t *inode, char **policy_str)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int fav_child = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int fav_child = -1;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!afr_can_decide_split_brain_source_sinks (replies,</div><div class='del'>-                                                      priv-&gt;child_count)) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!afr_can_decide_split_brain_source_sinks(replies, priv-&gt;child_count)) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (priv-&gt;fav_child_policy) {</div><div class='add'>+    switch (priv-&gt;fav_child_policy) {</div><div class='ctx'>         case AFR_FAV_CHILD_BY_SIZE:</div><div class='del'>-                fav_child = afr_sh_fav_by_size (this, replies, inode);</div><div class='del'>-                if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='del'>-                        *policy_str = "SIZE";</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            fav_child = afr_sh_fav_by_size(this, replies, inode);</div><div class='add'>+            if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='add'>+                *policy_str = "SIZE";</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_BY_CTIME:</div><div class='del'>-                fav_child = afr_sh_fav_by_ctime (this, replies, inode);</div><div class='del'>-                if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='del'>-                        *policy_str = "CTIME";</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            fav_child = afr_sh_fav_by_ctime(this, replies, inode);</div><div class='add'>+            if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='add'>+                *policy_str = "CTIME";</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_BY_MTIME:</div><div class='del'>-                fav_child = afr_sh_fav_by_mtime (this, replies, inode);</div><div class='del'>-                if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='del'>-                        *policy_str = "MTIME";</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            fav_child = afr_sh_fav_by_mtime(this, replies, inode);</div><div class='add'>+            if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='add'>+                *policy_str = "MTIME";</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_BY_MAJORITY:</div><div class='del'>-                fav_child = afr_sh_fav_by_majority (this, replies, inode);</div><div class='del'>-                if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='del'>-                        *policy_str = "MAJORITY";</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            fav_child = afr_sh_fav_by_majority(this, replies, inode);</div><div class='add'>+            if (policy_str &amp;&amp; fav_child &gt;= 0) {</div><div class='add'>+                *policy_str = "MAJORITY";</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_FAV_CHILD_NONE:</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return fav_child;</div><div class='add'>+    return fav_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mark_split_brain_source_sinks_by_policy (call_frame_t *frame,</div><div class='del'>-                                             xlator_t *this,</div><div class='del'>-                                             inode_t *inode,</div><div class='del'>-                                             unsigned char *sources,</div><div class='del'>-                                             unsigned char *sinks,</div><div class='del'>-                                             unsigned char *healed_sinks,</div><div class='del'>-                                             unsigned char *locked_on,</div><div class='del'>-                                             struct afr_reply *replies,</div><div class='del'>-                                             afr_transaction_type type)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int fav_child = -1;</div><div class='del'>-        char mtime_str[256];</div><div class='del'>-        char ctime_str[256];</div><div class='del'>-        char *policy_str = NULL;</div><div class='del'>-        struct tm *tm_ptr;</div><div class='del'>-        time_t time;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        fav_child = afr_sh_get_fav_by_policy (this, replies, inode,</div><div class='del'>-                                              &amp;policy_str);</div><div class='del'>-        if (fav_child &gt; priv-&gt;child_count - 1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_SBRAIN_FAV_CHILD_POLICY, "Invalid child (%d) "</div><div class='del'>-                        "selected by policy %s.", fav_child, policy_str);</div><div class='del'>-        } else if (fav_child &gt;= 0) {</div><div class='del'>-                time = replies[fav_child].poststat.ia_mtime;</div><div class='del'>-                tm_ptr = localtime (&amp;time);</div><div class='del'>-                strftime (mtime_str, sizeof (mtime_str), "%Y-%m-%d %H:%M:%S",</div><div class='del'>-                          tm_ptr);</div><div class='del'>-                time = replies[fav_child].poststat.ia_ctime;</div><div class='del'>-                tm_ptr = localtime (&amp;time);</div><div class='del'>-                strftime (ctime_str, sizeof (ctime_str), "%Y-%m-%d %H:%M:%S",</div><div class='del'>-                          tm_ptr);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        AFR_MSG_SBRAIN_FAV_CHILD_POLICY, "Source %s "</div><div class='del'>-                        "selected as authentic to resolve conflicting "</div><div class='del'>-                         "data in file (gfid:%s) by %s (%lu bytes @ %s mtime, "</div><div class='del'>-                         "%s ctime).",</div><div class='del'>-                         priv-&gt;children[fav_child]-&gt;name,</div><div class='del'>-                         uuid_utoa (inode-&gt;gfid),</div><div class='del'>-                         policy_str,</div><div class='del'>-                         replies[fav_child].poststat.ia_size,</div><div class='del'>-                         mtime_str,</div><div class='del'>-                         ctime_str);</div><div class='del'>-</div><div class='del'>-                sources[fav_child] = 1;</div><div class='del'>-                sinks[fav_child] = 0;</div><div class='del'>-                healed_sinks[fav_child] = 0;</div><div class='del'>-        }</div><div class='del'>-        return fav_child;</div><div class='add'>+afr_mark_split_brain_source_sinks_by_policy(</div><div class='add'>+    call_frame_t *frame, xlator_t *this, inode_t *inode, unsigned char *sources,</div><div class='add'>+    unsigned char *sinks, unsigned char *healed_sinks, unsigned char *locked_on,</div><div class='add'>+    struct afr_reply *replies, afr_transaction_type type)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int fav_child = -1;</div><div class='add'>+    char mtime_str[256];</div><div class='add'>+    char ctime_str[256];</div><div class='add'>+    char *policy_str = NULL;</div><div class='add'>+    struct tm *tm_ptr;</div><div class='add'>+    time_t time;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    fav_child = afr_sh_get_fav_by_policy(this, replies, inode, &amp;policy_str);</div><div class='add'>+    if (fav_child &gt; priv-&gt;child_count - 1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SBRAIN_FAV_CHILD_POLICY,</div><div class='add'>+               "Invalid child (%d) "</div><div class='add'>+               "selected by policy %s.",</div><div class='add'>+               fav_child, policy_str);</div><div class='add'>+    } else if (fav_child &gt;= 0) {</div><div class='add'>+        time = replies[fav_child].poststat.ia_mtime;</div><div class='add'>+        tm_ptr = localtime(&amp;time);</div><div class='add'>+        strftime(mtime_str, sizeof(mtime_str), "%Y-%m-%d %H:%M:%S", tm_ptr);</div><div class='add'>+        time = replies[fav_child].poststat.ia_ctime;</div><div class='add'>+        tm_ptr = localtime(&amp;time);</div><div class='add'>+        strftime(ctime_str, sizeof(ctime_str), "%Y-%m-%d %H:%M:%S", tm_ptr);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_SBRAIN_FAV_CHILD_POLICY,</div><div class='add'>+               "Source %s "</div><div class='add'>+               "selected as authentic to resolve conflicting "</div><div class='add'>+               "data in file (gfid:%s) by %s (%lu bytes @ %s mtime, "</div><div class='add'>+               "%s ctime).",</div><div class='add'>+               priv-&gt;children[fav_child]-&gt;name, uuid_utoa(inode-&gt;gfid),</div><div class='add'>+               policy_str, replies[fav_child].poststat.ia_size, mtime_str,</div><div class='add'>+               ctime_str);</div><div class='add'>+</div><div class='add'>+        sources[fav_child] = 1;</div><div class='add'>+        sinks[fav_child] = 0;</div><div class='add'>+        healed_sinks[fav_child] = 0;</div><div class='add'>+    }</div><div class='add'>+    return fav_child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_file_empty_on_all_children (afr_private_t *priv,</div><div class='del'>-                                   struct afr_reply *replies)</div><div class='add'>+afr_is_file_empty_on_all_children(afr_private_t *priv,</div><div class='add'>+                                  struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if ((!replies[i].valid) || (replies[i].op_ret != 0) ||</div><div class='del'>-                    (replies[i].poststat.ia_size != 0))</div><div class='del'>-                        return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if ((!replies[i].valid) || (replies[i].op_ret != 0) ||</div><div class='add'>+            (replies[i].poststat.ia_size != 0))</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_mark_source_sinks_if_file_empty (xlator_t *this, unsigned char *sources,</div><div class='del'>-                                     unsigned char *sinks,</div><div class='del'>-                                     unsigned char *healed_sinks,</div><div class='del'>-                                     unsigned char *locked_on,</div><div class='del'>-                                     struct afr_reply *replies,</div><div class='del'>-                                     afr_transaction_type type)</div><div class='del'>-{</div><div class='del'>-        int source = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        struct iatt stbuf = {0, };</div><div class='del'>-</div><div class='del'>-        if ((AFR_COUNT (locked_on, priv-&gt;child_count) &lt; priv-&gt;child_count) ||</div><div class='del'>-            (afr_success_count(replies, priv-&gt;child_count) &lt; priv-&gt;child_count))</div><div class='del'>-                return -1;</div><div class='add'>+afr_mark_source_sinks_if_file_empty(xlator_t *this, unsigned char *sources,</div><div class='add'>+                                    unsigned char *sinks,</div><div class='add'>+                                    unsigned char *healed_sinks,</div><div class='add'>+                                    unsigned char *locked_on,</div><div class='add'>+                                    struct afr_reply *replies,</div><div class='add'>+                                    afr_transaction_type type)</div><div class='add'>+{</div><div class='add'>+    int source = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if ((AFR_COUNT(locked_on, priv-&gt;child_count) &lt; priv-&gt;child_count) ||</div><div class='add'>+        (afr_success_count(replies, priv-&gt;child_count) &lt; priv-&gt;child_count))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (type == AFR_DATA_TRANSACTION) {</div><div class='del'>-                if (!afr_is_file_empty_on_all_children(priv, replies))</div><div class='del'>-                                return -1;</div><div class='del'>-                goto mark;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*For AFR_METADATA_TRANSACTION, metadata must be same on all bricks.*/</div><div class='del'>-        stbuf = replies[0].poststat;</div><div class='del'>-        for (i = 1; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if ((!IA_EQUAL (stbuf, replies[i].poststat, type)) ||</div><div class='del'>-                    (!IA_EQUAL (stbuf, replies[i].poststat, uid)) ||</div><div class='del'>-                    (!IA_EQUAL (stbuf, replies[i].poststat, gid)) ||</div><div class='del'>-                    (!IA_EQUAL (stbuf, replies[i].poststat, prot)))</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='del'>-        for (i = 1; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!afr_xattrs_are_equal (replies[0].xdata,</div><div class='del'>-                                           replies[i].xdata))</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='add'>+    if (type == AFR_DATA_TRANSACTION) {</div><div class='add'>+        if (!afr_is_file_empty_on_all_children(priv, replies))</div><div class='add'>+            return -1;</div><div class='add'>+        goto mark;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*For AFR_METADATA_TRANSACTION, metadata must be same on all bricks.*/</div><div class='add'>+    stbuf = replies[0].poststat;</div><div class='add'>+    for (i = 1; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if ((!IA_EQUAL(stbuf, replies[i].poststat, type)) ||</div><div class='add'>+            (!IA_EQUAL(stbuf, replies[i].poststat, uid)) ||</div><div class='add'>+            (!IA_EQUAL(stbuf, replies[i].poststat, gid)) ||</div><div class='add'>+            (!IA_EQUAL(stbuf, replies[i].poststat, prot)))</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+    for (i = 1; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!afr_xattrs_are_equal(replies[0].xdata, replies[i].xdata))</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> mark:</div><div class='del'>-        /* data/metadata is same on all bricks. Pick one of them as source. Rest</div><div class='del'>-         * are sinks.*/</div><div class='del'>-        for (i = 0 ; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (source == -1) {</div><div class='del'>-                        source = i;</div><div class='del'>-                        sources[i] = 1;</div><div class='del'>-                        sinks[i] = 0;</div><div class='del'>-                        healed_sinks[i] = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                sources[i] = 0;</div><div class='del'>-                sinks[i] = 1;</div><div class='del'>-                healed_sinks[i] = 1;</div><div class='add'>+    /* data/metadata is same on all bricks. Pick one of them as source. Rest</div><div class='add'>+     * are sinks.*/</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (source == -1) {</div><div class='add'>+            source = i;</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+            sinks[i] = 0;</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+        sources[i] = 0;</div><div class='add'>+        sinks[i] = 1;</div><div class='add'>+        healed_sinks[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return source;</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Return a source depending on the type of heal_op, and set sources[source],</div><div class='hunk'>@@ -1354,171 +1337,156 @@ mark:</div><div class='ctx'>  * sinks[node] are 1. This should be the case if the file is in split-brain.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-afr_mark_split_brain_source_sinks (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                   inode_t *inode,</div><div class='del'>-                                   unsigned char *sources,</div><div class='del'>-                                   unsigned char *sinks,</div><div class='del'>-                                   unsigned char *healed_sinks,</div><div class='del'>-                                   unsigned char *locked_on,</div><div class='del'>-                                   struct afr_reply *replies,</div><div class='del'>-                                   afr_transaction_type type)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        dict_t *xdata_req = NULL;</div><div class='del'>-        int heal_op = -1;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int source = -1;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        xdata_req = local-&gt;xdata_req;</div><div class='del'>-</div><div class='del'>-        source = afr_mark_source_sinks_if_file_empty (this, sources, sinks,</div><div class='del'>-                                                      healed_sinks, locked_on,</div><div class='del'>-                                                      replies, type);</div><div class='del'>-        if (source &gt;= 0)</div><div class='del'>-                return source;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (xdata_req, "heal-op", &amp;heal_op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto autoheal;</div><div class='del'>-</div><div class='del'>-        source = afr_mark_split_brain_source_sinks_by_heal_op (frame, this,</div><div class='del'>-                                                            sources, sinks,</div><div class='del'>-                                                            healed_sinks,</div><div class='del'>-                                                            locked_on, replies,</div><div class='del'>-                                                            type, heal_op);</div><div class='add'>+afr_mark_split_brain_source_sinks(</div><div class='add'>+    call_frame_t *frame, xlator_t *this, inode_t *inode, unsigned char *sources,</div><div class='add'>+    unsigned char *sinks, unsigned char *healed_sinks, unsigned char *locked_on,</div><div class='add'>+    struct afr_reply *replies, afr_transaction_type type)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata_req = NULL;</div><div class='add'>+    int heal_op = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    xdata_req = local-&gt;xdata_req;</div><div class='add'>+</div><div class='add'>+    source = afr_mark_source_sinks_if_file_empty(</div><div class='add'>+        this, sources, sinks, healed_sinks, locked_on, replies, type);</div><div class='add'>+    if (source &gt;= 0)</div><div class='ctx'>         return source;</div><div class='ctx'> </div><div class='add'>+    ret = dict_get_int32(xdata_req, "heal-op", &amp;heal_op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto autoheal;</div><div class='add'>+</div><div class='add'>+    source = afr_mark_split_brain_source_sinks_by_heal_op(</div><div class='add'>+        frame, this, sources, sinks, healed_sinks, locked_on, replies, type,</div><div class='add'>+        heal_op);</div><div class='add'>+    return source;</div><div class='add'>+</div><div class='ctx'> autoheal:</div><div class='del'>-        /* Automatically heal if fav_child_policy is set. */</div><div class='del'>-        if (priv-&gt;fav_child_policy != AFR_FAV_CHILD_NONE) {</div><div class='del'>-                source = afr_mark_split_brain_source_sinks_by_policy (frame,</div><div class='del'>-                                                                      this,</div><div class='del'>-                                                                      inode,</div><div class='del'>-                                                                      sources,</div><div class='del'>-                                                                      sinks,</div><div class='del'>-                                                                   healed_sinks,</div><div class='del'>-                                                                      locked_on,</div><div class='del'>-                                                                      replies,</div><div class='del'>-                                                                      type);</div><div class='del'>-                if (source != -1) {</div><div class='del'>-                        ret = dict_set_int32 (xdata_req, "fav-child-policy", 1);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                return -1;</div><div class='del'>-                }</div><div class='add'>+    /* Automatically heal if fav_child_policy is set. */</div><div class='add'>+    if (priv-&gt;fav_child_policy != AFR_FAV_CHILD_NONE) {</div><div class='add'>+        source = afr_mark_split_brain_source_sinks_by_policy(</div><div class='add'>+            frame, this, inode, sources, sinks, healed_sinks, locked_on,</div><div class='add'>+            replies, type);</div><div class='add'>+        if (source != -1) {</div><div class='add'>+            ret = dict_set_int32(xdata_req, "fav-child-policy", 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return source;</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_afr_fav_child_reset_sink_xattrs (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                  inode_t *inode, int source,</div><div class='del'>-                                  unsigned char *healed_sinks,</div><div class='del'>-                                  unsigned char *undid_pending,</div><div class='del'>-                                  afr_transaction_type type,</div><div class='del'>-                                  unsigned char *locked_on,</div><div class='del'>-                                  struct afr_reply *replies)</div><div class='add'>+_afr_fav_child_reset_sink_xattrs(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                 inode_t *inode, int source,</div><div class='add'>+                                 unsigned char *healed_sinks,</div><div class='add'>+                                 unsigned char *undid_pending,</div><div class='add'>+                                 afr_transaction_type type,</div><div class='add'>+                                 unsigned char *locked_on,</div><div class='add'>+                                 struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int *input_dirty = NULL;</div><div class='del'>-        int **input_matrix = NULL;</div><div class='del'>-	int *output_dirty = NULL;</div><div class='del'>-	int **output_matrix = NULL;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int *input_dirty = NULL;</div><div class='add'>+    int **input_matrix = NULL;</div><div class='add'>+    int *output_dirty = NULL;</div><div class='add'>+    int **output_matrix = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!dict_get (local-&gt;xdata_req, "fav-child-policy"))</div><div class='del'>-                return 0;</div><div class='add'>+    if (!dict_get(local-&gt;xdata_req, "fav-child-policy"))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        xdata = dict_new();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                return -1;</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        input_dirty = alloca0 (priv-&gt;child_count * sizeof (int));</div><div class='del'>-	input_matrix = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='del'>-	output_dirty = alloca0 (priv-&gt;child_count * sizeof (int));</div><div class='del'>-	output_matrix = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='add'>+    input_dirty = alloca0(priv-&gt;child_count * sizeof(int));</div><div class='add'>+    input_matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+    output_dirty = alloca0(priv-&gt;child_count * sizeof(int));</div><div class='add'>+    output_matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='ctx'> </div><div class='del'>-        afr_selfheal_extract_xattr (this, replies, type, input_dirty,</div><div class='del'>-                                    input_matrix);</div><div class='add'>+    afr_selfheal_extract_xattr(this, replies, type, input_dirty, input_matrix);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (i == source || !healed_sinks[i])</div><div class='del'>-                        continue;</div><div class='del'>-                output_dirty[i] = -input_dirty[i];</div><div class='del'>-                output_matrix[i][source] = -input_matrix[i][source];</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (i == source || !healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+        output_dirty[i] = -input_dirty[i];</div><div class='add'>+        output_matrix[i][source] = -input_matrix[i][source];</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!healed_sinks[i] || !locked_on[i])</div><div class='del'>-                        continue;</div><div class='del'>-                xattr = afr_selfheal_output_xattr (this, _gf_false, type,</div><div class='del'>-                                                   output_dirty, output_matrix,</div><div class='del'>-                                                   i, NULL);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!healed_sinks[i] || !locked_on[i])</div><div class='add'>+            continue;</div><div class='add'>+        xattr = afr_selfheal_output_xattr(this, _gf_false, type, output_dirty,</div><div class='add'>+                                          output_matrix, i, NULL);</div><div class='ctx'> </div><div class='del'>-                afr_selfheal_post_op (frame, this, inode, i, xattr, xdata);</div><div class='add'>+        afr_selfheal_post_op(frame, this, inode, i, xattr, xdata);</div><div class='ctx'> </div><div class='del'>-                undid_pending[i] = 1;</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        }</div><div class='add'>+        undid_pending[i] = 1;</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_does_witness_exist (xlator_t *this, uint64_t *witness)</div><div class='add'>+afr_does_witness_exist(xlator_t *this, uint64_t *witness)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (witness[i])</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (witness[i])</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> unsigned int</div><div class='del'>-afr_get_quorum_count (afr_private_t *priv)</div><div class='add'>+afr_get_quorum_count(afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='del'>-                return priv-&gt;child_count/2 + 1;</div><div class='del'>-        } else {</div><div class='del'>-                return priv-&gt;quorum_count;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='add'>+        return priv-&gt;child_count / 2 + 1;</div><div class='add'>+    } else {</div><div class='add'>+        return priv-&gt;quorum_count;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_selfheal_post_op_failure_accounting (afr_private_t *priv, char *accused,</div><div class='del'>-                                         unsigned char *sources,</div><div class='del'>-                                         unsigned char *locked_on)</div><div class='add'>+afr_selfheal_post_op_failure_accounting(afr_private_t *priv, char *accused,</div><div class='add'>+                                        unsigned char *sources,</div><div class='add'>+                                        unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        unsigned int  quorum_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    unsigned int quorum_count = 0;</div><div class='ctx'> </div><div class='del'>-        if (AFR_COUNT (sources, priv-&gt;child_count) != 0)</div><div class='del'>-                return;</div><div class='add'>+    if (AFR_COUNT(sources, priv-&gt;child_count) != 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        quorum_count = afr_get_quorum_count (priv);</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if ((accused[i] &lt; quorum_count) &amp;&amp; locked_on[i]) {</div><div class='del'>-                        sources[i] = 1;</div><div class='del'>-                }</div><div class='add'>+    quorum_count = afr_get_quorum_count(priv);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if ((accused[i] &lt; quorum_count) &amp;&amp; locked_on[i]) {</div><div class='add'>+            sources[i] = 1;</div><div class='ctx'>         }</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1541,663 +1509,675 @@ afr_selfheal_post_op_failure_accounting (afr_private_t *priv, char *accused,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_find_direction (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                             struct afr_reply *replies,</div><div class='del'>-                             afr_transaction_type type,</div><div class='del'>-                             unsigned char *locked_on, unsigned char *sources,</div><div class='del'>-                             unsigned char *sinks, uint64_t *witness,</div><div class='del'>-                             gf_boolean_t *pflag)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int j = 0;</div><div class='del'>-        int *dirty = NULL; /* Denotes if dirty xattr is set */</div><div class='del'>-        int **matrix = NULL;/* Changelog matrix */</div><div class='del'>-        char *accused = NULL;/* Accused others without any self-accusal */</div><div class='del'>-        char *pending = NULL;/* Have pending operations on others */</div><div class='del'>-        char *self_accused = NULL; /* Accused itself */</div><div class='del'>-        int min_participants = -1;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	dirty = alloca0 (priv-&gt;child_count * sizeof (int));</div><div class='del'>-	accused = alloca0 (priv-&gt;child_count);</div><div class='del'>-        pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-        self_accused = alloca0 (priv-&gt;child_count);</div><div class='del'>-	matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='del'>-        memset (witness, 0, sizeof (*witness) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	/* First construct the pending matrix for further analysis */</div><div class='del'>-	afr_selfheal_extract_xattr (this, replies, type, dirty, matrix);</div><div class='del'>-</div><div class='del'>-        if (pflag) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        for (j = 0; j &lt; priv-&gt;child_count; j++)</div><div class='del'>-                                if (matrix[i][j])</div><div class='del'>-                                        *pflag = _gf_true;</div><div class='del'>-                        if (*pflag)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (type == AFR_DATA_TRANSACTION) {</div><div class='del'>-                min_participants = priv-&gt;child_count;</div><div class='del'>-        } else {</div><div class='del'>-                min_participants = AFR_SH_MIN_PARTICIPANTS;</div><div class='add'>+afr_selfheal_find_direction(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                            struct afr_reply *replies,</div><div class='add'>+                            afr_transaction_type type, unsigned char *locked_on,</div><div class='add'>+                            unsigned char *sources, unsigned char *sinks,</div><div class='add'>+                            uint64_t *witness, gf_boolean_t *pflag)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int *dirty = NULL;         /* Denotes if dirty xattr is set */</div><div class='add'>+    int **matrix = NULL;       /* Changelog matrix */</div><div class='add'>+    char *accused = NULL;      /* Accused others without any self-accusal */</div><div class='add'>+    char *pending = NULL;      /* Have pending operations on others */</div><div class='add'>+    char *self_accused = NULL; /* Accused itself */</div><div class='add'>+    int min_participants = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dirty = alloca0(priv-&gt;child_count * sizeof(int));</div><div class='add'>+    accused = alloca0(priv-&gt;child_count);</div><div class='add'>+    pending = alloca0(priv-&gt;child_count);</div><div class='add'>+    self_accused = alloca0(priv-&gt;child_count);</div><div class='add'>+    matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+    memset(witness, 0, sizeof(*witness) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    /* First construct the pending matrix for further analysis */</div><div class='add'>+    afr_selfheal_extract_xattr(this, replies, type, dirty, matrix);</div><div class='add'>+</div><div class='add'>+    if (pflag) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            for (j = 0; j &lt; priv-&gt;child_count; j++)</div><div class='add'>+                if (matrix[i][j])</div><div class='add'>+                    *pflag = _gf_true;</div><div class='add'>+            if (*pflag)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        if (afr_success_count (replies,</div><div class='del'>-                               priv-&gt;child_count) &lt; min_participants) {</div><div class='del'>-                /* Treat this just like locks not being acquired */</div><div class='del'>-                return -ENOTCONN;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (type == AFR_DATA_TRANSACTION) {</div><div class='add'>+        min_participants = priv-&gt;child_count;</div><div class='add'>+    } else {</div><div class='add'>+        min_participants = AFR_SH_MIN_PARTICIPANTS;</div><div class='add'>+    }</div><div class='add'>+    if (afr_success_count(replies, priv-&gt;child_count) &lt; min_participants) {</div><div class='add'>+        /* Treat this just like locks not being acquired */</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* short list all self-accused */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (matrix[i][i])</div><div class='add'>+            self_accused[i] = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Next short list all accused to exclude them from being sources */</div><div class='add'>+    /* Self-accused can't accuse others as they are FOOLs */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='add'>+            if (matrix[i][j]) {</div><div class='add'>+                if (!self_accused[i])</div><div class='add'>+                    accused[j] += 1;</div><div class='add'>+                if (i != j)</div><div class='add'>+                    pending[i] += 1;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* short list all self-accused */</div><div class='add'>+    /* Short list all non-accused as sources */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!accused[i] &amp;&amp; locked_on[i])</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+        else</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Everyone accused by non-self-accused sources are sinks */</div><div class='add'>+    memset(sinks, 0, priv-&gt;child_count);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (self_accused[i])</div><div class='add'>+            continue;</div><div class='add'>+        for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='add'>+            if (matrix[i][j])</div><div class='add'>+                sinks[j] = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* For breaking ties provide with number of fops they witnessed */</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * count the pending fops witnessed from itself to others when it is</div><div class='add'>+     * self-accused</div><div class='add'>+     */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!self_accused[i])</div><div class='add'>+            continue;</div><div class='add'>+        for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='add'>+            if (i == j)</div><div class='add'>+                continue;</div><div class='add'>+            witness[i] += matrix[i][j];</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (type == AFR_DATA_TRANSACTION)</div><div class='add'>+        afr_selfheal_post_op_failure_accounting(priv, accused, sources,</div><div class='add'>+                                                locked_on);</div><div class='add'>+</div><div class='add'>+    /* If no sources, all locked nodes are sinks - split brain */</div><div class='add'>+    if (AFR_COUNT(sources, priv-&gt;child_count) == 0) {</div><div class='ctx'>         for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (matrix[i][i])</div><div class='del'>-                        self_accused[i] = 1;</div><div class='add'>+            if (locked_on[i])</div><div class='add'>+                sinks[i] = 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	/* Next short list all accused to exclude them from being sources */</div><div class='del'>-        /* Self-accused can't accuse others as they are FOOLs */</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='del'>-                        if (matrix[i][j]) {</div><div class='del'>-                                if (!self_accused[i])</div><div class='del'>-                                        accused[j] += 1;</div><div class='del'>-                                if (i != j)</div><div class='del'>-                                        pending[i] += 1;</div><div class='del'>-                         }</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Short list all non-accused as sources */</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!accused[i] &amp;&amp; locked_on[i])</div><div class='del'>-			sources[i] = 1;</div><div class='del'>-                else</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* Everyone accused by non-self-accused sources are sinks */</div><div class='del'>-        memset (sinks, 0, priv-&gt;child_count);</div><div class='add'>+    /* One more class of witness similar to dirty in v2 is where no pending</div><div class='add'>+     * exists but we have self-accusing markers. This can happen in afr-v1</div><div class='add'>+     * if the brick crashes just after doing xattrop on self but</div><div class='add'>+     * before xattrop on the other xattrs on the brick in pre-op. */</div><div class='add'>+    if (AFR_COUNT(pending, priv-&gt;child_count) == 0) {</div><div class='ctx'>         for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (self_accused[i])</div><div class='del'>-                        continue;</div><div class='del'>-                for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='del'>-                        if (matrix[i][j])</div><div class='del'>-                                sinks[j] = 1;</div><div class='del'>-                }</div><div class='add'>+            if (self_accused[i])</div><div class='add'>+                witness[i] += matrix[i][i];</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* For breaking ties provide with number of fops they witnessed */</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * count the pending fops witnessed from itself to others when it is</div><div class='del'>-         * self-accused</div><div class='add'>+    } else {</div><div class='add'>+        /* In afr-v1 if a file is self-accused and has pending</div><div class='add'>+         * operations on others then it is similar to 'dirty' in afr-v2.</div><div class='add'>+         * Consider such cases as witness.</div><div class='ctx'>          */</div><div class='ctx'>         for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!self_accused[i])</div><div class='del'>-                        continue;</div><div class='del'>-                for (j = 0; j &lt; priv-&gt;child_count; j++) {</div><div class='del'>-                        if (i == j)</div><div class='del'>-                                continue;</div><div class='del'>-                        witness[i] += matrix[i][j];</div><div class='del'>-                }</div><div class='add'>+            if (self_accused[i] &amp;&amp; pending[i])</div><div class='add'>+                witness[i] += matrix[i][i];</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (type == AFR_DATA_TRANSACTION)</div><div class='del'>-                afr_selfheal_post_op_failure_accounting (priv, accused,</div><div class='del'>-                                                         sources, locked_on);</div><div class='add'>+    /* count the number of dirty fops witnessed */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        witness[i] += dirty[i];</div><div class='ctx'> </div><div class='del'>-         /* If no sources, all locked nodes are sinks - split brain */</div><div class='del'>-         if (AFR_COUNT (sources, priv-&gt;child_count) == 0) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (locked_on[i])</div><div class='del'>-                                sinks[i] = 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* One more class of witness similar to dirty in v2 is where no pending</div><div class='del'>-         * exists but we have self-accusing markers. This can happen in afr-v1</div><div class='del'>-         * if the brick crashes just after doing xattrop on self but</div><div class='del'>-         * before xattrop on the other xattrs on the brick in pre-op. */</div><div class='del'>-        if (AFR_COUNT (pending, priv-&gt;child_count) == 0) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (self_accused[i])</div><div class='del'>-                                witness[i] += matrix[i][i];</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                /* In afr-v1 if a file is self-accused and has pending</div><div class='del'>-                 * operations on others then it is similar to 'dirty' in afr-v2.</div><div class='del'>-                 * Consider such cases as witness.</div><div class='del'>-                 */</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (self_accused[i] &amp;&amp; pending[i])</div><div class='del'>-                                witness[i] += matrix[i][i];</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* count the number of dirty fops witnessed */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                witness[i] += dirty[i];</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_log_selfheal (uuid_t gfid, xlator_t *this, int ret, char *type,</div><div class='del'>-                  int source, unsigned char *sources,</div><div class='del'>-                  unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        char *status = NULL;</div><div class='del'>-        char *sinks_str = NULL;</div><div class='del'>-        char *p = NULL;</div><div class='del'>-        char *sources_str = NULL;</div><div class='del'>-        char *q = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        gf_loglevel_t loglevel = GF_LOG_NONE;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        sinks_str = alloca0 (priv-&gt;child_count * 8);</div><div class='del'>-        p = sinks_str;</div><div class='del'>-        sources_str = alloca0 (priv-&gt;child_count * 8);</div><div class='del'>-        q = sources_str;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (healed_sinks[i])</div><div class='del'>-                        p += sprintf (p, "%d ", i);</div><div class='del'>-                if (sources[i]) {</div><div class='del'>-                        if (source == i) {</div><div class='del'>-                                q += sprintf (q, "[%d] ", i);</div><div class='del'>-                        } else {</div><div class='del'>-                                q += sprintf (q, "%d ", i);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                status = "Failed";</div><div class='del'>-                loglevel = GF_LOG_DEBUG;</div><div class='del'>-        } else {</div><div class='del'>-                status = "Completed";</div><div class='del'>-                loglevel = GF_LOG_INFO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, loglevel, 0,</div><div class='del'>-                AFR_MSG_SELF_HEAL_INFO, "%s %s selfheal on %s. "</div><div class='del'>-                "sources=%s sinks=%s", status, type, uuid_utoa (gfid),</div><div class='del'>-                sources_str, sinks_str);</div><div class='add'>+afr_log_selfheal(uuid_t gfid, xlator_t *this, int ret, char *type, int source,</div><div class='add'>+                 unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    char *status = NULL;</div><div class='add'>+    char *sinks_str = NULL;</div><div class='add'>+    char *p = NULL;</div><div class='add'>+    char *sources_str = NULL;</div><div class='add'>+    char *q = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_loglevel_t loglevel = GF_LOG_NONE;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    sinks_str = alloca0(priv-&gt;child_count * 8);</div><div class='add'>+    p = sinks_str;</div><div class='add'>+    sources_str = alloca0(priv-&gt;child_count * 8);</div><div class='add'>+    q = sources_str;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (healed_sinks[i])</div><div class='add'>+            p += sprintf(p, "%d ", i);</div><div class='add'>+        if (sources[i]) {</div><div class='add'>+            if (source == i) {</div><div class='add'>+                q += sprintf(q, "[%d] ", i);</div><div class='add'>+            } else {</div><div class='add'>+                q += sprintf(q, "%d ", i);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        status = "Failed";</div><div class='add'>+        loglevel = GF_LOG_DEBUG;</div><div class='add'>+    } else {</div><div class='add'>+        status = "Completed";</div><div class='add'>+        loglevel = GF_LOG_INFO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, loglevel, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='add'>+           "%s %s selfheal on %s. "</div><div class='add'>+           "sources=%s sinks=%s",</div><div class='add'>+           status, type, uuid_utoa(gfid), sources_str, sinks_str);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_discover_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-			   int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-			   struct iatt *buf, dict_t *xdata, struct iatt *parbuf)</div><div class='del'>-{</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int i = -1;</div><div class='del'>-        GF_UNUSED int ret = -1;</div><div class='del'>-	int8_t need_heal = 1;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	i = (long) cookie;</div><div class='del'>-</div><div class='del'>-	local-&gt;replies[i].valid = 1;</div><div class='del'>-	local-&gt;replies[i].op_ret = op_ret;</div><div class='del'>-	local-&gt;replies[i].op_errno = op_errno;</div><div class='del'>-	if (buf)</div><div class='del'>-		local-&gt;replies[i].poststat = *buf;</div><div class='del'>-	if (parbuf)</div><div class='del'>-		local-&gt;replies[i].postparent = *parbuf;</div><div class='del'>-	if (xdata) {</div><div class='del'>-		local-&gt;replies[i].xdata = dict_ref (xdata);</div><div class='del'>-                ret = dict_get_int8 (xdata, "link-count", &amp;need_heal);</div><div class='del'>-                local-&gt;replies[i].need_heal = need_heal;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;replies[i].need_heal = need_heal;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+afr_selfheal_discover_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                          struct iatt *buf, dict_t *xdata, struct iatt *parbuf)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = -1;</div><div class='add'>+    GF_UNUSED int ret = -1;</div><div class='add'>+    int8_t need_heal = 1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    i = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local-&gt;replies[i].valid = 1;</div><div class='add'>+    local-&gt;replies[i].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[i].op_errno = op_errno;</div><div class='add'>+    if (buf)</div><div class='add'>+        local-&gt;replies[i].poststat = *buf;</div><div class='add'>+    if (parbuf)</div><div class='add'>+        local-&gt;replies[i].postparent = *parbuf;</div><div class='add'>+    if (xdata) {</div><div class='add'>+        local-&gt;replies[i].xdata = dict_ref(xdata);</div><div class='add'>+        ret = dict_get_int8(xdata, "link-count", &amp;need_heal);</div><div class='add'>+        local-&gt;replies[i].need_heal = need_heal;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;replies[i].need_heal = need_heal;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-afr_selfheal_unlocked_lookup_on (call_frame_t *frame, inode_t *parent,</div><div class='del'>-				 const char *name, struct afr_reply *replies,</div><div class='del'>-				 unsigned char *lookup_on, dict_t *xattr)</div><div class='del'>-{</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-	dict_t *xattr_req = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	inode_t *inode = NULL;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = frame-&gt;this-&gt;private;</div><div class='del'>-</div><div class='del'>-	xattr_req = dict_new ();</div><div class='del'>-	if (!xattr_req)</div><div class='del'>-		return NULL;</div><div class='add'>+afr_selfheal_unlocked_lookup_on(call_frame_t *frame, inode_t *parent,</div><div class='add'>+                                const char *name, struct afr_reply *replies,</div><div class='add'>+                                unsigned char *lookup_on, dict_t *xattr)</div><div class='add'>+{</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = frame-&gt;this-&gt;private;</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_copy (xattr, xattr_req);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_copy(xattr, xattr_req);</div><div class='ctx'> </div><div class='del'>-	if (afr_xattr_req_prepare (frame-&gt;this, xattr_req) != 0) {</div><div class='del'>-		dict_unref (xattr_req);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    if (afr_xattr_req_prepare(frame-&gt;this, xattr_req) != 0) {</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	inode = inode_new (parent-&gt;table);</div><div class='del'>-	if (!inode) {</div><div class='del'>-		dict_unref (xattr_req);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    inode = inode_new(parent-&gt;table);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	loc.parent = inode_ref (parent);</div><div class='del'>-	gf_uuid_copy (loc.pargfid, parent-&gt;gfid);</div><div class='del'>-	loc.name = name;</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, parent-&gt;gfid);</div><div class='add'>+    loc.name = name;</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='ctx'> </div><div class='del'>-	AFR_ONLIST (lookup_on, frame, afr_selfheal_discover_cbk, lookup, &amp;loc,</div><div class='del'>-		    xattr_req);</div><div class='add'>+    AFR_ONLIST(lookup_on, frame, afr_selfheal_discover_cbk, lookup, &amp;loc,</div><div class='add'>+               xattr_req);</div><div class='ctx'> </div><div class='del'>-	afr_replies_copy (replies, local-&gt;replies, priv-&gt;child_count);</div><div class='add'>+    afr_replies_copy(replies, local-&gt;replies, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	dict_unref (xattr_req);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_unlocked_discover_on (call_frame_t *frame, inode_t *inode,</div><div class='del'>-				   uuid_t gfid, struct afr_reply *replies,</div><div class='del'>-				   unsigned char *discover_on)</div><div class='add'>+afr_selfheal_unlocked_discover_on(call_frame_t *frame, inode_t *inode,</div><div class='add'>+                                  uuid_t gfid, struct afr_reply *replies,</div><div class='add'>+                                  unsigned char *discover_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-	dict_t *xattr_req = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = frame-&gt;this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = frame-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	xattr_req = dict_new ();</div><div class='del'>-	if (!xattr_req)</div><div class='del'>-		return -ENOMEM;</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req)</div><div class='add'>+        return -ENOMEM;</div><div class='ctx'> </div><div class='del'>-	if (afr_xattr_req_prepare (frame-&gt;this, xattr_req) != 0) {</div><div class='del'>-		dict_unref (xattr_req);</div><div class='del'>-		return -ENOMEM;</div><div class='del'>-	}</div><div class='add'>+    if (afr_xattr_req_prepare(frame-&gt;this, xattr_req) != 0) {</div><div class='add'>+        dict_unref(xattr_req);</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-	AFR_ONLIST (discover_on, frame, afr_selfheal_discover_cbk, lookup, &amp;loc,</div><div class='del'>-		    xattr_req);</div><div class='add'>+    AFR_ONLIST(discover_on, frame, afr_selfheal_discover_cbk, lookup, &amp;loc,</div><div class='add'>+               xattr_req);</div><div class='ctx'> </div><div class='del'>-	afr_replies_copy (replies, local-&gt;replies, priv-&gt;child_count);</div><div class='add'>+    afr_replies_copy(replies, local-&gt;replies, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	dict_unref (xattr_req);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_unlocked_discover (call_frame_t *frame, inode_t *inode,</div><div class='del'>-				uuid_t gfid, struct afr_reply *replies)</div><div class='add'>+afr_selfheal_unlocked_discover(call_frame_t *frame, inode_t *inode, uuid_t gfid,</div><div class='add'>+                               struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = frame-&gt;this-&gt;private;</div><div class='add'>+    priv = frame-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	return afr_selfheal_unlocked_discover_on (frame, inode, gfid, replies,</div><div class='del'>-						  priv-&gt;child_up);</div><div class='add'>+    return afr_selfheal_unlocked_discover_on(frame, inode, gfid, replies,</div><div class='add'>+                                             priv-&gt;child_up);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> unsigned int</div><div class='del'>-afr_success_count (struct afr_reply *replies, unsigned int count)</div><div class='add'>+afr_success_count(struct afr_reply *replies, unsigned int count)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-        unsigned int success = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    unsigned int success = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++)</div><div class='del'>-                if (replies[i].valid &amp;&amp; replies[i].op_ret == 0)</div><div class='del'>-                        success++;</div><div class='del'>-        return success;</div><div class='add'>+    for (i = 0; i &lt; count; i++)</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].op_ret == 0)</div><div class='add'>+            success++;</div><div class='add'>+    return success;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		       int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+afr_selfheal_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	i = (long) cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    i = (long)cookie;</div><div class='ctx'> </div><div class='del'>-	local-&gt;replies[i].valid = 1;</div><div class='del'>-	local-&gt;replies[i].op_ret = op_ret;</div><div class='del'>-	local-&gt;replies[i].op_errno = op_errno;</div><div class='add'>+    local-&gt;replies[i].valid = 1;</div><div class='add'>+    local-&gt;replies[i].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[i].op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-	syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_locked_fill (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 unsigned char *locked_on)</div><div class='add'>+afr_locked_fill(call_frame_t *frame, xlator_t *this, unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].op_ret == 0) {</div><div class='del'>-			locked_on[i] = 1;</div><div class='del'>-			count++;</div><div class='del'>-		} else {</div><div class='del'>-			locked_on[i] = 0;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;replies[i].valid &amp;&amp; local-&gt;replies[i].op_ret == 0) {</div><div class='add'>+            locked_on[i] = 1;</div><div class='add'>+            count++;</div><div class='add'>+        } else {</div><div class='add'>+            locked_on[i] = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_tryinodelk (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-			 char *dom, off_t off, size_t size,</div><div class='del'>-			 unsigned char *locked_on)</div><div class='add'>+afr_selfheal_tryinodelk(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                        char *dom, off_t off, size_t size,</div><div class='add'>+                        unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	struct gf_flock flock = {0, };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	flock.l_type = F_WRLCK;</div><div class='del'>-	flock.l_start = off;</div><div class='del'>-	flock.l_len = size;</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='ctx'> </div><div class='del'>-	AFR_ONALL (frame, afr_selfheal_lock_cbk, inodelk, dom,</div><div class='del'>-		    &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+    AFR_ONALL(frame, afr_selfheal_lock_cbk, inodelk, dom, &amp;loc, F_SETLK, &amp;flock,</div><div class='add'>+              NULL);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return afr_locked_fill (frame, this, locked_on);</div><div class='add'>+    return afr_locked_fill(frame, this, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_inodelk (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-		      char *dom, off_t off, size_t size,</div><div class='del'>-		      unsigned char *locked_on)</div><div class='add'>+afr_selfheal_inodelk(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                     char *dom, off_t off, size_t size,</div><div class='add'>+                     unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	struct gf_flock flock = {0, };</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	flock.l_type = F_WRLCK;</div><div class='del'>-	flock.l_start = off;</div><div class='del'>-	flock.l_len = size;</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='ctx'> </div><div class='del'>-	AFR_ONALL (frame, afr_selfheal_lock_cbk, inodelk, dom,</div><div class='del'>-		    &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+    AFR_ONALL(frame, afr_selfheal_lock_cbk, inodelk, dom, &amp;loc, F_SETLK, &amp;flock,</div><div class='add'>+              NULL);</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (local-&gt;replies[i].op_ret == -1 &amp;&amp;</div><div class='del'>-		    local-&gt;replies[i].op_errno == EAGAIN) {</div><div class='del'>-			afr_locked_fill (frame, this, locked_on);</div><div class='del'>-			afr_selfheal_uninodelk (frame, this, inode, dom, off,</div><div class='del'>-						size, locked_on);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;replies[i].op_ret == -1 &amp;&amp;</div><div class='add'>+            local-&gt;replies[i].op_errno == EAGAIN) {</div><div class='add'>+            afr_locked_fill(frame, this, locked_on);</div><div class='add'>+            afr_selfheal_uninodelk(frame, this, inode, dom, off, size,</div><div class='add'>+                                   locked_on);</div><div class='ctx'> </div><div class='del'>-			AFR_SEQ (frame, afr_selfheal_lock_cbk, inodelk, dom,</div><div class='del'>-				 &amp;loc, F_SETLKW, &amp;flock, NULL);</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+            AFR_SEQ(frame, afr_selfheal_lock_cbk, inodelk, dom, &amp;loc, F_SETLKW,</div><div class='add'>+                    &amp;flock, NULL);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return afr_locked_fill (frame, this, locked_on);</div><div class='add'>+    return afr_locked_fill(frame, this, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_get_lock_and_eagain_counts (afr_private_t *priv, struct afr_reply *replies,</div><div class='del'>-                                int *lock_count, int *eagain_count)</div><div class='del'>-{</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-	        if (!replies[i].valid)</div><div class='del'>-	                continue;</div><div class='del'>-	        if (replies[i].op_ret == 0) {</div><div class='del'>-	                (*lock_count)++;</div><div class='del'>-                } else if (replies[i].op_ret == -1 &amp;&amp;</div><div class='del'>-		         replies[i].op_errno == EAGAIN) {</div><div class='del'>-		        (*eagain_count)++;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+afr_get_lock_and_eagain_counts(afr_private_t *priv, struct afr_reply *replies,</div><div class='add'>+                               int *lock_count, int *eagain_count)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].op_ret == 0) {</div><div class='add'>+            (*lock_count)++;</div><div class='add'>+        } else if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == EAGAIN) {</div><div class='add'>+            (*eagain_count)++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Do blocking locks if number of locks acquired is majority and there were some</div><div class='ctx'>  * EAGAINs. Useful for odd-way replication*/</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_tie_breaker_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                  inode_t *inode, char *dom, off_t off,</div><div class='del'>-                                  size_t size, unsigned char *locked_on)</div><div class='add'>+afr_selfheal_tie_breaker_inodelk(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                 inode_t *inode, char *dom, off_t off,</div><div class='add'>+                                 size_t size, unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	struct gf_flock flock = {0, };</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int lock_count = 0;</div><div class='del'>-	int eagain_count = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int lock_count = 0;</div><div class='add'>+    int eagain_count = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	flock.l_type = F_WRLCK;</div><div class='del'>-	flock.l_start = off;</div><div class='del'>-	flock.l_len = size;</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='ctx'> </div><div class='del'>-	AFR_ONALL (frame, afr_selfheal_lock_cbk, inodelk, dom,</div><div class='del'>-		   &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+    AFR_ONALL(frame, afr_selfheal_lock_cbk, inodelk, dom, &amp;loc, F_SETLK, &amp;flock,</div><div class='add'>+              NULL);</div><div class='ctx'> </div><div class='del'>-        afr_get_lock_and_eagain_counts (priv, local-&gt;replies, &amp;lock_count,</div><div class='del'>-                                        &amp;eagain_count);</div><div class='add'>+    afr_get_lock_and_eagain_counts(priv, local-&gt;replies, &amp;lock_count,</div><div class='add'>+                                   &amp;eagain_count);</div><div class='ctx'> </div><div class='del'>-	if (lock_count &gt; priv-&gt;child_count/2 &amp;&amp; eagain_count) {</div><div class='del'>-                afr_locked_fill (frame, this, locked_on);</div><div class='del'>-                afr_selfheal_uninodelk (frame, this, inode, dom, off,</div><div class='del'>-                                        size, locked_on);</div><div class='add'>+    if (lock_count &gt; priv-&gt;child_count / 2 &amp;&amp; eagain_count) {</div><div class='add'>+        afr_locked_fill(frame, this, locked_on);</div><div class='add'>+        afr_selfheal_uninodelk(frame, this, inode, dom, off, size, locked_on);</div><div class='ctx'> </div><div class='del'>-                AFR_SEQ (frame, afr_selfheal_lock_cbk, inodelk, dom,</div><div class='del'>-                         &amp;loc, F_SETLKW, &amp;flock, NULL);</div><div class='del'>-        }</div><div class='add'>+        AFR_SEQ(frame, afr_selfheal_lock_cbk, inodelk, dom, &amp;loc, F_SETLKW,</div><div class='add'>+                &amp;flock, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return afr_locked_fill (frame, this, locked_on);</div><div class='add'>+    return afr_locked_fill(frame, this, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_uninodelk (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-			char *dom, off_t off, size_t size,</div><div class='del'>-			const unsigned char *locked_on)</div><div class='add'>+afr_selfheal_uninodelk(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                       char *dom, off_t off, size_t size,</div><div class='add'>+                       const unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	struct gf_flock flock = {0, };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    flock.l_start = off;</div><div class='add'>+    flock.l_len = size;</div><div class='ctx'> </div><div class='del'>-	flock.l_type = F_UNLCK;</div><div class='del'>-	flock.l_start = off;</div><div class='del'>-	flock.l_len = size;</div><div class='add'>+    AFR_ONLIST(locked_on, frame, afr_selfheal_lock_cbk, inodelk, dom, &amp;loc,</div><div class='add'>+               F_SETLK, &amp;flock, NULL);</div><div class='ctx'> </div><div class='del'>-	AFR_ONLIST (locked_on, frame, afr_selfheal_lock_cbk, inodelk,</div><div class='del'>-		    dom, &amp;loc, F_SETLK, &amp;flock, NULL);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_tryentrylk (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-			 char *dom, const char *name, unsigned char *locked_on)</div><div class='add'>+afr_selfheal_tryentrylk(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                        char *dom, const char *name, unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	AFR_ONALL (frame, afr_selfheal_lock_cbk, entrylk, dom,</div><div class='del'>-		   &amp;loc, name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+    AFR_ONALL(frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc, name,</div><div class='add'>+              ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return afr_locked_fill (frame, this, locked_on);</div><div class='add'>+    return afr_locked_fill(frame, this, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_entrylk (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-		      char *dom, const char *name, unsigned char *locked_on)</div><div class='add'>+afr_selfheal_entrylk(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                     char *dom, const char *name, unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	AFR_ONALL (frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc,</div><div class='del'>-		   name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+    AFR_ONALL(frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc, name,</div><div class='add'>+              ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (local-&gt;replies[i].op_ret == -1 &amp;&amp;</div><div class='del'>-		    local-&gt;replies[i].op_errno == EAGAIN) {</div><div class='del'>-			afr_locked_fill (frame, this, locked_on);</div><div class='del'>-			afr_selfheal_unentrylk (frame, this, inode, dom, name,</div><div class='del'>-						locked_on, NULL);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;replies[i].op_ret == -1 &amp;&amp;</div><div class='add'>+            local-&gt;replies[i].op_errno == EAGAIN) {</div><div class='add'>+            afr_locked_fill(frame, this, locked_on);</div><div class='add'>+            afr_selfheal_unentrylk(frame, this, inode, dom, name, locked_on,</div><div class='add'>+                                   NULL);</div><div class='ctx'> </div><div class='del'>-			AFR_SEQ (frame, afr_selfheal_lock_cbk, entrylk, dom,</div><div class='del'>-				 &amp;loc, name, ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+            AFR_SEQ(frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc, name,</div><div class='add'>+                    ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return afr_locked_fill (frame, this, locked_on);</div><div class='add'>+    return afr_locked_fill(frame, this, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_tie_breaker_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                  inode_t *inode, char *dom, const char *name,</div><div class='del'>-                                  unsigned char *locked_on)</div><div class='add'>+afr_selfheal_tie_breaker_entrylk(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                 inode_t *inode, char *dom, const char *name,</div><div class='add'>+                                 unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int lock_count = 0;</div><div class='del'>-	int eagain_count = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int lock_count = 0;</div><div class='add'>+    int eagain_count = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	AFR_ONALL (frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc,</div><div class='del'>-		   name, ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='add'>+    AFR_ONALL(frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc, name,</div><div class='add'>+              ENTRYLK_LOCK_NB, ENTRYLK_WRLCK, NULL);</div><div class='ctx'> </div><div class='del'>-        afr_get_lock_and_eagain_counts (priv, local-&gt;replies, &amp;lock_count,</div><div class='del'>-                                        &amp;eagain_count);</div><div class='add'>+    afr_get_lock_and_eagain_counts(priv, local-&gt;replies, &amp;lock_count,</div><div class='add'>+                                   &amp;eagain_count);</div><div class='ctx'> </div><div class='del'>-	if (lock_count &gt; priv-&gt;child_count/2 &amp;&amp; eagain_count) {</div><div class='del'>-                afr_locked_fill (frame, this, locked_on);</div><div class='del'>-                afr_selfheal_unentrylk (frame, this, inode, dom, name,</div><div class='del'>-                                        locked_on, NULL);</div><div class='add'>+    if (lock_count &gt; priv-&gt;child_count / 2 &amp;&amp; eagain_count) {</div><div class='add'>+        afr_locked_fill(frame, this, locked_on);</div><div class='add'>+        afr_selfheal_unentrylk(frame, this, inode, dom, name, locked_on, NULL);</div><div class='ctx'> </div><div class='del'>-                AFR_SEQ (frame, afr_selfheal_lock_cbk, entrylk, dom,</div><div class='del'>-                         &amp;loc, name, ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-	}</div><div class='add'>+        AFR_SEQ(frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc, name,</div><div class='add'>+                ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return afr_locked_fill (frame, this, locked_on);</div><div class='add'>+    return afr_locked_fill(frame, this, locked_on);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_unentrylk (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-			char *dom, const char *name, unsigned char *locked_on,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+afr_selfheal_unentrylk(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                       char *dom, const char *name, unsigned char *locked_on,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	AFR_ONLIST (locked_on, frame, afr_selfheal_lock_cbk, entrylk,</div><div class='del'>-		    dom, &amp;loc, name, ENTRYLK_UNLOCK, ENTRYLK_WRLCK, xdata);</div><div class='add'>+    AFR_ONLIST(locked_on, frame, afr_selfheal_lock_cbk, entrylk, dom, &amp;loc,</div><div class='add'>+               name, ENTRYLK_UNLOCK, ENTRYLK_WRLCK, xdata);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_data_set (xlator_t *this, dict_t *xdata)</div><div class='add'>+afr_is_data_set(xlator_t *this, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return afr_is_pending_set (this, xdata, AFR_DATA_TRANSACTION);</div><div class='add'>+    return afr_is_pending_set(this, xdata, AFR_DATA_TRANSACTION);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_metadata_set (xlator_t *this, dict_t *xdata)</div><div class='add'>+afr_is_metadata_set(xlator_t *this, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return afr_is_pending_set (this, xdata, AFR_METADATA_TRANSACTION);</div><div class='add'>+    return afr_is_pending_set(this, xdata, AFR_METADATA_TRANSACTION);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_entry_set (xlator_t *this, dict_t *xdata)</div><div class='add'>+afr_is_entry_set(xlator_t *this, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	return afr_is_pending_set (this, xdata, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    return afr_is_pending_set(this, xdata, AFR_ENTRY_TRANSACTION);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2210,317 +2190,307 @@ afr_is_entry_set (xlator_t *this, dict_t *xdata)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_unlocked_inspect (call_frame_t *frame, xlator_t *this,</div><div class='del'>-			       uuid_t gfid, inode_t **link_inode,</div><div class='del'>-			       gf_boolean_t *data_selfheal,</div><div class='del'>-			       gf_boolean_t *metadata_selfheal,</div><div class='del'>-			       gf_boolean_t *entry_selfheal)</div><div class='del'>-{</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        inode_t *inode = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int valid_cnt = 0;</div><div class='del'>-	struct iatt first = {0, };</div><div class='del'>-        int first_idx = 0;</div><div class='del'>-	struct afr_reply *replies = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        inode = afr_inode_find (this, gfid);</div><div class='del'>-        if (!inode)</div><div class='del'>-                goto out;</div><div class='add'>+afr_selfheal_unlocked_inspect(call_frame_t *frame, xlator_t *this, uuid_t gfid,</div><div class='add'>+                              inode_t **link_inode, gf_boolean_t *data_selfheal,</div><div class='add'>+                              gf_boolean_t *metadata_selfheal,</div><div class='add'>+                              gf_boolean_t *entry_selfheal)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int valid_cnt = 0;</div><div class='add'>+    struct iatt first = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int first_idx = 0;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    inode = afr_inode_find(this, gfid);</div><div class='add'>+    if (!inode)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	replies = alloca0 (sizeof (*replies) * priv-&gt;child_count);</div><div class='add'>+    replies = alloca0(sizeof(*replies) * priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_unlocked_discover (frame, inode, gfid, replies);</div><div class='del'>-	if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = afr_selfheal_unlocked_discover(frame, inode, gfid, replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid)</div><div class='del'>-			continue;</div><div class='del'>-		if (replies[i].op_ret == -1)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-                /* The data segment of the changelog can be non-zero to indicate</div><div class='del'>-                 * the directory needs a full heal. So the check below ensures</div><div class='del'>-                 * it's not a directory before setting the data_selfheal boolean.</div><div class='del'>-                 */</div><div class='del'>-		if (data_selfheal &amp;&amp; !IA_ISDIR (replies[i].poststat.ia_type) &amp;&amp;</div><div class='del'>-                    afr_is_data_set (this, replies[i].xdata))</div><div class='del'>-			*data_selfheal = _gf_true;</div><div class='del'>-</div><div class='del'>-		if (metadata_selfheal &amp;&amp;</div><div class='del'>-                    afr_is_metadata_set (this, replies[i].xdata))</div><div class='del'>-			*metadata_selfheal = _gf_true;</div><div class='del'>-</div><div class='del'>-		if (entry_selfheal &amp;&amp; afr_is_entry_set (this, replies[i].xdata))</div><div class='del'>-			*entry_selfheal = _gf_true;</div><div class='del'>-</div><div class='del'>-		valid_cnt++;</div><div class='del'>-		if (valid_cnt == 1) {</div><div class='del'>-			first = replies[i].poststat;</div><div class='del'>-                        first_idx = i;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!IA_EQUAL (first, replies[i].poststat, type)) {</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN,</div><div class='del'>-				"TYPE mismatch %d vs %d on %s for gfid:%s",</div><div class='del'>-				(int) first.ia_type,</div><div class='del'>-				(int) replies[i].poststat.ia_type,</div><div class='del'>-				priv-&gt;children[i]-&gt;name,</div><div class='del'>-				uuid_utoa (replies[i].poststat.ia_gfid));</div><div class='del'>-                        gf_event (EVENT_AFR_SPLIT_BRAIN, "subvol=%s;"</div><div class='del'>-                                "type=file;gfid=%s;"</div><div class='del'>-                                "ia_type-%d=%s;ia_type-%d=%s",</div><div class='del'>-                                this-&gt;name,</div><div class='del'>-                                uuid_utoa (replies[i].poststat.ia_gfid),</div><div class='del'>-                                first_idx,</div><div class='del'>-                                gf_inode_type_to_str (first.ia_type), i,</div><div class='del'>-                            gf_inode_type_to_str (replies[i].poststat.ia_type));</div><div class='del'>-                        ret = -EIO;</div><div class='del'>-                        goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!IA_EQUAL (first, replies[i].poststat, uid)) {</div><div class='del'>-		        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-				      "UID mismatch "</div><div class='del'>-                                      "%d vs %d on %s for gfid:%s",</div><div class='del'>-				      (int) first.ia_uid,</div><div class='del'>-				      (int) replies[i].poststat.ia_uid,</div><div class='del'>-				      priv-&gt;children[i]-&gt;name,</div><div class='del'>-				      uuid_utoa (replies[i].poststat.ia_gfid));</div><div class='del'>-</div><div class='del'>-                        if (metadata_selfheal)</div><div class='del'>-                                *metadata_selfheal = _gf_true;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!IA_EQUAL (first, replies[i].poststat, gid)) {</div><div class='del'>-		        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-				      "GID mismatch "</div><div class='del'>-                                      "%d vs %d on %s for gfid:%s",</div><div class='del'>-				      (int) first.ia_uid,</div><div class='del'>-				      (int) replies[i].poststat.ia_uid,</div><div class='del'>-				      priv-&gt;children[i]-&gt;name,</div><div class='del'>-				      uuid_utoa (replies[i].poststat.ia_gfid));</div><div class='del'>-</div><div class='del'>-                        if (metadata_selfheal)</div><div class='del'>-                                *metadata_selfheal = _gf_true;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!IA_EQUAL (first, replies[i].poststat, prot)) {</div><div class='del'>-		        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-			              "MODE mismatch "</div><div class='del'>-                                      "%d vs %d on %s for gfid:%s",</div><div class='del'>-				      (int) st_mode_from_ia (first.ia_prot, 0),</div><div class='del'>-				      (int) st_mode_from_ia</div><div class='del'>-                                      (replies[i].poststat.ia_prot, 0),</div><div class='del'>-				      priv-&gt;children[i]-&gt;name,</div><div class='del'>-				      uuid_utoa (replies[i].poststat.ia_gfid));</div><div class='del'>-</div><div class='del'>-                        if (metadata_selfheal)</div><div class='del'>-                                *metadata_selfheal = _gf_true;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (IA_ISREG(first.ia_type) &amp;&amp;</div><div class='del'>-		    !IA_EQUAL (first, replies[i].poststat, size)) {</div><div class='del'>-		        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "SIZE mismatch "</div><div class='del'>-                                      "%lld vs %lld on %s for gfid:%s",</div><div class='del'>-                                      (long long) first.ia_size,</div><div class='del'>-                                      (long long) replies[i].poststat.ia_size,</div><div class='del'>-                                      priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                      uuid_utoa (replies[i].poststat.ia_gfid));</div><div class='del'>-</div><div class='del'>-                        if (data_selfheal)</div><div class='del'>-                                *data_selfheal = _gf_true;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (valid_cnt &gt; 0 &amp;&amp; link_inode) {</div><div class='del'>-		*link_inode = inode_link (inode, NULL, NULL, &amp;first);</div><div class='del'>-                if (!*link_inode) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (valid_cnt &lt; 2) {</div><div class='del'>-                ret = afr_check_stale_error (replies, priv);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        /* The data segment of the changelog can be non-zero to indicate</div><div class='add'>+         * the directory needs a full heal. So the check below ensures</div><div class='add'>+         * it's not a directory before setting the data_selfheal boolean.</div><div class='add'>+         */</div><div class='add'>+        if (data_selfheal &amp;&amp; !IA_ISDIR(replies[i].poststat.ia_type) &amp;&amp;</div><div class='add'>+            afr_is_data_set(this, replies[i].xdata))</div><div class='add'>+            *data_selfheal = _gf_true;</div><div class='add'>+</div><div class='add'>+        if (metadata_selfheal &amp;&amp; afr_is_metadata_set(this, replies[i].xdata))</div><div class='add'>+            *metadata_selfheal = _gf_true;</div><div class='add'>+</div><div class='add'>+        if (entry_selfheal &amp;&amp; afr_is_entry_set(this, replies[i].xdata))</div><div class='add'>+            *entry_selfheal = _gf_true;</div><div class='add'>+</div><div class='add'>+        valid_cnt++;</div><div class='add'>+        if (valid_cnt == 1) {</div><div class='add'>+            first = replies[i].poststat;</div><div class='add'>+            first_idx = i;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!IA_EQUAL(first, replies[i].poststat, type)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                   "TYPE mismatch %d vs %d on %s for gfid:%s",</div><div class='add'>+                   (int)first.ia_type, (int)replies[i].poststat.ia_type,</div><div class='add'>+                   priv-&gt;children[i]-&gt;name,</div><div class='add'>+                   uuid_utoa(replies[i].poststat.ia_gfid));</div><div class='add'>+            gf_event(EVENT_AFR_SPLIT_BRAIN,</div><div class='add'>+                     "subvol=%s;"</div><div class='add'>+                     "type=file;gfid=%s;"</div><div class='add'>+                     "ia_type-%d=%s;ia_type-%d=%s",</div><div class='add'>+                     this-&gt;name, uuid_utoa(replies[i].poststat.ia_gfid),</div><div class='add'>+                     first_idx, gf_inode_type_to_str(first.ia_type), i,</div><div class='add'>+                     gf_inode_type_to_str(replies[i].poststat.ia_type));</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!IA_EQUAL(first, replies[i].poststat, uid)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "UID mismatch "</div><div class='add'>+                         "%d vs %d on %s for gfid:%s",</div><div class='add'>+                         (int)first.ia_uid, (int)replies[i].poststat.ia_uid,</div><div class='add'>+                         priv-&gt;children[i]-&gt;name,</div><div class='add'>+                         uuid_utoa(replies[i].poststat.ia_gfid));</div><div class='add'>+</div><div class='add'>+            if (metadata_selfheal)</div><div class='add'>+                *metadata_selfheal = _gf_true;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!IA_EQUAL(first, replies[i].poststat, gid)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "GID mismatch "</div><div class='add'>+                         "%d vs %d on %s for gfid:%s",</div><div class='add'>+                         (int)first.ia_uid, (int)replies[i].poststat.ia_uid,</div><div class='add'>+                         priv-&gt;children[i]-&gt;name,</div><div class='add'>+                         uuid_utoa(replies[i].poststat.ia_gfid));</div><div class='add'>+</div><div class='add'>+            if (metadata_selfheal)</div><div class='add'>+                *metadata_selfheal = _gf_true;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!IA_EQUAL(first, replies[i].poststat, prot)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "MODE mismatch "</div><div class='add'>+                         "%d vs %d on %s for gfid:%s",</div><div class='add'>+                         (int)st_mode_from_ia(first.ia_prot, 0),</div><div class='add'>+                         (int)st_mode_from_ia(replies[i].poststat.ia_prot, 0),</div><div class='add'>+                         priv-&gt;children[i]-&gt;name,</div><div class='add'>+                         uuid_utoa(replies[i].poststat.ia_gfid));</div><div class='add'>+</div><div class='add'>+            if (metadata_selfheal)</div><div class='add'>+                *metadata_selfheal = _gf_true;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (IA_ISREG(first.ia_type) &amp;&amp;</div><div class='add'>+            !IA_EQUAL(first, replies[i].poststat, size)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "SIZE mismatch "</div><div class='add'>+                         "%lld vs %lld on %s for gfid:%s",</div><div class='add'>+                         (long long)first.ia_size,</div><div class='add'>+                         (long long)replies[i].poststat.ia_size,</div><div class='add'>+                         priv-&gt;children[i]-&gt;name,</div><div class='add'>+                         uuid_utoa(replies[i].poststat.ia_gfid));</div><div class='add'>+</div><div class='add'>+            if (data_selfheal)</div><div class='add'>+                *data_selfheal = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (valid_cnt &gt; 0 &amp;&amp; link_inode) {</div><div class='add'>+        *link_inode = inode_link(inode, NULL, NULL, &amp;first);</div><div class='add'>+        if (!*link_inode) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (valid_cnt &lt; 2) {</div><div class='add'>+        ret = afr_check_stale_error(replies, priv);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        if (replies)</div><div class='del'>-                afr_replies_wipe (replies, priv-&gt;child_count);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (replies)</div><div class='add'>+        afr_replies_wipe(replies, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-afr_inode_find (xlator_t *this, uuid_t gfid)</div><div class='add'>+afr_inode_find(xlator_t *this, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-	inode_table_t *table = NULL;</div><div class='del'>-	inode_t *inode = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='ctx'> </div><div class='del'>-	table = this-&gt;itable;</div><div class='del'>-	if (!table)</div><div class='del'>-		return NULL;</div><div class='add'>+    table = this-&gt;itable;</div><div class='add'>+    if (!table)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	inode = inode_find (table, gfid);</div><div class='del'>-	if (inode)</div><div class='del'>-		return inode;</div><div class='add'>+    inode = inode_find(table, gfid);</div><div class='add'>+    if (inode)</div><div class='add'>+        return inode;</div><div class='ctx'> </div><div class='del'>-	inode = inode_new (table);</div><div class='del'>-	if (!inode)</div><div class='del'>-		return NULL;</div><div class='add'>+    inode = inode_new(table);</div><div class='add'>+    if (!inode)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	gf_uuid_copy (inode-&gt;gfid, gfid);</div><div class='add'>+    gf_uuid_copy(inode-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-	return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> call_frame_t *</div><div class='del'>-afr_frame_create (xlator_t *this, int32_t *op_errno)</div><div class='add'>+afr_frame_create(xlator_t *this, int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-	call_frame_t *frame    = NULL;</div><div class='del'>-	afr_local_t  *local    = NULL;</div><div class='del'>-	pid_t         pid      = GF_CLIENT_PID_SELF_HEALD;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    pid_t pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='ctx'> </div><div class='del'>-	frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-	if (!frame)</div><div class='del'>-		return NULL;</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	local = AFR_FRAME_INIT (frame, (*op_errno));</div><div class='del'>-	if (!local) {</div><div class='del'>-		STACK_DESTROY (frame-&gt;root);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    local = AFR_FRAME_INIT(frame, (*op_errno));</div><div class='add'>+    if (!local) {</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	syncopctx_setfspid (&amp;pid);</div><div class='add'>+    syncopctx_setfspid(&amp;pid);</div><div class='ctx'> </div><div class='del'>-	frame-&gt;root-&gt;pid = pid;</div><div class='add'>+    frame-&gt;root-&gt;pid = pid;</div><div class='ctx'> </div><div class='del'>-	afr_set_lk_owner (frame, this, frame-&gt;root);</div><div class='add'>+    afr_set_lk_owner(frame, this, frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-	return frame;</div><div class='add'>+    return frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_newentry_mark (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-			    int source, struct afr_reply *replies,</div><div class='del'>-			    unsigned char *sources, unsigned char *newentry)</div><div class='add'>+afr_selfheal_newentry_mark(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                           int source, struct afr_reply *replies,</div><div class='add'>+                           unsigned char *sources, unsigned char *newentry)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	dict_t *xattr = NULL;</div><div class='del'>-	int **changelog = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int **changelog = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	gf_uuid_copy (inode-&gt;gfid, replies[source].poststat.ia_gfid);</div><div class='add'>+    gf_uuid_copy(inode-&gt;gfid, replies[source].poststat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-	xattr = dict_new();</div><div class='del'>-	if (!xattr)</div><div class='del'>-		return -ENOMEM;</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        return -ENOMEM;</div><div class='ctx'> </div><div class='del'>-        changelog = afr_mark_pending_changelog (priv, newentry, xattr,</div><div class='del'>-                                            replies[source].poststat.ia_type);</div><div class='add'>+    changelog = afr_mark_pending_changelog(priv, newentry, xattr,</div><div class='add'>+                                           replies[source].poststat.ia_type);</div><div class='ctx'> </div><div class='del'>-        if (!changelog) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!changelog) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!sources[i])</div><div class='del'>-			continue;</div><div class='del'>-		ret |= afr_selfheal_post_op (frame, this, inode, i, xattr,</div><div class='del'>-                                             NULL);</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        ret |= afr_selfheal_post_op(frame, this, inode, i, xattr, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (changelog)</div><div class='del'>-                afr_matrix_cleanup (changelog, priv-&gt;child_count);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-	return ret;</div><div class='add'>+    if (changelog)</div><div class='add'>+        afr_matrix_cleanup(changelog, priv-&gt;child_count);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_do (call_frame_t *frame, xlator_t *this, uuid_t gfid)</div><div class='del'>-{</div><div class='del'>-	int           ret               = -1;</div><div class='del'>-        int           entry_ret         = 1;</div><div class='del'>-        int           metadata_ret      = 1;</div><div class='del'>-        int           data_ret          = 1;</div><div class='del'>-        int           or_ret            = 0;</div><div class='del'>-        inode_t      *inode             = NULL;</div><div class='del'>-        fd_t         *fd                = NULL;</div><div class='del'>-	gf_boolean_t  data_selfheal     = _gf_false;</div><div class='del'>-	gf_boolean_t  metadata_selfheal = _gf_false;</div><div class='del'>-	gf_boolean_t  entry_selfheal    = _gf_false;</div><div class='del'>-        afr_private_t *priv            = NULL;</div><div class='del'>-        gf_boolean_t dataheal_enabled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = gf_string2boolean (priv-&gt;data_self_heal, &amp;dataheal_enabled);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+afr_selfheal_do(call_frame_t *frame, xlator_t *this, uuid_t gfid)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int entry_ret = 1;</div><div class='add'>+    int metadata_ret = 1;</div><div class='add'>+    int data_ret = 1;</div><div class='add'>+    int or_ret = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    gf_boolean_t data_selfheal = _gf_false;</div><div class='add'>+    gf_boolean_t metadata_selfheal = _gf_false;</div><div class='add'>+    gf_boolean_t entry_selfheal = _gf_false;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t dataheal_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = gf_string2boolean(priv-&gt;data_self_heal, &amp;dataheal_enabled);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_unlocked_inspect (frame, this, gfid, &amp;inode,</div><div class='del'>-					     &amp;data_selfheal,</div><div class='del'>-					     &amp;metadata_selfheal,</div><div class='del'>-					     &amp;entry_selfheal);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = afr_selfheal_unlocked_inspect(frame, this, gfid, &amp;inode,</div><div class='add'>+                                        &amp;data_selfheal, &amp;metadata_selfheal,</div><div class='add'>+                                        &amp;entry_selfheal);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!(data_selfheal || metadata_selfheal || entry_selfheal)) {</div><div class='del'>-                ret = 2;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!(data_selfheal || metadata_selfheal || entry_selfheal)) {</div><div class='add'>+        ret = 2;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (inode-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                ret = afr_selfheal_data_open (this, inode, &amp;fd);</div><div class='del'>-                if (!fd) {</div><div class='del'>-                        ret = -EIO;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (inode-&gt;ia_type == IA_IFREG) {</div><div class='add'>+        ret = afr_selfheal_data_open(this, inode, &amp;fd);</div><div class='add'>+        if (!fd) {</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (data_selfheal &amp;&amp; dataheal_enabled)</div><div class='del'>-                data_ret = afr_selfheal_data (frame, this, fd);</div><div class='add'>+    if (data_selfheal &amp;&amp; dataheal_enabled)</div><div class='add'>+        data_ret = afr_selfheal_data(frame, this, fd);</div><div class='ctx'> </div><div class='del'>-	if (metadata_selfheal &amp;&amp; priv-&gt;metadata_self_heal)</div><div class='del'>-                metadata_ret = afr_selfheal_metadata (frame, this, inode);</div><div class='add'>+    if (metadata_selfheal &amp;&amp; priv-&gt;metadata_self_heal)</div><div class='add'>+        metadata_ret = afr_selfheal_metadata(frame, this, inode);</div><div class='ctx'> </div><div class='del'>-	if (entry_selfheal &amp;&amp; priv-&gt;entry_self_heal)</div><div class='del'>-                entry_ret = afr_selfheal_entry (frame, this, inode);</div><div class='add'>+    if (entry_selfheal &amp;&amp; priv-&gt;entry_self_heal)</div><div class='add'>+        entry_ret = afr_selfheal_entry(frame, this, inode);</div><div class='ctx'> </div><div class='del'>-        or_ret = (data_ret | metadata_ret | entry_ret);</div><div class='add'>+    or_ret = (data_ret | metadata_ret | entry_ret);</div><div class='ctx'> </div><div class='del'>-        if (data_ret == -EIO || metadata_ret == -EIO || entry_ret == -EIO)</div><div class='del'>-                ret = -EIO;</div><div class='del'>-        else if (data_ret == 1 &amp;&amp; metadata_ret == 1 &amp;&amp; entry_ret == 1)</div><div class='del'>-                ret = 1;</div><div class='del'>-        else if (or_ret &lt; 0)</div><div class='del'>-                ret = or_ret;</div><div class='del'>-        else</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (data_ret == -EIO || metadata_ret == -EIO || entry_ret == -EIO)</div><div class='add'>+        ret = -EIO;</div><div class='add'>+    else if (data_ret == 1 &amp;&amp; metadata_ret == 1 &amp;&amp; entry_ret == 1)</div><div class='add'>+        ret = 1;</div><div class='add'>+    else if (or_ret &lt; 0)</div><div class='add'>+        ret = or_ret;</div><div class='add'>+    else</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return ret;</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> /*</div><div class='ctx'>  * This is the entry point for healing a given GFID. The return values for this</div><div class='hunk'>@@ -2532,160 +2502,160 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal (xlator_t *this, uuid_t gfid)</div><div class='add'>+afr_selfheal(xlator_t *this, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        int           ret   = -1;</div><div class='del'>-	call_frame_t *frame = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-	frame = afr_frame_create (this, NULL);</div><div class='del'>-	if (!frame)</div><div class='del'>-		return ret;</div><div class='add'>+    frame = afr_frame_create(this, NULL);</div><div class='add'>+    if (!frame)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        local-&gt;xdata_req = dict_new();</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    local-&gt;xdata_req = dict_new();</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_do (frame, this, gfid);</div><div class='add'>+    ret = afr_selfheal_do(frame, this, gfid);</div><div class='ctx'> </div><div class='del'>-	if (frame)</div><div class='del'>-		AFR_STACK_DESTROY (frame);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-afr_local_t*</div><div class='del'>-__afr_dequeue_heals (afr_private_t *priv)</div><div class='add'>+afr_local_t *</div><div class='add'>+__afr_dequeue_heals(afr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;priv-&gt;heal_waiting))</div><div class='del'>-                goto none;</div><div class='del'>-        if ((priv-&gt;background_self_heal_count &gt; 0) &amp;&amp;</div><div class='del'>-            (priv-&gt;healers &gt;= priv-&gt;background_self_heal_count))</div><div class='del'>-                goto none;</div><div class='add'>+    if (list_empty(&amp;priv-&gt;heal_waiting))</div><div class='add'>+        goto none;</div><div class='add'>+    if ((priv-&gt;background_self_heal_count &gt; 0) &amp;&amp;</div><div class='add'>+        (priv-&gt;healers &gt;= priv-&gt;background_self_heal_count))</div><div class='add'>+        goto none;</div><div class='ctx'> </div><div class='del'>-        local = list_entry (priv-&gt;heal_waiting.next, afr_local_t, healer);</div><div class='del'>-        priv-&gt;heal_waiters--;</div><div class='del'>-        GF_ASSERT (priv-&gt;heal_waiters &gt;= 0);</div><div class='del'>-        list_del_init(&amp;local-&gt;healer);</div><div class='del'>-        list_add(&amp;local-&gt;healer, &amp;priv-&gt;healing);</div><div class='del'>-        priv-&gt;healers++;</div><div class='del'>-        return local;</div><div class='add'>+    local = list_entry(priv-&gt;heal_waiting.next, afr_local_t, healer);</div><div class='add'>+    priv-&gt;heal_waiters--;</div><div class='add'>+    GF_ASSERT(priv-&gt;heal_waiters &gt;= 0);</div><div class='add'>+    list_del_init(&amp;local-&gt;healer);</div><div class='add'>+    list_add(&amp;local-&gt;healer, &amp;priv-&gt;healing);</div><div class='add'>+    priv-&gt;healers++;</div><div class='add'>+    return local;</div><div class='ctx'> none:</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0, "Nothing dequeued. "</div><div class='del'>-                      "Num healers: %d, Num Waiters: %d",</div><div class='del'>-                      priv-&gt;healers, priv-&gt;heal_waiters);</div><div class='del'>-        return NULL;</div><div class='add'>+    gf_msg_debug(THIS-&gt;name, 0,</div><div class='add'>+                 "Nothing dequeued. "</div><div class='add'>+                 "Num healers: %d, Num Waiters: %d",</div><div class='add'>+                 priv-&gt;healers, priv-&gt;heal_waiters);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_refresh_selfheal_wrap (void *opaque)</div><div class='add'>+afr_refresh_selfheal_wrap(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *heal_frame = opaque;</div><div class='del'>-        afr_local_t *local = heal_frame-&gt;local;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    call_frame_t *heal_frame = opaque;</div><div class='add'>+    afr_local_t *local = heal_frame-&gt;local;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal (heal_frame-&gt;this, local-&gt;refreshinode-&gt;gfid);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = afr_selfheal(heal_frame-&gt;this, local-&gt;refreshinode-&gt;gfid);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_refresh_heal_done (int ret, call_frame_t *frame, void *opaque)</div><div class='del'>-{</div><div class='del'>-        call_frame_t *heal_frame = opaque;</div><div class='del'>-        xlator_t *this = heal_frame-&gt;this;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        afr_local_t *local = heal_frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_del_init(&amp;local-&gt;healer);</div><div class='del'>-                priv-&gt;healers--;</div><div class='del'>-                GF_ASSERT (priv-&gt;healers &gt;= 0);</div><div class='del'>-                local = __afr_dequeue_heals (priv);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+afr_refresh_heal_done(int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *heal_frame = opaque;</div><div class='add'>+    xlator_t *this = heal_frame-&gt;this;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = heal_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_DESTROY (heal_frame);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;local-&gt;healer);</div><div class='add'>+        priv-&gt;healers--;</div><div class='add'>+        GF_ASSERT(priv-&gt;healers &gt;= 0);</div><div class='add'>+        local = __afr_dequeue_heals(priv);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (local)</div><div class='del'>-                afr_heal_synctask (this, local);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_DESTROY(heal_frame);</div><div class='ctx'> </div><div class='add'>+    if (local)</div><div class='add'>+        afr_heal_synctask(this, local);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_heal_synctask (xlator_t *this, afr_local_t *local)</div><div class='add'>+afr_heal_synctask(xlator_t *this, afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        call_frame_t *heal_frame = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        heal_frame = local-&gt;heal_frame;</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, afr_refresh_selfheal_wrap,</div><div class='del'>-                            afr_refresh_heal_done, heal_frame, heal_frame);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                /* Heal not launched. Will be queued when the next inode</div><div class='del'>-                 * refresh happens and shd hasn't healed it yet. */</div><div class='del'>-                afr_refresh_heal_done (ret, heal_frame, heal_frame);</div><div class='add'>+    heal_frame = local-&gt;heal_frame;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, afr_refresh_selfheal_wrap,</div><div class='add'>+                       afr_refresh_heal_done, heal_frame, heal_frame);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        /* Heal not launched. Will be queued when the next inode</div><div class='add'>+         * refresh happens and shd hasn't healed it yet. */</div><div class='add'>+        afr_refresh_heal_done(ret, heal_frame, heal_frame);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_throttled_selfheal (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t can_heal = _gf_true;</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((priv-&gt;background_self_heal_count &gt; 0) &amp;&amp;</div><div class='del'>-                    (priv-&gt;heal_wait_qlen + priv-&gt;background_self_heal_count) &gt;</div><div class='del'>-                    (priv-&gt;heal_waiters + priv-&gt;healers)) {</div><div class='del'>-                        list_add_tail(&amp;local-&gt;healer, &amp;priv-&gt;heal_waiting);</div><div class='del'>-                        priv-&gt;heal_waiters++;</div><div class='del'>-                        local = __afr_dequeue_heals (priv);</div><div class='del'>-                } else {</div><div class='del'>-                        can_heal = _gf_false;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (can_heal) {</div><div class='del'>-                if (local)</div><div class='del'>-                        afr_heal_synctask (this, local);</div><div class='del'>-                else</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Max number of heals are "</div><div class='del'>-                                      "pending, background self-heal rejected.");</div><div class='add'>+afr_throttled_selfheal(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t can_heal = _gf_true;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((priv-&gt;background_self_heal_count &gt; 0) &amp;&amp;</div><div class='add'>+            (priv-&gt;heal_wait_qlen + priv-&gt;background_self_heal_count) &gt;</div><div class='add'>+                (priv-&gt;heal_waiters + priv-&gt;healers)) {</div><div class='add'>+            list_add_tail(&amp;local-&gt;healer, &amp;priv-&gt;heal_waiting);</div><div class='add'>+            priv-&gt;heal_waiters++;</div><div class='add'>+            local = __afr_dequeue_heals(priv);</div><div class='add'>+        } else {</div><div class='add'>+            can_heal = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (can_heal) {</div><div class='add'>+        if (local)</div><div class='add'>+            afr_heal_synctask(this, local);</div><div class='add'>+        else</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Max number of heals are "</div><div class='add'>+                         "pending, background self-heal rejected.");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return can_heal;</div><div class='add'>+    return can_heal;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_choose_source_by_policy (afr_private_t *priv, unsigned char *sources,</div><div class='del'>-                             afr_transaction_type type)</div><div class='add'>+afr_choose_source_by_policy(afr_private_t *priv, unsigned char *sources,</div><div class='add'>+                            afr_transaction_type type)</div><div class='ctx'> {</div><div class='del'>-        int source = -1;</div><div class='del'>-        int i      = 0;</div><div class='add'>+    int source = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        /* Give preference to local child to save on bandwidth */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (priv-&gt;local[i] &amp;&amp; sources[i]) {</div><div class='del'>-                        if ((type == AFR_DATA_TRANSACTION) &amp;&amp;</div><div class='del'>-                            AFR_IS_ARBITER_BRICK (priv, i))</div><div class='del'>-                                continue;</div><div class='add'>+    /* Give preference to local child to save on bandwidth */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (priv-&gt;local[i] &amp;&amp; sources[i]) {</div><div class='add'>+            if ((type == AFR_DATA_TRANSACTION) &amp;&amp; AFR_IS_ARBITER_BRICK(priv, i))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                        source = i;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            source = i;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (sources[i]) {</div><div class='del'>-                        source = i;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (sources[i]) {</div><div class='add'>+            source = i;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return source;</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heal-data.c b/xlators/cluster/afr/src/afr-self-heal-data.c<br/>index c83ef0b7e30..a477fae8039 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-data.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-self-heal-data.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-data.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-data.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-self-heal.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='hunk'>@@ -17,596 +16,571 @@</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='ctx'> enum {</div><div class='del'>-	AFR_SELFHEAL_DATA_FULL = 0,</div><div class='del'>-	AFR_SELFHEAL_DATA_DIFF,</div><div class='add'>+    AFR_SELFHEAL_DATA_FULL = 0,</div><div class='add'>+    AFR_SELFHEAL_DATA_DIFF,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #define HAS_HOLES(i) ((i-&gt;ia_blocks * 512) &lt; (i-&gt;ia_size))</div><div class='ctx'> static int</div><div class='del'>-__checksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		int op_ret, int op_errno, uint32_t weak, uint8_t *strong,</div><div class='del'>-		dict_t *xdata)</div><div class='add'>+__checksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, uint32_t weak, uint8_t *strong, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-	int i = (long) cookie;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        replies = local-&gt;replies;</div><div class='del'>-</div><div class='del'>-	replies[i].valid = 1;</div><div class='del'>-	replies[i].op_ret = op_ret;</div><div class='del'>-	replies[i].op_errno = op_errno;</div><div class='del'>-        if (xdata) {</div><div class='del'>-                replies[i].buf_has_zeroes = dict_get_str_boolean (xdata,</div><div class='del'>-                                                   "buf-has-zeroes", _gf_false);</div><div class='del'>-                replies[i].fips_mode_rchecksum = dict_get_str_boolean (xdata,</div><div class='del'>-                                              "fips-mode-rchecksum", _gf_false);</div><div class='del'>-        }</div><div class='del'>-	if (strong) {</div><div class='del'>-                if (replies[i].fips_mode_rchecksum) {</div><div class='del'>-                        memcpy (local-&gt;replies[i].checksum, strong,</div><div class='del'>-                                SHA256_DIGEST_LENGTH);</div><div class='del'>-                } else {</div><div class='del'>-                        memcpy (local-&gt;replies[i].checksum, strong,</div><div class='del'>-                                MD5_DIGEST_LENGTH);</div><div class='del'>-                }</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int i = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+</div><div class='add'>+    replies[i].valid = 1;</div><div class='add'>+    replies[i].op_ret = op_ret;</div><div class='add'>+    replies[i].op_errno = op_errno;</div><div class='add'>+    if (xdata) {</div><div class='add'>+        replies[i].buf_has_zeroes = dict_get_str_boolean(</div><div class='add'>+            xdata, "buf-has-zeroes", _gf_false);</div><div class='add'>+        replies[i].fips_mode_rchecksum = dict_get_str_boolean(</div><div class='add'>+            xdata, "fips-mode-rchecksum", _gf_false);</div><div class='add'>+    }</div><div class='add'>+    if (strong) {</div><div class='add'>+        if (replies[i].fips_mode_rchecksum) {</div><div class='add'>+            memcpy(local-&gt;replies[i].checksum, strong, SHA256_DIGEST_LENGTH);</div><div class='add'>+        } else {</div><div class='add'>+            memcpy(local-&gt;replies[i].checksum, strong, MD5_DIGEST_LENGTH);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='del'>-	return 0;</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__afr_can_skip_data_block_heal (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                                int source, unsigned char *healed_sinks,</div><div class='del'>-				off_t offset, size_t size,</div><div class='del'>-                                struct iatt *poststat)</div><div class='add'>+__afr_can_skip_data_block_heal(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                               int source, unsigned char *healed_sinks,</div><div class='add'>+                               off_t offset, size_t size, struct iatt *poststat)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	unsigned char *wind_subvols = NULL;</div><div class='del'>-        gf_boolean_t checksum_match = _gf_true;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        replies = local-&gt;replies;</div><div class='del'>-</div><div class='del'>-        xdata = dict_new();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='del'>-        if (dict_set_int32 (xdata, "check-zero-filled", 1)) {</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    unsigned char *wind_subvols = NULL;</div><div class='add'>+    gf_boolean_t checksum_match = _gf_true;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    replies = local-&gt;replies;</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='add'>+    if (dict_set_int32(xdata, "check-zero-filled", 1)) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    wind_subvols = alloca0(priv-&gt;child_count);</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (i == source || healed_sinks[i])</div><div class='add'>+            wind_subvols[i] = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    AFR_ONLIST(wind_subvols, frame, __checksum_cbk, rchecksum, fd, offset, size,</div><div class='add'>+               xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+</div><div class='add'>+    if (!replies[source].valid || replies[source].op_ret != 0)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-	wind_subvols = alloca0 (priv-&gt;child_count);</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (i == source || healed_sinks[i])</div><div class='del'>-			wind_subvols[i] = 1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	AFR_ONLIST (wind_subvols, frame, __checksum_cbk, rchecksum, fd,</div><div class='del'>-		    offset, size, xdata);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-</div><div class='del'>-	if (!replies[source].valid || replies[source].op_ret != 0)</div><div class='del'>-		return _gf_false;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (i == source)</div><div class='del'>-			continue;</div><div class='del'>-                if (replies[i].valid) {</div><div class='del'>-                        if (memcmp (replies[source].checksum,</div><div class='del'>-                                    replies[i].checksum,</div><div class='del'>-                                    replies[source].fips_mode_rchecksum ?</div><div class='del'>-                                    SHA256_DIGEST_LENGTH : MD5_DIGEST_LENGTH)) {</div><div class='del'>-                                checksum_match = _gf_false;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (checksum_match) {</div><div class='del'>-                if (HAS_HOLES (poststat))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-</div><div class='del'>-                /* For non-sparse files, we might be better off writing the</div><div class='del'>-                 * zeroes to sinks to avoid mismatch of disk-usage in bricks. */</div><div class='del'>-                if (local-&gt;replies[source].buf_has_zeroes)</div><div class='del'>-                        return _gf_false;</div><div class='del'>-                else</div><div class='del'>-                        return _gf_true;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (i == source)</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].valid) {</div><div class='add'>+            if (memcmp(replies[source].checksum, replies[i].checksum,</div><div class='add'>+                       replies[source].fips_mode_rchecksum</div><div class='add'>+                           ? SHA256_DIGEST_LENGTH</div><div class='add'>+                           : MD5_DIGEST_LENGTH)) {</div><div class='add'>+                checksum_match = _gf_false;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (checksum_match) {</div><div class='add'>+        if (HAS_HOLES(poststat))</div><div class='add'>+            return _gf_true;</div><div class='add'>+</div><div class='add'>+        /* For non-sparse files, we might be better off writing the</div><div class='add'>+         * zeroes to sinks to avoid mismatch of disk-usage in bricks. */</div><div class='add'>+        if (local-&gt;replies[source].buf_has_zeroes)</div><div class='add'>+            return _gf_false;</div><div class='add'>+        else</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__afr_is_sink_zero_filled (xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-                           off_t offset, int sink)</div><div class='add'>+__afr_is_sink_zero_filled(xlator_t *this, fd_t *fd, size_t size, off_t offset,</div><div class='add'>+                          int sink)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv   = NULL;</div><div class='del'>-        struct iobref *iobref = NULL;</div><div class='del'>-        struct iovec  *iovec  = NULL;</div><div class='del'>-        int            count  = 0;</div><div class='del'>-        int            ret    = 0;</div><div class='del'>-        gf_boolean_t   zero_filled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        ret = syncop_readv (priv-&gt;children[sink], fd, size, offset, 0, &amp;iovec,</div><div class='del'>-                            &amp;count, &amp;iobref, NULL, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = iov_0filled (iovec, count);</div><div class='del'>-        if (!ret)</div><div class='del'>-                zero_filled = _gf_true;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iovec *iovec = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t zero_filled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ret = syncop_readv(priv-&gt;children[sink], fd, size, offset, 0, &amp;iovec,</div><div class='add'>+                       &amp;count, &amp;iobref, NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = iov_0filled(iovec, count);</div><div class='add'>+    if (!ret)</div><div class='add'>+        zero_filled = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        if (iovec)</div><div class='del'>-                GF_FREE (iovec);</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        return zero_filled;</div><div class='add'>+    if (iovec)</div><div class='add'>+        GF_FREE(iovec);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    return zero_filled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_data_read_write (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-				int source, unsigned char *healed_sinks,</div><div class='del'>-				off_t offset, size_t size,</div><div class='del'>-				struct afr_reply *replies, int type)</div><div class='add'>+__afr_selfheal_data_read_write(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                               int source, unsigned char *healed_sinks,</div><div class='add'>+                               off_t offset, size_t size,</div><div class='add'>+                               struct afr_reply *replies, int type)</div><div class='ctx'> {</div><div class='del'>-	struct iovec *iovec = NULL;</div><div class='del'>-	int count = 0;</div><div class='del'>-	struct iobref *iobref = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	ret = syncop_readv (priv-&gt;children[source], fd, size, offset, 0,</div><div class='del'>-                           &amp;iovec, &amp;count, &amp;iobref, NULL, NULL, NULL);</div><div class='del'>-	if (ret &lt;= 0)</div><div class='del'>-		return ret;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!healed_sinks[i])</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * TODO: Use fiemap() and discard() to heal holes</div><div class='del'>-		 * in the future.</div><div class='del'>-		 *</div><div class='del'>-		 * For now,</div><div class='del'>-		 *</div><div class='del'>-		 * - if the source had any holes at all,</div><div class='del'>-		 * AND</div><div class='del'>-		 * - if we are writing past the original file size</div><div class='del'>-		 *   of the sink</div><div class='del'>-		 * AND</div><div class='del'>-		 * - is NOT the last block of the source file. if</div><div class='del'>-		 *   the block contains EOF, it has to be written</div><div class='del'>-		 *   in order to set the file size even if the</div><div class='del'>-		 *   last block is 0-filled.</div><div class='del'>-		 * AND</div><div class='del'>-		 * - if the read buffer is filled with only 0's</div><div class='del'>-		 *</div><div class='del'>-		 * then, skip writing to this source. We don't depend</div><div class='del'>-		 * on the write to happen to update the size as we</div><div class='del'>-		 * have performed an ftruncate() upfront anyways.</div><div class='del'>-		 */</div><div class='del'>-#define is_last_block(o,b,s) ((s &gt;= o) &amp;&amp; (s &lt;= (o + b)))</div><div class='del'>-		if (HAS_HOLES ((&amp;replies[source].poststat)) &amp;&amp;</div><div class='del'>-		    offset &gt;= replies[i].poststat.ia_size &amp;&amp;</div><div class='del'>-		    !is_last_block (offset, size,</div><div class='del'>-				    replies[source].poststat.ia_size) &amp;&amp;</div><div class='del'>-		    (iov_0filled (iovec, count) == 0))</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-                /* Avoid filling up sparse regions of the sink with 0-filled</div><div class='del'>-                 * writes.*/</div><div class='del'>-                if (type == AFR_SELFHEAL_DATA_FULL &amp;&amp;</div><div class='del'>-                    HAS_HOLES ((&amp;replies[source].poststat)) &amp;&amp;</div><div class='del'>-                    ((offset + size) &lt;= replies[i].poststat.ia_size) &amp;&amp;</div><div class='del'>-                    (iov_0filled (iovec, count) == 0) &amp;&amp;</div><div class='del'>-                    __afr_is_sink_zero_filled (this, fd, size, offset, i)) {</div><div class='del'>-                                continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		ret = syncop_writev (priv-&gt;children[i], fd, iovec, count,</div><div class='del'>-                                    offset, iobref, 0, NULL, NULL, NULL, NULL);</div><div class='del'>-		if (ret != iov_length (iovec, count)) {</div><div class='del'>-			/* write() failed on this sink. unset the corresponding</div><div class='del'>-			   member in sinks[] (which is healed_sinks[] in the</div><div class='del'>-			   caller) so that this server does NOT get considered</div><div class='del'>-			   as successfully healed.</div><div class='del'>-			*/</div><div class='del'>-			healed_sinks[i] = 0;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-        if (iovec)</div><div class='del'>-                GF_FREE (iovec);</div><div class='del'>-	if (iobref)</div><div class='del'>-		iobref_unref (iobref);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    struct iovec *iovec = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = syncop_readv(priv-&gt;children[source], fd, size, offset, 0, &amp;iovec,</div><div class='add'>+                       &amp;count, &amp;iobref, NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+            /*</div><div class='add'>+             * TODO: Use fiemap() and discard() to heal holes</div><div class='add'>+             * in the future.</div><div class='add'>+             *</div><div class='add'>+             * For now,</div><div class='add'>+             *</div><div class='add'>+             * - if the source had any holes at all,</div><div class='add'>+             * AND</div><div class='add'>+             * - if we are writing past the original file size</div><div class='add'>+             *   of the sink</div><div class='add'>+             * AND</div><div class='add'>+             * - is NOT the last block of the source file. if</div><div class='add'>+             *   the block contains EOF, it has to be written</div><div class='add'>+             *   in order to set the file size even if the</div><div class='add'>+             *   last block is 0-filled.</div><div class='add'>+             * AND</div><div class='add'>+             * - if the read buffer is filled with only 0's</div><div class='add'>+             *</div><div class='add'>+             * then, skip writing to this source. We don't depend</div><div class='add'>+             * on the write to happen to update the size as we</div><div class='add'>+             * have performed an ftruncate() upfront anyways.</div><div class='add'>+             */</div><div class='add'>+#define is_last_block(o, b, s) ((s &gt;= o) &amp;&amp; (s &lt;= (o + b)))</div><div class='add'>+        if (HAS_HOLES((&amp;replies[source].poststat)) &amp;&amp;</div><div class='add'>+            offset &gt;= replies[i].poststat.ia_size &amp;&amp;</div><div class='add'>+            !is_last_block(offset, size, replies[source].poststat.ia_size) &amp;&amp;</div><div class='add'>+            (iov_0filled(iovec, count) == 0))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /* Avoid filling up sparse regions of the sink with 0-filled</div><div class='add'>+         * writes.*/</div><div class='add'>+        if (type == AFR_SELFHEAL_DATA_FULL &amp;&amp;</div><div class='add'>+            HAS_HOLES((&amp;replies[source].poststat)) &amp;&amp;</div><div class='add'>+            ((offset + size) &lt;= replies[i].poststat.ia_size) &amp;&amp;</div><div class='add'>+            (iov_0filled(iovec, count) == 0) &amp;&amp;</div><div class='add'>+            __afr_is_sink_zero_filled(this, fd, size, offset, i)) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncop_writev(priv-&gt;children[i], fd, iovec, count, offset, iobref,</div><div class='add'>+                            0, NULL, NULL, NULL, NULL);</div><div class='add'>+        if (ret != iov_length(iovec, count)) {</div><div class='add'>+            /* write() failed on this sink. unset the corresponding</div><div class='add'>+               member in sinks[] (which is healed_sinks[] in the</div><div class='add'>+               caller) so that this server does NOT get considered</div><div class='add'>+               as successfully healed.</div><div class='add'>+            */</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (iovec)</div><div class='add'>+        GF_FREE(iovec);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_data_block (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-			 int source, unsigned char *healed_sinks, off_t offset,</div><div class='del'>-			 size_t size, int type, struct afr_reply *replies)</div><div class='add'>+afr_selfheal_data_block(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                        int source, unsigned char *healed_sinks, off_t offset,</div><div class='add'>+                        size_t size, int type, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	int sink_count = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	unsigned char *data_lock = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	sink_count = AFR_COUNT (healed_sinks, priv-&gt;child_count);</div><div class='del'>-	data_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_inodelk (frame, this, fd-&gt;inode, this-&gt;name,</div><div class='del'>-				    offset, size, data_lock);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; sink_count) {</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (type == AFR_SELFHEAL_DATA_DIFF &amp;&amp;</div><div class='del'>-		    __afr_can_skip_data_block_heal (frame, this, fd, source,</div><div class='del'>-					            healed_sinks, offset, size,</div><div class='del'>-                                                   &amp;replies[source].poststat)) {</div><div class='del'>-			ret = 0;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_data_read_write (frame, this, fd, source,</div><div class='del'>-						      healed_sinks, offset, size,</div><div class='del'>-						      replies, type);</div><div class='del'>-	}</div><div class='del'>-unlock:</div><div class='del'>-	afr_selfheal_uninodelk (frame, this, fd-&gt;inode, this-&gt;name,</div><div class='del'>-				offset, size, data_lock);</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int sink_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *data_lock = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    sink_count = AFR_COUNT(healed_sinks, priv-&gt;child_count);</div><div class='add'>+    data_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_inodelk(frame, this, fd-&gt;inode, this-&gt;name, offset, size,</div><div class='add'>+                               data_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; sink_count) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        if (type == AFR_SELFHEAL_DATA_DIFF &amp;&amp;</div><div class='add'>+            __afr_can_skip_data_block_heal(frame, this, fd, source,</div><div class='add'>+                                           healed_sinks, offset, size,</div><div class='add'>+                                           &amp;replies[source].poststat)) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        ret = __afr_selfheal_data_read_write(</div><div class='add'>+            frame, this, fd, source, healed_sinks, offset, size, replies, type);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, fd-&gt;inode, this-&gt;name, offset, size,</div><div class='add'>+                           data_lock);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_data_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-			 unsigned char *healed_sinks)</div><div class='add'>+afr_selfheal_data_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                        unsigned char *healed_sinks)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;ensure_durability)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-	AFR_ONLIST (healed_sinks, frame, afr_sh_generic_fop_cbk, fsync, fd, 0,</div><div class='del'>-                    NULL);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-		if (healed_sinks[i] &amp;&amp; local-&gt;replies[i].op_ret != 0)</div><div class='del'>-			/* fsync() failed. Do NOT consider this server</div><div class='del'>-			   as successfully healed. Mark it so.</div><div class='del'>-			*/</div><div class='del'>-			healed_sinks[i] = 0;</div><div class='del'>-	return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;ensure_durability)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    AFR_ONLIST(healed_sinks, frame, afr_sh_generic_fop_cbk, fsync, fd, 0, NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (healed_sinks[i] &amp;&amp; local-&gt;replies[i].op_ret != 0)</div><div class='add'>+            /* fsync() failed. Do NOT consider this server</div><div class='add'>+               as successfully healed. Mark it so.</div><div class='add'>+            */</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_data_self_heal_type_get (afr_private_t *priv, unsigned char *healed_sinks,</div><div class='del'>-                             int source, struct afr_reply *replies)</div><div class='add'>+afr_data_self_heal_type_get(afr_private_t *priv, unsigned char *healed_sinks,</div><div class='add'>+                            int source, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int type = AFR_SELFHEAL_DATA_FULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;data_self_heal_algorithm == NULL) {</div><div class='del'>-                type = AFR_SELFHEAL_DATA_FULL;</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (!healed_sinks[i] &amp;&amp; i != source)</div><div class='del'>-                                continue;</div><div class='del'>-                        if (replies[i].poststat.ia_size) {</div><div class='del'>-                                type = AFR_SELFHEAL_DATA_DIFF;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else if (strcmp (priv-&gt;data_self_heal_algorithm, "full") == 0) {</div><div class='del'>-                type = AFR_SELFHEAL_DATA_FULL;</div><div class='del'>-        } else if (strcmp (priv-&gt;data_self_heal_algorithm, "diff") == 0) {</div><div class='add'>+    int type = AFR_SELFHEAL_DATA_FULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;data_self_heal_algorithm == NULL) {</div><div class='add'>+        type = AFR_SELFHEAL_DATA_FULL;</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (!healed_sinks[i] &amp;&amp; i != source)</div><div class='add'>+                continue;</div><div class='add'>+            if (replies[i].poststat.ia_size) {</div><div class='ctx'>                 type = AFR_SELFHEAL_DATA_DIFF;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return type;</div><div class='add'>+    } else if (strcmp(priv-&gt;data_self_heal_algorithm, "full") == 0) {</div><div class='add'>+        type = AFR_SELFHEAL_DATA_FULL;</div><div class='add'>+    } else if (strcmp(priv-&gt;data_self_heal_algorithm, "diff") == 0) {</div><div class='add'>+        type = AFR_SELFHEAL_DATA_DIFF;</div><div class='add'>+    }</div><div class='add'>+    return type;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_data_do (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		      int source, unsigned char *healed_sinks,</div><div class='del'>-		      struct afr_reply *replies)</div><div class='add'>+afr_selfheal_data_do(call_frame_t *frame, xlator_t *this, fd_t *fd, int source,</div><div class='add'>+                     unsigned char *healed_sinks, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	off_t off = 0;</div><div class='del'>-	size_t block = 0;</div><div class='del'>-	int type = AFR_SELFHEAL_DATA_FULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	call_frame_t *iter_frame = NULL;</div><div class='del'>-        unsigned char arbiter_sink_status = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        if (priv-&gt;arbiter_count) {</div><div class='del'>-                arbiter_sink_status = healed_sinks[ARBITER_BRICK_INDEX];</div><div class='del'>-                healed_sinks[ARBITER_BRICK_INDEX] = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    off_t off = 0;</div><div class='add'>+    size_t block = 0;</div><div class='add'>+    int type = AFR_SELFHEAL_DATA_FULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *iter_frame = NULL;</div><div class='add'>+    unsigned char arbiter_sink_status = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv-&gt;arbiter_count) {</div><div class='add'>+        arbiter_sink_status = healed_sinks[ARBITER_BRICK_INDEX];</div><div class='add'>+        healed_sinks[ARBITER_BRICK_INDEX] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    block = 128 * 1024 * priv-&gt;data_self_heal_window_size;</div><div class='add'>+</div><div class='add'>+    type = afr_data_self_heal_type_get(priv, healed_sinks, source, replies);</div><div class='add'>+</div><div class='add'>+    iter_frame = afr_copy_frame(frame);</div><div class='add'>+    if (!iter_frame) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (off = 0; off &lt; replies[source].poststat.ia_size; off += block) {</div><div class='add'>+        if (AFR_COUNT(healed_sinks, priv-&gt;child_count) == 0) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        block = 128 * 1024 * priv-&gt;data_self_heal_window_size;</div><div class='del'>-</div><div class='del'>-        type = afr_data_self_heal_type_get (priv, healed_sinks, source,</div><div class='del'>-                                            replies);</div><div class='add'>+        ret = afr_selfheal_data_block(iter_frame, this, fd, source,</div><div class='add'>+                                      healed_sinks, off, block, type, replies);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-	iter_frame = afr_copy_frame (frame);</div><div class='del'>-	if (!iter_frame) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+        AFR_STACK_RESET(iter_frame);</div><div class='add'>+        if (iter_frame-&gt;local == NULL) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (off = 0; off &lt; replies[source].poststat.ia_size; off += block) {</div><div class='del'>-                if (AFR_COUNT (healed_sinks, priv-&gt;child_count) == 0) {</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		ret = afr_selfheal_data_block (iter_frame, this, fd, source,</div><div class='del'>-					       healed_sinks, off, block, type,</div><div class='del'>-					       replies);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			goto out;</div><div class='del'>-</div><div class='del'>-		AFR_STACK_RESET (iter_frame);</div><div class='del'>-		if (iter_frame-&gt;local == NULL) {</div><div class='del'>-		        ret = -ENOTCONN;</div><div class='del'>-		        goto out;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_data_fsync (frame, this, fd, healed_sinks);</div><div class='add'>+    ret = afr_selfheal_data_fsync(frame, this, fd, healed_sinks);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (arbiter_sink_status)</div><div class='del'>-                healed_sinks[ARBITER_BRICK_INDEX] = arbiter_sink_status;</div><div class='add'>+    if (arbiter_sink_status)</div><div class='add'>+        healed_sinks[ARBITER_BRICK_INDEX] = arbiter_sink_status;</div><div class='ctx'> </div><div class='del'>-	if (iter_frame)</div><div class='del'>-		AFR_STACK_DESTROY (iter_frame);</div><div class='del'>-	return ret;</div><div class='add'>+    if (iter_frame)</div><div class='add'>+        AFR_STACK_DESTROY(iter_frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_truncate_sinks (call_frame_t *frame, xlator_t *this,</div><div class='del'>-			       fd_t *fd, unsigned char *healed_sinks,</div><div class='del'>-			       uint64_t size)</div><div class='add'>+__afr_selfheal_truncate_sinks(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                              unsigned char *healed_sinks, uint64_t size)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        unsigned char arbiter_sink_status = 0;</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;arbiter_count) {</div><div class='del'>-                arbiter_sink_status = healed_sinks[ARBITER_BRICK_INDEX];</div><div class='del'>-                healed_sinks[ARBITER_BRICK_INDEX] = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	AFR_ONLIST (healed_sinks, frame, afr_sh_generic_fop_cbk, ftruncate, fd,</div><div class='del'>-                    size, NULL);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-		if (healed_sinks[i] &amp;&amp; local-&gt;replies[i].op_ret == -1)</div><div class='del'>-			/* truncate() failed. Do NOT consider this server</div><div class='del'>-			   as successfully healed. Mark it so.</div><div class='del'>-			*/</div><div class='del'>-			healed_sinks[i] = 0;</div><div class='del'>-</div><div class='del'>-        if (arbiter_sink_status)</div><div class='del'>-                healed_sinks[ARBITER_BRICK_INDEX] = arbiter_sink_status;</div><div class='del'>-	return 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char arbiter_sink_status = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;arbiter_count) {</div><div class='add'>+        arbiter_sink_status = healed_sinks[ARBITER_BRICK_INDEX];</div><div class='add'>+        healed_sinks[ARBITER_BRICK_INDEX] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    AFR_ONLIST(healed_sinks, frame, afr_sh_generic_fop_cbk, ftruncate, fd, size,</div><div class='add'>+               NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (healed_sinks[i] &amp;&amp; local-&gt;replies[i].op_ret == -1)</div><div class='add'>+            /* truncate() failed. Do NOT consider this server</div><div class='add'>+               as successfully healed. Mark it so.</div><div class='add'>+            */</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+</div><div class='add'>+    if (arbiter_sink_status)</div><div class='add'>+        healed_sinks[ARBITER_BRICK_INDEX] = arbiter_sink_status;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_has_source_witnesses (xlator_t *this, unsigned char *sources,</div><div class='del'>-                          uint64_t *witness)</div><div class='add'>+afr_has_source_witnesses(xlator_t *this, unsigned char *sources,</div><div class='add'>+                         uint64_t *witness)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (sources[i] &amp;&amp; witness[i])</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (sources[i] &amp;&amp; witness[i])</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_does_size_mismatch (xlator_t *this, unsigned char *sources,</div><div class='del'>-                        struct afr_reply *replies)</div><div class='add'>+afr_does_size_mismatch(xlator_t *this, unsigned char *sources,</div><div class='add'>+                       struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        struct iatt *min = NULL;</div><div class='del'>-        struct iatt *max = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct iatt *min = NULL;</div><div class='add'>+    struct iatt *max = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (replies[i].op_ret &lt; 0)</div><div class='del'>-                        continue;</div><div class='add'>+        if (replies[i].op_ret &lt; 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (AFR_IS_ARBITER_BRICK (priv, i) &amp;&amp;</div><div class='del'>-                    (replies[i].poststat.ia_size == 0))</div><div class='del'>-                        continue;</div><div class='add'>+        if (AFR_IS_ARBITER_BRICK(priv, i) &amp;&amp; (replies[i].poststat.ia_size == 0))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!min)</div><div class='del'>-                        min = &amp;replies[i].poststat;</div><div class='add'>+        if (!min)</div><div class='add'>+            min = &amp;replies[i].poststat;</div><div class='ctx'> </div><div class='del'>-                if (!max)</div><div class='del'>-                        max = &amp;replies[i].poststat;</div><div class='add'>+        if (!max)</div><div class='add'>+            max = &amp;replies[i].poststat;</div><div class='ctx'> </div><div class='del'>-                if (min-&gt;ia_size &gt; replies[i].poststat.ia_size)</div><div class='del'>-                        min = &amp;replies[i].poststat;</div><div class='add'>+        if (min-&gt;ia_size &gt; replies[i].poststat.ia_size)</div><div class='add'>+            min = &amp;replies[i].poststat;</div><div class='ctx'> </div><div class='del'>-                if (max-&gt;ia_size &lt; replies[i].poststat.ia_size)</div><div class='del'>-                        max = &amp;replies[i].poststat;</div><div class='del'>-        }</div><div class='add'>+        if (max-&gt;ia_size &lt; replies[i].poststat.ia_size)</div><div class='add'>+            max = &amp;replies[i].poststat;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (min &amp;&amp; max) {</div><div class='del'>-                if (min-&gt;ia_size != max-&gt;ia_size)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (min &amp;&amp; max) {</div><div class='add'>+        if (min-&gt;ia_size != max-&gt;ia_size)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_mark_biggest_witness_as_source (xlator_t *this, unsigned char *sources,</div><div class='del'>-                                    uint64_t *witness)</div><div class='add'>+afr_mark_biggest_witness_as_source(xlator_t *this, unsigned char *sources,</div><div class='add'>+                                   uint64_t *witness)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        uint64_t biggest_witness = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /* Find source with biggest witness count */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (biggest_witness &lt; witness[i])</div><div class='del'>-                        biggest_witness = witness[i];</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Mark files with less witness count as not source */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if (witness[i] &lt; biggest_witness)</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t biggest_witness = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /* Find source with biggest witness count */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (biggest_witness &lt; witness[i])</div><div class='add'>+            biggest_witness = witness[i];</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Mark files with less witness count as not source */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (witness[i] &lt; biggest_witness)</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This is a tie breaker function. Only one source be assigned here */</div><div class='ctx'> static void</div><div class='del'>-afr_mark_newest_file_as_source (xlator_t *this, unsigned char *sources,</div><div class='del'>-                                struct afr_reply *replies)</div><div class='add'>+afr_mark_newest_file_as_source(xlator_t *this, unsigned char *sources,</div><div class='add'>+                               struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int source = -1;</div><div class='del'>-        uint32_t max_ctime = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /* Find source with latest ctime */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (max_ctime &lt;= replies[i].poststat.ia_ctime) {</div><div class='del'>-                        source = i;</div><div class='del'>-                        max_ctime = replies[i].poststat.ia_ctime;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    uint32_t max_ctime = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /* Find source with latest ctime */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (max_ctime &lt;= replies[i].poststat.ia_ctime) {</div><div class='add'>+            source = i;</div><div class='add'>+            max_ctime = replies[i].poststat.ia_ctime;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Only mark one of the files as source to break ties */</div><div class='del'>-        memset (sources, 0, sizeof (*sources) * priv-&gt;child_count);</div><div class='del'>-        sources[source] = 1;</div><div class='add'>+    /* Only mark one of the files as source to break ties */</div><div class='add'>+    memset(sources, 0, sizeof(*sources) * priv-&gt;child_count);</div><div class='add'>+    sources[source] = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_data_finalize_source (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                     inode_t *inode,</div><div class='del'>-                                     unsigned char *sources,</div><div class='del'>-                                     unsigned char *sinks,</div><div class='del'>-				     unsigned char *healed_sinks,</div><div class='del'>-				     unsigned char *locked_on,</div><div class='del'>-				     unsigned char *undid_pending,</div><div class='del'>-				     struct afr_reply *replies,</div><div class='del'>-                                     uint64_t *witness)</div><div class='add'>+__afr_selfheal_data_finalize_source(</div><div class='add'>+    call_frame_t *frame, xlator_t *this, inode_t *inode, unsigned char *sources,</div><div class='add'>+    unsigned char *sinks, unsigned char *healed_sinks, unsigned char *locked_on,</div><div class='add'>+    unsigned char *undid_pending, struct afr_reply *replies, uint64_t *witness)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int source = -1;</div><div class='del'>-	int sources_count = 0;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	sources_count = AFR_COUNT (sources, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	if ((AFR_CMP (locked_on, healed_sinks, priv-&gt;child_count) == 0)</div><div class='del'>-            || !sources_count) {</div><div class='del'>-		/* split brain */</div><div class='del'>-                source = afr_mark_split_brain_source_sinks (frame, this, inode,</div><div class='del'>-                                                            sources, sinks,</div><div class='del'>-                                                            healed_sinks,</div><div class='del'>-                                                            locked_on, replies,</div><div class='del'>-                                                          AFR_DATA_TRANSACTION);</div><div class='del'>-                if (source &lt; 0) {</div><div class='del'>-                        gf_event (EVENT_AFR_SPLIT_BRAIN, "subvol=%s;type=data;"</div><div class='del'>-                                 "file=%s", this-&gt;name, uuid_utoa(inode-&gt;gfid));</div><div class='del'>-                        return -EIO;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                _afr_fav_child_reset_sink_xattrs (frame, this, inode, source,</div><div class='del'>-                                                 healed_sinks, undid_pending,</div><div class='del'>-                                                 AFR_DATA_TRANSACTION,</div><div class='del'>-                                                 locked_on, replies);</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* No split brain at this point. If we were called from</div><div class='del'>-         * afr_heal_splitbrain_file(), abort.*/</div><div class='del'>-        if (afr_dict_contains_heal_op(frame))</div><div class='del'>-                return -EIO;</div><div class='del'>-</div><div class='del'>-        /* If there are no witnesses/size-mismatches on sources we are done*/</div><div class='del'>-        if (!afr_does_size_mismatch (this, sources, replies) &amp;&amp;</div><div class='del'>-            !afr_has_source_witnesses (this, sources, witness))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        afr_mark_largest_file_as_source (this, sources, replies);</div><div class='del'>-        afr_mark_biggest_witness_as_source (this, sources, witness);</div><div class='del'>-        afr_mark_newest_file_as_source (this, sources, replies);</div><div class='del'>-        if (priv-&gt;arbiter_count)</div><div class='del'>-                /* Choose non-arbiter brick as source for empty files. */</div><div class='del'>-                afr_mark_source_sinks_if_file_empty (this, sources, sinks,</div><div class='del'>-                                                     healed_sinks, locked_on,</div><div class='del'>-                                                     replies,</div><div class='del'>-                                                     AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    int sources_count = 0;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    sources_count = AFR_COUNT(sources, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    if ((AFR_CMP(locked_on, healed_sinks, priv-&gt;child_count) == 0) ||</div><div class='add'>+        !sources_count) {</div><div class='add'>+        /* split brain */</div><div class='add'>+        source = afr_mark_split_brain_source_sinks(</div><div class='add'>+            frame, this, inode, sources, sinks, healed_sinks, locked_on,</div><div class='add'>+            replies, AFR_DATA_TRANSACTION);</div><div class='add'>+        if (source &lt; 0) {</div><div class='add'>+            gf_event(EVENT_AFR_SPLIT_BRAIN,</div><div class='add'>+                     "subvol=%s;type=data;"</div><div class='add'>+                     "file=%s",</div><div class='add'>+                     this-&gt;name, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            return -EIO;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        _afr_fav_child_reset_sink_xattrs(</div><div class='add'>+            frame, this, inode, source, healed_sinks, undid_pending,</div><div class='add'>+            AFR_DATA_TRANSACTION, locked_on, replies);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* No split brain at this point. If we were called from</div><div class='add'>+     * afr_heal_splitbrain_file(), abort.*/</div><div class='add'>+    if (afr_dict_contains_heal_op(frame))</div><div class='add'>+        return -EIO;</div><div class='add'>+</div><div class='add'>+    /* If there are no witnesses/size-mismatches on sources we are done*/</div><div class='add'>+    if (!afr_does_size_mismatch(this, sources, replies) &amp;&amp;</div><div class='add'>+        !afr_has_source_witnesses(this, sources, witness))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    afr_mark_largest_file_as_source(this, sources, replies);</div><div class='add'>+    afr_mark_biggest_witness_as_source(this, sources, witness);</div><div class='add'>+    afr_mark_newest_file_as_source(this, sources, replies);</div><div class='add'>+    if (priv-&gt;arbiter_count)</div><div class='add'>+        /* Choose non-arbiter brick as source for empty files. */</div><div class='add'>+        afr_mark_source_sinks_if_file_empty(this, sources, sinks, healed_sinks,</div><div class='add'>+                                            locked_on, replies,</div><div class='add'>+                                            AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        afr_mark_active_sinks (this, sources, locked_on, healed_sinks);</div><div class='del'>-        source = afr_choose_source_by_policy (priv, sources,</div><div class='del'>-                                              AFR_DATA_TRANSACTION);</div><div class='add'>+    afr_mark_active_sinks(this, sources, locked_on, healed_sinks);</div><div class='add'>+    source = afr_choose_source_by_policy(priv, sources, AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-	return source;</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -619,296 +593,287 @@ out:</div><div class='ctx'>  * for self-healing, or -1 if no healing is necessary/split brain.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_data_prepare (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                             inode_t *inode, unsigned char *locked_on,</div><div class='del'>-                             unsigned char *sources, unsigned char *sinks,</div><div class='del'>-                             unsigned char *healed_sinks,</div><div class='del'>-                             unsigned char *undid_pending,</div><div class='del'>-			     struct afr_reply *replies, gf_boolean_t *pflag)</div><div class='add'>+__afr_selfheal_data_prepare(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                            unsigned char *locked_on, unsigned char *sources,</div><div class='add'>+                            unsigned char *sinks, unsigned char *healed_sinks,</div><div class='add'>+                            unsigned char *undid_pending,</div><div class='add'>+                            struct afr_reply *replies, gf_boolean_t *pflag)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	int source = -1;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        uint64_t *witness = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_unlocked_discover (frame, inode, inode-&gt;gfid,</div><div class='del'>-					      replies);</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        witness = alloca0(priv-&gt;child_count * sizeof (*witness));</div><div class='del'>-	ret = afr_selfheal_find_direction (frame, this, replies,</div><div class='del'>-					   AFR_DATA_TRANSACTION,</div><div class='del'>-					   locked_on, sources, sinks, witness,</div><div class='del'>-                                           pflag);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-</div><div class='del'>-        /* Initialize the healed_sinks[] array optimistically to</div><div class='del'>-           the intersection of to-be-healed (i.e sinks[]) and</div><div class='del'>-           the list of servers which are up (i.e locked_on[]).</div><div class='del'>-           As we encounter failures in the healing process, we</div><div class='del'>-           will unmark the respective servers in the healed_sinks[]</div><div class='del'>-           array.</div><div class='del'>-        */</div><div class='del'>-        AFR_INTERSECT (healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	source = __afr_selfheal_data_finalize_source (frame, this, inode,</div><div class='del'>-                                                      sources, sinks,</div><div class='del'>-                                                      healed_sinks,</div><div class='del'>-                                                      locked_on, undid_pending,</div><div class='del'>-                                                      replies, witness);</div><div class='del'>-	if (source &lt; 0)</div><div class='del'>-		return -EIO;</div><div class='del'>-</div><div class='del'>-	return source;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t *witness = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_unlocked_discover(frame, inode, inode-&gt;gfid, replies);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    witness = alloca0(priv-&gt;child_count * sizeof(*witness));</div><div class='add'>+    ret = afr_selfheal_find_direction(frame, this, replies,</div><div class='add'>+                                      AFR_DATA_TRANSACTION, locked_on, sources,</div><div class='add'>+                                      sinks, witness, pflag);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    /* Initialize the healed_sinks[] array optimistically to</div><div class='add'>+       the intersection of to-be-healed (i.e sinks[]) and</div><div class='add'>+       the list of servers which are up (i.e locked_on[]).</div><div class='add'>+       As we encounter failures in the healing process, we</div><div class='add'>+       will unmark the respective servers in the healed_sinks[]</div><div class='add'>+       array.</div><div class='add'>+    */</div><div class='add'>+    AFR_INTERSECT(healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    source = __afr_selfheal_data_finalize_source(</div><div class='add'>+        frame, this, inode, sources, sinks, healed_sinks, locked_on,</div><div class='add'>+        undid_pending, replies, witness);</div><div class='add'>+    if (source &lt; 0)</div><div class='add'>+        return -EIO;</div><div class='add'>+</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_data (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		     unsigned char *locked_on)</div><div class='add'>+__afr_selfheal_data(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                    unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	unsigned char *sources = NULL;</div><div class='del'>-	unsigned char *sinks = NULL;</div><div class='del'>-	unsigned char *data_lock = NULL;</div><div class='del'>-	unsigned char *healed_sinks = NULL;</div><div class='del'>-	unsigned char *undid_pending = NULL;</div><div class='del'>-	struct afr_reply *locked_replies = NULL;</div><div class='del'>-	int source = -1;</div><div class='del'>-        gf_boolean_t did_sh = _gf_true;</div><div class='del'>-        gf_boolean_t is_arbiter_the_only_sink = _gf_false;</div><div class='del'>-        gf_boolean_t empty_file = _gf_false;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-	sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	data_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-        undid_pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_inodelk (frame, this, fd-&gt;inode, this-&gt;name, 0, 0,</div><div class='del'>-				    data_lock);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; priv-&gt;child_count) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Skipping "</div><div class='del'>-                                      "self-heal as only %d number "</div><div class='del'>-                                      "of subvolumes "</div><div class='del'>-                                      "could be locked",</div><div class='del'>-                                      uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                      ret);</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_data_prepare (frame, this, fd-&gt;inode,</div><div class='del'>-                                                   data_lock, sources, sinks,</div><div class='del'>-                                                   healed_sinks, undid_pending,</div><div class='del'>-                                                   locked_replies, NULL);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='del'>-                if (AFR_COUNT(healed_sinks, priv-&gt;child_count) == 0) {</div><div class='del'>-                        did_sh = _gf_false;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		source = ret;</div><div class='del'>-</div><div class='del'>-                if (AFR_IS_ARBITER_BRICK(priv, source)) {</div><div class='del'>-                        empty_file = afr_is_file_empty_on_all_children (priv,</div><div class='del'>-                                                                locked_replies);</div><div class='del'>-                        if (empty_file)</div><div class='del'>-                                goto restore_time;</div><div class='del'>-</div><div class='del'>-                        did_sh = _gf_false;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;arbiter_count &amp;&amp;</div><div class='del'>-                    AFR_COUNT (healed_sinks, priv-&gt;child_count) == 1 &amp;&amp;</div><div class='del'>-                    healed_sinks[ARBITER_BRICK_INDEX]) {</div><div class='del'>-                        is_arbiter_the_only_sink = _gf_true;</div><div class='del'>-                        goto restore_time;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_truncate_sinks (frame, this, fd, healed_sinks,</div><div class='del'>-						     locked_replies[source].poststat.ia_size);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='del'>-		ret = 0;</div><div class='del'>-</div><div class='del'>-	}</div><div class='del'>-unlock:</div><div class='del'>-	afr_selfheal_uninodelk (frame, this, fd-&gt;inode, this-&gt;name, 0, 0,</div><div class='del'>-				data_lock);</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *data_lock = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *undid_pending = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    gf_boolean_t did_sh = _gf_true;</div><div class='add'>+    gf_boolean_t is_arbiter_the_only_sink = _gf_false;</div><div class='add'>+    gf_boolean_t empty_file = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    data_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+    undid_pending = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_inodelk(frame, this, fd-&gt;inode, this-&gt;name, 0, 0,</div><div class='add'>+                               data_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; priv-&gt;child_count) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping "</div><div class='add'>+                         "self-heal as only %d number "</div><div class='add'>+                         "of subvolumes "</div><div class='add'>+                         "could be locked",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __afr_selfheal_data_prepare(frame, this, fd-&gt;inode, data_lock,</div><div class='add'>+                                          sources, sinks, healed_sinks,</div><div class='add'>+                                          undid_pending, locked_replies, NULL);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-        if (!did_sh)</div><div class='del'>-                goto out;</div><div class='add'>+        if (AFR_COUNT(healed_sinks, priv-&gt;child_count) == 0) {</div><div class='add'>+            did_sh = _gf_false;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_data_do (frame, this, fd, source, healed_sinks,</div><div class='del'>-				    locked_replies);</div><div class='del'>-	if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        source = ret;</div><div class='add'>+</div><div class='add'>+        if (AFR_IS_ARBITER_BRICK(priv, source)) {</div><div class='add'>+            empty_file = afr_is_file_empty_on_all_children(priv,</div><div class='add'>+                                                           locked_replies);</div><div class='add'>+            if (empty_file)</div><div class='add'>+                goto restore_time;</div><div class='add'>+</div><div class='add'>+            did_sh = _gf_false;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (priv-&gt;arbiter_count &amp;&amp;</div><div class='add'>+            AFR_COUNT(healed_sinks, priv-&gt;child_count) == 1 &amp;&amp;</div><div class='add'>+            healed_sinks[ARBITER_BRICK_INDEX]) {</div><div class='add'>+            is_arbiter_the_only_sink = _gf_true;</div><div class='add'>+            goto restore_time;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __afr_selfheal_truncate_sinks(</div><div class='add'>+            frame, this, fd, healed_sinks,</div><div class='add'>+            locked_replies[source].poststat.ia_size);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, fd-&gt;inode, this-&gt;name, 0, 0, data_lock);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!did_sh)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_data_do(frame, this, fd, source, healed_sinks,</div><div class='add'>+                               locked_replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> restore_time:</div><div class='del'>-	afr_selfheal_restore_time (frame, this, fd-&gt;inode, source,</div><div class='del'>-					healed_sinks, locked_replies);</div><div class='del'>-</div><div class='del'>-        if (!is_arbiter_the_only_sink || !empty_file) {</div><div class='del'>-                ret = afr_selfheal_inodelk (frame, this, fd-&gt;inode, this-&gt;name,</div><div class='del'>-                                            0, 0, data_lock);</div><div class='del'>-                if (ret &lt; priv-&gt;child_count) {</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        did_sh = _gf_false;</div><div class='del'>-                        goto skip_undo_pending;</div><div class='del'>-                }</div><div class='add'>+    afr_selfheal_restore_time(frame, this, fd-&gt;inode, source, healed_sinks,</div><div class='add'>+                              locked_replies);</div><div class='add'>+</div><div class='add'>+    if (!is_arbiter_the_only_sink || !empty_file) {</div><div class='add'>+        ret = afr_selfheal_inodelk(frame, this, fd-&gt;inode, this-&gt;name, 0, 0,</div><div class='add'>+                                   data_lock);</div><div class='add'>+        if (ret &lt; priv-&gt;child_count) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            did_sh = _gf_false;</div><div class='add'>+            goto skip_undo_pending;</div><div class='ctx'>         }</div><div class='del'>-        ret = afr_selfheal_undo_pending (frame, this, fd-&gt;inode,</div><div class='del'>-                                         sources, sinks, healed_sinks,</div><div class='del'>-                                         undid_pending, AFR_DATA_TRANSACTION,</div><div class='del'>-                                         locked_replies, data_lock);</div><div class='add'>+    }</div><div class='add'>+    ret = afr_selfheal_undo_pending(</div><div class='add'>+        frame, this, fd-&gt;inode, sources, sinks, healed_sinks, undid_pending,</div><div class='add'>+        AFR_DATA_TRANSACTION, locked_replies, data_lock);</div><div class='ctx'> skip_undo_pending:</div><div class='del'>-	afr_selfheal_uninodelk (frame, this, fd-&gt;inode, this-&gt;name, 0, 0,</div><div class='del'>-				data_lock);</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, fd-&gt;inode, this-&gt;name, 0, 0, data_lock);</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (did_sh)</div><div class='del'>-                afr_log_selfheal (fd-&gt;inode-&gt;gfid, this, ret, "data", source,</div><div class='del'>-                                  sources, healed_sinks);</div><div class='del'>-        else</div><div class='del'>-                ret = 1;</div><div class='add'>+    if (did_sh)</div><div class='add'>+        afr_log_selfheal(fd-&gt;inode-&gt;gfid, this, ret, "data", source, sources,</div><div class='add'>+                         healed_sinks);</div><div class='add'>+    else</div><div class='add'>+        ret = 1;</div><div class='ctx'> </div><div class='del'>-        if (locked_replies)</div><div class='del'>-                afr_replies_wipe (locked_replies, priv-&gt;child_count);</div><div class='add'>+    if (locked_replies)</div><div class='add'>+        afr_replies_wipe(locked_replies, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_data_open_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                            xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                            fd_t *fd, dict_t *xdata)</div><div class='add'>+afr_selfheal_data_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='add'>+                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int         i      = (long) cookie;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;replies[i].valid = 1;</div><div class='del'>-        local-&gt;replies[i].op_ret = op_ret;</div><div class='del'>-        local-&gt;replies[i].op_errno = op_errno;</div><div class='add'>+    local-&gt;replies[i].valid = 1;</div><div class='add'>+    local-&gt;replies[i].op_ret = op_ret;</div><div class='add'>+    local-&gt;replies[i].op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        syncbarrier_wake (&amp;local-&gt;barrier);</div><div class='add'>+    syncbarrier_wake(&amp;local-&gt;barrier);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_data_open (xlator_t *this, inode_t *inode, fd_t **fd)</div><div class='add'>+afr_selfheal_data_open(xlator_t *this, inode_t *inode, fd_t **fd)</div><div class='ctx'> {</div><div class='del'>-        int           ret      = 0;</div><div class='del'>-        fd_t          *fd_tmp  = NULL;</div><div class='del'>-        loc_t         loc      = {0,};</div><div class='del'>-        call_frame_t  *frame   = NULL;</div><div class='del'>-        afr_local_t   *local   = NULL;</div><div class='del'>-        afr_private_t *priv    = NULL;</div><div class='del'>-        int           i        = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	fd_tmp = fd_create (inode, 0);</div><div class='del'>-	if (!fd_tmp)</div><div class='del'>-		return -ENOMEM;</div><div class='del'>-</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        frame = afr_frame_create (this, &amp;ret);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -ret;</div><div class='del'>-                fd_unref (fd_tmp);</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    fd_t *fd_tmp = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    fd_tmp = fd_create(inode, 0);</div><div class='add'>+    if (!fd_tmp)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    frame = afr_frame_create(this, &amp;ret);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -ret;</div><div class='add'>+        fd_unref(fd_tmp);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    AFR_ONLIST(local-&gt;child_up, frame, afr_selfheal_data_open_cbk, open, &amp;loc,</div><div class='add'>+               O_RDWR | O_LARGEFILE, fd_tmp, NULL);</div><div class='add'>+</div><div class='add'>+    ret = -ENOTCONN;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;replies[i].op_ret &lt; 0) {</div><div class='add'>+            ret = -local-&gt;replies[i].op_errno;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        AFR_ONLIST (local-&gt;child_up, frame, afr_selfheal_data_open_cbk, open,</div><div class='del'>-                    &amp;loc, O_RDWR|O_LARGEFILE, fd_tmp, NULL);</div><div class='del'>-</div><div class='del'>-        ret = -ENOTCONN;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;replies[i].op_ret &lt; 0) {</div><div class='del'>-                        ret = -local-&gt;replies[i].op_errno;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        ret = 0;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		fd_unref (fd_tmp);</div><div class='del'>-                goto out;</div><div class='del'>-	} else {</div><div class='del'>-		fd_bind (fd_tmp);</div><div class='del'>-	}</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fd_unref(fd_tmp);</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        fd_bind(fd_tmp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *fd = fd_tmp;</div><div class='add'>+    *fd = fd_tmp;</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (frame)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='del'>-	return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_data (call_frame_t *frame, xlator_t *this, fd_t *fd)</div><div class='add'>+afr_selfheal_data(call_frame_t *frame, xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	unsigned char *locked_on = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-        inode_t *inode = fd-&gt;inode;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_tie_breaker_inodelk (frame, this, inode,</div><div class='del'>-	                                        priv-&gt;sh_domain, 0, 0,</div><div class='del'>-				                locked_on);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; priv-&gt;child_count) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Skipping "</div><div class='del'>-                                      "self-heal as only %d number of "</div><div class='del'>-                                      "subvolumes could be locked",</div><div class='del'>-                                      uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                ret);</div><div class='del'>-			/* Either less than two subvols available, or another</div><div class='del'>-			   selfheal (from another server) is in progress. Skip</div><div class='del'>-			   for now in any case there isn't anything to do.</div><div class='del'>-			*/</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_data (frame, this, fd, locked_on);</div><div class='del'>-	}</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *inode = fd-&gt;inode;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_tie_breaker_inodelk(frame, this, inode, priv-&gt;sh_domain,</div><div class='add'>+                                           0, 0, locked_on);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; priv-&gt;child_count) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping "</div><div class='add'>+                         "self-heal as only %d number of "</div><div class='add'>+                         "subvolumes could be locked",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret);</div><div class='add'>+            /* Either less than two subvols available, or another</div><div class='add'>+               selfheal (from another server) is in progress. Skip</div><div class='add'>+               for now in any case there isn't anything to do.</div><div class='add'>+            */</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __afr_selfheal_data(frame, this, fd, locked_on);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	afr_selfheal_uninodelk (frame, this, inode, priv-&gt;sh_domain, 0, 0,</div><div class='del'>-	                        locked_on);</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, inode, priv-&gt;sh_domain, 0, 0,</div><div class='add'>+                           locked_on);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heal-entry.c b/xlators/cluster/afr/src/afr-self-heal-entry.c<br/>index e6022cc939b..bf7a6b9d1e8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-entry.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-self-heal-entry.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-entry.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-entry.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-self-heal.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='hunk'>@@ -18,1105 +17,1090 @@</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_entry_delete (xlator_t *this, inode_t *dir, const char *name,</div><div class='del'>-                           inode_t *inode, int child, struct afr_reply *replies)</div><div class='add'>+afr_selfheal_entry_delete(xlator_t *this, inode_t *dir, const char *name,</div><div class='add'>+                          inode_t *inode, int child, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	xlator_t *subvol = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-	char g[64];</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	subvol = priv-&gt;children[child];</div><div class='del'>-</div><div class='del'>-	loc.parent = inode_ref (dir);</div><div class='del'>-	gf_uuid_copy (loc.pargfid, dir-&gt;gfid);</div><div class='del'>-	loc.name = name;</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-	if (replies[child].valid &amp;&amp; replies[child].op_ret == 0) {</div><div class='del'>-		switch (replies[child].poststat.ia_type) {</div><div class='del'>-		case IA_IFDIR:</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='del'>-				"expunging dir %s/%s (%s) on %s",</div><div class='del'>-				uuid_utoa (dir-&gt;gfid), name,</div><div class='del'>-				uuid_utoa_r (replies[child].poststat.ia_gfid, g),</div><div class='del'>-				subvol-&gt;name);</div><div class='del'>-			ret = syncop_rmdir (subvol, &amp;loc, 1, NULL, NULL);</div><div class='del'>-			break;</div><div class='del'>-		default:</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='del'>-				"expunging file %s/%s (%s) on %s",</div><div class='del'>-				uuid_utoa (dir-&gt;gfid), name,</div><div class='del'>-				uuid_utoa_r (replies[child].poststat.ia_gfid, g),</div><div class='del'>-				subvol-&gt;name);</div><div class='del'>-			ret = syncop_unlink (subvol, &amp;loc, NULL, NULL);</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char g[64];</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    subvol = priv-&gt;children[child];</div><div class='add'>+</div><div class='add'>+    loc.parent = inode_ref(dir);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, dir-&gt;gfid);</div><div class='add'>+    loc.name = name;</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    if (replies[child].valid &amp;&amp; replies[child].op_ret == 0) {</div><div class='add'>+        switch (replies[child].poststat.ia_type) {</div><div class='add'>+            case IA_IFDIR:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='add'>+                       "expunging dir %s/%s (%s) on %s", uuid_utoa(dir-&gt;gfid),</div><div class='add'>+                       name, uuid_utoa_r(replies[child].poststat.ia_gfid, g),</div><div class='add'>+                       subvol-&gt;name);</div><div class='add'>+                ret = syncop_rmdir(subvol, &amp;loc, 1, NULL, NULL);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='add'>+                       "expunging file %s/%s (%s) on %s", uuid_utoa(dir-&gt;gfid),</div><div class='add'>+                       name, uuid_utoa_r(replies[child].poststat.ia_gfid, g),</div><div class='add'>+                       subvol-&gt;name);</div><div class='add'>+                ret = syncop_unlink(subvol, &amp;loc, NULL, NULL);</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_recreate_entry (call_frame_t *frame, int dst, int source,</div><div class='del'>-                             unsigned char *sources, inode_t *dir,</div><div class='del'>-                             const char *name, inode_t *inode,</div><div class='del'>-                             struct afr_reply *replies)</div><div class='add'>+afr_selfheal_recreate_entry(call_frame_t *frame, int dst, int source,</div><div class='add'>+                            unsigned char *sources, inode_t *dir,</div><div class='add'>+                            const char *name, inode_t *inode,</div><div class='add'>+                            struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	loc_t srcloc = {0,};</div><div class='del'>-        xlator_t *this = frame-&gt;this;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	dict_t *xdata = NULL;</div><div class='del'>-	struct iatt *iatt = NULL;</div><div class='del'>-	char *linkname = NULL;</div><div class='del'>-	mode_t mode = 0;</div><div class='del'>-	struct iatt newent = {0,};</div><div class='del'>-        unsigned char *newentry = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-	iatt = &amp;replies[source].poststat;</div><div class='del'>-        if (iatt-&gt;ia_type == IA_INVAL || gf_uuid_is_null (iatt-&gt;ia_gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SELF_HEAL_FAILED,</div><div class='del'>-                        "Invalid ia_type (%d) or gfid(%s). source brick=%d, "</div><div class='del'>-                        "pargfid=%s, name=%s", iatt-&gt;ia_type,</div><div class='del'>-                        uuid_utoa(iatt-&gt;ia_gfid), source,</div><div class='del'>-                        uuid_utoa(dir-&gt;gfid), name);</div><div class='del'>-                ret = -EINVAL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t srcloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    struct iatt *iatt = NULL;</div><div class='add'>+    char *linkname = NULL;</div><div class='add'>+    mode_t mode = 0;</div><div class='add'>+    struct iatt newent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    unsigned char *newentry = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    iatt = &amp;replies[source].poststat;</div><div class='add'>+    if (iatt-&gt;ia_type == IA_INVAL || gf_uuid_is_null(iatt-&gt;ia_gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SELF_HEAL_FAILED,</div><div class='add'>+               "Invalid ia_type (%d) or gfid(%s). source brick=%d, "</div><div class='add'>+               "pargfid=%s, name=%s",</div><div class='add'>+               iatt-&gt;ia_type, uuid_utoa(iatt-&gt;ia_gfid), source,</div><div class='add'>+               uuid_utoa(dir-&gt;gfid), name);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+    newentry = alloca0(priv-&gt;child_count);</div><div class='add'>+    loc.parent = inode_ref(dir);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, dir-&gt;gfid);</div><div class='add'>+    loc.name = name;</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_entry_delete(this, dir, name, inode, dst, replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_gfuuid(xdata, "gfid-req", replies[source].poststat.ia_gfid,</div><div class='add'>+                          true);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    srcloc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(srcloc.gfid, iatt-&gt;ia_gfid);</div><div class='add'>+    if (iatt-&gt;ia_type != IA_IFDIR)</div><div class='add'>+        ret = syncop_lookup(priv-&gt;children[dst], &amp;srcloc, 0, 0, 0, 0);</div><div class='add'>+    if (iatt-&gt;ia_type == IA_IFDIR || ret == -ENOENT || ret == -ESTALE) {</div><div class='add'>+        newentry[dst] = 1;</div><div class='add'>+        ret = afr_selfheal_newentry_mark(frame, this, inode, source, replies,</div><div class='add'>+                                         sources, newentry);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    mode = st_mode_from_ia(iatt-&gt;ia_prot, iatt-&gt;ia_type);</div><div class='add'>+</div><div class='add'>+    switch (iatt-&gt;ia_type) {</div><div class='add'>+        case IA_IFDIR:</div><div class='add'>+            ret = syncop_mkdir(priv-&gt;children[dst], &amp;loc, mode, 0, xdata, NULL);</div><div class='add'>+            break;</div><div class='add'>+        case IA_IFLNK:</div><div class='add'>+            if (!newentry[dst]) {</div><div class='add'>+                ret = syncop_link(priv-&gt;children[dst], &amp;srcloc, &amp;loc, &amp;newent,</div><div class='add'>+                                  NULL, NULL);</div><div class='add'>+            } else {</div><div class='add'>+                ret = syncop_readlink(priv-&gt;children[source], &amp;srcloc,</div><div class='add'>+                                      &amp;linkname, 4096, NULL, NULL);</div><div class='add'>+                if (ret &lt;= 0)</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = syncop_symlink(priv-&gt;children[dst], &amp;loc, linkname, NULL,</div><div class='add'>+                                     xdata, NULL);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            ret = dict_set_int32(xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	xdata = dict_new();</div><div class='del'>-	if (!xdata)</div><div class='del'>-		return -ENOMEM;</div><div class='del'>-        newentry = alloca0 (priv-&gt;child_count);</div><div class='del'>-	loc.parent = inode_ref (dir);</div><div class='del'>-	gf_uuid_copy (loc.pargfid, dir-&gt;gfid);</div><div class='del'>-	loc.name = name;</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_entry_delete (this, dir, name, inode, dst, replies);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	ret = dict_set_gfuuid (xdata, "gfid-req",</div><div class='del'>-                               replies[source].poststat.ia_gfid, true);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	srcloc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (srcloc.gfid, iatt-&gt;ia_gfid);</div><div class='del'>-        if (iatt-&gt;ia_type != IA_IFDIR)</div><div class='del'>-                ret = syncop_lookup (priv-&gt;children[dst], &amp;srcloc, 0, 0, 0, 0);</div><div class='del'>-        if (iatt-&gt;ia_type == IA_IFDIR || ret == -ENOENT || ret == -ESTALE) {</div><div class='del'>-                newentry[dst] = 1;</div><div class='del'>-                ret = afr_selfheal_newentry_mark (frame, this, inode, source,</div><div class='del'>-                                                  replies, sources, newentry);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	mode = st_mode_from_ia (iatt-&gt;ia_prot, iatt-&gt;ia_type);</div><div class='del'>-</div><div class='del'>-	switch (iatt-&gt;ia_type) {</div><div class='del'>-	case IA_IFDIR:</div><div class='del'>-		ret = syncop_mkdir (priv-&gt;children[dst], &amp;loc, mode, 0,</div><div class='del'>-                                    xdata, NULL);</div><div class='del'>-		break;</div><div class='del'>-	case IA_IFLNK:</div><div class='del'>-		if (!newentry[dst]) {</div><div class='del'>-			ret = syncop_link (priv-&gt;children[dst], &amp;srcloc, &amp;loc,</div><div class='del'>-					   &amp;newent, NULL, NULL);</div><div class='del'>-		} else {</div><div class='del'>-			ret = syncop_readlink (priv-&gt;children[source], &amp;srcloc,</div><div class='del'>-					       &amp;linkname, 4096, NULL, NULL);</div><div class='del'>-			if (ret &lt;= 0)</div><div class='del'>-				goto out;</div><div class='del'>-			ret = syncop_symlink (priv-&gt;children[dst], &amp;loc,</div><div class='del'>-                                              linkname, NULL, xdata, NULL);</div><div class='del'>-                }</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		ret = dict_set_int32 (xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='del'>-		if (ret)</div><div class='del'>-			goto out;</div><div class='del'>-		ret = syncop_mknod (priv-&gt;children[dst], &amp;loc, mode,</div><div class='del'>-                    makedev (ia_major(iatt-&gt;ia_rdev), ia_minor (iatt-&gt;ia_rdev)),</div><div class='del'>-                    &amp;newent, xdata, NULL);</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='add'>+            ret = syncop_mknod(</div><div class='add'>+                priv-&gt;children[dst], &amp;loc, mode,</div><div class='add'>+                makedev(ia_major(iatt-&gt;ia_rdev), ia_minor(iatt-&gt;ia_rdev)),</div><div class='add'>+                &amp;newent, xdata, NULL);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	if (xdata)</div><div class='del'>-		dict_unref (xdata);</div><div class='del'>-	GF_FREE (linkname);</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	loc_wipe (&amp;srcloc);</div><div class='del'>-	return ret;</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    GF_FREE(linkname);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;srcloc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_heal_dirent (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-			    char *name, inode_t *inode, int source,</div><div class='del'>-			    unsigned char *sources, unsigned char *healed_sinks,</div><div class='del'>-			    unsigned char *locked_on, struct afr_reply *replies)</div><div class='add'>+__afr_selfheal_heal_dirent(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                           char *name, inode_t *inode, int source,</div><div class='add'>+                           unsigned char *sources, unsigned char *healed_sinks,</div><div class='add'>+                           unsigned char *locked_on, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	if (!replies[source].valid)</div><div class='del'>-		return -EIO;</div><div class='add'>+    if (!replies[source].valid)</div><div class='add'>+        return -EIO;</div><div class='ctx'> </div><div class='del'>-        /* Skip healing this entry if the last lookup on it failed for reasons</div><div class='del'>-         * other than ENOENT.</div><div class='del'>-         */</div><div class='del'>-        if ((replies[source].op_ret &lt; 0) &amp;&amp;</div><div class='del'>-            (replies[source].op_errno != ENOENT))</div><div class='del'>-                return -replies[source].op_errno;</div><div class='del'>-</div><div class='del'>-        if (replies[source].op_ret == 0) {</div><div class='del'>-                ret = afr_lookup_and_heal_gfid (this, fd-&gt;inode, name,</div><div class='del'>-                                                inode, replies, source, sources,</div><div class='del'>-                                             &amp;replies[source].poststat.ia_gfid);</div><div class='del'>-                if (ret)</div><div class='del'>-                        return ret;</div><div class='add'>+    /* Skip healing this entry if the last lookup on it failed for reasons</div><div class='add'>+     * other than ENOENT.</div><div class='add'>+     */</div><div class='add'>+    if ((replies[source].op_ret &lt; 0) &amp;&amp; (replies[source].op_errno != ENOENT))</div><div class='add'>+        return -replies[source].op_errno;</div><div class='add'>+</div><div class='add'>+    if (replies[source].op_ret == 0) {</div><div class='add'>+        ret = afr_lookup_and_heal_gfid(this, fd-&gt;inode, name, inode, replies,</div><div class='add'>+                                       source, sources,</div><div class='add'>+                                       &amp;replies[source].poststat.ia_gfid);</div><div class='add'>+        if (ret)</div><div class='add'>+            return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[source].op_ret == -1 &amp;&amp;</div><div class='add'>+            replies[source].op_errno == ENOENT) {</div><div class='add'>+            ret = afr_selfheal_entry_delete(this, fd-&gt;inode, name, inode, i,</div><div class='add'>+                                            replies);</div><div class='add'>+        } else {</div><div class='add'>+            if (!gf_uuid_compare(replies[i].poststat.ia_gfid,</div><div class='add'>+                                 replies[source].poststat.ia_gfid))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            ret = afr_selfheal_recreate_entry(frame, i, source, sources,</div><div class='add'>+                                              fd-&gt;inode, name, inode, replies);</div><div class='ctx'>         }</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!healed_sinks[i])</div><div class='del'>-			continue;</div><div class='del'>-		if (replies[source].op_ret == -1 &amp;&amp;</div><div class='del'>-		    replies[source].op_errno == ENOENT) {</div><div class='del'>-			ret = afr_selfheal_entry_delete (this, fd-&gt;inode, name,</div><div class='del'>-                                                         inode, i, replies);</div><div class='del'>-                } else {</div><div class='del'>-			if (!gf_uuid_compare (replies[i].poststat.ia_gfid,</div><div class='del'>-					   replies[source].poststat.ia_gfid))</div><div class='del'>-				continue;</div><div class='del'>-</div><div class='del'>-			ret = afr_selfheal_recreate_entry (frame, i, source,</div><div class='del'>-                                                           sources, fd-&gt;inode,</div><div class='del'>-                                                           name, inode,</div><div class='del'>-							   replies);</div><div class='del'>-                }</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_detect_gfid_and_type_mismatch (xlator_t *this,</div><div class='del'>-                                            struct afr_reply *replies,</div><div class='del'>-                                            inode_t *inode,</div><div class='del'>-                                            uuid_t pargfid,</div><div class='del'>-                                            char *bname, int src_idx,</div><div class='del'>-                                            unsigned char *locked_on,</div><div class='del'>-                                            int *src)</div><div class='add'>+afr_selfheal_detect_gfid_and_type_mismatch(xlator_t *this,</div><div class='add'>+                                           struct afr_reply *replies,</div><div class='add'>+                                           inode_t *inode, uuid_t pargfid,</div><div class='add'>+                                           char *bname, int src_idx,</div><div class='add'>+                                           unsigned char *locked_on, int *src)</div><div class='ctx'> {</div><div class='del'>-        int             i        = 0;</div><div class='del'>-        int             ret      = -1;</div><div class='del'>-        afr_private_t  *priv     = NULL;</div><div class='del'>-        void *gfid               = NULL;</div><div class='del'>-        ia_type_t ia_type        = IA_INVAL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        gfid = &amp;replies[src_idx].poststat.ia_gfid;</div><div class='del'>-        ia_type = replies[src_idx].poststat.ia_type;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    void *gfid = NULL;</div><div class='add'>+    ia_type_t ia_type = IA_INVAL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    gfid = &amp;replies[src_idx].poststat.ia_gfid;</div><div class='add'>+    ia_type = replies[src_idx].poststat.ia_type;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (i == src_idx)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (gf_uuid_compare(gfid, replies[i].poststat.ia_gfid) &amp;&amp;</div><div class='add'>+            (ia_type == replies[i].poststat.ia_type)) {</div><div class='add'>+            ret = afr_gfid_split_brain_source(this, replies, inode, pargfid,</div><div class='add'>+                                              bname, src_idx, i, locked_on, src,</div><div class='add'>+                                              NULL);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "Skipping conservative merge on the "</div><div class='add'>+                       "file.");</div><div class='add'>+            return ret;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (i == src_idx)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (gf_uuid_compare (gfid, replies[i].poststat.ia_gfid) &amp;&amp;</div><div class='del'>-                    (ia_type == replies[i].poststat.ia_type)) {</div><div class='del'>-                        ret = afr_gfid_split_brain_source (this, replies, inode,</div><div class='del'>-                                                           pargfid, bname,</div><div class='del'>-                                                           src_idx, i,</div><div class='del'>-                                                           locked_on, src,</div><div class='del'>-                                                           NULL);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        AFR_MSG_SPLIT_BRAIN,</div><div class='del'>-                                        "Skipping conservative merge on the "</div><div class='del'>-                                        "file.");</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ia_type != replies[i].poststat.ia_type) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "Type mismatch detected "</div><div class='del'>-                                "for &lt;gfid:%s&gt;/%s&gt;, %s on %s and %s on %s. "</div><div class='del'>-                                "Skipping conservative merge on the file.",</div><div class='del'>-                                uuid_utoa (pargfid), bname,</div><div class='del'>-                                gf_inode_type_to_str (replies[i].poststat.ia_type),</div><div class='del'>-                                priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                gf_inode_type_to_str (replies[src_idx].poststat.ia_type),</div><div class='del'>-                                priv-&gt;children[src_idx]-&gt;name);</div><div class='del'>-                        gf_event (EVENT_AFR_SPLIT_BRAIN, "subvol=%s;type=file;"</div><div class='del'>-                                  "file=&lt;gfid:%s&gt;/%s&gt;;count=2;child-%d=%s;type-"</div><div class='del'>-                                  "%d=%s;child-%d=%s;type-%d=%s",</div><div class='del'>-                                  this-&gt;name, uuid_utoa (pargfid), bname, i,</div><div class='del'>-                                  priv-&gt;children[i]-&gt;name, i,</div><div class='del'>-                                  gf_inode_type_to_str(replies[i].poststat.ia_type),</div><div class='del'>-                                  src_idx, priv-&gt;children[src_idx]-&gt;name, src_idx,</div><div class='del'>-                                  gf_inode_type_to_str(replies[src_idx].poststat.ia_type));</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='add'>+        if (ia_type != replies[i].poststat.ia_type) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                   "Type mismatch detected "</div><div class='add'>+                   "for &lt;gfid:%s&gt;/%s&gt;, %s on %s and %s on %s. "</div><div class='add'>+                   "Skipping conservative merge on the file.",</div><div class='add'>+                   uuid_utoa(pargfid), bname,</div><div class='add'>+                   gf_inode_type_to_str(replies[i].poststat.ia_type),</div><div class='add'>+                   priv-&gt;children[i]-&gt;name,</div><div class='add'>+                   gf_inode_type_to_str(replies[src_idx].poststat.ia_type),</div><div class='add'>+                   priv-&gt;children[src_idx]-&gt;name);</div><div class='add'>+            gf_event(EVENT_AFR_SPLIT_BRAIN,</div><div class='add'>+                     "subvol=%s;type=file;"</div><div class='add'>+                     "file=&lt;gfid:%s&gt;/%s&gt;;count=2;child-%d=%s;type-"</div><div class='add'>+                     "%d=%s;child-%d=%s;type-%d=%s",</div><div class='add'>+                     this-&gt;name, uuid_utoa(pargfid), bname, i,</div><div class='add'>+                     priv-&gt;children[i]-&gt;name, i,</div><div class='add'>+                     gf_inode_type_to_str(replies[i].poststat.ia_type), src_idx,</div><div class='add'>+                     priv-&gt;children[src_idx]-&gt;name, src_idx,</div><div class='add'>+                     gf_inode_type_to_str(replies[src_idx].poststat.ia_type));</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_merge_dirent (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-			     char *name, inode_t *inode, unsigned char *sources,</div><div class='del'>-			     unsigned char *healed_sinks, unsigned char *locked_on,</div><div class='del'>-			     struct afr_reply *replies)</div><div class='add'>+__afr_selfheal_merge_dirent(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                            char *name, inode_t *inode, unsigned char *sources,</div><div class='add'>+                            unsigned char *healed_sinks,</div><div class='add'>+                            unsigned char *locked_on, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int             ret       = 0;</div><div class='del'>-        int             i         = 0;</div><div class='del'>-        int             source    = -1;</div><div class='del'>-        int             src       = -1;</div><div class='del'>-        afr_private_t  *priv      = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int source = -1;</div><div class='add'>+    int src = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='add'>+            source = i;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    if (source == -1) {</div><div class='add'>+        /* entry got deleted in the mean time? */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='del'>-			source = i;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (source == -1) {</div><div class='del'>-		/* entry got deleted in the mean time? */</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* Set all the sources as 1, otheriwse newentry_mark won't be set */</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='del'>-			sources[i] = 1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = afr_lookup_and_heal_gfid (this, fd-&gt;inode, name, inode, replies,</div><div class='del'>-                                        source, sources,</div><div class='del'>-                                        &amp;replies[source].poststat.ia_gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    /* Set all the sources as 1, otheriwse newentry_mark won't be set */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (replies[i].valid &amp;&amp; replies[i].op_ret == 0) {</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* In case of type mismatch / unable to resolve gfid mismatch on the</div><div class='del'>-         * entry, return -1.*/</div><div class='del'>-        ret = afr_selfheal_detect_gfid_and_type_mismatch (this, replies, inode,</div><div class='del'>-                                                          fd-&gt;inode-&gt;gfid,</div><div class='del'>-                                                          name, source,</div><div class='del'>-                                                          locked_on, &amp;src);</div><div class='add'>+    ret = afr_lookup_and_heal_gfid(this, fd-&gt;inode, name, inode, replies,</div><div class='add'>+                                   source, sources,</div><div class='add'>+                                   &amp;replies[source].poststat.ia_gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return ret;</div><div class='del'>-        if (src != -1) {</div><div class='del'>-                source = src;</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (i != src &amp;&amp; replies[i].valid &amp;&amp;</div><div class='del'>-                            gf_uuid_compare (replies[src].poststat.ia_gfid,</div><div class='del'>-                            replies[i].poststat.ia_gfid)) {</div><div class='del'>-                                sources[i] = 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    /* In case of type mismatch / unable to resolve gfid mismatch on the</div><div class='add'>+     * entry, return -1.*/</div><div class='add'>+    ret = afr_selfheal_detect_gfid_and_type_mismatch(</div><div class='add'>+        this, replies, inode, fd-&gt;inode-&gt;gfid, name, source, locked_on, &amp;src);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return ret;</div><div class='add'>+    if (src != -1) {</div><div class='add'>+        source = src;</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (i != src &amp;&amp; replies[i].valid &amp;&amp;</div><div class='add'>+                gf_uuid_compare(replies[src].poststat.ia_gfid,</div><div class='add'>+                                replies[i].poststat.ia_gfid)) {</div><div class='add'>+                sources[i] = 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (i == source || !healed_sinks[i])</div><div class='del'>-			continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (i == source || !healed_sinks[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (src != -1) {</div><div class='del'>-                        if (!gf_uuid_compare (replies[src].poststat.ia_gfid,</div><div class='del'>-                                              replies[i].poststat.ia_gfid))</div><div class='del'>-                                continue;</div><div class='del'>-                } else if (replies[i].op_errno != ENOENT) {</div><div class='del'>-			continue;</div><div class='del'>-                }</div><div class='add'>+        if (src != -1) {</div><div class='add'>+            if (!gf_uuid_compare(replies[src].poststat.ia_gfid,</div><div class='add'>+                                 replies[i].poststat.ia_gfid))</div><div class='add'>+                continue;</div><div class='add'>+        } else if (replies[i].op_errno != ENOENT) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		ret |= afr_selfheal_recreate_entry (frame, i, source, sources,</div><div class='del'>-                                                    fd-&gt;inode, name, inode,</div><div class='del'>-                                                    replies);</div><div class='del'>-	}</div><div class='add'>+        ret |= afr_selfheal_recreate_entry(frame, i, source, sources, fd-&gt;inode,</div><div class='add'>+                                           name, inode, replies);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_entry_dirent (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                             char *name, inode_t *inode, int source,</div><div class='del'>-                             unsigned char *sources, unsigned char *healed_sinks,</div><div class='del'>-                             unsigned char *locked_on,</div><div class='del'>-                             struct afr_reply *replies)</div><div class='add'>+__afr_selfheal_entry_dirent(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                            char *name, inode_t *inode, int source,</div><div class='add'>+                            unsigned char *sources, unsigned char *healed_sinks,</div><div class='add'>+                            unsigned char *locked_on, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-</div><div class='del'>-	if (source &lt; 0)</div><div class='del'>-		ret = __afr_selfheal_merge_dirent (frame, this, fd, name, inode,</div><div class='del'>-						   sources, healed_sinks,</div><div class='del'>-						   locked_on, replies);</div><div class='del'>-	else</div><div class='del'>-		ret = __afr_selfheal_heal_dirent (frame, this, fd, name, inode,</div><div class='del'>-						  source, sources, healed_sinks,</div><div class='del'>-						  locked_on, replies);</div><div class='del'>-	return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (source &lt; 0)</div><div class='add'>+        ret = __afr_selfheal_merge_dirent(frame, this, fd, name, inode, sources,</div><div class='add'>+                                          healed_sinks, locked_on, replies);</div><div class='add'>+    else</div><div class='add'>+        ret = __afr_selfheal_heal_dirent(frame, this, fd, name, inode, source,</div><div class='add'>+                                         sources, healed_sinks, locked_on,</div><div class='add'>+                                         replies);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_full_heal_marker_present (xlator_t *this, dict_t *xdata, int idx)</div><div class='add'>+is_full_heal_marker_present(xlator_t *this, dict_t *xdata, int idx)</div><div class='ctx'> {</div><div class='del'>-        int                  i           = 0;</div><div class='del'>-        int                  pending[3]  = {0,};</div><div class='del'>-        void                *pending_raw = NULL;</div><div class='del'>-        afr_private_t       *priv        = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int pending[3] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    void *pending_raw = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!xdata)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!xdata)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        /* Iterate over each of the priv-&gt;pending_keys[] elements and then</div><div class='del'>-         * see if any of them have data segment non-zero. If they do, return</div><div class='del'>-         * true. Else return false.</div><div class='del'>-         */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (dict_get_ptr (xdata, priv-&gt;pending_key[i], &amp;pending_raw))</div><div class='del'>-                        continue;</div><div class='add'>+    /* Iterate over each of the priv-&gt;pending_keys[] elements and then</div><div class='add'>+     * see if any of them have data segment non-zero. If they do, return</div><div class='add'>+     * true. Else return false.</div><div class='add'>+     */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (dict_get_ptr(xdata, priv-&gt;pending_key[i], &amp;pending_raw))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!pending_raw)</div><div class='del'>-                        continue;</div><div class='add'>+        if (!pending_raw)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                memcpy (pending, pending_raw, sizeof (pending));</div><div class='del'>-                if (ntoh32 (pending[idx]))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+        memcpy(pending, pending_raw, sizeof(pending));</div><div class='add'>+        if (ntoh32(pending[idx]))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_need_full_heal (xlator_t *this, struct afr_reply *replies, int source,</div><div class='del'>-                    unsigned char *healed_sinks, afr_transaction_type type)</div><div class='add'>+afr_need_full_heal(xlator_t *this, struct afr_reply *replies, int source,</div><div class='add'>+                   unsigned char *healed_sinks, afr_transaction_type type)</div><div class='ctx'> {</div><div class='del'>-        int                i     = 0;</div><div class='del'>-        int                idx   = 0;</div><div class='del'>-        afr_private_t     *priv  = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int idx = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;esh_granular)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (!priv-&gt;esh_granular)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (type != AFR_ENTRY_TRANSACTION)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (type != AFR_ENTRY_TRANSACTION)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    idx = afr_index_for_transaction_type(AFR_DATA_TRANSACTION);</div><div class='ctx'> </div><div class='del'>-        /* If there is a clear source, check whether the full-heal-indicator</div><div class='del'>-         * is present in its xdata. Otherwise, we need to examine all the</div><div class='del'>-         * participating bricks and then figure if *even* one of them has a</div><div class='del'>-         * full-heal-indicator.</div><div class='del'>-         */</div><div class='add'>+    /* If there is a clear source, check whether the full-heal-indicator</div><div class='add'>+     * is present in its xdata. Otherwise, we need to examine all the</div><div class='add'>+     * participating bricks and then figure if *even* one of them has a</div><div class='add'>+     * full-heal-indicator.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        if (source != -1) {</div><div class='del'>-                if (is_full_heal_marker_present (this, replies[source].xdata,</div><div class='del'>-                                                 idx))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (source != -1) {</div><div class='add'>+        if (is_full_heal_marker_present(this, replies[source].xdata, idx))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* else ..*/</div><div class='add'>+    /* else ..*/</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!healed_sinks[i])</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!healed_sinks[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (is_full_heal_marker_present (this, replies[i].xdata, idx))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+        if (is_full_heal_marker_present(this, replies[i].xdata, idx))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_entry_finalize_source (xlator_t *this, unsigned char *sources,</div><div class='del'>-				      unsigned char *healed_sinks,</div><div class='del'>-                                      unsigned char *locked_on,</div><div class='del'>-                                      struct afr_reply *replies,</div><div class='del'>-                                      uint64_t *witness)</div><div class='add'>+__afr_selfheal_entry_finalize_source(xlator_t *this, unsigned char *sources,</div><div class='add'>+                                     unsigned char *healed_sinks,</div><div class='add'>+                                     unsigned char *locked_on,</div><div class='add'>+                                     struct afr_reply *replies,</div><div class='add'>+                                     uint64_t *witness)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int source = -1;</div><div class='del'>-	int sources_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    int sources_count = 0;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	sources_count = AFR_COUNT (sources, priv-&gt;child_count);</div><div class='add'>+    sources_count = AFR_COUNT(sources, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	if ((AFR_CMP (locked_on, healed_sinks, priv-&gt;child_count) == 0)</div><div class='del'>-            || !sources_count || afr_does_witness_exist (this, witness)) {</div><div class='add'>+    if ((AFR_CMP(locked_on, healed_sinks, priv-&gt;child_count) == 0) ||</div><div class='add'>+        !sources_count || afr_does_witness_exist(this, witness)) {</div><div class='add'>+        memset(sources, 0, sizeof(*sources) * priv-&gt;child_count);</div><div class='add'>+        afr_mark_active_sinks(this, sources, locked_on, healed_sinks);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                memset (sources, 0, sizeof (*sources) * priv-&gt;child_count);</div><div class='del'>-                afr_mark_active_sinks (this, sources, locked_on, healed_sinks);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        source = afr_choose_source_by_policy (priv, sources,</div><div class='del'>-                                              AFR_ENTRY_TRANSACTION);</div><div class='del'>-	return source;</div><div class='add'>+    source = afr_choose_source_by_policy(priv, sources, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_entry_prepare (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                              inode_t *inode, unsigned char *locked_on,</div><div class='del'>-                              unsigned char *sources, unsigned char *sinks,</div><div class='del'>-                              unsigned char *healed_sinks,</div><div class='del'>-			      struct afr_reply *replies, int *source_p,</div><div class='del'>-                              gf_boolean_t *pflag)</div><div class='add'>+__afr_selfheal_entry_prepare(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                             inode_t *inode, unsigned char *locked_on,</div><div class='add'>+                             unsigned char *sources, unsigned char *sinks,</div><div class='add'>+                             unsigned char *healed_sinks,</div><div class='add'>+                             struct afr_reply *replies, int *source_p,</div><div class='add'>+                             gf_boolean_t *pflag)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	int source = -1;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        uint64_t *witness = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t *witness = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_unlocked_discover (frame, inode, inode-&gt;gfid,</div><div class='del'>-					      replies);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        witness = alloca0 (sizeof (*witness) * priv-&gt;child_count);</div><div class='del'>-	ret = afr_selfheal_find_direction (frame, this, replies,</div><div class='del'>-					   AFR_ENTRY_TRANSACTION,</div><div class='del'>-					   locked_on, sources, sinks, witness,</div><div class='del'>-                                           pflag);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-</div><div class='del'>-        /* Initialize the healed_sinks[] array optimistically to</div><div class='del'>-           the intersection of to-be-healed (i.e sinks[]) and</div><div class='del'>-           the list of servers which are up (i.e locked_on[]).</div><div class='del'>-</div><div class='del'>-           As we encounter failures in the healing process, we</div><div class='del'>-           will unmark the respective servers in the healed_sinks[]</div><div class='del'>-           array.</div><div class='del'>-        */</div><div class='del'>-        AFR_INTERSECT (healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	source = __afr_selfheal_entry_finalize_source (this, sources,</div><div class='del'>-                                                       healed_sinks,</div><div class='del'>-						       locked_on, replies,</div><div class='del'>-                                                       witness);</div><div class='del'>-</div><div class='del'>-	if (source &lt; 0) {</div><div class='del'>-		/* If source is &lt; 0 (typically split-brain), we perform a</div><div class='del'>-		   conservative merge of entries rather than erroring out */</div><div class='del'>-	}</div><div class='del'>-	*source_p = source;</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+    ret = afr_selfheal_unlocked_discover(frame, inode, inode-&gt;gfid, replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-afr_selfheal_entry_dirent (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                           fd_t *fd, char *name, inode_t *parent_idx_inode,</div><div class='del'>-                           xlator_t *subvol, gf_boolean_t full_crawl)</div><div class='del'>-{</div><div class='del'>-        int                ret          = 0;</div><div class='del'>-        int                source       = -1;</div><div class='del'>-        unsigned char     *locked_on    = NULL;</div><div class='del'>-        unsigned char     *sources      = NULL;</div><div class='del'>-        unsigned char     *sinks        = NULL;</div><div class='del'>-        unsigned char     *healed_sinks = NULL;</div><div class='del'>-        inode_t           *inode        = NULL;</div><div class='del'>-        struct afr_reply  *replies      = NULL;</div><div class='del'>-        struct afr_reply  *par_replies  = NULL;</div><div class='del'>-        afr_private_t     *priv         = NULL;</div><div class='del'>-        dict_t            *xattr        = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr)</div><div class='del'>-                return -ENOMEM;</div><div class='del'>-        ret = dict_set_int32 (xattr, GF_GFIDLESS_LOOKUP, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    witness = alloca0(sizeof(*witness) * priv-&gt;child_count);</div><div class='add'>+    ret = afr_selfheal_find_direction(frame, this, replies,</div><div class='add'>+                                      AFR_ENTRY_TRANSACTION, locked_on, sources,</div><div class='add'>+                                      sinks, witness, pflag);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-        sinks   = alloca0 (priv-&gt;child_count);</div><div class='del'>-        healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	replies = alloca0 (priv-&gt;child_count * sizeof(*replies));</div><div class='del'>-	par_replies = alloca0 (priv-&gt;child_count * sizeof(*par_replies));</div><div class='del'>-</div><div class='del'>-        ret = afr_selfheal_entrylk (frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='del'>-                                    locked_on);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Skipping "</div><div class='del'>-                                      "entry self-heal as only %d sub-volumes "</div><div class='del'>-                                      " could be locked in %s domain",</div><div class='del'>-                                      uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                      ret, this-&gt;name);</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                ret = __afr_selfheal_entry_prepare (frame, this, fd-&gt;inode,</div><div class='del'>-                                                    locked_on,</div><div class='del'>-                                                    sources, sinks,</div><div class='del'>-                                                    healed_sinks, par_replies,</div><div class='del'>-                                                    &amp;source, NULL);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-		inode = afr_selfheal_unlocked_lookup_on (frame, fd-&gt;inode, name,</div><div class='del'>-							 replies, locked_on,</div><div class='del'>-                                                         xattr);</div><div class='del'>-		if (!inode) {</div><div class='del'>-			ret = -ENOMEM;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_entry_dirent (frame, this, fd, name, inode,</div><div class='del'>-						   source, sources, healed_sinks,</div><div class='del'>-						   locked_on, replies);</div><div class='del'>-</div><div class='del'>-                if ((ret == 0) &amp;&amp; (priv-&gt;esh_granular) &amp;&amp; parent_idx_inode) {</div><div class='del'>-                        ret = afr_shd_index_purge (subvol, parent_idx_inode,</div><div class='del'>-                                                   name, inode-&gt;ia_type);</div><div class='del'>-                        /* Why is ret force-set to 0? We do not care about</div><div class='del'>-                         * index purge failing for full heal as it is quite</div><div class='del'>-                         * possible during replace-brick that not all files</div><div class='del'>-                         * and directories have their name indices present in</div><div class='del'>-                         * entry-changes/.</div><div class='del'>-                         */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+    /* Initialize the healed_sinks[] array optimistically to</div><div class='add'>+       the intersection of to-be-healed (i.e sinks[]) and</div><div class='add'>+       the list of servers which are up (i.e locked_on[]).</div><div class='ctx'> </div><div class='del'>-unlock:</div><div class='del'>-        afr_selfheal_unentrylk (frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='del'>-                                locked_on, NULL);</div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref (inode);</div><div class='del'>-        if (replies)</div><div class='del'>-                afr_replies_wipe (replies, priv-&gt;child_count);</div><div class='del'>-        if (par_replies)</div><div class='del'>-                afr_replies_wipe (par_replies, priv-&gt;child_count);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+       As we encounter failures in the healing process, we</div><div class='add'>+       will unmark the respective servers in the healed_sinks[]</div><div class='add'>+       array.</div><div class='add'>+    */</div><div class='add'>+    AFR_INTERSECT(healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='ctx'> </div><div class='add'>+    source = __afr_selfheal_entry_finalize_source(this, sources, healed_sinks,</div><div class='add'>+                                                  locked_on, replies, witness);</div><div class='ctx'> </div><div class='del'>-static inode_t *</div><div class='del'>-afr_shd_entry_changes_index_inode (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                                   uuid_t pargfid)</div><div class='add'>+    if (source &lt; 0) {</div><div class='add'>+        /* If source is &lt; 0 (typically split-brain), we perform a</div><div class='add'>+           conservative merge of entries rather than erroring out */</div><div class='add'>+    }</div><div class='add'>+    *source_p = source;</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+afr_selfheal_entry_dirent(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                          char *name, inode_t *parent_idx_inode,</div><div class='add'>+                          xlator_t *subvol, gf_boolean_t full_crawl)</div><div class='ctx'> {</div><div class='del'>-        int             ret         = -1;</div><div class='del'>-        void           *index_gfid  = NULL;</div><div class='del'>-        loc_t           rootloc     = {0,};</div><div class='del'>-        loc_t           loc         = {0,};</div><div class='del'>-        dict_t         *xattr       = NULL;</div><div class='del'>-        inode_t        *inode       = NULL;</div><div class='del'>-        struct iatt     iatt        = {0,};</div><div class='del'>-</div><div class='del'>-        rootloc.inode = inode_ref (this-&gt;itable-&gt;root);</div><div class='del'>-        gf_uuid_copy (rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (subvol, &amp;rootloc, &amp;xattr,</div><div class='del'>-                               GF_XATTROP_ENTRY_CHANGES_GFID, NULL, NULL);</div><div class='del'>-        if (ret || !xattr) {</div><div class='del'>-                errno = -ret;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int source = -1;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    struct afr_reply *par_replies = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+    ret = dict_set_int32(xattr, GF_GFIDLESS_LOOKUP, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    replies = alloca0(priv-&gt;child_count * sizeof(*replies));</div><div class='add'>+    par_replies = alloca0(priv-&gt;child_count * sizeof(*par_replies));</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_entrylk(frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='add'>+                               locked_on);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping "</div><div class='add'>+                         "entry self-heal as only %d sub-volumes "</div><div class='add'>+                         " could be locked in %s domain",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret, this-&gt;name);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_ptr (xattr, GF_XATTROP_ENTRY_CHANGES_GFID, &amp;index_gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = __afr_selfheal_entry_prepare(frame, this, fd-&gt;inode, locked_on,</div><div class='add'>+                                           sources, sinks, healed_sinks,</div><div class='add'>+                                           par_replies, &amp;source, NULL);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_new (this-&gt;itable);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+        inode = afr_selfheal_unlocked_lookup_on(frame, fd-&gt;inode, name, replies,</div><div class='add'>+                                                locked_on, xattr);</div><div class='add'>+        if (!inode) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (loc.pargfid, index_gfid);</div><div class='del'>-        loc.name = gf_strdup (uuid_utoa (pargfid));</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (subvol, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                errno = -ret;</div><div class='del'>-                goto out;</div><div class='add'>+        ret = __afr_selfheal_entry_dirent(frame, this, fd, name, inode, source,</div><div class='add'>+                                          sources, healed_sinks, locked_on,</div><div class='add'>+                                          replies);</div><div class='add'>+</div><div class='add'>+        if ((ret == 0) &amp;&amp; (priv-&gt;esh_granular) &amp;&amp; parent_idx_inode) {</div><div class='add'>+            ret = afr_shd_index_purge(subvol, parent_idx_inode, name,</div><div class='add'>+                                      inode-&gt;ia_type);</div><div class='add'>+            /* Why is ret force-set to 0? We do not care about</div><div class='add'>+             * index purge failing for full heal as it is quite</div><div class='add'>+             * possible during replace-brick that not all files</div><div class='add'>+             * and directories have their name indices present in</div><div class='add'>+             * entry-changes/.</div><div class='add'>+             */</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        inode = inode_link (loc.inode, NULL, NULL, &amp;iatt);</div><div class='add'>+unlock:</div><div class='add'>+    afr_selfheal_unentrylk(frame, this, fd-&gt;inode, this-&gt;name, NULL, locked_on,</div><div class='add'>+                           NULL);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (replies)</div><div class='add'>+        afr_replies_wipe(replies, priv-&gt;child_count);</div><div class='add'>+    if (par_replies)</div><div class='add'>+        afr_replies_wipe(par_replies, priv-&gt;child_count);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static inode_t *</div><div class='add'>+afr_shd_entry_changes_index_inode(xlator_t *this, xlator_t *subvol,</div><div class='add'>+                                  uuid_t pargfid)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void *index_gfid = NULL;</div><div class='add'>+    loc_t rootloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    rootloc.inode = inode_ref(this-&gt;itable-&gt;root);</div><div class='add'>+    gf_uuid_copy(rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;rootloc, &amp;xattr,</div><div class='add'>+                          GF_XATTROP_ENTRY_CHANGES_GFID, NULL, NULL);</div><div class='add'>+    if (ret || !xattr) {</div><div class='add'>+        errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_ptr(xattr, GF_XATTROP_ENTRY_CHANGES_GFID, &amp;index_gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_new(this-&gt;itable);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.pargfid, index_gfid);</div><div class='add'>+    loc.name = gf_strdup(uuid_utoa(pargfid));</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(subvol, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode = inode_link(loc.inode, NULL, NULL, &amp;iatt);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        loc_wipe (&amp;rootloc);</div><div class='del'>-        GF_FREE ((char *)loc.name);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    loc_wipe(&amp;rootloc);</div><div class='add'>+    GF_FREE((char *)loc.name);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_entry_do_subvol (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                              fd_t *fd, int child)</div><div class='add'>+afr_selfheal_entry_do_subvol(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                             int child)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	gf_dirent_t entries;</div><div class='del'>-	gf_dirent_t *entry = NULL;</div><div class='del'>-	off_t offset = 0;</div><div class='del'>-	call_frame_t *iter_frame = NULL;</div><div class='del'>-	xlator_t *subvol = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        gf_boolean_t mismatch = _gf_false;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        loc_t loc = {0,};</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	subvol = priv-&gt;children[child];</div><div class='del'>-</div><div class='del'>-	INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	iter_frame = afr_copy_frame (frame);</div><div class='del'>-	if (!iter_frame)</div><div class='del'>-		return -ENOMEM;</div><div class='del'>-</div><div class='del'>-        loc.inode = afr_shd_entry_changes_index_inode (this, subvol,</div><div class='del'>-                                                       fd-&gt;inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-	while ((ret = syncop_readdir (subvol, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                      NULL, NULL))) {</div><div class='del'>-		if (ret &gt; 0)</div><div class='del'>-			ret = 0;</div><div class='del'>-		list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-			offset = entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-			if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-			    !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-				continue;</div><div class='del'>-</div><div class='del'>-			if (__is_root_gfid (fd-&gt;inode-&gt;gfid) &amp;&amp;</div><div class='del'>-			    !strcmp (entry-&gt;d_name, GF_REPLICATE_TRASH_DIR))</div><div class='del'>-				continue;</div><div class='del'>-</div><div class='del'>-			ret = afr_selfheal_entry_dirent (iter_frame, this, fd,</div><div class='del'>-                                                         entry-&gt;d_name,</div><div class='del'>-                                                         loc.inode, subvol,</div><div class='del'>-                                                        local-&gt;need_full_crawl);</div><div class='del'>-			AFR_STACK_RESET (iter_frame);</div><div class='del'>-			if (iter_frame-&gt;local == NULL) {</div><div class='del'>-                                ret = -ENOTCONN;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                /* gfid or type mismatch. */</div><div class='del'>-                                mismatch = _gf_true;</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        }</div><div class='del'>-			if (ret)</div><div class='del'>-				break;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		gf_dirent_free (&amp;entries);</div><div class='del'>-		if (ret)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	AFR_STACK_DESTROY (iter_frame);</div><div class='del'>-        if (mismatch == _gf_true)</div><div class='del'>-                /* undo pending will be skipped */</div><div class='del'>-                ret = -1;</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    call_frame_t *iter_frame = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t mismatch = _gf_false;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    subvol = priv-&gt;children[child];</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    iter_frame = afr_copy_frame(frame);</div><div class='add'>+    if (!iter_frame)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+</div><div class='add'>+    loc.inode = afr_shd_entry_changes_index_inode(this, subvol,</div><div class='add'>+                                                  fd-&gt;inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    while ((ret = syncop_readdir(subvol, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                                 NULL))) {</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            ret = 0;</div><div class='add'>+        list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-afr_selfheal_entry_granular_dirent (xlator_t *subvol, gf_dirent_t *entry,</div><div class='del'>-                                    loc_t *parent, void *data)</div><div class='del'>-{</div><div class='del'>-        int                      ret  = 0;</div><div class='del'>-        loc_t                    loc  = {0,};</div><div class='del'>-        struct iatt              iatt = {0,};</div><div class='del'>-        afr_granular_esh_args_t *args = data;</div><div class='del'>-</div><div class='del'>-        /* Look up the actual inode associated with entry. If the lookup returns</div><div class='del'>-         * ESTALE or ENOENT, then it means we have a stale index. Remove it.</div><div class='del'>-         * This is analogous to the check in afr_shd_index_heal() except that</div><div class='del'>-         * here it is achieved through LOOKUP and in afr_shd_index_heal() through</div><div class='del'>-         * a GETXATTR.</div><div class='del'>-         */</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            if (__is_root_gfid(fd-&gt;inode-&gt;gfid) &amp;&amp;</div><div class='add'>+                !strcmp(entry-&gt;d_name, GF_REPLICATE_TRASH_DIR))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_new (args-&gt;xl-&gt;itable);</div><div class='del'>-        loc.parent = inode_ref (args-&gt;heal_fd-&gt;inode);</div><div class='del'>-        gf_uuid_copy (loc.pargfid, loc.parent-&gt;gfid);</div><div class='del'>-        loc.name = entry-&gt;d_name;</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (args-&gt;xl, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='del'>-        if ((ret == -ENOENT) || (ret == -ESTALE)) {</div><div class='del'>-                /* The name indices under the pgfid index dir are guaranteed</div><div class='del'>-                 * to be regular files. Hence the hardcoding.</div><div class='del'>-                 */</div><div class='del'>-                afr_shd_index_purge (subvol, parent-&gt;inode, entry-&gt;d_name,</div><div class='del'>-                                     IA_IFREG);</div><div class='add'>+            ret = afr_selfheal_entry_dirent(iter_frame, this, fd, entry-&gt;d_name,</div><div class='add'>+                                            loc.inode, subvol,</div><div class='add'>+                                            local-&gt;need_full_crawl);</div><div class='add'>+            AFR_STACK_RESET(iter_frame);</div><div class='add'>+            if (iter_frame-&gt;local == NULL) {</div><div class='add'>+                ret = -ENOTCONN;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                /* gfid or type mismatch. */</div><div class='add'>+                mismatch = _gf_true;</div><div class='ctx'>                 ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            }</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        /* TBD: afr_shd_zero_xattrop? */</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_entry_dirent (args-&gt;frame, args-&gt;xl, args-&gt;heal_fd,</div><div class='del'>-                                         entry-&gt;d_name, parent-&gt;inode, subvol,</div><div class='del'>-                                         _gf_false);</div><div class='del'>-        AFR_STACK_RESET (args-&gt;frame);</div><div class='del'>-        if (args-&gt;frame-&gt;local == NULL)</div><div class='del'>-                ret = -ENOTCONN;</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                args-&gt;mismatch = _gf_true;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return 0;</div><div class='add'>+    AFR_STACK_DESTROY(iter_frame);</div><div class='add'>+    if (mismatch == _gf_true)</div><div class='add'>+        /* undo pending will be skipped */</div><div class='add'>+        ret = -1;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_entry_granular (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                             int subvol_idx, gf_boolean_t is_src)</div><div class='add'>+afr_selfheal_entry_granular_dirent(xlator_t *subvol, gf_dirent_t *entry,</div><div class='add'>+                                   loc_t *parent, void *data)</div><div class='ctx'> {</div><div class='del'>-        int                         ret    = 0;</div><div class='del'>-        loc_t                       loc    = {0,};</div><div class='del'>-        xlator_t                   *subvol = NULL;</div><div class='del'>-        afr_private_t              *priv   = NULL;</div><div class='del'>-        afr_granular_esh_args_t     args   = {0,};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        subvol = priv-&gt;children[subvol_idx];</div><div class='del'>-</div><div class='del'>-        args.frame = afr_copy_frame (frame);</div><div class='del'>-        args.xl = this;</div><div class='del'>-        /* args.heal_fd represents the fd associated with the original directory</div><div class='del'>-         * on which entry heal is being attempted.</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_granular_esh_args_t *args = data;</div><div class='add'>+</div><div class='add'>+    /* Look up the actual inode associated with entry. If the lookup returns</div><div class='add'>+     * ESTALE or ENOENT, then it means we have a stale index. Remove it.</div><div class='add'>+     * This is analogous to the check in afr_shd_index_heal() except that</div><div class='add'>+     * here it is achieved through LOOKUP and in afr_shd_index_heal() through</div><div class='add'>+     * a GETXATTR.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_new(args-&gt;xl-&gt;itable);</div><div class='add'>+    loc.parent = inode_ref(args-&gt;heal_fd-&gt;inode);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, loc.parent-&gt;gfid);</div><div class='add'>+    loc.name = entry-&gt;d_name;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(args-&gt;xl, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if ((ret == -ENOENT) || (ret == -ESTALE)) {</div><div class='add'>+        /* The name indices under the pgfid index dir are guaranteed</div><div class='add'>+         * to be regular files. Hence the hardcoding.</div><div class='ctx'>          */</div><div class='del'>-        args.heal_fd = fd;</div><div class='add'>+        afr_shd_index_purge(subvol, parent-&gt;inode, entry-&gt;d_name, IA_IFREG);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* TBD: afr_shd_zero_xattrop? */</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_entry_dirent(args-&gt;frame, args-&gt;xl, args-&gt;heal_fd,</div><div class='add'>+                                    entry-&gt;d_name, parent-&gt;inode, subvol,</div><div class='add'>+                                    _gf_false);</div><div class='add'>+    AFR_STACK_RESET(args-&gt;frame);</div><div class='add'>+    if (args-&gt;frame-&gt;local == NULL)</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        args-&gt;mismatch = _gf_true;</div><div class='ctx'> </div><div class='del'>-        /* @subvol here represents the subvolume of AFR where</div><div class='del'>-         * indices/entry-changes/&lt;pargfid&gt; will be processed</div><div class='add'>+out:</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+afr_selfheal_entry_granular(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                            int subvol_idx, gf_boolean_t is_src)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_granular_esh_args_t args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    subvol = priv-&gt;children[subvol_idx];</div><div class='add'>+</div><div class='add'>+    args.frame = afr_copy_frame(frame);</div><div class='add'>+    args.xl = this;</div><div class='add'>+    /* args.heal_fd represents the fd associated with the original directory</div><div class='add'>+     * on which entry heal is being attempted.</div><div class='add'>+     */</div><div class='add'>+    args.heal_fd = fd;</div><div class='add'>+</div><div class='add'>+    /* @subvol here represents the subvolume of AFR where</div><div class='add'>+     * indices/entry-changes/&lt;pargfid&gt; will be processed</div><div class='add'>+     */</div><div class='add'>+    loc.inode = afr_shd_entry_changes_index_inode(this, subvol,</div><div class='add'>+                                                  fd-&gt;inode-&gt;gfid);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        /* If granular heal failed on the sink (as it might sometimes</div><div class='add'>+         * because it is the src that would mostly contain the granular</div><div class='add'>+         * changelogs and the sink's entry-changes would be empty),</div><div class='add'>+         * do not treat heal as failure.</div><div class='ctx'>          */</div><div class='del'>-        loc.inode = afr_shd_entry_changes_index_inode (this, subvol,</div><div class='del'>-                                                       fd-&gt;inode-&gt;gfid);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                /* If granular heal failed on the sink (as it might sometimes</div><div class='del'>-                 * because it is the src that would mostly contain the granular</div><div class='del'>-                 * changelogs and the sink's entry-changes would be empty),</div><div class='del'>-                 * do not treat heal as failure.</div><div class='del'>-                 */</div><div class='del'>-                if (is_src)</div><div class='del'>-                        return -errno;</div><div class='del'>-                else</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+        if (is_src)</div><div class='add'>+            return -errno;</div><div class='add'>+        else</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_dir_scan (subvol, &amp;loc, GF_CLIENT_PID_SELF_HEALD,</div><div class='del'>-                               &amp;args, afr_selfheal_entry_granular_dirent);</div><div class='add'>+    ret = syncop_dir_scan(subvol, &amp;loc, GF_CLIENT_PID_SELF_HEALD, &amp;args,</div><div class='add'>+                          afr_selfheal_entry_granular_dirent);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (args.mismatch == _gf_true)</div><div class='del'>-                ret = -1;</div><div class='add'>+    if (args.mismatch == _gf_true)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_entry_do (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		       int source, unsigned char *sources,</div><div class='del'>-		       unsigned char *healed_sinks)</div><div class='add'>+afr_selfheal_entry_do(call_frame_t *frame, xlator_t *this, fd_t *fd, int source,</div><div class='add'>+                      unsigned char *sources, unsigned char *healed_sinks)</div><div class='ctx'> {</div><div class='del'>-	int i                   = 0;</div><div class='del'>-	int ret                 = 0;</div><div class='del'>-        gf_boolean_t   mismatch = _gf_false;</div><div class='del'>-        afr_local_t   *local    = NULL;</div><div class='del'>-	afr_private_t *priv     = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                AFR_MSG_SELF_HEAL_INFO, "performing entry selfheal on %s",</div><div class='del'>-		uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                /* Expunge */</div><div class='del'>-		if (!healed_sinks[i])</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;need_full_crawl)</div><div class='del'>-                /* Why call afr_selfheal_entry_granular() on a "healed sink",</div><div class='del'>-                 * given that it is the source that contains the granular</div><div class='del'>-                 * indices?</div><div class='del'>-                 * If the index for this directory is non-existent or empty on</div><div class='del'>-                 * this subvol (=&gt; clear sink), then it will return early</div><div class='del'>-                 * without failure status.</div><div class='del'>-                 * If the index is non-empty and it is yet a 'healed sink', then</div><div class='del'>-                 * it is due to a split-brain in which case we anyway need to</div><div class='del'>-                 * crawl the indices/entry-changes/pargfid directory.</div><div class='del'>-                 */</div><div class='del'>-                        ret = afr_selfheal_entry_granular (frame, this, fd, i,</div><div class='del'>-                                                           _gf_false);</div><div class='del'>-                else</div><div class='del'>-                        ret = afr_selfheal_entry_do_subvol (frame, this, fd, i);</div><div class='del'>-</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        /* gfid or type mismatch. */</div><div class='del'>-                        mismatch = _gf_true;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (!ret &amp;&amp; source != -1) {</div><div class='del'>-                /* Impunge */</div><div class='del'>-                if (local-&gt;need_full_crawl)</div><div class='del'>-                        ret = afr_selfheal_entry_do_subvol (frame, this, fd,</div><div class='del'>-                                                            source);</div><div class='del'>-                else</div><div class='del'>-                        ret = afr_selfheal_entry_granular (frame, this, fd,</div><div class='del'>-                                                           source, _gf_true);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t mismatch = _gf_false;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='add'>+           "performing entry selfheal on %s", uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        /* Expunge */</div><div class='add'>+        if (!healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;need_full_crawl)</div><div class='add'>+            /* Why call afr_selfheal_entry_granular() on a "healed sink",</div><div class='add'>+             * given that it is the source that contains the granular</div><div class='add'>+             * indices?</div><div class='add'>+             * If the index for this directory is non-existent or empty on</div><div class='add'>+             * this subvol (=&gt; clear sink), then it will return early</div><div class='add'>+             * without failure status.</div><div class='add'>+             * If the index is non-empty and it is yet a 'healed sink', then</div><div class='add'>+             * it is due to a split-brain in which case we anyway need to</div><div class='add'>+             * crawl the indices/entry-changes/pargfid directory.</div><div class='add'>+             */</div><div class='add'>+            ret = afr_selfheal_entry_granular(frame, this, fd, i, _gf_false);</div><div class='add'>+        else</div><div class='add'>+            ret = afr_selfheal_entry_do_subvol(frame, this, fd, i);</div><div class='add'>+</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            /* gfid or type mismatch. */</div><div class='add'>+            mismatch = _gf_true;</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (mismatch == _gf_true)</div><div class='del'>-                /* undo pending will be skipped */</div><div class='del'>-                ret = -1;</div><div class='del'>-	return ret;</div><div class='add'>+    if (!ret &amp;&amp; source != -1) {</div><div class='add'>+        /* Impunge */</div><div class='add'>+        if (local-&gt;need_full_crawl)</div><div class='add'>+            ret = afr_selfheal_entry_do_subvol(frame, this, fd, source);</div><div class='add'>+        else</div><div class='add'>+            ret = afr_selfheal_entry_granular(frame, this, fd, source,</div><div class='add'>+                                              _gf_true);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (mismatch == _gf_true)</div><div class='add'>+        /* undo pending will be skipped */</div><div class='add'>+        ret = -1;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_entry (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		      unsigned char *locked_on)</div><div class='add'>+__afr_selfheal_entry(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                     unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-	int                     ret                   = -1;</div><div class='del'>-	int                     source                = -1;</div><div class='del'>-	unsigned char          *sources               = NULL;</div><div class='del'>-	unsigned char          *sinks                 = NULL;</div><div class='del'>-	unsigned char          *data_lock             = NULL;</div><div class='del'>-        unsigned char          *postop_lock           = NULL;</div><div class='del'>-	unsigned char          *healed_sinks          = NULL;</div><div class='del'>-	unsigned char          *undid_pending         = NULL;</div><div class='del'>-	struct afr_reply       *locked_replies        = NULL;</div><div class='del'>-        afr_local_t            *local                 = NULL;</div><div class='del'>-	afr_private_t          *priv                  = NULL;</div><div class='del'>-        gf_boolean_t            did_sh                = _gf_true;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-	sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	undid_pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-	data_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-        postop_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_entrylk (frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='del'>-				    data_lock);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Skipping "</div><div class='del'>-                                      "entry self-heal as only %d sub-volumes could "</div><div class='del'>-                                      "be locked in %s domain",</div><div class='del'>-                                      uuid_utoa (fd-&gt;inode-&gt;gfid), ret,</div><div class='del'>-                                      this-&gt;name);</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_entry_prepare (frame, this, fd-&gt;inode,</div><div class='del'>-                                                    data_lock, sources, sinks,</div><div class='del'>-                                                    healed_sinks,</div><div class='del'>-						    locked_replies, &amp;source,</div><div class='del'>-                                                    NULL);</div><div class='del'>-                if (AFR_COUNT(healed_sinks, priv-&gt;child_count) == 0) {</div><div class='del'>-                        did_sh = _gf_false;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;need_full_crawl = afr_need_full_heal (this,</div><div class='del'>-                                                             locked_replies,</div><div class='del'>-                                                             source,</div><div class='del'>-                                                             healed_sinks,</div><div class='del'>-                                                         AFR_ENTRY_TRANSACTION);</div><div class='del'>-	}</div><div class='del'>-unlock:</div><div class='del'>-	afr_selfheal_unentrylk (frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='del'>-				data_lock, NULL);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *data_lock = NULL;</div><div class='add'>+    unsigned char *postop_lock = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *undid_pending = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t did_sh = _gf_true;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    undid_pending = alloca0(priv-&gt;child_count);</div><div class='add'>+    data_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+    postop_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_entrylk(frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='add'>+                               data_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping "</div><div class='add'>+                         "entry self-heal as only %d sub-volumes could "</div><div class='add'>+                         "be locked in %s domain",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret, this-&gt;name);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (!did_sh)</div><div class='del'>-                goto out;</div><div class='add'>+        ret = __afr_selfheal_entry_prepare(frame, this, fd-&gt;inode, data_lock,</div><div class='add'>+                                           sources, sinks, healed_sinks,</div><div class='add'>+                                           locked_replies, &amp;source, NULL);</div><div class='add'>+        if (AFR_COUNT(healed_sinks, priv-&gt;child_count) == 0) {</div><div class='add'>+            did_sh = _gf_false;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_entry_do (frame, this, fd, source, sources,</div><div class='del'>-                                     healed_sinks);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        /* Take entrylks in xlator domain before doing post-op (undo-pending) in</div><div class='del'>-         * entry self-heal. This is to prevent a parallel name self-heal on</div><div class='del'>-         * an entry under @fd-&gt;inode from reading pending xattrs while it is</div><div class='del'>-         * being modified by SHD after entry sh below, given that</div><div class='del'>-         * name self-heal takes locks ONLY in xlator domain and is free to read</div><div class='del'>-         * pending changelog in the absence of the following locking.</div><div class='del'>-         */</div><div class='del'>-        ret = afr_selfheal_entrylk (frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='del'>-                                    postop_lock);</div><div class='del'>-        {</div><div class='del'>-                if (AFR_CMP (data_lock, postop_lock, priv-&gt;child_count) != 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Skipping "</div><div class='del'>-                                      "post-op after entry self-heal as %d "</div><div class='del'>-                                      "sub-volumes, as opposed to %d, "</div><div class='del'>-                                      "could be locked in %s domain",</div><div class='del'>-                                      uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                      ret, AFR_COUNT (data_lock,</div><div class='del'>-                                      priv-&gt;child_count), this-&gt;name);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto postop_unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = afr_selfheal_undo_pending (frame, this, fd-&gt;inode,</div><div class='del'>-                                                 sources, sinks, healed_sinks,</div><div class='del'>-                                                 undid_pending,</div><div class='del'>-                                                 AFR_ENTRY_TRANSACTION,</div><div class='del'>-                                                 locked_replies, postop_lock);</div><div class='add'>+        local-&gt;need_full_crawl = afr_need_full_heal(</div><div class='add'>+            this, locked_replies, source, healed_sinks, AFR_ENTRY_TRANSACTION);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    afr_selfheal_unentrylk(frame, this, fd-&gt;inode, this-&gt;name, NULL, data_lock,</div><div class='add'>+                           NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!did_sh)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_entry_do(frame, this, fd, source, sources, healed_sinks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Take entrylks in xlator domain before doing post-op (undo-pending) in</div><div class='add'>+     * entry self-heal. This is to prevent a parallel name self-heal on</div><div class='add'>+     * an entry under @fd-&gt;inode from reading pending xattrs while it is</div><div class='add'>+     * being modified by SHD after entry sh below, given that</div><div class='add'>+     * name self-heal takes locks ONLY in xlator domain and is free to read</div><div class='add'>+     * pending changelog in the absence of the following locking.</div><div class='add'>+     */</div><div class='add'>+    ret = afr_selfheal_entrylk(frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='add'>+                               postop_lock);</div><div class='add'>+    {</div><div class='add'>+        if (AFR_CMP(data_lock, postop_lock, priv-&gt;child_count) != 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping "</div><div class='add'>+                         "post-op after entry self-heal as %d "</div><div class='add'>+                         "sub-volumes, as opposed to %d, "</div><div class='add'>+                         "could be locked in %s domain",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret,</div><div class='add'>+                         AFR_COUNT(data_lock, priv-&gt;child_count), this-&gt;name);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto postop_unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        ret = afr_selfheal_undo_pending(</div><div class='add'>+            frame, this, fd-&gt;inode, sources, sinks, healed_sinks, undid_pending,</div><div class='add'>+            AFR_ENTRY_TRANSACTION, locked_replies, postop_lock);</div><div class='add'>+    }</div><div class='ctx'> postop_unlock:</div><div class='del'>-        afr_selfheal_unentrylk (frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='del'>-                                postop_lock, NULL);</div><div class='add'>+    afr_selfheal_unentrylk(frame, this, fd-&gt;inode, this-&gt;name, NULL,</div><div class='add'>+                           postop_lock, NULL);</div><div class='ctx'> out:</div><div class='del'>-        if (did_sh)</div><div class='del'>-                afr_log_selfheal (fd-&gt;inode-&gt;gfid, this, ret, "entry", source,</div><div class='del'>-                                  sources, healed_sinks);</div><div class='del'>-        else</div><div class='del'>-                ret = 1;</div><div class='del'>-</div><div class='del'>-        if (locked_replies)</div><div class='del'>-                afr_replies_wipe (locked_replies, priv-&gt;child_count);</div><div class='del'>-	return ret;</div><div class='add'>+    if (did_sh)</div><div class='add'>+        afr_log_selfheal(fd-&gt;inode-&gt;gfid, this, ret, "entry", source, sources,</div><div class='add'>+                         healed_sinks);</div><div class='add'>+    else</div><div class='add'>+        ret = 1;</div><div class='add'>+</div><div class='add'>+    if (locked_replies)</div><div class='add'>+        afr_replies_wipe(locked_replies, priv-&gt;child_count);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static fd_t *</div><div class='del'>-afr_selfheal_data_opendir (xlator_t *this, inode_t *inode)</div><div class='add'>+afr_selfheal_data_opendir(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	int ret = 0;</div><div class='del'>-	fd_t *fd = NULL;</div><div class='del'>-</div><div class='del'>-	fd = fd_create (inode, 0);</div><div class='del'>-	if (!fd)</div><div class='del'>-		return NULL;</div><div class='del'>-</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-	ret = syncop_opendir (this, &amp;loc, fd, NULL, NULL);</div><div class='del'>-	if (ret) {</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-		fd = NULL;</div><div class='del'>-	} else {</div><div class='del'>-		fd_bind (fd);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-        return fd;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+</div><div class='add'>+    fd = fd_create(inode, 0);</div><div class='add'>+    if (!fd)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_opendir(this, &amp;loc, fd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        fd = NULL;</div><div class='add'>+    } else {</div><div class='add'>+        fd_bind(fd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_entry (call_frame_t *frame, xlator_t *this, inode_t *inode)</div><div class='add'>+afr_selfheal_entry(call_frame_t *frame, xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	unsigned char *locked_on = NULL;</div><div class='del'>-	fd_t *fd = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	fd = afr_selfheal_data_opendir (this, inode);</div><div class='del'>-	if (!fd)</div><div class='del'>-		return -EIO;</div><div class='del'>-</div><div class='del'>-	locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_tie_breaker_entrylk (frame, this, inode,</div><div class='del'>-	                                        priv-&gt;sh_domain, NULL,</div><div class='del'>-                                                locked_on);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Skipping "</div><div class='del'>-                                      "entry self-heal as only %d sub-volumes could "</div><div class='del'>-                                      "be locked in %s domain",</div><div class='del'>-                                      uuid_utoa (fd-&gt;inode-&gt;gfid), ret,</div><div class='del'>-                                      priv-&gt;sh_domain);</div><div class='del'>-			/* Either less than two subvols available, or another</div><div class='del'>-			   selfheal (from another server) is in progress. Skip</div><div class='del'>-			   for now in any case there isn't anything to do.</div><div class='del'>-			*/</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                ret = __afr_selfheal_entry (frame, this, fd, locked_on);</div><div class='del'>-	}</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    fd = afr_selfheal_data_opendir(this, inode);</div><div class='add'>+    if (!fd)</div><div class='add'>+        return -EIO;</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_tie_breaker_entrylk(frame, this, inode, priv-&gt;sh_domain,</div><div class='add'>+                                           NULL, locked_on);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping "</div><div class='add'>+                         "entry self-heal as only %d sub-volumes could "</div><div class='add'>+                         "be locked in %s domain",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret, priv-&gt;sh_domain);</div><div class='add'>+            /* Either less than two subvols available, or another</div><div class='add'>+               selfheal (from another server) is in progress. Skip</div><div class='add'>+               for now in any case there isn't anything to do.</div><div class='add'>+            */</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __afr_selfheal_entry(frame, this, fd, locked_on);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	afr_selfheal_unentrylk (frame, this, inode, priv-&gt;sh_domain, NULL,</div><div class='del'>-                                locked_on, NULL);</div><div class='add'>+    afr_selfheal_unentrylk(frame, this, inode, priv-&gt;sh_domain, NULL, locked_on,</div><div class='add'>+                           NULL);</div><div class='ctx'> </div><div class='del'>-	if (fd)</div><div class='del'>-		fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heal-metadata.c b/xlators/cluster/afr/src/afr-self-heal-metadata.c<br/>index 199f8961480..be6e574b6ca 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-metadata.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-self-heal-metadata.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-metadata.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-metadata.c</a></div><div class='hunk'>@@ -8,109 +8,108 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-self-heal.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='ctx'> #include "protocol-common.h"</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='del'>-#define AFR_HEAL_ATTR (GF_SET_ATTR_UID|GF_SET_ATTR_GID|GF_SET_ATTR_MODE)</div><div class='add'>+#define AFR_HEAL_ATTR (GF_SET_ATTR_UID | GF_SET_ATTR_GID | GF_SET_ATTR_MODE)</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-_afr_ignorable_key_match (dict_t *d, char *k, data_t *val, void *mdata)</div><div class='add'>+_afr_ignorable_key_match(dict_t *d, char *k, data_t *val, void *mdata)</div><div class='ctx'> {</div><div class='del'>-        return afr_is_xattr_ignorable (k);</div><div class='add'>+    return afr_is_xattr_ignorable(k);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_delete_ignorable_xattrs (dict_t *xattr)</div><div class='add'>+afr_delete_ignorable_xattrs(dict_t *xattr)</div><div class='ctx'> {</div><div class='del'>-        dict_foreach_match (xattr, _afr_ignorable_key_match, NULL,</div><div class='del'>-                            dict_remove_foreach_fn, NULL);</div><div class='add'>+    dict_foreach_match(xattr, _afr_ignorable_key_match, NULL,</div><div class='add'>+                       dict_remove_foreach_fn, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_metadata_do (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-                            int source, unsigned char *healed_sinks,</div><div class='del'>-                            struct afr_reply *locked_replies)</div><div class='add'>+__afr_selfheal_metadata_do(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                           int source, unsigned char *healed_sinks,</div><div class='add'>+                           struct afr_reply *locked_replies)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	loc_t loc = {0,};</div><div class='del'>-	dict_t *xattr = NULL;</div><div class='del'>-	dict_t *old_xattr = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                AFR_MSG_SELF_HEAL_INFO, "performing metadata selfheal on %s",</div><div class='del'>-		uuid_utoa (inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-	ret = syncop_getxattr (priv-&gt;children[source], &amp;loc, &amp;xattr, NULL,</div><div class='del'>-                               NULL, NULL);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		ret = -EIO;</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	afr_delete_ignorable_xattrs (xattr);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (old_xattr) {</div><div class='del'>-                        dict_unref (old_xattr);</div><div class='del'>-                        old_xattr = NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		if (!healed_sinks[i])</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		ret = syncop_setattr (priv-&gt;children[i], &amp;loc,</div><div class='del'>-				      &amp;locked_replies[source].poststat,</div><div class='del'>-				      AFR_HEAL_ATTR, NULL, NULL, NULL, NULL);</div><div class='del'>-		if (ret)</div><div class='del'>-			healed_sinks[i] = 0;</div><div class='del'>-</div><div class='del'>-		ret = syncop_getxattr (priv-&gt;children[i], &amp;loc, &amp;old_xattr, 0,</div><div class='del'>-                                       NULL, NULL);</div><div class='del'>-		if (old_xattr) {</div><div class='del'>-			afr_delete_ignorable_xattrs (old_xattr);</div><div class='del'>-			ret = syncop_removexattr (priv-&gt;children[i], &amp;loc, "",</div><div class='del'>-						  old_xattr, NULL);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                healed_sinks[i] = 0;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = syncop_setxattr (priv-&gt;children[i], &amp;loc, xattr, 0, NULL,</div><div class='del'>-                                       NULL);</div><div class='del'>-		if (ret)</div><div class='del'>-			healed_sinks[i] = 0;</div><div class='del'>-	}</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    dict_t *old_xattr = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='add'>+           "performing metadata selfheal on %s", uuid_utoa(inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(priv-&gt;children[source], &amp;loc, &amp;xattr, NULL, NULL,</div><div class='add'>+                          NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    afr_delete_ignorable_xattrs(xattr);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (old_xattr) {</div><div class='add'>+            dict_unref(old_xattr);</div><div class='add'>+            old_xattr = NULL;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        ret = syncop_setattr(priv-&gt;children[i], &amp;loc,</div><div class='add'>+                             &amp;locked_replies[source].poststat, AFR_HEAL_ATTR,</div><div class='add'>+                             NULL, NULL, NULL, NULL);</div><div class='add'>+        if (ret)</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+</div><div class='add'>+        ret = syncop_getxattr(priv-&gt;children[i], &amp;loc, &amp;old_xattr, 0, NULL,</div><div class='add'>+                              NULL);</div><div class='add'>+        if (old_xattr) {</div><div class='add'>+            afr_delete_ignorable_xattrs(old_xattr);</div><div class='add'>+            ret = syncop_removexattr(priv-&gt;children[i], &amp;loc, "", old_xattr,</div><div class='add'>+                                     NULL);</div><div class='add'>+            if (ret)</div><div class='add'>+                healed_sinks[i] = 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncop_setxattr(priv-&gt;children[i], &amp;loc, xattr, 0, NULL, NULL);</div><div class='add'>+        if (ret)</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref (xattr);</div><div class='del'>-        if (old_xattr)</div><div class='del'>-                dict_unref (old_xattr);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    if (old_xattr)</div><div class='add'>+        dict_unref(old_xattr);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint64_t</div><div class='ctx'> mtime_ns(struct iatt *ia)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ret;</div><div class='add'>+    uint64_t ret;</div><div class='ctx'> </div><div class='del'>-        ret = (((uint64_t)(ia-&gt;ia_mtime)) * 1000000000)</div><div class='del'>-            + (uint64_t)(ia-&gt;ia_mtime_nsec);</div><div class='add'>+    ret = (((uint64_t)(ia-&gt;ia_mtime)) * 1000000000) +</div><div class='add'>+          (uint64_t)(ia-&gt;ia_mtime_nsec);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -123,382 +122,367 @@ mtime_ns(struct iatt *ia)</div><div class='ctx'>  * the source with the most recent modification date.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-afr_dirtime_splitbrain_source (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                               struct afr_reply *replies,</div><div class='del'>-                               unsigned char *locked_on)</div><div class='add'>+afr_dirtime_splitbrain_source(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                              struct afr_reply *replies,</div><div class='add'>+                              unsigned char *locked_on)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        int            source = -1;</div><div class='del'>-        struct iatt    source_ia;</div><div class='del'>-        struct iatt    child_ia;</div><div class='del'>-        uint64_t       mtime = 0;</div><div class='del'>-        int            i;</div><div class='del'>-        int            ret   = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!locked_on[i])</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (mtime_ns(&amp;replies[i].poststat) &lt;= mtime)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                mtime = mtime_ns(&amp;replies[i].poststat);</div><div class='del'>-                source = i;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (source == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        source_ia = replies[source].poststat;</div><div class='del'>-        if (source_ia.ia_type != IA_IFDIR)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (i == source)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                child_ia = replies[i].poststat;</div><div class='del'>-</div><div class='del'>-                if (!IA_EQUAL(source_ia, child_ia, gfid) ||</div><div class='del'>-                    !IA_EQUAL(source_ia, child_ia, type) ||</div><div class='del'>-                    !IA_EQUAL(source_ia, child_ia, prot) ||</div><div class='del'>-                    !IA_EQUAL(source_ia, child_ia, uid) ||</div><div class='del'>-                    !IA_EQUAL(source_ia, child_ia, gid) ||</div><div class='del'>-                    !afr_xattrs_are_equal (replies[source].xdata,</div><div class='del'>-                                           replies[i].xdata))</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Metadata split brain is just about [amc]time</div><div class='del'>-         * We return our source.</div><div class='del'>-         */</div><div class='del'>-        ret = source;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    struct iatt source_ia;</div><div class='add'>+    struct iatt child_ia;</div><div class='add'>+    uint64_t mtime = 0;</div><div class='add'>+    int i;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!locked_on[i])</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (mtime_ns(&amp;replies[i].poststat) &lt;= mtime)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        mtime = mtime_ns(&amp;replies[i].poststat);</div><div class='add'>+        source = i;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (source == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    source_ia = replies[source].poststat;</div><div class='add'>+    if (source_ia.ia_type != IA_IFDIR)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (i == source)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        child_ia = replies[i].poststat;</div><div class='add'>+</div><div class='add'>+        if (!IA_EQUAL(source_ia, child_ia, gfid) ||</div><div class='add'>+            !IA_EQUAL(source_ia, child_ia, type) ||</div><div class='add'>+            !IA_EQUAL(source_ia, child_ia, prot) ||</div><div class='add'>+            !IA_EQUAL(source_ia, child_ia, uid) ||</div><div class='add'>+            !IA_EQUAL(source_ia, child_ia, gid) ||</div><div class='add'>+            !afr_xattrs_are_equal(replies[source].xdata, replies[i].xdata))</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Metadata split brain is just about [amc]time</div><div class='add'>+     * We return our source.</div><div class='add'>+     */</div><div class='add'>+    ret = source;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Look for mismatching uid/gid or mode or user xattrs even if</div><div class='ctx'>  * AFR xattrs don't say so, and pick one arbitrarily as winner. */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__afr_selfheal_metadata_finalize_source (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                         inode_t *inode,</div><div class='del'>-                                         unsigned char *sources,</div><div class='del'>-                                         unsigned char *sinks,</div><div class='del'>-					 unsigned char *healed_sinks,</div><div class='del'>-					 unsigned char *undid_pending,</div><div class='del'>-					 unsigned char *locked_on,</div><div class='del'>-					 struct afr_reply *replies)</div><div class='add'>+__afr_selfheal_metadata_finalize_source(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                        inode_t *inode, unsigned char *sources,</div><div class='add'>+                                        unsigned char *sinks,</div><div class='add'>+                                        unsigned char *healed_sinks,</div><div class='add'>+                                        unsigned char *undid_pending,</div><div class='add'>+                                        unsigned char *locked_on,</div><div class='add'>+                                        struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	struct iatt srcstat = {0, };</div><div class='del'>-	int source = -1;</div><div class='del'>-	int sources_count = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	sources_count = AFR_COUNT (sources, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	if ((AFR_CMP (locked_on, healed_sinks, priv-&gt;child_count) == 0)</div><div class='del'>-	    || !sources_count) {</div><div class='del'>-</div><div class='del'>-                source = afr_mark_split_brain_source_sinks (frame, this, inode,</div><div class='del'>-                                                            sources, sinks,</div><div class='del'>-                                                            healed_sinks,</div><div class='del'>-                                                            locked_on, replies,</div><div class='del'>-                                                      AFR_METADATA_TRANSACTION);</div><div class='del'>-                if (source &gt;= 0) {</div><div class='del'>-                        _afr_fav_child_reset_sink_xattrs (frame, this, inode,</div><div class='del'>-                                                         source, healed_sinks,</div><div class='del'>-                                                         undid_pending,</div><div class='del'>-                                                       AFR_METADATA_TRANSACTION,</div><div class='del'>-                                                         locked_on, replies);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		/* If this is a directory mtime/ctime only split brain</div><div class='del'>-		   use the most recent */</div><div class='del'>-		source = afr_dirtime_splitbrain_source (frame, this,</div><div class='del'>-							replies, locked_on);</div><div class='del'>-		if (source != -1) {</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                AFR_MSG_SPLIT_BRAIN, "clear time "</div><div class='del'>-				"split brain on %s",</div><div class='del'>-				 uuid_utoa (replies[source].poststat.ia_gfid));</div><div class='del'>-			sources[source] = 1;</div><div class='del'>-			healed_sinks[source] = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!priv-&gt;metadata_splitbrain_forced_heal) {</div><div class='del'>-                        gf_event (EVENT_AFR_SPLIT_BRAIN, "subvol=%s;"</div><div class='del'>-                                  "type=metadata;file=%s",</div><div class='del'>-                                  this-&gt;name, uuid_utoa(inode-&gt;gfid));</div><div class='del'>-			return -EIO;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/* Metadata split brain, select one subvol</div><div class='del'>-		   arbitrarily */</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			if (locked_on[i] &amp;&amp; healed_sinks[i]) {</div><div class='del'>-				sources[i] = 1;</div><div class='del'>-				healed_sinks[i] = 0;</div><div class='del'>-				break;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* No split brain at this point. If we were called from</div><div class='del'>-         * afr_heal_splitbrain_file(), abort.*/</div><div class='del'>-        if (afr_dict_contains_heal_op(frame))</div><div class='del'>-                return -EIO;</div><div class='del'>-</div><div class='del'>-        source = afr_choose_source_by_policy (priv, sources,</div><div class='del'>-                                              AFR_METADATA_TRANSACTION);</div><div class='del'>-        srcstat = replies[source].poststat;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!sources[i] || i == source)</div><div class='del'>-			continue;</div><div class='del'>-		if (!IA_EQUAL (srcstat, replies[i].poststat, type) ||</div><div class='del'>-		    !IA_EQUAL (srcstat, replies[i].poststat, uid) ||</div><div class='del'>-		    !IA_EQUAL (srcstat, replies[i].poststat, gid) ||</div><div class='del'>-		    !IA_EQUAL (srcstat, replies[i].poststat, prot)) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: iatt mismatch "</div><div class='del'>-                                      "for source(%d) vs (%d)",</div><div class='del'>-                                      uuid_utoa</div><div class='del'>-                                      (replies[source].poststat.ia_gfid),</div><div class='del'>-                                      source, i);</div><div class='del'>-			sources[i] = 0;</div><div class='del'>-			healed_sinks[i] = 1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        for (i =0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!sources[i] || i == source)</div><div class='del'>-			continue;</div><div class='del'>-                if (!afr_xattrs_are_equal (replies[source].xdata,</div><div class='del'>-                                           replies[i].xdata)) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: xattr mismatch "</div><div class='del'>-                                      "for source(%d) vs (%d)",</div><div class='del'>-                                      uuid_utoa</div><div class='del'>-                                      (replies[source].poststat.ia_gfid),</div><div class='del'>-                                      source, i);</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                        healed_sinks[i] = 1;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct iatt srcstat = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int source = -1;</div><div class='add'>+    int sources_count = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    sources_count = AFR_COUNT(sources, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    if ((AFR_CMP(locked_on, healed_sinks, priv-&gt;child_count) == 0) ||</div><div class='add'>+        !sources_count) {</div><div class='add'>+        source = afr_mark_split_brain_source_sinks(</div><div class='add'>+            frame, this, inode, sources, sinks, healed_sinks, locked_on,</div><div class='add'>+            replies, AFR_METADATA_TRANSACTION);</div><div class='add'>+        if (source &gt;= 0) {</div><div class='add'>+            _afr_fav_child_reset_sink_xattrs(</div><div class='add'>+                frame, this, inode, source, healed_sinks, undid_pending,</div><div class='add'>+                AFR_METADATA_TRANSACTION, locked_on, replies);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* If this is a directory mtime/ctime only split brain</div><div class='add'>+           use the most recent */</div><div class='add'>+        source = afr_dirtime_splitbrain_source(frame, this, replies, locked_on);</div><div class='add'>+        if (source != -1) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                   "clear time "</div><div class='add'>+                   "split brain on %s",</div><div class='add'>+                   uuid_utoa(replies[source].poststat.ia_gfid));</div><div class='add'>+            sources[source] = 1;</div><div class='add'>+            healed_sinks[source] = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if (!priv-&gt;metadata_splitbrain_forced_heal) {</div><div class='add'>+            gf_event(EVENT_AFR_SPLIT_BRAIN,</div><div class='add'>+                     "subvol=%s;"</div><div class='add'>+                     "type=metadata;file=%s",</div><div class='add'>+                     this-&gt;name, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            return -EIO;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* Metadata split brain, select one subvol</div><div class='add'>+           arbitrarily */</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (locked_on[i] &amp;&amp; healed_sinks[i]) {</div><div class='add'>+                sources[i] = 1;</div><div class='add'>+                healed_sinks[i] = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* No split brain at this point. If we were called from</div><div class='add'>+     * afr_heal_splitbrain_file(), abort.*/</div><div class='add'>+    if (afr_dict_contains_heal_op(frame))</div><div class='add'>+        return -EIO;</div><div class='add'>+</div><div class='add'>+    source = afr_choose_source_by_policy(priv, sources,</div><div class='add'>+                                         AFR_METADATA_TRANSACTION);</div><div class='add'>+    srcstat = replies[source].poststat;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i] || i == source)</div><div class='add'>+            continue;</div><div class='add'>+        if (!IA_EQUAL(srcstat, replies[i].poststat, type) ||</div><div class='add'>+            !IA_EQUAL(srcstat, replies[i].poststat, uid) ||</div><div class='add'>+            !IA_EQUAL(srcstat, replies[i].poststat, gid) ||</div><div class='add'>+            !IA_EQUAL(srcstat, replies[i].poststat, prot)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: iatt mismatch "</div><div class='add'>+                         "for source(%d) vs (%d)",</div><div class='add'>+                         uuid_utoa(replies[source].poststat.ia_gfid), source,</div><div class='add'>+                         i);</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            healed_sinks[i] = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i] || i == source)</div><div class='add'>+            continue;</div><div class='add'>+        if (!afr_xattrs_are_equal(replies[source].xdata, replies[i].xdata)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: xattr mismatch "</div><div class='add'>+                         "for source(%d) vs (%d)",</div><div class='add'>+                         uuid_utoa(replies[source].poststat.ia_gfid), source,</div><div class='add'>+                         i);</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            healed_sinks[i] = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        afr_mark_active_sinks (this, sources, locked_on, healed_sinks);</div><div class='del'>-	return source;</div><div class='add'>+    afr_mark_active_sinks(this, sources, locked_on, healed_sinks);</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_metadata_prepare (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-				 unsigned char *locked_on, unsigned char *sources,</div><div class='del'>-				 unsigned char *sinks, unsigned char *healed_sinks,</div><div class='del'>-                                 unsigned char *undid_pending,</div><div class='del'>-				 struct afr_reply *replies, gf_boolean_t *pflag)</div><div class='add'>+__afr_selfheal_metadata_prepare(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                inode_t *inode, unsigned char *locked_on,</div><div class='add'>+                                unsigned char *sources, unsigned char *sinks,</div><div class='add'>+                                unsigned char *healed_sinks,</div><div class='add'>+                                unsigned char *undid_pending,</div><div class='add'>+                                struct afr_reply *replies, gf_boolean_t *pflag)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	int source = -1;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-        uint64_t *witness = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t *witness = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_unlocked_discover (frame, inode, inode-&gt;gfid,</div><div class='del'>-					      replies);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        witness = alloca0 (sizeof (*witness) * priv-&gt;child_count);</div><div class='del'>-        ret = afr_selfheal_find_direction (frame, this, replies,</div><div class='del'>-					   AFR_METADATA_TRANSACTION,</div><div class='del'>-					   locked_on, sources, sinks, witness,</div><div class='del'>-                                           pflag);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-</div><div class='del'>-        /* Initialize the healed_sinks[] array optimistically to</div><div class='del'>-           the intersection of to-be-healed (i.e sinks[]) and</div><div class='del'>-           the list of servers which are up (i.e locked_on[]).</div><div class='del'>-</div><div class='del'>-           As we encounter failures in the healing process, we</div><div class='del'>-           will unmark the respective servers in the healed_sinks[]</div><div class='del'>-           array.</div><div class='del'>-        */</div><div class='del'>-        AFR_INTERSECT (healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        /* If any source has witness, pick first</div><div class='del'>-         * witness source and make everybody else sinks */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (sources[i] &amp;&amp; witness[i]) {</div><div class='del'>-                        source = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    ret = afr_selfheal_unlocked_discover(frame, inode, inode-&gt;gfid, replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (source != -1) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (i != source &amp;&amp; sources[i]) {</div><div class='del'>-                                sources[i] = 0;</div><div class='del'>-                                healed_sinks[i] = 1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    witness = alloca0(sizeof(*witness) * priv-&gt;child_count);</div><div class='add'>+    ret = afr_selfheal_find_direction(frame, this, replies,</div><div class='add'>+                                      AFR_METADATA_TRANSACTION, locked_on,</div><div class='add'>+                                      sources, sinks, witness, pflag);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    /* Initialize the healed_sinks[] array optimistically to</div><div class='add'>+       the intersection of to-be-healed (i.e sinks[]) and</div><div class='add'>+       the list of servers which are up (i.e locked_on[]).</div><div class='add'>+</div><div class='add'>+       As we encounter failures in the healing process, we</div><div class='add'>+       will unmark the respective servers in the healed_sinks[]</div><div class='add'>+       array.</div><div class='add'>+    */</div><div class='add'>+    AFR_INTERSECT(healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    /* If any source has witness, pick first</div><div class='add'>+     * witness source and make everybody else sinks */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (sources[i] &amp;&amp; witness[i]) {</div><div class='add'>+            source = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	source = __afr_selfheal_metadata_finalize_source (frame, this, inode,</div><div class='del'>-                                                          sources, sinks,</div><div class='del'>-                                                          healed_sinks,</div><div class='del'>-                                                          undid_pending,</div><div class='del'>-                                                          locked_on, replies);</div><div class='add'>+    if (source != -1) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (i != source &amp;&amp; sources[i]) {</div><div class='add'>+                sources[i] = 0;</div><div class='add'>+                healed_sinks[i] = 1;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (source &lt; 0)</div><div class='del'>-		return -EIO;</div><div class='add'>+    source = __afr_selfheal_metadata_finalize_source(</div><div class='add'>+        frame, this, inode, sources, sinks, healed_sinks, undid_pending,</div><div class='add'>+        locked_on, replies);</div><div class='ctx'> </div><div class='del'>-	return source;</div><div class='del'>-}</div><div class='add'>+    if (source &lt; 0)</div><div class='add'>+        return -EIO;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-afr_selfheal_metadata (call_frame_t *frame, xlator_t *this, inode_t *inode)</div><div class='del'>-{</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	unsigned char *sources = NULL;</div><div class='del'>-	unsigned char *sinks = NULL;</div><div class='del'>-	unsigned char *data_lock = NULL;</div><div class='del'>-	unsigned char *healed_sinks = NULL;</div><div class='del'>-	unsigned char *undid_pending = NULL;</div><div class='del'>-	struct afr_reply *locked_replies = NULL;</div><div class='del'>-        gf_boolean_t did_sh = _gf_true;</div><div class='del'>-	int source = -1;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-	sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	undid_pending = alloca0 (priv-&gt;child_count);</div><div class='del'>-	data_lock = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	locked_replies = alloca0 (sizeof (*locked_replies) * priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_inodelk (frame, this, inode, this-&gt;name,</div><div class='del'>-				    LLONG_MAX - 1, 0, data_lock);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_metadata_prepare (frame, this, inode,</div><div class='del'>-                                                       data_lock, sources,</div><div class='del'>-                                                       sinks, healed_sinks,</div><div class='del'>-                                                       undid_pending,</div><div class='del'>-						       locked_replies, NULL);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='del'>-		source = ret;</div><div class='del'>-</div><div class='del'>-                if (AFR_COUNT (healed_sinks, priv-&gt;child_count) == 0) {</div><div class='del'>-                        did_sh = _gf_false;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = __afr_selfheal_metadata_do (frame, this, inode, source,</div><div class='del'>-                                                  healed_sinks, locked_replies);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                /* Restore atime/mtime for files that don't need data heal as</div><div class='del'>-                 * restoring timestamps happens only as a part of data-heal.</div><div class='del'>-                 */</div><div class='del'>-                if (!IA_ISREG (locked_replies[source].poststat.ia_type))</div><div class='del'>-                        afr_selfheal_restore_time (frame, this, inode, source,</div><div class='del'>-                                                  healed_sinks, locked_replies);</div><div class='del'>-</div><div class='del'>-                ret = afr_selfheal_undo_pending (frame, this, inode, sources,</div><div class='del'>-                                                 sinks, healed_sinks,</div><div class='del'>-                                                 undid_pending,</div><div class='del'>-                                                 AFR_METADATA_TRANSACTION,</div><div class='del'>-                                                 locked_replies, data_lock);</div><div class='del'>-	}</div><div class='del'>-unlock:</div><div class='del'>-	afr_selfheal_uninodelk (frame, this, inode, this-&gt;name,</div><div class='del'>-				LLONG_MAX -1, 0, data_lock);</div><div class='del'>-</div><div class='del'>-        if (did_sh)</div><div class='del'>-                afr_log_selfheal (inode-&gt;gfid, this, ret, "metadata", source,</div><div class='del'>-                                  sources, healed_sinks);</div><div class='del'>-        else</div><div class='del'>-                ret = 1;</div><div class='del'>-</div><div class='del'>-        if (locked_replies)</div><div class='del'>-                afr_replies_wipe (locked_replies, priv-&gt;child_count);</div><div class='del'>-	return ret;</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_metadata_by_stbuf (xlator_t *this, struct iatt *stbuf)</div><div class='add'>+afr_selfheal_metadata(call_frame_t *frame, xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        inode_t      *inode      = NULL;</div><div class='del'>-        inode_t      *link_inode = NULL;</div><div class='del'>-        call_frame_t *frame      = NULL;</div><div class='del'>-        int          ret         = 0;</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_is_null (stbuf-&gt;ia_gfid)) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *data_lock = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *undid_pending = NULL;</div><div class='add'>+    struct afr_reply *locked_replies = NULL;</div><div class='add'>+    gf_boolean_t did_sh = _gf_true;</div><div class='add'>+    int source = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    undid_pending = alloca0(priv-&gt;child_count);</div><div class='add'>+    data_lock = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    locked_replies = alloca0(sizeof(*locked_replies) * priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_inodelk(frame, this, inode, this-&gt;name, LLONG_MAX - 1, 0,</div><div class='add'>+                               data_lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        inode = inode_new (this-&gt;itable);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = __afr_selfheal_metadata_prepare(</div><div class='add'>+            frame, this, inode, data_lock, sources, sinks, healed_sinks,</div><div class='add'>+            undid_pending, locked_replies, NULL);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-        link_inode = inode_link (inode, NULL, NULL, stbuf);</div><div class='del'>-        if (!link_inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        source = ret;</div><div class='ctx'> </div><div class='del'>-        frame = afr_frame_create (this, &amp;ret);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -ret;</div><div class='del'>-                goto out;</div><div class='add'>+        if (AFR_COUNT(healed_sinks, priv-&gt;child_count) == 0) {</div><div class='add'>+            did_sh = _gf_false;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_metadata (frame, this, link_inode);</div><div class='add'>+        ret = __afr_selfheal_metadata_do(frame, this, inode, source,</div><div class='add'>+                                         healed_sinks, locked_replies);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        /* Restore atime/mtime for files that don't need data heal as</div><div class='add'>+         * restoring timestamps happens only as a part of data-heal.</div><div class='add'>+         */</div><div class='add'>+        if (!IA_ISREG(locked_replies[source].poststat.ia_type))</div><div class='add'>+            afr_selfheal_restore_time(frame, this, inode, source, healed_sinks,</div><div class='add'>+                                      locked_replies);</div><div class='add'>+</div><div class='add'>+        ret = afr_selfheal_undo_pending(</div><div class='add'>+            frame, this, inode, sources, sinks, healed_sinks, undid_pending,</div><div class='add'>+            AFR_METADATA_TRANSACTION, locked_replies, data_lock);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    afr_selfheal_uninodelk(frame, this, inode, this-&gt;name, LLONG_MAX - 1, 0,</div><div class='add'>+                           data_lock);</div><div class='add'>+</div><div class='add'>+    if (did_sh)</div><div class='add'>+        afr_log_selfheal(inode-&gt;gfid, this, ret, "metadata", source, sources,</div><div class='add'>+                         healed_sinks);</div><div class='add'>+    else</div><div class='add'>+        ret = 1;</div><div class='add'>+</div><div class='add'>+    if (locked_replies)</div><div class='add'>+        afr_replies_wipe(locked_replies, priv-&gt;child_count);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+afr_selfheal_metadata_by_stbuf(xlator_t *this, struct iatt *stbuf)</div><div class='add'>+{</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *link_inode = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_is_null(stbuf-&gt;ia_gfid)) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode = inode_new(this-&gt;itable);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    link_inode = inode_link(inode, NULL, NULL, stbuf);</div><div class='add'>+    if (!link_inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame = afr_frame_create(this, &amp;ret);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_metadata(frame, this, link_inode);</div><div class='ctx'> out:</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        if (link_inode)</div><div class='del'>-                inode_unref (link_inode);</div><div class='del'>-        if (frame)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='del'>-        return ret;</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (link_inode)</div><div class='add'>+        inode_unref(link_inode);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heal-name.c b/xlators/cluster/afr/src/afr-self-heal-name.c<br/>index 0a5be29d5ee..39aacee6ecf 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-name.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-self-heal-name.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heal-name.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heal-name.c</a></div><div class='hunk'>@@ -8,696 +8,667 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "events.h"</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-self-heal.h"</div><div class='ctx'> #include "afr-messages.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_assign_gfid (xlator_t *this, inode_t *parent, uuid_t pargfid,</div><div class='del'>-                            const char *bname, inode_t *inode,</div><div class='del'>-                            struct afr_reply *replies, void *gfid,</div><div class='del'>-                            unsigned char *locked_on, int source,</div><div class='del'>-                            unsigned char *sources, gf_boolean_t is_gfid_absent)</div><div class='add'>+__afr_selfheal_assign_gfid(xlator_t *this, inode_t *parent, uuid_t pargfid,</div><div class='add'>+                           const char *bname, inode_t *inode,</div><div class='add'>+                           struct afr_reply *replies, void *gfid,</div><div class='add'>+                           unsigned char *locked_on, int source,</div><div class='add'>+                           unsigned char *sources, gf_boolean_t is_gfid_absent)</div><div class='ctx'> {</div><div class='del'>-	int             ret          = 0;</div><div class='del'>-        int             up_count     = 0;</div><div class='del'>-        int             locked_count = 0;</div><div class='del'>-	afr_private_t  *priv         = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int up_count = 0;</div><div class='add'>+    int locked_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	gf_uuid_copy (parent-&gt;gfid, pargfid);</div><div class='add'>+    gf_uuid_copy(parent-&gt;gfid, pargfid);</div><div class='ctx'> </div><div class='del'>-        if (is_gfid_absent) {</div><div class='del'>-                /* Ensure all children of AFR are up before performing gfid heal, to</div><div class='del'>-                 * guard against the possibility of gfid split brain. */</div><div class='add'>+    if (is_gfid_absent) {</div><div class='add'>+        /* Ensure all children of AFR are up before performing gfid heal, to</div><div class='add'>+         * guard against the possibility of gfid split brain. */</div><div class='ctx'> </div><div class='del'>-                up_count = AFR_COUNT (priv-&gt;child_up, priv-&gt;child_count);</div><div class='del'>-                if (up_count != priv-&gt;child_count) {</div><div class='del'>-                        ret = -EIO;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        up_count = AFR_COUNT(priv-&gt;child_up, priv-&gt;child_count);</div><div class='add'>+        if (up_count != priv-&gt;child_count) {</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                locked_count = AFR_COUNT (locked_on, priv-&gt;child_count);</div><div class='del'>-                if (locked_count != priv-&gt;child_count) {</div><div class='del'>-                        ret = -EIO;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        locked_count = AFR_COUNT(locked_on, priv-&gt;child_count);</div><div class='add'>+        if (locked_count != priv-&gt;child_count) {</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        afr_lookup_and_heal_gfid (this, parent, bname, inode, replies, source,</div><div class='del'>-                                  sources, gfid);</div><div class='add'>+    afr_lookup_and_heal_gfid(this, parent, bname, inode, replies, source,</div><div class='add'>+                             sources, gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_name_impunge (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                             inode_t *parent, uuid_t pargfid,</div><div class='del'>-                             const char *bname, inode_t *inode,</div><div class='del'>-                             struct afr_reply *replies, int gfid_idx)</div><div class='add'>+__afr_selfheal_name_impunge(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                            inode_t *parent, uuid_t pargfid, const char *bname,</div><div class='add'>+                            inode_t *inode, struct afr_reply *replies,</div><div class='add'>+                            int gfid_idx)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        unsigned char *sources = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	sources = alloca0 (priv-&gt;child_count);</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	gf_uuid_copy (parent-&gt;gfid, pargfid);</div><div class='add'>+    gf_uuid_copy(parent-&gt;gfid, pargfid);</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-			continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		if (gf_uuid_compare (replies[i].poststat.ia_gfid,</div><div class='del'>-				  replies[gfid_idx].poststat.ia_gfid) == 0) {</div><div class='del'>-                        sources[i] = 1;</div><div class='del'>-			continue;</div><div class='del'>-                }</div><div class='add'>+        if (gf_uuid_compare(replies[i].poststat.ia_gfid,</div><div class='add'>+                            replies[gfid_idx].poststat.ia_gfid) == 0) {</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (sources[i])</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (sources[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		ret |= afr_selfheal_recreate_entry (frame, i, gfid_idx, sources,</div><div class='del'>-                                                    parent, bname, inode,</div><div class='del'>-                                                    replies);</div><div class='del'>-	}</div><div class='add'>+        ret |= afr_selfheal_recreate_entry(frame, i, gfid_idx, sources, parent,</div><div class='add'>+                                           bname, inode, replies);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_name_expunge (xlator_t *this, inode_t *parent, uuid_t pargfid,</div><div class='del'>-                             const char *bname, inode_t *inode,</div><div class='del'>-			     struct afr_reply *replies)</div><div class='add'>+__afr_selfheal_name_expunge(xlator_t *this, inode_t *parent, uuid_t pargfid,</div><div class='add'>+                            const char *bname, inode_t *inode,</div><div class='add'>+                            struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-	loc_t loc = {0, };</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	char g[64];</div><div class='del'>-	int ret = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	loc.parent = inode_ref (parent);</div><div class='del'>-	gf_uuid_copy (loc.pargfid, pargfid);</div><div class='del'>-	loc.name = bname;</div><div class='del'>-	loc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		if (replies[i].op_ret)</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		switch (replies[i].poststat.ia_type) {</div><div class='del'>-		case IA_IFDIR:</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='del'>-			        "expunging dir %s/%s (%s) on %s",</div><div class='del'>-			        uuid_utoa (pargfid), bname,</div><div class='del'>-			        uuid_utoa_r (replies[i].poststat.ia_gfid, g),</div><div class='del'>-			        priv-&gt;children[i]-&gt;name);</div><div class='del'>-</div><div class='del'>-			ret |= syncop_rmdir (priv-&gt;children[i], &amp;loc, 1, NULL,</div><div class='del'>-                                             NULL);</div><div class='del'>-			break;</div><div class='del'>-		default:</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='del'>-		                "expunging file %s/%s (%s) on %s",</div><div class='del'>-			        uuid_utoa (pargfid), bname,</div><div class='del'>-			        uuid_utoa_r (replies[i].poststat.ia_gfid, g),</div><div class='del'>-			        priv-&gt;children[i]-&gt;name);</div><div class='del'>-</div><div class='del'>-			ret |= syncop_unlink (priv-&gt;children[i], &amp;loc, NULL,</div><div class='del'>-                                              NULL);</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-	return ret;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    char g[64];</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, pargfid);</div><div class='add'>+    loc.name = bname;</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (replies[i].op_ret)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        switch (replies[i].poststat.ia_type) {</div><div class='add'>+            case IA_IFDIR:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='add'>+                       "expunging dir %s/%s (%s) on %s", uuid_utoa(pargfid),</div><div class='add'>+                       bname, uuid_utoa_r(replies[i].poststat.ia_gfid, g),</div><div class='add'>+                       priv-&gt;children[i]-&gt;name);</div><div class='add'>+</div><div class='add'>+                ret |= syncop_rmdir(priv-&gt;children[i], &amp;loc, 1, NULL, NULL);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       AFR_MSG_EXPUNGING_FILE_OR_DIR,</div><div class='add'>+                       "expunging file %s/%s (%s) on %s", uuid_utoa(pargfid),</div><div class='add'>+                       bname, uuid_utoa_r(replies[i].poststat.ia_gfid, g),</div><div class='add'>+                       priv-&gt;children[i]-&gt;name);</div><div class='add'>+</div><div class='add'>+                ret |= syncop_unlink(priv-&gt;children[i], &amp;loc, NULL, NULL);</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is to be called after ensuring that there is no gfid mismatch</div><div class='ctx'>  * for the inode across multiple sources</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_gfid_idx_get (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                           unsigned char *sources)</div><div class='add'>+afr_selfheal_gfid_idx_get(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                          unsigned char *sources)</div><div class='ctx'> {</div><div class='del'>-        int             i        =  0;</div><div class='del'>-        int             gfid_idx = -1;</div><div class='del'>-        afr_private_t  *priv     =  NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int gfid_idx = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_is_null (replies[i].poststat.ia_gfid))</div><div class='del'>-                        continue;</div><div class='add'>+        if (gf_uuid_is_null(replies[i].poststat.ia_gfid))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                gfid_idx = i;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return gfid_idx;</div><div class='add'>+        gfid_idx = i;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='add'>+    return gfid_idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_selfheal_name_need_heal_check (xlator_t *this, struct afr_reply *replies)</div><div class='add'>+afr_selfheal_name_need_heal_check(xlator_t *this, struct afr_reply *replies)</div><div class='ctx'> {</div><div class='del'>-        int             i           = 0;</div><div class='del'>-	int             first_idx   = -1;</div><div class='del'>-        gf_boolean_t    need_heal   = _gf_false;</div><div class='del'>-        afr_private_t  *priv        = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int first_idx = -1;</div><div class='add'>+    gf_boolean_t need_heal = _gf_false;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid)</div><div class='del'>-			continue;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-                if ((replies[i].op_ret == -1) &amp;&amp;</div><div class='del'>-                    (replies[i].op_errno == ENODATA))</div><div class='del'>-                        need_heal = _gf_true;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		if (first_idx == -1) {</div><div class='del'>-			first_idx = i;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='add'>+        if ((replies[i].op_ret == -1) &amp;&amp; (replies[i].op_errno == ENODATA))</div><div class='add'>+            need_heal = _gf_true;</div><div class='ctx'> </div><div class='del'>-		if (replies[i].op_ret != replies[first_idx].op_ret)</div><div class='del'>-			need_heal = _gf_true;</div><div class='add'>+        if (first_idx == -1) {</div><div class='add'>+            first_idx = i;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (gf_uuid_compare (replies[i].poststat.ia_gfid,</div><div class='del'>-				  replies[first_idx].poststat.ia_gfid))</div><div class='del'>-			need_heal = _gf_true;</div><div class='add'>+        if (replies[i].op_ret != replies[first_idx].op_ret)</div><div class='add'>+            need_heal = _gf_true;</div><div class='ctx'> </div><div class='del'>-                if ((replies[i].op_ret == 0) &amp;&amp;</div><div class='del'>-                    (gf_uuid_is_null(replies[i].poststat.ia_gfid)))</div><div class='del'>-                        need_heal = _gf_true;</div><div class='add'>+        if (gf_uuid_compare(replies[i].poststat.ia_gfid,</div><div class='add'>+                            replies[first_idx].poststat.ia_gfid))</div><div class='add'>+            need_heal = _gf_true;</div><div class='ctx'> </div><div class='del'>-	}</div><div class='add'>+        if ((replies[i].op_ret == 0) &amp;&amp;</div><div class='add'>+            (gf_uuid_is_null(replies[i].poststat.ia_gfid)))</div><div class='add'>+            need_heal = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return need_heal;</div><div class='add'>+    return need_heal;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_name_type_mismatch_check (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                                       int source, unsigned char *sources,</div><div class='del'>-                                       uuid_t pargfid, const char *bname)</div><div class='add'>+afr_selfheal_name_type_mismatch_check(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                                      int source, unsigned char *sources,</div><div class='add'>+                                      uuid_t pargfid, const char *bname)</div><div class='ctx'> {</div><div class='del'>-        int             i           = 0;</div><div class='del'>-        int             type_idx    = -1;</div><div class='del'>-        ia_type_t       inode_type  = IA_INVAL;</div><div class='del'>-        ia_type_t       inode_type1 = IA_INVAL;</div><div class='del'>-        afr_private_t  *priv        = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int type_idx = -1;</div><div class='add'>+    ia_type_t inode_type = IA_INVAL;</div><div class='add'>+    ia_type_t inode_type1 = IA_INVAL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (replies[i].poststat.ia_type == IA_INVAL)</div><div class='del'>-                        continue;</div><div class='add'>+        if (replies[i].poststat.ia_type == IA_INVAL)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (inode_type == IA_INVAL) {</div><div class='del'>-                        inode_type = replies[i].poststat.ia_type;</div><div class='del'>-                        type_idx = i;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                inode_type1 = replies[i].poststat.ia_type;</div><div class='del'>-                if (sources[i] || source == -1) {</div><div class='del'>-                        if ((sources[type_idx] || source == -1) &amp;&amp;</div><div class='del'>-                            (inode_type != inode_type1)) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        AFR_MSG_SPLIT_BRAIN,</div><div class='del'>-                                        "Type mismatch for &lt;gfid:%s&gt;/%s: "</div><div class='del'>-                                        "%s on %s and %s on %s",</div><div class='del'>-                                        uuid_utoa(pargfid), bname,</div><div class='del'>-                                        gf_inode_type_to_str (inode_type1),</div><div class='del'>-                                        priv-&gt;children[i]-&gt;name,</div><div class='del'>-                                        gf_inode_type_to_str (inode_type),</div><div class='del'>-                                        priv-&gt;children[type_idx]-&gt;name);</div><div class='del'>-                                gf_event (EVENT_AFR_SPLIT_BRAIN,</div><div class='del'>-                                         "subvol=%s;type=file;"</div><div class='del'>-                                         "file=&lt;gfid:%s&gt;/%s;count=2;"</div><div class='del'>-                                         "child-%d=%s;type-%d=%s;child-%d=%s;"</div><div class='del'>-                                         "type-%d=%s", this-&gt;name,</div><div class='del'>-                                         uuid_utoa (pargfid), bname, i,</div><div class='del'>-                                         priv-&gt;children[i]-&gt;name, i,</div><div class='del'>-                                         gf_inode_type_to_str (inode_type1),</div><div class='del'>-                                         type_idx,</div><div class='del'>-                                         priv-&gt;children[type_idx]-&gt;name,</div><div class='del'>-                                         type_idx,</div><div class='del'>-                                         gf_inode_type_to_str (inode_type));</div><div class='del'>-                                return -EIO;</div><div class='del'>-                        }</div><div class='del'>-                        inode_type = replies[i].poststat.ia_type;</div><div class='del'>-                        type_idx = i;</div><div class='del'>-                }</div><div class='add'>+        if (inode_type == IA_INVAL) {</div><div class='add'>+            inode_type = replies[i].poststat.ia_type;</div><div class='add'>+            type_idx = i;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        inode_type1 = replies[i].poststat.ia_type;</div><div class='add'>+        if (sources[i] || source == -1) {</div><div class='add'>+            if ((sources[type_idx] || source == -1) &amp;&amp;</div><div class='add'>+                (inode_type != inode_type1)) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_SPLIT_BRAIN,</div><div class='add'>+                       "Type mismatch for &lt;gfid:%s&gt;/%s: "</div><div class='add'>+                       "%s on %s and %s on %s",</div><div class='add'>+                       uuid_utoa(pargfid), bname,</div><div class='add'>+                       gf_inode_type_to_str(inode_type1),</div><div class='add'>+                       priv-&gt;children[i]-&gt;name,</div><div class='add'>+                       gf_inode_type_to_str(inode_type),</div><div class='add'>+                       priv-&gt;children[type_idx]-&gt;name);</div><div class='add'>+                gf_event(EVENT_AFR_SPLIT_BRAIN,</div><div class='add'>+                         "subvol=%s;type=file;"</div><div class='add'>+                         "file=&lt;gfid:%s&gt;/%s;count=2;"</div><div class='add'>+                         "child-%d=%s;type-%d=%s;child-%d=%s;"</div><div class='add'>+                         "type-%d=%s",</div><div class='add'>+                         this-&gt;name, uuid_utoa(pargfid), bname, i,</div><div class='add'>+                         priv-&gt;children[i]-&gt;name, i,</div><div class='add'>+                         gf_inode_type_to_str(inode_type1), type_idx,</div><div class='add'>+                         priv-&gt;children[type_idx]-&gt;name, type_idx,</div><div class='add'>+                         gf_inode_type_to_str(inode_type));</div><div class='add'>+                return -EIO;</div><div class='add'>+            }</div><div class='add'>+            inode_type = replies[i].poststat.ia_type;</div><div class='add'>+            type_idx = i;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_selfheal_name_gfid_mismatch_check (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                                       int source, unsigned char *sources,</div><div class='del'>-                                       int *gfid_idx, uuid_t pargfid,</div><div class='del'>-                                       const char *bname, inode_t *inode,</div><div class='del'>-                                       unsigned char *locked_on, dict_t *xdata)</div><div class='add'>+afr_selfheal_name_gfid_mismatch_check(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                                      int source, unsigned char *sources,</div><div class='add'>+                                      int *gfid_idx, uuid_t pargfid,</div><div class='add'>+                                      const char *bname, inode_t *inode,</div><div class='add'>+                                      unsigned char *locked_on, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             i             = 0;</div><div class='del'>-	int             gfid_idx_iter = -1;</div><div class='del'>-        int             ret           = -1;</div><div class='del'>-        void           *gfid          = NULL;</div><div class='del'>-        void           *gfid1         = NULL;</div><div class='del'>-        afr_private_t  *priv          = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-		if (gf_uuid_is_null (replies[i].poststat.ia_gfid))</div><div class='del'>-			continue;</div><div class='del'>-</div><div class='del'>-		if (!gfid) {</div><div class='del'>-			gfid = &amp;replies[i].poststat.ia_gfid;</div><div class='del'>-			gfid_idx_iter = i;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                gfid1 = &amp;replies[i].poststat.ia_gfid;</div><div class='del'>-		if (sources[i] || source == -1) {</div><div class='del'>-			if ((sources[gfid_idx_iter] || source == -1) &amp;&amp;</div><div class='del'>-			    gf_uuid_compare (gfid, gfid1)) {</div><div class='del'>-                                ret = afr_gfid_split_brain_source (this,</div><div class='del'>-                                                                   replies,</div><div class='del'>-                                                                   inode,</div><div class='del'>-                                                                   pargfid,</div><div class='del'>-                                                                   bname,</div><div class='del'>-                                                                   gfid_idx_iter,</div><div class='del'>-                                                                   i, locked_on,</div><div class='del'>-                                                                   gfid_idx,</div><div class='del'>-                                                                   xdata);</div><div class='del'>-                                if (!ret &amp;&amp; *gfid_idx &gt;= 0) {</div><div class='del'>-                                        ret = dict_set_str (xdata,</div><div class='del'>-                                                             "gfid-heal-msg",</div><div class='del'>-                                                             "GFID split-brain "</div><div class='del'>-                                                             "resolved");</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                        GF_LOG_ERROR, 0,</div><div class='del'>-                                                        AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                        "Error setting gfid-"</div><div class='del'>-                                                        "heal-msg dict");</div><div class='del'>-                                }</div><div class='del'>-                                return ret;</div><div class='del'>-			}</div><div class='del'>-                        gfid = &amp;replies[i].poststat.ia_gfid;</div><div class='del'>-			gfid_idx_iter = i;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        *gfid_idx = gfid_idx_iter;</div><div class='del'>-        return 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int gfid_idx_iter = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void *gfid = NULL;</div><div class='add'>+    void *gfid1 = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid || replies[i].op_ret != 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (gf_uuid_is_null(replies[i].poststat.ia_gfid))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (!gfid) {</div><div class='add'>+            gfid = &amp;replies[i].poststat.ia_gfid;</div><div class='add'>+            gfid_idx_iter = i;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gfid1 = &amp;replies[i].poststat.ia_gfid;</div><div class='add'>+        if (sources[i] || source == -1) {</div><div class='add'>+            if ((sources[gfid_idx_iter] || source == -1) &amp;&amp;</div><div class='add'>+                gf_uuid_compare(gfid, gfid1)) {</div><div class='add'>+                ret = afr_gfid_split_brain_source(this, replies, inode, pargfid,</div><div class='add'>+                                                  bname, gfid_idx_iter, i,</div><div class='add'>+                                                  locked_on, gfid_idx, xdata);</div><div class='add'>+                if (!ret &amp;&amp; *gfid_idx &gt;= 0) {</div><div class='add'>+                    ret = dict_set_str(xdata, "gfid-heal-msg",</div><div class='add'>+                                       "GFID split-brain "</div><div class='add'>+                                       "resolved");</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                               AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "Error setting gfid-"</div><div class='add'>+                               "heal-msg dict");</div><div class='add'>+                }</div><div class='add'>+                return ret;</div><div class='add'>+            }</div><div class='add'>+            gfid = &amp;replies[i].poststat.ia_gfid;</div><div class='add'>+            gfid_idx_iter = i;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *gfid_idx = gfid_idx_iter;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_selfheal_name_source_empty_check (xlator_t *this, struct afr_reply *replies,</div><div class='del'>-                                      unsigned char *sources, int source)</div><div class='add'>+afr_selfheal_name_source_empty_check(xlator_t *this, struct afr_reply *replies,</div><div class='add'>+                                     unsigned char *sources, int source)</div><div class='ctx'> {</div><div class='del'>-	int             i               = 0;</div><div class='del'>-	afr_private_t  *priv            = NULL;</div><div class='del'>-	gf_boolean_t    source_is_empty = _gf_true;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t source_is_empty = _gf_true;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (source == -1) {</div><div class='del'>-                source_is_empty = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (source == -1) {</div><div class='add'>+        source_is_empty = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!sources[i])</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!sources[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == ENOENT)</div><div class='del'>-                        continue;</div><div class='add'>+        if (replies[i].op_ret == -1 &amp;&amp; replies[i].op_errno == ENOENT)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                source_is_empty = _gf_false;</div><div class='del'>-                break;</div><div class='del'>-	}</div><div class='add'>+        source_is_empty = _gf_false;</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return source_is_empty;</div><div class='add'>+    return source_is_empty;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_name_do (call_frame_t *frame, xlator_t *this, inode_t *parent,</div><div class='del'>-                        uuid_t pargfid, const char *bname, inode_t *inode,</div><div class='del'>-                        unsigned char *sources, unsigned char *sinks,</div><div class='del'>-			unsigned char *healed_sinks, int source,</div><div class='del'>-			unsigned char *locked_on, struct afr_reply *replies,</div><div class='del'>-                        void *gfid_req, dict_t *xdata)</div><div class='add'>+__afr_selfheal_name_do(call_frame_t *frame, xlator_t *this, inode_t *parent,</div><div class='add'>+                       uuid_t pargfid, const char *bname, inode_t *inode,</div><div class='add'>+                       unsigned char *sources, unsigned char *sinks,</div><div class='add'>+                       unsigned char *healed_sinks, int source,</div><div class='add'>+                       unsigned char *locked_on, struct afr_reply *replies,</div><div class='add'>+                       void *gfid_req, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int             gfid_idx        = -1;</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-	void           *gfid            = NULL;</div><div class='del'>-	gf_boolean_t    source_is_empty = _gf_true;</div><div class='del'>-	gf_boolean_t    need_heal       = _gf_false;</div><div class='del'>-        gf_boolean_t    is_gfid_absent  = _gf_false;</div><div class='del'>-</div><div class='del'>-        need_heal = afr_selfheal_name_need_heal_check (this, replies);</div><div class='del'>-	if (!need_heal)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-        source_is_empty = afr_selfheal_name_source_empty_check (this, replies,</div><div class='del'>-                                                                sources,</div><div class='del'>-                                                                source);</div><div class='del'>-	if (source_is_empty) {</div><div class='del'>-		ret = __afr_selfheal_name_expunge (this, parent, pargfid,</div><div class='del'>-						    bname, inode, replies);</div><div class='del'>-                if (ret == -EIO)</div><div class='del'>-                        ret = -1;</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    int gfid_idx = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void *gfid = NULL;</div><div class='add'>+    gf_boolean_t source_is_empty = _gf_true;</div><div class='add'>+    gf_boolean_t need_heal = _gf_false;</div><div class='add'>+    gf_boolean_t is_gfid_absent = _gf_false;</div><div class='add'>+</div><div class='add'>+    need_heal = afr_selfheal_name_need_heal_check(this, replies);</div><div class='add'>+    if (!need_heal)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_name_type_mismatch_check (this, replies, source,</div><div class='del'>-                                                     sources, pargfid, bname);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    source_is_empty = afr_selfheal_name_source_empty_check(this, replies,</div><div class='add'>+                                                           sources, source);</div><div class='add'>+    if (source_is_empty) {</div><div class='add'>+        ret = __afr_selfheal_name_expunge(this, parent, pargfid, bname, inode,</div><div class='add'>+                                          replies);</div><div class='add'>+        if (ret == -EIO)</div><div class='add'>+            ret = -1;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = afr_selfheal_name_gfid_mismatch_check (this, replies, source,</div><div class='del'>-                                                     sources, &amp;gfid_idx,</div><div class='del'>-                                                     pargfid, bname, inode,</div><div class='del'>-                                                     locked_on, xdata);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = afr_selfheal_name_type_mismatch_check(this, replies, source, sources,</div><div class='add'>+                                                pargfid, bname);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-	if (gfid_idx == -1) {</div><div class='del'>-                if (!gfid_req || gf_uuid_is_null (gfid_req))</div><div class='del'>-                        return -1;</div><div class='del'>-                gfid = gfid_req;</div><div class='del'>-        } else {</div><div class='del'>-                gfid = &amp;replies[gfid_idx].poststat.ia_gfid;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_selfheal_name_gfid_mismatch_check(this, replies, source, sources,</div><div class='add'>+                                                &amp;gfid_idx, pargfid, bname,</div><div class='add'>+                                                inode, locked_on, xdata);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        is_gfid_absent = (gfid_idx == -1) ? _gf_true : _gf_false;</div><div class='del'>-	ret = __afr_selfheal_assign_gfid (this, parent, pargfid, bname, inode,</div><div class='del'>-                                          replies, gfid, locked_on, source,</div><div class='del'>-                                          sources, is_gfid_absent);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    if (gfid_idx == -1) {</div><div class='add'>+        if (!gfid_req || gf_uuid_is_null(gfid_req))</div><div class='add'>+            return -1;</div><div class='add'>+        gfid = gfid_req;</div><div class='add'>+    } else {</div><div class='add'>+        gfid = &amp;replies[gfid_idx].poststat.ia_gfid;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    is_gfid_absent = (gfid_idx == -1) ? _gf_true : _gf_false;</div><div class='add'>+    ret = __afr_selfheal_assign_gfid(this, parent, pargfid, bname, inode,</div><div class='add'>+                                     replies, gfid, locked_on, source, sources,</div><div class='add'>+                                     is_gfid_absent);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (gfid_idx == -1) {</div><div class='del'>-                gfid_idx = afr_selfheal_gfid_idx_get (this, replies, sources);</div><div class='del'>-                if (gfid_idx == -1)</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='add'>+    if (gfid_idx == -1) {</div><div class='add'>+        gfid_idx = afr_selfheal_gfid_idx_get(this, replies, sources);</div><div class='add'>+        if (gfid_idx == -1)</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = __afr_selfheal_name_impunge (frame, this, parent, pargfid,</div><div class='del'>-                                           bname, inode, replies, gfid_idx);</div><div class='del'>-        if (ret == -EIO)</div><div class='del'>-                ret = -1;</div><div class='add'>+    ret = __afr_selfheal_name_impunge(frame, this, parent, pargfid, bname,</div><div class='add'>+                                      inode, replies, gfid_idx);</div><div class='add'>+    if (ret == -EIO)</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_name_finalize_source (xlator_t *this, unsigned char *sources,</div><div class='del'>-				     unsigned char *healed_sinks,</div><div class='del'>-				     unsigned char *locked_on,</div><div class='del'>-                                     uint64_t *witness)</div><div class='add'>+__afr_selfheal_name_finalize_source(xlator_t *this, unsigned char *sources,</div><div class='add'>+                                    unsigned char *healed_sinks,</div><div class='add'>+                                    unsigned char *locked_on, uint64_t *witness)</div><div class='ctx'> {</div><div class='del'>-	int i = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int source = -1;</div><div class='del'>-	int sources_count = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	sources_count = AFR_COUNT (sources, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	if ((AFR_CMP (locked_on, healed_sinks, priv-&gt;child_count) == 0)</div><div class='del'>-            || !sources_count || afr_does_witness_exist (this, witness)) {</div><div class='del'>-                memset (sources, 0, sizeof (*sources) * priv-&gt;child_count);</div><div class='del'>-                afr_mark_active_sinks (this, sources, locked_on, healed_sinks);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (sources[i]) {</div><div class='del'>-			source = i;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return source;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    int sources_count = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    sources_count = AFR_COUNT(sources, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    if ((AFR_CMP(locked_on, healed_sinks, priv-&gt;child_count) == 0) ||</div><div class='add'>+        !sources_count || afr_does_witness_exist(this, witness)) {</div><div class='add'>+        memset(sources, 0, sizeof(*sources) * priv-&gt;child_count);</div><div class='add'>+        afr_mark_active_sinks(this, sources, locked_on, healed_sinks);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (sources[i]) {</div><div class='add'>+            source = i;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__afr_selfheal_name_prepare (call_frame_t *frame, xlator_t *this, inode_t *parent,</div><div class='del'>-			     uuid_t pargfid, unsigned char *locked_on,</div><div class='del'>-			     unsigned char *sources, unsigned char *sinks,</div><div class='del'>-			     unsigned char *healed_sinks, int *source_p)</div><div class='add'>+__afr_selfheal_name_prepare(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                            inode_t *parent, uuid_t pargfid,</div><div class='add'>+                            unsigned char *locked_on, unsigned char *sources,</div><div class='add'>+                            unsigned char *sinks, unsigned char *healed_sinks,</div><div class='add'>+                            int *source_p)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='del'>-	int source = -1;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-        uint64_t *witness = NULL;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        replies = alloca0 (priv-&gt;child_count * sizeof(*replies));</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_unlocked_discover (frame, parent, pargfid, replies);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        witness = alloca0 (sizeof (*witness) * priv-&gt;child_count);</div><div class='del'>-	ret = afr_selfheal_find_direction (frame, this, replies,</div><div class='del'>-					   AFR_ENTRY_TRANSACTION,</div><div class='del'>-					   locked_on, sources, sinks, witness,</div><div class='del'>-                                           NULL);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        /* Initialize the healed_sinks[] array optimistically to</div><div class='del'>-           the intersection of to-be-healed (i.e sinks[]) and</div><div class='del'>-           the list of servers which are up (i.e locked_on[]).</div><div class='del'>-</div><div class='del'>-           As we encounter failures in the healing process, we</div><div class='del'>-           will unmark the respective servers in the healed_sinks[]</div><div class='del'>-           array.</div><div class='del'>-        */</div><div class='del'>-        AFR_INTERSECT (healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	source = __afr_selfheal_name_finalize_source (this, sources,</div><div class='del'>-                                                      healed_sinks,</div><div class='del'>-						      locked_on, witness);</div><div class='del'>-	if (source &lt; 0) {</div><div class='del'>-		/* If source is &lt; 0 (typically split-brain), we perform a</div><div class='del'>-		   conservative merge of entries rather than erroring out */</div><div class='del'>-	}</div><div class='del'>-	*source_p = source;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int source = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    uint64_t *witness = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    replies = alloca0(priv-&gt;child_count * sizeof(*replies));</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_unlocked_discover(frame, parent, pargfid, replies);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    witness = alloca0(sizeof(*witness) * priv-&gt;child_count);</div><div class='add'>+    ret = afr_selfheal_find_direction(frame, this, replies,</div><div class='add'>+                                      AFR_ENTRY_TRANSACTION, locked_on, sources,</div><div class='add'>+                                      sinks, witness, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Initialize the healed_sinks[] array optimistically to</div><div class='add'>+       the intersection of to-be-healed (i.e sinks[]) and</div><div class='add'>+       the list of servers which are up (i.e locked_on[]).</div><div class='add'>+</div><div class='add'>+       As we encounter failures in the healing process, we</div><div class='add'>+       will unmark the respective servers in the healed_sinks[]</div><div class='add'>+       array.</div><div class='add'>+    */</div><div class='add'>+    AFR_INTERSECT(healed_sinks, sinks, locked_on, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    source = __afr_selfheal_name_finalize_source(this, sources, healed_sinks,</div><div class='add'>+                                                 locked_on, witness);</div><div class='add'>+    if (source &lt; 0) {</div><div class='add'>+        /* If source is &lt; 0 (typically split-brain), we perform a</div><div class='add'>+           conservative merge of entries rather than erroring out */</div><div class='add'>+    }</div><div class='add'>+    *source_p = source;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (replies)</div><div class='del'>-                afr_replies_wipe (replies, priv-&gt;child_count);</div><div class='add'>+    if (replies)</div><div class='add'>+        afr_replies_wipe(replies, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_name_do (call_frame_t *frame, xlator_t *this, inode_t *parent,</div><div class='del'>-		      uuid_t pargfid, const char *bname, void *gfid_req,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+afr_selfheal_name_do(call_frame_t *frame, xlator_t *this, inode_t *parent,</div><div class='add'>+                     uuid_t pargfid, const char *bname, void *gfid_req,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	unsigned char *sources = NULL;</div><div class='del'>-	unsigned char *sinks = NULL;</div><div class='del'>-	unsigned char *healed_sinks = NULL;</div><div class='del'>-	unsigned char *locked_on = NULL;</div><div class='del'>-	int source = -1;</div><div class='del'>-        struct afr_reply *replies = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	inode_t *inode = NULL;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr)</div><div class='del'>-                return -ENOMEM;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (xattr, GF_GFIDLESS_LOOKUP, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-                return -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *sinks = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    int source = -1;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(xattr, GF_GFIDLESS_LOOKUP, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(priv-&gt;child_count);</div><div class='add'>+    sources = alloca0(priv-&gt;child_count);</div><div class='add'>+    sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+    healed_sinks = alloca0(priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    replies = alloca0(priv-&gt;child_count * sizeof(*replies));</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_entrylk(frame, this, parent, this-&gt;name, bname,</div><div class='add'>+                               locked_on);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __afr_selfheal_name_prepare(frame, this, parent, pargfid,</div><div class='add'>+                                          locked_on, sources, sinks,</div><div class='add'>+                                          healed_sinks, &amp;source);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        inode = afr_selfheal_unlocked_lookup_on(frame, parent, bname, replies,</div><div class='add'>+                                                locked_on, xattr);</div><div class='add'>+        if (!inode) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	locked_on = alloca0 (priv-&gt;child_count);</div><div class='del'>-	sources = alloca0 (priv-&gt;child_count);</div><div class='del'>-	sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-	healed_sinks = alloca0 (priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-	replies = alloca0 (priv-&gt;child_count * sizeof(*replies));</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_entrylk (frame, this, parent, this-&gt;name, bname,</div><div class='del'>-				    locked_on);</div><div class='del'>-	{</div><div class='del'>-		if (ret &lt; AFR_SH_MIN_PARTICIPANTS) {</div><div class='del'>-			ret = -ENOTCONN;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_name_prepare (frame, this, parent, pargfid,</div><div class='del'>-						   locked_on, sources, sinks,</div><div class='del'>-						   healed_sinks, &amp;source);</div><div class='del'>-		if (ret)</div><div class='del'>-			goto unlock;</div><div class='del'>-</div><div class='del'>-                inode = afr_selfheal_unlocked_lookup_on (frame, parent, bname,</div><div class='del'>-						         replies, locked_on,</div><div class='del'>-                                                         xattr);</div><div class='del'>-		if (!inode) {</div><div class='del'>-			ret = -ENOMEM;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		ret = __afr_selfheal_name_do (frame, this, parent, pargfid,</div><div class='del'>-                                              bname, inode, sources, sinks,</div><div class='del'>-                                              healed_sinks, source, locked_on,</div><div class='del'>-                                              replies, gfid_req, xdata);</div><div class='del'>-	}</div><div class='add'>+        ret = __afr_selfheal_name_do(frame, this, parent, pargfid, bname, inode,</div><div class='add'>+                                     sources, sinks, healed_sinks, source,</div><div class='add'>+                                     locked_on, replies, gfid_req, xdata);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	afr_selfheal_unentrylk (frame, this, parent, this-&gt;name, bname,</div><div class='del'>-				locked_on, NULL);</div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref (inode);</div><div class='add'>+    afr_selfheal_unentrylk(frame, this, parent, this-&gt;name, bname, locked_on,</div><div class='add'>+                           NULL);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (replies)</div><div class='del'>-                afr_replies_wipe (replies, priv-&gt;child_count);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (replies)</div><div class='add'>+        afr_replies_wipe(replies, priv-&gt;child_count);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_name_unlocked_inspect (call_frame_t *frame, xlator_t *this,</div><div class='del'>-				    inode_t *parent, uuid_t pargfid,</div><div class='del'>-				    const char *bname, gf_boolean_t *need_heal)</div><div class='add'>+afr_selfheal_name_unlocked_inspect(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                   inode_t *parent, uuid_t pargfid,</div><div class='add'>+                                   const char *bname, gf_boolean_t *need_heal)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	struct afr_reply *replies = NULL;</div><div class='del'>-	inode_t *inode = NULL;</div><div class='del'>-	int first_idx = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct afr_reply *replies = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int first_idx = -1;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	replies = alloca0 (sizeof (*replies) * priv-&gt;child_count);</div><div class='add'>+    replies = alloca0(sizeof(*replies) * priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-	inode = afr_selfheal_unlocked_lookup_on (frame, parent, bname,</div><div class='del'>-						 replies, priv-&gt;child_up, NULL);</div><div class='del'>-	if (!inode)</div><div class='del'>-		return -ENOMEM;</div><div class='add'>+    inode = afr_selfheal_unlocked_lookup_on(frame, parent, bname, replies,</div><div class='add'>+                                            priv-&gt;child_up, NULL);</div><div class='add'>+    if (!inode)</div><div class='add'>+        return -ENOMEM;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (!replies[i].valid)</div><div class='del'>-			continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if ((replies[i].op_ret == -1) &amp;&amp;</div><div class='del'>-                    (replies[i].op_errno == ENODATA)) {</div><div class='del'>-                        *need_heal = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if ((replies[i].op_ret == -1) &amp;&amp; (replies[i].op_errno == ENODATA)) {</div><div class='add'>+            *need_heal = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (first_idx == -1) {</div><div class='del'>-			first_idx = i;</div><div class='del'>-			continue;</div><div class='del'>-		}</div><div class='add'>+        if (first_idx == -1) {</div><div class='add'>+            first_idx = i;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (replies[i].op_ret != replies[first_idx].op_ret) {</div><div class='del'>-			*need_heal = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (replies[i].op_ret != replies[first_idx].op_ret) {</div><div class='add'>+            *need_heal = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (gf_uuid_compare (replies[i].poststat.ia_gfid,</div><div class='del'>-				  replies[first_idx].poststat.ia_gfid)) {</div><div class='del'>-			*need_heal = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+        if (gf_uuid_compare(replies[i].poststat.ia_gfid,</div><div class='add'>+                            replies[first_idx].poststat.ia_gfid)) {</div><div class='add'>+            *need_heal = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref (inode);</div><div class='del'>-        if (replies)</div><div class='del'>-                afr_replies_wipe (replies, priv-&gt;child_count);</div><div class='del'>-	return 0;</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (replies)</div><div class='add'>+        afr_replies_wipe(replies, priv-&gt;child_count);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_selfheal_name (xlator_t *this, uuid_t pargfid, const char *bname,</div><div class='del'>-                   void *gfid_req, dict_t *xdata)</div><div class='add'>+afr_selfheal_name(xlator_t *this, uuid_t pargfid, const char *bname,</div><div class='add'>+                  void *gfid_req, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	inode_t *parent = NULL;</div><div class='del'>-	call_frame_t *frame = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	gf_boolean_t need_heal = _gf_false;</div><div class='del'>-</div><div class='del'>-	parent = afr_inode_find (this, pargfid);</div><div class='del'>-	if (!parent)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	frame = afr_frame_create (this, NULL);</div><div class='del'>-	if (!frame)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal_name_unlocked_inspect (frame, this, parent, pargfid,</div><div class='del'>-						  bname, &amp;need_heal);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	if (need_heal) {</div><div class='del'>-		ret = afr_selfheal_name_do (frame, this, parent, pargfid, bname,</div><div class='del'>-                                            gfid_req, xdata);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t need_heal = _gf_false;</div><div class='add'>+</div><div class='add'>+    parent = afr_inode_find(this, pargfid);</div><div class='add'>+    if (!parent)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    frame = afr_frame_create(this, NULL);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_name_unlocked_inspect(frame, this, parent, pargfid,</div><div class='add'>+                                             bname, &amp;need_heal);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (need_heal) {</div><div class='add'>+        ret = afr_selfheal_name_do(frame, this, parent, pargfid, bname,</div><div class='add'>+                                   gfid_req, xdata);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	if (parent)</div><div class='del'>-		inode_unref (parent);</div><div class='del'>-	if (frame)</div><div class='del'>-		AFR_STACK_DESTROY (frame);</div><div class='add'>+    if (parent)</div><div class='add'>+        inode_unref(parent);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c<br/>index 1f7ae7bb43d..0cf01a041b4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heald.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-self-heald.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-self-heald.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-self-heald.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "afr.h"</div><div class='ctx'> #include "afr-self-heal.h"</div><div class='ctx'> #include "afr-self-heald.h"</div><div class='hunk'>@@ -17,1378 +16,1334 @@</div><div class='ctx'> #include "afr-messages.h"</div><div class='ctx'> #include "byte-order.h"</div><div class='ctx'> </div><div class='del'>-#define SHD_INODE_LRU_LIMIT          2048</div><div class='del'>-#define AFR_EH_SPLIT_BRAIN_LIMIT     1024</div><div class='del'>-#define AFR_STATISTICS_HISTORY_SIZE    50</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define ASSERT_LOCAL(this, healer)				\</div><div class='del'>-	if (!afr_shd_is_subvol_local(this, healer-&gt;subvol)) {	\</div><div class='del'>-		healer-&gt;local = _gf_false;			\</div><div class='del'>-		if (safe_break (healer)) {			\</div><div class='del'>-			break;					\</div><div class='del'>-		} else {					\</div><div class='del'>-			continue;				\</div><div class='del'>-		}						\</div><div class='del'>-	} else {						\</div><div class='del'>-		healer-&gt;local = _gf_true;			\</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define NTH_INDEX_HEALER(this, n) &amp;((((afr_private_t *)this-&gt;private))-&gt;shd.index_healers[n])</div><div class='del'>-#define NTH_FULL_HEALER(this, n) &amp;((((afr_private_t *)this-&gt;private))-&gt;shd.full_healers[n])</div><div class='add'>+#define SHD_INODE_LRU_LIMIT 2048</div><div class='add'>+#define AFR_EH_SPLIT_BRAIN_LIMIT 1024</div><div class='add'>+#define AFR_STATISTICS_HISTORY_SIZE 50</div><div class='add'>+</div><div class='add'>+#define ASSERT_LOCAL(this, healer)                                             \</div><div class='add'>+    if (!afr_shd_is_subvol_local(this, healer-&gt;subvol)) {                      \</div><div class='add'>+        healer-&gt;local = _gf_false;                                             \</div><div class='add'>+        if (safe_break(healer)) {                                              \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            continue;                                                          \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } else {                                                                   \</div><div class='add'>+        healer-&gt;local = _gf_true;                                              \</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+#define NTH_INDEX_HEALER(this, n)                                              \</div><div class='add'>+    &amp;((((afr_private_t *)this-&gt;private))-&gt;shd.index_healers[n])</div><div class='add'>+#define NTH_FULL_HEALER(this, n)                                               \</div><div class='add'>+    &amp;((((afr_private_t *)this-&gt;private))-&gt;shd.full_healers[n])</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-afr_subvol_name (xlator_t *this, int subvol)</div><div class='add'>+afr_subvol_name(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	if (subvol &lt; 0 || subvol &gt; priv-&gt;child_count)</div><div class='del'>-		return NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (subvol &lt; 0 || subvol &gt; priv-&gt;child_count)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-	return priv-&gt;children[subvol]-&gt;name;</div><div class='add'>+    return priv-&gt;children[subvol]-&gt;name;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_destroy_crawl_event_data (void *data)</div><div class='add'>+afr_destroy_crawl_event_data(void *data)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_destroy_shd_event_data (void *data)</div><div class='add'>+afr_destroy_shd_event_data(void *data)</div><div class='ctx'> {</div><div class='del'>-	shd_event_t *shd_event = data;</div><div class='del'>-</div><div class='del'>-	if (!shd_event)</div><div class='del'>-		return;</div><div class='del'>-	GF_FREE (shd_event-&gt;path);</div><div class='add'>+    shd_event_t *shd_event = data;</div><div class='ctx'> </div><div class='add'>+    if (!shd_event)</div><div class='ctx'>         return;</div><div class='del'>-}</div><div class='add'>+    GF_FREE(shd_event-&gt;path);</div><div class='ctx'> </div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_shd_is_subvol_local (xlator_t *this, int subvol)</div><div class='add'>+afr_shd_is_subvol_local(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv    = NULL;</div><div class='del'>-	gf_boolean_t  is_local = _gf_false;</div><div class='del'>-        loc_t         loc      = {0, };</div><div class='del'>-</div><div class='del'>-        loc.inode = this-&gt;itable-&gt;root;</div><div class='del'>-        gf_uuid_copy (loc.gfid, loc.inode-&gt;gfid);</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        syncop_is_subvol_local(priv-&gt;children[subvol], &amp;loc, &amp;is_local);</div><div class='del'>-        return is_local;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t is_local = _gf_false;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    loc.inode = this-&gt;itable-&gt;root;</div><div class='add'>+    gf_uuid_copy(loc.gfid, loc.inode-&gt;gfid);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    syncop_is_subvol_local(priv-&gt;children[subvol], &amp;loc, &amp;is_local);</div><div class='add'>+    return is_local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-__afr_shd_healer_wait (struct subvol_healer *healer)</div><div class='add'>+__afr_shd_healer_wait(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	struct timespec wait_till = {0, };</div><div class='del'>-	int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    struct timespec wait_till = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	priv = healer-&gt;this-&gt;private;</div><div class='add'>+    priv = healer-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='ctx'> disabled_loop:</div><div class='del'>-	wait_till.tv_sec = time (NULL) + priv-&gt;shd.timeout;</div><div class='add'>+    wait_till.tv_sec = time(NULL) + priv-&gt;shd.timeout;</div><div class='ctx'> </div><div class='del'>-	while (!healer-&gt;rerun) {</div><div class='del'>-		ret = pthread_cond_timedwait (&amp;healer-&gt;cond,</div><div class='del'>-					      &amp;healer-&gt;mutex,</div><div class='del'>-					      &amp;wait_till);</div><div class='del'>-		if (ret == ETIMEDOUT)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='add'>+    while (!healer-&gt;rerun) {</div><div class='add'>+        ret = pthread_cond_timedwait(&amp;healer-&gt;cond, &amp;healer-&gt;mutex, &amp;wait_till);</div><div class='add'>+        if (ret == ETIMEDOUT)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = healer-&gt;rerun;</div><div class='del'>-	healer-&gt;rerun = 0;</div><div class='add'>+    ret = healer-&gt;rerun;</div><div class='add'>+    healer-&gt;rerun = 0;</div><div class='ctx'> </div><div class='del'>-	if (!priv-&gt;shd.enabled)</div><div class='del'>-		goto disabled_loop;</div><div class='add'>+    if (!priv-&gt;shd.enabled)</div><div class='add'>+        goto disabled_loop;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_healer_wait (struct subvol_healer *healer)</div><div class='add'>+afr_shd_healer_wait(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		ret = __afr_shd_healer_wait (healer);</div><div class='del'>-	}</div><div class='del'>-	pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = __afr_shd_healer_wait(healer);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-safe_break (struct subvol_healer *healer)</div><div class='add'>+safe_break(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-	gf_boolean_t ret = _gf_false;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-	pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		if (healer-&gt;rerun)</div><div class='del'>-			goto unlock;</div><div class='add'>+    pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (healer-&gt;rerun)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-		healer-&gt;running = _gf_false;</div><div class='del'>-		ret = _gf_true;</div><div class='del'>-	}</div><div class='add'>+        healer-&gt;running = _gf_false;</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_t *</div><div class='del'>-afr_shd_inode_find (xlator_t *this, xlator_t *subvol, uuid_t gfid)</div><div class='add'>+afr_shd_inode_find(xlator_t *this, xlator_t *subvol, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        int          ret       = 0;</div><div class='del'>-        uint64_t     val       = IA_INVAL;</div><div class='del'>-        dict_t       *xdata    = NULL;</div><div class='del'>-        dict_t       *rsp_dict = NULL;</div><div class='del'>-        inode_t      *inode    = NULL;</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (xdata, GF_INDEX_IA_TYPE_GET_REQ, 1);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t val = IA_INVAL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int8(xdata, GF_INDEX_IA_TYPE_GET_REQ, 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_inode_find(this, subvol, gfid, &amp;inode, xdata, &amp;rsp_dict);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (rsp_dict) {</div><div class='add'>+        ret = dict_get_uint64(rsp_dict, GF_INDEX_IA_TYPE_GET_RSP, &amp;val);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-	ret = syncop_inode_find (this, subvol, gfid, &amp;inode,</div><div class='del'>-                                 xdata, &amp;rsp_dict);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        if (rsp_dict) {</div><div class='del'>-                ret = dict_get_uint64 (rsp_dict, GF_INDEX_IA_TYPE_GET_RSP,</div><div class='del'>-                                       &amp;val);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = inode_ctx_set2 (inode, subvol, 0, &amp;val);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = inode_ctx_set2(inode, subvol, 0, &amp;val);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; inode) {</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-                inode = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='del'>-	return inode;</div><div class='add'>+    if (ret &amp;&amp; inode) {</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+        inode = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-inode_t*</div><div class='del'>-afr_shd_index_inode (xlator_t *this, xlator_t *subvol, char *vgfid)</div><div class='add'>+inode_t *</div><div class='add'>+afr_shd_index_inode(xlator_t *this, xlator_t *subvol, char *vgfid)</div><div class='ctx'> {</div><div class='del'>-	loc_t rootloc = {0, };</div><div class='del'>-	inode_t *inode = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	dict_t *xattr = NULL;</div><div class='del'>-	void *index_gfid = NULL;</div><div class='add'>+    loc_t rootloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    void *index_gfid = NULL;</div><div class='ctx'> </div><div class='del'>-	rootloc.inode = inode_ref (this-&gt;itable-&gt;root);</div><div class='del'>-	gf_uuid_copy (rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='add'>+    rootloc.inode = inode_ref(this-&gt;itable-&gt;root);</div><div class='add'>+    gf_uuid_copy(rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	ret = syncop_getxattr (subvol, &amp;rootloc, &amp;xattr,</div><div class='del'>-			       vgfid, NULL, NULL);</div><div class='del'>-	if (ret || !xattr) {</div><div class='del'>-		errno = -ret;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;rootloc, &amp;xattr, vgfid, NULL, NULL);</div><div class='add'>+    if (ret || !xattr) {</div><div class='add'>+        errno = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = dict_get_ptr (xattr, vgfid, &amp;index_gfid);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = dict_get_ptr(xattr, vgfid, &amp;index_gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "%s dir gfid for %s: %s",</div><div class='del'>-	              vgfid, subvol-&gt;name, uuid_utoa (index_gfid));</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "%s dir gfid for %s: %s", vgfid, subvol-&gt;name,</div><div class='add'>+                 uuid_utoa(index_gfid));</div><div class='ctx'> </div><div class='del'>-	inode = afr_shd_inode_find (this, subvol, index_gfid);</div><div class='add'>+    inode = afr_shd_inode_find(this, subvol, index_gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;rootloc);</div><div class='add'>+    loc_wipe(&amp;rootloc);</div><div class='ctx'> </div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-	return inode;</div><div class='add'>+    return inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_index_purge (xlator_t *subvol, inode_t *inode, char *name,</div><div class='del'>-                     ia_type_t type)</div><div class='add'>+afr_shd_index_purge(xlator_t *subvol, inode_t *inode, char *name,</div><div class='add'>+                    ia_type_t type)</div><div class='ctx'> {</div><div class='del'>-	int    ret = 0;</div><div class='del'>-	loc_t  loc = {0,};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	loc.parent = inode_ref (inode);</div><div class='del'>-	loc.name = name;</div><div class='add'>+    loc.parent = inode_ref(inode);</div><div class='add'>+    loc.name = name;</div><div class='ctx'> </div><div class='del'>-        if (IA_ISDIR (type))</div><div class='del'>-                ret = syncop_rmdir (subvol, &amp;loc, 1, NULL, NULL);</div><div class='del'>-        else</div><div class='del'>-                ret = syncop_unlink (subvol, &amp;loc, NULL, NULL);</div><div class='add'>+    if (IA_ISDIR(type))</div><div class='add'>+        ret = syncop_rmdir(subvol, &amp;loc, 1, NULL, NULL);</div><div class='add'>+    else</div><div class='add'>+        ret = syncop_unlink(subvol, &amp;loc, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_shd_zero_xattrop (xlator_t *this, uuid_t gfid)</div><div class='add'>+afr_shd_zero_xattrop(xlator_t *this, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        call_frame_t *frame = NULL;</div><div class='del'>-        inode_t *inode = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        dict_t  *xattr = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int raw[AFR_NUM_CHANGE_LOGS] = {0};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        frame = afr_frame_create (this, NULL);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='del'>-        inode = afr_inode_find (this, gfid);</div><div class='del'>-        if (!inode)</div><div class='del'>-                goto out;</div><div class='del'>-        xattr = dict_new();</div><div class='del'>-        if (!xattr)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_static_bin (xattr, AFR_DIRTY, raw,</div><div class='del'>-                                   sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int raw[AFR_NUM_CHANGE_LOGS] = {0};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    frame = afr_frame_create(this, NULL);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='add'>+    inode = afr_inode_find(this, gfid);</div><div class='add'>+    if (!inode)</div><div class='add'>+        goto out;</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_static_bin(xattr, AFR_DIRTY, raw,</div><div class='add'>+                              sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        ret = dict_set_static_bin(xattr, priv-&gt;pending_key[i], raw,</div><div class='add'>+                                  sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                ret = dict_set_static_bin (xattr, priv-&gt;pending_key[i], raw,</div><div class='del'>-                                           sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Send xattrop to all bricks. Doing a lookup to see if bricks are up or</div><div class='del'>-        * has valid repies for this gfid seems a bit of an overkill.*/</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                afr_selfheal_post_op (frame, this, inode, i, xattr, NULL);</div><div class='add'>+    /*Send xattrop to all bricks. Doing a lookup to see if bricks are up or</div><div class='add'>+     * has valid repies for this gfid seems a bit of an overkill.*/</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        afr_selfheal_post_op(frame, this, inode, i, xattr, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='del'>-        if (inode)</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return;</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_selfheal_name (struct subvol_healer *healer, int child, uuid_t parent,</div><div class='del'>-		       const char *bname)</div><div class='add'>+afr_shd_selfheal_name(struct subvol_healer *healer, int child, uuid_t parent,</div><div class='add'>+                      const char *bname)</div><div class='ctx'> {</div><div class='del'>-	int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_name (THIS, parent, bname, NULL, NULL);</div><div class='add'>+    ret = afr_selfheal_name(THIS, parent, bname, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_selfheal (struct subvol_healer *healer, int child, uuid_t gfid)</div><div class='add'>+afr_shd_selfheal(struct subvol_healer *healer, int child, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-	eh_t *eh = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_self_heald_t *shd = NULL;</div><div class='del'>-	shd_event_t *shd_event = NULL;</div><div class='del'>-	char *path = NULL;</div><div class='del'>-	xlator_t *subvol = NULL;</div><div class='del'>-	xlator_t *this = NULL;</div><div class='del'>-	crawl_event_t *crawl_event = NULL;</div><div class='del'>-</div><div class='del'>-	this = healer-&gt;this;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	shd = &amp;priv-&gt;shd;</div><div class='del'>-	crawl_event = &amp;healer-&gt;crawl_event;</div><div class='del'>-</div><div class='del'>-	subvol = priv-&gt;children[child];</div><div class='del'>-</div><div class='del'>-        //If this fails with ENOENT/ESTALE index is stale</div><div class='del'>-        ret = syncop_gfid_to_path (this-&gt;itable, subvol, gfid, &amp;path);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-	ret = afr_selfheal (this, gfid);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ret == -EIO) {</div><div class='del'>-                        eh = shd-&gt;split_brain;</div><div class='del'>-                        crawl_event-&gt;split_brain_count++;</div><div class='del'>-                } else if (ret &lt; 0) {</div><div class='del'>-                        crawl_event-&gt;heal_failed_count++;</div><div class='del'>-                } else if (ret == 0) {</div><div class='del'>-                        crawl_event-&gt;healed_count++;</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    eh_t *eh = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_self_heald_t *shd = NULL;</div><div class='add'>+    shd_event_t *shd_event = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    crawl_event_t *crawl_event = NULL;</div><div class='add'>+</div><div class='add'>+    this = healer-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    shd = &amp;priv-&gt;shd;</div><div class='add'>+    crawl_event = &amp;healer-&gt;crawl_event;</div><div class='add'>+</div><div class='add'>+    subvol = priv-&gt;children[child];</div><div class='add'>+</div><div class='add'>+    // If this fails with ENOENT/ESTALE index is stale</div><div class='add'>+    ret = syncop_gfid_to_path(this-&gt;itable, subvol, gfid, &amp;path);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal(this, gfid);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ret == -EIO) {</div><div class='add'>+            eh = shd-&gt;split_brain;</div><div class='add'>+            crawl_event-&gt;split_brain_count++;</div><div class='add'>+        } else if (ret &lt; 0) {</div><div class='add'>+            crawl_event-&gt;heal_failed_count++;</div><div class='add'>+        } else if (ret == 0) {</div><div class='add'>+            crawl_event-&gt;healed_count++;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-	if (eh) {</div><div class='del'>-		shd_event = GF_CALLOC (1, sizeof(*shd_event),</div><div class='del'>-				       gf_afr_mt_shd_event_t);</div><div class='del'>-		if (!shd_event)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (eh) {</div><div class='add'>+        shd_event = GF_CALLOC(1, sizeof(*shd_event), gf_afr_mt_shd_event_t);</div><div class='add'>+        if (!shd_event)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-		shd_event-&gt;child = child;</div><div class='del'>-		shd_event-&gt;path = path;</div><div class='add'>+        shd_event-&gt;child = child;</div><div class='add'>+        shd_event-&gt;path = path;</div><div class='ctx'> </div><div class='del'>-		if (eh_save_history (eh, shd_event) &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (eh_save_history(eh, shd_event) &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                shd_event = NULL;</div><div class='del'>-                path = NULL;</div><div class='del'>-	}</div><div class='add'>+        shd_event = NULL;</div><div class='add'>+        path = NULL;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (shd_event);</div><div class='del'>-        GF_FREE (path);</div><div class='del'>-	return ret;</div><div class='add'>+    GF_FREE(shd_event);</div><div class='add'>+    GF_FREE(path);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_shd_sweep_prepare (struct subvol_healer *healer)</div><div class='add'>+afr_shd_sweep_prepare(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-	crawl_event_t *event = NULL;</div><div class='add'>+    crawl_event_t *event = NULL;</div><div class='ctx'> </div><div class='del'>-	event = &amp;healer-&gt;crawl_event;</div><div class='add'>+    event = &amp;healer-&gt;crawl_event;</div><div class='ctx'> </div><div class='del'>-	event-&gt;healed_count = 0;</div><div class='del'>-	event-&gt;split_brain_count = 0;</div><div class='del'>-	event-&gt;heal_failed_count = 0;</div><div class='add'>+    event-&gt;healed_count = 0;</div><div class='add'>+    event-&gt;split_brain_count = 0;</div><div class='add'>+    event-&gt;heal_failed_count = 0;</div><div class='ctx'> </div><div class='del'>-	time (&amp;event-&gt;start_time);</div><div class='del'>-	event-&gt;end_time = 0;</div><div class='add'>+    time(&amp;event-&gt;start_time);</div><div class='add'>+    event-&gt;end_time = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_shd_sweep_done (struct subvol_healer *healer)</div><div class='add'>+afr_shd_sweep_done(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-	crawl_event_t *event = NULL;</div><div class='del'>-	crawl_event_t *history = NULL;</div><div class='del'>-	afr_self_heald_t *shd = NULL;</div><div class='add'>+    crawl_event_t *event = NULL;</div><div class='add'>+    crawl_event_t *history = NULL;</div><div class='add'>+    afr_self_heald_t *shd = NULL;</div><div class='ctx'> </div><div class='del'>-	event = &amp;healer-&gt;crawl_event;</div><div class='del'>-	shd = &amp;(((afr_private_t *)healer-&gt;this-&gt;private)-&gt;shd);</div><div class='add'>+    event = &amp;healer-&gt;crawl_event;</div><div class='add'>+    shd = &amp;(((afr_private_t *)healer-&gt;this-&gt;private)-&gt;shd);</div><div class='ctx'> </div><div class='del'>-	time (&amp;event-&gt;end_time);</div><div class='del'>-	history = memdup (event, sizeof (*event));</div><div class='del'>-	event-&gt;start_time = 0;</div><div class='add'>+    time(&amp;event-&gt;end_time);</div><div class='add'>+    history = memdup(event, sizeof(*event));</div><div class='add'>+    event-&gt;start_time = 0;</div><div class='ctx'> </div><div class='del'>-	if (!history)</div><div class='del'>-		return;</div><div class='add'>+    if (!history)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-	if (eh_save_history (shd-&gt;statistics[healer-&gt;subvol], history) &lt; 0)</div><div class='del'>-		GF_FREE (history);</div><div class='add'>+    if (eh_save_history(shd-&gt;statistics[healer-&gt;subvol], history) &lt; 0)</div><div class='add'>+        GF_FREE(history);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_index_heal (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                    void *data)</div><div class='add'>+afr_shd_index_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                   void *data)</div><div class='ctx'> {</div><div class='del'>-        struct subvol_healer *healer = data;</div><div class='del'>-        afr_private_t        *priv   = NULL;</div><div class='del'>-        uuid_t               gfid    = {0};</div><div class='del'>-        int                  ret     = 0;</div><div class='del'>-        uint64_t             val     = IA_INVAL;</div><div class='add'>+    struct subvol_healer *healer = data;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uuid_t gfid = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t val = IA_INVAL;</div><div class='ctx'> </div><div class='del'>-        priv = healer-&gt;this-&gt;private;</div><div class='del'>-        if (!priv-&gt;shd.enabled)</div><div class='del'>-                return -EBUSY;</div><div class='add'>+    priv = healer-&gt;this-&gt;private;</div><div class='add'>+    if (!priv-&gt;shd.enabled)</div><div class='add'>+        return -EBUSY;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (healer-&gt;this-&gt;name, 0, "got entry: %s from %s",</div><div class='del'>-                      entry-&gt;d_name, priv-&gt;children[healer-&gt;subvol]-&gt;name);</div><div class='add'>+    gf_msg_debug(healer-&gt;this-&gt;name, 0, "got entry: %s from %s", entry-&gt;d_name,</div><div class='add'>+                 priv-&gt;children[healer-&gt;subvol]-&gt;name);</div><div class='ctx'> </div><div class='del'>-        ret = gf_uuid_parse (entry-&gt;d_name, gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return 0;</div><div class='add'>+    ret = gf_uuid_parse(entry-&gt;d_name, gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        inode_ctx_get2 (parent-&gt;inode, subvol, NULL, &amp;val);</div><div class='add'>+    inode_ctx_get2(parent-&gt;inode, subvol, NULL, &amp;val);</div><div class='ctx'> </div><div class='del'>-        ret = afr_shd_selfheal (healer, healer-&gt;subvol, gfid);</div><div class='add'>+    ret = afr_shd_selfheal(healer, healer-&gt;subvol, gfid);</div><div class='ctx'> </div><div class='del'>-        if (ret == -ENOENT || ret == -ESTALE)</div><div class='del'>-                afr_shd_index_purge (subvol, parent-&gt;inode, entry-&gt;d_name, val);</div><div class='add'>+    if (ret == -ENOENT || ret == -ESTALE)</div><div class='add'>+        afr_shd_index_purge(subvol, parent-&gt;inode, entry-&gt;d_name, val);</div><div class='ctx'> </div><div class='del'>-        if (ret == 2)</div><div class='del'>-                /* If bricks crashed in pre-op after creating indices/xattrop</div><div class='del'>-                 * link but before setting afr changelogs, we end up with stale</div><div class='del'>-                 * xattrop links but zero changelogs. Remove such entries by</div><div class='del'>-                 * sending a post-op with zero changelogs.</div><div class='del'>-                 */</div><div class='del'>-                afr_shd_zero_xattrop (healer-&gt;this, gfid);</div><div class='add'>+    if (ret == 2)</div><div class='add'>+        /* If bricks crashed in pre-op after creating indices/xattrop</div><div class='add'>+         * link but before setting afr changelogs, we end up with stale</div><div class='add'>+         * xattrop links but zero changelogs. Remove such entries by</div><div class='add'>+         * sending a post-op with zero changelogs.</div><div class='add'>+         */</div><div class='add'>+        afr_shd_zero_xattrop(healer-&gt;this, gfid);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_index_sweep (struct subvol_healer *healer, char *vgfid)</div><div class='add'>+afr_shd_index_sweep(struct subvol_healer *healer, char *vgfid)</div><div class='ctx'> {</div><div class='del'>-	loc_t         loc     = {0};</div><div class='del'>-	afr_private_t *priv   = NULL;</div><div class='del'>-	int           ret     = 0;</div><div class='del'>-	xlator_t      *subvol = NULL;</div><div class='del'>-	dict_t        *xdata  = NULL;</div><div class='del'>-        call_frame_t  *frame  = NULL;</div><div class='del'>-</div><div class='del'>-	priv = healer-&gt;this-&gt;private;</div><div class='del'>-	subvol = priv-&gt;children[healer-&gt;subvol];</div><div class='del'>-</div><div class='del'>-        frame = afr_frame_create (healer-&gt;this, &amp;ret);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                ret = -ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	loc.inode = afr_shd_index_inode (healer-&gt;this, subvol, vgfid);</div><div class='del'>-	if (!loc.inode) {</div><div class='del'>-	        gf_msg (healer-&gt;this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        0, AFR_MSG_INDEX_DIR_GET_FAILED,</div><div class='del'>-		        "unable to get index-dir on %s", subvol-&gt;name);</div><div class='del'>-		ret = -errno;</div><div class='del'>-	        goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata || dict_set_int32 (xdata, "get-gfid-type", 1)) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_mt_dir_scan (frame, subvol, &amp;loc, GF_CLIENT_PID_SELF_HEALD,</div><div class='del'>-                                  healer, afr_shd_index_heal, xdata,</div><div class='del'>-                                 priv-&gt;shd.max_threads, priv-&gt;shd.wait_qlength);</div><div class='del'>-</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ret = healer-&gt;crawl_event.healed_count;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+</div><div class='add'>+    priv = healer-&gt;this-&gt;private;</div><div class='add'>+    subvol = priv-&gt;children[healer-&gt;subvol];</div><div class='add'>+</div><div class='add'>+    frame = afr_frame_create(healer-&gt;this, &amp;ret);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        ret = -ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc.inode = afr_shd_index_inode(healer-&gt;this, subvol, vgfid);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        gf_msg(healer-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               AFR_MSG_INDEX_DIR_GET_FAILED, "unable to get index-dir on %s",</div><div class='add'>+               subvol-&gt;name);</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata || dict_set_int32(xdata, "get-gfid-type", 1)) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_mt_dir_scan(frame, subvol, &amp;loc, GF_CLIENT_PID_SELF_HEALD,</div><div class='add'>+                             healer, afr_shd_index_heal, xdata,</div><div class='add'>+                             priv-&gt;shd.max_threads, priv-&gt;shd.wait_qlength);</div><div class='add'>+</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ret = healer-&gt;crawl_event.healed_count;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        if (frame)</div><div class='del'>-                AFR_STACK_DESTROY (frame);</div><div class='del'>-	return ret;</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (frame)</div><div class='add'>+        AFR_STACK_DESTROY(frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_index_sweep_all (struct subvol_healer *healer)</div><div class='add'>+afr_shd_index_sweep_all(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-        int            ret    = 0;</div><div class='del'>-        int            count  = 0;</div><div class='del'>-</div><div class='del'>-        ret = afr_shd_index_sweep (healer, GF_XATTROP_INDEX_GFID);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        count = ret;</div><div class='del'>-</div><div class='del'>-        ret = afr_shd_index_sweep (healer, GF_XATTROP_DIRTY_GFID);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        count += ret;</div><div class='del'>-</div><div class='del'>-        ret = afr_shd_index_sweep (healer, GF_XATTROP_ENTRY_CHANGES_GFID);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        count += ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    ret = afr_shd_index_sweep(healer, GF_XATTROP_INDEX_GFID);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    count = ret;</div><div class='add'>+</div><div class='add'>+    ret = afr_shd_index_sweep(healer, GF_XATTROP_DIRTY_GFID);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    count += ret;</div><div class='add'>+</div><div class='add'>+    ret = afr_shd_index_sweep(healer, GF_XATTROP_ENTRY_CHANGES_GFID);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    count += ret;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                return ret;</div><div class='del'>-        else</div><div class='del'>-                return count;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return ret;</div><div class='add'>+    else</div><div class='add'>+        return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_full_heal (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                   void *data)</div><div class='add'>+afr_shd_full_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                  void *data)</div><div class='ctx'> {</div><div class='del'>-        struct subvol_healer *healer = data;</div><div class='del'>-        xlator_t             *this   = healer-&gt;this;</div><div class='del'>-        afr_private_t        *priv   = NULL;</div><div class='add'>+    struct subvol_healer *healer = data;</div><div class='add'>+    xlator_t *this = healer-&gt;this;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;shd.enabled)</div><div class='del'>-                return -EBUSY;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;shd.enabled)</div><div class='add'>+        return -EBUSY;</div><div class='ctx'> </div><div class='del'>-        afr_shd_selfheal_name (healer, healer-&gt;subvol,</div><div class='del'>-                               parent-&gt;inode-&gt;gfid, entry-&gt;d_name);</div><div class='add'>+    afr_shd_selfheal_name(healer, healer-&gt;subvol, parent-&gt;inode-&gt;gfid,</div><div class='add'>+                          entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-        afr_shd_selfheal (healer, healer-&gt;subvol, entry-&gt;d_stat.ia_gfid);</div><div class='add'>+    afr_shd_selfheal(healer, healer-&gt;subvol, entry-&gt;d_stat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_shd_full_sweep (struct subvol_healer *healer, inode_t *inode)</div><div class='add'>+afr_shd_full_sweep(struct subvol_healer *healer, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        loc_t          loc  = {0};</div><div class='del'>-</div><div class='del'>-        priv = healer-&gt;this-&gt;private;</div><div class='del'>-        loc.inode = inode;</div><div class='del'>-        return syncop_ftw (priv-&gt;children[healer-&gt;subvol], &amp;loc,</div><div class='del'>-                           GF_CLIENT_PID_SELF_HEALD, healer,</div><div class='del'>-                           afr_shd_full_heal);</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+</div><div class='add'>+    priv = healer-&gt;this-&gt;private;</div><div class='add'>+    loc.inode = inode;</div><div class='add'>+    return syncop_ftw(priv-&gt;children[healer-&gt;subvol], &amp;loc,</div><div class='add'>+                      GF_CLIENT_PID_SELF_HEALD, healer, afr_shd_full_heal);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_shd_ta_set_xattrs (xlator_t *this, loc_t *loc, dict_t **xdata,</div><div class='del'>-                       int healer)</div><div class='add'>+afr_shd_ta_set_xattrs(xlator_t *this, loc_t *loc, dict_t **xdata, int healer)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv                          = NULL;</div><div class='del'>-        dict_t          *xattr                         = NULL;</div><div class='del'>-        struct gf_flock  flock                         = {0, };</div><div class='del'>-        gf_boolean_t     need_xattrop                  = _gf_false;</div><div class='del'>-        void            *pending_raw                   = NULL;</div><div class='del'>-        int             *raw                           = NULL;</div><div class='del'>-        int              pending[AFR_NUM_CHANGE_LOGS]  = {0,};</div><div class='del'>-        int              i                             = 0;</div><div class='del'>-        int              j                             = 0;</div><div class='del'>-        int              val                           = 0;</div><div class='del'>-        int              ret                           = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                goto out;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t need_xattrop = _gf_false;</div><div class='add'>+    void *pending_raw = NULL;</div><div class='add'>+    int *raw = NULL;</div><div class='add'>+    int pending[AFR_NUM_CHANGE_LOGS] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int val = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        raw = GF_CALLOC(AFR_NUM_CHANGE_LOGS, sizeof(int), gf_afr_mt_int32_t);</div><div class='add'>+        if (!raw) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                raw = GF_CALLOC (AFR_NUM_CHANGE_LOGS, sizeof(int),</div><div class='del'>-                                 gf_afr_mt_int32_t);</div><div class='del'>-                if (!raw) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_ptr (*xdata, priv-&gt;pending_key[i], &amp;pending_raw);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                AFR_MSG_DICT_GET_FAILED, "Error getting value "</div><div class='del'>-                                "of pending key %s", priv-&gt;pending_key[i]);</div><div class='del'>-                        GF_FREE (raw);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                memcpy (pending, pending_raw, sizeof (pending));</div><div class='del'>-                for (j = 0; j &lt; AFR_NUM_CHANGE_LOGS; j++) {</div><div class='del'>-                        val = ntoh32 (pending[j]);</div><div class='del'>-                        if (val) {</div><div class='del'>-                                if (i == healer) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                                AFR_MSG_THIN_ARB, "I am "</div><div class='del'>-                                                "not the good shd. Skipping. "</div><div class='del'>-                                                "SHD = %d.", healer);</div><div class='del'>-                                        GF_FREE (raw);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                need_xattrop = _gf_true;</div><div class='del'>-                                raw[j] = hton32 (-val);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_ptr(*xdata, priv-&gt;pending_key[i], &amp;pending_raw);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_GET_FAILED,</div><div class='add'>+                   "Error getting value "</div><div class='add'>+                   "of pending key %s",</div><div class='add'>+                   priv-&gt;pending_key[i]);</div><div class='add'>+            GF_FREE(raw);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_bin (xattr, priv-&gt;pending_key[i], raw,</div><div class='del'>-                                    AFR_NUM_CHANGE_LOGS * sizeof (int));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        GF_FREE (raw);</div><div class='del'>-                        goto out;</div><div class='add'>+        memcpy(pending, pending_raw, sizeof(pending));</div><div class='add'>+        for (j = 0; j &lt; AFR_NUM_CHANGE_LOGS; j++) {</div><div class='add'>+            val = ntoh32(pending[j]);</div><div class='add'>+            if (val) {</div><div class='add'>+                if (i == healer) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_THIN_ARB,</div><div class='add'>+                           "I am "</div><div class='add'>+                           "not the good shd. Skipping. "</div><div class='add'>+                           "SHD = %d.",</div><div class='add'>+                           healer);</div><div class='add'>+                    GF_FREE(raw);</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                memset (pending, 0, sizeof (pending));</div><div class='add'>+                need_xattrop = _gf_true;</div><div class='add'>+                raw[j] = hton32(-val);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!need_xattrop) {</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dict_set_bin(xattr, priv-&gt;pending_key[i], raw,</div><div class='add'>+                           AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='add'>+        if (ret) {</div><div class='add'>+            GF_FREE(raw);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-        flock.l_start = 0;</div><div class='del'>-        flock.l_len = 0;</div><div class='add'>+        memset(pending, 0, sizeof(pending));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_NOTIFY, loc, F_SETLKW, &amp;flock,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!need_xattrop) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_xattrop (priv-&gt;children[THIN_ARBITER_BRICK_INDEX], loc,</div><div class='del'>-                              GF_XATTROP_ADD_ARRAY, xattr, NULL, NULL, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Xattrop failed.");</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = 0;</div><div class='add'>+    flock.l_len = 0;</div><div class='add'>+</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_NOTIFY, loc, F_SETLKW, &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_xattrop(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], loc,</div><div class='add'>+                         GF_XATTROP_ADD_ARRAY, xattr, NULL, NULL, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Xattrop failed.");</div><div class='ctx'> </div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='del'>-        syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                        AFR_TA_DOM_NOTIFY, loc, F_SETLKW, &amp;flock, NULL, NULL);</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], AFR_TA_DOM_NOTIFY,</div><div class='add'>+                   loc, F_SETLKW, &amp;flock, NULL, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_shd_ta_get_xattrs (xlator_t *this, loc_t *loc, dict_t **xdata)</div><div class='add'>+afr_shd_ta_get_xattrs(xlator_t *this, loc_t *loc, dict_t **xdata)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t   *priv   = NULL;</div><div class='del'>-        dict_t          *xattr  = NULL;</div><div class='del'>-        struct iatt      stbuf  = {0,};</div><div class='del'>-        int             *raw    = NULL;</div><div class='del'>-	int              ret    = 0;</div><div class='del'>-        int              i      = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        loc-&gt;parent = inode_ref (this-&gt;itable-&gt;root);</div><div class='del'>-        gf_uuid_copy (loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='del'>-        loc-&gt;name = priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX];</div><div class='del'>-        loc-&gt;inode = inode_new (loc-&gt;parent-&gt;table);</div><div class='del'>-        if (!loc-&gt;inode) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (priv-&gt;children[THIN_ARBITER_BRICK_INDEX], loc,</div><div class='del'>-                             &amp;stbuf, 0, 0, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed lookup on file %s.", loc-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (priv-&gt;ta_gfid, stbuf.ia_gfid);</div><div class='del'>-        gf_uuid_copy (loc-&gt;gfid, priv-&gt;ta_gfid);</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_GET_FAILED,</div><div class='del'>-                        "Failed to create dict.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                raw = GF_CALLOC (AFR_NUM_CHANGE_LOGS, sizeof(int),</div><div class='del'>-                                 gf_afr_mt_int32_t);</div><div class='del'>-                if (!raw) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_bin (xattr, priv-&gt;pending_key[i], raw,</div><div class='del'>-                                    AFR_NUM_CHANGE_LOGS * sizeof (int));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        GF_FREE (raw);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int *raw = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    loc-&gt;parent = inode_ref(this-&gt;itable-&gt;root);</div><div class='add'>+    gf_uuid_copy(loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='add'>+    loc-&gt;name = priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX];</div><div class='add'>+    loc-&gt;inode = inode_new(loc-&gt;parent-&gt;table);</div><div class='add'>+    if (!loc-&gt;inode) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], loc, &amp;stbuf,</div><div class='add'>+                        0, 0, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed lookup on file %s.", loc-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(priv-&gt;ta_gfid, stbuf.ia_gfid);</div><div class='add'>+    gf_uuid_copy(loc-&gt;gfid, priv-&gt;ta_gfid);</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_GET_FAILED,</div><div class='add'>+               "Failed to create dict.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        raw = GF_CALLOC(AFR_NUM_CHANGE_LOGS, sizeof(int), gf_afr_mt_int32_t);</div><div class='add'>+        if (!raw) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_xattrop (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              loc, GF_XATTROP_ADD_ARRAY, xattr, NULL, xdata,</div><div class='del'>-                              NULL);</div><div class='add'>+        ret = dict_set_bin(xattr, priv-&gt;pending_key[i], raw,</div><div class='add'>+                           AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Xattrop failed.");</div><div class='del'>-                goto out;</div><div class='add'>+            GF_FREE(raw);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        if (!(*xdata))</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_GET_FAILED,</div><div class='del'>-                        "Xdata response is empty.");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_xattrop(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], loc,</div><div class='add'>+                         GF_XATTROP_ADD_ARRAY, xattr, NULL, xdata, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Xattrop failed.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!(*xdata))</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_GET_FAILED,</div><div class='add'>+               "Xdata response is empty.");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-afr_shd_index_healer (void *data)</div><div class='add'>+afr_shd_index_healer(void *data)</div><div class='ctx'> {</div><div class='del'>-	struct subvol_healer *healer = NULL;</div><div class='del'>-	xlator_t *this = NULL;</div><div class='del'>-	int ret = 0;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        loc_t loc = {0, };</div><div class='del'>-</div><div class='del'>-	healer = data;</div><div class='del'>-	THIS = this = healer-&gt;this;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	for (;;) {</div><div class='del'>-		afr_shd_healer_wait (healer);</div><div class='del'>-</div><div class='del'>-		ASSERT_LOCAL(this, healer);</div><div class='del'>-		priv-&gt;local[healer-&gt;subvol] = healer-&gt;local;</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;thin_arbiter_count) {</div><div class='del'>-                        loc_wipe (&amp;loc);</div><div class='del'>-                        afr_shd_ta_get_xattrs (this, &amp;loc, &amp;xdata);</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    struct subvol_healer *healer = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    healer = data;</div><div class='add'>+    THIS = this = healer-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        afr_shd_healer_wait(healer);</div><div class='add'>+</div><div class='add'>+        ASSERT_LOCAL(this, healer);</div><div class='add'>+        priv-&gt;local[healer-&gt;subvol] = healer-&gt;local;</div><div class='add'>+</div><div class='add'>+        if (priv-&gt;thin_arbiter_count) {</div><div class='add'>+            loc_wipe(&amp;loc);</div><div class='add'>+            afr_shd_ta_get_xattrs(this, &amp;loc, &amp;xdata);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		do {</div><div class='del'>-		        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-		                      "starting index sweep on subvol %s",</div><div class='del'>-			              afr_subvol_name (this, healer-&gt;subvol));</div><div class='del'>-</div><div class='del'>-			afr_shd_sweep_prepare (healer);</div><div class='del'>-</div><div class='del'>-                        ret = afr_shd_index_sweep_all (healer);</div><div class='del'>-</div><div class='del'>-			afr_shd_sweep_done (healer);</div><div class='del'>-			/*</div><div class='del'>-			  As long as at least one gfid was</div><div class='del'>-			  healed, keep retrying. We may have</div><div class='del'>-			  just healed a directory and thereby</div><div class='del'>-			  created entries for other gfids which</div><div class='del'>-			  could not be healed thus far.</div><div class='del'>-			*/</div><div class='del'>-</div><div class='del'>-		        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-			              "finished index sweep on subvol %s",</div><div class='del'>-			              afr_subvol_name (this, healer-&gt;subvol));</div><div class='del'>-			/*</div><div class='del'>-			  Give a pause before retrying to avoid a busy loop</div><div class='del'>-			  in case the only entry in index is because of</div><div class='del'>-			  an ongoing I/O.</div><div class='del'>-			*/</div><div class='del'>-			sleep (1);</div><div class='del'>-		} while (ret &gt; 0);</div><div class='del'>-</div><div class='del'>-                if (xdata &amp;&amp; !healer-&gt;crawl_event.heal_failed_count) {</div><div class='del'>-                        afr_shd_ta_set_xattrs (this, &amp;loc, &amp;xdata,</div><div class='del'>-                                               healer-&gt;subvol);</div><div class='del'>-                        dict_unref (xdata);</div><div class='del'>-                        xdata = NULL;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+        do {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "starting index sweep on subvol %s",</div><div class='add'>+                         afr_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+</div><div class='add'>+            afr_shd_sweep_prepare(healer);</div><div class='add'>+</div><div class='add'>+            ret = afr_shd_index_sweep_all(healer);</div><div class='add'>+</div><div class='add'>+            afr_shd_sweep_done(healer);</div><div class='add'>+            /*</div><div class='add'>+              As long as at least one gfid was</div><div class='add'>+              healed, keep retrying. We may have</div><div class='add'>+              just healed a directory and thereby</div><div class='add'>+              created entries for other gfids which</div><div class='add'>+              could not be healed thus far.</div><div class='add'>+            */</div><div class='add'>+</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "finished index sweep on subvol %s",</div><div class='add'>+                         afr_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+            /*</div><div class='add'>+              Give a pause before retrying to avoid a busy loop</div><div class='add'>+              in case the only entry in index is because of</div><div class='add'>+              an ongoing I/O.</div><div class='add'>+            */</div><div class='add'>+            sleep(1);</div><div class='add'>+        } while (ret &gt; 0);</div><div class='add'>+</div><div class='add'>+        if (xdata &amp;&amp; !healer-&gt;crawl_event.heal_failed_count) {</div><div class='add'>+            afr_shd_ta_set_xattrs(this, &amp;loc, &amp;xdata, healer-&gt;subvol);</div><div class='add'>+            dict_unref(xdata);</div><div class='add'>+            xdata = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-	return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-afr_shd_full_healer (void *data)</div><div class='add'>+afr_shd_full_healer(void *data)</div><div class='ctx'> {</div><div class='del'>-	struct subvol_healer *healer = NULL;</div><div class='del'>-	xlator_t *this = NULL;</div><div class='del'>-	int run = 0;</div><div class='add'>+    struct subvol_healer *healer = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int run = 0;</div><div class='ctx'> </div><div class='del'>-	healer = data;</div><div class='del'>-	THIS = this = healer-&gt;this;</div><div class='add'>+    healer = data;</div><div class='add'>+    THIS = this = healer-&gt;this;</div><div class='ctx'> </div><div class='del'>-	for (;;) {</div><div class='del'>-		pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-		{</div><div class='del'>-			run = __afr_shd_healer_wait (healer);</div><div class='del'>-			if (!run)</div><div class='del'>-				healer-&gt;running = _gf_false;</div><div class='del'>-		}</div><div class='del'>-		pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='add'>+    for (;;) {</div><div class='add'>+        pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            run = __afr_shd_healer_wait(healer);</div><div class='add'>+            if (!run)</div><div class='add'>+                healer-&gt;running = _gf_false;</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-		if (!run)</div><div class='del'>-			break;</div><div class='add'>+        if (!run)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-		ASSERT_LOCAL(this, healer);</div><div class='add'>+        ASSERT_LOCAL(this, healer);</div><div class='ctx'> </div><div class='del'>-	        gf_msg (this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='del'>-		        "starting full sweep on subvol %s",</div><div class='del'>-		        afr_subvol_name (this, healer-&gt;subvol));</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='add'>+               "starting full sweep on subvol %s",</div><div class='add'>+               afr_subvol_name(this, healer-&gt;subvol));</div><div class='ctx'> </div><div class='del'>-		afr_shd_sweep_prepare (healer);</div><div class='add'>+        afr_shd_sweep_prepare(healer);</div><div class='ctx'> </div><div class='del'>-		afr_shd_full_sweep (healer, this-&gt;itable-&gt;root);</div><div class='add'>+        afr_shd_full_sweep(healer, this-&gt;itable-&gt;root);</div><div class='ctx'> </div><div class='del'>-		afr_shd_sweep_done (healer);</div><div class='add'>+        afr_shd_sweep_done(healer);</div><div class='ctx'> </div><div class='del'>-	        gf_msg (this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='del'>-		        "finished full sweep on subvol %s",</div><div class='del'>-		        afr_subvol_name (this, healer-&gt;subvol));</div><div class='del'>-	}</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_SELF_HEAL_INFO,</div><div class='add'>+               "finished full sweep on subvol %s",</div><div class='add'>+               afr_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_healer_init (xlator_t *this, struct subvol_healer *healer)</div><div class='add'>+afr_shd_healer_init(xlator_t *this, struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	ret = pthread_mutex_init (&amp;healer-&gt;mutex, NULL);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = pthread_mutex_init(&amp;healer-&gt;mutex, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = pthread_cond_init (&amp;healer-&gt;cond, NULL);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = pthread_cond_init(&amp;healer-&gt;cond, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	healer-&gt;this = this;</div><div class='del'>-	healer-&gt;running = _gf_false;</div><div class='del'>-	healer-&gt;rerun = _gf_false;</div><div class='del'>-	healer-&gt;local = _gf_false;</div><div class='add'>+    healer-&gt;this = this;</div><div class='add'>+    healer-&gt;running = _gf_false;</div><div class='add'>+    healer-&gt;rerun = _gf_false;</div><div class='add'>+    healer-&gt;local = _gf_false;</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_healer_spawn (xlator_t *this, struct subvol_healer *healer,</div><div class='del'>-		      void *(threadfn)(void *))</div><div class='add'>+afr_shd_healer_spawn(xlator_t *this, struct subvol_healer *healer,</div><div class='add'>+                     void *(threadfn)(void *))</div><div class='ctx'> {</div><div class='del'>-	int ret = 0;</div><div class='del'>-</div><div class='del'>-	pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-	{</div><div class='del'>-		if (healer-&gt;running) {</div><div class='del'>-			pthread_cond_signal (&amp;healer-&gt;cond);</div><div class='del'>-		} else {</div><div class='del'>-			ret = gf_thread_create (&amp;healer-&gt;thread, NULL,</div><div class='del'>-						threadfn, healer, "shdheal");</div><div class='del'>-			if (ret)</div><div class='del'>-				goto unlock;</div><div class='del'>-			healer-&gt;running = 1;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		healer-&gt;rerun = 1;</div><div class='del'>-	}</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (healer-&gt;running) {</div><div class='add'>+            pthread_cond_signal(&amp;healer-&gt;cond);</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_thread_create(&amp;healer-&gt;thread, NULL, threadfn, healer,</div><div class='add'>+                                   "shdheal");</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+            healer-&gt;running = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        healer-&gt;rerun = 1;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_full_healer_spawn (xlator_t *this, int subvol)</div><div class='add'>+afr_shd_full_healer_spawn(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	return afr_shd_healer_spawn (this, NTH_FULL_HEALER (this, subvol),</div><div class='del'>-				     afr_shd_full_healer);</div><div class='add'>+    return afr_shd_healer_spawn(this, NTH_FULL_HEALER(this, subvol),</div><div class='add'>+                                afr_shd_full_healer);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_index_healer_spawn (xlator_t *this, int subvol)</div><div class='add'>+afr_shd_index_healer_spawn(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	return afr_shd_healer_spawn (this, NTH_INDEX_HEALER (this, subvol),</div><div class='del'>-				     afr_shd_index_healer);</div><div class='add'>+    return afr_shd_healer_spawn(this, NTH_INDEX_HEALER(this, subvol),</div><div class='add'>+                                afr_shd_index_healer);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_dict_add_crawl_event (xlator_t *this, dict_t *output,</div><div class='del'>-			      crawl_event_t *crawl_event)</div><div class='add'>+afr_shd_dict_add_crawl_event(xlator_t *this, dict_t *output,</div><div class='add'>+                             crawl_event_t *crawl_event)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        uint64_t        count = 0;</div><div class='del'>-        char            key[256] = {0};</div><div class='del'>-        int             xl_id = 0;</div><div class='del'>-        uint64_t        healed_count = 0;</div><div class='del'>-        uint64_t        split_brain_count = 0;</div><div class='del'>-        uint64_t        heal_failed_count = 0;</div><div class='del'>-        char            *start_time_str = 0;</div><div class='del'>-        char            *end_time_str = NULL;</div><div class='del'>-        char            *crawl_type = NULL;</div><div class='del'>-        int             progress = -1;</div><div class='del'>-	int             child = -1;</div><div class='del'>-</div><div class='del'>-	child = crawl_event-&gt;child;</div><div class='del'>-        healed_count = crawl_event-&gt;healed_count;</div><div class='del'>-        split_brain_count = crawl_event-&gt;split_brain_count;</div><div class='del'>-        heal_failed_count = crawl_event-&gt;heal_failed_count;</div><div class='del'>-        crawl_type = crawl_event-&gt;crawl_type;</div><div class='del'>-</div><div class='del'>-	if (!crawl_event-&gt;start_time)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        start_time_str = gf_strdup (ctime (&amp;crawl_event-&gt;start_time));</div><div class='del'>-</div><div class='del'>-	if (crawl_event-&gt;end_time)</div><div class='del'>-		end_time_str = gf_strdup (ctime (&amp;crawl_event-&gt;end_time));</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (output, this-&gt;name, &amp;xl_id);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        AFR_MSG_DICT_GET_FAILED, "xl does not have id");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics-%d-%d-count", xl_id, child);</div><div class='del'>-        ret = dict_get_uint64 (output, key, &amp;count);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_healed_cnt-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-        ret = dict_set_uint64(output, key, healed_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-		        "Could not add statistics_healed_count to output");</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_sb_cnt-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-        ret = dict_set_uint64 (output, key, split_brain_count);</div><div class='del'>-	if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-		        "Could not add statistics_split_brain_count to output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_crawl_type-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-        ret = dict_set_str (output, key, crawl_type);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-	                "Could not add statistics_crawl_type to output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_heal_failed_cnt-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-        ret = dict_set_uint64 (output, key, heal_failed_count);</div><div class='del'>-	if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-	                "Could not add statistics_healed_failed_count to output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_strt_time-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-        ret = dict_set_dynstr (output, key, start_time_str);</div><div class='del'>-	if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-		        "Could not add statistics_crawl_start_time to output");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-		start_time_str = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!end_time_str)</div><div class='del'>-                progress = 1;</div><div class='del'>-        else</div><div class='del'>-                progress = 0;</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_end_time-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-        if (!end_time_str)</div><div class='del'>-                end_time_str = gf_strdup ("Could not determine the end time");</div><div class='del'>-        ret = dict_set_dynstr (output, key, end_time_str);</div><div class='del'>-	if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-		        "Could not add statistics_crawl_end_time to output");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-		end_time_str = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "statistics_inprogress-%d-%d-%"PRIu64,</div><div class='del'>-                  xl_id, child, count);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (output, key, progress);</div><div class='del'>-	if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-		        "Could not add statistics_inprogress to output");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	snprintf (key, sizeof (key), "statistics-%d-%d-count", xl_id, child);</div><div class='del'>-	ret = dict_set_uint64 (output, key, count + 1);</div><div class='del'>-	if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-		        "Could not increment the counter.");</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    int xl_id = 0;</div><div class='add'>+    uint64_t healed_count = 0;</div><div class='add'>+    uint64_t split_brain_count = 0;</div><div class='add'>+    uint64_t heal_failed_count = 0;</div><div class='add'>+    char *start_time_str = 0;</div><div class='add'>+    char *end_time_str = NULL;</div><div class='add'>+    char *crawl_type = NULL;</div><div class='add'>+    int progress = -1;</div><div class='add'>+    int child = -1;</div><div class='add'>+</div><div class='add'>+    child = crawl_event-&gt;child;</div><div class='add'>+    healed_count = crawl_event-&gt;healed_count;</div><div class='add'>+    split_brain_count = crawl_event-&gt;split_brain_count;</div><div class='add'>+    heal_failed_count = crawl_event-&gt;heal_failed_count;</div><div class='add'>+    crawl_type = crawl_event-&gt;crawl_type;</div><div class='add'>+</div><div class='add'>+    if (!crawl_event-&gt;start_time)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    start_time_str = gf_strdup(ctime(&amp;crawl_event-&gt;start_time));</div><div class='add'>+</div><div class='add'>+    if (crawl_event-&gt;end_time)</div><div class='add'>+        end_time_str = gf_strdup(ctime(&amp;crawl_event-&gt;end_time));</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(output, this-&gt;name, &amp;xl_id);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_GET_FAILED,</div><div class='add'>+               "xl does not have id");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics-%d-%d-count", xl_id, child);</div><div class='add'>+    ret = dict_get_uint64(output, key, &amp;count);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_healed_cnt-%d-%d-%" PRIu64, xl_id,</div><div class='add'>+             child, count);</div><div class='add'>+    ret = dict_set_uint64(output, key, healed_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_healed_count to output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_sb_cnt-%d-%d-%" PRIu64, xl_id, child,</div><div class='add'>+             count);</div><div class='add'>+    ret = dict_set_uint64(output, key, split_brain_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_split_brain_count to output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_crawl_type-%d-%d-%" PRIu64, xl_id,</div><div class='add'>+             child, count);</div><div class='add'>+    ret = dict_set_str(output, key, crawl_type);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_crawl_type to output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_heal_failed_cnt-%d-%d-%" PRIu64,</div><div class='add'>+             xl_id, child, count);</div><div class='add'>+    ret = dict_set_uint64(output, key, heal_failed_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_healed_failed_count to output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_strt_time-%d-%d-%" PRIu64, xl_id,</div><div class='add'>+             child, count);</div><div class='add'>+    ret = dict_set_dynstr(output, key, start_time_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_crawl_start_time to output");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        start_time_str = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!end_time_str)</div><div class='add'>+        progress = 1;</div><div class='add'>+    else</div><div class='add'>+        progress = 0;</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_end_time-%d-%d-%" PRIu64, xl_id,</div><div class='add'>+             child, count);</div><div class='add'>+    if (!end_time_str)</div><div class='add'>+        end_time_str = gf_strdup("Could not determine the end time");</div><div class='add'>+    ret = dict_set_dynstr(output, key, end_time_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_crawl_end_time to output");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        end_time_str = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics_inprogress-%d-%d-%" PRIu64, xl_id,</div><div class='add'>+             child, count);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(output, key, progress);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not add statistics_inprogress to output");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "statistics-%d-%d-count", xl_id, child);</div><div class='add'>+    ret = dict_set_uint64(output, key, count + 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not increment the counter.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-	GF_FREE (start_time_str);</div><div class='del'>-	GF_FREE (end_time_str);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(start_time_str);</div><div class='add'>+    GF_FREE(end_time_str);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_dict_add_path (xlator_t *this, dict_t *output, int child, char *path,</div><div class='del'>-		       struct timeval *tv)</div><div class='add'>+afr_shd_dict_add_path(xlator_t *this, dict_t *output, int child, char *path,</div><div class='add'>+                      struct timeval *tv)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        uint64_t        count = 0;</div><div class='del'>-        char            key[256] = {0};</div><div class='del'>-        int             xl_id = 0;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (output, this-&gt;name, &amp;xl_id);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    int xl_id = 0;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(output, this-&gt;name, &amp;xl_id);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_GET_FAILED,</div><div class='add'>+               "xl does not have id");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-count", xl_id, child);</div><div class='add'>+    ret = dict_get_uint64(output, key, &amp;count);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-%" PRIu64, xl_id, child, count);</div><div class='add'>+    ret = dict_set_dynstr(output, key, path);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Could not add to output", path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (tv) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-%" PRIu64 "-time", xl_id, child,</div><div class='add'>+                 count);</div><div class='add'>+        ret = dict_set_uint32(output, key, tv-&gt;tv_sec);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        AFR_MSG_DICT_GET_FAILED, "xl does not have id");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s: Could not set time", path);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-count", xl_id, child);</div><div class='del'>-        ret = dict_get_uint64 (output, key, &amp;count);</div><div class='add'>+    snprintf(key, sizeof(key), "%d-%d-count", xl_id, child);</div><div class='ctx'> </div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-%"PRIu64, xl_id, child, count);</div><div class='del'>-	ret = dict_set_dynstr (output, key, path);</div><div class='add'>+    ret = dict_set_uint64(output, key, count + 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Could not increment count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        AFR_MSG_DICT_SET_FAILED, "%s: Could not add to output",</div><div class='del'>-                        path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (tv) {</div><div class='del'>-		snprintf (key, sizeof (key), "%d-%d-%"PRIu64"-time", xl_id,</div><div class='del'>-			  child, count);</div><div class='del'>-		ret = dict_set_uint32 (output, key, tv-&gt;tv_sec);</div><div class='del'>-		if (ret) {</div><div class='del'>-		        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s: Could not set time",</div><div class='del'>-			        path);</div><div class='del'>-			goto out;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-%d-count", xl_id, child);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (output, key, count + 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        -ret, AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Could not increment count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_add_shd_event (circular_buffer_t *cb, void *data)</div><div class='add'>+afr_add_shd_event(circular_buffer_t *cb, void *data)</div><div class='ctx'> {</div><div class='del'>-	dict_t *output = NULL;</div><div class='del'>-	xlator_t *this = THIS;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_self_heald_t *shd = NULL;</div><div class='del'>-	shd_event_t *shd_event = NULL;</div><div class='del'>-	char *path = NULL;</div><div class='del'>-</div><div class='del'>-	output = data;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	shd = &amp;priv-&gt;shd;</div><div class='del'>-	shd_event = cb-&gt;data;</div><div class='del'>-</div><div class='del'>-	if (!shd-&gt;index_healers[shd_event-&gt;child].local)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	path = gf_strdup (shd_event-&gt;path);</div><div class='del'>-	if (!path)</div><div class='del'>-		return -ENOMEM;</div><div class='del'>-</div><div class='del'>-	afr_shd_dict_add_path (this, output, shd_event-&gt;child, path,</div><div class='del'>-			       &amp;cb-&gt;tv);</div><div class='del'>-	return 0;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_self_heald_t *shd = NULL;</div><div class='add'>+    shd_event_t *shd_event = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+</div><div class='add'>+    output = data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    shd = &amp;priv-&gt;shd;</div><div class='add'>+    shd_event = cb-&gt;data;</div><div class='add'>+</div><div class='add'>+    if (!shd-&gt;index_healers[shd_event-&gt;child].local)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    path = gf_strdup(shd_event-&gt;path);</div><div class='add'>+    if (!path)</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+</div><div class='add'>+    afr_shd_dict_add_path(this, output, shd_event-&gt;child, path, &amp;cb-&gt;tv);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_add_crawl_event (circular_buffer_t *cb, void *data)</div><div class='add'>+afr_add_crawl_event(circular_buffer_t *cb, void *data)</div><div class='ctx'> {</div><div class='del'>-	dict_t *output = NULL;</div><div class='del'>-	xlator_t *this = THIS;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_self_heald_t *shd = NULL;</div><div class='del'>-	crawl_event_t *crawl_event = NULL;</div><div class='del'>-</div><div class='del'>-	output = data;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	shd = &amp;priv-&gt;shd;</div><div class='del'>-	crawl_event = cb-&gt;data;</div><div class='del'>-</div><div class='del'>-	if (!shd-&gt;index_healers[crawl_event-&gt;child].local)</div><div class='del'>-		return 0;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_self_heald_t *shd = NULL;</div><div class='add'>+    crawl_event_t *crawl_event = NULL;</div><div class='add'>+</div><div class='add'>+    output = data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    shd = &amp;priv-&gt;shd;</div><div class='add'>+    crawl_event = cb-&gt;data;</div><div class='add'>+</div><div class='add'>+    if (!shd-&gt;index_healers[crawl_event-&gt;child].local)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	afr_shd_dict_add_crawl_event (this, output, crawl_event);</div><div class='add'>+    afr_shd_dict_add_crawl_event(this, output, crawl_event);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_daemon_init (xlator_t *this)</div><div class='add'>+afr_selfheal_daemon_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_self_heald_t *shd = NULL;</div><div class='del'>-	int ret = -1;</div><div class='del'>-	int i = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	shd = &amp;priv-&gt;shd;</div><div class='del'>-</div><div class='del'>-	this-&gt;itable = inode_table_new (SHD_INODE_LRU_LIMIT, this);</div><div class='del'>-	if (!this-&gt;itable)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	shd-&gt;index_healers = GF_CALLOC (sizeof(*shd-&gt;index_healers),</div><div class='del'>-					priv-&gt;child_count,</div><div class='del'>-					gf_afr_mt_subvol_healer_t);</div><div class='del'>-	if (!shd-&gt;index_healers)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		shd-&gt;index_healers[i].subvol = i;</div><div class='del'>-		ret = afr_shd_healer_init (this, &amp;shd-&gt;index_healers[i]);</div><div class='del'>-		if (ret)</div><div class='del'>-			goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	shd-&gt;full_healers = GF_CALLOC (sizeof(*shd-&gt;full_healers),</div><div class='del'>-				       priv-&gt;child_count,</div><div class='del'>-				       gf_afr_mt_subvol_healer_t);</div><div class='del'>-	if (!shd-&gt;full_healers)</div><div class='del'>-		goto out;</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		shd-&gt;full_healers[i].subvol = i;</div><div class='del'>-		ret = afr_shd_healer_init (this, &amp;shd-&gt;full_healers[i]);</div><div class='del'>-		if (ret)</div><div class='del'>-			goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	shd-&gt;split_brain = eh_new (AFR_EH_SPLIT_BRAIN_LIMIT, _gf_false,</div><div class='del'>-				   afr_destroy_shd_event_data);</div><div class='del'>-	if (!shd-&gt;split_brain)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        shd-&gt;statistics = GF_CALLOC (sizeof(eh_t *), priv-&gt;child_count,</div><div class='del'>-				     gf_common_mt_eh_t);</div><div class='del'>-        if (!shd-&gt;statistics)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count ; i++) {</div><div class='del'>-                shd-&gt;statistics[i] = eh_new (AFR_STATISTICS_HISTORY_SIZE,</div><div class='del'>-					     _gf_false,</div><div class='del'>-					     afr_destroy_crawl_event_data);</div><div class='del'>-                if (!shd-&gt;statistics[i])</div><div class='del'>-                        goto out;</div><div class='del'>-		shd-&gt;full_healers[i].crawl_event.child = i;</div><div class='del'>-		shd-&gt;full_healers[i].crawl_event.crawl_type = "FULL";</div><div class='del'>-		shd-&gt;index_healers[i].crawl_event.child = i;</div><div class='del'>-		shd-&gt;index_healers[i].crawl_event.crawl_type = "INDEX";</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_self_heald_t *shd = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    shd = &amp;priv-&gt;shd;</div><div class='add'>+</div><div class='add'>+    this-&gt;itable = inode_table_new(SHD_INODE_LRU_LIMIT, this);</div><div class='add'>+    if (!this-&gt;itable)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    shd-&gt;index_healers = GF_CALLOC(sizeof(*shd-&gt;index_healers),</div><div class='add'>+                                   priv-&gt;child_count,</div><div class='add'>+                                   gf_afr_mt_subvol_healer_t);</div><div class='add'>+    if (!shd-&gt;index_healers)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        shd-&gt;index_healers[i].subvol = i;</div><div class='add'>+        ret = afr_shd_healer_init(this, &amp;shd-&gt;index_healers[i]);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    shd-&gt;full_healers = GF_CALLOC(sizeof(*shd-&gt;full_healers), priv-&gt;child_count,</div><div class='add'>+                                  gf_afr_mt_subvol_healer_t);</div><div class='add'>+    if (!shd-&gt;full_healers)</div><div class='add'>+        goto out;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        shd-&gt;full_healers[i].subvol = i;</div><div class='add'>+        ret = afr_shd_healer_init(this, &amp;shd-&gt;full_healers[i]);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    shd-&gt;split_brain = eh_new(AFR_EH_SPLIT_BRAIN_LIMIT, _gf_false,</div><div class='add'>+                              afr_destroy_shd_event_data);</div><div class='add'>+    if (!shd-&gt;split_brain)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    shd-&gt;statistics = GF_CALLOC(sizeof(eh_t *), priv-&gt;child_count,</div><div class='add'>+                                gf_common_mt_eh_t);</div><div class='add'>+    if (!shd-&gt;statistics)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        shd-&gt;statistics[i] = eh_new(AFR_STATISTICS_HISTORY_SIZE, _gf_false,</div><div class='add'>+                                    afr_destroy_crawl_event_data);</div><div class='add'>+        if (!shd-&gt;statistics[i])</div><div class='add'>+            goto out;</div><div class='add'>+        shd-&gt;full_healers[i].crawl_event.child = i;</div><div class='add'>+        shd-&gt;full_healers[i].crawl_event.crawl_type = "FULL";</div><div class='add'>+        shd-&gt;index_healers[i].crawl_event.child = i;</div><div class='add'>+        shd-&gt;index_healers[i].crawl_event.crawl_type = "INDEX";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_selfheal_childup (xlator_t *this, int subvol)</div><div class='add'>+afr_selfheal_childup(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-	afr_shd_index_healer_spawn (this, subvol);</div><div class='add'>+    afr_shd_index_healer_spawn(this, subvol);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_shd_get_index_count (xlator_t *this, int i, uint64_t *count)</div><div class='add'>+afr_shd_get_index_count(xlator_t *this, int i, uint64_t *count)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	xlator_t *subvol = NULL;</div><div class='del'>-	loc_t rootloc = {0, };</div><div class='del'>-	dict_t *xattr = NULL;</div><div class='del'>-	int ret = -1;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t rootloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	subvol = priv-&gt;children[i];</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    subvol = priv-&gt;children[i];</div><div class='ctx'> </div><div class='del'>-	rootloc.inode = inode_ref (this-&gt;itable-&gt;root);</div><div class='del'>-	gf_uuid_copy (rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='add'>+    rootloc.inode = inode_ref(this-&gt;itable-&gt;root);</div><div class='add'>+    gf_uuid_copy(rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-	ret = syncop_getxattr (subvol, &amp;rootloc, &amp;xattr,</div><div class='del'>-			       GF_XATTROP_INDEX_COUNT, NULL, NULL);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;rootloc, &amp;xattr, GF_XATTROP_INDEX_COUNT,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	ret = dict_get_uint64 (xattr, GF_XATTROP_INDEX_COUNT, count);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto out;</div><div class='add'>+    ret = dict_get_uint64(xattr, GF_XATTROP_INDEX_COUNT, count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-	loc_wipe (&amp;rootloc);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    loc_wipe(&amp;rootloc);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_xl_op (xlator_t *this, dict_t *input, dict_t *output)</div><div class='add'>+afr_xl_op(xlator_t *this, dict_t *input, dict_t *output)</div><div class='ctx'> {</div><div class='del'>-        gf_xl_afr_op_t   op = GF_SHD_OP_INVALID;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        int              xl_id = 0;</div><div class='del'>-	afr_private_t   *priv = NULL;</div><div class='del'>-	afr_self_heald_t *shd = NULL;</div><div class='del'>-	struct subvol_healer *healer = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	char key[64];</div><div class='del'>-	int op_ret = 0;</div><div class='del'>-	uint64_t cnt = 0;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	shd = &amp;priv-&gt;shd;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (input, "xl-op", (int32_t*)&amp;op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_get_int32 (input, this-&gt;name, &amp;xl_id);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_int32 (output, this-&gt;name, xl_id);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        switch (op) {</div><div class='add'>+    gf_xl_afr_op_t op = GF_SHD_OP_INVALID;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int xl_id = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_self_heald_t *shd = NULL;</div><div class='add'>+    struct subvol_healer *healer = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char key[64];</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    uint64_t cnt = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    shd = &amp;priv-&gt;shd;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(input, "xl-op", (int32_t *)&amp;op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_get_int32(input, this-&gt;name, &amp;xl_id);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_int32(output, this-&gt;name, xl_id);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    switch (op) {</div><div class='ctx'>         case GF_SHD_OP_HEAL_INDEX:</div><div class='del'>-		op_ret = 0;</div><div class='del'>-</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			healer = &amp;shd-&gt;index_healers[i];</div><div class='del'>-			snprintf (key, sizeof (key), "%d-%d-status", xl_id, i);</div><div class='del'>-</div><div class='del'>-			if (!priv-&gt;child_up[i]) {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Brick is not connected");</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-			} else if (AFR_COUNT (priv-&gt;child_up,</div><div class='del'>-					      priv-&gt;child_count) &lt; 2) {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "&lt; 2 bricks in replica are up");</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-			} else if (!afr_shd_is_subvol_local (this, healer-&gt;subvol)) {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Brick is remote");</div><div class='del'>-			} else {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Started self-heal");</div><div class='del'>-				afr_shd_index_healer_spawn (this, i);</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-                break;</div><div class='add'>+            op_ret = 0;</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                healer = &amp;shd-&gt;index_healers[i];</div><div class='add'>+                snprintf(key, sizeof(key), "%d-%d-status", xl_id, i);</div><div class='add'>+</div><div class='add'>+                if (!priv-&gt;child_up[i]) {</div><div class='add'>+                    ret = dict_set_str(output, key, "Brick is not connected");</div><div class='add'>+                    op_ret = -1;</div><div class='add'>+                } else if (AFR_COUNT(priv-&gt;child_up, priv-&gt;child_count) &lt; 2) {</div><div class='add'>+                    ret = dict_set_str(output, key,</div><div class='add'>+                                       "&lt; 2 bricks in replica are up");</div><div class='add'>+                    op_ret = -1;</div><div class='add'>+                } else if (!afr_shd_is_subvol_local(this, healer-&gt;subvol)) {</div><div class='add'>+                    ret = dict_set_str(output, key, "Brick is remote");</div><div class='add'>+                } else {</div><div class='add'>+                    ret = dict_set_str(output, key, "Started self-heal");</div><div class='add'>+                    afr_shd_index_healer_spawn(this, i);</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_HEAL_FULL:</div><div class='del'>-		op_ret = -1;</div><div class='del'>-</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			healer = &amp;shd-&gt;full_healers[i];</div><div class='del'>-			snprintf (key, sizeof (key), "%d-%d-status", xl_id, i);</div><div class='del'>-</div><div class='del'>-			if (!priv-&gt;child_up[i]) {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Brick is not connected");</div><div class='del'>-			} else if (AFR_COUNT (priv-&gt;child_up,</div><div class='del'>-					      priv-&gt;child_count) &lt; 2) {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "&lt; 2 bricks in replica are up");</div><div class='del'>-			} else if (!afr_shd_is_subvol_local (this, healer-&gt;subvol)) {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Brick is remote");</div><div class='del'>-			} else {</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Started self-heal");</div><div class='del'>-				afr_shd_full_healer_spawn (this, i);</div><div class='del'>-				op_ret = 0;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-                break;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                healer = &amp;shd-&gt;full_healers[i];</div><div class='add'>+                snprintf(key, sizeof(key), "%d-%d-status", xl_id, i);</div><div class='add'>+</div><div class='add'>+                if (!priv-&gt;child_up[i]) {</div><div class='add'>+                    ret = dict_set_str(output, key, "Brick is not connected");</div><div class='add'>+                } else if (AFR_COUNT(priv-&gt;child_up, priv-&gt;child_count) &lt; 2) {</div><div class='add'>+                    ret = dict_set_str(output, key,</div><div class='add'>+                                       "&lt; 2 bricks in replica are up");</div><div class='add'>+                } else if (!afr_shd_is_subvol_local(this, healer-&gt;subvol)) {</div><div class='add'>+                    ret = dict_set_str(output, key, "Brick is remote");</div><div class='add'>+                } else {</div><div class='add'>+                    ret = dict_set_str(output, key, "Started self-heal");</div><div class='add'>+                    afr_shd_full_healer_spawn(this, i);</div><div class='add'>+                    op_ret = 0;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_INDEX_SUMMARY:</div><div class='del'>-                /* this case has been handled in glfs-heal.c */</div><div class='del'>-                break;</div><div class='add'>+            /* this case has been handled in glfs-heal.c */</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_HEALED_FILES:</div><div class='ctx'>         case GF_SHD_OP_HEAL_FAILED_FILES:</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-%d-status", xl_id, i);</div><div class='del'>-                        ret = dict_set_str (output, key, "Operation Not "</div><div class='del'>-                                            "Supported");</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                snprintf(key, sizeof(key), "%d-%d-status", xl_id, i);</div><div class='add'>+                ret = dict_set_str(output, key,</div><div class='add'>+                                   "Operation Not "</div><div class='add'>+                                   "Supported");</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_SPLIT_BRAIN_FILES:</div><div class='del'>-		eh_dump (shd-&gt;split_brain, output, afr_add_shd_event);</div><div class='del'>-                break;</div><div class='add'>+            eh_dump(shd-&gt;split_brain, output, afr_add_shd_event);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_STATISTICS:</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			eh_dump (shd-&gt;statistics[i], output,</div><div class='del'>-				 afr_add_crawl_event);</div><div class='del'>-			afr_shd_dict_add_crawl_event (this, output,</div><div class='del'>-						      &amp;shd-&gt;index_healers[i].crawl_event);</div><div class='del'>-			afr_shd_dict_add_crawl_event (this, output,</div><div class='del'>-						      &amp;shd-&gt;full_healers[i].crawl_event);</div><div class='del'>-		}</div><div class='del'>-                break;</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                eh_dump(shd-&gt;statistics[i], output, afr_add_crawl_event);</div><div class='add'>+                afr_shd_dict_add_crawl_event(</div><div class='add'>+                    this, output, &amp;shd-&gt;index_healers[i].crawl_event);</div><div class='add'>+                afr_shd_dict_add_crawl_event(this, output,</div><div class='add'>+                                             &amp;shd-&gt;full_healers[i].crawl_event);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_SHD_OP_STATISTICS_HEAL_COUNT:</div><div class='ctx'>         case GF_SHD_OP_STATISTICS_HEAL_COUNT_PER_REPLICA:</div><div class='del'>-		op_ret = -1;</div><div class='del'>-</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			if (!priv-&gt;child_up[i]) {</div><div class='del'>-				snprintf (key, sizeof (key), "%d-%d-status",</div><div class='del'>-                                          xl_id, i);</div><div class='del'>-				ret = dict_set_str (output, key,</div><div class='del'>-						    "Brick is not connected");</div><div class='del'>-			} else {</div><div class='del'>-				snprintf (key, sizeof (key), "%d-%d-hardlinks",</div><div class='del'>-                                          xl_id, i);</div><div class='del'>-				ret = afr_shd_get_index_count (this, i, &amp;cnt);</div><div class='del'>-				if (ret == 0) {</div><div class='del'>-					ret = dict_set_uint64 (output, key, cnt);</div><div class='del'>-				}</div><div class='del'>-				op_ret = 0;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                if (!priv-&gt;child_up[i]) {</div><div class='add'>+                    snprintf(key, sizeof(key), "%d-%d-status", xl_id, i);</div><div class='add'>+                    ret = dict_set_str(output, key, "Brick is not connected");</div><div class='add'>+                } else {</div><div class='add'>+                    snprintf(key, sizeof(key), "%d-%d-hardlinks", xl_id, i);</div><div class='add'>+                    ret = afr_shd_get_index_count(this, i, &amp;cnt);</div><div class='add'>+                    if (ret == 0) {</div><div class='add'>+                        ret = dict_set_uint64(output, key, cnt);</div><div class='add'>+                    }</div><div class='add'>+                    op_ret = 0;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_INVALID_ARG, "Unknown set op %d", op);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_ARG,</div><div class='add'>+                   "Unknown set op %d", op);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        dict_del (output, this-&gt;name);</div><div class='del'>-        return op_ret;</div><div class='add'>+    dict_del(output, this-&gt;name);</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c<br/>index 9c587db0562..3a542ceca43 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-transaction.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr-transaction.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr-transaction.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr-transaction.c</a></div><div class='hunk'>@@ -21,57 +21,57 @@</div><div class='ctx'> #include &lt;signal.h&gt;</div><div class='ctx'> </div><div class='ctx'> typedef enum {</div><div class='del'>-        AFR_TRANSACTION_PRE_OP,</div><div class='del'>-        AFR_TRANSACTION_POST_OP,</div><div class='add'>+    AFR_TRANSACTION_PRE_OP,</div><div class='add'>+    AFR_TRANSACTION_POST_OP,</div><div class='ctx'> } afr_xattrop_type_t;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_lock_resume_shared (struct list_head *list);</div><div class='add'>+afr_lock_resume_shared(struct list_head *list);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__afr_transaction_wake_shared (afr_local_t *local, struct list_head *shared);</div><div class='add'>+__afr_transaction_wake_shared(afr_local_t *local, struct list_head *shared);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_changelog_post_op (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_changelog_post_op(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_post_op_safe (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_changelog_post_op_safe(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_changelog_pre_op_uninherit (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_changelog_pre_op_uninherit(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_changelog_pre_op_update (call_frame_t *frame, xlator_t *this);</div><div class='add'>+afr_changelog_pre_op_update(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_call_count (afr_transaction_type type,</div><div class='del'>-                          unsigned char *pre_op_subvols,</div><div class='del'>-                          unsigned char *failed_subvols,</div><div class='del'>-                          unsigned int child_count);</div><div class='add'>+afr_changelog_call_count(afr_transaction_type type,</div><div class='add'>+                         unsigned char *pre_op_subvols,</div><div class='add'>+                         unsigned char *failed_subvols,</div><div class='add'>+                         unsigned int child_count);</div><div class='ctx'> int</div><div class='del'>-afr_changelog_do (call_frame_t *frame, xlator_t *this, dict_t *xattr,</div><div class='del'>-		  afr_changelog_resume_t changelog_resume,</div><div class='del'>-                  afr_xattrop_type_t op);</div><div class='add'>+afr_changelog_do(call_frame_t *frame, xlator_t *this, dict_t *xattr,</div><div class='add'>+                 afr_changelog_resume_t changelog_resume,</div><div class='add'>+                 afr_xattrop_type_t op);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_zero_fill_stat (afr_local_t *local)</div><div class='del'>-{</div><div class='del'>-        if (!local)</div><div class='del'>-                return;</div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION ||</div><div class='del'>-            local-&gt;transaction.type == AFR_METADATA_TRANSACTION) {</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.inode_wfop.prebuf);</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.inode_wfop.postbuf);</div><div class='del'>-        } else if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION ||</div><div class='del'>-                   local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION) {</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.dir_fop.buf);</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.dir_fop.preparent);</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.dir_fop.postparent);</div><div class='del'>-                if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION)</div><div class='del'>-                        return;</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.dir_fop.prenewparent);</div><div class='del'>-                gf_zero_fill_stat (&amp;local-&gt;cont.dir_fop.postnewparent);</div><div class='del'>-        }</div><div class='add'>+afr_zero_fill_stat(afr_local_t *local)</div><div class='add'>+{</div><div class='add'>+    if (!local)</div><div class='add'>+        return;</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION ||</div><div class='add'>+        local-&gt;transaction.type == AFR_METADATA_TRANSACTION) {</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.inode_wfop.prebuf);</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.inode_wfop.postbuf);</div><div class='add'>+    } else if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION ||</div><div class='add'>+               local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION) {</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.dir_fop.buf);</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.dir_fop.preparent);</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.dir_fop.postparent);</div><div class='add'>+        if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION)</div><div class='add'>+            return;</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.dir_fop.prenewparent);</div><div class='add'>+        gf_zero_fill_stat(&amp;local-&gt;cont.dir_fop.postnewparent);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* In case of errors afr needs to choose which xdata from lower xlators it needs</div><div class='hunk'>@@ -79,2483 +79,2402 @@ afr_zero_fill_stat (afr_local_t *local)</div><div class='ctx'>  * any good subvols which failed. Give preference to errnos other than</div><div class='ctx'>  * ENOTCONN even if the child is source */</div><div class='ctx'> void</div><div class='del'>-afr_pick_error_xdata (afr_local_t *local, afr_private_t *priv,</div><div class='del'>-                      inode_t *inode1, unsigned char *readable1,</div><div class='del'>-                      inode_t *inode2, unsigned char *readable2)</div><div class='del'>-{</div><div class='del'>-        int     s = -1;/*selection*/</div><div class='del'>-        int     i = 0;</div><div class='del'>-        unsigned char *readable = NULL;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;xdata_rsp) {</div><div class='del'>-                dict_unref (local-&gt;xdata_rsp);</div><div class='del'>-                local-&gt;xdata_rsp = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        readable = alloca0 (priv-&gt;child_count * sizeof (*readable));</div><div class='del'>-        if (inode2 &amp;&amp; readable2) {/*rename fop*/</div><div class='del'>-                AFR_INTERSECT (readable, readable1, readable2,</div><div class='del'>-                               priv-&gt;child_count);</div><div class='del'>-        } else {</div><div class='del'>-                memcpy (readable, readable1,</div><div class='del'>-                        sizeof (*readable) * priv-&gt;child_count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+afr_pick_error_xdata(afr_local_t *local, afr_private_t *priv, inode_t *inode1,</div><div class='add'>+                     unsigned char *readable1, inode_t *inode2,</div><div class='add'>+                     unsigned char *readable2)</div><div class='add'>+{</div><div class='add'>+    int s = -1; /*selection*/</div><div class='add'>+    int i = 0;</div><div class='add'>+    unsigned char *readable = NULL;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;xdata_rsp) {</div><div class='add'>+        dict_unref(local-&gt;xdata_rsp);</div><div class='add'>+        local-&gt;xdata_rsp = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    readable = alloca0(priv-&gt;child_count * sizeof(*readable));</div><div class='add'>+    if (inode2 &amp;&amp; readable2) { /*rename fop*/</div><div class='add'>+        AFR_INTERSECT(readable, readable1, readable2, priv-&gt;child_count);</div><div class='add'>+    } else {</div><div class='add'>+        memcpy(readable, readable1, sizeof(*readable) * priv-&gt;child_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;replies[i].op_ret &gt;= 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;replies[i].op_errno == ENOTCONN)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /*Order is important in the following condition*/</div><div class='add'>+        if ((s &lt; 0) || (!readable[s] &amp;&amp; readable[i]))</div><div class='add'>+            s = i;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (s != -1 &amp;&amp; local-&gt;replies[s].xdata) {</div><div class='add'>+        local-&gt;xdata_rsp = dict_ref(local-&gt;replies[s].xdata);</div><div class='add'>+    } else if (s == -1) {</div><div class='ctx'>         for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;replies[i].op_ret &gt;= 0)</div><div class='del'>-                        continue;</div><div class='add'>+            if (!local-&gt;replies[i].valid)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;replies[i].op_errno == ENOTCONN)</div><div class='del'>-                        continue;</div><div class='add'>+            if (local-&gt;replies[i].op_ret &gt;= 0)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                /*Order is important in the following condition*/</div><div class='del'>-                if ((s &lt; 0) || (!readable[s] &amp;&amp; readable[i]))</div><div class='del'>-                        s = i;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (s != -1 &amp;&amp; local-&gt;replies[s].xdata) {</div><div class='del'>-                local-&gt;xdata_rsp = dict_ref (local-&gt;replies[s].xdata);</div><div class='del'>-        } else if (s == -1) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (!local-&gt;replies[i].valid)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;replies[i].op_ret &gt;= 0)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (!local-&gt;replies[i].xdata)</div><div class='del'>-                                continue;</div><div class='del'>-                        local-&gt;xdata_rsp = dict_ref (local-&gt;replies[i].xdata);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (!local-&gt;replies[i].xdata)</div><div class='add'>+                continue;</div><div class='add'>+            local-&gt;xdata_rsp = dict_ref(local-&gt;replies[i].xdata);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_needs_changelog_update (afr_local_t *local)</div><div class='add'>+afr_needs_changelog_update(afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        if (!local-&gt;optimistic_change_log)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    if (!local-&gt;optimistic_change_log)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_changelog_has_quorum (afr_local_t *local, xlator_t *this)</div><div class='add'>+afr_changelog_has_quorum(afr_local_t *local, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        unsigned char *success_children = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    unsigned char *success_children = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        success_children = alloca0 (priv-&gt;child_count);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    success_children = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;transaction.failed_subvols[i]) {</div><div class='del'>-                        success_children[i] = 1;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;transaction.failed_subvols[i]) {</div><div class='add'>+            success_children[i] = 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (afr_has_quorum (success_children, this)) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (afr_has_quorum(success_children, this)) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_write_subvol_valid (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_is_write_subvol_valid(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        uint64_t write_subvol = 0;</div><div class='del'>-        unsigned char *writable = NULL;</div><div class='del'>-        uint16_t datamap = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    uint64_t write_subvol = 0;</div><div class='add'>+    unsigned char *writable = NULL;</div><div class='add'>+    uint16_t datamap = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        writable = alloca0 (priv-&gt;child_count);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    writable = alloca0(priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        write_subvol = afr_write_subvol_get (frame, this);</div><div class='del'>-        datamap = (write_subvol &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (datamap &amp; (1 &lt;&lt; i))</div><div class='del'>-                        writable[i] = 1;</div><div class='add'>+    write_subvol = afr_write_subvol_get(frame, this);</div><div class='add'>+    datamap = (write_subvol &amp; 0x00000000ffff0000) &gt;&gt; 16;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (datamap &amp; (1 &lt;&lt; i))</div><div class='add'>+            writable[i] = 1;</div><div class='ctx'> </div><div class='del'>-                if (writable[i] &amp;&amp; !local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+        if (writable[i] &amp;&amp; !local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_transaction_fop (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        unsigned char *failed_subvols = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        failed_subvols = local-&gt;transaction.failed_subvols;</div><div class='del'>-        call_count = priv-&gt;child_count - AFR_COUNT (failed_subvols,</div><div class='del'>-                                                    priv-&gt;child_count);</div><div class='del'>-        /* Fail if pre-op did not succeed on quorum no. of bricks. */</div><div class='del'>-        if (!afr_changelog_has_quorum (local, this) || !call_count) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                /* local-&gt;op_errno is already captured in changelog cbk. */</div><div class='del'>-                afr_transaction_resume (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+afr_transaction_fop(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    unsigned char *failed_subvols = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    failed_subvols = local-&gt;transaction.failed_subvols;</div><div class='add'>+    call_count = priv-&gt;child_count -</div><div class='add'>+                 AFR_COUNT(failed_subvols, priv-&gt;child_count);</div><div class='add'>+    /* Fail if pre-op did not succeed on quorum no. of bricks. */</div><div class='add'>+    if (!afr_changelog_has_quorum(local, this) || !call_count) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        /* local-&gt;op_errno is already captured in changelog cbk. */</div><div class='add'>+        afr_transaction_resume(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Fail if at least one writeable brick isn't up.*/</div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION &amp;&amp;</div><div class='del'>-            !afr_is_write_subvol_valid (frame, this)) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                afr_transaction_resume (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* Fail if at least one writeable brick isn't up.*/</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION &amp;&amp;</div><div class='add'>+        !afr_is_write_subvol_valid(frame, this)) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        afr_transaction_resume(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count = call_count;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;transaction.pre_op[i] &amp;&amp; !failed_subvols[i]) {</div><div class='del'>-			local-&gt;transaction.wind (frame, this, i);</div><div class='add'>+    local-&gt;call_count = call_count;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.pre_op[i] &amp;&amp; !failed_subvols[i]) {</div><div class='add'>+            local-&gt;transaction.wind(frame, this, i);</div><div class='ctx'> </div><div class='del'>-                        if (!--call_count)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+            if (!--call_count)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_transaction_done (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_transaction_done(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local      = NULL;</div><div class='del'>-        afr_private_t *priv       = NULL;</div><div class='del'>-        gf_boolean_t  unwind      = _gf_false;</div><div class='del'>-        afr_lock_t    *lock       = NULL;</div><div class='del'>-        afr_local_t   *lock_local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t unwind = _gf_false;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    afr_local_t *lock_local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;consistent_metadata) {</div><div class='del'>-                LOCK (&amp;frame-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        unwind = (local-&gt;transaction.main_frame != NULL);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-                if (unwind)/*It definitely did post-op*/</div><div class='del'>-                        afr_zero_fill_stat (local);</div><div class='add'>+    if (priv-&gt;consistent_metadata) {</div><div class='add'>+        LOCK(&amp;frame-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            unwind = (local-&gt;transaction.main_frame != NULL);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+        if (unwind) /*It definitely did post-op*/</div><div class='add'>+            afr_zero_fill_stat(local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;transaction.do_eager_unlock) {</div><div class='del'>-                lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-                LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        lock-&gt;acquired = _gf_false;</div><div class='del'>-                        lock-&gt;release = _gf_false;</div><div class='del'>-                        list_splice_init (&amp;lock-&gt;frozen,</div><div class='del'>-                                          &amp;lock-&gt;waiting);</div><div class='del'>-                        if (list_empty (&amp;lock-&gt;waiting))</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        lock_local = list_entry (lock-&gt;waiting.next,</div><div class='del'>-                                                 afr_local_t,</div><div class='del'>-                                                transaction.wait_list);</div><div class='del'>-                        list_del_init (&amp;lock_local-&gt;transaction.wait_list);</div><div class='del'>-                        list_add (&amp;lock_local-&gt;transaction.owner_list,</div><div class='del'>-                                  &amp;lock-&gt;owners);</div><div class='del'>-                }</div><div class='del'>-unlock:</div><div class='del'>-                UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-        if (lock_local) {</div><div class='del'>-                afr_lock (lock_local-&gt;transaction.frame,</div><div class='del'>-                          lock_local-&gt;transaction.frame-&gt;this);</div><div class='del'>-        }</div><div class='del'>-        local-&gt;transaction.unwind (frame, this);</div><div class='add'>+    if (local-&gt;transaction.do_eager_unlock) {</div><div class='add'>+        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            lock-&gt;acquired = _gf_false;</div><div class='add'>+            lock-&gt;release = _gf_false;</div><div class='add'>+            list_splice_init(&amp;lock-&gt;frozen, &amp;lock-&gt;waiting);</div><div class='add'>+            if (list_empty(&amp;lock-&gt;waiting))</div><div class='add'>+                goto unlock;</div><div class='add'>+            lock_local = list_entry(lock-&gt;waiting.next, afr_local_t,</div><div class='add'>+                                    transaction.wait_list);</div><div class='add'>+            list_del_init(&amp;lock_local-&gt;transaction.wait_list);</div><div class='add'>+            list_add(&amp;lock_local-&gt;transaction.owner_list, &amp;lock-&gt;owners);</div><div class='add'>+        }</div><div class='add'>+    unlock:</div><div class='add'>+        UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    if (lock_local) {</div><div class='add'>+        afr_lock(lock_local-&gt;transaction.frame,</div><div class='add'>+                 lock_local-&gt;transaction.frame-&gt;this);</div><div class='add'>+    }</div><div class='add'>+    local-&gt;transaction.unwind(frame, this);</div><div class='ctx'> </div><div class='del'>-        AFR_STACK_DESTROY (frame);</div><div class='add'>+    AFR_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_lock_fail_shared (afr_local_t *local, struct list_head *list)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *each = NULL;</div><div class='del'>-</div><div class='del'>-        while (!list_empty(list)) {</div><div class='del'>-                each = list_entry (list-&gt;next, afr_local_t,</div><div class='del'>-                                   transaction.wait_list);</div><div class='del'>-                list_del_init(&amp;each-&gt;transaction.wait_list);</div><div class='del'>-                each-&gt;op_ret = -1;</div><div class='del'>-                each-&gt;op_errno = local-&gt;op_errno;</div><div class='del'>-                afr_transaction_done (each-&gt;transaction.frame,</div><div class='del'>-                                      each-&gt;transaction.frame-&gt;this);</div><div class='del'>-        }</div><div class='add'>+afr_lock_fail_shared(afr_local_t *local, struct list_head *list)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *each = NULL;</div><div class='add'>+</div><div class='add'>+    while (!list_empty(list)) {</div><div class='add'>+        each = list_entry(list-&gt;next, afr_local_t, transaction.wait_list);</div><div class='add'>+        list_del_init(&amp;each-&gt;transaction.wait_list);</div><div class='add'>+        each-&gt;op_ret = -1;</div><div class='add'>+        each-&gt;op_errno = local-&gt;op_errno;</div><div class='add'>+        afr_transaction_done(each-&gt;transaction.frame,</div><div class='add'>+                             each-&gt;transaction.frame-&gt;this);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_handle_lock_acquire_failure (afr_local_t *local, gf_boolean_t locked)</div><div class='add'>+afr_handle_lock_acquire_failure(afr_local_t *local, gf_boolean_t locked)</div><div class='ctx'> {</div><div class='del'>-        struct list_head shared;</div><div class='del'>-        afr_lock_t *lock = NULL;</div><div class='add'>+    struct list_head shared;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;shared);</div><div class='del'>-        LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                lock-&gt;release = _gf_true;</div><div class='del'>-                list_splice_init (&amp;lock-&gt;waiting, &amp;shared);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;shared);</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        lock-&gt;release = _gf_true;</div><div class='add'>+        list_splice_init(&amp;lock-&gt;waiting, &amp;shared);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        afr_lock_fail_shared (local, &amp;shared);</div><div class='del'>-        local-&gt;transaction.do_eager_unlock = _gf_true;</div><div class='add'>+    afr_lock_fail_shared(local, &amp;shared);</div><div class='add'>+    local-&gt;transaction.do_eager_unlock = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        if (locked) {</div><div class='del'>-                local-&gt;internal_lock.lock_cbk = afr_transaction_done;</div><div class='del'>-                afr_unlock (local-&gt;transaction.frame,</div><div class='del'>-                            local-&gt;transaction.frame-&gt;this);</div><div class='del'>-        } else {</div><div class='del'>-                afr_transaction_done (local-&gt;transaction.frame,</div><div class='del'>-                                      local-&gt;transaction.frame-&gt;this);</div><div class='del'>-        }</div><div class='add'>+    if (locked) {</div><div class='add'>+        local-&gt;internal_lock.lock_cbk = afr_transaction_done;</div><div class='add'>+        afr_unlock(local-&gt;transaction.frame, local-&gt;transaction.frame-&gt;this);</div><div class='add'>+    } else {</div><div class='add'>+        afr_transaction_done(local-&gt;transaction.frame,</div><div class='add'>+                             local-&gt;transaction.frame-&gt;this);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-call_frame_t*</div><div class='del'>-afr_transaction_detach_fop_frame (call_frame_t *frame)</div><div class='add'>+call_frame_t *</div><div class='add'>+afr_transaction_detach_fop_frame(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='del'>-        call_frame_t   *fop_frame = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    call_frame_t *fop_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        afr_handle_inconsistent_fop (frame, &amp;local-&gt;op_ret, &amp;local-&gt;op_errno);</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fop_frame = local-&gt;transaction.main_frame;</div><div class='del'>-                local-&gt;transaction.main_frame = NULL;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    afr_handle_inconsistent_fop(frame, &amp;local-&gt;op_ret, &amp;local-&gt;op_errno);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fop_frame = local-&gt;transaction.main_frame;</div><div class='add'>+        local-&gt;transaction.main_frame = NULL;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return fop_frame;</div><div class='add'>+    return fop_frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-afr_save_lk_owner (call_frame_t *frame)</div><div class='add'>+afr_save_lk_owner(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t * local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;saved_lk_owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+    local-&gt;saved_lk_owner = frame-&gt;root-&gt;lk_owner;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-afr_restore_lk_owner (call_frame_t *frame)</div><div class='add'>+afr_restore_lk_owner(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t * local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;root-&gt;lk_owner = local-&gt;saved_lk_owner;</div><div class='add'>+    frame-&gt;root-&gt;lk_owner = local-&gt;saved_lk_owner;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__mark_all_success (call_frame_t *frame, xlator_t *this)</div><div class='add'>+__mark_all_success(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	int i;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		local-&gt;transaction.failed_subvols[i] = 0;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        local-&gt;transaction.failed_subvols[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_compute_pre_op_sources (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_transaction_type type = -1;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        int **matrix = NULL;</div><div class='del'>-        int idx = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int j = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        type = local-&gt;transaction.type;</div><div class='del'>-        idx = afr_index_for_transaction_type (type);</div><div class='del'>-        matrix = ALLOC_MATRIX (priv-&gt;child_count, int);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;transaction.changelog_xdata[i])</div><div class='del'>-                        continue;</div><div class='del'>-                xdata = local-&gt;transaction.changelog_xdata[i];</div><div class='del'>-                afr_selfheal_fill_matrix (this, matrix, i, idx, xdata);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset (local-&gt;transaction.pre_op_sources, 1, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        /*If lock or pre-op failed on a brick, it is not a source. */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                        local-&gt;transaction.pre_op_sources[i] = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* If brick is blamed by others, it is not a source. */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                for (j = 0; j &lt; priv-&gt;child_count; j++)</div><div class='del'>-                        if (matrix[i][j] != 0)</div><div class='del'>-                                local-&gt;transaction.pre_op_sources[j] = 0;</div><div class='add'>+afr_compute_pre_op_sources(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_transaction_type type = -1;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int **matrix = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    type = local-&gt;transaction.type;</div><div class='add'>+    idx = afr_index_for_transaction_type(type);</div><div class='add'>+    matrix = ALLOC_MATRIX(priv-&gt;child_count, int);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;transaction.changelog_xdata[i])</div><div class='add'>+            continue;</div><div class='add'>+        xdata = local-&gt;transaction.changelog_xdata[i];</div><div class='add'>+        afr_selfheal_fill_matrix(this, matrix, i, idx, xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memset(local-&gt;transaction.pre_op_sources, 1, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    /*If lock or pre-op failed on a brick, it is not a source. */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            local-&gt;transaction.pre_op_sources[i] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If brick is blamed by others, it is not a source. */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        for (j = 0; j &lt; priv-&gt;child_count; j++)</div><div class='add'>+            if (matrix[i][j] != 0)</div><div class='add'>+                local-&gt;transaction.pre_op_sources[j] = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_has_arbiter_fop_cbk_quorum (call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_boolean_t fop_failed = _gf_false;</div><div class='del'>-        unsigned char *pre_op_sources = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        pre_op_sources = local-&gt;transaction.pre_op_sources;</div><div class='del'>-</div><div class='del'>-        /* If the fop failed on the brick, it is not a source. */</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                        pre_op_sources[i] = 0;</div><div class='del'>-</div><div class='del'>-        switch (AFR_COUNT (pre_op_sources, priv-&gt;child_count)) {</div><div class='add'>+afr_has_arbiter_fop_cbk_quorum(call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_boolean_t fop_failed = _gf_false;</div><div class='add'>+    unsigned char *pre_op_sources = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    pre_op_sources = local-&gt;transaction.pre_op_sources;</div><div class='add'>+</div><div class='add'>+    /* If the fop failed on the brick, it is not a source. */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            pre_op_sources[i] = 0;</div><div class='add'>+</div><div class='add'>+    switch (AFR_COUNT(pre_op_sources, priv-&gt;child_count)) {</div><div class='ctx'>         case 1:</div><div class='del'>-                if (pre_op_sources[ARBITER_BRICK_INDEX])</div><div class='del'>-                        fop_failed = _gf_true;</div><div class='del'>-                break;</div><div class='del'>-        case 0:</div><div class='add'>+            if (pre_op_sources[ARBITER_BRICK_INDEX])</div><div class='ctx'>                 fop_failed = _gf_true;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+        case 0:</div><div class='add'>+            fop_failed = _gf_true;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fop_failed)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (fop_failed)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_txn_arbitrate_fop (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int pre_op_sources_count = 0;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        afr_compute_pre_op_sources (frame, this);</div><div class='del'>-        pre_op_sources_count = AFR_COUNT (local-&gt;transaction.pre_op_sources,</div><div class='del'>-                                          priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        /* If arbiter is the only source, do not proceed. */</div><div class='del'>-        if (pre_op_sources_count &lt; 2 &amp;&amp;</div><div class='del'>-            local-&gt;transaction.pre_op_sources[ARBITER_BRICK_INDEX]) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno =  ENOTCONN;</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                        local-&gt;transaction.failed_subvols[i] = 1;</div><div class='del'>-        }</div><div class='add'>+afr_txn_arbitrate_fop(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int pre_op_sources_count = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        afr_transaction_fop (frame, this);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    afr_compute_pre_op_sources(frame, this);</div><div class='add'>+    pre_op_sources_count = AFR_COUNT(local-&gt;transaction.pre_op_sources,</div><div class='add'>+                                     priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    /* If arbiter is the only source, do not proceed. */</div><div class='add'>+    if (pre_op_sources_count &lt; 2 &amp;&amp;</div><div class='add'>+        local-&gt;transaction.pre_op_sources[ARBITER_BRICK_INDEX]) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTCONN;</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+            local-&gt;transaction.failed_subvols[i] = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    afr_transaction_fop(frame, this);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_transaction_perform_fop (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        int           i      = 0;</div><div class='del'>-        int           ret    = 0;</div><div class='del'>-        int     failure_count = 0;</div><div class='del'>-        struct list_head shared;</div><div class='del'>-        afr_lock_t *lock = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;shared);</div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION &amp;&amp;</div><div class='del'>-            !local-&gt;transaction.inherited) {</div><div class='del'>-                ret = afr_write_subvol_set (frame, this);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        /*act as if operation failed on all subvols*/</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = -ret;</div><div class='del'>-                        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                                local-&gt;transaction.failed_subvols[i] = 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (local-&gt;pre_op_compat)</div><div class='del'>-		/* old mode, pre-op was done as afr_changelog_do()</div><div class='del'>-		   just now, before OP */</div><div class='del'>-		afr_changelog_pre_op_update (frame, this);</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on ||</div><div class='del'>-            local-&gt;transaction.inherited)</div><div class='del'>-                goto fop;</div><div class='del'>-        failure_count = AFR_COUNT (local-&gt;transaction.failed_subvols,</div><div class='del'>-                                   priv-&gt;child_count);</div><div class='del'>-        if (failure_count == priv-&gt;child_count) {</div><div class='del'>-                afr_handle_lock_acquire_failure (local, _gf_true);</div><div class='del'>-                return 0;</div><div class='del'>-        } else {</div><div class='del'>-                lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-                LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        lock-&gt;acquired = _gf_true;</div><div class='del'>-                        __afr_transaction_wake_shared (local, &amp;shared);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+afr_transaction_perform_fop(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int failure_count = 0;</div><div class='add'>+    struct list_head shared;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;shared);</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION &amp;&amp;</div><div class='add'>+        !local-&gt;transaction.inherited) {</div><div class='add'>+        ret = afr_write_subvol_set(frame, this);</div><div class='add'>+        if (ret) {</div><div class='add'>+            /*act as if operation failed on all subvols*/</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = -ret;</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+                local-&gt;transaction.failed_subvols[i] = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;pre_op_compat)</div><div class='add'>+        /* old mode, pre-op was done as afr_changelog_do()</div><div class='add'>+           just now, before OP */</div><div class='add'>+        afr_changelog_pre_op_update(frame, this);</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on || local-&gt;transaction.inherited)</div><div class='add'>+        goto fop;</div><div class='add'>+    failure_count = AFR_COUNT(local-&gt;transaction.failed_subvols,</div><div class='add'>+                              priv-&gt;child_count);</div><div class='add'>+    if (failure_count == priv-&gt;child_count) {</div><div class='add'>+        afr_handle_lock_acquire_failure(local, _gf_true);</div><div class='add'>+        return 0;</div><div class='add'>+    } else {</div><div class='add'>+        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            lock-&gt;acquired = _gf_true;</div><div class='add'>+            __afr_transaction_wake_shared(local, &amp;shared);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> fop:</div><div class='del'>-        /*  Perform fops with the lk-owner from top xlator.</div><div class='del'>-         *  Eg: lk-owner of posix-lk and flush should be same,</div><div class='del'>-         *  flush cant clear the  posix-lks without that lk-owner.</div><div class='del'>-         */</div><div class='del'>-        afr_save_lk_owner (frame);</div><div class='del'>-        frame-&gt;root-&gt;lk_owner =</div><div class='del'>-                local-&gt;transaction.main_frame-&gt;root-&gt;lk_owner;</div><div class='add'>+    /*  Perform fops with the lk-owner from top xlator.</div><div class='add'>+     *  Eg: lk-owner of posix-lk and flush should be same,</div><div class='add'>+     *  flush cant clear the  posix-lks without that lk-owner.</div><div class='add'>+     */</div><div class='add'>+    afr_save_lk_owner(frame);</div><div class='add'>+    frame-&gt;root-&gt;lk_owner = local-&gt;transaction.main_frame-&gt;root-&gt;lk_owner;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;arbiter_count == 1) {</div><div class='del'>-                afr_txn_arbitrate_fop (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                afr_transaction_fop (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;arbiter_count == 1) {</div><div class='add'>+        afr_txn_arbitrate_fop(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        afr_transaction_fop(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        afr_lock_resume_shared (&amp;shared);</div><div class='del'>-	return 0;</div><div class='add'>+    afr_lock_resume_shared(&amp;shared);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_set_pending_dict (afr_private_t *priv, dict_t *xattr, int **pending)</div><div class='add'>+afr_set_pending_dict(afr_private_t *priv, dict_t *xattr, int **pending)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_static_bin (xattr, priv-&gt;pending_key[i],</div><div class='del'>-					   pending[i],</div><div class='del'>-					   AFR_NUM_CHANGE_LOGS * sizeof (int));</div><div class='del'>-                /* 3 = data+metadata+entry */</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        ret = dict_set_static_bin(xattr, priv-&gt;pending_key[i], pending[i],</div><div class='add'>+                                  AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='add'>+        /* 3 = data+metadata+entry */</div><div class='ctx'> </div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {{{ pending */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_post_op_done (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_changelog_post_op_done(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        /* Fail the FOP if post-op did not succeed on quorum no. of bricks. */</div><div class='del'>-        if (!afr_changelog_has_quorum (local, this)) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                /*local-&gt;op_errno is already captured in changelog cbk*/</div><div class='del'>-        }</div><div class='add'>+    /* Fail the FOP if post-op did not succeed on quorum no. of bricks. */</div><div class='add'>+    if (!afr_changelog_has_quorum(local, this)) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        /*local-&gt;op_errno is already captured in changelog cbk*/</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;transaction.resume_stub) {</div><div class='del'>-		call_resume (local-&gt;transaction.resume_stub);</div><div class='del'>-		local-&gt;transaction.resume_stub = NULL;</div><div class='del'>-	}</div><div class='add'>+    if (local-&gt;transaction.resume_stub) {</div><div class='add'>+        call_resume(local-&gt;transaction.resume_stub);</div><div class='add'>+        local-&gt;transaction.resume_stub = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        int_lock-&gt;lock_cbk = afr_transaction_done;</div><div class='del'>-        afr_unlock (frame, this);</div><div class='add'>+    int_lock-&gt;lock_cbk = afr_transaction_done;</div><div class='add'>+    afr_unlock(frame, this);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-unsigned char*</div><div class='del'>-afr_locked_nodes_get (afr_transaction_type type, afr_internal_lock_t *int_lock)</div><div class='add'>+unsigned char *</div><div class='add'>+afr_locked_nodes_get(afr_transaction_type type, afr_internal_lock_t *int_lock)</div><div class='ctx'> {</div><div class='del'>-        unsigned char *locked_nodes = NULL;</div><div class='del'>-        switch (type) {</div><div class='add'>+    unsigned char *locked_nodes = NULL;</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case AFR_DATA_TRANSACTION:</div><div class='ctx'>         case AFR_METADATA_TRANSACTION:</div><div class='del'>-                locked_nodes = int_lock-&gt;locked_nodes;</div><div class='del'>-        break;</div><div class='add'>+            locked_nodes = int_lock-&gt;locked_nodes;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_ENTRY_TRANSACTION:</div><div class='ctx'>         case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='del'>-                /*Because same set of subvols participate in all lockee</div><div class='del'>-                 * entities*/</div><div class='del'>-                locked_nodes = int_lock-&gt;lockee[0].locked_nodes;</div><div class='del'>-        break;</div><div class='del'>-        }</div><div class='del'>-        return locked_nodes;</div><div class='add'>+            /*Because same set of subvols participate in all lockee</div><div class='add'>+             * entities*/</div><div class='add'>+            locked_nodes = int_lock-&gt;lockee[0].locked_nodes;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return locked_nodes;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_changelog_call_count (afr_transaction_type type,</div><div class='del'>-			  unsigned char *pre_op_subvols,</div><div class='del'>-                          unsigned char *failed_subvols,</div><div class='del'>-			  unsigned int child_count)</div><div class='add'>+afr_changelog_call_count(afr_transaction_type type,</div><div class='add'>+                         unsigned char *pre_op_subvols,</div><div class='add'>+                         unsigned char *failed_subvols,</div><div class='add'>+                         unsigned int child_count)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int call_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; child_count; i++) {</div><div class='del'>-                if (pre_op_subvols[i] &amp;&amp; !failed_subvols[i]) {</div><div class='del'>-                        call_count++;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; child_count; i++) {</div><div class='add'>+        if (pre_op_subvols[i] &amp;&amp; !failed_subvols[i]) {</div><div class='add'>+            call_count++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (type == AFR_ENTRY_RENAME_TRANSACTION)</div><div class='del'>-                call_count *= 2;</div><div class='add'>+    if (type == AFR_ENTRY_RENAME_TRANSACTION)</div><div class='add'>+        call_count *= 2;</div><div class='ctx'> </div><div class='del'>-        return call_count;</div><div class='add'>+    return call_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_txn_nothing_failed (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_txn_nothing_failed(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int i = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;thin_arbiter_count) {</div><div class='del'>-                /* We need to perform post-op even if 1 data brick was down</div><div class='del'>-                 * before the txn started.*/</div><div class='del'>-                if (AFR_COUNT (local-&gt;transaction.failed_subvols,</div><div class='del'>-                               priv-&gt;child_count))</div><div class='del'>-                        return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;thin_arbiter_count) {</div><div class='add'>+        /* We need to perform post-op even if 1 data brick was down</div><div class='add'>+         * before the txn started.*/</div><div class='add'>+        if (AFR_COUNT(local-&gt;transaction.failed_subvols, priv-&gt;child_count))</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;transaction.pre_op[i] &amp;&amp;</div><div class='del'>-                    local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                        return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.pre_op[i] &amp;&amp;</div><div class='add'>+            local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_handle_symmetric_errors (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_handle_symmetric_errors(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	if (afr_is_symmetric_error (frame, this))</div><div class='del'>-		__mark_all_success (frame, this);</div><div class='add'>+    if (afr_is_symmetric_error(frame, this))</div><div class='add'>+        __mark_all_success(frame, this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_has_quorum (unsigned char *subvols, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        unsigned int  quorum_count = 0;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        unsigned int  up_children_count = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        up_children_count = AFR_COUNT (subvols, priv-&gt;child_count);</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='del'>-                /*</div><div class='del'>-                 * Special case for auto-quorum with an even number of nodes.</div><div class='del'>-                 *</div><div class='del'>-                 * A replica set with even count N can only handle the same</div><div class='del'>-                 * number of failures as odd N-1 before losing "vanilla"</div><div class='del'>-                 * quorum, and the probability of more simultaneous failures is</div><div class='del'>-                 * actually higher.  For example, with a 1% chance of failure</div><div class='del'>-                 * we'd have a 0.03% chance of two simultaneous failures with</div><div class='del'>-                 * N=3 but a 0.06% chance with N=4.  However, the special case</div><div class='del'>-                 * is necessary for N=2 because there's no real quorum in that</div><div class='del'>-                 * case (i.e. can't normally survive *any* failures).  In that</div><div class='del'>-                 * case, we treat the first node as a tie-breaker, allowing</div><div class='del'>-                 * quorum to be retained in some cases while still honoring the</div><div class='del'>-                 * all-important constraint that there can not simultaneously</div><div class='del'>-                 * be two partitioned sets of nodes each believing they have</div><div class='del'>-                 * quorum.  Of two equally sized sets, the one without that</div><div class='del'>-                 * first node will lose.</div><div class='del'>-                 *</div><div class='del'>-                 * It turns out that the special case is beneficial for higher</div><div class='del'>-                 * values of N as well.  Continuing the example above, the</div><div class='del'>-                 * probability of losing quorum with N=4 and this type of</div><div class='del'>-                 * quorum is (very) slightly lower than with N=3 and vanilla</div><div class='del'>-                 * quorum.  The difference becomes even more pronounced with</div><div class='del'>-                 * higher N.  Therefore, even though such replica counts are</div><div class='del'>-                 * unlikely to be seen in practice, we might as well use the</div><div class='del'>-                 * "special" quorum then as well.</div><div class='del'>-                 */</div><div class='del'>-                if ((up_children_count * 2) == priv-&gt;child_count) {</div><div class='del'>-                        return subvols[0];</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+afr_has_quorum(unsigned char *subvols, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    unsigned int quorum_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    unsigned int up_children_count = 0;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='del'>-                quorum_count = priv-&gt;child_count/2 + 1;</div><div class='del'>-        } else {</div><div class='del'>-                quorum_count = priv-&gt;quorum_count;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    up_children_count = AFR_COUNT(subvols, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='add'>+        /*</div><div class='add'>+         * Special case for auto-quorum with an even number of nodes.</div><div class='add'>+         *</div><div class='add'>+         * A replica set with even count N can only handle the same</div><div class='add'>+         * number of failures as odd N-1 before losing "vanilla"</div><div class='add'>+         * quorum, and the probability of more simultaneous failures is</div><div class='add'>+         * actually higher.  For example, with a 1% chance of failure</div><div class='add'>+         * we'd have a 0.03% chance of two simultaneous failures with</div><div class='add'>+         * N=3 but a 0.06% chance with N=4.  However, the special case</div><div class='add'>+         * is necessary for N=2 because there's no real quorum in that</div><div class='add'>+         * case (i.e. can't normally survive *any* failures).  In that</div><div class='add'>+         * case, we treat the first node as a tie-breaker, allowing</div><div class='add'>+         * quorum to be retained in some cases while still honoring the</div><div class='add'>+         * all-important constraint that there can not simultaneously</div><div class='add'>+         * be two partitioned sets of nodes each believing they have</div><div class='add'>+         * quorum.  Of two equally sized sets, the one without that</div><div class='add'>+         * first node will lose.</div><div class='add'>+         *</div><div class='add'>+         * It turns out that the special case is beneficial for higher</div><div class='add'>+         * values of N as well.  Continuing the example above, the</div><div class='add'>+         * probability of losing quorum with N=4 and this type of</div><div class='add'>+         * quorum is (very) slightly lower than with N=3 and vanilla</div><div class='add'>+         * quorum.  The difference becomes even more pronounced with</div><div class='add'>+         * higher N.  Therefore, even though such replica counts are</div><div class='add'>+         * unlikely to be seen in practice, we might as well use the</div><div class='add'>+         * "special" quorum then as well.</div><div class='add'>+         */</div><div class='add'>+        if ((up_children_count * 2) == priv-&gt;child_count) {</div><div class='add'>+            return subvols[0];</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (up_children_count &gt;= quorum_count)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (priv-&gt;quorum_count == AFR_QUORUM_AUTO) {</div><div class='add'>+        quorum_count = priv-&gt;child_count / 2 + 1;</div><div class='add'>+    } else {</div><div class='add'>+        quorum_count = priv-&gt;quorum_count;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (up_children_count &gt;= quorum_count)</div><div class='add'>+        return _gf_true;</div><div class='add'>+</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_has_fop_quorum (call_frame_t *frame)</div><div class='add'>+afr_has_fop_quorum(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = frame-&gt;this;</div><div class='del'>-        afr_local_t     *local = frame-&gt;local;</div><div class='del'>-        unsigned char *locked_nodes = NULL;</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    unsigned char *locked_nodes = NULL;</div><div class='ctx'> </div><div class='del'>-        locked_nodes = afr_locked_nodes_get (local-&gt;transaction.type,</div><div class='del'>-                                             &amp;local-&gt;internal_lock);</div><div class='del'>-        return afr_has_quorum (locked_nodes, this);</div><div class='add'>+    locked_nodes = afr_locked_nodes_get(local-&gt;transaction.type,</div><div class='add'>+                                        &amp;local-&gt;internal_lock);</div><div class='add'>+    return afr_has_quorum(locked_nodes, this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_has_fop_cbk_quorum (call_frame_t *frame)</div><div class='add'>+afr_has_fop_cbk_quorum(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local   = frame-&gt;local;</div><div class='del'>-        xlator_t      *this    = frame-&gt;this;</div><div class='del'>-        afr_private_t *priv    = this-&gt;private;</div><div class='del'>-        unsigned char *success = alloca0(priv-&gt;child_count);</div><div class='del'>-        int           i        = 0;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    unsigned char *success = alloca0(priv-&gt;child_count);</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;transaction.pre_op[i])</div><div class='del'>-                        if (!local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                                success[i] = 1;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.pre_op[i])</div><div class='add'>+            if (!local-&gt;transaction.failed_subvols[i])</div><div class='add'>+                success[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return afr_has_quorum (success, this);</div><div class='add'>+    return afr_has_quorum(success, this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_need_dirty_marking (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_need_dirty_marking(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t           *priv           = this-&gt;private;</div><div class='del'>-        afr_local_t             *local          = NULL;</div><div class='del'>-        gf_boolean_t            need_dirty      = _gf_false;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    gf_boolean_t need_dirty = _gf_false;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;quorum_count || !local-&gt;optimistic_change_log)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!priv-&gt;quorum_count || !local-&gt;optimistic_change_log)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION ||</div><div class='del'>-            local-&gt;transaction.type == AFR_METADATA_TRANSACTION)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION ||</div><div class='add'>+        local-&gt;transaction.type == AFR_METADATA_TRANSACTION)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (AFR_COUNT (local-&gt;transaction.failed_subvols, priv-&gt;child_count) ==</div><div class='del'>-            priv-&gt;child_count)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (AFR_COUNT(local-&gt;transaction.failed_subvols, priv-&gt;child_count) ==</div><div class='add'>+        priv-&gt;child_count)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;arbiter_count) {</div><div class='del'>-                if (!afr_has_arbiter_fop_cbk_quorum (frame))</div><div class='del'>-                        need_dirty = _gf_true;</div><div class='del'>-        } else if (!afr_has_fop_cbk_quorum (frame)) {</div><div class='del'>-                need_dirty = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;arbiter_count) {</div><div class='add'>+        if (!afr_has_arbiter_fop_cbk_quorum(frame))</div><div class='add'>+            need_dirty = _gf_true;</div><div class='add'>+    } else if (!afr_has_fop_cbk_quorum(frame)) {</div><div class='add'>+        need_dirty = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return need_dirty;</div><div class='add'>+    return need_dirty;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_handle_quorum (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_handle_quorum(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        int           i      = 0;</div><div class='del'>-        const char    *file  = NULL;</div><div class='del'>-        uuid_t        gfid   = {0};</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    const char *file = NULL;</div><div class='add'>+    uuid_t gfid = {0};</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = frame-&gt;this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = frame-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;quorum_count == 0)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        /* If the fop already failed return right away to preserve errno */</div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                return;</div><div class='add'>+    if (priv-&gt;quorum_count == 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Network split may happen just after the fops are unwound, so check</div><div class='del'>-         * if the fop succeeded in a way it still follows quorum. If it doesn't,</div><div class='del'>-         * mark the fop as failure, mark the changelogs so it reflects that</div><div class='del'>-         * failure.</div><div class='del'>-         *</div><div class='del'>-         * Scenario:</div><div class='del'>-         * There are 3 mounts on 3 machines(node1, node2, node3) all writing to</div><div class='del'>-         * single file. Network split happened in a way that node1 can't see</div><div class='del'>-         * node2, node3. Node2, node3 both of them can't see node1. Now at the</div><div class='del'>-         * time of sending write all the bricks are up. Just after write fop is</div><div class='del'>-         * wound on node1, network split happens. Node1 thinks write fop failed</div><div class='del'>-         * on node2, node3 so marks pending changelog for those 2 extended</div><div class='del'>-         * attributes on node1. Node2, node3 thinks writes failed on node1 so</div><div class='del'>-         * they mark pending changelog for node1. When the network is stable</div><div class='del'>-         * again the file already is in split-brain. These checks prevent</div><div class='del'>-         * marking pending changelog on other subvolumes if the fop doesn't</div><div class='del'>-         * succeed in a way it is still following quorum. So with this fix what</div><div class='del'>-         * is happening is, node1 will have all pending changelog(FOOL) because</div><div class='del'>-         * the write succeeded only on node1 but failed on node2, node3 so</div><div class='del'>-         * instead of marking pending changelogs on node2, node3 it just treats</div><div class='del'>-         * the fop as failure and goes into DIRTY state. Where as node2, node3</div><div class='del'>-         * say they are sources and have pending changelog to node1 so there is</div><div class='del'>-         * no split-brain with the fix. The problem is eliminated completely.</div><div class='del'>-         */</div><div class='add'>+    /* If the fop already failed return right away to preserve errno */</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;arbiter_count) {</div><div class='del'>-                if (afr_has_arbiter_fop_cbk_quorum (frame))</div><div class='del'>-                        return;</div><div class='del'>-        } else if (afr_has_fop_cbk_quorum (frame)) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    /*</div><div class='add'>+     * Network split may happen just after the fops are unwound, so check</div><div class='add'>+     * if the fop succeeded in a way it still follows quorum. If it doesn't,</div><div class='add'>+     * mark the fop as failure, mark the changelogs so it reflects that</div><div class='add'>+     * failure.</div><div class='add'>+     *</div><div class='add'>+     * Scenario:</div><div class='add'>+     * There are 3 mounts on 3 machines(node1, node2, node3) all writing to</div><div class='add'>+     * single file. Network split happened in a way that node1 can't see</div><div class='add'>+     * node2, node3. Node2, node3 both of them can't see node1. Now at the</div><div class='add'>+     * time of sending write all the bricks are up. Just after write fop is</div><div class='add'>+     * wound on node1, network split happens. Node1 thinks write fop failed</div><div class='add'>+     * on node2, node3 so marks pending changelog for those 2 extended</div><div class='add'>+     * attributes on node1. Node2, node3 thinks writes failed on node1 so</div><div class='add'>+     * they mark pending changelog for node1. When the network is stable</div><div class='add'>+     * again the file already is in split-brain. These checks prevent</div><div class='add'>+     * marking pending changelog on other subvolumes if the fop doesn't</div><div class='add'>+     * succeed in a way it is still following quorum. So with this fix what</div><div class='add'>+     * is happening is, node1 will have all pending changelog(FOOL) because</div><div class='add'>+     * the write succeeded only on node1 but failed on node2, node3 so</div><div class='add'>+     * instead of marking pending changelogs on node2, node3 it just treats</div><div class='add'>+     * the fop as failure and goes into DIRTY state. Where as node2, node3</div><div class='add'>+     * say they are sources and have pending changelog to node1 so there is</div><div class='add'>+     * no split-brain with the fix. The problem is eliminated completely.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;arbiter_count) {</div><div class='add'>+        if (afr_has_arbiter_fop_cbk_quorum(frame))</div><div class='add'>+            return;</div><div class='add'>+    } else if (afr_has_fop_cbk_quorum(frame)) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (afr_need_dirty_marking (frame, this))</div><div class='del'>-                goto set_response;</div><div class='add'>+    if (afr_need_dirty_marking(frame, this))</div><div class='add'>+        goto set_response;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;transaction.pre_op[i])</div><div class='del'>-                        afr_transaction_fop_failed (frame, frame-&gt;this, i);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.pre_op[i])</div><div class='add'>+            afr_transaction_fop_failed(frame, frame-&gt;this, i);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> set_response:</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;op_errno = afr_final_errno (local, priv);</div><div class='del'>-        if (local-&gt;op_errno == 0)</div><div class='del'>-                local-&gt;op_errno = afr_quorum_errno (priv);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                gf_uuid_copy (gfid, local-&gt;fd-&gt;inode-&gt;gfid);</div><div class='del'>-                file = uuid_utoa (gfid);</div><div class='del'>-        } else {</div><div class='del'>-                loc_path (&amp;local-&gt;loc, local-&gt;loc.name);</div><div class='del'>-                file = local-&gt;loc.path;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                AFR_MSG_QUORUM_FAIL, "%s: Failing %s as quorum is not met",</div><div class='del'>-                file, gf_fop_list[local-&gt;op]);</div><div class='del'>-</div><div class='del'>-        switch (local-&gt;transaction.type) {</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = afr_final_errno(local, priv);</div><div class='add'>+    if (local-&gt;op_errno == 0)</div><div class='add'>+        local-&gt;op_errno = afr_quorum_errno(priv);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        gf_uuid_copy(gfid, local-&gt;fd-&gt;inode-&gt;gfid);</div><div class='add'>+        file = uuid_utoa(gfid);</div><div class='add'>+    } else {</div><div class='add'>+        loc_path(&amp;local-&gt;loc, local-&gt;loc.name);</div><div class='add'>+        file = local-&gt;loc.path;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+           AFR_MSG_QUORUM_FAIL, "%s: Failing %s as quorum is not met", file,</div><div class='add'>+           gf_fop_list[local-&gt;op]);</div><div class='add'>+</div><div class='add'>+    switch (local-&gt;transaction.type) {</div><div class='ctx'>         case AFR_ENTRY_TRANSACTION:</div><div class='ctx'>         case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='del'>-                afr_pick_error_xdata (local, priv, local-&gt;parent,</div><div class='del'>-                                      local-&gt;readable, local-&gt;parent2,</div><div class='del'>-                                      local-&gt;readable2);</div><div class='del'>-                break;</div><div class='add'>+            afr_pick_error_xdata(local, priv, local-&gt;parent, local-&gt;readable,</div><div class='add'>+                                 local-&gt;parent2, local-&gt;readable2);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                afr_pick_error_xdata (local, priv, local-&gt;inode,</div><div class='del'>-                                      local-&gt;readable, NULL, NULL);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            afr_pick_error_xdata(local, priv, local-&gt;inode, local-&gt;readable,</div><div class='add'>+                                 NULL, NULL);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_fill_ta_loc (xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        loc-&gt;parent = inode_ref (priv-&gt;root_inode);</div><div class='del'>-        gf_uuid_copy (loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='del'>-        loc-&gt;name = priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX];</div><div class='del'>-        gf_uuid_copy (loc-&gt;gfid, priv-&gt;ta_gfid);</div><div class='del'>-        loc-&gt;inode = inode_new (loc-&gt;parent-&gt;table);</div><div class='del'>-        if (!loc-&gt;inode) {</div><div class='del'>-                loc_wipe(loc);</div><div class='del'>-                return -ENOMEM;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+afr_fill_ta_loc(xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    loc-&gt;parent = inode_ref(priv-&gt;root_inode);</div><div class='add'>+    gf_uuid_copy(loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='add'>+    loc-&gt;name = priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX];</div><div class='add'>+    gf_uuid_copy(loc-&gt;gfid, priv-&gt;ta_gfid);</div><div class='add'>+    loc-&gt;inode = inode_new(loc-&gt;parent-&gt;table);</div><div class='add'>+    if (!loc-&gt;inode) {</div><div class='add'>+        loc_wipe(loc);</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_thin_arbiter_post_op (xlator_t *this, afr_local_t *local)</div><div class='del'>-{</div><div class='del'>-        int ret = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-        int failed_count = 0;</div><div class='del'>-        struct gf_flock flock = {0, };</div><div class='del'>-        loc_t loc = {0,};</div><div class='del'>-        int i = 0;</div><div class='add'>+afr_changelog_thin_arbiter_post_op(xlator_t *this, afr_local_t *local)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int failed_count = 0;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;thin_arbiter_count)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;thin_arbiter_count)</div><div class='del'>-                return 0;</div><div class='add'>+    failed_count = AFR_COUNT(local-&gt;transaction.failed_subvols,</div><div class='add'>+                             priv-&gt;child_count);</div><div class='add'>+    if (!failed_count)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='add'>+    GF_ASSERT(failed_count == 1);</div><div class='add'>+    ret = afr_fill_ta_loc(this, &amp;loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Failed to populate thin-arbiter loc for: %s.", loc.name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        ret = dict_set_static_bin(xattr, priv-&gt;pending_key[i],</div><div class='add'>+                                  local-&gt;pending[i],</div><div class='add'>+                                  AFR_NUM_CHANGE_LOGS * sizeof(int));</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+    flock.l_start = 0;</div><div class='add'>+    flock.l_len = 0;</div><div class='add'>+</div><div class='add'>+    /*TODO: Convert to two domain locking. */</div><div class='add'>+    ret = syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+                         AFR_TA_DOM_NOTIFY, &amp;loc, F_SETLKW, &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_xattrop(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc,</div><div class='add'>+                         GF_XATTROP_ADD_ARRAY, xattr, NULL, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret == -EINVAL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Thin-arbiter has denied post-op on %s for gfid %s.",</div><div class='add'>+               priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    } else if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='add'>+               "Post-op on thin-arbiter id file %s failed for gfid %s.",</div><div class='add'>+               priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX],</div><div class='add'>+               uuid_utoa(local-&gt;inode-&gt;gfid));</div><div class='add'>+    }</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    syncop_inodelk(priv-&gt;children[THIN_ARBITER_BRICK_INDEX], AFR_TA_DOM_NOTIFY,</div><div class='add'>+                   &amp;loc, F_SETLK, &amp;flock, NULL, NULL);</div><div class='add'>+out:</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        failed_count = AFR_COUNT (local-&gt;transaction.failed_subvols,</div><div class='del'>-                                  priv-&gt;child_count);</div><div class='del'>-        if (!failed_count)</div><div class='del'>-                return 0;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (failed_count == 1);</div><div class='del'>-        ret = afr_fill_ta_loc (this, &amp;loc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Failed to populate thin-arbiter loc for: %s.",</div><div class='del'>-                        loc.name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+afr_changelog_post_op_now(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int idx = 0;</div><div class='add'>+    int nothing_failed = 1;</div><div class='add'>+    gf_boolean_t need_undirty = _gf_false;</div><div class='add'>+</div><div class='add'>+    afr_handle_quorum(frame, this);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    idx = afr_index_for_transaction_type(local-&gt;transaction.type);</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                ret = dict_set_static_bin (xattr, priv-&gt;pending_key[i],</div><div class='del'>-                                           local-&gt;pending[i],</div><div class='del'>-                                           AFR_NUM_CHANGE_LOGS * sizeof (int));</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    nothing_failed = afr_txn_nothing_failed(frame, this);</div><div class='add'>+</div><div class='add'>+    if (afr_changelog_pre_op_uninherit(frame, this))</div><div class='add'>+        need_undirty = _gf_false;</div><div class='add'>+    else</div><div class='add'>+        need_undirty = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;op_ret &lt; 0 &amp;&amp; !nothing_failed) {</div><div class='add'>+        if (afr_need_dirty_marking(frame, this)) {</div><div class='add'>+            local-&gt;dirty[idx] = hton32(1);</div><div class='add'>+            goto set_dirty;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-        flock.l_start = 0;</div><div class='del'>-        flock.l_len = 0;</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*TODO: Convert to two domain locking. */</div><div class='del'>-        ret = syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                              AFR_TA_DOM_NOTIFY, &amp;loc, F_SETLKW, &amp;flock,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (nothing_failed &amp;&amp; !need_undirty) {</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;transaction.in_flight_sb) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = local-&gt;transaction.in_flight_sb_errno;</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            local-&gt;pending[i][idx] = hton32(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_set_pending_dict(priv, xattr, local-&gt;pending);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_xattrop (priv-&gt;children[THIN_ARBITER_BRICK_INDEX], &amp;loc,</div><div class='del'>-                              GF_XATTROP_ADD_ARRAY, xattr, NULL, NULL, NULL);</div><div class='add'>+    ret = afr_changelog_thin_arbiter_post_op(this, local);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == -EINVAL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Thin-arbiter has denied post-op on %s for gfid %s.",</div><div class='del'>-                        priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                        uuid_utoa (local-&gt;inode-&gt;gfid));</div><div class='add'>+    if (need_undirty)</div><div class='add'>+        local-&gt;dirty[idx] = hton32(-1);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;dirty[idx] = hton32(0);</div><div class='ctx'> </div><div class='del'>-        } else if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, AFR_MSG_THIN_ARB,</div><div class='del'>-                        "Post-op on thin-arbiter id file %s failed for gfid %s.",</div><div class='del'>-                        priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                        uuid_utoa (local-&gt;inode-&gt;gfid));</div><div class='del'>-        }</div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='del'>-        syncop_inodelk (priv-&gt;children[THIN_ARBITER_BRICK_INDEX],</div><div class='del'>-                        AFR_TA_DOM_NOTIFY, &amp;loc, F_SETLK, &amp;flock, NULL, NULL);</div><div class='add'>+set_dirty:</div><div class='add'>+    ret = dict_set_static_bin(xattr, AFR_DIRTY, local-&gt;dirty,</div><div class='add'>+                              sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='add'>+    if (ret) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        afr_changelog_post_op_done(frame, this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    afr_changelog_do(frame, this, xattr, afr_changelog_post_op_done,</div><div class='add'>+                     AFR_TRANSACTION_POST_OP);</div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-afr_changelog_post_op_now (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_private_t           *priv           = this-&gt;private;</div><div class='del'>-        afr_local_t             *local          = NULL;</div><div class='del'>-        dict_t                  *xattr          = NULL;</div><div class='del'>-        int                     i               = 0;</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        int                     idx             = 0;</div><div class='del'>-        int                     nothing_failed  = 1;</div><div class='del'>-        gf_boolean_t            need_undirty    = _gf_false;</div><div class='del'>-</div><div class='del'>-        afr_handle_quorum (frame, this);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        idx = afr_index_for_transaction_type (local-&gt;transaction.type);</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                afr_changelog_post_op_done (frame, this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+gf_boolean_t</div><div class='add'>+afr_changelog_pre_op_uninherit(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    int type = 0;</div><div class='ctx'> </div><div class='del'>-        nothing_failed = afr_txn_nothing_failed (frame, this);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    ctx = local-&gt;inode_ctx;</div><div class='ctx'> </div><div class='del'>-	if (afr_changelog_pre_op_uninherit (frame, this))</div><div class='del'>-		need_undirty = _gf_false;</div><div class='del'>-	else</div><div class='del'>-		need_undirty = _gf_true;</div><div class='add'>+    type = afr_index_for_transaction_type(local-&gt;transaction.type);</div><div class='add'>+    if (type != AFR_DATA_TRANSACTION)</div><div class='add'>+        return !local-&gt;transaction.dirtied;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret &lt; 0 &amp;&amp; !nothing_failed) {</div><div class='del'>-                if (afr_need_dirty_marking (frame, this)) {</div><div class='del'>-                        local-&gt;dirty[idx] = hton32(1);</div><div class='del'>-                        goto set_dirty;</div><div class='del'>-                }</div><div class='add'>+    if (local-&gt;transaction.no_uninherit)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-                afr_changelog_post_op_done (frame, this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* This function must be idempotent. So check if we</div><div class='add'>+       were called before and return the same answer again.</div><div class='ctx'> </div><div class='del'>-	if (nothing_failed &amp;&amp; !need_undirty) {</div><div class='del'>-		afr_changelog_post_op_done (frame, this);</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='add'>+       It is important to keep this function idempotent for</div><div class='add'>+       the call in afr_changelog_post_op_safe() to not have</div><div class='add'>+       side effects on the call from afr_changelog_post_op_now()</div><div class='add'>+    */</div><div class='add'>+    if (local-&gt;transaction.uninherit_done)</div><div class='add'>+        return local-&gt;transaction.uninherit_value;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;transaction.in_flight_sb) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = local-&gt;transaction.in_flight_sb_errno;</div><div class='del'>-                afr_changelog_post_op_done (frame, this);</div><div class='del'>-                goto out;</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (local-&gt;transaction.pre_op[i] != ctx-&gt;pre_op_done[type][i]) {</div><div class='add'>+                ret = !local-&gt;transaction.dirtied;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (ctx-&gt;inherited[type]) {</div><div class='add'>+            ret = _gf_true;</div><div class='add'>+            ctx-&gt;inherited[type]--;</div><div class='add'>+        } else if (ctx-&gt;on_disk[type]) {</div><div class='add'>+            ret = _gf_false;</div><div class='add'>+            ctx-&gt;on_disk[type]--;</div><div class='add'>+        } else {</div><div class='add'>+            /* ASSERT */</div><div class='add'>+            ret = _gf_false;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (local-&gt;transaction.failed_subvols[i])</div><div class='del'>-			local-&gt;pending[i][idx] = hton32(1);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	ret = afr_set_pending_dict (priv, xattr, local-&gt;pending);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = ENOMEM;</div><div class='del'>-		afr_changelog_post_op_done (frame, this);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        ret = afr_changelog_thin_arbiter_post_op (this, local);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-		afr_changelog_post_op_done (frame, this);</div><div class='del'>-                goto out;</div><div class='add'>+        if (!ctx-&gt;inherited[type] &amp;&amp; !ctx-&gt;on_disk[type]) {</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+                ctx-&gt;pre_op_done[type][i] = 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (need_undirty)</div><div class='del'>-		local-&gt;dirty[idx] = hton32(-1);</div><div class='del'>-	else</div><div class='del'>-		local-&gt;dirty[idx] = hton32(0);</div><div class='del'>-</div><div class='del'>-set_dirty:</div><div class='del'>-	ret = dict_set_static_bin (xattr, AFR_DIRTY, local-&gt;dirty,</div><div class='del'>-				   sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='del'>-	if (ret) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = ENOMEM;</div><div class='del'>-		afr_changelog_post_op_done (frame, this);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        afr_changelog_do (frame, this, xattr, afr_changelog_post_op_done,</div><div class='del'>-                          AFR_TRANSACTION_POST_OP);</div><div class='del'>-out:</div><div class='del'>-	if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-gf_boolean_t</div><div class='del'>-afr_changelog_pre_op_uninherit (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	gf_boolean_t ret = _gf_false;</div><div class='del'>-	int type = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-        ctx = local-&gt;inode_ctx;</div><div class='del'>-</div><div class='del'>-	type = afr_index_for_transaction_type (local-&gt;transaction.type);</div><div class='del'>-	if (type != AFR_DATA_TRANSACTION)</div><div class='del'>-		return !local-&gt;transaction.dirtied;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;transaction.no_uninherit)</div><div class='del'>-		return _gf_false;</div><div class='del'>-</div><div class='del'>-	/* This function must be idempotent. So check if we</div><div class='del'>-	   were called before and return the same answer again.</div><div class='del'>-</div><div class='del'>-	   It is important to keep this function idempotent for</div><div class='del'>-	   the call in afr_changelog_post_op_safe() to not have</div><div class='del'>-	   side effects on the call from afr_changelog_post_op_now()</div><div class='del'>-	*/</div><div class='del'>-	if (local-&gt;transaction.uninherit_done)</div><div class='del'>-		return local-&gt;transaction.uninherit_value;</div><div class='del'>-</div><div class='del'>-	LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			if (local-&gt;transaction.pre_op[i] !=</div><div class='del'>-			    ctx-&gt;pre_op_done[type][i]) {</div><div class='del'>-				ret = !local-&gt;transaction.dirtied;</div><div class='del'>-				goto unlock;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (ctx-&gt;inherited[type]) {</div><div class='del'>-			ret = _gf_true;</div><div class='del'>-			ctx-&gt;inherited[type]--;</div><div class='del'>-		} else if (ctx-&gt;on_disk[type]) {</div><div class='del'>-			ret = _gf_false;</div><div class='del'>-			ctx-&gt;on_disk[type]--;</div><div class='del'>-		} else {</div><div class='del'>-			/* ASSERT */</div><div class='del'>-			ret = _gf_false;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (!ctx-&gt;inherited[type] &amp;&amp; !ctx-&gt;on_disk[type]) {</div><div class='del'>-			for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-				ctx-&gt;pre_op_done[type][i] = 0;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-	local-&gt;transaction.uninherit_done = _gf_true;</div><div class='del'>-	local-&gt;transaction.uninherit_value = ret;</div><div class='add'>+    local-&gt;transaction.uninherit_done = _gf_true;</div><div class='add'>+    local-&gt;transaction.uninherit_value = ret;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_changelog_pre_op_inherit (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_changelog_pre_op_inherit(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	gf_boolean_t ret = _gf_false;</div><div class='del'>-	int type = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    int type = 0;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;transaction.type != AFR_DATA_TRANSACTION)</div><div class='del'>-		return _gf_false;</div><div class='add'>+    if (local-&gt;transaction.type != AFR_DATA_TRANSACTION)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-	type = afr_index_for_transaction_type (local-&gt;transaction.type);</div><div class='add'>+    type = afr_index_for_transaction_type(local-&gt;transaction.type);</div><div class='ctx'> </div><div class='del'>-	LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		if (!local-&gt;inode_ctx-&gt;on_disk[type]) {</div><div class='del'>-			/* nothing to inherit yet */</div><div class='del'>-			ret = _gf_false;</div><div class='del'>-			goto unlock;</div><div class='del'>-		}</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!local-&gt;inode_ctx-&gt;on_disk[type]) {</div><div class='add'>+            /* nothing to inherit yet */</div><div class='add'>+            ret = _gf_false;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-			if (local-&gt;transaction.pre_op[i] !=</div><div class='del'>-			    local-&gt;inode_ctx-&gt;pre_op_done[type][i]) {</div><div class='del'>-				/* either inherit exactly, or don't */</div><div class='del'>-				ret = _gf_false;</div><div class='del'>-				goto unlock;</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            if (local-&gt;transaction.pre_op[i] !=</div><div class='add'>+                local-&gt;inode_ctx-&gt;pre_op_done[type][i]) {</div><div class='add'>+                /* either inherit exactly, or don't */</div><div class='add'>+                ret = _gf_false;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		local-&gt;inode_ctx-&gt;inherited[type]++;</div><div class='add'>+        local-&gt;inode_ctx-&gt;inherited[type]++;</div><div class='ctx'> </div><div class='del'>-		ret = _gf_true;</div><div class='add'>+        ret = _gf_true;</div><div class='ctx'> </div><div class='del'>-		local-&gt;transaction.inherited = _gf_true;</div><div class='del'>-	}</div><div class='add'>+        local-&gt;transaction.inherited = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-	UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_changelog_pre_op_update (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	gf_boolean_t ret = _gf_false;</div><div class='del'>-	int type = 0;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION ||</div><div class='del'>-            local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION)</div><div class='del'>-                return _gf_false;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;transaction.inherited)</div><div class='del'>-		/* was already inherited in afr_changelog_pre_op */</div><div class='del'>-		return _gf_false;</div><div class='del'>-</div><div class='del'>-	if (!local-&gt;transaction.dirtied)</div><div class='del'>-		return _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!afr_txn_nothing_failed (frame, this))</div><div class='del'>-		return _gf_false;</div><div class='del'>-</div><div class='del'>-	type = afr_index_for_transaction_type (local-&gt;transaction.type);</div><div class='del'>-</div><div class='del'>-	ret = _gf_false;</div><div class='del'>-</div><div class='del'>-	LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-		if (!local-&gt;inode_ctx-&gt;on_disk[type]) {</div><div class='del'>-			for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-				local-&gt;inode_ctx-&gt;pre_op_done[type][i] =</div><div class='del'>-                                        (!local-&gt;transaction.failed_subvols[i]);</div><div class='del'>-		} else {</div><div class='del'>-			for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-				if (local-&gt;inode_ctx-&gt;pre_op_done[type][i] !=</div><div class='del'>-				    (!local-&gt;transaction.failed_subvols[i])) {</div><div class='del'>-					local-&gt;transaction.no_uninherit = 1;</div><div class='del'>-					goto unlock;</div><div class='del'>-				}</div><div class='del'>-		}</div><div class='del'>-		local-&gt;inode_ctx-&gt;on_disk[type]++;</div><div class='del'>-</div><div class='del'>-		ret = _gf_true;</div><div class='del'>-	}</div><div class='del'>-unlock:</div><div class='del'>-	UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+afr_changelog_pre_op_update(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    int type = 0;</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    if (local-&gt;transaction.type == AFR_ENTRY_TRANSACTION ||</div><div class='add'>+        local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-afr_changelog_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        int child_index = -1;</div><div class='add'>+    if (local-&gt;transaction.inherited)</div><div class='add'>+        /* was already inherited in afr_changelog_pre_op */</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        child_index = (long) cookie;</div><div class='add'>+    if (!local-&gt;transaction.dirtied)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                afr_transaction_fop_failed (frame, this, child_index);</div><div class='del'>-        }</div><div class='add'>+    if (!afr_txn_nothing_failed(frame, this))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                local-&gt;transaction.changelog_xdata[child_index] = dict_ref (xattr);</div><div class='add'>+    type = afr_index_for_transaction_type(local-&gt;transaction.type);</div><div class='ctx'> </div><div class='del'>-        call_count = afr_frame_return (frame);</div><div class='add'>+    ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                local-&gt;transaction.changelog_resume (frame, this);</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!local-&gt;inode_ctx-&gt;on_disk[type]) {</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+                local-&gt;inode_ctx-&gt;pre_op_done[type][i] =</div><div class='add'>+                    (!local-&gt;transaction.failed_subvols[i]);</div><div class='add'>+        } else {</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+                if (local-&gt;inode_ctx-&gt;pre_op_done[type][i] !=</div><div class='add'>+                    (!local-&gt;transaction.failed_subvols[i])) {</div><div class='add'>+                    local-&gt;transaction.no_uninherit = 1;</div><div class='add'>+                    goto unlock;</div><div class='add'>+                }</div><div class='ctx'>         }</div><div class='add'>+        local-&gt;inode_ctx-&gt;on_disk[type]++;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-afr_changelog_populate_xdata (call_frame_t *frame, afr_xattrop_type_t op,</div><div class='del'>-                              dict_t **xdata, dict_t **newloc_xdata)</div><div class='del'>-{</div><div class='del'>-        int              i                    = 0;</div><div class='del'>-        int              ret                  = 0;</div><div class='del'>-        char            *key                  = NULL;</div><div class='del'>-        const char      *name                 = NULL;</div><div class='del'>-        dict_t          *xdata1               = NULL;</div><div class='del'>-        dict_t          *xdata2               = NULL;</div><div class='del'>-        xlator_t        *this                 = NULL;</div><div class='del'>-        afr_local_t     *local                = NULL;</div><div class='del'>-        afr_private_t   *priv                 = NULL;</div><div class='del'>-        gf_boolean_t     need_entry_key_set   = _gf_true;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = THIS;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;transaction.type == AFR_DATA_TRANSACTION ||</div><div class='del'>-            local-&gt;transaction.type == AFR_METADATA_TRANSACTION)</div><div class='del'>-                goto out;</div><div class='add'>+int</div><div class='add'>+afr_changelog_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    int child_index = -1;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;esh_granular)</div><div class='del'>-                goto out;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    child_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        xdata1 = dict_new();</div><div class='del'>-        if (!xdata1)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        afr_transaction_fop_failed(frame, this, child_index);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xattr)</div><div class='add'>+        local-&gt;transaction.changelog_xdata[child_index] = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-        name = local-&gt;loc.name;</div><div class='del'>-        if (local-&gt;op == GF_FOP_LINK)</div><div class='del'>-                name = local-&gt;newloc.name;</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        switch (op) {</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        local-&gt;transaction.changelog_resume(frame, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+afr_changelog_populate_xdata(call_frame_t *frame, afr_xattrop_type_t op,</div><div class='add'>+                             dict_t **xdata, dict_t **newloc_xdata)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    const char *name = NULL;</div><div class='add'>+    dict_t *xdata1 = NULL;</div><div class='add'>+    dict_t *xdata2 = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t need_entry_key_set = _gf_true;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = THIS;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;transaction.type == AFR_DATA_TRANSACTION ||</div><div class='add'>+        local-&gt;transaction.type == AFR_METADATA_TRANSACTION)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;esh_granular)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    xdata1 = dict_new();</div><div class='add'>+    if (!xdata1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    name = local-&gt;loc.name;</div><div class='add'>+    if (local-&gt;op == GF_FOP_LINK)</div><div class='add'>+        name = local-&gt;newloc.name;</div><div class='add'>+</div><div class='add'>+    switch (op) {</div><div class='ctx'>         case AFR_TRANSACTION_PRE_OP:</div><div class='del'>-                key = GF_XATTROP_ENTRY_IN_KEY;</div><div class='del'>-                break;</div><div class='add'>+            key = GF_XATTROP_ENTRY_IN_KEY;</div><div class='add'>+            break;</div><div class='ctx'>         case AFR_TRANSACTION_POST_OP:</div><div class='del'>-                if (afr_txn_nothing_failed (frame, this)) {</div><div class='del'>-                        key = GF_XATTROP_ENTRY_OUT_KEY;</div><div class='del'>-                        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                                if (!local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                                        continue;</div><div class='del'>-                                need_entry_key_set = _gf_false;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        /* If the transaction itself did not fail and there</div><div class='del'>-                         * are no failed subvolumes, check whether the fop</div><div class='del'>-                         * failed due to a symmetric error. If it did, do</div><div class='del'>-                         * not set the ENTRY_OUT xattr which would end up</div><div class='del'>-                         * deleting a name index which was created possibly by</div><div class='del'>-                         * an earlier entry txn that may have failed on some</div><div class='del'>-                         * of the sub-volumes.</div><div class='del'>-                         */</div><div class='del'>-                        if (local-&gt;op_ret)</div><div class='del'>-                                need_entry_key_set = _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        key = GF_XATTROP_ENTRY_IN_KEY;</div><div class='add'>+            if (afr_txn_nothing_failed(frame, this)) {</div><div class='add'>+                key = GF_XATTROP_ENTRY_OUT_KEY;</div><div class='add'>+                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                    if (!local-&gt;transaction.failed_subvols[i])</div><div class='add'>+                        continue;</div><div class='add'>+                    need_entry_key_set = _gf_false;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+                /* If the transaction itself did not fail and there</div><div class='add'>+                 * are no failed subvolumes, check whether the fop</div><div class='add'>+                 * failed due to a symmetric error. If it did, do</div><div class='add'>+                 * not set the ENTRY_OUT xattr which would end up</div><div class='add'>+                 * deleting a name index which was created possibly by</div><div class='add'>+                 * an earlier entry txn that may have failed on some</div><div class='add'>+                 * of the sub-volumes.</div><div class='add'>+                 */</div><div class='add'>+                if (local-&gt;op_ret)</div><div class='add'>+                    need_entry_key_set = _gf_false;</div><div class='add'>+            } else {</div><div class='add'>+                key = GF_XATTROP_ENTRY_IN_KEY;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (need_entry_key_set) {</div><div class='del'>-                ret = dict_set_str (xdata1, key, (char *)name);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s/%s: Could not set %s key during xattrop",</div><div class='del'>-                                uuid_utoa (local-&gt;loc.pargfid), local-&gt;loc.name,</div><div class='del'>-                                key);</div><div class='del'>-                if (local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION) {</div><div class='del'>-                        xdata2 = dict_new ();</div><div class='del'>-                        if (!xdata2)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_str (xdata2, key,</div><div class='del'>-                                            (char *)local-&gt;newloc.name);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        AFR_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "%s/%s: Could not set %s key during "</div><div class='del'>-                                        "xattrop",</div><div class='del'>-                                        uuid_utoa (local-&gt;newloc.pargfid),</div><div class='del'>-                                        local-&gt;newloc.name, key);</div><div class='del'>-                }</div><div class='add'>+    if (need_entry_key_set) {</div><div class='add'>+        ret = dict_set_str(xdata1, key, (char *)name);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s/%s: Could not set %s key during xattrop",</div><div class='add'>+                   uuid_utoa(local-&gt;loc.pargfid), local-&gt;loc.name, key);</div><div class='add'>+        if (local-&gt;transaction.type == AFR_ENTRY_RENAME_TRANSACTION) {</div><div class='add'>+            xdata2 = dict_new();</div><div class='add'>+            if (!xdata2)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            ret = dict_set_str(xdata2, key, (char *)local-&gt;newloc.name);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "%s/%s: Could not set %s key during "</div><div class='add'>+                       "xattrop",</div><div class='add'>+                       uuid_utoa(local-&gt;newloc.pargfid), local-&gt;newloc.name,</div><div class='add'>+                       key);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *xdata = xdata1;</div><div class='del'>-        *newloc_xdata = xdata2;</div><div class='del'>-        xdata1 = xdata2 = NULL;</div><div class='add'>+    *xdata = xdata1;</div><div class='add'>+    *newloc_xdata = xdata2;</div><div class='add'>+    xdata1 = xdata2 = NULL;</div><div class='ctx'> out:</div><div class='del'>-        if (xdata1)</div><div class='del'>-                dict_unref (xdata1);</div><div class='del'>-        return;</div><div class='add'>+    if (xdata1)</div><div class='add'>+        dict_unref(xdata1);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_prepare (xlator_t *this, call_frame_t *frame, int *call_count,</div><div class='del'>-                       afr_changelog_resume_t changelog_resume,</div><div class='del'>-                       afr_xattrop_type_t op, dict_t **xdata,</div><div class='del'>-                       dict_t **newloc_xdata)</div><div class='add'>+afr_changelog_prepare(xlator_t *this, call_frame_t *frame, int *call_count,</div><div class='add'>+                      afr_changelog_resume_t changelog_resume,</div><div class='add'>+                      afr_xattrop_type_t op, dict_t **xdata,</div><div class='add'>+                      dict_t **newloc_xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv  = NULL;</div><div class='del'>-        afr_local_t   *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        *call_count = afr_changelog_call_count (local-&gt;transaction.type,</div><div class='del'>-                                               local-&gt;transaction.pre_op,</div><div class='del'>-                                              local-&gt;transaction.failed_subvols,</div><div class='del'>-                                               priv-&gt;child_count);</div><div class='add'>+    *call_count = afr_changelog_call_count(</div><div class='add'>+        local-&gt;transaction.type, local-&gt;transaction.pre_op,</div><div class='add'>+        local-&gt;transaction.failed_subvols, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        if (*call_count == 0) {</div><div class='del'>-                changelog_resume (frame, this);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (*call_count == 0) {</div><div class='add'>+        changelog_resume(frame, this);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        afr_changelog_populate_xdata (frame, op, xdata, newloc_xdata);</div><div class='del'>-        local-&gt;call_count = *call_count;</div><div class='add'>+    afr_changelog_populate_xdata(frame, op, xdata, newloc_xdata);</div><div class='add'>+    local-&gt;call_count = *call_count;</div><div class='ctx'> </div><div class='del'>-        local-&gt;transaction.changelog_resume = changelog_resume;</div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;transaction.changelog_resume = changelog_resume;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_do (call_frame_t *frame, xlator_t *this, dict_t *xattr,</div><div class='del'>-		  afr_changelog_resume_t changelog_resume,</div><div class='del'>-                  afr_xattrop_type_t op)</div><div class='add'>+afr_changelog_do(call_frame_t *frame, xlator_t *this, dict_t *xattr,</div><div class='add'>+                 afr_changelog_resume_t changelog_resume, afr_xattrop_type_t op)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t *local = NULL;</div><div class='del'>-	afr_private_t *priv = NULL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        dict_t *newloc_xdata = NULL;</div><div class='del'>-	int i = 0;</div><div class='del'>-	int call_count = 0;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    dict_t *newloc_xdata = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (local-&gt;transaction.changelog_xdata[i]) {</div><div class='del'>-                        dict_unref (local-&gt;transaction.changelog_xdata[i]);</div><div class='del'>-                        local-&gt;transaction.changelog_xdata[i] = NULL;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (local-&gt;transaction.changelog_xdata[i]) {</div><div class='add'>+            dict_unref(local-&gt;transaction.changelog_xdata[i]);</div><div class='add'>+            local-&gt;transaction.changelog_xdata[i] = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = afr_changelog_prepare (this, frame, &amp;call_count, changelog_resume,</div><div class='del'>-                                     op, &amp;xdata, &amp;newloc_xdata);</div><div class='add'>+    ret = afr_changelog_prepare(this, frame, &amp;call_count, changelog_resume, op,</div><div class='add'>+                                &amp;xdata, &amp;newloc_xdata);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                return 0;</div><div class='add'>+    if (ret)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;transaction.pre_op[i] ||</div><div class='del'>-                    local-&gt;transaction.failed_subvols[i])</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;transaction.pre_op[i] ||</div><div class='add'>+            local-&gt;transaction.failed_subvols[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                switch (local-&gt;transaction.type) {</div><div class='del'>-                case AFR_DATA_TRANSACTION:</div><div class='del'>-                case AFR_METADATA_TRANSACTION:</div><div class='del'>-                        if (!local-&gt;fd) {</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_changelog_cbk,</div><div class='del'>-						   (void *) (long) i,</div><div class='del'>-						   priv-&gt;children[i],</div><div class='del'>-						   priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='del'>-						   &amp;local-&gt;loc,</div><div class='del'>-						   GF_XATTROP_ADD_ARRAY, xattr,</div><div class='del'>-						   xdata);</div><div class='del'>-                        } else {</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_changelog_cbk,</div><div class='del'>-						   (void *) (long) i,</div><div class='del'>-						   priv-&gt;children[i],</div><div class='del'>-						   priv-&gt;children[i]-&gt;fops-&gt;fxattrop,</div><div class='del'>-						   local-&gt;fd,</div><div class='del'>-						   GF_XATTROP_ADD_ARRAY, xattr,</div><div class='del'>-						   xdata);</div><div class='del'>-                        }</div><div class='del'>-			break;</div><div class='del'>-                case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='del'>-</div><div class='del'>-			STACK_WIND_COOKIE (frame, afr_changelog_cbk,</div><div class='del'>-					   (void *) (long) i,</div><div class='del'>-					   priv-&gt;children[i],</div><div class='del'>-					   priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='del'>-					   &amp;local-&gt;transaction.new_parent_loc,</div><div class='del'>-					   GF_XATTROP_ADD_ARRAY, xattr,</div><div class='del'>-					   newloc_xdata);</div><div class='del'>-                        call_count--;</div><div class='add'>+        switch (local-&gt;transaction.type) {</div><div class='add'>+            case AFR_DATA_TRANSACTION:</div><div class='add'>+            case AFR_METADATA_TRANSACTION:</div><div class='add'>+                if (!local-&gt;fd) {</div><div class='add'>+                    STACK_WIND_COOKIE(</div><div class='add'>+                        frame, afr_changelog_cbk, (void *)(long)i,</div><div class='add'>+                        priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='add'>+                        &amp;local-&gt;loc, GF_XATTROP_ADD_ARRAY, xattr, xdata);</div><div class='add'>+                } else {</div><div class='add'>+                    STACK_WIND_COOKIE(</div><div class='add'>+                        frame, afr_changelog_cbk, (void *)(long)i,</div><div class='add'>+                        priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;fxattrop,</div><div class='add'>+                        local-&gt;fd, GF_XATTROP_ADD_ARRAY, xattr, xdata);</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+            case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='add'>+</div><div class='add'>+                STACK_WIND_COOKIE(frame, afr_changelog_cbk, (void *)(long)i,</div><div class='add'>+                                  priv-&gt;children[i],</div><div class='add'>+                                  priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='add'>+                                  &amp;local-&gt;transaction.new_parent_loc,</div><div class='add'>+                                  GF_XATTROP_ADD_ARRAY, xattr, newloc_xdata);</div><div class='add'>+                call_count--;</div><div class='ctx'> </div><div class='ctx'>                 /* fall through */</div><div class='ctx'> </div><div class='del'>-                case AFR_ENTRY_TRANSACTION:</div><div class='del'>-                        if (local-&gt;fd)</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_changelog_cbk,</div><div class='del'>-						   (void *) (long) i,</div><div class='del'>-						   priv-&gt;children[i],</div><div class='del'>-						   priv-&gt;children[i]-&gt;fops-&gt;fxattrop,</div><div class='del'>-						   local-&gt;fd,</div><div class='del'>-						   GF_XATTROP_ADD_ARRAY, xattr,</div><div class='del'>-						   xdata);</div><div class='del'>-                        else</div><div class='del'>-                                STACK_WIND_COOKIE (frame, afr_changelog_cbk,</div><div class='del'>-						   (void *) (long) i,</div><div class='del'>-						   priv-&gt;children[i],</div><div class='del'>-						   priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='del'>-						   &amp;local-&gt;transaction.parent_loc,</div><div class='del'>-						   GF_XATTROP_ADD_ARRAY, xattr,</div><div class='del'>-						   xdata);</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                if (!--call_count)</div><div class='del'>-                        break;</div><div class='add'>+            case AFR_ENTRY_TRANSACTION:</div><div class='add'>+                if (local-&gt;fd)</div><div class='add'>+                    STACK_WIND_COOKIE(</div><div class='add'>+                        frame, afr_changelog_cbk, (void *)(long)i,</div><div class='add'>+                        priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;fxattrop,</div><div class='add'>+                        local-&gt;fd, GF_XATTROP_ADD_ARRAY, xattr, xdata);</div><div class='add'>+                else</div><div class='add'>+                    STACK_WIND_COOKIE(frame, afr_changelog_cbk, (void *)(long)i,</div><div class='add'>+                                      priv-&gt;children[i],</div><div class='add'>+                                      priv-&gt;children[i]-&gt;fops-&gt;xattrop,</div><div class='add'>+                                      &amp;local-&gt;transaction.parent_loc,</div><div class='add'>+                                      GF_XATTROP_ADD_ARRAY, xattr, xdata);</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        if (newloc_xdata)</div><div class='del'>-                dict_unref (newloc_xdata);</div><div class='del'>-	return 0;</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (newloc_xdata)</div><div class='add'>+        dict_unref(newloc_xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_init_optimistic_changelog_for_txn (xlator_t *this, afr_local_t *local)</div><div class='add'>+afr_init_optimistic_changelog_for_txn(xlator_t *this, afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int                locked_count   = 0;</div><div class='del'>-        afr_private_t     *priv           = NULL;</div><div class='add'>+    int locked_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        locked_count = AFR_COUNT (local-&gt;transaction.pre_op, priv-&gt;child_count);</div><div class='del'>-        if (priv-&gt;optimistic_change_log &amp;&amp; locked_count == priv-&gt;child_count)</div><div class='del'>-                local-&gt;optimistic_change_log = 1;</div><div class='add'>+    locked_count = AFR_COUNT(local-&gt;transaction.pre_op, priv-&gt;child_count);</div><div class='add'>+    if (priv-&gt;optimistic_change_log &amp;&amp; locked_count == priv-&gt;child_count)</div><div class='add'>+        local-&gt;optimistic_change_log = 1;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_changelog_pre_op (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        afr_private_t * priv = this-&gt;private;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int call_count = 0;</div><div class='del'>-	int op_errno = 0;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        unsigned char       *locked_nodes = NULL;</div><div class='del'>-	int idx = -1;</div><div class='del'>-	gf_boolean_t pre_nop = _gf_true;</div><div class='del'>-	dict_t *xdata_req = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-	idx = afr_index_for_transaction_type (local-&gt;transaction.type);</div><div class='del'>-</div><div class='del'>-        locked_nodes = afr_locked_nodes_get (local-&gt;transaction.type, int_lock);</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-		if (locked_nodes[i]) {</div><div class='del'>-			local-&gt;transaction.pre_op[i] = 1;</div><div class='del'>-			call_count++;</div><div class='del'>-		} else {</div><div class='del'>-                        local-&gt;transaction.failed_subvols[i] = 1;</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        afr_init_optimistic_changelog_for_txn (this, local);</div><div class='del'>-</div><div class='del'>-        if (afr_changelog_pre_op_inherit (frame, this))</div><div class='del'>-                goto next;</div><div class='del'>-</div><div class='del'>-        /* This condition should not be met with present code, as</div><div class='del'>-         * transaction.done will be called if locks are not acquired on even a</div><div class='del'>-         * single node.</div><div class='del'>-         */</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-		op_errno = ENOTCONN;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* Check if the fop can be performed on at least</div><div class='del'>-         * quorum number of nodes.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;quorum_count &amp;&amp; !afr_has_fop_quorum (frame)) {</div><div class='del'>-                op_errno = int_lock-&gt;lock_op_errno;</div><div class='del'>-                if (op_errno == 0)</div><div class='del'>-                        op_errno = afr_quorum_errno (priv);</div><div class='del'>-                goto err;</div><div class='add'>+afr_changelog_pre_op(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    unsigned char *locked_nodes = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    gf_boolean_t pre_nop = _gf_true;</div><div class='add'>+    dict_t *xdata_req = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    idx = afr_index_for_transaction_type(local-&gt;transaction.type);</div><div class='add'>+</div><div class='add'>+    locked_nodes = afr_locked_nodes_get(local-&gt;transaction.type, int_lock);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (locked_nodes[i]) {</div><div class='add'>+            local-&gt;transaction.pre_op[i] = 1;</div><div class='add'>+            call_count++;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;transaction.failed_subvols[i] = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    afr_init_optimistic_changelog_for_txn(this, local);</div><div class='add'>+</div><div class='add'>+    if (afr_changelog_pre_op_inherit(frame, this))</div><div class='add'>+        goto next;</div><div class='add'>+</div><div class='add'>+    /* This condition should not be met with present code, as</div><div class='add'>+     * transaction.done will be called if locks are not acquired on even a</div><div class='add'>+     * single node.</div><div class='add'>+     */</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the fop can be performed on at least</div><div class='add'>+     * quorum number of nodes.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;quorum_count &amp;&amp; !afr_has_fop_quorum(frame)) {</div><div class='add'>+        op_errno = int_lock-&gt;lock_op_errno;</div><div class='add'>+        if (op_errno == 0)</div><div class='add'>+            op_errno = afr_quorum_errno(priv);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdata_req = dict_new();</div><div class='add'>+    if (!xdata_req) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (call_count &lt; priv-&gt;child_count)</div><div class='add'>+        pre_nop = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* Set an all-zero pending changelog so that in the cbk, we can get the</div><div class='add'>+     * current on-disk values. In a replica 3 volume with arbiter enabled,</div><div class='add'>+     * these values are needed to arrive at a go/ no-go of the fop phase to</div><div class='add'>+     * avoid ending up in split-brain.*/</div><div class='add'>+</div><div class='add'>+    ret = afr_set_pending_dict(priv, xdata_req, local-&gt;pending);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (afr_needs_changelog_update(local)) {</div><div class='add'>+        local-&gt;dirty[idx] = hton32(1);</div><div class='add'>+</div><div class='add'>+        ret = dict_set_static_bin(xdata_req, AFR_DIRTY, local-&gt;dirty,</div><div class='add'>+                                  sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	xdata_req = dict_new();</div><div class='del'>-	if (!xdata_req) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        if (call_count &lt; priv-&gt;child_count)</div><div class='del'>-                pre_nop = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* Set an all-zero pending changelog so that in the cbk, we can get the</div><div class='del'>-         * current on-disk values. In a replica 3 volume with arbiter enabled,</div><div class='del'>-         * these values are needed to arrive at a go/ no-go of the fop phase to</div><div class='del'>-         * avoid ending up in split-brain.*/</div><div class='del'>-</div><div class='del'>-        ret = afr_set_pending_dict (priv, xdata_req, local-&gt;pending);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (afr_needs_changelog_update (local)) {</div><div class='del'>-</div><div class='del'>-		local-&gt;dirty[idx] = hton32(1);</div><div class='del'>-</div><div class='del'>-		ret = dict_set_static_bin (xdata_req, AFR_DIRTY, local-&gt;dirty,</div><div class='del'>-					   sizeof(int) * AFR_NUM_CHANGE_LOGS);</div><div class='del'>-		if (ret) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='add'>+        pre_nop = _gf_false;</div><div class='add'>+        local-&gt;transaction.dirtied = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-		pre_nop = _gf_false;</div><div class='del'>-		local-&gt;transaction.dirtied = 1;</div><div class='del'>-	}</div><div class='add'>+    if (pre_nop)</div><div class='add'>+        goto next;</div><div class='ctx'> </div><div class='del'>-	if (pre_nop)</div><div class='del'>-		goto next;</div><div class='add'>+    if (!local-&gt;pre_op_compat) {</div><div class='add'>+        dict_copy(xdata_req, local-&gt;xdata_req);</div><div class='add'>+        goto next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;pre_op_compat) {</div><div class='del'>-		dict_copy (xdata_req, local-&gt;xdata_req);</div><div class='del'>-		goto next;</div><div class='del'>-	}</div><div class='add'>+    afr_changelog_do(frame, this, xdata_req, afr_transaction_perform_fop,</div><div class='add'>+                     AFR_TRANSACTION_PRE_OP);</div><div class='ctx'> </div><div class='del'>-        afr_changelog_do (frame, this, xdata_req, afr_transaction_perform_fop,</div><div class='del'>-                          AFR_TRANSACTION_PRE_OP);</div><div class='add'>+    if (xdata_req)</div><div class='add'>+        dict_unref(xdata_req);</div><div class='ctx'> </div><div class='del'>-	if (xdata_req)</div><div class='del'>-		dict_unref (xdata_req);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> next:</div><div class='del'>-	afr_transaction_perform_fop (frame, this);</div><div class='add'>+    afr_transaction_perform_fop(frame, this);</div><div class='ctx'> </div><div class='del'>-	if (xdata_req)</div><div class='del'>-		dict_unref (xdata_req);</div><div class='add'>+    if (xdata_req)</div><div class='add'>+        dict_unref(xdata_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-	local-&gt;internal_lock.lock_cbk = afr_transaction_done;</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;internal_lock.lock_cbk = afr_transaction_done;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        afr_handle_lock_acquire_failure (local, _gf_true);</div><div class='add'>+    afr_handle_lock_acquire_failure(local, _gf_true);</div><div class='ctx'> </div><div class='del'>-	if (xdata_req)</div><div class='del'>-		dict_unref (xdata_req);</div><div class='add'>+    if (xdata_req)</div><div class='add'>+        dict_unref(xdata_req);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_post_nonblocking_inodelk_cbk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_post_nonblocking_inodelk_cbk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        /* Initiate blocking locks if non-blocking has failed */</div><div class='del'>-        if (int_lock-&gt;lock_op_ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Non blocking inodelks failed. Proceeding to blocking");</div><div class='del'>-                int_lock-&gt;lock_cbk = afr_internal_lock_finish;</div><div class='del'>-                afr_blocking_lock (frame, this);</div><div class='del'>-        } else {</div><div class='add'>+    /* Initiate blocking locks if non-blocking has failed */</div><div class='add'>+    if (int_lock-&gt;lock_op_ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Non blocking inodelks failed. Proceeding to blocking");</div><div class='add'>+        int_lock-&gt;lock_cbk = afr_internal_lock_finish;</div><div class='add'>+        afr_blocking_lock(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Non blocking inodelks done. Proceeding to FOP");</div><div class='add'>+        afr_internal_lock_finish(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Non blocking inodelks done. Proceeding to FOP");</div><div class='del'>-                afr_internal_lock_finish (frame, this);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_post_nonblocking_entrylk_cbk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_post_nonblocking_entrylk_cbk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Initiate blocking locks if non-blocking has failed */</div><div class='del'>-        if (int_lock-&gt;lock_op_ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Non blocking entrylks failed. Proceeding to blocking");</div><div class='del'>-                int_lock-&gt;lock_cbk = afr_internal_lock_finish;</div><div class='del'>-                afr_blocking_lock (frame, this);</div><div class='del'>-        } else {</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Non blocking entrylks done. Proceeding to FOP");</div><div class='add'>+    /* Initiate blocking locks if non-blocking has failed */</div><div class='add'>+    if (int_lock-&gt;lock_op_ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Non blocking entrylks failed. Proceeding to blocking");</div><div class='add'>+        int_lock-&gt;lock_cbk = afr_internal_lock_finish;</div><div class='add'>+        afr_blocking_lock(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Non blocking entrylks done. Proceeding to FOP");</div><div class='ctx'> </div><div class='del'>-                afr_internal_lock_finish (frame, this);</div><div class='del'>-        }</div><div class='add'>+        afr_internal_lock_finish(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_post_blocking_rename_cbk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_post_blocking_rename_cbk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        if (int_lock-&gt;lock_op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        AFR_MSG_BLOCKING_LKS_FAILED,</div><div class='del'>-                        "Blocking entrylks failed.");</div><div class='del'>-</div><div class='del'>-                afr_transaction_done (frame, this);</div><div class='del'>-        } else {</div><div class='add'>+    if (int_lock-&gt;lock_op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, AFR_MSG_BLOCKING_LKS_FAILED,</div><div class='add'>+               "Blocking entrylks failed.");</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Blocking entrylks done. Proceeding to FOP");</div><div class='add'>+        afr_transaction_done(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Blocking entrylks done. Proceeding to FOP");</div><div class='ctx'> </div><div class='del'>-                afr_internal_lock_finish (frame, this);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+        afr_internal_lock_finish(frame, this);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_post_lower_unlock_cbk (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_post_lower_unlock_cbk(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (!int_lock-&gt;higher_locked);</div><div class='add'>+    GF_ASSERT(!int_lock-&gt;higher_locked);</div><div class='ctx'> </div><div class='del'>-        int_lock-&gt;lock_cbk = afr_post_blocking_rename_cbk;</div><div class='del'>-        afr_blocking_lock (frame, this);</div><div class='add'>+    int_lock-&gt;lock_cbk = afr_post_blocking_rename_cbk;</div><div class='add'>+    afr_blocking_lock(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_set_transaction_flock (xlator_t *this, afr_local_t *local)</div><div class='add'>+afr_set_transaction_flock(xlator_t *this, afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_private_t       *priv     = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if ((priv-&gt;arbiter_count || local-&gt;transaction.eager_lock_on ||</div><div class='del'>-             priv-&gt;full_lock) &amp;&amp;</div><div class='del'>-            local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='del'>-                /*Lock entire file to avoid network split brains.*/</div><div class='del'>-                int_lock-&gt;flock.l_len   = 0;</div><div class='del'>-                int_lock-&gt;flock.l_start = 0;</div><div class='del'>-        } else {</div><div class='del'>-                int_lock-&gt;flock.l_len   = local-&gt;transaction.len;</div><div class='del'>-                int_lock-&gt;flock.l_start = local-&gt;transaction.start;</div><div class='del'>-        }</div><div class='del'>-        int_lock-&gt;flock.l_type  = F_WRLCK;</div><div class='add'>+    if ((priv-&gt;arbiter_count || local-&gt;transaction.eager_lock_on ||</div><div class='add'>+         priv-&gt;full_lock) &amp;&amp;</div><div class='add'>+        local-&gt;transaction.type == AFR_DATA_TRANSACTION) {</div><div class='add'>+        /*Lock entire file to avoid network split brains.*/</div><div class='add'>+        int_lock-&gt;flock.l_len = 0;</div><div class='add'>+        int_lock-&gt;flock.l_start = 0;</div><div class='add'>+    } else {</div><div class='add'>+        int_lock-&gt;flock.l_len = local-&gt;transaction.len;</div><div class='add'>+        int_lock-&gt;flock.l_start = local-&gt;transaction.start;</div><div class='add'>+    }</div><div class='add'>+    int_lock-&gt;flock.l_type = F_WRLCK;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_lock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_lock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_internal_lock_t *int_lock = NULL;</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='add'>+    afr_internal_lock_t *int_lock = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        int_lock = &amp;local-&gt;internal_lock;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    int_lock = &amp;local-&gt;internal_lock;</div><div class='ctx'> </div><div class='del'>-        int_lock-&gt;domain = this-&gt;name;</div><div class='add'>+    int_lock-&gt;domain = this-&gt;name;</div><div class='ctx'> </div><div class='del'>-        switch (local-&gt;transaction.type) {</div><div class='add'>+    switch (local-&gt;transaction.type) {</div><div class='ctx'>         case AFR_DATA_TRANSACTION:</div><div class='ctx'>         case AFR_METADATA_TRANSACTION:</div><div class='del'>-                afr_set_transaction_flock (this, local);</div><div class='add'>+            afr_set_transaction_flock(this, local);</div><div class='ctx'> </div><div class='del'>-                int_lock-&gt;lock_cbk = afr_post_nonblocking_inodelk_cbk;</div><div class='add'>+            int_lock-&gt;lock_cbk = afr_post_nonblocking_inodelk_cbk;</div><div class='ctx'> </div><div class='del'>-                afr_nonblocking_inodelk (frame, this);</div><div class='del'>-                break;</div><div class='add'>+            afr_nonblocking_inodelk(frame, this);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_ENTRY_RENAME_TRANSACTION:</div><div class='ctx'> </div><div class='del'>-                int_lock-&gt;lock_cbk = afr_post_nonblocking_entrylk_cbk;</div><div class='del'>-                afr_nonblocking_entrylk (frame, this);</div><div class='del'>-                break;</div><div class='add'>+            int_lock-&gt;lock_cbk = afr_post_nonblocking_entrylk_cbk;</div><div class='add'>+            afr_nonblocking_entrylk(frame, this);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case AFR_ENTRY_TRANSACTION:</div><div class='del'>-                int_lock-&gt;lk_basename = local-&gt;transaction.basename;</div><div class='del'>-                if (local-&gt;transaction.parent_loc.path)</div><div class='del'>-                        int_lock-&gt;lk_loc = &amp;local-&gt;transaction.parent_loc;</div><div class='del'>-                else</div><div class='del'>-                        GF_ASSERT (local-&gt;fd);</div><div class='add'>+            int_lock-&gt;lk_basename = local-&gt;transaction.basename;</div><div class='add'>+            if (local-&gt;transaction.parent_loc.path)</div><div class='add'>+                int_lock-&gt;lk_loc = &amp;local-&gt;transaction.parent_loc;</div><div class='add'>+            else</div><div class='add'>+                GF_ASSERT(local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-                int_lock-&gt;lock_cbk = afr_post_nonblocking_entrylk_cbk;</div><div class='del'>-                afr_nonblocking_entrylk (frame, this);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            int_lock-&gt;lock_cbk = afr_post_nonblocking_entrylk_cbk;</div><div class='add'>+            afr_nonblocking_entrylk(frame, this);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-afr_locals_overlap (afr_local_t *local1, afr_local_t *local2)</div><div class='add'>+afr_locals_overlap(afr_local_t *local1, afr_local_t *local2)</div><div class='ctx'> {</div><div class='del'>-        uint64_t start1 = local1-&gt;transaction.start;</div><div class='del'>-        uint64_t start2 = local2-&gt;transaction.start;</div><div class='del'>-        uint64_t end1 = 0;</div><div class='del'>-        uint64_t end2 = 0;</div><div class='add'>+    uint64_t start1 = local1-&gt;transaction.start;</div><div class='add'>+    uint64_t start2 = local2-&gt;transaction.start;</div><div class='add'>+    uint64_t end1 = 0;</div><div class='add'>+    uint64_t end2 = 0;</div><div class='ctx'> </div><div class='del'>-        if (local1-&gt;transaction.len)</div><div class='del'>-                end1 = start1 + local1-&gt;transaction.len - 1;</div><div class='del'>-        else</div><div class='del'>-                end1 = ULLONG_MAX;</div><div class='add'>+    if (local1-&gt;transaction.len)</div><div class='add'>+        end1 = start1 + local1-&gt;transaction.len - 1;</div><div class='add'>+    else</div><div class='add'>+        end1 = ULLONG_MAX;</div><div class='ctx'> </div><div class='del'>-        if (local2-&gt;transaction.len)</div><div class='del'>-                end2 = start2 + local2-&gt;transaction.len - 1;</div><div class='del'>-        else</div><div class='del'>-                end2 = ULLONG_MAX;</div><div class='add'>+    if (local2-&gt;transaction.len)</div><div class='add'>+        end2 = start2 + local2-&gt;transaction.len - 1;</div><div class='add'>+    else</div><div class='add'>+        end2 = ULLONG_MAX;</div><div class='ctx'> </div><div class='del'>-        return ((end1 &gt;= start2) &amp;&amp; (end2 &gt;= start1));</div><div class='add'>+    return ((end1 &gt;= start2) &amp;&amp; (end2 &gt;= start1));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_has_lock_conflict (afr_local_t *local, gf_boolean_t waitlist_check)</div><div class='del'>-{</div><div class='del'>-        afr_local_t     *each = NULL;</div><div class='del'>-        afr_lock_t      *lock = NULL;</div><div class='del'>-</div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-        /*</div><div class='del'>-         * Once full file lock is acquired in eager-lock phase, overlapping</div><div class='del'>-         * writes do not compete for inode-locks, instead are transferred to the</div><div class='del'>-         * next writes. Because of this overlapping writes are not ordered.</div><div class='del'>-         * This can cause inconsistencies in replication.</div><div class='del'>-         * Example:</div><div class='del'>-         * Two overlapping writes w1, w2 are sent in parallel on same fd</div><div class='del'>-         * in two threads t1, t2.</div><div class='del'>-         * Both threads can execute afr_writev_wind in the following manner.</div><div class='del'>-         * t1 winds w1 on brick-0</div><div class='del'>-         * t2 winds w2 on brick-0</div><div class='del'>-         * t2 winds w2 on brick-1</div><div class='del'>-         * t1 winds w1 on brick-1</div><div class='del'>-         *</div><div class='del'>-         * This check makes sure the locks are not transferred for</div><div class='del'>-         * overlapping writes.</div><div class='del'>-         */</div><div class='del'>-        list_for_each_entry (each, &amp;lock-&gt;owners, transaction.owner_list) {</div><div class='del'>-                if (afr_locals_overlap (each, local)) {</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!waitlist_check)</div><div class='del'>-                return _gf_false;</div><div class='del'>-        list_for_each_entry (each, &amp;lock-&gt;waiting, transaction.wait_list) {</div><div class='del'>-                if (afr_locals_overlap (each, local)) {</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+afr_has_lock_conflict(afr_local_t *local, gf_boolean_t waitlist_check)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *each = NULL;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    /*</div><div class='add'>+     * Once full file lock is acquired in eager-lock phase, overlapping</div><div class='add'>+     * writes do not compete for inode-locks, instead are transferred to the</div><div class='add'>+     * next writes. Because of this overlapping writes are not ordered.</div><div class='add'>+     * This can cause inconsistencies in replication.</div><div class='add'>+     * Example:</div><div class='add'>+     * Two overlapping writes w1, w2 are sent in parallel on same fd</div><div class='add'>+     * in two threads t1, t2.</div><div class='add'>+     * Both threads can execute afr_writev_wind in the following manner.</div><div class='add'>+     * t1 winds w1 on brick-0</div><div class='add'>+     * t2 winds w2 on brick-0</div><div class='add'>+     * t2 winds w2 on brick-1</div><div class='add'>+     * t1 winds w1 on brick-1</div><div class='add'>+     *</div><div class='add'>+     * This check makes sure the locks are not transferred for</div><div class='add'>+     * overlapping writes.</div><div class='add'>+     */</div><div class='add'>+    list_for_each_entry(each, &amp;lock-&gt;owners, transaction.owner_list)</div><div class='add'>+    {</div><div class='add'>+        if (afr_locals_overlap(each, local)) {</div><div class='add'>+            return _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!waitlist_check)</div><div class='ctx'>         return _gf_false;</div><div class='add'>+    list_for_each_entry(each, &amp;lock-&gt;waiting, transaction.wait_list)</div><div class='add'>+    {</div><div class='add'>+        if (afr_locals_overlap(each, local)) {</div><div class='add'>+            return _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> static void</div><div class='del'>-afr_copy_inodelk_vars (afr_internal_lock_t *dst, afr_internal_lock_t *src,</div><div class='del'>-                       xlator_t *this)</div><div class='add'>+afr_copy_inodelk_vars(afr_internal_lock_t *dst, afr_internal_lock_t *src,</div><div class='add'>+                      xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = this-&gt;private;</div><div class='add'>+    afr_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        dst-&gt;domain = src-&gt;domain;</div><div class='del'>-        dst-&gt;flock.l_len  = src-&gt;flock.l_len;</div><div class='del'>-        dst-&gt;flock.l_start  = src-&gt;flock.l_start;</div><div class='del'>-        dst-&gt;flock.l_type  = src-&gt;flock.l_type;</div><div class='del'>-        dst-&gt;lock_count = src-&gt;lock_count;</div><div class='del'>-        memcpy (dst-&gt;locked_nodes, src-&gt;locked_nodes,</div><div class='del'>-                priv-&gt;child_count * sizeof (*dst-&gt;locked_nodes));</div><div class='add'>+    dst-&gt;domain = src-&gt;domain;</div><div class='add'>+    dst-&gt;flock.l_len = src-&gt;flock.l_len;</div><div class='add'>+    dst-&gt;flock.l_start = src-&gt;flock.l_start;</div><div class='add'>+    dst-&gt;flock.l_type = src-&gt;flock.l_type;</div><div class='add'>+    dst-&gt;lock_count = src-&gt;lock_count;</div><div class='add'>+    memcpy(dst-&gt;locked_nodes, src-&gt;locked_nodes,</div><div class='add'>+           priv-&gt;child_count * sizeof(*dst-&gt;locked_nodes));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__afr_transaction_wake_shared (afr_local_t *local, struct list_head *shared)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t conflict = _gf_false;</div><div class='del'>-        afr_local_t *each = NULL;</div><div class='del'>-        afr_lock_t *lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-</div><div class='del'>-        while (!conflict) {</div><div class='del'>-                if (list_empty (&amp;lock-&gt;waiting))</div><div class='del'>-                        return;</div><div class='del'>-                each = list_entry(lock-&gt;waiting.next, afr_local_t,</div><div class='del'>-                                  transaction.wait_list);</div><div class='del'>-                if (afr_has_lock_conflict (each, _gf_false)) {</div><div class='del'>-                        conflict = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                if (conflict &amp;&amp; !list_empty (&amp;lock-&gt;owners))</div><div class='del'>-                        return;</div><div class='del'>-                afr_copy_inodelk_vars (&amp;each-&gt;internal_lock,</div><div class='del'>-                                       &amp;local-&gt;internal_lock,</div><div class='del'>-                                       each-&gt;transaction.frame-&gt;this);</div><div class='del'>-                list_move_tail (&amp;each-&gt;transaction.wait_list, shared);</div><div class='del'>-                list_add_tail(&amp;each-&gt;transaction.owner_list, &amp;lock-&gt;owners);</div><div class='add'>+__afr_transaction_wake_shared(afr_local_t *local, struct list_head *shared)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t conflict = _gf_false;</div><div class='add'>+    afr_local_t *each = NULL;</div><div class='add'>+    afr_lock_t *lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+</div><div class='add'>+    while (!conflict) {</div><div class='add'>+        if (list_empty(&amp;lock-&gt;waiting))</div><div class='add'>+            return;</div><div class='add'>+        each = list_entry(lock-&gt;waiting.next, afr_local_t,</div><div class='add'>+                          transaction.wait_list);</div><div class='add'>+        if (afr_has_lock_conflict(each, _gf_false)) {</div><div class='add'>+            conflict = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+        if (conflict &amp;&amp; !list_empty(&amp;lock-&gt;owners))</div><div class='add'>+            return;</div><div class='add'>+        afr_copy_inodelk_vars(&amp;each-&gt;internal_lock, &amp;local-&gt;internal_lock,</div><div class='add'>+                              each-&gt;transaction.frame-&gt;this);</div><div class='add'>+        list_move_tail(&amp;each-&gt;transaction.wait_list, shared);</div><div class='add'>+        list_add_tail(&amp;each-&gt;transaction.owner_list, &amp;lock-&gt;owners);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-afr_lock_resume_shared (struct list_head *list)</div><div class='add'>+afr_lock_resume_shared(struct list_head *list)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *each = NULL;</div><div class='add'>+    afr_local_t *each = NULL;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty(list)) {</div><div class='del'>-                each = list_entry(list-&gt;next, afr_local_t,</div><div class='del'>-                                  transaction.wait_list);</div><div class='del'>-                list_del_init(&amp;each-&gt;transaction.wait_list);</div><div class='del'>-                afr_changelog_pre_op (each-&gt;transaction.frame,</div><div class='del'>-                                      each-&gt;transaction.frame-&gt;this);</div><div class='del'>-        }</div><div class='add'>+    while (!list_empty(list)) {</div><div class='add'>+        each = list_entry(list-&gt;next, afr_local_t, transaction.wait_list);</div><div class='add'>+        list_del_init(&amp;each-&gt;transaction.wait_list);</div><div class='add'>+        afr_changelog_pre_op(each-&gt;transaction.frame,</div><div class='add'>+                             each-&gt;transaction.frame-&gt;this);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_internal_lock_finish (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_internal_lock_finish(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = frame-&gt;local;</div><div class='del'>-        afr_lock_t   *lock  = NULL;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        local-&gt;internal_lock.lock_cbk = NULL;</div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on) {</div><div class='del'>-                if (local-&gt;internal_lock.lock_op_ret &lt; 0) {</div><div class='del'>-                        afr_transaction_done (frame, this);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                afr_changelog_pre_op (frame, this);</div><div class='add'>+    local-&gt;internal_lock.lock_cbk = NULL;</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on) {</div><div class='add'>+        if (local-&gt;internal_lock.lock_op_ret &lt; 0) {</div><div class='add'>+            afr_transaction_done(frame, this);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        afr_changelog_pre_op(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+        if (local-&gt;internal_lock.lock_op_ret &lt; 0) {</div><div class='add'>+            afr_handle_lock_acquire_failure(local, _gf_false);</div><div class='ctx'>         } else {</div><div class='del'>-                lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-                if (local-&gt;internal_lock.lock_op_ret &lt; 0) {</div><div class='del'>-                        afr_handle_lock_acquire_failure (local, _gf_false);</div><div class='del'>-                } else {</div><div class='del'>-                        lock-&gt;event_generation = local-&gt;event_generation;</div><div class='del'>-                        afr_changelog_pre_op (frame, this);</div><div class='del'>-                }</div><div class='add'>+            lock-&gt;event_generation = local-&gt;event_generation;</div><div class='add'>+            afr_changelog_pre_op(frame, this);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_are_multiple_fds_opened (afr_local_t *local, xlator_t *this)</div><div class='add'>+afr_are_multiple_fds_opened(afr_local_t *local, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        /* Lets say mount1 has eager-lock(full-lock) and after the eager-lock</div><div class='del'>-         * is taken mount2 opened the same file, it won't be able to</div><div class='del'>-         * perform any data operations until mount1 releases eager-lock.</div><div class='del'>-         * To avoid such scenario do not enable eager-lock for this transaction</div><div class='del'>-         * if open-fd-count is &gt; 1</div><div class='del'>-         */</div><div class='add'>+    /* Lets say mount1 has eager-lock(full-lock) and after the eager-lock</div><div class='add'>+     * is taken mount2 opened the same file, it won't be able to</div><div class='add'>+     * perform any data operations until mount1 releases eager-lock.</div><div class='add'>+     * To avoid such scenario do not enable eager-lock for this transaction</div><div class='add'>+     * if open-fd-count is &gt; 1</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inode_ctx-&gt;open_fd_count &gt; 1)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (local-&gt;inode_ctx-&gt;open_fd_count &gt; 1)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_is_delayed_changelog_post_op_needed (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                         int delay)</div><div class='del'>-{</div><div class='del'>-        afr_local_t  *local = NULL;</div><div class='del'>-        afr_lock_t   *lock  = NULL;</div><div class='del'>-        gf_boolean_t res    = _gf_false;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-</div><div class='del'>-        if (!afr_txn_nothing_failed (frame, this)) {</div><div class='del'>-                lock-&gt;release = _gf_true;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (afr_are_multiple_fds_opened (local, this)) {</div><div class='del'>-                lock-&gt;release = _gf_true;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!list_empty (&amp;lock-&gt;owners))</div><div class='del'>-                goto out;</div><div class='del'>-        else</div><div class='del'>-                GF_ASSERT (list_empty (&amp;lock-&gt;waiting));</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;release) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!delay) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;op != GF_FOP_WRITE) &amp;&amp;</div><div class='del'>-            (local-&gt;op != GF_FOP_FXATTROP)) {</div><div class='del'>-                /*Only allow writes but shard does [f]xattrops on writes, so</div><div class='del'>-                 * they are fine too*/</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        res = _gf_true;</div><div class='add'>+afr_is_delayed_changelog_post_op_needed(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                        int delay)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    gf_boolean_t res = _gf_false;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+</div><div class='add'>+    if (!afr_txn_nothing_failed(frame, this)) {</div><div class='add'>+        lock-&gt;release = _gf_true;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (afr_are_multiple_fds_opened(local, this)) {</div><div class='add'>+        lock-&gt;release = _gf_true;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!list_empty(&amp;lock-&gt;owners))</div><div class='add'>+        goto out;</div><div class='add'>+    else</div><div class='add'>+        GF_ASSERT(list_empty(&amp;lock-&gt;waiting));</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;release) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!delay) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((local-&gt;op != GF_FOP_WRITE) &amp;&amp; (local-&gt;op != GF_FOP_FXATTROP)) {</div><div class='add'>+        /*Only allow writes but shard does [f]xattrops on writes, so</div><div class='add'>+         * they are fine too*/</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    res = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return res;</div><div class='add'>+    return res;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-afr_delayed_changelog_wake_up_cbk (void *data)</div><div class='del'>-{</div><div class='del'>-        afr_lock_t  *lock  = NULL;</div><div class='del'>-        afr_local_t *local = data;</div><div class='del'>-        afr_local_t *timer_local = NULL;</div><div class='del'>-        struct list_head shared;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;shared);</div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-        LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                timer_local = list_entry(lock-&gt;post_op.next,</div><div class='del'>-                                         afr_local_t,</div><div class='del'>-                                        transaction.owner_list);</div><div class='del'>-                if (list_empty (&amp;lock-&gt;owners) &amp;&amp; (local == timer_local)) {</div><div class='del'>-                        GF_ASSERT (list_empty (&amp;lock-&gt;waiting));</div><div class='del'>-                        /*Last owner*/</div><div class='del'>-                        lock-&gt;release = _gf_true;</div><div class='del'>-                        lock-&gt;delay_timer = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        afr_changelog_post_op_now (local-&gt;transaction.frame,</div><div class='del'>-                                   local-&gt;transaction.frame-&gt;this);</div><div class='add'>+afr_delayed_changelog_wake_up_cbk(void *data)</div><div class='add'>+{</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    afr_local_t *local = data;</div><div class='add'>+    afr_local_t *timer_local = NULL;</div><div class='add'>+    struct list_head shared;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;shared);</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        timer_local = list_entry(lock-&gt;post_op.next, afr_local_t,</div><div class='add'>+                                 transaction.owner_list);</div><div class='add'>+        if (list_empty(&amp;lock-&gt;owners) &amp;&amp; (local == timer_local)) {</div><div class='add'>+            GF_ASSERT(list_empty(&amp;lock-&gt;waiting));</div><div class='add'>+            /*Last owner*/</div><div class='add'>+            lock-&gt;release = _gf_true;</div><div class='add'>+            lock-&gt;delay_timer = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    afr_changelog_post_op_now(local-&gt;transaction.frame,</div><div class='add'>+                              local-&gt;transaction.frame-&gt;this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* SET operation */</div><div class='ctx'> int</div><div class='del'>-afr_fd_report_unstable_write (xlator_t *this, afr_local_t *local)</div><div class='add'>+afr_fd_report_unstable_write(xlator_t *this, afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local-&gt;inode_ctx-&gt;witnessed_unstable_write = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;inode_ctx-&gt;witnessed_unstable_write = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TEST and CLEAR operation */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-afr_fd_has_witnessed_unstable_write (xlator_t *this, inode_t *inode)</div><div class='add'>+afr_fd_has_witnessed_unstable_write(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        afr_inode_ctx_t *ctx = NULL;</div><div class='del'>-        gf_boolean_t witness = _gf_false;</div><div class='add'>+    afr_inode_ctx_t *ctx = NULL;</div><div class='add'>+    gf_boolean_t witness = _gf_false;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                (void)__afr_inode_ctx_get (this, inode, &amp;ctx);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        (void)__afr_inode_ctx_get(this, inode, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-                if (ctx-&gt;witnessed_unstable_write) {</div><div class='del'>-                        witness = _gf_true;</div><div class='del'>-                        ctx-&gt;witnessed_unstable_write = _gf_false;</div><div class='del'>-                }</div><div class='add'>+        if (ctx-&gt;witnessed_unstable_write) {</div><div class='add'>+            witness = _gf_true;</div><div class='add'>+            ctx-&gt;witnessed_unstable_write = _gf_false;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return witness;</div><div class='add'>+    return witness;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_changelog_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, struct iatt *pre,</div><div class='del'>-                         struct iatt *post, dict_t *xdata)</div><div class='add'>+afr_changelog_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, struct iatt *pre,</div><div class='add'>+                        struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        int child_index = (long) cookie;</div><div class='del'>-        int call_count = -1;</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int child_index = (long)cookie;</div><div class='add'>+    int call_count = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != 0) {</div><div class='del'>-                /* Failure of fsync() is as good as failure of previous</div><div class='del'>-                   write(). So treat it like one.</div><div class='del'>-		*/</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        op_errno, AFR_MSG_FSYNC_FAILED,</div><div class='del'>-                        "fsync(%s) failed on subvolume %s. Transaction was %s",</div><div class='del'>-                        uuid_utoa (local-&gt;fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        priv-&gt;children[child_index]-&gt;name,</div><div class='del'>-                        gf_fop_list[local-&gt;op]);</div><div class='add'>+    if (op_ret != 0) {</div><div class='add'>+        /* Failure of fsync() is as good as failure of previous</div><div class='add'>+           write(). So treat it like one.</div><div class='add'>+        */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, AFR_MSG_FSYNC_FAILED,</div><div class='add'>+               "fsync(%s) failed on subvolume %s. Transaction was %s",</div><div class='add'>+               uuid_utoa(local-&gt;fd-&gt;inode-&gt;gfid),</div><div class='add'>+               priv-&gt;children[child_index]-&gt;name, gf_fop_list[local-&gt;op]);</div><div class='ctx'> </div><div class='del'>-                afr_transaction_fop_failed (frame, this, child_index);</div><div class='del'>-	}</div><div class='add'>+        afr_transaction_fop_failed(frame, this, child_index);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	call_count = afr_frame_return (frame);</div><div class='add'>+    call_count = afr_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-	if (call_count == 0)</div><div class='del'>-		afr_changelog_post_op_now (frame, this);</div><div class='add'>+    if (call_count == 0)</div><div class='add'>+        afr_changelog_post_op_now(frame, this);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_changelog_fsync (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_changelog_fsync(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *local = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        int call_count = 0;</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        GF_UNUSED int ret = -1;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    GF_UNUSED int ret = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        call_count = AFR_COUNT (local-&gt;transaction.pre_op, priv-&gt;child_count);</div><div class='add'>+    call_count = AFR_COUNT(local-&gt;transaction.pre_op, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        if (!call_count) {</div><div class='del'>-                /* will go straight to unlock */</div><div class='del'>-                afr_changelog_post_op_now (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!call_count) {</div><div class='add'>+        /* will go straight to unlock */</div><div class='add'>+        afr_changelog_post_op_now(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count = call_count;</div><div class='add'>+    local-&gt;call_count = call_count;</div><div class='ctx'> </div><div class='del'>-        xdata = dict_new();</div><div class='del'>-        if (xdata)</div><div class='del'>-                ret = dict_set_int32 (xdata, "batch-fsync", 1);</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (xdata)</div><div class='add'>+        ret = dict_set_int32(xdata, "batch-fsync", 1);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (!local-&gt;transaction.pre_op[i])</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (!local-&gt;transaction.pre_op[i])</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, afr_changelog_fsync_cbk,</div><div class='del'>-				   (void *) (long) i, priv-&gt;children[i],</div><div class='del'>-				   priv-&gt;children[i]-&gt;fops-&gt;fsync, local-&gt;fd,</div><div class='del'>-				   1, xdata);</div><div class='del'>-                if (!--call_count)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, afr_changelog_fsync_cbk, (void *)(long)i,</div><div class='add'>+                          priv-&gt;children[i], priv-&gt;children[i]-&gt;fops-&gt;fsync,</div><div class='add'>+                          local-&gt;fd, 1, xdata);</div><div class='add'>+        if (!--call_count)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-afr_changelog_post_op_safe (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_changelog_post_op_safe(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	afr_local_t    *local = NULL;</div><div class='del'>-        afr_private_t  *priv = NULL;</div><div class='del'>-</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;fd || local-&gt;transaction.type != AFR_DATA_TRANSACTION) {</div><div class='del'>-                afr_changelog_post_op_now (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (afr_changelog_pre_op_uninherit (frame, this) &amp;&amp;</div><div class='del'>-	    afr_txn_nothing_failed (frame, this)) {</div><div class='del'>-                /* just detected that this post-op is about to</div><div class='del'>-                   be optimized away as a new write() has</div><div class='del'>-                   already piggybacked on this frame's changelog.</div><div class='del'>-                   */</div><div class='del'>-                afr_changelog_post_op_now (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;fd || local-&gt;transaction.type != AFR_DATA_TRANSACTION) {</div><div class='add'>+        afr_changelog_post_op_now(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Calling afr_changelog_post_op_now() now will result in</div><div class='del'>-           issuing -&gt;[f]xattrop().</div><div class='del'>-</div><div class='del'>-           Performing a hard POST-OP (-&gt;[f]xattrop() FOP) is a more</div><div class='del'>-           responsible operation that what it might appear on the surface.</div><div class='del'>-</div><div class='del'>-           The changelog of a file (in the xattr of the file on the server)</div><div class='del'>-           stores information (pending count) about the state of the file</div><div class='del'>-           on the OTHER server. This changelog is blindly trusted, and must</div><div class='del'>-           therefore be updated in such a way it remains trustworthy. This</div><div class='del'>-           implies that decrementing the pending count (essentially "clearing</div><div class='del'>-           the dirty flag") must be done STRICTLY after we are sure that the</div><div class='del'>-           operation on the other server has reached stable storage.</div><div class='del'>-</div><div class='del'>-           While the backend filesystem on that server will eventually flush</div><div class='del'>-           it to stable storage, we (being in userspace) have no mechanism</div><div class='del'>-           to get notified when the write became "stable".</div><div class='del'>-</div><div class='del'>-           This means we need take matter into our own hands and issue an</div><div class='del'>-           fsync() EVEN IF THE APPLICATION WAS PERFORMING UNSTABLE WRITES,</div><div class='del'>-           and get an acknowledgement for it. And we need to wait for the</div><div class='del'>-           fsync() acknowledgement before initiating the hard POST-OP.</div><div class='del'>-</div><div class='del'>-           However if the FD itself was opened in O_SYNC or O_DSYNC then</div><div class='del'>-           we are already guaranteed that the writes were made stable as</div><div class='del'>-           part of the FOP itself. The same holds true for NFS stable</div><div class='del'>-           writes which happen on an anonymous FD with O_DSYNC or O_SYNC</div><div class='del'>-           flag set in the writev() @flags param. For all other write types,</div><div class='del'>-           mark a flag in the fdctx whenever an unstable write is witnessed.</div><div class='add'>+    if (afr_changelog_pre_op_uninherit(frame, this) &amp;&amp;</div><div class='add'>+        afr_txn_nothing_failed(frame, this)) {</div><div class='add'>+        /* just detected that this post-op is about to</div><div class='add'>+           be optimized away as a new write() has</div><div class='add'>+           already piggybacked on this frame's changelog.</div><div class='ctx'>            */</div><div class='add'>+        afr_changelog_post_op_now(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Calling afr_changelog_post_op_now() now will result in</div><div class='add'>+       issuing -&gt;[f]xattrop().</div><div class='add'>+</div><div class='add'>+       Performing a hard POST-OP (-&gt;[f]xattrop() FOP) is a more</div><div class='add'>+       responsible operation that what it might appear on the surface.</div><div class='add'>+</div><div class='add'>+       The changelog of a file (in the xattr of the file on the server)</div><div class='add'>+       stores information (pending count) about the state of the file</div><div class='add'>+       on the OTHER server. This changelog is blindly trusted, and must</div><div class='add'>+       therefore be updated in such a way it remains trustworthy. This</div><div class='add'>+       implies that decrementing the pending count (essentially "clearing</div><div class='add'>+       the dirty flag") must be done STRICTLY after we are sure that the</div><div class='add'>+       operation on the other server has reached stable storage.</div><div class='add'>+</div><div class='add'>+       While the backend filesystem on that server will eventually flush</div><div class='add'>+       it to stable storage, we (being in userspace) have no mechanism</div><div class='add'>+       to get notified when the write became "stable".</div><div class='add'>+</div><div class='add'>+       This means we need take matter into our own hands and issue an</div><div class='add'>+       fsync() EVEN IF THE APPLICATION WAS PERFORMING UNSTABLE WRITES,</div><div class='add'>+       and get an acknowledgement for it. And we need to wait for the</div><div class='add'>+       fsync() acknowledgement before initiating the hard POST-OP.</div><div class='add'>+</div><div class='add'>+       However if the FD itself was opened in O_SYNC or O_DSYNC then</div><div class='add'>+       we are already guaranteed that the writes were made stable as</div><div class='add'>+       part of the FOP itself. The same holds true for NFS stable</div><div class='add'>+       writes which happen on an anonymous FD with O_DSYNC or O_SYNC</div><div class='add'>+       flag set in the writev() @flags param. For all other write types,</div><div class='add'>+       mark a flag in the fdctx whenever an unstable write is witnessed.</div><div class='add'>+       */</div><div class='add'>+</div><div class='add'>+    if (!afr_fd_has_witnessed_unstable_write(this, local-&gt;inode)) {</div><div class='add'>+        afr_changelog_post_op_now(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!afr_fd_has_witnessed_unstable_write (this, local-&gt;inode)) {</div><div class='del'>-                afr_changelog_post_op_now (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check whether users want durability and perform fsync/post-op</div><div class='del'>-         * accordingly.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;ensure_durability) {</div><div class='del'>-                /* Time to fsync() */</div><div class='del'>-                afr_changelog_fsync (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                afr_changelog_post_op_now (frame, this);</div><div class='del'>-        }</div><div class='add'>+    /* Check whether users want durability and perform fsync/post-op</div><div class='add'>+     * accordingly.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;ensure_durability) {</div><div class='add'>+        /* Time to fsync() */</div><div class='add'>+        afr_changelog_fsync(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        afr_changelog_post_op_now(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_changelog_post_op (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	struct timespec delta   = {0, };</div><div class='del'>-	afr_private_t   *priv   = NULL;</div><div class='del'>-	afr_local_t     *local  = frame-&gt;local;</div><div class='del'>-        afr_lock_t      *lock   = NULL;</div><div class='del'>-        gf_boolean_t    post_op = _gf_true;</div><div class='del'>-        struct list_head  shared;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	delta.tv_sec = priv-&gt;post_op_delay_secs;</div><div class='del'>-	delta.tv_nsec = 0;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;shared);</div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-        LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-	{</div><div class='del'>-                list_del_init (&amp;local-&gt;transaction.owner_list);</div><div class='del'>-                list_add (&amp;local-&gt;transaction.owner_list, &amp;lock-&gt;post_op);</div><div class='del'>-                __afr_transaction_wake_shared (local, &amp;shared);</div><div class='del'>-</div><div class='del'>-                if (!afr_is_delayed_changelog_post_op_needed (frame, this,</div><div class='del'>-                                                              delta.tv_sec)) {</div><div class='del'>-                        if (list_empty (&amp;lock-&gt;owners))</div><div class='del'>-                                lock-&gt;release = _gf_true;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_ASSERT (lock-&gt;delay_timer == NULL);</div><div class='del'>-		lock-&gt;delay_timer = gf_timer_call_after (this-&gt;ctx, delta,</div><div class='del'>-                                              afr_delayed_changelog_wake_up_cbk,</div><div class='del'>-                                              local);</div><div class='del'>-                if (!lock-&gt;delay_timer) {</div><div class='del'>-                        lock-&gt;release = _gf_true;</div><div class='del'>-                } else {</div><div class='del'>-                        post_op = _gf_false;</div><div class='del'>-                }</div><div class='add'>+afr_changelog_post_op(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    struct timespec delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    gf_boolean_t post_op = _gf_true;</div><div class='add'>+    struct list_head shared;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    delta.tv_sec = priv-&gt;post_op_delay_secs;</div><div class='add'>+    delta.tv_nsec = 0;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;shared);</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;local-&gt;transaction.owner_list);</div><div class='add'>+        list_add(&amp;local-&gt;transaction.owner_list, &amp;lock-&gt;post_op);</div><div class='add'>+        __afr_transaction_wake_shared(local, &amp;shared);</div><div class='add'>+</div><div class='add'>+        if (!afr_is_delayed_changelog_post_op_needed(frame, this,</div><div class='add'>+                                                     delta.tv_sec)) {</div><div class='add'>+            if (list_empty(&amp;lock-&gt;owners))</div><div class='add'>+                lock-&gt;release = _gf_true;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-	}</div><div class='add'>+        GF_ASSERT(lock-&gt;delay_timer == NULL);</div><div class='add'>+        lock-&gt;delay_timer = gf_timer_call_after(</div><div class='add'>+            this-&gt;ctx, delta, afr_delayed_changelog_wake_up_cbk, local);</div><div class='add'>+        if (!lock-&gt;delay_timer) {</div><div class='add'>+            lock-&gt;release = _gf_true;</div><div class='add'>+        } else {</div><div class='add'>+            post_op = _gf_false;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (&amp;shared)) {</div><div class='del'>-                afr_lock_resume_shared (&amp;shared);</div><div class='del'>-        }</div><div class='add'>+    if (!list_empty(&amp;shared)) {</div><div class='add'>+        afr_lock_resume_shared(&amp;shared);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (post_op) {</div><div class='del'>-                if (!local-&gt;transaction.eager_lock_on || lock-&gt;release) {</div><div class='del'>-                        afr_changelog_post_op_safe (frame, this);</div><div class='del'>-                } else {</div><div class='del'>-                        afr_changelog_post_op_now (frame, this);</div><div class='del'>-                }</div><div class='add'>+    if (post_op) {</div><div class='add'>+        if (!local-&gt;transaction.eager_lock_on || lock-&gt;release) {</div><div class='add'>+            afr_changelog_post_op_safe(frame, this);</div><div class='add'>+        } else {</div><div class='add'>+            afr_changelog_post_op_now(frame, this);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_transaction_resume (call_frame_t *frame, xlator_t *this)</div><div class='add'>+afr_transaction_resume(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t         *local    = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local    = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        afr_restore_lk_owner (frame);</div><div class='add'>+    afr_restore_lk_owner(frame);</div><div class='ctx'> </div><div class='del'>-        afr_handle_symmetric_errors (frame, this);</div><div class='add'>+    afr_handle_symmetric_errors(frame, this);</div><div class='ctx'> </div><div class='del'>-	if (!local-&gt;pre_op_compat)</div><div class='del'>-		/* new mode, pre-op was done along</div><div class='del'>-		   with OP */</div><div class='del'>-		afr_changelog_pre_op_update (frame, this);</div><div class='add'>+    if (!local-&gt;pre_op_compat)</div><div class='add'>+        /* new mode, pre-op was done along</div><div class='add'>+           with OP */</div><div class='add'>+        afr_changelog_pre_op_update(frame, this);</div><div class='ctx'> </div><div class='del'>-        afr_changelog_post_op (frame, this);</div><div class='add'>+    afr_changelog_post_op(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * afr_transaction_fop_failed - inform that an fop failed</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_transaction_fop_failed (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                            int child_index)</div><div class='add'>+afr_transaction_fop_failed(call_frame_t *frame, xlator_t *this, int child_index)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t *   local = NULL;</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	local-&gt;transaction.failed_subvols[child_index] = 1;</div><div class='add'>+    local-&gt;transaction.failed_subvols[child_index] = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__need_previous_lock_unlocked (afr_local_t *local)</div><div class='add'>+__need_previous_lock_unlocked(afr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        afr_lock_t      *lock = NULL;</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-        if (!lock-&gt;acquired)</div><div class='del'>-                return _gf_false;</div><div class='del'>-        if (lock-&gt;acquired &amp;&amp; lock-&gt;event_generation != local-&gt;event_generation)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    if (!lock-&gt;acquired)</div><div class='ctx'>         return _gf_false;</div><div class='add'>+    if (lock-&gt;acquired &amp;&amp; lock-&gt;event_generation != local-&gt;event_generation)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__afr_eager_lock_handle (afr_local_t *local, gf_boolean_t *take_lock,</div><div class='del'>-                         gf_boolean_t *do_pre_op, afr_local_t **timer_local)</div><div class='del'>-{</div><div class='del'>-        afr_lock_t      *lock = NULL;</div><div class='del'>-        afr_local_t     *owner_local = NULL;</div><div class='del'>-        xlator_t        *this = local-&gt;transaction.frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd &amp;&amp; !afr_are_multiple_fds_opened (local, this)) {</div><div class='del'>-                local-&gt;transaction.eager_lock_on = _gf_true;</div><div class='del'>-                afr_set_lk_owner (local-&gt;transaction.frame, this, local-&gt;inode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='del'>-        if (__need_previous_lock_unlocked (local)) {</div><div class='del'>-                if (!list_empty (&amp;lock-&gt;owners)) {</div><div class='del'>-                        lock-&gt;release = _gf_true;</div><div class='del'>-                } else if (lock-&gt;delay_timer) {</div><div class='del'>-                        lock-&gt;release = _gf_true;</div><div class='del'>-                        if (gf_timer_call_cancel (this-&gt;ctx,</div><div class='del'>-                                                  lock-&gt;delay_timer)) {</div><div class='del'>-                                /* It will be put in frozen list</div><div class='del'>-                                 * in the code flow below*/</div><div class='del'>-                        } else {</div><div class='del'>-                                *timer_local = list_entry(lock-&gt;post_op.next,</div><div class='del'>-                                                          afr_local_t,</div><div class='del'>-                                                        transaction.owner_list);</div><div class='del'>-                                lock-&gt;delay_timer = NULL;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (!local-&gt;transaction.eager_lock_on)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;release) {</div><div class='del'>-                list_add_tail (&amp;local-&gt;transaction.wait_list,</div><div class='del'>-                               &amp;lock-&gt;frozen);</div><div class='del'>-                *take_lock = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;delay_timer) {</div><div class='del'>-                *take_lock = _gf_false;</div><div class='del'>-                if (gf_timer_call_cancel (this-&gt;ctx,</div><div class='del'>-                                          lock-&gt;delay_timer)) {</div><div class='del'>-                        list_add_tail (&amp;local-&gt;transaction.wait_list,</div><div class='del'>-                                       &amp;lock-&gt;frozen);</div><div class='del'>-                } else {</div><div class='del'>-                        *timer_local = list_entry(lock-&gt;post_op.next,</div><div class='del'>-                                                  afr_local_t,</div><div class='del'>-                                                  transaction.owner_list);</div><div class='del'>-                        afr_copy_inodelk_vars (&amp;local-&gt;internal_lock,</div><div class='del'>-                                               &amp;(*timer_local)-&gt;internal_lock,</div><div class='del'>-                                               this);</div><div class='del'>-                        lock-&gt;delay_timer = NULL;</div><div class='del'>-                        *do_pre_op = _gf_true;</div><div class='del'>-                        list_add_tail (&amp;local-&gt;transaction.owner_list,</div><div class='del'>-                                       &amp;lock-&gt;owners);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!list_empty (&amp;lock-&gt;owners)) {</div><div class='del'>-                if (!lock-&gt;acquired ||</div><div class='del'>-                    afr_has_lock_conflict (local, _gf_true)) {</div><div class='del'>-                        list_add_tail (&amp;local-&gt;transaction.wait_list,</div><div class='del'>-                                       &amp;lock-&gt;waiting);</div><div class='del'>-                        *take_lock = _gf_false;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                owner_local = list_entry (lock-&gt;owners.next,</div><div class='del'>-                                          afr_local_t,</div><div class='add'>+__afr_eager_lock_handle(afr_local_t *local, gf_boolean_t *take_lock,</div><div class='add'>+                        gf_boolean_t *do_pre_op, afr_local_t **timer_local)</div><div class='add'>+{</div><div class='add'>+    afr_lock_t *lock = NULL;</div><div class='add'>+    afr_local_t *owner_local = NULL;</div><div class='add'>+    xlator_t *this = local-&gt;transaction.frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd &amp;&amp; !afr_are_multiple_fds_opened(local, this)) {</div><div class='add'>+        local-&gt;transaction.eager_lock_on = _gf_true;</div><div class='add'>+        afr_set_lk_owner(local-&gt;transaction.frame, this, local-&gt;inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock = &amp;local-&gt;inode_ctx-&gt;lock[local-&gt;transaction.type];</div><div class='add'>+    if (__need_previous_lock_unlocked(local)) {</div><div class='add'>+        if (!list_empty(&amp;lock-&gt;owners)) {</div><div class='add'>+            lock-&gt;release = _gf_true;</div><div class='add'>+        } else if (lock-&gt;delay_timer) {</div><div class='add'>+            lock-&gt;release = _gf_true;</div><div class='add'>+            if (gf_timer_call_cancel(this-&gt;ctx, lock-&gt;delay_timer)) {</div><div class='add'>+                /* It will be put in frozen list</div><div class='add'>+                 * in the code flow below*/</div><div class='add'>+            } else {</div><div class='add'>+                *timer_local = list_entry(lock-&gt;post_op.next, afr_local_t,</div><div class='ctx'>                                           transaction.owner_list);</div><div class='del'>-                afr_copy_inodelk_vars (&amp;local-&gt;internal_lock,</div><div class='del'>-                                       &amp;owner_local-&gt;internal_lock,</div><div class='del'>-                                       this);</div><div class='del'>-                *take_lock = _gf_false;</div><div class='del'>-                *do_pre_op = _gf_true;</div><div class='add'>+                lock-&gt;delay_timer = NULL;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;acquired)</div><div class='del'>-                GF_ASSERT (!(*take_lock));</div><div class='del'>-        list_add_tail (&amp;local-&gt;transaction.owner_list, &amp;lock-&gt;owners);</div><div class='add'>+        if (!local-&gt;transaction.eager_lock_on)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;release) {</div><div class='add'>+        list_add_tail(&amp;local-&gt;transaction.wait_list, &amp;lock-&gt;frozen);</div><div class='add'>+        *take_lock = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;delay_timer) {</div><div class='add'>+        *take_lock = _gf_false;</div><div class='add'>+        if (gf_timer_call_cancel(this-&gt;ctx, lock-&gt;delay_timer)) {</div><div class='add'>+            list_add_tail(&amp;local-&gt;transaction.wait_list, &amp;lock-&gt;frozen);</div><div class='add'>+        } else {</div><div class='add'>+            *timer_local = list_entry(lock-&gt;post_op.next, afr_local_t,</div><div class='add'>+                                      transaction.owner_list);</div><div class='add'>+            afr_copy_inodelk_vars(&amp;local-&gt;internal_lock,</div><div class='add'>+                                  &amp;(*timer_local)-&gt;internal_lock, this);</div><div class='add'>+            lock-&gt;delay_timer = NULL;</div><div class='add'>+            *do_pre_op = _gf_true;</div><div class='add'>+            list_add_tail(&amp;local-&gt;transaction.owner_list, &amp;lock-&gt;owners);</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!list_empty(&amp;lock-&gt;owners)) {</div><div class='add'>+        if (!lock-&gt;acquired || afr_has_lock_conflict(local, _gf_true)) {</div><div class='add'>+            list_add_tail(&amp;local-&gt;transaction.wait_list, &amp;lock-&gt;waiting);</div><div class='add'>+            *take_lock = _gf_false;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        owner_local = list_entry(lock-&gt;owners.next, afr_local_t,</div><div class='add'>+                                 transaction.owner_list);</div><div class='add'>+        afr_copy_inodelk_vars(&amp;local-&gt;internal_lock,</div><div class='add'>+                              &amp;owner_local-&gt;internal_lock, this);</div><div class='add'>+        *take_lock = _gf_false;</div><div class='add'>+        *do_pre_op = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;acquired)</div><div class='add'>+        GF_ASSERT(!(*take_lock));</div><div class='add'>+    list_add_tail(&amp;local-&gt;transaction.owner_list, &amp;lock-&gt;owners);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-afr_transaction_start (afr_local_t *local, xlator_t *this)</div><div class='add'>+afr_transaction_start(afr_local_t *local, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t   *priv = NULL;</div><div class='del'>-        gf_boolean_t    take_lock  = _gf_true;</div><div class='del'>-        gf_boolean_t    do_pre_op  = _gf_false;</div><div class='del'>-        afr_local_t     *timer_local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t take_lock = _gf_true;</div><div class='add'>+    gf_boolean_t do_pre_op = _gf_false;</div><div class='add'>+    afr_local_t *timer_local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;transaction.type != AFR_DATA_TRANSACTION &amp;&amp;</div><div class='del'>-            local-&gt;transaction.type != AFR_METADATA_TRANSACTION)</div><div class='del'>-                goto lock_phase;</div><div class='add'>+    if (local-&gt;transaction.type != AFR_DATA_TRANSACTION &amp;&amp;</div><div class='add'>+        local-&gt;transaction.type != AFR_METADATA_TRANSACTION)</div><div class='add'>+        goto lock_phase;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;eager_lock)</div><div class='del'>-                goto lock_phase;</div><div class='add'>+    if (!priv-&gt;eager_lock)</div><div class='add'>+        goto lock_phase;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __afr_eager_lock_handle (local, &amp;take_lock, &amp;do_pre_op,</div><div class='del'>-                                         &amp;timer_local);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __afr_eager_lock_handle(local, &amp;take_lock, &amp;do_pre_op, &amp;timer_local);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;inode-&gt;lock);</div><div class='ctx'> lock_phase:</div><div class='del'>-        if (!local-&gt;transaction.eager_lock_on) {</div><div class='del'>-                afr_set_lk_owner (local-&gt;transaction.frame, this,</div><div class='del'>-                                  local-&gt;transaction.frame-&gt;root);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (take_lock) {</div><div class='del'>-                afr_lock (local-&gt;transaction.frame, this);</div><div class='del'>-        } else if (do_pre_op) {</div><div class='del'>-                afr_changelog_pre_op (local-&gt;transaction.frame, this);</div><div class='del'>-        }</div><div class='del'>-        /*Always call delayed_changelog_wake_up_cbk after calling pre-op above</div><div class='del'>-         * so that any inheriting can happen*/</div><div class='del'>-        if (timer_local)</div><div class='del'>-                afr_delayed_changelog_wake_up_cbk (timer_local);</div><div class='add'>+    if (!local-&gt;transaction.eager_lock_on) {</div><div class='add'>+        afr_set_lk_owner(local-&gt;transaction.frame, this,</div><div class='add'>+                         local-&gt;transaction.frame-&gt;root);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (take_lock) {</div><div class='add'>+        afr_lock(local-&gt;transaction.frame, this);</div><div class='add'>+    } else if (do_pre_op) {</div><div class='add'>+        afr_changelog_pre_op(local-&gt;transaction.frame, this);</div><div class='add'>+    }</div><div class='add'>+    /*Always call delayed_changelog_wake_up_cbk after calling pre-op above</div><div class='add'>+     * so that any inheriting can happen*/</div><div class='add'>+    if (timer_local)</div><div class='add'>+        afr_delayed_changelog_wake_up_cbk(timer_local);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_write_txn_refresh_done (call_frame_t *frame, xlator_t *this, int err)</div><div class='add'>+afr_write_txn_refresh_done(call_frame_t *frame, xlator_t *this, int err)</div><div class='ctx'> {</div><div class='del'>-        afr_local_t   *local           = frame-&gt;local;</div><div class='add'>+    afr_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (err) {</div><div class='del'>-                AFR_SET_ERROR_AND_CHECK_SPLIT_BRAIN(-1, err);</div><div class='del'>-                goto fail;</div><div class='del'>-        }</div><div class='add'>+    if (err) {</div><div class='add'>+        AFR_SET_ERROR_AND_CHECK_SPLIT_BRAIN(-1, err);</div><div class='add'>+        goto fail;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        afr_transaction_start (local, this);</div><div class='del'>-        return 0;</div><div class='add'>+    afr_transaction_start(local, this);</div><div class='add'>+    return 0;</div><div class='ctx'> fail:</div><div class='del'>-        local-&gt;transaction.unwind (frame, this);</div><div class='del'>-        AFR_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;transaction.unwind(frame, this);</div><div class='add'>+    AFR_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_transaction (call_frame_t *frame, xlator_t *this, afr_transaction_type type)</div><div class='del'>-{</div><div class='del'>-        afr_local_t   *local           = NULL;</div><div class='del'>-        afr_private_t *priv            = NULL;</div><div class='del'>-        int           ret              = -1;</div><div class='del'>-        int           event_generation = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local-&gt;transaction.frame = frame;</div><div class='del'>-</div><div class='del'>-        local-&gt;transaction.type   = type;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum (local-&gt;child_up, this)) {</div><div class='del'>-                ret = -afr_quorum_errno(priv);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!afr_is_consistent_io_possible (local, priv, &amp;ret)) {</div><div class='del'>-                ret = -ret; /*op_errno to ret conversion*/</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = afr_transaction_local_init (local, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (type != AFR_METADATA_TRANSACTION) {</div><div class='del'>-                goto txn_start;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = afr_inode_get_readable (frame, local-&gt;inode, this,</div><div class='del'>-                                      local-&gt;readable, &amp;event_generation, type);</div><div class='del'>-        if (ret &lt; 0 || afr_is_inode_refresh_reqd (local-&gt;inode, this,</div><div class='del'>-                                                  priv-&gt;event_generation,</div><div class='del'>-                                                  event_generation)) {</div><div class='del'>-                afr_inode_refresh (frame, this, local-&gt;inode, local-&gt;loc.gfid,</div><div class='del'>-                                   afr_write_txn_refresh_done);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+afr_transaction(call_frame_t *frame, xlator_t *this, afr_transaction_type type)</div><div class='add'>+{</div><div class='add'>+    afr_local_t *local = NULL;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int event_generation = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local-&gt;transaction.frame = frame;</div><div class='add'>+</div><div class='add'>+    local-&gt;transaction.type = type;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum(local-&gt;child_up, this)) {</div><div class='add'>+        ret = -afr_quorum_errno(priv);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!afr_is_consistent_io_possible(local, priv, &amp;ret)) {</div><div class='add'>+        ret = -ret; /*op_errno to ret conversion*/</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_transaction_local_init(local, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (type != AFR_METADATA_TRANSACTION) {</div><div class='add'>+        goto txn_start;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_inode_get_readable(frame, local-&gt;inode, this, local-&gt;readable,</div><div class='add'>+                                 &amp;event_generation, type);</div><div class='add'>+    if (ret &lt; 0 ||</div><div class='add'>+        afr_is_inode_refresh_reqd(local-&gt;inode, this, priv-&gt;event_generation,</div><div class='add'>+                                  event_generation)) {</div><div class='add'>+        afr_inode_refresh(frame, this, local-&gt;inode, local-&gt;loc.gfid,</div><div class='add'>+                          afr_write_txn_refresh_done);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> txn_start:</div><div class='del'>-        ret = 0;</div><div class='del'>-        afr_transaction_start (local, this);</div><div class='add'>+    ret = 0;</div><div class='add'>+    afr_transaction_start(local, this);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c<br/>index bde9a97a4e7..568293cdf2c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/afr/src/afr.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/afr/src/afr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/afr/src/afr.c</a></div><div class='hunk'>@@ -21,1196 +21,1135 @@</div><div class='ctx'> struct volume_options options[];</div><div class='ctx'> </div><div class='ctx'> static char *afr_favorite_child_policies[AFR_FAV_CHILD_POLICY_MAX + 1] = {</div><div class='del'>-        [AFR_FAV_CHILD_NONE] = "none",</div><div class='del'>-        [AFR_FAV_CHILD_BY_SIZE] = "size",</div><div class='del'>-        [AFR_FAV_CHILD_BY_CTIME] = "ctime",</div><div class='del'>-        [AFR_FAV_CHILD_BY_MTIME] = "mtime",</div><div class='del'>-        [AFR_FAV_CHILD_BY_MAJORITY] = "majority",</div><div class='del'>-        [AFR_FAV_CHILD_POLICY_MAX] = NULL,</div><div class='add'>+    [AFR_FAV_CHILD_NONE] = "none",</div><div class='add'>+    [AFR_FAV_CHILD_BY_SIZE] = "size",</div><div class='add'>+    [AFR_FAV_CHILD_BY_CTIME] = "ctime",</div><div class='add'>+    [AFR_FAV_CHILD_BY_MTIME] = "mtime",</div><div class='add'>+    [AFR_FAV_CHILD_BY_MAJORITY] = "majority",</div><div class='add'>+    [AFR_FAV_CHILD_POLICY_MAX] = NULL,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-notify (xlator_t *this, int32_t event,</div><div class='del'>-        void *data, ...)</div><div class='add'>+notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        va_list         ap;</div><div class='del'>-        void *data2 = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    va_list ap;</div><div class='add'>+    void *data2 = NULL;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, data);</div><div class='del'>-        data2 = va_arg (ap, dict_t*);</div><div class='del'>-        va_end (ap);</div><div class='del'>-        ret = afr_notify (this, event, data, data2);</div><div class='add'>+    va_start(ap, data);</div><div class='add'>+    data2 = va_arg(ap, dict_t *);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    ret = afr_notify(this, event, data, data2);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_afr_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_afr_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='ctx'>         return ret;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-xlator_subvolume_index (xlator_t *this, xlator_t *subvol)</div><div class='add'>+xlator_subvolume_index(xlator_t *this, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        int index = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        xlator_list_t *list = NULL;</div><div class='del'>-</div><div class='del'>-        list = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        while (list) {</div><div class='del'>-                if (subvol == list-&gt;xlator ||</div><div class='del'>-                    strcmp (subvol-&gt;name, list-&gt;xlator-&gt;name) == 0) {</div><div class='del'>-                        index = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                list = list-&gt;next;</div><div class='del'>-                i++;</div><div class='add'>+    int index = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_list_t *list = NULL;</div><div class='add'>+</div><div class='add'>+    list = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    while (list) {</div><div class='add'>+        if (subvol == list-&gt;xlator ||</div><div class='add'>+            strcmp(subvol-&gt;name, list-&gt;xlator-&gt;name) == 0) {</div><div class='add'>+            index = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        list = list-&gt;next;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return index;</div><div class='add'>+    return index;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-fix_quorum_options (xlator_t *this, afr_private_t *priv, char *qtype,</div><div class='del'>-                    dict_t *options)</div><div class='add'>+fix_quorum_options(xlator_t *this, afr_private_t *priv, char *qtype,</div><div class='add'>+                   dict_t *options)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        if (dict_get (options, "quorum-type") == NULL) {</div><div class='del'>-                /* If user doesn't configure anything enable auto-quorum if the</div><div class='del'>-                 * replica has more than two subvolumes */</div><div class='del'>-                if (priv-&gt;child_count &gt; 2)</div><div class='del'>-                        qtype = "auto";</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;quorum_count &amp;&amp; strcmp (qtype, "fixed")) {</div><div class='del'>-                gf_msg (this-&gt;name,GF_LOG_WARNING, 0, AFR_MSG_QUORUM_OVERRIDE,</div><div class='del'>-                       "quorum-type %s overriding quorum-count %u",</div><div class='del'>-                       qtype, priv-&gt;quorum_count);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!strcmp (qtype, "none")) {</div><div class='del'>-                priv-&gt;quorum_count = 0;</div><div class='del'>-        } else if (!strcmp (qtype, "auto")) {</div><div class='del'>-                priv-&gt;quorum_count = AFR_QUORUM_AUTO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    if (dict_get(options, "quorum-type") == NULL) {</div><div class='add'>+        /* If user doesn't configure anything enable auto-quorum if the</div><div class='add'>+         * replica has more than two subvolumes */</div><div class='add'>+        if (priv-&gt;child_count &gt; 2)</div><div class='add'>+            qtype = "auto";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;quorum_count &amp;&amp; strcmp(qtype, "fixed")) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_QUORUM_OVERRIDE,</div><div class='add'>+               "quorum-type %s overriding quorum-count %u", qtype,</div><div class='add'>+               priv-&gt;quorum_count);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(qtype, "none")) {</div><div class='add'>+        priv-&gt;quorum_count = 0;</div><div class='add'>+    } else if (!strcmp(qtype, "auto")) {</div><div class='add'>+        priv-&gt;quorum_count = AFR_QUORUM_AUTO;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-afr_set_favorite_child_policy (afr_private_t *priv, char *policy)</div><div class='add'>+afr_set_favorite_child_policy(afr_private_t *priv, char *policy)</div><div class='ctx'> {</div><div class='del'>-        int index = -1;</div><div class='add'>+    int index = -1;</div><div class='ctx'> </div><div class='del'>-        index = gf_get_index_by_elem (afr_favorite_child_policies, policy);</div><div class='del'>-        if (index  &lt; 0 || index &gt;= AFR_FAV_CHILD_POLICY_MAX)</div><div class='del'>-                return -1;</div><div class='add'>+    index = gf_get_index_by_elem(afr_favorite_child_policies, policy);</div><div class='add'>+    if (index &lt; 0 || index &gt;= AFR_FAV_CHILD_POLICY_MAX)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fav_child_policy = index;</div><div class='add'>+    priv-&gt;fav_child_policy = index;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv        = NULL;</div><div class='del'>-        xlator_t      *read_subvol = NULL;</div><div class='del'>-        int            read_subvol_index = -1;</div><div class='del'>-        int            ret         = -1;</div><div class='del'>-        int            index       = -1;</div><div class='del'>-        char          *qtype       = NULL;</div><div class='del'>-        char          *fav_child_policy = NULL;</div><div class='del'>-        gf_boolean_t   consistent_io = _gf_false;</div><div class='del'>-        gf_boolean_t   choose_local_old = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    xlator_t *read_subvol = NULL;</div><div class='add'>+    int read_subvol_index = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int index = -1;</div><div class='add'>+    char *qtype = NULL;</div><div class='add'>+    char *fav_child_policy = NULL;</div><div class='add'>+    gf_boolean_t consistent_io = _gf_false;</div><div class='add'>+    gf_boolean_t choose_local_old = _gf_false;</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_RECONF ("afr-dirty-xattr",</div><div class='del'>-			  priv-&gt;afr_dirty, options, str,</div><div class='del'>-			  out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_RECONF ("metadata-splitbrain-forced-heal",</div><div class='del'>-			  priv-&gt;metadata_splitbrain_forced_heal, options, bool,</div><div class='del'>-			  out);</div><div class='add'>+    GF_OPTION_RECONF("afr-dirty-xattr", priv-&gt;afr_dirty, options, str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("background-self-heal-count",</div><div class='del'>-                          priv-&gt;background_self_heal_count, options, uint32,</div><div class='del'>-                          out);</div><div class='add'>+    GF_OPTION_RECONF("metadata-splitbrain-forced-heal",</div><div class='add'>+                     priv-&gt;metadata_splitbrain_forced_heal, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("heal-wait-queue-length",</div><div class='del'>-                          priv-&gt;heal_wait_qlen, options, uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("background-self-heal-count",</div><div class='add'>+                     priv-&gt;background_self_heal_count, options, uint32, out);</div><div class='ctx'> </div><div class='add'>+    GF_OPTION_RECONF("heal-wait-queue-length", priv-&gt;heal_wait_qlen, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("metadata-self-heal",</div><div class='del'>-                          priv-&gt;metadata_self_heal, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("metadata-self-heal", priv-&gt;metadata_self_heal, options,</div><div class='add'>+                     bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("data-self-heal", priv-&gt;data_self_heal, options, str,</div><div class='del'>-                          out);</div><div class='add'>+    GF_OPTION_RECONF("data-self-heal", priv-&gt;data_self_heal, options, str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("entry-self-heal", priv-&gt;entry_self_heal, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+    GF_OPTION_RECONF("entry-self-heal", priv-&gt;entry_self_heal, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("data-self-heal-window-size",</div><div class='del'>-                          priv-&gt;data_self_heal_window_size, options,</div><div class='del'>-                          uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("data-self-heal-window-size",</div><div class='add'>+                     priv-&gt;data_self_heal_window_size, options, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("data-self-heal-algorithm",</div><div class='del'>-                          priv-&gt;data_self_heal_algorithm, options, str, out);</div><div class='add'>+    GF_OPTION_RECONF("data-self-heal-algorithm", priv-&gt;data_self_heal_algorithm,</div><div class='add'>+                     options, str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("halo-enabled",</div><div class='del'>-                          priv-&gt;halo_enabled, options, bool,</div><div class='del'>-                          out);</div><div class='add'>+    GF_OPTION_RECONF("halo-enabled", priv-&gt;halo_enabled, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("halo-shd-max-latency",</div><div class='del'>-                          priv-&gt;shd.halo_max_latency_msec, options, uint32,</div><div class='del'>-                          out);</div><div class='add'>+    GF_OPTION_RECONF("halo-shd-max-latency", priv-&gt;shd.halo_max_latency_msec,</div><div class='add'>+                     options, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("halo-nfsd-max-latency",</div><div class='del'>-                          priv-&gt;nfsd.halo_max_latency_msec, options, uint32,</div><div class='del'>-                          out);</div><div class='add'>+    GF_OPTION_RECONF("halo-nfsd-max-latency", priv-&gt;nfsd.halo_max_latency_msec,</div><div class='add'>+                     options, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("halo-max-latency", priv-&gt;halo_max_latency_msec,</div><div class='del'>-                          options, uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("halo-max-latency", priv-&gt;halo_max_latency_msec, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("halo-max-replicas", priv-&gt;halo_max_replicas, options,</div><div class='del'>-                              uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("halo-max-replicas", priv-&gt;halo_max_replicas, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("halo-min-replicas", priv-&gt;halo_min_replicas, options,</div><div class='del'>-                              uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("halo-min-replicas", priv-&gt;halo_min_replicas, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("read-subvolume", read_subvol, options, xlator, out);</div><div class='add'>+    GF_OPTION_RECONF("read-subvolume", read_subvol, options, xlator, out);</div><div class='ctx'> </div><div class='del'>-        choose_local_old = priv-&gt;choose_local;</div><div class='del'>-        GF_OPTION_RECONF ("choose-local", priv-&gt;choose_local, options, bool,</div><div class='del'>-                          out);</div><div class='add'>+    choose_local_old = priv-&gt;choose_local;</div><div class='add'>+    GF_OPTION_RECONF("choose-local", priv-&gt;choose_local, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        if (choose_local_old != priv-&gt;choose_local) {</div><div class='del'>-                priv-&gt;read_child = -1;</div><div class='del'>-                if (choose_local_old == _gf_false)</div><div class='del'>-                        priv-&gt;did_discovery = _gf_false;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("read-hash-mode", priv-&gt;hash_mode,</div><div class='del'>-                          options, uint32, out);</div><div class='del'>-</div><div class='del'>-        if (read_subvol) {</div><div class='del'>-                index = xlator_subvolume_index (this, read_subvol);</div><div class='del'>-                if (index == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_INVALID_SUBVOL, "%s not a subvolume",</div><div class='del'>-                                read_subvol-&gt;name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;read_child = index;</div><div class='add'>+    if (choose_local_old != priv-&gt;choose_local) {</div><div class='add'>+        priv-&gt;read_child = -1;</div><div class='add'>+        if (choose_local_old == _gf_false)</div><div class='add'>+            priv-&gt;did_discovery = _gf_false;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("read-hash-mode", priv-&gt;hash_mode, options, uint32, out);</div><div class='add'>+</div><div class='add'>+    if (read_subvol) {</div><div class='add'>+        index = xlator_subvolume_index(this, read_subvol);</div><div class='add'>+        if (index == -1) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_SUBVOL,</div><div class='add'>+                   "%s not a subvolume", read_subvol-&gt;name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("read-subvolume-index",read_subvol_index, options,int32,out);</div><div class='del'>-</div><div class='del'>-        if (read_subvol_index &gt;-1) {</div><div class='del'>-                index=read_subvol_index;</div><div class='del'>-                if (index &gt;= priv-&gt;child_count) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_INVALID_SUBVOL,</div><div class='del'>-                                "%d not a subvolume-index", index);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;read_child = index;</div><div class='add'>+        priv-&gt;read_child = index;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("read-subvolume-index", read_subvol_index, options, int32,</div><div class='add'>+                     out);</div><div class='add'>+</div><div class='add'>+    if (read_subvol_index &gt; -1) {</div><div class='add'>+        index = read_subvol_index;</div><div class='add'>+        if (index &gt;= priv-&gt;child_count) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_SUBVOL,</div><div class='add'>+                   "%d not a subvolume-index", index);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        priv-&gt;read_child = index;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("pre-op-compat", priv-&gt;pre_op_compat, options, bool,</div><div class='del'>-                          out);</div><div class='del'>-        GF_OPTION_RECONF ("locking-scheme", priv-&gt;locking_scheme, options, str,</div><div class='del'>-                          out);</div><div class='del'>-        GF_OPTION_RECONF ("full-lock", priv-&gt;full_lock, options, bool, out);</div><div class='del'>-        GF_OPTION_RECONF ("granular-entry-heal", priv-&gt;esh_granular, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+    GF_OPTION_RECONF("pre-op-compat", priv-&gt;pre_op_compat, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("locking-scheme", priv-&gt;locking_scheme, options, str, out);</div><div class='add'>+    GF_OPTION_RECONF("full-lock", priv-&gt;full_lock, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("granular-entry-heal", priv-&gt;esh_granular, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("eager-lock", priv-&gt;eager_lock, options, bool, out);</div><div class='del'>-        GF_OPTION_RECONF ("quorum-type", qtype, options, str, out);</div><div class='del'>-        GF_OPTION_RECONF ("quorum-count", priv-&gt;quorum_count, options,</div><div class='del'>-                          uint32, out);</div><div class='del'>-        fix_quorum_options (this, priv, qtype, options);</div><div class='del'>-        if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum (priv-&gt;child_up, this))</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_QUORUM_FAIL,</div><div class='del'>-                        "Client-quorum is not met");</div><div class='add'>+    GF_OPTION_RECONF("eager-lock", priv-&gt;eager_lock, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("quorum-type", qtype, options, str, out);</div><div class='add'>+    GF_OPTION_RECONF("quorum-count", priv-&gt;quorum_count, options, uint32, out);</div><div class='add'>+    fix_quorum_options(this, priv, qtype, options);</div><div class='add'>+    if (priv-&gt;quorum_count &amp;&amp; !afr_has_quorum(priv-&gt;child_up, this))</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_QUORUM_FAIL,</div><div class='add'>+               "Client-quorum is not met");</div><div class='ctx'> </div><div class='add'>+    GF_OPTION_RECONF("post-op-delay-secs", priv-&gt;post_op_delay_secs, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_RECONF ("post-op-delay-secs", priv-&gt;post_op_delay_secs, options,</div><div class='del'>-			  uint32, out);</div><div class='add'>+    GF_OPTION_RECONF(AFR_SH_READDIR_SIZE_KEY, priv-&gt;sh_readdir_size, options,</div><div class='add'>+                     size_uint64, out);</div><div class='add'>+    /* Reset this so we re-discover in case the topology changed.  */</div><div class='add'>+    GF_OPTION_RECONF("ensure-durability", priv-&gt;ensure_durability, options,</div><div class='add'>+                     bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF (AFR_SH_READDIR_SIZE_KEY, priv-&gt;sh_readdir_size,</div><div class='del'>-                          options, size_uint64, out);</div><div class='del'>-        /* Reset this so we re-discover in case the topology changed.  */</div><div class='del'>-        GF_OPTION_RECONF ("ensure-durability", priv-&gt;ensure_durability, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+    GF_OPTION_RECONF("self-heal-daemon", priv-&gt;shd.enabled, options, bool, out);</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_RECONF ("self-heal-daemon", priv-&gt;shd.enabled, options,</div><div class='del'>-			  bool, out);</div><div class='add'>+    GF_OPTION_RECONF("iam-self-heal-daemon", priv-&gt;shd.iamshd, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_RECONF ("iam-self-heal-daemon", priv-&gt;shd.iamshd, options,</div><div class='del'>-			  bool, out);</div><div class='add'>+    GF_OPTION_RECONF("heal-timeout", priv-&gt;shd.timeout, options, int32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("heal-timeout", priv-&gt;shd.timeout, options,</div><div class='del'>-                          int32, out);</div><div class='add'>+    GF_OPTION_RECONF("consistent-metadata", priv-&gt;consistent_metadata, options,</div><div class='add'>+                     bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("consistent-metadata", priv-&gt;consistent_metadata,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("shd-max-threads", priv-&gt;shd.max_threads, options, uint32,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("shd-max-threads", priv-&gt;shd.max_threads,</div><div class='del'>-                          options, uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("shd-wait-qlength", priv-&gt;shd.wait_qlength, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("shd-wait-qlength", priv-&gt;shd.wait_qlength,</div><div class='del'>-                          options, uint32, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("favorite-child-policy", fav_child_policy, options,</div><div class='del'>-                          str, out);</div><div class='del'>-        if (afr_set_favorite_child_policy (priv, fav_child_policy) == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    GF_OPTION_RECONF("favorite-child-policy", fav_child_policy, options, str,</div><div class='add'>+                     out);</div><div class='add'>+    if (afr_set_favorite_child_policy(priv, fav_child_policy) == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;did_discovery = _gf_false;</div><div class='add'>+    priv-&gt;did_discovery = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("consistent-io", consistent_io, options, bool, out);</div><div class='del'>-        if (priv-&gt;quorum_count != 0)</div><div class='del'>-                consistent_io = _gf_false;</div><div class='del'>-        priv-&gt;consistent_io = consistent_io;</div><div class='add'>+    GF_OPTION_RECONF("consistent-io", consistent_io, options, bool, out);</div><div class='add'>+    if (priv-&gt;quorum_count != 0)</div><div class='add'>+        consistent_io = _gf_false;</div><div class='add'>+    priv-&gt;consistent_io = consistent_io;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-afr_pending_xattrs_init (afr_private_t *priv, xlator_t *this)</div><div class='add'>+afr_pending_xattrs_init(afr_private_t *priv, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-        char *ptr = NULL;</div><div class='del'>-        char *ptr1 = NULL;</div><div class='del'>-        char *xattrs_list = NULL;</div><div class='del'>-        xlator_list_t *trav = NULL;</div><div class='del'>-        int child_count = -1;</div><div class='del'>-</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        child_count = priv-&gt;child_count;</div><div class='del'>-        if (priv-&gt;thin_arbiter_count) {</div><div class='del'>-                /* priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX] is used as the</div><div class='del'>-                 * name of the thin arbiter file for persistence across add/</div><div class='del'>-                 * removal of DHT subvols.*/</div><div class='del'>-                child_count++;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *ptr1 = NULL;</div><div class='add'>+    char *xattrs_list = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int child_count = -1;</div><div class='add'>+</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    child_count = priv-&gt;child_count;</div><div class='add'>+    if (priv-&gt;thin_arbiter_count) {</div><div class='add'>+        /* priv-&gt;pending_key[THIN_ARBITER_BRICK_INDEX] is used as the</div><div class='add'>+         * name of the thin arbiter file for persistence across add/</div><div class='add'>+         * removal of DHT subvols.*/</div><div class='add'>+        child_count++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("afr-pending-xattr", xattrs_list, str, out);</div><div class='add'>+    priv-&gt;pending_key = GF_CALLOC(sizeof(*priv-&gt;pending_key), child_count,</div><div class='add'>+                                  gf_afr_mt_char);</div><div class='add'>+    if (!priv-&gt;pending_key) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!xattrs_list) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_NO_CHANGELOG,</div><div class='add'>+               "Unable to fetch afr-pending-xattr option from volfile."</div><div class='add'>+               " Falling back to using client translator names. ");</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("afr-pending-xattr", xattrs_list, str, out);</div><div class='del'>-        priv-&gt;pending_key = GF_CALLOC (sizeof (*priv-&gt;pending_key),</div><div class='del'>-                                       child_count, gf_afr_mt_char);</div><div class='del'>-        if (!priv-&gt;pending_key) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!xattrs_list) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_NO_CHANGELOG,</div><div class='del'>-                        "Unable to fetch afr-pending-xattr option from volfile."</div><div class='del'>-                        " Falling back to using client translator names. ");</div><div class='del'>-</div><div class='del'>-                while (i &lt; child_count) {</div><div class='del'>-                        ret = gf_asprintf (&amp;priv-&gt;pending_key[i], "%s.%s",</div><div class='del'>-                                           AFR_XATTR_PREFIX,</div><div class='del'>-                                           trav-&gt;xlator-&gt;name);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                        i++;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ptr = ptr1 = gf_strdup (xattrs_list);</div><div class='del'>-        if (!ptr) {</div><div class='add'>+        while (i &lt; child_count) {</div><div class='add'>+            ret = gf_asprintf(&amp;priv-&gt;pending_key[i], "%s.%s", AFR_XATTR_PREFIX,</div><div class='add'>+                              trav-&gt;xlator-&gt;name);</div><div class='add'>+            if (ret == -1) {</div><div class='ctx'>                 ret = -ENOMEM;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0, ptr = strtok (ptr, ","); ptr; ptr = strtok (NULL, ",")) {</div><div class='del'>-                ret = gf_asprintf (&amp;priv-&gt;pending_key[i], "%s.%s",</div><div class='del'>-                                   AFR_XATTR_PREFIX, ptr);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                i++;</div><div class='add'>+            }</div><div class='add'>+            trav = trav-&gt;next;</div><div class='add'>+            i++;</div><div class='ctx'>         }</div><div class='ctx'>         ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ptr = ptr1 = gf_strdup(xattrs_list);</div><div class='add'>+    if (!ptr) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0, ptr = strtok(ptr, ","); ptr; ptr = strtok(NULL, ",")) {</div><div class='add'>+        ret = gf_asprintf(&amp;priv-&gt;pending_key[i], "%s.%s", AFR_XATTR_PREFIX,</div><div class='add'>+                          ptr);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (ptr1);</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    GF_FREE(ptr1);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv        = NULL;</div><div class='del'>-        int            child_count = 0;</div><div class='del'>-        xlator_list_t *trav        = NULL;</div><div class='del'>-        int            i           = 0;</div><div class='del'>-        int            ret         = -1;</div><div class='del'>-        GF_UNUSED int  op_errno    = 0;</div><div class='del'>-        xlator_t      *read_subvol = NULL;</div><div class='del'>-        int            read_subvol_index = -1;</div><div class='del'>-        char          *qtype       = NULL;</div><div class='del'>-        char          *fav_child_policy = NULL;</div><div class='del'>-        char          *thin_arbiter = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        AFR_MSG_CHILD_MISCONFIGURED,</div><div class='del'>-                        "replicate translator needs more than one "</div><div class='del'>-                        "subvolume defined.");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        AFR_MSG_VOL_MISCONFIGURED, "Volume is dangling.");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	this-&gt;private = GF_CALLOC (1, sizeof (afr_private_t),</div><div class='del'>-                                   gf_afr_mt_afr_private_t);</div><div class='del'>-        if (!this-&gt;private)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        child_count = xlator_subvolume_count (this);</div><div class='del'>-</div><div class='del'>-        priv-&gt;child_count = child_count;</div><div class='del'>-</div><div class='del'>-        priv-&gt;read_child = -1;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("arbiter-count", priv-&gt;arbiter_count, uint32, out);</div><div class='del'>-        GF_OPTION_INIT ("thin-arbiter", thin_arbiter, str, out);</div><div class='del'>-        if (thin_arbiter &amp;&amp; strlen(thin_arbiter) &gt; 0) {</div><div class='del'>-                priv-&gt;thin_arbiter_count = 1;</div><div class='del'>-                priv-&gt;child_count--;</div><div class='del'>-                priv-&gt;ta_bad_child_index = AFR_CHILD_UNKNOWN;</div><div class='del'>-                priv-&gt;ta_notify_dom_lock_offset = 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+    int child_count = 0;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    GF_UNUSED int op_errno = 0;</div><div class='add'>+    xlator_t *read_subvol = NULL;</div><div class='add'>+    int read_subvol_index = -1;</div><div class='add'>+    char *qtype = NULL;</div><div class='add'>+    char *fav_child_policy = NULL;</div><div class='add'>+    char *thin_arbiter = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_CHILD_MISCONFIGURED,</div><div class='add'>+               "replicate translator needs more than one "</div><div class='add'>+               "subvolume defined.");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, AFR_MSG_VOL_MISCONFIGURED,</div><div class='add'>+               "Volume is dangling.");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;private = GF_CALLOC(1, sizeof(afr_private_t),</div><div class='add'>+                              gf_afr_mt_afr_private_t);</div><div class='add'>+    if (!this-&gt;private)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    child_count = xlator_subvolume_count(this);</div><div class='add'>+</div><div class='add'>+    priv-&gt;child_count = child_count;</div><div class='add'>+</div><div class='add'>+    priv-&gt;read_child = -1;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("arbiter-count", priv-&gt;arbiter_count, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("thin-arbiter", thin_arbiter, str, out);</div><div class='add'>+    if (thin_arbiter &amp;&amp; strlen(thin_arbiter) &gt; 0) {</div><div class='add'>+        priv-&gt;thin_arbiter_count = 1;</div><div class='add'>+        priv-&gt;child_count--;</div><div class='add'>+        priv-&gt;ta_bad_child_index = AFR_CHILD_UNKNOWN;</div><div class='add'>+        priv-&gt;ta_notify_dom_lock_offset = 0;</div><div class='add'>+    }</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;healing);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;heal_waiting);</div><div class='add'>+</div><div class='add'>+    priv-&gt;spb_choice_timeout = AFR_DEFAULT_SPB_CHOICE_TIMEOUT;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("afr-dirty-xattr", priv-&gt;afr_dirty, str, out);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("metadata-splitbrain-forced-heal",</div><div class='add'>+                   priv-&gt;metadata_splitbrain_forced_heal, bool, out);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("read-subvolume", read_subvol, xlator, out);</div><div class='add'>+    if (read_subvol) {</div><div class='add'>+        priv-&gt;read_child = xlator_subvolume_index(this, read_subvol);</div><div class='add'>+        if (priv-&gt;read_child == -1) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_SUBVOL,</div><div class='add'>+                   "%s not a subvolume", read_subvol-&gt;name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;healing);</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;heal_waiting);</div><div class='del'>-</div><div class='del'>-        priv-&gt;spb_choice_timeout = AFR_DEFAULT_SPB_CHOICE_TIMEOUT;</div><div class='del'>-</div><div class='del'>-	GF_OPTION_INIT ("afr-dirty-xattr", priv-&gt;afr_dirty, str, out);</div><div class='del'>-</div><div class='del'>-	GF_OPTION_INIT ("metadata-splitbrain-forced-heal",</div><div class='del'>-			priv-&gt;metadata_splitbrain_forced_heal, bool, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("read-subvolume", read_subvol, xlator, out);</div><div class='del'>-        if (read_subvol) {</div><div class='del'>-                priv-&gt;read_child = xlator_subvolume_index (this, read_subvol);</div><div class='del'>-                if (priv-&gt;read_child == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_INVALID_SUBVOL, "%s not a subvolume",</div><div class='del'>-                                read_subvol-&gt;name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        GF_OPTION_INIT ("read-subvolume-index",read_subvol_index,int32,out);</div><div class='del'>-        if (read_subvol_index &gt; -1) {</div><div class='del'>-                if (read_subvol_index &gt;= priv-&gt;child_count) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                AFR_MSG_INVALID_SUBVOL,</div><div class='del'>-                                "%d not a subvolume-index", read_subvol_index);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;read_child = read_subvol_index;</div><div class='add'>+    }</div><div class='add'>+    GF_OPTION_INIT("read-subvolume-index", read_subvol_index, int32, out);</div><div class='add'>+    if (read_subvol_index &gt; -1) {</div><div class='add'>+        if (read_subvol_index &gt;= priv-&gt;child_count) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_SUBVOL,</div><div class='add'>+                   "%d not a subvolume-index", read_subvol_index);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        GF_OPTION_INIT ("choose-local", priv-&gt;choose_local, bool, out);</div><div class='del'>-</div><div class='del'>-        priv-&gt;pending_reads = GF_CALLOC (sizeof(*priv-&gt;pending_reads),</div><div class='del'>-                                         priv-&gt;child_count, gf_afr_mt_atomic_t);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("read-hash-mode", priv-&gt;hash_mode, uint32, out);</div><div class='add'>+        priv-&gt;read_child = read_subvol_index;</div><div class='add'>+    }</div><div class='add'>+    GF_OPTION_INIT("choose-local", priv-&gt;choose_local, bool, out);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;favorite_child = -1;</div><div class='add'>+    priv-&gt;pending_reads = GF_CALLOC(sizeof(*priv-&gt;pending_reads),</div><div class='add'>+                                    priv-&gt;child_count, gf_afr_mt_atomic_t);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("favorite-child-policy", fav_child_policy, str, out);</div><div class='del'>-        if (afr_set_favorite_child_policy(priv, fav_child_policy) == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("shd-max-threads", priv-&gt;shd.max_threads,</div><div class='del'>-                         uint32, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("shd-wait-qlength", priv-&gt;shd.wait_qlength,</div><div class='del'>-                         uint32, out);</div><div class='add'>+    GF_OPTION_INIT("read-hash-mode", priv-&gt;hash_mode, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("background-self-heal-count",</div><div class='del'>-                        priv-&gt;background_self_heal_count, uint32, out);</div><div class='add'>+    priv-&gt;favorite_child = -1;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("heal-wait-queue-length",</div><div class='del'>-                        priv-&gt;heal_wait_qlen, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("favorite-child-policy", fav_child_policy, str, out);</div><div class='add'>+    if (afr_set_favorite_child_policy(priv, fav_child_policy) == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("data-self-heal", priv-&gt;data_self_heal, str, out);</div><div class='add'>+    GF_OPTION_INIT("shd-max-threads", priv-&gt;shd.max_threads, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("data-self-heal-algorithm",</div><div class='del'>-                        priv-&gt;data_self_heal_algorithm, str, out);</div><div class='add'>+    GF_OPTION_INIT("shd-wait-qlength", priv-&gt;shd.wait_qlength, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("data-self-heal-window-size",</div><div class='del'>-                        priv-&gt;data_self_heal_window_size, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("background-self-heal-count",</div><div class='add'>+                   priv-&gt;background_self_heal_count, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("metadata-self-heal", priv-&gt;metadata_self_heal, bool,</div><div class='del'>-                        out);</div><div class='add'>+    GF_OPTION_INIT("heal-wait-queue-length", priv-&gt;heal_wait_qlen, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("entry-self-heal", priv-&gt;entry_self_heal, bool, out);</div><div class='add'>+    GF_OPTION_INIT("data-self-heal", priv-&gt;data_self_heal, str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("halo-shd-max-latency", priv-&gt;shd.halo_max_latency_msec,</div><div class='del'>-                        uint32, out);</div><div class='add'>+    GF_OPTION_INIT("data-self-heal-algorithm", priv-&gt;data_self_heal_algorithm,</div><div class='add'>+                   str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("halo-max-latency", priv-&gt;halo_max_latency_msec,</div><div class='del'>-                        uint32, out);</div><div class='del'>-        GF_OPTION_INIT ("halo-max-replicas", priv-&gt;halo_max_replicas, uint32,</div><div class='del'>-                        out);</div><div class='del'>-        GF_OPTION_INIT ("halo-min-replicas", priv-&gt;halo_min_replicas, uint32,</div><div class='del'>-                        out);</div><div class='add'>+    GF_OPTION_INIT("data-self-heal-window-size",</div><div class='add'>+                   priv-&gt;data_self_heal_window_size, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("halo-enabled",</div><div class='del'>-                        priv-&gt;halo_enabled, bool, out);</div><div class='add'>+    GF_OPTION_INIT("metadata-self-heal", priv-&gt;metadata_self_heal, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("halo-nfsd-max-latency",</div><div class='del'>-                        priv-&gt;nfsd.halo_max_latency_msec, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("entry-self-heal", priv-&gt;entry_self_heal, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("iam-nfs-daemon", priv-&gt;nfsd.iamnfsd, bool, out);</div><div class='add'>+    GF_OPTION_INIT("halo-shd-max-latency", priv-&gt;shd.halo_max_latency_msec,</div><div class='add'>+                   uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("optimistic-change-log", priv-&gt;optimistic_change_log,</div><div class='del'>-                        bool, out);</div><div class='add'>+    GF_OPTION_INIT("halo-max-latency", priv-&gt;halo_max_latency_msec, uint32,</div><div class='add'>+                   out);</div><div class='add'>+    GF_OPTION_INIT("halo-max-replicas", priv-&gt;halo_max_replicas, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("halo-min-replicas", priv-&gt;halo_min_replicas, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("pre-op-compat", priv-&gt;pre_op_compat, bool, out);</div><div class='del'>-        GF_OPTION_INIT ("locking-scheme", priv-&gt;locking_scheme, str, out);</div><div class='del'>-        GF_OPTION_INIT ("full-lock", priv-&gt;full_lock, bool, out);</div><div class='del'>-        GF_OPTION_INIT ("granular-entry-heal", priv-&gt;esh_granular, bool, out);</div><div class='add'>+    GF_OPTION_INIT("halo-enabled", priv-&gt;halo_enabled, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("eager-lock", priv-&gt;eager_lock, bool, out);</div><div class='del'>-        GF_OPTION_INIT ("quorum-type", qtype, str, out);</div><div class='del'>-        GF_OPTION_INIT ("quorum-count", priv-&gt;quorum_count, uint32, out);</div><div class='del'>-        GF_OPTION_INIT (AFR_SH_READDIR_SIZE_KEY, priv-&gt;sh_readdir_size, size_uint64,</div><div class='del'>-                        out);</div><div class='del'>-        fix_quorum_options (this, priv, qtype, this-&gt;options);</div><div class='add'>+    GF_OPTION_INIT("halo-nfsd-max-latency", priv-&gt;nfsd.halo_max_latency_msec,</div><div class='add'>+                   uint32, out);</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_INIT ("post-op-delay-secs", priv-&gt;post_op_delay_secs, uint32, out);</div><div class='del'>-        GF_OPTION_INIT ("ensure-durability", priv-&gt;ensure_durability, bool,</div><div class='del'>-                        out);</div><div class='add'>+    GF_OPTION_INIT("iam-nfs-daemon", priv-&gt;nfsd.iamnfsd, bool, out);</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_INIT ("self-heal-daemon", priv-&gt;shd.enabled, bool, out);</div><div class='add'>+    GF_OPTION_INIT("optimistic-change-log", priv-&gt;optimistic_change_log, bool,</div><div class='add'>+                   out);</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_INIT ("iam-self-heal-daemon", priv-&gt;shd.iamshd, bool, out);</div><div class='del'>-        GF_OPTION_INIT ("heal-timeout", priv-&gt;shd.timeout, int32, out);</div><div class='add'>+    GF_OPTION_INIT("pre-op-compat", priv-&gt;pre_op_compat, bool, out);</div><div class='add'>+    GF_OPTION_INIT("locking-scheme", priv-&gt;locking_scheme, str, out);</div><div class='add'>+    GF_OPTION_INIT("full-lock", priv-&gt;full_lock, bool, out);</div><div class='add'>+    GF_OPTION_INIT("granular-entry-heal", priv-&gt;esh_granular, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("consistent-metadata", priv-&gt;consistent_metadata, bool,</div><div class='del'>-                        out);</div><div class='del'>-        GF_OPTION_INIT ("consistent-io", priv-&gt;consistent_io, bool, out);</div><div class='add'>+    GF_OPTION_INIT("eager-lock", priv-&gt;eager_lock, bool, out);</div><div class='add'>+    GF_OPTION_INIT("quorum-type", qtype, str, out);</div><div class='add'>+    GF_OPTION_INIT("quorum-count", priv-&gt;quorum_count, uint32, out);</div><div class='add'>+    GF_OPTION_INIT(AFR_SH_READDIR_SIZE_KEY, priv-&gt;sh_readdir_size, size_uint64,</div><div class='add'>+                   out);</div><div class='add'>+    fix_quorum_options(this, priv, qtype, this-&gt;options);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;quorum_count != 0)</div><div class='del'>-                priv-&gt;consistent_io = _gf_false;</div><div class='add'>+    GF_OPTION_INIT("post-op-delay-secs", priv-&gt;post_op_delay_secs, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("ensure-durability", priv-&gt;ensure_durability, bool, out);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;wait_count = 1;</div><div class='add'>+    GF_OPTION_INIT("self-heal-daemon", priv-&gt;shd.enabled, bool, out);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;local = GF_CALLOC (sizeof (unsigned char), child_count,</div><div class='del'>-                                 gf_afr_mt_char);</div><div class='del'>-        if (!priv-&gt;local) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_INIT("iam-self-heal-daemon", priv-&gt;shd.iamshd, bool, out);</div><div class='add'>+    GF_OPTION_INIT("heal-timeout", priv-&gt;shd.timeout, int32, out);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;child_up = GF_CALLOC (sizeof (unsigned char), child_count,</div><div class='del'>-                                    gf_afr_mt_char);</div><div class='add'>+    GF_OPTION_INIT("consistent-metadata", priv-&gt;consistent_metadata, bool, out);</div><div class='add'>+    GF_OPTION_INIT("consistent-io", priv-&gt;consistent_io, bool, out);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;child_latency = GF_MALLOC (sizeof (*priv-&gt;child_latency)</div><div class='del'>-                                         * child_count,</div><div class='del'>-                                         gf_afr_mt_child_latency_t);</div><div class='add'>+    if (priv-&gt;quorum_count != 0)</div><div class='add'>+        priv-&gt;consistent_io = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;child_up || !priv-&gt;child_latency) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /*Initialize to -ve ping timeout so that they are not considered</div><div class='del'>-         * in child-up events until ping-event comes*/</div><div class='del'>-        for (i = 0; i &lt; child_count; i++)</div><div class='del'>-                priv-&gt;child_latency[i] = -1;</div><div class='del'>-</div><div class='del'>-        priv-&gt;children = GF_CALLOC (sizeof (xlator_t *), child_count,</div><div class='del'>-                                    gf_afr_mt_xlator_t);</div><div class='del'>-        if (!priv-&gt;children) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;wait_count = 1;</div><div class='ctx'> </div><div class='del'>-        ret = afr_pending_xattrs_init (priv, this);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    priv-&gt;local = GF_CALLOC(sizeof(unsigned char), child_count, gf_afr_mt_char);</div><div class='add'>+    if (!priv-&gt;local) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        i = 0;</div><div class='del'>-        while (i &lt; child_count) {</div><div class='del'>-                priv-&gt;children[i] = trav-&gt;xlator;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;child_up = GF_CALLOC(sizeof(unsigned char), child_count,</div><div class='add'>+                               gf_afr_mt_char);</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;priv-&gt;sh_domain, AFR_SH_DATA_DOMAIN_FMT,</div><div class='del'>-                           this-&gt;name);</div><div class='del'>-        if (-1 == ret) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;child_latency = GF_MALLOC(sizeof(*priv-&gt;child_latency) * child_count,</div><div class='add'>+                                    gf_afr_mt_child_latency_t);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;last_event = GF_CALLOC (child_count, sizeof (*priv-&gt;last_event),</div><div class='del'>-                                      gf_afr_mt_int32_t);</div><div class='del'>-        if (!priv-&gt;last_event) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;child_up || !priv-&gt;child_latency) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*Initialize to -ve ping timeout so that they are not considered</div><div class='add'>+     * in child-up events until ping-event comes*/</div><div class='add'>+    for (i = 0; i &lt; child_count; i++)</div><div class='add'>+        priv-&gt;child_latency[i] = -1;</div><div class='ctx'> </div><div class='del'>-	ret = afr_selfheal_daemon_init (this);</div><div class='del'>-	if (ret) {</div><div class='del'>-		ret = -ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    priv-&gt;children = GF_CALLOC(sizeof(xlator_t *), child_count,</div><div class='add'>+                               gf_afr_mt_xlator_t);</div><div class='add'>+    if (!priv-&gt;children) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* keep more local here as we may need them for self-heal etc */</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (afr_local_t, 512);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = afr_pending_xattrs_init(priv, this);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;root_inode = NULL;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    i = 0;</div><div class='add'>+    while (i &lt; child_count) {</div><div class='add'>+        priv-&gt;children[i] = trav-&gt;xlator;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = gf_asprintf(&amp;priv-&gt;sh_domain, AFR_SH_DATA_DOMAIN_FMT, this-&gt;name);</div><div class='add'>+    if (-1 == ret) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;last_event = GF_CALLOC(child_count, sizeof(*priv-&gt;last_event),</div><div class='add'>+                                 gf_afr_mt_int32_t);</div><div class='add'>+    if (!priv-&gt;last_event) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = afr_selfheal_daemon_init(this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* keep more local here as we may need them for self-heal etc */</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(afr_local_t, 512);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;root_inode = NULL;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        afr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        if (priv-&gt;timer != NULL) {</div><div class='del'>-                gf_timer_call_cancel(this-&gt;ctx, priv-&gt;timer);</div><div class='del'>-                priv-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        afr_priv_destroy (priv);</div><div class='del'>-        //if (this-&gt;itable);//I don't see any destroy func</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    afr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    if (priv-&gt;timer != NULL) {</div><div class='add'>+        gf_timer_call_cancel(this-&gt;ctx, priv-&gt;timer);</div><div class='add'>+        priv-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    afr_priv_destroy(priv);</div><div class='add'>+    // if (this-&gt;itable);//I don't see any destroy func</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup      = afr_lookup,</div><div class='del'>-        .lk          = afr_lk,</div><div class='del'>-        .flush       = afr_flush,</div><div class='del'>-        .statfs      = afr_statfs,</div><div class='del'>-        .fsyncdir    = afr_fsyncdir,</div><div class='del'>-        .inodelk     = afr_inodelk,</div><div class='del'>-        .finodelk    = afr_finodelk,</div><div class='del'>-        .entrylk     = afr_entrylk,</div><div class='del'>-        .fentrylk    = afr_fentrylk,</div><div class='del'>-        .ipc         = afr_ipc,</div><div class='del'>-        .lease       = afr_lease,</div><div class='del'>-</div><div class='del'>-        /* inode read */</div><div class='del'>-        .access      = afr_access,</div><div class='del'>-        .stat        = afr_stat,</div><div class='del'>-        .fstat       = afr_fstat,</div><div class='del'>-        .readlink    = afr_readlink,</div><div class='del'>-        .getxattr    = afr_getxattr,</div><div class='del'>-        .fgetxattr   = afr_fgetxattr,</div><div class='del'>-        .readv       = afr_readv,</div><div class='del'>-</div><div class='del'>-        /* inode write */</div><div class='del'>-        .writev      = afr_writev,</div><div class='del'>-        .truncate    = afr_truncate,</div><div class='del'>-        .ftruncate   = afr_ftruncate,</div><div class='del'>-        .setxattr    = afr_setxattr,</div><div class='del'>-        .fsetxattr   = afr_fsetxattr,</div><div class='del'>-        .setattr     = afr_setattr,</div><div class='del'>-        .fsetattr    = afr_fsetattr,</div><div class='del'>-        .removexattr = afr_removexattr,</div><div class='del'>-        .fremovexattr = afr_fremovexattr,</div><div class='del'>-        .fallocate   = afr_fallocate,</div><div class='del'>-        .discard     = afr_discard,</div><div class='del'>-        .zerofill    = afr_zerofill,</div><div class='del'>-        .xattrop     = afr_xattrop,</div><div class='del'>-        .fxattrop    = afr_fxattrop,</div><div class='del'>-        .fsync       = afr_fsync,</div><div class='del'>-</div><div class='del'>-        /*inode open*/</div><div class='del'>-        .opendir     = afr_opendir,</div><div class='del'>-        .open        = afr_open,</div><div class='del'>-</div><div class='del'>-        /* dir read */</div><div class='del'>-        .readdir     = afr_readdir,</div><div class='del'>-        .readdirp    = afr_readdirp,</div><div class='del'>-</div><div class='del'>-        /* dir write */</div><div class='del'>-        .create      = afr_create,</div><div class='del'>-        .mknod       = afr_mknod,</div><div class='del'>-        .mkdir       = afr_mkdir,</div><div class='del'>-        .unlink      = afr_unlink,</div><div class='del'>-        .rmdir       = afr_rmdir,</div><div class='del'>-        .link        = afr_link,</div><div class='del'>-        .symlink     = afr_symlink,</div><div class='del'>-        .rename      = afr_rename,</div><div class='add'>+    .lookup = afr_lookup,</div><div class='add'>+    .lk = afr_lk,</div><div class='add'>+    .flush = afr_flush,</div><div class='add'>+    .statfs = afr_statfs,</div><div class='add'>+    .fsyncdir = afr_fsyncdir,</div><div class='add'>+    .inodelk = afr_inodelk,</div><div class='add'>+    .finodelk = afr_finodelk,</div><div class='add'>+    .entrylk = afr_entrylk,</div><div class='add'>+    .fentrylk = afr_fentrylk,</div><div class='add'>+    .ipc = afr_ipc,</div><div class='add'>+    .lease = afr_lease,</div><div class='add'>+</div><div class='add'>+    /* inode read */</div><div class='add'>+    .access = afr_access,</div><div class='add'>+    .stat = afr_stat,</div><div class='add'>+    .fstat = afr_fstat,</div><div class='add'>+    .readlink = afr_readlink,</div><div class='add'>+    .getxattr = afr_getxattr,</div><div class='add'>+    .fgetxattr = afr_fgetxattr,</div><div class='add'>+    .readv = afr_readv,</div><div class='add'>+</div><div class='add'>+    /* inode write */</div><div class='add'>+    .writev = afr_writev,</div><div class='add'>+    .truncate = afr_truncate,</div><div class='add'>+    .ftruncate = afr_ftruncate,</div><div class='add'>+    .setxattr = afr_setxattr,</div><div class='add'>+    .fsetxattr = afr_fsetxattr,</div><div class='add'>+    .setattr = afr_setattr,</div><div class='add'>+    .fsetattr = afr_fsetattr,</div><div class='add'>+    .removexattr = afr_removexattr,</div><div class='add'>+    .fremovexattr = afr_fremovexattr,</div><div class='add'>+    .fallocate = afr_fallocate,</div><div class='add'>+    .discard = afr_discard,</div><div class='add'>+    .zerofill = afr_zerofill,</div><div class='add'>+    .xattrop = afr_xattrop,</div><div class='add'>+    .fxattrop = afr_fxattrop,</div><div class='add'>+    .fsync = afr_fsync,</div><div class='add'>+</div><div class='add'>+    /*inode open*/</div><div class='add'>+    .opendir = afr_opendir,</div><div class='add'>+    .open = afr_open,</div><div class='add'>+</div><div class='add'>+    /* dir read */</div><div class='add'>+    .readdir = afr_readdir,</div><div class='add'>+    .readdirp = afr_readdirp,</div><div class='add'>+</div><div class='add'>+    /* dir write */</div><div class='add'>+    .create = afr_create,</div><div class='add'>+    .mknod = afr_mknod,</div><div class='add'>+    .mkdir = afr_mkdir,</div><div class='add'>+    .unlink = afr_unlink,</div><div class='add'>+    .rmdir = afr_rmdir,</div><div class='add'>+    .link = afr_link,</div><div class='add'>+    .symlink = afr_symlink,</div><div class='add'>+    .rename = afr_rename,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv       = afr_priv_dump,</div><div class='add'>+    .priv = afr_priv_dump,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .release     = afr_release,</div><div class='del'>-        .releasedir  = afr_releasedir,</div><div class='del'>-        .forget      = afr_forget,</div><div class='add'>+    .release = afr_release,</div><div class='add'>+    .releasedir = afr_releasedir,</div><div class='add'>+    .forget = afr_forget,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"read-subvolume" },</div><div class='del'>-          .type = GF_OPTION_TYPE_XLATOR,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "inode-read fops happen only on one of the bricks in "</div><div class='del'>-                         "replicate. Afr will prefer the one specified using "</div><div class='del'>-                         "this option if it is not stale. Option value must be "</div><div class='del'>-                         "one of the xlator names of the children. "</div><div class='del'>-                         "Ex: &lt;volname&gt;-client-0 till "</div><div class='del'>-                         "&lt;volname&gt;-client-&lt;number-of-bricks - 1&gt;"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"read-subvolume-index" },</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "-1",</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "inode-read fops happen only on one of the bricks in "</div><div class='del'>-                         "replicate. AFR will prefer the one specified using "</div><div class='del'>-                         "this option if it is not stale. allowed options"</div><div class='del'>-                         " include -1 till replica-count - 1"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"read-hash-mode" },</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min = 0,</div><div class='del'>-          .max = 3,</div><div class='del'>-          .default_value = "1",</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "inode-read fops happen only on one of the bricks in "</div><div class='del'>-                         "replicate. AFR will prefer the one computed using "</div><div class='del'>-                         "the method specified using this option.\n"</div><div class='del'>-                         "0 = first readable child of AFR, starting from 1st child.\n"</div><div class='del'>-                         "1 = hash by GFID of file (all clients use "</div><div class='del'>-                                                    "same subvolume).\n"</div><div class='del'>-                         "2 = hash by GFID of file and client PID.\n"</div><div class='del'>-                         "3 = brick having the least outstanding read requests."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"choose-local" },</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "true",</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "Choose a local subvolume (i.e. Brick) to read from"</div><div class='del'>-	                 " if read-subvolume is not explicitly set.",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"background-self-heal-count"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = 0,</div><div class='del'>-          .max  = 256,</div><div class='del'>-          .default_value = "8",</div><div class='del'>-          .validate = GF_OPT_VALIDATE_MIN,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This specifies the number of per client self-heal "</div><div class='del'>-                         "jobs that can perform parallel heals in the "</div><div class='del'>-                         "background."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"halo-shd-max-latency"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 99999,</div><div class='del'>-          .default_value = "99999",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate", "halo"},</div><div class='del'>-          .description = "Maximum latency for shd halo replication in msec."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"halo-enabled"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "False",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate", "halo"},</div><div class='del'>-          .description = "Enable Halo (geo) replication mode."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"halo-nfsd-max-latency"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 99999,</div><div class='del'>-          .default_value = "5",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate", "halo"},</div><div class='del'>-          .description = "Maximum latency for nfsd halo replication in msec."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"halo-max-latency"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = AFR_HALO_MAX_LATENCY,</div><div class='del'>-          .default_value = "5",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate", "halo"},</div><div class='del'>-          .description = "Maximum latency for halo replication in msec."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"halo-max-replicas"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 99999,</div><div class='del'>-          .default_value = "99999",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate", "halo"},</div><div class='del'>-          .description = "The maximum number of halo replicas; replicas"</div><div class='del'>-                          " beyond this value will be written asynchronously"</div><div class='del'>-                          "via the SHD."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"halo-min-replicas"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 99999,</div><div class='del'>-          .default_value = "2",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate", "halo"},</div><div class='del'>-          .description = "The minimmum number of halo replicas, before adding "</div><div class='del'>-                          "out of region replicas."</div><div class='del'>-         },</div><div class='del'>-         { .key  = {"heal-wait-queue-length"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = 0,</div><div class='del'>-          .max  = 10000, /*Around 100MB with sizeof(afr_local_t)= 10496 bytes*/</div><div class='del'>-          .default_value = "128",</div><div class='del'>-          .validate = GF_OPT_VALIDATE_MIN,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_10},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This specifies the number of heals that can be queued"</div><div class='del'>-                         " for the parallel background self heal jobs."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"data-self-heal"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"1", "on", "yes", "true", "enable",</div><div class='del'>-                    "0", "off", "no", "false", "disable",</div><div class='del'>-                    "open"},</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description   = "Using this option we can enable/disable data "</div><div class='del'>-                           "self-heal on the file. \"open\" means data "</div><div class='del'>-                           "self-heal action will only be triggered by file "</div><div class='del'>-                           "open operations."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"data-self-heal-algorithm"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description   = "Select between \"full\", \"diff\". The "</div><div class='del'>-                           "\"full\" algorithm copies the entire file from "</div><div class='del'>-                           "source to sink. The \"diff\" algorithm copies to "</div><div class='del'>-                           "sink only those blocks whose checksums don't match "</div><div class='del'>-                           "with those of source. If no option is configured "</div><div class='del'>-                           "the option is chosen dynamically as follows: "</div><div class='del'>-                           "If the file does not exist on one of the sinks "</div><div class='del'>-                           "or empty file exists or if the source file size is "</div><div class='del'>-                           "about the same as page size the entire file will "</div><div class='del'>-                           "be read and written i.e \"full\" algo, "</div><div class='del'>-                           "otherwise \"diff\" algo is chosen.",</div><div class='del'>-          .value = { "diff", "full"}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"data-self-heal-window-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = 1,</div><div class='del'>-          .max  = 1024,</div><div class='del'>-          .default_value = "1",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "Maximum number blocks per file for which self-heal "</div><div class='del'>-                         "process would be applied simultaneously."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"metadata-self-heal"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          /*.validate_fn = validate_replica*/</div><div class='del'>-          .description = "Using this option we can enable/disable metadata "</div><div class='del'>-                         "i.e. Permissions, ownerships, xattrs self-heal on "</div><div class='del'>-                         "the file/directory."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"entry-self-heal"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          /*.validate_fn = validate_replica*/</div><div class='del'>-          .description = "Using this option we can enable/disable entry "</div><div class='del'>-                         "self-heal on the directory."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"data-change-log"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option exists only for backward compatibility "</div><div class='del'>-                         "and configuring it doesn't have any effect"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"metadata-change-log"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option exists only for backward compatibility "</div><div class='del'>-                         "and configuring it doesn't have any effect"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"entry-change-log"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option exists only for backward compatibility "</div><div class='del'>-                         "and configuring it doesn't have any effect"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"optimistic-change-log"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .description = "Entry/Metadata fops will not perform "</div><div class='del'>-                         "pre fop changelog operations in afr transaction "</div><div class='del'>-                         "if this option is enabled."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"inodelk-trace"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "Enabling this option logs inode lock/unlocks"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"entrylk-trace"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "Enabling this option logs entry lock/unlocks"</div><div class='del'>-        },</div><div class='del'>-	{ .key = {"pre-op-compat"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-	  .default_value = "on",</div><div class='del'>-	  .description = "Use separate pre-op xattrop() FOP rather than "</div><div class='del'>-	                 "overloading xdata of the OP"</div><div class='del'>-	},</div><div class='del'>-        { .key = {"eager-lock"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "Enable/Disable eager lock for replica volume. "</div><div class='del'>-                         "Lock phase of a transaction has two sub-phases. "</div><div class='del'>-                         "First is an attempt to acquire locks in parallel by "</div><div class='del'>-                         "broadcasting non-blocking lock requests. If lock "</div><div class='del'>-                         "acquisition fails on any server, then the held locks "</div><div class='del'>-                         "are unlocked and we revert to a blocking locks mode "</div><div class='del'>-                         "sequentially on one server after another.  If this "</div><div class='del'>-                         "option is enabled the initial broadcasting lock "</div><div class='del'>-                         "request attempts to acquire a full lock on the entire file. "</div><div class='del'>-                         "If this fails, we revert back to the sequential "</div><div class='del'>-                         "\"regional\" blocking locks as before. In the case "</div><div class='del'>-                         "where such an \"eager\" lock is granted in the "</div><div class='del'>-                         "non-blocking phase, it gives rise to an opportunity "</div><div class='del'>-                         "for optimization. i.e, if the next write transaction "</div><div class='del'>-                         "on the same FD arrives before the unlock phase of "</div><div class='del'>-                         "the first transaction, it \"takes over\" the full "</div><div class='del'>-                         "file lock. Similarly if yet another data transaction "</div><div class='del'>-                         "arrives before the unlock phase of the \"optimized\" "</div><div class='del'>-                         "transaction, that in turn \"takes over\" the lock as "</div><div class='del'>-                         "well. The actual unlock now happens at the end of "</div><div class='del'>-                         "the last \"optimized\" transaction."</div><div class='del'>-</div><div class='del'>-        },</div><div class='del'>-        { .key = {"self-heal-daemon"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          /*.validate_fn   = validate_replica_heal_enable_disable*/</div><div class='del'>-          .description = "This option applies to only self-heal-daemon. "</div><div class='del'>-                         "Index directory crawl and automatic healing of files "</div><div class='del'>-                         "will not be performed if this option is turned off."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"iam-self-heal-daemon"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "This option differentiates if the replicate "</div><div class='del'>-                         "translator is running as part of self-heal-daemon "</div><div class='del'>-                         "or not."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"iam-nfs-daemon"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "This option differentiates if the replicate "</div><div class='del'>-                         "translator is running as part of an NFS daemon "</div><div class='del'>-                         "or not."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"quorum-type"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = { "none", "auto", "fixed"},</div><div class='del'>-          .default_value = "none",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          /*.option = quorum-type*/</div><div class='del'>-          .description = "If value is \"fixed\" only allow writes if "</div><div class='del'>-                         "quorum-count bricks are present.  If value is "</div><div class='del'>-                         "\"auto\" only allow writes if more than half of "</div><div class='del'>-                         "bricks, or exactly half including the first, are "</div><div class='del'>-                         "present.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"quorum-count"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min = 1,</div><div class='del'>-          .max = INT_MAX,</div><div class='del'>-          .default_value = 0,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          /*.option = quorum-count*/</div><div class='del'>-          /*.validate_fn = validate_quorum_count*/</div><div class='del'>-          .description = "If quorum-type is \"fixed\" only allow writes if "</div><div class='del'>-                         "this many bricks are present.  Other quorum types "</div><div class='del'>-                         "will OVERWRITE this value.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"quorum-reads"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option has been removed. Reads are not allowed "</div><div class='del'>-                          "if quorum is not met.",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"node-uuid"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Local glusterd uuid string, used in starting "</div><div class='del'>-                         "self-heal-daemon so that it can crawl only on "</div><div class='del'>-                         "local index directories.",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"post-op-delay-secs"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = 0,</div><div class='del'>-          .max  = INT_MAX,</div><div class='del'>-          .default_value = "1",</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "Time interval induced artificially before "</div><div class='del'>-	                 "post-operation phase of the transaction to "</div><div class='del'>-                         "enhance overlap of adjacent write operations.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {AFR_SH_READDIR_SIZE_KEY},</div><div class='del'>-          .type = GF_OPTION_TYPE_SIZET,</div><div class='del'>-          .description = "readdirp size for performing entry self-heal",</div><div class='del'>-          .min = 1024,</div><div class='del'>-          .max = 131072,</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .default_value = "1KB",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"ensure-durability"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .op_version = {3},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "Afr performs fsyncs for transactions if this "</div><div class='del'>-                         "option is on to make sure the changelogs/data is "</div><div class='del'>-                         "written to the disk",</div><div class='del'>-          .default_value = "on",</div><div class='del'>-        },</div><div class='del'>-	{ .key = {"afr-dirty-xattr"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_STR,</div><div class='del'>-	  .default_value = AFR_DIRTY_DEFAULT,</div><div class='del'>-	},</div><div class='del'>-	{ .key = {"afr-pending-xattr"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Comma separated list of xattrs that are used to  "</div><div class='del'>-                         "capture information on pending heals."</div><div class='del'>-	},</div><div class='del'>-	{ .key = {"metadata-splitbrain-forced-heal"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-	  .default_value = "off",</div><div class='del'>-	},</div><div class='del'>-        { .key  = {"heal-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = 5,</div><div class='del'>-          .max  = INT_MAX,</div><div class='del'>-          .default_value = "600",</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "time interval for checking the need to self-heal "</div><div class='del'>-                         "in self-heal-daemon"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"consistent-metadata"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "If this option is enabled, readdirp will force "</div><div class='del'>-                         "lookups on those entries read whose read child is "</div><div class='del'>-                         "not the same as that of the parent. This will "</div><div class='del'>-                         "guarantee that all read operations on a file serve "</div><div class='del'>-                         "attributes from the same subvol as long as it holds "</div><div class='del'>-                         " a good copy of the file/dir.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"arbiter-count"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .description = "subset of child_count. Has to be 0 or 1."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"thin-arbiter"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_4_1_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "contains host:path of thin abriter brick",</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"shd-max-threads"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 64,</div><div class='del'>-          .default_value = "1",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_12},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "Maximum number of parallel heals SHD can do per "</div><div class='del'>-                          "local brick. This can substantially lower heal times"</div><div class='del'>-                          ", but can also crush your bricks if you don't have "</div><div class='del'>-                          "the storage hardware to support this."</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"shd-wait-qlength"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min   = 1,</div><div class='del'>-          .max   = 655536,</div><div class='del'>-          .default_value = "1024",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_12},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option can be used to control number of heals"</div><div class='del'>-                          " that can wait in SHD per subvolume",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"locking-scheme"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = { "full", "granular"},</div><div class='del'>-          .default_value = "full",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_12},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "If this option is set to granular, self-heal will "</div><div class='del'>-                         "stop being compatible with afr-v1, which helps afr "</div><div class='del'>-                         "be more granular while self-healing",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"full-lock"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "yes",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_13_2},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "If this option is disabled, then the IOs will take "</div><div class='del'>-                         "range locks same as versions till 3.13.1."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"granular-entry-heal"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_8_0},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "If this option is enabled, self-heal will resort to "</div><div class='del'>-                         "granular way of recording changelogs and doing entry "</div><div class='del'>-                         "self-heal.",</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"favorite-child-policy"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"none", "size", "ctime", "mtime", "majority"},</div><div class='del'>-          .default_value = "none",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_12},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option can be used to automatically resolve "</div><div class='del'>-                         "split-brains using various policies without user "</div><div class='del'>-                         "intervention. \"size\" picks the file with the "</div><div class='del'>-                         "biggest size as the source. \"ctime\" and \"mtime\" "</div><div class='del'>-                         "pick the file with the latest ctime and mtime "</div><div class='del'>-                         "respectively as the source. \"majority\" picks a file"</div><div class='del'>-                         " with identical mtime and size in more than half the "</div><div class='del'>-                         "number of bricks in the replica.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"consistent-io"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .description = "If this option is enabled, i/o will fail even if "</div><div class='del'>-                         "one of the bricks is down in the replicas",</div><div class='del'>-        },</div><div class='del'>-        { .key   = {"use-compound-fops"},</div><div class='del'>-          .type  = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_8_4},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"replicate"},</div><div class='del'>-          .description = "This option exists only for backward compatibility "</div><div class='del'>-                         "and configuring it doesn't have any effect"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {"read-subvolume"},</div><div class='add'>+     .type = GF_OPTION_TYPE_XLATOR,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "inode-read fops happen only on one of the bricks in "</div><div class='add'>+                    "replicate. Afr will prefer the one specified using "</div><div class='add'>+                    "this option if it is not stale. Option value must be "</div><div class='add'>+                    "one of the xlator names of the children. "</div><div class='add'>+                    "Ex: &lt;volname&gt;-client-0 till "</div><div class='add'>+                    "&lt;volname&gt;-client-&lt;number-of-bricks - 1&gt;"},</div><div class='add'>+    {.key = {"read-subvolume-index"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "-1",</div><div class='add'>+     .op_version = {2},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "inode-read fops happen only on one of the bricks in "</div><div class='add'>+                    "replicate. AFR will prefer the one specified using "</div><div class='add'>+                    "this option if it is not stale. allowed options"</div><div class='add'>+                    " include -1 till replica-count - 1"},</div><div class='add'>+    {.key = {"read-hash-mode"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 0,</div><div class='add'>+     .max = 3,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {2},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description =</div><div class='add'>+         "inode-read fops happen only on one of the bricks in "</div><div class='add'>+         "replicate. AFR will prefer the one computed using "</div><div class='add'>+         "the method specified using this option.\n"</div><div class='add'>+         "0 = first readable child of AFR, starting from 1st child.\n"</div><div class='add'>+         "1 = hash by GFID of file (all clients use "</div><div class='add'>+         "same subvolume).\n"</div><div class='add'>+         "2 = hash by GFID of file and client PID.\n"</div><div class='add'>+         "3 = brick having the least outstanding read requests."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"choose-local"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "true",</div><div class='add'>+        .op_version = {2},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "Choose a local subvolume (i.e. Brick) to read from"</div><div class='add'>+                       " if read-subvolume is not explicitly set.",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"background-self-heal-count"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 0,</div><div class='add'>+     .max = 256,</div><div class='add'>+     .default_value = "8",</div><div class='add'>+     .validate = GF_OPT_VALIDATE_MIN,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "This specifies the number of per client self-heal "</div><div class='add'>+                    "jobs that can perform parallel heals in the "</div><div class='add'>+                    "background."},</div><div class='add'>+    {.key = {"halo-shd-max-latency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 99999,</div><div class='add'>+     .default_value = "99999",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate", "halo"},</div><div class='add'>+     .description = "Maximum latency for shd halo replication in msec."},</div><div class='add'>+    {.key = {"halo-enabled"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "False",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate", "halo"},</div><div class='add'>+     .description = "Enable Halo (geo) replication mode."},</div><div class='add'>+    {.key = {"halo-nfsd-max-latency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 99999,</div><div class='add'>+     .default_value = "5",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate", "halo"},</div><div class='add'>+     .description = "Maximum latency for nfsd halo replication in msec."},</div><div class='add'>+    {.key = {"halo-max-latency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = AFR_HALO_MAX_LATENCY,</div><div class='add'>+     .default_value = "5",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate", "halo"},</div><div class='add'>+     .description = "Maximum latency for halo replication in msec."},</div><div class='add'>+    {.key = {"halo-max-replicas"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 99999,</div><div class='add'>+     .default_value = "99999",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate", "halo"},</div><div class='add'>+     .description = "The maximum number of halo replicas; replicas"</div><div class='add'>+                    " beyond this value will be written asynchronously"</div><div class='add'>+                    "via the SHD."},</div><div class='add'>+    {.key = {"halo-min-replicas"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 99999,</div><div class='add'>+     .default_value = "2",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate", "halo"},</div><div class='add'>+     .description = "The minimmum number of halo replicas, before adding "</div><div class='add'>+                    "out of region replicas."},</div><div class='add'>+    {.key = {"heal-wait-queue-length"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 0,</div><div class='add'>+     .max = 10000, /*Around 100MB with sizeof(afr_local_t)= 10496 bytes*/</div><div class='add'>+     .default_value = "128",</div><div class='add'>+     .validate = GF_OPT_VALIDATE_MIN,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_10},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "This specifies the number of heals that can be queued"</div><div class='add'>+                    " for the parallel background self heal jobs."},</div><div class='add'>+    {.key = {"data-self-heal"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"1", "on", "yes", "true", "enable", "0", "off", "no", "false",</div><div class='add'>+               "disable", "open"},</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "Using this option we can enable/disable data "</div><div class='add'>+                    "self-heal on the file. \"open\" means data "</div><div class='add'>+                    "self-heal action will only be triggered by file "</div><div class='add'>+                    "open operations."},</div><div class='add'>+    {.key = {"data-self-heal-algorithm"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "Select between \"full\", \"diff\". The "</div><div class='add'>+                    "\"full\" algorithm copies the entire file from "</div><div class='add'>+                    "source to sink. The \"diff\" algorithm copies to "</div><div class='add'>+                    "sink only those blocks whose checksums don't match "</div><div class='add'>+                    "with those of source. If no option is configured "</div><div class='add'>+                    "the option is chosen dynamically as follows: "</div><div class='add'>+                    "If the file does not exist on one of the sinks "</div><div class='add'>+                    "or empty file exists or if the source file size is "</div><div class='add'>+                    "about the same as page size the entire file will "</div><div class='add'>+                    "be read and written i.e \"full\" algo, "</div><div class='add'>+                    "otherwise \"diff\" algo is chosen.",</div><div class='add'>+     .value = {"diff", "full"}},</div><div class='add'>+    {.key = {"data-self-heal-window-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 1024,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "Maximum number blocks per file for which self-heal "</div><div class='add'>+                    "process would be applied simultaneously."},</div><div class='add'>+    {.key = {"metadata-self-heal"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     /*.validate_fn = validate_replica*/</div><div class='add'>+     .description = "Using this option we can enable/disable metadata "</div><div class='add'>+                    "i.e. Permissions, ownerships, xattrs self-heal on "</div><div class='add'>+                    "the file/directory."},</div><div class='add'>+    {.key = {"entry-self-heal"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     /*.validate_fn = validate_replica*/</div><div class='add'>+     .description = "Using this option we can enable/disable entry "</div><div class='add'>+                    "self-heal on the directory."},</div><div class='add'>+    {.key = {"data-change-log"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "This option exists only for backward compatibility "</div><div class='add'>+                    "and configuring it doesn't have any effect"},</div><div class='add'>+    {.key = {"metadata-change-log"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "This option exists only for backward compatibility "</div><div class='add'>+                    "and configuring it doesn't have any effect"},</div><div class='add'>+    {.key = {"entry-change-log"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "This option exists only for backward compatibility "</div><div class='add'>+                    "and configuring it doesn't have any effect"},</div><div class='add'>+    {.key = {"optimistic-change-log"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .description = "Entry/Metadata fops will not perform "</div><div class='add'>+                    "pre fop changelog operations in afr transaction "</div><div class='add'>+                    "if this option is enabled."},</div><div class='add'>+    {.key = {"inodelk-trace"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "Enabling this option logs inode lock/unlocks"},</div><div class='add'>+    {.key = {"entrylk-trace"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "Enabling this option logs entry lock/unlocks"},</div><div class='add'>+    {.key = {"pre-op-compat"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .description = "Use separate pre-op xattrop() FOP rather than "</div><div class='add'>+                    "overloading xdata of the OP"},</div><div class='add'>+    {.key = {"eager-lock"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description =</div><div class='add'>+         "Enable/Disable eager lock for replica volume. "</div><div class='add'>+         "Lock phase of a transaction has two sub-phases. "</div><div class='add'>+         "First is an attempt to acquire locks in parallel by "</div><div class='add'>+         "broadcasting non-blocking lock requests. If lock "</div><div class='add'>+         "acquisition fails on any server, then the held locks "</div><div class='add'>+         "are unlocked and we revert to a blocking locks mode "</div><div class='add'>+         "sequentially on one server after another.  If this "</div><div class='add'>+         "option is enabled the initial broadcasting lock "</div><div class='add'>+         "request attempts to acquire a full lock on the entire file. "</div><div class='add'>+         "If this fails, we revert back to the sequential "</div><div class='add'>+         "\"regional\" blocking locks as before. In the case "</div><div class='add'>+         "where such an \"eager\" lock is granted in the "</div><div class='add'>+         "non-blocking phase, it gives rise to an opportunity "</div><div class='add'>+         "for optimization. i.e, if the next write transaction "</div><div class='add'>+         "on the same FD arrives before the unlock phase of "</div><div class='add'>+         "the first transaction, it \"takes over\" the full "</div><div class='add'>+         "file lock. Similarly if yet another data transaction "</div><div class='add'>+         "arrives before the unlock phase of the \"optimized\" "</div><div class='add'>+         "transaction, that in turn \"takes over\" the lock as "</div><div class='add'>+         "well. The actual unlock now happens at the end of "</div><div class='add'>+         "the last \"optimized\" transaction."</div><div class='add'>+</div><div class='add'>+    },</div><div class='add'>+    {.key = {"self-heal-daemon"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     /*.validate_fn   = validate_replica_heal_enable_disable*/</div><div class='add'>+     .description = "This option applies to only self-heal-daemon. "</div><div class='add'>+                    "Index directory crawl and automatic healing of files "</div><div class='add'>+                    "will not be performed if this option is turned off."},</div><div class='add'>+    {.key = {"iam-self-heal-daemon"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "This option differentiates if the replicate "</div><div class='add'>+                    "translator is running as part of self-heal-daemon "</div><div class='add'>+                    "or not."},</div><div class='add'>+    {.key = {"iam-nfs-daemon"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "This option differentiates if the replicate "</div><div class='add'>+                    "translator is running as part of an NFS daemon "</div><div class='add'>+                    "or not."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"quorum-type"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .value = {"none", "auto", "fixed"},</div><div class='add'>+        .default_value = "none",</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        /*.option = quorum-type*/</div><div class='add'>+        .description = "If value is \"fixed\" only allow writes if "</div><div class='add'>+                       "quorum-count bricks are present.  If value is "</div><div class='add'>+                       "\"auto\" only allow writes if more than half of "</div><div class='add'>+                       "bricks, or exactly half including the first, are "</div><div class='add'>+                       "present.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"quorum-count"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 1,</div><div class='add'>+        .max = INT_MAX,</div><div class='add'>+        .default_value = 0,</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        /*.option = quorum-count*/</div><div class='add'>+        /*.validate_fn = validate_quorum_count*/</div><div class='add'>+        .description = "If quorum-type is \"fixed\" only allow writes if "</div><div class='add'>+                       "this many bricks are present.  Other quorum types "</div><div class='add'>+                       "will OVERWRITE this value.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"quorum-reads"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "no",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "This option has been removed. Reads are not allowed "</div><div class='add'>+                       "if quorum is not met.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"node-uuid"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .description = "Local glusterd uuid string, used in starting "</div><div class='add'>+                       "self-heal-daemon so that it can crawl only on "</div><div class='add'>+                       "local index directories.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"post-op-delay-secs"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 0,</div><div class='add'>+        .max = INT_MAX,</div><div class='add'>+        .default_value = "1",</div><div class='add'>+        .op_version = {2},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "Time interval induced artificially before "</div><div class='add'>+                       "post-operation phase of the transaction to "</div><div class='add'>+                       "enhance overlap of adjacent write operations.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {AFR_SH_READDIR_SIZE_KEY},</div><div class='add'>+        .type = GF_OPTION_TYPE_SIZET,</div><div class='add'>+        .description = "readdirp size for performing entry self-heal",</div><div class='add'>+        .min = 1024,</div><div class='add'>+        .max = 131072,</div><div class='add'>+        .op_version = {2},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .default_value = "1KB",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"ensure-durability"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .op_version = {3},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "Afr performs fsyncs for transactions if this "</div><div class='add'>+                       "option is on to make sure the changelogs/data is "</div><div class='add'>+                       "written to the disk",</div><div class='add'>+        .default_value = "on",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"afr-dirty-xattr"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = AFR_DIRTY_DEFAULT,</div><div class='add'>+    },</div><div class='add'>+    {.key = {"afr-pending-xattr"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "Comma separated list of xattrs that are used to  "</div><div class='add'>+                    "capture information on pending heals."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"metadata-splitbrain-forced-heal"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"heal-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 5,</div><div class='add'>+     .max = INT_MAX,</div><div class='add'>+     .default_value = "600",</div><div class='add'>+     .op_version = {2},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "time interval for checking the need to self-heal "</div><div class='add'>+                    "in self-heal-daemon"},</div><div class='add'>+    {</div><div class='add'>+        .key = {"consistent-metadata"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "no",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "If this option is enabled, readdirp will force "</div><div class='add'>+                       "lookups on those entries read whose read child is "</div><div class='add'>+                       "not the same as that of the parent. This will "</div><div class='add'>+                       "guarantee that all read operations on a file serve "</div><div class='add'>+                       "attributes from the same subvol as long as it holds "</div><div class='add'>+                       " a good copy of the file/dir.",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"arbiter-count"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .description = "subset of child_count. Has to be 0 or 1."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"thin-arbiter"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .op_version = {GD_OP_VERSION_4_1_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "contains host:path of thin abriter brick",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"shd-max-threads"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 64,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_12},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "Maximum number of parallel heals SHD can do per "</div><div class='add'>+                    "local brick. This can substantially lower heal times"</div><div class='add'>+                    ", but can also crush your bricks if you don't have "</div><div class='add'>+                    "the storage hardware to support this."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"shd-wait-qlength"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 1,</div><div class='add'>+        .max = 655536,</div><div class='add'>+        .default_value = "1024",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_12},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "This option can be used to control number of heals"</div><div class='add'>+                       " that can wait in SHD per subvolume",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"locking-scheme"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .value = {"full", "granular"},</div><div class='add'>+        .default_value = "full",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_12},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "If this option is set to granular, self-heal will "</div><div class='add'>+                       "stop being compatible with afr-v1, which helps afr "</div><div class='add'>+                       "be more granular while self-healing",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"full-lock"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "yes",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_13_2},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "If this option is disabled, then the IOs will take "</div><div class='add'>+                    "range locks same as versions till 3.13.1."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"granular-entry-heal"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "no",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_8_0},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "If this option is enabled, self-heal will resort to "</div><div class='add'>+                       "granular way of recording changelogs and doing entry "</div><div class='add'>+                       "self-heal.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"favorite-child-policy"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .value = {"none", "size", "ctime", "mtime", "majority"},</div><div class='add'>+        .default_value = "none",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_12},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"replicate"},</div><div class='add'>+        .description = "This option can be used to automatically resolve "</div><div class='add'>+                       "split-brains using various policies without user "</div><div class='add'>+                       "intervention. \"size\" picks the file with the "</div><div class='add'>+                       "biggest size as the source. \"ctime\" and \"mtime\" "</div><div class='add'>+                       "pick the file with the latest ctime and mtime "</div><div class='add'>+                       "respectively as the source. \"majority\" picks a file"</div><div class='add'>+                       " with identical mtime and size in more than half the "</div><div class='add'>+                       "number of bricks in the replica.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"consistent-io"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "no",</div><div class='add'>+        .description = "If this option is enabled, i/o will fail even if "</div><div class='add'>+                       "one of the bricks is down in the replicas",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"use-compound-fops"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "no",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_8_4},</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"replicate"},</div><div class='add'>+     .description = "This option exists only for backward compatibility "</div><div class='add'>+                    "and configuring it doesn't have any effect"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c<br/>index 129acbef0b5..f43a10bec2f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-common.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* TODO: add NS locking */</div><div class='ctx'> </div><div class='ctx'> #include "glusterfs.h"</div><div class='hunk'>@@ -27,258 +26,237 @@</div><div class='ctx'> </div><div class='ctx'> int run_defrag = 0;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int dht_link2 (xlator_t *this, xlator_t *dst_node, call_frame_t *frame,</div><div class='del'>-               int ret);</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_removexattr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='del'>-                  int ret);</div><div class='add'>+dht_link2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_setxattr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='del'>-               int ret);</div><div class='del'>-</div><div class='add'>+dht_removexattr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='add'>+                 int ret);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rmdir_readdirp_do (call_frame_t *readdirp_frame, xlator_t *this);</div><div class='del'>-</div><div class='add'>+dht_setxattr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_common_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                        dict_t *xdata);</div><div class='add'>+dht_rmdir_readdirp_do(call_frame_t *readdirp_frame, xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_set_file_xattr_req (xlator_t *this, loc_t *loc, dict_t *xattr_req);</div><div class='add'>+dht_common_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                       dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_set_dir_xattr_req (xlator_t *this,  loc_t *loc, dict_t *xattr_req);</div><div class='add'>+dht_set_file_xattr_req(xlator_t *this, loc_t *loc, dict_t *xattr_req);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_do_fresh_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc);</div><div class='add'>+dht_set_dir_xattr_req(xlator_t *this, loc_t *loc, dict_t *xattr_req);</div><div class='ctx'> </div><div class='add'>+int</div><div class='add'>+dht_do_fresh_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc);</div><div class='ctx'> </div><div class='ctx'> /* Sets the blocks and size values to fixed values. This is to be called</div><div class='ctx'>  * only for dirs. The caller is responsible for checking the type</div><div class='ctx'>  */</div><div class='del'>-int32_t dht_set_fixed_dir_stat (struct iatt *stat)</div><div class='add'>+int32_t</div><div class='add'>+dht_set_fixed_dir_stat(struct iatt *stat)</div><div class='ctx'> {</div><div class='del'>-        if (stat) {</div><div class='del'>-                stat-&gt;ia_blocks = DHT_DIR_STAT_BLOCKS;</div><div class='del'>-                stat-&gt;ia_size = DHT_DIR_STAT_SIZE;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    if (stat) {</div><div class='add'>+        stat-&gt;ia_blocks = DHT_DIR_STAT_BLOCKS;</div><div class='add'>+        stat-&gt;ia_size = DHT_DIR_STAT_SIZE;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Set both DHT_IATT_IN_XDATA_KEY and DHT_MODE_IN_XDATA_KEY</div><div class='ctx'>  * Use DHT_MODE_IN_XDATA_KEY if available. Else fall back to</div><div class='ctx'>  * DHT_IATT_IN_XDATA_KEY</div><div class='ctx'>  */</div><div class='del'>-int dht_request_iatt_in_xdata (xlator_t *this, dict_t *xattr_req)</div><div class='add'>+int</div><div class='add'>+dht_request_iatt_in_xdata(xlator_t *this, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int8 (xattr_req, DHT_MODE_IN_XDATA_KEY, 1);</div><div class='del'>-        ret = dict_set_int8 (xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+    ret = dict_set_int8(xattr_req, DHT_MODE_IN_XDATA_KEY, 1);</div><div class='add'>+    ret = dict_set_int8(xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='ctx'> </div><div class='del'>-        /* At least one call succeeded */</div><div class='del'>-        return ret;</div><div class='add'>+    /* At least one call succeeded */</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Get both DHT_IATT_IN_XDATA_KEY and DHT_MODE_IN_XDATA_KEY</div><div class='ctx'>  * Use DHT_MODE_IN_XDATA_KEY if available, else fall back to</div><div class='ctx'>  * DHT_IATT_IN_XDATA_KEY</div><div class='ctx'>  * This will return a dummy iatt with only the mode and type set</div><div class='ctx'>  */</div><div class='del'>-int dht_read_iatt_from_xdata (xlator_t *this, dict_t *xdata,</div><div class='del'>-                              struct iatt *stbuf)</div><div class='add'>+int</div><div class='add'>+dht_read_iatt_from_xdata(xlator_t *this, dict_t *xdata, struct iatt *stbuf)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int32_t mode = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t mode = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (xdata, DHT_MODE_IN_XDATA_KEY, &amp;mode);</div><div class='add'>+    ret = dict_get_int32(xdata, DHT_MODE_IN_XDATA_KEY, &amp;mode);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY,</div><div class='del'>-                                    (void **)&amp;stbuf);</div><div class='del'>-        } else {</div><div class='del'>-                stbuf-&gt;ia_prot = ia_prot_from_st_mode (mode);</div><div class='del'>-                stbuf-&gt;ia_type = ia_type_from_st_mode (mode);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;stbuf);</div><div class='add'>+    } else {</div><div class='add'>+        stbuf-&gt;ia_prot = ia_prot_from_st_mode(mode);</div><div class='add'>+        stbuf-&gt;ia_type = ia_type_from_st_mode(mode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_unlock (call_frame_t *frame, xlator_t *this);</div><div class='del'>-</div><div class='del'>-char *xattrs_to_heal[] = {</div><div class='del'>-        "user.",</div><div class='del'>-        POSIX_ACL_ACCESS_XATTR,</div><div class='del'>-        POSIX_ACL_DEFAULT_XATTR,</div><div class='del'>-        QUOTA_LIMIT_KEY,</div><div class='del'>-        QUOTA_LIMIT_OBJECTS_KEY,</div><div class='del'>-        GF_SELINUX_XATTR_KEY,</div><div class='del'>-        NULL</div><div class='del'>-};</div><div class='add'>+dht_rmdir_unlock(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> </div><div class='add'>+char *xattrs_to_heal[] = {"user.",</div><div class='add'>+                          POSIX_ACL_ACCESS_XATTR,</div><div class='add'>+                          POSIX_ACL_DEFAULT_XATTR,</div><div class='add'>+                          QUOTA_LIMIT_KEY,</div><div class='add'>+                          QUOTA_LIMIT_OBJECTS_KEY,</div><div class='add'>+                          GF_SELINUX_XATTR_KEY,</div><div class='add'>+                          NULL};</div><div class='ctx'> </div><div class='del'>-char *dht_dbg_vxattrs[] = {</div><div class='del'>-        DHT_DBG_HASHED_SUBVOL_PATTERN,</div><div class='del'>-        NULL</div><div class='del'>-};</div><div class='add'>+char *dht_dbg_vxattrs[] = {DHT_DBG_HASHED_SUBVOL_PATTERN, NULL};</div><div class='ctx'> </div><div class='ctx'> /* Return true if key exists in array</div><div class='del'>-*/</div><div class='add'>+ */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-dht_match_xattr (const char *key)</div><div class='add'>+dht_match_xattr(const char *key)</div><div class='ctx'> {</div><div class='del'>-        return gf_get_index_by_elem (xattrs_to_heal, (char *)key) &gt;= 0;</div><div class='add'>+    return gf_get_index_by_elem(xattrs_to_heal, (char *)key) &gt;= 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_aggregate_quota_xattr (dict_t *dst, char *key, data_t *value)</div><div class='add'>+dht_aggregate_quota_xattr(dict_t *dst, char *key, data_t *value)</div><div class='ctx'> {</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        quota_meta_t    *meta_dst       = NULL;</div><div class='del'>-        quota_meta_t    *meta_src       = NULL;</div><div class='del'>-        int64_t         *size           = NULL;</div><div class='del'>-        int64_t          dst_dir_count  = 0;</div><div class='del'>-        int64_t          src_dir_count  = 0;</div><div class='del'>-</div><div class='del'>-        if (value == NULL) {</div><div class='del'>-                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DATA_NULL, "data value is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    quota_meta_t *meta_dst = NULL;</div><div class='add'>+    quota_meta_t *meta_src = NULL;</div><div class='add'>+    int64_t *size = NULL;</div><div class='add'>+    int64_t dst_dir_count = 0;</div><div class='add'>+    int64_t src_dir_count = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_bin (dst, key, (void **)&amp;meta_dst);</div><div class='add'>+    if (value == NULL) {</div><div class='add'>+        gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_DATA_NULL,</div><div class='add'>+               "data value is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_bin(dst, key, (void **)&amp;meta_dst);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        meta_dst = GF_CALLOC(1, sizeof(quota_meta_t), gf_common_quota_meta_t);</div><div class='add'>+        if (meta_dst == NULL) {</div><div class='add'>+            gf_msg("dht", GF_LOG_WARNING, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "Memory allocation failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = dict_set_bin(dst, key, meta_dst, sizeof(quota_meta_t));</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                meta_dst = GF_CALLOC (1, sizeof (quota_meta_t),</div><div class='del'>-                                      gf_common_quota_meta_t);</div><div class='del'>-                if (meta_dst == NULL) {</div><div class='del'>-                        gf_msg ("dht", GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY,</div><div class='del'>-                                "Memory allocation failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_bin (dst, key, meta_dst,</div><div class='del'>-                                    sizeof (quota_meta_t));</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg ("dht", GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "dht aggregate dict set failed");</div><div class='del'>-                        GF_FREE (meta_dst);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_msg("dht", GF_LOG_WARNING, EINVAL, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "dht aggregate dict set failed");</div><div class='add'>+            GF_FREE(meta_dst);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (value-&gt;len &gt; sizeof (int64_t)) {</div><div class='del'>-                meta_src = data_to_bin (value);</div><div class='add'>+    if (value-&gt;len &gt; sizeof(int64_t)) {</div><div class='add'>+        meta_src = data_to_bin(value);</div><div class='ctx'> </div><div class='del'>-                meta_dst-&gt;size = hton64 (ntoh64 (meta_dst-&gt;size) +</div><div class='del'>-                                         ntoh64 (meta_src-&gt;size));</div><div class='del'>-                meta_dst-&gt;file_count = hton64 (ntoh64 (meta_dst-&gt;file_count) +</div><div class='del'>-                                               ntoh64 (meta_src-&gt;file_count));</div><div class='add'>+        meta_dst-&gt;size = hton64(ntoh64(meta_dst-&gt;size) +</div><div class='add'>+                                ntoh64(meta_src-&gt;size));</div><div class='add'>+        meta_dst-&gt;file_count = hton64(ntoh64(meta_dst-&gt;file_count) +</div><div class='add'>+                                      ntoh64(meta_src-&gt;file_count));</div><div class='ctx'> </div><div class='del'>-                if (value-&gt;len &gt; (2 * sizeof (int64_t))) {</div><div class='del'>-                        dst_dir_count = ntoh64 (meta_dst-&gt;dir_count);</div><div class='del'>-                        src_dir_count = ntoh64 (meta_src-&gt;dir_count);</div><div class='add'>+        if (value-&gt;len &gt; (2 * sizeof(int64_t))) {</div><div class='add'>+            dst_dir_count = ntoh64(meta_dst-&gt;dir_count);</div><div class='add'>+            src_dir_count = ntoh64(meta_src-&gt;dir_count);</div><div class='ctx'> </div><div class='del'>-                        if (src_dir_count &gt; dst_dir_count)</div><div class='del'>-                                meta_dst-&gt;dir_count = meta_src-&gt;dir_count;</div><div class='del'>-                } else {</div><div class='del'>-                        meta_dst-&gt;dir_count = 0;</div><div class='del'>-                }</div><div class='add'>+            if (src_dir_count &gt; dst_dir_count)</div><div class='add'>+                meta_dst-&gt;dir_count = meta_src-&gt;dir_count;</div><div class='ctx'>         } else {</div><div class='del'>-                size = data_to_bin (value);</div><div class='del'>-                meta_dst-&gt;size = hton64 (ntoh64 (meta_dst-&gt;size) +</div><div class='del'>-                                         ntoh64 (*size));</div><div class='add'>+            meta_dst-&gt;dir_count = 0;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        size = data_to_bin(value);</div><div class='add'>+        meta_dst-&gt;size = hton64(ntoh64(meta_dst-&gt;size) + ntoh64(*size));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int add_opt(char **optsp, const char *opt)</div><div class='add'>+int</div><div class='add'>+add_opt(char **optsp, const char *opt)</div><div class='ctx'> {</div><div class='del'>-        char *newopts = NULL;</div><div class='del'>-        unsigned oldsize = 0;</div><div class='del'>-        unsigned newsize = 0;</div><div class='add'>+    char *newopts = NULL;</div><div class='add'>+    unsigned oldsize = 0;</div><div class='add'>+    unsigned newsize = 0;</div><div class='ctx'> </div><div class='del'>-        if (*optsp == NULL)</div><div class='del'>-                newopts = gf_strdup (opt);</div><div class='del'>-        else {</div><div class='del'>-                oldsize = strlen (*optsp);</div><div class='del'>-                newsize = oldsize + 1 + strlen (opt) + 1;</div><div class='del'>-                newopts = GF_REALLOC (*optsp, newsize);</div><div class='del'>-                if (newopts)</div><div class='del'>-                        sprintf (newopts + oldsize, ",%s", opt);</div><div class='del'>-        }</div><div class='del'>-        if (newopts == NULL) {</div><div class='del'>-                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "Error to add choices in buffer in add_opt");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        *optsp = newopts;</div><div class='del'>-        return 0;</div><div class='add'>+    if (*optsp == NULL)</div><div class='add'>+        newopts = gf_strdup(opt);</div><div class='add'>+    else {</div><div class='add'>+        oldsize = strlen(*optsp);</div><div class='add'>+        newsize = oldsize + 1 + strlen(opt) + 1;</div><div class='add'>+        newopts = GF_REALLOC(*optsp, newsize);</div><div class='add'>+        if (newopts)</div><div class='add'>+            sprintf(newopts + oldsize, ",%s", opt);</div><div class='add'>+    }</div><div class='add'>+    if (newopts == NULL) {</div><div class='add'>+        gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "Error to add choices in buffer in add_opt");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    *optsp = newopts;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Return Choice list from Split brain status */</div><div class='ctx'> static char *</div><div class='del'>-getChoices (const char *value)</div><div class='add'>+getChoices(const char *value)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        char *ptr = NULL;</div><div class='del'>-        char *tok = NULL;</div><div class='del'>-        char *result = NULL;</div><div class='del'>-        char *newval = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *tok = NULL;</div><div class='add'>+    char *result = NULL;</div><div class='add'>+    char *newval = NULL;</div><div class='ctx'> </div><div class='del'>-        ptr = strstr (value, "Choices:");</div><div class='del'>-        if (!ptr) {</div><div class='del'>-                result = ptr;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ptr = strstr(value, "Choices:");</div><div class='add'>+    if (!ptr) {</div><div class='add'>+        result = ptr;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        newval = gf_strdup (ptr);</div><div class='del'>-        if (!newval) {</div><div class='del'>-                result = newval;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    newval = gf_strdup(ptr);</div><div class='add'>+    if (!newval) {</div><div class='add'>+        result = newval;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tok = strtok (newval, ":");</div><div class='del'>-        if (!tok) {</div><div class='del'>-                result = tok;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    tok = strtok(newval, ":");</div><div class='add'>+    if (!tok) {</div><div class='add'>+        result = tok;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (tok) {</div><div class='del'>-                i++;</div><div class='del'>-                if (i == 2)</div><div class='del'>-                        break;</div><div class='del'>-                tok = strtok (NULL, ":");</div><div class='del'>-        }</div><div class='add'>+    while (tok) {</div><div class='add'>+        i++;</div><div class='add'>+        if (i == 2)</div><div class='add'>+            break;</div><div class='add'>+        tok = strtok(NULL, ":");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        result = gf_strdup (tok);</div><div class='add'>+    result = gf_strdup(tok);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (newval)</div><div class='del'>-                GF_FREE (newval);</div><div class='add'>+    if (newval)</div><div class='add'>+        GF_FREE(newval);</div><div class='ctx'> </div><div class='del'>-        return result;</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function prepare a list of choices for key</div><div class='hunk'>@@ -291,248 +269,226 @@ out:</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_aggregate_split_brain_xattr (dict_t *dst, char *key, data_t *value)</div><div class='add'>+dht_aggregate_split_brain_xattr(dict_t *dst, char *key, data_t *value)</div><div class='ctx'> {</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *oldvalue = NULL;</div><div class='add'>+    char *old_choice = NULL;</div><div class='add'>+    char *new_choice = NULL;</div><div class='add'>+    char *full_choice = NULL;</div><div class='add'>+    char *status = NULL;</div><div class='ctx'> </div><div class='del'>-        int              ret            = 0;</div><div class='del'>-        char            *oldvalue       = NULL;</div><div class='del'>-        char            *old_choice     = NULL;</div><div class='del'>-        char            *new_choice     = NULL;</div><div class='del'>-        char            *full_choice    = NULL;</div><div class='del'>-        char            *status         = NULL;</div><div class='add'>+    if (value == NULL) {</div><div class='add'>+        gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_DATA_NULL,</div><div class='add'>+               "GF_AFR_SBRAIN_STATUS value is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dst, key, &amp;oldvalue);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (value == NULL) {</div><div class='del'>-                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DATA_NULL,</div><div class='del'>-                        "GF_AFR_SBRAIN_STATUS value is NULL");</div><div class='add'>+    /* skip code that is irrelevant if !oldvalue */</div><div class='add'>+    if (!oldvalue)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (strstr(oldvalue, "not")) {</div><div class='add'>+        gf_msg_debug("dht", 0, "Need to update split-brain status in dict");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (strstr(oldvalue, "metadata-split-brain:yes") &amp;&amp;</div><div class='add'>+        (strstr(oldvalue, "data-split-brain:no"))) {</div><div class='add'>+        if (strstr(value-&gt;data, "not")) {</div><div class='add'>+            gf_msg_debug("dht", 0, "No need to update split-brain status");</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (strstr(value-&gt;data, "yes") &amp;&amp;</div><div class='add'>+            (strncmp(oldvalue, value-&gt;data, strlen(oldvalue)))) {</div><div class='add'>+            old_choice = getChoices(oldvalue);</div><div class='add'>+            if (!old_choice) {</div><div class='add'>+                gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "Error to get choices");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dst, key, &amp;oldvalue);</div><div class='del'>-        if (ret)</div><div class='add'>+            ret = add_opt(&amp;full_choice, old_choice);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "Error to add choices");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        /* skip code that is irrelevant if !oldvalue */</div><div class='del'>-        if (!oldvalue)</div><div class='add'>+            new_choice = getChoices(value-&gt;data);</div><div class='add'>+            if (!new_choice) {</div><div class='add'>+                gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "Error to get choices");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (strstr (oldvalue, "not")) {</div><div class='del'>-                gf_msg_debug ("dht", 0,</div><div class='del'>-                              "Need to update split-brain status in dict");</div><div class='add'>+            ret = add_opt(&amp;full_choice, new_choice);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "Error to add choices ");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = gf_asprintf(&amp;status,</div><div class='add'>+                              "data-split-brain:%s    "</div><div class='add'>+                              "metadata-split-brain:%s   Choices:%s",</div><div class='add'>+                              "no", "yes", full_choice);</div><div class='add'>+</div><div class='add'>+            if (-1 == ret) {</div><div class='add'>+                gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "Error to prepare status ");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_dynstr(dst, key, status);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set full choice");</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        if (strstr (oldvalue, "metadata-split-brain:yes")</div><div class='del'>-            &amp;&amp; (strstr (oldvalue, "data-split-brain:no"))) {</div><div class='del'>-                if (strstr (value-&gt;data, "not")) {</div><div class='del'>-                        gf_msg_debug ("dht", 0,</div><div class='del'>-                                      "No need to update split-brain status");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (strstr (value-&gt;data, "yes") &amp;&amp;</div><div class='del'>-                        (strncmp (oldvalue, value-&gt;data, strlen(oldvalue)))) {</div><div class='del'>-                        old_choice = getChoices (oldvalue);</div><div class='del'>-                        if (!old_choice) {</div><div class='del'>-                                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                                        "Error to get choices");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = add_opt (&amp;full_choice, old_choice);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                         DHT_MSG_NO_MEMORY,</div><div class='del'>-                                         "Error to add choices");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        new_choice = getChoices (value-&gt;data);</div><div class='del'>-                        if (!new_choice) {</div><div class='del'>-                                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                                        "Error to get choices");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = add_opt (&amp;full_choice, new_choice);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                       DHT_MSG_NO_MEMORY,</div><div class='del'>-                                       "Error to add choices ");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = gf_asprintf (&amp;status,</div><div class='del'>-                                           "data-split-brain:%s    "</div><div class='del'>-                                           "metadata-split-brain:%s   Choices:%s",</div><div class='del'>-                                           "no", "yes", full_choice);</div><div class='del'>-</div><div class='del'>-                        if (-1 == ret) {</div><div class='del'>-                                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                                 DHT_MSG_NO_MEMORY,</div><div class='del'>-                                                "Error to prepare status ");</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        ret = dict_set_dynstr (dst, key, status);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Failed to set full choice");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (old_choice)</div><div class='del'>-                GF_FREE (old_choice);</div><div class='del'>-        if (new_choice)</div><div class='del'>-                GF_FREE (new_choice);</div><div class='del'>-        if (full_choice)</div><div class='del'>-                GF_FREE (full_choice);</div><div class='add'>+    if (old_choice)</div><div class='add'>+        GF_FREE(old_choice);</div><div class='add'>+    if (new_choice)</div><div class='add'>+        GF_FREE(new_choice);</div><div class='add'>+    if (full_choice)</div><div class='add'>+        GF_FREE(full_choice);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_aggregate (dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+dht_aggregate(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        dict_t          *dst            = NULL;</div><div class='del'>-        int32_t          ret            = -1;</div><div class='del'>-        data_t          *dict_data      = NULL;</div><div class='add'>+    dict_t *dst = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    data_t *dict_data = NULL;</div><div class='ctx'> </div><div class='del'>-        dst = data;</div><div class='add'>+    dst = data;</div><div class='ctx'> </div><div class='del'>-        /* compare split brain xattr only */</div><div class='del'>-        if (strcmp (key, GF_AFR_SBRAIN_STATUS) == 0) {</div><div class='del'>-                ret = dht_aggregate_split_brain_xattr(dst, key, value);</div><div class='add'>+    /* compare split brain xattr only */</div><div class='add'>+    if (strcmp(key, GF_AFR_SBRAIN_STATUS) == 0) {</div><div class='add'>+        ret = dht_aggregate_split_brain_xattr(dst, key, value);</div><div class='add'>+        if (!ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else if (strcmp(key, QUOTA_SIZE_KEY) == 0) {</div><div class='add'>+        ret = dht_aggregate_quota_xattr(dst, key, value);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("dht", GF_LOG_WARNING, 0,</div><div class='add'>+                   DHT_MSG_AGGREGATE_QUOTA_XATTR_FAILED,</div><div class='add'>+                   "Failed to aggregate quota xattr");</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (fnmatch(GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0) {</div><div class='add'>+        ret = gf_get_min_stime(THIS, dst, key, value);</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        /* compare user xattrs only */</div><div class='add'>+        if (!strncmp(key, "user.", SLEN("user."))) {</div><div class='add'>+            ret = dict_lookup(dst, key, &amp;dict_data);</div><div class='add'>+            if (!ret &amp;&amp; dict_data &amp;&amp; value) {</div><div class='add'>+                ret = is_data_equal(dict_data, value);</div><div class='ctx'>                 if (!ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else if (strcmp (key, QUOTA_SIZE_KEY) == 0) {</div><div class='del'>-                ret = dht_aggregate_quota_xattr (dst, key, value);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_AGGREGATE_QUOTA_XATTR_FAILED,</div><div class='del'>-                                "Failed to aggregate quota xattr");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (fnmatch (GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0) {</div><div class='del'>-                ret = gf_get_min_stime (THIS, dst, key, value);</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                /* compare user xattrs only */</div><div class='del'>-                if (!strncmp (key, "user.", SLEN ("user."))) {</div><div class='del'>-                        ret = dict_lookup (dst, key, &amp;dict_data);</div><div class='del'>-                        if (!ret &amp;&amp; dict_data &amp;&amp; value) {</div><div class='del'>-                                ret = is_data_equal (dict_data, value);</div><div class='del'>-                                if (!ret)</div><div class='del'>-                                        gf_msg_debug ("dht", 0,</div><div class='del'>-                                                      "xattr mismatch for %s",</div><div class='del'>-                                                      key);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                    gf_msg_debug("dht", 0, "xattr mismatch for %s", key);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (dst, key, value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("dht", GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value: key = %s",</div><div class='del'>-                        key);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set(dst, key, value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("dht", GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value: key = %s", key);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_aggregate_xattr (dict_t *dst, dict_t *src)</div><div class='add'>+dht_aggregate_xattr(dict_t *dst, dict_t *src)</div><div class='ctx'> {</div><div class='del'>-        if ((dst == NULL) || (src == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((dst == NULL) || (src == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict_foreach (src, dht_aggregate, dst);</div><div class='add'>+    dict_foreach(src, dht_aggregate, dst);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Code to save hashed subvol on inode ctx as a mds subvol</div><div class='del'>-*/</div><div class='add'>+ */</div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_mdsvol_set (inode_t *inode, xlator_t *this, xlator_t *mds_subvol)</div><div class='add'>+dht_inode_ctx_mdsvol_set(inode_t *inode, xlator_t *this, xlator_t *mds_subvol)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-        uint64_t                 ctx_int        = 0;</div><div class='del'>-        gf_boolean_t             ctx_free       = _gf_false;</div><div class='del'>-</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='add'>+    gf_boolean_t ctx_free = _gf_false;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get (inode, this , &amp;ctx_int);</div><div class='del'>-                if (ctx_int) {</div><div class='del'>-                        ctx = (dht_inode_ctx_t *)ctx_int;</div><div class='del'>-                        ctx-&gt;mds_subvol = mds_subvol;</div><div class='del'>-                } else {</div><div class='del'>-                        ctx = GF_CALLOC (1, sizeof(*ctx), gf_dht_mt_inode_ctx_t);</div><div class='del'>-                        if (!ctx)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        ctx-&gt;mds_subvol = mds_subvol;</div><div class='del'>-                        ctx_free        = _gf_true;</div><div class='del'>-                        ctx_int = (long) ctx;</div><div class='del'>-                        ret =  __inode_ctx_set (inode, this, &amp;ctx_int);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;ctx_int);</div><div class='add'>+        if (ctx_int) {</div><div class='add'>+            ctx = (dht_inode_ctx_t *)ctx_int;</div><div class='add'>+            ctx-&gt;mds_subvol = mds_subvol;</div><div class='add'>+        } else {</div><div class='add'>+            ctx = GF_CALLOC(1, sizeof(*ctx), gf_dht_mt_inode_ctx_t);</div><div class='add'>+            if (!ctx)</div><div class='add'>+                goto unlock;</div><div class='add'>+            ctx-&gt;mds_subvol = mds_subvol;</div><div class='add'>+            ctx_free = _gf_true;</div><div class='add'>+            ctx_int = (long)ctx;</div><div class='add'>+            ret = __inode_ctx_set(inode, this, &amp;ctx_int);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-        if (ret &amp;&amp; ctx_free)</div><div class='del'>-                GF_FREE (ctx);</div><div class='del'>-        return ret;</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (ret &amp;&amp; ctx_free)</div><div class='add'>+        GF_FREE(ctx);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Code to get mds subvol from inode ctx */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_mdsvol_get (inode_t *inode, xlator_t *this, xlator_t **mdsvol)</div><div class='add'>+dht_inode_ctx_mdsvol_get(inode_t *inode, xlator_t *this, xlator_t **mdsvol)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!mdsvol)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!mdsvol)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (__is_root_gfid(inode-&gt;gfid)) {</div><div class='del'>-                (*mdsvol) = FIRST_CHILD (this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (__is_root_gfid(inode-&gt;gfid)) {</div><div class='add'>+        (*mdsvol) = FIRST_CHILD(this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_get (inode, this, &amp;ctx);</div><div class='add'>+    ret = dht_inode_ctx_get(inode, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; ctx) {</div><div class='del'>-                if (ctx-&gt;mds_subvol) {</div><div class='del'>-                        *mdsvol = ctx-&gt;mds_subvol;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+    if (!ret &amp;&amp; ctx) {</div><div class='add'>+        if (ctx-&gt;mds_subvol) {</div><div class='add'>+            *mdsvol = ctx-&gt;mds_subvol;</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* TODO:</div><div class='ctx'>    - use volumename in xattr instead of "dht"</div><div class='ctx'>    - use NS locks</div><div class='hunk'>@@ -540,293 +496,277 @@ dht_inode_ctx_mdsvol_get (inode_t *inode, xlator_t *this, xlator_t **mdsvol)</div><div class='ctx'>    - complete linkfile selfheal</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_lookup_selfheal_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_lookup_selfheal_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        dht_conf_t   *conf   = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-        ret = op_ret;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    ret = op_ret;</div><div class='ctx'> </div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                layout = local-&gt;selfheal.layout;</div><div class='del'>-                ret = dht_layout_set (this, local-&gt;inode, layout);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        layout = local-&gt;selfheal.layout;</div><div class='add'>+        ret = dht_layout_set(this, local-&gt;inode, layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_inode_ctx_time_update (local-&gt;inode, this, &amp;local-&gt;stbuf, 1);</div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           &amp;local-&gt;postparent, 1);</div><div class='del'>-        }</div><div class='add'>+    dht_inode_ctx_time_update(local-&gt;inode, this, &amp;local-&gt;stbuf, 1);</div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, &amp;local-&gt;postparent,</div><div class='add'>+                                  1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-        /* Delete mds xattr at the time of STACK UNWIND */</div><div class='del'>-        GF_REMOVE_INTERNAL_XATTR (conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+    /* Delete mds xattr at the time of STACK UNWIND */</div><div class='add'>+    GF_REMOVE_INTERNAL_XATTR(conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, ret, local-&gt;op_errno, local-&gt;inode,</div><div class='del'>-                          &amp;local-&gt;stbuf, local-&gt;xattr, &amp;local-&gt;postparent);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, ret, local-&gt;op_errno, local-&gt;inode,</div><div class='add'>+                     &amp;local-&gt;stbuf, local-&gt;xattr, &amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_discover_complete (xlator_t *this, call_frame_t *discover_frame)</div><div class='del'>-{</div><div class='del'>-        dht_local_t     *local           = NULL;</div><div class='del'>-        dht_local_t     *heal_local      = NULL;</div><div class='del'>-        call_frame_t    *main_frame      = NULL;</div><div class='del'>-        call_frame_t    *heal_frame      = NULL;</div><div class='del'>-        int              op_errno        = 0;</div><div class='del'>-        int              ret             = -1;</div><div class='del'>-        dht_layout_t    *layout          = NULL;</div><div class='del'>-        dht_conf_t      *conf            = NULL;</div><div class='del'>-        uint32_t         vol_commit_hash = 0;</div><div class='del'>-        xlator_t        *source          = NULL;</div><div class='del'>-        int              heal_path       = 0;</div><div class='del'>-        int              error_while_marking_mds   = 0;</div><div class='del'>-        int              i               = 0;</div><div class='del'>-        loc_t            loc             = {0 };</div><div class='del'>-        int8_t           is_read_only    = 0, layout_anomalies = 0;</div><div class='del'>-        char             gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = discover_frame-&gt;local;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;discover_frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                main_frame = local-&gt;main_frame;</div><div class='del'>-                local-&gt;main_frame = NULL;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;discover_frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!main_frame)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        /* Code to update all extended attributed from</div><div class='del'>-           subvol to local-&gt;xattr on that internal xattr has found</div><div class='del'>-        */</div><div class='del'>-        if (conf-&gt;subvolume_cnt == 1)</div><div class='del'>-                local-&gt;need_xattr_heal = 0;</div><div class='del'>-        if (local-&gt;need_xattr_heal &amp;&amp; (local-&gt;mds_xattr)) {</div><div class='del'>-                dht_dir_set_heal_xattr (this, local, local-&gt;xattr,</div><div class='del'>-                                        local-&gt;mds_xattr, NULL, NULL);</div><div class='del'>-                dict_unref (local-&gt;mds_xattr);</div><div class='del'>-                local-&gt;mds_xattr = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int8 (local-&gt;xattr_req, QUOTA_READ_ONLY_KEY,</div><div class='del'>-                             &amp;is_read_only);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "key = %s not present in dict",</div><div class='del'>-                              QUOTA_READ_ONLY_KEY);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;file_count &amp;&amp; local-&gt;dir_count) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_FILE_TYPE_MISMATCH,</div><div class='del'>-                        "path %s exists as a file on one subvolume "</div><div class='del'>-                        "and directory on another. "</div><div class='del'>-                        "Please fix it manually",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;cached_subvol) {</div><div class='del'>-                ret = dht_layout_preset (this, local-&gt;cached_subvol,</div><div class='del'>-                                         local-&gt;inode);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_LAYOUT_SET_FAILED,</div><div class='del'>-                                "failed to set layout for subvolume %s",</div><div class='del'>-                                local-&gt;cached_subvol ? local-&gt;cached_subvol-&gt;name : "&lt;nil&gt;");</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = dht_layout_normalize (this, &amp;local-&gt;loc, layout);</div><div class='del'>-                if ((ret &lt; 0) || ((ret &gt; 0) &amp;&amp; (local-&gt;op_ret != 0))) {</div><div class='del'>-                        /* either the layout is incorrect or the directory is</div><div class='del'>-                         * not found even in one subvolume.</div><div class='del'>-                         */</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "normalizing failed on %s "</div><div class='del'>-                                      "(overlaps/holes present: %s, "</div><div class='del'>-                                      "ENOENT errors: %d)", local-&gt;loc.path,</div><div class='del'>-                                      (ret &lt; 0) ? "yes" : "no", (ret &gt; 0) ? ret : 0);</div><div class='del'>-                        layout_anomalies = 1;</div><div class='del'>-                } else if (local-&gt;inode) {</div><div class='del'>-                        dht_layout_set (this, local-&gt;inode, layout);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_discover_complete(xlator_t *this, call_frame_t *discover_frame)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *heal_local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    uint32_t vol_commit_hash = 0;</div><div class='add'>+    xlator_t *source = NULL;</div><div class='add'>+    int heal_path = 0;</div><div class='add'>+    int error_while_marking_mds = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int8_t is_read_only = 0, layout_anomalies = 0;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = discover_frame-&gt;local;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;discover_frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        main_frame = local-&gt;main_frame;</div><div class='add'>+        local-&gt;main_frame = NULL;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;discover_frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!main_frame)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    /* Code to update all extended attributed from</div><div class='add'>+       subvol to local-&gt;xattr on that internal xattr has found</div><div class='add'>+    */</div><div class='add'>+    if (conf-&gt;subvolume_cnt == 1)</div><div class='add'>+        local-&gt;need_xattr_heal = 0;</div><div class='add'>+    if (local-&gt;need_xattr_heal &amp;&amp; (local-&gt;mds_xattr)) {</div><div class='add'>+        dht_dir_set_heal_xattr(this, local, local-&gt;xattr, local-&gt;mds_xattr,</div><div class='add'>+                               NULL, NULL);</div><div class='add'>+        dict_unref(local-&gt;mds_xattr);</div><div class='add'>+        local-&gt;mds_xattr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int8(local-&gt;xattr_req, QUOTA_READ_ONLY_KEY, &amp;is_read_only);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "key = %s not present in dict",</div><div class='add'>+                     QUOTA_READ_ONLY_KEY);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;file_count &amp;&amp; local-&gt;dir_count) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_FILE_TYPE_MISMATCH,</div><div class='add'>+               "path %s exists as a file on one subvolume "</div><div class='add'>+               "and directory on another. "</div><div class='add'>+               "Please fix it manually",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;vch_forced) {</div><div class='del'>-                ret = dict_get_uint32 (local-&gt;xattr,</div><div class='del'>-                                       conf-&gt;commithash_xattr_name,</div><div class='del'>-                                       &amp;vol_commit_hash);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        conf-&gt;vol_commit_hash = vol_commit_hash;</div><div class='del'>-                }</div><div class='add'>+    if (local-&gt;cached_subvol) {</div><div class='add'>+        ret = dht_layout_preset(this, local-&gt;cached_subvol, local-&gt;inode);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_SET_FAILED,</div><div class='add'>+                   "failed to set layout for subvolume %s",</div><div class='add'>+                   local-&gt;cached_subvol ? local-&gt;cached_subvol-&gt;name : "&lt;nil&gt;");</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = dht_layout_normalize(this, &amp;local-&gt;loc, layout);</div><div class='add'>+        if ((ret &lt; 0) || ((ret &gt; 0) &amp;&amp; (local-&gt;op_ret != 0))) {</div><div class='add'>+            /* either the layout is incorrect or the directory is</div><div class='add'>+             * not found even in one subvolume.</div><div class='add'>+             */</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "normalizing failed on %s "</div><div class='add'>+                         "(overlaps/holes present: %s, "</div><div class='add'>+                         "ENOENT errors: %d)",</div><div class='add'>+                         local-&gt;loc.path, (ret &lt; 0) ? "yes" : "no",</div><div class='add'>+                         (ret &gt; 0) ? ret : 0);</div><div class='add'>+            layout_anomalies = 1;</div><div class='add'>+        } else if (local-&gt;inode) {</div><div class='add'>+            dht_layout_set(this, local-&gt;inode, layout);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;vch_forced) {</div><div class='add'>+        ret = dict_get_uint32(local-&gt;xattr, conf-&gt;commithash_xattr_name,</div><div class='add'>+                              &amp;vol_commit_hash);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            conf-&gt;vol_commit_hash = vol_commit_hash;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (IA_ISDIR (local-&gt;stbuf.ia_type) &amp;&amp; !is_read_only) {</div><div class='del'>-                for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                       if (!source &amp;&amp; !layout-&gt;list[i].err)</div><div class='del'>-                                source = layout-&gt;list[i].xlator;</div><div class='del'>-                        if (layout-&gt;list[i].err == ENOENT ||</div><div class='del'>-                            layout-&gt;list[i].err == ESTALE) {</div><div class='del'>-                                heal_path = 1;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (source &amp;&amp; heal_path)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (IA_ISDIR(local-&gt;stbuf.ia_type) &amp;&amp; !is_read_only) {</div><div class='add'>+        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+            if (!source &amp;&amp; !layout-&gt;list[i].err)</div><div class='add'>+                source = layout-&gt;list[i].xlator;</div><div class='add'>+            if (layout-&gt;list[i].err == ENOENT ||</div><div class='add'>+                layout-&gt;list[i].err == ESTALE) {</div><div class='add'>+                heal_path = 1;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (IA_ISDIR (local-&gt;stbuf.ia_type)) {</div><div class='del'>-                /* Call function to save hashed subvol on inode ctx if</div><div class='del'>-                   internal mds xattr is not present and all subvols are up</div><div class='del'>-                */</div><div class='del'>-                if (!local-&gt;op_ret &amp;&amp; !__is_root_gfid (local-&gt;stbuf.ia_gfid))</div><div class='del'>-                        (void) dht_common_mark_mdsxattr (discover_frame,</div><div class='del'>-                                                         &amp;error_while_marking_mds, 1);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;need_xattr_heal &amp;&amp; !heal_path) {</div><div class='del'>-                        local-&gt;need_xattr_heal = 0;</div><div class='del'>-                        ret =  dht_dir_xattr_heal (this, local);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        ret,</div><div class='del'>-                                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                        "xattr heal failed for "</div><div class='del'>-                                        "directory  gfid is %s ",</div><div class='del'>-                                        gfid_local);</div><div class='del'>-                }</div><div class='add'>+            if (source &amp;&amp; heal_path)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (source &amp;&amp; (heal_path || layout_anomalies || error_while_marking_mds)) {</div><div class='del'>-                gf_uuid_copy (loc.gfid, local-&gt;gfid);</div><div class='del'>-                if (gf_uuid_is_null (loc.gfid)) {</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;inode)</div><div class='del'>-                        loc.inode = inode_ref (local-&gt;inode);</div><div class='del'>-                else</div><div class='del'>-                        goto done;</div><div class='del'>-</div><div class='del'>-               heal_frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-               if (heal_frame) {</div><div class='del'>-                        heal_local = dht_local_init (heal_frame, &amp;loc,</div><div class='del'>-                                                     NULL, 0);</div><div class='del'>-                        if (!heal_local)</div><div class='del'>-                                goto cleanup;</div><div class='del'>-</div><div class='del'>-                        gf_uuid_copy (heal_local-&gt;gfid, local-&gt;gfid);</div><div class='del'>-                        heal_frame-&gt;cookie = source;</div><div class='del'>-                        heal_local-&gt;xattr = dict_ref (local-&gt;xattr);</div><div class='del'>-                        heal_local-&gt;stbuf = local-&gt;stbuf;</div><div class='del'>-                        heal_local-&gt;postparent = local-&gt;postparent;</div><div class='del'>-                        heal_local-&gt;inode = inode_ref (loc.inode);</div><div class='del'>-                        heal_local-&gt;main_frame = main_frame;</div><div class='del'>-                        FRAME_SU_DO (heal_frame, dht_local_t);</div><div class='del'>-                        ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                            dht_heal_full_path,</div><div class='del'>-                                            dht_heal_full_path_done,</div><div class='del'>-                                            heal_frame, heal_frame);</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                loc_wipe (&amp;loc);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                        /*</div><div class='del'>-                         * Failed to spawn the synctask. Returning</div><div class='del'>-                         * with out doing heal.</div><div class='del'>-                         */</div><div class='del'>-cleanup:</div><div class='del'>-                        loc_wipe (&amp;loc);</div><div class='del'>-                        DHT_STACK_DESTROY (heal_frame);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    if (IA_ISDIR(local-&gt;stbuf.ia_type)) {</div><div class='add'>+        /* Call function to save hashed subvol on inode ctx if</div><div class='add'>+           internal mds xattr is not present and all subvols are up</div><div class='add'>+        */</div><div class='add'>+        if (!local-&gt;op_ret &amp;&amp; !__is_root_gfid(local-&gt;stbuf.ia_gfid))</div><div class='add'>+            (void)dht_common_mark_mdsxattr(discover_frame,</div><div class='add'>+                                           &amp;error_while_marking_mds, 1);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;need_xattr_heal &amp;&amp; !heal_path) {</div><div class='add'>+            local-&gt;need_xattr_heal = 0;</div><div class='add'>+            ret = dht_dir_xattr_heal(this, local);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                       DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                       "xattr heal failed for "</div><div class='add'>+                       "directory  gfid is %s ",</div><div class='add'>+                       gfid_local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (source &amp;&amp; (heal_path || layout_anomalies || error_while_marking_mds)) {</div><div class='add'>+        gf_uuid_copy(loc.gfid, local-&gt;gfid);</div><div class='add'>+        if (gf_uuid_is_null(loc.gfid)) {</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (local-&gt;inode)</div><div class='add'>+            loc.inode = inode_ref(local-&gt;inode);</div><div class='add'>+        else</div><div class='add'>+            goto done;</div><div class='add'>+</div><div class='add'>+        heal_frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+        if (heal_frame) {</div><div class='add'>+            heal_local = dht_local_init(heal_frame, &amp;loc, NULL, 0);</div><div class='add'>+            if (!heal_local)</div><div class='add'>+                goto cleanup;</div><div class='add'>+</div><div class='add'>+            gf_uuid_copy(heal_local-&gt;gfid, local-&gt;gfid);</div><div class='add'>+            heal_frame-&gt;cookie = source;</div><div class='add'>+            heal_local-&gt;xattr = dict_ref(local-&gt;xattr);</div><div class='add'>+            heal_local-&gt;stbuf = local-&gt;stbuf;</div><div class='add'>+            heal_local-&gt;postparent = local-&gt;postparent;</div><div class='add'>+            heal_local-&gt;inode = inode_ref(loc.inode);</div><div class='add'>+            heal_local-&gt;main_frame = main_frame;</div><div class='add'>+            FRAME_SU_DO(heal_frame, dht_local_t);</div><div class='add'>+            ret = synctask_new(this-&gt;ctx-&gt;env, dht_heal_full_path,</div><div class='add'>+                               dht_heal_full_path_done, heal_frame, heal_frame);</div><div class='add'>+            if (!ret) {</div><div class='add'>+                loc_wipe(&amp;loc);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='add'>+            /*</div><div class='add'>+             * Failed to spawn the synctask. Returning</div><div class='add'>+             * with out doing heal.</div><div class='add'>+             */</div><div class='add'>+        cleanup:</div><div class='add'>+            loc_wipe(&amp;loc);</div><div class='add'>+            DHT_STACK_DESTROY(heal_frame);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> done:</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-        /* Delete mds xattr at the time of STACK UNWIND */</div><div class='del'>-        if (local-&gt;xattr)</div><div class='del'>-                GF_REMOVE_INTERNAL_XATTR (conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+    /* Delete mds xattr at the time of STACK UNWIND */</div><div class='add'>+    if (local-&gt;xattr)</div><div class='add'>+        GF_REMOVE_INTERNAL_XATTR(conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (lookup, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                          &amp;local-&gt;postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                     &amp;local-&gt;postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (lookup, main_frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, main_frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_common_mark_mdsxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                              xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                              dict_t *xdata)</div><div class='add'>+dht_common_mark_mdsxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev  = cookie;</div><div class='del'>-        int           ret   = -1;</div><div class='del'>-        dht_conf_t   *conf  = 0;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = cookie;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame-&gt;local, out);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        layout = local-&gt;selfheal.layout;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    layout = local-&gt;selfheal.layout;</div><div class='ctx'> </div><div class='del'>-        if (op_ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_ret,</div><div class='del'>-                              "Failed to set %s on the MDS %s for path %s. ",</div><div class='del'>-                               conf-&gt;mds_xattr_key, prev-&gt;name, local-&gt;loc.path);</div><div class='del'>-        } else {</div><div class='del'>-                /* Save mds subvol on inode ctx */</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_set (local-&gt;inode, this, prev);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                                "Failed to set mds subvol on inode ctx"</div><div class='del'>-                                " %s for %s ", prev-&gt;name,</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (!local-&gt;mds_heal_fresh_lookup &amp;&amp; layout) {</div><div class='del'>-                dht_selfheal_dir_setattr (frame, &amp;local-&gt;loc, &amp;local-&gt;stbuf,</div><div class='del'>-                                          0xffffffff, layout);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_ret,</div><div class='add'>+                     "Failed to set %s on the MDS %s for path %s. ",</div><div class='add'>+                     conf-&gt;mds_xattr_key, prev-&gt;name, local-&gt;loc.path);</div><div class='add'>+    } else {</div><div class='add'>+        /* Save mds subvol on inode ctx */</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_set(local-&gt;inode, this, prev);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+                   "Failed to set mds subvol on inode ctx"</div><div class='add'>+                   " %s for %s ",</div><div class='add'>+                   prev-&gt;name, local-&gt;loc.path);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (!local-&gt;mds_heal_fresh_lookup &amp;&amp; layout) {</div><div class='add'>+        dht_selfheal_dir_setattr(frame, &amp;local-&gt;loc, &amp;local-&gt;stbuf, 0xffffffff,</div><div class='add'>+                                 layout);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (local &amp;&amp; local-&gt;mds_heal_fresh_lookup)</div><div class='del'>-                DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    if (local &amp;&amp; local-&gt;mds_heal_fresh_lookup)</div><div class='add'>+        DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Common function call by revalidate/selfheal code path to populate</div><div class='ctx'>    internal xattr if it is not present, mark_during_fresh_lookup value</div><div class='ctx'>    determines either function is call by revalidate_cbk(discover_complete)</div><div class='hunk'>@@ -842,1508 +782,1416 @@ out:</div><div class='ctx'>    penalty.</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-dht_common_mark_mdsxattr (call_frame_t *frame, int *errst, int mark_during_fresh_lookup)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local          = NULL;</div><div class='del'>-        xlator_t     *this           = NULL;</div><div class='del'>-        xlator_t     *hashed_subvol  = NULL;</div><div class='del'>-        int           ret            = 0;</div><div class='del'>-        int           i              = 0;</div><div class='del'>-        dict_t       *xattrs         = NULL;</div><div class='del'>-        char          gfid_local[GF_UUID_BUF_SIZE] = {0,};</div><div class='del'>-        int32_t       zero[1]        = {0};</div><div class='del'>-        dht_conf_t   *conf           = 0;</div><div class='del'>-        dht_layout_t *layout         = NULL;</div><div class='del'>-        dht_local_t  *copy_local     = NULL;</div><div class='del'>-        call_frame_t *xattr_frame    = NULL;</div><div class='del'>-        gf_boolean_t  vol_down       = _gf_false;</div><div class='del'>-</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        layout = local-&gt;selfheal.layout;</div><div class='del'>-        local-&gt;mds_heal_fresh_lookup = mark_during_fresh_lookup;</div><div class='del'>-        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='del'>-</div><div class='del'>-        /* Code to update hashed subvol consider as a mds subvol</div><div class='del'>-           and wind a setxattr call on hashed subvol to update</div><div class='del'>-           internal xattr</div><div class='add'>+dht_common_mark_mdsxattr(call_frame_t *frame, int *errst,</div><div class='add'>+                         int mark_during_fresh_lookup)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t zero[1] = {0};</div><div class='add'>+    dht_conf_t *conf = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_local_t *copy_local = NULL;</div><div class='add'>+    call_frame_t *xattr_frame = NULL;</div><div class='add'>+    gf_boolean_t vol_down = _gf_false;</div><div class='add'>+</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    layout = local-&gt;selfheal.layout;</div><div class='add'>+    local-&gt;mds_heal_fresh_lookup = mark_during_fresh_lookup;</div><div class='add'>+    gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+</div><div class='add'>+    /* Code to update hashed subvol consider as a mds subvol</div><div class='add'>+       and wind a setxattr call on hashed subvol to update</div><div class='add'>+       internal xattr</div><div class='add'>+    */</div><div class='add'>+    if (!local-&gt;xattr || !dict_get(local-&gt;xattr, conf-&gt;mds_xattr_key)) {</div><div class='add'>+        /* It means no internal MDS xattr has been set yet</div><div class='add'>+         */</div><div class='add'>+        /* Check the status of all subvol are up while call</div><div class='add'>+           this function call by lookup code path</div><div class='ctx'>         */</div><div class='del'>-        if (!local-&gt;xattr || !dict_get (local-&gt;xattr, conf-&gt;mds_xattr_key)) {</div><div class='del'>-                /* It means no internal MDS xattr has been set yet</div><div class='del'>-                */</div><div class='del'>-                /* Check the status of all subvol are up while call</div><div class='del'>-                   this function call by lookup code path</div><div class='del'>-                */</div><div class='del'>-                if (mark_during_fresh_lookup) {</div><div class='del'>-                        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                        vol_down = _gf_true;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        if (vol_down) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "subvol %s is down. Unable to "</div><div class='del'>-                                              " save mds subvol on inode for "</div><div class='del'>-                                              " path %s gfid is %s " ,</div><div class='del'>-                                              conf-&gt;subvolumes[i]-&gt;name,</div><div class='del'>-                                              local-&gt;loc.path, gfid_local);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+        if (mark_during_fresh_lookup) {</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+                    vol_down = _gf_true;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            if (vol_down) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "subvol %s is down. Unable to "</div><div class='add'>+                             " save mds subvol on inode for "</div><div class='add'>+                             " path %s gfid is %s ",</div><div class='add'>+                             conf-&gt;subvolumes[i]-&gt;name, local-&gt;loc.path,</div><div class='add'>+                             gfid_local);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* Calculate hashed subvol based on inode and parent node</div><div class='del'>-                */</div><div class='del'>-                hashed_subvol = dht_inode_get_hashed_subvol (local-&gt;inode, this,</div><div class='del'>-                                                             &amp;local-&gt;loc);</div><div class='del'>-                if (!hashed_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get hashed subvol for path %s"</div><div class='del'>-                                "gfid is %s ",</div><div class='del'>-                                local-&gt;loc.path, gfid_local);</div><div class='del'>-                        (*errst) = 1;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                xattrs = dict_new ();</div><div class='del'>-                if (!xattrs) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY, "dict_new failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* Add internal MDS xattr on disk for hashed subvol</div><div class='del'>-                */</div><div class='del'>-                ret = dht_dict_set_array (xattrs, conf-&gt;mds_xattr_key,</div><div class='del'>-                                          zero, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary"</div><div class='del'>-                                "  value:key = %s for "</div><div class='del'>-                                "path %s", conf-&gt;mds_xattr_key,</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* Create a new frame to wind a call only while</div><div class='del'>-                   this function call by revalidate_cbk code path</div><div class='del'>-                   To wind a call parallel need to create a new frame</div><div class='del'>-                */</div><div class='del'>-                if (mark_during_fresh_lookup) {</div><div class='del'>-                        xattr_frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-                        if (!xattr_frame) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        copy_local = dht_local_init (xattr_frame, &amp;(local-&gt;loc),</div><div class='del'>-                                                     NULL, 0);</div><div class='del'>-                        if (!copy_local) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                DHT_STACK_DESTROY (xattr_frame);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='del'>-                        copy_local-&gt;mds_heal_fresh_lookup = mark_during_fresh_lookup;</div><div class='del'>-                        if (!copy_local-&gt;inode)</div><div class='del'>-                                copy_local-&gt;inode = inode_ref (local-&gt;inode);</div><div class='del'>-                        gf_uuid_copy (copy_local-&gt;loc.gfid, local-&gt;gfid);</div><div class='del'>-                        FRAME_SU_DO (xattr_frame, dht_local_t);</div><div class='del'>-                        STACK_WIND_COOKIE (xattr_frame, dht_common_mark_mdsxattr_cbk,</div><div class='del'>-                                           hashed_subvol, hashed_subvol,</div><div class='del'>-                                           hashed_subvol-&gt;fops-&gt;setxattr,</div><div class='del'>-                                           &amp;local-&gt;loc, xattrs, 0, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        STACK_WIND_COOKIE (frame,</div><div class='del'>-                                           dht_common_mark_mdsxattr_cbk,</div><div class='del'>-                                           (void *)hashed_subvol,</div><div class='del'>-                                           hashed_subvol,</div><div class='del'>-                                           hashed_subvol-&gt;fops-&gt;setxattr,</div><div class='del'>-                                           &amp;local-&gt;loc, xattrs, 0,</div><div class='del'>-                                           NULL);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "internal xattr %s is present on subvol"</div><div class='del'>-                              "on path %s gfid is %s " , conf-&gt;mds_xattr_key,</div><div class='del'>-                               local-&gt;loc.path, gfid_local);</div><div class='del'>-                if (!mark_during_fresh_lookup)</div><div class='del'>-                        dht_selfheal_dir_setattr (frame, &amp;local-&gt;loc,</div><div class='del'>-                                                  &amp;local-&gt;stbuf, 0xffffffff,</div><div class='del'>-                                                  layout);</div><div class='add'>+        /* Calculate hashed subvol based on inode and parent node</div><div class='add'>+         */</div><div class='add'>+        hashed_subvol = dht_inode_get_hashed_subvol(local-&gt;inode, this,</div><div class='add'>+                                                    &amp;local-&gt;loc);</div><div class='add'>+        if (!hashed_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get hashed subvol for path %s"</div><div class='add'>+                   "gfid is %s ",</div><div class='add'>+                   local-&gt;loc.path, gfid_local);</div><div class='add'>+            (*errst) = 1;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        xattrs = dict_new();</div><div class='add'>+        if (!xattrs) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "dict_new failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        /* Add internal MDS xattr on disk for hashed subvol</div><div class='add'>+         */</div><div class='add'>+        ret = dht_dict_set_array(xattrs, conf-&gt;mds_xattr_key, zero, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary"</div><div class='add'>+                   "  value:key = %s for "</div><div class='add'>+                   "path %s",</div><div class='add'>+                   conf-&gt;mds_xattr_key, local-&gt;loc.path);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        /* Create a new frame to wind a call only while</div><div class='add'>+           this function call by revalidate_cbk code path</div><div class='add'>+           To wind a call parallel need to create a new frame</div><div class='add'>+        */</div><div class='add'>+        if (mark_during_fresh_lookup) {</div><div class='add'>+            xattr_frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+            if (!xattr_frame) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            copy_local = dht_local_init(xattr_frame, &amp;(local-&gt;loc), NULL, 0);</div><div class='add'>+            if (!copy_local) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                DHT_STACK_DESTROY(xattr_frame);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='add'>+            copy_local-&gt;mds_heal_fresh_lookup = mark_during_fresh_lookup;</div><div class='add'>+            if (!copy_local-&gt;inode)</div><div class='add'>+                copy_local-&gt;inode = inode_ref(local-&gt;inode);</div><div class='add'>+            gf_uuid_copy(copy_local-&gt;loc.gfid, local-&gt;gfid);</div><div class='add'>+            FRAME_SU_DO(xattr_frame, dht_local_t);</div><div class='add'>+            STACK_WIND_COOKIE(xattr_frame, dht_common_mark_mdsxattr_cbk,</div><div class='add'>+                              hashed_subvol, hashed_subvol,</div><div class='add'>+                              hashed_subvol-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='add'>+                              xattrs, 0, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_common_mark_mdsxattr_cbk,</div><div class='add'>+                              (void *)hashed_subvol, hashed_subvol,</div><div class='add'>+                              hashed_subvol-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='add'>+                              xattrs, 0, NULL);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "internal xattr %s is present on subvol"</div><div class='add'>+                     "on path %s gfid is %s ",</div><div class='add'>+                     conf-&gt;mds_xattr_key, local-&gt;loc.path, gfid_local);</div><div class='add'>+        if (!mark_during_fresh_lookup)</div><div class='add'>+            dht_selfheal_dir_setattr(frame, &amp;local-&gt;loc, &amp;local-&gt;stbuf,</div><div class='add'>+                                     0xffffffff, layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_discover_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno,</div><div class='del'>-                  inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                  struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local                   = NULL;</div><div class='del'>-        int           this_call_cnt           = 0;</div><div class='del'>-        xlator_t     *prev                    = NULL;</div><div class='del'>-        dht_layout_t *layout                  = NULL;</div><div class='del'>-        int           ret                     = -1;</div><div class='del'>-        int           is_dir                  = 0;</div><div class='del'>-        int32_t       check_mds               = 0;</div><div class='del'>-        int           is_linkfile             = 0;</div><div class='del'>-        int           attempt_unwind          = 0;</div><div class='del'>-        dht_conf_t   *conf                    = 0;</div><div class='del'>-        char          gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char          gfid_node[GF_UUID_BUF_SIZE]  = {0};</div><div class='del'>-        int32_t       mds_xattr_val[1]             = {0};</div><div class='del'>-        int           errst                        = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_discover_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                 dict_t *xattr, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int is_dir = 0;</div><div class='add'>+    int32_t check_mds = 0;</div><div class='add'>+    int is_linkfile = 0;</div><div class='add'>+    int attempt_unwind = 0;</div><div class='add'>+    dht_conf_t *conf = 0;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char gfid_node[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int32_t mds_xattr_val[1] = {0};</div><div class='add'>+    int errst = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+</div><div class='add'>+    /* Check if the gfid is different for file from other node */</div><div class='add'>+    if (!op_ret &amp;&amp; gf_uuid_compare(local-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='add'>+        gf_uuid_unparse(stbuf-&gt;ia_gfid, gfid_node);</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+               "%s: gfid different on %s, gfid local = %s"</div><div class='add'>+               "gfid other = %s",</div><div class='add'>+               local-&gt;loc.path, prev-&gt;name, gfid_local, gfid_node);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* TODO: assert equal mode on stbuf-&gt;st_mode and</div><div class='add'>+           local-&gt;stbuf-&gt;st_mode</div><div class='ctx'> </div><div class='add'>+           else mkdir/chmod/chown and fix</div><div class='add'>+        */</div><div class='ctx'> </div><div class='del'>-        /* Check if the gfid is different for file from other node */</div><div class='del'>-        if (!op_ret &amp;&amp; gf_uuid_compare (local-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='add'>+        ret = dht_layout_merge(this, layout, prev, op_ret, op_errno, xattr);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='add'>+                   "%s: failed to merge layouts for subvol %s", local-&gt;loc.path,</div><div class='add'>+                   prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-                gf_uuid_unparse(stbuf-&gt;ia_gfid, gfid_node);</div><div class='del'>-                gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "lookup of %s on %s returned error", local-&gt;loc.path,</div><div class='add'>+                         prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                        "%s: gfid different on %s, gfid local = %s"</div><div class='del'>-                        "gfid other = %s",</div><div class='del'>-                        local-&gt;loc.path, prev-&gt;name,</div><div class='del'>-                        gfid_local, gfid_node);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        is_linkfile = check_is_linkfile(inode, stbuf, xattr,</div><div class='add'>+                                        conf-&gt;link_xattr_name);</div><div class='add'>+        is_dir = check_is_dir(inode, stbuf, xattr);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* TODO: assert equal mode on stbuf-&gt;st_mode and</div><div class='del'>-                   local-&gt;stbuf-&gt;st_mode</div><div class='del'>-</div><div class='del'>-                   else mkdir/chmod/chown and fix</div><div class='del'>-                */</div><div class='del'>-</div><div class='del'>-                ret = dht_layout_merge (this, layout, prev,</div><div class='del'>-                                        op_ret, op_errno, xattr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='del'>-                                "%s: failed to merge layouts for subvol %s",</div><div class='del'>-                                local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "lookup of %s on %s returned error",</div><div class='del'>-                                      local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                is_linkfile = check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                                 conf-&gt;link_xattr_name);</div><div class='del'>-                is_dir = check_is_dir (inode, stbuf, xattr);</div><div class='del'>-</div><div class='del'>-                if (is_dir) {</div><div class='del'>-                        local-&gt;dir_count ++;</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;file_count ++;</div><div class='del'>-</div><div class='del'>-                        if (!is_linkfile &amp;&amp; !local-&gt;cached_subvol) {</div><div class='del'>-                                /* real file */</div><div class='del'>-                                /* Ok, we somehow managed to find a file on</div><div class='del'>-                                 * more than one subvol. ignore this or we</div><div class='del'>-                                 * will end up overwriting information while a</div><div class='del'>-                                 * a thread is potentially unwinding from</div><div class='del'>-                                 * dht_discover_complete</div><div class='del'>-                                 */</div><div class='del'>-                                local-&gt;cached_subvol = prev;</div><div class='del'>-                                attempt_unwind = 1;</div><div class='del'>-                        } else {</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;xattr == NULL) {</div><div class='del'>-                        local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                } else {</div><div class='del'>-                        /* Don't aggregate for files. See BZ#1484113 */</div><div class='del'>-                        if (is_dir)</div><div class='del'>-                                dht_aggregate_xattr (local-&gt;xattr, xattr);</div><div class='del'>-                }</div><div class='add'>+        if (is_dir) {</div><div class='add'>+            local-&gt;dir_count++;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;file_count++;</div><div class='add'>+</div><div class='add'>+            if (!is_linkfile &amp;&amp; !local-&gt;cached_subvol) {</div><div class='add'>+                /* real file */</div><div class='add'>+                /* Ok, we somehow managed to find a file on</div><div class='add'>+                 * more than one subvol. ignore this or we</div><div class='add'>+                 * will end up overwriting information while a</div><div class='add'>+                 * a thread is potentially unwinding from</div><div class='add'>+                 * dht_discover_complete</div><div class='add'>+                 */</div><div class='add'>+                local-&gt;cached_subvol = prev;</div><div class='add'>+                attempt_unwind = 1;</div><div class='add'>+            } else {</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;inode == NULL)</div><div class='del'>-                        local-&gt;inode = inode_ref (inode);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+        if (local-&gt;xattr == NULL) {</div><div class='add'>+            local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+        } else {</div><div class='add'>+            /* Don't aggregate for files. See BZ#1484113 */</div><div class='add'>+            if (is_dir)</div><div class='add'>+                dht_aggregate_xattr(local-&gt;xattr, xattr);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!dict_get (xattr, conf-&gt;mds_xattr_key)) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "internal xattr %s is present on subvol"</div><div class='del'>-                                      "on path %s gfid is %s " ,</div><div class='del'>-                                      conf-&gt;mds_xattr_key,</div><div class='del'>-                                      local-&gt;loc.path, gfid_local);</div><div class='del'>-                }</div><div class='del'>-                check_mds = dht_dict_get_array (xattr, conf-&gt;mds_xattr_key,</div><div class='del'>-                                                mds_xattr_val, 1, &amp;errst);</div><div class='del'>-                /* save mds subvol on inode ctx */</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_set (local-&gt;inode, this,</div><div class='del'>-                                                prev);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                                "Failed to set hashed subvol for %s vol is %s",</div><div class='del'>-                                local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;inode == NULL)</div><div class='add'>+            local-&gt;inode = inode_ref(inode);</div><div class='ctx'> </div><div class='del'>-                if ((check_mds &lt; 0) &amp;&amp; !errst) {</div><div class='del'>-                        local-&gt;mds_xattr = dict_ref (xattr);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Value of %s is not zero on mds subvol"</div><div class='del'>-                                      "so xattr needs to be healed on non mds"</div><div class='del'>-                                      " path is %s and vol name is %s "</div><div class='del'>-                                      " gfid is %s" ,</div><div class='del'>-                                      conf-&gt;mds_xattr_key,</div><div class='del'>-                                      local-&gt;loc.path,</div><div class='del'>-                                      prev-&gt;name, gfid_local);</div><div class='del'>-                        local-&gt;need_xattr_heal = 1;</div><div class='del'>-                        local-&gt;mds_subvol  = prev;</div><div class='del'>-                }</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+        if (!dict_get(xattr, conf-&gt;mds_xattr_key)) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "internal xattr %s is present on subvol"</div><div class='add'>+                         "on path %s gfid is %s ",</div><div class='add'>+                         conf-&gt;mds_xattr_key, local-&gt;loc.path, gfid_local);</div><div class='add'>+        }</div><div class='add'>+        check_mds = dht_dict_get_array(xattr, conf-&gt;mds_xattr_key,</div><div class='add'>+                                       mds_xattr_val, 1, &amp;errst);</div><div class='add'>+        /* save mds subvol on inode ctx */</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_set(local-&gt;inode, this, prev);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+                   "Failed to set hashed subvol for %s vol is %s",</div><div class='add'>+                   local-&gt;loc.path, prev-&gt;name);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if ((check_mds &lt; 0) &amp;&amp; !errst) {</div><div class='add'>+            local-&gt;mds_xattr = dict_ref(xattr);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Value of %s is not zero on mds subvol"</div><div class='add'>+                         "so xattr needs to be healed on non mds"</div><div class='add'>+                         " path is %s and vol name is %s "</div><div class='add'>+                         " gfid is %s",</div><div class='add'>+                         conf-&gt;mds_xattr_key, local-&gt;loc.path, prev-&gt;name,</div><div class='add'>+                         gfid_local);</div><div class='add'>+            local-&gt;need_xattr_heal = 1;</div><div class='add'>+            local-&gt;mds_subvol = prev;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        /* Make sure, the thread executing dht_discover_complete is the one</div><div class='del'>-         * which calls STACK_DESTROY (frame). In the case of "attempt_unwind",</div><div class='del'>-         * this makes sure that the thread don't call dht_frame_return, till</div><div class='del'>-         * call to dht_discover_complete is done.</div><div class='del'>-         */</div><div class='del'>-        if (attempt_unwind) {</div><div class='del'>-                dht_discover_complete (this, frame);</div><div class='del'>-        }</div><div class='add'>+    /* Make sure, the thread executing dht_discover_complete is the one</div><div class='add'>+     * which calls STACK_DESTROY (frame). In the case of "attempt_unwind",</div><div class='add'>+     * this makes sure that the thread don't call dht_frame_return, till</div><div class='add'>+     * call to dht_discover_complete is done.</div><div class='add'>+     */</div><div class='add'>+    if (attempt_unwind) {</div><div class='add'>+        dht_discover_complete(this, frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt) &amp;&amp; !attempt_unwind) {</div><div class='del'>-                dht_discover_complete (this, frame);</div><div class='del'>-        }</div><div class='add'>+    if (is_last_call(this_call_cnt) &amp;&amp; !attempt_unwind) {</div><div class='add'>+        dht_discover_complete(this, frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                DHT_STACK_DESTROY (frame);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        DHT_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_do_discover (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+dht_do_discover(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int          ret;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dht_conf_t  *conf = NULL;</div><div class='del'>-        int          call_cnt = 0;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='del'>-        int          i = 0;</div><div class='del'>-        call_frame_t *discover_frame = NULL;</div><div class='add'>+    int ret;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    call_frame_t *discover_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = dht_set_file_xattr_req (this, loc, local-&gt;xattr_req);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_set_file_xattr_req(this, loc, local-&gt;xattr_req);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_set_dir_xattr_req (this, loc, local-&gt;xattr_req);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_set_dir_xattr_req(this, loc, local-&gt;xattr_req);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (loc_is_root (loc)) {</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;commithash_xattr_name,</div><div class='del'>-                                       sizeof(uint32_t));</div><div class='del'>-        }</div><div class='add'>+    if (loc_is_root(loc)) {</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;commithash_xattr_name,</div><div class='add'>+                              sizeof(uint32_t));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_cnt        = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-        local-&gt;layout = dht_layout_new (this, conf-&gt;subvolume_cnt);</div><div class='add'>+    local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;layout) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;layout) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (local-&gt;gfid, loc-&gt;gfid);</div><div class='add'>+    gf_uuid_copy(local-&gt;gfid, loc-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        discover_frame = copy_frame (frame);</div><div class='del'>-        if (!discover_frame) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    discover_frame = copy_frame(frame);</div><div class='add'>+    if (!discover_frame) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        discover_frame-&gt;local = local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        local-&gt;main_frame = frame;</div><div class='add'>+    discover_frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    local-&gt;main_frame = frame;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (discover_frame, dht_discover_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(discover_frame, dht_discover_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Get the value of key from dict in the bytewise and save in array after</div><div class='ctx'>    convert from network byte order to host byte order</div><div class='ctx'> */</div><div class='ctx'> int32_t</div><div class='del'>-dht_dict_get_array (dict_t *dict, char *key, int32_t value[], int32_t size, int *errst)</div><div class='del'>-{</div><div class='del'>-        void    *ptr          = NULL;</div><div class='del'>-        int32_t len           = -1;</div><div class='del'>-        int32_t vindex        = -1;</div><div class='del'>-        int32_t err           = -1;</div><div class='del'>-        int     ret          = 0;</div><div class='del'>-</div><div class='del'>-        if (dict == NULL) {</div><div class='del'>-                (*errst) = -1;</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='del'>-        err = dict_get_ptr_and_len(dict, key, &amp;ptr, &amp;len);</div><div class='del'>-        if (err != 0) {</div><div class='del'>-                (*errst) = -1;</div><div class='del'>-                return err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (len != (size * sizeof (int32_t))) {</div><div class='del'>-                (*errst) = -1;</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (vindex = 0; vindex &lt; size; vindex++) {</div><div class='del'>-                value[vindex] = ntoh32(*((int32_t *)ptr + vindex));</div><div class='del'>-                if (value[vindex] &lt; 0)</div><div class='del'>-                        ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+dht_dict_get_array(dict_t *dict, char *key, int32_t value[], int32_t size,</div><div class='add'>+                   int *errst)</div><div class='add'>+{</div><div class='add'>+    void *ptr = NULL;</div><div class='add'>+    int32_t len = -1;</div><div class='add'>+    int32_t vindex = -1;</div><div class='add'>+    int32_t err = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (dict == NULL) {</div><div class='add'>+        (*errst) = -1;</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+    err = dict_get_ptr_and_len(dict, key, &amp;ptr, &amp;len);</div><div class='add'>+    if (err != 0) {</div><div class='add'>+        (*errst) = -1;</div><div class='add'>+        return err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (len != (size * sizeof(int32_t))) {</div><div class='add'>+        (*errst) = -1;</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (vindex = 0; vindex &lt; size; vindex++) {</div><div class='add'>+        value[vindex] = ntoh32(*((int32_t *)ptr + vindex));</div><div class='add'>+        if (value[vindex] &lt; 0)</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Code to call syntask to heal custom xattr from hashed subvol</div><div class='ctx'>    to non hashed subvol</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-dht_dir_xattr_heal (xlator_t *this, dht_local_t *local)</div><div class='add'>+dht_dir_xattr_heal(xlator_t *this, dht_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *copy_local                  = NULL;</div><div class='del'>-        call_frame_t *copy                        = NULL;</div><div class='del'>-        int          ret                          = -1;</div><div class='del'>-        char         gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *copy_local = NULL;</div><div class='add'>+    call_frame_t *copy = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                        "No gfid exists for path %s "</div><div class='del'>-                        "so healing xattr is not possible",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='del'>-        copy = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (copy) {</div><div class='del'>-                copy_local = dht_local_init (copy, &amp;(local-&gt;loc), NULL, 0);</div><div class='del'>-                if (!copy_local) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                "Memory allocation failed "</div><div class='del'>-                                "for path %s gfid %s ",</div><div class='del'>-                                local-&gt;loc.path, gfid_local);</div><div class='del'>-                        DHT_STACK_DESTROY (copy);</div><div class='del'>-                } else {</div><div class='del'>-                        copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='del'>-                        gf_uuid_copy (copy_local-&gt;loc.gfid, local-&gt;gfid);</div><div class='del'>-                        copy_local-&gt;mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-                        FRAME_SU_DO (copy, dht_local_t);</div><div class='del'>-                        ret = synctask_new (this-&gt;ctx-&gt;env, dht_dir_heal_xattrs,</div><div class='del'>-                                            dht_dir_heal_xattrs_done,</div><div class='del'>-                                            copy, copy);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                        "Synctask creation failed to heal xattr "</div><div class='del'>-                                        "for path %s gfid %s ",</div><div class='del'>-                                        local-&gt;loc.path, gfid_local);</div><div class='del'>-                                DHT_STACK_DESTROY (copy);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+               "No gfid exists for path %s "</div><div class='add'>+               "so healing xattr is not possible",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+    copy = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (copy) {</div><div class='add'>+        copy_local = dht_local_init(copy, &amp;(local-&gt;loc), NULL, 0);</div><div class='add'>+        if (!copy_local) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='add'>+                   DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                   "Memory allocation failed "</div><div class='add'>+                   "for path %s gfid %s ",</div><div class='add'>+                   local-&gt;loc.path, gfid_local);</div><div class='add'>+            DHT_STACK_DESTROY(copy);</div><div class='add'>+        } else {</div><div class='add'>+            copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='add'>+            gf_uuid_copy(copy_local-&gt;loc.gfid, local-&gt;gfid);</div><div class='add'>+            copy_local-&gt;mds_subvol = local-&gt;mds_subvol;</div><div class='add'>+            FRAME_SU_DO(copy, dht_local_t);</div><div class='add'>+            ret = synctask_new(this-&gt;ctx-&gt;env, dht_dir_heal_xattrs,</div><div class='add'>+                               dht_dir_heal_xattrs_done, copy, copy);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='add'>+                       DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                       "Synctask creation failed to heal xattr "</div><div class='add'>+                       "for path %s gfid %s ",</div><div class='add'>+                       local-&gt;loc.path, gfid_local);</div><div class='add'>+                DHT_STACK_DESTROY(copy);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_lookup_dir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                   dict_t *xattr, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int is_dir = 0;</div><div class='add'>+    int32_t check_mds = 0;</div><div class='add'>+    int errst = 0;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char gfid_node[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int32_t mds_xattr_val[1] = {0};</div><div class='add'>+    call_frame_t *copy = NULL;</div><div class='add'>+    dht_local_t *copy_local = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+</div><div class='add'>+    if (!op_ret &amp;&amp; gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        memcpy(local-&gt;gfid, stbuf-&gt;ia_gfid, 16);</div><div class='add'>+    }</div><div class='add'>+    if (!gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* Check if the gfid is different for file from other node */</div><div class='add'>+    if (!op_ret &amp;&amp; gf_uuid_compare(local-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='add'>+        gf_uuid_unparse(stbuf-&gt;ia_gfid, gfid_node);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_lookup_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno,</div><div class='del'>-                    inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                    struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local                   = NULL;</div><div class='del'>-        dht_conf_t   *conf                    = NULL;</div><div class='del'>-        int           this_call_cnt           = 0;</div><div class='del'>-        xlator_t     *prev                    = NULL;</div><div class='del'>-        dht_layout_t *layout                  = NULL;</div><div class='del'>-        int           ret                     = -1;</div><div class='del'>-        int           is_dir                  = 0;</div><div class='del'>-        int32_t       check_mds               = 0;</div><div class='del'>-        int           errst                   = 0;</div><div class='del'>-        char          gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char          gfid_node[GF_UUID_BUF_SIZE]  = {0};</div><div class='del'>-        int32_t       mds_xattr_val[1]                 = {0};</div><div class='del'>-        call_frame_t *copy                         = NULL;</div><div class='del'>-        dht_local_t  *copy_local                   = NULL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+               "%s: gfid different on %s."</div><div class='add'>+               " gfid local = %s, gfid subvol = %s",</div><div class='add'>+               local-&gt;loc.path, prev-&gt;name, gfid_local, gfid_node);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* TODO: assert equal mode on stbuf-&gt;st_mode and</div><div class='add'>+           local-&gt;stbuf-&gt;st_mode</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        conf  = this-&gt;private;</div><div class='add'>+           else mkdir/chmod/chown and fix</div><div class='add'>+        */</div><div class='add'>+        ret = dht_layout_merge(this, layout, prev, op_ret, op_errno, xattr);</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "lookup of %s on %s returned error", local-&gt;loc.path,</div><div class='add'>+                         prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (!op_ret &amp;&amp; gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                memcpy (local-&gt;gfid, stbuf-&gt;ia_gfid, 16);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-        if (!gf_uuid_is_null(local-&gt;gfid)) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if the gfid is different for file from other node */</div><div class='del'>-        if (!op_ret &amp;&amp; gf_uuid_compare (local-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='ctx'> </div><div class='del'>-                gf_uuid_unparse(stbuf-&gt;ia_gfid, gfid_node);</div><div class='add'>+        is_dir = check_is_dir(inode, stbuf, xattr);</div><div class='add'>+        if (!is_dir) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "lookup of %s on %s returned non"</div><div class='add'>+                         "dir 0%o"</div><div class='add'>+                         "calling lookup_everywhere",</div><div class='add'>+                         local-&gt;loc.path, prev-&gt;name, stbuf-&gt;ia_type);</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                        "%s: gfid different on %s."</div><div class='del'>-                        " gfid local = %s, gfid subvol = %s",</div><div class='del'>-                        local-&gt;loc.path, prev-&gt;name,</div><div class='del'>-                        gfid_local, gfid_node);</div><div class='add'>+            local-&gt;need_selfheal = 1;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* TODO: assert equal mode on stbuf-&gt;st_mode and</div><div class='del'>-                   local-&gt;stbuf-&gt;st_mode</div><div class='del'>-</div><div class='del'>-                   else mkdir/chmod/chown and fix</div><div class='del'>-                */</div><div class='del'>-                ret = dht_layout_merge (this, layout, prev, op_ret, op_errno,</div><div class='del'>-                                        xattr);</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "lookup of %s on %s returned error",</div><div class='del'>-                                      local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                is_dir = check_is_dir (inode, stbuf, xattr);</div><div class='del'>-                if (!is_dir) {</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "lookup of %s on %s returned non"</div><div class='del'>-                                      "dir 0%o"</div><div class='del'>-                                      "calling lookup_everywhere",</div><div class='del'>-                                      local-&gt;loc.path, prev-&gt;name,</div><div class='del'>-                                      stbuf-&gt;ia_type);</div><div class='del'>-</div><div class='del'>-                        local-&gt;need_selfheal = 1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                if (local-&gt;xattr == NULL) {</div><div class='del'>-                        local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                } else {</div><div class='del'>-                        dht_aggregate_xattr (local-&gt;xattr, xattr);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (dict_get (xattr, conf-&gt;mds_xattr_key)) {</div><div class='del'>-                        local-&gt;mds_subvol  = prev;</div><div class='del'>-                        local-&gt;mds_stbuf.ia_gid = stbuf-&gt;ia_gid;</div><div class='del'>-                        local-&gt;mds_stbuf.ia_uid = stbuf-&gt;ia_uid;</div><div class='del'>-                        local-&gt;mds_stbuf.ia_prot = stbuf-&gt;ia_prot;</div><div class='del'>-                }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        if (local-&gt;xattr == NULL) {</div><div class='add'>+            local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+        } else {</div><div class='add'>+            dht_aggregate_xattr(local-&gt;xattr, xattr);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;stbuf.ia_type != IA_INVAL) {</div><div class='del'>-                        if (!__is_root_gfid (stbuf-&gt;ia_gfid) &amp;&amp;</div><div class='del'>-                            ((local-&gt;stbuf.ia_gid != stbuf-&gt;ia_gid) ||</div><div class='del'>-                            (local-&gt;stbuf.ia_uid != stbuf-&gt;ia_uid) ||</div><div class='del'>-                            (is_permission_different (&amp;local-&gt;stbuf.ia_prot,</div><div class='del'>-                                                      &amp;stbuf-&gt;ia_prot)))) {</div><div class='del'>-                                local-&gt;need_attrheal = 1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (dict_get(xattr, conf-&gt;mds_xattr_key)) {</div><div class='add'>+            local-&gt;mds_subvol = prev;</div><div class='add'>+            local-&gt;mds_stbuf.ia_gid = stbuf-&gt;ia_gid;</div><div class='add'>+            local-&gt;mds_stbuf.ia_uid = stbuf-&gt;ia_uid;</div><div class='add'>+            local-&gt;mds_stbuf.ia_prot = stbuf-&gt;ia_prot;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;inode == NULL)</div><div class='del'>-                        local-&gt;inode = inode_ref (inode);</div><div class='add'>+        if (local-&gt;stbuf.ia_type != IA_INVAL) {</div><div class='add'>+            if (!__is_root_gfid(stbuf-&gt;ia_gfid) &amp;&amp;</div><div class='add'>+                ((local-&gt;stbuf.ia_gid != stbuf-&gt;ia_gid) ||</div><div class='add'>+                 (local-&gt;stbuf.ia_uid != stbuf-&gt;ia_uid) ||</div><div class='add'>+                 (is_permission_different(&amp;local-&gt;stbuf.ia_prot,</div><div class='add'>+                                          &amp;stbuf-&gt;ia_prot)))) {</div><div class='add'>+                local-&gt;need_attrheal = 1;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+        if (local-&gt;inode == NULL)</div><div class='add'>+            local-&gt;inode = inode_ref(inode);</div><div class='ctx'> </div><div class='del'>-                if (!dict_get (xattr, conf-&gt;mds_xattr_key)) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Internal xattr %s is not present "</div><div class='del'>-                                      " on path %s gfid is %s " ,</div><div class='del'>-                                      conf-&gt;mds_xattr_key,</div><div class='del'>-                                      local-&gt;loc.path, gfid_local);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                } else {</div><div class='del'>-                        /* Save mds subvol on inode ctx */</div><div class='del'>-                        ret = dht_inode_ctx_mdsvol_set (local-&gt;inode, this,</div><div class='del'>-                                                        prev);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                                        "Failed to set hashed subvol for %s vol is %s",</div><div class='del'>-                                        local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-                         }</div><div class='del'>-                }</div><div class='del'>-                check_mds = dht_dict_get_array (xattr, conf-&gt;mds_xattr_key,</div><div class='del'>-                                                mds_xattr_val, 1, &amp;errst);</div><div class='del'>-                if ((check_mds &lt; 0) &amp;&amp; !errst) {</div><div class='del'>-                        local-&gt;mds_xattr = dict_ref (xattr);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Value of %s is not zero on hashed subvol "</div><div class='del'>-                                      "so xattr needs to be heal on non hashed"</div><div class='del'>-                                      " path is %s and vol name is %s "</div><div class='del'>-                                      " gfid is %s" ,</div><div class='del'>-                                      conf-&gt;mds_xattr_key,</div><div class='del'>-                                      local-&gt;loc.path,</div><div class='del'>-                                      prev-&gt;name, gfid_local);</div><div class='del'>-                        local-&gt;need_xattr_heal = 1;</div><div class='del'>-                        local-&gt;mds_subvol  = prev;</div><div class='del'>-                }</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='ctx'> </div><div class='add'>+        if (!dict_get(xattr, conf-&gt;mds_xattr_key)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Internal xattr %s is not present "</div><div class='add'>+                         " on path %s gfid is %s ",</div><div class='add'>+                         conf-&gt;mds_xattr_key, local-&gt;loc.path, gfid_local);</div><div class='add'>+            goto unlock;</div><div class='add'>+        } else {</div><div class='add'>+            /* Save mds subvol on inode ctx */</div><div class='add'>+            ret = dht_inode_ctx_mdsvol_set(local-&gt;inode, this, prev);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+                       "Failed to set hashed subvol for %s vol is %s",</div><div class='add'>+                       local-&gt;loc.path, prev-&gt;name);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        check_mds = dht_dict_get_array(xattr, conf-&gt;mds_xattr_key,</div><div class='add'>+                                       mds_xattr_val, 1, &amp;errst);</div><div class='add'>+        if ((check_mds &lt; 0) &amp;&amp; !errst) {</div><div class='add'>+            local-&gt;mds_xattr = dict_ref(xattr);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Value of %s is not zero on hashed subvol "</div><div class='add'>+                         "so xattr needs to be heal on non hashed"</div><div class='add'>+                         " path is %s and vol name is %s "</div><div class='add'>+                         " gfid is %s",</div><div class='add'>+                         conf-&gt;mds_xattr_key, local-&gt;loc.path, prev-&gt;name,</div><div class='add'>+                         gfid_local);</div><div class='add'>+            local-&gt;need_xattr_heal = 1;</div><div class='add'>+            local-&gt;mds_subvol = prev;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                /* No need to call xattr heal code if volume count is 1</div><div class='del'>-                */</div><div class='del'>-                if (conf-&gt;subvolume_cnt == 1)</div><div class='del'>-                        local-&gt;need_xattr_heal = 0;</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        /* No need to call xattr heal code if volume count is 1</div><div class='add'>+         */</div><div class='add'>+        if (conf-&gt;subvolume_cnt == 1)</div><div class='add'>+            local-&gt;need_xattr_heal = 0;</div><div class='ctx'> </div><div class='del'>-                /* Code to update all extended attributed from hashed subvol</div><div class='del'>-                   to local-&gt;xattr</div><div class='del'>-                */</div><div class='del'>-                if (local-&gt;need_xattr_heal &amp;&amp; (local-&gt;mds_xattr)) {</div><div class='del'>-                        dht_dir_set_heal_xattr (this, local, local-&gt;xattr,</div><div class='del'>-                                                local-&gt;mds_xattr, NULL, NULL);</div><div class='del'>-                        dict_unref (local-&gt;mds_xattr);</div><div class='del'>-                        local-&gt;mds_xattr = NULL;</div><div class='del'>-                }</div><div class='add'>+        /* Code to update all extended attributed from hashed subvol</div><div class='add'>+           to local-&gt;xattr</div><div class='add'>+        */</div><div class='add'>+        if (local-&gt;need_xattr_heal &amp;&amp; (local-&gt;mds_xattr)) {</div><div class='add'>+            dht_dir_set_heal_xattr(this, local, local-&gt;xattr, local-&gt;mds_xattr,</div><div class='add'>+                                   NULL, NULL);</div><div class='add'>+            dict_unref(local-&gt;mds_xattr);</div><div class='add'>+            local-&gt;mds_xattr = NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;need_selfheal) {</div><div class='del'>-                        local-&gt;need_selfheal = 0;</div><div class='del'>-                        dht_lookup_everywhere (frame, this, &amp;local-&gt;loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;need_selfheal) {</div><div class='add'>+            local-&gt;need_selfheal = 0;</div><div class='add'>+            dht_lookup_everywhere(frame, this, &amp;local-&gt;loc);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret == 0) {</div><div class='del'>-                        ret = dht_layout_normalize (this, &amp;local-&gt;loc, layout);</div><div class='add'>+        if (local-&gt;op_ret == 0) {</div><div class='add'>+            ret = dht_layout_normalize(this, &amp;local-&gt;loc, layout);</div><div class='ctx'> </div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "fixing assignment on %s",</div><div class='del'>-                                              local-&gt;loc.path);</div><div class='del'>-                                goto selfheal;</div><div class='del'>-                        }</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "fixing assignment on %s",</div><div class='add'>+                             local-&gt;loc.path);</div><div class='add'>+                goto selfheal;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        dht_layout_set (this, local-&gt;inode, layout);</div><div class='del'>-                        if (!dict_get (local-&gt;xattr, conf-&gt;mds_xattr_key) ||</div><div class='del'>-                            local-&gt;need_xattr_heal)</div><div class='del'>-                                goto selfheal;</div><div class='del'>-                }</div><div class='add'>+            dht_layout_set(this, local-&gt;inode, layout);</div><div class='add'>+            if (!dict_get(local-&gt;xattr, conf-&gt;mds_xattr_key) ||</div><div class='add'>+                local-&gt;need_xattr_heal)</div><div class='add'>+                goto selfheal;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;inode) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;inode, this,</div><div class='del'>-                                                   &amp;local-&gt;stbuf, 1);</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;inode) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;inode, this, &amp;local-&gt;stbuf, 1);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;need_attrheal) {</div><div class='del'>-                        local-&gt;need_attrheal = 0;</div><div class='del'>-                        if (!__is_root_gfid (inode-&gt;gfid)) {</div><div class='del'>-                                local-&gt;stbuf.ia_gid = local-&gt;mds_stbuf.ia_gid;</div><div class='del'>-                                local-&gt;stbuf.ia_uid = local-&gt;mds_stbuf.ia_uid;</div><div class='del'>-                                local-&gt;stbuf.ia_prot = local-&gt;mds_stbuf.ia_prot;</div><div class='del'>-                        }</div><div class='del'>-                        copy = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-                        if (copy) {</div><div class='del'>-                                copy_local = dht_local_init (copy, &amp;local-&gt;loc,</div><div class='del'>-                                                             NULL, 0);</div><div class='del'>-                                if (!copy_local) {</div><div class='del'>-                                        DHT_STACK_DESTROY (copy);</div><div class='del'>-                                        goto skip_attr_heal;</div><div class='del'>-                                }</div><div class='del'>-                                copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='del'>-                                gf_uuid_copy (copy_local-&gt;loc.gfid,</div><div class='del'>-                                              local-&gt;stbuf.ia_gfid);</div><div class='del'>-                                copy_local-&gt;mds_stbuf = local-&gt;mds_stbuf;</div><div class='del'>-                                copy_local-&gt;mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-                                copy-&gt;local = copy_local;</div><div class='del'>-                                FRAME_SU_DO (copy, dht_local_t);</div><div class='del'>-                                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                                    dht_dir_attr_heal,</div><div class='del'>-                                                    dht_dir_attr_heal_done,</div><div class='del'>-                                                    copy, copy);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                                DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='del'>-                                                "Synctask creation failed to heal attr "</div><div class='del'>-                                                "for path %s gfid %s ",</div><div class='del'>-                                                local-&gt;loc.path, local-&gt;gfid);</div><div class='del'>-                                        DHT_STACK_DESTROY (copy);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        if (local-&gt;need_attrheal) {</div><div class='add'>+            local-&gt;need_attrheal = 0;</div><div class='add'>+            if (!__is_root_gfid(inode-&gt;gfid)) {</div><div class='add'>+                local-&gt;stbuf.ia_gid = local-&gt;mds_stbuf.ia_gid;</div><div class='add'>+                local-&gt;stbuf.ia_uid = local-&gt;mds_stbuf.ia_uid;</div><div class='add'>+                local-&gt;stbuf.ia_prot = local-&gt;mds_stbuf.ia_prot;</div><div class='add'>+            }</div><div class='add'>+            copy = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+            if (copy) {</div><div class='add'>+                copy_local = dht_local_init(copy, &amp;local-&gt;loc, NULL, 0);</div><div class='add'>+                if (!copy_local) {</div><div class='add'>+                    DHT_STACK_DESTROY(copy);</div><div class='add'>+                    goto skip_attr_heal;</div><div class='add'>+                }</div><div class='add'>+                copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='add'>+                gf_uuid_copy(copy_local-&gt;loc.gfid, local-&gt;stbuf.ia_gfid);</div><div class='add'>+                copy_local-&gt;mds_stbuf = local-&gt;mds_stbuf;</div><div class='add'>+                copy_local-&gt;mds_subvol = local-&gt;mds_subvol;</div><div class='add'>+                copy-&gt;local = copy_local;</div><div class='add'>+                FRAME_SU_DO(copy, dht_local_t);</div><div class='add'>+                ret = synctask_new(this-&gt;ctx-&gt;env, dht_dir_attr_heal,</div><div class='add'>+                                   dht_dir_attr_heal_done, copy, copy);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='add'>+                           DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='add'>+                           "Synctask creation failed to heal attr "</div><div class='add'>+                           "for path %s gfid %s ",</div><div class='add'>+                           local-&gt;loc.path, local-&gt;gfid);</div><div class='add'>+                    DHT_STACK_DESTROY(copy);</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-skip_attr_heal:</div><div class='del'>-                DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-                /* Delete mds xattr at the time of STACK UNWIND */</div><div class='del'>-                if (local-&gt;xattr)</div><div class='del'>-                        GF_REMOVE_INTERNAL_XATTR (conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='del'>-                DHT_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                                  &amp;local-&gt;postparent);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    skip_attr_heal:</div><div class='add'>+        DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+        /* Delete mds xattr at the time of STACK UNWIND */</div><div class='add'>+        if (local-&gt;xattr)</div><div class='add'>+            GF_REMOVE_INTERNAL_XATTR(conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='add'>+        DHT_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                         &amp;local-&gt;postparent);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> selfheal:</div><div class='del'>-        FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-        ret = dht_selfheal_directory (frame, dht_lookup_selfheal_cbk,</div><div class='del'>-                                      &amp;local-&gt;loc, layout);</div><div class='add'>+    FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+    ret = dht_selfheal_directory(frame, dht_lookup_selfheal_cbk, &amp;local-&gt;loc,</div><div class='add'>+                                 layout);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+is_permission_different(ia_prot_t *prot1, ia_prot_t *prot2)</div><div class='add'>+{</div><div class='add'>+    if ((prot1-&gt;owner.read != prot2-&gt;owner.read) ||</div><div class='add'>+        (prot1-&gt;owner.write != prot2-&gt;owner.write) ||</div><div class='add'>+        (prot1-&gt;owner.exec != prot2-&gt;owner.exec) ||</div><div class='add'>+        (prot1-&gt;group.read != prot2-&gt;group.read) ||</div><div class='add'>+        (prot1-&gt;group.write != prot2-&gt;group.write) ||</div><div class='add'>+        (prot1-&gt;group.exec != prot2-&gt;group.exec) ||</div><div class='add'>+        (prot1-&gt;other.read != prot2-&gt;other.read) ||</div><div class='add'>+        (prot1-&gt;other.write != prot2-&gt;other.write) ||</div><div class='add'>+        (prot1-&gt;other.exec != prot2-&gt;other.exec) ||</div><div class='add'>+        (prot1-&gt;suid != prot2-&gt;suid) || (prot1-&gt;sgid != prot2-&gt;sgid) ||</div><div class='add'>+        (prot1-&gt;sticky != prot2-&gt;sticky)) {</div><div class='add'>+        return 1;</div><div class='add'>+    } else {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_revalidate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                   dict_t *xattr, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int is_dir = 0;</div><div class='add'>+    int is_linkfile = 0;</div><div class='add'>+    int follow_link = 0;</div><div class='add'>+    call_frame_t *copy = NULL;</div><div class='add'>+    dht_local_t *copy_local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    uint32_t vol_commit_hash = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int32_t check_mds = 0;</div><div class='add'>+    int errst = 0;</div><div class='add'>+    int32_t mds_xattr_val[1] = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, err);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-is_permission_different (ia_prot_t *prot1, ia_prot_t *prot2)</div><div class='del'>-{</div><div class='del'>-        if ((prot1-&gt;owner.read != prot2-&gt;owner.read) ||</div><div class='del'>-            (prot1-&gt;owner.write != prot2-&gt;owner.write) ||</div><div class='del'>-            (prot1-&gt;owner.exec != prot2-&gt;owner.exec) ||</div><div class='del'>-            (prot1-&gt;group.read != prot2-&gt;group.read) ||</div><div class='del'>-            (prot1-&gt;group.write != prot2-&gt;group.write) ||</div><div class='del'>-            (prot1-&gt;group.exec != prot2-&gt;group.exec) ||</div><div class='del'>-            (prot1-&gt;other.read != prot2-&gt;other.read) ||</div><div class='del'>-            (prot1-&gt;other.write != prot2-&gt;other.write) ||</div><div class='del'>-            (prot1-&gt;other.exec != prot2-&gt;other.exec) ||</div><div class='del'>-            (prot1-&gt;suid != prot2-&gt;suid) ||</div><div class='del'>-            (prot1-&gt;sgid != prot2-&gt;sgid) ||</div><div class='del'>-            (prot1-&gt;sticky != prot2-&gt;sticky)) {</div><div class='del'>-                return 1;</div><div class='del'>-        } else {</div><div class='del'>-                return 0;</div><div class='add'>+    if (!conf-&gt;vch_forced) {</div><div class='add'>+        ret = dict_get_uint32(xattr, conf-&gt;commithash_xattr_name,</div><div class='add'>+                              &amp;vol_commit_hash);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            conf-&gt;vol_commit_hash = vol_commit_hash;</div><div class='ctx'>         }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_revalidate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno,</div><div class='del'>-                    inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                    struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        dht_layout_t *layout        = NULL;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        int           ret  = -1;</div><div class='del'>-        int           is_dir = 0;</div><div class='del'>-        int           is_linkfile = 0;</div><div class='del'>-        int           follow_link = 0;</div><div class='del'>-        call_frame_t *copy          = NULL;</div><div class='del'>-        dht_local_t  *copy_local    = NULL;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        uint32_t      vol_commit_hash = 0;</div><div class='del'>-        xlator_t      *subvol = NULL;</div><div class='del'>-        int32_t       check_mds       = 0;</div><div class='del'>-        int           errst           = 0;</div><div class='del'>-        int32_t       mds_xattr_val[1] = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, err);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;vch_forced) {</div><div class='del'>-                ret = dict_get_uint32 (xattr, conf-&gt;commithash_xattr_name,</div><div class='del'>-                                       &amp;vol_commit_hash);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        conf-&gt;vol_commit_hash = vol_commit_hash;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+            memcpy(local-&gt;gfid, local-&gt;loc.gfid, 16);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                     "revalidate lookup of %s "</div><div class='add'>+                     "returned with op_ret %d",</div><div class='add'>+                     local-&gt;loc.path, op_ret);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                        memcpy (local-&gt;gfid, local-&gt;loc.gfid, 16);</div><div class='del'>-                }</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+            if ((op_errno != ENOTCONN) &amp;&amp; (op_errno != ENOENT) &amp;&amp;</div><div class='add'>+                (op_errno != ESTALE)) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='add'>+                       DHT_MSG_REVALIDATE_CBK_INFO,</div><div class='add'>+                       "Revalidate: subvolume %s for %s "</div><div class='add'>+                       "(gfid = %s) returned -1",</div><div class='add'>+                       prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='add'>+            }</div><div class='add'>+            if (op_errno == ESTALE) {</div><div class='add'>+                /* propagate the ESTALE to parent.</div><div class='add'>+                 * setting local-&gt;return_estale would send</div><div class='add'>+                 * ESTALE to parent. */</div><div class='add'>+                local-&gt;return_estale = 1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* if it is ENOENT, we may have to do a</div><div class='add'>+             * 'lookup_everywhere()' to make sure</div><div class='add'>+             * the file is not migrated */</div><div class='add'>+            if (op_errno == ENOENT) {</div><div class='add'>+                if (IA_ISREG(local-&gt;loc.inode-&gt;ia_type)) {</div><div class='add'>+                    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                                 "found ENOENT for %s. "</div><div class='add'>+                                 "Setting "</div><div class='add'>+                                 "need_lookup_everywhere"</div><div class='add'>+                                 " flag to 1",</div><div class='add'>+                                 local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "revalidate lookup of %s "</div><div class='del'>-                              "returned with op_ret %d",</div><div class='del'>-                              local-&gt;loc.path, op_ret);</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                        if ((op_errno != ENOTCONN)</div><div class='del'>-                            &amp;&amp; (op_errno != ENOENT)</div><div class='del'>-                            &amp;&amp; (op_errno != ESTALE)) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                                        DHT_MSG_REVALIDATE_CBK_INFO,</div><div class='del'>-                                        "Revalidate: subvolume %s for %s "</div><div class='del'>-                                        "(gfid = %s) returned -1",</div><div class='del'>-                                        prev-&gt;name, local-&gt;loc.path,</div><div class='del'>-                                        gfid);</div><div class='del'>-                        }</div><div class='del'>-                        if (op_errno == ESTALE) {</div><div class='del'>-                                /* propagate the ESTALE to parent.</div><div class='del'>-                                 * setting local-&gt;return_estale would send</div><div class='del'>-                                 * ESTALE to parent. */</div><div class='del'>-                                local-&gt;return_estale = 1;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* if it is ENOENT, we may have to do a</div><div class='del'>-                         * 'lookup_everywhere()' to make sure</div><div class='del'>-                         * the file is not migrated */</div><div class='del'>-                        if (op_errno == ENOENT) {</div><div class='del'>-                                if (IA_ISREG (local-&gt;loc.inode-&gt;ia_type)) {</div><div class='del'>-</div><div class='del'>-                                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                                      "found ENOENT for %s. "</div><div class='del'>-                                                      "Setting "</div><div class='del'>-                                                      "need_lookup_everywhere"</div><div class='del'>-                                                      " flag to 1",</div><div class='del'>-                                                      local-&gt;loc.path);</div><div class='del'>-</div><div class='del'>-                                        local-&gt;need_lookup_everywhere = 1;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        goto unlock;</div><div class='add'>+                    local-&gt;need_lookup_everywhere = 1;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if ((!IA_ISINVAL(local-&gt;inode-&gt;ia_type)) &amp;&amp;</div><div class='add'>+            stbuf-&gt;ia_type != local-&gt;inode-&gt;ia_type) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_FILE_TYPE_MISMATCH,</div><div class='add'>+                   "mismatching filetypes 0%o v/s 0%o for %s,"</div><div class='add'>+                   " gfid = %s",</div><div class='add'>+                   (stbuf-&gt;ia_type), (local-&gt;inode-&gt;ia_type), local-&gt;loc.path,</div><div class='add'>+                   gfid);</div><div class='ctx'> </div><div class='del'>-                if ((!IA_ISINVAL(local-&gt;inode-&gt;ia_type)) &amp;&amp;</div><div class='del'>-                    stbuf-&gt;ia_type != local-&gt;inode-&gt;ia_type) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_FILE_TYPE_MISMATCH,</div><div class='del'>-                                "mismatching filetypes 0%o v/s 0%o for %s,"</div><div class='del'>-                                " gfid = %s",</div><div class='del'>-                                (stbuf-&gt;ia_type), (local-&gt;inode-&gt;ia_type),</div><div class='del'>-                                local-&gt;loc.path, gfid);</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = EINVAL;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        layout = local-&gt;layout;</div><div class='ctx'> </div><div class='del'>-                        goto unlock;</div><div class='add'>+        is_dir = check_is_dir(inode, stbuf, xattr);</div><div class='add'>+        is_linkfile = check_is_linkfile(inode, stbuf, xattr,</div><div class='add'>+                                        conf-&gt;link_xattr_name);</div><div class='add'>+        if (is_linkfile) {</div><div class='add'>+            follow_link = 1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        if (is_dir) {</div><div class='add'>+            ret = dht_dir_has_layout(xattr, conf-&gt;xattr_name);</div><div class='add'>+            if (ret &gt;= 0) {</div><div class='add'>+                if (is_greater_time(local-&gt;stbuf.ia_ctime,</div><div class='add'>+                                    local-&gt;stbuf.ia_ctime_nsec, stbuf-&gt;ia_ctime,</div><div class='add'>+                                    stbuf-&gt;ia_ctime_nsec)) {</div><div class='add'>+                    /* Choose source */</div><div class='add'>+                    local-&gt;prebuf.ia_gid = stbuf-&gt;ia_gid;</div><div class='add'>+                    local-&gt;prebuf.ia_uid = stbuf-&gt;ia_uid;</div><div class='add'>+</div><div class='add'>+                    if (__is_root_gfid(stbuf-&gt;ia_gfid))</div><div class='add'>+                        local-&gt;prebuf.ia_prot = stbuf-&gt;ia_prot;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (local-&gt;stbuf.ia_type != IA_INVAL) {</div><div class='add'>+                if ((local-&gt;stbuf.ia_gid != stbuf-&gt;ia_gid) ||</div><div class='add'>+                    (local-&gt;stbuf.ia_uid != stbuf-&gt;ia_uid) ||</div><div class='add'>+                    is_permission_different(&amp;local-&gt;stbuf.ia_prot,</div><div class='add'>+                                            &amp;stbuf-&gt;ia_prot)) {</div><div class='add'>+                    local-&gt;need_selfheal = 1;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                layout = local-&gt;layout;</div><div class='add'>+            if (!dict_get(xattr, conf-&gt;mds_xattr_key)) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "internal xattr %s is not present"</div><div class='add'>+                             " on path %s gfid is %s ",</div><div class='add'>+                             conf-&gt;mds_xattr_key, local-&gt;loc.path, gfid);</div><div class='add'>+            } else {</div><div class='add'>+                check_mds = dht_dict_get_array(xattr, conf-&gt;mds_xattr_key,</div><div class='add'>+                                               mds_xattr_val, 1, &amp;errst);</div><div class='add'>+                local-&gt;mds_subvol = prev;</div><div class='add'>+                local-&gt;mds_stbuf.ia_gid = stbuf-&gt;ia_gid;</div><div class='add'>+                local-&gt;mds_stbuf.ia_uid = stbuf-&gt;ia_uid;</div><div class='add'>+                local-&gt;mds_stbuf.ia_prot = stbuf-&gt;ia_prot;</div><div class='ctx'> </div><div class='del'>-                is_dir = check_is_dir (inode, stbuf, xattr);</div><div class='del'>-                is_linkfile = check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                                 conf-&gt;link_xattr_name);</div><div class='del'>-                if (is_linkfile) {</div><div class='del'>-                        follow_link = 1;</div><div class='del'>-                        goto unlock;</div><div class='add'>+                /* save mds subvol on inode ctx */</div><div class='add'>+                ret = dht_inode_ctx_mdsvol_set(local-&gt;inode, this, prev);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+                           "Failed to set MDS subvol for %s vol is %s",</div><div class='add'>+                           local-&gt;loc.path, prev-&gt;name);</div><div class='ctx'>                 }</div><div class='del'>-                if (is_dir) {</div><div class='del'>-                        ret = dht_dir_has_layout (xattr, conf-&gt;xattr_name);</div><div class='del'>-                        if (ret &gt;= 0) {</div><div class='del'>-                                if (is_greater_time(local-&gt;stbuf.ia_ctime,</div><div class='del'>-                                                    local-&gt;stbuf.ia_ctime_nsec,</div><div class='del'>-                                                    stbuf-&gt;ia_ctime,</div><div class='del'>-                                                    stbuf-&gt;ia_ctime_nsec)) {</div><div class='del'>-                                        /* Choose source */</div><div class='del'>-                                        local-&gt;prebuf.ia_gid = stbuf-&gt;ia_gid;</div><div class='del'>-                                        local-&gt;prebuf.ia_uid = stbuf-&gt;ia_uid;</div><div class='del'>-</div><div class='del'>-                                        if (__is_root_gfid (stbuf-&gt;ia_gfid))</div><div class='del'>-                                                local-&gt;prebuf.ia_prot = stbuf-&gt;ia_prot;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;stbuf.ia_type != IA_INVAL)</div><div class='del'>-                        {</div><div class='del'>-                                if ((local-&gt;stbuf.ia_gid != stbuf-&gt;ia_gid) ||</div><div class='del'>-                                    (local-&gt;stbuf.ia_uid != stbuf-&gt;ia_uid) ||</div><div class='del'>-                                     is_permission_different (&amp;local-&gt;stbuf.ia_prot,</div><div class='del'>-                                                              &amp;stbuf-&gt;ia_prot)) {</div><div class='del'>-                                        local-&gt;need_selfheal = 1;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (!dict_get (xattr, conf-&gt;mds_xattr_key)) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "internal xattr %s is not present"</div><div class='del'>-                                              " on path %s gfid is %s " ,</div><div class='del'>-                                              conf-&gt;mds_xattr_key,</div><div class='del'>-                                              local-&gt;loc.path, gfid);</div><div class='del'>-                        } else {</div><div class='del'>-                                check_mds = dht_dict_get_array (xattr, conf-&gt;mds_xattr_key,</div><div class='del'>-                                                                mds_xattr_val, 1, &amp;errst);</div><div class='del'>-                                local-&gt;mds_subvol  = prev;</div><div class='del'>-                                local-&gt;mds_stbuf.ia_gid = stbuf-&gt;ia_gid;</div><div class='del'>-                                local-&gt;mds_stbuf.ia_uid = stbuf-&gt;ia_uid;</div><div class='del'>-                                local-&gt;mds_stbuf.ia_prot = stbuf-&gt;ia_prot;</div><div class='del'>-</div><div class='del'>-                                /* save mds subvol on inode ctx */</div><div class='del'>-                                ret = dht_inode_ctx_mdsvol_set (local-&gt;inode, this,</div><div class='del'>-                                                                prev);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                                                "Failed to set MDS subvol for %s vol is %s",</div><div class='del'>-                                                local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-                                }</div><div class='del'>-                                if ((check_mds &lt; 0) &amp;&amp; !errst) {</div><div class='del'>-                                        local-&gt;mds_xattr = dict_ref (xattr);</div><div class='del'>-                                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                                      "Value of %s is not zero on "</div><div class='del'>-                                                      "hashed subvol so xattr needs to"</div><div class='del'>-                                                      " be healed on non hashed"</div><div class='del'>-                                                      " path is %s and vol name is %s "</div><div class='del'>-                                                      " gfid is %s" ,</div><div class='del'>-                                                      conf-&gt;mds_xattr_key,</div><div class='del'>-                                                      local-&gt;loc.path,</div><div class='del'>-                                                      prev-&gt;name, gfid);</div><div class='del'>-                                        local-&gt;need_xattr_heal = 1;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        ret = dht_layout_dir_mismatch (this, layout,</div><div class='del'>-                                                       prev, &amp;local-&gt;loc,</div><div class='del'>-                                                       xattr);</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_LAYOUT_MISMATCH,</div><div class='del'>-                                        "Mismatching layouts for %s, gfid = %s",</div><div class='del'>-                                        local-&gt;loc.path, gfid);</div><div class='del'>-</div><div class='del'>-                                local-&gt;layout_mismatch = 1;</div><div class='del'>-</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='add'>+                if ((check_mds &lt; 0) &amp;&amp; !errst) {</div><div class='add'>+                    local-&gt;mds_xattr = dict_ref(xattr);</div><div class='add'>+                    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                                 "Value of %s is not zero on "</div><div class='add'>+                                 "hashed subvol so xattr needs to"</div><div class='add'>+                                 " be healed on non hashed"</div><div class='add'>+                                 " path is %s and vol name is %s "</div><div class='add'>+                                 " gfid is %s",</div><div class='add'>+                                 conf-&gt;mds_xattr_key, local-&gt;loc.path,</div><div class='add'>+                                 prev-&gt;name, gfid);</div><div class='add'>+                    local-&gt;need_xattr_heal = 1;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            ret = dht_layout_dir_mismatch(this, layout, prev, &amp;local-&gt;loc,</div><div class='add'>+                                          xattr);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LAYOUT_MISMATCH,</div><div class='add'>+                       "Mismatching layouts for %s, gfid = %s", local-&gt;loc.path,</div><div class='add'>+                       gfid);</div><div class='ctx'> </div><div class='add'>+                local-&gt;layout_mismatch = 1;</div><div class='ctx'> </div><div class='del'>-                /* Update stbuf from the servers where layout is present. This</div><div class='del'>-                 * is an indication that the server is not a newly added brick.</div><div class='del'>-                 * Merging stbuf from newly added brick may result in the added</div><div class='del'>-                 * brick being the source of heal for uid/gid */</div><div class='del'>-                if (!is_dir || (is_dir &amp;&amp;</div><div class='del'>-                    dht_dir_has_layout (xattr, conf-&gt;xattr_name) &gt;= 0)</div><div class='del'>-                    || conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                        dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='del'>-                } else {</div><div class='del'>-                        /* copy the gfid anyway */</div><div class='del'>-                        gf_uuid_copy (local-&gt;stbuf.ia_gfid, stbuf-&gt;ia_gfid);</div><div class='del'>-                }</div><div class='add'>+        /* Update stbuf from the servers where layout is present. This</div><div class='add'>+         * is an indication that the server is not a newly added brick.</div><div class='add'>+         * Merging stbuf from newly added brick may result in the added</div><div class='add'>+         * brick being the source of heal for uid/gid */</div><div class='add'>+        if (!is_dir ||</div><div class='add'>+            (is_dir &amp;&amp; dht_dir_has_layout(xattr, conf-&gt;xattr_name) &gt;= 0) ||</div><div class='add'>+            conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+            dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+            dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+        } else {</div><div class='add'>+            /* copy the gfid anyway */</div><div class='add'>+            gf_uuid_copy(local-&gt;stbuf.ia_gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;xattr) {</div><div class='del'>-                        local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                } else if (is_dir) {</div><div class='del'>-                        dht_aggregate_xattr (local-&gt;xattr, xattr);</div><div class='del'>-                }</div><div class='add'>+        if (!local-&gt;xattr) {</div><div class='add'>+            local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+        } else if (is_dir) {</div><div class='add'>+            dht_aggregate_xattr(local-&gt;xattr, xattr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (follow_link) {</div><div class='del'>-                gf_uuid_copy (local-&gt;gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+    if (follow_link) {</div><div class='add'>+        gf_uuid_copy(local-&gt;gfid, stbuf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-                subvol = dht_linkfile_subvol (this, inode, stbuf, xattr);</div><div class='del'>-                if (!subvol) {</div><div class='del'>-                        op_errno = ESTALE;</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                } else {</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_lookup_linkfile_cbk,</div><div class='del'>-                                           subvol, subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        subvol = dht_linkfile_subvol(this, inode, stbuf, xattr);</div><div class='add'>+        if (!subvol) {</div><div class='add'>+            op_errno = ESTALE;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+        } else {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_lookup_linkfile_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if (!IA_ISDIR (local-&gt;stbuf.ia_type)</div><div class='del'>-                    &amp;&amp; (local-&gt;hashed_subvol != local-&gt;cached_subvol)</div><div class='del'>-                    &amp;&amp; (local-&gt;stbuf.ia_nlink == 1)</div><div class='del'>-                    &amp;&amp; (conf &amp;&amp; conf-&gt;unhashed_sticky_bit)) {</div><div class='del'>-                        local-&gt;stbuf.ia_prot.sticky = 1;</div><div class='del'>-                }</div><div class='del'>-                /* No need to call heal code if volume count is 1</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (!IA_ISDIR(local-&gt;stbuf.ia_type) &amp;&amp;</div><div class='add'>+            (local-&gt;hashed_subvol != local-&gt;cached_subvol) &amp;&amp;</div><div class='add'>+            (local-&gt;stbuf.ia_nlink == 1) &amp;&amp;</div><div class='add'>+            (conf &amp;&amp; conf-&gt;unhashed_sticky_bit)) {</div><div class='add'>+            local-&gt;stbuf.ia_prot.sticky = 1;</div><div class='add'>+        }</div><div class='add'>+        /* No need to call heal code if volume count is 1</div><div class='add'>+         */</div><div class='add'>+        if (conf-&gt;subvolume_cnt == 1)</div><div class='add'>+            local-&gt;need_xattr_heal = 0;</div><div class='add'>+</div><div class='add'>+        if (IA_ISDIR(local-&gt;stbuf.ia_type)) {</div><div class='add'>+            /* Code to update all extended attributed from hashed</div><div class='add'>+               subvol to local-&gt;xattr and call heal code to heal</div><div class='add'>+               custom xattr from hashed subvol to non-hashed subvol</div><div class='add'>+            */</div><div class='add'>+            if (local-&gt;need_xattr_heal &amp;&amp; (local-&gt;mds_xattr)) {</div><div class='add'>+                dht_dir_set_heal_xattr(this, local, local-&gt;xattr,</div><div class='add'>+                                       local-&gt;mds_xattr, NULL, NULL);</div><div class='add'>+                dict_unref(local-&gt;mds_xattr);</div><div class='add'>+                local-&gt;mds_xattr = NULL;</div><div class='add'>+                local-&gt;need_xattr_heal = 0;</div><div class='add'>+                ret = dht_dir_xattr_heal(this, local);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                           DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                           "xattr heal failed for directory %s "</div><div class='add'>+                           " gfid %s ",</div><div class='add'>+                           local-&gt;loc.path, gfid);</div><div class='add'>+            } else {</div><div class='add'>+                /* Call function to save hashed subvol on inode</div><div class='add'>+                   ctx if internal mds xattr is not present and</div><div class='add'>+                   all subvols are up</div><div class='ctx'>                 */</div><div class='del'>-                if (conf-&gt;subvolume_cnt == 1)</div><div class='del'>-                        local-&gt;need_xattr_heal = 0;</div><div class='del'>-</div><div class='del'>-                if (IA_ISDIR (local-&gt;stbuf.ia_type)) {</div><div class='del'>-                        /* Code to update all extended attributed from hashed</div><div class='del'>-                           subvol to local-&gt;xattr and call heal code to heal</div><div class='del'>-                           custom xattr from hashed subvol to non-hashed subvol</div><div class='del'>-                        */</div><div class='del'>-                        if (local-&gt;need_xattr_heal &amp;&amp; (local-&gt;mds_xattr)) {</div><div class='del'>-                                dht_dir_set_heal_xattr (this, local,</div><div class='del'>-                                                        local-&gt;xattr,</div><div class='del'>-                                                        local-&gt;mds_xattr, NULL,</div><div class='del'>-                                                        NULL);</div><div class='del'>-                                dict_unref (local-&gt;mds_xattr);</div><div class='del'>-                                local-&gt;mds_xattr = NULL;</div><div class='del'>-                                local-&gt;need_xattr_heal = 0;</div><div class='del'>-                                ret =  dht_dir_xattr_heal (this, local);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                ret, DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                                "xattr heal failed for directory %s "</div><div class='del'>-                                                " gfid %s ", local-&gt;loc.path,</div><div class='del'>-                                                gfid);</div><div class='del'>-                        } else {</div><div class='del'>-                                /* Call function to save hashed subvol on inode</div><div class='del'>-                                   ctx if internal mds xattr is not present and</div><div class='del'>-                                   all subvols are up</div><div class='del'>-                                */</div><div class='del'>-                                if (inode &amp;&amp; !__is_root_gfid (inode-&gt;gfid) &amp;&amp;</div><div class='del'>-                                    (!local-&gt;op_ret))</div><div class='del'>-                                        (void) dht_common_mark_mdsxattr (frame, NULL, 1);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;need_selfheal) {</div><div class='del'>-                        local-&gt;need_selfheal = 0;</div><div class='del'>-                        if (!__is_root_gfid (inode-&gt;gfid)) {</div><div class='del'>-                                gf_uuid_copy (local-&gt;gfid, local-&gt;mds_stbuf.ia_gfid);</div><div class='del'>-                                local-&gt;stbuf.ia_gid = local-&gt;mds_stbuf.ia_gid;</div><div class='del'>-                                local-&gt;stbuf.ia_uid = local-&gt;mds_stbuf.ia_uid;</div><div class='del'>-                                local-&gt;stbuf.ia_prot = local-&gt;mds_stbuf.ia_prot;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_uuid_copy (local-&gt;gfid, local-&gt;stbuf.ia_gfid);</div><div class='del'>-                                local-&gt;stbuf.ia_gid = local-&gt;prebuf.ia_gid;</div><div class='del'>-                                local-&gt;stbuf.ia_uid = local-&gt;prebuf.ia_uid;</div><div class='del'>-                                local-&gt;stbuf.ia_prot = local-&gt;prebuf.ia_prot;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        copy = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-                        if (copy) {</div><div class='del'>-                                copy_local = dht_local_init (copy, &amp;local-&gt;loc,</div><div class='del'>-                                                             NULL, 0);</div><div class='del'>-                                if (!copy_local) {</div><div class='del'>-                                        DHT_STACK_DESTROY (copy);</div><div class='del'>-                                        goto cont;</div><div class='del'>-                                }</div><div class='del'>-                                copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='del'>-                                copy_local-&gt;mds_stbuf = local-&gt;mds_stbuf;</div><div class='del'>-                                copy_local-&gt;mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-                                copy-&gt;local = copy_local;</div><div class='del'>-                                FRAME_SU_DO (copy, dht_local_t);</div><div class='del'>-                                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                                    dht_dir_attr_heal,</div><div class='del'>-                                                    dht_dir_attr_heal_done,</div><div class='del'>-                                                    copy, copy);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                                DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='del'>-                                                "Synctask creation failed to heal attr "</div><div class='del'>-                                                "for path %s gfid %s ",</div><div class='del'>-                                                local-&gt;loc.path, local-&gt;gfid);</div><div class='del'>-                                        DHT_STACK_DESTROY (copy);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-cont:</div><div class='del'>-                if (local-&gt;layout_mismatch) {</div><div class='del'>-                        /* Found layout mismatch in the directory, need to</div><div class='del'>-                           fix this in the inode context */</div><div class='del'>-                        dht_layout_unref (this, local-&gt;layout);</div><div class='del'>-                        local-&gt;layout = NULL;</div><div class='del'>-                        dht_lookup_directory (frame, this, &amp;local-&gt;loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+                if (inode &amp;&amp; !__is_root_gfid(inode-&gt;gfid) &amp;&amp; (!local-&gt;op_ret))</div><div class='add'>+                    (void)dht_common_mark_mdsxattr(frame, NULL, 1);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (local-&gt;need_selfheal) {</div><div class='add'>+            local-&gt;need_selfheal = 0;</div><div class='add'>+            if (!__is_root_gfid(inode-&gt;gfid)) {</div><div class='add'>+                gf_uuid_copy(local-&gt;gfid, local-&gt;mds_stbuf.ia_gfid);</div><div class='add'>+                local-&gt;stbuf.ia_gid = local-&gt;mds_stbuf.ia_gid;</div><div class='add'>+                local-&gt;stbuf.ia_uid = local-&gt;mds_stbuf.ia_uid;</div><div class='add'>+                local-&gt;stbuf.ia_prot = local-&gt;mds_stbuf.ia_prot;</div><div class='add'>+            } else {</div><div class='add'>+                gf_uuid_copy(local-&gt;gfid, local-&gt;stbuf.ia_gfid);</div><div class='add'>+                local-&gt;stbuf.ia_gid = local-&gt;prebuf.ia_gid;</div><div class='add'>+                local-&gt;stbuf.ia_uid = local-&gt;prebuf.ia_uid;</div><div class='add'>+                local-&gt;stbuf.ia_prot = local-&gt;prebuf.ia_prot;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;need_lookup_everywhere) {</div><div class='del'>-                        /* As the current layout gave ENOENT error, we would</div><div class='del'>-                           need a new layout */</div><div class='del'>-                        dht_layout_unref (this, local-&gt;layout);</div><div class='del'>-                        local-&gt;layout = NULL;</div><div class='del'>-</div><div class='del'>-                        /* We know that current cached subvol is no more</div><div class='del'>-                           valid, get the new one */</div><div class='del'>-                        local-&gt;cached_subvol = NULL;</div><div class='del'>-                        dht_lookup_everywhere (frame, this, &amp;local-&gt;loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;return_estale) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ESTALE;</div><div class='add'>+            copy = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+            if (copy) {</div><div class='add'>+                copy_local = dht_local_init(copy, &amp;local-&gt;loc, NULL, 0);</div><div class='add'>+                if (!copy_local) {</div><div class='add'>+                    DHT_STACK_DESTROY(copy);</div><div class='add'>+                    goto cont;</div><div class='add'>+                }</div><div class='add'>+                copy_local-&gt;stbuf = local-&gt;stbuf;</div><div class='add'>+                copy_local-&gt;mds_stbuf = local-&gt;mds_stbuf;</div><div class='add'>+                copy_local-&gt;mds_subvol = local-&gt;mds_subvol;</div><div class='add'>+                copy-&gt;local = copy_local;</div><div class='add'>+                FRAME_SU_DO(copy, dht_local_t);</div><div class='add'>+                ret = synctask_new(this-&gt;ctx-&gt;env, dht_dir_attr_heal,</div><div class='add'>+                                   dht_dir_attr_heal_done, copy, copy);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='add'>+                           DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='add'>+                           "Synctask creation failed to heal attr "</div><div class='add'>+                           "for path %s gfid %s ",</div><div class='add'>+                           local-&gt;loc.path, local-&gt;gfid);</div><div class='add'>+                    DHT_STACK_DESTROY(copy);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    cont:</div><div class='add'>+        if (local-&gt;layout_mismatch) {</div><div class='add'>+            /* Found layout mismatch in the directory, need to</div><div class='add'>+               fix this in the inode context */</div><div class='add'>+            dht_layout_unref(this, local-&gt;layout);</div><div class='add'>+            local-&gt;layout = NULL;</div><div class='add'>+            dht_lookup_directory(frame, this, &amp;local-&gt;loc);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;need_lookup_everywhere) {</div><div class='add'>+            /* As the current layout gave ENOENT error, we would</div><div class='add'>+               need a new layout */</div><div class='add'>+            dht_layout_unref(this, local-&gt;layout);</div><div class='add'>+            local-&gt;layout = NULL;</div><div class='ctx'> </div><div class='del'>-                DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-</div><div class='del'>-                /* local-&gt;stbuf is updated only from subvols which have a layout</div><div class='del'>-                 * The reason is to avoid choosing attr heal source from newly</div><div class='del'>-                 * added bricks. In case e.g we have only one subvol and for</div><div class='del'>-                 * some reason layout is not present on it, then local-&gt;stbuf</div><div class='del'>-                 * will be EINVAL. This is an indication that the subvols</div><div class='del'>-                 * active in the cluster do not have layouts on disk.</div><div class='del'>-                 * Unwind with ESTALE to trigger a fresh lookup */</div><div class='del'>-                if (is_dir &amp;&amp; local-&gt;stbuf.ia_type == IA_INVAL) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ESTALE;</div><div class='del'>-                }</div><div class='del'>-                /* Delete mds xattr at the time of STACK UNWIND */</div><div class='del'>-                if (local-&gt;xattr)</div><div class='del'>-                        GF_REMOVE_INTERNAL_XATTR (conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='add'>+            /* We know that current cached subvol is no more</div><div class='add'>+               valid, get the new one */</div><div class='add'>+            local-&gt;cached_subvol = NULL;</div><div class='add'>+            dht_lookup_everywhere(frame, this, &amp;local-&gt;loc);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        if (local-&gt;return_estale) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ESTALE;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                DHT_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                                  &amp;local-&gt;postparent);</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+</div><div class='add'>+        /* local-&gt;stbuf is updated only from subvols which have a layout</div><div class='add'>+         * The reason is to avoid choosing attr heal source from newly</div><div class='add'>+         * added bricks. In case e.g we have only one subvol and for</div><div class='add'>+         * some reason layout is not present on it, then local-&gt;stbuf</div><div class='add'>+         * will be EINVAL. This is an indication that the subvols</div><div class='add'>+         * active in the cluster do not have layouts on disk.</div><div class='add'>+         * Unwind with ESTALE to trigger a fresh lookup */</div><div class='add'>+        if (is_dir &amp;&amp; local-&gt;stbuf.ia_type == IA_INVAL) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ESTALE;</div><div class='add'>+        }</div><div class='add'>+        /* Delete mds xattr at the time of STACK UNWIND */</div><div class='add'>+        if (local-&gt;xattr)</div><div class='add'>+            GF_REMOVE_INTERNAL_XATTR(conf-&gt;mds_xattr_key, local-&gt;xattr);</div><div class='add'>+</div><div class='add'>+        DHT_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                         &amp;local-&gt;postparent);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_lookup_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                xlator_t *this,</div><div class='del'>-                                int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                                struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                                dict_t *xdata)</div><div class='add'>+dht_lookup_linkfile_create_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                               inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                               struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *cached_subvol = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;locked)</div><div class='del'>-                dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_preset (this, local-&gt;cached_subvol, local-&gt;loc.inode);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, EINVAL,</div><div class='del'>-                              "Failed to set layout for subvolume %s, "</div><div class='del'>-                              "(gfid = %s)",</div><div class='del'>-                              cached_subvol ? cached_subvol-&gt;name : "&lt;nil&gt;",</div><div class='del'>-                              gfid);</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;locked)</div><div class='add'>+        dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        if ((local-&gt;stbuf.ia_nlink == 1)</div><div class='del'>-            &amp;&amp; (conf &amp;&amp; conf-&gt;unhashed_sticky_bit)) {</div><div class='del'>-                local-&gt;stbuf.ia_prot.sticky = 1;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_layout_preset(this, local-&gt;cached_subvol, local-&gt;loc.inode);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, EINVAL,</div><div class='add'>+                     "Failed to set layout for subvolume %s, "</div><div class='add'>+                     "(gfid = %s)",</div><div class='add'>+                     cached_subvol ? cached_subvol-&gt;name : "&lt;nil&gt;", gfid);</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    if ((local-&gt;stbuf.ia_nlink == 1) &amp;&amp; (conf &amp;&amp; conf-&gt;unhashed_sticky_bit)) {</div><div class='add'>+        local-&gt;stbuf.ia_prot.sticky = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "creation of linkto on hashed subvol:%s, "</div><div class='del'>-                      "returned with op_ret %d and op_errno %d: %s",</div><div class='del'>-                      local-&gt;hashed_subvol-&gt;name,</div><div class='del'>-                      op_ret, op_errno, uuid_utoa (local-&gt;loc.gfid));</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "creation of linkto on hashed subvol:%s, "</div><div class='add'>+                 "returned with op_ret %d and op_errno %d: %s",</div><div class='add'>+                 local-&gt;hashed_subvol-&gt;name, op_ret, op_errno,</div><div class='add'>+                 uuid_utoa(local-&gt;loc.gfid));</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linked == _gf_true)</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='add'>+    if (local-&gt;linked == _gf_true)</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='ctx'> </div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                          &amp;local-&gt;postparent);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                     &amp;local-&gt;postparent);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lookup_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno,</div><div class='del'>-                       struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+dht_lookup_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             this_call_cnt = 0;</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        const char      *path =  NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    const char *path = NULL;</div><div class='ctx'> </div><div class='del'>-        local =  (dht_local_t*)frame-&gt;local;</div><div class='del'>-        path = local-&gt;loc.path;</div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='add'>+    local = (dht_local_t *)frame-&gt;local;</div><div class='add'>+    path = local-&gt;loc.path;</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                DHT_MSG_UNLINK_LOOKUP_INFO, "lookup_unlink returned with "</div><div class='del'>-                "op_ret -&gt; %d and op-errno -&gt; %d for %s", op_ret, op_errno,</div><div class='del'>-                ((path == NULL)? "null" : path ));</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_UNLINK_LOOKUP_INFO,</div><div class='add'>+           "lookup_unlink returned with "</div><div class='add'>+           "op_ret -&gt; %d and op-errno -&gt; %d for %s",</div><div class='add'>+           op_ret, op_errno, ((path == NULL) ? "null" : path));</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_lookup_everywhere_done (frame, this);</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_lookup_everywhere_done(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lookup_unlink_of_false_linkto_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                       xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                       struct iatt *preparent,</div><div class='del'>-                                       struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_lookup_unlink_of_false_linkto_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                      xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                      struct iatt *preparent,</div><div class='add'>+                                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             this_call_cnt = 0;</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        const char      *path =  NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    const char *path = NULL;</div><div class='ctx'> </div><div class='del'>-        local =  (dht_local_t*)frame-&gt;local;</div><div class='del'>-        path = local-&gt;loc.path;</div><div class='del'>-</div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='add'>+    local = (dht_local_t *)frame-&gt;local;</div><div class='add'>+    path = local-&gt;loc.path;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                DHT_MSG_UNLINK_LOOKUP_INFO, "lookup_unlink returned with "</div><div class='del'>-                "op_ret -&gt; %d and op-errno -&gt; %d for %s", op_ret, op_errno,</div><div class='del'>-                ((path == NULL)? "null" : path ));</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_UNLINK_LOOKUP_INFO,</div><div class='add'>+           "lookup_unlink returned with "</div><div class='add'>+           "op_ret -&gt; %d and op-errno -&gt; %d for %s",</div><div class='add'>+           op_ret, op_errno, ((path == NULL) ? "null" : path));</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        dht_lookup_everywhere_done (frame, this);</div><div class='del'>-                } else {</div><div class='del'>-                       /*When dht_lookup_everywhere is performed, one cached</div><div class='del'>-                         *and one hashed file was found and hashed file does</div><div class='del'>-                         *not point to the above mentioned cached node. So it</div><div class='del'>-                         *was considered as stale and an unlink was performed.</div><div class='del'>-                         *But unlink fails. So may be rebalance is in progress.</div><div class='del'>-                        *now ideally we have two data-files. One obtained during</div><div class='del'>-                         *lookup_everywhere and one where unlink-failed. So</div><div class='del'>-                         *at this point in time we cannot decide which one to</div><div class='del'>-                         *choose because there are chances of first cached</div><div class='del'>-                         *file is truncated after rebalance and if it is chosen</div><div class='del'>-                        *as cached node, application will fail. So return EIO.*/</div><div class='del'>-</div><div class='del'>-                        if (op_errno == EBUSY) {</div><div class='del'>-</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                        DHT_MSG_UNLINK_FAILED,</div><div class='del'>-                                        "Could not unlink the linkto file as "</div><div class='del'>-                                        "either fd is open and/or linkto xattr "</div><div class='del'>-                                        "is set for %s",</div><div class='del'>-                                        ((path == NULL)? "null":path));</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                        DHT_STACK_UNWIND (lookup, frame, -1, EIO, NULL, NULL,</div><div class='del'>-                                          NULL, NULL);</div><div class='del'>-</div><div class='del'>-                }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            dht_lookup_everywhere_done(frame, this);</div><div class='add'>+        } else {</div><div class='add'>+            /*When dht_lookup_everywhere is performed, one cached</div><div class='add'>+             *and one hashed file was found and hashed file does</div><div class='add'>+             *not point to the above mentioned cached node. So it</div><div class='add'>+             *was considered as stale and an unlink was performed.</div><div class='add'>+             *But unlink fails. So may be rebalance is in progress.</div><div class='add'>+             *now ideally we have two data-files. One obtained during</div><div class='add'>+             *lookup_everywhere and one where unlink-failed. So</div><div class='add'>+             *at this point in time we cannot decide which one to</div><div class='add'>+             *choose because there are chances of first cached</div><div class='add'>+             *file is truncated after rebalance and if it is chosen</div><div class='add'>+             *as cached node, application will fail. So return EIO.*/</div><div class='add'>+</div><div class='add'>+            if (op_errno == EBUSY) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                       DHT_MSG_UNLINK_FAILED,</div><div class='add'>+                       "Could not unlink the linkto file as "</div><div class='add'>+                       "either fd is open and/or linkto xattr "</div><div class='add'>+                       "is set for %s",</div><div class='add'>+                       ((path == NULL) ? "null" : path));</div><div class='add'>+            }</div><div class='add'>+            DHT_STACK_UNWIND(lookup, frame, -1, EIO, NULL, NULL, NULL, NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lookup_unlink_stale_linkto_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                    xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                    struct iatt *preparent,</div><div class='del'>-                                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_lookup_unlink_stale_linkto_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                   xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                   struct iatt *preparent,</div><div class='add'>+                                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    const char *path = NULL;</div><div class='ctx'> </div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        const char      *path  = NULL;</div><div class='del'>-</div><div class='del'>-        /* NOTE:</div><div class='del'>-         * If stale file unlink fails either there is an open-fd or is not an</div><div class='del'>-         * dht-linkto-file then posix_unlink returns EBUSY, which is overwritten</div><div class='del'>-         *  to ENOENT</div><div class='del'>-         */</div><div class='add'>+    /* NOTE:</div><div class='add'>+     * If stale file unlink fails either there is an open-fd or is not an</div><div class='add'>+     * dht-linkto-file then posix_unlink returns EBUSY, which is overwritten</div><div class='add'>+     *  to ENOENT</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local &amp;&amp; local-&gt;loc.path)</div><div class='del'>-                path = local-&gt;loc.path;</div><div class='add'>+    if (local &amp;&amp; local-&gt;loc.path)</div><div class='add'>+        path = local-&gt;loc.path;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                DHT_MSG_UNLINK_LOOKUP_INFO,</div><div class='del'>-                "Returned with op_ret %d and "</div><div class='del'>-                "op_errno %d for %s", op_ret, op_errno,</div><div class='del'>-                ((path==NULL)?"null":path));</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_UNLINK_LOOKUP_INFO,</div><div class='add'>+           "Returned with op_ret %d and "</div><div class='add'>+           "op_errno %d for %s",</div><div class='add'>+           op_ret, op_errno, ((path == NULL) ? "null" : path));</div><div class='ctx'> </div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, ENOENT, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, ENOENT, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fill_dict_to_avoid_unlink_of_migrating_file (dict_t *dict) {</div><div class='del'>-</div><div class='del'>-        int                      ret = 0;</div><div class='del'>-        xlator_t                *this           = NULL;</div><div class='del'>-        char                    *linktoskip_key = NULL;</div><div class='del'>-</div><div class='del'>-        this    = THIS;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, err);</div><div class='add'>+dht_fill_dict_to_avoid_unlink_of_migrating_file(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char *linktoskip_key = NULL;</div><div class='ctx'> </div><div class='del'>-        if (dht_is_tier_xlator (this))</div><div class='del'>-                linktoskip_key = TIER_SKIP_NON_LINKTO_UNLINK;</div><div class='del'>-        else</div><div class='del'>-                linktoskip_key = DHT_SKIP_NON_LINKTO_UNLINK;</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, err);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, linktoskip_key, 1);</div><div class='add'>+    if (dht_is_tier_xlator(this))</div><div class='add'>+        linktoskip_key = TIER_SKIP_NON_LINKTO_UNLINK;</div><div class='add'>+    else</div><div class='add'>+        linktoskip_key = DHT_SKIP_NON_LINKTO_UNLINK;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = dict_set_int32(dict, linktoskip_key, 1);</div><div class='ctx'> </div><div class='del'>-        ret =  dict_set_int32 (dict, DHT_SKIP_OPEN_FD_UNLINK, 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = dict_set_int32(dict, DHT_SKIP_OPEN_FD_UNLINK, 1);</div><div class='ctx'> </div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return -1;</div><div class='del'>-</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_linkfile_create_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                xlator_t *this, int32_t op_ret,</div><div class='del'>-                                int32_t op_errno, inode_t *inode,</div><div class='del'>-                                struct iatt *buf, dict_t *xdata,</div><div class='del'>-                                struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        int          call_cnt                   = 0, ret = 0;</div><div class='del'>-        xlator_t    *subvol                     = NULL;</div><div class='del'>-        uuid_t       gfid                       = {0, };</div><div class='del'>-        char         gfid_str[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        subvol = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+dht_linkfile_create_lookup_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                               inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+                               struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int call_cnt = 0, ret = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char gfid_str[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    subvol = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (subvol == local-&gt;hashed_subvol) {</div><div class='add'>+        if ((op_ret == 0) || (op_errno != ENOENT))</div><div class='add'>+            local-&gt;dont_create_linkto = _gf_true;</div><div class='add'>+    } else {</div><div class='add'>+        if (gf_uuid_is_null(local-&gt;gfid))</div><div class='add'>+            gf_uuid_copy(gfid, local-&gt;loc.gfid);</div><div class='add'>+        else</div><div class='add'>+            gf_uuid_copy(gfid, local-&gt;gfid);</div><div class='add'>+</div><div class='add'>+        if ((op_ret == 0) &amp;&amp; gf_uuid_compare(gfid, buf-&gt;ia_gfid)) {</div><div class='add'>+            gf_uuid_unparse(gfid, gfid_str);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "gfid (%s) different on cached subvol "</div><div class='add'>+                         "(%s) and looked up inode (%s), not "</div><div class='add'>+                         "creating linkto",</div><div class='add'>+                         uuid_utoa(buf-&gt;ia_gfid), subvol-&gt;name, gfid_str);</div><div class='add'>+            local-&gt;dont_create_linkto = _gf_true;</div><div class='add'>+        } else if (op_ret == -1) {</div><div class='add'>+            local-&gt;dont_create_linkto = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(call_cnt)) {</div><div class='add'>+        if (local-&gt;dont_create_linkto)</div><div class='add'>+            goto no_linkto;</div><div class='add'>+        else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Creating linkto file on %s(hash) to "</div><div class='add'>+                         "%s on %s (gfid = %s)",</div><div class='add'>+                         local-&gt;hashed_subvol-&gt;name, local-&gt;loc.path,</div><div class='add'>+                         local-&gt;cached_subvol-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-        if (subvol == local-&gt;hashed_subvol) {</div><div class='del'>-                if ((op_ret == 0) || (op_errno != ENOENT))</div><div class='del'>-                        local-&gt;dont_create_linkto = _gf_true;</div><div class='del'>-        } else {</div><div class='del'>-                if (gf_uuid_is_null (local-&gt;gfid))</div><div class='del'>-                        gf_uuid_copy (gfid, local-&gt;loc.gfid);</div><div class='del'>-                else</div><div class='del'>-                        gf_uuid_copy (gfid, local-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                if ((op_ret == 0) &amp;&amp; gf_uuid_compare (gfid, buf-&gt;ia_gfid)) {</div><div class='del'>-                        gf_uuid_unparse (gfid, gfid_str);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "gfid (%s) different on cached subvol "</div><div class='del'>-                                      "(%s) and looked up inode (%s), not "</div><div class='del'>-                                      "creating linkto",</div><div class='del'>-                                      uuid_utoa (buf-&gt;ia_gfid), subvol-&gt;name,</div><div class='del'>-                                      gfid_str);</div><div class='del'>-                        local-&gt;dont_create_linkto = _gf_true;</div><div class='del'>-                } else if (op_ret == -1) {</div><div class='del'>-                        local-&gt;dont_create_linkto = _gf_true;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            ret = dht_linkfile_create(frame, dht_lookup_linkfile_create_cbk,</div><div class='add'>+                                      this, local-&gt;cached_subvol,</div><div class='add'>+                                      local-&gt;hashed_subvol, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (call_cnt)) {</div><div class='del'>-                if (local-&gt;dont_create_linkto)</div><div class='del'>-                        goto no_linkto;</div><div class='del'>-                else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Creating linkto file on %s(hash) to "</div><div class='del'>-                                      "%s on %s (gfid = %s)",</div><div class='del'>-                                      local-&gt;hashed_subvol-&gt;name,</div><div class='del'>-                                      local-&gt;loc.path,</div><div class='del'>-                                      local-&gt;cached_subvol-&gt;name, gfid);</div><div class='del'>-</div><div class='del'>-                        ret = dht_linkfile_create</div><div class='del'>-                                (frame, dht_lookup_linkfile_create_cbk,</div><div class='del'>-                                 this, local-&gt;cached_subvol,</div><div class='del'>-                                 local-&gt;hashed_subvol, &amp;local-&gt;loc);</div><div class='del'>-</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto no_linkto;</div><div class='del'>-                }</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto no_linkto;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> no_linkto:</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "skipped linkto creation (path:%s) (gfid:%s) "</div><div class='del'>-                      "(hashed-subvol:%s) (cached-subvol:%s)",</div><div class='del'>-                      local-&gt;loc.path, gfid_str, local-&gt;hashed_subvol-&gt;name,</div><div class='del'>-                      local-&gt;cached_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-        dht_lookup_linkfile_create_cbk (frame, NULL, this, 0, 0,</div><div class='del'>-                                        local-&gt;loc.inode, &amp;local-&gt;stbuf,</div><div class='del'>-                                        &amp;local-&gt;preparent, &amp;local-&gt;postparent,</div><div class='del'>-                                        local-&gt;xattr);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "skipped linkto creation (path:%s) (gfid:%s) "</div><div class='add'>+                 "(hashed-subvol:%s) (cached-subvol:%s)",</div><div class='add'>+                 local-&gt;loc.path, gfid_str, local-&gt;hashed_subvol-&gt;name,</div><div class='add'>+                 local-&gt;cached_subvol-&gt;name);</div><div class='ctx'> </div><div class='add'>+    dht_lookup_linkfile_create_cbk(frame, NULL, this, 0, 0, local-&gt;loc.inode,</div><div class='add'>+                                   &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                                   &amp;local-&gt;postparent, local-&gt;xattr);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_call_lookup_linkfile_create (call_frame_t *frame, void *cookie,</div><div class='del'>-                                 xlator_t *this, int32_t op_ret,</div><div class='del'>-                                 int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_call_lookup_linkfile_create(call_frame_t *frame, void *cookie,</div><div class='add'>+                                xlator_t *this, int32_t op_ret,</div><div class='add'>+                                int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local          = NULL;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int          i              = 0;</div><div class='del'>-        xlator_t    *subvol         = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (gf_uuid_is_null (local-&gt;gfid))</div><div class='del'>-                gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-        else</div><div class='del'>-                gf_uuid_unparse (local-&gt;gfid, gfid);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "protecting namespace failed, skipping linkto "</div><div class='del'>-                        "creation (path:%s)(gfid:%s)(hashed-subvol:%s)"</div><div class='del'>-                        "(cached-subvol:%s)", local-&gt;loc.path, gfid,</div><div class='del'>-                        local-&gt;hashed_subvol-&gt;name, local-&gt;cached_subvol-&gt;name);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;gfid))</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+    else</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        local-&gt;locked = _gf_true;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "protecting namespace failed, skipping linkto "</div><div class='add'>+               "creation (path:%s)(gfid:%s)(hashed-subvol:%s)"</div><div class='add'>+               "(cached-subvol:%s)",</div><div class='add'>+               local-&gt;loc.path, gfid, local-&gt;hashed_subvol-&gt;name,</div><div class='add'>+               local-&gt;cached_subvol-&gt;name);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    local-&gt;locked = _gf_true;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 2; i++) {</div><div class='del'>-                subvol = (subvol == NULL) ? local-&gt;hashed_subvol</div><div class='del'>-                        : local-&gt;cached_subvol;</div><div class='add'>+    for (i = 0; i &lt; 2; i++) {</div><div class='add'>+        subvol = (subvol == NULL) ? local-&gt;hashed_subvol : local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_linkfile_create_lookup_cbk,</div><div class='del'>-                                   subvol, subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, NULL);</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_linkfile_create_lookup_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;lookup, &amp;local-&gt;loc, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_lookup_linkfile_create_cbk (frame, NULL, this, 0, 0,</div><div class='del'>-                                        local-&gt;loc.inode,</div><div class='del'>-                                        &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                                        &amp;local-&gt;postparent, local-&gt;xattr);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_lookup_linkfile_create_cbk(frame, NULL, this, 0, 0, local-&gt;loc.inode,</div><div class='add'>+                                   &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                                   &amp;local-&gt;postparent, local-&gt;xattr);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Rebalance is performed from cached_node to hashed_node. Initial cached_node</div><div class='hunk'>@@ -2387,760 +2235,693 @@ err:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lookup_everywhere_done (call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int           ret                        = 0;</div><div class='del'>-        dht_local_t  *local                      = NULL;</div><div class='del'>-        xlator_t     *hashed_subvol              = NULL;</div><div class='del'>-        xlator_t     *cached_subvol              = NULL;</div><div class='del'>-        dht_layout_t *layout                     = NULL;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE]              = {0};</div><div class='del'>-        gf_boolean_t  found_non_linkto_on_hashed = _gf_false;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        hashed_subvol = local-&gt;hashed_subvol;</div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+dht_lookup_everywhere_done(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    gf_boolean_t found_non_linkto_on_hashed = _gf_false;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    hashed_subvol = local-&gt;hashed_subvol;</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;file_count &amp;&amp; local-&gt;dir_count) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_FILE_TYPE_MISMATCH,</div><div class='add'>+               "path %s (gfid = %s)exists as a file on one "</div><div class='add'>+               "subvolume and directory on another. "</div><div class='add'>+               "Please fix it manually",</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+        DHT_STACK_UNWIND(lookup, frame, -1, EIO, NULL, NULL, NULL, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;dir_count) {</div><div class='add'>+        dht_lookup_directory(frame, this, &amp;local-&gt;loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "STATUS: hashed_subvol %s "</div><div class='add'>+                 "cached_subvol %s",</div><div class='add'>+                 (hashed_subvol == NULL) ? "null" : hashed_subvol-&gt;name,</div><div class='add'>+                 (cached_subvol == NULL) ? "null" : cached_subvol-&gt;name);</div><div class='add'>+</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        if (local-&gt;skip_unlink.handle_valid_link &amp;&amp; hashed_subvol) {</div><div class='add'>+            /*Purpose of "DHT_SKIP_NON_LINKTO_UNLINK":</div><div class='add'>+             * If this lookup is performed by rebalance and this</div><div class='add'>+             * rebalance process detected hashed file and by</div><div class='add'>+             * the time it sends the lookup request to cached node,</div><div class='add'>+             * file got migrated and now at initial hashed_node,</div><div class='add'>+             * final migrated file is present. With current logic,</div><div class='add'>+             * because this process fails to find the cached_node,</div><div class='add'>+             * it will unlink the file at initial hashed_node.</div><div class='add'>+             *</div><div class='add'>+             * So we avoid this by setting key, and checking at the</div><div class='add'>+             * posix_unlink that unlink the file only if file is a</div><div class='add'>+             * linkto file and not a migrated_file.</div><div class='add'>+             */</div><div class='add'>+</div><div class='add'>+            ret = dht_fill_dict_to_avoid_unlink_of_migrating_file(</div><div class='add'>+                local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+            if (ret) {</div><div class='add'>+                /* If for some reason, setting key in the dict</div><div class='add'>+                 * fails, return with ENOENT, as with respect to</div><div class='add'>+                 * this process, it detected only a stale link</div><div class='add'>+                 * file.</div><div class='add'>+                 *</div><div class='add'>+                 * Next lookup will delete it.</div><div class='add'>+                 *</div><div class='add'>+                 * Performing deletion of stale link file when</div><div class='add'>+                 * setting key in dict fails, may cause the data</div><div class='add'>+                 * loss because of the above mentioned race.</div><div class='add'>+                 */</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;file_count &amp;&amp; local-&gt;dir_count) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_FILE_TYPE_MISMATCH,</div><div class='del'>-                        "path %s (gfid = %s)exists as a file on one "</div><div class='del'>-                        "subvolume and directory on another. "</div><div class='del'>-                        "Please fix it manually",</div><div class='del'>-                        local-&gt;loc.path, gfid);</div><div class='del'>-                DHT_STACK_UNWIND (lookup, frame, -1, EIO, NULL, NULL, NULL,</div><div class='del'>-                                  NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+                DHT_STACK_UNWIND(lookup, frame, -1, ENOENT, NULL, NULL, NULL,</div><div class='add'>+                                 NULL);</div><div class='add'>+            } else {</div><div class='add'>+                local-&gt;skip_unlink.handle_valid_link = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;dir_count) {</div><div class='del'>-                dht_lookup_directory (frame, this, &amp;local-&gt;loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "STATUS: hashed_subvol %s "</div><div class='del'>-                      "cached_subvol %s",</div><div class='del'>-                      (hashed_subvol == NULL)?"null":hashed_subvol-&gt;name,</div><div class='del'>-                      (cached_subvol == NULL)?"null":cached_subvol-&gt;name);</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "No Cached was found and "</div><div class='add'>+                             "unlink on hashed was skipped"</div><div class='add'>+                             " so performing now: %s",</div><div class='add'>+                             local-&gt;loc.path);</div><div class='add'>+                FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+                STACK_WIND(frame, dht_lookup_unlink_stale_linkto_cbk,</div><div class='add'>+                           hashed_subvol, hashed_subvol-&gt;fops-&gt;unlink,</div><div class='add'>+                           &amp;local-&gt;loc, 0, local-&gt;xattr_req);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (!cached_subvol) {</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "There was no cached file and  "</div><div class='add'>+                         "unlink on hashed is not skipped %s",</div><div class='add'>+                         local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;skip_unlink.handle_valid_link &amp;&amp; hashed_subvol) {</div><div class='del'>-</div><div class='del'>-                        /*Purpose of "DHT_SKIP_NON_LINKTO_UNLINK":</div><div class='del'>-                         * If this lookup is performed by rebalance and this</div><div class='del'>-                         * rebalance process detected hashed file and by</div><div class='del'>-                         * the time it sends the lookup request to cached node,</div><div class='del'>-                         * file got migrated and now at initial hashed_node,</div><div class='del'>-                         * final migrated file is present. With current logic,</div><div class='del'>-                         * because this process fails to find the cached_node,</div><div class='del'>-                         * it will unlink the file at initial hashed_node.</div><div class='del'>-                         *</div><div class='del'>-                         * So we avoid this by setting key, and checking at the</div><div class='del'>-                         * posix_unlink that unlink the file only if file is a</div><div class='del'>-                         * linkto file and not a migrated_file.</div><div class='del'>-                         */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                        ret = dht_fill_dict_to_avoid_unlink_of_migrating_file</div><div class='del'>-                              (local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                /* If for some reason, setting key in the dict</div><div class='del'>-                                 * fails, return with ENOENT, as with respect to</div><div class='del'>-                                 * this process, it detected only a stale link</div><div class='del'>-                                 * file.</div><div class='del'>-                                 *</div><div class='del'>-                                 * Next lookup will delete it.</div><div class='del'>-                                 *</div><div class='del'>-                                 * Performing deletion of stale link file when</div><div class='del'>-                                 * setting key in dict fails, may cause the data</div><div class='del'>-                                 * loss because of the above mentioned race.</div><div class='del'>-                                 */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                                DHT_STACK_UNWIND (lookup, frame, -1, ENOENT,</div><div class='del'>-                                                  NULL, NULL, NULL, NULL);</div><div class='del'>-                        } else {</div><div class='del'>-                                local-&gt;skip_unlink.handle_valid_link = _gf_false;</div><div class='del'>-</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "No Cached was found and "</div><div class='del'>-                                              "unlink on hashed was skipped"</div><div class='del'>-                                              " so performing now: %s",</div><div class='del'>-                                              local-&gt;loc.path);</div><div class='del'>-                                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                                STACK_WIND (frame,</div><div class='del'>-                                            dht_lookup_unlink_stale_linkto_cbk,</div><div class='del'>-                                            hashed_subvol,</div><div class='del'>-                                            hashed_subvol-&gt;fops-&gt;unlink,</div><div class='del'>-                                            &amp;local-&gt;loc, 0, local-&gt;xattr_req);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                } else  {</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "There was no cached file and  "</div><div class='del'>-                                      "unlink on hashed is not skipped %s",</div><div class='del'>-                                      local-&gt;loc.path);</div><div class='del'>-</div><div class='del'>-                        DHT_STACK_UNWIND (lookup, frame, -1, ENOENT,</div><div class='del'>-                                          NULL, NULL, NULL, NULL);</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='add'>+            DHT_STACK_UNWIND(lookup, frame, -1, ENOENT, NULL, NULL, NULL, NULL);</div><div class='ctx'>         }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* At the time of dht_lookup, no file was found on hashed and that is</div><div class='del'>-         * why dht_lookup_everywhere is called, but by the time</div><div class='del'>-         * dht_lookup_everywhere</div><div class='del'>-         * reached to server, file might have already migrated. In that case we</div><div class='del'>-         * will find a migrated file at the hashed_node. In this case store the</div><div class='del'>-         * layout in context and return successfully.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (hashed_subvol || local-&gt;need_lookup_everywhere) {</div><div class='del'>-</div><div class='del'>-                if (local-&gt;need_lookup_everywhere) {</div><div class='del'>-</div><div class='del'>-                        found_non_linkto_on_hashed = _gf_true;</div><div class='del'>-</div><div class='del'>-                } else if ((local-&gt;file_count == 1) &amp;&amp;</div><div class='del'>-                            (hashed_subvol == cached_subvol)) {</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "found cached file on hashed subvolume "</div><div class='del'>-                                      "so store in context and return for %s",</div><div class='del'>-                                      local-&gt;loc.path);</div><div class='add'>+    /* At the time of dht_lookup, no file was found on hashed and that is</div><div class='add'>+     * why dht_lookup_everywhere is called, but by the time</div><div class='add'>+     * dht_lookup_everywhere</div><div class='add'>+     * reached to server, file might have already migrated. In that case we</div><div class='add'>+     * will find a migrated file at the hashed_node. In this case store the</div><div class='add'>+     * layout in context and return successfully.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-                        found_non_linkto_on_hashed = _gf_true;</div><div class='del'>-                }</div><div class='add'>+    if (hashed_subvol || local-&gt;need_lookup_everywhere) {</div><div class='add'>+        if (local-&gt;need_lookup_everywhere) {</div><div class='add'>+            found_non_linkto_on_hashed = _gf_true;</div><div class='ctx'> </div><div class='del'>-                if (found_non_linkto_on_hashed)</div><div class='del'>-                        goto preset_layout;</div><div class='add'>+        } else if ((local-&gt;file_count == 1) &amp;&amp;</div><div class='add'>+                   (hashed_subvol == cached_subvol)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "found cached file on hashed subvolume "</div><div class='add'>+                         "so store in context and return for %s",</div><div class='add'>+                         local-&gt;loc.path);</div><div class='ctx'> </div><div class='add'>+            found_non_linkto_on_hashed = _gf_true;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if (found_non_linkto_on_hashed)</div><div class='add'>+            goto preset_layout;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (hashed_subvol) {</div><div class='del'>-                if (local-&gt;skip_unlink.handle_valid_link == _gf_true) {</div><div class='del'>-                        if (cached_subvol == local-&gt;skip_unlink.hash_links_to) {</div><div class='del'>-</div><div class='del'>-                             if (gf_uuid_compare (local-&gt;skip_unlink.cached_gfid,</div><div class='del'>-                                               local-&gt;skip_unlink.hashed_gfid)){</div><div class='del'>-</div><div class='del'>-                                        /*GFID different, return error*/</div><div class='del'>-                                        DHT_STACK_UNWIND (lookup, frame, -1,</div><div class='del'>-                                                          ESTALE, NULL, NULL,</div><div class='del'>-                                                          NULL, NULL);</div><div class='del'>-</div><div class='del'>-                                        return 0;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                ret = dht_layout_preset (this, cached_subvol,</div><div class='del'>-                                                         local-&gt;loc.inode);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                                DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='del'>-                                                "Could not set pre-set layout "</div><div class='del'>-                                                "for subvolume %s",</div><div class='del'>-                                                cached_subvol-&gt;name);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                local-&gt;op_ret = (ret == 0) ? ret : -1;</div><div class='del'>-                                local-&gt;op_errno = (ret == 0) ? ret : EINVAL;</div><div class='del'>-</div><div class='del'>-                                /* Presence of local-&gt;cached_subvol validates</div><div class='del'>-                                 * that lookup from cached node is successful</div><div class='del'>-                                 */</div><div class='del'>-</div><div class='del'>-                                if (!local-&gt;op_ret &amp;&amp; local-&gt;loc.parent) {</div><div class='del'>-                                        dht_inode_ctx_time_update</div><div class='del'>-                                                (local-&gt;loc.parent, this,</div><div class='del'>-                                                 &amp;local-&gt;postparent, 1);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "Skipped unlinking linkto file "</div><div class='del'>-                                              "on the hashed subvolume. "</div><div class='del'>-                                              "Returning success as it is a "</div><div class='del'>-                                              "valid linkto file. Path:%s"</div><div class='del'>-                                              ,local-&gt;loc.path);</div><div class='add'>+    if (hashed_subvol) {</div><div class='add'>+        if (local-&gt;skip_unlink.handle_valid_link == _gf_true) {</div><div class='add'>+            if (cached_subvol == local-&gt;skip_unlink.hash_links_to) {</div><div class='add'>+                if (gf_uuid_compare(local-&gt;skip_unlink.cached_gfid,</div><div class='add'>+                                    local-&gt;skip_unlink.hashed_gfid)) {</div><div class='add'>+                    /*GFID different, return error*/</div><div class='add'>+                    DHT_STACK_UNWIND(lookup, frame, -1, ESTALE, NULL, NULL,</div><div class='add'>+                                     NULL, NULL);</div><div class='ctx'> </div><div class='del'>-                                goto unwind_hashed_and_cached;</div><div class='del'>-                        } else {</div><div class='del'>-</div><div class='del'>-                               local-&gt;skip_unlink.handle_valid_link = _gf_false;</div><div class='del'>-</div><div class='del'>-                               gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                             "Linkto file found on hashed "</div><div class='del'>-                                             "subvol "</div><div class='del'>-                                             "and data file found on cached "</div><div class='del'>-                                             "subvolume. But linkto points to "</div><div class='del'>-                                             "different cached subvolume (%s) "</div><div class='del'>-                                             "path %s",</div><div class='del'>-                                            (local-&gt;skip_unlink.hash_links_to ?</div><div class='del'>-                                        local-&gt;skip_unlink.hash_links_to-&gt;name :</div><div class='del'>-                                             " &lt;nil&gt;"), local-&gt;loc.path);</div><div class='del'>-</div><div class='del'>-                               if (local-&gt;skip_unlink.opend_fd_count == 0) {</div><div class='add'>+                    return 0;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='add'>+                ret = dht_layout_preset(this, cached_subvol, local-&gt;loc.inode);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                           DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='add'>+                           "Could not set pre-set layout "</div><div class='add'>+                           "for subvolume %s",</div><div class='add'>+                           cached_subvol-&gt;name);</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                          ret = dht_fill_dict_to_avoid_unlink_of_migrating_file</div><div class='del'>-                                  (local-&gt;xattr_req);</div><div class='add'>+                local-&gt;op_ret = (ret == 0) ? ret : -1;</div><div class='add'>+                local-&gt;op_errno = (ret == 0) ? ret : EINVAL;</div><div class='ctx'> </div><div class='add'>+                /* Presence of local-&gt;cached_subvol validates</div><div class='add'>+                 * that lookup from cached node is successful</div><div class='add'>+                 */</div><div class='ctx'> </div><div class='del'>-                                        if (ret) {</div><div class='del'>-                                          DHT_STACK_UNWIND (lookup, frame, -1,</div><div class='del'>-                                                            EIO, NULL, NULL,</div><div class='del'>-                                                            NULL, NULL);</div><div class='del'>-                                        } else {</div><div class='del'>-                                                local-&gt;call_cnt = 1;</div><div class='del'>-                                                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                                                STACK_WIND (frame,</div><div class='del'>-                                          dht_lookup_unlink_of_false_linkto_cbk,</div><div class='del'>-                                                    hashed_subvol,</div><div class='del'>-                                                    hashed_subvol-&gt;fops-&gt;unlink,</div><div class='del'>-                                                    &amp;local-&gt;loc, 0,</div><div class='del'>-                                                    local-&gt;xattr_req);</div><div class='del'>-                                        }</div><div class='add'>+                if (!local-&gt;op_ret &amp;&amp; local-&gt;loc.parent) {</div><div class='add'>+                    dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                              &amp;local-&gt;postparent, 1);</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                                        return 0;</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Skipped unlinking linkto file "</div><div class='add'>+                             "on the hashed subvolume. "</div><div class='add'>+                             "Returning success as it is a "</div><div class='add'>+                             "valid linkto file. Path:%s",</div><div class='add'>+                             local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                goto unwind_hashed_and_cached;</div><div class='add'>+            } else {</div><div class='add'>+                local-&gt;skip_unlink.handle_valid_link = _gf_false;</div><div class='ctx'> </div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Linkto file found on hashed "</div><div class='add'>+                             "subvol "</div><div class='add'>+                             "and data file found on cached "</div><div class='add'>+                             "subvolume. But linkto points to "</div><div class='add'>+                             "different cached subvolume (%s) "</div><div class='add'>+                             "path %s",</div><div class='add'>+                             (local-&gt;skip_unlink.hash_links_to</div><div class='add'>+                                  ? local-&gt;skip_unlink.hash_links_to-&gt;name</div><div class='add'>+                                  : " &lt;nil&gt;"),</div><div class='add'>+                             local-&gt;loc.path);</div><div class='add'>+</div><div class='add'>+                if (local-&gt;skip_unlink.opend_fd_count == 0) {</div><div class='add'>+                    ret = dht_fill_dict_to_avoid_unlink_of_migrating_file(</div><div class='add'>+                        local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+                    if (ret) {</div><div class='add'>+                        DHT_STACK_UNWIND(lookup, frame, -1, EIO, NULL, NULL,</div><div class='add'>+                                         NULL, NULL);</div><div class='add'>+                    } else {</div><div class='add'>+                        local-&gt;call_cnt = 1;</div><div class='add'>+                        FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+                        STACK_WIND(frame, dht_lookup_unlink_of_false_linkto_cbk,</div><div class='add'>+                                   hashed_subvol, hashed_subvol-&gt;fops-&gt;unlink,</div><div class='add'>+                                   &amp;local-&gt;loc, 0, local-&gt;xattr_req);</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    return 0;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> preset_layout:</div><div class='ctx'> </div><div class='del'>-        if (found_non_linkto_on_hashed) {</div><div class='del'>-</div><div class='del'>-                if (local-&gt;need_lookup_everywhere) {</div><div class='del'>-                        if (gf_uuid_compare (local-&gt;gfid, local-&gt;inode-&gt;gfid)) {</div><div class='del'>-                                /* GFID different, return error */</div><div class='del'>-                                DHT_STACK_UNWIND (lookup, frame, -1, ENOENT,</div><div class='del'>-                                                  NULL, NULL, NULL, NULL);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='del'>-                layout = dht_layout_for_subvol (this, cached_subvol);</div><div class='del'>-                if (!layout) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                                "%s: no pre-set layout for subvolume %s,"</div><div class='del'>-                                " gfid = %s",</div><div class='del'>-                                local-&gt;loc.path, (cached_subvol ?</div><div class='del'>-                                                  cached_subvol-&gt;name :</div><div class='del'>-                                                  "&lt;nil&gt;"), gfid);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dht_layout_set (this, local-&gt;inode, layout);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                                "%s: failed to set layout for subvol %s, "</div><div class='del'>-                                "gfid = %s",</div><div class='del'>-                                local-&gt;loc.path, (cached_subvol ?</div><div class='del'>-                                                  cached_subvol-&gt;name :</div><div class='del'>-                                                  "&lt;nil&gt;"), gfid);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-                DHT_STACK_UNWIND (lookup, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;inode,</div><div class='del'>-                                  &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                                  &amp;local-&gt;postparent);</div><div class='add'>+    if (found_non_linkto_on_hashed) {</div><div class='add'>+        if (local-&gt;need_lookup_everywhere) {</div><div class='add'>+            if (gf_uuid_compare(local-&gt;gfid, local-&gt;inode-&gt;gfid)) {</div><div class='add'>+                /* GFID different, return error */</div><div class='add'>+                DHT_STACK_UNWIND(lookup, frame, -1, ENOENT, NULL, NULL, NULL,</div><div class='add'>+                                 NULL);</div><div class='ctx'>                 return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!hashed_subvol) {</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Cannot create linkfile for %s on %s: "</div><div class='del'>-                              "hashed subvolume cannot be found, gfid = %s.",</div><div class='del'>-                              local-&gt;loc.path, cached_subvol-&gt;name, gfid);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+        layout = dht_layout_for_subvol(this, cached_subvol);</div><div class='add'>+        if (!layout) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+                   "%s: no pre-set layout for subvolume %s,"</div><div class='add'>+                   " gfid = %s",</div><div class='add'>+                   local-&gt;loc.path,</div><div class='add'>+                   (cached_subvol ? cached_subvol-&gt;name : "&lt;nil&gt;"), gfid);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='add'>+        ret = dht_layout_set(this, local-&gt;inode, layout);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+                   "%s: failed to set layout for subvol %s, "</div><div class='add'>+                   "gfid = %s",</div><div class='add'>+                   local-&gt;loc.path,</div><div class='add'>+                   (cached_subvol ? cached_subvol-&gt;name : "&lt;nil&gt;"), gfid);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dht_layout_preset (frame-&gt;this, cached_subvol,</div><div class='del'>-                                         local-&gt;inode);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='del'>-                                "Failed to set layout for subvol %s"</div><div class='del'>-                                ", gfid = %s",</div><div class='del'>-                                cached_subvol ? cached_subvol-&gt;name :</div><div class='del'>-                                "&lt;nil&gt;", gfid);</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = EINVAL;</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='add'>+        DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+        DHT_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                         &amp;local-&gt;postparent);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-                DHT_STACK_UNWIND (lookup, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;inode,</div><div class='del'>-                                  &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                                  &amp;local-&gt;postparent);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!hashed_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Cannot create linkfile for %s on %s: "</div><div class='add'>+                     "hashed subvolume cannot be found, gfid = %s.",</div><div class='add'>+                     local-&gt;loc.path, cached_subvol-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;op != GF_FOP_RENAME) {</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-                ret = dht_protect_namespace (frame, &amp;local-&gt;loc, hashed_subvol,</div><div class='del'>-                                             &amp;local-&gt;current-&gt;ns,</div><div class='del'>-                                             dht_call_lookup_linkfile_create);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Creating linkto file on %s(hash) to %s on %s "</div><div class='del'>-                              "(gfid = %s)",</div><div class='del'>-                              hashed_subvol-&gt;name, local-&gt;loc.path,</div><div class='del'>-                              cached_subvol-&gt;name, gfid);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='ctx'> </div><div class='del'>-                ret = dht_linkfile_create (frame,</div><div class='del'>-                                           dht_lookup_linkfile_create_cbk, this,</div><div class='del'>-                                           cached_subvol, hashed_subvol,</div><div class='del'>-                                           &amp;local-&gt;loc);</div><div class='add'>+        ret = dht_layout_preset(frame-&gt;this, cached_subvol, local-&gt;inode);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='add'>+                   "Failed to set layout for subvol %s"</div><div class='add'>+                   ", gfid = %s",</div><div class='add'>+                   cached_subvol ? cached_subvol-&gt;name : "&lt;nil&gt;", gfid);</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-unwind_hashed_and_cached:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                          &amp;local-&gt;postparent);</div><div class='add'>+        DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+        DHT_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                         &amp;local-&gt;postparent);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_lookup_everywhere_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno,</div><div class='del'>-                           inode_t *inode, struct iatt *buf, dict_t *xattr,</div><div class='del'>-                           struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        int           is_linkfile   = 0;</div><div class='del'>-        int           is_dir        = 0;</div><div class='del'>-        loc_t        *loc           = NULL;</div><div class='del'>-        xlator_t     *link_subvol   = NULL;</div><div class='del'>-        int           ret           = -1;</div><div class='del'>-        int32_t       fd_count      = 0;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        dict_t       *dict_req      = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        loc    = &amp;local-&gt;loc;</div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        prev   = cookie;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "returned with op_ret %d and op_errno %d (%s) "</div><div class='del'>-                      "from subvol %s", op_ret, op_errno, loc-&gt;path,</div><div class='del'>-                      prev-&gt;name);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        if (op_errno != ENOENT)</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (gf_uuid_is_null (local-&gt;gfid))</div><div class='del'>-                        gf_uuid_copy (local-&gt;gfid, buf-&gt;ia_gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_uuid_unparse(local-&gt;gfid, gfid);</div><div class='add'>+    if (frame-&gt;root-&gt;op != GF_FOP_RENAME) {</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+        ret = dht_protect_namespace(frame, &amp;local-&gt;loc, hashed_subvol,</div><div class='add'>+                                    &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                    dht_call_lookup_linkfile_create);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Creating linkto file on %s(hash) to %s on %s "</div><div class='add'>+                     "(gfid = %s)",</div><div class='add'>+                     hashed_subvol-&gt;name, local-&gt;loc.path, cached_subvol-&gt;name,</div><div class='add'>+                     gfid);</div><div class='add'>+</div><div class='add'>+        ret = dht_linkfile_create(frame, dht_lookup_linkfile_create_cbk, this,</div><div class='add'>+                                  cached_subvol, hashed_subvol, &amp;local-&gt;loc);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_compare (local-&gt;gfid, buf-&gt;ia_gfid)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                                "%s: gfid differs on subvolume %s,"</div><div class='del'>-                                " gfid local = %s, gfid node = %s",</div><div class='del'>-                                loc-&gt;path, prev-&gt;name, gfid,</div><div class='del'>-                                uuid_utoa(buf-&gt;ia_gfid));</div><div class='del'>-                }</div><div class='add'>+unwind_hashed_and_cached:</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='add'>+                     &amp;local-&gt;postparent);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_lookup_everywhere_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                          struct iatt *buf, dict_t *xattr,</div><div class='add'>+                          struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int is_linkfile = 0;</div><div class='add'>+    int is_dir = 0;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *link_subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t fd_count = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dict_t *dict_req = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "returned with op_ret %d and op_errno %d (%s) "</div><div class='add'>+                 "from subvol %s",</div><div class='add'>+                 op_ret, op_errno, loc-&gt;path, prev-&gt;name);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if (op_errno != ENOENT)</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                is_linkfile = check_is_linkfile (inode, buf, xattr,</div><div class='del'>-                                                 conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-                if (is_linkfile) {</div><div class='del'>-                        link_subvol = dht_linkfile_subvol (this, inode, buf,</div><div class='del'>-                                                           xattr);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "found on %s linkfile %s (-&gt; %s)",</div><div class='del'>-                                      prev-&gt;name, loc-&gt;path,</div><div class='del'>-                                      link_subvol ? link_subvol-&gt;name : "''");</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (gf_uuid_is_null(local-&gt;gfid))</div><div class='add'>+            gf_uuid_copy(local-&gt;gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-                is_dir = check_is_dir (inode, buf, xattr);</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-                /* non linkfile GFID takes precedence but don't overwrite</div><div class='del'>-                 gfid if we have already found a cached file*/</div><div class='del'>-                if (!local-&gt;cached_subvol)</div><div class='del'>-                        gf_uuid_copy (local-&gt;gfid, buf-&gt;ia_gfid);</div><div class='add'>+        if (gf_uuid_compare(local-&gt;gfid, buf-&gt;ia_gfid)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+                   "%s: gfid differs on subvolume %s,"</div><div class='add'>+                   " gfid local = %s, gfid node = %s",</div><div class='add'>+                   loc-&gt;path, prev-&gt;name, gfid, uuid_utoa(buf-&gt;ia_gfid));</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (is_dir) {</div><div class='del'>-                        local-&gt;dir_count++;</div><div class='add'>+        is_linkfile = check_is_linkfile(inode, buf, xattr,</div><div class='add'>+                                        conf-&gt;link_xattr_name);</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "found on %s directory %s",</div><div class='del'>-                                      prev-&gt;name, loc-&gt;path);</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;file_count++;</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "found cached file on %s for %s",</div><div class='del'>-                                      prev-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                        if (!local-&gt;cached_subvol) {</div><div class='del'>-                                /* found one file */</div><div class='del'>-                                dht_iatt_merge (this, &amp;local-&gt;stbuf, buf);</div><div class='del'>-</div><div class='del'>-                                local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                                local-&gt;cached_subvol = prev;</div><div class='del'>-</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "storing cached on %s file"</div><div class='del'>-                                              " %s", prev-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                                dht_iatt_merge (this, &amp;local-&gt;postparent,</div><div class='del'>-                                                postparent);</div><div class='del'>-</div><div class='del'>-                                gf_uuid_copy (local-&gt;skip_unlink.cached_gfid,</div><div class='del'>-                                           buf-&gt;ia_gfid);</div><div class='del'>-                        } else {</div><div class='del'>-                                /* This is where we need 'rename' both entries logic */</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_FILE_ON_MULT_SUBVOL,</div><div class='del'>-                                        "multiple subvolumes (%s and %s) have "</div><div class='del'>-                                        "file %s (preferably rename the file "</div><div class='del'>-                                        "in the backend,and do a fresh lookup)",</div><div class='del'>-                                        local-&gt;cached_subvol-&gt;name,</div><div class='del'>-                                        prev-&gt;name, local-&gt;loc.path);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (is_linkfile) {</div><div class='add'>+            link_subvol = dht_linkfile_subvol(this, inode, buf, xattr);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "found on %s linkfile %s (-&gt; %s)",</div><div class='add'>+                         prev-&gt;name, loc-&gt;path,</div><div class='add'>+                         link_subvol ? link_subvol-&gt;name : "''");</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (is_linkfile) {</div><div class='del'>-                ret = dict_get_int32 (xattr, GLUSTERFS_OPEN_FD_COUNT, &amp;fd_count);</div><div class='add'>+        is_dir = check_is_dir(inode, buf, xattr);</div><div class='ctx'> </div><div class='del'>-                /*  Any linkto file found on the non-hashed subvolume should</div><div class='del'>-                 *  be unlinked (performed in the "else if" block below)</div><div class='del'>-                 *</div><div class='del'>-                 *  But if a linkto file is found on hashed subvolume, it may be</div><div class='del'>-                 *  pointing to valid cached node. So unlinking of linkto</div><div class='del'>-                 *  file on hashed subvolume is skipped and inside</div><div class='del'>-                 *  dht_lookup_everywhere_done, checks are performed. If this</div><div class='del'>-                 *  linkto file is found as stale linkto file, it is deleted</div><div class='del'>-                 *  otherwise unlink is skipped.</div><div class='del'>-                 */</div><div class='add'>+        /* non linkfile GFID takes precedence but don't overwrite</div><div class='add'>+         gfid if we have already found a cached file*/</div><div class='add'>+        if (!local-&gt;cached_subvol)</div><div class='add'>+            gf_uuid_copy(local-&gt;gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;hashed_subvol &amp;&amp; local-&gt;hashed_subvol == prev) {</div><div class='del'>-</div><div class='del'>-                        local-&gt;skip_unlink.handle_valid_link = _gf_true;</div><div class='del'>-                        local-&gt;skip_unlink.opend_fd_count = fd_count;</div><div class='del'>-                        local-&gt;skip_unlink.hash_links_to = link_subvol;</div><div class='del'>-                        gf_uuid_copy (local-&gt;skip_unlink.hashed_gfid,</div><div class='del'>-                                   buf-&gt;ia_gfid);</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Found"</div><div class='del'>-                                      " one linkto file on hashed subvol %s "</div><div class='del'>-                                      "for %s: Skipping unlinking till "</div><div class='del'>-                                      "everywhere_done", prev-&gt;name,</div><div class='del'>-                                      loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                } else if (!ret &amp;&amp; (fd_count == 0)) {</div><div class='del'>-</div><div class='del'>-                        dict_req = dict_new ();</div><div class='del'>-</div><div class='del'>-                        ret = dht_fill_dict_to_avoid_unlink_of_migrating_file</div><div class='del'>-                              (dict_req);</div><div class='del'>-</div><div class='del'>-                        if (ret) {</div><div class='del'>-</div><div class='del'>-                                /* Skip unlinking for dict_failure</div><div class='del'>-                                 *File is found as a linkto file on non-hashed,</div><div class='del'>-                                 *subvolume. In the current implementation,</div><div class='del'>-                                 *finding a linkto-file on non-hashed does not</div><div class='del'>-                                 *always implies that it is stale. So deletion</div><div class='del'>-                                 *of file should be done only when both fd is</div><div class='del'>-                                 *closed and linkto-xattr is set. In case of</div><div class='del'>-                                 *dict_set failure, avoid skipping of file.</div><div class='del'>-                                 *NOTE: dht_frame_return should get called for</div><div class='del'>-                                 *      this block.</div><div class='del'>-                                 */</div><div class='del'>-</div><div class='del'>-                                dict_unref (dict_req);</div><div class='del'>-</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                                        "attempting deletion of stale linkfile "</div><div class='del'>-                                        "%s on %s (hashed subvol is %s)",</div><div class='del'>-                                        loc-&gt;path, prev-&gt;name,</div><div class='del'>-                                        (local-&gt;hashed_subvol?</div><div class='del'>-                                        local-&gt;hashed_subvol-&gt;name : "&lt;null&gt;"));</div><div class='del'>-                                /* *</div><div class='del'>-                                 * These stale files may be created using root</div><div class='del'>-                                 * user. Hence deletion will work only with</div><div class='del'>-                                 * root.</div><div class='del'>-                                 */</div><div class='del'>-                                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                                STACK_WIND (frame, dht_lookup_unlink_cbk,</div><div class='del'>-                                            prev, prev-&gt;fops-&gt;unlink, loc,</div><div class='del'>-                                            0, dict_req);</div><div class='del'>-</div><div class='del'>-                                dict_unref (dict_req);</div><div class='del'>-</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        if (is_dir) {</div><div class='add'>+            local-&gt;dir_count++;</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_lookup_everywhere_done (frame, this);</div><div class='del'>-        }</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "found on %s directory %s", prev-&gt;name,</div><div class='add'>+                         loc-&gt;path);</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;file_count++;</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "found cached file on %s for %s",</div><div class='add'>+                         prev-&gt;name, loc-&gt;path);</div><div class='ctx'> </div><div class='add'>+            if (!local-&gt;cached_subvol) {</div><div class='add'>+                /* found one file */</div><div class='add'>+                dht_iatt_merge(this, &amp;local-&gt;stbuf, buf);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_lookup_everywhere (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        dht_conf_t     *conf = NULL;</div><div class='del'>-        dht_local_t    *local = NULL;</div><div class='del'>-        int             i = 0;</div><div class='del'>-        int             call_cnt = 0;</div><div class='add'>+                local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+                local-&gt;cached_subvol = prev;</div><div class='add'>+</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "storing cached on %s file"</div><div class='add'>+                             " %s",</div><div class='add'>+                             prev-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+                dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+</div><div class='add'>+                gf_uuid_copy(local-&gt;skip_unlink.cached_gfid, buf-&gt;ia_gfid);</div><div class='add'>+            } else {</div><div class='add'>+                /* This is where we need 'rename' both entries logic */</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       DHT_MSG_FILE_ON_MULT_SUBVOL,</div><div class='add'>+                       "multiple subvolumes (%s and %s) have "</div><div class='add'>+                       "file %s (preferably rename the file "</div><div class='add'>+                       "in the backend,and do a fresh lookup)",</div><div class='add'>+                       local-&gt;cached_subvol-&gt;name, prev-&gt;name, local-&gt;loc.path);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", loc, out);</div><div class='add'>+    if (is_linkfile) {</div><div class='add'>+        ret = dict_get_int32(xattr, GLUSTERFS_OPEN_FD_COUNT, &amp;fd_count);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+        /*  Any linkto file found on the non-hashed subvolume should</div><div class='add'>+         *  be unlinked (performed in the "else if" block below)</div><div class='add'>+         *</div><div class='add'>+         *  But if a linkto file is found on hashed subvolume, it may be</div><div class='add'>+         *  pointing to valid cached node. So unlinking of linkto</div><div class='add'>+         *  file on hashed subvolume is skipped and inside</div><div class='add'>+         *  dht_lookup_everywhere_done, checks are performed. If this</div><div class='add'>+         *  linkto file is found as stale linkto file, it is deleted</div><div class='add'>+         *  otherwise unlink is skipped.</div><div class='add'>+         */</div><div class='ctx'> </div><div class='del'>-        call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='add'>+        if (local-&gt;hashed_subvol &amp;&amp; local-&gt;hashed_subvol == prev) {</div><div class='add'>+            local-&gt;skip_unlink.handle_valid_link = _gf_true;</div><div class='add'>+            local-&gt;skip_unlink.opend_fd_count = fd_count;</div><div class='add'>+            local-&gt;skip_unlink.hash_links_to = link_subvol;</div><div class='add'>+            gf_uuid_copy(local-&gt;skip_unlink.hashed_gfid, buf-&gt;ia_gfid);</div><div class='add'>+</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Found"</div><div class='add'>+                         " one linkto file on hashed subvol %s "</div><div class='add'>+                         "for %s: Skipping unlinking till "</div><div class='add'>+                         "everywhere_done",</div><div class='add'>+                         prev-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+        } else if (!ret &amp;&amp; (fd_count == 0)) {</div><div class='add'>+            dict_req = dict_new();</div><div class='add'>+</div><div class='add'>+            ret = dht_fill_dict_to_avoid_unlink_of_migrating_file(dict_req);</div><div class='add'>+</div><div class='add'>+            if (ret) {</div><div class='add'>+                /* Skip unlinking for dict_failure</div><div class='add'>+                 *File is found as a linkto file on non-hashed,</div><div class='add'>+                 *subvolume. In the current implementation,</div><div class='add'>+                 *finding a linkto-file on non-hashed does not</div><div class='add'>+                 *always implies that it is stale. So deletion</div><div class='add'>+                 *of file should be done only when both fd is</div><div class='add'>+                 *closed and linkto-xattr is set. In case of</div><div class='add'>+                 *dict_set failure, avoid skipping of file.</div><div class='add'>+                 *NOTE: dht_frame_return should get called for</div><div class='add'>+                 *      this block.</div><div class='add'>+                 */</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;inode)</div><div class='del'>-                local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='add'>+                dict_unref(dict_req);</div><div class='add'>+</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+                       "attempting deletion of stale linkfile "</div><div class='add'>+                       "%s on %s (hashed subvol is %s)",</div><div class='add'>+                       loc-&gt;path, prev-&gt;name,</div><div class='add'>+                       (local-&gt;hashed_subvol ? local-&gt;hashed_subvol-&gt;name</div><div class='add'>+                                             : "&lt;null&gt;"));</div><div class='add'>+                /* *</div><div class='add'>+                 * These stale files may be created using root</div><div class='add'>+                 * user. Hence deletion will work only with</div><div class='add'>+                 * root.</div><div class='add'>+                 */</div><div class='add'>+                FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+                STACK_WIND(frame, dht_lookup_unlink_cbk, prev,</div><div class='add'>+                           prev-&gt;fops-&gt;unlink, loc, 0, dict_req);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "winding lookup call to %d subvols", call_cnt);</div><div class='add'>+                dict_unref(dict_req);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_lookup_everywhere_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                   loc, local-&gt;xattr_req);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_lookup_everywhere_done(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, EINVAL, NULL, NULL, NULL, NULL);</div><div class='del'>-err:</div><div class='del'>-        return -1;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_lookup_linkfile_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                         inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                         struct iatt *postparent)</div><div class='add'>+dht_lookup_everywhere(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        xlator_t     *subvol        = NULL;</div><div class='del'>-        loc_t        *loc           = NULL;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE]     = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, unwind);</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        prev   = cookie;</div><div class='del'>-        subvol = prev;</div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        loc    = &amp;local-&gt;loc;</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                        DHT_MSG_LINK_FILE_LOOKUP_INFO,</div><div class='del'>-                        "Lookup of %s on %s (following linkfile) failed "</div><div class='del'>-                        ",gfid = %s", local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='del'>-</div><div class='del'>-                /* If cached subvol returned ENOTCONN, do not do</div><div class='del'>-                lookup_everywhere. We need to make sure linkfile does not get</div><div class='del'>-                removed, which can take away the namespace, and subvol is</div><div class='del'>-                anyways down. */</div><div class='del'>-</div><div class='del'>-                local-&gt;cached_subvol = NULL;</div><div class='del'>-                if (op_errno != ENOTCONN)</div><div class='del'>-                        goto err;</div><div class='del'>-                else</div><div class='del'>-                        goto unwind;</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", loc, out);</div><div class='ctx'> </div><div class='del'>-        if (check_is_dir (inode, stbuf, xattr)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LINK_FILE_LOOKUP_INFO,</div><div class='del'>-                        "Lookup of %s on %s (following linkfile) reached dir,"</div><div class='del'>-                        " gfid = %s", local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (check_is_linkfile (inode, stbuf, xattr, conf-&gt;link_xattr_name)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LINK_FILE_LOOKUP_INFO,</div><div class='del'>-                        "lookup of %s on %s (following linkfile) reached link,"</div><div class='del'>-                        "gfid = %s", local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_compare (local-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                        "%s: gfid different on data file on %s,"</div><div class='del'>-                        " gfid local = %s, gfid node = %s ",</div><div class='del'>-                        local-&gt;loc.path, subvol-&gt;name, gfid,</div><div class='del'>-                        uuid_utoa(stbuf-&gt;ia_gfid));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;inode)</div><div class='add'>+        local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if ((stbuf-&gt;ia_nlink == 1)</div><div class='del'>-            &amp;&amp; (conf &amp;&amp; conf-&gt;unhashed_sticky_bit)) {</div><div class='del'>-                stbuf-&gt;ia_prot.sticky = 1;</div><div class='del'>-        }</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "winding lookup call to %d subvols", call_cnt);</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='del'>-                        "Failed to set layout for subvolume %s,"</div><div class='del'>-                        "gfid = %s", prev-&gt;name, gfid);</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_lookup_everywhere_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, loc,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='add'>+    return 0;</div><div class='add'>+out:</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, EINVAL, NULL, NULL, NULL, NULL);</div><div class='add'>+err:</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_lookup_linkfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                        struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                        struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, unwind);</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    subvol = prev;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, op_errno, DHT_MSG_LINK_FILE_LOOKUP_INFO,</div><div class='add'>+               "Lookup of %s on %s (following linkfile) failed "</div><div class='add'>+               ",gfid = %s",</div><div class='add'>+               local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='add'>+</div><div class='add'>+        /* If cached subvol returned ENOTCONN, do not do</div><div class='add'>+        lookup_everywhere. We need to make sure linkfile does not get</div><div class='add'>+        removed, which can take away the namespace, and subvol is</div><div class='add'>+        anyways down. */</div><div class='add'>+</div><div class='add'>+        local-&gt;cached_subvol = NULL;</div><div class='add'>+        if (op_errno != ENOTCONN)</div><div class='add'>+            goto err;</div><div class='add'>+        else</div><div class='add'>+            goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (check_is_dir(inode, stbuf, xattr)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LINK_FILE_LOOKUP_INFO,</div><div class='add'>+               "Lookup of %s on %s (following linkfile) reached dir,"</div><div class='add'>+               " gfid = %s",</div><div class='add'>+               local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LINK_FILE_LOOKUP_INFO,</div><div class='add'>+               "lookup of %s on %s (following linkfile) reached link,"</div><div class='add'>+               "gfid = %s",</div><div class='add'>+               local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_compare(local-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+               "%s: gfid different on data file on %s,"</div><div class='add'>+               " gfid local = %s, gfid node = %s ",</div><div class='add'>+               local-&gt;loc.path, subvol-&gt;name, gfid, uuid_utoa(stbuf-&gt;ia_gfid));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((stbuf-&gt;ia_nlink == 1) &amp;&amp; (conf &amp;&amp; conf-&gt;unhashed_sticky_bit)) {</div><div class='add'>+        stbuf-&gt;ia_prot.sticky = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='add'>+               "Failed to set layout for subvolume %s,"</div><div class='add'>+               "gfid = %s",</div><div class='add'>+               prev-&gt;name, gfid);</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (postparent);</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='del'>-                          postparent);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(postparent);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='add'>+                     postparent);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_lookup_everywhere (frame, this, loc);</div><div class='add'>+    dht_lookup_everywhere(frame, this, loc);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_lookup_directory (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+dht_lookup_directory(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           ret = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", loc, unwind);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        call_cnt        = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;layout = dht_layout_new (this, conf-&gt;subvolume_cnt);</div><div class='del'>-        if (!local-&gt;layout) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr != NULL) {</div><div class='del'>-                dict_unref (local-&gt;xattr);</div><div class='del'>-                local-&gt;xattr = NULL;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='add'>+    if (!local-&gt;layout) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                ret = dict_set_gfuuid (local-&gt;xattr_req, "gfid-req",</div><div class='del'>-                                       local-&gt;gfid, true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s: Failed to set dictionary value:"</div><div class='del'>-                                " key = gfid-req", local-&gt;loc.path);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;xattr != NULL) {</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='add'>+        local-&gt;xattr = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_lookup_dir_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (!gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        ret = dict_set_gfuuid(local-&gt;xattr_req, "gfid-req", local-&gt;gfid, true);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s: Failed to set dictionary value:"</div><div class='add'>+                   " key = gfid-req",</div><div class='add'>+                   local-&gt;loc.path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, dht_lookup_dir_cbk, conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+            conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Code to get hashed subvol based on inode and loc</div><div class='hunk'>@@ -3149,246 +2930,230 @@ out:</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-dht_inode_get_hashed_subvol (inode_t *inode, xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        char                    *path           = NULL;</div><div class='del'>-        loc_t                    populate_loc   = {0, };</div><div class='del'>-        char                    *name           = NULL;</div><div class='del'>-        xlator_t                *hash_subvol    = NULL;</div><div class='del'>-</div><div class='del'>-        if (!inode)</div><div class='del'>-                return hash_subvol;</div><div class='del'>-</div><div class='del'>-        if (loc &amp;&amp; loc-&gt;parent &amp;&amp; loc-&gt;path) {</div><div class='del'>-                if (!loc-&gt;name) {</div><div class='del'>-                        name = strrchr (loc-&gt;path, '/');</div><div class='del'>-                        if (name) {</div><div class='del'>-                                loc-&gt;name = name + 1;</div><div class='del'>-                        } else {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                hash_subvol = dht_subvol_get_hashed (this, loc);</div><div class='add'>+dht_inode_get_hashed_subvol(inode_t *inode, xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    loc_t populate_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    xlator_t *hash_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    if (!inode)</div><div class='add'>+        return hash_subvol;</div><div class='add'>+</div><div class='add'>+    if (loc &amp;&amp; loc-&gt;parent &amp;&amp; loc-&gt;path) {</div><div class='add'>+        if (!loc-&gt;name) {</div><div class='add'>+            name = strrchr(loc-&gt;path, '/');</div><div class='add'>+            if (name) {</div><div class='add'>+                loc-&gt;name = name + 1;</div><div class='add'>+            } else {</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        hash_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!gf_uuid_is_null (inode-&gt;gfid)) {</div><div class='del'>-                populate_loc.inode = inode_ref (inode);</div><div class='del'>-                populate_loc.parent = inode_parent (populate_loc.inode,</div><div class='del'>-                                                    NULL, NULL);</div><div class='del'>-                inode_path (populate_loc.inode, NULL, &amp;path);</div><div class='add'>+    if (!gf_uuid_is_null(inode-&gt;gfid)) {</div><div class='add'>+        populate_loc.inode = inode_ref(inode);</div><div class='add'>+        populate_loc.parent = inode_parent(populate_loc.inode, NULL, NULL);</div><div class='add'>+        inode_path(populate_loc.inode, NULL, &amp;path);</div><div class='ctx'> </div><div class='del'>-                if (!path)</div><div class='del'>-                        goto out;</div><div class='add'>+        if (!path)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                populate_loc.path = path;</div><div class='del'>-                if (!populate_loc.name &amp;&amp; populate_loc.path) {</div><div class='del'>-                        name = strrchr (populate_loc.path, '/');</div><div class='del'>-                        if (name) {</div><div class='del'>-                                populate_loc.name = name + 1;</div><div class='add'>+        populate_loc.path = path;</div><div class='add'>+        if (!populate_loc.name &amp;&amp; populate_loc.path) {</div><div class='add'>+            name = strrchr(populate_loc.path, '/');</div><div class='add'>+            if (name) {</div><div class='add'>+                populate_loc.name = name + 1;</div><div class='ctx'> </div><div class='del'>-                        } else {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                hash_subvol = dht_subvol_get_hashed (this, &amp;populate_loc);</div><div class='add'>+            } else {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        hash_subvol = dht_subvol_get_hashed(this, &amp;populate_loc);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (populate_loc.inode)</div><div class='del'>-                loc_wipe (&amp;populate_loc);</div><div class='del'>-        return hash_subvol;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno,</div><div class='del'>-                inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        char          is_linkfile   = 0;</div><div class='del'>-        char          is_dir        = 0;</div><div class='del'>-        xlator_t     *subvol        = NULL;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        loc_t        *loc           = NULL;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        dht_layout_t *parent_layout = NULL;</div><div class='del'>-        uint32_t      vol_commit_hash = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        loc   = &amp;local-&gt;loc;</div><div class='add'>+    if (populate_loc.inode)</div><div class='add'>+        loc_wipe(&amp;populate_loc);</div><div class='add'>+    return hash_subvol;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+               struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    char is_linkfile = 0;</div><div class='add'>+    char is_dir = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_layout_t *parent_layout = NULL;</div><div class='add'>+    uint32_t vol_commit_hash = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    /* This is required for handling stale linkfile deletion,</div><div class='add'>+     * or any more call which happens from this 'loc'.</div><div class='add'>+     */</div><div class='add'>+    if (!op_ret &amp;&amp; gf_uuid_is_null(local-&gt;gfid))</div><div class='add'>+        memcpy(local-&gt;gfid, stbuf-&gt;ia_gfid, 16);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                 "fresh_lookup returned for %s with op_ret %d", loc-&gt;path,</div><div class='add'>+                 op_ret);</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;vch_forced) {</div><div class='add'>+        ret = dict_get_uint32(xattr, conf-&gt;commithash_xattr_name,</div><div class='add'>+                              &amp;vol_commit_hash);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            conf-&gt;vol_commit_hash = vol_commit_hash;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is required for handling stale linkfile deletion,</div><div class='del'>-         * or any more call which happens from this 'loc'.</div><div class='del'>-         */</div><div class='del'>-        if (!op_ret &amp;&amp; gf_uuid_is_null (local-&gt;gfid))</div><div class='del'>-                memcpy (local-&gt;gfid, stbuf-&gt;ia_gfid, 16);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                      "fresh_lookup returned for %s with op_ret %d",</div><div class='del'>-                      loc-&gt;path, op_ret);</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;vch_forced) {</div><div class='del'>-                ret = dict_get_uint32 (xattr, conf-&gt;commithash_xattr_name,</div><div class='del'>-                                       &amp;vol_commit_hash);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        conf-&gt;vol_commit_hash = vol_commit_hash;</div><div class='del'>-                }</div><div class='add'>+    if (ENTRY_MISSING(op_ret, op_errno)) {</div><div class='add'>+        if (1 == conf-&gt;subvolume_cnt) {</div><div class='add'>+            /* No need to lookup again */</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ENTRY_MISSING (op_ret, op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Entry %s missing on subvol %s", loc-&gt;path,</div><div class='add'>+                     prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-                if (1 == conf-&gt;subvolume_cnt) {</div><div class='del'>-                        /* No need to lookup again */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        /* lookup-optimize supersedes lookup-unhashed settings,</div><div class='add'>+         *   - so if it is set, do not process search_unhashed</div><div class='add'>+         *   - except, in the case of rebalance daemon, we want to</div><div class='add'>+         *     force the lookup_everywhere behavior */</div><div class='add'>+        if (!conf-&gt;defrag &amp;&amp; conf-&gt;lookup_optimize &amp;&amp; loc-&gt;parent) {</div><div class='add'>+            ret = dht_inode_ctx_layout_get(loc-&gt;parent, this, &amp;parent_layout);</div><div class='add'>+            if (ret || !parent_layout ||</div><div class='add'>+                (parent_layout-&gt;commit_hash != conf-&gt;vol_commit_hash)) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "hashes don't match (ret - %d,"</div><div class='add'>+                             " parent_layout - %p, parent_hash - %x,"</div><div class='add'>+                             " vol_hash - %x), do global lookup",</div><div class='add'>+                             ret, parent_layout,</div><div class='add'>+                             (parent_layout ? parent_layout-&gt;commit_hash : -1),</div><div class='add'>+                             conf-&gt;vol_commit_hash);</div><div class='add'>+                local-&gt;op_errno = ENOENT;</div><div class='add'>+                dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if (conf-&gt;search_unhashed == GF_DHT_LOOKUP_UNHASHED_ON) {</div><div class='add'>+                local-&gt;op_errno = ENOENT;</div><div class='add'>+                dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Entry %s missing on subvol %s",</div><div class='del'>-                              loc-&gt;path, prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                /* lookup-optimize supersedes lookup-unhashed settings,</div><div class='del'>-                 *   - so if it is set, do not process search_unhashed</div><div class='del'>-                 *   - except, in the case of rebalance daemon, we want to</div><div class='del'>-                 *     force the lookup_everywhere behavior */</div><div class='del'>-                if (!conf-&gt;defrag &amp;&amp; conf-&gt;lookup_optimize &amp;&amp; loc-&gt;parent) {</div><div class='del'>-                        ret = dht_inode_ctx_layout_get (loc-&gt;parent, this,</div><div class='del'>-                                                        &amp;parent_layout);</div><div class='del'>-                        if (ret || !parent_layout ||</div><div class='del'>-                            (parent_layout-&gt;commit_hash !=</div><div class='del'>-                             conf-&gt;vol_commit_hash)) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "hashes don't match (ret - %d,"</div><div class='del'>-                                              " parent_layout - %p, parent_hash - %x,"</div><div class='del'>-                                              " vol_hash - %x), do global lookup",</div><div class='del'>-                                              ret, parent_layout,</div><div class='del'>-                                              (parent_layout ?</div><div class='del'>-                                              parent_layout-&gt;commit_hash : -1),</div><div class='del'>-                                              conf-&gt;vol_commit_hash);</div><div class='del'>-                                local-&gt;op_errno = ENOENT;</div><div class='del'>-                                dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        if (conf-&gt;search_unhashed ==</div><div class='del'>-                            GF_DHT_LOOKUP_UNHASHED_ON) {</div><div class='del'>-                                local-&gt;op_errno = ENOENT;</div><div class='del'>-                                dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if ((conf-&gt;search_unhashed ==</div><div class='del'>-                            GF_DHT_LOOKUP_UNHASHED_AUTO) &amp;&amp;</div><div class='del'>-                            (loc-&gt;parent)) {</div><div class='del'>-                                ret = dht_inode_ctx_layout_get (loc-&gt;parent,</div><div class='del'>-                                                                this,</div><div class='del'>-                                                                &amp;parent_layout);</div><div class='del'>-                                if (ret || !parent_layout)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                if (parent_layout-&gt;search_unhashed) {</div><div class='del'>-                                        local-&gt;op_errno = ENOENT;</div><div class='del'>-                                        dht_lookup_everywhere (frame, this,</div><div class='del'>-                                                               loc);</div><div class='del'>-                                        return 0;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            if ((conf-&gt;search_unhashed == GF_DHT_LOOKUP_UNHASHED_AUTO) &amp;&amp;</div><div class='add'>+                (loc-&gt;parent)) {</div><div class='add'>+                ret = dht_inode_ctx_layout_get(loc-&gt;parent, this,</div><div class='add'>+                                               &amp;parent_layout);</div><div class='add'>+                if (ret || !parent_layout)</div><div class='add'>+                    goto out;</div><div class='add'>+                if (parent_layout-&gt;search_unhashed) {</div><div class='add'>+                    local-&gt;op_errno = ENOENT;</div><div class='add'>+                    dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+                    return 0;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                is_dir      = check_is_dir (inode, stbuf, xattr);</div><div class='del'>-                if (is_dir) {</div><div class='del'>-                        local-&gt;inode = inode_ref (inode);</div><div class='del'>-                        local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                }</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        is_dir = check_is_dir(inode, stbuf, xattr);</div><div class='add'>+        if (is_dir) {</div><div class='add'>+            local-&gt;inode = inode_ref(inode);</div><div class='add'>+            local-&gt;xattr = dict_ref(xattr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (is_dir || (op_ret == -1 &amp;&amp; op_errno == ENOTCONN)) {</div><div class='del'>-                dht_lookup_directory (frame, this, &amp;local-&gt;loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (is_dir || (op_ret == -1 &amp;&amp; op_errno == ENOTCONN)) {</div><div class='add'>+        dht_lookup_directory(frame, this, &amp;local-&gt;loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "Lookup of %s for subvolume"</div><div class='del'>-                              " %s failed", loc-&gt;path,</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                     "Lookup of %s for subvolume"</div><div class='add'>+                     " %s failed",</div><div class='add'>+                     loc-&gt;path, prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        is_linkfile = check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                         conf-&gt;link_xattr_name);</div><div class='add'>+    is_linkfile = check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name);</div><div class='ctx'> </div><div class='del'>-        if (!is_linkfile) {</div><div class='del'>-                /* non-directory and not a linkfile */</div><div class='add'>+    if (!is_linkfile) {</div><div class='add'>+        /* non-directory and not a linkfile */</div><div class='ctx'> </div><div class='del'>-                ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='del'>-                                "could not set pre-set layout for subvolume %s",</div><div class='del'>-                                prev-&gt;name);</div><div class='del'>-                        op_ret   = -1;</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LAYOUT_PRESET_FAILED,</div><div class='add'>+                   "could not set pre-set layout for subvolume %s", prev-&gt;name);</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = dht_linkfile_subvol (this, inode, stbuf, xattr);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_INFO, "linkfile not having link "</div><div class='del'>-                        "subvol for %s", loc-&gt;path);</div><div class='add'>+    subvol = dht_linkfile_subvol(this, inode, stbuf, xattr);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+               "linkfile not having link "</div><div class='add'>+               "subvol for %s",</div><div class='add'>+               loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "linkfile not having link subvolume. path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "linkfile not having link subvolume. path=%s", loc-&gt;path);</div><div class='add'>+        dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "Calling lookup on linkto target %s for path %s",</div><div class='del'>-                      subvol-&gt;name, loc-&gt;path);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "Calling lookup on linkto target %s for path %s", subvol-&gt;name,</div><div class='add'>+                 loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_lookup_linkfile_cbk, subvol,</div><div class='del'>-                           subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_lookup_linkfile_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /*</div><div class='del'>-         * FIXME: postparent-&gt;ia_size and postparent-&gt;st_blocks do not have</div><div class='del'>-         * correct values. since, postparent corresponds to a directory these</div><div class='del'>-         * two members should have values equal to sum of corresponding values</div><div class='del'>-         * from each of the subvolume. See dht_iatt_merge for reference.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (!op_ret &amp;&amp; local &amp;&amp; local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (postparent);</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='del'>-                          postparent);</div><div class='add'>+    /*</div><div class='add'>+     * FIXME: postparent-&gt;ia_size and postparent-&gt;st_blocks do not have</div><div class='add'>+     * correct values. since, postparent corresponds to a directory these</div><div class='add'>+     * two members should have values equal to sum of corresponding values</div><div class='add'>+     * from each of the subvolume. See dht_iatt_merge for reference.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (!op_ret &amp;&amp; local &amp;&amp; local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(postparent);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='add'>+                     postparent);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* For directories, check if acl xattrs have been requested (by the acl xlator),</div><div class='hunk'>@@ -3396,3537 +3161,3339 @@ err:</div><div class='ctx'>  * perform proper self-healing of dirs</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-dht_check_and_set_acl_xattr_req (xlator_t *this, dict_t *xattr_req)</div><div class='add'>+dht_check_and_set_acl_xattr_req(xlator_t *this, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (xattr_req);</div><div class='add'>+    GF_ASSERT(xattr_req);</div><div class='ctx'> </div><div class='del'>-        if (!dict_get (xattr_req, POSIX_ACL_ACCESS_XATTR)) {</div><div class='del'>-                ret = dict_set_int8 (xattr_req, POSIX_ACL_ACCESS_XATTR, 0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary value:key = %s",</div><div class='del'>-                                POSIX_ACL_ACCESS_XATTR);</div><div class='del'>-        }</div><div class='add'>+    if (!dict_get(xattr_req, POSIX_ACL_ACCESS_XATTR)) {</div><div class='add'>+        ret = dict_set_int8(xattr_req, POSIX_ACL_ACCESS_XATTR, 0);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary value:key = %s",</div><div class='add'>+                   POSIX_ACL_ACCESS_XATTR);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dict_get (xattr_req, POSIX_ACL_DEFAULT_XATTR)) {</div><div class='del'>-                ret = dict_set_int8 (xattr_req, POSIX_ACL_DEFAULT_XATTR, 0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary value:key = %s",</div><div class='del'>-                                POSIX_ACL_DEFAULT_XATTR);</div><div class='del'>-        }</div><div class='add'>+    if (!dict_get(xattr_req, POSIX_ACL_DEFAULT_XATTR)) {</div><div class='add'>+        ret = dict_set_int8(xattr_req, POSIX_ACL_DEFAULT_XATTR, 0);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary value:key = %s",</div><div class='add'>+                   POSIX_ACL_DEFAULT_XATTR);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* for directories, we need the following info:</div><div class='ctx'>  * the layout : trusted.glusterfs.dht</div><div class='ctx'>  * the mds information : trusted.glusterfs.dht.mds</div><div class='ctx'>  * the acl info: See above</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dht_set_dir_xattr_req (xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='del'>-{</div><div class='del'>-        int ret   = -EINVAL;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                goto err;</div><div class='add'>+dht_set_dir_xattr_req(xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='add'>+{</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Xattr to get the layout for a directory</div><div class='add'>+     */</div><div class='add'>+    ret = dict_set_uint32(xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value:key = %s for "</div><div class='add'>+               "path %s",</div><div class='add'>+               conf-&gt;xattr_name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Non-fatal failure */</div><div class='add'>+    ret = dict_set_uint32(xattr_req, conf-&gt;mds_xattr_key, 4);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value:key = %s for "</div><div class='add'>+               "path %s",</div><div class='add'>+               conf-&gt;mds_xattr_key, loc-&gt;path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_check_and_set_acl_xattr_req(this, xattr_req);</div><div class='add'>+    ret = 0;</div><div class='add'>+err:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_set_file_xattr_req(xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='add'>+{</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Used to check whether this is a linkto file.</div><div class='add'>+     */</div><div class='add'>+    ret = dict_set_uint32(xattr_req, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value:key = %s for "</div><div class='add'>+               "path %s",</div><div class='add'>+               conf-&gt;link_xattr_name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is used to make sure we don't unlink linkto files</div><div class='add'>+     * which are the target of an ongoing file migration.</div><div class='add'>+     */</div><div class='add'>+    ret = dict_set_uint32(xattr_req, GLUSTERFS_OPEN_FD_COUNT, 4);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value:key = %s for "</div><div class='add'>+               "path %s",</div><div class='add'>+               GLUSTERFS_OPEN_FD_COUNT, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+err:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_do_revalidate(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int gen = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "path = %s. No layout found in the inode ctx.", loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Generation number has changed. This layout may be stale. */</div><div class='add'>+    if (layout-&gt;gen &amp;&amp; (layout-&gt;gen &lt; conf-&gt;gen)) {</div><div class='add'>+        gen = layout-&gt;gen;</div><div class='add'>+        dht_layout_unref(this, local-&gt;layout);</div><div class='add'>+        local-&gt;layout = NULL;</div><div class='add'>+        local-&gt;cached_subvol = NULL;</div><div class='add'>+</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "path = %s. In memory layout may be stale."</div><div class='add'>+                     "(layout-&gt;gen (%d) is less than "</div><div class='add'>+                     "conf-&gt;gen (%d)). Calling fresh lookup.",</div><div class='add'>+                     loc-&gt;path, gen, conf-&gt;gen);</div><div class='add'>+</div><div class='add'>+        dht_do_fresh_lookup(frame, this, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+</div><div class='add'>+    /* Since we don't know whether this has changed,</div><div class='add'>+     * request all xattrs*/</div><div class='add'>+    ret = dht_set_file_xattr_req(this, loc, local-&gt;xattr_req);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_set_dir_xattr_req(this, loc, local-&gt;xattr_req);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(local-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_get(local-&gt;inode, this, &amp;mds_subvol);</div><div class='add'>+        if (ret || !mds_subvol) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "path = %s. No mds subvol in inode ctx",</div><div class='add'>+                         local-&gt;loc.path);</div><div class='ctx'>         }</div><div class='add'>+        local-&gt;mds_subvol = mds_subvol;</div><div class='add'>+        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        call_cnt = local-&gt;call_cnt;</div><div class='ctx'> </div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-                goto err;</div><div class='add'>+        for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_revalidate_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Xattr to get the layout for a directory</div><div class='del'>-         */</div><div class='del'>-        ret = dict_set_uint32 (xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value:key = %s for "</div><div class='del'>-                        "path %s", conf-&gt;xattr_name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-         }</div><div class='add'>+    /* If not a dir, this should be 1 */</div><div class='add'>+    local-&gt;call_cnt = layout-&gt;cnt;</div><div class='add'>+    call_cnt = local-&gt;call_cnt;</div><div class='ctx'> </div><div class='del'>-        /*Non-fatal failure */</div><div class='del'>-        ret = dict_set_uint32 (xattr_req, conf-&gt;mds_xattr_key, 4);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value:key = %s for "</div><div class='del'>-                        "path %s", conf-&gt;mds_xattr_key, loc-&gt;path);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='ctx'> </div><div class='del'>-        dht_check_and_set_acl_xattr_req (this, xattr_req);</div><div class='del'>-        ret = 0;</div><div class='del'>-err:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "path = %s. Calling "</div><div class='add'>+                     "revalidate lookup on %s",</div><div class='add'>+                     loc-&gt;path, subvol-&gt;name);</div><div class='ctx'> </div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_revalidate_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+err:</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_do_fresh_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Since we don't know whether this is a file or a directory,</div><div class='add'>+     * request all xattrs*/</div><div class='add'>+    ret = dht_set_file_xattr_req(this, loc, local-&gt;xattr_req);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_set_dir_xattr_req(this, loc, local-&gt;xattr_req);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This should have been set in dht_lookup */</div><div class='add'>+    hashed_subvol = local-&gt;hashed_subvol;</div><div class='add'>+</div><div class='add'>+    if (!hashed_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "%s: no subvolume in layout for path, "</div><div class='add'>+                     "checking on all the subvols to see if "</div><div class='add'>+                     "it is a directory",</div><div class='add'>+                     loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-int dht_set_file_xattr_req (xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='del'>-{</div><div class='del'>-        int ret   = -EINVAL;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='add'>+        call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                goto err;</div><div class='add'>+        local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='add'>+        if (!local-&gt;layout) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "%s: Found null hashed subvol. Calling lookup"</div><div class='add'>+                     " on all nodes.",</div><div class='add'>+                     loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        /* Used to check whether this is a linkto file.</div><div class='del'>-         */</div><div class='del'>-        ret = dict_set_uint32 (xattr_req,</div><div class='del'>-                               conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value:key = %s for "</div><div class='del'>-                        "path %s", conf-&gt;link_xattr_name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='add'>+        for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_lookup_dir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is used to make sure we don't unlink linkto files</div><div class='del'>-         * which are the target of an ongoing file migration.</div><div class='del'>-         */</div><div class='del'>-        ret = dict_set_uint32 (xattr_req,</div><div class='del'>-                               GLUSTERFS_OPEN_FD_COUNT, 4);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value:key = %s for "</div><div class='del'>-                        "path %s", GLUSTERFS_OPEN_FD_COUNT, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    /* if we have the hashed_subvol, send the lookup there first so</div><div class='add'>+     * as to see whether we have a file or a directory */</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "Calling fresh lookup for %s on"</div><div class='add'>+                 " %s",</div><div class='add'>+                 loc-&gt;path, hashed_subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_lookup_cbk, hashed_subvol, hashed_subvol,</div><div class='add'>+                      hashed_subvol-&gt;fops-&gt;lookup, loc, local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_do_revalidate (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+dht_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        xlator_t     *mds_subvol = NULL;</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        int           gen = 0;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    loc_t new_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "path = %s. No layout found in the inode ctx.",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Generation number has changed. This layout may be stale. */</div><div class='del'>-        if (layout-&gt;gen &amp;&amp; (layout-&gt;gen &lt; conf-&gt;gen)) {</div><div class='del'>-                gen = layout-&gt;gen;</div><div class='del'>-                dht_layout_unref (this, local-&gt;layout);</div><div class='del'>-                local-&gt;layout = NULL;</div><div class='del'>-                local-&gt;cached_subvol = NULL;</div><div class='del'>-</div><div class='del'>-                gf_msg_debug(this-&gt;name, 0,</div><div class='del'>-                             "path = %s. In memory layout may be stale."</div><div class='del'>-                             "(layout-&gt;gen (%d) is less than "</div><div class='del'>-                             "conf-&gt;gen (%d)). Calling fresh lookup.",</div><div class='del'>-                             loc-&gt;path, gen, conf-&gt;gen);</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_LOOKUP);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                dht_do_fresh_lookup (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_filter_loc_subvol_key(this, loc, &amp;new_loc, &amp;hashed_subvol);</div><div class='add'>+    if (ret) {</div><div class='add'>+        loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+        ret = loc_dup(&amp;new_loc, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='add'>+        /* we no longer need 'new_loc' entries */</div><div class='add'>+        loc_wipe(&amp;new_loc);</div><div class='ctx'> </div><div class='del'>-        /* Since we don't know whether this has changed,</div><div class='del'>-         * request all xattrs*/</div><div class='del'>-        ret = dht_set_file_xattr_req (this, loc, local-&gt;xattr_req);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto err;</div><div class='add'>+        /* check if loc_dup() is successful */</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            op_errno = errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, errno,</div><div class='add'>+                         "copying location failed for path=%s", loc-&gt;path);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_set_dir_xattr_req (this, loc, local-&gt;xattr_req);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (xattr_req) {</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (IA_ISDIR (local-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_get (local-&gt;inode, this,</div><div class='del'>-                                                &amp;mds_subvol);</div><div class='del'>-                if (ret || !mds_subvol) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "path = %s. No mds subvol in inode ctx",</div><div class='del'>-                                      local-&gt;loc.path);</div><div class='del'>-                }</div><div class='del'>-                local-&gt;mds_subvol = mds_subvol;</div><div class='del'>-                local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-                call_cnt = local-&gt;call_cnt;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_revalidate_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           loc, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* Nameless lookup */</div><div class='ctx'> </div><div class='del'>-        /* If not a dir, this should be 1 */</div><div class='del'>-        local-&gt;call_cnt = layout-&gt;cnt;</div><div class='del'>-        call_cnt = local-&gt;call_cnt;</div><div class='add'>+    if (gf_uuid_is_null(loc-&gt;pargfid) &amp;&amp; !gf_uuid_is_null(loc-&gt;gfid) &amp;&amp;</div><div class='add'>+        !__is_root_gfid(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+        local-&gt;cached_subvol = NULL;</div><div class='add'>+        dht_do_discover(frame, this, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='add'>+    if (loc_is_root(loc)) {</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;commithash_xattr_name,</div><div class='add'>+                              sizeof(uint32_t));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "path = %s. Calling "</div><div class='del'>-                              "revalidate lookup on %s",</div><div class='del'>-                              loc-&gt;path, subvol-&gt;name);</div><div class='add'>+    if (!hashed_subvol)</div><div class='add'>+        hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    local-&gt;hashed_subvol = hashed_subvol;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_revalidate_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    /* The entry has been looked up before and has an inode_ctx set</div><div class='add'>+     */</div><div class='add'>+    if (is_revalidate(loc)) {</div><div class='add'>+        dht_do_revalidate(frame, this, loc);</div><div class='ctx'>         return 0;</div><div class='del'>-err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='add'>+    } else {</div><div class='add'>+        dht_do_fresh_lookup(frame, this, loc);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_do_fresh_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='del'>-{</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        dht_conf_t   *conf  = NULL;</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        int           i        = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Since we don't know whether this is a file or a directory,</div><div class='del'>-         * request all xattrs*/</div><div class='del'>-        ret = dht_set_file_xattr_req (this, loc, local-&gt;xattr_req);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_set_dir_xattr_req (this, loc, local-&gt;xattr_req);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* This should have been set in dht_lookup */</div><div class='del'>-        hashed_subvol = local-&gt;hashed_subvol;</div><div class='del'>-</div><div class='del'>-        if (!hashed_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "%s: no subvolume in layout for path, "</div><div class='del'>-                              "checking on all the subvols to see if "</div><div class='del'>-                              "it is a directory", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                call_cnt   = conf-&gt;subvolume_cnt;</div><div class='del'>-                local-&gt;call_cnt = call_cnt;</div><div class='del'>-</div><div class='del'>-                local-&gt;layout = dht_layout_new (this,</div><div class='del'>-                                                conf-&gt;subvolume_cnt);</div><div class='del'>-                if (!local-&gt;layout) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "%s: Found null hashed subvol. Calling lookup"</div><div class='del'>-                              " on all nodes.", loc-&gt;path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_lookup_dir_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if we have the hashed_subvol, send the lookup there first so</div><div class='del'>-         * as to see whether we have a file or a directory */</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Calling fresh lookup for %s on"</div><div class='del'>-                      " %s", loc-&gt;path, hashed_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_lookup_cbk, hashed_subvol,</div><div class='del'>-                           hashed_subvol, hashed_subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                           loc, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *loc, dict_t *xattr_req)</div><div class='add'>+dht_unlink_linkfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, struct iatt *preparent,</div><div class='add'>+                        struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        loc_t         new_loc = {0,};</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_LOOKUP);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_filter_loc_subvol_key (this, loc, &amp;new_loc,</div><div class='del'>-                                         &amp;hashed_subvol);</div><div class='del'>-        if (ret) {</div><div class='del'>-                loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-                ret = loc_dup (&amp;new_loc, &amp;local-&gt;loc);</div><div class='del'>-</div><div class='del'>-                /* we no longer need 'new_loc' entries */</div><div class='del'>-                loc_wipe (&amp;new_loc);</div><div class='del'>-</div><div class='del'>-                /* check if loc_dup() is successful */</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        op_errno = errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, errno,</div><div class='del'>-                                      "copying location failed for path=%s",</div><div class='del'>-                                      loc-&gt;path);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xattr_req) {</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Nameless lookup */</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (loc-&gt;pargfid) &amp;&amp; !gf_uuid_is_null (loc-&gt;gfid) &amp;&amp;</div><div class='del'>-            !__is_root_gfid (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-                local-&gt;cached_subvol = NULL;</div><div class='del'>-                dht_do_discover (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (loc_is_root (loc)) {</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;commithash_xattr_name,</div><div class='del'>-                                       sizeof(uint32_t));</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((op_ret == -1) &amp;&amp;</div><div class='add'>+            !((op_errno == ENOENT) || (op_errno == ENOTCONN))) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "Unlink link: subvolume %s"</div><div class='add'>+                         " returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!hashed_subvol)</div><div class='del'>-                hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        local-&gt;hashed_subvol = hashed_subvol;</div><div class='del'>-</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* The entry has been looked up before and has an inode_ctx set</div><div class='del'>-         */</div><div class='del'>-        if (is_revalidate (loc)) {</div><div class='del'>-                dht_do_revalidate (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        } else  {</div><div class='del'>-                dht_do_fresh_lookup (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_unlink_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                         struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *prev           = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((op_ret == -1) &amp;&amp; !((op_errno == ENOENT) ||</div><div class='del'>-                                        (op_errno == ENOTCONN))) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "Unlink link: subvolume %s"</div><div class='del'>-                                      " returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if (op_errno != ENOENT) {</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            } else {</div><div class='ctx'>                 local-&gt;op_ret = 0;</div><div class='add'>+            }</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "Unlink: subvolume %s returned -1", prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *prev           = NULL;</div><div class='del'>-        xlator_t        *hashed_subvol  = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        if (op_errno != ENOENT) {</div><div class='del'>-                                local-&gt;op_ret   = -1;</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                        } else {</div><div class='del'>-                                local-&gt;op_ret = 0;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "Unlink: subvolume %s returned -1",</div><div class='del'>-                                       prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                local-&gt;postparent = *postparent;</div><div class='del'>-                local-&gt;preparent = *preparent;</div><div class='add'>+        local-&gt;postparent = *postparent;</div><div class='add'>+        local-&gt;preparent = *preparent;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;preparent, 0);</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;preparent, 0);</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;op_ret) {</div><div class='del'>-                hashed_subvol = dht_subvol_get_hashed (this, &amp;local-&gt;loc);</div><div class='del'>-                if (hashed_subvol &amp;&amp; hashed_subvol != local-&gt;cached_subvol) {</div><div class='del'>-                        /*</div><div class='del'>-                         * If hashed and cached are different, then we need</div><div class='del'>-                         * to unlink linkfile from hashed subvol if data</div><div class='del'>-                         * file is deleted successfully</div><div class='del'>-                         */</div><div class='del'>-                         STACK_WIND_COOKIE (frame, dht_unlink_linkfile_cbk,</div><div class='del'>-                                            hashed_subvol, hashed_subvol,</div><div class='del'>-                                            hashed_subvol-&gt;fops-&gt;unlink,</div><div class='del'>-                                            &amp;local-&gt;loc, local-&gt;flags, xdata);</div><div class='del'>-                         return 0;</div><div class='del'>-                }</div><div class='add'>+    if (!local-&gt;op_ret) {</div><div class='add'>+        hashed_subvol = dht_subvol_get_hashed(this, &amp;local-&gt;loc);</div><div class='add'>+        if (hashed_subvol &amp;&amp; hashed_subvol != local-&gt;cached_subvol) {</div><div class='add'>+            /*</div><div class='add'>+             * If hashed and cached are different, then we need</div><div class='add'>+             * to unlink linkfile from hashed subvol if data</div><div class='add'>+             * file is deleted successfully</div><div class='add'>+             */</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_unlink_linkfile_cbk, hashed_subvol,</div><div class='add'>+                              hashed_subvol, hashed_subvol-&gt;fops-&gt;unlink,</div><div class='add'>+                              &amp;local-&gt;loc, local-&gt;flags, xdata);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_common_setxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+dht_common_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-         DHT_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-         return 0;</div><div class='add'>+    DHT_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-dht_fix_layout_setxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                             xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             dict_t *xdata)</div><div class='add'>+dht_fix_layout_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local   = NULL;</div><div class='del'>-        dht_layout_t  *layout  = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        /* update the layout in the inode ctx */</div><div class='add'>+        local = frame-&gt;local;</div><div class='add'>+        layout = local-&gt;selfheal.layout;</div><div class='ctx'> </div><div class='del'>-                /* update the layout in the inode ctx */</div><div class='del'>-                local = frame-&gt;local;</div><div class='del'>-                layout = local-&gt;selfheal.layout;</div><div class='add'>+        dht_layout_set(this, local-&gt;loc.inode, layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                dht_layout_set (this, local-&gt;loc.inode, layout);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-         DHT_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-         return 0;</div><div class='add'>+    DHT_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_err_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_err_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+            int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "subvolume %s returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='del'>-                    (local-&gt;fop == GF_FOP_FSETXATTR)) {</div><div class='del'>-                        DHT_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                          local-&gt;op_errno, NULL);</div><div class='del'>-                }</div><div class='del'>-                if ((local-&gt;fop == GF_FOP_REMOVEXATTR) ||</div><div class='del'>-                    (local-&gt;fop == GF_FOP_FREMOVEXATTR)) {</div><div class='del'>-                        DHT_STACK_UNWIND (removexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                          local-&gt;op_errno, NULL);</div><div class='del'>-                }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='add'>+            (local-&gt;fop == GF_FOP_FSETXATTR)) {</div><div class='add'>+            DHT_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                             NULL);</div><div class='add'>+        }</div><div class='add'>+        if ((local-&gt;fop == GF_FOP_REMOVEXATTR) ||</div><div class='add'>+            (local-&gt;fop == GF_FOP_FREMOVEXATTR)) {</div><div class='add'>+            DHT_STACK_UNWIND(removexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                             NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Set the value[] of key into dict after convert from</div><div class='ctx'>    host byte order to network byte order</div><div class='ctx'> */</div><div class='del'>-int32_t dht_dict_set_array (dict_t *dict, char *key, int32_t value[],</div><div class='del'>-                            int32_t size)</div><div class='add'>+int32_t</div><div class='add'>+dht_dict_set_array(dict_t *dict, char *key, int32_t value[], int32_t size)</div><div class='ctx'> {</div><div class='del'>-        int         ret = -1;</div><div class='del'>-        int32_t   *ptr = NULL;</div><div class='del'>-        int32_t     vindex;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t *ptr = NULL;</div><div class='add'>+    int32_t vindex;</div><div class='ctx'> </div><div class='del'>-        if (value == NULL) {</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='add'>+    if (value == NULL) {</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ptr = GF_MALLOC(sizeof(int32_t) * size, gf_common_mt_char);</div><div class='del'>-        if (ptr == NULL) {</div><div class='del'>-                return -ENOMEM;</div><div class='del'>-        }</div><div class='del'>-        for (vindex = 0; vindex &lt; size; vindex++) {</div><div class='del'>-                ptr[vindex] = hton32(value[vindex]);</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_bin(dict, key, ptr, sizeof(int32_t) * size);</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_FREE (ptr);</div><div class='del'>-        return ret;</div><div class='add'>+    ptr = GF_MALLOC(sizeof(int32_t) * size, gf_common_mt_char);</div><div class='add'>+    if (ptr == NULL) {</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    for (vindex = 0; vindex &lt; size; vindex++) {</div><div class='add'>+        ptr[vindex] = hton32(value[vindex]);</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_bin(dict, key, ptr, sizeof(int32_t) * size);</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_FREE(ptr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_common_mds_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                            int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_common_mds_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        call_frame_t  *prev  = cookie;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = cookie;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret)</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;this-&gt;name);</div><div class='add'>+    if (op_ret)</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;this-&gt;name);</div><div class='ctx'> </div><div class='del'>-         if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, 0, op_errno, local-&gt;xdata);</div><div class='del'>-         }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, 0, op_errno, local-&gt;xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-         if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (fsetxattr, frame, 0, op_errno, local-&gt;xdata);</div><div class='del'>-         }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(fsetxattr, frame, 0, op_errno, local-&gt;xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-         if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (removexattr, frame, 0, op_errno, NULL);</div><div class='del'>-         }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(removexattr, frame, 0, op_errno, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-         if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (fremovexattr, frame, 0, op_errno, NULL);</div><div class='del'>-         }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(fremovexattr, frame, 0, op_errno, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Code to wind a xattrop call to add 1 on current mds internal xattr</div><div class='ctx'>    value</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-dht_setxattr_non_mds_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int op_ret, int op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        dict_t        *xattrop      = NULL;</div><div class='del'>-        int32_t       addone[1]     = {1};</div><div class='del'>-        call_frame_t  *prev         = NULL;</div><div class='del'>-        dht_conf_t    *conf         = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-             if (op_ret &amp;&amp; !local-&gt;op_ret) {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                         gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                       "subvolume %s returned -1",</div><div class='del'>-                                       prev-&gt;this-&gt;name);</div><div class='del'>-             }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if (!local-&gt;op_ret) {</div><div class='del'>-                        xattrop = dict_new ();</div><div class='del'>-                        if (!xattrop) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY, 0,</div><div class='del'>-                                        "dictionary creation failed");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dht_dict_set_array (xattrop,</div><div class='del'>-                                                  conf-&gt;mds_xattr_key,</div><div class='del'>-                                                  addone, 1);</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "dictionary set array failed ");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='del'>-                            (local-&gt;fop == GF_FOP_REMOVEXATTR)) {</div><div class='del'>-                                STACK_WIND (frame, dht_common_mds_xattrop_cbk,</div><div class='del'>-                                            local-&gt;mds_subvol,</div><div class='del'>-                                            local-&gt;mds_subvol-&gt;fops-&gt;xattrop,</div><div class='del'>-                                            &amp;local-&gt;loc, GF_XATTROP_ADD_ARRAY,</div><div class='del'>-                                            xattrop, NULL);</div><div class='del'>-                        } else {</div><div class='del'>-                                STACK_WIND (frame, dht_common_mds_xattrop_cbk,</div><div class='del'>-                                            local-&gt;mds_subvol,</div><div class='del'>-                                            local-&gt;mds_subvol-&gt;fops-&gt;fxattrop,</div><div class='del'>-                                            local-&gt;fd, GF_XATTROP_ADD_ARRAY,</div><div class='del'>-                                            xattrop, NULL);</div><div class='del'>-                        }</div><div class='del'>-                } else  {</div><div class='del'>-                        if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                                DHT_STACK_UNWIND (setxattr, frame, 0, 0, local-&gt;xdata);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                                DHT_STACK_UNWIND (fsetxattr, frame, 0, 0, local-&gt;xdata);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                                DHT_STACK_UNWIND (removexattr, frame, 0, 0, NULL);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                                DHT_STACK_UNWIND (fremovexattr, frame, 0, 0, NULL);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        if (xattrop)</div><div class='del'>-                dict_unref (xattrop);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                        DHT_STACK_UNWIND (setxattr, frame, 0, 0, local-&gt;xdata);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                        DHT_STACK_UNWIND (fsetxattr, frame, 0, 0, local-&gt;xdata);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                        DHT_STACK_UNWIND (removexattr, frame, 0, 0, NULL);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                        DHT_STACK_UNWIND (fremovexattr, frame, 0, 0, NULL);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_setxattr_mds_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_setxattr_non_mds_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_conf_t   *conf  = NULL;</div><div class='del'>-        call_frame_t *prev = NULL;</div><div class='del'>-        xlator_t     *mds_subvol = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_ret  = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;this-&gt;name);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *xattrop = NULL;</div><div class='add'>+    int32_t addone[1] = {1};</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret &amp;&amp; !local-&gt;op_ret) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                         prev-&gt;this-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (!local-&gt;op_ret) {</div><div class='add'>+            xattrop = dict_new();</div><div class='add'>+            if (!xattrop) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='add'>+                       "dictionary creation failed");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='del'>-        local-&gt;xdata    = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (mds_subvol &amp;&amp; (mds_subvol == conf-&gt;subvolumes[i]))</div><div class='del'>-                        continue;</div><div class='del'>-                if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                        STACK_WIND (frame, dht_setxattr_non_mds_cbk,</div><div class='del'>-                                    conf-&gt;subvolumes[i],</div><div class='del'>-                                    conf-&gt;subvolumes[i]-&gt;fops-&gt;setxattr,</div><div class='del'>-                                    &amp;local-&gt;loc, local-&gt;xattr,</div><div class='del'>-                                    local-&gt;flags, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='add'>+            }</div><div class='add'>+            ret = dht_dict_set_array(xattrop, conf-&gt;mds_xattr_key, addone, 1);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "dictionary set array failed ");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='add'>+                (local-&gt;fop == GF_FOP_REMOVEXATTR)) {</div><div class='add'>+                STACK_WIND(frame, dht_common_mds_xattrop_cbk, local-&gt;mds_subvol,</div><div class='add'>+                           local-&gt;mds_subvol-&gt;fops-&gt;xattrop, &amp;local-&gt;loc,</div><div class='add'>+                           GF_XATTROP_ADD_ARRAY, xattrop, NULL);</div><div class='add'>+            } else {</div><div class='add'>+                STACK_WIND(frame, dht_common_mds_xattrop_cbk, local-&gt;mds_subvol,</div><div class='add'>+                           local-&gt;mds_subvol-&gt;fops-&gt;fxattrop, local-&gt;fd,</div><div class='add'>+                           GF_XATTROP_ADD_ARRAY, xattrop, NULL);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+                DHT_STACK_UNWIND(setxattr, frame, 0, 0, local-&gt;xdata);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                        STACK_WIND (frame, dht_setxattr_non_mds_cbk,</div><div class='del'>-                                    conf-&gt;subvolumes[i],</div><div class='del'>-                                    conf-&gt;subvolumes[i]-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                                    local-&gt;fd, local-&gt;xattr,</div><div class='del'>-                                    local-&gt;flags, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='add'>+                DHT_STACK_UNWIND(fsetxattr, frame, 0, 0, local-&gt;xdata);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                        STACK_WIND (frame, dht_setxattr_non_mds_cbk,</div><div class='del'>-                                    conf-&gt;subvolumes[i],</div><div class='del'>-                                    conf-&gt;subvolumes[i]-&gt;fops-&gt;removexattr,</div><div class='del'>-                                    &amp;local-&gt;loc, local-&gt;key,</div><div class='del'>-                                    local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+                DHT_STACK_UNWIND(removexattr, frame, 0, 0, NULL);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                        STACK_WIND (frame, dht_setxattr_non_mds_cbk,</div><div class='del'>-                                    conf-&gt;subvolumes[i],</div><div class='del'>-                                    conf-&gt;subvolumes[i]-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                                    local-&gt;fd, local-&gt;key,</div><div class='del'>-                                    local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='add'>+                DHT_STACK_UNWIND(fremovexattr, frame, 0, 0, NULL);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='add'>+    if (xattrop)</div><div class='add'>+        dict_unref(xattrop);</div><div class='add'>+    if (ret) {</div><div class='ctx'>         if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, xdata);</div><div class='add'>+            DHT_STACK_UNWIND(setxattr, frame, 0, 0, local-&gt;xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (fsetxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, xdata);</div><div class='add'>+            DHT_STACK_UNWIND(fsetxattr, frame, 0, 0, local-&gt;xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (removexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, NULL);</div><div class='add'>+            DHT_STACK_UNWIND(removexattr, frame, 0, 0, NULL);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (fremovexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, NULL);</div><div class='add'>+            DHT_STACK_UNWIND(fremovexattr, frame, 0, 0, NULL);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_xattrop_mds_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_setxattr_mds_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        call_frame_t *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    mds_subvol = local-&gt;mds_subvol;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret   = op_ret;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;this-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;this-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='add'>+    local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (mds_subvol &amp;&amp; (mds_subvol == conf-&gt;subvolumes[i]))</div><div class='add'>+            continue;</div><div class='ctx'>         if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                STACK_WIND (frame, dht_setxattr_mds_cbk,</div><div class='del'>-                            local-&gt;mds_subvol,</div><div class='del'>-                            local-&gt;mds_subvol-&gt;fops-&gt;setxattr,</div><div class='del'>-                            &amp;local-&gt;loc, local-&gt;xattr,</div><div class='del'>-                            local-&gt;flags, local-&gt;xattr_req);</div><div class='add'>+            STACK_WIND(frame, dht_setxattr_non_mds_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                       conf-&gt;subvolumes[i]-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='add'>+                       local-&gt;xattr, local-&gt;flags, local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                STACK_WIND (frame, dht_setxattr_mds_cbk,</div><div class='del'>-                            local-&gt;mds_subvol,</div><div class='del'>-                            local-&gt;mds_subvol-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                            local-&gt;fd, local-&gt;xattr,</div><div class='del'>-                            local-&gt;flags, local-&gt;xattr_req);</div><div class='add'>+            STACK_WIND(frame, dht_setxattr_non_mds_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                       conf-&gt;subvolumes[i]-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+                       local-&gt;xattr, local-&gt;flags, local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                STACK_WIND (frame, dht_setxattr_mds_cbk,</div><div class='del'>-                            local-&gt;mds_subvol,</div><div class='del'>-                            local-&gt;mds_subvol-&gt;fops-&gt;removexattr,</div><div class='del'>-                            &amp;local-&gt;loc, local-&gt;key,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='add'>+            STACK_WIND(frame, dht_setxattr_non_mds_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                       conf-&gt;subvolumes[i]-&gt;fops-&gt;removexattr, &amp;local-&gt;loc,</div><div class='add'>+                       local-&gt;key, local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                STACK_WIND (frame, dht_setxattr_mds_cbk,</div><div class='del'>-                            local-&gt;mds_subvol,</div><div class='del'>-                            local-&gt;mds_subvol-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                            local-&gt;fd, local-&gt;key,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='add'>+            STACK_WIND(frame, dht_setxattr_non_mds_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                       conf-&gt;subvolumes[i]-&gt;fops-&gt;fremovexattr, local-&gt;fd,</div><div class='add'>+                       local-&gt;key, local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+out:</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(fsetxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(removexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(fremovexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_xattrop_mds_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;this-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+        STACK_WIND(frame, dht_setxattr_mds_cbk, local-&gt;mds_subvol,</div><div class='add'>+                   local-&gt;mds_subvol-&gt;fops-&gt;setxattr, &amp;local-&gt;loc, local-&gt;xattr,</div><div class='add'>+                   local-&gt;flags, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='add'>+        STACK_WIND(frame, dht_setxattr_mds_cbk, local-&gt;mds_subvol,</div><div class='add'>+                   local-&gt;mds_subvol-&gt;fops-&gt;fsetxattr, local-&gt;fd, local-&gt;xattr,</div><div class='add'>+                   local-&gt;flags, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+        STACK_WIND(frame, dht_setxattr_mds_cbk, local-&gt;mds_subvol,</div><div class='add'>+                   local-&gt;mds_subvol-&gt;fops-&gt;removexattr, &amp;local-&gt;loc,</div><div class='add'>+                   local-&gt;key, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='add'>+        STACK_WIND(frame, dht_setxattr_mds_cbk, local-&gt;mds_subvol,</div><div class='add'>+                   local-&gt;mds_subvol-&gt;fops-&gt;fremovexattr, local-&gt;fd, local-&gt;key,</div><div class='add'>+                   local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (fsetxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FSETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(fsetxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (removexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(removexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (fremovexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FREMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(fremovexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-fill_layout_info (dht_layout_t *layout, char *buf)</div><div class='add'>+fill_layout_info(dht_layout_t *layout, char *buf)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        char tmp_buf[128] = {0,};</div><div class='add'>+    int i = 0;</div><div class='add'>+    char tmp_buf[128] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                snprintf (tmp_buf, sizeof (tmp_buf), "(%s %u %u)",</div><div class='del'>-                          layout-&gt;list[i].xlator-&gt;name,</div><div class='del'>-                          layout-&gt;list[i].start,</div><div class='del'>-                          layout-&gt;list[i].stop);</div><div class='del'>-                if (i)</div><div class='del'>-                        strcat (buf, " ");</div><div class='del'>-                strcat (buf, tmp_buf);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        snprintf(tmp_buf, sizeof(tmp_buf), "(%s %u %u)",</div><div class='add'>+                 layout-&gt;list[i].xlator-&gt;name, layout-&gt;list[i].start,</div><div class='add'>+                 layout-&gt;list[i].stop);</div><div class='add'>+        if (i)</div><div class='add'>+            strcat(buf, " ");</div><div class='add'>+        strcat(buf, tmp_buf);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_fill_pathinfo_xattr (xlator_t *this, dht_local_t *local,</div><div class='del'>-                         char *xattr_buf, int32_t alloc_len,</div><div class='del'>-                         int flag, char *layout_buf)</div><div class='del'>-{</div><div class='del'>-        if (flag) {</div><div class='del'>-                if (local-&gt;xattr_val) {</div><div class='del'>-                        snprintf (xattr_buf, alloc_len,</div><div class='del'>-                          "((&lt;"DHT_PATHINFO_HEADER"%s&gt; %s) (%s-layout %s))",</div><div class='del'>-                          this-&gt;name, local-&gt;xattr_val, this-&gt;name,</div><div class='del'>-                          layout_buf);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (xattr_buf, alloc_len, "(%s-layout %s)",</div><div class='del'>-                          this-&gt;name, layout_buf);</div><div class='del'>-                }</div><div class='del'>-        } else if (local-&gt;xattr_val) {</div><div class='del'>-                snprintf (xattr_buf, alloc_len,</div><div class='del'>-                          "(&lt;"DHT_PATHINFO_HEADER"%s&gt; %s)",</div><div class='del'>-                          this-&gt;name, local-&gt;xattr_val);</div><div class='add'>+dht_fill_pathinfo_xattr(xlator_t *this, dht_local_t *local, char *xattr_buf,</div><div class='add'>+                        int32_t alloc_len, int flag, char *layout_buf)</div><div class='add'>+{</div><div class='add'>+    if (flag) {</div><div class='add'>+        if (local-&gt;xattr_val) {</div><div class='add'>+            snprintf(xattr_buf, alloc_len,</div><div class='add'>+                     "((&lt;" DHT_PATHINFO_HEADER "%s&gt; %s) (%s-layout %s))",</div><div class='add'>+                     this-&gt;name, local-&gt;xattr_val, this-&gt;name, layout_buf);</div><div class='ctx'>         } else {</div><div class='del'>-                xattr_buf[0] = '\0';</div><div class='add'>+            snprintf(xattr_buf, alloc_len, "(%s-layout %s)", this-&gt;name,</div><div class='add'>+                     layout_buf);</div><div class='ctx'>         }</div><div class='add'>+    } else if (local-&gt;xattr_val) {</div><div class='add'>+        snprintf(xattr_buf, alloc_len, "(&lt;" DHT_PATHINFO_HEADER "%s&gt; %s)",</div><div class='add'>+                 this-&gt;name, local-&gt;xattr_val);</div><div class='add'>+    } else {</div><div class='add'>+        xattr_buf[0] = '\0';</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_vgetxattr_alloc_and_fill (dht_local_t *local, dict_t *xattr, xlator_t *this,</div><div class='del'>-                              int op_errno)</div><div class='add'>+dht_vgetxattr_alloc_and_fill(dht_local_t *local, dict_t *xattr, xlator_t *this,</div><div class='add'>+                             int op_errno)</div><div class='ctx'> {</div><div class='del'>-        int      ret       = -1;</div><div class='del'>-        char    *value     = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *value = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xattr, local-&gt;xsel, &amp;value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                        "Subvolume %s returned -1", this-&gt;name);</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(xattr, local-&gt;xsel, &amp;value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_GET_XATTR_FAILED,</div><div class='add'>+               "Subvolume %s returned -1", this-&gt;name);</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;alloc_len += strlen(value);</div><div class='add'>+    local-&gt;alloc_len += strlen(value);</div><div class='ctx'> </div><div class='add'>+    if (!local-&gt;xattr_val) {</div><div class='add'>+        local-&gt;alloc_len += (SLEN(DHT_PATHINFO_HEADER) + 10);</div><div class='add'>+        local-&gt;xattr_val = GF_MALLOC(local-&gt;alloc_len, gf_common_mt_char);</div><div class='ctx'>         if (!local-&gt;xattr_val) {</div><div class='del'>-                local-&gt;alloc_len += (SLEN (DHT_PATHINFO_HEADER) + 10);</div><div class='del'>-                local-&gt;xattr_val = GF_MALLOC (local-&gt;alloc_len,</div><div class='del'>-                                              gf_common_mt_char);</div><div class='del'>-                if (!local-&gt;xattr_val) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;xattr_val[0] = '\0';</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        int plen = strlen (local-&gt;xattr_val);</div><div class='del'>-        if (plen) {</div><div class='del'>-                /* extra byte(s) for \0 to be safe */</div><div class='del'>-                local-&gt;alloc_len += (plen + 2);</div><div class='del'>-                local-&gt;xattr_val = GF_REALLOC (local-&gt;xattr_val,</div><div class='del'>-                                               local-&gt;alloc_len);</div><div class='del'>-                if (!local-&gt;xattr_val) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        local-&gt;xattr_val[0] = '\0';</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) strcat (local-&gt;xattr_val, value);</div><div class='del'>-        (void) strcat (local-&gt;xattr_val, " ");</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    int plen = strlen(local-&gt;xattr_val);</div><div class='add'>+    if (plen) {</div><div class='add'>+        /* extra byte(s) for \0 to be safe */</div><div class='add'>+        local-&gt;alloc_len += (plen + 2);</div><div class='add'>+        local-&gt;xattr_val = GF_REALLOC(local-&gt;xattr_val, local-&gt;alloc_len);</div><div class='add'>+        if (!local-&gt;xattr_val) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    (void)strcat(local-&gt;xattr_val, value);</div><div class='add'>+    (void)strcat(local-&gt;xattr_val, " ");</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_vgetxattr_fill_and_set (dht_local_t *local, dict_t **dict, xlator_t *this,</div><div class='del'>-                            gf_boolean_t flag)</div><div class='add'>+dht_vgetxattr_fill_and_set(dht_local_t *local, dict_t **dict, xlator_t *this,</div><div class='add'>+                           gf_boolean_t flag)</div><div class='ctx'> {</div><div class='del'>-        int   ret             = -1;</div><div class='del'>-        char *xattr_buf       = NULL;</div><div class='del'>-        char layout_buf[8192] = {0,};</div><div class='del'>-</div><div class='del'>-        if (flag)</div><div class='del'>-                fill_layout_info (local-&gt;layout, layout_buf);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *xattr_buf = NULL;</div><div class='add'>+    char layout_buf[8192] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        *dict = dict_new ();</div><div class='del'>-        if (!*dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;xattr_val[strlen (local-&gt;xattr_val) - 1] = '\0';</div><div class='add'>+    if (flag)</div><div class='add'>+        fill_layout_info(local-&gt;layout, layout_buf);</div><div class='ctx'> </div><div class='del'>-        /* we would need max this many bytes to create xattr string</div><div class='del'>-         * extra 40 bytes is just an estimated amount of additional</div><div class='del'>-         * space required as we include translator name and some</div><div class='del'>-         * spaces, brackets etc. when forming the pathinfo string.</div><div class='del'>-         *</div><div class='del'>-         * For node-uuid we just don't have all the pretty formatting,</div><div class='del'>-         * but since this is a generic routine for pathinfo &amp; node-uuid</div><div class='del'>-         * we don't have conditional space allocation and try to be</div><div class='del'>-         * generic</div><div class='del'>-         */</div><div class='del'>-        local-&gt;alloc_len += (2 * strlen (this-&gt;name))</div><div class='del'>-                + strlen (layout_buf)</div><div class='del'>-                + 40;</div><div class='del'>-        xattr_buf = GF_MALLOC (local-&gt;alloc_len, gf_common_mt_char);</div><div class='del'>-        if (!xattr_buf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (XATTR_IS_PATHINFO (local-&gt;xsel)) {</div><div class='del'>-                (void) dht_fill_pathinfo_xattr (this, local, xattr_buf,</div><div class='del'>-                                                local-&gt;alloc_len, flag,</div><div class='del'>-                                                layout_buf);</div><div class='del'>-        } else if ((XATTR_IS_NODE_UUID (local-&gt;xsel))</div><div class='del'>-                   || (XATTR_IS_NODE_UUID_LIST (local-&gt;xsel))) {</div><div class='del'>-                (void) snprintf (xattr_buf, local-&gt;alloc_len, "%s",</div><div class='del'>-                                 local-&gt;xattr_val);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                        "Unknown local-&gt;xsel (%s)", local-&gt;xsel);</div><div class='del'>-                GF_FREE (xattr_buf);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_dynstr (*dict, local-&gt;xsel, xattr_buf);</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_FREE (xattr_buf);</div><div class='del'>-        GF_FREE (local-&gt;xattr_val);</div><div class='add'>+    *dict = dict_new();</div><div class='add'>+    if (!*dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    local-&gt;xattr_val[strlen(local-&gt;xattr_val) - 1] = '\0';</div><div class='add'>+</div><div class='add'>+    /* we would need max this many bytes to create xattr string</div><div class='add'>+     * extra 40 bytes is just an estimated amount of additional</div><div class='add'>+     * space required as we include translator name and some</div><div class='add'>+     * spaces, brackets etc. when forming the pathinfo string.</div><div class='add'>+     *</div><div class='add'>+     * For node-uuid we just don't have all the pretty formatting,</div><div class='add'>+     * but since this is a generic routine for pathinfo &amp; node-uuid</div><div class='add'>+     * we don't have conditional space allocation and try to be</div><div class='add'>+     * generic</div><div class='add'>+     */</div><div class='add'>+    local-&gt;alloc_len += (2 * strlen(this-&gt;name)) + strlen(layout_buf) + 40;</div><div class='add'>+    xattr_buf = GF_MALLOC(local-&gt;alloc_len, gf_common_mt_char);</div><div class='add'>+    if (!xattr_buf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    if (XATTR_IS_PATHINFO(local-&gt;xsel)) {</div><div class='add'>+        (void)dht_fill_pathinfo_xattr(this, local, xattr_buf, local-&gt;alloc_len,</div><div class='add'>+                                      flag, layout_buf);</div><div class='add'>+    } else if ((XATTR_IS_NODE_UUID(local-&gt;xsel)) ||</div><div class='add'>+               (XATTR_IS_NODE_UUID_LIST(local-&gt;xsel))) {</div><div class='add'>+        (void)snprintf(xattr_buf, local-&gt;alloc_len, "%s", local-&gt;xattr_val);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_GET_XATTR_FAILED,</div><div class='add'>+               "Unknown local-&gt;xsel (%s)", local-&gt;xsel);</div><div class='add'>+        GF_FREE(xattr_buf);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_find_local_subvol_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int op_ret, int op_errno, dict_t *xattr,</div><div class='del'>-                           dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        char         *uuid_str      = NULL;</div><div class='del'>-        char         *uuid_list     = NULL;</div><div class='del'>-        char         *next_uuid_str = NULL;</div><div class='del'>-        char         *saveptr       = NULL;</div><div class='del'>-        uuid_t        node_uuid     = {0,};</div><div class='del'>-        char         *uuid_list_copy = NULL;</div><div class='del'>-        int           count          = 0;</div><div class='del'>-        int           i              = 0;</div><div class='del'>-        int           index          = 0;</div><div class='del'>-        int           found          = 0;</div><div class='del'>-        nodeuuid_info_t *tmp_ptr     = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (frame-&gt;local, out);</div><div class='add'>+    ret = dict_set_dynstr(*dict, local-&gt;xsel, xattr_buf);</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_FREE(xattr_buf);</div><div class='add'>+    GF_FREE(local-&gt;xattr_val);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (conf-&gt;defrag, out);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "subvol %s returned", prev-&gt;name);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                this_call_cnt = --local-&gt;call_cnt;</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                                "getxattr err for dir");</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_find_local_subvol_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int op_ret, int op_errno, dict_t *xattr,</div><div class='add'>+                          dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *uuid_str = NULL;</div><div class='add'>+    char *uuid_list = NULL;</div><div class='add'>+    char *next_uuid_str = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    uuid_t node_uuid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *uuid_list_copy = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int found = 0;</div><div class='add'>+    nodeuuid_info_t *tmp_ptr = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame-&gt;local, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(conf-&gt;defrag, out);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "subvol %s returned", prev-&gt;name);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        this_call_cnt = --local-&gt;call_cnt;</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_GET_XATTR_FAILED,</div><div class='add'>+                   "getxattr err for dir");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (xattr, local-&gt;xsel, &amp;uuid_list);</div><div class='add'>+        ret = dict_get_str(xattr, local-&gt;xsel, &amp;uuid_list);</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_GET_FAILED,</div><div class='del'>-                                "Failed to get %s", local-&gt;xsel);</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = EINVAL;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_GET_FAILED,</div><div class='add'>+                   "Failed to get %s", local-&gt;xsel);</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* As DHT will not know details of its child xlators</div><div class='del'>-                 * we need to parse this twice to get the count first</div><div class='del'>-                 * and allocate memory later.</div><div class='del'>-                 */</div><div class='del'>-                count = 0;</div><div class='del'>-                index = conf-&gt;local_subvols_cnt;</div><div class='del'>-</div><div class='del'>-                uuid_list_copy = gf_strdup (uuid_list);</div><div class='del'>-</div><div class='del'>-                for (uuid_str = strtok_r (uuid_list, " ", &amp;saveptr);</div><div class='del'>-                     uuid_str;</div><div class='del'>-                     uuid_str = next_uuid_str) {</div><div class='del'>-</div><div class='del'>-                        next_uuid_str = strtok_r (NULL, " ", &amp;saveptr);</div><div class='del'>-                        if (gf_uuid_parse (uuid_str, node_uuid)) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_UUID_PARSE_ERROR,</div><div class='del'>-                                        "Failed to parse uuid"</div><div class='del'>-                                        " for %s", prev-&gt;name);</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                local-&gt;op_errno = EINVAL;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        count++;</div><div class='del'>-                        if (gf_uuid_compare (node_uuid, conf-&gt;defrag-&gt;node_uuid)) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0, "subvol %s does not"</div><div class='del'>-                                              "belong to this node",</div><div class='del'>-                                              prev-&gt;name);</div><div class='del'>-                        } else {</div><div class='del'>-</div><div class='del'>-                                /* handle multiple bricks of the same replica</div><div class='del'>-                                 * on the same node */</div><div class='del'>-                                if (found)</div><div class='del'>-                                        continue;</div><div class='del'>-                                conf-&gt;local_subvols[(conf-&gt;local_subvols_cnt)++]</div><div class='del'>-                                                = prev;</div><div class='del'>-                                found = 1;</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0, "subvol %s belongs to"</div><div class='del'>-                                              " this node", prev-&gt;name);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        /* As DHT will not know details of its child xlators</div><div class='add'>+         * we need to parse this twice to get the count first</div><div class='add'>+         * and allocate memory later.</div><div class='add'>+         */</div><div class='add'>+        count = 0;</div><div class='add'>+        index = conf-&gt;local_subvols_cnt;</div><div class='add'>+</div><div class='add'>+        uuid_list_copy = gf_strdup(uuid_list);</div><div class='add'>+</div><div class='add'>+        for (uuid_str = strtok_r(uuid_list, " ", &amp;saveptr); uuid_str;</div><div class='add'>+             uuid_str = next_uuid_str) {</div><div class='add'>+            next_uuid_str = strtok_r(NULL, " ", &amp;saveptr);</div><div class='add'>+            if (gf_uuid_parse(uuid_str, node_uuid)) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_UUID_PARSE_ERROR,</div><div class='add'>+                       "Failed to parse uuid"</div><div class='add'>+                       " for %s",</div><div class='add'>+                       prev-&gt;name);</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = EINVAL;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!found) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+            count++;</div><div class='add'>+            if (gf_uuid_compare(node_uuid, conf-&gt;defrag-&gt;node_uuid)) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "subvol %s does not"</div><div class='add'>+                             "belong to this node",</div><div class='add'>+                             prev-&gt;name);</div><div class='add'>+            } else {</div><div class='add'>+                /* handle multiple bricks of the same replica</div><div class='add'>+                 * on the same node */</div><div class='add'>+                if (found)</div><div class='add'>+                    continue;</div><div class='add'>+                conf-&gt;local_subvols[(conf-&gt;local_subvols_cnt)++] = prev;</div><div class='add'>+                found = 1;</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "subvol %s belongs to"</div><div class='add'>+                             " this node",</div><div class='add'>+                             prev-&gt;name);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                conf-&gt;local_nodeuuids[index].count = count;</div><div class='del'>-                conf-&gt;local_nodeuuids[index].elements</div><div class='del'>-                               = GF_CALLOC (count, sizeof (nodeuuid_info_t), 1);</div><div class='add'>+        if (!found) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* The node-uuids are guaranteed to be returned in the same</div><div class='del'>-                 * order as the bricks</div><div class='del'>-                 * A null node-uuid is returned for a brick that is down.</div><div class='del'>-                 */</div><div class='add'>+        conf-&gt;local_nodeuuids[index].count = count;</div><div class='add'>+        conf-&gt;local_nodeuuids[index].elements = GF_CALLOC(</div><div class='add'>+            count, sizeof(nodeuuid_info_t), 1);</div><div class='ctx'> </div><div class='del'>-                saveptr = NULL;</div><div class='del'>-                i = 0;</div><div class='add'>+        /* The node-uuids are guaranteed to be returned in the same</div><div class='add'>+         * order as the bricks</div><div class='add'>+         * A null node-uuid is returned for a brick that is down.</div><div class='add'>+         */</div><div class='ctx'> </div><div class='del'>-                for (uuid_str = strtok_r (uuid_list_copy, " ", &amp;saveptr);</div><div class='del'>-                     uuid_str;</div><div class='del'>-                     uuid_str = next_uuid_str) {</div><div class='add'>+        saveptr = NULL;</div><div class='add'>+        i = 0;</div><div class='ctx'> </div><div class='del'>-                        next_uuid_str = strtok_r (NULL, " ", &amp;saveptr);</div><div class='del'>-                        tmp_ptr = &amp;(conf-&gt;local_nodeuuids[index].elements[i]);</div><div class='del'>-                        gf_uuid_parse (uuid_str, tmp_ptr-&gt;uuid);</div><div class='add'>+        for (uuid_str = strtok_r(uuid_list_copy, " ", &amp;saveptr); uuid_str;</div><div class='add'>+             uuid_str = next_uuid_str) {</div><div class='add'>+            next_uuid_str = strtok_r(NULL, " ", &amp;saveptr);</div><div class='add'>+            tmp_ptr = &amp;(conf-&gt;local_nodeuuids[index].elements[i]);</div><div class='add'>+            gf_uuid_parse(uuid_str, tmp_ptr-&gt;uuid);</div><div class='ctx'> </div><div class='del'>-                        if (!gf_uuid_compare (tmp_ptr-&gt;uuid,</div><div class='del'>-                                              conf-&gt;defrag-&gt;node_uuid)) {</div><div class='del'>-                                tmp_ptr-&gt;info = REBAL_NODEUUID_MINE;</div><div class='del'>-                        }</div><div class='del'>-                        i++;</div><div class='del'>-                        tmp_ptr = NULL;</div><div class='del'>-                }</div><div class='add'>+            if (!gf_uuid_compare(tmp_ptr-&gt;uuid, conf-&gt;defrag-&gt;node_uuid)) {</div><div class='add'>+                tmp_ptr-&gt;info = REBAL_NODEUUID_MINE;</div><div class='add'>+            }</div><div class='add'>+            i++;</div><div class='add'>+            tmp_ptr = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>- unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!is_last_call (this_call_cnt))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!is_last_call(this_call_cnt))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;op_ret == -1) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, 0, 0, xattr, xdata);</div><div class='del'>-        goto out;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, 0, 0, xattr, xdata);</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='add'>+unwind:</div><div class='ctx'> </div><div class='del'>-        GF_FREE (conf-&gt;local_nodeuuids[index].elements);</div><div class='del'>-        conf-&gt;local_nodeuuids[index].elements = NULL;</div><div class='add'>+    GF_FREE(conf-&gt;local_nodeuuids[index].elements);</div><div class='add'>+    conf-&gt;local_nodeuuids[index].elements = NULL;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, -1, local-&gt;op_errno, NULL, xdata);</div><div class='del'>- out:</div><div class='del'>-        GF_FREE (uuid_list_copy);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, -1, local-&gt;op_errno, NULL, xdata);</div><div class='add'>+out:</div><div class='add'>+    GF_FREE(uuid_list_copy);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_vgetxattr_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+dht_vgetxattr_dir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          ret           = 0;</div><div class='del'>-        dht_local_t *local         = NULL;</div><div class='del'>-        int          this_call_cnt = 0;</div><div class='del'>-        dict_t      *dict          = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (frame-&gt;local, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame-&gt;local, out);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                this_call_cnt = --local-&gt;call_cnt;</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        if (op_errno != ENOTCONN) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                        DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                                        "getxattr err for dir");</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        this_call_cnt = --local-&gt;call_cnt;</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            if (op_errno != ENOTCONN) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                       DHT_MSG_GET_XATTR_FAILED, "getxattr err for dir");</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = dht_vgetxattr_alloc_and_fill (local, xattr, this,</div><div class='del'>-                                                    op_errno);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "alloc or fill failure");</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>- unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!is_last_call (this_call_cnt))</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dht_vgetxattr_alloc_and_fill(local, xattr, this, op_errno);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "alloc or fill failure");</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* -- last call: do patch ups -- */</div><div class='add'>+    if (!is_last_call(this_call_cnt))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    /* -- last call: do patch ups -- */</div><div class='ctx'> </div><div class='del'>-        ret = dht_vgetxattr_fill_and_set (local, &amp;dict, this, _gf_true);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (local-&gt;op_ret == -1) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, 0, 0, dict, xdata);</div><div class='del'>-        goto cleanup;</div><div class='add'>+    ret = dht_vgetxattr_fill_and_set(local, &amp;dict, this, _gf_true);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, -1, local-&gt;op_errno, NULL, NULL);</div><div class='del'>- cleanup:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, 0, 0, dict, xdata);</div><div class='add'>+    goto cleanup;</div><div class='add'>+</div><div class='add'>+unwind:</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, -1, local-&gt;op_errno, NULL, NULL);</div><div class='add'>+cleanup:</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_vgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+dht_vgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        dict_t       *dict          = NULL;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        gf_boolean_t  flag          = _gf_true;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    gf_boolean_t flag = _gf_true;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                        "vgetxattr: Subvolume %s returned -1",</div><div class='del'>-                         prev-&gt;name);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_GET_XATTR_FAILED,</div><div class='add'>+               "vgetxattr: Subvolume %s returned -1", prev-&gt;name);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_vgetxattr_alloc_and_fill (local, xattr, this,</div><div class='del'>-                                            op_errno);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "Allocation or fill failure");</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_vgetxattr_alloc_and_fill(local, xattr, this, op_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "Allocation or fill failure");</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        flag = (local-&gt;layout-&gt;cnt &gt; 1) ? _gf_true : _gf_false;</div><div class='add'>+    flag = (local-&gt;layout-&gt;cnt &gt; 1) ? _gf_true : _gf_false;</div><div class='ctx'> </div><div class='del'>-        ret = dht_vgetxattr_fill_and_set (local, &amp;dict, this, flag);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = dht_vgetxattr_fill_and_set(local, &amp;dict, this, flag);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, 0, 0, dict, xdata);</div><div class='del'>-        goto cleanup;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, 0, 0, dict, xdata);</div><div class='add'>+    goto cleanup;</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, -1, local-&gt;op_errno,</div><div class='del'>-                          NULL, NULL);</div><div class='del'>- cleanup:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+unwind:</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, -1, local-&gt;op_errno, NULL, NULL);</div><div class='add'>+cleanup:</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_linkinfo_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int op_ret, int op_errno, dict_t *xattr,</div><div class='del'>-                           dict_t *xdata)</div><div class='add'>+dht_linkinfo_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int op_ret, int op_errno, dict_t *xattr,</div><div class='add'>+                          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   ret   = 0;</div><div class='del'>-        char *value = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *value = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != -1) {</div><div class='del'>-                ret = dict_get_str (xattr, GF_XATTR_PATHINFO_KEY, &amp;value);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        ret = dict_set_str (xattr, GF_XATTR_LINKINFO_KEY, value);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                              "failed to set linkinfo");</div><div class='del'>-                }</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        ret = dict_get_str(xattr, GF_XATTR_PATHINFO_KEY, &amp;value);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            ret = dict_set_str(xattr, GF_XATTR_LINKINFO_KEY, value);</div><div class='add'>+            if (!ret)</div><div class='add'>+                gf_msg_trace(this-&gt;name, 0, "failed to set linkinfo");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_mds_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+dht_mds_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        dht_conf_t      *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (frame-&gt;local, out);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame-&gt;local, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!xattr || (op_ret == -1)) {</div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (dict_get (xattr, conf-&gt;xattr_name)) {</div><div class='del'>-                dict_del (xattr, conf-&gt;xattr_name);</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    if (!xattr || (op_ret == -1)) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (dict_get(xattr, conf-&gt;xattr_name)) {</div><div class='add'>+        dict_del(xattr, conf-&gt;xattr_name);</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;xattr) {</div><div class='del'>-                local-&gt;xattr = dict_copy_with_ref (xattr, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        local-&gt;xattr = dict_copy_with_ref(xattr, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, local-&gt;op_ret, op_errno,</div><div class='del'>-                          local-&gt;xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, op_errno, local-&gt;xattr,</div><div class='add'>+                     xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+dht_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             this_call_cnt = 0;</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        dht_conf_t      *conf = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (frame-&gt;local, out);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, out);</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame-&gt;local, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (!xattr || (op_ret == -1)) {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                if (dict_get (xattr, conf-&gt;xattr_name)) {</div><div class='del'>-                        dict_del (xattr, conf-&gt;xattr_name);</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!xattr || (op_ret == -1)) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (dict_get (xattr,  conf-&gt;mds_xattr_key)) {</div><div class='del'>-                        dict_del (xattr, conf-&gt;mds_xattr_key);</div><div class='del'>-                }</div><div class='add'>+        if (dict_get(xattr, conf-&gt;xattr_name)) {</div><div class='add'>+            dict_del(xattr, conf-&gt;xattr_name);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* filter out following two xattrs that need not</div><div class='del'>-                 * be visible on the mount point for geo-rep -</div><div class='del'>-                 * trusted.tier.fix.layout.complete and</div><div class='del'>-                 * trusted.tier.tier-dht.commithash</div><div class='del'>-                 */</div><div class='add'>+        if (dict_get(xattr, conf-&gt;mds_xattr_key)) {</div><div class='add'>+            dict_del(xattr, conf-&gt;mds_xattr_key);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (dict_get (xattr, conf-&gt;commithash_xattr_name)) {</div><div class='del'>-                        dict_del (xattr, conf-&gt;commithash_xattr_name);</div><div class='del'>-                }</div><div class='add'>+        /* filter out following two xattrs that need not</div><div class='add'>+         * be visible on the mount point for geo-rep -</div><div class='add'>+         * trusted.tier.fix.layout.complete and</div><div class='add'>+         * trusted.tier.tier-dht.commithash</div><div class='add'>+         */</div><div class='ctx'> </div><div class='del'>-                if (frame-&gt;root-&gt;pid &gt;= 0 &amp;&amp; dht_is_tier_xlator (this)) {</div><div class='del'>-                        dict_del(xattr, GF_XATTR_TIER_LAYOUT_FIXED_KEY);</div><div class='del'>-                }</div><div class='add'>+        if (dict_get(xattr, conf-&gt;commithash_xattr_name)) {</div><div class='add'>+            dict_del(xattr, conf-&gt;commithash_xattr_name);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (frame-&gt;root-&gt;pid &gt;= 0) {</div><div class='del'>-                        GF_REMOVE_INTERNAL_XATTR</div><div class='del'>-                                ("trusted.glusterfs.quota*", xattr);</div><div class='del'>-                        GF_REMOVE_INTERNAL_XATTR("trusted.pgfid*", xattr);</div><div class='del'>-                }</div><div class='add'>+        if (frame-&gt;root-&gt;pid &gt;= 0 &amp;&amp; dht_is_tier_xlator(this)) {</div><div class='add'>+            dict_del(xattr, GF_XATTR_TIER_LAYOUT_FIXED_KEY);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+        if (frame-&gt;root-&gt;pid &gt;= 0) {</div><div class='add'>+            GF_REMOVE_INTERNAL_XATTR("trusted.glusterfs.quota*", xattr);</div><div class='add'>+            GF_REMOVE_INTERNAL_XATTR("trusted.pgfid*", xattr);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;xattr) {</div><div class='del'>-                        local-&gt;xattr = dict_copy_with_ref (xattr, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        dht_aggregate_xattr (local-&gt;xattr, xattr);</div><div class='del'>-                }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='add'>+        if (!local-&gt;xattr) {</div><div class='add'>+            local-&gt;xattr = dict_copy_with_ref(xattr, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            dht_aggregate_xattr(local-&gt;xattr, xattr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> out:</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-</div><div class='del'>-                /* If we have a valid xattr received from any one of the</div><div class='del'>-                 * subvolume, let's return it */</div><div class='del'>-                if (local-&gt;xattr) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                DHT_STACK_UNWIND (getxattr, frame, local-&gt;op_ret, op_errno,</div><div class='del'>-                                  local-&gt;xattr, NULL);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        /* If we have a valid xattr received from any one of the</div><div class='add'>+         * subvolume, let's return it */</div><div class='add'>+        if (local-&gt;xattr) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+</div><div class='add'>+        DHT_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, op_errno, local-&gt;xattr,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_getxattr_unwind (call_frame_t *frame,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_getxattr_unwind(call_frame_t *frame, int op_ret, int op_errno, dict_t *dict,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_getxattr_get_real_filename_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                    xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                    dict_t *xattr, dict_t *xdata)</div><div class='add'>+dht_getxattr_get_real_filename_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                   xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                   dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             this_call_cnt = 0;</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (local-&gt;op_errno == ENODATA || local-&gt;op_errno == EOPNOTSUPP) {</div><div class='add'>+            /* Nothing to do here, we have already found</div><div class='add'>+             * a subvol which does not have the get_real_filename</div><div class='add'>+             * optimization. If condition is for simple logic.</div><div class='add'>+             */</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (local-&gt;op_errno == ENODATA ||</div><div class='del'>-                    local-&gt;op_errno == EOPNOTSUPP) {</div><div class='del'>-                        /* Nothing to do here, we have already found</div><div class='del'>-                         * a subvol which does not have the get_real_filename</div><div class='del'>-                         * optimization. If condition is for simple logic.</div><div class='del'>-                         */</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if (op_errno == ENODATA || op_errno == EOPNOTSUPP) {</div><div class='add'>+                /* This subvol does not have the optimization.</div><div class='add'>+                 * Better let the user know we don't support it.</div><div class='add'>+                 * Remove previous results if any.</div><div class='add'>+                 */</div><div class='ctx'> </div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-</div><div class='del'>-                        if (op_errno == ENODATA || op_errno == EOPNOTSUPP) {</div><div class='del'>-                                /* This subvol does not have the optimization.</div><div class='del'>-                                 * Better let the user know we don't support it.</div><div class='del'>-                                 * Remove previous results if any.</div><div class='del'>-                                 */</div><div class='del'>-</div><div class='del'>-                                if (local-&gt;xattr) {</div><div class='del'>-                                        dict_unref (local-&gt;xattr);</div><div class='del'>-                                        local-&gt;xattr = NULL;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (local-&gt;xattr_req) {</div><div class='del'>-                                        dict_unref (local-&gt;xattr_req);</div><div class='del'>-                                        local-&gt;xattr_req = NULL;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                local-&gt;op_ret = op_ret;</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                                        DHT_MSG_UPGRADE_BRICKS, "At least "</div><div class='del'>-                                        "one of the bricks does not support "</div><div class='del'>-                                        "this operation. Please upgrade all "</div><div class='del'>-                                        "bricks.");</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (op_errno == ENOENT) {</div><div class='del'>-                                /* Do nothing, our defaults are set to this.</div><div class='del'>-                                 */</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* This is a place holder for every other error</div><div class='del'>-                         * case. I am not sure of how to interpret</div><div class='del'>-                         * ENOTCONN etc. As of now, choosing to ignore</div><div class='del'>-                         * down subvol and return a good result(if any)</div><div class='del'>-                         * from other subvol.</div><div class='del'>-                         */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                                DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                                "Failed to get real filename.");</div><div class='del'>-                        goto unlock;</div><div class='add'>+                if (local-&gt;xattr) {</div><div class='add'>+                    dict_unref(local-&gt;xattr);</div><div class='add'>+                    local-&gt;xattr = NULL;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='add'>+                if (local-&gt;xattr_req) {</div><div class='add'>+                    dict_unref(local-&gt;xattr_req);</div><div class='add'>+                    local-&gt;xattr_req = NULL;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='add'>+                local-&gt;op_ret = op_ret;</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+                       DHT_MSG_UPGRADE_BRICKS,</div><div class='add'>+                       "At least "</div><div class='add'>+                       "one of the bricks does not support "</div><div class='add'>+                       "this operation. Please upgrade all "</div><div class='add'>+                       "bricks.");</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                /* This subvol has the required file.</div><div class='del'>-                 * There could be other subvols which have returned</div><div class='del'>-                 * success already, choosing to return the latest good</div><div class='del'>-                 * result.</div><div class='add'>+            if (op_errno == ENOENT) {</div><div class='add'>+                /* Do nothing, our defaults are set to this.</div><div class='ctx'>                  */</div><div class='del'>-                if (local-&gt;xattr)</div><div class='del'>-                        dict_unref (local-&gt;xattr);</div><div class='del'>-                local-&gt;xattr = dict_ref (xattr);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;xattr_req) {</div><div class='del'>-                        dict_unref (local-&gt;xattr_req);</div><div class='del'>-                        local-&gt;xattr_req = NULL;</div><div class='del'>-                }</div><div class='del'>-                if (xdata)</div><div class='del'>-                        local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+            /* This is a place holder for every other error</div><div class='add'>+             * case. I am not sure of how to interpret</div><div class='add'>+             * ENOTCONN etc. As of now, choosing to ignore</div><div class='add'>+             * down subvol and return a good result(if any)</div><div class='add'>+             * from other subvol.</div><div class='add'>+             */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+                   DHT_MSG_GET_XATTR_FAILED, "Failed to get real filename.");</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* This subvol has the required file.</div><div class='add'>+         * There could be other subvols which have returned</div><div class='add'>+         * success already, choosing to return the latest good</div><div class='add'>+         * result.</div><div class='add'>+         */</div><div class='add'>+        if (local-&gt;xattr)</div><div class='add'>+            dict_unref(local-&gt;xattr);</div><div class='add'>+        local-&gt;xattr = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Found a matching "</div><div class='del'>-                              "file.");</div><div class='add'>+        if (local-&gt;xattr_req) {</div><div class='add'>+            dict_unref(local-&gt;xattr_req);</div><div class='add'>+            local-&gt;xattr_req = NULL;</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        if (xdata)</div><div class='add'>+            local-&gt;xattr_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Found a matching "</div><div class='add'>+                     "file.");</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                DHT_STACK_UNWIND (getxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;xattr,</div><div class='del'>-                                  local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        DHT_STACK_UNWIND(getxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;xattr, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_getxattr_get_real_filename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                loc_t *loc, const char *key, dict_t *xdata)</div><div class='add'>+dht_getxattr_get_real_filename(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                               const char *key, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        int              i = 0;</div><div class='del'>-        dht_layout_t    *layout = NULL;</div><div class='del'>-        int              cnt = 0;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+    cnt = local-&gt;call_cnt = layout-&gt;cnt;</div><div class='ctx'> </div><div class='del'>-        cnt = local-&gt;call_cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = ENOENT;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;op_errno = ENOENT;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='del'>-                STACK_WIND (frame, dht_getxattr_get_real_filename_cbk,</div><div class='del'>-                            subvol, subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                            loc, key, xdata);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='add'>+        STACK_WIND(frame, dht_getxattr_get_real_filename_cbk, subvol,</div><div class='add'>+                   subvol-&gt;fops-&gt;getxattr, loc, key, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_marker_populate_args (call_frame_t *frame, int type, int *gauge,</div><div class='del'>-                          xlator_t **subvols)</div><div class='add'>+dht_marker_populate_args(call_frame_t *frame, int type, int *gauge,</div><div class='add'>+                         xlator_t **subvols)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++)</div><div class='del'>-                subvols[i] = layout-&gt;list[i].xlator;</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++)</div><div class='add'>+        subvols[i] = layout-&gt;list[i].xlator;</div><div class='ctx'> </div><div class='del'>-        return layout-&gt;cnt;</div><div class='add'>+    return layout-&gt;cnt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_is_debug_xattr_key (char **array, char *key)</div><div class='add'>+dht_is_debug_xattr_key(char **array, char *key)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; array[i]; i++) {</div><div class='del'>-                if (fnmatch (array[i], key, FNM_NOESCAPE) == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; array[i]; i++) {</div><div class='add'>+        if (fnmatch(array[i], key, FNM_NOESCAPE) == 0)</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Note we already have frame-&gt;local initialised here*/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_handle_debug_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                           loc_t *loc, const char *key)</div><div class='add'>+dht_handle_debug_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                          const char *key)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        int           ret           = -1;</div><div class='del'>-        int           op_errno      = ENODATA;</div><div class='del'>-        char         *value         = NULL;</div><div class='del'>-        loc_t         file_loc      = {0};</div><div class='del'>-        const char    *name         = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!key) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = ENODATA;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    loc_t file_loc = {0};</div><div class='add'>+    const char *name = NULL;</div><div class='ctx'> </div><div class='del'>-        if (dht_is_debug_xattr_key (dht_dbg_vxattrs, (char *)key) == -1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!key) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;xattr = dict_new ();</div><div class='del'>-        if (!local-&gt;xattr) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dht_is_debug_xattr_key(dht_dbg_vxattrs, (char *)key) == -1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strncmp (key, DHT_DBG_HASHED_SUBVOL_KEY,</div><div class='del'>-                     SLEN (DHT_DBG_HASHED_SUBVOL_KEY)) == 0) {</div><div class='add'>+    local-&gt;xattr = dict_new();</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                name = key + strlen(DHT_DBG_HASHED_SUBVOL_KEY);</div><div class='del'>-                if (strlen(name) == 0) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (strncmp(key, DHT_DBG_HASHED_SUBVOL_KEY,</div><div class='add'>+                SLEN(DHT_DBG_HASHED_SUBVOL_KEY)) == 0) {</div><div class='add'>+        name = key + strlen(DHT_DBG_HASHED_SUBVOL_KEY);</div><div class='add'>+        if (strlen(name) == 0) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dht_build_child_loc (this, &amp;file_loc, loc, (char *)name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = dht_build_child_loc(this, &amp;file_loc, loc, (char *)name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                local-&gt;hashed_subvol = dht_subvol_get_hashed (this, &amp;file_loc);</div><div class='del'>-                if (local-&gt;hashed_subvol == NULL) {</div><div class='del'>-                        op_errno = ENODATA;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        local-&gt;hashed_subvol = dht_subvol_get_hashed(this, &amp;file_loc);</div><div class='add'>+        if (local-&gt;hashed_subvol == NULL) {</div><div class='add'>+            op_errno = ENODATA;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                value = gf_strdup (local-&gt;hashed_subvol-&gt;name);</div><div class='del'>-                if (!value) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        value = gf_strdup(local-&gt;hashed_subvol-&gt;name);</div><div class='add'>+        if (!value) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_dynstr (local-&gt;xattr,  (char *)key, value);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dict_set_dynstr(local-&gt;xattr, (char *)key, value);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;file_loc);</div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, ret, op_errno, local-&gt;xattr, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_wipe(&amp;file_loc);</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, ret, op_errno, local-&gt;xattr, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, const char *key, dict_t *xdata)</div><div class='del'>-#define DHT_IS_DIR(layout)  (layout-&gt;cnt &gt; 1)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        xlator_t     *subvol        = NULL;</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        xlator_t     *mds_subvol    = NULL;</div><div class='del'>-        xlator_t     *cached_subvol = NULL;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        dht_layout_t *layout        = NULL;</div><div class='del'>-        int           op_errno      = -1;</div><div class='del'>-        int           i             = 0;</div><div class='del'>-        int           cnt           = 0;</div><div class='del'>-        char         *node_uuid_key = NULL;</div><div class='del'>-        int           ret           = -1;</div><div class='del'>-</div><div class='del'>-        GF_CHECK_XATTR_KEY_AND_GOTO (key, IO_THREADS_QUEUE_SIZE_KEY,</div><div class='del'>-                                     op_errno, err);</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_GETXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_NULL,</div><div class='del'>-                        "Layout is NULL");</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='add'>+dht_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *key,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+#define DHT_IS_DIR(layout) (layout-&gt;cnt &gt; 1)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    char *node_uuid_key = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_CHECK_XATTR_KEY_AND_GOTO(key, IO_THREADS_QUEUE_SIZE_KEY, op_errno, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_GETXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LAYOUT_NULL,</div><div class='add'>+               "Layout is NULL");</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* skip over code which is irrelevant without a valid key */</div><div class='add'>+    if (!key)</div><div class='add'>+        goto no_key;</div><div class='add'>+</div><div class='add'>+    local-&gt;key = gf_strdup(key);</div><div class='add'>+    if (!local-&gt;key) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strncmp(key, conf-&gt;mds_xattr_key, strlen(key)) == 0) {</div><div class='add'>+        op_errno = ENOTSUP;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* skip over code which is irrelevant if !DHT_IS_DIR(layout) */</div><div class='add'>+    if (!DHT_IS_DIR(layout))</div><div class='add'>+        goto no_dht_is_dir;</div><div class='add'>+</div><div class='add'>+    if ((strncmp(key, GF_XATTR_GET_REAL_FILENAME_KEY,</div><div class='add'>+                 SLEN(GF_XATTR_GET_REAL_FILENAME_KEY)) == 0) &amp;&amp;</div><div class='add'>+        DHT_IS_DIR(layout)) {</div><div class='add'>+        dht_getxattr_get_real_filename(frame, this, loc, key, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!strcmp(key, GF_REBAL_FIND_LOCAL_SUBVOL)) {</div><div class='add'>+        ret = gf_asprintf(&amp;node_uuid_key, "%s", GF_XATTR_LIST_NODE_UUIDS_KEY);</div><div class='add'>+        if (ret == -1 || !node_uuid_key) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to copy node uuid key");</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        (void)snprintf(local-&gt;xsel, sizeof(local-&gt;xsel), "%s", node_uuid_key);</div><div class='add'>+        cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_find_local_subvol_cbk,</div><div class='add'>+                              conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                              node_uuid_key, xdata);</div><div class='ctx'>         }</div><div class='add'>+        if (node_uuid_key)</div><div class='add'>+            GF_FREE(node_uuid_key);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* skip over code which is irrelevant without a valid key */</div><div class='del'>-        if (!key)</div><div class='del'>-                goto no_key;</div><div class='del'>-</div><div class='del'>-        local-&gt;key = gf_strdup (key);</div><div class='del'>-        if (!local-&gt;key) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    if (!strcmp(key, GF_REBAL_OLD_FIND_LOCAL_SUBVOL)) {</div><div class='add'>+        ret = gf_asprintf(&amp;node_uuid_key, "%s", GF_XATTR_NODE_UUID_KEY);</div><div class='add'>+        if (ret == -1 || !node_uuid_key) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to copy node uuid key");</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (strncmp (key, conf-&gt;mds_xattr_key, strlen(key)) == 0) {</div><div class='del'>-                op_errno = ENOTSUP;</div><div class='del'>-                goto err;</div><div class='add'>+        (void)snprintf(local-&gt;xsel, sizeof(local-&gt;xsel), "%s", node_uuid_key);</div><div class='add'>+        cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_find_local_subvol_cbk,</div><div class='add'>+                              conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                              node_uuid_key, xdata);</div><div class='add'>+        }</div><div class='add'>+        if (node_uuid_key)</div><div class='add'>+            GF_FREE(node_uuid_key);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* for file use cached subvolume (obviously!): see if {}</div><div class='add'>+     * below</div><div class='add'>+     * for directory:</div><div class='add'>+     *  wind to all subvolumes and exclude subvolumes which</div><div class='add'>+     *  return ENOTCONN (in callback)</div><div class='add'>+     *</div><div class='add'>+     * NOTE: Don't trust inode here, as that may not be valid</div><div class='add'>+     *       (until inode_link() happens)</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (XATTR_IS_PATHINFO(key) || (strcmp(key, GF_XATTR_NODE_UUID_KEY) == 0) ||</div><div class='add'>+        (strcmp(key, GF_XATTR_LIST_NODE_UUIDS_KEY) == 0)) {</div><div class='add'>+        (void)snprintf(local-&gt;xsel, sizeof(local-&gt;xsel), "%s", key);</div><div class='add'>+        cnt = local-&gt;call_cnt = layout-&gt;cnt;</div><div class='add'>+        for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+            subvol = layout-&gt;list[i].xlator;</div><div class='add'>+            STACK_WIND(frame, dht_vgetxattr_dir_cbk, subvol,</div><div class='add'>+                       subvol-&gt;fops-&gt;getxattr, loc, key, xdata);</div><div class='ctx'>         }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* skip over code which is irrelevant if !DHT_IS_DIR(layout) */</div><div class='del'>-        if (!DHT_IS_DIR(layout))</div><div class='del'>-                goto no_dht_is_dir;</div><div class='del'>-</div><div class='del'>-        if ((strncmp (key, GF_XATTR_GET_REAL_FILENAME_KEY,</div><div class='del'>-                      SLEN (GF_XATTR_GET_REAL_FILENAME_KEY)) == 0)</div><div class='del'>-            &amp;&amp; DHT_IS_DIR(layout)) {</div><div class='del'>-                dht_getxattr_get_real_filename (frame, this, loc, key, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+no_dht_is_dir:</div><div class='add'>+    /* node-uuid or pathinfo for files */</div><div class='add'>+    if (XATTR_IS_PATHINFO(key) || (strcmp(key, GF_XATTR_NODE_UUID_KEY) == 0)) {</div><div class='add'>+        cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+        (void)snprintf(local-&gt;xsel, sizeof(local-&gt;xsel), "%s", key);</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_vgetxattr_cbk, cached_subvol,</div><div class='add'>+                          cached_subvol, cached_subvol-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                          key, xdata);</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (key, GF_REBAL_FIND_LOCAL_SUBVOL)) {</div><div class='del'>-                ret = gf_asprintf (&amp;node_uuid_key, "%s",</div><div class='del'>-                                   GF_XATTR_LIST_NODE_UUIDS_KEY);</div><div class='del'>-                if (ret == -1 || !node_uuid_key) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_NO_MEMORY,</div><div class='del'>-                                "Failed to copy node uuid key");</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                (void) snprintf (local-&gt;xsel, sizeof (local-&gt;xsel), "%s",</div><div class='del'>-                                 node_uuid_key);</div><div class='del'>-                cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-                for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_find_local_subvol_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;getxattr,</div><div class='del'>-                                           loc, node_uuid_key, xdata);</div><div class='del'>-                }</div><div class='del'>-                if (node_uuid_key)</div><div class='del'>-                        GF_FREE (node_uuid_key);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (key, GF_REBAL_OLD_FIND_LOCAL_SUBVOL)) {</div><div class='del'>-                ret = gf_asprintf (&amp;node_uuid_key, "%s",</div><div class='del'>-                                   GF_XATTR_NODE_UUID_KEY);</div><div class='del'>-                if (ret == -1 || !node_uuid_key) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_NO_MEMORY,</div><div class='del'>-                                "Failed to copy node uuid key");</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                (void) snprintf (local-&gt;xsel, sizeof (local-&gt;xsel), "%s",</div><div class='del'>-                                 node_uuid_key);</div><div class='del'>-                cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-                for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_find_local_subvol_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;getxattr,</div><div class='del'>-                                           loc, node_uuid_key, xdata);</div><div class='del'>-                }</div><div class='del'>-                if (node_uuid_key)</div><div class='del'>-                        GF_FREE (node_uuid_key);</div><div class='del'>-                return 0;</div><div class='add'>+    if (strcmp(key, GF_XATTR_LINKINFO_KEY) == 0) {</div><div class='add'>+        hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+        if (!hashed_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get hashed subvol for %s", loc-&gt;path);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* for file use cached subvolume (obviously!): see if {}</div><div class='del'>-         * below</div><div class='del'>-         * for directory:</div><div class='del'>-         *  wind to all subvolumes and exclude subvolumes which</div><div class='del'>-         *  return ENOTCONN (in callback)</div><div class='del'>-         *</div><div class='del'>-         * NOTE: Don't trust inode here, as that may not be valid</div><div class='del'>-         *       (until inode_link() happens)</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (XATTR_IS_PATHINFO (key)</div><div class='del'>-            || (strcmp (key, GF_XATTR_NODE_UUID_KEY) == 0)</div><div class='del'>-            || (strcmp (key, GF_XATTR_LIST_NODE_UUIDS_KEY) == 0)) {</div><div class='del'>-                (void) snprintf (local-&gt;xsel, sizeof (local-&gt;xsel), "%s", key);</div><div class='del'>-                cnt = local-&gt;call_cnt = layout-&gt;cnt;</div><div class='del'>-                for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                        subvol = layout-&gt;list[i].xlator;</div><div class='del'>-                        STACK_WIND (frame, dht_vgetxattr_dir_cbk,</div><div class='del'>-                                    subvol, subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                                    loc, key, xdata);</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='add'>+        cached_subvol = dht_subvol_get_cached(this, loc-&gt;inode);</div><div class='add'>+        if (!cached_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_CACHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get cached subvol for %s", loc-&gt;path);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-no_dht_is_dir:</div><div class='del'>-        /* node-uuid or pathinfo for files */</div><div class='del'>-        if (XATTR_IS_PATHINFO (key)</div><div class='del'>-            || (strcmp (key, GF_XATTR_NODE_UUID_KEY) == 0)) {</div><div class='del'>-                cached_subvol = local-&gt;cached_subvol;</div><div class='del'>-                (void) snprintf (local-&gt;xsel, sizeof (local-&gt;xsel), "%s", key);</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_vgetxattr_cbk, cached_subvol,</div><div class='del'>-                                   cached_subvol, cached_subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                                   loc, key, xdata);</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='add'>+        if (hashed_subvol == cached_subvol) {</div><div class='add'>+            op_errno = ENODATA;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (key, GF_XATTR_LINKINFO_KEY) == 0) {</div><div class='del'>-</div><div class='del'>-                hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-                if (!hashed_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get hashed subvol for %s",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                cached_subvol = dht_subvol_get_cached (this, loc-&gt;inode);</div><div class='del'>-                if (!cached_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_CACHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get cached subvol for %s",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (hashed_subvol == cached_subvol) {</div><div class='del'>-                        op_errno = ENODATA;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND (frame, dht_linkinfo_getxattr_cbk, hashed_subvol,</div><div class='del'>-                            hashed_subvol-&gt;fops-&gt;getxattr, loc,</div><div class='del'>-                            GF_XATTR_PATHINFO_KEY, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND(frame, dht_linkinfo_getxattr_cbk, hashed_subvol,</div><div class='add'>+                   hashed_subvol-&gt;fops-&gt;getxattr, loc, GF_XATTR_PATHINFO_KEY,</div><div class='add'>+                   xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (dht_is_debug_xattr_key (dht_dbg_vxattrs, (char *)key) &gt;= 0) {</div><div class='del'>-                dht_handle_debug_getxattr (frame, this, loc, key);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (dht_is_debug_xattr_key(dht_dbg_vxattrs, (char *)key) &gt;= 0) {</div><div class='add'>+        dht_handle_debug_getxattr(frame, this, loc, key);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> no_key:</div><div class='del'>-        if (cluster_handle_marker_getxattr (frame, loc, key, conf-&gt;vol_uuid,</div><div class='del'>-                                            dht_getxattr_unwind,</div><div class='del'>-                                            dht_marker_populate_args) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (cluster_handle_marker_getxattr(frame, loc, key, conf-&gt;vol_uuid,</div><div class='add'>+                                       dht_getxattr_unwind,</div><div class='add'>+                                       dht_marker_populate_args) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (DHT_IS_DIR(layout)) {</div><div class='del'>-                local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-                cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_get (loc-&gt;inode, this, &amp;mds_subvol);</div><div class='del'>-                if (!mds_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Cannot determine MDS, fetching xattr %s randomly"</div><div class='del'>-                                " from a subvol for path %s ", key, loc-&gt;path);</div><div class='del'>-                } else {</div><div class='del'>-                        /* TODO need to handle it, As of now we are</div><div class='del'>-                           choosing availability instead of chossing</div><div class='del'>-                           consistencty, in case of mds_subvol is</div><div class='del'>-                           down winding a getxattr call on other subvol</div><div class='del'>-                           and return xattr</div><div class='del'>-                        */</div><div class='del'>-                        local-&gt;mds_subvol = mds_subvol;</div><div class='del'>-                        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                                if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='del'>-                                        if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                        GF_LOG_INFO, 0,</div><div class='del'>-                                                        DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='del'>-                                                        "MDS %s is down for path"</div><div class='del'>-                                                        " path %s so fetching xattr "</div><div class='del'>-                                                        "%s randomly from a subvol ",</div><div class='del'>-                                                        local-&gt;mds_subvol-&gt;name,</div><div class='del'>-                                                        loc-&gt;path, key);</div><div class='del'>-                                                ret = 1;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    if (DHT_IS_DIR(layout)) {</div><div class='add'>+        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_get(loc-&gt;inode, this, &amp;mds_subvol);</div><div class='add'>+        if (!mds_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Cannot determine MDS, fetching xattr %s randomly"</div><div class='add'>+                   " from a subvol for path %s ",</div><div class='add'>+                   key, loc-&gt;path);</div><div class='add'>+        } else {</div><div class='add'>+            /* TODO need to handle it, As of now we are</div><div class='add'>+               choosing availability instead of chossing</div><div class='add'>+               consistencty, in case of mds_subvol is</div><div class='add'>+               down winding a getxattr call on other subvol</div><div class='add'>+               and return xattr</div><div class='add'>+            */</div><div class='add'>+            local-&gt;mds_subvol = mds_subvol;</div><div class='add'>+            for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+                if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='add'>+                    if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                               DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='add'>+                               "MDS %s is down for path"</div><div class='add'>+                               " path %s so fetching xattr "</div><div class='add'>+                               "%s randomly from a subvol ",</div><div class='add'>+                               local-&gt;mds_subvol-&gt;name, loc-&gt;path, key);</div><div class='add'>+                        ret = 1;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!ret &amp;&amp; key &amp;&amp; local-&gt;mds_subvol &amp;&amp; dht_match_xattr (key)) {</div><div class='del'>-                        STACK_WIND (frame, dht_mds_getxattr_cbk,</div><div class='del'>-                                    local-&gt;mds_subvol,</div><div class='del'>-                                    local-&gt;mds_subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                                    loc, key, xdata);</div><div class='add'>+        if (!ret &amp;&amp; key &amp;&amp; local-&gt;mds_subvol &amp;&amp; dht_match_xattr(key)) {</div><div class='add'>+            STACK_WIND(frame, dht_mds_getxattr_cbk, local-&gt;mds_subvol,</div><div class='add'>+                       local-&gt;mds_subvol-&gt;fops-&gt;getxattr, loc, key, xdata);</div><div class='ctx'> </div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                cnt = local-&gt;call_cnt  = 1;</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        cnt = local-&gt;call_cnt = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='del'>-                STACK_WIND (frame, dht_getxattr_cbk,</div><div class='del'>-                            subvol, subvol-&gt;fops-&gt;getxattr,</div><div class='del'>-                            loc, key, xdata);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='add'>+        STACK_WIND(frame, dht_getxattr_cbk, subvol, subvol-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                   key, xdata);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (getxattr, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(getxattr, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> #undef DHT_IS_DIR</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fgetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, const char *key, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        xlator_t     *subvol        = NULL;</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        dht_layout_t *layout        = NULL;</div><div class='del'>-        int           op_errno      = -1;</div><div class='del'>-        int           i             = 0;</div><div class='del'>-        int           cnt           = 0;</div><div class='del'>-        xlator_t      *mds_subvol = NULL;</div><div class='del'>-        int           ret           = -1;</div><div class='del'>-        dht_conf_t    *conf         = NULL;</div><div class='del'>-        char           gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FGETXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-                goto err;</div><div class='add'>+dht_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *key,</div><div class='add'>+              dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FGETXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LAYOUT_NULL,</div><div class='add'>+               "Layout is NULL");</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (key) {</div><div class='add'>+        local-&gt;key = gf_strdup(key);</div><div class='add'>+        if (!local-&gt;key) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_NULL,</div><div class='del'>-                        "Layout is NULL");</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (fd-&gt;inode)</div><div class='add'>+        gf_uuid_unparse(fd-&gt;inode-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        if (key) {</div><div class='del'>-                local-&gt;key = gf_strdup (key);</div><div class='del'>-                if (!local-&gt;key) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='add'>+    if ((fd-&gt;inode-&gt;ia_type == IA_IFDIR) &amp;&amp; key &amp;&amp;</div><div class='add'>+        (strncmp(key, GF_XATTR_LOCKINFO_KEY, SLEN(GF_XATTR_LOCKINFO_KEY)) !=</div><div class='add'>+         0)) {</div><div class='add'>+        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_get(fd-&gt;inode, this, &amp;mds_subvol);</div><div class='add'>+</div><div class='add'>+        if (!mds_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "cannot determine MDS, fetching xattr %s "</div><div class='add'>+                   " randomly from a subvol for gfid %s ",</div><div class='add'>+                   key, gfid);</div><div class='add'>+        } else {</div><div class='add'>+            /* TODO need to handle it, As of now we are</div><div class='add'>+               choosing availability instead of chossing</div><div class='add'>+               consistencty, in case of hashed_subvol is</div><div class='add'>+               down winding a getxattr call on other subvol</div><div class='add'>+               and return xattr</div><div class='add'>+            */</div><div class='add'>+            local-&gt;mds_subvol = mds_subvol;</div><div class='add'>+            for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+                if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='add'>+                    if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                               DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='add'>+                               "MDS subvolume %s is down"</div><div class='add'>+                               " for gfid %s so fetching xattr "</div><div class='add'>+                               " %s randomly from a subvol ",</div><div class='add'>+                               local-&gt;mds_subvol-&gt;name, gfid, key);</div><div class='add'>+                        ret = 1;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (fd-&gt;inode)</div><div class='del'>-                gf_uuid_unparse(fd-&gt;inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if ((fd-&gt;inode-&gt;ia_type == IA_IFDIR)</div><div class='del'>-            &amp;&amp; key</div><div class='del'>-            &amp;&amp; (strncmp (key, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                         SLEN (GF_XATTR_LOCKINFO_KEY)) != 0)) {</div><div class='del'>-                local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-                cnt             = conf-&gt;subvolume_cnt;</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_get (fd-&gt;inode, this, &amp;mds_subvol);</div><div class='del'>-</div><div class='del'>-                if (!mds_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "cannot determine MDS, fetching xattr %s "</div><div class='del'>-                                " randomly from a subvol for gfid %s ",</div><div class='del'>-                                key, gfid);</div><div class='del'>-                } else {</div><div class='del'>-                        /* TODO need to handle it, As of now we are</div><div class='del'>-                           choosing availability instead of chossing</div><div class='del'>-                           consistencty, in case of hashed_subvol is</div><div class='del'>-                           down winding a getxattr call on other subvol</div><div class='del'>-                           and return xattr</div><div class='del'>-                        */</div><div class='del'>-                        local-&gt;mds_subvol = mds_subvol;</div><div class='del'>-                        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                                if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='del'>-                                        if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                        GF_LOG_WARNING, 0,</div><div class='del'>-                                                        DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='del'>-                                                        "MDS subvolume %s is down"</div><div class='del'>-                                                        " for gfid %s so fetching xattr "</div><div class='del'>-                                                        " %s randomly from a subvol ",</div><div class='del'>-                                                        local-&gt;mds_subvol-&gt;name,</div><div class='del'>-                                                        gfid, key);</div><div class='del'>-                                                ret = 1;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!ret &amp;&amp; key &amp;&amp; local-&gt;mds_subvol &amp;&amp;</div><div class='del'>-                    dht_match_xattr (key)) {</div><div class='del'>-                        STACK_WIND (frame, dht_mds_getxattr_cbk,</div><div class='del'>-                                    local-&gt;mds_subvol,</div><div class='del'>-                                    local-&gt;mds_subvol-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                                    fd, key, NULL);</div><div class='add'>+        if (!ret &amp;&amp; key &amp;&amp; local-&gt;mds_subvol &amp;&amp; dht_match_xattr(key)) {</div><div class='add'>+            STACK_WIND(frame, dht_mds_getxattr_cbk, local-&gt;mds_subvol,</div><div class='add'>+                       local-&gt;mds_subvol-&gt;fops-&gt;fgetxattr, fd, key, NULL);</div><div class='ctx'> </div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                cnt = local-&gt;call_cnt  = 1;</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+    } else {</div><div class='add'>+        cnt = local-&gt;call_cnt = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='del'>-                STACK_WIND (frame, dht_getxattr_cbk,</div><div class='del'>-                            subvol, subvol-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                            fd, key, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='add'>+        STACK_WIND(frame, dht_getxattr_cbk, subvol, subvol-&gt;fops-&gt;fgetxattr, fd,</div><div class='add'>+                   key, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fgetxattr, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fgetxattr, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_file_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_file_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-        dht_local_t  *local   = NULL;</div><div class='del'>-        xlator_t     *prev    = NULL;</div><div class='del'>-        struct iatt  *stbuf   = NULL;</div><div class='del'>-        inode_t      *inode   = NULL;</div><div class='del'>-        xlator_t     *subvol1 = NULL, *subvol2 = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    struct iatt *stbuf = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    xlator_t *subvol1 = NULL, *subvol2 = NULL;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if ((local-&gt;fop == GF_FOP_FSETXATTR) &amp;&amp;</div><div class='del'>-            op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing (op_errno)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1.",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_FSETXATTR) &amp;&amp; op_ret == -1 &amp;&amp;</div><div class='add'>+        (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1.",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY, (void **) &amp;stbuf);</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if ((!op_ret) &amp;&amp; !stbuf) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;stbuf);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_setxattr2;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;rebalance.xdata = dict_ref (xdata);</div><div class='add'>+    if ((!op_ret) &amp;&amp; !stbuf) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (stbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_setxattr2;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;rebalance.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        /* Phase 1 of migration */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (stbuf)) {</div><div class='del'>-                inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(stbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, inode,</div><div class='del'>-                                                  &amp;subvol1, &amp;subvol2);</div><div class='del'>-                if (!dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                              subvol1, subvol2)) {</div><div class='del'>-                        dht_setxattr2 (this, subvol2, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    /* Phase 1 of migration */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(stbuf)) {</div><div class='add'>+        inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='ctx'> </div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, inode, &amp;subvol1, &amp;subvol2);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, subvol1, subvol2)) {</div><div class='add'>+            dht_setxattr2(this, subvol2, frame, 0);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function is call by dict_foreach_fnmatch if key is match with</div><div class='ctx'>    user.* and set boolean flag to true</div><div class='ctx'> */</div><div class='ctx'> static int</div><div class='del'>-dht_is_user_xattr (dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+dht_is_user_xattr(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t *user_xattr_found = data;</div><div class='del'>-        *user_xattr_found = _gf_true;</div><div class='del'>-        return 0;</div><div class='add'>+    gf_boolean_t *user_xattr_found = data;</div><div class='add'>+    *user_xattr_found = _gf_true;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Common code to wind a (f)(set|remove)xattr call to set xattr on directory</div><div class='del'>-*/</div><div class='add'>+ */</div><div class='ctx'> int</div><div class='del'>-dht_dir_common_set_remove_xattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                                 fd_t *fd, dict_t *xattr, int flags, dict_t *xdata,</div><div class='del'>-                                 int *op_errno)</div><div class='del'>-</div><div class='del'>-{</div><div class='del'>-        dict_t       *xattrop             = NULL;</div><div class='del'>-        int32_t       subone[1]            = {-1};</div><div class='del'>-        gf_boolean_t  uxattr_key_found     = _gf_false;</div><div class='del'>-        xlator_t     *mds_subvol          = NULL;</div><div class='del'>-        xlator_t     *travvol              = NULL;</div><div class='del'>-        dht_conf_t   *conf                = NULL;</div><div class='del'>-        int           ret                  = -1;</div><div class='del'>-        int           i                    = 0;</div><div class='del'>-        int           call_cnt             = 0;</div><div class='del'>-        dht_local_t  *local                = NULL;</div><div class='del'>-        char          gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local    = frame-&gt;local;</div><div class='del'>-        call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-        if (!gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='del'>-            (local-&gt;fop == GF_FOP_FSETXATTR)) {</div><div class='del'>-                /* Check if any user xattr present in xattr</div><div class='del'>-                */</div><div class='del'>-                dict_foreach_fnmatch (xattr, "user*", dht_is_user_xattr,</div><div class='del'>-                                      &amp;uxattr_key_found);</div><div class='del'>-</div><div class='del'>-                /* Check if any custom key xattr present in dict xattr</div><div class='del'>-                   and start index from 1 because user xattr already</div><div class='del'>-                   checked in previous line</div><div class='del'>-                */</div><div class='del'>-                for (i = 1; xattrs_to_heal[i]; i++)</div><div class='del'>-                        if (dict_get (xattr, xattrs_to_heal[i]))</div><div class='del'>-                                uxattr_key_found = _gf_true;</div><div class='del'>-        }</div><div class='add'>+dht_dir_common_set_remove_xattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                                fd_t *fd, dict_t *xattr, int flags,</div><div class='add'>+                                dict_t *xdata, int *op_errno)</div><div class='add'>+</div><div class='add'>+{</div><div class='add'>+    dict_t *xattrop = NULL;</div><div class='add'>+    int32_t subone[1] = {-1};</div><div class='add'>+    gf_boolean_t uxattr_key_found = _gf_false;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    xlator_t *travvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    if (!gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((local-&gt;fop == GF_FOP_REMOVEXATTR) ||</div><div class='del'>-            (local-&gt;fop == GF_FOP_FREMOVEXATTR)) {</div><div class='del'>-                /* Check if any custom key xattr present in local-&gt;key</div><div class='del'>-                */</div><div class='del'>-                for (i = 0; xattrs_to_heal[i]; i++)</div><div class='del'>-                        if (strstr (local-&gt;key, xattrs_to_heal[i]))</div><div class='del'>-                                uxattr_key_found = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_SETXATTR) || (local-&gt;fop == GF_FOP_FSETXATTR)) {</div><div class='add'>+        /* Check if any user xattr present in xattr</div><div class='add'>+         */</div><div class='add'>+        dict_foreach_fnmatch(xattr, "user*", dht_is_user_xattr,</div><div class='add'>+                             &amp;uxattr_key_found);</div><div class='ctx'> </div><div class='del'>-        /* If there is no custom key xattr present or gfid is root</div><div class='del'>-           or call_cnt is 1 then wind a (f)setxattr call on all subvols</div><div class='add'>+        /* Check if any custom key xattr present in dict xattr</div><div class='add'>+           and start index from 1 because user xattr already</div><div class='add'>+           checked in previous line</div><div class='ctx'>         */</div><div class='del'>-        if (!uxattr_key_found || __is_root_gfid (local-&gt;gfid) || call_cnt == 1) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        travvol = conf-&gt;subvolumes[i];</div><div class='del'>-                        if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='del'>-                            (local-&gt;fop == GF_FOP_FSETXATTR)) {</div><div class='del'>-                                if (fd) {</div><div class='del'>-                                        STACK_WIND_COOKIE (frame, dht_err_cbk,</div><div class='del'>-                                                           travvol, travvol,</div><div class='del'>-                                                           travvol-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                                                           fd, xattr, flags, xdata);</div><div class='del'>-                                } else {</div><div class='del'>-                                        STACK_WIND_COOKIE (frame, dht_err_cbk,</div><div class='del'>-                                                           travvol, travvol,</div><div class='del'>-                                                           travvol-&gt;fops-&gt;setxattr,</div><div class='del'>-                                                           loc, xattr, flags, xdata);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if ((local-&gt;fop == GF_FOP_REMOVEXATTR) ||</div><div class='del'>-                            (local-&gt;fop == GF_FOP_FREMOVEXATTR)) {</div><div class='del'>-                                if (fd) {</div><div class='del'>-                                        STACK_WIND_COOKIE (frame, dht_err_cbk,</div><div class='del'>-                                                           travvol, travvol,</div><div class='del'>-                                                           travvol-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                                                           fd, local-&gt;key, local-&gt;xattr_req);</div><div class='del'>-                                } else {</div><div class='del'>-                                        STACK_WIND_COOKIE (frame, dht_err_cbk,</div><div class='del'>-                                                           travvol, travvol,</div><div class='del'>-                                                           travvol-&gt;fops-&gt;removexattr,</div><div class='del'>-                                                           loc, local-&gt;key, local-&gt;xattr_req);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Calculate hash subvol based on inode and parent inode</div><div class='add'>+        for (i = 1; xattrs_to_heal[i]; i++)</div><div class='add'>+            if (dict_get(xattr, xattrs_to_heal[i]))</div><div class='add'>+                uxattr_key_found = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_REMOVEXATTR) ||</div><div class='add'>+        (local-&gt;fop == GF_FOP_FREMOVEXATTR)) {</div><div class='add'>+        /* Check if any custom key xattr present in local-&gt;key</div><div class='ctx'>          */</div><div class='del'>-        if (fd) {</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_get (fd-&gt;inode, this, &amp;mds_subvol);</div><div class='del'>-        } else {</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_get (loc-&gt;inode, this, &amp;mds_subvol);</div><div class='del'>-        }</div><div class='del'>-        if (ret || !mds_subvol) {</div><div class='add'>+        for (i = 0; xattrs_to_heal[i]; i++)</div><div class='add'>+            if (strstr(local-&gt;key, xattrs_to_heal[i]))</div><div class='add'>+                uxattr_key_found = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If there is no custom key xattr present or gfid is root</div><div class='add'>+       or call_cnt is 1 then wind a (f)setxattr call on all subvols</div><div class='add'>+    */</div><div class='add'>+    if (!uxattr_key_found || __is_root_gfid(local-&gt;gfid) || call_cnt == 1) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            travvol = conf-&gt;subvolumes[i];</div><div class='add'>+            if ((local-&gt;fop == GF_FOP_SETXATTR) ||</div><div class='add'>+                (local-&gt;fop == GF_FOP_FSETXATTR)) {</div><div class='ctx'>                 if (fd) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get mds subvol for fd %p"</div><div class='del'>-                                "gfid is %s ", fd, gfid_local);</div><div class='add'>+                    STACK_WIND_COOKIE(frame, dht_err_cbk, travvol, travvol,</div><div class='add'>+                                      travvol-&gt;fops-&gt;fsetxattr, fd, xattr,</div><div class='add'>+                                      flags, xdata);</div><div class='ctx'>                 } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get mds subvol for path %s"</div><div class='del'>-                                "gfid is %s ", loc-&gt;path, gfid_local);</div><div class='add'>+                    STACK_WIND_COOKIE(frame, dht_err_cbk, travvol, travvol,</div><div class='add'>+                                      travvol-&gt;fops-&gt;setxattr, loc, xattr,</div><div class='add'>+                                      flags, xdata);</div><div class='ctx'>                 }</div><div class='del'>-                (*op_errno) = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;mds_subvol = mds_subvol;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] ==  mds_subvol) {</div><div class='del'>-                        if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        0, DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='del'>-                                        "MDS subvol is down for path "</div><div class='del'>-                                        " %s gfid is %s Unable to set xattr " ,</div><div class='del'>-                                        local-&gt;loc.path, gfid_local);</div><div class='del'>-                                (*op_errno) = ENOTCONN;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (uxattr_key_found) {</div><div class='del'>-                xattrop = dict_new ();</div><div class='del'>-                if (!xattrop) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY,</div><div class='del'>-                                0, "dictionary creation failed for path %s "</div><div class='del'>-                                "for gfid is %s ", local-&gt;loc.path, gfid_local);</div><div class='del'>-                        (*op_errno) = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                /* Subtract current MDS xattr value to -1 , value of MDS</div><div class='del'>-                   xattr represents no. of times xattr modification failed</div><div class='del'>-                   on non MDS subvols.</div><div class='del'>-                */</div><div class='del'>-                ret = dht_dict_set_array (xattrop, conf-&gt;mds_xattr_key, subone, 1);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "dictionary set array failed for path %s "</div><div class='del'>-                                "for gfid is %s ", local-&gt;loc.path, gfid_local);</div><div class='del'>-                        if (xattrop)</div><div class='del'>-                                dict_unref (xattrop);</div><div class='del'>-                        (*op_errno) = ret;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                /* Wind a xattrop call to use ref counting approach</div><div class='del'>-                   update mds xattr to -1 before update xattr on</div><div class='del'>-                   hashed subvol and update mds xattr to +1 after update</div><div class='del'>-                   xattr on all non hashed subvol</div><div class='del'>-                */</div><div class='add'>+            if ((local-&gt;fop == GF_FOP_REMOVEXATTR) ||</div><div class='add'>+                (local-&gt;fop == GF_FOP_FREMOVEXATTR)) {</div><div class='ctx'>                 if (fd) {</div><div class='del'>-                        STACK_WIND (frame, dht_xattrop_mds_cbk,</div><div class='del'>-                                    local-&gt;mds_subvol,</div><div class='del'>-                                    local-&gt;mds_subvol-&gt;fops-&gt;fxattrop,</div><div class='del'>-                                     fd, GF_XATTROP_ADD_ARRAY, xattrop, NULL);</div><div class='add'>+                    STACK_WIND_COOKIE(frame, dht_err_cbk, travvol, travvol,</div><div class='add'>+                                      travvol-&gt;fops-&gt;fremovexattr, fd,</div><div class='add'>+                                      local-&gt;key, local-&gt;xattr_req);</div><div class='ctx'>                 } else {</div><div class='del'>-                        STACK_WIND (frame, dht_xattrop_mds_cbk,</div><div class='del'>-                                    local-&gt;mds_subvol,</div><div class='del'>-                                    local-&gt;mds_subvol-&gt;fops-&gt;xattrop,</div><div class='del'>-                                    loc, GF_XATTROP_ADD_ARRAY,</div><div class='del'>-                                    xattrop, NULL);</div><div class='add'>+                    STACK_WIND_COOKIE(frame, dht_err_cbk, travvol, travvol,</div><div class='add'>+                                      travvol-&gt;fops-&gt;removexattr, loc,</div><div class='add'>+                                      local-&gt;key, local-&gt;xattr_req);</div><div class='ctx'>                 }</div><div class='del'>-                if (xattrop)</div><div class='del'>-                        dict_unref (xattrop);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='del'>-err:</div><div class='del'>-        return -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_fsetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, dict_t *xattr, int flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        xlator_t     *subvol   = NULL;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-        int           op_errno = EINVAL;</div><div class='del'>-        dht_conf_t   *conf     = NULL;</div><div class='del'>-        dht_layout_t *layout   = NULL;</div><div class='del'>-        int           ret      = -1;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;defrag)</div><div class='del'>-                GF_IF_INTERNAL_XATTR_GOTO (conf-&gt;wild_xattr_name, xattr,</div><div class='del'>-                                           op_errno, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FSETXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='add'>+    /* Calculate hash subvol based on inode and parent inode</div><div class='add'>+     */</div><div class='add'>+    if (fd) {</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_get(fd-&gt;inode, this, &amp;mds_subvol);</div><div class='add'>+    } else {</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_get(loc-&gt;inode, this, &amp;mds_subvol);</div><div class='add'>+    }</div><div class='add'>+    if (ret || !mds_subvol) {</div><div class='add'>+        if (fd) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get mds subvol for fd %p"</div><div class='add'>+                   "gfid is %s ",</div><div class='add'>+                   fd, gfid_local);</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get mds subvol for path %s"</div><div class='add'>+                   "gfid is %s ",</div><div class='add'>+                   loc-&gt;path, gfid_local);</div><div class='add'>+        }</div><div class='add'>+        (*op_errno) = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;mds_subvol = mds_subvol;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='add'>+            if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='add'>+                       "MDS subvol is down for path "</div><div class='add'>+                       " %s gfid is %s Unable to set xattr ",</div><div class='add'>+                       local-&gt;loc.path, gfid_local);</div><div class='add'>+                (*op_errno) = ENOTCONN;</div><div class='ctx'>                 goto err;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        local-&gt;xattr_req = xdata ? dict_ref (xdata) : dict_new ();</div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;hashed_subvol = NULL;</div><div class='del'>-                ret = dht_dir_common_set_remove_xattr (frame, this, NULL, fd,</div><div class='del'>-                                                       xattr, flags, xdata, &amp;op_errno);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (uxattr_key_found) {</div><div class='add'>+        xattrop = dict_new();</div><div class='add'>+        if (!xattrop) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='add'>+                   "dictionary creation failed for path %s "</div><div class='add'>+                   "for gfid is %s ",</div><div class='add'>+                   local-&gt;loc.path, gfid_local);</div><div class='add'>+            (*op_errno) = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+        /* Subtract current MDS xattr value to -1 , value of MDS</div><div class='add'>+           xattr represents no. of times xattr modification failed</div><div class='add'>+           on non MDS subvols.</div><div class='add'>+        */</div><div class='add'>+        ret = dht_dict_set_array(xattrop, conf-&gt;mds_xattr_key, subone, 1);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "dictionary set array failed for path %s "</div><div class='add'>+                   "for gfid is %s ",</div><div class='add'>+                   local-&gt;loc.path, gfid_local);</div><div class='add'>+            if (xattrop)</div><div class='add'>+                dict_unref(xattrop);</div><div class='add'>+            (*op_errno) = ret;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        /* Wind a xattrop call to use ref counting approach</div><div class='add'>+           update mds xattr to -1 before update xattr on</div><div class='add'>+           hashed subvol and update mds xattr to +1 after update</div><div class='add'>+           xattr on all non hashed subvol</div><div class='add'>+        */</div><div class='add'>+        if (fd) {</div><div class='add'>+            STACK_WIND(frame, dht_xattrop_mds_cbk, local-&gt;mds_subvol,</div><div class='add'>+                       local-&gt;mds_subvol-&gt;fops-&gt;fxattrop, fd,</div><div class='add'>+                       GF_XATTROP_ADD_ARRAY, xattrop, NULL);</div><div class='ctx'>         } else {</div><div class='add'>+            STACK_WIND(frame, dht_xattrop_mds_cbk, local-&gt;mds_subvol,</div><div class='add'>+                       local-&gt;mds_subvol-&gt;fops-&gt;xattrop, loc,</div><div class='add'>+                       GF_XATTROP_ADD_ARRAY, xattrop, NULL);</div><div class='add'>+        }</div><div class='add'>+        if (xattrop)</div><div class='add'>+            dict_unref(xattrop);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-                local-&gt;rebalance.xattr = dict_ref (xattr);</div><div class='del'>-                local-&gt;rebalance.flags = flags;</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int8 (local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Failed to set dictionary key %s for fd=%p",</div><div class='del'>-                                      DHT_IATT_IN_XDATA_KEY, fd);</div><div class='del'>-                }</div><div class='add'>+    return 0;</div><div class='add'>+err:</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr,</div><div class='add'>+              int flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;defrag)</div><div class='add'>+        GF_IF_INTERNAL_XATTR_GOTO(conf-&gt;wild_xattr_name, xattr, op_errno, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FSETXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;hashed_subvol = NULL;</div><div class='add'>+        ret = dht_dir_common_set_remove_xattr(frame, this, NULL, fd, xattr,</div><div class='add'>+                                              flags, xdata, &amp;op_errno);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='add'>+        local-&gt;rebalance.xattr = dict_ref(xattr);</div><div class='add'>+        local-&gt;rebalance.flags = flags;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setxattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fsetxattr, fd, xattr,</div><div class='del'>-                                   flags, local-&gt;xattr_req);</div><div class='add'>+        ret = dict_set_int8(local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Failed to set dictionary key %s for fd=%p",</div><div class='add'>+                         DHT_IATT_IN_XDATA_KEY, fd);</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setxattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fsetxattr, fd, xattr, flags,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fsetxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fsetxattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_checking_pathinfo_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int op_ret, int op_errno, dict_t *xattr,</div><div class='del'>-                           dict_t *xdata)</div><div class='add'>+dht_checking_pathinfo_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int op_ret, int op_errno, dict_t *xattr,</div><div class='add'>+                          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int           i     = -1;</div><div class='del'>-        int           ret   = -1;</div><div class='del'>-        char         *value = NULL;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_conf_t   *conf  = NULL;</div><div class='del'>-        xlator_t     *prev  = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *value = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xattr, GF_XATTR_PATHINFO_KEY, &amp;value);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_str(xattr, GF_XATTR_PATHINFO_KEY, &amp;value);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (value, local-&gt;key)) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;subvolumes[i] == prev)</div><div class='del'>-                                conf-&gt;decommissioned_bricks[i] = prev;</div><div class='del'>-                }</div><div class='add'>+    if (!strcmp(value, local-&gt;key)) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;subvolumes[i] == prev)</div><div class='add'>+                conf-&gt;decommissioned_bricks[i] = prev;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, local-&gt;op_ret, ENOTSUP, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, ENOTSUP, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_setxattr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_setxattr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto err;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setxattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;rebalance.xattr,</div><div class='del'>-                                   local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setxattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='del'>-                                   local-&gt;rebalance.xattr,</div><div class='del'>-                                   local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETXATTR) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setxattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;rebalance.xattr, local-&gt;rebalance.flags,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setxattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+                          local-&gt;rebalance.xattr, local-&gt;rebalance.flags,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (setxattr, frame, (local ? local-&gt;op_ret : -1),</div><div class='del'>-                          op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(setxattr, frame, (local ? local-&gt;op_ret : -1), op_errno,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_nuke_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_nuke_dir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_nuke_dir(call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *tmp)</div><div class='add'>+{</div><div class='add'>+    if (!IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, -1, ENOTSUP, NULL);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_nuke_dir (call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *tmp)</div><div class='del'>-{</div><div class='del'>-        if (!IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, -1, ENOTSUP, NULL);</div><div class='del'>-                return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Setxattr didn't need the parent, but rmdir does. */</div><div class='add'>+    loc-&gt;parent = inode_parent(loc-&gt;inode, NULL, NULL);</div><div class='add'>+    if (!loc-&gt;parent) {</div><div class='add'>+        DHT_STACK_UNWIND(setxattr, frame, -1, ENOENT, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_copy(loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    if (!loc-&gt;name &amp;&amp; loc-&gt;path) {</div><div class='add'>+        loc-&gt;name = strrchr(loc-&gt;path, '/');</div><div class='add'>+        if (loc-&gt;name) {</div><div class='add'>+            ++(loc-&gt;name);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Setxattr didn't need the parent, but rmdir does. */</div><div class='del'>-        loc-&gt;parent = inode_parent (loc-&gt;inode, NULL, NULL);</div><div class='del'>-        if (!loc-&gt;parent) {</div><div class='del'>-                DHT_STACK_UNWIND (setxattr, frame, -1, ENOENT, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        gf_uuid_copy (loc-&gt;pargfid, loc-&gt;parent-&gt;gfid);</div><div class='add'>+    /*</div><div class='add'>+     * We do this instead of calling dht_rmdir_do directly for two reasons.</div><div class='add'>+     * The first is that we want to reuse all of the initialization that</div><div class='add'>+     * dht_rmdir does, so if it ever changes we'll just follow along.  The</div><div class='add'>+     * second (i.e. why we don't use STACK_WIND_TAIL) is so that we don't</div><div class='add'>+     * obscure the fact that we came in via this path instead of a genuine</div><div class='add'>+     * rmdir.  That makes debugging just a tiny bit easier.</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, dht_nuke_dir_cbk, this, this-&gt;fops-&gt;rmdir, loc, 1, NULL);</div><div class='ctx'> </div><div class='del'>-        if (!loc-&gt;name &amp;&amp; loc-&gt;path) {</div><div class='del'>-                loc-&gt;name = strrchr (loc-&gt;path, '/');</div><div class='del'>-                if (loc-&gt;name) {</div><div class='del'>-                        ++(loc-&gt;name);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * We do this instead of calling dht_rmdir_do directly for two reasons.</div><div class='del'>-         * The first is that we want to reuse all of the initialization that</div><div class='del'>-         * dht_rmdir does, so if it ever changes we'll just follow along.  The</div><div class='del'>-         * second (i.e. why we don't use STACK_WIND_TAIL) is so that we don't</div><div class='del'>-         * obscure the fact that we came in via this path instead of a genuine</div><div class='del'>-         * rmdir.  That makes debugging just a tiny bit easier.</div><div class='del'>-         */</div><div class='del'>-        STACK_WIND (frame, dht_nuke_dir_cbk, this, this-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, 1, NULL);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, dict_t *xattr, int flags, dict_t *xdata)</div><div class='add'>+dht_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr,</div><div class='add'>+             int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol   = NULL;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-        dht_conf_t   *conf     = NULL;</div><div class='del'>-        dht_methods_t *methods = NULL;</div><div class='del'>-        dht_layout_t *layout   = NULL;</div><div class='del'>-        int           i        = 0;</div><div class='del'>-        int           op_errno = EINVAL;</div><div class='del'>-        int           ret      = -1;</div><div class='del'>-        data_t       *tmp      = NULL;</div><div class='del'>-        uint32_t      dir_spread = 0;</div><div class='del'>-        char          value[4096] = {0,};</div><div class='del'>-        gf_dht_migrate_data_type_t forced_rebalance = GF_DHT_MIGRATE_DATA;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        uint32_t      new_hash = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    data_t *tmp = NULL;</div><div class='add'>+    uint32_t dir_spread = 0;</div><div class='add'>+    char value[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_dht_migrate_data_type_t forced_rebalance = GF_DHT_MIGRATE_DATA;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    uint32_t new_hash = 0;</div><div class='ctx'> </div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, err);</div><div class='ctx'> </div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, err);</div><div class='del'>-</div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='del'>-</div><div class='del'>-        /* Rebalance daemon is allowed to set internal keys */</div><div class='del'>-        if (!conf-&gt;defrag)</div><div class='del'>-                GF_IF_INTERNAL_XATTR_GOTO (conf-&gt;wild_xattr_name, xattr,</div><div class='del'>-                                           op_errno, err);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='add'>+</div><div class='add'>+    /* Rebalance daemon is allowed to set internal keys */</div><div class='add'>+    if (!conf-&gt;defrag)</div><div class='add'>+        GF_IF_INTERNAL_XATTR_GOTO(conf-&gt;wild_xattr_name, xattr, op_errno, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_SETXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for path=%s", loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+    tmp = dict_get(xattr, conf-&gt;mds_xattr_key);</div><div class='add'>+    if (tmp) {</div><div class='add'>+        op_errno = ENOTSUP;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmp = dict_get(xattr, GF_XATTR_FILE_MIGRATE_KEY);</div><div class='add'>+    if (tmp) {</div><div class='add'>+        if (IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+            op_errno = ENOTSUP;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* TODO: need to interpret the 'value' for more meaning</div><div class='add'>+           (ie, 'target' subvolume given there, etc) */</div><div class='add'>+        memcpy(value, tmp-&gt;data, tmp-&gt;len);</div><div class='add'>+        if (strcmp(value, "force") == 0)</div><div class='add'>+            forced_rebalance = GF_DHT_MIGRATE_DATA_EVEN_IF_LINK_EXISTS;</div><div class='add'>+</div><div class='add'>+        if (conf-&gt;decommission_in_progress)</div><div class='add'>+            forced_rebalance = GF_DHT_MIGRATE_HARDLINK;</div><div class='add'>+</div><div class='add'>+        if (!loc-&gt;path) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;loc.name)</div><div class='add'>+            local-&gt;loc.name = strrchr(local-&gt;loc.path, '/') + 1;</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;loc.parent)</div><div class='add'>+            local-&gt;loc.parent = inode_parent(local-&gt;loc.inode, NULL, NULL);</div><div class='add'>+</div><div class='add'>+        if ((!local-&gt;loc.name) || (!local-&gt;loc.parent)) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (gf_uuid_is_null(local-&gt;loc.pargfid))</div><div class='add'>+            gf_uuid_copy(local-&gt;loc.pargfid, local-&gt;loc.parent-&gt;gfid);</div><div class='add'>+</div><div class='add'>+        methods-&gt;migration_get_dst_subvol(this, local);</div><div class='add'>+</div><div class='add'>+        if (!local-&gt;rebalance.target_node) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get hashed subvol for %s", loc-&gt;path);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        local-&gt;rebalance.from_subvol = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;rebalance.target_node == local-&gt;rebalance.from_subvol) {</div><div class='add'>+            op_errno = EEXIST;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        if (local-&gt;rebalance.target_node) {</div><div class='add'>+            local-&gt;flags = forced_rebalance;</div><div class='add'>+</div><div class='add'>+            /* Flag to suggest its a tiering migration</div><div class='add'>+             * The reason for this dic key-value is that</div><div class='add'>+             * promotions and demotions are multithreaded</div><div class='add'>+             * so the original frame from gf_defrag_start()</div><div class='add'>+             * is not carried. A new frame will be created when</div><div class='add'>+             * we do syncop_setxattr(). This does not have the</div><div class='add'>+             * frame-&gt;root-&gt;pid of the original frame. So we pass</div><div class='add'>+             * this dic key-value when we do syncop_setxattr() to do</div><div class='add'>+             * data migration and set the frame-&gt;root-&gt;pid to</div><div class='add'>+             * GF_CLIENT_PID_TIER_DEFRAG in dht_setxattr() just before</div><div class='add'>+             * calling dht_start_rebalance_task() */</div><div class='add'>+            tmp = dict_get(xattr, TIERING_MIGRATION_KEY);</div><div class='add'>+            if (tmp)</div><div class='add'>+                frame-&gt;root-&gt;pid = GF_CLIENT_PID_TIER_DEFRAG;</div><div class='add'>+            else</div><div class='add'>+                frame-&gt;root-&gt;pid = GF_CLIENT_PID_DEFRAG;</div><div class='add'>+</div><div class='add'>+            ret = dht_start_rebalance_task(this, frame);</div><div class='add'>+            if (!ret)</div><div class='add'>+                return 0;</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_SETXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_REBALANCE_START_FAILED,</div><div class='add'>+                   "%s: failed to create a new rebalance synctask", loc-&gt;path);</div><div class='ctx'>         }</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='add'>+    tmp = dict_get(xattr, "decommission-brick");</div><div class='add'>+    if (tmp) {</div><div class='add'>+        /* This operation should happen only on '/' */</div><div class='add'>+        if (!__is_root_gfid(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+            op_errno = ENOTSUP;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        memcpy(value, tmp-&gt;data, min(tmp-&gt;len, 4095));</div><div class='add'>+        local-&gt;key = gf_strdup(value);</div><div class='add'>+        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='del'>-        tmp = dict_get (xattr, conf-&gt;mds_xattr_key);</div><div class='del'>-        if (tmp) {</div><div class='del'>-                op_errno = ENOTSUP;</div><div class='del'>-                goto err;</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            /* Get the pathinfo, and then compare */</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_checking_pathinfo_cbk,</div><div class='add'>+                              conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                              GF_XATTR_PATHINFO_KEY, NULL);</div><div class='ctx'>         }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp = dict_get (xattr, GF_XATTR_FILE_MIGRATE_KEY);</div><div class='del'>-        if (tmp) {</div><div class='del'>-</div><div class='del'>-                if (IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                        op_errno = ENOTSUP;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* TODO: need to interpret the 'value' for more meaning</div><div class='del'>-                   (ie, 'target' subvolume given there, etc) */</div><div class='del'>-                memcpy (value, tmp-&gt;data, tmp-&gt;len);</div><div class='del'>-                if (strcmp (value, "force") == 0)</div><div class='del'>-                       forced_rebalance =</div><div class='del'>-                                GF_DHT_MIGRATE_DATA_EVEN_IF_LINK_EXISTS;</div><div class='del'>-</div><div class='del'>-                if (conf-&gt;decommission_in_progress)</div><div class='del'>-                        forced_rebalance = GF_DHT_MIGRATE_HARDLINK;</div><div class='del'>-</div><div class='del'>-                if (!loc-&gt;path) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;loc.name)</div><div class='del'>-                        local-&gt;loc.name = strrchr (local-&gt;loc.path, '/')+1;</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;loc.parent)</div><div class='del'>-                        local-&gt;loc.parent =</div><div class='del'>-                                inode_parent(local-&gt;loc.inode, NULL, NULL);</div><div class='del'>-</div><div class='del'>-                if ((!local-&gt;loc.name) || (!local-&gt;loc.parent)) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (gf_uuid_is_null (local-&gt;loc.pargfid))</div><div class='del'>-                        gf_uuid_copy (local-&gt;loc.pargfid, local-&gt;loc.parent-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                methods-&gt;migration_get_dst_subvol(this, local);</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;rebalance.target_node) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get hashed subvol for %s",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;rebalance.from_subvol = local-&gt;cached_subvol;</div><div class='add'>+    tmp = dict_get(xattr, GF_XATTR_FIX_LAYOUT_KEY);</div><div class='add'>+    if (tmp) {</div><div class='add'>+        ret = dict_get_uint32(xattr, "new-commit-hash", &amp;new_hash);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "updating commit hash for %s from %u to %u",</div><div class='add'>+                         uuid_utoa(loc-&gt;gfid), layout-&gt;commit_hash, new_hash);</div><div class='add'>+            layout-&gt;commit_hash = new_hash;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;rebalance.target_node == local-&gt;rebalance.from_subvol) {</div><div class='del'>-                        op_errno = EEXIST;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;rebalance.target_node) {</div><div class='del'>-                        local-&gt;flags = forced_rebalance;</div><div class='del'>-</div><div class='del'>-                        /* Flag to suggest its a tiering migration</div><div class='del'>-                         * The reason for this dic key-value is that</div><div class='del'>-                         * promotions and demotions are multithreaded</div><div class='del'>-                         * so the original frame from gf_defrag_start()</div><div class='del'>-                         * is not carried. A new frame will be created when</div><div class='del'>-                         * we do syncop_setxattr(). This does not have the</div><div class='del'>-                         * frame-&gt;root-&gt;pid of the original frame. So we pass</div><div class='del'>-                         * this dic key-value when we do syncop_setxattr() to do</div><div class='del'>-                         * data migration and set the frame-&gt;root-&gt;pid to</div><div class='del'>-                         * GF_CLIENT_PID_TIER_DEFRAG in dht_setxattr() just before</div><div class='del'>-                         * calling dht_start_rebalance_task() */</div><div class='del'>-                        tmp = dict_get (xattr, TIERING_MIGRATION_KEY);</div><div class='del'>-                        if (tmp)</div><div class='del'>-                                frame-&gt;root-&gt;pid = GF_CLIENT_PID_TIER_DEFRAG;</div><div class='del'>-                        else</div><div class='del'>-                                frame-&gt;root-&gt;pid = GF_CLIENT_PID_DEFRAG;</div><div class='del'>-</div><div class='del'>-                        ret = dht_start_rebalance_task (this, frame);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                return 0;</div><div class='del'>-</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_REBALANCE_START_FAILED,</div><div class='del'>-                                "%s: failed to create a new rebalance synctask",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                }</div><div class='del'>-                op_errno = EINVAL;</div><div class='add'>+            ret = dht_update_commit_hash_for_layout(frame);</div><div class='add'>+            if (ret) {</div><div class='add'>+                op_errno = ENOTCONN;</div><div class='ctx'>                 goto err;</div><div class='del'>-</div><div class='add'>+            }</div><div class='add'>+            return ret;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        tmp = dict_get (xattr, "decommission-brick");</div><div class='del'>-        if (tmp) {</div><div class='del'>-                /* This operation should happen only on '/' */</div><div class='del'>-                if (!__is_root_gfid (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-                        op_errno = ENOTSUP;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_FIX_LAYOUT_INFO,</div><div class='add'>+               "fixing the layout of %s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                memcpy (value, tmp-&gt;data, min (tmp-&gt;len, 4095));</div><div class='del'>-                local-&gt;key = gf_strdup (value);</div><div class='del'>-                local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-                for (i = 0 ; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        /* Get the pathinfo, and then compare */</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_checking_pathinfo_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;getxattr,</div><div class='del'>-                                           loc, GF_XATTR_PATHINFO_KEY, NULL);</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='add'>+        ret = dht_fix_directory_layout(frame, dht_fix_layout_setxattr_cbk,</div><div class='add'>+                                       layout);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = ENOTCONN;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp = dict_get (xattr, GF_XATTR_FIX_LAYOUT_KEY);</div><div class='del'>-        if (tmp) {</div><div class='del'>-                ret = dict_get_uint32(xattr, "new-commit-hash", &amp;new_hash);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "updating commit hash for %s from %u to %u",</div><div class='del'>-                                      uuid_utoa(loc-&gt;gfid),</div><div class='del'>-                                      layout-&gt;commit_hash, new_hash);</div><div class='del'>-                        layout-&gt;commit_hash = new_hash;</div><div class='del'>-</div><div class='del'>-                        ret = dht_update_commit_hash_for_layout (frame);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                op_errno = ENOTCONN;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_FIX_LAYOUT_INFO,</div><div class='del'>-                        "fixing the layout of %s", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                ret = dht_fix_directory_layout (frame,</div><div class='del'>-                                                dht_fix_layout_setxattr_cbk,</div><div class='del'>-                                                layout);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = ENOTCONN;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    tmp = dict_get(xattr, "distribute.directory-spread-count");</div><div class='add'>+    if (tmp) {</div><div class='add'>+        /* Setxattr value is packed as 'binary', not string */</div><div class='add'>+        memcpy(value, tmp-&gt;data, min(tmp-&gt;len, 4095));</div><div class='add'>+        ret = gf_string2uint32(value, &amp;dir_spread);</div><div class='add'>+        if (!ret &amp;&amp; ((dir_spread &lt;= conf-&gt;subvolume_cnt) &amp;&amp; (dir_spread &gt; 0))) {</div><div class='add'>+            layout-&gt;spread_cnt = dir_spread;</div><div class='ctx'> </div><div class='del'>-        tmp = dict_get (xattr, "distribute.directory-spread-count");</div><div class='del'>-        if (tmp) {</div><div class='del'>-                /* Setxattr value is packed as 'binary', not string */</div><div class='del'>-                memcpy (value, tmp-&gt;data, min (tmp-&gt;len, 4095));</div><div class='del'>-                ret = gf_string2uint32 (value, &amp;dir_spread);</div><div class='del'>-                if (!ret &amp;&amp; ((dir_spread &lt;= conf-&gt;subvolume_cnt) &amp;&amp;</div><div class='del'>-                             (dir_spread &gt; 0))) {</div><div class='del'>-                        layout-&gt;spread_cnt = dir_spread;</div><div class='del'>-</div><div class='del'>-                        ret = dht_fix_directory_layout (frame,</div><div class='del'>-                                                        dht_common_setxattr_cbk,</div><div class='del'>-                                                        layout);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                op_errno = ENOTCONN;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_OPERATION_NOT_SUP,</div><div class='del'>-                        "wrong 'directory-spread-count' value (%s)", value);</div><div class='del'>-                op_errno = ENOTSUP;</div><div class='add'>+            ret = dht_fix_directory_layout(frame, dht_common_setxattr_cbk,</div><div class='add'>+                                           layout);</div><div class='add'>+            if (ret) {</div><div class='add'>+                op_errno = ENOTCONN;</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tmp = dict_get (xattr, "glusterfs.dht.nuke");</div><div class='del'>-        if (tmp) {</div><div class='del'>-                return dht_nuke_dir (frame, this, loc, tmp);</div><div class='del'>-        }</div><div class='del'>-        local-&gt;xattr_req = xdata ? dict_ref (xdata) : dict_new ();</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;hashed_subvol = NULL;</div><div class='del'>-                ret = dht_dir_common_set_remove_xattr (frame, this, loc, NULL,</div><div class='del'>-                                                       xattr, flags, xdata, &amp;op_errno);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='del'>-        } else {</div><div class='add'>+            }</div><div class='add'>+            return ret;</div><div class='add'>+        }</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_OPERATION_NOT_SUP,</div><div class='add'>+               "wrong 'directory-spread-count' value (%s)", value);</div><div class='add'>+        op_errno = ENOTSUP;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmp = dict_get(xattr, "glusterfs.dht.nuke");</div><div class='add'>+    if (tmp) {</div><div class='add'>+        return dht_nuke_dir(frame, this, loc, tmp);</div><div class='add'>+    }</div><div class='add'>+    local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;hashed_subvol = NULL;</div><div class='add'>+        ret = dht_dir_common_set_remove_xattr(frame, this, loc, NULL, xattr,</div><div class='add'>+                                              flags, xdata, &amp;op_errno);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;rebalance.xattr = dict_ref(xattr);</div><div class='add'>+        local-&gt;rebalance.flags = flags;</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-                local-&gt;rebalance.xattr = dict_ref (xattr);</div><div class='del'>-                local-&gt;rebalance.flags = flags;</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='add'>+        ret = dict_set_int8(local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_int8 (local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setxattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;setxattr, loc, xattr, flags,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setxattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;setxattr, loc, xattr,</div><div class='del'>-                                   flags, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_file_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_file_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-        dht_local_t  *local   = NULL;</div><div class='del'>-        xlator_t     *prev    = NULL;</div><div class='del'>-        struct iatt  *stbuf   = NULL;</div><div class='del'>-        inode_t      *inode   = NULL;</div><div class='del'>-        xlator_t     *subvol1 = NULL, *subvol2 = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    struct iatt *stbuf = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    xlator_t *subvol1 = NULL, *subvol2 = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;fop == GF_FOP_FREMOVEXATTR) &amp;&amp;</div><div class='del'>-            (op_ret == -1) &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing (op_errno)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_FREMOVEXATTR) &amp;&amp; (op_ret == -1) &amp;&amp;</div><div class='add'>+        (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY, (void **) &amp;stbuf);</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if ((!op_ret) &amp;&amp; !stbuf) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;stbuf);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    if ((!op_ret) &amp;&amp; !stbuf) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_removexattr2;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;rebalance.xdata = dict_ref (xdata);</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (stbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_removexattr2;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;rebalance.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        /* Phase 1 of migration */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (stbuf)) {</div><div class='del'>-                inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(stbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, inode,</div><div class='del'>-                                                  &amp;subvol1, &amp;subvol2);</div><div class='del'>-                if (!dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                              subvol1, subvol2)) {</div><div class='del'>-                        dht_removexattr2 (this, subvol2, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    /* Phase 1 of migration */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(stbuf)) {</div><div class='add'>+        inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='ctx'> </div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, inode, &amp;subvol1, &amp;subvol2);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, subvol1, subvol2)) {</div><div class='add'>+            dht_removexattr2(this, subvol2, frame, 0);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                DHT_STACK_UNWIND (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+out:</div><div class='add'>+    if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+        DHT_STACK_UNWIND(removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_removexattr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='del'>-                  int ret)</div><div class='add'>+dht_removexattr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (removexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_removexattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;removexattr,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;key, local-&gt;xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_removexattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                                   local-&gt;fd, local-&gt;key, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>-err:</div><div class='del'>-        DHT_STACK_UNWIND (removexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(removexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "subvolume %s returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-        }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    if (local-&gt;fop == GF_FOP_REMOVEXATTR) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_removexattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;removexattr, &amp;local-&gt;loc, local-&gt;key,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_removexattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fremovexattr, local-&gt;fd, local-&gt;key,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                DHT_STACK_UNWIND (removexattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+err:</div><div class='add'>+    DHT_STACK_UNWIND(removexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, const char *key, dict_t *xdata)</div><div class='add'>+dht_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO (conf-&gt;wild_xattr_name, key, op_errno, err);</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_REMOVEXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!local-&gt;layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-        local-&gt;xattr_req = (xdata) ? dict_ref (xdata) : dict_new ();</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='del'>-        local-&gt;key = gf_strdup (key);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        DHT_STACK_UNWIND(removexattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                const char *key, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO(conf-&gt;wild_xattr_name, key, op_errno, err);</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_REMOVEXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!local-&gt;layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for path=%s", loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;xattr_req = (xdata) ? dict_ref(xdata) : dict_new();</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;key = gf_strdup(key);</div><div class='add'>+</div><div class='add'>+    if (key &amp;&amp; (strncmp(key, conf-&gt;mds_xattr_key, strlen(key)) == 0)) {</div><div class='add'>+        op_errno = ENOTSUP;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;hashed_subvol = NULL;</div><div class='add'>+        ret = dht_dir_common_set_remove_xattr(frame, this, loc, NULL, NULL, 0,</div><div class='add'>+                                              local-&gt;xattr_req, &amp;op_errno);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-        if (key &amp;&amp;</div><div class='del'>-            (strncmp (key, conf-&gt;mds_xattr_key, strlen(key)) == 0)) {</div><div class='del'>-                op_errno = ENOTSUP;</div><div class='del'>-                goto err;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='add'>+        ret = dict_set_int8(local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "set dictionary key %s for %s",</div><div class='add'>+                   DHT_IATT_IN_XDATA_KEY, loc-&gt;path);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;hashed_subvol = NULL;</div><div class='del'>-                ret = dht_dir_common_set_remove_xattr (frame, this, loc, NULL,</div><div class='del'>-                                                       NULL, 0, local-&gt;xattr_req, &amp;op_errno);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_removexattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;removexattr, loc, key,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-                ret = dict_set_int8 (local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED, "Failed to "</div><div class='del'>-                                "set dictionary key %s for %s",</div><div class='del'>-                                DHT_IATT_IN_XDATA_KEY, loc-&gt;path);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_removexattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;removexattr, loc, key,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (removexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(removexattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fremovexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  fd_t *fd, const char *key, dict_t *xdata)</div><div class='add'>+dht_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *key,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        dht_conf_t   *conf = 0;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO (conf-&gt;wild_xattr_name, key, op_errno, err);</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FREMOVEXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for inode=%s",</div><div class='del'>-                              uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dht_conf_t *conf = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO(conf-&gt;wild_xattr_name, key, op_errno, err);</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FREMOVEXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for inode=%s",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!local-&gt;layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for inode=%s",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;key = gf_strdup(key);</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;hashed_subvol = NULL;</div><div class='add'>+        ret = dht_dir_common_set_remove_xattr(frame, this, NULL, fd, NULL, 0,</div><div class='add'>+                                              local-&gt;xattr_req, &amp;op_errno);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!local-&gt;layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for inode=%s",</div><div class='del'>-                              uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='add'>+        ret = dict_set_int8(local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "set dictionary key %s for fd=%p",</div><div class='add'>+                   DHT_IATT_IN_XDATA_KEY, fd);</div><div class='ctx'>         }</div><div class='del'>-        local-&gt;xattr_req = xdata ? dict_ref (xdata) : dict_new ();</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='del'>-        local-&gt;key = gf_strdup (key);</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;hashed_subvol = NULL;</div><div class='del'>-                ret = dht_dir_common_set_remove_xattr (frame, this, NULL, fd,</div><div class='del'>-                                                       NULL, 0, local-&gt;xattr_req, &amp;op_errno);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-                ret = dict_set_int8 (local-&gt;xattr_req, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED, "Failed to "</div><div class='del'>-                                "set dictionary key %s for fd=%p",</div><div class='del'>-                                DHT_IATT_IN_XDATA_KEY, fd);</div><div class='del'>-                }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_removexattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fremovexattr, fd, key,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_removexattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fremovexattr, fd, key,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fremovexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fremovexattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fd_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-            int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_fd_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+           int op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "subvolume %s returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                DHT_STACK_UNWIND (open, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  local-&gt;fd, NULL);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        DHT_STACK_UNWIND(open, frame, local-&gt;op_ret, local-&gt;op_errno, local-&gt;fd,</div><div class='add'>+                         NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * dht_normalize_stats -</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-dht_normalize_stats (struct statvfs *buf, unsigned long bsize,</div><div class='del'>-                     unsigned long frsize)</div><div class='add'>+dht_normalize_stats(struct statvfs *buf, unsigned long bsize,</div><div class='add'>+                    unsigned long frsize)</div><div class='ctx'> {</div><div class='del'>-        double factor = 0;</div><div class='add'>+    double factor = 0;</div><div class='ctx'> </div><div class='del'>-        if (buf-&gt;f_bsize != bsize) {</div><div class='del'>-                buf-&gt;f_bsize = bsize;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (buf-&gt;f_frsize != frsize) {</div><div class='del'>-                factor = ((double) buf-&gt;f_frsize) / frsize;</div><div class='del'>-                buf-&gt;f_frsize = frsize;</div><div class='del'>-                buf-&gt;f_blocks = (fsblkcnt_t) (factor * buf-&gt;f_blocks);</div><div class='del'>-                buf-&gt;f_bfree  = (fsblkcnt_t) (factor * buf-&gt;f_bfree);</div><div class='del'>-                buf-&gt;f_bavail = (fsblkcnt_t) (factor * buf-&gt;f_bavail);</div><div class='add'>+    if (buf-&gt;f_bsize != bsize) {</div><div class='add'>+        buf-&gt;f_bsize = bsize;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    if (buf-&gt;f_frsize != frsize) {</div><div class='add'>+        factor = ((double)buf-&gt;f_frsize) / frsize;</div><div class='add'>+        buf-&gt;f_frsize = frsize;</div><div class='add'>+        buf-&gt;f_blocks = (fsblkcnt_t)(factor * buf-&gt;f_blocks);</div><div class='add'>+        buf-&gt;f_bfree = (fsblkcnt_t)(factor * buf-&gt;f_bfree);</div><div class='add'>+        buf-&gt;f_bavail = (fsblkcnt_t)(factor * buf-&gt;f_bavail);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct statvfs *statvfs,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+dht_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, struct statvfs *statvfs, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    gf_boolean_t event = _gf_false;</div><div class='add'>+    qdstatfs_action_t action = qdstatfs_action_OFF;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int bsize = 0;</div><div class='add'>+    int frsize = 0;</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+    unsigned long new_usage = 0;</div><div class='add'>+    unsigned long cur_usage = 0;</div><div class='ctx'> </div><div class='del'>-        gf_boolean_t            event              = _gf_false;</div><div class='del'>-        qdstatfs_action_t       action             = qdstatfs_action_OFF;</div><div class='del'>-        dht_local_t *           local              = NULL;</div><div class='del'>-        int                     this_call_cnt      = 0;</div><div class='del'>-        int                     bsize              = 0;</div><div class='del'>-        int                     frsize             = 0;</div><div class='del'>-        GF_UNUSED int           ret                = 0;</div><div class='del'>-        unsigned long           new_usage          = 0;</div><div class='del'>-        unsigned long           cur_usage          = 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_ASSERT(local);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_ASSERT (local);</div><div class='add'>+    if (xdata)</div><div class='add'>+        ret = dict_get_int8(xdata, "quota-deem-statfs", (int8_t *)&amp;event);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                ret = dict_get_int8 (xdata, "quota-deem-statfs",</div><div class='del'>-                                     (int8_t *)&amp;event);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                if (!statvfs) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        if (!statvfs) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;quota_deem_statfs) {</div><div class='del'>-                        if (event == _gf_true) {</div><div class='del'>-                                action = qdstatfs_action_COMPARE;</div><div class='del'>-                        } else {</div><div class='del'>-                                action = qdstatfs_action_NEGLECT;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        if (event == _gf_true) {</div><div class='del'>-                                action = qdstatfs_action_REPLACE;</div><div class='del'>-                                local-&gt;quota_deem_statfs = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;quota_deem_statfs) {</div><div class='add'>+            if (event == _gf_true) {</div><div class='add'>+                action = qdstatfs_action_COMPARE;</div><div class='add'>+            } else {</div><div class='add'>+                action = qdstatfs_action_NEGLECT;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if (event == _gf_true) {</div><div class='add'>+                action = qdstatfs_action_REPLACE;</div><div class='add'>+                local-&gt;quota_deem_statfs = _gf_true;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;quota_deem_statfs) {</div><div class='del'>-                        switch (action) {</div><div class='del'>-                        case qdstatfs_action_NEGLECT:</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        case qdstatfs_action_REPLACE:</div><div class='del'>-                                local-&gt;statvfs = *statvfs;</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        case qdstatfs_action_COMPARE:</div><div class='del'>-                                new_usage = statvfs-&gt;f_blocks -</div><div class='del'>-                                             statvfs-&gt;f_bfree;</div><div class='del'>-                                cur_usage = local-&gt;statvfs.f_blocks -</div><div class='del'>-                                             local-&gt;statvfs.f_bfree;</div><div class='del'>-</div><div class='del'>-                                /* Take the max of the usage from subvols */</div><div class='del'>-                                if (new_usage &gt;= cur_usage)</div><div class='del'>-                                        local-&gt;statvfs = *statvfs;</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        default:</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;quota_deem_statfs) {</div><div class='add'>+            switch (action) {</div><div class='add'>+                case qdstatfs_action_NEGLECT:</div><div class='add'>+                    goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;statvfs.f_bsize != 0) {</div><div class='del'>-                        bsize = max(local-&gt;statvfs.f_bsize, statvfs-&gt;f_bsize);</div><div class='del'>-                        frsize = max(local-&gt;statvfs.f_frsize, statvfs-&gt;f_frsize);</div><div class='del'>-                        dht_normalize_stats(&amp;local-&gt;statvfs, bsize, frsize);</div><div class='del'>-                        dht_normalize_stats(statvfs, bsize, frsize);</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;statvfs.f_bsize    = statvfs-&gt;f_bsize;</div><div class='del'>-                        local-&gt;statvfs.f_frsize   = statvfs-&gt;f_frsize;</div><div class='del'>-                }</div><div class='add'>+                case qdstatfs_action_REPLACE:</div><div class='add'>+                    local-&gt;statvfs = *statvfs;</div><div class='add'>+                    goto unlock;</div><div class='ctx'> </div><div class='del'>-                local-&gt;statvfs.f_blocks  += statvfs-&gt;f_blocks;</div><div class='del'>-                local-&gt;statvfs.f_bfree   += statvfs-&gt;f_bfree;</div><div class='del'>-                local-&gt;statvfs.f_bavail  += statvfs-&gt;f_bavail;</div><div class='del'>-                local-&gt;statvfs.f_files   += statvfs-&gt;f_files;</div><div class='del'>-                local-&gt;statvfs.f_ffree   += statvfs-&gt;f_ffree;</div><div class='del'>-                local-&gt;statvfs.f_favail  += statvfs-&gt;f_favail;</div><div class='del'>-                local-&gt;statvfs.f_fsid     = statvfs-&gt;f_fsid;</div><div class='del'>-                local-&gt;statvfs.f_flag     = statvfs-&gt;f_flag;</div><div class='del'>-                local-&gt;statvfs.f_namemax  = statvfs-&gt;f_namemax;</div><div class='add'>+                case qdstatfs_action_COMPARE:</div><div class='add'>+                    new_usage = statvfs-&gt;f_blocks - statvfs-&gt;f_bfree;</div><div class='add'>+                    cur_usage = local-&gt;statvfs.f_blocks -</div><div class='add'>+                                local-&gt;statvfs.f_bfree;</div><div class='ctx'> </div><div class='add'>+                    /* Take the max of the usage from subvols */</div><div class='add'>+                    if (new_usage &gt;= cur_usage)</div><div class='add'>+                        local-&gt;statvfs = *statvfs;</div><div class='add'>+                    goto unlock;</div><div class='ctx'> </div><div class='add'>+                default:</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='add'>+        if (local-&gt;statvfs.f_bsize != 0) {</div><div class='add'>+            bsize = max(local-&gt;statvfs.f_bsize, statvfs-&gt;f_bsize);</div><div class='add'>+            frsize = max(local-&gt;statvfs.f_frsize, statvfs-&gt;f_frsize);</div><div class='add'>+            dht_normalize_stats(&amp;local-&gt;statvfs, bsize, frsize);</div><div class='add'>+            dht_normalize_stats(statvfs, bsize, frsize);</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;statvfs.f_bsize = statvfs-&gt;f_bsize;</div><div class='add'>+            local-&gt;statvfs.f_frsize = statvfs-&gt;f_frsize;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        local-&gt;statvfs.f_blocks += statvfs-&gt;f_blocks;</div><div class='add'>+        local-&gt;statvfs.f_bfree += statvfs-&gt;f_bfree;</div><div class='add'>+        local-&gt;statvfs.f_bavail += statvfs-&gt;f_bavail;</div><div class='add'>+        local-&gt;statvfs.f_files += statvfs-&gt;f_files;</div><div class='add'>+        local-&gt;statvfs.f_ffree += statvfs-&gt;f_ffree;</div><div class='add'>+        local-&gt;statvfs.f_favail += statvfs-&gt;f_favail;</div><div class='add'>+        local-&gt;statvfs.f_fsid = statvfs-&gt;f_fsid;</div><div class='add'>+        local-&gt;statvfs.f_flag = statvfs-&gt;f_flag;</div><div class='add'>+        local-&gt;statvfs.f_namemax = statvfs-&gt;f_namemax;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                DHT_STACK_UNWIND (statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;statvfs, xdata);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        DHT_STACK_UNWIND(statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;statvfs, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+dht_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        int           i = -1;</div><div class='del'>-        inode_t          *inode         = NULL;</div><div class='del'>-        inode_table_t    *itable        = NULL;</div><div class='del'>-        uuid_t            root_gfid     = {0, };</div><div class='del'>-        loc_t         newloc = {0, };</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    uuid_t root_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, NULL, NULL, GF_FOP_STATFS);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (loc-&gt;inode &amp;&amp; !IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                itable = loc-&gt;inode-&gt;table;</div><div class='del'>-                if (!itable) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    local = dht_local_init(frame, NULL, NULL, GF_FOP_STATFS);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                loc = &amp;local-&gt;loc2;</div><div class='del'>-                root_gfid[15] = 1;</div><div class='add'>+    if (loc-&gt;inode &amp;&amp; !IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        itable = loc-&gt;inode-&gt;table;</div><div class='add'>+        if (!itable) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                inode = inode_find (itable, root_gfid);</div><div class='del'>-                if (!inode) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        loc = &amp;local-&gt;loc2;</div><div class='add'>+        root_gfid[15] = 1;</div><div class='ctx'> </div><div class='del'>-                dht_build_root_loc (inode, &amp;newloc);</div><div class='del'>-                loc = &amp;newloc;</div><div class='add'>+        inode = inode_find(itable, root_gfid);</div><div class='add'>+        if (!inode) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        dht_build_root_loc(inode, &amp;newloc);</div><div class='add'>+        loc = &amp;newloc;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                STACK_WIND (frame, dht_statfs_cbk,</div><div class='del'>-                            conf-&gt;subvolumes[i],</div><div class='del'>-                            conf-&gt;subvolumes[i]-&gt;fops-&gt;statfs, loc,</div><div class='del'>-                            xdata);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        STACK_WIND(frame, dht_statfs_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                   conf-&gt;subvolumes[i]-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (statfs, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(statfs, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+dht_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        int           i = -1;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-        gf_boolean_t  new_xdata = _gf_false;</div><div class='del'>-        xlator_t    **subvolumes = NULL;</div><div class='del'>-        int           call_count = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, fd, GF_FOP_OPENDIR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;first_up_subvol = dht_first_up_subvol (this);</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t new_xdata = _gf_false;</div><div class='add'>+    xlator_t **subvolumes = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, fd, GF_FOP_OPENDIR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;first_up_subvol = dht_first_up_subvol(this);</div><div class='add'>+</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='ctx'>         if (!xdata) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-                if (!xdata) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                new_xdata = _gf_true;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        new_xdata = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(xdata, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value : key = %s",</div><div class='add'>+               conf-&gt;link_xattr_name);</div><div class='add'>+</div><div class='add'>+    /* dht_readdirp will wind to all subvols so open has to be sent to</div><div class='add'>+     * all subvols whether or not conf-&gt;local_subvols is set */</div><div class='add'>+</div><div class='add'>+    call_count = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    subvolumes = conf-&gt;subvolumes;</div><div class='add'>+</div><div class='add'>+    /* In case of parallel-readdir, the readdir-ahead will be loaded</div><div class='add'>+     * below dht, in this case, if we want to enable or disable SKIP_DIRs</div><div class='add'>+     * it has to be done in opendir, so that prefetching logic in</div><div class='add'>+     * readdir-ahead, honors it */</div><div class='add'>+    for (i = 0; i &lt; call_count; i++) {</div><div class='add'>+        if (conf-&gt;readdir_optimize == _gf_true) {</div><div class='add'>+            if (subvolumes[i] != local-&gt;first_up_subvol) {</div><div class='add'>+                ret = dict_set_int32(xdata, GF_READDIR_SKIP_DIRS, 1);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                           "Failed to set dictionary"</div><div class='add'>+                           " value :key = %s, ret:%d",</div><div class='add'>+                           GF_READDIR_SKIP_DIRS, ret);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (xdata, conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value : key = %s",</div><div class='del'>-                        conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-        /* dht_readdirp will wind to all subvols so open has to be sent to</div><div class='del'>-         * all subvols whether or not conf-&gt;local_subvols is set */</div><div class='del'>-</div><div class='del'>-        call_count = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-        subvolumes = conf-&gt;subvolumes;</div><div class='del'>-</div><div class='del'>-        /* In case of parallel-readdir, the readdir-ahead will be loaded</div><div class='del'>-         * below dht, in this case, if we want to enable or disable SKIP_DIRs</div><div class='del'>-         * it has to be done in opendir, so that prefetching logic in</div><div class='del'>-         * readdir-ahead, honors it */</div><div class='del'>-        for (i = 0; i &lt; call_count; i++) {</div><div class='del'>-                if (conf-&gt;readdir_optimize == _gf_true) {</div><div class='del'>-                        if (subvolumes[i] != local-&gt;first_up_subvol) {</div><div class='del'>-                                ret = dict_set_int32 (xdata,</div><div class='del'>-                                                      GF_READDIR_SKIP_DIRS, 1);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "Failed to set dictionary"</div><div class='del'>-                                                " value :key = %s, ret:%d",</div><div class='del'>-                                                GF_READDIR_SKIP_DIRS, ret);</div><div class='del'>-                                }</div><div class='del'>-                }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_fd_cbk, subvolumes[i], subvolumes[i],</div><div class='add'>+                          subvolumes[i]-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+        dict_del(xdata, GF_READDIR_SKIP_DIRS);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_fd_cbk,</div><div class='del'>-                                   subvolumes[i],</div><div class='del'>-                                   subvolumes[i],</div><div class='del'>-                                   subvolumes[i]-&gt;fops-&gt;opendir,</div><div class='del'>-                                   loc, fd, xdata);</div><div class='del'>-                dict_del (xdata, GF_READDIR_SKIP_DIRS);</div><div class='del'>-        }</div><div class='add'>+    if (new_xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (new_xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (opendir, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(opendir, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* dht_readdirp_cbk creates a new dentry and dentry-&gt;inode is not assigned.</div><div class='ctx'>    This functions assigns an inode if all of the following conditions are true:</div><div class='ctx'> </div><div class='hunk'>@@ -6937,3807 +6504,3589 @@ err:</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_populate_inode_for_dentry (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                               gf_dirent_t *entry, gf_dirent_t *orig_entry)</div><div class='add'>+dht_populate_inode_for_dentry(xlator_t *this, xlator_t *subvol,</div><div class='add'>+                              gf_dirent_t *entry, gf_dirent_t *orig_entry)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           ret    = 0;</div><div class='del'>-        loc_t         loc    = {0, };</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_is_null (orig_entry-&gt;d_stat.ia_gfid)) {</div><div class='del'>-                /* this skips the '..' entry for the root of the volume */</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (loc.gfid, orig_entry-&gt;d_stat.ia_gfid);</div><div class='del'>-        loc.inode = inode_ref (orig_entry-&gt;inode);</div><div class='add'>+    if (gf_uuid_is_null(orig_entry-&gt;d_stat.ia_gfid)) {</div><div class='add'>+        /* this skips the '..' entry for the root of the volume */</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (is_revalidate (&amp;loc)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_uuid_copy(loc.gfid, orig_entry-&gt;d_stat.ia_gfid);</div><div class='add'>+    loc.inode = inode_ref(orig_entry-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        layout = dht_layout_new (this, 1);</div><div class='del'>-        if (!layout)</div><div class='del'>-                goto out;</div><div class='add'>+    if (is_revalidate(&amp;loc)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_merge (this, layout, subvol, 0, 0, orig_entry-&gt;dict);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ret = dht_layout_normalize (this, &amp;loc, layout);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        dht_layout_set (this, orig_entry-&gt;inode, layout);</div><div class='del'>-                        entry-&gt;inode = inode_ref (orig_entry-&gt;inode);</div><div class='del'>-                        layout = NULL;</div><div class='del'>-                }</div><div class='add'>+    layout = dht_layout_new(this, 1);</div><div class='add'>+    if (!layout)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    ret = dht_layout_merge(this, layout, subvol, 0, 0, orig_entry-&gt;dict);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ret = dht_layout_normalize(this, &amp;loc, layout);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            dht_layout_set(this, orig_entry-&gt;inode, layout);</div><div class='add'>+            entry-&gt;inode = inode_ref(orig_entry-&gt;inode);</div><div class='add'>+            layout = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (layout)</div><div class='del'>-                dht_layout_unref (this, layout);</div><div class='add'>+    if (layout)</div><div class='add'>+        dht_layout_unref(this, layout);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Posix returns op_errno = ENOENT to indicate that there are no more entries</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dht_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='del'>-                  int op_errno, gf_dirent_t *orig_entries, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t             *local = NULL;</div><div class='del'>-        gf_dirent_t              entries;</div><div class='del'>-        gf_dirent_t             *orig_entry = NULL;</div><div class='del'>-        gf_dirent_t             *entry = NULL;</div><div class='del'>-        xlator_t                *prev = NULL;</div><div class='del'>-        xlator_t                *next_subvol = NULL;</div><div class='del'>-        off_t                    next_offset = 0;</div><div class='del'>-        int                      count = 0;</div><div class='del'>-        dht_layout_t            *layout = NULL;</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='del'>-        dht_methods_t           *methods = NULL;</div><div class='del'>-        xlator_t                *subvol = 0;</div><div class='del'>-        xlator_t                *hashed_subvol = 0;</div><div class='del'>-        int                      ret    = 0;</div><div class='del'>-        int                      readdir_optimize = 0;</div><div class='del'>-        inode_table_t           *itable = NULL;</div><div class='del'>-        inode_t                 *inode = NULL;</div><div class='del'>-        gf_boolean_t             skip_hashed_check = _gf_false;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        itable = local-&gt;fd ? local-&gt;fd-&gt;inode-&gt;table : NULL;</div><div class='add'>+dht_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, gf_dirent_t *orig_entries, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *orig_entry = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *next_subvol = NULL;</div><div class='add'>+    off_t next_offset = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='add'>+    xlator_t *subvol = 0;</div><div class='add'>+    xlator_t *hashed_subvol = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int readdir_optimize = 0;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    gf_boolean_t skip_hashed_check = _gf_false;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    itable = local-&gt;fd ? local-&gt;fd-&gt;inode-&gt;table : NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, unwind);</div><div class='add'>+</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt;= 0) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Why aren't we skipping DHT entirely in case of a single subvol?</div><div class='add'>+     * Because if this was a larger volume earlier and all but one subvol</div><div class='add'>+     * was removed, there might be stale linkto files on the subvol.</div><div class='add'>+     */</div><div class='add'>+    if (conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+        /* return all directory and file entries except</div><div class='add'>+         * linkto files for a single child DHT</div><div class='add'>+         */</div><div class='add'>+        skip_hashed_check = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO(this-&gt;name, conf, unwind);</div><div class='add'>+    if (!local-&gt;layout)</div><div class='add'>+        local-&gt;layout = dht_layout_get(this, local-&gt;fd-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    layout = local-&gt;layout;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt;= 0) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    /* We have seen crashes in while running "rm -rf" on tier volumes</div><div class='add'>+       when the layout was NULL on the hot tier. This will skip the</div><div class='add'>+       entries on the subvol without a layout, hence preventing the crash</div><div class='add'>+       but rmdir might fail with "directory not empty" errors*/</div><div class='ctx'> </div><div class='del'>-        /* Why aren't we skipping DHT entirely in case of a single subvol?</div><div class='del'>-         * Because if this was a larger volume earlier and all but one subvol</div><div class='del'>-         * was removed, there might be stale linkto files on the subvol.</div><div class='del'>-         */</div><div class='del'>-        if (conf-&gt;subvolume_cnt == 1) {</div><div class='del'>-                /* return all directory and file entries except</div><div class='del'>-                 * linkto files for a single child DHT</div><div class='del'>-                 */</div><div class='del'>-                skip_hashed_check = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;layout)</div><div class='del'>-                local-&gt;layout = dht_layout_get (this, local-&gt;fd-&gt;inode);</div><div class='add'>+    if (layout == NULL)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+    if (conf-&gt;readdir_optimize == _gf_true)</div><div class='add'>+        readdir_optimize = 1;</div><div class='ctx'> </div><div class='del'>-        /* We have seen crashes in while running "rm -rf" on tier volumes</div><div class='del'>-           when the layout was NULL on the hot tier. This will skip the</div><div class='del'>-           entries on the subvol without a layout, hence preventing the crash</div><div class='del'>-           but rmdir might fail with "directory not empty" errors*/</div><div class='del'>-</div><div class='del'>-        if (layout == NULL)</div><div class='del'>-                goto done;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Processing entries from %s", prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;readdir_optimize == _gf_true)</div><div class='del'>-                readdir_optimize = 1;</div><div class='add'>+    list_for_each_entry(orig_entry, (&amp;orig_entries-&gt;list), list)</div><div class='add'>+    {</div><div class='add'>+        next_offset = orig_entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Processing entries from %s",</div><div class='del'>-                      prev-&gt;name);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s: entry = %s, type = %d", prev-&gt;name,</div><div class='add'>+                     orig_entry-&gt;d_name, orig_entry-&gt;d_type);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (orig_entry, (&amp;orig_entries-&gt;list), list) {</div><div class='del'>-                next_offset = orig_entry-&gt;d_off;</div><div class='add'>+        if (IA_ISINVAL(orig_entry-&gt;d_stat.ia_type)) {</div><div class='add'>+            /*stat failed somewhere- ignore this entry*/</div><div class='add'>+            gf_msg_debug(this-&gt;name, EINVAL,</div><div class='add'>+                         "Invalid stat, ignoring entry "</div><div class='add'>+                         "%s gfid %s",</div><div class='add'>+                         orig_entry-&gt;d_name,</div><div class='add'>+                         uuid_utoa(orig_entry-&gt;d_stat.ia_gfid));</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s: entry = %s, type = %d",</div><div class='del'>-                              prev-&gt;name, orig_entry-&gt;d_name,</div><div class='del'>-                              orig_entry-&gt;d_type);</div><div class='add'>+        if (check_is_linkfile(NULL, (&amp;orig_entry-&gt;d_stat), orig_entry-&gt;dict,</div><div class='add'>+                              conf-&gt;link_xattr_name)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "%s: %s is a linkto file", prev-&gt;name,</div><div class='add'>+                         orig_entry-&gt;d_name);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (IA_ISINVAL(orig_entry-&gt;d_stat.ia_type)) {</div><div class='del'>-                        /*stat failed somewhere- ignore this entry*/</div><div class='del'>-                        gf_msg_debug (this-&gt;name, EINVAL,</div><div class='del'>-                                      "Invalid stat, ignoring entry "</div><div class='del'>-                                      "%s gfid %s", orig_entry-&gt;d_name,</div><div class='del'>-                                      uuid_utoa (orig_entry-&gt;d_stat.ia_gfid));</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        if (skip_hashed_check) {</div><div class='add'>+            goto list;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (check_is_linkfile (NULL, (&amp;orig_entry-&gt;d_stat),</div><div class='del'>-                                       orig_entry-&gt;dict,</div><div class='del'>-                                       conf-&gt;link_xattr_name)) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: %s is a linkto file",</div><div class='del'>-                                      prev-&gt;name, orig_entry-&gt;d_name);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        if (check_is_dir(NULL, (&amp;orig_entry-&gt;d_stat), NULL)) {</div><div class='add'>+            /*Directory entries filtering :</div><div class='add'>+             * a) If rebalance is running, pick from first_up_subvol</div><div class='add'>+             * b) (rebalance not running)hashed subvolume is NULL or</div><div class='add'>+             * down then filter in first_up_subvolume. Other wise the</div><div class='add'>+             * corresponding hashed subvolume will take care of the</div><div class='add'>+             * directory entry.</div><div class='add'>+             */</div><div class='add'>+            if (readdir_optimize) {</div><div class='add'>+                if (prev == local-&gt;first_up_subvol)</div><div class='add'>+                    goto list;</div><div class='add'>+                else</div><div class='add'>+                    continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (skip_hashed_check) {</div><div class='del'>-                        goto list;</div><div class='del'>-                }</div><div class='add'>+            hashed_subvol = methods-&gt;layout_search(this, layout,</div><div class='add'>+                                                   orig_entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-                if (check_is_dir (NULL, (&amp;orig_entry-&gt;d_stat), NULL)) {</div><div class='add'>+            if (prev == hashed_subvol)</div><div class='add'>+                goto list;</div><div class='add'>+            if ((hashed_subvol &amp;&amp; dht_subvol_status(conf, hashed_subvol)) ||</div><div class='add'>+                (prev != local-&gt;first_up_subvol))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                /*Directory entries filtering :</div><div class='del'>-                 * a) If rebalance is running, pick from first_up_subvol</div><div class='del'>-                 * b) (rebalance not running)hashed subvolume is NULL or</div><div class='del'>-                 * down then filter in first_up_subvolume. Other wise the</div><div class='del'>-                 * corresponding hashed subvolume will take care of the</div><div class='del'>-                 * directory entry.</div><div class='del'>-                 */</div><div class='del'>-                        if (readdir_optimize) {</div><div class='del'>-                                if (prev == local-&gt;first_up_subvol)</div><div class='del'>-                                        goto list;</div><div class='del'>-                                else</div><div class='del'>-                                        continue;</div><div class='add'>+            goto list;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        }</div><div class='add'>+    list:</div><div class='add'>+        entry = gf_dirent_for_name(orig_entry-&gt;d_name);</div><div class='add'>+        if (!entry) {</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        hashed_subvol = methods-&gt;layout_search (this, layout,</div><div class='del'>-                                                         orig_entry-&gt;d_name);</div><div class='add'>+        /* Do this if conf-&gt;search_unhashed is set to "auto" */</div><div class='add'>+        if (conf-&gt;search_unhashed == GF_DHT_LOOKUP_UNHASHED_AUTO) {</div><div class='add'>+            subvol = methods-&gt;layout_search(this, layout, orig_entry-&gt;d_name);</div><div class='add'>+            if (!subvol || (subvol != prev)) {</div><div class='add'>+                /* TODO: Count the number of entries which need</div><div class='add'>+                   linkfile to prove its existence in fs */</div><div class='add'>+                layout-&gt;search_unhashed++;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        if (prev == hashed_subvol)</div><div class='del'>-                                goto list;</div><div class='del'>-                        if ((hashed_subvol</div><div class='del'>-                             &amp;&amp; dht_subvol_status (conf, hashed_subvol))</div><div class='del'>-                            || (prev != local-&gt;first_up_subvol))</div><div class='del'>-                                continue;</div><div class='add'>+        entry-&gt;d_off = orig_entry-&gt;d_off;</div><div class='add'>+        entry-&gt;d_stat = orig_entry-&gt;d_stat;</div><div class='add'>+        entry-&gt;d_ino = orig_entry-&gt;d_ino;</div><div class='add'>+        entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='add'>+        entry-&gt;d_len = orig_entry-&gt;d_len;</div><div class='ctx'> </div><div class='del'>-                        goto list;</div><div class='del'>-                }</div><div class='add'>+        if (orig_entry-&gt;dict)</div><div class='add'>+            entry-&gt;dict = dict_ref(orig_entry-&gt;dict);</div><div class='ctx'> </div><div class='del'>-list:</div><div class='del'>-                entry = gf_dirent_for_name (orig_entry-&gt;d_name);</div><div class='del'>-                if (!entry) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        /* making sure we set the inode ctx right with layout,</div><div class='add'>+           currently possible only for non-directories, so for</div><div class='add'>+           directories don't set entry inodes */</div><div class='add'>+        if (IA_ISDIR(entry-&gt;d_stat.ia_type)) {</div><div class='add'>+            entry-&gt;d_stat.ia_blocks = DHT_DIR_STAT_BLOCKS;</div><div class='add'>+            entry-&gt;d_stat.ia_size = DHT_DIR_STAT_SIZE;</div><div class='add'>+            if (orig_entry-&gt;inode) {</div><div class='add'>+                dht_inode_ctx_time_update(orig_entry-&gt;inode, this,</div><div class='add'>+                                          &amp;entry-&gt;d_stat, 1);</div><div class='ctx'> </div><div class='del'>-                /* Do this if conf-&gt;search_unhashed is set to "auto" */</div><div class='del'>-                if (conf-&gt;search_unhashed == GF_DHT_LOOKUP_UNHASHED_AUTO) {</div><div class='del'>-                        subvol = methods-&gt;layout_search (this, layout,</div><div class='del'>-                                                         orig_entry-&gt;d_name);</div><div class='del'>-                        if (!subvol || (subvol != prev)) {</div><div class='del'>-                                /* TODO: Count the number of entries which need</div><div class='del'>-                                   linkfile to prove its existence in fs */</div><div class='del'>-                                layout-&gt;search_unhashed++;</div><div class='del'>-                        }</div><div class='add'>+                if (conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+                    dht_populate_inode_for_dentry(this, prev, entry,</div><div class='add'>+                                                  orig_entry);</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                entry-&gt;d_off  = orig_entry-&gt;d_off;</div><div class='del'>-                entry-&gt;d_stat = orig_entry-&gt;d_stat;</div><div class='del'>-                entry-&gt;d_ino  = orig_entry-&gt;d_ino;</div><div class='del'>-                entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='del'>-                entry-&gt;d_len  = orig_entry-&gt;d_len;</div><div class='del'>-</div><div class='del'>-                if (orig_entry-&gt;dict)</div><div class='del'>-                        entry-&gt;dict = dict_ref (orig_entry-&gt;dict);</div><div class='del'>-</div><div class='del'>-                /* making sure we set the inode ctx right with layout,</div><div class='del'>-                   currently possible only for non-directories, so for</div><div class='del'>-                   directories don't set entry inodes */</div><div class='del'>-                if (IA_ISDIR(entry-&gt;d_stat.ia_type)) {</div><div class='del'>-                        entry-&gt;d_stat.ia_blocks = DHT_DIR_STAT_BLOCKS;</div><div class='del'>-                        entry-&gt;d_stat.ia_size = DHT_DIR_STAT_SIZE;</div><div class='del'>-                        if (orig_entry-&gt;inode) {</div><div class='del'>-                                dht_inode_ctx_time_update (orig_entry-&gt;inode,</div><div class='del'>-                                                           this, &amp;entry-&gt;d_stat,</div><div class='del'>-                                                           1);</div><div class='del'>-</div><div class='del'>-                                if (conf-&gt;subvolume_cnt == 1) {</div><div class='del'>-                                        dht_populate_inode_for_dentry (this,</div><div class='del'>-                                                                       prev,</div><div class='del'>-                                                                       entry,</div><div class='del'>-                                                                       orig_entry);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        if (orig_entry-&gt;inode) {</div><div class='del'>-                                ret = dht_layout_preset (this, prev,</div><div class='del'>-                                                         orig_entry-&gt;inode);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                                DHT_MSG_LAYOUT_SET_FAILED,</div><div class='del'>-                                                "failed to link the layout "</div><div class='del'>-                                                "in inode for %s",</div><div class='del'>-                                                orig_entry-&gt;d_name);</div><div class='del'>-</div><div class='del'>-                                entry-&gt;inode = inode_ref (orig_entry-&gt;inode);</div><div class='del'>-                        } else if (itable) {</div><div class='del'>-                                /*</div><div class='del'>-                                 * orig_entry-&gt;inode might be null if any upper</div><div class='del'>-                                 * layer xlators below client set to null, to</div><div class='del'>-                                 * force a lookup on the inode even if the inode</div><div class='del'>-                                 * is present in the inode table. In that case</div><div class='del'>-                                 * we just update the ctx to make sure we didn't</div><div class='del'>-                                 * missed anything.</div><div class='del'>-                                 */</div><div class='del'>-                                inode = inode_find (itable,</div><div class='del'>-                                                    orig_entry-&gt;d_stat.ia_gfid);</div><div class='del'>-                                if (inode) {</div><div class='del'>-                                        ret = dht_layout_preset</div><div class='del'>-                                                            (this, prev,</div><div class='del'>-                                                             inode);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                     GF_LOG_WARNING, 0,</div><div class='del'>-                                                     DHT_MSG_LAYOUT_SET_FAILED,</div><div class='del'>-                                                     "failed to link the layout"</div><div class='del'>-                                                     " in inode for %s",</div><div class='del'>-                                                     orig_entry-&gt;d_name);</div><div class='del'>-                                        inode_unref (inode);</div><div class='del'>-                                        inode = NULL;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if (orig_entry-&gt;inode) {</div><div class='add'>+                ret = dht_layout_preset(this, prev, orig_entry-&gt;inode);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                           DHT_MSG_LAYOUT_SET_FAILED,</div><div class='add'>+                           "failed to link the layout "</div><div class='add'>+                           "in inode for %s",</div><div class='add'>+                           orig_entry-&gt;d_name);</div><div class='add'>+</div><div class='add'>+                entry-&gt;inode = inode_ref(orig_entry-&gt;inode);</div><div class='add'>+            } else if (itable) {</div><div class='add'>+                /*</div><div class='add'>+                 * orig_entry-&gt;inode might be null if any upper</div><div class='add'>+                 * layer xlators below client set to null, to</div><div class='add'>+                 * force a lookup on the inode even if the inode</div><div class='add'>+                 * is present in the inode table. In that case</div><div class='add'>+                 * we just update the ctx to make sure we didn't</div><div class='add'>+                 * missed anything.</div><div class='add'>+                 */</div><div class='add'>+                inode = inode_find(itable, orig_entry-&gt;d_stat.ia_gfid);</div><div class='add'>+                if (inode) {</div><div class='add'>+                    ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                               DHT_MSG_LAYOUT_SET_FAILED,</div><div class='add'>+                               "failed to link the layout"</div><div class='add'>+                               " in inode for %s",</div><div class='add'>+                               orig_entry-&gt;d_name);</div><div class='add'>+                    inode_unref(inode);</div><div class='add'>+                    inode = NULL;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s: Adding entry = %s",</div><div class='del'>-                              prev-&gt;name, entry-&gt;d_name);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s: Adding entry = %s", prev-&gt;name,</div><div class='add'>+                     entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-                list_add_tail (&amp;entry-&gt;list, &amp;entries.list);</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;entries.list);</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='ctx'> </div><div class='del'>-        /* We need to ensure that only the last subvolume's end-of-directory</div><div class='del'>-         * notification is respected so that directory reading does not stop</div><div class='del'>-         * before all subvolumes have been read. That could happen because the</div><div class='del'>-         * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='del'>-         * distribute we're not concerned only with a posix's view of the</div><div class='del'>-         * directory but the aggregated namespace' view of the directory.</div><div class='del'>-         * Possible values:</div><div class='del'>-         * op_ret == 0 and op_errno != 0</div><div class='del'>-         *   if op_errno != ENOENT : Error.Unwind.</div><div class='del'>-         *   if op_errno == ENOENT : There are no more entries on this subvol.</div><div class='del'>-         *                           Move to the next one.</div><div class='del'>-         * op_ret &gt; 0 and count == 0 :</div><div class='del'>-         *    The subvol returned entries to dht but all were stripped out.</div><div class='del'>-         *    For example, if they were linkto files or dirs where</div><div class='del'>-         *    hashed_subvol != prev. Try to get some entries by winding</div><div class='del'>-         *    to the next subvol. This can be dangerous if parallel readdir</div><div class='del'>-         *    is enabled as it grows the stack.</div><div class='del'>-         *</div><div class='del'>-         * op_ret &gt; 0 and count &gt; 0:</div><div class='del'>-         *   We found some entries. Unwind even if the buffer is not full.</div><div class='del'>-         *</div><div class='add'>+    /* We need to ensure that only the last subvolume's end-of-directory</div><div class='add'>+     * notification is respected so that directory reading does not stop</div><div class='add'>+     * before all subvolumes have been read. That could happen because the</div><div class='add'>+     * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='add'>+     * distribute we're not concerned only with a posix's view of the</div><div class='add'>+     * directory but the aggregated namespace' view of the directory.</div><div class='add'>+     * Possible values:</div><div class='add'>+     * op_ret == 0 and op_errno != 0</div><div class='add'>+     *   if op_errno != ENOENT : Error.Unwind.</div><div class='add'>+     *   if op_errno == ENOENT : There are no more entries on this subvol.</div><div class='add'>+     *                           Move to the next one.</div><div class='add'>+     * op_ret &gt; 0 and count == 0 :</div><div class='add'>+     *    The subvol returned entries to dht but all were stripped out.</div><div class='add'>+     *    For example, if they were linkto files or dirs where</div><div class='add'>+     *    hashed_subvol != prev. Try to get some entries by winding</div><div class='add'>+     *    to the next subvol. This can be dangerous if parallel readdir</div><div class='add'>+     *    is enabled as it grows the stack.</div><div class='add'>+     *</div><div class='add'>+     * op_ret &gt; 0 and count &gt; 0:</div><div class='add'>+     *   We found some entries. Unwind even if the buffer is not full.</div><div class='add'>+     *</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    op_ret = count;</div><div class='add'>+    if (count == 0) {</div><div class='add'>+        /* non-zero next_offset means that</div><div class='add'>+         * EOF is not yet hit on the current subvol</div><div class='ctx'>          */</div><div class='add'>+        if ((next_offset == 0) || (op_errno == ENOENT)) {</div><div class='add'>+            next_offset = 0;</div><div class='add'>+            next_subvol = dht_subvol_next(this, prev);</div><div class='add'>+        } else {</div><div class='add'>+            next_subvol = prev;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        op_ret = count;</div><div class='del'>-        if (count == 0) {</div><div class='del'>-                /* non-zero next_offset means that</div><div class='del'>-                 * EOF is not yet hit on the current subvol</div><div class='del'>-                 */</div><div class='del'>-                if ((next_offset == 0) || (op_errno == ENOENT)) {</div><div class='del'>-                        next_offset = 0;</div><div class='del'>-                        next_subvol = dht_subvol_next (this, prev);</div><div class='del'>-                } else {</div><div class='del'>-                        next_subvol = prev;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!next_subvol) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (conf-&gt;readdir_optimize == _gf_true) {</div><div class='del'>-                        if (next_subvol != local-&gt;first_up_subvol) {</div><div class='del'>-                                ret = dict_set_int32 (local-&gt;xattr,</div><div class='del'>-                                                      GF_READDIR_SKIP_DIRS, 1);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "Failed to set dictionary value"</div><div class='del'>-                                                ":key = %s",</div><div class='del'>-                                                GF_READDIR_SKIP_DIRS );</div><div class='del'>-                        } else {</div><div class='del'>-                                 dict_del (local-&gt;xattr,</div><div class='del'>-                                           GF_READDIR_SKIP_DIRS);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!next_subvol) {</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_readdirp_cbk, next_subvol,</div><div class='del'>-                                   next_subvol, next_subvol-&gt;fops-&gt;readdirp,</div><div class='del'>-                                   local-&gt;fd, local-&gt;size,</div><div class='del'>-                                   next_offset, local-&gt;xattr);</div><div class='del'>-                return 0;</div><div class='add'>+        if (conf-&gt;readdir_optimize == _gf_true) {</div><div class='add'>+            if (next_subvol != local-&gt;first_up_subvol) {</div><div class='add'>+                ret = dict_set_int32(local-&gt;xattr, GF_READDIR_SKIP_DIRS, 1);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                           "Failed to set dictionary value"</div><div class='add'>+                           ":key = %s",</div><div class='add'>+                           GF_READDIR_SKIP_DIRS);</div><div class='add'>+            } else {</div><div class='add'>+                dict_del(local-&gt;xattr, GF_READDIR_SKIP_DIRS);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_readdirp_cbk, next_subvol, next_subvol,</div><div class='add'>+                          next_subvol-&gt;fops-&gt;readdirp, local-&gt;fd, local-&gt;size,</div><div class='add'>+                          next_offset, local-&gt;xattr);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> unwind:</div><div class='del'>-        /* We need to ensure that only the last subvolume's end-of-directory</div><div class='del'>-         * notification is respected so that directory reading does not stop</div><div class='del'>-         * before all subvolumes have been read. That could happen because the</div><div class='del'>-         * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='del'>-         * distribute we're not concerned only with a posix's view of the</div><div class='del'>-         * directory but the aggregated namespace' view of the directory.</div><div class='del'>-         */</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                op_ret = 0;</div><div class='add'>+    /* We need to ensure that only the last subvolume's end-of-directory</div><div class='add'>+     * notification is respected so that directory reading does not stop</div><div class='add'>+     * before all subvolumes have been read. That could happen because the</div><div class='add'>+     * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='add'>+     * distribute we're not concerned only with a posix's view of the</div><div class='add'>+     * directory but the aggregated namespace' view of the directory.</div><div class='add'>+     */</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (prev != dht_last_up_subvol (this))</div><div class='del'>-                op_errno = 0;</div><div class='add'>+    if (prev != dht_last_up_subvol(this))</div><div class='add'>+        op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (readdirp, frame, op_ret, op_errno,</div><div class='del'>-                          &amp;entries, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(readdirp, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='ctx'> </div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, gf_dirent_t *orig_entries,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+dht_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, gf_dirent_t *orig_entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        gf_dirent_t   entries;</div><div class='del'>-        gf_dirent_t  *orig_entry = NULL;</div><div class='del'>-        gf_dirent_t  *entry = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        xlator_t     *next_subvol = NULL;</div><div class='del'>-        off_t         next_offset = 0;</div><div class='del'>-        int           count = 0;</div><div class='del'>-        dht_layout_t *layout = 0;</div><div class='del'>-        xlator_t     *subvol = 0;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        dht_methods_t *methods = NULL;</div><div class='del'>-        gf_boolean_t   skip_hashed_check = _gf_false;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *orig_entry = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *next_subvol = NULL;</div><div class='add'>+    off_t next_offset = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    dht_layout_t *layout = 0;</div><div class='add'>+    xlator_t *subvol = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='add'>+    gf_boolean_t skip_hashed_check = _gf_false;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, done);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt;= 0)</div><div class='del'>-                goto done;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, done);</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;layout)</div><div class='del'>-                local-&gt;layout = dht_layout_get (this, local-&gt;fd-&gt;inode);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+    if (op_ret &lt;= 0)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Processing entries from %s",</div><div class='del'>-                      prev-&gt;name);</div><div class='add'>+    if (!local-&gt;layout)</div><div class='add'>+        local-&gt;layout = dht_layout_get(this, local-&gt;fd-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;subvolume_cnt == 1) {</div><div class='del'>-                /*return everything*/</div><div class='del'>-                skip_hashed_check = _gf_true;</div><div class='del'>-                count = op_ret;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Processing entries from %s", prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (orig_entry, (&amp;orig_entries-&gt;list), list) {</div><div class='del'>-                next_offset = orig_entry-&gt;d_off;</div><div class='add'>+    if (conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+        /*return everything*/</div><div class='add'>+        skip_hashed_check = _gf_true;</div><div class='add'>+        count = op_ret;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s: entry = %s, type = %d",</div><div class='del'>-                              prev-&gt;name, orig_entry-&gt;d_name,</div><div class='del'>-                              orig_entry-&gt;d_type);</div><div class='add'>+    list_for_each_entry(orig_entry, (&amp;orig_entries-&gt;list), list)</div><div class='add'>+    {</div><div class='add'>+        next_offset = orig_entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-                subvol = methods-&gt;layout_search (this, layout,</div><div class='del'>-                                                 orig_entry-&gt;d_name);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s: entry = %s, type = %d", prev-&gt;name,</div><div class='add'>+                     orig_entry-&gt;d_name, orig_entry-&gt;d_type);</div><div class='ctx'> </div><div class='del'>-                if (!subvol || (subvol == prev)) {</div><div class='del'>-                        entry = gf_dirent_for_name (orig_entry-&gt;d_name);</div><div class='del'>-                        if (!entry) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                                        "Memory allocation failed ");</div><div class='del'>-                                goto unwind;</div><div class='del'>-                        }</div><div class='add'>+        subvol = methods-&gt;layout_search(this, layout, orig_entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-                        entry-&gt;d_off  = orig_entry-&gt;d_off;</div><div class='del'>-                        entry-&gt;d_ino  = orig_entry-&gt;d_ino;</div><div class='del'>-                        entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='del'>-                        entry-&gt;d_len  = orig_entry-&gt;d_len;</div><div class='add'>+        if (!subvol || (subvol == prev)) {</div><div class='add'>+            entry = gf_dirent_for_name(orig_entry-&gt;d_name);</div><div class='add'>+            if (!entry) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "Memory allocation failed ");</div><div class='add'>+                goto unwind;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: Adding = entry %s",</div><div class='del'>-                                      prev-&gt;name, entry-&gt;d_name);</div><div class='add'>+            entry-&gt;d_off = orig_entry-&gt;d_off;</div><div class='add'>+            entry-&gt;d_ino = orig_entry-&gt;d_ino;</div><div class='add'>+            entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='add'>+            entry-&gt;d_len = orig_entry-&gt;d_len;</div><div class='ctx'> </div><div class='del'>-                        list_add_tail (&amp;entry-&gt;list, &amp;entries.list);</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "%s: Adding = entry %s", prev-&gt;name,</div><div class='add'>+                         entry-&gt;d_name);</div><div class='add'>+</div><div class='add'>+            list_add_tail(&amp;entry-&gt;list, &amp;entries.list);</div><div class='add'>+            count++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> done:</div><div class='del'>-        op_ret = count;</div><div class='del'>-        /* We need to ensure that only the last subvolume's end-of-directory</div><div class='del'>-         * notification is respected so that directory reading does not stop</div><div class='del'>-         * before all subvolumes have been read. That could happen because the</div><div class='del'>-         * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='del'>-         * distribute we're not concerned only with a posix's view of the</div><div class='del'>-         * directory but the aggregated namespace' view of the directory.</div><div class='del'>-         */</div><div class='del'>-        if (count == 0) {</div><div class='del'>-                if ((next_offset == 0) || (op_errno == ENOENT)) {</div><div class='del'>-                        next_offset = 0;</div><div class='del'>-                        next_subvol = dht_subvol_next (this, prev);</div><div class='del'>-                } else {</div><div class='del'>-                        next_subvol = prev;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!next_subvol) {</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    op_ret = count;</div><div class='add'>+    /* We need to ensure that only the last subvolume's end-of-directory</div><div class='add'>+     * notification is respected so that directory reading does not stop</div><div class='add'>+     * before all subvolumes have been read. That could happen because the</div><div class='add'>+     * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='add'>+     * distribute we're not concerned only with a posix's view of the</div><div class='add'>+     * directory but the aggregated namespace' view of the directory.</div><div class='add'>+     */</div><div class='add'>+    if (count == 0) {</div><div class='add'>+        if ((next_offset == 0) || (op_errno == ENOENT)) {</div><div class='add'>+            next_offset = 0;</div><div class='add'>+            next_subvol = dht_subvol_next(this, prev);</div><div class='add'>+        } else {</div><div class='add'>+            next_subvol = prev;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_readdir_cbk, next_subvol,</div><div class='del'>-                                   next_subvol, next_subvol-&gt;fops-&gt;readdir,</div><div class='del'>-                                   local-&gt;fd, local-&gt;size,</div><div class='del'>-                                   next_offset, NULL);</div><div class='del'>-                return 0;</div><div class='add'>+        if (!next_subvol) {</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_readdir_cbk, next_subvol, next_subvol,</div><div class='add'>+                          next_subvol-&gt;fops-&gt;readdir, local-&gt;fd, local-&gt;size,</div><div class='add'>+                          next_offset, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> unwind:</div><div class='del'>-        /* We need to ensure that only the last subvolume's end-of-directory</div><div class='del'>-         * notification is respected so that directory reading does not stop</div><div class='del'>-         * before all subvolumes have been read. That could happen because the</div><div class='del'>-         * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='del'>-         * distribute we're not concerned only with a posix's view of the</div><div class='del'>-         * directory but the aggregated namespace' view of the directory.</div><div class='del'>-         */</div><div class='add'>+    /* We need to ensure that only the last subvolume's end-of-directory</div><div class='add'>+     * notification is respected so that directory reading does not stop</div><div class='add'>+     * before all subvolumes have been read. That could happen because the</div><div class='add'>+     * posix for each subvolume sends a ENOENT on end-of-directory but in</div><div class='add'>+     * distribute we're not concerned only with a posix's view of the</div><div class='add'>+     * directory but the aggregated namespace' view of the directory.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        if (prev != dht_last_up_subvol (this))</div><div class='del'>-                op_errno = 0;</div><div class='add'>+    if (prev != dht_last_up_subvol(this))</div><div class='add'>+        op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        if (!skip_hashed_check) {</div><div class='del'>-                DHT_STACK_UNWIND (readdir, frame, op_ret, op_errno,</div><div class='del'>-                                  &amp;entries, NULL);</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='add'>+    if (!skip_hashed_check) {</div><div class='add'>+        DHT_STACK_UNWIND(readdir, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (readdir, frame, op_ret, op_errno,</div><div class='del'>-                                  orig_entries, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(readdir, frame, op_ret, op_errno, orig_entries, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-                off_t yoff, int whichop, dict_t *dict)</div><div class='add'>+dht_do_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t yoff, int whichop, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        xlator_t     *xvol = NULL;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, NULL, whichop);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;size = size;</div><div class='del'>-        local-&gt;xattr_req = (dict)? dict_ref (dict) : NULL;</div><div class='del'>-        local-&gt;first_up_subvol = dht_first_up_subvol (this);</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    xlator_t *xvol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        dht_deitransform (this, yoff, &amp;xvol);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        /* TODO: do proper readdir */</div><div class='del'>-        if (whichop == GF_FOP_READDIRP) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        local-&gt;xattr = dict_ref (dict);</div><div class='del'>-                else</div><div class='del'>-                        local-&gt;xattr = dict_new ();</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;xattr) {</div><div class='del'>-                        ret = dict_set_uint32 (local-&gt;xattr,</div><div class='del'>-                                               conf-&gt;link_xattr_name, 256);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Failed to set dictionary value"</div><div class='del'>-                                        " : key = %s",</div><div class='del'>-                                        conf-&gt;link_xattr_name);</div><div class='add'>+    local = dht_local_init(frame, NULL, NULL, whichop);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        if (conf-&gt;readdir_optimize == _gf_true) {</div><div class='del'>-                                if (xvol != local-&gt;first_up_subvol) {</div><div class='del'>-                                        ret = dict_set_int32 (local-&gt;xattr,</div><div class='del'>-                                                       GF_READDIR_SKIP_DIRS, 1);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                        GF_LOG_ERROR, 0,</div><div class='del'>-                                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                        "Failed to set "</div><div class='del'>-                                                        "dictionary value: "</div><div class='del'>-                                                        "key = %s",</div><div class='del'>-                                                        GF_READDIR_SKIP_DIRS);</div><div class='del'>-                                } else {</div><div class='del'>-                                        dict_del (local-&gt;xattr,</div><div class='del'>-                                                  GF_READDIR_SKIP_DIRS);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (conf-&gt;subvolume_cnt == 1) {</div><div class='del'>-                                ret = dict_set_uint32 (local-&gt;xattr,</div><div class='del'>-                                                       conf-&gt;xattr_name, 4 * 4);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                ENOMEM,</div><div class='del'>-                                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                                "Failed to set dictionary "</div><div class='del'>-                                                "value:key = %s ",</div><div class='del'>-                                                conf-&gt;xattr_name);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;size = size;</div><div class='add'>+    local-&gt;xattr_req = (dict) ? dict_ref(dict) : NULL;</div><div class='add'>+    local-&gt;first_up_subvol = dht_first_up_subvol(this);</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='add'>+    dht_deitransform(this, yoff, &amp;xvol);</div><div class='ctx'> </div><div class='add'>+    /* TODO: do proper readdir */</div><div class='add'>+    if (whichop == GF_FOP_READDIRP) {</div><div class='add'>+        if (dict)</div><div class='add'>+            local-&gt;xattr = dict_ref(dict);</div><div class='add'>+        else</div><div class='add'>+            local-&gt;xattr = dict_new();</div><div class='add'>+</div><div class='add'>+        if (local-&gt;xattr) {</div><div class='add'>+            ret = dict_set_uint32(local-&gt;xattr, conf-&gt;link_xattr_name, 256);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set dictionary value"</div><div class='add'>+                       " : key = %s",</div><div class='add'>+                       conf-&gt;link_xattr_name);</div><div class='add'>+</div><div class='add'>+            if (conf-&gt;readdir_optimize == _gf_true) {</div><div class='add'>+                if (xvol != local-&gt;first_up_subvol) {</div><div class='add'>+                    ret = dict_set_int32(local-&gt;xattr, GF_READDIR_SKIP_DIRS, 1);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                               DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                               "Failed to set "</div><div class='add'>+                               "dictionary value: "</div><div class='add'>+                               "key = %s",</div><div class='add'>+                               GF_READDIR_SKIP_DIRS);</div><div class='add'>+                } else {</div><div class='add'>+                    dict_del(local-&gt;xattr, GF_READDIR_SKIP_DIRS);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_readdirp_cbk, xvol, xvol,</div><div class='del'>-                                   xvol-&gt;fops-&gt;readdirp, fd, size, yoff,</div><div class='del'>-                                   local-&gt;xattr);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_readdir_cbk, xvol, xvol,</div><div class='del'>-                                   xvol-&gt;fops-&gt;readdir, fd, size, yoff,</div><div class='del'>-                                   local-&gt;xattr);</div><div class='add'>+            if (conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+                ret = dict_set_uint32(local-&gt;xattr, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+                           DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                           "Failed to set dictionary "</div><div class='add'>+                           "value:key = %s ",</div><div class='add'>+                           conf-&gt;xattr_name);</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_readdirp_cbk, xvol, xvol,</div><div class='add'>+                          xvol-&gt;fops-&gt;readdirp, fd, size, yoff, local-&gt;xattr);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_readdir_cbk, xvol, xvol,</div><div class='add'>+                          xvol-&gt;fops-&gt;readdir, fd, size, yoff, local-&gt;xattr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (readdir, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(readdir, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-             off_t yoff, dict_t *xdata)</div><div class='add'>+dht_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t yoff, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          op = GF_FOP_READDIR;</div><div class='del'>-        dht_conf_t  *conf = NULL;</div><div class='del'>-        int          i = 0;</div><div class='add'>+    int op = GF_FOP_READDIR;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                        op = GF_FOP_READDIRP;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+            op = GF_FOP_READDIRP;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;use_readdirp)</div><div class='del'>-                op = GF_FOP_READDIRP;</div><div class='add'>+    if (conf-&gt;use_readdirp)</div><div class='add'>+        op = GF_FOP_READDIRP;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        dht_do_readdir (frame, this, fd, size, yoff, op, 0);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_do_readdir(frame, this, fd, size, yoff, op, 0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-              off_t yoff, dict_t *dict)</div><div class='add'>+dht_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+             off_t yoff, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        dht_do_readdir (frame, this, fd, size, yoff, GF_FOP_READDIRP, dict);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_do_readdir(frame, this, fd, size, yoff, GF_FOP_READDIRP, dict);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1)</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1)</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0)</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        if (op_ret == 0)</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                DHT_STACK_UNWIND (fsyncdir, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, xdata);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        DHT_STACK_UNWIND(fsyncdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              int datasync, dict_t *xdata)</div><div class='add'>+dht_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        int           i = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, NULL, NULL, GF_FOP_FSYNCDIR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, NULL, NULL, GF_FOP_FSYNCDIR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                STACK_WIND (frame, dht_fsyncdir_cbk,</div><div class='del'>-                            conf-&gt;subvolumes[i],</div><div class='del'>-                            conf-&gt;subvolumes[i]-&gt;fops-&gt;fsyncdir,</div><div class='del'>-                            fd, datasync, xdata);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        STACK_WIND(frame, dht_fsyncdir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                   conf-&gt;subvolumes[i]-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fsyncdir, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fsyncdir, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_newfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno,</div><div class='del'>-                 inode_t *inode, struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_newfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           preparent, 0);</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, EINVAL,</div><div class='del'>-                              "could not set pre-set layout for subvolume %s",</div><div class='del'>-                              prev? prev-&gt;name: NULL);</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (local-&gt;linked == _gf_true)</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, preparent, 0);</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, EINVAL,</div><div class='add'>+                     "could not set pre-set layout for subvolume %s",</div><div class='add'>+                     prev ? prev-&gt;name : NULL);</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;linked == _gf_true)</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='ctx'> out:</div><div class='del'>-        /*</div><div class='del'>-         * FIXME: ia_size and st_blocks of preparent and postparent do not have</div><div class='del'>-         * correct values. since, preparent and postparent buffers correspond</div><div class='del'>-         * to a directory these two members should have values equal to sum of</div><div class='del'>-         * corresponding values from each of the subvolume.</div><div class='del'>-         * See dht_iatt_merge for reference.</div><div class='del'>-         */</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (postparent);</div><div class='del'>-        dht_set_fixed_dir_stat (preparent);</div><div class='del'>-</div><div class='del'>-        if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='del'>-                /* store op_errno for failure case*/</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;refresh_layout_unlock (frame, this, op_ret, 1);</div><div class='add'>+    /*</div><div class='add'>+     * FIXME: ia_size and st_blocks of preparent and postparent do not have</div><div class='add'>+     * correct values. since, preparent and postparent buffers correspond</div><div class='add'>+     * to a directory these two members should have values equal to sum of</div><div class='add'>+     * corresponding values from each of the subvolume.</div><div class='add'>+     * See dht_iatt_merge for reference.</div><div class='add'>+     */</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(postparent);</div><div class='add'>+    dht_set_fixed_dir_stat(preparent);</div><div class='add'>+</div><div class='add'>+    if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='add'>+        /* store op_errno for failure case*/</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;refresh_layout_unlock(frame, this, op_ret, 1);</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        DHT_STACK_UNWIND (mknod, frame, op_ret, op_errno,</div><div class='del'>-                                          inode, stbuf, preparent, postparent,</div><div class='del'>-                                          xdata);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (mknod, frame, op_ret, op_errno, inode,</div><div class='del'>-                                  stbuf, preparent, postparent, xdata);</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            DHT_STACK_UNWIND(mknod, frame, op_ret, op_errno, inode, stbuf,</div><div class='add'>+                             preparent, postparent, xdata);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(mknod, frame, op_ret, op_errno, inode, stbuf,</div><div class='add'>+                         preparent, postparent, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mknod_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                               xlator_t *this,</div><div class='del'>-                               int32_t op_ret, int32_t op_errno,</div><div class='del'>-                               inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                               struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                               dict_t *xdata)</div><div class='add'>+dht_mknod_linkfile_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                              int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                              struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                              struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *cached_subvol  = NULL;</div><div class='del'>-        dht_conf_t      *conf           = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local || !local-&gt;cached_subvol) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!local || !local-&gt;cached_subvol) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                local-&gt;op_errno =  EINVAL;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;params) {</div><div class='del'>-                 dict_del (local-&gt;params, conf-&gt;link_xattr_name);</div><div class='del'>-                 dict_del (local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;params) {</div><div class='add'>+        dict_del(local-&gt;params, conf-&gt;link_xattr_name);</div><div class='add'>+        dict_del(local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_newfile_cbk, (void *)cached_subvol,</div><div class='del'>-                           cached_subvol, cached_subvol-&gt;fops-&gt;mknod,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;mode, local-&gt;rdev, local-&gt;umask,</div><div class='del'>-                           local-&gt;params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_newfile_cbk, (void *)cached_subvol,</div><div class='add'>+                      cached_subvol, cached_subvol-&gt;fops-&gt;mknod, &amp;local-&gt;loc,</div><div class='add'>+                      local-&gt;mode, local-&gt;rdev, local-&gt;umask, local-&gt;params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='del'>-                local-&gt;refresh_layout_unlock (frame, this, -1, 1);</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (mknod, frame, -1,</div><div class='del'>-                                  op_errno, NULL, NULL, NULL,</div><div class='del'>-                                  NULL, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='add'>+        local-&gt;refresh_layout_unlock(frame, this, -1, 1);</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mknod_wind_to_avail_subvol (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                 xlator_t *subvol, loc_t *loc, dev_t rdev,</div><div class='del'>-                                 mode_t mode, mode_t umask, dict_t *params)</div><div class='add'>+dht_mknod_wind_to_avail_subvol(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                               xlator_t *subvol, loc_t *loc, dev_t rdev,</div><div class='add'>+                               mode_t mode, mode_t umask, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *avail_subvol   = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!dht_is_subvol_filled (this, subvol)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "creating %s on %s", loc-&gt;path,</div><div class='del'>-                              subvol-&gt;name);</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_newfile_cbk, (void *)subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;mknod, loc, mode,</div><div class='del'>-                                   rdev, umask, params);</div><div class='del'>-        } else {</div><div class='del'>-                avail_subvol = dht_free_disk_available_subvol (this, subvol, local);</div><div class='add'>+    if (!dht_is_subvol_filled(this, subvol)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "creating %s on %s", loc-&gt;path,</div><div class='add'>+                     subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-                if (avail_subvol != subvol) {</div><div class='del'>-                        local-&gt;params = dict_ref (params);</div><div class='del'>-                        local-&gt;rdev = rdev;</div><div class='del'>-                        local-&gt;mode = mode;</div><div class='del'>-                        local-&gt;umask = umask;</div><div class='del'>-                        local-&gt;cached_subvol = avail_subvol;</div><div class='del'>-                        local-&gt;hashed_subvol = subvol;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;mknod, loc, mode, rdev, umask, params);</div><div class='add'>+    } else {</div><div class='add'>+        avail_subvol = dht_free_disk_available_subvol(this, subvol, local);</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "creating %s on %s (link at %s)", loc-&gt;path,</div><div class='del'>-                                      avail_subvol-&gt;name, subvol-&gt;name);</div><div class='add'>+        if (avail_subvol != subvol) {</div><div class='add'>+            local-&gt;params = dict_ref(params);</div><div class='add'>+            local-&gt;rdev = rdev;</div><div class='add'>+            local-&gt;mode = mode;</div><div class='add'>+            local-&gt;umask = umask;</div><div class='add'>+            local-&gt;cached_subvol = avail_subvol;</div><div class='add'>+            local-&gt;hashed_subvol = subvol;</div><div class='ctx'> </div><div class='del'>-                        dht_linkfile_create (frame,</div><div class='del'>-                                             dht_mknod_linkfile_create_cbk,</div><div class='del'>-                                             this, avail_subvol, subvol, loc);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "creating %s on %s (link at %s)",</div><div class='add'>+                         loc-&gt;path, avail_subvol-&gt;name, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            dht_linkfile_create(frame, dht_mknod_linkfile_create_cbk, this,</div><div class='add'>+                                avail_subvol, subvol, loc);</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_newfile_cbk,</div><div class='del'>-                                   (void *)subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;mknod, loc, mode,</div><div class='del'>-                                   rdev, umask, params);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "creating %s on %s", loc-&gt;path,</div><div class='add'>+                     subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;mknod, loc, mode, rdev, umask, params);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_mknod_do (call_frame_t *frame)</div><div class='add'>+dht_mknod_do(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        dht_layout_t    *refreshed      = NULL;</div><div class='del'>-        xlator_t        *subvol         = NULL;</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        dht_conf_t      *conf           = NULL;</div><div class='del'>-        dht_methods_t   *methods        = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *refreshed = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, err);</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        /* We don't need parent_loc anymore */</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+    /* We don't need parent_loc anymore */</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, &amp;local-&gt;loc2);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, &amp;local-&gt;loc2);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc2);</div><div class='ctx'> </div><div class='del'>-        refreshed = local-&gt;selfheal.refreshed_layout;</div><div class='add'>+    refreshed = local-&gt;selfheal.refreshed_layout;</div><div class='ctx'> </div><div class='del'>-        subvol = methods-&gt;layout_search (this, refreshed, local-&gt;loc.name);</div><div class='add'>+    subvol = methods-&gt;layout_search(this, refreshed, local-&gt;loc.name);</div><div class='ctx'> </div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED, "no subvolume in "</div><div class='del'>-                        "layout for path=%s", local-&gt;loc.path);</div><div class='del'>-                local-&gt;op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "no subvolume in "</div><div class='add'>+               "layout for path=%s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_mknod_wind_to_avail_subvol (frame, this, subvol, &amp;local-&gt;loc,</div><div class='del'>-                                         local-&gt;rdev, local-&gt;mode,</div><div class='del'>-                                         local-&gt;umask, local-&gt;params);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_mknod_wind_to_avail_subvol(frame, this, subvol, &amp;local-&gt;loc,</div><div class='add'>+                                   local-&gt;rdev, local-&gt;mode, local-&gt;umask,</div><div class='add'>+                                   local-&gt;params);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        local-&gt;refresh_layout_unlock (frame, this, -1, 1);</div><div class='add'>+    local-&gt;refresh_layout_unlock(frame, this, -1, 1);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_mknod_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_mknod_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_mknod_finish (call_frame_t *frame, xlator_t *this, int op_ret,</div><div class='del'>-                  int invoke_cbk)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local      = NULL, *lock_local = NULL;</div><div class='del'>-        call_frame_t *lock_frame = NULL;</div><div class='del'>-        int           lock_count = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        lock_count = dht_lock_count (local-&gt;lock[0].layout.parent_layout.locks,</div><div class='del'>-                                     local-&gt;lock[0].layout.parent_layout.lk_count);</div><div class='del'>-        if (lock_count == 0)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        lock_frame = copy_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local = dht_local_init (lock_frame, &amp;local-&gt;loc, NULL,</div><div class='del'>-                                     lock_frame-&gt;root-&gt;op);</div><div class='del'>-        if (lock_local == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local-&gt;lock[0].layout.parent_layout.locks = local-&gt;lock[0].layout.parent_layout.locks;</div><div class='del'>-        lock_local-&gt;lock[0].layout.parent_layout.lk_count = local-&gt;lock[0].layout.parent_layout.lk_count;</div><div class='del'>-</div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='del'>-</div><div class='del'>-        dht_unlock_inodelk (lock_frame,</div><div class='del'>-                            lock_local-&gt;lock[0].layout.parent_layout.locks,</div><div class='del'>-                            lock_local-&gt;lock[0].layout.parent_layout.lk_count,</div><div class='del'>-                            dht_mknod_unlock_cbk);</div><div class='del'>-        lock_frame = NULL;</div><div class='add'>+dht_mknod_finish(call_frame_t *frame, xlator_t *this, int op_ret,</div><div class='add'>+                 int invoke_cbk)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL, *lock_local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    int lock_count = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    lock_count = dht_lock_count(local-&gt;lock[0].layout.parent_layout.locks,</div><div class='add'>+                                local-&gt;lock[0].layout.parent_layout.lk_count);</div><div class='add'>+    if (lock_count == 0)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    lock_frame = copy_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local = dht_local_init(lock_frame, &amp;local-&gt;loc, NULL,</div><div class='add'>+                                lock_frame-&gt;root-&gt;op);</div><div class='add'>+    if (lock_local == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local-&gt;lock[0]</div><div class='add'>+        .layout.parent_layout.locks = local-&gt;lock[0].layout.parent_layout.locks;</div><div class='add'>+    lock_local-&gt;lock[0].layout.parent_layout.lk_count =</div><div class='add'>+        local-&gt;lock[0].layout.parent_layout.lk_count;</div><div class='add'>+</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='add'>+</div><div class='add'>+    dht_unlock_inodelk(lock_frame,</div><div class='add'>+                       lock_local-&gt;lock[0].layout.parent_layout.locks,</div><div class='add'>+                       lock_local-&gt;lock[0].layout.parent_layout.lk_count,</div><div class='add'>+                       dht_mknod_unlock_cbk);</div><div class='add'>+    lock_frame = NULL;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame != NULL) {</div><div class='del'>-                DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    if (lock_frame != NULL) {</div><div class='add'>+        DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        DHT_STACK_UNWIND (mknod, frame, op_ret, local-&gt;op_errno, NULL, NULL,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='add'>+    if (op_ret == 0)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    DHT_STACK_UNWIND(mknod, frame, op_ret, local-&gt;op_errno, NULL, NULL, NULL,</div><div class='add'>+                     NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_mknod_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_mknod_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!local) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg ("DHT", GF_LOG_ERROR, 0, DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "mknod lock failed for file: %s", local-&gt;loc2.name);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg("DHT", GF_LOG_ERROR, 0, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "mknod lock failed for file: %s", local-&gt;loc2.name);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;refresh_layout_unlock = dht_mknod_finish;</div><div class='add'>+    local-&gt;refresh_layout_unlock = dht_mknod_finish;</div><div class='ctx'> </div><div class='del'>-        local-&gt;refresh_layout_done = dht_mknod_do;</div><div class='add'>+    local-&gt;refresh_layout_done = dht_mknod_do;</div><div class='ctx'> </div><div class='del'>-        dht_refresh_layout (frame);</div><div class='add'>+    dht_refresh_layout(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        dht_mknod_finish (frame, this, -1, 0);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_mknod_finish(frame, this, -1, 0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_mknod_lock (call_frame_t *frame, xlator_t *subvol)</div><div class='add'>+dht_mknod_lock(call_frame_t *frame, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        int              count  = 1,    ret = -1;</div><div class='del'>-        dht_lock_t     **lk_array       = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int count = 1, ret = -1;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        lk_array = GF_CALLOC (count, sizeof (*lk_array), gf_common_mt_pointer);</div><div class='add'>+    lk_array = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_pointer);</div><div class='ctx'> </div><div class='del'>-        if (lk_array == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    if (lk_array == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        lk_array[0] = dht_lock_new (frame-&gt;this, subvol, &amp;local-&gt;loc, F_RDLCK,</div><div class='del'>-                                    DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='del'>-                                    IGNORE_ENOENT_ESTALE);</div><div class='add'>+    lk_array[0] = dht_lock_new(frame-&gt;this, subvol, &amp;local-&gt;loc, F_RDLCK,</div><div class='add'>+                               DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='add'>+                               IGNORE_ENOENT_ESTALE);</div><div class='ctx'> </div><div class='del'>-        if (lk_array[0] == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    if (lk_array[0] == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.locks = lk_array;</div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.lk_count = count;</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.locks = lk_array;</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.lk_count = count;</div><div class='ctx'> </div><div class='del'>-        ret = dht_blocking_inodelk (frame, lk_array, count, dht_mknod_lock_cbk);</div><div class='add'>+    ret = dht_blocking_inodelk(frame, lk_array, count, dht_mknod_lock_cbk);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='del'>-                local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='add'>+        local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (lk_array != NULL) {</div><div class='del'>-                dht_lock_array_free (lk_array, count);</div><div class='del'>-                GF_FREE (lk_array);</div><div class='del'>-        }</div><div class='add'>+    if (lk_array != NULL) {</div><div class='add'>+        dht_lock_array_free(lk_array, count);</div><div class='add'>+        GF_FREE(lk_array);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_refresh_parent_layout_resume (call_frame_t *frame, xlator_t *this, int ret,</div><div class='del'>-                                  int invoke_cbk)</div><div class='add'>+dht_refresh_parent_layout_resume(call_frame_t *frame, xlator_t *this, int ret,</div><div class='add'>+                                 int invoke_cbk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local        = NULL, *parent_local = NULL;</div><div class='del'>-        call_stub_t  *stub         = NULL;</div><div class='del'>-        call_frame_t *parent_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL, *parent_local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    call_frame_t *parent_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        stub = local-&gt;stub;</div><div class='del'>-        local-&gt;stub = NULL;</div><div class='add'>+    stub = local-&gt;stub;</div><div class='add'>+    local-&gt;stub = NULL;</div><div class='ctx'> </div><div class='del'>-        parent_frame = stub-&gt;frame;</div><div class='del'>-        parent_local = parent_frame-&gt;local;</div><div class='add'>+    parent_frame = stub-&gt;frame;</div><div class='add'>+    parent_local = parent_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                parent_local-&gt;op_ret = -1;</div><div class='del'>-                parent_local-&gt;op_errno = local-&gt;op_errno</div><div class='del'>-                        ? local-&gt;op_errno : EIO;</div><div class='del'>-        } else {</div><div class='del'>-                parent_local-&gt;op_ret = 0;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        parent_local-&gt;op_ret = -1;</div><div class='add'>+        parent_local-&gt;op_errno = local-&gt;op_errno ? local-&gt;op_errno : EIO;</div><div class='add'>+    } else {</div><div class='add'>+        parent_local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_resume (stub);</div><div class='add'>+    call_resume(stub);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_refresh_parent_layout_done (call_frame_t *frame)</div><div class='add'>+dht_refresh_parent_layout_done(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        int          ret   = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto resume;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;op_ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto resume;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_layout_set (frame-&gt;this, local-&gt;loc.inode,</div><div class='del'>-                        local-&gt;selfheal.refreshed_layout);</div><div class='add'>+    dht_layout_set(frame-&gt;this, local-&gt;loc.inode,</div><div class='add'>+                   local-&gt;selfheal.refreshed_layout);</div><div class='ctx'> </div><div class='ctx'> resume:</div><div class='del'>-        dht_refresh_parent_layout_resume (frame, frame-&gt;this, ret, 1);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_refresh_parent_layout_resume(frame, frame-&gt;this, ret, 1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_handle_parent_layout_change (xlator_t *this, call_stub_t *stub)</div><div class='add'>+dht_handle_parent_layout_change(xlator_t *this, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *refresh_frame = NULL, *frame = NULL;</div><div class='del'>-        dht_local_t  *refresh_local = NULL, *local = NULL;</div><div class='add'>+    call_frame_t *refresh_frame = NULL, *frame = NULL;</div><div class='add'>+    dht_local_t *refresh_local = NULL, *local = NULL;</div><div class='ctx'> </div><div class='del'>-        frame = stub-&gt;frame;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    frame = stub-&gt;frame;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        refresh_frame = copy_frame (frame);</div><div class='del'>-        refresh_local = dht_local_init (refresh_frame, NULL, NULL,</div><div class='del'>-                                        stub-&gt;fop);</div><div class='add'>+    refresh_frame = copy_frame(frame);</div><div class='add'>+    refresh_local = dht_local_init(refresh_frame, NULL, NULL, stub-&gt;fop);</div><div class='ctx'> </div><div class='del'>-        refresh_local-&gt;loc.inode = inode_ref (local-&gt;loc.parent);</div><div class='del'>-        gf_uuid_copy (refresh_local-&gt;loc.gfid, local-&gt;loc.parent-&gt;gfid);</div><div class='add'>+    refresh_local-&gt;loc.inode = inode_ref(local-&gt;loc.parent);</div><div class='add'>+    gf_uuid_copy(refresh_local-&gt;loc.gfid, local-&gt;loc.parent-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        refresh_local-&gt;stub = stub;</div><div class='add'>+    refresh_local-&gt;stub = stub;</div><div class='ctx'> </div><div class='del'>-        refresh_local-&gt;refresh_layout_unlock = dht_refresh_parent_layout_resume;</div><div class='del'>-        refresh_local-&gt;refresh_layout_done = dht_refresh_parent_layout_done;</div><div class='add'>+    refresh_local-&gt;refresh_layout_unlock = dht_refresh_parent_layout_resume;</div><div class='add'>+    refresh_local-&gt;refresh_layout_done = dht_refresh_parent_layout_done;</div><div class='ctx'> </div><div class='del'>-        dht_refresh_layout (refresh_frame);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_refresh_layout(refresh_frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_call_mkdir_stub (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_call_mkdir_stub(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        call_stub_t *stub  = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        stub = local-&gt;stub;</div><div class='del'>-        local-&gt;stub = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    stub = local-&gt;stub;</div><div class='add'>+    local-&gt;stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_resume (stub);</div><div class='add'>+    call_resume(stub);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_guard_parent_layout_and_namespace (xlator_t *subvol, call_stub_t *stub)</div><div class='add'>+dht_guard_parent_layout_and_namespace(xlator_t *subvol, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local                  = NULL;</div><div class='del'>-        int            ret                    = -1;</div><div class='del'>-        loc_t         *loc                    = NULL;</div><div class='del'>-        xlator_t      *hashed_subvol          = NULL, *this = NULL;;</div><div class='del'>-        call_frame_t  *frame                  = NULL;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int32_t       *parent_disk_layout     = NULL;</div><div class='del'>-        dht_layout_t  *parent_layout          = NULL;</div><div class='del'>-        dht_conf_t    *conf                   = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL, *this = NULL;</div><div class='add'>+    ;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int32_t *parent_disk_layout = NULL;</div><div class='add'>+    dht_layout_t *parent_layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", stub, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", stub, err);</div><div class='ctx'> </div><div class='del'>-        frame = stub-&gt;frame;</div><div class='del'>-        this = frame-&gt;this;</div><div class='add'>+    frame = stub-&gt;frame;</div><div class='add'>+    this = frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;stub = stub;</div><div class='add'>+    local-&gt;stub = stub;</div><div class='ctx'> </div><div class='del'>-        /* TODO: recheck whether we should lock on src or dst if we do similar</div><div class='del'>-         * stale layout checks for rename.</div><div class='del'>-         */</div><div class='del'>-        loc = &amp;stub-&gt;args.loc;</div><div class='add'>+    /* TODO: recheck whether we should lock on src or dst if we do similar</div><div class='add'>+     * stale layout checks for rename.</div><div class='add'>+     */</div><div class='add'>+    loc = &amp;stub-&gt;args.loc;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse (loc-&gt;parent-&gt;gfid, pgfid);</div><div class='add'>+    gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='ctx'> </div><div class='add'>+    if (local-&gt;params == NULL) {</div><div class='add'>+        local-&gt;params = dict_new();</div><div class='ctx'>         if (local-&gt;params == NULL) {</div><div class='del'>-                local-&gt;params = dict_new ();</div><div class='del'>-                if (local-&gt;params == NULL) {</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                                DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                                "%s (%s/%s) (path: %s): "</div><div class='del'>-                                "dict allocation failed",</div><div class='del'>-                                gf_fop_list[stub-&gt;fop],</div><div class='del'>-                                pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (hashed_subvol == NULL) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+                   DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+                   "%s (%s/%s) (path: %s): "</div><div class='add'>+                   "dict allocation failed",</div><div class='add'>+                   gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (hashed_subvol == NULL) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "hashed subvolume not found",</div><div class='add'>+               gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent_layout = dht_layout_get(this, loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    ret = dht_disk_layout_extract_for_subvol(this, parent_layout, hashed_subvol,</div><div class='add'>+                                             &amp;parent_disk_layout);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "extracting in-memory layout of parent failed. ",</div><div class='add'>+               gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy((void *)local-&gt;parent_disk_layout, (void *)parent_disk_layout,</div><div class='add'>+           sizeof(local-&gt;parent_disk_layout));</div><div class='add'>+</div><div class='add'>+    dht_layout_unref(this, parent_layout);</div><div class='add'>+    parent_layout = NULL;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(local-&gt;params, GF_PREOP_PARENT_KEY, conf-&gt;xattr_name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "setting %s key in params dictionary failed. ",</div><div class='add'>+               gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path,</div><div class='add'>+               GF_PREOP_PARENT_KEY);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_bin(local-&gt;params, conf-&gt;xattr_name, parent_disk_layout,</div><div class='add'>+                       4 * 4);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "setting parent-layout in params dictionary failed. ",</div><div class='add'>+               gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent_disk_layout = NULL;</div><div class='add'>+    local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+</div><div class='add'>+    local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+    ret = dht_protect_namespace(frame, loc, hashed_subvol, &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                dht_call_mkdir_stub);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+err:</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "hashed subvolume not found", gf_fop_list[stub-&gt;fop],</div><div class='del'>-                        pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (parent_disk_layout != NULL)</div><div class='add'>+        GF_FREE(parent_disk_layout);</div><div class='ctx'> </div><div class='del'>-        parent_layout = dht_layout_get (this, loc-&gt;parent);</div><div class='add'>+    if (parent_layout != NULL)</div><div class='add'>+        dht_layout_unref(this, parent_layout);</div><div class='ctx'> </div><div class='del'>-        ret = dht_disk_layout_extract_for_subvol (this, parent_layout,</div><div class='del'>-                                                  hashed_subvol,</div><div class='del'>-                                                  &amp;parent_disk_layout);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "extracting in-memory layout of parent failed. ",</div><div class='del'>-                        gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy ((void *)local-&gt;parent_disk_layout, (void *)parent_disk_layout,</div><div class='del'>-                sizeof (local-&gt;parent_disk_layout));</div><div class='del'>-</div><div class='del'>-        dht_layout_unref (this, parent_layout);</div><div class='del'>-        parent_layout = NULL;</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (local-&gt;params, GF_PREOP_PARENT_KEY,</div><div class='del'>-                            conf-&gt;xattr_name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "setting %s key in params dictionary failed. ",</div><div class='del'>-                        gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path,</div><div class='del'>-                        GF_PREOP_PARENT_KEY);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+dht_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+          dev_t rdev, mode_t umask, dict_t *params)</div><div class='add'>+{</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_bin (local-&gt;params, conf-&gt;xattr_name, parent_disk_layout,</div><div class='del'>-                            4 * 4);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "setting parent-layout in params dictionary failed. ",</div><div class='del'>-                        gf_fop_list[stub-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='ctx'> </div><div class='del'>-        parent_disk_layout = NULL;</div><div class='del'>-        local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-        ret = dht_protect_namespace (frame, loc, hashed_subvol,</div><div class='del'>-                                     &amp;local-&gt;current-&gt;ns, dht_call_mkdir_stub);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-err:</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_MKNOD);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (parent_disk_layout != NULL)</div><div class='del'>-                GF_FREE (parent_disk_layout);</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (parent_layout != NULL)</div><div class='del'>-                dht_layout_unref (this, parent_layout);</div><div class='add'>+    /* Post remove-brick, the client layout may not be in sync with</div><div class='add'>+     * disk layout because of lack of lookup. Hence,a mknod call</div><div class='add'>+     * may fall on the decommissioned brick.  Hence, if the</div><div class='add'>+     * hashed_subvol is part of decommissioned bricks  list, do a</div><div class='add'>+     * lookup on parent dir. If a fix-layout is already done by the</div><div class='add'>+     * remove-brick process, the parent directory layout will be in</div><div class='add'>+     * sync with that of the disk. If fix-layout is still ending</div><div class='add'>+     * on the parent directory, we can let the file get created on</div><div class='add'>+     * the decommissioned brick which will be eventually migrated to</div><div class='add'>+     * non-decommissioned brick based on the new layout.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='del'>-}</div><div class='add'>+    if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='add'>+                conf-&gt;decommissioned_bricks[i] == subvol) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "hashed subvol:%s is "</div><div class='add'>+                             "part of decommission brick list for "</div><div class='add'>+                             "file: %s",</div><div class='add'>+                             subvol-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+                /* dht_refresh_layout needs directory info in</div><div class='add'>+                 * local-&gt;loc. Hence, storing the parent_loc in</div><div class='add'>+                 * local-&gt;loc and storing the create context in</div><div class='add'>+                 * local-&gt;loc2. We will restore this information</div><div class='add'>+                 * in dht_creation do */</div><div class='add'>+</div><div class='add'>+                ret = loc_copy(&amp;local-&gt;loc2, &amp;local-&gt;loc);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                           "loc_copy failed %s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_mknod (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, mode_t mode, dev_t rdev, mode_t umask, dict_t *params)</div><div class='del'>-{</div><div class='del'>-        xlator_t       *subvol     = NULL;</div><div class='del'>-        int             op_errno   = -1;</div><div class='del'>-        int             i          = 0;</div><div class='del'>-        int             ret        = 0;</div><div class='del'>-        dht_local_t    *local      = NULL;</div><div class='del'>-        dht_conf_t     *conf       = NULL;</div><div class='add'>+                    goto err;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='add'>+                local-&gt;params = dict_ref(params);</div><div class='add'>+                local-&gt;rdev = rdev;</div><div class='add'>+                local-&gt;mode = mode;</div><div class='add'>+                local-&gt;umask = umask;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+                loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='add'>+                ret = dht_build_parent_loc(this, &amp;local-&gt;loc, loc, &amp;op_errno);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_MKNOD);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_LOC_FAILED,</div><div class='add'>+                           "parent loc build failed");</div><div class='add'>+                    goto err;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+                ret = dht_mknod_lock(frame, subvol);</div><div class='ctx'> </div><div class='del'>-        /* Post remove-brick, the client layout may not be in sync with</div><div class='del'>-        * disk layout because of lack of lookup. Hence,a mknod call</div><div class='del'>-        * may fall on the decommissioned brick.  Hence, if the</div><div class='del'>-        * hashed_subvol is part of decommissioned bricks  list, do a</div><div class='del'>-        * lookup on parent dir. If a fix-layout is already done by the</div><div class='del'>-        * remove-brick process, the parent directory layout will be in</div><div class='del'>-        * sync with that of the disk. If fix-layout is still ending</div><div class='del'>-        * on the parent directory, we can let the file get created on</div><div class='del'>-        * the decommissioned brick which will be eventually migrated to</div><div class='del'>-        * non-decommissioned brick based on the new layout.</div><div class='del'>-        */</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+                           "locking parent failed");</div><div class='add'>+                    goto err;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='del'>-                        conf-&gt;decommissioned_bricks[i] == subvol) {</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "hashed subvol:%s is "</div><div class='del'>-                                      "part of decommission brick list for "</div><div class='del'>-                                      "file: %s", subvol-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                        /* dht_refresh_layout needs directory info in</div><div class='del'>-                         * local-&gt;loc. Hence, storing the parent_loc in</div><div class='del'>-                         * local-&gt;loc and storing the create context in</div><div class='del'>-                         * local-&gt;loc2. We will restore this information</div><div class='del'>-                         * in dht_creation do */</div><div class='del'>-</div><div class='del'>-                        ret = loc_copy (&amp;local-&gt;loc2, &amp;local-&gt;loc);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                                        "loc_copy failed %s", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local-&gt;params = dict_ref (params);</div><div class='del'>-                        local-&gt;rdev = rdev;</div><div class='del'>-                        local-&gt;mode = mode;</div><div class='del'>-                        local-&gt;umask = umask;</div><div class='del'>-</div><div class='del'>-                        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-</div><div class='del'>-                        ret = dht_build_parent_loc (this, &amp;local-&gt;loc, loc,</div><div class='del'>-                                                                 &amp;op_errno);</div><div class='del'>-</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_LOC_FAILED,</div><div class='del'>-                                        "parent loc build failed");</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = dht_mknod_lock (frame, subvol);</div><div class='del'>-</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                                        "locking parent failed");</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        goto done;</div><div class='del'>-               }</div><div class='add'>+                goto done;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_mknod_wind_to_avail_subvol (frame, this, subvol, loc, rdev, mode,</div><div class='del'>-                                        umask, params);</div><div class='add'>+    dht_mknod_wind_to_avail_subvol(frame, this, subvol, loc, rdev, mode, umask,</div><div class='add'>+                                   params);</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (mknod, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_symlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *linkname, loc_t *loc, mode_t umask, dict_t *params)</div><div class='add'>+dht_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='add'>+            loc_t *loc, mode_t umask, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_SYMLINK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_SYMLINK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;symlink, linkname, loc, umask,</div><div class='del'>-                           params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;symlink, linkname, loc, umask, params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+dht_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *cached_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_UNLINK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_UNLINK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!cached_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;flags = xflag;</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_unlink_cbk, cached_subvol, cached_subvol,</div><div class='del'>-                           cached_subvol-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    local-&gt;flags = xflag;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_unlink_cbk, cached_subvol, cached_subvol,</div><div class='add'>+                      cached_subvol-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dht_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int op_ret, int op_errno,</div><div class='del'>-              inode_t *inode, struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        gf_boolean_t  stbuf_merged = _gf_false;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        call_frame_t *cleanup_frame = NULL;</div><div class='del'>-        dht_local_t  *cleanup_local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                /* Remove the linkto if exists */</div><div class='del'>-                if (local-&gt;linked) {</div><div class='del'>-                        cleanup_frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-                        if (cleanup_frame) {</div><div class='del'>-                                cleanup_local = dht_local_init (cleanup_frame,</div><div class='del'>-                                                                &amp;local-&gt;loc2,</div><div class='del'>-                                                                NULL, 0);</div><div class='del'>-                                if (!cleanup_local || !local-&gt;link_subvol) {</div><div class='del'>-                                        DHT_STACK_DESTROY (cleanup_frame);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                cleanup_local-&gt;link_subvol = local-&gt;link_subvol;</div><div class='del'>-                                FRAME_SU_DO (cleanup_frame, dht_local_t);</div><div class='del'>-                                ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                                                    dht_remove_stale_linkto,</div><div class='del'>-                                                    dht_remove_stale_linkto_cbk,</div><div class='del'>-                                                    cleanup_frame,</div><div class='del'>-                                                    cleanup_frame);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                /* No continuation on DHT inode missing errors, as we should</div><div class='del'>-                 * then have a good stbuf that states P2 happened. We would</div><div class='del'>-                 * get inode missing if, the file completed migrated between</div><div class='del'>-                 * the lookup and the link call */</div><div class='del'>-                goto out;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+             int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t stbuf_merged = _gf_false;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    call_frame_t *cleanup_frame = NULL;</div><div class='add'>+    dht_local_t *cleanup_local = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        /* Remove the linkto if exists */</div><div class='add'>+        if (local-&gt;linked) {</div><div class='add'>+            cleanup_frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+            if (cleanup_frame) {</div><div class='add'>+                cleanup_local = dht_local_init(cleanup_frame, &amp;local-&gt;loc2,</div><div class='add'>+                                               NULL, 0);</div><div class='add'>+                if (!cleanup_local || !local-&gt;link_subvol) {</div><div class='add'>+                    DHT_STACK_DESTROY(cleanup_frame);</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                cleanup_local-&gt;link_subvol = local-&gt;link_subvol;</div><div class='add'>+                FRAME_SU_DO(cleanup_frame, dht_local_t);</div><div class='add'>+                ret = synctask_new(this-&gt;ctx-&gt;env, dht_remove_stale_linkto,</div><div class='add'>+                                   dht_remove_stale_linkto_cbk, cleanup_frame,</div><div class='add'>+                                   cleanup_frame);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Update parent on success, even if P1/2 checks are positive.</div><div class='del'>-         * The second call on success will further update the parent */</div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           preparent, 0);</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Update linkto attrs, if this is the first call and non-P2,</div><div class='del'>-         * if we detect P2 then we need to trust the attrs from the</div><div class='del'>-         * second call, not the first */</div><div class='del'>-        if (local-&gt;linked == _gf_true &amp;&amp;</div><div class='del'>-            ((local-&gt;call_cnt == 1 &amp;&amp; !IS_DHT_MIGRATION_PHASE2 (stbuf))</div><div class='del'>-             || (local-&gt;call_cnt != 1 &amp;&amp;</div><div class='del'>-                 IS_DHT_MIGRATION_PHASE2 (&amp;local-&gt;stbuf)))) {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                stbuf_merged = _gf_true;</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* No further P1/2 checks if we are in the second iteration of</div><div class='del'>-         * the call */</div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                goto out;</div><div class='add'>+        /* No continuation on DHT inode missing errors, as we should</div><div class='add'>+         * then have a good stbuf that states P2 happened. We would</div><div class='add'>+         * get inode missing if, the file completed migrated between</div><div class='add'>+         * the lookup and the link call */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Update parent on success, even if P1/2 checks are positive.</div><div class='add'>+     * The second call on success will further update the parent */</div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, preparent, 0);</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Update linkto attrs, if this is the first call and non-P2,</div><div class='add'>+     * if we detect P2 then we need to trust the attrs from the</div><div class='add'>+     * second call, not the first */</div><div class='add'>+    if (local-&gt;linked == _gf_true &amp;&amp;</div><div class='add'>+        ((local-&gt;call_cnt == 1 &amp;&amp; !IS_DHT_MIGRATION_PHASE2(stbuf)) ||</div><div class='add'>+         (local-&gt;call_cnt != 1 &amp;&amp; IS_DHT_MIGRATION_PHASE2(&amp;local-&gt;stbuf)))) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        stbuf_merged = _gf_true;</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* No further P1/2 checks if we are in the second iteration of</div><div class='add'>+     * the call */</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        /* Preserve the return values, in case the migration decides</div><div class='add'>+         * to recreate the link on the same subvol that the current</div><div class='add'>+         * hased for the link was created on. */</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;preparent, preparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+        if (!stbuf_merged) {</div><div class='add'>+            dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+            stbuf_merged = _gf_true;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        local-&gt;inode = inode_ref(inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_link2;</div><div class='add'>+    dht_set_local_rebalance(this, local, stbuf, preparent, postparent, xdata);</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase2 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE2(stbuf)) {</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, local-&gt;loc.inode, NULL, &amp;subvol);</div><div class='add'>+        if (!subvol) {</div><div class='add'>+            /* Phase 2 of migration */</div><div class='add'>+            ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+            if (!ret)</div><div class='add'>+                return 0;</div><div class='ctx'>         } else {</div><div class='del'>-                /* Preserve the return values, in case the migration decides</div><div class='del'>-                 * to recreate the link on the same subvol that the current</div><div class='del'>-                 * hased for the link was created on. */</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;preparent, preparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='del'>-                if (!stbuf_merged) {</div><div class='del'>-                        dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                        stbuf_merged = _gf_true;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;inode = inode_ref (inode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_link2;</div><div class='del'>-        dht_set_local_rebalance (this, local, stbuf, preparent,</div><div class='del'>-                                 postparent, xdata);</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase2 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE2 (stbuf)) {</div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, local-&gt;loc.inode, NULL,</div><div class='del'>-                                                  &amp;subvol);</div><div class='del'>-                if (!subvol) {</div><div class='del'>-                        /* Phase 2 of migration */</div><div class='del'>-                        ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                return 0;</div><div class='del'>-                } else {</div><div class='del'>-                        dht_link2 (this, subvol, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (stbuf)) {</div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, local-&gt;loc.inode, NULL,</div><div class='del'>-                                                  &amp;subvol);</div><div class='del'>-                if (subvol) {</div><div class='del'>-                        dht_link2 (this, subvol, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+            dht_link2(this, subvol, frame, 0);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(stbuf)) {</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, local-&gt;loc.inode, NULL, &amp;subvol);</div><div class='add'>+        if (subvol) {</div><div class='add'>+            dht_link2(this, subvol, frame, 0);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='ctx'> </div><div class='del'>-        dht_set_fixed_dir_stat (preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (postparent);</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, op_ret, op_errno, inode, stbuf,</div><div class='del'>-                          preparent, postparent, NULL);</div><div class='add'>+    dht_set_fixed_dir_stat(preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(postparent);</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                     postparent, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_link2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_link2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local  = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-                DHT_STACK_UNWIND (link, frame, local-&gt;op_ret, op_errno,</div><div class='del'>-                                  local-&gt;inode,</div><div class='del'>-                                  &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                                  &amp;local-&gt;postparent, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (subvol == NULL) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Second call to create link file could result in EEXIST as the</div><div class='del'>-         * first call created the linkto in the currently</div><div class='del'>-         * migrating subvol, which could be the new hashed subvol */</div><div class='del'>-        if (local-&gt;link_subvol == subvol) {</div><div class='del'>-                DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-                dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-                DHT_STACK_UNWIND (link, frame, 0, 0, local-&gt;inode,</div><div class='del'>-                                  &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                                  &amp;local-&gt;postparent, NULL);</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, dht_link_cbk, subvol, subvol-&gt;fops-&gt;link,</div><div class='del'>-                    &amp;local-&gt;loc, &amp;local-&gt;loc2, local-&gt;xattr_req);</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='add'>+        DHT_STACK_UNWIND(link, frame, local-&gt;op_ret, op_errno, local-&gt;inode,</div><div class='add'>+                         &amp;local-&gt;stbuf, &amp;local-&gt;preparent, &amp;local-&gt;postparent,</div><div class='add'>+                         NULL);</div><div class='ctx'>         return 0;</div><div class='del'>-err:</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    if (subvol == NULL) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_link_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno,</div><div class='del'>-                       inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                       struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                       dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *srcvol = NULL;</div><div class='add'>+    /* Second call to create link file could result in EEXIST as the</div><div class='add'>+     * first call created the linkto in the currently</div><div class='add'>+     * migrating subvol, which could be the new hashed subvol */</div><div class='add'>+    if (local-&gt;link_subvol == subvol) {</div><div class='add'>+        DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+        dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+        DHT_STACK_UNWIND(link, frame, 0, 0, local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='add'>+                         &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        srcvol = local-&gt;linkfile.srcvol;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_link_cbk, srcvol, srcvol-&gt;fops-&gt;link,</div><div class='del'>-                    &amp;local-&gt;loc, &amp;local-&gt;loc2, local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, dht_link_cbk, subvol, subvol-&gt;fops-&gt;link, &amp;local-&gt;loc,</div><div class='add'>+               &amp;local-&gt;loc2, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (postparent);</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='del'>-                          postparent, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+dht_link_linkfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                      struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *cached_subvol = NULL;</div><div class='del'>-        xlator_t    *hashed_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (newloc, err);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *srcvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, oldloc, NULL, GF_FOP_LINK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    srcvol = local-&gt;linkfile.srcvol;</div><div class='ctx'> </div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!cached_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", oldloc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    STACK_WIND(frame, dht_link_cbk, srcvol, srcvol-&gt;fops-&gt;link, &amp;local-&gt;loc,</div><div class='add'>+               &amp;local-&gt;loc2, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, newloc);</div><div class='del'>-        if (!hashed_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              newloc-&gt;path);</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc2, newloc);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (hashed_subvol != cached_subvol) {</div><div class='del'>-                gf_uuid_copy (local-&gt;gfid, oldloc-&gt;inode-&gt;gfid);</div><div class='del'>-                dht_linkfile_create (frame, dht_link_linkfile_cbk, this,</div><div class='del'>-                                     cached_subvol, hashed_subvol, newloc);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND (frame, dht_link_cbk,</div><div class='del'>-                            cached_subvol, cached_subvol-&gt;fops-&gt;link,</div><div class='del'>-                            oldloc, newloc, xdata);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+err:</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(postparent);</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                     postparent, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+         dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(newloc, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, oldloc, NULL, GF_FOP_LINK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     oldloc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, newloc);</div><div class='add'>+    if (!hashed_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     newloc-&gt;path);</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc2, newloc);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (hashed_subvol != cached_subvol) {</div><div class='add'>+        gf_uuid_copy(local-&gt;gfid, oldloc-&gt;inode-&gt;gfid);</div><div class='add'>+        dht_linkfile_create(frame, dht_link_linkfile_cbk, this, cached_subvol,</div><div class='add'>+                            hashed_subvol, newloc);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND(frame, dht_link_cbk, cached_subvol,</div><div class='add'>+                   cached_subvol-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno,</div><div class='del'>-                fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+               struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        prev = cookie;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           preparent, 0);</div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, preparent, 0);</div><div class='ctx'> </div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_fd_ctx_set (this, fd, prev);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Possible fd leak. "</div><div class='del'>-                              "Could not set fd ctx for subvol %s",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    ret = dht_fd_ctx_set(this, fd, prev);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Possible fd leak. "</div><div class='add'>+                     "Could not set fd ctx for subvol %s",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "could not set preset layout for subvol %s",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "could not set preset layout for subvol %s",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linked == _gf_true) {</div><div class='del'>-                local-&gt;stbuf = *stbuf;</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;linked == _gf_true) {</div><div class='add'>+        local-&gt;stbuf = *stbuf;</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        dht_set_fixed_dir_stat (preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (postparent);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    dht_set_fixed_dir_stat(preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(postparent);</div><div class='ctx'> </div><div class='del'>-        if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='del'>-                /* store op_errno for failure case*/</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;refresh_layout_unlock (frame, this, op_ret, 1);</div><div class='add'>+    if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='add'>+        /* store op_errno for failure case*/</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;refresh_layout_unlock(frame, this, op_ret, 1);</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        DHT_STACK_UNWIND (create, frame, op_ret, op_errno, fd,</div><div class='del'>-                                          inode, stbuf, preparent, postparent,</div><div class='del'>-                                          xdata);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (create, frame, op_ret, op_errno, fd, inode,</div><div class='del'>-                                  stbuf, preparent, postparent, xdata);</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            DHT_STACK_UNWIND(create, frame, op_ret, op_errno, fd, inode, stbuf,</div><div class='add'>+                             preparent, postparent, xdata);</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(create, frame, op_ret, op_errno, fd, inode, stbuf,</div><div class='add'>+                         preparent, postparent, xdata);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                xlator_t *this,</div><div class='del'>-                                int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                                struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                                dict_t *xdata)</div><div class='add'>+dht_create_linkfile_create_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                               inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                               struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local             = NULL;</div><div class='del'>-        xlator_t        *cached_subvol     = NULL;</div><div class='del'>-        dht_conf_t      *conf              = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;params) {</div><div class='del'>-                dict_del (local-&gt;params, conf-&gt;link_xattr_name);</div><div class='del'>-                dict_del (local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;params) {</div><div class='add'>+        dict_del(local-&gt;params, conf-&gt;link_xattr_name);</div><div class='add'>+        dict_del(local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_create_cbk, cached_subvol,</div><div class='del'>-                           cached_subvol, cached_subvol-&gt;fops-&gt;create,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;flags, local-&gt;mode,</div><div class='del'>-                           local-&gt;umask, local-&gt;fd, local-&gt;params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_create_cbk, cached_subvol, cached_subvol,</div><div class='add'>+                      cached_subvol-&gt;fops-&gt;create, &amp;local-&gt;loc, local-&gt;flags,</div><div class='add'>+                      local-&gt;mode, local-&gt;umask, local-&gt;fd, local-&gt;params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='del'>-                local-&gt;refresh_layout_unlock (frame, this, -1, 1);</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (create, frame, -1,</div><div class='del'>-                                  op_errno, NULL, NULL, NULL,</div><div class='del'>-                                  NULL, NULL, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (local &amp;&amp; local-&gt;lock[0].layout.parent_layout.locks) {</div><div class='add'>+        local-&gt;refresh_layout_unlock(frame, this, -1, 1);</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                         NULL, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_create_wind_to_avail_subvol (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                 xlator_t *subvol, loc_t *loc, int32_t flags,</div><div class='del'>-                                 mode_t mode, mode_t umask, fd_t *fd,</div><div class='del'>-                                 dict_t *params)</div><div class='add'>+dht_create_wind_to_avail_subvol(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                xlator_t *subvol, loc_t *loc, int32_t flags,</div><div class='add'>+                                mode_t mode, mode_t umask, fd_t *fd,</div><div class='add'>+                                dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *avail_subvol   = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!dht_is_subvol_filled (this, subvol)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "creating %s on %s", loc-&gt;path,</div><div class='del'>-                              subvol-&gt;name);</div><div class='add'>+    if (!dht_is_subvol_filled(this, subvol)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "creating %s on %s", loc-&gt;path,</div><div class='add'>+                     subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_create_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;create,</div><div class='del'>-                                   loc, flags, mode, umask, fd, params);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_create_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+                          params);</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                avail_subvol = dht_free_disk_available_subvol (this, subvol, local);</div><div class='add'>+    } else {</div><div class='add'>+        avail_subvol = dht_free_disk_available_subvol(this, subvol, local);</div><div class='ctx'> </div><div class='del'>-                if (avail_subvol != subvol) {</div><div class='del'>-                        local-&gt;params = dict_ref (params);</div><div class='del'>-                        local-&gt;flags = flags;</div><div class='del'>-                        local-&gt;mode = mode;</div><div class='del'>-                        local-&gt;umask = umask;</div><div class='del'>-                        local-&gt;cached_subvol = avail_subvol;</div><div class='del'>-                        local-&gt;hashed_subvol = subvol;</div><div class='add'>+        if (avail_subvol != subvol) {</div><div class='add'>+            local-&gt;params = dict_ref(params);</div><div class='add'>+            local-&gt;flags = flags;</div><div class='add'>+            local-&gt;mode = mode;</div><div class='add'>+            local-&gt;umask = umask;</div><div class='add'>+            local-&gt;cached_subvol = avail_subvol;</div><div class='add'>+            local-&gt;hashed_subvol = subvol;</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "creating %s on %s (link at %s)", loc-&gt;path,</div><div class='del'>-                                      avail_subvol-&gt;name, subvol-&gt;name);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "creating %s on %s (link at %s)",</div><div class='add'>+                         loc-&gt;path, avail_subvol-&gt;name, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-                        dht_linkfile_create (frame, dht_create_linkfile_create_cbk,</div><div class='del'>-                                             this, avail_subvol, subvol, loc);</div><div class='add'>+            dht_linkfile_create(frame, dht_create_linkfile_create_cbk, this,</div><div class='add'>+                                avail_subvol, subvol, loc);</div><div class='ctx'> </div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "creating %s on %s", loc-&gt;path,</div><div class='add'>+                     subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_create_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;create,</div><div class='del'>-                                   loc, flags, mode, umask, fd, params);</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_create_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+                          params);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_build_parent_loc (xlator_t *this, loc_t *parent, loc_t *child,</div><div class='del'>-                      int32_t *op_errno)</div><div class='add'>+dht_build_parent_loc(xlator_t *this, loc_t *parent, loc_t *child,</div><div class='add'>+                     int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t   *table = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!parent || !child) {</div><div class='del'>-                if (op_errno)</div><div class='del'>-                        *op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!parent || !child) {</div><div class='add'>+        if (op_errno)</div><div class='add'>+            *op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (child-&gt;parent) {</div><div class='del'>-                parent-&gt;inode = inode_ref (child-&gt;parent);</div><div class='del'>-                if (!parent-&gt;inode) {</div><div class='del'>-                        if (op_errno)</div><div class='del'>-                                *op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (child-&gt;parent) {</div><div class='add'>+        parent-&gt;inode = inode_ref(child-&gt;parent);</div><div class='add'>+        if (!parent-&gt;inode) {</div><div class='add'>+            if (op_errno)</div><div class='add'>+                *op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_uuid_copy (parent-&gt;gfid, child-&gt;pargfid);</div><div class='add'>+        gf_uuid_copy(parent-&gt;gfid, child-&gt;pargfid);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                if (gf_uuid_is_null (child-&gt;pargfid)) {</div><div class='del'>-                        if (op_errno)</div><div class='del'>-                                *op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        if (gf_uuid_is_null(child-&gt;pargfid)) {</div><div class='add'>+            if (op_errno)</div><div class='add'>+                *op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                table = this-&gt;itable;</div><div class='add'>+        table = this-&gt;itable;</div><div class='ctx'> </div><div class='del'>-                if (!table) {</div><div class='del'>-                        if (op_errno) {</div><div class='del'>-                                *op_errno = EINVAL;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!table) {</div><div class='add'>+            if (op_errno) {</div><div class='add'>+                *op_errno = EINVAL;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                parent-&gt;inode = inode_find (table, child-&gt;pargfid);</div><div class='add'>+        parent-&gt;inode = inode_find(table, child-&gt;pargfid);</div><div class='ctx'> </div><div class='del'>-                if (!parent-&gt;inode) {</div><div class='del'>-                         if (op_errno) {</div><div class='del'>-                                *op_errno = EINVAL;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (!parent-&gt;inode) {</div><div class='add'>+            if (op_errno) {</div><div class='add'>+                *op_errno = EINVAL;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_uuid_copy (parent-&gt;gfid, child-&gt;pargfid);</div><div class='add'>+        gf_uuid_copy(parent-&gt;gfid, child-&gt;pargfid);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_create_do (call_frame_t *frame)</div><div class='add'>+dht_create_do(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        dht_layout_t    *refreshed      = NULL;</div><div class='del'>-        xlator_t        *subvol         = NULL;</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        dht_conf_t      *conf           = NULL;</div><div class='del'>-        dht_methods_t   *methods        = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *refreshed = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='add'>+    this = THIS;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, err);</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        /* We don't need parent_loc anymore */</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+    /* We don't need parent_loc anymore */</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, &amp;local-&gt;loc2);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, &amp;local-&gt;loc2);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc2);</div><div class='ctx'> </div><div class='del'>-        refreshed = local-&gt;selfheal.refreshed_layout;</div><div class='add'>+    refreshed = local-&gt;selfheal.refreshed_layout;</div><div class='ctx'> </div><div class='del'>-        subvol = methods-&gt;layout_search (this, refreshed, local-&gt;loc.name);</div><div class='add'>+    subvol = methods-&gt;layout_search(this, refreshed, local-&gt;loc.name);</div><div class='ctx'> </div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED, "no subvolume in "</div><div class='del'>-                        "layout for path=%s", local-&gt;loc.path);</div><div class='del'>-                local-&gt;op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "no subvolume in "</div><div class='add'>+               "layout for path=%s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_create_wind_to_avail_subvol (frame, this, subvol, &amp;local-&gt;loc,</div><div class='del'>-                                         local-&gt;flags, local-&gt;mode,</div><div class='del'>-                                         local-&gt;umask, local-&gt;fd, local-&gt;params);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_create_wind_to_avail_subvol(frame, this, subvol, &amp;local-&gt;loc,</div><div class='add'>+                                    local-&gt;flags, local-&gt;mode, local-&gt;umask,</div><div class='add'>+                                    local-&gt;fd, local-&gt;params);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        local-&gt;refresh_layout_unlock (frame, this, -1, 1);</div><div class='add'>+    local-&gt;refresh_layout_unlock(frame, this, -1, 1);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_create_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_create_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_create_finish (call_frame_t *frame, xlator_t *this, int op_ret,</div><div class='del'>-                   int invoke_cbk)</div><div class='add'>+dht_create_finish(call_frame_t *frame, xlator_t *this, int op_ret,</div><div class='add'>+                  int invoke_cbk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local      = NULL, *lock_local = NULL;</div><div class='del'>-        call_frame_t *lock_frame = NULL;</div><div class='del'>-        int           lock_count = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        lock_count = dht_lock_count (local-&gt;lock[0].layout.parent_layout.locks,</div><div class='del'>-                                     local-&gt;lock[0].layout.parent_layout.lk_count);</div><div class='del'>-        if (lock_count == 0)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        lock_frame = copy_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local = dht_local_init (lock_frame, &amp;local-&gt;loc, NULL,</div><div class='del'>-                                     lock_frame-&gt;root-&gt;op);</div><div class='del'>-        if (lock_local == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local-&gt;lock[0].layout.parent_layout.locks = local-&gt;lock[0].layout.parent_layout.locks;</div><div class='del'>-        lock_local-&gt;lock[0].layout.parent_layout.lk_count = local-&gt;lock[0].layout.parent_layout.lk_count;</div><div class='del'>-</div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='del'>-	local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='del'>-</div><div class='del'>-        dht_unlock_inodelk (lock_frame,</div><div class='del'>-                            lock_local-&gt;lock[0].layout.parent_layout.locks,</div><div class='del'>-                            lock_local-&gt;lock[0].layout.parent_layout.lk_count,</div><div class='del'>-                            dht_create_unlock_cbk);</div><div class='del'>-        lock_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL, *lock_local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    int lock_count = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    lock_count = dht_lock_count(local-&gt;lock[0].layout.parent_layout.locks,</div><div class='add'>+                                local-&gt;lock[0].layout.parent_layout.lk_count);</div><div class='add'>+    if (lock_count == 0)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    lock_frame = copy_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local = dht_local_init(lock_frame, &amp;local-&gt;loc, NULL,</div><div class='add'>+                                lock_frame-&gt;root-&gt;op);</div><div class='add'>+    if (lock_local == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local-&gt;lock[0]</div><div class='add'>+        .layout.parent_layout.locks = local-&gt;lock[0].layout.parent_layout.locks;</div><div class='add'>+    lock_local-&gt;lock[0].layout.parent_layout.lk_count =</div><div class='add'>+        local-&gt;lock[0].layout.parent_layout.lk_count;</div><div class='add'>+</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='add'>+</div><div class='add'>+    dht_unlock_inodelk(lock_frame,</div><div class='add'>+                       lock_local-&gt;lock[0].layout.parent_layout.locks,</div><div class='add'>+                       lock_local-&gt;lock[0].layout.parent_layout.lk_count,</div><div class='add'>+                       dht_create_unlock_cbk);</div><div class='add'>+    lock_frame = NULL;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame != NULL) {</div><div class='del'>-                DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (op_ret == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (lock_frame != NULL) {</div><div class='add'>+        DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (create, frame, op_ret, local-&gt;op_errno, NULL, NULL,</div><div class='del'>-                          NULL, NULL, NULL, NULL);</div><div class='add'>+    if (op_ret == 0)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, op_ret, local-&gt;op_errno, NULL, NULL, NULL,</div><div class='add'>+                     NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_create_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_create_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!local) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg ("DHT", GF_LOG_ERROR, 0, DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "Create lock failed for file: %s", local-&gt;loc2.name);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg("DHT", GF_LOG_ERROR, 0, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "Create lock failed for file: %s", local-&gt;loc2.name);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;refresh_layout_unlock = dht_create_finish;</div><div class='add'>+    local-&gt;refresh_layout_unlock = dht_create_finish;</div><div class='ctx'> </div><div class='del'>-        local-&gt;refresh_layout_done = dht_create_do;</div><div class='add'>+    local-&gt;refresh_layout_done = dht_create_do;</div><div class='ctx'> </div><div class='del'>-        dht_refresh_layout (frame);</div><div class='add'>+    dht_refresh_layout(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        dht_create_finish (frame, this, -1, 0);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_create_finish(frame, this, -1, 0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_create_lock (call_frame_t *frame, xlator_t *subvol)</div><div class='add'>+dht_create_lock(call_frame_t *frame, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        int              count  = 1,    ret = -1;</div><div class='del'>-        dht_lock_t     **lk_array       = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int count = 1, ret = -1;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        lk_array = GF_CALLOC (count, sizeof (*lk_array), gf_common_mt_pointer);</div><div class='add'>+    lk_array = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_pointer);</div><div class='ctx'> </div><div class='del'>-        if (lk_array == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    if (lk_array == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        lk_array[0] = dht_lock_new (frame-&gt;this, subvol, &amp;local-&gt;loc, F_RDLCK,</div><div class='del'>-                                    DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='del'>-                                    IGNORE_ENOENT_ESTALE);</div><div class='add'>+    lk_array[0] = dht_lock_new(frame-&gt;this, subvol, &amp;local-&gt;loc, F_RDLCK,</div><div class='add'>+                               DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='add'>+                               IGNORE_ENOENT_ESTALE);</div><div class='ctx'> </div><div class='del'>-        if (lk_array[0] == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    if (lk_array[0] == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.locks = lk_array;</div><div class='del'>-        local-&gt;lock[0].layout.parent_layout.lk_count = count;</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.locks = lk_array;</div><div class='add'>+    local-&gt;lock[0].layout.parent_layout.lk_count = count;</div><div class='ctx'> </div><div class='del'>-        ret = dht_blocking_inodelk (frame, lk_array, count,</div><div class='del'>-                                    dht_create_lock_cbk);</div><div class='add'>+    ret = dht_blocking_inodelk(frame, lk_array, count, dht_create_lock_cbk);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='del'>-                local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;lock[0].layout.parent_layout.locks = NULL;</div><div class='add'>+        local-&gt;lock[0].layout.parent_layout.lk_count = 0;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (lk_array != NULL) {</div><div class='del'>-                dht_lock_array_free (lk_array, count);</div><div class='del'>-                GF_FREE (lk_array);</div><div class='del'>-        }</div><div class='add'>+    if (lk_array != NULL) {</div><div class='add'>+        dht_lock_array_free(lk_array, count);</div><div class='add'>+        GF_FREE(lk_array);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-            mode_t umask, fd_t *fd, dict_t *params)</div><div class='add'>+dht_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           mode_t mode, mode_t umask, fd_t *fd, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        int             op_errno           = -1;</div><div class='del'>-        xlator_t       *subvol             = NULL;</div><div class='del'>-        xlator_t       *hashed_subvol      = NULL;</div><div class='del'>-        dht_local_t    *local              = NULL;</div><div class='del'>-        int             i                  = 0;</div><div class='del'>-        dht_conf_t     *conf               = NULL;</div><div class='del'>-        int             ret                = 0;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, fd, GF_FOP_CREATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, loc, fd, GF_FOP_CREATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dht_filter_loc_subvol_key (this, loc, &amp;local-&gt;loc,</div><div class='del'>-                                       &amp;subvol)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                        "creating %s on %s (got create on %s)",</div><div class='del'>-                        local-&gt;loc.path, subvol-&gt;name, loc-&gt;path);</div><div class='add'>+    if (dht_filter_loc_subvol_key(this, loc, &amp;local-&gt;loc, &amp;subvol)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+               "creating %s on %s (got create on %s)", local-&gt;loc.path,</div><div class='add'>+               subvol-&gt;name, loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                /* Since lookup-optimize is enabled by default, we need</div><div class='del'>-                 * to create the linkto file if required.</div><div class='del'>-                 * Note this does not check for decommisioned bricks</div><div class='del'>-                 * and min-free-disk limits as this is a debugging tool</div><div class='del'>-                 * and not expected to be used in production.</div><div class='del'>-                 */</div><div class='del'>-                hashed_subvol = dht_subvol_get_hashed (this, &amp;local-&gt;loc);</div><div class='del'>-</div><div class='del'>-                if (hashed_subvol &amp;&amp; (hashed_subvol != subvol)) {</div><div class='del'>-                        /* Create the linkto file and then the data file */</div><div class='del'>-                        local-&gt;params = dict_ref (params);</div><div class='del'>-                        local-&gt;flags = flags;</div><div class='del'>-                        local-&gt;mode = mode;</div><div class='del'>-                        local-&gt;umask = umask;</div><div class='del'>-                        local-&gt;cached_subvol = subvol;</div><div class='del'>-                        local-&gt;hashed_subvol = hashed_subvol;</div><div class='del'>-</div><div class='del'>-                        dht_linkfile_create (frame,</div><div class='del'>-                                             dht_create_linkfile_create_cbk,</div><div class='del'>-                                             this, subvol, hashed_subvol,</div><div class='del'>-                                             &amp;local-&gt;loc);</div><div class='del'>-                        goto done;</div><div class='add'>+        /* Since lookup-optimize is enabled by default, we need</div><div class='add'>+         * to create the linkto file if required.</div><div class='add'>+         * Note this does not check for decommisioned bricks</div><div class='add'>+         * and min-free-disk limits as this is a debugging tool</div><div class='add'>+         * and not expected to be used in production.</div><div class='add'>+         */</div><div class='add'>+        hashed_subvol = dht_subvol_get_hashed(this, &amp;local-&gt;loc);</div><div class='add'>+</div><div class='add'>+        if (hashed_subvol &amp;&amp; (hashed_subvol != subvol)) {</div><div class='add'>+            /* Create the linkto file and then the data file */</div><div class='add'>+            local-&gt;params = dict_ref(params);</div><div class='add'>+            local-&gt;flags = flags;</div><div class='add'>+            local-&gt;mode = mode;</div><div class='add'>+            local-&gt;umask = umask;</div><div class='add'>+            local-&gt;cached_subvol = subvol;</div><div class='add'>+            local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+</div><div class='add'>+            dht_linkfile_create(frame, dht_create_linkfile_create_cbk, this,</div><div class='add'>+                                subvol, hashed_subvol, &amp;local-&gt;loc);</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+        /* We either don't have a hashed subvol or the hashed subvol is</div><div class='add'>+         * the same as the one specified. No need to create the linkto</div><div class='add'>+         * file as we expect a lookup everywhere if there are problems</div><div class='add'>+         * with the parent layout</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_create_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;create, &amp;local-&gt;loc, flags, mode, umask,</div><div class='add'>+                          fd, params);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "no subvolume in layout for path=%s", loc-&gt;path);</div><div class='add'>+</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Post remove-brick, the client layout may not be in sync with</div><div class='add'>+     * disk layout because of lack of lookup. Hence,a create call</div><div class='add'>+     * may fall on the decommissioned brick.  Hence, if the</div><div class='add'>+     * hashed_subvol is part of decommissioned bricks  list, do a</div><div class='add'>+     * lookup on parent dir. If a fix-layout is already done by the</div><div class='add'>+     * remove-brick process, the parent directory layout will be in</div><div class='add'>+     * sync with that of the disk. If fix-layout is still ending</div><div class='add'>+     * on the parent directory, we can let the file get created on</div><div class='add'>+     * the decommissioned brick which will be eventually migrated to</div><div class='add'>+     * non-decommissioned brick based on the new layout.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='add'>+                conf-&gt;decommissioned_bricks[i] == subvol) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "hashed subvol:%s is "</div><div class='add'>+                             "part of decommission brick list for "</div><div class='add'>+                             "file: %s",</div><div class='add'>+                             subvol-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+                /* dht_refresh_layout needs directory info in</div><div class='add'>+                 * local-&gt;loc. Hence, storing the parent_loc in</div><div class='add'>+                 * local-&gt;loc and storing the create context in</div><div class='add'>+                 * local-&gt;loc2. We will restore this information</div><div class='add'>+                 * in dht_creation do */</div><div class='add'>+</div><div class='add'>+                ret = loc_copy(&amp;local-&gt;loc2, &amp;local-&gt;loc);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                           "loc_copy failed %s", loc-&gt;path);</div><div class='add'>+</div><div class='add'>+                    goto err;</div><div class='ctx'>                 }</div><div class='del'>-                /* We either don't have a hashed subvol or the hashed subvol is</div><div class='del'>-                 * the same as the one specified. No need to create the linkto</div><div class='del'>-                 * file as we expect a lookup everywhere if there are problems</div><div class='del'>-                 * with the parent layout</div><div class='del'>-                 */</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_create_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;create, &amp;local-&gt;loc,</div><div class='del'>-                                   flags, mode, umask, fd, params);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                        "no subvolume in layout for path=%s",</div><div class='del'>-                        loc-&gt;path);</div><div class='add'>+                local-&gt;params = dict_ref(params);</div><div class='add'>+                local-&gt;flags = flags;</div><div class='add'>+                local-&gt;mode = mode;</div><div class='add'>+                local-&gt;umask = umask;</div><div class='ctx'> </div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+                loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-       /* Post remove-brick, the client layout may not be in sync with</div><div class='del'>-        * disk layout because of lack of lookup. Hence,a create call</div><div class='del'>-        * may fall on the decommissioned brick.  Hence, if the</div><div class='del'>-        * hashed_subvol is part of decommissioned bricks  list, do a</div><div class='del'>-        * lookup on parent dir. If a fix-layout is already done by the</div><div class='del'>-        * remove-brick process, the parent directory layout will be in</div><div class='del'>-        * sync with that of the disk. If fix-layout is still ending</div><div class='del'>-        * on the parent directory, we can let the file get created on</div><div class='del'>-        * the decommissioned brick which will be eventually migrated to</div><div class='del'>-        * non-decommissioned brick based on the new layout.</div><div class='del'>-        */</div><div class='add'>+                ret = dht_build_parent_loc(this, &amp;local-&gt;loc, loc, &amp;op_errno);</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='del'>-                        conf-&gt;decommissioned_bricks[i] == subvol) {</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "hashed subvol:%s is "</div><div class='del'>-                                      "part of decommission brick list for "</div><div class='del'>-                                      "file: %s", subvol-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                        /* dht_refresh_layout needs directory info in</div><div class='del'>-                         * local-&gt;loc. Hence, storing the parent_loc in</div><div class='del'>-                         * local-&gt;loc and storing the create context in</div><div class='del'>-                         * local-&gt;loc2. We will restore this information</div><div class='del'>-                         * in dht_creation do */</div><div class='del'>-</div><div class='del'>-                        ret = loc_copy (&amp;local-&gt;loc2, &amp;local-&gt;loc);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                                        "loc_copy failed %s", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local-&gt;params = dict_ref (params);</div><div class='del'>-                        local-&gt;flags = flags;</div><div class='del'>-                        local-&gt;mode = mode;</div><div class='del'>-                        local-&gt;umask = umask;</div><div class='del'>-</div><div class='del'>-                        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-</div><div class='del'>-                        ret = dht_build_parent_loc (this, &amp;local-&gt;loc, loc,</div><div class='del'>-                                                                 &amp;op_errno);</div><div class='del'>-</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_LOC_FAILED,</div><div class='del'>-                                        "parent loc build failed");</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = dht_create_lock (frame, subvol);</div><div class='del'>-</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                                        "locking parent failed");</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        goto done;</div><div class='del'>-               }</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_LOC_FAILED,</div><div class='add'>+                           "parent loc build failed");</div><div class='add'>+                    goto err;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                ret = dht_create_lock(frame, subvol);</div><div class='add'>+</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+                           "locking parent failed");</div><div class='add'>+                    goto err;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                goto done;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        dht_create_wind_to_avail_subvol (frame, this, subvol, loc, flags, mode,</div><div class='del'>-                                         umask, fd, params);</div><div class='add'>+    dht_create_wind_to_avail_subvol(frame, this, subvol, loc, flags, mode,</div><div class='add'>+                                    umask, fd, params);</div><div class='ctx'> done:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='ctx'> </div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_mkdir_selfheal_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                        xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_mkdir_selfheal_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local = NULL;</div><div class='del'>-        dht_layout_t  *layout = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;selfheal.layout;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;selfheal.layout;</div><div class='ctx'> </div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                dht_layout_set (this, local-&gt;inode, layout);</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        dht_layout_set(this, local-&gt;inode, layout);</div><div class='ctx'> </div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;inode, this,</div><div class='del'>-                                           &amp;local-&gt;stbuf, 1);</div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;preparent, 0);</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;inode, this, &amp;local-&gt;stbuf, 1);</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;preparent, 0);</div><div class='ctx'> </div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (mkdir, frame, op_ret, op_errno,</div><div class='del'>-                          local-&gt;inode, &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                          &amp;local-&gt;postparent, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(mkdir, frame, op_ret, op_errno, local-&gt;inode,</div><div class='add'>+                     &amp;local-&gt;stbuf, &amp;local-&gt;preparent, &amp;local-&gt;postparent,</div><div class='add'>+                     NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int op_ret, int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='del'>-               struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+              struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        gf_boolean_t subvol_filled = _gf_false;</div><div class='del'>-        gf_boolean_t dir_exists = _gf_false;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t subvol_filled = _gf_false;</div><div class='add'>+    gf_boolean_t dir_exists = _gf_false;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        subvol_filled = dht_is_subvol_filled (this, prev);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (subvol_filled &amp;&amp; (op_ret != -1)) {</div><div class='del'>-                        ret = dht_layout_merge (this, layout, prev,</div><div class='del'>-                                                -1, ENOSPC, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        if (op_ret == -1 &amp;&amp; op_errno == EEXIST) {</div><div class='del'>-                                /* Very likely just a race between mkdir and</div><div class='del'>-                                   self-heal (from lookup of a concurrent mkdir</div><div class='del'>-                                   attempt).</div><div class='del'>-                                   Ignore error for now. layout setting will</div><div class='del'>-                                   anyways fail if this was a different (old)</div><div class='del'>-                                   pre-existing different directory.</div><div class='del'>-                                */</div><div class='del'>-                                op_ret = 0;</div><div class='del'>-                                dir_exists = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dht_layout_merge (this, layout, prev,</div><div class='del'>-                                                op_ret, op_errno, NULL);</div><div class='del'>-                }</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='del'>-                                "%s: failed to merge layouts for subvol %s",</div><div class='del'>-                                local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    subvol_filled = dht_is_subvol_filled(this, prev);</div><div class='ctx'> </div><div class='del'>-                if (dir_exists)</div><div class='del'>-                        goto unlock;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (subvol_filled &amp;&amp; (op_ret != -1)) {</div><div class='add'>+            ret = dht_layout_merge(this, layout, prev, -1, ENOSPC, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            if (op_ret == -1 &amp;&amp; op_errno == EEXIST) {</div><div class='add'>+                /* Very likely just a race between mkdir and</div><div class='add'>+                   self-heal (from lookup of a concurrent mkdir</div><div class='add'>+                   attempt).</div><div class='add'>+                   Ignore error for now. layout setting will</div><div class='add'>+                   anyways fail if this was a different (old)</div><div class='add'>+                   pre-existing different directory.</div><div class='add'>+                */</div><div class='add'>+                op_ret = 0;</div><div class='add'>+                dir_exists = _gf_true;</div><div class='add'>+            }</div><div class='add'>+            ret = dht_layout_merge(this, layout, prev, op_ret, op_errno, NULL);</div><div class='add'>+        }</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='add'>+                   "%s: failed to merge layouts for subvol %s", local-&gt;loc.path,</div><div class='add'>+                   prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;preparent, preparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        if (dir_exists)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;preparent, preparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                /*Unlock entrylk and inodelk once mkdir is done on all subvols*/</div><div class='del'>-                dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='del'>-                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                dht_selfheal_new_directory (frame, dht_mkdir_selfheal_cbk,</div><div class='del'>-                                            layout);</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        /*Unlock entrylk and inodelk once mkdir is done on all subvols*/</div><div class='add'>+        dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='add'>+        FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+        dht_selfheal_new_directory(frame, dht_mkdir_selfheal_cbk, layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mkdir_hashed_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                      dict_t *xdata);</div><div class='add'>+dht_mkdir_hashed_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                     struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mkdir_helper (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, mode_t mode, mode_t umask, dict_t *params)</div><div class='add'>+dht_mkdir_helper(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+                 mode_t umask, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                   = NULL;</div><div class='del'>-        dht_conf_t   *conf                    = NULL;</div><div class='del'>-        int           op_errno                = -1, ret = -1;</div><div class='del'>-        xlator_t     *hashed_subvol           = NULL;</div><div class='del'>-        int32_t      *parent_disk_layout      = NULL;</div><div class='del'>-        dht_layout_t *parent_layout           = NULL;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse (loc-&gt;parent-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op_ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): refreshing parent layout "</div><div class='del'>-                        "failed.", pgfid, loc-&gt;name,</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                op_errno = local-&gt;op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-</div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (hashed_subvol == NULL) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "mkdir (%s/%s) (path: %s): hashed subvol not "</div><div class='del'>-                              "found", pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1, ret = -1;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    int32_t *parent_disk_layout = NULL;</div><div class='add'>+    dht_layout_t *parent_layout = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        parent_layout = dht_layout_get (this, loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-        ret = dht_disk_layout_extract_for_subvol (this, parent_layout,</div><div class='del'>-                                                  hashed_subvol,</div><div class='del'>-                                                  &amp;parent_disk_layout);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, EIO,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "extracting in-memory layout of parent failed. ",</div><div class='del'>-                        pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (memcmp (local-&gt;parent_disk_layout, parent_disk_layout,</div><div class='del'>-                    sizeof (local-&gt;parent_disk_layout)) == 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, EIO,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): loop detected. "</div><div class='del'>-                        "parent layout didn't change even though "</div><div class='del'>-                        "previous attempt of mkdir failed because of "</div><div class='del'>-                        "in-memory layout not matching with that on disk.",</div><div class='del'>-                        pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy ((void *)local-&gt;parent_disk_layout, (void *)parent_disk_layout,</div><div class='del'>-                sizeof (local-&gt;parent_disk_layout));</div><div class='del'>-</div><div class='del'>-        dht_layout_unref (this, parent_layout);</div><div class='del'>-        parent_layout = NULL;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (params, GF_PREOP_PARENT_KEY, conf-&gt;xattr_name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "setting %s key in params dictionary failed. ",</div><div class='del'>-                        pgfid, loc-&gt;name, loc-&gt;path, GF_PREOP_PARENT_KEY);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_bin (params, conf-&gt;xattr_name, parent_disk_layout,</div><div class='del'>-                            4 * 4);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "setting parent-layout in params dictionary failed. "</div><div class='del'>-                        "mkdir (%s/%s) (path: %s)", pgfid, loc-&gt;name,</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='ctx'> </div><div class='del'>-        parent_disk_layout = NULL;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_mkdir_hashed_cbk, hashed_subvol,</div><div class='del'>-                           hashed_subvol, hashed_subvol-&gt;fops-&gt;mkdir,</div><div class='del'>-                           loc, mode, umask, params);</div><div class='add'>+    if (local-&gt;op_ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): refreshing parent layout "</div><div class='add'>+               "failed.",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        op_errno = local-&gt;op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (hashed_subvol == NULL) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "mkdir (%s/%s) (path: %s): hashed subvol not "</div><div class='add'>+                     "found",</div><div class='add'>+                     pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+</div><div class='add'>+    parent_layout = dht_layout_get(this, loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    ret = dht_disk_layout_extract_for_subvol(this, parent_layout, hashed_subvol,</div><div class='add'>+                                             &amp;parent_disk_layout);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, EIO, DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "extracting in-memory layout of parent failed. ",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (memcmp(local-&gt;parent_disk_layout, parent_disk_layout,</div><div class='add'>+               sizeof(local-&gt;parent_disk_layout)) == 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, EIO, DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): loop detected. "</div><div class='add'>+               "parent layout didn't change even though "</div><div class='add'>+               "previous attempt of mkdir failed because of "</div><div class='add'>+               "in-memory layout not matching with that on disk.",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy((void *)local-&gt;parent_disk_layout, (void *)parent_disk_layout,</div><div class='add'>+           sizeof(local-&gt;parent_disk_layout));</div><div class='add'>+</div><div class='add'>+    dht_layout_unref(this, parent_layout);</div><div class='add'>+    parent_layout = NULL;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(params, GF_PREOP_PARENT_KEY, conf-&gt;xattr_name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "setting %s key in params dictionary failed. ",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path, GF_PREOP_PARENT_KEY);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_bin(params, conf-&gt;xattr_name, parent_disk_layout, 4 * 4);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "setting parent-layout in params dictionary failed. "</div><div class='add'>+               "mkdir (%s/%s) (path: %s)",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent_disk_layout = NULL;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_mkdir_hashed_cbk, hashed_subvol, hashed_subvol,</div><div class='add'>+                      hashed_subvol-&gt;fops-&gt;mkdir, loc, mode, umask, params);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='add'>+    dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='ctx'> </div><div class='del'>-        op_errno = local ? local-&gt;op_errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='add'>+    op_errno = local ? local-&gt;op_errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        if (parent_disk_layout != NULL)</div><div class='del'>-                GF_FREE (parent_disk_layout);</div><div class='add'>+    if (parent_disk_layout != NULL)</div><div class='add'>+        GF_FREE(parent_disk_layout);</div><div class='ctx'> </div><div class='del'>-        if (parent_layout != NULL)</div><div class='del'>-                dht_layout_unref (this, parent_layout);</div><div class='add'>+    if (parent_layout != NULL)</div><div class='add'>+        dht_layout_unref(this, parent_layout);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mkdir_hashed_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+dht_mkdir_hashed_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                     struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                   = NULL;</div><div class='del'>-        int           ret                     = -1;</div><div class='del'>-        xlator_t     *prev                    = NULL;</div><div class='del'>-        dht_layout_t *layout                  = NULL;</div><div class='del'>-        dht_conf_t   *conf                    = NULL;</div><div class='del'>-        int           i                       = 0;</div><div class='del'>-        xlator_t     *hashed_subvol           = NULL;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        gf_boolean_t  parent_layout_changed   = _gf_false;</div><div class='del'>-        call_stub_t  *stub                    = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    gf_boolean_t parent_layout_changed = _gf_false;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        hashed_subvol = local-&gt;hashed_subvol;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    hashed_subvol = local-&gt;hashed_subvol;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse (local-&gt;loc.parent-&gt;gfid, pgfid);</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.parent-&gt;gfid, pgfid);</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid) &amp;&amp; !op_ret)</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid) &amp;&amp; !op_ret)</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, stbuf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                parent_layout_changed = (xdata &amp;&amp; dict_get (xdata, GF_PREOP_CHECK_FAILED))</div><div class='del'>-                        ? 1 : 0;</div><div class='del'>-                if (parent_layout_changed) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                                "mkdir (%s/%s) (path: %s): parent layout "</div><div class='del'>-                                "changed. Attempting a refresh and then a "</div><div class='del'>-                                "retry", pgfid, local-&gt;loc.name,</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-</div><div class='del'>-                        stub = fop_mkdir_stub (frame, dht_mkdir_helper,</div><div class='del'>-                                               &amp;local-&gt;loc, local-&gt;mode,</div><div class='del'>-                                               local-&gt;umask, local-&gt;params);</div><div class='del'>-                        if (stub == NULL) {</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        dht_handle_parent_layout_change (this, stub);</div><div class='del'>-                        stub = NULL;</div><div class='del'>-</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='add'>+        parent_layout_changed = (xdata &amp;&amp;</div><div class='add'>+                                 dict_get(xdata, GF_PREOP_CHECK_FAILED))</div><div class='add'>+                                    ? 1</div><div class='add'>+                                    : 0;</div><div class='add'>+        if (parent_layout_changed) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+                   "mkdir (%s/%s) (path: %s): parent layout "</div><div class='add'>+                   "changed. Attempting a refresh and then a "</div><div class='add'>+                   "retry",</div><div class='add'>+                   pgfid, local-&gt;loc.name, local-&gt;loc.path);</div><div class='add'>+</div><div class='add'>+            stub = fop_mkdir_stub(frame, dht_mkdir_helper, &amp;local-&gt;loc,</div><div class='add'>+                                  local-&gt;mode, local-&gt;umask, local-&gt;params);</div><div class='add'>+            if (stub == NULL) {</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict_del (local-&gt;params, GF_PREOP_PARENT_KEY);</div><div class='del'>-        dict_del (local-&gt;params, conf-&gt;xattr_name);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (dht_is_subvol_filled (this, hashed_subvol))</div><div class='del'>-                ret = dht_layout_merge (this, layout, prev,</div><div class='del'>-                                        -1, ENOSPC, NULL);</div><div class='del'>-        else</div><div class='del'>-                ret = dht_layout_merge (this, layout, prev,</div><div class='del'>-                                        op_ret, op_errno, NULL);</div><div class='add'>+            dht_handle_parent_layout_change(this, stub);</div><div class='add'>+            stub = NULL;</div><div class='add'>+</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict_del(local-&gt;params, GF_PREOP_PARENT_KEY);</div><div class='add'>+    dict_del(local-&gt;params, conf-&gt;xattr_name);</div><div class='add'>+</div><div class='add'>+    if (dht_is_subvol_filled(this, hashed_subvol))</div><div class='add'>+        ret = dht_layout_merge(this, layout, prev, -1, ENOSPC, NULL);</div><div class='add'>+    else</div><div class='add'>+        ret = dht_layout_merge(this, layout, prev, op_ret, op_errno, NULL);</div><div class='add'>+</div><div class='add'>+    /* TODO: we may have to return from the function</div><div class='add'>+       if layout merge fails. For now, lets just log an error */</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='add'>+               "%s: failed to merge layouts for subvol %s", local-&gt;loc.path,</div><div class='add'>+               prev-&gt;name);</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;preparent, preparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='add'>+    /* Delete internal mds xattr from params dict to avoid store</div><div class='add'>+      internal mds xattr on other subvols</div><div class='add'>+    */</div><div class='add'>+    dict_del(local-&gt;params, conf-&gt;mds_xattr_key);</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+</div><div class='add'>+    /* Set hashed subvol as a mds subvol on inode ctx */</div><div class='add'>+    /*if (!local-&gt;inode)</div><div class='add'>+            local-&gt;inode  = inode_ref (inode);</div><div class='add'>+    */</div><div class='add'>+    ret = dht_inode_ctx_mdsvol_set(local-&gt;inode, this, hashed_subvol);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+               "Failed to set hashed subvol for %s on inode vol is %s",</div><div class='add'>+               local-&gt;loc.path, hashed_subvol-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;call_cnt == 0) {</div><div class='add'>+        /*Unlock namespace lock once mkdir is done on all subvols*/</div><div class='add'>+        dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='add'>+        FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+        dht_selfheal_directory(frame, dht_mkdir_selfheal_cbk, &amp;local-&gt;loc,</div><div class='add'>+                               layout);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == hashed_subvol)</div><div class='add'>+            continue;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_mkdir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i], conf-&gt;subvolumes[i]-&gt;fops-&gt;mkdir,</div><div class='add'>+                          &amp;local-&gt;loc, local-&gt;mode, local-&gt;umask,</div><div class='add'>+                          local-&gt;params);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+err:</div><div class='add'>+    if (local-&gt;op_ret != 0) {</div><div class='add'>+        dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: we may have to return from the function</div><div class='del'>-           if layout merge fails. For now, lets just log an error */</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='del'>-                        "%s: failed to merge layouts for subvol %s",</div><div class='del'>-                        local-&gt;loc.path, prev-&gt;name);</div><div class='add'>+    DHT_STACK_UNWIND(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;preparent, preparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+int</div><div class='add'>+dht_mkdir_guard_parent_layout_cbk(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                  loc_t *loc, mode_t mode, mode_t umask,</div><div class='add'>+                                  dict_t *params)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = 0;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t zero[1] = {0};</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='del'>-        /* Delete internal mds xattr from params dict to avoid store</div><div class='del'>-          internal mds xattr on other subvols</div><div class='del'>-        */</div><div class='del'>-        dict_del (local-&gt;params, conf-&gt;mds_xattr_key);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+    gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='ctx'> </div><div class='del'>-        /* Set hashed subvol as a mds subvol on inode ctx */</div><div class='del'>-        /*if (!local-&gt;inode)</div><div class='del'>-                local-&gt;inode  = inode_ref (inode);</div><div class='del'>-        */</div><div class='del'>-        ret = dht_inode_ctx_mdsvol_set (local-&gt;inode, this, hashed_subvol);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                        "Failed to set hashed subvol for %s on inode vol is %s",</div><div class='del'>-                        local-&gt;loc.path, hashed_subvol-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "Acquiring lock on parent to guard against "</div><div class='add'>+               "layout-change failed.",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt == 0) {</div><div class='del'>-                /*Unlock namespace lock once mkdir is done on all subvols*/</div><div class='del'>-                dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='del'>-                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                dht_selfheal_directory (frame, dht_mkdir_selfheal_cbk,</div><div class='del'>-                                        &amp;local-&gt;loc, layout);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    /* Add internal MDS xattr on disk for hashed subvol</div><div class='add'>+     */</div><div class='add'>+    ret = dht_dict_set_array(params, conf-&gt;mds_xattr_key, zero, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value:key = %s for "</div><div class='add'>+               "path %s",</div><div class='add'>+               conf-&gt;mds_xattr_key, loc-&gt;path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] == hashed_subvol)</div><div class='del'>-                        continue;</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_mkdir_cbk, conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;mkdir,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;mode, local-&gt;umask,</div><div class='del'>-                                   local-&gt;params);</div><div class='del'>-        }</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_mkdir_hashed_cbk, local-&gt;hashed_subvol,</div><div class='add'>+                      local-&gt;hashed_subvol, local-&gt;hashed_subvol-&gt;fops-&gt;mkdir,</div><div class='add'>+                      loc, mode, umask, params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (local-&gt;op_ret != 0) {</div><div class='del'>-                dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='del'>-        }</div><div class='add'>+    DHT_STACK_UNWIND(mkdir, frame, -1, local-&gt;op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+dht_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+          mode_t umask, dict_t *params)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = EINVAL, ret = -1;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!params || !dict_get(params, "gfid-req")) {</div><div class='add'>+        op_errno = EPERM;</div><div class='add'>+        gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+                         DHT_MSG_GFID_NULL,</div><div class='add'>+                         "mkdir: %s is received "</div><div class='add'>+                         "without gfid-req %p",</div><div class='add'>+                         loc-&gt;path, params);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_MKDIR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (hashed_subvol == NULL) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "hashed subvol not found for %s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+    local-&gt;mode = mode;</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+    if (params)</div><div class='add'>+        local-&gt;params = dict_ref(params);</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+</div><div class='add'>+    local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='add'>+    if (!local-&gt;layout) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* set the newly created directory hash to the commit hash</div><div class='add'>+     * if the configuration option is set. If configuration option</div><div class='add'>+     * is not set, the older clients may still be connecting to the</div><div class='add'>+     * volume and hence we need to preserve the 1 in disk[0] part of the</div><div class='add'>+     * layout xattr */</div><div class='add'>+    if (conf-&gt;lookup_optimize)</div><div class='add'>+        local-&gt;layout-&gt;commit_hash = conf-&gt;vol_commit_hash;</div><div class='add'>+    else</div><div class='add'>+        local-&gt;layout-&gt;commit_hash = DHT_LAYOUT_HASH_INVALID;</div><div class='add'>+</div><div class='add'>+    stub = fop_mkdir_stub(frame, dht_mkdir_guard_parent_layout_cbk, loc, mode,</div><div class='add'>+                          umask, params);</div><div class='add'>+    if (stub == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "creating stub failed.",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_guard_parent_layout_and_namespace(this, stub);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s) cannot wind lock request to "</div><div class='add'>+               "guard parent layout",</div><div class='add'>+               pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='add'>+err:</div><div class='add'>+    op_errno = local ? local-&gt;op_errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mkdir_guard_parent_layout_cbk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                   loc_t *loc, mode_t mode, mode_t umask,</div><div class='del'>-                                   dict_t *params)</div><div class='add'>+dht_rmdir_selfheal_cbk(call_frame_t *heal_frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                    = NULL;</div><div class='del'>-        dht_conf_t  *conf                     = 0;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int          ret                      = -1;</div><div class='del'>-        int32_t      zero[1]                  = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf  = this-&gt;private;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *heal_local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse (loc-&gt;parent-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "Acquiring lock on parent to guard against "</div><div class='del'>-                        "layout-change failed.", pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        /* Add internal MDS xattr on disk for hashed subvol</div><div class='del'>-        */</div><div class='del'>-        ret = dht_dict_set_array (params, conf-&gt;mds_xattr_key, zero, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value:key = %s for "</div><div class='del'>-                        "path %s", conf-&gt;mds_xattr_key, loc-&gt;path);</div><div class='del'>-        }</div><div class='add'>+    heal_local = heal_frame-&gt;local;</div><div class='add'>+    main_frame = heal_local-&gt;main_frame;</div><div class='add'>+    local = main_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_mkdir_hashed_cbk, local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol-&gt;fops-&gt;mkdir,</div><div class='del'>-                           loc, mode, umask, params);</div><div class='add'>+    DHT_STACK_DESTROY(heal_frame);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-err:</div><div class='del'>-        DHT_STACK_UNWIND (mkdir, frame, -1, local-&gt;op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(rmdir, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_mkdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, mode_t mode, mode_t umask, dict_t *params)</div><div class='add'>+dht_rmdir_hashed_subvol_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int op_ret, int op_errno, struct iatt *preparent,</div><div class='add'>+                            struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                   = NULL;</div><div class='del'>-        dht_conf_t   *conf                    = NULL;</div><div class='del'>-        int           op_errno                = EINVAL, ret = -1;</div><div class='del'>-        xlator_t     *hashed_subvol           = NULL;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        call_stub_t  *stub                    = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse (loc-&gt;parent-&gt;gfid, pgfid);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *heal_local = NULL;</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!params || !dict_get (params, "gfid-req")) {</div><div class='del'>-                op_errno = EPERM;</div><div class='del'>-                gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                                  DHT_MSG_GFID_NULL, "mkdir: %s is received "</div><div class='del'>-                                  "without gfid-req %p", loc-&gt;path, params);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_MKDIR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            if (conf-&gt;subvolume_cnt != 1) {</div><div class='add'>+                if (op_errno != ENOENT &amp;&amp; op_errno != EACCES &amp;&amp;</div><div class='add'>+                    op_errno != ESTALE) {</div><div class='add'>+                    local-&gt;need_selfheal = 1;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (hashed_subvol == NULL) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "hashed subvol not found for %s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "rmdir on %s for %s failed "</div><div class='add'>+                         "(gfid = %s)",</div><div class='add'>+                         prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;preparent, preparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        local-&gt;hashed_subvol = hashed_subvol;</div><div class='del'>-        local-&gt;mode = mode;</div><div class='del'>-        local-&gt;umask = umask;</div><div class='del'>-        if (params)</div><div class='del'>-                local-&gt;params = dict_ref (params);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (local-&gt;need_selfheal) {</div><div class='add'>+            dht_rmdir_unlock(frame, this);</div><div class='add'>+            local-&gt;layout = dht_layout_get(this, local-&gt;loc.inode);</div><div class='ctx'> </div><div class='del'>-        local-&gt;inode  = inode_ref (loc-&gt;inode);</div><div class='add'>+            /* TODO: neater interface needed below */</div><div class='add'>+            local-&gt;stbuf.ia_type = local-&gt;loc.inode-&gt;ia_type;</div><div class='ctx'> </div><div class='del'>-        local-&gt;layout = dht_layout_new (this, conf-&gt;subvolume_cnt);</div><div class='del'>-        if (!local-&gt;layout) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+            gf_uuid_copy(local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        /* set the newly created directory hash to the commit hash</div><div class='del'>-         * if the configuration option is set. If configuration option</div><div class='del'>-         * is not set, the older clients may still be connecting to the</div><div class='del'>-         * volume and hence we need to preserve the 1 in disk[0] part of the</div><div class='del'>-         * layout xattr */</div><div class='del'>-        if (conf-&gt;lookup_optimize)</div><div class='del'>-                local-&gt;layout-&gt;commit_hash = conf-&gt;vol_commit_hash;</div><div class='del'>-        else</div><div class='del'>-                local-&gt;layout-&gt;commit_hash = DHT_LAYOUT_HASH_INVALID;</div><div class='add'>+            /* Use a different frame or else the rmdir op_ret is</div><div class='add'>+             * overwritten by that of the selfheal */</div><div class='ctx'> </div><div class='add'>+            heal_frame = copy_frame(frame);</div><div class='ctx'> </div><div class='del'>-        stub = fop_mkdir_stub (frame, dht_mkdir_guard_parent_layout_cbk, loc,</div><div class='del'>-                               mode, umask, params);</div><div class='del'>-        if (stub == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "creating stub failed.", pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='add'>+            if (heal_frame == NULL) {</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = dht_guard_parent_layout_and_namespace (this, stub);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s) cannot wind lock request to "</div><div class='del'>-                        "guard parent layout", pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+            heal_local = dht_local_init(heal_frame, &amp;local-&gt;loc, NULL, 0);</div><div class='add'>+            if (!heal_local) {</div><div class='add'>+                DHT_STACK_DESTROY(heal_frame);</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>-err:</div><div class='del'>-        op_errno = local ? local-&gt;op_errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+            heal_local-&gt;inode = inode_ref(local-&gt;loc.inode);</div><div class='add'>+            heal_local-&gt;main_frame = frame;</div><div class='add'>+            gf_uuid_copy(heal_local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='add'>+            dht_selfheal_restore(heal_frame, dht_rmdir_selfheal_cbk,</div><div class='add'>+                                 &amp;heal_local-&gt;loc, heal_local-&gt;layout);</div><div class='add'>+            return 0;</div><div class='add'>+        } else {</div><div class='add'>+            if (local-&gt;loc.parent) {</div><div class='add'>+                dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                          &amp;local-&gt;preparent, 0);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_rmdir_selfheal_cbk (call_frame_t *heal_frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_local_t  *heal_local = NULL;</div><div class='del'>-        call_frame_t *main_frame = NULL;</div><div class='add'>+                dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                          &amp;local-&gt;postparent, 1);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        heal_local = heal_frame-&gt;local;</div><div class='del'>-        main_frame = heal_local-&gt;main_frame;</div><div class='del'>-        local = main_frame-&gt;local;</div><div class='add'>+            dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+            dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (heal_frame);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='add'>+            dht_rmdir_unlock(frame, this);</div><div class='add'>+            DHT_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                             &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (rmdir, main_frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+err:</div><div class='add'>+    DHT_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_hashed_subvol_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                             struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_local_t  *heal_local = NULL;</div><div class='del'>-        call_frame_t *heal_frame = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] ={0};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int done = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *heal_local = NULL;</div><div class='add'>+    call_frame_t *heal_frame = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE)) {</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        local-&gt;op_ret   = -1;</div><div class='del'>-                        if (conf-&gt;subvolume_cnt != 1) {</div><div class='del'>-                                if (op_errno != ENOENT &amp;&amp; op_errno != EACCES</div><div class='del'>-                                    &amp;&amp; op_errno != ESTALE) {</div><div class='del'>-                                        local-&gt;need_selfheal = 1;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "rmdir on %s for %s failed "</div><div class='del'>-                                      "(gfid = %s)",</div><div class='del'>-                                      prev-&gt;name, local-&gt;loc.path,</div><div class='del'>-                                      gfid);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+                if (op_errno != EACCES)</div><div class='add'>+                    local-&gt;need_selfheal = 1;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;preparent, preparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+            gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "rmdir on %s for %s failed."</div><div class='add'>+                         "(gfid = %s)",</div><div class='add'>+                         prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        /* Track if rmdir succeeded on at least one subvol*/</div><div class='add'>+        local-&gt;fop_succeeded = 1;</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;preparent, preparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-               if (local-&gt;need_selfheal) {</div><div class='del'>-                        dht_rmdir_unlock (frame, this);</div><div class='del'>-                        local-&gt;layout =</div><div class='del'>-                                dht_layout_get (this, local-&gt;loc.inode);</div><div class='del'>-</div><div class='del'>-                        /* TODO: neater interface needed below */</div><div class='del'>-                        local-&gt;stbuf.ia_type = local-&gt;loc.inode-&gt;ia_type;</div><div class='del'>-</div><div class='del'>-                        gf_uuid_copy (local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                        /* Use a different frame or else the rmdir op_ret is</div><div class='del'>-                         * overwritten by that of the selfheal */</div><div class='del'>-</div><div class='del'>-                        heal_frame = copy_frame (frame);</div><div class='del'>-</div><div class='del'>-                        if (heal_frame == NULL) {</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        heal_local = dht_local_init (heal_frame,</div><div class='del'>-                                                     &amp;local-&gt;loc,</div><div class='del'>-                                                     NULL, 0);</div><div class='del'>-                        if (!heal_local) {</div><div class='del'>-                                DHT_STACK_DESTROY (heal_frame);</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        heal_local-&gt;inode = inode_ref (local-&gt;loc.inode);</div><div class='del'>-                        heal_local-&gt;main_frame = frame;</div><div class='del'>-                        gf_uuid_copy (heal_local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                        dht_selfheal_restore (heal_frame,</div><div class='del'>-                                              dht_rmdir_selfheal_cbk,</div><div class='del'>-                                              &amp;heal_local-&gt;loc,</div><div class='del'>-                                              heal_local-&gt;layout);</div><div class='del'>-                        return 0;</div><div class='del'>-               } else {</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;loc.parent) {</div><div class='del'>-                                dht_inode_ctx_time_update (local-&gt;loc.parent,</div><div class='del'>-                                                           this,</div><div class='del'>-                                                           &amp;local-&gt;preparent,</div><div class='del'>-                                                           0);</div><div class='del'>-</div><div class='del'>-                                dht_inode_ctx_time_update (local-&gt;loc.parent,</div><div class='del'>-                                                           this,</div><div class='del'>-                                                           &amp;local-&gt;postparent,</div><div class='del'>-                                                           1);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-                        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-</div><div class='del'>-                        dht_rmdir_unlock (frame, this);</div><div class='del'>-                        DHT_STACK_UNWIND (rmdir, frame, local-&gt;op_ret,</div><div class='del'>-                                          local-&gt;op_errno, &amp;local-&gt;preparent,</div><div class='del'>-                                          &amp;local-&gt;postparent, NULL);</div><div class='del'>-               }</div><div class='del'>-        }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-err:</div><div class='del'>-        DHT_STACK_UNWIND (rmdir, frame, local-&gt;op_ret,</div><div class='del'>-                          local-&gt;op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    /* if local-&gt;hashed_subvol, we are yet to wind to hashed_subvol. */</div><div class='add'>+    if (local-&gt;hashed_subvol &amp;&amp; (this_call_cnt == 1)) {</div><div class='add'>+        done = 1;</div><div class='add'>+    } else if (!local-&gt;hashed_subvol &amp;&amp; !this_call_cnt) {</div><div class='add'>+        done = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-}</div><div class='add'>+    if (done) {</div><div class='add'>+        if (local-&gt;need_selfheal &amp;&amp; local-&gt;fop_succeeded) {</div><div class='add'>+            dht_rmdir_unlock(frame, this);</div><div class='add'>+            local-&gt;layout = dht_layout_get(this, local-&gt;loc.inode);</div><div class='ctx'> </div><div class='add'>+            /* TODO: neater interface needed below */</div><div class='add'>+            local-&gt;stbuf.ia_type = local-&gt;loc.inode-&gt;ia_type;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-dht_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-               struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           done = 0;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] ={0};</div><div class='del'>-        dht_local_t  *heal_local = NULL;</div><div class='del'>-        call_frame_t *heal_frame = NULL;</div><div class='del'>-        int           ret        = -1;</div><div class='add'>+            gf_uuid_copy(local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='add'>+            heal_frame = copy_frame(frame);</div><div class='add'>+            if (heal_frame == NULL) {</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='add'>+            heal_local = dht_local_init(heal_frame, &amp;local-&gt;loc, NULL, 0);</div><div class='add'>+            if (!heal_local) {</div><div class='add'>+                DHT_STACK_DESTROY(heal_frame);</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            heal_local-&gt;inode = inode_ref(local-&gt;loc.inode);</div><div class='add'>+            heal_local-&gt;main_frame = frame;</div><div class='add'>+            gf_uuid_copy(heal_local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='add'>+            ret = dht_selfheal_restore(heal_frame, dht_rmdir_selfheal_cbk,</div><div class='add'>+                                       &amp;heal_local-&gt;loc, heal_local-&gt;layout);</div><div class='add'>+            if (ret) {</div><div class='add'>+                DHT_STACK_DESTROY(heal_frame);</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        if ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE)) {</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='add'>+        } else if (this_call_cnt) {</div><div class='add'>+            /* If non-hashed subvol's have responded, proceed */</div><div class='add'>+            if (local-&gt;op_ret == 0) {</div><div class='add'>+                /* Delete the dir from the hashed subvol if:</div><div class='add'>+                 * The fop succeeded on at least one subvol</div><div class='add'>+                 *  and did not fail on any</div><div class='add'>+                 *  or</div><div class='add'>+                 *  The fop failed with ENOENT/ESTALE on</div><div class='add'>+                 *  all subvols */</div><div class='add'>+</div><div class='add'>+                STACK_WIND_COOKIE(frame, dht_rmdir_hashed_subvol_cbk,</div><div class='add'>+                                  local-&gt;hashed_subvol, local-&gt;hashed_subvol,</div><div class='add'>+                                  local-&gt;hashed_subvol-&gt;fops-&gt;rmdir,</div><div class='add'>+                                  &amp;local-&gt;loc, local-&gt;flags, NULL);</div><div class='add'>+            } else {</div><div class='add'>+                /* hashed-subvol was non-NULL and rmdir failed on</div><div class='add'>+                 * all non hashed-subvols. Unwind rmdir with</div><div class='add'>+                 * local-&gt;op_ret and local-&gt;op_errno. */</div><div class='add'>+                dht_rmdir_unlock(frame, this);</div><div class='add'>+                DHT_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                                 &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='ctx'> </div><div class='del'>-                                if (op_errno != EACCES)</div><div class='del'>-                                        local-&gt;need_selfheal = 1;</div><div class='del'>-                        }</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='add'>+        } else if (!this_call_cnt) {</div><div class='add'>+            /* All subvol's have responded, proceed */</div><div class='ctx'> </div><div class='del'>-                        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+            if (local-&gt;loc.parent) {</div><div class='add'>+                dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                          &amp;local-&gt;preparent, 0);</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "rmdir on %s for %s failed."</div><div class='del'>-                                      "(gfid = %s)",</div><div class='del'>-                                      prev-&gt;name, local-&gt;loc.path,</div><div class='del'>-                                      gfid);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+                dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                          &amp;local-&gt;postparent, 1);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                /* Track if rmdir succeeded on at least one subvol*/</div><div class='del'>-                local-&gt;fop_succeeded = 1;</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;preparent, preparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='del'>-        }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        /* if local-&gt;hashed_subvol, we are yet to wind to hashed_subvol. */</div><div class='del'>-        if (local-&gt;hashed_subvol &amp;&amp; (this_call_cnt == 1)) {</div><div class='del'>-                done = 1;</div><div class='del'>-        } else if (!local-&gt;hashed_subvol &amp;&amp; !this_call_cnt) {</div><div class='del'>-                done = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (done) {</div><div class='del'>-                if (local-&gt;need_selfheal &amp;&amp; local-&gt;fop_succeeded) {</div><div class='del'>-                        dht_rmdir_unlock (frame, this);</div><div class='del'>-                        local-&gt;layout =</div><div class='del'>-                                dht_layout_get (this, local-&gt;loc.inode);</div><div class='del'>-</div><div class='del'>-                        /* TODO: neater interface needed below */</div><div class='del'>-                        local-&gt;stbuf.ia_type = local-&gt;loc.inode-&gt;ia_type;</div><div class='del'>-</div><div class='del'>-                        gf_uuid_copy (local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='del'>-                        heal_frame = copy_frame (frame);</div><div class='del'>-                        if (heal_frame == NULL) {</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        heal_local = dht_local_init (heal_frame, &amp;local-&gt;loc,</div><div class='del'>-                                                     NULL, 0);</div><div class='del'>-                        if (!heal_local) {</div><div class='del'>-                                DHT_STACK_DESTROY (heal_frame);</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        heal_local-&gt;inode = inode_ref (local-&gt;loc.inode);</div><div class='del'>-                        heal_local-&gt;main_frame = frame;</div><div class='del'>-                        gf_uuid_copy (heal_local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='del'>-                        ret = dht_selfheal_restore (heal_frame,</div><div class='del'>-                                                    dht_rmdir_selfheal_cbk,</div><div class='del'>-                                                    &amp;heal_local-&gt;loc,</div><div class='del'>-                                                    heal_local-&gt;layout);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                DHT_STACK_DESTROY (heal_frame);</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                } else if (this_call_cnt) {</div><div class='del'>-                        /* If non-hashed subvol's have responded, proceed */</div><div class='del'>-                        if (local-&gt;op_ret == 0) {</div><div class='del'>-                                /* Delete the dir from the hashed subvol if:</div><div class='del'>-                                 * The fop succeeded on at least one subvol</div><div class='del'>-                                 *  and did not fail on any</div><div class='del'>-                                 *  or</div><div class='del'>-                                 *  The fop failed with ENOENT/ESTALE on</div><div class='del'>-                                 *  all subvols */</div><div class='del'>-</div><div class='del'>-                                STACK_WIND_COOKIE (frame, dht_rmdir_hashed_subvol_cbk,</div><div class='del'>-                                                   local-&gt;hashed_subvol,</div><div class='del'>-                                                   local-&gt;hashed_subvol,</div><div class='del'>-                                                   local-&gt;hashed_subvol-&gt;fops-&gt;rmdir,</div><div class='del'>-                                                   &amp;local-&gt;loc, local-&gt;flags, NULL);</div><div class='del'>-                        } else {</div><div class='del'>-                         /* hashed-subvol was non-NULL and rmdir failed on</div><div class='del'>-                          * all non hashed-subvols. Unwind rmdir with</div><div class='del'>-                          * local-&gt;op_ret and local-&gt;op_errno. */</div><div class='del'>-                                dht_rmdir_unlock (frame, this);</div><div class='del'>-                                DHT_STACK_UNWIND (rmdir, frame, local-&gt;op_ret,</div><div class='del'>-                                          local-&gt;op_errno, &amp;local-&gt;preparent,</div><div class='del'>-                                          &amp;local-&gt;postparent, NULL);</div><div class='del'>-</div><div class='del'>-                                return 0;</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                } else if (!this_call_cnt) {</div><div class='del'>-                        /* All subvol's have responded, proceed */</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;loc.parent) {</div><div class='del'>-</div><div class='del'>-                                dht_inode_ctx_time_update (local-&gt;loc.parent,</div><div class='del'>-                                                           this,</div><div class='del'>-                                                           &amp;local-&gt;preparent,</div><div class='del'>-                                                           0);</div><div class='del'>-</div><div class='del'>-                                dht_inode_ctx_time_update (local-&gt;loc.parent,</div><div class='del'>-                                                           this,</div><div class='del'>-                                                           &amp;local-&gt;postparent,</div><div class='del'>-                                                           1);</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-                        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-</div><div class='del'>-                        dht_rmdir_unlock (frame, this);</div><div class='del'>-                        DHT_STACK_UNWIND (rmdir, frame, local-&gt;op_ret,</div><div class='del'>-                                          local-&gt;op_errno, &amp;local-&gt;preparent,</div><div class='del'>-                                          &amp;local-&gt;postparent, NULL);</div><div class='del'>-                }</div><div class='add'>+            dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+            dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+</div><div class='add'>+            dht_rmdir_unlock(frame, this);</div><div class='add'>+            DHT_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                             &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (rmdir, frame, -1, local-&gt;op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    DHT_STACK_UNWIND(rmdir, frame, -1, local-&gt;op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_rmdir_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rmdir_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local      = NULL, *lock_local = NULL;</div><div class='del'>-        call_frame_t *lock_frame = NULL;</div><div class='del'>-        int           lock_count = 0;</div><div class='add'>+    dht_local_t *local = NULL, *lock_local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    int lock_count = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        /* Unlock entrylk */</div><div class='del'>-        dht_unlock_entrylk_wrapper (frame, &amp;local-&gt;lock[0].ns.directory_ns);</div><div class='add'>+    /* Unlock entrylk */</div><div class='add'>+    dht_unlock_entrylk_wrapper(frame, &amp;local-&gt;lock[0].ns.directory_ns);</div><div class='ctx'> </div><div class='del'>-        /* Unlock inodelk */</div><div class='del'>-        lock_count = dht_lock_count (local-&gt;lock[0].ns.parent_layout.locks,</div><div class='del'>-                                     local-&gt;lock[0].ns.parent_layout.lk_count);</div><div class='add'>+    /* Unlock inodelk */</div><div class='add'>+    lock_count = dht_lock_count(local-&gt;lock[0].ns.parent_layout.locks,</div><div class='add'>+                                local-&gt;lock[0].ns.parent_layout.lk_count);</div><div class='ctx'> </div><div class='del'>-        if (lock_count == 0)</div><div class='del'>-                goto done;</div><div class='add'>+    if (lock_count == 0)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        lock_frame = copy_frame (frame);</div><div class='del'>-        if (lock_frame == NULL)</div><div class='del'>-                goto done;</div><div class='add'>+    lock_frame = copy_frame(frame);</div><div class='add'>+    if (lock_frame == NULL)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        lock_local = dht_local_init (lock_frame, &amp;local-&gt;loc, NULL,</div><div class='del'>-                                     lock_frame-&gt;root-&gt;op);</div><div class='del'>-        if (lock_local == NULL)</div><div class='del'>-                goto done;</div><div class='add'>+    lock_local = dht_local_init(lock_frame, &amp;local-&gt;loc, NULL,</div><div class='add'>+                                lock_frame-&gt;root-&gt;op);</div><div class='add'>+    if (lock_local == NULL)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        lock_local-&gt;lock[0].ns.parent_layout.locks = local-&gt;lock[0].ns.parent_layout.locks;</div><div class='del'>-        lock_local-&gt;lock[0].ns.parent_layout.lk_count = local-&gt;lock[0].ns.parent_layout.lk_count;</div><div class='add'>+    lock_local-&gt;lock[0].ns.parent_layout.locks = local-&gt;lock[0]</div><div class='add'>+                                                     .ns.parent_layout.locks;</div><div class='add'>+    lock_local-&gt;lock[0]</div><div class='add'>+        .ns.parent_layout.lk_count = local-&gt;lock[0].ns.parent_layout.lk_count;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].ns.parent_layout.locks = NULL;</div><div class='del'>-        local-&gt;lock[0].ns.parent_layout.lk_count = 0;</div><div class='del'>-        dht_unlock_inodelk (lock_frame,</div><div class='del'>-                            lock_local-&gt;lock[0].ns.parent_layout.locks,</div><div class='del'>-                            lock_local-&gt;lock[0].ns.parent_layout.lk_count,</div><div class='del'>-                            dht_rmdir_unlock_cbk);</div><div class='del'>-        lock_frame = NULL;</div><div class='add'>+    local-&gt;lock[0].ns.parent_layout.locks = NULL;</div><div class='add'>+    local-&gt;lock[0].ns.parent_layout.lk_count = 0;</div><div class='add'>+    dht_unlock_inodelk(lock_frame, lock_local-&gt;lock[0].ns.parent_layout.locks,</div><div class='add'>+                       lock_local-&gt;lock[0].ns.parent_layout.lk_count,</div><div class='add'>+                       dht_rmdir_unlock_cbk);</div><div class='add'>+    lock_frame = NULL;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame != NULL) {</div><div class='del'>-                DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    if (lock_frame != NULL) {</div><div class='add'>+        DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_rmdir_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_conf_t   *conf  = NULL;</div><div class='del'>-        int           i     = 0;</div><div class='del'>-        xlator_t     *hashed_subvol;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *hashed_subvol;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "acquiring entrylk after inodelk failed rmdir for %s)",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "acquiring entrylk after inodelk failed rmdir for %s)",</div><div class='add'>+               local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = local-&gt;hashed_subvol;</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (hashed_subvol &amp;&amp;</div><div class='del'>-                    (hashed_subvol == conf-&gt;subvolumes[i]))</div><div class='del'>-                        continue;</div><div class='add'>+    hashed_subvol = local-&gt;hashed_subvol;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (hashed_subvol &amp;&amp; (hashed_subvol == conf-&gt;subvolumes[i]))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rmdir_cbk, conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;rmdir,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;flags, NULL);</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rmdir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i], conf-&gt;subvolumes[i]-&gt;fops-&gt;rmdir,</div><div class='add'>+                          &amp;local-&gt;loc, local-&gt;flags, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_do (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rmdir_do(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] ={0};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='ctx'> </div><div class='del'>-        /* first remove from non-hashed_subvol */</div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, &amp;local-&gt;loc);</div><div class='add'>+    /* first remove from non-hashed_subvol */</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (!hashed_subvol) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+    if (!hashed_subvol) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                        "Failed to get hashed subvol for %s (gfid = %s)",</div><div class='del'>-                        local-&gt;loc.path, gfid);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;hashed_subvol = hashed_subvol;</div><div class='del'>-        }</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "Failed to get hashed subvol for %s (gfid = %s)",</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* When DHT has only 1 child */</div><div class='del'>-        if (conf-&gt;subvolume_cnt == 1) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rmdir_hashed_subvol_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[0], conf-&gt;subvolumes[0],</div><div class='del'>-                                   conf-&gt;subvolumes[0]-&gt;fops-&gt;rmdir,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;flags, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* When DHT has only 1 child */</div><div class='add'>+    if (conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rmdir_hashed_subvol_cbk,</div><div class='add'>+                          conf-&gt;subvolumes[0], conf-&gt;subvolumes[0],</div><div class='add'>+                          conf-&gt;subvolumes[0]-&gt;fops-&gt;rmdir, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;flags, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-        ret = dht_protect_namespace (frame, &amp;local-&gt;loc, local-&gt;hashed_subvol,</div><div class='del'>-                                     &amp;local-&gt;current-&gt;ns, dht_rmdir_lock_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = errno ? errno : EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+    ret = dht_protect_namespace(frame, &amp;local-&gt;loc, local-&gt;hashed_subvol,</div><div class='add'>+                                &amp;local-&gt;current-&gt;ns, dht_rmdir_lock_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = errno ? errno : EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_linkfile_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                               int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                               struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_rmdir_linkfile_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                              int op_ret, int op_errno, struct iatt *preparent,</div><div class='add'>+                              struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t    *local = NULL;</div><div class='del'>-        xlator_t       *prev = NULL;</div><div class='del'>-        xlator_t       *src = NULL;</div><div class='del'>-        call_frame_t   *readdirp_frame = NULL;</div><div class='del'>-        dht_local_t    *readdirp_local = NULL;</div><div class='del'>-        int             this_call_cnt = 0;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] ={0};</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *src = NULL;</div><div class='add'>+    call_frame_t *readdirp_frame = NULL;</div><div class='add'>+    dht_local_t *readdirp_local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        prev   = cookie;</div><div class='del'>-        src    = prev;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    src = prev;</div><div class='ctx'> </div><div class='add'>+    readdirp_frame = local-&gt;main_frame;</div><div class='add'>+    readdirp_local = readdirp_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        readdirp_frame = local-&gt;main_frame;</div><div class='del'>-        readdirp_local = readdirp_frame-&gt;local;</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "Unlinked linkfile %s on %s, gfid = %s",</div><div class='del'>-                              local-&gt;loc.path, src-&gt;name, gfid);</div><div class='del'>-        } else {</div><div class='del'>-                if (op_errno != ENOENT) {</div><div class='del'>-                        readdirp_local-&gt;op_ret   = -1;</div><div class='del'>-                        readdirp_local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "Unlink of %s on %s failed. (gfid = %s)",</div><div class='del'>-                              local-&gt;loc.path, src-&gt;name, gfid);</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Unlinked linkfile %s on %s, gfid = %s",</div><div class='add'>+                     local-&gt;loc.path, src-&gt;name, gfid);</div><div class='add'>+    } else {</div><div class='add'>+        if (op_errno != ENOENT) {</div><div class='add'>+            readdirp_local-&gt;op_ret = -1;</div><div class='add'>+            readdirp_local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                     "Unlink of %s on %s failed. (gfid = %s)", local-&gt;loc.path,</div><div class='add'>+                     src-&gt;name, gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (readdirp_frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(readdirp_frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                dht_rmdir_readdirp_do (readdirp_frame, this);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        dht_rmdir_readdirp_do(readdirp_frame, this);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                      struct iatt *stbuf, dict_t *xattr, struct iatt *parent)</div><div class='add'>+dht_rmdir_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                     struct iatt *stbuf, dict_t *xattr, struct iatt *parent)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t    *local = NULL;</div><div class='del'>-        xlator_t       *prev = NULL;</div><div class='del'>-        xlator_t       *src = NULL;</div><div class='del'>-        call_frame_t   *readdirp_frame = NULL;</div><div class='del'>-        dht_local_t    *readdirp_local = NULL;</div><div class='del'>-        int             this_call_cnt = 0;</div><div class='del'>-        dht_conf_t     *conf = this-&gt;private;</div><div class='del'>-        char               gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *src = NULL;</div><div class='add'>+    call_frame_t *readdirp_frame = NULL;</div><div class='add'>+    dht_local_t *readdirp_local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        src   = prev;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    src = prev;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "dht_rmdir_lookup_cbk %s",</div><div class='del'>-                      local-&gt;loc.path);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "dht_rmdir_lookup_cbk %s", local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-        readdirp_frame = local-&gt;main_frame;</div><div class='del'>-        readdirp_local = readdirp_frame-&gt;local;</div><div class='add'>+    readdirp_frame = local-&gt;main_frame;</div><div class='add'>+    readdirp_local = readdirp_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != 0) {</div><div class='add'>+    if (op_ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_FILE_LOOKUP_FAILED,</div><div class='add'>+               "lookup failed for %s on %s  (type=0%o)", local-&gt;loc.path,</div><div class='add'>+               src-&gt;name, stbuf-&gt;ia_type);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_FILE_LOOKUP_FAILED,</div><div class='del'>-                        "lookup failed for %s on %s  (type=0%o)",</div><div class='del'>-                        local-&gt;loc.path, src-&gt;name, stbuf-&gt;ia_type);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!check_is_linkfile (inode, stbuf, xattr, conf-&gt;link_xattr_name)) {</div><div class='del'>-                readdirp_local-&gt;op_ret  = -1;</div><div class='del'>-                readdirp_local-&gt;op_errno = ENOTEMPTY;</div><div class='add'>+    if (!check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name)) {</div><div class='add'>+        readdirp_local-&gt;op_ret = -1;</div><div class='add'>+        readdirp_local-&gt;op_errno = ENOTEMPTY;</div><div class='ctx'> </div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_NOT_LINK_FILE_ERROR,</div><div class='del'>-                        "%s on %s is not a linkfile (type=0%o, gfid = %s)",</div><div class='del'>-                        local-&gt;loc.path, src-&gt;name, stbuf-&gt;ia_type, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_NOT_LINK_FILE_ERROR,</div><div class='add'>+               "%s on %s is not a linkfile (type=0%o, gfid = %s)",</div><div class='add'>+               local-&gt;loc.path, src-&gt;name, stbuf-&gt;ia_type, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_rmdir_linkfile_unlink_cbk, src,</div><div class='del'>-                           src, src-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_rmdir_linkfile_unlink_cbk, src, src,</div><div class='add'>+                      src-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (readdirp_frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_rmdir_readdirp_do (readdirp_frame, this);</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(readdirp_frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_rmdir_readdirp_do(readdirp_frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_cached_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                             struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                             struct iatt *parent)</div><div class='add'>+dht_rmdir_cached_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                            struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                            struct iatt *parent)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t    *local             = NULL;</div><div class='del'>-        xlator_t       *src               = NULL;</div><div class='del'>-        call_frame_t   *readdirp_frame    = NULL;</div><div class='del'>-        dht_local_t    *readdirp_local    = NULL;</div><div class='del'>-        int             this_call_cnt     = 0;</div><div class='del'>-        dht_conf_t     *conf              = this-&gt;private;</div><div class='del'>-        dict_t         *xattrs            = NULL;</div><div class='del'>-        int             ret               = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *src = NULL;</div><div class='add'>+    call_frame_t *readdirp_frame = NULL;</div><div class='add'>+    dht_local_t *readdirp_local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        src   = local-&gt;hashed_subvol;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    src = local-&gt;hashed_subvol;</div><div class='ctx'> </div><div class='add'>+    /* main_frame here is the readdirp_frame */</div><div class='ctx'> </div><div class='del'>-        /* main_frame here is the readdirp_frame */</div><div class='add'>+    readdirp_frame = local-&gt;main_frame;</div><div class='add'>+    readdirp_local = readdirp_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        readdirp_frame = local-&gt;main_frame;</div><div class='del'>-        readdirp_local = readdirp_frame-&gt;local;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "returning for %s ", local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "returning for %s ",</div><div class='del'>-                      local-&gt;loc.path);</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        readdirp_local-&gt;op_ret = -1;</div><div class='add'>+        readdirp_local-&gt;op_errno = ENOTEMPTY;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                readdirp_local-&gt;op_ret  = -1;</div><div class='del'>-                readdirp_local-&gt;op_errno = ENOTEMPTY;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_SUBVOL_ERROR,</div><div class='add'>+               "%s found on cached subvol %s", local-&gt;loc.path, src-&gt;name);</div><div class='add'>+        goto err;</div><div class='add'>+    } else if (op_errno != ENOENT) {</div><div class='add'>+        readdirp_local-&gt;op_ret = -1;</div><div class='add'>+        readdirp_local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_ERROR,</div><div class='del'>-                        "%s found on cached subvol %s",</div><div class='del'>-                        local-&gt;loc.path, src-&gt;name);</div><div class='del'>-                goto err;</div><div class='del'>-        } else if (op_errno != ENOENT) {</div><div class='del'>-                readdirp_local-&gt;op_ret  = -1;</div><div class='del'>-                readdirp_local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_SUBVOL_ERROR,</div><div class='del'>-                        "%s not found on cached subvol %s",</div><div class='del'>-                        local-&gt;loc.path, src-&gt;name);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_SUBVOL_ERROR,</div><div class='add'>+               "%s not found on cached subvol %s", local-&gt;loc.path, src-&gt;name);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xattrs = dict_new ();</div><div class='del'>-        if (!xattrs) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_NO_MEMORY, "dict_new failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xattrs = dict_new();</div><div class='add'>+    if (!xattrs) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "dict_new failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (xattrs, conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value: key = %s",</div><div class='del'>-                        conf-&gt;link_xattr_name);</div><div class='del'>-                if (xattrs)</div><div class='del'>-                        dict_unref (xattrs);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_rmdir_lookup_cbk, src, src,</div><div class='del'>-                           src-&gt;fops-&gt;lookup, &amp;local-&gt;loc, xattrs);</div><div class='add'>+    ret = dict_set_uint32(xattrs, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value: key = %s",</div><div class='add'>+               conf-&gt;link_xattr_name);</div><div class='ctx'>         if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+            dict_unref(xattrs);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_rmdir_lookup_cbk, src, src, src-&gt;fops-&gt;lookup,</div><div class='add'>+                      &amp;local-&gt;loc, xattrs);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (readdirp_frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(readdirp_frame);</div><div class='ctx'> </div><div class='del'>-        /* Once all the lookups/unlinks etc have returned, proceed to wind</div><div class='del'>-         * readdirp on the subvol again until no entries are returned.</div><div class='del'>-         * This is required if there are more entries than can be returned</div><div class='del'>-         * in a single readdirp call.</div><div class='del'>-         */</div><div class='add'>+    /* Once all the lookups/unlinks etc have returned, proceed to wind</div><div class='add'>+     * readdirp on the subvol again until no entries are returned.</div><div class='add'>+     * This is required if there are more entries than can be returned</div><div class='add'>+     * in a single readdirp call.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                dht_rmdir_readdirp_do (readdirp_frame, this);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        dht_rmdir_readdirp_do(readdirp_frame, this);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_is_subvol_empty (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                           gf_dirent_t *entries, xlator_t *src)</div><div class='add'>+dht_rmdir_is_subvol_empty(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                          gf_dirent_t *entries, xlator_t *src)</div><div class='ctx'> {</div><div class='del'>-        int                 ret          = 0;</div><div class='del'>-        int                 build_ret    = 0;</div><div class='del'>-        gf_dirent_t        *trav         = NULL;</div><div class='del'>-        call_frame_t       *lookup_frame = NULL;</div><div class='del'>-        dht_local_t        *lookup_local = NULL;</div><div class='del'>-        dht_local_t        *local        = NULL;</div><div class='del'>-        dict_t             *xattrs       = NULL;</div><div class='del'>-        dht_conf_t         *conf         = this-&gt;private;</div><div class='del'>-        xlator_t           *subvol       = NULL;</div><div class='del'>-        char                gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int                 count        = 0;</div><div class='del'>-        gf_boolean_t        unwind        = _gf_false;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int build_ret = 0;</div><div class='add'>+    gf_dirent_t *trav = NULL;</div><div class='add'>+    call_frame_t *lookup_frame = NULL;</div><div class='add'>+    dht_local_t *lookup_local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int count = 0;</div><div class='add'>+    gf_boolean_t unwind = _gf_false;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav, &amp;entries-&gt;list, list) {</div><div class='del'>-                if (strcmp (trav-&gt;d_name, ".") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if (strcmp (trav-&gt;d_name, "..") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if (check_is_linkfile (NULL, (&amp;trav-&gt;d_stat), trav-&gt;dict,</div><div class='del'>-                                              conf-&gt;link_xattr_name)) {</div><div class='del'>-                        count++;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                /* this entry is either a directory which is neither "." nor "..",</div><div class='del'>-                   or a non directory which is not a linkfile. the directory is to</div><div class='del'>-                   be treated as non-empty</div><div class='del'>-                */</div><div class='del'>-                return 0;</div><div class='add'>+    list_for_each_entry(trav, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if (strcmp(trav-&gt;d_name, ".") == 0)</div><div class='add'>+            continue;</div><div class='add'>+        if (strcmp(trav-&gt;d_name, "..") == 0)</div><div class='add'>+            continue;</div><div class='add'>+        if (check_is_linkfile(NULL, (&amp;trav-&gt;d_stat), trav-&gt;dict,</div><div class='add'>+                              conf-&gt;link_xattr_name)) {</div><div class='add'>+            count++;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        xattrs = dict_new ();</div><div class='del'>-        if (!xattrs) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_NO_MEMORY, "dict_new failed");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+        /* this entry is either a directory which is neither "." nor "..",</div><div class='add'>+           or a non directory which is not a linkfile. the directory is to</div><div class='add'>+           be treated as non-empty</div><div class='add'>+        */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (xattrs, conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value: key = %s",</div><div class='del'>-                        conf-&gt;link_xattr_name);</div><div class='add'>+    xattrs = dict_new();</div><div class='add'>+    if (!xattrs) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "dict_new failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (xattrs)</div><div class='del'>-                        dict_unref (xattrs);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_uint32(xattrs, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value: key = %s",</div><div class='add'>+               conf-&gt;link_xattr_name);</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = count;</div><div class='del'>-        ret = 0;</div><div class='add'>+        if (xattrs)</div><div class='add'>+            dict_unref(xattrs);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav, &amp;entries-&gt;list, list) {</div><div class='del'>-                if (strcmp (trav-&gt;d_name, ".") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                if (strcmp (trav-&gt;d_name, "..") == 0)</div><div class='del'>-                        continue;</div><div class='add'>+    local-&gt;call_cnt = count;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-                lookup_frame = copy_frame (frame);</div><div class='add'>+    list_for_each_entry(trav, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if (strcmp(trav-&gt;d_name, ".") == 0)</div><div class='add'>+            continue;</div><div class='add'>+        if (strcmp(trav-&gt;d_name, "..") == 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!lookup_frame) {</div><div class='del'>-                        /* out of memory, let the rmdir fail</div><div class='del'>-                           (as non-empty, unfortunately) */</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        lookup_frame = copy_frame(frame);</div><div class='ctx'> </div><div class='del'>-                lookup_local = dht_local_init (lookup_frame, NULL, NULL,</div><div class='del'>-                                               GF_FOP_LOOKUP);</div><div class='del'>-                if (!lookup_local) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        if (!lookup_frame) {</div><div class='add'>+            /* out of memory, let the rmdir fail</div><div class='add'>+               (as non-empty, unfortunately) */</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                lookup_frame-&gt;local = lookup_local;</div><div class='del'>-                lookup_local-&gt;main_frame = frame;</div><div class='del'>-                lookup_local-&gt;hashed_subvol = src;</div><div class='add'>+        lookup_local = dht_local_init(lookup_frame, NULL, NULL, GF_FOP_LOOKUP);</div><div class='add'>+        if (!lookup_local) {</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                build_ret = dht_build_child_loc (this, &amp;lookup_local-&gt;loc,</div><div class='del'>-                                                 &amp;local-&gt;loc, trav-&gt;d_name);</div><div class='del'>-                if (build_ret != 0)</div><div class='del'>-                        goto err;</div><div class='add'>+        lookup_frame-&gt;local = lookup_local;</div><div class='add'>+        lookup_local-&gt;main_frame = frame;</div><div class='add'>+        lookup_local-&gt;hashed_subvol = src;</div><div class='ctx'> </div><div class='del'>-                gf_uuid_copy (lookup_local-&gt;loc.gfid, trav-&gt;d_stat.ia_gfid);</div><div class='add'>+        build_ret = dht_build_child_loc(this, &amp;lookup_local-&gt;loc, &amp;local-&gt;loc,</div><div class='add'>+                                        trav-&gt;d_name);</div><div class='add'>+        if (build_ret != 0)</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-                gf_uuid_unparse(lookup_local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_uuid_copy(lookup_local-&gt;loc.gfid, trav-&gt;d_stat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "looking up %s on subvolume %s, gfid = %s",</div><div class='del'>-                              lookup_local-&gt;loc.path, src-&gt;name, gfid);</div><div class='add'>+        gf_uuid_unparse(lookup_local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-                subvol = dht_linkfile_subvol (this, NULL, &amp;trav-&gt;d_stat,</div><div class='del'>-                                              trav-&gt;dict);</div><div class='del'>-                if (!subvol) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "looking up %s on subvolume %s, gfid = %s",</div><div class='add'>+                     lookup_local-&gt;loc.path, src-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_INVALID_LINKFILE,</div><div class='del'>-                                "Linkfile does not have link subvolume. "</div><div class='del'>-                                "path = %s, gfid = %s",</div><div class='del'>-                                lookup_local-&gt;loc.path, gfid);</div><div class='add'>+        subvol = dht_linkfile_subvol(this, NULL, &amp;trav-&gt;d_stat, trav-&gt;dict);</div><div class='add'>+        if (!subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_INVALID_LINKFILE,</div><div class='add'>+                   "Linkfile does not have link subvolume. "</div><div class='add'>+                   "path = %s, gfid = %s",</div><div class='add'>+                   lookup_local-&gt;loc.path, gfid);</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "looking up %s on subvol %s, gfid = %s",</div><div class='del'>-                                      lookup_local-&gt;loc.path, src-&gt;name, gfid);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "looking up %s on subvol %s, gfid = %s",</div><div class='add'>+                         lookup_local-&gt;loc.path, src-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-                        STACK_WIND_COOKIE (lookup_frame, dht_rmdir_lookup_cbk,</div><div class='del'>-                                           src, src, src-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;lookup_local-&gt;loc, xattrs);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Looking up linkfile target %s on "</div><div class='del'>-                                      " subvol %s, gfid = %s",</div><div class='del'>-                                      lookup_local-&gt;loc.path, subvol-&gt;name,</div><div class='del'>-                                      gfid);</div><div class='del'>-</div><div class='del'>-                        STACK_WIND (lookup_frame, dht_rmdir_cached_lookup_cbk,</div><div class='del'>-                                    subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                    &amp;lookup_local-&gt;loc, xattrs);</div><div class='del'>-                }</div><div class='del'>-                ret++;</div><div class='add'>+            STACK_WIND_COOKIE(lookup_frame, dht_rmdir_lookup_cbk, src, src,</div><div class='add'>+                              src-&gt;fops-&gt;lookup, &amp;lookup_local-&gt;loc, xattrs);</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Looking up linkfile target %s on "</div><div class='add'>+                         " subvol %s, gfid = %s",</div><div class='add'>+                         lookup_local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-                lookup_frame = NULL;</div><div class='del'>-                lookup_local = NULL;</div><div class='add'>+            STACK_WIND(lookup_frame, dht_rmdir_cached_lookup_cbk, subvol,</div><div class='add'>+                       subvol-&gt;fops-&gt;lookup, &amp;lookup_local-&gt;loc, xattrs);</div><div class='ctx'>         }</div><div class='add'>+        ret++;</div><div class='ctx'> </div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='add'>+        lookup_frame = NULL;</div><div class='add'>+        lookup_local = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> err:</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='ctx'> </div><div class='del'>-        if (lookup_frame)</div><div class='del'>-                DHT_STACK_DESTROY (lookup_frame);</div><div class='add'>+    if (lookup_frame)</div><div class='add'>+        DHT_STACK_DESTROY(lookup_frame);</div><div class='ctx'> </div><div class='del'>-        /* Handle the case where the wound calls have unwound before the</div><div class='del'>-         * loop processing is done</div><div class='del'>-         */</div><div class='add'>+    /* Handle the case where the wound calls have unwound before the</div><div class='add'>+     * loop processing is done</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOTEMPTY;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTEMPTY;</div><div class='ctx'> </div><div class='del'>-                local-&gt;call_cnt -= (count - ret);</div><div class='del'>-                if (!local-&gt;call_cnt)</div><div class='del'>-                        unwind = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        local-&gt;call_cnt -= (count - ret);</div><div class='add'>+        if (!local-&gt;call_cnt)</div><div class='add'>+            unwind = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!unwind) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (!unwind) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * No more entries on this subvol. Proceed to the actual rmdir operation.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_rmdir_readdirp_done (call_frame_t *readdirp_frame, xlator_t *this)</div><div class='add'>+dht_rmdir_readdirp_done(call_frame_t *readdirp_frame, xlator_t *this)</div><div class='ctx'> {</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    dht_local_t *main_local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        call_frame_t      *main_frame    = NULL;</div><div class='del'>-        dht_local_t       *main_local         = NULL;</div><div class='del'>-        dht_local_t       *local         = NULL;</div><div class='del'>-        int                this_call_cnt = 0;</div><div class='del'>-</div><div class='add'>+    local = readdirp_frame-&gt;local;</div><div class='add'>+    main_frame = local-&gt;main_frame;</div><div class='add'>+    main_local = main_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local = readdirp_frame-&gt;local;</div><div class='del'>-        main_frame = local-&gt;main_frame;</div><div class='del'>-        main_local = main_frame-&gt;local;</div><div class='add'>+    /* At least one readdirp failed.</div><div class='add'>+     * This is a bit hit or miss - if readdirp failed on more than</div><div class='add'>+     * one subvol, we don't know which error is returned.</div><div class='add'>+     */</div><div class='add'>+    if (local-&gt;op_ret == -1) {</div><div class='add'>+        main_local-&gt;op_ret = local-&gt;op_ret;</div><div class='add'>+        main_local-&gt;op_errno = local-&gt;op_errno;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* At least one readdirp failed.</div><div class='del'>-         * This is a bit hit or miss - if readdirp failed on more than</div><div class='del'>-         * one subvol, we don't know which error is returned.</div><div class='del'>-         */</div><div class='del'>-        if (local-&gt;op_ret == -1) {</div><div class='del'>-                main_local-&gt;op_ret = local-&gt;op_ret;</div><div class='del'>-                main_local-&gt;op_errno = local-&gt;op_errno;</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(main_frame);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (main_frame);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        dht_rmdir_do(main_frame, this);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt))</div><div class='del'>-                dht_rmdir_do (main_frame, this);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        DHT_STACK_DESTROY (readdirp_frame);</div><div class='add'>+    DHT_STACK_DESTROY(readdirp_frame);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+dht_rmdir_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        xlator_t     *src = NULL;</div><div class='del'>-        int           ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *src = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    src = prev;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        src   = prev;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt; 2) {</div><div class='del'>-                ret = dht_rmdir_is_subvol_empty (frame, this, entries, src);</div><div class='del'>-</div><div class='del'>-                switch (ret) {</div><div class='del'>-                case 0: /* non linkfiles exist */</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "readdir on %s for %s returned %d "</div><div class='del'>-                                      "entries", prev-&gt;name,</div><div class='del'>-                                      local-&gt;loc.path, op_ret);</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOTEMPTY;</div><div class='del'>-                        goto done;</div><div class='del'>-                default:</div><div class='del'>-                        /* @ret number of linkfiles are getting unlinked */</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "readdir on %s for %s found %d "</div><div class='del'>-                                      "linkfiles", prev-&gt;name,</div><div class='del'>-                                      local-&gt;loc.path, ret);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (op_ret &gt; 2) {</div><div class='add'>+        ret = dht_rmdir_is_subvol_empty(frame, this, entries, src);</div><div class='ctx'> </div><div class='add'>+        switch (ret) {</div><div class='add'>+            case 0: /* non linkfiles exist */</div><div class='add'>+                gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                             "readdir on %s for %s returned %d "</div><div class='add'>+                             "entries",</div><div class='add'>+                             prev-&gt;name, local-&gt;loc.path, op_ret);</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = ENOTEMPTY;</div><div class='add'>+                goto done;</div><div class='add'>+            default:</div><div class='add'>+                /* @ret number of linkfiles are getting unlinked */</div><div class='add'>+                gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                             "readdir on %s for %s found %d "</div><div class='add'>+                             "linkfiles",</div><div class='add'>+                             prev-&gt;name, local-&gt;loc.path, ret);</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        /* readdirp failed or no linkto files were found on this subvol */</div><div class='add'>+    /* readdirp failed or no linkto files were found on this subvol */</div><div class='ctx'> </div><div class='del'>-        dht_rmdir_readdirp_done (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rmdir_readdirp_done(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Keep sending readdirp on the subvol until it returns no more entries</div><div class='hunk'>@@ -10746,214 +10095,202 @@ done:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rmdir_readdirp_do (call_frame_t *readdirp_frame, xlator_t *this)</div><div class='add'>+dht_rmdir_readdirp_do(call_frame_t *readdirp_frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local  = NULL;</div><div class='del'>-</div><div class='del'>-        local = readdirp_frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op_ret == -1) {</div><div class='del'>-                /* there is no point doing another readdirp on this</div><div class='del'>-                 * subvol . */</div><div class='del'>-                dht_rmdir_readdirp_done (readdirp_frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (readdirp_frame, dht_rmdir_readdirp_cbk,</div><div class='del'>-                           local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol-&gt;fops-&gt;readdirp,</div><div class='del'>-                           local-&gt;fd, 4096, 0, local-&gt;xattr);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='add'>+    local = readdirp_frame-&gt;local;</div><div class='ctx'> </div><div class='add'>+    if (local-&gt;op_ret == -1) {</div><div class='add'>+        /* there is no point doing another readdirp on this</div><div class='add'>+         * subvol . */</div><div class='add'>+        dht_rmdir_readdirp_done(readdirp_frame, this);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-}</div><div class='add'>+    STACK_WIND_COOKIE(readdirp_frame, dht_rmdir_readdirp_cbk,</div><div class='add'>+                      local-&gt;hashed_subvol, local-&gt;hashed_subvol,</div><div class='add'>+                      local-&gt;hashed_subvol-&gt;fops-&gt;readdirp, local-&gt;fd, 4096, 0,</div><div class='add'>+                      local-&gt;xattr);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rmdir_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_rmdir_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        int           this_call_cnt = -1;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        dht_conf_t   *conf          = this-&gt;private;</div><div class='del'>-        dict_t       *dict          = NULL;</div><div class='del'>-        int           i             = 0;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        dht_local_t  *readdirp_local = NULL;</div><div class='del'>-        call_frame_t *readdirp_frame = NULL;</div><div class='del'>-        int           cnt           = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = -1;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *readdirp_local = NULL;</div><div class='add'>+    call_frame_t *readdirp_frame = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "opendir on %s for %s failed, "</div><div class='del'>-                              "gfid = %s,",</div><div class='del'>-                              prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='del'>-                if ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE)) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='del'>-                goto err;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                     "opendir on %s for %s failed, "</div><div class='add'>+                     "gfid = %s,",</div><div class='add'>+                     prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='add'>+        if ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE)) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!is_last_call (this_call_cnt))</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        fd_bind (fd);</div><div class='add'>+    if (!is_last_call(this_call_cnt))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (dict, conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Failed to set dictionary value:key = %s",</div><div class='del'>-                        local-&gt;loc.path, conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-        cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    fd_bind(fd);</div><div class='ctx'> </div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Create a separate frame per subvol as we might need</div><div class='del'>-         * to resend readdirp multiple times to get all the</div><div class='del'>-         * entries.</div><div class='del'>-         */</div><div class='add'>+    ret = dict_set_uint32(dict, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Failed to set dictionary value:key = %s", local-&gt;loc.path,</div><div class='add'>+               conf-&gt;link_xattr_name);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+    cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='ctx'> </div><div class='del'>-                readdirp_frame = copy_frame (frame);</div><div class='add'>+    /* Create a separate frame per subvol as we might need</div><div class='add'>+     * to resend readdirp multiple times to get all the</div><div class='add'>+     * entries.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-                if (!readdirp_frame) {</div><div class='del'>-                        cnt--;</div><div class='del'>-                        /* Reduce the local-&gt;call_cnt as well */</div><div class='del'>-                        (void) dht_frame_return (frame);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        readdirp_frame = copy_frame(frame);</div><div class='ctx'> </div><div class='del'>-                readdirp_local = dht_local_init (readdirp_frame, &amp;local-&gt;loc,</div><div class='del'>-                                                 local-&gt;fd, 0);</div><div class='add'>+        if (!readdirp_frame) {</div><div class='add'>+            cnt--;</div><div class='add'>+            /* Reduce the local-&gt;call_cnt as well */</div><div class='add'>+            (void)dht_frame_return(frame);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!readdirp_local) {</div><div class='del'>-                        DHT_STACK_DESTROY (readdirp_frame);</div><div class='del'>-                        cnt--;</div><div class='del'>-                        /* Reduce the local-&gt;call_cnt as well */</div><div class='del'>-                        dht_frame_return (frame);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                readdirp_local-&gt;main_frame = frame;</div><div class='del'>-                readdirp_local-&gt;op_ret = 0;</div><div class='del'>-                readdirp_local-&gt;xattr = dict_ref (dict);</div><div class='del'>-                /* overload this field to save the subvol info */</div><div class='del'>-                readdirp_local-&gt;hashed_subvol = conf-&gt;subvolumes[i];</div><div class='add'>+        readdirp_local = dht_local_init(readdirp_frame, &amp;local-&gt;loc, local-&gt;fd,</div><div class='add'>+                                        0);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (readdirp_frame, dht_rmdir_readdirp_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;readdirp,</div><div class='del'>-                                   readdirp_local-&gt;fd, 4096, 0,</div><div class='del'>-                                   readdirp_local-&gt;xattr);</div><div class='add'>+        if (!readdirp_local) {</div><div class='add'>+            DHT_STACK_DESTROY(readdirp_frame);</div><div class='add'>+            cnt--;</div><div class='add'>+            /* Reduce the local-&gt;call_cnt as well */</div><div class='add'>+            dht_frame_return(frame);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+        readdirp_local-&gt;main_frame = frame;</div><div class='add'>+        readdirp_local-&gt;op_ret = 0;</div><div class='add'>+        readdirp_local-&gt;xattr = dict_ref(dict);</div><div class='add'>+        /* overload this field to save the subvol info */</div><div class='add'>+        readdirp_local-&gt;hashed_subvol = conf-&gt;subvolumes[i];</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+        STACK_WIND_COOKIE(readdirp_frame, dht_rmdir_readdirp_cbk,</div><div class='add'>+                          conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;readdirp,</div><div class='add'>+                          readdirp_local-&gt;fd, 4096, 0, readdirp_local-&gt;xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Could not wind readdirp to any subvol */</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (!cnt)</div><div class='del'>-                goto err;</div><div class='add'>+    /* Could not wind readdirp to any subvol */</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (!cnt)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_rmdir_do (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_rmdir_do(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+dht_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        int           i = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_RMDIR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;op_ret   = 0;</div><div class='del'>-        local-&gt;fop_succeeded = 0;</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_RMDIR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;flags = flags;</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;fop_succeeded = 0;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_create (local-&gt;loc.inode, frame-&gt;root-&gt;pid);</div><div class='del'>-        if (!local-&gt;fd) {</div><div class='add'>+    local-&gt;flags = flags;</div><div class='ctx'> </div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;fd = fd_create(local-&gt;loc.inode, frame-&gt;root-&gt;pid);</div><div class='add'>+    if (!local-&gt;fd) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (flags) {</div><div class='del'>-                return dht_rmdir_do (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (flags) {</div><div class='add'>+        return dht_rmdir_do(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rmdir_opendir_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;opendir,</div><div class='del'>-                                   loc, local-&gt;fd, NULL);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rmdir_opendir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;opendir, loc, local-&gt;fd,</div><div class='add'>+                          NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (rmdir, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_entrylk_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                 xlator_t *this, int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (entrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(entrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO</div><div class='hunk'>@@ -10961,765 +10298,735 @@ dht_entrylk_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'>  * as described in the bug 1311002.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dht_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *volume, loc_t *loc, const char *basename,</div><div class='del'>-             entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+dht_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+            const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_ENTRYLK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_ENTRYLK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s, "</div><div class='del'>-                              "gfid = %s", loc-&gt;path, gfid);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "no cached subvolume for path=%s, "</div><div class='add'>+                     "gfid = %s",</div><div class='add'>+                     loc-&gt;path, gfid);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_entrylk_cbk,</div><div class='del'>-                    subvol, subvol-&gt;fops-&gt;entrylk,</div><div class='del'>-                    volume, loc, basename, cmd, type, xdata);</div><div class='add'>+    STACK_WIND(frame, dht_entrylk_cbk, subvol, subvol-&gt;fops-&gt;entrylk, volume,</div><div class='add'>+               loc, basename, cmd, type, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (entrylk, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(entrylk, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fentrylk_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                  xlator_t *this, int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (fentrylk, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(fentrylk, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fentrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              const char *volume, fd_t *fd, const char *basename,</div><div class='del'>-              entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+dht_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+             const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        char               gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+    gf_uuid_unparse(fd-&gt;inode-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse(fd-&gt;inode-&gt;gfid, gfid);</div><div class='add'>+    subvol = dht_subvol_get_cached(this, fd-&gt;inode);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "No cached subvolume for fd=%p,"</div><div class='add'>+                     " gfid = %s",</div><div class='add'>+                     fd, gfid);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = dht_subvol_get_cached (this, fd-&gt;inode);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "No cached subvolume for fd=%p,"</div><div class='del'>-                              " gfid = %s", fd, gfid);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, dht_fentrylk_cbk,</div><div class='del'>-                    subvol, subvol-&gt;fops-&gt;fentrylk,</div><div class='del'>-                    volume, fd, basename, cmd, type, xdata);</div><div class='add'>+    STACK_WIND(frame, dht_fentrylk_cbk, subvol, subvol-&gt;fops-&gt;fentrylk, volume,</div><div class='add'>+               fd, basename, cmd, type, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fentrylk, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fentrylk, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_ipc_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                   = NULL;</div><div class='del'>-        int           this_call_cnt           = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret &lt; 0 &amp;&amp; op_errno != ENOTCONN) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                DHT_STACK_UNWIND (ipc, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  NULL);</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        DHT_STACK_UNWIND(ipc, frame, local-&gt;op_ret, local-&gt;op_errno, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+dht_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-        int           op_errno = EINVAL;</div><div class='del'>-        dht_conf_t   *conf     = NULL;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        int           i        = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='ctx'> </div><div class='del'>-        if (op != GF_IPC_TARGET_UPCALL)</div><div class='del'>-                goto wind_default;</div><div class='add'>+    if (op != GF_IPC_TARGET_UPCALL)</div><div class='add'>+        goto wind_default;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, NULL, NULL, GF_FOP_IPC);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, NULL, NULL, GF_FOP_IPC);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_cnt        = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-        if (xdata) {</div><div class='del'>-                if (dict_set_int8 (xdata, conf-&gt;xattr_name, 0) &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='add'>+    if (xdata) {</div><div class='add'>+        if (dict_set_int8(xdata, conf-&gt;xattr_name, 0) &lt; 0)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                STACK_WIND (frame, dht_ipc_cbk, conf-&gt;subvolumes[i],</div><div class='del'>-                            conf-&gt;subvolumes[i]-&gt;fops-&gt;ipc, op, xdata);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        STACK_WIND(frame, dht_ipc_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                   conf-&gt;subvolumes[i]-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (ipc, frame, -1, op_errno, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(ipc, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> wind_default:</div><div class='del'>-        STACK_WIND (frame, default_ipc_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_ipc_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+dht_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        ctx_int = 0;</div><div class='del'>-        dht_inode_ctx_t *ctx    = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        inode_ctx_del (inode, this, &amp;ctx_int);</div><div class='add'>+    inode_ctx_del(inode, this, &amp;ctx_int);</div><div class='ctx'> </div><div class='del'>-        if (!ctx_int)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!ctx_int)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ctx = (dht_inode_ctx_t *) (long) ctx_int;</div><div class='add'>+    ctx = (dht_inode_ctx_t *)(long)ctx_int;</div><div class='ctx'> </div><div class='del'>-        layout = ctx-&gt;layout;</div><div class='del'>-        ctx-&gt;layout = NULL;</div><div class='del'>-        dht_layout_unref (this, layout);</div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    layout = ctx-&gt;layout;</div><div class='add'>+    ctx-&gt;layout = NULL;</div><div class='add'>+    dht_layout_unref(this, layout);</div><div class='add'>+    GF_FREE(ctx);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+dht_notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *subvol = NULL;</div><div class='del'>-        int                      cnt    = -1;</div><div class='del'>-        int                      i      = -1;</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='del'>-        int                      ret    = -1;</div><div class='del'>-        int                      propagate = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int cnt = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int propagate = 0;</div><div class='ctx'> </div><div class='del'>-        int                      had_heard_from_all = 0;</div><div class='del'>-        int                      have_heard_from_all = 0;</div><div class='del'>-        struct timeval           time = {0,};</div><div class='del'>-        gf_defrag_info_t        *defrag = NULL;</div><div class='del'>-        dict_t                  *dict   = NULL;</div><div class='del'>-        gf_defrag_type           cmd    = 0;</div><div class='del'>-        dict_t                  *output = NULL;</div><div class='del'>-        va_list                  ap;</div><div class='del'>-        dht_methods_t           *methods = NULL;</div><div class='del'>-        struct gf_upcall        *up_data = NULL;</div><div class='del'>-        struct gf_upcall_cache_invalidation *up_ci = NULL;</div><div class='add'>+    int had_heard_from_all = 0;</div><div class='add'>+    int have_heard_from_all = 0;</div><div class='add'>+    struct timeval time = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_defrag_type cmd = 0;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    va_list ap;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='add'>+    struct gf_upcall *up_data = NULL;</div><div class='add'>+    struct gf_upcall_cache_invalidation *up_ci = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, out);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, out);</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        /* had all subvolumes reported status once till now? */</div><div class='del'>-        had_heard_from_all = 1;</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (!conf-&gt;last_event[i]) {</div><div class='del'>-                        had_heard_from_all = 0;</div><div class='del'>-                }</div><div class='add'>+    /* had all subvolumes reported status once till now? */</div><div class='add'>+    had_heard_from_all = 1;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (!conf-&gt;last_event[i]) {</div><div class='add'>+            had_heard_from_all = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_CHILD_UP:</div><div class='del'>-                subvol = data;</div><div class='add'>+            subvol = data;</div><div class='ctx'> </div><div class='del'>-                conf-&gt;gen++;</div><div class='add'>+            conf-&gt;gen++;</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (subvol == conf-&gt;subvolumes[i]) {</div><div class='del'>-                                cnt = i;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                if (subvol == conf-&gt;subvolumes[i]) {</div><div class='add'>+                    cnt = i;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (cnt == -1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "got GF_EVENT_CHILD_UP bad "</div><div class='del'>-                                      "subvolume %s",</div><div class='del'>-                                      subvol-&gt;name);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            if (cnt == -1) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "got GF_EVENT_CHILD_UP bad "</div><div class='add'>+                             "subvolume %s",</div><div class='add'>+                             subvol-&gt;name);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                gettimeofday (&amp;time, NULL);</div><div class='del'>-                LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-                {</div><div class='del'>-                        conf-&gt;subvolume_status[cnt] = 1;</div><div class='del'>-                        conf-&gt;last_event[cnt] = event;</div><div class='del'>-                        conf-&gt;subvol_up_time[cnt] = time.tv_sec;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='add'>+            gettimeofday(&amp;time, NULL);</div><div class='add'>+            LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+            {</div><div class='add'>+                conf-&gt;subvolume_status[cnt] = 1;</div><div class='add'>+                conf-&gt;last_event[cnt] = event;</div><div class='add'>+                conf-&gt;subvol_up_time[cnt] = time.tv_sec;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='del'>-                /* one of the node came back up, do a stat update */</div><div class='del'>-                dht_get_du_info_for_subvol (this, cnt);</div><div class='add'>+            /* one of the node came back up, do a stat update */</div><div class='add'>+            dht_get_du_info_for_subvol(this, cnt);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_EVENT_SOME_DESCENDENT_UP:</div><div class='del'>-                subvol = data;</div><div class='del'>-                conf-&gt;gen++;</div><div class='del'>-                propagate = 1;</div><div class='add'>+            subvol = data;</div><div class='add'>+            conf-&gt;gen++;</div><div class='add'>+            propagate = 1;</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_EVENT_SOME_DESCENDENT_DOWN:</div><div class='del'>-                subvol = data;</div><div class='del'>-                propagate = 1;</div><div class='add'>+            subvol = data;</div><div class='add'>+            propagate = 1;</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_EVENT_CHILD_DOWN:</div><div class='del'>-                subvol = data;</div><div class='del'>-</div><div class='del'>-                if (conf-&gt;assert_no_child_down) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_CHILD_DOWN,</div><div class='del'>-                                "Received CHILD_DOWN. Exiting");</div><div class='del'>-                        if (conf-&gt;defrag) {</div><div class='del'>-                                gf_defrag_stop (conf,</div><div class='del'>-                                                GF_DEFRAG_STATUS_FAILED, NULL);</div><div class='del'>-                        } else {</div><div class='del'>-                                kill (getpid(), SIGTERM);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (subvol == conf-&gt;subvolumes[i]) {</div><div class='del'>-                                cnt = i;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            subvol = data;</div><div class='ctx'> </div><div class='del'>-                if (cnt == -1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "got GF_EVENT_CHILD_DOWN bad "</div><div class='del'>-                                      "subvolume %s", subvol-&gt;name);</div><div class='del'>-                        break;</div><div class='add'>+            if (conf-&gt;assert_no_child_down) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_CHILD_DOWN,</div><div class='add'>+                       "Received CHILD_DOWN. Exiting");</div><div class='add'>+                if (conf-&gt;defrag) {</div><div class='add'>+                    gf_defrag_stop(conf, GF_DEFRAG_STATUS_FAILED, NULL);</div><div class='add'>+                } else {</div><div class='add'>+                    kill(getpid(), SIGTERM);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-                {</div><div class='del'>-                        conf-&gt;subvolume_status[cnt] = 0;</div><div class='del'>-                        conf-&gt;last_event[cnt] = event;</div><div class='del'>-                        conf-&gt;subvol_up_time[cnt] = 0;</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                if (subvol == conf-&gt;subvolumes[i]) {</div><div class='add'>+                    cnt = i;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++)</div><div class='del'>-                        if (conf-&gt;last_event[i] != event)</div><div class='del'>-                                event = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='add'>+            if (cnt == -1) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "got GF_EVENT_CHILD_DOWN bad "</div><div class='add'>+                             "subvolume %s",</div><div class='add'>+                             subvol-&gt;name);</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        case GF_EVENT_CHILD_CONNECTING:</div><div class='del'>-                subvol = data;</div><div class='add'>+            LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+            {</div><div class='add'>+                conf-&gt;subvolume_status[cnt] = 0;</div><div class='add'>+                conf-&gt;last_event[cnt] = event;</div><div class='add'>+                conf-&gt;subvol_up_time[cnt] = 0;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (subvol == conf-&gt;subvolumes[i]) {</div><div class='del'>-                                cnt = i;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++)</div><div class='add'>+                if (conf-&gt;last_event[i] != event)</div><div class='add'>+                    event = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (cnt == -1) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "got GF_EVENT_CHILD_CONNECTING"</div><div class='del'>-                                      " bad subvolume %s",</div><div class='del'>-                                      subvol-&gt;name);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        case GF_EVENT_CHILD_CONNECTING:</div><div class='add'>+            subvol = data;</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-                {</div><div class='del'>-                        conf-&gt;last_event[cnt] = event;</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                if (subvol == conf-&gt;subvolumes[i]) {</div><div class='add'>+                    cnt = i;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (cnt == -1) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "got GF_EVENT_CHILD_CONNECTING"</div><div class='add'>+                             " bad subvolume %s",</div><div class='add'>+                             subvol-&gt;name);</div><div class='ctx'>                 break;</div><div class='del'>-        case GF_EVENT_VOLUME_DEFRAG:</div><div class='del'>-        {</div><div class='del'>-                if (!conf-&gt;defrag) {</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                defrag = conf-&gt;defrag;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                dict = data;</div><div class='del'>-                va_start (ap, data);</div><div class='del'>-                output = va_arg (ap, dict_t*);</div><div class='add'>+            LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+            {</div><div class='add'>+                conf-&gt;last_event[cnt] = event;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_int32 (dict, "rebalance-command",</div><div class='del'>-                                      (int32_t*)&amp;cmd);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        va_end (ap);</div><div class='del'>-                        return ret;</div><div class='del'>-                }</div><div class='del'>-                LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (defrag-&gt;is_exiting)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        if ((cmd == GF_DEFRAG_CMD_STATUS) ||</div><div class='del'>-                            (cmd == GF_DEFRAG_CMD_STATUS_TIER) ||</div><div class='del'>-                            (cmd == GF_DEFRAG_CMD_DETACH_STATUS))</div><div class='del'>-                                gf_defrag_status_get (conf, output);</div><div class='del'>-                        else if (cmd == GF_DEFRAG_CMD_START_DETACH_TIER)</div><div class='del'>-                                gf_defrag_start_detach_tier(defrag);</div><div class='del'>-                        else if (cmd == GF_DEFRAG_CMD_DETACH_START)</div><div class='del'>-                                defrag-&gt;cmd = GF_DEFRAG_CMD_DETACH_START;</div><div class='del'>-                        else if (cmd == GF_DEFRAG_CMD_STOP ||</div><div class='del'>-                                 cmd == GF_DEFRAG_CMD_STOP_DETACH_TIER ||</div><div class='del'>-                                 cmd == GF_DEFRAG_CMD_DETACH_STOP)</div><div class='del'>-                                gf_defrag_stop (conf,</div><div class='del'>-                                                GF_DEFRAG_STATUS_STOPPED, output);</div><div class='del'>-                        else if (cmd == GF_DEFRAG_CMD_PAUSE_TIER)</div><div class='del'>-                                ret = gf_defrag_pause_tier (this, defrag);</div><div class='del'>-                        else if (cmd == GF_DEFRAG_CMD_RESUME_TIER)</div><div class='del'>-                                ret = gf_defrag_resume_tier (this, defrag);</div><div class='del'>-                }</div><div class='del'>-unlock:</div><div class='del'>-                UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                va_end (ap);</div><div class='add'>+            break;</div><div class='add'>+        case GF_EVENT_VOLUME_DEFRAG: {</div><div class='add'>+            if (!conf-&gt;defrag) {</div><div class='ctx'>                 return ret;</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            defrag = conf-&gt;defrag;</div><div class='add'>+</div><div class='add'>+            dict = data;</div><div class='add'>+            va_start(ap, data);</div><div class='add'>+            output = va_arg(ap, dict_t *);</div><div class='add'>+</div><div class='add'>+            ret = dict_get_int32(dict, "rebalance-command", (int32_t *)&amp;cmd);</div><div class='add'>+            if (ret) {</div><div class='add'>+                va_end(ap);</div><div class='add'>+                return ret;</div><div class='add'>+            }</div><div class='add'>+            LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                if (defrag-&gt;is_exiting)</div><div class='add'>+                    goto unlock;</div><div class='add'>+                if ((cmd == GF_DEFRAG_CMD_STATUS) ||</div><div class='add'>+                    (cmd == GF_DEFRAG_CMD_STATUS_TIER) ||</div><div class='add'>+                    (cmd == GF_DEFRAG_CMD_DETACH_STATUS))</div><div class='add'>+                    gf_defrag_status_get(conf, output);</div><div class='add'>+                else if (cmd == GF_DEFRAG_CMD_START_DETACH_TIER)</div><div class='add'>+                    gf_defrag_start_detach_tier(defrag);</div><div class='add'>+                else if (cmd == GF_DEFRAG_CMD_DETACH_START)</div><div class='add'>+                    defrag-&gt;cmd = GF_DEFRAG_CMD_DETACH_START;</div><div class='add'>+                else if (cmd == GF_DEFRAG_CMD_STOP ||</div><div class='add'>+                         cmd == GF_DEFRAG_CMD_STOP_DETACH_TIER ||</div><div class='add'>+                         cmd == GF_DEFRAG_CMD_DETACH_STOP)</div><div class='add'>+                    gf_defrag_stop(conf, GF_DEFRAG_STATUS_STOPPED, output);</div><div class='add'>+                else if (cmd == GF_DEFRAG_CMD_PAUSE_TIER)</div><div class='add'>+                    ret = gf_defrag_pause_tier(this, defrag);</div><div class='add'>+                else if (cmd == GF_DEFRAG_CMD_RESUME_TIER)</div><div class='add'>+                    ret = gf_defrag_resume_tier(this, defrag);</div><div class='add'>+            }</div><div class='add'>+        unlock:</div><div class='add'>+            UNLOCK(&amp;defrag-&gt;lock);</div><div class='add'>+            va_end(ap);</div><div class='add'>+            return ret;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'>         case GF_EVENT_UPCALL:</div><div class='del'>-                up_data = (struct gf_upcall *)data;</div><div class='del'>-                if (up_data-&gt;event_type != GF_UPCALL_CACHE_INVALIDATION)</div><div class='del'>-                        break;</div><div class='del'>-                up_ci = (struct gf_upcall_cache_invalidation *)up_data-&gt;data;</div><div class='del'>-</div><div class='del'>-                /* Since md-cache will be aggressively filtering lookups,</div><div class='del'>-                 * the stale layout issue will be more pronounced. Hence</div><div class='del'>-                 * when a layout xattr is changed by the rebalance process</div><div class='del'>-                 * notify all the md-cache clients to invalidate the existing</div><div class='del'>-                 * stat cache and send the lookup next time*/</div><div class='del'>-                if (up_ci-&gt;dict &amp;&amp; dict_get (up_ci-&gt;dict, conf-&gt;xattr_name))</div><div class='del'>-                        up_ci-&gt;flags |= UP_EXPLICIT_LOOKUP;</div><div class='del'>-</div><div class='del'>-                /* TODO: Instead of invalidating iatt, update the new</div><div class='del'>-                 * hashed/cached subvolume in dht inode_ctx */</div><div class='del'>-                if (IS_DHT_LINKFILE_MODE (&amp;up_ci-&gt;stat))</div><div class='del'>-                        up_ci-&gt;flags |= UP_EXPLICIT_LOOKUP;</div><div class='del'>-</div><div class='del'>-                propagate = 1;</div><div class='add'>+            up_data = (struct gf_upcall *)data;</div><div class='add'>+            if (up_data-&gt;event_type != GF_UPCALL_CACHE_INVALIDATION)</div><div class='ctx'>                 break;</div><div class='add'>+            up_ci = (struct gf_upcall_cache_invalidation *)up_data-&gt;data;</div><div class='add'>+</div><div class='add'>+            /* Since md-cache will be aggressively filtering lookups,</div><div class='add'>+             * the stale layout issue will be more pronounced. Hence</div><div class='add'>+             * when a layout xattr is changed by the rebalance process</div><div class='add'>+             * notify all the md-cache clients to invalidate the existing</div><div class='add'>+             * stat cache and send the lookup next time*/</div><div class='add'>+            if (up_ci-&gt;dict &amp;&amp; dict_get(up_ci-&gt;dict, conf-&gt;xattr_name))</div><div class='add'>+                up_ci-&gt;flags |= UP_EXPLICIT_LOOKUP;</div><div class='add'>+</div><div class='add'>+            /* TODO: Instead of invalidating iatt, update the new</div><div class='add'>+             * hashed/cached subvolume in dht inode_ctx */</div><div class='add'>+            if (IS_DHT_LINKFILE_MODE(&amp;up_ci-&gt;stat))</div><div class='add'>+                up_ci-&gt;flags |= UP_EXPLICIT_LOOKUP;</div><div class='add'>+</div><div class='add'>+            propagate = 1;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                propagate = 1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+            propagate = 1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* have all subvolumes reported status once by now? */</div><div class='add'>+    have_heard_from_all = 1;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (!conf-&gt;last_event[i])</div><div class='add'>+            have_heard_from_all = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* if all subvols have reported status, no need to hide anything</div><div class='add'>+       or wait for anything else. Just propagate blindly */</div><div class='add'>+    if (have_heard_from_all) {</div><div class='add'>+        propagate = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!had_heard_from_all &amp;&amp; have_heard_from_all) {</div><div class='add'>+        /* This is the first event which completes aggregation</div><div class='add'>+           of events from all subvolumes. If at least one subvol</div><div class='add'>+           had come up, propagate CHILD_UP, but only this time</div><div class='add'>+        */</div><div class='add'>+        event = GF_EVENT_CHILD_DOWN;</div><div class='ctx'> </div><div class='del'>-        /* have all subvolumes reported status once by now? */</div><div class='del'>-        have_heard_from_all = 1;</div><div class='ctx'>         for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (!conf-&gt;last_event[i])</div><div class='del'>-                        have_heard_from_all = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if all subvols have reported status, no need to hide anything</div><div class='del'>-           or wait for anything else. Just propagate blindly */</div><div class='del'>-        if (have_heard_from_all) {</div><div class='del'>-                propagate = 1;</div><div class='add'>+            if (conf-&gt;last_event[i] == GF_EVENT_CHILD_UP) {</div><div class='add'>+                event = GF_EVENT_CHILD_UP;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (conf-&gt;last_event[i] == GF_EVENT_CHILD_CONNECTING) {</div><div class='add'>+                event = GF_EVENT_CHILD_CONNECTING;</div><div class='add'>+                /* continue to check other events for CHILD_UP */</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        if (!had_heard_from_all &amp;&amp; have_heard_from_all) {</div><div class='del'>-                /* This is the first event which completes aggregation</div><div class='del'>-                   of events from all subvolumes. If at least one subvol</div><div class='del'>-                   had come up, propagate CHILD_UP, but only this time</div><div class='del'>-                */</div><div class='del'>-                event = GF_EVENT_CHILD_DOWN;</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;last_event[i] == GF_EVENT_CHILD_UP) {</div><div class='del'>-                                event = GF_EVENT_CHILD_UP;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (conf-&gt;last_event[i] == GF_EVENT_CHILD_CONNECTING) {</div><div class='del'>-                                event = GF_EVENT_CHILD_CONNECTING;</div><div class='del'>-                                /* continue to check other events for CHILD_UP */</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Rebalance is started with assert_no_child_down. So we do</div><div class='del'>-                 * not need to handle CHILD_DOWN event here.</div><div class='del'>-                 *</div><div class='del'>-                 * If there is a graph switch, we should not restart the</div><div class='del'>-                 * rebalance daemon. Use 'run_defrag' to indicate if the</div><div class='del'>-                 * thread has already started.</div><div class='del'>-                 */</div><div class='del'>-                 if (conf-&gt;defrag &amp;&amp; !run_defrag) {</div><div class='del'>-                        if (methods-&gt;migration_needed(this)) {</div><div class='del'>-                                run_defrag = 1;</div><div class='del'>-                                ret = gf_thread_create(&amp;conf-&gt;defrag-&gt;th,</div><div class='del'>-                                                       NULL,</div><div class='del'>-                                                       gf_defrag_start, this,</div><div class='del'>-                                                       "dhtdg");</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        GF_FREE (conf-&gt;defrag);</div><div class='del'>-                                        conf-&gt;defrag = NULL;</div><div class='del'>-                                        kill (getpid(), SIGTERM);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        /* Rebalance is started with assert_no_child_down. So we do</div><div class='add'>+         * not need to handle CHILD_DOWN event here.</div><div class='add'>+         *</div><div class='add'>+         * If there is a graph switch, we should not restart the</div><div class='add'>+         * rebalance daemon. Use 'run_defrag' to indicate if the</div><div class='add'>+         * thread has already started.</div><div class='add'>+         */</div><div class='add'>+        if (conf-&gt;defrag &amp;&amp; !run_defrag) {</div><div class='add'>+            if (methods-&gt;migration_needed(this)) {</div><div class='add'>+                run_defrag = 1;</div><div class='add'>+                ret = gf_thread_create(&amp;conf-&gt;defrag-&gt;th, NULL, gf_defrag_start,</div><div class='add'>+                                       this, "dhtdg");</div><div class='add'>+                if (ret) {</div><div class='add'>+                    GF_FREE(conf-&gt;defrag);</div><div class='add'>+                    conf-&gt;defrag = NULL;</div><div class='add'>+                    kill(getpid(), SIGTERM);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        if (propagate)</div><div class='del'>-                ret = default_notify (this, event, data);</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (propagate)</div><div class='add'>+        ret = default_notify(this, event, data);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_layout_get (inode_t *inode, xlator_t *this, dht_layout_t **layout)</div><div class='add'>+dht_inode_ctx_layout_get(inode_t *inode, xlator_t *this, dht_layout_t **layout)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_get (inode, this, &amp;ctx);</div><div class='add'>+    ret = dht_inode_ctx_get(inode, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; ctx) {</div><div class='del'>-                if (ctx-&gt;layout) {</div><div class='del'>-                        if (layout)</div><div class='del'>-                                *layout = ctx-&gt;layout;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+    if (!ret &amp;&amp; ctx) {</div><div class='add'>+        if (ctx-&gt;layout) {</div><div class='add'>+            if (layout)</div><div class='add'>+                *layout = ctx-&gt;layout;</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_log_new_layout_for_dir_selfheal (xlator_t *this, loc_t *loc,</div><div class='del'>-                                 dht_layout_t *layout)</div><div class='del'>-{</div><div class='add'>+dht_log_new_layout_for_dir_selfheal(xlator_t *this, loc_t *loc,</div><div class='add'>+                                    dht_layout_t *layout)</div><div class='add'>+{</div><div class='add'>+    char string[2048] = {0};</div><div class='add'>+    char *output_string = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    int off = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_loglevel_t log_level = gf_log_get_loglevel();</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (log_level &lt; GF_LOG_INFO)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        char                    string[2048] = {0};</div><div class='del'>-        char                  *output_string = NULL;</div><div class='del'>-        int                              len = 0;</div><div class='del'>-        int                              off = 0;</div><div class='del'>-        int                                i = 0;</div><div class='del'>-        gf_loglevel_t             log_level = gf_log_get_loglevel();</div><div class='del'>-        int                              ret = 0;</div><div class='add'>+    if (!layout)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (log_level &lt; GF_LOG_INFO)</div><div class='del'>-                return;</div><div class='add'>+    if (!layout-&gt;cnt)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!layout)</div><div class='del'>-                return;</div><div class='add'>+    if (!loc)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!layout-&gt;cnt)</div><div class='del'>-                return;</div><div class='add'>+    if (!loc-&gt;path)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!loc)</div><div class='del'>-                return;</div><div class='add'>+    ret = snprintf(string, sizeof(string), "Setting layout of %s with ",</div><div class='add'>+                   loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        if (!loc-&gt;path)</div><div class='del'>-                return;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (string, sizeof (string), "Setting layout of %s with ",</div><div class='del'>-                        loc-&gt;path);</div><div class='add'>+    len += ret;</div><div class='add'>+</div><div class='add'>+    /* Calculation  of total length of the string required to calloc</div><div class='add'>+     * output_string. Log includes subvolume-name, start-range, end-range and</div><div class='add'>+     * err value.</div><div class='add'>+     *</div><div class='add'>+     * This log will help to debug cases where:</div><div class='add'>+     * a) Different processes set different layout of a directory.</div><div class='add'>+     * b) Error captured in lookup, which will be filled in layout-&gt;err</div><div class='add'>+     * (like ENOENT, ESTALE etc)</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        ret = snprintf(string, sizeof(string),</div><div class='add'>+                       "[Subvol_name: %s, Err: %d , Start: "</div><div class='add'>+                       "%" PRIu32 " , Stop: %" PRIu32 " , Hash: %" PRIu32</div><div class='add'>+                       " ], ",</div><div class='add'>+                       layout-&gt;list[i].xlator-&gt;name, layout-&gt;list[i].err,</div><div class='add'>+                       layout-&gt;list[i].start, layout-&gt;list[i].stop,</div><div class='add'>+                       layout-&gt;list[i].commit_hash);</div><div class='ctx'> </div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                return;</div><div class='add'>+            return;</div><div class='ctx'> </div><div class='ctx'>         len += ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-       /* Calculation  of total length of the string required to calloc</div><div class='del'>-        * output_string. Log includes subvolume-name, start-range, end-range and</div><div class='del'>-        * err value.</div><div class='del'>-        *</div><div class='del'>-        * This log will help to debug cases where:</div><div class='del'>-        * a) Different processes set different layout of a directory.</div><div class='del'>-        * b) Error captured in lookup, which will be filled in layout-&gt;err</div><div class='del'>-        * (like ENOENT, ESTALE etc)</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+    len++;</div><div class='ctx'> </div><div class='del'>-                ret  = snprintf (string, sizeof (string),</div><div class='del'>-                                 "[Subvol_name: %s, Err: %d , Start: "</div><div class='del'>-                                 "%"PRIu32 " , Stop: %"PRIu32 " , Hash: %"</div><div class='del'>-                                 PRIu32 " ], ",</div><div class='del'>-                                 layout-&gt;list[i].xlator-&gt;name,</div><div class='del'>-                                 layout-&gt;list[i].err, layout-&gt;list[i].start,</div><div class='del'>-                                 layout-&gt;list[i].stop,</div><div class='del'>-                                 layout-&gt;list[i].commit_hash);</div><div class='add'>+    output_string = GF_MALLOC(len + 1, gf_common_mt_char);</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        return;</div><div class='del'>-</div><div class='del'>-                len += ret;</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    if (!output_string)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        len++;</div><div class='add'>+    ret = snprintf(output_string, len + 1, "Setting layout of %s with ",</div><div class='add'>+                   loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        output_string = GF_MALLOC (len + 1, gf_common_mt_char);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (!output_string)</div><div class='del'>-                return;</div><div class='add'>+    off += ret;</div><div class='ctx'> </div><div class='del'>-        ret = snprintf (output_string, len + 1, "Setting layout of %s with ",</div><div class='del'>-                        loc-&gt;path);</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        ret = snprintf(output_string + off, len - off,</div><div class='add'>+                       "[Subvol_name: %s, Err: %d , Start: "</div><div class='add'>+                       "%" PRIu32 " , Stop: %" PRIu32 " , Hash: %" PRIu32</div><div class='add'>+                       " ], ",</div><div class='add'>+                       layout-&gt;list[i].xlator-&gt;name, layout-&gt;list[i].err,</div><div class='add'>+                       layout-&gt;list[i].start, layout-&gt;list[i].stop,</div><div class='add'>+                       layout-&gt;list[i].commit_hash);</div><div class='ctx'> </div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='ctx'>         off += ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-</div><div class='del'>-                ret  =  snprintf (output_string + off, len - off,</div><div class='del'>-                                  "[Subvol_name: %s, Err: %d , Start: "</div><div class='del'>-                                  "%"PRIu32 " , Stop: %"PRIu32 " , Hash: %"</div><div class='del'>-                                  PRIu32  " ], ",</div><div class='del'>-                                  layout-&gt;list[i].xlator-&gt;name,</div><div class='del'>-                                  layout-&gt;list[i].err, layout-&gt;list[i].start,</div><div class='del'>-                                  layout-&gt;list[i].stop,</div><div class='del'>-                                  layout-&gt;list[i].commit_hash);</div><div class='del'>-</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-                off += ret;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_LOG_FIXED_LAYOUT,</div><div class='del'>-                "%s", output_string);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_LOG_FIXED_LAYOUT, "%s",</div><div class='add'>+           output_string);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (output_string);</div><div class='add'>+    GF_FREE(output_string);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t dht_migration_get_dst_subvol(xlator_t *this, dht_local_t  *local)</div><div class='add'>+int32_t</div><div class='add'>+dht_migration_get_dst_subvol(xlator_t *this, dht_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_node =</div><div class='del'>-                dht_subvol_get_hashed (this, &amp;local-&gt;loc);</div><div class='add'>+    local-&gt;rebalance.target_node = dht_subvol_get_hashed(this, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;rebalance.target_node)</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (local-&gt;rebalance.target_node)</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t dht_migration_needed(xlator_t *this)</div><div class='add'>+int32_t</div><div class='add'>+dht_migration_needed(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_info_t        *defrag = NULL;</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='del'>-        int                      ret = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", conf, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", conf-&gt;defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", conf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", conf-&gt;defrag, out);</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        if ((defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='del'>-            (defrag-&gt;cmd != GF_DEFRAG_CMD_START_DETACH_TIER))</div><div class='del'>-                ret = 1;</div><div class='add'>+    if ((defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='add'>+        (defrag-&gt;cmd != GF_DEFRAG_CMD_START_DETACH_TIER))</div><div class='add'>+        ret = 1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'> This function should not be called more then once during a FOP</div><div class='ctx'> handling path. It is valid only for for ops on files</div><div class='ctx'> */</div><div class='del'>-int32_t dht_set_local_rebalance (xlator_t *this, dht_local_t *local,</div><div class='del'>-                                 struct iatt *stbuf,</div><div class='del'>-                                 struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                                 dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+dht_set_local_rebalance(xlator_t *this, dht_local_t *local, struct iatt *stbuf,</div><div class='add'>+                        struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    if (!local)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;rebalance.set) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_REBAL_STRUCT_SET,</div><div class='del'>-                        "local-&gt;rebalance already set");</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    if (local-&gt;rebalance.set) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_REBAL_STRUCT_SET,</div><div class='add'>+               "local-&gt;rebalance already set");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (stbuf)</div><div class='del'>-                memcpy (&amp;local-&gt;rebalance.stbuf, stbuf, sizeof (struct iatt));</div><div class='add'>+    if (stbuf)</div><div class='add'>+        memcpy(&amp;local-&gt;rebalance.stbuf, stbuf, sizeof(struct iatt));</div><div class='ctx'> </div><div class='del'>-        if (prebuf)</div><div class='del'>-                memcpy (&amp;local-&gt;rebalance.prebuf, prebuf, sizeof (struct iatt));</div><div class='add'>+    if (prebuf)</div><div class='add'>+        memcpy(&amp;local-&gt;rebalance.prebuf, prebuf, sizeof(struct iatt));</div><div class='ctx'> </div><div class='del'>-        if (postbuf)</div><div class='del'>-                memcpy (&amp;local-&gt;rebalance.postbuf, postbuf,</div><div class='del'>-                        sizeof (struct iatt));</div><div class='add'>+    if (postbuf)</div><div class='add'>+        memcpy(&amp;local-&gt;rebalance.postbuf, postbuf, sizeof(struct iatt));</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;rebalance.xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;rebalance.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.set = 1;</div><div class='add'>+    local-&gt;rebalance.set = 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_is_tier_xlator (xlator_t *this)</div><div class='add'>+dht_is_tier_xlator(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        if (strcmp (this-&gt;type, "cluster/tier") == 0)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (strcmp(this-&gt;type, "cluster/tier") == 0)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_release (xlator_t *this, fd_t *fd)</div><div class='add'>+dht_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        return dht_fd_ctx_destroy (this, fd);</div><div class='add'>+    return dht_fd_ctx_destroy(this, fd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_remove_stale_linkto (void *data)</div><div class='add'>+dht_remove_stale_linkto(void *data)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *frame = NULL;</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        xlator_t        *this  = NULL;</div><div class='del'>-        dict_t          *xdata_in = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dict_t *xdata_in = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", data, out);</div><div class='ctx'> </div><div class='del'>-        frame = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", local-&gt;link_subvol, out);</div><div class='add'>+    frame = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", local-&gt;link_subvol, out);</div><div class='ctx'> </div><div class='del'>-        xdata_in = dict_new ();</div><div class='del'>-        if (!xdata_in)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dht_fill_dict_to_avoid_unlink_of_migrating_file (xdata_in);</div><div class='del'>-        if (ret) {</div><div class='del'>-                  gf_msg (this-&gt;name, GF_LOG_WARNING, -ret, 0,</div><div class='del'>-                                "Failed to set keys for stale linkto"</div><div class='del'>-                                "deletion on path %s", local-&gt;loc.path);</div><div class='del'>-                  goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_unlink (local-&gt;link_subvol, &amp;local-&gt;loc, xdata_in, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                  gf_msg (this-&gt;name, GF_LOG_WARNING, -ret, 0,</div><div class='del'>-                                "Removal of linkto failed"</div><div class='del'>-                                " on path %s at subvol %s",</div><div class='del'>-                                local-&gt;loc.path, local-&gt;link_subvol-&gt;name);</div><div class='add'>+    xdata_in = dict_new();</div><div class='add'>+    if (!xdata_in)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    ret = dht_fill_dict_to_avoid_unlink_of_migrating_file(xdata_in);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, 0,</div><div class='add'>+               "Failed to set keys for stale linkto"</div><div class='add'>+               "deletion on path %s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_unlink(local-&gt;link_subvol, &amp;local-&gt;loc, xdata_in, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, 0,</div><div class='add'>+               "Removal of linkto failed"</div><div class='add'>+               " on path %s at subvol %s",</div><div class='add'>+               local-&gt;loc.path, local-&gt;link_subvol-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (xdata_in)</div><div class='del'>-                dict_unref (xdata_in);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xdata_in)</div><div class='add'>+        dict_unref(xdata_in);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_remove_stale_linkto_cbk (int ret, call_frame_t *sync_frame, void *data)</div><div class='add'>+dht_remove_stale_linkto_cbk(int ret, call_frame_t *sync_frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (sync_frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(sync_frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-diskusage.c b/xlators/cluster/dht/src/dht-diskusage.c<br/>index f109615e52c..13eaabae1c1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-diskusage.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-diskusage.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-diskusage.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-diskusage.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* TODO: add NS locking */</div><div class='ctx'> </div><div class='ctx'> #include "glusterfs.h"</div><div class='hunk'>@@ -20,493 +19,477 @@</div><div class='ctx'> #include &lt;sys/time.h&gt;</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_du_info_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		 int op_ret, int op_errno, struct statvfs *statvfs,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+dht_du_info_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, struct statvfs *statvfs, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	dht_conf_t    *conf         = NULL;</div><div class='del'>-	xlator_t      *prev          = NULL;</div><div class='del'>-	int            this_call_cnt = 0;</div><div class='del'>-	int            i = 0;</div><div class='del'>-	double         percent = 0;</div><div class='del'>-	double         percent_inodes = 0;</div><div class='del'>-	uint64_t       bytes = 0;</div><div class='del'>-        uint32_t       bpc;     /* blocks per chunk */</div><div class='del'>-        uint32_t       chunks   = 0;</div><div class='del'>-</div><div class='del'>-	conf = this-&gt;private;</div><div class='del'>-	prev = cookie;</div><div class='del'>-</div><div class='del'>-	if (op_ret == -1 || !statvfs) {</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_GET_DISK_INFO_ERROR,</div><div class='del'>-			"failed to get disk info from %s", prev-&gt;name);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (statvfs-&gt;f_blocks) {</div><div class='del'>-		percent = (statvfs-&gt;f_bavail * 100) / statvfs-&gt;f_blocks;</div><div class='del'>-		bytes = (statvfs-&gt;f_bavail * statvfs-&gt;f_frsize);</div><div class='del'>-                /*</div><div class='del'>-                 * A 32-bit count of 1MB chunks allows a maximum brick size of</div><div class='del'>-                 * ~4PB.  It's possible that we could see a single local FS</div><div class='del'>-                 * bigger than that some day, but this code is likely to be</div><div class='del'>-                 * irrelevant by then.  Meanwhile, it's more important to keep</div><div class='del'>-                 * the chunk size small so the layout-calculation code that</div><div class='del'>-                 * uses this value can be tested on normal machines.</div><div class='del'>-                 */</div><div class='del'>-                bpc = (1 &lt;&lt; 20) / statvfs-&gt;f_bsize;</div><div class='del'>-                chunks = (statvfs-&gt;f_blocks + bpc - 1) / bpc;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (statvfs-&gt;f_files) {</div><div class='del'>-		percent_inodes = (statvfs-&gt;f_ffree * 100) / statvfs-&gt;f_files;</div><div class='del'>-	} else {</div><div class='del'>-                /*</div><div class='del'>-                 * Set percent inodes to 100 for dynamically allocated inode</div><div class='del'>-                 * filesystems. The rationale is that distribute need not</div><div class='del'>-                 * worry about total inodes; rather, let the 'create()' be</div><div class='del'>-                 * scheduled on the hashed subvol regardless of the total</div><div class='del'>-                 * inodes.</div><div class='del'>-		 */</div><div class='del'>-		percent_inodes = 100;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-	{</div><div class='del'>-		for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++)</div><div class='del'>-			if (prev == conf-&gt;subvolumes[i]) {</div><div class='del'>-				conf-&gt;du_stats[i].avail_percent = percent;</div><div class='del'>-				conf-&gt;du_stats[i].avail_space   = bytes;</div><div class='del'>-				conf-&gt;du_stats[i].avail_inodes  = percent_inodes;</div><div class='del'>-                                conf-&gt;du_stats[i].chunks        = chunks;</div><div class='del'>-                                conf-&gt;du_stats[i].total_blocks  = statvfs-&gt;f_blocks;</div><div class='del'>-                                conf-&gt;du_stats[i].avail_blocks  = statvfs-&gt;f_bavail;</div><div class='del'>-                                conf-&gt;du_stats[i].frsize        = statvfs-&gt;f_frsize;</div><div class='del'>-</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-				              "subvolume '%s': avail_percent "</div><div class='del'>-					      "is: %.2f and avail_space "</div><div class='del'>-                                              "is: %" PRIu64" and avail_inodes"</div><div class='del'>-                                              " is: %.2f",</div><div class='del'>-					      prev-&gt;name,</div><div class='del'>-					      conf-&gt;du_stats[i].avail_percent,</div><div class='del'>-					      conf-&gt;du_stats[i].avail_space,</div><div class='del'>-					      conf-&gt;du_stats[i].avail_inodes);</div><div class='del'>-                                break;  /* no point in looping further */</div><div class='del'>-			}</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    double percent = 0;</div><div class='add'>+    double percent_inodes = 0;</div><div class='add'>+    uint64_t bytes = 0;</div><div class='add'>+    uint32_t bpc; /* blocks per chunk */</div><div class='add'>+    uint32_t chunks = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1 || !statvfs) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+               DHT_MSG_GET_DISK_INFO_ERROR, "failed to get disk info from %s",</div><div class='add'>+               prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (statvfs-&gt;f_blocks) {</div><div class='add'>+        percent = (statvfs-&gt;f_bavail * 100) / statvfs-&gt;f_blocks;</div><div class='add'>+        bytes = (statvfs-&gt;f_bavail * statvfs-&gt;f_frsize);</div><div class='add'>+        /*</div><div class='add'>+         * A 32-bit count of 1MB chunks allows a maximum brick size of</div><div class='add'>+         * ~4PB.  It's possible that we could see a single local FS</div><div class='add'>+         * bigger than that some day, but this code is likely to be</div><div class='add'>+         * irrelevant by then.  Meanwhile, it's more important to keep</div><div class='add'>+         * the chunk size small so the layout-calculation code that</div><div class='add'>+         * uses this value can be tested on normal machines.</div><div class='add'>+         */</div><div class='add'>+        bpc = (1 &lt;&lt; 20) / statvfs-&gt;f_bsize;</div><div class='add'>+        chunks = (statvfs-&gt;f_blocks + bpc - 1) / bpc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (statvfs-&gt;f_files) {</div><div class='add'>+        percent_inodes = (statvfs-&gt;f_ffree * 100) / statvfs-&gt;f_files;</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * Set percent inodes to 100 for dynamically allocated inode</div><div class='add'>+         * filesystems. The rationale is that distribute need not</div><div class='add'>+         * worry about total inodes; rather, let the 'create()' be</div><div class='add'>+         * scheduled on the hashed subvol regardless of the total</div><div class='add'>+         * inodes.</div><div class='add'>+         */</div><div class='add'>+        percent_inodes = 100;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++)</div><div class='add'>+            if (prev == conf-&gt;subvolumes[i]) {</div><div class='add'>+                conf-&gt;du_stats[i].avail_percent = percent;</div><div class='add'>+                conf-&gt;du_stats[i].avail_space = bytes;</div><div class='add'>+                conf-&gt;du_stats[i].avail_inodes = percent_inodes;</div><div class='add'>+                conf-&gt;du_stats[i].chunks = chunks;</div><div class='add'>+                conf-&gt;du_stats[i].total_blocks = statvfs-&gt;f_blocks;</div><div class='add'>+                conf-&gt;du_stats[i].avail_blocks = statvfs-&gt;f_bavail;</div><div class='add'>+                conf-&gt;du_stats[i].frsize = statvfs-&gt;f_frsize;</div><div class='add'>+</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "subvolume '%s': avail_percent "</div><div class='add'>+                             "is: %.2f and avail_space "</div><div class='add'>+                             "is: %" PRIu64</div><div class='add'>+                             " and avail_inodes"</div><div class='add'>+                             " is: %.2f",</div><div class='add'>+                             prev-&gt;name, conf-&gt;du_stats[i].avail_percent,</div><div class='add'>+                             conf-&gt;du_stats[i].avail_space,</div><div class='add'>+                             conf-&gt;du_stats[i].avail_inodes);</div><div class='add'>+                break; /* no point in looping further */</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	this_call_cnt = dht_frame_return (frame);</div><div class='del'>-	if (is_last_call (this_call_cnt))</div><div class='del'>-		DHT_STACK_DESTROY (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt))</div><div class='add'>+        DHT_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_get_du_info_for_subvol (xlator_t *this, int subvol_idx)</div><div class='add'>+dht_get_du_info_for_subvol(xlator_t *this, int subvol_idx)</div><div class='ctx'> {</div><div class='del'>-	dht_conf_t    *conf         = NULL;</div><div class='del'>-	call_frame_t  *statfs_frame = NULL;</div><div class='del'>-	dht_local_t   *statfs_local = NULL;</div><div class='del'>-	call_pool_t   *pool         = NULL;</div><div class='del'>-	loc_t          tmp_loc      = {0,};</div><div class='del'>-</div><div class='del'>-	conf = this-&gt;private;</div><div class='del'>-	pool = this-&gt;ctx-&gt;pool;</div><div class='del'>-</div><div class='del'>-	statfs_frame = create_frame (this, pool);</div><div class='del'>-	if (!statfs_frame) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* local-&gt;fop value is not used in this case */</div><div class='del'>-	statfs_local = dht_local_init (statfs_frame, NULL, NULL,</div><div class='del'>-				       GF_FOP_MAXVALUE);</div><div class='del'>-	if (!statfs_local) {</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        /* make it root gfid, should be enough to get the proper info back */</div><div class='del'>-        tmp_loc.gfid[15] = 1;</div><div class='del'>-</div><div class='del'>-	statfs_local-&gt;call_cnt = 1;</div><div class='del'>-	STACK_WIND_COOKIE (statfs_frame, dht_du_info_cbk,</div><div class='del'>-		           conf-&gt;subvolumes[subvol_idx],</div><div class='del'>-                           conf-&gt;subvolumes[subvol_idx],</div><div class='del'>-		           conf-&gt;subvolumes[subvol_idx]-&gt;fops-&gt;statfs,</div><div class='del'>-		           &amp;tmp_loc, NULL);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    call_frame_t *statfs_frame = NULL;</div><div class='add'>+    dht_local_t *statfs_local = NULL;</div><div class='add'>+    call_pool_t *pool = NULL;</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    pool = this-&gt;ctx-&gt;pool;</div><div class='add'>+</div><div class='add'>+    statfs_frame = create_frame(this, pool);</div><div class='add'>+    if (!statfs_frame) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* local-&gt;fop value is not used in this case */</div><div class='add'>+    statfs_local = dht_local_init(statfs_frame, NULL, NULL, GF_FOP_MAXVALUE);</div><div class='add'>+    if (!statfs_local) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* make it root gfid, should be enough to get the proper info back */</div><div class='add'>+    tmp_loc.gfid[15] = 1;</div><div class='add'>+</div><div class='add'>+    statfs_local-&gt;call_cnt = 1;</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        statfs_frame, dht_du_info_cbk, conf-&gt;subvolumes[subvol_idx],</div><div class='add'>+        conf-&gt;subvolumes[subvol_idx],</div><div class='add'>+        conf-&gt;subvolumes[subvol_idx]-&gt;fops-&gt;statfs, &amp;tmp_loc, NULL);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-	if (statfs_frame)</div><div class='del'>-		DHT_STACK_DESTROY (statfs_frame);</div><div class='add'>+    if (statfs_frame)</div><div class='add'>+        DHT_STACK_DESTROY(statfs_frame);</div><div class='ctx'> </div><div class='del'>-	return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_get_du_info (call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='add'>+dht_get_du_info(call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-	int            i            = 0;</div><div class='del'>-        int            ret          = -1;</div><div class='del'>-	dht_conf_t    *conf         = NULL;</div><div class='del'>-	call_frame_t  *statfs_frame = NULL;</div><div class='del'>-	dht_local_t   *statfs_local = NULL;</div><div class='del'>-	struct timeval tv           = {0,};</div><div class='del'>-        loc_t          tmp_loc      = {0,};</div><div class='del'>-</div><div class='del'>-	conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	gettimeofday (&amp;tv, NULL);</div><div class='del'>-</div><div class='del'>-        /* make it root gfid, should be enough to get the proper</div><div class='del'>-           info back */</div><div class='del'>-        tmp_loc.gfid[15] = 1;</div><div class='del'>-</div><div class='del'>-	if (tv.tv_sec &gt; (conf-&gt;refresh_interval</div><div class='del'>-			 + conf-&gt;last_stat_fetch.tv_sec)) {</div><div class='del'>-</div><div class='del'>-		statfs_frame = copy_frame (frame);</div><div class='del'>-		if (!statfs_frame) {</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		/* In this case, 'local-&gt;fop' is not used */</div><div class='del'>-		statfs_local = dht_local_init (statfs_frame, loc, NULL,</div><div class='del'>-					       GF_FOP_MAXVALUE);</div><div class='del'>-		if (!statfs_local) {</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-                statfs_local-&gt;params = dict_new ();</div><div class='del'>-                if (!statfs_local-&gt;params)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int8 (statfs_local-&gt;params,</div><div class='del'>-                                     GF_INTERNAL_IGNORE_DEEM_STATFS, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set "</div><div class='del'>-                                GF_INTERNAL_IGNORE_DEEM_STATFS" in dict");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    call_frame_t *statfs_frame = NULL;</div><div class='add'>+    dht_local_t *statfs_local = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;tv, NULL);</div><div class='add'>+</div><div class='add'>+    /* make it root gfid, should be enough to get the proper</div><div class='add'>+       info back */</div><div class='add'>+    tmp_loc.gfid[15] = 1;</div><div class='add'>+</div><div class='add'>+    if (tv.tv_sec &gt; (conf-&gt;refresh_interval + conf-&gt;last_stat_fetch.tv_sec)) {</div><div class='add'>+        statfs_frame = copy_frame(frame);</div><div class='add'>+        if (!statfs_frame) {</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* In this case, 'local-&gt;fop' is not used */</div><div class='add'>+        statfs_local = dht_local_init(statfs_frame, loc, NULL, GF_FOP_MAXVALUE);</div><div class='add'>+        if (!statfs_local) {</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        statfs_local-&gt;params = dict_new();</div><div class='add'>+        if (!statfs_local-&gt;params)</div><div class='add'>+            goto err;</div><div class='add'>+</div><div class='add'>+        ret = dict_set_int8(statfs_local-&gt;params,</div><div class='add'>+                            GF_INTERNAL_IGNORE_DEEM_STATFS, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set " GF_INTERNAL_IGNORE_DEEM_STATFS " in dict");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        statfs_local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(statfs_frame, dht_du_info_cbk,</div><div class='add'>+                              conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;statfs, &amp;tmp_loc,</div><div class='add'>+                              statfs_local-&gt;params);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		statfs_local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-		for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-			STACK_WIND_COOKIE (statfs_frame, dht_du_info_cbk,</div><div class='del'>-				           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-				           conf-&gt;subvolumes[i]-&gt;fops-&gt;statfs,</div><div class='del'>-				           &amp;tmp_loc, statfs_local-&gt;params);</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		conf-&gt;last_stat_fetch.tv_sec = tv.tv_sec;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+        conf-&gt;last_stat_fetch.tv_sec = tv.tv_sec;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-	if (statfs_frame)</div><div class='del'>-		DHT_STACK_DESTROY (statfs_frame);</div><div class='add'>+    if (statfs_frame)</div><div class='add'>+        DHT_STACK_DESTROY(statfs_frame);</div><div class='ctx'> </div><div class='del'>-	return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_is_subvol_filled (xlator_t *this, xlator_t *subvol)</div><div class='add'>+dht_is_subvol_filled(xlator_t *this, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-	int         i = 0;</div><div class='del'>-        char      vol_name[256];</div><div class='del'>-	dht_conf_t *conf = NULL;</div><div class='del'>-	gf_boolean_t subvol_filled_inodes = _gf_false;</div><div class='del'>-	gf_boolean_t subvol_filled_space = _gf_false;</div><div class='del'>-	gf_boolean_t is_subvol_filled = _gf_false;</div><div class='del'>-        double usage = 0;</div><div class='del'>-</div><div class='del'>-	conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	/* Check for values above specified percent or free disk */</div><div class='del'>-	LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-	{</div><div class='del'>-		for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-			if (subvol == conf-&gt;subvolumes[i]) {</div><div class='del'>-				if (conf-&gt;disk_unit == 'p') {</div><div class='del'>-					if (conf-&gt;du_stats[i].avail_percent &lt;</div><div class='del'>-					    conf-&gt;min_free_disk) {</div><div class='del'>-						subvol_filled_space = _gf_true;</div><div class='del'>-						break;</div><div class='del'>-					}</div><div class='del'>-</div><div class='del'>-				} else {</div><div class='del'>-					if (conf-&gt;du_stats[i].avail_space &lt;</div><div class='del'>-					    conf-&gt;min_free_disk) {</div><div class='del'>-						subvol_filled_space = _gf_true;</div><div class='del'>-						break;</div><div class='del'>-					}</div><div class='del'>-				}</div><div class='del'>-				if (conf-&gt;du_stats[i].avail_inodes &lt;</div><div class='del'>-				    conf-&gt;min_free_inodes) {</div><div class='del'>-					subvol_filled_inodes = _gf_true;</div><div class='del'>-					break;</div><div class='del'>-				}</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-</div><div class='del'>-	if (subvol_filled_space &amp;&amp; conf-&gt;subvolume_status[i]) {</div><div class='del'>-		if (!(conf-&gt;du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) {</div><div class='del'>-                        usage = 100 - conf-&gt;du_stats[i].avail_percent;</div><div class='del'>-</div><div class='del'>-			gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INSUFF_SPACE,</div><div class='del'>-				"disk space on subvolume '%s' is getting "</div><div class='del'>-				"full (%.2f %%), consider adding more bricks",</div><div class='del'>-				subvol-&gt;name, usage);</div><div class='del'>-</div><div class='del'>-                        strncpy(vol_name, this-&gt;name, sizeof(vol_name));</div><div class='del'>-                        vol_name[(strlen(this-&gt;name)-4)] = '\0';</div><div class='del'>-</div><div class='del'>-                        gf_event(EVENT_DHT_DISK_USAGE,</div><div class='del'>-                                 "volume=%s;subvol=%s;usage=%.2f %%",</div><div class='del'>-                                 vol_name, subvol-&gt;name, usage);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (subvol_filled_inodes &amp;&amp; conf-&gt;subvolume_status[i]) {</div><div class='del'>-		if (!(conf-&gt;du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) {</div><div class='del'>-                        usage = 100 - conf-&gt;du_stats[i].avail_inodes;</div><div class='del'>-			gf_msg (this-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INSUFF_INODES,</div><div class='del'>-				"inodes on subvolume '%s' are at "</div><div class='del'>-				"(%.2f %%), consider adding more bricks",</div><div class='del'>-				subvol-&gt;name, usage);</div><div class='del'>-</div><div class='del'>-                        strncpy(vol_name, this-&gt;name, sizeof(vol_name));</div><div class='del'>-                        vol_name[(strlen(this-&gt;name)-4)] = '\0';</div><div class='del'>-</div><div class='del'>-                        gf_event(EVENT_DHT_INODES_USAGE,</div><div class='del'>-                                 "volume=%s;subvol=%s;usage=%.2f %%",</div><div class='del'>-                                  vol_name, subvol-&gt;name, usage);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	is_subvol_filled = (subvol_filled_space || subvol_filled_inodes);</div><div class='del'>-</div><div class='del'>-	return is_subvol_filled;</div><div class='del'>-}</div><div class='add'>+    int i = 0;</div><div class='add'>+    char vol_name[256];</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_boolean_t subvol_filled_inodes = _gf_false;</div><div class='add'>+    gf_boolean_t subvol_filled_space = _gf_false;</div><div class='add'>+    gf_boolean_t is_subvol_filled = _gf_false;</div><div class='add'>+    double usage = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Check for values above specified percent or free disk */</div><div class='add'>+    LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (subvol == conf-&gt;subvolumes[i]) {</div><div class='add'>+                if (conf-&gt;disk_unit == 'p') {</div><div class='add'>+                    if (conf-&gt;du_stats[i].avail_percent &lt; conf-&gt;min_free_disk) {</div><div class='add'>+                        subvol_filled_space = _gf_true;</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                } else {</div><div class='add'>+                    if (conf-&gt;du_stats[i].avail_space &lt; conf-&gt;min_free_disk) {</div><div class='add'>+                        subvol_filled_space = _gf_true;</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+                if (conf-&gt;du_stats[i].avail_inodes &lt; conf-&gt;min_free_inodes) {</div><div class='add'>+                    subvol_filled_inodes = _gf_true;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='add'>+    if (subvol_filled_space &amp;&amp; conf-&gt;subvolume_status[i]) {</div><div class='add'>+        if (!(conf-&gt;du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) {</div><div class='add'>+            usage = 100 - conf-&gt;du_stats[i].avail_percent;</div><div class='ctx'> </div><div class='del'>-/*Get the best subvolume to create the file in*/</div><div class='del'>-xlator_t *</div><div class='del'>-dht_free_disk_available_subvol (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                                dht_local_t *local)</div><div class='del'>-{</div><div class='del'>-	xlator_t   *avail_subvol = NULL;</div><div class='del'>-	dht_conf_t *conf = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        loc_t      *loc = NULL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_SUBVOL_INSUFF_SPACE,</div><div class='add'>+                   "disk space on subvolume '%s' is getting "</div><div class='add'>+                   "full (%.2f %%), consider adding more bricks",</div><div class='add'>+                   subvol-&gt;name, usage);</div><div class='ctx'> </div><div class='del'>-	conf = this-&gt;private;</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-        loc = &amp;local-&gt;loc;</div><div class='del'>-        if (!local-&gt;layout) {</div><div class='del'>-                layout = dht_layout_get (this, loc-&gt;parent);</div><div class='del'>-</div><div class='del'>-                if (!layout) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Missing layout. path=%s,"</div><div class='del'>-                                      " parent gfid = %s", loc-&gt;path,</div><div class='del'>-                                      uuid_utoa (loc-&gt;parent-&gt;gfid));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                layout = dht_layout_ref (this, local-&gt;layout);</div><div class='del'>-        }</div><div class='add'>+            strncpy(vol_name, this-&gt;name, sizeof(vol_name));</div><div class='add'>+            vol_name[(strlen(this-&gt;name) - 4)] = '\0';</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-	{</div><div class='del'>-                avail_subvol = dht_subvol_with_free_space_inodes(this, subvol, NULL,</div><div class='del'>-                                                                 layout, 0);</div><div class='del'>-                if(!avail_subvol)</div><div class='del'>-                {</div><div class='del'>-                        avail_subvol = dht_subvol_maxspace_nonzeroinode(this,</div><div class='del'>-                                                                        subvol,</div><div class='del'>-                                                                        layout);</div><div class='del'>-                }</div><div class='add'>+            gf_event(EVENT_DHT_DISK_USAGE, "volume=%s;subvol=%s;usage=%.2f %%",</div><div class='add'>+                     vol_name, subvol-&gt;name, usage);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (subvol_filled_inodes &amp;&amp; conf-&gt;subvolume_status[i]) {</div><div class='add'>+        if (!(conf-&gt;du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) {</div><div class='add'>+            usage = 100 - conf-&gt;du_stats[i].avail_inodes;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_CRITICAL, 0, DHT_MSG_SUBVOL_INSUFF_INODES,</div><div class='add'>+                   "inodes on subvolume '%s' are at "</div><div class='add'>+                   "(%.2f %%), consider adding more bricks",</div><div class='add'>+                   subvol-&gt;name, usage);</div><div class='add'>+</div><div class='add'>+            strncpy(vol_name, this-&gt;name, sizeof(vol_name));</div><div class='add'>+            vol_name[(strlen(this-&gt;name) - 4)] = '\0';</div><div class='add'>+</div><div class='add'>+            gf_event(EVENT_DHT_INODES_USAGE,</div><div class='add'>+                     "volume=%s;subvol=%s;usage=%.2f %%", vol_name,</div><div class='add'>+                     subvol-&gt;name, usage);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	}</div><div class='del'>-	UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-out:</div><div class='del'>-	if (!avail_subvol) {</div><div class='del'>-		gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-		              "No subvolume has enough free space \</div><div class='del'>-                              and/or inodes to create");</div><div class='del'>-                avail_subvol = subvol;</div><div class='del'>-	}</div><div class='add'>+    is_subvol_filled = (subvol_filled_space || subvol_filled_inodes);</div><div class='ctx'> </div><div class='del'>-        if (layout)</div><div class='del'>-                dht_layout_unref (this, layout);</div><div class='del'>-	return avail_subvol;</div><div class='add'>+    return is_subvol_filled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static inline</div><div class='del'>-int32_t dht_subvol_has_err (dht_conf_t *conf, xlator_t *this, xlator_t *ignore,</div><div class='del'>-                            dht_layout_t *layout)</div><div class='add'>+/*Get the best subvolume to create the file in*/</div><div class='add'>+xlator_t *</div><div class='add'>+dht_free_disk_available_subvol(xlator_t *this, xlator_t *subvol,</div><div class='add'>+                               dht_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int i   = 0;</div><div class='del'>-</div><div class='del'>-        if (!this || !layout)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* this check is meant for rebalance process. The source of the file</div><div class='del'>-         * should be ignored for space check */</div><div class='del'>-        if (this == ignore) {</div><div class='del'>-                goto out;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+    if (!local-&gt;layout) {</div><div class='add'>+        layout = dht_layout_get(this, loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+        if (!layout) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Missing layout. path=%s,"</div><div class='add'>+                         " parent gfid = %s",</div><div class='add'>+                         loc-&gt;path, uuid_utoa(loc-&gt;parent-&gt;gfid));</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        layout = dht_layout_ref(this, local-&gt;layout);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    {</div><div class='add'>+        avail_subvol = dht_subvol_with_free_space_inodes(this, subvol, NULL,</div><div class='add'>+                                                         layout, 0);</div><div class='add'>+        if (!avail_subvol) {</div><div class='add'>+            avail_subvol = dht_subvol_maxspace_nonzeroinode(this, subvol,</div><div class='add'>+                                                            layout);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+out:</div><div class='add'>+    if (!avail_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "No subvolume has enough free space \</div><div class='add'>+                              and/or inodes to create");</div><div class='add'>+        avail_subvol = subvol;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (layout)</div><div class='add'>+        dht_layout_unref(this, layout);</div><div class='add'>+    return avail_subvol;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        /* check if subvol has layout errors, before selecting it */</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (!strcmp (layout-&gt;list[i].xlator-&gt;name, this-&gt;name) &amp;&amp;</div><div class='del'>-                     (layout-&gt;list[i].err != 0)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+static inline int32_t</div><div class='add'>+dht_subvol_has_err(dht_conf_t *conf, xlator_t *this, xlator_t *ignore,</div><div class='add'>+                   dht_layout_t *layout)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!this || !layout)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* this check is meant for rebalance process. The source of the file</div><div class='add'>+     * should be ignored for space check */</div><div class='add'>+    if (this == ignore) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* check if subvol has layout errors, before selecting it */</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (!strcmp(layout-&gt;list[i].xlator-&gt;name, this-&gt;name) &amp;&amp;</div><div class='add'>+            (layout-&gt;list[i].err != 0)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* discard decommissioned subvol */</div><div class='del'>-        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='del'>-                            conf-&gt;decommissioned_bricks[i] == this) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    /* discard decommissioned subvol */</div><div class='add'>+    if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='add'>+                conf-&gt;decommissioned_bricks[i] == this) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Get subvolume which has both space and inodes more than the min criteria*/</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_subvol_with_free_space_inodes(xlator_t *this, xlator_t *subvol, xlator_t *ignore,</div><div class='del'>-                                  dht_layout_t *layout, uint64_t filesize)</div><div class='add'>+dht_subvol_with_free_space_inodes(xlator_t *this, xlator_t *subvol,</div><div class='add'>+                                  xlator_t *ignore, dht_layout_t *layout,</div><div class='add'>+                                  uint64_t filesize)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        double max = 0;</div><div class='del'>-        double max_inodes = 0;</div><div class='del'>-        int    ignore_subvol = 0;</div><div class='del'>-        uint64_t total_blocks = 0;</div><div class='del'>-        uint64_t avail_blocks = 0;</div><div class='del'>-        uint64_t frsize = 0;</div><div class='del'>-        double   post_availspace = 0;</div><div class='del'>-        double   post_percent = 0;</div><div class='del'>-</div><div class='del'>-        xlator_t *avail_subvol = NULL;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for(i=0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                /* check if subvol has layout errors and also it is not a</div><div class='del'>-                 * decommissioned brick, before selecting it */</div><div class='del'>-                ignore_subvol = dht_subvol_has_err (conf, conf-&gt;subvolumes[i],</div><div class='del'>-                                                    ignore, layout);</div><div class='del'>-                if (ignore_subvol)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if ((conf-&gt;disk_unit == 'p') &amp;&amp;</div><div class='del'>-                    (conf-&gt;du_stats[i].avail_percent &gt; conf-&gt;min_free_disk) &amp;&amp;</div><div class='del'>-                    (conf-&gt;du_stats[i].avail_inodes  &gt; conf-&gt;min_free_inodes)) {</div><div class='del'>-                        if ((conf-&gt;du_stats[i].avail_inodes &gt; max_inodes) ||</div><div class='del'>-                            (conf-&gt;du_stats[i].avail_percent &gt; max)) {</div><div class='del'>-                                max = conf-&gt;du_stats[i].avail_percent;</div><div class='del'>-                                max_inodes = conf-&gt;du_stats[i].avail_inodes;</div><div class='del'>-                                avail_subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                                total_blocks = conf-&gt;du_stats[i].total_blocks;</div><div class='del'>-                                avail_blocks = conf-&gt;du_stats[i].avail_blocks;</div><div class='del'>-                                frsize       = conf-&gt;du_stats[i].frsize;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((conf-&gt;disk_unit != 'p') &amp;&amp;</div><div class='del'>-                    (conf-&gt;du_stats[i].avail_space &gt; conf-&gt;min_free_disk) &amp;&amp;</div><div class='del'>-                    (conf-&gt;du_stats[i].avail_inodes  &gt; conf-&gt;min_free_inodes)) {</div><div class='del'>-                        if ((conf-&gt;du_stats[i].avail_inodes &gt; max_inodes) ||</div><div class='del'>-                            (conf-&gt;du_stats[i].avail_space &gt; max)) {</div><div class='del'>-                                max = conf-&gt;du_stats[i].avail_space;</div><div class='del'>-                                max_inodes = conf-&gt;du_stats[i].avail_inodes;</div><div class='del'>-                                avail_subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    double max = 0;</div><div class='add'>+    double max_inodes = 0;</div><div class='add'>+    int ignore_subvol = 0;</div><div class='add'>+    uint64_t total_blocks = 0;</div><div class='add'>+    uint64_t avail_blocks = 0;</div><div class='add'>+    uint64_t frsize = 0;</div><div class='add'>+    double post_availspace = 0;</div><div class='add'>+    double post_percent = 0;</div><div class='add'>+</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        /* check if subvol has layout errors and also it is not a</div><div class='add'>+         * decommissioned brick, before selecting it */</div><div class='add'>+        ignore_subvol = dht_subvol_has_err(conf, conf-&gt;subvolumes[i], ignore,</div><div class='add'>+                                           layout);</div><div class='add'>+        if (ignore_subvol)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if ((conf-&gt;disk_unit == 'p') &amp;&amp;</div><div class='add'>+            (conf-&gt;du_stats[i].avail_percent &gt; conf-&gt;min_free_disk) &amp;&amp;</div><div class='add'>+            (conf-&gt;du_stats[i].avail_inodes &gt; conf-&gt;min_free_inodes)) {</div><div class='add'>+            if ((conf-&gt;du_stats[i].avail_inodes &gt; max_inodes) ||</div><div class='add'>+                (conf-&gt;du_stats[i].avail_percent &gt; max)) {</div><div class='add'>+                max = conf-&gt;du_stats[i].avail_percent;</div><div class='add'>+                max_inodes = conf-&gt;du_stats[i].avail_inodes;</div><div class='add'>+                avail_subvol = conf-&gt;subvolumes[i];</div><div class='add'>+                total_blocks = conf-&gt;du_stats[i].total_blocks;</div><div class='add'>+                avail_blocks = conf-&gt;du_stats[i].avail_blocks;</div><div class='add'>+                frsize = conf-&gt;du_stats[i].frsize;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (avail_subvol) {</div><div class='del'>-                if (conf-&gt;disk_unit == 'p') {</div><div class='del'>-                        post_availspace = (avail_blocks * frsize) - filesize;</div><div class='del'>-                        post_percent = (post_availspace * 100) / (total_blocks * frsize);</div><div class='del'>-                        if (post_percent &lt; conf-&gt;min_free_disk)</div><div class='del'>-                                avail_subvol = NULL;</div><div class='del'>-                }</div><div class='del'>-                if (conf-&gt;disk_unit != 'p') {</div><div class='del'>-                        if ((max - filesize) &lt; conf-&gt;min_free_disk)</div><div class='del'>-                                avail_subvol = NULL;</div><div class='del'>-                }</div><div class='add'>+        if ((conf-&gt;disk_unit != 'p') &amp;&amp;</div><div class='add'>+            (conf-&gt;du_stats[i].avail_space &gt; conf-&gt;min_free_disk) &amp;&amp;</div><div class='add'>+            (conf-&gt;du_stats[i].avail_inodes &gt; conf-&gt;min_free_inodes)) {</div><div class='add'>+            if ((conf-&gt;du_stats[i].avail_inodes &gt; max_inodes) ||</div><div class='add'>+                (conf-&gt;du_stats[i].avail_space &gt; max)) {</div><div class='add'>+                max = conf-&gt;du_stats[i].avail_space;</div><div class='add'>+                max_inodes = conf-&gt;du_stats[i].avail_inodes;</div><div class='add'>+                avail_subvol = conf-&gt;subvolumes[i];</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (avail_subvol) {</div><div class='add'>+        if (conf-&gt;disk_unit == 'p') {</div><div class='add'>+            post_availspace = (avail_blocks * frsize) - filesize;</div><div class='add'>+            post_percent = (post_availspace * 100) / (total_blocks * frsize);</div><div class='add'>+            if (post_percent &lt; conf-&gt;min_free_disk)</div><div class='add'>+                avail_subvol = NULL;</div><div class='add'>+        }</div><div class='add'>+        if (conf-&gt;disk_unit != 'p') {</div><div class='add'>+            if ((max - filesize) &lt; conf-&gt;min_free_disk)</div><div class='add'>+                avail_subvol = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return avail_subvol;</div><div class='add'>+    return avail_subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Get subvol which has at least one inode and maximum space */</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_subvol_maxspace_nonzeroinode (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                                  dht_layout_t *layout)</div><div class='add'>+dht_subvol_maxspace_nonzeroinode(xlator_t *this, xlator_t *subvol,</div><div class='add'>+                                 dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int         i = 0;</div><div class='del'>-        double      max = 0;</div><div class='del'>-        int         ignore_subvol = 0;</div><div class='del'>-</div><div class='del'>-        xlator_t   *avail_subvol = NULL;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                /* check if subvol has layout errors and also it is not a</div><div class='del'>-                 * decommissioned brick, before selecting it*/</div><div class='del'>-</div><div class='del'>-                ignore_subvol = dht_subvol_has_err (conf, conf-&gt;subvolumes[i], NULL,</div><div class='del'>-                                                    layout);</div><div class='del'>-                if (ignore_subvol)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (conf-&gt;disk_unit == 'p') {</div><div class='del'>-                        if ((conf-&gt;du_stats[i].avail_percent &gt; max)</div><div class='del'>-                            &amp;&amp; (conf-&gt;du_stats[i].avail_inodes &gt; 0 )) {</div><div class='del'>-                                max = conf-&gt;du_stats[i].avail_percent;</div><div class='del'>-                                avail_subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                        }</div><div class='del'>-               } else {</div><div class='del'>-                         if ((conf-&gt;du_stats[i].avail_space &gt; max)</div><div class='del'>-                            &amp;&amp; (conf-&gt;du_stats[i].avail_inodes &gt; 0)) {</div><div class='del'>-                                 max = conf-&gt;du_stats[i].avail_space;</div><div class='del'>-                                 avail_subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                         }</div><div class='del'>-               }</div><div class='add'>+    int i = 0;</div><div class='add'>+    double max = 0;</div><div class='add'>+    int ignore_subvol = 0;</div><div class='add'>+</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        /* check if subvol has layout errors and also it is not a</div><div class='add'>+         * decommissioned brick, before selecting it*/</div><div class='add'>+</div><div class='add'>+        ignore_subvol = dht_subvol_has_err(conf, conf-&gt;subvolumes[i], NULL,</div><div class='add'>+                                           layout);</div><div class='add'>+        if (ignore_subvol)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (conf-&gt;disk_unit == 'p') {</div><div class='add'>+            if ((conf-&gt;du_stats[i].avail_percent &gt; max) &amp;&amp;</div><div class='add'>+                (conf-&gt;du_stats[i].avail_inodes &gt; 0)) {</div><div class='add'>+                max = conf-&gt;du_stats[i].avail_percent;</div><div class='add'>+                avail_subvol = conf-&gt;subvolumes[i];</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if ((conf-&gt;du_stats[i].avail_space &gt; max) &amp;&amp;</div><div class='add'>+                (conf-&gt;du_stats[i].avail_inodes &gt; 0)) {</div><div class='add'>+                max = conf-&gt;du_stats[i].avail_space;</div><div class='add'>+                avail_subvol = conf-&gt;subvolumes[i];</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return avail_subvol;</div><div class='add'>+    return avail_subvol;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-hashfn.c b/xlators/cluster/dht/src/dht-hashfn.c<br/>index f8e614a40aa..2f15c0370cc 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-hashfn.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-hashfn.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-hashfn.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-hashfn.c</a></div><div class='hunk'>@@ -8,104 +8,98 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "glusterfs.h"</div><div class='ctx'> #include "xlator.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> #include "hashfn.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_hash_compute_internal (int type, const char *name, uint32_t *hash_p)</div><div class='add'>+dht_hash_compute_internal(int type, const char *name, uint32_t *hash_p)</div><div class='ctx'> {</div><div class='del'>-        int      ret = 0;</div><div class='del'>-        uint32_t hash = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t hash = 0;</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case DHT_HASH_TYPE_DM:</div><div class='ctx'>         case DHT_HASH_TYPE_DM_USER:</div><div class='del'>-                hash = gf_dm_hashfn (name, strlen (name));</div><div class='del'>-                break;</div><div class='add'>+            hash = gf_dm_hashfn(name, strlen(name));</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                *hash_p = hash;</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        *hash_p = hash;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-static</div><div class='del'>-gf_boolean_t</div><div class='del'>-dht_munge_name (const char *original, char *modified,</div><div class='del'>-                size_t len, regex_t *re)</div><div class='add'>+static gf_boolean_t</div><div class='add'>+dht_munge_name(const char *original, char *modified, size_t len, regex_t *re)</div><div class='ctx'> {</div><div class='del'>-        regmatch_t  matches[2] = {{0}, };</div><div class='del'>-        size_t      new_len    = 0;</div><div class='del'>-        int         ret        = 0;</div><div class='del'>-</div><div class='del'>-        ret = regexec(re, original, 2, matches, 0);</div><div class='del'>-</div><div class='del'>-        if (ret != REG_NOMATCH) {</div><div class='del'>-                if (matches[1].rm_so != -1) {</div><div class='del'>-                        new_len = matches[1].rm_eo - matches[1].rm_so;</div><div class='del'>-                        /* Equal would fail due to the NUL at the end. */</div><div class='del'>-                        if (new_len &lt; len) {</div><div class='del'>-                                memcpy (modified,original+matches[1].rm_so,</div><div class='del'>-                                        new_len);</div><div class='del'>-                                modified[new_len] = '\0';</div><div class='del'>-                                return _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    regmatch_t matches[2] = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+    size_t new_len = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = regexec(re, original, 2, matches, 0);</div><div class='add'>+</div><div class='add'>+    if (ret != REG_NOMATCH) {</div><div class='add'>+        if (matches[1].rm_so != -1) {</div><div class='add'>+            new_len = matches[1].rm_eo - matches[1].rm_so;</div><div class='add'>+            /* Equal would fail due to the NUL at the end. */</div><div class='add'>+            if (new_len &lt; len) {</div><div class='add'>+                memcpy(modified, original + matches[1].rm_so, new_len);</div><div class='add'>+                modified[new_len] = '\0';</div><div class='add'>+                return _gf_true;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is guaranteed safe because of how the dest was allocated. */</div><div class='del'>-        strcpy(modified, original);</div><div class='del'>-        return _gf_false;</div><div class='add'>+    /* This is guaranteed safe because of how the dest was allocated. */</div><div class='add'>+    strcpy(modified, original);</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_hash_compute (xlator_t *this, int type, const char *name, uint32_t *hash_p)</div><div class='add'>+dht_hash_compute(xlator_t *this, int type, const char *name, uint32_t *hash_p)</div><div class='ctx'> {</div><div class='del'>-        char            *rsync_friendly_name    = NULL;</div><div class='del'>-        dht_conf_t      *priv                   = NULL;</div><div class='del'>-        size_t           len                    = 0;</div><div class='del'>-        gf_boolean_t     munged                 = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;extra_regex_valid) {</div><div class='del'>-                        len = strlen(name) + 1;</div><div class='del'>-                        rsync_friendly_name = alloca(len);</div><div class='del'>-                        munged = dht_munge_name (name, rsync_friendly_name, len,</div><div class='del'>-                                                 &amp;priv-&gt;extra_regex);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!munged &amp;&amp; priv-&gt;rsync_regex_valid) {</div><div class='del'>-                        len = strlen(name) + 1;</div><div class='del'>-                        rsync_friendly_name = alloca(len);</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0, "trying regex for %s",</div><div class='del'>-                                      name);</div><div class='del'>-                        munged = dht_munge_name (name, rsync_friendly_name, len,</div><div class='del'>-                                                 &amp;priv-&gt;rsync_regex);</div><div class='del'>-                        if (munged) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "munged down to %s",</div><div class='del'>-                                              rsync_friendly_name);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    char *rsync_friendly_name = NULL;</div><div class='add'>+    dht_conf_t *priv = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    gf_boolean_t munged = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;extra_regex_valid) {</div><div class='add'>+            len = strlen(name) + 1;</div><div class='add'>+            rsync_friendly_name = alloca(len);</div><div class='add'>+            munged = dht_munge_name(name, rsync_friendly_name, len,</div><div class='add'>+                                    &amp;priv-&gt;extra_regex);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!munged) {</div><div class='del'>-                rsync_friendly_name = (char *)name;</div><div class='add'>+        if (!munged &amp;&amp; priv-&gt;rsync_regex_valid) {</div><div class='add'>+            len = strlen(name) + 1;</div><div class='add'>+            rsync_friendly_name = alloca(len);</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "trying regex for %s", name);</div><div class='add'>+            munged = dht_munge_name(name, rsync_friendly_name, len,</div><div class='add'>+                                    &amp;priv-&gt;rsync_regex);</div><div class='add'>+            if (munged) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "munged down to %s",</div><div class='add'>+                             rsync_friendly_name);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!munged) {</div><div class='add'>+        rsync_friendly_name = (char *)name;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dht_hash_compute_internal (type, rsync_friendly_name, hash_p);</div><div class='add'>+    return dht_hash_compute_internal(type, rsync_friendly_name, hash_p);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c<br/>index 403f0a0f514..6d6ec24729d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-helper.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-helper.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-helper.c</a></div><div class='hunk'>@@ -8,266 +8,249 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "glusterfs.h"</div><div class='ctx'> #include "xlator.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> #include "dht-lock.h"</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_free_fd_ctx (dht_fd_ctx_t *fd_ctx)</div><div class='add'>+dht_free_fd_ctx(dht_fd_ctx_t *fd_ctx)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (fd_ctx);</div><div class='add'>+    GF_FREE(fd_ctx);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_fd_ctx_destroy (xlator_t *this, fd_t *fd)</div><div class='add'>+dht_fd_ctx_destroy(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        dht_fd_ctx_t *fd_ctx  = NULL;</div><div class='del'>-        uint64_t      value   = 0;</div><div class='del'>-        int32_t       ret     = -1;</div><div class='add'>+    dht_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;value);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;value);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_ctx = (dht_fd_ctx_t *)value;</div><div class='del'>-        if (fd_ctx) {</div><div class='del'>-                GF_REF_PUT (fd_ctx);</div><div class='del'>-        }</div><div class='add'>+    fd_ctx = (dht_fd_ctx_t *)value;</div><div class='add'>+    if (fd_ctx) {</div><div class='add'>+        GF_REF_PUT(fd_ctx);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__dht_fd_ctx_set (xlator_t *this, fd_t *fd, xlator_t *dst)</div><div class='add'>+__dht_fd_ctx_set(xlator_t *this, fd_t *fd, xlator_t *dst)</div><div class='ctx'> {</div><div class='del'>-        dht_fd_ctx_t *fd_ctx  = NULL;</div><div class='del'>-        uint64_t      value   = 0;</div><div class='del'>-        int           ret     = -1;</div><div class='add'>+    dht_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-        fd_ctx = GF_CALLOC (1, sizeof (*fd_ctx), gf_dht_mt_fd_ctx_t);</div><div class='add'>+    fd_ctx = GF_CALLOC(1, sizeof(*fd_ctx), gf_dht_mt_fd_ctx_t);</div><div class='ctx'> </div><div class='del'>-        if (!fd_ctx) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_ctx-&gt;opened_on_dst = (uint64_t) dst;</div><div class='del'>-        GF_REF_INIT (fd_ctx, dht_free_fd_ctx);</div><div class='add'>+    fd_ctx-&gt;opened_on_dst = (uint64_t)dst;</div><div class='add'>+    GF_REF_INIT(fd_ctx, dht_free_fd_ctx);</div><div class='ctx'> </div><div class='del'>-        value = (uint64_t) fd_ctx;</div><div class='add'>+    value = (uint64_t)fd_ctx;</div><div class='ctx'> </div><div class='del'>-        ret = __fd_ctx_set (fd, this, value);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_FD_CTX_SET_FAILED,</div><div class='del'>-                        "Failed to set fd ctx in fd=0x%p", fd);</div><div class='del'>-                GF_REF_PUT (fd_ctx);</div><div class='del'>-        }</div><div class='add'>+    ret = __fd_ctx_set(fd, this, value);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_FD_CTX_SET_FAILED,</div><div class='add'>+               "Failed to set fd ctx in fd=0x%p", fd);</div><div class='add'>+        GF_REF_PUT(fd_ctx);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fd_ctx_set (xlator_t *this, fd_t *fd, xlator_t *dst)</div><div class='add'>+dht_fd_ctx_set(xlator_t *this, fd_t *fd, xlator_t *dst)</div><div class='ctx'> {</div><div class='del'>-        dht_fd_ctx_t *fd_ctx  = NULL;</div><div class='del'>-        uint64_t      value   = 0;</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __fd_ctx_get (fd, this, &amp;value);</div><div class='del'>-                if (ret &amp;&amp; value) {</div><div class='del'>-</div><div class='del'>-                        fd_ctx = (dht_fd_ctx_t *) value;</div><div class='del'>-                        if (fd_ctx-&gt;opened_on_dst == (uint64_t) dst)  {</div><div class='del'>-                                /* This could happen due to racing</div><div class='del'>-                                 * check_progress tasks*/</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        } else {</div><div class='del'>-                                /* This would be a big problem*/</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_INVALID_VALUE,</div><div class='del'>-                                        "Different dst found in the fd ctx");</div><div class='del'>-</div><div class='del'>-                                /* Overwrite and hope for the best*/</div><div class='del'>-                                fd_ctx-&gt;opened_on_dst = (uint64_t)dst;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='add'>+    dht_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __fd_ctx_get(fd, this, &amp;value);</div><div class='add'>+        if (ret &amp;&amp; value) {</div><div class='add'>+            fd_ctx = (dht_fd_ctx_t *)value;</div><div class='add'>+            if (fd_ctx-&gt;opened_on_dst == (uint64_t)dst) {</div><div class='add'>+                /* This could happen due to racing</div><div class='add'>+                 * check_progress tasks*/</div><div class='add'>+                goto unlock;</div><div class='add'>+            } else {</div><div class='add'>+                /* This would be a big problem*/</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_INVALID_VALUE,</div><div class='add'>+                       "Different dst found in the fd ctx");</div><div class='ctx'> </div><div class='del'>-                }</div><div class='del'>-                ret = __dht_fd_ctx_set (this, fd, dst);</div><div class='add'>+                /* Overwrite and hope for the best*/</div><div class='add'>+                fd_ctx-&gt;opened_on_dst = (uint64_t)dst;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        ret = __dht_fd_ctx_set(this, fd, dst);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static</div><div class='del'>-dht_fd_ctx_t *</div><div class='del'>-dht_fd_ctx_get (xlator_t *this, fd_t *fd)</div><div class='add'>+static dht_fd_ctx_t *</div><div class='add'>+dht_fd_ctx_get(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        dht_fd_ctx_t *fd_ctx  = NULL;</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-        uint64_t      tmp_val = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __fd_ctx_get (fd, this, &amp;tmp_val);</div><div class='del'>-                if ((ret &lt; 0) || (tmp_val == 0)) {</div><div class='del'>-                        UNLOCK (&amp;fd-&gt;lock);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    dht_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t tmp_val = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-                fd_ctx = (dht_fd_ctx_t *)tmp_val;</div><div class='del'>-                GF_REF_GET (fd_ctx);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __fd_ctx_get(fd, this, &amp;tmp_val);</div><div class='add'>+        if ((ret &lt; 0) || (tmp_val == 0)) {</div><div class='add'>+            UNLOCK(&amp;fd-&gt;lock);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+</div><div class='add'>+        fd_ctx = (dht_fd_ctx_t *)tmp_val;</div><div class='add'>+        GF_REF_GET(fd_ctx);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fd_ctx;</div><div class='add'>+    return fd_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_fd_open_on_dst (xlator_t *this, fd_t *fd, xlator_t *dst)</div><div class='add'>+dht_fd_open_on_dst(xlator_t *this, fd_t *fd, xlator_t *dst)</div><div class='ctx'> {</div><div class='del'>-        dht_fd_ctx_t  *fd_ctx  = NULL;</div><div class='del'>-        gf_boolean_t   opened  = _gf_false;</div><div class='add'>+    dht_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    gf_boolean_t opened = _gf_false;</div><div class='ctx'> </div><div class='del'>-        fd_ctx = dht_fd_ctx_get (this, fd);</div><div class='add'>+    fd_ctx = dht_fd_ctx_get(this, fd);</div><div class='ctx'> </div><div class='del'>-        if (fd_ctx) {</div><div class='del'>-                if (fd_ctx-&gt;opened_on_dst == (uint64_t) dst) {</div><div class='del'>-                        opened = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                GF_REF_PUT (fd_ctx);</div><div class='add'>+    if (fd_ctx) {</div><div class='add'>+        if (fd_ctx-&gt;opened_on_dst == (uint64_t)dst) {</div><div class='add'>+            opened = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+        GF_REF_PUT(fd_ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return opened;</div><div class='add'>+    return opened;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_free_mig_info (void *data)</div><div class='add'>+dht_free_mig_info(void *data)</div><div class='ctx'> {</div><div class='del'>-        dht_migrate_info_t *miginfo = NULL;</div><div class='add'>+    dht_migrate_info_t *miginfo = NULL;</div><div class='ctx'> </div><div class='del'>-        miginfo = data;</div><div class='del'>-        GF_FREE (miginfo);</div><div class='add'>+    miginfo = data;</div><div class='add'>+    GF_FREE(miginfo);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_inode_ctx_set_mig_info (xlator_t *this, inode_t *inode,</div><div class='del'>-                            xlator_t *src_subvol, xlator_t *dst_subvol)</div><div class='add'>+dht_inode_ctx_set_mig_info(xlator_t *this, inode_t *inode, xlator_t *src_subvol,</div><div class='add'>+                           xlator_t *dst_subvol)</div><div class='ctx'> {</div><div class='del'>-        dht_migrate_info_t *miginfo = NULL;</div><div class='del'>-        uint64_t            value   = 0;</div><div class='del'>-        int                 ret     = -1;</div><div class='add'>+    dht_migrate_info_t *miginfo = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        miginfo = GF_CALLOC (1, sizeof (*miginfo), gf_dht_mt_miginfo_t);</div><div class='del'>-        if (miginfo == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    miginfo = GF_CALLOC(1, sizeof(*miginfo), gf_dht_mt_miginfo_t);</div><div class='add'>+    if (miginfo == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        miginfo-&gt;src_subvol = src_subvol;</div><div class='del'>-        miginfo-&gt;dst_subvol = dst_subvol;</div><div class='del'>-        GF_REF_INIT (miginfo, dht_free_mig_info);</div><div class='add'>+    miginfo-&gt;src_subvol = src_subvol;</div><div class='add'>+    miginfo-&gt;dst_subvol = dst_subvol;</div><div class='add'>+    GF_REF_INIT(miginfo, dht_free_mig_info);</div><div class='ctx'> </div><div class='del'>-        value = (uint64_t) miginfo;</div><div class='add'>+    value = (uint64_t)miginfo;</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_set1 (inode, this, &amp;value);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                GF_REF_PUT (miginfo);</div><div class='del'>-        }</div><div class='add'>+    ret = inode_ctx_set1(inode, this, &amp;value);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        GF_REF_PUT(miginfo);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_get_mig_info (xlator_t *this, inode_t *inode,</div><div class='del'>-                            xlator_t **src_subvol, xlator_t **dst_subvol)</div><div class='add'>+dht_inode_ctx_get_mig_info(xlator_t *this, inode_t *inode,</div><div class='add'>+                           xlator_t **src_subvol, xlator_t **dst_subvol)</div><div class='ctx'> {</div><div class='del'>-        int                 ret         = -1;</div><div class='del'>-        uint64_t            tmp_miginfo = 0;</div><div class='del'>-        dht_migrate_info_t *miginfo     = NULL;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret =  __inode_ctx_get1 (inode, this, &amp;tmp_miginfo);</div><div class='del'>-                if ((ret &lt; 0) || (tmp_miginfo == 0)) {</div><div class='del'>-                        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t tmp_miginfo = 0;</div><div class='add'>+    dht_migrate_info_t *miginfo = NULL;</div><div class='ctx'> </div><div class='del'>-                miginfo = (dht_migrate_info_t *)tmp_miginfo;</div><div class='del'>-                GF_REF_GET (miginfo);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get1(inode, this, &amp;tmp_miginfo);</div><div class='add'>+        if ((ret &lt; 0) || (tmp_miginfo == 0)) {</div><div class='add'>+            UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (src_subvol)</div><div class='del'>-                *src_subvol = miginfo-&gt;src_subvol;</div><div class='add'>+        miginfo = (dht_migrate_info_t *)tmp_miginfo;</div><div class='add'>+        GF_REF_GET(miginfo);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (src_subvol)</div><div class='add'>+        *src_subvol = miginfo-&gt;src_subvol;</div><div class='ctx'> </div><div class='del'>-        if (dst_subvol)</div><div class='del'>-                *dst_subvol = miginfo-&gt;dst_subvol;</div><div class='add'>+    if (dst_subvol)</div><div class='add'>+        *dst_subvol = miginfo-&gt;dst_subvol;</div><div class='ctx'> </div><div class='del'>-        GF_REF_PUT (miginfo);</div><div class='add'>+    GF_REF_PUT(miginfo);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_mig_info_is_invalid (xlator_t *current, xlator_t *src_subvol,</div><div class='del'>-                      xlator_t *dst_subvol)</div><div class='add'>+dht_mig_info_is_invalid(xlator_t *current, xlator_t *src_subvol,</div><div class='add'>+                        xlator_t *dst_subvol)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-/* Not set</div><div class='del'>- */</div><div class='del'>-        if (!src_subvol || !dst_subvol)</div><div class='del'>-                return _gf_true;</div><div class='del'>-</div><div class='del'>-/* Invalid scenarios:</div><div class='del'>- * The src_subvol does not match the subvol on which the current op was sent</div><div class='del'>- * so the cached subvol has changed between the last mig_info_set and now.</div><div class='del'>- * src_subvol == dst_subvol. The file was migrated without any FOP detecting</div><div class='del'>- * a P2 so the old dst is now the current subvol.</div><div class='del'>- *</div><div class='del'>- * There is still one scenario where the info could be outdated - if</div><div class='del'>- * file has undergone multiple migrations and ends up on the same src_subvol</div><div class='del'>- * on which the mig_info was first set.</div><div class='del'>- */</div><div class='del'>-        if ((current == dst_subvol) || (current != src_subvol))</div><div class='del'>-                return _gf_true;</div><div class='del'>-</div><div class='del'>-        return _gf_false;</div><div class='add'>+    /* Not set</div><div class='add'>+     */</div><div class='add'>+    if (!src_subvol || !dst_subvol)</div><div class='add'>+        return _gf_true;</div><div class='add'>+</div><div class='add'>+    /* Invalid scenarios:</div><div class='add'>+     * The src_subvol does not match the subvol on which the current op was sent</div><div class='add'>+     * so the cached subvol has changed between the last mig_info_set and now.</div><div class='add'>+     * src_subvol == dst_subvol. The file was migrated without any FOP detecting</div><div class='add'>+     * a P2 so the old dst is now the current subvol.</div><div class='add'>+     *</div><div class='add'>+     * There is still one scenario where the info could be outdated - if</div><div class='add'>+     * file has undergone multiple migrations and ends up on the same src_subvol</div><div class='add'>+     * on which the mig_info was first set.</div><div class='add'>+     */</div><div class='add'>+    if ((current == dst_subvol) || (current != src_subvol))</div><div class='add'>+        return _gf_true;</div><div class='add'>+</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Used to check if fd fops have the fd opened on the cached subvol</div><div class='ctx'>  * This is required when:</div><div class='ctx'>  * 1. an fd is opened on FILE1 on subvol1</div><div class='hunk'>@@ -279,337 +262,304 @@ dht_mig_info_is_invalid (xlator_t *current, xlator_t *src_subvol,</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_check_and_open_fd_on_subvol_complete (int ret, call_frame_t *frame,</div><div class='del'>-                                          void *data)</div><div class='add'>+dht_check_and_open_fd_on_subvol_complete(int ret, call_frame_t *frame,</div><div class='add'>+                                         void *data)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_fop_t     fop     = 0;</div><div class='del'>-        dht_local_t        *local   = NULL;</div><div class='del'>-        xlator_t           *subvol  = NULL;</div><div class='del'>-        xlator_t           *this  = NULL;</div><div class='del'>-        fd_t               *fd      = NULL;</div><div class='del'>-        int                 op_errno = -1;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        fop = local-&gt;fop;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        fd = local-&gt;fd;</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = local-&gt;op_errno;</div><div class='del'>-                goto handle_err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (fop) {</div><div class='del'>-</div><div class='add'>+    glusterfs_fop_t fop = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    fop = local-&gt;fop;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    fd = local-&gt;fd;</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = local-&gt;op_errno;</div><div class='add'>+        goto handle_err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (fop) {</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_writev_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;writev, fd,</div><div class='del'>-                                   local-&gt;rebalance.vector,</div><div class='del'>-                                   local-&gt;rebalance.count,</div><div class='del'>-                                   local-&gt;rebalance.offset,</div><div class='del'>-                                   local-&gt;rebalance.flags,</div><div class='del'>-                                   local-&gt;rebalance.iobref, local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_writev_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;writev, fd, local-&gt;rebalance.vector,</div><div class='add'>+                              local-&gt;rebalance.count, local-&gt;rebalance.offset,</div><div class='add'>+                              local-&gt;rebalance.flags, local-&gt;rebalance.iobref,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FLUSH:</div><div class='del'>-                STACK_WIND (frame, dht_flush_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;flush, fd, local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND(frame, dht_flush_cbk, subvol, subvol-&gt;fops-&gt;flush, fd,</div><div class='add'>+                       local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSETATTR:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fsetattr, fd,</div><div class='del'>-                                   &amp;local-&gt;rebalance.stbuf,</div><div class='del'>-                                   local-&gt;rebalance.flags,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_file_setattr_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;fsetattr, fd,</div><div class='add'>+                              &amp;local-&gt;rebalance.stbuf, local-&gt;rebalance.flags,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_zerofill_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;zerofill, fd,</div><div class='del'>-                                   local-&gt;rebalance.offset,</div><div class='del'>-                                   local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_zerofill_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;zerofill, fd,</div><div class='add'>+                              local-&gt;rebalance.offset, local-&gt;rebalance.size,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_DISCARD:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_discard_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;discard, local-&gt;fd,</div><div class='del'>-                                   local-&gt;rebalance.offset,</div><div class='del'>-                                   local-&gt;rebalance.size,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_discard_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;discard, local-&gt;fd,</div><div class='add'>+                              local-&gt;rebalance.offset, local-&gt;rebalance.size,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FALLOCATE:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_fallocate_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;fallocate, fd,</div><div class='del'>-                                   local-&gt;rebalance.flags,</div><div class='del'>-                                   local-&gt;rebalance.offset,</div><div class='del'>-                                   local-&gt;rebalance.size,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_fallocate_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;fallocate, fd,</div><div class='add'>+                              local-&gt;rebalance.flags, local-&gt;rebalance.offset,</div><div class='add'>+                              local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FTRUNCATE:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;ftruncate, fd,</div><div class='del'>-                                   local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_truncate_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;ftruncate, fd,</div><div class='add'>+                              local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSYNC:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_fsync_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;fsync, local-&gt;fd,</div><div class='del'>-                                   local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_fsync_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;fsync, local-&gt;fd,</div><div class='add'>+                              local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_READ:</div><div class='del'>-                STACK_WIND (frame, dht_readv_cbk, subvol, subvol-&gt;fops-&gt;readv,</div><div class='del'>-                            local-&gt;fd, local-&gt;rebalance.size,</div><div class='del'>-                            local-&gt;rebalance.offset,</div><div class='del'>-                            local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND(frame, dht_readv_cbk, subvol, subvol-&gt;fops-&gt;readv,</div><div class='add'>+                       local-&gt;fd, local-&gt;rebalance.size,</div><div class='add'>+                       local-&gt;rebalance.offset, local-&gt;rebalance.flags,</div><div class='add'>+                       local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSTAT:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fstat, fd,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_file_attr_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;fstat, fd, local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setxattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='del'>-                                   local-&gt;rebalance.xattr,</div><div class='del'>-                                   local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='del'>-                break;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_file_setxattr_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+                              local-&gt;rebalance.xattr, local-&gt;rebalance.flags,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_removexattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                                   local-&gt;fd, local-&gt;key, local-&gt;xattr_req);</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_file_removexattr_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;fremovexattr, local-&gt;fd, local-&gt;key,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_UNKNOWN_FOP,</div><div class='del'>-                        "Unknown FOP on fd (%p) on file %s @ %s",</div><div class='del'>-                        fd, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        subvol-&gt;name);</div><div class='del'>-                break;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_UNKNOWN_FOP,</div><div class='add'>+                   "Unknown FOP on fd (%p) on file %s @ %s", fd,</div><div class='add'>+                   uuid_utoa(fd-&gt;inode-&gt;gfid), subvol-&gt;name);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='del'>-        goto out;</div><div class='del'>-</div><div class='del'>-        /* Could not open the fd on the dst. Unwind */</div><div class='add'>+    /* Could not open the fd on the dst. Unwind */</div><div class='ctx'> </div><div class='ctx'> handle_err:</div><div class='ctx'> </div><div class='del'>-        switch (fop) {</div><div class='del'>-</div><div class='add'>+    switch (fop) {</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='del'>-                DHT_STACK_UNWIND (writev, frame, -1,</div><div class='del'>-                                  op_errno, NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FLUSH:</div><div class='del'>-                DHT_STACK_UNWIND (flush, frame, -1, op_errno, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(flush, frame, -1, op_errno, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSETATTR:</div><div class='del'>-                DHT_STACK_UNWIND (fsetattr, frame, -1, op_errno,</div><div class='del'>-                                  NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='del'>-                DHT_STACK_UNWIND (zerofill, frame, -1, op_errno,</div><div class='del'>-                                  NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_DISCARD:</div><div class='del'>-                DHT_STACK_UNWIND (discard, frame, -1, op_errno,</div><div class='del'>-                                  NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FALLOCATE:</div><div class='del'>-                DHT_STACK_UNWIND (fallocate, frame, -1, op_errno,</div><div class='del'>-                                  NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FTRUNCATE:</div><div class='del'>-                DHT_STACK_UNWIND (ftruncate, frame, -1, op_errno,</div><div class='del'>-                                  NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSYNC:</div><div class='del'>-                DHT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_READ:</div><div class='del'>-                DHT_STACK_UNWIND (readv, frame, -1, op_errno, NULL,</div><div class='del'>-                                  0, NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(readv, frame, -1, op_errno, NULL, 0, NULL, NULL,</div><div class='add'>+                             NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSTAT:</div><div class='del'>-                DHT_STACK_UNWIND (fstat, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(fstat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-                DHT_STACK_UNWIND (fsetxattr, frame, -1, op_errno, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(fsetxattr, frame, -1, op_errno, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='del'>-                DHT_STACK_UNWIND (fremovexattr, frame, -1, op_errno, NULL);</div><div class='del'>-                break;</div><div class='add'>+            DHT_STACK_UNWIND(fremovexattr, frame, -1, op_errno, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_UNKNOWN_FOP,</div><div class='del'>-                        "Unknown FOP on fd (%p) on file %s @ %s",</div><div class='del'>-                        fd, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        subvol-&gt;name);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_UNKNOWN_FOP,</div><div class='add'>+                   "Unknown FOP on fd (%p) on file %s @ %s", fd,</div><div class='add'>+                   uuid_utoa(fd-&gt;inode-&gt;gfid), subvol-&gt;name);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Check once again if the fd has been opened on the cached subvol.</div><div class='ctx'>  * If not, open and update the fd_ctx.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_check_and_open_fd_on_subvol_task (void *data)</div><div class='add'>+dht_check_and_open_fd_on_subvol_task(void *data)</div><div class='ctx'> {</div><div class='del'>-        loc_t          loc        = {0,};</div><div class='del'>-        int            ret        = -1;</div><div class='del'>-        call_frame_t  *frame      = NULL;</div><div class='del'>-        dht_local_t   *local      = NULL;</div><div class='del'>-        fd_t          *fd         = NULL;</div><div class='del'>-        xlator_t      *this       = NULL;</div><div class='del'>-        xlator_t      *subvol     = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        frame = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = THIS;</div><div class='del'>-        fd = local-&gt;fd;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-</div><div class='del'>-        local-&gt;fd_checked = _gf_true;</div><div class='del'>-</div><div class='del'>-        if (fd_is_anonymous (fd) || dht_fd_open_on_dst (this, fd, subvol)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "Opening fd (%p, flags=0%o) on file %s @ %s",</div><div class='del'>-                      fd, fd-&gt;flags, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                      subvol-&gt;name);</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+</div><div class='add'>+    frame = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = THIS;</div><div class='add'>+    fd = local-&gt;fd;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+    local-&gt;fd_checked = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (fd_is_anonymous(fd) || dht_fd_open_on_dst(this, fd, subvol)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Opening fd (%p, flags=0%o) on file %s @ %s",</div><div class='add'>+                 fd, fd-&gt;flags, uuid_utoa(fd-&gt;inode-&gt;gfid), subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (fd-&gt;inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, fd-&gt;inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(fd-&gt;inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, fd-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        /* Open this on the dst subvol */</div><div class='add'>+    /* Open this on the dst subvol */</div><div class='ctx'> </div><div class='del'>-        SYNCTASK_SETID(0, 0);</div><div class='add'>+    SYNCTASK_SETID(0, 0);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_open (subvol, &amp;loc,</div><div class='del'>-                           (fd-&gt;flags &amp; ~(O_CREAT | O_EXCL | O_TRUNC)),</div><div class='del'>-                           fd, NULL, NULL);</div><div class='add'>+    ret = syncop_open(subvol, &amp;loc, (fd-&gt;flags &amp; ~(O_CREAT | O_EXCL | O_TRUNC)),</div><div class='add'>+                      fd, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_OPEN_FD_ON_DST_FAILED,</div><div class='del'>-                        "Failed to open the fd"</div><div class='del'>-                        " (%p, flags=0%o) on file %s @ %s",</div><div class='del'>-                        fd, fd-&gt;flags, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        subvol-&gt;name);</div><div class='del'>-                /* This can happen if the cached subvol was updated in the</div><div class='del'>-                 * inode_ctx and the fd was opened on the new cached suvol</div><div class='del'>-                 * after this fop was wound on the old cached subvol.</div><div class='del'>-                 * As we do not close the fd on the old subvol (a leak)</div><div class='del'>-                 * don't treat ENOENT as an error and allow the phase1/phase2</div><div class='del'>-                 * checks to handle it.</div><div class='del'>-                 */</div><div class='del'>-</div><div class='del'>-                if ((-ret != ENOENT) &amp;&amp; (-ret != ESTALE)) {</div><div class='del'>-                        local-&gt;op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_OPEN_FD_ON_DST_FAILED,</div><div class='add'>+               "Failed to open the fd"</div><div class='add'>+               " (%p, flags=0%o) on file %s @ %s",</div><div class='add'>+               fd, fd-&gt;flags, uuid_utoa(fd-&gt;inode-&gt;gfid), subvol-&gt;name);</div><div class='add'>+        /* This can happen if the cached subvol was updated in the</div><div class='add'>+         * inode_ctx and the fd was opened on the new cached suvol</div><div class='add'>+         * after this fop was wound on the old cached subvol.</div><div class='add'>+         * As we do not close the fd on the old subvol (a leak)</div><div class='add'>+         * don't treat ENOENT as an error and allow the phase1/phase2</div><div class='add'>+         * checks to handle it.</div><div class='add'>+         */</div><div class='ctx'> </div><div class='add'>+        if ((-ret != ENOENT) &amp;&amp; (-ret != ESTALE)) {</div><div class='add'>+            local-&gt;op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='ctx'>         } else {</div><div class='del'>-                dht_fd_ctx_set (this, fd, subvol);</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        SYNCTASK_SETID (frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        dht_fd_ctx_set(this, fd, subvol);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    SYNCTASK_SETID(frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_check_and_open_fd_on_subvol (xlator_t *this, call_frame_t *frame)</div><div class='add'>+dht_check_and_open_fd_on_subvol(xlator_t *this, call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int ret            = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-        if (dht_fd_open_on_dst (this, fd, subvol))</div><div class='del'>-                goto out;</div><div class='del'>-*/</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env,</div><div class='del'>-                            dht_check_and_open_fd_on_subvol_task,</div><div class='del'>-                            dht_check_and_open_fd_on_subvol_complete,</div><div class='del'>-                            frame, frame);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "Failed to create synctask"</div><div class='del'>-                        " to check and open fd=%p", local-&gt;fd);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+            if (dht_fd_open_on_dst (this, fd, subvol))</div><div class='add'>+                    goto out;</div><div class='add'>+    */</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, dht_check_and_open_fd_on_subvol_task,</div><div class='add'>+                       dht_check_and_open_fd_on_subvol_complete, frame, frame);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "Failed to create synctask"</div><div class='add'>+               " to check and open fd=%p",</div><div class='add'>+               local-&gt;fd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_frame_return (call_frame_t *frame)</div><div class='add'>+dht_frame_return(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        int          this_call_cnt = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = -1;</div><div class='ctx'> </div><div class='del'>-        if (!frame)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!frame)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                this_call_cnt = --local-&gt;call_cnt;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        this_call_cnt = --local-&gt;call_cnt;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return this_call_cnt;</div><div class='add'>+    return this_call_cnt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -622,652 +572,636 @@ dht_frame_return (call_frame_t *frame)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_filter_loc_subvol_key (xlator_t *this, loc_t *loc, loc_t *new_loc,</div><div class='del'>-                           xlator_t **subvol)</div><div class='add'>+dht_filter_loc_subvol_key(xlator_t *this, loc_t *loc, loc_t *new_loc,</div><div class='add'>+                          xlator_t **subvol)</div><div class='ctx'> {</div><div class='del'>-        char          *new_name  = NULL;</div><div class='del'>-        char          *new_path  = NULL;</div><div class='del'>-        xlator_list_t *trav      = NULL;</div><div class='del'>-        char           key[1024] = {0,};</div><div class='del'>-        int            ret       = 0; /* not found */</div><div class='del'>-        int            keylen    = 0;</div><div class='del'>-        int            name_len  = 0;</div><div class='del'>-        int            path_len  = 0;</div><div class='del'>-</div><div class='del'>-        /* Why do other tasks if first required 'char' itself is not there */</div><div class='del'>-        if (!new_loc || !loc || !loc-&gt;name || !strchr (loc-&gt;name, '@')) {</div><div class='del'>-                /* Skip the GF_FREE checks here */</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        while (trav) {</div><div class='del'>-                keylen = snprintf (key, sizeof (key), "*@%s:%s", this-&gt;name,</div><div class='del'>-                                   trav-&gt;xlator-&gt;name);</div><div class='del'>-                /* Ignore '*' */</div><div class='del'>-                keylen = keylen - 1;</div><div class='del'>-                if (fnmatch (key, loc-&gt;name, FNM_NOESCAPE) == 0) {</div><div class='del'>-                        name_len = strlen (loc-&gt;name) - keylen;</div><div class='del'>-                        new_name = GF_MALLOC(name_len + 1,</div><div class='del'>-                                             gf_common_mt_char);</div><div class='del'>-                        if (!new_name)</div><div class='del'>-                                goto out;</div><div class='del'>-                        if (fnmatch (key, loc-&gt;path, FNM_NOESCAPE) == 0) {</div><div class='del'>-                                path_len = strlen (loc-&gt;path) - keylen;</div><div class='del'>-                                new_path = GF_MALLOC(path_len + 1,</div><div class='del'>-                                                     gf_common_mt_char);</div><div class='del'>-                                if (!new_path)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                snprintf (new_path, path_len + 1,</div><div class='del'>-                                          "%s", loc-&gt;path);</div><div class='del'>-                        }</div><div class='del'>-                        snprintf (new_name, name_len + 1, "%s",</div><div class='del'>-                                  loc-&gt;name);</div><div class='del'>-</div><div class='del'>-                        if (new_loc) {</div><div class='del'>-                                new_loc-&gt;path   = ((new_path) ? new_path:</div><div class='del'>-                                                   gf_strdup (loc-&gt;path));</div><div class='del'>-                                new_loc-&gt;name   = new_name;</div><div class='del'>-                                new_loc-&gt;inode  = inode_ref (loc-&gt;inode);</div><div class='del'>-                                new_loc-&gt;parent = inode_ref (loc-&gt;parent);</div><div class='del'>-                        }</div><div class='del'>-                        *subvol         = trav-&gt;xlator;</div><div class='del'>-                        ret = 1;  /* success */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        if (!ret) {</div><div class='del'>-                /* !success */</div><div class='del'>-                GF_FREE (new_path);</div><div class='del'>-                GF_FREE (new_name);</div><div class='del'>-        }</div><div class='add'>+    char *new_name = NULL;</div><div class='add'>+    char *new_path = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    char key[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0; /* not found */</div><div class='add'>+    int keylen = 0;</div><div class='add'>+    int name_len = 0;</div><div class='add'>+    int path_len = 0;</div><div class='add'>+</div><div class='add'>+    /* Why do other tasks if first required 'char' itself is not there */</div><div class='add'>+    if (!new_loc || !loc || !loc-&gt;name || !strchr(loc-&gt;name, '@')) {</div><div class='add'>+        /* Skip the GF_FREE checks here */</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    while (trav) {</div><div class='add'>+        keylen = snprintf(key, sizeof(key), "*@%s:%s", this-&gt;name,</div><div class='add'>+                          trav-&gt;xlator-&gt;name);</div><div class='add'>+        /* Ignore '*' */</div><div class='add'>+        keylen = keylen - 1;</div><div class='add'>+        if (fnmatch(key, loc-&gt;name, FNM_NOESCAPE) == 0) {</div><div class='add'>+            name_len = strlen(loc-&gt;name) - keylen;</div><div class='add'>+            new_name = GF_MALLOC(name_len + 1, gf_common_mt_char);</div><div class='add'>+            if (!new_name)</div><div class='add'>+                goto out;</div><div class='add'>+            if (fnmatch(key, loc-&gt;path, FNM_NOESCAPE) == 0) {</div><div class='add'>+                path_len = strlen(loc-&gt;path) - keylen;</div><div class='add'>+                new_path = GF_MALLOC(path_len + 1, gf_common_mt_char);</div><div class='add'>+                if (!new_path)</div><div class='add'>+                    goto out;</div><div class='add'>+                snprintf(new_path, path_len + 1, "%s", loc-&gt;path);</div><div class='add'>+            }</div><div class='add'>+            snprintf(new_name, name_len + 1, "%s", loc-&gt;name);</div><div class='add'>+</div><div class='add'>+            if (new_loc) {</div><div class='add'>+                new_loc-&gt;path = ((new_path) ? new_path : gf_strdup(loc-&gt;path));</div><div class='add'>+                new_loc-&gt;name = new_name;</div><div class='add'>+                new_loc-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+                new_loc-&gt;parent = inode_ref(loc-&gt;parent);</div><div class='add'>+            }</div><div class='add'>+            *subvol = trav-&gt;xlator;</div><div class='add'>+            ret = 1; /* success */</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    if (!ret) {</div><div class='add'>+        /* !success */</div><div class='add'>+        GF_FREE(new_path);</div><div class='add'>+        GF_FREE(new_name);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static xlator_t *</div><div class='ctx'> dht_get_subvol_from_id(xlator_t *this, int client_id)</div><div class='ctx'> {</div><div class='del'>-        xlator_t   *xl   = NULL;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        char       *sid  = NULL;</div><div class='del'>-        int32_t     ret  = -1;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = gf_asprintf(&amp;sid, "%d", client_id);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_ASPRINTF_FAILED, "asprintf failed while "</div><div class='del'>-                        "fetching subvol from the id");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *xl = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char *sid = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(&amp;sid, "%d", client_id);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_ASPRINTF_FAILED,</div><div class='add'>+               "asprintf failed while "</div><div class='add'>+               "fetching subvol from the id");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_ptr(conf-&gt;leaf_to_subvol, sid, (void **) &amp;xl))</div><div class='del'>-                xl = NULL;</div><div class='add'>+    if (dict_get_ptr(conf-&gt;leaf_to_subvol, sid, (void **)&amp;xl))</div><div class='add'>+        xl = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (sid);</div><div class='add'>+    GF_FREE(sid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return xl;</div><div class='del'>-</div><div class='add'>+    return xl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_deitransform (xlator_t *this, uint64_t y, xlator_t **subvol_p)</div><div class='add'>+dht_deitransform(xlator_t *this, uint64_t y, xlator_t **subvol_p)</div><div class='ctx'> {</div><div class='del'>-        int         client_id = 0;</div><div class='del'>-        xlator_t   *subvol = 0;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='add'>+    int client_id = 0;</div><div class='add'>+    xlator_t *subvol = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;private)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!this-&gt;private)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        client_id = gf_deitransform(this, y);</div><div class='add'>+    client_id = gf_deitransform(this, y);</div><div class='ctx'> </div><div class='del'>-        subvol = dht_get_subvol_from_id(this, client_id);</div><div class='add'>+    subvol = dht_get_subvol_from_id(this, client_id);</div><div class='ctx'> </div><div class='del'>-        if (!subvol)</div><div class='del'>-                subvol = conf-&gt;subvolumes[0];</div><div class='add'>+    if (!subvol)</div><div class='add'>+        subvol = conf-&gt;subvolumes[0];</div><div class='ctx'> </div><div class='del'>-        if (subvol_p)</div><div class='del'>-                *subvol_p = subvol;</div><div class='add'>+    if (subvol_p)</div><div class='add'>+        *subvol_p = subvol;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_local_wipe (xlator_t *this, dht_local_t *local)</div><div class='add'>+dht_local_wipe(xlator_t *this, dht_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                return;</div><div class='add'>+    if (!local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc2);</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc2_copy);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc2);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc2_copy);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr)</div><div class='del'>-                dict_unref (local-&gt;xattr);</div><div class='add'>+    if (local-&gt;xattr)</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inode)</div><div class='del'>-                inode_unref (local-&gt;inode);</div><div class='add'>+    if (local-&gt;inode)</div><div class='add'>+        inode_unref(local-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;layout) {</div><div class='del'>-                dht_layout_unref (this, local-&gt;layout);</div><div class='del'>-                local-&gt;layout = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;layout) {</div><div class='add'>+        dht_layout_unref(this, local-&gt;layout);</div><div class='add'>+        local-&gt;layout = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;linkfile.loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;linkfile.loc);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linkfile.xattr)</div><div class='del'>-                dict_unref (local-&gt;linkfile.xattr);</div><div class='add'>+    if (local-&gt;linkfile.xattr)</div><div class='add'>+        dict_unref(local-&gt;linkfile.xattr);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linkfile.inode)</div><div class='del'>-                inode_unref (local-&gt;linkfile.inode);</div><div class='add'>+    if (local-&gt;linkfile.inode)</div><div class='add'>+        inode_unref(local-&gt;linkfile.inode);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                fd_unref (local-&gt;fd);</div><div class='del'>-                local-&gt;fd = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+        local-&gt;fd = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;params) {</div><div class='del'>-                dict_unref (local-&gt;params);</div><div class='del'>-                local-&gt;params = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;params) {</div><div class='add'>+        dict_unref(local-&gt;params);</div><div class='add'>+        local-&gt;params = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr_req)</div><div class='del'>-                dict_unref (local-&gt;xattr_req);</div><div class='del'>-        if (local-&gt;mds_xattr)</div><div class='del'>-                dict_unref (local-&gt;mds_xattr);</div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='add'>+    if (local-&gt;xattr_req)</div><div class='add'>+        dict_unref(local-&gt;xattr_req);</div><div class='add'>+    if (local-&gt;mds_xattr)</div><div class='add'>+        dict_unref(local-&gt;mds_xattr);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;selfheal.layout) {</div><div class='del'>-                dht_layout_unref (this, local-&gt;selfheal.layout);</div><div class='del'>-                local-&gt;selfheal.layout = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;selfheal.layout) {</div><div class='add'>+        dht_layout_unref(this, local-&gt;selfheal.layout);</div><div class='add'>+        local-&gt;selfheal.layout = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;selfheal.refreshed_layout) {</div><div class='del'>-                dht_layout_unref (this, local-&gt;selfheal.refreshed_layout);</div><div class='del'>-                local-&gt;selfheal.refreshed_layout = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;selfheal.refreshed_layout) {</div><div class='add'>+        dht_layout_unref(this, local-&gt;selfheal.refreshed_layout);</div><div class='add'>+        local-&gt;selfheal.refreshed_layout = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 2; i++) {</div><div class='del'>-                dht_lock_array_free (local-&gt;lock[i].ns.parent_layout.locks,</div><div class='del'>-                                     local-&gt;lock[i].ns.parent_layout.lk_count);</div><div class='add'>+    for (i = 0; i &lt; 2; i++) {</div><div class='add'>+        dht_lock_array_free(local-&gt;lock[i].ns.parent_layout.locks,</div><div class='add'>+                            local-&gt;lock[i].ns.parent_layout.lk_count);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (local-&gt;lock[i].ns.parent_layout.locks);</div><div class='add'>+        GF_FREE(local-&gt;lock[i].ns.parent_layout.locks);</div><div class='ctx'> </div><div class='del'>-                dht_lock_array_free (local-&gt;lock[i].ns.directory_ns.locks,</div><div class='del'>-                                     local-&gt;lock[i].ns.directory_ns.lk_count);</div><div class='del'>-                GF_FREE (local-&gt;lock[i].ns.directory_ns.locks);</div><div class='del'>-        }</div><div class='add'>+        dht_lock_array_free(local-&gt;lock[i].ns.directory_ns.locks,</div><div class='add'>+                            local-&gt;lock[i].ns.directory_ns.lk_count);</div><div class='add'>+        GF_FREE(local-&gt;lock[i].ns.directory_ns.locks);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;key);</div><div class='add'>+    GF_FREE(local-&gt;key);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;rebalance.xdata)</div><div class='del'>-                dict_unref (local-&gt;rebalance.xdata);</div><div class='add'>+    if (local-&gt;rebalance.xdata)</div><div class='add'>+        dict_unref(local-&gt;rebalance.xdata);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;rebalance.xattr)</div><div class='del'>-                dict_unref (local-&gt;rebalance.xattr);</div><div class='add'>+    if (local-&gt;rebalance.xattr)</div><div class='add'>+        dict_unref(local-&gt;rebalance.xattr);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;rebalance.dict)</div><div class='del'>-                dict_unref (local-&gt;rebalance.dict);</div><div class='add'>+    if (local-&gt;rebalance.dict)</div><div class='add'>+        dict_unref(local-&gt;rebalance.dict);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (local-&gt;rebalance.vector);</div><div class='add'>+    GF_FREE(local-&gt;rebalance.vector);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;rebalance.iobref)</div><div class='del'>-                iobref_unref (local-&gt;rebalance.iobref);</div><div class='add'>+    if (local-&gt;rebalance.iobref)</div><div class='add'>+        iobref_unref(local-&gt;rebalance.iobref);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;stub) {</div><div class='del'>-                call_stub_destroy (local-&gt;stub);</div><div class='del'>-                local-&gt;stub = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;stub) {</div><div class='add'>+        call_stub_destroy(local-&gt;stub);</div><div class='add'>+        local-&gt;stub = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;ret_cache)</div><div class='del'>-                GF_FREE (local-&gt;ret_cache);</div><div class='add'>+    if (local-&gt;ret_cache)</div><div class='add'>+        GF_FREE(local-&gt;ret_cache);</div><div class='ctx'> </div><div class='del'>-        mem_put (local);</div><div class='add'>+    mem_put(local);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> dht_local_t *</div><div class='del'>-dht_local_init (call_frame_t *frame, loc_t *loc, fd_t *fd, glusterfs_fop_t fop)</div><div class='add'>+dht_local_init(call_frame_t *frame, loc_t *loc, fd_t *fd, glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        inode_t     *inode = NULL;</div><div class='del'>-        int          ret   = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (THIS-&gt;local_pool);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = mem_get0(THIS-&gt;local_pool);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (loc) {</div><div class='del'>-                ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    if (loc) {</div><div class='add'>+        ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                inode = loc-&gt;inode;</div><div class='del'>-        }</div><div class='add'>+        inode = loc-&gt;inode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fd) {</div><div class='del'>-                local-&gt;fd = fd_ref (fd);</div><div class='del'>-                if (!inode)</div><div class='del'>-                        inode = fd-&gt;inode;</div><div class='del'>-        }</div><div class='add'>+    if (fd) {</div><div class='add'>+        local-&gt;fd = fd_ref(fd);</div><div class='add'>+        if (!inode)</div><div class='add'>+            inode = fd-&gt;inode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret   = -1;</div><div class='del'>-        local-&gt;op_errno = EUCLEAN;</div><div class='del'>-        local-&gt;fop      = fop;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = EUCLEAN;</div><div class='add'>+    local-&gt;fop = fop;</div><div class='ctx'> </div><div class='del'>-        if (inode) {</div><div class='del'>-                local-&gt;layout   = dht_layout_get (frame-&gt;this, inode);</div><div class='del'>-                local-&gt;cached_subvol = dht_subvol_get_cached (frame-&gt;this,</div><div class='del'>-                                                              inode);</div><div class='del'>-        }</div><div class='add'>+    if (inode) {</div><div class='add'>+        local-&gt;layout = dht_layout_get(frame-&gt;this, inode);</div><div class='add'>+        local-&gt;cached_subvol = dht_subvol_get_cached(frame-&gt;this, inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (local)</div><div class='del'>-                        mem_put (local);</div><div class='del'>-                local = NULL;</div><div class='del'>-        }</div><div class='del'>-        return local;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (local)</div><div class='add'>+            mem_put(local);</div><div class='add'>+        local = NULL;</div><div class='add'>+    }</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-dht_first_up_subvol (xlator_t *this)</div><div class='add'>+dht_first_up_subvol(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        xlator_t   *child = NULL;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        time_t      time = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *child = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    time_t time = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;subvol_up_time[i]) {</div><div class='del'>-                                if (!time) {</div><div class='del'>-                                        time = conf-&gt;subvol_up_time[i];</div><div class='del'>-                                        child = conf-&gt;subvolumes[i];</div><div class='del'>-                                } else if (time &gt; conf-&gt;subvol_up_time[i]) {</div><div class='del'>-                                        time  = conf-&gt;subvol_up_time[i];</div><div class='del'>-                                        child = conf-&gt;subvolumes[i];</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;subvol_up_time[i]) {</div><div class='add'>+                if (!time) {</div><div class='add'>+                    time = conf-&gt;subvol_up_time[i];</div><div class='add'>+                    child = conf-&gt;subvolumes[i];</div><div class='add'>+                } else if (time &gt; conf-&gt;subvol_up_time[i]) {</div><div class='add'>+                    time = conf-&gt;subvol_up_time[i];</div><div class='add'>+                    child = conf-&gt;subvolumes[i];</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return child;</div><div class='add'>+    return child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-dht_last_up_subvol (xlator_t *this)</div><div class='add'>+dht_last_up_subvol(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        xlator_t   *child = NULL;</div><div class='del'>-        int         i = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *child = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = conf-&gt;subvolume_cnt-1; i &gt;= 0; i--) {</div><div class='del'>-                        if (conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                child = conf-&gt;subvolumes[i];</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = conf-&gt;subvolume_cnt - 1; i &gt;= 0; i--) {</div><div class='add'>+            if (conf-&gt;subvolume_status[i]) {</div><div class='add'>+                child = conf-&gt;subvolumes[i];</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return child;</div><div class='add'>+    return child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-dht_subvol_get_hashed (xlator_t *this, loc_t *loc)</div><div class='add'>+dht_subvol_get_hashed(xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        dht_methods_t *methods = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, out);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, out);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, out);</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        if (__is_root_gfid (loc-&gt;gfid)) {</div><div class='del'>-                subvol = dht_first_up_subvol (this);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (__is_root_gfid(loc-&gt;gfid)) {</div><div class='add'>+        subvol = dht_first_up_subvol(this);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;parent, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;parent, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;name, out);</div><div class='ctx'> </div><div class='del'>-        layout = dht_layout_get (this, loc-&gt;parent);</div><div class='add'>+    layout = dht_layout_get(this, loc-&gt;parent);</div><div class='ctx'> </div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Missing layout. path=%s, parent gfid =%s",</div><div class='del'>-                              loc-&gt;path, uuid_utoa (loc-&gt;parent-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Missing layout. path=%s, parent gfid =%s",</div><div class='add'>+                     loc-&gt;path, uuid_utoa(loc-&gt;parent-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = methods-&gt;layout_search (this, layout, loc-&gt;name);</div><div class='add'>+    subvol = methods-&gt;layout_search(this, layout, loc-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "No hashed subvolume for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "No hashed subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (layout) {</div><div class='del'>-                dht_layout_unref (this, layout);</div><div class='del'>-        }</div><div class='add'>+    if (layout) {</div><div class='add'>+        dht_layout_unref(this, layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_subvol_get_cached (xlator_t *this, inode_t *inode)</div><div class='add'>+dht_subvol_get_cached(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        layout = dht_layout_get (this, inode);</div><div class='add'>+    layout = dht_layout_get(this, inode);</div><div class='ctx'> </div><div class='del'>-        if (!layout) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!layout) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = layout-&gt;list[0].xlator;</div><div class='add'>+    subvol = layout-&gt;list[0].xlator;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (layout) {</div><div class='del'>-                dht_layout_unref (this, layout);</div><div class='del'>-        }</div><div class='add'>+    if (layout) {</div><div class='add'>+        dht_layout_unref(this, layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_subvol_next (xlator_t *this, xlator_t *prev)</div><div class='add'>+dht_subvol_next(xlator_t *this, xlator_t *prev)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        xlator_t   *next = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *next = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] == prev) {</div><div class='del'>-                        if ((i + 1) &lt; conf-&gt;subvolume_cnt)</div><div class='del'>-                                next = conf-&gt;subvolumes[i + 1];</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == prev) {</div><div class='add'>+            if ((i + 1) &lt; conf-&gt;subvolume_cnt)</div><div class='add'>+                next = conf-&gt;subvolumes[i + 1];</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return next;</div><div class='add'>+    return next;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This func wraps around, if prev is actually the last subvol.</div><div class='ctx'>  */</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_subvol_next_available (xlator_t *this, xlator_t *prev)</div><div class='add'>+dht_subvol_next_available(xlator_t *this, xlator_t *prev)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        xlator_t   *next = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *next = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] == prev) {</div><div class='del'>-                        /* if prev is last in conf-&gt;subvolumes, then wrap</div><div class='del'>-                         * around.</div><div class='del'>-                         */</div><div class='del'>-                        if ((i + 1) &lt; conf-&gt;subvolume_cnt) {</div><div class='del'>-                                next = conf-&gt;subvolumes[i + 1];</div><div class='del'>-                        } else {</div><div class='del'>-                                next = conf-&gt;subvolumes[0];</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == prev) {</div><div class='add'>+            /* if prev is last in conf-&gt;subvolumes, then wrap</div><div class='add'>+             * around.</div><div class='add'>+             */</div><div class='add'>+            if ((i + 1) &lt; conf-&gt;subvolume_cnt) {</div><div class='add'>+                next = conf-&gt;subvolumes[i + 1];</div><div class='add'>+            } else {</div><div class='add'>+                next = conf-&gt;subvolumes[0];</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return next;</div><div class='add'>+    return next;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-dht_subvol_cnt (xlator_t *this, xlator_t *subvol)</div><div class='add'>+dht_subvol_cnt(xlator_t *this, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (subvol == conf-&gt;subvolumes[i]) {</div><div class='del'>-                        ret = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (subvol == conf-&gt;subvolumes[i]) {</div><div class='add'>+            ret = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+#define set_if_greater(a, b)                                                   \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if ((a) &lt; (b))                                                         \</div><div class='add'>+            (a) = (b);                                                         \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='del'>-#define set_if_greater(a, b) do {               \</div><div class='del'>-                if ((a) &lt; (b))                  \</div><div class='del'>-                        (a) = (b);              \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define set_if_greater_time(a, an, b, bn) do {                          \</div><div class='del'>-                if (((a) &lt; (b)) || (((a) == (b)) &amp;&amp; ((an) &lt; (bn)))){    \</div><div class='del'>-                        (a) = (b);                                      \</div><div class='del'>-                        (an) = (bn);                                    \</div><div class='del'>-                }                                                       \</div><div class='del'>-        } while (0)                                                     \</div><div class='del'>-</div><div class='add'>+#define set_if_greater_time(a, an, b, bn)                                      \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (((a) &lt; (b)) || (((a) == (b)) &amp;&amp; ((an) &lt; (bn)))) {                  \</div><div class='add'>+            (a) = (b);                                                         \</div><div class='add'>+            (an) = (bn);                                                       \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_iatt_merge (xlator_t *this, struct iatt *to, struct iatt *from)</div><div class='add'>+dht_iatt_merge(xlator_t *this, struct iatt *to, struct iatt *from)</div><div class='ctx'> {</div><div class='del'>-        if (!from || !to)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        to-&gt;ia_dev      = from-&gt;ia_dev;</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (to-&gt;ia_gfid, from-&gt;ia_gfid);</div><div class='del'>-</div><div class='del'>-        to-&gt;ia_ino      = from-&gt;ia_ino;</div><div class='del'>-        to-&gt;ia_prot     = from-&gt;ia_prot;</div><div class='del'>-        to-&gt;ia_type     = from-&gt;ia_type;</div><div class='del'>-        to-&gt;ia_nlink    = from-&gt;ia_nlink;</div><div class='del'>-        to-&gt;ia_rdev     = from-&gt;ia_rdev;</div><div class='del'>-        to-&gt;ia_size    += from-&gt;ia_size;</div><div class='del'>-        to-&gt;ia_blksize  = from-&gt;ia_blksize;</div><div class='del'>-        to-&gt;ia_blocks  += from-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (from-&gt;ia_type)) {</div><div class='del'>-                to-&gt;ia_blocks = DHT_DIR_STAT_BLOCKS;</div><div class='del'>-                to-&gt;ia_size = DHT_DIR_STAT_SIZE;</div><div class='del'>-        }</div><div class='del'>-        set_if_greater (to-&gt;ia_uid, from-&gt;ia_uid);</div><div class='del'>-        set_if_greater (to-&gt;ia_gid, from-&gt;ia_gid);</div><div class='del'>-</div><div class='del'>-        set_if_greater_time(to-&gt;ia_atime, to-&gt;ia_atime_nsec,</div><div class='del'>-                            from-&gt;ia_atime, from-&gt;ia_atime_nsec);</div><div class='del'>-        set_if_greater_time (to-&gt;ia_mtime, to-&gt;ia_mtime_nsec,</div><div class='del'>-                             from-&gt;ia_mtime, from-&gt;ia_mtime_nsec);</div><div class='del'>-        set_if_greater_time (to-&gt;ia_ctime, to-&gt;ia_ctime_nsec,</div><div class='del'>-                             from-&gt;ia_ctime, from-&gt;ia_ctime_nsec);</div><div class='del'>-</div><div class='add'>+    if (!from || !to)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    to-&gt;ia_dev = from-&gt;ia_dev;</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(to-&gt;ia_gfid, from-&gt;ia_gfid);</div><div class='add'>+</div><div class='add'>+    to-&gt;ia_ino = from-&gt;ia_ino;</div><div class='add'>+    to-&gt;ia_prot = from-&gt;ia_prot;</div><div class='add'>+    to-&gt;ia_type = from-&gt;ia_type;</div><div class='add'>+    to-&gt;ia_nlink = from-&gt;ia_nlink;</div><div class='add'>+    to-&gt;ia_rdev = from-&gt;ia_rdev;</div><div class='add'>+    to-&gt;ia_size += from-&gt;ia_size;</div><div class='add'>+    to-&gt;ia_blksize = from-&gt;ia_blksize;</div><div class='add'>+    to-&gt;ia_blocks += from-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(from-&gt;ia_type)) {</div><div class='add'>+        to-&gt;ia_blocks = DHT_DIR_STAT_BLOCKS;</div><div class='add'>+        to-&gt;ia_size = DHT_DIR_STAT_SIZE;</div><div class='add'>+    }</div><div class='add'>+    set_if_greater(to-&gt;ia_uid, from-&gt;ia_uid);</div><div class='add'>+    set_if_greater(to-&gt;ia_gid, from-&gt;ia_gid);</div><div class='add'>+</div><div class='add'>+    set_if_greater_time(to-&gt;ia_atime, to-&gt;ia_atime_nsec, from-&gt;ia_atime,</div><div class='add'>+                        from-&gt;ia_atime_nsec);</div><div class='add'>+    set_if_greater_time(to-&gt;ia_mtime, to-&gt;ia_mtime_nsec, from-&gt;ia_mtime,</div><div class='add'>+                        from-&gt;ia_mtime_nsec);</div><div class='add'>+    set_if_greater_time(to-&gt;ia_ctime, to-&gt;ia_ctime_nsec, from-&gt;ia_ctime,</div><div class='add'>+                        from-&gt;ia_ctime_nsec);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_build_child_loc (xlator_t *this, loc_t *child, loc_t *parent, char *name)</div><div class='add'>+dht_build_child_loc(xlator_t *this, loc_t *child, loc_t *parent, char *name)</div><div class='ctx'> {</div><div class='del'>-        if (!child) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!child) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (parent-&gt;path, "/") == 0)</div><div class='del'>-                gf_asprintf ((char **)&amp;child-&gt;path, "/%s", name);</div><div class='del'>-        else</div><div class='del'>-                gf_asprintf ((char **)&amp;child-&gt;path, "%s/%s", parent-&gt;path, name);</div><div class='add'>+    if (strcmp(parent-&gt;path, "/") == 0)</div><div class='add'>+        gf_asprintf((char **)&amp;child-&gt;path, "/%s", name);</div><div class='add'>+    else</div><div class='add'>+        gf_asprintf((char **)&amp;child-&gt;path, "%s/%s", parent-&gt;path, name);</div><div class='ctx'> </div><div class='del'>-        if (!child-&gt;path) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!child-&gt;path) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        child-&gt;name = strrchr (child-&gt;path, '/');</div><div class='del'>-        if (child-&gt;name)</div><div class='del'>-                child-&gt;name++;</div><div class='add'>+    child-&gt;name = strrchr(child-&gt;path, '/');</div><div class='add'>+    if (child-&gt;name)</div><div class='add'>+        child-&gt;name++;</div><div class='ctx'> </div><div class='del'>-        child-&gt;parent = inode_ref (parent-&gt;inode);</div><div class='del'>-        child-&gt;inode = inode_new (parent-&gt;inode-&gt;table);</div><div class='add'>+    child-&gt;parent = inode_ref(parent-&gt;inode);</div><div class='add'>+    child-&gt;inode = inode_new(parent-&gt;inode-&gt;table);</div><div class='ctx'> </div><div class='del'>-        if (!child-&gt;inode) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!child-&gt;inode) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (child) {</div><div class='del'>-            loc_wipe (child);</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    if (child) {</div><div class='add'>+        loc_wipe(child);</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_init_local_subvolumes (xlator_t *this, dht_conf_t *conf)</div><div class='add'>+dht_init_local_subvolumes(xlator_t *this, dht_conf_t *conf)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *subvols = NULL;</div><div class='del'>-        int            cnt = 0;</div><div class='add'>+    xlator_list_t *subvols = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='ctx'> </div><div class='del'>-        if (!conf)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        for (subvols = this-&gt;children; subvols; subvols = subvols-&gt;next)</div><div class='del'>-                cnt++;</div><div class='add'>+    for (subvols = this-&gt;children; subvols; subvols = subvols-&gt;next)</div><div class='add'>+        cnt++;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;local_subvols = GF_CALLOC (cnt, sizeof (xlator_t *),</div><div class='del'>-                                        gf_dht_mt_xlator_t);</div><div class='add'>+    conf-&gt;local_subvols = GF_CALLOC(cnt, sizeof(xlator_t *),</div><div class='add'>+                                    gf_dht_mt_xlator_t);</div><div class='ctx'> </div><div class='del'>-        /* FIX FIX : do this dynamically*/</div><div class='del'>-        conf-&gt;local_nodeuuids = GF_CALLOC (cnt,</div><div class='del'>-                                           sizeof (subvol_nodeuuids_info_t),</div><div class='del'>-                                           gf_dht_nodeuuids_t);</div><div class='add'>+    /* FIX FIX : do this dynamically*/</div><div class='add'>+    conf-&gt;local_nodeuuids = GF_CALLOC(cnt, sizeof(subvol_nodeuuids_info_t),</div><div class='add'>+                                      gf_dht_nodeuuids_t);</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;local_subvols || !conf-&gt;local_nodeuuids) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!conf-&gt;local_subvols || !conf-&gt;local_nodeuuids) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;local_subvols_cnt = 0;</div><div class='add'>+    conf-&gt;local_subvols_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_init_subvolumes (xlator_t *this, dht_conf_t *conf)</div><div class='add'>+dht_init_subvolumes(xlator_t *this, dht_conf_t *conf)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *subvols = NULL;</div><div class='del'>-        int            cnt = 0;</div><div class='add'>+    xlator_list_t *subvols = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='ctx'> </div><div class='del'>-        if (!conf)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        for (subvols = this-&gt;children; subvols; subvols = subvols-&gt;next)</div><div class='del'>-                cnt++;</div><div class='add'>+    for (subvols = this-&gt;children; subvols; subvols = subvols-&gt;next)</div><div class='add'>+        cnt++;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;subvolumes = GF_CALLOC (cnt, sizeof (xlator_t *),</div><div class='del'>-                                      gf_dht_mt_xlator_t);</div><div class='del'>-        if (!conf-&gt;subvolumes) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        conf-&gt;subvolume_cnt = cnt;</div><div class='add'>+    conf-&gt;subvolumes = GF_CALLOC(cnt, sizeof(xlator_t *), gf_dht_mt_xlator_t);</div><div class='add'>+    if (!conf-&gt;subvolumes) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    conf-&gt;subvolume_cnt = cnt;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;local_subvols_cnt = 0;</div><div class='add'>+    conf-&gt;local_subvols_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        dht_set_subvol_range(this);</div><div class='add'>+    dht_set_subvol_range(this);</div><div class='ctx'> </div><div class='del'>-        cnt = 0;</div><div class='del'>-        for (subvols = this-&gt;children; subvols; subvols = subvols-&gt;next)</div><div class='del'>-                conf-&gt;subvolumes[cnt++] = subvols-&gt;xlator;</div><div class='add'>+    cnt = 0;</div><div class='add'>+    for (subvols = this-&gt;children; subvols; subvols = subvols-&gt;next)</div><div class='add'>+        conf-&gt;subvolumes[cnt++] = subvols-&gt;xlator;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;subvolume_status = GF_CALLOC (cnt, sizeof (char),</div><div class='del'>-                                            gf_dht_mt_char);</div><div class='del'>-        if (!conf-&gt;subvolume_status) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    conf-&gt;subvolume_status = GF_CALLOC(cnt, sizeof(char), gf_dht_mt_char);</div><div class='add'>+    if (!conf-&gt;subvolume_status) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;last_event = GF_CALLOC (cnt, sizeof (int),</div><div class='del'>-                                      gf_dht_mt_char);</div><div class='del'>-        if (!conf-&gt;last_event) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    conf-&gt;last_event = GF_CALLOC(cnt, sizeof(int), gf_dht_mt_char);</div><div class='add'>+    if (!conf-&gt;last_event) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;subvol_up_time = GF_CALLOC (cnt, sizeof (time_t),</div><div class='del'>-                                          gf_dht_mt_subvol_time);</div><div class='del'>-        if (!conf-&gt;subvol_up_time) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    conf-&gt;subvol_up_time = GF_CALLOC(cnt, sizeof(time_t),</div><div class='add'>+                                     gf_dht_mt_subvol_time);</div><div class='add'>+    if (!conf-&gt;subvol_up_time) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;du_stats = GF_CALLOC (conf-&gt;subvolume_cnt, sizeof (dht_du_t),</div><div class='del'>-                                    gf_dht_mt_dht_du_t);</div><div class='del'>-        if (!conf-&gt;du_stats) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    conf-&gt;du_stats = GF_CALLOC(conf-&gt;subvolume_cnt, sizeof(dht_du_t),</div><div class='add'>+                               gf_dht_mt_dht_du_t);</div><div class='add'>+    if (!conf-&gt;du_stats) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;decommissioned_bricks = GF_CALLOC (cnt, sizeof (xlator_t *),</div><div class='del'>-                                                 gf_dht_mt_xlator_t);</div><div class='del'>-        if (!conf-&gt;decommissioned_bricks) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    conf-&gt;decommissioned_bricks = GF_CALLOC(cnt, sizeof(xlator_t *),</div><div class='add'>+                                            gf_dht_mt_xlator_t);</div><div class='add'>+    if (!conf-&gt;decommissioned_bricks) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  op_ret values :</div><div class='ctx'>   0 : Success.</div><div class='hunk'>@@ -1276,270 +1210,263 @@ dht_init_subvolumes (xlator_t *this, dht_conf_t *conf)</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_migration_complete_check_done (int op_ret, call_frame_t *frame, void *data)</div><div class='add'>+dht_migration_complete_check_done(int op_ret, call_frame_t *frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local  = NULL;</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;cached_subvol == NULL) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;cached_subvol == NULL) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        local-&gt;rebalance.target_op_fn (THIS, subvol, frame, op_ret);</div><div class='add'>+    local-&gt;rebalance.target_op_fn(THIS, subvol, frame, op_ret);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_migration_complete_check_task (void *data)</div><div class='add'>+dht_migration_complete_check_task(void *data)</div><div class='ctx'> {</div><div class='del'>-        int                 ret         = -1;</div><div class='del'>-        xlator_t           *src_node    = NULL;</div><div class='del'>-        xlator_t           *dst_node    = NULL, *linkto_target = NULL;</div><div class='del'>-        dht_local_t        *local       = NULL;</div><div class='del'>-        dict_t             *dict        = NULL;</div><div class='del'>-        struct iatt         stbuf       = {0,};</div><div class='del'>-        xlator_t           *this        = NULL;</div><div class='del'>-        call_frame_t       *frame       = NULL;</div><div class='del'>-        loc_t               tmp_loc     = {0,};</div><div class='del'>-        char               *path        = NULL;</div><div class='del'>-        dht_conf_t         *conf        = NULL;</div><div class='del'>-        inode_t            *inode       = NULL;</div><div class='del'>-        fd_t               *iter_fd     = NULL;</div><div class='del'>-        fd_t               *tmp         = NULL;</div><div class='del'>-        uint64_t            tmp_miginfo = 0;</div><div class='del'>-        dht_migrate_info_t *miginfo     = NULL;</div><div class='del'>-        int                 open_failed = 0;</div><div class='del'>-</div><div class='del'>-        this  = THIS;</div><div class='del'>-        frame = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        src_node = local-&gt;cached_subvol;</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;loc.inode &amp;&amp; !local-&gt;fd) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        inode = (!local-&gt;fd) ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='del'>-</div><div class='del'>-        /* getxattr on cached_subvol for 'linkto' value. Do path based getxattr</div><div class='del'>-         * as root:root. If a fd is already open, access check won't be done*/</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;loc.inode) {</div><div class='del'>-                ret = syncop_fgetxattr (src_node, local-&gt;fd, &amp;dict,</div><div class='del'>-                                        conf-&gt;link_xattr_name, NULL, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                SYNCTASK_SETID (0, 0);</div><div class='del'>-                ret = syncop_getxattr (src_node, &amp;local-&gt;loc, &amp;dict,</div><div class='del'>-                                       conf-&gt;link_xattr_name, NULL, NULL);</div><div class='del'>-                SYNCTASK_SETID (frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Each DHT xlator layer has its own name for the linkto xattr.</div><div class='del'>-         * If the file mode bits indicate the the file is being migrated but</div><div class='del'>-         * this layer's linkto xattr is not set, it means that another</div><div class='del'>-         * DHT layer is migrating the file. In this case, return 1 so</div><div class='del'>-         * the mode bits can be passed on to the higher layer for appropriate</div><div class='del'>-         * action.</div><div class='del'>-         */</div><div class='del'>-        if (-ret == ENODATA) {</div><div class='del'>-                /* This DHT translator is not migrating this file */</div><div class='del'>-</div><div class='del'>-                ret = inode_ctx_reset1 (inode, this, &amp;tmp_miginfo);</div><div class='del'>-                if (tmp_miginfo) {</div><div class='del'>-</div><div class='del'>-                        /* This can be a problem if the file was</div><div class='del'>-                         * migrated by two different layers. Raise</div><div class='del'>-                         * a warning here.</div><div class='del'>-                         */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_HAS_MIGINFO,</div><div class='del'>-                                "%s: Found miginfo in the inode ctx",</div><div class='del'>-                                tmp_loc.path ? tmp_loc.path :</div><div class='del'>-                                uuid_utoa (tmp_loc.gfid));</div><div class='del'>-</div><div class='del'>-                        miginfo = (void *)tmp_miginfo;</div><div class='del'>-                        GF_REF_PUT (miginfo);</div><div class='del'>-                }</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *src_node = NULL;</div><div class='add'>+    xlator_t *dst_node = NULL, *linkto_target = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    fd_t *iter_fd = NULL;</div><div class='add'>+    fd_t *tmp = NULL;</div><div class='add'>+    uint64_t tmp_miginfo = 0;</div><div class='add'>+    dht_migrate_info_t *miginfo = NULL;</div><div class='add'>+    int open_failed = 0;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    frame = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    src_node = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;loc.inode &amp;&amp; !local-&gt;fd) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ret)</div><div class='del'>-                linkto_target = dht_linkfile_subvol (this, NULL, NULL, dict);</div><div class='add'>+    inode = (!local-&gt;fd) ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.inode) {</div><div class='del'>-                loc_copy (&amp;tmp_loc, &amp;local-&gt;loc);</div><div class='del'>-        } else {</div><div class='del'>-                tmp_loc.inode = inode_ref (inode);</div><div class='del'>-                gf_uuid_copy (tmp_loc.gfid, inode-&gt;gfid);</div><div class='del'>-        }</div><div class='add'>+    /* getxattr on cached_subvol for 'linkto' value. Do path based getxattr</div><div class='add'>+     * as root:root. If a fd is already open, access check won't be done*/</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (this, &amp;tmp_loc, &amp;stbuf, 0, 0, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_FILE_LOOKUP_FAILED,</div><div class='del'>-                        "%s: failed to lookup the file on %s",</div><div class='del'>-                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid),</div><div class='del'>-                        this-&gt;name);</div><div class='del'>-                local-&gt;op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;loc.inode) {</div><div class='add'>+        ret = syncop_fgetxattr(src_node, local-&gt;fd, &amp;dict,</div><div class='add'>+                               conf-&gt;link_xattr_name, NULL, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        SYNCTASK_SETID(0, 0);</div><div class='add'>+        ret = syncop_getxattr(src_node, &amp;local-&gt;loc, &amp;dict,</div><div class='add'>+                              conf-&gt;link_xattr_name, NULL, NULL);</div><div class='add'>+        SYNCTASK_SETID(frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Each DHT xlator layer has its own name for the linkto xattr.</div><div class='add'>+     * If the file mode bits indicate the the file is being migrated but</div><div class='add'>+     * this layer's linkto xattr is not set, it means that another</div><div class='add'>+     * DHT layer is migrating the file. In this case, return 1 so</div><div class='add'>+     * the mode bits can be passed on to the higher layer for appropriate</div><div class='add'>+     * action.</div><div class='add'>+     */</div><div class='add'>+    if (-ret == ENODATA) {</div><div class='add'>+        /* This DHT translator is not migrating this file */</div><div class='add'>+</div><div class='add'>+        ret = inode_ctx_reset1(inode, this, &amp;tmp_miginfo);</div><div class='add'>+        if (tmp_miginfo) {</div><div class='add'>+            /* This can be a problem if the file was</div><div class='add'>+             * migrated by two different layers. Raise</div><div class='add'>+             * a warning here.</div><div class='add'>+             */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_HAS_MIGINFO,</div><div class='add'>+                   "%s: Found miginfo in the inode ctx",</div><div class='add'>+                   tmp_loc.path ? tmp_loc.path : uuid_utoa(tmp_loc.gfid));</div><div class='add'>+</div><div class='add'>+            miginfo = (void *)tmp_miginfo;</div><div class='add'>+            GF_REF_PUT(miginfo);</div><div class='add'>+        }</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!ret)</div><div class='add'>+        linkto_target = dht_linkfile_subvol(this, NULL, NULL, dict);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc.inode) {</div><div class='add'>+        loc_copy(&amp;tmp_loc, &amp;local-&gt;loc);</div><div class='add'>+    } else {</div><div class='add'>+        tmp_loc.inode = inode_ref(inode);</div><div class='add'>+        gf_uuid_copy(tmp_loc.gfid, inode-&gt;gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(this, &amp;tmp_loc, &amp;stbuf, 0, 0, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_FILE_LOOKUP_FAILED,</div><div class='add'>+               "%s: failed to lookup the file on %s",</div><div class='add'>+               tmp_loc.path ? tmp_loc.path : uuid_utoa(tmp_loc.gfid),</div><div class='add'>+               this-&gt;name);</div><div class='add'>+        local-&gt;op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dst_node = dht_subvol_get_cached(this, tmp_loc.inode);</div><div class='add'>+    if (linkto_target &amp;&amp; dst_node != linkto_target) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_INVALID_LINKFILE,</div><div class='add'>+               "linkto target (%s) is "</div><div class='add'>+               "different from cached-subvol (%s). Treating %s as "</div><div class='add'>+               "destination subvol",</div><div class='add'>+               linkto_target-&gt;name, dst_node-&gt;name, dst_node-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_compare(stbuf.ia_gfid, tmp_loc.inode-&gt;gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+               "%s: gfid different on the target file on %s",</div><div class='add'>+               tmp_loc.path ? tmp_loc.path : uuid_utoa(tmp_loc.gfid),</div><div class='add'>+               dst_node-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dst_node = dht_subvol_get_cached (this, tmp_loc.inode);</div><div class='del'>-        if (linkto_target &amp;&amp; dst_node != linkto_target) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_INVALID_LINKFILE,</div><div class='del'>-                        "linkto target (%s) is "</div><div class='del'>-                        "different from cached-subvol (%s). Treating %s as "</div><div class='del'>-                        "destination subvol", linkto_target-&gt;name,</div><div class='del'>-                        dst_node-&gt;name, dst_node-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    /* update local. A layout is set in inode-ctx in lookup already */</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_compare (stbuf.ia_gfid, tmp_loc.inode-&gt;gfid)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                                "%s: gfid different on the target file on %s",</div><div class='del'>-                                tmp_loc.path ? tmp_loc.path :</div><div class='del'>-                                uuid_utoa (tmp_loc.gfid), dst_node-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_layout_unref(this, local-&gt;layout);</div><div class='ctx'> </div><div class='del'>-        /* update local. A layout is set in inode-ctx in lookup already */</div><div class='add'>+    local-&gt;layout = dht_layout_get(frame-&gt;this, inode);</div><div class='add'>+    local-&gt;cached_subvol = dst_node;</div><div class='ctx'> </div><div class='del'>-        dht_layout_unref (this, local-&gt;layout);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        local-&gt;layout   = dht_layout_get (frame-&gt;this, inode);</div><div class='del'>-        local-&gt;cached_subvol = dst_node;</div><div class='add'>+    /* once we detect the migration complete, the inode-ctx2 is no more</div><div class='add'>+       required.. delete the ctx and also, it means, open() already</div><div class='add'>+       done on all the fd of inode */</div><div class='add'>+    ret = inode_ctx_reset1(inode, this, &amp;tmp_miginfo);</div><div class='add'>+    if (tmp_miginfo) {</div><div class='add'>+        miginfo = (void *)tmp_miginfo;</div><div class='add'>+        GF_REF_PUT(miginfo);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* perform 'open()' on all the fd's present on the inode */</div><div class='add'>+    if (tmp_loc.path == NULL) {</div><div class='add'>+        inode_path(inode, NULL, &amp;path);</div><div class='add'>+        if (path)</div><div class='add'>+            tmp_loc.path = path;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;inode-&gt;fd_list))</div><div class='add'>+        goto unlock;</div><div class='add'>+</div><div class='add'>+    /* perform open as root:root. There is window between linkfile</div><div class='add'>+     * creation(root:root) and setattr with the correct uid/gid</div><div class='add'>+     */</div><div class='add'>+    SYNCTASK_SETID(0, 0);</div><div class='add'>+</div><div class='add'>+    /* It's possible that we are the last user of iter_fd after each</div><div class='add'>+     * iteration. In this case the fd_unref() of iter_fd at the end of</div><div class='add'>+     * the loop will cause the destruction of the fd. So we need to</div><div class='add'>+     * iterate the list safely because iter_fd cannot be trusted.</div><div class='add'>+     */</div><div class='add'>+    list_for_each_entry_safe(iter_fd, tmp, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if (fd_is_anonymous(iter_fd))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (dht_fd_open_on_dst(this, iter_fd, dst_node))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /* We need to release the inode-&gt;lock before calling</div><div class='add'>+         * syncop_open() to avoid possible deadlocks. However this</div><div class='add'>+         * can cause the iter_fd to be released by other threads.</div><div class='add'>+         * To avoid this, we take a reference before releasing the</div><div class='add'>+         * lock.</div><div class='add'>+         */</div><div class='add'>+        __fd_ref(iter_fd);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* once we detect the migration complete, the inode-ctx2 is no more</div><div class='del'>-           required.. delete the ctx and also, it means, open() already</div><div class='del'>-           done on all the fd of inode */</div><div class='del'>-        ret = inode_ctx_reset1 (inode, this, &amp;tmp_miginfo);</div><div class='del'>-        if (tmp_miginfo) {</div><div class='del'>-                miginfo = (void *)tmp_miginfo;</div><div class='del'>-                GF_REF_PUT (miginfo);</div><div class='del'>-                goto out;</div><div class='add'>+        /* flags for open are stripped down to allow following the</div><div class='add'>+         * new location of the file, otherwise we can get EEXIST or</div><div class='add'>+         * truncate the file again as rebalance is moving the data */</div><div class='add'>+        ret = syncop_open(dst_node, &amp;tmp_loc,</div><div class='add'>+                          (iter_fd-&gt;flags &amp; ~(O_CREAT | O_EXCL | O_TRUNC)),</div><div class='add'>+                          iter_fd, NULL, NULL);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                   DHT_MSG_OPEN_FD_ON_DST_FAILED,</div><div class='add'>+                   "failed"</div><div class='add'>+                   " to open the fd"</div><div class='add'>+                   " (%p, flags=0%o) on file %s @ %s",</div><div class='add'>+                   iter_fd, iter_fd-&gt;flags, path, dst_node-&gt;name);</div><div class='add'>+</div><div class='add'>+            open_failed = 1;</div><div class='add'>+            local-&gt;op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+        } else {</div><div class='add'>+            dht_fd_ctx_set(this, iter_fd, dst_node);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* perform 'open()' on all the fd's present on the inode */</div><div class='del'>-        if (tmp_loc.path == NULL) {</div><div class='del'>-                inode_path (inode, NULL, &amp;path);</div><div class='del'>-                if (path)</div><div class='del'>-                        tmp_loc.path = path;</div><div class='del'>-        }</div><div class='add'>+        fd_unref(iter_fd);</div><div class='ctx'> </div><div class='ctx'>         LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;inode-&gt;fd_list))</div><div class='del'>-                goto unlock;</div><div class='del'>-</div><div class='del'>-        /* perform open as root:root. There is window between linkfile</div><div class='del'>-         * creation(root:root) and setattr with the correct uid/gid</div><div class='del'>-         */</div><div class='del'>-        SYNCTASK_SETID(0, 0);</div><div class='del'>-</div><div class='del'>-        /* It's possible that we are the last user of iter_fd after each</div><div class='del'>-         * iteration. In this case the fd_unref() of iter_fd at the end of</div><div class='del'>-         * the loop will cause the destruction of the fd. So we need to</div><div class='del'>-         * iterate the list safely because iter_fd cannot be trusted.</div><div class='del'>-         */</div><div class='del'>-        list_for_each_entry_safe (iter_fd, tmp, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-</div><div class='del'>-                if (fd_is_anonymous (iter_fd))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (dht_fd_open_on_dst (this, iter_fd, dst_node))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* We need to release the inode-&gt;lock before calling</div><div class='del'>-                 * syncop_open() to avoid possible deadlocks. However this</div><div class='del'>-                 * can cause the iter_fd to be released by other threads.</div><div class='del'>-                 * To avoid this, we take a reference before releasing the</div><div class='del'>-                 * lock.</div><div class='del'>-                 */</div><div class='del'>-                __fd_ref(iter_fd);</div><div class='del'>-</div><div class='del'>-                UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-                /* flags for open are stripped down to allow following the</div><div class='del'>-                 * new location of the file, otherwise we can get EEXIST or</div><div class='del'>-                 * truncate the file again as rebalance is moving the data */</div><div class='del'>-                ret = syncop_open (dst_node, &amp;tmp_loc,</div><div class='del'>-                                   (iter_fd-&gt;flags &amp;</div><div class='del'>-                                   ~(O_CREAT | O_EXCL | O_TRUNC)),</div><div class='del'>-                                   iter_fd, NULL, NULL);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_OPEN_FD_ON_DST_FAILED, "failed"</div><div class='del'>-                                " to open the fd"</div><div class='del'>-                                " (%p, flags=0%o) on file %s @ %s",</div><div class='del'>-                                iter_fd, iter_fd-&gt;flags, path,</div><div class='del'>-                                dst_node-&gt;name);</div><div class='del'>-</div><div class='del'>-                        open_failed = 1;</div><div class='del'>-                        local-&gt;op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                } else {</div><div class='del'>-                        dht_fd_ctx_set (this, iter_fd, dst_node);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd_unref(iter_fd);</div><div class='del'>-</div><div class='del'>-                LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        }</div><div class='add'>+    SYNCTASK_SETID(frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='ctx'> </div><div class='del'>-        SYNCTASK_SETID (frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='del'>-</div><div class='del'>-        if (open_failed) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto unlock;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (open_failed) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto unlock;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;tmp_loc);</div><div class='add'>+    loc_wipe(&amp;tmp_loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rebalance_complete_check (xlator_t *this, call_frame_t *frame)</div><div class='add'>+dht_rebalance_complete_check(xlator_t *this, call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int         ret     = -1;</div><div class='del'>-</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, dht_migration_complete_check_task,</div><div class='del'>-                            dht_migration_complete_check_done,</div><div class='del'>-                            frame, frame);</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, dht_migration_complete_check_task,</div><div class='add'>+                       dht_migration_complete_check_done, frame, frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* During 'in-progress' state, both nodes should have the file */</div><div class='hunk'>@@ -1550,790 +1477,777 @@ dht_rebalance_complete_check (xlator_t *this, call_frame_t *frame)</div><div class='ctx'>   1 : File is being migrated but not by this DHT layer.</div><div class='ctx'> */</div><div class='ctx'> static int</div><div class='del'>-dht_inprogress_check_done (int op_ret, call_frame_t *frame, void *data)</div><div class='add'>+dht_inprogress_check_done(int op_ret, call_frame_t *frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local      = NULL;</div><div class='del'>-        xlator_t    *dst_subvol = NULL, *src_subvol = NULL;</div><div class='del'>-        inode_t     *inode      = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *dst_subvol = NULL, *src_subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='add'>+    inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='ctx'> </div><div class='del'>-        dht_inode_ctx_get_mig_info (THIS, inode, &amp;src_subvol, &amp;dst_subvol);</div><div class='del'>-        if (dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                     src_subvol, dst_subvol)) {</div><div class='del'>-                dst_subvol = dht_subvol_get_cached (THIS, inode);</div><div class='del'>-                if (!dst_subvol) {</div><div class='del'>-                        local-&gt;op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    dht_inode_ctx_get_mig_info(THIS, inode, &amp;src_subvol, &amp;dst_subvol);</div><div class='add'>+    if (dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol, dst_subvol)) {</div><div class='add'>+        dst_subvol = dht_subvol_get_cached(THIS, inode);</div><div class='add'>+        if (!dst_subvol) {</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        local-&gt;rebalance.target_op_fn (THIS, dst_subvol, frame, op_ret);</div><div class='add'>+    local-&gt;rebalance.target_op_fn(THIS, dst_subvol, frame, op_ret);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_rebalance_inprogress_task (void *data)</div><div class='add'>+dht_rebalance_inprogress_task(void *data)</div><div class='ctx'> {</div><div class='del'>-        int           ret             = -1;</div><div class='del'>-        xlator_t     *src_node        = NULL;</div><div class='del'>-        xlator_t     *dst_node        = NULL;</div><div class='del'>-        dht_local_t  *local           = NULL;</div><div class='del'>-        dict_t       *dict            = NULL;</div><div class='del'>-        call_frame_t *frame           = NULL;</div><div class='del'>-        xlator_t     *this            = NULL;</div><div class='del'>-        char         *path            = NULL;</div><div class='del'>-        struct iatt   stbuf           = {0,};</div><div class='del'>-        loc_t         tmp_loc         = {0,};</div><div class='del'>-        dht_conf_t   *conf            = NULL;</div><div class='del'>-        inode_t      *inode           = NULL;</div><div class='del'>-        fd_t         *iter_fd         = NULL;</div><div class='del'>-        fd_t         *tmp             = NULL;</div><div class='del'>-        int           open_failed     = 0;</div><div class='del'>-        uint64_t      tmp_miginfo     = 0;</div><div class='del'>-        dht_migrate_info_t *miginfo   = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        this  = THIS;</div><div class='del'>-        frame = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        src_node = local-&gt;cached_subvol;</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;loc.inode &amp;&amp; !local-&gt;fd)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *src_node = NULL;</div><div class='add'>+    xlator_t *dst_node = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    fd_t *iter_fd = NULL;</div><div class='add'>+    fd_t *tmp = NULL;</div><div class='add'>+    int open_failed = 0;</div><div class='add'>+    uint64_t tmp_miginfo = 0;</div><div class='add'>+    dht_migrate_info_t *miginfo = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    frame = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    src_node = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;loc.inode &amp;&amp; !local-&gt;fd)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        inode = (!local-&gt;fd) ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='add'>+    inode = (!local-&gt;fd) ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='ctx'> </div><div class='del'>-        /* getxattr on cached_subvol for 'linkto' value. Do path based getxattr</div><div class='del'>-         * as root:root. If a fd is already open, access check won't be done*/</div><div class='del'>-        if (local-&gt;loc.inode) {</div><div class='del'>-                SYNCTASK_SETID (0, 0);</div><div class='del'>-                ret = syncop_getxattr (src_node, &amp;local-&gt;loc, &amp;dict,</div><div class='del'>-                                       conf-&gt;link_xattr_name, NULL, NULL);</div><div class='del'>-                SYNCTASK_SETID (frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='del'>-        } else {</div><div class='del'>-                ret = syncop_fgetxattr (src_node, local-&gt;fd, &amp;dict,</div><div class='del'>-                                        conf-&gt;link_xattr_name, NULL, NULL);</div><div class='del'>-        }</div><div class='add'>+    /* getxattr on cached_subvol for 'linkto' value. Do path based getxattr</div><div class='add'>+     * as root:root. If a fd is already open, access check won't be done*/</div><div class='add'>+    if (local-&gt;loc.inode) {</div><div class='add'>+        SYNCTASK_SETID(0, 0);</div><div class='add'>+        ret = syncop_getxattr(src_node, &amp;local-&gt;loc, &amp;dict,</div><div class='add'>+                              conf-&gt;link_xattr_name, NULL, NULL);</div><div class='add'>+        SYNCTASK_SETID(frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='add'>+    } else {</div><div class='add'>+        ret = syncop_fgetxattr(src_node, local-&gt;fd, &amp;dict,</div><div class='add'>+                               conf-&gt;link_xattr_name, NULL, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Each DHT xlator layer has its own name for the linkto xattr.</div><div class='add'>+     * If the file mode bits indicate the the file is being migrated but</div><div class='add'>+     * this layer's linkto xattr is not present, it means that another</div><div class='add'>+     * DHT layer is migrating the file. In this case, return 1 so</div><div class='add'>+     * the mode bits can be passed on to the higher layer for appropriate</div><div class='add'>+     * action.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (-ret == ENODATA) {</div><div class='add'>+        /* This DHT layer is not migrating this file */</div><div class='add'>+        ret = inode_ctx_reset1(inode, this, &amp;tmp_miginfo);</div><div class='add'>+        if (tmp_miginfo) {</div><div class='add'>+            /* This can be a problem if the file was</div><div class='add'>+             * migrated by two different layers. Raise</div><div class='add'>+             * a warning here.</div><div class='add'>+             */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_HAS_MIGINFO,</div><div class='add'>+                   "%s: Found miginfo in the inode ctx",</div><div class='add'>+                   tmp_loc.path ? tmp_loc.path : uuid_utoa(tmp_loc.gfid));</div><div class='add'>+            miginfo = (void *)tmp_miginfo;</div><div class='add'>+            GF_REF_PUT(miginfo);</div><div class='add'>+        }</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Each DHT xlator layer has its own name for the linkto xattr.</div><div class='del'>-         * If the file mode bits indicate the the file is being migrated but</div><div class='del'>-         * this layer's linkto xattr is not present, it means that another</div><div class='del'>-         * DHT layer is migrating the file. In this case, return 1 so</div><div class='del'>-         * the mode bits can be passed on to the higher layer for appropriate</div><div class='del'>-         * action.</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_GET_XATTR_FAILED,</div><div class='add'>+               "%s: failed to get the 'linkto' xattr", local-&gt;loc.path);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dst_node = dht_linkfile_subvol(this, NULL, NULL, dict);</div><div class='add'>+    if (!dst_node) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SUBVOL_NOT_FOUND,</div><div class='add'>+               "%s: failed to get the 'linkto' xattr from dict",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.target_node = dst_node;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc.inode) {</div><div class='add'>+        loc_copy(&amp;tmp_loc, &amp;local-&gt;loc);</div><div class='add'>+    } else {</div><div class='add'>+        tmp_loc.inode = inode_ref(inode);</div><div class='add'>+        gf_uuid_copy(tmp_loc.gfid, inode-&gt;gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* lookup on dst */</div><div class='add'>+    ret = syncop_lookup(dst_node, &amp;tmp_loc, &amp;stbuf, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+               DHT_MSG_FILE_LOOKUP_ON_DST_FAILED,</div><div class='add'>+               "%s: failed to lookup the file on %s",</div><div class='add'>+               tmp_loc.path ? tmp_loc.path : uuid_utoa(tmp_loc.gfid),</div><div class='add'>+               dst_node-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_compare(stbuf.ia_gfid, tmp_loc.inode-&gt;gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+               "%s: gfid different on the target file on %s",</div><div class='add'>+               tmp_loc.path ? tmp_loc.path : uuid_utoa(tmp_loc.gfid),</div><div class='add'>+               dst_node-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    if (tmp_loc.path == NULL) {</div><div class='add'>+        inode_path(inode, NULL, &amp;path);</div><div class='add'>+        if (path)</div><div class='add'>+            tmp_loc.path = path;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;inode-&gt;fd_list))</div><div class='add'>+        goto unlock;</div><div class='add'>+</div><div class='add'>+    /* perform open as root:root. There is window between linkfile</div><div class='add'>+     * creation(root:root) and setattr with the correct uid/gid</div><div class='add'>+     */</div><div class='add'>+    SYNCTASK_SETID(0, 0);</div><div class='add'>+</div><div class='add'>+    /* It's possible that we are the last user of iter_fd after each</div><div class='add'>+     * iteration. In this case the fd_unref() of iter_fd at the end of</div><div class='add'>+     * the loop will cause the destruction of the fd. So we need to</div><div class='add'>+     * iterate the list safely because iter_fd cannot be trusted.</div><div class='add'>+     */</div><div class='add'>+    list_for_each_entry_safe(iter_fd, tmp, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if (fd_is_anonymous(iter_fd))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (dht_fd_open_on_dst(this, iter_fd, dst_node))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /* We need to release the inode-&gt;lock before calling</div><div class='add'>+         * syncop_open() to avoid possible deadlocks. However this</div><div class='add'>+         * can cause the iter_fd to be released by other threads.</div><div class='add'>+         * To avoid this, we take a reference before releasing the</div><div class='add'>+         * lock.</div><div class='ctx'>          */</div><div class='add'>+        __fd_ref(iter_fd);</div><div class='ctx'> </div><div class='del'>-        if (-ret == ENODATA) {</div><div class='del'>-                /* This DHT layer is not migrating this file */</div><div class='del'>-                ret = inode_ctx_reset1 (inode, this, &amp;tmp_miginfo);</div><div class='del'>-                if (tmp_miginfo) {</div><div class='del'>-                        /* This can be a problem if the file was</div><div class='del'>-                         * migrated by two different layers. Raise</div><div class='del'>-                         * a warning here.</div><div class='del'>-                         */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_HAS_MIGINFO,</div><div class='del'>-                                "%s: Found miginfo in the inode ctx",</div><div class='del'>-                                tmp_loc.path ? tmp_loc.path :</div><div class='del'>-                                uuid_utoa (tmp_loc.gfid));</div><div class='del'>-                        miginfo = (void *)tmp_miginfo;</div><div class='del'>-                        GF_REF_PUT (miginfo);</div><div class='del'>-                }</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='add'>+        /* flags for open are stripped down to allow following the</div><div class='add'>+         * new location of the file, otherwise we can get EEXIST or</div><div class='add'>+         * truncate the file again as rebalance is moving the data */</div><div class='add'>+        ret = syncop_open(dst_node, &amp;tmp_loc,</div><div class='add'>+                          (iter_fd-&gt;flags &amp; ~(O_CREAT | O_EXCL | O_TRUNC)),</div><div class='add'>+                          iter_fd, NULL, NULL);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_GET_XATTR_FAILED,</div><div class='del'>-                        "%s: failed to get the 'linkto' xattr",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dst_node = dht_linkfile_subvol (this, NULL, NULL, dict);</div><div class='del'>-        if (!dst_node) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_NOT_FOUND,</div><div class='del'>-                        "%s: failed to get the 'linkto' xattr from dict",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;rebalance.target_node = dst_node;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;loc.inode) {</div><div class='del'>-                loc_copy (&amp;tmp_loc, &amp;local-&gt;loc);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                   DHT_MSG_OPEN_FD_ON_DST_FAILED,</div><div class='add'>+                   "failed to send open "</div><div class='add'>+                   "the fd (%p, flags=0%o) on file %s @ %s",</div><div class='add'>+                   iter_fd, iter_fd-&gt;flags, path, dst_node-&gt;name);</div><div class='add'>+            ret = -1;</div><div class='add'>+            open_failed = 1;</div><div class='ctx'>         } else {</div><div class='del'>-                tmp_loc.inode = inode_ref (inode);</div><div class='del'>-                gf_uuid_copy (tmp_loc.gfid, inode-&gt;gfid);</div><div class='add'>+            /* Potential fd leak if this fails here as it will be</div><div class='add'>+               reopened at the next Phase1/2 check */</div><div class='add'>+            dht_fd_ctx_set(this, iter_fd, dst_node);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* lookup on dst */</div><div class='del'>-        ret = syncop_lookup (dst_node, &amp;tmp_loc, &amp;stbuf, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_FILE_LOOKUP_ON_DST_FAILED,</div><div class='del'>-                        "%s: failed to lookup the file on %s",</div><div class='del'>-                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid),</div><div class='del'>-                        dst_node-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_compare (stbuf.ia_gfid, tmp_loc.inode-&gt;gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                        "%s: gfid different on the target file on %s",</div><div class='del'>-                        tmp_loc.path ? tmp_loc.path : uuid_utoa (tmp_loc.gfid),</div><div class='del'>-                        dst_node-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        if (tmp_loc.path == NULL) {</div><div class='del'>-                inode_path (inode, NULL, &amp;path);</div><div class='del'>-                if (path)</div><div class='del'>-                        tmp_loc.path = path;</div><div class='del'>-        }</div><div class='add'>+        fd_unref(iter_fd);</div><div class='ctx'> </div><div class='ctx'>         LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;inode-&gt;fd_list))</div><div class='del'>-                goto unlock;</div><div class='del'>-</div><div class='del'>-        /* perform open as root:root. There is window between linkfile</div><div class='del'>-         * creation(root:root) and setattr with the correct uid/gid</div><div class='del'>-         */</div><div class='del'>-        SYNCTASK_SETID (0, 0);</div><div class='del'>-</div><div class='del'>-        /* It's possible that we are the last user of iter_fd after each</div><div class='del'>-         * iteration. In this case the fd_unref() of iter_fd at the end of</div><div class='del'>-         * the loop will cause the destruction of the fd. So we need to</div><div class='del'>-         * iterate the list safely because iter_fd cannot be trusted.</div><div class='del'>-         */</div><div class='del'>-        list_for_each_entry_safe (iter_fd, tmp, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-                if (fd_is_anonymous (iter_fd))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (dht_fd_open_on_dst (this, iter_fd, dst_node))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* We need to release the inode-&gt;lock before calling</div><div class='del'>-                 * syncop_open() to avoid possible deadlocks. However this</div><div class='del'>-                 * can cause the iter_fd to be released by other threads.</div><div class='del'>-                 * To avoid this, we take a reference before releasing the</div><div class='del'>-                 * lock.</div><div class='del'>-                 */</div><div class='del'>-                __fd_ref(iter_fd);</div><div class='del'>-</div><div class='del'>-                UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-                /* flags for open are stripped down to allow following the</div><div class='del'>-                 * new location of the file, otherwise we can get EEXIST or</div><div class='del'>-                 * truncate the file again as rebalance is moving the data */</div><div class='del'>-                ret = syncop_open (dst_node, &amp;tmp_loc,</div><div class='del'>-                                  (iter_fd-&gt;flags &amp;</div><div class='del'>-                                   ~(O_CREAT | O_EXCL | O_TRUNC)),</div><div class='del'>-                                   iter_fd, NULL, NULL);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_OPEN_FD_ON_DST_FAILED,</div><div class='del'>-                                "failed to send open "</div><div class='del'>-                                "the fd (%p, flags=0%o) on file %s @ %s",</div><div class='del'>-                                iter_fd, iter_fd-&gt;flags, path,</div><div class='del'>-                                dst_node-&gt;name);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        open_failed = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        /* Potential fd leak if this fails here as it will be</div><div class='del'>-                           reopened at the next Phase1/2 check */</div><div class='del'>-                        dht_fd_ctx_set (this, iter_fd, dst_node);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fd_unref(iter_fd);</div><div class='del'>-</div><div class='del'>-                LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        SYNCTASK_SETID (frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='add'>+    SYNCTASK_SETID(frame-&gt;root-&gt;uid, frame-&gt;root-&gt;gid);</div><div class='ctx'> </div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (open_failed) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (open_failed) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_set_mig_info (this, inode, src_node, dst_node);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                        "%s: failed to set inode-ctx target file at %s",</div><div class='del'>-                        local-&gt;loc.path, dst_node-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_inode_ctx_set_mig_info(this, inode, src_node, dst_node);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+               "%s: failed to set inode-ctx target file at %s", local-&gt;loc.path,</div><div class='add'>+               dst_node-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    if (dict) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;tmp_loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;tmp_loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rebalance_in_progress_check (xlator_t *this, call_frame_t *frame)</div><div class='add'>+dht_rebalance_in_progress_check(xlator_t *this, call_frame_t *frame)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        int         ret     = -1;</div><div class='del'>-</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, dht_rebalance_inprogress_task,</div><div class='del'>-                            dht_inprogress_check_done,</div><div class='del'>-                            frame, frame);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, dht_rebalance_inprogress_task,</div><div class='add'>+                       dht_inprogress_check_done, frame, frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_layout_set (inode_t *inode, xlator_t *this,</div><div class='del'>-                          dht_layout_t *layout_int)</div><div class='add'>+dht_inode_ctx_layout_set(inode_t *inode, xlator_t *this,</div><div class='add'>+                         dht_layout_t *layout_int)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-</div><div class='del'>-        ret = dht_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if (!ret &amp;&amp; ctx) {</div><div class='del'>-                ctx-&gt;layout = layout_int;</div><div class='del'>-        } else {</div><div class='del'>-                ctx = GF_CALLOC (1, sizeof (*ctx), gf_dht_mt_inode_ctx_t);</div><div class='del'>-                if (!ctx)</div><div class='del'>-                        return ret;</div><div class='del'>-                ctx-&gt;layout = layout_int;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_inode_ctx_set (inode, this, ctx);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = dht_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (!ret &amp;&amp; ctx) {</div><div class='add'>+        ctx-&gt;layout = layout_int;</div><div class='add'>+    } else {</div><div class='add'>+        ctx = GF_CALLOC(1, sizeof(*ctx), gf_dht_mt_inode_ctx_t);</div><div class='add'>+        if (!ctx)</div><div class='add'>+            return ret;</div><div class='add'>+        ctx-&gt;layout = layout_int;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_inode_ctx_set(inode, this, ctx);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_inode_ctx_time_set (inode_t *inode, xlator_t *this, struct iatt *stat)</div><div class='add'>+dht_inode_ctx_time_set(inode_t *inode, xlator_t *this, struct iatt *stat)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        dht_stat_time_t         *time           = 0;</div><div class='del'>-        int                      ret            = -1;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    dht_stat_time_t *time = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_get (inode, this, &amp;ctx);</div><div class='add'>+    ret = dht_inode_ctx_get(inode, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-		return;</div><div class='add'>+    if (ret)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        time = &amp;ctx-&gt;time;</div><div class='add'>+    time = &amp;ctx-&gt;time;</div><div class='ctx'> </div><div class='del'>-	time-&gt;mtime      = stat-&gt;ia_mtime;</div><div class='del'>-	time-&gt;mtime_nsec = stat-&gt;ia_mtime_nsec;</div><div class='add'>+    time-&gt;mtime = stat-&gt;ia_mtime;</div><div class='add'>+    time-&gt;mtime_nsec = stat-&gt;ia_mtime_nsec;</div><div class='ctx'> </div><div class='del'>-	time-&gt;ctime      = stat-&gt;ia_ctime;</div><div class='del'>-	time-&gt;ctime_nsec = stat-&gt;ia_ctime_nsec;</div><div class='add'>+    time-&gt;ctime = stat-&gt;ia_ctime;</div><div class='add'>+    time-&gt;ctime_nsec = stat-&gt;ia_ctime_nsec;</div><div class='ctx'> </div><div class='del'>-	time-&gt;atime      = stat-&gt;ia_atime;</div><div class='del'>-	time-&gt;atime_nsec = stat-&gt;ia_atime_nsec;</div><div class='add'>+    time-&gt;atime = stat-&gt;ia_atime;</div><div class='add'>+    time-&gt;atime_nsec = stat-&gt;ia_atime_nsec;</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_time_update (inode_t *inode, xlator_t *this, struct iatt *stat,</div><div class='del'>-                           int32_t post)</div><div class='add'>+dht_inode_ctx_time_update(inode_t *inode, xlator_t *this, struct iatt *stat,</div><div class='add'>+                          int32_t post)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        dht_stat_time_t         *time           = 0;</div><div class='del'>-        int                      ret            = -1;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    dht_stat_time_t *time = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, stat, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, stat, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_get (inode, this, &amp;ctx);</div><div class='add'>+    ret = dht_inode_ctx_get(inode, this, &amp;ctx);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                ctx = GF_CALLOC (1, sizeof (*ctx), gf_dht_mt_inode_ctx_t);</div><div class='del'>-                if (!ctx)</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        ctx = GF_CALLOC(1, sizeof(*ctx), gf_dht_mt_inode_ctx_t);</div><div class='add'>+        if (!ctx)</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        time = &amp;ctx-&gt;time;</div><div class='add'>+    time = &amp;ctx-&gt;time;</div><div class='ctx'> </div><div class='del'>-        DHT_UPDATE_TIME(time-&gt;mtime, time-&gt;mtime_nsec,</div><div class='del'>-                        stat-&gt;ia_mtime, stat-&gt;ia_mtime_nsec, inode, post);</div><div class='del'>-        DHT_UPDATE_TIME(time-&gt;ctime, time-&gt;ctime_nsec,</div><div class='del'>-                        stat-&gt;ia_ctime, stat-&gt;ia_ctime_nsec, inode, post);</div><div class='del'>-        DHT_UPDATE_TIME(time-&gt;atime, time-&gt;atime_nsec,</div><div class='del'>-                        stat-&gt;ia_atime, stat-&gt;ia_atime_nsec, inode, post);</div><div class='add'>+    DHT_UPDATE_TIME(time-&gt;mtime, time-&gt;mtime_nsec, stat-&gt;ia_mtime,</div><div class='add'>+                    stat-&gt;ia_mtime_nsec, inode, post);</div><div class='add'>+    DHT_UPDATE_TIME(time-&gt;ctime, time-&gt;ctime_nsec, stat-&gt;ia_ctime,</div><div class='add'>+                    stat-&gt;ia_ctime_nsec, inode, post);</div><div class='add'>+    DHT_UPDATE_TIME(time-&gt;atime, time-&gt;atime_nsec, stat-&gt;ia_atime,</div><div class='add'>+                    stat-&gt;ia_atime_nsec, inode, post);</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_set (inode, this, ctx);</div><div class='add'>+    ret = dht_inode_ctx_set(inode, this, ctx);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_get (inode_t *inode, xlator_t *this, dht_inode_ctx_t **ctx)</div><div class='add'>+dht_inode_ctx_get(inode_t *inode, xlator_t *this, dht_inode_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        int             ret     = -1;</div><div class='del'>-        uint64_t        ctx_int = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;ctx_int);</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;ctx_int);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                *ctx = (dht_inode_ctx_t *) ctx_int;</div><div class='add'>+    if (ctx)</div><div class='add'>+        *ctx = (dht_inode_ctx_t *)ctx_int;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int dht_inode_ctx_set (inode_t *inode, xlator_t *this, dht_inode_ctx_t *ctx)</div><div class='add'>+int</div><div class='add'>+dht_inode_ctx_set(inode_t *inode, xlator_t *this, dht_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        uint64_t        ctx_int = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, ctx, out);</div><div class='ctx'> </div><div class='del'>-        ctx_int = (long)ctx;</div><div class='del'>-        ret = inode_ctx_set (inode, this, &amp;ctx_int);</div><div class='add'>+    ctx_int = (long)ctx;</div><div class='add'>+    ret = inode_ctx_set(inode, this, &amp;ctx_int);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_subvol_status (dht_conf_t *conf, xlator_t *subvol)</div><div class='add'>+dht_subvol_status(dht_conf_t *conf, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        for (i=0 ; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] == subvol) {</div><div class='del'>-                        return conf-&gt;subvolume_status[i];</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == subvol) {</div><div class='add'>+            return conf-&gt;subvolume_status[i];</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-inode_t*</div><div class='del'>-dht_heal_path (xlator_t *this, char *path, inode_table_t *itable)</div><div class='add'>+inode_t *</div><div class='add'>+dht_heal_path(xlator_t *this, char *path, inode_table_t *itable)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        struct iatt     iatt            = {0, };</div><div class='del'>-        inode_t        *linked_inode    = NULL;</div><div class='del'>-        loc_t           loc             = {0, };</div><div class='del'>-        char           *bname           = NULL;</div><div class='del'>-        char           *save_ptr        = NULL;</div><div class='del'>-        uuid_t          gfid            = {0, };</div><div class='del'>-        char           *tmp_path        = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        tmp_path = gf_strdup (path);</div><div class='del'>-        if (!tmp_path) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *bname = NULL;</div><div class='add'>+    char *save_ptr = NULL;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *tmp_path = NULL;</div><div class='add'>+</div><div class='add'>+    tmp_path = gf_strdup(path);</div><div class='add'>+    if (!tmp_path) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memset (gfid, 0, 16);</div><div class='del'>-        gfid[15] = 1;</div><div class='add'>+    memset(gfid, 0, 16);</div><div class='add'>+    gfid[15] = 1;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (loc.pargfid, gfid);</div><div class='del'>-        loc.parent = inode_ref (itable-&gt;root);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, gfid);</div><div class='add'>+    loc.parent = inode_ref(itable-&gt;root);</div><div class='ctx'> </div><div class='del'>-        bname = strtok_r (tmp_path, "/",  &amp;save_ptr);</div><div class='add'>+    bname = strtok_r(tmp_path, "/", &amp;save_ptr);</div><div class='ctx'> </div><div class='del'>-        /* sending a lookup on parent directory,</div><div class='del'>-         * Eg:  if  path is like /a/b/c/d/e/f/g/</div><div class='del'>-         * then we will send a lookup on a first and then b,c,d,etc</div><div class='del'>-         */</div><div class='add'>+    /* sending a lookup on parent directory,</div><div class='add'>+     * Eg:  if  path is like /a/b/c/d/e/f/g/</div><div class='add'>+     * then we will send a lookup on a first and then b,c,d,etc</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        while (bname) {</div><div class='del'>-                linked_inode = NULL;</div><div class='del'>-                loc.inode = inode_grep (itable, loc.parent, bname);</div><div class='del'>-                if (loc.inode == NULL) {</div><div class='del'>-                        loc.inode = inode_new (itable);</div><div class='del'>-                        if (loc.inode == NULL) {</div><div class='del'>-                                ret = -ENOMEM;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        /*</div><div class='del'>-                         * Inode is already populated in the inode table.</div><div class='del'>-                         * Which means we already looked up the inode and</div><div class='del'>-                         * linked with a dentry. So that we will skip</div><div class='del'>-                         * lookup on this entry, and proceed to next.</div><div class='del'>-                         */</div><div class='del'>-                        linked_inode = loc.inode;</div><div class='del'>-                        bname = strtok_r (NULL, "/",  &amp;save_ptr);</div><div class='del'>-                        inode_unref (loc.parent);</div><div class='del'>-                        if (!bname) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        loc.parent = loc.inode;</div><div class='del'>-                        gf_uuid_copy (loc.pargfid, loc.inode-&gt;gfid);</div><div class='del'>-                        loc.inode = NULL;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    while (bname) {</div><div class='add'>+        linked_inode = NULL;</div><div class='add'>+        loc.inode = inode_grep(itable, loc.parent, bname);</div><div class='add'>+        if (loc.inode == NULL) {</div><div class='add'>+            loc.inode = inode_new(itable);</div><div class='add'>+            if (loc.inode == NULL) {</div><div class='add'>+                ret = -ENOMEM;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            /*</div><div class='add'>+             * Inode is already populated in the inode table.</div><div class='add'>+             * Which means we already looked up the inode and</div><div class='add'>+             * linked with a dentry. So that we will skip</div><div class='add'>+             * lookup on this entry, and proceed to next.</div><div class='add'>+             */</div><div class='add'>+            linked_inode = loc.inode;</div><div class='add'>+            bname = strtok_r(NULL, "/", &amp;save_ptr);</div><div class='add'>+            inode_unref(loc.parent);</div><div class='add'>+            if (!bname) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            loc.parent = loc.inode;</div><div class='add'>+            gf_uuid_copy(loc.pargfid, loc.inode-&gt;gfid);</div><div class='add'>+            loc.inode = NULL;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                loc.name = bname;</div><div class='del'>-                ret = loc_path (&amp;loc, bname);</div><div class='add'>+        loc.name = bname;</div><div class='add'>+        ret = loc_path(&amp;loc, bname);</div><div class='ctx'> </div><div class='del'>-                ret = syncop_lookup (this, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, -ret,</div><div class='del'>-                                DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                                "Healing of path %s failed on subvolume %s for "</div><div class='del'>-                                "directory %s", path, this-&gt;name, bname);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = syncop_lookup(this, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, -ret, DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+                   "Healing of path %s failed on subvolume %s for "</div><div class='add'>+                   "directory %s",</div><div class='add'>+                   path, this-&gt;name, bname);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                linked_inode = inode_link (loc.inode, loc.parent, bname, &amp;iatt);</div><div class='del'>-                if (!linked_inode)</div><div class='del'>-                        goto out;</div><div class='add'>+        linked_inode = inode_link(loc.inode, loc.parent, bname, &amp;iatt);</div><div class='add'>+        if (!linked_inode)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                loc_wipe (&amp;loc);</div><div class='del'>-                gf_uuid_copy (loc.pargfid, linked_inode-&gt;gfid);</div><div class='del'>-                loc.inode = NULL;</div><div class='add'>+        loc_wipe(&amp;loc);</div><div class='add'>+        gf_uuid_copy(loc.pargfid, linked_inode-&gt;gfid);</div><div class='add'>+        loc.inode = NULL;</div><div class='ctx'> </div><div class='del'>-                bname = strtok_r (NULL, "/",  &amp;save_ptr);</div><div class='del'>-                if (bname)</div><div class='del'>-                        loc.parent = linked_inode;</div><div class='del'>-        }</div><div class='add'>+        bname = strtok_r(NULL, "/", &amp;save_ptr);</div><div class='add'>+        if (bname)</div><div class='add'>+            loc.parent = linked_inode;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        inode_ref (linked_inode);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        GF_FREE (tmp_path);</div><div class='add'>+    inode_ref(linked_inode);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    GF_FREE(tmp_path);</div><div class='ctx'> </div><div class='del'>-        return linked_inode;</div><div class='add'>+    return linked_inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_heal_full_path (void *data)</div><div class='add'>+dht_heal_full_path(void *data)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t            *heal_frame     = data;</div><div class='del'>-        dht_local_t             *local          = NULL;</div><div class='del'>-        loc_t                    loc            = {0, };</div><div class='del'>-        dict_t                  *dict           = NULL;</div><div class='del'>-        char                    *path           = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-        xlator_t                *source         = NULL;</div><div class='del'>-        xlator_t                *this           = NULL;</div><div class='del'>-        inode_table_t           *itable         = NULL;</div><div class='del'>-        inode_t                 *inode          = NULL;</div><div class='del'>-        inode_t                 *tmp_inode      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("DHT", heal_frame, out);</div><div class='del'>-</div><div class='del'>-        local = heal_frame-&gt;local;</div><div class='del'>-        this = heal_frame-&gt;this;</div><div class='del'>-        source = heal_frame-&gt;cookie;</div><div class='del'>-        heal_frame-&gt;cookie = NULL;</div><div class='del'>-        gf_uuid_copy (loc.gfid, local-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;loc.inode)</div><div class='del'>-                loc.inode = inode_ref (local-&gt;loc.inode);</div><div class='del'>-        else</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        itable = loc.inode-&gt;table;</div><div class='del'>-        ret = syncop_getxattr (source, &amp;loc, &amp;dict,</div><div class='del'>-                       GET_ANCESTRY_PATH_KEY, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, -ret,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                        "Failed to get path from subvol %s. Aborting "</div><div class='del'>-                        "directory healing.", source-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    call_frame_t *heal_frame = data;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *source = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *tmp_inode = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("DHT", heal_frame, out);</div><div class='add'>+</div><div class='add'>+    local = heal_frame-&gt;local;</div><div class='add'>+    this = heal_frame-&gt;this;</div><div class='add'>+    source = heal_frame-&gt;cookie;</div><div class='add'>+    heal_frame-&gt;cookie = NULL;</div><div class='add'>+    gf_uuid_copy(loc.gfid, local-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc.inode)</div><div class='add'>+        loc.inode = inode_ref(local-&gt;loc.inode);</div><div class='add'>+    else</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (dict, GET_ANCESTRY_PATH_KEY, &amp;path);</div><div class='del'>-        if (path) {</div><div class='del'>-                inode = dht_heal_path (this, path, itable);</div><div class='del'>-                if (inode &amp;&amp; inode != local-&gt;inode) {</div><div class='del'>-                        /*</div><div class='del'>-                         * if inode returned by heal function is different</div><div class='del'>-                         * from what we passed, which means a racing thread</div><div class='del'>-                         * already linked a different inode for dentry.</div><div class='del'>-                         * So we will update our local-&gt;inode, so that we can</div><div class='del'>-                         * retrurn proper inode.</div><div class='del'>-                         */</div><div class='del'>-                        tmp_inode = local-&gt;inode;</div><div class='del'>-                        local-&gt;inode = inode;</div><div class='del'>-                        inode_unref (tmp_inode);</div><div class='del'>-                        tmp_inode = NULL;</div><div class='del'>-                } else {</div><div class='del'>-                        inode_unref (inode);</div><div class='del'>-                }</div><div class='add'>+    itable = loc.inode-&gt;table;</div><div class='add'>+    ret = syncop_getxattr(source, &amp;loc, &amp;dict, GET_ANCESTRY_PATH_KEY, NULL,</div><div class='add'>+                          NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, -ret, DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+               "Failed to get path from subvol %s. Aborting "</div><div class='add'>+               "directory healing.",</div><div class='add'>+               source-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, GET_ANCESTRY_PATH_KEY, &amp;path);</div><div class='add'>+    if (path) {</div><div class='add'>+        inode = dht_heal_path(this, path, itable);</div><div class='add'>+        if (inode &amp;&amp; inode != local-&gt;inode) {</div><div class='add'>+            /*</div><div class='add'>+             * if inode returned by heal function is different</div><div class='add'>+             * from what we passed, which means a racing thread</div><div class='add'>+             * already linked a different inode for dentry.</div><div class='add'>+             * So we will update our local-&gt;inode, so that we can</div><div class='add'>+             * retrurn proper inode.</div><div class='add'>+             */</div><div class='add'>+            tmp_inode = local-&gt;inode;</div><div class='add'>+            local-&gt;inode = inode;</div><div class='add'>+            inode_unref(tmp_inode);</div><div class='add'>+            tmp_inode = NULL;</div><div class='add'>+        } else {</div><div class='add'>+            inode_unref(inode);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_heal_full_path_done (int op_ret, call_frame_t *heal_frame, void *data)</div><div class='add'>+dht_heal_full_path_done(int op_ret, call_frame_t *heal_frame, void *data)</div><div class='ctx'> {</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    local = heal_frame-&gt;local;</div><div class='add'>+    main_frame = local-&gt;main_frame;</div><div class='add'>+    local-&gt;main_frame = NULL;</div><div class='add'>+    this = heal_frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='add'>+    if (local-&gt;need_xattr_heal) {</div><div class='add'>+        local-&gt;need_xattr_heal = 0;</div><div class='add'>+        ret = dht_dir_xattr_heal(this, local);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ret, DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                   "xattr heal failed for directory  %s ", local-&gt;loc.path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_frame_t            *main_frame       = NULL;</div><div class='del'>-        dht_local_t             *local            = NULL;</div><div class='del'>-        xlator_t                *this             = NULL;</div><div class='del'>-        int                     ret               = -1;</div><div class='del'>-</div><div class='del'>-        local = heal_frame-&gt;local;</div><div class='del'>-        main_frame = local-&gt;main_frame;</div><div class='del'>-        local-&gt;main_frame = NULL;</div><div class='del'>-        this = heal_frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='del'>-        if (local-&gt;need_xattr_heal) {</div><div class='del'>-                local-&gt;need_xattr_heal = 0;</div><div class='del'>-                ret =  dht_dir_xattr_heal (this, local);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                                DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                "xattr heal failed for directory  %s ",</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DHT_STACK_UNWIND (lookup, main_frame, 0, 0,</div><div class='del'>-                          local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xattr,</div><div class='del'>-                          &amp;local-&gt;postparent);</div><div class='add'>+    DHT_STACK_UNWIND(lookup, main_frame, 0, 0, local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='add'>+                     local-&gt;xattr, &amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (heal_frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(heal_frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function must be called inside an inode lock */</div><div class='ctx'> int</div><div class='del'>-__dht_lock_subvol_set (inode_t *inode, xlator_t *this,</div><div class='del'>-                       xlator_t *lock_subvol)</div><div class='add'>+__dht_lock_subvol_set(inode_t *inode, xlator_t *this, xlator_t *lock_subvol)</div><div class='ctx'> {</div><div class='del'>-        dht_inode_ctx_t         *ctx            = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-        uint64_t                 value          = 0;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t value = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = __inode_ctx_get0 (inode, this, &amp;value);</div><div class='del'>-        if (ret || !value) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = __inode_ctx_get0(inode, this, &amp;value);</div><div class='add'>+    if (ret || !value) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx = (dht_inode_ctx_t *) value;</div><div class='del'>-        ctx-&gt;lock_subvol = lock_subvol;</div><div class='add'>+    ctx = (dht_inode_ctx_t *)value;</div><div class='add'>+    ctx-&gt;lock_subvol = lock_subvol;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-xlator_t*</div><div class='del'>-dht_get_lock_subvolume (xlator_t *this, struct gf_flock *lock,</div><div class='del'>-                        dht_local_t *local)</div><div class='add'>+xlator_t *</div><div class='add'>+dht_get_lock_subvolume(xlator_t *this, struct gf_flock *lock,</div><div class='add'>+                       dht_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *subvol                  = NULL;</div><div class='del'>-        inode_t                 *inode                   = NULL;</div><div class='del'>-        int32_t                  ret                     = -1;</div><div class='del'>-        uint64_t                 value                   = 0;</div><div class='del'>-        xlator_t                *cached_subvol           = NULL;</div><div class='del'>-        dht_inode_ctx_t         *ctx                     = NULL;</div><div class='del'>-        char                     gfid[GF_UUID_BUF_SIZE]  = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, lock, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_inode_ctx_t *ctx = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.inode || local-&gt;fd) {</div><div class='del'>-                inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='del'>-        }</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                goto out;</div><div class='add'>+    if (local-&gt;loc.inode || local-&gt;fd) {</div><div class='add'>+        inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!(IA_ISDIR (inode-&gt;ia_type) || IA_ISINVAL (inode-&gt;ia_type))) {</div><div class='del'>-                /*</div><div class='del'>-                 * We may get non-linked inode for directories as part</div><div class='del'>-                 * of the selfheal code path. So checking  for IA_INVAL</div><div class='del'>-                 * type also. This will only happen for directory.</div><div class='del'>-                 */</div><div class='del'>-                subvol = local-&gt;cached_subvol;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!inode)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (lock-&gt;l_type != F_UNLCK) {</div><div class='del'>-                /*</div><div class='del'>-                 * inode purging might happen on NFS between a lk</div><div class='del'>-                 * and unlk. Due to this lk and unlk might be sent</div><div class='del'>-                 * to different subvols.</div><div class='del'>-                 * So during a lock request, taking a ref on inode</div><div class='del'>-                 * to prevent inode purging. inode unref will happen</div><div class='del'>-                 * in unlock cbk code path.</div><div class='del'>-                 */</div><div class='del'>-                inode_ref (inode);</div><div class='del'>-        }</div><div class='add'>+    if (!(IA_ISDIR(inode-&gt;ia_type) || IA_ISINVAL(inode-&gt;ia_type))) {</div><div class='add'>+        /*</div><div class='add'>+         * We may get non-linked inode for directories as part</div><div class='add'>+         * of the selfheal code path. So checking  for IA_INVAL</div><div class='add'>+         * type also. This will only happen for directory.</div><div class='add'>+         */</div><div class='add'>+        subvol = local-&gt;cached_subvol;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-                ret = __inode_ctx_get0 (inode, this, &amp;value);</div><div class='del'>-                if (!ret &amp;&amp; value) {</div><div class='del'>-                        ctx = (dht_inode_ctx_t *) value;</div><div class='del'>-                        subvol = ctx-&gt;lock_subvol;</div><div class='del'>-                }</div><div class='del'>-                if (!subvol &amp;&amp; lock-&gt;l_type != F_UNLCK &amp;&amp; cached_subvol) {</div><div class='del'>-                        ret = __dht_lock_subvol_set (inode, this,</div><div class='del'>-                                                     cached_subvol);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_uuid_unparse(inode-&gt;gfid, gfid);</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='del'>-                                        "Failed to set lock_subvol in "</div><div class='del'>-                                        "inode ctx for gfid %s",</div><div class='del'>-                                        gfid);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        subvol = cached_subvol;</div><div class='del'>-                }</div><div class='add'>+    if (lock-&gt;l_type != F_UNLCK) {</div><div class='add'>+        /*</div><div class='add'>+         * inode purging might happen on NFS between a lk</div><div class='add'>+         * and unlk. Due to this lk and unlk might be sent</div><div class='add'>+         * to different subvols.</div><div class='add'>+         * So during a lock request, taking a ref on inode</div><div class='add'>+         * to prevent inode purging. inode unref will happen</div><div class='add'>+         * in unlock cbk code path.</div><div class='add'>+         */</div><div class='add'>+        inode_ref(inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    ret = __inode_ctx_get0(inode, this, &amp;value);</div><div class='add'>+    if (!ret &amp;&amp; value) {</div><div class='add'>+        ctx = (dht_inode_ctx_t *)value;</div><div class='add'>+        subvol = ctx-&gt;lock_subvol;</div><div class='add'>+    }</div><div class='add'>+    if (!subvol &amp;&amp; lock-&gt;l_type != F_UNLCK &amp;&amp; cached_subvol) {</div><div class='add'>+        ret = __dht_lock_subvol_set(inode, this, cached_subvol);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_uuid_unparse(inode-&gt;gfid, gfid);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_SET_INODE_CTX_FAILED,</div><div class='add'>+                   "Failed to set lock_subvol in "</div><div class='add'>+                   "inode ctx for gfid %s",</div><div class='add'>+                   gfid);</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        subvol = cached_subvol;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-        if (!subvol &amp;&amp; inode &amp;&amp; lock-&gt;l_type != F_UNLCK) {</div><div class='del'>-                inode_unref (inode);</div><div class='del'>-        }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (!subvol &amp;&amp; inode &amp;&amp; lock-&gt;l_type != F_UNLCK) {</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lk_inode_unref (call_frame_t *frame, int32_t op_ret)</div><div class='add'>+dht_lk_inode_unref(call_frame_t *frame, int32_t op_ret)</div><div class='ctx'> {</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        dht_local_t            *local                   = NULL;</div><div class='del'>-        inode_t                *inode                   = NULL;</div><div class='del'>-        xlator_t               *this                    = NULL;</div><div class='del'>-        char                    gfid[GF_UUID_BUF_SIZE]  = {0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.inode || local-&gt;fd) {</div><div class='del'>-                inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='del'>-        }</div><div class='del'>-        if (!inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_LOCK_INODE_UNREF_FAILED,</div><div class='del'>-                        "Found a NULL inode. Failed to unref the inode");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;loc.inode || local-&gt;fd) {</div><div class='add'>+        inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='add'>+    }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LOCK_INODE_UNREF_FAILED,</div><div class='add'>+               "Found a NULL inode. Failed to unref the inode");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!(IA_ISDIR (inode-&gt;ia_type) || IA_ISINVAL (inode-&gt;ia_type))) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!(IA_ISDIR(inode-&gt;ia_type) || IA_ISINVAL(inode-&gt;ia_type))) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (local-&gt;lock_type) {</div><div class='add'>+    switch (local-&gt;lock_type) {</div><div class='ctx'>         case F_RDLCK:</div><div class='ctx'>         case F_WRLCK:</div><div class='del'>-                if (op_ret) {</div><div class='del'>-                        gf_uuid_unparse(inode-&gt;gfid, gfid);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                "lock request failed for gfid %s", gfid);</div><div class='del'>-                        inode_unref (inode);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (op_ret) {</div><div class='add'>+                gf_uuid_unparse(inode-&gt;gfid, gfid);</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "lock request failed for gfid %s",</div><div class='add'>+                             gfid);</div><div class='add'>+                inode_unref(inode);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case F_UNLCK:</div><div class='del'>-                if (!op_ret) {</div><div class='del'>-                        inode_unref (inode);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_uuid_unparse(inode-&gt;gfid, gfid);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_LOCK_INODE_UNREF_FAILED,</div><div class='del'>-                                "Unlock request failed for gfid %s."</div><div class='del'>-                                "Failed to unref the inode", gfid);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            if (!op_ret) {</div><div class='add'>+                inode_unref(inode);</div><div class='add'>+            } else {</div><div class='add'>+                gf_uuid_unparse(inode-&gt;gfid, gfid);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       DHT_MSG_LOCK_INODE_UNREF_FAILED,</div><div class='add'>+                       "Unlock request failed for gfid %s."</div><div class='add'>+                       "Failed to unref the inode",</div><div class='add'>+                       gfid);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Code to update custom extended attributes from src dict to dst dict</div><div class='del'>-*/</div><div class='add'>+ */</div><div class='ctx'> void</div><div class='del'>-dht_dir_set_heal_xattr (xlator_t *this, dht_local_t *local, dict_t *dst,</div><div class='del'>-                        dict_t *src, int *uret, int *uflag)</div><div class='add'>+dht_dir_set_heal_xattr(xlator_t *this, dht_local_t *local, dict_t *dst,</div><div class='add'>+                       dict_t *src, int *uret, int *uflag)</div><div class='ctx'> {</div><div class='del'>-        int               ret                 = -1;</div><div class='del'>-        data_t           *keyval              = NULL;</div><div class='del'>-        int               luret               = -1;</div><div class='del'>-        int               luflag              = -1;</div><div class='del'>-        int               i                   = 0;</div><div class='del'>-</div><div class='del'>-        if (!src || !dst) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "src or dst is NULL. Failed to set "</div><div class='del'>-                        " dictionary value for path %s",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-        /* Check if any user xattr present in src dict and set</div><div class='del'>-           it to dst dict</div><div class='del'>-        */</div><div class='del'>-        luret = dict_foreach_fnmatch (src, "user.*",</div><div class='del'>-                                      dht_set_user_xattr, dst);</div><div class='del'>-        /* Check if any other custom xattr present in src dict</div><div class='del'>-           and set it to dst dict, here index start from 1 because</div><div class='del'>-           user xattr already checked in previous statement</div><div class='del'>-        */</div><div class='del'>-        for (i = 1; xattrs_to_heal[i]; i++) {</div><div class='del'>-                keyval = dict_get (src, xattrs_to_heal[i]);</div><div class='del'>-                if (keyval) {</div><div class='del'>-                        luflag = 1;</div><div class='del'>-                        ret = dict_set (dst, xattrs_to_heal[i], keyval);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Failed to set dictionary value:key = %s for "</div><div class='del'>-                                        "path %s", xattrs_to_heal[i],</div><div class='del'>-                                        local-&gt;loc.path);</div><div class='del'>-                        keyval = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (uret)</div><div class='del'>-                (*uret) = luret;</div><div class='del'>-        if (uflag)</div><div class='del'>-                (*uflag) = luflag;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    data_t *keyval = NULL;</div><div class='add'>+    int luret = -1;</div><div class='add'>+    int luflag = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!src || !dst) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, EINVAL, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "src or dst is NULL. Failed to set "</div><div class='add'>+               " dictionary value for path %s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    /* Check if any user xattr present in src dict and set</div><div class='add'>+       it to dst dict</div><div class='add'>+    */</div><div class='add'>+    luret = dict_foreach_fnmatch(src, "user.*", dht_set_user_xattr, dst);</div><div class='add'>+    /* Check if any other custom xattr present in src dict</div><div class='add'>+       and set it to dst dict, here index start from 1 because</div><div class='add'>+       user xattr already checked in previous statement</div><div class='add'>+    */</div><div class='add'>+    for (i = 1; xattrs_to_heal[i]; i++) {</div><div class='add'>+        keyval = dict_get(src, xattrs_to_heal[i]);</div><div class='add'>+        if (keyval) {</div><div class='add'>+            luflag = 1;</div><div class='add'>+            ret = dict_set(dst, xattrs_to_heal[i], keyval);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+                       DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set dictionary value:key = %s for "</div><div class='add'>+                       "path %s",</div><div class='add'>+                       xattrs_to_heal[i], local-&gt;loc.path);</div><div class='add'>+            keyval = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (uret)</div><div class='add'>+        (*uret) = luret;</div><div class='add'>+    if (uflag)</div><div class='add'>+        (*uflag) = luflag;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-inode-read.c b/xlators/cluster/dht/src/dht-inode-read.c<br/>index 53215a3d34d..f2be5120e37 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-inode-read.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-inode-read.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-inode-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-inode-read.c</a></div><div class='hunk'>@@ -10,1544 +10,1475 @@</div><div class='ctx'> </div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> </div><div class='del'>-int dht_access2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-                 call_frame_t *frame, int ret);</div><div class='del'>-int dht_readv2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-                call_frame_t *frame, int ret);</div><div class='del'>-int dht_attr2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-               call_frame_t *frame, int ret);</div><div class='del'>-int dht_open2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-               call_frame_t *frame, int ret);</div><div class='del'>-int dht_flush2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-                call_frame_t *frame, int ret);</div><div class='del'>-int dht_lk2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-             call_frame_t *frame, int ret);</div><div class='del'>-int dht_fsync2 (xlator_t *this, xlator_t *dst_node,</div><div class='del'>-                call_frame_t *frame, int ret);</div><div class='ctx'> int</div><div class='del'>-dht_common_xattrop2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='del'>-                     int ret);</div><div class='add'>+dht_access2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_readv2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_attr2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_open2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_flush2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_lk2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_fsync2(xlator_t *this, xlator_t *dst_node, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_common_xattrop2(xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='add'>+                    int ret);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+             int op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Update ctx if the fd has been opened on the target*/</div><div class='del'>-        if (!op_ret &amp;&amp; (local-&gt;call_cnt == 1)) {</div><div class='del'>-                dht_fd_ctx_set (this, fd, prev);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!op_ret || (local-&gt;call_cnt != 1))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* rebalance would have happened */</div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_open2;</div><div class='del'>-        ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-        if (!ret)</div><div class='del'>-                return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Update ctx if the fd has been opened on the target*/</div><div class='add'>+    if (!op_ret &amp;&amp; (local-&gt;call_cnt == 1)) {</div><div class='add'>+        dht_fd_ctx_set(this, fd, prev);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!op_ret || (local-&gt;call_cnt != 1))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* rebalance would have happened */</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_open2;</div><div class='add'>+    ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+    if (!ret)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (open, frame, op_ret, op_errno, local-&gt;fd, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(open, frame, op_ret, op_errno, local-&gt;fd, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_open2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_open2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This DHT layer is not migrating the file */</div><div class='del'>-                DHT_STACK_UNWIND (open, frame, -1, local-&gt;op_errno,</div><div class='del'>-                                  NULL, local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This DHT layer is not migrating the file */</div><div class='add'>+        DHT_STACK_UNWIND(open, frame, -1, local-&gt;op_errno, NULL,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_open_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;open, &amp;local-&gt;loc,</div><div class='del'>-                           local-&gt;rebalance.flags, local-&gt;fd, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_open_cbk, subvol, subvol, subvol-&gt;fops-&gt;open,</div><div class='add'>+                      &amp;local-&gt;loc, local-&gt;rebalance.flags, local-&gt;fd,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (open, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(open, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_open (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          loc_t *loc, int flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags, fd_t *fd,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, fd, GF_FOP_OPEN);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.flags = flags;</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='add'>+    local = dht_local_init(frame, loc, fd, GF_FOP_OPEN);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_open_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;rebalance.flags = flags;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_open_cbk, subvol, subvol, subvol-&gt;fops-&gt;open,</div><div class='add'>+                      loc, flags, fd, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (open, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(open, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_file_attr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+dht_file_attr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol1 = 0;</div><div class='del'>-        xlator_t     *subvol2 = 0;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        inode_t      *inode = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;fop == GF_FOP_FSTAT) &amp;&amp; (op_ret == -1)</div><div class='del'>-             &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    xlator_t *subvol1 = 0;</div><div class='add'>+    xlator_t *subvol2 = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_FSTAT) &amp;&amp; (op_ret == -1) &amp;&amp; (op_errno == EBADF) &amp;&amp;</div><div class='add'>+        !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='ctx'>         local-&gt;op_errno = op_errno;</div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase2 is true */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (stbuf)) {</div><div class='del'>-</div><div class='del'>-                local-&gt;rebalance.target_op_fn = dht_attr2;</div><div class='del'>-                dht_set_local_rebalance (this, local, NULL, NULL,</div><div class='del'>-                                         stbuf, xdata);</div><div class='del'>-                inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='del'>-</div><div class='del'>-                dht_inode_ctx_get_mig_info (this, inode, &amp;subvol1, &amp;subvol2);</div><div class='del'>-                if (dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                             subvol1, subvol2)){</div><div class='del'>-                        /* Phase 2 of migration */</div><div class='del'>-                        ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                return 0;</div><div class='del'>-                } else {</div><div class='del'>-                        /* it is a non-fd op or it is an fd based Fop and</div><div class='del'>-                           opened on the dst.*/</div><div class='del'>-                       if (local-&gt;fd &amp;&amp;</div><div class='del'>-                           !dht_fd_open_on_dst (this, local-&gt;fd, subvol2)) {</div><div class='del'>-                                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                                if (!ret)</div><div class='del'>-                                        return 0;</div><div class='del'>-                        } else {</div><div class='del'>-                                dht_attr2 (this, subvol2, frame, 0);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase2 is true */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(stbuf)) {</div><div class='add'>+        local-&gt;rebalance.target_op_fn = dht_attr2;</div><div class='add'>+        dht_set_local_rebalance(this, local, NULL, NULL, stbuf, xdata);</div><div class='add'>+        inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='add'>+</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, inode, &amp;subvol1, &amp;subvol2);</div><div class='add'>+        if (dht_mig_info_is_invalid(local-&gt;cached_subvol, subvol1, subvol2)) {</div><div class='add'>+            /* Phase 2 of migration */</div><div class='add'>+            ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+            if (!ret)</div><div class='add'>+                return 0;</div><div class='add'>+        } else {</div><div class='add'>+            /* it is a non-fd op or it is an fd based Fop and</div><div class='add'>+               opened on the dst.*/</div><div class='add'>+            if (local-&gt;fd &amp;&amp; !dht_fd_open_on_dst(this, local-&gt;fd, subvol2)) {</div><div class='add'>+                ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+                if (!ret)</div><div class='add'>+                    return 0;</div><div class='add'>+            } else {</div><div class='add'>+                dht_attr2(this, subvol2, frame, 0);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        DHT_STACK_UNWIND (stat, frame, op_ret, op_errno, stbuf, xdata);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    DHT_STACK_UNWIND(stat, frame, op_ret, op_errno, stbuf, xdata);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_attr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_attr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (stat, frame, local-&gt;op_ret, op_errno,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='add'>+</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(stat, frame, local-&gt;op_ret, op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.postbuf, local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_FSTAT) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;fstat, local-&gt;fd,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;stat, &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_FSTAT) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_attr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fstat, local-&gt;fd, local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_attr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;stat, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (stat, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(stat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_attr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int op_ret, int op_errno, struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+dht_attr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+             int op_errno, struct iatt *stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "subvolume %s returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-        }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                DHT_STACK_UNWIND (stat, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;stbuf, xdata);</div><div class='del'>-        }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        DHT_STACK_UNWIND(stat, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;stbuf, xdata);</div><div class='add'>+    }</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+dht_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_STAT);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (IA_ISREG (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_STAT);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for path=%s", loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-                subvol = local-&gt;cached_subvol;</div><div class='add'>+        subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_attr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;stat, loc, xdata);</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_attr_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;stat, loc, xdata);</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_attr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (stat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(stat, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FSTAT);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "no layout for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (IA_ISREG (fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FSTAT);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "no layout for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-                subvol = local-&gt;cached_subvol;</div><div class='add'>+        subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fstat, fd,</div><div class='del'>-                                   xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_attr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_attr_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_attr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fstat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fstat, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int op_ret, int op_errno,</div><div class='del'>-               struct iovec *vector, int count, struct iatt *stbuf,</div><div class='del'>-               struct iobref *iobref, dict_t *xdata)</div><div class='add'>+dht_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, struct iovec *vector, int count, struct iatt *stbuf,</div><div class='add'>+              struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local      = NULL;</div><div class='del'>-        int          ret        = 0;</div><div class='del'>-        xlator_t    *src_subvol = 0;</div><div class='del'>-        xlator_t    *dst_subvol = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *src_subvol = 0;</div><div class='add'>+    xlator_t *dst_subvol = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is already second try, no need for re-check */</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is already second try, no need for re-check */</div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(stbuf)) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;rebalance.target_op_fn = dht_readv2;</div><div class='add'>+        dht_set_local_rebalance(this, local, NULL, NULL, stbuf, xdata);</div><div class='add'>+        /* File would be migrated to other node */</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, &amp;src_subvol,</div><div class='add'>+                                         &amp;dst_subvol);</div><div class='add'>+</div><div class='add'>+        if (dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol,</div><div class='add'>+                                    dst_subvol) ||</div><div class='add'>+            !dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol)) {</div><div class='add'>+            ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+            if (!ret)</div><div class='ctx'>                 return 0;</div><div class='add'>+        } else {</div><div class='add'>+            /* value is already set in fd_ctx, that means no need</div><div class='add'>+               to check for whether its complete or not. */</div><div class='add'>+            dht_readv2(this, dst_subvol, frame, 0);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (stbuf)) {</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-                local-&gt;rebalance.target_op_fn = dht_readv2;</div><div class='del'>-                dht_set_local_rebalance (this, local, NULL, NULL,</div><div class='del'>-                                         stbuf, xdata);</div><div class='del'>-                /* File would be migrated to other node */</div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode,</div><div class='del'>-                                                  &amp;src_subvol,</div><div class='del'>-                                                  &amp;dst_subvol);</div><div class='del'>-</div><div class='del'>-                if (dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                             src_subvol, dst_subvol)</div><div class='del'>-                        || !dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol)) {</div><div class='del'>-</div><div class='del'>-                        ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                return 0;</div><div class='del'>-                } else {</div><div class='del'>-                        /* value is already set in fd_ctx, that means no need</div><div class='del'>-                           to check for whether its complete or not. */</div><div class='del'>-                        dht_readv2 (this, dst_subvol, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='del'>-                          iobref, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                     iobref, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_readv2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_readv2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local  = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (readv, frame, local-&gt;op_ret, op_errno,</div><div class='del'>-                                  NULL, 0, &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  NULL, local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='add'>+</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(readv, frame, local-&gt;op_ret, op_errno, NULL, 0,</div><div class='add'>+                         &amp;local-&gt;rebalance.postbuf, NULL,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_readv_cbk, subvol, subvol-&gt;fops-&gt;readv,</div><div class='del'>-                    local-&gt;fd, local-&gt;rebalance.size, local-&gt;rebalance.offset,</div><div class='del'>-                    local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND(frame, dht_readv_cbk, subvol, subvol-&gt;fops-&gt;readv, local-&gt;fd,</div><div class='add'>+               local-&gt;rebalance.size, local-&gt;rebalance.offset,</div><div class='add'>+               local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           fd_t *fd, size_t size, off_t off, uint32_t flags, dict_t *xdata)</div><div class='add'>+dht_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, off_t off,</div><div class='add'>+          uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_READ);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_READ);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.offset = off;</div><div class='del'>-        local-&gt;rebalance.size   = size;</div><div class='del'>-        local-&gt;rebalance.flags  = flags;</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_readv_cbk, subvol, subvol-&gt;fops-&gt;readv,</div><div class='del'>-                    local-&gt;fd, local-&gt;rebalance.size,</div><div class='del'>-                    local-&gt;rebalance.offset,</div><div class='del'>-                    local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;rebalance.offset = off;</div><div class='add'>+    local-&gt;rebalance.size = size;</div><div class='add'>+    local-&gt;rebalance.flags = flags;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, dht_readv_cbk, subvol, subvol-&gt;fops-&gt;readv, local-&gt;fd,</div><div class='add'>+               local-&gt;rebalance.size, local-&gt;rebalance.offset,</div><div class='add'>+               local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='del'>-        xlator_t    *prev = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        if (!prev)</div><div class='del'>-                goto out;</div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; ((op_errno == ENOTCONN) ||</div><div class='del'>-                dht_inode_missing(op_errno)) &amp;&amp;</div><div class='del'>-                IA_ISDIR(local-&gt;loc.inode-&gt;ia_type)) {</div><div class='del'>-                subvol = dht_subvol_next_available (this, prev);</div><div class='del'>-                if (!subvol)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                /* check if we are done with visiting every node */</div><div class='del'>-                if (subvol == local-&gt;cached_subvol) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_access_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;access, &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;rebalance.flags, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; dht_inode_missing(op_errno) &amp;&amp;</div><div class='del'>-                !(IA_ISDIR(local-&gt;loc.inode-&gt;ia_type))) {</div><div class='del'>-                /* File would be migrated to other node */</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;rebalance.target_op_fn = dht_access2;</div><div class='del'>-                ret = dht_rebalance_complete_check (frame-&gt;this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if (!prev)</div><div class='add'>+        goto out;</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp;</div><div class='add'>+        ((op_errno == ENOTCONN) || dht_inode_missing(op_errno)) &amp;&amp;</div><div class='add'>+        IA_ISDIR(local-&gt;loc.inode-&gt;ia_type)) {</div><div class='add'>+        subvol = dht_subvol_next_available(this, prev);</div><div class='add'>+        if (!subvol)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        /* check if we are done with visiting every node */</div><div class='add'>+        if (subvol == local-&gt;cached_subvol) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_access_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;access, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;rebalance.flags, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; dht_inode_missing(op_errno) &amp;&amp;</div><div class='add'>+        !(IA_ISDIR(local-&gt;loc.inode-&gt;ia_type))) {</div><div class='add'>+        /* File would be migrated to other node */</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;rebalance.target_op_fn = dht_access2;</div><div class='add'>+        ret = dht_rebalance_complete_check(frame-&gt;this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (access, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(access, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_access2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_access2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int          op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='ctx'> </div><div class='del'>-                DHT_STACK_UNWIND (access, frame, -1, op_errno, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        DHT_STACK_UNWIND(access, frame, -1, op_errno, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_access_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;access, &amp;local-&gt;loc,</div><div class='del'>-                           local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_access_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;access, &amp;local-&gt;loc, local-&gt;rebalance.flags,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (access, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(access, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+dht_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_ACCESS);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;rebalance.flags = mask;</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_access_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_ACCESS);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.flags = mask;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_access_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (access, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(access, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local  = NULL;</div><div class='del'>-        xlator_t        *subvol = 0;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_flush2;</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_flush2;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        /* If context is set, then send flush() it to the destination */</div><div class='del'>-        dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode, NULL, &amp;subvol);</div><div class='del'>-        if (subvol &amp;&amp; dht_fd_open_on_dst (this, local-&gt;fd, subvol)) {</div><div class='del'>-                dht_flush2 (this, subvol, frame, 0);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* If context is set, then send flush() it to the destination */</div><div class='add'>+    dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, NULL, &amp;subvol);</div><div class='add'>+    if (subvol &amp;&amp; dht_fd_open_on_dst(this, local-&gt;fd, subvol)) {</div><div class='add'>+        dht_flush2(this, subvol, frame, 0);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_errno == EREMOTE) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    if (op_errno == EREMOTE) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (flush, frame, op_ret, op_errno, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(flush, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_flush2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_flush2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_flush_cbk,</div><div class='del'>-                    subvol, subvol-&gt;fops-&gt;flush, local-&gt;fd,</div><div class='del'>-                    local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND(frame, dht_flush_cbk, subvol, subvol-&gt;fops-&gt;flush, local-&gt;fd,</div><div class='add'>+               local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (flush, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(flush, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FLUSH);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FLUSH);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_flush_cbk,</div><div class='del'>-                    subvol, subvol-&gt;fops-&gt;flush, fd, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, dht_flush_cbk, subvol, subvol-&gt;fops-&gt;flush, fd,</div><div class='add'>+               local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (flush, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(flush, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='del'>-               int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+dht_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        inode_t      *inode = NULL;</div><div class='del'>-        xlator_t     *src_subvol = 0;</div><div class='del'>-        xlator_t     *dst_subvol = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    xlator_t *src_subvol = 0;</div><div class='add'>+    xlator_t *dst_subvol = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1 &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                if (local-&gt;stbuf.ia_blocks) {</div><div class='del'>-                        dht_iatt_merge (this, postbuf, &amp;local-&gt;stbuf);</div><div class='del'>-                        dht_iatt_merge (this, prebuf, &amp;local-&gt;prebuf);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        if (local-&gt;stbuf.ia_blocks) {</div><div class='add'>+            dht_iatt_merge(this, postbuf, &amp;local-&gt;stbuf);</div><div class='add'>+            dht_iatt_merge(this, prebuf, &amp;local-&gt;prebuf);</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        inode = local-&gt;fd-&gt;inode;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    inode = local-&gt;fd-&gt;inode;</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_fsync2;</div><div class='del'>-        dht_set_local_rebalance (this, local, NULL, prebuf,</div><div class='del'>-                                 postbuf, xdata);</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_fsync2;</div><div class='add'>+    dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {</div><div class='del'>-</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, postbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, prebuf);</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                dht_inode_ctx_get_mig_info (this, inode, &amp;src_subvol, &amp;dst_subvol);</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(postbuf)) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, postbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, prebuf);</div><div class='ctx'> </div><div class='del'>-                if (dht_mig_info_is_invalid (local-&gt;cached_subvol, src_subvol,</div><div class='del'>-                                     dst_subvol) ||</div><div class='del'>-                      !dht_fd_open_on_dst (this, local-&gt;fd, dst_subvol)) {</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, inode, &amp;src_subvol, &amp;dst_subvol);</div><div class='ctx'> </div><div class='del'>-                        ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                return 0;</div><div class='del'>-                } else {</div><div class='del'>-                        dht_fsync2 (this, dst_subvol, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        if (dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol,</div><div class='add'>+                                    dst_subvol) ||</div><div class='add'>+            !dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol)) {</div><div class='add'>+            ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+            if (!ret)</div><div class='add'>+                return 0;</div><div class='add'>+        } else {</div><div class='add'>+            dht_fsync2(this, dst_subvol, frame, 0);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (fsync, frame, op_ret, op_errno,</div><div class='del'>-                          prebuf, postbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fsync2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_fsync2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (fsync, frame, local-&gt;op_ret,</div><div class='del'>-                                  op_errno, &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='add'>+</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(fsync, frame, local-&gt;op_ret, op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_fsync_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;fsync, local-&gt;fd,</div><div class='del'>-                           local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_fsync_cbk, subvol, subvol, subvol-&gt;fops-&gt;fsync,</div><div class='add'>+                      local-&gt;fd, local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+dht_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FSYNC);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FSYNC);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        local-&gt;rebalance.flags = datasync;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    local-&gt;rebalance.flags = datasync;</div><div class='ctx'> </div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_fsync_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;fsync, local-&gt;fd,</div><div class='del'>-                           local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_fsync_cbk, subvol, subvol, subvol-&gt;fops-&gt;fsync,</div><div class='add'>+                      local-&gt;fd, local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* TODO: for 'lk()' call, we need some other special error, may be ESTALE to</div><div class='ctx'>    indicate that lock migration happened on the fd, so we can consider it as</div><div class='ctx'>    phase 2 of migration */</div><div class='ctx'> int</div><div class='del'>-dht_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-            int op_ret, int op_errno, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+dht_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+           int op_errno, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local  = NULL;</div><div class='del'>-        int             ret     = -1;</div><div class='del'>-        xlator_t        *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_lk2;</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_lk2;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;rebalance.xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;rebalance.xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (op_errno == EREMOTE) {</div><div class='del'>-                dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode,</div><div class='del'>-                                            NULL, &amp;subvol);</div><div class='del'>-                if (subvol &amp;&amp; dht_fd_open_on_dst (this, local-&gt;fd, subvol)) {</div><div class='del'>-                        dht_lk2 (this, subvol, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                        if (!ret) {</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    if (op_errno == EREMOTE) {</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, NULL, &amp;subvol);</div><div class='add'>+        if (subvol &amp;&amp; dht_fd_open_on_dst(this, local-&gt;fd, subvol)) {</div><div class='add'>+            dht_lk2(this, subvol, frame, 0);</div><div class='add'>+            return 0;</div><div class='add'>+        } else {</div><div class='add'>+            ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+            if (!ret) {</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        dht_lk_inode_unref (frame, op_ret);</div><div class='del'>-        DHT_STACK_UNWIND (lk, frame, op_ret, op_errno, flock, xdata);</div><div class='add'>+    dht_lk_inode_unref(frame, op_ret);</div><div class='add'>+    DHT_STACK_UNWIND(lk, frame, op_ret, op_errno, flock, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lk2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_lk2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_lk_cbk, subvol, subvol-&gt;fops-&gt;lk, local-&gt;fd,</div><div class='del'>-                    local-&gt;rebalance.lock_cmd, &amp;local-&gt;rebalance.flock,</div><div class='del'>-                    local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND(frame, dht_lk_cbk, subvol, subvol-&gt;fops-&gt;lk, local-&gt;fd,</div><div class='add'>+               local-&gt;rebalance.lock_cmd, &amp;local-&gt;rebalance.flock,</div><div class='add'>+               local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (lk, frame, -1, op_errno, NULL,  NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(lk, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        fd_t *fd, int cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+dht_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int cmd,</div><div class='add'>+       struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *lock_subvol    = NULL;</div><div class='del'>-        int             op_errno        = -1;</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_LK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;lock_type = flock-&gt;l_type;</div><div class='del'>-        lock_subvol = dht_get_lock_subvolume (this, flock, local);</div><div class='del'>-        if (!lock_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no lock subvolume for path=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-        local-&gt;cached_subvol = lock_subvol;</div><div class='del'>-        ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-*/</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        local-&gt;rebalance.flock = *flock;</div><div class='del'>-        local-&gt;rebalance.lock_cmd = cmd;</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, dht_lk_cbk, lock_subvol, lock_subvol-&gt;fops-&gt;lk, fd,</div><div class='del'>-                    cmd, flock, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *lock_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_LK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;lock_type = flock-&gt;l_type;</div><div class='add'>+    lock_subvol = dht_get_lock_subvolume(this, flock, local);</div><div class='add'>+    if (!lock_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no lock subvolume for path=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+            local-&gt;cached_subvol = lock_subvol;</div><div class='add'>+            ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='add'>+            if (ret)</div><div class='add'>+                    goto err;</div><div class='add'>+    */</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.flock = *flock;</div><div class='add'>+    local-&gt;rebalance.lock_cmd = cmd;</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, dht_lk_cbk, lock_subvol, lock_subvol-&gt;fops-&gt;lk, fd, cmd,</div><div class='add'>+               flock, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lk, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lk, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lease_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int op_ret, int op_errno, struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+dht_lease_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (lease, frame, op_ret, op_errno, lease, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(lease, frame, op_ret, op_errno, lease, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_lease (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+dht_lease(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+          struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        subvol = dht_subvol_get_cached (this, loc-&gt;inode);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='ctx'> </div><div class='del'>-        /* TODO: for rebalance, we need to preserve the fop arguments */</div><div class='del'>-        STACK_WIND (frame, dht_lease_cbk, subvol, subvol-&gt;fops-&gt;lease,</div><div class='del'>-                    loc, lease, xdata);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    subvol = dht_subvol_get_cached(this, loc-&gt;inode);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: for rebalance, we need to preserve the fop arguments */</div><div class='add'>+    STACK_WIND(frame, dht_lease_cbk, subvol, subvol-&gt;fops-&gt;lease, loc, lease,</div><div class='add'>+               xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lease, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lease, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Symlinks are currently not migrated, so no need for any check here */</div><div class='ctx'> int</div><div class='del'>-dht_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno, const char *path,</div><div class='del'>-                  struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+dht_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, const char *path, struct iatt *stbuf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='del'>-        DHT_STACK_UNWIND (readlink, frame, op_ret, op_errno, path, stbuf, xdata);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='add'>+    DHT_STACK_UNWIND(readlink, frame, op_ret, op_errno, path, stbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+dht_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_READLINK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, dht_readlink_cbk,</div><div class='del'>-                    subvol, subvol-&gt;fops-&gt;readlink,</div><div class='del'>-                    loc, size, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_READLINK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, dht_readlink_cbk, subvol, subvol-&gt;fops-&gt;readlink, loc,</div><div class='add'>+               size, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (readlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(readlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_common_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+dht_common_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local          = NULL;</div><div class='del'>-        call_frame_t *call_frame     = NULL;</div><div class='del'>-        xlator_t     *prev           = NULL;</div><div class='del'>-        xlator_t     *src_subvol     = NULL;</div><div class='del'>-        xlator_t     *dst_subvol     = NULL;</div><div class='del'>-        struct iatt   stbuf          = {0,};</div><div class='del'>-        int           ret            = -1;</div><div class='del'>-        inode_t      *inode          = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        call_frame = cookie;</div><div class='del'>-        prev = call_frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing (op_errno)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1.",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dht_read_iatt_from_xdata (this, xdata, &amp;stbuf);</div><div class='del'>-</div><div class='del'>-        if ((!op_ret) &amp;&amp; (ret)) {</div><div class='del'>-                /* This is a potential problem and can cause corruption</div><div class='del'>-                 * with sharding.</div><div class='del'>-                 * Oh well. We tried.</div><div class='del'>-                 */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_common_xattrop2;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;rebalance.xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (dict)</div><div class='del'>-                local-&gt;rebalance.dict = dict_ref (dict);</div><div class='del'>-</div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (&amp;stbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (&amp;stbuf)) {</div><div class='del'>-</div><div class='del'>-                inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='del'>-                dht_inode_ctx_get_mig_info (this, inode, &amp;src_subvol,</div><div class='del'>-                                            &amp;dst_subvol);</div><div class='del'>-</div><div class='del'>-                if (dht_mig_info_is_invalid (local-&gt;cached_subvol, src_subvol,</div><div class='del'>-                                             dst_subvol) ||</div><div class='del'>-                      !dht_fd_open_on_dst (this, local-&gt;fd, dst_subvol)) {</div><div class='del'>-</div><div class='del'>-                        ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                return 0;</div><div class='del'>-                } else {</div><div class='del'>-                        dht_common_xattrop2 (this, dst_subvol, frame, 0);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    call_frame_t *call_frame = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *src_subvol = NULL;</div><div class='add'>+    xlator_t *dst_subvol = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    call_frame = cookie;</div><div class='add'>+    prev = call_frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1.",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dht_read_iatt_from_xdata(this, xdata, &amp;stbuf);</div><div class='add'>+</div><div class='add'>+    if ((!op_ret) &amp;&amp; (ret)) {</div><div class='add'>+        /* This is a potential problem and can cause corruption</div><div class='add'>+         * with sharding.</div><div class='add'>+         * Oh well. We tried.</div><div class='add'>+         */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_common_xattrop2;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;rebalance.xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (dict)</div><div class='add'>+        local-&gt;rebalance.dict = dict_ref(dict);</div><div class='add'>+</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(&amp;stbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(&amp;stbuf)) {</div><div class='add'>+        inode = local-&gt;loc.inode ? local-&gt;loc.inode : local-&gt;fd-&gt;inode;</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, inode, &amp;src_subvol, &amp;dst_subvol);</div><div class='add'>+</div><div class='add'>+        if (dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol,</div><div class='add'>+                                    dst_subvol) ||</div><div class='add'>+            !dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol)) {</div><div class='add'>+            ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+            if (!ret)</div><div class='add'>+                return 0;</div><div class='add'>+        } else {</div><div class='add'>+            dht_common_xattrop2(this, dst_subvol, frame, 0);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (local-&gt;fop == GF_FOP_XATTROP) {</div><div class='del'>-                DHT_STACK_UNWIND (xattrop, frame, op_ret, op_errno,</div><div class='del'>-                                  dict, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (fxattrop, frame, op_ret, op_errno,</div><div class='del'>-                                  dict, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_XATTROP) {</div><div class='add'>+        DHT_STACK_UNWIND(xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_common_xattrop2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='del'>-                     int ret)</div><div class='add'>+dht_common_xattrop2(xlator_t *this, xlator_t *subvol, call_frame_t *frame,</div><div class='add'>+                    int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                if (local-&gt;fop == GF_FOP_XATTROP) {</div><div class='del'>-                        DHT_STACK_UNWIND (xattrop, frame, local-&gt;op_ret,</div><div class='del'>-                                          op_errno, local-&gt;rebalance.dict,</div><div class='del'>-                                          local-&gt;rebalance.xdata);</div><div class='del'>-                } else {</div><div class='del'>-                        DHT_STACK_UNWIND (fxattrop, frame, local-&gt;op_ret,</div><div class='del'>-                                          op_errno, local-&gt;rebalance.dict,</div><div class='del'>-                                          local-&gt;rebalance.xdata);</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='ctx'>         if (local-&gt;fop == GF_FOP_XATTROP) {</div><div class='del'>-                STACK_WIND (frame, dht_common_xattrop_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;xattrop, &amp;local-&gt;loc,</div><div class='del'>-                            local-&gt;rebalance.flags, local-&gt;rebalance.xattr,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='add'>+            DHT_STACK_UNWIND(xattrop, frame, local-&gt;op_ret, op_errno,</div><div class='add'>+                             local-&gt;rebalance.dict, local-&gt;rebalance.xdata);</div><div class='ctx'>         } else {</div><div class='del'>-                STACK_WIND (frame, dht_common_xattrop_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;fxattrop, local-&gt;fd,</div><div class='del'>-                            local-&gt;rebalance.flags, local-&gt;rebalance.xattr,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='add'>+            DHT_STACK_UNWIND(fxattrop, frame, local-&gt;op_ret, op_errno,</div><div class='add'>+                             local-&gt;rebalance.dict, local-&gt;rebalance.xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_XATTROP) {</div><div class='add'>+        STACK_WIND(frame, dht_common_xattrop_cbk, subvol, subvol-&gt;fops-&gt;xattrop,</div><div class='add'>+                   &amp;local-&gt;loc, local-&gt;rebalance.flags, local-&gt;rebalance.xattr,</div><div class='add'>+                   local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND(frame, dht_common_xattrop_cbk, subvol,</div><div class='add'>+                   subvol-&gt;fops-&gt;fxattrop, local-&gt;fd, local-&gt;rebalance.flags,</div><div class='add'>+                   local-&gt;rebalance.xattr, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        /* If local is unavailable we could be unwinding the wrong</div><div class='del'>-         * function here */</div><div class='add'>+    /* If local is unavailable we could be unwinding the wrong</div><div class='add'>+     * function here */</div><div class='ctx'> </div><div class='del'>-        if (local &amp;&amp; (local-&gt;fop == GF_FOP_XATTROP)) {</div><div class='del'>-                DHT_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                DHT_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (local &amp;&amp; (local-&gt;fop == GF_FOP_XATTROP)) {</div><div class='add'>+        DHT_STACK_UNWIND(xattrop, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        DHT_STACK_UNWIND(fxattrop, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+            gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol   = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-        int           ret      = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_XATTROP);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for gfid=%s",</div><div class='del'>-                              uuid_utoa (loc-&gt;inode-&gt;gfid));</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Todo : Handle dirs as well. At the moment the only xlator above dht</div><div class='del'>-         * that uses xattrop is sharding and that is only for files */</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                STACK_WIND (frame, dht_xattrop_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;xattrop, loc, flags, dict, xdata);</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new ();</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-</div><div class='del'>-                local-&gt;rebalance.xattr = dict_ref (dict);</div><div class='del'>-                local-&gt;rebalance.flags = flags;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_XATTROP);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for gfid=%s",</div><div class='add'>+                     uuid_utoa(loc-&gt;inode-&gt;gfid));</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Todo : Handle dirs as well. At the moment the only xlator above dht</div><div class='add'>+     * that uses xattrop is sharding and that is only for files */</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        STACK_WIND(frame, dht_xattrop_cbk, subvol, subvol-&gt;fops-&gt;xattrop, loc,</div><div class='add'>+                   flags, dict, xdata);</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-                ret = dht_request_iatt_in_xdata (this, local-&gt;xattr_req);</div><div class='add'>+        local-&gt;rebalance.xattr = dict_ref(dict);</div><div class='add'>+        local-&gt;rebalance.flags = flags;</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Failed to set dictionary key %s file=%s",</div><div class='del'>-                                      DHT_IATT_IN_XDATA_KEY, loc-&gt;path);</div><div class='del'>-                }</div><div class='add'>+        ret = dht_request_iatt_in_xdata(this, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND (frame, dht_common_xattrop_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;xattrop, loc,</div><div class='del'>-                            local-&gt;rebalance.flags, local-&gt;rebalance.xattr,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Failed to set dictionary key %s file=%s",</div><div class='add'>+                         DHT_IATT_IN_XDATA_KEY, loc-&gt;path);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND(frame, dht_common_xattrop_cbk, subvol, subvol-&gt;fops-&gt;xattrop,</div><div class='add'>+                   loc, local-&gt;rebalance.flags, local-&gt;rebalance.xattr,</div><div class='add'>+                   local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(xattrop, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_UNWIND (fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fxattrop (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+dht_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+             gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-        int           ret      = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        subvol = dht_subvol_get_cached (this, fd-&gt;inode);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FXATTROP);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Todo : Handle dirs as well. At the moment the only xlator above dht</div><div class='del'>-         * that uses xattrop is sharding and that is only for files */</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                STACK_WIND (frame, dht_fxattrop_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;fxattrop, fd, flags, dict, xdata);</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new ();</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-</div><div class='del'>-                local-&gt;rebalance.xattr = dict_ref (dict);</div><div class='del'>-                local-&gt;rebalance.flags = flags;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    subvol = dht_subvol_get_cached(this, fd-&gt;inode);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FXATTROP);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Todo : Handle dirs as well. At the moment the only xlator above dht</div><div class='add'>+     * that uses xattrop is sharding and that is only for files */</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        STACK_WIND(frame, dht_fxattrop_cbk, subvol, subvol-&gt;fops-&gt;fxattrop, fd,</div><div class='add'>+                   flags, dict, xdata);</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;xattr_req = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-                ret = dht_request_iatt_in_xdata (this, local-&gt;xattr_req);</div><div class='add'>+        local-&gt;rebalance.xattr = dict_ref(dict);</div><div class='add'>+        local-&gt;rebalance.flags = flags;</div><div class='ctx'> </div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Failed to set dictionary key %s fd=%p",</div><div class='del'>-                                      DHT_IATT_IN_XDATA_KEY, fd);</div><div class='del'>-                }</div><div class='add'>+        ret = dht_request_iatt_in_xdata(this, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND (frame, dht_common_xattrop_cbk, subvol,</div><div class='del'>-                            subvol-&gt;fops-&gt;fxattrop, fd,</div><div class='del'>-                            local-&gt;rebalance.flags, local-&gt;rebalance.xattr,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "Failed to set dictionary key %s fd=%p",</div><div class='add'>+                         DHT_IATT_IN_XDATA_KEY, fd);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND(frame, dht_common_xattrop_cbk, subvol,</div><div class='add'>+                   subvol-&gt;fops-&gt;fxattrop, fd, local-&gt;rebalance.flags,</div><div class='add'>+                   local-&gt;rebalance.xattr, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fxattrop, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Currently no translators on top of 'distribute' will be using</div><div class='hunk'>@@ -1555,116 +1486,108 @@ err:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inodelk_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                 xlator_t *this, int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        dht_lk_inode_unref (frame, op_ret);</div><div class='del'>-        DHT_STACK_UNWIND (inodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_lk_inode_unref(frame, op_ret);</div><div class='add'>+    DHT_STACK_UNWIND(inodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-             loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+dht_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+            int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *lock_subvol            = NULL;</div><div class='del'>-        int              op_errno               = -1;</div><div class='del'>-        dht_local_t     *local                  = NULL;</div><div class='add'>+    xlator_t *lock_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_INODELK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_INODELK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock_type = lock-&gt;l_type;</div><div class='del'>-        lock_subvol = dht_get_lock_subvolume (this, lock, local);</div><div class='del'>-        if (!lock_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no lock subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;lock_type = lock-&gt;l_type;</div><div class='add'>+    lock_subvol = dht_get_lock_subvolume(this, lock, local);</div><div class='add'>+    if (!lock_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no lock subvolume for path=%s", loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, dht_inodelk_cbk,</div><div class='del'>-                    lock_subvol, lock_subvol-&gt;fops-&gt;inodelk,</div><div class='del'>-                    volume, loc, cmd, lock, xdata);</div><div class='add'>+    STACK_WIND(frame, dht_inodelk_cbk, lock_subvol, lock_subvol-&gt;fops-&gt;inodelk,</div><div class='add'>+               volume, loc, cmd, lock, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (inodelk, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(inodelk, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        dht_lk_inode_unref (frame, op_ret);</div><div class='del'>-        DHT_STACK_UNWIND (finodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_lk_inode_unref(frame, op_ret);</div><div class='add'>+    DHT_STACK_UNWIND(finodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-              fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+dht_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+             int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *lock_subvol       = NULL;</div><div class='del'>-        dht_local_t  *local             = NULL;</div><div class='del'>-        int           op_errno          = -1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_INODELK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        local-&gt;lock_type = lock-&gt;l_type;</div><div class='del'>-</div><div class='del'>-        lock_subvol = dht_get_lock_subvolume (this, lock, local);</div><div class='del'>-        if (!lock_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no lock subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-        local-&gt;cached_subvol = lock_subvol;</div><div class='del'>-        ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-*/</div><div class='del'>-        STACK_WIND (frame, dht_finodelk_cbk, lock_subvol,</div><div class='del'>-                    lock_subvol-&gt;fops-&gt;finodelk,</div><div class='del'>-                    volume, fd, cmd, lock, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *lock_subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_INODELK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    local-&gt;lock_type = lock-&gt;l_type;</div><div class='add'>+</div><div class='add'>+    lock_subvol = dht_get_lock_subvolume(this, lock, local);</div><div class='add'>+    if (!lock_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no lock subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+            local-&gt;cached_subvol = lock_subvol;</div><div class='add'>+            ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='add'>+            if (ret)</div><div class='add'>+                    goto err;</div><div class='add'>+    */</div><div class='add'>+    STACK_WIND(frame, dht_finodelk_cbk, lock_subvol,</div><div class='add'>+               lock_subvol-&gt;fops-&gt;finodelk, volume, fd, cmd, lock, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (finodelk, frame, -1, op_errno, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(finodelk, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-inode-write.c b/xlators/cluster/dht/src/dht-inode-write.c<br/>index 4b4f2c2d4a3..d0d12fd7658 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-inode-write.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-inode-write.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-inode-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-inode-write.c</a></div><div class='hunk'>@@ -8,1487 +8,1401 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> </div><div class='del'>-int dht_writev2 (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                 call_frame_t *frame, int ret);</div><div class='del'>-int dht_truncate2 (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                   call_frame_t *frame, int ret);</div><div class='del'>-int dht_setattr2 (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                  call_frame_t *frame, int ret);</div><div class='del'>-int dht_fallocate2 (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                    call_frame_t *frame, int ret);</div><div class='del'>-int dht_discard2 (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                  call_frame_t *frame, int ret);</div><div class='del'>-int dht_zerofill2 (xlator_t *this, xlator_t *subvol,</div><div class='del'>-                   call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_writev2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_truncate2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_setattr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_fallocate2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_discard2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='add'>+int</div><div class='add'>+dht_zerofill2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+dht_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        xlator_t    *prev = NULL;</div><div class='del'>-        int          ret   = -1;</div><div class='del'>-        xlator_t    *subvol1 = NULL;</div><div class='del'>-        xlator_t    *subvol2 = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* writev fails with EBADF if dht has not yet opened the fd</div><div class='del'>-         * on the cached subvol. This could happen if the file was migrated</div><div class='del'>-         * and a lookup updated the cached subvol in the inode ctx.</div><div class='del'>-         * We only check once as this could be a valid bad fd error.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol1 = NULL;</div><div class='add'>+    xlator_t *subvol2 = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* writev fails with EBADF if dht has not yet opened the fd</div><div class='add'>+     * on the cached subvol. This could happen if the file was migrated</div><div class='add'>+     * and a lookup updated the cached subvol in the inode ctx.</div><div class='add'>+     * We only check once as this could be a valid bad fd error.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1 &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "subvolume %s returned -1 (%s)",</div><div class='del'>-                              prev-&gt;name, strerror (op_errno));</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "subvolume %s returned -1 (%s)", prev-&gt;name,</div><div class='add'>+                     strerror(op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        /* preserve the modes of source */</div><div class='add'>+        if (local-&gt;stbuf.ia_blocks) {</div><div class='add'>+            dht_iatt_merge(this, postbuf, &amp;local-&gt;stbuf);</div><div class='add'>+            dht_iatt_merge(this, prebuf, &amp;local-&gt;prebuf);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                /* preserve the modes of source */</div><div class='del'>-                if (local-&gt;stbuf.ia_blocks) {</div><div class='del'>-                        dht_iatt_merge (this, postbuf, &amp;local-&gt;stbuf);</div><div class='del'>-                        dht_iatt_merge (this, prebuf, &amp;local-&gt;prebuf);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_writev2;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    /* We might need to pass the stbuf information to the higher DHT</div><div class='add'>+     * layer for appropriate handling.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(postbuf)) {</div><div class='add'>+        if (!dht_is_tier_xlator(this)) {</div><div class='add'>+            if (!local-&gt;xattr_req) {</div><div class='add'>+                local-&gt;xattr_req = dict_new();</div><div class='add'>+                if (!local-&gt;xattr_req) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, ENOMEM,</div><div class='add'>+                           "insufficient memory");</div><div class='add'>+                    local-&gt;op_errno = ENOMEM;</div><div class='add'>+                    local-&gt;op_ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = dict_set_uint32(local-&gt;xattr_req,</div><div class='add'>+                                  GF_PROTECT_FROM_EXTERNAL_WRITES, 1);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_DICT_SET_FAILED, 0,</div><div class='add'>+                       "Failed to set key %s in dictionary",</div><div class='add'>+                       GF_PROTECT_FROM_EXTERNAL_WRITES);</div><div class='add'>+                local-&gt;op_errno = ENOMEM;</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_writev2;</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-        /* We might need to pass the stbuf information to the higher DHT</div><div class='del'>-         * layer for appropriate handling.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        dht_set_local_rebalance (this, local, NULL, prebuf, postbuf, xdata);</div><div class='del'>-</div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {</div><div class='del'>-                if (!dht_is_tier_xlator (this)) {</div><div class='del'>-                        if (!local-&gt;xattr_req) {</div><div class='del'>-                                local-&gt;xattr_req = dict_new ();</div><div class='del'>-                                if (!local-&gt;xattr_req) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                DHT_MSG_NO_MEMORY,</div><div class='del'>-                                                ENOMEM, "insufficient memory");</div><div class='del'>-                                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                        local-&gt;op_ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                               GF_PROTECT_FROM_EXTERNAL_WRITES,</div><div class='del'>-                                               1);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED, 0,</div><div class='del'>-                                        "Failed to set key %s in dictionary",</div><div class='del'>-                                        GF_PROTECT_FROM_EXTERNAL_WRITES);</div><div class='del'>-                                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, postbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, prebuf);</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, postbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, prebuf);</div><div class='del'>-</div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode,</div><div class='del'>-                                                  &amp;subvol1, &amp;subvol2);</div><div class='del'>-                if (!dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                              subvol1, subvol2)) {</div><div class='del'>-                        if (dht_fd_open_on_dst (this, local-&gt;fd, subvol2)) {</div><div class='del'>-                                dht_writev2 (this, subvol2, frame, 0);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, &amp;subvol1,</div><div class='add'>+                                         &amp;subvol2);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, subvol1, subvol2)) {</div><div class='add'>+            if (dht_fd_open_on_dst(this, local-&gt;fd, subvol2)) {</div><div class='add'>+                dht_writev2(this, subvol2, frame, 0);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                          xdata);</div><div class='add'>+    DHT_STACK_UNWIND(writev, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_writev2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_writev2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((frame == NULL) || (frame-&gt;local == NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (writev, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(writev, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_writev_cbk, subvol,</div><div class='del'>-                           subvol, subvol-&gt;fops-&gt;writev,</div><div class='del'>-                           local-&gt;fd, local-&gt;rebalance.vector,</div><div class='del'>-                           local-&gt;rebalance.count,</div><div class='del'>-                           local-&gt;rebalance.offset, local-&gt;rebalance.flags,</div><div class='del'>-                           local-&gt;rebalance.iobref, local-&gt;xattr_req);</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_writev_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;writev, local-&gt;fd, local-&gt;rebalance.vector,</div><div class='add'>+                      local-&gt;rebalance.count, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;rebalance.flags, local-&gt;rebalance.iobref,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-            struct iovec *vector, int count, off_t off, uint32_t flags,</div><div class='del'>-            struct iobref *iobref, dict_t *xdata)</div><div class='add'>+dht_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+           int count, off_t off, uint32_t flags, struct iobref *iobref,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol   = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_WRITE);</div><div class='del'>-        if (!local) {</div><div class='del'>-</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        local-&gt;rebalance.vector = iov_dup (vector, count);</div><div class='del'>-        local-&gt;rebalance.offset = off;</div><div class='del'>-        local-&gt;rebalance.count = count;</div><div class='del'>-        local-&gt;rebalance.flags = flags;</div><div class='del'>-        local-&gt;rebalance.iobref = iobref_ref (iobref);</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_writev_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;writev, fd,</div><div class='del'>-                           local-&gt;rebalance.vector,</div><div class='del'>-                           local-&gt;rebalance.count,</div><div class='del'>-                           local-&gt;rebalance.offset,</div><div class='del'>-                           local-&gt;rebalance.flags,</div><div class='del'>-                           local-&gt;rebalance.iobref, local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_WRITE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.vector = iov_dup(vector, count);</div><div class='add'>+    local-&gt;rebalance.offset = off;</div><div class='add'>+    local-&gt;rebalance.count = count;</div><div class='add'>+    local-&gt;rebalance.flags = flags;</div><div class='add'>+    local-&gt;rebalance.iobref = iobref_ref(iobref);</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_writev_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;writev, fd, local-&gt;rebalance.vector,</div><div class='add'>+                      local-&gt;rebalance.count, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;rebalance.flags, local-&gt;rebalance.iobref,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                  struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+dht_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local      = NULL;</div><div class='del'>-        xlator_t     *prev       = NULL;</div><div class='del'>-        int           ret        = -1;</div><div class='del'>-        xlator_t     *src_subvol = NULL;</div><div class='del'>-        xlator_t     *dst_subvol = NULL;</div><div class='del'>-        inode_t      *inode      = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        /* Needs to be checked only for ftruncate.</div><div class='del'>-         * ftruncate fails with EBADF/EINVAL if dht has not yet opened the fd</div><div class='del'>-         * on the cached subvol. This could happen if the file was migrated</div><div class='del'>-         * and a lookup updated the cached subvol in the inode ctx.</div><div class='del'>-         * We only check once as this could actually be a valid error.</div><div class='del'>-         */</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *src_subvol = NULL;</div><div class='add'>+    xlator_t *dst_subvol = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    /* Needs to be checked only for ftruncate.</div><div class='add'>+     * ftruncate fails with EBADF/EINVAL if dht has not yet opened the fd</div><div class='add'>+     * on the cached subvol. This could happen if the file was migrated</div><div class='add'>+     * and a lookup updated the cached subvol in the inode ctx.</div><div class='add'>+     * We only check once as this could actually be a valid error.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_FTRUNCATE) &amp;&amp; (op_ret == -1) &amp;&amp;</div><div class='add'>+        ((op_errno == EBADF) || (op_errno == EINVAL)) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((local-&gt;fop == GF_FOP_FTRUNCATE) &amp;&amp; (op_ret == -1)</div><div class='del'>-             &amp;&amp; ((op_errno == EBADF) || (op_errno == EINVAL))</div><div class='del'>-             &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        if (local-&gt;stbuf.ia_blocks) {</div><div class='add'>+            dht_iatt_merge(this, postbuf, &amp;local-&gt;stbuf);</div><div class='add'>+            dht_iatt_merge(this, prebuf, &amp;local-&gt;prebuf);</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_truncate2;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                if (local-&gt;stbuf.ia_blocks) {</div><div class='del'>-                        dht_iatt_merge (this, postbuf, &amp;local-&gt;stbuf);</div><div class='del'>-                        dht_iatt_merge (this, prebuf, &amp;local-&gt;prebuf);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_truncate2;</div><div class='add'>+    /* We might need to pass the stbuf information to the higher DHT</div><div class='add'>+     * layer for appropriate handling.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        /* We might need to pass the stbuf information to the higher DHT</div><div class='del'>-         * layer for appropriate handling.</div><div class='del'>-         */</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_set_local_rebalance (this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(postbuf)) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, postbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, prebuf);</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+        inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='ctx'> </div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, postbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, prebuf);</div><div class='del'>-</div><div class='del'>-                inode = (local-&gt;fd) ? local-&gt;fd-&gt;inode : local-&gt;loc.inode;</div><div class='del'>-</div><div class='del'>-                dht_inode_ctx_get_mig_info (this, inode, &amp;src_subvol,</div><div class='del'>-                                            &amp;dst_subvol);</div><div class='del'>-                if (!dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                              src_subvol, dst_subvol)) {</div><div class='del'>-                        if ((!local-&gt;fd) || ((local-&gt;fd) &amp;&amp;</div><div class='del'>-                            dht_fd_open_on_dst (this, local-&gt;fd, dst_subvol))) {</div><div class='del'>-                                dht_truncate2 (this, dst_subvol, frame, 0);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, inode, &amp;src_subvol, &amp;dst_subvol);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol,</div><div class='add'>+                                     dst_subvol)) {</div><div class='add'>+            if ((!local-&gt;fd) ||</div><div class='add'>+                ((local-&gt;fd) &amp;&amp;</div><div class='add'>+                 dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol))) {</div><div class='add'>+                dht_truncate2(this, dst_subvol, frame, 0);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (truncate, frame, op_ret, op_errno,</div><div class='del'>-                          prebuf, postbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(truncate, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_truncate2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_truncate2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        /* This dht xlator is not migrating the file  */</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-</div><div class='del'>-                DHT_STACK_UNWIND (truncate, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno, &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* This dht xlator is not migrating the file  */</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        DHT_STACK_UNWIND(truncate, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fop == GF_FOP_TRUNCATE) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;truncate, &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;ftruncate, local-&gt;fd,</div><div class='del'>-                                   local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fop == GF_FOP_TRUNCATE) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_truncate_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;truncate, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_truncate_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;ftruncate, local-&gt;fd,</div><div class='add'>+                          local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+dht_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_TRUNCATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;rebalance.offset = offset;</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for gfid=%s",</div><div class='del'>-                              uuid_utoa (loc-&gt;inode-&gt;gfid));</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_TRUNCATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.offset = offset;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for gfid=%s",</div><div class='add'>+                     uuid_utoa(loc-&gt;inode-&gt;gfid));</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_truncate_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+dht_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FTRUNCATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;rebalance.offset = offset;</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;ftruncate, fd,</div><div class='del'>-                           local-&gt;rebalance.offset, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FTRUNCATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.offset = offset;</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_truncate_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;ftruncate, fd, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                  struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+dht_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        xlator_t    *src_subvol = NULL;</div><div class='del'>-        xlator_t    *dst_subvol = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        /* fallocate fails with EBADF if dht has not yet opened the fd</div><div class='del'>-         * on the cached subvol. This could happen if the file was migrated</div><div class='del'>-         * and a lookup updated the cached subvol in the inode ctx.</div><div class='del'>-         * We only check once as this could actually be a valid error.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; (op_errno == EBADF)</div><div class='del'>-             &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                if (local-&gt;stbuf.ia_blocks) {</div><div class='del'>-                        dht_iatt_merge (this, postbuf, &amp;local-&gt;stbuf);</div><div class='del'>-                        dht_iatt_merge (this, prebuf, &amp;local-&gt;prebuf);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *src_subvol = NULL;</div><div class='add'>+    xlator_t *dst_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    /* fallocate fails with EBADF if dht has not yet opened the fd</div><div class='add'>+     * on the cached subvol. This could happen if the file was migrated</div><div class='add'>+     * and a lookup updated the cached subvol in the inode ctx.</div><div class='add'>+     * We only check once as this could actually be a valid error.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='ctx'>         local-&gt;op_errno = op_errno;</div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_fallocate2;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-        dht_set_local_rebalance (this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        if (local-&gt;stbuf.ia_blocks) {</div><div class='add'>+            dht_iatt_merge(this, postbuf, &amp;local-&gt;stbuf);</div><div class='add'>+            dht_iatt_merge(this, prebuf, &amp;local-&gt;prebuf);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, postbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, prebuf);</div><div class='del'>-</div><div class='del'>-                dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode, &amp;src_subvol,</div><div class='del'>-                                            &amp;dst_subvol);</div><div class='del'>-                if (!dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                              src_subvol, dst_subvol)) {</div><div class='del'>-                        if (dht_fd_open_on_dst (this, local-&gt;fd, dst_subvol)) {</div><div class='del'>-                                dht_fallocate2 (this, dst_subvol, frame, 0);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_fallocate2;</div><div class='add'>+</div><div class='add'>+    dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(postbuf)) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, postbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, prebuf);</div><div class='add'>+</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, &amp;src_subvol,</div><div class='add'>+                                   &amp;dst_subvol);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol,</div><div class='add'>+                                     dst_subvol)) {</div><div class='add'>+            if (dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol)) {</div><div class='add'>+                dht_fallocate2(this, dst_subvol, frame, 0);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (fallocate, frame, op_ret, op_errno,</div><div class='del'>-                          prebuf, postbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(fallocate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                     xdata);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fallocate2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_fallocate2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (fallocate, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(fallocate, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, dht_fallocate_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;fallocate, local-&gt;fd,</div><div class='del'>-                           local-&gt;rebalance.flags, local-&gt;rebalance.offset,</div><div class='del'>-		           local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_fallocate_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;fallocate, local-&gt;fd,</div><div class='add'>+                      local-&gt;rebalance.flags, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='del'>-	      off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+dht_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='add'>+              off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FALLOCATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	local-&gt;rebalance.flags = mode;</div><div class='del'>-        local-&gt;rebalance.offset = offset;</div><div class='del'>-	local-&gt;rebalance.size = len;</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_fallocate_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;fallocate, fd,</div><div class='del'>-                           local-&gt;rebalance.flags,</div><div class='del'>-                           local-&gt;rebalance.offset,</div><div class='del'>-                           local-&gt;rebalance.size,</div><div class='del'>-                           local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FALLOCATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.flags = mode;</div><div class='add'>+    local-&gt;rebalance.offset = offset;</div><div class='add'>+    local-&gt;rebalance.size = len;</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_fallocate_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;fallocate, fd, local-&gt;rebalance.flags,</div><div class='add'>+                      local-&gt;rebalance.offset, local-&gt;rebalance.size,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+dht_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        xlator_t    *src_subvol = NULL;</div><div class='del'>-        xlator_t    *dst_subvol = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* discard fails with EBADF if dht has not yet opened the fd</div><div class='del'>-         * on the cached subvol. This could happen if the file was migrated</div><div class='del'>-         * and a lookup updated the cached subvol in the inode ctx.</div><div class='del'>-         * We only check once as this could actually be a valid error.</div><div class='del'>-         */</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; (op_errno == EBADF)</div><div class='del'>-             &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                if (local-&gt;stbuf.ia_blocks) {</div><div class='del'>-                        dht_iatt_merge (this, postbuf, &amp;local-&gt;stbuf);</div><div class='del'>-                        dht_iatt_merge (this, prebuf, &amp;local-&gt;prebuf);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *src_subvol = NULL;</div><div class='add'>+    xlator_t *dst_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    /* discard fails with EBADF if dht has not yet opened the fd</div><div class='add'>+     * on the cached subvol. This could happen if the file was migrated</div><div class='add'>+     * and a lookup updated the cached subvol in the inode ctx.</div><div class='add'>+     * We only check once as this could actually be a valid error.</div><div class='add'>+     */</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_discard2;</div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='ctx'>         local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-        dht_set_local_rebalance (this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        if (local-&gt;stbuf.ia_blocks) {</div><div class='add'>+            dht_iatt_merge(this, postbuf, &amp;local-&gt;stbuf);</div><div class='add'>+            dht_iatt_merge(this, prebuf, &amp;local-&gt;prebuf);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, postbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, prebuf);</div><div class='del'>-</div><div class='del'>-                dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode, &amp;src_subvol,</div><div class='del'>-                                            &amp;dst_subvol);</div><div class='del'>-                if (!dht_mig_info_is_invalid(local-&gt;cached_subvol,</div><div class='del'>-                                             src_subvol, dst_subvol)) {</div><div class='del'>-                        if (dht_fd_open_on_dst (this, local-&gt;fd, dst_subvol)) {</div><div class='del'>-                                dht_discard2 (this, dst_subvol, frame, 0);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_discard2;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(postbuf)) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, postbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, prebuf);</div><div class='add'>+</div><div class='add'>+        dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, &amp;src_subvol,</div><div class='add'>+                                   &amp;dst_subvol);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, src_subvol,</div><div class='add'>+                                     dst_subvol)) {</div><div class='add'>+            if (dht_fd_open_on_dst(this, local-&gt;fd, dst_subvol)) {</div><div class='add'>+                dht_discard2(this, dst_subvol, frame, 0);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (discard, frame, op_ret, op_errno,</div><div class='del'>-                          prebuf, postbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(discard, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_discard2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_discard2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (discard, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(discard, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_COOKIE (frame, dht_discard_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;discard, local-&gt;fd,</div><div class='del'>-                           local-&gt;rebalance.offset, local-&gt;rebalance.size,</div><div class='del'>-		           local-&gt;xattr_req);</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_discard_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;discard, local-&gt;fd, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-	    size_t len, dict_t *xdata)</div><div class='add'>+dht_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+            size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_DISCARD);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.offset = offset;</div><div class='del'>-	local-&gt;rebalance.size = len;</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_DISCARD);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;rebalance.offset = offset;</div><div class='add'>+    local-&gt;rebalance.size = len;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_discard_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;discard, fd,</div><div class='del'>-                           local-&gt;rebalance.offset,</div><div class='del'>-                           local-&gt;rebalance.size,</div><div class='del'>-                           local-&gt;xattr_req);</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_discard_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;discard, fd, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+dht_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local   = NULL;</div><div class='del'>-        xlator_t     *prev    = NULL;</div><div class='del'>-        int           ret     = -1;</div><div class='del'>-        xlator_t     *subvol1 = NULL, *subvol2 = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", cookie, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        /* zerofill fails with EBADF if dht has not yet opened the fd</div><div class='del'>-         * on the cached subvol. This could happen if the file was migrated</div><div class='del'>-         * and a lookup updated the cached subvol in the inode ctx.</div><div class='del'>-         * We only check once as this could actually be a valid error.</div><div class='del'>-         */</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; (op_errno == EBADF)</div><div class='del'>-             &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                if (local-&gt;stbuf.ia_blocks) {</div><div class='del'>-                        dht_iatt_merge (this, postbuf, &amp;local-&gt;stbuf);</div><div class='del'>-                        dht_iatt_merge (this, prebuf, &amp;local-&gt;prebuf);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol1 = NULL, *subvol2 = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", cookie, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    /* zerofill fails with EBADF if dht has not yet opened the fd</div><div class='add'>+     * on the cached subvol. This could happen if the file was migrated</div><div class='add'>+     * and a lookup updated the cached subvol in the inode ctx.</div><div class='add'>+     * We only check once as this could actually be a valid error.</div><div class='add'>+     */</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_zerofill2;</div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='ctx'>         local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-        dht_set_local_rebalance (this, local, NULL, prebuf, postbuf, xdata);</div><div class='del'>-</div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        if (local-&gt;stbuf.ia_blocks) {</div><div class='add'>+            dht_iatt_merge(this, postbuf, &amp;local-&gt;stbuf);</div><div class='add'>+            dht_iatt_merge(this, prebuf, &amp;local-&gt;prebuf);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Check if the rebalance phase1 is true */</div><div class='del'>-        if (IS_DHT_MIGRATION_PHASE1 (postbuf)) {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, postbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, prebuf);</div><div class='del'>-</div><div class='del'>-                ret = dht_inode_ctx_get_mig_info (this, local-&gt;fd-&gt;inode,</div><div class='del'>-                                                  &amp;subvol1, &amp;subvol2);</div><div class='del'>-                if (!dht_mig_info_is_invalid (local-&gt;cached_subvol,</div><div class='del'>-                                              subvol1, subvol2)) {</div><div class='del'>-                        if (dht_fd_open_on_dst (this, local-&gt;fd, subvol2)) {</div><div class='del'>-                                dht_zerofill2 (this, subvol2, frame, 0);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dht_rebalance_in_progress_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_zerofill2;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='add'>+</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if the rebalance phase1 is true */</div><div class='add'>+    if (IS_DHT_MIGRATION_PHASE1(postbuf)) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, postbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, prebuf);</div><div class='add'>+</div><div class='add'>+        ret = dht_inode_ctx_get_mig_info(this, local-&gt;fd-&gt;inode, &amp;subvol1,</div><div class='add'>+                                         &amp;subvol2);</div><div class='add'>+        if (!dht_mig_info_is_invalid(local-&gt;cached_subvol, subvol1, subvol2)) {</div><div class='add'>+            if (dht_fd_open_on_dst(this, local-&gt;fd, subvol2)) {</div><div class='add'>+                dht_zerofill2(this, subvol2, frame, 0);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = dht_rebalance_in_progress_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (zerofill, frame, op_ret, op_errno,</div><div class='del'>-                          prebuf, postbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(zerofill, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_zerofill2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_zerofill2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (zerofill, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(zerofill, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_zerofill_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;zerofill,</div><div class='del'>-                           local-&gt;fd, local-&gt;rebalance.offset,</div><div class='del'>-                           local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_zerofill_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;zerofill, local-&gt;fd,</div><div class='add'>+                      local-&gt;rebalance.offset, local-&gt;rebalance.size,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-            off_t len, dict_t *xdata)</div><div class='add'>+dht_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol       = NULL;</div><div class='del'>-        int           op_errno     = -1;</div><div class='del'>-        dht_local_t  *local        = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_ZEROFILL);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.offset = offset;</div><div class='del'>-        local-&gt;rebalance.size = len;</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-        subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_ZEROFILL);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='add'>+    local-&gt;rebalance.offset = offset;</div><div class='add'>+    local-&gt;rebalance.size = len;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_zerofill_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;zerofill, fd,</div><div class='del'>-                           local-&gt;rebalance.offset,</div><div class='del'>-                           local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+    subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_zerofill_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;zerofill, fd, local-&gt;rebalance.offset,</div><div class='add'>+                      local-&gt;rebalance.size, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='add'>+err:</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* handle cases of migration here for 'setattr()' calls */</div><div class='ctx'> int</div><div class='del'>-dht_file_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+dht_file_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;fop == GF_FOP_FSETATTR) &amp;&amp;</div><div class='del'>-            (op_ret == -1) &amp;&amp; (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='del'>-                ret = dht_check_and_open_fd_on_subvol (this, frame);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((local-&gt;fop == GF_FOP_FSETATTR) &amp;&amp; (op_ret == -1) &amp;&amp;</div><div class='add'>+        (op_errno == EBADF) &amp;&amp; !(local-&gt;fd_checked)) {</div><div class='add'>+        ret = dht_check_and_open_fd_on_subvol(this, frame);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; !dht_inode_missing(op_errno)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;rebalance.target_op_fn = dht_setattr2;</div><div class='add'>+    if (local-&gt;call_cnt != 1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 of migration */</div><div class='del'>-        if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (postbuf)) {</div><div class='add'>+    local-&gt;rebalance.target_op_fn = dht_setattr2;</div><div class='ctx'> </div><div class='del'>-                dht_set_local_rebalance (this, local, NULL, prebuf,</div><div class='del'>-                                         postbuf, xdata);</div><div class='add'>+    /* Phase 2 of migration */</div><div class='add'>+    if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2(postbuf)) {</div><div class='add'>+        dht_set_local_rebalance(this, local, NULL, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-                ret = dht_rebalance_complete_check (this, frame);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='add'>+        ret = dht_rebalance_complete_check(this, frame);</div><div class='add'>+        if (!ret)</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* At the end of the migration process, whatever 'attr' we</div><div class='del'>-           have on source file will be migrated to destination file</div><div class='del'>-           in one shot, hence we don't need to check for in progress</div><div class='del'>-           state here (ie, PHASE1) */</div><div class='add'>+    /* At the end of the migration process, whatever 'attr' we</div><div class='add'>+       have on source file will be migrated to destination file</div><div class='add'>+       in one shot, hence we don't need to check for in progress</div><div class='add'>+       state here (ie, PHASE1) */</div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (postbuf);</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (prebuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(postbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(prebuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (setattr, frame, op_ret, op_errno,</div><div class='del'>-                          prebuf, postbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(setattr, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_setattr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='add'>+dht_setattr2(xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-        int32_t      op_errno = EINVAL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!frame || !frame-&gt;local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        op_errno = local-&gt;op_errno;</div><div class='del'>-</div><div class='del'>-        if (we_are_not_migrating (ret)) {</div><div class='del'>-                /* This dht xlator is not migrating the file. Unwind and</div><div class='del'>-                 * pass on the original mode bits so the higher DHT layer</div><div class='del'>-                 * can handle this.</div><div class='del'>-                 */</div><div class='del'>-                DHT_STACK_UNWIND (setattr, frame, local-&gt;op_ret,</div><div class='del'>-                                  local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;rebalance.prebuf,</div><div class='del'>-                                  &amp;local-&gt;rebalance.postbuf,</div><div class='del'>-                                  local-&gt;rebalance.xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    op_errno = local-&gt;op_errno;</div><div class='ctx'> </div><div class='del'>-        if (subvol == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (we_are_not_migrating(ret)) {</div><div class='add'>+        /* This dht xlator is not migrating the file. Unwind and</div><div class='add'>+         * pass on the original mode bits so the higher DHT layer</div><div class='add'>+         * can handle this.</div><div class='add'>+         */</div><div class='add'>+        DHT_STACK_UNWIND(setattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;rebalance.prebuf, &amp;local-&gt;rebalance.postbuf,</div><div class='add'>+                         local-&gt;rebalance.xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fop == GF_FOP_SETATTR) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;setattr, &amp;local-&gt;loc,</div><div class='del'>-                                   &amp;local-&gt;rebalance.stbuf, local-&gt;rebalance.flags,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fsetattr, local-&gt;fd,</div><div class='del'>-                                   &amp;local-&gt;rebalance.stbuf, local-&gt;rebalance.flags,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    if (subvol == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;call_cnt = 2; /* This is the second attempt */</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fop == GF_FOP_SETATTR) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;setattr, &amp;local-&gt;loc,</div><div class='add'>+                          &amp;local-&gt;rebalance.stbuf, local-&gt;rebalance.flags,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fsetattr, local-&gt;fd,</div><div class='add'>+                          &amp;local-&gt;rebalance.stbuf, local-&gt;rebalance.flags,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Keep the existing code same for all the cases other than regular file */</div><div class='ctx'> int</div><div class='del'>-dht_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, struct iatt *statpre,</div><div class='del'>-                 struct iatt *statpost, dict_t *xdata)</div><div class='add'>+dht_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, struct iatt *statpre, struct iatt *statpost,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "subvolume %s returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, statpre);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, statpost);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, statpre);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, statpost);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-		if (local-&gt;op_ret == 0)</div><div class='del'>-			dht_inode_ctx_time_set (local-&gt;loc.inode, this,</div><div class='del'>-						&amp;local-&gt;stbuf);</div><div class='del'>-                DHT_STACK_UNWIND (setattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;prebuf, &amp;local-&gt;stbuf, xdata);</div><div class='del'>-	}</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (local-&gt;op_ret == 0)</div><div class='add'>+            dht_inode_ctx_time_set(local-&gt;loc.inode, this, &amp;local-&gt;stbuf);</div><div class='add'>+        DHT_STACK_UNWIND(setattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;prebuf, &amp;local-&gt;stbuf, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Keep the existing code same for all the cases other than regular file */</div><div class='ctx'> int</div><div class='del'>-dht_non_mds_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, struct iatt *statpre,</div><div class='del'>-                         struct iatt *statpost, dict_t *xdata)</div><div class='add'>+dht_non_mds_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, struct iatt *statpre,</div><div class='add'>+                        struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, op_errno, 0,</div><div class='del'>-                                0, "subvolume %s returned -1",</div><div class='del'>-                                prev-&gt;name);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_msg(this-&gt;name, op_errno, 0, 0, "subvolume %s returned -1",</div><div class='add'>+                   prev-&gt;name);</div><div class='ctx'> </div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;prebuf, statpre);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, statpost);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;prebuf, statpre);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, statpost);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='del'>-        }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_inode_ctx_time_set (local-&gt;loc.inode, this, &amp;local-&gt;stbuf);</div><div class='del'>-                DHT_STACK_UNWIND (setattr, frame, 0, 0,</div><div class='del'>-                                  &amp;local-&gt;prebuf, &amp;local-&gt;stbuf, xdata);</div><div class='del'>-	}</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_inode_ctx_time_set(local-&gt;loc.inode, this, &amp;local-&gt;stbuf);</div><div class='add'>+        DHT_STACK_UNWIND(setattr, frame, 0, 0, &amp;local-&gt;prebuf, &amp;local-&gt;stbuf,</div><div class='add'>+                         xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_mds_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, struct iatt *statpre,</div><div class='del'>-                     struct iatt *statpost, dict_t *xdata)</div><div class='add'>+dht_mds_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, struct iatt *statpre,</div><div class='add'>+                    struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_conf_t   *conf  = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        xlator_t     *mds_subvol = NULL;</div><div class='del'>-        struct iatt  loc_stbuf = {0,};</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_ret  = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "subvolume %s returned -1",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        loc_stbuf = local-&gt;stbuf;</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;prebuf, statpre);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;stbuf, statpost);</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (mds_subvol == conf-&gt;subvolumes[i])</div><div class='del'>-                        continue;</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_non_mds_setattr_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;setattr,</div><div class='del'>-                                   &amp;local-&gt;loc, &amp;loc_stbuf,</div><div class='del'>-                                   local-&gt;valid, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    struct iatt loc_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    mds_subvol = local-&gt;mds_subvol;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    loc_stbuf = local-&gt;stbuf;</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;prebuf, statpre);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;stbuf, statpost);</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (mds_subvol == conf-&gt;subvolumes[i])</div><div class='add'>+            continue;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_non_mds_setattr_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;setattr, &amp;local-&gt;loc,</div><div class='add'>+                          &amp;loc_stbuf, local-&gt;valid, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (setattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;prebuf, &amp;local-&gt;stbuf, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(setattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;prebuf, &amp;local-&gt;stbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+dht_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+            int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol     = NULL;</div><div class='del'>-        xlator_t     *mds_subvol = NULL;</div><div class='del'>-        dht_layout_t *layout     = NULL;</div><div class='del'>-        dht_local_t  *local      = NULL;</div><div class='del'>-        int           op_errno   = -1;</div><div class='del'>-        int           i          = -1;</div><div class='del'>-        int           ret        = -1;</div><div class='del'>-        int           call_cnt   = 0;</div><div class='del'>-        dht_conf_t   *conf       = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_SETATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!layout_is_sane (layout)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "layout is not sane for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (IA_ISREG (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                /* in the regular file _cbk(), we need to check for</div><div class='del'>-                   migration possibilities */</div><div class='del'>-                local-&gt;rebalance.stbuf = *stbuf;</div><div class='del'>-                local-&gt;rebalance.flags = valid;</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-                subvol = local-&gt;cached_subvol;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_SETATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for path=%s", loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!layout_is_sane(layout)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "layout is not sane for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        /* in the regular file _cbk(), we need to check for</div><div class='add'>+           migration possibilities */</div><div class='add'>+        local-&gt;rebalance.stbuf = *stbuf;</div><div class='add'>+        local-&gt;rebalance.flags = valid;</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='add'>+        subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;setattr, loc, stbuf,</div><div class='del'>-                                   valid, xdata);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(loc-&gt;inode-&gt;ia_type) &amp;&amp; !__is_root_gfid(loc-&gt;inode-&gt;gfid) &amp;&amp;</div><div class='add'>+        call_cnt != 1) {</div><div class='add'>+        ret = dht_inode_ctx_mdsvol_get(loc-&gt;inode, this, &amp;mds_subvol);</div><div class='add'>+        if (ret || !mds_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+                   "Failed to get mds subvol for path %s", local-&gt;loc.path);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (loc-&gt;inode-&gt;ia_type) &amp;&amp;</div><div class='del'>-            !__is_root_gfid (loc-&gt;inode-&gt;gfid) &amp;&amp; call_cnt != 1) {</div><div class='del'>-                ret = dht_inode_ctx_mdsvol_get (loc-&gt;inode, this, &amp;mds_subvol);</div><div class='del'>-                if (ret || !mds_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                                "Failed to get mds subvol for path %s",</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;mds_subvol = mds_subvol;</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;subvolumes[i] ==  mds_subvol) {</div><div class='del'>-                                if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                layout-&gt;list[i].err,</div><div class='del'>-                                                DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='del'>-                                                "MDS subvol is down for path "</div><div class='del'>-                                                " %s Unable to set attr " ,</div><div class='del'>-                                                local-&gt;loc.path);</div><div class='del'>-                                        op_errno = ENOTCONN;</div><div class='del'>-                                        goto err;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                local-&gt;valid = valid;</div><div class='del'>-                local-&gt;stbuf = *stbuf;</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_mds_setattr_cbk,</div><div class='del'>-                                   local-&gt;mds_subvol,</div><div class='del'>-                                   local-&gt;mds_subvol,</div><div class='del'>-                                   local-&gt;mds_subvol-&gt;fops-&gt;setattr,</div><div class='del'>-                                   loc, stbuf, valid, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        } else {</div><div class='del'>-                for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_setattr_cbk,</div><div class='del'>-                                           layout-&gt;list[i].xlator,</div><div class='del'>-                                           layout-&gt;list[i].xlator,</div><div class='del'>-                                           layout-&gt;list[i].xlator-&gt;fops-&gt;setattr,</div><div class='del'>-                                           loc, stbuf, valid, xdata);</div><div class='add'>+        local-&gt;mds_subvol = mds_subvol;</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='add'>+                if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, layout-&gt;list[i].err,</div><div class='add'>+                           DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='add'>+                           "MDS subvol is down for path "</div><div class='add'>+                           " %s Unable to set attr ",</div><div class='add'>+                           local-&gt;loc.path);</div><div class='add'>+                    op_errno = ENOTCONN;</div><div class='add'>+                    goto err;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        local-&gt;valid = valid;</div><div class='add'>+        local-&gt;stbuf = *stbuf;</div><div class='ctx'> </div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_mds_setattr_cbk, local-&gt;mds_subvol,</div><div class='add'>+                          local-&gt;mds_subvol, local-&gt;mds_subvol-&gt;fops-&gt;setattr,</div><div class='add'>+                          loc, stbuf, valid, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    } else {</div><div class='add'>+        for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_setattr_cbk, layout-&gt;list[i].xlator,</div><div class='add'>+                              layout-&gt;list[i].xlator,</div><div class='add'>+                              layout-&gt;list[i].xlator-&gt;fops-&gt;setattr, loc, stbuf,</div><div class='add'>+                              valid, xdata);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='del'>-              int32_t valid, dict_t *xdata)</div><div class='add'>+dht_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='add'>+             int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        int           i = -1;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, fd, GF_FOP_FSETATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no layout for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, fd, GF_FOP_FSETATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no layout for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!layout_is_sane(layout)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "layout is not sane for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        /* in the regular file _cbk(), we need to check for</div><div class='add'>+           migration possibilities */</div><div class='add'>+        local-&gt;rebalance.stbuf = *stbuf;</div><div class='add'>+        local-&gt;rebalance.flags = valid;</div><div class='add'>+        local-&gt;call_cnt = 1;</div><div class='add'>+        subvol = local-&gt;cached_subvol;</div><div class='ctx'> </div><div class='del'>-        if (!layout_is_sane (layout)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "layout is not sane for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (IA_ISREG (fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                /* in the regular file _cbk(), we need to check for</div><div class='del'>-                   migration possibilities */</div><div class='del'>-                local-&gt;rebalance.stbuf = *stbuf;</div><div class='del'>-                local-&gt;rebalance.flags = valid;</div><div class='del'>-                local-&gt;call_cnt = 1;</div><div class='del'>-                subvol = local-&gt;cached_subvol;</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;fsetattr, fd,</div><div class='del'>-                                   &amp;local-&gt;rebalance.stbuf,</div><div class='del'>-                                   local-&gt;rebalance.flags,</div><div class='del'>-                                   local-&gt;xattr_req);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_file_setattr_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;fsetattr, fd, &amp;local-&gt;rebalance.stbuf,</div><div class='add'>+                          local-&gt;rebalance.flags, local-&gt;xattr_req);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt = layout-&gt;cnt;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_setattr_cbk,</div><div class='del'>-                                   layout-&gt;list[i].xlator,</div><div class='del'>-                                   layout-&gt;list[i].xlator,</div><div class='del'>-                                   layout-&gt;list[i].xlator-&gt;fops-&gt;fsetattr,</div><div class='del'>-                                   fd, stbuf, valid, xdata);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_setattr_cbk, layout-&gt;list[i].xlator,</div><div class='add'>+                          layout-&gt;list[i].xlator,</div><div class='add'>+                          layout-&gt;list[i].xlator-&gt;fops-&gt;fsetattr, fd, stbuf,</div><div class='add'>+                          valid, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c<br/>index 97b98e01451..43746bc63b9 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-layout.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-layout.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-layout.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-layout.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "glusterfs.h"</div><div class='ctx'> #include "xlator.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='hunk'>@@ -16,862 +15,814 @@</div><div class='ctx'> #include "dht-messages.h"</div><div class='ctx'> #include "unittest/unittest.h"</div><div class='ctx'> </div><div class='add'>+#define layout_base_size (sizeof(dht_layout_t))</div><div class='ctx'> </div><div class='del'>-#define layout_base_size (sizeof (dht_layout_t))</div><div class='del'>-</div><div class='del'>-#define layout_entry_size (sizeof ((dht_layout_t *)NULL)-&gt;list[0])</div><div class='add'>+#define layout_entry_size (sizeof((dht_layout_t *)NULL)-&gt;list[0])</div><div class='ctx'> </div><div class='ctx'> #define layout_size(cnt) (layout_base_size + (cnt * layout_entry_size))</div><div class='ctx'> </div><div class='ctx'> dht_layout_t *</div><div class='del'>-dht_layout_new (xlator_t *this, int cnt)</div><div class='add'>+dht_layout_new(xlator_t *this, int cnt)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        REQUIRE(NULL != this);</div><div class='del'>-        REQUIRE(cnt &gt;= 0);</div><div class='add'>+    REQUIRE(NULL != this);</div><div class='add'>+    REQUIRE(cnt &gt;= 0);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        layout = GF_CALLOC (1, layout_size (cnt),</div><div class='del'>-                            gf_dht_mt_dht_layout_t);</div><div class='del'>-        if (!layout) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    layout = GF_CALLOC(1, layout_size(cnt), gf_dht_mt_dht_layout_t);</div><div class='add'>+    if (!layout) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        layout-&gt;type = DHT_HASH_TYPE_DM;</div><div class='del'>-        layout-&gt;cnt = cnt;</div><div class='add'>+    layout-&gt;type = DHT_HASH_TYPE_DM;</div><div class='add'>+    layout-&gt;cnt = cnt;</div><div class='ctx'> </div><div class='del'>-        if (conf) {</div><div class='del'>-                layout-&gt;spread_cnt = conf-&gt;dir_spread_cnt;</div><div class='del'>-                layout-&gt;gen = conf-&gt;gen;</div><div class='del'>-        }</div><div class='add'>+    if (conf) {</div><div class='add'>+        layout-&gt;spread_cnt = conf-&gt;dir_spread_cnt;</div><div class='add'>+        layout-&gt;gen = conf-&gt;gen;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INIT (layout-&gt;ref, 1);</div><div class='add'>+    GF_ATOMIC_INIT(layout-&gt;ref, 1);</div><div class='ctx'> </div><div class='del'>-        ENSURE(NULL != layout);</div><div class='del'>-        ENSURE(layout-&gt;type == DHT_HASH_TYPE_DM);</div><div class='del'>-        ENSURE(layout-&gt;cnt == cnt);</div><div class='del'>-        ENSURE(GF_ATOMIC_GET (layout-&gt;ref) == 1);</div><div class='add'>+    ENSURE(NULL != layout);</div><div class='add'>+    ENSURE(layout-&gt;type == DHT_HASH_TYPE_DM);</div><div class='add'>+    ENSURE(layout-&gt;cnt == cnt);</div><div class='add'>+    ENSURE(GF_ATOMIC_GET(layout-&gt;ref) == 1);</div><div class='ctx'> out:</div><div class='del'>-        return layout;</div><div class='add'>+    return layout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> dht_layout_t *</div><div class='del'>-dht_layout_get (xlator_t *this, inode_t *inode)</div><div class='add'>+dht_layout_get(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = dht_inode_ctx_layout_get (inode, this, &amp;layout);</div><div class='del'>-        if ((!ret) &amp;&amp; layout) {</div><div class='del'>-                GF_ATOMIC_INC (layout-&gt;ref);</div><div class='del'>-        }</div><div class='del'>-        return layout;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = dht_inode_ctx_layout_get(inode, this, &amp;layout);</div><div class='add'>+    if ((!ret) &amp;&amp; layout) {</div><div class='add'>+        GF_ATOMIC_INC(layout-&gt;ref);</div><div class='add'>+    }</div><div class='add'>+    return layout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_layout_set (xlator_t *this, inode_t *inode, dht_layout_t *layout)</div><div class='add'>+dht_layout_set(xlator_t *this, inode_t *inode, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           oldret = -1;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        dht_layout_t *old_layout;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf || !layout)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;conf-&gt;layout_lock);</div><div class='del'>-        {</div><div class='del'>-                oldret = dht_inode_ctx_layout_get (inode, this, &amp;old_layout);</div><div class='del'>-                if (layout)</div><div class='del'>-                        GF_ATOMIC_INC (layout-&gt;ref);</div><div class='del'>-                ret = dht_inode_ctx_layout_set (inode, this, layout);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;layout_lock);</div><div class='del'>-</div><div class='del'>-        if (!oldret) {</div><div class='del'>-                dht_layout_unref (this, old_layout);</div><div class='del'>-        }</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_ATOMIC_DEC (layout-&gt;ref);</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int oldret = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_layout_t *old_layout;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf || !layout)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;layout_lock);</div><div class='add'>+    {</div><div class='add'>+        oldret = dht_inode_ctx_layout_get(inode, this, &amp;old_layout);</div><div class='add'>+        if (layout)</div><div class='add'>+            GF_ATOMIC_INC(layout-&gt;ref);</div><div class='add'>+        ret = dht_inode_ctx_layout_set(inode, this, layout);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;layout_lock);</div><div class='add'>+</div><div class='add'>+    if (!oldret) {</div><div class='add'>+        dht_layout_unref(this, old_layout);</div><div class='add'>+    }</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_ATOMIC_DEC(layout-&gt;ref);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_layout_unref (xlator_t *this, dht_layout_t *layout)</div><div class='add'>+dht_layout_unref(xlator_t *this, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int          ref = 0;</div><div class='add'>+    int ref = 0;</div><div class='ctx'> </div><div class='del'>-        if (!layout || layout-&gt;preset || !this-&gt;private)</div><div class='del'>-                return;</div><div class='add'>+    if (!layout || layout-&gt;preset || !this-&gt;private)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ref = GF_ATOMIC_DEC (layout-&gt;ref);</div><div class='add'>+    ref = GF_ATOMIC_DEC(layout-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        if (!ref)</div><div class='del'>-                GF_FREE (layout);</div><div class='add'>+    if (!ref)</div><div class='add'>+        GF_FREE(layout);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> dht_layout_t *</div><div class='del'>-dht_layout_ref (xlator_t *this, dht_layout_t *layout)</div><div class='add'>+dht_layout_ref(xlator_t *this, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        if (layout-&gt;preset || !this-&gt;private)</div><div class='del'>-                return layout;</div><div class='add'>+    if (layout-&gt;preset || !this-&gt;private)</div><div class='add'>+        return layout;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC (layout-&gt;ref);</div><div class='add'>+    GF_ATOMIC_INC(layout-&gt;ref);</div><div class='ctx'> </div><div class='del'>-        return layout;</div><div class='add'>+    return layout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_layout_search (xlator_t *this, dht_layout_t *layout, const char *name)</div><div class='add'>+dht_layout_search(xlator_t *this, dht_layout_t *layout, const char *name)</div><div class='ctx'> {</div><div class='del'>-        uint32_t   hash = 0;</div><div class='del'>-        xlator_t  *subvol = NULL;</div><div class='del'>-        int        i = 0;</div><div class='del'>-        int        ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = dht_hash_compute (this, layout-&gt;type, name, &amp;hash);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_COMPUTE_HASH_FAILED,</div><div class='del'>-                        "hash computation failed for type=%d name=%s",</div><div class='del'>-                        layout-&gt;type, name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].start &lt;= hash</div><div class='del'>-                    &amp;&amp; layout-&gt;list[i].stop &gt;= hash) {</div><div class='del'>-                        subvol = layout-&gt;list[i].xlator;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                        "no subvolume for hash (value) = %u", hash);</div><div class='del'>-        }</div><div class='add'>+    uint32_t hash = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = dht_hash_compute(this, layout-&gt;type, name, &amp;hash);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_COMPUTE_HASH_FAILED,</div><div class='add'>+               "hash computation failed for type=%d name=%s", layout-&gt;type,</div><div class='add'>+               name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].start &lt;= hash &amp;&amp; layout-&gt;list[i].stop &gt;= hash) {</div><div class='add'>+            subvol = layout-&gt;list[i].xlator;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "no subvolume for hash (value) = %u", hash);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> dht_layout_t *</div><div class='del'>-dht_layout_for_subvol (xlator_t *this, xlator_t *subvol)</div><div class='add'>+dht_layout_for_subvol(xlator_t *this, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] == subvol) {</div><div class='del'>-                        layout = conf-&gt;file_layouts[i];</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == subvol) {</div><div class='add'>+            layout = conf-&gt;file_layouts[i];</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return layout;</div><div class='add'>+    return layout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_layouts_init (xlator_t *this, dht_conf_t *conf)</div><div class='add'>+dht_layouts_init(xlator_t *this, dht_conf_t *conf)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        conf-&gt;file_layouts = GF_CALLOC (conf-&gt;subvolume_cnt,</div><div class='del'>-                                        sizeof (dht_layout_t *),</div><div class='del'>-                                        gf_dht_mt_dht_layout_t);</div><div class='del'>-        if (!conf-&gt;file_layouts) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                layout = dht_layout_new (this, 1);</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (!layout) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                layout-&gt;preset = 1;</div><div class='add'>+    conf-&gt;file_layouts = GF_CALLOC(conf-&gt;subvolume_cnt, sizeof(dht_layout_t *),</div><div class='add'>+                                   gf_dht_mt_dht_layout_t);</div><div class='add'>+    if (!conf-&gt;file_layouts) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                layout-&gt;list[0].xlator = conf-&gt;subvolumes[i];</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        layout = dht_layout_new(this, 1);</div><div class='ctx'> </div><div class='del'>-                conf-&gt;file_layouts[i] = layout;</div><div class='add'>+        if (!layout) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        layout-&gt;preset = 1;</div><div class='add'>+</div><div class='add'>+        layout-&gt;list[0].xlator = conf-&gt;subvolumes[i];</div><div class='add'>+</div><div class='add'>+        conf-&gt;file_layouts[i] = layout;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_disk_layout_extract (xlator_t *this, dht_layout_t *layout,</div><div class='del'>-                         int pos, int32_t **disk_layout_p)</div><div class='add'>+dht_disk_layout_extract(xlator_t *this, dht_layout_t *layout, int pos,</div><div class='add'>+                        int32_t **disk_layout_p)</div><div class='ctx'> {</div><div class='del'>-        int      ret = -1;</div><div class='del'>-        int32_t *disk_layout = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t *disk_layout = NULL;</div><div class='ctx'> </div><div class='del'>-        disk_layout = GF_CALLOC (5, sizeof (int),</div><div class='del'>-                                 gf_dht_mt_int32_t);</div><div class='del'>-        if (!disk_layout) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    disk_layout = GF_CALLOC(5, sizeof(int), gf_dht_mt_int32_t);</div><div class='add'>+    if (!disk_layout) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        disk_layout[0] = hton32 (layout-&gt;list[pos].commit_hash);</div><div class='del'>-        disk_layout[1] = hton32 (layout-&gt;type);</div><div class='del'>-        disk_layout[2] = hton32 (layout-&gt;list[pos].start);</div><div class='del'>-        disk_layout[3] = hton32 (layout-&gt;list[pos].stop);</div><div class='add'>+    disk_layout[0] = hton32(layout-&gt;list[pos].commit_hash);</div><div class='add'>+    disk_layout[1] = hton32(layout-&gt;type);</div><div class='add'>+    disk_layout[2] = hton32(layout-&gt;list[pos].start);</div><div class='add'>+    disk_layout[3] = hton32(layout-&gt;list[pos].stop);</div><div class='ctx'> </div><div class='del'>-        if (disk_layout_p)</div><div class='del'>-                *disk_layout_p = disk_layout;</div><div class='del'>-        else</div><div class='del'>-                GF_FREE (disk_layout);</div><div class='add'>+    if (disk_layout_p)</div><div class='add'>+        *disk_layout_p = disk_layout;</div><div class='add'>+    else</div><div class='add'>+        GF_FREE(disk_layout);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_disk_layout_extract_for_subvol (xlator_t *this, dht_layout_t *layout,</div><div class='del'>-                                    xlator_t *subvol, int32_t **disk_layout_p)</div><div class='add'>+dht_disk_layout_extract_for_subvol(xlator_t *this, dht_layout_t *layout,</div><div class='add'>+                                   xlator_t *subvol, int32_t **disk_layout_p)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].xlator == subvol)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].xlator == subvol)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (i == layout-&gt;cnt)</div><div class='del'>-                return -1;</div><div class='add'>+    if (i == layout-&gt;cnt)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        return dht_disk_layout_extract (this, layout, i, disk_layout_p);</div><div class='add'>+    return dht_disk_layout_extract(this, layout, i, disk_layout_p);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_disk_layout_merge (xlator_t *this, dht_layout_t *layout,</div><div class='del'>-		       int pos, void *disk_layout_raw, int disk_layout_len)</div><div class='add'>+dht_disk_layout_merge(xlator_t *this, dht_layout_t *layout, int pos,</div><div class='add'>+                      void *disk_layout_raw, int disk_layout_len)</div><div class='ctx'> {</div><div class='del'>-        int      type = 0;</div><div class='del'>-        int      start_off = 0;</div><div class='del'>-        int      stop_off = 0;</div><div class='del'>-        int      commit_hash = 0;</div><div class='del'>-        int      disk_layout[4];</div><div class='add'>+    int type = 0;</div><div class='add'>+    int start_off = 0;</div><div class='add'>+    int stop_off = 0;</div><div class='add'>+    int commit_hash = 0;</div><div class='add'>+    int disk_layout[4];</div><div class='ctx'> </div><div class='del'>-	if (!disk_layout_raw) {</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='del'>-                        "error no layout on disk for merge");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    if (!disk_layout_raw) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, 0, DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='add'>+               "error no layout on disk for merge");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	GF_ASSERT (disk_layout_len == sizeof (disk_layout));</div><div class='add'>+    GF_ASSERT(disk_layout_len == sizeof(disk_layout));</div><div class='ctx'> </div><div class='del'>-        memcpy (disk_layout, disk_layout_raw, disk_layout_len);</div><div class='add'>+    memcpy(disk_layout, disk_layout_raw, disk_layout_len);</div><div class='ctx'> </div><div class='del'>-        type = ntoh32 (disk_layout[1]);</div><div class='del'>-	switch (type) {</div><div class='add'>+    type = ntoh32(disk_layout[1]);</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case DHT_HASH_TYPE_DM_USER:</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "found user-set layout");</div><div class='del'>-                layout-&gt;type = type;</div><div class='del'>-                /* Fall through. */</div><div class='del'>-	case DHT_HASH_TYPE_DM:</div><div class='del'>-		break;</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "found user-set layout");</div><div class='add'>+            layout-&gt;type = type;</div><div class='add'>+            /* Fall through. */</div><div class='add'>+        case DHT_HASH_TYPE_DM:</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                        DHT_MSG_INVALID_DISK_LAYOUT,</div><div class='del'>-			"Invalid disk layout: "</div><div class='del'>-                        "Catastrophic error layout with unknown type found %d",</div><div class='del'>-			disk_layout[1]);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        commit_hash = ntoh32 (disk_layout[0]);</div><div class='del'>-        start_off = ntoh32 (disk_layout[2]);</div><div class='del'>-        stop_off  = ntoh32 (disk_layout[3]);</div><div class='del'>-</div><div class='del'>-        layout-&gt;list[pos].commit_hash = commit_hash;</div><div class='del'>-        layout-&gt;list[pos].start = start_off;</div><div class='del'>-        layout-&gt;list[pos].stop  = stop_off;</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "merged to layout: %u - %u (type %d, hash %d) from %s",</div><div class='del'>-                      start_off, stop_off, commit_hash, type,</div><div class='del'>-                      layout-&gt;list[pos].xlator-&gt;name);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_CRITICAL, 0, DHT_MSG_INVALID_DISK_LAYOUT,</div><div class='add'>+                   "Invalid disk layout: "</div><div class='add'>+                   "Catastrophic error layout with unknown type found %d",</div><div class='add'>+                   disk_layout[1]);</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    commit_hash = ntoh32(disk_layout[0]);</div><div class='add'>+    start_off = ntoh32(disk_layout[2]);</div><div class='add'>+    stop_off = ntoh32(disk_layout[3]);</div><div class='add'>+</div><div class='add'>+    layout-&gt;list[pos].commit_hash = commit_hash;</div><div class='add'>+    layout-&gt;list[pos].start = start_off;</div><div class='add'>+    layout-&gt;list[pos].stop = stop_off;</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(</div><div class='add'>+        this-&gt;name, 0, "merged to layout: %u - %u (type %d, hash %d) from %s",</div><div class='add'>+        start_off, stop_off, commit_hash, type, layout-&gt;list[pos].xlator-&gt;name);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_merge (xlator_t *this, dht_layout_t *layout, xlator_t *subvol,</div><div class='del'>-                  int op_ret, int op_errno, dict_t *xattr)</div><div class='add'>+dht_layout_merge(xlator_t *this, dht_layout_t *layout, xlator_t *subvol,</div><div class='add'>+                 int op_ret, int op_errno, dict_t *xattr)</div><div class='ctx'> {</div><div class='del'>-        int         i     = 0;</div><div class='del'>-        int         ret   = -1;</div><div class='del'>-        int         err   = -1;</div><div class='del'>-        void       *disk_layout_raw = NULL;</div><div class='del'>-        int         disk_layout_len = 0;</div><div class='del'>-        dht_conf_t *conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret != 0) {</div><div class='del'>-                err = op_errno;</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int err = -1;</div><div class='add'>+    void *disk_layout_raw = NULL;</div><div class='add'>+    int disk_layout_len = 0;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!layout)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret != 0) {</div><div class='add'>+        err = op_errno;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].xlator == NULL) {</div><div class='del'>-                        layout-&gt;list[i].err    = err;</div><div class='del'>-                        layout-&gt;list[i].xlator = subvol;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (!layout)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].xlator == NULL) {</div><div class='add'>+            layout-&gt;list[i].err = err;</div><div class='add'>+            layout-&gt;list[i].xlator = subvol;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xattr) {</div><div class='del'>-                /* during lookup and not mkdir */</div><div class='del'>-                ret = dict_get_ptr_and_len (xattr, conf-&gt;xattr_name,</div><div class='del'>-					    &amp;disk_layout_raw, &amp;disk_layout_len);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret != 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                layout-&gt;list[i].err = 0;</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "Missing disk layout on %s. err = %d",</div><div class='del'>-                              subvol-&gt;name, err);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (xattr) {</div><div class='add'>+        /* during lookup and not mkdir */</div><div class='add'>+        ret = dict_get_ptr_and_len(xattr, conf-&gt;xattr_name, &amp;disk_layout_raw,</div><div class='add'>+                                   &amp;disk_layout_len);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_disk_layout_merge (this, layout, i, disk_layout_raw,</div><div class='del'>-				     disk_layout_len);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='del'>-                        "layout merge from subvolume %s failed",</div><div class='del'>-                        subvol-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        layout-&gt;list[i].err = 0;</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Missing disk layout on %s. err = %d",</div><div class='add'>+                     subvol-&gt;name, err);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (layout-&gt;commit_hash == 0) {</div><div class='del'>-                layout-&gt;commit_hash = layout-&gt;list[i].commit_hash;</div><div class='del'>-        } else if (layout-&gt;commit_hash != layout-&gt;list[i].commit_hash) {</div><div class='del'>-                layout-&gt;commit_hash = DHT_LAYOUT_HASH_INVALID;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_disk_layout_merge(this, layout, i, disk_layout_raw,</div><div class='add'>+                                disk_layout_len);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_MERGE_FAILED,</div><div class='add'>+               "layout merge from subvolume %s failed", subvol-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        layout-&gt;list[i].err = 0;</div><div class='add'>+    if (layout-&gt;commit_hash == 0) {</div><div class='add'>+        layout-&gt;commit_hash = layout-&gt;list[i].commit_hash;</div><div class='add'>+    } else if (layout-&gt;commit_hash != layout-&gt;list[i].commit_hash) {</div><div class='add'>+        layout-&gt;commit_hash = DHT_LAYOUT_HASH_INVALID;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    layout-&gt;list[i].err = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_layout_entry_swap (dht_layout_t *layout, int i, int j)</div><div class='add'>+dht_layout_entry_swap(dht_layout_t *layout, int i, int j)</div><div class='ctx'> {</div><div class='del'>-        uint32_t  start_swap = 0;</div><div class='del'>-        uint32_t  stop_swap = 0;</div><div class='del'>-        uint32_t  commit_hash_swap = 0;</div><div class='del'>-        xlator_t *xlator_swap = 0;</div><div class='del'>-        int       err_swap = 0;</div><div class='del'>-</div><div class='del'>-        start_swap  = layout-&gt;list[i].start;</div><div class='del'>-        stop_swap   = layout-&gt;list[i].stop;</div><div class='del'>-        xlator_swap = layout-&gt;list[i].xlator;</div><div class='del'>-        err_swap    = layout-&gt;list[i].err;</div><div class='del'>-        commit_hash_swap = layout-&gt;list[i].commit_hash;</div><div class='del'>-</div><div class='del'>-        layout-&gt;list[i].start  = layout-&gt;list[j].start;</div><div class='del'>-        layout-&gt;list[i].stop   = layout-&gt;list[j].stop;</div><div class='del'>-        layout-&gt;list[i].xlator = layout-&gt;list[j].xlator;</div><div class='del'>-        layout-&gt;list[i].err    = layout-&gt;list[j].err;</div><div class='del'>-        layout-&gt;list[i].commit_hash = layout-&gt;list[j].commit_hash;</div><div class='del'>-</div><div class='del'>-        layout-&gt;list[j].start  = start_swap;</div><div class='del'>-        layout-&gt;list[j].stop   = stop_swap;</div><div class='del'>-        layout-&gt;list[j].xlator = xlator_swap;</div><div class='del'>-        layout-&gt;list[j].err    = err_swap;</div><div class='del'>-        layout-&gt;list[j].commit_hash = commit_hash_swap;</div><div class='add'>+    uint32_t start_swap = 0;</div><div class='add'>+    uint32_t stop_swap = 0;</div><div class='add'>+    uint32_t commit_hash_swap = 0;</div><div class='add'>+    xlator_t *xlator_swap = 0;</div><div class='add'>+    int err_swap = 0;</div><div class='add'>+</div><div class='add'>+    start_swap = layout-&gt;list[i].start;</div><div class='add'>+    stop_swap = layout-&gt;list[i].stop;</div><div class='add'>+    xlator_swap = layout-&gt;list[i].xlator;</div><div class='add'>+    err_swap = layout-&gt;list[i].err;</div><div class='add'>+    commit_hash_swap = layout-&gt;list[i].commit_hash;</div><div class='add'>+</div><div class='add'>+    layout-&gt;list[i].start = layout-&gt;list[j].start;</div><div class='add'>+    layout-&gt;list[i].stop = layout-&gt;list[j].stop;</div><div class='add'>+    layout-&gt;list[i].xlator = layout-&gt;list[j].xlator;</div><div class='add'>+    layout-&gt;list[i].err = layout-&gt;list[j].err;</div><div class='add'>+    layout-&gt;list[i].commit_hash = layout-&gt;list[j].commit_hash;</div><div class='add'>+</div><div class='add'>+    layout-&gt;list[j].start = start_swap;</div><div class='add'>+    layout-&gt;list[j].stop = stop_swap;</div><div class='add'>+    layout-&gt;list[j].xlator = xlator_swap;</div><div class='add'>+    layout-&gt;list[j].err = err_swap;</div><div class='add'>+    layout-&gt;list[j].commit_hash = commit_hash_swap;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_layout_range_swap (dht_layout_t *layout, int i, int j)</div><div class='add'>+dht_layout_range_swap(dht_layout_t *layout, int i, int j)</div><div class='ctx'> {</div><div class='del'>-        uint32_t  start_swap = 0;</div><div class='del'>-        uint32_t  stop_swap = 0;</div><div class='add'>+    uint32_t start_swap = 0;</div><div class='add'>+    uint32_t stop_swap = 0;</div><div class='ctx'> </div><div class='del'>-        start_swap  = layout-&gt;list[i].start;</div><div class='del'>-        stop_swap   = layout-&gt;list[i].stop;</div><div class='add'>+    start_swap = layout-&gt;list[i].start;</div><div class='add'>+    stop_swap = layout-&gt;list[i].stop;</div><div class='ctx'> </div><div class='del'>-        layout-&gt;list[i].start  = layout-&gt;list[j].start;</div><div class='del'>-        layout-&gt;list[i].stop   = layout-&gt;list[j].stop;</div><div class='add'>+    layout-&gt;list[i].start = layout-&gt;list[j].start;</div><div class='add'>+    layout-&gt;list[i].stop = layout-&gt;list[j].stop;</div><div class='ctx'> </div><div class='del'>-        layout-&gt;list[j].start  = start_swap;</div><div class='del'>-        layout-&gt;list[j].stop   = stop_swap;</div><div class='add'>+    layout-&gt;list[j].start = start_swap;</div><div class='add'>+    layout-&gt;list[j].stop = stop_swap;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int64_t</div><div class='del'>-dht_layout_entry_cmp_volname (dht_layout_t *layout, int i, int j)</div><div class='add'>+dht_layout_entry_cmp_volname(dht_layout_t *layout, int i, int j)</div><div class='ctx'> {</div><div class='del'>-        return (strcmp (layout-&gt;list[i].xlator-&gt;name,</div><div class='del'>-                        layout-&gt;list[j].xlator-&gt;name));</div><div class='add'>+    return (strcmp(layout-&gt;list[i].xlator-&gt;name, layout-&gt;list[j].xlator-&gt;name));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_is_subvol_in_layout (dht_layout_t *layout, xlator_t *xlator)</div><div class='add'>+dht_is_subvol_in_layout(dht_layout_t *layout, xlator_t *xlator)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                /* Check if xlator is already part of layout, and layout is</div><div class='del'>-                 * non-zero. */</div><div class='del'>-                if (!strcmp (layout-&gt;list[i].xlator-&gt;name, xlator-&gt;name)) {</div><div class='del'>-                        if (layout-&gt;list[i].start != layout-&gt;list[i].stop)</div><div class='del'>-                                return _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        /* Check if xlator is already part of layout, and layout is</div><div class='add'>+         * non-zero. */</div><div class='add'>+        if (!strcmp(layout-&gt;list[i].xlator-&gt;name, xlator-&gt;name)) {</div><div class='add'>+            if (layout-&gt;list[i].start != layout-&gt;list[i].stop)</div><div class='add'>+                return _gf_true;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int64_t</div><div class='del'>-dht_layout_entry_cmp (dht_layout_t *layout, int i, int j)</div><div class='add'>+dht_layout_entry_cmp(dht_layout_t *layout, int i, int j)</div><div class='ctx'> {</div><div class='del'>-        int64_t diff = 0;</div><div class='add'>+    int64_t diff = 0;</div><div class='ctx'> </div><div class='del'>-        /* swap zero'ed out layouts to front, if needed */</div><div class='del'>-        if (!layout-&gt;list[j].start &amp;&amp; !layout-&gt;list[j].stop) {</div><div class='del'>-                diff = (int64_t) layout-&gt;list[i].stop</div><div class='del'>-                       - (int64_t) layout-&gt;list[j].stop;</div><div class='del'>-                       goto out;</div><div class='del'>-        }</div><div class='del'>-        diff = (int64_t) layout-&gt;list[i].start</div><div class='del'>-                - (int64_t) layout-&gt;list[j].start;</div><div class='add'>+    /* swap zero'ed out layouts to front, if needed */</div><div class='add'>+    if (!layout-&gt;list[j].start &amp;&amp; !layout-&gt;list[j].stop) {</div><div class='add'>+        diff = (int64_t)layout-&gt;list[i].stop - (int64_t)layout-&gt;list[j].stop;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    diff = (int64_t)layout-&gt;list[i].start - (int64_t)layout-&gt;list[j].start;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return diff;</div><div class='add'>+    return diff;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_layout_sort (dht_layout_t *layout)</div><div class='add'>+dht_layout_sort(dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int       i = 0;</div><div class='del'>-        int       j = 0;</div><div class='del'>-        int64_t   ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int64_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        /* TODO: O(n^2) -- bad bad */</div><div class='add'>+    /* TODO: O(n^2) -- bad bad */</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt - 1; i++) {</div><div class='del'>-                for (j = i + 1; j &lt; layout-&gt;cnt; j++) {</div><div class='del'>-                        ret = dht_layout_entry_cmp (layout, i, j);</div><div class='del'>-                        if (ret &gt; 0)</div><div class='del'>-                                dht_layout_entry_swap (layout, i, j);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt - 1; i++) {</div><div class='add'>+        for (j = i + 1; j &lt; layout-&gt;cnt; j++) {</div><div class='add'>+            ret = dht_layout_entry_cmp(layout, i, j);</div><div class='add'>+            if (ret &gt; 0)</div><div class='add'>+                dht_layout_entry_swap(layout, i, j);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_sort_volname (dht_layout_t *layout)</div><div class='add'>+dht_layout_sort_volname(dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int       i = 0;</div><div class='del'>-        int       j = 0;</div><div class='del'>-        int64_t   ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int64_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        /* TODO: O(n^2) -- bad bad */</div><div class='add'>+    /* TODO: O(n^2) -- bad bad */</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt - 1; i++) {</div><div class='del'>-                for (j = i + 1; j &lt; layout-&gt;cnt; j++) {</div><div class='del'>-                        ret = dht_layout_entry_cmp_volname (layout, i, j);</div><div class='del'>-                        if (ret &gt; 0)</div><div class='del'>-                                dht_layout_entry_swap (layout, i, j);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt - 1; i++) {</div><div class='add'>+        for (j = i + 1; j &lt; layout-&gt;cnt; j++) {</div><div class='add'>+            ret = dht_layout_entry_cmp_volname(layout, i, j);</div><div class='add'>+            if (ret &gt; 0)</div><div class='add'>+                dht_layout_entry_swap(layout, i, j);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout,</div><div class='del'>-                      uint32_t *holes_p, uint32_t *overlaps_p,</div><div class='del'>-                      uint32_t *missing_p, uint32_t *down_p, uint32_t *misc_p,</div><div class='del'>-                      uint32_t *no_space_p)</div><div class='add'>+dht_layout_anomalies(xlator_t *this, loc_t *loc, dht_layout_t *layout,</div><div class='add'>+                     uint32_t *holes_p, uint32_t *overlaps_p,</div><div class='add'>+                     uint32_t *missing_p, uint32_t *down_p, uint32_t *misc_p,</div><div class='add'>+                     uint32_t *no_space_p)</div><div class='ctx'> {</div><div class='del'>-        uint32_t    overlaps = 0;</div><div class='del'>-        uint32_t    missing  = 0;</div><div class='del'>-        uint32_t    down     = 0;</div><div class='del'>-        uint32_t    misc     = 0;</div><div class='del'>-        uint32_t    hole_cnt = 0;</div><div class='del'>-        uint32_t    overlap_cnt = 0;</div><div class='del'>-        int         i = 0;</div><div class='del'>-        int         ret = 0;</div><div class='del'>-        uint32_t    prev_stop = 0;</div><div class='del'>-        uint32_t    last_stop = 0;</div><div class='del'>-        char        is_virgin = 1;</div><div class='del'>-        uint32_t    no_space  = 0;</div><div class='del'>-</div><div class='del'>-        /* This function scans through the layout spread of a directory to</div><div class='del'>-           check if there are any anomalies. Prior to calling this function</div><div class='del'>-           the layout entries should be sorted in the ascending order.</div><div class='del'>-</div><div class='del'>-           If the layout entry has err != 0</div><div class='del'>-                then increment the corresponding anomaly.</div><div class='del'>-           else</div><div class='del'>-                if (start of the current layout entry &gt; stop + 1 of previous</div><div class='del'>-                   non erroneous layout entry)</div><div class='del'>-                        then it indicates a hole in the layout</div><div class='del'>-                if (start of the current layout entry &lt; stop + 1 of previous</div><div class='del'>-                    non erroneous layout entry)</div><div class='del'>-                         then it indicates an overlap in the layout</div><div class='del'>-        */</div><div class='del'>-        last_stop = layout-&gt;list[0].start - 1;</div><div class='del'>-        prev_stop = last_stop;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                switch (layout-&gt;list[i].err) {</div><div class='del'>-                case -1:</div><div class='del'>-                case ENOENT:</div><div class='del'>-                case ESTALE:</div><div class='del'>-                        missing++;</div><div class='del'>-                        continue;</div><div class='del'>-                case ENOTCONN:</div><div class='del'>-                        down++;</div><div class='del'>-                        continue;</div><div class='del'>-                case ENOSPC:</div><div class='del'>-                        no_space++;</div><div class='del'>-                        continue;</div><div class='del'>-                case 0:</div><div class='del'>-                        /* if err == 0 and start == stop, then it is a non misc++;</div><div class='del'>-                         * participating subvolume(spread-cnt). Then, do not</div><div class='del'>-                         * check for anomalies. If start != stop, then treat it</div><div class='del'>-                         * as misc err */</div><div class='del'>-                        if (layout-&gt;list[i].start == layout-&gt;list[i].stop) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        misc++;</div><div class='del'>-                        continue;</div><div class='del'>-                 }</div><div class='del'>-</div><div class='del'>-                is_virgin = 0;</div><div class='del'>-</div><div class='del'>-                if ((prev_stop + 1) &lt; layout-&gt;list[i].start) {</div><div class='del'>-                        hole_cnt++;</div><div class='add'>+    uint32_t overlaps = 0;</div><div class='add'>+    uint32_t missing = 0;</div><div class='add'>+    uint32_t down = 0;</div><div class='add'>+    uint32_t misc = 0;</div><div class='add'>+    uint32_t hole_cnt = 0;</div><div class='add'>+    uint32_t overlap_cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t prev_stop = 0;</div><div class='add'>+    uint32_t last_stop = 0;</div><div class='add'>+    char is_virgin = 1;</div><div class='add'>+    uint32_t no_space = 0;</div><div class='add'>+</div><div class='add'>+    /* This function scans through the layout spread of a directory to</div><div class='add'>+       check if there are any anomalies. Prior to calling this function</div><div class='add'>+       the layout entries should be sorted in the ascending order.</div><div class='add'>+</div><div class='add'>+       If the layout entry has err != 0</div><div class='add'>+            then increment the corresponding anomaly.</div><div class='add'>+       else</div><div class='add'>+            if (start of the current layout entry &gt; stop + 1 of previous</div><div class='add'>+               non erroneous layout entry)</div><div class='add'>+                    then it indicates a hole in the layout</div><div class='add'>+            if (start of the current layout entry &lt; stop + 1 of previous</div><div class='add'>+                non erroneous layout entry)</div><div class='add'>+                     then it indicates an overlap in the layout</div><div class='add'>+    */</div><div class='add'>+    last_stop = layout-&gt;list[0].start - 1;</div><div class='add'>+    prev_stop = last_stop;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        switch (layout-&gt;list[i].err) {</div><div class='add'>+            case -1:</div><div class='add'>+            case ENOENT:</div><div class='add'>+            case ESTALE:</div><div class='add'>+                missing++;</div><div class='add'>+                continue;</div><div class='add'>+            case ENOTCONN:</div><div class='add'>+                down++;</div><div class='add'>+                continue;</div><div class='add'>+            case ENOSPC:</div><div class='add'>+                no_space++;</div><div class='add'>+                continue;</div><div class='add'>+            case 0:</div><div class='add'>+                /* if err == 0 and start == stop, then it is a non misc++;</div><div class='add'>+                 * participating subvolume(spread-cnt). Then, do not</div><div class='add'>+                 * check for anomalies. If start != stop, then treat it</div><div class='add'>+                 * as misc err */</div><div class='add'>+                if (layout-&gt;list[i].start == layout-&gt;list[i].stop) {</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                misc++;</div><div class='add'>+                continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if ((prev_stop + 1) &gt; layout-&gt;list[i].start) {</div><div class='del'>-                        overlap_cnt++;</div><div class='del'>-                        overlaps += ((prev_stop + 1) - layout-&gt;list[i].start);</div><div class='del'>-                }</div><div class='del'>-                prev_stop = layout-&gt;list[i].stop;</div><div class='add'>+        is_virgin = 0;</div><div class='add'>+</div><div class='add'>+        if ((prev_stop + 1) &lt; layout-&gt;list[i].start) {</div><div class='add'>+            hole_cnt++;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((last_stop - prev_stop) || is_virgin)</div><div class='del'>-                hole_cnt++;</div><div class='add'>+        if ((prev_stop + 1) &gt; layout-&gt;list[i].start) {</div><div class='add'>+            overlap_cnt++;</div><div class='add'>+            overlaps += ((prev_stop + 1) - layout-&gt;list[i].start);</div><div class='add'>+        }</div><div class='add'>+        prev_stop = layout-&gt;list[i].stop;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (holes_p)</div><div class='del'>-                *holes_p = hole_cnt;</div><div class='add'>+    if ((last_stop - prev_stop) || is_virgin)</div><div class='add'>+        hole_cnt++;</div><div class='ctx'> </div><div class='del'>-        if (overlaps_p)</div><div class='del'>-                *overlaps_p = overlap_cnt;</div><div class='add'>+    if (holes_p)</div><div class='add'>+        *holes_p = hole_cnt;</div><div class='ctx'> </div><div class='del'>-        if (missing_p)</div><div class='del'>-                *missing_p = missing;</div><div class='add'>+    if (overlaps_p)</div><div class='add'>+        *overlaps_p = overlap_cnt;</div><div class='ctx'> </div><div class='del'>-        if (down_p)</div><div class='del'>-                *down_p = down;</div><div class='add'>+    if (missing_p)</div><div class='add'>+        *missing_p = missing;</div><div class='ctx'> </div><div class='del'>-        if (misc_p)</div><div class='del'>-                *misc_p = misc;</div><div class='add'>+    if (down_p)</div><div class='add'>+        *down_p = down;</div><div class='ctx'> </div><div class='del'>-        if (no_space_p)</div><div class='del'>-                *no_space_p = no_space;</div><div class='add'>+    if (misc_p)</div><div class='add'>+        *misc_p = misc;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    if (no_space_p)</div><div class='add'>+        *no_space_p = no_space;</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_missing_dirs (dht_layout_t *layout)</div><div class='add'>+dht_layout_missing_dirs(dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int i = 0, missing = 0;</div><div class='add'>+    int i = 0, missing = 0;</div><div class='ctx'> </div><div class='del'>-        if (layout == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (layout == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if ((layout-&gt;list[i].err == ENOENT)</div><div class='del'>-                    || ((layout-&gt;list[i].err == -1)</div><div class='del'>-                        &amp;&amp; (layout-&gt;list[i].start == 0)</div><div class='del'>-                        &amp;&amp; (layout-&gt;list[i].stop == 0))) {</div><div class='del'>-                        missing++;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if ((layout-&gt;list[i].err == ENOENT) ||</div><div class='add'>+            ((layout-&gt;list[i].err == -1) &amp;&amp; (layout-&gt;list[i].start == 0) &amp;&amp;</div><div class='add'>+             (layout-&gt;list[i].stop == 0))) {</div><div class='add'>+            missing++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return missing;</div><div class='add'>+    return missing;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout)</div><div class='add'>+dht_layout_normalize(xlator_t *this, loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int          ret   = 0;</div><div class='del'>-        uint32_t     holes = 0;</div><div class='del'>-        uint32_t     overlaps = 0;</div><div class='del'>-        uint32_t     missing = 0;</div><div class='del'>-        uint32_t     down = 0;</div><div class='del'>-        uint32_t     misc = 0, missing_dirs = 0;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        ret = dht_layout_sort (layout);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_SORT_FAILED,</div><div class='del'>-                        "sort failed?! how the ....");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        ret = dht_layout_anomalies (this, loc, layout,</div><div class='del'>-                                    &amp;holes, &amp;overlaps,</div><div class='del'>-                                    &amp;missing, &amp;down, &amp;misc, NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_FIND_LAYOUT_ANOMALIES_ERROR,</div><div class='del'>-                        "Error finding anomalies in %s, gfid = %s",</div><div class='del'>-                        loc-&gt;path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (holes || overlaps) {</div><div class='del'>-                if (missing == layout-&gt;cnt) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Directory %s looked up first time"</div><div class='del'>-                                      " gfid = %s", loc-&gt;path, gfid);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_ANOMALIES_INFO,</div><div class='del'>-                                "Found anomalies in %s (gfid = %s). "</div><div class='del'>-                                "Holes=%d overlaps=%d",</div><div class='del'>-                                loc-&gt;path, gfid, holes, overlaps );</div><div class='del'>-                }</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &gt;= 0) {</div><div class='del'>-                missing_dirs = dht_layout_missing_dirs (layout);</div><div class='del'>-                /* TODO During DHT selfheal rewrite (almost) find a better place</div><div class='del'>-                 * to detect this - probably in dht_layout_anomalies()</div><div class='del'>-                 */</div><div class='del'>-                if (missing_dirs &gt; 0)</div><div class='del'>-                        ret += missing_dirs;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t holes = 0;</div><div class='add'>+    uint32_t overlaps = 0;</div><div class='add'>+    uint32_t missing = 0;</div><div class='add'>+    uint32_t down = 0;</div><div class='add'>+    uint32_t misc = 0, missing_dirs = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    ret = dht_layout_sort(layout);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_SORT_FAILED,</div><div class='add'>+               "sort failed?! how the ....");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+    ret = dht_layout_anomalies(this, loc, layout, &amp;holes, &amp;overlaps, &amp;missing,</div><div class='add'>+                               &amp;down, &amp;misc, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               DHT_MSG_FIND_LAYOUT_ANOMALIES_ERROR,</div><div class='add'>+               "Error finding anomalies in %s, gfid = %s", loc-&gt;path, gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (holes || overlaps) {</div><div class='add'>+        if (missing == layout-&gt;cnt) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Directory %s looked up first time"</div><div class='add'>+                         " gfid = %s",</div><div class='add'>+                         loc-&gt;path, gfid);</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_ANOMALIES_INFO,</div><div class='add'>+                   "Found anomalies in %s (gfid = %s). "</div><div class='add'>+                   "Holes=%d overlaps=%d",</div><div class='add'>+                   loc-&gt;path, gfid, holes, overlaps);</div><div class='add'>+        }</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='add'>+        missing_dirs = dht_layout_missing_dirs(layout);</div><div class='add'>+        /* TODO During DHT selfheal rewrite (almost) find a better place</div><div class='add'>+         * to detect this - probably in dht_layout_anomalies()</div><div class='add'>+         */</div><div class='add'>+        if (missing_dirs &gt; 0)</div><div class='add'>+            ret += missing_dirs;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_dir_has_layout (dict_t *xattr, char *name)</div><div class='add'>+dht_dir_has_layout(dict_t *xattr, char *name)</div><div class='ctx'> {</div><div class='add'>+    void *disk_layout_raw = NULL;</div><div class='ctx'> </div><div class='del'>-        void     *disk_layout_raw = NULL;</div><div class='del'>-</div><div class='del'>-        return dict_get_ptr (xattr, name, &amp;disk_layout_raw);</div><div class='add'>+    return dict_get_ptr(xattr, name, &amp;disk_layout_raw);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_dir_mismatch (xlator_t *this, dht_layout_t *layout, xlator_t *subvol,</div><div class='del'>-                         loc_t *loc, dict_t *xattr)</div><div class='add'>+dht_layout_dir_mismatch(xlator_t *this, dht_layout_t *layout, xlator_t *subvol,</div><div class='add'>+                        loc_t *loc, dict_t *xattr)</div><div class='ctx'> {</div><div class='del'>-        int         idx = 0;</div><div class='del'>-        int         pos = -1;</div><div class='del'>-        int         ret = 0;</div><div class='del'>-        int         err = 0;</div><div class='del'>-        int         dict_ret = 0;</div><div class='del'>-        int32_t     disk_layout[4];</div><div class='del'>-        void       *disk_layout_raw = NULL;</div><div class='del'>-        uint32_t    start_off = -1;</div><div class='del'>-        uint32_t    stop_off = -1;</div><div class='del'>-        uint32_t    commit_hash = -1;</div><div class='del'>-        dht_conf_t *conf = this-&gt;private;</div><div class='del'>-        char        gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        if(loc &amp;&amp; loc-&gt;inode)</div><div class='del'>-                gf_uuid_unparse(loc-&gt;inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        for (idx = 0; idx &lt; layout-&gt;cnt; idx++) {</div><div class='del'>-                if (layout-&gt;list[idx].xlator == subvol) {</div><div class='del'>-                        pos = idx;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (pos == -1) {</div><div class='del'>-                if (loc) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "%s - no layout info for subvolume %s",</div><div class='del'>-                                      loc ? loc-&gt;path : "path not found",</div><div class='del'>-                                      subvol-&gt;name);</div><div class='del'>-                }</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        err = layout-&gt;list[pos].err;</div><div class='del'>-</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                if (err == 0) {</div><div class='del'>-                        if (loc) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_DICT_GET_FAILED,</div><div class='del'>-                                        "%s: xattr dictionary is NULL",</div><div class='del'>-                                        loc-&gt;path);</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_DICT_GET_FAILED,</div><div class='del'>-                                        "path not found: "</div><div class='del'>-                                        "xattr dictionary is NULL");</div><div class='del'>-                        }</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict_ret = dict_get_ptr (xattr, conf-&gt;xattr_name,</div><div class='del'>-                                 &amp;disk_layout_raw);</div><div class='del'>-</div><div class='del'>-        if (dict_ret &lt; 0) {</div><div class='del'>-                if (err == 0 &amp;&amp; layout-&gt;list[pos].stop) {</div><div class='del'>-                        if (loc) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_DISK_LAYOUT_MISSING,</div><div class='del'>-                                    "%s: Disk layout missing, gfid = %s",</div><div class='del'>-                                    loc-&gt;path, gfid);</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_DISK_LAYOUT_MISSING,</div><div class='del'>-                                        "path not found: "</div><div class='del'>-                                        "Disk layout missing, gfid = %s",</div><div class='del'>-                                        gfid);</div><div class='del'>-                        }</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (disk_layout, disk_layout_raw, sizeof (disk_layout));</div><div class='del'>-</div><div class='del'>-        start_off = ntoh32 (disk_layout[2]);</div><div class='del'>-        stop_off  = ntoh32 (disk_layout[3]);</div><div class='del'>-        commit_hash = ntoh32 (disk_layout[0]);</div><div class='del'>-</div><div class='del'>-        if ((layout-&gt;list[pos].start != start_off)</div><div class='del'>-            || (layout-&gt;list[pos].stop != stop_off)</div><div class='del'>-            || (layout-&gt;list[pos].commit_hash != commit_hash)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_INFO,</div><div class='del'>-                        "subvol: %s; inode layout - %"PRIu32" - %"PRIu32</div><div class='del'>-                        " - %"PRIu32"; "</div><div class='del'>-                        "disk layout - %"PRIu32" - %"PRIu32" - %"PRIu32,</div><div class='del'>-                        layout-&gt;list[pos].xlator-&gt;name,</div><div class='del'>-                        layout-&gt;list[pos].start, layout-&gt;list[pos].stop,</div><div class='del'>-                        layout-&gt;list[pos].commit_hash,</div><div class='del'>-                        start_off, stop_off, commit_hash);</div><div class='del'>-                ret = 1;</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    int idx = 0;</div><div class='add'>+    int pos = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int err = 0;</div><div class='add'>+    int dict_ret = 0;</div><div class='add'>+    int32_t disk_layout[4];</div><div class='add'>+    void *disk_layout_raw = NULL;</div><div class='add'>+    uint32_t start_off = -1;</div><div class='add'>+    uint32_t stop_off = -1;</div><div class='add'>+    uint32_t commit_hash = -1;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    if (loc &amp;&amp; loc-&gt;inode)</div><div class='add'>+        gf_uuid_unparse(loc-&gt;inode-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+    for (idx = 0; idx &lt; layout-&gt;cnt; idx++) {</div><div class='add'>+        if (layout-&gt;list[idx].xlator == subvol) {</div><div class='add'>+            pos = idx;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (pos == -1) {</div><div class='add'>+        if (loc) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "%s - no layout info for subvolume %s",</div><div class='add'>+                         loc ? loc-&gt;path : "path not found", subvol-&gt;name);</div><div class='add'>+        }</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    err = layout-&gt;list[pos].err;</div><div class='add'>+</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        if (err == 0) {</div><div class='add'>+            if (loc) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_DICT_GET_FAILED,</div><div class='add'>+                       "%s: xattr dictionary is NULL", loc-&gt;path);</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_DICT_GET_FAILED,</div><div class='add'>+                       "path not found: "</div><div class='add'>+                       "xattr dictionary is NULL");</div><div class='add'>+            }</div><div class='add'>+            ret = -1;</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict_ret = dict_get_ptr(xattr, conf-&gt;xattr_name, &amp;disk_layout_raw);</div><div class='add'>+</div><div class='add'>+    if (dict_ret &lt; 0) {</div><div class='add'>+        if (err == 0 &amp;&amp; layout-&gt;list[pos].stop) {</div><div class='add'>+            if (loc) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_DISK_LAYOUT_MISSING,</div><div class='add'>+                       "%s: Disk layout missing, gfid = %s", loc-&gt;path, gfid);</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_DISK_LAYOUT_MISSING,</div><div class='add'>+                       "path not found: "</div><div class='add'>+                       "Disk layout missing, gfid = %s",</div><div class='add'>+                       gfid);</div><div class='add'>+            }</div><div class='add'>+            ret = -1;</div><div class='add'>+        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(disk_layout, disk_layout_raw, sizeof(disk_layout));</div><div class='add'>+</div><div class='add'>+    start_off = ntoh32(disk_layout[2]);</div><div class='add'>+    stop_off = ntoh32(disk_layout[3]);</div><div class='add'>+    commit_hash = ntoh32(disk_layout[0]);</div><div class='add'>+</div><div class='add'>+    if ((layout-&gt;list[pos].start != start_off) ||</div><div class='add'>+        (layout-&gt;list[pos].stop != stop_off) ||</div><div class='add'>+        (layout-&gt;list[pos].commit_hash != commit_hash)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LAYOUT_INFO,</div><div class='add'>+               "subvol: %s; inode layout - %" PRIu32 " - %" PRIu32 " - %" PRIu32</div><div class='add'>+               "; "</div><div class='add'>+               "disk layout - %" PRIu32 " - %" PRIu32 " - %" PRIu32,</div><div class='add'>+               layout-&gt;list[pos].xlator-&gt;name, layout-&gt;list[pos].start,</div><div class='add'>+               layout-&gt;list[pos].stop, layout-&gt;list[pos].commit_hash, start_off,</div><div class='add'>+               stop_off, commit_hash);</div><div class='add'>+        ret = 1;</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_layout_preset (xlator_t *this, xlator_t *subvol, inode_t *inode)</div><div class='add'>+dht_layout_preset(xlator_t *this, xlator_t *subvol, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        layout = dht_layout_for_subvol (this, subvol);</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_NO_LAYOUT_INFO,</div><div class='del'>-                        "no pre-set layout for subvolume %s",</div><div class='del'>-                        subvol ? subvol-&gt;name : "&lt;nil&gt;");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "file = %s, subvol = %s",</div><div class='del'>-                      uuid_utoa (inode-&gt;gfid), subvol ? subvol-&gt;name : "&lt;nil&gt;");</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;conf-&gt;layout_lock);</div><div class='del'>-        {</div><div class='del'>-                dht_inode_ctx_layout_set (inode, this, layout);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        UNLOCK (&amp;conf-&gt;layout_lock);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    layout = dht_layout_for_subvol(this, subvol);</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_NO_LAYOUT_INFO,</div><div class='add'>+               "no pre-set layout for subvolume %s",</div><div class='add'>+               subvol ? subvol-&gt;name : "&lt;nil&gt;");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "file = %s, subvol = %s",</div><div class='add'>+                 uuid_utoa(inode-&gt;gfid), subvol ? subvol-&gt;name : "&lt;nil&gt;");</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;layout_lock);</div><div class='add'>+    {</div><div class='add'>+        dht_inode_ctx_layout_set(inode, this, layout);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    UNLOCK(&amp;conf-&gt;layout_lock);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_index_for_subvol (dht_layout_t *layout, xlator_t *subvol)</div><div class='add'>+dht_layout_index_for_subvol(dht_layout_t *layout, xlator_t *subvol)</div><div class='ctx'> {</div><div class='del'>-        int i = 0, ret = -1;</div><div class='add'>+    int i = 0, ret = -1;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].xlator == subvol) {</div><div class='del'>-                        ret = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].xlator == subvol) {</div><div class='add'>+            ret = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-linkfile.c b/xlators/cluster/dht/src/dht-linkfile.c<br/>index a6d994b4157..eb1695f7e05 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-linkfile.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-linkfile.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-linkfile.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-linkfile.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "glusterfs.h"</div><div class='ctx'> #include "xlator.h"</div><div class='ctx'> #include "compat.h"</div><div class='hunk'>@@ -16,343 +15,325 @@</div><div class='ctx'> #include "dht-messages.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_linkfile_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno,</div><div class='del'>-                         inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                         struct iatt *postparent)</div><div class='add'>+dht_linkfile_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                        struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                        struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        char          is_linkfile   = 0;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        xlator_t     *prev          = NULL;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        is_linkfile = check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                         conf-&gt;link_xattr_name);</div><div class='del'>-        if (!is_linkfile)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_NOT_LINK_FILE_ERROR,</div><div class='del'>-                        "got non-linkfile %s:%s, gfid = %s",</div><div class='del'>-                        prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='add'>+    char is_linkfile = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    is_linkfile = check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name);</div><div class='add'>+    if (!is_linkfile)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_NOT_LINK_FILE_ERROR,</div><div class='add'>+               "got non-linkfile %s:%s, gfid = %s", prev-&gt;name, local-&gt;loc.path,</div><div class='add'>+               gfid);</div><div class='ctx'> out:</div><div class='del'>-        local-&gt;linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                                      inode, stbuf, postparent, postparent,</div><div class='del'>-                                      xattr);</div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;linkfile.linkfile_cbk(frame, cookie, this, op_ret, op_errno, inode,</div><div class='add'>+                                 stbuf, postparent, postparent, xattr);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define is_equal(a, b) ((a) == (b))</div><div class='ctx'> int</div><div class='del'>-dht_linkfile_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                         struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                         struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_linkfile_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                        struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                        struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        dict_t       *xattrs = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret = -1;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (!op_ret)</div><div class='del'>-                local-&gt;linked = _gf_true;</div><div class='del'>-</div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='del'>-</div><div class='del'>-        if (op_ret &amp;&amp; (op_errno == EEXIST)) {</div><div class='del'>-                conf = this-&gt;private;</div><div class='del'>-                subvol = cookie;</div><div class='del'>-                if (!subvol)</div><div class='del'>-                        goto out;</div><div class='del'>-                xattrs = dict_new ();</div><div class='del'>-                if (!xattrs)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = dict_set_uint32 (xattrs, conf-&gt;link_xattr_name, 256);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary value. key : %s",</div><div class='del'>-                                conf-&gt;link_xattr_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_linkfile_lookup_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;lookup, &amp;local-&gt;linkfile.loc,</div><div class='del'>-                                   xattrs);</div><div class='del'>-                if (xattrs)</div><div class='del'>-                        dict_unref (xattrs);</div><div class='del'>-                return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (!op_ret)</div><div class='add'>+        local-&gt;linked = _gf_true;</div><div class='add'>+</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='add'>+</div><div class='add'>+    if (op_ret &amp;&amp; (op_errno == EEXIST)) {</div><div class='add'>+        conf = this-&gt;private;</div><div class='add'>+        subvol = cookie;</div><div class='add'>+        if (!subvol)</div><div class='add'>+            goto out;</div><div class='add'>+        xattrs = dict_new();</div><div class='add'>+        if (!xattrs)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = dict_set_uint32(xattrs, conf-&gt;link_xattr_name, 256);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary value. key : %s",</div><div class='add'>+                   conf-&gt;link_xattr_name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='del'>-        local-&gt;linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                                      inode, stbuf, preparent, postparent,</div><div class='del'>-                                      xdata);</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_linkfile_lookup_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;lookup, &amp;local-&gt;linkfile.loc, xattrs);</div><div class='ctx'>         if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='add'>+            dict_unref(xattrs);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    local-&gt;linkfile.linkfile_cbk(frame, cookie, this, op_ret, op_errno, inode,</div><div class='add'>+                                 stbuf, preparent, postparent, xdata);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk,</div><div class='del'>-                     xlator_t *this,</div><div class='del'>-                     xlator_t *tovol, xlator_t *fromvol, loc_t *loc)</div><div class='add'>+dht_linkfile_create(call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk,</div><div class='add'>+                    xlator_t *this, xlator_t *tovol, xlator_t *fromvol,</div><div class='add'>+                    loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dict_t      *dict = NULL;</div><div class='del'>-        int          need_unref = 0;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        dht_conf_t  *conf = this-&gt;private;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        local-&gt;linkfile.linkfile_cbk = linkfile_cbk;</div><div class='del'>-        local-&gt;linkfile.srcvol = tovol;</div><div class='del'>-        loc_copy (&amp;local-&gt;linkfile.loc, loc);</div><div class='del'>-</div><div class='del'>-        local-&gt;linked = _gf_false;</div><div class='del'>-</div><div class='del'>-        dict = local-&gt;params;</div><div class='del'>-        if (!dict) {</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict)</div><div class='del'>-                        goto out;</div><div class='del'>-                need_unref = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (!gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-                ret = dict_set_gfuuid (dict, "gfid-req", local-&gt;gfid, true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg ("dht-linkfile", GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s: Failed to set dictionary value: "</div><div class='del'>-                                "key = gfid-req, gfid = %s ", loc-&gt;path, gfid);</div><div class='del'>-        } else {</div><div class='del'>-                gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes");</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int need_unref = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    local-&gt;linkfile.linkfile_cbk = linkfile_cbk;</div><div class='add'>+    local-&gt;linkfile.srcvol = tovol;</div><div class='add'>+    loc_copy(&amp;local-&gt;linkfile.loc, loc);</div><div class='add'>+</div><div class='add'>+    local-&gt;linked = _gf_false;</div><div class='add'>+</div><div class='add'>+    dict = local-&gt;params;</div><div class='add'>+    if (!dict) {</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict)</div><div class='add'>+            goto out;</div><div class='add'>+        need_unref = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+        ret = dict_set_gfuuid(dict, "gfid-req", local-&gt;gfid, true);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_msg ("dht-linkfile", GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Failed to set dictionary value: key = %s,"</div><div class='del'>-                        " gfid = %s", loc-&gt;path,</div><div class='del'>-                        GLUSTERFS_INTERNAL_FOP_KEY, gfid);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (dict, conf-&gt;link_xattr_name, tovol-&gt;name);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_CREATE_LINK_FAILED,</div><div class='del'>-                        "%s: failed to initialize linkfile data, gfid = %s",</div><div class='del'>-                        loc-&gt;path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;link_subvol = fromvol;</div><div class='del'>-        /* Always create as root:root. dht_linkfile_attr_heal fixes the</div><div class='del'>-         * ownsership */</div><div class='del'>-        FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_linkfile_create_cbk, fromvol, fromvol,</div><div class='del'>-                           fromvol-&gt;fops-&gt;mknod, loc,</div><div class='del'>-                           S_IFREG | DHT_LINKFILE_MODE, 0, 0, dict);</div><div class='del'>-</div><div class='del'>-        if (need_unref &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+            gf_msg("dht-linkfile", GF_LOG_INFO, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s: Failed to set dictionary value: "</div><div class='add'>+                   "key = gfid-req, gfid = %s ",</div><div class='add'>+                   loc-&gt;path, gfid);</div><div class='add'>+    } else {</div><div class='add'>+        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg("dht-linkfile", GF_LOG_INFO, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Failed to set dictionary value: key = %s,"</div><div class='add'>+               " gfid = %s",</div><div class='add'>+               loc-&gt;path, GLUSTERFS_INTERNAL_FOP_KEY, gfid);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, conf-&gt;link_xattr_name, tovol-&gt;name);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_CREATE_LINK_FAILED,</div><div class='add'>+               "%s: failed to initialize linkfile data, gfid = %s", loc-&gt;path,</div><div class='add'>+               gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;link_subvol = fromvol;</div><div class='add'>+    /* Always create as root:root. dht_linkfile_attr_heal fixes the</div><div class='add'>+     * ownsership */</div><div class='add'>+    FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_linkfile_create_cbk, fromvol, fromvol,</div><div class='add'>+                      fromvol-&gt;fops-&gt;mknod, loc, S_IFREG | DHT_LINKFILE_MODE, 0,</div><div class='add'>+                      0, dict);</div><div class='add'>+</div><div class='add'>+    if (need_unref &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        local-&gt;linkfile.linkfile_cbk (frame, frame-&gt;this, frame-&gt;this, -1, ENOMEM,</div><div class='del'>-                                      loc-&gt;inode, NULL, NULL, NULL, NULL);</div><div class='add'>+    local-&gt;linkfile.linkfile_cbk(frame, frame-&gt;this, frame-&gt;this, -1, ENOMEM,</div><div class='add'>+                                 loc-&gt;inode, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        if (need_unref &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (need_unref &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_linkfile_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+dht_linkfile_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno,</div><div class='add'>+                        struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local = NULL;</div><div class='del'>-        xlator_t      *subvol = NULL;</div><div class='del'>-        char           gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        subvol = cookie;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    subvol = cookie;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-</div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                        DHT_MSG_UNLINK_FAILED,</div><div class='del'>-                        "Unlinking linkfile %s (gfid = %s)on "</div><div class='del'>-                        "subvolume %s failed ",</div><div class='del'>-                        local-&gt;loc.path, gfid, subvol-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, op_errno, DHT_MSG_UNLINK_FAILED,</div><div class='add'>+               "Unlinking linkfile %s (gfid = %s)on "</div><div class='add'>+               "subvolume %s failed ",</div><div class='add'>+               local-&gt;loc.path, gfid, subvol-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_linkfile_unlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     xlator_t *subvol, loc_t *loc)</div><div class='add'>+dht_linkfile_unlink(call_frame_t *frame, xlator_t *this, xlator_t *subvol,</div><div class='add'>+                    loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *unlink_frame = NULL;</div><div class='del'>-        dht_local_t  *unlink_local = NULL;</div><div class='add'>+    call_frame_t *unlink_frame = NULL;</div><div class='add'>+    dht_local_t *unlink_local = NULL;</div><div class='ctx'> </div><div class='del'>-        unlink_frame = copy_frame (frame);</div><div class='del'>-        if (!unlink_frame) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    unlink_frame = copy_frame(frame);</div><div class='add'>+    if (!unlink_frame) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Using non-fop value here, as anyways, 'local-&gt;fop' is not used in</div><div class='del'>-           this particular case */</div><div class='del'>-        unlink_local = dht_local_init (unlink_frame, loc, NULL,</div><div class='del'>-                                       GF_FOP_MAXVALUE);</div><div class='del'>-        if (!unlink_local) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    /* Using non-fop value here, as anyways, 'local-&gt;fop' is not used in</div><div class='add'>+       this particular case */</div><div class='add'>+    unlink_local = dht_local_init(unlink_frame, loc, NULL, GF_FOP_MAXVALUE);</div><div class='add'>+    if (!unlink_local) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (unlink_frame, dht_linkfile_unlink_cbk, subvol,</div><div class='del'>-                           subvol, subvol-&gt;fops-&gt;unlink,</div><div class='del'>-                           &amp;unlink_local-&gt;loc, 0, NULL);</div><div class='add'>+    STACK_WIND_COOKIE(unlink_frame, dht_linkfile_unlink_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;unlink, &amp;unlink_local-&gt;loc, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (unlink_frame)</div><div class='del'>-                DHT_STACK_DESTROY (unlink_frame);</div><div class='add'>+    if (unlink_frame)</div><div class='add'>+        DHT_STACK_DESTROY(unlink_frame);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> xlator_t *</div><div class='del'>-dht_linkfile_subvol (xlator_t *this, inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                     dict_t *xattr)</div><div class='add'>+dht_linkfile_subvol(xlator_t *this, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                    dict_t *xattr)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        xlator_t   *subvol = NULL;</div><div class='del'>-        void       *volname = NULL;</div><div class='del'>-        int         i = 0, ret = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    void *volname = NULL;</div><div class='add'>+    int i = 0, ret = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!xattr)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!xattr)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_ptr (xattr, conf-&gt;link_xattr_name, &amp;volname);</div><div class='add'>+    ret = dict_get_ptr(xattr, conf-&gt;link_xattr_name, &amp;volname);</div><div class='ctx'> </div><div class='del'>-        if ((-1 == ret) || !volname)</div><div class='del'>-                goto out;</div><div class='add'>+    if ((-1 == ret) || !volname)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (strcmp (conf-&gt;subvolumes[i]-&gt;name, (char *)volname) == 0) {</div><div class='del'>-                        subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (strcmp(conf-&gt;subvolumes[i]-&gt;name, (char *)volname) == 0) {</div><div class='add'>+            subvol = conf-&gt;subvolumes[i];</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_linkfile_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int op_ret, int op_errno, struct iatt *statpre,</div><div class='del'>-                          struct iatt *statpost, dict_t *xdata)</div><div class='add'>+dht_linkfile_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int op_ret, int op_errno, struct iatt *statpre,</div><div class='add'>+                         struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        loc_t *loc = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        loc = &amp;local-&gt;loc;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='ctx'> </div><div class='del'>-        if (op_ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        DHT_MSG_SETATTR_FAILED,</div><div class='del'>-                        "Failed to set attr uid/gid on %s"</div><div class='del'>-                        " :&lt;gfid:%s&gt; ",</div><div class='del'>-                        (loc-&gt;path? loc-&gt;path: "NULL"),</div><div class='del'>-                        uuid_utoa(local-&gt;gfid));</div><div class='add'>+    if (op_ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_SETATTR_FAILED,</div><div class='add'>+               "Failed to set attr uid/gid on %s"</div><div class='add'>+               " :&lt;gfid:%s&gt; ",</div><div class='add'>+               (loc-&gt;path ? loc-&gt;path : "NULL"), uuid_utoa(local-&gt;gfid));</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-       return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_linkfile_attr_heal (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_linkfile_attr_heal(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int           ret         = -1;</div><div class='del'>-        call_frame_t  *copy       = NULL;</div><div class='del'>-        dht_local_t   *local      = NULL;</div><div class='del'>-        dht_local_t   *copy_local = NULL;</div><div class='del'>-        xlator_t      *subvol     = NULL;</div><div class='del'>-        struct iatt   stbuf       = {0,};</div><div class='del'>-        dict_t        *xattr      = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", local-&gt;link_subvol, out);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;stbuf.ia_type == IA_INVAL)</div><div class='del'>-                return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *copy = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *copy_local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", local-&gt;link_subvol, out);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;stbuf.ia_type == IA_INVAL)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        DHT_MARK_FOP_INTERNAL (xattr);</div><div class='add'>+    DHT_MARK_FOP_INTERNAL(xattr);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (local-&gt;loc.gfid, local-&gt;stbuf.ia_gfid);</div><div class='add'>+    gf_uuid_copy(local-&gt;loc.gfid, local-&gt;stbuf.ia_gfid);</div><div class='ctx'> </div><div class='del'>-        copy = copy_frame (frame);</div><div class='add'>+    copy = copy_frame(frame);</div><div class='ctx'> </div><div class='del'>-        if (!copy)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!copy)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-       copy_local = dht_local_init (copy, &amp;local-&gt;loc, NULL, 0);</div><div class='add'>+    copy_local = dht_local_init(copy, &amp;local-&gt;loc, NULL, 0);</div><div class='ctx'> </div><div class='del'>-       if (!copy_local)</div><div class='del'>-               goto out;</div><div class='add'>+    if (!copy_local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stbuf = local-&gt;stbuf;</div><div class='del'>-        subvol = local-&gt;link_subvol;</div><div class='add'>+    stbuf = local-&gt;stbuf;</div><div class='add'>+    subvol = local-&gt;link_subvol;</div><div class='ctx'> </div><div class='del'>-        copy-&gt;local = copy_local;</div><div class='add'>+    copy-&gt;local = copy_local;</div><div class='ctx'> </div><div class='del'>-        FRAME_SU_DO (copy, dht_local_t);</div><div class='add'>+    FRAME_SU_DO(copy, dht_local_t);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (copy, dht_linkfile_setattr_cbk, subvol,</div><div class='del'>-                    subvol-&gt;fops-&gt;setattr, &amp;copy_local-&gt;loc,</div><div class='del'>-                    &amp;stbuf, (GF_SET_ATTR_UID | GF_SET_ATTR_GID), xattr);</div><div class='del'>-        ret = 0;</div><div class='add'>+    STACK_WIND(copy, dht_linkfile_setattr_cbk, subvol, subvol-&gt;fops-&gt;setattr,</div><div class='add'>+               &amp;copy_local-&gt;loc, &amp;stbuf, (GF_SET_ATTR_UID | GF_SET_ATTR_GID),</div><div class='add'>+               xattr);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if ((ret &lt; 0) &amp;&amp; (copy))</div><div class='del'>-                DHT_STACK_DESTROY (copy);</div><div class='add'>+    if ((ret &lt; 0) &amp;&amp; (copy))</div><div class='add'>+        DHT_STACK_DESTROY(copy);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-lock.c b/xlators/cluster/dht/src/dht-lock.c<br/>index 3f389eafa75..f9bac4f97c8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-lock.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-lock.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-lock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-lock.c</a></div><div class='hunk'>@@ -11,1252 +11,1265 @@</div><div class='ctx'> #include "dht-lock.h"</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-dht_lock_asprintf (dht_lock_t *lock)</div><div class='add'>+dht_lock_asprintf(dht_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        char *lk_buf                = NULL;</div><div class='del'>-        char gfid[GF_UUID_BUF_SIZE] = {0, };</div><div class='add'>+    char *lk_buf = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (lock == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (lock == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        uuid_utoa_r (lock-&gt;loc.gfid, gfid);</div><div class='add'>+    uuid_utoa_r(lock-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        gf_asprintf (&amp;lk_buf, "%s:%s", lock-&gt;xl-&gt;name, gfid);</div><div class='add'>+    gf_asprintf(&amp;lk_buf, "%s:%s", lock-&gt;xl-&gt;name, gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lk_buf;</div><div class='add'>+    return lk_buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_log_lk_array (char *name, gf_loglevel_t log_level, dht_lock_t **lk_array,</div><div class='del'>-                  int count)</div><div class='add'>+dht_log_lk_array(char *name, gf_loglevel_t log_level, dht_lock_t **lk_array,</div><div class='add'>+                 int count)</div><div class='ctx'> {</div><div class='del'>-        int   i      = 0;</div><div class='del'>-        char *lk_buf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char *lk_buf = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((lk_array == NULL) || (count == 0))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((lk_array == NULL) || (count == 0))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                lk_buf = dht_lock_asprintf (lk_array[i]);</div><div class='del'>-                if (!lk_buf)</div><div class='del'>-                        goto out;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        lk_buf = dht_lock_asprintf(lk_array[i]);</div><div class='add'>+        if (!lk_buf)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                gf_msg (name, log_level, 0, DHT_MSG_LK_ARRAY_INFO,</div><div class='del'>-                        "%d. %s", i, lk_buf);</div><div class='del'>-                GF_FREE (lk_buf);</div><div class='del'>-        }</div><div class='add'>+        gf_msg(name, log_level, 0, DHT_MSG_LK_ARRAY_INFO, "%d. %s", i, lk_buf);</div><div class='add'>+        GF_FREE(lk_buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_lock_stack_destroy (call_frame_t *lock_frame, dht_lock_type_t lk)</div><div class='add'>+dht_lock_stack_destroy(call_frame_t *lock_frame, dht_lock_type_t lk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (lk == DHT_INODELK) {</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;lock[0].ns.directory_ns.locks = NULL;</div><div class='del'>-                local-&gt;lock[0].ns.directory_ns.lk_count = 0;</div><div class='del'>-        }</div><div class='add'>+    if (lk == DHT_INODELK) {</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks = NULL;</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.lk_count = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        return;</div><div class='add'>+    DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_lock_free (dht_lock_t *lock)</div><div class='add'>+dht_lock_free(dht_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        if (lock == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (lock == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;lock-&gt;loc);</div><div class='del'>-        GF_FREE (lock-&gt;domain);</div><div class='del'>-        GF_FREE (lock-&gt;basename);</div><div class='del'>-        mem_put (lock);</div><div class='add'>+    loc_wipe(&amp;lock-&gt;loc);</div><div class='add'>+    GF_FREE(lock-&gt;domain);</div><div class='add'>+    GF_FREE(lock-&gt;basename);</div><div class='add'>+    mem_put(lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_set_lkowner (dht_lock_t **lk_array, int count, gf_lkowner_t *lkowner)</div><div class='add'>+dht_set_lkowner(dht_lock_t **lk_array, int count, gf_lkowner_t *lkowner)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!lk_array || !lkowner)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!lk_array || !lkowner)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                lk_array[i]-&gt;lk_owner = *lkowner;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        lk_array[i]-&gt;lk_owner = *lkowner;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_lock_request_cmp (const void *val1, const void *val2)</div><div class='add'>+dht_lock_request_cmp(const void *val1, const void *val2)</div><div class='ctx'> {</div><div class='del'>-        dht_lock_t *lock1 = NULL;</div><div class='del'>-        dht_lock_t *lock2 = NULL;</div><div class='del'>-        int         ret   = -1;</div><div class='add'>+    dht_lock_t *lock1 = NULL;</div><div class='add'>+    dht_lock_t *lock2 = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        lock1 = *(dht_lock_t **)val1;</div><div class='del'>-        lock2 = *(dht_lock_t **)val2;</div><div class='add'>+    lock1 = *(dht_lock_t **)val1;</div><div class='add'>+    lock2 = *(dht_lock_t **)val2;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", lock1, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", lock2, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", lock1, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", lock2, out);</div><div class='ctx'> </div><div class='del'>-        ret = strcmp (lock1-&gt;xl-&gt;name, lock2-&gt;xl-&gt;name);</div><div class='add'>+    ret = strcmp(lock1-&gt;xl-&gt;name, lock2-&gt;xl-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ret = gf_uuid_compare (lock1-&gt;loc.gfid, lock2-&gt;loc.gfid);</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ret = gf_uuid_compare(lock1-&gt;loc.gfid, lock2-&gt;loc.gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_lock_order_requests (dht_lock_t **locks, int count)</div><div class='add'>+dht_lock_order_requests(dht_lock_t **locks, int count)</div><div class='ctx'> {</div><div class='del'>-        int        ret     = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!locks || !count)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!locks || !count)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        qsort (locks, count, sizeof (*locks), dht_lock_request_cmp);</div><div class='del'>-        ret = 0;</div><div class='add'>+    qsort(locks, count, sizeof(*locks), dht_lock_request_cmp);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_lock_array_free (dht_lock_t **lk_array, int count)</div><div class='add'>+dht_lock_array_free(dht_lock_t **lk_array, int count)</div><div class='ctx'> {</div><div class='del'>-        int            i       = 0;</div><div class='del'>-        dht_lock_t    *lock    = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        if (lk_array == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (lk_array == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                lock = lk_array[i];</div><div class='del'>-                lk_array[i] = NULL;</div><div class='del'>-                dht_lock_free (lock);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        lock = lk_array[i];</div><div class='add'>+        lk_array[i] = NULL;</div><div class='add'>+        dht_lock_free(lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_lock_count (dht_lock_t **lk_array, int lk_count)</div><div class='add'>+dht_lock_count(dht_lock_t **lk_array, int lk_count)</div><div class='ctx'> {</div><div class='del'>-        int i = 0, locked = 0;</div><div class='add'>+    int i = 0, locked = 0;</div><div class='ctx'> </div><div class='del'>-        if ((lk_array == NULL) || (lk_count == 0))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((lk_array == NULL) || (lk_count == 0))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; lk_count; i++) {</div><div class='del'>-                if (lk_array[i]-&gt;locked)</div><div class='del'>-                        locked++;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; lk_count; i++) {</div><div class='add'>+        if (lk_array[i]-&gt;locked)</div><div class='add'>+            locked++;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return locked;</div><div class='add'>+    return locked;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static call_frame_t *</div><div class='del'>-dht_lock_frame (call_frame_t *parent_frame)</div><div class='add'>+dht_lock_frame(call_frame_t *parent_frame)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *lock_frame = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        lock_frame = copy_frame (parent_frame);</div><div class='del'>-        if (lock_frame == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    lock_frame = copy_frame(parent_frame);</div><div class='add'>+    if (lock_frame == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        set_lk_owner_from_ptr (&amp;lock_frame-&gt;root-&gt;lk_owner, parent_frame-&gt;root);</div><div class='add'>+    set_lk_owner_from_ptr(&amp;lock_frame-&gt;root-&gt;lk_owner, parent_frame-&gt;root);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lock_frame;</div><div class='add'>+    return lock_frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dht_lock_t *</div><div class='del'>-dht_lock_new (xlator_t *this, xlator_t *xl, loc_t *loc, short type,</div><div class='del'>-              const char *domain, const char *basename,</div><div class='del'>-              dht_reaction_type_t do_on_failure)</div><div class='add'>+dht_lock_new(xlator_t *this, xlator_t *xl, loc_t *loc, short type,</div><div class='add'>+             const char *domain, const char *basename,</div><div class='add'>+             dht_reaction_type_t do_on_failure)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        dht_lock_t *lock = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        lock = mem_get0 (conf-&gt;lock_pool);</div><div class='del'>-        if (lock == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        lock-&gt;xl = xl;</div><div class='del'>-        lock-&gt;type = type;</div><div class='del'>-        lock-&gt;do_on_failure = do_on_failure;</div><div class='del'>-</div><div class='del'>-        lock-&gt;domain = gf_strdup (domain);</div><div class='del'>-        if (lock-&gt;domain == NULL) {</div><div class='del'>-                dht_lock_free (lock);</div><div class='del'>-                lock = NULL;</div><div class='del'>-                goto out;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_lock_t *lock = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    lock = mem_get0(conf-&gt;lock_pool);</div><div class='add'>+    if (lock == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    lock-&gt;xl = xl;</div><div class='add'>+    lock-&gt;type = type;</div><div class='add'>+    lock-&gt;do_on_failure = do_on_failure;</div><div class='add'>+</div><div class='add'>+    lock-&gt;domain = gf_strdup(domain);</div><div class='add'>+    if (lock-&gt;domain == NULL) {</div><div class='add'>+        dht_lock_free(lock);</div><div class='add'>+        lock = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (basename) {</div><div class='add'>+        lock-&gt;basename = gf_strdup(basename);</div><div class='add'>+        if (lock-&gt;basename == NULL) {</div><div class='add'>+            dht_lock_free(lock);</div><div class='add'>+            lock = NULL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (basename) {</div><div class='del'>-                lock-&gt;basename = gf_strdup (basename);</div><div class='del'>-                if (lock-&gt;basename == NULL) {</div><div class='del'>-                        dht_lock_free (lock);</div><div class='del'>-                        lock = NULL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Fill only inode and gfid.</div><div class='del'>-           posix and protocol/server give preference to pargfid/basename over</div><div class='del'>-           gfid/inode for resolution if all the three parameters of loc_t are</div><div class='del'>-           present. I want to avoid the following hypothetical situation:</div><div class='del'>-</div><div class='del'>-           1. rebalance did a lookup on a dentry and got a gfid.</div><div class='del'>-           2. rebalance acquires lock on loc_t which was filled with gfid and</div><div class='del'>-              path (pargfid/bname) from step 1.</div><div class='del'>-           3. somebody deleted and recreated the same file</div><div class='del'>-           4. rename on the same path acquires lock on loc_t which now points</div><div class='del'>-              to a different inode (and hence gets the lock).</div><div class='del'>-           5. rebalance continues to migrate file (note that not all fops done</div><div class='del'>-              by rebalance during migration are inode/gfid based Eg., unlink)</div><div class='del'>-           6. rename continues.</div><div class='del'>-        */</div><div class='del'>-        lock-&gt;loc.inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        loc_gfid (loc, lock-&gt;loc.gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Fill only inode and gfid.</div><div class='add'>+       posix and protocol/server give preference to pargfid/basename over</div><div class='add'>+       gfid/inode for resolution if all the three parameters of loc_t are</div><div class='add'>+       present. I want to avoid the following hypothetical situation:</div><div class='add'>+</div><div class='add'>+       1. rebalance did a lookup on a dentry and got a gfid.</div><div class='add'>+       2. rebalance acquires lock on loc_t which was filled with gfid and</div><div class='add'>+          path (pargfid/bname) from step 1.</div><div class='add'>+       3. somebody deleted and recreated the same file</div><div class='add'>+       4. rename on the same path acquires lock on loc_t which now points</div><div class='add'>+          to a different inode (and hence gets the lock).</div><div class='add'>+       5. rebalance continues to migrate file (note that not all fops done</div><div class='add'>+          by rebalance during migration are inode/gfid based Eg., unlink)</div><div class='add'>+       6. rename continues.</div><div class='add'>+    */</div><div class='add'>+    lock-&gt;loc.inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    loc_gfid(loc, lock-&gt;loc.gfid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lock;</div><div class='add'>+    return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_local_entrylk_init (call_frame_t *frame, dht_lock_t **lk_array,</div><div class='del'>-                     int lk_count, fop_entrylk_cbk_t entrylk_cbk)</div><div class='add'>+dht_local_entrylk_init(call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='add'>+                       fop_entrylk_cbk_t entrylk_cbk)</div><div class='ctx'> {</div><div class='del'>-        int          ret   = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local == NULL) {</div><div class='del'>-                local = dht_local_init (frame, NULL, NULL, 0);</div><div class='del'>-        }</div><div class='add'>+    if (local == NULL) {</div><div class='add'>+        local = dht_local_init(frame, NULL, NULL, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (local == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].ns.directory_ns.entrylk_cbk = entrylk_cbk;</div><div class='del'>-        local-&gt;lock[0].ns.directory_ns.locks = lk_array;</div><div class='del'>-        local-&gt;lock[0].ns.directory_ns.lk_count = lk_count;</div><div class='add'>+    local-&gt;lock[0].ns.directory_ns.entrylk_cbk = entrylk_cbk;</div><div class='add'>+    local-&gt;lock[0].ns.directory_ns.locks = lk_array;</div><div class='add'>+    local-&gt;lock[0].ns.directory_ns.lk_count = lk_count;</div><div class='ctx'> </div><div class='del'>-        ret = dht_lock_order_requests (local-&gt;lock[0].ns.directory_ns.locks,</div><div class='del'>-                                       local-&gt;lock[0].ns.directory_ns.lk_count);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dht_lock_order_requests(local-&gt;lock[0].ns.directory_ns.locks,</div><div class='add'>+                                  local-&gt;lock[0].ns.directory_ns.lk_count);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_entrylk_done (call_frame_t *lock_frame)</div><div class='add'>+dht_entrylk_done(call_frame_t *lock_frame)</div><div class='ctx'> {</div><div class='del'>-        fop_entrylk_cbk_t  entrylk_cbk = NULL;</div><div class='del'>-        call_frame_t      *main_frame  = NULL;</div><div class='del'>-        dht_local_t       *local       = NULL;</div><div class='add'>+    fop_entrylk_cbk_t entrylk_cbk = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        main_frame = local-&gt;main_frame;</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    main_frame = local-&gt;main_frame;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].ns.directory_ns.locks = NULL;</div><div class='del'>-        local-&gt;lock[0].ns.directory_ns.lk_count = 0;</div><div class='add'>+    local-&gt;lock[0].ns.directory_ns.locks = NULL;</div><div class='add'>+    local-&gt;lock[0].ns.directory_ns.lk_count = 0;</div><div class='ctx'> </div><div class='del'>-        entrylk_cbk = local-&gt;lock[0].ns.directory_ns.entrylk_cbk;</div><div class='del'>-        local-&gt;lock[0].ns.directory_ns.entrylk_cbk = NULL;</div><div class='add'>+    entrylk_cbk = local-&gt;lock[0].ns.directory_ns.entrylk_cbk;</div><div class='add'>+    local-&gt;lock[0].ns.directory_ns.entrylk_cbk = NULL;</div><div class='ctx'> </div><div class='del'>-        entrylk_cbk (main_frame, NULL, main_frame-&gt;this,</div><div class='del'>-                     local-&gt;lock[0].ns.directory_ns.op_ret,</div><div class='del'>-                     local-&gt;lock[0].ns.directory_ns.op_errno, NULL);</div><div class='add'>+    entrylk_cbk(main_frame, NULL, main_frame-&gt;this,</div><div class='add'>+                local-&gt;lock[0].ns.directory_ns.op_ret,</div><div class='add'>+                local-&gt;lock[0].ns.directory_ns.op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        dht_lock_stack_destroy (lock_frame, DHT_ENTRYLK);</div><div class='del'>-        return;</div><div class='add'>+    dht_lock_stack_destroy(lock_frame, DHT_ENTRYLK);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_unlock_entrylk_done (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_unlock_entrylk_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                   = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        gf_uuid_unparse (local-&gt;lock[0].ns.directory_ns.locks[0]-&gt;loc.inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "unlock failed on gfid: %s, stale lock might be left "</div><div class='del'>-                        "in DHT_LAYOUT_HEAL_DOMAIN", gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    gf_uuid_unparse(local-&gt;lock[0].ns.directory_ns.locks[0]-&gt;loc.inode-&gt;gfid,</div><div class='add'>+                    gfid);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "unlock failed on gfid: %s, stale lock might be left "</div><div class='add'>+               "in DHT_LAYOUT_HEAL_DOMAIN",</div><div class='add'>+               gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_unlock_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_unlock_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                  = NULL;</div><div class='del'>-        int          lk_index               = 0, call_cnt = 0;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int lk_index = 0, call_cnt = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        lk_index = (long) cookie;</div><div class='add'>+    lk_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        uuid_utoa_r (local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;loc.gfid, gfid);</div><div class='add'>+    uuid_utoa_r(local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                        "unlocking failed on %s:%s",</div><div class='del'>-                        local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;xl-&gt;name,</div><div class='del'>-                        gfid);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;locked = 0;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+               "unlocking failed on %s:%s",</div><div class='add'>+               local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;xl-&gt;name, gfid);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;locked = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (call_cnt)) {</div><div class='del'>-                dht_entrylk_done (frame);</div><div class='del'>-        }</div><div class='add'>+    call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(call_cnt)) {</div><div class='add'>+        dht_entrylk_done(frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_unlock_entrylk (call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='del'>-                     fop_entrylk_cbk_t entrylk_cbk)</div><div class='add'>+dht_unlock_entrylk(call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='add'>+                   fop_entrylk_cbk_t entrylk_cbk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local      = NULL;</div><div class='del'>-        int              ret        = -1 , i = 0;</div><div class='del'>-        call_frame_t    *lock_frame = NULL;</div><div class='del'>-        int              call_cnt   = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, done);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, lk_array, done);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, entrylk_cbk, done);</div><div class='del'>-</div><div class='del'>-        call_cnt = dht_lock_count (lk_array, lk_count);</div><div class='del'>-        if (call_cnt == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_frame = dht_lock_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                        "cannot allocate a frame, not unlocking following "</div><div class='del'>-                        "entrylks:");</div><div class='del'>-</div><div class='del'>-                dht_log_lk_array (frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array,</div><div class='del'>-                                  lk_count);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_local_entrylk_init (lock_frame, lk_array, lk_count,</div><div class='del'>-                                      entrylk_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                        "storing locks in local failed, not unlocking "</div><div class='del'>-                        "following entrylks:");</div><div class='del'>-</div><div class='del'>-                dht_log_lk_array (frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array,</div><div class='del'>-                                  lk_count);</div><div class='del'>-</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1, i = 0;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        local-&gt;main_frame = frame;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; local-&gt;lock[0].ns.directory_ns.lk_count; i++) {</div><div class='del'>-                if (!local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;locked)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                lock_frame-&gt;root-&gt;lk_owner = local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;lk_owner;</div><div class='del'>-                STACK_WIND_COOKIE (lock_frame, dht_unlock_entrylk_cbk,</div><div class='del'>-                                   (void *)(long)i,</div><div class='del'>-                                   local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl,</div><div class='del'>-                                   local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl-&gt;fops-&gt;entrylk,</div><div class='del'>-                                   local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;domain,</div><div class='del'>-                                   &amp;local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;loc,</div><div class='del'>-                                   local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;basename,</div><div class='del'>-                                   ENTRYLK_UNLOCK, ENTRYLK_WRLCK, NULL);</div><div class='del'>-                if (!--call_cnt)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, done);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, lk_array, done);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, entrylk_cbk, done);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    call_cnt = dht_lock_count(lk_array, lk_count);</div><div class='add'>+    if (call_cnt == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_frame = dht_lock_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+               "cannot allocate a frame, not unlocking following "</div><div class='add'>+               "entrylks:");</div><div class='add'>+</div><div class='add'>+        dht_log_lk_array(frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array, lk_count);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_local_entrylk_init(lock_frame, lk_array, lk_count, entrylk_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+               "storing locks in local failed, not unlocking "</div><div class='add'>+               "following entrylks:");</div><div class='add'>+</div><div class='add'>+        dht_log_lk_array(frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array, lk_count);</div><div class='add'>+</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    local-&gt;main_frame = frame;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; local-&gt;lock[0].ns.directory_ns.lk_count; i++) {</div><div class='add'>+        if (!local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;locked)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        lock_frame-&gt;root</div><div class='add'>+            -&gt;lk_owner = local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;lk_owner;</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            lock_frame, dht_unlock_entrylk_cbk, (void *)(long)i,</div><div class='add'>+            local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl,</div><div class='add'>+            local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl-&gt;fops-&gt;entrylk,</div><div class='add'>+            local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;domain,</div><div class='add'>+            &amp;local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;loc,</div><div class='add'>+            local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;basename, ENTRYLK_UNLOCK,</div><div class='add'>+            ENTRYLK_WRLCK, NULL);</div><div class='add'>+        if (!--call_cnt)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame)</div><div class='del'>-                dht_lock_stack_destroy (lock_frame, DHT_ENTRYLK);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        dht_lock_stack_destroy(lock_frame, DHT_ENTRYLK);</div><div class='ctx'> </div><div class='del'>-        /* no locks acquired, invoke entrylk_cbk */</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                entrylk_cbk (frame, NULL, frame-&gt;this, 0, 0, NULL);</div><div class='add'>+    /* no locks acquired, invoke entrylk_cbk */</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        entrylk_cbk(frame, NULL, frame-&gt;this, 0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_unlock_entrylk_wrapper (call_frame_t *frame, dht_elock_wrap_t *entrylk)</div><div class='add'>+dht_unlock_entrylk_wrapper(call_frame_t *frame, dht_elock_wrap_t *entrylk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                   = NULL, *lock_local = NULL;</div><div class='del'>-        call_frame_t *lock_frame              = NULL;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int           ret                     = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (!entrylk || !entrylk-&gt;locks)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse (local-&gt;loc.parent-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        lock_frame = copy_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "copy frame failed", pgfid, local-&gt;loc.name,</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local = dht_local_init (lock_frame, NULL, NULL, 0);</div><div class='del'>-        if (lock_local == NULL) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "local creation failed", pgfid, local-&gt;loc.name,</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_frame-&gt;local = lock_local;</div><div class='del'>-</div><div class='del'>-        lock_local-&gt;lock[0].ns.directory_ns.locks = entrylk-&gt;locks;</div><div class='del'>-        lock_local-&gt;lock[0].ns.directory_ns.lk_count = entrylk-&gt;lk_count;</div><div class='del'>-        entrylk-&gt;locks = NULL;</div><div class='del'>-        entrylk-&gt;lk_count = 0;</div><div class='del'>-</div><div class='del'>-        ret = dht_unlock_entrylk (lock_frame,</div><div class='del'>-                                  lock_local-&gt;lock[0].ns.directory_ns.locks,</div><div class='del'>-                                  lock_local-&gt;lock[0].ns.directory_ns.lk_count,</div><div class='del'>-                                  dht_unlock_entrylk_done);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        lock_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL, *lock_local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (!entrylk || !entrylk-&gt;locks)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.parent-&gt;gfid, pgfid);</div><div class='add'>+</div><div class='add'>+    lock_frame = copy_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "copy frame failed",</div><div class='add'>+               pgfid, local-&gt;loc.name, local-&gt;loc.path);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local = dht_local_init(lock_frame, NULL, NULL, 0);</div><div class='add'>+    if (lock_local == NULL) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "local creation failed",</div><div class='add'>+               pgfid, local-&gt;loc.name, local-&gt;loc.path);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_frame-&gt;local = lock_local;</div><div class='add'>+</div><div class='add'>+    lock_local-&gt;lock[0].ns.directory_ns.locks = entrylk-&gt;locks;</div><div class='add'>+    lock_local-&gt;lock[0].ns.directory_ns.lk_count = entrylk-&gt;lk_count;</div><div class='add'>+    entrylk-&gt;locks = NULL;</div><div class='add'>+    entrylk-&gt;lk_count = 0;</div><div class='add'>+</div><div class='add'>+    ret = dht_unlock_entrylk(</div><div class='add'>+        lock_frame, lock_local-&gt;lock[0].ns.directory_ns.locks,</div><div class='add'>+        lock_local-&gt;lock[0].ns.directory_ns.lk_count, dht_unlock_entrylk_done);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    lock_frame = NULL;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame != NULL) {</div><div class='del'>-                DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    if (lock_frame != NULL) {</div><div class='add'>+        DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_entrylk_cleanup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+dht_entrylk_cleanup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_entrylk_done (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_entrylk_done(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_entrylk_cleanup (call_frame_t *lock_frame)</div><div class='add'>+dht_entrylk_cleanup(call_frame_t *lock_frame)</div><div class='ctx'> {</div><div class='del'>-        dht_lock_t  **lk_array = NULL;</div><div class='del'>-        int           lk_count = 0, lk_acquired = 0;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+    int lk_count = 0, lk_acquired = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        lk_array = local-&gt;lock[0].ns.directory_ns.locks;</div><div class='del'>-        lk_count = local-&gt;lock[0].ns.directory_ns.lk_count;</div><div class='add'>+    lk_array = local-&gt;lock[0].ns.directory_ns.locks;</div><div class='add'>+    lk_count = local-&gt;lock[0].ns.directory_ns.lk_count;</div><div class='ctx'> </div><div class='del'>-        lk_acquired = dht_lock_count (lk_array, lk_count);</div><div class='del'>-        if (lk_acquired != 0) {</div><div class='del'>-                dht_unlock_entrylk (lock_frame, lk_array, lk_count,</div><div class='del'>-                                     dht_entrylk_cleanup_cbk);</div><div class='del'>-        } else {</div><div class='del'>-                dht_entrylk_done (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    lk_acquired = dht_lock_count(lk_array, lk_count);</div><div class='add'>+    if (lk_acquired != 0) {</div><div class='add'>+        dht_unlock_entrylk(lock_frame, lk_array, lk_count,</div><div class='add'>+                           dht_entrylk_cleanup_cbk);</div><div class='add'>+    } else {</div><div class='add'>+        dht_entrylk_done(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int32_t</div><div class='del'>-dht_blocking_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_blocking_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          lk_index = 0;</div><div class='del'>-        int          i        = 0;</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='del'>-</div><div class='del'>-        lk_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;locked = _gf_true;</div><div class='del'>-        } else {</div><div class='del'>-                switch (op_errno) {</div><div class='del'>-                case ESTALE:</div><div class='del'>-                case ENOENT:</div><div class='del'>-                        if (local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;do_on_failure != IGNORE_ENOENT_ESTALE) {</div><div class='del'>-                                local-&gt;lock[0].ns.directory_ns.op_ret = -1;</div><div class='del'>-                                local-&gt;lock[0].ns.directory_ns.op_errno = op_errno;</div><div class='del'>-                                goto cleanup;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        local-&gt;lock[0].ns.directory_ns.op_ret = -1;</div><div class='del'>-                        local-&gt;lock[0].ns.directory_ns.op_errno = op_errno;</div><div class='del'>-                        goto cleanup;</div><div class='add'>+    int lk_index = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    lk_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks[lk_index]-&gt;locked = _gf_true;</div><div class='add'>+    } else {</div><div class='add'>+        switch (op_errno) {</div><div class='add'>+            case ESTALE:</div><div class='add'>+            case ENOENT:</div><div class='add'>+                if (local-&gt;lock[0]</div><div class='add'>+                        .ns.directory_ns.locks[lk_index]</div><div class='add'>+                        -&gt;do_on_failure != IGNORE_ENOENT_ESTALE) {</div><div class='add'>+                    local-&gt;lock[0].ns.directory_ns.op_ret = -1;</div><div class='add'>+                    local-&gt;lock[0].ns.directory_ns.op_errno = op_errno;</div><div class='add'>+                    goto cleanup;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                local-&gt;lock[0].ns.directory_ns.op_ret = -1;</div><div class='add'>+                local-&gt;lock[0].ns.directory_ns.op_errno = op_errno;</div><div class='add'>+                goto cleanup;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (lk_index == (local-&gt;lock[0].ns.directory_ns.lk_count - 1)) {</div><div class='del'>-                for (i = 0; (i &lt; local-&gt;lock[0].ns.directory_ns.lk_count) &amp;&amp;</div><div class='del'>-                     (!local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;locked); i++)</div><div class='del'>-                        ;</div><div class='add'>+    if (lk_index == (local-&gt;lock[0].ns.directory_ns.lk_count - 1)) {</div><div class='add'>+        for (i = 0; (i &lt; local-&gt;lock[0].ns.directory_ns.lk_count) &amp;&amp;</div><div class='add'>+                    (!local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;locked);</div><div class='add'>+             i++)</div><div class='add'>+            ;</div><div class='ctx'> </div><div class='del'>-                if (i == local-&gt;lock[0].ns.directory_ns.lk_count) {</div><div class='del'>-                        local-&gt;lock[0].ns.directory_ns.op_ret = -1;</div><div class='del'>-                        local-&gt;lock[0].ns.directory_ns.op_errno = op_errno;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dht_entrylk_done (frame);</div><div class='del'>-        } else {</div><div class='del'>-                dht_blocking_entrylk_rec (frame, ++lk_index);</div><div class='add'>+        if (i == local-&gt;lock[0].ns.directory_ns.lk_count) {</div><div class='add'>+            local-&gt;lock[0].ns.directory_ns.op_ret = -1;</div><div class='add'>+            local-&gt;lock[0].ns.directory_ns.op_errno = op_errno;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        dht_entrylk_done(frame);</div><div class='add'>+    } else {</div><div class='add'>+        dht_blocking_entrylk_rec(frame, ++lk_index);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        dht_entrylk_cleanup (frame);</div><div class='add'>+    dht_entrylk_cleanup(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_blocking_entrylk_rec (call_frame_t *frame, int i)</div><div class='add'>+dht_blocking_entrylk_rec(call_frame_t *frame, int i)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_blocking_entrylk_cbk,</div><div class='del'>-                           (void *) (long) i,</div><div class='del'>-                           local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl,</div><div class='del'>-                           local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl-&gt;fops-&gt;entrylk,</div><div class='del'>-                           local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;domain,</div><div class='del'>-                           &amp;local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;loc,</div><div class='del'>-                           local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;basename,</div><div class='del'>-                           ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL);</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, dht_blocking_entrylk_cbk, (void *)(long)i,</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl,</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;xl-&gt;fops-&gt;entrylk,</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;domain,</div><div class='add'>+        &amp;local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;loc,</div><div class='add'>+        local-&gt;lock[0].ns.directory_ns.locks[i]-&gt;basename, ENTRYLK_LOCK,</div><div class='add'>+        ENTRYLK_WRLCK, NULL);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_blocking_entrylk (call_frame_t *frame, dht_lock_t **lk_array,</div><div class='del'>-                      int lk_count, fop_entrylk_cbk_t entrylk_cbk)</div><div class='add'>+dht_blocking_entrylk(call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='add'>+                     fop_entrylk_cbk_t entrylk_cbk)</div><div class='ctx'> {</div><div class='del'>-        int           ret        = -1;</div><div class='del'>-        call_frame_t *lock_frame = NULL;</div><div class='del'>-        dht_local_t  *local      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, lk_array, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, entrylk_cbk, out);</div><div class='del'>-</div><div class='del'>-        lock_frame = dht_lock_frame (frame);</div><div class='del'>-        if (lock_frame == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dht_local_entrylk_init (lock_frame, lk_array, lk_count,</div><div class='del'>-                                      entrylk_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, lk_array, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, entrylk_cbk, out);</div><div class='ctx'> </div><div class='del'>-        dht_set_lkowner (lk_array, lk_count, &amp;lock_frame-&gt;root-&gt;lk_owner);</div><div class='add'>+    lock_frame = dht_lock_frame(frame);</div><div class='add'>+    if (lock_frame == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        local-&gt;main_frame = frame;</div><div class='add'>+    ret = dht_local_entrylk_init(lock_frame, lk_array, lk_count, entrylk_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_blocking_entrylk_rec (lock_frame, 0);</div><div class='add'>+    dht_set_lkowner(lk_array, lk_count, &amp;lock_frame-&gt;root-&gt;lk_owner);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    local-&gt;main_frame = frame;</div><div class='add'>+</div><div class='add'>+    dht_blocking_entrylk_rec(lock_frame, 0);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        if (lock_frame)</div><div class='del'>-                dht_lock_stack_destroy (lock_frame, DHT_ENTRYLK);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        dht_lock_stack_destroy(lock_frame, DHT_ENTRYLK);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_local_inodelk_init (call_frame_t *frame, dht_lock_t **lk_array,</div><div class='del'>-                     int lk_count, fop_inodelk_cbk_t inodelk_cbk)</div><div class='add'>+dht_local_inodelk_init(call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='add'>+                       fop_inodelk_cbk_t inodelk_cbk)</div><div class='ctx'> {</div><div class='del'>-        int          ret   = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local == NULL) {</div><div class='del'>-                local = dht_local_init (frame, NULL, NULL, 0);</div><div class='del'>-        }</div><div class='add'>+    if (local == NULL) {</div><div class='add'>+        local = dht_local_init(frame, NULL, NULL, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (local == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].layout.my_layout.inodelk_cbk = inodelk_cbk;</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.locks = lk_array;</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.lk_count = lk_count;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.inodelk_cbk = inodelk_cbk;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.locks = lk_array;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.lk_count = lk_count;</div><div class='ctx'> </div><div class='del'>-        ret = dht_lock_order_requests (local-&gt;lock[0].layout.my_layout.locks,</div><div class='del'>-                                       local-&gt;lock[0].layout.my_layout.lk_count);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dht_lock_order_requests(local-&gt;lock[0].layout.my_layout.locks,</div><div class='add'>+                                  local-&gt;lock[0].layout.my_layout.lk_count);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_inodelk_done (call_frame_t *lock_frame)</div><div class='add'>+dht_inodelk_done(call_frame_t *lock_frame)</div><div class='ctx'> {</div><div class='del'>-        fop_inodelk_cbk_t  inodelk_cbk = NULL;</div><div class='del'>-        call_frame_t      *main_frame  = NULL;</div><div class='del'>-        dht_local_t       *local       = NULL;</div><div class='add'>+    fop_inodelk_cbk_t inodelk_cbk = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        main_frame = local-&gt;main_frame;</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    main_frame = local-&gt;main_frame;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='ctx'> </div><div class='del'>-        inodelk_cbk = local-&gt;lock[0].layout.my_layout.inodelk_cbk;</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.inodelk_cbk = NULL;</div><div class='add'>+    inodelk_cbk = local-&gt;lock[0].layout.my_layout.inodelk_cbk;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.inodelk_cbk = NULL;</div><div class='ctx'> </div><div class='del'>-        inodelk_cbk (main_frame, NULL, main_frame-&gt;this,</div><div class='del'>-                     local-&gt;lock[0].layout.my_layout.op_ret,</div><div class='del'>-                     local-&gt;lock[0].layout.my_layout.op_errno, NULL);</div><div class='add'>+    inodelk_cbk(main_frame, NULL, main_frame-&gt;this,</div><div class='add'>+                local-&gt;lock[0].layout.my_layout.op_ret,</div><div class='add'>+                local-&gt;lock[0].layout.my_layout.op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        dht_lock_stack_destroy (lock_frame, DHT_INODELK);</div><div class='del'>-        return;</div><div class='add'>+    dht_lock_stack_destroy(lock_frame, DHT_INODELK);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_unlock_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_unlock_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                  = NULL;</div><div class='del'>-        int          lk_index               = 0, call_cnt = 0;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        lk_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.gfid,</div><div class='del'>-                             gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                        "unlocking failed on %s:%s",</div><div class='del'>-                        local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name,</div><div class='del'>-                        gfid);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;locked = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (call_cnt)) {</div><div class='del'>-                dht_inodelk_done (frame);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int lk_index = 0, call_cnt = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    lk_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.gfid,</div><div class='add'>+                    gfid);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+               "unlocking failed on %s:%s",</div><div class='add'>+               local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name, gfid);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;locked = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(call_cnt)) {</div><div class='add'>+        dht_inodelk_done(frame);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_unlock_inodelk_done (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_unlock_inodelk_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                   = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        gf_uuid_unparse (local-&gt;lock[0].layout.my_layout.locks[0]-&gt;loc.inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "unlock failed on gfid: %s, stale lock might be left "</div><div class='del'>-                        "in DHT_LAYOUT_HEAL_DOMAIN", gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    gf_uuid_unparse(local-&gt;lock[0].layout.my_layout.locks[0]-&gt;loc.inode-&gt;gfid,</div><div class='add'>+                    gfid);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "unlock failed on gfid: %s, stale lock might be left "</div><div class='add'>+               "in DHT_LAYOUT_HEAL_DOMAIN",</div><div class='add'>+               gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_unlock_inodelk (call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='del'>-                     fop_inodelk_cbk_t inodelk_cbk)</div><div class='add'>+dht_unlock_inodelk(call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='add'>+                   fop_inodelk_cbk_t inodelk_cbk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local      = NULL;</div><div class='del'>-        struct gf_flock  flock      = {0,};</div><div class='del'>-        int              ret        = -1 , i = 0;</div><div class='del'>-        call_frame_t    *lock_frame = NULL;</div><div class='del'>-        int              call_cnt   = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, done);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, lk_array, done);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, inodelk_cbk, done);</div><div class='del'>-</div><div class='del'>-        call_cnt = dht_lock_count (lk_array, lk_count);</div><div class='del'>-        if (call_cnt == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_frame = dht_lock_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                        "cannot allocate a frame, not unlocking following "</div><div class='del'>-                        "locks:");</div><div class='del'>-</div><div class='del'>-                dht_log_lk_array (frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array,</div><div class='del'>-                                  lk_count);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_local_inodelk_init (lock_frame, lk_array, lk_count,</div><div class='del'>-                                      inodelk_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                        "storing locks in local failed, not unlocking "</div><div class='del'>-                        "following locks:");</div><div class='del'>-</div><div class='del'>-                dht_log_lk_array (frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array,</div><div class='del'>-                                  lk_count);</div><div class='del'>-</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        local-&gt;main_frame = frame;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='del'>-</div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; local-&gt;lock[0].layout.my_layout.lk_count; i++) {</div><div class='del'>-                if (!local-&gt;lock[0].layout.my_layout.locks[i]-&gt;locked)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                lock_frame-&gt;root-&gt;lk_owner = local-&gt;lock[0].layout.my_layout.locks[i]-&gt;lk_owner;</div><div class='del'>-                STACK_WIND_COOKIE (lock_frame, dht_unlock_inodelk_cbk,</div><div class='del'>-                                   (void *)(long)i,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl-&gt;fops-&gt;inodelk,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.locks[i]-&gt;domain,</div><div class='del'>-                                   &amp;local-&gt;lock[0].layout.my_layout.locks[i]-&gt;loc, F_SETLK,</div><div class='del'>-                                   &amp;flock, NULL);</div><div class='del'>-                if (!--call_cnt)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1, i = 0;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, done);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, lk_array, done);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, inodelk_cbk, done);</div><div class='add'>+</div><div class='add'>+    call_cnt = dht_lock_count(lk_array, lk_count);</div><div class='add'>+    if (call_cnt == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_frame = dht_lock_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+               "cannot allocate a frame, not unlocking following "</div><div class='add'>+               "locks:");</div><div class='add'>+</div><div class='add'>+        dht_log_lk_array(frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array, lk_count);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_local_inodelk_init(lock_frame, lk_array, lk_count, inodelk_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+               "storing locks in local failed, not unlocking "</div><div class='add'>+               "following locks:");</div><div class='add'>+</div><div class='add'>+        dht_log_lk_array(frame-&gt;this-&gt;name, GF_LOG_WARNING, lk_array, lk_count);</div><div class='add'>+</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    local-&gt;main_frame = frame;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='add'>+</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; local-&gt;lock[0].layout.my_layout.lk_count; i++) {</div><div class='add'>+        if (!local-&gt;lock[0].layout.my_layout.locks[i]-&gt;locked)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        lock_frame-&gt;root</div><div class='add'>+            -&gt;lk_owner = local-&gt;lock[0].layout.my_layout.locks[i]-&gt;lk_owner;</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            lock_frame, dht_unlock_inodelk_cbk, (void *)(long)i,</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl,</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl-&gt;fops-&gt;inodelk,</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.locks[i]-&gt;domain,</div><div class='add'>+            &amp;local-&gt;lock[0].layout.my_layout.locks[i]-&gt;loc, F_SETLK, &amp;flock,</div><div class='add'>+            NULL);</div><div class='add'>+        if (!--call_cnt)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame)</div><div class='del'>-                dht_lock_stack_destroy (lock_frame, DHT_INODELK);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        dht_lock_stack_destroy(lock_frame, DHT_INODELK);</div><div class='ctx'> </div><div class='del'>-        /* no locks acquired, invoke inodelk_cbk */</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                inodelk_cbk (frame, NULL, frame-&gt;this, 0, 0, NULL);</div><div class='add'>+    /* no locks acquired, invoke inodelk_cbk */</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        inodelk_cbk(frame, NULL, frame-&gt;this, 0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_unlock_inodelk_wrapper (call_frame_t *frame, dht_ilock_wrap_t *inodelk)</div><div class='add'>+dht_unlock_inodelk_wrapper(call_frame_t *frame, dht_ilock_wrap_t *inodelk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                   = NULL, *lock_local = NULL;</div><div class='del'>-        call_frame_t *lock_frame              = NULL;</div><div class='del'>-        char          pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int           ret                     = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (!inodelk || !inodelk-&gt;locks)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse (local-&gt;loc.parent-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        lock_frame = copy_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "copy frame failed", pgfid, local-&gt;loc.name,</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local = dht_local_init (lock_frame, NULL, NULL, 0);</div><div class='del'>-        if (lock_local == NULL) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='del'>-                        "mkdir (%s/%s) (path: %s): "</div><div class='del'>-                        "local creation failed", pgfid, local-&gt;loc.name,</div><div class='del'>-                        local-&gt;loc.path);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_frame-&gt;local = lock_local;</div><div class='del'>-</div><div class='del'>-        lock_local-&gt;lock[0].layout.my_layout.locks = inodelk-&gt;locks;</div><div class='del'>-        lock_local-&gt;lock[0].layout.my_layout.lk_count = inodelk-&gt;lk_count;</div><div class='del'>-        inodelk-&gt;locks = NULL;</div><div class='del'>-        inodelk-&gt;lk_count = 0;</div><div class='del'>-</div><div class='del'>-        ret = dht_unlock_inodelk (lock_frame,</div><div class='del'>-                                  lock_local-&gt;lock[0].layout.my_layout.locks,</div><div class='del'>-                                  lock_local-&gt;lock[0].layout.my_layout.lk_count,</div><div class='del'>-                                  dht_unlock_inodelk_done);</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        lock_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL, *lock_local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (!inodelk || !inodelk-&gt;locks)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.parent-&gt;gfid, pgfid);</div><div class='add'>+</div><div class='add'>+    lock_frame = copy_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "copy frame failed",</div><div class='add'>+               pgfid, local-&gt;loc.name, local-&gt;loc.path);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local = dht_local_init(lock_frame, NULL, NULL, 0);</div><div class='add'>+    if (lock_local == NULL) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+               DHT_MSG_PARENT_LAYOUT_CHANGED,</div><div class='add'>+               "mkdir (%s/%s) (path: %s): "</div><div class='add'>+               "local creation failed",</div><div class='add'>+               pgfid, local-&gt;loc.name, local-&gt;loc.path);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_frame-&gt;local = lock_local;</div><div class='add'>+</div><div class='add'>+    lock_local-&gt;lock[0].layout.my_layout.locks = inodelk-&gt;locks;</div><div class='add'>+    lock_local-&gt;lock[0].layout.my_layout.lk_count = inodelk-&gt;lk_count;</div><div class='add'>+    inodelk-&gt;locks = NULL;</div><div class='add'>+    inodelk-&gt;lk_count = 0;</div><div class='add'>+</div><div class='add'>+    ret = dht_unlock_inodelk(</div><div class='add'>+        lock_frame, lock_local-&gt;lock[0].layout.my_layout.locks,</div><div class='add'>+        lock_local-&gt;lock[0].layout.my_layout.lk_count, dht_unlock_inodelk_done);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    lock_frame = NULL;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (lock_frame != NULL) {</div><div class='del'>-                DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    if (lock_frame != NULL) {</div><div class='add'>+        DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_inodelk_cleanup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                         xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+dht_inodelk_cleanup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_inodelk_done (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_inodelk_done(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_inodelk_cleanup (call_frame_t *lock_frame)</div><div class='add'>+dht_inodelk_cleanup(call_frame_t *lock_frame)</div><div class='ctx'> {</div><div class='del'>-        dht_lock_t  **lk_array = NULL;</div><div class='del'>-        int           lk_count = 0, lk_acquired = 0;</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+    int lk_count = 0, lk_acquired = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        lk_array = local-&gt;lock[0].layout.my_layout.locks;</div><div class='del'>-        lk_count = local-&gt;lock[0].layout.my_layout.lk_count;</div><div class='add'>+    lk_array = local-&gt;lock[0].layout.my_layout.locks;</div><div class='add'>+    lk_count = local-&gt;lock[0].layout.my_layout.lk_count;</div><div class='ctx'> </div><div class='del'>-        lk_acquired = dht_lock_count (lk_array, lk_count);</div><div class='del'>-        if (lk_acquired != 0) {</div><div class='del'>-                dht_unlock_inodelk (lock_frame, lk_array, lk_count,</div><div class='del'>-                                     dht_inodelk_cleanup_cbk);</div><div class='del'>-        } else {</div><div class='del'>-                dht_inodelk_done (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    lk_acquired = dht_lock_count(lk_array, lk_count);</div><div class='add'>+    if (lk_acquired != 0) {</div><div class='add'>+        dht_unlock_inodelk(lock_frame, lk_array, lk_count,</div><div class='add'>+                           dht_inodelk_cleanup_cbk);</div><div class='add'>+    } else {</div><div class='add'>+        dht_inodelk_done(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_nonblocking_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_nonblocking_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                   = NULL;</div><div class='del'>-        int          lk_index               = 0, call_cnt = 0;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int lk_index = 0, call_cnt = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        lk_index = (long) cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    lk_index = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                if (local &amp;&amp; local-&gt;lock[0].layout.my_layout.locks[lk_index]) {</div><div class='del'>-                        uuid_utoa_r (local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.inode-&gt;gfid,</div><div class='del'>-                                     gfid);</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "inodelk failed on gfid: %s "</div><div class='del'>-                                      "subvolume: %s", gfid,</div><div class='del'>-                                      local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name);</div><div class='del'>-                }</div><div class='add'>+        if (local &amp;&amp; local-&gt;lock[0].layout.my_layout.locks[lk_index]) {</div><div class='add'>+            uuid_utoa_r(local-&gt;lock[0]</div><div class='add'>+                            .layout.my_layout.locks[lk_index]</div><div class='add'>+                            -&gt;loc.inode-&gt;gfid,</div><div class='add'>+                        gfid);</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg_debug(</div><div class='add'>+                this-&gt;name, op_errno,</div><div class='add'>+                "inodelk failed on gfid: %s "</div><div class='add'>+                "subvolume: %s",</div><div class='add'>+                gfid,</div><div class='add'>+                local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;locked = _gf_true;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (call_cnt)) {</div><div class='del'>-                if (local-&gt;lock[0].layout.my_layout.op_ret &lt; 0) {</div><div class='del'>-                        dht_inodelk_cleanup (frame);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;locked = _gf_true;</div><div class='ctx'> </div><div class='del'>-                dht_inodelk_done (frame);</div><div class='add'>+out:</div><div class='add'>+    call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(call_cnt)) {</div><div class='add'>+        if (local-&gt;lock[0].layout.my_layout.op_ret &lt; 0) {</div><div class='add'>+            dht_inodelk_cleanup(frame);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        dht_inodelk_done(frame);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_nonblocking_inodelk (call_frame_t *frame, dht_lock_t **lk_array,</div><div class='del'>-                         int lk_count, fop_inodelk_cbk_t inodelk_cbk)</div><div class='add'>+dht_nonblocking_inodelk(call_frame_t *frame, dht_lock_t **lk_array,</div><div class='add'>+                        int lk_count, fop_inodelk_cbk_t inodelk_cbk)</div><div class='ctx'> {</div><div class='del'>-        struct gf_flock  flock      = {0,};</div><div class='del'>-        int              i          = 0, ret = 0;</div><div class='del'>-        dht_local_t     *local      = NULL;</div><div class='del'>-        call_frame_t    *lock_frame = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, lk_array, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, inodelk_cbk, out);</div><div class='del'>-</div><div class='del'>-        lock_frame = dht_lock_frame (frame);</div><div class='del'>-        if (lock_frame == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dht_local_inodelk_init (lock_frame, lk_array, lk_count,</div><div class='del'>-                                      inodelk_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0, ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        dht_set_lkowner (lk_array, lk_count, &amp;lock_frame-&gt;root-&gt;lk_owner);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, lk_array, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, inodelk_cbk, out);</div><div class='ctx'> </div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        local-&gt;main_frame = frame;</div><div class='add'>+    lock_frame = dht_lock_frame(frame);</div><div class='add'>+    if (lock_frame == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = lk_count;</div><div class='add'>+    ret = dht_local_inodelk_init(lock_frame, lk_array, lk_count, inodelk_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; lk_count; i++) {</div><div class='del'>-                flock.l_type = local-&gt;lock[0].layout.my_layout.locks[i]-&gt;type;</div><div class='add'>+    dht_set_lkowner(lk_array, lk_count, &amp;lock_frame-&gt;root-&gt;lk_owner);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (lock_frame, dht_nonblocking_inodelk_cbk,</div><div class='del'>-                                   (void *) (long) i,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl-&gt;fops-&gt;inodelk,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.locks[i]-&gt;domain,</div><div class='del'>-                                   &amp;local-&gt;lock[0].layout.my_layout.locks[i]-&gt;loc,</div><div class='del'>-                                   F_SETLK,</div><div class='del'>-                                   &amp;flock, NULL);</div><div class='del'>-        }</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    local-&gt;main_frame = frame;</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = lk_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; lk_count; i++) {</div><div class='add'>+        flock.l_type = local-&gt;lock[0].layout.my_layout.locks[i]-&gt;type;</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            lock_frame, dht_nonblocking_inodelk_cbk, (void *)(long)i,</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl,</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl-&gt;fops-&gt;inodelk,</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.locks[i]-&gt;domain,</div><div class='add'>+            &amp;local-&gt;lock[0].layout.my_layout.locks[i]-&gt;loc, F_SETLK, &amp;flock,</div><div class='add'>+            NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (lock_frame)</div><div class='del'>-                dht_lock_stack_destroy (lock_frame, DHT_INODELK);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        dht_lock_stack_destroy(lock_frame, DHT_INODELK);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_blocking_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_blocking_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int                  lk_index       = 0;</div><div class='del'>-        int                  i              = 0;</div><div class='del'>-        dht_local_t         *local          = NULL;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0,};</div><div class='del'>-        dht_reaction_type_t  reaction       = 0;</div><div class='del'>-</div><div class='del'>-        lk_index = (long) cookie;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;locked = _gf_true;</div><div class='del'>-        } else {</div><div class='del'>-                switch (op_errno) {</div><div class='del'>-                case ESTALE:</div><div class='del'>-                case ENOENT:</div><div class='del'>-                        reaction = local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;do_on_failure;</div><div class='del'>-                        if ((reaction != IGNORE_ENOENT_ESTALE) &amp;&amp;</div><div class='del'>-                            (reaction != IGNORE_ENOENT_ESTALE_EIO)) {</div><div class='del'>-                                gf_uuid_unparse (local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.gfid, gfid);</div><div class='del'>-                                local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='del'>-                                local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                        DHT_MSG_INODELK_FAILED,</div><div class='del'>-                                        "inodelk failed on subvol %s. gfid:%s",</div><div class='del'>-                                        local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name,</div><div class='del'>-                                        gfid);</div><div class='del'>-                                goto cleanup;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                case EIO:</div><div class='del'>-                        reaction = local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;do_on_failure;</div><div class='del'>-                        if (reaction != IGNORE_ENOENT_ESTALE_EIO) {</div><div class='del'>-                                gf_uuid_unparse (local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.gfid, gfid);</div><div class='del'>-                                local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='del'>-                                local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                        DHT_MSG_INODELK_FAILED,</div><div class='del'>-                                        "inodelk failed on subvol %s. gfid:%s",</div><div class='del'>-                                        local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name,</div><div class='del'>-                                        gfid);</div><div class='del'>-                                goto cleanup;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        gf_uuid_unparse (local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.gfid, gfid);</div><div class='del'>-                        local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='del'>-                        local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                DHT_MSG_INODELK_FAILED,</div><div class='del'>-                                "inodelk failed on subvol %s, gfid:%s",</div><div class='del'>-                                local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name, gfid);</div><div class='del'>-                        goto cleanup;</div><div class='add'>+    int lk_index = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dht_reaction_type_t reaction = 0;</div><div class='add'>+</div><div class='add'>+    lk_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;locked = _gf_true;</div><div class='add'>+    } else {</div><div class='add'>+        switch (op_errno) {</div><div class='add'>+            case ESTALE:</div><div class='add'>+            case ENOENT:</div><div class='add'>+                reaction = local-&gt;lock[0]</div><div class='add'>+                               .layout.my_layout.locks[lk_index]</div><div class='add'>+                               -&gt;do_on_failure;</div><div class='add'>+                if ((reaction != IGNORE_ENOENT_ESTALE) &amp;&amp;</div><div class='add'>+                    (reaction != IGNORE_ENOENT_ESTALE_EIO)) {</div><div class='add'>+                    gf_uuid_unparse(local-&gt;lock[0]</div><div class='add'>+                                        .layout.my_layout.locks[lk_index]</div><div class='add'>+                                        -&gt;loc.gfid,</div><div class='add'>+                                    gfid);</div><div class='add'>+                    local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='add'>+                    local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                           DHT_MSG_INODELK_FAILED,</div><div class='add'>+                           "inodelk failed on subvol %s. gfid:%s",</div><div class='add'>+                           local-&gt;lock[0]</div><div class='add'>+                               .layout.my_layout.locks[lk_index]</div><div class='add'>+                               -&gt;xl-&gt;name,</div><div class='add'>+                           gfid);</div><div class='add'>+                    goto cleanup;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='add'>+                break;</div><div class='add'>+            case EIO:</div><div class='add'>+                reaction = local-&gt;lock[0]</div><div class='add'>+                               .layout.my_layout.locks[lk_index]</div><div class='add'>+                               -&gt;do_on_failure;</div><div class='add'>+                if (reaction != IGNORE_ENOENT_ESTALE_EIO) {</div><div class='add'>+                    gf_uuid_unparse(local-&gt;lock[0]</div><div class='add'>+                                        .layout.my_layout.locks[lk_index]</div><div class='add'>+                                        -&gt;loc.gfid,</div><div class='add'>+                                    gfid);</div><div class='add'>+                    local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='add'>+                    local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                           DHT_MSG_INODELK_FAILED,</div><div class='add'>+                           "inodelk failed on subvol %s. gfid:%s",</div><div class='add'>+                           local-&gt;lock[0]</div><div class='add'>+                               .layout.my_layout.locks[lk_index]</div><div class='add'>+                               -&gt;xl-&gt;name,</div><div class='add'>+                           gfid);</div><div class='add'>+                    goto cleanup;</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-        if (lk_index == (local-&gt;lock[0].layout.my_layout.lk_count - 1)) {</div><div class='del'>-                for (i = 0; (i &lt; local-&gt;lock[0].layout.my_layout.lk_count) &amp;&amp;</div><div class='del'>-                     (!local-&gt;lock[0].layout.my_layout.locks[i]-&gt;locked); i++)</div><div class='del'>-                        ;</div><div class='add'>+            default:</div><div class='add'>+                gf_uuid_unparse(</div><div class='add'>+                    local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;loc.gfid,</div><div class='add'>+                    gfid);</div><div class='add'>+                local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='add'>+                local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='add'>+                gf_msg(</div><div class='add'>+                    this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_INODELK_FAILED,</div><div class='add'>+                    "inodelk failed on subvol %s, gfid:%s",</div><div class='add'>+                    local-&gt;lock[0].layout.my_layout.locks[lk_index]-&gt;xl-&gt;name,</div><div class='add'>+                    gfid);</div><div class='add'>+                goto cleanup;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (i == local-&gt;lock[0].layout.my_layout.lk_count) {</div><div class='del'>-                        local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='del'>-                        local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+    if (lk_index == (local-&gt;lock[0].layout.my_layout.lk_count - 1)) {</div><div class='add'>+        for (i = 0; (i &lt; local-&gt;lock[0].layout.my_layout.lk_count) &amp;&amp;</div><div class='add'>+                    (!local-&gt;lock[0].layout.my_layout.locks[i]-&gt;locked);</div><div class='add'>+             i++)</div><div class='add'>+            ;</div><div class='ctx'> </div><div class='del'>-                dht_inodelk_done (frame);</div><div class='del'>-        } else {</div><div class='del'>-                dht_blocking_inodelk_rec (frame, ++lk_index);</div><div class='add'>+        if (i == local-&gt;lock[0].layout.my_layout.lk_count) {</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.op_ret = -1;</div><div class='add'>+            local-&gt;lock[0].layout.my_layout.op_errno = op_errno;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        dht_inodelk_done(frame);</div><div class='add'>+    } else {</div><div class='add'>+        dht_blocking_inodelk_rec(frame, ++lk_index);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        dht_inodelk_cleanup (frame);</div><div class='add'>+    dht_inodelk_cleanup(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_blocking_inodelk_rec (call_frame_t *frame, int i)</div><div class='add'>+dht_blocking_inodelk_rec(call_frame_t *frame, int i)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        struct gf_flock  flock = {0,};</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        flock.l_type = local-&gt;lock[0].layout.my_layout.locks[i]-&gt;type;</div><div class='add'>+    flock.l_type = local-&gt;lock[0].layout.my_layout.locks[i]-&gt;type;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_blocking_inodelk_cbk,</div><div class='del'>-                           (void *) (long) i,</div><div class='del'>-                           local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl,</div><div class='del'>-                           local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl-&gt;fops-&gt;inodelk,</div><div class='del'>-                           local-&gt;lock[0].layout.my_layout.locks[i]-&gt;domain,</div><div class='del'>-                           &amp;local-&gt;lock[0].layout.my_layout.locks[i]-&gt;loc,</div><div class='del'>-                           F_SETLKW,</div><div class='del'>-                           &amp;flock, NULL);</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, dht_blocking_inodelk_cbk, (void *)(long)i,</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl,</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks[i]-&gt;xl-&gt;fops-&gt;inodelk,</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks[i]-&gt;domain,</div><div class='add'>+        &amp;local-&gt;lock[0].layout.my_layout.locks[i]-&gt;loc, F_SETLKW, &amp;flock, NULL);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_blocking_inodelk (call_frame_t *frame, dht_lock_t **lk_array,</div><div class='del'>-                      int lk_count, fop_inodelk_cbk_t inodelk_cbk)</div><div class='add'>+dht_blocking_inodelk(call_frame_t *frame, dht_lock_t **lk_array, int lk_count,</div><div class='add'>+                     fop_inodelk_cbk_t inodelk_cbk)</div><div class='ctx'> {</div><div class='del'>-        int           ret                       = -1;</div><div class='del'>-        call_frame_t *lock_frame                = NULL;</div><div class='del'>-        dht_local_t  *local                     = NULL;</div><div class='del'>-        dht_local_t  *tmp_local                 = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE]    = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, lk_array, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, inodelk_cbk, out);</div><div class='del'>-</div><div class='del'>-        tmp_local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        lock_frame = dht_lock_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                gf_uuid_unparse (tmp_local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg ("dht", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_LOCK_FRAME_FAILED,</div><div class='del'>-                        "memory allocation failed for lock_frame. gfid:%s"</div><div class='del'>-                        " path:%s", gfid, tmp_local-&gt;loc.path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_local_inodelk_init (lock_frame, lk_array, lk_count,</div><div class='del'>-                                      inodelk_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_uuid_unparse (tmp_local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg ("dht", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_LOCAL_LOCK_INIT_FAILED,</div><div class='del'>-                        "dht_local_lock_init failed, gfid: %s path:%s", gfid,</div><div class='del'>-                        tmp_local-&gt;loc.path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dht_set_lkowner (lk_array, lk_count, &amp;lock_frame-&gt;root-&gt;lk_owner);</div><div class='del'>-</div><div class='del'>-        local = lock_frame-&gt;local;</div><div class='del'>-        local-&gt;main_frame = frame;</div><div class='del'>-</div><div class='del'>-        dht_blocking_inodelk_rec (lock_frame, 0);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *tmp_local = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, lk_array, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, inodelk_cbk, out);</div><div class='add'>+</div><div class='add'>+    tmp_local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    lock_frame = dht_lock_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        gf_uuid_unparse(tmp_local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg("dht", GF_LOG_ERROR, ENOMEM, DHT_MSG_LOCK_FRAME_FAILED,</div><div class='add'>+               "memory allocation failed for lock_frame. gfid:%s"</div><div class='add'>+               " path:%s",</div><div class='add'>+               gfid, tmp_local-&gt;loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_local_inodelk_init(lock_frame, lk_array, lk_count, inodelk_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_uuid_unparse(tmp_local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg("dht", GF_LOG_ERROR, ENOMEM, DHT_MSG_LOCAL_LOCK_INIT_FAILED,</div><div class='add'>+               "dht_local_lock_init failed, gfid: %s path:%s", gfid,</div><div class='add'>+               tmp_local-&gt;loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_set_lkowner(lk_array, lk_count, &amp;lock_frame-&gt;root-&gt;lk_owner);</div><div class='add'>+</div><div class='add'>+    local = lock_frame-&gt;local;</div><div class='add'>+    local-&gt;main_frame = frame;</div><div class='add'>+</div><div class='add'>+    dht_blocking_inodelk_rec(lock_frame, 0);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        if (lock_frame)</div><div class='del'>-                dht_lock_stack_destroy (lock_frame, DHT_INODELK);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        dht_lock_stack_destroy(lock_frame, DHT_INODELK);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_unlock_namespace (call_frame_t *frame, dht_dir_transaction_t *lock)</div><div class='add'>+dht_unlock_namespace(call_frame_t *frame, dht_dir_transaction_t *lock)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, lock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, lock, out);</div><div class='ctx'> </div><div class='del'>-        dht_unlock_entrylk_wrapper (frame, &amp;lock-&gt;ns.directory_ns);</div><div class='del'>-        dht_unlock_inodelk_wrapper (frame, &amp;lock-&gt;ns.parent_layout);</div><div class='add'>+    dht_unlock_entrylk_wrapper(frame, &amp;lock-&gt;ns.directory_ns);</div><div class='add'>+    dht_unlock_inodelk_wrapper(frame, &amp;lock-&gt;ns.parent_layout);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-dht_protect_namespace_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_protect_namespace_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (op_ret != 0)</div><div class='del'>-                dht_unlock_inodelk_wrapper (frame,</div><div class='del'>-                                            &amp;local-&gt;current-&gt;ns.parent_layout);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (op_ret != 0)</div><div class='add'>+        dht_unlock_inodelk_wrapper(frame, &amp;local-&gt;current-&gt;ns.parent_layout);</div><div class='ctx'> </div><div class='del'>-        local-&gt;current-&gt;ns.ns_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                                   xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    local-&gt;current-&gt;ns.ns_cbk(frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_blocking_entrylk_after_inodelk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                    xlator_t *this, int32_t op_ret,</div><div class='del'>-                                    int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_blocking_entrylk_after_inodelk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                   xlator_t *this, int32_t op_ret,</div><div class='add'>+                                   int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t           *local                   = NULL;</div><div class='del'>-        int                    ret                     = -1;</div><div class='del'>-        loc_t                 *loc                     = NULL;</div><div class='del'>-        dht_lock_t           **lk_array                = NULL;</div><div class='del'>-        char                   pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int                    count                   = 0;</div><div class='del'>-        dht_elock_wrap_t      *entrylk                 = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        entrylk = &amp;local-&gt;current-&gt;ns.directory_ns;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc = &amp;entrylk-&gt;locks[0]-&gt;loc;</div><div class='del'>-        gf_uuid_unparse (loc-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        lk_array = entrylk-&gt;locks;</div><div class='del'>-        count = entrylk-&gt;lk_count;</div><div class='del'>-</div><div class='del'>-        ret = dht_blocking_entrylk (frame, lk_array, count,</div><div class='del'>-                                    dht_protect_namespace_cbk);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_ENTRYLK_ERROR,</div><div class='del'>-                        "%s (%s/%s): "</div><div class='del'>-                        "dht_blocking_entrylk failed after taking inodelk",</div><div class='del'>-                        gf_fop_list[local-&gt;fop], pgfid,</div><div class='del'>-                        entrylk-&gt;locks[0]-&gt;basename);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int count = 0;</div><div class='add'>+    dht_elock_wrap_t *entrylk = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    entrylk = &amp;local-&gt;current-&gt;ns.directory_ns;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc = &amp;entrylk-&gt;locks[0]-&gt;loc;</div><div class='add'>+    gf_uuid_unparse(loc-&gt;gfid, pgfid);</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    lk_array = entrylk-&gt;locks;</div><div class='add'>+    count = entrylk-&gt;lk_count;</div><div class='add'>+</div><div class='add'>+    ret = dht_blocking_entrylk(frame, lk_array, count,</div><div class='add'>+                               dht_protect_namespace_cbk);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_ENTRYLK_ERROR,</div><div class='add'>+               "%s (%s/%s): "</div><div class='add'>+               "dht_blocking_entrylk failed after taking inodelk",</div><div class='add'>+               gf_fop_list[local-&gt;fop], pgfid, entrylk-&gt;locks[0]-&gt;basename);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (lk_array != NULL) {</div><div class='del'>-                dht_lock_array_free (lk_array, count);</div><div class='del'>-                GF_FREE (lk_array);</div><div class='del'>-                entrylk-&gt;locks = NULL;</div><div class='del'>-                entrylk-&gt;lk_count = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Unlock inodelk. No harm calling unlock twice */</div><div class='del'>-        dht_unlock_inodelk_wrapper (frame, &amp;local-&gt;current-&gt;ns.parent_layout);</div><div class='del'>-        /* Call ns_cbk. It will take care of unwinding */</div><div class='del'>-        local-&gt;current-&gt;ns.ns_cbk (frame, NULL, this, local-&gt;op_ret,</div><div class='del'>-                                   local-&gt;op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    if (lk_array != NULL) {</div><div class='add'>+        dht_lock_array_free(lk_array, count);</div><div class='add'>+        GF_FREE(lk_array);</div><div class='add'>+        entrylk-&gt;locks = NULL;</div><div class='add'>+        entrylk-&gt;lk_count = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Unlock inodelk. No harm calling unlock twice */</div><div class='add'>+    dht_unlock_inodelk_wrapper(frame, &amp;local-&gt;current-&gt;ns.parent_layout);</div><div class='add'>+    /* Call ns_cbk. It will take care of unwinding */</div><div class='add'>+    local-&gt;current-&gt;ns.ns_cbk(frame, NULL, this, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                              NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Given the loc and the subvol, this routine takes the inodelk on</div><div class='hunk'>@@ -1265,137 +1278,131 @@ err:</div><div class='ctx'>  * and then entrylk serially.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dht_protect_namespace (call_frame_t *frame, loc_t *loc,</div><div class='del'>-                       xlator_t *subvol,</div><div class='del'>-                       struct dht_namespace *ns,</div><div class='del'>-                       fop_entrylk_cbk_t ns_cbk)</div><div class='add'>+dht_protect_namespace(call_frame_t *frame, loc_t *loc, xlator_t *subvol,</div><div class='add'>+                      struct dht_namespace *ns, fop_entrylk_cbk_t ns_cbk)</div><div class='ctx'> {</div><div class='del'>-        dht_ilock_wrap_t  *inodelk                 = NULL;</div><div class='del'>-        dht_elock_wrap_t  *entrylk                 = NULL;</div><div class='del'>-        dht_lock_t       **lk_array                = NULL;</div><div class='del'>-        dht_local_t       *local                   = NULL;</div><div class='del'>-        xlator_t          *this                    = NULL;</div><div class='del'>-        loc_t              parent                  = {0,};</div><div class='del'>-        int                ret                     = -1;</div><div class='del'>-        char               pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int32_t            op_errno                = 0;</div><div class='del'>-        int                count                   = 1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht-locks", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, loc-&gt;parent, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, subvol, out);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        inodelk = &amp;ns-&gt;parent_layout;</div><div class='del'>-        entrylk = &amp;ns-&gt;directory_ns;</div><div class='del'>-</div><div class='del'>-        /* Initialize entrylk_cbk and parent loc */</div><div class='del'>-        ns-&gt;ns_cbk = ns_cbk;</div><div class='del'>-</div><div class='del'>-        ret = dht_build_parent_loc (this, &amp;parent, loc, &amp;op_errno);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        DHT_MSG_LOC_FAILED, "gfid:%s (name:%s) (path: %s): "</div><div class='del'>-                        "parent loc build failed", loc-&gt;gfid, loc-&gt;name,</div><div class='del'>-                         loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_uuid_unparse (parent.gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        /* Alloc inodelk */</div><div class='del'>-        inodelk-&gt;locks = GF_CALLOC (count, sizeof (*lk_array),</div><div class='del'>-                                    gf_common_mt_pointer);</div><div class='del'>-        if (inodelk-&gt;locks == NULL) {</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "calloc failure",</div><div class='del'>-                        gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        inodelk-&gt;locks[0] = dht_lock_new (this, subvol, &amp;parent, F_RDLCK,</div><div class='del'>-                                          DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='del'>-                                          FAIL_ON_ANY_ERROR);</div><div class='del'>-        if (inodelk-&gt;locks[0] == NULL) {</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "inodelk: lock allocation failed",</div><div class='del'>-                        gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        inodelk-&gt;lk_count = count;</div><div class='del'>-</div><div class='del'>-        /* Allock entrylk */</div><div class='del'>-        entrylk-&gt;locks = GF_CALLOC (count, sizeof (*lk_array),</div><div class='del'>-                                    gf_common_mt_pointer);</div><div class='del'>-        if (entrylk-&gt;locks == NULL) {</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "entrylk: calloc failure",</div><div class='del'>-                        gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        entrylk-&gt;locks[0] = dht_lock_new (this, subvol, &amp;parent, F_WRLCK,</div><div class='del'>-                                          DHT_ENTRY_SYNC_DOMAIN, loc-&gt;name,</div><div class='del'>-                                          FAIL_ON_ANY_ERROR);</div><div class='del'>-        if (entrylk-&gt;locks[0] == NULL) {</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "entrylk: lock allocation failed",</div><div class='del'>-                        gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        entrylk-&gt;lk_count = count;</div><div class='del'>-</div><div class='del'>-        /* Take read inodelk on parent. If it is successful, take write entrylk</div><div class='del'>-         * on name in cbk.</div><div class='del'>-         */</div><div class='del'>-        lk_array = inodelk-&gt;locks;</div><div class='del'>-        ret = dht_blocking_inodelk (frame, lk_array, count,</div><div class='del'>-                                    dht_blocking_entrylk_after_inodelk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_INODELK_ERROR,</div><div class='del'>-                        "%s (%s/%s) (path: %s): "</div><div class='del'>-                        "dht_blocking_inodelk failed",</div><div class='del'>-                        gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;parent);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_ilock_wrap_t *inodelk = NULL;</div><div class='add'>+    dht_elock_wrap_t *entrylk = NULL;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t parent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int count = 1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht-locks", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, loc-&gt;parent, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, subvol, out);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    inodelk = &amp;ns-&gt;parent_layout;</div><div class='add'>+    entrylk = &amp;ns-&gt;directory_ns;</div><div class='add'>+</div><div class='add'>+    /* Initialize entrylk_cbk and parent loc */</div><div class='add'>+    ns-&gt;ns_cbk = ns_cbk;</div><div class='add'>+</div><div class='add'>+    ret = dht_build_parent_loc(this, &amp;parent, loc, &amp;op_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, DHT_MSG_LOC_FAILED,</div><div class='add'>+               "gfid:%s (name:%s) (path: %s): "</div><div class='add'>+               "parent loc build failed",</div><div class='add'>+               loc-&gt;gfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_unparse(parent.gfid, pgfid);</div><div class='add'>+</div><div class='add'>+    /* Alloc inodelk */</div><div class='add'>+    inodelk-&gt;locks = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_pointer);</div><div class='add'>+    if (inodelk-&gt;locks == NULL) {</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "calloc failure",</div><div class='add'>+               gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inodelk-&gt;locks[0] = dht_lock_new(this, subvol, &amp;parent, F_RDLCK,</div><div class='add'>+                                     DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='add'>+                                     FAIL_ON_ANY_ERROR);</div><div class='add'>+    if (inodelk-&gt;locks[0] == NULL) {</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "inodelk: lock allocation failed",</div><div class='add'>+               gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    inodelk-&gt;lk_count = count;</div><div class='add'>+</div><div class='add'>+    /* Allock entrylk */</div><div class='add'>+    entrylk-&gt;locks = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_pointer);</div><div class='add'>+    if (entrylk-&gt;locks == NULL) {</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "entrylk: calloc failure",</div><div class='add'>+               gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    entrylk-&gt;locks[0] = dht_lock_new(this, subvol, &amp;parent, F_WRLCK,</div><div class='add'>+                                     DHT_ENTRY_SYNC_DOMAIN, loc-&gt;name,</div><div class='add'>+                                     FAIL_ON_ANY_ERROR);</div><div class='add'>+    if (entrylk-&gt;locks[0] == NULL) {</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "entrylk: lock allocation failed",</div><div class='add'>+               gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    entrylk-&gt;lk_count = count;</div><div class='add'>+</div><div class='add'>+    /* Take read inodelk on parent. If it is successful, take write entrylk</div><div class='add'>+     * on name in cbk.</div><div class='add'>+     */</div><div class='add'>+    lk_array = inodelk-&gt;locks;</div><div class='add'>+    ret = dht_blocking_inodelk(frame, lk_array, count,</div><div class='add'>+                               dht_blocking_entrylk_after_inodelk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_INODELK_ERROR,</div><div class='add'>+               "%s (%s/%s) (path: %s): "</div><div class='add'>+               "dht_blocking_inodelk failed",</div><div class='add'>+               gf_fop_list[local-&gt;fop], pgfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;parent);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (entrylk-&gt;locks != NULL) {</div><div class='del'>-                dht_lock_array_free (entrylk-&gt;locks, count);</div><div class='del'>-                GF_FREE (entrylk-&gt;locks);</div><div class='del'>-                entrylk-&gt;locks = NULL;</div><div class='del'>-                entrylk-&gt;lk_count = 0;</div><div class='del'>-        }</div><div class='add'>+    if (entrylk-&gt;locks != NULL) {</div><div class='add'>+        dht_lock_array_free(entrylk-&gt;locks, count);</div><div class='add'>+        GF_FREE(entrylk-&gt;locks);</div><div class='add'>+        entrylk-&gt;locks = NULL;</div><div class='add'>+        entrylk-&gt;lk_count = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (inodelk-&gt;locks != NULL) {</div><div class='del'>-                dht_lock_array_free (inodelk-&gt;locks, count);</div><div class='del'>-                GF_FREE (inodelk-&gt;locks);</div><div class='del'>-                inodelk-&gt;locks = NULL;</div><div class='del'>-                inodelk-&gt;lk_count = 0;</div><div class='del'>-        }</div><div class='add'>+    if (inodelk-&gt;locks != NULL) {</div><div class='add'>+        dht_lock_array_free(inodelk-&gt;locks, count);</div><div class='add'>+        GF_FREE(inodelk-&gt;locks);</div><div class='add'>+        inodelk-&gt;locks = NULL;</div><div class='add'>+        inodelk-&gt;lk_count = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;parent);</div><div class='add'>+    loc_wipe(&amp;parent);</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c<br/>index 9983429acec..7a2539dc5f5 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-rebalance.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-rebalance.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-rebalance.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-rebalance.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "tier.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> #include "xlator.h"</div><div class='hunk'>@@ -18,244 +17,230 @@</div><div class='ctx'> #include &lt;signal.h&gt;</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='del'>-#define GF_DISK_SECTOR_SIZE              512</div><div class='del'>-#define DHT_REBALANCE_PID               4242 /* Change it if required */</div><div class='del'>-#define DHT_REBALANCE_BLKSIZE           (1024 * 1024)  /* 1 MB */</div><div class='del'>-#define MAX_MIGRATE_QUEUE_COUNT          500</div><div class='del'>-#define MIN_MIGRATE_QUEUE_COUNT          200</div><div class='del'>-#define MAX_REBAL_TYPE_SIZE               16</div><div class='del'>-#define FILE_CNT_INTERVAL                600 /* 10 mins */</div><div class='del'>-#define ESTIMATE_START_INTERVAL          600 /* 10 mins */</div><div class='del'>-#define HARDLINK_MIG_INPROGRESS          -2</div><div class='del'>-#define SKIP_MIGRATION_FD_POSITIVE       -3</div><div class='add'>+#define GF_DISK_SECTOR_SIZE 512</div><div class='add'>+#define DHT_REBALANCE_PID 4242              /* Change it if required */</div><div class='add'>+#define DHT_REBALANCE_BLKSIZE (1024 * 1024) /* 1 MB */</div><div class='add'>+#define MAX_MIGRATE_QUEUE_COUNT 500</div><div class='add'>+#define MIN_MIGRATE_QUEUE_COUNT 200</div><div class='add'>+#define MAX_REBAL_TYPE_SIZE 16</div><div class='add'>+#define FILE_CNT_INTERVAL 600       /* 10 mins */</div><div class='add'>+#define ESTIMATE_START_INTERVAL 600 /* 10 mins */</div><div class='add'>+#define HARDLINK_MIG_INPROGRESS -2</div><div class='add'>+#define SKIP_MIGRATION_FD_POSITIVE -3</div><div class='ctx'> #ifndef MAX</div><div class='del'>-#define MAX(a, b) (((a) &gt; (b))?(a):(b))</div><div class='add'>+#define MAX(a, b) (((a) &gt; (b)) ? (a) : (b))</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-#define GF_CRAWL_INDEX_MOVE(idx, sv_cnt)  {     \</div><div class='del'>-                idx++;                          \</div><div class='del'>-                idx %= sv_cnt;                  \</div><div class='del'>-        }</div><div class='add'>+#define GF_CRAWL_INDEX_MOVE(idx, sv_cnt)                                       \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        idx++;                                                                 \</div><div class='add'>+        idx %= sv_cnt;                                                         \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> uint64_t g_totalfiles = 0;</div><div class='ctx'> uint64_t g_totalsize = 0;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-gf_defrag_free_dir_dfmeta (struct dir_dfmeta *meta, int local_subvols_cnt)</div><div class='add'>+gf_defrag_free_dir_dfmeta(struct dir_dfmeta *meta, int local_subvols_cnt)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (meta) {</div><div class='del'>-                for (i = 0; i &lt; local_subvols_cnt; i++) {</div><div class='del'>-                        gf_dirent_free (&amp;meta-&gt;equeue[i]);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                GF_FREE (meta-&gt;equeue);</div><div class='del'>-                GF_FREE (meta-&gt;head);</div><div class='del'>-                GF_FREE (meta-&gt;iterator);</div><div class='del'>-                GF_FREE (meta-&gt;offset_var);</div><div class='del'>-                GF_FREE (meta-&gt;fetch_entries);</div><div class='del'>-                GF_FREE (meta);</div><div class='add'>+    if (meta) {</div><div class='add'>+        for (i = 0; i &lt; local_subvols_cnt; i++) {</div><div class='add'>+            gf_dirent_free(&amp;meta-&gt;equeue[i]);</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        GF_FREE(meta-&gt;equeue);</div><div class='add'>+        GF_FREE(meta-&gt;head);</div><div class='add'>+        GF_FREE(meta-&gt;iterator);</div><div class='add'>+        GF_FREE(meta-&gt;offset_var);</div><div class='add'>+        GF_FREE(meta-&gt;fetch_entries);</div><div class='add'>+        GF_FREE(meta);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_defrag_free_container (struct dht_container *container)</div><div class='add'>+gf_defrag_free_container(struct dht_container *container)</div><div class='ctx'> {</div><div class='del'>-        if (container) {</div><div class='del'>-                gf_dirent_entry_free (container-&gt;df_entry);</div><div class='add'>+    if (container) {</div><div class='add'>+        gf_dirent_entry_free(container-&gt;df_entry);</div><div class='ctx'> </div><div class='del'>-                if (container-&gt;parent_loc) {</div><div class='del'>-                        loc_wipe (container-&gt;parent_loc);</div><div class='del'>-                }</div><div class='add'>+        if (container-&gt;parent_loc) {</div><div class='add'>+            loc_wipe(container-&gt;parent_loc);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (container-&gt;parent_loc);</div><div class='add'>+        GF_FREE(container-&gt;parent_loc);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (container);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(container);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_set_global_defrag_error (gf_defrag_info_t *defrag, int ret)</div><div class='add'>+dht_set_global_defrag_error(gf_defrag_info_t *defrag, int ret)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                defrag-&gt;global_error = ret;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-        return;</div><div class='add'>+    LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        defrag-&gt;global_error = ret;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;defrag-&gt;lock);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-dht_is_tier_command (int cmd) {</div><div class='del'>-</div><div class='del'>-        gf_boolean_t is_tier = _gf_false;</div><div class='add'>+dht_is_tier_command(int cmd)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t is_tier = _gf_false;</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case GF_DEFRAG_CMD_START_TIER:</div><div class='ctx'>         case GF_DEFRAG_CMD_STATUS_TIER:</div><div class='ctx'>         case GF_DEFRAG_CMD_START_DETACH_TIER:</div><div class='ctx'>         case GF_DEFRAG_CMD_STOP_DETACH_TIER:</div><div class='ctx'>         case GF_DEFRAG_CMD_PAUSE_TIER:</div><div class='ctx'>         case GF_DEFRAG_CMD_RESUME_TIER:</div><div class='del'>-                is_tier = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            is_tier = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return is_tier;</div><div class='del'>-</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return is_tier;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-dht_send_rebalance_event (xlator_t *this, int cmd, gf_defrag_status_t status)</div><div class='add'>+dht_send_rebalance_event(xlator_t *this, int cmd, gf_defrag_status_t status)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *volname = NULL;</div><div class='del'>-        char *tmpstr  = NULL;</div><div class='del'>-        char *ptr = NULL;</div><div class='del'>-        char *suffix = "-dht";</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag = NULL;</div><div class='del'>-        int len = 0;</div><div class='del'>-</div><div class='del'>-        eventtypes_t event = EVENT_LAST;</div><div class='del'>-</div><div class='del'>-        switch (status) {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *volname = NULL;</div><div class='add'>+    char *tmpstr = NULL;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *suffix = "-dht";</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+</div><div class='add'>+    eventtypes_t event = EVENT_LAST;</div><div class='add'>+</div><div class='add'>+    switch (status) {</div><div class='ctx'>         case GF_DEFRAG_STATUS_COMPLETE:</div><div class='del'>-                event = EVENT_VOLUME_REBALANCE_COMPLETE;</div><div class='del'>-                break;</div><div class='add'>+            event = EVENT_VOLUME_REBALANCE_COMPLETE;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_STATUS_FAILED:</div><div class='del'>-                event = EVENT_VOLUME_REBALANCE_FAILED;</div><div class='del'>-                break;</div><div class='add'>+            event = EVENT_VOLUME_REBALANCE_FAILED;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_STATUS_STOPPED:</div><div class='del'>-                event = EVENT_VOLUME_REBALANCE_STOP;</div><div class='del'>-                break;</div><div class='add'>+            event = EVENT_VOLUME_REBALANCE_STOP;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dht_is_tier_command (cmd)) {</div><div class='del'>-                /* We should have the tier volume name*/</div><div class='del'>-                conf = this-&gt;private;</div><div class='del'>-                defrag = conf-&gt;defrag;</div><div class='del'>-                volname = defrag-&gt;tier_conf.volname;</div><div class='del'>-        } else {</div><div class='del'>-                /* DHT volume */</div><div class='del'>-                len = strlen (this-&gt;name) - strlen (suffix);</div><div class='del'>-                tmpstr = gf_strdup (this-&gt;name);</div><div class='del'>-                if (tmpstr) {</div><div class='del'>-                        ptr = tmpstr + len;</div><div class='del'>-                        if (!strcmp (ptr, suffix)) {</div><div class='del'>-                                tmpstr[len] = '\0';</div><div class='del'>-                                volname = tmpstr;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!volname) {</div><div class='del'>-                /* Better than nothing */</div><div class='del'>-                volname = this-&gt;name;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (event != EVENT_LAST) {</div><div class='del'>-                gf_event (event, "volume=%s", volname);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (tmpstr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (dht_is_tier_command(cmd)) {</div><div class='add'>+        /* We should have the tier volume name*/</div><div class='add'>+        conf = this-&gt;private;</div><div class='add'>+        defrag = conf-&gt;defrag;</div><div class='add'>+        volname = defrag-&gt;tier_conf.volname;</div><div class='add'>+    } else {</div><div class='add'>+        /* DHT volume */</div><div class='add'>+        len = strlen(this-&gt;name) - strlen(suffix);</div><div class='add'>+        tmpstr = gf_strdup(this-&gt;name);</div><div class='add'>+        if (tmpstr) {</div><div class='add'>+            ptr = tmpstr + len;</div><div class='add'>+            if (!strcmp(ptr, suffix)) {</div><div class='add'>+                tmpstr[len] = '\0';</div><div class='add'>+                volname = tmpstr;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!volname) {</div><div class='add'>+        /* Better than nothing */</div><div class='add'>+        volname = this-&gt;name;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (event != EVENT_LAST) {</div><div class='add'>+        gf_event(event, "volume=%s", volname);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(tmpstr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-dht_strip_out_acls (dict_t *dict)</div><div class='add'>+dht_strip_out_acls(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        if (dict) {</div><div class='del'>-                dict_del (dict, "trusted.SGI_ACL_FILE");</div><div class='del'>-                dict_del (dict, POSIX_ACL_ACCESS_XATTR);</div><div class='del'>-        }</div><div class='add'>+    if (dict) {</div><div class='add'>+        dict_del(dict, "trusted.SGI_ACL_FILE");</div><div class='add'>+        dict_del(dict, POSIX_ACL_ACCESS_XATTR);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-dht_write_with_holes (xlator_t *to, fd_t *fd, struct iovec *vec, int count,</div><div class='del'>-                      int32_t size, off_t offset, struct iobref *iobref,</div><div class='del'>-                      int *fop_errno)</div><div class='add'>+dht_write_with_holes(xlator_t *to, fd_t *fd, struct iovec *vec, int count,</div><div class='add'>+                     int32_t size, off_t offset, struct iobref *iobref,</div><div class='add'>+                     int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int i            = 0;</div><div class='del'>-        int ret          = -1;</div><div class='del'>-        int start_idx    = 0;</div><div class='del'>-        int tmp_offset   = 0;</div><div class='del'>-        int write_needed = 0;</div><div class='del'>-        int buf_len      = 0;</div><div class='del'>-        int size_pending = 0;</div><div class='del'>-        char *buf        = NULL;</div><div class='del'>-</div><div class='del'>-        /* loop through each vector */</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                buf = vec[i].iov_base;</div><div class='del'>-                buf_len = vec[i].iov_len;</div><div class='del'>-</div><div class='del'>-                for (start_idx = 0; (start_idx + GF_DISK_SECTOR_SIZE) &lt;= buf_len;</div><div class='del'>-                     start_idx += GF_DISK_SECTOR_SIZE) {</div><div class='del'>-</div><div class='del'>-                        if (mem_0filled (buf + start_idx, GF_DISK_SECTOR_SIZE) != 0) {</div><div class='del'>-                                write_needed = 1;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (write_needed) {</div><div class='del'>-                                ret = syncop_write (to, fd, (buf + tmp_offset),</div><div class='del'>-                                                    (start_idx - tmp_offset),</div><div class='del'>-                                                    (offset + tmp_offset),</div><div class='del'>-                                                    iobref, 0, NULL, NULL);</div><div class='del'>-                                /* 'path' will be logged in calling function */</div><div class='del'>-                                if (ret &lt; 0) {</div><div class='del'>-                                        gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                "failed to write (%s)",</div><div class='del'>-                                                strerror (-ret));</div><div class='del'>-                                        *fop_errno = -ret;</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                write_needed = 0;</div><div class='del'>-                        }</div><div class='del'>-                        tmp_offset = start_idx + GF_DISK_SECTOR_SIZE;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int start_idx = 0;</div><div class='add'>+    int tmp_offset = 0;</div><div class='add'>+    int write_needed = 0;</div><div class='add'>+    int buf_len = 0;</div><div class='add'>+    int size_pending = 0;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+</div><div class='add'>+    /* loop through each vector */</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        buf = vec[i].iov_base;</div><div class='add'>+        buf_len = vec[i].iov_len;</div><div class='add'>+</div><div class='add'>+        for (start_idx = 0; (start_idx + GF_DISK_SECTOR_SIZE) &lt;= buf_len;</div><div class='add'>+             start_idx += GF_DISK_SECTOR_SIZE) {</div><div class='add'>+            if (mem_0filled(buf + start_idx, GF_DISK_SECTOR_SIZE) != 0) {</div><div class='add'>+                write_needed = 1;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (write_needed) {</div><div class='add'>+                ret = syncop_write(</div><div class='add'>+                    to, fd, (buf + tmp_offset), (start_idx - tmp_offset),</div><div class='add'>+                    (offset + tmp_offset), iobref, 0, NULL, NULL);</div><div class='add'>+                /* 'path' will be logged in calling function */</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to write (%s)",</div><div class='add'>+                           strerror(-ret));</div><div class='add'>+                    *fop_errno = -ret;</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if ((start_idx &lt; buf_len) || write_needed) {</div><div class='del'>-                        /* This means, last chunk is not yet written.. write it */</div><div class='del'>-                        ret = syncop_write (to, fd, (buf + tmp_offset),</div><div class='del'>-                                            (buf_len - tmp_offset),</div><div class='del'>-                                            (offset + tmp_offset), iobref, 0,</div><div class='del'>-                                            NULL, NULL);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                /* 'path' will be logged in calling function */</div><div class='del'>-                                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "failed to write (%s)",</div><div class='del'>-                                        strerror (-ret));</div><div class='del'>-                                *fop_errno = -ret;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                write_needed = 0;</div><div class='add'>+            }</div><div class='add'>+            tmp_offset = start_idx + GF_DISK_SECTOR_SIZE;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                size_pending = (size - buf_len);</div><div class='del'>-                if (!size_pending)</div><div class='del'>-                        break;</div><div class='add'>+        if ((start_idx &lt; buf_len) || write_needed) {</div><div class='add'>+            /* This means, last chunk is not yet written.. write it */</div><div class='add'>+            ret = syncop_write(to, fd, (buf + tmp_offset),</div><div class='add'>+                               (buf_len - tmp_offset), (offset + tmp_offset),</div><div class='add'>+                               iobref, 0, NULL, NULL);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                /* 'path' will be logged in calling function */</div><div class='add'>+                gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to write (%s)",</div><div class='add'>+                       strerror(-ret));</div><div class='add'>+                *fop_errno = -ret;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = size;</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='add'>+        size_pending = (size - buf_len);</div><div class='add'>+        if (!size_pending)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = size;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -294,323 +279,318 @@ be converted to "0" in dht_migrate_file.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-gf_defrag_handle_hardlink (xlator_t *this, loc_t *loc, int *fop_errno)</div><div class='add'>+gf_defrag_handle_hardlink(xlator_t *this, loc_t *loc, int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret             = -1;</div><div class='del'>-        xlator_t               *cached_subvol   = NULL;</div><div class='del'>-        xlator_t               *hashed_subvol   = NULL;</div><div class='del'>-        xlator_t               *linkto_subvol   = NULL;</div><div class='del'>-        data_t                 *data            = NULL;</div><div class='del'>-        struct iatt             iatt            = {0,};</div><div class='del'>-        int32_t                 op_errno        = 0;</div><div class='del'>-        dht_conf_t             *conf            = NULL;</div><div class='del'>-        gf_loglevel_t          loglevel         = 0;</div><div class='del'>-        dict_t                 *link_xattr      = NULL;</div><div class='del'>-        dict_t                 *dict            = NULL;</div><div class='del'>-        dict_t                 *xattr_rsp       = NULL;</div><div class='del'>-        struct iatt             stbuf                   = {0,};</div><div class='del'>-</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    xlator_t *linkto_subvol = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_loglevel_t loglevel = 0;</div><div class='add'>+    dict_t *link_xattr = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *xattr_rsp = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    *fop_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("defrag", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("defrag", loc-&gt;name, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("defrag", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("defrag", this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_is_null(loc-&gt;pargfid)) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed :"</div><div class='add'>+               "loc-&gt;pargfid is NULL for %s",</div><div class='add'>+               loc-&gt;path);</div><div class='ctx'>         *fop_errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_is_null(loc-&gt;gfid)) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed :"</div><div class='add'>+               "loc-&gt;gfid is NULL for %s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        *fop_errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("defrag", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("defrag", loc-&gt;name, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("defrag", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("defrag", this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_is_null (loc-&gt;pargfid)) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed :"</div><div class='del'>-                        "loc-&gt;pargfid is NULL for %s", loc-&gt;path);</div><div class='del'>-                *fop_errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_is_null (loc-&gt;gfid)) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed :"</div><div class='del'>-                        "loc-&gt;gfid is NULL for %s", loc-&gt;path);</div><div class='del'>-                *fop_errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        link_xattr = dict_new ();</div><div class='del'>-        if (!link_xattr) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-          Parallel migration can lead to migration of the hard link multiple</div><div class='del'>-          times which can lead to data loss. Hence, adding a fresh lookup to</div><div class='del'>-          decide whether migration is required or not.</div><div class='del'>-</div><div class='del'>-          Elaborating the scenario for let say 10 hardlinks [link{1..10}]:</div><div class='del'>-              Let say the first hard link "link1"  does the setxattr of the</div><div class='del'>-          new hashed subvolume info on the cached file. As there are multiple</div><div class='del'>-          threads working, we might have already all the links created on the</div><div class='del'>-          new hashed by the time we reach hardlink let say link5. Now the</div><div class='del'>-          number of links on hashed is equal to that of cached. Hence, file</div><div class='del'>-          migration will happen for link6.</div><div class='del'>-</div><div class='del'>-                 Cached                                 Hashed</div><div class='del'>-          --------T link6                        rwxrwxrwx   link6</div><div class='del'>-</div><div class='del'>-          Now post above state all the link file on the cached will be zero</div><div class='del'>-          byte linkto files. Hence, if we still do migration for the following</div><div class='del'>-          files link{7..10}, we will end up migrating 0 data leading to data</div><div class='del'>-          loss.</div><div class='del'>-                Hence, a lookup can make sure whether we need to migrate the</div><div class='del'>-          file or not.</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "could not allocate memory for dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    link_xattr = dict_new();</div><div class='add'>+    if (!link_xattr) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+      Parallel migration can lead to migration of the hard link multiple</div><div class='add'>+      times which can lead to data loss. Hence, adding a fresh lookup to</div><div class='add'>+      decide whether migration is required or not.</div><div class='add'>+</div><div class='add'>+      Elaborating the scenario for let say 10 hardlinks [link{1..10}]:</div><div class='add'>+          Let say the first hard link "link1"  does the setxattr of the</div><div class='add'>+      new hashed subvolume info on the cached file. As there are multiple</div><div class='add'>+      threads working, we might have already all the links created on the</div><div class='add'>+      new hashed by the time we reach hardlink let say link5. Now the</div><div class='add'>+      number of links on hashed is equal to that of cached. Hence, file</div><div class='add'>+      migration will happen for link6.</div><div class='add'>+</div><div class='add'>+             Cached                                 Hashed</div><div class='add'>+      --------T link6                        rwxrwxrwx   link6</div><div class='add'>+</div><div class='add'>+      Now post above state all the link file on the cached will be zero</div><div class='add'>+      byte linkto files. Hence, if we still do migration for the following</div><div class='add'>+      files link{7..10}, we will end up migrating 0 data leading to data</div><div class='add'>+      loss.</div><div class='add'>+            Hence, a lookup can make sure whether we need to migrate the</div><div class='add'>+      file or not.</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "could not allocate memory for dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: failed to set 'linkto' key in dict",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(this, loc, &amp;stbuf, NULL, dict, &amp;xattr_rsp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /*Ignore ENOENT and ESTALE as file might have been</div><div class='add'>+          migrated already*/</div><div class='add'>+        if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+            ret = -2;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:%s lookup failed with ret = %d", loc-&gt;path,</div><div class='add'>+               ret);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cached_subvol = dht_subvol_get_cached(this, loc-&gt;inode);</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed :"</div><div class='add'>+               "Failed to get cached subvol"</div><div class='add'>+               " for %s on %s",</div><div class='add'>+               loc-&gt;name, this-&gt;name);</div><div class='add'>+        *fop_errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!hashed_subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed :"</div><div class='add'>+               "Failed to get hashed subvol"</div><div class='add'>+               " for %s on %s",</div><div class='add'>+               loc-&gt;name, this-&gt;name);</div><div class='add'>+        *fop_errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Hardlink migration happens only with remove-brick. So this condition will</div><div class='add'>+     * be true only when the migration has happened. In case hardlinks are</div><div class='add'>+     * migrated for rebalance case, remove this check. Having this check here</div><div class='add'>+     * avoid redundant calls below*/</div><div class='add'>+    if (hashed_subvol == cached_subvol) {</div><div class='add'>+        ret = -2;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "Attempting to migrate hardlink %s "</div><div class='add'>+           "with gfid %s from %s -&gt; %s",</div><div class='add'>+           loc-&gt;name, uuid_utoa(loc-&gt;gfid), cached_subvol-&gt;name,</div><div class='add'>+           hashed_subvol-&gt;name);</div><div class='add'>+</div><div class='add'>+    data = dict_get(xattr_rsp, conf-&gt;link_xattr_name);</div><div class='add'>+    /* set linkto on cached -&gt; hashed if not present, else link it */</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = dict_set_str(link_xattr, conf-&gt;link_xattr_name,</div><div class='add'>+                           hashed_subvol-&gt;name);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: failed to set 'linkto' key in dict", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed :"</div><div class='add'>+                   "Failed to set dictionary value:"</div><div class='add'>+                   " key = %s for %s",</div><div class='add'>+                   conf-&gt;link_xattr_name, loc-&gt;name);</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (this, loc, &amp;stbuf, NULL, dict, &amp;xattr_rsp);</div><div class='add'>+        ret = syncop_setxattr(cached_subvol, loc, link_xattr, 0, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                /*Ignore ENOENT and ESTALE as file might have been</div><div class='del'>-                  migrated already*/</div><div class='del'>-                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                        ret = -2;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:%s lookup failed with ret = %d",</div><div class='del'>-                        loc-&gt;path, ret);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cached_subvol = dht_subvol_get_cached (this, loc-&gt;inode);</div><div class='del'>-        if (!cached_subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed :"</div><div class='del'>-                        "Failed to get cached subvol"</div><div class='del'>-                        " for %s on %s", loc-&gt;name, this-&gt;name);</div><div class='del'>-                *fop_errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed :"</div><div class='add'>+                   "Linkto setxattr failed %s -&gt; %s",</div><div class='add'>+                   cached_subvol-&gt;name, loc-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!hashed_subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed :"</div><div class='del'>-                        "Failed to get hashed subvol"</div><div class='del'>-                        " for %s on %s", loc-&gt;name, this-&gt;name);</div><div class='del'>-                *fop_errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Hardlink migration happens only with remove-brick. So this condition will</div><div class='del'>-         * be true only when the migration has happened. In case hardlinks are migrated</div><div class='del'>-         * for rebalance case, remove this check. Having this check here avoid redundant</div><div class='del'>-         * calls below*/</div><div class='del'>-        if (hashed_subvol == cached_subvol) {</div><div class='del'>-                ret = -2;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "Attempting to migrate hardlink %s "</div><div class='del'>-                "with gfid %s from %s -&gt; %s", loc-&gt;name, uuid_utoa (loc-&gt;gfid),</div><div class='del'>-                cached_subvol-&gt;name, hashed_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-        data = dict_get (xattr_rsp, conf-&gt;link_xattr_name);</div><div class='del'>-        /* set linkto on cached -&gt; hashed if not present, else link it */</div><div class='del'>-        if (!data) {</div><div class='del'>-                ret = dict_set_str (link_xattr, conf-&gt;link_xattr_name,</div><div class='del'>-                                    hashed_subvol-&gt;name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed :"</div><div class='del'>-                                "Failed to set dictionary value:"</div><div class='del'>-                                " key = %s for %s",</div><div class='del'>-                                conf-&gt;link_xattr_name, loc-&gt;name);</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_setxattr (cached_subvol, loc, link_xattr, 0, NULL,</div><div class='del'>-                                       NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed :"</div><div class='del'>-                                "Linkto setxattr failed %s -&gt; %s",</div><div class='del'>-                                cached_subvol-&gt;name,</div><div class='del'>-                                loc-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "hardlink target subvol created on %s "</div><div class='add'>+                     ",cached %s, file %s",</div><div class='add'>+                     hashed_subvol-&gt;name, cached_subvol-&gt;name, loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "hardlink target subvol created on %s "</div><div class='del'>-                              ",cached %s, file %s",</div><div class='del'>-                              hashed_subvol-&gt;name, cached_subvol-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                ret = -2;</div><div class='del'>-                goto out;</div><div class='add'>+        ret = -2;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        linkto_subvol = dht_linkfile_subvol(this, NULL, NULL, xattr_rsp);</div><div class='add'>+        if (!linkto_subvol) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SUBVOL_ERROR,</div><div class='add'>+                   "Failed to get "</div><div class='add'>+                   "linkto subvol for %s",</div><div class='add'>+                   loc-&gt;name);</div><div class='ctx'>         } else {</div><div class='del'>-                linkto_subvol = dht_linkfile_subvol (this, NULL, NULL, xattr_rsp);</div><div class='del'>-                if (!linkto_subvol) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_ERROR,</div><div class='del'>-                                "Failed to get "</div><div class='del'>-                                "linkto subvol for %s", loc-&gt;name);</div><div class='del'>-                } else {</div><div class='del'>-                        hashed_subvol = linkto_subvol;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_link (hashed_subvol, loc, loc, &amp;iatt, NULL, NULL);</div><div class='del'>-                if  (ret) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-</div><div class='del'>-                        loglevel = (op_errno == EEXIST) ? GF_LOG_DEBUG : \</div><div class='del'>-                                    GF_LOG_ERROR;</div><div class='del'>-                        gf_msg (this-&gt;name, loglevel, op_errno,</div><div class='del'>-                                DHT_MSG_MIGRATE_HARDLINK_FILE_FAILED,</div><div class='del'>-                                "link of %s -&gt; %s"</div><div class='del'>-                                " failed on  subvol %s", loc-&gt;name,</div><div class='del'>-                                uuid_utoa(loc-&gt;gfid),</div><div class='del'>-                                hashed_subvol-&gt;name);</div><div class='del'>-                        if (op_errno != EEXIST) {</div><div class='del'>-                                *fop_errno = op_errno;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "syncop_link successful for"</div><div class='del'>-                                      " hardlink %s on subvol %s, cached %s", loc-&gt;path,</div><div class='del'>-                                      hashed_subvol-&gt;name, cached_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-                }</div><div class='add'>+            hashed_subvol = linkto_subvol;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (hashed_subvol, loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+        ret = syncop_link(hashed_subvol, loc, loc, &amp;iatt, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed :Failed lookup %s on %s ",</div><div class='del'>-                        loc-&gt;name, hashed_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+</div><div class='add'>+            loglevel = (op_errno == EEXIST) ? GF_LOG_DEBUG : GF_LOG_ERROR;</div><div class='add'>+            gf_msg(this-&gt;name, loglevel, op_errno,</div><div class='add'>+                   DHT_MSG_MIGRATE_HARDLINK_FILE_FAILED,</div><div class='add'>+                   "link of %s -&gt; %s"</div><div class='add'>+                   " failed on  subvol %s",</div><div class='add'>+                   loc-&gt;name, uuid_utoa(loc-&gt;gfid), hashed_subvol-&gt;name);</div><div class='add'>+            if (op_errno != EEXIST) {</div><div class='add'>+                *fop_errno = op_errno;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "syncop_link successful for"</div><div class='add'>+                         " hardlink %s on subvol %s, cached %s",</div><div class='add'>+                         loc-&gt;path, hashed_subvol-&gt;name, cached_subvol-&gt;name);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* There is a race where on the target subvol for the hardlink</div><div class='del'>-         * (note: hash subvol for the hardlink might differ from this), some</div><div class='del'>-         * other client(non-rebalance) would have created a linkto file for that</div><div class='del'>-         * hardlink as part of lookup. So let say there are 10 hardlinks, on the</div><div class='del'>-         * 5th hardlink it self the hardlinks might have migrated. Now for</div><div class='del'>-         * (6..10th) hardlinks the cached and target would be same as the file</div><div class='del'>-         * has already migrated. Hence this check is needed  */</div><div class='del'>-        if (cached_subvol == hashed_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "source %s and destination %s "</div><div class='del'>-                             "for hardlink %s are same", cached_subvol-&gt;name,</div><div class='del'>-                             hashed_subvol-&gt;name, loc-&gt;path);</div><div class='del'>-                ret = -2;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_lookup(hashed_subvol, loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed :Failed lookup %s on %s ", loc-&gt;name,</div><div class='add'>+               hashed_subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (iatt.ia_nlink == stbuf.ia_nlink) {</div><div class='del'>-                ret = dht_migrate_file (this, loc, cached_subvol, hashed_subvol,</div><div class='del'>-                                        GF_DHT_MIGRATE_HARDLINK_IN_PROGRESS,</div><div class='del'>-                                        fop_errno);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* There is a race where on the target subvol for the hardlink</div><div class='add'>+     * (note: hash subvol for the hardlink might differ from this), some</div><div class='add'>+     * other client(non-rebalance) would have created a linkto file for that</div><div class='add'>+     * hardlink as part of lookup. So let say there are 10 hardlinks, on the</div><div class='add'>+     * 5th hardlink it self the hardlinks might have migrated. Now for</div><div class='add'>+     * (6..10th) hardlinks the cached and target would be same as the file</div><div class='add'>+     * has already migrated. Hence this check is needed  */</div><div class='add'>+    if (cached_subvol == hashed_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "source %s and destination %s "</div><div class='add'>+                     "for hardlink %s are same",</div><div class='add'>+                     cached_subvol-&gt;name, hashed_subvol-&gt;name, loc-&gt;path);</div><div class='ctx'>         ret = -2;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (iatt.ia_nlink == stbuf.ia_nlink) {</div><div class='add'>+        ret = dht_migrate_file(this, loc, cached_subvol, hashed_subvol,</div><div class='add'>+                               GF_DHT_MIGRATE_HARDLINK_IN_PROGRESS, fop_errno);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = -2;</div><div class='ctx'> out:</div><div class='del'>-        if (link_xattr)</div><div class='del'>-                dict_unref (link_xattr);</div><div class='add'>+    if (link_xattr)</div><div class='add'>+        dict_unref(link_xattr);</div><div class='ctx'> </div><div class='del'>-        if (xattr_rsp)</div><div class='del'>-                dict_unref (xattr_rsp);</div><div class='add'>+    if (xattr_rsp)</div><div class='add'>+        dict_unref(xattr_rsp);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__check_file_has_hardlink (xlator_t *this, loc_t *loc,</div><div class='del'>-                           struct iatt *stbuf, dict_t *xattrs, int flags,</div><div class='del'>-                           gf_defrag_info_t *defrag, dht_conf_t *conf, int *fop_errno)</div><div class='add'>+__check_file_has_hardlink(xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+                          dict_t *xattrs, int flags, gf_defrag_info_t *defrag,</div><div class='add'>+                          dht_conf_t *conf, int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-       int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-       if (flags == GF_DHT_MIGRATE_HARDLINK_IN_PROGRESS) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                return ret;</div><div class='del'>-       }</div><div class='del'>-       if (stbuf-&gt;ia_nlink &gt; 1) {</div><div class='del'>-                /* support for decomission */</div><div class='del'>-                if (flags == GF_DHT_MIGRATE_HARDLINK) {</div><div class='del'>-                        synclock_lock (&amp;conf-&gt;link_lock);</div><div class='del'>-                        ret = gf_defrag_handle_hardlink</div><div class='del'>-                                (this, loc, fop_errno);</div><div class='del'>-                        synclock_unlock (&amp;conf-&gt;link_lock);</div><div class='del'>-                        /*</div><div class='del'>-                        Returning zero will force the file to be remigrated.</div><div class='del'>-                        Checkout gf_defrag_handle_hardlink for more information.</div><div class='del'>-                        */</div><div class='del'>-                        if (ret &amp;&amp; ret != -2) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                        "Migrate file failed:"</div><div class='del'>-                                        "%s: failed to migrate file with link",</div><div class='del'>-                                        loc-&gt;path);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migration skipped for:"</div><div class='del'>-                                "%s: file has hardlinks", loc-&gt;path);</div><div class='del'>-                        *fop_errno = ENOTSUP;</div><div class='del'>-                        ret = 1;</div><div class='del'>-                }</div><div class='del'>-       }</div><div class='add'>+    if (flags == GF_DHT_MIGRATE_HARDLINK_IN_PROGRESS) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    if (stbuf-&gt;ia_nlink &gt; 1) {</div><div class='add'>+        /* support for decomission */</div><div class='add'>+        if (flags == GF_DHT_MIGRATE_HARDLINK) {</div><div class='add'>+            synclock_lock(&amp;conf-&gt;link_lock);</div><div class='add'>+            ret = gf_defrag_handle_hardlink(this, loc, fop_errno);</div><div class='add'>+            synclock_unlock(&amp;conf-&gt;link_lock);</div><div class='add'>+            /*</div><div class='add'>+            Returning zero will force the file to be remigrated.</div><div class='add'>+            Checkout gf_defrag_handle_hardlink for more information.</div><div class='add'>+            */</div><div class='add'>+            if (ret &amp;&amp; ret != -2) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                       "Migrate file failed:"</div><div class='add'>+                       "%s: failed to migrate file with link",</div><div class='add'>+                       loc-&gt;path);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migration skipped for:"</div><div class='add'>+                   "%s: file has hardlinks",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            *fop_errno = ENOTSUP;</div><div class='add'>+            ret = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-       return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>      return values</div><div class='ctx'>      0 : File will be migrated</div><div class='hunk'>@@ -620,964 +600,911 @@ __check_file_has_hardlink (xlator_t *this, loc_t *loc,</div><div class='ctx'>     -1 : failure</div><div class='ctx'> */</div><div class='ctx'> static int</div><div class='del'>-__is_file_migratable (xlator_t *this, loc_t *loc,</div><div class='del'>-                      struct iatt *stbuf, dict_t *xattrs, int flags,</div><div class='del'>-                      gf_defrag_info_t *defrag, dht_conf_t *conf,</div><div class='del'>-                      int *fop_errno)</div><div class='add'>+__is_file_migratable(xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+                     dict_t *xattrs, int flags, gf_defrag_info_t *defrag,</div><div class='add'>+                     dht_conf_t *conf, int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int lock_count = 0;</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (stbuf-&gt;ia_type)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: migrate-file called on directory", loc-&gt;path);</div><div class='del'>-                *fop_errno = EISDIR;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;lock_migration_enabled) {</div><div class='del'>-                ret = dict_get_int32 (xattrs, GLUSTERFS_POSIXLK_COUNT,</div><div class='del'>-                                      &amp;lock_count);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed:"</div><div class='del'>-                                "%s: Unable to get lock count for file",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        *fop_errno = EINVAL;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (lock_count) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed: %s: File has locks."</div><div class='del'>-                                " Skipping file migration", loc-&gt;path);</div><div class='del'>-                        *fop_errno = ENOTSUP;</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int lock_count = 0;</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(stbuf-&gt;ia_type)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: migrate-file called on directory",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        *fop_errno = EISDIR;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Check if file has hardlink*/</div><div class='del'>-        ret = __check_file_has_hardlink (this, loc, stbuf, xattrs,</div><div class='del'>-                                         flags, defrag, conf, fop_errno);</div><div class='add'>+    if (!conf-&gt;lock_migration_enabled) {</div><div class='add'>+        ret = dict_get_int32(xattrs, GLUSTERFS_POSIXLK_COUNT, &amp;lock_count);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed:"</div><div class='add'>+                   "%s: Unable to get lock count for file",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            *fop_errno = EINVAL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (lock_count) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed: %s: File has locks."</div><div class='add'>+                   " Skipping file migration",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            *fop_errno = ENOTSUP;</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if file has hardlink*/</div><div class='add'>+    ret = __check_file_has_hardlink(this, loc, stbuf, xattrs, flags, defrag,</div><div class='add'>+                                    conf, fop_errno);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from,</div><div class='del'>-                                 loc_t *loc, struct iatt *stbuf, fd_t **dst_fd,</div><div class='del'>-                                 int *fop_errno)</div><div class='add'>+__dht_rebalance_create_dst_file(xlator_t *this, xlator_t *to, xlator_t *from,</div><div class='add'>+                                loc_t *loc, struct iatt *stbuf, fd_t **dst_fd,</div><div class='add'>+                                int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int          ret  = -1;</div><div class='del'>-        int          ret2 = -1;</div><div class='del'>-        fd_t        *fd   = NULL;</div><div class='del'>-        struct iatt  new_stbuf = {0,};</div><div class='del'>-        struct iatt  check_stbuf= {0,};</div><div class='del'>-        dht_conf_t  *conf = NULL;</div><div class='del'>-        dict_t      *dict = NULL;</div><div class='del'>-        dict_t      *xdata = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int ret2 = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt new_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt check_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "dictionary allocation failed for"</div><div class='add'>+               "path:%s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_gfuuid(dict, "gfid-req", stbuf-&gt;ia_gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: failed to set dictionary value: key = gfid-req", loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, conf-&gt;link_xattr_name, from-&gt;name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: failed to set dictionary value: key = %s ", loc-&gt;path,</div><div class='add'>+               conf-&gt;link_xattr_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = fd_create(loc-&gt;inode, DHT_REBALANCE_PID);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: fd create failed (destination)", loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_NO_MEMORY, "dictionary allocation failed for"</div><div class='del'>-                        "path:%s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_gfuuid (dict, "gfid-req", stbuf-&gt;ia_gfid, true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: failed to set dictionary value: key = gfid-req",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='add'>+    if (!!dht_is_tier_xlator(this)) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+        if (!xdata) {</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED, "%s: dict_new failed)",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, conf-&gt;link_xattr_name, from-&gt;name);</div><div class='add'>+        ret = dict_set_int32(xdata, GF_CLEAN_WRITE_PROTECTION, 1);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: failed to set dictionary value: key = %s ",</div><div class='del'>-                        loc-&gt;path, conf-&gt;link_xattr_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd = fd_create (loc-&gt;inode, DHT_REBALANCE_PID);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: fd create failed (destination)",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!!dht_is_tier_xlator (this)) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-                if (!xdata) {</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: dict_new failed)",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (xdata, GF_CLEAN_WRITE_PROTECTION, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s: failed to set dictionary value: key = %s ",</div><div class='del'>-                                loc-&gt;path, GF_CLEAN_WRITE_PROTECTION);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (to, loc, &amp;new_stbuf, NULL, xdata, NULL);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                /* File exits in the destination, check if gfid matches */</div><div class='del'>-                if (gf_uuid_compare (stbuf-&gt;ia_gfid, new_stbuf.ia_gfid) != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                                "file %s exists in %s with different gfid",</div><div class='del'>-                                loc-&gt;path, to-&gt;name);</div><div class='del'>-                        *fop_errno = EINVAL;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if ((ret &lt; 0) &amp;&amp; (-ret != ENOENT)) {</div><div class='del'>-                /* File exists in destination, but not accessible */</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: failed to lookup file",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Create the destination with LINKFILE mode, and linkto xattr,</div><div class='del'>-           if the linkfile already exists, just open the file */</div><div class='del'>-        if (!ret) {</div><div class='del'>-                /*</div><div class='del'>-                 * File already present, just open the file.</div><div class='del'>-                 */</div><div class='del'>-                ret = syncop_open (to, loc, O_RDWR, fd, NULL, NULL);</div><div class='del'>-                 if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "failed to open %s on %s",</div><div class='del'>-                                loc-&gt;path, to-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                 }</div><div class='del'>-        } else {</div><div class='del'>-                ret = syncop_create (to, loc, O_RDWR, DHT_LINKFILE_MODE, fd,</div><div class='del'>-                                     &amp;new_stbuf, dict, NULL);</div><div class='del'>-                 if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "failed to create %s on %s",</div><div class='del'>-                                loc-&gt;path, to-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd_bind (fd);</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s: failed to set dictionary value: key = %s ", loc-&gt;path,</div><div class='add'>+                   GF_CLEAN_WRITE_PROTECTION);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(to, loc, &amp;new_stbuf, NULL, xdata, NULL);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        /* File exits in the destination, check if gfid matches */</div><div class='add'>+        if (gf_uuid_compare(stbuf-&gt;ia_gfid, new_stbuf.ia_gfid) != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+                   "file %s exists in %s with different gfid", loc-&gt;path,</div><div class='add'>+                   to-&gt;name);</div><div class='add'>+            *fop_errno = EINVAL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if ((ret &lt; 0) &amp;&amp; (-ret != ENOENT)) {</div><div class='add'>+        /* File exists in destination, but not accessible */</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: failed to lookup file", loc-&gt;path);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Reason of doing lookup after create again:</div><div class='del'>-         *In the create, there is some time-gap between opening fd at the</div><div class='del'>-         *server (posix_layer) and binding it in server (incrementing fd count),</div><div class='del'>-         *so if in that time-gap, if other process sends unlink considering it</div><div class='del'>-         *as a linkto file, because inode-&gt;fd count will be 0, so file will be</div><div class='del'>-         *unlinked at the backend. And because further operations are performed</div><div class='del'>-         *on fd, so though migration will be done but will end with no file</div><div class='del'>-         *at  the backend.</div><div class='add'>+    /* Create the destination with LINKFILE mode, and linkto xattr,</div><div class='add'>+       if the linkfile already exists, just open the file */</div><div class='add'>+    if (!ret) {</div><div class='add'>+        /*</div><div class='add'>+         * File already present, just open the file.</div><div class='ctx'>          */</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (to, loc, &amp;check_stbuf, NULL, NULL, NULL);</div><div class='del'>-        if (!ret) {</div><div class='del'>-</div><div class='del'>-                if (gf_uuid_compare (stbuf-&gt;ia_gfid, check_stbuf.ia_gfid) != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                                "file %s exists in %s with different gfid,"</div><div class='del'>-                                "found in lookup after create",</div><div class='del'>-                                loc-&gt;path, to-&gt;name);</div><div class='del'>-                        *fop_errno = EINVAL;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+        ret = syncop_open(to, loc, O_RDWR, fd, NULL, NULL);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "failed to open %s on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = syncop_create(to, loc, O_RDWR, DHT_LINKFILE_MODE, fd, &amp;new_stbuf,</div><div class='add'>+                            dict, NULL);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "failed to create %s on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+</div><div class='add'>+    /*Reason of doing lookup after create again:</div><div class='add'>+     *In the create, there is some time-gap between opening fd at the</div><div class='add'>+     *server (posix_layer) and binding it in server (incrementing fd count),</div><div class='add'>+     *so if in that time-gap, if other process sends unlink considering it</div><div class='add'>+     *as a linkto file, because inode-&gt;fd count will be 0, so file will be</div><div class='add'>+     *unlinked at the backend. And because further operations are performed</div><div class='add'>+     *on fd, so though migration will be done but will end with no file</div><div class='add'>+     *at  the backend.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(to, loc, &amp;check_stbuf, NULL, NULL, NULL);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        if (gf_uuid_compare(stbuf-&gt;ia_gfid, check_stbuf.ia_gfid) != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+                   "file %s exists in %s with different gfid,"</div><div class='add'>+                   "found in lookup after create",</div><div class='add'>+                   loc-&gt;path, to-&gt;name);</div><div class='add'>+            *fop_errno = EINVAL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (-ret == ENOENT) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: file does not exist"</div><div class='add'>+               "on %s",</div><div class='add'>+               loc-&gt;path, to-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetattr(to, fd, stbuf, (GF_SET_ATTR_UID | GF_SET_ATTR_GID),</div><div class='add'>+                          NULL, NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "chown failed for %s on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* No need to bother about 0 byte size files */</div><div class='add'>+    if (stbuf-&gt;ia_size &gt; 0) {</div><div class='add'>+        if (conf-&gt;use_fallocate) {</div><div class='add'>+            ret = syncop_fallocate(to, fd, 0, 0, stbuf-&gt;ia_size, NULL, NULL);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                if (ret == -EOPNOTSUPP || ret == -EINVAL || ret == -ENOSYS) {</div><div class='add'>+                    conf-&gt;use_fallocate = _gf_false;</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                           DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                           "fallocate failed for %s on %s", loc-&gt;path,</div><div class='add'>+                           to-&gt;name);</div><div class='add'>+</div><div class='add'>+                    *fop_errno = -ret;</div><div class='add'>+</div><div class='add'>+                    /* fallocate does not release the space</div><div class='add'>+                     * in some cases</div><div class='add'>+                     */</div><div class='add'>+                    ret2 = syncop_ftruncate(to, fd, 0, NULL, NULL, NULL, NULL);</div><div class='add'>+                    if (ret2 &lt; 0) {</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret2,</div><div class='add'>+                               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                               "ftruncate failed for "</div><div class='add'>+                               "%s on %s",</div><div class='add'>+                               loc-&gt;path, to-&gt;name);</div><div class='add'>+                    }</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (-ret == ENOENT) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED, "%s: file does not exist"</div><div class='del'>-                        "on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+        if (!conf-&gt;use_fallocate) {</div><div class='add'>+            ret = syncop_ftruncate(to, fd, stbuf-&gt;ia_size, NULL, NULL, NULL,</div><div class='add'>+                                   NULL);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='ctx'>                 *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                       DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                       "ftruncate failed for %s on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fsetattr (to, fd, stbuf,</div><div class='del'>-                               (GF_SET_ATTR_UID | GF_SET_ATTR_GID),</div><div class='del'>-                                NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "chown failed for %s on %s",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    /* success */</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        /* No need to bother about 0 byte size files */</div><div class='del'>-        if (stbuf-&gt;ia_size &gt; 0) {</div><div class='del'>-                if (conf-&gt;use_fallocate) {</div><div class='del'>-                        ret = syncop_fallocate (to, fd, 0, 0, stbuf-&gt;ia_size,</div><div class='del'>-                                                NULL, NULL);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                if (ret == -EOPNOTSUPP || ret == -EINVAL ||</div><div class='del'>-                                    ret == -ENOSYS) {</div><div class='del'>-                                        conf-&gt;use_fallocate = _gf_false;</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                                "fallocate failed for %s on %s",</div><div class='del'>-                                                loc-&gt;path, to-&gt;name);</div><div class='del'>-</div><div class='del'>-                                        *fop_errno = -ret;</div><div class='del'>-</div><div class='del'>-                                        /* fallocate does not release the space</div><div class='del'>-                                         * in some cases</div><div class='del'>-                                         */</div><div class='del'>-                                        ret2 = syncop_ftruncate (to, fd, 0,</div><div class='del'>-                                                                 NULL, NULL,</div><div class='del'>-                                                                 NULL, NULL);</div><div class='del'>-                                        if (ret2 &lt; 0) {</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                        GF_LOG_WARNING, -ret2,</div><div class='del'>-                                                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                                        "ftruncate failed for "</div><div class='del'>-                                                        "%s on %s",</div><div class='del'>-                                                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                                        }</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!conf-&gt;use_fallocate) {</div><div class='del'>-                        ret = syncop_ftruncate (to, fd, stbuf-&gt;ia_size, NULL,</div><div class='del'>-                                                NULL, NULL, NULL);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                *fop_errno = -ret;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                        "ftruncate failed for %s on %s",</div><div class='del'>-                                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* success */</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        if (dst_fd)</div><div class='del'>-                *dst_fd = fd;</div><div class='add'>+    if (dst_fd)</div><div class='add'>+        *dst_fd = fd;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (fd) {</div><div class='del'>-                        fd_unref (fd);</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (fd) {</div><div class='add'>+            fd_unref(fd);</div><div class='ctx'>         }</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    }</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__dht_check_free_space (xlator_t *this, xlator_t *to, xlator_t *from,</div><div class='del'>-                        loc_t *loc, struct iatt *stbuf, int flag,</div><div class='del'>-                        dht_conf_t *conf, gf_boolean_t *target_changed,</div><div class='del'>-                        xlator_t **new_subvol, int *fop_errno)</div><div class='add'>+__dht_check_free_space(xlator_t *this, xlator_t *to, xlator_t *from, loc_t *loc,</div><div class='add'>+                       struct iatt *stbuf, int flag, dht_conf_t *conf,</div><div class='add'>+                       gf_boolean_t *target_changed, xlator_t **new_subvol,</div><div class='add'>+                       int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        struct statvfs  src_statfs = {0,};</div><div class='del'>-        struct statvfs  dst_statfs = {0,};</div><div class='del'>-        int             ret        = -1;</div><div class='del'>-        dict_t         *xdata      = NULL;</div><div class='del'>-        dht_layout_t   *layout     = NULL;</div><div class='del'>-        uint64_t        src_statfs_blocks = 1;</div><div class='del'>-        uint64_t        dst_statfs_blocks = 1;</div><div class='del'>-        double          dst_post_availspacepercent = 0;</div><div class='del'>-        double          src_post_availspacepercent = 0;</div><div class='del'>-        uint64_t        file_blocks = 0;</div><div class='del'>-        uint64_t        src_total_blocks = 0;</div><div class='del'>-        uint64_t        dst_total_blocks = 0;</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate dictionary");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (xdata, GF_INTERNAL_IGNORE_DEEM_STATFS, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set "</div><div class='del'>-                        GF_INTERNAL_IGNORE_DEEM_STATFS" in dict");</div><div class='del'>-                ret = -1;</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_statfs (from, loc, &amp;src_statfs, xdata, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "failed to get statfs of %s on %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_statfs (to, loc, &amp;dst_statfs, xdata, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "failed to get statfs of %s on %s",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "min_free_disk - %f , block available - "</div><div class='del'>-                      "%lu , block size - %lu ", conf-&gt;min_free_disk,</div><div class='del'>-                      dst_statfs.f_bavail, dst_statfs.f_bsize);</div><div class='del'>-</div><div class='del'>-        dst_statfs_blocks = dst_statfs.f_bavail *</div><div class='del'>-                            (dst_statfs.f_frsize /</div><div class='del'>-                            GF_DISK_SECTOR_SIZE);</div><div class='del'>-</div><div class='del'>-        src_statfs_blocks = src_statfs.f_bavail *</div><div class='del'>-                            (src_statfs.f_frsize /</div><div class='del'>-                            GF_DISK_SECTOR_SIZE);</div><div class='del'>-</div><div class='del'>-        dst_total_blocks = dst_statfs.f_blocks *</div><div class='del'>-                           (dst_statfs.f_frsize /</div><div class='del'>-                           GF_DISK_SECTOR_SIZE);</div><div class='del'>-</div><div class='del'>-        src_total_blocks = src_statfs.f_blocks *</div><div class='del'>-                           (src_statfs.f_frsize /</div><div class='del'>-                           GF_DISK_SECTOR_SIZE);</div><div class='del'>-</div><div class='del'>-        /* if force option is given, do not check for space @ dst.</div><div class='del'>-         * Check only if space is avail for the file */</div><div class='del'>-        if (flag != GF_DHT_MIGRATE_DATA)</div><div class='del'>-                goto check_avail_space;</div><div class='del'>-</div><div class='del'>-        /* Check:</div><div class='del'>-           During rebalance `migrate-data` - Destination subvol experiences</div><div class='del'>-           a `reduction` in 'blocks' of free space, at the same time source</div><div class='del'>-           subvol gains certain 'blocks' of free space. A valid check is</div><div class='del'>-           necessary here to avoid erroneous move to destination where</div><div class='del'>-           the space could be scantily available.</div><div class='del'>-           With heterogeneous brick support, an actual space comparison could</div><div class='del'>-           prevent any files being migrated to newly added bricks if they are</div><div class='del'>-           smaller then the free space available on the existing bricks.</div><div class='del'>-         */</div><div class='del'>-        if (stbuf) {</div><div class='del'>-                if (!conf-&gt;use_fallocate) {</div><div class='del'>-                        file_blocks = stbuf-&gt;ia_size + GF_DISK_SECTOR_SIZE - 1;</div><div class='del'>-                        file_blocks /= GF_DISK_SECTOR_SIZE;</div><div class='del'>-</div><div class='del'>-                        if (file_blocks &gt;= dst_statfs_blocks) {</div><div class='del'>-                                dst_statfs_blocks = 0;</div><div class='del'>-                        } else {</div><div class='del'>-                                dst_statfs_blocks -= file_blocks;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                src_post_availspacepercent =</div><div class='del'>-                        ((src_statfs_blocks + file_blocks) * 100) / src_total_blocks;</div><div class='del'>-</div><div class='del'>-                dst_post_availspacepercent =</div><div class='del'>-                        (dst_statfs_blocks * 100) / dst_total_blocks;</div><div class='del'>-</div><div class='del'>-                if (dst_post_availspacepercent &lt; src_post_availspacepercent) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "data movement of file "</div><div class='del'>-                                "{blocks:%"PRIu64" name:(%s)} would result in "</div><div class='del'>-                                "dst node (%s:%"PRIu64") having lower disk "</div><div class='del'>-                                "space than the source node (%s:%"PRIu64")"</div><div class='del'>-                                ".Skipping file.", stbuf-&gt;ia_blocks, loc-&gt;path,</div><div class='del'>-                                to-&gt;name, dst_statfs_blocks, from-&gt;name,</div><div class='del'>-                                src_statfs_blocks);</div><div class='del'>-</div><div class='del'>-                        /* this is not a 'failure', but we don't want to</div><div class='del'>-                           consider this as 'success' too :-/ */</div><div class='del'>-                        *fop_errno = ENOSPC;</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    struct statvfs src_statfs = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct statvfs dst_statfs = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    uint64_t src_statfs_blocks = 1;</div><div class='add'>+    uint64_t dst_statfs_blocks = 1;</div><div class='add'>+    double dst_post_availspacepercent = 0;</div><div class='add'>+    double src_post_availspacepercent = 0;</div><div class='add'>+    uint64_t file_blocks = 0;</div><div class='add'>+    uint64_t src_total_blocks = 0;</div><div class='add'>+    uint64_t dst_total_blocks = 0;</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate dictionary");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int8(xdata, GF_INTERNAL_IGNORE_DEEM_STATFS, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set " GF_INTERNAL_IGNORE_DEEM_STATFS " in dict");</div><div class='add'>+        ret = -1;</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_statfs(from, loc, &amp;src_statfs, xdata, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "failed to get statfs of %s on %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_statfs(to, loc, &amp;dst_statfs, xdata, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "failed to get statfs of %s on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "min_free_disk - %f , block available - "</div><div class='add'>+                 "%lu , block size - %lu ",</div><div class='add'>+                 conf-&gt;min_free_disk, dst_statfs.f_bavail, dst_statfs.f_bsize);</div><div class='add'>+</div><div class='add'>+    dst_statfs_blocks = dst_statfs.f_bavail *</div><div class='add'>+                        (dst_statfs.f_frsize / GF_DISK_SECTOR_SIZE);</div><div class='add'>+</div><div class='add'>+    src_statfs_blocks = src_statfs.f_bavail *</div><div class='add'>+                        (src_statfs.f_frsize / GF_DISK_SECTOR_SIZE);</div><div class='add'>+</div><div class='add'>+    dst_total_blocks = dst_statfs.f_blocks *</div><div class='add'>+                       (dst_statfs.f_frsize / GF_DISK_SECTOR_SIZE);</div><div class='add'>+</div><div class='add'>+    src_total_blocks = src_statfs.f_blocks *</div><div class='add'>+                       (src_statfs.f_frsize / GF_DISK_SECTOR_SIZE);</div><div class='add'>+</div><div class='add'>+    /* if force option is given, do not check for space @ dst.</div><div class='add'>+     * Check only if space is avail for the file */</div><div class='add'>+    if (flag != GF_DHT_MIGRATE_DATA)</div><div class='add'>+        goto check_avail_space;</div><div class='add'>+</div><div class='add'>+    /* Check:</div><div class='add'>+       During rebalance `migrate-data` - Destination subvol experiences</div><div class='add'>+       a `reduction` in 'blocks' of free space, at the same time source</div><div class='add'>+       subvol gains certain 'blocks' of free space. A valid check is</div><div class='add'>+       necessary here to avoid erroneous move to destination where</div><div class='add'>+       the space could be scantily available.</div><div class='add'>+       With heterogeneous brick support, an actual space comparison could</div><div class='add'>+       prevent any files being migrated to newly added bricks if they are</div><div class='add'>+       smaller then the free space available on the existing bricks.</div><div class='add'>+     */</div><div class='add'>+    if (stbuf) {</div><div class='add'>+        if (!conf-&gt;use_fallocate) {</div><div class='add'>+            file_blocks = stbuf-&gt;ia_size + GF_DISK_SECTOR_SIZE - 1;</div><div class='add'>+            file_blocks /= GF_DISK_SECTOR_SIZE;</div><div class='add'>+</div><div class='add'>+            if (file_blocks &gt;= dst_statfs_blocks) {</div><div class='add'>+                dst_statfs_blocks = 0;</div><div class='add'>+            } else {</div><div class='add'>+                dst_statfs_blocks -= file_blocks;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        src_post_availspacepercent = ((src_statfs_blocks + file_blocks) * 100) /</div><div class='add'>+                                     src_total_blocks;</div><div class='add'>+</div><div class='add'>+        dst_post_availspacepercent = (dst_statfs_blocks * 100) /</div><div class='add'>+                                     dst_total_blocks;</div><div class='add'>+</div><div class='add'>+        if (dst_post_availspacepercent &lt; src_post_availspacepercent) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "data movement of file "</div><div class='add'>+                   "{blocks:%" PRIu64</div><div class='add'>+                   " name:(%s)} would result in "</div><div class='add'>+                   "dst node (%s:%" PRIu64</div><div class='add'>+                   ") having lower disk "</div><div class='add'>+                   "space than the source node (%s:%" PRIu64</div><div class='add'>+                   ")"</div><div class='add'>+                   ".Skipping file.",</div><div class='add'>+                   stbuf-&gt;ia_blocks, loc-&gt;path, to-&gt;name, dst_statfs_blocks,</div><div class='add'>+                   from-&gt;name, src_statfs_blocks);</div><div class='add'>+</div><div class='add'>+            /* this is not a 'failure', but we don't want to</div><div class='add'>+               consider this as 'success' too :-/ */</div><div class='add'>+            *fop_errno = ENOSPC;</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> check_avail_space:</div><div class='del'>-        if (conf-&gt;disk_unit == 'p' &amp;&amp; dst_statfs.f_blocks) {</div><div class='del'>-                dst_post_availspacepercent =</div><div class='del'>-                        (dst_statfs_blocks * 100) / dst_total_blocks;</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "file : %s, post_availspacepercent"</div><div class='del'>-                              " : %lf f_bavail : %lu min-free-disk: %lf",</div><div class='del'>-                              loc-&gt;path, dst_post_availspacepercent,</div><div class='del'>-                              dst_statfs.f_bavail, conf-&gt;min_free_disk);</div><div class='del'>-</div><div class='del'>-                if (dst_post_availspacepercent &lt; conf-&gt;min_free_disk) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='del'>-                                "Write will cross min-free-disk for "</div><div class='del'>-                                "file - %s on subvol - %s. Looking "</div><div class='del'>-                                "for new subvol", loc-&gt;path, to-&gt;name);</div><div class='del'>-</div><div class='del'>-                        goto find_new_subvol;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (conf-&gt;disk_unit == 'p' &amp;&amp; dst_statfs.f_blocks) {</div><div class='add'>+        dst_post_availspacepercent = (dst_statfs_blocks * 100) /</div><div class='add'>+                                     dst_total_blocks;</div><div class='add'>+</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "file : %s, post_availspacepercent"</div><div class='add'>+                     " : %lf f_bavail : %lu min-free-disk: %lf",</div><div class='add'>+                     loc-&gt;path, dst_post_availspacepercent, dst_statfs.f_bavail,</div><div class='add'>+                     conf-&gt;min_free_disk);</div><div class='add'>+</div><div class='add'>+        if (dst_post_availspacepercent &lt; conf-&gt;min_free_disk) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='add'>+                   "Write will cross min-free-disk for "</div><div class='add'>+                   "file - %s on subvol - %s. Looking "</div><div class='add'>+                   "for new subvol",</div><div class='add'>+                   loc-&gt;path, to-&gt;name);</div><div class='add'>+</div><div class='add'>+            goto find_new_subvol;</div><div class='add'>+        } else {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;disk_unit != 'p') {</div><div class='del'>-                if ((dst_statfs_blocks * GF_DISK_SECTOR_SIZE) &lt;</div><div class='del'>-                                                      conf-&gt;min_free_disk) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "file : %s,  destination "</div><div class='del'>-                                      "frsize: %lu f_bavail : %lu "</div><div class='del'>-                                      "min-free-disk: %lf", loc-&gt;path,</div><div class='del'>-                                      dst_statfs.f_frsize, dst_statfs.f_bavail,</div><div class='del'>-                                      conf-&gt;min_free_disk);</div><div class='add'>+    if (conf-&gt;disk_unit != 'p') {</div><div class='add'>+        if ((dst_statfs_blocks * GF_DISK_SECTOR_SIZE) &lt; conf-&gt;min_free_disk) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "file : %s,  destination "</div><div class='add'>+                         "frsize: %lu f_bavail : %lu "</div><div class='add'>+                         "min-free-disk: %lf",</div><div class='add'>+                         loc-&gt;path, dst_statfs.f_frsize, dst_statfs.f_bavail,</div><div class='add'>+                         conf-&gt;min_free_disk);</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0, 0, "write will"</div><div class='del'>-                                " cross min-free-disk for file - %s on subvol -"</div><div class='del'>-                                " %s. looking for new subvol", loc-&gt;path,</div><div class='del'>-                                to-&gt;name);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='add'>+                   "write will"</div><div class='add'>+                   " cross min-free-disk for file - %s on subvol -"</div><div class='add'>+                   " %s. looking for new subvol",</div><div class='add'>+                   loc-&gt;path, to-&gt;name);</div><div class='ctx'> </div><div class='del'>-                        goto find_new_subvol;</div><div class='add'>+            goto find_new_subvol;</div><div class='ctx'> </div><div class='del'>-                } else {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        } else {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> find_new_subvol:</div><div class='del'>-        layout = dht_layout_get (this, loc-&gt;parent);</div><div class='del'>-        if (!layout) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Layout is NULL");</div><div class='del'>-                *fop_errno = EINVAL;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *new_subvol = dht_subvol_with_free_space_inodes (this, to, from, layout,</div><div class='del'>-                                                         stbuf-&gt;ia_size);</div><div class='del'>-        if ((!(*new_subvol)) || (*new_subvol == from)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_INSUFF_SPACE, "Could not find any subvol"</div><div class='del'>-                        " with space accommodating the file - %s. Consider "</div><div class='del'>-                        "adding bricks", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                *target_changed = _gf_false;</div><div class='del'>-                *fop_errno = ENOSPC;</div><div class='del'>-                ret = -1;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "new target found - %s"</div><div class='del'>-                        " for file - %s", (*new_subvol)-&gt;name, loc-&gt;path);</div><div class='del'>-                *target_changed = _gf_true;</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    layout = dht_layout_get(this, loc-&gt;parent);</div><div class='add'>+    if (!layout) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Layout is NULL");</div><div class='add'>+        *fop_errno = EINVAL;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *new_subvol = dht_subvol_with_free_space_inodes(this, to, from, layout,</div><div class='add'>+                                                    stbuf-&gt;ia_size);</div><div class='add'>+    if ((!(*new_subvol)) || (*new_subvol == from)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_SUBVOL_INSUFF_SPACE,</div><div class='add'>+               "Could not find any subvol"</div><div class='add'>+               " with space accommodating the file - %s. Consider "</div><div class='add'>+               "adding bricks",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+</div><div class='add'>+        *target_changed = _gf_false;</div><div class='add'>+        *fop_errno = ENOSPC;</div><div class='add'>+        ret = -1;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "new target found - %s"</div><div class='add'>+               " for file - %s",</div><div class='add'>+               (*new_subvol)-&gt;name, loc-&gt;path);</div><div class='add'>+        *target_changed = _gf_true;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__dht_rebalance_migrate_data (xlator_t *this, gf_defrag_info_t *defrag,</div><div class='del'>-                              xlator_t *from, xlator_t *to, fd_t *src,</div><div class='del'>-                              fd_t *dst, uint64_t ia_size, int hole_exists,</div><div class='del'>-                              int *fop_errno)</div><div class='add'>+__dht_rebalance_migrate_data(xlator_t *this, gf_defrag_info_t *defrag,</div><div class='add'>+                             xlator_t *from, xlator_t *to, fd_t *src, fd_t *dst,</div><div class='add'>+                             uint64_t ia_size, int hole_exists, int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int            ret    = 0;</div><div class='del'>-        int            count  = 0;</div><div class='del'>-        off_t          offset = 0;</div><div class='del'>-        struct iovec  *vector = NULL;</div><div class='del'>-        struct iobref *iobref = NULL;</div><div class='del'>-        uint64_t       total  = 0;</div><div class='del'>-        size_t         read_size = 0;</div><div class='del'>-        dict_t        *xdata = NULL;</div><div class='del'>-        dht_conf_t    *conf  = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        /* if file size is '0', no need to enter this loop */</div><div class='del'>-        while (total &lt; ia_size) {</div><div class='del'>-                read_size = (((ia_size - total) &gt; DHT_REBALANCE_BLKSIZE) ?</div><div class='del'>-                             DHT_REBALANCE_BLKSIZE : (ia_size - total));</div><div class='del'>-</div><div class='del'>-                ret = syncop_readv (from, src, read_size,</div><div class='del'>-                                    offset, 0, &amp;vector, &amp;count, &amp;iobref, NULL,</div><div class='del'>-                                    NULL, NULL);</div><div class='del'>-                if (!ret || (ret &lt; 0)) {</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (hole_exists) {</div><div class='del'>-                        ret = dht_write_with_holes (to, dst, vector, count,</div><div class='del'>-                                                    ret, offset, iobref,</div><div class='del'>-                                                    fop_errno);</div><div class='del'>-                } else {</div><div class='del'>-                        if (!conf-&gt;force_migration &amp;&amp;</div><div class='del'>-                            !dht_is_tier_xlator (this)) {</div><div class='del'>-                                xdata = dict_new ();</div><div class='del'>-                                if (!xdata) {</div><div class='del'>-                                        gf_msg ("dht", GF_LOG_ERROR, 0,</div><div class='del'>-                                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                                "insufficient memory");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        *fop_errno = ENOMEM;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                /* Fail this write and abort rebalance if we</div><div class='del'>-                                 * detect a write from client since migration of</div><div class='del'>-                                 * this file started. This is done to avoid</div><div class='del'>-                                 * potential data corruption due to out of order</div><div class='del'>-                                 * writes from rebalance and client to the same</div><div class='del'>-                                 * region (as compared between src and dst</div><div class='del'>-                                 * files). See</div><div class='del'>-                                 * https://github.com/gluster/glusterfs/issues/308</div><div class='del'>-                                 * for more details.</div><div class='del'>-                                 */</div><div class='del'>-                                ret = dict_set_int32 (xdata,</div><div class='del'>-                                                      GF_AVOID_OVERWRITE, 1);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg ("dht", GF_LOG_ERROR, 0,</div><div class='del'>-                                                ENOMEM, "failed to set dict");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        *fop_errno = ENOMEM;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = syncop_writev (to, dst, vector, count,</div><div class='del'>-                                             offset, iobref, 0, NULL, NULL,</div><div class='del'>-                                             xdata, NULL);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                *fop_errno = -ret;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((defrag &amp;&amp; defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='del'>-                    (gf_defrag_get_pause_state (&amp;defrag-&gt;tier_conf) != TIER_RUNNING)) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_TIER_PAUSED,</div><div class='del'>-                                "Migrate file paused");</div><div class='del'>-                        ret = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    struct iovec *vector = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    uint64_t total = 0;</div><div class='add'>+    size_t read_size = 0;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    /* if file size is '0', no need to enter this loop */</div><div class='add'>+    while (total &lt; ia_size) {</div><div class='add'>+        read_size = (((ia_size - total) &gt; DHT_REBALANCE_BLKSIZE)</div><div class='add'>+                         ? DHT_REBALANCE_BLKSIZE</div><div class='add'>+                         : (ia_size - total));</div><div class='add'>+</div><div class='add'>+        ret = syncop_readv(from, src, read_size, offset, 0, &amp;vector, &amp;count,</div><div class='add'>+                           &amp;iobref, NULL, NULL, NULL);</div><div class='add'>+        if (!ret || (ret &lt; 0)) {</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (hole_exists) {</div><div class='add'>+            ret = dht_write_with_holes(to, dst, vector, count, ret, offset,</div><div class='add'>+                                       iobref, fop_errno);</div><div class='add'>+        } else {</div><div class='add'>+            if (!conf-&gt;force_migration &amp;&amp; !dht_is_tier_xlator(this)) {</div><div class='add'>+                xdata = dict_new();</div><div class='add'>+                if (!xdata) {</div><div class='add'>+                    gf_msg("dht", GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                           "insufficient memory");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    *fop_errno = ENOMEM;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        break;</div><div class='add'>+                /* Fail this write and abort rebalance if we</div><div class='add'>+                 * detect a write from client since migration of</div><div class='add'>+                 * this file started. This is done to avoid</div><div class='add'>+                 * potential data corruption due to out of order</div><div class='add'>+                 * writes from rebalance and client to the same</div><div class='add'>+                 * region (as compared between src and dst</div><div class='add'>+                 * files). See</div><div class='add'>+                 * https://github.com/gluster/glusterfs/issues/308</div><div class='add'>+                 * for more details.</div><div class='add'>+                 */</div><div class='add'>+                ret = dict_set_int32(xdata, GF_AVOID_OVERWRITE, 1);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg("dht", GF_LOG_ERROR, 0, ENOMEM,</div><div class='add'>+                           "failed to set dict");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    *fop_errno = ENOMEM;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                offset += ret;</div><div class='del'>-                total += ret;</div><div class='del'>-</div><div class='del'>-                GF_FREE (vector);</div><div class='del'>-                if (iobref)</div><div class='del'>-                        iobref_unref (iobref);</div><div class='del'>-                iobref = NULL;</div><div class='del'>-                vector = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        GF_FREE (vector);</div><div class='del'>-</div><div class='del'>-        if (ret &gt;= 0)</div><div class='del'>-                ret = 0;</div><div class='del'>-        else</div><div class='del'>-                ret = -1;</div><div class='del'>-</div><div class='del'>-        if (xdata) {</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+            ret = syncop_writev(to, dst, vector, count, offset, iobref, 0, NULL,</div><div class='add'>+                                NULL, xdata, NULL);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                *fop_errno = -ret;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-__dht_rebalance_open_src_file (xlator_t *this, xlator_t *from, xlator_t *to, loc_t *loc,</div><div class='del'>-                               struct iatt *stbuf, fd_t **src_fd,</div><div class='del'>-                               gf_boolean_t *clean_src, int *fop_errno)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        int          ret  = 0;</div><div class='del'>-        fd_t        *fd   = NULL;</div><div class='del'>-        dict_t      *dict = NULL;</div><div class='del'>-        struct iatt  iatt = {0,};</div><div class='del'>-        dht_conf_t  *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        *clean_src = _gf_false;</div><div class='del'>-</div><div class='del'>-        fd = fd_create (loc-&gt;inode, DHT_REBALANCE_PID);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: fd create failed (source)", loc-&gt;path);</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        if ((defrag &amp;&amp; defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='add'>+            (gf_defrag_get_pause_state(&amp;defrag-&gt;tier_conf) != TIER_RUNNING)) {</div><div class='add'>+            gf_msg("tier", GF_LOG_INFO, 0, DHT_MSG_TIER_PAUSED,</div><div class='add'>+                   "Migrate file paused");</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_open (from, loc, O_RDWR, fd, NULL, NULL);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "failed to open file %s on %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='del'>-</div><div class='del'>-        if (src_fd)</div><div class='del'>-                *src_fd = fd;</div><div class='add'>+        offset += ret;</div><div class='add'>+        total += ret;</div><div class='ctx'> </div><div class='add'>+        GF_FREE(vector);</div><div class='add'>+        if (iobref)</div><div class='add'>+            iobref_unref(iobref);</div><div class='add'>+        iobref = NULL;</div><div class='add'>+        vector = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    GF_FREE(vector);</div><div class='add'>+</div><div class='add'>+    if (ret &gt;= 0)</div><div class='add'>+        ret = 0;</div><div class='add'>+    else</div><div class='ctx'>         ret = -1;</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: Could not allocate memory for dict", loc-&gt;path);</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, conf-&gt;link_xattr_name, to-&gt;name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to set xattr in dict for %s (linkto:%s)",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (xdata) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Once the migration starts, the source should have 'linkto' key set</div><div class='del'>-           to show which is the target, so other clients can work around it */</div><div class='del'>-        ret = syncop_setxattr (from, loc, dict, 0, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "failed to set xattr on %s in %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        /* Reset source mode/xattr if migration fails*/</div><div class='del'>-        *clean_src = _gf_true;</div><div class='add'>+static int</div><div class='add'>+__dht_rebalance_open_src_file(xlator_t *this, xlator_t *from, xlator_t *to,</div><div class='add'>+                              loc_t *loc, struct iatt *stbuf, fd_t **src_fd,</div><div class='add'>+                              gf_boolean_t *clean_src, int *fop_errno)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    *clean_src = _gf_false;</div><div class='add'>+</div><div class='add'>+    fd = fd_create(loc-&gt;inode, DHT_REBALANCE_PID);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: fd create failed (source)", loc-&gt;path);</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_open(from, loc, O_RDWR, fd, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "failed to open file %s on %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* mode should be (+S+T) to indicate migration is in progress */</div><div class='del'>-        iatt.ia_prot = stbuf-&gt;ia_prot;</div><div class='del'>-        iatt.ia_type = stbuf-&gt;ia_type;</div><div class='del'>-        iatt.ia_prot.sticky = 1;</div><div class='del'>-        iatt.ia_prot.sgid = 1;</div><div class='add'>+    fd_bind(fd);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_setattr (from, loc, &amp;iatt, GF_SET_ATTR_MODE, NULL, NULL,</div><div class='del'>-                              NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "failed to set mode on %s in %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (src_fd)</div><div class='add'>+        *src_fd = fd;</div><div class='ctx'> </div><div class='del'>-        /* success */</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = -1;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: Could not allocate memory for dict", loc-&gt;path);</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, conf-&gt;link_xattr_name, to-&gt;name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to set xattr in dict for %s (linkto:%s)", loc-&gt;path,</div><div class='add'>+               to-&gt;name);</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Once the migration starts, the source should have 'linkto' key set</div><div class='add'>+       to show which is the target, so other clients can work around it */</div><div class='add'>+    ret = syncop_setxattr(from, loc, dict, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "failed to set xattr on %s in %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Reset source mode/xattr if migration fails*/</div><div class='add'>+    *clean_src = _gf_true;</div><div class='add'>+</div><div class='add'>+    /* mode should be (+S+T) to indicate migration is in progress */</div><div class='add'>+    iatt.ia_prot = stbuf-&gt;ia_prot;</div><div class='add'>+    iatt.ia_type = stbuf-&gt;ia_type;</div><div class='add'>+    iatt.ia_prot.sticky = 1;</div><div class='add'>+    iatt.ia_prot.sgid = 1;</div><div class='add'>+</div><div class='add'>+    ret = syncop_setattr(from, loc, &amp;iatt, GF_SET_ATTR_MODE, NULL, NULL, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "failed to set mode on %s in %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* success */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-migrate_special_files (xlator_t *this, xlator_t *from, xlator_t *to, loc_t *loc,</div><div class='del'>-                       struct iatt *buf, int *fop_errno)</div><div class='add'>+migrate_special_files(xlator_t *this, xlator_t *from, xlator_t *to, loc_t *loc,</div><div class='add'>+                      struct iatt *buf, int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int          ret      = -1;</div><div class='del'>-        dict_t      *rsp_dict = NULL;</div><div class='del'>-        dict_t      *dict     = NULL;</div><div class='del'>-        char        *link     = NULL;</div><div class='del'>-        struct iatt  stbuf    = {0,};</div><div class='del'>-        dht_conf_t  *conf     = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "%s: failed to set 'linkto' key in dict", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* check in the destination if the file is link file */</div><div class='del'>-        ret = syncop_lookup (to, loc, &amp;stbuf, NULL, dict, &amp;rsp_dict);</div><div class='del'>-        if ((ret &lt; 0) &amp;&amp; (-ret != ENOENT)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: lookup failed",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* we no more require this key */</div><div class='del'>-        dict_del (dict, conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-        /* file exists in target node, only if it is 'linkfile' its valid,</div><div class='del'>-           otherwise, error out */</div><div class='del'>-        if (!ret) {</div><div class='del'>-                if (!check_is_linkfile (loc-&gt;inode, &amp;stbuf, rsp_dict,</div><div class='del'>-                                        conf-&gt;link_xattr_name)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: file exists in destination", loc-&gt;path);</div><div class='del'>-                        *fop_errno = EINVAL;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* as file is linkfile, delete it */</div><div class='del'>-                ret = syncop_unlink (to, loc, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: failed to delete the linkfile",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Set the gfid of the source file in dict */</div><div class='del'>-        ret = dict_set_gfuuid (dict, "gfid-req", buf-&gt;ia_gfid, true);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *link = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "%s: failed to set 'linkto' key in dict", loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* check in the destination if the file is link file */</div><div class='add'>+    ret = syncop_lookup(to, loc, &amp;stbuf, NULL, dict, &amp;rsp_dict);</div><div class='add'>+    if ((ret &lt; 0) &amp;&amp; (-ret != ENOENT)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: lookup failed", loc-&gt;path);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* we no more require this key */</div><div class='add'>+    dict_del(dict, conf-&gt;link_xattr_name);</div><div class='add'>+</div><div class='add'>+    /* file exists in target node, only if it is 'linkfile' its valid,</div><div class='add'>+       otherwise, error out */</div><div class='add'>+    if (!ret) {</div><div class='add'>+        if (!check_is_linkfile(loc-&gt;inode, &amp;stbuf, rsp_dict,</div><div class='add'>+                               conf-&gt;link_xattr_name)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: file exists in destination", loc-&gt;path);</div><div class='add'>+            *fop_errno = EINVAL;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* as file is linkfile, delete it */</div><div class='add'>+        ret = syncop_unlink(to, loc, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "%s: failed to set gfid in dict for create", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Create the file in target */</div><div class='del'>-        if (IA_ISLNK (buf-&gt;ia_type)) {</div><div class='del'>-                /* Handle symlinks separately */</div><div class='del'>-                ret = syncop_readlink (from, loc, &amp;link, buf-&gt;ia_size, NULL,</div><div class='del'>-                                       NULL);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: readlink on symlink failed",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_symlink (to, loc, link, 0, dict, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: creating symlink failed",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                goto done;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: failed to delete the linkfile", loc-&gt;path);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Set the gfid of the source file in dict */</div><div class='add'>+    ret = dict_set_gfuuid(dict, "gfid-req", buf-&gt;ia_gfid, true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "%s: failed to set gfid in dict for create", loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Create the file in target */</div><div class='add'>+    if (IA_ISLNK(buf-&gt;ia_type)) {</div><div class='add'>+        /* Handle symlinks separately */</div><div class='add'>+        ret = syncop_readlink(from, loc, &amp;link, buf-&gt;ia_size, NULL, NULL);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: readlink on symlink failed", loc-&gt;path);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_mknod (to, loc, st_mode_from_ia (buf-&gt;ia_prot,</div><div class='del'>-                                                      buf-&gt;ia_type),</div><div class='del'>-                            makedev (ia_major (buf-&gt;ia_rdev),</div><div class='del'>-                                     ia_minor (buf-&gt;ia_rdev)), 0, dict, NULL);</div><div class='add'>+        ret = syncop_symlink(to, loc, link, 0, dict, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: mknod failed",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED, "%s: creating symlink failed",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_mknod(to, loc, st_mode_from_ia(buf-&gt;ia_prot, buf-&gt;ia_type),</div><div class='add'>+                       makedev(ia_major(buf-&gt;ia_rdev), ia_minor(buf-&gt;ia_rdev)),</div><div class='add'>+                       0, dict, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: mknod failed", loc-&gt;path);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        ret = syncop_setattr (to, loc, buf,</div><div class='del'>-                              (GF_SET_ATTR_MTIME |</div><div class='del'>-                               GF_SET_ATTR_UID | GF_SET_ATTR_GID |</div><div class='del'>-                               GF_SET_ATTR_MODE), NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: failed to perform setattr on %s",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_unlink (from, loc, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: unlink failed",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_setattr(to, loc, buf,</div><div class='add'>+                         (GF_SET_ATTR_MTIME | GF_SET_ATTR_UID |</div><div class='add'>+                          GF_SET_ATTR_GID | GF_SET_ATTR_MODE),</div><div class='add'>+                         NULL, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: failed to perform setattr on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_unlink(from, loc, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: unlink failed", loc-&gt;path);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (link);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    GF_FREE(link);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__dht_migration_cleanup_src_file (xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='del'>-                                  xlator_t *from, ia_prot_t *src_ia_prot)</div><div class='add'>+__dht_migration_cleanup_src_file(xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                                 xlator_t *from, ia_prot_t *src_ia_prot)</div><div class='ctx'> {</div><div class='del'>-        int ret                       = -1;</div><div class='del'>-        dht_conf_t     *conf          = NULL;</div><div class='del'>-        struct iatt     new_stbuf     = {0,};</div><div class='del'>-</div><div class='del'>-        if (!this || !fd || !from || !src_ia_prot) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /*Revert source mode and xattr changes*/</div><div class='del'>-        ret = syncop_fstat (from, fd, &amp;new_stbuf, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* Failed to get the stat info */</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file cleanup failed: failed to fstat "</div><div class='del'>-                        "file %s on %s ", loc-&gt;path, from-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Remove the sticky bit and sgid bit set, reset it to 0*/</div><div class='del'>-        if (!src_ia_prot-&gt;sticky)</div><div class='del'>-                new_stbuf.ia_prot.sticky = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    struct iatt new_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (!this || !fd || !from || !src_ia_prot) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /*Revert source mode and xattr changes*/</div><div class='add'>+    ret = syncop_fstat(from, fd, &amp;new_stbuf, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* Failed to get the stat info */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file cleanup failed: failed to fstat "</div><div class='add'>+               "file %s on %s ",</div><div class='add'>+               loc-&gt;path, from-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!src_ia_prot-&gt;sgid)</div><div class='del'>-                new_stbuf.ia_prot.sgid = 0;</div><div class='add'>+    /* Remove the sticky bit and sgid bit set, reset it to 0*/</div><div class='add'>+    if (!src_ia_prot-&gt;sticky)</div><div class='add'>+        new_stbuf.ia_prot.sticky = 0;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fsetattr (from, fd, &amp;new_stbuf,</div><div class='del'>-                               (GF_SET_ATTR_GID | GF_SET_ATTR_MODE),</div><div class='del'>-                               NULL, NULL, NULL, NULL);</div><div class='add'>+    if (!src_ia_prot-&gt;sgid)</div><div class='add'>+        new_stbuf.ia_prot.sgid = 0;</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file cleanup failed:"</div><div class='del'>-                        "%s: failed to perform fsetattr on %s ",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_fsetattr(from, fd, &amp;new_stbuf,</div><div class='add'>+                          (GF_SET_ATTR_GID | GF_SET_ATTR_MODE), NULL, NULL,</div><div class='add'>+                          NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fremovexattr (from, fd, conf-&gt;link_xattr_name, 0, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "%s: failed to remove linkto xattr on %s (%s)",</div><div class='del'>-                        loc-&gt;path, from-&gt;name, strerror (-ret));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file cleanup failed:"</div><div class='add'>+               "%s: failed to perform fsetattr on %s ",</div><div class='add'>+               loc-&gt;path, from-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fremovexattr(from, fd, conf-&gt;link_xattr_name, 0, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "%s: failed to remove linkto xattr on %s (%s)", loc-&gt;path,</div><div class='add'>+               from-&gt;name, strerror(-ret));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>   return values:</div><div class='ctx'> </div><div class='hunk'>@@ -1586,1098 +1513,1078 @@ out:</div><div class='ctx'>     1 : not a failure, but we can't migrate data as of now</div><div class='ctx'> */</div><div class='ctx'> int</div><div class='del'>-dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,</div><div class='del'>-                  int flag, int *fop_errno)</div><div class='add'>+dht_migrate_file(xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,</div><div class='add'>+                 int flag, int *fop_errno)</div><div class='ctx'> {</div><div class='del'>-        int                     ret                     = -1;</div><div class='del'>-        struct iatt             new_stbuf               = {0,};</div><div class='del'>-        struct iatt             stbuf                   = {0,};</div><div class='del'>-        struct iatt             empty_iatt              = {0,};</div><div class='del'>-        ia_prot_t               src_ia_prot             = {0,};</div><div class='del'>-        fd_t                    *src_fd                 = NULL;</div><div class='del'>-        fd_t                    *dst_fd                 = NULL;</div><div class='del'>-        dict_t                  *dict                   = NULL;</div><div class='del'>-        dict_t                  *xattr                  = NULL;</div><div class='del'>-        dict_t                  *xattr_rsp              = NULL;</div><div class='del'>-        int                     file_has_holes          = 0;</div><div class='del'>-        dht_conf_t              *conf                   = this-&gt;private;</div><div class='del'>-        int                     rcvd_enoent_from_src    = 0;</div><div class='del'>-        struct gf_flock         flock                   = {0, };</div><div class='del'>-        struct gf_flock         plock                   = {0, };</div><div class='del'>-        loc_t                   tmp_loc                 = {0, };</div><div class='del'>-        loc_t                   parent_loc              = {0, };</div><div class='del'>-        gf_boolean_t            inodelk_locked          = _gf_false;</div><div class='del'>-        gf_boolean_t            entrylk_locked          = _gf_false;</div><div class='del'>-        gf_boolean_t            p_locked                = _gf_false;</div><div class='del'>-        int                     lk_ret                  = -1;</div><div class='del'>-        gf_defrag_info_t        *defrag                 =  NULL;</div><div class='del'>-        gf_boolean_t            clean_src               = _gf_false;</div><div class='del'>-        gf_boolean_t            clean_dst               = _gf_false;</div><div class='del'>-        int                     log_level               = GF_LOG_INFO;</div><div class='del'>-        gf_boolean_t            delete_src_linkto       = _gf_true;</div><div class='del'>-        lock_migration_info_t   locklist;</div><div class='del'>-        dict_t                  *meta_dict              = NULL;</div><div class='del'>-        gf_boolean_t            meta_locked             = _gf_false;</div><div class='del'>-        gf_boolean_t            target_changed          = _gf_false;</div><div class='del'>-        xlator_t                *new_target             = NULL;</div><div class='del'>-        xlator_t                *old_target             = NULL;</div><div class='del'>-        xlator_t                *hashed_subvol          = NULL;</div><div class='del'>-        fd_t                    *linkto_fd              = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (from == to) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "destination and source are same. file %s"</div><div class='del'>-                              " might have migrated already", loc-&gt;path);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt new_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt empty_iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ia_prot_t src_ia_prot = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *src_fd = NULL;</div><div class='add'>+    fd_t *dst_fd = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    dict_t *xattr_rsp = NULL;</div><div class='add'>+    int file_has_holes = 0;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    int rcvd_enoent_from_src = 0;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_flock plock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t parent_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t inodelk_locked = _gf_false;</div><div class='add'>+    gf_boolean_t entrylk_locked = _gf_false;</div><div class='add'>+    gf_boolean_t p_locked = _gf_false;</div><div class='add'>+    int lk_ret = -1;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    gf_boolean_t clean_src = _gf_false;</div><div class='add'>+    gf_boolean_t clean_dst = _gf_false;</div><div class='add'>+    int log_level = GF_LOG_INFO;</div><div class='add'>+    gf_boolean_t delete_src_linkto = _gf_true;</div><div class='add'>+    lock_migration_info_t locklist;</div><div class='add'>+    dict_t *meta_dict = NULL;</div><div class='add'>+    gf_boolean_t meta_locked = _gf_false;</div><div class='add'>+    gf_boolean_t target_changed = _gf_false;</div><div class='add'>+    xlator_t *new_target = NULL;</div><div class='add'>+    xlator_t *old_target = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    fd_t *linkto_fd = NULL;</div><div class='add'>+</div><div class='add'>+    if (from == to) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "destination and source are same. file %s"</div><div class='add'>+                     " might have migrated already",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* If defrag is NULL, it should be assumed that migration is triggered</div><div class='del'>-         * from client */</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    /* If defrag is NULL, it should be assumed that migration is triggered</div><div class='add'>+     * from client */</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        /* migration of files from clients is restricted to non-tiered clients</div><div class='del'>-         * for now */</div><div class='del'>-        if (!defrag &amp;&amp; dht_is_tier_xlator (this)) {</div><div class='del'>-                ret = ENOTSUP;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* migration of files from clients is restricted to non-tiered clients</div><div class='add'>+     * for now */</div><div class='add'>+    if (!defrag &amp;&amp; dht_is_tier_xlator(this)) {</div><div class='add'>+        ret = ENOTSUP;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (defrag &amp;&amp; defrag-&gt;tier_conf.is_tier)</div><div class='del'>-                log_level = GF_LOG_TRACE;</div><div class='add'>+    if (defrag &amp;&amp; defrag-&gt;tier_conf.is_tier)</div><div class='add'>+        log_level = GF_LOG_TRACE;</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name,</div><div class='del'>-                log_level, "%s: attempting to move from %s to %s",</div><div class='del'>-                loc-&gt;path, from-&gt;name, to-&gt;name);</div><div class='add'>+    gf_log(this-&gt;name, log_level, "%s: attempting to move from %s to %s",</div><div class='add'>+           loc-&gt;path, from-&gt;name, to-&gt;name);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "Could not allocate memory for dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (dict, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "Could not allocate memory for dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(dict, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = ENOMEM;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: failed to set 'linkto' key in dict",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Do not migrate file in case lock migration is not enabled on the</div><div class='add'>+     * volume*/</div><div class='add'>+    if (!conf-&gt;lock_migration_enabled) {</div><div class='add'>+        ret = dict_set_int32(dict, GLUSTERFS_POSIXLK_COUNT, sizeof(int32_t));</div><div class='ctx'>         if (ret) {</div><div class='del'>-                *fop_errno = ENOMEM;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: failed to set 'linkto' key in dict", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Do not migrate file in case lock migration is not enabled on the</div><div class='del'>-         * volume*/</div><div class='del'>-        if (!conf-&gt;lock_migration_enabled) {</div><div class='del'>-                ret = dict_set_int32 (dict,</div><div class='del'>-                                 GLUSTERFS_POSIXLK_COUNT, sizeof(int32_t));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed: %s: failed to "</div><div class='del'>-                                "set "GLUSTERFS_POSIXLK_COUNT" key in dict",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "locks will be migrated"</div><div class='del'>-                        " for file: %s", loc-&gt;path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_build_parent_loc (this, &amp;parent_loc, loc, fop_errno);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: failed to build parent loc, which is needed to "</div><div class='del'>-                        "acquire entrylk to synchronize with renames on this "</div><div class='del'>-                        "path. Skipping migration", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (hashed_subvol == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: cannot find hashed subvol which is needed to "</div><div class='del'>-                        "synchronize with renames on this path. "</div><div class='del'>-                        "Skipping migration", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-</div><div class='del'>-        tmp_loc.inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        gf_uuid_copy (tmp_loc.gfid, loc-&gt;gfid);</div><div class='del'>-        tmp_loc.path = gf_strdup(loc-&gt;path);</div><div class='del'>-</div><div class='del'>-        /* this inodelk happens with flock.owner being zero. But to synchronize</div><div class='del'>-         * hardlink migration we need to have different lkowner for each migration</div><div class='del'>-         * Filed a bug here: https://bugzilla.redhat.com/show_bug.cgi?id=1468202 to</div><div class='del'>-         * track the fix for this. Currently synclock takes care of synchronizing</div><div class='del'>-         * hardlink migration. Once this bug is fixed we can avoid taking synclock */</div><div class='del'>-        ret = syncop_inodelk (from, DHT_FILE_MIGRATE_DOMAIN, &amp;tmp_loc, F_SETLKW,</div><div class='del'>-                              &amp;flock, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "migrate file failed: "</div><div class='del'>-                        "%s: failed to lock file on %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        inodelk_locked = _gf_true;</div><div class='del'>-</div><div class='del'>-        /* dht_rename has changed to use entrylk on hashed subvol for</div><div class='del'>-         * synchronization. So, rebalance too has to acquire an entrylk on</div><div class='del'>-         * hashed subvol.</div><div class='del'>-         */</div><div class='del'>-        ret = syncop_entrylk (hashed_subvol, DHT_ENTRY_SYNC_DOMAIN, &amp;parent_loc,</div><div class='del'>-                              loc-&gt;name, ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL,</div><div class='del'>-                              NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: failed to acquire entrylk on subvol %s",</div><div class='del'>-                        loc-&gt;path, hashed_subvol-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        entrylk_locked = _gf_true;</div><div class='del'>-</div><div class='del'>-        /* Phase 1 - Data migration is in progress from now on */</div><div class='del'>-        ret = syncop_lookup (from, loc, &amp;stbuf, NULL, dict, &amp;xattr_rsp);</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed: %s: failed to "</div><div class='add'>+                   "set " GLUSTERFS_POSIXLK_COUNT " key in dict",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "locks will be migrated"</div><div class='add'>+               " for file: %s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_build_parent_loc(this, &amp;parent_loc, loc, fop_errno);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='add'>+               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: failed to build parent loc, which is needed to "</div><div class='add'>+               "acquire entrylk to synchronize with renames on this "</div><div class='add'>+               "path. Skipping migration",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (hashed_subvol == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, EINVAL, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: cannot find hashed subvol which is needed to "</div><div class='add'>+               "synchronize with renames on this path. "</div><div class='add'>+               "Skipping migration",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+</div><div class='add'>+    tmp_loc.inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    gf_uuid_copy(tmp_loc.gfid, loc-&gt;gfid);</div><div class='add'>+    tmp_loc.path = gf_strdup(loc-&gt;path);</div><div class='add'>+</div><div class='add'>+    /* this inodelk happens with flock.owner being zero. But to synchronize</div><div class='add'>+     * hardlink migration we need to have different lkowner for each migration</div><div class='add'>+     * Filed a bug here: https://bugzilla.redhat.com/show_bug.cgi?id=1468202 to</div><div class='add'>+     * track the fix for this. Currently synclock takes care of synchronizing</div><div class='add'>+     * hardlink migration. Once this bug is fixed we can avoid taking synclock</div><div class='add'>+     */</div><div class='add'>+    ret = syncop_inodelk(from, DHT_FILE_MIGRATE_DOMAIN, &amp;tmp_loc, F_SETLKW,</div><div class='add'>+                         &amp;flock, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='add'>+               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "migrate file failed: "</div><div class='add'>+               "%s: failed to lock file on %s",</div><div class='add'>+               loc-&gt;path, from-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inodelk_locked = _gf_true;</div><div class='add'>+</div><div class='add'>+    /* dht_rename has changed to use entrylk on hashed subvol for</div><div class='add'>+     * synchronization. So, rebalance too has to acquire an entrylk on</div><div class='add'>+     * hashed subvol.</div><div class='add'>+     */</div><div class='add'>+    ret = syncop_entrylk(hashed_subvol, DHT_ENTRY_SYNC_DOMAIN, &amp;parent_loc,</div><div class='add'>+                         loc-&gt;name, ENTRYLK_LOCK, ENTRYLK_WRLCK, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='add'>+               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: failed to acquire entrylk on subvol %s", loc-&gt;path,</div><div class='add'>+               hashed_subvol-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    entrylk_locked = _gf_true;</div><div class='add'>+</div><div class='add'>+    /* Phase 1 - Data migration is in progress from now on */</div><div class='add'>+    ret = syncop_lookup(from, loc, &amp;stbuf, NULL, dict, &amp;xattr_rsp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, *fop_errno,</div><div class='add'>+               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: lookup failed on %s",</div><div class='add'>+               loc-&gt;path, from-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* preserve source mode, so set the same to the destination */</div><div class='add'>+    src_ia_prot = stbuf.ia_prot;</div><div class='add'>+</div><div class='add'>+    /* Check if file can be migrated */</div><div class='add'>+    ret = __is_file_migratable(this, loc, &amp;stbuf, xattr_rsp, flag, defrag, conf,</div><div class='add'>+                               fop_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (ret == HARDLINK_MIG_INPROGRESS)</div><div class='add'>+            ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Take care of the special files */</div><div class='add'>+    if (!IA_ISREG(stbuf.ia_type)) {</div><div class='add'>+        /* Special files */</div><div class='add'>+        ret = migrate_special_files(this, from, to, loc, &amp;stbuf, fop_errno);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* create the destination, with required modes/xattr */</div><div class='add'>+    ret = __dht_rebalance_create_dst_file(this, to, from, loc, &amp;stbuf, &amp;dst_fd,</div><div class='add'>+                                          fop_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "Create dst failed"</div><div class='add'>+               " on - %s for file - %s",</div><div class='add'>+               to-&gt;name, loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    clean_dst = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = __dht_check_free_space(this, to, from, loc, &amp;stbuf, flag, conf,</div><div class='add'>+                                 &amp;target_changed, &amp;new_target, fop_errno);</div><div class='add'>+    if (target_changed) {</div><div class='add'>+        /* Can't handle for hardlinks. Marking this as failure */</div><div class='add'>+        if (flag == GF_DHT_MIGRATE_HARDLINK_IN_PROGRESS || stbuf.ia_nlink &gt; 1) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SUBVOL_INSUFF_SPACE,</div><div class='add'>+                   "Exiting migration for"</div><div class='add'>+                   " file - %s. flag - %d, stbuf.ia_nlink - %d",</div><div class='add'>+                   loc-&gt;path, flag, stbuf.ia_nlink);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncop_ftruncate(to, dst_fd, 0, NULL, NULL, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, *fop_errno,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: lookup failed on %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-               goto out;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "%s: failed to perform truncate on %s (%s)", loc-&gt;path,</div><div class='add'>+                   to-&gt;name, strerror(-ret));</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* preserve source mode, so set the same to the destination */</div><div class='del'>-        src_ia_prot = stbuf.ia_prot;</div><div class='add'>+        syncop_close(dst_fd);</div><div class='add'>+        dst_fd = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Check if file can be migrated */</div><div class='del'>-        ret = __is_file_migratable (this, loc, &amp;stbuf, xattr_rsp, flag, defrag, conf,</div><div class='del'>-                                    fop_errno);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (ret == HARDLINK_MIG_INPROGRESS)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        old_target = to;</div><div class='add'>+        to = new_target;</div><div class='ctx'> </div><div class='del'>-        /* Take care of the special files */</div><div class='del'>-        if (!IA_ISREG (stbuf.ia_type)) {</div><div class='del'>-                /* Special files */</div><div class='del'>-                ret = migrate_special_files (this, from, to, loc, &amp;stbuf,</div><div class='del'>-                                             fop_errno);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        clean_dst = _gf_false;</div><div class='ctx'> </div><div class='del'>-        /* create the destination, with required modes/xattr */</div><div class='del'>-        ret = __dht_rebalance_create_dst_file (this, to, from, loc, &amp;stbuf,</div><div class='del'>-                                               &amp;dst_fd, fop_errno);</div><div class='add'>+        /* if the file migration is successful to this new target, then</div><div class='add'>+         * update the xattr on the old destination to point the new</div><div class='add'>+         * destination. We need to do update this only post migration</div><div class='add'>+         * as in case of failure the linkto needs to point to the source</div><div class='add'>+         * subvol */</div><div class='add'>+        ret = __dht_rebalance_create_dst_file(this, to, from, loc, &amp;stbuf,</div><div class='add'>+                                              &amp;dst_fd, fop_errno);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "Create dst failed"</div><div class='del'>-                        " on - %s for file - %s", to-&gt;name, loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        clean_dst = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = __dht_check_free_space (this, to, from, loc, &amp;stbuf, flag, conf,</div><div class='del'>-                                      &amp;target_changed, &amp;new_target, fop_errno);</div><div class='del'>-        if (target_changed) {</div><div class='del'>-                /* Can't handle for hardlinks. Marking this as failure */</div><div class='del'>-                if (flag == GF_DHT_MIGRATE_HARDLINK_IN_PROGRESS || stbuf.ia_nlink &gt; 1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INSUFF_SPACE, "Exiting migration for"</div><div class='del'>-                                " file - %s. flag - %d, stbuf.ia_nlink - %d",</div><div class='del'>-                               loc-&gt;path,  flag, stbuf.ia_nlink);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Create dst failed"</div><div class='add'>+                   " on - %s for file - %s",</div><div class='add'>+                   to-&gt;name, loc-&gt;path);</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+                   "destination for file "</div><div class='add'>+                   "- %s is changed to - %s",</div><div class='add'>+                   loc-&gt;path, to-&gt;name);</div><div class='add'>+            clean_dst = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Open the source, and also update mode/xattr */</div><div class='add'>+    ret = __dht_rebalance_open_src_file(this, from, to, loc, &amp;stbuf, &amp;src_fd,</div><div class='add'>+                                        &amp;clean_src, fop_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed: failed to open %s on %s", loc-&gt;path,</div><div class='add'>+               from-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: move all xattr related operations to fd based operations */</div><div class='add'>+    ret = syncop_listxattr(from, loc, &amp;xattr, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='add'>+               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: failed to get xattr from %s",</div><div class='add'>+               loc-&gt;path, from-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Copying posix acls to the linkto file messes up the permissions*/</div><div class='add'>+    dht_strip_out_acls(xattr);</div><div class='add'>+</div><div class='add'>+    /* Remove the linkto xattr as we don't want to overwrite the value</div><div class='add'>+     * set on the dst.</div><div class='add'>+     */</div><div class='add'>+    dict_del(xattr, conf-&gt;link_xattr_name);</div><div class='add'>+</div><div class='add'>+    /* We need to error out if this fails as having the wrong shard xattrs</div><div class='add'>+     * set on the dst could cause data corruption</div><div class='add'>+     */</div><div class='add'>+    ret = syncop_fsetxattr(to, dst_fd, xattr, 0, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: failed to set xattr on %s", loc-&gt;path, to-&gt;name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (xattr_rsp) {</div><div class='add'>+        /* we no more require this key */</div><div class='add'>+        dict_del(dict, conf-&gt;link_xattr_name);</div><div class='add'>+        dict_unref(xattr_rsp);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fstat(from, src_fd, &amp;stbuf, dict, &amp;xattr_rsp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:failed to lookup %s on %s ", loc-&gt;path,</div><div class='add'>+               from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check again if file has hardlink */</div><div class='add'>+    ret = __check_file_has_hardlink(this, loc, &amp;stbuf, xattr_rsp, flag, defrag,</div><div class='add'>+                                    conf, fop_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (ret == HARDLINK_MIG_INPROGRESS)</div><div class='add'>+            ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* Try to preserve 'holes' while migrating data */</div><div class='add'>+    if (stbuf.ia_size &gt; (stbuf.ia_blocks * GF_DISK_SECTOR_SIZE))</div><div class='add'>+        file_has_holes = 1;</div><div class='add'>+</div><div class='add'>+    ret = __dht_rebalance_migrate_data(this, defrag, from, to, src_fd, dst_fd,</div><div class='add'>+                                       stbuf.ia_size, file_has_holes,</div><div class='add'>+                                       fop_errno);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed: %s: failed to migrate data", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                ret = syncop_ftruncate (to, dst_fd, 0, NULL, NULL, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "%s: failed to perform truncate on %s (%s)",</div><div class='del'>-                                loc-&gt;path, to-&gt;name, strerror (-ret));</div><div class='del'>-                }</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: Sync the locks */</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsync(to, dst_fd, 0, NULL, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "%s: failed to fsync on %s (%s)",</div><div class='add'>+               loc-&gt;path, to-&gt;name, strerror(-ret));</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Phase 2 - Data-Migration Complete, Housekeeping updates pending */</div><div class='add'>+</div><div class='add'>+    ret = syncop_fstat(from, src_fd, &amp;new_stbuf, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* Failed to get the stat info */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed: failed to fstat file %s on %s ", loc-&gt;path,</div><div class='add'>+               from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                syncop_close (dst_fd);</div><div class='del'>-                dst_fd = NULL;</div><div class='add'>+    /* Lock the entire source file to prevent clients from taking a</div><div class='add'>+       lock on it as dht_lk does not handle file migration.</div><div class='ctx'> </div><div class='del'>-                old_target = to;</div><div class='del'>-                to = new_target;</div><div class='add'>+       This still leaves a small window where conflicting locks can</div><div class='add'>+       be granted to different clients. If client1 requests a blocking</div><div class='add'>+       lock on the src file, it will be granted after the migrating</div><div class='add'>+       process releases its lock. If client2 requests a lock on the dst</div><div class='add'>+       data file, it will also be granted, but all FOPs will be redirected</div><div class='add'>+       to the dst data file.</div><div class='add'>+    */</div><div class='ctx'> </div><div class='del'>-                clean_dst = _gf_false;</div><div class='add'>+    /* Take meta lock  */</div><div class='ctx'> </div><div class='add'>+    if (conf-&gt;lock_migration_enabled) {</div><div class='add'>+        meta_dict = dict_new();</div><div class='add'>+        if (!meta_dict) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "dict_new failed");</div><div class='ctx'> </div><div class='del'>-                /* if the file migration is successful to this new target, then</div><div class='del'>-                 * update the xattr on the old destination to point the new</div><div class='del'>-                 * destination. We need to do update this only post migration</div><div class='del'>-                 * as in case of failure the linkto needs to point to the source</div><div class='del'>-                 * subvol */</div><div class='del'>-                ret = __dht_rebalance_create_dst_file (this, to, from, loc, &amp;stbuf,</div><div class='del'>-                                                       &amp;dst_fd, fop_errno);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Create dst failed"</div><div class='del'>-                                " on - %s for file - %s", to-&gt;name, loc-&gt;path);</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "destination for file "</div><div class='del'>-                                "- %s is changed to - %s", loc-&gt;path, to-&gt;name);</div><div class='del'>-                        clean_dst = _gf_true;</div><div class='del'>-                }</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = dict_set_str(meta_dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary value: key = %s,"</div><div class='add'>+                   " path = %s",</div><div class='add'>+                   GLUSTERFS_INTERNAL_FOP_KEY, loc-&gt;path);</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Open the source, and also update mode/xattr */</div><div class='del'>-        ret = __dht_rebalance_open_src_file (this, from, to, loc, &amp;stbuf, &amp;src_fd,</div><div class='del'>-                                             &amp;clean_src, fop_errno);</div><div class='add'>+        ret = dict_set_int32(meta_dict, GF_META_LOCK_KEY, 1);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed: failed to open %s on %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: move all xattr related operations to fd based operations */</div><div class='del'>-        ret = syncop_listxattr (from, loc, &amp;xattr, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, *fop_errno,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: failed to get xattr from %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Copying posix acls to the linkto file messes up the permissions*/</div><div class='del'>-        dht_strip_out_acls (xattr);</div><div class='del'>-</div><div class='del'>-        /* Remove the linkto xattr as we don't want to overwrite the value</div><div class='del'>-         * set on the dst.</div><div class='del'>-         */</div><div class='del'>-        dict_del (xattr, conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-        /* We need to error out if this fails as having the wrong shard xattrs</div><div class='del'>-         * set on the dst could cause data corruption</div><div class='del'>-         */</div><div class='del'>-        ret = syncop_fsetxattr (to, dst_fd, xattr, 0, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: failed to set xattr on %s",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xattr_rsp) {</div><div class='del'>-                /* we no more require this key */</div><div class='del'>-                dict_del (dict, conf-&gt;link_xattr_name);</div><div class='del'>-                dict_unref (xattr_rsp);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Trace dict_set failed");</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fstat (from, src_fd, &amp;stbuf, dict, &amp;xattr_rsp);</div><div class='add'>+        ret = syncop_setxattr(from, loc, meta_dict, 0, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:failed to lookup %s on %s ",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Trace syncop_setxattr metalock failed");</div><div class='ctx'> </div><div class='del'>-        /* Check again if file has hardlink */</div><div class='del'>-        ret = __check_file_has_hardlink (this, loc, &amp;stbuf, xattr_rsp,</div><div class='del'>-                                         flag, defrag, conf, fop_errno);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (ret == HARDLINK_MIG_INPROGRESS)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            meta_locked = _gf_true;</div><div class='ctx'>         }</div><div class='del'>-        /* Try to preserve 'holes' while migrating data */</div><div class='del'>-        if (stbuf.ia_size &gt; (stbuf.ia_blocks * GF_DISK_SECTOR_SIZE))</div><div class='del'>-                file_has_holes = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (!conf-&gt;lock_migration_enabled) {</div><div class='add'>+        plock.l_type = F_WRLCK;</div><div class='add'>+        plock.l_start = 0;</div><div class='add'>+        plock.l_len = 0;</div><div class='add'>+        plock.l_whence = SEEK_SET;</div><div class='ctx'> </div><div class='del'>-        ret = __dht_rebalance_migrate_data (this, defrag, from, to,</div><div class='del'>-                                            src_fd, dst_fd, stbuf.ia_size,</div><div class='del'>-                                            file_has_holes, fop_errno);</div><div class='add'>+        ret = syncop_lk(from, src_fd, F_SETLK, &amp;plock, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed: %s: failed to migrate data",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed:"</div><div class='add'>+                   "%s: Failed to lock on %s",</div><div class='add'>+                   loc-&gt;path, from-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* TODO: Sync the locks */</div><div class='add'>+        p_locked = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fsync (to, dst_fd, 0, NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "%s: failed to fsync on %s (%s)",</div><div class='del'>-                        loc-&gt;path, to-&gt;name, strerror (-ret));</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-        }</div><div class='add'>+    } else {</div><div class='add'>+        INIT_LIST_HEAD(&amp;locklist.list);</div><div class='ctx'> </div><div class='add'>+        ret = syncop_getactivelk(from, loc, &amp;locklist, NULL, NULL);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "No active locks on:%s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        /* Phase 2 - Data-Migration Complete, Housekeeping updates pending */</div><div class='add'>+        } else if (ret &gt; 0) {</div><div class='add'>+            ret = syncop_setactivelk(to, loc, &amp;locklist, NULL, NULL);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                       DHT_MSG_LOCK_MIGRATION_FAILED, "write lock failed on:%s",</div><div class='add'>+                       loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fstat (from, src_fd, &amp;new_stbuf, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* Failed to get the stat info */</div><div class='del'>-                gf_msg ( this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed: failed to fstat file %s on %s ",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='ctx'>                 *fop_errno = -ret;</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Lock the entire source file to prevent clients from taking a</div><div class='del'>-           lock on it as dht_lk does not handle file migration.</div><div class='del'>-</div><div class='del'>-           This still leaves a small window where conflicting locks can</div><div class='del'>-           be granted to different clients. If client1 requests a blocking</div><div class='del'>-           lock on the src file, it will be granted after the migrating</div><div class='del'>-           process releases its lock. If client2 requests a lock on the dst</div><div class='del'>-           data file, it will also be granted, but all FOPs will be redirected</div><div class='del'>-           to the dst data file.</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        /* Take meta lock  */</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;lock_migration_enabled) {</div><div class='del'>-                meta_dict = dict_new ();</div><div class='del'>-                if (!meta_dict) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "dict_new failed");</div><div class='del'>-</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_str (meta_dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary value: key = %s,"</div><div class='del'>-                                " path = %s", GLUSTERFS_INTERNAL_FOP_KEY,</div><div class='del'>-                                 loc-&gt;path);</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (meta_dict, GF_META_LOCK_KEY, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Trace dict_set failed");</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_setxattr (from, loc, meta_dict, 0, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Trace syncop_setxattr metalock failed");</div><div class='del'>-</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        meta_locked = _gf_true;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;lock_migration_enabled) {</div><div class='del'>-                plock.l_type = F_WRLCK;</div><div class='del'>-                plock.l_start = 0;</div><div class='del'>-                plock.l_len = 0;</div><div class='del'>-                plock.l_whence = SEEK_SET;</div><div class='del'>-</div><div class='del'>-                ret = syncop_lk (from, src_fd, F_SETLK, &amp;plock, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed:"</div><div class='del'>-                                "%s: Failed to lock on %s",</div><div class='del'>-                                loc-&gt;path, from-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                p_locked = _gf_true;</div><div class='del'>-</div><div class='add'>+                goto metaunlock;</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;locklist.list);</div><div class='del'>-</div><div class='del'>-                ret = syncop_getactivelk (from, loc, &amp;locklist, NULL, NULL);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_INFO, "No active locks on:%s"</div><div class='del'>-                                , loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                } else if (ret &gt; 0) {</div><div class='del'>-</div><div class='del'>-                        ret = syncop_setactivelk (to, loc, &amp;locklist, NULL,</div><div class='del'>-                                                  NULL);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                        DHT_MSG_LOCK_MIGRATION_FAILED,</div><div class='del'>-                                        "write lock failed on:%s", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                                *fop_errno = -ret;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto metaunlock;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_LOCK_MIGRATION_FAILED,</div><div class='del'>-                                "getactivelk failed for file: %s", loc-&gt;path);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* source would have both sticky bit and sgid bit set, reset it to 0,</div><div class='del'>-           and set the source permission on destination, if it was not set</div><div class='del'>-           prior to setting rebalance-modes in source  */</div><div class='del'>-        if (!src_ia_prot.sticky)</div><div class='del'>-                new_stbuf.ia_prot.sticky = 0;</div><div class='del'>-</div><div class='del'>-        if (!src_ia_prot.sgid)</div><div class='del'>-                new_stbuf.ia_prot.sgid = 0;</div><div class='del'>-</div><div class='del'>-        /* TODO: if the source actually had sticky bit, or sgid bit set,</div><div class='del'>-           we are not handling it */</div><div class='del'>-</div><div class='del'>-        ret = syncop_fsetattr (to, dst_fd, &amp;new_stbuf,</div><div class='del'>-                               (GF_SET_ATTR_UID | GF_SET_ATTR_GID |</div><div class='del'>-                                GF_SET_ATTR_MODE), NULL, NULL, NULL, NULL);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                   DHT_MSG_LOCK_MIGRATION_FAILED,</div><div class='add'>+                   "getactivelk failed for file: %s", loc-&gt;path);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* source would have both sticky bit and sgid bit set, reset it to 0,</div><div class='add'>+       and set the source permission on destination, if it was not set</div><div class='add'>+       prior to setting rebalance-modes in source  */</div><div class='add'>+    if (!src_ia_prot.sticky)</div><div class='add'>+        new_stbuf.ia_prot.sticky = 0;</div><div class='add'>+</div><div class='add'>+    if (!src_ia_prot.sgid)</div><div class='add'>+        new_stbuf.ia_prot.sgid = 0;</div><div class='add'>+</div><div class='add'>+    /* TODO: if the source actually had sticky bit, or sgid bit set,</div><div class='add'>+       we are not handling it */</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetattr(</div><div class='add'>+        to, dst_fd, &amp;new_stbuf,</div><div class='add'>+        (GF_SET_ATTR_UID | GF_SET_ATTR_GID | GF_SET_ATTR_MODE), NULL, NULL,</div><div class='add'>+        NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: failed to perform setattr on %s ",</div><div class='add'>+               loc-&gt;path, to-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto metaunlock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Because 'futimes' is not portable */</div><div class='add'>+    ret = syncop_setattr(to, loc, &amp;new_stbuf,</div><div class='add'>+                         (GF_SET_ATTR_MTIME | GF_SET_ATTR_ATIME), NULL, NULL,</div><div class='add'>+                         NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "%s: failed to perform setattr on %s ", loc-&gt;path, to-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (target_changed) {</div><div class='add'>+        dict_del(dict, GLUSTERFS_POSIXLK_COUNT);</div><div class='add'>+        ret = dict_set_str(dict, conf-&gt;link_xattr_name, to-&gt;name);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: failed to perform setattr on %s ",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set xattr in dict for %s (linkto:%s)", loc-&gt;path,</div><div class='add'>+                   to-&gt;name);</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncop_setxattr(old_target, loc, dict, 0, NULL, NULL);</div><div class='add'>+        if (ret &amp;&amp; -ret != ESTALE &amp;&amp; -ret != ENOENT) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "failed to set xattr on %s in %s", loc-&gt;path,</div><div class='add'>+                   old_target-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else if (-ret == ESTALE || -ret == ENOENT) {</div><div class='add'>+            /* The failure ESTALE indicates that the linkto</div><div class='add'>+             * file on the hashed subvol might have been deleted.</div><div class='add'>+             * In this case will create a linkto file with new target</div><div class='add'>+             * as linkto xattr value*/</div><div class='add'>+            linkto_fd = fd_create(loc-&gt;inode, DHT_REBALANCE_PID);</div><div class='add'>+            if (!linkto_fd) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                       DHT_MSG_MIGRATE_FILE_FAILED, "%s: fd create failed",</div><div class='add'>+                       loc-&gt;path);</div><div class='add'>+                *fop_errno = ENOMEM;</div><div class='ctx'>                 ret = -1;</div><div class='del'>-                goto metaunlock;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Because 'futimes' is not portable */</div><div class='del'>-        ret = syncop_setattr (to, loc, &amp;new_stbuf,</div><div class='del'>-                              (GF_SET_ATTR_MTIME | GF_SET_ATTR_ATIME),</div><div class='del'>-                              NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "%s: failed to perform setattr on %s ",</div><div class='del'>-                        loc-&gt;path, to-&gt;name);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = syncop_create(old_target, loc, O_RDWR, DHT_LINKFILE_MODE,</div><div class='add'>+                                linkto_fd, NULL, dict, NULL);</div><div class='add'>+            if (ret != 0 &amp;&amp; -ret != EEXIST &amp;&amp; -ret != ESTALE) {</div><div class='ctx'>                 *fop_errno = -ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (target_changed) {</div><div class='del'>-                dict_del (dict, GLUSTERFS_POSIXLK_COUNT);</div><div class='del'>-                ret = dict_set_str (dict, conf-&gt;link_xattr_name, to-&gt;name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "failed to set xattr in dict for %s (linkto:%s)",</div><div class='del'>-                                loc-&gt;path, to-&gt;name);</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_setxattr (old_target, loc, dict, 0, NULL, NULL);</div><div class='del'>-                if (ret &amp;&amp; -ret != ESTALE &amp;&amp; -ret != ENOENT) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "failed to set xattr on %s in %s",</div><div class='del'>-                                loc-&gt;path, old_target-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else if (-ret == ESTALE || -ret == ENOENT) {</div><div class='del'>-                       /* The failure ESTALE indicates that the linkto</div><div class='del'>-                        * file on the hashed subvol might have been deleted.</div><div class='del'>-                        * In this case will create a linkto file with new target</div><div class='del'>-                        * as linkto xattr value*/</div><div class='del'>-                        linkto_fd = fd_create (loc-&gt;inode, DHT_REBALANCE_PID);</div><div class='del'>-                        if (!linkto_fd) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                        "%s: fd create failed", loc-&gt;path);</div><div class='del'>-                                *fop_errno = ENOMEM;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = syncop_create (old_target, loc, O_RDWR,</div><div class='del'>-                                             DHT_LINKFILE_MODE, linkto_fd,</div><div class='del'>-                                             NULL, dict, NULL);</div><div class='del'>-                        if (ret != 0 &amp;&amp; -ret != EEXIST &amp;&amp; -ret != ESTALE) {</div><div class='del'>-                                *fop_errno = -ret;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                        "failed to create linkto file on %s in %s",</div><div class='del'>-                                        loc-&gt;path, old_target-&gt;name);</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else if (ret == 0) {</div><div class='del'>-                                ret = syncop_fsetattr (old_target, linkto_fd, &amp;stbuf,</div><div class='del'>-                                                       (GF_SET_ATTR_UID | GF_SET_ATTR_GID),</div><div class='del'>-                                                       NULL, NULL, NULL, NULL);</div><div class='del'>-                                if (ret &lt; 0) {</div><div class='del'>-                                        *fop_errno = -ret;</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                                "chown failed for %s on %s",</div><div class='del'>-                                                loc-&gt;path, old_target-&gt;name);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                ret = -1;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                       DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                       "failed to create linkto file on %s in %s", loc-&gt;path,</div><div class='add'>+                       old_target-&gt;name);</div><div class='add'>+                goto out;</div><div class='add'>+            } else if (ret == 0) {</div><div class='add'>+                ret = syncop_fsetattr(old_target, linkto_fd, &amp;stbuf,</div><div class='add'>+                                      (GF_SET_ATTR_UID | GF_SET_ATTR_GID), NULL,</div><div class='add'>+                                      NULL, NULL, NULL);</div><div class='add'>+                if (ret &lt; 0) {</div><div class='add'>+                    *fop_errno = -ret;</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                           DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                           "chown failed for %s on %s", loc-&gt;path,</div><div class='add'>+                           old_target-&gt;name);</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        clean_dst = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* Posix acls are not set on DHT linkto files as part of the initial</div><div class='del'>-         * initial xattrs set on the dst file, so these need</div><div class='del'>-         * to be set on the dst file after the linkto attrs are removed.</div><div class='del'>-         * TODO: Optimize this.</div><div class='del'>-         */</div><div class='del'>-        if (xattr) {</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-                xattr = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Set only the Posix ACLs this time */</div><div class='del'>-        ret = syncop_getxattr (from, loc, &amp;xattr, POSIX_ACL_ACCESS_XATTR,</div><div class='del'>-                               NULL, NULL);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    clean_dst = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* Posix acls are not set on DHT linkto files as part of the initial</div><div class='add'>+     * initial xattrs set on the dst file, so these need</div><div class='add'>+     * to be set on the dst file after the linkto attrs are removed.</div><div class='add'>+     * TODO: Optimize this.</div><div class='add'>+     */</div><div class='add'>+    if (xattr) {</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+        xattr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Set only the Posix ACLs this time */</div><div class='add'>+    ret = syncop_getxattr(from, loc, &amp;xattr, POSIX_ACL_ACCESS_XATTR, NULL,</div><div class='add'>+                          NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if ((-ret != ENODATA) &amp;&amp; (-ret != ENOATTR)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed:"</div><div class='add'>+                   "%s: failed to get xattr from %s",</div><div class='add'>+                   loc-&gt;path, from-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = syncop_setxattr(to, loc, xattr, 0, NULL, NULL);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                if ((-ret != ENODATA) &amp;&amp; (-ret != ENOATTR)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed:"</div><div class='del'>-                                "%s: failed to get xattr from %s",</div><div class='del'>-                                loc-&gt;path, from-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                }</div><div class='add'>+            /* Potential problem here where Posix ACLs will</div><div class='add'>+             * not be set on the target file */</div><div class='add'>+</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed:"</div><div class='add'>+                   "%s: failed to set xattr on %s",</div><div class='add'>+                   loc-&gt;path, to-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* store size of previous migrated file  */</div><div class='add'>+    if (defrag &amp;&amp; defrag-&gt;tier_conf.is_tier) {</div><div class='add'>+        if (from != TIER_HASHED_SUBVOL) {</div><div class='add'>+            defrag-&gt;tier_conf.st_last_promoted_size = stbuf.ia_size;</div><div class='ctx'>         } else {</div><div class='del'>-                ret = syncop_setxattr (to, loc, xattr, 0, NULL, NULL);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        /* Potential problem here where Posix ACLs will</div><div class='del'>-                         * not be set on the target file */</div><div class='del'>-</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed:"</div><div class='del'>-                                "%s: failed to set xattr on %s",</div><div class='del'>-                                loc-&gt;path, to-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* store size of previous migrated file  */</div><div class='del'>-        if (defrag &amp;&amp; defrag-&gt;tier_conf.is_tier) {</div><div class='del'>-                if (from != TIER_HASHED_SUBVOL) {</div><div class='del'>-                        defrag-&gt;tier_conf.st_last_promoted_size = stbuf.ia_size;</div><div class='del'>-                } else {</div><div class='del'>-                        /* Don't delete the linkto file on the hashed subvol */</div><div class='del'>-                        delete_src_linkto = _gf_false;</div><div class='del'>-                        defrag-&gt;tier_conf.st_last_demoted_size = stbuf.ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* The src file is being unlinked after this so we don't need</div><div class='del'>-           to clean it up */</div><div class='del'>-        clean_src = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* Make the source as a linkfile first before deleting it */</div><div class='del'>-        empty_iatt.ia_prot.sticky = 1;</div><div class='del'>-        ret = syncop_fsetattr (from, src_fd, &amp;empty_iatt,</div><div class='del'>-                               GF_SET_ATTR_MODE, NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed:"</div><div class='del'>-                        "%s: failed to perform setattr on %s ",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto metaunlock;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-       /* Free up the data blocks on the source node, as the whole</div><div class='del'>-           file is migrated */</div><div class='del'>-        ret = syncop_ftruncate (from, src_fd, 0, NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "%s: failed to perform truncate on %s (%s)",</div><div class='del'>-                        loc-&gt;path, from-&gt;name, strerror (-ret));</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* remove the 'linkto' xattr from the destination */</div><div class='del'>-        ret = syncop_fremovexattr (to, dst_fd, conf-&gt;link_xattr_name, 0, NULL);</div><div class='add'>+            /* Don't delete the linkto file on the hashed subvol */</div><div class='add'>+            delete_src_linkto = _gf_false;</div><div class='add'>+            defrag-&gt;tier_conf.st_last_demoted_size = stbuf.ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* The src file is being unlinked after this so we don't need</div><div class='add'>+       to clean it up */</div><div class='add'>+    clean_src = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* Make the source as a linkfile first before deleting it */</div><div class='add'>+    empty_iatt.ia_prot.sticky = 1;</div><div class='add'>+    ret = syncop_fsetattr(from, src_fd, &amp;empty_iatt, GF_SET_ATTR_MODE, NULL,</div><div class='add'>+                          NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed:"</div><div class='add'>+               "%s: failed to perform setattr on %s ",</div><div class='add'>+               loc-&gt;path, from-&gt;name);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto metaunlock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Free up the data blocks on the source node, as the whole</div><div class='add'>+        file is migrated */</div><div class='add'>+    ret = syncop_ftruncate(from, src_fd, 0, NULL, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "%s: failed to perform truncate on %s (%s)", loc-&gt;path,</div><div class='add'>+               from-&gt;name, strerror(-ret));</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* remove the 'linkto' xattr from the destination */</div><div class='add'>+    ret = syncop_fremovexattr(to, dst_fd, conf-&gt;link_xattr_name, 0, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "%s: failed to perform removexattr on %s (%s)", loc-&gt;path,</div><div class='add'>+               to-&gt;name, strerror(-ret));</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Do a stat and check the gfid before unlink */</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Cached file changes its state from non-linkto to linkto file after</div><div class='add'>+     * migrating data. If lookup from any other mount-point is performed,</div><div class='add'>+     * converted-linkto-cached file will be treated as a stale and will be</div><div class='add'>+     * unlinked. But by this time, file is already migrated. So further</div><div class='add'>+     * failure because of ENOENT should  not be treated as error</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = syncop_stat(from, loc, &amp;empty_iatt, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "%s: failed to do a stat on %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+</div><div class='add'>+        if (-ret != ENOENT) {</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto metaunlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        rcvd_enoent_from_src = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((gf_uuid_compare(empty_iatt.ia_gfid, loc-&gt;gfid) == 0) &amp;&amp;</div><div class='add'>+        (!rcvd_enoent_from_src) &amp;&amp; delete_src_linkto) {</div><div class='add'>+        /* take out the source from namespace */</div><div class='add'>+        ret = syncop_unlink(from, loc, NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "%s: failed to perform removexattr on %s (%s)",</div><div class='del'>-                        loc-&gt;path, to-&gt;name, strerror (-ret));</div><div class='del'>-                *fop_errno = -ret;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: failed to perform unlink on %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto metaunlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Do a stat and check the gfid before unlink */</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Cached file changes its state from non-linkto to linkto file after</div><div class='del'>-         * migrating data. If lookup from any other mount-point is performed,</div><div class='del'>-         * converted-linkto-cached file will be treated as a stale and will be</div><div class='del'>-         * unlinked. But by this time, file is already migrated. So further</div><div class='del'>-         * failure because of ENOENT should  not be treated as error</div><div class='del'>-         */</div><div class='add'>+    ret = syncop_lookup(this, loc, NULL, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, -ret,</div><div class='add'>+                     "%s: failed to lookup the file on subvolumes", loc-&gt;path);</div><div class='add'>+        *fop_errno = -ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_stat (from, loc, &amp;empty_iatt, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "%s: failed to do a stat on %s",</div><div class='del'>-                        loc-&gt;path, from-&gt;name);</div><div class='del'>-</div><div class='del'>-                if (-ret != ENOENT) {</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto metaunlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                rcvd_enoent_from_src = 1;</div><div class='del'>-        }</div><div class='add'>+    gf_msg(this-&gt;name, log_level, 0, DHT_MSG_MIGRATE_FILE_COMPLETE,</div><div class='add'>+           "completed migration of %s from subvolume %s to %s", loc-&gt;path,</div><div class='add'>+           from-&gt;name, to-&gt;name);</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        if ((gf_uuid_compare (empty_iatt.ia_gfid, loc-&gt;gfid) == 0 ) &amp;&amp;</div><div class='del'>-            (!rcvd_enoent_from_src) &amp;&amp; delete_src_linkto) {</div><div class='del'>-                /* take out the source from namespace */</div><div class='del'>-                ret = syncop_unlink (from, loc, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: failed to perform unlink on %s",</div><div class='del'>-                                loc-&gt;path, from-&gt;name);</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto metaunlock;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (this, loc, NULL, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, -ret,</div><div class='del'>-                              "%s: failed to lookup the file on subvolumes",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                *fop_errno = -ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, log_level, 0,</div><div class='del'>-                DHT_MSG_MIGRATE_FILE_COMPLETE,</div><div class='del'>-                "completed migration of %s from subvolume %s to %s",</div><div class='del'>-                loc-&gt;path, from-&gt;name, to-&gt;name);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> metaunlock:</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;lock_migration_enabled &amp;&amp; meta_locked) {</div><div class='add'>+    if (conf-&gt;lock_migration_enabled &amp;&amp; meta_locked) {</div><div class='add'>+        dict_del(meta_dict, GF_META_LOCK_KEY);</div><div class='ctx'> </div><div class='del'>-                dict_del (meta_dict, GF_META_LOCK_KEY);</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (meta_dict, GF_META_UNLOCK_KEY, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Trace dict_set failed");</div><div class='del'>-</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (clean_dst == _gf_false)</div><div class='del'>-                        ret = dict_set_int32 (meta_dict, "status", 1);</div><div class='del'>-                else</div><div class='del'>-                        ret = dict_set_int32 (meta_dict, "status", 0);</div><div class='del'>-</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Trace dict_set failed");</div><div class='del'>-</div><div class='del'>-                        *fop_errno = ENOMEM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_setxattr (from, loc, meta_dict, 0, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Trace syncop_setxattr meta unlock failed");</div><div class='del'>-</div><div class='del'>-                        *fop_errno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        if (clean_src) {</div><div class='del'>-                /* Revert source mode and xattr changes*/</div><div class='del'>-                lk_ret = __dht_migration_cleanup_src_file (this, loc, src_fd,</div><div class='del'>-                                                        from, &amp;src_ia_prot);</div><div class='del'>-                if (lk_ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: failed to cleanup source file on %s",</div><div class='del'>-                                loc-&gt;path, from-&gt;name);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        ret = dict_set_int32(meta_dict, GF_META_UNLOCK_KEY, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Trace dict_set failed");</div><div class='ctx'> </div><div class='del'>-        /* reset the destination back to 0 */</div><div class='del'>-        if (clean_dst) {</div><div class='del'>-                lk_ret = syncop_ftruncate (to, dst_fd, 0, NULL, NULL,</div><div class='del'>-                                           NULL, NULL);</div><div class='del'>-                if (lk_ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -lk_ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "Migrate file failed: "</div><div class='del'>-                                "%s: failed to reset target size back to 0",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                }</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (inodelk_locked) {</div><div class='del'>-                flock.l_type = F_UNLCK;</div><div class='add'>+        if (clean_dst == _gf_false)</div><div class='add'>+            ret = dict_set_int32(meta_dict, "status", 1);</div><div class='add'>+        else</div><div class='add'>+            ret = dict_set_int32(meta_dict, "status", 0);</div><div class='ctx'> </div><div class='del'>-                lk_ret = syncop_inodelk (from, DHT_FILE_MIGRATE_DOMAIN,</div><div class='del'>-                                         &amp;tmp_loc, F_SETLK, &amp;flock, NULL, NULL);</div><div class='del'>-                if (lk_ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -lk_ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: failed to unlock file on %s",</div><div class='del'>-                                loc-&gt;path, from-&gt;name);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Trace dict_set failed");</div><div class='ctx'> </div><div class='del'>-        if (entrylk_locked) {</div><div class='del'>-                lk_ret = syncop_entrylk (hashed_subvol, DHT_ENTRY_SYNC_DOMAIN,</div><div class='del'>-                                         &amp;parent_loc, loc-&gt;name, ENTRYLK_UNLOCK,</div><div class='del'>-                                         ENTRYLK_UNLOCK, NULL, NULL);</div><div class='del'>-                if (lk_ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -lk_ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: failed to unlock entrylk on %s",</div><div class='del'>-                                loc-&gt;path, hashed_subvol-&gt;name);</div><div class='del'>-                }</div><div class='add'>+            *fop_errno = ENOMEM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (p_locked) {</div><div class='del'>-                plock.l_type = F_UNLCK;</div><div class='del'>-                lk_ret = syncop_lk (from, src_fd, F_SETLK, &amp;plock, NULL, NULL);</div><div class='add'>+        ret = syncop_setxattr(from, loc, meta_dict, 0, NULL, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Trace syncop_setxattr meta unlock failed");</div><div class='ctx'> </div><div class='del'>-                if (lk_ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -lk_ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "%s: failed to unlock file on %s",</div><div class='del'>-                                loc-&gt;path, from-&gt;name);</div><div class='del'>-                }</div><div class='add'>+            *fop_errno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dht_is_tier_xlator (this)) {</div><div class='del'>-                lk_ret = syncop_removexattr (to, loc,</div><div class='del'>-                                             GF_PROTECT_FROM_EXTERNAL_WRITES,</div><div class='del'>-                                             NULL, NULL);</div><div class='del'>-                if (lk_ret &amp;&amp; (lk_ret != -ENODATA) &amp;&amp; (lk_ret != -ENOATTR)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -lk_ret, 0,</div><div class='del'>-                                "%s: removexattr failed key %s", loc-&gt;path,</div><div class='del'>-                                GF_PROTECT_FROM_EXTERNAL_WRITES);</div><div class='del'>-                }</div><div class='add'>+out:</div><div class='add'>+    if (clean_src) {</div><div class='add'>+        /* Revert source mode and xattr changes*/</div><div class='add'>+        lk_ret = __dht_migration_cleanup_src_file(this, loc, src_fd, from,</div><div class='add'>+                                                  &amp;src_ia_prot);</div><div class='add'>+        if (lk_ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: failed to cleanup source file on %s", loc-&gt;path,</div><div class='add'>+                   from-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* reset the destination back to 0 */</div><div class='add'>+    if (clean_dst) {</div><div class='add'>+        lk_ret = syncop_ftruncate(to, dst_fd, 0, NULL, NULL, NULL, NULL);</div><div class='add'>+        if (lk_ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -lk_ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "Migrate file failed: "</div><div class='add'>+                   "%s: failed to reset target size back to 0",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (inodelk_locked) {</div><div class='add'>+        flock.l_type = F_UNLCK;</div><div class='add'>+</div><div class='add'>+        lk_ret = syncop_inodelk(from, DHT_FILE_MIGRATE_DOMAIN, &amp;tmp_loc,</div><div class='add'>+                                F_SETLK, &amp;flock, NULL, NULL);</div><div class='add'>+        if (lk_ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -lk_ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: failed to unlock file on %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (entrylk_locked) {</div><div class='add'>+        lk_ret = syncop_entrylk(hashed_subvol, DHT_ENTRY_SYNC_DOMAIN,</div><div class='add'>+                                &amp;parent_loc, loc-&gt;name, ENTRYLK_UNLOCK,</div><div class='add'>+                                ENTRYLK_UNLOCK, NULL, NULL);</div><div class='add'>+        if (lk_ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -lk_ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: failed to unlock entrylk on %s", loc-&gt;path,</div><div class='add'>+                   hashed_subvol-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (p_locked) {</div><div class='add'>+        plock.l_type = F_UNLCK;</div><div class='add'>+        lk_ret = syncop_lk(from, src_fd, F_SETLK, &amp;plock, NULL, NULL);</div><div class='add'>+</div><div class='add'>+        if (lk_ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -lk_ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "%s: failed to unlock file on %s", loc-&gt;path, from-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!dht_is_tier_xlator(this)) {</div><div class='add'>+        lk_ret = syncop_removexattr(to, loc, GF_PROTECT_FROM_EXTERNAL_WRITES,</div><div class='add'>+                                    NULL, NULL);</div><div class='add'>+        if (lk_ret &amp;&amp; (lk_ret != -ENODATA) &amp;&amp; (lk_ret != -ENOATTR)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -lk_ret, 0,</div><div class='add'>+                   "%s: removexattr failed key %s", loc-&gt;path,</div><div class='add'>+                   GF_PROTECT_FROM_EXTERNAL_WRITES);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        if (xattr_rsp)</div><div class='del'>-                dict_unref (xattr_rsp);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    if (xattr_rsp)</div><div class='add'>+        dict_unref(xattr_rsp);</div><div class='ctx'> </div><div class='del'>-        if (dst_fd)</div><div class='del'>-                syncop_close (dst_fd);</div><div class='del'>-        if (src_fd)</div><div class='del'>-                syncop_close (src_fd);</div><div class='del'>-        if (linkto_fd)</div><div class='del'>-                syncop_close (linkto_fd);</div><div class='add'>+    if (dst_fd)</div><div class='add'>+        syncop_close(dst_fd);</div><div class='add'>+    if (src_fd)</div><div class='add'>+        syncop_close(src_fd);</div><div class='add'>+    if (linkto_fd)</div><div class='add'>+        syncop_close(linkto_fd);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;tmp_loc);</div><div class='del'>-        loc_wipe (&amp;parent_loc);</div><div class='add'>+    loc_wipe(&amp;tmp_loc);</div><div class='add'>+    loc_wipe(&amp;parent_loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rebalance_task (void *data)</div><div class='add'>+rebalance_task(void *data)</div><div class='ctx'> {</div><div class='del'>-        int           ret   = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        call_frame_t *frame = NULL;</div><div class='del'>-        int           fop_errno = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    int fop_errno = 0;</div><div class='ctx'> </div><div class='del'>-        frame = data;</div><div class='add'>+    frame = data;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        /* This function is 'synchrounous', hence if it returns,</div><div class='del'>-           we are done with the task */</div><div class='del'>-        ret = dht_migrate_file (THIS, &amp;local-&gt;loc, local-&gt;rebalance.from_subvol,</div><div class='del'>-                                local-&gt;rebalance.target_node, local-&gt;flags,</div><div class='del'>-                                &amp;fop_errno);</div><div class='add'>+    /* This function is 'synchrounous', hence if it returns,</div><div class='add'>+       we are done with the task */</div><div class='add'>+    ret = dht_migrate_file(THIS, &amp;local-&gt;loc, local-&gt;rebalance.from_subvol,</div><div class='add'>+                           local-&gt;rebalance.target_node, local-&gt;flags,</div><div class='add'>+                           &amp;fop_errno);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rebalance_task_completion (int op_ret, call_frame_t *sync_frame, void *data)</div><div class='add'>+rebalance_task_completion(int op_ret, call_frame_t *sync_frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        int32_t       op_errno   = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                /* Failure of migration process, mostly due to write process.</div><div class='del'>-                   as we can't preserve the exact errno, lets say there was</div><div class='del'>-                   no space to migrate-data</div><div class='del'>-                */</div><div class='del'>-                op_errno = ENOSPC;</div><div class='del'>-        } else if (op_ret == 1) {</div><div class='del'>-                /* migration didn't happen, but is not a failure, let the user</div><div class='del'>-                   understand that he doesn't have permission to migrate the</div><div class='del'>-                   file.</div><div class='del'>-                */</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EPERM;</div><div class='del'>-        } else if (op_ret != 0) {</div><div class='del'>-                op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-        }</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (setxattr, sync_frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        /* Failure of migration process, mostly due to write process.</div><div class='add'>+           as we can't preserve the exact errno, lets say there was</div><div class='add'>+           no space to migrate-data</div><div class='add'>+        */</div><div class='add'>+        op_errno = ENOSPC;</div><div class='add'>+    } else if (op_ret == 1) {</div><div class='add'>+        /* migration didn't happen, but is not a failure, let the user</div><div class='add'>+           understand that he doesn't have permission to migrate the</div><div class='add'>+           file.</div><div class='add'>+        */</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EPERM;</div><div class='add'>+    } else if (op_ret != 0) {</div><div class='add'>+        op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DHT_STACK_UNWIND(setxattr, sync_frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_start_rebalance_task (xlator_t *this, call_frame_t *frame)</div><div class='add'>+dht_start_rebalance_task(xlator_t *this, call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int           ret   = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, rebalance_task,</div><div class='del'>-                            rebalance_task_completion,</div><div class='del'>-                            frame, frame);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, rebalance_task,</div><div class='add'>+                       rebalance_task_completion, frame, frame);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_listener_stop (xlator_t *this)</div><div class='add'>+gf_listener_stop(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t  *ctx = NULL;</div><div class='del'>-        cmd_args_t       *cmd_args = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-        GF_ASSERT (ctx);</div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='del'>-        if (cmd_args-&gt;sock_file) {</div><div class='del'>-                ret = sys_unlink (cmd_args-&gt;sock_file);</div><div class='del'>-                if (ret &amp;&amp; (ENOENT == errno)) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        DHT_MSG_SOCKET_ERROR,</div><div class='del'>-                        "Failed to unlink listener "</div><div class='del'>-                        "socket %s", cmd_args-&gt;sock_file);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    GF_ASSERT(ctx);</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    if (cmd_args-&gt;sock_file) {</div><div class='add'>+        ret = sys_unlink(cmd_args-&gt;sock_file);</div><div class='add'>+        if (ret &amp;&amp; (ENOENT == errno)) {</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, DHT_MSG_SOCKET_ERROR,</div><div class='add'>+               "Failed to unlink listener "</div><div class='add'>+               "socket %s",</div><div class='add'>+               cmd_args-&gt;sock_file);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_build_root_inode (xlator_t *this, inode_t **inode)</div><div class='add'>+dht_build_root_inode(xlator_t *this, inode_t **inode)</div><div class='ctx'> {</div><div class='del'>-        inode_table_t    *itable        = NULL;</div><div class='del'>-        uuid_t            root_gfid     = {0, };</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    uuid_t root_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        itable = inode_table_new (0, this);</div><div class='del'>-        if (!itable)</div><div class='del'>-                return;</div><div class='add'>+    itable = inode_table_new(0, this);</div><div class='add'>+    if (!itable)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        root_gfid[15] = 1;</div><div class='del'>-        *inode = inode_find (itable, root_gfid);</div><div class='add'>+    root_gfid[15] = 1;</div><div class='add'>+    *inode = inode_find(itable, root_gfid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_build_root_loc (inode_t *inode, loc_t *loc)</div><div class='add'>+dht_build_root_loc(inode_t *inode, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        loc-&gt;path = "/";</div><div class='del'>-        loc-&gt;inode = inode;</div><div class='del'>-        loc-&gt;inode-&gt;ia_type = IA_IFDIR;</div><div class='del'>-        memset (loc-&gt;gfid, 0, 16);</div><div class='del'>-        loc-&gt;gfid[15] = 1;</div><div class='add'>+    loc-&gt;path = "/";</div><div class='add'>+    loc-&gt;inode = inode;</div><div class='add'>+    loc-&gt;inode-&gt;ia_type = IA_IFDIR;</div><div class='add'>+    memset(loc-&gt;gfid, 0, 16);</div><div class='add'>+    loc-&gt;gfid[15] = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* return values: 1 -&gt; error, bug ignore and continue</div><div class='ctx'>                   0 -&gt; proceed</div><div class='ctx'>                  -1 -&gt; error, handle it */</div><div class='ctx'> int32_t</div><div class='del'>-gf_defrag_handle_migrate_error (int32_t op_errno, gf_defrag_info_t *defrag)</div><div class='add'>+gf_defrag_handle_migrate_error(int32_t op_errno, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        /* if errno is not ENOTCONN, we can still continue</div><div class='del'>-           with rebalance process */</div><div class='del'>-        if (op_errno != ENOTCONN) {</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (op_errno == ENOTCONN) {</div><div class='del'>-                /* Most probably mount point went missing (mostly due</div><div class='del'>-                   to a brick down), say rebalance failure to user,</div><div class='del'>-                   let him restart it if everything is fine */</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    /* if errno is not ENOTCONN, we can still continue</div><div class='add'>+       with rebalance process */</div><div class='add'>+    if (op_errno != ENOTCONN) {</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_errno == ENOTCONN) {</div><div class='add'>+        /* Most probably mount point went missing (mostly due</div><div class='add'>+           to a brick down), say rebalance failure to user,</div><div class='add'>+           let him restart it if everything is fine */</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-gf_defrag_pattern_match (gf_defrag_info_t *defrag, char *name, uint64_t size)</div><div class='add'>+gf_defrag_pattern_match(gf_defrag_info_t *defrag, char *name, uint64_t size)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_pattern_list_t *trav = NULL;</div><div class='del'>-        gf_boolean_t               match = _gf_false;</div><div class='del'>-        gf_boolean_t               ret = _gf_false;</div><div class='add'>+    gf_defrag_pattern_list_t *trav = NULL;</div><div class='add'>+    gf_boolean_t match = _gf_false;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", defrag, out);</div><div class='ctx'> </div><div class='del'>-        trav = defrag-&gt;defrag_pattern;</div><div class='del'>-        while (trav) {</div><div class='del'>-                if (!fnmatch (trav-&gt;path_pattern, name, FNM_NOESCAPE)) {</div><div class='del'>-                        match = _gf_true;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    trav = defrag-&gt;defrag_pattern;</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (!fnmatch(trav-&gt;path_pattern, name, FNM_NOESCAPE)) {</div><div class='add'>+            match = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((match == _gf_true) &amp;&amp; (size &gt;= trav-&gt;size))</div><div class='del'>-                ret = _gf_true;</div><div class='add'>+    if ((match == _gf_true) &amp;&amp; (size &gt;= trav-&gt;size))</div><div class='add'>+        ret = _gf_true;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int dht_dfreaddirp_done (dht_dfoffset_ctx_t *offset_var, int cnt) {</div><div class='del'>-</div><div class='del'>-        int i;</div><div class='del'>-        int result = 1;</div><div class='add'>+int</div><div class='add'>+dht_dfreaddirp_done(dht_dfoffset_ctx_t *offset_var, int cnt)</div><div class='add'>+{</div><div class='add'>+    int i;</div><div class='add'>+    int result = 1;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                if (offset_var[i].readdir_done == 0) {</div><div class='del'>-                        result = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+        if (offset_var[i].readdir_done == 0) {</div><div class='add'>+            result = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        return result;</div><div class='add'>+    }</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int static</div><div class='del'>-gf_defrag_ctx_subvols_init (dht_dfoffset_ctx_t *offset_var, xlator_t *this) {</div><div class='del'>-</div><div class='del'>-        int i;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='add'>+int static gf_defrag_ctx_subvols_init(dht_dfoffset_ctx_t *offset_var,</div><div class='add'>+                                      xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int i;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf)</div><div class='del'>-               return -1;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;local_subvols_cnt; i++) {</div><div class='del'>-               offset_var[i].this = conf-&gt;local_subvols[i];</div><div class='del'>-               offset_var[i].offset = (off_t) 0;</div><div class='del'>-               offset_var[i].readdir_done = 0;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;local_subvols_cnt; i++) {</div><div class='add'>+        offset_var[i].this = conf-&gt;local_subvols[i];</div><div class='add'>+        offset_var[i].offset = (off_t)0;</div><div class='add'>+        offset_var[i].readdir_done = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-dht_get_first_non_null_index (subvol_nodeuuids_info_t *entry)</div><div class='add'>+dht_get_first_non_null_index(subvol_nodeuuids_info_t *entry)</div><div class='ctx'> {</div><div class='del'>-        int      i        = 0;</div><div class='del'>-        int      index    = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int index = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; entry-&gt;count; i++) {</div><div class='del'>-                if (!gf_uuid_is_null (entry-&gt;elements[i].uuid)) {</div><div class='del'>-                        index = i;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; entry-&gt;count; i++) {</div><div class='add'>+        if (!gf_uuid_is_null(entry-&gt;elements[i].uuid)) {</div><div class='add'>+            index = i;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (i == entry-&gt;count) {</div><div class='del'>-                index = -1;</div><div class='del'>-        }</div><div class='add'>+    if (i == entry-&gt;count) {</div><div class='add'>+        index = -1;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return index;</div><div class='add'>+    return index;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Return value</div><div class='ctx'>  * 0 : this node does not migrate the file</div><div class='ctx'>  * 1 : this node migrates the file</div><div class='hunk'>@@ -2688,1022 +2595,986 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_should_i_migrate (xlator_t *this, int local_subvol_index, uuid_t gfid)</div><div class='add'>+gf_defrag_should_i_migrate(xlator_t *this, int local_subvol_index, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        int         ret               = 0;</div><div class='del'>-        int         i                 = local_subvol_index;</div><div class='del'>-        char       *str               = NULL;</div><div class='del'>-        uint32_t    hashval           = 0;</div><div class='del'>-        int32_t     index             = 0;</div><div class='del'>-        dht_conf_t *conf              = NULL;</div><div class='del'>-        char        buf[UUID_CANONICAL_FORM_LEN + 1] = {0, };</div><div class='del'>-        subvol_nodeuuids_info_t *entry = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Pure distribute. A subvol in this case</div><div class='del'>-            will be handled by only one node */</div><div class='del'>-</div><div class='del'>-        entry = &amp;(conf-&gt;local_nodeuuids[i]);</div><div class='del'>-        if (entry-&gt;count == 1) {</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        str = uuid_utoa_r (gfid, buf);</div><div class='del'>-        ret = dht_hash_compute (this, 0, str, &amp;hashval);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                index = (hashval % entry-&gt;count);</div><div class='del'>-                if (entry-&gt;elements[index].info</div><div class='del'>-                                 == REBAL_NODEUUID_MINE) {</div><div class='del'>-                        /* Index matches this node's nodeuuid.*/</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Brick down - some other node has to migrate these files*/</div><div class='del'>-                if (gf_uuid_is_null (entry-&gt;elements[index].uuid)) {</div><div class='del'>-                        /* Fall back to the first non-null index */</div><div class='del'>-                        index = dht_get_first_non_null_index (entry);</div><div class='del'>-</div><div class='del'>-                        if (index == -1) {</div><div class='del'>-                                /* None of the bricks in the subvol are up.</div><div class='del'>-                                 * CHILD_DOWN will kill the process soon */</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = local_subvol_index;</div><div class='add'>+    char *str = NULL;</div><div class='add'>+    uint32_t hashval = 0;</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char buf[UUID_CANONICAL_FORM_LEN + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    subvol_nodeuuids_info_t *entry = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Pure distribute. A subvol in this case</div><div class='add'>+        will be handled by only one node */</div><div class='add'>+</div><div class='add'>+    entry = &amp;(conf-&gt;local_nodeuuids[i]);</div><div class='add'>+    if (entry-&gt;count == 1) {</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    str = uuid_utoa_r(gfid, buf);</div><div class='add'>+    ret = dht_hash_compute(this, 0, str, &amp;hashval);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        index = (hashval % entry-&gt;count);</div><div class='add'>+        if (entry-&gt;elements[index].info == REBAL_NODEUUID_MINE) {</div><div class='add'>+            /* Index matches this node's nodeuuid.*/</div><div class='add'>+            ret = 1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* Brick down - some other node has to migrate these files*/</div><div class='add'>+        if (gf_uuid_is_null(entry-&gt;elements[index].uuid)) {</div><div class='add'>+            /* Fall back to the first non-null index */</div><div class='add'>+            index = dht_get_first_non_null_index(entry);</div><div class='add'>+</div><div class='add'>+            if (index == -1) {</div><div class='add'>+                /* None of the bricks in the subvol are up.</div><div class='add'>+                 * CHILD_DOWN will kill the process soon */</div><div class='ctx'> </div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        if (entry-&gt;elements[index].info == REBAL_NODEUUID_MINE) {</div><div class='del'>-                                /* Index matches this node's nodeuuid.*/</div><div class='del'>-                                ret = 1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (entry-&gt;elements[index].info == REBAL_NODEUUID_MINE) {</div><div class='add'>+                /* Index matches this node's nodeuuid.*/</div><div class='add'>+                ret = 1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_defrag_migrate_single_file (void *opaque)</div><div class='add'>+gf_defrag_migrate_single_file(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this           = NULL;</div><div class='del'>-        dht_conf_t              *conf           = NULL;</div><div class='del'>-        gf_defrag_info_t        *defrag         = NULL;</div><div class='del'>-        int                      ret            = 0;</div><div class='del'>-        gf_dirent_t             *entry          = NULL;</div><div class='del'>-        struct timeval           start          = {0,};</div><div class='del'>-        loc_t                    entry_loc      = {0,};</div><div class='del'>-        loc_t                   *loc            = NULL;</div><div class='del'>-        struct iatt              iatt           = {0,};</div><div class='del'>-        dict_t                  *migrate_data   = NULL;</div><div class='del'>-        struct timeval           end            = {0,};</div><div class='del'>-        double                   elapsed        = {0,};</div><div class='del'>-        struct dht_container    *rebal_entry    = NULL;</div><div class='del'>-        inode_t                 *inode          = NULL;</div><div class='del'>-        xlator_t                *hashed_subvol  = NULL;</div><div class='del'>-        xlator_t                *cached_subvol  = NULL;</div><div class='del'>-        call_frame_t            *statfs_frame   = NULL;</div><div class='del'>-        xlator_t                *old_THIS       = NULL;</div><div class='del'>-        data_t                  *tmp            = NULL;</div><div class='del'>-        int                      fop_errno      = 0;</div><div class='del'>-        gf_dht_migrate_data_type_t rebal_type   = GF_DHT_MIGRATE_DATA;</div><div class='del'>-        char                     value[MAX_REBAL_TYPE_SIZE]    = {0,};</div><div class='del'>-        struct iatt             *iatt_ptr       = NULL;</div><div class='del'>-        gf_boolean_t            update_skippedcount = _gf_true;</div><div class='del'>-        int                     i = 0;</div><div class='del'>-</div><div class='del'>-        rebal_entry = (struct dht_container *)opaque;</div><div class='del'>-        if (!rebal_entry) {</div><div class='del'>-                gf_log ("DHT", GF_LOG_ERROR, "rebal_entry is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    struct timeval start = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t entry_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *migrate_data = NULL;</div><div class='add'>+    struct timeval end = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    double elapsed = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct dht_container *rebal_entry = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    call_frame_t *statfs_frame = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+    data_t *tmp = NULL;</div><div class='add'>+    int fop_errno = 0;</div><div class='add'>+    gf_dht_migrate_data_type_t rebal_type = GF_DHT_MIGRATE_DATA;</div><div class='add'>+    char value[MAX_REBAL_TYPE_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt *iatt_ptr = NULL;</div><div class='add'>+    gf_boolean_t update_skippedcount = _gf_true;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    rebal_entry = (struct dht_container *)opaque;</div><div class='add'>+    if (!rebal_entry) {</div><div class='add'>+        gf_log("DHT", GF_LOG_ERROR, "rebal_entry is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this = rebal_entry-&gt;this;</div><div class='add'>+    this = rebal_entry-&gt;this;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        loc = rebal_entry-&gt;parent_loc;</div><div class='add'>+    loc = rebal_entry-&gt;parent_loc;</div><div class='ctx'> </div><div class='del'>-        migrate_data = rebal_entry-&gt;migrate_data;</div><div class='add'>+    migrate_data = rebal_entry-&gt;migrate_data;</div><div class='ctx'> </div><div class='del'>-        entry = rebal_entry-&gt;df_entry;</div><div class='del'>-        iatt_ptr = &amp;entry-&gt;d_stat;</div><div class='add'>+    entry = rebal_entry-&gt;df_entry;</div><div class='add'>+    iatt_ptr = &amp;entry-&gt;d_stat;</div><div class='ctx'> </div><div class='del'>-        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;stats == _gf_true) {</div><div class='del'>-                gettimeofday (&amp;start, NULL);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;defrag_pattern &amp;&amp;</div><div class='del'>-            (gf_defrag_pattern_match (defrag, entry-&gt;d_name,</div><div class='del'>-                                      entry-&gt;d_stat.ia_size) == _gf_false)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "pattern_match failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memset (&amp;entry_loc, 0, sizeof (entry_loc));</div><div class='del'>-</div><div class='del'>-        ret = dht_build_child_loc (this, &amp;entry_loc, loc, entry-&gt;d_name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        defrag-&gt;total_failures += 1;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;defrag-&gt;lock);</div><div class='add'>+    if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='add'>+    if (defrag-&gt;stats == _gf_true) {</div><div class='add'>+        gettimeofday(&amp;start, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Child loc build failed");</div><div class='add'>+    if (defrag-&gt;defrag_pattern &amp;&amp;</div><div class='add'>+        (gf_defrag_pattern_match(defrag, entry-&gt;d_name,</div><div class='add'>+                                 entry-&gt;d_stat.ia_size) == _gf_false)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "pattern_match failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    memset(&amp;entry_loc, 0, sizeof(entry_loc));</div><div class='ctx'> </div><div class='del'>-        if (!gf_defrag_should_i_migrate (this, rebal_entry-&gt;local_subvol_index,</div><div class='del'>-                                         entry-&gt;d_stat.ia_gfid)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Don't migrate %s ",</div><div class='del'>-                              entry_loc.path);</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dht_build_child_loc(this, &amp;entry_loc, loc, entry-&gt;d_name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            defrag-&gt;total_failures += 1;</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;defrag-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (entry_loc.gfid, entry-&gt;d_stat.ia_gfid);</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (entry_loc.pargfid, loc-&gt;gfid);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Child loc build failed");</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (this, &amp;entry_loc, &amp;iatt, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                        "Migrate file failed: %s lookup failed",</div><div class='del'>-                        entry_loc.path);</div><div class='del'>-</div><div class='del'>-                /* Increase failure count only for remove-brick op, so that</div><div class='del'>-                 * user is warned to check the removed-brick for any files left</div><div class='del'>-                 * unmigrated</div><div class='del'>-                 */</div><div class='del'>-                if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                        LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                defrag-&gt;total_failures += 1;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!gf_defrag_should_i_migrate(this, rebal_entry-&gt;local_subvol_index,</div><div class='add'>+                                    entry-&gt;d_stat.ia_gfid)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Don't migrate %s ", entry_loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iatt_ptr = &amp;iatt;</div><div class='add'>+    gf_uuid_copy(entry_loc.gfid, entry-&gt;d_stat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, &amp;entry_loc);</div><div class='del'>-        if (!hashed_subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                        "Failed to get hashed subvol for %s",</div><div class='del'>-                        entry_loc.path);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cached_subvol = dht_subvol_get_cached (this, entry_loc.inode);</div><div class='del'>-        if (!cached_subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_CACHED_SUBVOL_GET_FAILED,</div><div class='del'>-                        "Failed to get cached subvol for %s",</div><div class='del'>-                        entry_loc.path);</div><div class='del'>-</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_uuid_copy(entry_loc.pargfid, loc-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        if (hashed_subvol == cached_subvol) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_lookup(this, &amp;entry_loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+               "Migrate file failed: %s lookup failed", entry_loc.path);</div><div class='ctx'> </div><div class='del'>-        inode = inode_link (entry_loc.inode, entry_loc.parent, entry-&gt;d_name, &amp;iatt);</div><div class='del'>-        inode_unref (entry_loc.inode);</div><div class='del'>-        /* use the inode returned by inode_link */</div><div class='del'>-        entry_loc.inode = inode;</div><div class='del'>-</div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = this;</div><div class='del'>-        statfs_frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!statfs_frame) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, ENOMEM,</div><div class='del'>-                        "Insufficient memory. Frame creation failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        /* Increase failure count only for remove-brick op, so that</div><div class='add'>+         * user is warned to check the removed-brick for any files left</div><div class='add'>+         * unmigrated</div><div class='add'>+         */</div><div class='add'>+        if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+            LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                defrag-&gt;total_failures += 1;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;defrag-&gt;lock);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* async statfs information for honoring min-free-disk */</div><div class='del'>-        dht_get_du_info (statfs_frame, this, loc);</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp = dict_get (migrate_data, GF_XATTR_FILE_MIGRATE_KEY);</div><div class='del'>-        if (tmp) {</div><div class='del'>-                memcpy (value, tmp-&gt;data, tmp-&gt;len);</div><div class='del'>-                if (strcmp (value, "force") == 0)</div><div class='del'>-                        rebal_type = GF_DHT_MIGRATE_DATA_EVEN_IF_LINK_EXISTS;</div><div class='add'>+    iatt_ptr = &amp;iatt;</div><div class='ctx'> </div><div class='del'>-                if (conf-&gt;decommission_in_progress)</div><div class='del'>-                        rebal_type = GF_DHT_MIGRATE_HARDLINK;</div><div class='del'>-        }</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, &amp;entry_loc);</div><div class='add'>+    if (!hashed_subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "Failed to get hashed subvol for %s", entry_loc.path);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_migrate_file (this, &amp;entry_loc, cached_subvol,</div><div class='del'>-                                hashed_subvol, rebal_type, &amp;fop_errno);</div><div class='del'>-        if (ret == 1) {</div><div class='del'>-                if (fop_errno == ENOSPC) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "migrate-data skipped for"</div><div class='del'>-                                      " %s due to space constraints",</div><div class='del'>-                                      entry_loc.path);</div><div class='del'>-</div><div class='del'>-                        /* For remove-brick case if the source is not one of the</div><div class='del'>-                        * removed-brick, do not mark the error as failure */</div><div class='del'>-                        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                        if (conf-&gt;decommissioned_bricks[i] == cached_subvol) {</div><div class='del'>-                                                LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                                                {</div><div class='del'>-                                                    defrag-&gt;total_failures += 1;</div><div class='del'>-                                                    update_skippedcount = _gf_false;</div><div class='del'>-                                                }</div><div class='del'>-                                                UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-</div><div class='del'>-                                                break;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    cached_subvol = dht_subvol_get_cached(this, entry_loc.inode);</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_CACHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "Failed to get cached subvol for %s", entry_loc.path);</div><div class='ctx'> </div><div class='del'>-                        if (update_skippedcount) {</div><div class='del'>-                                LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                                {</div><div class='del'>-                                        defrag-&gt;skipped += 1;</div><div class='del'>-                                }</div><div class='del'>-                                UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_MIGRATE_FILE_SKIPPED,</div><div class='del'>-                                        "File migration skipped for %s.",</div><div class='del'>-                                        entry_loc.path);</div><div class='del'>-                        }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                } else if (fop_errno == ENOTSUP) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "migrate-data skipped for"</div><div class='del'>-                                      " hardlink %s ", entry_loc.path);</div><div class='del'>-                        LOCK (&amp;defrag-&gt;lock);</div><div class='add'>+    if (hashed_subvol == cached_subvol) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode = inode_link(entry_loc.inode, entry_loc.parent, entry-&gt;d_name, &amp;iatt);</div><div class='add'>+    inode_unref(entry_loc.inode);</div><div class='add'>+    /* use the inode returned by inode_link */</div><div class='add'>+    entry_loc.inode = inode;</div><div class='add'>+</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = this;</div><div class='add'>+    statfs_frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!statfs_frame) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, ENOMEM,</div><div class='add'>+               "Insufficient memory. Frame creation failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* async statfs information for honoring min-free-disk */</div><div class='add'>+    dht_get_du_info(statfs_frame, this, loc);</div><div class='add'>+    THIS = old_THIS;</div><div class='add'>+</div><div class='add'>+    tmp = dict_get(migrate_data, GF_XATTR_FILE_MIGRATE_KEY);</div><div class='add'>+    if (tmp) {</div><div class='add'>+        memcpy(value, tmp-&gt;data, tmp-&gt;len);</div><div class='add'>+        if (strcmp(value, "force") == 0)</div><div class='add'>+            rebal_type = GF_DHT_MIGRATE_DATA_EVEN_IF_LINK_EXISTS;</div><div class='add'>+</div><div class='add'>+        if (conf-&gt;decommission_in_progress)</div><div class='add'>+            rebal_type = GF_DHT_MIGRATE_HARDLINK;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_migrate_file(this, &amp;entry_loc, cached_subvol, hashed_subvol,</div><div class='add'>+                           rebal_type, &amp;fop_errno);</div><div class='add'>+    if (ret == 1) {</div><div class='add'>+        if (fop_errno == ENOSPC) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "migrate-data skipped for"</div><div class='add'>+                         " %s due to space constraints",</div><div class='add'>+                         entry_loc.path);</div><div class='add'>+</div><div class='add'>+            /* For remove-brick case if the source is not one of the</div><div class='add'>+             * removed-brick, do not mark the error as failure */</div><div class='add'>+            if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                    if (conf-&gt;decommissioned_bricks[i] == cached_subvol) {</div><div class='add'>+                        LOCK(&amp;defrag-&gt;lock);</div><div class='ctx'>                         {</div><div class='del'>-                                defrag-&gt;skipped += 1;</div><div class='add'>+                            defrag-&gt;total_failures += 1;</div><div class='add'>+                            update_skippedcount = _gf_false;</div><div class='ctx'>                         }</div><div class='del'>-                        UNLOCK (&amp;defrag-&gt;lock);</div><div class='add'>+                        UNLOCK(&amp;defrag-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_SKIPPED,</div><div class='del'>-                                "File migration skipped for %s.",</div><div class='del'>-                                entry_loc.path);</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        } else if (ret &lt; 0) {</div><div class='del'>-                if (fop_errno != EEXIST) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, fop_errno,</div><div class='del'>-                                DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                                "migrate-data failed for %s", entry_loc.path);</div><div class='del'>-</div><div class='del'>-                        LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                defrag-&gt;total_failures += 1;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-</div><div class='add'>+            if (update_skippedcount) {</div><div class='add'>+                LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+                {</div><div class='add'>+                    defrag-&gt;skipped += 1;</div><div class='ctx'>                 }</div><div class='add'>+                UNLOCK(&amp;defrag-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                ret = gf_defrag_handle_migrate_error (fop_errno, defrag);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_MIGRATE_FILE_SKIPPED,</div><div class='add'>+                       "File migration skipped for %s.", entry_loc.path);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (!ret) {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, fop_errno,</div><div class='del'>-                               DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='del'>-                               "migrate-data on %s failed:", entry_loc.path);</div><div class='del'>-                } else if (ret == 1) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+        } else if (fop_errno == ENOTSUP) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "migrate-data skipped for"</div><div class='add'>+                         " hardlink %s ",</div><div class='add'>+                         entry_loc.path);</div><div class='add'>+            LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                defrag-&gt;skipped += 1;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;defrag-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_MIGRATE_FILE_SKIPPED,</div><div class='add'>+                   "File migration skipped for %s.", entry_loc.path);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                defrag-&gt;total_files += 1;</div><div class='del'>-                defrag-&gt;total_data += iatt.ia_size;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;defrag-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;stats == _gf_true) {</div><div class='del'>-                gettimeofday (&amp;end, NULL);</div><div class='del'>-                elapsed = (end.tv_sec - start.tv_sec) * 1e6 +</div><div class='del'>-                          (end.tv_usec - start.tv_usec);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO, "Migration of "</div><div class='del'>-                        "file:%s size:%"PRIu64" bytes took %.2f"</div><div class='del'>-                        "secs and ret: %d", entry_loc.name,</div><div class='del'>-                        iatt.ia_size, elapsed/1e6, ret);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    } else if (ret &lt; 0) {</div><div class='add'>+        if (fop_errno != EEXIST) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, fop_errno,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED, "migrate-data failed for %s",</div><div class='add'>+                   entry_loc.path);</div><div class='add'>+</div><div class='add'>+            LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                defrag-&gt;total_failures += 1;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;defrag-&gt;lock);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = gf_defrag_handle_migrate_error(fop_errno, defrag);</div><div class='add'>+</div><div class='add'>+        if (!ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, fop_errno,</div><div class='add'>+                   DHT_MSG_MIGRATE_FILE_FAILED,</div><div class='add'>+                   "migrate-data on %s failed:", entry_loc.path);</div><div class='add'>+        } else if (ret == 1) {</div><div class='add'>+            ret = 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        defrag-&gt;total_files += 1;</div><div class='add'>+        defrag-&gt;total_data += iatt.ia_size;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;defrag-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (defrag-&gt;stats == _gf_true) {</div><div class='add'>+        gettimeofday(&amp;end, NULL);</div><div class='add'>+        elapsed = (end.tv_sec - start.tv_sec) * 1e6 +</div><div class='add'>+                  (end.tv_usec - start.tv_usec);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+               "Migration of "</div><div class='add'>+               "file:%s size:%" PRIu64</div><div class='add'>+               " bytes took %.2f"</div><div class='add'>+               "secs and ret: %d",</div><div class='add'>+               entry_loc.name, iatt.ia_size, elapsed / 1e6, ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        if (statfs_frame) {</div><div class='del'>-                STACK_DESTROY (statfs_frame-&gt;root);</div><div class='del'>-        }</div><div class='add'>+    if (statfs_frame) {</div><div class='add'>+        STACK_DESTROY(statfs_frame-&gt;root);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (iatt_ptr) {</div><div class='del'>-                LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        defrag-&gt;size_processed += iatt_ptr-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;defrag-&gt;lock);</div><div class='add'>+    if (iatt_ptr) {</div><div class='add'>+        LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            defrag-&gt;size_processed += iatt_ptr-&gt;ia_size;</div><div class='ctx'>         }</div><div class='del'>-        loc_wipe (&amp;entry_loc);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+        UNLOCK(&amp;defrag-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    loc_wipe(&amp;entry_loc);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_defrag_task (void *opaque)</div><div class='add'>+gf_defrag_task(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        struct list_head        *q_head         = NULL;</div><div class='del'>-        struct dht_container    *iterator       = NULL;</div><div class='del'>-        gf_defrag_info_t        *defrag         = NULL;</div><div class='del'>-        int                      ret            = 0;</div><div class='del'>-        pid_t                    pid            = GF_CLIENT_PID_DEFRAG;</div><div class='del'>-</div><div class='del'>-        defrag = (gf_defrag_info_t *)opaque;</div><div class='del'>-        if (!defrag) {</div><div class='del'>-                gf_msg ("dht", GF_LOG_ERROR, 0, 0, "defrag is NULL");</div><div class='del'>-                goto out;</div><div class='add'>+    struct list_head *q_head = NULL;</div><div class='add'>+    struct dht_container *iterator = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    pid_t pid = GF_CLIENT_PID_DEFRAG;</div><div class='add'>+</div><div class='add'>+    defrag = (gf_defrag_info_t *)opaque;</div><div class='add'>+    if (!defrag) {</div><div class='add'>+        gf_msg("dht", GF_LOG_ERROR, 0, 0, "defrag is NULL");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    syncopctx_setfspid(&amp;pid);</div><div class='add'>+</div><div class='add'>+    q_head = &amp;(defrag-&gt;queue[0].list);</div><div class='add'>+</div><div class='add'>+    /* The following while loop will dequeue one entry from the defrag-&gt;queue</div><div class='add'>+       under lock. We will update the defrag-&gt;global_error only when there</div><div class='add'>+       is an error which is critical to stop the rebalance process. The stop</div><div class='add'>+       message will be intimated to other migrator threads by setting the</div><div class='add'>+       defrag-&gt;defrag_status to GF_DEFRAG_STATUS_FAILED.</div><div class='add'>+</div><div class='add'>+       In defrag-&gt;queue, a low watermark (MIN_MIGRATE_QUEUE_COUNT) is</div><div class='add'>+       maintained so that crawler does not starve the file migration</div><div class='add'>+       workers and a high watermark (MAX_MIGRATE_QUEUE_COUNT) so that</div><div class='add'>+       crawler does not go far ahead in filling up the queue.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    while (_gf_true) {</div><div class='add'>+        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+            pthread_cond_broadcast(&amp;defrag-&gt;rebalance_crawler_alarm);</div><div class='add'>+            pthread_cond_broadcast(&amp;defrag-&gt;parallel_migration_cond);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        syncopctx_setfspid (&amp;pid);</div><div class='add'>+        pthread_mutex_lock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+        {</div><div class='add'>+            /*Throttle down:</div><div class='add'>+              If the reconfigured count is less than current thread</div><div class='add'>+              count, then the current thread will sleep */</div><div class='add'>+</div><div class='add'>+            /*TODO: Need to refactor the following block to work</div><div class='add'>+             *under defrag-&gt;lock. For now access</div><div class='add'>+             * defrag-&gt;current_thread_count and rthcount under</div><div class='add'>+             * dfq_mutex lock */</div><div class='add'>+            while (!defrag-&gt;crawl_done &amp;&amp; (defrag-&gt;recon_thread_count &lt;</div><div class='add'>+                                           defrag-&gt;current_thread_count)) {</div><div class='add'>+                defrag-&gt;current_thread_count--;</div><div class='add'>+                gf_msg_debug("DHT", 0,</div><div class='add'>+                             "Thread sleeping. "</div><div class='add'>+                             "current thread count: %d",</div><div class='add'>+                             defrag-&gt;current_thread_count);</div><div class='add'>+</div><div class='add'>+                pthread_cond_wait(&amp;defrag-&gt;df_wakeup_thread,</div><div class='add'>+                                  &amp;defrag-&gt;dfq_mutex);</div><div class='add'>+</div><div class='add'>+                defrag-&gt;current_thread_count++;</div><div class='add'>+                gf_msg_debug("DHT", 0,</div><div class='add'>+                             "Thread wokeup. "</div><div class='add'>+                             "current thread count: %d",</div><div class='add'>+                             defrag-&gt;current_thread_count);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (defrag-&gt;q_entry_count) {</div><div class='add'>+                iterator = list_entry(q_head-&gt;next, typeof(*iterator), list);</div><div class='add'>+</div><div class='add'>+                gf_msg_debug("DHT", 0,</div><div class='add'>+                             "picking entry "</div><div class='add'>+                             "%s",</div><div class='add'>+                             iterator-&gt;df_entry-&gt;d_name);</div><div class='add'>+</div><div class='add'>+                list_del_init(&amp;(iterator-&gt;list));</div><div class='add'>+</div><div class='add'>+                defrag-&gt;q_entry_count--;</div><div class='add'>+</div><div class='add'>+                if ((defrag-&gt;q_entry_count &lt; MIN_MIGRATE_QUEUE_COUNT) &amp;&amp;</div><div class='add'>+                    defrag-&gt;wakeup_crawler) {</div><div class='add'>+                    pthread_cond_broadcast(&amp;defrag-&gt;rebalance_crawler_alarm);</div><div class='add'>+                }</div><div class='add'>+                pthread_mutex_unlock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+                ret = gf_defrag_migrate_single_file((void *)iterator);</div><div class='ctx'> </div><div class='del'>-        q_head = &amp;(defrag-&gt;queue[0].list);</div><div class='add'>+                /*Critical errors: ENOTCONN and ENOSPACE*/</div><div class='add'>+                if (ret) {</div><div class='add'>+                    dht_set_global_defrag_error(defrag, ret);</div><div class='ctx'> </div><div class='del'>-       /* The following while loop will dequeue one entry from the defrag-&gt;queue</div><div class='del'>-          under lock. We will update the defrag-&gt;global_error only when there</div><div class='del'>-          is an error which is critical to stop the rebalance process. The stop</div><div class='del'>-          message will be intimated to other migrator threads by setting the</div><div class='del'>-          defrag-&gt;defrag_status to GF_DEFRAG_STATUS_FAILED.</div><div class='add'>+                    defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='ctx'> </div><div class='del'>-          In defrag-&gt;queue, a low watermark (MIN_MIGRATE_QUEUE_COUNT) is</div><div class='del'>-          maintained so that crawler does not starve the file migration</div><div class='del'>-          workers and a high watermark (MAX_MIGRATE_QUEUE_COUNT) so that</div><div class='del'>-          crawler does not go far ahead in filling up the queue.</div><div class='del'>-        */</div><div class='add'>+                    pthread_cond_broadcast(&amp;defrag-&gt;rebalance_crawler_alarm);</div><div class='ctx'> </div><div class='del'>-        while (_gf_true) {</div><div class='add'>+                    pthread_cond_broadcast(&amp;defrag-&gt;parallel_migration_cond);</div><div class='ctx'> </div><div class='del'>-                if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                        pthread_cond_broadcast (</div><div class='del'>-                                &amp;defrag-&gt;rebalance_crawler_alarm);</div><div class='del'>-                        pthread_cond_broadcast (</div><div class='del'>-                                &amp;defrag-&gt;parallel_migration_cond);</div><div class='del'>-                        goto out;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                {</div><div class='del'>-</div><div class='del'>-                        /*Throttle down:</div><div class='del'>-                          If the reconfigured count is less than current thread</div><div class='del'>-                          count, then the current thread will sleep */</div><div class='del'>-</div><div class='del'>-                        /*TODO: Need to refactor the following block to work</div><div class='del'>-                         *under defrag-&gt;lock. For now access</div><div class='del'>-                         * defrag-&gt;current_thread_count and rthcount under</div><div class='del'>-                         * dfq_mutex lock */</div><div class='del'>-                        while (!defrag-&gt;crawl_done &amp;&amp;</div><div class='del'>-                              (defrag-&gt;recon_thread_count &lt;</div><div class='del'>-                                        defrag-&gt;current_thread_count)) {</div><div class='del'>-                                defrag-&gt;current_thread_count--;</div><div class='del'>-                                gf_msg_debug ("DHT", 0, "Thread sleeping. "</div><div class='del'>-                                              "current thread count: %d",</div><div class='del'>-                                              defrag-&gt;current_thread_count);</div><div class='del'>-</div><div class='del'>-                                pthread_cond_wait (</div><div class='del'>-                                           &amp;defrag-&gt;df_wakeup_thread,</div><div class='del'>-                                           &amp;defrag-&gt;dfq_mutex);</div><div class='del'>-</div><div class='del'>-                                defrag-&gt;current_thread_count++;</div><div class='del'>-                                gf_msg_debug ("DHT", 0, "Thread wokeup. "</div><div class='del'>-                                              "current thread count: %d",</div><div class='del'>-                                              defrag-&gt;current_thread_count);</div><div class='del'>-</div><div class='del'>-                        }</div><div class='add'>+                gf_defrag_free_container(iterator);</div><div class='add'>+</div><div class='add'>+                continue;</div><div class='add'>+            } else {</div><div class='add'>+                /* defrag-&gt;crawl_done flag is set means crawling</div><div class='add'>+                 file system is done and hence a list_empty when</div><div class='add'>+                 the above flag is set indicates there are no more</div><div class='add'>+                 entries to be added to the queue and rebalance is</div><div class='add'>+                 finished */</div><div class='add'>+</div><div class='add'>+                if (!defrag-&gt;crawl_done) {</div><div class='add'>+                    defrag-&gt;current_thread_count--;</div><div class='add'>+                    gf_msg_debug("DHT", 0,</div><div class='add'>+                                 "Thread "</div><div class='add'>+                                 "sleeping while  waiting "</div><div class='add'>+                                 "for migration entries. "</div><div class='add'>+                                 "current thread  count:%d",</div><div class='add'>+                                 defrag-&gt;current_thread_count);</div><div class='add'>+</div><div class='add'>+                    pthread_cond_wait(&amp;defrag-&gt;parallel_migration_cond,</div><div class='add'>+                                      &amp;defrag-&gt;dfq_mutex);</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        if (defrag-&gt;q_entry_count) {</div><div class='del'>-                                iterator = list_entry (q_head-&gt;next,</div><div class='del'>-                                                typeof(*iterator), list);</div><div class='del'>-</div><div class='del'>-                                gf_msg_debug ("DHT", 0, "picking entry "</div><div class='del'>-                                              "%s", iterator-&gt;df_entry-&gt;d_name);</div><div class='del'>-</div><div class='del'>-                                list_del_init (&amp;(iterator-&gt;list));</div><div class='del'>-</div><div class='del'>-                                defrag-&gt;q_entry_count--;</div><div class='del'>-</div><div class='del'>-                                if ((defrag-&gt;q_entry_count &lt;</div><div class='del'>-                                        MIN_MIGRATE_QUEUE_COUNT) &amp;&amp;</div><div class='del'>-                                        defrag-&gt;wakeup_crawler) {</div><div class='del'>-                                        pthread_cond_broadcast (</div><div class='del'>-                                              &amp;defrag-&gt;rebalance_crawler_alarm);</div><div class='del'>-                                }</div><div class='del'>-                                pthread_mutex_unlock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                                ret = gf_defrag_migrate_single_file</div><div class='del'>-                                                        ((void *)iterator);</div><div class='del'>-</div><div class='del'>-                                /*Critical errors: ENOTCONN and ENOSPACE*/</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        dht_set_global_defrag_error</div><div class='del'>-                                                         (defrag, ret);</div><div class='del'>-</div><div class='del'>-                                        defrag-&gt;defrag_status =</div><div class='del'>-                                                       GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-</div><div class='del'>-                                        pthread_cond_broadcast (</div><div class='del'>-                                             &amp;defrag-&gt;rebalance_crawler_alarm);</div><div class='del'>-</div><div class='del'>-                                        pthread_cond_broadcast (</div><div class='del'>-                                             &amp;defrag-&gt;parallel_migration_cond);</div><div class='del'>-</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                gf_defrag_free_container (iterator);</div><div class='del'>-</div><div class='del'>-                                continue;</div><div class='del'>-                        } else {</div><div class='del'>-</div><div class='del'>-                        /* defrag-&gt;crawl_done flag is set means crawling</div><div class='del'>-                         file system is done and hence a list_empty when</div><div class='del'>-                         the above flag is set indicates there are no more</div><div class='del'>-                         entries to be added to the queue and rebalance is</div><div class='del'>-                         finished */</div><div class='del'>-</div><div class='del'>-                                if (!defrag-&gt;crawl_done) {</div><div class='del'>-</div><div class='del'>-                                        defrag-&gt;current_thread_count--;</div><div class='del'>-                                        gf_msg_debug ("DHT", 0, "Thread "</div><div class='del'>-                                                      "sleeping while  waiting "</div><div class='del'>-                                                      "for migration entries. "</div><div class='del'>-                                                      "current thread  count:%d",</div><div class='del'>-                                                      defrag-&gt;current_thread_count);</div><div class='del'>-</div><div class='del'>-                                        pthread_cond_wait (</div><div class='del'>-                                           &amp;defrag-&gt;parallel_migration_cond,</div><div class='del'>-                                           &amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                if (defrag-&gt;crawl_done &amp;&amp;</div><div class='del'>-                                                 !defrag-&gt;q_entry_count) {</div><div class='del'>-                                        defrag-&gt;current_thread_count++;</div><div class='del'>-                                        gf_msg_debug ("DHT", 0, "Exiting thread");</div><div class='del'>-</div><div class='del'>-                                        pthread_cond_broadcast (</div><div class='del'>-                                             &amp;defrag-&gt;parallel_migration_cond);</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                } else {</div><div class='del'>-                                        defrag-&gt;current_thread_count++;</div><div class='del'>-                                        gf_msg_debug ("DHT", 0, "Thread woke up"</div><div class='del'>-                                                      " as found migrating entries. "</div><div class='del'>-                                                      "current thread count:%d",</div><div class='del'>-                                                      defrag-&gt;current_thread_count);</div><div class='del'>-</div><div class='del'>-                                        pthread_mutex_unlock</div><div class='del'>-                                                 (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                if (defrag-&gt;crawl_done &amp;&amp; !defrag-&gt;q_entry_count) {</div><div class='add'>+                    defrag-&gt;current_thread_count++;</div><div class='add'>+                    gf_msg_debug("DHT", 0, "Exiting thread");</div><div class='ctx'> </div><div class='add'>+                    pthread_cond_broadcast(&amp;defrag-&gt;parallel_migration_cond);</div><div class='add'>+                    goto unlock;</div><div class='add'>+                } else {</div><div class='add'>+                    defrag-&gt;current_thread_count++;</div><div class='add'>+                    gf_msg_debug("DHT", 0,</div><div class='add'>+                                 "Thread woke up"</div><div class='add'>+                                 " as found migrating entries. "</div><div class='add'>+                                 "current thread count:%d",</div><div class='add'>+                                 defrag-&gt;current_thread_count);</div><div class='add'>+</div><div class='add'>+                    pthread_mutex_unlock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='del'>-unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+        break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int static</div><div class='del'>-gf_defrag_get_entry (xlator_t *this, int i, struct dht_container **container,</div><div class='del'>-                     loc_t *loc, dht_conf_t *conf, gf_defrag_info_t *defrag,</div><div class='del'>-                     fd_t *fd, dict_t *migrate_data,</div><div class='del'>-                     struct dir_dfmeta *dir_dfmeta, dict_t *xattr_req,</div><div class='del'>-                     int *should_commit_hash, int *perrno)</div><div class='add'>+int static gf_defrag_get_entry(xlator_t *this, int i,</div><div class='add'>+                               struct dht_container **container, loc_t *loc,</div><div class='add'>+                               dht_conf_t *conf, gf_defrag_info_t *defrag,</div><div class='add'>+                               fd_t *fd, dict_t *migrate_data,</div><div class='add'>+                               struct dir_dfmeta *dir_dfmeta, dict_t *xattr_req,</div><div class='add'>+                               int *should_commit_hash, int *perrno)</div><div class='ctx'> {</div><div class='del'>-        int                     ret             = -1;</div><div class='del'>-        char                    is_linkfile     = 0;</div><div class='del'>-        gf_dirent_t            *df_entry        = NULL;</div><div class='del'>-        struct dht_container   *tmp_container   = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char is_linkfile = 0;</div><div class='add'>+    gf_dirent_t *df_entry = NULL;</div><div class='add'>+    struct dht_container *tmp_container = NULL;</div><div class='ctx'> </div><div class='del'>-        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dir_dfmeta-&gt;offset_var[i].readdir_done == 1) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dir_dfmeta-&gt;fetch_entries[i] == 1) {</div><div class='del'>-                ret = syncop_readdirp (conf-&gt;local_subvols[i], fd, 131072,</div><div class='del'>-                                       dir_dfmeta-&gt;offset_var[i].offset,</div><div class='del'>-                                       &amp;(dir_dfmeta-&gt;equeue[i]),</div><div class='del'>-                                       xattr_req, NULL);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        dir_dfmeta-&gt;offset_var[i].readdir_done = 1;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                                DHT_MSG_MIGRATE_DATA_FAILED,</div><div class='del'>-                                "Readdirp failed. Aborting data migration for "</div><div class='del'>-                                "directory: %s", loc-&gt;path);</div><div class='del'>-                        *perrno = -ret;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (list_empty (&amp;(dir_dfmeta-&gt;equeue[i].list))) {</div><div class='del'>-                        dir_dfmeta-&gt;offset_var[i].readdir_done = 1;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (dir_dfmeta-&gt;offset_var[i].readdir_done == 1) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                dir_dfmeta-&gt;fetch_entries[i] = 0;</div><div class='add'>+    if (dir_dfmeta-&gt;fetch_entries[i] == 1) {</div><div class='add'>+        ret = syncop_readdirp(conf-&gt;local_subvols[i], fd, 131072,</div><div class='add'>+                              dir_dfmeta-&gt;offset_var[i].offset,</div><div class='add'>+                              &amp;(dir_dfmeta-&gt;equeue[i]), xattr_req, NULL);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            dir_dfmeta-&gt;offset_var[i].readdir_done = 1;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-</div><div class='del'>-                if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                df_entry = list_entry (dir_dfmeta-&gt;iterator[i]-&gt;next,</div><div class='del'>-                                       typeof (*df_entry), list);</div><div class='del'>-</div><div class='del'>-                if (&amp;df_entry-&gt;list == dir_dfmeta-&gt;head[i]) {</div><div class='del'>-                        gf_dirent_free (&amp;(dir_dfmeta-&gt;equeue[i]));</div><div class='del'>-                        INIT_LIST_HEAD (&amp;(dir_dfmeta-&gt;equeue[i].list));</div><div class='del'>-                        dir_dfmeta-&gt;fetch_entries[i] = 1;</div><div class='del'>-                        dir_dfmeta-&gt;iterator[i] = dir_dfmeta-&gt;head[i];</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dir_dfmeta-&gt;iterator[i] = dir_dfmeta-&gt;iterator[i]-&gt;next;</div><div class='del'>-</div><div class='del'>-                dir_dfmeta-&gt;offset_var[i].offset = df_entry-&gt;d_off;</div><div class='del'>-                if (!strcmp (df_entry-&gt;d_name, ".") ||</div><div class='del'>-                    !strcmp (df_entry-&gt;d_name, ".."))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (IA_ISDIR (df_entry-&gt;d_stat.ia_type)) {</div><div class='del'>-                        defrag-&gt;size_processed += df_entry-&gt;d_stat.ia_size;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                defrag-&gt;num_files_lookedup++;</div><div class='del'>-</div><div class='del'>-                if (defrag-&gt;defrag_pattern &amp;&amp;</div><div class='del'>-                    (gf_defrag_pattern_match (defrag, df_entry-&gt;d_name,</div><div class='del'>-                                              df_entry-&gt;d_stat.ia_size)</div><div class='del'>-                     == _gf_false)) {</div><div class='del'>-                        defrag-&gt;size_processed += df_entry-&gt;d_stat.ia_size;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                is_linkfile = check_is_linkfile (NULL, &amp;df_entry-&gt;d_stat,</div><div class='del'>-                                                 df_entry-&gt;dict,</div><div class='del'>-                                                 conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-                if (is_linkfile) {</div><div class='del'>-                        /* No need to add linkto file to the queue for</div><div class='del'>-                           migration. Only the actual data file need to</div><div class='del'>-                           be checked for migration criteria.</div><div class='del'>-                        */</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Skipping linkfile"</div><div class='del'>-                                      " %s on subvol: %s", df_entry-&gt;d_name,</div><div class='del'>-                                      conf-&gt;local_subvols[i]-&gt;name);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*Build Container Structure */</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+                   DHT_MSG_MIGRATE_DATA_FAILED,</div><div class='add'>+                   "Readdirp failed. Aborting data migration for "</div><div class='add'>+                   "directory: %s",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            *perrno = -ret;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                tmp_container =  GF_CALLOC (1, sizeof(struct dht_container),</div><div class='del'>-                                            gf_dht_mt_container_t);</div><div class='del'>-                if (!tmp_container) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to allocate "</div><div class='del'>-                                "memory for container");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                tmp_container-&gt;df_entry = gf_dirent_for_name (df_entry-&gt;d_name);</div><div class='del'>-                if (!tmp_container-&gt;df_entry) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to allocate "</div><div class='del'>-                                "memory for df_entry");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (list_empty(&amp;(dir_dfmeta-&gt;equeue[i].list))) {</div><div class='add'>+            dir_dfmeta-&gt;offset_var[i].readdir_done = 1;</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;local_subvol_index = i;</div><div class='add'>+        dir_dfmeta-&gt;fetch_entries[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;df_entry-&gt;d_stat = df_entry-&gt;d_stat;</div><div class='add'>+    while (1) {</div><div class='add'>+        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;df_entry-&gt;d_ino  = df_entry-&gt;d_ino;</div><div class='add'>+        df_entry = list_entry(dir_dfmeta-&gt;iterator[i]-&gt;next, typeof(*df_entry),</div><div class='add'>+                              list);</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;df_entry-&gt;d_type = df_entry-&gt;d_type;</div><div class='add'>+        if (&amp;df_entry-&gt;list == dir_dfmeta-&gt;head[i]) {</div><div class='add'>+            gf_dirent_free(&amp;(dir_dfmeta-&gt;equeue[i]));</div><div class='add'>+            INIT_LIST_HEAD(&amp;(dir_dfmeta-&gt;equeue[i].list));</div><div class='add'>+            dir_dfmeta-&gt;fetch_entries[i] = 1;</div><div class='add'>+            dir_dfmeta-&gt;iterator[i] = dir_dfmeta-&gt;head[i];</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;df_entry-&gt;d_len  = df_entry-&gt;d_len;</div><div class='add'>+        dir_dfmeta-&gt;iterator[i] = dir_dfmeta-&gt;iterator[i]-&gt;next;</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;parent_loc = GF_CALLOC(1, sizeof(*loc),</div><div class='del'>-                                                      gf_dht_mt_loc_t);</div><div class='del'>-                if (!tmp_container-&gt;parent_loc) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to allocate "</div><div class='del'>-                                "memory for loc");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        dir_dfmeta-&gt;offset_var[i].offset = df_entry-&gt;d_off;</div><div class='add'>+        if (!strcmp(df_entry-&gt;d_name, ".") || !strcmp(df_entry-&gt;d_name, ".."))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='add'>+        if (IA_ISDIR(df_entry-&gt;d_stat.ia_type)) {</div><div class='add'>+            defrag-&gt;size_processed += df_entry-&gt;d_stat.ia_size;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = loc_copy (tmp_container-&gt;parent_loc, loc);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "loc_copy failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        defrag-&gt;num_files_lookedup++;</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;migrate_data = migrate_data;</div><div class='add'>+        if (defrag-&gt;defrag_pattern &amp;&amp;</div><div class='add'>+            (gf_defrag_pattern_match(defrag, df_entry-&gt;d_name,</div><div class='add'>+                                     df_entry-&gt;d_stat.ia_size) == _gf_false)) {</div><div class='add'>+            defrag-&gt;size_processed += df_entry-&gt;d_stat.ia_size;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                tmp_container-&gt;this = this;</div><div class='add'>+        is_linkfile = check_is_linkfile(NULL, &amp;df_entry-&gt;d_stat, df_entry-&gt;dict,</div><div class='add'>+                                        conf-&gt;link_xattr_name);</div><div class='ctx'> </div><div class='del'>-                if (df_entry-&gt;dict)</div><div class='del'>-                        tmp_container-&gt;df_entry-&gt;dict =</div><div class='del'>-                                        dict_ref (df_entry-&gt;dict);</div><div class='add'>+        if (is_linkfile) {</div><div class='add'>+            /* No need to add linkto file to the queue for</div><div class='add'>+               migration. Only the actual data file need to</div><div class='add'>+               be checked for migration criteria.</div><div class='add'>+            */</div><div class='ctx'> </div><div class='del'>-               /*Build Container Structure &gt;&gt; END*/</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Skipping linkfile"</div><div class='add'>+                         " %s on subvol: %s",</div><div class='add'>+                         df_entry-&gt;d_name, conf-&gt;local_subvols[i]-&gt;name);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+        /*Build Container Structure */</div><div class='ctx'> </div><div class='add'>+        tmp_container = GF_CALLOC(1, sizeof(struct dht_container),</div><div class='add'>+                                  gf_dht_mt_container_t);</div><div class='add'>+        if (!tmp_container) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to allocate "</div><div class='add'>+                   "memory for container");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                *container = tmp_container;</div><div class='del'>-        } else {</div><div class='del'>-                if (tmp_container) {</div><div class='del'>-                        gf_defrag_free_container (tmp_container);</div><div class='del'>-                }</div><div class='add'>+        tmp_container-&gt;df_entry = gf_dirent_for_name(df_entry-&gt;d_name);</div><div class='add'>+        if (!tmp_container-&gt;df_entry) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to allocate "</div><div class='add'>+                   "memory for df_entry");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        tmp_container-&gt;local_subvol_index = i;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-gf_defrag_process_dir (xlator_t *this, gf_defrag_info_t *defrag, loc_t *loc,</div><div class='del'>-                       dict_t *migrate_data, int *perrno)</div><div class='del'>-{</div><div class='del'>-        int                      ret               = -1;</div><div class='del'>-        fd_t                    *fd                = NULL;</div><div class='del'>-        dht_conf_t              *conf              = NULL;</div><div class='del'>-        gf_dirent_t              entries;</div><div class='del'>-        dict_t                  *xattr_req         = NULL;</div><div class='del'>-        struct timeval           dir_start         = {0,};</div><div class='del'>-        struct timeval           end               = {0,};</div><div class='del'>-        double                   elapsed           = {0,};</div><div class='del'>-        int                      local_subvols_cnt = 0;</div><div class='del'>-        int                      i                 = 0;</div><div class='del'>-        int                      j                 = 0;</div><div class='del'>-        struct  dht_container   *container         = NULL;</div><div class='del'>-        int                      ldfq_count        = 0;</div><div class='del'>-        int                      dfc_index         = 0;</div><div class='del'>-        int                      throttle_up       = 0;</div><div class='del'>-        struct dir_dfmeta       *dir_dfmeta        = NULL;</div><div class='del'>-        int                      should_commit_hash = 1;</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "migrate data called on %s",</div><div class='del'>-                loc-&gt;path);</div><div class='del'>-        gettimeofday (&amp;dir_start, NULL);</div><div class='add'>+        tmp_container-&gt;df_entry-&gt;d_stat = df_entry-&gt;d_stat;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local_subvols_cnt = conf-&gt;local_subvols_cnt;</div><div class='add'>+        tmp_container-&gt;df_entry-&gt;d_ino = df_entry-&gt;d_ino;</div><div class='ctx'> </div><div class='del'>-        if (!local_subvols_cnt) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        tmp_container-&gt;df_entry-&gt;d_type = df_entry-&gt;d_type;</div><div class='ctx'> </div><div class='del'>-        fd = fd_create (loc-&gt;inode, defrag-&gt;pid);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to create fd");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        tmp_container-&gt;df_entry-&gt;d_len = df_entry-&gt;d_len;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_opendir (this, loc, fd, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_MIGRATE_DATA_FAILED,</div><div class='del'>-                        "Migrate data failed: Failed to open dir %s",</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                *perrno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        tmp_container-&gt;parent_loc = GF_CALLOC(1, sizeof(*loc), gf_dht_mt_loc_t);</div><div class='add'>+        if (!tmp_container-&gt;parent_loc) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to allocate "</div><div class='add'>+                   "memory for loc");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='del'>-        dir_dfmeta = GF_CALLOC (1, sizeof (*dir_dfmeta),</div><div class='del'>-                                                gf_common_mt_pointer);</div><div class='del'>-        if (!dir_dfmeta) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dir_dfmeta is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        ret = loc_copy(tmp_container-&gt;parent_loc, loc);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "loc_copy failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        tmp_container-&gt;migrate_data = migrate_data;</div><div class='ctx'> </div><div class='del'>-        dir_dfmeta-&gt;head = GF_CALLOC (local_subvols_cnt,</div><div class='del'>-                                      sizeof (*(dir_dfmeta-&gt;head)),</div><div class='del'>-                                      gf_common_mt_pointer);</div><div class='del'>-        if (!dir_dfmeta-&gt;head) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;head is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        tmp_container-&gt;this = this;</div><div class='ctx'> </div><div class='del'>-        dir_dfmeta-&gt;iterator = GF_CALLOC (local_subvols_cnt,</div><div class='del'>-                                          sizeof (*(dir_dfmeta-&gt;iterator)),</div><div class='del'>-                                          gf_common_mt_pointer);</div><div class='del'>-        if (!dir_dfmeta-&gt;iterator) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dir_dfmeta-&gt;iterator is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        if (df_entry-&gt;dict)</div><div class='add'>+            tmp_container-&gt;df_entry-&gt;dict = dict_ref(df_entry-&gt;dict);</div><div class='ctx'> </div><div class='del'>-        dir_dfmeta-&gt;equeue = GF_CALLOC (local_subvols_cnt, sizeof (entries),</div><div class='del'>-                                        gf_dht_mt_dirent_t);</div><div class='del'>-        if (!dir_dfmeta-&gt;equeue) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;equeue is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        /*Build Container Structure &gt;&gt; END*/</div><div class='ctx'> </div><div class='del'>-        dir_dfmeta-&gt;offset_var = GF_CALLOC (local_subvols_cnt,</div><div class='del'>-                                            sizeof (dht_dfoffset_ctx_t),</div><div class='del'>-                                            gf_dht_mt_octx_t);</div><div class='del'>-        if (!dir_dfmeta-&gt;offset_var) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dir_dfmeta-&gt;offset_var is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = gf_defrag_ctx_subvols_init (dir_dfmeta-&gt;offset_var, this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dht_dfoffset_ctx_t"</div><div class='del'>-                        "initialization failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dir_dfmeta-&gt;fetch_entries = GF_CALLOC (local_subvols_cnt,</div><div class='del'>-                                               sizeof (int), gf_common_mt_int);</div><div class='del'>-        if (!dir_dfmeta-&gt;fetch_entries) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dir_dfmeta-&gt;fetch_entries is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; local_subvols_cnt ; i++) {</div><div class='del'>-                INIT_LIST_HEAD (&amp;(dir_dfmeta-&gt;equeue[i].list));</div><div class='del'>-                dir_dfmeta-&gt;head[i]          = &amp;(dir_dfmeta-&gt;equeue[i].list);</div><div class='del'>-                dir_dfmeta-&gt;iterator[i]      = dir_dfmeta-&gt;head[i];</div><div class='del'>-                dir_dfmeta-&gt;fetch_entries[i] = 1;</div><div class='del'>-        }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xattr_req = dict_new ();</div><div class='del'>-        if (!xattr_req) {</div><div class='del'>-               gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-               ret = -1;</div><div class='del'>-               goto out;</div><div class='add'>+out:</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        *container = tmp_container;</div><div class='add'>+    } else {</div><div class='add'>+        if (tmp_container) {</div><div class='add'>+            gf_defrag_free_container(tmp_container);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (xattr_req,</div><div class='del'>-                               conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (ret) {</div><div class='del'>-               gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set dict for "</div><div class='del'>-                       "key: %s", conf-&gt;link_xattr_name);</div><div class='del'>-               ret = -1;</div><div class='del'>-               goto out;</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         Job: Read entries from each local subvol and store the entries</div><div class='del'>-              in equeue array of linked list. Now pick one entry from the</div><div class='del'>-              equeue array in a round robin basis and add them to defrag Queue.</div><div class='del'>-        */</div><div class='add'>+int</div><div class='add'>+gf_defrag_process_dir(xlator_t *this, gf_defrag_info_t *defrag, loc_t *loc,</div><div class='add'>+                      dict_t *migrate_data, int *perrno)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    struct timeval dir_start = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval end = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    double elapsed = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int local_subvols_cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    struct dht_container *container = NULL;</div><div class='add'>+    int ldfq_count = 0;</div><div class='add'>+    int dfc_index = 0;</div><div class='add'>+    int throttle_up = 0;</div><div class='add'>+    struct dir_dfmeta *dir_dfmeta = NULL;</div><div class='add'>+    int should_commit_hash = 1;</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "migrate data called on %s", loc-&gt;path);</div><div class='add'>+    gettimeofday(&amp;dir_start, NULL);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local_subvols_cnt = conf-&gt;local_subvols_cnt;</div><div class='add'>+</div><div class='add'>+    if (!local_subvols_cnt) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (!dht_dfreaddirp_done(dir_dfmeta-&gt;offset_var,</div><div class='del'>-                                         local_subvols_cnt)) {</div><div class='add'>+    fd = fd_create(loc-&gt;inode, defrag-&gt;pid);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to create fd");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_opendir(this, loc, fd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_MIGRATE_DATA_FAILED,</div><div class='add'>+               "Migrate data failed: Failed to open dir %s", loc-&gt;path);</div><div class='add'>+        *perrno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                {</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+    dir_dfmeta = GF_CALLOC(1, sizeof(*dir_dfmeta), gf_common_mt_pointer);</div><div class='add'>+    if (!dir_dfmeta) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dir_dfmeta is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                      /*Throttle up: If reconfigured count is higher than</div><div class='del'>-                        current thread count, wake up the sleeping threads</div><div class='del'>-                        TODO: Need to refactor this. Instead of making the</div><div class='del'>-                        thread sleep and wake, we should terminate and spawn</div><div class='del'>-                        threads on-demand*/</div><div class='del'>-</div><div class='del'>-                        if (defrag-&gt;recon_thread_count &gt;</div><div class='del'>-                                         defrag-&gt;current_thread_count) {</div><div class='del'>-                                throttle_up =</div><div class='del'>-                                        (defrag-&gt;recon_thread_count -</div><div class='del'>-                                            defrag-&gt;current_thread_count);</div><div class='del'>-                                for (j = 0; j &lt; throttle_up; j++) {</div><div class='del'>-                                        pthread_cond_signal (</div><div class='del'>-                                             &amp;defrag-&gt;df_wakeup_thread);</div><div class='del'>-                                }</div><div class='add'>+    dir_dfmeta-&gt;head = GF_CALLOC(local_subvols_cnt, sizeof(*(dir_dfmeta-&gt;head)),</div><div class='add'>+                                 gf_common_mt_pointer);</div><div class='add'>+    if (!dir_dfmeta-&gt;head) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;head is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dir_dfmeta-&gt;iterator = GF_CALLOC(local_subvols_cnt,</div><div class='add'>+                                     sizeof(*(dir_dfmeta-&gt;iterator)),</div><div class='add'>+                                     gf_common_mt_pointer);</div><div class='add'>+    if (!dir_dfmeta-&gt;iterator) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;iterator is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        }</div><div class='add'>+    dir_dfmeta-&gt;equeue = GF_CALLOC(local_subvols_cnt, sizeof(entries),</div><div class='add'>+                                   gf_dht_mt_dirent_t);</div><div class='add'>+    if (!dir_dfmeta-&gt;equeue) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;equeue is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        while (defrag-&gt;q_entry_count &gt;</div><div class='del'>-                                        MAX_MIGRATE_QUEUE_COUNT) {</div><div class='del'>-                                defrag-&gt;wakeup_crawler = 1;</div><div class='del'>-                                pthread_cond_wait (</div><div class='del'>-                                        &amp;defrag-&gt;rebalance_crawler_alarm,</div><div class='del'>-                                        &amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                        }</div><div class='add'>+    dir_dfmeta-&gt;offset_var = GF_CALLOC(</div><div class='add'>+        local_subvols_cnt, sizeof(dht_dfoffset_ctx_t), gf_dht_mt_octx_t);</div><div class='add'>+    if (!dir_dfmeta-&gt;offset_var) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;offset_var is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = gf_defrag_ctx_subvols_init(dir_dfmeta-&gt;offset_var, this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "dht_dfoffset_ctx_t"</div><div class='add'>+               "initialization failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                       ldfq_count = defrag-&gt;q_entry_count;</div><div class='add'>+    dir_dfmeta-&gt;fetch_entries = GF_CALLOC(local_subvols_cnt, sizeof(int),</div><div class='add'>+                                          gf_common_mt_int);</div><div class='add'>+    if (!dir_dfmeta-&gt;fetch_entries) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dir_dfmeta-&gt;fetch_entries is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; local_subvols_cnt; i++) {</div><div class='add'>+        INIT_LIST_HEAD(&amp;(dir_dfmeta-&gt;equeue[i].list));</div><div class='add'>+        dir_dfmeta-&gt;head[i] = &amp;(dir_dfmeta-&gt;equeue[i].list);</div><div class='add'>+        dir_dfmeta-&gt;iterator[i] = dir_dfmeta-&gt;head[i];</div><div class='add'>+        dir_dfmeta-&gt;fetch_entries[i] = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (!xattr_req) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(xattr_req, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to set dict for "</div><div class='add'>+               "key: %s",</div><div class='add'>+               conf-&gt;link_xattr_name);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                       if (defrag-&gt;wakeup_crawler) {</div><div class='del'>-                               defrag-&gt;wakeup_crawler = 0;</div><div class='del'>-                       }</div><div class='add'>+    /*</div><div class='add'>+     Job: Read entries from each local subvol and store the entries</div><div class='add'>+          in equeue array of linked list. Now pick one entry from the</div><div class='add'>+          equeue array in a round robin basis and add them to defrag Queue.</div><div class='add'>+    */</div><div class='ctx'> </div><div class='add'>+    while (!dht_dfreaddirp_done(dir_dfmeta-&gt;offset_var, local_subvols_cnt)) {</div><div class='add'>+        pthread_mutex_lock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+        {</div><div class='add'>+            /*Throttle up: If reconfigured count is higher than</div><div class='add'>+              current thread count, wake up the sleeping threads</div><div class='add'>+              TODO: Need to refactor this. Instead of making the</div><div class='add'>+              thread sleep and wake, we should terminate and spawn</div><div class='add'>+              threads on-demand*/</div><div class='add'>+</div><div class='add'>+            if (defrag-&gt;recon_thread_count &gt; defrag-&gt;current_thread_count) {</div><div class='add'>+                throttle_up = (defrag-&gt;recon_thread_count -</div><div class='add'>+                               defrag-&gt;current_thread_count);</div><div class='add'>+                for (j = 0; j &lt; throttle_up; j++) {</div><div class='add'>+                    pthread_cond_signal(&amp;defrag-&gt;df_wakeup_thread);</div><div class='ctx'>                 }</div><div class='del'>-                pthread_mutex_unlock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-</div><div class='del'>-                while (ldfq_count &lt;= MAX_MIGRATE_QUEUE_COUNT &amp;&amp;</div><div class='del'>-                       !dht_dfreaddirp_done(dir_dfmeta-&gt;offset_var,</div><div class='del'>-                                               local_subvols_cnt)) {</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        ret = gf_defrag_get_entry (this, dfc_index, &amp;container,</div><div class='del'>-                                                   loc, conf, defrag, fd,</div><div class='del'>-                                                   migrate_data, dir_dfmeta,</div><div class='del'>-                                                   xattr_req,</div><div class='del'>-                                                   &amp;should_commit_hash, perrno);</div><div class='add'>+            while (defrag-&gt;q_entry_count &gt; MAX_MIGRATE_QUEUE_COUNT) {</div><div class='add'>+                defrag-&gt;wakeup_crawler = 1;</div><div class='add'>+                pthread_cond_wait(&amp;defrag-&gt;rebalance_crawler_alarm,</div><div class='add'>+                                  &amp;defrag-&gt;dfq_mutex);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING, "Found "</div><div class='del'>-                                        "error from gf_defrag_get_entry");</div><div class='add'>+            ldfq_count = defrag-&gt;q_entry_count;</div><div class='ctx'> </div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Check if we got an entry, else we need to move the</div><div class='del'>-                           index to the next subvol */</div><div class='del'>-                        if (!container) {</div><div class='del'>-                                GF_CRAWL_INDEX_MOVE(dfc_index,</div><div class='del'>-                                                    local_subvols_cnt);</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+            if (defrag-&gt;wakeup_crawler) {</div><div class='add'>+                defrag-&gt;wakeup_crawler = 0;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;defrag-&gt;dfq_mutex);</div><div class='ctx'> </div><div class='del'>-                        /* Q this entry in the dfq */</div><div class='del'>-                        pthread_mutex_lock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-                        {</div><div class='del'>-                                list_add_tail (&amp;container-&gt;list,</div><div class='del'>-                                        &amp;(defrag-&gt;queue[0].list));</div><div class='del'>-                                defrag-&gt;q_entry_count++;</div><div class='del'>-                                ldfq_count = defrag-&gt;q_entry_count;</div><div class='del'>-</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0, "added "</div><div class='del'>-                                              "file:%s parent:%s to the queue ",</div><div class='del'>-                                              container-&gt;df_entry-&gt;d_name,</div><div class='del'>-                                              container-&gt;parent_loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                                pthread_cond_signal (</div><div class='del'>-                                        &amp;defrag-&gt;parallel_migration_cond);</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+        while (</div><div class='add'>+            ldfq_count &lt;= MAX_MIGRATE_QUEUE_COUNT &amp;&amp;</div><div class='add'>+            !dht_dfreaddirp_done(dir_dfmeta-&gt;offset_var, local_subvols_cnt)) {</div><div class='add'>+            ret = gf_defrag_get_entry(this, dfc_index, &amp;container, loc, conf,</div><div class='add'>+                                      defrag, fd, migrate_data, dir_dfmeta,</div><div class='add'>+                                      xattr_req, &amp;should_commit_hash, perrno);</div><div class='ctx'> </div><div class='del'>-                        GF_CRAWL_INDEX_MOVE(dfc_index, local_subvols_cnt);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Found "</div><div class='add'>+                       "error from gf_defrag_get_entry");</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;end, NULL);</div><div class='del'>-        elapsed = (end.tv_sec - dir_start.tv_sec) * 1e6 +</div><div class='del'>-                  (end.tv_usec - dir_start.tv_usec);</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "Migration operation on dir %s took "</div><div class='del'>-                "%.2f secs", loc-&gt;path, elapsed/1e6);</div><div class='del'>-        ret = 0;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Check if we got an entry, else we need to move the</div><div class='add'>+               index to the next subvol */</div><div class='add'>+            if (!container) {</div><div class='add'>+                GF_CRAWL_INDEX_MOVE(dfc_index, local_subvols_cnt);</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Q this entry in the dfq */</div><div class='add'>+            pthread_mutex_lock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+            {</div><div class='add'>+                list_add_tail(&amp;container-&gt;list, &amp;(defrag-&gt;queue[0].list));</div><div class='add'>+                defrag-&gt;q_entry_count++;</div><div class='add'>+                ldfq_count = defrag-&gt;q_entry_count;</div><div class='add'>+</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "added "</div><div class='add'>+                             "file:%s parent:%s to the queue ",</div><div class='add'>+                             container-&gt;df_entry-&gt;d_name,</div><div class='add'>+                             container-&gt;parent_loc-&gt;path);</div><div class='add'>+</div><div class='add'>+                pthread_cond_signal(&amp;defrag-&gt;parallel_migration_cond);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+</div><div class='add'>+            GF_CRAWL_INDEX_MOVE(dfc_index, local_subvols_cnt);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;end, NULL);</div><div class='add'>+    elapsed = (end.tv_sec - dir_start.tv_sec) * 1e6 +</div><div class='add'>+              (end.tv_usec - dir_start.tv_usec);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "Migration operation on dir %s took "</div><div class='add'>+           "%.2f secs",</div><div class='add'>+           loc-&gt;path, elapsed / 1e6);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        gf_defrag_free_dir_dfmeta (dir_dfmeta, local_subvols_cnt);</div><div class='add'>+    gf_defrag_free_dir_dfmeta(dir_dfmeta, local_subvols_cnt);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref(xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0 &amp;&amp; should_commit_hash == 0) {</div><div class='del'>-                ret = 2;</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0 &amp;&amp; should_commit_hash == 0) {</div><div class='add'>+        ret = 2;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* It does not matter if it errored out - this number is</div><div class='del'>-         * used to calculate rebalance estimated time to complete.</div><div class='del'>-         * No locking required as dirs are processed by a single thread.</div><div class='del'>-         */</div><div class='del'>-        defrag-&gt;num_dirs_processed++;</div><div class='del'>-        return ret;</div><div class='add'>+    /* It does not matter if it errored out - this number is</div><div class='add'>+     * used to calculate rebalance estimated time to complete.</div><div class='add'>+     * No locking required as dirs are processed by a single thread.</div><div class='add'>+     */</div><div class='add'>+    defrag-&gt;num_dirs_processed++;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-gf_defrag_settle_hash (xlator_t *this, gf_defrag_info_t *defrag,</div><div class='del'>-                       loc_t *loc, dict_t *fix_layout)</div><div class='add'>+gf_defrag_settle_hash(xlator_t *this, gf_defrag_info_t *defrag, loc_t *loc,</div><div class='add'>+                      dict_t *fix_layout)</div><div class='ctx'> {</div><div class='del'>-        int     ret;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-        /*</div><div class='del'>-         * Now we're ready to update the directory commit hash for the volume</div><div class='del'>-         * root, so that hash miscompares and broadcast lookups can stop.</div><div class='del'>-         * However, we want to skip that if fix-layout is all we did.  In</div><div class='del'>-         * that case, we want the miscompares etc. to continue until a real</div><div class='del'>-         * rebalance is complete.</div><div class='del'>-         */</div><div class='del'>-        if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_LAYOUT_FIX</div><div class='del'>-            || defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='del'>-            defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                /*Uh oh</div><div class='del'>-                 */</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    int ret;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    /*</div><div class='add'>+     * Now we're ready to update the directory commit hash for the volume</div><div class='add'>+     * root, so that hash miscompares and broadcast lookups can stop.</div><div class='add'>+     * However, we want to skip that if fix-layout is all we did.  In</div><div class='add'>+     * that case, we want the miscompares etc. to continue until a real</div><div class='add'>+     * rebalance is complete.</div><div class='add'>+     */</div><div class='add'>+    if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_LAYOUT_FIX ||</div><div class='add'>+        defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='add'>+        defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;local_subvols_cnt == 0 || !conf-&gt;lookup_optimize) {</div><div class='del'>-                /* Commit hash updates are only done on local subvolumes and</div><div class='del'>-                 * only when lookup optimization is needed (for older client</div><div class='del'>-                 * support)</div><div class='del'>-                 */</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        /*Uh oh</div><div class='add'>+         */</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (fix_layout, "new-commit-hash",</div><div class='del'>-                               defrag-&gt;new_commit_hash);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set new-commit-hash");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (conf-&gt;local_subvols_cnt == 0 || !conf-&gt;lookup_optimize) {</div><div class='add'>+        /* Commit hash updates are only done on local subvolumes and</div><div class='add'>+         * only when lookup optimization is needed (for older client</div><div class='add'>+         * support)</div><div class='add'>+         */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_setxattr (this, loc, fix_layout, 0, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='del'>-                        "fix layout on %s failed", loc-&gt;path);</div><div class='add'>+    ret = dict_set_uint32(fix_layout, "new-commit-hash",</div><div class='add'>+                          defrag-&gt;new_commit_hash);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to set new-commit-hash");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                        /* Dir most likely is deleted */</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    ret = syncop_setxattr(this, loc, fix_layout, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='add'>+               "fix layout on %s failed", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='add'>+        if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+            /* Dir most likely is deleted */</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* TBD: find more efficient solution than adding/deleting every time */</div><div class='del'>-        dict_del(fix_layout, "new-commit-hash");</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* TBD: find more efficient solution than adding/deleting every time */</div><div class='add'>+    dict_del(fix_layout, "new-commit-hash");</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* Function for doing a named lookup on file inodes during an attach tier</div><div class='ctx'>  * So that a hardlink lookup heal i.e gfid to parent gfid lookup heal</div><div class='hunk'>@@ -3717,1721 +3588,1672 @@ gf_defrag_settle_hash (xlator_t *this, gf_defrag_info_t *defrag,</div><div class='ctx'>  * eventual consistency</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-gf_fix_layout_tier_attach_lookup (xlator_t *this,</div><div class='del'>-                                 loc_t *parent_loc,</div><div class='add'>+gf_fix_layout_tier_attach_lookup(xlator_t *this, loc_t *parent_loc,</div><div class='ctx'>                                  gf_dirent_t *file_dentry)</div><div class='ctx'> {</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-        dict_t                  *lookup_xdata   = NULL;</div><div class='del'>-        dht_conf_t              *conf           = NULL;</div><div class='del'>-        loc_t                    file_loc       = {0,};</div><div class='del'>-        struct iatt              iatt           = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *lookup_xdata = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    loc_t file_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, parent_loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, parent_loc, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, file_dentry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, file_dentry, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        if (!parent_loc-&gt;inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "%s/%s parent is NULL", parent_loc-&gt;path,</div><div class='del'>-                        file_dentry-&gt;d_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='add'>+    if (!parent_loc-&gt;inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "%s/%s parent is NULL", parent_loc-&gt;path, file_dentry-&gt;d_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf   = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;file_loc);</div><div class='add'>+    loc_wipe(&amp;file_loc);</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (file_dentry-&gt;d_stat.ia_gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "%s/%s gfid not present", parent_loc-&gt;path,</div><div class='del'>-                        file_dentry-&gt;d_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (gf_uuid_is_null(file_dentry-&gt;d_stat.ia_gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "%s/%s gfid not present", parent_loc-&gt;path, file_dentry-&gt;d_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (file_loc.gfid, file_dentry-&gt;d_stat.ia_gfid);</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_is_null (parent_loc-&gt;gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "%s/%s"</div><div class='del'>-                        " gfid not present", parent_loc-&gt;path,</div><div class='del'>-                        file_dentry-&gt;d_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_uuid_copy(file_loc.gfid, file_dentry-&gt;d_stat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (file_loc.pargfid, parent_loc-&gt;gfid);</div><div class='add'>+    if (gf_uuid_is_null(parent_loc-&gt;gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "%s/%s"</div><div class='add'>+               " gfid not present",</div><div class='add'>+               parent_loc-&gt;path, file_dentry-&gt;d_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    gf_uuid_copy(file_loc.pargfid, parent_loc-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        ret = dht_build_child_loc (this, &amp;file_loc, parent_loc,</div><div class='del'>-                                                file_dentry-&gt;d_name);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Child loc build failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lookup_xdata = dict_new ();</div><div class='del'>-        if (!lookup_xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed creating lookup dict for %s",</div><div class='del'>-                        file_dentry-&gt;d_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (lookup_xdata, CTR_ATTACH_TIER_LOOKUP, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to set lookup flag");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (file_loc.parent-&gt;gfid, parent_loc-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        /* Sending lookup to cold tier only */</div><div class='del'>-        ret = syncop_lookup (conf-&gt;subvolumes[0], &amp;file_loc, &amp;iatt,</div><div class='del'>-                        NULL, lookup_xdata, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* If the file does not exist on the cold tier than it must */</div><div class='del'>-                /* have been discovered on the hot tier. This is not an error. */</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "%s lookup to cold tier on attach heal failed", file_loc.path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = dht_build_child_loc(this, &amp;file_loc, parent_loc, file_dentry-&gt;d_name);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Child loc build failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lookup_xdata = dict_new();</div><div class='add'>+    if (!lookup_xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed creating lookup dict for %s", file_dentry-&gt;d_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(lookup_xdata, CTR_ATTACH_TIER_LOOKUP, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to set lookup flag");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(file_loc.parent-&gt;gfid, parent_loc-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    /* Sending lookup to cold tier only */</div><div class='add'>+    ret = syncop_lookup(conf-&gt;subvolumes[0], &amp;file_loc, &amp;iatt, NULL,</div><div class='add'>+                        lookup_xdata, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* If the file does not exist on the cold tier than it must */</div><div class='add'>+        /* have been discovered on the hot tier. This is not an error. */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "%s lookup to cold tier on attach heal failed", file_loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;file_loc);</div><div class='add'>+    loc_wipe(&amp;file_loc);</div><div class='ctx'> </div><div class='del'>-        if (lookup_xdata)</div><div class='del'>-                dict_unref (lookup_xdata);</div><div class='add'>+    if (lookup_xdata)</div><div class='add'>+        dict_unref(lookup_xdata);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_fix_layout (xlator_t *this, gf_defrag_info_t *defrag, loc_t *loc,</div><div class='del'>-                  dict_t *fix_layout, dict_t *migrate_data)</div><div class='add'>+gf_defrag_fix_layout(xlator_t *this, gf_defrag_info_t *defrag, loc_t *loc,</div><div class='add'>+                     dict_t *fix_layout, dict_t *migrate_data)</div><div class='ctx'> {</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-        loc_t                    entry_loc      = {0,};</div><div class='del'>-        fd_t                    *fd             = NULL;</div><div class='del'>-        gf_dirent_t              entries;</div><div class='del'>-        gf_dirent_t             *tmp            = NULL;</div><div class='del'>-        gf_dirent_t             *entry          = NULL;</div><div class='del'>-        gf_boolean_t             free_entries   = _gf_false;</div><div class='del'>-        off_t                    offset         = 0;</div><div class='del'>-        struct iatt              iatt           = {0,};</div><div class='del'>-        inode_t                 *linked_inode   = NULL, *inode = NULL;</div><div class='del'>-        dht_conf_t              *conf           = NULL;</div><div class='del'>-        int                      should_commit_hash = 1;</div><div class='del'>-        int                      perrno         = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (this, loc, &amp;iatt, NULL, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (strcmp (loc-&gt;path, "/") == 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='del'>-                                "lookup failed for:%s", loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t entry_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_boolean_t free_entries = _gf_false;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *linked_inode = NULL, *inode = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int should_commit_hash = 1;</div><div class='add'>+    int perrno = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, -ret,</div><div class='del'>-                                DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='del'>-                                "Dir:%s renamed or removed. Skipping",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                                defrag-&gt;total_failures++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='del'>-                                "lookup failed for:%s", loc-&gt;path);</div><div class='add'>+    ret = syncop_lookup(this, loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (strcmp(loc-&gt;path, "/") == 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='add'>+                   "lookup failed for:%s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd = fd_create (loc-&gt;inode, defrag-&gt;pid);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to create fd");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, -ret, DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='add'>+                   "Dir:%s renamed or removed. Skipping", loc-&gt;path);</div><div class='add'>+            if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+                defrag-&gt;total_failures++;</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='add'>+                   "lookup failed for:%s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        ret = syncop_opendir (this, loc, fd, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                                defrag-&gt;total_failures++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to open dir %s, "</div><div class='del'>-                        "err:%d", loc-&gt;path, -ret);</div><div class='add'>+    fd = fd_create(loc-&gt;inode, defrag-&gt;pid);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to create fd");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    ret = syncop_opendir(this, loc, fd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+            if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+                defrag-&gt;total_failures++;</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to open dir %s, "</div><div class='add'>+               "err:%d",</div><div class='add'>+               loc-&gt;path, -ret);</div><div class='ctx'> </div><div class='del'>-        while ((ret = syncop_readdirp (this, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                       NULL, NULL)) != 0)</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                                if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                                        defrag-&gt;total_failures++;</div><div class='del'>-                                }</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_READDIR_ERROR, "readdirp failed for "</div><div class='del'>-                                "path %s. Aborting fix-layout", loc-&gt;path);</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='ctx'> </div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+    while ((ret = syncop_readdirp(this, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                                  NULL)) != 0) {</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+                if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+                    defrag-&gt;total_failures++;</div><div class='ctx'>                 }</div><div class='add'>+                ret = 0;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (list_empty (&amp;entries.list))</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                free_entries = _gf_true;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (entry, tmp, &amp;entries.list, list) {</div><div class='del'>-                        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                                ret = 1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        offset = entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                        if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                            !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-                                continue;</div><div class='del'>-                        if (!IA_ISDIR (entry-&gt;d_stat.ia_type)) {</div><div class='del'>-</div><div class='del'>-                                /* If its a fix layout during the attach</div><div class='del'>-                                 * tier operation do lookups on files</div><div class='del'>-                                 * on cold subvolume so that there is a</div><div class='del'>-                                 * CTR DB Lookup Heal triggered on existing</div><div class='del'>-                                 * data.</div><div class='del'>-                                 * */</div><div class='del'>-                                if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='del'>-                                        gf_fix_layout_tier_attach_lookup</div><div class='del'>-                                                (this, loc, entry);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                        loc_wipe (&amp;entry_loc);</div><div class='del'>-</div><div class='del'>-                        ret = dht_build_child_loc (this, &amp;entry_loc, loc,</div><div class='del'>-                                                  entry-&gt;d_name);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR, "Child loc"</div><div class='del'>-                                        " build failed for entry: %s",</div><div class='del'>-                                        entry-&gt;d_name);</div><div class='del'>-</div><div class='del'>-                                if (conf-&gt;decommission_in_progress) {</div><div class='del'>-                                        defrag-&gt;defrag_status =</div><div class='del'>-                                        GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-</div><div class='del'>-                                        goto out;</div><div class='del'>-                                } else {</div><div class='del'>-                                        should_commit_hash = 0;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_READDIR_ERROR,</div><div class='add'>+                   "readdirp failed for "</div><div class='add'>+                   "path %s. Aborting fix-layout",</div><div class='add'>+                   loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        if (gf_uuid_is_null (entry-&gt;d_stat.ia_gfid)) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR, "%s/%s"</div><div class='del'>-                                        " gfid not present", loc-&gt;path,</div><div class='del'>-                                         entry-&gt;d_name);</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+        if (list_empty(&amp;entries.list))</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='add'>+        free_entries = _gf_true;</div><div class='ctx'> </div><div class='del'>-                        gf_uuid_copy (entry_loc.gfid, entry-&gt;d_stat.ia_gfid);</div><div class='add'>+        list_for_each_entry_safe(entry, tmp, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+                ret = 1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='add'>+</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+                continue;</div><div class='add'>+            if (!IA_ISDIR(entry-&gt;d_stat.ia_type)) {</div><div class='add'>+                /* If its a fix layout during the attach</div><div class='add'>+                 * tier operation do lookups on files</div><div class='add'>+                 * on cold subvolume so that there is a</div><div class='add'>+                 * CTR DB Lookup Heal triggered on existing</div><div class='add'>+                 * data.</div><div class='add'>+                 * */</div><div class='add'>+                if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='add'>+                    gf_fix_layout_tier_attach_lookup(this, loc, entry);</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        /*In case the gfid stored in the inode by inode_link</div><div class='del'>-                         * and the gfid obtained in the lookup differs, then</div><div class='del'>-                         * client3_3_lookup_cbk will return ESTALE and proper</div><div class='del'>-                         * error will be captured</div><div class='del'>-                         */</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+            loc_wipe(&amp;entry_loc);</div><div class='ctx'> </div><div class='del'>-                        linked_inode = inode_link (entry_loc.inode, loc-&gt;inode,</div><div class='del'>-                                                   entry-&gt;d_name,</div><div class='del'>-                                                   &amp;entry-&gt;d_stat);</div><div class='add'>+            ret = dht_build_child_loc(this, &amp;entry_loc, loc, entry-&gt;d_name);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Child loc"</div><div class='add'>+                       " build failed for entry: %s",</div><div class='add'>+                       entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-                        inode = entry_loc.inode;</div><div class='del'>-                        entry_loc.inode = linked_inode;</div><div class='del'>-                        inode_unref (inode);</div><div class='add'>+                if (conf-&gt;decommission_in_progress) {</div><div class='add'>+                    defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='ctx'> </div><div class='del'>-                        if (gf_uuid_is_null (loc-&gt;gfid)) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR, "%s/%s"</div><div class='del'>-                                        " gfid not present", loc-&gt;path,</div><div class='del'>-                                         entry-&gt;d_name);</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+                    goto out;</div><div class='add'>+                } else {</div><div class='add'>+                    should_commit_hash = 0;</div><div class='ctx'> </div><div class='del'>-                        gf_uuid_copy (entry_loc.pargfid, loc-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                        ret = syncop_lookup (this, &amp;entry_loc, &amp;iatt, NULL,</div><div class='del'>-                                             NULL, NULL);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_INFO, -ret,</div><div class='del'>-                                                DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='del'>-                                                "Dir:%s renamed or removed. "</div><div class='del'>-                                                "Skipping", loc-&gt;path);</div><div class='del'>-                                        ret = 0;</div><div class='del'>-                                        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                                                defrag-&gt;total_failures++;</div><div class='del'>-                                        }</div><div class='del'>-                                        continue;</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                                DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='del'>-                                                "lookup failed for:%s",</div><div class='del'>-                                                entry_loc.path);</div><div class='del'>-</div><div class='del'>-                                        defrag-&gt;total_failures++;</div><div class='del'>-</div><div class='del'>-                                        if (conf-&gt;decommission_in_progress) {</div><div class='del'>-                                                defrag-&gt;defrag_status =</div><div class='del'>-                                                GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                                                ret = -1;</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        } else {</div><div class='del'>-                                                should_commit_hash = 0;</div><div class='del'>-                                                continue;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (gf_uuid_is_null(entry-&gt;d_stat.ia_gfid)) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "%s/%s"</div><div class='add'>+                       " gfid not present",</div><div class='add'>+                       loc-&gt;path, entry-&gt;d_name);</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            gf_uuid_copy(entry_loc.gfid, entry-&gt;d_stat.ia_gfid);</div><div class='add'>+</div><div class='add'>+            /*In case the gfid stored in the inode by inode_link</div><div class='add'>+             * and the gfid obtained in the lookup differs, then</div><div class='add'>+             * client3_3_lookup_cbk will return ESTALE and proper</div><div class='add'>+             * error will be captured</div><div class='add'>+             */</div><div class='add'>+</div><div class='add'>+            linked_inode = inode_link(entry_loc.inode, loc-&gt;inode,</div><div class='add'>+                                      entry-&gt;d_name, &amp;entry-&gt;d_stat);</div><div class='add'>+</div><div class='add'>+            inode = entry_loc.inode;</div><div class='add'>+            entry_loc.inode = linked_inode;</div><div class='add'>+            inode_unref(inode);</div><div class='add'>+</div><div class='add'>+            if (gf_uuid_is_null(loc-&gt;gfid)) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "%s/%s"</div><div class='add'>+                       " gfid not present",</div><div class='add'>+                       loc-&gt;path, entry-&gt;d_name);</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            gf_uuid_copy(entry_loc.pargfid, loc-&gt;gfid);</div><div class='add'>+</div><div class='add'>+            ret = syncop_lookup(this, &amp;entry_loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+            if (ret) {</div><div class='add'>+                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, -ret,</div><div class='add'>+                           DHT_MSG_DIR_LOOKUP_FAILED,</div><div class='add'>+                           "Dir:%s renamed or removed. "</div><div class='add'>+                           "Skipping",</div><div class='add'>+                           loc-&gt;path);</div><div class='add'>+                    ret = 0;</div><div class='add'>+                    if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+                        defrag-&gt;total_failures++;</div><div class='add'>+                    }</div><div class='add'>+                    continue;</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                           DHT_MSG_DIR_LOOKUP_FAILED, "lookup failed for:%s",</div><div class='add'>+                           entry_loc.path);</div><div class='ctx'> </div><div class='del'>-                        /* A return value of 2 means, either process_dir or</div><div class='del'>-                         * lookup of a dir failed. Hence, don't commit hash</div><div class='del'>-                         * for the current directory*/</div><div class='add'>+                    defrag-&gt;total_failures++;</div><div class='ctx'> </div><div class='del'>-                        ret = gf_defrag_fix_layout (this, defrag, &amp;entry_loc,</div><div class='del'>-                                                    fix_layout, migrate_data);</div><div class='add'>+                    if (conf-&gt;decommission_in_progress) {</div><div class='add'>+                        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        goto out;</div><div class='add'>+                    } else {</div><div class='add'>+                        should_commit_hash = 0;</div><div class='add'>+                        continue;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        if (ret &amp;&amp; ret != 2) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='del'>-                                        "Fix layout failed for %s",</div><div class='del'>-                                        entry_loc.path);</div><div class='add'>+            /* A return value of 2 means, either process_dir or</div><div class='add'>+             * lookup of a dir failed. Hence, don't commit hash</div><div class='add'>+             * for the current directory*/</div><div class='ctx'> </div><div class='del'>-                                defrag-&gt;total_failures++;</div><div class='add'>+            ret = gf_defrag_fix_layout(this, defrag, &amp;entry_loc, fix_layout,</div><div class='add'>+                                       migrate_data);</div><div class='ctx'> </div><div class='del'>-                                if (conf-&gt;decommission_in_progress) {</div><div class='del'>-                                        defrag-&gt;defrag_status =</div><div class='del'>-                                        GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+            if (ret &amp;&amp; ret != 2) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='add'>+                       "Fix layout failed for %s", entry_loc.path);</div><div class='ctx'> </div><div class='del'>-                                        goto out;</div><div class='del'>-                                } else {</div><div class='del'>-                                        /* Let's not commit-hash if</div><div class='del'>-                                         * gf_defrag_fix_layout failed*/</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                defrag-&gt;total_failures++;</div><div class='ctx'> </div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='del'>-                free_entries = _gf_false;</div><div class='del'>-                INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-        }</div><div class='add'>+                if (conf-&gt;decommission_in_progress) {</div><div class='add'>+                    defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_setxattr (this, loc, fix_layout, 0, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (-ret == ENOENT || -ret == ESTALE) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, -ret,</div><div class='del'>-                                DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='del'>-                                "Setxattr failed. Dir %s "</div><div class='del'>-                                "renamed or removed",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                                defrag-&gt;total_failures++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 0;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='del'>-                                "Setxattr failed for %s",</div><div class='del'>-                                loc-&gt;path);</div><div class='add'>+                    /* Let's not commit-hash if</div><div class='add'>+                     * gf_defrag_fix_layout failed*/</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+        free_entries = _gf_false;</div><div class='add'>+        INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_setxattr(this, loc, fix_layout, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (-ret == ENOENT || -ret == ESTALE) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, -ret, DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='add'>+                   "Setxattr failed. Dir %s "</div><div class='add'>+                   "renamed or removed",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+            if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+                defrag-&gt;total_failures++;</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='add'>+                   "Setxattr failed for %s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='ctx'> </div><div class='del'>-                        if (conf-&gt;decommission_in_progress) {</div><div class='del'>-                                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                 }</div><div class='add'>+            if (conf-&gt;decommission_in_progress) {</div><div class='add'>+                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='del'>-            (defrag-&gt;cmd != GF_DEFRAG_CMD_START_LAYOUT_FIX)) {</div><div class='del'>-                ret = gf_defrag_process_dir (this, defrag, loc, migrate_data,</div><div class='del'>-                                             &amp;perrno);</div><div class='del'>-</div><div class='del'>-                if (ret &amp;&amp; (ret != 2)) {</div><div class='del'>-                        if (perrno == ENOENT || perrno == ESTALE) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-</div><div class='del'>-                                defrag-&gt;total_failures++;</div><div class='add'>+    if ((defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='add'>+        (defrag-&gt;cmd != GF_DEFRAG_CMD_START_LAYOUT_FIX)) {</div><div class='add'>+        ret = gf_defrag_process_dir(this, defrag, loc, migrate_data, &amp;perrno);</div><div class='ctx'> </div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_DEFRAG_PROCESS_DIR_FAILED,</div><div class='del'>-                                        "gf_defrag_process_dir failed for "</div><div class='del'>-                                        "directory: %s", loc-&gt;path);</div><div class='add'>+        if (ret &amp;&amp; (ret != 2)) {</div><div class='add'>+            if (perrno == ENOENT || perrno == ESTALE) {</div><div class='add'>+                ret = 0;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                defrag-&gt;total_failures++;</div><div class='ctx'> </div><div class='del'>-                                if (conf-&gt;decommission_in_progress) {</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       DHT_MSG_DEFRAG_PROCESS_DIR_FAILED,</div><div class='add'>+                       "gf_defrag_process_dir failed for "</div><div class='add'>+                       "directory: %s",</div><div class='add'>+                       loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                                should_commit_hash = 0;</div><div class='del'>-                        }</div><div class='del'>-                } else if (ret == 2) {</div><div class='del'>-                        should_commit_hash = 0;</div><div class='add'>+                if (conf-&gt;decommission_in_progress) {</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "fix layout called on %s", loc-&gt;path);</div><div class='add'>+                should_commit_hash = 0;</div><div class='add'>+            }</div><div class='add'>+        } else if (ret == 2) {</div><div class='add'>+            should_commit_hash = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (should_commit_hash &amp;&amp;</div><div class='del'>-            gf_defrag_settle_hash (this, defrag, loc, fix_layout) != 0) {</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "fix layout called on %s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='add'>+    if (should_commit_hash &amp;&amp;</div><div class='add'>+        gf_defrag_settle_hash(this, defrag, loc, fix_layout) != 0) {</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_SETTLE_HASH_FAILED,</div><div class='del'>-                        "Settle hash failed for %s",</div><div class='del'>-                         loc-&gt;path);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SETTLE_HASH_FAILED,</div><div class='add'>+               "Settle hash failed for %s", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                ret = -1;</div><div class='add'>+        ret = -1;</div><div class='ctx'> </div><div class='del'>-                if (conf-&gt;decommission_in_progress) {</div><div class='del'>-                        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (conf-&gt;decommission_in_progress) {</div><div class='add'>+            defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (free_entries)</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='add'>+    if (free_entries)</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;entry_loc);</div><div class='add'>+    loc_wipe(&amp;entry_loc);</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == 0 &amp;&amp; should_commit_hash == 0) {</div><div class='del'>-                ret = 2;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == 0 &amp;&amp; should_commit_hash == 0) {</div><div class='add'>+        ret = 2;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /******************************************************************************</div><div class='ctx'>  *                      Tier background Fix layout functions</div><div class='ctx'>  ******************************************************************************/</div><div class='ctx'> /* This is the background tier fixlayout thread */</div><div class='ctx'> void *</div><div class='del'>-gf_tier_do_fix_layout (void *args)</div><div class='add'>+gf_tier_do_fix_layout(void *args)</div><div class='ctx'> {</div><div class='del'>-        gf_tier_fix_layout_arg_t *tier_fix_layout_arg   =  args;</div><div class='del'>-        int                 ret                         = -1;</div><div class='del'>-        xlator_t            *this                       = NULL;</div><div class='del'>-        dht_conf_t          *conf                       = NULL;</div><div class='del'>-        gf_defrag_info_t    *defrag                     = NULL;</div><div class='del'>-        dict_t              *dict                       = NULL;</div><div class='del'>-        loc_t               loc                         = {0,};</div><div class='del'>-        struct iatt         iatt                        = {0,};</div><div class='del'>-        struct iatt         parent                      = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", tier_fix_layout_arg, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", tier_fix_layout_arg-&gt;this, out);</div><div class='del'>-        this = tier_fix_layout_arg-&gt;this;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, out);</div><div class='del'>-</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, defrag, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, defrag-&gt;root_inode, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, tier_fix_layout_arg-&gt;fix_layout, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Get Root loc_t */</div><div class='del'>-        dht_build_root_loc (defrag-&gt;root_inode, &amp;loc);</div><div class='del'>-        ret = syncop_lookup (this, &amp;loc, &amp;iatt, &amp;parent, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_REBALANCE_START_FAILED,</div><div class='del'>-                        "Lookup on root failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Start the crawl */</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS, "Tiering Fixlayout started");</div><div class='del'>-</div><div class='del'>-        ret = gf_defrag_fix_layout (this, defrag, &amp;loc,</div><div class='del'>-                                    tier_fix_layout_arg-&gt;fix_layout, NULL);</div><div class='del'>-        if (ret &amp;&amp; ret != 2) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_REBALANCE_FAILED,</div><div class='del'>-                        "Tiering fixlayout failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret != 2 &amp;&amp; gf_defrag_settle_hash</div><div class='del'>-                        (this, defrag, &amp;loc,</div><div class='del'>-                                tier_fix_layout_arg-&gt;fix_layout) != 0) {</div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_tier_fix_layout_arg_t *tier_fix_layout_arg = args;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt parent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", tier_fix_layout_arg, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", tier_fix_layout_arg-&gt;this, out);</div><div class='add'>+    this = tier_fix_layout_arg-&gt;this;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, out);</div><div class='add'>+</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, defrag-&gt;root_inode, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, tier_fix_layout_arg-&gt;fix_layout, out);</div><div class='add'>+</div><div class='add'>+    /* Get Root loc_t */</div><div class='add'>+    dht_build_root_loc(defrag-&gt;root_inode, &amp;loc);</div><div class='add'>+    ret = syncop_lookup(this, &amp;loc, &amp;iatt, &amp;parent, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_REBALANCE_START_FAILED,</div><div class='add'>+               "Lookup on root failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Start the crawl */</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "Tiering Fixlayout started");</div><div class='add'>+</div><div class='add'>+    ret = gf_defrag_fix_layout(this, defrag, &amp;loc,</div><div class='add'>+                               tier_fix_layout_arg-&gt;fix_layout, NULL);</div><div class='add'>+    if (ret &amp;&amp; ret != 2) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_REBALANCE_FAILED,</div><div class='add'>+               "Tiering fixlayout failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_str (dict, GF_XATTR_TIER_LAYOUT_FIXED_KEY, "yes");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_REBALANCE_FAILED,</div><div class='del'>-                        "Failed to set dictionary value: key = %s",</div><div class='del'>-                        GF_XATTR_TIER_LAYOUT_FIXED_KEY);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret != 2 &amp;&amp;</div><div class='add'>+        gf_defrag_settle_hash(this, defrag, &amp;loc,</div><div class='add'>+                              tier_fix_layout_arg-&gt;fix_layout) != 0) {</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Marking the completion of tiering fix layout via a xattr on root */</div><div class='del'>-        ret = syncop_setxattr (this, &amp;loc, dict, 0, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to set tiering fix "</div><div class='del'>-                        "layout completed xattr on %s", loc.path);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(dict, GF_XATTR_TIER_LAYOUT_FIXED_KEY, "yes");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_REBALANCE_FAILED,</div><div class='add'>+               "Failed to set dictionary value: key = %s",</div><div class='add'>+               GF_XATTR_TIER_LAYOUT_FIXED_KEY);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Marking the completion of tiering fix layout via a xattr on root */</div><div class='add'>+    ret = syncop_setxattr(this, &amp;loc, dict, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set tiering fix "</div><div class='add'>+               "layout completed xattr on %s",</div><div class='add'>+               loc.path);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; defrag)</div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='add'>+    if (ret &amp;&amp; defrag)</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_tier_start_fix_layout (xlator_t *this,</div><div class='del'>-                         loc_t *loc,</div><div class='del'>-                         gf_defrag_info_t *defrag,</div><div class='add'>+gf_tier_start_fix_layout(xlator_t *this, loc_t *loc, gf_defrag_info_t *defrag,</div><div class='ctx'>                          dict_t *fix_layout)</div><div class='ctx'> {</div><div class='del'>-        int ret                                       = -1;</div><div class='del'>-        dict_t  *tier_dict                            = NULL;</div><div class='del'>-        gf_tier_fix_layout_arg_t *tier_fix_layout_arg = NULL;</div><div class='del'>-</div><div class='del'>-        tier_dict = dict_new ();</div><div class='del'>-        if (!tier_dict) {</div><div class='del'>-                gf_log ("tier", GF_LOG_ERROR, "Tier fix layout failed :"</div><div class='del'>-                        "Creation of tier_dict failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if layout is fixed already */</div><div class='del'>-        ret = syncop_getxattr (this, loc, &amp;tier_dict,</div><div class='del'>-                                GF_XATTR_TIER_LAYOUT_FIXED_KEY,</div><div class='del'>-                                NULL, NULL);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-</div><div class='del'>-                tier_fix_layout_arg = &amp;defrag-&gt;tier_conf.tier_fix_layout_arg;</div><div class='del'>-</div><div class='del'>-                /*Fill crawl arguments */</div><div class='del'>-                tier_fix_layout_arg-&gt;this = this;</div><div class='del'>-                tier_fix_layout_arg-&gt;fix_layout = fix_layout;</div><div class='del'>-</div><div class='del'>-                /* Spawn the fix layout thread so that its done in the</div><div class='del'>-                 * background */</div><div class='del'>-                ret = gf_thread_create (&amp;tier_fix_layout_arg-&gt;thread_id, NULL,</div><div class='del'>-                                        gf_tier_do_fix_layout,</div><div class='del'>-                                        tier_fix_layout_arg, "tierfixl");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log ("tier", GF_LOG_ERROR, "Thread creation failed. "</div><div class='del'>-                                "Background fix layout for tiering will not "</div><div class='del'>-                                "work.");</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *tier_dict = NULL;</div><div class='add'>+    gf_tier_fix_layout_arg_t *tier_fix_layout_arg = NULL;</div><div class='add'>+</div><div class='add'>+    tier_dict = dict_new();</div><div class='add'>+    if (!tier_dict) {</div><div class='add'>+        gf_log("tier", GF_LOG_ERROR,</div><div class='add'>+               "Tier fix layout failed :"</div><div class='add'>+               "Creation of tier_dict failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if layout is fixed already */</div><div class='add'>+    ret = syncop_getxattr(this, loc, &amp;tier_dict, GF_XATTR_TIER_LAYOUT_FIXED_KEY,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        tier_fix_layout_arg = &amp;defrag-&gt;tier_conf.tier_fix_layout_arg;</div><div class='add'>+</div><div class='add'>+        /*Fill crawl arguments */</div><div class='add'>+        tier_fix_layout_arg-&gt;this = this;</div><div class='add'>+        tier_fix_layout_arg-&gt;fix_layout = fix_layout;</div><div class='add'>+</div><div class='add'>+        /* Spawn the fix layout thread so that its done in the</div><div class='add'>+         * background */</div><div class='add'>+        ret = gf_thread_create(&amp;tier_fix_layout_arg-&gt;thread_id, NULL,</div><div class='add'>+                               gf_tier_do_fix_layout, tier_fix_layout_arg,</div><div class='add'>+                               "tierfixl");</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log("tier", GF_LOG_ERROR,</div><div class='add'>+                   "Thread creation failed. "</div><div class='add'>+                   "Background fix layout for tiering will not "</div><div class='add'>+                   "work.");</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (tier_dict)</div><div class='del'>-                dict_unref (tier_dict);</div><div class='add'>+    if (tier_dict)</div><div class='add'>+        dict_unref(tier_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_tier_clear_fix_layout (xlator_t *this, loc_t *loc, gf_defrag_info_t *defrag)</div><div class='add'>+gf_tier_clear_fix_layout(xlator_t *this, loc_t *loc, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        int ret         = -1;</div><div class='del'>-        dict_t *dict    = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, defrag, out);</div><div class='del'>-</div><div class='del'>-        /* Check if background fixlayout is completed. This is not</div><div class='del'>-         * multi-process safe i.e there is a possibility that by the time</div><div class='del'>-         * we move to remove the xattr there it might have been cleared by some</div><div class='del'>-         * other detach process from other node. We ignore the error if such</div><div class='del'>-         * a thing happens */</div><div class='del'>-        ret = syncop_getxattr (this, loc, &amp;dict,</div><div class='del'>-                        GF_XATTR_TIER_LAYOUT_FIXED_KEY, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* Background fixlayout not complete - nothing to clear*/</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Unable to retrieve fixlayout xattr."</div><div class='del'>-                        "Assume background fix layout not complete");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_removexattr (this, loc, GF_XATTR_TIER_LAYOUT_FIXED_KEY,</div><div class='del'>-                                  NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Failed removing tier fix layout "</div><div class='del'>-                        "xattr from %s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, defrag, out);</div><div class='add'>+</div><div class='add'>+    /* Check if background fixlayout is completed. This is not</div><div class='add'>+     * multi-process safe i.e there is a possibility that by the time</div><div class='add'>+     * we move to remove the xattr there it might have been cleared by some</div><div class='add'>+     * other detach process from other node. We ignore the error if such</div><div class='add'>+     * a thing happens */</div><div class='add'>+    ret = syncop_getxattr(this, loc, &amp;dict, GF_XATTR_TIER_LAYOUT_FIXED_KEY,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* Background fixlayout not complete - nothing to clear*/</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Unable to retrieve fixlayout xattr."</div><div class='add'>+               "Assume background fix layout not complete");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_removexattr(this, loc, GF_XATTR_TIER_LAYOUT_FIXED_KEY, NULL,</div><div class='add'>+                             NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Failed removing tier fix layout "</div><div class='add'>+               "xattr from %s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_tier_wait_fix_lookup (gf_defrag_info_t *defrag) {</div><div class='del'>-        if (defrag-&gt;tier_conf.tier_fix_layout_arg.thread_id) {</div><div class='del'>-                pthread_join (defrag-&gt;tier_conf.tier_fix_layout_arg.thread_id,</div><div class='del'>-                        NULL);</div><div class='del'>-        }</div><div class='add'>+gf_tier_wait_fix_lookup(gf_defrag_info_t *defrag)</div><div class='add'>+{</div><div class='add'>+    if (defrag-&gt;tier_conf.tier_fix_layout_arg.thread_id) {</div><div class='add'>+        pthread_join(defrag-&gt;tier_conf.tier_fix_layout_arg.thread_id, NULL);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> /******************Tier background Fix layout functions END********************/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_init_local_subvols_and_nodeuuids (xlator_t *this, dht_conf_t *conf,</div><div class='del'>-                                      loc_t *loc)</div><div class='add'>+dht_init_local_subvols_and_nodeuuids(xlator_t *this, dht_conf_t *conf,</div><div class='add'>+                                     loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        dict_t                  *dict         = NULL;</div><div class='del'>-        gf_defrag_info_t        *defrag       = NULL;</div><div class='del'>-        uuid_t                  *uuid_ptr     = NULL;</div><div class='del'>-        int                      ret          = -1;</div><div class='del'>-        int                      i            = 0;</div><div class='del'>-        int                      j            = 0;</div><div class='del'>-</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) {</div><div class='del'>-                /* Find local subvolumes */</div><div class='del'>-                ret = syncop_getxattr (this, loc, &amp;dict,</div><div class='del'>-                                       GF_REBAL_FIND_LOCAL_SUBVOL,</div><div class='del'>-                                       NULL, NULL);</div><div class='del'>-                if (ret &amp;&amp; (ret != -ENODATA)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, 0, "local "</div><div class='del'>-                                "subvolume determination failed with error: %d",</div><div class='del'>-                                -ret);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                 }</div><div class='del'>-</div><div class='del'>-        if (!ret)</div><div class='del'>-                goto out;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    uuid_t *uuid_ptr = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+</div><div class='add'>+    if (defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) {</div><div class='add'>+        /* Find local subvolumes */</div><div class='add'>+        ret = syncop_getxattr(this, loc, &amp;dict, GF_REBAL_FIND_LOCAL_SUBVOL,</div><div class='add'>+                              NULL, NULL);</div><div class='add'>+        if (ret &amp;&amp; (ret != -ENODATA)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, 0,</div><div class='add'>+                   "local "</div><div class='add'>+                   "subvolume determination failed with error: %d",</div><div class='add'>+                   -ret);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_getxattr (this, loc, &amp;dict,</div><div class='del'>-                               GF_REBAL_OLD_FIND_LOCAL_SUBVOL,</div><div class='del'>-                               NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret, 0, "local "</div><div class='del'>-                        "subvolume determination failed with error: %d",</div><div class='del'>-                        -ret);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+        if (!ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(this, loc, &amp;dict, GF_REBAL_OLD_FIND_LOCAL_SUBVOL,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, 0,</div><div class='add'>+               "local "</div><div class='add'>+               "subvolume determination failed with error: %d",</div><div class='add'>+               -ret);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; conf-&gt;local_subvols_cnt; i++) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "local subvol: "</div><div class='del'>-                        "%s", conf-&gt;local_subvols[i]-&gt;name);</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;local_subvols_cnt; i++) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "local subvol: "</div><div class='add'>+               "%s",</div><div class='add'>+               conf-&gt;local_subvols[i]-&gt;name);</div><div class='ctx'> </div><div class='del'>-                for (j = 0; j &lt; conf-&gt;local_nodeuuids[i].count; j++) {</div><div class='del'>-                        uuid_ptr = &amp;(conf-&gt;local_nodeuuids[i].elements[j].uuid);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='del'>-                                "node uuid : %s",</div><div class='del'>-                                uuid_utoa(*uuid_ptr));</div><div class='del'>-                }</div><div class='add'>+        for (j = 0; j &lt; conf-&gt;local_nodeuuids[i].count; j++) {</div><div class='add'>+            uuid_ptr = &amp;(conf-&gt;local_nodeuuids[i].elements[j].uuid);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0, "node uuid : %s",</div><div class='add'>+                   uuid_utoa(*uuid_ptr));</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Functions for the rebalance estimates feature */</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-gf_defrag_subvol_file_size (xlator_t *this, loc_t *root_loc)</div><div class='add'>+gf_defrag_subvol_file_size(xlator_t *this, loc_t *root_loc)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        struct statvfs buf = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct statvfs buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!this)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_statfs (this, root_loc, &amp;buf, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* Aargh! */</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        return ((buf.f_blocks - buf.f_bfree) * buf.f_frsize);</div><div class='add'>+    ret = syncop_statfs(this, root_loc, &amp;buf, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* Aargh! */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    return ((buf.f_blocks - buf.f_bfree) * buf.f_frsize);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-gf_defrag_total_file_size (xlator_t *this, loc_t *root_loc)</div><div class='add'>+gf_defrag_total_file_size(xlator_t *this, loc_t *root_loc)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t    *conf  = NULL;</div><div class='del'>-        int            i     = 0;</div><div class='del'>-        uint64_t       size_files = 0;</div><div class='del'>-        uint64_t       total_size = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0 ; i &lt; conf-&gt;local_subvols_cnt; i++) {</div><div class='del'>-                size_files = gf_defrag_subvol_file_size (conf-&gt;local_subvols[i],</div><div class='del'>-                                                         root_loc);</div><div class='del'>-                total_size += size_files;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "local subvol: %s,"</div><div class='del'>-                        "cnt = %"PRIu64, conf-&gt;local_subvols[i]-&gt;name,</div><div class='del'>-                        size_files);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='del'>-                "Total size files = %"PRIu64, total_size);</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t size_files = 0;</div><div class='add'>+    uint64_t total_size = 0;</div><div class='ctx'> </div><div class='del'>-        return total_size;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;local_subvols_cnt; i++) {</div><div class='add'>+        size_files = gf_defrag_subvol_file_size(conf-&gt;local_subvols[i],</div><div class='add'>+                                                root_loc);</div><div class='add'>+        total_size += size_files;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "local subvol: %s,"</div><div class='add'>+               "cnt = %" PRIu64,</div><div class='add'>+               conf-&gt;local_subvols[i]-&gt;name, size_files);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0, "Total size files = %" PRIu64,</div><div class='add'>+           total_size);</div><div class='add'>+</div><div class='add'>+    return total_size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-static void*</div><div class='del'>-dht_file_counter_thread (void *args)</div><div class='add'>+static void *</div><div class='add'>+dht_file_counter_thread(void *args)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_info_t *defrag      = NULL;</div><div class='del'>-        loc_t root_loc                = {0,};</div><div class='del'>-        struct timespec time_to_wait  = {0,};</div><div class='del'>-        struct timeval now            = {0,};</div><div class='del'>-        uint64_t tmp_size             = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (!args)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        defrag = (gf_defrag_info_t *) args;</div><div class='del'>-        dht_build_root_loc (defrag-&gt;root_inode, &amp;root_loc);</div><div class='del'>-</div><div class='del'>-        while (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-</div><div class='del'>-                gettimeofday (&amp;now, NULL);</div><div class='del'>-                time_to_wait.tv_sec = now.tv_sec + 600;</div><div class='del'>-                time_to_wait.tv_nsec = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    loc_t root_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timespec time_to_wait = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval now = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uint64_t tmp_size = 0;</div><div class='add'>+</div><div class='add'>+    if (!args)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='add'>+    defrag = (gf_defrag_info_t *)args;</div><div class='add'>+    dht_build_root_loc(defrag-&gt;root_inode, &amp;root_loc);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;defrag-&gt;fc_mutex);</div><div class='del'>-                pthread_cond_timedwait (&amp;defrag-&gt;fc_wakeup_cond,</div><div class='del'>-                                        &amp;defrag-&gt;fc_mutex,</div><div class='del'>-                                        &amp;time_to_wait);</div><div class='add'>+    while (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+        gettimeofday(&amp;now, NULL);</div><div class='add'>+        time_to_wait.tv_sec = now.tv_sec + 600;</div><div class='add'>+        time_to_wait.tv_nsec = 0;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_unlock (&amp;defrag-&gt;fc_mutex);</div><div class='add'>+        pthread_mutex_lock(&amp;defrag-&gt;fc_mutex);</div><div class='add'>+        pthread_cond_timedwait(&amp;defrag-&gt;fc_wakeup_cond, &amp;defrag-&gt;fc_mutex,</div><div class='add'>+                               &amp;time_to_wait);</div><div class='ctx'> </div><div class='add'>+        pthread_mutex_unlock(&amp;defrag-&gt;fc_mutex);</div><div class='ctx'> </div><div class='del'>-                if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED)</div><div class='del'>-                        break;</div><div class='add'>+        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                tmp_size = gf_defrag_total_file_size (defrag-&gt;this,</div><div class='del'>-                                                         &amp;root_loc);</div><div class='add'>+        tmp_size = gf_defrag_total_file_size(defrag-&gt;this, &amp;root_loc);</div><div class='ctx'> </div><div class='del'>-                gf_log ("dht", GF_LOG_INFO,</div><div class='del'>-                        "tmp data size =%"PRIu64,</div><div class='del'>-                        tmp_size);</div><div class='add'>+        gf_log("dht", GF_LOG_INFO, "tmp data size =%" PRIu64, tmp_size);</div><div class='ctx'> </div><div class='del'>-                if (!tmp_size) {</div><div class='del'>-                        gf_msg ("dht", GF_LOG_ERROR, 0, 0, "Failed to get "</div><div class='del'>-                                "the total data size. Unable to estimate "</div><div class='del'>-                                "time to complete rebalance.");</div><div class='del'>-                } else {</div><div class='del'>-                        g_totalsize = tmp_size;</div><div class='del'>-                        gf_msg_debug ("dht", 0,</div><div class='del'>-                                      "total data size =%"PRIu64,</div><div class='del'>-                                      g_totalsize);</div><div class='del'>-                }</div><div class='add'>+        if (!tmp_size) {</div><div class='add'>+            gf_msg("dht", GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "Failed to get "</div><div class='add'>+                   "the total data size. Unable to estimate "</div><div class='add'>+                   "time to complete rebalance.");</div><div class='add'>+        } else {</div><div class='add'>+            g_totalsize = tmp_size;</div><div class='add'>+            gf_msg_debug("dht", 0, "total data size =%" PRIu64, g_totalsize);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_estimates_cleanup (xlator_t *this, gf_defrag_info_t *defrag,</div><div class='del'>-                             pthread_t filecnt_thread)</div><div class='add'>+gf_defrag_estimates_cleanup(xlator_t *this, gf_defrag_info_t *defrag,</div><div class='add'>+                            pthread_t filecnt_thread)</div><div class='ctx'> {</div><div class='del'>-        int ret   = -1;</div><div class='del'>-</div><div class='del'>-        /* Wake up the filecounter thread.</div><div class='del'>-         * By now the defrag status will no longer be</div><div class='del'>-         * GF_DEFRAG_STATUS_STARTED so the thread will exit the loop.</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;defrag-&gt;fc_mutex);</div><div class='del'>-        {</div><div class='del'>-                pthread_cond_broadcast (&amp;defrag-&gt;fc_wakeup_cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;defrag-&gt;fc_mutex);</div><div class='del'>-</div><div class='del'>-        ret = pthread_join (filecnt_thread, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("dht", GF_LOG_ERROR, ret, 0,</div><div class='del'>-                        "file_counter_thread: pthread_join failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    /* Wake up the filecounter thread.</div><div class='add'>+     * By now the defrag status will no longer be</div><div class='add'>+     * GF_DEFRAG_STATUS_STARTED so the thread will exit the loop.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;defrag-&gt;fc_mutex);</div><div class='add'>+    {</div><div class='add'>+        pthread_cond_broadcast(&amp;defrag-&gt;fc_wakeup_cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;defrag-&gt;fc_mutex);</div><div class='add'>+</div><div class='add'>+    ret = pthread_join(filecnt_thread, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("dht", GF_LOG_ERROR, ret, 0,</div><div class='add'>+               "file_counter_thread: pthread_join failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_defrag_estimates_init (xlator_t *this, loc_t *loc,</div><div class='del'>-                          pthread_t *filecnt_thread)</div><div class='add'>+gf_defrag_estimates_init(xlator_t *this, loc_t *loc, pthread_t *filecnt_thread)</div><div class='ctx'> {</div><div class='del'>-        int                      ret            = -1;</div><div class='del'>-        dht_conf_t              *conf           = NULL;</div><div class='del'>-        gf_defrag_info_t        *defrag         = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-</div><div class='del'>-        g_totalsize = gf_defrag_total_file_size (this, loc);</div><div class='del'>-        if (!g_totalsize) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "Failed to get "</div><div class='del'>-                        "the total data size. Unable to estimate "</div><div class='del'>-                        "time to complete rebalance.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (filecnt_thread, NULL,</div><div class='del'>-                                &amp;dht_file_counter_thread,</div><div class='del'>-                                (void *)defrag, "dhtfcnt");</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret, 0, "Failed to "</div><div class='del'>-                        "create the file counter thread ");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+</div><div class='add'>+    g_totalsize = gf_defrag_total_file_size(this, loc);</div><div class='add'>+    if (!g_totalsize) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "Failed to get "</div><div class='add'>+               "the total data size. Unable to estimate "</div><div class='add'>+               "time to complete rebalance.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(filecnt_thread, NULL, &amp;dht_file_counter_thread,</div><div class='add'>+                           (void *)defrag, "dhtfcnt");</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, 0,</div><div class='add'>+               "Failed to "</div><div class='add'>+               "create the file counter thread ");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Init and cleanup functions for parallel file migration*/</div><div class='ctx'> int</div><div class='del'>-gf_defrag_parallel_migration_init (xlator_t *this, gf_defrag_info_t *defrag,</div><div class='del'>-                                   pthread_t **tid_array, int *thread_index)</div><div class='add'>+gf_defrag_parallel_migration_init(xlator_t *this, gf_defrag_info_t *defrag,</div><div class='add'>+                                  pthread_t **tid_array, int *thread_index)</div><div class='ctx'> {</div><div class='del'>-        int            ret                      = -1;</div><div class='del'>-        int            thread_spawn_count       = 0;</div><div class='del'>-        int            index                    = 0;</div><div class='del'>-        pthread_t     *tid                      = NULL;</div><div class='del'>-        char           thread_name[GF_THREAD_NAMEMAX] = {0,};</div><div class='del'>-</div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Initialize global entry queue */</div><div class='del'>-        defrag-&gt;queue = GF_CALLOC (1, sizeof (struct dht_container),</div><div class='del'>-                                   gf_dht_mt_container_t);</div><div class='del'>-</div><div class='del'>-        if (!defrag-&gt;queue) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                        "Failed to initialise migration queue");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int thread_spawn_count = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    pthread_t *tid = NULL;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Initialize global entry queue */</div><div class='add'>+    defrag-&gt;queue = GF_CALLOC(1, sizeof(struct dht_container),</div><div class='add'>+                              gf_dht_mt_container_t);</div><div class='add'>+</div><div class='add'>+    if (!defrag-&gt;queue) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+               "Failed to initialise migration queue");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;(defrag-&gt;queue[0].list));</div><div class='add'>+    INIT_LIST_HEAD(&amp;(defrag-&gt;queue[0].list));</div><div class='ctx'> </div><div class='del'>-        thread_spawn_count = MAX (MAX_REBAL_THREADS, 4);</div><div class='add'>+    thread_spawn_count = MAX(MAX_REBAL_THREADS, 4);</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "thread_spawn_count: %d",</div><div class='del'>-                      thread_spawn_count);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "thread_spawn_count: %d", thread_spawn_count);</div><div class='ctx'> </div><div class='del'>-        tid = GF_CALLOC (thread_spawn_count, sizeof (pthread_t),</div><div class='del'>-                         gf_common_mt_pthread_t);</div><div class='del'>-        if (!tid) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,  0,</div><div class='del'>-                        "Failed to create migration threads");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        defrag-&gt;current_thread_count = thread_spawn_count;</div><div class='del'>-</div><div class='del'>-        /*Spawn Threads Here*/</div><div class='del'>-        while (index &lt; thread_spawn_count) {</div><div class='del'>-                snprintf (thread_name, sizeof(thread_name),</div><div class='del'>-                          "dhtmig%d", ((index + 1) &amp; 0x3ff));</div><div class='del'>-                ret = gf_thread_create (&amp;(tid[index]), NULL,</div><div class='del'>-                                        &amp;gf_defrag_task, (void *)defrag,</div><div class='del'>-                                        thread_name);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg ("DHT", GF_LOG_ERROR, ret, 0,</div><div class='del'>-                                "Thread[%d] creation failed. ",</div><div class='del'>-                                 index);</div><div class='del'>-                         ret = -1;</div><div class='del'>-                         goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log ("DHT", GF_LOG_INFO, "Thread[%d] "</div><div class='del'>-                                "creation successful", index);</div><div class='del'>-                }</div><div class='del'>-                index++;</div><div class='add'>+    tid = GF_CALLOC(thread_spawn_count, sizeof(pthread_t),</div><div class='add'>+                    gf_common_mt_pthread_t);</div><div class='add'>+    if (!tid) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+               "Failed to create migration threads");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    defrag-&gt;current_thread_count = thread_spawn_count;</div><div class='add'>+</div><div class='add'>+    /*Spawn Threads Here*/</div><div class='add'>+    while (index &lt; thread_spawn_count) {</div><div class='add'>+        snprintf(thread_name, sizeof(thread_name), "dhtmig%d",</div><div class='add'>+                 ((index + 1) &amp; 0x3ff));</div><div class='add'>+        ret = gf_thread_create(&amp;(tid[index]), NULL, &amp;gf_defrag_task,</div><div class='add'>+                               (void *)defrag, thread_name);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg("DHT", GF_LOG_ERROR, ret, 0, "Thread[%d] creation failed. ",</div><div class='add'>+                   index);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log("DHT", GF_LOG_INFO,</div><div class='add'>+                   "Thread[%d] "</div><div class='add'>+                   "creation successful",</div><div class='add'>+                   index);</div><div class='ctx'>         }</div><div class='add'>+        index++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        *thread_index = index;</div><div class='del'>-        *tid_array = tid;</div><div class='add'>+    *thread_index = index;</div><div class='add'>+    *tid_array = tid;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_parallel_migration_cleanup (gf_defrag_info_t *defrag,</div><div class='del'>-                                      pthread_t *tid_array, int thread_index)</div><div class='add'>+gf_defrag_parallel_migration_cleanup(gf_defrag_info_t *defrag,</div><div class='add'>+                                     pthread_t *tid_array, int thread_index)</div><div class='ctx'> {</div><div class='del'>-        int ret          = -1;</div><div class='del'>-        int i            =  0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* Wake up all migration threads */</div><div class='del'>-        pthread_mutex_lock (&amp;defrag-&gt;dfq_mutex);</div><div class='del'>-        {</div><div class='del'>-                defrag-&gt;crawl_done = 1;</div><div class='add'>+    /* Wake up all migration threads */</div><div class='add'>+    pthread_mutex_lock(&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+    {</div><div class='add'>+        defrag-&gt;crawl_done = 1;</div><div class='ctx'> </div><div class='del'>-                pthread_cond_broadcast (&amp;defrag-&gt;parallel_migration_cond);</div><div class='del'>-                pthread_cond_broadcast (&amp;defrag-&gt;df_wakeup_thread);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;defrag-&gt;dfq_mutex);</div><div class='add'>+        pthread_cond_broadcast(&amp;defrag-&gt;parallel_migration_cond);</div><div class='add'>+        pthread_cond_broadcast(&amp;defrag-&gt;df_wakeup_thread);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;defrag-&gt;dfq_mutex);</div><div class='ctx'> </div><div class='del'>-        /*Wait for all the threads to complete their task*/</div><div class='del'>-        for (i = 0; i &lt; thread_index; i++) {</div><div class='del'>-                pthread_join (tid_array[i], NULL);</div><div class='del'>-        }</div><div class='add'>+    /*Wait for all the threads to complete their task*/</div><div class='add'>+    for (i = 0; i &lt; thread_index; i++) {</div><div class='add'>+        pthread_join(tid_array[i], NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (tid_array);</div><div class='add'>+    GF_FREE(tid_array);</div><div class='ctx'> </div><div class='del'>-        /* Cleanup the migration queue */</div><div class='del'>-        if (defrag-&gt;queue) {</div><div class='del'>-                gf_dirent_free (defrag-&gt;queue[0].df_entry);</div><div class='del'>-                INIT_LIST_HEAD (&amp;(defrag-&gt;queue[0].list));</div><div class='del'>-        }</div><div class='add'>+    /* Cleanup the migration queue */</div><div class='add'>+    if (defrag-&gt;queue) {</div><div class='add'>+        gf_dirent_free(defrag-&gt;queue[0].df_entry);</div><div class='add'>+        INIT_LIST_HEAD(&amp;(defrag-&gt;queue[0].list));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (defrag-&gt;queue);</div><div class='add'>+    GF_FREE(defrag-&gt;queue);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_defrag_start_crawl (void *data)</div><div class='add'>+gf_defrag_start_crawl(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this                   = NULL;</div><div class='del'>-        dht_conf_t              *conf                   = NULL;</div><div class='del'>-        gf_defrag_info_t        *defrag                 = NULL;</div><div class='del'>-        dict_t                  *fix_layout             = NULL;</div><div class='del'>-        dict_t                  *migrate_data           = NULL;</div><div class='del'>-        dict_t                  *status                 = NULL;</div><div class='del'>-        glusterfs_ctx_t         *ctx                    = NULL;</div><div class='del'>-        dht_methods_t           *methods                = NULL;</div><div class='del'>-        call_frame_t            *statfs_frame           = NULL;</div><div class='del'>-        xlator_t                *old_THIS               = NULL;</div><div class='del'>-        int                      ret                    = -1;</div><div class='del'>-        loc_t                    loc                    = {0,};</div><div class='del'>-        struct iatt              iatt                   = {0,};</div><div class='del'>-        struct iatt              parent                 = {0,};</div><div class='del'>-        int                      thread_index           = 0;</div><div class='del'>-        pthread_t               *tid                    = NULL;</div><div class='del'>-        pthread_t                filecnt_thread;</div><div class='del'>-        gf_boolean_t             is_tier_detach         = _gf_false;</div><div class='del'>-        gf_boolean_t             fc_thread_started      = _gf_false;</div><div class='del'>-</div><div class='del'>-        this = data;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto exit;</div><div class='del'>-</div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto exit;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto exit;</div><div class='del'>-</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto exit;</div><div class='del'>-</div><div class='del'>-        gettimeofday (&amp;defrag-&gt;start_time, NULL);</div><div class='del'>-        dht_build_root_inode (this, &amp;defrag-&gt;root_inode);</div><div class='del'>-        if (!defrag-&gt;root_inode)</div><div class='del'>-                goto out;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dict_t *fix_layout = NULL;</div><div class='add'>+    dict_t *migrate_data = NULL;</div><div class='add'>+    dict_t *status = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='add'>+    call_frame_t *statfs_frame = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt parent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int thread_index = 0;</div><div class='add'>+    pthread_t *tid = NULL;</div><div class='add'>+    pthread_t filecnt_thread;</div><div class='add'>+    gf_boolean_t is_tier_detach = _gf_false;</div><div class='add'>+    gf_boolean_t fc_thread_started = _gf_false;</div><div class='add'>+</div><div class='add'>+    this = data;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto exit;</div><div class='add'>+</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto exit;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto exit;</div><div class='add'>+</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto exit;</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;defrag-&gt;start_time, NULL);</div><div class='add'>+    dht_build_root_inode(this, &amp;defrag-&gt;root_inode);</div><div class='add'>+    if (!defrag-&gt;root_inode)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dht_build_root_loc(defrag-&gt;root_inode, &amp;loc);</div><div class='add'>+</div><div class='add'>+    /* fix-layout on '/' first */</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(this, &amp;loc, &amp;iatt, &amp;parent, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_REBALANCE_START_FAILED,</div><div class='add'>+               "Failed to start rebalance: look up on / failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_build_root_loc (defrag-&gt;root_inode, &amp;loc);</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = this;</div><div class='ctx'> </div><div class='del'>-        /* fix-layout on '/' first */</div><div class='add'>+    statfs_frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!statfs_frame) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, ENOMEM,</div><div class='add'>+               "Insufficient memory. Frame creation failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (this, &amp;loc, &amp;iatt, &amp;parent, NULL, NULL);</div><div class='add'>+    /* async statfs update for honoring min-free-disk */</div><div class='add'>+    dht_get_du_info(statfs_frame, this, &amp;loc);</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_REBALANCE_START_FAILED,</div><div class='del'>-                        "Failed to start rebalance: look up on / failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fix_layout = dict_new();</div><div class='add'>+    if (!fix_layout) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Unfortunately, we can't do special xattrs (like fix.layout) and</div><div class='add'>+     * real ones in the same call currently, and changing it seems</div><div class='add'>+     * riskier than just doing two calls.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "%s using commit hash %u", __func__,</div><div class='add'>+           conf-&gt;vol_commit_hash);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(fix_layout, conf-&gt;commithash_xattr_name,</div><div class='add'>+                          conf-&gt;vol_commit_hash);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to set %s",</div><div class='add'>+               conf-&gt;commithash_xattr_name);</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_setxattr(this, &amp;loc, fix_layout, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to set commit hash on %s. "</div><div class='add'>+               "Rebalance cannot proceed.",</div><div class='add'>+               loc.path);</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* We now return to our regularly scheduled program. */</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(fix_layout, GF_XATTR_FIX_LAYOUT_KEY, "yes");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_REBALANCE_START_FAILED,</div><div class='add'>+               "Failed to start rebalance:"</div><div class='add'>+               "Failed to set dictionary value: key = %s",</div><div class='add'>+               GF_XATTR_FIX_LAYOUT_KEY);</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = this;</div><div class='add'>+    defrag-&gt;new_commit_hash = conf-&gt;vol_commit_hash;</div><div class='ctx'> </div><div class='del'>-        statfs_frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!statfs_frame) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, ENOMEM,</div><div class='del'>-                        "Insufficient memory. Frame creation failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_setxattr(this, &amp;loc, fix_layout, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_REBALANCE_FAILED,</div><div class='add'>+               "fix layout on %s failed", loc.path);</div><div class='add'>+        defrag-&gt;total_failures++;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* async statfs update for honoring min-free-disk */</div><div class='del'>-        dht_get_du_info (statfs_frame, this, &amp;loc);</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    if (defrag-&gt;cmd != GF_DEFRAG_CMD_START_LAYOUT_FIX) {</div><div class='add'>+        /* We need to migrate files */</div><div class='ctx'> </div><div class='del'>-        fix_layout = dict_new ();</div><div class='del'>-        if (!fix_layout) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        migrate_data = dict_new();</div><div class='add'>+        if (!migrate_data) {</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Unfortunately, we can't do special xattrs (like fix.layout) and</div><div class='del'>-         * real ones in the same call currently, and changing it seems</div><div class='del'>-         * riskier than just doing two calls.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "%s using commit hash %u",</div><div class='del'>-                __func__, conf-&gt;vol_commit_hash);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (fix_layout, conf-&gt;commithash_xattr_name,</div><div class='del'>-                               conf-&gt;vol_commit_hash);</div><div class='add'>+        ret = dict_set_str(</div><div class='add'>+            migrate_data, GF_XATTR_FILE_MIGRATE_KEY,</div><div class='add'>+            (defrag-&gt;cmd == GF_DEFRAG_CMD_START_FORCE) ? "force" : "non-force");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set %s", conf-&gt;commithash_xattr_name);</div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_setxattr (this, &amp;loc, fix_layout, 0, NULL, NULL);</div><div class='add'>+        ret = dht_init_local_subvols_and_nodeuuids(this, conf, &amp;loc);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to set commit hash on %s. "</div><div class='del'>-                        "Rebalance cannot proceed.",</div><div class='del'>-                        loc.path);</div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* We now return to our regularly scheduled program. */</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (fix_layout, GF_XATTR_FIX_LAYOUT_KEY, "yes");</div><div class='add'>+        /* Initialise the structures required for parallel migration */</div><div class='add'>+        ret = gf_defrag_parallel_migration_init(this, defrag, &amp;tid,</div><div class='add'>+                                                &amp;thread_index);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_REBALANCE_START_FAILED,</div><div class='del'>-                        "Failed to start rebalance:"</div><div class='del'>-                        "Failed to set dictionary value: key = %s",</div><div class='del'>-                        GF_XATTR_FIX_LAYOUT_KEY);</div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "Aborting rebalance.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;new_commit_hash = conf-&gt;vol_commit_hash;</div><div class='del'>-</div><div class='del'>-        ret = syncop_setxattr (this, &amp;loc, fix_layout, 0, NULL, NULL);</div><div class='add'>+        ret = gf_defrag_estimates_init(this, &amp;loc, &amp;filecnt_thread);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_REBALANCE_FAILED,</div><div class='del'>-                        "fix layout on %s failed",</div><div class='del'>-                        loc.path);</div><div class='del'>-                defrag-&gt;total_failures++;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;cmd != GF_DEFRAG_CMD_START_LAYOUT_FIX) {</div><div class='del'>-                /* We need to migrate files */</div><div class='del'>-</div><div class='del'>-                migrate_data = dict_new ();</div><div class='del'>-                if (!migrate_data) {</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = dict_set_str (migrate_data, GF_XATTR_FILE_MIGRATE_KEY,</div><div class='del'>-                        (defrag-&gt;cmd == GF_DEFRAG_CMD_START_FORCE)</div><div class='del'>-                        ?  "force" : "non-force");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dht_init_local_subvols_and_nodeuuids (this, conf, &amp;loc);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Initialise the structures required for parallel migration */</div><div class='del'>-                ret = gf_defrag_parallel_migration_init (this, defrag, &amp;tid,</div><div class='del'>-                                                         &amp;thread_index);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "Aborting rebalance.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_defrag_estimates_init (this, &amp;loc, &amp;filecnt_thread);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        /* Not a fatal error. Allow the rebalance to proceed*/</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        fc_thread_started = _gf_true;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='del'>-                /* Fix layout for attach tier */</div><div class='del'>-                ret = gf_tier_start_fix_layout (this, &amp;loc, defrag, fix_layout);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                methods = &amp;(conf-&gt;methods);</div><div class='del'>-</div><div class='del'>-                /* Calling tier_start of tier.c */</div><div class='del'>-                methods-&gt;migration_other(this, defrag);</div><div class='del'>-                if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='del'>-                    defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START) {</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_str (migrate_data,</div><div class='del'>-                                            GF_XATTR_FILE_MIGRATE_KEY,</div><div class='del'>-                                            "force");</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                }</div><div class='add'>+            /* Not a fatal error. Allow the rebalance to proceed*/</div><div class='add'>+            ret = 0;</div><div class='ctx'>         } else {</div><div class='del'>-                ret = gf_defrag_fix_layout (this, defrag, &amp;loc, fix_layout,</div><div class='del'>-                                    migrate_data);</div><div class='del'>-                if (ret &amp;&amp; ret != 2) {</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret != 2 &amp;&amp; gf_defrag_settle_hash</div><div class='del'>-                        (this, defrag, &amp;loc, fix_layout) != 0) {</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='del'>-                    defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START)</div><div class='del'>-                        is_tier_detach = _gf_true;</div><div class='del'>-</div><div class='add'>+            fc_thread_started = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log ("DHT", GF_LOG_INFO, "crawling file-system completed");</div><div class='del'>-out:</div><div class='del'>-</div><div class='del'>-        /* We are here means crawling the entire file system is done</div><div class='del'>-           or something failed. Set defrag-&gt;crawl_done flag to intimate</div><div class='del'>-           the migrator threads to exhaust the defrag-&gt;queue and terminate*/</div><div class='del'>-</div><div class='add'>+    if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='add'>+        /* Fix layout for attach tier */</div><div class='add'>+        ret = gf_tier_start_fix_layout(this, &amp;loc, defrag, fix_layout);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='del'>-                /* Wait for the tier fixlayout to</div><div class='del'>-                 * complete if its was started.*/</div><div class='del'>-                 gf_tier_wait_fix_lookup (defrag);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (is_tier_detach &amp;&amp; ret == 0) {</div><div class='del'>-                /* If it was a detach remove the tier fix-layout</div><div class='del'>-                * xattr on root. Ignoring the failure, as nothing has to be</div><div class='del'>-                * done, logging is done in gf_tier_clear_fix_layout */</div><div class='del'>-                gf_tier_clear_fix_layout (this, &amp;loc, defrag);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_defrag_parallel_migration_cleanup (defrag, tid, thread_index);</div><div class='del'>-</div><div class='del'>-        if ((defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STOPPED) &amp;&amp;</div><div class='del'>-            (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_FAILED)) {</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_COMPLETE;</div><div class='add'>+        /* Calling tier_start of tier.c */</div><div class='add'>+        methods-&gt;migration_other(this, defrag);</div><div class='add'>+        if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='add'>+            defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START) {</div><div class='add'>+            ret = dict_set_str(migrate_data, GF_XATTR_FILE_MIGRATE_KEY,</div><div class='add'>+                               "force");</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (fc_thread_started) {</div><div class='del'>-                gf_defrag_estimates_cleanup (this, defrag, filecnt_thread);</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_defrag_fix_layout(this, defrag, &amp;loc, fix_layout,</div><div class='add'>+                                   migrate_data);</div><div class='add'>+        if (ret &amp;&amp; ret != 2) {</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dht_send_rebalance_event (this, defrag-&gt;cmd, defrag-&gt;defrag_status);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;defrag-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                status = dict_new ();</div><div class='del'>-                gf_defrag_status_get (conf, status);</div><div class='del'>-                if (ctx &amp;&amp; ctx-&gt;notify)</div><div class='del'>-                        ctx-&gt;notify (GF_EN_DEFRAG_STATUS, status);</div><div class='del'>-                if (status)</div><div class='del'>-                        dict_unref (status);</div><div class='del'>-                defrag-&gt;is_exiting = 1;</div><div class='add'>+        if (ret != 2 &amp;&amp;</div><div class='add'>+            gf_defrag_settle_hash(this, defrag, &amp;loc, fix_layout) != 0) {</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;defrag-&gt;lock);</div><div class='ctx'> </div><div class='add'>+        if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='add'>+            defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START)</div><div class='add'>+            is_tier_detach = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (defrag);</div><div class='del'>-        conf-&gt;defrag = NULL;</div><div class='del'>-</div><div class='del'>-        if (migrate_data)</div><div class='del'>-                dict_unref (migrate_data);</div><div class='add'>+    gf_log("DHT", GF_LOG_INFO, "crawling file-system completed");</div><div class='add'>+out:</div><div class='ctx'> </div><div class='del'>-        if (statfs_frame) {</div><div class='del'>-                STACK_DESTROY (statfs_frame-&gt;root);</div><div class='del'>-        }</div><div class='add'>+    /* We are here means crawling the entire file system is done</div><div class='add'>+       or something failed. Set defrag-&gt;crawl_done flag to intimate</div><div class='add'>+       the migrator threads to exhaust the defrag-&gt;queue and terminate*/</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) {</div><div class='add'>+        /* Wait for the tier fixlayout to</div><div class='add'>+         * complete if its was started.*/</div><div class='add'>+        gf_tier_wait_fix_lookup(defrag);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (is_tier_detach &amp;&amp; ret == 0) {</div><div class='add'>+        /* If it was a detach remove the tier fix-layout</div><div class='add'>+         * xattr on root. Ignoring the failure, as nothing has to be</div><div class='add'>+         * done, logging is done in gf_tier_clear_fix_layout */</div><div class='add'>+        gf_tier_clear_fix_layout(this, &amp;loc, defrag);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_defrag_parallel_migration_cleanup(defrag, tid, thread_index);</div><div class='add'>+</div><div class='add'>+    if ((defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STOPPED) &amp;&amp;</div><div class='add'>+        (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_FAILED)) {</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_COMPLETE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fc_thread_started) {</div><div class='add'>+        gf_defrag_estimates_cleanup(this, defrag, filecnt_thread);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_send_rebalance_event(this, defrag-&gt;cmd, defrag-&gt;defrag_status);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;defrag-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        status = dict_new();</div><div class='add'>+        gf_defrag_status_get(conf, status);</div><div class='add'>+        if (ctx &amp;&amp; ctx-&gt;notify)</div><div class='add'>+            ctx-&gt;notify(GF_EN_DEFRAG_STATUS, status);</div><div class='add'>+        if (status)</div><div class='add'>+            dict_unref(status);</div><div class='add'>+        defrag-&gt;is_exiting = 1;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;defrag-&gt;lock);</div><div class='add'>+</div><div class='add'>+    GF_FREE(defrag);</div><div class='add'>+    conf-&gt;defrag = NULL;</div><div class='add'>+</div><div class='add'>+    if (migrate_data)</div><div class='add'>+        dict_unref(migrate_data);</div><div class='add'>+</div><div class='add'>+    if (statfs_frame) {</div><div class='add'>+        STACK_DESTROY(statfs_frame-&gt;root);</div><div class='add'>+    }</div><div class='ctx'> exit:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-gf_defrag_done  (int ret, call_frame_t *sync_frame, void *data)</div><div class='add'>+gf_defrag_done(int ret, call_frame_t *sync_frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_listener_stop (sync_frame-&gt;this);</div><div class='add'>+    gf_listener_stop(sync_frame-&gt;this);</div><div class='ctx'> </div><div class='del'>-        STACK_DESTROY (sync_frame-&gt;root);</div><div class='del'>-        kill (getpid(), SIGTERM);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_DESTROY(sync_frame-&gt;root);</div><div class='add'>+    kill(getpid(), SIGTERM);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_defrag_start (void *data)</div><div class='add'>+gf_defrag_start(void *data)</div><div class='ctx'> {</div><div class='del'>-        int                      ret    = -1;</div><div class='del'>-        call_frame_t            *frame  = NULL;</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='del'>-        gf_defrag_info_t        *defrag = NULL;</div><div class='del'>-        xlator_t                *this  = NULL;</div><div class='del'>-        xlator_t                *old_THIS = NULL;</div><div class='del'>-</div><div class='del'>-        this = data;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *old_THIS = NULL;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto out;</div><div class='add'>+    this = data;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;root-&gt;pid = GF_CLIENT_PID_DEFRAG;</div><div class='add'>+    frame-&gt;root-&gt;pid = GF_CLIENT_PID_DEFRAG;</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;pid = frame-&gt;root-&gt;pid;</div><div class='add'>+    defrag-&gt;pid = frame-&gt;root-&gt;pid;</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_STARTED;</div><div class='add'>+    defrag-&gt;defrag_status = GF_DEFRAG_STATUS_STARTED;</div><div class='ctx'> </div><div class='del'>-        old_THIS = THIS;</div><div class='del'>-        THIS = this;</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, gf_defrag_start_crawl,</div><div class='del'>-                            gf_defrag_done, frame, this);</div><div class='add'>+    old_THIS = THIS;</div><div class='add'>+    THIS = this;</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, gf_defrag_start_crawl, gf_defrag_done,</div><div class='add'>+                       frame, this);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_REBALANCE_START_FAILED,</div><div class='del'>-                        "Could not create task for rebalance");</div><div class='del'>-        THIS = old_THIS;</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_REBALANCE_START_FAILED,</div><div class='add'>+               "Could not create task for rebalance");</div><div class='add'>+    THIS = old_THIS;</div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> uint64_t</div><div class='del'>-gf_defrag_get_estimates_based_on_size (dht_conf_t *conf)</div><div class='add'>+gf_defrag_get_estimates_based_on_size(dht_conf_t *conf)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_info_t *defrag = NULL;</div><div class='del'>-        double            rate_processed = 0;</div><div class='del'>-        uint64_t          total_processed = 0;</div><div class='del'>-        uint64_t          tmp_count = 0;</div><div class='del'>-        uint64_t          time_to_complete = 0;</div><div class='del'>-        struct            timeval now = {0,};</div><div class='del'>-        double            elapsed = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    double rate_processed = 0;</div><div class='add'>+    uint64_t total_processed = 0;</div><div class='add'>+    uint64_t tmp_count = 0;</div><div class='add'>+    uint64_t time_to_complete = 0;</div><div class='add'>+    struct timeval now = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    double elapsed = 0;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        if (!g_totalsize)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!g_totalsize)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;now, NULL);</div><div class='del'>-        elapsed = now.tv_sec - defrag-&gt;start_time.tv_sec;</div><div class='add'>+    gettimeofday(&amp;now, NULL);</div><div class='add'>+    elapsed = now.tv_sec - defrag-&gt;start_time.tv_sec;</div><div class='ctx'> </div><div class='del'>-        /* Don't calculate the estimates for the first 10 minutes.</div><div class='del'>-         * It is unlikely to be accurate and estimates are not required</div><div class='del'>-         * if the process finishes in less than 10 mins.</div><div class='del'>-         */</div><div class='add'>+    /* Don't calculate the estimates for the first 10 minutes.</div><div class='add'>+     * It is unlikely to be accurate and estimates are not required</div><div class='add'>+     * if the process finishes in less than 10 mins.</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        if (elapsed &lt; ESTIMATE_START_INTERVAL) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='del'>-                        "Rebalance estimates will not be available for the "</div><div class='del'>-                        "first %d seconds.", ESTIMATE_START_INTERVAL);</div><div class='add'>+    if (elapsed &lt; ESTIMATE_START_INTERVAL) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "Rebalance estimates will not be available for the "</div><div class='add'>+               "first %d seconds.",</div><div class='add'>+               ESTIMATE_START_INTERVAL);</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        total_processed = defrag-&gt;size_processed;</div><div class='add'>+    total_processed = defrag-&gt;size_processed;</div><div class='ctx'> </div><div class='del'>-        /* rate at which files processed */</div><div class='del'>-        rate_processed = (total_processed)/elapsed;</div><div class='add'>+    /* rate at which files processed */</div><div class='add'>+    rate_processed = (total_processed) / elapsed;</div><div class='ctx'> </div><div class='del'>-        tmp_count = g_totalsize;</div><div class='add'>+    tmp_count = g_totalsize;</div><div class='ctx'> </div><div class='del'>-        if (rate_processed) {</div><div class='del'>-                time_to_complete = (tmp_count)/rate_processed;</div><div class='add'>+    if (rate_processed) {</div><div class='add'>+        time_to_complete = (tmp_count) / rate_processed;</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "Unable to calculate estimated time for rebalance");</div><div class='del'>-        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "Unable to calculate estimated time for rebalance");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "TIME: (size) total_processed=%"PRIu64" tmp_cnt = %"PRIu64","</div><div class='del'>-                "rate_processed=%f, elapsed = %f", total_processed, tmp_count,</div><div class='del'>-                rate_processed, elapsed);</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "TIME: (size) total_processed=%" PRIu64 " tmp_cnt = %" PRIu64</div><div class='add'>+           ","</div><div class='add'>+           "rate_processed=%f, elapsed = %f",</div><div class='add'>+           total_processed, tmp_count, rate_processed, elapsed);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return time_to_complete;</div><div class='add'>+    return time_to_complete;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-gf_defrag_status_get (dht_conf_t *conf, dict_t *dict)</div><div class='add'>+gf_defrag_status_get(dht_conf_t *conf, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int      ret    = 0;</div><div class='del'>-        uint64_t files  = 0;</div><div class='del'>-        uint64_t size   = 0;</div><div class='del'>-        uint64_t lookup = 0;</div><div class='del'>-        uint64_t failures = 0;</div><div class='del'>-        uint64_t skipped = 0;</div><div class='del'>-        uint64_t promoted = 0;</div><div class='del'>-        uint64_t demoted = 0;</div><div class='del'>-        char    *status = "";</div><div class='del'>-        double   elapsed = 0;</div><div class='del'>-        struct timeval end = {0,};</div><div class='del'>-        uint64_t time_to_complete = 0;</div><div class='del'>-        uint64_t time_left = 0;</div><div class='del'>-        gf_defrag_info_t *defrag = conf-&gt;defrag;</div><div class='del'>-</div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-        if (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_NOT_STARTED)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        files  = defrag-&gt;total_files;</div><div class='del'>-        size   = defrag-&gt;total_data;</div><div class='del'>-        lookup = defrag-&gt;num_files_lookedup;</div><div class='del'>-        failures = defrag-&gt;total_failures;</div><div class='del'>-        skipped = defrag-&gt;skipped;</div><div class='del'>-        promoted = defrag-&gt;total_files_promoted;</div><div class='del'>-        demoted = defrag-&gt;total_files_demoted;</div><div class='del'>-</div><div class='del'>-        gettimeofday (&amp;end, NULL);</div><div class='del'>-</div><div class='del'>-        elapsed = end.tv_sec - defrag-&gt;start_time.tv_sec;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* The rebalance is still in progress */</div><div class='del'>-</div><div class='del'>-        if ((defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER)</div><div class='del'>-            &amp;&amp; (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_STARTED)) {</div><div class='del'>-</div><div class='del'>-                time_to_complete = gf_defrag_get_estimates_based_on_size (conf);</div><div class='del'>-</div><div class='del'>-                if (time_to_complete &amp;&amp; (time_to_complete &gt; elapsed))</div><div class='del'>-                        time_left = time_to_complete - elapsed;</div><div class='del'>-</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "TIME: Estimated total time to complete (size)= %"PRIu64</div><div class='del'>-                        " seconds, seconds left = %"PRIu64"",</div><div class='del'>-                        time_to_complete, time_left);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto log;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "promoted", promoted);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set promoted count");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "demoted", demoted);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set demoted count");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "files", files);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set file count");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "size", size);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set size of xfer");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "lookups", lookup);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set lookedup file count");</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, "status", defrag-&gt;defrag_status);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set status");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_double (dict, "run-time", elapsed);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set run-time");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "failures", failures);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set failure count");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "skipped", skipped);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set skipped file count");</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, "time-left", time_left);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set time-left");</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t files = 0;</div><div class='add'>+    uint64_t size = 0;</div><div class='add'>+    uint64_t lookup = 0;</div><div class='add'>+    uint64_t failures = 0;</div><div class='add'>+    uint64_t skipped = 0;</div><div class='add'>+    uint64_t promoted = 0;</div><div class='add'>+    uint64_t demoted = 0;</div><div class='add'>+    char *status = "";</div><div class='add'>+    double elapsed = 0;</div><div class='add'>+    struct timeval end = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uint64_t time_to_complete = 0;</div><div class='add'>+    uint64_t time_left = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = conf-&gt;defrag;</div><div class='add'>+</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_NOT_STARTED)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    files = defrag-&gt;total_files;</div><div class='add'>+    size = defrag-&gt;total_data;</div><div class='add'>+    lookup = defrag-&gt;num_files_lookedup;</div><div class='add'>+    failures = defrag-&gt;total_failures;</div><div class='add'>+    skipped = defrag-&gt;skipped;</div><div class='add'>+    promoted = defrag-&gt;total_files_promoted;</div><div class='add'>+    demoted = defrag-&gt;total_files_demoted;</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;end, NULL);</div><div class='add'>+</div><div class='add'>+    elapsed = end.tv_sec - defrag-&gt;start_time.tv_sec;</div><div class='add'>+</div><div class='add'>+    /* The rebalance is still in progress */</div><div class='add'>+</div><div class='add'>+    if ((defrag-&gt;cmd != GF_DEFRAG_CMD_START_TIER) &amp;&amp;</div><div class='add'>+        (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_STARTED)) {</div><div class='add'>+        time_to_complete = gf_defrag_get_estimates_based_on_size(conf);</div><div class='add'>+</div><div class='add'>+        if (time_to_complete &amp;&amp; (time_to_complete &gt; elapsed))</div><div class='add'>+            time_left = time_to_complete - elapsed;</div><div class='add'>+</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_INFO,</div><div class='add'>+               "TIME: Estimated total time to complete (size)= %" PRIu64</div><div class='add'>+               " seconds, seconds left = %" PRIu64 "",</div><div class='add'>+               time_to_complete, time_left);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto log;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "promoted", promoted);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set promoted count");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "demoted", demoted);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set demoted count");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "files", files);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set file count");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "size", size);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set size of xfer");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "lookups", lookup);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set lookedup file count");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(dict, "status", defrag-&gt;defrag_status);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set status");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_double(dict, "run-time", elapsed);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set run-time");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "failures", failures);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set failure count");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "skipped", skipped);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set skipped file count");</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, "time-left", time_left);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_WARNING, "failed to set time-left");</div><div class='ctx'> </div><div class='ctx'> log:</div><div class='del'>-        switch (defrag-&gt;defrag_status) {</div><div class='add'>+    switch (defrag-&gt;defrag_status) {</div><div class='ctx'>         case GF_DEFRAG_STATUS_NOT_STARTED:</div><div class='del'>-                status = "not started";</div><div class='del'>-                break;</div><div class='add'>+            status = "not started";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_STATUS_STARTED:</div><div class='del'>-                status = "in progress";</div><div class='del'>-                break;</div><div class='add'>+            status = "in progress";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_STATUS_STOPPED:</div><div class='del'>-                status = "stopped";</div><div class='del'>-                break;</div><div class='add'>+            status = "stopped";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_STATUS_COMPLETE:</div><div class='del'>-                status = "completed";</div><div class='del'>-                break;</div><div class='add'>+            status = "completed";</div><div class='add'>+            break;</div><div class='ctx'>         case GF_DEFRAG_STATUS_FAILED:</div><div class='del'>-                status = "failed";</div><div class='del'>-                break;</div><div class='add'>+            status = "failed";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (THIS-&gt;name, GF_LOG_INFO, 0, DHT_MSG_REBALANCE_STATUS,</div><div class='del'>-                "Rebalance is %s. Time taken is %.2f secs",</div><div class='del'>-                status, elapsed);</div><div class='del'>-        gf_msg (THIS-&gt;name, GF_LOG_INFO, 0, DHT_MSG_REBALANCE_STATUS,</div><div class='del'>-                "Files migrated: %"PRIu64", size: %"</div><div class='del'>-                PRIu64", lookups: %"PRIu64", failures: %"PRIu64", skipped: "</div><div class='del'>-                "%"PRIu64, files, size, lookup, failures, skipped);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, DHT_MSG_REBALANCE_STATUS,</div><div class='add'>+           "Rebalance is %s. Time taken is %.2f secs", status, elapsed);</div><div class='add'>+    gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, DHT_MSG_REBALANCE_STATUS,</div><div class='add'>+           "Files migrated: %" PRIu64 ", size: %" PRIu64 ", lookups: %" PRIu64</div><div class='add'>+           ", failures: %" PRIu64</div><div class='add'>+           ", skipped: "</div><div class='add'>+           "%" PRIu64,</div><div class='add'>+           files, size, lookup, failures, skipped);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_defrag_set_pause_state (gf_tier_conf_t *tier_conf, tier_pause_state_t state)</div><div class='add'>+gf_defrag_set_pause_state(gf_tier_conf_t *tier_conf, tier_pause_state_t state)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;tier_conf-&gt;pause_mutex);</div><div class='del'>-        tier_conf-&gt;pause_state = state;</div><div class='del'>-        pthread_mutex_unlock (&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    tier_conf-&gt;pause_state = state;</div><div class='add'>+    pthread_mutex_unlock(&amp;tier_conf-&gt;pause_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> tier_pause_state_t</div><div class='del'>-gf_defrag_get_pause_state (gf_tier_conf_t *tier_conf)</div><div class='add'>+gf_defrag_get_pause_state(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        int state;</div><div class='add'>+    int state;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;tier_conf-&gt;pause_mutex);</div><div class='del'>-        state = tier_conf-&gt;pause_state;</div><div class='del'>-        pthread_mutex_unlock (&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    state = tier_conf-&gt;pause_state;</div><div class='add'>+    pthread_mutex_unlock(&amp;tier_conf-&gt;pause_mutex);</div><div class='ctx'> </div><div class='del'>-        return state;</div><div class='add'>+    return state;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> tier_pause_state_t</div><div class='del'>-gf_defrag_check_pause_tier (gf_tier_conf_t *tier_conf)</div><div class='add'>+gf_defrag_check_pause_tier(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        int woke = 0;</div><div class='del'>-        int state  = -1;</div><div class='add'>+    int woke = 0;</div><div class='add'>+    int state = -1;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;tier_conf-&gt;pause_mutex);</div><div class='ctx'> </div><div class='del'>-        if (tier_conf-&gt;pause_state == TIER_RUNNING)</div><div class='del'>-                goto out;</div><div class='add'>+    if (tier_conf-&gt;pause_state == TIER_RUNNING)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (tier_conf-&gt;pause_state == TIER_PAUSED)</div><div class='del'>-                goto out;</div><div class='add'>+    if (tier_conf-&gt;pause_state == TIER_PAUSED)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (tier_conf-&gt;promote_in_progress ||</div><div class='del'>-            tier_conf-&gt;demote_in_progress)</div><div class='del'>-                goto out;</div><div class='add'>+    if (tier_conf-&gt;promote_in_progress || tier_conf-&gt;demote_in_progress)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        tier_conf-&gt;pause_state = TIER_PAUSED;</div><div class='add'>+    tier_conf-&gt;pause_state = TIER_PAUSED;</div><div class='ctx'> </div><div class='del'>-        if (tier_conf-&gt;pause_synctask) {</div><div class='del'>-                synctask_wake (tier_conf-&gt;pause_synctask);</div><div class='del'>-                tier_conf-&gt;pause_synctask = 0;</div><div class='del'>-                woke = 1;</div><div class='del'>-        }</div><div class='add'>+    if (tier_conf-&gt;pause_synctask) {</div><div class='add'>+        synctask_wake(tier_conf-&gt;pause_synctask);</div><div class='add'>+        tier_conf-&gt;pause_synctask = 0;</div><div class='add'>+        woke = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg ("tier", GF_LOG_DEBUG, 0,</div><div class='del'>-                DHT_MSG_TIER_PAUSED,</div><div class='del'>-                "woken %d", woke);</div><div class='add'>+    gf_msg("tier", GF_LOG_DEBUG, 0, DHT_MSG_TIER_PAUSED, "woken %d", woke);</div><div class='ctx'> </div><div class='del'>-        gf_event (EVENT_TIER_PAUSE, "vol=%s", tier_conf-&gt;volname);</div><div class='add'>+    gf_event(EVENT_TIER_PAUSE, "vol=%s", tier_conf-&gt;volname);</div><div class='ctx'> out:</div><div class='del'>-        state = tier_conf-&gt;pause_state;</div><div class='add'>+    state = tier_conf-&gt;pause_state;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock (&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;tier_conf-&gt;pause_mutex);</div><div class='ctx'> </div><div class='del'>-        return state;</div><div class='add'>+    return state;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_defrag_pause_tier_timeout (void *data)</div><div class='add'>+gf_defrag_pause_tier_timeout(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t         *this                  = NULL;</div><div class='del'>-        dht_conf_t       *conf                  = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag                = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='ctx'> </div><div class='del'>-        this   = (xlator_t *) data;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='add'>+    this = (xlator_t *)data;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='ctx'> </div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, out);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, out);</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, defrag, out);</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, defrag, out);</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                DHT_MSG_TIER_PAUSED,</div><div class='del'>-                "Request pause timer timeout");</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_TIER_PAUSED,</div><div class='add'>+           "Request pause timer timeout");</div><div class='ctx'> </div><div class='del'>-        gf_defrag_check_pause_tier (&amp;defrag-&gt;tier_conf);</div><div class='add'>+    gf_defrag_check_pause_tier(&amp;defrag-&gt;tier_conf);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_pause_tier (xlator_t *this, gf_defrag_info_t *defrag)</div><div class='add'>+gf_defrag_pause_tier(xlator_t *this, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        int             ret         = 0;</div><div class='del'>-        struct timespec delta       = {0,};</div><div class='del'>-        int             delay       = 2;</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Set flag requesting to pause tiering. Wait 'delay' seconds for</div><div class='del'>-         * tiering to actually stop as indicated by the pause state</div><div class='del'>-         * before returning success or failure.</div><div class='del'>-         */</div><div class='del'>-        gf_defrag_set_pause_state (&amp;defrag-&gt;tier_conf, TIER_REQUEST_PAUSE);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * If migration is not underway, can pause immediately.</div><div class='del'>-         */</div><div class='del'>-        gf_defrag_check_pause_tier (&amp;defrag-&gt;tier_conf);</div><div class='del'>-        if (gf_defrag_get_pause_state (&amp;defrag-&gt;tier_conf) == TIER_PAUSED)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                DHT_MSG_TIER_PAUSED,</div><div class='del'>-                "Request pause tier");</div><div class='del'>-</div><div class='del'>-        defrag-&gt;tier_conf.pause_synctask = synctask_get ();</div><div class='del'>-        delta.tv_sec  = delay;</div><div class='del'>-        delta.tv_nsec = 0;</div><div class='del'>-        defrag-&gt;tier_conf.pause_timer =</div><div class='del'>-                gf_timer_call_after (this-&gt;ctx, delta,</div><div class='del'>-                                     gf_defrag_pause_tier_timeout,</div><div class='del'>-                                     this);</div><div class='del'>-</div><div class='del'>-        synctask_yield (defrag-&gt;tier_conf.pause_synctask);</div><div class='del'>-</div><div class='del'>-        if (gf_defrag_get_pause_state (&amp;defrag-&gt;tier_conf) == TIER_PAUSED)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_defrag_set_pause_state (&amp;defrag-&gt;tier_conf, TIER_RUNNING);</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct timespec delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int delay = 2;</div><div class='add'>+</div><div class='add'>+    if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Set flag requesting to pause tiering. Wait 'delay' seconds for</div><div class='add'>+     * tiering to actually stop as indicated by the pause state</div><div class='add'>+     * before returning success or failure.</div><div class='add'>+     */</div><div class='add'>+    gf_defrag_set_pause_state(&amp;defrag-&gt;tier_conf, TIER_REQUEST_PAUSE);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If migration is not underway, can pause immediately.</div><div class='add'>+     */</div><div class='add'>+    gf_defrag_check_pause_tier(&amp;defrag-&gt;tier_conf);</div><div class='add'>+    if (gf_defrag_get_pause_state(&amp;defrag-&gt;tier_conf) == TIER_PAUSED)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_TIER_PAUSED,</div><div class='add'>+           "Request pause tier");</div><div class='add'>+</div><div class='add'>+    defrag-&gt;tier_conf.pause_synctask = synctask_get();</div><div class='add'>+    delta.tv_sec = delay;</div><div class='add'>+    delta.tv_nsec = 0;</div><div class='add'>+    defrag-&gt;tier_conf.pause_timer = gf_timer_call_after(</div><div class='add'>+        this-&gt;ctx, delta, gf_defrag_pause_tier_timeout, this);</div><div class='add'>+</div><div class='add'>+    synctask_yield(defrag-&gt;tier_conf.pause_synctask);</div><div class='add'>+</div><div class='add'>+    if (gf_defrag_get_pause_state(&amp;defrag-&gt;tier_conf) == TIER_PAUSED)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_defrag_set_pause_state(&amp;defrag-&gt;tier_conf, TIER_RUNNING);</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                DHT_MSG_TIER_PAUSED,</div><div class='del'>-                "Pause tiering ret=%d", ret);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_TIER_PAUSED,</div><div class='add'>+           "Pause tiering ret=%d", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_resume_tier (xlator_t *this, gf_defrag_info_t *defrag)</div><div class='add'>+gf_defrag_resume_tier(xlator_t *this, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                DHT_MSG_TIER_RESUME,</div><div class='del'>-                "Pause end. Resume tiering");</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_TIER_RESUME,</div><div class='add'>+           "Pause end. Resume tiering");</div><div class='ctx'> </div><div class='del'>-        gf_defrag_set_pause_state (&amp;defrag-&gt;tier_conf, TIER_RUNNING);</div><div class='add'>+    gf_defrag_set_pause_state(&amp;defrag-&gt;tier_conf, TIER_RUNNING);</div><div class='ctx'> </div><div class='del'>-        gf_event (EVENT_TIER_RESUME, "vol=%s", defrag-&gt;tier_conf.volname);</div><div class='add'>+    gf_event(EVENT_TIER_RESUME, "vol=%s", defrag-&gt;tier_conf.volname);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_start_detach_tier (gf_defrag_info_t *defrag)</div><div class='add'>+gf_defrag_start_detach_tier(gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        defrag-&gt;cmd = GF_DEFRAG_CMD_START_DETACH_TIER;</div><div class='add'>+    defrag-&gt;cmd = GF_DEFRAG_CMD_START_DETACH_TIER;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_defrag_stop (dht_conf_t *conf, gf_defrag_status_t status,</div><div class='del'>-                dict_t *output)</div><div class='add'>+gf_defrag_stop(dht_conf_t *conf, gf_defrag_status_t status, dict_t *output)</div><div class='ctx'> {</div><div class='del'>-        /* TODO: set a variable 'stop_defrag' here, it should be checked</div><div class='del'>-           in defrag loop */</div><div class='del'>-        int     ret = -1;</div><div class='del'>-        gf_defrag_info_t *defrag = conf-&gt;defrag;</div><div class='add'>+    /* TODO: set a variable 'stop_defrag' here, it should be checked</div><div class='add'>+       in defrag loop */</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_defrag_info_t *defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (defrag);</div><div class='add'>+    GF_ASSERT(defrag);</div><div class='ctx'> </div><div class='del'>-        if (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_NOT_STARTED) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (defrag-&gt;defrag_status == GF_DEFRAG_STATUS_NOT_STARTED) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg ("", GF_LOG_INFO, 0, DHT_MSG_REBALANCE_STOPPED,</div><div class='del'>-                "Received stop command on rebalance");</div><div class='del'>-        defrag-&gt;defrag_status = status;</div><div class='add'>+    gf_msg("", GF_LOG_INFO, 0, DHT_MSG_REBALANCE_STOPPED,</div><div class='add'>+           "Received stop command on rebalance");</div><div class='add'>+    defrag-&gt;defrag_status = status;</div><div class='ctx'> </div><div class='del'>-        if (output)</div><div class='del'>-                gf_defrag_status_get (conf, output);</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (output)</div><div class='add'>+        gf_defrag_status_get(conf, output);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        gf_msg_debug ("", 0, "Returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_msg_debug("", 0, "Returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-rename.c b/xlators/cluster/dht/src/dht-rename.c<br/>index 295d95232ec..45808a2bfa6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-rename.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-rename.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-rename.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-rename.c</a></div><div class='hunk'>@@ -17,483 +17,450 @@</div><div class='ctx'> #include "dht-lock.h"</div><div class='ctx'> #include "defaults.h"</div><div class='ctx'> </div><div class='del'>-int dht_rename_unlock (call_frame_t *frame, xlator_t *this);</div><div class='add'>+int</div><div class='add'>+dht_rename_unlock(call_frame_t *frame, xlator_t *this);</div><div class='ctx'> int32_t</div><div class='del'>-dht_rename_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata);</div><div class='add'>+dht_rename_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_unlock_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                       xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+dht_rename_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preoldparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postoldparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;preparent);</div><div class='del'>-        dht_set_fixed_dir_stat (&amp;local-&gt;postparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preoldparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postoldparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;preparent);</div><div class='add'>+    dht_set_fixed_dir_stat(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        if (IA_ISREG (local-&gt;stbuf.ia_type))</div><div class='del'>-                DHT_STRIP_PHASE1_FLAGS (&amp;local-&gt;stbuf);</div><div class='add'>+    if (IA_ISREG(local-&gt;stbuf.ia_type))</div><div class='add'>+        DHT_STRIP_PHASE1_FLAGS(&amp;local-&gt;stbuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (rename, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;stbuf, &amp;local-&gt;preoldparent,</div><div class='del'>-                          &amp;local-&gt;postoldparent, &amp;local-&gt;preparent,</div><div class='del'>-                          &amp;local-&gt;postparent, local-&gt;xattr);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(rename, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;stbuf, &amp;local-&gt;preoldparent, &amp;local-&gt;postoldparent,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, local-&gt;xattr);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_rename_dir_unlock_src (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_dir_unlock_src(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='del'>-        return;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-dht_rename_dir_unlock_dst (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_dir_unlock_dst(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        int          op_ret                     = -1;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        /* Unlock entrylk */</div><div class='del'>-        dht_unlock_entrylk_wrapper (frame, &amp;local-&gt;lock[1].ns.directory_ns);</div><div class='del'>-</div><div class='del'>-        /* Unlock inodelk */</div><div class='del'>-        op_ret = dht_unlock_inodelk (frame,</div><div class='del'>-                                     local-&gt;lock[1].ns.parent_layout.locks,</div><div class='del'>-                                     local-&gt;lock[1].ns.parent_layout.lk_count,</div><div class='del'>-                                     dht_rename_unlock_cbk);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='del'>-</div><div class='del'>-                if (IA_ISREG (local-&gt;stbuf.ia_type))</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                                "winding unlock inodelk failed "</div><div class='del'>-                                "rename (%s:%s:%s %s:%s:%s), "</div><div class='del'>-                                "stale locks left on bricks",</div><div class='del'>-                                local-&gt;loc.path, src_gfid,</div><div class='del'>-                                local-&gt;src_cached-&gt;name,</div><div class='del'>-                                local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                                local-&gt;dst_cached ?</div><div class='del'>-                                local-&gt;dst_cached-&gt;name : NULL);</div><div class='del'>-                else</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                                "winding unlock inodelk failed "</div><div class='del'>-                                "rename (%s:%s %s:%s), "</div><div class='del'>-                                "stale locks left on bricks",</div><div class='del'>-                                local-&gt;loc.path, src_gfid,</div><div class='del'>-                                local-&gt;loc2.path, dst_gfid);</div><div class='del'>-</div><div class='del'>-                dht_rename_unlock_cbk (frame, NULL, this, 0, 0, NULL);</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_ret = -1;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    /* Unlock entrylk */</div><div class='add'>+    dht_unlock_entrylk_wrapper(frame, &amp;local-&gt;lock[1].ns.directory_ns);</div><div class='add'>+</div><div class='add'>+    /* Unlock inodelk */</div><div class='add'>+    op_ret = dht_unlock_inodelk(frame, local-&gt;lock[1].ns.parent_layout.locks,</div><div class='add'>+                                local-&gt;lock[1].ns.parent_layout.lk_count,</div><div class='add'>+                                dht_rename_unlock_cbk);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+</div><div class='add'>+        if (IA_ISREG(local-&gt;stbuf.ia_type))</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+                   "winding unlock inodelk failed "</div><div class='add'>+                   "rename (%s:%s:%s %s:%s:%s), "</div><div class='add'>+                   "stale locks left on bricks",</div><div class='add'>+                   local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='add'>+                   local-&gt;loc2.path, dst_gfid,</div><div class='add'>+                   local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='add'>+        else</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+                   "winding unlock inodelk failed "</div><div class='add'>+                   "rename (%s:%s %s:%s), "</div><div class='add'>+                   "stale locks left on bricks",</div><div class='add'>+                   local-&gt;loc.path, src_gfid, local-&gt;loc2.path, dst_gfid);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+        dht_rename_unlock_cbk(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_rename_dir_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_dir_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        dht_rename_dir_unlock_src (frame, this);</div><div class='del'>-        dht_rename_dir_unlock_dst (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rename_dir_unlock_src(frame, this);</div><div class='add'>+    dht_rename_dir_unlock_dst(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int</div><div class='del'>-dht_rename_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='del'>-                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+dht_rename_dir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='add'>+                   struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                   struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t  *conf                    = NULL;</div><div class='del'>-        dht_local_t *local                   = NULL;</div><div class='del'>-        int          this_call_cnt           = 0;</div><div class='del'>-        xlator_t    *prev                    = NULL;</div><div class='del'>-        int          i                       = 0;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE]  = {0};</div><div class='del'>-        int          subvol_cnt              = -1;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-        subvol_cnt = dht_subvol_cnt (this, prev);</div><div class='del'>-        local-&gt;ret_cache[subvol_cnt] = op_ret;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                        DHT_MSG_RENAME_FAILED,</div><div class='del'>-                        "Rename %s -&gt; %s on %s failed, (gfid = %s)",</div><div class='del'>-                        local-&gt;loc.path, local-&gt;loc2.path,</div><div class='del'>-                        prev-&gt;name, gfid);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret   = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        /* TODO: construct proper stbuf for dir */</div><div class='del'>-        /*</div><div class='del'>-         * FIXME: is this the correct way to build stbuf and</div><div class='del'>-         * parent bufs?</div><div class='del'>-         */</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;preoldparent, preoldparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;postoldparent, postoldparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;preparent, prenewparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;postparent, postnewparent);</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int subvol_cnt = -1;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    subvol_cnt = dht_subvol_cnt(this, prev);</div><div class='add'>+    local-&gt;ret_cache[subvol_cnt] = op_ret;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, op_errno, DHT_MSG_RENAME_FAILED,</div><div class='add'>+               "Rename %s -&gt; %s on %s failed, (gfid = %s)", local-&gt;loc.path,</div><div class='add'>+               local-&gt;loc2.path, prev-&gt;name, gfid);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    /* TODO: construct proper stbuf for dir */</div><div class='add'>+    /*</div><div class='add'>+     * FIXME: is this the correct way to build stbuf and</div><div class='add'>+     * parent bufs?</div><div class='add'>+     */</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;preoldparent, preoldparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;postoldparent, postoldparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;preparent, prenewparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;postparent, postnewparent);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                /* We get here with local-&gt;call_cnt == 0. Which means</div><div class='del'>-                 * we are the only one executing this code, there is</div><div class='del'>-                 * no contention. Therefore it's safe to manipulate or</div><div class='del'>-                 * deref local-&gt;call_cnt directly (without locking).</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        /* We get here with local-&gt;call_cnt == 0. Which means</div><div class='add'>+         * we are the only one executing this code, there is</div><div class='add'>+         * no contention. Therefore it's safe to manipulate or</div><div class='add'>+         * deref local-&gt;call_cnt directly (without locking).</div><div class='add'>+         */</div><div class='add'>+        if (local-&gt;ret_cache[conf-&gt;subvolume_cnt] == 0) {</div><div class='add'>+            /* count errant subvols in last field of ret_cache */</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                if (local-&gt;ret_cache[i] != 0)</div><div class='add'>+                    ++local-&gt;ret_cache[conf-&gt;subvolume_cnt];</div><div class='add'>+            }</div><div class='add'>+            if (local-&gt;ret_cache[conf-&gt;subvolume_cnt]) {</div><div class='add'>+                /* undoing the damage:</div><div class='add'>+                 * for all subvolumes, where rename</div><div class='add'>+                 * succeeded, we perform the reverse operation</div><div class='ctx'>                  */</div><div class='del'>-                if (local-&gt;ret_cache[conf-&gt;subvolume_cnt] == 0) {</div><div class='del'>-                        /* count errant subvols in last field of ret_cache */</div><div class='del'>-                        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                if (local-&gt;ret_cache[i] != 0)</div><div class='del'>-                                        ++local-&gt;ret_cache[conf-&gt;subvolume_cnt];</div><div class='del'>-                        }</div><div class='del'>-                        if (local-&gt;ret_cache[conf-&gt;subvolume_cnt]) {</div><div class='del'>-                                /* undoing the damage:</div><div class='del'>-                                 * for all subvolumes, where rename</div><div class='del'>-                                 * succeeded, we perform the reverse operation</div><div class='del'>-                                 */</div><div class='del'>-                                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                        if (local-&gt;ret_cache[i] == 0)</div><div class='del'>-                                                ++local-&gt;call_cnt;</div><div class='del'>-                                }</div><div class='del'>-                                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                        if (local-&gt;ret_cache[i])</div><div class='del'>-                                                continue;</div><div class='del'>-</div><div class='del'>-                                        STACK_WIND (frame,</div><div class='del'>-                                                    dht_rename_dir_cbk,</div><div class='del'>-                                                    conf-&gt;subvolumes[i],</div><div class='del'>-                                                    conf-&gt;subvolumes[i]-&gt;fops-&gt;rename,</div><div class='del'>-                                                    &amp;local-&gt;loc2, &amp;local-&gt;loc,</div><div class='del'>-                                                    NULL);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='add'>+                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                    if (local-&gt;ret_cache[i] == 0)</div><div class='add'>+                        ++local-&gt;call_cnt;</div><div class='ctx'>                 }</div><div class='add'>+                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                    if (local-&gt;ret_cache[i])</div><div class='add'>+                        continue;</div><div class='ctx'> </div><div class='del'>-                WIPE (&amp;local-&gt;preoldparent);</div><div class='del'>-                WIPE (&amp;local-&gt;postoldparent);</div><div class='del'>-                WIPE (&amp;local-&gt;preparent);</div><div class='del'>-                WIPE (&amp;local-&gt;postparent);</div><div class='add'>+                    STACK_WIND(frame, dht_rename_dir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                               conf-&gt;subvolumes[i]-&gt;fops-&gt;rename, &amp;local-&gt;loc2,</div><div class='add'>+                               &amp;local-&gt;loc, NULL);</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                dht_rename_dir_unlock (frame, this);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        WIPE(&amp;local-&gt;preoldparent);</div><div class='add'>+        WIPE(&amp;local-&gt;postoldparent);</div><div class='add'>+        WIPE(&amp;local-&gt;preparent);</div><div class='add'>+        WIPE(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='add'>+        dht_rename_dir_unlock(frame, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_hashed_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='del'>-                           struct iatt *preoldparent,</div><div class='del'>-                           struct iatt *postoldparent,</div><div class='del'>-                           struct iatt *prenewparent,</div><div class='del'>-                           struct iatt *postnewparent, dict_t *xdata)</div><div class='add'>+dht_rename_hashed_dir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='add'>+                          struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                          struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                        DHT_MSG_RENAME_FAILED,</div><div class='del'>-                        "rename %s -&gt; %s on %s failed, (gfid = %s) ",</div><div class='del'>-                        local-&gt;loc.path, local-&gt;loc2.path,</div><div class='del'>-                        prev-&gt;name, gfid);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret   = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        /* TODO: construct proper stbuf for dir */</div><div class='del'>-        /*</div><div class='del'>-         * FIXME: is this the correct way to build stbuf and</div><div class='del'>-         * parent bufs?</div><div class='del'>-         */</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;preoldparent, preoldparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;postoldparent, postoldparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;preparent, prenewparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;postparent, postnewparent);</div><div class='del'>-</div><div class='del'>-        call_cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;call_cnt)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;subvolumes[i] == local-&gt;dst_hashed)</div><div class='del'>-                        continue;</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_dir_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;rename,</div><div class='del'>-                                   &amp;local-&gt;loc, &amp;local-&gt;loc2, NULL);</div><div class='del'>-                if (!--call_cnt)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, op_errno, DHT_MSG_RENAME_FAILED,</div><div class='add'>+               "rename %s -&gt; %s on %s failed, (gfid = %s) ", local-&gt;loc.path,</div><div class='add'>+               local-&gt;loc2.path, prev-&gt;name, gfid);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    /* TODO: construct proper stbuf for dir */</div><div class='add'>+    /*</div><div class='add'>+     * FIXME: is this the correct way to build stbuf and</div><div class='add'>+     * parent bufs?</div><div class='add'>+     */</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;preoldparent, preoldparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;postoldparent, postoldparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;preparent, prenewparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;postparent, postnewparent);</div><div class='add'>+</div><div class='add'>+    call_cnt = local-&gt;call_cnt = conf-&gt;subvolume_cnt - 1;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;call_cnt)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;subvolumes[i] == local-&gt;dst_hashed)</div><div class='add'>+            continue;</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, dht_rename_dir_cbk, conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+            conf-&gt;subvolumes[i]-&gt;fops-&gt;rename, &amp;local-&gt;loc, &amp;local-&gt;loc2, NULL);</div><div class='add'>+        if (!--call_cnt)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        WIPE (&amp;local-&gt;preoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;preparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        dht_rename_dir_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rename_dir_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rename_dir_do (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_dir_do(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_rename_hashed_dir_cbk, local-&gt;dst_hashed,</div><div class='del'>-                           local-&gt;dst_hashed,</div><div class='del'>-                           local-&gt;dst_hashed-&gt;fops-&gt;rename,</div><div class='del'>-                           &amp;local-&gt;loc, &amp;local-&gt;loc2, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_rename_hashed_dir_cbk, local-&gt;dst_hashed,</div><div class='add'>+                      local-&gt;dst_hashed, local-&gt;dst_hashed-&gt;fops-&gt;rename,</div><div class='add'>+                      &amp;local-&gt;loc, &amp;local-&gt;loc2, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_rename_dir_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rename_dir_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rename_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+dht_rename_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = -1;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt; 2) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "readdir on %s for %s returned %d entries",</div><div class='del'>-                              prev-&gt;name, local-&gt;loc.path, op_ret);</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOTEMPTY;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = -1;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_rename_dir_do (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &gt; 2) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "readdir on %s for %s returned %d entries",</div><div class='add'>+                     prev-&gt;name, local-&gt;loc.path, op_ret);</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTEMPTY;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_rename_dir_do(frame, this);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+dht_rename_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = -1;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = -1;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                        DHT_MSG_OPENDIR_FAILED,</div><div class='del'>-                        "opendir on %s for %s failed,(gfid = %s) ",</div><div class='del'>-                        prev-&gt;name, local-&gt;loc.path, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, op_errno, DHT_MSG_OPENDIR_FAILED,</div><div class='add'>+               "opendir on %s for %s failed,(gfid = %s) ", prev-&gt;name,</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_rename_readdir_cbk, prev, prev,</div><div class='del'>-                           prev-&gt;fops-&gt;readdir, local-&gt;fd, 4096, 0, NULL);</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_rename_readdir_cbk, prev, prev,</div><div class='add'>+                      prev-&gt;fops-&gt;readdir, local-&gt;fd, 4096, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_rename_dir_do (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_rename_dir_do(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_dir_lock2_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+dht_rename_dir_lock2_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        dht_conf_t  *conf                       = NULL;</div><div class='del'>-        int          i                          = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "acquiring entrylk after inodelk failed"</div><div class='del'>-                        "rename (%s:%s:%s %s:%s:%s)",</div><div class='del'>-                        local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='del'>-                        local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                        local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;fd = fd_create (local-&gt;loc.inode, frame-&gt;root-&gt;pid);</div><div class='del'>-        if (!local-&gt;fd) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "acquiring entrylk after inodelk failed"</div><div class='add'>+               "rename (%s:%s:%s %s:%s:%s)",</div><div class='add'>+               local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='add'>+               local-&gt;loc2.path, dst_gfid,</div><div class='add'>+               local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;fd = fd_create(local-&gt;loc.inode, frame-&gt;root-&gt;pid);</div><div class='add'>+    if (!local-&gt;fd) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;dst_cached) {</div><div class='add'>+        dht_rename_dir_do(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;dst_cached) {</div><div class='del'>-                dht_rename_dir_do (frame, this);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_opendir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;opendir, &amp;local-&gt;loc2,</div><div class='add'>+                          local-&gt;fd, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_opendir_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;opendir,</div><div class='del'>-                                   &amp;local-&gt;loc2, local-&gt;fd, NULL);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        /* No harm in calling an extra unlock */</div><div class='del'>-        dht_rename_dir_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    /* No harm in calling an extra unlock */</div><div class='add'>+    dht_rename_dir_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_dir_lock1_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_rename_dir_lock1_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int          ret                        = 0;</div><div class='del'>-        loc_t       *loc                        = NULL;</div><div class='del'>-        xlator_t    *subvol                     = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "acquiring entrylk after inodelk failed"</div><div class='del'>-                        "rename (%s:%s:%s %s:%s:%s)",</div><div class='del'>-                        local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='del'>-                        local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                        local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;current == &amp;local-&gt;lock[0]) {</div><div class='del'>-                loc = &amp;local-&gt;loc2;</div><div class='del'>-                subvol = local-&gt;dst_hashed;</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[1];</div><div class='del'>-        } else {</div><div class='del'>-                loc = &amp;local-&gt;loc;</div><div class='del'>-                subvol = local-&gt;src_hashed;</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-        }</div><div class='del'>-        ret = dht_protect_namespace (frame, loc, subvol, &amp;local-&gt;current-&gt;ns,</div><div class='del'>-                                     dht_rename_dir_lock2_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "acquiring entrylk after inodelk failed"</div><div class='add'>+               "rename (%s:%s:%s %s:%s:%s)",</div><div class='add'>+               local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='add'>+               local-&gt;loc2.path, dst_gfid,</div><div class='add'>+               local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;current == &amp;local-&gt;lock[0]) {</div><div class='add'>+        loc = &amp;local-&gt;loc2;</div><div class='add'>+        subvol = local-&gt;dst_hashed;</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[1];</div><div class='add'>+    } else {</div><div class='add'>+        loc = &amp;local-&gt;loc;</div><div class='add'>+        subvol = local-&gt;src_hashed;</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+    }</div><div class='add'>+    ret = dht_protect_namespace(frame, loc, subvol, &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                dht_rename_dir_lock2_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        /* No harm in calling an extra unlock */</div><div class='del'>-        dht_rename_dir_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    /* No harm in calling an extra unlock */</div><div class='add'>+    dht_rename_dir_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * If the hashed subvolumes of both source and dst are the different,</div><div class='ctx'>  * lock in dictionary order of hashed subvol-&gt;name. This is important</div><div class='hunk'>@@ -506,1566 +473,1471 @@ err:</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-dht_order_rename_lock (call_frame_t *frame, loc_t **loc, xlator_t **subvol)</div><div class='add'>+dht_order_rename_lock(call_frame_t *frame, loc_t **loc, xlator_t **subvol)</div><div class='ctx'> {</div><div class='del'>-        int ret                 = 0;</div><div class='del'>-        dht_local_t   *local    = NULL;</div><div class='del'>-        char           src[GF_UUID_BNAME_BUF_SIZE] = {0};</div><div class='del'>-        char           dst[GF_UUID_BNAME_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;src_hashed-&gt;name == local-&gt;dst_hashed-&gt;name) {</div><div class='del'>-                ret = 0;</div><div class='del'>-        } else {</div><div class='del'>-                ret = strcmp (local-&gt;src_hashed-&gt;name, local-&gt;dst_hashed-&gt;name);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-</div><div class='del'>-                /* hashed subvols are the same for src and dst */</div><div class='del'>-                /* Entrylks need to be ordered*/</div><div class='del'>-                if (local-&gt;loc.pargfid)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc.pargfid, src);</div><div class='del'>-                else if (local-&gt;loc.parent)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc.parent-&gt;gfid, src);</div><div class='del'>-</div><div class='del'>-                strcat (src, local-&gt;loc.name);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.pargfid)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.pargfid, dst);</div><div class='del'>-                else if (local-&gt;loc2.parent)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.parent-&gt;gfid, dst);</div><div class='del'>-</div><div class='del'>-                strcat (dst, local-&gt;loc2.name);</div><div class='del'>-                ret = strcmp (src, dst);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &lt;= 0) {</div><div class='del'>-                /*inodelk in dictionary order of hashed subvol names*/</div><div class='del'>-                /*entrylk in dictionary order of gfid/basename */</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-                *loc = &amp;local-&gt;loc;</div><div class='del'>-                *subvol = local-&gt;src_hashed;</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[1];</div><div class='del'>-                *loc = &amp;local-&gt;loc2;</div><div class='del'>-                *subvol = local-&gt;dst_hashed;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char src[GF_UUID_BNAME_BUF_SIZE] = {0};</div><div class='add'>+    char dst[GF_UUID_BNAME_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;src_hashed-&gt;name == local-&gt;dst_hashed-&gt;name) {</div><div class='add'>+        ret = 0;</div><div class='add'>+    } else {</div><div class='add'>+        ret = strcmp(local-&gt;src_hashed-&gt;name, local-&gt;dst_hashed-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        /* hashed subvols are the same for src and dst */</div><div class='add'>+        /* Entrylks need to be ordered*/</div><div class='add'>+        if (local-&gt;loc.pargfid)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc.pargfid, src);</div><div class='add'>+        else if (local-&gt;loc.parent)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc.parent-&gt;gfid, src);</div><div class='add'>+</div><div class='add'>+        strcat(src, local-&gt;loc.name);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.pargfid)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.pargfid, dst);</div><div class='add'>+        else if (local-&gt;loc2.parent)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.parent-&gt;gfid, dst);</div><div class='add'>+</div><div class='add'>+        strcat(dst, local-&gt;loc2.name);</div><div class='add'>+        ret = strcmp(src, dst);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt;= 0) {</div><div class='add'>+        /*inodelk in dictionary order of hashed subvol names*/</div><div class='add'>+        /*entrylk in dictionary order of gfid/basename */</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+        *loc = &amp;local-&gt;loc;</div><div class='add'>+        *subvol = local-&gt;src_hashed;</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[1];</div><div class='add'>+        *loc = &amp;local-&gt;loc2;</div><div class='add'>+        *subvol = local-&gt;dst_hashed;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_dir (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_dir(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t    *conf         = NULL;</div><div class='del'>-        dht_local_t   *local        = NULL;</div><div class='del'>-        loc_t         *loc          = NULL;</div><div class='del'>-        xlator_t      *subvol       = NULL;</div><div class='del'>-        int            i            = 0;</div><div class='del'>-        int            ret          = 0;</div><div class='del'>-        int            op_errno     = -1;</div><div class='del'>-</div><div class='del'>-        conf = frame-&gt;this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        local-&gt;ret_cache = GF_CALLOC (conf-&gt;subvolume_cnt + 1, sizeof (int),</div><div class='del'>-                                      gf_dht_ret_cache_t);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;ret_cache == NULL) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_RENAME_FAILED,</div><div class='del'>-                                "Rename dir failed: subvolume down (%s)",</div><div class='del'>-                                conf-&gt;subvolumes[i]-&gt;name);</div><div class='del'>-                        op_errno = ENOTCONN;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Locks on src and dst needs to ordered which otherwise might cause</div><div class='del'>-         * deadlocks when rename (src, dst) and rename (dst, src) is done from</div><div class='del'>-         * two different clients</div><div class='del'>-         */</div><div class='del'>-        dht_order_rename_lock (frame, &amp;loc, &amp;subvol);</div><div class='del'>-</div><div class='del'>-        /* Rename must take locks on src to avoid lookup selfheal from</div><div class='del'>-         * recreating src on those subvols where the rename was successful.</div><div class='del'>-         * The locks can't be issued parallel as two different clients might</div><div class='del'>-         * attempt same rename command and be in dead lock.</div><div class='del'>-         */</div><div class='del'>-        ret = dht_protect_namespace (frame, loc, subvol,</div><div class='del'>-                                     &amp;local-&gt;current-&gt;ns,</div><div class='del'>-                                     dht_rename_dir_lock1_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    conf = frame-&gt;this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;ret_cache = GF_CALLOC(conf-&gt;subvolume_cnt + 1, sizeof(int),</div><div class='add'>+                                 gf_dht_ret_cache_t);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;ret_cache == NULL) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_RENAME_FAILED,</div><div class='add'>+                   "Rename dir failed: subvolume down (%s)",</div><div class='add'>+                   conf-&gt;subvolumes[i]-&gt;name);</div><div class='add'>+            op_errno = ENOTCONN;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Locks on src and dst needs to ordered which otherwise might cause</div><div class='add'>+     * deadlocks when rename (src, dst) and rename (dst, src) is done from</div><div class='add'>+     * two different clients</div><div class='add'>+     */</div><div class='add'>+    dht_order_rename_lock(frame, &amp;loc, &amp;subvol);</div><div class='add'>+</div><div class='add'>+    /* Rename must take locks on src to avoid lookup selfheal from</div><div class='add'>+     * recreating src on those subvols where the rename was successful.</div><div class='add'>+     * The locks can't be issued parallel as two different clients might</div><div class='add'>+     * attempt same rename command and be in dead lock.</div><div class='add'>+     */</div><div class='add'>+    ret = dht_protect_namespace(frame, loc, subvol, &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                dht_rename_dir_lock1_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_rename_track_for_changelog (xlator_t *this, dict_t *xattr,</div><div class='del'>-                                loc_t *oldloc, loc_t *newloc)</div><div class='add'>+dht_rename_track_for_changelog(xlator_t *this, dict_t *xattr, loc_t *oldloc,</div><div class='add'>+                               loc_t *newloc)</div><div class='ctx'> {</div><div class='del'>-        int ret        = -1;</div><div class='del'>-        dht_changelog_rename_info_t *info = NULL;</div><div class='del'>-        char *name     = NULL;</div><div class='del'>-        int len1       = 0;</div><div class='del'>-        int len2       = 0;</div><div class='del'>-        int size       = 0;</div><div class='del'>-</div><div class='del'>-        if (!xattr || !oldloc || !newloc || !this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        len1 = strlen (oldloc-&gt;name) + 1;</div><div class='del'>-        len2 = strlen (newloc-&gt;name) + 1;</div><div class='del'>-        size = sizeof (dht_changelog_rename_info_t) + len1 + len2;</div><div class='del'>-</div><div class='del'>-        info = GF_CALLOC (size, sizeof(char), gf_common_mt_char);</div><div class='del'>-        if (!info) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to calloc memory");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_changelog_rename_info_t *info = NULL;</div><div class='add'>+    char *name = NULL;</div><div class='add'>+    int len1 = 0;</div><div class='add'>+    int len2 = 0;</div><div class='add'>+    int size = 0;</div><div class='add'>+</div><div class='add'>+    if (!xattr || !oldloc || !newloc || !this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (info-&gt;old_pargfid, oldloc-&gt;pargfid);</div><div class='del'>-        gf_uuid_copy (info-&gt;new_pargfid, newloc-&gt;pargfid);</div><div class='del'>-</div><div class='del'>-        info-&gt;oldname_len = len1;</div><div class='del'>-        info-&gt;newname_len = len2;</div><div class='del'>-        strncpy (info-&gt;buffer, oldloc-&gt;name, len1);</div><div class='del'>-        name = info-&gt;buffer + len1;</div><div class='del'>-        strncpy (name, newloc-&gt;name, len2);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_bin (xattr, DHT_CHANGELOG_RENAME_OP_KEY,</div><div class='del'>-                            info, size);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value: key = %s,"</div><div class='del'>-                        " path = %s", DHT_CHANGELOG_RENAME_OP_KEY,</div><div class='del'>-                        oldloc-&gt;name);</div><div class='del'>-                GF_FREE (info);</div><div class='del'>-        }</div><div class='add'>+    len1 = strlen(oldloc-&gt;name) + 1;</div><div class='add'>+    len2 = strlen(newloc-&gt;name) + 1;</div><div class='add'>+    size = sizeof(dht_changelog_rename_info_t) + len1 + len2;</div><div class='ctx'> </div><div class='add'>+    info = GF_CALLOC(size, sizeof(char), gf_common_mt_char);</div><div class='add'>+    if (!info) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to calloc memory");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(info-&gt;old_pargfid, oldloc-&gt;pargfid);</div><div class='add'>+    gf_uuid_copy(info-&gt;new_pargfid, newloc-&gt;pargfid);</div><div class='add'>+</div><div class='add'>+    info-&gt;oldname_len = len1;</div><div class='add'>+    info-&gt;newname_len = len2;</div><div class='add'>+    strncpy(info-&gt;buffer, oldloc-&gt;name, len1);</div><div class='add'>+    name = info-&gt;buffer + len1;</div><div class='add'>+    strncpy(name, newloc-&gt;name, len2);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_bin(xattr, DHT_CHANGELOG_RENAME_OP_KEY, info, size);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value: key = %s,"</div><div class='add'>+               " path = %s",</div><div class='add'>+               DHT_CHANGELOG_RENAME_OP_KEY, oldloc-&gt;name);</div><div class='add'>+        GF_FREE(info);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define DHT_MARKER_DONT_ACCOUNT(xattr) do {                             \</div><div class='del'>-                int tmp = -1;                                                  \</div><div class='del'>-                if (!xattr) {                                                  \</div><div class='del'>-                        xattr = dict_new ();                                   \</div><div class='del'>-                        if (!xattr)                                            \</div><div class='del'>-                                break;                                         \</div><div class='del'>-                }                                                              \</div><div class='del'>-                tmp = dict_set_str (xattr, GLUSTERFS_MARKER_DONT_ACCOUNT_KEY,  \</div><div class='del'>-                                    "yes");                                    \</div><div class='del'>-                if (tmp) {                                                     \</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,                    \</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,                       \</div><div class='del'>-                                "Failed to set dictionary value: key = %s,"    \</div><div class='del'>-                                " path = %s",GLUSTERFS_MARKER_DONT_ACCOUNT_KEY, \</div><div class='del'>-                                local-&gt;loc.path);                             \</div><div class='del'>-                }                                                              \</div><div class='del'>-        }while (0)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define DHT_CHANGELOG_TRACK_AS_RENAME(xattr, oldloc, newloc) do {            \</div><div class='del'>-                int tmp = -1;                                                \</div><div class='del'>-                if (!xattr) {                                                \</div><div class='del'>-                        xattr = dict_new ();                                 \</div><div class='del'>-                        if (!xattr) {                                        \</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,         \</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,             \</div><div class='del'>-                                        "Failed to create dictionary to "    \</div><div class='del'>-                                        "track rename");                     \</div><div class='del'>-                                break;                                       \</div><div class='del'>-                        }                                                    \</div><div class='del'>-                }                                                            \</div><div class='del'>-                                                                             \</div><div class='del'>-                tmp = dht_rename_track_for_changelog (this, xattr,           \</div><div class='del'>-                                oldloc, newloc);                             \</div><div class='del'>-                                                                             \</div><div class='del'>-                if (tmp) {                                                   \</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,                 \</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,                     \</div><div class='del'>-                                "Failed to set dictionary value: key = %s,"  \</div><div class='del'>-                                " path = %s", DHT_CHANGELOG_RENAME_OP_KEY,   \</div><div class='del'>-                                (oldloc)-&gt;path);                             \</div><div class='del'>-                }                                                            \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='add'>+#define DHT_MARKER_DONT_ACCOUNT(xattr)                                         \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int tmp = -1;                                                          \</div><div class='add'>+        if (!xattr) {                                                          \</div><div class='add'>+            xattr = dict_new();                                                \</div><div class='add'>+            if (!xattr)                                                        \</div><div class='add'>+                break;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        tmp = dict_set_str(xattr, GLUSTERFS_MARKER_DONT_ACCOUNT_KEY, "yes");   \</div><div class='add'>+        if (tmp) {                                                             \</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,       \</div><div class='add'>+                   "Failed to set dictionary value: key = %s,"                 \</div><div class='add'>+                   " path = %s",                                               \</div><div class='add'>+                   GLUSTERFS_MARKER_DONT_ACCOUNT_KEY, local-&gt;loc.path);        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define DHT_CHANGELOG_TRACK_AS_RENAME(xattr, oldloc, newloc)                   \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int tmp = -1;                                                          \</div><div class='add'>+        if (!xattr) {                                                          \</div><div class='add'>+            xattr = dict_new();                                                \</div><div class='add'>+            if (!xattr) {                                                      \</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,   \</div><div class='add'>+                       "Failed to create dictionary to "                       \</div><div class='add'>+                       "track rename");                                        \</div><div class='add'>+                break;                                                         \</div><div class='add'>+            }                                                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+                                                                               \</div><div class='add'>+        tmp = dht_rename_track_for_changelog(this, xattr, oldloc, newloc);     \</div><div class='add'>+                                                                               \</div><div class='add'>+        if (tmp) {                                                             \</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,       \</div><div class='add'>+                   "Failed to set dictionary value: key = %s,"                 \</div><div class='add'>+                   " path = %s",                                               \</div><div class='add'>+                   DHT_CHANGELOG_RENAME_OP_KEY, (oldloc)-&gt;path);               \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        int          op_ret                     = -1;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        dht_ilock_wrap_t inodelk_wrapper        = {0, };</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        inodelk_wrapper.locks = local-&gt;rename_inodelk_backward_compatible;</div><div class='del'>-        inodelk_wrapper.lk_count = local-&gt;rename_inodelk_bc_count;</div><div class='del'>-</div><div class='del'>-        op_ret = dht_unlock_inodelk_wrapper (frame, &amp;inodelk_wrapper);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='del'>-</div><div class='del'>-                if (IA_ISREG (local-&gt;stbuf.ia_type))</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                                "winding unlock inodelk failed "</div><div class='del'>-                                "rename (%s:%s:%s %s:%s:%s), "</div><div class='del'>-                                "stale locks left on bricks",</div><div class='del'>-                                local-&gt;loc.path, src_gfid,</div><div class='del'>-                                local-&gt;src_cached-&gt;name,</div><div class='del'>-                                local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                                local-&gt;dst_cached ?</div><div class='del'>-                                local-&gt;dst_cached-&gt;name : NULL);</div><div class='del'>-                else</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_UNLOCKING_FAILED,</div><div class='del'>-                                "winding unlock inodelk failed "</div><div class='del'>-                                "rename (%s:%s %s:%s), "</div><div class='del'>-                                "stale locks left on bricks",</div><div class='del'>-                                local-&gt;loc.path, src_gfid,</div><div class='del'>-                                local-&gt;loc2.path, dst_gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dht_unlock_namespace (frame, &amp;local-&gt;lock[0]);</div><div class='del'>-        dht_unlock_namespace (frame, &amp;local-&gt;lock[1]);</div><div class='del'>-</div><div class='del'>-        dht_rename_unlock_cbk (frame, NULL, this, local-&gt;op_ret,</div><div class='del'>-                               local-&gt;op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_ret = -1;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dht_ilock_wrap_t inodelk_wrapper = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    inodelk_wrapper.locks = local-&gt;rename_inodelk_backward_compatible;</div><div class='add'>+    inodelk_wrapper.lk_count = local-&gt;rename_inodelk_bc_count;</div><div class='add'>+</div><div class='add'>+    op_ret = dht_unlock_inodelk_wrapper(frame, &amp;inodelk_wrapper);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+</div><div class='add'>+        if (IA_ISREG(local-&gt;stbuf.ia_type))</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+                   "winding unlock inodelk failed "</div><div class='add'>+                   "rename (%s:%s:%s %s:%s:%s), "</div><div class='add'>+                   "stale locks left on bricks",</div><div class='add'>+                   local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='add'>+                   local-&gt;loc2.path, dst_gfid,</div><div class='add'>+                   local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='add'>+        else</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_UNLOCKING_FAILED,</div><div class='add'>+                   "winding unlock inodelk failed "</div><div class='add'>+                   "rename (%s:%s %s:%s), "</div><div class='add'>+                   "stale locks left on bricks",</div><div class='add'>+                   local-&gt;loc.path, src_gfid, local-&gt;loc2.path, dst_gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_unlock_namespace(frame, &amp;local-&gt;lock[0]);</div><div class='add'>+    dht_unlock_namespace(frame, &amp;local-&gt;lock[1]);</div><div class='add'>+</div><div class='add'>+    dht_rename_unlock_cbk(frame, NULL, this, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                          NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_done (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_done(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linked == _gf_true) {</div><div class='del'>-                local-&gt;linked = _gf_false;</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;linked == _gf_true) {</div><div class='add'>+        local-&gt;linked = _gf_false;</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_rename_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rename_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                       struct iatt *postparent, dict_t *xdata)</div><div class='add'>+dht_rename_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        FRAME_SU_UNDO (frame, dht_local_t);</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_INVALID_VALUE,</div><div class='del'>-                        "!local, should not happen");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_UNLINK_FAILED,</div><div class='del'>-                        "%s: Rename: unlink on %s failed ",</div><div class='del'>-                        local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    FRAME_SU_UNDO(frame, dht_local_t);</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_VALUE,</div><div class='add'>+               "!local, should not happen");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        WIPE (&amp;local-&gt;preoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;preparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postparent);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_rename_done (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_UNLINK_FAILED,</div><div class='add'>+               "%s: Rename: unlink on %s failed ", local-&gt;loc.path, prev-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    WIPE(&amp;local-&gt;preoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postparent);</div><div class='add'>+</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_rename_done(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rename_cleanup (call_frame_t *frame)</div><div class='add'>+dht_rename_cleanup(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                  = NULL;</div><div class='del'>-        xlator_t    *this                   = NULL;</div><div class='del'>-        xlator_t    *src_hashed             = NULL;</div><div class='del'>-        xlator_t    *src_cached             = NULL;</div><div class='del'>-        xlator_t    *dst_hashed             = NULL;</div><div class='del'>-        xlator_t    *dst_cached             = NULL;</div><div class='del'>-        int          call_cnt               = 0;</div><div class='del'>-        dict_t      *xattr                  = NULL;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this  = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        src_hashed = local-&gt;src_hashed;</div><div class='del'>-        src_cached = local-&gt;src_cached;</div><div class='del'>-        dst_hashed = local-&gt;dst_hashed;</div><div class='del'>-        dst_cached = local-&gt;dst_cached;</div><div class='del'>-</div><div class='del'>-        if (src_cached == dst_cached)</div><div class='del'>-                goto nolinks;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;linked &amp;&amp; (dst_hashed != src_hashed) &amp;&amp;</div><div class='del'>-            (dst_hashed != src_cached)) {</div><div class='del'>-                call_cnt++;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *src_hashed = NULL;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    xlator_t *dst_hashed = NULL;</div><div class='add'>+    xlator_t *dst_cached = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;added_link &amp;&amp; (src_cached != dst_hashed)) {</div><div class='del'>-                call_cnt++;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='add'>+    src_hashed = local-&gt;src_hashed;</div><div class='add'>+    src_cached = local-&gt;src_cached;</div><div class='add'>+    dst_hashed = local-&gt;dst_hashed;</div><div class='add'>+    dst_cached = local-&gt;dst_cached;</div><div class='ctx'> </div><div class='del'>-        if (!call_cnt)</div><div class='del'>-                goto nolinks;</div><div class='add'>+    if (src_cached == dst_cached)</div><div class='add'>+        goto nolinks;</div><div class='ctx'> </div><div class='del'>-        DHT_MARK_FOP_INTERNAL (xattr);</div><div class='add'>+    if (local-&gt;linked &amp;&amp; (dst_hashed != src_hashed) &amp;&amp;</div><div class='add'>+        (dst_hashed != src_cached)) {</div><div class='add'>+        call_cnt++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='add'>+    if (local-&gt;added_link &amp;&amp; (src_cached != dst_hashed)) {</div><div class='add'>+        call_cnt++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linked &amp;&amp; (dst_hashed != src_hashed) &amp;&amp;</div><div class='del'>-                        (dst_hashed != src_cached)) {</div><div class='del'>-                dict_t *xattr_new = NULL;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "unlinking linkfile %s @ %s =&gt; %s, (gfid = %s)",</div><div class='del'>-                              local-&gt;loc.path, dst_hashed-&gt;name,</div><div class='del'>-                              src_cached-&gt;name, gfid);</div><div class='add'>+    if (!call_cnt)</div><div class='add'>+        goto nolinks;</div><div class='ctx'> </div><div class='del'>-                xattr_new = dict_copy_with_ref (xattr, NULL);</div><div class='add'>+    DHT_MARK_FOP_INTERNAL(xattr);</div><div class='ctx'> </div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.inode-&gt;gfid, gfid);</div><div class='ctx'> </div><div class='del'>-                DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='add'>+    if (local-&gt;linked &amp;&amp; (dst_hashed != src_hashed) &amp;&amp;</div><div class='add'>+        (dst_hashed != src_cached)) {</div><div class='add'>+        dict_t *xattr_new = NULL;</div><div class='ctx'> </div><div class='del'>-                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_unlink_cbk, dst_hashed,</div><div class='del'>-                                   dst_hashed, dst_hashed-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc, 0, xattr_new);</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                     "unlinking linkfile %s @ %s =&gt; %s, (gfid = %s)",</div><div class='add'>+                     local-&gt;loc.path, dst_hashed-&gt;name, src_cached-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-                dict_unref (xattr_new);</div><div class='del'>-                xattr_new = NULL;</div><div class='del'>-        }</div><div class='add'>+        xattr_new = dict_copy_with_ref(xattr, NULL);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;added_link &amp;&amp; (src_cached != dst_hashed)) {</div><div class='del'>-                dict_t *xattr_new = NULL;</div><div class='add'>+        DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "unlinking link %s =&gt; %s (%s), (gfid = %s)",</div><div class='del'>-                              local-&gt;loc.path, local-&gt;loc2.path,</div><div class='del'>-                              src_cached-&gt;name, gfid);</div><div class='add'>+        FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_unlink_cbk, dst_hashed, dst_hashed,</div><div class='add'>+                          dst_hashed-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, xattr_new);</div><div class='ctx'> </div><div class='del'>-                xattr_new = dict_copy_with_ref (xattr, NULL);</div><div class='add'>+        dict_unref(xattr_new);</div><div class='add'>+        xattr_new = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_compare (local-&gt;loc.pargfid,</div><div class='del'>-                                  local-&gt;loc2.pargfid) == 0) {</div><div class='del'>-                        DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='del'>-                }</div><div class='del'>-                /* *</div><div class='del'>-                 * The link to file is created using root permission.</div><div class='del'>-                 * Hence deletion should happen using root. Otherwise</div><div class='del'>-                 * it will fail.</div><div class='del'>-                 */</div><div class='del'>-                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_unlink_cbk, src_cached,</div><div class='del'>-                                   src_cached, src_cached-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc2, 0, xattr_new);</div><div class='add'>+    if (local-&gt;added_link &amp;&amp; (src_cached != dst_hashed)) {</div><div class='add'>+        dict_t *xattr_new = NULL;</div><div class='add'>+</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "unlinking link %s =&gt; %s (%s), (gfid = %s)",</div><div class='add'>+                     local-&gt;loc.path, local-&gt;loc2.path, src_cached-&gt;name, gfid);</div><div class='ctx'> </div><div class='del'>-                dict_unref (xattr_new);</div><div class='del'>-                xattr_new = NULL;</div><div class='add'>+        xattr_new = dict_copy_with_ref(xattr, NULL);</div><div class='add'>+</div><div class='add'>+        if (gf_uuid_compare(local-&gt;loc.pargfid, local-&gt;loc2.pargfid) == 0) {</div><div class='add'>+            DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='ctx'>         }</div><div class='add'>+        /* *</div><div class='add'>+         * The link to file is created using root permission.</div><div class='add'>+         * Hence deletion should happen using root. Otherwise</div><div class='add'>+         * it will fail.</div><div class='add'>+         */</div><div class='add'>+        FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_unlink_cbk, src_cached, src_cached,</div><div class='add'>+                          src_cached-&gt;fops-&gt;unlink, &amp;local-&gt;loc2, 0, xattr_new);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+        dict_unref(xattr_new);</div><div class='add'>+        xattr_new = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> nolinks:</div><div class='del'>-        WIPE (&amp;local-&gt;preoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;preparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        dht_rename_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rename_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rename_unlink (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_rename_unlink(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *src_hashed = NULL;</div><div class='del'>-        xlator_t     *src_cached = NULL;</div><div class='del'>-        xlator_t     *dst_hashed = NULL;</div><div class='del'>-        xlator_t     *dst_cached = NULL;</div><div class='del'>-        xlator_t     *rename_subvol = NULL;</div><div class='del'>-        dict_t       *xattr     = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        src_hashed = local-&gt;src_hashed;</div><div class='del'>-        src_cached = local-&gt;src_cached;</div><div class='del'>-        dst_hashed = local-&gt;dst_hashed;</div><div class='del'>-        dst_cached = local-&gt;dst_cached;</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 0;</div><div class='del'>-</div><div class='del'>-        /* NOTE: rename_subvol is the same subvolume from which dht_rename_cbk</div><div class='del'>-         * is called. since rename has already happened on rename_subvol,</div><div class='del'>-         * unlink shouldn't be sent for oldpath (either linkfile or cached-file)</div><div class='del'>-         * on rename_subvol. */</div><div class='del'>-        if (src_cached == dst_cached)</div><div class='del'>-                rename_subvol = src_cached;</div><div class='del'>-        else</div><div class='del'>-                rename_subvol = dst_hashed;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *src_hashed = NULL;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    xlator_t *dst_hashed = NULL;</div><div class='add'>+    xlator_t *dst_cached = NULL;</div><div class='add'>+    xlator_t *rename_subvol = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='ctx'> </div><div class='del'>-        /* TODO: delete files in background */</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (src_cached != dst_hashed &amp;&amp; src_cached != dst_cached)</div><div class='del'>-                local-&gt;call_cnt++;</div><div class='add'>+    src_hashed = local-&gt;src_hashed;</div><div class='add'>+    src_cached = local-&gt;src_cached;</div><div class='add'>+    dst_hashed = local-&gt;dst_hashed;</div><div class='add'>+    dst_cached = local-&gt;dst_cached;</div><div class='ctx'> </div><div class='del'>-        if (src_hashed != rename_subvol &amp;&amp; src_hashed != src_cached)</div><div class='del'>-                local-&gt;call_cnt++;</div><div class='add'>+    local-&gt;call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        if (dst_cached &amp;&amp; dst_cached != dst_hashed &amp;&amp; dst_cached != src_cached)</div><div class='del'>-                local-&gt;call_cnt++;</div><div class='add'>+    /* NOTE: rename_subvol is the same subvolume from which dht_rename_cbk</div><div class='add'>+     * is called. since rename has already happened on rename_subvol,</div><div class='add'>+     * unlink shouldn't be sent for oldpath (either linkfile or cached-file)</div><div class='add'>+     * on rename_subvol. */</div><div class='add'>+    if (src_cached == dst_cached)</div><div class='add'>+        rename_subvol = src_cached;</div><div class='add'>+    else</div><div class='add'>+        rename_subvol = dst_hashed;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt == 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    /* TODO: delete files in background */</div><div class='ctx'> </div><div class='del'>-        DHT_MARK_FOP_INTERNAL (xattr);</div><div class='add'>+    if (src_cached != dst_hashed &amp;&amp; src_cached != dst_cached)</div><div class='add'>+        local-&gt;call_cnt++;</div><div class='ctx'> </div><div class='del'>-        if (src_cached != dst_hashed &amp;&amp; src_cached != dst_cached) {</div><div class='del'>-                dict_t *xattr_new = NULL;</div><div class='add'>+    if (src_hashed != rename_subvol &amp;&amp; src_hashed != src_cached)</div><div class='add'>+        local-&gt;call_cnt++;</div><div class='ctx'> </div><div class='del'>-                xattr_new = dict_copy_with_ref (xattr, NULL);</div><div class='add'>+    if (dst_cached &amp;&amp; dst_cached != dst_hashed &amp;&amp; dst_cached != src_cached)</div><div class='add'>+        local-&gt;call_cnt++;</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "deleting old src datafile %s @ %s",</div><div class='del'>-                              local-&gt;loc.path, src_cached-&gt;name);</div><div class='add'>+    if (local-&gt;call_cnt == 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_compare (local-&gt;loc.pargfid,</div><div class='del'>-                                     local-&gt;loc2.pargfid) == 0) {</div><div class='del'>-                        DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='del'>-                }</div><div class='add'>+    DHT_MARK_FOP_INTERNAL(xattr);</div><div class='add'>+</div><div class='add'>+    if (src_cached != dst_hashed &amp;&amp; src_cached != dst_cached) {</div><div class='add'>+        dict_t *xattr_new = NULL;</div><div class='ctx'> </div><div class='del'>-                DHT_CHANGELOG_TRACK_AS_RENAME(xattr_new, &amp;local-&gt;loc,</div><div class='del'>-                                              &amp;local-&gt;loc2);</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_unlink_cbk, src_cached,</div><div class='del'>-                                   src_cached, src_cached-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc, 0, xattr_new);</div><div class='add'>+        xattr_new = dict_copy_with_ref(xattr, NULL);</div><div class='ctx'> </div><div class='del'>-                dict_unref (xattr_new);</div><div class='del'>-                xattr_new = NULL;</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "deleting old src datafile %s @ %s",</div><div class='add'>+                     local-&gt;loc.path, src_cached-&gt;name);</div><div class='add'>+</div><div class='add'>+        if (gf_uuid_compare(local-&gt;loc.pargfid, local-&gt;loc2.pargfid) == 0) {</div><div class='add'>+            DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (src_hashed != rename_subvol &amp;&amp; src_hashed != src_cached) {</div><div class='del'>-                dict_t *xattr_new = NULL;</div><div class='add'>+        DHT_CHANGELOG_TRACK_AS_RENAME(xattr_new, &amp;local-&gt;loc, &amp;local-&gt;loc2);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_unlink_cbk, src_cached, src_cached,</div><div class='add'>+                          src_cached-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, xattr_new);</div><div class='ctx'> </div><div class='del'>-                xattr_new = dict_copy_with_ref (xattr, NULL);</div><div class='add'>+        dict_unref(xattr_new);</div><div class='add'>+        xattr_new = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "deleting old src linkfile %s @ %s",</div><div class='del'>-                              local-&gt;loc.path, src_hashed-&gt;name);</div><div class='add'>+    if (src_hashed != rename_subvol &amp;&amp; src_hashed != src_cached) {</div><div class='add'>+        dict_t *xattr_new = NULL;</div><div class='ctx'> </div><div class='del'>-                DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='add'>+        xattr_new = dict_copy_with_ref(xattr, NULL);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_unlink_cbk, src_hashed,</div><div class='del'>-                                   src_hashed, src_hashed-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc, 0, xattr_new);</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "deleting old src linkfile %s @ %s",</div><div class='add'>+                     local-&gt;loc.path, src_hashed-&gt;name);</div><div class='ctx'> </div><div class='del'>-                dict_unref (xattr_new);</div><div class='del'>-                xattr_new = NULL;</div><div class='del'>-        }</div><div class='add'>+        DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='ctx'> </div><div class='del'>-        if (dst_cached &amp;&amp;</div><div class='del'>-            (dst_cached != dst_hashed) &amp;&amp;</div><div class='del'>-            (dst_cached != src_cached)) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "deleting old dst datafile %s @ %s",</div><div class='del'>-                              local-&gt;loc2.path, dst_cached-&gt;name);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_unlink_cbk, src_hashed, src_hashed,</div><div class='add'>+                          src_hashed-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, xattr_new);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_unlink_cbk, dst_cached,</div><div class='del'>-                                   dst_cached, dst_cached-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc2, 0, xattr);</div><div class='del'>-        }</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return 0;</div><div class='add'>+        dict_unref(xattr_new);</div><div class='add'>+        xattr_new = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dst_cached &amp;&amp; (dst_cached != dst_hashed) &amp;&amp;</div><div class='add'>+        (dst_cached != src_cached)) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "deleting old dst datafile %s @ %s",</div><div class='add'>+                     local-&gt;loc2.path, dst_cached-&gt;name);</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_unlink_cbk, dst_cached, dst_cached,</div><div class='add'>+                          dst_cached-&gt;fops-&gt;unlink, &amp;local-&gt;loc2, 0, xattr);</div><div class='add'>+    }</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        WIPE (&amp;local-&gt;preoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postoldparent);</div><div class='del'>-        WIPE (&amp;local-&gt;preparent);</div><div class='del'>-        WIPE (&amp;local-&gt;postparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postoldparent);</div><div class='add'>+    WIPE(&amp;local-&gt;preparent);</div><div class='add'>+    WIPE(&amp;local-&gt;postparent);</div><div class='ctx'> </div><div class='del'>-        dht_rename_done (frame, this);</div><div class='add'>+    dht_rename_done(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_links_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                             struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                             dict_t *xdata)</div><div class='add'>+dht_rename_links_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                            struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                            struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *prev = NULL;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-</div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        /* TODO: Handle this case in lookup-optimize */</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_CREATE_LINK_FAILED,</div><div class='del'>-                        "link/file %s on %s failed",</div><div class='del'>-                        local-&gt;loc.path, prev-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linked == _gf_true) {</div><div class='del'>-                local-&gt;linked = _gf_false;</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='del'>-        }</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        dht_rename_unlink (frame, this);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    /* TODO: Handle this case in lookup-optimize */</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_CREATE_LINK_FAILED,</div><div class='add'>+               "link/file %s on %s failed", local-&gt;loc.path, prev-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;linked == _gf_true) {</div><div class='add'>+        local-&gt;linked = _gf_false;</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    dht_rename_unlink(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='del'>-                struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+dht_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='add'>+               struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+               struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        xlator_t     *src_cached = NULL;</div><div class='del'>-        xlator_t     *dst_hashed = NULL;</div><div class='del'>-        xlator_t     *dst_cached = NULL;</div><div class='del'>-        loc_t         link_loc  = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        src_cached = local-&gt;src_cached;</div><div class='del'>-        dst_hashed = local-&gt;dst_hashed;</div><div class='del'>-        dst_cached = local-&gt;dst_cached;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;linked == _gf_true)</div><div class='del'>-                FRAME_SU_UNDO (frame, dht_local_t);</div><div class='del'>-</div><div class='del'>-        /* It is a critical failure iff we fail to rename the cached file</div><div class='del'>-         * if the rename of the linkto failed, it is not a critical failure,</div><div class='del'>-         * and we do not want to lose the created hard link for the new</div><div class='del'>-         * name as that could have been read by other clients.</div><div class='del'>-         *</div><div class='del'>-         * NOTE: If another client is attempting the same oldname -&gt; newname</div><div class='del'>-         * rename, and finds both file names as existing, and are hard links</div><div class='del'>-         * to each other, then FUSE would send in an unlink for oldname. In</div><div class='del'>-         * this time duration if we treat the linkto as a critical error and</div><div class='del'>-         * unlink the newname we created, we would have effectively lost the</div><div class='del'>-         * file to rename operations.</div><div class='del'>-         *</div><div class='del'>-         * Repercussions of treating this as a non-critical error is that</div><div class='del'>-         * we could leave behind a stale linkto file and/or not create the new</div><div class='del'>-         * linkto file, the second case would be rectified by a subsequent</div><div class='del'>-         * lookup, the first case by a rebalance, like for all stale linkto</div><div class='del'>-         * files */</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                /* Critical failure: unable to rename the cached file */</div><div class='del'>-                if (prev == src_cached) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                                DHT_MSG_RENAME_FAILED,</div><div class='del'>-                                "%s: Rename on %s failed, (gfid = %s) ",</div><div class='del'>-                                local-&gt;loc.path, prev-&gt;name,</div><div class='del'>-                                local-&gt;loc.inode ?</div><div class='del'>-                                uuid_utoa(local-&gt;loc.inode-&gt;gfid):"");</div><div class='del'>-                        local-&gt;op_ret   = op_ret;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto cleanup;</div><div class='del'>-                } else {</div><div class='del'>-                        /* Non-critical failure, unable to rename the linkto</div><div class='del'>-                         * file</div><div class='del'>-                         */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, op_errno,</div><div class='del'>-                                DHT_MSG_RENAME_FAILED,</div><div class='del'>-                                "%s: Rename (linkto file) on %s failed, "</div><div class='del'>-                                "(gfid = %s) ",</div><div class='del'>-                                local-&gt;loc.path, prev-&gt;name,</div><div class='del'>-                                local-&gt;loc.inode ?</div><div class='del'>-                                uuid_utoa(local-&gt;loc.inode-&gt;gfid):"");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (xdata) {</div><div class='del'>-                if (!local-&gt;xattr)</div><div class='del'>-                        local-&gt;xattr = dict_ref (xdata);</div><div class='del'>-                else</div><div class='del'>-                        local-&gt;xattr = dict_copy_with_ref (xdata, local-&gt;xattr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Merge attrs only from src_cached. In case there of src_cached !=</div><div class='del'>-         * dst_hashed, this ignores linkfile attrs. */</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    xlator_t *dst_hashed = NULL;</div><div class='add'>+    xlator_t *dst_cached = NULL;</div><div class='add'>+    loc_t link_loc = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    src_cached = local-&gt;src_cached;</div><div class='add'>+    dst_hashed = local-&gt;dst_hashed;</div><div class='add'>+    dst_cached = local-&gt;dst_cached;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;linked == _gf_true)</div><div class='add'>+        FRAME_SU_UNDO(frame, dht_local_t);</div><div class='add'>+</div><div class='add'>+    /* It is a critical failure iff we fail to rename the cached file</div><div class='add'>+     * if the rename of the linkto failed, it is not a critical failure,</div><div class='add'>+     * and we do not want to lose the created hard link for the new</div><div class='add'>+     * name as that could have been read by other clients.</div><div class='add'>+     *</div><div class='add'>+     * NOTE: If another client is attempting the same oldname -&gt; newname</div><div class='add'>+     * rename, and finds both file names as existing, and are hard links</div><div class='add'>+     * to each other, then FUSE would send in an unlink for oldname. In</div><div class='add'>+     * this time duration if we treat the linkto as a critical error and</div><div class='add'>+     * unlink the newname we created, we would have effectively lost the</div><div class='add'>+     * file to rename operations.</div><div class='add'>+     *</div><div class='add'>+     * Repercussions of treating this as a non-critical error is that</div><div class='add'>+     * we could leave behind a stale linkto file and/or not create the new</div><div class='add'>+     * linkto file, the second case would be rectified by a subsequent</div><div class='add'>+     * lookup, the first case by a rebalance, like for all stale linkto</div><div class='add'>+     * files */</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        /* Critical failure: unable to rename the cached file */</div><div class='ctx'>         if (prev == src_cached) {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;preoldparent, preoldparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postoldparent, postoldparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;preparent, prenewparent);</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;postparent, postnewparent);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Create the linkto file for the dst file */</div><div class='del'>-        if ((src_cached == dst_cached) &amp;&amp; (dst_hashed != dst_cached)) {</div><div class='del'>-</div><div class='del'>-                loc_copy (&amp;link_loc, &amp;local-&gt;loc2);</div><div class='del'>-                if (link_loc.inode)</div><div class='del'>-                        inode_unref (link_loc.inode);</div><div class='del'>-                link_loc.inode = inode_ref (local-&gt;loc.inode);</div><div class='del'>-                gf_uuid_copy (local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='del'>-                gf_uuid_copy (link_loc.gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                dht_linkfile_create (frame, dht_rename_links_create_cbk,</div><div class='del'>-                                     this, src_cached, dst_hashed,</div><div class='del'>-                                     &amp;link_loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dht_rename_unlink (frame, this);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_RENAME_FAILED,</div><div class='add'>+                   "%s: Rename on %s failed, (gfid = %s) ", local-&gt;loc.path,</div><div class='add'>+                   prev-&gt;name,</div><div class='add'>+                   local-&gt;loc.inode ? uuid_utoa(local-&gt;loc.inode-&gt;gfid) : "");</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto cleanup;</div><div class='add'>+        } else {</div><div class='add'>+            /* Non-critical failure, unable to rename the linkto</div><div class='add'>+             * file</div><div class='add'>+             */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, op_errno, DHT_MSG_RENAME_FAILED,</div><div class='add'>+                   "%s: Rename (linkto file) on %s failed, "</div><div class='add'>+                   "(gfid = %s) ",</div><div class='add'>+                   local-&gt;loc.path, prev-&gt;name,</div><div class='add'>+                   local-&gt;loc.inode ? uuid_utoa(local-&gt;loc.inode-&gt;gfid) : "");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (xdata) {</div><div class='add'>+        if (!local-&gt;xattr)</div><div class='add'>+            local-&gt;xattr = dict_ref(xdata);</div><div class='add'>+        else</div><div class='add'>+            local-&gt;xattr = dict_copy_with_ref(xdata, local-&gt;xattr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Merge attrs only from src_cached. In case there of src_cached !=</div><div class='add'>+     * dst_hashed, this ignores linkfile attrs. */</div><div class='add'>+    if (prev == src_cached) {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;preoldparent, preoldparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postoldparent, postoldparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;preparent, prenewparent);</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;postparent, postnewparent);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Create the linkto file for the dst file */</div><div class='add'>+    if ((src_cached == dst_cached) &amp;&amp; (dst_hashed != dst_cached)) {</div><div class='add'>+        loc_copy(&amp;link_loc, &amp;local-&gt;loc2);</div><div class='add'>+        if (link_loc.inode)</div><div class='add'>+            inode_unref(link_loc.inode);</div><div class='add'>+        link_loc.inode = inode_ref(local-&gt;loc.inode);</div><div class='add'>+        gf_uuid_copy(local-&gt;gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='add'>+        gf_uuid_copy(link_loc.gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+        dht_linkfile_create(frame, dht_rename_links_create_cbk, this,</div><div class='add'>+                            src_cached, dst_hashed, &amp;link_loc);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_rename_unlink(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        dht_rename_cleanup (frame);</div><div class='add'>+    dht_rename_cleanup(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_do_rename (call_frame_t *frame)</div><div class='add'>+dht_do_rename(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local         = NULL;</div><div class='del'>-        xlator_t    *dst_hashed    = NULL;</div><div class='del'>-        xlator_t    *src_cached    = NULL;</div><div class='del'>-        xlator_t    *dst_cached    = NULL;</div><div class='del'>-        xlator_t    *this          = NULL;</div><div class='del'>-        xlator_t    *rename_subvol = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this  = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        dst_hashed = local-&gt;dst_hashed;</div><div class='del'>-        dst_cached = local-&gt;dst_cached;</div><div class='del'>-        src_cached = local-&gt;src_cached;</div><div class='del'>-</div><div class='del'>-        if (src_cached == dst_cached)</div><div class='del'>-                rename_subvol = src_cached;</div><div class='del'>-        else</div><div class='del'>-                rename_subvol = dst_hashed;</div><div class='del'>-</div><div class='del'>-        if ((src_cached != dst_hashed) &amp;&amp; (rename_subvol == dst_hashed)) {</div><div class='del'>-                DHT_MARKER_DONT_ACCOUNT(local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rename_subvol == src_cached) {</div><div class='del'>-                DHT_CHANGELOG_TRACK_AS_RENAME(local-&gt;xattr_req, &amp;local-&gt;loc,</div><div class='del'>-                                              &amp;local-&gt;loc2);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "renaming %s =&gt; %s (%s)",</div><div class='del'>-                      local-&gt;loc.path, local-&gt;loc2.path, rename_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;linked == _gf_true)</div><div class='del'>-                FRAME_SU_DO (frame, dht_local_t);</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_rename_cbk, rename_subvol, rename_subvol,</div><div class='del'>-                           rename_subvol-&gt;fops-&gt;rename, &amp;local-&gt;loc,</div><div class='del'>-                           &amp;local-&gt;loc2, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *dst_hashed = NULL;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    xlator_t *dst_cached = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *rename_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    dst_hashed = local-&gt;dst_hashed;</div><div class='add'>+    dst_cached = local-&gt;dst_cached;</div><div class='add'>+    src_cached = local-&gt;src_cached;</div><div class='add'>+</div><div class='add'>+    if (src_cached == dst_cached)</div><div class='add'>+        rename_subvol = src_cached;</div><div class='add'>+    else</div><div class='add'>+        rename_subvol = dst_hashed;</div><div class='add'>+</div><div class='add'>+    if ((src_cached != dst_hashed) &amp;&amp; (rename_subvol == dst_hashed)) {</div><div class='add'>+        DHT_MARKER_DONT_ACCOUNT(local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (rename_subvol == src_cached) {</div><div class='add'>+        DHT_CHANGELOG_TRACK_AS_RENAME(local-&gt;xattr_req, &amp;local-&gt;loc,</div><div class='add'>+                                      &amp;local-&gt;loc2);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "renaming %s =&gt; %s (%s)", local-&gt;loc.path,</div><div class='add'>+                 local-&gt;loc2.path, rename_subvol-&gt;name);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;linked == _gf_true)</div><div class='add'>+        FRAME_SU_DO(frame, dht_local_t);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_rename_cbk, rename_subvol, rename_subvol,</div><div class='add'>+                      rename_subvol-&gt;fops-&gt;rename, &amp;local-&gt;loc, &amp;local-&gt;loc2,</div><div class='add'>+                      local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+dht_rename_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                    struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "link/file on %s failed (%s)",</div><div class='del'>-                              prev-&gt;name, strerror (op_errno));</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;added_link = _gf_false;</div><div class='del'>-        } else</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "link/file on %s failed (%s)", prev-&gt;name,</div><div class='add'>+                     strerror(op_errno));</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;added_link = _gf_false;</div><div class='add'>+    } else</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto cleanup;</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto cleanup;</div><div class='ctx'> </div><div class='del'>-        dht_do_rename (frame);</div><div class='add'>+    dht_do_rename(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        dht_rename_cleanup (frame);</div><div class='add'>+    dht_rename_cleanup(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_linkto_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+dht_rename_linkto_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                      struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='del'>-        xlator_t        *prev = NULL;</div><div class='del'>-        xlator_t        *src_cached = NULL;</div><div class='del'>-        dict_t          *xattr = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        DHT_MARK_FOP_INTERNAL (xattr);</div><div class='del'>-        prev = cookie;</div><div class='del'>-        src_cached = local-&gt;src_cached;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "link/file on %s failed (%s)",</div><div class='del'>-                              prev-&gt;name, strerror (op_errno));</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='ctx'> </div><div class='del'>-        /* If linkto creation failed move to failure cleanup code,</div><div class='del'>-        * instead of continuing with creating the link file */</div><div class='del'>-        if (local-&gt;op_ret != 0) {</div><div class='del'>-                goto cleanup;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    DHT_MARK_FOP_INTERNAL(xattr);</div><div class='add'>+    prev = cookie;</div><div class='add'>+    src_cached = local-&gt;src_cached;</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "link %s =&gt; %s (%s)", local-&gt;loc.path,</div><div class='del'>-                      local-&gt;loc2.path, src_cached-&gt;name);</div><div class='del'>-        if (gf_uuid_compare (local-&gt;loc.pargfid,</div><div class='del'>-                                local-&gt;loc2.pargfid) == 0) {</div><div class='del'>-                DHT_MARKER_DONT_ACCOUNT(xattr);</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "link/file on %s failed (%s)", prev-&gt;name,</div><div class='add'>+                     strerror(op_errno));</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;added_link = _gf_true;</div><div class='add'>+    /* If linkto creation failed move to failure cleanup code,</div><div class='add'>+     * instead of continuing with creating the link file */</div><div class='add'>+    if (local-&gt;op_ret != 0) {</div><div class='add'>+        goto cleanup;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_rename_link_cbk, src_cached, src_cached,</div><div class='del'>-                           src_cached-&gt;fops-&gt;link, &amp;local-&gt;loc, &amp;local-&gt;loc2,</div><div class='del'>-                           xattr);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "link %s =&gt; %s (%s)", local-&gt;loc.path,</div><div class='add'>+                 local-&gt;loc2.path, src_cached-&gt;name);</div><div class='add'>+    if (gf_uuid_compare(local-&gt;loc.pargfid, local-&gt;loc2.pargfid) == 0) {</div><div class='add'>+        DHT_MARKER_DONT_ACCOUNT(xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    local-&gt;added_link = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_rename_link_cbk, src_cached, src_cached,</div><div class='add'>+                      src_cached-&gt;fops-&gt;link, &amp;local-&gt;loc, &amp;local-&gt;loc2, xattr);</div><div class='add'>+</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        dht_rename_cleanup (frame);</div><div class='add'>+    dht_rename_cleanup(frame);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_unlink_links_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                             dict_t *xdata)</div><div class='add'>+dht_rename_unlink_links_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno,</div><div class='add'>+                            struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	dht_local_t  *local = NULL;</div><div class='del'>-	xlator_t     *prev = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	prev = cookie;</div><div class='add'>+    if ((op_ret == -1) &amp;&amp; (op_errno != ENOENT)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "unlink of %s on %s failed (%s)",</div><div class='add'>+                     local-&gt;loc2.path, prev-&gt;name, strerror(op_errno));</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if ((op_ret == -1) &amp;&amp; (op_errno != ENOENT)) {</div><div class='del'>-		gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-		              "unlink of %s on %s failed (%s)",</div><div class='del'>-			      local-&gt;loc2.path, prev-&gt;name,</div><div class='del'>-                              strerror (op_errno));</div><div class='del'>-		local-&gt;op_ret   = -1;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='del'>-	}</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto cleanup;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto cleanup;</div><div class='add'>+    dht_do_rename(frame);</div><div class='ctx'> </div><div class='del'>-        dht_do_rename (frame);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        dht_rename_cleanup (frame);</div><div class='add'>+    dht_rename_cleanup(frame);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_rename_create_links (call_frame_t *frame)</div><div class='add'>+dht_rename_create_links(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        xlator_t    *this = NULL;</div><div class='del'>-        xlator_t    *src_hashed = NULL;</div><div class='del'>-        xlator_t    *src_cached = NULL;</div><div class='del'>-        xlator_t    *dst_hashed = NULL;</div><div class='del'>-        xlator_t    *dst_cached = NULL;</div><div class='del'>-        int          call_cnt = 0;</div><div class='del'>-        dict_t      *xattr = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *src_hashed = NULL;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    xlator_t *dst_hashed = NULL;</div><div class='add'>+    xlator_t *dst_cached = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='ctx'> </div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this  = frame-&gt;this;</div><div class='add'>+    src_hashed = local-&gt;src_hashed;</div><div class='add'>+    src_cached = local-&gt;src_cached;</div><div class='add'>+    dst_hashed = local-&gt;dst_hashed;</div><div class='add'>+    dst_cached = local-&gt;dst_cached;</div><div class='ctx'> </div><div class='del'>-        src_hashed = local-&gt;src_hashed;</div><div class='del'>-        src_cached = local-&gt;src_cached;</div><div class='del'>-        dst_hashed = local-&gt;dst_hashed;</div><div class='del'>-        dst_cached = local-&gt;dst_cached;</div><div class='add'>+    DHT_MARK_FOP_INTERNAL(xattr);</div><div class='ctx'> </div><div class='del'>-        DHT_MARK_FOP_INTERNAL (xattr);</div><div class='add'>+    if (src_cached == dst_cached) {</div><div class='add'>+        dict_t *xattr_new = NULL;</div><div class='ctx'> </div><div class='del'>-        if (src_cached == dst_cached) {</div><div class='del'>-                dict_t *xattr_new = NULL;</div><div class='add'>+        if (dst_hashed == dst_cached)</div><div class='add'>+            goto nolinks;</div><div class='ctx'> </div><div class='del'>-                if (dst_hashed == dst_cached)</div><div class='del'>-                        goto nolinks;</div><div class='add'>+        xattr_new = dict_copy_with_ref(xattr, NULL);</div><div class='ctx'> </div><div class='del'>-                xattr_new = dict_copy_with_ref (xattr, NULL);</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "unlinking dst linkfile %s @ %s",</div><div class='add'>+                     local-&gt;loc2.path, dst_hashed-&gt;name);</div><div class='ctx'> </div><div class='del'>-		gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-		              "unlinking dst linkfile %s @ %s",</div><div class='del'>-			      local-&gt;loc2.path, dst_hashed-&gt;name);</div><div class='add'>+        DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='ctx'> </div><div class='del'>-                DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_unlink_links_cbk, dst_hashed,</div><div class='add'>+                          dst_hashed, dst_hashed-&gt;fops-&gt;unlink, &amp;local-&gt;loc2, 0,</div><div class='add'>+                          xattr_new);</div><div class='ctx'> </div><div class='del'>-		STACK_WIND_COOKIE (frame, dht_rename_unlink_links_cbk,</div><div class='del'>-                                   dst_hashed, dst_hashed,</div><div class='del'>-			           dst_hashed-&gt;fops-&gt;unlink, &amp;local-&gt;loc2, 0,</div><div class='del'>-			           xattr_new);</div><div class='del'>-</div><div class='del'>-                dict_unref (xattr_new);</div><div class='del'>-                if (xattr)</div><div class='del'>-                        dict_unref (xattr);</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        dict_unref(xattr_new);</div><div class='add'>+        if (xattr)</div><div class='add'>+            dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        if (src_cached != dst_hashed) {</div><div class='del'>-                /* needed to create the link file */</div><div class='del'>-                call_cnt++;</div><div class='del'>-                if (dst_hashed != src_hashed)</div><div class='del'>-                        /* needed to create the linkto file */</div><div class='del'>-                        call_cnt ++;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (src_cached != dst_hashed) {</div><div class='add'>+        /* needed to create the link file */</div><div class='add'>+        call_cnt++;</div><div class='add'>+        if (dst_hashed != src_hashed)</div><div class='add'>+            /* needed to create the linkto file */</div><div class='add'>+            call_cnt++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* We should not have any failures post the link creation, as this</div><div class='add'>+     * introduces the newname into the namespace. Clients could have cached</div><div class='add'>+     * the existence of the newname and may start taking actions based on</div><div class='add'>+     * the same. Hence create the linkto first, and then attempt the link.</div><div class='add'>+     *</div><div class='add'>+     * NOTE: If another client is attempting the same oldname -&gt; newname</div><div class='add'>+     * rename, and finds both file names as existing, and are hard links</div><div class='add'>+     * to each other, then FUSE would send in an unlink for oldname. In</div><div class='add'>+     * this time duration if we treat the linkto as a critical error and</div><div class='add'>+     * unlink the newname we created, we would have effectively lost the</div><div class='add'>+     * file to rename operations. */</div><div class='add'>+    if (dst_hashed != src_hashed &amp;&amp; src_cached != dst_hashed) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "linkfile %s @ %s =&gt; %s", local-&gt;loc.path,</div><div class='add'>+                     dst_hashed-&gt;name, src_cached-&gt;name);</div><div class='add'>+</div><div class='add'>+        memcpy(local-&gt;gfid, local-&gt;loc.inode-&gt;gfid, 16);</div><div class='add'>+        dht_linkfile_create(frame, dht_rename_linkto_cbk, this, src_cached,</div><div class='add'>+                            dst_hashed, &amp;local-&gt;loc);</div><div class='add'>+    } else if (src_cached != dst_hashed) {</div><div class='add'>+        dict_t *xattr_new = NULL;</div><div class='add'>+</div><div class='add'>+        xattr_new = dict_copy_with_ref(xattr, NULL);</div><div class='add'>+</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "link %s =&gt; %s (%s)", local-&gt;loc.path,</div><div class='add'>+                     local-&gt;loc2.path, src_cached-&gt;name);</div><div class='add'>+        if (gf_uuid_compare(local-&gt;loc.pargfid, local-&gt;loc2.pargfid) == 0) {</div><div class='add'>+            DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* We should not have any failures post the link creation, as this</div><div class='del'>-         * introduces the newname into the namespace. Clients could have cached</div><div class='del'>-         * the existence of the newname and may start taking actions based on</div><div class='del'>-         * the same. Hence create the linkto first, and then attempt the link.</div><div class='del'>-         *</div><div class='del'>-         * NOTE: If another client is attempting the same oldname -&gt; newname</div><div class='del'>-         * rename, and finds both file names as existing, and are hard links</div><div class='del'>-         * to each other, then FUSE would send in an unlink for oldname. In</div><div class='del'>-         * this time duration if we treat the linkto as a critical error and</div><div class='del'>-         * unlink the newname we created, we would have effectively lost the</div><div class='del'>-         * file to rename operations. */</div><div class='del'>-        if (dst_hashed != src_hashed &amp;&amp; src_cached != dst_hashed) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "linkfile %s @ %s =&gt; %s",</div><div class='del'>-                              local-&gt;loc.path, dst_hashed-&gt;name,</div><div class='del'>-                              src_cached-&gt;name);</div><div class='del'>-</div><div class='del'>-                memcpy (local-&gt;gfid, local-&gt;loc.inode-&gt;gfid, 16);</div><div class='del'>-                dht_linkfile_create (frame, dht_rename_linkto_cbk, this,</div><div class='del'>-                                     src_cached, dst_hashed, &amp;local-&gt;loc);</div><div class='del'>-        } else if (src_cached != dst_hashed) {</div><div class='del'>-                dict_t *xattr_new = NULL;</div><div class='del'>-</div><div class='del'>-                xattr_new = dict_copy_with_ref (xattr, NULL);</div><div class='del'>-</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "link %s =&gt; %s (%s)", local-&gt;loc.path,</div><div class='del'>-                              local-&gt;loc2.path, src_cached-&gt;name);</div><div class='del'>-                if (gf_uuid_compare (local-&gt;loc.pargfid,</div><div class='del'>-                                  local-&gt;loc2.pargfid) == 0) {</div><div class='del'>-                        DHT_MARKER_DONT_ACCOUNT(xattr_new);</div><div class='del'>-                }</div><div class='add'>+        local-&gt;added_link = _gf_true;</div><div class='ctx'> </div><div class='del'>-                local-&gt;added_link = _gf_true;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_link_cbk, src_cached, src_cached,</div><div class='add'>+                          src_cached-&gt;fops-&gt;link, &amp;local-&gt;loc, &amp;local-&gt;loc2,</div><div class='add'>+                          xattr_new);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_link_cbk, src_cached,</div><div class='del'>-                                   src_cached, src_cached-&gt;fops-&gt;link,</div><div class='del'>-                                   &amp;local-&gt;loc, &amp;local-&gt;loc2, xattr_new);</div><div class='del'>-</div><div class='del'>-                dict_unref (xattr_new);</div><div class='del'>-        }</div><div class='add'>+        dict_unref(xattr_new);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> nolinks:</div><div class='del'>-        if (!call_cnt) {</div><div class='del'>-                /* skip to next step */</div><div class='del'>-                dht_do_rename (frame);</div><div class='del'>-        }</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    if (!call_cnt) {</div><div class='add'>+        /* skip to next step */</div><div class='add'>+        dht_do_rename(frame);</div><div class='add'>+    }</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno,</div><div class='del'>-                       inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                       struct iatt *postparent)</div><div class='add'>+dht_rename_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                      struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                      struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                              = NULL;</div><div class='del'>-        int          call_cnt                           = 0;</div><div class='del'>-        dht_conf_t  *conf                               = NULL;</div><div class='del'>-        char         gfid_local[GF_UUID_BUF_SIZE]       = {0};</div><div class='del'>-        char         gfid_server[GF_UUID_BUF_SIZE]      = {0};</div><div class='del'>-        int          child_index                        = -1;</div><div class='del'>-        gf_boolean_t is_src                             = _gf_false;</div><div class='del'>-        loc_t       *loc                                = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        child_index = (long)cookie;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        is_src = (child_index == 0);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char gfid_server[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int child_index = -1;</div><div class='add'>+    gf_boolean_t is_src = _gf_false;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+</div><div class='add'>+    child_index = (long)cookie;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    is_src = (child_index == 0);</div><div class='add'>+    if (is_src)</div><div class='add'>+        loc = &amp;local-&gt;loc;</div><div class='add'>+    else</div><div class='add'>+        loc = &amp;local-&gt;loc2;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='ctx'>         if (is_src)</div><div class='del'>-                loc = &amp;local-&gt;loc;</div><div class='del'>-        else</div><div class='del'>-                loc = &amp;local-&gt;loc2;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                if (is_src)</div><div class='del'>-                        local-&gt;src_cached</div><div class='del'>-                                = dht_subvol_get_cached (this,</div><div class='del'>-                                                         local-&gt;loc.inode);</div><div class='del'>-                else {</div><div class='del'>-                        if (loc-&gt;inode)</div><div class='del'>-                                gf_uuid_unparse (loc-&gt;inode-&gt;gfid, gfid_local);</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "dst_cached before lookup: %s, "</div><div class='del'>-                                      "(path:%s)(gfid:%s),",</div><div class='del'>-                                      local-&gt;loc2.path,</div><div class='del'>-                                      local-&gt;dst_cached</div><div class='del'>-                                      ? local-&gt;dst_cached-&gt;name :</div><div class='del'>-                                      NULL,</div><div class='del'>-                                      local-&gt;dst_cached ? gfid_local : NULL);</div><div class='del'>-</div><div class='del'>-                        local-&gt;dst_cached</div><div class='del'>-                                = dht_subvol_get_cached (this,</div><div class='del'>-                                                         local-&gt;loc2_copy.inode);</div><div class='del'>-</div><div class='del'>-                        gf_uuid_unparse (stbuf-&gt;ia_gfid, gfid_local);</div><div class='del'>-</div><div class='del'>-                        gf_msg_debug (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                      "dst_cached after lookup: %s, "</div><div class='del'>-                                      "(path:%s)(gfid:%s)",</div><div class='del'>-                                      local-&gt;loc2.path,</div><div class='del'>-                                      local-&gt;dst_cached</div><div class='del'>-                                      ? local-&gt;dst_cached-&gt;name :</div><div class='del'>-                                      NULL,</div><div class='del'>-                                      local-&gt;dst_cached ? gfid_local : NULL);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                        if ((local-&gt;loc2.inode == NULL)</div><div class='del'>-                            || gf_uuid_compare (stbuf-&gt;ia_gfid,</div><div class='del'>-                                                local-&gt;loc2.inode-&gt;gfid)) {</div><div class='del'>-                                if (local-&gt;loc2.inode != NULL) {</div><div class='del'>-                                        inode_unlink (local-&gt;loc2.inode,</div><div class='del'>-                                                      local-&gt;loc2.parent,</div><div class='del'>-                                                      local-&gt;loc2.name);</div><div class='del'>-                                        inode_unref (local-&gt;loc2.inode);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                local-&gt;loc2.inode</div><div class='del'>-                                        = inode_link (local-&gt;loc2_copy.inode,</div><div class='del'>-                                                      local-&gt;loc2_copy.parent,</div><div class='del'>-                                                      local-&gt;loc2_copy.name,</div><div class='del'>-                                                      stbuf);</div><div class='del'>-                                gf_uuid_copy (local-&gt;loc2.gfid,</div><div class='del'>-                                              stbuf-&gt;ia_gfid);</div><div class='del'>-                        }</div><div class='add'>+            local-&gt;src_cached = dht_subvol_get_cached(this, local-&gt;loc.inode);</div><div class='add'>+        else {</div><div class='add'>+            if (loc-&gt;inode)</div><div class='add'>+                gf_uuid_unparse(loc-&gt;inode-&gt;gfid, gfid_local);</div><div class='add'>+</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "dst_cached before lookup: %s, "</div><div class='add'>+                         "(path:%s)(gfid:%s),",</div><div class='add'>+                         local-&gt;loc2.path,</div><div class='add'>+                         local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL,</div><div class='add'>+                         local-&gt;dst_cached ? gfid_local : NULL);</div><div class='add'>+</div><div class='add'>+            local-&gt;dst_cached = dht_subvol_get_cached(this,</div><div class='add'>+                                                      local-&gt;loc2_copy.inode);</div><div class='add'>+</div><div class='add'>+            gf_uuid_unparse(stbuf-&gt;ia_gfid, gfid_local);</div><div class='add'>+</div><div class='add'>+            gf_msg_debug(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                         "dst_cached after lookup: %s, "</div><div class='add'>+                         "(path:%s)(gfid:%s)",</div><div class='add'>+                         local-&gt;loc2.path,</div><div class='add'>+                         local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL,</div><div class='add'>+                         local-&gt;dst_cached ? gfid_local : NULL);</div><div class='add'>+</div><div class='add'>+            if ((local-&gt;loc2.inode == NULL) ||</div><div class='add'>+                gf_uuid_compare(stbuf-&gt;ia_gfid, local-&gt;loc2.inode-&gt;gfid)) {</div><div class='add'>+                if (local-&gt;loc2.inode != NULL) {</div><div class='add'>+                    inode_unlink(local-&gt;loc2.inode, local-&gt;loc2.parent,</div><div class='add'>+                                 local-&gt;loc2.name);</div><div class='add'>+                    inode_unref(local-&gt;loc2.inode);</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                if (is_src) {</div><div class='del'>-                        /* The meaning of is_linkfile is overloaded here. For locking</div><div class='del'>-                         * to work properly both rebalance and rename should acquire</div><div class='del'>-                         * lock on datafile. The reason for sending this lookup is to</div><div class='del'>-                         * find out whether we've acquired a lock on data file.</div><div class='del'>-                         * Between the lookup before rename and this rename, the</div><div class='del'>-                         * file could be migrated by a rebalance process and now this</div><div class='del'>-                         * file this might be a linkto file. We verify that by sending</div><div class='del'>-                         * this lookup. However, if this lookup fails we cannot really</div><div class='del'>-                         * say whether we've acquired lock on a datafile or linkto file.</div><div class='del'>-                         * So, we act conservatively and _assume_</div><div class='del'>-                         * that this is a linkfile and fail the rename operation.</div><div class='del'>-                         */</div><div class='del'>-                        local-&gt;is_linkfile = _gf_true;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                } else {</div><div class='del'>-                        if (local-&gt;dst_cached)</div><div class='del'>-                                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                              "file %s (gfid:%s) was present "</div><div class='del'>-                                              "(hashed-subvol=%s, "</div><div class='del'>-                                              "cached-subvol=%s) before rename,"</div><div class='del'>-                                              " but lookup failed",</div><div class='del'>-                                              local-&gt;loc2.path,</div><div class='del'>-                                              uuid_utoa (local-&gt;loc2.inode-&gt;gfid),</div><div class='del'>-                                              local-&gt;dst_hashed-&gt;name,</div><div class='del'>-                                              local-&gt;dst_cached-&gt;name);</div><div class='del'>-                        if (dht_inode_missing (op_errno))</div><div class='del'>-                                local-&gt;dst_cached = NULL;</div><div class='del'>-                }</div><div class='del'>-        } else if (is_src &amp;&amp; xattr &amp;&amp; check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                               conf-&gt;link_xattr_name)) {</div><div class='del'>-                local-&gt;is_linkfile = _gf_true;</div><div class='del'>-                /* Found linkto file instead of data file, passdown ENOENT</div><div class='del'>-                 * based on the above comment */</div><div class='del'>-                local-&gt;op_errno = ENOENT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!local-&gt;is_linkfile &amp;&amp; (op_ret &gt;= 0) &amp;&amp;</div><div class='del'>-            gf_uuid_compare (loc-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='del'>-                gf_uuid_unparse (loc-&gt;gfid, gfid_local);</div><div class='del'>-                gf_uuid_unparse (stbuf-&gt;ia_gfid, gfid_server);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_GFID_MISMATCH,</div><div class='del'>-                        "path:%s, received a different gfid, local_gfid= %s"</div><div class='del'>-                        " server_gfid: %s",</div><div class='del'>-                        local-&gt;loc.path, gfid_local, gfid_server);</div><div class='del'>-</div><div class='del'>-                /* Will passdown ENOENT anyway since the file we sent on</div><div class='del'>-                 * rename is replaced with a different file */</div><div class='del'>-                local-&gt;op_errno = ENOENT;</div><div class='del'>-                /* Since local-&gt;is_linkfile is used here to detect failure,</div><div class='del'>-                 * marking this to true */</div><div class='del'>-                local-&gt;is_linkfile = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (call_cnt)) {</div><div class='del'>-                if (local-&gt;is_linkfile) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        goto fail;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dht_rename_create_links (frame);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+                local-&gt;loc2.inode = inode_link(local-&gt;loc2_copy.inode,</div><div class='add'>+                                               local-&gt;loc2_copy.parent,</div><div class='add'>+                                               local-&gt;loc2_copy.name, stbuf);</div><div class='add'>+                gf_uuid_copy(local-&gt;loc2.gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        if (is_src) {</div><div class='add'>+            /* The meaning of is_linkfile is overloaded here. For locking</div><div class='add'>+             * to work properly both rebalance and rename should acquire</div><div class='add'>+             * lock on datafile. The reason for sending this lookup is to</div><div class='add'>+             * find out whether we've acquired a lock on data file.</div><div class='add'>+             * Between the lookup before rename and this rename, the</div><div class='add'>+             * file could be migrated by a rebalance process and now this</div><div class='add'>+             * file this might be a linkto file. We verify that by sending</div><div class='add'>+             * this lookup. However, if this lookup fails we cannot really</div><div class='add'>+             * say whether we've acquired lock on a datafile or linkto file.</div><div class='add'>+             * So, we act conservatively and _assume_</div><div class='add'>+             * that this is a linkfile and fail the rename operation.</div><div class='add'>+             */</div><div class='add'>+            local-&gt;is_linkfile = _gf_true;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        } else {</div><div class='add'>+            if (local-&gt;dst_cached)</div><div class='add'>+                gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                             "file %s (gfid:%s) was present "</div><div class='add'>+                             "(hashed-subvol=%s, "</div><div class='add'>+                             "cached-subvol=%s) before rename,"</div><div class='add'>+                             " but lookup failed",</div><div class='add'>+                             local-&gt;loc2.path,</div><div class='add'>+                             uuid_utoa(local-&gt;loc2.inode-&gt;gfid),</div><div class='add'>+                             local-&gt;dst_hashed-&gt;name, local-&gt;dst_cached-&gt;name);</div><div class='add'>+            if (dht_inode_missing(op_errno))</div><div class='add'>+                local-&gt;dst_cached = NULL;</div><div class='add'>+        }</div><div class='add'>+    } else if (is_src &amp;&amp; xattr &amp;&amp;</div><div class='add'>+               check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name)) {</div><div class='add'>+        local-&gt;is_linkfile = _gf_true;</div><div class='add'>+        /* Found linkto file instead of data file, passdown ENOENT</div><div class='add'>+         * based on the above comment */</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;is_linkfile &amp;&amp; (op_ret &gt;= 0) &amp;&amp;</div><div class='add'>+        gf_uuid_compare(loc-&gt;gfid, stbuf-&gt;ia_gfid)) {</div><div class='add'>+        gf_uuid_unparse(loc-&gt;gfid, gfid_local);</div><div class='add'>+        gf_uuid_unparse(stbuf-&gt;ia_gfid, gfid_server);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_GFID_MISMATCH,</div><div class='add'>+               "path:%s, received a different gfid, local_gfid= %s"</div><div class='add'>+               " server_gfid: %s",</div><div class='add'>+               local-&gt;loc.path, gfid_local, gfid_server);</div><div class='add'>+</div><div class='add'>+        /* Will passdown ENOENT anyway since the file we sent on</div><div class='add'>+         * rename is replaced with a different file */</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+        /* Since local-&gt;is_linkfile is used here to detect failure,</div><div class='add'>+         * marking this to true */</div><div class='add'>+        local-&gt;is_linkfile = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(call_cnt)) {</div><div class='add'>+        if (local-&gt;is_linkfile) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            goto fail;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        dht_rename_create_links(frame);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> fail:</div><div class='del'>-        dht_rename_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_rename_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_file_lock1_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_rename_file_lock1_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int          ret                        = 0;</div><div class='del'>-        loc_t       *loc                        = NULL;</div><div class='del'>-        xlator_t    *subvol                     = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "protecting namespace of %s failed"</div><div class='del'>-                        "rename (%s:%s:%s %s:%s:%s)",</div><div class='del'>-                        local-&gt;current == &amp;local-&gt;lock[0] ? local-&gt;loc.path</div><div class='del'>-                        : local-&gt;loc2.path,</div><div class='del'>-                        local-&gt;loc.path, src_gfid, local-&gt;src_hashed-&gt;name,</div><div class='del'>-                        local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                        local-&gt;dst_hashed ? local-&gt;dst_hashed-&gt;name : NULL);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;current == &amp;local-&gt;lock[0]) {</div><div class='del'>-                loc = &amp;local-&gt;loc2;</div><div class='del'>-                subvol = local-&gt;dst_hashed;</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[1];</div><div class='del'>-        } else {</div><div class='del'>-                loc = &amp;local-&gt;loc;</div><div class='del'>-                subvol = local-&gt;src_hashed;</div><div class='del'>-                local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_protect_namespace (frame, loc, subvol, &amp;local-&gt;current-&gt;ns,</div><div class='del'>-                                     dht_rename_lock_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "protecting namespace of %s failed"</div><div class='add'>+               "rename (%s:%s:%s %s:%s:%s)",</div><div class='add'>+               local-&gt;current == &amp;local-&gt;lock[0] ? local-&gt;loc.path</div><div class='add'>+                                                 : local-&gt;loc2.path,</div><div class='add'>+               local-&gt;loc.path, src_gfid, local-&gt;src_hashed-&gt;name,</div><div class='add'>+               local-&gt;loc2.path, dst_gfid,</div><div class='add'>+               local-&gt;dst_hashed ? local-&gt;dst_hashed-&gt;name : NULL);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;current == &amp;local-&gt;lock[0]) {</div><div class='add'>+        loc = &amp;local-&gt;loc2;</div><div class='add'>+        subvol = local-&gt;dst_hashed;</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[1];</div><div class='add'>+    } else {</div><div class='add'>+        loc = &amp;local-&gt;loc;</div><div class='add'>+        subvol = local-&gt;src_hashed;</div><div class='add'>+        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_protect_namespace(frame, loc, subvol, &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                dht_rename_lock_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        /* No harm in calling an extra unlock */</div><div class='del'>-        dht_rename_unlock (frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    /* No harm in calling an extra unlock */</div><div class='add'>+    dht_rename_unlock(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_rename_file_protect_namespace (call_frame_t *frame, void *cookie,</div><div class='del'>-                                   xlator_t *this, int32_t op_ret,</div><div class='del'>-                                   int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_rename_file_protect_namespace(call_frame_t *frame, void *cookie,</div><div class='add'>+                                  xlator_t *this, int32_t op_ret,</div><div class='add'>+                                  int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                     = NULL;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int          ret                        = 0;</div><div class='del'>-        loc_t       *loc                        = NULL;</div><div class='del'>-        xlator_t    *subvol                     = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "acquiring inodelk failed "</div><div class='del'>-                        "rename (%s:%s:%s %s:%s:%s)",</div><div class='del'>-                        local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='del'>-                        local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                        local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "acquiring inodelk failed "</div><div class='add'>+               "rename (%s:%s:%s %s:%s:%s)",</div><div class='add'>+               local-&gt;loc.path, src_gfid, local-&gt;src_cached-&gt;name,</div><div class='add'>+               local-&gt;loc2.path, dst_gfid,</div><div class='add'>+               local-&gt;dst_cached ? local-&gt;dst_cached-&gt;name : NULL);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Locks on src and dst needs to ordered which otherwise might cause</div><div class='del'>-         * deadlocks when rename (src, dst) and rename (dst, src) is done from</div><div class='del'>-         * two different clients</div><div class='del'>-         */</div><div class='del'>-        dht_order_rename_lock (frame, &amp;loc, &amp;subvol);</div><div class='add'>+    /* Locks on src and dst needs to ordered which otherwise might cause</div><div class='add'>+     * deadlocks when rename (src, dst) and rename (dst, src) is done from</div><div class='add'>+     * two different clients</div><div class='add'>+     */</div><div class='add'>+    dht_order_rename_lock(frame, &amp;loc, &amp;subvol);</div><div class='ctx'> </div><div class='del'>-        ret = dht_protect_namespace (frame, loc, subvol,</div><div class='del'>-                                     &amp;local-&gt;current-&gt;ns,</div><div class='del'>-                                     dht_rename_file_lock1_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_protect_namespace(frame, loc, subvol, &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                dht_rename_file_lock1_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        /* Its fine to call unlock even when no locks are acquired, as we check</div><div class='del'>-         * for lock-&gt;locked before winding a unlock call.</div><div class='del'>-         */</div><div class='del'>-        dht_rename_unlock (frame, this);</div><div class='add'>+    /* Its fine to call unlock even when no locks are acquired, as we check</div><div class='add'>+     * for lock-&gt;locked before winding a unlock call.</div><div class='add'>+     */</div><div class='add'>+    dht_rename_unlock(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_rename_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_rename_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        char         src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        dict_t      *xattr_req                  = NULL;</div><div class='del'>-        dht_conf_t  *conf                       = NULL;</div><div class='del'>-        int          i                          = 0;</div><div class='del'>-        xlator_t    *subvol                     = NULL;</div><div class='del'>-        dht_lock_t  *lock                       = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                uuid_utoa_r (local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;loc2.inode)</div><div class='del'>-                        uuid_utoa_r (local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_INODE_LK_ERROR,</div><div class='del'>-                        "protecting namespace of %s failed. "</div><div class='del'>-                        "rename (%s:%s:%s %s:%s:%s)",</div><div class='del'>-                        local-&gt;current == &amp;local-&gt;lock[0] ? local-&gt;loc.path</div><div class='del'>-                        : local-&gt;loc2.path,</div><div class='del'>-                        local-&gt;loc.path, src_gfid, local-&gt;src_hashed-&gt;name,</div><div class='del'>-                        local-&gt;loc2.path, dst_gfid,</div><div class='del'>-                        local-&gt;dst_hashed ? local-&gt;dst_hashed-&gt;name : NULL);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-                goto done;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    char src_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char dst_gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    dict_t *xattr_req = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_lock_t *lock = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        uuid_utoa_r(local-&gt;loc.inode-&gt;gfid, src_gfid);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc2.inode)</div><div class='add'>+            uuid_utoa_r(local-&gt;loc2.inode-&gt;gfid, dst_gfid);</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_INODE_LK_ERROR,</div><div class='add'>+               "protecting namespace of %s failed. "</div><div class='add'>+               "rename (%s:%s:%s %s:%s:%s)",</div><div class='add'>+               local-&gt;current == &amp;local-&gt;lock[0] ? local-&gt;loc.path</div><div class='add'>+                                                 : local-&gt;loc2.path,</div><div class='add'>+               local-&gt;loc.path, src_gfid, local-&gt;src_hashed-&gt;name,</div><div class='add'>+               local-&gt;loc2.path, dst_gfid,</div><div class='add'>+               local-&gt;dst_hashed ? local-&gt;dst_hashed-&gt;name : NULL);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr_req = dict_new();</div><div class='add'>+    if (xattr_req == NULL) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = dict_set_uint32(xattr_req, conf-&gt;link_xattr_name, 256);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = -op_ret;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* dst_cached might've changed. This normally happens for two reasons:</div><div class='add'>+     * 1. rebalance migrated dst</div><div class='add'>+     * 2. Another parallel rename was done overwriting dst</div><div class='add'>+     *</div><div class='add'>+     * Doing a lookup on local-&gt;loc2 when dst exists, but is associated</div><div class='add'>+     * with a different gfid will result in an ESTALE error. So, do a fresh</div><div class='add'>+     * lookup with a new inode on dst-path and handle change of dst-cached</div><div class='add'>+     * in the cbk. Also, to identify dst-cached changes we do a lookup on</div><div class='add'>+     * "this" rather than the subvol.</div><div class='add'>+     */</div><div class='add'>+    loc_copy(&amp;local-&gt;loc2_copy, &amp;local-&gt;loc2);</div><div class='add'>+    inode_unref(local-&gt;loc2_copy.inode);</div><div class='add'>+    local-&gt;loc2_copy.inode = inode_new(local-&gt;loc.inode-&gt;table);</div><div class='add'>+</div><div class='add'>+    /* Why not use local-&gt;lock.locks[?].loc for lookup post lock phase</div><div class='add'>+     * ---------------------------------------------------------------</div><div class='add'>+     * "layout.parent_layout.locks[?].loc" does not have the name and pargfid</div><div class='add'>+     * populated.</div><div class='add'>+     * Reason: If we had populated the name and pargfid, server might</div><div class='add'>+     * resolve to a successful lookup even if there is a file with same name</div><div class='add'>+     * with a different gfid(unlink &amp; create) as server does name based</div><div class='add'>+     * resolution on first priority. And this can result in operating on a</div><div class='add'>+     * different inode entirely.</div><div class='add'>+     *</div><div class='add'>+     * Now consider a scenario where source file was renamed by some other</div><div class='add'>+     * client to a new name just before this lock was granted. So if a</div><div class='add'>+     * lookup would be done on local-&gt;lock[0].layout.parent_layout.locks[?].loc,</div><div class='add'>+     * server will send success even if the entry was renamed (since server will</div><div class='add'>+     * do a gfid based resolution). So once a lock is granted, make sure the</div><div class='add'>+     * file exists with the name that the client requested with.</div><div class='add'>+     * */</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='add'>+    for (i = 0; i &lt; 2; i++) {</div><div class='add'>+        if (i == 0) {</div><div class='add'>+            lock = local-&gt;rename_inodelk_backward_compatible[0];</div><div class='add'>+            if (gf_uuid_compare(local-&gt;loc.gfid, lock-&gt;loc.gfid) == 0)</div><div class='add'>+                subvol = lock-&gt;xl;</div><div class='add'>+            else {</div><div class='add'>+                lock = local-&gt;rename_inodelk_backward_compatible[1];</div><div class='add'>+                subvol = lock-&gt;xl;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            subvol = this;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        xattr_req = dict_new ();</div><div class='del'>-        if (xattr_req == NULL) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_rename_lookup_cbk, (void *)(long)i, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;lookup,</div><div class='add'>+                          (i == 0) ? &amp;local-&gt;loc : &amp;local-&gt;loc2_copy,</div><div class='add'>+                          xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        op_ret = dict_set_uint32 (xattr_req,</div><div class='del'>-                                  conf-&gt;link_xattr_name, 256);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = -op_ret;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* dst_cached might've changed. This normally happens for two reasons:</div><div class='del'>-         * 1. rebalance migrated dst</div><div class='del'>-         * 2. Another parallel rename was done overwriting dst</div><div class='del'>-         *</div><div class='del'>-         * Doing a lookup on local-&gt;loc2 when dst exists, but is associated</div><div class='del'>-         * with a different gfid will result in an ESTALE error. So, do a fresh</div><div class='del'>-         * lookup with a new inode on dst-path and handle change of dst-cached</div><div class='del'>-         * in the cbk. Also, to identify dst-cached changes we do a lookup on</div><div class='del'>-         * "this" rather than the subvol.</div><div class='del'>-         */</div><div class='del'>-        loc_copy (&amp;local-&gt;loc2_copy, &amp;local-&gt;loc2);</div><div class='del'>-        inode_unref (local-&gt;loc2_copy.inode);</div><div class='del'>-        local-&gt;loc2_copy.inode = inode_new (local-&gt;loc.inode-&gt;table);</div><div class='del'>-</div><div class='del'>-        /* Why not use local-&gt;lock.locks[?].loc for lookup post lock phase</div><div class='del'>-         * ---------------------------------------------------------------</div><div class='del'>-         * "layout.parent_layout.locks[?].loc" does not have the name and pargfid</div><div class='del'>-         * populated.</div><div class='del'>-         * Reason: If we had populated the name and pargfid, server might</div><div class='del'>-         * resolve to a successful lookup even if there is a file with same name</div><div class='del'>-         * with a different gfid(unlink &amp; create) as server does name based</div><div class='del'>-         * resolution on first priority. And this can result in operating on a</div><div class='del'>-         * different inode entirely.</div><div class='del'>-         *</div><div class='del'>-         * Now consider a scenario where source file was renamed by some other</div><div class='del'>-         * client to a new name just before this lock was granted. So if a</div><div class='del'>-         * lookup would be done on local-&gt;lock[0].layout.parent_layout.locks[?].loc,</div><div class='del'>-         * server will send success even if the entry was renamed (since server will</div><div class='del'>-         * do a gfid based resolution). So once a lock is granted, make sure the file</div><div class='del'>-         * exists with the name that the client requested with.</div><div class='del'>-         * */</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='del'>-        for (i = 0; i &lt; 2; i++) {</div><div class='del'>-                if (i == 0) {</div><div class='del'>-                        lock = local-&gt;rename_inodelk_backward_compatible[0];</div><div class='del'>-                        if (gf_uuid_compare (local-&gt;loc.gfid,</div><div class='del'>-                                             lock-&gt;loc.gfid) == 0)</div><div class='del'>-                                subvol = lock-&gt;xl;</div><div class='del'>-                        else {</div><div class='del'>-                                lock = local-&gt;rename_inodelk_backward_compatible[1];</div><div class='del'>-                                subvol = lock-&gt;xl;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        subvol = this;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_rename_lookup_cbk,</div><div class='del'>-                                   (void *)(long)i, subvol,</div><div class='del'>-                                   subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                   (i == 0) ? &amp;local-&gt;loc : &amp;local-&gt;loc2_copy,</div><div class='del'>-                                   xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict_unref (xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    dict_unref(xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        /* Its fine to call unlock even when no locks are acquired, as we check</div><div class='del'>-         * for lock-&gt;locked before winding a unlock call.</div><div class='del'>-         */</div><div class='del'>-        dht_rename_unlock (frame, this);</div><div class='add'>+    /* Its fine to call unlock even when no locks are acquired, as we check</div><div class='add'>+     * for lock-&gt;locked before winding a unlock call.</div><div class='add'>+     */</div><div class='add'>+    dht_rename_unlock(frame, this);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename_lock (call_frame_t *frame)</div><div class='add'>+dht_rename_lock(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local    = NULL;</div><div class='del'>-        int           count    = 1, ret = -1;</div><div class='del'>-        dht_lock_t  **lk_array = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;dst_cached)</div><div class='del'>-                count++;</div><div class='del'>-</div><div class='del'>-        lk_array = GF_CALLOC (count, sizeof (*lk_array),</div><div class='del'>-                              gf_common_mt_pointer);</div><div class='del'>-        if (lk_array == NULL)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        lk_array[0] = dht_lock_new (frame-&gt;this, local-&gt;src_cached, &amp;local-&gt;loc,</div><div class='del'>-                                    F_WRLCK, DHT_FILE_MIGRATE_DOMAIN, NULL,</div><div class='del'>-                                    FAIL_ON_ANY_ERROR);</div><div class='del'>-        if (lk_array[0] == NULL)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;dst_cached) {</div><div class='del'>-                /* dst might be removed by the time inodelk reaches bricks,</div><div class='del'>-                 * which can result in ESTALE errors. POSIX imposes no</div><div class='del'>-                 * restriction for dst to be present for renames to be</div><div class='del'>-                 * successful. So, we'll ignore ESTALE errors. As far as</div><div class='del'>-                 * synchronization on dst goes, we'll achieve the same by</div><div class='del'>-                 * holding entrylk on parent directory of dst in the namespace</div><div class='del'>-                 * of basename(dst). Also, there might not be quorum in cluster</div><div class='del'>-                 * xlators like EC/disperse on errno, in which case they return</div><div class='del'>-                 * EIO. For eg., in a disperse (4 + 2), 3 might return success</div><div class='del'>-                 * and three might return ESTALE. Disperse, having no Quorum</div><div class='del'>-                 * unwinds inodelk with EIO. So, ignore EIO too.</div><div class='del'>-                 */</div><div class='del'>-                lk_array[1] = dht_lock_new (frame-&gt;this, local-&gt;dst_cached,</div><div class='del'>-                                            &amp;local-&gt;loc2, F_WRLCK,</div><div class='del'>-                                            DHT_FILE_MIGRATE_DOMAIN, NULL,</div><div class='del'>-                                            IGNORE_ENOENT_ESTALE_EIO);</div><div class='del'>-                if (lk_array[1] == NULL)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;rename_inodelk_backward_compatible = lk_array;</div><div class='del'>-        local-&gt;rename_inodelk_bc_count = count;</div><div class='del'>-</div><div class='del'>-        /* retaining inodelks for the sake of backward compatibility. Please</div><div class='del'>-         * make sure to remove this inodelk once all of 3.10, 3.12 and 3.13</div><div class='del'>-         * reach EOL. Better way of getting synchronization would be to acquire</div><div class='del'>-         * entrylks on src and dst parent directories in the namespace of</div><div class='del'>-         * basenames of src and dst</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int count = 1, ret = -1;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;dst_cached)</div><div class='add'>+        count++;</div><div class='add'>+</div><div class='add'>+    lk_array = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_pointer);</div><div class='add'>+    if (lk_array == NULL)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    lk_array[0] = dht_lock_new(frame-&gt;this, local-&gt;src_cached, &amp;local-&gt;loc,</div><div class='add'>+                               F_WRLCK, DHT_FILE_MIGRATE_DOMAIN, NULL,</div><div class='add'>+                               FAIL_ON_ANY_ERROR);</div><div class='add'>+    if (lk_array[0] == NULL)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;dst_cached) {</div><div class='add'>+        /* dst might be removed by the time inodelk reaches bricks,</div><div class='add'>+         * which can result in ESTALE errors. POSIX imposes no</div><div class='add'>+         * restriction for dst to be present for renames to be</div><div class='add'>+         * successful. So, we'll ignore ESTALE errors. As far as</div><div class='add'>+         * synchronization on dst goes, we'll achieve the same by</div><div class='add'>+         * holding entrylk on parent directory of dst in the namespace</div><div class='add'>+         * of basename(dst). Also, there might not be quorum in cluster</div><div class='add'>+         * xlators like EC/disperse on errno, in which case they return</div><div class='add'>+         * EIO. For eg., in a disperse (4 + 2), 3 might return success</div><div class='add'>+         * and three might return ESTALE. Disperse, having no Quorum</div><div class='add'>+         * unwinds inodelk with EIO. So, ignore EIO too.</div><div class='ctx'>          */</div><div class='del'>-        ret = dht_blocking_inodelk (frame, lk_array, count,</div><div class='del'>-                                    dht_rename_file_protect_namespace);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;rename_inodelk_backward_compatible = NULL;</div><div class='del'>-                local-&gt;rename_inodelk_bc_count = 0;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+        lk_array[1] = dht_lock_new(frame-&gt;this, local-&gt;dst_cached, &amp;local-&gt;loc2,</div><div class='add'>+                                   F_WRLCK, DHT_FILE_MIGRATE_DOMAIN, NULL,</div><div class='add'>+                                   IGNORE_ENOENT_ESTALE_EIO);</div><div class='add'>+        if (lk_array[1] == NULL)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;rename_inodelk_backward_compatible = lk_array;</div><div class='add'>+    local-&gt;rename_inodelk_bc_count = count;</div><div class='add'>+</div><div class='add'>+    /* retaining inodelks for the sake of backward compatibility. Please</div><div class='add'>+     * make sure to remove this inodelk once all of 3.10, 3.12 and 3.13</div><div class='add'>+     * reach EOL. Better way of getting synchronization would be to acquire</div><div class='add'>+     * entrylks on src and dst parent directories in the namespace of</div><div class='add'>+     * basenames of src and dst</div><div class='add'>+     */</div><div class='add'>+    ret = dht_blocking_inodelk(frame, lk_array, count,</div><div class='add'>+                               dht_rename_file_protect_namespace);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;rename_inodelk_backward_compatible = NULL;</div><div class='add'>+        local-&gt;rename_inodelk_bc_count = 0;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (lk_array != NULL) {</div><div class='del'>-                int tmp_count = 0, i = 0;</div><div class='add'>+    if (lk_array != NULL) {</div><div class='add'>+        int tmp_count = 0, i = 0;</div><div class='ctx'> </div><div class='del'>-                for (i = 0; (i &lt; count) &amp;&amp; (lk_array[i]); i++, tmp_count++);</div><div class='add'>+        for (i = 0; (i &lt; count) &amp;&amp; (lk_array[i]); i++, tmp_count++)</div><div class='add'>+            ;</div><div class='ctx'> </div><div class='del'>-                dht_lock_array_free (lk_array, tmp_count);</div><div class='del'>-                GF_FREE (lk_array);</div><div class='del'>-        }</div><div class='add'>+        dht_lock_array_free(lk_array, tmp_count);</div><div class='add'>+        GF_FREE(lk_array);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+dht_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *src_cached             = NULL;</div><div class='del'>-        xlator_t    *src_hashed             = NULL;</div><div class='del'>-        xlator_t    *dst_cached             = NULL;</div><div class='del'>-        xlator_t    *dst_hashed             = NULL;</div><div class='del'>-        int          op_errno               = -1;</div><div class='del'>-        int          ret                    = -1;</div><div class='del'>-        dht_local_t *local                  = NULL;</div><div class='del'>-        dht_conf_t  *conf                   = NULL;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         newgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        gf_boolean_t free_xdata             = _gf_false;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (newloc, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;subvolume_cnt == 1) {</div><div class='del'>-                if (!IA_ISDIR (oldloc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                        if (!xdata) {</div><div class='del'>-                                free_xdata = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                        DHT_CHANGELOG_TRACK_AS_RENAME(xdata, oldloc, newloc);</div><div class='del'>-                }</div><div class='del'>-                default_rename (frame, this, oldloc, newloc, xdata);</div><div class='del'>-                if (free_xdata &amp;&amp; xdata) {</div><div class='del'>-                        dict_unref(xdata);</div><div class='del'>-                        xdata = NULL;</div><div class='del'>-                }</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(oldloc-&gt;inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        src_hashed = dht_subvol_get_hashed (this, oldloc);</div><div class='del'>-        if (!src_hashed) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_RENAME_FAILED,</div><div class='del'>-                        "No hashed subvolume in layout for path=%s,"</div><div class='del'>-                        "(gfid = %s)", oldloc-&gt;path, gfid);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='add'>+    xlator_t *src_cached = NULL;</div><div class='add'>+    xlator_t *src_hashed = NULL;</div><div class='add'>+    xlator_t *dst_cached = NULL;</div><div class='add'>+    xlator_t *dst_hashed = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char newgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    gf_boolean_t free_xdata = _gf_false;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(newloc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;subvolume_cnt == 1) {</div><div class='add'>+        if (!IA_ISDIR(oldloc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+            if (!xdata) {</div><div class='add'>+                free_xdata = _gf_true;</div><div class='add'>+            }</div><div class='add'>+            DHT_CHANGELOG_TRACK_AS_RENAME(xdata, oldloc, newloc);</div><div class='add'>+        }</div><div class='add'>+        default_rename(frame, this, oldloc, newloc, xdata);</div><div class='add'>+        if (free_xdata &amp;&amp; xdata) {</div><div class='add'>+            dict_unref(xdata);</div><div class='add'>+            xdata = NULL;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        src_cached = dht_subvol_get_cached (this, oldloc-&gt;inode);</div><div class='del'>-        if (!src_cached) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_RENAME_FAILED,</div><div class='del'>-                        "No cached subvolume for path = %s,"</div><div class='del'>-                        "(gfid = %s)", oldloc-&gt;path, gfid);</div><div class='del'>-</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dst_hashed = dht_subvol_get_hashed (this, newloc);</div><div class='del'>-        if (!dst_hashed) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_RENAME_FAILED,</div><div class='del'>-                        "No hashed subvolume in layout for path=%s",</div><div class='del'>-                        newloc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (newloc-&gt;inode)</div><div class='del'>-                dst_cached = dht_subvol_get_cached (this, newloc-&gt;inode);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, oldloc, NULL, GF_FOP_RENAME);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        /* cached_subvol will be set from dht_local_init, reset it to NULL,</div><div class='del'>-           as the logic of handling rename is different  */</div><div class='del'>-        local-&gt;cached_subvol = NULL;</div><div class='del'>-</div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc2, newloc);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;src_hashed = src_hashed;</div><div class='del'>-        local-&gt;src_cached = src_cached;</div><div class='del'>-        local-&gt;dst_hashed = dst_hashed;</div><div class='del'>-        local-&gt;dst_cached = dst_cached;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (newloc-&gt;inode)</div><div class='del'>-                gf_uuid_unparse(newloc-&gt;inode-&gt;gfid, newgfid);</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                DHT_MSG_RENAME_INFO,</div><div class='del'>-                "renaming %s (%s) (hash=%s/cache=%s) =&gt; %s (%s) "</div><div class='del'>-                "(hash=%s/cache=%s) ",</div><div class='del'>-                oldloc-&gt;path, gfid, src_hashed-&gt;name, src_cached-&gt;name,</div><div class='del'>-                newloc-&gt;path, newloc-&gt;inode ? newgfid : NULL, dst_hashed-&gt;name,</div><div class='del'>-                dst_cached ? dst_cached-&gt;name : "&lt;nul&gt;");</div><div class='del'>-</div><div class='del'>-        if (IA_ISDIR (oldloc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                dht_rename_dir (frame, this);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                ret = dht_rename_lock (frame);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(oldloc-&gt;inode-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+    src_hashed = dht_subvol_get_hashed(this, oldloc);</div><div class='add'>+    if (!src_hashed) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_RENAME_FAILED,</div><div class='add'>+               "No hashed subvolume in layout for path=%s,"</div><div class='add'>+               "(gfid = %s)",</div><div class='add'>+               oldloc-&gt;path, gfid);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    src_cached = dht_subvol_get_cached(this, oldloc-&gt;inode);</div><div class='add'>+    if (!src_cached) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_RENAME_FAILED,</div><div class='add'>+               "No cached subvolume for path = %s,"</div><div class='add'>+               "(gfid = %s)",</div><div class='add'>+               oldloc-&gt;path, gfid);</div><div class='add'>+</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dst_hashed = dht_subvol_get_hashed(this, newloc);</div><div class='add'>+    if (!dst_hashed) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_RENAME_FAILED,</div><div class='add'>+               "No hashed subvolume in layout for path=%s", newloc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (newloc-&gt;inode)</div><div class='add'>+        dst_cached = dht_subvol_get_cached(this, newloc-&gt;inode);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, oldloc, NULL, GF_FOP_RENAME);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    /* cached_subvol will be set from dht_local_init, reset it to NULL,</div><div class='add'>+       as the logic of handling rename is different  */</div><div class='add'>+    local-&gt;cached_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc2, newloc);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;src_hashed = src_hashed;</div><div class='add'>+    local-&gt;src_cached = src_cached;</div><div class='add'>+    local-&gt;dst_hashed = dst_hashed;</div><div class='add'>+    local-&gt;dst_cached = dst_cached;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (newloc-&gt;inode)</div><div class='add'>+        gf_uuid_unparse(newloc-&gt;inode-&gt;gfid, newgfid);</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_RENAME_INFO,</div><div class='add'>+           "renaming %s (%s) (hash=%s/cache=%s) =&gt; %s (%s) "</div><div class='add'>+           "(hash=%s/cache=%s) ",</div><div class='add'>+           oldloc-&gt;path, gfid, src_hashed-&gt;name, src_cached-&gt;name, newloc-&gt;path,</div><div class='add'>+           newloc-&gt;inode ? newgfid : NULL, dst_hashed-&gt;name,</div><div class='add'>+           dst_cached ? dst_cached-&gt;name : "&lt;nul&gt;");</div><div class='add'>+</div><div class='add'>+    if (IA_ISDIR(oldloc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        dht_rename_dir(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        ret = dht_rename_lock(frame);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c<br/>index 5d5c8e86ddf..e17f96698bd 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-selfheal.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-selfheal.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-selfheal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-selfheal.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "glusterfs.h"</div><div class='ctx'> #include "xlator.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='hunk'>@@ -16,2736 +15,2640 @@</div><div class='ctx'> #include "dht-lock.h"</div><div class='ctx'> #include "glusterfs-acl.h"</div><div class='ctx'> </div><div class='del'>-#define DHT_SET_LAYOUT_RANGE(layout,i,srt,chunk,path)    do {           \</div><div class='del'>-                layout-&gt;list[i].start = srt;                            \</div><div class='del'>-                layout-&gt;list[i].stop  = srt + chunk - 1;                \</div><div class='del'>-                layout-&gt;list[i].commit_hash = layout-&gt;commit_hash;      \</div><div class='del'>-                                                                        \</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,                            \</div><div class='del'>-                              "gave fix: %u - %u, with commit-hash %u"  \</div><div class='del'>-                              " on %s for %s",                          \</div><div class='del'>-                              layout-&gt;list[i].start,                    \</div><div class='del'>-                              layout-&gt;list[i].stop,                     \</div><div class='del'>-                              layout-&gt;list[i].commit_hash,              \</div><div class='del'>-                              layout-&gt;list[i].xlator-&gt;name, path);      \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define DHT_RESET_LAYOUT_RANGE(layout)    do {                          \</div><div class='del'>-                int cnt = 0;                                            \</div><div class='del'>-                for (cnt = 0; cnt &lt; layout-&gt;cnt; cnt++ ) {              \</div><div class='del'>-                        layout-&gt;list[cnt].start = 0;                    \</div><div class='del'>-                        layout-&gt;list[cnt].stop  = 0;                    \</div><div class='del'>-                }                                                       \</div><div class='del'>-        } while (0)</div><div class='add'>+#define DHT_SET_LAYOUT_RANGE(layout, i, srt, chunk, path)                      \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        layout-&gt;list[i].start = srt;                                           \</div><div class='add'>+        layout-&gt;list[i].stop = srt + chunk - 1;                                \</div><div class='add'>+        layout-&gt;list[i].commit_hash = layout-&gt;commit_hash;                     \</div><div class='add'>+                                                                               \</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,                                            \</div><div class='add'>+                     "gave fix: %u - %u, with commit-hash %u"                  \</div><div class='add'>+                     " on %s for %s",                                          \</div><div class='add'>+                     layout-&gt;list[i].start, layout-&gt;list[i].stop,              \</div><div class='add'>+                     layout-&gt;list[i].commit_hash,                              \</div><div class='add'>+                     layout-&gt;list[i].xlator-&gt;name, path);                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define DHT_RESET_LAYOUT_RANGE(layout)                                         \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int cnt = 0;                                                           \</div><div class='add'>+        for (cnt = 0; cnt &lt; layout-&gt;cnt; cnt++) {                              \</div><div class='add'>+            layout-&gt;list[cnt].start = 0;                                       \</div><div class='add'>+            layout-&gt;list[cnt].stop = 0;                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_layout_lock (call_frame_t *frame, dht_layout_t *layout,</div><div class='del'>-                          gf_boolean_t newdir,</div><div class='del'>-                          dht_selfheal_layout_t healer,</div><div class='del'>-                          dht_need_heal_t should_heal);</div><div class='add'>+dht_selfheal_layout_lock(call_frame_t *frame, dht_layout_t *layout,</div><div class='add'>+                         gf_boolean_t newdir, dht_selfheal_layout_t healer,</div><div class='add'>+                         dht_need_heal_t should_heal);</div><div class='ctx'> </div><div class='ctx'> static uint32_t</div><div class='del'>-dht_overlap_calc (dht_layout_t *old, int o, dht_layout_t *new, int n)</div><div class='add'>+dht_overlap_calc(dht_layout_t *old, int o, dht_layout_t *new, int n)</div><div class='ctx'> {</div><div class='del'>-	if (o &gt;= old-&gt;cnt || n &gt;= new-&gt;cnt)</div><div class='del'>-		return 0;</div><div class='add'>+    if (o &gt;= old-&gt;cnt || n &gt;= new-&gt;cnt)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	if (old-&gt;list[o].err &gt; 0 || new-&gt;list[n].err &gt; 0)</div><div class='del'>-		return 0;</div><div class='add'>+    if (old-&gt;list[o].err &gt; 0 || new-&gt;list[n].err &gt; 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (old-&gt;list[o].start == old-&gt;list[o].stop) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (old-&gt;list[o].start == old-&gt;list[o].stop) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (new-&gt;list[n].start == new-&gt;list[n].stop) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (new-&gt;list[n].start == new-&gt;list[n].stop) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if ((old-&gt;list[o].start &gt; new-&gt;list[n].stop) ||</div><div class='del'>-	    (old-&gt;list[o].stop &lt; new-&gt;list[n].start))</div><div class='del'>-		return 0;</div><div class='add'>+    if ((old-&gt;list[o].start &gt; new-&gt;list[n].stop) ||</div><div class='add'>+        (old-&gt;list[o].stop &lt; new-&gt;list[n].start))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	return min (old-&gt;list[o].stop, new-&gt;list[n].stop) -</div><div class='del'>-	        max (old-&gt;list[o].start, new-&gt;list[n].start) + 1;</div><div class='add'>+    return min(old-&gt;list[o].stop, new-&gt;list[n].stop) -</div><div class='add'>+           max(old-&gt;list[o].start, new-&gt;list[n].start) + 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_selfheal_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_finish (call_frame_t *frame, xlator_t *this, int ret,</div><div class='del'>-                         int invoke_cbk)</div><div class='add'>+dht_selfheal_dir_finish(call_frame_t *frame, xlator_t *this, int ret,</div><div class='add'>+                        int invoke_cbk)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local      = NULL, *lock_local = NULL;</div><div class='del'>-        call_frame_t *lock_frame = NULL;</div><div class='del'>-        int           lock_count = 0;</div><div class='add'>+    dht_local_t *local = NULL, *lock_local = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    int lock_count = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        /* Unlock entrylk */</div><div class='del'>-        dht_unlock_entrylk_wrapper (frame, &amp;local-&gt;lock[0].ns.directory_ns);</div><div class='add'>+    /* Unlock entrylk */</div><div class='add'>+    dht_unlock_entrylk_wrapper(frame, &amp;local-&gt;lock[0].ns.directory_ns);</div><div class='ctx'> </div><div class='del'>-        /* Unlock inodelk */</div><div class='del'>-        lock_count = dht_lock_count (local-&gt;lock[0].ns.parent_layout.locks,</div><div class='del'>-                                     local-&gt;lock[0].ns.parent_layout.lk_count);</div><div class='del'>-        if (lock_count == 0)</div><div class='del'>-                goto done;</div><div class='add'>+    /* Unlock inodelk */</div><div class='add'>+    lock_count = dht_lock_count(local-&gt;lock[0].ns.parent_layout.locks,</div><div class='add'>+                                local-&gt;lock[0].ns.parent_layout.lk_count);</div><div class='add'>+    if (lock_count == 0)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='del'>-        lock_frame = copy_frame (frame);</div><div class='del'>-        if (lock_frame == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    lock_frame = copy_frame(frame);</div><div class='add'>+    if (lock_frame == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock_local = dht_local_init (lock_frame, &amp;local-&gt;loc, NULL,</div><div class='del'>-                                     lock_frame-&gt;root-&gt;op);</div><div class='del'>-        if (lock_local == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    lock_local = dht_local_init(lock_frame, &amp;local-&gt;loc, NULL,</div><div class='add'>+                                lock_frame-&gt;root-&gt;op);</div><div class='add'>+    if (lock_local == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock_local-&gt;lock[0].ns.parent_layout.locks = local-&gt;lock[0].ns.parent_layout.locks;</div><div class='del'>-        lock_local-&gt;lock[0].ns.parent_layout.lk_count = local-&gt;lock[0].ns.parent_layout.lk_count;</div><div class='add'>+    lock_local-&gt;lock[0].ns.parent_layout.locks = local-&gt;lock[0]</div><div class='add'>+                                                     .ns.parent_layout.locks;</div><div class='add'>+    lock_local-&gt;lock[0]</div><div class='add'>+        .ns.parent_layout.lk_count = local-&gt;lock[0].ns.parent_layout.lk_count;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].ns.parent_layout.locks = NULL;</div><div class='del'>-        local-&gt;lock[0].ns.parent_layout.lk_count = 0;</div><div class='add'>+    local-&gt;lock[0].ns.parent_layout.locks = NULL;</div><div class='add'>+    local-&gt;lock[0].ns.parent_layout.lk_count = 0;</div><div class='ctx'> </div><div class='del'>-        dht_unlock_inodelk (lock_frame,</div><div class='del'>-                            lock_local-&gt;lock[0].ns.parent_layout.locks,</div><div class='del'>-                            lock_local-&gt;lock[0].ns.parent_layout.lk_count,</div><div class='del'>-                            dht_selfheal_unlock_cbk);</div><div class='del'>-        lock_frame = NULL;</div><div class='add'>+    dht_unlock_inodelk(lock_frame, lock_local-&gt;lock[0].ns.parent_layout.locks,</div><div class='add'>+                       lock_local-&gt;lock[0].ns.parent_layout.lk_count,</div><div class='add'>+                       dht_selfheal_unlock_cbk);</div><div class='add'>+    lock_frame = NULL;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (invoke_cbk)</div><div class='del'>-                local-&gt;selfheal.dir_cbk (frame, NULL, frame-&gt;this, ret,</div><div class='del'>-                                         local-&gt;op_errno, NULL);</div><div class='del'>-        if (lock_frame != NULL) {</div><div class='del'>-                DHT_STACK_DESTROY (lock_frame);</div><div class='del'>-        }</div><div class='add'>+    if (invoke_cbk)</div><div class='add'>+        local-&gt;selfheal.dir_cbk(frame, NULL, frame-&gt;this, ret, local-&gt;op_errno,</div><div class='add'>+                                NULL);</div><div class='add'>+    if (lock_frame != NULL) {</div><div class='add'>+        DHT_STACK_DESTROY(lock_frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_refresh_layout_done (call_frame_t *frame)</div><div class='add'>+dht_refresh_layout_done(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int                    ret         = -1;</div><div class='del'>-        dht_layout_t          *refreshed   = NULL, *heal = NULL;</div><div class='del'>-        dht_local_t           *local       = NULL;</div><div class='del'>-        dht_need_heal_t        should_heal = NULL;</div><div class='del'>-        dht_selfheal_layout_t  healer      = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_layout_t *refreshed = NULL, *heal = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_need_heal_t should_heal = NULL;</div><div class='add'>+    dht_selfheal_layout_t healer = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        refreshed = local-&gt;selfheal.refreshed_layout;</div><div class='del'>-        heal = local-&gt;selfheal.layout;</div><div class='add'>+    refreshed = local-&gt;selfheal.refreshed_layout;</div><div class='add'>+    heal = local-&gt;selfheal.layout;</div><div class='ctx'> </div><div class='del'>-        healer = local-&gt;selfheal.healer;</div><div class='del'>-        should_heal = local-&gt;selfheal.should_heal;</div><div class='add'>+    healer = local-&gt;selfheal.healer;</div><div class='add'>+    should_heal = local-&gt;selfheal.should_heal;</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_sort (refreshed);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_SORT_FAILED,</div><div class='del'>-                        "sorting the layout failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_layout_sort(refreshed);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_SORT_FAILED,</div><div class='add'>+               "sorting the layout failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (should_heal (frame, &amp;heal, &amp;refreshed)) {</div><div class='del'>-                healer (frame, &amp;local-&gt;loc, heal);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;selfheal.layout = NULL;</div><div class='del'>-                local-&gt;selfheal.refreshed_layout = NULL;</div><div class='del'>-                local-&gt;selfheal.layout = refreshed;</div><div class='add'>+    if (should_heal(frame, &amp;heal, &amp;refreshed)) {</div><div class='add'>+        healer(frame, &amp;local-&gt;loc, heal);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;selfheal.layout = NULL;</div><div class='add'>+        local-&gt;selfheal.refreshed_layout = NULL;</div><div class='add'>+        local-&gt;selfheal.layout = refreshed;</div><div class='ctx'> </div><div class='del'>-                dht_layout_unref (frame-&gt;this, heal);</div><div class='add'>+        dht_layout_unref(frame-&gt;this, heal);</div><div class='ctx'> </div><div class='del'>-                dht_selfheal_dir_finish (frame, frame-&gt;this, 0, 1);</div><div class='del'>-        }</div><div class='add'>+        dht_selfheal_dir_finish(frame, frame-&gt;this, 0, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_selfheal_dir_finish (frame, frame-&gt;this, -1, 1);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_selfheal_dir_finish(frame, frame-&gt;this, -1, 1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_refresh_layout_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                        struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                        struct iatt *postparent)</div><div class='add'>+dht_refresh_layout_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                       struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                       struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                     = NULL;</div><div class='del'>-        int           this_call_cnt             = 0;</div><div class='del'>-        xlator_t     *prev                      = NULL;</div><div class='del'>-        dht_layout_t *layout                    = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE]    = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        layout = local-&gt;selfheal.refreshed_layout;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                op_ret = dht_layout_merge (this, layout, prev,</div><div class='del'>-                                           op_ret, op_errno, xattr);</div><div class='del'>-</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                DHT_MSG_FILE_LOOKUP_FAILED,</div><div class='del'>-                                "lookup of %s on %s returned error, gfid: %s",</div><div class='del'>-                                local-&gt;loc.path, prev-&gt;name, gfid);</div><div class='del'>-</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    layout = local-&gt;selfheal.refreshed_layout;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        op_ret = dht_layout_merge(this, layout, prev, op_ret, op_errno, xattr);</div><div class='add'>+</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                   DHT_MSG_FILE_LOOKUP_FAILED,</div><div class='add'>+                   "lookup of %s on %s returned error, gfid: %s",</div><div class='add'>+                   local-&gt;loc.path, prev-&gt;name, gfid);</div><div class='add'>+</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if (local-&gt;op_ret == 0) {</div><div class='del'>-                        local-&gt;refresh_layout_done (frame);</div><div class='del'>-                } else {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (local-&gt;op_ret == 0) {</div><div class='add'>+            local-&gt;refresh_layout_done(frame);</div><div class='add'>+        } else {</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (local) {</div><div class='del'>-                local-&gt;refresh_layout_unlock (frame, this, -1, 1);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (local) {</div><div class='add'>+        local-&gt;refresh_layout_unlock(frame, this, -1, 1);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_refresh_layout (call_frame_t *frame)</div><div class='add'>+dht_refresh_layout(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int          call_cnt                   = 0;</div><div class='del'>-        int          i                          = 0, ret = -1;</div><div class='del'>-        dht_conf_t  *conf                       = NULL;</div><div class='del'>-        dht_local_t *local                      = NULL;</div><div class='del'>-        xlator_t    *this                       = NULL;</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE]     = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame-&gt;local, out);</div><div class='del'>-</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-        local-&gt;call_cnt = call_cnt;</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;selfheal.refreshed_layout) {</div><div class='del'>-                dht_layout_unref (this, local-&gt;selfheal.refreshed_layout);</div><div class='del'>-                local-&gt;selfheal.refreshed_layout = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;selfheal.refreshed_layout = dht_layout_new (this,</div><div class='del'>-                                                           conf-&gt;subvolume_cnt);</div><div class='del'>-        if (!local-&gt;selfheal.refreshed_layout) {</div><div class='del'>-                gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "mem allocation for layout failed, path:%s gfid:%s",</div><div class='del'>-                        local-&gt;loc.path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int i = 0, ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame-&gt;local, out);</div><div class='add'>+</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    local-&gt;call_cnt = call_cnt;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;selfheal.refreshed_layout) {</div><div class='add'>+        dht_layout_unref(this, local-&gt;selfheal.refreshed_layout);</div><div class='add'>+        local-&gt;selfheal.refreshed_layout = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;selfheal.refreshed_layout = dht_layout_new(this,</div><div class='add'>+                                                      conf-&gt;subvolume_cnt);</div><div class='add'>+    if (!local-&gt;selfheal.refreshed_layout) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "mem allocation for layout failed, path:%s gfid:%s",</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr != NULL) {</div><div class='del'>-                dict_del (local-&gt;xattr, conf-&gt;xattr_name);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;xattr != NULL) {</div><div class='add'>+        dict_del(local-&gt;xattr, conf-&gt;xattr_name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (local-&gt;xattr_req == NULL) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='ctx'>         if (local-&gt;xattr_req == NULL) {</div><div class='del'>-                gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='del'>-                if (local-&gt;xattr_req == NULL) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY,</div><div class='del'>-                                "dict mem allocation failed, path:%s gfid:%s",</div><div class='del'>-                                local-&gt;loc.path, gfid);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "dict mem allocation failed, path:%s gfid:%s",</div><div class='add'>+                   local-&gt;loc.path, gfid);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get (local-&gt;xattr_req, conf-&gt;xattr_name) == 0) {</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req, conf-&gt;xattr_name,</div><div class='del'>-                                       4 * 4);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s: Failed to set dictionary value:key = %s",</div><div class='del'>-                                local-&gt;loc.path, conf-&gt;xattr_name);</div><div class='del'>-        }</div><div class='add'>+    if (dict_get(local-&gt;xattr_req, conf-&gt;xattr_name) == 0) {</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s: Failed to set dictionary value:key = %s",</div><div class='add'>+                   local-&gt;loc.path, conf-&gt;xattr_name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_refresh_layout_cbk,</div><div class='del'>-                                   conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_refresh_layout_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (local) {</div><div class='del'>-                local-&gt;refresh_layout_unlock (frame, this, -1, 1);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (local) {</div><div class='add'>+        local-&gt;refresh_layout_unlock(frame, this, -1, 1);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_selfheal_layout_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_selfheal_layout_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!local) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;refresh_layout_unlock = dht_selfheal_dir_finish;</div><div class='del'>-        local-&gt;refresh_layout_done = dht_refresh_layout_done;</div><div class='add'>+    local-&gt;refresh_layout_unlock = dht_selfheal_dir_finish;</div><div class='add'>+    local-&gt;refresh_layout_done = dht_refresh_layout_done;</div><div class='ctx'> </div><div class='del'>-        dht_refresh_layout (frame);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_refresh_layout(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_selfheal_dir_finish (frame, this, -1, 1);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_selfheal_dir_finish(frame, this, -1, 1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_should_heal_layout (call_frame_t *frame, dht_layout_t **heal,</div><div class='del'>-                        dht_layout_t **ondisk)</div><div class='add'>+dht_should_heal_layout(call_frame_t *frame, dht_layout_t **heal,</div><div class='add'>+                       dht_layout_t **ondisk)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t  fixit = _gf_true;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           ret   = -1, heal_missing_dirs = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if ((heal == NULL) || (*heal == NULL) || (ondisk == NULL)</div><div class='del'>-            || (*ondisk == NULL))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dht_layout_anomalies (frame-&gt;this, &amp;local-&gt;loc, *ondisk,</div><div class='del'>-                                    &amp;local-&gt;selfheal.hole_cnt,</div><div class='del'>-                                    &amp;local-&gt;selfheal.overlaps_cnt,</div><div class='del'>-                                    &amp;local-&gt;selfheal.missing_cnt,</div><div class='del'>-                                    &amp;local-&gt;selfheal.down,</div><div class='del'>-                                    &amp;local-&gt;selfheal.misc, NULL);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* Directories might've been created as part of this self-heal. We've to</div><div class='del'>-         * sync non-layout xattrs and set range 0-0 on new directories</div><div class='add'>+    gf_boolean_t fixit = _gf_true;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1, heal_missing_dirs = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if ((heal == NULL) || (*heal == NULL) || (ondisk == NULL) ||</div><div class='add'>+        (*ondisk == NULL))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dht_layout_anomalies(</div><div class='add'>+        frame-&gt;this, &amp;local-&gt;loc, *ondisk, &amp;local-&gt;selfheal.hole_cnt,</div><div class='add'>+        &amp;local-&gt;selfheal.overlaps_cnt, &amp;local-&gt;selfheal.missing_cnt,</div><div class='add'>+        &amp;local-&gt;selfheal.down, &amp;local-&gt;selfheal.misc, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Directories might've been created as part of this self-heal. We've to</div><div class='add'>+     * sync non-layout xattrs and set range 0-0 on new directories</div><div class='add'>+     */</div><div class='add'>+    heal_missing_dirs = local-&gt;selfheal.force_mkdir</div><div class='add'>+                            ? local-&gt;selfheal.force_mkdir</div><div class='add'>+                            : dht_layout_missing_dirs(*heal);</div><div class='add'>+</div><div class='add'>+    if ((local-&gt;selfheal.hole_cnt == 0) &amp;&amp;</div><div class='add'>+        (local-&gt;selfheal.overlaps_cnt == 0) &amp;&amp; heal_missing_dirs) {</div><div class='add'>+        dht_layout_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+        /* Just added a brick and need to set 0-0 range on this brick.</div><div class='add'>+         * But ondisk layout is well-formed. So, swap layouts "heal" and</div><div class='add'>+         * "ondisk". Now "ondisk" layout will be used for healing</div><div class='add'>+         * xattrs. If there are any non-participating subvols in</div><div class='add'>+         * "ondisk" layout, dht_selfheal_dir_xattr_persubvol will set</div><div class='add'>+         * 0-0 and non-layout xattrs. This way we won't end up in</div><div class='add'>+         * "corrupting" already set and well-formed "ondisk" layout.</div><div class='ctx'>          */</div><div class='del'>-        heal_missing_dirs = local-&gt;selfheal.force_mkdir</div><div class='del'>-                ? local-&gt;selfheal.force_mkdir : dht_layout_missing_dirs (*heal);</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;selfheal.hole_cnt == 0)</div><div class='del'>-            &amp;&amp; (local-&gt;selfheal.overlaps_cnt == 0) &amp;&amp; heal_missing_dirs) {</div><div class='del'>-                dht_layout_t *tmp = NULL;</div><div class='del'>-</div><div class='del'>-                /* Just added a brick and need to set 0-0 range on this brick.</div><div class='del'>-                 * But ondisk layout is well-formed. So, swap layouts "heal" and</div><div class='del'>-                 * "ondisk". Now "ondisk" layout will be used for healing</div><div class='del'>-                 * xattrs. If there are any non-participating subvols in</div><div class='del'>-                 * "ondisk" layout, dht_selfheal_dir_xattr_persubvol will set</div><div class='del'>-                 * 0-0 and non-layout xattrs. This way we won't end up in</div><div class='del'>-                 * "corrupting" already set and well-formed "ondisk" layout.</div><div class='del'>-                 */</div><div class='del'>-                tmp = *heal;</div><div class='del'>-                *heal = *ondisk;</div><div class='del'>-                *ondisk = tmp;</div><div class='del'>-</div><div class='del'>-                /* Current selfheal code, heals non-layout xattrs only after</div><div class='del'>-                 * an add-brick. In fact non-layout xattrs are considered as</div><div class='del'>-                 * secondary citizens which are healed only if layout xattrs</div><div class='del'>-                 * need to be healed. This is wrong, since for eg., quota can be</div><div class='del'>-                 * set when layout is well-formed, but a node is down. Also,</div><div class='del'>-                 * just for healing non-layout xattrs, we don't need locking.</div><div class='del'>-                 * This issue is _NOT FIXED_ by this patch.</div><div class='del'>-                 */</div><div class='del'>-        }</div><div class='add'>+        tmp = *heal;</div><div class='add'>+        *heal = *ondisk;</div><div class='add'>+        *ondisk = tmp;</div><div class='add'>+</div><div class='add'>+        /* Current selfheal code, heals non-layout xattrs only after</div><div class='add'>+         * an add-brick. In fact non-layout xattrs are considered as</div><div class='add'>+         * secondary citizens which are healed only if layout xattrs</div><div class='add'>+         * need to be healed. This is wrong, since for eg., quota can be</div><div class='add'>+         * set when layout is well-formed, but a node is down. Also,</div><div class='add'>+         * just for healing non-layout xattrs, we don't need locking.</div><div class='add'>+         * This issue is _NOT FIXED_ by this patch.</div><div class='add'>+         */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fixit = (local-&gt;selfheal.hole_cnt || local-&gt;selfheal.overlaps_cnt</div><div class='del'>-                 || heal_missing_dirs);</div><div class='add'>+    fixit = (local-&gt;selfheal.hole_cnt || local-&gt;selfheal.overlaps_cnt ||</div><div class='add'>+             heal_missing_dirs);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fixit;</div><div class='add'>+    return fixit;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_span (dht_layout_t *layout)</div><div class='add'>+dht_layout_span(dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int i = 0, count = 0;</div><div class='add'>+    int i = 0, count = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (layout-&gt;list[i].start != layout-&gt;list[i].stop)</div><div class='del'>-                        count++;</div><div class='del'>-        }</div><div class='add'>+        if (layout-&gt;list[i].start != layout-&gt;list[i].stop)</div><div class='add'>+            count++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_decommissioned_bricks_in_layout (xlator_t *this, dht_layout_t *layout)</div><div class='add'>+dht_decommissioned_bricks_in_layout(xlator_t *this, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf  = NULL;</div><div class='del'>-        int         count = 0, i = 0, j = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int count = 0, i = 0, j = 0;</div><div class='ctx'> </div><div class='del'>-        if ((this == NULL) || (layout == NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((this == NULL) || (layout == NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                for (j = 0; j &lt; conf-&gt;subvolume_cnt; j++) {</div><div class='del'>-                        if (conf-&gt;decommissioned_bricks[j] &amp;&amp;</div><div class='del'>-                            conf-&gt;decommissioned_bricks[j]</div><div class='del'>-                            == layout-&gt;list[i].xlator) {</div><div class='del'>-                                count++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        for (j = 0; j &lt; conf-&gt;subvolume_cnt; j++) {</div><div class='add'>+            if (conf-&gt;decommissioned_bricks[j] &amp;&amp;</div><div class='add'>+                conf-&gt;decommissioned_bricks[j] == layout-&gt;list[i].xlator) {</div><div class='add'>+                count++;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dht_distribution_type_t</div><div class='del'>-dht_distribution_type (xlator_t *this, dht_layout_t *layout)</div><div class='add'>+dht_distribution_type(xlator_t *this, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_distribution_type_t type        = GF_DHT_EQUAL_DISTRIBUTION;</div><div class='del'>-        int                     i           = 0;</div><div class='del'>-        uint32_t                start_range = 0, range = 0, diff = 0;</div><div class='add'>+    dht_distribution_type_t type = GF_DHT_EQUAL_DISTRIBUTION;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t start_range = 0, range = 0, diff = 0;</div><div class='ctx'> </div><div class='del'>-        if ((this == NULL) || (layout == NULL) || (layout-&gt;cnt &lt; 1)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((this == NULL) || (layout == NULL) || (layout-&gt;cnt &lt; 1)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (start_range == 0) {</div><div class='del'>-                        start_range = layout-&gt;list[i].stop</div><div class='del'>-                                - layout-&gt;list[i].start;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (start_range == 0) {</div><div class='add'>+            start_range = layout-&gt;list[i].stop - layout-&gt;list[i].start;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                range = layout-&gt;list[i].stop - layout-&gt;list[i].start;</div><div class='del'>-                diff = (range &gt;= start_range)</div><div class='del'>-                        ? range - start_range</div><div class='del'>-                        : start_range - range;</div><div class='add'>+        range = layout-&gt;list[i].stop - layout-&gt;list[i].start;</div><div class='add'>+        diff = (range &gt;= start_range) ? range - start_range</div><div class='add'>+                                      : start_range - range;</div><div class='ctx'> </div><div class='del'>-                if ((range != 0) &amp;&amp; (diff &gt; layout-&gt;cnt)) {</div><div class='del'>-                        type = GF_DHT_WEIGHTED_DISTRIBUTION;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if ((range != 0) &amp;&amp; (diff &gt; layout-&gt;cnt)) {</div><div class='add'>+            type = GF_DHT_WEIGHTED_DISTRIBUTION;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return type;</div><div class='add'>+    return type;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_should_fix_layout (call_frame_t *frame, dht_layout_t **inmem,</div><div class='del'>-                       dht_layout_t **ondisk)</div><div class='add'>+dht_should_fix_layout(call_frame_t *frame, dht_layout_t **inmem,</div><div class='add'>+                      dht_layout_t **ondisk)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t             fixit                 = _gf_true;</div><div class='del'>-</div><div class='del'>-        dht_local_t             *local                 = NULL;</div><div class='del'>-        int                      layout_span           = 0;</div><div class='del'>-        int                      decommissioned_bricks = 0;</div><div class='del'>-        int                      ret                   = 0;</div><div class='del'>-        dht_conf_t              *conf                  = NULL;</div><div class='del'>-        dht_distribution_type_t  inmem_dist_type       = 0;</div><div class='del'>-        dht_distribution_type_t  ondisk_dist_type      = 0;</div><div class='del'>-</div><div class='del'>-        conf = frame-&gt;this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if ((inmem == NULL) || (*inmem == NULL) || (ondisk == NULL)</div><div class='del'>-            || (*ondisk == NULL))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dht_layout_anomalies (frame-&gt;this, &amp;local-&gt;loc, *ondisk,</div><div class='del'>-                                    &amp;local-&gt;selfheal.hole_cnt,</div><div class='del'>-                                    &amp;local-&gt;selfheal.overlaps_cnt, NULL,</div><div class='del'>-                                    &amp;local-&gt;selfheal.down,</div><div class='del'>-                                    &amp;local-&gt;selfheal.misc, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                fixit = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;selfheal.down || local-&gt;selfheal.misc) {</div><div class='del'>-                fixit = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;selfheal.hole_cnt || local-&gt;selfheal.overlaps_cnt)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* If commit hashes are being updated, let it through */</div><div class='del'>-        if ((*inmem)-&gt;commit_hash != (*ondisk)-&gt;commit_hash)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        layout_span = dht_layout_span (*ondisk);</div><div class='del'>-</div><div class='del'>-        decommissioned_bricks</div><div class='del'>-                = dht_decommissioned_bricks_in_layout (frame-&gt;this,</div><div class='del'>-                                                       *ondisk);</div><div class='del'>-        inmem_dist_type = dht_distribution_type (frame-&gt;this, *inmem);</div><div class='del'>-        ondisk_dist_type = dht_distribution_type (frame-&gt;this, *ondisk);</div><div class='del'>-</div><div class='del'>-        if ((decommissioned_bricks == 0)</div><div class='del'>-            &amp;&amp; (layout_span == (conf-&gt;subvolume_cnt</div><div class='del'>-                                - conf-&gt;decommission_subvols_cnt))</div><div class='del'>-            &amp;&amp; (inmem_dist_type == ondisk_dist_type))</div><div class='del'>-                fixit = _gf_false;</div><div class='add'>+    gf_boolean_t fixit = _gf_true;</div><div class='add'>+</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int layout_span = 0;</div><div class='add'>+    int decommissioned_bricks = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_distribution_type_t inmem_dist_type = 0;</div><div class='add'>+    dht_distribution_type_t ondisk_dist_type = 0;</div><div class='add'>+</div><div class='add'>+    conf = frame-&gt;this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if ((inmem == NULL) || (*inmem == NULL) || (ondisk == NULL) ||</div><div class='add'>+        (*ondisk == NULL))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dht_layout_anomalies(</div><div class='add'>+        frame-&gt;this, &amp;local-&gt;loc, *ondisk, &amp;local-&gt;selfheal.hole_cnt,</div><div class='add'>+        &amp;local-&gt;selfheal.overlaps_cnt, NULL, &amp;local-&gt;selfheal.down,</div><div class='add'>+        &amp;local-&gt;selfheal.misc, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        fixit = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;selfheal.down || local-&gt;selfheal.misc) {</div><div class='add'>+        fixit = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;selfheal.hole_cnt || local-&gt;selfheal.overlaps_cnt)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* If commit hashes are being updated, let it through */</div><div class='add'>+    if ((*inmem)-&gt;commit_hash != (*ondisk)-&gt;commit_hash)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    layout_span = dht_layout_span(*ondisk);</div><div class='add'>+</div><div class='add'>+    decommissioned_bricks = dht_decommissioned_bricks_in_layout(frame-&gt;this,</div><div class='add'>+                                                                *ondisk);</div><div class='add'>+    inmem_dist_type = dht_distribution_type(frame-&gt;this, *inmem);</div><div class='add'>+    ondisk_dist_type = dht_distribution_type(frame-&gt;this, *ondisk);</div><div class='add'>+</div><div class='add'>+    if ((decommissioned_bricks == 0) &amp;&amp;</div><div class='add'>+        (layout_span ==</div><div class='add'>+         (conf-&gt;subvolume_cnt - conf-&gt;decommission_subvols_cnt)) &amp;&amp;</div><div class='add'>+        (inmem_dist_type == ondisk_dist_type))</div><div class='add'>+        fixit = _gf_false;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return fixit;</div><div class='add'>+    return fixit;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_layout_lock (call_frame_t *frame, dht_layout_t *layout,</div><div class='del'>-                          gf_boolean_t newdir,</div><div class='del'>-                          dht_selfheal_layout_t healer,</div><div class='del'>-                          dht_need_heal_t should_heal)</div><div class='add'>+dht_selfheal_layout_lock(call_frame_t *frame, dht_layout_t *layout,</div><div class='add'>+                         gf_boolean_t newdir, dht_selfheal_layout_t healer,</div><div class='add'>+                         dht_need_heal_t should_heal)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local    = NULL;</div><div class='del'>-        int            count    = 1, ret = -1, i = 0;</div><div class='del'>-        dht_lock_t   **lk_array = NULL;</div><div class='del'>-        dht_conf_t    *conf     = NULL;</div><div class='del'>-        dht_layout_t  *tmp      = NULL;</div><div class='del'>-        char           gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        conf = frame-&gt;this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local-&gt;selfheal.healer = healer;</div><div class='del'>-        local-&gt;selfheal.should_heal = should_heal;</div><div class='del'>-</div><div class='del'>-        tmp = local-&gt;selfheal.layout;</div><div class='del'>-        local-&gt;selfheal.layout = dht_layout_ref (frame-&gt;this, layout);</div><div class='del'>-        dht_layout_unref (frame-&gt;this, tmp);</div><div class='del'>-</div><div class='del'>-        if (!newdir) {</div><div class='del'>-                count = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-                lk_array = GF_CALLOC (count, sizeof (*lk_array),</div><div class='del'>-                                      gf_common_mt_char);</div><div class='del'>-                if (lk_array == NULL) {</div><div class='del'>-                        gf_uuid_unparse (local-&gt;stbuf.ia_gfid, gfid);</div><div class='del'>-                        gf_msg ("dht", GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY, "mem allocation failed for "</div><div class='del'>-                                "lk_array, gfid:%s path: %s", gfid,</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int count = 1, ret = -1, i = 0;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *tmp = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; count; i++) {</div><div class='del'>-                        lk_array[i] = dht_lock_new (frame-&gt;this,</div><div class='del'>-                                                    conf-&gt;subvolumes[i],</div><div class='del'>-                                                    &amp;local-&gt;loc, F_WRLCK,</div><div class='del'>-                                                    DHT_LAYOUT_HEAL_DOMAIN,</div><div class='del'>-                                                    NULL,</div><div class='del'>-                                                    FAIL_ON_ANY_ERROR);</div><div class='del'>-                        if (lk_array[i] == NULL) {</div><div class='del'>-                                gf_uuid_unparse (local-&gt;stbuf.ia_gfid, gfid);</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                        DHT_MSG_NO_MEMORY, "mem allocation "</div><div class='del'>-                                        "failed for lk_array, gfid:%s path:%s",</div><div class='del'>-                                        gfid, local-&gt;loc.path);</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                count = 1;</div><div class='del'>-                lk_array = GF_CALLOC (count, sizeof (*lk_array),</div><div class='del'>-                                      gf_common_mt_char);</div><div class='del'>-                if (lk_array == NULL) {</div><div class='del'>-                        gf_uuid_unparse (local-&gt;stbuf.ia_gfid, gfid);</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY, "mem allocation failed for "</div><div class='del'>-                                "lk_array, gfid:%s path:%s",</div><div class='del'>-                                gfid, local-&gt;loc.path);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='ctx'> </div><div class='del'>-                lk_array[0] = dht_lock_new (frame-&gt;this, local-&gt;hashed_subvol,</div><div class='del'>-                                            &amp;local-&gt;loc, F_WRLCK,</div><div class='del'>-                                            DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='del'>-                                            FAIL_ON_ANY_ERROR);</div><div class='del'>-                if (lk_array[0] == NULL) {</div><div class='del'>-                        gf_uuid_unparse (local-&gt;stbuf.ia_gfid, gfid);</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY, "mem allocation failed for "</div><div class='del'>-                                "lk_array, gfid:%s path:%s", gfid,</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lock[0].layout.my_layout.locks = lk_array;</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.lk_count = count;</div><div class='add'>+    conf = frame-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = dht_blocking_inodelk (frame, lk_array, count,</div><div class='del'>-                                    dht_selfheal_layout_lock_cbk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='del'>-                goto err;</div><div class='add'>+    local-&gt;selfheal.healer = healer;</div><div class='add'>+    local-&gt;selfheal.should_heal = should_heal;</div><div class='add'>+</div><div class='add'>+    tmp = local-&gt;selfheal.layout;</div><div class='add'>+    local-&gt;selfheal.layout = dht_layout_ref(frame-&gt;this, layout);</div><div class='add'>+    dht_layout_unref(frame-&gt;this, tmp);</div><div class='add'>+</div><div class='add'>+    if (!newdir) {</div><div class='add'>+        count = conf-&gt;subvolume_cnt;</div><div class='add'>+</div><div class='add'>+        lk_array = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_char);</div><div class='add'>+        if (lk_array == NULL) {</div><div class='add'>+            gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='add'>+            gf_msg("dht", GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "mem allocation failed for "</div><div class='add'>+                   "lk_array, gfid:%s path: %s",</div><div class='add'>+                   gfid, local-&gt;loc.path);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        for (i = 0; i &lt; count; i++) {</div><div class='add'>+            lk_array[i] = dht_lock_new(</div><div class='add'>+                frame-&gt;this, conf-&gt;subvolumes[i], &amp;local-&gt;loc, F_WRLCK,</div><div class='add'>+                DHT_LAYOUT_HEAL_DOMAIN, NULL, FAIL_ON_ANY_ERROR);</div><div class='add'>+            if (lk_array[i] == NULL) {</div><div class='add'>+                gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                       "mem allocation "</div><div class='add'>+                       "failed for lk_array, gfid:%s path:%s",</div><div class='add'>+                       gfid, local-&gt;loc.path);</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        count = 1;</div><div class='add'>+        lk_array = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_char);</div><div class='add'>+        if (lk_array == NULL) {</div><div class='add'>+            gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "mem allocation failed for "</div><div class='add'>+                   "lk_array, gfid:%s path:%s",</div><div class='add'>+                   gfid, local-&gt;loc.path);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        lk_array[0] = dht_lock_new(frame-&gt;this, local-&gt;hashed_subvol,</div><div class='add'>+                                   &amp;local-&gt;loc, F_WRLCK, DHT_LAYOUT_HEAL_DOMAIN,</div><div class='add'>+                                   NULL, FAIL_ON_ANY_ERROR);</div><div class='add'>+        if (lk_array[0] == NULL) {</div><div class='add'>+            gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "mem allocation failed for "</div><div class='add'>+                   "lk_array, gfid:%s path:%s",</div><div class='add'>+                   gfid, local-&gt;loc.path);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.locks = lk_array;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.lk_count = count;</div><div class='add'>+</div><div class='add'>+    ret = dht_blocking_inodelk(frame, lk_array, count,</div><div class='add'>+                               dht_selfheal_layout_lock_cbk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (lk_array != NULL) {</div><div class='del'>-                dht_lock_array_free (lk_array, count);</div><div class='del'>-                GF_FREE (lk_array);</div><div class='del'>-        }</div><div class='add'>+    if (lk_array != NULL) {</div><div class='add'>+        dht_lock_array_free(lk_array, count);</div><div class='add'>+        GF_FREE(lk_array);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                            int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+dht_selfheal_dir_xattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local                     = NULL;</div><div class='del'>-        xlator_t     *subvol                    = NULL;</div><div class='del'>-        struct iatt  *stbuf                     = NULL;</div><div class='del'>-        int           i                         = 0;</div><div class='del'>-        int           ret                       = 0;</div><div class='del'>-        dht_layout_t *layout                    = NULL;</div><div class='del'>-        int           err                       = 0;</div><div class='del'>-        int           this_call_cnt             = 0;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE]    = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;selfheal.layout;</div><div class='del'>-        subvol = cookie;</div><div class='del'>-</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                err = 0;</div><div class='del'>-        } else {</div><div class='del'>-                gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                        "layout setxattr failed on %s, path:%s gfid:%s",</div><div class='del'>-                        subvol-&gt;name, local-&gt;loc.path, gfid);</div><div class='del'>-                err = op_errno;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY, (void **) &amp;stbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_uuid_unparse (local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "key = %s not present in dict"</div><div class='del'>-                              ", path:%s gfid:%s", DHT_IATT_IN_XDATA_KEY,</div><div class='del'>-                              local-&gt;loc.path, gfid);</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    struct iatt *stbuf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int err = 0;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;selfheal.layout;</div><div class='add'>+    subvol = cookie;</div><div class='add'>+</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        err = 0;</div><div class='add'>+    } else {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+               DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+               "layout setxattr failed on %s, path:%s gfid:%s", subvol-&gt;name,</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+        err = op_errno;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;stbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "key = %s not present in dict"</div><div class='add'>+                     ", path:%s gfid:%s",</div><div class='add'>+                     DHT_IATT_IN_XDATA_KEY, local-&gt;loc.path, gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].xlator == subvol) {</div><div class='del'>-                        layout-&gt;list[i].err = err;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].xlator == subvol) {</div><div class='add'>+            layout-&gt;list[i].err = err;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_selfheal_dir_finish (frame, this, 0, 1);</div><div class='del'>-        }</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_selfheal_dir_finish(frame, this, 0, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Code is required to set user xattr to local-&gt;xattr</div><div class='del'>-*/</div><div class='add'>+ */</div><div class='ctx'> int</div><div class='del'>-dht_set_user_xattr (dict_t *dict, char *k, data_t *v, void *data)</div><div class='add'>+dht_set_user_xattr(dict_t *dict, char *k, data_t *v, void *data)</div><div class='ctx'> {</div><div class='del'>-        dict_t          *set_xattr          = data;</div><div class='del'>-        int              ret                = -1;</div><div class='add'>+    dict_t *set_xattr = data;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set (set_xattr, k, v);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = dict_set(set_xattr, k, v);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_xattr_persubvol (call_frame_t *frame, loc_t *loc,</div><div class='del'>-                                  dht_layout_t *layout, int i,</div><div class='del'>-                                  xlator_t *req_subvol)</div><div class='add'>+dht_selfheal_dir_xattr_persubvol(call_frame_t *frame, loc_t *loc,</div><div class='add'>+                                 dht_layout_t *layout, int i,</div><div class='add'>+                                 xlator_t *req_subvol)</div><div class='ctx'> {</div><div class='del'>-        xlator_t          *subvol = NULL;</div><div class='del'>-        dict_t            *xattr = NULL;</div><div class='del'>-        dict_t            *xdata = NULL;</div><div class='del'>-        int                ret = 0;</div><div class='del'>-        xlator_t          *this = NULL;</div><div class='del'>-        int32_t           *disk_layout = NULL;</div><div class='del'>-        dht_local_t       *local = NULL;</div><div class='del'>-        dht_conf_t        *conf = NULL;</div><div class='del'>-        data_t            *data = NULL;</div><div class='del'>-        char              gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (req_subvol)</div><div class='del'>-                subvol = req_subvol;</div><div class='del'>-        else</div><div class='del'>-                subvol = layout-&gt;list[i].xlator;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("", this, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, layout, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, subvol, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_str (xdata, GLUSTERFS_INTERNAL_FOP_KEY, "yes");</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Failed to set dictionary value: key = %s,"</div><div class='del'>-                        " gfid = %s", loc-&gt;path,</div><div class='del'>-                        GLUSTERFS_INTERNAL_FOP_KEY, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (xdata, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "%s: Failed to set dictionary value: key = %s,"</div><div class='del'>-                        " gfid = %s", loc-&gt;path,</div><div class='del'>-                        DHT_IATT_IN_XDATA_KEY, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(loc-&gt;inode-&gt;gfid, gfid);</div><div class='del'>-</div><div class='del'>-        ret = dht_disk_layout_extract (this, layout, i, &amp;disk_layout);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                        "Directory self heal xattr failed:"</div><div class='del'>-                        " %s: (subvol %s) Failed to extract disk layout,"</div><div class='del'>-                        " gfid = %s", loc-&gt;path, subvol-&gt;name, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_bin (xattr, conf-&gt;xattr_name, disk_layout, 4 * 4);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                        "Directory self heal xattr failed:"</div><div class='del'>-                        "%s: (subvol %s) Failed to set xattr dictionary,"</div><div class='del'>-                        " gfid = %s", loc-&gt;path, subvol-&gt;name, gfid);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        disk_layout = NULL;</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "setting hash range %u - %u (type %d) on subvolume %s"</div><div class='del'>-                      " for %s", layout-&gt;list[i].start, layout-&gt;list[i].stop,</div><div class='del'>-                      layout-&gt;type, subvol-&gt;name, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;xattr) {</div><div class='del'>-                data = dict_get (local-&gt;xattr, QUOTA_LIMIT_KEY);</div><div class='del'>-                if (data) {</div><div class='del'>-                        ret = dict_add (xattr, QUOTA_LIMIT_KEY, data);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "%s: Failed to set dictionary value:"</div><div class='del'>-                                        " key = %s",</div><div class='del'>-                                        loc-&gt;path, QUOTA_LIMIT_KEY);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                data = dict_get (local-&gt;xattr, QUOTA_LIMIT_OBJECTS_KEY);</div><div class='del'>-                if (data) {</div><div class='del'>-                        ret = dict_add (xattr, QUOTA_LIMIT_OBJECTS_KEY, data);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "%s: Failed to set dictionary value:"</div><div class='del'>-                                        " key = %s",</div><div class='del'>-                                        loc-&gt;path, QUOTA_LIMIT_OBJECTS_KEY);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!gf_uuid_is_null (local-&gt;gfid))</div><div class='del'>-                gf_uuid_copy (loc-&gt;gfid, local-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_selfheal_dir_xattr_cbk,</div><div class='del'>-                    (void *) subvol, subvol, subvol-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, xattr, 0, xdata);</div><div class='del'>-</div><div class='del'>-        dict_unref (xattr);</div><div class='del'>-        dict_unref (xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int32_t *disk_layout = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (req_subvol)</div><div class='add'>+        subvol = req_subvol;</div><div class='add'>+    else</div><div class='add'>+        subvol = layout-&gt;list[i].xlator;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, layout, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, subvol, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_str(xdata, GLUSTERFS_INTERNAL_FOP_KEY, "yes");</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Failed to set dictionary value: key = %s,"</div><div class='add'>+               " gfid = %s",</div><div class='add'>+               loc-&gt;path, GLUSTERFS_INTERNAL_FOP_KEY, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int8(xdata, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "%s: Failed to set dictionary value: key = %s,"</div><div class='add'>+               " gfid = %s",</div><div class='add'>+               loc-&gt;path, DHT_IATT_IN_XDATA_KEY, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(loc-&gt;inode-&gt;gfid, gfid);</div><div class='add'>+</div><div class='add'>+    ret = dht_disk_layout_extract(this, layout, i, &amp;disk_layout);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+               "Directory self heal xattr failed:"</div><div class='add'>+               " %s: (subvol %s) Failed to extract disk layout,"</div><div class='add'>+               " gfid = %s",</div><div class='add'>+               loc-&gt;path, subvol-&gt;name, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_bin(xattr, conf-&gt;xattr_name, disk_layout, 4 * 4);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+               "Directory self heal xattr failed:"</div><div class='add'>+               "%s: (subvol %s) Failed to set xattr dictionary,"</div><div class='add'>+               " gfid = %s",</div><div class='add'>+               loc-&gt;path, subvol-&gt;name, gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    disk_layout = NULL;</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                 "setting hash range %u - %u (type %d) on subvolume %s"</div><div class='add'>+                 " for %s",</div><div class='add'>+                 layout-&gt;list[i].start, layout-&gt;list[i].stop, layout-&gt;type,</div><div class='add'>+                 subvol-&gt;name, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;xattr) {</div><div class='add'>+        data = dict_get(local-&gt;xattr, QUOTA_LIMIT_KEY);</div><div class='add'>+        if (data) {</div><div class='add'>+            ret = dict_add(xattr, QUOTA_LIMIT_KEY, data);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "%s: Failed to set dictionary value:"</div><div class='add'>+                       " key = %s",</div><div class='add'>+                       loc-&gt;path, QUOTA_LIMIT_KEY);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        data = dict_get(local-&gt;xattr, QUOTA_LIMIT_OBJECTS_KEY);</div><div class='add'>+        if (data) {</div><div class='add'>+            ret = dict_add(xattr, QUOTA_LIMIT_OBJECTS_KEY, data);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "%s: Failed to set dictionary value:"</div><div class='add'>+                       " key = %s",</div><div class='add'>+                       loc-&gt;path, QUOTA_LIMIT_OBJECTS_KEY);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!gf_uuid_is_null(local-&gt;gfid))</div><div class='add'>+        gf_uuid_copy(loc-&gt;gfid, local-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_selfheal_dir_xattr_cbk, (void *)subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;setxattr, loc, xattr, 0, xdata);</div><div class='add'>+</div><div class='add'>+    dict_unref(xattr);</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (disk_layout);</div><div class='add'>+    GF_FREE(disk_layout);</div><div class='ctx'> </div><div class='del'>-        dht_selfheal_dir_xattr_cbk (frame, (void *) subvol, frame-&gt;this,</div><div class='del'>-                                    -1, ENOMEM, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_selfheal_dir_xattr_cbk(frame, (void *)subvol, frame-&gt;this, -1, ENOMEM,</div><div class='add'>+                               NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fix_dir_xattr (call_frame_t *frame, loc_t *loc, dht_layout_t *layout)</div><div class='add'>+dht_fix_dir_xattr(call_frame_t *frame, loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        int          i = 0;</div><div class='del'>-        int          count = 0;</div><div class='del'>-        xlator_t    *this = NULL;</div><div class='del'>-        dht_conf_t  *conf = NULL;</div><div class='del'>-        dht_layout_t *dummy = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "%s: Writing the new range for all subvolumes",</div><div class='del'>-                      loc-&gt;path);</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = count = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-        if (gf_log_get_loglevel () &gt;= GF_LOG_DEBUG)</div><div class='del'>-                dht_log_new_layout_for_dir_selfheal (this, loc, layout);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                dht_selfheal_dir_xattr_persubvol (frame, loc, layout, i, NULL);</div><div class='del'>-</div><div class='del'>-                if (--count == 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        /* if we are here, subvolcount &gt; layout_count. subvols-per-directory</div><div class='del'>-         * option might be set here. We need to clear out layout from the</div><div class='del'>-         * non-participating subvolumes, else it will result in overlaps */</div><div class='del'>-        dummy = dht_layout_new (this, 1);</div><div class='del'>-        if (!dummy)</div><div class='del'>-                goto out;</div><div class='del'>-        dummy-&gt;commit_hash = layout-&gt;commit_hash;</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (_gf_false ==</div><div class='del'>-                    dht_is_subvol_in_layout (layout, conf-&gt;subvolumes[i])) {</div><div class='del'>-                        dht_selfheal_dir_xattr_persubvol (frame, loc, dummy, 0,</div><div class='del'>-                                                          conf-&gt;subvolumes[i]);</div><div class='del'>-                        if (--count == 0)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dht_layout_unref (this, dummy);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *dummy = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "%s: Writing the new range for all subvolumes",</div><div class='add'>+                 loc-&gt;path);</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = count = conf-&gt;subvolume_cnt;</div><div class='add'>+</div><div class='add'>+    if (gf_log_get_loglevel() &gt;= GF_LOG_DEBUG)</div><div class='add'>+        dht_log_new_layout_for_dir_selfheal(this, loc, layout);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        dht_selfheal_dir_xattr_persubvol(frame, loc, layout, i, NULL);</div><div class='add'>+</div><div class='add'>+        if (--count == 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    /* if we are here, subvolcount &gt; layout_count. subvols-per-directory</div><div class='add'>+     * option might be set here. We need to clear out layout from the</div><div class='add'>+     * non-participating subvolumes, else it will result in overlaps */</div><div class='add'>+    dummy = dht_layout_new(this, 1);</div><div class='add'>+    if (!dummy)</div><div class='add'>+        goto out;</div><div class='add'>+    dummy-&gt;commit_hash = layout-&gt;commit_hash;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (_gf_false == dht_is_subvol_in_layout(layout, conf-&gt;subvolumes[i])) {</div><div class='add'>+            dht_selfheal_dir_xattr_persubvol(frame, loc, dummy, 0,</div><div class='add'>+                                             conf-&gt;subvolumes[i]);</div><div class='add'>+            if (--count == 0)</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_layout_unref(this, dummy);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_xattr (call_frame_t *frame, loc_t *loc, dht_layout_t *layout)</div><div class='add'>+dht_selfheal_dir_xattr(call_frame_t *frame, loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        int          missing_xattr = 0;</div><div class='del'>-        int          i = 0;</div><div class='del'>-        xlator_t    *this = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        dht_layout_t *dummy = NULL;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE] = {0,};</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err != -1 || !layout-&gt;list[i].stop) {</div><div class='del'>-                        /* err != -1 would mean xattr present on the directory</div><div class='del'>-                         * or the directory is non existent.</div><div class='del'>-                         * !layout-&gt;list[i].stop would mean layout absent</div><div class='del'>-                         */</div><div class='del'>-</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                missing_xattr++;</div><div class='del'>-        }</div><div class='del'>-        /* Also account for subvolumes with no-layout. Used for zero'ing out</div><div class='del'>-         * the layouts and for setting quota key's if present */</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (_gf_false ==</div><div class='del'>-                    dht_is_subvol_in_layout (layout, conf-&gt;subvolumes[i])) {</div><div class='del'>-                        missing_xattr++;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "%d subvolumes missing xattr for %s",</div><div class='del'>-                      missing_xattr, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-        if (missing_xattr == 0) {</div><div class='del'>-                dht_selfheal_dir_finish (frame, this, 0, 1);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = missing_xattr;</div><div class='del'>-</div><div class='del'>-        if (gf_log_get_loglevel () &gt;= GF_LOG_DEBUG)</div><div class='del'>-                dht_log_new_layout_for_dir_selfheal (this, loc, layout);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err != -1 || !layout-&gt;list[i].stop)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                dht_selfheal_dir_xattr_persubvol (frame, loc, layout, i, NULL);</div><div class='del'>-</div><div class='del'>-                if (--missing_xattr == 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-        dummy = dht_layout_new (this, 1);</div><div class='del'>-        if (!dummy) {</div><div class='del'>-                gf_uuid_unparse (loc-&gt;gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate dummy layout, path:%s gfid:%s",</div><div class='del'>-                        loc-&gt;path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt &amp;&amp; missing_xattr; i++) {</div><div class='del'>-                if (_gf_false ==</div><div class='del'>-                    dht_is_subvol_in_layout (layout, conf-&gt;subvolumes[i])) {</div><div class='del'>-                        dht_selfheal_dir_xattr_persubvol (frame, loc, dummy, 0,</div><div class='del'>-                                                          conf-&gt;subvolumes[i]);</div><div class='del'>-                        missing_xattr--;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dht_layout_unref (this, dummy);</div><div class='del'>-out:</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int missing_xattr = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *dummy = NULL;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err != -1 || !layout-&gt;list[i].stop) {</div><div class='add'>+            /* err != -1 would mean xattr present on the directory</div><div class='add'>+             * or the directory is non existent.</div><div class='add'>+             * !layout-&gt;list[i].stop would mean layout absent</div><div class='add'>+             */</div><div class='add'>+</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        missing_xattr++;</div><div class='add'>+    }</div><div class='add'>+    /* Also account for subvolumes with no-layout. Used for zero'ing out</div><div class='add'>+     * the layouts and for setting quota key's if present */</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (_gf_false == dht_is_subvol_in_layout(layout, conf-&gt;subvolumes[i])) {</div><div class='add'>+            missing_xattr++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "%d subvolumes missing xattr for %s",</div><div class='add'>+                 missing_xattr, loc-&gt;path);</div><div class='add'>+</div><div class='add'>+    if (missing_xattr == 0) {</div><div class='add'>+        dht_selfheal_dir_finish(frame, this, 0, 1);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;call_cnt = missing_xattr;</div><div class='add'>+</div><div class='add'>+    if (gf_log_get_loglevel() &gt;= GF_LOG_DEBUG)</div><div class='add'>+        dht_log_new_layout_for_dir_selfheal(this, loc, layout);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err != -1 || !layout-&gt;list[i].stop)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        dht_selfheal_dir_xattr_persubvol(frame, loc, layout, i, NULL);</div><div class='add'>+</div><div class='add'>+        if (--missing_xattr == 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    dummy = dht_layout_new(this, 1);</div><div class='add'>+    if (!dummy) {</div><div class='add'>+        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate dummy layout, path:%s gfid:%s", loc-&gt;path,</div><div class='add'>+               gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt &amp;&amp; missing_xattr; i++) {</div><div class='add'>+        if (_gf_false == dht_is_subvol_in_layout(layout, conf-&gt;subvolumes[i])) {</div><div class='add'>+            dht_selfheal_dir_xattr_persubvol(frame, loc, dummy, 0,</div><div class='add'>+                                             conf-&gt;subvolumes[i]);</div><div class='add'>+            missing_xattr--;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_layout_unref(this, dummy);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-dht_is_subvol_part_of_layout (dht_layout_t *layout, xlator_t *xlator)</div><div class='add'>+dht_is_subvol_part_of_layout(dht_layout_t *layout, xlator_t *xlator)</div><div class='ctx'> {</div><div class='del'>-        int               i = 0;</div><div class='del'>-        gf_boolean_t    ret = _gf_false;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (!strcmp (layout-&gt;list[i].xlator-&gt;name, xlator-&gt;name)) {</div><div class='del'>-                        ret = _gf_true;</div><div class='del'>-                        break;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (!strcmp(layout-&gt;list[i].xlator-&gt;name, xlator-&gt;name)) {</div><div class='add'>+            ret = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_layout_index_from_conf (dht_layout_t *layout, xlator_t *xlator)</div><div class='add'>+dht_layout_index_from_conf(dht_layout_t *layout, xlator_t *xlator)</div><div class='ctx'> {</div><div class='del'>-        int i = -1;</div><div class='del'>-        int j = 0;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int j = 0;</div><div class='ctx'> </div><div class='del'>-        for (j = 0; j &lt; layout-&gt;cnt; j++) {</div><div class='del'>-                if (!strcmp (layout-&gt;list[j].xlator-&gt;name, xlator-&gt;name)) {</div><div class='del'>-                        i = j;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (j = 0; j &lt; layout-&gt;cnt; j++) {</div><div class='add'>+        if (!strcmp(layout-&gt;list[j].xlator-&gt;name, xlator-&gt;name)) {</div><div class='add'>+            i = j;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return i;</div><div class='add'>+    return i;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                              int op_ret, int op_errno, struct iatt *statpre,</div><div class='del'>-                              struct iatt *statpost, dict_t *xdata)</div><div class='add'>+dht_selfheal_dir_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int op_ret, int op_errno, struct iatt *statpre,</div><div class='add'>+                             struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local = NULL;</div><div class='del'>-        dht_layout_t  *layout = NULL;</div><div class='del'>-        int            this_call_cnt = 0, ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int this_call_cnt = 0, ret = -1;</div><div class='ctx'> </div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;selfheal.layout;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;selfheal.layout;</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if (!local-&gt;heal_layout) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "Skip heal layout for %s gfid = %s ",</div><div class='del'>-                                      local-&gt;loc.path, uuid_utoa(local-&gt;gfid));</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (!local-&gt;heal_layout) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "Skip heal layout for %s gfid = %s ",</div><div class='add'>+                         local-&gt;loc.path, uuid_utoa(local-&gt;gfid));</div><div class='ctx'> </div><div class='del'>-                        dht_selfheal_dir_finish (frame, this, 0, 1);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                ret = dht_selfheal_layout_lock (frame, layout, _gf_false,</div><div class='del'>-                                                dht_selfheal_dir_xattr,</div><div class='del'>-                                                dht_should_heal_layout);</div><div class='add'>+            dht_selfheal_dir_finish(frame, this, 0, 1);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        ret = dht_selfheal_layout_lock(frame, layout, _gf_false,</div><div class='add'>+                                       dht_selfheal_dir_xattr,</div><div class='add'>+                                       dht_should_heal_layout);</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        dht_selfheal_dir_finish (frame, this, -1, 1);</div><div class='del'>-                }</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            dht_selfheal_dir_finish(frame, this, -1, 1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_setattr (call_frame_t *frame, loc_t *loc, struct iatt *stbuf,</div><div class='del'>-                          int32_t valid, dht_layout_t *layout)</div><div class='add'>+dht_selfheal_dir_setattr(call_frame_t *frame, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+                         int32_t valid, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int           missing_attr = 0;</div><div class='del'>-        int           i     = 0, ret = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *this = NULL;</div><div class='del'>-        int           cnt  = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='add'>+    int missing_attr = 0;</div><div class='add'>+    int i = 0, ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err == -1)</div><div class='add'>+            missing_attr++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (missing_attr == 0) {</div><div class='add'>+        if (!local-&gt;heal_layout) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "Skip heal layout for %s gfid = %s ",</div><div class='add'>+                         loc-&gt;path, uuid_utoa(loc-&gt;gfid));</div><div class='add'>+            dht_selfheal_dir_finish(frame, this, 0, 1);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+        ret = dht_selfheal_layout_lock(frame, layout, _gf_false,</div><div class='add'>+                                       dht_selfheal_dir_xattr,</div><div class='add'>+                                       dht_should_heal_layout);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err == -1)</div><div class='del'>-                        missing_attr++;</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            dht_selfheal_dir_finish(frame, this, -1, 1);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (missing_attr == 0) {</div><div class='del'>-                if (!local-&gt;heal_layout) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "Skip heal layout for %s gfid = %s ",</div><div class='del'>-                                      loc-&gt;path, uuid_utoa(loc-&gt;gfid));</div><div class='del'>-                        dht_selfheal_dir_finish (frame, this, 0, 1);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                ret = dht_selfheal_layout_lock (frame, layout, _gf_false,</div><div class='del'>-                                                dht_selfheal_dir_xattr,</div><div class='del'>-                                                dht_should_heal_layout);</div><div class='del'>-</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        dht_selfheal_dir_finish (frame, this, -1, 1);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = missing_attr;</div><div class='del'>-        cnt = layout-&gt;cnt;</div><div class='add'>+    local-&gt;call_cnt = missing_attr;</div><div class='add'>+    cnt = layout-&gt;cnt;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err == -1) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "%s: setattr on subvol %s, gfid = %s",</div><div class='del'>-                                      loc-&gt;path, layout-&gt;list[i].xlator-&gt;name,</div><div class='del'>-                                      uuid_utoa(loc-&gt;gfid));</div><div class='add'>+    for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err == -1) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "%s: setattr on subvol %s, gfid = %s",</div><div class='add'>+                         loc-&gt;path, layout-&gt;list[i].xlator-&gt;name,</div><div class='add'>+                         uuid_utoa(loc-&gt;gfid));</div><div class='ctx'> </div><div class='del'>-                        STACK_WIND (frame, dht_selfheal_dir_setattr_cbk,</div><div class='del'>-                                    layout-&gt;list[i].xlator,</div><div class='del'>-                                    layout-&gt;list[i].xlator-&gt;fops-&gt;setattr,</div><div class='del'>-                                    loc, stbuf, valid, NULL);</div><div class='del'>-                }</div><div class='add'>+            STACK_WIND(</div><div class='add'>+                frame, dht_selfheal_dir_setattr_cbk, layout-&gt;list[i].xlator,</div><div class='add'>+                layout-&gt;list[i].xlator-&gt;fops-&gt;setattr, loc, stbuf, valid, NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                            int op_ret, int op_errno,</div><div class='del'>-                            inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                            struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                            dict_t *xdata)</div><div class='add'>+dht_selfheal_dir_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                           struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                           struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local = NULL;</div><div class='del'>-        dht_layout_t  *layout = NULL;</div><div class='del'>-        xlator_t      *prev = NULL;</div><div class='del'>-        xlator_t      *subvol = NULL;</div><div class='del'>-        int            i = 0, ret = -1;</div><div class='del'>-        int            this_call_cnt = 0;</div><div class='del'>-        char           gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;selfheal.layout;</div><div class='del'>-        prev   = cookie;</div><div class='del'>-        subvol = prev;</div><div class='del'>-</div><div class='del'>-        if ((op_ret == 0) || ((op_ret == -1) &amp;&amp; (op_errno == EEXIST))) {</div><div class='del'>-                for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                        if (layout-&gt;list[i].xlator == subvol) {</div><div class='del'>-                                layout-&gt;list[i].err = -1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int i = 0, ret = -1;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;selfheal.layout;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    subvol = prev;</div><div class='add'>+</div><div class='add'>+    if ((op_ret == 0) || ((op_ret == -1) &amp;&amp; (op_errno == EEXIST))) {</div><div class='add'>+        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+            if (layout-&gt;list[i].xlator == subvol) {</div><div class='add'>+                layout-&gt;list[i].err = -1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, ((op_errno == EEXIST) ? GF_LOG_DEBUG :</div><div class='del'>-                                     GF_LOG_WARNING),</div><div class='del'>-                        op_errno, DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                        "Directory selfheal failed: path = %s, gfid = %s",</div><div class='del'>-                        local-&gt;loc.path, gfid );</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;preparent, preparent);</div><div class='del'>-        dht_iatt_merge (this, &amp;local-&gt;postparent, postparent);</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (op_ret) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name,</div><div class='add'>+               ((op_errno == EEXIST) ? GF_LOG_DEBUG : GF_LOG_WARNING), op_errno,</div><div class='add'>+               DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+               "Directory selfheal failed: path = %s, gfid = %s",</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;preparent, preparent);</div><div class='add'>+    dht_iatt_merge(this, &amp;local-&gt;postparent, postparent);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_selfheal_dir_finish (frame, this, ret, 0);</div><div class='del'>-                dht_selfheal_dir_setattr (frame, &amp;local-&gt;loc, &amp;local-&gt;stbuf, 0xffffff, layout);</div><div class='del'>-        }</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_selfheal_dir_finish(frame, this, ret, 0);</div><div class='add'>+        dht_selfheal_dir_setattr(frame, &amp;local-&gt;loc, &amp;local-&gt;stbuf, 0xffffff,</div><div class='add'>+                                 layout);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_selfheal_dir_mkdir_setacl (dict_t *xattr, dict_t *dict)</div><div class='add'>+dht_selfheal_dir_mkdir_setacl(dict_t *xattr, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        data_t          *acl_default = NULL;</div><div class='del'>-        data_t          *acl_access = NULL;</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (xattr);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        acl_default = dict_get (xattr, POSIX_ACL_DEFAULT_XATTR);</div><div class='del'>-</div><div class='del'>-        if (!acl_default) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "ACL_DEFAULT xattr not present");</div><div class='del'>-                goto cont;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set (dict, POSIX_ACL_DEFAULT_XATTR, acl_default);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value.key = %s",</div><div class='del'>-                        POSIX_ACL_DEFAULT_XATTR);</div><div class='add'>+    data_t *acl_default = NULL;</div><div class='add'>+    data_t *acl_access = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(xattr);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    acl_default = dict_get(xattr, POSIX_ACL_DEFAULT_XATTR);</div><div class='add'>+</div><div class='add'>+    if (!acl_default) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "ACL_DEFAULT xattr not present");</div><div class='add'>+        goto cont;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(dict, POSIX_ACL_DEFAULT_XATTR, acl_default);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value.key = %s",</div><div class='add'>+               POSIX_ACL_DEFAULT_XATTR);</div><div class='ctx'> cont:</div><div class='del'>-        acl_access = dict_get (xattr, POSIX_ACL_ACCESS_XATTR);</div><div class='del'>-        if (!acl_access) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "ACL_ACCESS xattr not present");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set (dict, POSIX_ACL_ACCESS_XATTR, acl_access);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value.key = %s",</div><div class='del'>-                        POSIX_ACL_ACCESS_XATTR);</div><div class='add'>+    acl_access = dict_get(xattr, POSIX_ACL_ACCESS_XATTR);</div><div class='add'>+    if (!acl_access) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "ACL_ACCESS xattr not present");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(dict, POSIX_ACL_ACCESS_XATTR, acl_access);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value.key = %s",</div><div class='add'>+               POSIX_ACL_ACCESS_XATTR);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_selfheal_dir_mkdir_setquota (dict_t *src, dict_t *dst)</div><div class='add'>+dht_selfheal_dir_mkdir_setquota(dict_t *src, dict_t *dst)</div><div class='ctx'> {</div><div class='del'>-        data_t           *quota_limit_key = NULL;</div><div class='del'>-        data_t           *quota_limit_obj_key = NULL;</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (src);</div><div class='del'>-        GF_ASSERT (dst);</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        quota_limit_key = dict_get (src, QUOTA_LIMIT_KEY);</div><div class='del'>-        if (!quota_limit_key) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "QUOTA_LIMIT_KEY xattr not present");</div><div class='del'>-                goto cont;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set(dst, QUOTA_LIMIT_KEY, quota_limit_key);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value.key = %s",</div><div class='del'>-                        QUOTA_LIMIT_KEY);</div><div class='add'>+    data_t *quota_limit_key = NULL;</div><div class='add'>+    data_t *quota_limit_obj_key = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(src);</div><div class='add'>+    GF_ASSERT(dst);</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    quota_limit_key = dict_get(src, QUOTA_LIMIT_KEY);</div><div class='add'>+    if (!quota_limit_key) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "QUOTA_LIMIT_KEY xattr not present");</div><div class='add'>+        goto cont;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(dst, QUOTA_LIMIT_KEY, quota_limit_key);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value.key = %s", QUOTA_LIMIT_KEY);</div><div class='ctx'> </div><div class='ctx'> cont:</div><div class='del'>-        quota_limit_obj_key = dict_get (src, QUOTA_LIMIT_OBJECTS_KEY);</div><div class='del'>-        if (!quota_limit_obj_key) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "QUOTA_LIMIT_OBJECTS_KEY xattr not present");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set (dst, QUOTA_LIMIT_OBJECTS_KEY, quota_limit_obj_key);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value.key = %s",</div><div class='del'>-                        QUOTA_LIMIT_OBJECTS_KEY);</div><div class='add'>+    quota_limit_obj_key = dict_get(src, QUOTA_LIMIT_OBJECTS_KEY);</div><div class='add'>+    if (!quota_limit_obj_key) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "QUOTA_LIMIT_OBJECTS_KEY xattr not present");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(dst, QUOTA_LIMIT_OBJECTS_KEY, quota_limit_obj_key);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value.key = %s",</div><div class='add'>+               QUOTA_LIMIT_OBJECTS_KEY);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_mkdir_lookup_done (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_selfheal_dir_mkdir_lookup_done(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           i     = 0;</div><div class='del'>-        dict_t       *dict = NULL;</div><div class='del'>-        dht_layout_t  *layout = NULL;</div><div class='del'>-        loc_t        *loc   = NULL;</div><div class='del'>-        int           cnt   = 0;</div><div class='del'>-        int          ret    = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        loc    = &amp;local-&gt;loc;</div><div class='del'>-</div><div class='del'>-        if (!gf_uuid_is_null (local-&gt;gfid)) {</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict)</div><div class='del'>-                        return -1;</div><div class='del'>-</div><div class='del'>-                ret = dict_set_gfuuid (dict, "gfid-req", local-&gt;gfid, true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "%s: Failed to set dictionary value:"</div><div class='del'>-                                " key = gfid-req", loc-&gt;path);</div><div class='del'>-        } else if (local-&gt;params) {</div><div class='del'>-                /* Send the dictionary from higher layers directly */</div><div class='del'>-</div><div class='del'>-                dict = dict_ref (local-&gt;params);</div><div class='del'>-        }</div><div class='del'>-        /* Code to update all extended attributed from local-&gt;xattr</div><div class='del'>-           to dict</div><div class='del'>-        */</div><div class='del'>-        dht_dir_set_heal_xattr (this, local, dict, local-&gt;xattr, NULL,</div><div class='del'>-                                NULL);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    if (!gf_uuid_is_null(local-&gt;gfid)) {</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict)</div><div class='add'>+            return -1;</div><div class='add'>+</div><div class='add'>+        ret = dict_set_gfuuid(dict, "gfid-req", local-&gt;gfid, true);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "%s: Failed to set dictionary value:"</div><div class='add'>+                   " key = gfid-req",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+    } else if (local-&gt;params) {</div><div class='add'>+        /* Send the dictionary from higher layers directly */</div><div class='add'>+</div><div class='add'>+        dict = dict_ref(local-&gt;params);</div><div class='add'>+    }</div><div class='add'>+    /* Code to update all extended attributed from local-&gt;xattr</div><div class='add'>+       to dict</div><div class='add'>+    */</div><div class='add'>+    dht_dir_set_heal_xattr(this, local, dict, local-&gt;xattr, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "dict is NULL, need to make sure gfids are same");</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict)</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_flag(dict, GF_INTERNAL_CTX_KEY, GF_DHT_HEAL_DIR);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value for"</div><div class='add'>+               " key = %s at path: %s",</div><div class='add'>+               GF_INTERNAL_CTX_KEY, loc-&gt;path);</div><div class='add'>+        /* We can still continue. As heal can still happen</div><div class='add'>+         * unless quota limits have reached for the dir.</div><div class='add'>+         */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "dict is NULL, need to make sure gfids are same");</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict)</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_flag (dict, GF_INTERNAL_CTX_KEY, GF_DHT_HEAL_DIR);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value for"</div><div class='del'>-                        " key = %s at path: %s",</div><div class='del'>-                        GF_INTERNAL_CTX_KEY, loc-&gt;path);</div><div class='del'>-                /* We can still continue. As heal can still happen</div><div class='del'>-                 * unless quota limits have reached for the dir.</div><div class='del'>-                 */</div><div class='del'>-        }</div><div class='add'>+    cnt = layout-&gt;cnt;</div><div class='add'>+    for (i = 0; i &lt; cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err == ESTALE || layout-&gt;list[i].err == ENOENT ||</div><div class='add'>+            local-&gt;selfheal.force_mkdir) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "Creating directory %s on subvol %s",</div><div class='add'>+                         loc-&gt;path, layout-&gt;list[i].xlator-&gt;name);</div><div class='ctx'> </div><div class='del'>-        cnt = layout-&gt;cnt;</div><div class='del'>-        for (i = 0; i &lt; cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err == ESTALE ||</div><div class='del'>-                    layout-&gt;list[i].err == ENOENT ||</div><div class='del'>-                    local-&gt;selfheal.force_mkdir) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Creating directory %s on subvol %s",</div><div class='del'>-                                      loc-&gt;path, layout-&gt;list[i].xlator-&gt;name);</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_selfheal_dir_mkdir_cbk,</div><div class='del'>-                                           layout-&gt;list[i].xlator,</div><div class='del'>-                                           layout-&gt;list[i].xlator,</div><div class='del'>-                                           layout-&gt;list[i].xlator-&gt;fops-&gt;mkdir,</div><div class='del'>-                                           loc,</div><div class='del'>-                                           st_mode_from_ia (local-&gt;stbuf.ia_prot,</div><div class='del'>-                                                            local-&gt;stbuf.ia_type),</div><div class='del'>-                                           0, dict);</div><div class='del'>-                }</div><div class='add'>+            STACK_WIND_COOKIE(</div><div class='add'>+                frame, dht_selfheal_dir_mkdir_cbk, layout-&gt;list[i].xlator,</div><div class='add'>+                layout-&gt;list[i].xlator, layout-&gt;list[i].xlator-&gt;fops-&gt;mkdir,</div><div class='add'>+                loc,</div><div class='add'>+                st_mode_from_ia(local-&gt;stbuf.ia_prot, local-&gt;stbuf.ia_type), 0,</div><div class='add'>+                dict);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_selfheal_dir_finish (frame, this, -1, 1);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_selfheal_dir_finish(frame, this, -1, 1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_mkdir_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                   xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                   inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                                   dict_t *xattr, struct iatt *postparent)</div><div class='add'>+dht_selfheal_dir_mkdir_lookup_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                  xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                  inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                                  dict_t *xattr, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           i     = 0;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='del'>-        int           missing_dirs = 0;</div><div class='del'>-        dht_layout_t  *layout = NULL;</div><div class='del'>-        dht_conf_t    *conf   = 0;</div><div class='del'>-        loc_t         *loc    = NULL;</div><div class='del'>-        int           check_mds = 0;</div><div class='del'>-        int           errst     = 0;</div><div class='del'>-        int32_t       mds_xattr_val[1] = {0};</div><div class='del'>-        char          gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-        loc = &amp;local-&gt;loc;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;gfid)</div><div class='del'>-                gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='del'>-</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((op_ret &lt; 0) &amp;&amp;</div><div class='del'>-                    (op_errno == ENOENT || op_errno == ESTALE)) {</div><div class='del'>-                        local-&gt;selfheal.hole_cnt = !local-&gt;selfheal.hole_cnt ? 1</div><div class='del'>-                                                : local-&gt;selfheal.hole_cnt + 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!op_ret) {</div><div class='del'>-                        dht_iatt_merge (this, &amp;local-&gt;stbuf, stbuf);</div><div class='del'>-                }</div><div class='del'>-                check_mds = dht_dict_get_array (xattr, conf-&gt;mds_xattr_key,</div><div class='del'>-                                                mds_xattr_val, 1, &amp;errst);</div><div class='del'>-                if (dict_get (xattr, conf-&gt;mds_xattr_key) &amp;&amp; check_mds &amp;&amp; !errst) {</div><div class='del'>-                        dict_unref (local-&gt;xattr);</div><div class='del'>-                        local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int missing_dirs = 0;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    dht_conf_t *conf = 0;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    int check_mds = 0;</div><div class='add'>+    int errst = 0;</div><div class='add'>+    int32_t mds_xattr_val[1] = {0};</div><div class='add'>+    char gfid_local[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;gfid)</div><div class='add'>+        gf_uuid_unparse(local-&gt;gfid, gfid_local);</div><div class='add'>+</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((op_ret &lt; 0) &amp;&amp; (op_errno == ENOENT || op_errno == ESTALE)) {</div><div class='add'>+            local-&gt;selfheal.hole_cnt = !local-&gt;selfheal.hole_cnt</div><div class='add'>+                                           ? 1</div><div class='add'>+                                           : local-&gt;selfheal.hole_cnt + 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!op_ret) {</div><div class='add'>+            dht_iatt_merge(this, &amp;local-&gt;stbuf, stbuf);</div><div class='add'>+        }</div><div class='add'>+        check_mds = dht_dict_get_array(xattr, conf-&gt;mds_xattr_key,</div><div class='add'>+                                       mds_xattr_val, 1, &amp;errst);</div><div class='add'>+        if (dict_get(xattr, conf-&gt;mds_xattr_key) &amp;&amp; check_mds &amp;&amp; !errst) {</div><div class='add'>+            dict_unref(local-&gt;xattr);</div><div class='add'>+            local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (local-&gt;selfheal.hole_cnt == layout-&gt;cnt) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "Lookup failed, an rmdir could have "</div><div class='add'>+                         "deleted this entry %s",</div><div class='add'>+                         loc-&gt;name);</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto err;</div><div class='add'>+        } else {</div><div class='add'>+            for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+                if (layout-&gt;list[i].err == ENOENT ||</div><div class='add'>+                    layout-&gt;list[i].err == ESTALE ||</div><div class='add'>+                    local-&gt;selfheal.force_mkdir)</div><div class='add'>+                    missing_dirs++;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (missing_dirs == 0) {</div><div class='add'>+                dht_selfheal_dir_finish(frame, this, 0, 0);</div><div class='add'>+                dht_selfheal_dir_setattr(frame, loc, &amp;local-&gt;stbuf, 0xffffffff,</div><div class='add'>+                                         layout);</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            local-&gt;call_cnt = missing_dirs;</div><div class='add'>+            dht_selfheal_dir_mkdir_lookup_done(frame, this);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if (local-&gt;selfheal.hole_cnt == layout-&gt;cnt) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "Lookup failed, an rmdir could have "</div><div class='del'>-                                      "deleted this entry %s", loc-&gt;name);</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto err;</div><div class='del'>-                } else {</div><div class='del'>-                        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                                if (layout-&gt;list[i].err == ENOENT ||</div><div class='del'>-                                    layout-&gt;list[i].err == ESTALE ||</div><div class='del'>-                                    local-&gt;selfheal.force_mkdir)</div><div class='del'>-                                        missing_dirs++;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (missing_dirs == 0) {</div><div class='del'>-                                dht_selfheal_dir_finish (frame, this, 0, 0);</div><div class='del'>-                                dht_selfheal_dir_setattr (frame, loc,</div><div class='del'>-                                                          &amp;local-&gt;stbuf,</div><div class='del'>-                                                          0xffffffff, layout);</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local-&gt;call_cnt = missing_dirs;</div><div class='del'>-                        dht_selfheal_dir_mkdir_lookup_done (frame, this);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_selfheal_dir_finish (frame, this, -1, 1);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_selfheal_dir_finish(frame, this, -1, 1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_mkdir_lock_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                 xlator_t *this, int32_t op_ret,</div><div class='del'>-                                 int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_selfheal_dir_mkdir_lock_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                xlator_t *this, int32_t op_ret,</div><div class='add'>+                                int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        dht_conf_t   *conf  = NULL;</div><div class='del'>-        int           i     = 0;</div><div class='del'>-        int           ret   = -1;</div><div class='del'>-        xlator_t     *mds_subvol = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-</div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-</div><div class='del'>-                /* We get this error when the directory entry was not created</div><div class='del'>-                 * on a newky attached tier subvol. Hence proceed and do mkdir</div><div class='del'>-                 * on the tier subvol.</div><div class='del'>-                 */</div><div class='del'>-                if (op_errno == EINVAL) {</div><div class='del'>-                        local-&gt;call_cnt = 1;</div><div class='del'>-                        dht_selfheal_dir_mkdir_lookup_done (frame, this);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        DHT_MSG_ENTRYLK_ERROR,</div><div class='del'>-                        "acquiring entrylk after inodelk failed for %s",</div><div class='del'>-                        local-&gt;loc.path);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    mds_subvol = local-&gt;mds_subvol;</div><div class='ctx'> </div><div class='del'>-        /* After getting locks, perform lookup again to ensure that the</div><div class='del'>-           directory was not deleted by a racing rmdir</div><div class='del'>-        */</div><div class='del'>-        if (!local-&gt;xattr_req)</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (local-&gt;xattr_req, "list-xattr", 1);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary key list-xattr value "</div><div class='del'>-                        " for path %s ", local-&gt;loc.path);</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (mds_subvol &amp;&amp; conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame,</div><div class='del'>-                                           dht_selfheal_dir_mkdir_lookup_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                } else {</div><div class='del'>-                       STACK_WIND_COOKIE (frame,</div><div class='del'>-                                          dht_selfheal_dir_mkdir_lookup_cbk,</div><div class='del'>-                                          conf-&gt;subvolumes[i],</div><div class='del'>-                                          conf-&gt;subvolumes[i],</div><div class='del'>-                                          conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                          &amp;local-&gt;loc, NULL);</div><div class='del'>-                }</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        /* We get this error when the directory entry was not created</div><div class='add'>+         * on a newky attached tier subvol. Hence proceed and do mkdir</div><div class='add'>+         * on the tier subvol.</div><div class='add'>+         */</div><div class='add'>+        if (op_errno == EINVAL) {</div><div class='add'>+            local-&gt;call_cnt = 1;</div><div class='add'>+            dht_selfheal_dir_mkdir_lookup_done(frame, this);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, DHT_MSG_ENTRYLK_ERROR,</div><div class='add'>+               "acquiring entrylk after inodelk failed for %s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* After getting locks, perform lookup again to ensure that the</div><div class='add'>+       directory was not deleted by a racing rmdir</div><div class='add'>+    */</div><div class='add'>+    if (!local-&gt;xattr_req)</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(local-&gt;xattr_req, "list-xattr", 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary key list-xattr value "</div><div class='add'>+               " for path %s ",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (mds_subvol &amp;&amp; conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_selfheal_dir_mkdir_lookup_cbk,</div><div class='add'>+                              conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+        } else {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_selfheal_dir_mkdir_lookup_cbk,</div><div class='add'>+                              conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                              NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_selfheal_dir_finish (frame, this, -1, 1);</div><div class='del'>-        return 0;</div><div class='add'>+    dht_selfheal_dir_finish(frame, this, -1, 1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_mkdir (call_frame_t *frame, loc_t *loc,</div><div class='del'>-                        dht_layout_t *layout, int force)</div><div class='add'>+dht_selfheal_dir_mkdir(call_frame_t *frame, loc_t *loc, dht_layout_t *layout,</div><div class='add'>+                       int force)</div><div class='ctx'> {</div><div class='del'>-        int           missing_dirs = 0;</div><div class='del'>-        int           i     = 0;</div><div class='del'>-        int           ret   = -1;</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *this  = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        local-&gt;selfheal.force_mkdir = force;</div><div class='del'>-        local-&gt;selfheal.hole_cnt = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                if (layout-&gt;list[i].err == ENOENT || force)</div><div class='del'>-                        missing_dirs++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (missing_dirs == 0) {</div><div class='del'>-                if (!__is_root_gfid (local-&gt;stbuf.ia_gfid)) {</div><div class='del'>-                        if (local-&gt;need_xattr_heal) {</div><div class='del'>-                                local-&gt;need_xattr_heal = 0;</div><div class='del'>-                                ret =  dht_dir_xattr_heal (this, local);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                ret,</div><div class='del'>-                                                DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                                "xattr heal failed for "</div><div class='del'>-                                                "directory  %s gfid %s ",</div><div class='del'>-                                                local-&gt;loc.path,</div><div class='del'>-                                                local-&gt;gfid);</div><div class='del'>-                        } else {</div><div class='del'>-                                if (!gf_uuid_is_null (local-&gt;gfid))</div><div class='del'>-                                        gf_uuid_copy (loc-&gt;gfid, local-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                                ret = dht_common_mark_mdsxattr (frame, NULL, 0);</div><div class='del'>-                                if (!ret)</div><div class='del'>-                                        return 0;</div><div class='del'>-</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                        "Failed to set mds xattr "</div><div class='del'>-                                        "for directory  %s gfid %s ",</div><div class='del'>-                                        local-&gt;loc.path, local-&gt;gfid);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                dht_selfheal_dir_setattr (frame, loc, &amp;local-&gt;stbuf,</div><div class='del'>-                                          0xffffffff, layout);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;hashed_subvol == NULL)</div><div class='del'>-                local-&gt;hashed_subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;hashed_subvol == NULL) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='del'>-                        DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='del'>-                        "(%s/%s) (path: %s): "</div><div class='del'>-                        "hashed subvolume not found", loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                        loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;current = &amp;local-&gt;lock[0];</div><div class='del'>-        ret = dht_protect_namespace (frame, loc, local-&gt;hashed_subvol,</div><div class='del'>-                                     &amp;local-&gt;current-&gt;ns,</div><div class='del'>-                                     dht_selfheal_dir_mkdir_lock_cbk);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='add'>+    int missing_dirs = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    local-&gt;selfheal.force_mkdir = force;</div><div class='add'>+    local-&gt;selfheal.hole_cnt = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err == ENOENT || force)</div><div class='add'>+            missing_dirs++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (missing_dirs == 0) {</div><div class='add'>+        if (!__is_root_gfid(local-&gt;stbuf.ia_gfid)) {</div><div class='add'>+            if (local-&gt;need_xattr_heal) {</div><div class='add'>+                local-&gt;need_xattr_heal = 0;</div><div class='add'>+                ret = dht_dir_xattr_heal(this, local);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                           DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                           "xattr heal failed for "</div><div class='add'>+                           "directory  %s gfid %s ",</div><div class='add'>+                           local-&gt;loc.path, local-&gt;gfid);</div><div class='add'>+            } else {</div><div class='add'>+                if (!gf_uuid_is_null(local-&gt;gfid))</div><div class='add'>+                    gf_uuid_copy(loc-&gt;gfid, local-&gt;gfid);</div><div class='add'>+</div><div class='add'>+                ret = dht_common_mark_mdsxattr(frame, NULL, 0);</div><div class='add'>+                if (!ret)</div><div class='add'>+                    return 0;</div><div class='add'>+</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                       DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                       "Failed to set mds xattr "</div><div class='add'>+                       "for directory  %s gfid %s ",</div><div class='add'>+                       local-&gt;loc.path, local-&gt;gfid);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        dht_selfheal_dir_setattr(frame, loc, &amp;local-&gt;stbuf, 0xffffffff, layout);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;hashed_subvol == NULL)</div><div class='add'>+        local-&gt;hashed_subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;hashed_subvol == NULL) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, local-&gt;op_errno,</div><div class='add'>+               DHT_MSG_HASHED_SUBVOL_GET_FAILED,</div><div class='add'>+               "(%s/%s) (path: %s): "</div><div class='add'>+               "hashed subvolume not found",</div><div class='add'>+               loc-&gt;pargfid, loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;current = &amp;local-&gt;lock[0];</div><div class='add'>+    ret = dht_protect_namespace(frame, loc, local-&gt;hashed_subvol,</div><div class='add'>+                                &amp;local-&gt;current-&gt;ns,</div><div class='add'>+                                dht_selfheal_dir_mkdir_lock_cbk);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_layout_alloc_start (xlator_t *this, loc_t *loc,</div><div class='del'>-                                 dht_layout_t *layout)</div><div class='add'>+dht_selfheal_layout_alloc_start(xlator_t *this, loc_t *loc,</div><div class='add'>+                                dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int         start                               = 0;</div><div class='del'>-        uint32_t    hashval                             = 0;</div><div class='del'>-        int         ret                                 = 0;</div><div class='del'>-        const char *str                                 = NULL;</div><div class='del'>-        dht_conf_t *conf                                = NULL;</div><div class='del'>-        char           buf[UUID_CANONICAL_FORM_LEN + 1] = {0, };</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;randomize_by_gfid) {</div><div class='del'>-                str = uuid_utoa_r (loc-&gt;gfid, buf);</div><div class='del'>-        } else {</div><div class='del'>-                str = loc-&gt;path;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dht_hash_compute (this, layout-&gt;type, str, &amp;hashval);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                start = (hashval % layout-&gt;cnt);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return start;</div><div class='add'>+    int start = 0;</div><div class='add'>+    uint32_t hashval = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    const char *str = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char buf[UUID_CANONICAL_FORM_LEN + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;randomize_by_gfid) {</div><div class='add'>+        str = uuid_utoa_r(loc-&gt;gfid, buf);</div><div class='add'>+    } else {</div><div class='add'>+        str = loc-&gt;path;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dht_hash_compute(this, layout-&gt;type, str, &amp;hashval);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        start = (hashval % layout-&gt;cnt);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return start;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-dht_get_layout_count (xlator_t *this, dht_layout_t *layout, int new_layout)</div><div class='add'>+dht_get_layout_count(xlator_t *this, dht_layout_t *layout, int new_layout)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int j = 0;</div><div class='del'>-        int err = 0;</div><div class='del'>-        int count = 0;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        /* Gets in use only for replace-brick, remove-brick */</div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int err = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    /* Gets in use only for replace-brick, remove-brick */</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        for (j = 0; j &lt; conf-&gt;subvolume_cnt; j++) {</div><div class='add'>+            if (conf-&gt;decommissioned_bricks[j] &amp;&amp;</div><div class='add'>+                conf-&gt;decommissioned_bricks[j] == layout-&gt;list[i].xlator) {</div><div class='add'>+                layout-&gt;list[i].err = EINVAL;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        err = layout-&gt;list[i].err;</div><div class='add'>+        if (err == -1 || err == 0 || err == ENOENT) {</div><div class='add'>+            /* Take this with a pinch of salt. The behaviour seems</div><div class='add'>+             * to be slightly different when this function is</div><div class='add'>+             * invoked from mkdir codepath. For eg., err == 0 in</div><div class='add'>+             * mkdir codepath means directory created but xattr</div><div class='add'>+             * is not set yet.</div><div class='add'>+             */</div><div class='add'>+</div><div class='add'>+            /* Setting list[i].err = -1 is an indication for</div><div class='add'>+               dht_selfheal_layout_new_directory() to assign</div><div class='add'>+               a range. We set it to -1 based on any one of</div><div class='add'>+               the three criteria:</div><div class='add'>+</div><div class='add'>+               - err == -1 already, which means directory</div><div class='add'>+                 existed but layout was not set on it.</div><div class='add'>+</div><div class='add'>+               - err == 0, which means directory exists and</div><div class='add'>+                 has an old layout piece which will be</div><div class='add'>+                 overwritten now.</div><div class='add'>+</div><div class='add'>+               - err == ENOENT, which means directory does</div><div class='add'>+                 not exist (possibly racing with mkdir or</div><div class='add'>+                 finishing half done mkdir). The missing</div><div class='add'>+                 directory will be attempted to be recreated.</div><div class='add'>+            */</div><div class='add'>+            count++;</div><div class='add'>+            if (!err)</div><div class='add'>+                layout-&gt;list[i].err = -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* no subvolume has enough space, but can't stop directory creation */</div><div class='add'>+    if (!count || !new_layout) {</div><div class='ctx'>         for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                for (j = 0; j &lt; conf-&gt;subvolume_cnt; j++) {</div><div class='del'>-                        if (conf-&gt;decommissioned_bricks[j] &amp;&amp;</div><div class='del'>-                            conf-&gt;decommissioned_bricks[j] == layout-&gt;list[i].xlator) {</div><div class='del'>-                                layout-&gt;list[i].err = EINVAL;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                err = layout-&gt;list[i].err;</div><div class='del'>-                if (err == -1 || err == 0 || err == ENOENT) {</div><div class='del'>-                        /* Take this with a pinch of salt. The behaviour seems</div><div class='del'>-                         * to be slightly different when this function is</div><div class='del'>-                         * invoked from mkdir codepath. For eg., err == 0 in</div><div class='del'>-                         * mkdir codepath means directory created but xattr</div><div class='del'>-                         * is not set yet.</div><div class='del'>-                         */</div><div class='del'>-</div><div class='del'>-			/* Setting list[i].err = -1 is an indication for</div><div class='del'>-			   dht_selfheal_layout_new_directory() to assign</div><div class='del'>-			   a range. We set it to -1 based on any one of</div><div class='del'>-			   the three criteria:</div><div class='del'>-</div><div class='del'>-			   - err == -1 already, which means directory</div><div class='del'>-			     existed but layout was not set on it.</div><div class='del'>-</div><div class='del'>-			   - err == 0, which means directory exists and</div><div class='del'>-			     has an old layout piece which will be</div><div class='del'>-			     overwritten now.</div><div class='del'>-</div><div class='del'>-			   - err == ENOENT, which means directory does</div><div class='del'>-			     not exist (possibly racing with mkdir or</div><div class='del'>-			     finishing half done mkdir). The missing</div><div class='del'>-			     directory will be attempted to be recreated.</div><div class='del'>-			*/</div><div class='del'>-                        count++;</div><div class='del'>-			if (!err)</div><div class='del'>-				layout-&gt;list[i].err = -1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* no subvolume has enough space, but can't stop directory creation */</div><div class='del'>-        if (!count || !new_layout) {</div><div class='del'>-                for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                        err = layout-&gt;list[i].err;</div><div class='del'>-                        if (err == ENOSPC) {</div><div class='del'>-                                layout-&gt;list[i].err = -1;</div><div class='del'>-                                count++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if layout-&gt;spread_cnt is set, check if it is &lt;= available</div><div class='del'>-         * subvolumes (down brick and decommissioned bricks are considered</div><div class='del'>-         * un-availbale). Else return count (available up bricks) */</div><div class='del'>-        count = ((layout-&gt;spread_cnt &amp;&amp;</div><div class='del'>-                 (layout-&gt;spread_cnt &lt;= count)) ?</div><div class='del'>-                 layout-&gt;spread_cnt : ((count) ? count : 1));</div><div class='del'>-</div><div class='del'>-        return count;</div><div class='add'>+            err = layout-&gt;list[i].err;</div><div class='add'>+            if (err == ENOSPC) {</div><div class='add'>+                layout-&gt;list[i].err = -1;</div><div class='add'>+                count++;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* if layout-&gt;spread_cnt is set, check if it is &lt;= available</div><div class='add'>+     * subvolumes (down brick and decommissioned bricks are considered</div><div class='add'>+     * un-availbale). Else return count (available up bricks) */</div><div class='add'>+    count = ((layout-&gt;spread_cnt &amp;&amp; (layout-&gt;spread_cnt &lt;= count))</div><div class='add'>+                 ? layout-&gt;spread_cnt</div><div class='add'>+                 : ((count) ? count : 1));</div><div class='add'>+</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+void</div><div class='add'>+dht_selfheal_layout_new_directory(call_frame_t *frame, loc_t *loc,</div><div class='add'>+                                  dht_layout_t *new_layout);</div><div class='ctx'> </div><div class='del'>-void dht_selfheal_layout_new_directory (call_frame_t *frame, loc_t *loc,</div><div class='del'>-					dht_layout_t *new_layout);</div><div class='del'>-</div><div class='del'>-void dht_layout_entry_swap (dht_layout_t *layout, int i, int j);</div><div class='del'>-void dht_layout_range_swap (dht_layout_t *layout, int i, int j);</div><div class='add'>+void</div><div class='add'>+dht_layout_entry_swap(dht_layout_t *layout, int i, int j);</div><div class='add'>+void</div><div class='add'>+dht_layout_range_swap(dht_layout_t *layout, int i, int j);</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * It's a bit icky using local variables in a macro, but it makes the rest</div><div class='ctx'>  * of the code a lot clearer.</div><div class='ctx'>  */</div><div class='del'>-#define OV_ENTRY(x,y)      table[x*new-&gt;cnt+y]</div><div class='add'>+#define OV_ENTRY(x, y) table[x * new-&gt;cnt + y]</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_selfheal_layout_maximize_overlap (call_frame_t *frame, loc_t *loc,</div><div class='del'>-				      dht_layout_t *new, dht_layout_t *old)</div><div class='add'>+dht_selfheal_layout_maximize_overlap(call_frame_t *frame, loc_t *loc,</div><div class='add'>+                                     dht_layout_t *new, dht_layout_t *old)</div><div class='ctx'> {</div><div class='del'>-	int           i            = 0;</div><div class='del'>-	int           j            = 0;</div><div class='del'>-	uint32_t      curr_overlap = 0;</div><div class='del'>-	uint32_t      max_overlap  = 0;</div><div class='del'>-	int           max_overlap_idx = -1;</div><div class='del'>-	uint32_t      overlap      = 0;</div><div class='del'>-        uint32_t     *table = NULL;</div><div class='del'>-</div><div class='del'>-	dht_layout_sort_volname (old);</div><div class='del'>-	/* Now both old_layout-&gt;list[] and new_layout-&gt;list[]</div><div class='del'>-	   are match the same xlators/subvolumes. i.e,</div><div class='del'>-	   old_layout-&gt;[i] and new_layout-&gt;[i] are referring</div><div class='del'>-	   to the same subvolumes</div><div class='del'>-	*/</div><div class='del'>-</div><div class='del'>-        /* Build a table of overlaps between new[i] and old[j]. */</div><div class='del'>-        table = alloca(sizeof(overlap)*old-&gt;cnt*new-&gt;cnt);</div><div class='del'>-        if (!table) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-        memset(table,0,sizeof(overlap)*old-&gt;cnt*new-&gt;cnt);</div><div class='del'>-        for (i = 0; i &lt; new-&gt;cnt; ++i) {</div><div class='del'>-                for (j = 0; j &lt; old-&gt;cnt; ++j) {</div><div class='del'>-                        OV_ENTRY(i,j) = dht_overlap_calc(old,j,new,i);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; new-&gt;cnt; i++) {</div><div class='del'>-		if (new-&gt;list[i].err &gt; 0) {</div><div class='del'>-			/* Subvol might be marked for decommission</div><div class='del'>-			   with EINVAL, or some other serious error</div><div class='del'>-			   marked with positive errno.</div><div class='del'>-			*/</div><div class='del'>-			continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                max_overlap = 0;</div><div class='del'>-                max_overlap_idx = i;</div><div class='del'>-                for (j = (i + 1); j &lt; new-&gt;cnt; ++j) {</div><div class='del'>-                        if (new-&gt;list[j].err &gt; 0) {</div><div class='del'>-			        /* Subvol might be marked for decommission</div><div class='del'>-			        with EINVAL, or some other serious error</div><div class='del'>-			        marked with positive errno.</div><div class='del'>-			        */</div><div class='del'>-			        continue;</div><div class='del'>-                        }</div><div class='del'>-                        /* Calculate the overlap now. */</div><div class='del'>-                        curr_overlap = OV_ENTRY(i,i) + OV_ENTRY(j,j);</div><div class='del'>-                        /* Calculate the overlap after the proposed swap. */</div><div class='del'>-                        overlap = OV_ENTRY(i,j) + OV_ENTRY(j,i);</div><div class='del'>-                        /* Are we better than status quo? */</div><div class='del'>-                        if (overlap &gt; curr_overlap) {</div><div class='del'>-                                overlap -= curr_overlap;</div><div class='del'>-                                /* Are we better than the previous choice? */</div><div class='del'>-                                if (overlap &gt; max_overlap) {</div><div class='del'>-                                        max_overlap = overlap;</div><div class='del'>-                                        max_overlap_idx = j;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-		if (max_overlap_idx != i) {</div><div class='del'>- 			dht_layout_range_swap (new, i, max_overlap_idx);</div><div class='del'>-                        /* Need to swap the table values too. */</div><div class='del'>-                        for (j = 0; j &lt; old-&gt;cnt; ++j) {</div><div class='del'>-                                overlap = OV_ENTRY(i,j);</div><div class='del'>-                                OV_ENTRY(i,j) = OV_ENTRY(max_overlap_idx,j);</div><div class='del'>-                                OV_ENTRY(max_overlap_idx,j) = overlap;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-	}</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    uint32_t curr_overlap = 0;</div><div class='add'>+    uint32_t max_overlap = 0;</div><div class='add'>+    int max_overlap_idx = -1;</div><div class='add'>+    uint32_t overlap = 0;</div><div class='add'>+    uint32_t *table = NULL;</div><div class='add'>+</div><div class='add'>+    dht_layout_sort_volname(old);</div><div class='add'>+    /* Now both old_layout-&gt;list[] and new_layout-&gt;list[]</div><div class='add'>+       are match the same xlators/subvolumes. i.e,</div><div class='add'>+       old_layout-&gt;[i] and new_layout-&gt;[i] are referring</div><div class='add'>+       to the same subvolumes</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    /* Build a table of overlaps between new[i] and old[j]. */</div><div class='add'>+    table = alloca(sizeof(overlap) * old-&gt;cnt * new-&gt;cnt);</div><div class='add'>+    if (!table) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    memset(table, 0, sizeof(overlap) * old-&gt;cnt * new-&gt;cnt);</div><div class='add'>+    for (i = 0; i &lt; new-&gt;cnt; ++i) {</div><div class='add'>+        for (j = 0; j &lt; old-&gt;cnt; ++j) {</div><div class='add'>+            OV_ENTRY(i, j) = dht_overlap_calc(old, j, new, i);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; new-&gt;cnt; i++) {</div><div class='add'>+        if (new-&gt;list[i].err &gt; 0) {</div><div class='add'>+            /* Subvol might be marked for decommission</div><div class='add'>+               with EINVAL, or some other serious error</div><div class='add'>+               marked with positive errno.</div><div class='add'>+            */</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        max_overlap = 0;</div><div class='add'>+        max_overlap_idx = i;</div><div class='add'>+        for (j = (i + 1); j &lt; new-&gt;cnt; ++j) {</div><div class='add'>+            if (new-&gt;list[j].err &gt; 0) {</div><div class='add'>+                /* Subvol might be marked for decommission</div><div class='add'>+                with EINVAL, or some other serious error</div><div class='add'>+                marked with positive errno.</div><div class='add'>+                */</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+            /* Calculate the overlap now. */</div><div class='add'>+            curr_overlap = OV_ENTRY(i, i) + OV_ENTRY(j, j);</div><div class='add'>+            /* Calculate the overlap after the proposed swap. */</div><div class='add'>+            overlap = OV_ENTRY(i, j) + OV_ENTRY(j, i);</div><div class='add'>+            /* Are we better than status quo? */</div><div class='add'>+            if (overlap &gt; curr_overlap) {</div><div class='add'>+                overlap -= curr_overlap;</div><div class='add'>+                /* Are we better than the previous choice? */</div><div class='add'>+                if (overlap &gt; max_overlap) {</div><div class='add'>+                    max_overlap = overlap;</div><div class='add'>+                    max_overlap_idx = j;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (max_overlap_idx != i) {</div><div class='add'>+            dht_layout_range_swap(new, i, max_overlap_idx);</div><div class='add'>+            /* Need to swap the table values too. */</div><div class='add'>+            for (j = 0; j &lt; old-&gt;cnt; ++j) {</div><div class='add'>+                overlap = OV_ENTRY(i, j);</div><div class='add'>+                OV_ENTRY(i, j) = OV_ENTRY(max_overlap_idx, j);</div><div class='add'>+                OV_ENTRY(max_overlap_idx, j) = overlap;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> dht_layout_t *</div><div class='del'>-dht_fix_layout_of_directory (call_frame_t *frame, loc_t *loc,</div><div class='del'>-                             dht_layout_t *layout)</div><div class='add'>+dht_fix_layout_of_directory(call_frame_t *frame, loc_t *loc,</div><div class='add'>+                            dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int           i                         = 0;</div><div class='del'>-        xlator_t     *this                      = NULL;</div><div class='del'>-        dht_layout_t *new_layout                = NULL;</div><div class='del'>-        dht_conf_t   *priv                      = NULL;</div><div class='del'>-        dht_local_t  *local                     = NULL;</div><div class='del'>-        uint32_t      subvol_down               = 0;</div><div class='del'>-        int           ret                       = 0;</div><div class='del'>-        gf_boolean_t  maximize_overlap          = _gf_true;</div><div class='del'>-        char          gfid[GF_UUID_BUF_SIZE]    = {0};</div><div class='del'>-</div><div class='del'>-        this  = frame-&gt;this;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (layout-&gt;type == DHT_HASH_TYPE_DM_USER) {</div><div class='del'>-                gf_msg_debug (THIS-&gt;name, 0, "leaving %s alone",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        new_layout = dht_layout_new (this, priv-&gt;subvolume_cnt);</div><div class='del'>-        if (!new_layout) {</div><div class='del'>-                gf_uuid_unparse (loc-&gt;gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "mem allocation failed for new_layout, path:%s gfid:%s",</div><div class='del'>-                        loc-&gt;path, gfid);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* If a subvolume is down, do not re-write the layout. */</div><div class='del'>-        ret = dht_layout_anomalies (this, loc, layout, NULL, NULL, NULL,</div><div class='del'>-                                    &amp;subvol_down, NULL, NULL);</div><div class='del'>-</div><div class='del'>-        if (subvol_down || (ret == -1)) {</div><div class='del'>-                gf_uuid_unparse (loc-&gt;gfid, gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='del'>-                        "Layout fix failed: %u subvolume(s) are down"</div><div class='del'>-                        ". Skipping fix layout. path:%s gfid:%s", subvol_down,</div><div class='del'>-                        loc-&gt;path, gfid);</div><div class='del'>-                GF_FREE (new_layout);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; new_layout-&gt;cnt; i++) {</div><div class='del'>-		if (layout-&gt;list[i].err != ENOSPC)</div><div class='del'>-			new_layout-&gt;list[i].err = layout-&gt;list[i].err;</div><div class='del'>-		else</div><div class='del'>-			new_layout-&gt;list[i].err = -1;</div><div class='del'>-</div><div class='del'>-		new_layout-&gt;list[i].xlator = layout-&gt;list[i].xlator;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        new_layout-&gt;commit_hash = layout-&gt;commit_hash;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;du_stats) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;subvolume_cnt; ++i) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                                "subvolume %d (%s): %u chunks, path:%s", i,</div><div class='del'>-                                priv-&gt;subvolumes[i]-&gt;name,</div><div class='del'>-                                priv-&gt;du_stats[i].chunks, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                        /* Maximize overlap if the bricks are all the same</div><div class='del'>-                         *  size.</div><div class='del'>-                         * This is probably not going to be very common on</div><div class='del'>-                         * live setups but will benefit our regression tests</div><div class='del'>-                         */</div><div class='del'>-                        if (i &amp;&amp; (priv-&gt;du_stats[i].chunks</div><div class='del'>-                                  != priv-&gt;du_stats[0].chunks)) {</div><div class='del'>-                                maximize_overlap = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_NO_DISK_USAGE_STATUS, "no du stats ?!?");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	/* First give it a layout as though it is a new directory. This</div><div class='del'>-	   ensures rotation to kick in */</div><div class='del'>-        dht_layout_sort_volname (new_layout);</div><div class='del'>-	dht_selfheal_layout_new_directory (frame, loc, new_layout);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Maximize overlap if weighted-rebalance is disabled */</div><div class='del'>-        if (!priv-&gt;do_weighting)</div><div class='del'>-                maximize_overlap = _gf_true;</div><div class='del'>-</div><div class='del'>-	/* Now selectively re-assign ranges only when it helps */</div><div class='del'>-        if (maximize_overlap) {</div><div class='del'>-                dht_selfheal_layout_maximize_overlap (frame, loc, new_layout,</div><div class='del'>-                                                      layout);</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_layout_t *new_layout = NULL;</div><div class='add'>+    dht_conf_t *priv = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    uint32_t subvol_down = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t maximize_overlap = _gf_true;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (layout-&gt;type == DHT_HASH_TYPE_DM_USER) {</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, 0, "leaving %s alone", loc-&gt;path);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    new_layout = dht_layout_new(this, priv-&gt;subvolume_cnt);</div><div class='add'>+    if (!new_layout) {</div><div class='add'>+        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "mem allocation failed for new_layout, path:%s gfid:%s",</div><div class='add'>+               loc-&gt;path, gfid);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If a subvolume is down, do not re-write the layout. */</div><div class='add'>+    ret = dht_layout_anomalies(this, loc, layout, NULL, NULL, NULL,</div><div class='add'>+                               &amp;subvol_down, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (subvol_down || (ret == -1)) {</div><div class='add'>+        gf_uuid_unparse(loc-&gt;gfid, gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_LAYOUT_FIX_FAILED,</div><div class='add'>+               "Layout fix failed: %u subvolume(s) are down"</div><div class='add'>+               ". Skipping fix layout. path:%s gfid:%s",</div><div class='add'>+               subvol_down, loc-&gt;path, gfid);</div><div class='add'>+        GF_FREE(new_layout);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; new_layout-&gt;cnt; i++) {</div><div class='add'>+        if (layout-&gt;list[i].err != ENOSPC)</div><div class='add'>+            new_layout-&gt;list[i].err = layout-&gt;list[i].err;</div><div class='add'>+        else</div><div class='add'>+            new_layout-&gt;list[i].err = -1;</div><div class='add'>+</div><div class='add'>+        new_layout-&gt;list[i].xlator = layout-&gt;list[i].xlator;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    new_layout-&gt;commit_hash = layout-&gt;commit_hash;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;du_stats) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;subvolume_cnt; ++i) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+                   "subvolume %d (%s): %u chunks, path:%s", i,</div><div class='add'>+                   priv-&gt;subvolumes[i]-&gt;name, priv-&gt;du_stats[i].chunks,</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+</div><div class='add'>+            /* Maximize overlap if the bricks are all the same</div><div class='add'>+             *  size.</div><div class='add'>+             * This is probably not going to be very common on</div><div class='add'>+             * live setups but will benefit our regression tests</div><div class='add'>+             */</div><div class='add'>+            if (i &amp;&amp; (priv-&gt;du_stats[i].chunks != priv-&gt;du_stats[0].chunks)) {</div><div class='add'>+                maximize_overlap = _gf_false;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_NO_DISK_USAGE_STATUS,</div><div class='add'>+               "no du stats ?!?");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* First give it a layout as though it is a new directory. This</div><div class='add'>+       ensures rotation to kick in */</div><div class='add'>+    dht_layout_sort_volname(new_layout);</div><div class='add'>+    dht_selfheal_layout_new_directory(frame, loc, new_layout);</div><div class='add'>+</div><div class='add'>+    /* Maximize overlap if weighted-rebalance is disabled */</div><div class='add'>+    if (!priv-&gt;do_weighting)</div><div class='add'>+        maximize_overlap = _gf_true;</div><div class='add'>+</div><div class='add'>+    /* Now selectively re-assign ranges only when it helps */</div><div class='add'>+    if (maximize_overlap) {</div><div class='add'>+        dht_selfheal_layout_maximize_overlap(frame, loc, new_layout, layout);</div><div class='add'>+    }</div><div class='ctx'> done:</div><div class='del'>-        if (new_layout) {</div><div class='del'>-</div><div class='del'>-                /* Make sure the extra 'ref' for existing layout is removed */</div><div class='del'>-                dht_layout_unref (this, local-&gt;layout);</div><div class='add'>+    if (new_layout) {</div><div class='add'>+        /* Make sure the extra 'ref' for existing layout is removed */</div><div class='add'>+        dht_layout_unref(this, local-&gt;layout);</div><div class='ctx'> </div><div class='del'>-                local-&gt;layout = new_layout;</div><div class='del'>-        }</div><div class='add'>+        local-&gt;layout = new_layout;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return local-&gt;layout;</div><div class='add'>+    return local-&gt;layout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Having to call this 2x for each entry in the layout is pretty horrible, but</div><div class='ctx'>  * that's what all of this layout-sorting nonsense gets us.</div><div class='ctx'>  */</div><div class='ctx'> uint32_t</div><div class='del'>-dht_get_chunks_from_xl (xlator_t *parent, xlator_t *child)</div><div class='add'>+dht_get_chunks_from_xl(xlator_t *parent, xlator_t *child)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t      *priv   = parent-&gt;private;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-        uint32_t        index   = 0;</div><div class='add'>+    dht_conf_t *priv = parent-&gt;private;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+    uint32_t index = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;du_stats) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;du_stats) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (trav = parent-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                if (trav-&gt;xlator == child) {</div><div class='del'>-                        return priv-&gt;du_stats[index].chunks;</div><div class='del'>-                }</div><div class='del'>-                ++index;</div><div class='add'>+    for (trav = parent-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        if (trav-&gt;xlator == child) {</div><div class='add'>+            return priv-&gt;du_stats[index].chunks;</div><div class='ctx'>         }</div><div class='add'>+        ++index;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-dht_selfheal_layout_new_directory (call_frame_t *frame, loc_t *loc,</div><div class='del'>-                                   dht_layout_t *layout)</div><div class='add'>+dht_selfheal_layout_new_directory(call_frame_t *frame, loc_t *loc,</div><div class='add'>+                                  dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *this = NULL;</div><div class='del'>-        double       chunk = 0;</div><div class='del'>-        int          i = 0;</div><div class='del'>-        uint32_t     start = 0;</div><div class='del'>-        int          bricks_to_use = 0;</div><div class='del'>-        int          err = 0;</div><div class='del'>-        int          start_subvol = 0;</div><div class='del'>-        uint32_t     curr_size;</div><div class='del'>-        uint32_t     range_size;</div><div class='del'>-        uint64_t     total_size = 0;</div><div class='del'>-        int          real_i;</div><div class='del'>-        dht_conf_t   *priv;</div><div class='del'>-        gf_boolean_t weight_by_size;</div><div class='del'>-        int          bricks_used = 0;</div><div class='del'>-</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        weight_by_size = priv-&gt;do_weighting;</div><div class='del'>-</div><div class='del'>-        bricks_to_use = dht_get_layout_count (this, layout, 1);</div><div class='del'>-        GF_ASSERT (bricks_to_use &gt; 0);</div><div class='del'>-</div><div class='del'>-        bricks_used = 0;</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; ++i) {</div><div class='del'>-                err = layout-&gt;list[i].err;</div><div class='del'>-                if ((err != -1) &amp;&amp; (err != ENOENT)) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                curr_size = dht_get_chunks_from_xl (this,</div><div class='del'>-                                                    layout-&gt;list[i].xlator);</div><div class='del'>-                if (!curr_size) {</div><div class='del'>-                        weight_by_size = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                total_size += curr_size;</div><div class='del'>-                if (++bricks_used &gt;= bricks_to_use) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (weight_by_size &amp;&amp; total_size) {</div><div class='del'>-                /* We know total_size is not zero. */</div><div class='del'>-                chunk = ((double) 0xffffffff) / ((double) total_size);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "chunk size = 0xffffffff / %lu = %f",</div><div class='del'>-                              total_size, chunk);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                weight_by_size = _gf_false;</div><div class='del'>-                chunk = ((unsigned long) 0xffffffff) / bricks_to_use;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    double chunk = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint32_t start = 0;</div><div class='add'>+    int bricks_to_use = 0;</div><div class='add'>+    int err = 0;</div><div class='add'>+    int start_subvol = 0;</div><div class='add'>+    uint32_t curr_size;</div><div class='add'>+    uint32_t range_size;</div><div class='add'>+    uint64_t total_size = 0;</div><div class='add'>+    int real_i;</div><div class='add'>+    dht_conf_t *priv;</div><div class='add'>+    gf_boolean_t weight_by_size;</div><div class='add'>+    int bricks_used = 0;</div><div class='add'>+</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    weight_by_size = priv-&gt;do_weighting;</div><div class='add'>+</div><div class='add'>+    bricks_to_use = dht_get_layout_count(this, layout, 1);</div><div class='add'>+    GF_ASSERT(bricks_to_use &gt; 0);</div><div class='add'>+</div><div class='add'>+    bricks_used = 0;</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; ++i) {</div><div class='add'>+        err = layout-&gt;list[i].err;</div><div class='add'>+        if ((err != -1) &amp;&amp; (err != ENOENT)) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        curr_size = dht_get_chunks_from_xl(this, layout-&gt;list[i].xlator);</div><div class='add'>+        if (!curr_size) {</div><div class='add'>+            weight_by_size = _gf_false;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        total_size += curr_size;</div><div class='add'>+        if (++bricks_used &gt;= bricks_to_use) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (weight_by_size &amp;&amp; total_size) {</div><div class='add'>+        /* We know total_size is not zero. */</div><div class='add'>+        chunk = ((double)0xffffffff) / ((double)total_size);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "chunk size = 0xffffffff / %lu = %f",</div><div class='add'>+                     total_size, chunk);</div><div class='add'>+    } else {</div><div class='add'>+        weight_by_size = _gf_false;</div><div class='add'>+        chunk = ((unsigned long)0xffffffff) / bricks_to_use;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    start_subvol = dht_selfheal_layout_alloc_start(this, loc, layout);</div><div class='add'>+</div><div class='add'>+    /* clear out the range, as we are re-computing here */</div><div class='add'>+    DHT_RESET_LAYOUT_RANGE(layout);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * OK, what's this "real_i" stuff about?  This used to be two loops -</div><div class='add'>+     * from start_subvol to layout-&gt;cnt-1, then from 0 to start_subvol-1.</div><div class='add'>+     * That way is practically an open invitation to bugs when only one</div><div class='add'>+     * of the loops is updated.  Using real_i and modulo operators to make</div><div class='add'>+     * it one loop avoids this problem.  Remember, folks: it's everyone's</div><div class='add'>+     * responsibility to help stamp out copy/paste abuse.</div><div class='add'>+     */</div><div class='add'>+    bricks_used = 0;</div><div class='add'>+    for (real_i = 0; real_i &lt; layout-&gt;cnt; real_i++) {</div><div class='add'>+        i = (real_i + start_subvol) % layout-&gt;cnt;</div><div class='add'>+        err = layout-&gt;list[i].err;</div><div class='add'>+        if ((err != -1) &amp;&amp; (err != ENOENT)) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (weight_by_size) {</div><div class='add'>+            curr_size = dht_get_chunks_from_xl(this, layout-&gt;list[i].xlator);</div><div class='add'>+            if (!curr_size) {</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            curr_size = 1;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        start_subvol = dht_selfheal_layout_alloc_start (this, loc, layout);</div><div class='del'>-</div><div class='del'>-        /* clear out the range, as we are re-computing here */</div><div class='del'>-        DHT_RESET_LAYOUT_RANGE (layout);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * OK, what's this "real_i" stuff about?  This used to be two loops -</div><div class='del'>-         * from start_subvol to layout-&gt;cnt-1, then from 0 to start_subvol-1.</div><div class='del'>-         * That way is practically an open invitation to bugs when only one</div><div class='del'>-         * of the loops is updated.  Using real_i and modulo operators to make</div><div class='del'>-         * it one loop avoids this problem.  Remember, folks: it's everyone's</div><div class='del'>-         * responsibility to help stamp out copy/paste abuse.</div><div class='del'>-         */</div><div class='del'>-        bricks_used = 0;</div><div class='del'>-        for (real_i = 0; real_i &lt; layout-&gt;cnt; real_i++) {</div><div class='del'>-                i = (real_i + start_subvol) % layout-&gt;cnt;</div><div class='del'>-                err = layout-&gt;list[i].err;</div><div class='del'>-                if ((err != -1) &amp;&amp; (err != ENOENT)) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (weight_by_size) {</div><div class='del'>-                        curr_size = dht_get_chunks_from_xl (this,</div><div class='del'>-                                layout-&gt;list[i].xlator);</div><div class='del'>-                        if (!curr_size) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        curr_size = 1;</div><div class='del'>-                }</div><div class='del'>-                range_size = chunk * curr_size;</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "assigning range size 0x%x to %s",</div><div class='del'>-                              range_size,</div><div class='del'>-                              layout-&gt;list[i].xlator-&gt;name);</div><div class='del'>-                DHT_SET_LAYOUT_RANGE(layout, i, start, range_size,</div><div class='del'>-                                     loc-&gt;path);</div><div class='del'>-                if (++bricks_used &gt;= bricks_to_use) {</div><div class='del'>-                        layout-&gt;list[i].stop = 0xffffffff;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-                start += range_size;</div><div class='add'>+        range_size = chunk * curr_size;</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "assigning range size 0x%x to %s",</div><div class='add'>+                     range_size, layout-&gt;list[i].xlator-&gt;name);</div><div class='add'>+        DHT_SET_LAYOUT_RANGE(layout, i, start, range_size, loc-&gt;path);</div><div class='add'>+        if (++bricks_used &gt;= bricks_to_use) {</div><div class='add'>+            layout-&gt;list[i].stop = 0xffffffff;</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='add'>+        start += range_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_dir_getafix (call_frame_t *frame, loc_t *loc,</div><div class='del'>-                          dht_layout_t *layout)</div><div class='add'>+dht_selfheal_dir_getafix(call_frame_t *frame, loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        uint32_t     holes = 0;</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        int          i = -1;</div><div class='del'>-        uint32_t     overlaps = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        holes = local-&gt;selfheal.hole_cnt;</div><div class='del'>-        overlaps = local-&gt;selfheal.overlaps_cnt;</div><div class='del'>-</div><div class='del'>-        if (holes || overlaps) {</div><div class='del'>-                /* If the layout has anomalies which would change the hash</div><div class='del'>-                 * ranges, then we need to reset the commit_hash for this</div><div class='del'>-                 * directory, as the layout would change and things may not</div><div class='del'>-                 * be in place as expected */</div><div class='del'>-                layout-&gt;commit_hash = DHT_LAYOUT_HASH_INVALID;</div><div class='del'>-                dht_selfheal_layout_new_directory (frame, loc, layout);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    uint32_t holes = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    uint32_t overlaps = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    holes = local-&gt;selfheal.hole_cnt;</div><div class='add'>+    overlaps = local-&gt;selfheal.overlaps_cnt;</div><div class='add'>+</div><div class='add'>+    if (holes || overlaps) {</div><div class='add'>+        /* If the layout has anomalies which would change the hash</div><div class='add'>+         * ranges, then we need to reset the commit_hash for this</div><div class='add'>+         * directory, as the layout would change and things may not</div><div class='add'>+         * be in place as expected */</div><div class='add'>+        layout-&gt;commit_hash = DHT_LAYOUT_HASH_INVALID;</div><div class='add'>+        dht_selfheal_layout_new_directory(frame, loc, layout);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                /* directory not present */</div><div class='del'>-                if (layout-&gt;list[i].err == ENOENT) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        /* directory not present */</div><div class='add'>+        if (layout-&gt;list[i].err == ENOENT) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: give a fix to these non-virgins */</div><div class='add'>+    /* TODO: give a fix to these non-virgins */</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_new_directory (call_frame_t *frame,</div><div class='del'>-                            dht_selfheal_dir_cbk_t dir_cbk,</div><div class='del'>-                            dht_layout_t *layout)</div><div class='add'>+dht_selfheal_new_directory(call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,</div><div class='add'>+                           dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                   = NULL;</div><div class='del'>-        int          ret                     = 0;</div><div class='del'>-        inode_t     *linked_inode            = NULL, *inode = NULL;</div><div class='del'>-        loc_t       *loc                     = NULL;</div><div class='del'>-        char         pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE]  = {0};</div><div class='del'>-        int32_t      op_errno                = EIO;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        loc = &amp;local-&gt;loc;</div><div class='del'>-</div><div class='del'>-        gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='del'>-        gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-        linked_inode = inode_link (loc-&gt;inode, loc-&gt;parent, loc-&gt;name,</div><div class='del'>-                                   &amp;local-&gt;stbuf);</div><div class='del'>-        if (!linked_inode) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                        "linking inode failed (%s/%s) =&gt; %s",</div><div class='del'>-                        pgfid, loc-&gt;name, gfid);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        inode = loc-&gt;inode;</div><div class='del'>-        loc-&gt;inode = linked_inode;</div><div class='del'>-        inode_unref (inode);</div><div class='del'>-</div><div class='del'>-        local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='del'>-        local-&gt;selfheal.layout = dht_layout_ref (frame-&gt;this, layout);</div><div class='del'>-</div><div class='del'>-        dht_layout_sort_volname (layout);</div><div class='del'>-        dht_selfheal_layout_new_directory (frame, &amp;local-&gt;loc, layout);</div><div class='del'>-</div><div class='del'>-        op_errno = ENOMEM;</div><div class='del'>-        ret = dht_selfheal_layout_lock (frame, layout, _gf_true,</div><div class='del'>-                                        dht_selfheal_dir_xattr,</div><div class='del'>-                                        dht_should_heal_layout);</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *linked_inode = NULL, *inode = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int32_t op_errno = EIO;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='add'>+    gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='add'>+</div><div class='add'>+    linked_inode = inode_link(loc-&gt;inode, loc-&gt;parent, loc-&gt;name,</div><div class='add'>+                              &amp;local-&gt;stbuf);</div><div class='add'>+    if (!linked_inode) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+               "linking inode failed (%s/%s) =&gt; %s", pgfid, loc-&gt;name, gfid);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode = loc-&gt;inode;</div><div class='add'>+    loc-&gt;inode = linked_inode;</div><div class='add'>+    inode_unref(inode);</div><div class='add'>+</div><div class='add'>+    local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='add'>+    local-&gt;selfheal.layout = dht_layout_ref(frame-&gt;this, layout);</div><div class='add'>+</div><div class='add'>+    dht_layout_sort_volname(layout);</div><div class='add'>+    dht_selfheal_layout_new_directory(frame, &amp;local-&gt;loc, layout);</div><div class='add'>+</div><div class='add'>+    op_errno = ENOMEM;</div><div class='add'>+    ret = dht_selfheal_layout_lock(frame, layout, _gf_true,</div><div class='add'>+                                   dht_selfheal_dir_xattr,</div><div class='add'>+                                   dht_should_heal_layout);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                dir_cbk (frame, NULL, frame-&gt;this, -1, op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        dir_cbk(frame, NULL, frame-&gt;this, -1, op_errno, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_fix_directory_layout (call_frame_t *frame,</div><div class='del'>-                          dht_selfheal_dir_cbk_t dir_cbk,</div><div class='del'>-                          dht_layout_t *layout)</div><div class='add'>+dht_fix_directory_layout(call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,</div><div class='add'>+                         dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local      = NULL;</div><div class='del'>-        dht_layout_t *tmp_layout = NULL;</div><div class='del'>-        int           ret        = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_layout_t *tmp_layout = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='del'>-        local-&gt;selfheal.layout = dht_layout_ref (frame-&gt;this, layout);</div><div class='add'>+    local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='add'>+    local-&gt;selfheal.layout = dht_layout_ref(frame-&gt;this, layout);</div><div class='ctx'> </div><div class='del'>-        /* No layout sorting required here */</div><div class='del'>-        tmp_layout = dht_fix_layout_of_directory (frame, &amp;local-&gt;loc, layout);</div><div class='del'>-        if (!tmp_layout) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    /* No layout sorting required here */</div><div class='add'>+    tmp_layout = dht_fix_layout_of_directory(frame, &amp;local-&gt;loc, layout);</div><div class='add'>+    if (!tmp_layout) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_selfheal_layout_lock (frame, tmp_layout, _gf_false,</div><div class='del'>-                                        dht_fix_dir_xattr,</div><div class='del'>-                                        dht_should_fix_layout);</div><div class='add'>+    ret = dht_selfheal_layout_lock(frame, tmp_layout, _gf_false,</div><div class='add'>+                                   dht_fix_dir_xattr, dht_should_fix_layout);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_selfheal_directory (call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,</div><div class='del'>-                        loc_t *loc, dht_layout_t *layout)</div><div class='add'>+dht_selfheal_directory(call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,</div><div class='add'>+                       loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local                   = NULL;</div><div class='del'>-        uint32_t     down                    = 0;</div><div class='del'>-        uint32_t     misc                    = 0;</div><div class='del'>-        int          ret                     = 0;</div><div class='del'>-        xlator_t    *this                    = NULL;</div><div class='del'>-        char         pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        char         gfid[GF_UUID_BUF_SIZE]  = {0};</div><div class='del'>-        inode_t     *linked_inode            = NULL, *inode = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='del'>-        local-&gt;selfheal.layout = dht_layout_ref (this, layout);</div><div class='del'>-</div><div class='del'>-        if (!__is_root_gfid (local-&gt;stbuf.ia_gfid)) {</div><div class='del'>-                gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='del'>-                gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='del'>-</div><div class='del'>-                linked_inode = inode_link (loc-&gt;inode, loc-&gt;parent, loc-&gt;name,</div><div class='del'>-                                           &amp;local-&gt;stbuf);</div><div class='del'>-                if (!linked_inode) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                                "linking inode failed (%s/%s) =&gt; %s",</div><div class='del'>-                                pgfid, loc-&gt;name, gfid);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto sorry_no_fix;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    uint32_t down = 0;</div><div class='add'>+    uint32_t misc = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char pgfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    inode_t *linked_inode = NULL, *inode = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='add'>+    local-&gt;selfheal.layout = dht_layout_ref(this, layout);</div><div class='add'>+</div><div class='add'>+    if (!__is_root_gfid(local-&gt;stbuf.ia_gfid)) {</div><div class='add'>+        gf_uuid_unparse(local-&gt;stbuf.ia_gfid, gfid);</div><div class='add'>+        gf_uuid_unparse(loc-&gt;parent-&gt;gfid, pgfid);</div><div class='ctx'> </div><div class='del'>-                inode = loc-&gt;inode;</div><div class='del'>-                loc-&gt;inode = linked_inode;</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+        linked_inode = inode_link(loc-&gt;inode, loc-&gt;parent, loc-&gt;name,</div><div class='add'>+                                  &amp;local-&gt;stbuf);</div><div class='add'>+        if (!linked_inode) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+                   "linking inode failed (%s/%s) =&gt; %s", pgfid, loc-&gt;name,</div><div class='add'>+                   gfid);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto sorry_no_fix;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dht_layout_anomalies (this, loc, layout,</div><div class='del'>-                              &amp;local-&gt;selfheal.hole_cnt,</div><div class='del'>-                              &amp;local-&gt;selfheal.overlaps_cnt,</div><div class='del'>-                              &amp;local-&gt;selfheal.missing_cnt,</div><div class='del'>-                              &amp;local-&gt;selfheal.down,</div><div class='del'>-                              &amp;local-&gt;selfheal.misc, NULL);</div><div class='del'>-</div><div class='del'>-        down     = local-&gt;selfheal.down;</div><div class='del'>-        misc     = local-&gt;selfheal.misc;</div><div class='del'>-</div><div class='del'>-        if (down) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                        "Directory selfheal failed: %d subvolumes down."</div><div class='del'>-                        "Not fixing. path = %s, gfid = %s",</div><div class='del'>-                        down, loc-&gt;path, gfid);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto sorry_no_fix;</div><div class='del'>-        }</div><div class='add'>+        inode = loc-&gt;inode;</div><div class='add'>+        loc-&gt;inode = linked_inode;</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_layout_anomalies(this, loc, layout, &amp;local-&gt;selfheal.hole_cnt,</div><div class='add'>+                         &amp;local-&gt;selfheal.overlaps_cnt,</div><div class='add'>+                         &amp;local-&gt;selfheal.missing_cnt, &amp;local-&gt;selfheal.down,</div><div class='add'>+                         &amp;local-&gt;selfheal.misc, NULL);</div><div class='add'>+</div><div class='add'>+    down = local-&gt;selfheal.down;</div><div class='add'>+    misc = local-&gt;selfheal.misc;</div><div class='add'>+</div><div class='add'>+    if (down) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+               "Directory selfheal failed: %d subvolumes down."</div><div class='add'>+               "Not fixing. path = %s, gfid = %s",</div><div class='add'>+               down, loc-&gt;path, gfid);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto sorry_no_fix;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (misc) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='del'>-                        "Directory selfheal failed : %d subvolumes "</div><div class='del'>-                        "have unrecoverable errors. path = %s, gfid = %s",</div><div class='del'>-                        misc, loc-&gt;path, gfid);</div><div class='add'>+    if (misc) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_SELFHEAL_FAILED,</div><div class='add'>+               "Directory selfheal failed : %d subvolumes "</div><div class='add'>+               "have unrecoverable errors. path = %s, gfid = %s",</div><div class='add'>+               misc, loc-&gt;path, gfid);</div><div class='ctx'> </div><div class='del'>-                ret = 0;</div><div class='del'>-                goto sorry_no_fix;</div><div class='del'>-        }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto sorry_no_fix;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_layout_sort_volname (layout);</div><div class='del'>-        local-&gt;heal_layout = _gf_true;</div><div class='add'>+    dht_layout_sort_volname(layout);</div><div class='add'>+    local-&gt;heal_layout = _gf_true;</div><div class='ctx'> </div><div class='del'>-        /* Ignore return value as it can be inferred from result of</div><div class='del'>-         * dht_layout_anomalies</div><div class='del'>-         */</div><div class='del'>-        dht_selfheal_dir_getafix (frame, loc, layout);</div><div class='add'>+    /* Ignore return value as it can be inferred from result of</div><div class='add'>+     * dht_layout_anomalies</div><div class='add'>+     */</div><div class='add'>+    dht_selfheal_dir_getafix(frame, loc, layout);</div><div class='ctx'> </div><div class='del'>-        if (!(local-&gt;selfheal.hole_cnt || local-&gt;selfheal.overlaps_cnt ||</div><div class='del'>-              local-&gt;selfheal.missing_cnt)) {</div><div class='del'>-                local-&gt;heal_layout = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if (!(local-&gt;selfheal.hole_cnt || local-&gt;selfheal.overlaps_cnt ||</div><div class='add'>+          local-&gt;selfheal.missing_cnt)) {</div><div class='add'>+        local-&gt;heal_layout = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_selfheal_dir_mkdir (frame, loc, layout, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto sorry_no_fix;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_selfheal_dir_mkdir(frame, loc, layout, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto sorry_no_fix;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> sorry_no_fix:</div><div class='del'>-        /* TODO: need to put appropriate local-&gt;op_errno */</div><div class='del'>-        dht_selfheal_dir_finish (frame, this, ret, 1);</div><div class='add'>+    /* TODO: need to put appropriate local-&gt;op_errno */</div><div class='add'>+    dht_selfheal_dir_finish(frame, this, ret, 1);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_selfheal_restore (call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,</div><div class='del'>-                      loc_t *loc, dht_layout_t *layout)</div><div class='add'>+dht_selfheal_restore(call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk,</div><div class='add'>+                     loc_t *loc, dht_layout_t *layout)</div><div class='ctx'> {</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        dht_local_t *local    = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='del'>-        local-&gt;selfheal.layout = dht_layout_ref (frame-&gt;this, layout);</div><div class='add'>+    local-&gt;selfheal.dir_cbk = dir_cbk;</div><div class='add'>+    local-&gt;selfheal.layout = dht_layout_ref(frame-&gt;this, layout);</div><div class='ctx'> </div><div class='del'>-        ret = dht_selfheal_dir_mkdir (frame, loc, layout, 1);</div><div class='add'>+    ret = dht_selfheal_dir_mkdir(frame, loc, layout, 1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_dir_heal_xattrs (void *data)</div><div class='add'>+dht_dir_heal_xattrs(void *data)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *frame          = NULL;</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *subvol         = NULL;</div><div class='del'>-        xlator_t        *mds_subvol     = NULL;</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        dht_conf_t      *conf           = NULL;</div><div class='del'>-        dict_t          *user_xattr     = NULL;</div><div class='del'>-        dict_t          *internal_xattr = NULL;</div><div class='del'>-        dict_t          *mds_xattr   = NULL;</div><div class='del'>-        dict_t          *xdata          = NULL;</div><div class='del'>-        int              call_cnt       = 0;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        int              uret           = 0;</div><div class='del'>-        int              uflag          = 0;</div><div class='del'>-        int              i              = 0;</div><div class='del'>-        int              xattr_hashed   = 0;</div><div class='del'>-        char     gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-        int32_t    allzero[1]           = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", data, out);</div><div class='del'>-</div><div class='del'>-        frame = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-        mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, out);</div><div class='del'>-        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        if (!mds_subvol) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                        "No mds subvol for %s gfid = %s",</div><div class='del'>-                        local-&gt;loc.path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((local-&gt;loc.inode &amp;&amp; gf_uuid_is_null (local-&gt;loc.inode-&gt;gfid)) ||</div><div class='del'>-            gf_uuid_is_null (local-&gt;loc.gfid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                        "No gfid present so skip heal for path %s gfid = %s",</div><div class='del'>-                        local-&gt;loc.path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        internal_xattr = dict_new ();</div><div class='del'>-        if (!internal_xattr) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='del'>-                        "dictionary creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='del'>-                        "dictionary creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-        user_xattr = dict_new ();</div><div class='del'>-        if (!user_xattr) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='del'>-                        "dictionary creation failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_listxattr (local-&gt;mds_subvol, &amp;local-&gt;loc,</div><div class='del'>-                                &amp;mds_xattr, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                        "failed to list xattrs for "</div><div class='del'>-                        "%s: on %s ",</div><div class='del'>-                        local-&gt;loc.path, local-&gt;mds_subvol-&gt;name);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!mds_xattr)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dht_dir_set_heal_xattr (this, local, user_xattr, mds_xattr,</div><div class='del'>-                                &amp;uret, &amp;uflag);</div><div class='del'>-</div><div class='del'>-        /* To set quota related xattr need to set GLUSTERFS_INTERNAL_FOP_KEY</div><div class='del'>-         * key value to 1</div><div class='del'>-         */</div><div class='del'>-        if (dict_get (user_xattr, QUOTA_LIMIT_KEY) ||</div><div class='del'>-            dict_get (user_xattr, QUOTA_LIMIT_OBJECTS_KEY)) {</div><div class='del'>-                ret = dict_set_int32 (xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary value: key = %s,"</div><div class='del'>-                                " path = %s", GLUSTERFS_INTERNAL_FOP_KEY,</div><div class='del'>-                                 local-&gt;loc.path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (uret &lt;= 0 &amp;&amp; !uflag)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                if (subvol == mds_subvol)</div><div class='del'>-                        continue;</div><div class='del'>-                if (uret || uflag) {</div><div class='del'>-                        ret = syncop_setxattr (subvol, &amp;local-&gt;loc, user_xattr,</div><div class='del'>-                                               0, xdata, NULL);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                xattr_hashed = 1;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                        DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                        "Directory xattr heal failed. Failed to set"</div><div class='del'>-                                        "user xattr on path %s on "</div><div class='del'>-                                        "subvol %s, gfid = %s ",</div><div class='del'>-                                        local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        /* After heal all custom xattr reset internal MDS xattr to 0 */</div><div class='del'>-        if (!xattr_hashed) {</div><div class='del'>-                ret = dht_dict_set_array (internal_xattr,</div><div class='del'>-                                          conf-&gt;mds_xattr_key,</div><div class='del'>-                                          allzero, 1);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dictionary value:key = %s for "</div><div class='del'>-                                "path %s", conf-&gt;mds_xattr_key,</div><div class='del'>-                                local-&gt;loc.path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = syncop_setxattr (mds_subvol, &amp;local-&gt;loc, internal_xattr,</div><div class='del'>-                                       0, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='del'>-                                "Failed to reset internal xattr "</div><div class='del'>-                                "on path %s on subvol %s"</div><div class='del'>-                                "gfid = %s ", local-&gt;loc.path,</div><div class='del'>-                                mds_subvol-&gt;name, gfid);</div><div class='del'>-                }</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dict_t *user_xattr = NULL;</div><div class='add'>+    dict_t *internal_xattr = NULL;</div><div class='add'>+    dict_t *mds_xattr = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int uret = 0;</div><div class='add'>+    int uflag = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int xattr_hashed = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+    int32_t allzero[1] = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", data, out);</div><div class='add'>+</div><div class='add'>+    frame = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+    mds_subvol = local-&gt;mds_subvol;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, out);</div><div class='add'>+    gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    if (!mds_subvol) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+               "No mds subvol for %s gfid = %s", local-&gt;loc.path, gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((local-&gt;loc.inode &amp;&amp; gf_uuid_is_null(local-&gt;loc.inode-&gt;gfid)) ||</div><div class='add'>+        gf_uuid_is_null(local-&gt;loc.gfid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+               "No gfid present so skip heal for path %s gfid = %s",</div><div class='add'>+               local-&gt;loc.path, gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    internal_xattr = dict_new();</div><div class='add'>+    if (!internal_xattr) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='add'>+               "dictionary creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='add'>+               "dictionary creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+</div><div class='add'>+    user_xattr = dict_new();</div><div class='add'>+    if (!user_xattr) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, DHT_MSG_NO_MEMORY, 0,</div><div class='add'>+               "dictionary creation failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_listxattr(local-&gt;mds_subvol, &amp;local-&gt;loc, &amp;mds_xattr, NULL,</div><div class='add'>+                           NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+               "failed to list xattrs for "</div><div class='add'>+               "%s: on %s ",</div><div class='add'>+               local-&gt;loc.path, local-&gt;mds_subvol-&gt;name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!mds_xattr)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dht_dir_set_heal_xattr(this, local, user_xattr, mds_xattr, &amp;uret, &amp;uflag);</div><div class='add'>+</div><div class='add'>+    /* To set quota related xattr need to set GLUSTERFS_INTERNAL_FOP_KEY</div><div class='add'>+     * key value to 1</div><div class='add'>+     */</div><div class='add'>+    if (dict_get(user_xattr, QUOTA_LIMIT_KEY) ||</div><div class='add'>+        dict_get(user_xattr, QUOTA_LIMIT_OBJECTS_KEY)) {</div><div class='add'>+        ret = dict_set_int32(xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary value: key = %s,"</div><div class='add'>+                   " path = %s",</div><div class='add'>+                   GLUSTERFS_INTERNAL_FOP_KEY, local-&gt;loc.path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (uret &lt;= 0 &amp;&amp; !uflag)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        subvol = conf-&gt;subvolumes[i];</div><div class='add'>+        if (subvol == mds_subvol)</div><div class='add'>+            continue;</div><div class='add'>+        if (uret || uflag) {</div><div class='add'>+            ret = syncop_setxattr(subvol, &amp;local-&gt;loc, user_xattr, 0, xdata,</div><div class='add'>+                                  NULL);</div><div class='add'>+            if (ret) {</div><div class='add'>+                xattr_hashed = 1;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                       DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                       "Directory xattr heal failed. Failed to set"</div><div class='add'>+                       "user xattr on path %s on "</div><div class='add'>+                       "subvol %s, gfid = %s ",</div><div class='add'>+                       local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    /* After heal all custom xattr reset internal MDS xattr to 0 */</div><div class='add'>+    if (!xattr_hashed) {</div><div class='add'>+        ret = dht_dict_set_array(internal_xattr, conf-&gt;mds_xattr_key, allzero,</div><div class='add'>+                                 1);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dictionary value:key = %s for "</div><div class='add'>+                   "path %s",</div><div class='add'>+                   conf-&gt;mds_xattr_key, local-&gt;loc.path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ret = syncop_setxattr(mds_subvol, &amp;local-&gt;loc, internal_xattr, 0, NULL,</div><div class='add'>+                              NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='add'>+                   DHT_MSG_DIR_XATTR_HEAL_FAILED,</div><div class='add'>+                   "Failed to reset internal xattr "</div><div class='add'>+                   "on path %s on subvol %s"</div><div class='add'>+                   "gfid = %s ",</div><div class='add'>+                   local-&gt;loc.path, mds_subvol-&gt;name, gfid);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (user_xattr)</div><div class='del'>-                dict_unref (user_xattr);</div><div class='del'>-        if (mds_xattr)</div><div class='del'>-                dict_unref (mds_xattr);</div><div class='del'>-        if (internal_xattr)</div><div class='del'>-                dict_unref (internal_xattr);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (user_xattr)</div><div class='add'>+        dict_unref(user_xattr);</div><div class='add'>+    if (mds_xattr)</div><div class='add'>+        dict_unref(mds_xattr);</div><div class='add'>+    if (internal_xattr)</div><div class='add'>+        dict_unref(internal_xattr);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_dir_heal_xattrs_done (int ret, call_frame_t *sync_frame, void *data)</div><div class='add'>+dht_dir_heal_xattrs_done(int ret, call_frame_t *sync_frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (sync_frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(sync_frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_dir_attr_heal (void *data)</div><div class='add'>+dht_dir_attr_heal(void *data)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *frame      = NULL;</div><div class='del'>-        dht_local_t     *local      = NULL;</div><div class='del'>-        xlator_t        *subvol     = NULL;</div><div class='del'>-        xlator_t        *mds_subvol = NULL;</div><div class='del'>-        xlator_t        *this       = NULL;</div><div class='del'>-        dht_conf_t      *conf  = NULL;</div><div class='del'>-        int              call_cnt = 0;</div><div class='del'>-        int              ret   = -1;</div><div class='del'>-        int              i     = 0;</div><div class='del'>-        char             gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", data, out);</div><div class='del'>-</div><div class='del'>-        frame = data;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        mds_subvol = local-&gt;mds_subvol;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", local, out);</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", conf, out);</div><div class='del'>-</div><div class='del'>-        call_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-</div><div class='del'>-        if (!__is_root_gfid (local-&gt;stbuf.ia_gfid) &amp;&amp; (!mds_subvol)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='del'>-                        "No mds subvol for %s gfid = %s",</div><div class='del'>-                        local-&gt;loc.path, gfid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!__is_root_gfid (local-&gt;stbuf.ia_gfid)) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;subvolumes[i] ==  mds_subvol) {</div><div class='del'>-                                if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                0,  DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='del'>-                                                "mds subvol is down for path "</div><div class='del'>-                                                " %s gfid is %s Unable to set xattr " ,</div><div class='del'>-                                                local-&gt;loc.path, gfid);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *mds_subvol = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char gfid[GF_UUID_BUF_SIZE] = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", data, out);</div><div class='add'>+</div><div class='add'>+    frame = data;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    mds_subvol = local-&gt;mds_subvol;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", local, out);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", conf, out);</div><div class='add'>+</div><div class='add'>+    call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+</div><div class='add'>+    if (!__is_root_gfid(local-&gt;stbuf.ia_gfid) &amp;&amp; (!mds_subvol)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='add'>+               "No mds subvol for %s gfid = %s", local-&gt;loc.path, gfid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!__is_root_gfid(local-&gt;stbuf.ia_gfid)) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;subvolumes[i] == mds_subvol) {</div><div class='add'>+                if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           DHT_MSG_HASHED_SUBVOL_DOWN,</div><div class='add'>+                           "mds subvol is down for path "</div><div class='add'>+                           " %s gfid is %s Unable to set xattr ",</div><div class='add'>+                           local-&gt;loc.path, gfid);</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+        subvol = conf-&gt;subvolumes[i];</div><div class='add'>+        if (!subvol || subvol == mds_subvol)</div><div class='add'>+            continue;</div><div class='add'>+        if (__is_root_gfid(local-&gt;stbuf.ia_gfid)) {</div><div class='add'>+            ret = syncop_setattr(</div><div class='add'>+                subvol, &amp;local-&gt;loc, &amp;local-&gt;stbuf,</div><div class='add'>+                (GF_SET_ATTR_UID | GF_SET_ATTR_GID | GF_SET_ATTR_MODE), NULL,</div><div class='add'>+                NULL, NULL, NULL);</div><div class='add'>+        } else {</div><div class='add'>+            ret = syncop_setattr(</div><div class='add'>+                subvol, &amp;local-&gt;loc, &amp;local-&gt;mds_stbuf,</div><div class='add'>+                (GF_SET_ATTR_UID | GF_SET_ATTR_GID | GF_SET_ATTR_MODE), NULL,</div><div class='add'>+                NULL, NULL, NULL);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                subvol = conf-&gt;subvolumes[i];</div><div class='del'>-                if (!subvol || subvol == mds_subvol)</div><div class='del'>-                        continue;</div><div class='del'>-                if (__is_root_gfid (local-&gt;stbuf.ia_gfid)) {</div><div class='del'>-                        ret = syncop_setattr (subvol, &amp;local-&gt;loc, &amp;local-&gt;stbuf,</div><div class='del'>-                                              (GF_SET_ATTR_UID | GF_SET_ATTR_GID | GF_SET_ATTR_MODE),</div><div class='del'>-                                              NULL, NULL, NULL, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = syncop_setattr (subvol, &amp;local-&gt;loc, &amp;local-&gt;mds_stbuf,</div><div class='del'>-                                              (GF_SET_ATTR_UID | GF_SET_ATTR_GID | GF_SET_ATTR_MODE),</div><div class='del'>-                                              NULL, NULL, NULL, NULL);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_uuid_unparse(local-&gt;loc.gfid, gfid);</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='del'>-                                "Directory attr heal failed. Failed to set"</div><div class='del'>-                                " uid/gid on path %s on subvol %s, gfid = %s ",</div><div class='del'>-                                local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_DIR_ATTR_HEAL_FAILED,</div><div class='add'>+                   "Directory attr heal failed. Failed to set"</div><div class='add'>+                   " uid/gid on path %s on subvol %s, gfid = %s ",</div><div class='add'>+                   local-&gt;loc.path, subvol-&gt;name, gfid);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_dir_attr_heal_done (int ret, call_frame_t *sync_frame, void *data)</div><div class='add'>+dht_dir_attr_heal_done(int ret, call_frame_t *sync_frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        DHT_STACK_DESTROY (sync_frame);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_DESTROY(sync_frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* EXIT: dht_update_commit_hash_for_layout */</div><div class='ctx'> int</div><div class='del'>-dht_update_commit_hash_for_layout_done (call_frame_t *frame, void *cookie,</div><div class='del'>-                       xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *xdata)</div><div class='add'>+dht_update_commit_hash_for_layout_done(call_frame_t *frame, void *cookie,</div><div class='add'>+                                       xlator_t *this, int32_t op_ret,</div><div class='add'>+                                       int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        /* preserve oldest error */</div><div class='del'>-        if (op_ret &amp;&amp; !local-&gt;op_ret) {</div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-        }</div><div class='add'>+    /* preserve oldest error */</div><div class='add'>+    if (op_ret &amp;&amp; !local-&gt;op_ret) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                          local-&gt;op_errno, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_update_commit_hash_for_layout_unlock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+dht_update_commit_hash_for_layout_unlock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = dht_unlock_inodelk (frame, local-&gt;lock[0].layout.my_layout.locks,</div><div class='del'>-                                   local-&gt;lock[0].layout.my_layout.lk_count,</div><div class='del'>-                                   dht_update_commit_hash_for_layout_done);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* preserve oldest error, just ... */</div><div class='del'>-                if (!local-&gt;op_ret) {</div><div class='del'>-                        local-&gt;op_errno = errno;</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                }</div><div class='add'>+    ret = dht_unlock_inodelk(frame, local-&gt;lock[0].layout.my_layout.locks,</div><div class='add'>+                             local-&gt;lock[0].layout.my_layout.lk_count,</div><div class='add'>+                             dht_update_commit_hash_for_layout_done);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* preserve oldest error, just ... */</div><div class='add'>+        if (!local-&gt;op_ret) {</div><div class='add'>+            local-&gt;op_errno = errno;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                        "Winding unlock failed: stale locks left on brick"</div><div class='del'>-                        " %s", local-&gt;loc.path);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+               DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+               "Winding unlock failed: stale locks left on brick"</div><div class='add'>+               " %s",</div><div class='add'>+               local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-                dht_update_commit_hash_for_layout_done (frame, NULL, this,</div><div class='del'>-                                                        0, 0, NULL);</div><div class='del'>-        }</div><div class='add'>+        dht_update_commit_hash_for_layout_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_update_commit_hash_for_layout_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                       xlator_t *this, int op_ret,</div><div class='del'>-                                       int op_errno, dict_t *xdata)</div><div class='add'>+dht_update_commit_hash_for_layout_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                      xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        int           this_call_cnt = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        /* store first failure, just because */</div><div class='del'>-        if (op_ret &amp;&amp; !local-&gt;op_ret) {</div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    /* store first failure, just because */</div><div class='add'>+    if (op_ret &amp;&amp; !local-&gt;op_ret) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='ctx'> </div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                dht_update_commit_hash_for_layout_unlock (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        dht_update_commit_hash_for_layout_unlock(frame, this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_update_commit_hash_for_layout_resume (call_frame_t *frame, void *cookie,</div><div class='del'>-                                          xlator_t *this, int32_t op_ret,</div><div class='del'>-                                          int32_t op_errno, dict_t *xdata)</div><div class='add'>+dht_update_commit_hash_for_layout_resume(call_frame_t *frame, void *cookie,</div><div class='add'>+                                         xlator_t *this, int32_t op_ret,</div><div class='add'>+                                         int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local = NULL;</div><div class='del'>-        int            count = 1, ret = -1, i = 0, j = 0;</div><div class='del'>-        dht_conf_t    *conf = NULL;</div><div class='del'>-        dht_layout_t  *layout = NULL;</div><div class='del'>-        int32_t       *disk_layout = NULL;</div><div class='del'>-        dict_t        **xattr = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = frame-&gt;this-&gt;private;</div><div class='del'>-        count = conf-&gt;local_subvols_cnt;</div><div class='del'>-        layout = local-&gt;layout;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                goto err_done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* We precreate the xattr list as we cannot change call count post the</div><div class='del'>-         * first wind as we may never continue from there. So we finish prep</div><div class='del'>-         * work before winding the setxattrs */</div><div class='del'>-        xattr = GF_CALLOC (count, sizeof (*xattr), gf_common_mt_char);</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                local-&gt;op_errno = errno;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int count = 1, ret = -1, i = 0, j = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int32_t *disk_layout = NULL;</div><div class='add'>+    dict_t **xattr = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = frame-&gt;this-&gt;private;</div><div class='add'>+    count = conf-&gt;local_subvols_cnt;</div><div class='add'>+    layout = local-&gt;layout;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        goto err_done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* We precreate the xattr list as we cannot change call count post the</div><div class='add'>+     * first wind as we may never continue from there. So we finish prep</div><div class='add'>+     * work before winding the setxattrs */</div><div class='add'>+    xattr = GF_CALLOC(count, sizeof(*xattr), gf_common_mt_char);</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        local-&gt;op_errno = errno;</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+               DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+               "Directory commit hash update failed:"</div><div class='add'>+               " %s: Allocation failed",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        /* find the layout index for the subvolume */</div><div class='add'>+        ret = dht_layout_index_for_subvol(layout, conf-&gt;local_subvols[i]);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            local-&gt;op_errno = ENOENT;</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                        "Directory commit hash update failed:"</div><div class='del'>-                        " %s: Allocation failed", local-&gt;loc.path);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                   DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+                   "Directory commit hash update failed:"</div><div class='add'>+                   " %s: (subvol %s) Failed to find disk layout",</div><div class='add'>+                   local-&gt;loc.path, conf-&gt;local_subvols[i]-&gt;name);</div><div class='ctx'> </div><div class='del'>-                goto err;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+        j = ret;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                /* find the layout index for the subvolume */</div><div class='del'>-                ret = dht_layout_index_for_subvol (layout,</div><div class='del'>-                                                   conf-&gt;local_subvols[i]);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_errno = ENOENT;</div><div class='del'>-</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                                "Directory commit hash update failed:"</div><div class='del'>-                                " %s: (subvol %s) Failed to find disk layout",</div><div class='del'>-                                local-&gt;loc.path, conf-&gt;local_subvols[i]-&gt;name);</div><div class='del'>-</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                j = ret;</div><div class='del'>-</div><div class='del'>-                /* update the commit hash for the layout */</div><div class='del'>-                layout-&gt;list[j].commit_hash = layout-&gt;commit_hash;</div><div class='add'>+        /* update the commit hash for the layout */</div><div class='add'>+        layout-&gt;list[j].commit_hash = layout-&gt;commit_hash;</div><div class='ctx'> </div><div class='del'>-                /* extract the current layout */</div><div class='del'>-                ret = dht_disk_layout_extract (this, layout, j, &amp;disk_layout);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = errno;</div><div class='del'>-</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                                "Directory commit hash update failed:"</div><div class='del'>-                                " %s: (subvol %s) Failed to extract disk"</div><div class='del'>-                                " layout", local-&gt;loc.path,</div><div class='del'>-                                conf-&gt;local_subvols[i]-&gt;name);</div><div class='add'>+        /* extract the current layout */</div><div class='add'>+        ret = dht_disk_layout_extract(this, layout, j, &amp;disk_layout);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            local-&gt;op_errno = errno;</div><div class='ctx'> </div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                   DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+                   "Directory commit hash update failed:"</div><div class='add'>+                   " %s: (subvol %s) Failed to extract disk"</div><div class='add'>+                   " layout",</div><div class='add'>+                   local-&gt;loc.path, conf-&gt;local_subvols[i]-&gt;name);</div><div class='ctx'> </div><div class='del'>-                xattr[i] = dict_new ();</div><div class='del'>-                if (!xattr[i]) {</div><div class='del'>-                        local-&gt;op_errno = errno;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                                "Directory commit hash update failed:"</div><div class='del'>-                                " %s: Allocation failed", local-&gt;loc.path);</div><div class='add'>+        xattr[i] = dict_new();</div><div class='add'>+        if (!xattr[i]) {</div><div class='add'>+            local-&gt;op_errno = errno;</div><div class='ctx'> </div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                   DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+                   "Directory commit hash update failed:"</div><div class='add'>+                   " %s: Allocation failed",</div><div class='add'>+                   local-&gt;loc.path);</div><div class='ctx'> </div><div class='del'>-                ret = dict_set_bin (xattr[i], conf-&gt;xattr_name,</div><div class='del'>-                                    disk_layout, 4 * 4);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='del'>-                                "Directory self heal xattr failed:"</div><div class='del'>-                                "%s: (subvol %s) Failed to set xattr"</div><div class='del'>-                                " dictionary,", local-&gt;loc.path,</div><div class='del'>-                                conf-&gt;local_subvols[i]-&gt;name);</div><div class='add'>+        ret = dict_set_bin(xattr[i], conf-&gt;xattr_name, disk_layout, 4 * 4);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                disk_layout = NULL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                   DHT_MSG_DIR_SELFHEAL_XATTR_FAILED,</div><div class='add'>+                   "Directory self heal xattr failed:"</div><div class='add'>+                   "%s: (subvol %s) Failed to set xattr"</div><div class='add'>+                   " dictionary,",</div><div class='add'>+                   local-&gt;loc.path, conf-&gt;local_subvols[i]-&gt;name);</div><div class='ctx'> </div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "setting commit hash %u on subvolume %s"</div><div class='del'>-                              " for %s", layout-&gt;list[j].commit_hash,</div><div class='del'>-                              conf-&gt;local_subvols[i]-&gt;name, local-&gt;loc.path);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+        disk_layout = NULL;</div><div class='ctx'> </div><div class='del'>-        /* wind the setting of the commit hash across the local subvols */</div><div class='del'>-        local-&gt;call_cnt = count;</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        local-&gt;op_errno = 0;</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                     "setting commit hash %u on subvolume %s"</div><div class='add'>+                     " for %s",</div><div class='add'>+                     layout-&gt;list[j].commit_hash, conf-&gt;local_subvols[i]-&gt;name,</div><div class='add'>+                     local-&gt;loc.path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* wind the setting of the commit hash across the local subvols */</div><div class='add'>+    local-&gt;call_cnt = count;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;op_errno = 0;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        STACK_WIND(frame, dht_update_commit_hash_for_layout_cbk,</div><div class='add'>+                   conf-&gt;local_subvols[i],</div><div class='add'>+                   conf-&gt;local_subvols[i]-&gt;fops-&gt;setxattr, &amp;local-&gt;loc,</div><div class='add'>+                   xattr[i], 0, NULL);</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; count; i++)</div><div class='add'>+        dict_unref(xattr[i]);</div><div class='add'>+    GF_FREE(xattr);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+err:</div><div class='add'>+    if (xattr) {</div><div class='ctx'>         for (i = 0; i &lt; count; i++) {</div><div class='del'>-                STACK_WIND (frame, dht_update_commit_hash_for_layout_cbk,</div><div class='del'>-                            conf-&gt;local_subvols[i],</div><div class='del'>-                            conf-&gt;local_subvols[i]-&gt;fops-&gt;setxattr,</div><div class='del'>-                            &amp;local-&gt;loc, xattr[i], 0, NULL);</div><div class='del'>-</div><div class='add'>+            if (xattr[i])</div><div class='add'>+                dict_unref(xattr[i]);</div><div class='ctx'>         }</div><div class='del'>-        for (i = 0; i &lt; count; i++)</div><div class='del'>-                dict_unref (xattr[i]);</div><div class='del'>-        GF_FREE (xattr);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-err:</div><div class='del'>-        if (xattr) {</div><div class='del'>-                for (i = 0; i &lt; count; i++) {</div><div class='del'>-                        if (xattr[i])</div><div class='del'>-                                dict_unref (xattr[i]);</div><div class='del'>-                }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (xattr);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (disk_layout);</div><div class='add'>+    GF_FREE(disk_layout);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        dht_update_commit_hash_for_layout_unlock (frame, this);</div><div class='add'>+    dht_update_commit_hash_for_layout_unlock(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err_done:</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        dht_update_commit_hash_for_layout_done (frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    dht_update_commit_hash_for_layout_done(frame, NULL, this, 0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* ENTER: dht_update_commit_hash_for_layout (see EXIT above)</div><div class='hunk'>@@ -2762,55 +2665,52 @@ err_done:</div><div class='ctx'>  *  - Unlock and return.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-dht_update_commit_hash_for_layout (call_frame_t *frame)</div><div class='add'>+dht_update_commit_hash_for_layout(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t   *local = NULL;</div><div class='del'>-        int            count = 1, ret = -1, i = 0;</div><div class='del'>-        dht_lock_t   **lk_array = NULL;</div><div class='del'>-        dht_conf_t    *conf = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", frame, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf = frame-&gt;this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;defrag)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        count = conf-&gt;local_subvols_cnt;</div><div class='del'>-        lk_array = GF_CALLOC (count, sizeof (*lk_array),</div><div class='del'>-                              gf_common_mt_char);</div><div class='del'>-        if (lk_array == NULL)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                lk_array[i] = dht_lock_new (frame-&gt;this,</div><div class='del'>-                                            conf-&gt;local_subvols[i],</div><div class='del'>-                                            &amp;local-&gt;loc, F_WRLCK,</div><div class='del'>-                                            DHT_LAYOUT_HEAL_DOMAIN, NULL,</div><div class='del'>-                                            FAIL_ON_ANY_ERROR);</div><div class='del'>-                if (lk_array[i] == NULL)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.locks = lk_array;</div><div class='del'>-        local-&gt;lock[0].layout.my_layout.lk_count = count;</div><div class='del'>-</div><div class='del'>-        ret = dht_blocking_inodelk (frame, lk_array, count,</div><div class='del'>-                                    dht_update_commit_hash_for_layout_resume);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='del'>-                local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int count = 1, ret = -1, i = 0;</div><div class='add'>+    dht_lock_t **lk_array = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(frame-&gt;this-&gt;name, frame-&gt;local, err);</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = frame-&gt;this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;defrag)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    count = conf-&gt;local_subvols_cnt;</div><div class='add'>+    lk_array = GF_CALLOC(count, sizeof(*lk_array), gf_common_mt_char);</div><div class='add'>+    if (lk_array == NULL)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        lk_array[i] = dht_lock_new(frame-&gt;this, conf-&gt;local_subvols[i],</div><div class='add'>+                                   &amp;local-&gt;loc, F_WRLCK, DHT_LAYOUT_HEAL_DOMAIN,</div><div class='add'>+                                   NULL, FAIL_ON_ANY_ERROR);</div><div class='add'>+        if (lk_array[i] == NULL)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.locks = lk_array;</div><div class='add'>+    local-&gt;lock[0].layout.my_layout.lk_count = count;</div><div class='add'>+</div><div class='add'>+    ret = dht_blocking_inodelk(frame, lk_array, count,</div><div class='add'>+                               dht_update_commit_hash_for_layout_resume);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.locks = NULL;</div><div class='add'>+        local-&gt;lock[0].layout.my_layout.lk_count = 0;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (lk_array != NULL) {</div><div class='del'>-                dht_lock_array_free (lk_array, count);</div><div class='del'>-                GF_FREE (lk_array);</div><div class='del'>-        }</div><div class='add'>+    if (lk_array != NULL) {</div><div class='add'>+        dht_lock_array_free(lk_array, count);</div><div class='add'>+        GF_FREE(lk_array);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht-shared.c b/xlators/cluster/dht/src/dht-shared.c<br/>index b5f790b111b..5fd97130d22 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-shared.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht-shared.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht-shared.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht-shared.c</a></div><div class='hunk'>@@ -8,36 +8,32 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* TODO: add NS locking */</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> #include "dht-messages.h"</div><div class='ctx'> </div><div class='ctx'> #ifndef MAX</div><div class='del'>-#define MAX(a, b) (((a) &gt; (b))?(a):(b))</div><div class='add'>+#define MAX(a, b) (((a) &gt; (b)) ? (a) : (b))</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define GF_DECIDE_DEFRAG_THROTTLE_COUNT(throttle_count, conf) {         \</div><div class='del'>-                                                                        \</div><div class='del'>-                pthread_mutex_lock (&amp;conf-&gt;defrag-&gt;dfq_mutex);          \</div><div class='del'>-                                                                        \</div><div class='del'>-                if (!strcasecmp (conf-&gt;dthrottle, "lazy"))              \</div><div class='del'>-                        conf-&gt;defrag-&gt;recon_thread_count = 1;           \</div><div class='del'>-                                                                        \</div><div class='del'>-                throttle_count =                                        \</div><div class='del'>-                    MAX ((sysconf(_SC_NPROCESSORS_ONLN) - 4), 4);       \</div><div class='del'>-                                                                        \</div><div class='del'>-                if (!strcasecmp (conf-&gt;dthrottle, "normal"))            \</div><div class='del'>-                        conf-&gt;defrag-&gt;recon_thread_count =              \</div><div class='del'>-                                                 (throttle_count / 2);  \</div><div class='del'>-                                                                        \</div><div class='del'>-                if (!strcasecmp (conf-&gt;dthrottle, "aggressive"))        \</div><div class='del'>-                        conf-&gt;defrag-&gt;recon_thread_count =              \</div><div class='del'>-                                                 throttle_count;        \</div><div class='del'>-                                                                        \</div><div class='del'>-                pthread_mutex_unlock (&amp;conf-&gt;defrag-&gt;dfq_mutex);        \</div><div class='del'>-        }                                                               \</div><div class='add'>+#define GF_DECIDE_DEFRAG_THROTTLE_COUNT(throttle_count, conf)                  \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        pthread_mutex_lock(&amp;conf-&gt;defrag-&gt;dfq_mutex);                          \</div><div class='add'>+                                                                               \</div><div class='add'>+        if (!strcasecmp(conf-&gt;dthrottle, "lazy"))                              \</div><div class='add'>+            conf-&gt;defrag-&gt;recon_thread_count = 1;                              \</div><div class='add'>+                                                                               \</div><div class='add'>+        throttle_count = MAX((sysconf(_SC_NPROCESSORS_ONLN) - 4), 4);          \</div><div class='add'>+                                                                               \</div><div class='add'>+        if (!strcasecmp(conf-&gt;dthrottle, "normal"))                            \</div><div class='add'>+            conf-&gt;defrag-&gt;recon_thread_count = (throttle_count / 2);           \</div><div class='add'>+                                                                               \</div><div class='add'>+        if (!strcasecmp(conf-&gt;dthrottle, "aggressive"))                        \</div><div class='add'>+            conf-&gt;defrag-&gt;recon_thread_count = throttle_count;                 \</div><div class='add'>+                                                                               \</div><div class='add'>+        pthread_mutex_unlock(&amp;conf-&gt;defrag-&gt;dfq_mutex);                        \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> /* TODO:</div><div class='ctx'>    - use volumename in xattr instead of "dht"</div><div class='hunk'>@@ -50,1189 +46,1158 @@ struct volume_options options[];</div><div class='ctx'> extern dht_methods_t dht_methods;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_layout_dump (dht_layout_t  *layout, const char *prefix)</div><div class='add'>+dht_layout_dump(dht_layout_t *layout, const char *prefix)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        char    key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int     i = 0;</div><div class='del'>-</div><div class='del'>-        if (!layout)</div><div class='del'>-                goto out;</div><div class='del'>-        if (!prefix)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "cnt");</div><div class='del'>-        gf_proc_dump_write(key, "%d", layout-&gt;cnt);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "preset");</div><div class='del'>-        gf_proc_dump_write(key, "%d", layout-&gt;preset);</div><div class='del'>-        gf_proc_dump_build_key(key, prefix, "gen");</div><div class='del'>-        gf_proc_dump_write(key, "%d", layout-&gt;gen);</div><div class='del'>-        if (layout-&gt;type != IA_INVAL) {</div><div class='del'>-                gf_proc_dump_build_key(key, prefix, "inode type");</div><div class='del'>-                gf_proc_dump_write(key, "%d", layout-&gt;type);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if  (!IA_ISDIR (layout-&gt;type))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                gf_proc_dump_build_key(key, prefix,"list[%d].err", i);</div><div class='del'>-                gf_proc_dump_write(key, "%d", layout-&gt;list[i].err);</div><div class='del'>-                gf_proc_dump_build_key(key, prefix,"list[%d].start", i);</div><div class='del'>-                gf_proc_dump_write(key, "%u", layout-&gt;list[i].start);</div><div class='del'>-                gf_proc_dump_build_key(key, prefix,"list[%d].stop", i);</div><div class='del'>-                gf_proc_dump_write(key, "%u", layout-&gt;list[i].stop);</div><div class='del'>-                if (layout-&gt;list[i].xlator) {</div><div class='del'>-                        gf_proc_dump_build_key(key, prefix,</div><div class='del'>-                                               "list[%d].xlator.type", i);</div><div class='del'>-                        gf_proc_dump_write(key, "%s",</div><div class='del'>-                                           layout-&gt;list[i].xlator-&gt;type);</div><div class='del'>-                        gf_proc_dump_build_key(key, prefix,</div><div class='del'>-                                               "list[%d].xlator.name", i);</div><div class='del'>-                        gf_proc_dump_write(key, "%s",</div><div class='del'>-                                           layout-&gt;list[i].xlator-&gt;name);</div><div class='del'>-                }</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    if (!layout)</div><div class='add'>+        goto out;</div><div class='add'>+    if (!prefix)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "cnt");</div><div class='add'>+    gf_proc_dump_write(key, "%d", layout-&gt;cnt);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "preset");</div><div class='add'>+    gf_proc_dump_write(key, "%d", layout-&gt;preset);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "gen");</div><div class='add'>+    gf_proc_dump_write(key, "%d", layout-&gt;gen);</div><div class='add'>+    if (layout-&gt;type != IA_INVAL) {</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "inode type");</div><div class='add'>+        gf_proc_dump_write(key, "%d", layout-&gt;type);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISDIR(layout-&gt;type))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "list[%d].err", i);</div><div class='add'>+        gf_proc_dump_write(key, "%d", layout-&gt;list[i].err);</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "list[%d].start", i);</div><div class='add'>+        gf_proc_dump_write(key, "%u", layout-&gt;list[i].start);</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "list[%d].stop", i);</div><div class='add'>+        gf_proc_dump_write(key, "%u", layout-&gt;list[i].stop);</div><div class='add'>+        if (layout-&gt;list[i].xlator) {</div><div class='add'>+            gf_proc_dump_build_key(key, prefix, "list[%d].xlator.type", i);</div><div class='add'>+            gf_proc_dump_write(key, "%s", layout-&gt;list[i].xlator-&gt;type);</div><div class='add'>+            gf_proc_dump_build_key(key, prefix, "list[%d].xlator.name", i);</div><div class='add'>+            gf_proc_dump_write(key, "%s", layout-&gt;list[i].xlator-&gt;name);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dht_priv_dump (xlator_t *this)</div><div class='add'>+dht_priv_dump(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        char            key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int             i = 0;</div><div class='del'>-        dht_conf_t      *conf = NULL;</div><div class='del'>-        int             ret = -1;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                return ret;</div><div class='add'>+    ret = TRY_LOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_add_section("xlator.cluster.dht.%s.priv", this-&gt;name);</div><div class='add'>+    gf_proc_dump_build_key(key_prefix, "xlator.cluster.dht", "%s.priv",</div><div class='add'>+                           this-&gt;name);</div><div class='add'>+    gf_proc_dump_write("subvol_cnt", "%d", conf-&gt;subvolume_cnt);</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "subvolumes[%d]", i);</div><div class='add'>+        gf_proc_dump_write(key, "%s.%s", conf-&gt;subvolumes[i]-&gt;type,</div><div class='add'>+                           conf-&gt;subvolumes[i]-&gt;name);</div><div class='add'>+        if (conf-&gt;file_layouts &amp;&amp; conf-&gt;file_layouts[i]) {</div><div class='add'>+            snprintf(key, sizeof(key), "file_layouts[%d]", i);</div><div class='add'>+            dht_layout_dump(conf-&gt;file_layouts[i], key);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_add_section("xlator.cluster.dht.%s.priv", this-&gt;name);</div><div class='del'>-        gf_proc_dump_build_key(key_prefix,"xlator.cluster.dht","%s.priv",</div><div class='del'>-                               this-&gt;name);</div><div class='del'>-        gf_proc_dump_write("subvol_cnt","%d", conf-&gt;subvolume_cnt);</div><div class='add'>+        if (conf-&gt;dir_layouts &amp;&amp; conf-&gt;dir_layouts[i]) {</div><div class='add'>+            snprintf(key, sizeof(key), "dir_layouts[%d]", i);</div><div class='add'>+            dht_layout_dump(conf-&gt;dir_layouts[i], key);</div><div class='add'>+        }</div><div class='add'>+        if (conf-&gt;subvolume_status) {</div><div class='add'>+            snprintf(key, sizeof(key), "subvolume_status[%d]", i);</div><div class='add'>+            gf_proc_dump_write(key, "%d", (int)conf-&gt;subvolume_status[i]);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_write("search_unhashed", "%d", conf-&gt;search_unhashed);</div><div class='add'>+    gf_proc_dump_write("gen", "%d", conf-&gt;gen);</div><div class='add'>+    gf_proc_dump_write("min_free_disk", "%lf", conf-&gt;min_free_disk);</div><div class='add'>+    gf_proc_dump_write("min_free_inodes", "%lf", conf-&gt;min_free_inodes);</div><div class='add'>+    gf_proc_dump_write("disk_unit", "%c", conf-&gt;disk_unit);</div><div class='add'>+    gf_proc_dump_write("refresh_interval", "%d", conf-&gt;refresh_interval);</div><div class='add'>+    gf_proc_dump_write("unhashed_sticky_bit", "%d", conf-&gt;unhashed_sticky_bit);</div><div class='add'>+    gf_proc_dump_write("use-readdirp", "%d", conf-&gt;use_readdirp);</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;du_stats &amp;&amp; conf-&gt;subvolume_status) {</div><div class='ctx'>         for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "subvolumes[%d]", i);</div><div class='del'>-                gf_proc_dump_write(key, "%s.%s", conf-&gt;subvolumes[i]-&gt;type,</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;name);</div><div class='del'>-                if (conf-&gt;file_layouts &amp;&amp; conf-&gt;file_layouts[i]){</div><div class='del'>-                        snprintf (key, sizeof (key), "file_layouts[%d]", i);</div><div class='del'>-                        dht_layout_dump(conf-&gt;file_layouts[i], key);</div><div class='del'>-                }</div><div class='del'>-                if (conf-&gt;dir_layouts &amp;&amp; conf-&gt;dir_layouts[i]) {</div><div class='del'>-                        snprintf (key, sizeof (key), "dir_layouts[%d]", i);</div><div class='del'>-                        dht_layout_dump(conf-&gt;dir_layouts[i], key);</div><div class='del'>-                }</div><div class='del'>-                if (conf-&gt;subvolume_status) {</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "subvolume_status[%d]", i);</div><div class='del'>-                        gf_proc_dump_write(key, "%d",</div><div class='del'>-                                           (int)conf-&gt;subvolume_status[i]);</div><div class='del'>-                }</div><div class='add'>+            if (!conf-&gt;subvolume_status[i])</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+            snprintf(key, sizeof(key), "subvolumes[%d]", i);</div><div class='add'>+            gf_proc_dump_write(key, "%s", conf-&gt;subvolumes[i]-&gt;name);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "du_stats[%d].avail_percent", i);</div><div class='add'>+            gf_proc_dump_write(key, "%lf", conf-&gt;du_stats[i].avail_percent);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "du_stats[%d].avail_space", i);</div><div class='add'>+            gf_proc_dump_write(key, "%lu", conf-&gt;du_stats[i].avail_space);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write("search_unhashed", "%d", conf-&gt;search_unhashed);</div><div class='del'>-        gf_proc_dump_write("gen", "%d", conf-&gt;gen);</div><div class='del'>-        gf_proc_dump_write("min_free_disk", "%lf", conf-&gt;min_free_disk);</div><div class='del'>-        gf_proc_dump_write("min_free_inodes", "%lf", conf-&gt;min_free_inodes);</div><div class='del'>-        gf_proc_dump_write("disk_unit", "%c", conf-&gt;disk_unit);</div><div class='del'>-        gf_proc_dump_write("refresh_interval", "%d", conf-&gt;refresh_interval);</div><div class='del'>-        gf_proc_dump_write("unhashed_sticky_bit", "%d", conf-&gt;unhashed_sticky_bit);</div><div class='del'>-        gf_proc_dump_write("use-readdirp", "%d", conf-&gt;use_readdirp);</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;du_stats &amp;&amp; conf-&gt;subvolume_status) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (!conf-&gt;subvolume_status[i])</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "subvolumes[%d]", i);</div><div class='del'>-                        gf_proc_dump_write (key, "%s",</div><div class='del'>-                                            conf-&gt;subvolumes[i]-&gt;name);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                  "du_stats[%d].avail_percent", i);</div><div class='del'>-                        gf_proc_dump_write (key, "%lf",</div><div class='del'>-                                            conf-&gt;du_stats[i].avail_percent);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "du_stats[%d].avail_space",</div><div class='del'>-                                  i);</div><div class='del'>-                        gf_proc_dump_write (key, "%lu",</div><div class='del'>-                                            conf-&gt;du_stats[i].avail_space);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key),</div><div class='del'>-                                  "du_stats[%d].avail_inodes", i);</div><div class='del'>-                        gf_proc_dump_write (key, "%lf",</div><div class='del'>-                                            conf-&gt;du_stats[i].avail_inodes);</div><div class='del'>-</div><div class='del'>-                        snprintf (key, sizeof (key), "du_stats[%d].log", i);</div><div class='del'>-                        gf_proc_dump_write (key, "%lu",</div><div class='del'>-                                            conf-&gt;du_stats[i].log);</div><div class='del'>-                }</div><div class='add'>+            snprintf(key, sizeof(key), "du_stats[%d].avail_inodes", i);</div><div class='add'>+            gf_proc_dump_write(key, "%lf", conf-&gt;du_stats[i].avail_inodes);</div><div class='add'>+</div><div class='add'>+            snprintf(key, sizeof(key), "du_stats[%d].log", i);</div><div class='add'>+            gf_proc_dump_write(key, "%lu", conf-&gt;du_stats[i].log);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;last_stat_fetch.tv_sec)</div><div class='del'>-                gf_proc_dump_write("last_stat_fetch", "%s",</div><div class='del'>-                                    ctime(&amp;conf-&gt;last_stat_fetch.tv_sec));</div><div class='add'>+    if (conf-&gt;last_stat_fetch.tv_sec)</div><div class='add'>+        gf_proc_dump_write("last_stat_fetch", "%s",</div><div class='add'>+                           ctime(&amp;conf-&gt;last_stat_fetch.tv_sec));</div><div class='ctx'> </div><div class='del'>-        UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    UNLOCK(&amp;conf-&gt;subvolume_lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht_inodectx_dump (xlator_t *this, inode_t *inode)</div><div class='add'>+dht_inodectx_dump(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        dht_layout_t    *layout = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='del'>-        if (!inode)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='add'>+    if (!inode)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dht_inode_ctx_layout_get (inode, this, &amp;layout);</div><div class='add'>+    ret = dht_inode_ctx_layout_get(inode, this, &amp;layout);</div><div class='ctx'> </div><div class='del'>-        if ((ret != 0) || !layout)</div><div class='del'>-                return ret;</div><div class='add'>+    if ((ret != 0) || !layout)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section("xlator.cluster.dht.%s.inode", this-&gt;name);</div><div class='del'>-        dht_layout_dump(layout, "layout");</div><div class='add'>+    gf_proc_dump_add_section("xlator.cluster.dht.%s.inode", this-&gt;name);</div><div class='add'>+    dht_layout_dump(layout, "layout");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht_fini (xlator_t *this)</div><div class='add'>+dht_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int         i = 0;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        if (conf) {</div><div class='del'>-                if (conf-&gt;file_layouts) {</div><div class='del'>-                        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                GF_FREE (conf-&gt;file_layouts[i]);</div><div class='del'>-                        }</div><div class='del'>-                        GF_FREE (conf-&gt;file_layouts);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dict_unref(conf-&gt;leaf_to_subvol);</div><div class='del'>-</div><div class='del'>-                /* allocated in dht_init_subvolumes() */</div><div class='del'>-                GF_FREE (conf-&gt;subvolumes);</div><div class='del'>-                GF_FREE (conf-&gt;subvolume_status);</div><div class='del'>-                GF_FREE (conf-&gt;last_event);</div><div class='del'>-                GF_FREE (conf-&gt;subvol_up_time);</div><div class='del'>-                GF_FREE (conf-&gt;du_stats);</div><div class='del'>-                GF_FREE (conf-&gt;decommissioned_bricks);</div><div class='del'>-</div><div class='del'>-                /* allocated in dht_init() */</div><div class='del'>-                GF_FREE (conf-&gt;mds_xattr_key);</div><div class='del'>-                GF_FREE (conf-&gt;link_xattr_name);</div><div class='del'>-                GF_FREE (conf-&gt;commithash_xattr_name);</div><div class='del'>-                GF_FREE (conf-&gt;wild_xattr_name);</div><div class='del'>-</div><div class='del'>-                /* allocated in dht_init_regex() */</div><div class='del'>-                if (conf-&gt;rsync_regex_valid)</div><div class='del'>-                        regfree (&amp;conf-&gt;rsync_regex);</div><div class='del'>-                if (conf-&gt;extra_regex_valid)</div><div class='del'>-                        regfree (&amp;conf-&gt;extra_regex);</div><div class='del'>-</div><div class='del'>-                synclock_destroy (&amp;conf-&gt;link_lock);</div><div class='del'>-</div><div class='del'>-                if (conf-&gt;lock_pool)</div><div class='del'>-                        mem_pool_destroy (conf-&gt;lock_pool);</div><div class='del'>-</div><div class='del'>-                GF_FREE (conf);</div><div class='add'>+    int i = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    if (conf) {</div><div class='add'>+        if (conf-&gt;file_layouts) {</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                GF_FREE(conf-&gt;file_layouts[i]);</div><div class='add'>+            }</div><div class='add'>+            GF_FREE(conf-&gt;file_layouts);</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        dict_unref(conf-&gt;leaf_to_subvol);</div><div class='add'>+</div><div class='add'>+        /* allocated in dht_init_subvolumes() */</div><div class='add'>+        GF_FREE(conf-&gt;subvolumes);</div><div class='add'>+        GF_FREE(conf-&gt;subvolume_status);</div><div class='add'>+        GF_FREE(conf-&gt;last_event);</div><div class='add'>+        GF_FREE(conf-&gt;subvol_up_time);</div><div class='add'>+        GF_FREE(conf-&gt;du_stats);</div><div class='add'>+        GF_FREE(conf-&gt;decommissioned_bricks);</div><div class='add'>+</div><div class='add'>+        /* allocated in dht_init() */</div><div class='add'>+        GF_FREE(conf-&gt;mds_xattr_key);</div><div class='add'>+        GF_FREE(conf-&gt;link_xattr_name);</div><div class='add'>+        GF_FREE(conf-&gt;commithash_xattr_name);</div><div class='add'>+        GF_FREE(conf-&gt;wild_xattr_name);</div><div class='add'>+</div><div class='add'>+        /* allocated in dht_init_regex() */</div><div class='add'>+        if (conf-&gt;rsync_regex_valid)</div><div class='add'>+            regfree(&amp;conf-&gt;rsync_regex);</div><div class='add'>+        if (conf-&gt;extra_regex_valid)</div><div class='add'>+            regfree(&amp;conf-&gt;extra_regex);</div><div class='add'>+</div><div class='add'>+        synclock_destroy(&amp;conf-&gt;link_lock);</div><div class='add'>+</div><div class='add'>+        if (conf-&gt;lock_pool)</div><div class='add'>+            mem_pool_destroy(conf-&gt;lock_pool);</div><div class='add'>+</div><div class='add'>+        GF_FREE(conf);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_dht_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_dht_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "Memory accounting init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_parse_decommissioned_bricks (xlator_t *this, dht_conf_t *conf,</div><div class='del'>-                                 const char *bricks)</div><div class='add'>+dht_parse_decommissioned_bricks(xlator_t *this, dht_conf_t *conf,</div><div class='add'>+                                const char *bricks)</div><div class='ctx'> {</div><div class='del'>-        int         i  = 0;</div><div class='del'>-        int         ret  = -1;</div><div class='del'>-        char       *tmpstr = NULL;</div><div class='del'>-        char       *dup_brick = NULL;</div><div class='del'>-        char       *node = NULL;</div><div class='del'>-</div><div class='del'>-        if (!conf || !bricks)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dup_brick = gf_strdup (bricks);</div><div class='del'>-        node = strtok_r (dup_brick, ",", &amp;tmpstr);</div><div class='del'>-        while (node) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (!strcmp (conf-&gt;subvolumes[i]-&gt;name, node)) {</div><div class='del'>-                                conf-&gt;decommissioned_bricks[i] =</div><div class='del'>-                                        conf-&gt;subvolumes[i];</div><div class='del'>-                                        conf-&gt;decommission_subvols_cnt++;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_SUBVOL_DECOMMISSION_INFO,</div><div class='del'>-                                        "decommissioning subvolume %s",</div><div class='del'>-                                        conf-&gt;subvolumes[i]-&gt;name);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (i == conf-&gt;subvolume_cnt) {</div><div class='del'>-                        /* Wrong node given. */</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                node = strtok_r (NULL, ",", &amp;tmpstr);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *tmpstr = NULL;</div><div class='add'>+    char *dup_brick = NULL;</div><div class='add'>+    char *node = NULL;</div><div class='add'>+</div><div class='add'>+    if (!conf || !bricks)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    dup_brick = gf_strdup(bricks);</div><div class='add'>+    node = strtok_r(dup_brick, ",", &amp;tmpstr);</div><div class='add'>+    while (node) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (!strcmp(conf-&gt;subvolumes[i]-&gt;name, node)) {</div><div class='add'>+                conf-&gt;decommissioned_bricks[i] = conf-&gt;subvolumes[i];</div><div class='add'>+                conf-&gt;decommission_subvols_cnt++;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                       DHT_MSG_SUBVOL_DECOMMISSION_INFO,</div><div class='add'>+                       "decommissioning subvolume %s",</div><div class='add'>+                       conf-&gt;subvolumes[i]-&gt;name);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        if (i == conf-&gt;subvolume_cnt) {</div><div class='add'>+            /* Wrong node given. */</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        node = strtok_r(NULL, ",", &amp;tmpstr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        conf-&gt;decommission_in_progress = 1;</div><div class='add'>+    ret = 0;</div><div class='add'>+    conf-&gt;decommission_in_progress = 1;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (dup_brick);</div><div class='add'>+    GF_FREE(dup_brick);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_decommissioned_remove (xlator_t *this, dht_conf_t *conf)</div><div class='add'>+dht_decommissioned_remove(xlator_t *this, dht_conf_t *conf)</div><div class='ctx'> {</div><div class='del'>-        int         i  = 0;</div><div class='del'>-        int         ret  = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (conf-&gt;decommissioned_bricks[i]) {</div><div class='del'>-                        conf-&gt;decommissioned_bricks[i] = NULL;</div><div class='del'>-                        conf-&gt;decommission_subvols_cnt--;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (conf-&gt;decommissioned_bricks[i]) {</div><div class='add'>+            conf-&gt;decommissioned_bricks[i] = NULL;</div><div class='add'>+            conf-&gt;decommission_subvols_cnt--;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> void</div><div class='del'>-dht_init_regex (xlator_t *this, dict_t *odict, char *name,</div><div class='del'>-                regex_t *re, gf_boolean_t *re_valid, dht_conf_t *conf)</div><div class='add'>+dht_init_regex(xlator_t *this, dict_t *odict, char *name, regex_t *re,</div><div class='add'>+               gf_boolean_t *re_valid, dht_conf_t *conf)</div><div class='ctx'> {</div><div class='del'>-        char       *temp_str = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (odict, name, &amp;temp_str) != 0) {</div><div class='del'>-                if (strcmp(name,"rsync-hash-regex")) {</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-                temp_str = "^\\.(.+)\\.[^.]+$";</div><div class='add'>+    if (dict_get_str(odict, name, &amp;temp_str) != 0) {</div><div class='add'>+        if (strcmp(name, "rsync-hash-regex")) {</div><div class='add'>+            return;</div><div class='add'>+        }</div><div class='add'>+        temp_str = "^\\.(.+)\\.[^.]+$";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (*re_valid) {</div><div class='add'>+            regfree(re);</div><div class='add'>+            *re_valid = _gf_false;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (!strcmp(temp_str, "none")) {</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (*re_valid) {</div><div class='del'>-                        regfree(re);</div><div class='del'>-                        *re_valid = _gf_false;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!strcmp(temp_str, "none")) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (regcomp(re, temp_str, REG_EXTENDED) == 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "using regex %s = %s", name, temp_str);</div><div class='del'>-                        *re_valid = _gf_true;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_REGEX_INFO,</div><div class='del'>-                                "compiling regex %s failed", temp_str);</div><div class='del'>-                }</div><div class='add'>+        if (regcomp(re, temp_str, REG_EXTENDED) == 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "using regex %s = %s", name, temp_str);</div><div class='add'>+            *re_valid = _gf_true;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_REGEX_INFO,</div><div class='add'>+                   "compiling regex %s failed", temp_str);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> dht_set_subvol_range(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;leaf_to_subvol = dict_new();</div><div class='del'>-        if (!conf-&gt;leaf_to_subvol)</div><div class='del'>-                goto out;</div><div class='add'>+    conf-&gt;leaf_to_subvol = dict_new();</div><div class='add'>+    if (!conf-&gt;leaf_to_subvol)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = glusterfs_reachable_leaves(this, conf-&gt;leaf_to_subvol);</div><div class='add'>+    ret = glusterfs_reachable_leaves(this, conf-&gt;leaf_to_subvol);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_configure_throttle (xlator_t *this, dht_conf_t *conf, char *temp_str)</div><div class='add'>+dht_configure_throttle(xlator_t *this, dht_conf_t *conf, char *temp_str)</div><div class='ctx'> {</div><div class='del'>-        int     rebal_thread_count      = 0;</div><div class='del'>-        int     ret                     = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;conf-&gt;defrag-&gt;dfq_mutex);</div><div class='del'>-        {</div><div class='del'>-        if (!strcasecmp (temp_str, "lazy")) {</div><div class='del'>-                conf-&gt;defrag-&gt;recon_thread_count = 1;</div><div class='del'>-        } else if (!strcasecmp (temp_str, "normal")) {</div><div class='del'>-                conf-&gt;defrag-&gt;recon_thread_count = 2;</div><div class='del'>-        } else if (!strcasecmp (temp_str, "aggressive")) {</div><div class='del'>-                conf-&gt;defrag-&gt;recon_thread_count = MAX (MAX_REBAL_THREADS - 4, 4);</div><div class='del'>-        } else if ((gf_string2int (temp_str, &amp;rebal_thread_count) == 0)) {</div><div class='del'>-                if ((rebal_thread_count &gt; 0) &amp;&amp; (rebal_thread_count &lt;= MAX_REBAL_THREADS)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='del'>-                                "rebal thread count configured to %d",</div><div class='del'>-                                rebal_thread_count);</div><div class='del'>-                                conf-&gt;defrag-&gt;recon_thread_count = rebal_thread_count;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_INVALID_OPTION,</div><div class='del'>-                                "Invalid option: Reconfigure: "</div><div class='del'>-                                "rebal-throttle should be "</div><div class='del'>-                                "within range of 0 and maximum number of"</div><div class='del'>-                                " cores available");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                pthread_mutex_unlock (&amp;conf-&gt;defrag-&gt;dfq_mutex);</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+    int rebal_thread_count = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;conf-&gt;defrag-&gt;dfq_mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!strcasecmp(temp_str, "lazy")) {</div><div class='add'>+            conf-&gt;defrag-&gt;recon_thread_count = 1;</div><div class='add'>+        } else if (!strcasecmp(temp_str, "normal")) {</div><div class='add'>+            conf-&gt;defrag-&gt;recon_thread_count = 2;</div><div class='add'>+        } else if (!strcasecmp(temp_str, "aggressive")) {</div><div class='add'>+            conf-&gt;defrag-&gt;recon_thread_count = MAX(MAX_REBAL_THREADS - 4, 4);</div><div class='add'>+        } else if ((gf_string2int(temp_str, &amp;rebal_thread_count) == 0)) {</div><div class='add'>+            if ((rebal_thread_count &gt; 0) &amp;&amp;</div><div class='add'>+                (rebal_thread_count &lt;= MAX_REBAL_THREADS)) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+                       "rebal thread count configured to %d",</div><div class='add'>+                       rebal_thread_count);</div><div class='add'>+                conf-&gt;defrag-&gt;recon_thread_count = rebal_thread_count;</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_OPTION,</div><div class='add'>+                       "Invalid option: Reconfigure: "</div><div class='add'>+                       "rebal-throttle should be "</div><div class='add'>+                       "within range of 0 and maximum number of"</div><div class='add'>+                       " cores available");</div><div class='add'>+                ret = -1;</div><div class='add'>+                pthread_mutex_unlock(&amp;conf-&gt;defrag-&gt;dfq_mutex);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_INVALID_OPTION,</div><div class='del'>-                        "Invalid option: Reconfigure: "</div><div class='del'>-                        "rebal-throttle should be {lazy|normal|aggressive}"</div><div class='del'>-                        " or a number up to the number of cores available,"</div><div class='del'>-                        " not (%s), defaulting to (%d)",</div><div class='del'>-                        temp_str, conf-&gt;dthrottle);</div><div class='del'>-                        ret = -1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_OPTION,</div><div class='add'>+                   "Invalid option: Reconfigure: "</div><div class='add'>+                   "rebal-throttle should be {lazy|normal|aggressive}"</div><div class='add'>+                   " or a number up to the number of cores available,"</div><div class='add'>+                   " not (%s), defaulting to (%d)",</div><div class='add'>+                   temp_str, conf-&gt;dthrottle);</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;conf-&gt;defrag-&gt;dfq_mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;conf-&gt;defrag-&gt;dfq_mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+dht_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t      *conf = NULL;</div><div class='del'>-        char            *temp_str = NULL;</div><div class='del'>-        gf_boolean_t     search_unhashed;</div><div class='del'>-        int              ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", options, out);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (options, "lookup-unhashed", &amp;temp_str) == 0) {</div><div class='del'>-                /* If option is not "auto", other options _should_ be boolean*/</div><div class='del'>-                if (strcasecmp (temp_str, "auto")) {</div><div class='del'>-                        if (!gf_string2boolean (temp_str, &amp;search_unhashed)) {</div><div class='del'>-                                gf_msg_debug(this-&gt;name, 0, "Reconfigure: "</div><div class='del'>-                                             "lookup-unhashed reconfigured(%s)",</div><div class='del'>-                                             temp_str);</div><div class='del'>-                                conf-&gt;search_unhashed = search_unhashed;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                       DHT_MSG_INVALID_OPTION,</div><div class='del'>-                                       "Invalid option: Reconfigure: "</div><div class='del'>-                                       "lookup-unhashed should be boolean,"</div><div class='del'>-                                       " not (%s), defaulting to (%d)",</div><div class='del'>-                                       temp_str, conf-&gt;search_unhashed);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug(this-&gt;name, 0, "Reconfigure:"</div><div class='del'>-                                     " lookup-unhashed reconfigured auto ");</div><div class='del'>-                        conf-&gt;search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    gf_boolean_t search_unhashed;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("lookup-optimize", conf-&gt;lookup_optimize, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", options, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("min-free-disk", conf-&gt;min_free_disk, options,</div><div class='del'>-                          percent_or_size, out);</div><div class='del'>-        /* option can be any one of percent or bytes */</div><div class='del'>-        conf-&gt;disk_unit = 0;</div><div class='del'>-        if (conf-&gt;min_free_disk &lt; 100.0)</div><div class='del'>-                conf-&gt;disk_unit = 'p';</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("min-free-inodes", conf-&gt;min_free_inodes, options,</div><div class='del'>-                          percent, out);</div><div class='add'>+    if (dict_get_str(options, "lookup-unhashed", &amp;temp_str) == 0) {</div><div class='add'>+        /* If option is not "auto", other options _should_ be boolean*/</div><div class='add'>+        if (strcasecmp(temp_str, "auto")) {</div><div class='add'>+            if (!gf_string2boolean(temp_str, &amp;search_unhashed)) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Reconfigure: "</div><div class='add'>+                             "lookup-unhashed reconfigured(%s)",</div><div class='add'>+                             temp_str);</div><div class='add'>+                conf-&gt;search_unhashed = search_unhashed;</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_OPTION,</div><div class='add'>+                       "Invalid option: Reconfigure: "</div><div class='add'>+                       "lookup-unhashed should be boolean,"</div><div class='add'>+                       " not (%s), defaulting to (%d)",</div><div class='add'>+                       temp_str, conf-&gt;search_unhashed);</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Reconfigure:"</div><div class='add'>+                         " lookup-unhashed reconfigured auto ");</div><div class='add'>+            conf-&gt;search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("directory-layout-spread", conf-&gt;dir_spread_cnt,</div><div class='del'>-                          options, uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("lookup-optimize", conf-&gt;lookup_optimize, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("readdir-optimize", conf-&gt;readdir_optimize, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-        GF_OPTION_RECONF ("randomize-hash-range-by-gfid",</div><div class='del'>-                          conf-&gt;randomize_by_gfid,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("min-free-disk", conf-&gt;min_free_disk, options,</div><div class='add'>+                     percent_or_size, out);</div><div class='add'>+    /* option can be any one of percent or bytes */</div><div class='add'>+    conf-&gt;disk_unit = 0;</div><div class='add'>+    if (conf-&gt;min_free_disk &lt; 100.0)</div><div class='add'>+        conf-&gt;disk_unit = 'p';</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("lock-migration", conf-&gt;lock_migration_enabled,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("min-free-inodes", conf-&gt;min_free_inodes, options, percent,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("force-migration", conf-&gt;force_migration,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("directory-layout-spread", conf-&gt;dir_spread_cnt, options,</div><div class='add'>+                     uint32, out);</div><div class='ctx'> </div><div class='add'>+    GF_OPTION_RECONF("readdir-optimize", conf-&gt;readdir_optimize, options, bool,</div><div class='add'>+                     out);</div><div class='add'>+    GF_OPTION_RECONF("randomize-hash-range-by-gfid", conf-&gt;randomize_by_gfid,</div><div class='add'>+                     options, bool, out);</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;defrag) {</div><div class='del'>-                if (dict_get_str (options, "rebal-throttle", &amp;temp_str) == 0) {</div><div class='del'>-                        ret = dht_configure_throttle (this, conf, temp_str);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_RECONF("lock-migration", conf-&gt;lock_migration_enabled, options,</div><div class='add'>+                     bool, out);</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;defrag) {</div><div class='del'>-                conf-&gt;defrag-&gt;lock_migration_enabled =</div><div class='del'>-                                        conf-&gt;lock_migration_enabled;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_RECONF("force-migration", conf-&gt;force_migration, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;defrag) {</div><div class='del'>-                GF_OPTION_RECONF ("rebalance-stats", conf-&gt;defrag-&gt;stats,</div><div class='del'>-                                  options, bool, out);</div><div class='add'>+    if (conf-&gt;defrag) {</div><div class='add'>+        if (dict_get_str(options, "rebal-throttle", &amp;temp_str) == 0) {</div><div class='add'>+            ret = dht_configure_throttle(this, conf, temp_str);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;defrag) {</div><div class='add'>+        conf-&gt;defrag-&gt;lock_migration_enabled = conf-&gt;lock_migration_enabled;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;defrag) {</div><div class='add'>+        GF_OPTION_RECONF("rebalance-stats", conf-&gt;defrag-&gt;stats, options, bool,</div><div class='add'>+                         out);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(options, "decommissioned-bricks", &amp;temp_str) == 0) {</div><div class='add'>+        ret = dht_parse_decommissioned_bricks(this, conf, temp_str);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        ret = dht_decommissioned_remove(this, conf);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_init_regex(this, options, "rsync-hash-regex", &amp;conf-&gt;rsync_regex,</div><div class='add'>+                   &amp;conf-&gt;rsync_regex_valid, conf);</div><div class='add'>+    dht_init_regex(this, options, "extra-hash-regex", &amp;conf-&gt;extra_regex,</div><div class='add'>+                   &amp;conf-&gt;extra_regex_valid, conf);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("weighted-rebalance", conf-&gt;do_weighting, options, bool,</div><div class='add'>+                     out);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("use-readdirp", conf-&gt;use_readdirp, options, bool, out);</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (options, "decommissioned-bricks", &amp;temp_str) == 0) {</div><div class='del'>-                ret = dht_parse_decommissioned_bricks (this, conf, temp_str);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else {</div><div class='del'>-                ret = dht_decommissioned_remove (this, conf);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='add'>+static int</div><div class='add'>+gf_defrag_pattern_list_fill(xlator_t *this, gf_defrag_info_t *defrag,</div><div class='add'>+                            char *data)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='add'>+    char *tmp_str1 = NULL;</div><div class='add'>+    char *dup_str = NULL;</div><div class='add'>+    char *num = NULL;</div><div class='add'>+    char *pattern_str = NULL;</div><div class='add'>+    char *pattern = NULL;</div><div class='add'>+    gf_defrag_pattern_list_t *temp_list = NULL;</div><div class='add'>+    gf_defrag_pattern_list_t *pattern_list = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !defrag || !data)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Get the pattern for pattern list. "pattern:&lt;optional-size&gt;"</div><div class='add'>+     * eg: *avi, *pdf:10MB, *:1TB</div><div class='add'>+     */</div><div class='add'>+    pattern_str = strtok_r(data, ",", &amp;tmp_str);</div><div class='add'>+    while (pattern_str) {</div><div class='add'>+        dup_str = gf_strdup(pattern_str);</div><div class='add'>+        pattern_list = GF_CALLOC(1, sizeof(gf_defrag_pattern_list_t), 1);</div><div class='add'>+        if (!pattern_list) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        pattern = strtok_r(dup_str, ":", &amp;tmp_str1);</div><div class='add'>+        num = strtok_r(NULL, ":", &amp;tmp_str1);</div><div class='add'>+        if (!pattern)</div><div class='add'>+            goto out;</div><div class='add'>+        if (!num) {</div><div class='add'>+            if (gf_string2bytesize_uint64(pattern, &amp;pattern_list-&gt;size) == 0) {</div><div class='add'>+                pattern = "*";</div><div class='add'>+            }</div><div class='add'>+        } else if (gf_string2bytesize_uint64(num, &amp;pattern_list-&gt;size) != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_OPTION,</div><div class='add'>+                   "Invalid option. Defrag pattern:"</div><div class='add'>+                   " Invalid number format \"%s\"",</div><div class='add'>+                   num);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        memcpy(pattern_list-&gt;path_pattern, pattern, strlen(dup_str));</div><div class='ctx'> </div><div class='del'>-        dht_init_regex (this, options, "rsync-hash-regex",</div><div class='del'>-                        &amp;conf-&gt;rsync_regex, &amp;conf-&gt;rsync_regex_valid, conf);</div><div class='del'>-        dht_init_regex (this, options, "extra-hash-regex",</div><div class='del'>-                        &amp;conf-&gt;extra_regex, &amp;conf-&gt;extra_regex_valid, conf);</div><div class='add'>+        if (!defrag-&gt;defrag_pattern)</div><div class='add'>+            temp_list = NULL;</div><div class='add'>+        else</div><div class='add'>+            temp_list = defrag-&gt;defrag_pattern;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("weighted-rebalance", conf-&gt;do_weighting, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+        pattern_list-&gt;next = temp_list;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("use-readdirp", conf-&gt;use_readdirp, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        defrag-&gt;defrag_pattern = pattern_list;</div><div class='add'>+        pattern_list = NULL;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-gf_defrag_pattern_list_fill (xlator_t *this, gf_defrag_info_t *defrag, char *data)</div><div class='del'>-{</div><div class='del'>-        int                    ret = -1;</div><div class='del'>-        char                  *tmp_str = NULL;</div><div class='del'>-        char                  *tmp_str1 = NULL;</div><div class='del'>-        char                  *dup_str = NULL;</div><div class='del'>-        char                  *num = NULL;</div><div class='del'>-        char                  *pattern_str = NULL;</div><div class='del'>-        char                  *pattern = NULL;</div><div class='del'>-        gf_defrag_pattern_list_t *temp_list = NULL;</div><div class='del'>-        gf_defrag_pattern_list_t *pattern_list = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !defrag || !data)</div><div class='del'>-                goto out;</div><div class='add'>+        GF_FREE(dup_str);</div><div class='add'>+        dup_str = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Get the pattern for pattern list. "pattern:&lt;optional-size&gt;"</div><div class='del'>-         * eg: *avi, *pdf:10MB, *:1TB</div><div class='del'>-         */</div><div class='del'>-        pattern_str = strtok_r (data, ",", &amp;tmp_str);</div><div class='del'>-        while (pattern_str) {</div><div class='del'>-                dup_str = gf_strdup (pattern_str);</div><div class='del'>-                pattern_list = GF_CALLOC (1, sizeof (gf_defrag_pattern_list_t),</div><div class='del'>-                                        1);</div><div class='del'>-                if (!pattern_list) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                pattern = strtok_r (dup_str, ":", &amp;tmp_str1);</div><div class='del'>-                num = strtok_r (NULL, ":", &amp;tmp_str1);</div><div class='del'>-                if (!pattern)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (!num) {</div><div class='del'>-                        if (gf_string2bytesize_uint64(pattern, &amp;pattern_list-&gt;size)</div><div class='del'>-                             == 0) {</div><div class='del'>-                                pattern = "*";</div><div class='del'>-                        }</div><div class='del'>-                } else if (gf_string2bytesize_uint64 (num, &amp;pattern_list-&gt;size) != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_INVALID_OPTION,</div><div class='del'>-                                "Invalid option. Defrag pattern:"</div><div class='del'>-                                " Invalid number format \"%s\"", num);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                memcpy (pattern_list-&gt;path_pattern, pattern, strlen (dup_str));</div><div class='del'>-</div><div class='del'>-                if (!defrag-&gt;defrag_pattern)</div><div class='del'>-                        temp_list = NULL;</div><div class='del'>-                else</div><div class='del'>-                        temp_list = defrag-&gt;defrag_pattern;</div><div class='del'>-</div><div class='del'>-                pattern_list-&gt;next = temp_list;</div><div class='del'>-</div><div class='del'>-                defrag-&gt;defrag_pattern = pattern_list;</div><div class='del'>-                pattern_list = NULL;</div><div class='del'>-</div><div class='del'>-                GF_FREE (dup_str);</div><div class='del'>-                dup_str = NULL;</div><div class='del'>-</div><div class='del'>-                pattern_str = strtok_r (NULL, ",", &amp;tmp_str);</div><div class='del'>-        }</div><div class='add'>+        pattern_str = strtok_r(NULL, ",", &amp;tmp_str);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_FREE (pattern_list);</div><div class='del'>-        GF_FREE (dup_str);</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_FREE(pattern_list);</div><div class='add'>+    GF_FREE(dup_str);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-dht_init_methods (xlator_t *this)</div><div class='add'>+dht_init_methods(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret                  = -1;</div><div class='del'>-        dht_conf_t      *conf    = NULL;</div><div class='del'>-        dht_methods_t   *methods = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        methods-&gt;migration_get_dst_subvol = dht_migration_get_dst_subvol;</div><div class='del'>-        methods-&gt;migration_needed = dht_migration_needed;</div><div class='del'>-        methods-&gt;migration_other  = NULL;</div><div class='del'>-        methods-&gt;layout_search    = dht_layout_search;</div><div class='add'>+    methods-&gt;migration_get_dst_subvol = dht_migration_get_dst_subvol;</div><div class='add'>+    methods-&gt;migration_needed = dht_migration_needed;</div><div class='add'>+    methods-&gt;migration_other = NULL;</div><div class='add'>+    methods-&gt;layout_search = dht_layout_search;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_init (xlator_t *this)</div><div class='add'>+dht_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t                      *conf           = NULL;</div><div class='del'>-        char                            *temp_str       = NULL;</div><div class='del'>-        int                              ret            = -1;</div><div class='del'>-        int                              i              = 0;</div><div class='del'>-        gf_defrag_info_t                *defrag         = NULL;</div><div class='del'>-        int                              cmd            = 0;</div><div class='del'>-        char                            *node_uuid      = NULL;</div><div class='del'>-        uint32_t                         commit_hash    = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, err);</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                        DHT_MSG_INVALID_CONFIGURATION,</div><div class='del'>-                        "Distribute needs more than one subvolume");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_INVALID_CONFIGURATION,</div><div class='del'>-                        "dangling volume. check volfile");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = GF_CALLOC (1, sizeof (*conf), gf_dht_mt_dht_conf_t);</div><div class='del'>-        if (!conf) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;conf-&gt;subvolume_lock);</div><div class='del'>-        LOCK_INIT (&amp;conf-&gt;layout_lock);</div><div class='del'>-        LOCK_INIT (&amp;conf-&gt;lock);</div><div class='del'>-        synclock_init (&amp;conf-&gt;link_lock, SYNC_LOCK_DEFAULT);</div><div class='del'>-</div><div class='del'>-        /* We get the commit-hash to set only for rebalance process */</div><div class='del'>-        if (dict_get_uint32 (this-&gt;options,</div><div class='del'>-                             "commit-hash", &amp;commit_hash) == 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_COMMIT_HASH_INFO, "%s using commit hash %u",</div><div class='del'>-                        __func__, commit_hash);</div><div class='del'>-                conf-&gt;vol_commit_hash = commit_hash;</div><div class='del'>-                conf-&gt;vch_forced = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (this-&gt;options, "rebalance-cmd", &amp;cmd);</div><div class='del'>-</div><div class='del'>-        if (cmd) {</div><div class='del'>-                defrag = GF_CALLOC (1, sizeof (gf_defrag_info_t),</div><div class='del'>-                                    gf_defrag_info_mt);</div><div class='del'>-</div><div class='del'>-                GF_VALIDATE_OR_GOTO (this-&gt;name, defrag, err);</div><div class='del'>-</div><div class='del'>-                LOCK_INIT (&amp;defrag-&gt;lock);</div><div class='del'>-</div><div class='del'>-                defrag-&gt;is_exiting = 0;</div><div class='del'>-</div><div class='del'>-                conf-&gt;defrag = defrag;</div><div class='del'>-                defrag-&gt;this = this;</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (this-&gt;options, "node-uuid", &amp;node_uuid);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_INVALID_CONFIGURATION,</div><div class='del'>-                                "Invalid volume configuration: "</div><div class='del'>-                                "node-uuid not specified");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    int cmd = 0;</div><div class='add'>+    char *node_uuid = NULL;</div><div class='add'>+    uint32_t commit_hash = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, err);</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, 0, DHT_MSG_INVALID_CONFIGURATION,</div><div class='add'>+               "Distribute needs more than one subvolume");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (gf_uuid_parse (node_uuid, defrag-&gt;node_uuid)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_INVALID_OPTION, "Invalid option:"</div><div class='del'>-                                " Cannot parse glusterd node uuid");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_INVALID_CONFIGURATION,</div><div class='add'>+               "dangling volume. check volfile");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;cmd = cmd;</div><div class='add'>+    conf = GF_CALLOC(1, sizeof(*conf), gf_dht_mt_dht_conf_t);</div><div class='add'>+    if (!conf) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;stats = _gf_false;</div><div class='add'>+    LOCK_INIT(&amp;conf-&gt;subvolume_lock);</div><div class='add'>+    LOCK_INIT(&amp;conf-&gt;layout_lock);</div><div class='add'>+    LOCK_INIT(&amp;conf-&gt;lock);</div><div class='add'>+    synclock_init(&amp;conf-&gt;link_lock, SYNC_LOCK_DEFAULT);</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;queue = NULL;</div><div class='add'>+    /* We get the commit-hash to set only for rebalance process */</div><div class='add'>+    if (dict_get_uint32(this-&gt;options, "commit-hash", &amp;commit_hash) == 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_COMMIT_HASH_INFO,</div><div class='add'>+               "%s using commit hash %u", __func__, commit_hash);</div><div class='add'>+        conf-&gt;vol_commit_hash = commit_hash;</div><div class='add'>+        conf-&gt;vch_forced = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;crawl_done = 0;</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "rebalance-cmd", &amp;cmd);</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;global_error = 0;</div><div class='add'>+    if (cmd) {</div><div class='add'>+        defrag = GF_CALLOC(1, sizeof(gf_defrag_info_t), gf_defrag_info_mt);</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;q_entry_count = 0;</div><div class='add'>+        GF_VALIDATE_OR_GOTO(this-&gt;name, defrag, err);</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;wakeup_crawler = 0;</div><div class='add'>+        LOCK_INIT(&amp;defrag-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_init (&amp;defrag-&gt;dfq_mutex, 0);</div><div class='del'>-                pthread_cond_init  (&amp;defrag-&gt;parallel_migration_cond, 0);</div><div class='del'>-                pthread_cond_init  (&amp;defrag-&gt;rebalance_crawler_alarm, 0);</div><div class='del'>-                pthread_cond_init  (&amp;defrag-&gt;df_wakeup_thread, 0);</div><div class='add'>+        defrag-&gt;is_exiting = 0;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_init (&amp;defrag-&gt;fc_mutex, 0);</div><div class='del'>-                pthread_cond_init  (&amp;defrag-&gt;fc_wakeup_cond, 0);</div><div class='add'>+        conf-&gt;defrag = defrag;</div><div class='add'>+        defrag-&gt;this = this;</div><div class='ctx'> </div><div class='del'>-                defrag-&gt;global_error = 0;</div><div class='add'>+        ret = dict_get_str(this-&gt;options, "node-uuid", &amp;node_uuid);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_CONFIGURATION,</div><div class='add'>+                   "Invalid volume configuration: "</div><div class='add'>+                   "node-uuid not specified");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;use_fallocate = 1;</div><div class='del'>-</div><div class='del'>-        conf-&gt;search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON;</div><div class='del'>-        if (dict_get_str (this-&gt;options, "lookup-unhashed", &amp;temp_str) == 0) {</div><div class='del'>-                /* If option is not "auto", other options _should_ be boolean */</div><div class='del'>-                if (strcasecmp (temp_str, "auto")) {</div><div class='del'>-                        gf_boolean_t    search_unhashed_bool;</div><div class='del'>-                        ret = gf_string2boolean (temp_str, &amp;search_unhashed_bool);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                        conf-&gt;search_unhashed = search_unhashed_bool</div><div class='del'>-                                              ? GF_DHT_LOOKUP_UNHASHED_ON</div><div class='del'>-                                              : GF_DHT_LOOKUP_UNHASHED_OFF;</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        conf-&gt;search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO;</div><div class='del'>-                }</div><div class='add'>+        if (gf_uuid_parse(node_uuid, defrag-&gt;node_uuid)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_OPTION,</div><div class='add'>+                   "Invalid option:"</div><div class='add'>+                   " Cannot parse glusterd node uuid");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("lookup-optimize", conf-&gt;lookup_optimize, bool, err);</div><div class='add'>+        defrag-&gt;cmd = cmd;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("unhashed-sticky-bit", conf-&gt;unhashed_sticky_bit, bool,</div><div class='del'>-                        err);</div><div class='add'>+        defrag-&gt;stats = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("use-readdirp", conf-&gt;use_readdirp, bool, err);</div><div class='add'>+        defrag-&gt;queue = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("min-free-disk", conf-&gt;min_free_disk, percent_or_size,</div><div class='del'>-                        err);</div><div class='add'>+        defrag-&gt;crawl_done = 0;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("min-free-inodes", conf-&gt;min_free_inodes, percent,</div><div class='del'>-                        err);</div><div class='add'>+        defrag-&gt;global_error = 0;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;dir_spread_cnt = conf-&gt;subvolume_cnt;</div><div class='del'>-        GF_OPTION_INIT ("directory-layout-spread", conf-&gt;dir_spread_cnt,</div><div class='del'>-                        uint32, err);</div><div class='add'>+        defrag-&gt;q_entry_count = 0;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("assert-no-child-down", conf-&gt;assert_no_child_down,</div><div class='del'>-                        bool, err);</div><div class='add'>+        defrag-&gt;wakeup_crawler = 0;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("readdir-optimize", conf-&gt;readdir_optimize, bool, err);</div><div class='add'>+        pthread_mutex_init(&amp;defrag-&gt;dfq_mutex, 0);</div><div class='add'>+        pthread_cond_init(&amp;defrag-&gt;parallel_migration_cond, 0);</div><div class='add'>+        pthread_cond_init(&amp;defrag-&gt;rebalance_crawler_alarm, 0);</div><div class='add'>+        pthread_cond_init(&amp;defrag-&gt;df_wakeup_thread, 0);</div><div class='ctx'> </div><div class='add'>+        pthread_mutex_init(&amp;defrag-&gt;fc_mutex, 0);</div><div class='add'>+        pthread_cond_init(&amp;defrag-&gt;fc_wakeup_cond, 0);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("lock-migration", conf-&gt;lock_migration_enabled,</div><div class='del'>-                         bool, err);</div><div class='add'>+        defrag-&gt;global_error = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("force-migration", conf-&gt;force_migration,</div><div class='del'>-                        bool, err);</div><div class='add'>+    conf-&gt;use_fallocate = 1;</div><div class='ctx'> </div><div class='add'>+    conf-&gt;search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON;</div><div class='add'>+    if (dict_get_str(this-&gt;options, "lookup-unhashed", &amp;temp_str) == 0) {</div><div class='add'>+        /* If option is not "auto", other options _should_ be boolean */</div><div class='add'>+        if (strcasecmp(temp_str, "auto")) {</div><div class='add'>+            gf_boolean_t search_unhashed_bool;</div><div class='add'>+            ret = gf_string2boolean(temp_str, &amp;search_unhashed_bool);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+            conf-&gt;search_unhashed = search_unhashed_bool</div><div class='add'>+                                        ? GF_DHT_LOOKUP_UNHASHED_ON</div><div class='add'>+                                        : GF_DHT_LOOKUP_UNHASHED_OFF;</div><div class='add'>+        } else {</div><div class='add'>+            conf-&gt;search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (defrag) {</div><div class='del'>-              defrag-&gt;lock_migration_enabled = conf-&gt;lock_migration_enabled;</div><div class='add'>+    GF_OPTION_INIT("lookup-optimize", conf-&gt;lookup_optimize, bool, err);</div><div class='ctx'> </div><div class='del'>-              GF_OPTION_INIT ("rebalance-stats", defrag-&gt;stats, bool, err);</div><div class='del'>-                if (dict_get_str (this-&gt;options, "rebalance-filter", &amp;temp_str)</div><div class='del'>-                    == 0) {</div><div class='del'>-                        if (gf_defrag_pattern_list_fill (this, defrag, temp_str)</div><div class='del'>-                            == -1) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_INVALID_OPTION,</div><div class='del'>-                                        "Invalid option:"</div><div class='del'>-                                        " Cannot parse rebalance-filter (%s)",</div><div class='del'>-                                        temp_str);</div><div class='add'>+    GF_OPTION_INIT("unhashed-sticky-bit", conf-&gt;unhashed_sticky_bit, bool, err);</div><div class='ctx'> </div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_INIT("use-readdirp", conf-&gt;use_readdirp, bool, err);</div><div class='ctx'> </div><div class='del'>-        /* option can be any one of percent or bytes */</div><div class='del'>-        conf-&gt;disk_unit = 0;</div><div class='del'>-        if (conf-&gt;min_free_disk &lt; 100)</div><div class='del'>-                conf-&gt;disk_unit = 'p';</div><div class='add'>+    GF_OPTION_INIT("min-free-disk", conf-&gt;min_free_disk, percent_or_size, err);</div><div class='ctx'> </div><div class='del'>-        ret = dht_init_subvolumes (this, conf);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_INIT("min-free-inodes", conf-&gt;min_free_inodes, percent, err);</div><div class='ctx'> </div><div class='del'>-        if (cmd) {</div><div class='del'>-                ret = dht_init_local_subvolumes (this, conf);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_INIT_LOCAL_SUBVOL_FAILED,</div><div class='del'>-                                "dht_init_local_subvolumes failed");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    conf-&gt;dir_spread_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+    GF_OPTION_INIT("directory-layout-spread", conf-&gt;dir_spread_cnt, uint32,</div><div class='add'>+                   err);</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (this-&gt;options, "decommissioned-bricks", &amp;temp_str) == 0) {</div><div class='del'>-                ret = dht_parse_decommissioned_bricks (this, conf, temp_str);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_INIT("assert-no-child-down", conf-&gt;assert_no_child_down, bool,</div><div class='add'>+                   err);</div><div class='ctx'> </div><div class='del'>-        dht_init_regex (this, this-&gt;options, "rsync-hash-regex",</div><div class='del'>-                        &amp;conf-&gt;rsync_regex, &amp;conf-&gt;rsync_regex_valid, conf);</div><div class='del'>-        dht_init_regex (this, this-&gt;options, "extra-hash-regex",</div><div class='del'>-                        &amp;conf-&gt;extra_regex, &amp;conf-&gt;extra_regex_valid, conf);</div><div class='add'>+    GF_OPTION_INIT("readdir-optimize", conf-&gt;readdir_optimize, bool, err);</div><div class='ctx'> </div><div class='del'>-        ret = dht_layouts_init (this, conf);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_INIT("lock-migration", conf-&gt;lock_migration_enabled, bool, err);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("force-migration", conf-&gt;force_migration, bool, err);</div><div class='ctx'> </div><div class='add'>+    if (defrag) {</div><div class='add'>+        defrag-&gt;lock_migration_enabled = conf-&gt;lock_migration_enabled;</div><div class='ctx'> </div><div class='del'>-        conf-&gt;gen = 1;</div><div class='add'>+        GF_OPTION_INIT("rebalance-stats", defrag-&gt;stats, bool, err);</div><div class='add'>+        if (dict_get_str(this-&gt;options, "rebalance-filter", &amp;temp_str) == 0) {</div><div class='add'>+            if (gf_defrag_pattern_list_fill(this, defrag, temp_str) == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INVALID_OPTION,</div><div class='add'>+                       "Invalid option:"</div><div class='add'>+                       " Cannot parse rebalance-filter (%s)",</div><div class='add'>+                       temp_str);</div><div class='ctx'> </div><div class='del'>-        this-&gt;local_pool = mem_pool_new (dht_local_t, 512);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        " DHT initialisation failed. "</div><div class='del'>-                        "failed to create local_t's memory pool");</div><div class='ctx'>                 goto err;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("randomize-hash-range-by-gfid",</div><div class='del'>-                        conf-&gt;randomize_by_gfid, bool, err);</div><div class='del'>-</div><div class='del'>-        if (defrag) {</div><div class='del'>-                GF_OPTION_INIT ("rebal-throttle", temp_str, str, err);</div><div class='del'>-                if (temp_str) {</div><div class='del'>-                        ret = dht_configure_throttle (this, conf, temp_str);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto err;</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* option can be any one of percent or bytes */</div><div class='add'>+    conf-&gt;disk_unit = 0;</div><div class='add'>+    if (conf-&gt;min_free_disk &lt; 100)</div><div class='add'>+        conf-&gt;disk_unit = 'p';</div><div class='add'>+</div><div class='add'>+    ret = dht_init_subvolumes(this, conf);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cmd) {</div><div class='add'>+        ret = dht_init_local_subvolumes(this, conf);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_INIT_LOCAL_SUBVOL_FAILED,</div><div class='add'>+                   "dht_init_local_subvolumes failed");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("xattr-name", conf-&gt;xattr_name, str, err);</div><div class='del'>-        gf_asprintf (&amp;conf-&gt;mds_xattr_key, "%s."DHT_MDS_STR, conf-&gt;xattr_name);</div><div class='del'>-        gf_asprintf (&amp;conf-&gt;link_xattr_name, "%s."DHT_LINKFILE_STR,</div><div class='del'>-                     conf-&gt;xattr_name);</div><div class='del'>-        gf_asprintf (&amp;conf-&gt;commithash_xattr_name, "%s."DHT_COMMITHASH_STR,</div><div class='del'>-                     conf-&gt;xattr_name);</div><div class='del'>-        gf_asprintf (&amp;conf-&gt;wild_xattr_name, "%s*", conf-&gt;xattr_name);</div><div class='del'>-        if (!conf-&gt;link_xattr_name || !conf-&gt;wild_xattr_name) {</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(this-&gt;options, "decommissioned-bricks", &amp;temp_str) == 0) {</div><div class='add'>+        ret = dht_parse_decommissioned_bricks(this, conf, temp_str);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_init_regex(this, this-&gt;options, "rsync-hash-regex", &amp;conf-&gt;rsync_regex,</div><div class='add'>+                   &amp;conf-&gt;rsync_regex_valid, conf);</div><div class='add'>+    dht_init_regex(this, this-&gt;options, "extra-hash-regex", &amp;conf-&gt;extra_regex,</div><div class='add'>+                   &amp;conf-&gt;extra_regex_valid, conf);</div><div class='add'>+</div><div class='add'>+    ret = dht_layouts_init(this, conf);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conf-&gt;gen = 1;</div><div class='add'>+</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(dht_local_t, 512);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               " DHT initialisation failed. "</div><div class='add'>+               "failed to create local_t's memory pool");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("randomize-hash-range-by-gfid", conf-&gt;randomize_by_gfid,</div><div class='add'>+                   bool, err);</div><div class='add'>+</div><div class='add'>+    if (defrag) {</div><div class='add'>+        GF_OPTION_INIT("rebal-throttle", temp_str, str, err);</div><div class='add'>+        if (temp_str) {</div><div class='add'>+            ret = dht_configure_throttle(this, conf, temp_str);</div><div class='add'>+            if (ret == -1)</div><div class='ctx'>                 goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("weighted-rebalance", conf-&gt;do_weighting, bool, err);</div><div class='add'>+    GF_OPTION_INIT("xattr-name", conf-&gt;xattr_name, str, err);</div><div class='add'>+    gf_asprintf(&amp;conf-&gt;mds_xattr_key, "%s." DHT_MDS_STR, conf-&gt;xattr_name);</div><div class='add'>+    gf_asprintf(&amp;conf-&gt;link_xattr_name, "%s." DHT_LINKFILE_STR,</div><div class='add'>+                conf-&gt;xattr_name);</div><div class='add'>+    gf_asprintf(&amp;conf-&gt;commithash_xattr_name, "%s." DHT_COMMITHASH_STR,</div><div class='add'>+                conf-&gt;xattr_name);</div><div class='add'>+    gf_asprintf(&amp;conf-&gt;wild_xattr_name, "%s*", conf-&gt;xattr_name);</div><div class='add'>+    if (!conf-&gt;link_xattr_name || !conf-&gt;wild_xattr_name) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        conf-&gt;lock_pool = mem_pool_new (dht_lock_t, 512);</div><div class='del'>-        if (!conf-&gt;lock_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INIT_FAILED,</div><div class='del'>-                        "failed to create lock mem_pool, failing "</div><div class='del'>-                        "initialization");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_INIT("weighted-rebalance", conf-&gt;do_weighting, bool, err);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = conf;</div><div class='add'>+    conf-&gt;lock_pool = mem_pool_new(dht_lock_t, 512);</div><div class='add'>+    if (!conf-&gt;lock_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_INIT_FAILED,</div><div class='add'>+               "failed to create lock mem_pool, failing "</div><div class='add'>+               "initialization");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dht_set_subvol_range(this))</div><div class='del'>-                goto err;</div><div class='add'>+    this-&gt;private = conf;</div><div class='ctx'> </div><div class='del'>-        if (dht_init_methods (this))</div><div class='del'>-                goto err;</div><div class='add'>+    if (dht_set_subvol_range(this))</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (dht_init_methods(this))</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (conf) {</div><div class='del'>-                if (conf-&gt;file_layouts) {</div><div class='del'>-                        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                                GF_FREE (conf-&gt;file_layouts[i]);</div><div class='del'>-                        }</div><div class='del'>-                        GF_FREE (conf-&gt;file_layouts);</div><div class='del'>-                }</div><div class='add'>+    if (conf) {</div><div class='add'>+        if (conf-&gt;file_layouts) {</div><div class='add'>+            for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+                GF_FREE(conf-&gt;file_layouts[i]);</div><div class='add'>+            }</div><div class='add'>+            GF_FREE(conf-&gt;file_layouts);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                GF_FREE (conf-&gt;subvolumes);</div><div class='add'>+        GF_FREE(conf-&gt;subvolumes);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (conf-&gt;subvolume_status);</div><div class='add'>+        GF_FREE(conf-&gt;subvolume_status);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (conf-&gt;du_stats);</div><div class='add'>+        GF_FREE(conf-&gt;du_stats);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (conf-&gt;defrag);</div><div class='add'>+        GF_FREE(conf-&gt;defrag);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (conf-&gt;xattr_name);</div><div class='del'>-                GF_FREE (conf-&gt;link_xattr_name);</div><div class='del'>-                GF_FREE (conf-&gt;wild_xattr_name);</div><div class='del'>-                GF_FREE (conf-&gt;mds_xattr_key);</div><div class='add'>+        GF_FREE(conf-&gt;xattr_name);</div><div class='add'>+        GF_FREE(conf-&gt;link_xattr_name);</div><div class='add'>+        GF_FREE(conf-&gt;wild_xattr_name);</div><div class='add'>+        GF_FREE(conf-&gt;mds_xattr_key);</div><div class='ctx'> </div><div class='del'>-                if (conf-&gt;lock_pool)</div><div class='del'>-                        mem_pool_destroy (conf-&gt;lock_pool);</div><div class='add'>+        if (conf-&gt;lock_pool)</div><div class='add'>+            mem_pool_destroy(conf-&gt;lock_pool);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (conf);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(conf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"lookup-unhashed"},</div><div class='del'>-          .value = {"auto", "yes", "no", "enable", "disable", "1", "0",</div><div class='del'>-                    "on", "off"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .description = "This option if set to ON, does a lookup through "</div><div class='del'>-          "all the sub-volumes, in case a lookup didn't return any result "</div><div class='del'>-          "from the hash subvolume. If set to OFF, it does not do a lookup "</div><div class='del'>-          "on the remaining subvolumes.",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-        },</div><div class='del'>-        { .key = {"lookup-optimize"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .description = "This option if set to ON enables the optimization "</div><div class='del'>-          "of -ve lookups, by not doing a lookup on non-hashed subvolumes for "</div><div class='del'>-          "files, in case the hashed subvolume does not return any result. "</div><div class='del'>-          "This option disregards the lookup-unhashed setting, when enabled.",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_2},</div><div class='del'>-          .level = OPT_STATUS_ADVANCED,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"min-free-disk"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT_OR_SIZET,</div><div class='del'>-          .default_value = "10%",</div><div class='del'>-          .description = "Percentage/Size of disk space, after which the "</div><div class='del'>-          "process starts balancing out the cluster, and logs will appear "</div><div class='del'>-          "in log files",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"min-free-inodes"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT,</div><div class='del'>-          .default_value = "5%",</div><div class='del'>-          .description = "after system has only N% of inodes, warnings "</div><div class='del'>-          "starts to appear in log files",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key = {"unhashed-sticky-bit"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"use-readdirp"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .description = "This option if set to ON, forces the use of "</div><div class='del'>-          "readdirp, and hence also displays the stats of the files.",</div><div class='del'>-          .level = OPT_STATUS_ADVANCED,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key = {"assert-no-child-down"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "This option if set to ON, in the event of "</div><div class='del'>-          "CHILD_DOWN, will call exit."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"directory-layout-spread"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = 1,</div><div class='del'>-          .validate = GF_OPT_VALIDATE_MIN,</div><div class='del'>-          .description = "Specifies the directory layout spread. Takes number "</div><div class='del'>-                         "of subvolumes as default value.",</div><div class='del'>-</div><div class='del'>-          .op_version = {2},</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"decommissioned-bricks"},</div><div class='del'>-          .type = GF_OPTION_TYPE_ANY,</div><div class='del'>-          .description = "This option if set to ON, decommissions "</div><div class='del'>-          "the brick, so that no new data is allowed to be created "</div><div class='del'>-          "on that brick.",</div><div class='del'>-          .level = OPT_STATUS_ADVANCED,</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"rebalance-cmd"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-        },</div><div class='del'>-        { .key = {"commit-hash"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-        },</div><div class='del'>-        { .key = {"node-uuid"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-        },</div><div class='del'>-        { .key = {"rebalance-stats"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "This option if set to ON displays and logs the "</div><div class='del'>-          " time taken for migration of each file, during the rebalance "</div><div class='del'>-          "process. If set to OFF, the rebalance logs will only display the "</div><div class='del'>-          "time spent in each directory.",</div><div class='del'>-          .op_version = {2},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-        },</div><div class='del'>-        { .key = {"readdir-optimize"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "This option if set to ON enables the optimization "</div><div class='del'>-          "that allows DHT to requests non-first subvolumes to filter out "</div><div class='del'>-          "directory entries.",</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .level = OPT_STATUS_ADVANCED,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key = {"rsync-hash-regex"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          /* Setting a default here doesn't work.  See dht_init_regex. */</div><div class='del'>-          .description = "Regular expression for stripping temporary-file "</div><div class='del'>-          "suffix and prefix used by rsync, to prevent relocation when the "</div><div class='del'>-          "file is renamed.",</div><div class='del'>-          .op_version = {3},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key = {"extra-hash-regex"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          /* Setting a default here doesn't work.  See dht_init_regex. */</div><div class='del'>-          .description = "Regular expression for stripping temporary-file "</div><div class='del'>-          "suffix and prefix used by an application, to prevent relocation when "</div><div class='del'>-          "the file is renamed.",</div><div class='del'>-          .op_version = {3},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-        { .key = {"rebalance-filter"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key = {"xattr-name"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "trusted.glusterfs.dht",</div><div class='del'>-          .description = "Base for extended attributes used by this "</div><div class='del'>-          "translator instance, to avoid conflicts with others above or "</div><div class='del'>-          "below it.",</div><div class='del'>-          .op_version = {3},</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key = {"weighted-rebalance"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "on",</div><div class='del'>-          .description = "When enabled, files will be allocated to bricks "</div><div class='del'>-          "with a probability proportional to their size.  Otherwise, all "</div><div class='del'>-          "bricks will have the same probability (legacy behavior).",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        /* NUFA option */</div><div class='del'>-        { .key  = {"local-volume-name"},</div><div class='del'>-          .type = GF_OPTION_TYPE_XLATOR</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        /* tier options */</div><div class='del'>-        { .key  = {"tier-pause"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"tier-promote-frequency"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "120",</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"tier-demote-frequency"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "3600",</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"write-freq-threshold"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"read-freq-threshold"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"watermark-hi"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT,</div><div class='del'>-          .default_value = "90",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"watermark-low"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT,</div><div class='del'>-          .default_value = "75",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-mode"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "test",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-compact"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-hot-compact-frequency"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "604800",</div><div class='del'>-          .description = "Frequency to compact DBs on hot tier in system"</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-cold-compact-frequency"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "604800",</div><div class='del'>-          .description = "Frequency to compact DBs on cold tier in system"</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-max-mb"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "4000",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-max-promote-file-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-max-files"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "10000",</div><div class='del'>-        },</div><div class='del'>-        { .key         = {"tier-query-limit"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "100",</div><div class='del'>-        },</div><div class='del'>-        /* switch option */</div><div class='del'>-        { .key  = {"pattern.switch.case"},</div><div class='del'>-          .type = GF_OPTION_TYPE_ANY</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key =  {"randomize-hash-range-by-gfid"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "Use gfid of directory to determine the subvolume "</div><div class='del'>-          "from which hash ranges are allocated starting with 0. "</div><div class='del'>-          "Note that we still use a directory/file's name to determine the "</div><div class='del'>-          "subvolume to which it hashes",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_6_0},</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key =  {"rebal-throttle"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "normal",</div><div class='del'>-          .description = " Sets the maximum number of parallel file migrations "</div><div class='del'>-                         "allowed on a node during the rebalance operation. The"</div><div class='del'>-                         " default value is normal and allows a max of "</div><div class='del'>-                         "[($(processing units) - 4) / 2), 2]  files to be "</div><div class='del'>-                         "migrated at a time. Lazy will allow only one file to "</div><div class='del'>-                         "be migrated at a time and aggressive will allow "</div><div class='del'>-                         "max of [($(processing units) - 4) / 2), 4]",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .level = OPT_STATUS_BASIC,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key =  {"lock-migration"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = " If enabled this feature will migrate the posix locks"</div><div class='del'>-                         " associated with a file during rebalance",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_8_0},</div><div class='del'>-          .level = OPT_STATUS_ADVANCED,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key =  {"force-migration"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "If disabled, rebalance will not migrate files that "</div><div class='del'>-                         "are being written to by an application",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_4_0_0},</div><div class='del'>-          .level = OPT_STATUS_ADVANCED,</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {</div><div class='add'>+        .key = {"lookup-unhashed"},</div><div class='add'>+        .value = {"auto", "yes", "no", "enable", "disable", "1", "0", "on",</div><div class='add'>+                  "off"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = "on",</div><div class='add'>+        .description =</div><div class='add'>+            "This option if set to ON, does a lookup through "</div><div class='add'>+            "all the sub-volumes, in case a lookup didn't return any result "</div><div class='add'>+            "from the hash subvolume. If set to OFF, it does not do a lookup "</div><div class='add'>+            "on the remaining subvolumes.",</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='add'>+        .level = OPT_STATUS_BASIC,</div><div class='add'>+    },</div><div class='add'>+    {.key = {"lookup-optimize"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .description =</div><div class='add'>+         "This option if set to ON enables the optimization "</div><div class='add'>+         "of -ve lookups, by not doing a lookup on non-hashed subvolumes for "</div><div class='add'>+         "files, in case the hashed subvolume does not return any result. "</div><div class='add'>+         "This option disregards the lookup-unhashed setting, when enabled.",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_2},</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {.key = {"min-free-disk"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PERCENT_OR_SIZET,</div><div class='add'>+     .default_value = "10%",</div><div class='add'>+     .description =</div><div class='add'>+         "Percentage/Size of disk space, after which the "</div><div class='add'>+         "process starts balancing out the cluster, and logs will appear "</div><div class='add'>+         "in log files",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {.key = {"min-free-inodes"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PERCENT,</div><div class='add'>+     .default_value = "5%",</div><div class='add'>+     .description = "after system has only N% of inodes, warnings "</div><div class='add'>+                    "starts to appear in log files",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {</div><div class='add'>+        .key = {"unhashed-sticky-bit"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"use-readdirp"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .description = "This option if set to ON, forces the use of "</div><div class='add'>+                    "readdirp, and hence also displays the stats of the files.",</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {.key = {"assert-no-child-down"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "This option if set to ON, in the event of "</div><div class='add'>+                    "CHILD_DOWN, will call exit."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"directory-layout-spread"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 1,</div><div class='add'>+        .validate = GF_OPT_VALIDATE_MIN,</div><div class='add'>+        .description = "Specifies the directory layout spread. Takes number "</div><div class='add'>+                       "of subvolumes as default value.",</div><div class='add'>+</div><div class='add'>+        .op_version = {2},</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"decommissioned-bricks"},</div><div class='add'>+        .type = GF_OPTION_TYPE_ANY,</div><div class='add'>+        .description =</div><div class='add'>+            "This option if set to ON, decommissions "</div><div class='add'>+            "the brick, so that no new data is allowed to be created "</div><div class='add'>+            "on that brick.",</div><div class='add'>+        .level = OPT_STATUS_ADVANCED,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"rebalance-cmd"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"commit-hash"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"node-uuid"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"rebalance-stats"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+        .description =</div><div class='add'>+            "This option if set to ON displays and logs the "</div><div class='add'>+            " time taken for migration of each file, during the rebalance "</div><div class='add'>+            "process. If set to OFF, the rebalance logs will only display the "</div><div class='add'>+            "time spent in each directory.",</div><div class='add'>+        .op_version = {2},</div><div class='add'>+        .level = OPT_STATUS_BASIC,</div><div class='add'>+    },</div><div class='add'>+    {.key = {"readdir-optimize"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description =</div><div class='add'>+         "This option if set to ON enables the optimization "</div><div class='add'>+         "that allows DHT to requests non-first subvolumes to filter out "</div><div class='add'>+         "directory entries.",</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {.key = {"rsync-hash-regex"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     /* Setting a default here doesn't work.  See dht_init_regex. */</div><div class='add'>+     .description =</div><div class='add'>+         "Regular expression for stripping temporary-file "</div><div class='add'>+         "suffix and prefix used by rsync, to prevent relocation when the "</div><div class='add'>+         "file is renamed.",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {.key = {"extra-hash-regex"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     /* Setting a default here doesn't work.  See dht_init_regex. */</div><div class='add'>+     .description =</div><div class='add'>+         "Regular expression for stripping temporary-file "</div><div class='add'>+         "suffix and prefix used by an application, to prevent relocation when "</div><div class='add'>+         "the file is renamed.",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+    {</div><div class='add'>+        .key = {"rebalance-filter"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"xattr-name"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = "trusted.glusterfs.dht",</div><div class='add'>+        .description =</div><div class='add'>+            "Base for extended attributes used by this "</div><div class='add'>+            "translator instance, to avoid conflicts with others above or "</div><div class='add'>+            "below it.",</div><div class='add'>+        .op_version = {3},</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {.key = {"weighted-rebalance"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .description =</div><div class='add'>+         "When enabled, files will be allocated to bricks "</div><div class='add'>+         "with a probability proportional to their size.  Otherwise, all "</div><div class='add'>+         "bricks will have the same probability (legacy behavior).",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+</div><div class='add'>+    /* NUFA option */</div><div class='add'>+    {.key = {"local-volume-name"}, .type = GF_OPTION_TYPE_XLATOR},</div><div class='add'>+</div><div class='add'>+    /* tier options */</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-pause"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-promote-frequency"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "120",</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-demote-frequency"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "3600",</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"write-freq-threshold"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "0",</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"read-freq-threshold"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "0",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"watermark-hi"},</div><div class='add'>+        .type = GF_OPTION_TYPE_PERCENT,</div><div class='add'>+        .default_value = "90",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"watermark-low"},</div><div class='add'>+        .type = GF_OPTION_TYPE_PERCENT,</div><div class='add'>+        .default_value = "75",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-mode"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = "test",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-compact"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"tier-hot-compact-frequency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "604800",</div><div class='add'>+     .description = "Frequency to compact DBs on hot tier in system"},</div><div class='add'>+    {.key = {"tier-cold-compact-frequency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "604800",</div><div class='add'>+     .description = "Frequency to compact DBs on cold tier in system"},</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-max-mb"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "4000",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-max-promote-file-size"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "0",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-max-files"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "10000",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"tier-query-limit"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = "100",</div><div class='add'>+    },</div><div class='add'>+    /* switch option */</div><div class='add'>+    {.key = {"pattern.switch.case"}, .type = GF_OPTION_TYPE_ANY},</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"randomize-hash-range-by-gfid"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+        .description =</div><div class='add'>+            "Use gfid of directory to determine the subvolume "</div><div class='add'>+            "from which hash ranges are allocated starting with 0. "</div><div class='add'>+            "Note that we still use a directory/file's name to determine the "</div><div class='add'>+            "subvolume to which it hashes",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {.key = {"rebal-throttle"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "normal",</div><div class='add'>+     .description = " Sets the maximum number of parallel file migrations "</div><div class='add'>+                    "allowed on a node during the rebalance operation. The"</div><div class='add'>+                    " default value is normal and allows a max of "</div><div class='add'>+                    "[($(processing units) - 4) / 2), 2]  files to be "</div><div class='add'>+                    "migrated at a time. Lazy will allow only one file to "</div><div class='add'>+                    "be migrated at a time and aggressive will allow "</div><div class='add'>+                    "max of [($(processing units) - 4) / 2), 4]",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC</div><div class='add'>+</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {.key = {"lock-migration"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = " If enabled this feature will migrate the posix locks"</div><div class='add'>+                    " associated with a file during rebalance",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_8_0},</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+</div><div class='add'>+    {.key = {"force-migration"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "If disabled, rebalance will not migrate files that "</div><div class='add'>+                    "are being written to by an application",</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},</div><div class='add'>+</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c<br/>index 90962636d18..677905f236e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/dht.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/dht.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/dht.c</a></div><div class='hunk'>@@ -8,78 +8,72 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> </div><div class='del'>-class_methods_t class_methods = {</div><div class='del'>-        .init           = dht_init,</div><div class='del'>-        .fini           = dht_fini,</div><div class='del'>-        .reconfigure    = dht_reconfigure,</div><div class='del'>-        .notify         = dht_notify</div><div class='del'>-};</div><div class='add'>+class_methods_t class_methods = {.init = dht_init,</div><div class='add'>+                                 .fini = dht_fini,</div><div class='add'>+                                 .reconfigure = dht_reconfigure,</div><div class='add'>+                                 .notify = dht_notify};</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .ipc         = dht_ipc,</div><div class='del'>-        .lookup      = dht_lookup,</div><div class='del'>-        .mknod       = dht_mknod,</div><div class='del'>-        .create      = dht_create,</div><div class='add'>+    .ipc = dht_ipc,</div><div class='add'>+    .lookup = dht_lookup,</div><div class='add'>+    .mknod = dht_mknod,</div><div class='add'>+    .create = dht_create,</div><div class='ctx'> </div><div class='del'>-        .open        = dht_open,</div><div class='del'>-        .statfs      = dht_statfs,</div><div class='del'>-        .opendir     = dht_opendir,</div><div class='del'>-        .readdir     = dht_readdir,</div><div class='del'>-        .readdirp    = dht_readdirp,</div><div class='del'>-        .fsyncdir    = dht_fsyncdir,</div><div class='del'>-        .symlink     = dht_symlink,</div><div class='del'>-        .unlink      = dht_unlink,</div><div class='del'>-        .link        = dht_link,</div><div class='del'>-        .mkdir       = dht_mkdir,</div><div class='del'>-        .rmdir       = dht_rmdir,</div><div class='del'>-        .rename      = dht_rename,</div><div class='del'>-        .entrylk     = dht_entrylk,</div><div class='del'>-        .fentrylk    = dht_fentrylk,</div><div class='add'>+    .open = dht_open,</div><div class='add'>+    .statfs = dht_statfs,</div><div class='add'>+    .opendir = dht_opendir,</div><div class='add'>+    .readdir = dht_readdir,</div><div class='add'>+    .readdirp = dht_readdirp,</div><div class='add'>+    .fsyncdir = dht_fsyncdir,</div><div class='add'>+    .symlink = dht_symlink,</div><div class='add'>+    .unlink = dht_unlink,</div><div class='add'>+    .link = dht_link,</div><div class='add'>+    .mkdir = dht_mkdir,</div><div class='add'>+    .rmdir = dht_rmdir,</div><div class='add'>+    .rename = dht_rename,</div><div class='add'>+    .entrylk = dht_entrylk,</div><div class='add'>+    .fentrylk = dht_fentrylk,</div><div class='ctx'> </div><div class='del'>-        /* Inode read operations */</div><div class='del'>-        .stat        = dht_stat,</div><div class='del'>-        .fstat       = dht_fstat,</div><div class='del'>-        .access      = dht_access,</div><div class='del'>-        .readlink    = dht_readlink,</div><div class='del'>-        .getxattr    = dht_getxattr,</div><div class='del'>-        .fgetxattr    = dht_fgetxattr,</div><div class='del'>-        .readv       = dht_readv,</div><div class='del'>-        .flush       = dht_flush,</div><div class='del'>-        .fsync       = dht_fsync,</div><div class='del'>-        .inodelk     = dht_inodelk,</div><div class='del'>-        .finodelk    = dht_finodelk,</div><div class='del'>-        .lk          = dht_lk,</div><div class='del'>-        .lease       = dht_lease,</div><div class='add'>+    /* Inode read operations */</div><div class='add'>+    .stat = dht_stat,</div><div class='add'>+    .fstat = dht_fstat,</div><div class='add'>+    .access = dht_access,</div><div class='add'>+    .readlink = dht_readlink,</div><div class='add'>+    .getxattr = dht_getxattr,</div><div class='add'>+    .fgetxattr = dht_fgetxattr,</div><div class='add'>+    .readv = dht_readv,</div><div class='add'>+    .flush = dht_flush,</div><div class='add'>+    .fsync = dht_fsync,</div><div class='add'>+    .inodelk = dht_inodelk,</div><div class='add'>+    .finodelk = dht_finodelk,</div><div class='add'>+    .lk = dht_lk,</div><div class='add'>+    .lease = dht_lease,</div><div class='ctx'> </div><div class='del'>-        /* Inode write operations */</div><div class='del'>-        .fremovexattr = dht_fremovexattr,</div><div class='del'>-        .removexattr = dht_removexattr,</div><div class='del'>-        .setxattr    = dht_setxattr,</div><div class='del'>-        .fsetxattr   = dht_fsetxattr,</div><div class='del'>-        .truncate    = dht_truncate,</div><div class='del'>-        .ftruncate   = dht_ftruncate,</div><div class='del'>-        .writev      = dht_writev,</div><div class='del'>-        .xattrop     = dht_xattrop,</div><div class='del'>-        .fxattrop    = dht_fxattrop,</div><div class='del'>-        .setattr     = dht_setattr,</div><div class='del'>-        .fsetattr    = dht_fsetattr,</div><div class='del'>-	.fallocate   = dht_fallocate,</div><div class='del'>-	.discard     = dht_discard,</div><div class='del'>-        .zerofill    = dht_zerofill,</div><div class='add'>+    /* Inode write operations */</div><div class='add'>+    .fremovexattr = dht_fremovexattr,</div><div class='add'>+    .removexattr = dht_removexattr,</div><div class='add'>+    .setxattr = dht_setxattr,</div><div class='add'>+    .fsetxattr = dht_fsetxattr,</div><div class='add'>+    .truncate = dht_truncate,</div><div class='add'>+    .ftruncate = dht_ftruncate,</div><div class='add'>+    .writev = dht_writev,</div><div class='add'>+    .xattrop = dht_xattrop,</div><div class='add'>+    .fxattrop = dht_fxattrop,</div><div class='add'>+    .setattr = dht_setattr,</div><div class='add'>+    .fsetattr = dht_fsetattr,</div><div class='add'>+    .fallocate = dht_fallocate,</div><div class='add'>+    .discard = dht_discard,</div><div class='add'>+    .zerofill = dht_zerofill,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv = dht_priv_dump,</div><div class='del'>-        .inodectx = dht_inodectx_dump,</div><div class='add'>+    .priv = dht_priv_dump,</div><div class='add'>+    .inodectx = dht_inodectx_dump,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .release    = dht_release,</div><div class='del'>-//      .releasedir = dht_releasedir,</div><div class='del'>-        .forget     = dht_forget</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.release = dht_release,</div><div class='add'>+                           //      .releasedir = dht_releasedir,</div><div class='add'>+                           .forget = dht_forget};</div><div class='head'>diff --git a/xlators/cluster/dht/src/nufa.c b/xlators/cluster/dht/src/nufa.c<br/>index afa446584ba..b8077f972d1 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/nufa.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/nufa.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/nufa.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/nufa.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> </div><div class='ctx'> /* TODO: all 'TODO's in dht.c holds good */</div><div class='hunk'>@@ -16,673 +15,633 @@</div><div class='ctx'> extern struct volume_options options[];</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno,</div><div class='del'>-                       inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                       struct iatt *postparent)</div><div class='add'>+nufa_local_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                      struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                      struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol      = NULL;</div><div class='del'>-        char          is_linkfile = 0;</div><div class='del'>-        char          is_dir      = 0;</div><div class='del'>-        dht_conf_t   *conf        = NULL;</div><div class='del'>-        dht_local_t  *local       = NULL;</div><div class='del'>-        loc_t        *loc         = NULL;</div><div class='del'>-        int           i           = 0;</div><div class='del'>-        xlator_t     *prev        = NULL;</div><div class='del'>-        int           call_cnt    = 0;</div><div class='del'>-        int           ret         = 0;</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        loc   = &amp;local-&gt;loc;</div><div class='del'>-</div><div class='del'>-        if (ENTRY_MISSING (op_ret, op_errno)) {</div><div class='del'>-                if (conf-&gt;search_unhashed) {</div><div class='del'>-                        local-&gt;op_errno = ENOENT;</div><div class='del'>-                        dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    char is_linkfile = 0;</div><div class='add'>+    char is_dir = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    if (ENTRY_MISSING(op_ret, op_errno)) {</div><div class='add'>+        if (conf-&gt;search_unhashed) {</div><div class='add'>+            local-&gt;op_errno = ENOENT;</div><div class='add'>+            dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        is_linkfile = check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                         conf-&gt;link_xattr_name);</div><div class='del'>-        is_dir      = check_is_dir (inode, stbuf, xattr);</div><div class='del'>-</div><div class='del'>-        if (!is_dir &amp;&amp; !is_linkfile) {</div><div class='del'>-                /* non-directory and not a linkfile */</div><div class='del'>-                ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "could not set pre-set layout for subvol"</div><div class='del'>-                                      " %s", prev-&gt;name);</div><div class='del'>-                        op_ret   = -1;</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    is_linkfile = check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name);</div><div class='add'>+    is_dir = check_is_dir(inode, stbuf, xattr);</div><div class='add'>+</div><div class='add'>+    if (!is_dir &amp;&amp; !is_linkfile) {</div><div class='add'>+        /* non-directory and not a linkfile */</div><div class='add'>+        ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "could not set pre-set layout for subvol"</div><div class='add'>+                         " %s",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (is_dir) {</div><div class='del'>-                call_cnt        = conf-&gt;subvolume_cnt;</div><div class='del'>-                local-&gt;call_cnt = call_cnt;</div><div class='del'>-</div><div class='del'>-                local-&gt;inode = inode_ref (inode);</div><div class='del'>-                local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='del'>-</div><div class='del'>-                local-&gt;layout = dht_layout_new (this, conf-&gt;subvolume_cnt);</div><div class='del'>-                if (!local-&gt;layout) {</div><div class='del'>-                        op_ret   = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_lookup_dir_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (is_linkfile) {</div><div class='del'>-                subvol = dht_linkfile_subvol (this, inode, stbuf, xattr);</div><div class='add'>+    if (is_dir) {</div><div class='add'>+        call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-                if (!subvol) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "linkfile has no link subvolume. path=%s",</div><div class='del'>-                                      loc-&gt;path);</div><div class='del'>-                        dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        local-&gt;inode = inode_ref(inode);</div><div class='add'>+        local-&gt;xattr = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_lookup_linkfile_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+</div><div class='add'>+        local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='add'>+        if (!local-&gt;layout) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_lookup_dir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (!local-&gt;hashed_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              local-&gt;loc.path);</div><div class='del'>-                local-&gt;op_errno = ENOENT;</div><div class='del'>-                dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='add'>+    if (is_linkfile) {</div><div class='add'>+        subvol = dht_linkfile_subvol(this, inode, stbuf, xattr);</div><div class='add'>+</div><div class='add'>+        if (!subvol) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "linkfile has no link subvolume. path=%s", loc-&gt;path);</div><div class='add'>+            dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_lookup_cbk, local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_lookup_linkfile_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    if (!local-&gt;hashed_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     local-&gt;loc.path);</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+        dht_lookup_everywhere(frame, this, loc);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_lookup_cbk, local-&gt;hashed_subvol,</div><div class='add'>+                      local-&gt;hashed_subvol, local-&gt;hashed_subvol-&gt;fops-&gt;lookup,</div><div class='add'>+                      &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, op_ret, op_errno,</div><div class='del'>-                          inode, stbuf, xattr, postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='add'>+                     postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-nufa_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             loc_t *loc, dict_t *xattr_req)</div><div class='add'>+nufa_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_LOOKUP);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_LOOKUP);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xattr_req) {</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, &amp;local-&gt;loc);</div><div class='add'>+</div><div class='add'>+    local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+</div><div class='add'>+    if (is_revalidate(loc)) {</div><div class='add'>+        layout = local-&gt;layout;</div><div class='add'>+        if (!layout) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "revalidate lookup without cache. "</div><div class='add'>+                         "path=%s",</div><div class='add'>+                         loc-&gt;path);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xattr_req) {</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='add'>+        if (layout-&gt;gen &amp;&amp; (layout-&gt;gen &lt; conf-&gt;gen)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "incomplete layout failure for path=%s",</div><div class='add'>+                         loc-&gt;path);</div><div class='add'>+            dht_layout_unref(this, local-&gt;layout);</div><div class='add'>+            goto do_fresh_lookup;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, &amp;local-&gt;loc);</div><div class='del'>-</div><div class='del'>-        local-&gt;hashed_subvol = hashed_subvol;</div><div class='del'>-</div><div class='del'>-        if (is_revalidate (loc)) {</div><div class='del'>-                layout = local-&gt;layout;</div><div class='del'>-                if (!layout) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "revalidate lookup without cache. "</div><div class='del'>-                                      "path=%s", loc-&gt;path);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (layout-&gt;gen &amp;&amp; (layout-&gt;gen &lt; conf-&gt;gen)) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "incomplete layout failure for path=%s",</div><div class='del'>-                                      loc-&gt;path);</div><div class='del'>-                        dht_layout_unref (this, local-&gt;layout);</div><div class='del'>-                        goto do_fresh_lookup;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-</div><div class='del'>-                local-&gt;call_cnt = layout-&gt;cnt;</div><div class='del'>-                call_cnt = local-&gt;call_cnt;</div><div class='del'>-</div><div class='del'>-                /* NOTE: we don't require 'trusted.glusterfs.dht.linkto' attribute,</div><div class='del'>-                 *       revalidates directly go to the cached-subvolume.</div><div class='del'>-                 */</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;xattr_name, 4 * 4);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dict value.");</div><div class='del'>-                        op_errno = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                        subvol = layout-&gt;list[i].xlator;</div><div class='del'>-</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_revalidate_cbk, subvol,</div><div class='del'>-                                           subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                           loc, local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-                        if (!--call_cnt)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-        do_fresh_lookup:</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;xattr_name, 4 * 4);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dict value.");</div><div class='del'>-                        op_errno = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;link_xattr_name, 256);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Failed to set dict value.");</div><div class='del'>-                        op_errno = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Send it to only local volume */</div><div class='del'>-                STACK_WIND_COOKIE (frame, nufa_local_lookup_cbk,</div><div class='del'>-                                   ((xlator_t *)conf-&gt;private),</div><div class='del'>-                                   ((xlator_t *)conf-&gt;private),</div><div class='del'>-                                   ((xlator_t *)conf-&gt;private)-&gt;fops-&gt;lookup,</div><div class='del'>-                                   loc, local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='add'>+        local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        local-&gt;call_cnt = layout-&gt;cnt;</div><div class='add'>+        call_cnt = local-&gt;call_cnt;</div><div class='ctx'> </div><div class='del'>-err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        /* NOTE: we don't require 'trusted.glusterfs.dht.linkto' attribute,</div><div class='add'>+         *       revalidates directly go to the cached-subvolume.</div><div class='add'>+         */</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dict value.");</div><div class='add'>+            op_errno = -1;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-nufa_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                 xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                 inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                                 struct iatt *preparent,</div><div class='del'>-                                 struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+            subvol = layout-&gt;list[i].xlator;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_revalidate_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;lookup, loc, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+            if (!--call_cnt)</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+    do_fresh_lookup:</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dict value.");</div><div class='add'>+            op_errno = -1;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;link_xattr_name, 256);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Failed to set dict value.");</div><div class='add'>+            op_errno = -1;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_create_cbk, local-&gt;cached_subvol,</div><div class='del'>-                           local-&gt;cached_subvol, local-&gt;cached_subvol-&gt;fops-&gt;create,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;flags, local-&gt;mode, local-&gt;umask,</div><div class='del'>-                           local-&gt;fd, local-&gt;params);</div><div class='add'>+        /* Send it to only local volume */</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, nufa_local_lookup_cbk, ((xlator_t *)conf-&gt;private),</div><div class='add'>+            ((xlator_t *)conf-&gt;private),</div><div class='add'>+            ((xlator_t *)conf-&gt;private)-&gt;fops-&gt;lookup, loc, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-nufa_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-             mode_t umask, fd_t *fd, dict_t *params)</div><div class='add'>+nufa_create_linkfile_create_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                                struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dht_conf_t  *conf  = NULL;</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='del'>-        xlator_t    *avail_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        conf  = this-&gt;private;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_create_cbk, local-&gt;cached_subvol,</div><div class='add'>+                      local-&gt;cached_subvol, local-&gt;cached_subvol-&gt;fops-&gt;create,</div><div class='add'>+                      &amp;local-&gt;loc, local-&gt;flags, local-&gt;mode, local-&gt;umask,</div><div class='add'>+                      local-&gt;fd, local-&gt;params);</div><div class='ctx'> </div><div class='del'>-        local = dht_local_init (frame, loc, fd, GF_FOP_CREATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        avail_subvol = conf-&gt;private;</div><div class='del'>-        if (dht_is_subvol_filled (this, (xlator_t *)conf-&gt;private)) {</div><div class='del'>-                avail_subvol =</div><div class='del'>-                        dht_free_disk_available_subvol (this,</div><div class='del'>-                                                        (xlator_t *)conf-&gt;private,</div><div class='del'>-                                                        local);</div><div class='del'>-        }</div><div class='add'>+err:</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (subvol != avail_subvol) {</div><div class='del'>-                /* create a link file instead of actual file */</div><div class='del'>-                local-&gt;params = dict_ref (params);</div><div class='del'>-                local-&gt;mode = mode;</div><div class='del'>-                local-&gt;flags = flags;</div><div class='del'>-                local-&gt;umask = umask;</div><div class='del'>-                local-&gt;cached_subvol = avail_subvol;</div><div class='del'>-                dht_linkfile_create (frame, nufa_create_linkfile_create_cbk,</div><div class='del'>-                                     this, avail_subvol, subvol, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+nufa_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+            mode_t mode, mode_t umask, fd_t *fd, dict_t *params)</div><div class='add'>+{</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, fd, GF_FOP_CREATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    avail_subvol = conf-&gt;private;</div><div class='add'>+    if (dht_is_subvol_filled(this, (xlator_t *)conf-&gt;private)) {</div><div class='add'>+        avail_subvol = dht_free_disk_available_subvol(</div><div class='add'>+            this, (xlator_t *)conf-&gt;private, local);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (subvol != avail_subvol) {</div><div class='add'>+        /* create a link file instead of actual file */</div><div class='add'>+        local-&gt;params = dict_ref(params);</div><div class='add'>+        local-&gt;mode = mode;</div><div class='add'>+        local-&gt;flags = flags;</div><div class='add'>+        local-&gt;umask = umask;</div><div class='add'>+        local-&gt;cached_subvol = avail_subvol;</div><div class='add'>+        dht_linkfile_create(frame, nufa_create_linkfile_create_cbk, this,</div><div class='add'>+                            avail_subvol, subvol, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_create_cbk, subvol,</div><div class='del'>-                           subvol, subvol-&gt;fops-&gt;create,</div><div class='del'>-                           loc, flags, mode, umask, fd, params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_create_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+                      params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-nufa_mknod_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                         struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                         struct iatt *postparent, dict_t *xdata)</div><div class='add'>+nufa_mknod_linkfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                        struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                        struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local || !local-&gt;cached_subvol) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local || !local-&gt;cached_subvol) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_newfile_cbk,</div><div class='del'>-                            (void *)local-&gt;cached_subvol, local-&gt;cached_subvol,</div><div class='del'>-                            local-&gt;cached_subvol-&gt;fops-&gt;mknod,</div><div class='del'>-                            &amp;local-&gt;loc, local-&gt;mode, local-&gt;rdev,</div><div class='del'>-                            local-&gt;umask, local-&gt;params);</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, dht_newfile_cbk, (void *)local-&gt;cached_subvol,</div><div class='add'>+            local-&gt;cached_subvol, local-&gt;cached_subvol-&gt;fops-&gt;mknod,</div><div class='add'>+            &amp;local-&gt;loc, local-&gt;mode, local-&gt;rdev, local-&gt;umask, local-&gt;params);</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> err:</div><div class='del'>-        WIPE (postparent);</div><div class='del'>-        WIPE (preparent);</div><div class='add'>+    WIPE(postparent);</div><div class='add'>+    WIPE(preparent);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (link, frame, op_ret, op_errno,</div><div class='del'>-                          inode, stbuf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                     postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-nufa_mknod (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *loc, mode_t mode, dev_t rdev, mode_t umask, dict_t *params)</div><div class='add'>+nufa_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+           dev_t rdev, mode_t umask, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dht_conf_t  *conf  = NULL;</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='del'>-        xlator_t    *avail_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_MKNOD);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Consider the disksize in consideration */</div><div class='del'>-        avail_subvol = conf-&gt;private;</div><div class='del'>-        if (dht_is_subvol_filled (this, (xlator_t *)conf-&gt;private)) {</div><div class='del'>-                avail_subvol =</div><div class='del'>-                        dht_free_disk_available_subvol (this,</div><div class='del'>-                                                        (xlator_t *)conf-&gt;private,</div><div class='del'>-                                                        local);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (avail_subvol != subvol) {</div><div class='del'>-                /* Create linkfile first */</div><div class='del'>-</div><div class='del'>-                local-&gt;params = dict_ref (params);</div><div class='del'>-                local-&gt;mode = mode;</div><div class='del'>-                local-&gt;umask = umask;</div><div class='del'>-                local-&gt;rdev = rdev;</div><div class='del'>-                local-&gt;cached_subvol = avail_subvol;</div><div class='del'>-</div><div class='del'>-                dht_linkfile_create (frame, nufa_mknod_linkfile_cbk, this,</div><div class='del'>-                                     avail_subvol, subvol, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_MKNOD);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Consider the disksize in consideration */</div><div class='add'>+    avail_subvol = conf-&gt;private;</div><div class='add'>+    if (dht_is_subvol_filled(this, (xlator_t *)conf-&gt;private)) {</div><div class='add'>+        avail_subvol = dht_free_disk_available_subvol(</div><div class='add'>+            this, (xlator_t *)conf-&gt;private, local);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (avail_subvol != subvol) {</div><div class='add'>+        /* Create linkfile first */</div><div class='add'>+</div><div class='add'>+        local-&gt;params = dict_ref(params);</div><div class='add'>+        local-&gt;mode = mode;</div><div class='add'>+        local-&gt;umask = umask;</div><div class='add'>+        local-&gt;rdev = rdev;</div><div class='add'>+        local-&gt;cached_subvol = avail_subvol;</div><div class='add'>+</div><div class='add'>+        dht_linkfile_create(frame, nufa_mknod_linkfile_cbk, this, avail_subvol,</div><div class='add'>+                            subvol, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;mknod, loc, mode, rdev, umask,</div><div class='del'>-                           params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;mknod, loc, mode, rdev, umask, params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (mknod, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> gf_boolean_t</div><div class='del'>-same_first_part (char *str1, char term1, char *str2, char term2)</div><div class='add'>+same_first_part(char *str1, char term1, char *str2, char term2)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    ended1;</div><div class='del'>-        gf_boolean_t    ended2;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                ended1 = ((*str1 == '\0') || (*str1 == term1));</div><div class='del'>-                ended2 = ((*str2 == '\0') || (*str2 == term2));</div><div class='del'>-                if (ended1 &amp;&amp; ended2) {</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                }</div><div class='del'>-                if (ended1 || ended2 || (*str1 != *str2)) {</div><div class='del'>-                        return _gf_false;</div><div class='del'>-                }</div><div class='del'>-                ++str1;</div><div class='del'>-                ++str2;</div><div class='add'>+    gf_boolean_t ended1;</div><div class='add'>+    gf_boolean_t ended2;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        ended1 = ((*str1 == '\0') || (*str1 == term1));</div><div class='add'>+        ended2 = ((*str2 == '\0') || (*str2 == term2));</div><div class='add'>+        if (ended1 &amp;&amp; ended2) {</div><div class='add'>+            return _gf_true;</div><div class='ctx'>         }</div><div class='add'>+        if (ended1 || ended2 || (*str1 != *str2)) {</div><div class='add'>+            return _gf_false;</div><div class='add'>+        }</div><div class='add'>+        ++str1;</div><div class='add'>+        ++str2;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> typedef struct nufa_args {</div><div class='del'>-        xlator_t    *this;</div><div class='del'>-        char        *volname;</div><div class='del'>-        gf_boolean_t addr_match;</div><div class='add'>+    xlator_t *this;</div><div class='add'>+    char *volname;</div><div class='add'>+    gf_boolean_t addr_match;</div><div class='ctx'> } nufa_args_t;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-nufa_find_local_brick (xlator_t *xl, void *data)</div><div class='add'>+nufa_find_local_brick(xlator_t *xl, void *data)</div><div class='ctx'> {</div><div class='del'>-        nufa_args_t     *args = data;</div><div class='del'>-        xlator_t        *this = args-&gt;this;</div><div class='del'>-        char            *local_volname = args-&gt;volname;</div><div class='del'>-        gf_boolean_t    addr_match = args-&gt;addr_match;</div><div class='del'>-        char            *brick_host = NULL;</div><div class='del'>-        dht_conf_t      *conf = this-&gt;private;</div><div class='del'>-        int             ret = -1;</div><div class='del'>-</div><div class='del'>-        /*This means a local subvol was already found. We pick the first brick</div><div class='del'>-         * that is local*/</div><div class='del'>-        if (conf-&gt;private)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        if (strcmp (xl-&gt;name, local_volname) == 0) {</div><div class='del'>-                conf-&gt;private = xl;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                        "Using specified subvol %s",</div><div class='del'>-                        local_volname);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!addr_match)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (xl-&gt;options, "remote-host", &amp;brick_host);</div><div class='del'>-        if ((ret == 0) &amp;&amp;</div><div class='del'>-            (gf_is_same_address (local_volname, brick_host) ||</div><div class='del'>-             gf_is_local_addr (brick_host))) {</div><div class='del'>-                conf-&gt;private = xl;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_INFO, "Using the first local "</div><div class='del'>-                        "subvol %s", xl-&gt;name);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    nufa_args_t *args = data;</div><div class='add'>+    xlator_t *this = args-&gt;this;</div><div class='add'>+    char *local_volname = args-&gt;volname;</div><div class='add'>+    gf_boolean_t addr_match = args-&gt;addr_match;</div><div class='add'>+    char *brick_host = NULL;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    /*This means a local subvol was already found. We pick the first brick</div><div class='add'>+     * that is local*/</div><div class='add'>+    if (conf-&gt;private)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    if (strcmp(xl-&gt;name, local_volname) == 0) {</div><div class='add'>+        conf-&gt;private = xl;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+               "Using specified subvol %s", local_volname);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!addr_match)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(xl-&gt;options, "remote-host", &amp;brick_host);</div><div class='add'>+    if ((ret == 0) &amp;&amp; (gf_is_same_address(local_volname, brick_host) ||</div><div class='add'>+                       gf_is_local_addr(brick_host))) {</div><div class='add'>+        conf-&gt;private = xl;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+               "Using the first local "</div><div class='add'>+               "subvol %s",</div><div class='add'>+               xl-&gt;name);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-nufa_to_dht (xlator_t *this)</div><div class='add'>+nufa_to_dht(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (this-&gt;fops);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(this-&gt;fops);</div><div class='ctx'> </div><div class='del'>-        this-&gt;fops-&gt;lookup = dht_lookup;</div><div class='del'>-        this-&gt;fops-&gt;create = dht_create;</div><div class='del'>-        this-&gt;fops-&gt;mknod  = dht_mknod;</div><div class='add'>+    this-&gt;fops-&gt;lookup = dht_lookup;</div><div class='add'>+    this-&gt;fops-&gt;create = dht_create;</div><div class='add'>+    this-&gt;fops-&gt;mknod = dht_mknod;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-nufa_find_local_subvol (xlator_t *this,</div><div class='del'>-                        void (*fn) (xlator_t *each, void* data), void *data)</div><div class='add'>+nufa_find_local_subvol(xlator_t *this, void (*fn)(xlator_t *each, void *data),</div><div class='add'>+                       void *data)</div><div class='ctx'> {</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        dht_conf_t      *conf = this-&gt;private;</div><div class='del'>-        xlator_list_t   *trav = NULL;</div><div class='del'>-        xlator_t        *parent = NULL;</div><div class='del'>-        xlator_t        *candidate = NULL;</div><div class='del'>-</div><div class='del'>-        xlator_foreach_depth_first (this, fn, data);</div><div class='del'>-        if (!conf-&gt;private) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_BRICK_ERROR, "Couldn't find a local "</div><div class='del'>-                        "brick");</div><div class='del'>-                return -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = this-&gt;private;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    xlator_t *parent = NULL;</div><div class='add'>+    xlator_t *candidate = NULL;</div><div class='add'>+</div><div class='add'>+    xlator_foreach_depth_first(this, fn, data);</div><div class='add'>+    if (!conf-&gt;private) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_BRICK_ERROR,</div><div class='add'>+               "Couldn't find a local "</div><div class='add'>+               "brick");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    candidate = conf-&gt;private;</div><div class='add'>+    trav = candidate-&gt;parents;</div><div class='add'>+    while (trav) {</div><div class='add'>+        parent = trav-&gt;xlator;</div><div class='add'>+        if (strcmp(parent-&gt;type, "cluster/nufa") == 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+                   "Found local subvol, "</div><div class='add'>+                   "%s",</div><div class='add'>+                   candidate-&gt;name);</div><div class='add'>+            ret = 0;</div><div class='add'>+            conf-&gt;private = candidate;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        candidate = conf-&gt;private;</div><div class='del'>-        trav = candidate-&gt;parents;</div><div class='del'>-        while (trav) {</div><div class='del'>-</div><div class='del'>-                parent = trav-&gt;xlator;</div><div class='del'>-                if (strcmp (parent-&gt;type, "cluster/nufa") == 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_SUBVOL_INFO, "Found local subvol, "</div><div class='del'>-                                "%s", candidate-&gt;name);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        conf-&gt;private = candidate;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                candidate = parent;</div><div class='del'>-                trav = parent-&gt;parents;</div><div class='del'>-        }</div><div class='add'>+        candidate = parent;</div><div class='add'>+        trav = parent-&gt;parents;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-nufa_init (xlator_t *this)</div><div class='add'>+nufa_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        data_t        *data = NULL;</div><div class='del'>-        char          *local_volname = NULL;</div><div class='del'>-        int            ret = -1;</div><div class='del'>-        char           my_hostname[256];</div><div class='del'>-        gf_boolean_t   addr_match = _gf_false;</div><div class='del'>-        nufa_args_t    args = {0, };</div><div class='del'>-</div><div class='del'>-        ret = dht_init(this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((data = dict_get (this-&gt;options, "local-volume-name"))) {</div><div class='del'>-                local_volname = data-&gt;data;</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                addr_match = _gf_true;</div><div class='del'>-                local_volname = "localhost";</div><div class='del'>-                ret = gethostname (my_hostname, 256);</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        local_volname = my_hostname;</div><div class='del'>-</div><div class='del'>-                else</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                DHT_MSG_GET_HOSTNAME_FAILED,</div><div class='del'>-                                "could not find hostname");</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        args.this = this;</div><div class='del'>-        args.volname = local_volname;</div><div class='del'>-        args.addr_match = addr_match;</div><div class='del'>-        ret = nufa_find_local_subvol (this, nufa_find_local_brick, &amp;args);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_SUBVOL_INFO,</div><div class='del'>-                        "Unable to find local subvolume, switching "</div><div class='del'>-                        "to dht mode");</div><div class='del'>-                nufa_to_dht (this);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    char *local_volname = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char my_hostname[256];</div><div class='add'>+    gf_boolean_t addr_match = _gf_false;</div><div class='add'>+    nufa_args_t args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = dht_init(this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((data = dict_get(this-&gt;options, "local-volume-name"))) {</div><div class='add'>+        local_volname = data-&gt;data;</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        addr_match = _gf_true;</div><div class='add'>+        local_volname = "localhost";</div><div class='add'>+        ret = gethostname(my_hostname, 256);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            local_volname = my_hostname;</div><div class='add'>+</div><div class='add'>+        else</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                   DHT_MSG_GET_HOSTNAME_FAILED, "could not find hostname");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    args.this = this;</div><div class='add'>+    args.volname = local_volname;</div><div class='add'>+    args.addr_match = addr_match;</div><div class='add'>+    ret = nufa_find_local_subvol(this, nufa_find_local_brick, &amp;args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_SUBVOL_INFO,</div><div class='add'>+               "Unable to find local subvolume, switching "</div><div class='add'>+               "to dht mode");</div><div class='add'>+        nufa_to_dht(this);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> dht_methods_t dht_methods = {</div><div class='del'>-        .migration_get_dst_subvol = dht_migration_get_dst_subvol,</div><div class='del'>-        .migration_needed = dht_migration_needed,</div><div class='del'>-        .layout_search   = dht_layout_search,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-class_methods_t class_methods = {</div><div class='del'>-        .init           = nufa_init,</div><div class='del'>-        .fini           = dht_fini,</div><div class='del'>-        .reconfigure    = dht_reconfigure,</div><div class='del'>-        .notify         = dht_notify</div><div class='add'>+    .migration_get_dst_subvol = dht_migration_get_dst_subvol,</div><div class='add'>+    .migration_needed = dht_migration_needed,</div><div class='add'>+    .layout_search = dht_layout_search,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='add'>+class_methods_t class_methods = {.init = nufa_init,</div><div class='add'>+                                 .fini = dht_fini,</div><div class='add'>+                                 .reconfigure = dht_reconfigure,</div><div class='add'>+                                 .notify = dht_notify};</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup      = nufa_lookup,</div><div class='del'>-        .create      = nufa_create,</div><div class='del'>-        .mknod       = nufa_mknod,</div><div class='del'>-</div><div class='del'>-        .stat        = dht_stat,</div><div class='del'>-        .fstat       = dht_fstat,</div><div class='del'>-        .truncate    = dht_truncate,</div><div class='del'>-        .ftruncate   = dht_ftruncate,</div><div class='del'>-        .access      = dht_access,</div><div class='del'>-        .readlink    = dht_readlink,</div><div class='del'>-        .setxattr    = dht_setxattr,</div><div class='del'>-        .getxattr    = dht_getxattr,</div><div class='del'>-        .removexattr = dht_removexattr,</div><div class='del'>-        .open        = dht_open,</div><div class='del'>-        .readv       = dht_readv,</div><div class='del'>-        .writev      = dht_writev,</div><div class='del'>-        .flush       = dht_flush,</div><div class='del'>-        .fsync       = dht_fsync,</div><div class='del'>-        .statfs      = dht_statfs,</div><div class='del'>-        .lk          = dht_lk,</div><div class='del'>-        .opendir     = dht_opendir,</div><div class='del'>-        .readdir     = dht_readdir,</div><div class='del'>-        .readdirp    = dht_readdirp,</div><div class='del'>-        .fsyncdir    = dht_fsyncdir,</div><div class='del'>-        .symlink     = dht_symlink,</div><div class='del'>-        .unlink      = dht_unlink,</div><div class='del'>-        .link        = dht_link,</div><div class='del'>-        .mkdir       = dht_mkdir,</div><div class='del'>-        .rmdir       = dht_rmdir,</div><div class='del'>-        .rename      = dht_rename,</div><div class='del'>-        .inodelk     = dht_inodelk,</div><div class='del'>-        .finodelk    = dht_finodelk,</div><div class='del'>-        .entrylk     = dht_entrylk,</div><div class='del'>-        .fentrylk    = dht_fentrylk,</div><div class='del'>-        .xattrop     = dht_xattrop,</div><div class='del'>-        .fxattrop    = dht_fxattrop,</div><div class='del'>-        .setattr     = dht_setattr,</div><div class='add'>+    .lookup = nufa_lookup,</div><div class='add'>+    .create = nufa_create,</div><div class='add'>+    .mknod = nufa_mknod,</div><div class='add'>+</div><div class='add'>+    .stat = dht_stat,</div><div class='add'>+    .fstat = dht_fstat,</div><div class='add'>+    .truncate = dht_truncate,</div><div class='add'>+    .ftruncate = dht_ftruncate,</div><div class='add'>+    .access = dht_access,</div><div class='add'>+    .readlink = dht_readlink,</div><div class='add'>+    .setxattr = dht_setxattr,</div><div class='add'>+    .getxattr = dht_getxattr,</div><div class='add'>+    .removexattr = dht_removexattr,</div><div class='add'>+    .open = dht_open,</div><div class='add'>+    .readv = dht_readv,</div><div class='add'>+    .writev = dht_writev,</div><div class='add'>+    .flush = dht_flush,</div><div class='add'>+    .fsync = dht_fsync,</div><div class='add'>+    .statfs = dht_statfs,</div><div class='add'>+    .lk = dht_lk,</div><div class='add'>+    .opendir = dht_opendir,</div><div class='add'>+    .readdir = dht_readdir,</div><div class='add'>+    .readdirp = dht_readdirp,</div><div class='add'>+    .fsyncdir = dht_fsyncdir,</div><div class='add'>+    .symlink = dht_symlink,</div><div class='add'>+    .unlink = dht_unlink,</div><div class='add'>+    .link = dht_link,</div><div class='add'>+    .mkdir = dht_mkdir,</div><div class='add'>+    .rmdir = dht_rmdir,</div><div class='add'>+    .rename = dht_rename,</div><div class='add'>+    .inodelk = dht_inodelk,</div><div class='add'>+    .finodelk = dht_finodelk,</div><div class='add'>+    .entrylk = dht_entrylk,</div><div class='add'>+    .fentrylk = dht_fentrylk,</div><div class='add'>+    .xattrop = dht_xattrop,</div><div class='add'>+    .fxattrop = dht_fxattrop,</div><div class='add'>+    .setattr = dht_setattr,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .forget     = dht_forget</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.forget = dht_forget};</div><div class='head'>diff --git a/xlators/cluster/dht/src/switch.c b/xlators/cluster/dht/src/switch.c<br/>index 8b66a09b822..ca9bfce5a8e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/switch.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/switch.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/switch.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/switch.c</a></div><div class='hunk'>@@ -8,7 +8,6 @@</div><div class='ctx'>   cases as published by the Free Software Foundation.</div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "dht-common.h"</div><div class='ctx'> #include "dht-mem-types.h"</div><div class='ctx'> </div><div class='hunk'>@@ -20,907 +19,853 @@</div><div class='ctx'> extern struct volume_options options[];</div><div class='ctx'> </div><div class='ctx'> struct switch_sched_array {</div><div class='del'>-        xlator_t *xl;</div><div class='del'>-        int32_t   eligible;</div><div class='del'>-        int32_t   considered;</div><div class='add'>+    xlator_t *xl;</div><div class='add'>+    int32_t eligible;</div><div class='add'>+    int32_t considered;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* Select one of this struct based on the path's pattern match */</div><div class='ctx'> struct switch_struct {</div><div class='del'>-        struct switch_struct      *next;</div><div class='del'>-        struct switch_sched_array *array;</div><div class='del'>-        int32_t                    node_index; /* Index of the node in</div><div class='del'>-                                                  this pattern. */</div><div class='del'>-        int32_t                    num_child;  /* Total num of child nodes</div><div class='del'>-                                                  with this pattern. */</div><div class='del'>-        char                       path_pattern[256];</div><div class='add'>+    struct switch_struct *next;</div><div class='add'>+    struct switch_sched_array *array;</div><div class='add'>+    int32_t node_index; /* Index of the node in</div><div class='add'>+                           this pattern. */</div><div class='add'>+    int32_t num_child;  /* Total num of child nodes</div><div class='add'>+                           with this pattern. */</div><div class='add'>+    char path_pattern[256];</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* TODO: all 'TODO's in dht.c holds good */</div><div class='ctx'> /* This function should return child node as '*:subvolumes' is inserterd */</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-gf_switch_valid_child (xlator_t *this, const char *child)</div><div class='add'>+gf_switch_valid_child(xlator_t *this, const char *child)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t *children = NULL;</div><div class='del'>-        int32_t        ret = 0;</div><div class='del'>-</div><div class='del'>-        children = this-&gt;children;</div><div class='del'>-        while (children) {</div><div class='del'>-                if (!strcmp (child, children-&gt;xlator-&gt;name)) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                children = children-&gt;next;</div><div class='add'>+    xlator_list_t *children = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    children = this-&gt;children;</div><div class='add'>+    while (children) {</div><div class='add'>+        if (!strcmp(child, children-&gt;xlator-&gt;name)) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        children = children-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static xlator_t *</div><div class='del'>-get_switch_matching_subvol (const char *path, dht_conf_t *conf,</div><div class='del'>-                            xlator_t *hashed_subvol)</div><div class='add'>+get_switch_matching_subvol(const char *path, dht_conf_t *conf,</div><div class='add'>+                           xlator_t *hashed_subvol)</div><div class='ctx'> {</div><div class='del'>-        struct switch_struct *cond      = NULL;</div><div class='del'>-        struct switch_struct *trav      = NULL;</div><div class='del'>-        char                 *pathname  = NULL;</div><div class='del'>-        int                   idx       = 0;</div><div class='del'>-        xlator_t             *subvol    = NULL;</div><div class='del'>-</div><div class='del'>-        cond = conf-&gt;private;</div><div class='del'>-        subvol = hashed_subvol;</div><div class='del'>-        if (!cond)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pathname = gf_strdup (path);</div><div class='del'>-        if (!pathname)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        trav = cond;</div><div class='del'>-        while (trav) {</div><div class='del'>-                if (fnmatch (trav-&gt;path_pattern,</div><div class='del'>-                             pathname, FNM_NOESCAPE) == 0) {</div><div class='del'>-                        for (idx = 0; idx &lt; trav-&gt;num_child; idx++) {</div><div class='del'>-                                if (trav-&gt;array[idx].xl == hashed_subvol)</div><div class='del'>-                                        goto out;</div><div class='del'>-                        }</div><div class='del'>-                        idx = trav-&gt;node_index++;</div><div class='del'>-                        trav-&gt;node_index %= trav-&gt;num_child;</div><div class='del'>-                        subvol = trav-&gt;array[idx].xl;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    struct switch_struct *cond = NULL;</div><div class='add'>+    struct switch_struct *trav = NULL;</div><div class='add'>+    char *pathname = NULL;</div><div class='add'>+    int idx = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+</div><div class='add'>+    cond = conf-&gt;private;</div><div class='add'>+    subvol = hashed_subvol;</div><div class='add'>+    if (!cond)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pathname = gf_strdup(path);</div><div class='add'>+    if (!pathname)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    trav = cond;</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (fnmatch(trav-&gt;path_pattern, pathname, FNM_NOESCAPE) == 0) {</div><div class='add'>+            for (idx = 0; idx &lt; trav-&gt;num_child; idx++) {</div><div class='add'>+                if (trav-&gt;array[idx].xl == hashed_subvol)</div><div class='add'>+                    goto out;</div><div class='add'>+            }</div><div class='add'>+            idx = trav-&gt;node_index++;</div><div class='add'>+            trav-&gt;node_index %= trav-&gt;num_child;</div><div class='add'>+            subvol = trav-&gt;array[idx].xl;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (pathname);</div><div class='add'>+    GF_FREE(pathname);</div><div class='ctx'> </div><div class='del'>-        return subvol;</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-switch_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int op_ret, int op_errno,</div><div class='del'>-                         inode_t *inode, struct iatt *stbuf, dict_t *xattr,</div><div class='del'>-                         struct iatt *postparent)</div><div class='add'>+switch_local_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                        struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                        struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *subvol      = NULL;</div><div class='del'>-        char          is_linkfile = 0;</div><div class='del'>-        char          is_dir      = 0;</div><div class='del'>-        dht_conf_t   *conf        = NULL;</div><div class='del'>-        dht_local_t  *local       = NULL;</div><div class='del'>-        loc_t        *loc         = NULL;</div><div class='del'>-        int           i           = 0;</div><div class='del'>-        xlator_t     *prev        = NULL;</div><div class='del'>-        int           call_cnt    = 0;</div><div class='del'>-        int           ret         = 0;</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        loc   = &amp;local-&gt;loc;</div><div class='del'>-</div><div class='del'>-        if (ENTRY_MISSING (op_ret, op_errno)) {</div><div class='del'>-                if (conf-&gt;search_unhashed) {</div><div class='del'>-                        local-&gt;op_errno = ENOENT;</div><div class='del'>-                        dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    char is_linkfile = 0;</div><div class='add'>+    char is_dir = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    if (ENTRY_MISSING(op_ret, op_errno)) {</div><div class='add'>+        if (conf-&gt;search_unhashed) {</div><div class='add'>+            local-&gt;op_errno = ENOENT;</div><div class='add'>+            dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        is_linkfile = check_is_linkfile (inode, stbuf, xattr,</div><div class='del'>-                                         conf-&gt;link_xattr_name);</div><div class='del'>-        is_dir      = check_is_dir (inode, stbuf, xattr);</div><div class='del'>-</div><div class='del'>-        if (!is_dir &amp;&amp; !is_linkfile) {</div><div class='del'>-                /* non-directory and not a linkfile */</div><div class='del'>-</div><div class='del'>-                ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "could not set pre-set layout "</div><div class='del'>-                                      "for subvol %s",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        op_ret   = -1;</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    is_linkfile = check_is_linkfile(inode, stbuf, xattr, conf-&gt;link_xattr_name);</div><div class='add'>+    is_dir = check_is_dir(inode, stbuf, xattr);</div><div class='add'>+</div><div class='add'>+    if (!is_dir &amp;&amp; !is_linkfile) {</div><div class='add'>+        /* non-directory and not a linkfile */</div><div class='add'>+</div><div class='add'>+        ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "could not set pre-set layout "</div><div class='add'>+                         "for subvol %s",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (is_dir) {</div><div class='del'>-                call_cnt        = conf-&gt;subvolume_cnt;</div><div class='del'>-                local-&gt;call_cnt = call_cnt;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                local-&gt;inode = inode_ref (inode);</div><div class='del'>-                local-&gt;xattr = dict_ref (xattr);</div><div class='add'>+    if (is_dir) {</div><div class='add'>+        call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        local-&gt;call_cnt = call_cnt;</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;op_errno = 0;</div><div class='add'>+        local-&gt;inode = inode_ref(inode);</div><div class='add'>+        local-&gt;xattr = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-                local-&gt;layout = dht_layout_new (this, conf-&gt;subvolume_cnt);</div><div class='del'>-                if (!local-&gt;layout) {</div><div class='del'>-                        op_ret   = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "memory allocation failed :(");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_lookup_dir_cbk,</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i],</div><div class='del'>-                                           conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='add'>+        local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='add'>+        if (!local-&gt;layout) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "memory allocation failed :(");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (is_linkfile) {</div><div class='del'>-                subvol = dht_linkfile_subvol (this, inode, stbuf, xattr);</div><div class='add'>+        for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_lookup_dir_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i],</div><div class='add'>+                              conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup, &amp;local-&gt;loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (!subvol) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "linkfile has no link subvolume.path=%s",</div><div class='del'>-                                      loc-&gt;path);</div><div class='del'>-                        dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    if (is_linkfile) {</div><div class='add'>+        subvol = dht_linkfile_subvol(this, inode, stbuf, xattr);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_lookup_linkfile_cbk, subvol,</div><div class='del'>-                                   subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+        if (!subvol) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "linkfile has no link subvolume.path=%s", loc-&gt;path);</div><div class='add'>+            dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND_COOKIE(frame, dht_lookup_linkfile_cbk, subvol, subvol,</div><div class='add'>+                          subvol-&gt;fops-&gt;lookup, &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (!local-&gt;hashed_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              local-&gt;loc.path);</div><div class='del'>-                local-&gt;op_errno = ENOENT;</div><div class='del'>-                dht_lookup_everywhere (frame, this, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;hashed_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     local-&gt;loc.path);</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+        dht_lookup_everywhere(frame, this, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_lookup_cbk, local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol,</div><div class='del'>-                           local-&gt;hashed_subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_lookup_cbk, local-&gt;hashed_subvol,</div><div class='add'>+                      local-&gt;hashed_subvol, local-&gt;hashed_subvol-&gt;fops-&gt;lookup,</div><div class='add'>+                      &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, op_ret, op_errno,</div><div class='del'>-                          inode, stbuf, xattr, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-switch_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *loc, dict_t *xattr_req)</div><div class='add'>+switch_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        xlator_t     *cached_subvol = NULL;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        dht_local_t  *local  = NULL;</div><div class='del'>-        dht_conf_t   *conf = NULL;</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        int           op_errno = -1;</div><div class='del'>-        dht_layout_t *layout = NULL;</div><div class='del'>-        int           i = 0;</div><div class='del'>-        int           call_cnt = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_LOOKUP);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_layout_t *layout = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_LOOKUP);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xattr_req) {</div><div class='add'>+        local-&gt;xattr_req = dict_ref(xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = dht_subvol_get_hashed(this, &amp;local-&gt;loc);</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+    local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+</div><div class='add'>+    if (is_revalidate(loc)) {</div><div class='add'>+        layout = local-&gt;layout;</div><div class='add'>+        if (!layout) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "revalidate lookup without cache. path=%s", loc-&gt;path);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (xattr_req) {</div><div class='del'>-                local-&gt;xattr_req = dict_ref (xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='add'>+        if (layout-&gt;gen &amp;&amp; (layout-&gt;gen &lt; conf-&gt;gen)) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "incomplete layout failure for path=%s",</div><div class='add'>+                         loc-&gt;path);</div><div class='add'>+            dht_layout_unref(this, local-&gt;layout);</div><div class='add'>+            goto do_fresh_lookup;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        hashed_subvol = dht_subvol_get_hashed (this, &amp;local-&gt;loc);</div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+        local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        local-&gt;hashed_subvol = hashed_subvol;</div><div class='add'>+        local-&gt;call_cnt = layout-&gt;cnt;</div><div class='add'>+        call_cnt = local-&gt;call_cnt;</div><div class='ctx'> </div><div class='del'>-        if (is_revalidate (loc)) {</div><div class='del'>-                layout = local-&gt;layout;</div><div class='del'>-                if (!layout) {</div><div class='del'>-                        gf_msg_debug(this-&gt;name, 0,</div><div class='del'>-                                     "revalidate lookup without cache. path=%s",</div><div class='del'>-                                     loc-&gt;path);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (layout-&gt;gen &amp;&amp; (layout-&gt;gen &lt; conf-&gt;gen)) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "incomplete layout failure for path=%s",</div><div class='del'>-                                      loc-&gt;path);</div><div class='del'>-                        dht_layout_unref (this, local-&gt;layout);</div><div class='del'>-                        goto do_fresh_lookup;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;inode    = inode_ref (loc-&gt;inode);</div><div class='del'>-</div><div class='del'>-                local-&gt;call_cnt = layout-&gt;cnt;</div><div class='del'>-                call_cnt = local-&gt;call_cnt;</div><div class='add'>+        /* NOTE: we don't require 'trusted.glusterfs.dht.linkto'</div><div class='add'>+         * attribute, revalidates directly go to the cached-subvolume.</div><div class='add'>+         */</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "failed to set dict value for %s", conf-&gt;xattr_name);</div><div class='ctx'> </div><div class='del'>-                /* NOTE: we don't require 'trusted.glusterfs.dht.linkto'</div><div class='del'>-                 * attribute, revalidates directly go to the cached-subvolume.</div><div class='del'>-                 */</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;xattr_name, 4 * 4);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "failed to set dict value for %s",</div><div class='del'>-                                conf-&gt;xattr_name);</div><div class='add'>+        for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='add'>+            subvol = layout-&gt;list[i].xlator;</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; layout-&gt;cnt; i++) {</div><div class='del'>-                        subvol = layout-&gt;list[i].xlator;</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_revalidate_cbk, subvol, subvol,</div><div class='add'>+                              subvol-&gt;fops-&gt;lookup, loc, local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_revalidate_cbk, subvol,</div><div class='del'>-                                           subvol, subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                           loc, local-&gt;xattr_req);</div><div class='add'>+            if (!--call_cnt)</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+    do_fresh_lookup:</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;xattr_name, 4 * 4);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "failed to set dict value for %s", conf-&gt;xattr_name);</div><div class='add'>+</div><div class='add'>+        ret = dict_set_uint32(local-&gt;xattr_req, conf-&gt;link_xattr_name, 256);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, EINVAL, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "failed to set dict value for %s", conf-&gt;link_xattr_name);</div><div class='add'>+</div><div class='add'>+        if (!hashed_subvol) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "no subvolume in layout for path=%s, "</div><div class='add'>+                         "checking on all the subvols to see if "</div><div class='add'>+                         "it is a directory",</div><div class='add'>+                         loc-&gt;path);</div><div class='add'>+            call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+            local-&gt;call_cnt = call_cnt;</div><div class='add'>+</div><div class='add'>+            local-&gt;layout = dht_layout_new(this, conf-&gt;subvolume_cnt);</div><div class='add'>+            if (!local-&gt;layout) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            for (i = 0; i &lt; call_cnt; i++) {</div><div class='add'>+                STACK_WIND_COOKIE(frame, dht_lookup_dir_cbk,</div><div class='add'>+                                  conf-&gt;subvolumes[i], conf-&gt;subvolumes[i],</div><div class='add'>+                                  conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='add'>+                                  &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='add'>+            }</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        if (!--call_cnt)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+        /*  */</div><div class='add'>+        cached_subvol = get_switch_matching_subvol(loc-&gt;path, conf,</div><div class='add'>+                                                   hashed_subvol);</div><div class='add'>+        if (cached_subvol == hashed_subvol) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, dht_lookup_cbk, hashed_subvol,</div><div class='add'>+                              hashed_subvol, hashed_subvol-&gt;fops-&gt;lookup, loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='ctx'>         } else {</div><div class='del'>-        do_fresh_lookup:</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;xattr_name, 4 * 4);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "failed to set dict value for %s",</div><div class='del'>-                                conf-&gt;xattr_name);</div><div class='del'>-</div><div class='del'>-                ret = dict_set_uint32 (local-&gt;xattr_req,</div><div class='del'>-                                       conf-&gt;link_xattr_name, 256);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "failed to set dict value for %s",</div><div class='del'>-                                conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-                if (!hashed_subvol) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "no subvolume in layout for path=%s, "</div><div class='del'>-                                      "checking on all the subvols to see if "</div><div class='del'>-                                      "it is a directory", loc-&gt;path);</div><div class='del'>-                        call_cnt        = conf-&gt;subvolume_cnt;</div><div class='del'>-                        local-&gt;call_cnt = call_cnt;</div><div class='del'>-</div><div class='del'>-                        local-&gt;layout = dht_layout_new (this,</div><div class='del'>-                                                        conf-&gt;subvolume_cnt);</div><div class='del'>-                        if (!local-&gt;layout) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        for (i = 0; i &lt; call_cnt; i++) {</div><div class='del'>-                                STACK_WIND_COOKIE (frame, dht_lookup_dir_cbk,</div><div class='del'>-                                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;lookup,</div><div class='del'>-                                                   &amp;local-&gt;loc, local-&gt;xattr_req);</div><div class='del'>-                        }</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*  */</div><div class='del'>-                cached_subvol = get_switch_matching_subvol (loc-&gt;path, conf,</div><div class='del'>-                                                            hashed_subvol);</div><div class='del'>-                if (cached_subvol == hashed_subvol) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, dht_lookup_cbk, hashed_subvol,</div><div class='del'>-                                           hashed_subvol,</div><div class='del'>-                                           hashed_subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                           loc, local-&gt;xattr_req);</div><div class='del'>-                } else {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, switch_local_lookup_cbk,</div><div class='del'>-                                           cached_subvol, cached_subvol,</div><div class='del'>-                                           cached_subvol-&gt;fops-&gt;lookup,</div><div class='del'>-                                           loc, local-&gt;xattr_req);</div><div class='del'>-                }</div><div class='add'>+            STACK_WIND_COOKIE(frame, switch_local_lookup_cbk, cached_subvol,</div><div class='add'>+                              cached_subvol, cached_subvol-&gt;fops-&gt;lookup, loc,</div><div class='add'>+                              local-&gt;xattr_req);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (lookup, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-switch_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                   xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                   inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                                   struct iatt *preparent,</div><div class='del'>-                                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+switch_create_linkfile_create_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                  xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                  inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                                  struct iatt *preparent,</div><div class='add'>+                                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_create_cbk, local-&gt;cached_subvol,</div><div class='del'>-                           local-&gt;cached_subvol, local-&gt;cached_subvol-&gt;fops-&gt;create,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;flags, local-&gt;mode, local-&gt;umask,</div><div class='del'>-                           local-&gt;fd, local-&gt;params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_create_cbk, local-&gt;cached_subvol,</div><div class='add'>+                      local-&gt;cached_subvol, local-&gt;cached_subvol-&gt;fops-&gt;create,</div><div class='add'>+                      &amp;local-&gt;loc, local-&gt;flags, local-&gt;mode, local-&gt;umask,</div><div class='add'>+                      local-&gt;fd, local-&gt;params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-switch_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-               mode_t umask, fd_t *fd, dict_t *params)</div><div class='add'>+switch_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+              mode_t mode, mode_t umask, fd_t *fd, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dht_conf_t  *conf  = NULL;</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='del'>-        xlator_t    *avail_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, fd, GF_FOP_CREATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        avail_subvol = get_switch_matching_subvol (loc-&gt;path, conf, subvol);</div><div class='del'>-        if (dht_is_subvol_filled (this, avail_subvol)) {</div><div class='del'>-                avail_subvol =</div><div class='del'>-                        dht_free_disk_available_subvol (this, avail_subvol,</div><div class='del'>-                                                        local);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (subvol != avail_subvol) {</div><div class='del'>-                /* create a link file instead of actual file */</div><div class='del'>-                local-&gt;mode = mode;</div><div class='del'>-                local-&gt;flags = flags;</div><div class='del'>-                local-&gt;umask = umask;</div><div class='del'>-                local-&gt;cached_subvol = avail_subvol;</div><div class='del'>-                dht_linkfile_create (frame, switch_create_linkfile_create_cbk,</div><div class='del'>-                                     this, avail_subvol, subvol, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, fd, GF_FOP_CREATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    avail_subvol = get_switch_matching_subvol(loc-&gt;path, conf, subvol);</div><div class='add'>+    if (dht_is_subvol_filled(this, avail_subvol)) {</div><div class='add'>+        avail_subvol = dht_free_disk_available_subvol(this, avail_subvol,</div><div class='add'>+                                                      local);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (subvol != avail_subvol) {</div><div class='add'>+        /* create a link file instead of actual file */</div><div class='add'>+        local-&gt;mode = mode;</div><div class='add'>+        local-&gt;flags = flags;</div><div class='add'>+        local-&gt;umask = umask;</div><div class='add'>+        local-&gt;cached_subvol = avail_subvol;</div><div class='add'>+        dht_linkfile_create(frame, switch_create_linkfile_create_cbk, this,</div><div class='add'>+                            avail_subvol, subvol, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_create_cbk, subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='del'>-                           params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_create_cbk, subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+                      params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-switch_mknod_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                           struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                           struct iatt *postparent, dict_t *xdata)</div><div class='add'>+switch_mknod_linkfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                          struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                          struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local || !local-&gt;cached_subvol) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local || !local-&gt;cached_subvol) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, dht_newfile_cbk,</div><div class='del'>-                            (void *)local-&gt;cached_subvol, local-&gt;cached_subvol,</div><div class='del'>-                            local-&gt;cached_subvol-&gt;fops-&gt;mknod,</div><div class='del'>-                            &amp;local-&gt;loc, local-&gt;mode, local-&gt;rdev,</div><div class='del'>-                            local-&gt;umask, local-&gt;params);</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, dht_newfile_cbk, (void *)local-&gt;cached_subvol,</div><div class='add'>+            local-&gt;cached_subvol, local-&gt;cached_subvol-&gt;fops-&gt;mknod,</div><div class='add'>+            &amp;local-&gt;loc, local-&gt;mode, local-&gt;rdev, local-&gt;umask, local-&gt;params);</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-err:</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, op_ret, op_errno,</div><div class='del'>-                          inode, stbuf, preparent, postparent, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+err:</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                     postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-switch_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-              dev_t rdev, mode_t umask, dict_t *params)</div><div class='add'>+switch_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+             dev_t rdev, mode_t umask, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dht_conf_t  *conf  = NULL;</div><div class='del'>-        xlator_t    *subvol = NULL;</div><div class='del'>-        xlator_t    *avail_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_MKNOD);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subvol = dht_subvol_get_hashed (this, loc);</div><div class='del'>-        if (!subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no subvolume in layout for path=%s",</div><div class='del'>-                              loc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Consider the disksize in consideration */</div><div class='del'>-        avail_subvol = get_switch_matching_subvol (loc-&gt;path, conf, subvol);</div><div class='del'>-        if (dht_is_subvol_filled (this, avail_subvol)) {</div><div class='del'>-                avail_subvol =</div><div class='del'>-                        dht_free_disk_available_subvol (this, avail_subvol,</div><div class='del'>-                                                        local);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (avail_subvol != subvol) {</div><div class='del'>-                /* Create linkfile first */</div><div class='del'>-</div><div class='del'>-                local-&gt;params = dict_ref (params);</div><div class='del'>-                local-&gt;mode = mode;</div><div class='del'>-                local-&gt;umask = umask;</div><div class='del'>-                local-&gt;rdev = rdev;</div><div class='del'>-                local-&gt;cached_subvol = avail_subvol;</div><div class='del'>-</div><div class='del'>-                dht_linkfile_create (frame, switch_mknod_linkfile_cbk,</div><div class='del'>-                                     this, avail_subvol, subvol, loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    xlator_t *avail_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_MKNOD);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subvol = dht_subvol_get_hashed(this, loc);</div><div class='add'>+    if (!subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no subvolume in layout for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Consider the disksize in consideration */</div><div class='add'>+    avail_subvol = get_switch_matching_subvol(loc-&gt;path, conf, subvol);</div><div class='add'>+    if (dht_is_subvol_filled(this, avail_subvol)) {</div><div class='add'>+        avail_subvol = dht_free_disk_available_subvol(this, avail_subvol,</div><div class='add'>+                                                      local);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (avail_subvol != subvol) {</div><div class='add'>+        /* Create linkfile first */</div><div class='add'>+</div><div class='add'>+        local-&gt;params = dict_ref(params);</div><div class='add'>+        local-&gt;mode = mode;</div><div class='add'>+        local-&gt;umask = umask;</div><div class='add'>+        local-&gt;rdev = rdev;</div><div class='add'>+        local-&gt;cached_subvol = avail_subvol;</div><div class='add'>+</div><div class='add'>+        dht_linkfile_create(frame, switch_mknod_linkfile_cbk, this,</div><div class='add'>+                            avail_subvol, subvol, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                      "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "creating %s on %s", loc-&gt;path, subvol-&gt;name);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='del'>-                           subvol-&gt;fops-&gt;mknod, loc, mode, rdev, umask,</div><div class='del'>-                           params);</div><div class='add'>+    STACK_WIND_COOKIE(frame, dht_newfile_cbk, (void *)subvol, subvol,</div><div class='add'>+                      subvol-&gt;fops-&gt;mknod, loc, mode, rdev, umask, params);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (mknod, frame, -1, op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-switch_fini (xlator_t *this)</div><div class='add'>+switch_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t           *conf = NULL;</div><div class='del'>-        struct switch_struct *trav = NULL;</div><div class='del'>-        struct switch_struct *prev = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (conf) {</div><div class='del'>-                trav = (struct switch_struct *)conf-&gt;private;</div><div class='del'>-                conf-&gt;private = NULL;</div><div class='del'>-                while (trav) {</div><div class='del'>-                        GF_FREE (trav-&gt;array);</div><div class='del'>-                        prev = trav;</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                        GF_FREE (prev);</div><div class='del'>-                }</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    struct switch_struct *trav = NULL;</div><div class='add'>+    struct switch_struct *prev = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (conf) {</div><div class='add'>+        trav = (struct switch_struct *)conf-&gt;private;</div><div class='add'>+        conf-&gt;private = NULL;</div><div class='add'>+        while (trav) {</div><div class='add'>+            GF_FREE(trav-&gt;array);</div><div class='add'>+            prev = trav;</div><div class='add'>+            trav = trav-&gt;next;</div><div class='add'>+            GF_FREE(prev);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dht_fini(this);</div><div class='add'>+    dht_fini(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-set_switch_pattern (xlator_t *this, dht_conf_t *conf,</div><div class='del'>-                    const char *pattern_str)</div><div class='add'>+set_switch_pattern(xlator_t *this, dht_conf_t *conf, const char *pattern_str)</div><div class='ctx'> {</div><div class='del'>-        int                         flag = 0;</div><div class='del'>-        int                         idx = 0;</div><div class='del'>-        int                         index = 0;</div><div class='del'>-        int                         child_count = 0;</div><div class='del'>-        char                       *tmp = NULL;</div><div class='del'>-        char                       *tmp1 = NULL;</div><div class='del'>-        char                       *child = NULL;</div><div class='del'>-        char                       *tmp_str = NULL;</div><div class='del'>-        char                       *tmp_str1 = NULL;</div><div class='del'>-        char                       *dup_str = NULL;</div><div class='del'>-        char                       *dup_childs = NULL;</div><div class='del'>-        char                       *switch_str = NULL;</div><div class='del'>-        char                       *pattern = NULL;</div><div class='del'>-        char                       *childs = NULL;</div><div class='del'>-        char                       *option_string = NULL;</div><div class='del'>-        size_t                      pattern_length;</div><div class='del'>-        struct switch_struct       *switch_buf = NULL;</div><div class='del'>-        struct switch_struct       *switch_opt = NULL;</div><div class='del'>-        struct switch_struct       *trav = NULL;</div><div class='del'>-        struct switch_sched_array  *switch_buf_array = NULL;</div><div class='del'>-        xlator_list_t              *trav_xl = NULL;</div><div class='del'>-</div><div class='del'>-        trav_xl = this-&gt;children;</div><div class='del'>-        while (trav_xl) {</div><div class='del'>-                index++;</div><div class='del'>-                trav_xl = trav_xl-&gt;next;</div><div class='add'>+    int flag = 0;</div><div class='add'>+    int idx = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    int child_count = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    char *tmp1 = NULL;</div><div class='add'>+    char *child = NULL;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='add'>+    char *tmp_str1 = NULL;</div><div class='add'>+    char *dup_str = NULL;</div><div class='add'>+    char *dup_childs = NULL;</div><div class='add'>+    char *switch_str = NULL;</div><div class='add'>+    char *pattern = NULL;</div><div class='add'>+    char *childs = NULL;</div><div class='add'>+    char *option_string = NULL;</div><div class='add'>+    size_t pattern_length;</div><div class='add'>+    struct switch_struct *switch_buf = NULL;</div><div class='add'>+    struct switch_struct *switch_opt = NULL;</div><div class='add'>+    struct switch_struct *trav = NULL;</div><div class='add'>+    struct switch_sched_array *switch_buf_array = NULL;</div><div class='add'>+    xlator_list_t *trav_xl = NULL;</div><div class='add'>+</div><div class='add'>+    trav_xl = this-&gt;children;</div><div class='add'>+    while (trav_xl) {</div><div class='add'>+        index++;</div><div class='add'>+        trav_xl = trav_xl-&gt;next;</div><div class='add'>+    }</div><div class='add'>+    child_count = index;</div><div class='add'>+    switch_buf_array = GF_CALLOC((index + 1), sizeof(struct switch_sched_array),</div><div class='add'>+                                 gf_switch_mt_switch_sched_array);</div><div class='add'>+    if (!switch_buf_array)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    trav_xl = this-&gt;children;</div><div class='add'>+    index = 0;</div><div class='add'>+</div><div class='add'>+    while (trav_xl) {</div><div class='add'>+        switch_buf_array[index].xl = trav_xl-&gt;xlator;</div><div class='add'>+        switch_buf_array[index].eligible = 1;</div><div class='add'>+        trav_xl = trav_xl-&gt;next;</div><div class='add'>+        index++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*  *jpg:child1,child2;*mpg:child3;*:child4,child5,child6 */</div><div class='add'>+</div><div class='add'>+    /* Get the pattern for considering switch case.</div><div class='add'>+       "option block-size *avi:10MB" etc */</div><div class='add'>+    option_string = gf_strdup(pattern_str);</div><div class='add'>+    switch_str = strtok_r(option_string, ";", &amp;tmp_str);</div><div class='add'>+    while (switch_str) {</div><div class='add'>+        dup_str = gf_strdup(switch_str);</div><div class='add'>+        switch_opt = GF_CALLOC(1, sizeof(struct switch_struct),</div><div class='add'>+                               gf_switch_mt_switch_struct);</div><div class='add'>+        if (!switch_opt) {</div><div class='add'>+            GF_FREE(dup_str);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-        child_count = index;</div><div class='del'>-        switch_buf_array = GF_CALLOC ((index + 1),</div><div class='del'>-                                      sizeof (struct switch_sched_array),</div><div class='del'>-                                      gf_switch_mt_switch_sched_array);</div><div class='del'>-        if (!switch_buf_array)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        trav_xl = this-&gt;children;</div><div class='del'>-        index = 0;</div><div class='ctx'> </div><div class='del'>-        while (trav_xl) {</div><div class='del'>-                switch_buf_array[index].xl = trav_xl-&gt;xlator;</div><div class='del'>-                switch_buf_array[index].eligible = 1;</div><div class='del'>-                trav_xl = trav_xl-&gt;next;</div><div class='del'>-                index++;</div><div class='add'>+        pattern = strtok_r(dup_str, ":", &amp;tmp_str1);</div><div class='add'>+        childs = strtok_r(NULL, ":", &amp;tmp_str1);</div><div class='add'>+        if (strncmp(pattern, "*", 2) == 0) {</div><div class='add'>+            gf_msg("switch", GF_LOG_INFO, 0, DHT_MSG_SWITCH_PATTERN_INFO,</div><div class='add'>+                   "'*' pattern will be taken by default "</div><div class='add'>+                   "for all the unconfigured child nodes,"</div><div class='add'>+                   " hence neglecting current option");</div><div class='add'>+            switch_str = strtok_r(NULL, ";", &amp;tmp_str);</div><div class='add'>+            GF_FREE(switch_opt);</div><div class='add'>+            switch_opt = NULL;</div><div class='add'>+            GF_FREE(dup_str);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /*  *jpg:child1,child2;*mpg:child3;*:child4,child5,child6 */</div><div class='del'>-</div><div class='del'>-        /* Get the pattern for considering switch case.</div><div class='del'>-           "option block-size *avi:10MB" etc */</div><div class='del'>-        option_string = gf_strdup (pattern_str);</div><div class='del'>-        switch_str = strtok_r (option_string, ";", &amp;tmp_str);</div><div class='del'>-        while (switch_str) {</div><div class='del'>-                dup_str = gf_strdup (switch_str);</div><div class='del'>-                switch_opt = GF_CALLOC (1, sizeof (struct switch_struct),</div><div class='del'>-                                        gf_switch_mt_switch_struct);</div><div class='del'>-                if (!switch_opt) {</div><div class='del'>-                        GF_FREE (dup_str);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                pattern = strtok_r (dup_str, ":", &amp;tmp_str1);</div><div class='del'>-                childs = strtok_r (NULL, ":", &amp;tmp_str1);</div><div class='del'>-                if (strncmp (pattern, "*", 2) == 0) {</div><div class='del'>-                        gf_msg ("switch", GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_SWITCH_PATTERN_INFO,</div><div class='del'>-                                "'*' pattern will be taken by default "</div><div class='del'>-                                "for all the unconfigured child nodes,"</div><div class='del'>-                                " hence neglecting current option");</div><div class='del'>-                        switch_str = strtok_r (NULL, ";", &amp;tmp_str);</div><div class='del'>-                        GF_FREE (switch_opt);</div><div class='del'>-                        switch_opt = NULL;</div><div class='del'>-                        GF_FREE (dup_str);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (dup_str);</div><div class='del'>-</div><div class='del'>-                pattern_length = strlen (pattern);</div><div class='del'>-                if (pattern_length &gt;= (sizeof (switch_opt-&gt;path_pattern))) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SET_SWITCH_PATTERN_ERROR,</div><div class='del'>-                                "Pattern (%s) too long", pattern);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                memcpy (switch_opt-&gt;path_pattern, pattern, pattern_length);</div><div class='del'>-                switch_opt-&gt;path_pattern[pattern_length] = '\0';</div><div class='del'>-</div><div class='del'>-                if (childs) {</div><div class='del'>-                        dup_childs = gf_strdup (childs);</div><div class='del'>-                        child = strtok_r (dup_childs, ",", &amp;tmp);</div><div class='del'>-                        while (child) {</div><div class='del'>-                                if (gf_switch_valid_child (this, child)) {</div><div class='del'>-                                        idx++;</div><div class='del'>-                                        child = strtok_r (NULL, ",", &amp;tmp);</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                DHT_MSG_SUBVOL_ERROR,</div><div class='del'>-                                                "%s is not a subvolume of %s. "</div><div class='del'>-                                                "pattern can only be scheduled "</div><div class='del'>-                                                "only to a subvolume of %s",</div><div class='del'>-                                                child, this-&gt;name, this-&gt;name);</div><div class='del'>-                                        GF_FREE (dup_childs);</div><div class='del'>-                                        goto err;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        GF_FREE (dup_childs);</div><div class='del'>-                        child = strtok_r (childs, ",", &amp;tmp1);</div><div class='del'>-                        switch_opt-&gt;num_child = idx;</div><div class='del'>-                        switch_opt-&gt;array = GF_CALLOC (1, (idx *</div><div class='del'>-                                                           sizeof (struct switch_sched_array)),</div><div class='del'>-                                                       gf_switch_mt_switch_sched_array);</div><div class='del'>-                        if (!switch_opt-&gt;array)</div><div class='del'>-                                goto err;</div><div class='del'>-                        idx = 0;</div><div class='del'>-                        while (child) {</div><div class='del'>-                                for (index = 0; index &lt; child_count; index++) {</div><div class='del'>-                                        if (strcmp (switch_buf_array[index].xl-&gt;name,</div><div class='del'>-                                                    child) == 0) {</div><div class='del'>-                                                gf_msg_debug ("switch", 0,</div><div class='del'>-                                                              "'%s' pattern will be "</div><div class='del'>-                                                              "scheduled to \"%s\"",</div><div class='del'>-                                                              switch_opt-&gt;path_pattern, child);</div><div class='del'>-                                                /*</div><div class='del'>-                                                  if (switch_buf_array[index-1].considered) {</div><div class='del'>-                                                  gf_msg_debug ("switch", 0,</div><div class='del'>-                                                  "ambiguity found, exiting");</div><div class='del'>-                                                  return -1;</div><div class='del'>-                                                  }</div><div class='del'>-                                                */</div><div class='del'>-                                                switch_opt-&gt;array[idx].xl = switch_buf_array[index].xl;</div><div class='del'>-                                                switch_buf_array[index].considered = 1;</div><div class='del'>-                                                idx++;</div><div class='del'>-                                                break;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                                child = strtok_r (NULL, ",", &amp;tmp1);</div><div class='del'>-                        }</div><div class='add'>+        GF_FREE(dup_str);</div><div class='add'>+</div><div class='add'>+        pattern_length = strlen(pattern);</div><div class='add'>+        if (pattern_length &gt;= (sizeof(switch_opt-&gt;path_pattern))) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_SET_SWITCH_PATTERN_ERROR, "Pattern (%s) too long",</div><div class='add'>+                   pattern);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        memcpy(switch_opt-&gt;path_pattern, pattern, pattern_length);</div><div class='add'>+        switch_opt-&gt;path_pattern[pattern_length] = '\0';</div><div class='add'>+</div><div class='add'>+        if (childs) {</div><div class='add'>+            dup_childs = gf_strdup(childs);</div><div class='add'>+            child = strtok_r(dup_childs, ",", &amp;tmp);</div><div class='add'>+            while (child) {</div><div class='add'>+                if (gf_switch_valid_child(this, child)) {</div><div class='add'>+                    idx++;</div><div class='add'>+                    child = strtok_r(NULL, ",", &amp;tmp);</div><div class='ctx'>                 } else {</div><div class='del'>-                        /* error */</div><div class='del'>-                        gf_msg ("switch", GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SET_SWITCH_PATTERN_ERROR,</div><div class='del'>-                                "Check \"scheduler.switch.case\" "</div><div class='del'>-                                "option in unify volume. Exiting");</div><div class='del'>-                        goto err;</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_SUBVOL_ERROR,</div><div class='add'>+                           "%s is not a subvolume of %s. "</div><div class='add'>+                           "pattern can only be scheduled "</div><div class='add'>+                           "only to a subvolume of %s",</div><div class='add'>+                           child, this-&gt;name, this-&gt;name);</div><div class='add'>+                    GF_FREE(dup_childs);</div><div class='add'>+                    goto err;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                /* Link it to the main structure */</div><div class='del'>-                if (switch_buf) {</div><div class='del'>-                        /* there are already few entries */</div><div class='del'>-                        trav = switch_buf;</div><div class='del'>-                        while (trav-&gt;next)</div><div class='del'>-                                trav = trav-&gt;next;</div><div class='del'>-                        trav-&gt;next = switch_opt;</div><div class='del'>-                } else {</div><div class='del'>-                        /* First entry */</div><div class='del'>-                        switch_buf = switch_opt;</div><div class='add'>+            }</div><div class='add'>+            GF_FREE(dup_childs);</div><div class='add'>+            child = strtok_r(childs, ",", &amp;tmp1);</div><div class='add'>+            switch_opt-&gt;num_child = idx;</div><div class='add'>+            switch_opt-&gt;array = GF_CALLOC(</div><div class='add'>+                1, (idx * sizeof(struct switch_sched_array)),</div><div class='add'>+                gf_switch_mt_switch_sched_array);</div><div class='add'>+            if (!switch_opt-&gt;array)</div><div class='add'>+                goto err;</div><div class='add'>+            idx = 0;</div><div class='add'>+            while (child) {</div><div class='add'>+                for (index = 0; index &lt; child_count; index++) {</div><div class='add'>+                    if (strcmp(switch_buf_array[index].xl-&gt;name, child) == 0) {</div><div class='add'>+                        gf_msg_debug("switch", 0,</div><div class='add'>+                                     "'%s' pattern will be "</div><div class='add'>+                                     "scheduled to \"%s\"",</div><div class='add'>+                                     switch_opt-&gt;path_pattern, child);</div><div class='add'>+                        /*</div><div class='add'>+                          if (switch_buf_array[index-1].considered) {</div><div class='add'>+                          gf_msg_debug ("switch", 0,</div><div class='add'>+                          "ambiguity found, exiting");</div><div class='add'>+                          return -1;</div><div class='add'>+                          }</div><div class='add'>+                        */</div><div class='add'>+                        switch_opt-&gt;array[idx].xl = switch_buf_array[index].xl;</div><div class='add'>+                        switch_buf_array[index].considered = 1;</div><div class='add'>+                        idx++;</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-                switch_opt = NULL;</div><div class='del'>-                switch_str = strtok_r (NULL, ";", &amp;tmp_str);</div><div class='add'>+                child = strtok_r(NULL, ",", &amp;tmp1);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            /* error */</div><div class='add'>+            gf_msg("switch", GF_LOG_ERROR, 0, DHT_MSG_SET_SWITCH_PATTERN_ERROR,</div><div class='add'>+                   "Check \"scheduler.switch.case\" "</div><div class='add'>+                   "option in unify volume. Exiting");</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Now, all the pattern based considerations done, so for all the</div><div class='del'>-         * remaining pattern, '*' to all the remaining child nodes</div><div class='del'>-         */</div><div class='del'>-        {</div><div class='del'>-                for (index=0; index &lt; child_count; index++) {</div><div class='del'>-                        /* check for considered flag */</div><div class='del'>-                        if (switch_buf_array[index].considered)</div><div class='del'>-                                continue;</div><div class='del'>-                        flag++;</div><div class='del'>-                }</div><div class='del'>-                if (!flag) {</div><div class='del'>-                        gf_msg ("switch", GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_SET_SWITCH_PATTERN_ERROR,</div><div class='del'>-                                "No nodes left for pattern '*'. Exiting");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                switch_opt = GF_CALLOC (1, sizeof (struct switch_struct),</div><div class='del'>-                                        gf_switch_mt_switch_struct);</div><div class='del'>-                if (!switch_opt)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-                /* Add the '*' pattern to the array */</div><div class='del'>-                memcpy (switch_opt-&gt;path_pattern, "*", 2);</div><div class='del'>-                switch_opt-&gt;num_child = flag;</div><div class='del'>-                switch_opt-&gt;array =</div><div class='del'>-                        GF_CALLOC (1,</div><div class='del'>-                                   flag * sizeof (struct switch_sched_array),</div><div class='del'>-                                   gf_switch_mt_switch_sched_array);</div><div class='del'>-                if (!switch_opt-&gt;array)</div><div class='del'>-                        goto err;</div><div class='del'>-                flag = 0;</div><div class='del'>-                for (index=0; index &lt; child_count; index++) {</div><div class='del'>-                        /* check for considered flag */</div><div class='del'>-                        if (switch_buf_array[index].considered)</div><div class='del'>-                                continue;</div><div class='del'>-                        gf_msg_debug ("switch", 0, "'%s'"</div><div class='del'>-                                      " pattern will be scheduled to \"%s\"",</div><div class='del'>-                                      switch_opt-&gt;path_pattern,</div><div class='del'>-                                      switch_buf_array[index].xl-&gt;name);</div><div class='del'>-</div><div class='del'>-                        switch_opt-&gt;array[flag].xl =</div><div class='del'>-                                switch_buf_array[index].xl;</div><div class='del'>-                        switch_buf_array[index].considered = 1;</div><div class='del'>-                        flag++;</div><div class='del'>-                }</div><div class='del'>-                if (switch_buf) {</div><div class='del'>-                        /* there are already few entries */</div><div class='del'>-                        trav = switch_buf;</div><div class='del'>-                        while (trav-&gt;next)</div><div class='del'>-                                trav = trav-&gt;next;</div><div class='del'>-                        trav-&gt;next = switch_opt;</div><div class='del'>-                } else {</div><div class='del'>-                        /* First entry */</div><div class='del'>-                        switch_buf = switch_opt;</div><div class='del'>-                }</div><div class='del'>-                switch_opt = NULL;</div><div class='add'>+        /* Link it to the main structure */</div><div class='add'>+        if (switch_buf) {</div><div class='add'>+            /* there are already few entries */</div><div class='add'>+            trav = switch_buf;</div><div class='add'>+            while (trav-&gt;next)</div><div class='add'>+                trav = trav-&gt;next;</div><div class='add'>+            trav-&gt;next = switch_opt;</div><div class='add'>+        } else {</div><div class='add'>+            /* First entry */</div><div class='add'>+            switch_buf = switch_opt;</div><div class='add'>+        }</div><div class='add'>+        switch_opt = NULL;</div><div class='add'>+        switch_str = strtok_r(NULL, ";", &amp;tmp_str);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Now, all the pattern based considerations done, so for all the</div><div class='add'>+     * remaining pattern, '*' to all the remaining child nodes</div><div class='add'>+     */</div><div class='add'>+    {</div><div class='add'>+        for (index = 0; index &lt; child_count; index++) {</div><div class='add'>+            /* check for considered flag */</div><div class='add'>+            if (switch_buf_array[index].considered)</div><div class='add'>+                continue;</div><div class='add'>+            flag++;</div><div class='add'>+        }</div><div class='add'>+        if (!flag) {</div><div class='add'>+            gf_msg("switch", GF_LOG_ERROR, 0, DHT_MSG_SET_SWITCH_PATTERN_ERROR,</div><div class='add'>+                   "No nodes left for pattern '*'. Exiting");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        switch_opt = GF_CALLOC(1, sizeof(struct switch_struct),</div><div class='add'>+                               gf_switch_mt_switch_struct);</div><div class='add'>+        if (!switch_opt)</div><div class='add'>+            goto err;</div><div class='add'>+</div><div class='add'>+        /* Add the '*' pattern to the array */</div><div class='add'>+        memcpy(switch_opt-&gt;path_pattern, "*", 2);</div><div class='add'>+        switch_opt-&gt;num_child = flag;</div><div class='add'>+        switch_opt-&gt;array = GF_CALLOC(1,</div><div class='add'>+                                      flag * sizeof(struct switch_sched_array),</div><div class='add'>+                                      gf_switch_mt_switch_sched_array);</div><div class='add'>+        if (!switch_opt-&gt;array)</div><div class='add'>+            goto err;</div><div class='add'>+        flag = 0;</div><div class='add'>+        for (index = 0; index &lt; child_count; index++) {</div><div class='add'>+            /* check for considered flag */</div><div class='add'>+            if (switch_buf_array[index].considered)</div><div class='add'>+                continue;</div><div class='add'>+            gf_msg_debug("switch", 0,</div><div class='add'>+                         "'%s'"</div><div class='add'>+                         " pattern will be scheduled to \"%s\"",</div><div class='add'>+                         switch_opt-&gt;path_pattern,</div><div class='add'>+                         switch_buf_array[index].xl-&gt;name);</div><div class='add'>+</div><div class='add'>+            switch_opt-&gt;array[flag].xl = switch_buf_array[index].xl;</div><div class='add'>+            switch_buf_array[index].considered = 1;</div><div class='add'>+            flag++;</div><div class='add'>+        }</div><div class='add'>+        if (switch_buf) {</div><div class='add'>+            /* there are already few entries */</div><div class='add'>+            trav = switch_buf;</div><div class='add'>+            while (trav-&gt;next)</div><div class='add'>+                trav = trav-&gt;next;</div><div class='add'>+            trav-&gt;next = switch_opt;</div><div class='add'>+        } else {</div><div class='add'>+            /* First entry */</div><div class='add'>+            switch_buf = switch_opt;</div><div class='ctx'>         }</div><div class='del'>-        /* */</div><div class='del'>-        conf-&gt;private = switch_buf;</div><div class='add'>+        switch_opt = NULL;</div><div class='add'>+    }</div><div class='add'>+    /* */</div><div class='add'>+    conf-&gt;private = switch_buf;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (option_string);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(option_string);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (switch_buf_array);</div><div class='del'>-        GF_FREE (switch_opt);</div><div class='del'>-        GF_FREE (option_string);</div><div class='add'>+    GF_FREE(switch_buf_array);</div><div class='add'>+    GF_FREE(switch_opt);</div><div class='add'>+    GF_FREE(option_string);</div><div class='ctx'> </div><div class='del'>-        if (switch_buf) {</div><div class='del'>-                trav = switch_buf;</div><div class='del'>-                while (trav) {</div><div class='del'>-                        GF_FREE (trav-&gt;array);</div><div class='del'>-                        switch_opt = trav;</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                        GF_FREE (switch_opt);</div><div class='del'>-                }</div><div class='add'>+    if (switch_buf) {</div><div class='add'>+        trav = switch_buf;</div><div class='add'>+        while (trav) {</div><div class='add'>+            GF_FREE(trav-&gt;array);</div><div class='add'>+            switch_opt = trav;</div><div class='add'>+            trav = trav-&gt;next;</div><div class='add'>+            GF_FREE(switch_opt);</div><div class='ctx'>         }</div><div class='del'>-        return -1;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-switch_init (xlator_t *this)</div><div class='add'>+switch_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t            *conf = NULL;</div><div class='del'>-        data_t                *data = NULL;</div><div class='del'>-        int                    ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = dht_init(this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = dht_init(this);</div><div class='add'>+    data = dict_get(this-&gt;options, "pattern.switch.case");</div><div class='add'>+    if (data) {</div><div class='add'>+        /* TODO: */</div><div class='add'>+        ret = set_switch_pattern(this, conf, data-&gt;data);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        data = dict_get (this-&gt;options, "pattern.switch.case");</div><div class='del'>-        if (data) {</div><div class='del'>-                /* TODO: */</div><div class='del'>-                ret = set_switch_pattern (this, conf, data-&gt;data);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = conf;</div><div class='del'>-        return 0;</div><div class='add'>+    this-&gt;private = conf;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        dht_fini(this);</div><div class='del'>-        return -1;</div><div class='add'>+    dht_fini(this);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-class_methods_t class_methods = {</div><div class='del'>-        .init           = switch_init,</div><div class='del'>-        .fini           = switch_fini,</div><div class='del'>-        .reconfigure    = dht_reconfigure,</div><div class='del'>-        .notify         = dht_notify</div><div class='del'>-};</div><div class='del'>-</div><div class='add'>+class_methods_t class_methods = {.init = switch_init,</div><div class='add'>+                                 .fini = switch_fini,</div><div class='add'>+                                 .reconfigure = dht_reconfigure,</div><div class='add'>+                                 .notify = dht_notify};</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup      = switch_lookup,</div><div class='del'>-        .create      = switch_create,</div><div class='del'>-        .mknod       = switch_mknod,</div><div class='del'>-</div><div class='del'>-        .stat        = dht_stat,</div><div class='del'>-        .fstat       = dht_fstat,</div><div class='del'>-        .truncate    = dht_truncate,</div><div class='del'>-        .ftruncate   = dht_ftruncate,</div><div class='del'>-        .access      = dht_access,</div><div class='del'>-        .readlink    = dht_readlink,</div><div class='del'>-        .setxattr    = dht_setxattr,</div><div class='del'>-        .getxattr    = dht_getxattr,</div><div class='del'>-        .removexattr = dht_removexattr,</div><div class='del'>-        .open        = dht_open,</div><div class='del'>-        .readv       = dht_readv,</div><div class='del'>-        .writev      = dht_writev,</div><div class='del'>-        .flush       = dht_flush,</div><div class='del'>-        .fsync       = dht_fsync,</div><div class='del'>-        .statfs      = dht_statfs,</div><div class='del'>-        .lk          = dht_lk,</div><div class='del'>-        .opendir     = dht_opendir,</div><div class='del'>-        .readdir     = dht_readdir,</div><div class='del'>-        .readdirp    = dht_readdirp,</div><div class='del'>-        .fsyncdir    = dht_fsyncdir,</div><div class='del'>-        .symlink     = dht_symlink,</div><div class='del'>-        .unlink      = dht_unlink,</div><div class='del'>-        .link        = dht_link,</div><div class='del'>-        .mkdir       = dht_mkdir,</div><div class='del'>-        .rmdir       = dht_rmdir,</div><div class='del'>-        .rename      = dht_rename,</div><div class='del'>-        .inodelk     = dht_inodelk,</div><div class='del'>-        .finodelk    = dht_finodelk,</div><div class='del'>-        .entrylk     = dht_entrylk,</div><div class='del'>-        .fentrylk    = dht_fentrylk,</div><div class='del'>-        .xattrop     = dht_xattrop,</div><div class='del'>-        .fxattrop    = dht_fxattrop,</div><div class='del'>-        .setattr     = dht_setattr,</div><div class='add'>+    .lookup = switch_lookup,</div><div class='add'>+    .create = switch_create,</div><div class='add'>+    .mknod = switch_mknod,</div><div class='add'>+</div><div class='add'>+    .stat = dht_stat,</div><div class='add'>+    .fstat = dht_fstat,</div><div class='add'>+    .truncate = dht_truncate,</div><div class='add'>+    .ftruncate = dht_ftruncate,</div><div class='add'>+    .access = dht_access,</div><div class='add'>+    .readlink = dht_readlink,</div><div class='add'>+    .setxattr = dht_setxattr,</div><div class='add'>+    .getxattr = dht_getxattr,</div><div class='add'>+    .removexattr = dht_removexattr,</div><div class='add'>+    .open = dht_open,</div><div class='add'>+    .readv = dht_readv,</div><div class='add'>+    .writev = dht_writev,</div><div class='add'>+    .flush = dht_flush,</div><div class='add'>+    .fsync = dht_fsync,</div><div class='add'>+    .statfs = dht_statfs,</div><div class='add'>+    .lk = dht_lk,</div><div class='add'>+    .opendir = dht_opendir,</div><div class='add'>+    .readdir = dht_readdir,</div><div class='add'>+    .readdirp = dht_readdirp,</div><div class='add'>+    .fsyncdir = dht_fsyncdir,</div><div class='add'>+    .symlink = dht_symlink,</div><div class='add'>+    .unlink = dht_unlink,</div><div class='add'>+    .link = dht_link,</div><div class='add'>+    .mkdir = dht_mkdir,</div><div class='add'>+    .rmdir = dht_rmdir,</div><div class='add'>+    .rename = dht_rename,</div><div class='add'>+    .inodelk = dht_inodelk,</div><div class='add'>+    .finodelk = dht_finodelk,</div><div class='add'>+    .entrylk = dht_entrylk,</div><div class='add'>+    .fentrylk = dht_fentrylk,</div><div class='add'>+    .xattrop = dht_xattrop,</div><div class='add'>+    .fxattrop = dht_fxattrop,</div><div class='add'>+    .setattr = dht_setattr,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .forget     = dht_forget</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.forget = dht_forget};</div><div class='head'>diff --git a/xlators/cluster/dht/src/tier-common.c b/xlators/cluster/dht/src/tier-common.c<br/>index f08ff4768f0..b86ed673042 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/tier-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/tier-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/tier-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/tier-common.c</a></div><div class='hunk'>@@ -17,1233 +17,1183 @@</div><div class='ctx'> #include "tier.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int op_ret, int op_errno,</div><div class='del'>-              inode_t *inode, struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata);</div><div class='del'>-</div><div class='add'>+dht_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+             int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int op_ret, int op_errno,</div><div class='del'>-              inode_t *inode, struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='add'>+tier_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+              struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        loc_t        *oldloc = NULL;</div><div class='del'>-        loc_t        *newloc = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    loc_t *oldloc = NULL;</div><div class='add'>+    loc_t *newloc = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        oldloc = &amp;local-&gt;loc;</div><div class='del'>-        newloc = &amp;local-&gt;loc2;</div><div class='add'>+    oldloc = &amp;local-&gt;loc;</div><div class='add'>+    newloc = &amp;local-&gt;loc2;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                /* No continuation on DHT inode missing errors, as we should</div><div class='del'>-                 * then have a good stbuf that states P2 happened. We would</div><div class='del'>-                 * get inode missing if, the file completed migrated between</div><div class='del'>-                 * the lookup and the link call */</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        /* No continuation on DHT inode missing errors, as we should</div><div class='add'>+         * then have a good stbuf that states P2 happened. We would</div><div class='add'>+         * get inode missing if, the file completed migrated between</div><div class='add'>+         * the lookup and the link call */</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;call_cnt != 1) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;call_cnt != 1) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = 2;</div><div class='add'>+    local-&gt;call_cnt = 2;</div><div class='ctx'> </div><div class='del'>-        /* Do this on the hot tier now */</div><div class='add'>+    /* Do this on the hot tier now */</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, tier_link_cbk, local-&gt;cached_subvol,</div><div class='del'>-                    local-&gt;cached_subvol-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='add'>+    STACK_WIND(frame, tier_link_cbk, local-&gt;cached_subvol,</div><div class='add'>+               local-&gt;cached_subvol-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (link, frame, op_ret, op_errno, inode, stbuf,</div><div class='del'>-                          preparent, postparent, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                     postparent, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-tier_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+tier_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t    *cached_subvol = NULL;</div><div class='del'>-        xlator_t    *hashed_subvol = NULL;</div><div class='del'>-        int          op_errno = -1;</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        dht_local_t *local = NULL;</div><div class='del'>-        dht_conf_t   *conf           = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (newloc, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, oldloc, NULL, GF_FOP_LINK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;call_cnt = 1;</div><div class='del'>-</div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='del'>-</div><div class='del'>-        if (!cached_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", oldloc-&gt;path);</div><div class='del'>-                op_errno = ENOENT;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='del'>-</div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc2, newloc);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (hashed_subvol == cached_subvol) {</div><div class='del'>-                STACK_WIND (frame, dht_link_cbk,</div><div class='del'>-                            cached_subvol, cached_subvol-&gt;fops-&gt;link,</div><div class='del'>-                            oldloc, newloc, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(newloc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, oldloc, NULL, GF_FOP_LINK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;call_cnt = 1;</div><div class='add'>+</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     oldloc-&gt;path);</div><div class='add'>+        op_errno = ENOENT;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc2, newloc);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (hashed_subvol == cached_subvol) {</div><div class='add'>+        STACK_WIND(frame, dht_link_cbk, cached_subvol,</div><div class='add'>+                   cached_subvol-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Create hardlinks to both the data file on the hot tier</div><div class='del'>-           and the linkto file on the cold tier */</div><div class='add'>+    /* Create hardlinks to both the data file on the hot tier</div><div class='add'>+       and the linkto file on the cold tier */</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (local-&gt;gfid, oldloc-&gt;inode-&gt;gfid);</div><div class='add'>+    gf_uuid_copy(local-&gt;gfid, oldloc-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, tier_link_cbk,</div><div class='del'>-                    hashed_subvol, hashed_subvol-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='add'>+    STACK_WIND(frame, tier_link_cbk, hashed_subvol, hashed_subvol-&gt;fops-&gt;link,</div><div class='add'>+               oldloc, newloc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='del'>-                          NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-tier_create_unlink_stale_linkto_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                     xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                     struct iatt *preparent,</div><div class='del'>-                                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+tier_create_unlink_stale_linkto_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                    xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                    struct iatt *preparent,</div><div class='add'>+                                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        dht_local_t     *local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (local-&gt;params) {</div><div class='add'>+        dict_del(local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;params) {</div><div class='del'>-                dict_del (local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, local-&gt;op_errno,</div><div class='del'>-                          NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, local-&gt;op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno,</div><div class='del'>-                 fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+tier_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *prev           = NULL;</div><div class='del'>-        int           ret            = -1;</div><div class='del'>-        dht_local_t  *local          = NULL;</div><div class='del'>-        xlator_t     *hashed_subvol  = NULL;</div><div class='del'>-        dht_conf_t   *conf           = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='del'>-</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        if (local-&gt;linked == _gf_true &amp;&amp; local-&gt;xattr_req) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            ret = dht_fill_dict_to_avoid_unlink_of_migrating_file(</div><div class='add'>+                local-&gt;xattr_req);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set dictionary value to "</div><div class='add'>+                       "unlink of migrating file");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                if (local-&gt;linked == _gf_true &amp;&amp; local-&gt;xattr_req) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        ret = dht_fill_dict_to_avoid_unlink_of_migrating_file</div><div class='del'>-                              (local-&gt;xattr_req);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Failed to set dictionary value to "</div><div class='del'>-                                        "unlink of migrating file");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        STACK_WIND (frame,</div><div class='del'>-                                    tier_create_unlink_stale_linkto_cbk,</div><div class='del'>-                                    hashed_subvol,</div><div class='del'>-                                    hashed_subvol-&gt;fops-&gt;unlink,</div><div class='del'>-                                    &amp;local-&gt;loc, 0, local-&gt;xattr_req);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+            STACK_WIND(frame, tier_create_unlink_stale_linkto_cbk,</div><div class='add'>+                       hashed_subvol, hashed_subvol-&gt;fops-&gt;unlink, &amp;local-&gt;loc,</div><div class='add'>+                       0, local-&gt;xattr_req);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev = cookie;</div><div class='add'>+    prev = cookie;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.parent) {</div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           preparent, 0);</div><div class='add'>+    if (local-&gt;loc.parent) {</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, preparent, 0);</div><div class='ctx'> </div><div class='del'>-                dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                           postparent, 1);</div><div class='del'>-        }</div><div class='add'>+        dht_inode_ctx_time_update(local-&gt;loc.parent, this, postparent, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dht_layout_preset (this, prev, inode);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "could not set preset layout for subvol %s",</div><div class='del'>-                              prev-&gt;name);</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dht_layout_preset(this, prev, inode);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "could not set preset layout for subvol %s",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;linked == _gf_true) {</div><div class='del'>-                local-&gt;stbuf = *stbuf;</div><div class='del'>-                dht_linkfile_attr_heal (frame, this);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;linked == _gf_true) {</div><div class='add'>+        local-&gt;stbuf = *stbuf;</div><div class='add'>+        dht_linkfile_attr_heal(frame, this);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;xattr_req) {</div><div class='del'>-                        dict_del (local-&gt;xattr_req, TIER_LINKFILE_GFID);</div><div class='del'>-                }</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;xattr_req) {</div><div class='add'>+            dict_del(local-&gt;xattr_req, TIER_LINKFILE_GFID);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        DHT_STRIP_PHASE1_FLAGS (stbuf);</div><div class='add'>+    DHT_STRIP_PHASE1_FLAGS(stbuf);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (create, frame, op_ret, op_errno, fd, inode,</div><div class='del'>-                          stbuf, preparent, postparent, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, op_ret, op_errno, fd, inode, stbuf,</div><div class='add'>+                     preparent, postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                xlator_t *this,</div><div class='del'>-                                int32_t op_ret, int32_t op_errno,</div><div class='del'>-                                inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                                struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                                dict_t *xdata)</div><div class='add'>+tier_create_linkfile_create_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                xlator_t *this, int32_t op_ret,</div><div class='add'>+                                int32_t op_errno, inode_t *inode,</div><div class='add'>+                                struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local             = NULL;</div><div class='del'>-        xlator_t        *cached_subvol     = NULL;</div><div class='del'>-        dht_conf_t      *conf              = NULL;</div><div class='del'>-        int              ret               = -1;</div><div class='del'>-        unsigned char   *gfid              = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cached_subvol = TIER_UNHASHED_SUBVOL;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;params) {</div><div class='del'>-                dict_del (local-&gt;params, conf-&gt;link_xattr_name);</div><div class='del'>-                dict_del (local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * We will delete the linkfile if data file creation fails.</div><div class='del'>-         * When deleting this stale linkfile, there is a possibility</div><div class='del'>-         * for a race between this linkfile deletion and a stale</div><div class='del'>-         * linkfile deletion triggered by another lookup from different</div><div class='del'>-         * client.</div><div class='del'>-         *</div><div class='del'>-         * For eg:</div><div class='del'>-         *</div><div class='del'>-         *     Client 1                        Client 2</div><div class='del'>-         *</div><div class='del'>-         * 1   linkfile created for foo</div><div class='del'>-         *</div><div class='del'>-         * 2   data file creation failed</div><div class='del'>-         *</div><div class='del'>-         * 3                                   creating a file with same name</div><div class='del'>-         *</div><div class='del'>-         * 4                                   lookup before creation deleted</div><div class='del'>-         *                                     the linkfile created by client1</div><div class='del'>-         *                                     considering as a stale linkfile.</div><div class='del'>-         *</div><div class='del'>-         * 5                                   New linkfile created for foo</div><div class='del'>-         *                                     with different gfid.</div><div class='del'>-         *</div><div class='del'>-         * 6 Trigger linkfile deletion as</div><div class='del'>-         *   data file creation failed.</div><div class='del'>-         *</div><div class='del'>-         * 7 Linkfile deleted which is</div><div class='del'>-         *   created by client2.</div><div class='del'>-         *</div><div class='del'>-         * 8                                   Data file created.</div><div class='del'>-         *</div><div class='del'>-         * With this race, we will end up having a file in a non-hashed subvol</div><div class='del'>-         * without a linkfile in hashed subvol.</div><div class='del'>-         *</div><div class='del'>-         * To avoid this, we store the gfid of linkfile created by client, So</div><div class='del'>-         * If we delete the linkfile , we validate gfid of existing file with</div><div class='del'>-         * stored value from posix layer.</div><div class='del'>-         *</div><div class='del'>-         * Storing this value in local-&gt;xattr_req as local-&gt;params was also used</div><div class='del'>-         * to create the data file. During the linkfile deletion we will use</div><div class='del'>-         * local-&gt;xattr_req dictionary.</div><div class='del'>-         */</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned char *gfid = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cached_subvol = TIER_UNHASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;params) {</div><div class='add'>+        dict_del(local-&gt;params, conf-&gt;link_xattr_name);</div><div class='add'>+        dict_del(local-&gt;params, GLUSTERFS_INTERNAL_FOP_KEY);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * We will delete the linkfile if data file creation fails.</div><div class='add'>+     * When deleting this stale linkfile, there is a possibility</div><div class='add'>+     * for a race between this linkfile deletion and a stale</div><div class='add'>+     * linkfile deletion triggered by another lookup from different</div><div class='add'>+     * client.</div><div class='add'>+     *</div><div class='add'>+     * For eg:</div><div class='add'>+     *</div><div class='add'>+     *     Client 1                        Client 2</div><div class='add'>+     *</div><div class='add'>+     * 1   linkfile created for foo</div><div class='add'>+     *</div><div class='add'>+     * 2   data file creation failed</div><div class='add'>+     *</div><div class='add'>+     * 3                                   creating a file with same name</div><div class='add'>+     *</div><div class='add'>+     * 4                                   lookup before creation deleted</div><div class='add'>+     *                                     the linkfile created by client1</div><div class='add'>+     *                                     considering as a stale linkfile.</div><div class='add'>+     *</div><div class='add'>+     * 5                                   New linkfile created for foo</div><div class='add'>+     *                                     with different gfid.</div><div class='add'>+     *</div><div class='add'>+     * 6 Trigger linkfile deletion as</div><div class='add'>+     *   data file creation failed.</div><div class='add'>+     *</div><div class='add'>+     * 7 Linkfile deleted which is</div><div class='add'>+     *   created by client2.</div><div class='add'>+     *</div><div class='add'>+     * 8                                   Data file created.</div><div class='add'>+     *</div><div class='add'>+     * With this race, we will end up having a file in a non-hashed subvol</div><div class='add'>+     * without a linkfile in hashed subvol.</div><div class='add'>+     *</div><div class='add'>+     * To avoid this, we store the gfid of linkfile created by client, So</div><div class='add'>+     * If we delete the linkfile , we validate gfid of existing file with</div><div class='add'>+     * stored value from posix layer.</div><div class='add'>+     *</div><div class='add'>+     * Storing this value in local-&gt;xattr_req as local-&gt;params was also used</div><div class='add'>+     * to create the data file. During the linkfile deletion we will use</div><div class='add'>+     * local-&gt;xattr_req dictionary.</div><div class='add'>+     */</div><div class='add'>+    if (!local-&gt;xattr_req) {</div><div class='add'>+        local-&gt;xattr_req = dict_new();</div><div class='ctx'>         if (!local-&gt;xattr_req) {</div><div class='del'>-                local-&gt;xattr_req = dict_new ();</div><div class='del'>-                if (!local-&gt;xattr_req) {</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        gfid = GF_MALLOC (sizeof (uuid_t), gf_common_mt_char);</div><div class='del'>-        if (!gfid) {</div><div class='del'>-                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (gfid, stbuf-&gt;ia_gfid);</div><div class='del'>-        ret = dict_set_dynptr (local-&gt;xattr_req, TIER_LINKFILE_GFID,</div><div class='del'>-                                   gfid, sizeof (uuid_t));</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (gfid);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set dictionary value"</div><div class='del'>-                        " : key = %s", TIER_LINKFILE_GFID);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND_COOKIE (frame, tier_create_cbk, cached_subvol,</div><div class='del'>-                           cached_subvol, cached_subvol-&gt;fops-&gt;create,</div><div class='del'>-                           &amp;local-&gt;loc, local-&gt;flags, local-&gt;mode,</div><div class='del'>-                           local-&gt;umask, local-&gt;fd, local-&gt;params);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gfid = GF_MALLOC(sizeof(uuid_t), gf_common_mt_char);</div><div class='add'>+    if (!gfid) {</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(gfid, stbuf-&gt;ia_gfid);</div><div class='add'>+    ret = dict_set_dynptr(local-&gt;xattr_req, TIER_LINKFILE_GFID, gfid,</div><div class='add'>+                          sizeof(uuid_t));</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(gfid);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set dictionary value"</div><div class='add'>+               " : key = %s",</div><div class='add'>+               TIER_LINKFILE_GFID);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_COOKIE(frame, tier_create_cbk, cached_subvol, cached_subvol,</div><div class='add'>+                      cached_subvol-&gt;fops-&gt;create, &amp;local-&gt;loc, local-&gt;flags,</div><div class='add'>+                      local-&gt;mode, local-&gt;umask, local-&gt;fd, local-&gt;params);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-tier_is_hot_tier_decommissioned (xlator_t *this)</div><div class='add'>+tier_is_hot_tier_decommissioned(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t              *conf        = NULL;</div><div class='del'>-        xlator_t                *hot_tier    = NULL;</div><div class='del'>-        int                      i           = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        hot_tier = conf-&gt;subvolumes[1];</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;decommission_subvols_cnt) {</div><div class='del'>-                for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                        if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='del'>-                                conf-&gt;decommissioned_bricks[i] == hot_tier)</div><div class='del'>-                                return _gf_true;</div><div class='del'>-                }</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *hot_tier = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    hot_tier = conf-&gt;subvolumes[1];</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;decommission_subvols_cnt) {</div><div class='add'>+        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+            if (conf-&gt;decommissioned_bricks[i] &amp;&amp;</div><div class='add'>+                conf-&gt;decommissioned_bricks[i] == hot_tier)</div><div class='add'>+                return _gf_true;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-            mode_t umask, fd_t *fd, dict_t *params)</div><div class='add'>+tier_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+            mode_t mode, mode_t umask, fd_t *fd, dict_t *params)</div><div class='ctx'> {</div><div class='del'>-        int                     op_errno            = -1;</div><div class='del'>-        dht_local_t             *local              = NULL;</div><div class='del'>-        dht_conf_t              *conf               = NULL;</div><div class='del'>-        xlator_t                *hot_subvol         = NULL;</div><div class='del'>-        xlator_t                *cold_subvol        = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        dht_get_du_info (frame, this, loc);</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, fd, GF_FOP_CREATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        cold_subvol = TIER_HASHED_SUBVOL;</div><div class='del'>-        hot_subvol = TIER_UNHASHED_SUBVOL;</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;subvolumes[0] != cold_subvol) {</div><div class='del'>-                hot_subvol = conf-&gt;subvolumes[0];</div><div class='del'>-        }</div><div class='del'>-        /*</div><div class='del'>-         * if hot tier full, write to cold.</div><div class='del'>-         * Also if hot tier is full, create in cold</div><div class='del'>-         */</div><div class='del'>-        if (dht_is_subvol_filled (this, hot_subvol) ||</div><div class='del'>-            tier_is_hot_tier_decommissioned (this)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "creating %s on %s", loc-&gt;path,</div><div class='del'>-                              cold_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_create_cbk, cold_subvol,</div><div class='del'>-                                   cold_subvol, cold_subvol-&gt;fops-&gt;create,</div><div class='del'>-                                   loc, flags, mode, umask, fd, params);</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;params = dict_ref (params);</div><div class='del'>-                local-&gt;flags = flags;</div><div class='del'>-                local-&gt;mode = mode;</div><div class='del'>-                local-&gt;umask = umask;</div><div class='del'>-                local-&gt;cached_subvol = hot_subvol;</div><div class='del'>-                local-&gt;hashed_subvol = cold_subvol;</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "creating %s on %s (link at %s)", loc-&gt;path,</div><div class='del'>-                              hot_subvol-&gt;name, cold_subvol-&gt;name);</div><div class='del'>-</div><div class='del'>-                dht_linkfile_create (frame, tier_create_linkfile_create_cbk,</div><div class='del'>-                                     this, hot_subvol, cold_subvol, loc);</div><div class='del'>-</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *hot_subvol = NULL;</div><div class='add'>+    xlator_t *cold_subvol = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dht_get_du_info(frame, this, loc);</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, fd, GF_FOP_CREATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cold_subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+    hot_subvol = TIER_UNHASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;subvolumes[0] != cold_subvol) {</div><div class='add'>+        hot_subvol = conf-&gt;subvolumes[0];</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * if hot tier full, write to cold.</div><div class='add'>+     * Also if hot tier is full, create in cold</div><div class='add'>+     */</div><div class='add'>+    if (dht_is_subvol_filled(this, hot_subvol) ||</div><div class='add'>+        tier_is_hot_tier_decommissioned(this)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "creating %s on %s", loc-&gt;path,</div><div class='add'>+                     cold_subvol-&gt;name);</div><div class='add'>+</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_create_cbk, cold_subvol, cold_subvol,</div><div class='add'>+                          cold_subvol-&gt;fops-&gt;create, loc, flags, mode, umask,</div><div class='add'>+                          fd, params);</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;params = dict_ref(params);</div><div class='add'>+        local-&gt;flags = flags;</div><div class='add'>+        local-&gt;mode = mode;</div><div class='add'>+        local-&gt;umask = umask;</div><div class='add'>+        local-&gt;cached_subvol = hot_subvol;</div><div class='add'>+        local-&gt;hashed_subvol = cold_subvol;</div><div class='add'>+</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "creating %s on %s (link at %s)", loc-&gt;path,</div><div class='add'>+                     hot_subvol-&gt;name, cold_subvol-&gt;name);</div><div class='add'>+</div><div class='add'>+        dht_linkfile_create(frame, tier_create_linkfile_create_cbk, this,</div><div class='add'>+                            hot_subvol, cold_subvol, loc);</div><div class='add'>+</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='ctx'> </div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                     NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_unlink_nonhashed_linkfile_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                    xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                                    struct iatt *preparent,</div><div class='del'>-                                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+tier_unlink_nonhashed_linkfile_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                   xlator_t *this, int op_ret, int op_errno,</div><div class='add'>+                                   struct iatt *preparent,</div><div class='add'>+                                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((op_ret == -1) &amp;&amp; (op_errno != ENOENT)) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "Unlink link: subvolume %s"</div><div class='del'>-                                      " returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((op_ret == -1) &amp;&amp; (op_errno != ENOENT)) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "Unlink link: subvolume %s"</div><div class='add'>+                         " returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto err;</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto err;</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, -1, local-&gt;op_errno,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, -1, local-&gt;op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_unlink_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                        struct iatt *preparent, dict_t *xdata,</div><div class='del'>-                        struct iatt *postparent)</div><div class='add'>+tier_unlink_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                       struct iatt *preparent, dict_t *xdata,</div><div class='add'>+                       struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t             *local             = NULL;</div><div class='del'>-        xlator_t                *prev              = NULL;</div><div class='del'>-        dht_conf_t              *conf              = NULL;</div><div class='del'>-        xlator_t                *hot_subvol        = NULL;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    xlator_t *hot_subvol = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        hot_subvol = TIER_UNHASHED_SUBVOL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    hot_subvol = TIER_UNHASHED_SUBVOL;</div><div class='ctx'> </div><div class='del'>-        if (!op_ret) {</div><div class='del'>-                /*</div><div class='del'>-                 * linkfile present on hot tier. unlinking the linkfile</div><div class='del'>-                 */</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_unlink_nonhashed_linkfile_cbk,</div><div class='del'>-                                   hot_subvol, hot_subvol, hot_subvol-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc, local-&gt;flags, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!op_ret) {</div><div class='add'>+        /*</div><div class='add'>+         * linkfile present on hot tier. unlinking the linkfile</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_unlink_nonhashed_linkfile_cbk, hot_subvol,</div><div class='add'>+                          hot_subvol, hot_subvol-&gt;fops-&gt;unlink, &amp;local-&gt;loc,</div><div class='add'>+                          local-&gt;flags, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_errno == ENOENT) {</div><div class='del'>-                        local-&gt;op_ret   = 0;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                              "Lookup : subvolume %s returned -1",</div><div class='del'>-                               prev-&gt;name);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_errno == ENOENT) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno, "Lookup : subvolume %s returned -1",</div><div class='add'>+                     prev-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_unlink_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+tier_unlink_linkfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                          int op_ret, int op_errno, struct iatt *preparent,</div><div class='ctx'>                          struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* Ignore EINVAL for tier to ignore error when the file</div><div class='del'>-                        does not exist on the other tier  */</div><div class='del'>-                if ((op_ret == -1) &amp;&amp; !((op_errno == ENOENT) ||</div><div class='del'>-                                        (op_errno == EINVAL))) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        local-&gt;op_ret   = op_ret;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "Unlink link: subvolume %s"</div><div class='del'>-                                      " returned -1",</div><div class='del'>-                                      prev-&gt;name);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* Ignore EINVAL for tier to ignore error when the file</div><div class='add'>+                does not exist on the other tier  */</div><div class='add'>+        if ((op_ret == -1) &amp;&amp; !((op_errno == ENOENT) || (op_errno == EINVAL))) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "Unlink link: subvolume %s"</div><div class='add'>+                         " returned -1",</div><div class='add'>+                         prev-&gt;name);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (local-&gt;op_ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, -1, local-&gt;op_errno,</div><div class='del'>-                          NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, -1, local-&gt;op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-tier_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+tier_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t     *local          = NULL;</div><div class='del'>-        xlator_t        *prev           = NULL;</div><div class='del'>-        struct iatt     *stbuf          = NULL;</div><div class='del'>-        dht_conf_t      *conf           = NULL;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        xlator_t        *hot_tier       = NULL;</div><div class='del'>-        xlator_t        *cold_tier      = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        cold_tier = TIER_HASHED_SUBVOL;</div><div class='del'>-        hot_tier = TIER_UNHASHED_SUBVOL;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        if (op_errno == ENOENT) {</div><div class='del'>-                                local-&gt;op_ret = 0;</div><div class='del'>-                        } else {</div><div class='del'>-                                local-&gt;op_ret   = -1;</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                        }</div><div class='del'>-                        gf_msg_debug (this-&gt;name, op_errno,</div><div class='del'>-                                      "Unlink: subvolume %s returned -1"</div><div class='del'>-                                      " with errno = %d",</div><div class='del'>-                                       prev-&gt;name, op_errno);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    struct iatt *stbuf = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *hot_tier = NULL;</div><div class='add'>+    xlator_t *cold_tier = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    cold_tier = TIER_HASHED_SUBVOL;</div><div class='add'>+    hot_tier = TIER_UNHASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if (op_errno == ENOENT) {</div><div class='ctx'>                 local-&gt;op_ret = 0;</div><div class='add'>+            } else {</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            }</div><div class='add'>+            gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                         "Unlink: subvolume %s returned -1"</div><div class='add'>+                         " with errno = %d",</div><div class='add'>+                         prev-&gt;name, op_errno);</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                local-&gt;postparent = *postparent;</div><div class='del'>-                local-&gt;preparent = *preparent;</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;loc.parent) {</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;preparent, 0);</div><div class='del'>-                        dht_inode_ctx_time_update (local-&gt;loc.parent, this,</div><div class='del'>-                                                   &amp;local-&gt;postparent, 1);</div><div class='del'>-                }</div><div class='add'>+        local-&gt;postparent = *postparent;</div><div class='add'>+        local-&gt;preparent = *preparent;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;loc.parent) {</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;preparent, 0);</div><div class='add'>+            dht_inode_ctx_time_update(local-&gt;loc.parent, this,</div><div class='add'>+                                      &amp;local-&gt;postparent, 1);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;op_ret)</div><div class='del'>-                goto out;</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (cold_tier != local-&gt;cached_subvol) {</div><div class='del'>-                /*</div><div class='del'>-                 * File is present in hot tier, so there will be</div><div class='del'>-                 * a link file on cold tier, deleting the linkfile</div><div class='del'>-                 * from cold tier</div><div class='del'>-                 */</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_unlink_linkfile_cbk, cold_tier,</div><div class='del'>-                                   cold_tier, cold_tier-&gt;fops-&gt;unlink,</div><div class='del'>-                                   &amp;local-&gt;loc,</div><div class='del'>-                                   local-&gt;flags, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;op_ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_bin (xdata, DHT_IATT_IN_XDATA_KEY, (void **) &amp;stbuf);</div><div class='del'>-        if (!ret &amp;&amp; stbuf &amp;&amp; ((IS_DHT_MIGRATION_PHASE2 (stbuf)) ||</div><div class='del'>-                      IS_DHT_MIGRATION_PHASE1 (stbuf))) {</div><div class='del'>-                /*</div><div class='del'>-                 * File is migrating from cold to hot tier.</div><div class='del'>-                 * Delete the destination linkfile.</div><div class='del'>-                 */</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_unlink_lookup_cbk, hot_tier,</div><div class='del'>-                                   hot_tier, hot_tier-&gt;fops-&gt;lookup,</div><div class='del'>-                                   &amp;local-&gt;loc, NULL);</div><div class='del'>-                return 0;</div><div class='add'>+    if (cold_tier != local-&gt;cached_subvol) {</div><div class='add'>+        /*</div><div class='add'>+         * File is present in hot tier, so there will be</div><div class='add'>+         * a link file on cold tier, deleting the linkfile</div><div class='add'>+         * from cold tier</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_unlink_linkfile_cbk, cold_tier, cold_tier,</div><div class='add'>+                          cold_tier-&gt;fops-&gt;unlink, &amp;local-&gt;loc, local-&gt;flags,</div><div class='add'>+                          xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_IATT_IN_XDATA_KEY, (void **)&amp;stbuf);</div><div class='add'>+    if (!ret &amp;&amp; stbuf &amp;&amp;</div><div class='add'>+        ((IS_DHT_MIGRATION_PHASE2(stbuf)) || IS_DHT_MIGRATION_PHASE1(stbuf))) {</div><div class='add'>+        /*</div><div class='add'>+         * File is migrating from cold to hot tier.</div><div class='add'>+         * Delete the destination linkfile.</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_unlink_lookup_cbk, hot_tier, hot_tier,</div><div class='add'>+                          hot_tier-&gt;fops-&gt;lookup, &amp;local-&gt;loc, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                          &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+tier_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='ctx'>             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *cached_subvol = NULL;</div><div class='del'>-        xlator_t                *hashed_subvol = NULL;</div><div class='del'>-        dht_conf_t              *conf          = NULL;</div><div class='del'>-        int                      op_errno      = -1;</div><div class='del'>-        dht_local_t             *local         = NULL;</div><div class='del'>-        int                      ret           = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, loc, NULL, GF_FOP_UNLINK);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='del'>-</div><div class='del'>-        cached_subvol = local-&gt;cached_subvol;</div><div class='del'>-        if (!cached_subvol) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "no cached subvolume for path=%s", loc-&gt;path);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local-&gt;flags = xflag;</div><div class='del'>-        if (IA_ISREG (loc-&gt;inode-&gt;ia_type) &amp;&amp;</div><div class='del'>-            (hashed_subvol == cached_subvol)) {</div><div class='del'>-                /*</div><div class='del'>-                 * File resides in cold tier. We need to stat</div><div class='del'>-                 * the file to see if it is being promoted.</div><div class='del'>-                 * If yes we need to delete the destination</div><div class='del'>-                 * file as well.</div><div class='del'>-                 *</div><div class='del'>-                 * Currently we are doing this check only for</div><div class='del'>-                 * regular files.</div><div class='del'>-                 */</div><div class='del'>-                xdata = xdata ? dict_ref (xdata) : dict_new ();</div><div class='del'>-                if (xdata) {</div><div class='del'>-                        ret = dict_set_int8 (xdata, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                        "Failed to set dictionary key %s",</div><div class='del'>-                                         DHT_IATT_IN_XDATA_KEY);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    xlator_t *cached_subvol = NULL;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, loc, NULL, GF_FOP_UNLINK);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    cached_subvol = local-&gt;cached_subvol;</div><div class='add'>+    if (!cached_subvol) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "no cached subvolume for path=%s",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;flags = xflag;</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type) &amp;&amp; (hashed_subvol == cached_subvol)) {</div><div class='ctx'>         /*</div><div class='del'>-         * File is on hot tier, delete the data file first, then</div><div class='del'>-         * linkfile from cold.</div><div class='add'>+         * File resides in cold tier. We need to stat</div><div class='add'>+         * the file to see if it is being promoted.</div><div class='add'>+         * If yes we need to delete the destination</div><div class='add'>+         * file as well.</div><div class='add'>+         *</div><div class='add'>+         * Currently we are doing this check only for</div><div class='add'>+         * regular files.</div><div class='ctx'>          */</div><div class='del'>-        STACK_WIND_COOKIE (frame, tier_unlink_cbk, cached_subvol,</div><div class='del'>-                           cached_subvol, cached_subvol-&gt;fops-&gt;unlink, loc,</div><div class='del'>-                           xflag, xdata);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+        xdata = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+        if (xdata) {</div><div class='add'>+            ret = dict_set_int8(xdata, DHT_IATT_IN_XDATA_KEY, 1);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "Failed to set dictionary key %s",</div><div class='add'>+                             DHT_IATT_IN_XDATA_KEY);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * File is on hot tier, delete the data file first, then</div><div class='add'>+     * linkfile from cold.</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND_COOKIE(frame, tier_unlink_cbk, cached_subvol, cached_subvol,</div><div class='add'>+                      cached_subvol-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, gf_dirent_t *orig_entries,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+tier_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, gf_dirent_t *orig_entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t   entries;</div><div class='del'>-        gf_dirent_t  *orig_entry = NULL;</div><div class='del'>-        gf_dirent_t  *entry = NULL;</div><div class='del'>-        int           count = 0;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (orig_entry, (&amp;orig_entries-&gt;list), list) {</div><div class='del'>-                entry = gf_dirent_for_name (orig_entry-&gt;d_name);</div><div class='del'>-                if (!entry) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                DHT_MSG_NO_MEMORY,</div><div class='del'>-                                "Memory allocation failed ");</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *orig_entry = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(orig_entry, (&amp;orig_entries-&gt;list), list)</div><div class='add'>+    {</div><div class='add'>+        entry = gf_dirent_for_name(orig_entry-&gt;d_name);</div><div class='add'>+        if (!entry) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+                   "Memory allocation failed ");</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                entry-&gt;d_off  = orig_entry-&gt;d_off;</div><div class='del'>-                entry-&gt;d_ino  = orig_entry-&gt;d_ino;</div><div class='del'>-                entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='del'>-                entry-&gt;d_len  = orig_entry-&gt;d_len;</div><div class='add'>+        entry-&gt;d_off = orig_entry-&gt;d_off;</div><div class='add'>+        entry-&gt;d_ino = orig_entry-&gt;d_ino;</div><div class='add'>+        entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='add'>+        entry-&gt;d_len = orig_entry-&gt;d_len;</div><div class='ctx'> </div><div class='del'>-                list_add_tail (&amp;entry-&gt;list, &amp;entries.list);</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-        op_ret = count;</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;entries.list);</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+    op_ret = count;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                op_ret = 0;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (readdir, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(readdir, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='ctx'> </div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+tier_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='ctx'>                   int op_errno, gf_dirent_t *orig_entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local = NULL;</div><div class='del'>-        gf_dirent_t   entries;</div><div class='del'>-        gf_dirent_t  *orig_entry = NULL;</div><div class='del'>-        gf_dirent_t  *entry = NULL;</div><div class='del'>-        xlator_t     *prev = NULL;</div><div class='del'>-        xlator_t     *next_subvol = NULL;</div><div class='del'>-        off_t         next_offset = 0;</div><div class='del'>-        int           count = 0;</div><div class='del'>-        dht_conf_t   *conf   = NULL;</div><div class='del'>-        int           ret    = 0;</div><div class='del'>-        inode_table_t           *itable = NULL;</div><div class='del'>-        inode_t                 *inode = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        itable = local-&gt;fd ? local-&gt;fd-&gt;inode-&gt;table : NULL;</div><div class='del'>-</div><div class='del'>-        conf  = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO(this-&gt;name, conf, unwind);</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (orig_entry, (&amp;orig_entries-&gt;list), list) {</div><div class='del'>-                next_offset = orig_entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                if (IA_ISINVAL(orig_entry-&gt;d_stat.ia_type)) {</div><div class='del'>-                        /*stat failed somewhere- ignore this entry*/</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *orig_entry = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    xlator_t *next_subvol = NULL;</div><div class='add'>+    off_t next_offset = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    itable = local-&gt;fd ? local-&gt;fd-&gt;inode-&gt;table : NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, unwind);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(orig_entry, (&amp;orig_entries-&gt;list), list)</div><div class='add'>+    {</div><div class='add'>+        next_offset = orig_entry-&gt;d_off;</div><div class='add'>+</div><div class='add'>+        if (IA_ISINVAL(orig_entry-&gt;d_stat.ia_type)) {</div><div class='add'>+            /*stat failed somewhere- ignore this entry*/</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                entry = gf_dirent_for_name (orig_entry-&gt;d_name);</div><div class='del'>-                if (!entry) {</div><div class='add'>+        entry = gf_dirent_for_name(orig_entry-&gt;d_name);</div><div class='add'>+        if (!entry) {</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        entry-&gt;d_off = orig_entry-&gt;d_off;</div><div class='add'>+        entry-&gt;d_stat = orig_entry-&gt;d_stat;</div><div class='add'>+        entry-&gt;d_ino = orig_entry-&gt;d_ino;</div><div class='add'>+        entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='add'>+        entry-&gt;d_len = orig_entry-&gt;d_len;</div><div class='ctx'> </div><div class='del'>-                entry-&gt;d_off  = orig_entry-&gt;d_off;</div><div class='del'>-                entry-&gt;d_stat = orig_entry-&gt;d_stat;</div><div class='del'>-                entry-&gt;d_ino  = orig_entry-&gt;d_ino;</div><div class='del'>-                entry-&gt;d_type = orig_entry-&gt;d_type;</div><div class='del'>-                entry-&gt;d_len  = orig_entry-&gt;d_len;</div><div class='del'>-</div><div class='del'>-                if (orig_entry-&gt;dict)</div><div class='del'>-                        entry-&gt;dict = dict_ref (orig_entry-&gt;dict);</div><div class='del'>-</div><div class='del'>-                if (check_is_linkfile (NULL, (&amp;orig_entry-&gt;d_stat),</div><div class='del'>-                                       orig_entry-&gt;dict,</div><div class='del'>-                                       conf-&gt;link_xattr_name)) {</div><div class='del'>-                        goto entries;</div><div class='del'>-</div><div class='del'>-                } else if (IA_ISDIR(entry-&gt;d_stat.ia_type)) {</div><div class='del'>-                        if (orig_entry-&gt;inode) {</div><div class='del'>-                                dht_inode_ctx_time_update (orig_entry-&gt;inode,</div><div class='del'>-                                                           this, &amp;entry-&gt;d_stat,</div><div class='del'>-                                                           1);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        if (orig_entry-&gt;inode) {</div><div class='del'>-                                ret = dht_layout_preset (this, prev,</div><div class='del'>-                                                         orig_entry-&gt;inode);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                                DHT_MSG_LAYOUT_SET_FAILED,</div><div class='del'>-                                                "failed to link the layout "</div><div class='del'>-                                                "in inode");</div><div class='del'>-</div><div class='del'>-                                entry-&gt;inode = inode_ref (orig_entry-&gt;inode);</div><div class='del'>-                        } else if (itable) {</div><div class='del'>-                                /*</div><div class='del'>-                                 * orig_entry-&gt;inode might be null if any upper</div><div class='del'>-                                 * layer xlators below client set to null, to</div><div class='del'>-                                 * force a lookup on the inode even if the inode</div><div class='del'>-                                 * is present in the inode table. In that case</div><div class='del'>-                                 * we just update the ctx to make sure we didn't</div><div class='del'>-                                 * missed anything.</div><div class='del'>-                                 */</div><div class='del'>-                                inode = inode_find (itable,</div><div class='del'>-                                                    orig_entry-&gt;d_stat.ia_gfid);</div><div class='del'>-                                if (inode) {</div><div class='del'>-                                        ret = dht_layout_preset</div><div class='del'>-                                                (this, TIER_HASHED_SUBVOL,</div><div class='del'>-                                                 inode);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                     GF_LOG_WARNING, 0,</div><div class='del'>-                                                     DHT_MSG_LAYOUT_SET_FAILED,</div><div class='del'>-                                                     "failed to link the layout"</div><div class='del'>-                                                     " in inode");</div><div class='del'>-                                        inode_unref (inode);</div><div class='del'>-                                        inode = NULL;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (orig_entry-&gt;dict)</div><div class='add'>+            entry-&gt;dict = dict_ref(orig_entry-&gt;dict);</div><div class='ctx'> </div><div class='del'>-entries:</div><div class='del'>-                list_add_tail (&amp;entry-&gt;list, &amp;entries.list);</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-        op_ret = count;</div><div class='add'>+        if (check_is_linkfile(NULL, (&amp;orig_entry-&gt;d_stat), orig_entry-&gt;dict,</div><div class='add'>+                              conf-&gt;link_xattr_name)) {</div><div class='add'>+            goto entries;</div><div class='ctx'> </div><div class='del'>-done:</div><div class='del'>-        if (count == 0) {</div><div class='del'>-                /* non-zero next_offset means that</div><div class='del'>-                   EOF is not yet hit on the current subvol</div><div class='del'>-                */</div><div class='del'>-                if (next_offset != 0) {</div><div class='del'>-                        next_subvol = prev;</div><div class='del'>-                } else {</div><div class='del'>-                        goto unwind;</div><div class='add'>+        } else if (IA_ISDIR(entry-&gt;d_stat.ia_type)) {</div><div class='add'>+            if (orig_entry-&gt;inode) {</div><div class='add'>+                dht_inode_ctx_time_update(orig_entry-&gt;inode, this,</div><div class='add'>+                                          &amp;entry-&gt;d_stat, 1);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if (orig_entry-&gt;inode) {</div><div class='add'>+                ret = dht_layout_preset(this, prev, orig_entry-&gt;inode);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                           DHT_MSG_LAYOUT_SET_FAILED,</div><div class='add'>+                           "failed to link the layout "</div><div class='add'>+                           "in inode");</div><div class='add'>+</div><div class='add'>+                entry-&gt;inode = inode_ref(orig_entry-&gt;inode);</div><div class='add'>+            } else if (itable) {</div><div class='add'>+                /*</div><div class='add'>+                 * orig_entry-&gt;inode might be null if any upper</div><div class='add'>+                 * layer xlators below client set to null, to</div><div class='add'>+                 * force a lookup on the inode even if the inode</div><div class='add'>+                 * is present in the inode table. In that case</div><div class='add'>+                 * we just update the ctx to make sure we didn't</div><div class='add'>+                 * missed anything.</div><div class='add'>+                 */</div><div class='add'>+                inode = inode_find(itable, orig_entry-&gt;d_stat.ia_gfid);</div><div class='add'>+                if (inode) {</div><div class='add'>+                    ret = dht_layout_preset(this, TIER_HASHED_SUBVOL, inode);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                               DHT_MSG_LAYOUT_SET_FAILED,</div><div class='add'>+                               "failed to link the layout"</div><div class='add'>+                               " in inode");</div><div class='add'>+                    inode_unref(inode);</div><div class='add'>+                    inode = NULL;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    entries:</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;entries.list);</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+    op_ret = count;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_readdirp_cbk, next_subvol,</div><div class='del'>-                                   next_subvol, next_subvol-&gt;fops-&gt;readdirp,</div><div class='del'>-                                   local-&gt;fd, local-&gt;size, next_offset,</div><div class='del'>-                                   local-&gt;xattr);</div><div class='del'>-                return 0;</div><div class='add'>+done:</div><div class='add'>+    if (count == 0) {</div><div class='add'>+        /* non-zero next_offset means that</div><div class='add'>+           EOF is not yet hit on the current subvol</div><div class='add'>+        */</div><div class='add'>+        if (next_offset != 0) {</div><div class='add'>+            next_subvol = prev;</div><div class='add'>+        } else {</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_readdirp_cbk, next_subvol, next_subvol,</div><div class='add'>+                          next_subvol-&gt;fops-&gt;readdirp, local-&gt;fd, local-&gt;size,</div><div class='add'>+                          next_offset, local-&gt;xattr);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                op_ret = 0;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        DHT_STACK_UNWIND (readdirp, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='add'>+    DHT_STACK_UNWIND(readdirp, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='ctx'> </div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+tier_do_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='ctx'>                 off_t yoff, int whichop, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t  *local         = NULL;</div><div class='del'>-        int           op_errno      = -1;</div><div class='del'>-        xlator_t     *hashed_subvol = NULL;</div><div class='del'>-        int           ret           = 0;</div><div class='del'>-        dht_conf_t   *conf          = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, NULL, whichop);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    xlator_t *hashed_subvol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, NULL, whichop);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;size = size;</div><div class='add'>+    local-&gt;xattr_req = (dict) ? dict_ref(dict) : NULL;</div><div class='add'>+</div><div class='add'>+    hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+</div><div class='add'>+    /* TODO: do proper readdir */</div><div class='add'>+    if (whichop == GF_FOP_READDIRP) {</div><div class='add'>+        if (dict)</div><div class='add'>+            local-&gt;xattr = dict_ref(dict);</div><div class='add'>+        else</div><div class='add'>+            local-&gt;xattr = dict_new();</div><div class='add'>+</div><div class='add'>+        if (local-&gt;xattr) {</div><div class='add'>+            ret = dict_set_uint32(local-&gt;xattr, conf-&gt;link_xattr_name, 256);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+                       "Failed to set dictionary value"</div><div class='add'>+                       " : key = %s",</div><div class='add'>+                       conf-&gt;link_xattr_name);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;size = size;</div><div class='del'>-        local-&gt;xattr_req = (dict) ? dict_ref (dict) : NULL;</div><div class='del'>-</div><div class='del'>-        hashed_subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_readdirp_cbk, hashed_subvol,</div><div class='add'>+                          hashed_subvol, hashed_subvol-&gt;fops-&gt;readdirp, fd,</div><div class='add'>+                          size, yoff, local-&gt;xattr);</div><div class='ctx'> </div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_readdir_cbk, hashed_subvol, hashed_subvol,</div><div class='add'>+                          hashed_subvol-&gt;fops-&gt;readdir, fd, size, yoff,</div><div class='add'>+                          local-&gt;xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TODO: do proper readdir */</div><div class='del'>-        if (whichop == GF_FOP_READDIRP) {</div><div class='del'>-                if (dict)</div><div class='del'>-                        local-&gt;xattr = dict_ref (dict);</div><div class='del'>-                else</div><div class='del'>-                        local-&gt;xattr = dict_new ();</div><div class='del'>-</div><div class='del'>-                if (local-&gt;xattr) {</div><div class='del'>-                        ret = dict_set_uint32 (local-&gt;xattr,</div><div class='del'>-                                               conf-&gt;link_xattr_name, 256);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                                        "Failed to set dictionary value"</div><div class='del'>-                                        " : key = %s",</div><div class='del'>-                                        conf-&gt;link_xattr_name);</div><div class='del'>-</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_readdirp_cbk, hashed_subvol,</div><div class='del'>-                                   hashed_subvol, hashed_subvol-&gt;fops-&gt;readdirp,</div><div class='del'>-                                   fd, size, yoff, local-&gt;xattr);</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_readdir_cbk, hashed_subvol,</div><div class='del'>-                                   hashed_subvol, hashed_subvol-&gt;fops-&gt;readdir,</div><div class='del'>-                                   fd, size, yoff, local-&gt;xattr);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (readdir, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(readdir, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+tier_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='ctx'>              off_t yoff, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          op = GF_FOP_READDIR;</div><div class='del'>-        dht_conf_t  *conf = NULL;</div><div class='del'>-        int          i = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                if (!conf-&gt;subvolume_status[i]) {</div><div class='del'>-                        op = GF_FOP_READDIRP;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    int op = GF_FOP_READDIR;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        if (!conf-&gt;subvolume_status[i]) {</div><div class='add'>+            op = GF_FOP_READDIRP;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (conf-&gt;use_readdirp)</div><div class='del'>-                op = GF_FOP_READDIRP;</div><div class='add'>+    if (conf-&gt;use_readdirp)</div><div class='add'>+        op = GF_FOP_READDIRP;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        tier_do_readdir (frame, this, fd, size, yoff, op, 0);</div><div class='del'>-        return 0;</div><div class='add'>+    tier_do_readdir(frame, this, fd, size, yoff, op, 0);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-               off_t yoff, dict_t *dict)</div><div class='add'>+tier_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t yoff, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        tier_do_readdir (frame, this, fd, size, yoff, GF_FOP_READDIRP, dict);</div><div class='del'>-        return 0;</div><div class='add'>+    tier_do_readdir(frame, this, fd, size, yoff, GF_FOP_READDIRP, dict);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno, struct statvfs *statvfs,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+tier_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, struct statvfs *statvfs, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t            event              = _gf_false;</div><div class='del'>-        qdstatfs_action_t       action             = qdstatfs_action_OFF;</div><div class='del'>-        dht_local_t             *local             = NULL;</div><div class='del'>-        int                     this_call_cnt      = 0;</div><div class='del'>-        int                     bsize              = 0;</div><div class='del'>-        int                     frsize             = 0;</div><div class='del'>-        GF_UNUSED int           ret                = 0;</div><div class='del'>-        unsigned long           new_usage          = 0;</div><div class='del'>-        unsigned long           cur_usage          = 0;</div><div class='del'>-        xlator_t                *prev              = NULL;</div><div class='del'>-        dht_conf_t              *conf              = NULL;</div><div class='del'>-        tier_statvfs_t          *tier_stat         = NULL;</div><div class='del'>-</div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_ASSERT (local);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                ret = dict_get_int8 (xdata, "quota-deem-statfs",</div><div class='del'>-                                     (int8_t *)&amp;event);</div><div class='del'>-</div><div class='del'>-        tier_stat = &amp;local-&gt;tier_statvfs;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                if (!statvfs) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='add'>+    gf_boolean_t event = _gf_false;</div><div class='add'>+    qdstatfs_action_t action = qdstatfs_action_OFF;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    int this_call_cnt = 0;</div><div class='add'>+    int bsize = 0;</div><div class='add'>+    int frsize = 0;</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+    unsigned long new_usage = 0;</div><div class='add'>+    unsigned long cur_usage = 0;</div><div class='add'>+    xlator_t *prev = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    tier_statvfs_t *tier_stat = NULL;</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_ASSERT(local);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        ret = dict_get_int8(xdata, "quota-deem-statfs", (int8_t *)&amp;event);</div><div class='add'>+</div><div class='add'>+    tier_stat = &amp;local-&gt;tier_statvfs;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        if (!statvfs) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;quota_deem_statfs) {</div><div class='add'>+            if (event == _gf_true) {</div><div class='add'>+                action = qdstatfs_action_COMPARE;</div><div class='add'>+            } else {</div><div class='add'>+                action = qdstatfs_action_NEGLECT;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            if (event == _gf_true) {</div><div class='add'>+                action = qdstatfs_action_REPLACE;</div><div class='add'>+                local-&gt;quota_deem_statfs = _gf_true;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;quota_deem_statfs) {</div><div class='del'>-                        if (event == _gf_true) {</div><div class='del'>-                                action = qdstatfs_action_COMPARE;</div><div class='del'>-                        } else {</div><div class='del'>-                                action = qdstatfs_action_NEGLECT;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-</div><div class='del'>-                        if (event == _gf_true) {</div><div class='del'>-                                action = qdstatfs_action_REPLACE;</div><div class='del'>-                                local-&gt;quota_deem_statfs = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (local-&gt;quota_deem_statfs) {</div><div class='add'>+            switch (action) {</div><div class='add'>+                case qdstatfs_action_NEGLECT:</div><div class='add'>+                    goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;quota_deem_statfs) {</div><div class='del'>-                        switch (action) {</div><div class='del'>-                        case qdstatfs_action_NEGLECT:</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        case qdstatfs_action_REPLACE:</div><div class='del'>-                                local-&gt;statvfs = *statvfs;</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        case qdstatfs_action_COMPARE:</div><div class='del'>-                                new_usage = statvfs-&gt;f_blocks -</div><div class='del'>-                                             statvfs-&gt;f_bfree;</div><div class='del'>-                                cur_usage = local-&gt;statvfs.f_blocks -</div><div class='del'>-                                             local-&gt;statvfs.f_bfree;</div><div class='del'>-</div><div class='del'>-                                /* Take the max of the usage from subvols */</div><div class='del'>-                                if (new_usage &gt;= cur_usage)</div><div class='del'>-                                        local-&gt;statvfs = *statvfs;</div><div class='del'>-                                goto unlock;</div><div class='del'>-</div><div class='del'>-                        default:</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                case qdstatfs_action_REPLACE:</div><div class='add'>+                    local-&gt;statvfs = *statvfs;</div><div class='add'>+                    goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;statvfs.f_bsize != 0) {</div><div class='del'>-                        bsize = max(local-&gt;statvfs.f_bsize, statvfs-&gt;f_bsize);</div><div class='del'>-                        frsize = max(local-&gt;statvfs.f_frsize, statvfs-&gt;f_frsize);</div><div class='del'>-                        dht_normalize_stats(&amp;local-&gt;statvfs, bsize, frsize);</div><div class='del'>-                        dht_normalize_stats(statvfs, bsize, frsize);</div><div class='del'>-                } else {</div><div class='del'>-                        local-&gt;statvfs.f_bsize    = statvfs-&gt;f_bsize;</div><div class='del'>-                        local-&gt;statvfs.f_frsize   = statvfs-&gt;f_frsize;</div><div class='del'>-                }</div><div class='add'>+                case qdstatfs_action_COMPARE:</div><div class='add'>+                    new_usage = statvfs-&gt;f_blocks - statvfs-&gt;f_bfree;</div><div class='add'>+                    cur_usage = local-&gt;statvfs.f_blocks -</div><div class='add'>+                                local-&gt;statvfs.f_bfree;</div><div class='ctx'> </div><div class='del'>-                if (prev == TIER_HASHED_SUBVOL) {</div><div class='del'>-                        local-&gt;statvfs.f_blocks   = statvfs-&gt;f_blocks;</div><div class='del'>-                        local-&gt;statvfs.f_files    = statvfs-&gt;f_files;</div><div class='del'>-                        local-&gt;statvfs.f_fsid     = statvfs-&gt;f_fsid;</div><div class='del'>-                        local-&gt;statvfs.f_flag     = statvfs-&gt;f_flag;</div><div class='del'>-                        local-&gt;statvfs.f_namemax  = statvfs-&gt;f_namemax;</div><div class='del'>-                        tier_stat-&gt;blocks_used    = (statvfs-&gt;f_blocks - statvfs-&gt;f_bfree);</div><div class='del'>-                        tier_stat-&gt;pblocks_used   = (statvfs-&gt;f_blocks - statvfs-&gt;f_bavail);</div><div class='del'>-                        tier_stat-&gt;files_used     = (statvfs-&gt;f_files - statvfs-&gt;f_ffree);</div><div class='del'>-                        tier_stat-&gt;pfiles_used    = (statvfs-&gt;f_files - statvfs-&gt;f_favail);</div><div class='del'>-                        tier_stat-&gt;hashed_fsid    = statvfs-&gt;f_fsid;</div><div class='del'>-                } else {</div><div class='del'>-                        tier_stat-&gt;unhashed_fsid      = statvfs-&gt;f_fsid;</div><div class='del'>-                        tier_stat-&gt;unhashed_blocks_used    = (statvfs-&gt;f_blocks - statvfs-&gt;f_bfree);</div><div class='del'>-                        tier_stat-&gt;unhashed_pblocks_used   = (statvfs-&gt;f_blocks - statvfs-&gt;f_bavail);</div><div class='del'>-                        tier_stat-&gt;unhashed_files_used     = (statvfs-&gt;f_files - statvfs-&gt;f_ffree);</div><div class='del'>-                        tier_stat-&gt;unhashed_pfiles_used    = (statvfs-&gt;f_files - statvfs-&gt;f_favail);</div><div class='del'>-                }</div><div class='add'>+                    /* Take the max of the usage from subvols */</div><div class='add'>+                    if (new_usage &gt;= cur_usage)</div><div class='add'>+                        local-&gt;statvfs = *statvfs;</div><div class='add'>+                    goto unlock;</div><div class='ctx'> </div><div class='add'>+                default:</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        this_call_cnt = dht_frame_return (frame);</div><div class='del'>-        if (is_last_call (this_call_cnt)) {</div><div class='del'>-                if (tier_stat-&gt;unhashed_fsid != tier_stat-&gt;hashed_fsid) {</div><div class='del'>-                        tier_stat-&gt;blocks_used    += tier_stat-&gt;unhashed_blocks_used;</div><div class='del'>-                        tier_stat-&gt;pblocks_used   += tier_stat-&gt;unhashed_pblocks_used;</div><div class='del'>-                        tier_stat-&gt;files_used     += tier_stat-&gt;unhashed_files_used;</div><div class='del'>-                        tier_stat-&gt;pfiles_used    += tier_stat-&gt;unhashed_pfiles_used;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;statvfs.f_bfree = local-&gt;statvfs.f_blocks -</div><div class='del'>-                        tier_stat-&gt;blocks_used;</div><div class='del'>-                local-&gt;statvfs.f_bavail = local-&gt;statvfs.f_blocks -</div><div class='del'>-                        tier_stat-&gt;pblocks_used;</div><div class='del'>-                local-&gt;statvfs.f_ffree = local-&gt;statvfs.f_files -</div><div class='del'>-                        tier_stat-&gt;files_used;</div><div class='del'>-                local-&gt;statvfs.f_favail = local-&gt;statvfs.f_files -</div><div class='del'>-                        tier_stat-&gt;pfiles_used;</div><div class='del'>-                DHT_STACK_UNWIND (statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                  &amp;local-&gt;statvfs, xdata);</div><div class='add'>+</div><div class='add'>+        if (local-&gt;statvfs.f_bsize != 0) {</div><div class='add'>+            bsize = max(local-&gt;statvfs.f_bsize, statvfs-&gt;f_bsize);</div><div class='add'>+            frsize = max(local-&gt;statvfs.f_frsize, statvfs-&gt;f_frsize);</div><div class='add'>+            dht_normalize_stats(&amp;local-&gt;statvfs, bsize, frsize);</div><div class='add'>+            dht_normalize_stats(statvfs, bsize, frsize);</div><div class='add'>+        } else {</div><div class='add'>+            local-&gt;statvfs.f_bsize = statvfs-&gt;f_bsize;</div><div class='add'>+            local-&gt;statvfs.f_frsize = statvfs-&gt;f_frsize;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        if (prev == TIER_HASHED_SUBVOL) {</div><div class='add'>+            local-&gt;statvfs.f_blocks = statvfs-&gt;f_blocks;</div><div class='add'>+            local-&gt;statvfs.f_files = statvfs-&gt;f_files;</div><div class='add'>+            local-&gt;statvfs.f_fsid = statvfs-&gt;f_fsid;</div><div class='add'>+            local-&gt;statvfs.f_flag = statvfs-&gt;f_flag;</div><div class='add'>+            local-&gt;statvfs.f_namemax = statvfs-&gt;f_namemax;</div><div class='add'>+            tier_stat-&gt;blocks_used = (statvfs-&gt;f_blocks - statvfs-&gt;f_bfree);</div><div class='add'>+            tier_stat-&gt;pblocks_used = (statvfs-&gt;f_blocks - statvfs-&gt;f_bavail);</div><div class='add'>+            tier_stat-&gt;files_used = (statvfs-&gt;f_files - statvfs-&gt;f_ffree);</div><div class='add'>+            tier_stat-&gt;pfiles_used = (statvfs-&gt;f_files - statvfs-&gt;f_favail);</div><div class='add'>+            tier_stat-&gt;hashed_fsid = statvfs-&gt;f_fsid;</div><div class='add'>+        } else {</div><div class='add'>+            tier_stat-&gt;unhashed_fsid = statvfs-&gt;f_fsid;</div><div class='add'>+            tier_stat-&gt;unhashed_blocks_used = (statvfs-&gt;f_blocks -</div><div class='add'>+                                               statvfs-&gt;f_bfree);</div><div class='add'>+            tier_stat-&gt;unhashed_pblocks_used = (statvfs-&gt;f_blocks -</div><div class='add'>+                                                statvfs-&gt;f_bavail);</div><div class='add'>+            tier_stat-&gt;unhashed_files_used = (statvfs-&gt;f_files -</div><div class='add'>+                                              statvfs-&gt;f_ffree);</div><div class='add'>+            tier_stat-&gt;unhashed_pfiles_used = (statvfs-&gt;f_files -</div><div class='add'>+                                               statvfs-&gt;f_favail);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    this_call_cnt = dht_frame_return(frame);</div><div class='add'>+    if (is_last_call(this_call_cnt)) {</div><div class='add'>+        if (tier_stat-&gt;unhashed_fsid != tier_stat-&gt;hashed_fsid) {</div><div class='add'>+            tier_stat-&gt;blocks_used += tier_stat-&gt;unhashed_blocks_used;</div><div class='add'>+            tier_stat-&gt;pblocks_used += tier_stat-&gt;unhashed_pblocks_used;</div><div class='add'>+            tier_stat-&gt;files_used += tier_stat-&gt;unhashed_files_used;</div><div class='add'>+            tier_stat-&gt;pfiles_used += tier_stat-&gt;unhashed_pfiles_used;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;statvfs.f_bfree = local-&gt;statvfs.f_blocks -</div><div class='add'>+                                 tier_stat-&gt;blocks_used;</div><div class='add'>+        local-&gt;statvfs.f_bavail = local-&gt;statvfs.f_blocks -</div><div class='add'>+                                  tier_stat-&gt;pblocks_used;</div><div class='add'>+        local-&gt;statvfs.f_ffree = local-&gt;statvfs.f_files - tier_stat-&gt;files_used;</div><div class='add'>+        local-&gt;statvfs.f_favail = local-&gt;statvfs.f_files -</div><div class='add'>+                                  tier_stat-&gt;pfiles_used;</div><div class='add'>+        DHT_STACK_UNWIND(statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                         &amp;local-&gt;statvfs, xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-tier_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+tier_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dht_local_t      *local  = NULL;</div><div class='del'>-        dht_conf_t       *conf = NULL;</div><div class='del'>-        int               op_errno = -1;</div><div class='del'>-        int               i = -1;</div><div class='del'>-        inode_t          *inode         = NULL;</div><div class='del'>-        inode_table_t    *itable        = NULL;</div><div class='del'>-        uuid_t            root_gfid     = {0, };</div><div class='del'>-        loc_t             newloc        = {0, };</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this-&gt;private, err);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        local = dht_local_init (frame, NULL, NULL, GF_FOP_STATFS);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    dht_local_t *local = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    uuid_t root_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this-&gt;private, err);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local = dht_local_init(frame, NULL, NULL, GF_FOP_STATFS);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;inode &amp;&amp; !IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        itable = loc-&gt;inode-&gt;table;</div><div class='add'>+        if (!itable) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;inode &amp;&amp; !IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                itable = loc-&gt;inode-&gt;table;</div><div class='del'>-                if (!itable) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                loc = &amp;local-&gt;loc2;</div><div class='del'>-                root_gfid[15] = 1;</div><div class='add'>+        loc = &amp;local-&gt;loc2;</div><div class='add'>+        root_gfid[15] = 1;</div><div class='ctx'> </div><div class='del'>-                inode = inode_find (itable, root_gfid);</div><div class='del'>-                if (!inode) {</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dht_build_root_loc (inode, &amp;newloc);</div><div class='del'>-                loc = &amp;newloc;</div><div class='add'>+        inode = inode_find(itable, root_gfid);</div><div class='add'>+        if (!inode) {</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='add'>+        dht_build_root_loc(inode, &amp;newloc);</div><div class='add'>+        loc = &amp;newloc;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, tier_statfs_cbk, conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i],</div><div class='del'>-                                   conf-&gt;subvolumes[i]-&gt;fops-&gt;statfs, loc,</div><div class='del'>-                                   xdata);</div><div class='del'>-        }</div><div class='add'>+    local-&gt;call_cnt = conf-&gt;subvolume_cnt;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;subvolume_cnt; i++) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, tier_statfs_cbk, conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i],</div><div class='add'>+                          conf-&gt;subvolumes[i]-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        DHT_STACK_UNWIND (statfs, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    DHT_STACK_UNWIND(statfs, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/tier.c b/xlators/cluster/dht/src/tier.c<br/>index 63eb65be302..f7fd6ef22e2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/tier.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/tier.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/tier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/tier.c</a></div><div class='hunk'>@@ -38,103 +38,101 @@ static gfdb_methods_t gfdb_methods;</div><div class='ctx'>  * Closes all the fds and frees the qfile_array</div><div class='ctx'>  * */</div><div class='ctx'> static void</div><div class='del'>-qfile_array_free (tier_qfile_array_t *qfile_array)</div><div class='add'>+qfile_array_free(tier_qfile_array_t *qfile_array)</div><div class='ctx'> {</div><div class='del'>-        ssize_t i = 0;</div><div class='del'>-</div><div class='del'>-        if (qfile_array) {</div><div class='del'>-                if (qfile_array-&gt;fd_array) {</div><div class='del'>-                        for (i = 0; i &lt; qfile_array-&gt;array_size; i++) {</div><div class='del'>-                                if (qfile_array-&gt;fd_array[i] != -1) {</div><div class='del'>-                                        sys_close (qfile_array-&gt;fd_array[i]);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    ssize_t i = 0;</div><div class='add'>+</div><div class='add'>+    if (qfile_array) {</div><div class='add'>+        if (qfile_array-&gt;fd_array) {</div><div class='add'>+            for (i = 0; i &lt; qfile_array-&gt;array_size; i++) {</div><div class='add'>+                if (qfile_array-&gt;fd_array[i] != -1) {</div><div class='add'>+                    sys_close(qfile_array-&gt;fd_array[i]);</div><div class='ctx'>                 }</div><div class='del'>-                GF_FREE (qfile_array-&gt;fd_array);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        GF_FREE (qfile_array);</div><div class='add'>+        GF_FREE(qfile_array-&gt;fd_array);</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(qfile_array);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Create a new query file list with given size */</div><div class='ctx'> static tier_qfile_array_t *</div><div class='del'>-qfile_array_new (ssize_t array_size)</div><div class='add'>+qfile_array_new(ssize_t array_size)</div><div class='ctx'> {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        tier_qfile_array_t *qfile_array   = NULL;</div><div class='del'>-        ssize_t i                       = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", (array_size &gt; 0), out);</div><div class='del'>-</div><div class='del'>-        qfile_array = GF_CALLOC (1, sizeof (tier_qfile_array_t),</div><div class='del'>-                                gf_tier_mt_qfile_array_t);</div><div class='del'>-        if (!qfile_array) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to allocate memory for tier_qfile_array_t");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        qfile_array-&gt;fd_array = GF_MALLOC (array_size * sizeof (int),</div><div class='del'>-                                           gf_dht_mt_int32_t);</div><div class='del'>-        if (!qfile_array-&gt;fd_array) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to allocate memory for "</div><div class='del'>-                        "tier_qfile_array_t-&gt;fd_array");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Init all the fds to -1 */</div><div class='del'>-        for (i = 0; i &lt; array_size; i++) {</div><div class='del'>-                qfile_array-&gt;fd_array[i] = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        qfile_array-&gt;array_size = array_size;</div><div class='del'>-        qfile_array-&gt;next_index = 0;</div><div class='del'>-</div><div class='del'>-        /* Set exhausted count to list size as the list is empty */</div><div class='del'>-        qfile_array-&gt;exhausted_count = qfile_array-&gt;array_size;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    tier_qfile_array_t *qfile_array = NULL;</div><div class='add'>+    ssize_t i = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", (array_size &gt; 0), out);</div><div class='add'>+</div><div class='add'>+    qfile_array = GF_CALLOC(1, sizeof(tier_qfile_array_t),</div><div class='add'>+                            gf_tier_mt_qfile_array_t);</div><div class='add'>+    if (!qfile_array) {</div><div class='add'>+        gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to allocate memory for tier_qfile_array_t");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    qfile_array-&gt;fd_array = GF_MALLOC(array_size * sizeof(int),</div><div class='add'>+                                      gf_dht_mt_int32_t);</div><div class='add'>+    if (!qfile_array-&gt;fd_array) {</div><div class='add'>+        gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to allocate memory for "</div><div class='add'>+               "tier_qfile_array_t-&gt;fd_array");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Init all the fds to -1 */</div><div class='add'>+    for (i = 0; i &lt; array_size; i++) {</div><div class='add'>+        qfile_array-&gt;fd_array[i] = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    qfile_array-&gt;array_size = array_size;</div><div class='add'>+    qfile_array-&gt;next_index = 0;</div><div class='add'>+</div><div class='add'>+    /* Set exhausted count to list size as the list is empty */</div><div class='add'>+    qfile_array-&gt;exhausted_count = qfile_array-&gt;array_size;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                qfile_array_free (qfile_array);</div><div class='del'>-                qfile_array = NULL;</div><div class='del'>-        }</div><div class='del'>-        return qfile_array;</div><div class='add'>+    if (ret) {</div><div class='add'>+        qfile_array_free(qfile_array);</div><div class='add'>+        qfile_array = NULL;</div><div class='add'>+    }</div><div class='add'>+    return qfile_array;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Checks if the query file list is empty or totally exhausted. */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_qfile_array_empty (tier_qfile_array_t *qfile_array)</div><div class='add'>+is_qfile_array_empty(tier_qfile_array_t *qfile_array)</div><div class='ctx'> {</div><div class='del'>-        return (qfile_array-&gt;exhausted_count == qfile_array-&gt;array_size) ?</div><div class='del'>-                _gf_true : _gf_false;</div><div class='add'>+    return (qfile_array-&gt;exhausted_count == qfile_array-&gt;array_size)</div><div class='add'>+               ? _gf_true</div><div class='add'>+               : _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Shifts the next_fd pointer to the next available fd in the list */</div><div class='ctx'> static void</div><div class='del'>-shift_next_index (tier_qfile_array_t *qfile_array)</div><div class='add'>+shift_next_index(tier_qfile_array_t *qfile_array)</div><div class='ctx'> {</div><div class='del'>-        int qfile_fd = 0;</div><div class='del'>-        int spin_count = 0;</div><div class='add'>+    int qfile_fd = 0;</div><div class='add'>+    int spin_count = 0;</div><div class='ctx'> </div><div class='del'>-        if (is_qfile_array_empty (qfile_array)) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        do {</div><div class='del'>-                /* change next_index in a rotional manner */</div><div class='del'>-                (qfile_array-&gt;next_index == (qfile_array-&gt;array_size - 1)) ?</div><div class='del'>-                qfile_array-&gt;next_index = 0 : qfile_array-&gt;next_index++;</div><div class='add'>+    if (is_qfile_array_empty(qfile_array)) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                qfile_fd = (qfile_array-&gt;fd_array[qfile_array-&gt;next_index]);</div><div class='add'>+    do {</div><div class='add'>+        /* change next_index in a rotional manner */</div><div class='add'>+        (qfile_array-&gt;next_index == (qfile_array-&gt;array_size - 1))</div><div class='add'>+            ? qfile_array-&gt;next_index = 0</div><div class='add'>+            : qfile_array-&gt;next_index++;</div><div class='ctx'> </div><div class='del'>-                spin_count++;</div><div class='add'>+        qfile_fd = (qfile_array-&gt;fd_array[qfile_array-&gt;next_index]);</div><div class='ctx'> </div><div class='del'>-        } while ((qfile_fd == -1) &amp;&amp; (spin_count &lt; qfile_array-&gt;array_size));</div><div class='add'>+        spin_count++;</div><div class='ctx'> </div><div class='add'>+    } while ((qfile_fd == -1) &amp;&amp; (spin_count &lt; qfile_array-&gt;array_size));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -149,1844 +147,1707 @@ shift_next_index (tier_qfile_array_t *qfile_array)</div><div class='ctx'>  * &lt; 0  if there was failure</div><div class='ctx'>  * */</div><div class='ctx'> static int</div><div class='del'>-read_query_record_list (tier_qfile_array_t *qfile_array,</div><div class='del'>-                          gfdb_query_record_t **query_record)</div><div class='add'>+read_query_record_list(tier_qfile_array_t *qfile_array,</div><div class='add'>+                       gfdb_query_record_t **query_record)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int qfile_fd = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", qfile_array, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", qfile_array-&gt;fd_array, out);</div><div class='del'>-</div><div class='del'>-        do {</div><div class='del'>-                if (is_qfile_array_empty (qfile_array)) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                qfile_fd = qfile_array-&gt;fd_array[qfile_array-&gt;next_index];</div><div class='del'>-                ret = gfdb_methods.gfdb_read_query_record</div><div class='del'>-                        (qfile_fd, query_record);</div><div class='del'>-                if (ret &lt;= 0) {</div><div class='del'>-                        /*The qfile_fd has reached EOF or</div><div class='del'>-                         * there was an error.</div><div class='del'>-                         * 1. Close the exhausted fd</div><div class='del'>-                         * 2. increment the exhausted count</div><div class='del'>-                         * 3. shift next_qfile to next qfile</div><div class='del'>-                         **/</div><div class='del'>-                         sys_close (qfile_fd);</div><div class='del'>-                         qfile_array-&gt;fd_array[qfile_array-&gt;next_index] = -1;</div><div class='del'>-                         qfile_array-&gt;exhausted_count++;</div><div class='del'>-                         /* shift next_qfile to next qfile */</div><div class='del'>-                         shift_next_index (qfile_array);</div><div class='del'>-                         continue;</div><div class='del'>-                } else {</div><div class='del'>-                        /* shift next_qfile to next qfile */</div><div class='del'>-                        shift_next_index (qfile_array);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        } while (1);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int qfile_fd = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", qfile_array, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", qfile_array-&gt;fd_array, out);</div><div class='add'>+</div><div class='add'>+    do {</div><div class='add'>+        if (is_qfile_array_empty(qfile_array)) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        qfile_fd = qfile_array-&gt;fd_array[qfile_array-&gt;next_index];</div><div class='add'>+        ret = gfdb_methods.gfdb_read_query_record(qfile_fd, query_record);</div><div class='add'>+        if (ret &lt;= 0) {</div><div class='add'>+            /*The qfile_fd has reached EOF or</div><div class='add'>+             * there was an error.</div><div class='add'>+             * 1. Close the exhausted fd</div><div class='add'>+             * 2. increment the exhausted count</div><div class='add'>+             * 3. shift next_qfile to next qfile</div><div class='add'>+             **/</div><div class='add'>+            sys_close(qfile_fd);</div><div class='add'>+            qfile_array-&gt;fd_array[qfile_array-&gt;next_index] = -1;</div><div class='add'>+            qfile_array-&gt;exhausted_count++;</div><div class='add'>+            /* shift next_qfile to next qfile */</div><div class='add'>+            shift_next_index(qfile_array);</div><div class='add'>+            continue;</div><div class='add'>+        } else {</div><div class='add'>+            /* shift next_qfile to next qfile */</div><div class='add'>+            shift_next_index(qfile_array);</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    } while (1);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Check and update the watermark every WM_INTERVAL seconds */</div><div class='del'>-#define WM_INTERVAL            5</div><div class='del'>-#define WM_INTERVAL_EMERG      1</div><div class='add'>+#define WM_INTERVAL 5</div><div class='add'>+#define WM_INTERVAL_EMERG 1</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_check_same_node (xlator_t *this, loc_t *loc, gf_defrag_info_t *defrag)</div><div class='add'>+tier_check_same_node(xlator_t *this, loc_t *loc, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        int         ret                     = -1;</div><div class='del'>-        dict_t     *dict                    = NULL;</div><div class='del'>-        char       *uuid_str                = NULL;</div><div class='del'>-        uuid_t      node_uuid               = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, defrag, out);</div><div class='del'>-</div><div class='del'>-        if (syncop_getxattr (this, loc, &amp;dict, GF_XATTR_NODE_UUID_KEY,</div><div class='del'>-                             NULL, NULL)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Unable to get NODE_UUID_KEY %s %s\n",</div><div class='del'>-                        loc-&gt;name, loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (dict, GF_XATTR_NODE_UUID_KEY, &amp;uuid_str) &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to get node-uuids for %s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_parse (uuid_str, node_uuid)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "uuid_parse failed for %s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_compare (node_uuid, defrag-&gt;node_uuid)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "%s does not belong to this node", loc-&gt;path);</div><div class='del'>-                ret = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char *uuid_str = NULL;</div><div class='add'>+    uuid_t node_uuid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, defrag, out);</div><div class='add'>+</div><div class='add'>+    if (syncop_getxattr(this, loc, &amp;dict, GF_XATTR_NODE_UUID_KEY, NULL, NULL)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Unable to get NODE_UUID_KEY %s %s\n", loc-&gt;name, loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(dict, GF_XATTR_NODE_UUID_KEY, &amp;uuid_str) &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to get node-uuids for %s", loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_parse(uuid_str, node_uuid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "uuid_parse failed for %s", loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_compare(node_uuid, defrag-&gt;node_uuid)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s does not belong to this node",</div><div class='add'>+                     loc-&gt;path);</div><div class='add'>+        ret = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref(dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_get_fs_stat (xlator_t *this, loc_t *root_loc)</div><div class='add'>+tier_get_fs_stat(xlator_t *this, loc_t *root_loc)</div><div class='ctx'> {</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        gf_defrag_info_t       *defrag = NULL;</div><div class='del'>-        dht_conf_t             *conf   = NULL;</div><div class='del'>-        dict_t                 *xdata  = NULL;</div><div class='del'>-        struct statvfs          statfs = {0, };</div><div class='del'>-        gf_tier_conf_t         *tier_conf = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "conf is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        if (!defrag) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "defrag is NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        DHT_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate dictionary");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (xdata, GF_INTERNAL_IGNORE_DEEM_STATFS, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "Failed to set "</div><div class='del'>-                        GF_INTERNAL_IGNORE_DEEM_STATFS" in dict");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Find how much free space is on the hot subvolume.</div><div class='del'>-         * Then see if that value */</div><div class='del'>-        /* is less than or greater than user defined watermarks.</div><div class='del'>-         * Stash results in */</div><div class='del'>-        /* the tier_conf data structure. */</div><div class='del'>-</div><div class='del'>-        ret = syncop_statfs (conf-&gt;subvolumes[1], root_loc, &amp;statfs,</div><div class='del'>-                             xdata, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Unable to obtain statfs.");</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-</div><div class='del'>-        tier_conf-&gt;block_size = statfs.f_bsize;</div><div class='del'>-        tier_conf-&gt;blocks_total = statfs.f_blocks;</div><div class='del'>-        tier_conf-&gt;blocks_used = statfs.f_blocks - statfs.f_bfree;</div><div class='del'>-</div><div class='del'>-        tier_conf-&gt;percent_full = GF_PERCENTAGE(tier_conf-&gt;blocks_used,</div><div class='del'>-                                                statfs.f_blocks);</div><div class='del'>-        pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    struct statvfs statfs = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_tier_conf_t *tier_conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "conf is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    if (!defrag) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "defrag is NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate dictionary");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int8(xdata, GF_INTERNAL_IGNORE_DEEM_STATFS, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_DICT_SET_FAILED,</div><div class='add'>+               "Failed to set " GF_INTERNAL_IGNORE_DEEM_STATFS " in dict");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Find how much free space is on the hot subvolume.</div><div class='add'>+     * Then see if that value */</div><div class='add'>+    /* is less than or greater than user defined watermarks.</div><div class='add'>+     * Stash results in */</div><div class='add'>+    /* the tier_conf data structure. */</div><div class='add'>+</div><div class='add'>+    ret = syncop_statfs(conf-&gt;subvolumes[1], root_loc, &amp;statfs, xdata, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Unable to obtain statfs.");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+</div><div class='add'>+    tier_conf-&gt;block_size = statfs.f_bsize;</div><div class='add'>+    tier_conf-&gt;blocks_total = statfs.f_blocks;</div><div class='add'>+    tier_conf-&gt;blocks_used = statfs.f_blocks - statfs.f_bfree;</div><div class='add'>+</div><div class='add'>+    tier_conf-&gt;percent_full = GF_PERCENTAGE(tier_conf-&gt;blocks_used,</div><div class='add'>+                                            statfs.f_blocks);</div><div class='add'>+    pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='ctx'> </div><div class='ctx'> exit:</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-tier_send_watermark_event (const char *volname,</div><div class='del'>-                           tier_watermark_op_t old_wm,</div><div class='del'>-                           tier_watermark_op_t new_wm)</div><div class='add'>+tier_send_watermark_event(const char *volname, tier_watermark_op_t old_wm,</div><div class='add'>+                          tier_watermark_op_t new_wm)</div><div class='ctx'> {</div><div class='del'>-        if (old_wm == TIER_WM_LOW || old_wm == TIER_WM_NONE) {</div><div class='del'>-                if (new_wm == TIER_WM_MID) {</div><div class='del'>-                        gf_event (EVENT_TIER_WATERMARK_RAISED_TO_MID,</div><div class='del'>-                                  "vol=%s", volname);</div><div class='del'>-                } else if (new_wm == TIER_WM_HI) {</div><div class='del'>-                        gf_event (EVENT_TIER_WATERMARK_HI, "vol=%s", volname);</div><div class='del'>-                }</div><div class='del'>-        } else if (old_wm == TIER_WM_MID) {</div><div class='del'>-                if (new_wm == TIER_WM_LOW) {</div><div class='del'>-                        gf_event (EVENT_TIER_WATERMARK_DROPPED_TO_LOW,</div><div class='del'>-                                  "vol=%s", volname);</div><div class='del'>-                } else if (new_wm == TIER_WM_HI) {</div><div class='del'>-                        gf_event (EVENT_TIER_WATERMARK_HI, "vol=%s", volname);</div><div class='del'>-                }</div><div class='del'>-        } else if (old_wm == TIER_WM_HI) {</div><div class='del'>-                if (new_wm == TIER_WM_MID) {</div><div class='del'>-                        gf_event (EVENT_TIER_WATERMARK_DROPPED_TO_MID,</div><div class='del'>-                                  "vol=%s", volname);</div><div class='del'>-                } else if (new_wm == TIER_WM_LOW) {</div><div class='del'>-                        gf_event (EVENT_TIER_WATERMARK_DROPPED_TO_LOW,</div><div class='del'>-                                  "vol=%s", volname);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (old_wm == TIER_WM_LOW || old_wm == TIER_WM_NONE) {</div><div class='add'>+        if (new_wm == TIER_WM_MID) {</div><div class='add'>+            gf_event(EVENT_TIER_WATERMARK_RAISED_TO_MID, "vol=%s", volname);</div><div class='add'>+        } else if (new_wm == TIER_WM_HI) {</div><div class='add'>+            gf_event(EVENT_TIER_WATERMARK_HI, "vol=%s", volname);</div><div class='add'>+        }</div><div class='add'>+    } else if (old_wm == TIER_WM_MID) {</div><div class='add'>+        if (new_wm == TIER_WM_LOW) {</div><div class='add'>+            gf_event(EVENT_TIER_WATERMARK_DROPPED_TO_LOW, "vol=%s", volname);</div><div class='add'>+        } else if (new_wm == TIER_WM_HI) {</div><div class='add'>+            gf_event(EVENT_TIER_WATERMARK_HI, "vol=%s", volname);</div><div class='add'>+        }</div><div class='add'>+    } else if (old_wm == TIER_WM_HI) {</div><div class='add'>+        if (new_wm == TIER_WM_MID) {</div><div class='add'>+            gf_event(EVENT_TIER_WATERMARK_DROPPED_TO_MID, "vol=%s", volname);</div><div class='add'>+        } else if (new_wm == TIER_WM_LOW) {</div><div class='add'>+            gf_event(EVENT_TIER_WATERMARK_DROPPED_TO_LOW, "vol=%s", volname);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_check_watermark (xlator_t *this)</div><div class='add'>+tier_check_watermark(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int                     ret       = -1;</div><div class='del'>-        gf_defrag_info_t       *defrag    = NULL;</div><div class='del'>-        dht_conf_t             *conf      = NULL;</div><div class='del'>-        gf_tier_conf_t         *tier_conf = NULL;</div><div class='del'>-        tier_watermark_op_t     wm        = TIER_WM_NONE;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_tier_conf_t *tier_conf = NULL;</div><div class='add'>+    tier_watermark_op_t wm = TIER_WM_NONE;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto exit;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto exit;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto exit;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto exit;</div><div class='ctx'> </div><div class='del'>-        tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='add'>+    tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='ctx'> </div><div class='del'>-        if (tier_conf-&gt;percent_full &lt; tier_conf-&gt;watermark_low) {</div><div class='del'>-                wm = TIER_WM_LOW;</div><div class='add'>+    if (tier_conf-&gt;percent_full &lt; tier_conf-&gt;watermark_low) {</div><div class='add'>+        wm = TIER_WM_LOW;</div><div class='ctx'> </div><div class='del'>-        } else if (tier_conf-&gt;percent_full &lt; tier_conf-&gt;watermark_hi) {</div><div class='del'>-                wm = TIER_WM_MID;</div><div class='add'>+    } else if (tier_conf-&gt;percent_full &lt; tier_conf-&gt;watermark_hi) {</div><div class='add'>+        wm = TIER_WM_MID;</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                wm = TIER_WM_HI;</div><div class='del'>-        }</div><div class='add'>+    } else {</div><div class='add'>+        wm = TIER_WM_HI;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (wm != tier_conf-&gt;watermark_last) {</div><div class='add'>+    if (wm != tier_conf-&gt;watermark_last) {</div><div class='add'>+        tier_send_watermark_event(tier_conf-&gt;volname, tier_conf-&gt;watermark_last,</div><div class='add'>+                                  wm);</div><div class='ctx'> </div><div class='del'>-                tier_send_watermark_event (tier_conf-&gt;volname,</div><div class='del'>-                                           tier_conf-&gt;watermark_last,</div><div class='del'>-                                           wm);</div><div class='add'>+        tier_conf-&gt;watermark_last = wm;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Tier watermark now %d", wm);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                tier_conf-&gt;watermark_last = wm;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Tier watermark now %d", wm);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> exit:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_hot_tier_full (gf_tier_conf_t *tier_conf)</div><div class='add'>+is_hot_tier_full(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        if (tier_conf &amp;&amp; (tier_conf-&gt;mode == TIER_MODE_WM) &amp;&amp;</div><div class='del'>-           (tier_conf-&gt;watermark_last == TIER_WM_HI))</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (tier_conf &amp;&amp; (tier_conf-&gt;mode == TIER_MODE_WM) &amp;&amp;</div><div class='add'>+        (tier_conf-&gt;watermark_last == TIER_WM_HI))</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_do_migration (xlator_t *this, int promote)</div><div class='add'>+tier_do_migration(xlator_t *this, int promote)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_info_t       *defrag = NULL;</div><div class='del'>-        dht_conf_t             *conf   = NULL;</div><div class='del'>-        long                    rand = 0;</div><div class='del'>-        int                     migrate = 0;</div><div class='del'>-        gf_tier_conf_t         *tier_conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    long rand = 0;</div><div class='add'>+    int migrate = 0;</div><div class='add'>+    gf_tier_conf_t *tier_conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto exit;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto exit;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        if (!defrag)</div><div class='del'>-                goto exit;</div><div class='del'>-</div><div class='del'>-        if (tier_check_watermark (this) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to get watermark");</div><div class='del'>-                goto exit;</div><div class='del'>-        }</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    if (!defrag)</div><div class='add'>+        goto exit;</div><div class='add'>+</div><div class='add'>+    if (tier_check_watermark(this) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, errno, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to get watermark");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='add'>+    tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='ctx'> </div><div class='del'>-        switch (tier_conf-&gt;watermark_last) {</div><div class='add'>+    switch (tier_conf-&gt;watermark_last) {</div><div class='ctx'>         case TIER_WM_LOW:</div><div class='del'>-                migrate = promote ? 1 : 0;</div><div class='del'>-                break;</div><div class='add'>+            migrate = promote ? 1 : 0;</div><div class='add'>+            break;</div><div class='ctx'>         case TIER_WM_HI:</div><div class='del'>-                migrate = promote ? 0 : 1;</div><div class='del'>-                break;</div><div class='add'>+            migrate = promote ? 0 : 1;</div><div class='add'>+            break;</div><div class='ctx'>         case TIER_WM_MID:</div><div class='del'>-                /* coverity[DC.WEAK_CRYPTO] */</div><div class='del'>-                rand = random() % 100;</div><div class='del'>-                if (promote) {</div><div class='del'>-                        migrate = (rand &gt; tier_conf-&gt;percent_full);</div><div class='del'>-                } else {</div><div class='del'>-                        migrate = (rand &lt;= tier_conf-&gt;percent_full);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            /* coverity[DC.WEAK_CRYPTO] */</div><div class='add'>+            rand = random() % 100;</div><div class='add'>+            if (promote) {</div><div class='add'>+                migrate = (rand &gt; tier_conf-&gt;percent_full);</div><div class='add'>+            } else {</div><div class='add'>+                migrate = (rand &lt;= tier_conf-&gt;percent_full);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> exit:</div><div class='del'>-        return migrate;</div><div class='add'>+    return migrate;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_migrate (xlator_t *this, int is_promotion, dict_t *migrate_data,</div><div class='del'>-              loc_t *loc, gf_tier_conf_t *tier_conf)</div><div class='add'>+tier_migrate(xlator_t *this, int is_promotion, dict_t *migrate_data, loc_t *loc,</div><div class='add'>+             gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;tier_conf-&gt;pause_mutex);</div><div class='del'>-        if (is_promotion)</div><div class='del'>-                tier_conf-&gt;promote_in_progress = 1;</div><div class='del'>-        else</div><div class='del'>-                tier_conf-&gt;demote_in_progress = 1;</div><div class='del'>-        pthread_mutex_unlock (&amp;tier_conf-&gt;pause_mutex);</div><div class='del'>-</div><div class='del'>-        /* Data migration */</div><div class='del'>-        ret = syncop_setxattr (this, loc, migrate_data, 0,</div><div class='del'>-                               NULL, NULL);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;tier_conf-&gt;pause_mutex);</div><div class='del'>-        if (is_promotion)</div><div class='del'>-                tier_conf-&gt;promote_in_progress = 0;</div><div class='del'>-        else</div><div class='del'>-                tier_conf-&gt;demote_in_progress = 0;</div><div class='del'>-        pthread_mutex_unlock (&amp;tier_conf-&gt;pause_mutex);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    if (is_promotion)</div><div class='add'>+        tier_conf-&gt;promote_in_progress = 1;</div><div class='add'>+    else</div><div class='add'>+        tier_conf-&gt;demote_in_progress = 1;</div><div class='add'>+    pthread_mutex_unlock(&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+</div><div class='add'>+    /* Data migration */</div><div class='add'>+    ret = syncop_setxattr(this, loc, migrate_data, 0, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+    if (is_promotion)</div><div class='add'>+        tier_conf-&gt;promote_in_progress = 0;</div><div class='add'>+    else</div><div class='add'>+        tier_conf-&gt;demote_in_progress = 0;</div><div class='add'>+    pthread_mutex_unlock(&amp;tier_conf-&gt;pause_mutex);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* returns  _gf_true: if file can be promoted</div><div class='ctx'>  * returns _gf_false: if file cannot be promoted</div><div class='ctx'>  */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-tier_can_promote_file (xlator_t *this, char const *file_name,</div><div class='del'>-                       struct iatt *current, gf_defrag_info_t *defrag)</div><div class='add'>+tier_can_promote_file(xlator_t *this, char const *file_name,</div><div class='add'>+                      struct iatt *current, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t ret = _gf_false;</div><div class='del'>-        fsblkcnt_t estimated_usage = 0;</div><div class='del'>-</div><div class='del'>-        if (defrag-&gt;tier_conf.tier_max_promote_size &amp;&amp;</div><div class='del'>-            (current-&gt;ia_size &gt; defrag-&gt;tier_conf.tier_max_promote_size)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "File %s (gfid:%s) with size (%lu) exceeds maxsize "</div><div class='del'>-                        "(%d) for promotion. File will not be promoted.",</div><div class='del'>-                        file_name,</div><div class='del'>-                        uuid_utoa(current-&gt;ia_gfid),</div><div class='del'>-                        current-&gt;ia_size,</div><div class='del'>-                        defrag-&gt;tier_conf.tier_max_promote_size);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* bypass further validations for TEST mode */</div><div class='del'>-        if (defrag-&gt;tier_conf.mode != TIER_MODE_WM) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* convert the file size to blocks as per the block size of the</div><div class='del'>-         * destination tier</div><div class='del'>-         * NOTE: add (block_size - 1) to get the correct block size when</div><div class='del'>-         *       there is a remainder after a modulo</div><div class='del'>-         */</div><div class='del'>-        estimated_usage = ((current-&gt;ia_size + defrag-&gt;tier_conf.block_size - 1) /</div><div class='del'>-                                defrag-&gt;tier_conf.block_size) +</div><div class='del'>-                                defrag-&gt;tier_conf.blocks_used;</div><div class='del'>-</div><div class='del'>-        /* test if the estimated block usage goes above HI watermark */</div><div class='del'>-        if (GF_PERCENTAGE (estimated_usage, defrag-&gt;tier_conf.blocks_total) &gt;=</div><div class='del'>-                        defrag-&gt;tier_conf.watermark_hi) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Estimated block count consumption on "</div><div class='del'>-                        "hot tier (%lu) exceeds hi watermark (%d%%). "</div><div class='del'>-                        "File will not be promoted.",</div><div class='del'>-                        estimated_usage,</div><div class='del'>-                        defrag-&gt;tier_conf.watermark_hi);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    fsblkcnt_t estimated_usage = 0;</div><div class='add'>+</div><div class='add'>+    if (defrag-&gt;tier_conf.tier_max_promote_size &amp;&amp;</div><div class='add'>+        (current-&gt;ia_size &gt; defrag-&gt;tier_conf.tier_max_promote_size)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "File %s (gfid:%s) with size (%lu) exceeds maxsize "</div><div class='add'>+               "(%d) for promotion. File will not be promoted.",</div><div class='add'>+               file_name, uuid_utoa(current-&gt;ia_gfid), current-&gt;ia_size,</div><div class='add'>+               defrag-&gt;tier_conf.tier_max_promote_size);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* bypass further validations for TEST mode */</div><div class='add'>+    if (defrag-&gt;tier_conf.mode != TIER_MODE_WM) {</div><div class='ctx'>         ret = _gf_true;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* convert the file size to blocks as per the block size of the</div><div class='add'>+     * destination tier</div><div class='add'>+     * NOTE: add (block_size - 1) to get the correct block size when</div><div class='add'>+     *       there is a remainder after a modulo</div><div class='add'>+     */</div><div class='add'>+    estimated_usage = ((current-&gt;ia_size + defrag-&gt;tier_conf.block_size - 1) /</div><div class='add'>+                       defrag-&gt;tier_conf.block_size) +</div><div class='add'>+                      defrag-&gt;tier_conf.blocks_used;</div><div class='add'>+</div><div class='add'>+    /* test if the estimated block usage goes above HI watermark */</div><div class='add'>+    if (GF_PERCENTAGE(estimated_usage, defrag-&gt;tier_conf.blocks_total) &gt;=</div><div class='add'>+        defrag-&gt;tier_conf.watermark_hi) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Estimated block count consumption on "</div><div class='add'>+               "hot tier (%lu) exceeds hi watermark (%d%%). "</div><div class='add'>+               "File will not be promoted.",</div><div class='add'>+               estimated_usage, defrag-&gt;tier_conf.watermark_hi);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = _gf_true;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_set_migrate_data (dict_t *migrate_data)</div><div class='add'>+tier_set_migrate_data(dict_t *migrate_data)</div><div class='ctx'> {</div><div class='del'>-        int    failed = 1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        failed = dict_set_str (migrate_data, GF_XATTR_FILE_MIGRATE_KEY, "force");</div><div class='del'>-        if (failed) {</div><div class='del'>-                goto bail_out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Flag to suggest the xattr call is from migrator */</div><div class='del'>-        failed = dict_set_str (migrate_data, "from.migrator", "yes");</div><div class='del'>-        if (failed) {</div><div class='del'>-                goto bail_out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Flag to suggest its a tiering migration</div><div class='del'>-         * The reason for this dic key-value is that</div><div class='del'>-         * promotions and demotions are multithreaded</div><div class='del'>-         * so the original frame from gf_defrag_start()</div><div class='del'>-         * is not carried. A new frame will be created when</div><div class='del'>-         * we do syncop_setxattr(). This does not have the</div><div class='del'>-         * frame-&gt;root-&gt;pid of the original frame. So we pass</div><div class='del'>-         * this dic key-value when we do syncop_setxattr() to do</div><div class='del'>-         * data migration and set the frame-&gt;root-&gt;pid to</div><div class='del'>-         * GF_CLIENT_PID_TIER_DEFRAG in dht_setxattr() just before</div><div class='del'>-         * calling dht_start_rebalance_task() */</div><div class='del'>-        failed = dict_set_str (migrate_data, TIERING_MIGRATION_KEY, "yes");</div><div class='del'>-        if (failed) {</div><div class='del'>-                goto bail_out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        failed = 0;</div><div class='add'>+    int failed = 1;</div><div class='add'>+</div><div class='add'>+    failed = dict_set_str(migrate_data, GF_XATTR_FILE_MIGRATE_KEY, "force");</div><div class='add'>+    if (failed) {</div><div class='add'>+        goto bail_out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Flag to suggest the xattr call is from migrator */</div><div class='add'>+    failed = dict_set_str(migrate_data, "from.migrator", "yes");</div><div class='add'>+    if (failed) {</div><div class='add'>+        goto bail_out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Flag to suggest its a tiering migration</div><div class='add'>+     * The reason for this dic key-value is that</div><div class='add'>+     * promotions and demotions are multithreaded</div><div class='add'>+     * so the original frame from gf_defrag_start()</div><div class='add'>+     * is not carried. A new frame will be created when</div><div class='add'>+     * we do syncop_setxattr(). This does not have the</div><div class='add'>+     * frame-&gt;root-&gt;pid of the original frame. So we pass</div><div class='add'>+     * this dic key-value when we do syncop_setxattr() to do</div><div class='add'>+     * data migration and set the frame-&gt;root-&gt;pid to</div><div class='add'>+     * GF_CLIENT_PID_TIER_DEFRAG in dht_setxattr() just before</div><div class='add'>+     * calling dht_start_rebalance_task() */</div><div class='add'>+    failed = dict_set_str(migrate_data, TIERING_MIGRATION_KEY, "yes");</div><div class='add'>+    if (failed) {</div><div class='add'>+        goto bail_out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    failed = 0;</div><div class='ctx'> </div><div class='ctx'> bail_out:</div><div class='del'>-        return failed;</div><div class='add'>+    return failed;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-tier_get_parent_path (xlator_t          *this,</div><div class='del'>-                      loc_t             *p_loc,</div><div class='del'>-                      struct iatt       *par_stbuf,</div><div class='del'>-                      int               *per_link_status)</div><div class='add'>+tier_get_parent_path(xlator_t *this, loc_t *p_loc, struct iatt *par_stbuf,</div><div class='add'>+                     int *per_link_status)</div><div class='ctx'> {</div><div class='del'>-        int     ret             = -1;</div><div class='del'>-        char    *parent_path    = NULL;</div><div class='del'>-        dict_t  *xdata_request  = NULL;</div><div class='del'>-        dict_t  *xdata_response = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        xdata_request = dict_new ();</div><div class='del'>-        if (!xdata_request) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to create xdata_request dict");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (xdata_request,</div><div class='del'>-                              GET_ANCESTRY_PATH_KEY, 42);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to set value to dict : key %s \n",</div><div class='del'>-                        GET_ANCESTRY_PATH_KEY);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (this, p_loc, par_stbuf, NULL,</div><div class='del'>-                             xdata_request, &amp;xdata_response);</div><div class='del'>-        /* When the parent gfid is a stale entry, the lookup</div><div class='del'>-         * will fail and stop the demotion process.</div><div class='del'>-         * The parent gfid can be stale when a huge folder is</div><div class='del'>-         * deleted while the files within it are being migrated</div><div class='del'>-         */</div><div class='del'>-        if (ret == -ESTALE) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_STALE_LOOKUP,</div><div class='del'>-                        "Stale entry in parent lookup for %s",</div><div class='del'>-                        uuid_utoa (p_loc-&gt;gfid));</div><div class='del'>-                *per_link_status = 1;</div><div class='del'>-                goto err;</div><div class='del'>-        } else if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Error in parent lookup for %s",</div><div class='del'>-                        uuid_utoa (p_loc-&gt;gfid));</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_get_str (xdata_response, GET_ANCESTRY_PATH_KEY, &amp;parent_path);</div><div class='del'>-        if (ret || !parent_path) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to get parent path for %s",</div><div class='del'>-                        uuid_utoa (p_loc-&gt;gfid));</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *parent_path = NULL;</div><div class='add'>+    dict_t *xdata_request = NULL;</div><div class='add'>+    dict_t *xdata_response = NULL;</div><div class='add'>+</div><div class='add'>+    xdata_request = dict_new();</div><div class='add'>+    if (!xdata_request) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to create xdata_request dict");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(xdata_request, GET_ANCESTRY_PATH_KEY, 42);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to set value to dict : key %s \n",</div><div class='add'>+               GET_ANCESTRY_PATH_KEY);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(this, p_loc, par_stbuf, NULL, xdata_request,</div><div class='add'>+                        &amp;xdata_response);</div><div class='add'>+    /* When the parent gfid is a stale entry, the lookup</div><div class='add'>+     * will fail and stop the demotion process.</div><div class='add'>+     * The parent gfid can be stale when a huge folder is</div><div class='add'>+     * deleted while the files within it are being migrated</div><div class='add'>+     */</div><div class='add'>+    if (ret == -ESTALE) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_STALE_LOOKUP,</div><div class='add'>+               "Stale entry in parent lookup for %s", uuid_utoa(p_loc-&gt;gfid));</div><div class='add'>+        *per_link_status = 1;</div><div class='add'>+        goto err;</div><div class='add'>+    } else if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Error in parent lookup for %s", uuid_utoa(p_loc-&gt;gfid));</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_get_str(xdata_response, GET_ANCESTRY_PATH_KEY, &amp;parent_path);</div><div class='add'>+    if (ret || !parent_path) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to get parent path for %s", uuid_utoa(p_loc-&gt;gfid));</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (xdata_request) {</div><div class='del'>-                dict_unref (xdata_request);</div><div class='del'>-        }</div><div class='add'>+    if (xdata_request) {</div><div class='add'>+        dict_unref(xdata_request);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata_response) {</div><div class='del'>-                dict_unref (xdata_response);</div><div class='del'>-                xdata_response = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (xdata_response) {</div><div class='add'>+        dict_unref(xdata_response);</div><div class='add'>+        xdata_response = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return parent_path;</div><div class='add'>+    return parent_path;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_get_file_name_and_path (xlator_t                   *this,</div><div class='del'>-                             uuid_t                     gfid,</div><div class='del'>-                             gfdb_link_info_t           *link_info,</div><div class='del'>-                             char const                 *parent_path,</div><div class='del'>-                             loc_t                      *loc,</div><div class='del'>-                             int                        *per_link_status)</div><div class='add'>+tier_get_file_name_and_path(xlator_t *this, uuid_t gfid,</div><div class='add'>+                            gfdb_link_info_t *link_info,</div><div class='add'>+                            char const *parent_path, loc_t *loc,</div><div class='add'>+                            int *per_link_status)</div><div class='ctx'> {</div><div class='del'>-        int             ret     = -1;</div><div class='del'>-</div><div class='del'>-        loc-&gt;name = gf_strdup (link_info-&gt;file_name);</div><div class='del'>-        if (!loc-&gt;name) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Memory "</div><div class='del'>-                        "allocation failed for %s",</div><div class='del'>-                        uuid_utoa (gfid));</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = gf_asprintf((char **)&amp;(loc-&gt;path), "%s/%s", parent_path, loc-&gt;name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed to "</div><div class='del'>-                        "construct file path for %s %s\n",</div><div class='del'>-                        parent_path, loc-&gt;name);</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    loc-&gt;name = gf_strdup(link_info-&gt;file_name);</div><div class='add'>+    if (!loc-&gt;name) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Memory "</div><div class='add'>+               "allocation failed for %s",</div><div class='add'>+               uuid_utoa(gfid));</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = gf_asprintf((char **)&amp;(loc-&gt;path), "%s/%s", parent_path, loc-&gt;name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to "</div><div class='add'>+               "construct file path for %s %s\n",</div><div class='add'>+               parent_path, loc-&gt;name);</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_lookup_file (xlator_t    *this,</div><div class='del'>-                  loc_t       *p_loc,</div><div class='del'>-                  loc_t       *loc,</div><div class='del'>-                  struct iatt *current,</div><div class='del'>-                  int         *per_link_status)</div><div class='add'>+tier_lookup_file(xlator_t *this, loc_t *p_loc, loc_t *loc, struct iatt *current,</div><div class='add'>+                 int *per_link_status)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (this, loc, current, NULL, NULL, NULL);</div><div class='del'>-</div><div class='del'>-        /* The file may be deleted even when the parent</div><div class='del'>-         * is available and the lookup will</div><div class='del'>-         * return a stale entry which would stop the</div><div class='del'>-         * migration. so if its a stale entry, then skip</div><div class='del'>-         * the file and keep migrating.</div><div class='del'>-         */</div><div class='del'>-        if (ret == -ESTALE) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        DHT_MSG_STALE_LOOKUP,</div><div class='del'>-                        "Stale lookup for %s",</div><div class='del'>-                        uuid_utoa (p_loc-&gt;gfid));</div><div class='del'>-                *per_link_status = 1;</div><div class='del'>-                goto err;</div><div class='del'>-        } else if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed to "</div><div class='del'>-                        "lookup file %s\n", loc-&gt;name);</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(this, loc, current, NULL, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    /* The file may be deleted even when the parent</div><div class='add'>+     * is available and the lookup will</div><div class='add'>+     * return a stale entry which would stop the</div><div class='add'>+     * migration. so if its a stale entry, then skip</div><div class='add'>+     * the file and keep migrating.</div><div class='add'>+     */</div><div class='add'>+    if (ret == -ESTALE) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret, DHT_MSG_STALE_LOOKUP,</div><div class='add'>+               "Stale lookup for %s", uuid_utoa(p_loc-&gt;gfid));</div><div class='add'>+        *per_link_status = 1;</div><div class='add'>+        goto err;</div><div class='add'>+    } else if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to "</div><div class='add'>+               "lookup file %s\n",</div><div class='add'>+               loc-&gt;name);</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-tier_is_file_already_at_destination (xlator_t           *src_subvol,</div><div class='del'>-                                     query_cbk_args_t   *query_cbk_args,</div><div class='del'>-                                     dht_conf_t         *conf,</div><div class='del'>-                                     int                *per_link_status)</div><div class='add'>+tier_is_file_already_at_destination(xlator_t *src_subvol,</div><div class='add'>+                                    query_cbk_args_t *query_cbk_args,</div><div class='add'>+                                    dht_conf_t *conf, int *per_link_status)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    at_destination = _gf_true;</div><div class='del'>-</div><div class='del'>-        if (src_subvol == NULL) {</div><div class='del'>-                *per_link_status = 1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (query_cbk_args-&gt;is_promotion &amp;&amp;</div><div class='del'>-            src_subvol == conf-&gt;subvolumes[1]) {</div><div class='del'>-                *per_link_status = 1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!query_cbk_args-&gt;is_promotion &amp;&amp;</div><div class='del'>-            src_subvol == conf-&gt;subvolumes[0]) {</div><div class='del'>-                *per_link_status = 1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        at_destination = _gf_false;</div><div class='add'>+    gf_boolean_t at_destination = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (src_subvol == NULL) {</div><div class='add'>+        *per_link_status = 1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (query_cbk_args-&gt;is_promotion &amp;&amp; src_subvol == conf-&gt;subvolumes[1]) {</div><div class='add'>+        *per_link_status = 1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!query_cbk_args-&gt;is_promotion &amp;&amp; src_subvol == conf-&gt;subvolumes[0]) {</div><div class='add'>+        *per_link_status = 1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    at_destination = _gf_false;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return at_destination;</div><div class='add'>+    return at_destination;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-tier_update_migration_counters (query_cbk_args_t        *query_cbk_args,</div><div class='del'>-                                gf_defrag_info_t        *defrag,</div><div class='del'>-                                uint64_t                *total_migrated_bytes,</div><div class='del'>-                                int                     *total_files)</div><div class='add'>+tier_update_migration_counters(query_cbk_args_t *query_cbk_args,</div><div class='add'>+                               gf_defrag_info_t *defrag,</div><div class='add'>+                               uint64_t *total_migrated_bytes, int *total_files)</div><div class='ctx'> {</div><div class='del'>-        if (query_cbk_args-&gt;is_promotion) {</div><div class='del'>-                defrag-&gt;total_files_promoted++;</div><div class='del'>-                *total_migrated_bytes +=</div><div class='del'>-                        defrag-&gt;tier_conf.st_last_promoted_size;</div><div class='del'>-                pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-                defrag-&gt;tier_conf.blocks_used +=</div><div class='del'>-                        defrag-&gt;tier_conf.st_last_promoted_size;</div><div class='del'>-                pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-        } else {</div><div class='del'>-                defrag-&gt;total_files_demoted++;</div><div class='del'>-                *total_migrated_bytes +=</div><div class='del'>-                        defrag-&gt;tier_conf.st_last_demoted_size;</div><div class='del'>-                pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-                defrag-&gt;tier_conf.blocks_used -=</div><div class='del'>-                        defrag-&gt;tier_conf.st_last_demoted_size;</div><div class='del'>-                pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-        }</div><div class='del'>-        if (defrag-&gt;tier_conf.blocks_total) {</div><div class='del'>-                pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-                defrag-&gt;tier_conf.percent_full =</div><div class='del'>-                        GF_PERCENTAGE (defrag-&gt;tier_conf.blocks_used,</div><div class='del'>-                                        defrag-&gt;tier_conf.blocks_total);</div><div class='del'>-                pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (*total_files)++;</div><div class='add'>+    if (query_cbk_args-&gt;is_promotion) {</div><div class='add'>+        defrag-&gt;total_files_promoted++;</div><div class='add'>+        *total_migrated_bytes += defrag-&gt;tier_conf.st_last_promoted_size;</div><div class='add'>+        pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+        defrag-&gt;tier_conf.blocks_used += defrag-&gt;tier_conf</div><div class='add'>+                                             .st_last_promoted_size;</div><div class='add'>+        pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+    } else {</div><div class='add'>+        defrag-&gt;total_files_demoted++;</div><div class='add'>+        *total_migrated_bytes += defrag-&gt;tier_conf.st_last_demoted_size;</div><div class='add'>+        pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+        defrag-&gt;tier_conf.blocks_used -= defrag-&gt;tier_conf.st_last_demoted_size;</div><div class='add'>+        pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+    }</div><div class='add'>+    if (defrag-&gt;tier_conf.blocks_total) {</div><div class='add'>+        pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+        defrag-&gt;tier_conf.percent_full = GF_PERCENTAGE(</div><div class='add'>+            defrag-&gt;tier_conf.blocks_used, defrag-&gt;tier_conf.blocks_total);</div><div class='add'>+        pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (*total_files)++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_migrate_link (xlator_t            *this,</div><div class='del'>-                   dht_conf_t          *conf,</div><div class='del'>-                   uuid_t              gfid,</div><div class='del'>-                   gfdb_link_info_t    *link_info,</div><div class='del'>-                   gf_defrag_info_t    *defrag,</div><div class='del'>-                   query_cbk_args_t    *query_cbk_args,</div><div class='del'>-                   dict_t              *migrate_data,</div><div class='del'>-                   int                 *per_link_status,</div><div class='del'>-                   int                 *total_files,</div><div class='del'>-                   uint64_t            *total_migrated_bytes)</div><div class='add'>+tier_migrate_link(xlator_t *this, dht_conf_t *conf, uuid_t gfid,</div><div class='add'>+                  gfdb_link_info_t *link_info, gf_defrag_info_t *defrag,</div><div class='add'>+                  query_cbk_args_t *query_cbk_args, dict_t *migrate_data,</div><div class='add'>+                  int *per_link_status, int *total_files,</div><div class='add'>+                  uint64_t *total_migrated_bytes)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        struct iatt     current         = {0,};</div><div class='del'>-        struct iatt     par_stbuf       = {0,};</div><div class='del'>-        loc_t           p_loc           = {0,};</div><div class='del'>-        loc_t           loc             = {0,};</div><div class='del'>-        xlator_t        *src_subvol     = NULL;</div><div class='del'>-        inode_t         *linked_inode   = NULL;</div><div class='del'>-        char            *parent_path    = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Lookup for parent and get the path of parent */</div><div class='del'>-        gf_uuid_copy (p_loc.gfid, link_info-&gt;pargfid);</div><div class='del'>-        p_loc.inode = inode_new (defrag-&gt;root_inode-&gt;table);</div><div class='del'>-        if (!p_loc.inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to create reference to inode"</div><div class='del'>-                        " for %s", uuid_utoa (p_loc.gfid));</div><div class='del'>-</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        parent_path = tier_get_parent_path (this, &amp;p_loc, &amp;par_stbuf,</div><div class='del'>-                                            per_link_status);</div><div class='del'>-        if (!parent_path) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        linked_inode = inode_link (p_loc.inode, NULL, NULL, &amp;par_stbuf);</div><div class='del'>-        inode_unref (p_loc.inode);</div><div class='del'>-        p_loc.inode = linked_inode;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* Preparing File Inode */</div><div class='del'>-        gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-        loc.inode = inode_new (defrag-&gt;root_inode-&gt;table);</div><div class='del'>-        gf_uuid_copy (loc.pargfid, link_info-&gt;pargfid);</div><div class='del'>-        loc.parent = inode_ref (p_loc.inode);</div><div class='del'>-</div><div class='del'>-        /* Get filename and Construct file path */</div><div class='del'>-        if (tier_get_file_name_and_path (this, gfid, link_info,</div><div class='del'>-                                         parent_path, &amp;loc, per_link_status) != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        gf_uuid_copy (loc.parent-&gt;gfid, link_info-&gt;pargfid);</div><div class='del'>-</div><div class='del'>-        /* lookup file inode */</div><div class='del'>-        if (tier_lookup_file (this, &amp;p_loc, &amp;loc,</div><div class='del'>-                              &amp;current, per_link_status) != 0) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (query_cbk_args-&gt;is_promotion) {</div><div class='del'>-                if (!tier_can_promote_file (this,</div><div class='del'>-                                            link_info-&gt;file_name,</div><div class='del'>-                                            &amp;current,</div><div class='del'>-                                            defrag)) {</div><div class='del'>-                        *per_link_status = 1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        linked_inode = inode_link (loc.inode, NULL, NULL, &amp;current);</div><div class='del'>-        inode_unref (loc.inode);</div><div class='del'>-        loc.inode = linked_inode;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Do not promote/demote if file already is where it</div><div class='del'>-         * should be. It means another brick moved the file</div><div class='del'>-         * so is not an error. So we set per_link_status = 1</div><div class='del'>-         * so that we ignore counting this.</div><div class='del'>-         */</div><div class='del'>-        src_subvol = dht_subvol_get_cached (this, loc.inode);</div><div class='del'>-</div><div class='del'>-        if (tier_is_file_already_at_destination (src_subvol, query_cbk_args,</div><div class='del'>-                                                 conf, per_link_status)) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Tier %s: src_subvol %s file %s",</div><div class='del'>-                      (query_cbk_args-&gt;is_promotion ?  "promote" : "demote"),</div><div class='del'>-                      src_subvol-&gt;name,</div><div class='del'>-                      loc.path);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        ret = tier_check_same_node (this, &amp;loc, defrag);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        *per_link_status = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                /* By setting per_link_status to 1 we are</div><div class='del'>-                 * ignoring this status and will not be counting</div><div class='del'>-                 * this file for migration */</div><div class='del'>-                *per_link_status = 1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (loc.gfid, loc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        if (gf_defrag_get_pause_state (&amp;defrag-&gt;tier_conf) != TIER_RUNNING) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Tiering paused. "</div><div class='del'>-                        "Exiting tier_migrate_link");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = tier_migrate (this, query_cbk_args-&gt;is_promotion,</div><div class='del'>-                            migrate_data, &amp;loc, &amp;defrag-&gt;tier_conf);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed to "</div><div class='del'>-                        "migrate %s ", loc.path);</div><div class='del'>-                *per_link_status = -1;</div><div class='del'>-                goto err;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iatt current = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt par_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t p_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *src_subvol = NULL;</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    char *parent_path = NULL;</div><div class='add'>+</div><div class='add'>+    /* Lookup for parent and get the path of parent */</div><div class='add'>+    gf_uuid_copy(p_loc.gfid, link_info-&gt;pargfid);</div><div class='add'>+    p_loc.inode = inode_new(defrag-&gt;root_inode-&gt;table);</div><div class='add'>+    if (!p_loc.inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to create reference to inode"</div><div class='add'>+               " for %s",</div><div class='add'>+               uuid_utoa(p_loc.gfid));</div><div class='add'>+</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    parent_path = tier_get_parent_path(this, &amp;p_loc, &amp;par_stbuf,</div><div class='add'>+                                       per_link_status);</div><div class='add'>+    if (!parent_path) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    linked_inode = inode_link(p_loc.inode, NULL, NULL, &amp;par_stbuf);</div><div class='add'>+    inode_unref(p_loc.inode);</div><div class='add'>+    p_loc.inode = linked_inode;</div><div class='add'>+</div><div class='add'>+    /* Preparing File Inode */</div><div class='add'>+    gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+    loc.inode = inode_new(defrag-&gt;root_inode-&gt;table);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, link_info-&gt;pargfid);</div><div class='add'>+    loc.parent = inode_ref(p_loc.inode);</div><div class='add'>+</div><div class='add'>+    /* Get filename and Construct file path */</div><div class='add'>+    if (tier_get_file_name_and_path(this, gfid, link_info, parent_path, &amp;loc,</div><div class='add'>+                                    per_link_status) != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_copy(loc.parent-&gt;gfid, link_info-&gt;pargfid);</div><div class='add'>+</div><div class='add'>+    /* lookup file inode */</div><div class='add'>+    if (tier_lookup_file(this, &amp;p_loc, &amp;loc, &amp;current, per_link_status) != 0) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (query_cbk_args-&gt;is_promotion) {</div><div class='add'>+        if (!tier_can_promote_file(this, link_info-&gt;file_name, &amp;current,</div><div class='add'>+                                   defrag)) {</div><div class='add'>+            *per_link_status = 1;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    linked_inode = inode_link(loc.inode, NULL, NULL, &amp;current);</div><div class='add'>+    inode_unref(loc.inode);</div><div class='add'>+    loc.inode = linked_inode;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Do not promote/demote if file already is where it</div><div class='add'>+     * should be. It means another brick moved the file</div><div class='add'>+     * so is not an error. So we set per_link_status = 1</div><div class='add'>+     * so that we ignore counting this.</div><div class='add'>+     */</div><div class='add'>+    src_subvol = dht_subvol_get_cached(this, loc.inode);</div><div class='add'>+</div><div class='add'>+    if (tier_is_file_already_at_destination(src_subvol, query_cbk_args, conf,</div><div class='add'>+                                            per_link_status)) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Tier %s: src_subvol %s file %s",</div><div class='add'>+                 (query_cbk_args-&gt;is_promotion ? "promote" : "demote"),</div><div class='add'>+                 src_subvol-&gt;name, loc.path);</div><div class='add'>+</div><div class='add'>+    ret = tier_check_same_node(this, &amp;loc, defrag);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            *per_link_status = -1;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        tier_update_migration_counters (query_cbk_args, defrag,</div><div class='del'>-                                        total_migrated_bytes, total_files);</div><div class='del'>-</div><div class='ctx'>         ret = 0;</div><div class='add'>+        /* By setting per_link_status to 1 we are</div><div class='add'>+         * ignoring this status and will not be counting</div><div class='add'>+         * this file for migration */</div><div class='add'>+        *per_link_status = 1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, loc.inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    if (gf_defrag_get_pause_state(&amp;defrag-&gt;tier_conf) != TIER_RUNNING) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Tiering paused. "</div><div class='add'>+               "Exiting tier_migrate_link");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = tier_migrate(this, query_cbk_args-&gt;is_promotion, migrate_data, &amp;loc,</div><div class='add'>+                       &amp;defrag-&gt;tier_conf);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to "</div><div class='add'>+               "migrate %s ",</div><div class='add'>+               loc.path);</div><div class='add'>+        *per_link_status = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tier_update_migration_counters(query_cbk_args, defrag, total_migrated_bytes,</div><div class='add'>+                                   total_files);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        GF_FREE ((char *) loc.name);</div><div class='del'>-        loc.name = NULL;</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        loc_wipe (&amp;p_loc);</div><div class='del'>-</div><div class='del'>-        if ((*total_files &gt;= defrag-&gt;tier_conf.max_migrate_files)</div><div class='del'>-            || (*total_migrated_bytes &gt; defrag-&gt;tier_conf.max_migrate_bytes)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Reached cycle migration limit."</div><div class='del'>-                        "migrated bytes %"PRId64" files %d",</div><div class='del'>-                        *total_migrated_bytes,</div><div class='del'>-                        *total_files);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE((char *)loc.name);</div><div class='add'>+    loc.name = NULL;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;p_loc);</div><div class='add'>+</div><div class='add'>+    if ((*total_files &gt;= defrag-&gt;tier_conf.max_migrate_files) ||</div><div class='add'>+        (*total_migrated_bytes &gt; defrag-&gt;tier_conf.max_migrate_bytes)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Reached cycle migration limit."</div><div class='add'>+               "migrated bytes %" PRId64 " files %d",</div><div class='add'>+               *total_migrated_bytes, *total_files);</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-tier_migrate_using_query_file (void *_args)</div><div class='add'>+tier_migrate_using_query_file(void *_args)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        query_cbk_args_t *query_cbk_args        = (query_cbk_args_t *) _args;</div><div class='del'>-        xlator_t *this                          = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag                = NULL;</div><div class='del'>-        gfdb_query_record_t *query_record       = NULL;</div><div class='del'>-        gfdb_link_info_t *link_info             = NULL;</div><div class='del'>-        dict_t *migrate_data                    = NULL;</div><div class='del'>-        /*</div><div class='del'>-         * per_file_status and per_link_status</div><div class='del'>-         *  0  : success</div><div class='del'>-         * -1 : failure</div><div class='del'>-         *  1  : ignore the status and don't count for migration</div><div class='del'>-         * */</div><div class='del'>-        int per_file_status                     = 0;</div><div class='del'>-        int per_link_status                     = 0;</div><div class='del'>-        int total_status                        = 0;</div><div class='del'>-        dht_conf_t   *conf                      = NULL;</div><div class='del'>-        uint64_t total_migrated_bytes           = 0;</div><div class='del'>-        int total_files                         = 0;</div><div class='del'>-        loc_t root_loc                          = { 0 };</div><div class='del'>-        gfdb_time_t  start_time                 = { 0 };</div><div class='del'>-        gfdb_time_t  current_time               = { 0 };</div><div class='del'>-        int total_time                          = 0;</div><div class='del'>-        int max_time                            = 0;</div><div class='del'>-        gf_boolean_t emergency_demote_mode      = _gf_false;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args-&gt;this, out);</div><div class='del'>-        this = query_cbk_args-&gt;this;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, query_cbk_args-&gt;defrag, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, query_cbk_args-&gt;qfile_array, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        defrag = query_cbk_args-&gt;defrag;</div><div class='del'>-        migrate_data = dict_new ();</div><div class='del'>-        if (!migrate_data)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        emergency_demote_mode = (!query_cbk_args-&gt;is_promotion &amp;&amp;</div><div class='del'>-                                 is_hot_tier_full(&amp;defrag-&gt;tier_conf));</div><div class='del'>-</div><div class='del'>-        if (tier_set_migrate_data (migrate_data) != 0) {</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    query_cbk_args_t *query_cbk_args = (query_cbk_args_t *)_args;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    gfdb_query_record_t *query_record = NULL;</div><div class='add'>+    gfdb_link_info_t *link_info = NULL;</div><div class='add'>+    dict_t *migrate_data = NULL;</div><div class='add'>+    /*</div><div class='add'>+     * per_file_status and per_link_status</div><div class='add'>+     *  0  : success</div><div class='add'>+     * -1 : failure</div><div class='add'>+     *  1  : ignore the status and don't count for migration</div><div class='add'>+     * */</div><div class='add'>+    int per_file_status = 0;</div><div class='add'>+    int per_link_status = 0;</div><div class='add'>+    int total_status = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    uint64_t total_migrated_bytes = 0;</div><div class='add'>+    int total_files = 0;</div><div class='add'>+    loc_t root_loc = {0};</div><div class='add'>+    gfdb_time_t start_time = {0};</div><div class='add'>+    gfdb_time_t current_time = {0};</div><div class='add'>+    int total_time = 0;</div><div class='add'>+    int max_time = 0;</div><div class='add'>+    gf_boolean_t emergency_demote_mode = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args-&gt;this, out);</div><div class='add'>+    this = query_cbk_args-&gt;this;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, query_cbk_args-&gt;defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, query_cbk_args-&gt;qfile_array, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    defrag = query_cbk_args-&gt;defrag;</div><div class='add'>+    migrate_data = dict_new();</div><div class='add'>+    if (!migrate_data)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    emergency_demote_mode = (!query_cbk_args-&gt;is_promotion &amp;&amp;</div><div class='add'>+                             is_hot_tier_full(&amp;defrag-&gt;tier_conf));</div><div class='add'>+</div><div class='add'>+    if (tier_set_migrate_data(migrate_data) != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dht_build_root_loc(defrag-&gt;root_inode, &amp;root_loc);</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;start_time, NULL);</div><div class='add'>+    if (query_cbk_args-&gt;is_promotion) {</div><div class='add'>+        max_time = defrag-&gt;tier_conf.tier_promote_frequency;</div><div class='add'>+    } else {</div><div class='add'>+        max_time = defrag-&gt;tier_conf.tier_demote_frequency;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Per file */</div><div class='add'>+    while ((ret = read_query_record_list(query_cbk_args-&gt;qfile_array,</div><div class='add'>+                                         &amp;query_record)) != 0) {</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "Failed to fetch query record "</div><div class='add'>+                   "from query file");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dht_build_root_loc (defrag-&gt;root_inode, &amp;root_loc);</div><div class='del'>-</div><div class='del'>-        ret = gettimeofday (&amp;start_time, NULL);</div><div class='del'>-        if (query_cbk_args-&gt;is_promotion) {</div><div class='del'>-                max_time = defrag-&gt;tier_conf.tier_promote_frequency;</div><div class='del'>-        } else {</div><div class='del'>-                max_time = defrag-&gt;tier_conf.tier_demote_frequency;</div><div class='add'>+        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "Exiting tier migration as"</div><div class='add'>+                   "defrag status is not started");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Per file */</div><div class='del'>-        while ((ret = read_query_record_list (query_cbk_args-&gt;qfile_array,</div><div class='del'>-              &amp;query_record)) != 0) {</div><div class='del'>-</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "Failed to fetch query record "</div><div class='del'>-                                "from query file");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "Exiting tier migration as"</div><div class='del'>-                                "defrag status is not started");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "Could not get current time.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "Could not get current time.");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                total_time = current_time.tv_sec - start_time.tv_sec;</div><div class='del'>-                if (total_time &gt; max_time) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                "Max cycle time reached. Exiting migration.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        total_time = current_time.tv_sec - start_time.tv_sec;</div><div class='add'>+        if (total_time &gt; max_time) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                   "Max cycle time reached. Exiting migration.");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                per_file_status      = 0;</div><div class='del'>-                per_link_status      = 0;</div><div class='add'>+        per_file_status = 0;</div><div class='add'>+        per_link_status = 0;</div><div class='ctx'> </div><div class='del'>-                if (gf_defrag_get_pause_state (&amp;defrag-&gt;tier_conf)</div><div class='del'>-                    != TIER_RUNNING) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                "Tiering paused. "</div><div class='del'>-                                "Exiting tier_migrate_using_query_file");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (gf_defrag_get_pause_state(&amp;defrag-&gt;tier_conf) != TIER_RUNNING) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                   "Tiering paused. "</div><div class='add'>+                   "Exiting tier_migrate_using_query_file");</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (defrag-&gt;tier_conf.mode == TIER_MODE_WM) {</div><div class='del'>-                        ret = tier_get_fs_stat (this, &amp;root_loc);</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                gfdb_methods.gfdb_query_record_free (query_record);</div><div class='del'>-                                query_record = NULL;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                        "tier_get_fs_stat() FAILED ... "</div><div class='del'>-                                        "skipping file migrations until next cycle");</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (!tier_do_migration (this, query_cbk_args-&gt;is_promotion)) {</div><div class='del'>-                                gfdb_methods.gfdb_query_record_free (query_record);</div><div class='del'>-                                query_record = NULL;</div><div class='del'>-</div><div class='del'>-                                /* We have crossed the high watermark. Stop processing</div><div class='del'>-                                 * files if this is a promotion cycle so demotion gets</div><div class='del'>-                                 * a chance to start if not already running*/</div><div class='del'>-</div><div class='del'>-                                if (query_cbk_args-&gt;is_promotion &amp;&amp;</div><div class='del'>-                                    is_hot_tier_full (&amp;defrag-&gt;tier_conf)) {</div><div class='del'>-</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                                "High watermark crossed during "</div><div class='del'>-                                                "promotion. Exiting "</div><div class='del'>-                                                "tier_migrate_using_query_file");</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (defrag-&gt;tier_conf.mode == TIER_MODE_WM) {</div><div class='add'>+            ret = tier_get_fs_stat(this, &amp;root_loc);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                gfdb_methods.gfdb_query_record_free(query_record);</div><div class='add'>+                query_record = NULL;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                       "tier_get_fs_stat() FAILED ... "</div><div class='add'>+                       "skipping file migrations until next cycle");</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                per_link_status = 0;</div><div class='add'>+            if (!tier_do_migration(this, query_cbk_args-&gt;is_promotion)) {</div><div class='add'>+                gfdb_methods.gfdb_query_record_free(query_record);</div><div class='add'>+                query_record = NULL;</div><div class='ctx'> </div><div class='del'>-                /* For now we only support single link migration. And we will</div><div class='del'>-                 * ignore other hard links in the link info list of query record</div><div class='del'>-                 * TODO: Multiple hard links migration */</div><div class='del'>-                if (!list_empty (&amp;query_record-&gt;link_list)) {</div><div class='del'>-                        link_info = list_first_entry (&amp;query_record-&gt;link_list,</div><div class='del'>-                                                      gfdb_link_info_t, list);</div><div class='add'>+                /* We have crossed the high watermark. Stop processing</div><div class='add'>+                 * files if this is a promotion cycle so demotion gets</div><div class='add'>+                 * a chance to start if not already running*/</div><div class='add'>+</div><div class='add'>+                if (query_cbk_args-&gt;is_promotion &amp;&amp;</div><div class='add'>+                    is_hot_tier_full(&amp;defrag-&gt;tier_conf)) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                           "High watermark crossed during "</div><div class='add'>+                           "promotion. Exiting "</div><div class='add'>+                           "tier_migrate_using_query_file");</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                if (link_info != NULL) {</div><div class='del'>-                        if (tier_migrate_link (this,</div><div class='del'>-                                               conf,</div><div class='del'>-                                               query_record-&gt;gfid,</div><div class='del'>-                                               link_info,</div><div class='del'>-                                               defrag,</div><div class='del'>-                                               query_cbk_args,</div><div class='del'>-                                               migrate_data,</div><div class='del'>-                                               &amp;per_link_status,</div><div class='del'>-                                               &amp;total_files,</div><div class='del'>-                                               &amp;total_migrated_bytes) != 0) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                        "%s failed for %s(gfid:%s)",</div><div class='del'>-                                        (query_cbk_args-&gt;is_promotion ?</div><div class='del'>-                                         "Promotion" : "Demotion"),</div><div class='del'>-                                        link_info-&gt;file_name,</div><div class='del'>-                                        uuid_utoa (query_record-&gt;gfid));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                per_file_status = per_link_status;</div><div class='del'>-</div><div class='del'>-                if (per_file_status &lt; 0) {/* Failure */</div><div class='del'>-                        pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-                        defrag-&gt;total_failures++;</div><div class='del'>-                        pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-                } else if (per_file_status == 0) {/* Success */</div><div class='del'>-                        pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-                        defrag-&gt;total_files++;</div><div class='del'>-                        pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-                } else if (per_file_status == 1) {/* Ignore */</div><div class='del'>-                        per_file_status = 0;</div><div class='del'>-                        /* Since this attempt was ignored we</div><div class='del'>-                         * decrement the lookup count*/</div><div class='del'>-                        pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-                        defrag-&gt;num_files_lookedup--;</div><div class='del'>-                        pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-                }</div><div class='del'>-                total_status = total_status + per_file_status;</div><div class='del'>-                per_link_status = 0;</div><div class='del'>-                per_file_status = 0;</div><div class='del'>-</div><div class='del'>-                gfdb_methods.gfdb_query_record_free (query_record);</div><div class='del'>-                query_record = NULL;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        per_link_status = 0;</div><div class='add'>+</div><div class='add'>+        /* For now we only support single link migration. And we will</div><div class='add'>+         * ignore other hard links in the link info list of query record</div><div class='add'>+         * TODO: Multiple hard links migration */</div><div class='add'>+        if (!list_empty(&amp;query_record-&gt;link_list)) {</div><div class='add'>+            link_info = list_first_entry(&amp;query_record-&gt;link_list,</div><div class='add'>+                                         gfdb_link_info_t, list);</div><div class='add'>+        }</div><div class='add'>+        if (link_info != NULL) {</div><div class='add'>+            if (tier_migrate_link(this, conf, query_record-&gt;gfid, link_info,</div><div class='add'>+                                  defrag, query_cbk_args, migrate_data,</div><div class='add'>+                                  &amp;per_link_status, &amp;total_files,</div><div class='add'>+                                  &amp;total_migrated_bytes) != 0) {</div><div class='add'>+                gf_msg(</div><div class='add'>+                    this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                    "%s failed for %s(gfid:%s)",</div><div class='add'>+                    (query_cbk_args-&gt;is_promotion ? "Promotion" : "Demotion"),</div><div class='add'>+                    link_info-&gt;file_name, uuid_utoa(query_record-&gt;gfid));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        per_file_status = per_link_status;</div><div class='add'>+</div><div class='add'>+        if (per_file_status &lt; 0) { /* Failure */</div><div class='add'>+            pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+            defrag-&gt;total_failures++;</div><div class='add'>+            pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+        } else if (per_file_status == 0) { /* Success */</div><div class='add'>+            pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+            defrag-&gt;total_files++;</div><div class='add'>+            pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+        } else if (per_file_status == 1) { /* Ignore */</div><div class='add'>+            per_file_status = 0;</div><div class='add'>+            /* Since this attempt was ignored we</div><div class='add'>+             * decrement the lookup count*/</div><div class='add'>+            pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+            defrag-&gt;num_files_lookedup--;</div><div class='add'>+            pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+        }</div><div class='add'>+        total_status = total_status + per_file_status;</div><div class='add'>+        per_link_status = 0;</div><div class='add'>+        per_file_status = 0;</div><div class='add'>+</div><div class='add'>+        gfdb_methods.gfdb_query_record_free(query_record);</div><div class='add'>+        query_record = NULL;</div><div class='ctx'> </div><div class='del'>-                /* If we are demoting and the entry watermark was HI, then</div><div class='del'>-                 * we are done with emergency demotions if the current</div><div class='del'>-                 * watermark has fallen below hi-watermark level</div><div class='del'>-                 */</div><div class='del'>-                if (emergency_demote_mode) {</div><div class='del'>-                        if (tier_check_watermark (this) == 0) {</div><div class='del'>-                                if (!is_hot_tier_full (&amp;defrag-&gt;tier_conf)) {</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+        /* If we are demoting and the entry watermark was HI, then</div><div class='add'>+         * we are done with emergency demotions if the current</div><div class='add'>+         * watermark has fallen below hi-watermark level</div><div class='add'>+         */</div><div class='add'>+        if (emergency_demote_mode) {</div><div class='add'>+            if (tier_check_watermark(this) == 0) {</div><div class='add'>+                if (!is_hot_tier_full(&amp;defrag-&gt;tier_conf)) {</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (migrate_data)</div><div class='del'>-                dict_unref (migrate_data);</div><div class='add'>+    if (migrate_data)</div><div class='add'>+        dict_unref(migrate_data);</div><div class='ctx'> </div><div class='del'>-        gfdb_methods.gfdb_query_record_free (query_record);</div><div class='del'>-        query_record = NULL;</div><div class='add'>+    gfdb_methods.gfdb_query_record_free(query_record);</div><div class='add'>+    query_record = NULL;</div><div class='ctx'> </div><div class='del'>-        return total_status;</div><div class='add'>+    return total_status;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This is the call back function per record/file from data base */</div><div class='ctx'> static int</div><div class='del'>-tier_gf_query_callback (gfdb_query_record_t *gfdb_query_record,</div><div class='del'>-                        void *_args) {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        query_cbk_args_t *query_cbk_args = _args;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args-&gt;defrag, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", (query_cbk_args-&gt;query_fd &gt; 0), out);</div><div class='del'>-</div><div class='del'>-        ret = gfdb_methods.gfdb_write_query_record (query_cbk_args-&gt;query_fd,</div><div class='del'>-                                                        gfdb_query_record);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed writing query record to query file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-        query_cbk_args-&gt;defrag-&gt;num_files_lookedup++;</div><div class='del'>-        pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+tier_gf_query_callback(gfdb_query_record_t *gfdb_query_record, void *_args)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    query_cbk_args_t *query_cbk_args = _args;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args-&gt;defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", (query_cbk_args-&gt;query_fd &gt; 0), out);</div><div class='add'>+</div><div class='add'>+    ret = gfdb_methods.gfdb_write_query_record(query_cbk_args-&gt;query_fd,</div><div class='add'>+                                               gfdb_query_record);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed writing query record to query file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+    query_cbk_args-&gt;defrag-&gt;num_files_lookedup++;</div><div class='add'>+    pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Create query file in tier process */</div><div class='ctx'> static int</div><div class='del'>-tier_process_self_query (tier_brick_list_t *local_brick, void *args)</div><div class='add'>+tier_process_self_query(tier_brick_list_t *local_brick, void *args)</div><div class='ctx'> {</div><div class='del'>-        int ret                                         = -1;</div><div class='del'>-        char *db_path                                   = NULL;</div><div class='del'>-        query_cbk_args_t *query_cbk_args                = NULL;</div><div class='del'>-        xlator_t *this                                  = NULL;</div><div class='del'>-        gfdb_conn_node_t *conn_node                     = NULL;</div><div class='del'>-        dict_t *params_dict                             = NULL;</div><div class='del'>-        dict_t *ctr_ipc_dict                            = NULL;</div><div class='del'>-        gfdb_brick_info_t *gfdb_brick_info              = args;</div><div class='del'>-</div><div class='del'>-        /*Init of all the essentials*/</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", gfdb_brick_info , out);</div><div class='del'>-        query_cbk_args = gfdb_brick_info-&gt;_query_cbk_args;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args-&gt;this, out);</div><div class='del'>-        this = query_cbk_args-&gt;this;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name,</div><div class='del'>-                             gfdb_brick_info-&gt;_query_cbk_args, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick-&gt;xlator, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick-&gt;brick_db_path, out);</div><div class='del'>-</div><div class='del'>-        db_path = local_brick-&gt;brick_db_path;</div><div class='del'>-</div><div class='del'>-        /*Preparing DB parameters before init_db i.e getting db connection*/</div><div class='del'>-        params_dict = dict_new ();</div><div class='del'>-        if (!params_dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "DB Params cannot initialized");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        SET_DB_PARAM_TO_DICT(this-&gt;name, params_dict,</div><div class='del'>-                             (char *) gfdb_methods.get_db_path_key(),</div><div class='del'>-                             db_path, ret, out);</div><div class='del'>-</div><div class='del'>-        /*Get the db connection*/</div><div class='del'>-        conn_node = gfdb_methods.init_db ((void *)params_dict, dht_tier_db_type);</div><div class='del'>-        if (!conn_node) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "FATAL: Failed initializing db operations");</div><div class='del'>-                         goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Query for eligible files from db */</div><div class='del'>-        query_cbk_args-&gt;query_fd = open (local_brick-&gt;qfile_path,</div><div class='del'>-                        O_WRONLY | O_CREAT | O_APPEND,</div><div class='del'>-                        S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (query_cbk_args-&gt;query_fd &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to open query file %s",</div><div class='del'>-                        local_brick-&gt;qfile_path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!gfdb_brick_info-&gt;_gfdb_promote) {</div><div class='del'>-                if (query_cbk_args-&gt;defrag-&gt;tier_conf.watermark_last ==</div><div class='del'>-                        TIER_WM_HI) {</div><div class='del'>-                        /* emergency demotion mode */</div><div class='del'>-                        ret = gfdb_methods.find_all (conn_node,</div><div class='del'>-                                tier_gf_query_callback,</div><div class='del'>-                                (void *)query_cbk_args,</div><div class='del'>-                                query_cbk_args-&gt;defrag-&gt;tier_conf.</div><div class='del'>-                                        query_limit);</div><div class='del'>-                } else {</div><div class='del'>-                        if (query_cbk_args-&gt;defrag-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='del'>-                            query_cbk_args-&gt;defrag-&gt;read_freq_threshold == 0) {</div><div class='del'>-                                ret = gfdb_methods.find_unchanged_for_time (</div><div class='del'>-                                                conn_node,</div><div class='del'>-                                                tier_gf_query_callback,</div><div class='del'>-                                                (void *)query_cbk_args,</div><div class='del'>-                                                gfdb_brick_info-&gt;time_stamp);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = gfdb_methods.find_unchanged_for_time_freq (</div><div class='del'>-                                        conn_node,</div><div class='del'>-                                        tier_gf_query_callback,</div><div class='del'>-                                        (void *)query_cbk_args,</div><div class='del'>-                                        gfdb_brick_info-&gt;time_stamp,</div><div class='del'>-                                        query_cbk_args-&gt;defrag-&gt;</div><div class='del'>-                                                        write_freq_threshold,</div><div class='del'>-                                        query_cbk_args-&gt;defrag-&gt;</div><div class='del'>-                                                        read_freq_threshold,</div><div class='del'>-                                        _gf_false);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *db_path = NULL;</div><div class='add'>+    query_cbk_args_t *query_cbk_args = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gfdb_conn_node_t *conn_node = NULL;</div><div class='add'>+    dict_t *params_dict = NULL;</div><div class='add'>+    dict_t *ctr_ipc_dict = NULL;</div><div class='add'>+    gfdb_brick_info_t *gfdb_brick_info = args;</div><div class='add'>+</div><div class='add'>+    /*Init of all the essentials*/</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", gfdb_brick_info, out);</div><div class='add'>+    query_cbk_args = gfdb_brick_info-&gt;_query_cbk_args;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args-&gt;this, out);</div><div class='add'>+    this = query_cbk_args-&gt;this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, gfdb_brick_info-&gt;_query_cbk_args, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick-&gt;xlator, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick-&gt;brick_db_path, out);</div><div class='add'>+</div><div class='add'>+    db_path = local_brick-&gt;brick_db_path;</div><div class='add'>+</div><div class='add'>+    /*Preparing DB parameters before init_db i.e getting db connection*/</div><div class='add'>+    params_dict = dict_new();</div><div class='add'>+    if (!params_dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "DB Params cannot initialized");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, params_dict,</div><div class='add'>+                         (char *)gfdb_methods.get_db_path_key(), db_path, ret,</div><div class='add'>+                         out);</div><div class='add'>+</div><div class='add'>+    /*Get the db connection*/</div><div class='add'>+    conn_node = gfdb_methods.init_db((void *)params_dict, dht_tier_db_type);</div><div class='add'>+    if (!conn_node) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "FATAL: Failed initializing db operations");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Query for eligible files from db */</div><div class='add'>+    query_cbk_args-&gt;query_fd = open(local_brick-&gt;qfile_path,</div><div class='add'>+                                    O_WRONLY | O_CREAT | O_APPEND,</div><div class='add'>+                                    S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (query_cbk_args-&gt;query_fd &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to open query file %s", local_brick-&gt;qfile_path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!gfdb_brick_info-&gt;_gfdb_promote) {</div><div class='add'>+        if (query_cbk_args-&gt;defrag-&gt;tier_conf.watermark_last == TIER_WM_HI) {</div><div class='add'>+            /* emergency demotion mode */</div><div class='add'>+            ret = gfdb_methods.find_all(</div><div class='add'>+                conn_node, tier_gf_query_callback, (void *)query_cbk_args,</div><div class='add'>+                query_cbk_args-&gt;defrag-&gt;tier_conf.query_limit);</div><div class='ctx'>         } else {</div><div class='del'>-                if (query_cbk_args-&gt;defrag-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='del'>-                        query_cbk_args-&gt;defrag-&gt;read_freq_threshold == 0) {</div><div class='del'>-                        ret = gfdb_methods.find_recently_changed_files (</div><div class='del'>-                                conn_node,</div><div class='del'>-                                tier_gf_query_callback,</div><div class='del'>-                                (void *)query_cbk_args,</div><div class='del'>-                                gfdb_brick_info-&gt;time_stamp);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gfdb_methods.find_recently_changed_files_freq (</div><div class='del'>-                                conn_node,</div><div class='del'>-                                tier_gf_query_callback,</div><div class='del'>-                                (void *)query_cbk_args,</div><div class='del'>-                                gfdb_brick_info-&gt;time_stamp,</div><div class='del'>-                                query_cbk_args-&gt;defrag-&gt;write_freq_threshold,</div><div class='del'>-                                query_cbk_args-&gt;defrag-&gt;read_freq_threshold,</div><div class='del'>-                                _gf_false);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "FATAL: query from db failed");</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Clear the heat on the DB entries*/</div><div class='del'>-        /*Preparing ctr_ipc_dict*/</div><div class='del'>-        ctr_ipc_dict = dict_new ();</div><div class='del'>-        if (!ctr_ipc_dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "ctr_ipc_dict cannot initialized");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        SET_DB_PARAM_TO_DICT(this-&gt;name, ctr_ipc_dict,</div><div class='del'>-                             GFDB_IPC_CTR_KEY, GFDB_IPC_CTR_CLEAR_OPS,</div><div class='del'>-                             ret, out);</div><div class='del'>-</div><div class='del'>-        ret = syncop_ipc (local_brick-&gt;xlator, GF_IPC_TARGET_CTR, ctr_ipc_dict,</div><div class='del'>-                                                                        NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed clearing the heat "</div><div class='del'>-                        "on db %s error %d", local_brick-&gt;brick_db_path, ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+            if (query_cbk_args-&gt;defrag-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='add'>+                query_cbk_args-&gt;defrag-&gt;read_freq_threshold == 0) {</div><div class='add'>+                ret = gfdb_methods.find_unchanged_for_time(</div><div class='add'>+                    conn_node, tier_gf_query_callback, (void *)query_cbk_args,</div><div class='add'>+                    gfdb_brick_info-&gt;time_stamp);</div><div class='add'>+            } else {</div><div class='add'>+                ret = gfdb_methods.find_unchanged_for_time_freq(</div><div class='add'>+                    conn_node, tier_gf_query_callback, (void *)query_cbk_args,</div><div class='add'>+                    gfdb_brick_info-&gt;time_stamp,</div><div class='add'>+                    query_cbk_args-&gt;defrag-&gt;write_freq_threshold,</div><div class='add'>+                    query_cbk_args-&gt;defrag-&gt;read_freq_threshold, _gf_false);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (query_cbk_args-&gt;defrag-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='add'>+            query_cbk_args-&gt;defrag-&gt;read_freq_threshold == 0) {</div><div class='add'>+            ret = gfdb_methods.find_recently_changed_files(</div><div class='add'>+                conn_node, tier_gf_query_callback, (void *)query_cbk_args,</div><div class='add'>+                gfdb_brick_info-&gt;time_stamp);</div><div class='add'>+        } else {</div><div class='add'>+            ret = gfdb_methods.find_recently_changed_files_freq(</div><div class='add'>+                conn_node, tier_gf_query_callback, (void *)query_cbk_args,</div><div class='add'>+                gfdb_brick_info-&gt;time_stamp,</div><div class='add'>+                query_cbk_args-&gt;defrag-&gt;write_freq_threshold,</div><div class='add'>+                query_cbk_args-&gt;defrag-&gt;read_freq_threshold, _gf_false);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "FATAL: query from db failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Clear the heat on the DB entries*/</div><div class='add'>+    /*Preparing ctr_ipc_dict*/</div><div class='add'>+    ctr_ipc_dict = dict_new();</div><div class='add'>+    if (!ctr_ipc_dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "ctr_ipc_dict cannot initialized");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, ctr_ipc_dict, GFDB_IPC_CTR_KEY,</div><div class='add'>+                         GFDB_IPC_CTR_CLEAR_OPS, ret, out);</div><div class='add'>+</div><div class='add'>+    ret = syncop_ipc(local_brick-&gt;xlator, GF_IPC_TARGET_CTR, ctr_ipc_dict,</div><div class='add'>+                     NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed clearing the heat "</div><div class='add'>+               "on db %s error %d",</div><div class='add'>+               local_brick-&gt;brick_db_path, ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (params_dict) {</div><div class='del'>-                dict_unref (params_dict);</div><div class='del'>-                params_dict = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ctr_ipc_dict) {</div><div class='del'>-                dict_unref (ctr_ipc_dict);</div><div class='del'>-                ctr_ipc_dict = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (query_cbk_args &amp;&amp; query_cbk_args-&gt;query_fd &gt;= 0) {</div><div class='del'>-                sys_close (query_cbk_args-&gt;query_fd);</div><div class='del'>-                query_cbk_args-&gt;query_fd = -1;</div><div class='del'>-        }</div><div class='del'>-        gfdb_methods.fini_db (conn_node);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (params_dict) {</div><div class='add'>+        dict_unref(params_dict);</div><div class='add'>+        params_dict = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctr_ipc_dict) {</div><div class='add'>+        dict_unref(ctr_ipc_dict);</div><div class='add'>+        ctr_ipc_dict = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (query_cbk_args &amp;&amp; query_cbk_args-&gt;query_fd &gt;= 0) {</div><div class='add'>+        sys_close(query_cbk_args-&gt;query_fd);</div><div class='add'>+        query_cbk_args-&gt;query_fd = -1;</div><div class='add'>+    }</div><div class='add'>+    gfdb_methods.fini_db(conn_node);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /*Ask CTR to create the query file*/</div><div class='ctx'> static int</div><div class='del'>-tier_process_ctr_query (tier_brick_list_t *local_brick, void *args)</div><div class='add'>+tier_process_ctr_query(tier_brick_list_t *local_brick, void *args)</div><div class='ctx'> {</div><div class='del'>-        int ret                                         = -1;</div><div class='del'>-        query_cbk_args_t *query_cbk_args                = NULL;</div><div class='del'>-        xlator_t *this                                  = NULL;</div><div class='del'>-        dict_t *ctr_ipc_in_dict                         = NULL;</div><div class='del'>-        dict_t *ctr_ipc_out_dict                        = NULL;</div><div class='del'>-        gfdb_brick_info_t *gfdb_brick_info              = args;</div><div class='del'>-        gfdb_ipc_ctr_params_t *ipc_ctr_params           = NULL;</div><div class='del'>-        int count                                       = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    query_cbk_args_t *query_cbk_args = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dict_t *ctr_ipc_in_dict = NULL;</div><div class='add'>+    dict_t *ctr_ipc_out_dict = NULL;</div><div class='add'>+    gfdb_brick_info_t *gfdb_brick_info = args;</div><div class='add'>+    gfdb_ipc_ctr_params_t *ipc_ctr_params = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    /*Init of all the essentials*/</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", gfdb_brick_info, out);</div><div class='add'>+    query_cbk_args = gfdb_brick_info-&gt;_query_cbk_args;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args-&gt;this, out);</div><div class='add'>+    this = query_cbk_args-&gt;this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, gfdb_brick_info-&gt;_query_cbk_args, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick-&gt;xlator, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick-&gt;brick_db_path, out);</div><div class='add'>+</div><div class='add'>+    /*Preparing ctr_ipc_in_dict*/</div><div class='add'>+    ctr_ipc_in_dict = dict_new();</div><div class='add'>+    if (!ctr_ipc_in_dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "ctr_ipc_in_dict cannot initialized");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ipc_ctr_params = GF_CALLOC(1, sizeof(gfdb_ipc_ctr_params_t),</div><div class='add'>+                               gf_tier_mt_ipc_ctr_params_t);</div><div class='add'>+    if (!ipc_ctr_params) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* set all the query params*/</div><div class='add'>+    ipc_ctr_params-&gt;is_promote = gfdb_brick_info-&gt;_gfdb_promote;</div><div class='add'>+</div><div class='add'>+    ipc_ctr_params-&gt;write_freq_threshold = query_cbk_args-&gt;defrag</div><div class='add'>+                                               -&gt;write_freq_threshold;</div><div class='add'>+</div><div class='add'>+    ipc_ctr_params-&gt;read_freq_threshold = query_cbk_args-&gt;defrag</div><div class='add'>+                                              -&gt;read_freq_threshold;</div><div class='add'>+</div><div class='add'>+    ipc_ctr_params-&gt;query_limit = query_cbk_args-&gt;defrag-&gt;tier_conf.query_limit;</div><div class='add'>+</div><div class='add'>+    ipc_ctr_params-&gt;emergency_demote = (!gfdb_brick_info-&gt;_gfdb_promote &amp;&amp;</div><div class='add'>+                                        query_cbk_args-&gt;defrag-&gt;tier_conf</div><div class='add'>+                                                .watermark_last == TIER_WM_HI);</div><div class='add'>+</div><div class='add'>+    memcpy(&amp;ipc_ctr_params-&gt;time_stamp, gfdb_brick_info-&gt;time_stamp,</div><div class='add'>+           sizeof(gfdb_time_t));</div><div class='add'>+</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, ctr_ipc_in_dict, GFDB_IPC_CTR_KEY,</div><div class='add'>+                         GFDB_IPC_CTR_QUERY_OPS, ret, out);</div><div class='add'>+</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, ctr_ipc_in_dict,</div><div class='add'>+                         GFDB_IPC_CTR_GET_QFILE_PATH, local_brick-&gt;qfile_path,</div><div class='add'>+                         ret, out);</div><div class='add'>+</div><div class='add'>+    ret = dict_set_bin(ctr_ipc_in_dict, GFDB_IPC_CTR_GET_QUERY_PARAMS,</div><div class='add'>+                       ipc_ctr_params, sizeof(*ipc_ctr_params));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+               "Failed setting %s to params dictionary",</div><div class='add'>+               GFDB_IPC_CTR_GET_QUERY_PARAMS);</div><div class='add'>+        GF_FREE(ipc_ctr_params);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ipc_ctr_params = NULL;</div><div class='add'>+</div><div class='add'>+    ret = syncop_ipc(local_brick-&gt;xlator, GF_IPC_TARGET_CTR, ctr_ipc_in_dict,</div><div class='add'>+                     &amp;ctr_ipc_out_dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_IPC_TIER_ERROR,</div><div class='add'>+               "Failed query on %s ret %d", local_brick-&gt;brick_db_path, ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(ctr_ipc_out_dict, GFDB_IPC_CTR_RET_QUERY_COUNT,</div><div class='add'>+                         &amp;count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed getting count "</div><div class='add'>+               "of records on %s",</div><div class='add'>+               local_brick-&gt;brick_db_path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed query on %s", local_brick-&gt;brick_db_path);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;dm_stat_mutex);</div><div class='add'>+    query_cbk_args-&gt;defrag-&gt;num_files_lookedup = count;</div><div class='add'>+    pthread_mutex_unlock(&amp;dm_stat_mutex);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='ctx'> </div><div class='del'>-        /*Init of all the essentials*/</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", gfdb_brick_info , out);</div><div class='del'>-        query_cbk_args = gfdb_brick_info-&gt;_query_cbk_args;</div><div class='add'>+    if (ctr_ipc_in_dict) {</div><div class='add'>+        dict_unref(ctr_ipc_in_dict);</div><div class='add'>+        ctr_ipc_in_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args-&gt;this, out);</div><div class='del'>-        this = query_cbk_args-&gt;this;</div><div class='add'>+    if (ctr_ipc_out_dict) {</div><div class='add'>+        dict_unref(ctr_ipc_out_dict);</div><div class='add'>+        ctr_ipc_out_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name,</div><div class='del'>-                             gfdb_brick_info-&gt;_query_cbk_args, out);</div><div class='add'>+    GF_FREE(ipc_ctr_params);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick, out);</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick-&gt;xlator, out);</div><div class='add'>+/* This is the call back function for each brick from hot/cold bricklist</div><div class='add'>+ * It picks up each bricks db and queries for eligible files for migration.</div><div class='add'>+ * The list of eligible files are populated in appropriate query files*/</div><div class='add'>+static int</div><div class='add'>+tier_process_brick(tier_brick_list_t *local_brick, void *args)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *ctr_ipc_in_dict = NULL;</div><div class='add'>+    dict_t *ctr_ipc_out_dict = NULL;</div><div class='add'>+    char *strval = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick-&gt;brick_db_path, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", local_brick, out);</div><div class='ctx'> </div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", local_brick-&gt;xlator, out);</div><div class='ctx'> </div><div class='add'>+    if (dht_tier_db_type == GFDB_SQLITE3) {</div><div class='ctx'>         /*Preparing ctr_ipc_in_dict*/</div><div class='del'>-        ctr_ipc_in_dict = dict_new ();</div><div class='add'>+        ctr_ipc_in_dict = dict_new();</div><div class='ctx'>         if (!ctr_ipc_in_dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "ctr_ipc_in_dict cannot initialized");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "ctr_ipc_in_dict cannot initialized");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ipc_ctr_params = GF_CALLOC (1, sizeof (gfdb_ipc_ctr_params_t),</div><div class='del'>-                                        gf_tier_mt_ipc_ctr_params_t);</div><div class='del'>-        if (!ipc_ctr_params) {</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dict_set_str(ctr_ipc_in_dict, GFDB_IPC_CTR_KEY,</div><div class='add'>+                           GFDB_IPC_CTR_GET_DB_PARAM_OPS);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+                   "Failed to set %s "</div><div class='add'>+                   "to params dictionary",</div><div class='add'>+                   GFDB_IPC_CTR_KEY);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* set all the query params*/</div><div class='del'>-        ipc_ctr_params-&gt;is_promote = gfdb_brick_info-&gt;_gfdb_promote;</div><div class='del'>-</div><div class='del'>-        ipc_ctr_params-&gt;write_freq_threshold =</div><div class='del'>-                query_cbk_args-&gt;defrag-&gt;write_freq_threshold;</div><div class='del'>-</div><div class='del'>-        ipc_ctr_params-&gt;read_freq_threshold =</div><div class='del'>-                query_cbk_args-&gt;defrag-&gt;read_freq_threshold;</div><div class='del'>-</div><div class='del'>-        ipc_ctr_params-&gt;query_limit =</div><div class='del'>-                query_cbk_args-&gt;defrag-&gt;tier_conf.query_limit;</div><div class='del'>-</div><div class='del'>-        ipc_ctr_params-&gt;emergency_demote =</div><div class='del'>-                (!gfdb_brick_info-&gt;_gfdb_promote &amp;&amp;</div><div class='del'>-                 query_cbk_args-&gt;defrag-&gt;tier_conf.watermark_last ==</div><div class='del'>-                        TIER_WM_HI);</div><div class='del'>-</div><div class='del'>-        memcpy (&amp;ipc_ctr_params-&gt;time_stamp,</div><div class='del'>-                gfdb_brick_info-&gt;time_stamp,</div><div class='del'>-                sizeof (gfdb_time_t));</div><div class='del'>-</div><div class='del'>-        SET_DB_PARAM_TO_DICT (this-&gt;name, ctr_ipc_in_dict,</div><div class='del'>-                              GFDB_IPC_CTR_KEY, GFDB_IPC_CTR_QUERY_OPS,</div><div class='del'>-                              ret, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        SET_DB_PARAM_TO_DICT (this-&gt;name, ctr_ipc_in_dict,</div><div class='del'>-                              GFDB_IPC_CTR_GET_QFILE_PATH,</div><div class='del'>-                              local_brick-&gt;qfile_path,</div><div class='del'>-                              ret, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_set_bin (ctr_ipc_in_dict, GFDB_IPC_CTR_GET_QUERY_PARAMS,</div><div class='del'>-                                ipc_ctr_params, sizeof (*ipc_ctr_params));</div><div class='add'>+        ret = dict_set_str(ctr_ipc_in_dict, GFDB_IPC_CTR_GET_DB_PARAM_OPS, "");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='del'>-                        "Failed setting %s to params dictionary",</div><div class='del'>-                        GFDB_IPC_CTR_GET_QUERY_PARAMS);</div><div class='del'>-                GF_FREE (ipc_ctr_params);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+                   "Failed to set %s "</div><div class='add'>+                   "to params dictionary",</div><div class='add'>+                   GFDB_IPC_CTR_GET_DB_PARAM_OPS);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ipc_ctr_params = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_ipc (local_brick-&gt;xlator, GF_IPC_TARGET_CTR,</div><div class='del'>-                                ctr_ipc_in_dict, &amp;ctr_ipc_out_dict);</div><div class='add'>+        ret = dict_set_str(ctr_ipc_in_dict, GFDB_IPC_CTR_GET_DB_KEY,</div><div class='add'>+                           "journal_mode");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_IPC_TIER_ERROR, "Failed query on %s ret %d",</div><div class='del'>-                        local_brick-&gt;brick_db_path, ret);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+                   "Failed to set %s "</div><div class='add'>+                   "to params dictionary",</div><div class='add'>+                   GFDB_IPC_CTR_GET_DB_KEY);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = syncop_ipc(local_brick-&gt;xlator, GF_IPC_TARGET_CTR,</div><div class='add'>+                         ctr_ipc_in_dict, &amp;ctr_ipc_out_dict);</div><div class='add'>+        if (ret || ctr_ipc_out_dict == NULL) {</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "Failed to get "</div><div class='add'>+                   "journal_mode of sql db %s",</div><div class='add'>+                   local_brick-&gt;brick_db_path);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32(ctr_ipc_out_dict, GFDB_IPC_CTR_RET_QUERY_COUNT,</div><div class='del'>-                                &amp;count);</div><div class='add'>+        ret = dict_get_str(ctr_ipc_out_dict, "journal_mode", &amp;strval);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed getting count "</div><div class='del'>-                        "of records on %s",</div><div class='del'>-                        local_brick-&gt;brick_db_path);</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, 0, LG_MSG_GET_PARAM_FAILED,</div><div class='add'>+                   "Failed to get %s "</div><div class='add'>+                   "from params dictionary"</div><div class='add'>+                   "journal_mode",</div><div class='add'>+                   strval);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed query on %s",</div><div class='del'>-                        local_brick-&gt;brick_db_path);</div><div class='del'>-                ret = -1;</div><div class='add'>+        if (strval &amp;&amp; (strncmp(strval, "wal", SLEN("wal")) == 0)) {</div><div class='add'>+            ret = tier_process_self_query(local_brick, args);</div><div class='add'>+            if (ret) {</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            ret = tier_process_ctr_query(local_brick, args);</div><div class='add'>+            if (ret) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;dm_stat_mutex);</div><div class='del'>-        query_cbk_args-&gt;defrag-&gt;num_files_lookedup = count;</div><div class='del'>-        pthread_mutex_unlock (&amp;dm_stat_mutex);</div><div class='del'>-</div><div class='ctx'>         ret = 0;</div><div class='del'>-out:</div><div class='ctx'> </div><div class='del'>-        if (ctr_ipc_in_dict) {</div><div class='del'>-                dict_unref(ctr_ipc_in_dict);</div><div class='del'>-                ctr_ipc_in_dict = NULL;</div><div class='add'>+    } else {</div><div class='add'>+        ret = tier_process_self_query(local_brick, args);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ctr_ipc_out_dict) {</div><div class='del'>-                dict_unref(ctr_ipc_out_dict);</div><div class='del'>-                ctr_ipc_out_dict = NULL;</div><div class='del'>-        }</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ctr_ipc_in_dict)</div><div class='add'>+        dict_unref(ctr_ipc_in_dict);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ipc_ctr_params);</div><div class='add'>+    if (ctr_ipc_out_dict)</div><div class='add'>+        dict_unref(ctr_ipc_out_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* This is the call back function for each brick from hot/cold bricklist</div><div class='del'>- * It picks up each bricks db and queries for eligible files for migration.</div><div class='del'>- * The list of eligible files are populated in appropriate query files*/</div><div class='ctx'> static int</div><div class='del'>-tier_process_brick (tier_brick_list_t *local_brick, void *args) {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        dict_t *ctr_ipc_in_dict = NULL;</div><div class='del'>-        dict_t *ctr_ipc_out_dict = NULL;</div><div class='del'>-        char *strval = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", local_brick, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", local_brick-&gt;xlator, out);</div><div class='del'>-</div><div class='del'>-        if (dht_tier_db_type == GFDB_SQLITE3) {</div><div class='del'>-</div><div class='del'>-                /*Preparing ctr_ipc_in_dict*/</div><div class='del'>-                ctr_ipc_in_dict = dict_new ();</div><div class='del'>-                if (!ctr_ipc_in_dict) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "ctr_ipc_in_dict cannot initialized");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_str (ctr_ipc_in_dict, GFDB_IPC_CTR_KEY,</div><div class='del'>-                                    GFDB_IPC_CTR_GET_DB_PARAM_OPS);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, 0,\</div><div class='del'>-                                LG_MSG_SET_PARAM_FAILED, "Failed to set %s "</div><div class='del'>-                                "to params dictionary", GFDB_IPC_CTR_KEY);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_str (ctr_ipc_in_dict,</div><div class='del'>-                                    GFDB_IPC_CTR_GET_DB_PARAM_OPS, "");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, 0,\</div><div class='del'>-                                LG_MSG_SET_PARAM_FAILED, "Failed to set %s "</div><div class='del'>-                                "to params dictionary",</div><div class='del'>-                                GFDB_IPC_CTR_GET_DB_PARAM_OPS);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_set_str (ctr_ipc_in_dict,</div><div class='del'>-                                    GFDB_IPC_CTR_GET_DB_KEY, "journal_mode");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_SET_PARAM_FAILED, "Failed to set %s "</div><div class='del'>-                                "to params dictionary",</div><div class='del'>-                                GFDB_IPC_CTR_GET_DB_KEY);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                ret = syncop_ipc (local_brick-&gt;xlator, GF_IPC_TARGET_CTR,</div><div class='del'>-                                ctr_ipc_in_dict, &amp;ctr_ipc_out_dict);</div><div class='del'>-                if (ret || ctr_ipc_out_dict == NULL) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR, "Failed to get "</div><div class='del'>-                                "journal_mode of sql db %s",</div><div class='del'>-                                local_brick-&gt;brick_db_path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (ctr_ipc_out_dict, "journal_mode", &amp;strval);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                                LG_MSG_GET_PARAM_FAILED, "Failed to get %s "</div><div class='del'>-                                "from params dictionary"</div><div class='del'>-                                "journal_mode", strval);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+tier_build_migration_qfile(migration_args_t *args,</div><div class='add'>+                           query_cbk_args_t *query_cbk_args,</div><div class='add'>+                           gf_boolean_t is_promotion)</div><div class='add'>+{</div><div class='add'>+    gfdb_time_t current_time;</div><div class='add'>+    gfdb_brick_info_t gfdb_brick_info;</div><div class='add'>+    gfdb_time_t time_in_past;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    tier_brick_list_t *local_brick = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    time_in_past.tv_sec = args-&gt;freq_time;</div><div class='add'>+    time_in_past.tv_usec = 0;</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(args-&gt;this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               DHT_MSG_SYS_CALL_GET_TIME_FAILED, "Failed to get current time");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    time_in_past.tv_sec = current_time.tv_sec - time_in_past.tv_sec;</div><div class='add'>+</div><div class='add'>+    /* The migration daemon may run a varying numberof usec after the */</div><div class='add'>+    /* sleep call triggers. A file may be registered in CTR some number */</div><div class='add'>+    /* of usec X after the daemon started and missed in the subsequent */</div><div class='add'>+    /* cycle if the daemon starts Y usec after the period in seconds */</div><div class='add'>+    /* where Y&gt;X. Normalize away this problem by always setting usec */</div><div class='add'>+    /* to 0. */</div><div class='add'>+    time_in_past.tv_usec = 0;</div><div class='add'>+</div><div class='add'>+    gfdb_brick_info.time_stamp = &amp;time_in_past;</div><div class='add'>+    gfdb_brick_info._gfdb_promote = is_promotion;</div><div class='add'>+    gfdb_brick_info._query_cbk_args = query_cbk_args;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(local_brick, args-&gt;brick_list, list)</div><div class='add'>+    {</div><div class='add'>+        /* Construct query file path for this brick</div><div class='add'>+         * i.e</div><div class='add'>+         * /var/run/gluster/xlator_name/</div><div class='add'>+         * {promote/demote}-brickname-indexinbricklist</div><div class='add'>+         * So that no two query files will have same path even</div><div class='add'>+         * bricks have the same name</div><div class='add'>+         * */</div><div class='add'>+        snprintf(local_brick-&gt;qfile_path, PATH_MAX, "%s-%s-%d",</div><div class='add'>+                 GET_QFILE_PATH(gfdb_brick_info._gfdb_promote),</div><div class='add'>+                 local_brick-&gt;brick_name, i);</div><div class='ctx'> </div><div class='del'>-                if (strval &amp;&amp; (strncmp(strval, "wal", SLEN ("wal")) == 0)) {</div><div class='del'>-                        ret = tier_process_self_query (local_brick, args);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = tier_process_ctr_query (local_brick, args);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='add'>+        /* Delete any old query files for this brick */</div><div class='add'>+        sys_unlink(local_brick-&gt;qfile_path);</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                ret = tier_process_self_query (local_brick, args);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = tier_process_brick(local_brick, &amp;gfdb_brick_info);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(args-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_BRICK_QUERY_FAILED, "Brick %s query failed\n",</div><div class='add'>+                   local_brick-&gt;brick_db_path);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if  (ctr_ipc_in_dict)</div><div class='del'>-                dict_unref (ctr_ipc_in_dict);</div><div class='del'>-</div><div class='del'>-        if  (ctr_ipc_out_dict)</div><div class='del'>-                dict_unref (ctr_ipc_out_dict);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-tier_build_migration_qfile (migration_args_t *args,</div><div class='del'>-                            query_cbk_args_t *query_cbk_args,</div><div class='del'>-                            gf_boolean_t is_promotion)</div><div class='add'>+tier_migrate_files_using_qfile(migration_args_t *comp,</div><div class='add'>+                               query_cbk_args_t *query_cbk_args)</div><div class='ctx'> {</div><div class='del'>-        gfdb_time_t               current_time;</div><div class='del'>-        gfdb_brick_info_t         gfdb_brick_info;</div><div class='del'>-        gfdb_time_t               time_in_past;</div><div class='del'>-        int                       ret = -1;</div><div class='del'>-        tier_brick_list_t         *local_brick = NULL;</div><div class='del'>-        int                       i = 0;</div><div class='del'>-        time_in_past.tv_sec = args-&gt;freq_time;</div><div class='del'>-        time_in_past.tv_usec = 0;</div><div class='del'>-</div><div class='del'>-        ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (args-&gt;this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        DHT_MSG_SYS_CALL_GET_TIME_FAILED,</div><div class='del'>-                        "Failed to get current time");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        time_in_past.tv_sec = current_time.tv_sec - time_in_past.tv_sec;</div><div class='del'>-</div><div class='del'>-        /* The migration daemon may run a varying numberof usec after the */</div><div class='del'>-        /* sleep call triggers. A file may be registered in CTR some number */</div><div class='del'>-        /* of usec X after the daemon started and missed in the subsequent */</div><div class='del'>-        /* cycle if the daemon starts Y usec after the period in seconds */</div><div class='del'>-        /* where Y&gt;X. Normalize away this problem by always setting usec */</div><div class='del'>-        /* to 0. */</div><div class='del'>-        time_in_past.tv_usec = 0;</div><div class='del'>-</div><div class='del'>-        gfdb_brick_info.time_stamp = &amp;time_in_past;</div><div class='del'>-        gfdb_brick_info._gfdb_promote = is_promotion;</div><div class='del'>-        gfdb_brick_info._query_cbk_args = query_cbk_args;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (local_brick, args-&gt;brick_list, list) {</div><div class='del'>-</div><div class='del'>-                /* Construct query file path for this brick</div><div class='del'>-                 * i.e</div><div class='del'>-                 * /var/run/gluster/xlator_name/</div><div class='del'>-                 * {promote/demote}-brickname-indexinbricklist</div><div class='del'>-                 * So that no two query files will have same path even</div><div class='del'>-                 * bricks have the same name</div><div class='del'>-                 * */</div><div class='del'>-                snprintf (local_brick-&gt;qfile_path, PATH_MAX , "%s-%s-%d",</div><div class='del'>-                        GET_QFILE_PATH (gfdb_brick_info._gfdb_promote),</div><div class='del'>-                        local_brick-&gt;brick_name, i);</div><div class='del'>-</div><div class='del'>-                /* Delete any old query files for this brick */</div><div class='del'>-                sys_unlink (local_brick-&gt;qfile_path);</div><div class='del'>-</div><div class='del'>-                ret = tier_process_brick (local_brick,</div><div class='del'>-                                          &amp;gfdb_brick_info);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (args-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_BRICK_QUERY_FAILED,</div><div class='del'>-                                "Brick %s query failed\n",</div><div class='del'>-                                local_brick-&gt;brick_db_path);</div><div class='del'>-                }</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    tier_brick_list_t *local_brick = NULL;</div><div class='add'>+    tier_brick_list_t *temp = NULL;</div><div class='add'>+    gfdb_time_t current_time = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ssize_t qfile_array_size = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int temp_fd = 0;</div><div class='add'>+    gf_tier_conf_t *tier_conf = NULL;</div><div class='add'>+</div><div class='add'>+    tier_conf = &amp;(query_cbk_args-&gt;defrag-&gt;tier_conf);</div><div class='add'>+</div><div class='add'>+    /* Time for error query files */</div><div class='add'>+    gettimeofday(&amp;current_time, NULL);</div><div class='add'>+</div><div class='add'>+    /* Build the qfile list */</div><div class='add'>+    list_for_each_entry_safe(local_brick, temp, comp-&gt;brick_list, list)</div><div class='add'>+    {</div><div class='add'>+        qfile_array_size++;</div><div class='add'>+    }</div><div class='add'>+    query_cbk_args-&gt;qfile_array = qfile_array_new(qfile_array_size);</div><div class='add'>+    if (!query_cbk_args-&gt;qfile_array) {</div><div class='add'>+        gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to create new "</div><div class='add'>+               "qfile_array");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Open all qfiles*/</div><div class='add'>+    count = 0;</div><div class='add'>+    query_cbk_args-&gt;qfile_array-&gt;exhausted_count = 0;</div><div class='add'>+    list_for_each_entry_safe(local_brick, temp, comp-&gt;brick_list, list)</div><div class='add'>+    {</div><div class='add'>+        temp_fd = query_cbk_args-&gt;qfile_array-&gt;fd_array[count];</div><div class='add'>+        temp_fd = open(local_brick-&gt;qfile_path, O_RDONLY,</div><div class='add'>+                       S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+        if (temp_fd &lt; 0) {</div><div class='add'>+            gf_msg("tier", GF_LOG_ERROR, errno, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "Failed to open "</div><div class='add'>+                   "%s to the query file",</div><div class='add'>+                   local_brick-&gt;qfile_path);</div><div class='add'>+            query_cbk_args-&gt;qfile_array-&gt;exhausted_count++;</div><div class='add'>+        }</div><div class='add'>+        query_cbk_args-&gt;qfile_array-&gt;fd_array[count] = temp_fd;</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Moving the query file index to the next, so that we won't the same</div><div class='add'>+     * query file every cycle as the first one */</div><div class='add'>+    query_cbk_args-&gt;qfile_array</div><div class='add'>+        -&gt;next_index = (query_cbk_args-&gt;is_promotion)</div><div class='add'>+                           ? tier_conf-&gt;last_promote_qfile_index</div><div class='add'>+                           : tier_conf-&gt;last_demote_qfile_index;</div><div class='add'>+    shift_next_index(query_cbk_args-&gt;qfile_array);</div><div class='add'>+    if (query_cbk_args-&gt;is_promotion) {</div><div class='add'>+        tier_conf-&gt;last_promote_qfile_index = query_cbk_args-&gt;qfile_array</div><div class='add'>+                                                  -&gt;next_index;</div><div class='add'>+    } else {</div><div class='add'>+        tier_conf-&gt;last_demote_qfile_index = query_cbk_args-&gt;qfile_array</div><div class='add'>+                                                 -&gt;next_index;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Migrate files using query file list */</div><div class='add'>+    ret = tier_migrate_using_query_file((void *)query_cbk_args);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    qfile_array_free(query_cbk_args-&gt;qfile_array);</div><div class='add'>+</div><div class='add'>+    /* If there is an error rename all the query files to .err files</div><div class='add'>+     * with a timestamp for better debugging */</div><div class='add'>+    if (ret) {</div><div class='add'>+        struct tm tm = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        char time_str[128] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        char query_file_path_err[PATH_MAX] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        int32_t len = 0;</div><div class='add'>+</div><div class='add'>+        /* Time format for error query files */</div><div class='add'>+        gmtime_r(&amp;current_time.tv_sec, &amp;tm);</div><div class='add'>+        strftime(time_str, sizeof(time_str), "%F-%T", &amp;tm);</div><div class='add'>+</div><div class='add'>+        list_for_each_entry_safe(local_brick, temp, comp-&gt;brick_list, list)</div><div class='add'>+        {</div><div class='add'>+            /* rename error qfile*/</div><div class='add'>+            len = snprintf(query_file_path_err, sizeof(query_file_path_err),</div><div class='add'>+                           "%s-%s.err", local_brick-&gt;qfile_path, time_str);</div><div class='add'>+            if ((len &gt;= 0) &amp;&amp; (len &lt; sizeof(query_file_path_err))) {</div><div class='add'>+                if (sys_rename(local_brick-&gt;qfile_path, query_file_path_err) ==</div><div class='add'>+                    -1)</div><div class='add'>+                    gf_msg_debug("tier", 0,</div><div class='add'>+                                 "rename "</div><div class='add'>+                                 "failed");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    query_cbk_args-&gt;qfile_array = NULL;</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-tier_migrate_files_using_qfile (migration_args_t *comp,</div><div class='del'>-                                query_cbk_args_t *query_cbk_args)</div><div class='add'>+int</div><div class='add'>+tier_demote(migration_args_t *demotion_args)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        tier_brick_list_t *local_brick          = NULL;</div><div class='del'>-        tier_brick_list_t *temp                 = NULL;</div><div class='del'>-        gfdb_time_t current_time                = {0,};</div><div class='del'>-        ssize_t qfile_array_size                = 0;</div><div class='del'>-        int count                               = 0;</div><div class='del'>-        int temp_fd                             = 0;</div><div class='del'>-        gf_tier_conf_t  *tier_conf              = NULL;</div><div class='del'>-</div><div class='del'>-        tier_conf = &amp;(query_cbk_args-&gt;defrag-&gt;tier_conf);</div><div class='del'>-</div><div class='del'>-        /* Time for error query files */</div><div class='del'>-        gettimeofday (&amp;current_time, NULL);</div><div class='del'>-</div><div class='del'>-        /* Build the qfile list */</div><div class='del'>-        list_for_each_entry_safe (local_brick, temp, comp-&gt;brick_list, list) {</div><div class='del'>-                qfile_array_size++;</div><div class='del'>-        }</div><div class='del'>-        query_cbk_args-&gt;qfile_array = qfile_array_new (qfile_array_size);</div><div class='del'>-        if (!query_cbk_args-&gt;qfile_array) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed to create new "</div><div class='del'>-                        "qfile_array");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Open all qfiles*/</div><div class='del'>-        count = 0;</div><div class='del'>-        query_cbk_args-&gt;qfile_array-&gt;exhausted_count = 0;</div><div class='del'>-        list_for_each_entry_safe (local_brick, temp, comp-&gt;brick_list, list) {</div><div class='del'>-                temp_fd = query_cbk_args-&gt;qfile_array-&gt;fd_array[count];</div><div class='del'>-                temp_fd = open (local_brick-&gt;qfile_path, O_RDONLY,</div><div class='del'>-                                S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-                if (temp_fd &lt; 0) {</div><div class='del'>-                        gf_msg ("tier", GF_LOG_ERROR, errno,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR, "Failed to open "</div><div class='del'>-                                "%s to the query file",</div><div class='del'>-                                local_brick-&gt;qfile_path);</div><div class='del'>-                        query_cbk_args-&gt;qfile_array-&gt;exhausted_count++;</div><div class='del'>-                }</div><div class='del'>-                query_cbk_args-&gt;qfile_array-&gt;fd_array[count] = temp_fd;</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Moving the query file index to the next, so that we won't the same</div><div class='del'>-         * query file every cycle as the first one */</div><div class='del'>-        query_cbk_args-&gt;qfile_array-&gt;next_index =</div><div class='del'>-                        (query_cbk_args-&gt;is_promotion) ?</div><div class='del'>-                        tier_conf-&gt;last_promote_qfile_index :</div><div class='del'>-                        tier_conf-&gt;last_demote_qfile_index;</div><div class='del'>-        shift_next_index (query_cbk_args-&gt;qfile_array);</div><div class='del'>-        if (query_cbk_args-&gt;is_promotion) {</div><div class='del'>-                tier_conf-&gt;last_promote_qfile_index =</div><div class='del'>-                        query_cbk_args-&gt;qfile_array-&gt;next_index;</div><div class='del'>-        } else {</div><div class='del'>-                tier_conf-&gt;last_demote_qfile_index =</div><div class='del'>-                        query_cbk_args-&gt;qfile_array-&gt;next_index;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Migrate files using query file list */</div><div class='del'>-        ret = tier_migrate_using_query_file ((void *)query_cbk_args);</div><div class='del'>-out:</div><div class='del'>-        qfile_array_free (query_cbk_args-&gt;qfile_array);</div><div class='del'>-</div><div class='del'>-        /* If there is an error rename all the query files to .err files</div><div class='del'>-         * with a timestamp for better debugging */</div><div class='del'>-        if (ret) {</div><div class='del'>-                struct tm tm                            = {0,};</div><div class='del'>-                char time_str[128]                      = {0,};</div><div class='del'>-                char query_file_path_err[PATH_MAX]      = {0,};</div><div class='del'>-                int32_t len                             = 0;</div><div class='del'>-</div><div class='del'>-                /* Time format for error query files */</div><div class='del'>-                gmtime_r (&amp;current_time.tv_sec, &amp;tm);</div><div class='del'>-                strftime (time_str, sizeof (time_str), "%F-%T", &amp;tm);</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (local_brick, temp, comp-&gt;brick_list,</div><div class='del'>-                                        list) {</div><div class='del'>-                        /* rename error qfile*/</div><div class='del'>-                        len = snprintf (query_file_path_err,</div><div class='del'>-                                        sizeof (query_file_path_err),</div><div class='del'>-                                        "%s-%s.err", local_brick-&gt;qfile_path,</div><div class='del'>-                                        time_str);</div><div class='del'>-                        if ((len &gt;= 0) &amp;&amp;</div><div class='del'>-                            (len &lt; sizeof(query_file_path_err))) {</div><div class='del'>-                                if (sys_rename (local_brick-&gt;qfile_path,</div><div class='del'>-                                                query_file_path_err) == -1)</div><div class='del'>-                                        gf_msg_debug ("tier", 0, "rename "</div><div class='del'>-                                                      "failed");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        query_cbk_args-&gt;qfile_array = NULL;</div><div class='add'>+    query_cbk_args_t query_cbk_args;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", demotion_args, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", demotion_args-&gt;this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(demotion_args-&gt;this-&gt;name, demotion_args-&gt;brick_list,</div><div class='add'>+                        out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(demotion_args-&gt;this-&gt;name, demotion_args-&gt;defrag, out);</div><div class='ctx'> </div><div class='add'>+    THIS = demotion_args-&gt;this;</div><div class='ctx'> </div><div class='add'>+    query_cbk_args.this = demotion_args-&gt;this;</div><div class='add'>+    query_cbk_args.defrag = demotion_args-&gt;defrag;</div><div class='add'>+    query_cbk_args.is_promotion = 0;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-tier_demote (migration_args_t *demotion_args)</div><div class='del'>-{</div><div class='del'>-        query_cbk_args_t query_cbk_args;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", demotion_args, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", demotion_args-&gt;this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (demotion_args-&gt;this-&gt;name,</div><div class='del'>-                             demotion_args-&gt;brick_list, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (demotion_args-&gt;this-&gt;name,</div><div class='del'>-                             demotion_args-&gt;defrag, out);</div><div class='del'>-</div><div class='del'>-        THIS = demotion_args-&gt;this;</div><div class='del'>-</div><div class='del'>-        query_cbk_args.this = demotion_args-&gt;this;</div><div class='del'>-        query_cbk_args.defrag = demotion_args-&gt;defrag;</div><div class='del'>-        query_cbk_args.is_promotion = 0;</div><div class='del'>-</div><div class='del'>-        /*Build the query file using bricklist*/</div><div class='del'>-        ret = tier_build_migration_qfile (demotion_args, &amp;query_cbk_args,</div><div class='del'>-                                          _gf_false);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /*Build the query file using bricklist*/</div><div class='add'>+    ret = tier_build_migration_qfile(demotion_args, &amp;query_cbk_args, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* Migrate files using the query file */</div><div class='del'>-        ret = tier_migrate_files_using_qfile (demotion_args,</div><div class='del'>-                                              &amp;query_cbk_args);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Migrate files using the query file */</div><div class='add'>+    ret = tier_migrate_files_using_qfile(demotion_args, &amp;query_cbk_args);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        demotion_args-&gt;return_value = ret;</div><div class='del'>-        return ret;</div><div class='add'>+    demotion_args-&gt;return_value = ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-tier_promote (migration_args_t *promotion_args)</div><div class='add'>+tier_promote(migration_args_t *promotion_args)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        query_cbk_args_t query_cbk_args;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    query_cbk_args_t query_cbk_args;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", promotion_args-&gt;this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (promotion_args-&gt;this-&gt;name,</div><div class='del'>-                             promotion_args-&gt;brick_list, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (promotion_args-&gt;this-&gt;name,</div><div class='del'>-                             promotion_args-&gt;defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", promotion_args-&gt;this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(promotion_args-&gt;this-&gt;name, promotion_args-&gt;brick_list,</div><div class='add'>+                        out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(promotion_args-&gt;this-&gt;name, promotion_args-&gt;defrag,</div><div class='add'>+                        out);</div><div class='ctx'> </div><div class='del'>-        THIS = promotion_args-&gt;this;</div><div class='add'>+    THIS = promotion_args-&gt;this;</div><div class='ctx'> </div><div class='del'>-        query_cbk_args.this = promotion_args-&gt;this;</div><div class='del'>-        query_cbk_args.defrag = promotion_args-&gt;defrag;</div><div class='del'>-        query_cbk_args.is_promotion = 1;</div><div class='add'>+    query_cbk_args.this = promotion_args-&gt;this;</div><div class='add'>+    query_cbk_args.defrag = promotion_args-&gt;defrag;</div><div class='add'>+    query_cbk_args.is_promotion = 1;</div><div class='ctx'> </div><div class='del'>-        /*Build the query file using bricklist*/</div><div class='del'>-        ret = tier_build_migration_qfile (promotion_args, &amp;query_cbk_args,</div><div class='del'>-                                          _gf_true);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /*Build the query file using bricklist*/</div><div class='add'>+    ret = tier_build_migration_qfile(promotion_args, &amp;query_cbk_args, _gf_true);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* Migrate files using the query file */</div><div class='del'>-        ret = tier_migrate_files_using_qfile (promotion_args, &amp;query_cbk_args);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Migrate files using the query file */</div><div class='add'>+    ret = tier_migrate_files_using_qfile(promotion_args, &amp;query_cbk_args);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        promotion_args-&gt;return_value = ret;</div><div class='del'>-        return ret;</div><div class='add'>+    promotion_args-&gt;return_value = ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Command the CTR on a brick to compact the local database using an IPC</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-tier_process_self_compact (tier_brick_list_t *local_brick, void *args)</div><div class='add'>+tier_process_self_compact(tier_brick_list_t *local_brick, void *args)</div><div class='ctx'> {</div><div class='del'>-        int ret                                         = -1;</div><div class='del'>-        char *db_path                                   = NULL;</div><div class='del'>-        query_cbk_args_t *query_cbk_args                = NULL;</div><div class='del'>-        xlator_t *this                                  = NULL;</div><div class='del'>-        gfdb_conn_node_t *conn_node                     = NULL;</div><div class='del'>-        dict_t *params_dict                             = NULL;</div><div class='del'>-        dict_t *ctr_ipc_dict                            = NULL;</div><div class='del'>-        gfdb_brick_info_t *gfdb_brick_info              = args;</div><div class='del'>-</div><div class='del'>-        /*Init of all the essentials*/</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", gfdb_brick_info , out);</div><div class='del'>-        query_cbk_args = gfdb_brick_info-&gt;_query_cbk_args;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", query_cbk_args-&gt;this, out);</div><div class='del'>-        this = query_cbk_args-&gt;this;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name,</div><div class='del'>-                             gfdb_brick_info-&gt;_query_cbk_args, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick-&gt;xlator, out);</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local_brick-&gt;brick_db_path, out);</div><div class='del'>-</div><div class='del'>-        db_path = local_brick-&gt;brick_db_path;</div><div class='del'>-</div><div class='del'>-        /*Preparing DB parameters before init_db i.e getting db connection*/</div><div class='del'>-        params_dict = dict_new ();</div><div class='del'>-        if (!params_dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "DB Params cannot initialized");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        SET_DB_PARAM_TO_DICT (this-&gt;name, params_dict,</div><div class='del'>-                             (char *) gfdb_methods.get_db_path_key(), db_path,</div><div class='del'>-                             ret, out);</div><div class='del'>-</div><div class='del'>-        /*Get the db connection*/</div><div class='del'>-        conn_node = gfdb_methods.init_db ((void *)params_dict,</div><div class='del'>-                                          dht_tier_db_type);</div><div class='del'>-        if (!conn_node) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "FATAL: Failed initializing db operations");</div><div class='del'>-                         goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>-        /*Preparing ctr_ipc_dict*/</div><div class='del'>-        ctr_ipc_dict = dict_new ();</div><div class='del'>-        if (!ctr_ipc_dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "ctr_ipc_dict cannot initialized");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (ctr_ipc_dict, "compact_active",</div><div class='del'>-                              query_cbk_args-&gt;defrag-&gt;</div><div class='del'>-                              tier_conf.compact_active);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_SET_PARAM_FAILED, "Failed to set %s "</div><div class='del'>-                        "to params dictionary",</div><div class='del'>-                        "compact_active");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (ctr_ipc_dict, "compact_mode_switched",</div><div class='del'>-                              query_cbk_args-&gt;defrag-&gt;</div><div class='del'>-                              tier_conf.compact_mode_switched);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                        LG_MSG_SET_PARAM_FAILED, "Failed to set %s "</div><div class='del'>-                        "to params dictionary",</div><div class='del'>-                        "compact_mode_switched");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        SET_DB_PARAM_TO_DICT(this-&gt;name, ctr_ipc_dict,</div><div class='del'>-                             GFDB_IPC_CTR_KEY, GFDB_IPC_CTR_SET_COMPACT_PRAGMA,</div><div class='del'>-                             ret, out);</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                "Starting Compaction IPC");</div><div class='del'>-</div><div class='del'>-        ret = syncop_ipc (local_brick-&gt;xlator, GF_IPC_TARGET_CTR, ctr_ipc_dict,</div><div class='del'>-                          NULL);</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                "Ending Compaction IPC");</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR, "Failed compaction "</div><div class='del'>-                        "on db %s error %d", local_brick-&gt;brick_db_path, ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                "SUCCESS: %s Compaction", local_brick-&gt;brick_name);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *db_path = NULL;</div><div class='add'>+    query_cbk_args_t *query_cbk_args = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gfdb_conn_node_t *conn_node = NULL;</div><div class='add'>+    dict_t *params_dict = NULL;</div><div class='add'>+    dict_t *ctr_ipc_dict = NULL;</div><div class='add'>+    gfdb_brick_info_t *gfdb_brick_info = args;</div><div class='add'>+</div><div class='add'>+    /*Init of all the essentials*/</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", gfdb_brick_info, out);</div><div class='add'>+    query_cbk_args = gfdb_brick_info-&gt;_query_cbk_args;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", query_cbk_args-&gt;this, out);</div><div class='add'>+    this = query_cbk_args-&gt;this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, gfdb_brick_info-&gt;_query_cbk_args, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick-&gt;xlator, out);</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local_brick-&gt;brick_db_path, out);</div><div class='add'>+</div><div class='add'>+    db_path = local_brick-&gt;brick_db_path;</div><div class='add'>+</div><div class='add'>+    /*Preparing DB parameters before init_db i.e getting db connection*/</div><div class='add'>+    params_dict = dict_new();</div><div class='add'>+    if (!params_dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "DB Params cannot initialized");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, params_dict,</div><div class='add'>+                         (char *)gfdb_methods.get_db_path_key(), db_path, ret,</div><div class='add'>+                         out);</div><div class='add'>+</div><div class='add'>+    /*Get the db connection*/</div><div class='add'>+    conn_node = gfdb_methods.init_db((void *)params_dict, dht_tier_db_type);</div><div class='add'>+    if (!conn_node) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "FATAL: Failed initializing db operations");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+    /*Preparing ctr_ipc_dict*/</div><div class='add'>+    ctr_ipc_dict = dict_new();</div><div class='add'>+    if (!ctr_ipc_dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "ctr_ipc_dict cannot initialized");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(ctr_ipc_dict, "compact_active",</div><div class='add'>+                         query_cbk_args-&gt;defrag-&gt;tier_conf.compact_active);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("tier", GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+               "Failed to set %s "</div><div class='add'>+               "to params dictionary",</div><div class='add'>+               "compact_active");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(</div><div class='add'>+        ctr_ipc_dict, "compact_mode_switched",</div><div class='add'>+        query_cbk_args-&gt;defrag-&gt;tier_conf.compact_mode_switched);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("tier", GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED,</div><div class='add'>+               "Failed to set %s "</div><div class='add'>+               "to params dictionary",</div><div class='add'>+               "compact_mode_switched");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, ctr_ipc_dict, GFDB_IPC_CTR_KEY,</div><div class='add'>+                         GFDB_IPC_CTR_SET_COMPACT_PRAGMA, ret, out);</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "Starting Compaction IPC");</div><div class='add'>+</div><div class='add'>+    ret = syncop_ipc(local_brick-&gt;xlator, GF_IPC_TARGET_CTR, ctr_ipc_dict,</div><div class='add'>+                     NULL);</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "Ending Compaction IPC");</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed compaction "</div><div class='add'>+               "on db %s error %d",</div><div class='add'>+               local_brick-&gt;brick_db_path, ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "SUCCESS: %s Compaction", local_brick-&gt;brick_name);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (params_dict) {</div><div class='del'>-                dict_unref (params_dict);</div><div class='del'>-                params_dict = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (params_dict) {</div><div class='add'>+        dict_unref(params_dict);</div><div class='add'>+        params_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ctr_ipc_dict) {</div><div class='del'>-                dict_unref (ctr_ipc_dict);</div><div class='del'>-                ctr_ipc_dict = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ctr_ipc_dict) {</div><div class='add'>+        dict_unref(ctr_ipc_dict);</div><div class='add'>+        ctr_ipc_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gfdb_methods.fini_db (conn_node);</div><div class='add'>+    gfdb_methods.fini_db(conn_node);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1995,403 +1856,366 @@ out:</div><div class='ctx'>  * function to prepare the compaction IPC.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-tier_compact_db_brick (tier_brick_list_t *local_brick, void *args)</div><div class='add'>+tier_compact_db_brick(tier_brick_list_t *local_brick, void *args)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", local_brick, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", local_brick, out);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", local_brick-&gt;xlator, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", local_brick-&gt;xlator, out);</div><div class='ctx'> </div><div class='del'>-        ret = tier_process_self_compact (local_brick, args);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("tier", GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Brick %s did not compact",</div><div class='del'>-                        local_brick-&gt;brick_name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = tier_process_self_compact(local_brick, args);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("tier", GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Brick %s did not compact", local_brick-&gt;brick_name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_send_compact (migration_args_t *args,</div><div class='del'>-                   query_cbk_args_t *query_cbk_args)</div><div class='add'>+tier_send_compact(migration_args_t *args, query_cbk_args_t *query_cbk_args)</div><div class='ctx'> {</div><div class='del'>-        gfdb_time_t               current_time;</div><div class='del'>-        gfdb_brick_info_t         gfdb_brick_info;</div><div class='del'>-        gfdb_time_t               time_in_past;</div><div class='del'>-        int                       ret = -1;</div><div class='del'>-        tier_brick_list_t         *local_brick = NULL;</div><div class='del'>-</div><div class='del'>-        time_in_past.tv_sec = args-&gt;freq_time;</div><div class='del'>-        time_in_past.tv_usec = 0;</div><div class='del'>-</div><div class='del'>-        ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (args-&gt;this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        DHT_MSG_SYS_CALL_GET_TIME_FAILED,</div><div class='del'>-                        "Failed to get current time");</div><div class='del'>-                goto out;</div><div class='add'>+    gfdb_time_t current_time;</div><div class='add'>+    gfdb_brick_info_t gfdb_brick_info;</div><div class='add'>+    gfdb_time_t time_in_past;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    tier_brick_list_t *local_brick = NULL;</div><div class='add'>+</div><div class='add'>+    time_in_past.tv_sec = args-&gt;freq_time;</div><div class='add'>+    time_in_past.tv_usec = 0;</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(args-&gt;this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               DHT_MSG_SYS_CALL_GET_TIME_FAILED, "Failed to get current time");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    time_in_past.tv_sec = current_time.tv_sec - time_in_past.tv_sec;</div><div class='add'>+</div><div class='add'>+    /* The migration daemon may run a varying numberof usec after the sleep</div><div class='add'>+       call triggers. A file may be registered in CTR some number of usec X</div><div class='add'>+       after the daemon started and missed in the subsequent cycle if the</div><div class='add'>+       daemon starts Y usec after the period in seconds where Y&gt;X. Normalize</div><div class='add'>+       away this problem by always setting usec to 0. */</div><div class='add'>+    time_in_past.tv_usec = 0;</div><div class='add'>+</div><div class='add'>+    gfdb_brick_info.time_stamp = &amp;time_in_past;</div><div class='add'>+</div><div class='add'>+    /* This is meant to say we are always compacting at this point */</div><div class='add'>+    /* We simply borrow the promotion flag to do this */</div><div class='add'>+    gfdb_brick_info._gfdb_promote = 1;</div><div class='add'>+</div><div class='add'>+    gfdb_brick_info._query_cbk_args = query_cbk_args;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(local_brick, args-&gt;brick_list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_msg(args-&gt;this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Start compaction for %s", local_brick-&gt;brick_name);</div><div class='add'>+</div><div class='add'>+        ret = tier_compact_db_brick(local_brick, &amp;gfdb_brick_info);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(args-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   DHT_MSG_BRICK_QUERY_FAILED, "Brick %s compaction failed\n",</div><div class='add'>+                   local_brick-&gt;brick_db_path);</div><div class='ctx'>         }</div><div class='del'>-        time_in_past.tv_sec = current_time.tv_sec - time_in_past.tv_sec;</div><div class='ctx'> </div><div class='del'>-        /* The migration daemon may run a varying numberof usec after the sleep</div><div class='del'>-           call triggers. A file may be registered in CTR some number of usec X</div><div class='del'>-           after the daemon started and missed in the subsequent cycle if the</div><div class='del'>-           daemon starts Y usec after the period in seconds where Y&gt;X. Normalize</div><div class='del'>-           away this problem by always setting usec to 0. */</div><div class='del'>-        time_in_past.tv_usec = 0;</div><div class='del'>-</div><div class='del'>-        gfdb_brick_info.time_stamp = &amp;time_in_past;</div><div class='del'>-</div><div class='del'>-        /* This is meant to say we are always compacting at this point */</div><div class='del'>-        /* We simply borrow the promotion flag to do this */</div><div class='del'>-        gfdb_brick_info._gfdb_promote = 1;</div><div class='add'>+        gf_msg(args-&gt;this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "End compaction for %s", local_brick-&gt;brick_name);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        gfdb_brick_info._query_cbk_args = query_cbk_args;</div><div class='add'>+static int</div><div class='add'>+tier_compact(void *args)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    query_cbk_args_t query_cbk_args;</div><div class='add'>+    migration_args_t *compaction_args = args;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", compaction_args-&gt;this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(compaction_args-&gt;this-&gt;name,</div><div class='add'>+                        compaction_args-&gt;brick_list, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(compaction_args-&gt;this-&gt;name, compaction_args-&gt;defrag,</div><div class='add'>+                        out);</div><div class='add'>+</div><div class='add'>+    THIS = compaction_args-&gt;this;</div><div class='add'>+</div><div class='add'>+    query_cbk_args.this = compaction_args-&gt;this;</div><div class='add'>+    query_cbk_args.defrag = compaction_args-&gt;defrag;</div><div class='add'>+    query_cbk_args.is_compaction = 1;</div><div class='add'>+</div><div class='add'>+    /* Send the compaction pragma out to all the bricks on the bricklist. */</div><div class='add'>+    /* tier_get_bricklist ensures all bricks on the list are local to */</div><div class='add'>+    /* this node. */</div><div class='add'>+    ret = tier_send_compact(compaction_args, &amp;query_cbk_args);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    compaction_args-&gt;return_value = ret;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (local_brick, args-&gt;brick_list, list) {</div><div class='add'>+static int</div><div class='add'>+tier_get_bricklist(xlator_t *xl, struct list_head *local_bricklist_head)</div><div class='add'>+{</div><div class='add'>+    xlator_list_t *child = NULL;</div><div class='add'>+    char *rv = NULL;</div><div class='add'>+    char *rh = NULL;</div><div class='add'>+    char *brickname = NULL;</div><div class='add'>+    char db_name[PATH_MAX] = "";</div><div class='add'>+    int ret = 0;</div><div class='add'>+    tier_brick_list_t *local_brick = NULL;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", xl, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", local_bricklist_head, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * This function obtains remote subvolumes and filters out only</div><div class='add'>+     * those running on the same node as the tier daemon.</div><div class='add'>+     */</div><div class='add'>+    if (strcmp(xl-&gt;type, "protocol/client") == 0) {</div><div class='add'>+        ret = dict_get_str(xl-&gt;options, "remote-host", &amp;rh);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                gf_msg (args-&gt;this-&gt;name, GF_LOG_TRACE, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Start compaction for %s",</div><div class='del'>-                        local_brick-&gt;brick_name);</div><div class='add'>+        if (gf_is_local_addr(rh)) {</div><div class='add'>+            local_brick = GF_CALLOC(1, sizeof(tier_brick_list_t),</div><div class='add'>+                                    gf_tier_mt_bricklist_t);</div><div class='add'>+            if (!local_brick) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ret = tier_compact_db_brick (local_brick,</div><div class='del'>-                                             &amp;gfdb_brick_info);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (args-&gt;this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_BRICK_QUERY_FAILED,</div><div class='del'>-                                "Brick %s compaction failed\n",</div><div class='del'>-                                local_brick-&gt;brick_db_path);</div><div class='del'>-                }</div><div class='add'>+            ret = dict_get_str(xl-&gt;options, "remote-subvolume", &amp;rv);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                gf_msg (args-&gt;this-&gt;name, GF_LOG_TRACE, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "End compaction for %s",</div><div class='del'>-                        local_brick-&gt;brick_name);</div><div class='add'>+            brickname = strrchr(rv, '/') + 1;</div><div class='add'>+            snprintf(db_name, sizeof(db_name), "%s.db", brickname);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+            local_brick-&gt;brick_db_path = GF_MALLOC(PATH_MAX, gf_common_mt_char);</div><div class='add'>+            if (!local_brick-&gt;brick_db_path) {</div><div class='add'>+                gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                       "Failed to allocate memory for"</div><div class='add'>+                       " bricklist.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-tier_compact (void *args)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        query_cbk_args_t query_cbk_args;</div><div class='del'>-        migration_args_t *compaction_args = args;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", compaction_args-&gt;this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (compaction_args-&gt;this-&gt;name,</div><div class='del'>-                             compaction_args-&gt;brick_list, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (compaction_args-&gt;this-&gt;name,</div><div class='del'>-                             compaction_args-&gt;defrag, out);</div><div class='del'>-</div><div class='del'>-        THIS = compaction_args-&gt;this;</div><div class='del'>-</div><div class='del'>-        query_cbk_args.this = compaction_args-&gt;this;</div><div class='del'>-        query_cbk_args.defrag = compaction_args-&gt;defrag;</div><div class='del'>-        query_cbk_args.is_compaction = 1;</div><div class='del'>-</div><div class='del'>-        /* Send the compaction pragma out to all the bricks on the bricklist. */</div><div class='del'>-        /* tier_get_bricklist ensures all bricks on the list are local to */</div><div class='del'>-        /* this node. */</div><div class='del'>-        ret = tier_send_compact (compaction_args, &amp;query_cbk_args);</div><div class='del'>-        if (ret)</div><div class='add'>+            len = snprintf(local_brick-&gt;brick_db_path, PATH_MAX, "%s/%s/%s", rv,</div><div class='add'>+                           GF_HIDDEN_PATH, db_name);</div><div class='add'>+            if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+                gf_msg("tier", GF_LOG_ERROR, EINVAL, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                       "DB path too long");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        compaction_args-&gt;return_value = ret;</div><div class='del'>-        return ret;</div><div class='del'>- }</div><div class='add'>+            local_brick-&gt;xlator = xl;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-tier_get_bricklist (xlator_t *xl, struct list_head *local_bricklist_head)</div><div class='del'>-{</div><div class='del'>-        xlator_list_t           *child = NULL;</div><div class='del'>-        char                    *rv        = NULL;</div><div class='del'>-        char                    *rh        = NULL;</div><div class='del'>-        char                    *brickname = NULL;</div><div class='del'>-        char                    db_name[PATH_MAX] = "";</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        tier_brick_list_t       *local_brick = NULL;</div><div class='del'>-        int32_t                 len = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", xl, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", local_bricklist_head, out);</div><div class='add'>+            snprintf(local_brick-&gt;brick_name, NAME_MAX, "%s", brickname);</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * This function obtains remote subvolumes and filters out only</div><div class='del'>-         * those running on the same node as the tier daemon.</div><div class='del'>-         */</div><div class='del'>-        if (strcmp(xl-&gt;type, "protocol/client") == 0) {</div><div class='del'>-                ret = dict_get_str (xl-&gt;options, "remote-host", &amp;rh);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (gf_is_local_addr (rh)) {</div><div class='del'>-</div><div class='del'>-                       local_brick = GF_CALLOC (1, sizeof(tier_brick_list_t),</div><div class='del'>-                                                gf_tier_mt_bricklist_t);</div><div class='del'>-                        if (!local_brick) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = dict_get_str (xl-&gt;options, "remote-subvolume",</div><div class='del'>-                                           &amp;rv);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        brickname = strrchr(rv, '/') + 1;</div><div class='del'>-                        snprintf(db_name, sizeof(db_name), "%s.db",</div><div class='del'>-                                 brickname);</div><div class='del'>-</div><div class='del'>-                        local_brick-&gt;brick_db_path =</div><div class='del'>-                                GF_MALLOC (PATH_MAX, gf_common_mt_char);</div><div class='del'>-                        if (!local_brick-&gt;brick_db_path) {</div><div class='del'>-                                gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                        "Failed to allocate memory for"</div><div class='del'>-                                        " bricklist.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        len = snprintf(local_brick-&gt;brick_db_path,</div><div class='del'>-                                       PATH_MAX, "%s/%s/%s", rv,</div><div class='del'>-                                       GF_HIDDEN_PATH, db_name);</div><div class='del'>-                        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                                gf_msg ("tier", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                        "DB path too long");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local_brick-&gt;xlator = xl;</div><div class='del'>-</div><div class='del'>-                        snprintf (local_brick-&gt;brick_name,</div><div class='del'>-                                NAME_MAX, "%s", brickname);</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;(local_brick-&gt;list),</div><div class='del'>-                                        local_bricklist_head);</div><div class='del'>-</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            list_add_tail(&amp;(local_brick-&gt;list), local_bricklist_head);</div><div class='add'>+</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (child = xl-&gt;children; child; child = child-&gt;next) {</div><div class='del'>-                ret = tier_get_bricklist (child-&gt;xlator, local_bricklist_head);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    for (child = xl-&gt;children; child; child = child-&gt;next) {</div><div class='add'>+        ret = tier_get_bricklist(child-&gt;xlator, local_bricklist_head);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                if (local_brick) {</div><div class='del'>-                        GF_FREE (local_brick-&gt;brick_db_path);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (local_brick);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (local_brick) {</div><div class='add'>+            GF_FREE(local_brick-&gt;brick_db_path);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(local_brick);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_get_freq_demote (gf_tier_conf_t *tier_conf)</div><div class='add'>+tier_get_freq_demote(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        if ((tier_conf-&gt;mode == TIER_MODE_WM) &amp;&amp;</div><div class='del'>-            (tier_conf-&gt;watermark_last == TIER_WM_HI))</div><div class='del'>-                return DEFAULT_DEMOTE_DEGRADED;</div><div class='del'>-        else</div><div class='del'>-                return tier_conf-&gt;tier_demote_frequency;</div><div class='add'>+    if ((tier_conf-&gt;mode == TIER_MODE_WM) &amp;&amp;</div><div class='add'>+        (tier_conf-&gt;watermark_last == TIER_WM_HI))</div><div class='add'>+        return DEFAULT_DEMOTE_DEGRADED;</div><div class='add'>+    else</div><div class='add'>+        return tier_conf-&gt;tier_demote_frequency;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_get_freq_promote (gf_tier_conf_t *tier_conf)</div><div class='add'>+tier_get_freq_promote(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        return tier_conf-&gt;tier_promote_frequency;</div><div class='add'>+    return tier_conf-&gt;tier_promote_frequency;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_get_freq_compact_hot (gf_tier_conf_t *tier_conf)</div><div class='add'>+tier_get_freq_compact_hot(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        return tier_conf-&gt;tier_compact_hot_frequency;</div><div class='add'>+    return tier_conf-&gt;tier_compact_hot_frequency;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_get_freq_compact_cold (gf_tier_conf_t *tier_conf)</div><div class='add'>+tier_get_freq_compact_cold(gf_tier_conf_t *tier_conf)</div><div class='ctx'> {</div><div class='del'>-        return tier_conf-&gt;tier_compact_cold_frequency;</div><div class='add'>+    return tier_conf-&gt;tier_compact_cold_frequency;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_check_demote (gfdb_time_t  current_time, int freq)</div><div class='add'>+tier_check_demote(gfdb_time_t current_time, int freq)</div><div class='ctx'> {</div><div class='del'>-        return ((current_time.tv_sec % freq) == 0) ?</div><div class='del'>-                _gf_true : _gf_false;</div><div class='add'>+    return ((current_time.tv_sec % freq) == 0) ? _gf_true : _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-tier_check_promote (gf_tier_conf_t   *tier_conf,</div><div class='del'>-                    gfdb_time_t  current_time,</div><div class='del'>-                    int freq)</div><div class='add'>+tier_check_promote(gf_tier_conf_t *tier_conf, gfdb_time_t current_time,</div><div class='add'>+                   int freq)</div><div class='ctx'> {</div><div class='del'>-        if ((tier_conf-&gt;mode == TIER_MODE_WM) &amp;&amp;</div><div class='del'>-            (tier_conf-&gt;watermark_last == TIER_WM_HI))</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if ((tier_conf-&gt;mode == TIER_MODE_WM) &amp;&amp;</div><div class='add'>+        (tier_conf-&gt;watermark_last == TIER_WM_HI))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        else</div><div class='del'>-                return ((current_time.tv_sec % freq) == 0) ?</div><div class='del'>-                        _gf_true : _gf_false;</div><div class='add'>+    else</div><div class='add'>+        return ((current_time.tv_sec % freq) == 0) ? _gf_true : _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-tier_check_compact (gf_tier_conf_t   *tier_conf,</div><div class='del'>-                    gfdb_time_t  current_time,</div><div class='del'>-                    int freq_compact)</div><div class='add'>+tier_check_compact(gf_tier_conf_t *tier_conf, gfdb_time_t current_time,</div><div class='add'>+                   int freq_compact)</div><div class='ctx'> {</div><div class='add'>+    if (!(tier_conf-&gt;compact_active || tier_conf-&gt;compact_mode_switched))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!(tier_conf-&gt;compact_active ||</div><div class='del'>-              tier_conf-&gt;compact_mode_switched))</div><div class='del'>-                return _gf_false;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        return ((current_time.tv_sec % freq_compact) == 0) ?</div><div class='del'>-                _gf_true : _gf_false;</div><div class='add'>+    return ((current_time.tv_sec % freq_compact) == 0) ? _gf_true : _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-clear_bricklist (struct list_head *brick_list)</div><div class='add'>+clear_bricklist(struct list_head *brick_list)</div><div class='ctx'> {</div><div class='del'>-        tier_brick_list_t  *local_brick      = NULL;</div><div class='del'>-        tier_brick_list_t  *temp             = NULL;</div><div class='add'>+    tier_brick_list_t *local_brick = NULL;</div><div class='add'>+    tier_brick_list_t *temp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty(brick_list)) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (local_brick, temp, brick_list, list) {</div><div class='del'>-                list_del (&amp;local_brick-&gt;list);</div><div class='del'>-                GF_FREE (local_brick-&gt;brick_db_path);</div><div class='del'>-                GF_FREE (local_brick);</div><div class='del'>-        }</div><div class='add'>+    if (list_empty(brick_list)) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(local_brick, temp, brick_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del(&amp;local_brick-&gt;list);</div><div class='add'>+        GF_FREE(local_brick-&gt;brick_db_path);</div><div class='add'>+        GF_FREE(local_brick);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-set_brick_list_qpath (struct list_head *brick_list, gf_boolean_t is_cold)</div><div class='add'>+set_brick_list_qpath(struct list_head *brick_list, gf_boolean_t is_cold)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        tier_brick_list_t *local_brick = NULL;</div><div class='del'>-        int i                          = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", brick_list, out);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (local_brick, brick_list, list) {</div><div class='del'>-</div><div class='del'>-                /* Construct query file path for this brick</div><div class='del'>-                 * i.e</div><div class='del'>-                 * /var/run/gluster/xlator_name/</div><div class='del'>-                 * {promote/demote}-brickname-indexinbricklist</div><div class='del'>-                 * So that no two query files will have same path even</div><div class='del'>-                 * bricks have the same name</div><div class='del'>-                 * */</div><div class='del'>-                snprintf (local_brick-&gt;qfile_path, PATH_MAX , "%s-%s-%d",</div><div class='del'>-                        GET_QFILE_PATH (is_cold),</div><div class='del'>-                        local_brick-&gt;brick_name, i);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+    tier_brick_list_t *local_brick = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", brick_list, out);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(local_brick, brick_list, list)</div><div class='add'>+    {</div><div class='add'>+        /* Construct query file path for this brick</div><div class='add'>+         * i.e</div><div class='add'>+         * /var/run/gluster/xlator_name/</div><div class='add'>+         * {promote/demote}-brickname-indexinbricklist</div><div class='add'>+         * So that no two query files will have same path even</div><div class='add'>+         * bricks have the same name</div><div class='add'>+         * */</div><div class='add'>+        snprintf(local_brick-&gt;qfile_path, PATH_MAX, "%s-%s-%d",</div><div class='add'>+                 GET_QFILE_PATH(is_cold), local_brick-&gt;brick_name, i);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-tier_prepare_compact (migration_args_t *args, gfdb_time_t current_time)</div><div class='add'>+tier_prepare_compact(migration_args_t *args, gfdb_time_t current_time)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        dht_conf_t *conf                        = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag                = NULL;</div><div class='del'>-        gf_tier_conf_t *tier_conf               = NULL;</div><div class='del'>-        gf_boolean_t is_hot_tier = args-&gt;is_hot_tier;</div><div class='del'>-        int freq = 0;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        const char *tier_type = is_hot_tier ? "hot" : "cold";</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    gf_tier_conf_t *tier_conf = NULL;</div><div class='add'>+    gf_boolean_t is_hot_tier = args-&gt;is_hot_tier;</div><div class='add'>+    int freq = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    const char *tier_type = is_hot_tier ? "hot" : "cold";</div><div class='ctx'> </div><div class='del'>-        this = args-&gt;this;</div><div class='add'>+    this = args-&gt;this;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='add'>+    tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='ctx'> </div><div class='del'>-        freq = is_hot_tier ? tier_get_freq_compact_hot (tier_conf) :</div><div class='del'>-                tier_get_freq_compact_cold (tier_conf);</div><div class='add'>+    freq = is_hot_tier ? tier_get_freq_compact_hot(tier_conf)</div><div class='add'>+                       : tier_get_freq_compact_cold(tier_conf);</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.compact_mode_switched = is_hot_tier ?</div><div class='del'>-                defrag-&gt;tier_conf.compact_mode_switched_hot :</div><div class='del'>-                defrag-&gt;tier_conf.compact_mode_switched_cold;</div><div class='add'>+    defrag-&gt;tier_conf.compact_mode_switched =</div><div class='add'>+        is_hot_tier ? defrag-&gt;tier_conf.compact_mode_switched_hot</div><div class='add'>+                    : defrag-&gt;tier_conf.compact_mode_switched_cold;</div><div class='ctx'> </div><div class='del'>-        gf_msg(this-&gt;name, GF_LOG_TRACE, 0,</div><div class='del'>-               DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-               "Compact mode %i",</div><div class='del'>-               defrag-&gt;tier_conf.compact_mode_switched);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_TRACE, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "Compact mode %i", defrag-&gt;tier_conf.compact_mode_switched);</div><div class='ctx'> </div><div class='del'>-        if (tier_check_compact (tier_conf, current_time,</div><div class='del'>-                                freq)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "Start compaction on %s tier",</div><div class='del'>-                        tier_type);</div><div class='add'>+    if (tier_check_compact(tier_conf, current_time, freq)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "Start compaction on %s tier", tier_type);</div><div class='ctx'> </div><div class='del'>-                args-&gt;freq_time = freq;</div><div class='del'>-                ret = tier_compact (args);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR, "Compaction failed on "</div><div class='del'>-                                "%s tier", tier_type);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        args-&gt;freq_time = freq;</div><div class='add'>+        ret = tier_compact(args);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "Compaction failed on "</div><div class='add'>+                   "%s tier",</div><div class='add'>+                   tier_type);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                        "End compaction on %s tier", tier_type);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+               "End compaction on %s tier", tier_type);</div><div class='ctx'> </div><div class='del'>-                if (is_hot_tier) {</div><div class='del'>-                        defrag-&gt;tier_conf.compact_mode_switched_hot =</div><div class='del'>-                                _gf_false;</div><div class='del'>-                } else {</div><div class='del'>-                        defrag-&gt;tier_conf.compact_mode_switched_cold =</div><div class='del'>-                                _gf_false;</div><div class='del'>-                }</div><div class='add'>+        if (is_hot_tier) {</div><div class='add'>+            defrag-&gt;tier_conf.compact_mode_switched_hot = _gf_false;</div><div class='add'>+        } else {</div><div class='add'>+            defrag-&gt;tier_conf.compact_mode_switched_cold = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> tier_get_wm_interval(tier_mode_t mode, tier_watermark_op_t wm)</div><div class='ctx'> {</div><div class='del'>-        if (mode == TIER_MODE_WM &amp;&amp; wm == TIER_WM_HI)</div><div class='del'>-                return WM_INTERVAL_EMERG;</div><div class='add'>+    if (mode == TIER_MODE_WM &amp;&amp; wm == TIER_WM_HI)</div><div class='add'>+        return WM_INTERVAL_EMERG;</div><div class='ctx'> </div><div class='del'>-        return WM_INTERVAL;</div><div class='add'>+    return WM_INTERVAL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -2402,941 +2226,863 @@ tier_get_wm_interval(tier_mode_t mode, tier_watermark_op_t wm)</div><div class='ctx'>  * 1. Check trigger to migrate data.</div><div class='ctx'>  * 2. Check for state changes (pause, unpause, stop).</div><div class='ctx'>  */</div><div class='del'>-static void</div><div class='del'>-*tier_run (void *in_args)</div><div class='add'>+static void *</div><div class='add'>+tier_run(void *in_args)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t *conf                        = NULL;</div><div class='del'>-        gfdb_time_t  current_time               = { 0 };</div><div class='del'>-        int freq                                = 0;</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        xlator_t *any                           = NULL;</div><div class='del'>-        xlator_t *xlator                        = NULL;</div><div class='del'>-        gf_tier_conf_t *tier_conf               = NULL;</div><div class='del'>-        loc_t root_loc                          = { 0 };</div><div class='del'>-        int check_watermark                     = 0;</div><div class='del'>-        gf_defrag_info_t *defrag                = NULL;</div><div class='del'>-        xlator_t  *this                         = NULL;</div><div class='del'>-        migration_args_t *args = in_args;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", args, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", args-&gt;brick_list, out);</div><div class='del'>-</div><div class='del'>-        this = args-&gt;this;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='del'>-</div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", conf, out);</div><div class='del'>-</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", defrag, out);</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gfdb_time_t current_time = {0};</div><div class='add'>+    int freq = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *any = NULL;</div><div class='add'>+    xlator_t *xlator = NULL;</div><div class='add'>+    gf_tier_conf_t *tier_conf = NULL;</div><div class='add'>+    loc_t root_loc = {0};</div><div class='add'>+    int check_watermark = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    migration_args_t *args = in_args;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", args, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", args-&gt;brick_list, out);</div><div class='add'>+</div><div class='add'>+    this = args-&gt;this;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", conf, out);</div><div class='add'>+</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", defrag, out);</div><div class='add'>+</div><div class='add'>+    if (list_empty(args-&gt;brick_list)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Brick list for tier is empty. Exiting.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    defrag-&gt;defrag_status = GF_DEFRAG_STATUS_STARTED;</div><div class='add'>+    tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='add'>+</div><div class='add'>+    dht_build_root_loc(defrag-&gt;root_inode, &amp;root_loc);</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        /*</div><div class='add'>+         * Check if a graph switch occurred. If so, stop migration</div><div class='add'>+         * thread. It will need to be restarted manually.</div><div class='add'>+         */</div><div class='add'>+        any = THIS-&gt;ctx-&gt;active-&gt;first;</div><div class='add'>+        xlator = xlator_search_by_name(any, this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (list_empty (args-&gt;brick_list)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Brick list for tier is empty. Exiting.");</div><div class='del'>-                goto out;</div><div class='add'>+        if (xlator != this) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                   "Detected graph switch. Exiting migration "</div><div class='add'>+                   "daemon.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_STARTED;</div><div class='del'>-        tier_conf = &amp;defrag-&gt;tier_conf;</div><div class='del'>-</div><div class='del'>-        dht_build_root_loc (defrag-&gt;root_inode, &amp;root_loc);</div><div class='add'>+        gf_defrag_check_pause_tier(tier_conf);</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='add'>+        sleep(1);</div><div class='ctx'> </div><div class='del'>-                /*</div><div class='del'>-                 * Check if a graph switch occurred. If so, stop migration</div><div class='del'>-                 * thread. It will need to be restarted manually.</div><div class='del'>-                 */</div><div class='del'>-                any = THIS-&gt;ctx-&gt;active-&gt;first;</div><div class='del'>-                xlator = xlator_search_by_name (any, this-&gt;name);</div><div class='del'>-</div><div class='del'>-                if (xlator != this) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                "Detected graph switch. Exiting migration "</div><div class='del'>-                                "daemon.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='add'>+            ret = 1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "defrag-&gt;defrag_status != "</div><div class='add'>+                   "GF_DEFRAG_STATUS_STARTED");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_defrag_check_pause_tier (tier_conf);</div><div class='add'>+        if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='add'>+            defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            defrag-&gt;defrag_status = GF_DEFRAG_STATUS_COMPLETE;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                   "defrag-&gt;defrag_cmd == "</div><div class='add'>+                   "GF_DEFRAG_CMD_START_DETACH_TIER");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                sleep(1);</div><div class='add'>+        if (gf_defrag_get_pause_state(&amp;defrag-&gt;tier_conf) != TIER_RUNNING)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (defrag-&gt;defrag_status != GF_DEFRAG_STATUS_STARTED) {</div><div class='del'>-                        ret = 1;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "defrag-&gt;defrag_status != "</div><div class='del'>-                                "GF_DEFRAG_STATUS_STARTED");</div><div class='del'>-                        goto out;</div><div class='add'>+        /* To have proper synchronization amongst all</div><div class='add'>+         * brick holding nodes, so that promotion and demotions</div><div class='add'>+         * start atomically w.r.t promotion/demotion frequency</div><div class='add'>+         * period, all nodes should have their system time</div><div class='add'>+         * in-sync with each other either manually set or</div><div class='add'>+         * using a NTP server*/</div><div class='add'>+        ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   DHT_MSG_SYS_CALL_GET_TIME_FAILED,</div><div class='add'>+                   "Failed to get current time");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        check_watermark++;</div><div class='add'>+</div><div class='add'>+        /* emergency demotion requires frequent watermark monitoring */</div><div class='add'>+        if (check_watermark &gt;=</div><div class='add'>+            tier_get_wm_interval(tier_conf-&gt;mode, tier_conf-&gt;watermark_last)) {</div><div class='add'>+            check_watermark = 0;</div><div class='add'>+            if (tier_conf-&gt;mode == TIER_MODE_WM) {</div><div class='add'>+                ret = tier_get_fs_stat(this, &amp;root_loc);</div><div class='add'>+                if (ret != 0) {</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                if (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER ||</div><div class='del'>-                    defrag-&gt;cmd == GF_DEFRAG_CMD_DETACH_START) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        defrag-&gt;defrag_status =</div><div class='del'>-                                GF_DEFRAG_STATUS_COMPLETE;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                "defrag-&gt;defrag_cmd == "</div><div class='del'>-                                "GF_DEFRAG_CMD_START_DETACH_TIER");</div><div class='del'>-                        goto out;</div><div class='add'>+                ret = tier_check_watermark(this);</div><div class='add'>+                if (ret != 0) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='add'>+                           DHT_MSG_LOG_TIER_ERROR, "Failed to get watermark");</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (gf_defrag_get_pause_state (&amp;defrag-&gt;tier_conf) !=</div><div class='del'>-                    TIER_RUNNING)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* To have proper synchronization amongst all</div><div class='del'>-                 * brick holding nodes, so that promotion and demotions</div><div class='del'>-                 * start atomically w.r.t promotion/demotion frequency</div><div class='del'>-                 * period, all nodes should have their system time</div><div class='del'>-                 * in-sync with each other either manually set or</div><div class='del'>-                 * using a NTP server*/</div><div class='del'>-                ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                DHT_MSG_SYS_CALL_GET_TIME_FAILED,</div><div class='del'>-                                "Failed to get current time");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (args-&gt;is_promotion) {</div><div class='add'>+            freq = tier_get_freq_promote(tier_conf);</div><div class='ctx'> </div><div class='del'>-                check_watermark++;</div><div class='del'>-</div><div class='del'>-                /* emergency demotion requires frequent watermark monitoring */</div><div class='del'>-                if (check_watermark &gt;=</div><div class='del'>-                        tier_get_wm_interval(tier_conf-&gt;mode,</div><div class='del'>-                                             tier_conf-&gt;watermark_last)) {</div><div class='del'>-                        check_watermark = 0;</div><div class='del'>-                        if (tier_conf-&gt;mode == TIER_MODE_WM) {</div><div class='del'>-                                ret = tier_get_fs_stat (this, &amp;root_loc);</div><div class='del'>-                                if (ret != 0) {</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                                ret = tier_check_watermark (this);</div><div class='del'>-                                if (ret != 0) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_CRITICAL, errno,</div><div class='del'>-                                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                                "Failed to get watermark");</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            if (tier_check_promote(tier_conf, current_time, freq)) {</div><div class='add'>+                args-&gt;freq_time = freq;</div><div class='add'>+                ret = tier_promote(args);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                           "Promotion failed");</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        } else if (args-&gt;is_compaction) {</div><div class='add'>+            tier_prepare_compact(args, current_time);</div><div class='add'>+        } else {</div><div class='add'>+            freq = tier_get_freq_demote(tier_conf);</div><div class='ctx'> </div><div class='del'>-                if (args-&gt;is_promotion) {</div><div class='del'>-                        freq = tier_get_freq_promote (tier_conf);</div><div class='del'>-</div><div class='del'>-                        if (tier_check_promote (tier_conf, current_time, freq)) {</div><div class='del'>-                                args-&gt;freq_time = freq;</div><div class='del'>-                                ret = tier_promote (args);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                                "Promotion failed");</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                } else if (args-&gt;is_compaction) {</div><div class='del'>-                        tier_prepare_compact (args, current_time);</div><div class='del'>-                } else {</div><div class='del'>-                        freq = tier_get_freq_demote (tier_conf);</div><div class='del'>-</div><div class='del'>-                        if (tier_check_demote (current_time, freq)) {</div><div class='del'>-                                args-&gt;freq_time = freq;</div><div class='del'>-                                ret = tier_demote (args);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name,</div><div class='del'>-                                                GF_LOG_ERROR,</div><div class='del'>-                                                0,</div><div class='del'>-                                                DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                                "Demotion failed");</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            if (tier_check_demote(current_time, freq)) {</div><div class='add'>+                args-&gt;freq_time = freq;</div><div class='add'>+                ret = tier_demote(args);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                           "Demotion failed");</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                /* Check the statfs immediately after the processing threads</div><div class='del'>-                   return */</div><div class='del'>-                check_watermark = WM_INTERVAL;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        /* Check the statfs immediately after the processing threads</div><div class='add'>+           return */</div><div class='add'>+        check_watermark = WM_INTERVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        args-&gt;return_value = ret;</div><div class='add'>+    args-&gt;return_value = ret;</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_start (xlator_t *this, gf_defrag_info_t *defrag)</div><div class='add'>+tier_start(xlator_t *this, gf_defrag_info_t *defrag)</div><div class='ctx'> {</div><div class='del'>-        pthread_t promote_thread;</div><div class='del'>-        pthread_t demote_thread;</div><div class='del'>-        pthread_t hot_compact_thread;</div><div class='del'>-        pthread_t cold_compact_thread;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        struct list_head bricklist_hot          = { 0 };</div><div class='del'>-        struct list_head bricklist_cold         = { 0 };</div><div class='del'>-        migration_args_t promotion_args         = { 0 };</div><div class='del'>-        migration_args_t demotion_args          = { 0 };</div><div class='del'>-        migration_args_t hot_compaction_args    = { 0 };</div><div class='del'>-        migration_args_t cold_compaction_args   = { 0 };</div><div class='del'>-        dht_conf_t *conf                        = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD ((&amp;bricklist_hot));</div><div class='del'>-        INIT_LIST_HEAD ((&amp;bricklist_cold));</div><div class='del'>-</div><div class='del'>-        conf   = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        tier_get_bricklist (conf-&gt;subvolumes[1], &amp;bricklist_hot);</div><div class='del'>-        set_brick_list_qpath (&amp;bricklist_hot, _gf_false);</div><div class='del'>-</div><div class='del'>-        demotion_args.this = this;</div><div class='del'>-        demotion_args.brick_list = &amp;bricklist_hot;</div><div class='del'>-        demotion_args.defrag = defrag;</div><div class='del'>-        demotion_args.is_promotion = _gf_false;</div><div class='del'>-        demotion_args.is_compaction = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;demote_thread,</div><div class='del'>-                                NULL, &amp;tier_run, &amp;demotion_args, "tierdem");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to start demotion thread.");</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                goto cleanup;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tier_get_bricklist (conf-&gt;subvolumes[0], &amp;bricklist_cold);</div><div class='del'>-        set_brick_list_qpath (&amp;bricklist_cold, _gf_true);</div><div class='del'>-</div><div class='del'>-        promotion_args.this = this;</div><div class='del'>-        promotion_args.brick_list = &amp;bricklist_cold;</div><div class='del'>-        promotion_args.defrag = defrag;</div><div class='del'>-        promotion_args.is_promotion = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;promote_thread, NULL, &amp;tier_run,</div><div class='del'>-                                &amp;promotion_args, "tierpro");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to start promotion thread.");</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                goto waitforspawned;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hot_compaction_args.this = this;</div><div class='del'>-        hot_compaction_args.brick_list = &amp;bricklist_hot;</div><div class='del'>-        hot_compaction_args.defrag = defrag;</div><div class='del'>-        hot_compaction_args.is_promotion = _gf_false;</div><div class='del'>-        hot_compaction_args.is_compaction = _gf_true;</div><div class='del'>-        hot_compaction_args.is_hot_tier = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;hot_compact_thread, NULL, &amp;tier_run,</div><div class='del'>-                                &amp;hot_compaction_args, "tierhcom");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to start compaction thread.");</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                goto waitforspawnedpromote;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cold_compaction_args.this = this;</div><div class='del'>-        cold_compaction_args.brick_list = &amp;bricklist_cold;</div><div class='del'>-        cold_compaction_args.defrag = defrag;</div><div class='del'>-        cold_compaction_args.is_promotion = _gf_false;</div><div class='del'>-        cold_compaction_args.is_compaction = _gf_true;</div><div class='del'>-        cold_compaction_args.is_hot_tier = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;cold_compact_thread, NULL, &amp;tier_run,</div><div class='del'>-                                &amp;cold_compaction_args, "tierccom");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Failed to start compaction thread.");</div><div class='del'>-                defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='del'>-                goto waitforspawnedhotcompact;</div><div class='del'>-        }</div><div class='del'>-        pthread_join (cold_compact_thread, NULL);</div><div class='add'>+    pthread_t promote_thread;</div><div class='add'>+    pthread_t demote_thread;</div><div class='add'>+    pthread_t hot_compact_thread;</div><div class='add'>+    pthread_t cold_compact_thread;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct list_head bricklist_hot = {0};</div><div class='add'>+    struct list_head bricklist_cold = {0};</div><div class='add'>+    migration_args_t promotion_args = {0};</div><div class='add'>+    migration_args_t demotion_args = {0};</div><div class='add'>+    migration_args_t hot_compaction_args = {0};</div><div class='add'>+    migration_args_t cold_compaction_args = {0};</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD((&amp;bricklist_hot));</div><div class='add'>+    INIT_LIST_HEAD((&amp;bricklist_cold));</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    tier_get_bricklist(conf-&gt;subvolumes[1], &amp;bricklist_hot);</div><div class='add'>+    set_brick_list_qpath(&amp;bricklist_hot, _gf_false);</div><div class='add'>+</div><div class='add'>+    demotion_args.this = this;</div><div class='add'>+    demotion_args.brick_list = &amp;bricklist_hot;</div><div class='add'>+    demotion_args.defrag = defrag;</div><div class='add'>+    demotion_args.is_promotion = _gf_false;</div><div class='add'>+    demotion_args.is_compaction = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;demote_thread, NULL, &amp;tier_run, &amp;demotion_args,</div><div class='add'>+                           "tierdem");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to start demotion thread.");</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+        goto cleanup;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tier_get_bricklist(conf-&gt;subvolumes[0], &amp;bricklist_cold);</div><div class='add'>+    set_brick_list_qpath(&amp;bricklist_cold, _gf_true);</div><div class='add'>+</div><div class='add'>+    promotion_args.this = this;</div><div class='add'>+    promotion_args.brick_list = &amp;bricklist_cold;</div><div class='add'>+    promotion_args.defrag = defrag;</div><div class='add'>+    promotion_args.is_promotion = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;promote_thread, NULL, &amp;tier_run, &amp;promotion_args,</div><div class='add'>+                           "tierpro");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to start promotion thread.");</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+        goto waitforspawned;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hot_compaction_args.this = this;</div><div class='add'>+    hot_compaction_args.brick_list = &amp;bricklist_hot;</div><div class='add'>+    hot_compaction_args.defrag = defrag;</div><div class='add'>+    hot_compaction_args.is_promotion = _gf_false;</div><div class='add'>+    hot_compaction_args.is_compaction = _gf_true;</div><div class='add'>+    hot_compaction_args.is_hot_tier = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;hot_compact_thread, NULL, &amp;tier_run,</div><div class='add'>+                           &amp;hot_compaction_args, "tierhcom");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to start compaction thread.");</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+        goto waitforspawnedpromote;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    cold_compaction_args.this = this;</div><div class='add'>+    cold_compaction_args.brick_list = &amp;bricklist_cold;</div><div class='add'>+    cold_compaction_args.defrag = defrag;</div><div class='add'>+    cold_compaction_args.is_promotion = _gf_false;</div><div class='add'>+    cold_compaction_args.is_compaction = _gf_true;</div><div class='add'>+    cold_compaction_args.is_hot_tier = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;cold_compact_thread, NULL, &amp;tier_run,</div><div class='add'>+                           &amp;cold_compaction_args, "tierccom");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Failed to start compaction thread.");</div><div class='add'>+        defrag-&gt;defrag_status = GF_DEFRAG_STATUS_FAILED;</div><div class='add'>+        goto waitforspawnedhotcompact;</div><div class='add'>+    }</div><div class='add'>+    pthread_join(cold_compact_thread, NULL);</div><div class='ctx'> </div><div class='ctx'> waitforspawnedhotcompact:</div><div class='del'>-        pthread_join (hot_compact_thread, NULL);</div><div class='add'>+    pthread_join(hot_compact_thread, NULL);</div><div class='ctx'> </div><div class='ctx'> waitforspawnedpromote:</div><div class='del'>-        pthread_join (promote_thread, NULL);</div><div class='add'>+    pthread_join(promote_thread, NULL);</div><div class='ctx'> </div><div class='ctx'> waitforspawned:</div><div class='del'>-        pthread_join (demote_thread, NULL);</div><div class='add'>+    pthread_join(demote_thread, NULL);</div><div class='ctx'> </div><div class='ctx'> cleanup:</div><div class='del'>-        clear_bricklist (&amp;bricklist_cold);</div><div class='del'>-        clear_bricklist (&amp;bricklist_hot);</div><div class='del'>-        return ret;</div><div class='add'>+    clear_bricklist(&amp;bricklist_cold);</div><div class='add'>+    clear_bricklist(&amp;bricklist_hot);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-tier_migration_needed (xlator_t *this)</div><div class='add'>+tier_migration_needed(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_info_t        *defrag = NULL;</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='del'>-        int                      ret = 0;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf-&gt;defrag, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf-&gt;defrag, out);</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        if ((defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) ||</div><div class='del'>-            (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER))</div><div class='del'>-                ret = 1;</div><div class='add'>+    if ((defrag-&gt;cmd == GF_DEFRAG_CMD_START_TIER) ||</div><div class='add'>+        (defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER))</div><div class='add'>+        ret = 1;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-tier_migration_get_dst (xlator_t *this, dht_local_t *local)</div><div class='add'>+tier_migration_get_dst(xlator_t *this, dht_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='del'>-        int32_t                  ret = -1;</div><div class='del'>-        gf_defrag_info_t        *defrag = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        if (defrag &amp;&amp; defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER) {</div><div class='del'>-                local-&gt;rebalance.target_node = conf-&gt;subvolumes[0];</div><div class='add'>+    if (defrag &amp;&amp; defrag-&gt;cmd == GF_DEFRAG_CMD_START_DETACH_TIER) {</div><div class='add'>+        local-&gt;rebalance.target_node = conf-&gt;subvolumes[0];</div><div class='ctx'> </div><div class='del'>-        } else if (conf-&gt;subvolumes[0] == local-&gt;cached_subvol)</div><div class='del'>-                local-&gt;rebalance.target_node =</div><div class='del'>-                        conf-&gt;subvolumes[1];</div><div class='del'>-        else</div><div class='del'>-                local-&gt;rebalance.target_node =</div><div class='del'>-                        conf-&gt;subvolumes[0];</div><div class='add'>+    } else if (conf-&gt;subvolumes[0] == local-&gt;cached_subvol)</div><div class='add'>+        local-&gt;rebalance.target_node = conf-&gt;subvolumes[1];</div><div class='add'>+    else</div><div class='add'>+        local-&gt;rebalance.target_node = conf-&gt;subvolumes[0];</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;rebalance.target_node)</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (local-&gt;rebalance.target_node)</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-tier_search (xlator_t *this, dht_layout_t *layout, const char *name)</div><div class='add'>+tier_search(xlator_t *this, dht_layout_t *layout, const char *name)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *subvol = NULL;</div><div class='del'>-        dht_conf_t              *conf   = NULL;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        subvol = TIER_HASHED_SUBVOL;</div><div class='add'>+    subvol = TIER_HASHED_SUBVOL;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return subvol;</div><div class='add'>+out:</div><div class='add'>+    return subvol;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-tier_load_externals (xlator_t *this)</div><div class='add'>+tier_load_externals(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret            = -1;</div><div class='del'>-        char *libpathfull = (LIBDIR "/libgfdb.so.0");</div><div class='del'>-        get_gfdb_methods_t get_gfdb_methods;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *libpathfull = (LIBDIR "/libgfdb.so.0");</div><div class='add'>+    get_gfdb_methods_t get_gfdb_methods;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("this", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("this", this, out);</div><div class='ctx'> </div><div class='del'>-        libhandle = dlopen (libpathfull, RTLD_NOW);</div><div class='del'>-        if (!libhandle) {</div><div class='del'>-                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                       DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                       "Error loading libgfdb.so %s\n", dlerror());</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    libhandle = dlopen(libpathfull, RTLD_NOW);</div><div class='add'>+    if (!libhandle) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Error loading libgfdb.so %s\n", dlerror());</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        get_gfdb_methods = dlsym (libhandle, "get_gfdb_methods");</div><div class='del'>-        if (!get_gfdb_methods) {</div><div class='del'>-                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                       DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                       "Error loading get_gfdb_methods()");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    get_gfdb_methods = dlsym(libhandle, "get_gfdb_methods");</div><div class='add'>+    if (!get_gfdb_methods) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Error loading get_gfdb_methods()");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        get_gfdb_methods (&amp;gfdb_methods);</div><div class='add'>+    get_gfdb_methods(&amp;gfdb_methods);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; libhandle)</div><div class='del'>-                dlclose (libhandle);</div><div class='add'>+    if (ret &amp;&amp; libhandle)</div><div class='add'>+        dlclose(libhandle);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static tier_mode_t</div><div class='del'>-tier_validate_mode (char *mode)</div><div class='add'>+tier_validate_mode(char *mode)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (strcmp (mode, "test") == 0) {</div><div class='del'>-                ret = TIER_MODE_TEST;</div><div class='del'>-        } else {</div><div class='del'>-                ret = TIER_MODE_WM;</div><div class='del'>-        }</div><div class='add'>+    if (strcmp(mode, "test") == 0) {</div><div class='add'>+        ret = TIER_MODE_TEST;</div><div class='add'>+    } else {</div><div class='add'>+        ret = TIER_MODE_WM;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-tier_validate_compact_mode (char *mode)</div><div class='add'>+tier_validate_compact_mode(char *mode)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t ret = _gf_false;</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='ctx'> </div><div class='del'>-        gf_msg ("tier", GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                "tier_validate_compact_mode: mode = %s", mode);</div><div class='add'>+    gf_msg("tier", GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "tier_validate_compact_mode: mode = %s", mode);</div><div class='ctx'> </div><div class='del'>-        if (!strcmp (mode, "on")) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-        } else {</div><div class='del'>-                ret = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if (!strcmp(mode, "on")) {</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+    } else {</div><div class='add'>+        ret = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg ("tier", GF_LOG_ERROR, 0,</div><div class='del'>-                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                "tier_validate_compact_mode: ret = %i", ret);</div><div class='add'>+    gf_msg("tier", GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "tier_validate_compact_mode: ret = %i", ret);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_init_methods (xlator_t *this)</div><div class='add'>+tier_init_methods(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret                  = -1;</div><div class='del'>-        dht_conf_t      *conf    = NULL;</div><div class='del'>-        dht_methods_t   *methods = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    dht_methods_t *methods = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("tier", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("tier", this, err);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        methods = &amp;(conf-&gt;methods);</div><div class='add'>+    methods = &amp;(conf-&gt;methods);</div><div class='ctx'> </div><div class='del'>-        methods-&gt;migration_get_dst_subvol = tier_migration_get_dst;</div><div class='del'>-        methods-&gt;migration_other   = tier_start;</div><div class='del'>-        methods-&gt;migration_needed  = tier_migration_needed;</div><div class='del'>-        methods-&gt;layout_search     = tier_search;</div><div class='add'>+    methods-&gt;migration_get_dst_subvol = tier_migration_get_dst;</div><div class='add'>+    methods-&gt;migration_other = tier_start;</div><div class='add'>+    methods-&gt;migration_needed = tier_migration_needed;</div><div class='add'>+    methods-&gt;layout_search = tier_search;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> err:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-tier_save_vol_name (xlator_t *this)</div><div class='add'>+tier_save_vol_name(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t       *conf           = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag         = NULL;</div><div class='del'>-        char             *suffix         = NULL;</div><div class='del'>-        int               name_len       = 0;</div><div class='del'>-</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    char *suffix = NULL;</div><div class='add'>+    int name_len = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        suffix = strstr (this-&gt;name, "-tier-dht");</div><div class='add'>+    suffix = strstr(this-&gt;name, "-tier-dht");</div><div class='ctx'> </div><div class='del'>-        if (suffix)</div><div class='del'>-                name_len = suffix - this-&gt;name;</div><div class='del'>-        else</div><div class='del'>-                name_len = strlen (this-&gt;name);</div><div class='add'>+    if (suffix)</div><div class='add'>+        name_len = suffix - this-&gt;name;</div><div class='add'>+    else</div><div class='add'>+        name_len = strlen(this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        if (name_len &gt; GD_VOLUME_NAME_MAX)</div><div class='del'>-                name_len = GD_VOLUME_NAME_MAX;</div><div class='add'>+    if (name_len &gt; GD_VOLUME_NAME_MAX)</div><div class='add'>+        name_len = GD_VOLUME_NAME_MAX;</div><div class='ctx'> </div><div class='del'>-        strncpy (defrag-&gt;tier_conf.volname, this-&gt;name, name_len);</div><div class='del'>-        defrag-&gt;tier_conf.volname[name_len] = 0;</div><div class='add'>+    strncpy(defrag-&gt;tier_conf.volname, this-&gt;name, name_len);</div><div class='add'>+    defrag-&gt;tier_conf.volname[name_len] = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_init (xlator_t *this)</div><div class='add'>+tier_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret            = -1;</div><div class='del'>-        int               freq           = 0;</div><div class='del'>-        int               maxsize        = 0;</div><div class='del'>-        dht_conf_t       *conf           = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag         = NULL;</div><div class='del'>-        char             *voldir         = NULL;</div><div class='del'>-        char             *mode           = NULL;</div><div class='del'>-        char             *paused         = NULL;</div><div class='del'>-        tier_mode_t	  tier_mode	 = DEFAULT_TIER_MODE;</div><div class='del'>-        gf_boolean_t	  compact_mode	 = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = dht_init (this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "tier_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = tier_init_methods (this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "tier_init_methods failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;subvolume_cnt != 2) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                        "Invalid number of subvolumes %d", conf-&gt;subvolume_cnt);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if instatiated from client side initialization is complete. */</div><div class='del'>-        if (!conf-&gt;defrag) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int freq = 0;</div><div class='add'>+    int maxsize = 0;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    char *voldir = NULL;</div><div class='add'>+    char *mode = NULL;</div><div class='add'>+    char *paused = NULL;</div><div class='add'>+    tier_mode_t tier_mode = DEFAULT_TIER_MODE;</div><div class='add'>+    gf_boolean_t compact_mode = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = dht_init(this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "tier_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = tier_init_methods(this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "tier_init_methods failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;subvolume_cnt != 2) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Invalid number of subvolumes %d", conf-&gt;subvolume_cnt);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* if instatiated from client side initialization is complete. */</div><div class='add'>+    if (!conf-&gt;defrag) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* if instatiated from server side, load db libraries */</div><div class='del'>-        ret = tier_load_externals (this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                       DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                       "Could not load externals. Aborting");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* if instatiated from server side, load db libraries */</div><div class='add'>+    ret = tier_load_externals(this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "Could not load externals. Aborting");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.last_demote_qfile_index = 0;</div><div class='del'>-        defrag-&gt;tier_conf.last_promote_qfile_index = 0;</div><div class='add'>+    defrag-&gt;tier_conf.last_demote_qfile_index = 0;</div><div class='add'>+    defrag-&gt;tier_conf.last_promote_qfile_index = 0;</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.is_tier = 1;</div><div class='del'>-        defrag-&gt;this = this;</div><div class='add'>+    defrag-&gt;tier_conf.is_tier = 1;</div><div class='add'>+    defrag-&gt;this = this;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-max-promote-file-size", &amp;maxsize);</div><div class='del'>-        if (ret) {</div><div class='del'>-                maxsize = 0;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-max-promote-file-size", &amp;maxsize);</div><div class='add'>+    if (ret) {</div><div class='add'>+        maxsize = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.tier_max_promote_size = maxsize;</div><div class='add'>+    defrag-&gt;tier_conf.tier_max_promote_size = maxsize;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-promote-frequency", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_PROMOTE_FREQ_SEC;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-promote-frequency", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_PROMOTE_FREQ_SEC;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.tier_promote_frequency = freq;</div><div class='add'>+    defrag-&gt;tier_conf.tier_promote_frequency = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-demote-frequency", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_DEMOTE_FREQ_SEC;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-demote-frequency", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_DEMOTE_FREQ_SEC;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.tier_demote_frequency = freq;</div><div class='add'>+    defrag-&gt;tier_conf.tier_demote_frequency = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-hot-compact-frequency", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_HOT_COMPACT_FREQ_SEC;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-hot-compact-frequency", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_HOT_COMPACT_FREQ_SEC;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.tier_compact_hot_frequency = freq;</div><div class='add'>+    defrag-&gt;tier_conf.tier_compact_hot_frequency = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-cold-compact-frequency", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_COLD_COMPACT_FREQ_SEC;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-cold-compact-frequency", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_COLD_COMPACT_FREQ_SEC;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.tier_compact_cold_frequency = freq;</div><div class='add'>+    defrag-&gt;tier_conf.tier_compact_cold_frequency = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "watermark-hi", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_WM_HI;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "watermark-hi", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_WM_HI;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.watermark_hi = freq;</div><div class='add'>+    defrag-&gt;tier_conf.watermark_hi = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "watermark-low", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_WM_LOW;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "watermark-low", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_WM_LOW;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.watermark_low = freq;</div><div class='add'>+    defrag-&gt;tier_conf.watermark_low = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "write-freq-threshold", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_WRITE_FREQ_SEC;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "write-freq-threshold", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_WRITE_FREQ_SEC;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;write_freq_threshold = freq;</div><div class='add'>+    defrag-&gt;write_freq_threshold = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "read-freq-threshold", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_READ_FREQ_SEC;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "read-freq-threshold", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_READ_FREQ_SEC;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;read_freq_threshold = freq;</div><div class='add'>+    defrag-&gt;read_freq_threshold = freq;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-max-mb", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_TIER_MAX_MIGRATE_MB;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-max-mb", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_TIER_MAX_MIGRATE_MB;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.max_migrate_bytes = (uint64_t) freq * 1024 * 1024;</div><div class='add'>+    defrag-&gt;tier_conf.max_migrate_bytes = (uint64_t)freq * 1024 * 1024;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-max-files", &amp;freq);</div><div class='del'>-        if (ret) {</div><div class='del'>-                freq = DEFAULT_TIER_MAX_MIGRATE_FILES;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-max-files", &amp;freq);</div><div class='add'>+    if (ret) {</div><div class='add'>+        freq = DEFAULT_TIER_MAX_MIGRATE_FILES;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        defrag-&gt;tier_conf.max_migrate_files = freq;</div><div class='add'>+    defrag-&gt;tier_conf.max_migrate_files = freq;</div><div class='ctx'> </div><div class='add'>+    ret = dict_get_int32(this-&gt;options, "tier-query-limit",</div><div class='add'>+                         &amp;(defrag-&gt;tier_conf.query_limit));</div><div class='add'>+    if (ret) {</div><div class='add'>+        defrag-&gt;tier_conf.query_limit = DEFAULT_TIER_QUERY_LIMIT;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (this-&gt;options,</div><div class='del'>-                              "tier-query-limit",</div><div class='del'>-                              &amp;(defrag-&gt;tier_conf.query_limit));</div><div class='del'>-        if (ret) {</div><div class='del'>-                defrag-&gt;tier_conf.query_limit =</div><div class='del'>-                        DEFAULT_TIER_QUERY_LIMIT;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(this-&gt;options, "tier-compact", &amp;mode);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (this-&gt;options,</div><div class='del'>-                            "tier-compact", &amp;mode);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                defrag-&gt;tier_conf.compact_active = DEFAULT_COMP_MODE;</div><div class='del'>-        } else {</div><div class='del'>-                compact_mode = tier_validate_compact_mode (mode);</div><div class='del'>-                /* If compaction is now active, we need to inform the bricks on</div><div class='del'>-                   the hot and cold tier of this. See dht-common.h for more. */</div><div class='del'>-                defrag-&gt;tier_conf.compact_active = compact_mode;</div><div class='del'>-                if (compact_mode) {</div><div class='del'>-                        defrag-&gt;tier_conf.compact_mode_switched_hot = _gf_true;</div><div class='del'>-                        defrag-&gt;tier_conf.compact_mode_switched_cold = _gf_true;</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        defrag-&gt;tier_conf.compact_active = DEFAULT_COMP_MODE;</div><div class='add'>+    } else {</div><div class='add'>+        compact_mode = tier_validate_compact_mode(mode);</div><div class='add'>+        /* If compaction is now active, we need to inform the bricks on</div><div class='add'>+           the hot and cold tier of this. See dht-common.h for more. */</div><div class='add'>+        defrag-&gt;tier_conf.compact_active = compact_mode;</div><div class='add'>+        if (compact_mode) {</div><div class='add'>+            defrag-&gt;tier_conf.compact_mode_switched_hot = _gf_true;</div><div class='add'>+            defrag-&gt;tier_conf.compact_mode_switched_cold = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (this-&gt;options,</div><div class='del'>-                            "tier-mode", &amp;mode);</div><div class='del'>-        if (ret) {</div><div class='del'>-                defrag-&gt;tier_conf.mode = DEFAULT_TIER_MODE;</div><div class='del'>-        } else {</div><div class='del'>-                tier_mode = tier_validate_mode (mode);</div><div class='del'>-                defrag-&gt;tier_conf.mode = tier_mode;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(this-&gt;options, "tier-mode", &amp;mode);</div><div class='add'>+    if (ret) {</div><div class='add'>+        defrag-&gt;tier_conf.mode = DEFAULT_TIER_MODE;</div><div class='add'>+    } else {</div><div class='add'>+        tier_mode = tier_validate_mode(mode);</div><div class='add'>+        defrag-&gt;tier_conf.mode = tier_mode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;defrag-&gt;tier_conf.pause_mutex, 0);</div><div class='add'>+    pthread_mutex_init(&amp;defrag-&gt;tier_conf.pause_mutex, 0);</div><div class='ctx'> </div><div class='del'>-        gf_defrag_set_pause_state (&amp;defrag-&gt;tier_conf, TIER_RUNNING);</div><div class='add'>+    gf_defrag_set_pause_state(&amp;defrag-&gt;tier_conf, TIER_RUNNING);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (this-&gt;options,</div><div class='del'>-                              "tier-pause", &amp;paused);</div><div class='add'>+    ret = dict_get_str(this-&gt;options, "tier-pause", &amp;paused);</div><div class='ctx'> </div><div class='del'>-        if (paused &amp;&amp; strcmp (paused, "on") == 0)</div><div class='del'>-                gf_defrag_set_pause_state (&amp;defrag-&gt;tier_conf,</div><div class='del'>-                                           TIER_REQUEST_PAUSE);</div><div class='add'>+    if (paused &amp;&amp; strcmp(paused, "on") == 0)</div><div class='add'>+        gf_defrag_set_pause_state(&amp;defrag-&gt;tier_conf, TIER_REQUEST_PAUSE);</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf(&amp;voldir, "%s/%s",</div><div class='del'>-                          DEFAULT_VAR_RUN_DIRECTORY,</div><div class='del'>-                          this-&gt;name);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = gf_asprintf(&amp;voldir, "%s/%s", DEFAULT_VAR_RUN_DIRECTORY, this-&gt;name);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mkdir_p(voldir, 0777, _gf_true);</div><div class='del'>-        if (ret == -1 &amp;&amp; errno != EEXIST) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                       DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                       "tier_init failed");</div><div class='del'>-</div><div class='del'>-                GF_FREE(voldir);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = mkdir_p(voldir, 0777, _gf_true);</div><div class='add'>+    if (ret == -1 &amp;&amp; errno != EEXIST) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+               "tier_init failed");</div><div class='ctx'> </div><div class='ctx'>         GF_FREE(voldir);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;promotion_qfile, "%s/%s/promote",</div><div class='del'>-                           DEFAULT_VAR_RUN_DIRECTORY,</div><div class='del'>-                           this-&gt;name);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    GF_FREE(voldir);</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;demotion_qfile, "%s/%s/demote",</div><div class='del'>-                           DEFAULT_VAR_RUN_DIRECTORY,</div><div class='del'>-                           this-&gt;name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                GF_FREE (promotion_qfile);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;promotion_qfile, "%s/%s/promote",</div><div class='add'>+                      DEFAULT_VAR_RUN_DIRECTORY, this-&gt;name);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-               "Promote/demote frequency %d/%d "</div><div class='del'>-               "Write/Read freq thresholds %d/%d",</div><div class='del'>-               defrag-&gt;tier_conf.tier_promote_frequency,</div><div class='del'>-               defrag-&gt;tier_conf.tier_demote_frequency,</div><div class='del'>-               defrag-&gt;write_freq_threshold,</div><div class='del'>-               defrag-&gt;read_freq_threshold);</div><div class='add'>+    ret = gf_asprintf(&amp;demotion_qfile, "%s/%s/demote",</div><div class='add'>+                      DEFAULT_VAR_RUN_DIRECTORY, this-&gt;name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        GF_FREE(promotion_qfile);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tier_save_vol_name (this);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+           "Promote/demote frequency %d/%d "</div><div class='add'>+           "Write/Read freq thresholds %d/%d",</div><div class='add'>+           defrag-&gt;tier_conf.tier_promote_frequency,</div><div class='add'>+           defrag-&gt;tier_conf.tier_demote_frequency,</div><div class='add'>+           defrag-&gt;write_freq_threshold, defrag-&gt;read_freq_threshold);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    tier_save_vol_name(this);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_cli_pause_done (int op_ret, call_frame_t *sync_frame, void *data)</div><div class='add'>+tier_cli_pause_done(int op_ret, call_frame_t *sync_frame, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_msg ("tier", GF_LOG_INFO, 0,</div><div class='del'>-                DHT_MSG_TIER_PAUSED,</div><div class='del'>-                "Migrate file paused with op_ret %d", op_ret);</div><div class='add'>+    gf_msg("tier", GF_LOG_INFO, 0, DHT_MSG_TIER_PAUSED,</div><div class='add'>+           "Migrate file paused with op_ret %d", op_ret);</div><div class='ctx'> </div><div class='del'>-        return op_ret;</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_cli_pause (void *data)</div><div class='add'>+tier_cli_pause(void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_defrag_info_t        *defrag         = NULL;</div><div class='del'>-        xlator_t                *this           = NULL;</div><div class='del'>-        dht_conf_t              *conf           = NULL;</div><div class='del'>-        int                      ret            = -1;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        this = data;</div><div class='add'>+    this = data;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conf, exit);</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conf, exit);</div><div class='ctx'> </div><div class='del'>-        defrag = conf-&gt;defrag;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, defrag, exit);</div><div class='add'>+    defrag = conf-&gt;defrag;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, defrag, exit);</div><div class='ctx'> </div><div class='del'>-        gf_defrag_pause_tier (this, defrag);</div><div class='add'>+    gf_defrag_pause_tier(this, defrag);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> exit:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-tier_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+tier_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        dht_conf_t       *conf            = NULL;</div><div class='del'>-        gf_defrag_info_t *defrag          = NULL;</div><div class='del'>-        char             *mode            = NULL;</div><div class='del'>-        int               migrate_mb      = 0;</div><div class='del'>-        gf_boolean_t      req_pause       = _gf_false;</div><div class='del'>-        int               ret             = 0;</div><div class='del'>-        call_frame_t            *frame    = NULL;</div><div class='del'>-        gf_boolean_t last_compact_setting = _gf_false;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (conf-&gt;defrag) {</div><div class='del'>-                defrag = conf-&gt;defrag;</div><div class='del'>-                GF_OPTION_RECONF ("tier-max-promote-file-size",</div><div class='del'>-                                  defrag-&gt;tier_conf.tier_max_promote_size,</div><div class='del'>-                                  options, int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-promote-frequency",</div><div class='del'>-                                  defrag-&gt;tier_conf.tier_promote_frequency,</div><div class='del'>-                                  options, int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-demote-frequency",</div><div class='del'>-                                  defrag-&gt;tier_conf.tier_demote_frequency,</div><div class='del'>-                                  options, int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("write-freq-threshold",</div><div class='del'>-                                  defrag-&gt;write_freq_threshold, options,</div><div class='del'>-                                  int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("read-freq-threshold",</div><div class='del'>-                                  defrag-&gt;read_freq_threshold, options,</div><div class='del'>-                                  int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("watermark-hi",</div><div class='del'>-                                  defrag-&gt;tier_conf.watermark_hi, options,</div><div class='del'>-                                  int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("watermark-low",</div><div class='del'>-                                  defrag-&gt;tier_conf.watermark_low, options,</div><div class='del'>-                                  int32, out);</div><div class='del'>-</div><div class='del'>-                last_compact_setting = defrag-&gt;tier_conf.compact_active;</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-compact",</div><div class='del'>-                                  defrag-&gt;tier_conf.compact_active, options,</div><div class='del'>-                                  bool, out);</div><div class='del'>-</div><div class='del'>-                if (last_compact_setting != defrag-&gt;tier_conf.compact_active) {</div><div class='del'>-                        defrag-&gt;tier_conf.compact_mode_switched_hot = _gf_true;</div><div class='del'>-                        defrag-&gt;tier_conf.compact_mode_switched_cold = _gf_true;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                DHT_MSG_LOG_TIER_STATUS,</div><div class='del'>-                                "compact mode switched");</div><div class='del'>-                }</div><div class='add'>+    dht_conf_t *conf = NULL;</div><div class='add'>+    gf_defrag_info_t *defrag = NULL;</div><div class='add'>+    char *mode = NULL;</div><div class='add'>+    int migrate_mb = 0;</div><div class='add'>+    gf_boolean_t req_pause = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    gf_boolean_t last_compact_setting = _gf_false;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;defrag) {</div><div class='add'>+        defrag = conf-&gt;defrag;</div><div class='add'>+        GF_OPTION_RECONF("tier-max-promote-file-size",</div><div class='add'>+                         defrag-&gt;tier_conf.tier_max_promote_size, options,</div><div class='add'>+                         int32, out);</div><div class='ctx'> </div><div class='del'>-                GF_OPTION_RECONF ("tier-hot-compact-frequency",</div><div class='del'>-                                  defrag-&gt;tier_conf.tier_compact_hot_frequency,</div><div class='del'>-                                  options, int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-cold-compact-frequency",</div><div class='del'>-                                  defrag-&gt;tier_conf.tier_compact_cold_frequency,</div><div class='del'>-                                  options, int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-mode",</div><div class='del'>-                                  mode, options,</div><div class='del'>-                                  str, out);</div><div class='del'>-                defrag-&gt;tier_conf.mode = tier_validate_mode (mode);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-max-mb",</div><div class='del'>-                                  migrate_mb, options,</div><div class='del'>-                                  int32, out);</div><div class='del'>-                defrag-&gt;tier_conf.max_migrate_bytes = (uint64_t) migrate_mb *</div><div class='del'>-                                                        1024 * 1024;</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-max-files",</div><div class='del'>-                                  defrag-&gt;tier_conf.max_migrate_files, options,</div><div class='del'>-                                  int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-query-limit",</div><div class='del'>-                                  defrag-&gt;tier_conf.query_limit,</div><div class='del'>-                                  options, int32, out);</div><div class='del'>-</div><div class='del'>-                GF_OPTION_RECONF ("tier-pause",</div><div class='del'>-                                  req_pause, options,</div><div class='del'>-                                  bool, out);</div><div class='del'>-</div><div class='del'>-                if (req_pause == _gf_true) {</div><div class='del'>-</div><div class='del'>-                        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-                        if (!frame)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        frame-&gt;root-&gt;pid = GF_CLIENT_PID_DEFRAG;</div><div class='del'>-</div><div class='del'>-                        ret = synctask_new (this-&gt;ctx-&gt;env, tier_cli_pause,</div><div class='del'>-                                            tier_cli_pause_done, frame, this);</div><div class='del'>-</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                        "pause tier failed on reconfigure");</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_defrag_resume_tier (this, defrag);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        DHT_MSG_LOG_TIER_ERROR,</div><div class='del'>-                                        "resume tier failed on reconfigure");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        GF_OPTION_RECONF("tier-promote-frequency",</div><div class='add'>+                         defrag-&gt;tier_conf.tier_promote_frequency, options,</div><div class='add'>+                         int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-demote-frequency",</div><div class='add'>+                         defrag-&gt;tier_conf.tier_demote_frequency, options,</div><div class='add'>+                         int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("write-freq-threshold", defrag-&gt;write_freq_threshold,</div><div class='add'>+                         options, int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("read-freq-threshold", defrag-&gt;read_freq_threshold,</div><div class='add'>+                         options, int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("watermark-hi", defrag-&gt;tier_conf.watermark_hi,</div><div class='add'>+                         options, int32, out);</div><div class='ctx'> </div><div class='add'>+        GF_OPTION_RECONF("watermark-low", defrag-&gt;tier_conf.watermark_low,</div><div class='add'>+                         options, int32, out);</div><div class='add'>+</div><div class='add'>+        last_compact_setting = defrag-&gt;tier_conf.compact_active;</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-compact", defrag-&gt;tier_conf.compact_active,</div><div class='add'>+                         options, bool, out);</div><div class='add'>+</div><div class='add'>+        if (last_compact_setting != defrag-&gt;tier_conf.compact_active) {</div><div class='add'>+            defrag-&gt;tier_conf.compact_mode_switched_hot = _gf_true;</div><div class='add'>+            defrag-&gt;tier_conf.compact_mode_switched_cold = _gf_true;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, DHT_MSG_LOG_TIER_STATUS,</div><div class='add'>+                   "compact mode switched");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        GF_OPTION_RECONF("tier-hot-compact-frequency",</div><div class='add'>+                         defrag-&gt;tier_conf.tier_compact_hot_frequency, options,</div><div class='add'>+                         int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-cold-compact-frequency",</div><div class='add'>+                         defrag-&gt;tier_conf.tier_compact_cold_frequency, options,</div><div class='add'>+                         int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-mode", mode, options, str, out);</div><div class='add'>+        defrag-&gt;tier_conf.mode = tier_validate_mode(mode);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-max-mb", migrate_mb, options, int32, out);</div><div class='add'>+        defrag-&gt;tier_conf.max_migrate_bytes = (uint64_t)migrate_mb * 1024 *</div><div class='add'>+                                              1024;</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-max-files", defrag-&gt;tier_conf.max_migrate_files,</div><div class='add'>+                         options, int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-query-limit", defrag-&gt;tier_conf.query_limit,</div><div class='add'>+                         options, int32, out);</div><div class='add'>+</div><div class='add'>+        GF_OPTION_RECONF("tier-pause", req_pause, options, bool, out);</div><div class='add'>+</div><div class='add'>+        if (req_pause == _gf_true) {</div><div class='add'>+            frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+            if (!frame)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            frame-&gt;root-&gt;pid = GF_CLIENT_PID_DEFRAG;</div><div class='add'>+</div><div class='add'>+            ret = synctask_new(this-&gt;ctx-&gt;env, tier_cli_pause,</div><div class='add'>+                               tier_cli_pause_done, frame, this);</div><div class='add'>+</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                       "pause tier failed on reconfigure");</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_defrag_resume_tier(this, defrag);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, DHT_MSG_LOG_TIER_ERROR,</div><div class='add'>+                       "resume tier failed on reconfigure");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return dht_reconfigure (this, options);</div><div class='add'>+    return dht_reconfigure(this, options);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-tier_fini (xlator_t *this)</div><div class='add'>+tier_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (libhandle)</div><div class='del'>-                dlclose (libhandle);</div><div class='add'>+    if (libhandle)</div><div class='add'>+        dlclose(libhandle);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (demotion_qfile);</div><div class='del'>-        GF_FREE (promotion_qfile);</div><div class='add'>+    GF_FREE(demotion_qfile);</div><div class='add'>+    GF_FREE(promotion_qfile);</div><div class='ctx'> </div><div class='del'>-        dht_fini(this);</div><div class='add'>+    dht_fini(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-class_methods_t class_methods = {</div><div class='del'>-        .init           = tier_init,</div><div class='del'>-        .fini           = tier_fini,</div><div class='del'>-        .reconfigure    = tier_reconfigure,</div><div class='del'>-        .notify         = dht_notify</div><div class='del'>-};</div><div class='add'>+class_methods_t class_methods = {.init = tier_init,</div><div class='add'>+                                 .fini = tier_fini,</div><div class='add'>+                                 .reconfigure = tier_reconfigure,</div><div class='add'>+                                 .notify = dht_notify};</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='ctx'> </div><div class='del'>-        .lookup      = dht_lookup,</div><div class='del'>-        .create      = tier_create,</div><div class='del'>-        .mknod       = dht_mknod,</div><div class='del'>-</div><div class='del'>-        .open        = dht_open,</div><div class='del'>-        .statfs      = tier_statfs,</div><div class='del'>-        .opendir     = dht_opendir,</div><div class='del'>-        .readdir     = tier_readdir,</div><div class='del'>-        .readdirp    = tier_readdirp,</div><div class='del'>-        .fsyncdir    = dht_fsyncdir,</div><div class='del'>-        .symlink     = dht_symlink,</div><div class='del'>-        .unlink      = tier_unlink,</div><div class='del'>-        .link        = tier_link,</div><div class='del'>-        .mkdir       = dht_mkdir,</div><div class='del'>-        .rmdir       = dht_rmdir,</div><div class='del'>-        .rename      = dht_rename,</div><div class='del'>-        .entrylk     = dht_entrylk,</div><div class='del'>-        .fentrylk    = dht_fentrylk,</div><div class='del'>-</div><div class='del'>-        /* Inode read operations */</div><div class='del'>-        .stat        = dht_stat,</div><div class='del'>-        .fstat       = dht_fstat,</div><div class='del'>-        .access      = dht_access,</div><div class='del'>-        .readlink    = dht_readlink,</div><div class='del'>-        .getxattr    = dht_getxattr,</div><div class='del'>-        .fgetxattr    = dht_fgetxattr,</div><div class='del'>-        .readv       = dht_readv,</div><div class='del'>-        .flush       = dht_flush,</div><div class='del'>-        .fsync       = dht_fsync,</div><div class='del'>-        .inodelk     = dht_inodelk,</div><div class='del'>-        .finodelk    = dht_finodelk,</div><div class='del'>-        .lk          = dht_lk,</div><div class='del'>-</div><div class='del'>-        /* Inode write operations */</div><div class='del'>-        .fremovexattr = dht_fremovexattr,</div><div class='del'>-        .removexattr = dht_removexattr,</div><div class='del'>-        .setxattr    = dht_setxattr,</div><div class='del'>-        .fsetxattr   = dht_fsetxattr,</div><div class='del'>-        .truncate    = dht_truncate,</div><div class='del'>-        .ftruncate   = dht_ftruncate,</div><div class='del'>-        .writev      = dht_writev,</div><div class='del'>-        .xattrop     = dht_xattrop,</div><div class='del'>-        .fxattrop    = dht_fxattrop,</div><div class='del'>-        .setattr     = dht_setattr,</div><div class='del'>-        .fsetattr    = dht_fsetattr,</div><div class='del'>-        .fallocate   = dht_fallocate,</div><div class='del'>-        .discard     = dht_discard,</div><div class='del'>-        .zerofill    = dht_zerofill,</div><div class='add'>+    .lookup = dht_lookup,</div><div class='add'>+    .create = tier_create,</div><div class='add'>+    .mknod = dht_mknod,</div><div class='add'>+</div><div class='add'>+    .open = dht_open,</div><div class='add'>+    .statfs = tier_statfs,</div><div class='add'>+    .opendir = dht_opendir,</div><div class='add'>+    .readdir = tier_readdir,</div><div class='add'>+    .readdirp = tier_readdirp,</div><div class='add'>+    .fsyncdir = dht_fsyncdir,</div><div class='add'>+    .symlink = dht_symlink,</div><div class='add'>+    .unlink = tier_unlink,</div><div class='add'>+    .link = tier_link,</div><div class='add'>+    .mkdir = dht_mkdir,</div><div class='add'>+    .rmdir = dht_rmdir,</div><div class='add'>+    .rename = dht_rename,</div><div class='add'>+    .entrylk = dht_entrylk,</div><div class='add'>+    .fentrylk = dht_fentrylk,</div><div class='add'>+</div><div class='add'>+    /* Inode read operations */</div><div class='add'>+    .stat = dht_stat,</div><div class='add'>+    .fstat = dht_fstat,</div><div class='add'>+    .access = dht_access,</div><div class='add'>+    .readlink = dht_readlink,</div><div class='add'>+    .getxattr = dht_getxattr,</div><div class='add'>+    .fgetxattr = dht_fgetxattr,</div><div class='add'>+    .readv = dht_readv,</div><div class='add'>+    .flush = dht_flush,</div><div class='add'>+    .fsync = dht_fsync,</div><div class='add'>+    .inodelk = dht_inodelk,</div><div class='add'>+    .finodelk = dht_finodelk,</div><div class='add'>+    .lk = dht_lk,</div><div class='add'>+</div><div class='add'>+    /* Inode write operations */</div><div class='add'>+    .fremovexattr = dht_fremovexattr,</div><div class='add'>+    .removexattr = dht_removexattr,</div><div class='add'>+    .setxattr = dht_setxattr,</div><div class='add'>+    .fsetxattr = dht_fsetxattr,</div><div class='add'>+    .truncate = dht_truncate,</div><div class='add'>+    .ftruncate = dht_ftruncate,</div><div class='add'>+    .writev = dht_writev,</div><div class='add'>+    .xattrop = dht_xattrop,</div><div class='add'>+    .fxattrop = dht_fxattrop,</div><div class='add'>+    .setattr = dht_setattr,</div><div class='add'>+    .fsetattr = dht_fsetattr,</div><div class='add'>+    .fallocate = dht_fallocate,</div><div class='add'>+    .discard = dht_discard,</div><div class='add'>+    .zerofill = dht_zerofill,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .release    = dht_release,</div><div class='del'>-        .forget     = dht_forget</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.release = dht_release, .forget = dht_forget};</div><div class='head'>diff --git a/xlators/cluster/dht/src/unittest/dht_layout_mock.c b/xlators/cluster/dht/src/unittest/dht_layout_mock.c<br/>index 6544f4208f5..49bf18b9fe6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/unittest/dht_layout_mock.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/unittest/dht_layout_mock.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/unittest/dht_layout_mock.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/unittest/dht_layout_mock.c</a></div><div class='hunk'>@@ -13,60 +13,61 @@</div><div class='ctx'> #include "byte-order.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_hash_compute (xlator_t *this, int type, const char *name, uint32_t *hash_p)</div><div class='add'>+dht_hash_compute(xlator_t *this, int type, const char *name, uint32_t *hash_p)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_layout_get (inode_t *inode, xlator_t *this, dht_layout_t **layout)</div><div class='add'>+dht_inode_ctx_layout_get(inode_t *inode, xlator_t *this, dht_layout_t **layout)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dht_inode_ctx_layout_set (inode_t *inode, xlator_t *this,</div><div class='del'>-                          dht_layout_t *layout_int)</div><div class='add'>+dht_inode_ctx_layout_set(inode_t *inode, xlator_t *this,</div><div class='add'>+                         dht_layout_t *layout_int)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_ptr (dict_t *this, char *key, void **ptr)</div><div class='add'>+dict_get_ptr(dict_t *this, char *key, void **ptr)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-dict_get_ptr_and_len (dict_t *this, char *key, void **ptr, int *len)</div><div class='add'>+dict_get_ptr_and_len(dict_t *this, char *key, void **ptr, int *len)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int _gf_log (const char *domain, const char *file,</div><div class='del'>-             const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-             const char *fmt, ...)</div><div class='add'>+int</div><div class='add'>+_gf_log(const char *domain, const char *file, const char *function,</div><div class='add'>+        int32_t line, gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int _gf_log_callingfn (const char *domain, const char *file,</div><div class='del'>-                       const char *function, int32_t line, gf_loglevel_t level,</div><div class='del'>-                       const char *fmt, ...)</div><div class='add'>+int</div><div class='add'>+_gf_log_callingfn(const char *domain, const char *file, const char *function,</div><div class='add'>+                  int32_t line, gf_loglevel_t level, const char *fmt, ...)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void gf_uuid_unparse(const uuid_t uu, char *out)</div><div class='add'>+void</div><div class='add'>+gf_uuid_unparse(const uuid_t uu, char *out)</div><div class='ctx'> {</div><div class='ctx'>     // could call a will-return function here</div><div class='ctx'>     // to place the correct data in *out</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_gf_msg (const char *domain, const char *file, const char *function,</div><div class='del'>-         int32_t line, gf_loglevel_t level, int errnum, int trace,</div><div class='del'>-         uint64_t msgid, const char *fmt, ...)</div><div class='add'>+_gf_msg(const char *domain, const char *file, const char *function,</div><div class='add'>+        int32_t line, gf_loglevel_t level, int errnum, int trace,</div><div class='add'>+        uint64_t msgid, const char *fmt, ...)</div><div class='ctx'> {</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/dht/src/unittest/dht_layout_unittest.c b/xlators/cluster/dht/src/unittest/dht_layout_unittest.c<br/>index fb6445ce1f3..72890070835 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/unittest/dht_layout_unittest.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/dht/src/unittest/dht_layout_unittest.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/dht/src/unittest/dht_layout_unittest.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/dht/src/unittest/dht_layout_unittest.c</a></div><div class='hunk'>@@ -34,16 +34,16 @@ helper_xlator_init(uint32_t num_types)</div><div class='ctx'>     xl = test_calloc(1, sizeof(xlator_t));</div><div class='ctx'>     assert_non_null(xl);</div><div class='ctx'>     xl-&gt;mem_acct-&gt;num_types = num_types;</div><div class='del'>-    xl-&gt;mem_acct = test_calloc (sizeof(struct mem_acct)</div><div class='del'>-                                + sizeof(struct mem_acct_rec) + num_types);</div><div class='add'>+    xl-&gt;mem_acct = test_calloc(sizeof(struct mem_acct) +</div><div class='add'>+                               sizeof(struct mem_acct_rec) + num_types);</div><div class='ctx'>     assert_non_null(xl-&gt;mem_acct);</div><div class='ctx'> </div><div class='ctx'>     xl-&gt;ctx = test_calloc(1, sizeof(glusterfs_ctx_t));</div><div class='ctx'>     assert_non_null(xl-&gt;ctx);</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; num_types; i++) {</div><div class='del'>-            ret = LOCK_INIT(&amp;(xl-&gt;mem_acct.rec[i].lock));</div><div class='del'>-            assert_false(ret);</div><div class='add'>+        ret = LOCK_INIT(&amp;(xl-&gt;mem_acct.rec[i].lock));</div><div class='add'>+        assert_false(ret);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ENSURE(num_types == xl-&gt;mem_acct.num_types);</div><div class='hunk'>@@ -58,8 +58,8 @@ helper_xlator_destroy(xlator_t *xl)</div><div class='ctx'>     int i, ret;</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; xl-&gt;mem_acct.num_types; i++) {</div><div class='del'>-            ret = LOCK_DESTROY(&amp;(xl-&gt;mem_acct.rec[i].lock));</div><div class='del'>-            assert_int_equal(ret, 0);</div><div class='add'>+        ret = LOCK_DESTROY(&amp;(xl-&gt;mem_acct.rec[i].lock));</div><div class='add'>+        assert_int_equal(ret, 0);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     free(xl-&gt;mem_acct.rec);</div><div class='hunk'>@@ -76,7 +76,7 @@ test_dht_layout_new(void **state)</div><div class='ctx'> {</div><div class='ctx'>     xlator_t *xl;</div><div class='ctx'>     dht_layout_t *layout;</div><div class='del'>-    dht_conf_t   *conf;</div><div class='add'>+    dht_conf_t *conf;</div><div class='ctx'>     int cnt;</div><div class='ctx'> </div><div class='ctx'>     expect_assert_failure(dht_layout_new(NULL, 0));</div><div class='hunk'>@@ -90,7 +90,7 @@ test_dht_layout_new(void **state)</div><div class='ctx'>     assert_non_null(layout);</div><div class='ctx'>     assert_int_equal(layout-&gt;type, DHT_HASH_TYPE_DM);</div><div class='ctx'>     assert_int_equal(layout-&gt;cnt, cnt);</div><div class='del'>-    assert_int_equal(GF_ATOMIC_GET (layout-&gt;ref), 1);</div><div class='add'>+    assert_int_equal(GF_ATOMIC_GET(layout-&gt;ref), 1);</div><div class='ctx'>     assert_int_equal(layout-&gt;gen, 0);</div><div class='ctx'>     assert_int_equal(layout-&gt;spread_cnt, 0);</div><div class='ctx'>     free(layout);</div><div class='hunk'>@@ -107,7 +107,7 @@ test_dht_layout_new(void **state)</div><div class='ctx'>     assert_non_null(layout);</div><div class='ctx'>     assert_int_equal(layout-&gt;type, DHT_HASH_TYPE_DM);</div><div class='ctx'>     assert_int_equal(layout-&gt;cnt, cnt);</div><div class='del'>-    assert_int_equal(GF_ATOMIC_GET (layout-&gt;ref), 1);</div><div class='add'>+    assert_int_equal(GF_ATOMIC_GET(layout-&gt;ref), 1);</div><div class='ctx'>     assert_int_equal(layout-&gt;gen, conf-&gt;gen);</div><div class='ctx'>     assert_int_equal(layout-&gt;spread_cnt, conf-&gt;dir_spread_cnt);</div><div class='ctx'>     free(layout);</div><div class='hunk'>@@ -116,7 +116,9 @@ test_dht_layout_new(void **state)</div><div class='ctx'>     helper_xlator_destroy(xl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int main(void) {</div><div class='add'>+int</div><div class='add'>+main(void)</div><div class='add'>+{</div><div class='ctx'>     const struct CMUnitTest xlator_dht_layout_tests[] = {</div><div class='ctx'>         unit_test(test_dht_layout_new),</div><div class='ctx'>     };</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-code-avx.c b/xlators/cluster/ec/src/ec-code-avx.c<br/>index 92bd3e83c5e..70afaa00f54 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-avx.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-code-avx.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-avx.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-avx.c</a></div><div class='hunk'>@@ -34,10 +34,9 @@ ec_code_avx_load(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>                  uint32_t bit)</div><div class='ctx'> {</div><div class='ctx'>     if (builder-&gt;linear) {</div><div class='del'>-        ec_code_intel_op_mov_m2avx(builder, REG_SI, REG_DX, 1,</div><div class='del'>-                                   idx * builder-&gt;width * builder-&gt;bits +</div><div class='del'>-                                   bit * builder-&gt;width,</div><div class='del'>-                                   dst);</div><div class='add'>+        ec_code_intel_op_mov_m2avx(</div><div class='add'>+            builder, REG_SI, REG_DX, 1,</div><div class='add'>+            idx * builder-&gt;width * builder-&gt;bits + bit * builder-&gt;width, dst);</div><div class='ctx'>     } else {</div><div class='ctx'>         if (builder-&gt;base != idx) {</div><div class='ctx'>             ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8,</div><div class='hunk'>@@ -81,10 +80,9 @@ ec_code_avx_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>                  uint32_t bit)</div><div class='ctx'> {</div><div class='ctx'>     if (builder-&gt;linear) {</div><div class='del'>-        ec_code_intel_op_xor_m2avx(builder, REG_SI, REG_DX, 1,</div><div class='del'>-                                   idx * builder-&gt;width * builder-&gt;bits +</div><div class='del'>-                                   bit * builder-&gt;width,</div><div class='del'>-                                   dst);</div><div class='add'>+        ec_code_intel_op_xor_m2avx(</div><div class='add'>+            builder, REG_SI, REG_DX, 1,</div><div class='add'>+            idx * builder-&gt;width * builder-&gt;bits + bit * builder-&gt;width, dst);</div><div class='ctx'>     } else {</div><div class='ctx'>         if (builder-&gt;base != idx) {</div><div class='ctx'>             ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8,</div><div class='hunk'>@@ -96,21 +94,16 @@ ec_code_avx_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *ec_code_avx_needed_flags[] = {</div><div class='del'>-    "avx2",</div><div class='del'>-    NULL</div><div class='del'>-};</div><div class='add'>+static char *ec_code_avx_needed_flags[] = {"avx2", NULL};</div><div class='ctx'> </div><div class='del'>-ec_code_gen_t ec_code_gen_avx = {</div><div class='del'>-    .name   = "avx",</div><div class='del'>-    .flags  = ec_code_avx_needed_flags,</div><div class='del'>-    .width  = 32,</div><div class='del'>-    .prolog = ec_code_avx_prolog,</div><div class='del'>-    .epilog = ec_code_avx_epilog,</div><div class='del'>-    .load   = ec_code_avx_load,</div><div class='del'>-    .store  = ec_code_avx_store,</div><div class='del'>-    .copy   = ec_code_avx_copy,</div><div class='del'>-    .xor2   = ec_code_avx_xor2,</div><div class='del'>-    .xor3   = ec_code_avx_xor3,</div><div class='del'>-    .xorm   = ec_code_avx_xorm</div><div class='del'>-};</div><div class='add'>+ec_code_gen_t ec_code_gen_avx = {.name = "avx",</div><div class='add'>+                                 .flags = ec_code_avx_needed_flags,</div><div class='add'>+                                 .width = 32,</div><div class='add'>+                                 .prolog = ec_code_avx_prolog,</div><div class='add'>+                                 .epilog = ec_code_avx_epilog,</div><div class='add'>+                                 .load = ec_code_avx_load,</div><div class='add'>+                                 .store = ec_code_avx_store,</div><div class='add'>+                                 .copy = ec_code_avx_copy,</div><div class='add'>+                                 .xor2 = ec_code_avx_xor2,</div><div class='add'>+                                 .xor3 = ec_code_avx_xor3,</div><div class='add'>+                                 .xorm = ec_code_avx_xorm};</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-code-c.c b/xlators/cluster/ec/src/ec-code-c.c<br/>index 7387f3ea435..acdc665c2cf 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-c.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-code-c.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-c.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-c.c</a></div><div class='hunk'>@@ -16,12 +16,14 @@</div><div class='ctx'> </div><div class='ctx'> #define WIDTH (EC_METHOD_WORD_SIZE / sizeof(uint64_t))</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_00(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_00(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     memcpy(out, in, EC_METHOD_WORD_SIZE * 8);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_01(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_01(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -42,7 +44,8 @@ static void gf8_muladd_01(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_02(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_02(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -83,7 +86,8 @@ static void gf8_muladd_02(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_03(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_03(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -126,7 +130,8 @@ static void gf8_muladd_03(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_04(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_04(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -169,7 +174,8 @@ static void gf8_muladd_04(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_05(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_05(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -210,7 +216,8 @@ static void gf8_muladd_05(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_06(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_06(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -253,7 +260,8 @@ static void gf8_muladd_06(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_07(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_07(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -299,7 +307,8 @@ static void gf8_muladd_07(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_08(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_08(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -340,7 +349,8 @@ static void gf8_muladd_08(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_09(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_09(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -383,7 +393,8 @@ static void gf8_muladd_09(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_0A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_0A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -424,7 +435,8 @@ static void gf8_muladd_0A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_0B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_0B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -469,7 +481,8 @@ static void gf8_muladd_0B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_0C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_0C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -513,7 +526,8 @@ static void gf8_muladd_0C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_0D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_0D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -558,7 +572,8 @@ static void gf8_muladd_0D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_0E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_0E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -604,7 +619,8 @@ static void gf8_muladd_0E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_0F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_0F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -650,7 +666,8 @@ static void gf8_muladd_0F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_10(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_10(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -694,7 +711,8 @@ static void gf8_muladd_10(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_11(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_11(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -735,7 +753,8 @@ static void gf8_muladd_11(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_12(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_12(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -779,7 +798,8 @@ static void gf8_muladd_12(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_13(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_13(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -823,7 +843,8 @@ static void gf8_muladd_13(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_14(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_14(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -867,7 +888,8 @@ static void gf8_muladd_14(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_15(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_15(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -910,7 +932,8 @@ static void gf8_muladd_15(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_16(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_16(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -956,7 +979,8 @@ static void gf8_muladd_16(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_17(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_17(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1002,7 +1026,8 @@ static void gf8_muladd_17(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_18(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_18(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1046,7 +1071,8 @@ static void gf8_muladd_18(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_19(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_19(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1090,7 +1116,8 @@ static void gf8_muladd_19(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_1A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_1A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1136,7 +1163,8 @@ static void gf8_muladd_1A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_1B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_1B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1183,7 +1211,8 @@ static void gf8_muladd_1B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_1C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_1C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1230,7 +1259,8 @@ static void gf8_muladd_1C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_1D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_1D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1277,7 +1307,8 @@ static void gf8_muladd_1D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_1E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_1E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1323,7 +1354,8 @@ static void gf8_muladd_1E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_1F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_1F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1367,7 +1399,8 @@ static void gf8_muladd_1F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_20(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_20(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1411,7 +1444,8 @@ static void gf8_muladd_20(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_21(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_21(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1454,7 +1488,8 @@ static void gf8_muladd_21(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_22(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_22(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1495,7 +1530,8 @@ static void gf8_muladd_22(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_23(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_23(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1536,7 +1572,8 @@ static void gf8_muladd_23(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_24(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_24(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1580,7 +1617,8 @@ static void gf8_muladd_24(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_25(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_25(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1623,7 +1661,8 @@ static void gf8_muladd_25(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_26(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_26(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1668,7 +1707,8 @@ static void gf8_muladd_26(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_27(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_27(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1709,7 +1749,8 @@ static void gf8_muladd_27(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_28(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_28(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1754,7 +1795,8 @@ static void gf8_muladd_28(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_29(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_29(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1799,7 +1841,8 @@ static void gf8_muladd_29(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_2A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_2A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1843,7 +1886,8 @@ static void gf8_muladd_2A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_2B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_2B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1887,7 +1931,8 @@ static void gf8_muladd_2B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_2C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_2C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1933,7 +1978,8 @@ static void gf8_muladd_2C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_2D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_2D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -1979,7 +2025,8 @@ static void gf8_muladd_2D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_2E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_2E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2024,7 +2071,8 @@ static void gf8_muladd_2E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_2F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_2F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2069,7 +2117,8 @@ static void gf8_muladd_2F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_30(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_30(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2113,7 +2162,8 @@ static void gf8_muladd_30(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_31(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_31(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2158,7 +2208,8 @@ static void gf8_muladd_31(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_32(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_32(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2202,7 +2253,8 @@ static void gf8_muladd_32(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_33(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_33(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2249,7 +2301,8 @@ static void gf8_muladd_33(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_34(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_34(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2296,7 +2349,8 @@ static void gf8_muladd_34(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_35(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_35(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2341,7 +2395,8 @@ static void gf8_muladd_35(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_36(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_36(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2385,7 +2440,8 @@ static void gf8_muladd_36(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_37(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_37(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2431,7 +2487,8 @@ static void gf8_muladd_37(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_38(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_38(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2476,7 +2533,8 @@ static void gf8_muladd_38(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_39(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_39(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2521,7 +2579,8 @@ static void gf8_muladd_39(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_3A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_3A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2569,7 +2628,8 @@ static void gf8_muladd_3A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_3B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_3B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2614,7 +2674,8 @@ static void gf8_muladd_3B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_3C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_3C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2659,7 +2720,8 @@ static void gf8_muladd_3C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_3D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_3D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2704,7 +2766,8 @@ static void gf8_muladd_3D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_3E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_3E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2748,7 +2811,8 @@ static void gf8_muladd_3E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_3F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_3F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2793,7 +2857,8 @@ static void gf8_muladd_3F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_40(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_40(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2837,7 +2902,8 @@ static void gf8_muladd_40(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_41(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_41(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2881,7 +2947,8 @@ static void gf8_muladd_41(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_42(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_42(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2922,7 +2989,8 @@ static void gf8_muladd_42(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_43(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_43(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -2963,7 +3031,8 @@ static void gf8_muladd_43(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_44(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_44(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3006,7 +3075,8 @@ static void gf8_muladd_44(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_45(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_45(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3047,7 +3117,8 @@ static void gf8_muladd_45(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_46(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_46(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3088,7 +3159,8 @@ static void gf8_muladd_46(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_47(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_47(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3131,7 +3203,8 @@ static void gf8_muladd_47(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_48(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_48(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3175,7 +3248,8 @@ static void gf8_muladd_48(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_49(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_49(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3219,7 +3293,8 @@ static void gf8_muladd_49(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_4A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_4A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3263,7 +3338,8 @@ static void gf8_muladd_4A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_4B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_4B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3309,7 +3385,8 @@ static void gf8_muladd_4B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_4C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_4C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3354,7 +3431,8 @@ static void gf8_muladd_4C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_4D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_4D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3399,7 +3477,8 @@ static void gf8_muladd_4D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_4E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_4E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3440,7 +3519,8 @@ static void gf8_muladd_4E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_4F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_4F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3481,7 +3561,8 @@ static void gf8_muladd_4F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_50(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_50(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3526,7 +3607,8 @@ static void gf8_muladd_50(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_51(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_51(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3567,7 +3649,8 @@ static void gf8_muladd_51(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_52(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_52(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3613,7 +3696,8 @@ static void gf8_muladd_52(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_53(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_53(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3654,7 +3738,8 @@ static void gf8_muladd_53(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_54(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_54(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3700,7 +3785,8 @@ static void gf8_muladd_54(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_55(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_55(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3745,7 +3831,8 @@ static void gf8_muladd_55(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_56(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_56(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3788,7 +3875,8 @@ static void gf8_muladd_56(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_57(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_57(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3832,7 +3920,8 @@ static void gf8_muladd_57(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_58(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_58(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3876,7 +3965,8 @@ static void gf8_muladd_58(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_59(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_59(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3920,7 +4010,8 @@ static void gf8_muladd_59(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_5A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_5A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -3965,7 +4056,8 @@ static void gf8_muladd_5A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_5B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_5B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4012,7 +4104,8 @@ static void gf8_muladd_5B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_5C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_5C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4057,7 +4150,8 @@ static void gf8_muladd_5C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_5D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_5D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4104,7 +4198,8 @@ static void gf8_muladd_5D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_5E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_5E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4151,7 +4246,8 @@ static void gf8_muladd_5E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_5F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_5F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4197,7 +4293,8 @@ static void gf8_muladd_5F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_60(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_60(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4241,7 +4338,8 @@ static void gf8_muladd_60(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_61(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_61(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4285,7 +4383,8 @@ static void gf8_muladd_61(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_62(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_62(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4331,7 +4430,8 @@ static void gf8_muladd_62(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_63(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_63(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4378,7 +4478,8 @@ static void gf8_muladd_63(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_64(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_64(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4422,7 +4523,8 @@ static void gf8_muladd_64(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_65(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_65(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4468,7 +4570,8 @@ static void gf8_muladd_65(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_66(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_66(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4515,7 +4618,8 @@ static void gf8_muladd_66(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_67(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_67(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4561,7 +4665,8 @@ static void gf8_muladd_67(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_68(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_68(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4607,7 +4712,8 @@ static void gf8_muladd_68(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_69(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_69(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4650,7 +4756,8 @@ static void gf8_muladd_69(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_6A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_6A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4695,7 +4802,8 @@ static void gf8_muladd_6A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_6B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_6B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4739,7 +4847,8 @@ static void gf8_muladd_6B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_6C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_6C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4783,7 +4892,8 @@ static void gf8_muladd_6C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_6D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_6D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4827,7 +4937,8 @@ static void gf8_muladd_6D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_6E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_6E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4872,7 +4983,8 @@ static void gf8_muladd_6E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_6F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_6F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4917,7 +5029,8 @@ static void gf8_muladd_6F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_70(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_70(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -4962,7 +5075,8 @@ static void gf8_muladd_70(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_71(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_71(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5007,7 +5121,8 @@ static void gf8_muladd_71(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_72(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_72(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5052,7 +5167,8 @@ static void gf8_muladd_72(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_73(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_73(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5093,7 +5209,8 @@ static void gf8_muladd_73(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_74(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_74(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5137,7 +5254,8 @@ static void gf8_muladd_74(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_75(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_75(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5182,7 +5300,8 @@ static void gf8_muladd_75(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_76(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_76(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5228,7 +5347,8 @@ static void gf8_muladd_76(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_77(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_77(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5274,7 +5394,8 @@ static void gf8_muladd_77(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_78(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_78(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5319,7 +5440,8 @@ static void gf8_muladd_78(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_79(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_79(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5365,7 +5487,8 @@ static void gf8_muladd_79(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_7A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_7A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5409,7 +5532,8 @@ static void gf8_muladd_7A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_7B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_7B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5454,7 +5578,8 @@ static void gf8_muladd_7B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_7C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_7C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5498,7 +5623,8 @@ static void gf8_muladd_7C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_7D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_7D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5544,7 +5670,8 @@ static void gf8_muladd_7D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_7E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_7E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5589,7 +5716,8 @@ static void gf8_muladd_7E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_7F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_7F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5635,7 +5763,8 @@ static void gf8_muladd_7F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_80(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_80(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5680,7 +5809,8 @@ static void gf8_muladd_80(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_81(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_81(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5724,7 +5854,8 @@ static void gf8_muladd_81(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_82(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_82(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5767,7 +5898,8 @@ static void gf8_muladd_82(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_83(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_83(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5814,7 +5946,8 @@ static void gf8_muladd_83(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_84(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_84(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5855,7 +5988,8 @@ static void gf8_muladd_84(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_85(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_85(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5901,7 +6035,8 @@ static void gf8_muladd_85(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_86(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_86(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5942,7 +6077,8 @@ static void gf8_muladd_86(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_87(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_87(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -5986,7 +6122,8 @@ static void gf8_muladd_87(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_88(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_88(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6030,7 +6167,8 @@ static void gf8_muladd_88(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_89(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_89(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6075,7 +6213,8 @@ static void gf8_muladd_89(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_8A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_8A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6116,7 +6255,8 @@ static void gf8_muladd_8A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_8B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_8B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6163,7 +6303,8 @@ static void gf8_muladd_8B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_8C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_8C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6204,7 +6345,8 @@ static void gf8_muladd_8C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_8D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_8D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6247,7 +6389,8 @@ static void gf8_muladd_8D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_8E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_8E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6288,7 +6431,8 @@ static void gf8_muladd_8E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_8F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_8F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6331,7 +6475,8 @@ static void gf8_muladd_8F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_90(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_90(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6376,7 +6521,8 @@ static void gf8_muladd_90(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_91(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_91(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6422,7 +6568,8 @@ static void gf8_muladd_91(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_92(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_92(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6466,7 +6613,8 @@ static void gf8_muladd_92(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_93(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_93(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6511,7 +6659,8 @@ static void gf8_muladd_93(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_94(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_94(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6554,7 +6703,8 @@ static void gf8_muladd_94(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_95(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_95(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6602,7 +6752,8 @@ static void gf8_muladd_95(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_96(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_96(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6647,7 +6798,8 @@ static void gf8_muladd_96(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_97(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_97(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6693,7 +6845,8 @@ static void gf8_muladd_97(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_98(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_98(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6737,7 +6890,8 @@ static void gf8_muladd_98(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_99(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_99(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6782,7 +6936,8 @@ static void gf8_muladd_99(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_9A(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_9A(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6827,7 +6982,8 @@ static void gf8_muladd_9A(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_9B(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_9B(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6870,7 +7026,8 @@ static void gf8_muladd_9B(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_9C(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_9C(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6913,7 +7070,8 @@ static void gf8_muladd_9C(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_9D(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_9D(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6956,7 +7114,8 @@ static void gf8_muladd_9D(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_9E(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_9E(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -6999,7 +7158,8 @@ static void gf8_muladd_9E(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_9F(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_9F(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7042,7 +7202,8 @@ static void gf8_muladd_9F(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A0(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A0(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7088,7 +7249,8 @@ static void gf8_muladd_A0(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A1(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A1(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7133,7 +7295,8 @@ static void gf8_muladd_A1(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A2(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A2(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7176,7 +7339,8 @@ static void gf8_muladd_A2(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A3(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A3(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7220,7 +7384,8 @@ static void gf8_muladd_A3(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A4(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A4(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7267,7 +7432,8 @@ static void gf8_muladd_A4(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A5(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A5(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7312,7 +7478,8 @@ static void gf8_muladd_A5(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A6(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A6(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7353,7 +7520,8 @@ static void gf8_muladd_A6(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A7(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A7(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7394,7 +7562,8 @@ static void gf8_muladd_A7(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A8(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A8(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7439,7 +7608,8 @@ static void gf8_muladd_A8(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_A9(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_A9(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7480,7 +7650,8 @@ static void gf8_muladd_A9(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_AA(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_AA(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7525,7 +7696,8 @@ static void gf8_muladd_AA(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_AB(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_AB(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7569,7 +7741,8 @@ static void gf8_muladd_AB(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_AC(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_AC(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7612,7 +7785,8 @@ static void gf8_muladd_AC(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_AD(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_AD(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7653,7 +7827,8 @@ static void gf8_muladd_AD(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_AE(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_AE(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7698,7 +7873,8 @@ static void gf8_muladd_AE(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_AF(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_AF(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7741,7 +7917,8 @@ static void gf8_muladd_AF(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B0(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B0(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7787,7 +7964,8 @@ static void gf8_muladd_B0(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B1(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B1(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7831,7 +8009,8 @@ static void gf8_muladd_B1(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B2(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B2(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7878,7 +8057,8 @@ static void gf8_muladd_B2(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B3(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B3(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7923,7 +8103,8 @@ static void gf8_muladd_B3(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B4(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B4(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -7966,7 +8147,8 @@ static void gf8_muladd_B4(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B5(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B5(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8011,7 +8193,8 @@ static void gf8_muladd_B5(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B6(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B6(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8057,7 +8240,8 @@ static void gf8_muladd_B6(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B7(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B7(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8101,7 +8285,8 @@ static void gf8_muladd_B7(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B8(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B8(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8146,7 +8331,8 @@ static void gf8_muladd_B8(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_B9(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_B9(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8191,7 +8377,8 @@ static void gf8_muladd_B9(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_BA(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_BA(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8236,7 +8423,8 @@ static void gf8_muladd_BA(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_BB(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_BB(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8280,7 +8468,8 @@ static void gf8_muladd_BB(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_BC(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_BC(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8325,7 +8514,8 @@ static void gf8_muladd_BC(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_BD(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_BD(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8370,7 +8560,8 @@ static void gf8_muladd_BD(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_BE(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_BE(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8413,7 +8604,8 @@ static void gf8_muladd_BE(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_BF(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_BF(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8459,7 +8651,8 @@ static void gf8_muladd_BF(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C0(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C0(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8503,7 +8696,8 @@ static void gf8_muladd_C0(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C1(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C1(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8547,7 +8741,8 @@ static void gf8_muladd_C1(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C2(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C2(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8591,7 +8786,8 @@ static void gf8_muladd_C2(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C3(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C3(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8636,7 +8832,8 @@ static void gf8_muladd_C3(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C4(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C4(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8680,7 +8877,8 @@ static void gf8_muladd_C4(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C5(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C5(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8723,7 +8921,8 @@ static void gf8_muladd_C5(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C6(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C6(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8771,7 +8970,8 @@ static void gf8_muladd_C6(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C7(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C7(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8815,7 +9015,8 @@ static void gf8_muladd_C7(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C8(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C8(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8859,7 +9060,8 @@ static void gf8_muladd_C8(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_C9(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_C9(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8902,7 +9104,8 @@ static void gf8_muladd_C9(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_CA(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_CA(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8948,7 +9151,8 @@ static void gf8_muladd_CA(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_CB(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_CB(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -8993,7 +9197,8 @@ static void gf8_muladd_CB(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_CC(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_CC(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9039,7 +9244,8 @@ static void gf8_muladd_CC(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_CD(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_CD(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9083,7 +9289,8 @@ static void gf8_muladd_CD(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_CE(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_CE(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9128,7 +9335,8 @@ static void gf8_muladd_CE(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_CF(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_CF(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9173,7 +9381,8 @@ static void gf8_muladd_CF(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D0(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D0(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9220,7 +9429,8 @@ static void gf8_muladd_D0(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D1(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D1(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9265,7 +9475,8 @@ static void gf8_muladd_D1(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D2(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D2(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9308,7 +9519,8 @@ static void gf8_muladd_D2(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D3(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D3(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9354,7 +9566,8 @@ static void gf8_muladd_D3(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D4(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D4(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9399,7 +9612,8 @@ static void gf8_muladd_D4(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D5(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D5(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9444,7 +9658,8 @@ static void gf8_muladd_D5(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D6(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D6(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9488,7 +9703,8 @@ static void gf8_muladd_D6(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D7(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D7(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9533,7 +9749,8 @@ static void gf8_muladd_D7(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D8(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D8(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9577,7 +9794,8 @@ static void gf8_muladd_D8(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_D9(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_D9(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9618,7 +9836,8 @@ static void gf8_muladd_D9(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_DA(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_DA(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9662,7 +9881,8 @@ static void gf8_muladd_DA(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_DB(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_DB(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9709,7 +9929,8 @@ static void gf8_muladd_DB(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_DC(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_DC(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9755,7 +9976,8 @@ static void gf8_muladd_DC(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_DD(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_DD(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9796,7 +10018,8 @@ static void gf8_muladd_DD(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_DE(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_DE(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9840,7 +10063,8 @@ static void gf8_muladd_DE(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_DF(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_DF(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9885,7 +10109,8 @@ static void gf8_muladd_DF(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E0(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E0(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9929,7 +10154,8 @@ static void gf8_muladd_E0(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E1(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E1(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -9975,7 +10201,8 @@ static void gf8_muladd_E1(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E2(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E2(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10016,7 +10243,8 @@ static void gf8_muladd_E2(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E3(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E3(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10063,7 +10291,8 @@ static void gf8_muladd_E3(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E4(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E4(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10108,7 +10337,8 @@ static void gf8_muladd_E4(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E5(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E5(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10153,7 +10383,8 @@ static void gf8_muladd_E5(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E6(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E6(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10194,7 +10425,8 @@ static void gf8_muladd_E6(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E7(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E7(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10241,7 +10473,8 @@ static void gf8_muladd_E7(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E8(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E8(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10287,7 +10520,8 @@ static void gf8_muladd_E8(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_E9(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_E9(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10332,7 +10566,8 @@ static void gf8_muladd_E9(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_EA(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_EA(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10373,7 +10608,8 @@ static void gf8_muladd_EA(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_EB(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_EB(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10417,7 +10653,8 @@ static void gf8_muladd_EB(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_EC(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_EC(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10458,7 +10695,8 @@ static void gf8_muladd_EC(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_ED(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_ED(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10502,7 +10740,8 @@ static void gf8_muladd_ED(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_EE(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_EE(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10548,7 +10787,8 @@ static void gf8_muladd_EE(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_EF(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_EF(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10592,7 +10832,8 @@ static void gf8_muladd_EF(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F0(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F0(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10638,7 +10879,8 @@ static void gf8_muladd_F0(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F1(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F1(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10684,7 +10926,8 @@ static void gf8_muladd_F1(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F2(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F2(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10730,7 +10973,8 @@ static void gf8_muladd_F2(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F3(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F3(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10774,7 +11018,8 @@ static void gf8_muladd_F3(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F4(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F4(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10817,7 +11062,8 @@ static void gf8_muladd_F4(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F5(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F5(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10860,7 +11106,8 @@ static void gf8_muladd_F5(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F6(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F6(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10904,7 +11151,8 @@ static void gf8_muladd_F6(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F7(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F7(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10947,7 +11195,8 @@ static void gf8_muladd_F7(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F8(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F8(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -10992,7 +11241,8 @@ static void gf8_muladd_F8(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_F9(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_F9(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11039,7 +11289,8 @@ static void gf8_muladd_F9(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_FA(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_FA(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11085,7 +11336,8 @@ static void gf8_muladd_FA(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_FB(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_FB(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11129,7 +11381,8 @@ static void gf8_muladd_FB(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_FC(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_FC(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11175,7 +11428,8 @@ static void gf8_muladd_FC(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_FD(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_FD(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11221,7 +11475,8 @@ static void gf8_muladd_FD(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_FE(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_FE(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11268,7 +11523,8 @@ static void gf8_muladd_FE(void *out, void *in)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void gf8_muladd_FF(void *out, void *in)</div><div class='add'>+static void</div><div class='add'>+gf8_muladd_FF(void *out, void *in)</div><div class='ctx'> {</div><div class='ctx'>     unsigned int i;</div><div class='ctx'>     uint64_t *in_ptr = (uint64_t *)in;</div><div class='hunk'>@@ -11315,75 +11571,65 @@ static void gf8_muladd_FF(void *out, void *in)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void (*gf8_muladd[])(void *out, void *in) = {</div><div class='del'>-    gf8_muladd_00, gf8_muladd_01, gf8_muladd_02, gf8_muladd_03,</div><div class='del'>-    gf8_muladd_04, gf8_muladd_05, gf8_muladd_06, gf8_muladd_07,</div><div class='del'>-    gf8_muladd_08, gf8_muladd_09, gf8_muladd_0A, gf8_muladd_0B,</div><div class='del'>-    gf8_muladd_0C, gf8_muladd_0D, gf8_muladd_0E, gf8_muladd_0F,</div><div class='del'>-    gf8_muladd_10, gf8_muladd_11, gf8_muladd_12, gf8_muladd_13,</div><div class='del'>-    gf8_muladd_14, gf8_muladd_15, gf8_muladd_16, gf8_muladd_17,</div><div class='del'>-    gf8_muladd_18, gf8_muladd_19, gf8_muladd_1A, gf8_muladd_1B,</div><div class='del'>-    gf8_muladd_1C, gf8_muladd_1D, gf8_muladd_1E, gf8_muladd_1F,</div><div class='del'>-    gf8_muladd_20, gf8_muladd_21, gf8_muladd_22, gf8_muladd_23,</div><div class='del'>-    gf8_muladd_24, gf8_muladd_25, gf8_muladd_26, gf8_muladd_27,</div><div class='del'>-    gf8_muladd_28, gf8_muladd_29, gf8_muladd_2A, gf8_muladd_2B,</div><div class='del'>-    gf8_muladd_2C, gf8_muladd_2D, gf8_muladd_2E, gf8_muladd_2F,</div><div class='del'>-    gf8_muladd_30, gf8_muladd_31, gf8_muladd_32, gf8_muladd_33,</div><div class='del'>-    gf8_muladd_34, gf8_muladd_35, gf8_muladd_36, gf8_muladd_37,</div><div class='del'>-    gf8_muladd_38, gf8_muladd_39, gf8_muladd_3A, gf8_muladd_3B,</div><div class='del'>-    gf8_muladd_3C, gf8_muladd_3D, gf8_muladd_3E, gf8_muladd_3F,</div><div class='del'>-    gf8_muladd_40, gf8_muladd_41, gf8_muladd_42, gf8_muladd_43,</div><div class='del'>-    gf8_muladd_44, gf8_muladd_45, gf8_muladd_46, gf8_muladd_47,</div><div class='del'>-    gf8_muladd_48, gf8_muladd_49, gf8_muladd_4A, gf8_muladd_4B,</div><div class='del'>-    gf8_muladd_4C, gf8_muladd_4D, gf8_muladd_4E, gf8_muladd_4F,</div><div class='del'>-    gf8_muladd_50, gf8_muladd_51, gf8_muladd_52, gf8_muladd_53,</div><div class='del'>-    gf8_muladd_54, gf8_muladd_55, gf8_muladd_56, gf8_muladd_57,</div><div class='del'>-    gf8_muladd_58, gf8_muladd_59, gf8_muladd_5A, gf8_muladd_5B,</div><div class='del'>-    gf8_muladd_5C, gf8_muladd_5D, gf8_muladd_5E, gf8_muladd_5F,</div><div class='del'>-    gf8_muladd_60, gf8_muladd_61, gf8_muladd_62, gf8_muladd_63,</div><div class='del'>-    gf8_muladd_64, gf8_muladd_65, gf8_muladd_66, gf8_muladd_67,</div><div class='del'>-    gf8_muladd_68, gf8_muladd_69, gf8_muladd_6A, gf8_muladd_6B,</div><div class='del'>-    gf8_muladd_6C, gf8_muladd_6D, gf8_muladd_6E, gf8_muladd_6F,</div><div class='del'>-    gf8_muladd_70, gf8_muladd_71, gf8_muladd_72, gf8_muladd_73,</div><div class='del'>-    gf8_muladd_74, gf8_muladd_75, gf8_muladd_76, gf8_muladd_77,</div><div class='del'>-    gf8_muladd_78, gf8_muladd_79, gf8_muladd_7A, gf8_muladd_7B,</div><div class='del'>-    gf8_muladd_7C, gf8_muladd_7D, gf8_muladd_7E, gf8_muladd_7F,</div><div class='del'>-    gf8_muladd_80, gf8_muladd_81, gf8_muladd_82, gf8_muladd_83,</div><div class='del'>-    gf8_muladd_84, gf8_muladd_85, gf8_muladd_86, gf8_muladd_87,</div><div class='del'>-    gf8_muladd_88, gf8_muladd_89, gf8_muladd_8A, gf8_muladd_8B,</div><div class='del'>-    gf8_muladd_8C, gf8_muladd_8D, gf8_muladd_8E, gf8_muladd_8F,</div><div class='del'>-    gf8_muladd_90, gf8_muladd_91, gf8_muladd_92, gf8_muladd_93,</div><div class='del'>-    gf8_muladd_94, gf8_muladd_95, gf8_muladd_96, gf8_muladd_97,</div><div class='del'>-    gf8_muladd_98, gf8_muladd_99, gf8_muladd_9A, gf8_muladd_9B,</div><div class='del'>-    gf8_muladd_9C, gf8_muladd_9D, gf8_muladd_9E, gf8_muladd_9F,</div><div class='del'>-    gf8_muladd_A0, gf8_muladd_A1, gf8_muladd_A2, gf8_muladd_A3,</div><div class='del'>-    gf8_muladd_A4, gf8_muladd_A5, gf8_muladd_A6, gf8_muladd_A7,</div><div class='del'>-    gf8_muladd_A8, gf8_muladd_A9, gf8_muladd_AA, gf8_muladd_AB,</div><div class='del'>-    gf8_muladd_AC, gf8_muladd_AD, gf8_muladd_AE, gf8_muladd_AF,</div><div class='del'>-    gf8_muladd_B0, gf8_muladd_B1, gf8_muladd_B2, gf8_muladd_B3,</div><div class='del'>-    gf8_muladd_B4, gf8_muladd_B5, gf8_muladd_B6, gf8_muladd_B7,</div><div class='del'>-    gf8_muladd_B8, gf8_muladd_B9, gf8_muladd_BA, gf8_muladd_BB,</div><div class='del'>-    gf8_muladd_BC, gf8_muladd_BD, gf8_muladd_BE, gf8_muladd_BF,</div><div class='del'>-    gf8_muladd_C0, gf8_muladd_C1, gf8_muladd_C2, gf8_muladd_C3,</div><div class='del'>-    gf8_muladd_C4, gf8_muladd_C5, gf8_muladd_C6, gf8_muladd_C7,</div><div class='del'>-    gf8_muladd_C8, gf8_muladd_C9, gf8_muladd_CA, gf8_muladd_CB,</div><div class='del'>-    gf8_muladd_CC, gf8_muladd_CD, gf8_muladd_CE, gf8_muladd_CF,</div><div class='del'>-    gf8_muladd_D0, gf8_muladd_D1, gf8_muladd_D2, gf8_muladd_D3,</div><div class='del'>-    gf8_muladd_D4, gf8_muladd_D5, gf8_muladd_D6, gf8_muladd_D7,</div><div class='del'>-    gf8_muladd_D8, gf8_muladd_D9, gf8_muladd_DA, gf8_muladd_DB,</div><div class='del'>-    gf8_muladd_DC, gf8_muladd_DD, gf8_muladd_DE, gf8_muladd_DF,</div><div class='del'>-    gf8_muladd_E0, gf8_muladd_E1, gf8_muladd_E2, gf8_muladd_E3,</div><div class='del'>-    gf8_muladd_E4, gf8_muladd_E5, gf8_muladd_E6, gf8_muladd_E7,</div><div class='del'>-    gf8_muladd_E8, gf8_muladd_E9, gf8_muladd_EA, gf8_muladd_EB,</div><div class='del'>-    gf8_muladd_EC, gf8_muladd_ED, gf8_muladd_EE, gf8_muladd_EF,</div><div class='del'>-    gf8_muladd_F0, gf8_muladd_F1, gf8_muladd_F2, gf8_muladd_F3,</div><div class='del'>-    gf8_muladd_F4, gf8_muladd_F5, gf8_muladd_F6, gf8_muladd_F7,</div><div class='del'>-    gf8_muladd_F8, gf8_muladd_F9, gf8_muladd_FA, gf8_muladd_FB,</div><div class='del'>-    gf8_muladd_FC, gf8_muladd_FD, gf8_muladd_FE, gf8_muladd_FF</div><div class='add'>+    gf8_muladd_00, gf8_muladd_01, gf8_muladd_02, gf8_muladd_03, gf8_muladd_04,</div><div class='add'>+    gf8_muladd_05, gf8_muladd_06, gf8_muladd_07, gf8_muladd_08, gf8_muladd_09,</div><div class='add'>+    gf8_muladd_0A, gf8_muladd_0B, gf8_muladd_0C, gf8_muladd_0D, gf8_muladd_0E,</div><div class='add'>+    gf8_muladd_0F, gf8_muladd_10, gf8_muladd_11, gf8_muladd_12, gf8_muladd_13,</div><div class='add'>+    gf8_muladd_14, gf8_muladd_15, gf8_muladd_16, gf8_muladd_17, gf8_muladd_18,</div><div class='add'>+    gf8_muladd_19, gf8_muladd_1A, gf8_muladd_1B, gf8_muladd_1C, gf8_muladd_1D,</div><div class='add'>+    gf8_muladd_1E, gf8_muladd_1F, gf8_muladd_20, gf8_muladd_21, gf8_muladd_22,</div><div class='add'>+    gf8_muladd_23, gf8_muladd_24, gf8_muladd_25, gf8_muladd_26, gf8_muladd_27,</div><div class='add'>+    gf8_muladd_28, gf8_muladd_29, gf8_muladd_2A, gf8_muladd_2B, gf8_muladd_2C,</div><div class='add'>+    gf8_muladd_2D, gf8_muladd_2E, gf8_muladd_2F, gf8_muladd_30, gf8_muladd_31,</div><div class='add'>+    gf8_muladd_32, gf8_muladd_33, gf8_muladd_34, gf8_muladd_35, gf8_muladd_36,</div><div class='add'>+    gf8_muladd_37, gf8_muladd_38, gf8_muladd_39, gf8_muladd_3A, gf8_muladd_3B,</div><div class='add'>+    gf8_muladd_3C, gf8_muladd_3D, gf8_muladd_3E, gf8_muladd_3F, gf8_muladd_40,</div><div class='add'>+    gf8_muladd_41, gf8_muladd_42, gf8_muladd_43, gf8_muladd_44, gf8_muladd_45,</div><div class='add'>+    gf8_muladd_46, gf8_muladd_47, gf8_muladd_48, gf8_muladd_49, gf8_muladd_4A,</div><div class='add'>+    gf8_muladd_4B, gf8_muladd_4C, gf8_muladd_4D, gf8_muladd_4E, gf8_muladd_4F,</div><div class='add'>+    gf8_muladd_50, gf8_muladd_51, gf8_muladd_52, gf8_muladd_53, gf8_muladd_54,</div><div class='add'>+    gf8_muladd_55, gf8_muladd_56, gf8_muladd_57, gf8_muladd_58, gf8_muladd_59,</div><div class='add'>+    gf8_muladd_5A, gf8_muladd_5B, gf8_muladd_5C, gf8_muladd_5D, gf8_muladd_5E,</div><div class='add'>+    gf8_muladd_5F, gf8_muladd_60, gf8_muladd_61, gf8_muladd_62, gf8_muladd_63,</div><div class='add'>+    gf8_muladd_64, gf8_muladd_65, gf8_muladd_66, gf8_muladd_67, gf8_muladd_68,</div><div class='add'>+    gf8_muladd_69, gf8_muladd_6A, gf8_muladd_6B, gf8_muladd_6C, gf8_muladd_6D,</div><div class='add'>+    gf8_muladd_6E, gf8_muladd_6F, gf8_muladd_70, gf8_muladd_71, gf8_muladd_72,</div><div class='add'>+    gf8_muladd_73, gf8_muladd_74, gf8_muladd_75, gf8_muladd_76, gf8_muladd_77,</div><div class='add'>+    gf8_muladd_78, gf8_muladd_79, gf8_muladd_7A, gf8_muladd_7B, gf8_muladd_7C,</div><div class='add'>+    gf8_muladd_7D, gf8_muladd_7E, gf8_muladd_7F, gf8_muladd_80, gf8_muladd_81,</div><div class='add'>+    gf8_muladd_82, gf8_muladd_83, gf8_muladd_84, gf8_muladd_85, gf8_muladd_86,</div><div class='add'>+    gf8_muladd_87, gf8_muladd_88, gf8_muladd_89, gf8_muladd_8A, gf8_muladd_8B,</div><div class='add'>+    gf8_muladd_8C, gf8_muladd_8D, gf8_muladd_8E, gf8_muladd_8F, gf8_muladd_90,</div><div class='add'>+    gf8_muladd_91, gf8_muladd_92, gf8_muladd_93, gf8_muladd_94, gf8_muladd_95,</div><div class='add'>+    gf8_muladd_96, gf8_muladd_97, gf8_muladd_98, gf8_muladd_99, gf8_muladd_9A,</div><div class='add'>+    gf8_muladd_9B, gf8_muladd_9C, gf8_muladd_9D, gf8_muladd_9E, gf8_muladd_9F,</div><div class='add'>+    gf8_muladd_A0, gf8_muladd_A1, gf8_muladd_A2, gf8_muladd_A3, gf8_muladd_A4,</div><div class='add'>+    gf8_muladd_A5, gf8_muladd_A6, gf8_muladd_A7, gf8_muladd_A8, gf8_muladd_A9,</div><div class='add'>+    gf8_muladd_AA, gf8_muladd_AB, gf8_muladd_AC, gf8_muladd_AD, gf8_muladd_AE,</div><div class='add'>+    gf8_muladd_AF, gf8_muladd_B0, gf8_muladd_B1, gf8_muladd_B2, gf8_muladd_B3,</div><div class='add'>+    gf8_muladd_B4, gf8_muladd_B5, gf8_muladd_B6, gf8_muladd_B7, gf8_muladd_B8,</div><div class='add'>+    gf8_muladd_B9, gf8_muladd_BA, gf8_muladd_BB, gf8_muladd_BC, gf8_muladd_BD,</div><div class='add'>+    gf8_muladd_BE, gf8_muladd_BF, gf8_muladd_C0, gf8_muladd_C1, gf8_muladd_C2,</div><div class='add'>+    gf8_muladd_C3, gf8_muladd_C4, gf8_muladd_C5, gf8_muladd_C6, gf8_muladd_C7,</div><div class='add'>+    gf8_muladd_C8, gf8_muladd_C9, gf8_muladd_CA, gf8_muladd_CB, gf8_muladd_CC,</div><div class='add'>+    gf8_muladd_CD, gf8_muladd_CE, gf8_muladd_CF, gf8_muladd_D0, gf8_muladd_D1,</div><div class='add'>+    gf8_muladd_D2, gf8_muladd_D3, gf8_muladd_D4, gf8_muladd_D5, gf8_muladd_D6,</div><div class='add'>+    gf8_muladd_D7, gf8_muladd_D8, gf8_muladd_D9, gf8_muladd_DA, gf8_muladd_DB,</div><div class='add'>+    gf8_muladd_DC, gf8_muladd_DD, gf8_muladd_DE, gf8_muladd_DF, gf8_muladd_E0,</div><div class='add'>+    gf8_muladd_E1, gf8_muladd_E2, gf8_muladd_E3, gf8_muladd_E4, gf8_muladd_E5,</div><div class='add'>+    gf8_muladd_E6, gf8_muladd_E7, gf8_muladd_E8, gf8_muladd_E9, gf8_muladd_EA,</div><div class='add'>+    gf8_muladd_EB, gf8_muladd_EC, gf8_muladd_ED, gf8_muladd_EE, gf8_muladd_EF,</div><div class='add'>+    gf8_muladd_F0, gf8_muladd_F1, gf8_muladd_F2, gf8_muladd_F3, gf8_muladd_F4,</div><div class='add'>+    gf8_muladd_F5, gf8_muladd_F6, gf8_muladd_F7, gf8_muladd_F8, gf8_muladd_F9,</div><div class='add'>+    gf8_muladd_FA, gf8_muladd_FB, gf8_muladd_FC, gf8_muladd_FD, gf8_muladd_FE,</div><div class='add'>+    gf8_muladd_FF};</div><div class='add'>+</div><div class='add'>+static uint64_t zero[EC_METHOD_WORD_SIZE * 8] = {</div><div class='add'>+    0,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static uint64_t zero[EC_METHOD_WORD_SIZE * 8] = {0, };</div><div class='del'>-</div><div class='del'>-void ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count)</div><div class='add'>+void</div><div class='add'>+ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count)</div><div class='ctx'> {</div><div class='ctx'>     uint32_t i, last, tmp;</div><div class='ctx'> </div><div class='hunk'>@@ -11397,8 +11643,9 @@ void ec_code_c_prepare(ec_gf_t *gf, uint32_t *values, uint32_t count)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values,</div><div class='del'>-                      uint32_t count)</div><div class='add'>+void</div><div class='add'>+ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values,</div><div class='add'>+                 uint32_t count)</div><div class='ctx'> {</div><div class='ctx'>     src += offset;</div><div class='ctx'>     gf8_muladd_00(dst, src);</div><div class='hunk'>@@ -11409,8 +11656,9 @@ void ec_code_c_linear(void *dst, void *src, uint64_t offset, uint32_t *values,</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_code_c_interleaved(void *dst, void **src, uint64_t offset,</div><div class='del'>-                           uint32_t *values, uint32_t count)</div><div class='add'>+void</div><div class='add'>+ec_code_c_interleaved(void *dst, void **src, uint64_t offset, uint32_t *values,</div><div class='add'>+                      uint32_t count)</div><div class='ctx'> {</div><div class='ctx'>     uint32_t i, last, tmp;</div><div class='ctx'> </div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-code-intel.c b/xlators/cluster/ec/src/ec-code-intel.c<br/>index b9fdcad4421..f1c4e13e321 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-intel.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-code-intel.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-intel.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-intel.c</a></div><div class='hunk'>@@ -71,16 +71,15 @@ ec_code_intel_vex(ec_code_intel_t *intel, gf_boolean_t w, gf_boolean_t l,</div><div class='ctx'>                   uint32_t reg)</div><div class='ctx'> {</div><div class='ctx'>     ec_code_intel_rex(intel, w);</div><div class='del'>-    if (((intel-&gt;rex.w == 1) ||</div><div class='del'>-         (intel-&gt;rex.x == 0) ||</div><div class='del'>-         (intel-&gt;rex.b == 0)) ||</div><div class='add'>+    if (((intel-&gt;rex.w == 1) || (intel-&gt;rex.x == 0) || (intel-&gt;rex.b == 0)) ||</div><div class='ctx'>         ((opcode != VEX_OPCODE_NONE) &amp;&amp; (opcode != VEX_OPCODE_0F))) {</div><div class='ctx'>         intel-&gt;rex.present = _gf_false;</div><div class='ctx'> </div><div class='ctx'>         intel-&gt;vex.bytes = 3;</div><div class='ctx'>         intel-&gt;vex.data[0] = 0xC4;</div><div class='ctx'>         intel-&gt;vex.data[1] = ((intel-&gt;rex.r &lt;&lt; 7) | (intel-&gt;rex.x &lt;&lt; 6) |</div><div class='del'>-                              (intel-&gt;rex.b &lt;&lt; 5) | opcode) ^ 0xE0;</div><div class='add'>+                              (intel-&gt;rex.b &lt;&lt; 5) | opcode) ^</div><div class='add'>+                             0xE0;</div><div class='ctx'>         intel-&gt;vex.data[2] = (intel-&gt;rex.w &lt;&lt; 7) | ((~reg &amp; 0x0F) &lt;&lt; 3) |</div><div class='ctx'>                              (l ? 0x04 : 0x00) | prefix;</div><div class='ctx'>     } else {</div><div class='hunk'>@@ -214,22 +213,17 @@ ec_code_intel_emit(ec_code_builder_t *builder, ec_code_intel_t *intel)</div><div class='ctx'>         insn[count++] = intel-&gt;vex.data[i];</div><div class='ctx'>     }</div><div class='ctx'>     if (intel-&gt;rex.present) {</div><div class='del'>-        insn[count++] = 0x40 |</div><div class='del'>-                        (intel-&gt;rex.w &lt;&lt; 3) |</div><div class='del'>-                        (intel-&gt;rex.r &lt;&lt; 2) |</div><div class='del'>-                        (intel-&gt;rex.x &lt;&lt; 1) |</div><div class='del'>-                        (intel-&gt;rex.b &lt;&lt; 0);</div><div class='add'>+        insn[count++] = 0x40 | (intel-&gt;rex.w &lt;&lt; 3) | (intel-&gt;rex.r &lt;&lt; 2) |</div><div class='add'>+                        (intel-&gt;rex.x &lt;&lt; 1) | (intel-&gt;rex.b &lt;&lt; 0);</div><div class='ctx'>     }</div><div class='ctx'>     for (i = 0; i &lt; intel-&gt;opcode.bytes; i++) {</div><div class='ctx'>         insn[count++] = intel-&gt;opcode.data[i];</div><div class='ctx'>     }</div><div class='ctx'>     if (intel-&gt;modrm.present) {</div><div class='del'>-        insn[count++] = (intel-&gt;modrm.mod &lt;&lt; 6) |</div><div class='del'>-                        (intel-&gt;modrm.reg &lt;&lt; 3) |</div><div class='add'>+        insn[count++] = (intel-&gt;modrm.mod &lt;&lt; 6) | (intel-&gt;modrm.reg &lt;&lt; 3) |</div><div class='ctx'>                         (intel-&gt;modrm.rm &lt;&lt; 0);</div><div class='ctx'>         if (intel-&gt;sib.present) {</div><div class='del'>-            insn[count++] = (intel-&gt;sib.scale &lt;&lt; 6) |</div><div class='del'>-                            (intel-&gt;sib.index &lt;&lt; 3) |</div><div class='add'>+            insn[count++] = (intel-&gt;sib.scale &lt;&lt; 6) | (intel-&gt;sib.index &lt;&lt; 3) |</div><div class='ctx'>                             (intel-&gt;sib.base &lt;&lt; 0);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='hunk'>@@ -467,9 +461,9 @@ ec_code_intel_op_mov_sse2m(ec_code_builder_t *builder, uint32_t src,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_code_intel_op_mov_m2sse(ec_code_builder_t *builder,</div><div class='del'>-                           ec_code_intel_reg_t base, ec_code_intel_reg_t index,</div><div class='del'>-                           uint32_t scale, int32_t offset, uint32_t dst)</div><div class='add'>+ec_code_intel_op_mov_m2sse(ec_code_builder_t *builder, ec_code_intel_reg_t base,</div><div class='add'>+                           ec_code_intel_reg_t index, uint32_t scale,</div><div class='add'>+                           int32_t offset, uint32_t dst)</div><div class='ctx'> {</div><div class='ctx'>     ec_code_intel_t intel;</div><div class='ctx'> </div><div class='hunk'>@@ -500,9 +494,9 @@ ec_code_intel_op_xor_sse2sse(ec_code_builder_t *builder, uint32_t src,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_code_intel_op_xor_m2sse(ec_code_builder_t *builder,</div><div class='del'>-                           ec_code_intel_reg_t base, ec_code_intel_reg_t index,</div><div class='del'>-                           uint32_t scale, int32_t offset, uint32_t dst)</div><div class='add'>+ec_code_intel_op_xor_m2sse(ec_code_builder_t *builder, ec_code_intel_reg_t base,</div><div class='add'>+                           ec_code_intel_reg_t index, uint32_t scale,</div><div class='add'>+                           int32_t offset, uint32_t dst)</div><div class='ctx'> {</div><div class='ctx'>     ec_code_intel_t intel;</div><div class='ctx'> </div><div class='hunk'>@@ -526,8 +520,8 @@ ec_code_intel_op_mov_avx2avx(ec_code_builder_t *builder, uint32_t src,</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_modrm_reg(&amp;intel, src, dst);</div><div class='ctx'>     ec_code_intel_op_1(&amp;intel, 0x6F, 0);</div><div class='del'>-    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F,</div><div class='del'>-                      VEX_PREFIX_66, VEX_REG_NONE);</div><div class='add'>+    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66,</div><div class='add'>+                      VEX_REG_NONE);</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_emit(builder, &amp;intel);</div><div class='ctx'> }</div><div class='hunk'>@@ -543,16 +537,16 @@ ec_code_intel_op_mov_avx2m(ec_code_builder_t *builder, uint32_t src,</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_modrm_mem(&amp;intel, src, base, index, scale, offset);</div><div class='ctx'>     ec_code_intel_op_1(&amp;intel, 0x7F, 0);</div><div class='del'>-    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F,</div><div class='del'>-                      VEX_PREFIX_66, VEX_REG_NONE);</div><div class='add'>+    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66,</div><div class='add'>+                      VEX_REG_NONE);</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_emit(builder, &amp;intel);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder,</div><div class='del'>-                           ec_code_intel_reg_t base, ec_code_intel_reg_t index,</div><div class='del'>-                           uint32_t scale, int32_t offset, uint32_t dst)</div><div class='add'>+ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder, ec_code_intel_reg_t base,</div><div class='add'>+                           ec_code_intel_reg_t index, uint32_t scale,</div><div class='add'>+                           int32_t offset, uint32_t dst)</div><div class='ctx'> {</div><div class='ctx'>     ec_code_intel_t intel;</div><div class='ctx'> </div><div class='hunk'>@@ -560,8 +554,8 @@ ec_code_intel_op_mov_m2avx(ec_code_builder_t *builder,</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_modrm_mem(&amp;intel, dst, base, index, scale, offset);</div><div class='ctx'>     ec_code_intel_op_1(&amp;intel, 0x6F, 0);</div><div class='del'>-    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F,</div><div class='del'>-                      VEX_PREFIX_66, VEX_REG_NONE);</div><div class='add'>+    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66,</div><div class='add'>+                      VEX_REG_NONE);</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_emit(builder, &amp;intel);</div><div class='ctx'> }</div><div class='hunk'>@@ -576,16 +570,16 @@ ec_code_intel_op_xor_avx2avx(ec_code_builder_t *builder, uint32_t src,</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_modrm_reg(&amp;intel, src, dst);</div><div class='ctx'>     ec_code_intel_op_1(&amp;intel, 0xEF, 0);</div><div class='del'>-    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F,</div><div class='del'>-                      VEX_PREFIX_66, dst);</div><div class='add'>+    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66,</div><div class='add'>+                      dst);</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_emit(builder, &amp;intel);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder,</div><div class='del'>-                           ec_code_intel_reg_t base, ec_code_intel_reg_t index,</div><div class='del'>-                           uint32_t scale, int32_t offset, uint32_t dst)</div><div class='add'>+ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder, ec_code_intel_reg_t base,</div><div class='add'>+                           ec_code_intel_reg_t index, uint32_t scale,</div><div class='add'>+                           int32_t offset, uint32_t dst)</div><div class='ctx'> {</div><div class='ctx'>     ec_code_intel_t intel;</div><div class='ctx'> </div><div class='hunk'>@@ -593,8 +587,8 @@ ec_code_intel_op_xor_m2avx(ec_code_builder_t *builder,</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_modrm_mem(&amp;intel, dst, base, index, scale, offset);</div><div class='ctx'>     ec_code_intel_op_1(&amp;intel, 0xEF, 0);</div><div class='del'>-    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F,</div><div class='del'>-                      VEX_PREFIX_66, dst);</div><div class='add'>+    ec_code_intel_vex(&amp;intel, _gf_false, _gf_true, VEX_OPCODE_0F, VEX_PREFIX_66,</div><div class='add'>+                      dst);</div><div class='ctx'> </div><div class='ctx'>     ec_code_intel_emit(builder, &amp;intel);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-code-sse.c b/xlators/cluster/ec/src/ec-code-sse.c<br/>index 6f2c6fa593f..e11e7ff8400 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-sse.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-code-sse.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-sse.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-sse.c</a></div><div class='hunk'>@@ -34,10 +34,9 @@ ec_code_sse_load(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>                  uint32_t bit)</div><div class='ctx'> {</div><div class='ctx'>     if (builder-&gt;linear) {</div><div class='del'>-        ec_code_intel_op_mov_m2sse(builder, REG_SI, REG_DX, 1,</div><div class='del'>-                                   idx * builder-&gt;width * builder-&gt;bits +</div><div class='del'>-                                   bit * builder-&gt;width,</div><div class='del'>-                                   dst);</div><div class='add'>+        ec_code_intel_op_mov_m2sse(</div><div class='add'>+            builder, REG_SI, REG_DX, 1,</div><div class='add'>+            idx * builder-&gt;width * builder-&gt;bits + bit * builder-&gt;width, dst);</div><div class='ctx'>     } else {</div><div class='ctx'>         if (builder-&gt;base != idx) {</div><div class='ctx'>             ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8,</div><div class='hunk'>@@ -73,10 +72,9 @@ ec_code_sse_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>                  uint32_t bit)</div><div class='ctx'> {</div><div class='ctx'>     if (builder-&gt;linear) {</div><div class='del'>-       ec_code_intel_op_xor_m2sse(builder, REG_SI, REG_DX, 1,</div><div class='del'>-                                  idx * builder-&gt;width * builder-&gt;bits +</div><div class='del'>-                                  bit * builder-&gt;width,</div><div class='del'>-                                  dst);</div><div class='add'>+        ec_code_intel_op_xor_m2sse(</div><div class='add'>+            builder, REG_SI, REG_DX, 1,</div><div class='add'>+            idx * builder-&gt;width * builder-&gt;bits + bit * builder-&gt;width, dst);</div><div class='ctx'>     } else {</div><div class='ctx'>         if (builder-&gt;base != idx) {</div><div class='ctx'>             ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8,</div><div class='hunk'>@@ -88,21 +86,16 @@ ec_code_sse_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *ec_code_sse_needed_flags[] = {</div><div class='del'>-    "sse2",</div><div class='del'>-    NULL</div><div class='del'>-};</div><div class='add'>+static char *ec_code_sse_needed_flags[] = {"sse2", NULL};</div><div class='ctx'> </div><div class='del'>-ec_code_gen_t ec_code_gen_sse = {</div><div class='del'>-    .name   = "sse",</div><div class='del'>-    .flags  = ec_code_sse_needed_flags,</div><div class='del'>-    .width  = 16,</div><div class='del'>-    .prolog = ec_code_sse_prolog,</div><div class='del'>-    .epilog = ec_code_sse_epilog,</div><div class='del'>-    .load   = ec_code_sse_load,</div><div class='del'>-    .store  = ec_code_sse_store,</div><div class='del'>-    .copy   = ec_code_sse_copy,</div><div class='del'>-    .xor2   = ec_code_sse_xor2,</div><div class='del'>-    .xor3   = NULL,</div><div class='del'>-    .xorm   = ec_code_sse_xorm</div><div class='del'>-};</div><div class='add'>+ec_code_gen_t ec_code_gen_sse = {.name = "sse",</div><div class='add'>+                                 .flags = ec_code_sse_needed_flags,</div><div class='add'>+                                 .width = 16,</div><div class='add'>+                                 .prolog = ec_code_sse_prolog,</div><div class='add'>+                                 .epilog = ec_code_sse_epilog,</div><div class='add'>+                                 .load = ec_code_sse_load,</div><div class='add'>+                                 .store = ec_code_sse_store,</div><div class='add'>+                                 .copy = ec_code_sse_copy,</div><div class='add'>+                                 .xor2 = ec_code_sse_xor2,</div><div class='add'>+                                 .xor3 = NULL,</div><div class='add'>+                                 .xorm = ec_code_sse_xorm};</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-code-x64.c b/xlators/cluster/ec/src/ec-code-x64.c<br/>index cfec4b3be7a..26565b4493f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-x64.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-code-x64.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code-x64.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code-x64.c</a></div><div class='hunk'>@@ -14,8 +14,7 @@</div><div class='ctx'> </div><div class='ctx'> static ec_code_intel_reg_t ec_code_x64_regmap[] = {</div><div class='ctx'>     REG_AX, REG_CX, REG_BP, REG_8,  REG_9, REG_10,</div><div class='del'>-    REG_11, REG_12, REG_13, REG_14, REG_15</div><div class='del'>-};</div><div class='add'>+    REG_11, REG_12, REG_13, REG_14, REG_15};</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> ec_code_x64_prolog(ec_code_builder_t *builder)</div><div class='hunk'>@@ -68,10 +67,9 @@ ec_code_x64_load(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>     dst = ec_code_x64_regmap[dst];</div><div class='ctx'> </div><div class='ctx'>     if (builder-&gt;linear) {</div><div class='del'>-        ec_code_intel_op_mov_m2r(builder, REG_SI, REG_DX, 1,</div><div class='del'>-                                 idx * builder-&gt;width * builder-&gt;bits +</div><div class='del'>-                                 bit * builder-&gt;width,</div><div class='del'>-                                 dst);</div><div class='add'>+        ec_code_intel_op_mov_m2r(</div><div class='add'>+            builder, REG_SI, REG_DX, 1,</div><div class='add'>+            idx * builder-&gt;width * builder-&gt;bits + bit * builder-&gt;width, dst);</div><div class='ctx'>     } else {</div><div class='ctx'>         if (builder-&gt;base != idx) {</div><div class='ctx'>             ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8,</div><div class='hunk'>@@ -117,10 +115,9 @@ ec_code_x64_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>     dst = ec_code_x64_regmap[dst];</div><div class='ctx'> </div><div class='ctx'>     if (builder-&gt;linear) {</div><div class='del'>-        ec_code_intel_op_xor_m2r(builder, REG_SI, REG_DX, 1,</div><div class='del'>-                                 idx * builder-&gt;width * builder-&gt;bits +</div><div class='del'>-                                 bit * builder-&gt;width,</div><div class='del'>-                                 dst);</div><div class='add'>+        ec_code_intel_op_xor_m2r(</div><div class='add'>+            builder, REG_SI, REG_DX, 1,</div><div class='add'>+            idx * builder-&gt;width * builder-&gt;bits + bit * builder-&gt;width, dst);</div><div class='ctx'>     } else {</div><div class='ctx'>         if (builder-&gt;base != idx) {</div><div class='ctx'>             ec_code_intel_op_mov_m2r(builder, REG_SI, REG_NULL, 0, idx * 8,</div><div class='hunk'>@@ -132,20 +129,16 @@ ec_code_x64_xorm(ec_code_builder_t *builder, uint32_t dst, uint32_t idx,</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *ec_code_x64_needed_flags[] = {</div><div class='del'>-    NULL</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-ec_code_gen_t ec_code_gen_x64 = {</div><div class='del'>-    .name   = "x64",</div><div class='del'>-    .flags  = ec_code_x64_needed_flags,</div><div class='del'>-    .width  = sizeof(uint64_t),</div><div class='del'>-    .prolog = ec_code_x64_prolog,</div><div class='del'>-    .epilog = ec_code_x64_epilog,</div><div class='del'>-    .load   = ec_code_x64_load,</div><div class='del'>-    .store  = ec_code_x64_store,</div><div class='del'>-    .copy   = ec_code_x64_copy,</div><div class='del'>-    .xor2   = ec_code_x64_xor2,</div><div class='del'>-    .xor3   = NULL,</div><div class='del'>-    .xorm   = ec_code_x64_xorm</div><div class='del'>-};</div><div class='add'>+static char *ec_code_x64_needed_flags[] = {NULL};</div><div class='add'>+</div><div class='add'>+ec_code_gen_t ec_code_gen_x64 = {.name = "x64",</div><div class='add'>+                                 .flags = ec_code_x64_needed_flags,</div><div class='add'>+                                 .width = sizeof(uint64_t),</div><div class='add'>+                                 .prolog = ec_code_x64_prolog,</div><div class='add'>+                                 .epilog = ec_code_x64_epilog,</div><div class='add'>+                                 .load = ec_code_x64_load,</div><div class='add'>+                                 .store = ec_code_x64_store,</div><div class='add'>+                                 .copy = ec_code_x64_copy,</div><div class='add'>+                                 .xor2 = ec_code_x64_xor2,</div><div class='add'>+                                 .xor3 = NULL,</div><div class='add'>+                                 .xorm = ec_code_x64_xorm};</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-code.c b/xlators/cluster/ec/src/ec-code.c<br/>index e33cb42d9dc..70878d794ca 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-code.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-code.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-code.c</a></div><div class='hunk'>@@ -47,13 +47,13 @@ struct _ec_code_proc;</div><div class='ctx'> typedef struct _ec_code_proc ec_code_proc_t;</div><div class='ctx'> </div><div class='ctx'> struct _ec_code_proc {</div><div class='del'>-    int32_t      fd;</div><div class='add'>+    int32_t fd;</div><div class='ctx'>     gf_boolean_t eof;</div><div class='ctx'>     gf_boolean_t error;</div><div class='ctx'>     gf_boolean_t skip;</div><div class='del'>-    ssize_t      size;</div><div class='del'>-    ssize_t      pos;</div><div class='del'>-    char         buffer[EC_PROC_BUFFER_SIZE];</div><div class='add'>+    ssize_t size;</div><div class='add'>+    ssize_t pos;</div><div class='add'>+    char buffer[EC_PROC_BUFFER_SIZE];</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static ec_code_gen_t *ec_code_gen_table[] = {</div><div class='hunk'>@@ -66,8 +66,7 @@ static ec_code_gen_t *ec_code_gen_table[] = {</div><div class='ctx'> #ifdef USE_EC_DYNAMIC_X64</div><div class='ctx'>     &amp;ec_code_gen_x64,</div><div class='ctx'> #endif</div><div class='del'>-    NULL</div><div class='del'>-};</div><div class='add'>+    NULL};</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> ec_code_arg_set(ec_code_arg_t *arg, uint32_t value)</div><div class='hunk'>@@ -84,7 +83,6 @@ ec_code_arg_assign(ec_code_builder_t *builder, ec_code_op_t *op,</div><div class='ctx'>     if (builder-&gt;regs &lt;= reg) {</div><div class='ctx'>         builder-&gt;regs = reg + 1;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -202,17 +200,17 @@ static void</div><div class='ctx'> ec_code_dup(ec_code_builder_t *builder, ec_gf_op_t *op)</div><div class='ctx'> {</div><div class='ctx'>     switch (op-&gt;op) {</div><div class='del'>-    case EC_GF_OP_COPY:</div><div class='del'>-        ec_code_copy(builder, op-&gt;arg1, op-&gt;arg2);</div><div class='del'>-        break;</div><div class='del'>-    case EC_GF_OP_XOR2:</div><div class='del'>-        ec_code_xor2(builder, op-&gt;arg1, op-&gt;arg2);</div><div class='del'>-        break;</div><div class='del'>-    case EC_GF_OP_XOR3:</div><div class='del'>-        ec_code_xor3(builder, op-&gt;arg1, op-&gt;arg2, op-&gt;arg3);</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        break;</div><div class='add'>+        case EC_GF_OP_COPY:</div><div class='add'>+            ec_code_copy(builder, op-&gt;arg1, op-&gt;arg2);</div><div class='add'>+            break;</div><div class='add'>+        case EC_GF_OP_XOR2:</div><div class='add'>+            ec_code_xor2(builder, op-&gt;arg1, op-&gt;arg2);</div><div class='add'>+            break;</div><div class='add'>+        case EC_GF_OP_XOR3:</div><div class='add'>+            ec_code_xor3(builder, op-&gt;arg1, op-&gt;arg2, op-&gt;arg3);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -285,8 +283,9 @@ ec_code_prepare(ec_code_t *code, uint32_t count, uint32_t width,</div><div class='ctx'> </div><div class='ctx'>     count *= code-&gt;gf-&gt;bits + code-&gt;gf-&gt;max_ops;</div><div class='ctx'>     count += code-&gt;gf-&gt;bits;</div><div class='del'>-    builder = GF_MALLOC(sizeof(ec_code_builder_t) +</div><div class='del'>-                        sizeof(ec_code_op_t) * count, ec_mt_ec_code_builder_t);</div><div class='add'>+    builder = GF_MALLOC(</div><div class='add'>+        sizeof(ec_code_builder_t) + sizeof(ec_code_op_t) * count,</div><div class='add'>+        ec_mt_ec_code_builder_t);</div><div class='ctx'>     if (builder == NULL) {</div><div class='ctx'>         return EC_ERR(ENOMEM);</div><div class='ctx'>     }</div><div class='hunk'>@@ -331,15 +330,15 @@ ec_code_chunk_from_space(ec_code_space_t *space)</div><div class='ctx'> static void *</div><div class='ctx'> ec_code_to_executable(ec_code_space_t *space, void *addr)</div><div class='ctx'> {</div><div class='del'>-        return (void *)((uintptr_t)addr - (uintptr_t)space</div><div class='del'>-                                        + (uintptr_t)space-&gt;exec);</div><div class='add'>+    return (void *)((uintptr_t)addr - (uintptr_t)space +</div><div class='add'>+                    (uintptr_t)space-&gt;exec);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='ctx'> ec_code_from_executable(ec_code_space_t *space, void *addr)</div><div class='ctx'> {</div><div class='del'>-        return (void *)((uintptr_t)addr - (uintptr_t)space-&gt;exec</div><div class='del'>-                                        + (uintptr_t)space);</div><div class='add'>+    return (void *)((uintptr_t)addr - (uintptr_t)space-&gt;exec +</div><div class='add'>+                    (uintptr_t)space);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='hunk'>@@ -395,105 +394,105 @@ ec_code_chunk_touch(ec_code_chunk_t *prev, ec_code_chunk_t *next)</div><div class='ctx'> static ec_code_space_t *</div><div class='ctx'> ec_code_space_create(ec_code_t *code, size_t size)</div><div class='ctx'> {</div><div class='del'>-        char path[] = GLUSTERFS_LIBEXECDIR "/ec-code-dynamic.XXXXXX";</div><div class='del'>-        ec_code_space_t *space;</div><div class='del'>-        void *exec;</div><div class='del'>-        int32_t fd, err;</div><div class='del'>-</div><div class='del'>-        /* We need to create memory areas to store the generated dynamic code.</div><div class='del'>-         * Obviously these areas need to be written to be able to create the</div><div class='del'>-         * code and they also need to be executable to execute it.</div><div class='del'>-         *</div><div class='del'>-         * However it's a bad practice to have a memory region that is both</div><div class='del'>-         * writable *and* executable. In fact, selinux forbids this and causes</div><div class='del'>-         * attempts to do so to fail (unless specifically configured).</div><div class='del'>-         *</div><div class='del'>-         * To solve the problem we'll use two distinct memory areas mapped to</div><div class='del'>-         * the same physical storage. One of the memory areas will have write</div><div class='del'>-         * permission, and the other will have execute permission. Both areas</div><div class='del'>-         * will have the same contents. The physical storage will be a regular</div><div class='del'>-         * file that will be mmapped to both areas.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /* We need to create a temporary file as the backend storage for the</div><div class='del'>-         * memory mapped areas. */</div><div class='del'>-        /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='del'>-        fd = mkstemp(path);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                err = errno;</div><div class='del'>-                gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='del'>-                       "Unable to create a temporary file for the ec dynamic "</div><div class='del'>-                       "code");</div><div class='del'>-                space = EC_ERR(err);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-        /* Once created we don't need to keep it in the file system. It will</div><div class='del'>-         * still exist until we close the last file descriptor or unmap the</div><div class='del'>-         * memory areas bound to the file. */</div><div class='del'>-        sys_unlink(path);</div><div class='del'>-</div><div class='del'>-        size = (size + EC_CODE_ALIGN - 1) &amp; ~(EC_CODE_ALIGN - 1);</div><div class='del'>-        if (sys_ftruncate(fd, size) &lt; 0) {</div><div class='del'>-                err = errno;</div><div class='del'>-                gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='del'>-                       "Unable to resize the file for the ec dynamic code");</div><div class='del'>-                space = EC_ERR(err);</div><div class='del'>-                goto done_close;</div><div class='del'>-        }</div><div class='add'>+    char path[] = GLUSTERFS_LIBEXECDIR "/ec-code-dynamic.XXXXXX";</div><div class='add'>+    ec_code_space_t *space;</div><div class='add'>+    void *exec;</div><div class='add'>+    int32_t fd, err;</div><div class='add'>+</div><div class='add'>+    /* We need to create memory areas to store the generated dynamic code.</div><div class='add'>+     * Obviously these areas need to be written to be able to create the</div><div class='add'>+     * code and they also need to be executable to execute it.</div><div class='add'>+     *</div><div class='add'>+     * However it's a bad practice to have a memory region that is both</div><div class='add'>+     * writable *and* executable. In fact, selinux forbids this and causes</div><div class='add'>+     * attempts to do so to fail (unless specifically configured).</div><div class='add'>+     *</div><div class='add'>+     * To solve the problem we'll use two distinct memory areas mapped to</div><div class='add'>+     * the same physical storage. One of the memory areas will have write</div><div class='add'>+     * permission, and the other will have execute permission. Both areas</div><div class='add'>+     * will have the same contents. The physical storage will be a regular</div><div class='add'>+     * file that will be mmapped to both areas.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    /* We need to create a temporary file as the backend storage for the</div><div class='add'>+     * memory mapped areas. */</div><div class='add'>+    /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */</div><div class='add'>+    fd = mkstemp(path);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        err = errno;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='add'>+               "Unable to create a temporary file for the ec dynamic "</div><div class='add'>+               "code");</div><div class='add'>+        space = EC_ERR(err);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+    /* Once created we don't need to keep it in the file system. It will</div><div class='add'>+     * still exist until we close the last file descriptor or unmap the</div><div class='add'>+     * memory areas bound to the file. */</div><div class='add'>+    sys_unlink(path);</div><div class='add'>+</div><div class='add'>+    size = (size + EC_CODE_ALIGN - 1) &amp; ~(EC_CODE_ALIGN - 1);</div><div class='add'>+    if (sys_ftruncate(fd, size) &lt; 0) {</div><div class='add'>+        err = errno;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='add'>+               "Unable to resize the file for the ec dynamic code");</div><div class='add'>+        space = EC_ERR(err);</div><div class='add'>+        goto done_close;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This creates an executable memory area to be able to run the</div><div class='del'>-         * generated fragments of code. */</div><div class='del'>-        exec = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0);</div><div class='del'>-        if (exec == MAP_FAILED) {</div><div class='del'>-                err = errno;</div><div class='del'>-                gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='del'>-                       "Unable to map the executable area for the ec dynamic "</div><div class='del'>-                       "code");</div><div class='del'>-                space = EC_ERR(err);</div><div class='del'>-                goto done_close;</div><div class='del'>-        }</div><div class='del'>-        /* It's not important to check the return value of mlock(). If it fails</div><div class='del'>-         * everything will continue to work normally. */</div><div class='del'>-        mlock(exec, size);</div><div class='del'>-</div><div class='del'>-        /* This maps a read/write memory area to be able to create the dynamici</div><div class='del'>-         * code. */</div><div class='del'>-        space = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</div><div class='del'>-        if (space == MAP_FAILED) {</div><div class='del'>-                err = errno;</div><div class='del'>-                gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='del'>-                       "Unable to map the writable area for the ec dynamic "</div><div class='del'>-                       "code");</div><div class='del'>-                space = EC_ERR(err);</div><div class='del'>-</div><div class='del'>-                munmap(exec, size);</div><div class='del'>-</div><div class='del'>-                goto done_close;</div><div class='del'>-        }</div><div class='add'>+    /* This creates an executable memory area to be able to run the</div><div class='add'>+     * generated fragments of code. */</div><div class='add'>+    exec = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0);</div><div class='add'>+    if (exec == MAP_FAILED) {</div><div class='add'>+        err = errno;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='add'>+               "Unable to map the executable area for the ec dynamic "</div><div class='add'>+               "code");</div><div class='add'>+        space = EC_ERR(err);</div><div class='add'>+        goto done_close;</div><div class='add'>+    }</div><div class='add'>+    /* It's not important to check the return value of mlock(). If it fails</div><div class='add'>+     * everything will continue to work normally. */</div><div class='add'>+    mlock(exec, size);</div><div class='add'>+</div><div class='add'>+    /* This maps a read/write memory area to be able to create the dynamici</div><div class='add'>+     * code. */</div><div class='add'>+    space = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</div><div class='add'>+    if (space == MAP_FAILED) {</div><div class='add'>+        err = errno;</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_ERROR, err, EC_MSG_DYN_CREATE_FAILED,</div><div class='add'>+               "Unable to map the writable area for the ec dynamic "</div><div class='add'>+               "code");</div><div class='add'>+        space = EC_ERR(err);</div><div class='add'>+</div><div class='add'>+        munmap(exec, size);</div><div class='add'>+</div><div class='add'>+        goto done_close;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        space-&gt;exec = exec;</div><div class='del'>-        space-&gt;size = size;</div><div class='del'>-        space-&gt;code = code;</div><div class='del'>-        list_add_tail(&amp;space-&gt;list, &amp;code-&gt;spaces);</div><div class='del'>-        INIT_LIST_HEAD(&amp;space-&gt;chunks);</div><div class='add'>+    space-&gt;exec = exec;</div><div class='add'>+    space-&gt;size = size;</div><div class='add'>+    space-&gt;code = code;</div><div class='add'>+    list_add_tail(&amp;space-&gt;list, &amp;code-&gt;spaces);</div><div class='add'>+    INIT_LIST_HEAD(&amp;space-&gt;chunks);</div><div class='ctx'> </div><div class='ctx'> done_close:</div><div class='del'>-        /* If everything has succeeded, we already have the memory areas</div><div class='del'>-         * mapped. We don't need the file descriptor anymore because the</div><div class='del'>-         * backend storage will be there until the mmap()'d regions are</div><div class='del'>-         * unmapped. */</div><div class='del'>-        sys_close(fd);</div><div class='add'>+    /* If everything has succeeded, we already have the memory areas</div><div class='add'>+     * mapped. We don't need the file descriptor anymore because the</div><div class='add'>+     * backend storage will be there until the mmap()'d regions are</div><div class='add'>+     * unmapped. */</div><div class='add'>+    sys_close(fd);</div><div class='ctx'> done:</div><div class='del'>-        return space;</div><div class='add'>+    return space;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> ec_code_space_destroy(ec_code_space_t *space)</div><div class='ctx'> {</div><div class='del'>-        list_del_init(&amp;space-&gt;list);</div><div class='add'>+    list_del_init(&amp;space-&gt;list);</div><div class='ctx'> </div><div class='del'>-        munmap(space-&gt;exec, space-&gt;size);</div><div class='del'>-        munmap(space, space-&gt;size);</div><div class='add'>+    munmap(space-&gt;exec, space-&gt;size);</div><div class='add'>+    munmap(space, space-&gt;size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -501,7 +500,8 @@ ec_code_chunk_merge(ec_code_chunk_t *chunk)</div><div class='ctx'> {</div><div class='ctx'>     ec_code_chunk_t *item, *tmp;</div><div class='ctx'> </div><div class='del'>-    list_for_each_entry_safe(item, tmp, &amp;chunk-&gt;space-&gt;chunks, list) {</div><div class='add'>+    list_for_each_entry_safe(item, tmp, &amp;chunk-&gt;space-&gt;chunks, list)</div><div class='add'>+    {</div><div class='ctx'>         if ((uintptr_t)item &gt; (uintptr_t)chunk) {</div><div class='ctx'>             list_add_tail(&amp;chunk-&gt;list, &amp;item-&gt;list);</div><div class='ctx'>             if (ec_code_chunk_touch(chunk, item)) {</div><div class='hunk'>@@ -520,8 +520,8 @@ ec_code_chunk_merge(ec_code_chunk_t *chunk)</div><div class='ctx'>     list_add_tail(&amp;chunk-&gt;list, &amp;chunk-&gt;space-&gt;chunks);</div><div class='ctx'> </div><div class='ctx'> check:</div><div class='del'>-    if (chunk-&gt;size == chunk-&gt;space-&gt;size - ec_code_space_size() -</div><div class='del'>-                       ec_code_chunk_size()) {</div><div class='add'>+    if (chunk-&gt;size ==</div><div class='add'>+        chunk-&gt;space-&gt;size - ec_code_space_size() - ec_code_chunk_size()) {</div><div class='ctx'>         ec_code_space_destroy(chunk-&gt;space);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='hunk'>@@ -536,9 +536,12 @@ ec_code_space_alloc(ec_code_t *code, size_t size)</div><div class='ctx'>     /* To minimize fragmentation, we only allocate chunks of sizes multiples</div><div class='ctx'>      * of EC_CODE_CHUNK_MIN_SIZE. */</div><div class='ctx'>     size = ((size + ec_code_chunk_size() + EC_CODE_CHUNK_MIN_SIZE - 1) &amp;</div><div class='del'>-           ~(EC_CODE_CHUNK_MIN_SIZE - 1)) - ec_code_chunk_size();</div><div class='del'>-    list_for_each_entry(space, &amp;code-&gt;spaces, list) {</div><div class='del'>-        list_for_each_entry(chunk, &amp;space-&gt;chunks, list) {</div><div class='add'>+            ~(EC_CODE_CHUNK_MIN_SIZE - 1)) -</div><div class='add'>+           ec_code_chunk_size();</div><div class='add'>+    list_for_each_entry(space, &amp;code-&gt;spaces, list)</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(chunk, &amp;space-&gt;chunks, list)</div><div class='add'>+        {</div><div class='ctx'>             if (chunk-&gt;size &gt;= size) {</div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -608,26 +611,29 @@ ec_code_write(ec_code_builder_t *builder)</div><div class='ctx'>     for (i = 0; i &lt; builder-&gt;count; i++) {</div><div class='ctx'>         op = &amp;builder-&gt;ops[i];</div><div class='ctx'>         switch (op-&gt;op) {</div><div class='del'>-        case EC_GF_OP_LOAD:</div><div class='del'>-            gen-&gt;load(builder, op-&gt;arg1.value, op-&gt;arg2.value, op-&gt;arg3.value);</div><div class='del'>-            break;</div><div class='del'>-        case EC_GF_OP_STORE:</div><div class='del'>-            gen-&gt;store(builder, op-&gt;arg1.value, op-&gt;arg3.value);</div><div class='del'>-            break;</div><div class='del'>-        case EC_GF_OP_COPY:</div><div class='del'>-            gen-&gt;copy(builder, op-&gt;arg1.value, op-&gt;arg2.value);</div><div class='del'>-            break;</div><div class='del'>-        case EC_GF_OP_XOR2:</div><div class='del'>-            gen-&gt;xor2(builder, op-&gt;arg1.value, op-&gt;arg2.value);</div><div class='del'>-            break;</div><div class='del'>-        case EC_GF_OP_XOR3:</div><div class='del'>-            gen-&gt;xor3(builder, op-&gt;arg1.value, op-&gt;arg2.value, op-&gt;arg3.value);</div><div class='del'>-            break;</div><div class='del'>-        case EC_GF_OP_XORM:</div><div class='del'>-            gen-&gt;xorm(builder, op-&gt;arg1.value, op-&gt;arg2.value, op-&gt;arg3.value);</div><div class='del'>-            break;</div><div class='del'>-        default:</div><div class='del'>-            break;</div><div class='add'>+            case EC_GF_OP_LOAD:</div><div class='add'>+                gen-&gt;load(builder, op-&gt;arg1.value, op-&gt;arg2.value,</div><div class='add'>+                          op-&gt;arg3.value);</div><div class='add'>+                break;</div><div class='add'>+            case EC_GF_OP_STORE:</div><div class='add'>+                gen-&gt;store(builder, op-&gt;arg1.value, op-&gt;arg3.value);</div><div class='add'>+                break;</div><div class='add'>+            case EC_GF_OP_COPY:</div><div class='add'>+                gen-&gt;copy(builder, op-&gt;arg1.value, op-&gt;arg2.value);</div><div class='add'>+                break;</div><div class='add'>+            case EC_GF_OP_XOR2:</div><div class='add'>+                gen-&gt;xor2(builder, op-&gt;arg1.value, op-&gt;arg2.value);</div><div class='add'>+                break;</div><div class='add'>+            case EC_GF_OP_XOR3:</div><div class='add'>+                gen-&gt;xor3(builder, op-&gt;arg1.value, op-&gt;arg2.value,</div><div class='add'>+                          op-&gt;arg3.value);</div><div class='add'>+                break;</div><div class='add'>+            case EC_GF_OP_XORM:</div><div class='add'>+                gen-&gt;xorm(builder, op-&gt;arg1.value, op-&gt;arg2.value,</div><div class='add'>+                          op-&gt;arg3.value);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     gen-&gt;epilog(builder);</div><div class='hunk'>@@ -716,67 +722,65 @@ static void *</div><div class='ctx'> ec_code_build_dynamic(ec_code_t *code, uint32_t width, uint32_t *values,</div><div class='ctx'>                       uint32_t count, gf_boolean_t linear)</div><div class='ctx'> {</div><div class='del'>-        ec_code_builder_t *builder;</div><div class='del'>-        uint32_t offset, val, next;</div><div class='add'>+    ec_code_builder_t *builder;</div><div class='add'>+    uint32_t offset, val, next;</div><div class='ctx'> </div><div class='del'>-        builder = ec_code_prepare(code, count, width, linear);</div><div class='del'>-        if (EC_IS_ERR(builder)) {</div><div class='del'>-                return builder;</div><div class='del'>-        }</div><div class='add'>+    builder = ec_code_prepare(code, count, width, linear);</div><div class='add'>+    if (EC_IS_ERR(builder)) {</div><div class='add'>+        return builder;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        offset = -1;</div><div class='del'>-        next = ec_code_value_next(values, count, &amp;offset);</div><div class='del'>-        if (next != 0) {</div><div class='del'>-                ec_code_gf_load(builder, offset);</div><div class='del'>-                do {</div><div class='del'>-                        val = next;</div><div class='del'>-                        next = ec_code_value_next(values, count, &amp;offset);</div><div class='del'>-                        if (next != 0) {</div><div class='del'>-                                ec_code_gf_mul(builder, ec_gf_div(code-&gt;gf,</div><div class='del'>-                                                                  val, next));</div><div class='del'>-                                ec_code_gf_load_xor(builder, offset);</div><div class='del'>-                        }</div><div class='del'>-                } while (next != 0);</div><div class='del'>-                ec_code_gf_mul(builder, val);</div><div class='del'>-                ec_code_gf_store(builder);</div><div class='del'>-        } else {</div><div class='del'>-                ec_code_gf_clear(builder);</div><div class='del'>-        }</div><div class='add'>+    offset = -1;</div><div class='add'>+    next = ec_code_value_next(values, count, &amp;offset);</div><div class='add'>+    if (next != 0) {</div><div class='add'>+        ec_code_gf_load(builder, offset);</div><div class='add'>+        do {</div><div class='add'>+            val = next;</div><div class='add'>+            next = ec_code_value_next(values, count, &amp;offset);</div><div class='add'>+            if (next != 0) {</div><div class='add'>+                ec_code_gf_mul(builder, ec_gf_div(code-&gt;gf, val, next));</div><div class='add'>+                ec_code_gf_load_xor(builder, offset);</div><div class='add'>+            }</div><div class='add'>+        } while (next != 0);</div><div class='add'>+        ec_code_gf_mul(builder, val);</div><div class='add'>+        ec_code_gf_store(builder);</div><div class='add'>+    } else {</div><div class='add'>+        ec_code_gf_clear(builder);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ec_code_compile(builder);</div><div class='add'>+    return ec_code_compile(builder);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void *</div><div class='del'>-ec_code_build(ec_code_t *code, uint32_t width, uint32_t *values,</div><div class='del'>-              uint32_t count, gf_boolean_t linear)</div><div class='add'>+ec_code_build(ec_code_t *code, uint32_t width, uint32_t *values, uint32_t count,</div><div class='add'>+              gf_boolean_t linear)</div><div class='ctx'> {</div><div class='del'>-        void *func;</div><div class='add'>+    void *func;</div><div class='ctx'> </div><div class='del'>-        if (code-&gt;gen != NULL) {</div><div class='del'>-                func = ec_code_build_dynamic(code, width, values, count,</div><div class='del'>-                                             linear);</div><div class='del'>-                if (!EC_IS_ERR(func)) {</div><div class='del'>-                        return func;</div><div class='del'>-                }</div><div class='add'>+    if (code-&gt;gen != NULL) {</div><div class='add'>+        func = ec_code_build_dynamic(code, width, values, count, linear);</div><div class='add'>+        if (!EC_IS_ERR(func)) {</div><div class='add'>+            return func;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_msg_debug(THIS-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                             "Unable to generate dynamic code. Falling back "</div><div class='del'>-                             "to precompiled code");</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                     "Unable to generate dynamic code. Falling back "</div><div class='add'>+                     "to precompiled code");</div><div class='ctx'> </div><div class='del'>-                /* The dynamic code generation shouldn't fail in normal</div><div class='del'>-                 * conditions, but if it fails at some point, it's very</div><div class='del'>-                 * probable that it will fail again, so we completely disable</div><div class='del'>-                 * dynamic code generation. */</div><div class='del'>-                code-&gt;gen = NULL;</div><div class='del'>-        }</div><div class='add'>+        /* The dynamic code generation shouldn't fail in normal</div><div class='add'>+         * conditions, but if it fails at some point, it's very</div><div class='add'>+         * probable that it will fail again, so we completely disable</div><div class='add'>+         * dynamic code generation. */</div><div class='add'>+        code-&gt;gen = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ec_code_c_prepare(code-&gt;gf, values, count);</div><div class='add'>+    ec_code_c_prepare(code-&gt;gf, values, count);</div><div class='ctx'> </div><div class='del'>-        if (linear) {</div><div class='del'>-                return ec_code_c_linear;</div><div class='del'>-        }</div><div class='add'>+    if (linear) {</div><div class='add'>+        return ec_code_c_linear;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ec_code_c_interleaved;</div><div class='add'>+    return ec_code_c_interleaved;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ec_code_func_linear_t</div><div class='hunk'>@@ -791,17 +795,17 @@ ec_code_func_interleaved_t</div><div class='ctx'> ec_code_build_interleaved(ec_code_t *code, uint32_t width, uint32_t *values,</div><div class='ctx'>                           uint32_t count)</div><div class='ctx'> {</div><div class='del'>-    return (ec_code_func_interleaved_t)ec_code_build(code, width, values,</div><div class='del'>-                                                     count, _gf_false);</div><div class='add'>+    return (ec_code_func_interleaved_t)ec_code_build(code, width, values, count,</div><div class='add'>+                                                     _gf_false);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> ec_code_release(ec_code_t *code, ec_code_func_t *func)</div><div class='ctx'> {</div><div class='del'>-        if ((func-&gt;linear != ec_code_c_linear) &amp;&amp;</div><div class='del'>-            (func-&gt;interleaved != ec_code_c_interleaved)) {</div><div class='del'>-                ec_code_free(ec_code_chunk_from_func(func-&gt;linear));</div><div class='del'>-        }</div><div class='add'>+    if ((func-&gt;linear != ec_code_c_linear) &amp;&amp;</div><div class='add'>+        (func-&gt;interleaved != ec_code_c_interleaved)) {</div><div class='add'>+        ec_code_free(ec_code_chunk_from_func(func-&gt;linear));</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -1003,7 +1007,8 @@ ec_code_detect(xlator_t *xl, const char *def)</div><div class='ctx'>         if (ec_code_gen_table[select] == NULL) {</div><div class='ctx'>             gf_msg(xl-&gt;name, GF_LOG_WARNING, EINVAL, EC_MSG_EXTENSION_UNKNOWN,</div><div class='ctx'>                    "CPU extension '%s' is not known. Not using any cpu "</div><div class='del'>-                   "extensions", def);</div><div class='add'>+                   "extensions",</div><div class='add'>+                   def);</div><div class='ctx'> </div><div class='ctx'>             return NULL;</div><div class='ctx'>         }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-combine.c b/xlators/cluster/ec/src/ec-combine.c<br/>index 90e004336c0..551adfac043 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-combine.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-combine.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-combine.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-combine.c</a></div><div class='hunk'>@@ -30,41 +30,38 @@ typedef struct _ec_dict_info ec_dict_info_t;</div><div class='ctx'> struct _ec_dict_combine;</div><div class='ctx'> typedef struct _ec_dict_combine ec_dict_combine_t;</div><div class='ctx'> </div><div class='del'>-struct _ec_dict_info</div><div class='del'>-{</div><div class='del'>-    dict_t * dict;</div><div class='del'>-    int32_t  count;</div><div class='add'>+struct _ec_dict_info {</div><div class='add'>+    dict_t *dict;</div><div class='add'>+    int32_t count;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct _ec_dict_combine</div><div class='del'>-{</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='del'>-    int32_t         which;</div><div class='add'>+struct _ec_dict_combine {</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='add'>+    int32_t which;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_combine_write (ec_fop_data_t *fop, ec_cbk_data_t *dst,</div><div class='del'>-                  ec_cbk_data_t *src)</div><div class='add'>+ec_combine_write(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-        int     valid = 0;</div><div class='add'>+    int valid = 0;</div><div class='ctx'> </div><div class='del'>-        if (!fop || !dst || !src)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!fop || !dst || !src)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        switch (fop-&gt;id) {</div><div class='add'>+    switch (fop-&gt;id) {</div><div class='ctx'>         case GF_FOP_REMOVEXATTR:</div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='ctx'>         case GF_FOP_SETXATTR:</div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-                return 1;</div><div class='add'>+            return 1;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_SYMLINK:</div><div class='ctx'>         case GF_FOP_LINK:</div><div class='ctx'>         case GF_FOP_CREATE:</div><div class='ctx'>         case GF_FOP_MKNOD:</div><div class='ctx'>         case GF_FOP_MKDIR:</div><div class='del'>-                valid = 3;</div><div class='del'>-                break;</div><div class='add'>+            valid = 3;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_UNLINK:</div><div class='ctx'>         case GF_FOP_RMDIR:</div><div class='ctx'>         case GF_FOP_SETATTR:</div><div class='hunk'>@@ -75,42 +72,40 @@ ec_combine_write (ec_fop_data_t *fop, ec_cbk_data_t *dst,</div><div class='ctx'>         case GF_FOP_FALLOCATE:</div><div class='ctx'>         case GF_FOP_DISCARD:</div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='del'>-                valid = 2;</div><div class='del'>-                break;</div><div class='add'>+            valid = 2;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_RENAME:</div><div class='del'>-                valid = 5;</div><div class='del'>-                break;</div><div class='add'>+            valid = 5;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_msg_callingfn (fop-&gt;xl-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                                  EC_MSG_INVALID_FOP,</div><div class='del'>-                                  "Invalid fop %d", fop-&gt;id);</div><div class='del'>-                return 0;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg_callingfn(fop-&gt;xl-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='add'>+                             EC_MSG_INVALID_FOP, "Invalid fop %d", fop-&gt;id);</div><div class='add'>+            return 0;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, valid)) {</div><div class='del'>-                gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                        EC_MSG_IATT_MISMATCH,</div><div class='del'>-                        "Mismatching iatt in "</div><div class='del'>-                        "answers of '%s'", gf_fop_list[fop-&gt;id]);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        return 1;</div><div class='add'>+    if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, valid)) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH,</div><div class='add'>+               "Mismatching iatt in "</div><div class='add'>+               "answers of '%s'",</div><div class='add'>+               gf_fop_list[fop-&gt;id]);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_iatt_time_merge(int64_t *dst_sec, uint32_t *dst_nsec,</div><div class='del'>-                        int64_t src_sec, uint32_t src_nsec)</div><div class='add'>+void</div><div class='add'>+ec_iatt_time_merge(int64_t *dst_sec, uint32_t *dst_nsec, int64_t src_sec,</div><div class='add'>+                   uint32_t src_nsec)</div><div class='ctx'> {</div><div class='ctx'>     if ((*dst_sec &lt; src_sec) ||</div><div class='del'>-        ((*dst_sec == src_sec) &amp;&amp; (*dst_nsec &lt; src_nsec)))</div><div class='del'>-    {</div><div class='add'>+        ((*dst_sec == src_sec) &amp;&amp; (*dst_nsec &lt; src_nsec))) {</div><div class='ctx'>         *dst_sec = src_sec;</div><div class='ctx'>         *dst_nsec = src_nsec;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-gf_boolean_t</div><div class='add'>+static gf_boolean_t</div><div class='ctx'> ec_iatt_is_trusted(ec_fop_data_t *fop, struct iatt *iatt)</div><div class='ctx'> {</div><div class='ctx'>     uint64_t ino;</div><div class='hunk'>@@ -141,14 +136,14 @@ ec_iatt_is_trusted(ec_fop_data_t *fop, struct iatt *iatt)</div><div class='ctx'>     return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src,</div><div class='del'>-                        int32_t count)</div><div class='add'>+int32_t</div><div class='add'>+ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src,</div><div class='add'>+                int32_t count)</div><div class='ctx'> {</div><div class='ctx'>     int32_t i;</div><div class='ctx'>     gf_boolean_t failed = _gf_false;</div><div class='ctx'> </div><div class='del'>-    for (i = 0; i &lt; count; i++)</div><div class='del'>-    {</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='ctx'>         /* Check for basic fields. These fields must be equal always, even if</div><div class='ctx'>          * the inode is not locked because in these cases the parent inode</div><div class='ctx'>          * will be locked and differences in these fields require changes in</div><div class='hunk'>@@ -172,33 +167,30 @@ int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src,</div><div class='ctx'>                  * data is returned. */</div><div class='ctx'>                 failed = _gf_true;</div><div class='ctx'>             } else {</div><div class='del'>-                gf_msg_debug (fop-&gt;xl-&gt;name, 0,</div><div class='del'>-                       "Ignoring iatt differences because inode is not "</div><div class='del'>-                       "locked");</div><div class='add'>+                gf_msg_debug(fop-&gt;xl-&gt;name, 0,</div><div class='add'>+                             "Ignoring iatt differences because inode is not "</div><div class='add'>+                             "locked");</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='ctx'>         if (failed) {</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                    EC_MSG_IATT_COMBINE_FAIL,</div><div class='del'>-                    "Failed to combine iatt (inode: %lu-%lu, links: %u-%u, "</div><div class='del'>-                    "uid: %u-%u, gid: %u-%u, rdev: %lu-%lu, size: %lu-%lu, "</div><div class='del'>-                    "mode: %o-%o)",</div><div class='del'>-                    dst[i].ia_ino, src[i].ia_ino, dst[i].ia_nlink,</div><div class='del'>-                    src[i].ia_nlink, dst[i].ia_uid, src[i].ia_uid,</div><div class='del'>-                    dst[i].ia_gid, src[i].ia_gid, dst[i].ia_rdev,</div><div class='del'>-                    src[i].ia_rdev, dst[i].ia_size, src[i].ia_size,</div><div class='del'>-                    st_mode_from_ia(dst[i].ia_prot, dst[i].ia_type),</div><div class='del'>-                    st_mode_from_ia(src[i].ia_prot, dst[i].ia_type));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_WARNING, 0, EC_MSG_IATT_COMBINE_FAIL,</div><div class='add'>+                   "Failed to combine iatt (inode: %lu-%lu, links: %u-%u, "</div><div class='add'>+                   "uid: %u-%u, gid: %u-%u, rdev: %lu-%lu, size: %lu-%lu, "</div><div class='add'>+                   "mode: %o-%o)",</div><div class='add'>+                   dst[i].ia_ino, src[i].ia_ino, dst[i].ia_nlink,</div><div class='add'>+                   src[i].ia_nlink, dst[i].ia_uid, src[i].ia_uid, dst[i].ia_gid,</div><div class='add'>+                   src[i].ia_gid, dst[i].ia_rdev, src[i].ia_rdev,</div><div class='add'>+                   dst[i].ia_size, src[i].ia_size,</div><div class='add'>+                   st_mode_from_ia(dst[i].ia_prot, dst[i].ia_type),</div><div class='add'>+                   st_mode_from_ia(src[i].ia_prot, dst[i].ia_type));</div><div class='ctx'> </div><div class='ctx'>             return 0;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    while (count-- &gt; 0)</div><div class='del'>-    {</div><div class='add'>+    while (count-- &gt; 0) {</div><div class='ctx'>         dst[count].ia_blocks += src[count].ia_blocks;</div><div class='del'>-        if (dst[count].ia_blksize &lt; src[count].ia_blksize)</div><div class='del'>-        {</div><div class='add'>+        if (dst[count].ia_blksize &lt; src[count].ia_blksize) {</div><div class='ctx'>             dst[count].ia_blksize = src[count].ia_blksize;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='hunk'>@@ -213,13 +205,12 @@ int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_iatt_rebuild(ec_t * ec, struct iatt * iatt, int32_t count,</div><div class='del'>-                     int32_t answers)</div><div class='add'>+void</div><div class='add'>+ec_iatt_rebuild(ec_t *ec, struct iatt *iatt, int32_t count, int32_t answers)</div><div class='ctx'> {</div><div class='ctx'>     uint64_t blocks;</div><div class='ctx'> </div><div class='del'>-    while (count-- &gt; 0)</div><div class='del'>-    {</div><div class='add'>+    while (count-- &gt; 0) {</div><div class='ctx'>         blocks = iatt[count].ia_blocks * ec-&gt;fragments + answers - 1;</div><div class='ctx'>         blocks /= answers;</div><div class='ctx'>         iatt[count].ia_blocks = blocks;</div><div class='hunk'>@@ -227,93 +218,93 @@ void ec_iatt_rebuild(ec_t * ec, struct iatt * iatt, int32_t count,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_xattr_match (dict_t *dict, char *key, data_t *value, void *arg)</div><div class='add'>+ec_xattr_match(dict_t *dict, char *key, data_t *value, void *arg)</div><div class='ctx'> {</div><div class='del'>-        if ((fnmatch(GF_XATTR_STIME_PATTERN, key, 0) == 0) ||</div><div class='del'>-            (strcmp(key, GET_LINK_COUNT) == 0) ||</div><div class='del'>-            (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) ||</div><div class='del'>-            (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) ||</div><div class='del'>-            (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0)) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if ((fnmatch(GF_XATTR_STIME_PATTERN, key, 0) == 0) ||</div><div class='add'>+        (strcmp(key, GET_LINK_COUNT) == 0) ||</div><div class='add'>+        (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) ||</div><div class='add'>+        (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) ||</div><div class='add'>+        (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0)) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_value_ignore (char *key)</div><div class='add'>+ec_value_ignore(char *key)</div><div class='ctx'> {</div><div class='del'>-        if ((strcmp(key, GF_CONTENT_KEY) == 0) ||</div><div class='del'>-            (strcmp(key, GF_XATTR_PATHINFO_KEY) == 0) ||</div><div class='del'>-            (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0) ||</div><div class='del'>-            (strcmp(key, GF_XATTR_LOCKINFO_KEY) == 0) ||</div><div class='del'>-            (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) ||</div><div class='del'>-            (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) ||</div><div class='del'>-            (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) ||</div><div class='del'>-            (strncmp(key, GF_XATTR_CLRLK_CMD,</div><div class='del'>-                     SLEN (GF_XATTR_CLRLK_CMD)) == 0) ||</div><div class='del'>-            (strcmp(key, DHT_IATT_IN_XDATA_KEY) == 0) ||</div><div class='del'>-            (strncmp(key, EC_QUOTA_PREFIX, SLEN (EC_QUOTA_PREFIX)) == 0) ||</div><div class='del'>-            (fnmatch(MARKER_XATTR_PREFIX ".*." XTIME, key, 0) == 0) ||</div><div class='del'>-            (fnmatch(GF_XATTR_MARKER_KEY ".*", key, 0) == 0) ||</div><div class='del'>-            (XATTR_IS_NODE_UUID(key))) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if ((strcmp(key, GF_CONTENT_KEY) == 0) ||</div><div class='add'>+        (strcmp(key, GF_XATTR_PATHINFO_KEY) == 0) ||</div><div class='add'>+        (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0) ||</div><div class='add'>+        (strcmp(key, GF_XATTR_LOCKINFO_KEY) == 0) ||</div><div class='add'>+        (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) ||</div><div class='add'>+        (strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) ||</div><div class='add'>+        (strcmp(key, GLUSTERFS_ENTRYLK_COUNT) == 0) ||</div><div class='add'>+        (strncmp(key, GF_XATTR_CLRLK_CMD, SLEN(GF_XATTR_CLRLK_CMD)) == 0) ||</div><div class='add'>+        (strcmp(key, DHT_IATT_IN_XDATA_KEY) == 0) ||</div><div class='add'>+        (strncmp(key, EC_QUOTA_PREFIX, SLEN(EC_QUOTA_PREFIX)) == 0) ||</div><div class='add'>+        (fnmatch(MARKER_XATTR_PREFIX ".*." XTIME, key, 0) == 0) ||</div><div class='add'>+        (fnmatch(GF_XATTR_MARKER_KEY ".*", key, 0) == 0) ||</div><div class='add'>+        (XATTR_IS_NODE_UUID(key))) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_dict_compare (dict_t *dict1, dict_t *dict2)</div><div class='add'>+ec_dict_compare(dict_t *dict1, dict_t *dict2)</div><div class='ctx'> {</div><div class='del'>-        if (are_dicts_equal (dict1, dict2, ec_xattr_match, ec_value_ignore))</div><div class='del'>-                return 1;</div><div class='del'>-        return 0;</div><div class='add'>+    if (are_dicts_equal(dict1, dict2, ec_xattr_match, ec_value_ignore))</div><div class='add'>+        return 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint32_t</div><div class='ctx'> ec_dict_list(data_t **list, ec_cbk_data_t *cbk, int32_t which, char *key,</div><div class='ctx'>              gf_boolean_t global)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='del'>-        ec_cbk_data_t *ans = NULL;</div><div class='del'>-        dict_t *dict = NULL;</div><div class='del'>-        data_t *data;</div><div class='del'>-        uint32_t count;</div><div class='del'>-        int32_t i;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                /* We initialize the list with EC_MISSING_DATA if we are</div><div class='del'>-                 * returning a global list or the current subvolume belongs</div><div class='del'>-                 * to the group of the accepted answer. Note that if some</div><div class='del'>-                 * subvolume is known to be down before issuing the request,</div><div class='del'>-                 * we won't have any answer from it, so we set here the</div><div class='del'>-                 * appropriate default value. */</div><div class='del'>-                if (global || ((cbk-&gt;mask &amp; (1ULL &lt;&lt; i)) != 0)) {</div><div class='del'>-                        list[i] = EC_MISSING_DATA;</div><div class='del'>-                } else {</div><div class='del'>-                        list[i] = NULL;</div><div class='del'>-                }</div><div class='add'>+    ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_cbk_data_t *ans = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    data_t *data;</div><div class='add'>+    uint32_t count;</div><div class='add'>+    int32_t i;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        /* We initialize the list with EC_MISSING_DATA if we are</div><div class='add'>+         * returning a global list or the current subvolume belongs</div><div class='add'>+         * to the group of the accepted answer. Note that if some</div><div class='add'>+         * subvolume is known to be down before issuing the request,</div><div class='add'>+         * we won't have any answer from it, so we set here the</div><div class='add'>+         * appropriate default value. */</div><div class='add'>+        if (global || ((cbk-&gt;mask &amp; (1ULL &lt;&lt; i)) != 0)) {</div><div class='add'>+            list[i] = EC_MISSING_DATA;</div><div class='add'>+        } else {</div><div class='add'>+            list[i] = NULL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        count = 0;</div><div class='del'>-        list_for_each_entry(ans, &amp;cbk-&gt;fop-&gt;answer_list, answer_list) {</div><div class='del'>-                if (global || ((cbk-&gt;mask &amp; ans-&gt;mask) != 0)) {</div><div class='del'>-                        dict = (which == EC_COMBINE_XDATA) ? ans-&gt;xdata</div><div class='del'>-                                                           : ans-&gt;dict;</div><div class='del'>-                        data = dict_get(dict, key);</div><div class='del'>-                        if (data != NULL) {</div><div class='del'>-                                list[ans-&gt;idx] = data;</div><div class='del'>-                                count++;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    count = 0;</div><div class='add'>+    list_for_each_entry(ans, &amp;cbk-&gt;fop-&gt;answer_list, answer_list)</div><div class='add'>+    {</div><div class='add'>+        if (global || ((cbk-&gt;mask &amp; ans-&gt;mask) != 0)) {</div><div class='add'>+            dict = (which == EC_COMBINE_XDATA) ? ans-&gt;xdata : ans-&gt;dict;</div><div class='add'>+            data = dict_get(dict, key);</div><div class='add'>+            if (data != NULL) {</div><div class='add'>+                list[ans-&gt;idx] = data;</div><div class='add'>+                count++;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_concat_prepare(xlator_t *xl, char **str, char **sep, char **post,</div><div class='del'>-                          const char *fmt, va_list args)</div><div class='add'>+int32_t</div><div class='add'>+ec_concat_prepare(xlator_t *xl, char **str, char **sep, char **post,</div><div class='add'>+                  const char *fmt, va_list args)</div><div class='ctx'> {</div><div class='ctx'>     char *tmp;</div><div class='ctx'>     int32_t len;</div><div class='hunk'>@@ -339,9 +330,8 @@ int32_t ec_concat_prepare(xlator_t *xl, char **str, char **sep, char **post,</div><div class='ctx'>     return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    gf_msg (xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-            EC_MSG_INVALID_FORMAT,</div><div class='del'>-            "Invalid concat format");</div><div class='add'>+    gf_msg(xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_FORMAT,</div><div class='add'>+           "Invalid concat format");</div><div class='ctx'> </div><div class='ctx'>     GF_FREE(*str);</div><div class='ctx'> </div><div class='hunk'>@@ -449,7 +439,8 @@ out:</div><div class='ctx'>     return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='ctx'>     data_t *data[ec-&gt;nodes];</div><div class='hunk'>@@ -458,7 +449,6 @@ int32_t ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'>     int32_t i, len;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'>     ec_dict_list(data, cbk, which, key, _gf_false);</div><div class='ctx'> </div><div class='ctx'>     lockinfo = dict_new();</div><div class='hunk'>@@ -526,11 +516,12 @@ out:</div><div class='ctx'>     return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_uuid(ec_cbk_data_t * cbk, int32_t which, char * key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_uuid(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * ans, * min;</div><div class='del'>-    dict_t * src, * dst;</div><div class='del'>-    data_t * data;</div><div class='add'>+    ec_cbk_data_t *ans, *min;</div><div class='add'>+    dict_t *src, *dst;</div><div class='add'>+    data_t *data;</div><div class='ctx'> </div><div class='ctx'>     min = cbk;</div><div class='ctx'>     for (ans = cbk-&gt;next; ans != NULL; ans = ans-&gt;next) {</div><div class='hunk'>@@ -555,7 +546,8 @@ int32_t ec_dict_data_uuid(ec_cbk_data_t * cbk, int32_t which, char * key)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_iatt(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_iatt(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='ctx'>     data_t *data[ec-&gt;nodes];</div><div class='hunk'>@@ -578,12 +570,12 @@ int32_t ec_dict_data_iatt(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'>         if (stbuf == NULL) {</div><div class='ctx'>             stbuf = GF_MALLOC(sizeof(struct iatt), gf_common_mt_char);</div><div class='ctx'>             if (stbuf == NULL) {</div><div class='del'>-                    ret = -ENOMEM;</div><div class='del'>-                    goto out;</div><div class='add'>+                ret = -ENOMEM;</div><div class='add'>+                goto out;</div><div class='ctx'>             }</div><div class='ctx'>             *stbuf = *tmp;</div><div class='ctx'>         } else {</div><div class='del'>-            if (!ec_iatt_combine (cbk-&gt;fop, stbuf, tmp, 1)) {</div><div class='add'>+            if (!ec_iatt_combine(cbk-&gt;fop, stbuf, tmp, 1)) {</div><div class='ctx'>                 ret = -EINVAL;</div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -613,7 +605,8 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='ctx'>     data_t *data[ec-&gt;nodes];</div><div class='hunk'>@@ -639,7 +632,8 @@ int32_t ec_dict_data_max32(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'>     return dict_set_uint32(dict, key, max);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='ctx'>     data_t *data[ec-&gt;nodes];</div><div class='hunk'>@@ -665,14 +659,19 @@ int32_t ec_dict_data_max64(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'>     return dict_set_uint64(dict, key, max);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_quota(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_quota(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='del'>-    ec_t        *ec               = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='del'>-    data_t      *data[ec-&gt;nodes];</div><div class='del'>-    dict_t      *dict             = NULL;</div><div class='del'>-    int32_t      i                = 0;</div><div class='del'>-    quota_meta_t size             = {0, };</div><div class='del'>-    quota_meta_t max_size         = {0, };</div><div class='add'>+    ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='add'>+    data_t *data[ec-&gt;nodes];</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t max_size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='ctx'>     if (ec_dict_list(data, cbk, which, key, _gf_false) == 0) {</div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -685,25 +684,26 @@ int32_t ec_dict_data_quota(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'>      */</div><div class='ctx'>     for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='ctx'>         if ((data[i] == NULL) || (data[i] == EC_MISSING_DATA) ||</div><div class='del'>-            (quota_data_to_meta (data[i], QUOTA_SIZE_KEY, &amp;size) &lt; 0)) {</div><div class='del'>-                continue;</div><div class='add'>+            (quota_data_to_meta(data[i], QUOTA_SIZE_KEY, &amp;size) &lt; 0)) {</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (size.size &gt; max_size.size)</div><div class='del'>-                max_size.size = size.size;</div><div class='add'>+            max_size.size = size.size;</div><div class='ctx'>         if (size.file_count &gt; max_size.file_count)</div><div class='del'>-                max_size.file_count = size.file_count;</div><div class='add'>+            max_size.file_count = size.file_count;</div><div class='ctx'>         if (size.dir_count &gt; max_size.dir_count)</div><div class='del'>-                max_size.dir_count = size.dir_count;</div><div class='add'>+            max_size.dir_count = size.dir_count;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     max_size.size *= ec-&gt;fragments;</div><div class='ctx'> </div><div class='ctx'>     dict = (which == EC_COMBINE_XDATA) ? cbk-&gt;xdata : cbk-&gt;dict;</div><div class='del'>-    return quota_dict_set_meta (dict, key, &amp;max_size, IA_IFDIR);</div><div class='add'>+    return quota_dict_set_meta(dict, key, &amp;max_size, IA_IFDIR);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_stime(ec_cbk_data_t *cbk, int32_t which, char *key)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = cbk-&gt;fop-&gt;xl-&gt;private;</div><div class='ctx'>     data_t *data[ec-&gt;nodes];</div><div class='hunk'>@@ -719,8 +719,8 @@ int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key)</div><div class='ctx'>         }</div><div class='ctx'>         err = gf_get_max_stime(cbk-&gt;fop-&gt;xl, dict, key, data[i]);</div><div class='ctx'>         if (err != 0) {</div><div class='del'>-            gf_msg (cbk-&gt;fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err,</div><div class='del'>-                    EC_MSG_STIME_COMBINE_FAIL, "STIME combination failed");</div><div class='add'>+            gf_msg(cbk-&gt;fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err,</div><div class='add'>+                   EC_MSG_STIME_COMBINE_FAIL, "STIME combination failed");</div><div class='ctx'> </div><div class='ctx'>             return err;</div><div class='ctx'>         }</div><div class='hunk'>@@ -729,28 +729,24 @@ int32_t ec_dict_data_stime(ec_cbk_data_t * cbk, int32_t which, char * key)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value,</div><div class='del'>-                             void * arg)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_data_combine(dict_t *dict, char *key, data_t *value, void *arg)</div><div class='ctx'> {</div><div class='del'>-    ec_dict_combine_t * data = arg;</div><div class='add'>+    ec_dict_combine_t *data = arg;</div><div class='ctx'> </div><div class='ctx'>     if ((strcmp(key, GF_XATTR_PATHINFO_KEY) == 0) ||</div><div class='del'>-        (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0))</div><div class='del'>-    {</div><div class='del'>-        return ec_dict_data_concat("(&lt;EC:%s&gt; { })", data-&gt;cbk, data-&gt;which,</div><div class='del'>-                                   key, NULL, NULL, _gf_false,</div><div class='add'>+        (strcmp(key, GF_XATTR_USER_PATHINFO_KEY) == 0)) {</div><div class='add'>+        return ec_dict_data_concat("(&lt;EC:%s&gt; { })", data-&gt;cbk, data-&gt;which, key,</div><div class='add'>+                                   NULL, NULL, _gf_false,</div><div class='ctx'>                                    data-&gt;cbk-&gt;fop-&gt;xl-&gt;name);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (strncmp(key, GF_XATTR_CLRLK_CMD, SLEN (GF_XATTR_CLRLK_CMD)) == 0)</div><div class='del'>-    {</div><div class='add'>+    if (strncmp(key, GF_XATTR_CLRLK_CMD, SLEN(GF_XATTR_CLRLK_CMD)) == 0) {</div><div class='ctx'>         return ec_dict_data_concat("{\n}", data-&gt;cbk, data-&gt;which, key, NULL,</div><div class='ctx'>                                    NULL, _gf_false);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (strncmp(key, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                SLEN (GF_XATTR_LOCKINFO_KEY)) == 0)</div><div class='del'>-    {</div><div class='add'>+    if (strncmp(key, GF_XATTR_LOCKINFO_KEY, SLEN(GF_XATTR_LOCKINFO_KEY)) == 0) {</div><div class='ctx'>         return ec_dict_data_merge(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -758,8 +754,7 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value,</div><div class='ctx'>         return ec_dict_data_max32(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0)</div><div class='del'>-    {</div><div class='add'>+    if (strcmp(key, GLUSTERFS_OPEN_FD_COUNT) == 0) {</div><div class='ctx'>         return ec_dict_data_max32(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'>     if ((strcmp(key, GLUSTERFS_INODELK_COUNT) == 0) ||</div><div class='hunk'>@@ -771,23 +766,22 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value,</div><div class='ctx'>         return ec_dict_data_quota(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'>     /* Ignore all other quota attributes */</div><div class='del'>-    if (strncmp(key, EC_QUOTA_PREFIX, SLEN (EC_QUOTA_PREFIX)) == 0) {</div><div class='add'>+    if (strncmp(key, EC_QUOTA_PREFIX, SLEN(EC_QUOTA_PREFIX)) == 0) {</div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (XATTR_IS_NODE_UUID(key)) {</div><div class='ctx'>         if (data-&gt;cbk-&gt;fop-&gt;int32) {</div><div class='del'>-                /* List of node uuid is requested */</div><div class='del'>-                return ec_dict_data_concat("{ }", data-&gt;cbk, data-&gt;which, key,</div><div class='del'>-                                           GF_XATTR_LIST_NODE_UUIDS_KEY,</div><div class='del'>-                                           UUID0_STR, _gf_true);</div><div class='add'>+            /* List of node uuid is requested */</div><div class='add'>+            return ec_dict_data_concat("{ }", data-&gt;cbk, data-&gt;which, key,</div><div class='add'>+                                       GF_XATTR_LIST_NODE_UUIDS_KEY, UUID0_STR,</div><div class='add'>+                                       _gf_true);</div><div class='ctx'>         } else {</div><div class='del'>-                return ec_dict_data_uuid(data-&gt;cbk, data-&gt;which, key);</div><div class='add'>+            return ec_dict_data_uuid(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (fnmatch(GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0)</div><div class='del'>-    {</div><div class='add'>+    if (fnmatch(GF_XATTR_STIME_PATTERN, key, FNM_NOESCAPE) == 0) {</div><div class='ctx'>         return ec_dict_data_stime(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -795,14 +789,15 @@ int32_t ec_dict_data_combine(dict_t * dict, char * key, data_t * value,</div><div class='ctx'>         return ec_dict_data_max64(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (strcmp (key, GF_PRESTAT) == 0 || strcmp (key, GF_POSTSTAT) == 0) {</div><div class='add'>+    if (strcmp(key, GF_PRESTAT) == 0 || strcmp(key, GF_POSTSTAT) == 0) {</div><div class='ctx'>         return ec_dict_data_iatt(data-&gt;cbk, data-&gt;which, key);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_combine(ec_cbk_data_t *cbk, int32_t which)</div><div class='ctx'> {</div><div class='ctx'>     dict_t *dict = NULL;</div><div class='ctx'>     ec_dict_combine_t data;</div><div class='hunk'>@@ -815,9 +810,8 @@ int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which)</div><div class='ctx'>     if (dict != NULL) {</div><div class='ctx'>         err = dict_foreach(dict, ec_dict_data_combine, &amp;data);</div><div class='ctx'>         if (err != 0) {</div><div class='del'>-            gf_msg (cbk-&gt;fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err,</div><div class='del'>-                    EC_MSG_DICT_COMBINE_FAIL,</div><div class='del'>-                    "Dictionary combination failed");</div><div class='add'>+            gf_msg(cbk-&gt;fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err,</div><div class='add'>+                   EC_MSG_DICT_COMBINE_FAIL, "Dictionary combination failed");</div><div class='ctx'> </div><div class='ctx'>             return err;</div><div class='ctx'>         }</div><div class='hunk'>@@ -826,47 +820,43 @@ int32_t ec_dict_combine(ec_cbk_data_t * cbk, int32_t which)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_vector_compare(struct iovec * dst_vector, int32_t dst_count,</div><div class='del'>-                          struct iovec * src_vector, int32_t src_count)</div><div class='add'>+int32_t</div><div class='add'>+ec_vector_compare(struct iovec *dst_vector, int32_t dst_count,</div><div class='add'>+                  struct iovec *src_vector, int32_t src_count)</div><div class='ctx'> {</div><div class='ctx'>     int32_t dst_size = 0, src_size = 0;</div><div class='ctx'> </div><div class='del'>-    if (dst_count &gt; 0)</div><div class='del'>-    {</div><div class='add'>+    if (dst_count &gt; 0) {</div><div class='ctx'>         dst_size = iov_length(dst_vector, dst_count);</div><div class='ctx'>     }</div><div class='del'>-    if (src_count &gt; 0)</div><div class='del'>-    {</div><div class='add'>+    if (src_count &gt; 0) {</div><div class='ctx'>         src_size = iov_length(src_vector, src_count);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return (dst_size == src_size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_flock_compare(struct gf_flock * dst, struct gf_flock * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_flock_compare(struct gf_flock *dst, struct gf_flock *src)</div><div class='ctx'> {</div><div class='del'>-    if ((dst-&gt;l_type != src-&gt;l_type) ||</div><div class='del'>-        (dst-&gt;l_whence != src-&gt;l_whence) ||</div><div class='del'>-        (dst-&gt;l_start != src-&gt;l_start) ||</div><div class='del'>-        (dst-&gt;l_len != src-&gt;l_len) ||</div><div class='add'>+    if ((dst-&gt;l_type != src-&gt;l_type) || (dst-&gt;l_whence != src-&gt;l_whence) ||</div><div class='add'>+        (dst-&gt;l_start != src-&gt;l_start) || (dst-&gt;l_len != src-&gt;l_len) ||</div><div class='ctx'>         (dst-&gt;l_pid != src-&gt;l_pid) ||</div><div class='del'>-        !is_same_lkowner(&amp;dst-&gt;l_owner, &amp;src-&gt;l_owner))</div><div class='del'>-    {</div><div class='add'>+        !is_same_lkowner(&amp;dst-&gt;l_owner, &amp;src-&gt;l_owner)) {</div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src)</div><div class='add'>+void</div><div class='add'>+ec_statvfs_combine(struct statvfs *dst, struct statvfs *src)</div><div class='ctx'> {</div><div class='del'>-    if (dst-&gt;f_bsize &lt; src-&gt;f_bsize)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_bsize &lt; src-&gt;f_bsize) {</div><div class='ctx'>         dst-&gt;f_bsize = src-&gt;f_bsize;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (dst-&gt;f_frsize &lt; src-&gt;f_frsize)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_frsize &lt; src-&gt;f_frsize) {</div><div class='ctx'>         dst-&gt;f_blocks *= dst-&gt;f_frsize;</div><div class='ctx'>         dst-&gt;f_blocks /= src-&gt;f_frsize;</div><div class='ctx'> </div><div class='hunk'>@@ -877,9 +867,7 @@ void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src)</div><div class='ctx'>         dst-&gt;f_bavail /= src-&gt;f_frsize;</div><div class='ctx'> </div><div class='ctx'>         dst-&gt;f_frsize = src-&gt;f_frsize;</div><div class='del'>-    }</div><div class='del'>-    else if (dst-&gt;f_frsize &gt; src-&gt;f_frsize)</div><div class='del'>-    {</div><div class='add'>+    } else if (dst-&gt;f_frsize &gt; src-&gt;f_frsize) {</div><div class='ctx'>         src-&gt;f_blocks *= src-&gt;f_frsize;</div><div class='ctx'>         src-&gt;f_blocks /= dst-&gt;f_frsize;</div><div class='ctx'> </div><div class='hunk'>@@ -889,90 +877,80 @@ void ec_statvfs_combine(struct statvfs * dst, struct statvfs * src)</div><div class='ctx'>         src-&gt;f_bavail *= src-&gt;f_frsize;</div><div class='ctx'>         src-&gt;f_bavail /= dst-&gt;f_frsize;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;f_blocks &gt; src-&gt;f_blocks)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_blocks &gt; src-&gt;f_blocks) {</div><div class='ctx'>         dst-&gt;f_blocks = src-&gt;f_blocks;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;f_bfree &gt; src-&gt;f_bfree)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_bfree &gt; src-&gt;f_bfree) {</div><div class='ctx'>         dst-&gt;f_bfree = src-&gt;f_bfree;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;f_bavail &gt; src-&gt;f_bavail)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_bavail &gt; src-&gt;f_bavail) {</div><div class='ctx'>         dst-&gt;f_bavail = src-&gt;f_bavail;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (dst-&gt;f_files &lt; src-&gt;f_files)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_files &lt; src-&gt;f_files) {</div><div class='ctx'>         dst-&gt;f_files = src-&gt;f_files;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;f_ffree &gt; src-&gt;f_ffree)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_ffree &gt; src-&gt;f_ffree) {</div><div class='ctx'>         dst-&gt;f_ffree = src-&gt;f_ffree;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;f_favail &gt; src-&gt;f_favail)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_favail &gt; src-&gt;f_favail) {</div><div class='ctx'>         dst-&gt;f_favail = src-&gt;f_favail;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;f_namemax &gt; src-&gt;f_namemax)</div><div class='del'>-    {</div><div class='add'>+    if (dst-&gt;f_namemax &gt; src-&gt;f_namemax) {</div><div class='ctx'>         dst-&gt;f_namemax = src-&gt;f_namemax;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (dst-&gt;f_flag != src-&gt;f_flag)</div><div class='del'>-    {</div><div class='del'>-        gf_msg_debug (THIS-&gt;name, 0,</div><div class='del'>-                "Mismatching file system flags "</div><div class='del'>-                "(%lX, %lX)",</div><div class='del'>-                dst-&gt;f_flag, src-&gt;f_flag);</div><div class='add'>+    if (dst-&gt;f_flag != src-&gt;f_flag) {</div><div class='add'>+        gf_msg_debug(THIS-&gt;name, 0,</div><div class='add'>+                     "Mismatching file system flags "</div><div class='add'>+                     "(%lX, %lX)",</div><div class='add'>+                     dst-&gt;f_flag, src-&gt;f_flag);</div><div class='ctx'>     }</div><div class='ctx'>     dst-&gt;f_flag &amp;= src-&gt;f_flag;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_check(ec_cbk_data_t * dst, ec_cbk_data_t * src,</div><div class='del'>-                         ec_combine_f combine)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_check(ec_cbk_data_t *dst, ec_cbk_data_t *src, ec_combine_f combine)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = dst-&gt;fop;</div><div class='add'>+    ec_fop_data_t *fop = dst-&gt;fop;</div><div class='ctx'> </div><div class='del'>-    if (dst-&gt;op_ret != src-&gt;op_ret)</div><div class='del'>-    {</div><div class='del'>-        gf_msg_debug (fop-&gt;xl-&gt;name, 0, "Mismatching return code in "</div><div class='del'>-                                            "answers of '%s': %d &lt;-&gt; %d",</div><div class='del'>-               ec_fop_name(fop-&gt;id), dst-&gt;op_ret, src-&gt;op_ret);</div><div class='add'>+    if (dst-&gt;op_ret != src-&gt;op_ret) {</div><div class='add'>+        gf_msg_debug(fop-&gt;xl-&gt;name, 0,</div><div class='add'>+                     "Mismatching return code in "</div><div class='add'>+                     "answers of '%s': %d &lt;-&gt; %d",</div><div class='add'>+                     ec_fop_name(fop-&gt;id), dst-&gt;op_ret, src-&gt;op_ret);</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='del'>-    if (dst-&gt;op_ret &lt; 0)</div><div class='del'>-    {</div><div class='del'>-        if (dst-&gt;op_errno != src-&gt;op_errno)</div><div class='del'>-        {</div><div class='del'>-            gf_msg_debug (fop-&gt;xl-&gt;name, 0, "Mismatching errno code in "</div><div class='del'>-                                                "answers of '%s': %d &lt;-&gt; %d",</div><div class='del'>-                   ec_fop_name(fop-&gt;id), dst-&gt;op_errno, src-&gt;op_errno);</div><div class='add'>+    if (dst-&gt;op_ret &lt; 0) {</div><div class='add'>+        if (dst-&gt;op_errno != src-&gt;op_errno) {</div><div class='add'>+            gf_msg_debug(fop-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "Mismatching errno code in "</div><div class='add'>+                         "answers of '%s': %d &lt;-&gt; %d",</div><div class='add'>+                         ec_fop_name(fop-&gt;id), dst-&gt;op_errno, src-&gt;op_errno);</div><div class='ctx'> </div><div class='ctx'>             return 0;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (!ec_dict_compare(dst-&gt;xdata, src-&gt;xdata))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                EC_MSG_XDATA_MISMATCH,</div><div class='del'>-                "Mismatching xdata in answers "</div><div class='del'>-                "of '%s'", ec_fop_name(fop-&gt;id));</div><div class='add'>+    if (!ec_dict_compare(dst-&gt;xdata, src-&gt;xdata)) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_DEBUG, 0, EC_MSG_XDATA_MISMATCH,</div><div class='add'>+               "Mismatching xdata in answers "</div><div class='add'>+               "of '%s'",</div><div class='add'>+               ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if ((dst-&gt;op_ret &gt;= 0) &amp;&amp; (combine != NULL))</div><div class='del'>-    {</div><div class='add'>+    if ((dst-&gt;op_ret &gt;= 0) &amp;&amp; (combine != NULL)) {</div><div class='ctx'>         return combine(fop, dst, src);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_combine (ec_cbk_data_t *newcbk, ec_combine_f combine)</div><div class='add'>+void</div><div class='add'>+ec_combine(ec_cbk_data_t *newcbk, ec_combine_f combine)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = newcbk-&gt;fop;</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL, *tmp = NULL;</div><div class='hunk'>@@ -987,17 +965,14 @@ void ec_combine (ec_cbk_data_t *newcbk, ec_combine_f combine)</div><div class='ctx'>     item = fop-&gt;cbk_list.prev;</div><div class='ctx'>     list_for_each_entry(cbk, &amp;fop-&gt;cbk_list, list)</div><div class='ctx'>     {</div><div class='del'>-        if (ec_combine_check(newcbk, cbk, combine))</div><div class='del'>-        {</div><div class='add'>+        if (ec_combine_check(newcbk, cbk, combine)) {</div><div class='ctx'>             newcbk-&gt;count += cbk-&gt;count;</div><div class='ctx'>             newcbk-&gt;mask |= cbk-&gt;mask;</div><div class='ctx'> </div><div class='ctx'>             item = cbk-&gt;list.prev;</div><div class='del'>-            while (item != &amp;fop-&gt;cbk_list)</div><div class='del'>-            {</div><div class='add'>+            while (item != &amp;fop-&gt;cbk_list) {</div><div class='ctx'>                 tmp = list_entry(item, ec_cbk_data_t, list);</div><div class='del'>-                if (tmp-&gt;count &gt;= newcbk-&gt;count)</div><div class='del'>-                {</div><div class='add'>+                if (tmp-&gt;count &gt;= newcbk-&gt;count) {</div><div class='ctx'>                     break;</div><div class='ctx'>                 }</div><div class='ctx'>                 item = item-&gt;prev;</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c<br/>index 86432bd7da7..0eee0a3363f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-common.c</a></div><div class='hunk'>@@ -24,29 +24,28 @@</div><div class='ctx'> #define EC_INVALID_INDEX UINT32_MAX</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_update_fd_status (fd_t *fd, xlator_t *xl, int idx,</div><div class='del'>-                     int32_t ret_status)</div><div class='add'>+ec_update_fd_status(fd_t *fd, xlator_t *xl, int idx, int32_t ret_status)</div><div class='ctx'> {</div><div class='del'>-        ec_fd_t *fd_ctx;</div><div class='add'>+    ec_fd_t *fd_ctx;</div><div class='ctx'> </div><div class='del'>-        if (fd == NULL)</div><div class='del'>-                return;</div><div class='add'>+    if (fd == NULL)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                fd_ctx = __ec_fd_get(fd, xl);</div><div class='del'>-                if (fd_ctx) {</div><div class='del'>-                        if (ret_status &gt;= 0)</div><div class='del'>-                                fd_ctx-&gt;fd_status[idx] = EC_FD_OPENED;</div><div class='del'>-                        else</div><div class='del'>-                                fd_ctx-&gt;fd_status[idx] = EC_FD_NOT_OPENED;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        fd_ctx = __ec_fd_get(fd, xl);</div><div class='add'>+        if (fd_ctx) {</div><div class='add'>+            if (ret_status &gt;= 0)</div><div class='add'>+                fd_ctx-&gt;fd_status[idx] = EC_FD_OPENED;</div><div class='add'>+            else</div><div class='add'>+                fd_ctx-&gt;fd_status[idx] = EC_FD_NOT_OPENED;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ec_fd_ctx_need_open (fd_t *fd, xlator_t *this, uintptr_t *need_open)</div><div class='add'>+ec_fd_ctx_need_open(fd_t *fd, xlator_t *this, uintptr_t *need_open)</div><div class='ctx'> {</div><div class='ctx'>     int i = 0;</div><div class='ctx'>     int count = 0;</div><div class='hunk'>@@ -56,22 +55,22 @@ ec_fd_ctx_need_open (fd_t *fd, xlator_t *this, uintptr_t *need_open)</div><div class='ctx'>     ec = this-&gt;private;</div><div class='ctx'>     *need_open = 0;</div><div class='ctx'> </div><div class='del'>-    fd_ctx = ec_fd_get (fd, this);</div><div class='add'>+    fd_ctx = ec_fd_get(fd, this);</div><div class='ctx'>     if (!fd_ctx)</div><div class='ctx'>         return count;</div><div class='ctx'> </div><div class='del'>-    LOCK (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='ctx'>     {</div><div class='ctx'>         for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if ((fd_ctx-&gt;fd_status[i] == EC_FD_NOT_OPENED) &amp;&amp;</div><div class='del'>-                    (ec-&gt;xl_up &amp; (1&lt;&lt;i))) {</div><div class='del'>-                        fd_ctx-&gt;fd_status[i] = EC_FD_OPENING;</div><div class='del'>-                        *need_open |= (1&lt;&lt;i);</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+            if ((fd_ctx-&gt;fd_status[i] == EC_FD_NOT_OPENED) &amp;&amp;</div><div class='add'>+                (ec-&gt;xl_up &amp; (1 &lt;&lt; i))) {</div><div class='add'>+                fd_ctx-&gt;fd_status[i] = EC_FD_OPENING;</div><div class='add'>+                *need_open |= (1 &lt;&lt; i);</div><div class='add'>+                count++;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='del'>-    UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>     /* If fd needs to open on minimum number of nodes</div><div class='ctx'>      * then ignore fixing the fd as it has been</div><div class='hunk'>@@ -84,136 +83,137 @@ ec_fd_ctx_need_open (fd_t *fd, xlator_t *this, uintptr_t *need_open)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_is_fd_fixable (fd_t *fd)</div><div class='add'>+ec_is_fd_fixable(fd_t *fd)</div><div class='ctx'> {</div><div class='ctx'>     if (!fd || !fd-&gt;inode)</div><div class='ctx'>         return _gf_false;</div><div class='del'>-    else if (fd_is_anonymous (fd))</div><div class='add'>+    else if (fd_is_anonymous(fd))</div><div class='ctx'>         return _gf_false;</div><div class='del'>-    else if (gf_uuid_is_null (fd-&gt;inode-&gt;gfid))</div><div class='add'>+    else if (gf_uuid_is_null(fd-&gt;inode-&gt;gfid))</div><div class='ctx'>         return _gf_false;</div><div class='ctx'> </div><div class='ctx'>     return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_fix_open (ec_fop_data_t *fop)</div><div class='add'>+ec_fix_open(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    int                call_count = 0;</div><div class='del'>-    uintptr_t           need_open = 0;</div><div class='del'>-    int                       ret = 0;</div><div class='del'>-    loc_t                     loc = {0, };</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    uintptr_t need_open = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-    if (!ec_is_fd_fixable (fop-&gt;fd))</div><div class='add'>+    if (!ec_is_fd_fixable(fop-&gt;fd))</div><div class='ctx'>         goto out;</div><div class='ctx'> </div><div class='ctx'>     /* Evaluate how many remote fd's to be opened */</div><div class='del'>-    call_count = ec_fd_ctx_need_open (fop-&gt;fd, fop-&gt;xl, &amp;need_open);</div><div class='add'>+    call_count = ec_fd_ctx_need_open(fop-&gt;fd, fop-&gt;xl, &amp;need_open);</div><div class='ctx'>     if (!call_count)</div><div class='ctx'>         goto out;</div><div class='ctx'> </div><div class='del'>-    loc.inode = inode_ref (fop-&gt;fd-&gt;inode);</div><div class='del'>-    gf_uuid_copy (loc.gfid, fop-&gt;fd-&gt;inode-&gt;gfid);</div><div class='del'>-    ret = loc_path (&amp;loc, NULL);</div><div class='add'>+    loc.inode = inode_ref(fop-&gt;fd-&gt;inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, fop-&gt;fd-&gt;inode-&gt;gfid);</div><div class='add'>+    ret = loc_path(&amp;loc, NULL);</div><div class='ctx'>     if (ret &lt; 0) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (IA_IFDIR == fop-&gt;fd-&gt;inode-&gt;ia_type) {</div><div class='del'>-        ec_opendir(fop-&gt;frame, fop-&gt;xl, need_open, EC_MINIMUM_ONE,</div><div class='del'>-                   NULL, NULL, &amp;fop-&gt;loc[0], fop-&gt;fd, NULL);</div><div class='del'>-    } else{</div><div class='del'>-        ec_open(fop-&gt;frame, fop-&gt;xl, need_open, EC_MINIMUM_ONE,</div><div class='del'>-                NULL, NULL, &amp;loc, fop-&gt;fd-&gt;flags, fop-&gt;fd, NULL);</div><div class='add'>+        ec_opendir(fop-&gt;frame, fop-&gt;xl, need_open, EC_MINIMUM_ONE, NULL, NULL,</div><div class='add'>+                   &amp;fop-&gt;loc[0], fop-&gt;fd, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        ec_open(fop-&gt;frame, fop-&gt;xl, need_open, EC_MINIMUM_ONE, NULL, NULL,</div><div class='add'>+                &amp;loc, fop-&gt;fd-&gt;flags, fop-&gt;fd, NULL);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='del'>-ec_range_end_get (off_t fl_start, size_t fl_size)</div><div class='add'>+ec_range_end_get(off_t fl_start, size_t fl_size)</div><div class='ctx'> {</div><div class='del'>-        off_t fl_end = 0;</div><div class='del'>-        switch (fl_size) {</div><div class='add'>+    off_t fl_end = 0;</div><div class='add'>+    switch (fl_size) {</div><div class='ctx'>         case 0:</div><div class='del'>-                return fl_start;</div><div class='add'>+            return fl_start;</div><div class='ctx'>         case LLONG_MAX: /*Infinity*/</div><div class='del'>-                return LLONG_MAX;</div><div class='add'>+            return LLONG_MAX;</div><div class='ctx'>         default:</div><div class='del'>-                fl_end = fl_start + fl_size - 1;</div><div class='del'>-                if (fl_end &lt; 0) /*over-flow*/</div><div class='del'>-                        return LLONG_MAX;</div><div class='del'>-                else</div><div class='del'>-                        return fl_end;</div><div class='del'>-        }</div><div class='add'>+            fl_end = fl_start + fl_size - 1;</div><div class='add'>+            if (fl_end &lt; 0) /*over-flow*/</div><div class='add'>+                return LLONG_MAX;</div><div class='add'>+            else</div><div class='add'>+                return fl_end;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_is_range_conflict (ec_lock_link_t *l1, ec_lock_link_t *l2)</div><div class='add'>+ec_is_range_conflict(ec_lock_link_t *l1, ec_lock_link_t *l2)</div><div class='ctx'> {</div><div class='del'>-        return ((l1-&gt;fl_end &gt;= l2-&gt;fl_start) &amp;&amp; (l2-&gt;fl_end &gt;= l1-&gt;fl_start));</div><div class='add'>+    return ((l1-&gt;fl_end &gt;= l2-&gt;fl_start) &amp;&amp; (l2-&gt;fl_end &gt;= l1-&gt;fl_start));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_lock_conflict (ec_lock_link_t *l1, ec_lock_link_t *l2)</div><div class='add'>+ec_lock_conflict(ec_lock_link_t *l1, ec_lock_link_t *l2)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = l1-&gt;fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = l1-&gt;fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='del'>-        /* Fops like access/stat won't have to worry what the other fops are</div><div class='del'>-         * modifying as the fop is wound only to one brick. So it can be</div><div class='del'>-         * executed in parallel*/</div><div class='del'>-        if (l1-&gt;fop-&gt;minimum == EC_MINIMUM_ONE ||</div><div class='del'>-            l2-&gt;fop-&gt;minimum == EC_MINIMUM_ONE)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    /* Fops like access/stat won't have to worry what the other fops are</div><div class='add'>+     * modifying as the fop is wound only to one brick. So it can be</div><div class='add'>+     * executed in parallel*/</div><div class='add'>+    if (l1-&gt;fop-&gt;minimum == EC_MINIMUM_ONE ||</div><div class='add'>+        l2-&gt;fop-&gt;minimum == EC_MINIMUM_ONE)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if ((l1-&gt;fop-&gt;flags &amp; EC_FLAG_LOCK_SHARED) &amp;&amp;</div><div class='del'>-            (l2-&gt;fop-&gt;flags &amp; EC_FLAG_LOCK_SHARED))</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if ((l1-&gt;fop-&gt;flags &amp; EC_FLAG_LOCK_SHARED) &amp;&amp;</div><div class='add'>+        (l2-&gt;fop-&gt;flags &amp; EC_FLAG_LOCK_SHARED))</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!ec-&gt;parallel_writes) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (!ec-&gt;parallel_writes) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ec_is_range_conflict (l1, l2);</div><div class='add'>+    return ec_is_range_conflict(l1, l2);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint32_t</div><div class='del'>-ec_select_first_by_read_policy (ec_t *ec, ec_fop_data_t *fop)</div><div class='del'>-{</div><div class='del'>-        if (ec-&gt;read_policy == EC_ROUND_ROBIN) {</div><div class='del'>-                return ec-&gt;idx;</div><div class='del'>-        } else if (ec-&gt;read_policy == EC_GFID_HASH) {</div><div class='del'>-                if (fop-&gt;use_fd) {</div><div class='del'>-                        return SuperFastHash((char *)fop-&gt;fd-&gt;inode-&gt;gfid,</div><div class='del'>-                                   sizeof(fop-&gt;fd-&gt;inode-&gt;gfid)) % ec-&gt;nodes;</div><div class='del'>-                } else {</div><div class='del'>-                        if (gf_uuid_is_null (fop-&gt;loc[0].gfid))</div><div class='del'>-                                loc_gfid (&amp;fop-&gt;loc[0], fop-&gt;loc[0].gfid);</div><div class='del'>-                        return SuperFastHash((char *)fop-&gt;loc[0].gfid,</div><div class='del'>-                                   sizeof(fop-&gt;loc[0].gfid)) % ec-&gt;nodes;</div><div class='del'>-                }</div><div class='add'>+ec_select_first_by_read_policy(ec_t *ec, ec_fop_data_t *fop)</div><div class='add'>+{</div><div class='add'>+    if (ec-&gt;read_policy == EC_ROUND_ROBIN) {</div><div class='add'>+        return ec-&gt;idx;</div><div class='add'>+    } else if (ec-&gt;read_policy == EC_GFID_HASH) {</div><div class='add'>+        if (fop-&gt;use_fd) {</div><div class='add'>+            return SuperFastHash((char *)fop-&gt;fd-&gt;inode-&gt;gfid,</div><div class='add'>+                                 sizeof(fop-&gt;fd-&gt;inode-&gt;gfid)) %</div><div class='add'>+                   ec-&gt;nodes;</div><div class='add'>+        } else {</div><div class='add'>+            if (gf_uuid_is_null(fop-&gt;loc[0].gfid))</div><div class='add'>+                loc_gfid(&amp;fop-&gt;loc[0], fop-&gt;loc[0].gfid);</div><div class='add'>+            return SuperFastHash((char *)fop-&gt;loc[0].gfid,</div><div class='add'>+                                 sizeof(fop-&gt;loc[0].gfid)) %</div><div class='add'>+                   ec-&gt;nodes;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-gf_boolean_t ec_child_valid(ec_t * ec, ec_fop_data_t * fop, uint32_t idx)</div><div class='add'>+static gf_boolean_t</div><div class='add'>+ec_child_valid(ec_t *ec, ec_fop_data_t *fop, uint32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     return (idx &lt; ec-&gt;nodes) &amp;&amp; (((fop-&gt;remaining &gt;&gt; idx) &amp; 1) == 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static</div><div class='del'>-uint32_t ec_child_next(ec_t * ec, ec_fop_data_t * fop, uint32_t idx)</div><div class='add'>+static uint32_t</div><div class='add'>+ec_child_next(ec_t *ec, ec_fop_data_t *fop, uint32_t idx)</div><div class='ctx'> {</div><div class='del'>-    while (!ec_child_valid(ec, fop, idx))</div><div class='del'>-    {</div><div class='del'>-        if (++idx &gt;= ec-&gt;nodes)</div><div class='del'>-        {</div><div class='add'>+    while (!ec_child_valid(ec, fop, idx)) {</div><div class='add'>+        if (++idx &gt;= ec-&gt;nodes) {</div><div class='ctx'>             idx = 0;</div><div class='ctx'>         }</div><div class='del'>-        if (idx == fop-&gt;first)</div><div class='del'>-        {</div><div class='add'>+        if (idx == fop-&gt;first) {</div><div class='ctx'>             return EC_INVALID_INDEX;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='hunk'>@@ -221,20 +221,21 @@ uint32_t ec_child_next(ec_t * ec, ec_fop_data_t * fop, uint32_t idx)</div><div class='ctx'>     return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_heal_report(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, uintptr_t mask,</div><div class='del'>-                       uintptr_t good, uintptr_t bad, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_heal_report(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, uintptr_t mask, uintptr_t good,</div><div class='add'>+               uintptr_t bad, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     if (op_ret &lt; 0) {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, op_errno,</div><div class='del'>-                EC_MSG_HEAL_FAIL, "Heal failed");</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_DEBUG, op_errno, EC_MSG_HEAL_FAIL,</div><div class='add'>+               "Heal failed");</div><div class='ctx'>     } else {</div><div class='ctx'>         if ((mask &amp; ~good) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                    EC_MSG_HEAL_SUCCESS, "Heal succeeded on %d/%d "</div><div class='del'>-                    "subvolumes",</div><div class='del'>-                    gf_bits_count(mask &amp; ~(good | bad)),</div><div class='del'>-                    gf_bits_count(mask &amp; ~good));</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, EC_MSG_HEAL_SUCCESS,</div><div class='add'>+                   "Heal succeeded on %d/%d "</div><div class='add'>+                   "subvolumes",</div><div class='add'>+                   gf_bits_count(mask &amp; ~(good | bad)),</div><div class='add'>+                   gf_bits_count(mask &amp; ~good));</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -242,103 +243,101 @@ int32_t ec_heal_report(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uintptr_t</div><div class='del'>-ec_fop_needs_name_heal (ec_fop_data_t *fop)</div><div class='add'>+ec_fop_needs_name_heal(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_t          *ec         = NULL;</div><div class='del'>-        ec_cbk_data_t *cbk        = NULL;</div><div class='del'>-        ec_cbk_data_t *enoent_cbk = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    ec_cbk_data_t *enoent_cbk = NULL;</div><div class='ctx'> </div><div class='del'>-        ec = fop-&gt;xl-&gt;private;</div><div class='del'>-        if (fop-&gt;id != GF_FOP_LOOKUP)</div><div class='del'>-                return 0;</div><div class='add'>+    ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    if (fop-&gt;id != GF_FOP_LOOKUP)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!fop-&gt;loc[0].name || strlen (fop-&gt;loc[0].name) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!fop-&gt;loc[0].name || strlen(fop-&gt;loc[0].name) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry(cbk, &amp;fop-&gt;cbk_list, list)</div><div class='del'>-        {</div><div class='del'>-                if (cbk-&gt;op_ret &lt; 0 &amp;&amp; cbk-&gt;op_errno == ENOENT) {</div><div class='del'>-                        enoent_cbk = cbk;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(cbk, &amp;fop-&gt;cbk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (cbk-&gt;op_ret &lt; 0 &amp;&amp; cbk-&gt;op_errno == ENOENT) {</div><div class='add'>+            enoent_cbk = cbk;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!enoent_cbk)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!enoent_cbk)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        return ec-&gt;xl_up &amp; ~enoent_cbk-&gt;mask;</div><div class='add'>+    return ec-&gt;xl_up &amp; ~enoent_cbk-&gt;mask;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_fop_needs_heal(ec_fop_data_t *fop)</div><div class='add'>+int32_t</div><div class='add'>+ec_fop_needs_heal(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='ctx'>     if (fop-&gt;lock_count == 0) {</div><div class='del'>-    /*</div><div class='del'>-     * if fop-&gt;lock_count is zero that means it saw version mismatch</div><div class='del'>-     * without any locks so it can't be trusted. If we launch a heal</div><div class='del'>-     * based on this it will lead to INODELKs which will affect I/O</div><div class='del'>-     * performance. Considering self-heal-daemon and operations on</div><div class='del'>-     * the inode from client which take locks can still trigger the</div><div class='del'>-     * heal we can choose to not attempt a heal when fop-&gt;lock_count</div><div class='del'>-     * is zero.</div><div class='del'>-     */</div><div class='del'>-            return 0;</div><div class='add'>+        /*</div><div class='add'>+         * if fop-&gt;lock_count is zero that means it saw version mismatch</div><div class='add'>+         * without any locks so it can't be trusted. If we launch a heal</div><div class='add'>+         * based on this it will lead to INODELKs which will affect I/O</div><div class='add'>+         * performance. Considering self-heal-daemon and operations on</div><div class='add'>+         * the inode from client which take locks can still trigger the</div><div class='add'>+         * heal we can choose to not attempt a heal when fop-&gt;lock_count</div><div class='add'>+         * is zero.</div><div class='add'>+         */</div><div class='add'>+        return 0;</div><div class='ctx'>     }</div><div class='ctx'>     return (ec-&gt;xl_up &amp; ~(fop-&gt;remaining | fop-&gt;good)) != 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_check_status(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_check_status(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     int32_t partial = 0;</div><div class='ctx'>     char str1[32], str2[32], str3[32], str4[32], str5[32];</div><div class='ctx'> </div><div class='del'>-    if (!ec_fop_needs_name_heal (fop) &amp;&amp; !ec_fop_needs_heal(fop)) {</div><div class='add'>+    if (!ec_fop_needs_name_heal(fop) &amp;&amp; !ec_fop_needs_heal(fop)) {</div><div class='ctx'>         return;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (fop-&gt;answer &amp;&amp; fop-&gt;answer-&gt;op_ret &gt;= 0) {</div><div class='del'>-        if ((fop-&gt;id == GF_FOP_LOOKUP) ||</div><div class='del'>-            (fop-&gt;id == GF_FOP_STAT) || (fop-&gt;id == GF_FOP_FSTAT)) {</div><div class='add'>+        if ((fop-&gt;id == GF_FOP_LOOKUP) || (fop-&gt;id == GF_FOP_STAT) ||</div><div class='add'>+            (fop-&gt;id == GF_FOP_FSTAT)) {</div><div class='ctx'>             partial = fop-&gt;answer-&gt;iatt[0].ia_type == IA_IFDIR;</div><div class='ctx'>         } else if (fop-&gt;id == GF_FOP_OPENDIR) {</div><div class='ctx'>             partial = 1;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    gf_msg (fop-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-            EC_MSG_OP_FAIL_ON_SUBVOLS,</div><div class='del'>-            "Operation failed on %d of %d subvolumes.(up=%s, mask=%s, "</div><div class='del'>-            "remaining=%s, good=%s, bad=%s)",</div><div class='del'>-            gf_bits_count(ec-&gt;xl_up &amp; ~(fop-&gt;remaining | fop-&gt;good)), ec-&gt;nodes,</div><div class='del'>-            ec_bin(str1, sizeof(str1), ec-&gt;xl_up, ec-&gt;nodes),</div><div class='del'>-            ec_bin(str2, sizeof(str2), fop-&gt;mask, ec-&gt;nodes),</div><div class='del'>-            ec_bin(str3, sizeof(str3), fop-&gt;remaining, ec-&gt;nodes),</div><div class='del'>-            ec_bin(str4, sizeof(str4), fop-&gt;good, ec-&gt;nodes),</div><div class='del'>-            ec_bin(str5, sizeof(str5),</div><div class='del'>-            ec-&gt;xl_up &amp; ~(fop-&gt;remaining | fop-&gt;good), ec-&gt;nodes));</div><div class='del'>-    if (fop-&gt;use_fd)</div><div class='del'>-    {</div><div class='add'>+    gf_msg(fop-&gt;xl-&gt;name, GF_LOG_WARNING, 0, EC_MSG_OP_FAIL_ON_SUBVOLS,</div><div class='add'>+           "Operation failed on %d of %d subvolumes.(up=%s, mask=%s, "</div><div class='add'>+           "remaining=%s, good=%s, bad=%s)",</div><div class='add'>+           gf_bits_count(ec-&gt;xl_up &amp; ~(fop-&gt;remaining | fop-&gt;good)), ec-&gt;nodes,</div><div class='add'>+           ec_bin(str1, sizeof(str1), ec-&gt;xl_up, ec-&gt;nodes),</div><div class='add'>+           ec_bin(str2, sizeof(str2), fop-&gt;mask, ec-&gt;nodes),</div><div class='add'>+           ec_bin(str3, sizeof(str3), fop-&gt;remaining, ec-&gt;nodes),</div><div class='add'>+           ec_bin(str4, sizeof(str4), fop-&gt;good, ec-&gt;nodes),</div><div class='add'>+           ec_bin(str5, sizeof(str5), ec-&gt;xl_up &amp; ~(fop-&gt;remaining | fop-&gt;good),</div><div class='add'>+                  ec-&gt;nodes));</div><div class='add'>+    if (fop-&gt;use_fd) {</div><div class='ctx'>         if (fop-&gt;fd != NULL) {</div><div class='ctx'>             ec_fheal(NULL, fop-&gt;xl, -1, EC_MINIMUM_ONE, ec_heal_report, NULL,</div><div class='ctx'>                      fop-&gt;fd, partial, NULL);</div><div class='ctx'>         }</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='add'>+    } else {</div><div class='ctx'>         ec_heal(NULL, fop-&gt;xl, -1, EC_MINIMUM_ONE, ec_heal_report, NULL,</div><div class='ctx'>                 &amp;fop-&gt;loc[0], partial, NULL);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;loc[1].inode != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (fop-&gt;loc[1].inode != NULL) {</div><div class='ctx'>             ec_heal(NULL, fop-&gt;xl, -1, EC_MINIMUM_ONE, ec_heal_report, NULL,</div><div class='ctx'>                     &amp;fop-&gt;loc[1], partial, NULL);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_update_good(ec_fop_data_t *fop, uintptr_t good)</div><div class='add'>+void</div><div class='add'>+ec_update_good(ec_fop_data_t *fop, uintptr_t good)</div><div class='ctx'> {</div><div class='ctx'>     fop-&gt;good = good;</div><div class='ctx'> </div><div class='hunk'>@@ -349,7 +348,8 @@ void ec_update_good(ec_fop_data_t *fop, uintptr_t good)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_update_good(ec_lock_t *lock, ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_lock_update_good(ec_lock_t *lock, ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     /* Fops that are executed only on one brick do not have enough information</div><div class='ctx'>      * to update the global mask of good bricks. */</div><div class='hunk'>@@ -365,15 +365,16 @@ void ec_lock_update_good(ec_lock_t *lock, ec_fop_data_t *fop)</div><div class='ctx'>     lock-&gt;good_mask &amp;= fop-&gt;good | fop-&gt;remaining;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void __ec_fop_set_error(ec_fop_data_t * fop, int32_t error)</div><div class='add'>+void</div><div class='add'>+__ec_fop_set_error(ec_fop_data_t *fop, int32_t error)</div><div class='ctx'> {</div><div class='del'>-    if ((error != 0) &amp;&amp; (fop-&gt;error == 0))</div><div class='del'>-    {</div><div class='add'>+    if ((error != 0) &amp;&amp; (fop-&gt;error == 0)) {</div><div class='ctx'>         fop-&gt;error = error;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fop_set_error(ec_fop_data_t * fop, int32_t error)</div><div class='add'>+void</div><div class='add'>+ec_fop_set_error(ec_fop_data_t *fop, int32_t error)</div><div class='ctx'> {</div><div class='ctx'>     LOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -425,18 +426,20 @@ ec_fop_prepare_answer(ec_fop_data_t *fop, gf_boolean_t ro)</div><div class='ctx'>     return cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_sleep(ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_sleep(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     LOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    GF_ASSERT (fop-&gt;refs &gt; 0);</div><div class='add'>+    GF_ASSERT(fop-&gt;refs &gt; 0);</div><div class='ctx'>     fop-&gt;refs++;</div><div class='ctx'>     fop-&gt;jobs++;</div><div class='ctx'> </div><div class='ctx'>     UNLOCK(&amp;fop-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_check_complete(ec_fop_data_t * fop, ec_resume_f resume)</div><div class='add'>+int32_t</div><div class='add'>+ec_check_complete(ec_fop_data_t *fop, ec_resume_f resume)</div><div class='ctx'> {</div><div class='ctx'>     int32_t error = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -444,14 +447,11 @@ int32_t ec_check_complete(ec_fop_data_t * fop, ec_resume_f resume)</div><div class='ctx'> </div><div class='ctx'>     GF_ASSERT(fop-&gt;resume == NULL);</div><div class='ctx'> </div><div class='del'>-    if (--fop-&gt;jobs != 0)</div><div class='del'>-    {</div><div class='add'>+    if (--fop-&gt;jobs != 0) {</div><div class='ctx'>         ec_trace("WAIT", fop, "resume=%p", resume);</div><div class='ctx'> </div><div class='ctx'>         fop-&gt;resume = resume;</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='add'>+    } else {</div><div class='ctx'>         error = fop-&gt;error;</div><div class='ctx'>         fop-&gt;error = 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -461,7 +461,8 @@ int32_t ec_check_complete(ec_fop_data_t * fop, ec_resume_f resume)</div><div class='ctx'>     return error;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_resume(ec_fop_data_t * fop, int32_t error)</div><div class='add'>+void</div><div class='add'>+ec_resume(ec_fop_data_t *fop, int32_t error)</div><div class='ctx'> {</div><div class='ctx'>     ec_resume_f resume = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -469,16 +470,13 @@ void ec_resume(ec_fop_data_t * fop, int32_t error)</div><div class='ctx'> </div><div class='ctx'>     __ec_fop_set_error(fop, error);</div><div class='ctx'> </div><div class='del'>-    if (--fop-&gt;jobs == 0)</div><div class='del'>-    {</div><div class='add'>+    if (--fop-&gt;jobs == 0) {</div><div class='ctx'>         resume = fop-&gt;resume;</div><div class='ctx'>         fop-&gt;resume = NULL;</div><div class='del'>-        if (resume != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (resume != NULL) {</div><div class='ctx'>             ec_trace("RESUME", fop, "error=%d", error);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;error != 0)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;error != 0) {</div><div class='ctx'>                 error = fop-&gt;error;</div><div class='ctx'>             }</div><div class='ctx'>             fop-&gt;error = 0;</div><div class='hunk'>@@ -487,21 +485,20 @@ void ec_resume(ec_fop_data_t * fop, int32_t error)</div><div class='ctx'> </div><div class='ctx'>     UNLOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    if (resume != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (resume != NULL) {</div><div class='ctx'>         resume(fop, error);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ec_fop_data_release(fop);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_resume_parent(ec_fop_data_t * fop, int32_t error)</div><div class='add'>+void</div><div class='add'>+ec_resume_parent(ec_fop_data_t *fop, int32_t error)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * parent;</div><div class='add'>+    ec_fop_data_t *parent;</div><div class='ctx'> </div><div class='ctx'>     parent = fop-&gt;parent;</div><div class='del'>-    if (parent != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (parent != NULL) {</div><div class='ctx'>         ec_trace("RESUME_PARENT", fop, "error=%u", error);</div><div class='ctx'>         fop-&gt;parent = NULL;</div><div class='ctx'>         ec_resume(parent, error);</div><div class='hunk'>@@ -509,22 +506,23 @@ void ec_resume_parent(ec_fop_data_t * fop, int32_t error)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_is_recoverable_error (int32_t op_errno)</div><div class='add'>+ec_is_recoverable_error(int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        switch (op_errno) {</div><div class='add'>+    switch (op_errno) {</div><div class='ctx'>         case ENOTCONN:</div><div class='ctx'>         case ESTALE:</div><div class='ctx'>         case ENOENT:</div><div class='del'>-        case EBADFD:/*Opened fd but brick is disconnected*/</div><div class='del'>-        case EIO:/*Backend-fs crash like XFS/ext4 etc*/</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+        case EBADFD: /*Opened fd but brick is disconnected*/</div><div class='add'>+        case EIO:    /*Backend-fs crash like XFS/ext4 etc*/</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_complete(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_complete(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t resume = 0, update = 0;</div><div class='ctx'>     int healing_count = 0;</div><div class='ctx'> </div><div class='hunk'>@@ -536,9 +534,9 @@ void ec_complete(ec_fop_data_t * fop)</div><div class='ctx'>         if (fop-&gt;answer == NULL) {</div><div class='ctx'>             if (!list_empty(&amp;fop-&gt;cbk_list)) {</div><div class='ctx'>                 cbk = list_entry(fop-&gt;cbk_list.next, ec_cbk_data_t, list);</div><div class='del'>-                healing_count = gf_bits_count (cbk-&gt;mask &amp; fop-&gt;healing);</div><div class='del'>-                    /* fop shouldn't be treated as success if it is not</div><div class='del'>-                     * successful on at least fop-&gt;minimum good copies*/</div><div class='add'>+                healing_count = gf_bits_count(cbk-&gt;mask &amp; fop-&gt;healing);</div><div class='add'>+                /* fop shouldn't be treated as success if it is not</div><div class='add'>+                 * successful on at least fop-&gt;minimum good copies*/</div><div class='ctx'>                 if ((cbk-&gt;count - healing_count) &gt;= fop-&gt;minimum) {</div><div class='ctx'>                     fop-&gt;answer = cbk;</div><div class='ctx'> </div><div class='hunk'>@@ -560,8 +558,7 @@ void ec_complete(ec_fop_data_t * fop)</div><div class='ctx'>         ec_update_good(fop, cbk-&gt;mask);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (resume)</div><div class='del'>-    {</div><div class='add'>+    if (resume) {</div><div class='ctx'>         ec_resume(fop, 0);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -571,40 +568,39 @@ void ec_complete(ec_fop_data_t * fop)</div><div class='ctx'> /* There could be already granted locks sitting on the bricks, unlock for which</div><div class='ctx'>  * must be wound at all costs*/</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_must_wind (ec_fop_data_t *fop)</div><div class='del'>-{</div><div class='del'>-        if ((fop-&gt;id == GF_FOP_INODELK) || (fop-&gt;id == GF_FOP_FINODELK) ||</div><div class='del'>-            (fop-&gt;id == GF_FOP_LK)) {</div><div class='del'>-                if (fop-&gt;flock.l_type == F_UNLCK)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        } else if ((fop-&gt;id == GF_FOP_ENTRYLK) ||</div><div class='del'>-                   (fop-&gt;id == GF_FOP_FENTRYLK)) {</div><div class='del'>-                if (fop-&gt;entrylk_cmd == ENTRYLK_UNLOCK)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+ec_must_wind(ec_fop_data_t *fop)</div><div class='add'>+{</div><div class='add'>+    if ((fop-&gt;id == GF_FOP_INODELK) || (fop-&gt;id == GF_FOP_FINODELK) ||</div><div class='add'>+        (fop-&gt;id == GF_FOP_LK)) {</div><div class='add'>+        if (fop-&gt;flock.l_type == F_UNLCK)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    } else if ((fop-&gt;id == GF_FOP_ENTRYLK) || (fop-&gt;id == GF_FOP_FENTRYLK)) {</div><div class='add'>+        if (fop-&gt;entrylk_cmd == ENTRYLK_UNLOCK)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_internal_op (ec_fop_data_t *fop)</div><div class='del'>-{</div><div class='del'>-        if (ec_must_wind (fop))</div><div class='del'>-                return _gf_true;</div><div class='del'>-        if (fop-&gt;id == GF_FOP_XATTROP)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        if (fop-&gt;id == GF_FOP_FXATTROP)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+ec_internal_op(ec_fop_data_t *fop)</div><div class='add'>+{</div><div class='add'>+    if (ec_must_wind(fop))</div><div class='add'>+        return _gf_true;</div><div class='add'>+    if (fop-&gt;id == GF_FOP_XATTROP)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    if (fop-&gt;id == GF_FOP_FXATTROP)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-ec_msg_str (ec_fop_data_t *fop)</div><div class='add'>+ec_msg_str(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    loc_t    *loc1 = NULL;</div><div class='del'>-    loc_t    *loc2 = NULL;</div><div class='del'>-    char     gfid1[64] = {0};</div><div class='del'>-    char     gfid2[64] = {0};</div><div class='add'>+    loc_t *loc1 = NULL;</div><div class='add'>+    loc_t *loc2 = NULL;</div><div class='add'>+    char gfid1[64] = {0};</div><div class='add'>+    char gfid2[64] = {0};</div><div class='ctx'> </div><div class='ctx'>     if (fop-&gt;errstr)</div><div class='ctx'>         return fop-&gt;errstr;</div><div class='hunk'>@@ -614,29 +610,29 @@ ec_msg_str (ec_fop_data_t *fop)</div><div class='ctx'>         loc2 = &amp;fop-&gt;loc[1];</div><div class='ctx'> </div><div class='ctx'>         if (fop-&gt;id == GF_FOP_RENAME) {</div><div class='del'>-                gf_asprintf(&amp;fop-&gt;errstr,</div><div class='del'>-                            "FOP : '%s' failed on '%s' and '%s' with gfids "</div><div class='del'>-                            "%s and %s respectively", ec_fop_name (fop-&gt;id),</div><div class='del'>-                            loc1-&gt;path, loc2-&gt;path,</div><div class='del'>-                            uuid_utoa_r (loc1-&gt;gfid, gfid1),</div><div class='del'>-                            uuid_utoa_r (loc2-&gt;gfid, gfid2));</div><div class='add'>+            gf_asprintf(&amp;fop-&gt;errstr,</div><div class='add'>+                        "FOP : '%s' failed on '%s' and '%s' with gfids "</div><div class='add'>+                        "%s and %s respectively",</div><div class='add'>+                        ec_fop_name(fop-&gt;id), loc1-&gt;path, loc2-&gt;path,</div><div class='add'>+                        uuid_utoa_r(loc1-&gt;gfid, gfid1),</div><div class='add'>+                        uuid_utoa_r(loc2-&gt;gfid, gfid2));</div><div class='ctx'>         } else {</div><div class='del'>-                gf_asprintf(&amp;fop-&gt;errstr,</div><div class='del'>-                            "FOP : '%s' failed on '%s' with gfid %s",</div><div class='del'>-                            ec_fop_name (fop-&gt;id),</div><div class='del'>-                            loc1-&gt;path, uuid_utoa_r (loc1-&gt;gfid, gfid1));</div><div class='add'>+            gf_asprintf(&amp;fop-&gt;errstr, "FOP : '%s' failed on '%s' with gfid %s",</div><div class='add'>+                        ec_fop_name(fop-&gt;id), loc1-&gt;path,</div><div class='add'>+                        uuid_utoa_r(loc1-&gt;gfid, gfid1));</div><div class='ctx'>         }</div><div class='ctx'>     } else {</div><div class='ctx'>         gf_asprintf(&amp;fop-&gt;errstr, "FOP : '%s' failed on gfid %s",</div><div class='del'>-                    ec_fop_name (fop-&gt;id),</div><div class='del'>-                    uuid_utoa_r (fop-&gt;fd-&gt;inode-&gt;gfid, gfid1));</div><div class='add'>+                    ec_fop_name(fop-&gt;id),</div><div class='add'>+                    uuid_utoa_r(fop-&gt;fd-&gt;inode-&gt;gfid, gfid1));</div><div class='ctx'>     }</div><div class='ctx'>     return fop-&gt;errstr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_child_select(ec_fop_data_t * fop)</div><div class='add'>+int32_t</div><div class='add'>+ec_child_select(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     int32_t first = 0, num = 0;</div><div class='ctx'> </div><div class='ctx'>     ec_fop_cleanup(fop);</div><div class='hunk'>@@ -645,26 +641,22 @@ int32_t ec_child_select(ec_fop_data_t * fop)</div><div class='ctx'>     /* Wind the fop on same subvols as parent for any internal extra fops like</div><div class='ctx'>      * head/tail read in case of writev fop. Unlocks shouldn't do this because</div><div class='ctx'>      * unlock should go on all subvols where lock is performed*/</div><div class='del'>-    if (fop-&gt;parent &amp;&amp; !ec_internal_op (fop)) {</div><div class='del'>-            fop-&gt;mask &amp;= (fop-&gt;parent-&gt;mask &amp; ~fop-&gt;parent-&gt;healing);</div><div class='add'>+    if (fop-&gt;parent &amp;&amp; !ec_internal_op(fop)) {</div><div class='add'>+        fop-&gt;mask &amp;= (fop-&gt;parent-&gt;mask &amp; ~fop-&gt;parent-&gt;healing);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if ((fop-&gt;mask &amp; ~ec-&gt;xl_up) != 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                EC_MSG_OP_EXEC_UNAVAIL,</div><div class='del'>-                "Executing operation with "</div><div class='del'>-                "some subvolumes unavailable. (%lX). %s ",</div><div class='del'>-                fop-&gt;mask &amp; ~ec-&gt;xl_up, ec_msg_str(fop));</div><div class='add'>+    if ((fop-&gt;mask &amp; ~ec-&gt;xl_up) != 0) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_WARNING, 0, EC_MSG_OP_EXEC_UNAVAIL,</div><div class='add'>+               "Executing operation with "</div><div class='add'>+               "some subvolumes unavailable. (%lX). %s ",</div><div class='add'>+               fop-&gt;mask &amp; ~ec-&gt;xl_up, ec_msg_str(fop));</div><div class='ctx'>         fop-&gt;mask &amp;= ec-&gt;xl_up;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    switch (fop-&gt;minimum)</div><div class='del'>-    {</div><div class='add'>+    switch (fop-&gt;minimum) {</div><div class='ctx'>         case EC_MINIMUM_ALL:</div><div class='ctx'>             fop-&gt;minimum = gf_bits_count(fop-&gt;mask);</div><div class='del'>-            if (fop-&gt;minimum &gt;= ec-&gt;fragments)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;minimum &gt;= ec-&gt;fragments) {</div><div class='ctx'>                 break;</div><div class='ctx'>             }</div><div class='ctx'>         case EC_MINIMUM_MIN:</div><div class='hunk'>@@ -675,11 +667,11 @@ int32_t ec_child_select(ec_fop_data_t * fop)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (ec-&gt;read_policy == EC_ROUND_ROBIN) {</div><div class='del'>-            first = ec-&gt;idx;</div><div class='del'>-            if (++first &gt;= ec-&gt;nodes) {</div><div class='del'>-                first = 0;</div><div class='del'>-            }</div><div class='del'>-            ec-&gt;idx = first;</div><div class='add'>+        first = ec-&gt;idx;</div><div class='add'>+        if (++first &gt;= ec-&gt;nodes) {</div><div class='add'>+            first = 0;</div><div class='add'>+        }</div><div class='add'>+        ec-&gt;idx = first;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     num = gf_bits_count(fop-&gt;mask);</div><div class='hunk'>@@ -690,14 +682,12 @@ int32_t ec_child_select(ec_fop_data_t * fop)</div><div class='ctx'> </div><div class='ctx'>     ec_trace("SELECT", fop, "");</div><div class='ctx'> </div><div class='del'>-    if ((num &lt; fop-&gt;minimum) &amp;&amp; (num &lt; ec-&gt;fragments))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (ec-&gt;xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                EC_MSG_CHILDS_INSUFFICIENT,</div><div class='del'>-                "Insufficient available children "</div><div class='del'>-                "for this request (have %d, need "</div><div class='del'>-                "%d). %s",</div><div class='del'>-                num, fop-&gt;minimum, ec_msg_str(fop));</div><div class='add'>+    if ((num &lt; fop-&gt;minimum) &amp;&amp; (num &lt; ec-&gt;fragments)) {</div><div class='add'>+        gf_msg(ec-&gt;xl-&gt;name, GF_LOG_ERROR, 0, EC_MSG_CHILDS_INSUFFICIENT,</div><div class='add'>+               "Insufficient available children "</div><div class='add'>+               "for this request (have %d, need "</div><div class='add'>+               "%d). %s",</div><div class='add'>+               num, fop-&gt;minimum, ec_msg_str(fop));</div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -706,10 +696,11 @@ int32_t ec_child_select(ec_fop_data_t * fop)</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_dispatch_next(ec_fop_data_t * fop, uint32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_dispatch_next(ec_fop_data_t *fop, uint32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     uint32_t i = EC_INVALID_INDEX;</div><div class='del'>-    ec_t * ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -727,15 +718,15 @@ void ec_dispatch_next(ec_fop_data_t * fop, uint32_t idx)</div><div class='ctx'> </div><div class='ctx'>     UNLOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    if (i &lt; EC_MAX_NODES)</div><div class='del'>-    {</div><div class='add'>+    if (i &lt; EC_MAX_NODES) {</div><div class='ctx'>         fop-&gt;wind(ec, fop, idx);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_dispatch_mask(ec_fop_data_t * fop, uintptr_t mask)</div><div class='add'>+void</div><div class='add'>+ec_dispatch_mask(ec_fop_data_t *fop, uintptr_t mask)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     int32_t count, idx;</div><div class='ctx'> </div><div class='ctx'>     count = gf_bits_count(mask);</div><div class='hunk'>@@ -752,10 +743,8 @@ void ec_dispatch_mask(ec_fop_data_t * fop, uintptr_t mask)</div><div class='ctx'>     UNLOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>     idx = 0;</div><div class='del'>-    while (mask != 0)</div><div class='del'>-    {</div><div class='del'>-        if ((mask &amp; 1) != 0)</div><div class='del'>-        {</div><div class='add'>+    while (mask != 0) {</div><div class='add'>+        if ((mask &amp; 1) != 0) {</div><div class='ctx'>             fop-&gt;wind(ec, fop, idx);</div><div class='ctx'>         }</div><div class='ctx'>         idx++;</div><div class='hunk'>@@ -763,27 +752,27 @@ void ec_dispatch_mask(ec_fop_data_t * fop, uintptr_t mask)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_dispatch_start(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_dispatch_start(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     fop-&gt;answer = NULL;</div><div class='ctx'>     fop-&gt;good = 0;</div><div class='ctx'> </div><div class='ctx'>     INIT_LIST_HEAD(&amp;fop-&gt;cbk_list);</div><div class='ctx'> </div><div class='del'>-    if (fop-&gt;lock_count &gt; 0)</div><div class='del'>-    {</div><div class='add'>+    if (fop-&gt;lock_count &gt; 0) {</div><div class='ctx'>         ec_owner_copy(fop-&gt;frame, &amp;fop-&gt;req_frame-&gt;root-&gt;lk_owner);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_dispatch_one(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_dispatch_one(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_dispatch_start(fop);</div><div class='ctx'> </div><div class='del'>-    if (ec_child_select(fop))</div><div class='del'>-    {</div><div class='add'>+    if (ec_child_select(fop)) {</div><div class='ctx'>         fop-&gt;expected = 1;</div><div class='del'>-        fop-&gt;first = ec_select_first_by_read_policy (fop-&gt;xl-&gt;private, fop);</div><div class='add'>+        fop-&gt;first = ec_select_first_by_read_policy(fop-&gt;xl-&gt;private, fop);</div><div class='ctx'> </div><div class='ctx'>         ec_dispatch_next(fop, fop-&gt;first);</div><div class='ctx'>     }</div><div class='hunk'>@@ -799,8 +788,8 @@ ec_dispatch_one_retry(ec_fop_data_t *fop, ec_cbk_data_t **cbk)</div><div class='ctx'>         *cbk = tmp;</div><div class='ctx'>     }</div><div class='ctx'>     if ((tmp != NULL) &amp;&amp; (tmp-&gt;op_ret &lt; 0) &amp;&amp;</div><div class='del'>-        ec_is_recoverable_error (tmp-&gt;op_errno)) {</div><div class='del'>-        GF_ASSERT (fop-&gt;mask &amp; (1ULL &lt;&lt; tmp-&gt;idx));</div><div class='add'>+        ec_is_recoverable_error(tmp-&gt;op_errno)) {</div><div class='add'>+        GF_ASSERT(fop-&gt;mask &amp; (1ULL &lt;&lt; tmp-&gt;idx));</div><div class='ctx'>         fop-&gt;mask ^= (1ULL &lt;&lt; tmp-&gt;idx);</div><div class='ctx'>         if (fop-&gt;mask) {</div><div class='ctx'>             return _gf_true;</div><div class='hunk'>@@ -810,12 +799,12 @@ ec_dispatch_one_retry(ec_fop_data_t *fop, ec_cbk_data_t **cbk)</div><div class='ctx'>     return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_dispatch_inc(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_dispatch_inc(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_dispatch_start(fop);</div><div class='ctx'> </div><div class='del'>-    if (ec_child_select(fop))</div><div class='del'>-    {</div><div class='add'>+    if (ec_child_select(fop)) {</div><div class='ctx'>         fop-&gt;expected = gf_bits_count(fop-&gt;remaining);</div><div class='ctx'>         fop-&gt;first = 0;</div><div class='ctx'> </div><div class='hunk'>@@ -824,35 +813,34 @@ void ec_dispatch_inc(ec_fop_data_t * fop)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_dispatch_all (ec_fop_data_t *fop)</div><div class='add'>+ec_dispatch_all(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_dispatch_start(fop);</div><div class='add'>+    ec_dispatch_start(fop);</div><div class='ctx'> </div><div class='del'>-        if (ec_child_select(fop)) {</div><div class='del'>-                fop-&gt;expected = gf_bits_count(fop-&gt;remaining);</div><div class='del'>-                fop-&gt;first = 0;</div><div class='add'>+    if (ec_child_select(fop)) {</div><div class='add'>+        fop-&gt;expected = gf_bits_count(fop-&gt;remaining);</div><div class='add'>+        fop-&gt;first = 0;</div><div class='ctx'> </div><div class='del'>-                ec_dispatch_mask(fop, fop-&gt;remaining);</div><div class='del'>-        }</div><div class='add'>+        ec_dispatch_mask(fop, fop-&gt;remaining);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_dispatch_min(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_dispatch_min(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     uintptr_t mask;</div><div class='ctx'>     uint32_t idx;</div><div class='ctx'>     int32_t count;</div><div class='ctx'> </div><div class='ctx'>     ec_dispatch_start(fop);</div><div class='ctx'> </div><div class='del'>-    if (ec_child_select(fop))</div><div class='del'>-    {</div><div class='add'>+    if (ec_child_select(fop)) {</div><div class='ctx'>         fop-&gt;expected = count = ec-&gt;fragments;</div><div class='del'>-        fop-&gt;first = ec_select_first_by_read_policy (fop-&gt;xl-&gt;private, fop);</div><div class='add'>+        fop-&gt;first = ec_select_first_by_read_policy(fop-&gt;xl-&gt;private, fop);</div><div class='ctx'>         idx = fop-&gt;first - 1;</div><div class='ctx'>         mask = 0;</div><div class='del'>-        while (count-- &gt; 0)</div><div class='del'>-        {</div><div class='add'>+        while (count-- &gt; 0) {</div><div class='ctx'>             idx = ec_child_next(ec, fop, idx + 1);</div><div class='ctx'>             if (idx &lt; EC_MAX_NODES)</div><div class='ctx'>                 mask |= 1ULL &lt;&lt; idx;</div><div class='hunk'>@@ -862,19 +850,18 @@ void ec_dispatch_min(ec_fop_data_t * fop)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_lock_t *ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc)</div><div class='add'>+ec_lock_t *</div><div class='add'>+ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='del'>-    ec_lock_t * lock;</div><div class='add'>+    ec_lock_t *lock;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='ctx'>     if ((loc-&gt;inode == NULL) ||</div><div class='del'>-        (gf_uuid_is_null(loc-&gt;gfid) &amp;&amp; gf_uuid_is_null(loc-&gt;inode-&gt;gfid)))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_INVALID_INODE,</div><div class='del'>-                "Trying to lock based on an invalid "</div><div class='del'>-                "inode");</div><div class='add'>+        (gf_uuid_is_null(loc-&gt;gfid) &amp;&amp; gf_uuid_is_null(loc-&gt;inode-&gt;gfid))) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_INODE,</div><div class='add'>+               "Trying to lock based on an invalid "</div><div class='add'>+               "inode");</div><div class='ctx'> </div><div class='ctx'>         __ec_fop_set_error(fop, EINVAL);</div><div class='ctx'> </div><div class='hunk'>@@ -882,8 +869,7 @@ ec_lock_t *ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     lock = mem_get0(ec-&gt;lock_pool);</div><div class='del'>-    if (lock != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (lock != NULL) {</div><div class='ctx'>         lock-&gt;good_mask = -1ULL;</div><div class='ctx'>         INIT_LIST_HEAD(&amp;lock-&gt;owners);</div><div class='ctx'>         INIT_LIST_HEAD(&amp;lock-&gt;waiting);</div><div class='hunk'>@@ -900,7 +886,8 @@ ec_lock_t *ec_lock_allocate(ec_fop_data_t *fop, loc_t *loc)</div><div class='ctx'>     return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_destroy(ec_lock_t * lock)</div><div class='add'>+void</div><div class='add'>+ec_lock_destroy(ec_lock_t *lock)</div><div class='ctx'> {</div><div class='ctx'>     loc_wipe(&amp;lock-&gt;loc);</div><div class='ctx'>     if (lock-&gt;fd != NULL) {</div><div class='hunk'>@@ -910,13 +897,15 @@ void ec_lock_destroy(ec_lock_t * lock)</div><div class='ctx'>     mem_put(lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_lock_compare(ec_lock_t * lock1, ec_lock_t * lock2)</div><div class='add'>+int32_t</div><div class='add'>+ec_lock_compare(ec_lock_t *lock1, ec_lock_t *lock2)</div><div class='ctx'> {</div><div class='ctx'>     return gf_uuid_compare(lock1-&gt;loc.gfid, lock2-&gt;loc.gfid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags,</div><div class='del'>-                    loc_t *base, off_t fl_start, size_t fl_size)</div><div class='add'>+void</div><div class='add'>+ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags, loc_t *base,</div><div class='add'>+               off_t fl_start, size_t fl_size)</div><div class='ctx'> {</div><div class='ctx'>     ec_lock_link_t *link;</div><div class='ctx'> </div><div class='hunk'>@@ -951,14 +940,14 @@ void ec_lock_insert(ec_fop_data_t *fop, ec_lock_t *lock, uint32_t flags,</div><div class='ctx'>     link-&gt;update[EC_METADATA_TXN] = (flags &amp; EC_UPDATE_META) != 0;</div><div class='ctx'>     link-&gt;base = base;</div><div class='ctx'>     link-&gt;fl_start = fl_start;</div><div class='del'>-    link-&gt;fl_end = ec_range_end_get (fl_start, fl_size);</div><div class='add'>+    link-&gt;fl_end = ec_range_end_get(fl_start, fl_size);</div><div class='ctx'> </div><div class='ctx'>     lock-&gt;refs_pending++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc,</div><div class='del'>-                                    uint32_t flags, loc_t *base,</div><div class='del'>-                                    off_t fl_start, size_t fl_size)</div><div class='add'>+void</div><div class='add'>+ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc, uint32_t flags,</div><div class='add'>+                               loc_t *base, off_t fl_start, size_t fl_size)</div><div class='ctx'> {</div><div class='ctx'>     ec_lock_t *lock = NULL;</div><div class='ctx'>     ec_inode_t *ctx;</div><div class='hunk'>@@ -987,8 +976,8 @@ void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc,</div><div class='ctx'>         if ((fop-&gt;lock_count &gt; 0) &amp;&amp; (fop-&gt;locks[0].lock == lock)) {</div><div class='ctx'>             /* Combine data/meta updates */</div><div class='ctx'>             fop-&gt;locks[0].update[EC_DATA_TXN] |= (flags &amp; EC_UPDATE_DATA) != 0;</div><div class='del'>-            fop-&gt;locks[0].update[EC_METADATA_TXN] |=</div><div class='del'>-                                                 (flags &amp; EC_UPDATE_META) != 0;</div><div class='add'>+            fop-&gt;locks[0].update[EC_METADATA_TXN] |= (flags &amp; EC_UPDATE_META) !=</div><div class='add'>+                                                     0;</div><div class='ctx'> </div><div class='ctx'>             /* Only one base inode is allowed per fop, so there shouldn't be</div><div class='ctx'>              * overwrites here. */</div><div class='hunk'>@@ -999,8 +988,10 @@ void ec_lock_prepare_inode_internal(ec_fop_data_t *fop, loc_t *loc,</div><div class='ctx'>             goto update_query;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ec_trace("LOCK_INODELK", fop, "lock=%p, inode=%p. Lock already "</div><div class='del'>-                                      "acquired", lock, loc-&gt;inode);</div><div class='add'>+        ec_trace("LOCK_INODELK", fop,</div><div class='add'>+                 "lock=%p, inode=%p. Lock already "</div><div class='add'>+                 "acquired",</div><div class='add'>+                 lock, loc-&gt;inode);</div><div class='ctx'> </div><div class='ctx'>         goto insert;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1026,14 +1017,16 @@ unlock:</div><div class='ctx'>     UNLOCK(&amp;loc-&gt;inode-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags,</div><div class='del'>-                           off_t fl_start, size_t fl_size)</div><div class='add'>+void</div><div class='add'>+ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags,</div><div class='add'>+                      off_t fl_start, size_t fl_size)</div><div class='ctx'> {</div><div class='ctx'>     ec_lock_prepare_inode_internal(fop, loc, flags, NULL, fl_start, fl_size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base,</div><div class='del'>-                                  uint32_t flags)</div><div class='add'>+void</div><div class='add'>+ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base,</div><div class='add'>+                             uint32_t flags)</div><div class='ctx'> {</div><div class='ctx'>     loc_t tmp;</div><div class='ctx'>     int32_t err;</div><div class='hunk'>@@ -1052,7 +1045,7 @@ void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base,</div><div class='ctx'>     if ((flags &amp; EC_INODE_SIZE) != 0) {</div><div class='ctx'>         flags ^= EC_INODE_SIZE;</div><div class='ctx'>     } else {</div><div class='del'>-            base = NULL;</div><div class='add'>+        base = NULL;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ec_lock_prepare_inode_internal(fop, &amp;tmp, flags, base, 0, LLONG_MAX);</div><div class='hunk'>@@ -1060,8 +1053,9 @@ void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base,</div><div class='ctx'>     loc_wipe(&amp;tmp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags,</div><div class='del'>-                        off_t fl_start, size_t fl_size)</div><div class='add'>+void</div><div class='add'>+ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags, off_t fl_start,</div><div class='add'>+                   size_t fl_size)</div><div class='ctx'> {</div><div class='ctx'>     loc_t loc;</div><div class='ctx'>     int32_t err;</div><div class='hunk'>@@ -1083,15 +1077,14 @@ void ec_lock_prepare_fd(ec_fop_data_t *fop, fd_t *fd, uint32_t flags,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_config_check (xlator_t *xl, ec_config_t *config)</div><div class='add'>+ec_config_check(xlator_t *xl, ec_config_t *config)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec;</div><div class='ctx'> </div><div class='ctx'>     ec = xl-&gt;private;</div><div class='ctx'>     if ((config-&gt;version != EC_CONFIG_VERSION) ||</div><div class='ctx'>         (config-&gt;algorithm != EC_CONFIG_ALGORITHM) ||</div><div class='del'>-        (config-&gt;gf_word_size != EC_GF_BITS) ||</div><div class='del'>-        (config-&gt;bricks != ec-&gt;nodes) ||</div><div class='add'>+        (config-&gt;gf_word_size != EC_GF_BITS) || (config-&gt;bricks != ec-&gt;nodes) ||</div><div class='ctx'>         (config-&gt;redundancy != ec-&gt;redundancy) ||</div><div class='ctx'>         (config-&gt;chunk_size != EC_METHOD_CHUNK_SIZE)) {</div><div class='ctx'>         uint32_t data_bricks;</div><div class='hunk'>@@ -1110,20 +1103,17 @@ ec_config_check (xlator_t *xl, ec_config_t *config)</div><div class='ctx'>         if ((config-&gt;redundancy &lt; 1) ||</div><div class='ctx'>             (config-&gt;redundancy * 2 &gt;= config-&gt;bricks) ||</div><div class='ctx'>             !ec_is_power_of_2(config-&gt;gf_word_size) ||</div><div class='del'>-            ((config-&gt;chunk_size * 8) % (config-&gt;gf_word_size * data_bricks)</div><div class='del'>-                                                                       != 0)) {</div><div class='del'>-            gf_msg (xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_INVALID_CONFIG,</div><div class='del'>-                    "Invalid or corrupted config");</div><div class='add'>+            ((config-&gt;chunk_size * 8) % (config-&gt;gf_word_size * data_bricks) !=</div><div class='add'>+             0)) {</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_CONFIG,</div><div class='add'>+                   "Invalid or corrupted config");</div><div class='ctx'>         } else {</div><div class='del'>-            gf_msg (xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_INVALID_CONFIG,</div><div class='del'>-                    "Unsupported config "</div><div class='del'>-                    "(V=%u, A=%u, W=%u, "</div><div class='del'>-                    "N=%u, R=%u, S=%u)",</div><div class='del'>-                   config-&gt;version, config-&gt;algorithm,</div><div class='del'>-                   config-&gt;gf_word_size, config-&gt;bricks,</div><div class='del'>-                   config-&gt;redundancy, config-&gt;chunk_size);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_CONFIG,</div><div class='add'>+                   "Unsupported config "</div><div class='add'>+                   "(V=%u, A=%u, W=%u, "</div><div class='add'>+                   "N=%u, R=%u, S=%u)",</div><div class='add'>+                   config-&gt;version, config-&gt;algorithm, config-&gt;gf_word_size,</div><div class='add'>+                   config-&gt;bricks, config-&gt;redundancy, config-&gt;chunk_size);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         return _gf_false;</div><div class='hunk'>@@ -1133,20 +1123,18 @@ ec_config_check (xlator_t *xl, ec_config_t *config)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_set_dirty_flag (ec_lock_link_t *link, ec_inode_t *ctx,</div><div class='del'>-                   uint64_t *dirty)</div><div class='add'>+ec_set_dirty_flag(ec_lock_link_t *link, ec_inode_t *ctx, uint64_t *dirty)</div><div class='ctx'> {</div><div class='del'>-</div><div class='ctx'>     gf_boolean_t set_dirty = _gf_false;</div><div class='ctx'> </div><div class='ctx'>     if (link-&gt;update[EC_DATA_TXN] &amp;&amp; !ctx-&gt;dirty[EC_DATA_TXN]) {</div><div class='del'>-            if (!link-&gt;optimistic_changelog)</div><div class='del'>-                dirty[EC_DATA_TXN] = 1;</div><div class='add'>+        if (!link-&gt;optimistic_changelog)</div><div class='add'>+            dirty[EC_DATA_TXN] = 1;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (link-&gt;update[EC_METADATA_TXN] &amp;&amp; !ctx-&gt;dirty[EC_METADATA_TXN]) {</div><div class='del'>-            if (!link-&gt;optimistic_changelog)</div><div class='del'>-                dirty[EC_METADATA_TXN] = 1;</div><div class='add'>+        if (!link-&gt;optimistic_changelog)</div><div class='add'>+            dirty[EC_METADATA_TXN] = 1;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (dirty[EC_METADATA_TXN] || dirty[EC_DATA_TXN]) {</div><div class='hunk'>@@ -1157,9 +1145,9 @@ ec_set_dirty_flag (ec_lock_link_t *link, ec_inode_t *ctx,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_prepare_update_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                       xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       dict_t *dict, dict_t *xdata)</div><div class='add'>+ec_prepare_update_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     struct list_head list;</div><div class='ctx'>     ec_fop_data_t *fop = cookie, *parent, *tmp;</div><div class='hunk'>@@ -1179,95 +1167,87 @@ ec_prepare_update_cbk (call_frame_t *frame, void *cookie,</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;lock-&gt;loc.inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    list_for_each_entry(link, &amp;lock-&gt;owners, owner_list) {</div><div class='add'>+    list_for_each_entry(link, &amp;lock-&gt;owners, owner_list)</div><div class='add'>+    {</div><div class='ctx'>         if ((link-&gt;waiting_flags &amp; provided_flags) != 0) {</div><div class='ctx'>             link-&gt;waiting_flags ^= (link-&gt;waiting_flags &amp; provided_flags);</div><div class='ctx'>             if (EC_NEEDED_FLAGS(link-&gt;waiting_flags) == 0)</div><div class='del'>-                    list_add_tail(&amp;link-&gt;fop-&gt;cbk_list, &amp;list);</div><div class='add'>+                list_add_tail(&amp;link-&gt;fop-&gt;cbk_list, &amp;list);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (op_ret &lt; 0) {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                EC_MSG_SIZE_VERS_GET_FAIL,</div><div class='del'>-                "Failed to get size and version :  %s",</div><div class='del'>-                ec_msg_str(fop));</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, EC_MSG_SIZE_VERS_GET_FAIL,</div><div class='add'>+               "Failed to get size and version :  %s", ec_msg_str(fop));</div><div class='ctx'> </div><div class='ctx'>         goto unlock;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (EC_FLAGS_HAVE(provided_flags, EC_FLAG_XATTROP)) {</div><div class='del'>-            op_errno = -ec_dict_del_array(dict, EC_XATTR_VERSION,</div><div class='del'>-                                          ctx-&gt;pre_version,</div><div class='del'>-                                          EC_VERSION_SIZE);</div><div class='add'>+        op_errno = -ec_dict_del_array(dict, EC_XATTR_VERSION, ctx-&gt;pre_version,</div><div class='add'>+                                      EC_VERSION_SIZE);</div><div class='add'>+        if (op_errno != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                   EC_MSG_VER_XATTR_GET_FAIL, "Unable to get version xattr. %s",</div><div class='add'>+                   ec_msg_str(fop));</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ctx-&gt;post_version[0] += ctx-&gt;pre_version[0];</div><div class='add'>+        ctx-&gt;post_version[1] += ctx-&gt;pre_version[1];</div><div class='add'>+</div><div class='add'>+        ctx-&gt;have_version = _gf_true;</div><div class='add'>+</div><div class='add'>+        if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG ||</div><div class='add'>+            lock-&gt;loc.inode-&gt;ia_type == IA_INVAL) {</div><div class='add'>+            op_errno = -ec_dict_del_number(dict, EC_XATTR_SIZE, &amp;ctx-&gt;pre_size);</div><div class='ctx'>             if (op_errno != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        EC_MSG_VER_XATTR_GET_FAIL,</div><div class='del'>-                        "Unable to get version xattr. %s",</div><div class='del'>-                        ec_msg_str(fop));</div><div class='del'>-                goto unlock;</div><div class='add'>+                if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                           EC_MSG_SIZE_XATTR_GET_FAIL,</div><div class='add'>+                           "Unable to get size xattr. %s", ec_msg_str(fop));</div><div class='add'>+                    goto unlock;</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                ctx-&gt;post_size = ctx-&gt;pre_size;</div><div class='add'>+</div><div class='add'>+                ctx-&gt;have_size = _gf_true;</div><div class='ctx'>             }</div><div class='del'>-            ctx-&gt;post_version[0] += ctx-&gt;pre_version[0];</div><div class='del'>-            ctx-&gt;post_version[1] += ctx-&gt;pre_version[1];</div><div class='ctx'> </div><div class='del'>-            ctx-&gt;have_version = _gf_true;</div><div class='add'>+            op_errno = -ec_dict_del_config(dict, EC_XATTR_CONFIG, &amp;ctx-&gt;config);</div><div class='add'>+            if (op_errno != 0) {</div><div class='add'>+                if ((lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) ||</div><div class='add'>+                    (op_errno != ENODATA)) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+                           EC_MSG_CONFIG_XATTR_GET_FAIL,</div><div class='add'>+                           "Unable to get config xattr. %s", ec_msg_str(fop));</div><div class='ctx'> </div><div class='del'>-            if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG ||</div><div class='del'>-                lock-&gt;loc.inode-&gt;ia_type == IA_INVAL) {</div><div class='del'>-                op_errno = -ec_dict_del_number(dict, EC_XATTR_SIZE,</div><div class='del'>-                                               &amp;ctx-&gt;pre_size);</div><div class='del'>-                if (op_errno != 0) {</div><div class='del'>-                    if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                EC_MSG_SIZE_XATTR_GET_FAIL,</div><div class='del'>-                                "Unable to get size xattr. %s",</div><div class='del'>-                                ec_msg_str(fop));</div><div class='del'>-                        goto unlock;</div><div class='del'>-                    }</div><div class='del'>-                } else {</div><div class='del'>-                    ctx-&gt;post_size = ctx-&gt;pre_size;</div><div class='del'>-</div><div class='del'>-                    ctx-&gt;have_size = _gf_true;</div><div class='add'>+                    goto unlock;</div><div class='ctx'>                 }</div><div class='add'>+            } else {</div><div class='add'>+                if (!ec_config_check(parent-&gt;xl, &amp;ctx-&gt;config)) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+                           EC_MSG_CONFIG_XATTR_INVALID, "Invalid config xattr");</div><div class='ctx'> </div><div class='del'>-                op_errno = -ec_dict_del_config(dict, EC_XATTR_CONFIG,</div><div class='del'>-                                               &amp;ctx-&gt;config);</div><div class='del'>-                if (op_errno != 0) {</div><div class='del'>-                    if ((lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) ||</div><div class='del'>-                        (op_errno != ENODATA)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                                EC_MSG_CONFIG_XATTR_GET_FAIL,</div><div class='del'>-                                "Unable to get config xattr. %s",</div><div class='del'>-                                ec_msg_str(fop));</div><div class='del'>-</div><div class='del'>-                        goto unlock;</div><div class='del'>-                    }</div><div class='del'>-                } else {</div><div class='del'>-                    if (!ec_config_check(parent-&gt;xl, &amp;ctx-&gt;config)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                EC_MSG_CONFIG_XATTR_INVALID,</div><div class='del'>-                                "Invalid config xattr");</div><div class='del'>-</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-                        goto unlock;</div><div class='del'>-                    }</div><div class='del'>-                    ctx-&gt;have_config = _gf_true;</div><div class='add'>+                    op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+                    goto unlock;</div><div class='ctx'>                 }</div><div class='add'>+                ctx-&gt;have_config = _gf_true;</div><div class='ctx'>             }</div><div class='del'>-            ctx-&gt;have_info = _gf_true;</div><div class='add'>+        }</div><div class='add'>+        ctx-&gt;have_info = _gf_true;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    ec_set_dirty_flag (fop-&gt;data, ctx, dirty);</div><div class='add'>+    ec_set_dirty_flag(fop-&gt;data, ctx, dirty);</div><div class='ctx'>     if (dirty[EC_METADATA_TXN] &amp;&amp;</div><div class='ctx'>         (EC_FLAGS_HAVE(provided_flags, EC_FLAG_METADATA_DIRTY))) {</div><div class='del'>-            GF_ASSERT (!ctx-&gt;dirty[EC_METADATA_TXN]);</div><div class='del'>-            ctx-&gt;dirty[EC_METADATA_TXN] = 1;</div><div class='add'>+        GF_ASSERT(!ctx-&gt;dirty[EC_METADATA_TXN]);</div><div class='add'>+        ctx-&gt;dirty[EC_METADATA_TXN] = 1;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (dirty[EC_DATA_TXN] &amp;&amp;</div><div class='ctx'>         (EC_FLAGS_HAVE(provided_flags, EC_FLAG_DATA_DIRTY))) {</div><div class='del'>-            GF_ASSERT (!ctx-&gt;dirty[EC_DATA_TXN]);</div><div class='del'>-            ctx-&gt;dirty[EC_DATA_TXN] = 1;</div><div class='add'>+        GF_ASSERT(!ctx-&gt;dirty[EC_DATA_TXN]);</div><div class='add'>+        ctx-&gt;dirty[EC_DATA_TXN] = 1;</div><div class='ctx'>     }</div><div class='ctx'>     op_errno = 0;</div><div class='ctx'> unlock:</div><div class='hunk'>@@ -1279,20 +1259,20 @@ unlock:</div><div class='ctx'>          * it dirty and update versions right away if dirty was not set before.</div><div class='ctx'>          */</div><div class='ctx'>         if (lock-&gt;good_mask &amp; ~(fop-&gt;good | fop-&gt;remaining)) {</div><div class='del'>-                release = _gf_true;</div><div class='add'>+            release = _gf_true;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (parent_link-&gt;update[0] &amp;&amp; !parent_link-&gt;dirty[0]) {</div><div class='del'>-                lock-&gt;release |= release;</div><div class='add'>+            lock-&gt;release |= release;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (parent_link-&gt;update[1] &amp;&amp; !parent_link-&gt;dirty[1]) {</div><div class='del'>-                lock-&gt;release |= release;</div><div class='add'>+            lock-&gt;release |= release;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         /* We don't allow the main fop to be executed on bricks that have not</div><div class='ctx'>          * succeeded the initial xattrop. */</div><div class='del'>-        ec_lock_update_good (lock, fop);</div><div class='add'>+        ec_lock_update_good(lock, fop);</div><div class='ctx'> </div><div class='ctx'>         /*As of now only data healing marks bricks as healing*/</div><div class='ctx'>         lock-&gt;healing |= fop-&gt;healing;</div><div class='hunk'>@@ -1308,7 +1288,7 @@ unlock:</div><div class='ctx'>             tmp-&gt;mask &amp;= fop-&gt;good;</div><div class='ctx'> </div><div class='ctx'>             /*As of now only data healing marks bricks as healing*/</div><div class='del'>-            if (ec_is_data_fop (tmp-&gt;id)) {</div><div class='add'>+            if (ec_is_data_fop(tmp-&gt;id)) {</div><div class='ctx'>                 tmp-&gt;healing |= fop-&gt;healing;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='hunk'>@@ -1322,52 +1302,53 @@ unlock:</div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> ec_set_needed_flag(ec_lock_t *lock, ec_lock_link_t *link, uint64_t flag)</div><div class='ctx'> {</div><div class='del'>-        uint64_t current;</div><div class='add'>+    uint64_t current;</div><div class='ctx'> </div><div class='del'>-        link-&gt;waiting_flags |= EC_FLAG_NEEDS(flag);</div><div class='add'>+    link-&gt;waiting_flags |= EC_FLAG_NEEDS(flag);</div><div class='ctx'> </div><div class='del'>-        current = EC_NEEDED_FLAGS(lock-&gt;waiting_flags);</div><div class='del'>-        if (!EC_FLAGS_HAVE(current, flag)) {</div><div class='del'>-                lock-&gt;waiting_flags |= EC_FLAG_NEEDS(flag);</div><div class='del'>-                link-&gt;waiting_flags |= EC_FLAG_PROVIDES(flag);</div><div class='add'>+    current = EC_NEEDED_FLAGS(lock-&gt;waiting_flags);</div><div class='add'>+    if (!EC_FLAGS_HAVE(current, flag)) {</div><div class='add'>+        lock-&gt;waiting_flags |= EC_FLAG_NEEDS(flag);</div><div class='add'>+        link-&gt;waiting_flags |= EC_FLAG_PROVIDES(flag);</div><div class='ctx'> </div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint64_t</div><div class='del'>-ec_set_xattrop_flags_and_params (ec_lock_t *lock, ec_lock_link_t *link,</div><div class='del'>-                                 uint64_t *dirty)</div><div class='add'>+ec_set_xattrop_flags_and_params(ec_lock_t *lock, ec_lock_link_t *link,</div><div class='add'>+                                uint64_t *dirty)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        oldflags = 0;</div><div class='del'>-        uint64_t        newflags = 0;</div><div class='del'>-        ec_inode_t *ctx     = lock-&gt;ctx;</div><div class='add'>+    uint64_t oldflags = 0;</div><div class='add'>+    uint64_t newflags = 0;</div><div class='add'>+    ec_inode_t *ctx = lock-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        oldflags = EC_NEEDED_FLAGS(lock-&gt;waiting_flags);</div><div class='add'>+    oldflags = EC_NEEDED_FLAGS(lock-&gt;waiting_flags);</div><div class='ctx'> </div><div class='del'>-        if (lock-&gt;query &amp;&amp; !ctx-&gt;have_info) {</div><div class='del'>-                ec_set_needed_flag(lock, link, EC_FLAG_XATTROP);</div><div class='del'>-        }</div><div class='add'>+    if (lock-&gt;query &amp;&amp; !ctx-&gt;have_info) {</div><div class='add'>+        ec_set_needed_flag(lock, link, EC_FLAG_XATTROP);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dirty[EC_DATA_TXN]) {</div><div class='del'>-                if (!ec_set_needed_flag(lock, link, EC_FLAG_DATA_DIRTY)) {</div><div class='del'>-                        dirty[EC_DATA_TXN] = 0;</div><div class='del'>-                }</div><div class='add'>+    if (dirty[EC_DATA_TXN]) {</div><div class='add'>+        if (!ec_set_needed_flag(lock, link, EC_FLAG_DATA_DIRTY)) {</div><div class='add'>+            dirty[EC_DATA_TXN] = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dirty[EC_METADATA_TXN]) {</div><div class='del'>-                if (!ec_set_needed_flag(lock, link, EC_FLAG_METADATA_DIRTY)) {</div><div class='del'>-                        dirty[EC_METADATA_TXN] = 0;</div><div class='del'>-                }</div><div class='add'>+    if (dirty[EC_METADATA_TXN]) {</div><div class='add'>+        if (!ec_set_needed_flag(lock, link, EC_FLAG_METADATA_DIRTY)) {</div><div class='add'>+            dirty[EC_METADATA_TXN] = 0;</div><div class='ctx'>         }</div><div class='del'>-        newflags = EC_NEEDED_FLAGS(lock-&gt;waiting_flags);</div><div class='add'>+    }</div><div class='add'>+    newflags = EC_NEEDED_FLAGS(lock-&gt;waiting_flags);</div><div class='ctx'> </div><div class='del'>-        return oldflags ^ newflags;</div><div class='add'>+    return oldflags ^ newflags;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_get_size_version(ec_lock_link_t *link)</div><div class='add'>+void</div><div class='add'>+ec_get_size_version(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='ctx'>     loc_t loc;</div><div class='ctx'>     ec_lock_t *lock;</div><div class='hunk'>@@ -1375,7 +1356,7 @@ void ec_get_size_version(ec_lock_link_t *link)</div><div class='ctx'>     ec_fop_data_t *fop;</div><div class='ctx'>     dict_t *dict = NULL;</div><div class='ctx'>     dict_t *xdata = NULL;</div><div class='del'>-    ec_t   *ec = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='ctx'>     int32_t error = 0;</div><div class='ctx'>     gf_boolean_t set_dirty = _gf_false;</div><div class='ctx'>     uint64_t allzero[EC_VERSION_SIZE] = {0, 0};</div><div class='hunk'>@@ -1383,18 +1364,18 @@ void ec_get_size_version(ec_lock_link_t *link)</div><div class='ctx'>     lock = link-&gt;lock;</div><div class='ctx'>     ctx = lock-&gt;ctx;</div><div class='ctx'>     fop = link-&gt;fop;</div><div class='del'>-    ec  = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     uint64_t changed_flags = 0;</div><div class='ctx'> </div><div class='del'>-    if (ec-&gt;optimistic_changelog &amp;&amp;</div><div class='del'>-        !(ec-&gt;node_mask &amp; ~link-&gt;lock-&gt;good_mask) &amp;&amp; !ec_is_data_fop (fop-&gt;id))</div><div class='del'>-            link-&gt;optimistic_changelog = _gf_true;</div><div class='add'>+    if (ec-&gt;optimistic_changelog &amp;&amp; !(ec-&gt;node_mask &amp; ~link-&gt;lock-&gt;good_mask) &amp;&amp;</div><div class='add'>+        !ec_is_data_fop(fop-&gt;id))</div><div class='add'>+        link-&gt;optimistic_changelog = _gf_true;</div><div class='ctx'> </div><div class='del'>-    set_dirty = ec_set_dirty_flag (link, ctx, dirty);</div><div class='add'>+    set_dirty = ec_set_dirty_flag(link, ctx, dirty);</div><div class='ctx'> </div><div class='ctx'>     /* If ec metadata has already been retrieved, do not try again. */</div><div class='ctx'>     if (ctx-&gt;have_info &amp;&amp; (!set_dirty)) {</div><div class='del'>-        if (ec_is_data_fop (fop-&gt;id)) {</div><div class='add'>+        if (ec_is_data_fop(fop-&gt;id)) {</div><div class='ctx'>             fop-&gt;healing |= lock-&gt;healing;</div><div class='ctx'>         }</div><div class='ctx'>         return;</div><div class='hunk'>@@ -1402,24 +1383,23 @@ void ec_get_size_version(ec_lock_link_t *link)</div><div class='ctx'> </div><div class='ctx'>     /* Determine if there's something we need to retrieve for the current</div><div class='ctx'>      * operation. */</div><div class='del'>-    if (!set_dirty &amp;&amp; !lock-&gt;query &amp;&amp;</div><div class='del'>-        (lock-&gt;loc.inode-&gt;ia_type != IA_IFREG) &amp;&amp;</div><div class='add'>+    if (!set_dirty &amp;&amp; !lock-&gt;query &amp;&amp; (lock-&gt;loc.inode-&gt;ia_type != IA_IFREG) &amp;&amp;</div><div class='ctx'>         (lock-&gt;loc.inode-&gt;ia_type != IA_INVAL)) {</div><div class='del'>-            return;</div><div class='add'>+        return;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     memset(&amp;loc, 0, sizeof(loc));</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;lock-&gt;loc.inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    changed_flags = ec_set_xattrop_flags_and_params (lock, link, dirty);</div><div class='add'>+    changed_flags = ec_set_xattrop_flags_and_params(lock, link, dirty);</div><div class='ctx'>     if (link-&gt;waiting_flags) {</div><div class='del'>-            /* This fop needs to wait until all its flags are cleared which</div><div class='del'>-             * potentially can be cleared by other xattrops that are already</div><div class='del'>-             * wound*/</div><div class='del'>-            ec_sleep(fop);</div><div class='add'>+        /* This fop needs to wait until all its flags are cleared which</div><div class='add'>+         * potentially can be cleared by other xattrops that are already</div><div class='add'>+         * wound*/</div><div class='add'>+        ec_sleep(fop);</div><div class='ctx'>     } else {</div><div class='del'>-            GF_ASSERT (!changed_flags);</div><div class='add'>+        GF_ASSERT(!changed_flags);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     UNLOCK(&amp;lock-&gt;loc.inode-&gt;lock);</div><div class='hunk'>@@ -1434,40 +1414,38 @@ void ec_get_size_version(ec_lock_link_t *link)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (EC_FLAGS_HAVE(changed_flags, EC_FLAG_XATTROP)) {</div><div class='del'>-            /* Once we know that an xattrop will be needed,</div><div class='del'>-             * we try to get all available information in a</div><div class='del'>-             * single call. */</div><div class='del'>-            error = ec_dict_set_array(dict, EC_XATTR_VERSION, allzero,</div><div class='del'>-                                      EC_VERSION_SIZE);</div><div class='add'>+        /* Once we know that an xattrop will be needed,</div><div class='add'>+         * we try to get all available information in a</div><div class='add'>+         * single call. */</div><div class='add'>+        error = ec_dict_set_array(dict, EC_XATTR_VERSION, allzero,</div><div class='add'>+                                  EC_VERSION_SIZE);</div><div class='add'>+        if (error != 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG ||</div><div class='add'>+            lock-&gt;loc.inode-&gt;ia_type == IA_INVAL) {</div><div class='add'>+            error = ec_dict_set_number(dict, EC_XATTR_SIZE, 0);</div><div class='add'>+            if (error == 0) {</div><div class='add'>+                error = ec_dict_set_number(dict, EC_XATTR_CONFIG, 0);</div><div class='add'>+            }</div><div class='ctx'>             if (error != 0) {</div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-            if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG ||</div><div class='del'>-                lock-&gt;loc.inode-&gt;ia_type == IA_INVAL) {</div><div class='del'>-                error = ec_dict_set_number(dict, EC_XATTR_SIZE, 0);</div><div class='del'>-                if (error == 0) {</div><div class='del'>-                    error = ec_dict_set_number(dict, EC_XATTR_CONFIG, 0);</div><div class='del'>-                }</div><div class='del'>-                if (error != 0) {</div><div class='del'>-                    goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                xdata = dict_new();</div><div class='del'>-                if (xdata == NULL || dict_set_int32 (xdata, GF_GET_SIZE, 1)) {</div><div class='del'>-                    error = -ENOMEM;</div><div class='del'>-                    goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+            xdata = dict_new();</div><div class='add'>+            if (xdata == NULL || dict_set_int32(xdata, GF_GET_SIZE, 1)) {</div><div class='add'>+                error = -ENOMEM;</div><div class='add'>+                goto out;</div><div class='ctx'>             }</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (memcmp (allzero, dirty, sizeof (allzero))) {</div><div class='del'>-            error = ec_dict_set_array(dict, EC_XATTR_DIRTY, dirty,</div><div class='del'>-                                      EC_VERSION_SIZE);</div><div class='del'>-            if (error != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-            }</div><div class='add'>+    if (memcmp(allzero, dirty, sizeof(allzero))) {</div><div class='add'>+        error = ec_dict_set_array(dict, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE);</div><div class='add'>+        if (error != 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     fop-&gt;frame-&gt;root-&gt;uid = 0;</div><div class='hunk'>@@ -1495,13 +1473,13 @@ void ec_get_size_version(ec_lock_link_t *link)</div><div class='ctx'>             loc.name = NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ec_xattrop (fop-&gt;frame, fop-&gt;xl, fop-&gt;mask, fop-&gt;minimum,</div><div class='del'>-                    ec_prepare_update_cbk, link, &amp;loc,</div><div class='del'>-                    GF_XATTROP_ADD_ARRAY64, dict, xdata);</div><div class='add'>+        ec_xattrop(fop-&gt;frame, fop-&gt;xl, fop-&gt;mask, fop-&gt;minimum,</div><div class='add'>+                   ec_prepare_update_cbk, link, &amp;loc, GF_XATTROP_ADD_ARRAY64,</div><div class='add'>+                   dict, xdata);</div><div class='ctx'>     } else {</div><div class='ctx'>         ec_fxattrop(fop-&gt;frame, fop-&gt;xl, fop-&gt;mask, fop-&gt;minimum,</div><div class='del'>-                ec_prepare_update_cbk, link, lock-&gt;fd,</div><div class='del'>-                GF_XATTROP_ADD_ARRAY64, dict, xdata);</div><div class='add'>+                    ec_prepare_update_cbk, link, lock-&gt;fd,</div><div class='add'>+                    GF_XATTROP_ADD_ARRAY64, dict, xdata);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     error = 0;</div><div class='hunk'>@@ -1526,8 +1504,7 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-__ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode,</div><div class='del'>-                    uint64_t *size)</div><div class='add'>+__ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t *size)</div><div class='ctx'> {</div><div class='ctx'>     ec_inode_t *ctx;</div><div class='ctx'>     gf_boolean_t found = _gf_false;</div><div class='hunk'>@@ -1547,14 +1524,13 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode,</div><div class='del'>-                  uint64_t *size)</div><div class='add'>+ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t *size)</div><div class='ctx'> {</div><div class='ctx'>     gf_boolean_t found = _gf_false;</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;inode-&gt;lock);</div><div class='ctx'>     {</div><div class='del'>-            found = __ec_get_inode_size (fop, inode, size);</div><div class='add'>+        found = __ec_get_inode_size(fop, inode, size);</div><div class='ctx'>     }</div><div class='ctx'>     UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -1562,8 +1538,7 @@ ec_get_inode_size(ec_fop_data_t *fop, inode_t *inode,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-__ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode,</div><div class='del'>-                    uint64_t size)</div><div class='add'>+__ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t size)</div><div class='ctx'> {</div><div class='ctx'>     ec_inode_t *ctx;</div><div class='ctx'>     gf_boolean_t found = _gf_false;</div><div class='hunk'>@@ -1590,38 +1565,37 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode,</div><div class='del'>-                  uint64_t size)</div><div class='add'>+ec_set_inode_size(ec_fop_data_t *fop, inode_t *inode, uint64_t size)</div><div class='ctx'> {</div><div class='ctx'>     gf_boolean_t found = _gf_false;</div><div class='ctx'> </div><div class='del'>-    LOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='ctx'>     {</div><div class='del'>-            found = __ec_set_inode_size (fop, inode, size);</div><div class='add'>+        found = __ec_set_inode_size(fop, inode, size);</div><div class='ctx'>     }</div><div class='del'>-    UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>     return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_release_stripe_cache (ec_inode_t *ctx)</div><div class='add'>+ec_release_stripe_cache(ec_inode_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        ec_stripe_list_t *stripe_cache = NULL;</div><div class='del'>-        ec_stripe_t      *stripe = NULL;</div><div class='add'>+    ec_stripe_list_t *stripe_cache = NULL;</div><div class='add'>+    ec_stripe_t *stripe = NULL;</div><div class='ctx'> </div><div class='del'>-        stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='del'>-        while (!list_empty (&amp;stripe_cache-&gt;lru)) {</div><div class='del'>-                stripe = list_first_entry (&amp;stripe_cache-&gt;lru, ec_stripe_t,</div><div class='del'>-                                           lru);</div><div class='del'>-                list_del (&amp;stripe-&gt;lru);</div><div class='del'>-                GF_FREE (stripe);</div><div class='del'>-        }</div><div class='del'>-        stripe_cache-&gt;count = 0;</div><div class='del'>-        stripe_cache-&gt;max = 0;</div><div class='add'>+    stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='add'>+    while (!list_empty(&amp;stripe_cache-&gt;lru)) {</div><div class='add'>+        stripe = list_first_entry(&amp;stripe_cache-&gt;lru, ec_stripe_t, lru);</div><div class='add'>+        list_del(&amp;stripe-&gt;lru);</div><div class='add'>+        GF_FREE(stripe);</div><div class='add'>+    }</div><div class='add'>+    stripe_cache-&gt;count = 0;</div><div class='add'>+    stripe_cache-&gt;max = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode)</div><div class='add'>+void</div><div class='add'>+ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode)</div><div class='ctx'> {</div><div class='ctx'>     ec_inode_t *ctx;</div><div class='ctx'> </div><div class='hunk'>@@ -1632,7 +1606,7 @@ void ec_clear_inode_info(ec_fop_data_t *fop, inode_t *inode)</div><div class='ctx'>         goto unlock;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    ec_release_stripe_cache (ctx);</div><div class='add'>+    ec_release_stripe_cache(ctx);</div><div class='ctx'>     ctx-&gt;have_info = _gf_false;</div><div class='ctx'>     ctx-&gt;have_config = _gf_false;</div><div class='ctx'>     ctx-&gt;have_version = _gf_false;</div><div class='hunk'>@@ -1648,10 +1622,10 @@ unlock:</div><div class='ctx'>     UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_get_real_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                             struct iatt *buf, dict_t *xdata,</div><div class='del'>-                             struct iatt *postparent)</div><div class='add'>+int32_t</div><div class='add'>+ec_get_real_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                     struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     ec_lock_link_t *link;</div><div class='hunk'>@@ -1675,7 +1649,8 @@ int32_t ec_get_real_size_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>  * Any error processing this request is ignored. In the worst case, an invalid</div><div class='ctx'>  * or not up to date value in the iatt could cause some cache invalidation.</div><div class='ctx'>  */</div><div class='del'>-void ec_get_real_size(ec_lock_link_t *link)</div><div class='add'>+void</div><div class='add'>+ec_get_real_size(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop;</div><div class='ctx'>     dict_t *xdata;</div><div class='hunk'>@@ -1725,24 +1700,26 @@ ec_lock_update_fd(ec_lock_t *lock, ec_fop_data_t *fop)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_link_has_lock_conflict (ec_lock_link_t *link, gf_boolean_t waitlist_check)</div><div class='add'>+ec_link_has_lock_conflict(ec_lock_link_t *link, gf_boolean_t waitlist_check)</div><div class='ctx'> {</div><div class='del'>-        ec_lock_link_t *trav_link = NULL;</div><div class='add'>+    ec_lock_link_t *trav_link = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav_link, &amp;link-&gt;lock-&gt;owners, owner_list) {</div><div class='del'>-                if (ec_lock_conflict (trav_link, link))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(trav_link, &amp;link-&gt;lock-&gt;owners, owner_list)</div><div class='add'>+    {</div><div class='add'>+        if (ec_lock_conflict(trav_link, link))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!waitlist_check)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!waitlist_check)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (trav_link, &amp;link-&gt;lock-&gt;waiting, wait_list) {</div><div class='del'>-                if (ec_lock_conflict (trav_link, link))</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(trav_link, &amp;link-&gt;lock-&gt;waiting, wait_list)</div><div class='add'>+    {</div><div class='add'>+        if (ec_lock_conflict(trav_link, link))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -1763,7 +1740,7 @@ ec_lock_wake_shared(ec_lock_t *lock, struct list_head *list)</div><div class='ctx'> </div><div class='ctx'>         /* If the fop is not shareable, only this fop can be assigned as owner.</div><div class='ctx'>          * Other fops will need to wait until this one finishes. */</div><div class='del'>-        if (ec_link_has_lock_conflict (link, _gf_false)) {</div><div class='add'>+        if (ec_link_has_lock_conflict(link, _gf_false)) {</div><div class='ctx'>             conflict = _gf_true;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='hunk'>@@ -1794,7 +1771,8 @@ ec_lock_apply(ec_lock_link_t *link)</div><div class='ctx'>     ec_get_real_size(link);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-gf_boolean_t ec_lock_acquire(ec_lock_link_t *link);</div><div class='add'>+gf_boolean_t</div><div class='add'>+ec_lock_acquire(ec_lock_link_t *link);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> ec_lock_resume_shared(struct list_head *list)</div><div class='hunk'>@@ -1818,7 +1796,8 @@ ec_lock_resume_shared(struct list_head *list)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_acquired(ec_lock_link_t *link)</div><div class='add'>+void</div><div class='add'>+ec_lock_acquired(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='ctx'>     struct list_head list;</div><div class='ctx'>     ec_lock_t *lock;</div><div class='hunk'>@@ -1850,8 +1829,9 @@ void ec_lock_acquired(ec_lock_link_t *link)</div><div class='ctx'>     ec_lock_resume_shared(&amp;list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_locked(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_locked(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+          int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     ec_lock_link_t *link = NULL;</div><div class='hunk'>@@ -1866,15 +1846,15 @@ int32_t ec_locked(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>         ec_lock_acquired(link);</div><div class='ctx'>         ec_lock(fop-&gt;parent);</div><div class='ctx'>     } else {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                EC_MSG_PREOP_LOCK_FAILED,</div><div class='del'>-                "Failed to complete preop lock");</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, EC_MSG_PREOP_LOCK_FAILED,</div><div class='add'>+               "Failed to complete preop lock");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-gf_boolean_t ec_lock_acquire(ec_lock_link_t *link)</div><div class='add'>+gf_boolean_t</div><div class='add'>+ec_lock_acquire(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='ctx'>     ec_lock_t *lock;</div><div class='ctx'>     ec_fop_data_t *fop;</div><div class='hunk'>@@ -1907,62 +1887,62 @@ gf_boolean_t ec_lock_acquire(ec_lock_link_t *link)</div><div class='ctx'> static ec_lock_link_t *</div><div class='ctx'> ec_lock_timer_cancel(xlator_t *xl, ec_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        ec_lock_link_t *timer_link;</div><div class='add'>+    ec_lock_link_t *timer_link;</div><div class='ctx'> </div><div class='del'>-        /* If we don't have any timer, there's nothing to cancel. */</div><div class='del'>-        if (lock-&gt;timer == NULL) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    /* If we don't have any timer, there's nothing to cancel. */</div><div class='add'>+    if (lock-&gt;timer == NULL) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* We are trying to access a lock that has an unlock timer active.</div><div class='del'>-         * This means that the lock must be idle, i.e. no fop can be in the</div><div class='del'>-         * owner, waiting or frozen lists. It also means that the lock cannot</div><div class='del'>-         * have been marked as being released (this is done without timers).</div><div class='del'>-         * There should only be one owner reference, but it's possible that</div><div class='del'>-         * some fops are being prepared to use this lock. */</div><div class='del'>-        GF_ASSERT ((lock-&gt;refs_owners == 1) &amp;&amp;</div><div class='del'>-                   list_empty(&amp;lock-&gt;owners) &amp;&amp; list_empty(&amp;lock-&gt;waiting));</div><div class='del'>-</div><div class='del'>-        /* We take the timer_link before cancelling the timer, since a</div><div class='del'>-         * successful cancellation will destroy it. It must not be NULL</div><div class='del'>-         * because it references the fop responsible for the delayed unlock</div><div class='del'>-         * that we are currently trying to cancel. */</div><div class='del'>-        timer_link = lock-&gt;timer-&gt;data;</div><div class='del'>-        GF_ASSERT(timer_link != NULL);</div><div class='del'>-</div><div class='del'>-        if (gf_timer_call_cancel(xl-&gt;ctx, lock-&gt;timer) &lt; 0) {</div><div class='del'>-                /* It's too late to avoid the execution of the timer callback.</div><div class='del'>-                 * Since we need to be sure that the callback has access to all</div><div class='del'>-                 * needed resources, we cannot resume the execution of the</div><div class='del'>-                 * timer fop now. This will be done in the callback. */</div><div class='del'>-                timer_link = NULL;</div><div class='del'>-        } else {</div><div class='del'>-                /* The timer has been cancelled. The fop referenced by</div><div class='del'>-                 * timer_link holds the last reference. The caller is</div><div class='del'>-                 * responsible to release it when not needed anymore. */</div><div class='del'>-                ec_trace("UNLOCK_CANCELLED", timer_link-&gt;fop, "lock=%p", lock);</div><div class='del'>-        }</div><div class='add'>+    /* We are trying to access a lock that has an unlock timer active.</div><div class='add'>+     * This means that the lock must be idle, i.e. no fop can be in the</div><div class='add'>+     * owner, waiting or frozen lists. It also means that the lock cannot</div><div class='add'>+     * have been marked as being released (this is done without timers).</div><div class='add'>+     * There should only be one owner reference, but it's possible that</div><div class='add'>+     * some fops are being prepared to use this lock. */</div><div class='add'>+    GF_ASSERT((lock-&gt;refs_owners == 1) &amp;&amp; list_empty(&amp;lock-&gt;owners) &amp;&amp;</div><div class='add'>+              list_empty(&amp;lock-&gt;waiting));</div><div class='add'>+</div><div class='add'>+    /* We take the timer_link before cancelling the timer, since a</div><div class='add'>+     * successful cancellation will destroy it. It must not be NULL</div><div class='add'>+     * because it references the fop responsible for the delayed unlock</div><div class='add'>+     * that we are currently trying to cancel. */</div><div class='add'>+    timer_link = lock-&gt;timer-&gt;data;</div><div class='add'>+    GF_ASSERT(timer_link != NULL);</div><div class='add'>+</div><div class='add'>+    if (gf_timer_call_cancel(xl-&gt;ctx, lock-&gt;timer) &lt; 0) {</div><div class='add'>+        /* It's too late to avoid the execution of the timer callback.</div><div class='add'>+         * Since we need to be sure that the callback has access to all</div><div class='add'>+         * needed resources, we cannot resume the execution of the</div><div class='add'>+         * timer fop now. This will be done in the callback. */</div><div class='add'>+        timer_link = NULL;</div><div class='add'>+    } else {</div><div class='add'>+        /* The timer has been cancelled. The fop referenced by</div><div class='add'>+         * timer_link holds the last reference. The caller is</div><div class='add'>+         * responsible to release it when not needed anymore. */</div><div class='add'>+        ec_trace("UNLOCK_CANCELLED", timer_link-&gt;fop, "lock=%p", lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* We have two options here:</div><div class='del'>-         *</div><div class='del'>-         * 1. The timer has been successfully cancelled.</div><div class='del'>-         *</div><div class='del'>-         *    This is the easiest case and we can continue with the currently</div><div class='del'>-         *    acquired lock.</div><div class='del'>-         *</div><div class='del'>-         * 2. The timer callback has already been fired.</div><div class='del'>-         *</div><div class='del'>-         *    In this case we have not been able to cancel the timer before</div><div class='del'>-         *    the timer callback has been fired, but we also know that</div><div class='del'>-         *    lock-&gt;timer != NULL. This means that the timer callback is still</div><div class='del'>-         *    trying to acquire the inode mutex that we currently own. We are</div><div class='del'>-         *    safe until we release it. In this case we can safely clear</div><div class='del'>-         *    lock-&gt;timer. This will cause that the timer callback does nothing</div><div class='del'>-         *    once it acquires the mutex.</div><div class='del'>-         */</div><div class='del'>-        lock-&gt;timer = NULL;</div><div class='add'>+    /* We have two options here:</div><div class='add'>+     *</div><div class='add'>+     * 1. The timer has been successfully cancelled.</div><div class='add'>+     *</div><div class='add'>+     *    This is the easiest case and we can continue with the currently</div><div class='add'>+     *    acquired lock.</div><div class='add'>+     *</div><div class='add'>+     * 2. The timer callback has already been fired.</div><div class='add'>+     *</div><div class='add'>+     *    In this case we have not been able to cancel the timer before</div><div class='add'>+     *    the timer callback has been fired, but we also know that</div><div class='add'>+     *    lock-&gt;timer != NULL. This means that the timer callback is still</div><div class='add'>+     *    trying to acquire the inode mutex that we currently own. We are</div><div class='add'>+     *    safe until we release it. In this case we can safely clear</div><div class='add'>+     *    lock-&gt;timer. This will cause that the timer callback does nothing</div><div class='add'>+     *    once it acquires the mutex.</div><div class='add'>+     */</div><div class='add'>+    lock-&gt;timer = NULL;</div><div class='ctx'> </div><div class='del'>-        return timer_link;</div><div class='add'>+    return timer_link;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='hunk'>@@ -1984,7 +1964,7 @@ ec_lock_assign_owner(ec_lock_link_t *link)</div><div class='ctx'> </div><div class='ctx'>     /* Since the link has just been prepared but it's not active yet, the</div><div class='ctx'>      * refs_pending must be one at least (the ref owned by this link). */</div><div class='del'>-    GF_ASSERT (lock-&gt;refs_pending &gt; 0);</div><div class='add'>+    GF_ASSERT(lock-&gt;refs_pending &gt; 0);</div><div class='ctx'>     /* The link is not pending any more. It will be assigned to the owner,</div><div class='ctx'>      * waiting or frozen list. */</div><div class='ctx'>     lock-&gt;refs_pending--;</div><div class='hunk'>@@ -2017,7 +1997,7 @@ ec_lock_assign_owner(ec_lock_link_t *link)</div><div class='ctx'>          * owners, or waiters(to prevent starvation).</div><div class='ctx'>          * Otherwise we need to wait.</div><div class='ctx'>          */</div><div class='del'>-        if (!lock-&gt;acquired || ec_link_has_lock_conflict (link, _gf_true)) {</div><div class='add'>+        if (!lock-&gt;acquired || ec_link_has_lock_conflict(link, _gf_true)) {</div><div class='ctx'>             ec_trace("LOCK_QUEUE_WAIT", fop, "lock=%p", lock);</div><div class='ctx'> </div><div class='ctx'>             list_add_tail(&amp;link-&gt;wait_list, &amp;lock-&gt;waiting);</div><div class='hunk'>@@ -2032,7 +2012,7 @@ ec_lock_assign_owner(ec_lock_link_t *link)</div><div class='ctx'>      * reference assigned to the timer fop. In this case we simply reuse it.</div><div class='ctx'>      * Otherwise we need to increase the number of owners. */</div><div class='ctx'>     if (timer_link == NULL) {</div><div class='del'>-            lock-&gt;refs_owners++;</div><div class='add'>+        lock-&gt;refs_owners++;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     assigned = _gf_true;</div><div class='hunk'>@@ -2090,14 +2070,14 @@ ec_lock_next_owner(ec_lock_link_t *link, ec_cbk_data_t *cbk,</div><div class='ctx'>         /* If the fop fails on any of the good bricks, it is important to mark</div><div class='ctx'>          * it dirty and update versions right away. */</div><div class='ctx'>         if (link-&gt;update[0] || link-&gt;update[1]) {</div><div class='del'>-                if (lock-&gt;good_mask &amp; ~(fop-&gt;good | fop-&gt;remaining)) {</div><div class='del'>-                        lock-&gt;release = _gf_true;</div><div class='del'>-                }</div><div class='add'>+            if (lock-&gt;good_mask &amp; ~(fop-&gt;good | fop-&gt;remaining)) {</div><div class='add'>+                lock-&gt;release = _gf_true;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (fop-&gt;healing) {</div><div class='del'>-           lock-&gt;healing = fop-&gt;healing &amp; (fop-&gt;good | fop-&gt;remaining);</div><div class='add'>+        lock-&gt;healing = fop-&gt;healing &amp; (fop-&gt;good | fop-&gt;remaining);</div><div class='ctx'>     }</div><div class='ctx'>     ec_lock_update_good(lock, fop);</div><div class='ctx'> </div><div class='hunk'>@@ -2108,7 +2088,8 @@ ec_lock_next_owner(ec_lock_link_t *link, ec_cbk_data_t *cbk,</div><div class='ctx'>     ec_lock_resume_shared(&amp;list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock(ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_lock(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_lock_link_t *link;</div><div class='ctx'> </div><div class='hunk'>@@ -2116,7 +2097,7 @@ void ec_lock(ec_fop_data_t *fop)</div><div class='ctx'>      * Which can result in refs == 0 for fop leading to use after free in this</div><div class='ctx'>      * function when it calls ec_sleep so do ec_sleep at start and ec_resume at</div><div class='ctx'>      * the end of this function.*/</div><div class='del'>-    ec_sleep (fop);</div><div class='add'>+    ec_sleep(fop);</div><div class='ctx'> </div><div class='ctx'>     while (fop-&gt;locked &lt; fop-&gt;lock_count) {</div><div class='ctx'>         /* Since there are only up to 2 locks per fop, this xor will change</div><div class='hunk'>@@ -2186,17 +2167,16 @@ ec_lock_unfreeze(ec_lock_link_t *link)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_unlocked(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_unlocked(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     ec_lock_link_t *link = fop-&gt;data;</div><div class='ctx'> </div><div class='ctx'>     if (op_ret &lt; 0) {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                EC_MSG_UNLOCK_FAILED,</div><div class='del'>-                "entry/inode unlocking failed (%s)",</div><div class='del'>-                ec_fop_name(link-&gt;fop-&gt;id));</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, EC_MSG_UNLOCK_FAILED,</div><div class='add'>+               "entry/inode unlocking failed (%s)", ec_fop_name(link-&gt;fop-&gt;id));</div><div class='ctx'>     } else {</div><div class='ctx'>         ec_trace("UNLOCKED", link-&gt;fop, "lock=%p", link-&gt;lock);</div><div class='ctx'>     }</div><div class='hunk'>@@ -2206,7 +2186,8 @@ int32_t ec_unlocked(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_unlock_lock(ec_lock_link_t *link)</div><div class='add'>+void</div><div class='add'>+ec_unlock_lock(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='ctx'>     ec_lock_t *lock;</div><div class='ctx'>     ec_fop_data_t *fop;</div><div class='hunk'>@@ -2232,10 +2213,10 @@ void ec_unlock_lock(ec_lock_link_t *link)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_update_size_version_done(call_frame_t * frame, void * cookie,</div><div class='del'>-                                    xlator_t * this, int32_t op_ret,</div><div class='del'>-                                    int32_t op_errno, dict_t * xattr,</div><div class='del'>-                                    dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_update_size_version_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                            dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     ec_lock_link_t *link;</div><div class='hunk'>@@ -2247,10 +2228,9 @@ int32_t ec_update_size_version_done(call_frame_t * frame, void * cookie,</div><div class='ctx'>     ctx = lock-&gt;ctx;</div><div class='ctx'> </div><div class='ctx'>     if (op_ret &lt; 0) {</div><div class='del'>-        gf_msg(fop-&gt;xl-&gt;name, fop_log_level (fop-&gt;id, op_errno), op_errno,</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, fop_log_level(fop-&gt;id, op_errno), op_errno,</div><div class='ctx'>                EC_MSG_SIZE_VERS_UPDATE_FAIL,</div><div class='del'>-               "Failed to update version and size. %s",</div><div class='del'>-                ec_msg_str(fop));</div><div class='add'>+               "Failed to update version and size. %s", ec_msg_str(fop));</div><div class='ctx'>     } else {</div><div class='ctx'>         fop-&gt;parent-&gt;good &amp;= fop-&gt;good;</div><div class='ctx'> </div><div class='hunk'>@@ -2287,14 +2267,14 @@ int32_t ec_update_size_version_done(call_frame_t * frame, void * cookie,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_update_size_version(ec_lock_link_t *link, uint64_t *version,</div><div class='del'>-                       uint64_t size, uint64_t *dirty)</div><div class='add'>+ec_update_size_version(ec_lock_link_t *link, uint64_t *version, uint64_t size,</div><div class='add'>+                       uint64_t *dirty)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop;</div><div class='ctx'>     ec_lock_t *lock;</div><div class='ctx'>     ec_inode_t *ctx;</div><div class='ctx'>     dict_t *dict = NULL;</div><div class='del'>-    uintptr_t   update_on = 0;</div><div class='add'>+    uintptr_t update_on = 0;</div><div class='ctx'>     int32_t err = -ENOMEM;</div><div class='ctx'> </div><div class='ctx'>     fop = link-&gt;fop;</div><div class='hunk'>@@ -2331,11 +2311,10 @@ ec_update_size_version(ec_lock_link_t *link, uint64_t *version,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (dirty[0] || dirty[1]) {</div><div class='del'>-            err = ec_dict_set_array(dict, EC_XATTR_DIRTY,</div><div class='del'>-                                    dirty, EC_VERSION_SIZE);</div><div class='del'>-            if (err != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-            }</div><div class='add'>+        err = ec_dict_set_array(dict, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE);</div><div class='add'>+        if (err != 0) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     /* If config information is not known, we request it now. */</div><div class='hunk'>@@ -2351,13 +2330,13 @@ ec_update_size_version(ec_lock_link_t *link, uint64_t *version,</div><div class='ctx'>     update_on = lock-&gt;good_mask | lock-&gt;healing;</div><div class='ctx'> </div><div class='ctx'>     if (link-&gt;lock-&gt;fd == NULL) {</div><div class='del'>-            ec_xattrop(fop-&gt;frame, fop-&gt;xl, update_on, EC_MINIMUM_MIN,</div><div class='del'>-                       ec_update_size_version_done, link, &amp;link-&gt;lock-&gt;loc,</div><div class='del'>-                       GF_XATTROP_ADD_ARRAY64, dict, NULL);</div><div class='add'>+        ec_xattrop(fop-&gt;frame, fop-&gt;xl, update_on, EC_MINIMUM_MIN,</div><div class='add'>+                   ec_update_size_version_done, link, &amp;link-&gt;lock-&gt;loc,</div><div class='add'>+                   GF_XATTROP_ADD_ARRAY64, dict, NULL);</div><div class='ctx'>     } else {</div><div class='del'>-            ec_fxattrop(fop-&gt;frame, fop-&gt;xl, update_on, EC_MINIMUM_MIN,</div><div class='del'>-                       ec_update_size_version_done, link, link-&gt;lock-&gt;fd,</div><div class='del'>-                       GF_XATTROP_ADD_ARRAY64, dict, NULL);</div><div class='add'>+        ec_fxattrop(fop-&gt;frame, fop-&gt;xl, update_on, EC_MINIMUM_MIN,</div><div class='add'>+                    ec_update_size_version_done, link, link-&gt;lock-&gt;fd,</div><div class='add'>+                    GF_XATTROP_ADD_ARRAY64, dict, NULL);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     fop-&gt;frame-&gt;root-&gt;uid = fop-&gt;uid;</div><div class='hunk'>@@ -2374,14 +2353,12 @@ out:</div><div class='ctx'> </div><div class='ctx'>     ec_fop_set_error(fop, -err);</div><div class='ctx'> </div><div class='del'>-    gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err, EC_MSG_SIZE_VERS_UPDATE_FAIL,</div><div class='del'>-               "Unable to update version and size. %s",</div><div class='del'>-                ec_msg_str(fop));</div><div class='add'>+    gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err, EC_MSG_SIZE_VERS_UPDATE_FAIL,</div><div class='add'>+           "Unable to update version and size. %s", ec_msg_str(fop));</div><div class='ctx'> </div><div class='ctx'>     if (lock-&gt;unlock_now) {</div><div class='ctx'>         ec_unlock_lock(fop-&gt;data);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='hunk'>@@ -2406,34 +2383,34 @@ ec_update_info(ec_lock_link_t *link)</div><div class='ctx'>     /* If we set the dirty flag for update fop, we have to unset it.</div><div class='ctx'>      * If fop has failed on some bricks, leave the dirty as marked. */</div><div class='ctx'>     if (lock-&gt;unlock_now) {</div><div class='del'>-            /* Ensure that nodes are up while doing final</div><div class='del'>-             * metadata update.*/</div><div class='del'>-            if (!(ec-&gt;node_mask &amp; ~lock-&gt;good_mask) &amp;&amp;</div><div class='del'>-                !(ec-&gt;node_mask &amp; ~ec-&gt;xl_up)) {</div><div class='del'>-                    if (ctx-&gt;dirty[0] != 0) {</div><div class='del'>-                        dirty[0] = -1;</div><div class='del'>-                    }</div><div class='del'>-                    if (ctx-&gt;dirty[1] != 0) {</div><div class='del'>-                        dirty[1] = -1;</div><div class='del'>-                    }</div><div class='del'>-                    /*If everything is fine and we already</div><div class='del'>-                     *have version xattr set on entry, there</div><div class='del'>-                     *is no need to update version again*/</div><div class='del'>-                    if (ctx-&gt;pre_version[0]) {</div><div class='del'>-                        version[0] = 0;</div><div class='del'>-                    }</div><div class='del'>-                    if (ctx-&gt;pre_version[1]) {</div><div class='del'>-                        version[1] = 0;</div><div class='del'>-                    }</div><div class='del'>-            } else {</div><div class='del'>-                    link-&gt;optimistic_changelog = _gf_false;</div><div class='del'>-                    ec_set_dirty_flag (link, ctx, dirty);</div><div class='add'>+        /* Ensure that nodes are up while doing final</div><div class='add'>+         * metadata update.*/</div><div class='add'>+        if (!(ec-&gt;node_mask &amp; ~lock-&gt;good_mask) &amp;&amp;</div><div class='add'>+            !(ec-&gt;node_mask &amp; ~ec-&gt;xl_up)) {</div><div class='add'>+            if (ctx-&gt;dirty[0] != 0) {</div><div class='add'>+                dirty[0] = -1;</div><div class='add'>+            }</div><div class='add'>+            if (ctx-&gt;dirty[1] != 0) {</div><div class='add'>+                dirty[1] = -1;</div><div class='ctx'>             }</div><div class='del'>-            memset(ctx-&gt;dirty, 0, sizeof(ctx-&gt;dirty));</div><div class='add'>+            /*If everything is fine and we already</div><div class='add'>+             *have version xattr set on entry, there</div><div class='add'>+             *is no need to update version again*/</div><div class='add'>+            if (ctx-&gt;pre_version[0]) {</div><div class='add'>+                version[0] = 0;</div><div class='add'>+            }</div><div class='add'>+            if (ctx-&gt;pre_version[1]) {</div><div class='add'>+                version[1] = 0;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            link-&gt;optimistic_changelog = _gf_false;</div><div class='add'>+            ec_set_dirty_flag(link, ctx, dirty);</div><div class='add'>+        }</div><div class='add'>+        memset(ctx-&gt;dirty, 0, sizeof(ctx-&gt;dirty));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if ((version[0] != 0) || (version[1] != 0) ||</div><div class='del'>-        (dirty[0] != 0) || (dirty[1] != 0)) {</div><div class='add'>+    if ((version[0] != 0) || (version[1] != 0) || (dirty[0] != 0) ||</div><div class='add'>+        (dirty[1] != 0)) {</div><div class='ctx'>         ec_update_size_version(link, version, size, dirty);</div><div class='ctx'>         return _gf_true;</div><div class='ctx'>     }</div><div class='hunk'>@@ -2464,185 +2441,185 @@ ec_unlock_now(ec_lock_link_t *link)</div><div class='ctx'> void</div><div class='ctx'> ec_lock_release(ec_t *ec, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        ec_lock_t *lock;</div><div class='del'>-        ec_inode_t *ctx;</div><div class='del'>-        ec_lock_link_t *timer_link = NULL;</div><div class='add'>+    ec_lock_t *lock;</div><div class='add'>+    ec_inode_t *ctx;</div><div class='add'>+    ec_lock_link_t *timer_link = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ctx = __ec_inode_get(inode, ec-&gt;xl);</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-        lock = ctx-&gt;inode_lock;</div><div class='del'>-        if ((lock == NULL) || !lock-&gt;acquired || lock-&gt;release) {</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    ctx = __ec_inode_get(inode, ec-&gt;xl);</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+    lock = ctx-&gt;inode_lock;</div><div class='add'>+    if ((lock == NULL) || !lock-&gt;acquired || lock-&gt;release) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='del'>-                     "Releasing inode %p due to lock contention", inode);</div><div class='add'>+    gf_msg_debug(ec-&gt;xl-&gt;name, 0, "Releasing inode %p due to lock contention",</div><div class='add'>+                 inode);</div><div class='ctx'> </div><div class='del'>-        /* The lock is not marked to be released, so the frozen list should be</div><div class='del'>-         * empty. */</div><div class='del'>-        GF_ASSERT(list_empty(&amp;lock-&gt;frozen));</div><div class='add'>+    /* The lock is not marked to be released, so the frozen list should be</div><div class='add'>+     * empty. */</div><div class='add'>+    GF_ASSERT(list_empty(&amp;lock-&gt;frozen));</div><div class='ctx'> </div><div class='del'>-        timer_link = ec_lock_timer_cancel(ec-&gt;xl, lock);</div><div class='add'>+    timer_link = ec_lock_timer_cancel(ec-&gt;xl, lock);</div><div class='ctx'> </div><div class='del'>-        /* We mark the lock to be released as soon as possible. */</div><div class='del'>-        lock-&gt;release = _gf_true;</div><div class='add'>+    /* We mark the lock to be released as soon as possible. */</div><div class='add'>+    lock-&gt;release = _gf_true;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* If we have cancelled the timer, we need to start the unlock of the</div><div class='del'>-         * inode. If there was a timer but we have been unable to cancel it</div><div class='del'>-         * because it was just triggered, the timer callback will take care</div><div class='del'>-         * of releasing the inode. */</div><div class='del'>-        if (timer_link != NULL) {</div><div class='del'>-                ec_unlock_now(timer_link);</div><div class='del'>-        }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* If we have cancelled the timer, we need to start the unlock of the</div><div class='add'>+     * inode. If there was a timer but we have been unable to cancel it</div><div class='add'>+     * because it was just triggered, the timer callback will take care</div><div class='add'>+     * of releasing the inode. */</div><div class='add'>+    if (timer_link != NULL) {</div><div class='add'>+        ec_unlock_now(timer_link);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_unlock_timer_add(ec_lock_link_t *link);</div><div class='add'>+void</div><div class='add'>+ec_unlock_timer_add(ec_lock_link_t *link);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> ec_unlock_timer_del(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='del'>-        ec_lock_t *lock;</div><div class='del'>-        inode_t *inode;</div><div class='del'>-        gf_boolean_t now = _gf_false;</div><div class='add'>+    ec_lock_t *lock;</div><div class='add'>+    inode_t *inode;</div><div class='add'>+    gf_boolean_t now = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* If we are here, it means that the timer has expired before having</div><div class='add'>+     * been cancelled. This guarantees that 'link' is still valid because</div><div class='add'>+     * the fop that contains it must be pending (if timer cancellation in</div><div class='add'>+     * ec_lock_assign_owner() fails, the fop is left sleeping).</div><div class='add'>+     *</div><div class='add'>+     * At the same time, the fop still has a reference to the lock, so</div><div class='add'>+     * it must also be valid.</div><div class='add'>+     */</div><div class='add'>+    lock = link-&gt;lock;</div><div class='add'>+</div><div class='add'>+    /* 'lock' must have a valid inode since it can only be destroyed</div><div class='add'>+     * when the lock itself is destroyed, but we have a reference to the</div><div class='add'>+     * lock to avoid this.</div><div class='add'>+     */</div><div class='add'>+    inode = lock-&gt;loc.inode;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;timer != NULL) {</div><div class='add'>+        ec_trace("UNLOCK_DELAYED", link-&gt;fop, "lock=%p", lock);</div><div class='add'>+</div><div class='add'>+        /* The unlock timer has expired without anyone cancelling it.</div><div class='add'>+         * This means that it shouldn't have any owner, and the waiting</div><div class='add'>+         * and frozen lists should be empty.  It must have only one</div><div class='add'>+         * owner reference, but there can be fops being prepared</div><div class='add'>+         * though.</div><div class='add'>+         * */</div><div class='add'>+        GF_ASSERT(!lock-&gt;release &amp;&amp; (lock-&gt;refs_owners == 1) &amp;&amp;</div><div class='add'>+                  list_empty(&amp;lock-&gt;owners) &amp;&amp; list_empty(&amp;lock-&gt;waiting) &amp;&amp;</div><div class='add'>+                  list_empty(&amp;lock-&gt;frozen));</div><div class='add'>+</div><div class='add'>+        gf_timer_call_cancel(link-&gt;fop-&gt;xl-&gt;ctx, lock-&gt;timer);</div><div class='add'>+        lock-&gt;timer = NULL;</div><div class='add'>+</div><div class='add'>+        /* Any fop being processed from now on, will need to wait</div><div class='add'>+         * until the next unlock/lock cycle. */</div><div class='add'>+        lock-&gt;release = now = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* If we are here, it means that the timer has expired before having</div><div class='del'>-         * been cancelled. This guarantees that 'link' is still valid because</div><div class='del'>-         * the fop that contains it must be pending (if timer cancellation in</div><div class='del'>-         * ec_lock_assign_owner() fails, the fop is left sleeping).</div><div class='add'>+    if (now) {</div><div class='add'>+        ec_unlock_now(link);</div><div class='add'>+    } else {</div><div class='add'>+        /* The timer has been cancelled just after firing it but before</div><div class='add'>+         * getting here. This means that another fop has used the lock</div><div class='add'>+         * and everything should be handled as if this callback were</div><div class='add'>+         * have not been executed. However we still have an owner</div><div class='add'>+         * reference.</div><div class='add'>+         *</div><div class='add'>+         * We need to release our reference. If this is not the last</div><div class='add'>+         * reference (the most common case because another fop has</div><div class='add'>+         * taken another ref) we only need to decrement the counter.</div><div class='add'>+         * Otherwise we have been delayed enough so that the other fop</div><div class='add'>+         * has had time to acquire the reference, do its operation and</div><div class='add'>+         * release it. At the time of releasing it, the fop did found</div><div class='add'>+         * that the ref counter was &gt; 1 (our reference), so the delayed</div><div class='add'>+         * unlock timer wasn't started. We need to start it again if we</div><div class='add'>+         * are the last reference.</div><div class='ctx'>          *</div><div class='del'>-         * At the same time, the fop still has a reference to the lock, so</div><div class='del'>-         * it must also be valid.</div><div class='add'>+         * ec_unlock_timer_add() handles both cases.</div><div class='ctx'>          */</div><div class='del'>-        lock = link-&gt;lock;</div><div class='add'>+        ec_unlock_timer_add(link);</div><div class='ctx'> </div><div class='del'>-        /* 'lock' must have a valid inode since it can only be destroyed</div><div class='del'>-         * when the lock itself is destroyed, but we have a reference to the</div><div class='del'>-         * lock to avoid this.</div><div class='add'>+        /* We need to resume the fop that was waiting for the delayed</div><div class='add'>+         * unlock.</div><div class='ctx'>          */</div><div class='del'>-        inode = lock-&gt;loc.inode;</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;timer != NULL) {</div><div class='del'>-                ec_trace("UNLOCK_DELAYED", link-&gt;fop, "lock=%p", lock);</div><div class='del'>-</div><div class='del'>-                /* The unlock timer has expired without anyone cancelling it.</div><div class='del'>-                 * This means that it shouldn't have any owner, and the waiting</div><div class='del'>-                 * and frozen lists should be empty.  It must have only one</div><div class='del'>-                 * owner reference, but there can be fops being prepared</div><div class='del'>-                 * though.</div><div class='del'>-                 * */</div><div class='del'>-                GF_ASSERT(!lock-&gt;release &amp;&amp;</div><div class='del'>-                          (lock-&gt;refs_owners == 1) &amp;&amp;</div><div class='del'>-                          list_empty(&amp;lock-&gt;owners) &amp;&amp;</div><div class='del'>-                          list_empty(&amp;lock-&gt;waiting) &amp;&amp;</div><div class='del'>-                          list_empty(&amp;lock-&gt;frozen));</div><div class='del'>-</div><div class='del'>-                gf_timer_call_cancel(link-&gt;fop-&gt;xl-&gt;ctx, lock-&gt;timer);</div><div class='del'>-                lock-&gt;timer = NULL;</div><div class='del'>-</div><div class='del'>-                /* Any fop being processed from now on, will need to wait</div><div class='del'>-                 * until the next unlock/lock cycle. */</div><div class='del'>-                lock-&gt;release = now = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (now) {</div><div class='del'>-                ec_unlock_now(link);</div><div class='del'>-        } else {</div><div class='del'>-                /* The timer has been cancelled just after firing it but before</div><div class='del'>-                 * getting here. This means that another fop has used the lock</div><div class='del'>-                 * and everything should be handled as if this callback were</div><div class='del'>-                 * have not been executed. However we still have an owner</div><div class='del'>-                 * reference.</div><div class='del'>-                 *</div><div class='del'>-                 * We need to release our reference. If this is not the last</div><div class='del'>-                 * reference (the most common case because another fop has</div><div class='del'>-                 * taken another ref) we only need to decrement the counter.</div><div class='del'>-                 * Otherwise we have been delayed enough so that the other fop</div><div class='del'>-                 * has had time to acquire the reference, do its operation and</div><div class='del'>-                 * release it. At the time of releasing it, the fop did found</div><div class='del'>-                 * that the ref counter was &gt; 1 (our reference), so the delayed</div><div class='del'>-                 * unlock timer wasn't started. We need to start it again if we</div><div class='del'>-                 * are the last reference.</div><div class='del'>-                 *</div><div class='del'>-                 * ec_unlock_timer_add() handles both cases.</div><div class='del'>-                 */</div><div class='del'>-                ec_unlock_timer_add(link);</div><div class='del'>-</div><div class='del'>-                /* We need to resume the fop that was waiting for the delayed</div><div class='del'>-                 * unlock.</div><div class='del'>-                 */</div><div class='del'>-                ec_resume(link-&gt;fop, 0);</div><div class='del'>-        }</div><div class='add'>+        ec_resume(link-&gt;fop, 0);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_unlock_timer_cbk(void *data)</div><div class='add'>+void</div><div class='add'>+ec_unlock_timer_cbk(void *data)</div><div class='ctx'> {</div><div class='del'>-        ec_unlock_timer_del(data);</div><div class='add'>+    ec_unlock_timer_del(data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> ec_eager_lock_used(ec_t *ec, ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        /* Fops with no locks at this point mean that they are sent as sub-fops</div><div class='del'>-         * of other higher level fops. In this case we simply assume that the</div><div class='del'>-         * parent fop will take correct care of the eager lock. */</div><div class='del'>-        if (fop-&gt;lock_count == 0) {</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    /* Fops with no locks at this point mean that they are sent as sub-fops</div><div class='add'>+     * of other higher level fops. In this case we simply assume that the</div><div class='add'>+     * parent fop will take correct care of the eager lock. */</div><div class='add'>+    if (fop-&gt;lock_count == 0) {</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* We may have more than one lock, but this only happens in the rename</div><div class='del'>-         * fop, and both locks will reference an inode of the same type (a</div><div class='del'>-         * directory in this case), so we only need to check the first lock. */</div><div class='del'>-        if (fop-&gt;locks[0].lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                return ec-&gt;eager_lock;</div><div class='del'>-        }</div><div class='add'>+    /* We may have more than one lock, but this only happens in the rename</div><div class='add'>+     * fop, and both locks will reference an inode of the same type (a</div><div class='add'>+     * directory in this case), so we only need to check the first lock. */</div><div class='add'>+    if (fop-&gt;locks[0].lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) {</div><div class='add'>+        return ec-&gt;eager_lock;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ec-&gt;other_eager_lock;</div><div class='add'>+    return ec-&gt;other_eager_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint32_t</div><div class='ctx'> ec_eager_lock_timeout(ec_t *ec, ec_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                return ec-&gt;eager_lock_timeout;</div><div class='del'>-        }</div><div class='add'>+    if (lock-&gt;loc.inode-&gt;ia_type == IA_IFREG) {</div><div class='add'>+        return ec-&gt;eager_lock_timeout;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ec-&gt;other_eager_lock_timeout;</div><div class='add'>+    return ec-&gt;other_eager_lock_timeout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> ec_lock_delay_create(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='del'>-        struct timespec delay;</div><div class='del'>-        ec_fop_data_t *fop = link-&gt;fop;</div><div class='del'>-        ec_lock_t *lock = link-&gt;lock;</div><div class='add'>+    struct timespec delay;</div><div class='add'>+    ec_fop_data_t *fop = link-&gt;fop;</div><div class='add'>+    ec_lock_t *lock = link-&gt;lock;</div><div class='ctx'> </div><div class='del'>-        delay.tv_sec = ec_eager_lock_timeout(fop-&gt;xl-&gt;private, lock);</div><div class='del'>-        delay.tv_nsec = 0;</div><div class='del'>-        lock-&gt;timer = gf_timer_call_after(fop-&gt;xl-&gt;ctx, delay,</div><div class='del'>-                                          ec_unlock_timer_cbk, link);</div><div class='del'>-        if (lock-&gt;timer == NULL) {</div><div class='del'>-                gf_msg(fop-&gt;xl-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                       EC_MSG_UNLOCK_DELAY_FAILED,</div><div class='del'>-                       "Unable to delay an unlock");</div><div class='add'>+    delay.tv_sec = ec_eager_lock_timeout(fop-&gt;xl-&gt;private, lock);</div><div class='add'>+    delay.tv_nsec = 0;</div><div class='add'>+    lock-&gt;timer = gf_timer_call_after(fop-&gt;xl-&gt;ctx, delay, ec_unlock_timer_cbk,</div><div class='add'>+                                      link);</div><div class='add'>+    if (lock-&gt;timer == NULL) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='add'>+               EC_MSG_UNLOCK_DELAY_FAILED, "Unable to delay an unlock");</div><div class='ctx'> </div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_unlock_timer_add(ec_lock_link_t *link)</div><div class='add'>+void</div><div class='add'>+ec_unlock_timer_add(ec_lock_link_t *link)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = link-&gt;fop;</div><div class='ctx'>     ec_lock_t *lock = link-&gt;lock;</div><div class='hunk'>@@ -2732,7 +2709,8 @@ void ec_unlock_timer_add(ec_lock_link_t *link)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_unlock(ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_unlock(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     int32_t i;</div><div class='ctx'> </div><div class='hunk'>@@ -2741,7 +2719,8 @@ void ec_unlock(ec_fop_data_t *fop)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_flush_size_version(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_flush_size_version(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     GF_ASSERT(fop-&gt;lock_count == 1);</div><div class='ctx'>     ec_update_info(&amp;fop-&gt;locks[0]);</div><div class='hunk'>@@ -2751,99 +2730,98 @@ static void</div><div class='ctx'> ec_update_stripe(ec_t *ec, ec_stripe_list_t *stripe_cache, ec_stripe_t *stripe,</div><div class='ctx'>                  ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        off_t base;</div><div class='del'>-</div><div class='del'>-        /* On write fops, we only update existing fragments if the write has</div><div class='del'>-         * succeeded. Otherwise, we remove them from the cache. */</div><div class='del'>-        if ((fop-&gt;id == GF_FOP_WRITE) &amp;&amp; (fop-&gt;answer != NULL) &amp;&amp;</div><div class='del'>-            (fop-&gt;answer-&gt;op_ret &gt;= 0)) {</div><div class='del'>-                base = stripe-&gt;frag_offset - fop-&gt;frag_range.first;</div><div class='del'>-                base *= ec-&gt;fragments;</div><div class='del'>-</div><div class='del'>-                /* We check if the stripe offset falls inside the real region</div><div class='del'>-                 * modified by the write fop (a write request is allowed,</div><div class='del'>-                 * though uncommon, to write less bytes than requested). The</div><div class='del'>-                 * current write fop implementation doesn't allow partial</div><div class='del'>-                 * writes of fragments, so if there's no error, we are sure</div><div class='del'>-                 * that a full stripe has been completely modified or not</div><div class='del'>-                 * touched at all. The value of op_ret may not be a multiple</div><div class='del'>-                 * of the stripe size because it depends on the requested</div><div class='del'>-                 * size by the user, so we update the stripe if the write has</div><div class='del'>-                 * modified at least one byte (meaning ec has written the full</div><div class='del'>-                 * stripe). */</div><div class='del'>-                if (base &lt; fop-&gt;answer-&gt;op_ret + fop-&gt;head) {</div><div class='del'>-                        memcpy(stripe-&gt;data, fop-&gt;vector[0].iov_base + base,</div><div class='del'>-                               ec-&gt;stripe_size);</div><div class='del'>-                        list_move_tail(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='del'>-</div><div class='del'>-                        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.updates);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                stripe-&gt;frag_offset = -1;</div><div class='del'>-                list_move (&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='del'>-</div><div class='del'>-                GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.invals);</div><div class='add'>+    off_t base;</div><div class='add'>+</div><div class='add'>+    /* On write fops, we only update existing fragments if the write has</div><div class='add'>+     * succeeded. Otherwise, we remove them from the cache. */</div><div class='add'>+    if ((fop-&gt;id == GF_FOP_WRITE) &amp;&amp; (fop-&gt;answer != NULL) &amp;&amp;</div><div class='add'>+        (fop-&gt;answer-&gt;op_ret &gt;= 0)) {</div><div class='add'>+        base = stripe-&gt;frag_offset - fop-&gt;frag_range.first;</div><div class='add'>+        base *= ec-&gt;fragments;</div><div class='add'>+</div><div class='add'>+        /* We check if the stripe offset falls inside the real region</div><div class='add'>+         * modified by the write fop (a write request is allowed,</div><div class='add'>+         * though uncommon, to write less bytes than requested). The</div><div class='add'>+         * current write fop implementation doesn't allow partial</div><div class='add'>+         * writes of fragments, so if there's no error, we are sure</div><div class='add'>+         * that a full stripe has been completely modified or not</div><div class='add'>+         * touched at all. The value of op_ret may not be a multiple</div><div class='add'>+         * of the stripe size because it depends on the requested</div><div class='add'>+         * size by the user, so we update the stripe if the write has</div><div class='add'>+         * modified at least one byte (meaning ec has written the full</div><div class='add'>+         * stripe). */</div><div class='add'>+        if (base &lt; fop-&gt;answer-&gt;op_ret + fop-&gt;head) {</div><div class='add'>+            memcpy(stripe-&gt;data, fop-&gt;vector[0].iov_base + base,</div><div class='add'>+                   ec-&gt;stripe_size);</div><div class='add'>+            list_move_tail(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='add'>+</div><div class='add'>+            GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.updates);</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        stripe-&gt;frag_offset = -1;</div><div class='add'>+        list_move(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='add'>+</div><div class='add'>+        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.invals);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_update_cached_stripes (ec_fop_data_t *fop)</div><div class='del'>-{</div><div class='del'>-        uint64_t          first;</div><div class='del'>-        uint64_t          last;</div><div class='del'>-        ec_stripe_t      *stripe       = NULL;</div><div class='del'>-        ec_inode_t       *ctx          = NULL;</div><div class='del'>-        ec_stripe_list_t *stripe_cache = NULL;</div><div class='del'>-        inode_t          *inode        = NULL;</div><div class='del'>-        struct list_head *temp;</div><div class='del'>-        struct list_head  sentinel;</div><div class='del'>-</div><div class='del'>-        first = fop-&gt;frag_range.first;</div><div class='del'>-        /* 'last' represents the first stripe not touched by the operation */</div><div class='del'>-        last = fop-&gt;frag_range.last;</div><div class='del'>-</div><div class='del'>-        /* If there are no modified stripes, we don't need to do anything</div><div class='del'>-         * else. */</div><div class='del'>-        if (last &lt;= first) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+ec_update_cached_stripes(ec_fop_data_t *fop)</div><div class='add'>+{</div><div class='add'>+    uint64_t first;</div><div class='add'>+    uint64_t last;</div><div class='add'>+    ec_stripe_t *stripe = NULL;</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='add'>+    ec_stripe_list_t *stripe_cache = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    struct list_head *temp;</div><div class='add'>+    struct list_head sentinel;</div><div class='add'>+</div><div class='add'>+    first = fop-&gt;frag_range.first;</div><div class='add'>+    /* 'last' represents the first stripe not touched by the operation */</div><div class='add'>+    last = fop-&gt;frag_range.last;</div><div class='add'>+</div><div class='add'>+    /* If there are no modified stripes, we don't need to do anything</div><div class='add'>+     * else. */</div><div class='add'>+    if (last &lt;= first) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!fop-&gt;use_fd) {</div><div class='del'>-                inode = fop-&gt;loc[0].inode;</div><div class='del'>-        } else {</div><div class='del'>-                inode = fop-&gt;fd-&gt;inode;</div><div class='del'>-        }</div><div class='add'>+    if (!fop-&gt;use_fd) {</div><div class='add'>+        inode = fop-&gt;loc[0].inode;</div><div class='add'>+    } else {</div><div class='add'>+        inode = fop-&gt;fd-&gt;inode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ctx = __ec_inode_get (inode, fop-&gt;xl);</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='del'>-</div><div class='del'>-        /* Since we'll be moving elements of the list to the tail, we might</div><div class='del'>-         * end in an infinite loop. To avoid it, we insert a sentinel element</div><div class='del'>-         * into the list, so that it will be used to detect when we have</div><div class='del'>-         * traversed all existing elements once. */</div><div class='del'>-        list_add_tail(&amp;sentinel, &amp;stripe_cache-&gt;lru);</div><div class='del'>-        temp = stripe_cache-&gt;lru.next;</div><div class='del'>-        while (temp != &amp;sentinel) {</div><div class='del'>-                stripe = list_entry(temp, ec_stripe_t, lru);</div><div class='del'>-                temp = temp-&gt;next;</div><div class='del'>-                if ((first &lt;= stripe-&gt;frag_offset) &amp;&amp;</div><div class='del'>-                    (stripe-&gt;frag_offset &lt; last)) {</div><div class='del'>-                        ec_update_stripe (fop-&gt;xl-&gt;private, stripe_cache,</div><div class='del'>-                                          stripe, fop);</div><div class='del'>-                }</div><div class='add'>+    ctx = __ec_inode_get(inode, fop-&gt;xl);</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='add'>+</div><div class='add'>+    /* Since we'll be moving elements of the list to the tail, we might</div><div class='add'>+     * end in an infinite loop. To avoid it, we insert a sentinel element</div><div class='add'>+     * into the list, so that it will be used to detect when we have</div><div class='add'>+     * traversed all existing elements once. */</div><div class='add'>+    list_add_tail(&amp;sentinel, &amp;stripe_cache-&gt;lru);</div><div class='add'>+    temp = stripe_cache-&gt;lru.next;</div><div class='add'>+    while (temp != &amp;sentinel) {</div><div class='add'>+        stripe = list_entry(temp, ec_stripe_t, lru);</div><div class='add'>+        temp = temp-&gt;next;</div><div class='add'>+        if ((first &lt;= stripe-&gt;frag_offset) &amp;&amp; (stripe-&gt;frag_offset &lt; last)) {</div><div class='add'>+            ec_update_stripe(fop-&gt;xl-&gt;private, stripe_cache, stripe, fop);</div><div class='ctx'>         }</div><div class='del'>-        list_del(&amp;sentinel);</div><div class='add'>+    }</div><div class='add'>+    list_del(&amp;sentinel);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lock_reuse(ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_lock_reuse(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_cbk_data_t *cbk;</div><div class='ctx'>     ec_t *ec = NULL;</div><div class='hunk'>@@ -2854,13 +2832,13 @@ void ec_lock_reuse(ec_fop_data_t *fop)</div><div class='ctx'> </div><div class='ctx'>     if (ec_eager_lock_used(ec, fop) &amp;&amp; cbk != NULL) {</div><div class='ctx'>         if (cbk-&gt;xdata != NULL) {</div><div class='del'>-            if ((dict_get_int32(cbk-&gt;xdata, GLUSTERFS_INODELK_COUNT,</div><div class='del'>-                                &amp;count) == 0) &amp;&amp; (count &gt; 1)) {</div><div class='add'>+            if ((dict_get_int32(cbk-&gt;xdata, GLUSTERFS_INODELK_COUNT, &amp;count) ==</div><div class='add'>+                 0) &amp;&amp;</div><div class='add'>+                (count &gt; 1)) {</div><div class='ctx'>                 release = _gf_true;</div><div class='ctx'>             }</div><div class='ctx'>             if (release) {</div><div class='del'>-                gf_msg_debug (fop-&gt;xl-&gt;name, 0,</div><div class='del'>-                       "Lock contention detected");</div><div class='add'>+                gf_msg_debug(fop-&gt;xl-&gt;name, 0, "Lock contention detected");</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='ctx'>     } else {</div><div class='hunk'>@@ -2869,24 +2847,25 @@ void ec_lock_reuse(ec_fop_data_t *fop)</div><div class='ctx'>          * the lock. */</div><div class='ctx'>         release = _gf_true;</div><div class='ctx'>     }</div><div class='del'>-    ec_update_cached_stripes (fop);</div><div class='add'>+    ec_update_cached_stripes(fop);</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; fop-&gt;lock_count; i++) {</div><div class='ctx'>         ec_lock_next_owner(&amp;fop-&gt;locks[i], cbk, release);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void __ec_manager(ec_fop_data_t * fop, int32_t error)</div><div class='add'>+void</div><div class='add'>+__ec_manager(ec_fop_data_t *fop, int32_t error)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='ctx'>     do {</div><div class='ctx'>         ec_trace("MANAGER", fop, "error=%d", error);</div><div class='ctx'> </div><div class='del'>-        if (!ec_must_wind (fop)) {</div><div class='del'>-                if (ec-&gt;xl_up_count &lt; ec-&gt;fragments) {</div><div class='del'>-                    error = ENOTCONN;</div><div class='del'>-                }</div><div class='add'>+        if (!ec_must_wind(fop)) {</div><div class='add'>+            if (ec-&gt;xl_up_count &lt; ec-&gt;fragments) {</div><div class='add'>+                error = ENOTCONN;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (error != 0) {</div><div class='hunk'>@@ -2912,20 +2891,20 @@ void __ec_manager(ec_fop_data_t * fop, int32_t error)</div><div class='ctx'>         fop-&gt;jobs = 1;</div><div class='ctx'> </div><div class='ctx'>         fop-&gt;state = fop-&gt;handler(fop, fop-&gt;state);</div><div class='del'>-        GF_ASSERT (fop-&gt;state &gt;= 0);</div><div class='add'>+        GF_ASSERT(fop-&gt;state &gt;= 0);</div><div class='ctx'> </div><div class='ctx'>         error = ec_check_complete(fop, __ec_manager);</div><div class='ctx'>     } while (error &gt;= 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_manager(ec_fop_data_t * fop, int32_t error)</div><div class='add'>+void</div><div class='add'>+ec_manager(ec_fop_data_t *fop, int32_t error)</div><div class='ctx'> {</div><div class='ctx'>     GF_ASSERT(fop-&gt;jobs == 0);</div><div class='ctx'>     GF_ASSERT(fop-&gt;winds == 0);</div><div class='ctx'>     GF_ASSERT(fop-&gt;error == 0);</div><div class='ctx'> </div><div class='del'>-    if (fop-&gt;state == EC_STATE_START)</div><div class='del'>-    {</div><div class='add'>+    if (fop-&gt;state == EC_STATE_START) {</div><div class='ctx'>         fop-&gt;state = EC_STATE_INIT;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-data.c b/xlators/cluster/ec/src/ec-data.c<br/>index 33a970d922a..fae8843a679 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-data.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-data.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-data.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-data.c</a></div><div class='hunk'>@@ -14,47 +14,43 @@</div><div class='ctx'> #include "ec-data.h"</div><div class='ctx'> #include "ec-messages.h"</div><div class='ctx'> </div><div class='del'>-ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                                     ec_fop_data_t * fop, int32_t id,</div><div class='del'>-                                     int32_t idx, int32_t op_ret,</div><div class='del'>-                                     int32_t op_errno)</div><div class='add'>+ec_cbk_data_t *</div><div class='add'>+ec_cbk_data_allocate(call_frame_t *frame, xlator_t *this, ec_fop_data_t *fop,</div><div class='add'>+                     int32_t id, int32_t idx, int32_t op_ret, int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-    if (fop-&gt;xl != this)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_XLATOR_MISMATCH, "Mismatching xlators between request "</div><div class='del'>-                "and answer (req=%s, ans=%s).", fop-&gt;xl-&gt;name, this-&gt;name);</div><div class='add'>+    if (fop-&gt;xl != this) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_XLATOR_MISMATCH,</div><div class='add'>+               "Mismatching xlators between request "</div><div class='add'>+               "and answer (req=%s, ans=%s).",</div><div class='add'>+               fop-&gt;xl-&gt;name, this-&gt;name);</div><div class='ctx'> </div><div class='ctx'>         return NULL;</div><div class='ctx'>     }</div><div class='del'>-    if (fop-&gt;frame != frame)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_FRAME_MISMATCH, "Mismatching frames between request "</div><div class='del'>-                                         "and answer (req=%p, ans=%p).",</div><div class='del'>-                                         fop-&gt;frame, frame);</div><div class='add'>+    if (fop-&gt;frame != frame) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_FRAME_MISMATCH,</div><div class='add'>+               "Mismatching frames between request "</div><div class='add'>+               "and answer (req=%p, ans=%p).",</div><div class='add'>+               fop-&gt;frame, frame);</div><div class='ctx'> </div><div class='ctx'>         return NULL;</div><div class='ctx'>     }</div><div class='del'>-    if (fop-&gt;id != id)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_FOP_MISMATCH, "Mismatching fops between request "</div><div class='del'>-                                         "and answer (req=%d, ans=%d).",</div><div class='del'>-                                         fop-&gt;id, id);</div><div class='add'>+    if (fop-&gt;id != id) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_FOP_MISMATCH,</div><div class='add'>+               "Mismatching fops between request "</div><div class='add'>+               "and answer (req=%d, ans=%d).",</div><div class='add'>+               fop-&gt;id, id);</div><div class='ctx'> </div><div class='ctx'>         return NULL;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     cbk = mem_get0(ec-&gt;cbk_pool);</div><div class='del'>-    if (cbk == NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Failed to allocate memory for an "</div><div class='del'>-                                         "answer.");</div><div class='add'>+    if (cbk == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Failed to allocate memory for an "</div><div class='add'>+               "answer.");</div><div class='ctx'>         return NULL;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -64,7 +60,7 @@ ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='ctx'>     cbk-&gt;count = 1;</div><div class='ctx'>     cbk-&gt;op_ret = op_ret;</div><div class='ctx'>     cbk-&gt;op_errno = op_errno;</div><div class='del'>-    INIT_LIST_HEAD (&amp;cbk-&gt;entries.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;cbk-&gt;entries.list);</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -75,50 +71,45 @@ ec_cbk_data_t * ec_cbk_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='ctx'>     return cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_cbk_data_destroy(ec_cbk_data_t * cbk)</div><div class='add'>+void</div><div class='add'>+ec_cbk_data_destroy(ec_cbk_data_t *cbk)</div><div class='ctx'> {</div><div class='del'>-    if (cbk-&gt;xdata != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (cbk-&gt;xdata != NULL) {</div><div class='ctx'>         dict_unref(cbk-&gt;xdata);</div><div class='ctx'>     }</div><div class='del'>-    if (cbk-&gt;dict != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (cbk-&gt;dict != NULL) {</div><div class='ctx'>         dict_unref(cbk-&gt;dict);</div><div class='ctx'>     }</div><div class='del'>-    if (cbk-&gt;inode != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (cbk-&gt;inode != NULL) {</div><div class='ctx'>         inode_unref(cbk-&gt;inode);</div><div class='ctx'>     }</div><div class='del'>-    if (cbk-&gt;fd != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (cbk-&gt;fd != NULL) {</div><div class='ctx'>         fd_unref(cbk-&gt;fd);</div><div class='ctx'>     }</div><div class='del'>-    if (cbk-&gt;buffers != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (cbk-&gt;buffers != NULL) {</div><div class='ctx'>         iobref_unref(cbk-&gt;buffers);</div><div class='ctx'>     }</div><div class='ctx'>     GF_FREE(cbk-&gt;vector);</div><div class='del'>-    gf_dirent_free (&amp;cbk-&gt;entries);</div><div class='del'>-    GF_FREE (cbk-&gt;str);</div><div class='add'>+    gf_dirent_free(&amp;cbk-&gt;entries);</div><div class='add'>+    GF_FREE(cbk-&gt;str);</div><div class='ctx'> </div><div class='ctx'>     mem_put(cbk);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                                     int32_t id, uint32_t flags,</div><div class='del'>-                                     uintptr_t target, int32_t minimum,</div><div class='del'>-                                     ec_wind_f wind, ec_handler_f handler,</div><div class='del'>-                                     ec_cbk_t cbks, void * data)</div><div class='add'>+ec_fop_data_t *</div><div class='add'>+ec_fop_data_allocate(call_frame_t *frame, xlator_t *this, int32_t id,</div><div class='add'>+                     uint32_t flags, uintptr_t target, int32_t minimum,</div><div class='add'>+                     ec_wind_f wind, ec_handler_f handler, ec_cbk_t cbks,</div><div class='add'>+                     void *data)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop, * parent;</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='add'>+    ec_fop_data_t *fop, *parent;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'> </div><div class='ctx'>     fop = mem_get0(ec-&gt;fop_pool);</div><div class='del'>-    if (fop == NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Failed to allocate memory for a "</div><div class='del'>-                                         "request.");</div><div class='add'>+    if (fop == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Failed to allocate memory for a "</div><div class='add'>+               "request.");</div><div class='ctx'> </div><div class='ctx'>         return NULL;</div><div class='ctx'>     }</div><div class='hunk'>@@ -142,19 +133,15 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='ctx'>      * TODO: minimize usage of private frames. Reuse req_frame as much as</div><div class='ctx'>      *       possible.</div><div class='ctx'>      */</div><div class='del'>-    if (frame != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (frame != NULL) {</div><div class='ctx'>         fop-&gt;frame = copy_frame(frame);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='add'>+    } else {</div><div class='ctx'>         fop-&gt;frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='ctx'>     }</div><div class='del'>-    if (fop-&gt;frame == NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Failed to create a private frame "</div><div class='del'>-                                         "for a request");</div><div class='add'>+    if (fop-&gt;frame == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Failed to create a private frame "</div><div class='add'>+               "for a request");</div><div class='ctx'> </div><div class='ctx'>         mem_put(fop);</div><div class='ctx'> </div><div class='hunk'>@@ -179,11 +166,9 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop-&gt;frame-&gt;local = fop;</div><div class='ctx'> </div><div class='del'>-    if (frame != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (frame != NULL) {</div><div class='ctx'>         parent = frame-&gt;local;</div><div class='del'>-        if (parent != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (parent != NULL) {</div><div class='ctx'>             ec_sleep(parent);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='hunk'>@@ -199,7 +184,8 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this,</div><div class='ctx'>     return fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fop_data_acquire(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_fop_data_acquire(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     LOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -211,36 +197,38 @@ void ec_fop_data_acquire(ec_fop_data_t * fop)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_handle_last_pending_fop_completion (ec_fop_data_t *fop, gf_boolean_t *notify)</div><div class='add'>+ec_handle_last_pending_fop_completion(ec_fop_data_t *fop, gf_boolean_t *notify)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!list_empty (&amp;fop-&gt;pending_list)) {</div><div class='del'>-                LOCK(&amp;ec-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        list_del_init (&amp;fop-&gt;pending_list);</div><div class='del'>-                        *notify = list_empty (&amp;ec-&gt;pending_fops);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK(&amp;ec-&gt;lock);</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!list_empty(&amp;fop-&gt;pending_list)) {</div><div class='add'>+        LOCK(&amp;ec-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            list_del_init(&amp;fop-&gt;pending_list);</div><div class='add'>+            *notify = list_empty(&amp;ec-&gt;pending_fops);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;ec-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> ec_fop_cleanup(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_cbk_data_t *cbk, *tmp;</div><div class='add'>+    ec_cbk_data_t *cbk, *tmp;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe(cbk, tmp, &amp;fop-&gt;answer_list, answer_list) {</div><div class='del'>-            list_del_init(&amp;cbk-&gt;answer_list);</div><div class='add'>+    list_for_each_entry_safe(cbk, tmp, &amp;fop-&gt;answer_list, answer_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;cbk-&gt;answer_list);</div><div class='ctx'> </div><div class='del'>-            ec_cbk_data_destroy(cbk);</div><div class='del'>-        }</div><div class='del'>-        INIT_LIST_HEAD(&amp;fop-&gt;cbk_list);</div><div class='add'>+        ec_cbk_data_destroy(cbk);</div><div class='add'>+    }</div><div class='add'>+    INIT_LIST_HEAD(&amp;fop-&gt;cbk_list);</div><div class='ctx'> </div><div class='del'>-        fop-&gt;answer = NULL;</div><div class='add'>+    fop-&gt;answer = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fop_data_release(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_fop_data_release(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = NULL;</div><div class='ctx'>     int32_t refs;</div><div class='hunk'>@@ -250,36 +238,30 @@ void ec_fop_data_release(ec_fop_data_t * fop)</div><div class='ctx'> </div><div class='ctx'>     ec_trace("RELEASE", fop, "");</div><div class='ctx'> </div><div class='del'>-    GF_ASSERT (fop-&gt;refs &gt; 0);</div><div class='add'>+    GF_ASSERT(fop-&gt;refs &gt; 0);</div><div class='ctx'>     refs = --fop-&gt;refs;</div><div class='ctx'> </div><div class='ctx'>     UNLOCK(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    if (refs == 0)</div><div class='del'>-    {</div><div class='add'>+    if (refs == 0) {</div><div class='ctx'>         fop-&gt;frame-&gt;local = NULL;</div><div class='ctx'>         STACK_DESTROY(fop-&gt;frame-&gt;root);</div><div class='ctx'> </div><div class='ctx'>         LOCK_DESTROY(&amp;fop-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (fop-&gt;xdata != NULL) {</div><div class='ctx'>             dict_unref(fop-&gt;xdata);</div><div class='ctx'>         }</div><div class='del'>-        if (fop-&gt;dict != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (fop-&gt;dict != NULL) {</div><div class='ctx'>             dict_unref(fop-&gt;dict);</div><div class='ctx'>         }</div><div class='del'>-        if (fop-&gt;inode != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (fop-&gt;inode != NULL) {</div><div class='ctx'>             inode_unref(fop-&gt;inode);</div><div class='ctx'>         }</div><div class='del'>-        if (fop-&gt;fd != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (fop-&gt;fd != NULL) {</div><div class='ctx'>             fd_unref(fop-&gt;fd);</div><div class='ctx'>         }</div><div class='del'>-        if (fop-&gt;buffers != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (fop-&gt;buffers != NULL) {</div><div class='ctx'>             iobref_unref(fop-&gt;buffers);</div><div class='ctx'>         }</div><div class='ctx'>         GF_FREE(fop-&gt;vector);</div><div class='hunk'>@@ -294,8 +276,8 @@ void ec_fop_data_release(ec_fop_data_t * fop)</div><div class='ctx'>         ec_fop_cleanup(fop);</div><div class='ctx'> </div><div class='ctx'>         ec = fop-&gt;xl-&gt;private;</div><div class='del'>-        ec_handle_last_pending_fop_completion (fop, &amp;notify);</div><div class='del'>-        ec_handle_healers_done (fop);</div><div class='add'>+        ec_handle_last_pending_fop_completion(fop, &amp;notify);</div><div class='add'>+        ec_handle_healers_done(fop);</div><div class='ctx'>         mem_put(fop);</div><div class='ctx'>         if (notify) {</div><div class='ctx'>             ec_pending_fops_completed(ec);</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-dir-read.c b/xlators/cluster/ec/src/ec-dir-read.c<br/>index b44bb4239b1..8db92b9d92d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-dir-read.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-dir-read.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-dir-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-dir-read.c</a></div><div class='hunk'>@@ -25,15 +25,14 @@</div><div class='ctx'>  *</div><div class='ctx'>  ***************************************************************/</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_opendir(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                           ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_opendir(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-    if (dst-&gt;fd != src-&gt;fd)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_FD_MISMATCH, "Mismatching fd in answers "</div><div class='del'>-                "of 'GF_FOP_OPENDIR': %p &lt;-&gt; %p",</div><div class='del'>-                dst-&gt;fd, src-&gt;fd);</div><div class='add'>+    if (dst-&gt;fd != src-&gt;fd) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_FD_MISMATCH,</div><div class='add'>+               "Mismatching fd in answers "</div><div class='add'>+               "of 'GF_FOP_OPENDIR': %p &lt;-&gt; %p",</div><div class='add'>+               dst-&gt;fd, src-&gt;fd);</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -41,12 +40,12 @@ int32_t ec_combine_opendir(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_opendir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, fd_t * fd,</div><div class='del'>-                       dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -56,36 +55,31 @@ int32_t ec_opendir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_OPENDIR, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (fd != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (fd != NULL) {</div><div class='ctx'>                 cbk-&gt;fd = fd_ref(fd);</div><div class='del'>-                if (cbk-&gt;fd == NULL)</div><div class='del'>-                {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                            EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                            "file descriptor.");</div><div class='add'>+                if (cbk-&gt;fd == NULL) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                           "Failed to reference a "</div><div class='add'>+                           "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -93,19 +87,19 @@ int32_t ec_opendir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>         ec_combine(cbk, ec_combine_opendir);</div><div class='ctx'> </div><div class='del'>-        ec_update_fd_status (fd, this, idx, op_ret);</div><div class='add'>+        ec_update_fd_status(fd, this, idx, op_ret);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_opendir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_opendir(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -114,14 +108,14 @@ void ec_wind_opendir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;fd, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_opendir(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'>     ec_fd_t *ctx;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             LOCK(&amp;fop-&gt;fd-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -182,8 +176,7 @@ int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.opendir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.opendir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.opendir(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                   cbk-&gt;op_errno, cbk-&gt;fd, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -197,8 +190,7 @@ int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.opendir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.opendir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.opendir(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                   NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -218,40 +210,39 @@ int32_t ec_manager_opendir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_opendir_cbk_t func, void * data,</div><div class='del'>-                loc_t * loc, fd_t * fd, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_opendir(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_opendir_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+           fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .opendir = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.opendir = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(OPENDIR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(OPENDIR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_OPENDIR,</div><div class='del'>-                               EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='del'>-                               ec_wind_opendir, ec_manager_opendir, callback,</div><div class='del'>-                               data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_OPENDIR, EC_FLAG_LOCK_SHARED,</div><div class='add'>+                               target, minimum, ec_wind_opendir,</div><div class='add'>+                               ec_manager_opendir, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -259,9 +250,9 @@ void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -269,9 +260,9 @@ void ec_opendir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -289,50 +280,49 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* Returns -1 if client_id is invalid else index of child subvol in xl_list */</div><div class='ctx'> int</div><div class='del'>-ec_deitransform (xlator_t *this, off_t offset)</div><div class='add'>+ec_deitransform(xlator_t *this, off_t offset)</div><div class='ctx'> {</div><div class='del'>-        int  idx       = -1;</div><div class='del'>-        int  client_id = -1;</div><div class='del'>-        ec_t *ec       = this-&gt;private;</div><div class='del'>-        char id[32]    = {0};</div><div class='del'>-        int err;</div><div class='del'>-</div><div class='del'>-        client_id = gf_deitransform (this, offset);</div><div class='del'>-        sprintf (id, "%d", client_id);</div><div class='del'>-        err = dict_get_int32 (ec-&gt;leaf_to_subvolid, id, &amp;idx);</div><div class='del'>-        if (err &lt; 0) {</div><div class='del'>-                idx = err;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int client_id = -1;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    char id[32] = {0};</div><div class='add'>+    int err;</div><div class='add'>+</div><div class='add'>+    client_id = gf_deitransform(this, offset);</div><div class='add'>+    sprintf(id, "%d", client_id);</div><div class='add'>+    err = dict_get_int32(ec-&gt;leaf_to_subvolid, id, &amp;idx);</div><div class='add'>+    if (err &lt; 0) {</div><div class='add'>+        idx = err;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (idx &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        EC_MSG_INVALID_REQUEST,</div><div class='del'>-                        "Invalid index %d in readdirp request", client_id);</div><div class='del'>-                idx = -EINVAL;</div><div class='del'>-        }</div><div class='del'>-        return idx;</div><div class='add'>+    if (idx &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_REQUEST,</div><div class='add'>+               "Invalid index %d in readdirp request", client_id);</div><div class='add'>+        idx = -EINVAL;</div><div class='add'>+    }</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: readdir */</div><div class='ctx'> </div><div class='del'>-void ec_adjust_readdirp (ec_t *ec, int32_t idx, gf_dirent_t *entries)</div><div class='add'>+void</div><div class='add'>+ec_adjust_readdirp(ec_t *ec, int32_t idx, gf_dirent_t *entries)</div><div class='ctx'> {</div><div class='del'>-    gf_dirent_t * entry;</div><div class='add'>+    gf_dirent_t *entry;</div><div class='ctx'> </div><div class='ctx'>     list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='ctx'>     {</div><div class='ctx'>         if (!entry-&gt;inode)</div><div class='del'>-                continue;</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        if (entry-&gt;d_stat.ia_type == IA_IFREG)</div><div class='del'>-        {</div><div class='add'>+        if (entry-&gt;d_stat.ia_type == IA_IFREG) {</div><div class='ctx'>             if ((entry-&gt;dict == NULL) ||</div><div class='ctx'>                 (ec_dict_del_number(entry-&gt;dict, EC_XATTR_SIZE,</div><div class='ctx'>                                     &amp;entry-&gt;d_stat.ia_size) != 0)) {</div><div class='del'>-                    inode_unref (entry-&gt;inode);</div><div class='del'>-                    entry-&gt;inode = NULL;</div><div class='add'>+                inode_unref(entry-&gt;inode);</div><div class='add'>+                entry-&gt;inode = NULL;</div><div class='ctx'>             } else {</div><div class='ctx'>                 ec_iatt_rebuild(ec, &amp;entry-&gt;d_stat, 1, 1);</div><div class='ctx'>             }</div><div class='hunk'>@@ -341,9 +331,9 @@ void ec_adjust_readdirp (ec_t *ec, int32_t idx, gf_dirent_t *entries)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_common_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+ec_common_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL;</div><div class='hunk'>@@ -356,30 +346,29 @@ ec_common_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-    cbk = ec_cbk_data_allocate (frame, this, fop, fop-&gt;id,</div><div class='del'>-                                idx, op_ret, op_errno);</div><div class='add'>+    cbk = ec_cbk_data_allocate(frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='add'>+                               op_errno);</div><div class='ctx'>     if (cbk) {</div><div class='ctx'>         if (xdata)</div><div class='del'>-                cbk-&gt;xdata = dict_ref (xdata);</div><div class='add'>+            cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (cbk-&gt;op_ret &gt;= 0)</div><div class='del'>-                list_splice_init (&amp;entries-&gt;list,</div><div class='del'>-                                  &amp;cbk-&gt;entries.list);</div><div class='del'>-        ec_combine (cbk, NULL);</div><div class='add'>+            list_splice_init(&amp;entries-&gt;list, &amp;cbk-&gt;entries.list);</div><div class='add'>+        ec_combine(cbk, NULL);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_readdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_readdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -388,13 +377,13 @@ void ec_wind_readdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;size, fop-&gt;offset, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_readdir(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_fd_t *ctx = NULL;</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             /* Return error if opendir has not been successfully called on</div><div class='ctx'>              * any subvolume. */</div><div class='hunk'>@@ -406,42 +395,40 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             if (fop-&gt;id == GF_FOP_READDIRP) {</div><div class='del'>-                    int32_t err;</div><div class='add'>+                int32_t err;</div><div class='ctx'> </div><div class='add'>+                if (fop-&gt;xdata == NULL) {</div><div class='add'>+                    fop-&gt;xdata = dict_new();</div><div class='ctx'>                     if (fop-&gt;xdata == NULL) {</div><div class='del'>-                        fop-&gt;xdata = dict_new();</div><div class='del'>-                        if (fop-&gt;xdata == NULL) {</div><div class='del'>-                            fop-&gt;error = ENOMEM;</div><div class='add'>+                        fop-&gt;error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-                            return EC_STATE_REPORT;</div><div class='del'>-                        }</div><div class='add'>+                        return EC_STATE_REPORT;</div><div class='ctx'>                     }</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                    err = dict_set_uint64(fop-&gt;xdata, EC_XATTR_SIZE, 0);</div><div class='del'>-                    if (err != 0) {</div><div class='del'>-                        fop-&gt;error = -err;</div><div class='add'>+                err = dict_set_uint64(fop-&gt;xdata, EC_XATTR_SIZE, 0);</div><div class='add'>+                if (err != 0) {</div><div class='add'>+                    fop-&gt;error = -err;</div><div class='ctx'> </div><div class='del'>-                        return EC_STATE_REPORT;</div><div class='del'>-                    }</div><div class='add'>+                    return EC_STATE_REPORT;</div><div class='add'>+                }</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;offset != 0)</div><div class='del'>-            {</div><div class='del'>-            /* Non-zero offset is irrecoverable error as the offset may not be</div><div class='del'>-             * valid on other bricks*/</div><div class='add'>+            if (fop-&gt;offset != 0) {</div><div class='add'>+                /* Non-zero offset is irrecoverable error as the offset may not</div><div class='add'>+                 * be valid on other bricks*/</div><div class='ctx'>                 int32_t idx = -1;</div><div class='ctx'> </div><div class='del'>-                idx = ec_deitransform (fop-&gt;xl, fop-&gt;offset);</div><div class='add'>+                idx = ec_deitransform(fop-&gt;xl, fop-&gt;offset);</div><div class='ctx'> </div><div class='ctx'>                 if (idx &lt; 0) {</div><div class='del'>-                        fop-&gt;error = -idx;</div><div class='del'>-                        return EC_STATE_REPORT;</div><div class='add'>+                    fop-&gt;error = -idx;</div><div class='add'>+                    return EC_STATE_REPORT;</div><div class='ctx'>                 }</div><div class='ctx'>                 fop-&gt;mask &amp;= 1ULL &lt;&lt; idx;</div><div class='ctx'>             } else {</div><div class='del'>-                    ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, 0,</div><div class='del'>-                                       LLONG_MAX);</div><div class='del'>-                    ec_lock(fop);</div><div class='add'>+                ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, 0, LLONG_MAX);</div><div class='add'>+                ec_lock(fop);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_DISPATCH;</div><div class='hunk'>@@ -458,14 +445,14 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             if ((cbk != NULL) &amp;&amp; (cbk-&gt;op_ret &gt; 0) &amp;&amp;</div><div class='ctx'>                 (fop-&gt;id == GF_FOP_READDIRP)) {</div><div class='del'>-                ec_adjust_readdirp (fop-&gt;xl-&gt;private, cbk-&gt;idx, &amp;cbk-&gt;entries);</div><div class='add'>+                ec_adjust_readdirp(fop-&gt;xl-&gt;private, cbk-&gt;idx, &amp;cbk-&gt;entries);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_REPORT;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_REPORT:</div><div class='ctx'>             cbk = fop-&gt;answer;</div><div class='del'>-            GF_ASSERT (cbk);</div><div class='add'>+            GF_ASSERT(cbk);</div><div class='ctx'>             if (fop-&gt;id == GF_FOP_READDIR) {</div><div class='ctx'>                 if (fop-&gt;cbks.readdir != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.readdir(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='hunk'>@@ -479,9 +466,9 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>             if (fop-&gt;offset == 0)</div><div class='del'>-                    return EC_STATE_LOCK_REUSE;</div><div class='add'>+                return EC_STATE_LOCK_REUSE;</div><div class='ctx'>             else</div><div class='del'>-                    return EC_STATE_END;</div><div class='add'>+                return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_INIT:</div><div class='ctx'>         case -EC_STATE_LOCK:</div><div class='hunk'>@@ -500,50 +487,49 @@ int32_t ec_manager_readdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>             if (fop-&gt;offset == 0)</div><div class='del'>-                    return EC_STATE_LOCK_REUSE;</div><div class='add'>+                return EC_STATE_LOCK_REUSE;</div><div class='ctx'>             else</div><div class='del'>-                    return EC_STATE_END;</div><div class='add'>+                return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_LOCK_REUSE:</div><div class='ctx'>         case EC_STATE_LOCK_REUSE:</div><div class='del'>-            GF_ASSERT (fop-&gt;offset == 0);</div><div class='add'>+            GF_ASSERT(fop-&gt;offset == 0);</div><div class='ctx'>             ec_lock_reuse(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_UNLOCK;</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_UNLOCK:</div><div class='ctx'>         case EC_STATE_UNLOCK:</div><div class='del'>-            GF_ASSERT (fop-&gt;offset == 0);</div><div class='add'>+            GF_ASSERT(fop-&gt;offset == 0);</div><div class='ctx'>             ec_unlock(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_readdir_cbk_t func, void * data,</div><div class='del'>-                fd_t * fd, size_t size, off_t offset, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_readdir(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_readdir_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+           size_t size, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .readdir = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.readdir = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(READDIR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(READDIR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_READDIR,</div><div class='del'>-                               EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='del'>-                               ec_wind_readdir, ec_manager_readdir, callback,</div><div class='del'>-                               data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_READDIR, EC_FLAG_LOCK_SHARED,</div><div class='add'>+                               target, minimum, ec_wind_readdir,</div><div class='add'>+                               ec_manager_readdir, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -556,9 +542,9 @@ void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -566,9 +552,9 @@ void ec_readdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -586,7 +572,8 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: readdirp */</div><div class='ctx'> </div><div class='del'>-void ec_wind_readdirp(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_readdirp(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -595,24 +582,24 @@ void ec_wind_readdirp(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;size, fop-&gt;offset, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_readdirp_cbk_t func, void * data,</div><div class='del'>-                 fd_t * fd, size_t size, off_t offset, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_readdirp(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_readdirp_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+            size_t size, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .readdirp = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.readdirp = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(READDIRP) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(READDIRP) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_READDIRP,</div><div class='del'>-                               EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='del'>-                               ec_wind_readdirp, ec_manager_readdir, callback,</div><div class='del'>-                               data);</div><div class='add'>+    fop = ec_fop_data_allocate(</div><div class='add'>+        frame, this, GF_FOP_READDIRP, EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='add'>+        ec_wind_readdirp, ec_manager_readdir, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -625,9 +612,9 @@ void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -635,9 +622,9 @@ void ec_readdirp(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-dir-write.c b/xlators/cluster/ec/src/ec-dir-write.c<br/>index 7779d4849f3..f5c38e80dd7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-dir-write.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-dir-write.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-dir-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-dir-write.c</a></div><div class='hunk'>@@ -20,76 +20,75 @@</div><div class='ctx'> #include "ec-fops.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_dir_write_cbk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  void *cookie, int op_ret, int op_errno,</div><div class='del'>-                  struct iatt *poststat, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, struct iatt *preparent2,</div><div class='del'>-                  struct iatt *postparent2, dict_t *xdata)</div><div class='add'>+ec_dir_write_cbk(call_frame_t *frame, xlator_t *this, void *cookie, int op_ret,</div><div class='add'>+                 int op_errno, struct iatt *poststat, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, struct iatt *preparent2,</div><div class='add'>+                 struct iatt *postparent2, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = NULL;</div><div class='del'>-        ec_cbk_data_t *cbk = NULL;</div><div class='del'>-        int           i    = 0;</div><div class='del'>-        int           idx  = 0;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int idx = 0;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        fop = frame-&gt;local;</div><div class='del'>-        idx = (long) cookie;</div><div class='add'>+    fop = frame-&gt;local;</div><div class='add'>+    idx = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-                 frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-        cbk = ec_cbk_data_allocate (frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='del'>-                                    op_errno);</div><div class='del'>-        if (!cbk)</div><div class='del'>-                goto out;</div><div class='add'>+    cbk = ec_cbk_data_allocate(frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='add'>+                               op_errno);</div><div class='add'>+    if (!cbk)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                cbk-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (poststat)</div><div class='del'>-                cbk-&gt;iatt[i++] = *poststat;</div><div class='add'>+    if (poststat)</div><div class='add'>+        cbk-&gt;iatt[i++] = *poststat;</div><div class='ctx'> </div><div class='del'>-        if (preparent)</div><div class='del'>-                cbk-&gt;iatt[i++] = *preparent;</div><div class='add'>+    if (preparent)</div><div class='add'>+        cbk-&gt;iatt[i++] = *preparent;</div><div class='ctx'> </div><div class='del'>-        if (postparent)</div><div class='del'>-                cbk-&gt;iatt[i++] = *postparent;</div><div class='add'>+    if (postparent)</div><div class='add'>+        cbk-&gt;iatt[i++] = *postparent;</div><div class='ctx'> </div><div class='del'>-        if (preparent2)</div><div class='del'>-                cbk-&gt;iatt[i++] = *preparent2;</div><div class='add'>+    if (preparent2)</div><div class='add'>+        cbk-&gt;iatt[i++] = *preparent2;</div><div class='ctx'> </div><div class='del'>-        if (postparent2)</div><div class='del'>-                cbk-&gt;iatt[i++] = *postparent2;</div><div class='add'>+    if (postparent2)</div><div class='add'>+        cbk-&gt;iatt[i++] = *postparent2;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (cbk)</div><div class='del'>-                ec_combine (cbk, ec_combine_write);</div><div class='add'>+    if (cbk)</div><div class='add'>+        ec_combine(cbk, ec_combine_write);</div><div class='ctx'> </div><div class='del'>-        if (fop)</div><div class='del'>-                ec_complete (fop);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fop)</div><div class='add'>+        ec_complete(fop);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: create */</div><div class='ctx'> </div><div class='del'>-int32_t ec_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                      inode_t *inode, struct iatt *buf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='add'>+              struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                 buf, preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_create(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_create(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -99,7 +98,8 @@ void ec_wind_create(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_create(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_config_t config;</div><div class='ctx'>     ec_t *ec;</div><div class='hunk'>@@ -108,8 +108,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>     uint64_t version[2] = {0, 0};</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             LOCK(&amp;fop-&gt;fd-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -176,7 +175,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>              * need to remove O_APPEND from flags (if present) */</div><div class='ctx'>             fop-&gt;int32 &amp;= ~O_APPEND;</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], NULL,</div><div class='hunk'>@@ -218,12 +217,11 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.create != NULL)</div><div class='del'>-            {</div><div class='del'>-                fop-&gt;cbks.create (fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='del'>-                                  cbk-&gt;op_errno, fop-&gt;fd, fop-&gt;loc[0].inode,</div><div class='del'>-                                  &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1], &amp;cbk-&gt;iatt[2],</div><div class='del'>-                                  cbk-&gt;xdata);</div><div class='add'>+            if (fop-&gt;cbks.create != NULL) {</div><div class='add'>+                fop-&gt;cbks.create(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                 cbk-&gt;op_errno, fop-&gt;fd, fop-&gt;loc[0].inode,</div><div class='add'>+                                 &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1], &amp;cbk-&gt;iatt[2],</div><div class='add'>+                                 cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='hunk'>@@ -235,8 +233,7 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.create != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.create != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.create(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                  NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -256,24 +253,23 @@ int32_t ec_manager_create(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_create_cbk_t func, void * data,</div><div class='del'>-               loc_t * loc, int32_t flags, mode_t mode, mode_t umask,</div><div class='del'>-               fd_t * fd, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_create(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_create_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+          int32_t flags, mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .create = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.create = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(CREATE) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(CREATE) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -292,8 +288,8 @@ void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -301,19 +297,19 @@ void ec_create(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -331,16 +327,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: link */</div><div class='ctx'> </div><div class='del'>-int32_t ec_link_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t * inode,</div><div class='del'>-                    struct iatt * buf, struct iatt * preparent,</div><div class='del'>-                    struct iatt * postparent, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+            struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                 buf, preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_link(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_link(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -349,17 +346,17 @@ void ec_wind_link(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], &amp;fop-&gt;loc[1], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_link(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='del'>-            ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[1], &amp;fop-&gt;loc[0],</div><div class='del'>-                                         EC_UPDATE_DATA | EC_UPDATE_META |</div><div class='del'>-                                         EC_INODE_SIZE);</div><div class='add'>+            ec_lock_prepare_parent_inode(</div><div class='add'>+                fop, &amp;fop-&gt;loc[1], &amp;fop-&gt;loc[0],</div><div class='add'>+                EC_UPDATE_DATA | EC_UPDATE_META | EC_INODE_SIZE);</div><div class='ctx'>             ec_lock(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_DISPATCH;</div><div class='hunk'>@@ -392,8 +389,7 @@ int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.link != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.link != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.link(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                cbk-&gt;op_errno, fop-&gt;loc[0].inode, &amp;cbk-&gt;iatt[0],</div><div class='ctx'>                                &amp;cbk-&gt;iatt[1], &amp;cbk-&gt;iatt[2], cbk-&gt;xdata);</div><div class='hunk'>@@ -408,8 +404,7 @@ int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.link != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.link != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.link(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -429,23 +424,23 @@ int32_t ec_manager_link(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_link(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-             int32_t minimum, fop_link_cbk_t func, void * data, loc_t * oldloc,</div><div class='del'>-             loc_t * newloc, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_link(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+        fop_link_cbk_t func, void *data, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .link = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.link = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(LINK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(LINK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -459,26 +454,26 @@ void ec_link(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (oldloc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], oldloc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (newloc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[1], newloc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -496,16 +491,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: mkdir */</div><div class='ctx'> </div><div class='del'>-int32_t ec_mkdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, inode_t * inode,</div><div class='del'>-                     struct iatt * buf, struct iatt * preparent,</div><div class='del'>-                     struct iatt * postparent, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                 buf, preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_mkdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_mkdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -514,14 +510,14 @@ void ec_wind_mkdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;mode[0], fop-&gt;mode[1], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_mkdir(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'>     uint64_t version[2] = {0, 0};</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             if (fop-&gt;xdata == NULL) {</div><div class='ctx'>                 fop-&gt;xdata = dict_new();</div><div class='hunk'>@@ -539,7 +535,7 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 return EC_STATE_REPORT;</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], NULL,</div><div class='hunk'>@@ -572,8 +568,7 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.mkdir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.mkdir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.mkdir(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                 cbk-&gt;op_errno, fop-&gt;loc[0].inode, &amp;cbk-&gt;iatt[0],</div><div class='ctx'>                                 &amp;cbk-&gt;iatt[1], &amp;cbk-&gt;iatt[2], cbk-&gt;xdata);</div><div class='hunk'>@@ -589,8 +584,7 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             cbk = fop-&gt;answer;</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.mkdir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.mkdir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.mkdir(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                 NULL, NULL, NULL, NULL,</div><div class='ctx'>                                 ((cbk) ? cbk-&gt;xdata : NULL));</div><div class='hunk'>@@ -611,31 +605,30 @@ int32_t ec_manager_mkdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_mkdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_mkdir_cbk_t func, void * data, loc_t * loc,</div><div class='del'>-              mode_t mode, mode_t umask, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_mkdir(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_mkdir_cbk_t func, void *data, loc_t *loc, mode_t mode,</div><div class='add'>+         mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .mkdir = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.mkdir = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(MKDIR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(MKDIR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_MKDIR, 0, target, minimum,</div><div class='del'>-                               ec_wind_mkdir, ec_manager_mkdir, callback,</div><div class='del'>-                               data);</div><div class='add'>+                               ec_wind_mkdir, ec_manager_mkdir, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -645,18 +638,18 @@ void ec_mkdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -674,16 +667,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: mknod */</div><div class='ctx'> </div><div class='del'>-int32_t ec_mknod_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, inode_t * inode,</div><div class='del'>-                     struct iatt * buf, struct iatt * preparent,</div><div class='del'>-                     struct iatt * postparent, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                 buf, preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_mknod(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_mknod(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -693,15 +687,15 @@ void ec_wind_mknod(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_mknod(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_config_t config;</div><div class='ctx'>     ec_t *ec;</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'>     uint64_t version[2] = {0, 0};</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             if (S_ISREG(fop-&gt;mode[0])) {</div><div class='ctx'>                 int32_t err;</div><div class='hunk'>@@ -745,7 +739,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], NULL,</div><div class='hunk'>@@ -778,8 +772,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.mknod != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.mknod != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.mknod(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                 cbk-&gt;op_errno, fop-&gt;loc[0].inode, &amp;cbk-&gt;iatt[0],</div><div class='ctx'>                                 &amp;cbk-&gt;iatt[1], &amp;cbk-&gt;iatt[2], cbk-&gt;xdata);</div><div class='hunk'>@@ -794,8 +787,7 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.mknod != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.mknod != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.mknod(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                 NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -815,31 +807,30 @@ int32_t ec_manager_mknod(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_mknod(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_mknod_cbk_t func, void * data, loc_t * loc,</div><div class='del'>-              mode_t mode, dev_t rdev, mode_t umask, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_mknod(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_mknod_cbk_t func, void *data, loc_t *loc, mode_t mode, dev_t rdev,</div><div class='add'>+         mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .mknod = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.mknod = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(MKNOD) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(MKNOD) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_MKNOD, 0, target, minimum,</div><div class='del'>-                               ec_wind_mknod, ec_manager_mknod, callback,</div><div class='del'>-                               data);</div><div class='add'>+                               ec_wind_mknod, ec_manager_mknod, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -850,18 +841,18 @@ void ec_mknod(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -879,18 +870,19 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: rename */</div><div class='ctx'> </div><div class='del'>-int32_t ec_rename_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt * buf,</div><div class='del'>-                      struct iatt * preoldparent, struct iatt * postoldparent,</div><div class='del'>-                      struct iatt * prenewparent, struct iatt * postnewparent,</div><div class='del'>-                      dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *buf, struct iatt *preoldparent,</div><div class='add'>+              struct iatt *postoldparent, struct iatt *prenewparent,</div><div class='add'>+              struct iatt *postnewparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                 buf, preoldparent, postoldparent, prenewparent,</div><div class='del'>-                                 postnewparent, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf,</div><div class='add'>+                            preoldparent, postoldparent, prenewparent,</div><div class='add'>+                            postnewparent, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_rename(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_rename(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -899,17 +891,17 @@ void ec_wind_rename(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], &amp;fop-&gt;loc[1], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_rename(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='del'>-            ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], &amp;fop-&gt;loc[0],</div><div class='del'>-                                         EC_UPDATE_DATA | EC_UPDATE_META |</div><div class='del'>-                                         EC_INODE_SIZE);</div><div class='add'>+            ec_lock_prepare_parent_inode(</div><div class='add'>+                fop, &amp;fop-&gt;loc[0], &amp;fop-&gt;loc[0],</div><div class='add'>+                EC_UPDATE_DATA | EC_UPDATE_META | EC_INODE_SIZE);</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[1], NULL,</div><div class='ctx'>                                          EC_UPDATE_DATA | EC_UPDATE_META);</div><div class='ctx'>             ec_lock(fop);</div><div class='hunk'>@@ -938,8 +930,7 @@ int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.rename != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.rename != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.rename(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                  cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                  &amp;cbk-&gt;iatt[2], &amp;cbk-&gt;iatt[3], &amp;cbk-&gt;iatt[4],</div><div class='hunk'>@@ -955,8 +946,7 @@ int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.rename != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.rename != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.rename(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                  NULL, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -976,23 +966,23 @@ int32_t ec_manager_rename(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_rename(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_rename_cbk_t func, void * data,</div><div class='del'>-               loc_t * oldloc, loc_t * newloc, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_rename(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_rename_cbk_t func, void *data, loc_t *oldloc,</div><div class='add'>+          loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .rename = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.rename = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(RENAME) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(RENAME) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1007,26 +997,26 @@ void ec_rename(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (oldloc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], oldloc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (newloc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[1], newloc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1044,15 +1034,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: rmdir */</div><div class='ctx'> </div><div class='del'>-int32_t ec_rmdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt * preparent,</div><div class='del'>-                     struct iatt * postparent, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, NULL,</div><div class='del'>-                                 preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, NULL,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_rmdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_rmdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1061,12 +1053,12 @@ void ec_wind_rmdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;int32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_rmdir(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], NULL,</div><div class='hunk'>@@ -1090,8 +1082,7 @@ int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.rmdir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.rmdir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.rmdir(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                 cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                 cbk-&gt;xdata);</div><div class='hunk'>@@ -1106,8 +1097,7 @@ int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.rmdir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.rmdir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.rmdir(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                 NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1127,31 +1117,30 @@ int32_t ec_manager_rmdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_rmdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_rmdir_cbk_t func, void * data, loc_t * loc,</div><div class='del'>-              int xflags, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_rmdir(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_rmdir_cbk_t func, void *data, loc_t *loc, int xflags,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .rmdir = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.rmdir = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(RMDIR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(RMDIR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_RMDIR, 0, target, minimum,</div><div class='del'>-                               ec_wind_rmdir, ec_manager_rmdir, callback,</div><div class='del'>-                               data);</div><div class='add'>+                               ec_wind_rmdir, ec_manager_rmdir, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1160,18 +1149,18 @@ void ec_rmdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1189,16 +1178,18 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: symlink */</div><div class='ctx'> </div><div class='del'>-int32_t ec_symlink_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, inode_t * inode,</div><div class='del'>-                       struct iatt * buf, struct iatt * preparent,</div><div class='del'>-                       struct iatt * postparent, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+               struct iatt *buf, struct iatt *preparent,</div><div class='add'>+               struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                 buf, preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, buf,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_symlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_symlink(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1207,12 +1198,12 @@ void ec_wind_symlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;str[0], &amp;fop-&gt;loc[0], fop-&gt;mode[0], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_symlink(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], NULL,</div><div class='hunk'>@@ -1245,8 +1236,7 @@ int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.symlink != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.symlink != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.symlink(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                   cbk-&gt;op_errno, fop-&gt;loc[0].inode,</div><div class='ctx'>                                   &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1], &amp;cbk-&gt;iatt[2],</div><div class='hunk'>@@ -1262,8 +1252,7 @@ int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.symlink != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.symlink != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.symlink(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                   NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1283,24 +1272,23 @@ int32_t ec_manager_symlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_symlink_cbk_t func, void * data,</div><div class='del'>-                const char * linkname, loc_t * loc, mode_t umask,</div><div class='del'>-                dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_symlink(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_symlink_cbk_t func, void *data,</div><div class='add'>+           const char *linkname, loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .symlink = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.symlink = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(SYMLINK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(SYMLINK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1318,16 +1306,16 @@ void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (linkname != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(linkname);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY, "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1335,9 +1323,9 @@ void ec_symlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1355,16 +1343,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: unlink */</div><div class='ctx'> </div><div class='del'>-int32_t ec_unlink_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      struct iatt * preparent, struct iatt * postparent,</div><div class='del'>-                      dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_dir_write_cbk (frame, this, cookie, op_ret, op_errno, NULL,</div><div class='del'>-                                 preparent, postparent, NULL, NULL, xdata);</div><div class='add'>+    return ec_dir_write_cbk(frame, this, cookie, op_ret, op_errno, NULL,</div><div class='add'>+                            preparent, postparent, NULL, NULL, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_unlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_unlink(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1373,12 +1362,12 @@ void ec_wind_unlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;int32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_unlink(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_parent_inode(fop, &amp;fop-&gt;loc[0], NULL,</div><div class='hunk'>@@ -1402,8 +1391,7 @@ int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.unlink != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.unlink != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.unlink(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                  cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                  cbk-&gt;xdata);</div><div class='hunk'>@@ -1418,8 +1406,7 @@ int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.unlink != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.unlink != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.unlink(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                  NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1439,23 +1426,23 @@ int32_t ec_manager_unlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_unlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_unlink_cbk_t func, void * data,</div><div class='del'>-               loc_t * loc, int xflags, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_unlink(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_unlink_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+          int xflags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .unlink = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.unlink = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(UNLINK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(UNLINK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1472,18 +1459,18 @@ void ec_unlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-generic.c b/xlators/cluster/ec/src/ec-generic.c<br/>index a5f986e74f4..d12481bdc18 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-generic.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-generic.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-generic.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-generic.c</a></div><div class='hunk'>@@ -22,11 +22,12 @@</div><div class='ctx'> </div><div class='ctx'> /* FOP: flush */</div><div class='ctx'> </div><div class='del'>-int32_t ec_flush_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -36,21 +37,18 @@ int32_t ec_flush_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FLUSH, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -60,15 +58,15 @@ int32_t ec_flush_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_flush(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_flush(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -77,12 +75,12 @@ void ec_wind_flush(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_flush(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_fd(fop, fop-&gt;fd, 0, 0, LLONG_MAX);</div><div class='hunk'>@@ -110,8 +108,7 @@ int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.flush != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.flush != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.flush(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                 cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -126,8 +123,7 @@ int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.flush != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.flush != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.flush(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                 NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -147,31 +143,29 @@ int32_t ec_manager_flush(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_flush_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-              dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_flush(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_flush_cbk_t func, void *data, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .flush = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.flush = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FLUSH) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FLUSH) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_FLUSH, 0, target, minimum,</div><div class='del'>-                               ec_wind_flush, ec_manager_flush, callback,</div><div class='del'>-                               data);</div><div class='add'>+                               ec_wind_flush, ec_manager_flush, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -181,9 +175,9 @@ void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -191,9 +185,9 @@ void ec_flush(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -211,13 +205,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: fsync */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_fsync(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                         ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_fsync(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='ctx'>     if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, 2)) {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_IATT_MISMATCH, "Mismatching iatt in "</div><div class='del'>-                                             "answers of 'GF_FOP_FSYNC'");</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH,</div><div class='add'>+               "Mismatching iatt in "</div><div class='add'>+               "answers of 'GF_FOP_FSYNC'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -225,12 +219,13 @@ int32_t ec_combine_fsync(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_fsync_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt * prebuf,</div><div class='del'>-                     struct iatt * postbuf, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -240,32 +235,26 @@ int32_t ec_fsync_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSYNC, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (prebuf != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (prebuf != NULL) {</div><div class='ctx'>                 cbk-&gt;iatt[0] = *prebuf;</div><div class='ctx'>             }</div><div class='del'>-            if (postbuf != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (postbuf != NULL) {</div><div class='ctx'>                 cbk-&gt;iatt[1] = *postbuf;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -275,15 +264,15 @@ int32_t ec_fsync_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fsync(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fsync(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -292,12 +281,12 @@ void ec_wind_fsync(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;int32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_fsync(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, 0, LLONG_MAX);</div><div class='hunk'>@@ -318,8 +307,7 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case EC_STATE_PREPARE_ANSWER:</div><div class='ctx'>             cbk = ec_fop_prepare_answer(fop, _gf_false);</div><div class='ctx'>             if (cbk != NULL) {</div><div class='del'>-                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2,</div><div class='del'>-                                cbk-&gt;count);</div><div class='add'>+                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                 /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                 GF_ASSERT(ec_get_inode_size(fop, fop-&gt;fd-&gt;inode,</div><div class='hunk'>@@ -334,8 +322,7 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.fsync != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.fsync != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.fsync(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                 cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                 cbk-&gt;xdata);</div><div class='hunk'>@@ -351,8 +338,7 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_DELAYED_START:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.fsync != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.fsync != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.fsync(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                 NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -372,31 +358,30 @@ int32_t ec_manager_fsync(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_fsync_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-              int32_t datasync, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_fsync(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_fsync_cbk_t func, void *data, fd_t *fd, int32_t datasync,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fsync = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fsync = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FSYNC) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FSYNC) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_FSYNC, 0, target, minimum,</div><div class='del'>-                               ec_wind_fsync, ec_manager_fsync, callback,</div><div class='del'>-                               data);</div><div class='add'>+                               ec_wind_fsync, ec_manager_fsync, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -408,9 +393,9 @@ void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -418,9 +403,9 @@ void ec_fsync(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -438,11 +423,12 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: fsyncdir */</div><div class='ctx'> </div><div class='del'>-int32_t ec_fsyncdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -452,21 +438,18 @@ int32_t ec_fsyncdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSYNCDIR, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -476,15 +459,15 @@ int32_t ec_fsyncdir_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fsyncdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fsyncdir(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -493,12 +476,12 @@ void ec_wind_fsyncdir(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;int32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_fsyncdir(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_fd(fop, fop-&gt;fd, 0, 0, LLONG_MAX);</div><div class='hunk'>@@ -526,8 +509,7 @@ int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.fsyncdir != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.fsyncdir != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.fsyncdir(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                    cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -542,10 +524,9 @@ int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_DELAYED_START:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.fsyncdir != NULL)</div><div class='del'>-            {</div><div class='del'>-                fop-&gt;cbks.fsyncdir(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                                   fop-&gt;error, NULL);</div><div class='add'>+            if (fop-&gt;cbks.fsyncdir != NULL) {</div><div class='add'>+                fop-&gt;cbks.fsyncdir(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='add'>+                                   NULL);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='hunk'>@@ -563,31 +544,31 @@ int32_t ec_manager_fsyncdir(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_fsyncdir_cbk_t func, void * data,</div><div class='del'>-                 fd_t * fd, int32_t datasync, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_fsyncdir(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_fsyncdir_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+            int32_t datasync, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fsyncdir = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fsyncdir = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FSYNCDIR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FSYNCDIR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_FSYNCDIR, 0, target,</div><div class='del'>-                               minimum, ec_wind_fsyncdir, ec_manager_fsyncdir,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_FSYNCDIR, 0, target, minimum,</div><div class='add'>+                               ec_wind_fsyncdir, ec_manager_fsyncdir, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -599,9 +580,9 @@ void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -609,9 +590,9 @@ void ec_fsyncdir(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -629,9 +610,10 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: lookup */</div><div class='ctx'> </div><div class='del'>-void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk)</div><div class='add'>+void</div><div class='add'>+ec_lookup_rebuild(ec_t *ec, ec_fop_data_t *fop, ec_cbk_data_t *cbk)</div><div class='ctx'> {</div><div class='del'>-    ec_inode_t * ctx = NULL;</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='ctx'>     uint64_t size = 0;</div><div class='ctx'>     int32_t have_size = 0, err;</div><div class='ctx'> </div><div class='hunk'>@@ -650,8 +632,7 @@ void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk)</div><div class='ctx'>     LOCK(&amp;cbk-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>     ctx = __ec_inode_get(cbk-&gt;inode, fop-&gt;xl);</div><div class='del'>-    if (ctx != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (ctx != NULL) {</div><div class='ctx'>         if (ctx-&gt;have_version) {</div><div class='ctx'>             cbk-&gt;version[0] = ctx-&gt;post_version[0];</div><div class='ctx'>             cbk-&gt;version[1] = ctx-&gt;post_version[1];</div><div class='hunk'>@@ -664,24 +645,22 @@ void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk)</div><div class='ctx'> </div><div class='ctx'>     UNLOCK(&amp;cbk-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-    if (cbk-&gt;iatt[0].ia_type == IA_IFREG)</div><div class='del'>-    {</div><div class='add'>+    if (cbk-&gt;iatt[0].ia_type == IA_IFREG) {</div><div class='ctx'>         cbk-&gt;size = cbk-&gt;iatt[0].ia_size;</div><div class='ctx'>         ec_dict_del_number(cbk-&gt;xdata, EC_XATTR_SIZE, &amp;cbk-&gt;iatt[0].ia_size);</div><div class='del'>-        if (have_size)</div><div class='del'>-        {</div><div class='add'>+        if (have_size) {</div><div class='ctx'>             cbk-&gt;iatt[0].ia_size = size;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_lookup(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                          ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_lookup(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='ctx'>     if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, 2)) {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_IATT_MISMATCH, "Mismatching iatt in "</div><div class='del'>-                                             "answers of 'GF_FOP_LOOKUP'");</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH,</div><div class='add'>+               "Mismatching iatt in "</div><div class='add'>+               "answers of 'GF_FOP_LOOKUP'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -689,15 +668,15 @@ int32_t ec_combine_lookup(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_lookup_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, inode_t * inode,</div><div class='del'>-                      struct iatt * buf, dict_t * xdata,</div><div class='del'>-                      struct iatt * postparent)</div><div class='add'>+int32_t</div><div class='add'>+ec_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+              struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='del'>-    uint64_t       dirty[2] = {0};</div><div class='add'>+    uint64_t dirty[2] = {0};</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -706,63 +685,54 @@ int32_t ec_lookup_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_LOOKUP, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (inode != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (inode != NULL) {</div><div class='ctx'>                 cbk-&gt;inode = inode_ref(inode);</div><div class='del'>-                if (cbk-&gt;inode == NULL)</div><div class='del'>-                {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                            EC_MSG_INODE_REF_FAIL,</div><div class='del'>-                            "Failed to reference an inode.");</div><div class='add'>+                if (cbk-&gt;inode == NULL) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_INODE_REF_FAIL,</div><div class='add'>+                           "Failed to reference an inode.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='del'>-            if (buf != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (buf != NULL) {</div><div class='ctx'>                 cbk-&gt;iatt[0] = *buf;</div><div class='ctx'>             }</div><div class='del'>-            if (postparent != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (postparent != NULL) {</div><div class='ctx'>                 cbk-&gt;iatt[1] = *postparent;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='del'>-            ec_dict_del_array (xdata, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE);</div><div class='add'>+            ec_dict_del_array(xdata, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         ec_combine(cbk, ec_combine_lookup);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_lookup(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_lookup(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -771,20 +741,21 @@ void ec_wind_lookup(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_lookup(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_cbk_data_t *cbk;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             if (fop-&gt;xdata == NULL) {</div><div class='ctx'>                 fop-&gt;xdata = dict_new();</div><div class='ctx'>                 if (fop-&gt;xdata == NULL) {</div><div class='del'>-                    gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                            EC_MSG_LOOKUP_REQ_PREP_FAIL, "Unable to prepare "</div><div class='del'>-                            "lookup request");</div><div class='add'>+                    gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='add'>+                           EC_MSG_LOOKUP_REQ_PREP_FAIL,</div><div class='add'>+                           "Unable to prepare "</div><div class='add'>+                           "lookup request");</div><div class='ctx'> </div><div class='ctx'>                     fop-&gt;error = ENOMEM;</div><div class='ctx'> </div><div class='hunk'>@@ -792,7 +763,7 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 }</div><div class='ctx'>             } else {</div><div class='ctx'>                 /*TODO: To be handled once we have 'syndromes' */</div><div class='del'>-                dict_del (fop-&gt;xdata, GF_CONTENT_KEY);</div><div class='add'>+                dict_del(fop-&gt;xdata, GF_CONTENT_KEY);</div><div class='ctx'>             }</div><div class='ctx'>             err = dict_set_uint64(fop-&gt;xdata, EC_XATTR_SIZE, 0);</div><div class='ctx'>             if (err == 0) {</div><div class='hunk'>@@ -802,16 +773,17 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 err = dict_set_uint64(fop-&gt;xdata, EC_XATTR_DIRTY, 0);</div><div class='ctx'>             }</div><div class='ctx'>             if (err != 0) {</div><div class='del'>-                gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err,</div><div class='del'>-                        EC_MSG_LOOKUP_REQ_PREP_FAIL, "Unable to prepare lookup "</div><div class='del'>-                                                    "request");</div><div class='add'>+                gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, -err,</div><div class='add'>+                       EC_MSG_LOOKUP_REQ_PREP_FAIL,</div><div class='add'>+                       "Unable to prepare lookup "</div><div class='add'>+                       "request");</div><div class='ctx'> </div><div class='ctx'>                 fop-&gt;error = -err;</div><div class='ctx'> </div><div class='ctx'>                 return EC_STATE_REPORT;</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -827,8 +799,8 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>              */</div><div class='ctx'> </div><div class='ctx'>             if (!fop-&gt;answer &amp;&amp; !list_empty(&amp;fop-&gt;cbk_list)) {</div><div class='del'>-                fop-&gt;answer = list_entry (fop-&gt;cbk_list.next, ec_cbk_data_t,</div><div class='del'>-                                          list);</div><div class='add'>+                fop-&gt;answer = list_entry(fop-&gt;cbk_list.next, ec_cbk_data_t,</div><div class='add'>+                                         list);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             cbk = ec_fop_prepare_answer(fop, _gf_true);</div><div class='hunk'>@@ -845,8 +817,7 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.lookup != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.lookup != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.lookup(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                  cbk-&gt;op_errno, cbk-&gt;inode, &amp;cbk-&gt;iatt[0],</div><div class='ctx'>                                  cbk-&gt;xdata, &amp;cbk-&gt;iatt[1]);</div><div class='hunk'>@@ -860,8 +831,7 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.lookup != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.lookup != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.lookup(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                  NULL, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -869,23 +839,23 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lookup(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_lookup_cbk_t func, void * data,</div><div class='del'>-               loc_t * loc, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_lookup(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_lookup_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .lookup = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.lookup = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(LOOKUP) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(LOOKUP) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -900,14 +870,14 @@ void ec_lookup(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         /* Do not log failures here as a memory problem would have already</div><div class='ctx'>          * been logged by the corresponding alloc functions */</div><div class='ctx'>         if (fop-&gt;xdata == NULL)</div><div class='hunk'>@@ -926,20 +896,20 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: statfs */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_statfs(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                          ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_statfs(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='ctx'>     ec_statvfs_combine(&amp;dst-&gt;statvfs, &amp;src-&gt;statvfs);</div><div class='ctx'> </div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_statfs_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct statvfs * buf,</div><div class='del'>-                      dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -949,28 +919,23 @@ int32_t ec_statfs_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_STATFS, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (buf != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (buf != NULL) {</div><div class='ctx'>                 cbk-&gt;statvfs = *buf;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -980,15 +945,15 @@ int32_t ec_statfs_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_statfs(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_statfs(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -997,14 +962,14 @@ void ec_wind_statfs(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_statfs(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t   *cbk                   = NULL;</div><div class='del'>-    gf_boolean_t     deem_statfs_enabled   = _gf_false;</div><div class='del'>-    int32_t          err                   = 0;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    gf_boolean_t deem_statfs_enabled = _gf_false;</div><div class='add'>+    int32_t err = 0;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -1017,8 +982,8 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>                 ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='ctx'>                 if (cbk-&gt;xdata) {</div><div class='del'>-                    err = dict_get_int8 (cbk-&gt;xdata, "quota-deem-statfs",</div><div class='del'>-                                          (int8_t *)&amp;deem_statfs_enabled);</div><div class='add'>+                    err = dict_get_int8(cbk-&gt;xdata, "quota-deem-statfs",</div><div class='add'>+                                        (int8_t *)&amp;deem_statfs_enabled);</div><div class='ctx'>                     if (err != -ENOENT) {</div><div class='ctx'>                         ec_cbk_set_error(cbk, -err, _gf_true);</div><div class='ctx'>                     }</div><div class='hunk'>@@ -1038,8 +1003,7 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.statfs != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.statfs != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.statfs(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                  cbk-&gt;op_errno, &amp;cbk-&gt;statvfs, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1052,8 +1016,7 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.statfs != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.statfs != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.statfs(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                  NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1061,23 +1024,23 @@ int32_t ec_manager_statfs(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_statfs_cbk_t func, void * data,</div><div class='del'>-               loc_t * loc, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_statfs(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_statfs_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .statfs = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.statfs = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(STATFS) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(STATFS) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1092,8 +1055,8 @@ void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1101,9 +1064,9 @@ void ec_statfs(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1121,14 +1084,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: xattrop */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_xattrop(ec_fop_data_t *fop, ec_cbk_data_t *dst,</div><div class='del'>-                           ec_cbk_data_t *src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_xattrop(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-    if (!ec_dict_compare(dst-&gt;dict, src-&gt;dict))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                EC_MSG_DICT_MISMATCH, "Mismatching dictionary in "</div><div class='del'>-                                             "answers of 'GF_FOP_XATTROP'");</div><div class='add'>+    if (!ec_dict_compare(dst-&gt;dict, src-&gt;dict)) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_DEBUG, 0, EC_MSG_DICT_MISMATCH,</div><div class='add'>+               "Mismatching dictionary in "</div><div class='add'>+               "answers of 'GF_FOP_XATTROP'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1137,72 +1099,71 @@ int32_t ec_combine_xattrop(ec_fop_data_t *fop, ec_cbk_data_t *dst,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+ec_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = NULL;</div><div class='del'>-        ec_lock_link_t *link = NULL;</div><div class='del'>-        ec_cbk_data_t *cbk = NULL;</div><div class='del'>-        uint64_t       dirty[2] = {0};</div><div class='del'>-        data_t *data;</div><div class='del'>-        uint64_t *version;</div><div class='del'>-        int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        fop = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        ec_trace ("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-                  frame, op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-        cbk = ec_cbk_data_allocate (frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='del'>-                                    op_errno);</div><div class='del'>-        if (!cbk)</div><div class='del'>-                goto out;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_lock_link_t *link = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    uint64_t dirty[2] = {0};</div><div class='add'>+    data_t *data;</div><div class='add'>+    uint64_t *version;</div><div class='add'>+    int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0) {</div><div class='del'>-                cbk-&gt;dict = dict_ref (xattr);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-                data = dict_get(cbk-&gt;dict, EC_XATTR_VERSION);</div><div class='del'>-                if ((data != NULL) &amp;&amp; (data-&gt;len &gt;= sizeof(uint64_t))) {</div><div class='del'>-                    version = (uint64_t *)data-&gt;data;</div><div class='add'>+    fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                    if (((ntoh64(version[0]) &gt;&gt; EC_SELFHEAL_BIT) &amp; 1) != 0) {</div><div class='del'>-                            LOCK(&amp;fop-&gt;lock);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-                            fop-&gt;healing |= 1ULL &lt;&lt; idx;</div><div class='add'>+    cbk = ec_cbk_data_allocate(frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='add'>+                               op_errno);</div><div class='add'>+    if (!cbk)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                            UNLOCK(&amp;fop-&gt;lock);</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='add'>+        cbk-&gt;dict = dict_ref(xattr);</div><div class='ctx'> </div><div class='del'>-                ec_dict_del_array (xattr, EC_XATTR_DIRTY, dirty,</div><div class='del'>-                                   EC_VERSION_SIZE);</div><div class='del'>-                link = fop-&gt;data;</div><div class='del'>-                if (link) {</div><div class='del'>-                        /*Keep a note of if the dirty is already set or not*/</div><div class='del'>-                        link-&gt;dirty[0] |= (dirty[0] != 0);</div><div class='del'>-                        link-&gt;dirty[1] |= (dirty[1] != 0);</div><div class='del'>-                }</div><div class='add'>+        data = dict_get(cbk-&gt;dict, EC_XATTR_VERSION);</div><div class='add'>+        if ((data != NULL) &amp;&amp; (data-&gt;len &gt;= sizeof(uint64_t))) {</div><div class='add'>+            version = (uint64_t *)data-&gt;data;</div><div class='add'>+</div><div class='add'>+            if (((ntoh64(version[0]) &gt;&gt; EC_SELFHEAL_BIT) &amp; 1) != 0) {</div><div class='add'>+                LOCK(&amp;fop-&gt;lock);</div><div class='add'>+</div><div class='add'>+                fop-&gt;healing |= 1ULL &lt;&lt; idx;</div><div class='add'>+</div><div class='add'>+                UNLOCK(&amp;fop-&gt;lock);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ec_dict_del_array(xattr, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE);</div><div class='add'>+        link = fop-&gt;data;</div><div class='add'>+        if (link) {</div><div class='add'>+            /*Keep a note of if the dirty is already set or not*/</div><div class='add'>+            link-&gt;dirty[0] |= (dirty[0] != 0);</div><div class='add'>+            link-&gt;dirty[1] |= (dirty[1] != 0);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                cbk-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        ec_combine (cbk, ec_combine_xattrop);</div><div class='add'>+    ec_combine(cbk, ec_combine_xattrop);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fop)</div><div class='del'>-            ec_complete(fop);</div><div class='add'>+    if (fop)</div><div class='add'>+        ec_complete(fop);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_xattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_xattrop(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1211,20 +1172,19 @@ void ec_wind_xattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;xattrop_flags, fop-&gt;dict, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_xattrop(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             if (fop-&gt;fd == NULL) {</div><div class='ctx'>                 ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0], EC_UPDATE_META, 0,</div><div class='ctx'>                                       LLONG_MAX);</div><div class='ctx'>             } else {</div><div class='del'>-                ec_lock_prepare_fd(fop, fop-&gt;fd, EC_UPDATE_META, 0,</div><div class='del'>-                                   LLONG_MAX);</div><div class='add'>+                ec_lock_prepare_fd(fop, fop-&gt;fd, EC_UPDATE_META, 0, LLONG_MAX);</div><div class='ctx'>             }</div><div class='ctx'>             ec_lock(fop);</div><div class='ctx'> </div><div class='hunk'>@@ -1251,19 +1211,13 @@ int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_XATTROP)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.xattrop != NULL)</div><div class='del'>-                {</div><div class='del'>-                    fop-&gt;cbks.xattrop(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='del'>-                                      cbk-&gt;op_ret, cbk-&gt;op_errno, cbk-&gt;dict,</div><div class='del'>-                                      cbk-&gt;xdata);</div><div class='add'>+            if (fop-&gt;id == GF_FOP_XATTROP) {</div><div class='add'>+                if (fop-&gt;cbks.xattrop != NULL) {</div><div class='add'>+                    fop-&gt;cbks.xattrop(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                      cbk-&gt;op_errno, cbk-&gt;dict, cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fxattrop != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fxattrop != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fxattrop(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='ctx'>                                        cbk-&gt;op_ret, cbk-&gt;op_errno, cbk-&gt;dict,</div><div class='ctx'>                                        cbk-&gt;xdata);</div><div class='hunk'>@@ -1279,18 +1233,13 @@ int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_XATTROP)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.xattrop != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_XATTROP) {</div><div class='add'>+                if (fop-&gt;cbks.xattrop != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.xattrop(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                       fop-&gt;error, NULL, NULL);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fxattrop != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fxattrop != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fxattrop(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                        fop-&gt;error, NULL, NULL);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -1311,24 +1260,23 @@ int32_t ec_manager_xattrop(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_xattrop_cbk_t func, void * data,</div><div class='del'>-                loc_t * loc, gf_xattrop_flags_t optype, dict_t * xattr,</div><div class='del'>-                dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_xattrop(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_xattrop_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+           gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .xattrop = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.xattrop = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(XATTROP) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(XATTROP) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1345,8 +1293,8 @@ void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1354,9 +1302,9 @@ void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xattr != NULL) {</div><div class='ctx'>         fop-&gt;dict = dict_ref(xattr);</div><div class='ctx'>         if (fop-&gt;dict == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1364,9 +1312,9 @@ void ec_xattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1382,7 +1330,8 @@ out:</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fxattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fxattrop(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1391,24 +1340,24 @@ void ec_wind_fxattrop(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;xattrop_flags, fop-&gt;dict, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_fxattrop_cbk_t func, void * data,</div><div class='del'>-                 fd_t * fd, gf_xattrop_flags_t optype, dict_t * xattr,</div><div class='del'>-                 dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_fxattrop(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_fxattrop_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+            gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fxattrop = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fxattrop = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FXATTROP) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FXATTROP) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_FXATTROP, 0, target,</div><div class='del'>-                               minimum, ec_wind_fxattrop, ec_manager_xattrop,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_FXATTROP, 0, target, minimum,</div><div class='add'>+                               ec_wind_fxattrop, ec_manager_xattrop, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1420,9 +1369,9 @@ void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1430,9 +1379,9 @@ void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xattr != NULL) {</div><div class='ctx'>         fop-&gt;dict = dict_ref(xattr);</div><div class='ctx'>         if (fop-&gt;dict == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1440,9 +1389,9 @@ void ec_fxattrop(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1460,11 +1409,12 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: IPC */</div><div class='ctx'> </div><div class='del'>-int32_t ec_ipc_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+           int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -1474,16 +1424,14 @@ int32_t ec_ipc_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_IPC, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='ctx'> </div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='hunk'>@@ -1491,29 +1439,29 @@ int32_t ec_ipc_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_ipc(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_ipc(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='ctx'>     STACK_WIND_COOKIE(fop-&gt;frame, ec_ipc_cbk, (void *)(uintptr_t)idx,</div><div class='del'>-                      ec-&gt;xl_list[idx], ec-&gt;xl_list[idx]-&gt;fops-&gt;ipc,</div><div class='del'>-                      fop-&gt;int32, fop-&gt;xdata);</div><div class='add'>+                      ec-&gt;xl_list[idx], ec-&gt;xl_list[idx]-&gt;fops-&gt;ipc, fop-&gt;int32,</div><div class='add'>+                      fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_ipc(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -1529,10 +1477,9 @@ int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>             cbk = fop-&gt;answer;</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='del'>-            if (fop-&gt;cbks.ipc != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.ipc != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.ipc(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='del'>-                               cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='add'>+                              cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='hunk'>@@ -1543,8 +1490,7 @@ int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.ipc != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.ipc != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.ipc(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                               NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1552,23 +1498,22 @@ int32_t ec_manager_ipc(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_ipc(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-            int32_t minimum, fop_ipc_cbk_t func, void *data, int32_t op,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_ipc(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+       fop_ipc_cbk_t func, void *data, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .ipc = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.ipc = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(IPC) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(IPC) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-gf8.c b/xlators/cluster/ec/src/ec-gf8.c<br/>index 2665632706b..039adae5929 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-gf8.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-gf8.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-gf8.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-gf8.c</a></div><div class='hunk'>@@ -10,5886 +10,5810 @@</div><div class='ctx'> </div><div class='ctx'> #include "ec-gf8.h"</div><div class='ctx'> </div><div class='del'>-static ec_gf_op_t ec_gf8_mul_00_ops[] = {</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_00 = {</div><div class='del'>-    0,</div><div class='del'>-    { 0, },</div><div class='del'>-    ec_gf8_mul_00_ops</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_op_t ec_gf8_mul_01_ops[] = {</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_01 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 3, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_01_ops</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_op_t ec_gf8_mul_02_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_02 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 1, 2, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_02_ops</div><div class='del'>-};</div><div class='add'>+static ec_gf_op_t ec_gf8_mul_00_ops[] = {{EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_00 = {0,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_00_ops};</div><div class='add'>+</div><div class='add'>+static ec_gf_op_t ec_gf8_mul_01_ops[] = {{EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_01 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_01_ops};</div><div class='add'>+</div><div class='add'>+static ec_gf_op_t ec_gf8_mul_02_ops[] = {{EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+                                         {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+                                         {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+                                         {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_02 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_02_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_03_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_03 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 1, 2, 3, 4, 5, 6, 7, 8, },</div><div class='del'>-    ec_gf8_mul_03_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_COPY, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_03 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_03_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_04_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_04 = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 7, 0, 1, 2, 3, 4, 5, 8, },</div><div class='del'>-    ec_gf8_mul_04_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 6, 7}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_04 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_04_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_05_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_05 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 6, 7, 3, 4, 5, },</div><div class='del'>-    ec_gf8_mul_05_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_05 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_05_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_06_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_06 = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 0, 1, 2, 8, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_06_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_COPY, 8, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_06 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_06_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_07_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_07 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 0, 1, 3, 2, 4, 5, 7, },</div><div class='del'>-    ec_gf8_mul_07_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_07 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_07_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_08_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_08 = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 6, 7, 0, 1, 2, 3, 4, 8, },</div><div class='del'>-    ec_gf8_mul_08_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR3, 8, 6, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_08 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_08_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_09_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_09 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 3, 5, 6, 7, 4, },</div><div class='del'>-    ec_gf8_mul_09_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_09 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_09_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_0A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_0A = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 0, 1, 2, 6, 7, 3, 4, },</div><div class='del'>-    ec_gf8_mul_0A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_0A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_0A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_0B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   3,  8,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  9,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_0B = {</div><div class='del'>-    10,</div><div class='del'>-    { 7, 1, 5, 2, 4, 3, 0, 6, 8, 9, },</div><div class='del'>-    ec_gf8_mul_0B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 9, 3, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_COPY, 8, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 3, 8, 6}, {EC_GF_OP_XOR2, 1, 9, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_0B = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_0B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_0C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_0C = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 7, 0, 1, 8, 2, 3, 4, 6, },</div><div class='del'>-    ec_gf8_mul_0C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_COPY, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_0C = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_0C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_0D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  2,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_0D = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 6, 7, 3, 1, 0, 2, 4, 8, },</div><div class='del'>-    ec_gf8_mul_0D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 2, 4}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 2, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_0D = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_0D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_0E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_0E = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 6, 1, 3, 2, 4, 5, },</div><div class='del'>-    ec_gf8_mul_0E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_0E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_0E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_0F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_0F = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 0, 5, 6, 7, 2, 3, 4, },</div><div class='del'>-    ec_gf8_mul_0F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_0F = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_0F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_10_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_10 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 6, 7, 0, 1, 2, 3, },</div><div class='del'>-    ec_gf8_mul_10_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_10 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_10_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_11_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_11 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 1, 2, 6, 0, 5, 7, 3, },</div><div class='del'>-    ec_gf8_mul_11_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_11 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_11_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_12_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_12 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 1, 2, 3, 5, 6, 4, },</div><div class='del'>-    ec_gf8_mul_12_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_12 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_12_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_13_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_13 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 2, 6, 0, 1, 7, 3, 8, },</div><div class='del'>-    ec_gf8_mul_13_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR3, 8, 3, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 0, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_13 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_13_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_14_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_14 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 0, 1, 2, 4, 5, 3, },</div><div class='del'>-    ec_gf8_mul_14_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_14 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_14_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_15_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   5,  8,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_15 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 1, 2, 4, 7, 6, 5, 3, 8, },</div><div class='del'>-    ec_gf8_mul_15_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR3, 5, 8, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_15 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_15_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_16_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_16 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 4, 1, 2, 3, 5, 0, },</div><div class='del'>-    ec_gf8_mul_16_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_16 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_16_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_17_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_17 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 7, 0, 1, 3, 2, 4, 6, },</div><div class='del'>-    ec_gf8_mul_17_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_17 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_17_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_18_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_18 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 7, 6, 0, 1, 2, 3, 8, },</div><div class='del'>-    ec_gf8_mul_18_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_18 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_18_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_19_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_19 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 5, 2, 6, 7, 1, 3, 4, },</div><div class='del'>-    ec_gf8_mul_19_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_19 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_19_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_1A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_1A = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 4, 5, 3, 1, 2, 6, },</div><div class='del'>-    ec_gf8_mul_1A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_1A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_1A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_1B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_1B = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 4, 5, 6, 3, 1, 2, 0, },</div><div class='del'>-    ec_gf8_mul_1B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_1B = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_1B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_1C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_1C = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 4, 3, 0, 1, 7, 2, 6, },</div><div class='del'>-    ec_gf8_mul_1C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_1C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_1C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_1D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  4,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_1D = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 7, 5, 8, 2, 3, 4, 1, 6, },</div><div class='del'>-    ec_gf8_mul_1D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR3, 8, 4, 2},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_1D = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_1D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_1E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_1E = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 7, 5, 1, 6, 0, 2, 3, },</div><div class='del'>-    ec_gf8_mul_1E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_1E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_1E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_1F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_1F = {</div><div class='del'>-    9,</div><div class='del'>-    { 1, 4, 5, 6, 7, 0, 3, 2, 8, },</div><div class='del'>-    ec_gf8_mul_1F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR3, 8, 3, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_1F = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_1F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_20_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_20 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 4, 5, 6, 3, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_20_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_20 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_20_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_21_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   9,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  7,  5 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  9,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_21 = {</div><div class='del'>-    10,</div><div class='del'>-    { 0, 1, 2, 7, 5, 4, 3, 6, 8, 9, },</div><div class='del'>-    ec_gf8_mul_21_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 9, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 7, 5}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 9, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_21 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_21_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_22_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_22 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 0, 5, 2, 6, 4, 1, 7, },</div><div class='del'>-    ec_gf8_mul_22_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_22 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_22_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_23_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_23 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 4, 3, 2, 5, 6, 1, 8, 7, },</div><div class='del'>-    ec_gf8_mul_23_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_23 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_23_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_24_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_24 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 0, 1, 2, 4, 5, 3, },</div><div class='del'>-    ec_gf8_mul_24_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_24 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_24_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_25_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_25 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 7, 0, 1, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_25_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_25 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_25_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_26_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_26 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 1, 2, 0, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_26_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_26 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_26_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_27_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_27 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 0, 1, 2, 6, 7, 4, 5, },</div><div class='del'>-    ec_gf8_mul_27_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_27 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_27_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_28_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_28 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 3, 0, 1, 2, 4, 7, },</div><div class='del'>-    ec_gf8_mul_28_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_28 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_28_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_29_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_29 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 6, 3, 5, 7, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_29_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_29 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_29_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_2A_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   6,  8,  4 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_2A = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 7, 2, 6, 5, 1, 0, 8, },</div><div class='del'>-    ec_gf8_mul_2A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 6, 8, 4}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_2A = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_2A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_2B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_2B = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 7, 5, 6, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_2B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_2B = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_2B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_2C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_2C = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 0, 2, 3, 4, 1, },</div><div class='del'>-    ec_gf8_mul_2C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_2C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_2C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_2D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  4,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_2D = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 0, 3, 5, 1, 4, 2, 6, 8, },</div><div class='del'>-    ec_gf8_mul_2D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR3, 8, 4, 6},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_2D = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_2D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_2E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_2E = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 0, 7, 3, 2, 6, 4, 1, 8, },</div><div class='del'>-    ec_gf8_mul_2E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 4, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_2E = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_2E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_2F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  7,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_2F = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 3, 2, 5, 7, 0, 1, 4, 8, },</div><div class='del'>-    ec_gf8_mul_2F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 7, 6}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_2F = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_2F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_30_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   6,  8,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_30 = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 7, 5, 0, 6, 1, 2, 8, },</div><div class='del'>-    ec_gf8_mul_30_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR3, 6, 8, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_30 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_30_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_31_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_31 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 1, 4, 5, 6, 0, 2, 3, },</div><div class='del'>-    ec_gf8_mul_31_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_31 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_31_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_32_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_32 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 6, 7, 5, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_32_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_32 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_32_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_33_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_33 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 4, 3, 0, 2, 1, 6, 7, },</div><div class='del'>-    ec_gf8_mul_33_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_33 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_33_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_34_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_34 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 5, 3, 0, 2, 4, 1, 6, },</div><div class='del'>-    ec_gf8_mul_34_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_34 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_34_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_35_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_35 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 5, 4, 2, 0, 1, 3, },</div><div class='del'>-    ec_gf8_mul_35_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_35 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_35_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_36_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_36 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 4, 1, 2, 3, 0, 5, },</div><div class='del'>-    ec_gf8_mul_36_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_36 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_36_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_37_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  0,  1 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_37 = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 7, 2, 1, 0, 3, 4, 5, 8, },</div><div class='del'>-    ec_gf8_mul_37_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR3, 8, 0, 1},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_37 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_37_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_38_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_38 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 6, 3, 0, 1, 7, 2, 8, },</div><div class='del'>-    ec_gf8_mul_38_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR3, 8, 6, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 4, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_38 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_38_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_39_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_39 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 6, 3, 0, 5, 2, 4, 7, },</div><div class='del'>-    ec_gf8_mul_39_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_39 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_39_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_3A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_3A = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 7, 0, 5, 6, 1, 2, },</div><div class='del'>-    ec_gf8_mul_3A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_3A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_3A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_3B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  7,  3 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_3B = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 0, 1, 7, 6, 2, 4, 8, 5, },</div><div class='del'>-    ec_gf8_mul_3B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 7, 3}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_3B = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_3B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_3C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_3C = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 6, 4, 1, 7, 2, 0, 5, },</div><div class='del'>-    ec_gf8_mul_3C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_3C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_3C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_3D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_3D = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 4, 5, 6, 7, 0, 1, },</div><div class='del'>-    ec_gf8_mul_3D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_3D = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_3D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_3E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_3E = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 1, 2, 7, 0, 3, 5, 4, },</div><div class='del'>-    ec_gf8_mul_3E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_3E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_3E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_3F_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,  10,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   4,  9,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3, 10,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_3F = {</div><div class='del'>-    11,</div><div class='del'>-    { 1, 7, 6, 2, 4, 3, 5, 0, 8, 9, 10, },</div><div class='del'>-    ec_gf8_mul_3F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0},  {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 10, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0},  {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0},  {EC_GF_OP_COPY, 9, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0},  {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0},  {EC_GF_OP_XOR3, 4, 9, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0},  {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0},  {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 10, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_3F = {11,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                        10,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_3F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_40_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  7,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_40 = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 7, 4, 6, 2, 3, 0, 1, 8, },</div><div class='del'>-    ec_gf8_mul_40_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR3, 8, 7, 6},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_40 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_40_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_41_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_41 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 7, 6, 5, 3, 4, 8, 1, 2, },</div><div class='del'>-    ec_gf8_mul_41_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 8, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_41 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_41_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_42_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_42 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 7, 1, 6, 4, 3, 0, 5, 8, },</div><div class='del'>-    ec_gf8_mul_42_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_42 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_42_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_43_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_43 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 6, 4, 1, 7, 3, 0, 5, },</div><div class='del'>-    ec_gf8_mul_43_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_43 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_43_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_44_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_44 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 4, 1, 6, 5, 0, 7, },</div><div class='del'>-    ec_gf8_mul_44_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_44 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_44_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_45_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_45 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 0, 1, 7, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_45_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_45 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_45_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_46_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  2,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_46 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 0, 1, 3, 4, 5, 6, 7, 8, },</div><div class='del'>-    ec_gf8_mul_46_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 2, 4}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_46 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_46_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_47_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  0,  1 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_47 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 3, 4, 5, 6, 7, 0, 1, 8, },</div><div class='del'>-    ec_gf8_mul_47_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 0, 1}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_47 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_47_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_48_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_48 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 6, 0, 1, 3, 7, 2, },</div><div class='del'>-    ec_gf8_mul_48_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_48 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_48_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_49_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  0,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   1,  8,  5 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_49 = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 2, 4, 0, 3, 5, 1, 6, 8, },</div><div class='del'>-    ec_gf8_mul_49_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR3, 8, 0, 6},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR3, 1, 8, 5},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_49 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_49_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_4A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_4A = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 0, 1, 3, 4, 2, },</div><div class='del'>-    ec_gf8_mul_4A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_4A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_4A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_4B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_4B = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 3, 6, 7, 0, 2, 4, 1, 8, },</div><div class='del'>-    ec_gf8_mul_4B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 3, 7}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_4B = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_4B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_4C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_4C = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 3, 4, 7, 0, 6, 2, 1, },</div><div class='del'>-    ec_gf8_mul_4C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_4C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_4C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_4D_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  3,  1 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   0,  8,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_4D = {</div><div class='del'>-    10,</div><div class='del'>-    { 0, 9, 3, 5, 6, 4, 7, 1, 2, 8, },</div><div class='del'>-    ec_gf8_mul_4D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR3, 9, 3, 1},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 9, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR3, 0, 8, 2},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_4D = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        9,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_4D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_4E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_4E = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 0, 1, 5, 6, 7, 4, },</div><div class='del'>-    ec_gf8_mul_4E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_4E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_4E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_4F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_4F = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 3, 5, 6, 1, 2, 7, 4, },</div><div class='del'>-    ec_gf8_mul_4F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_4F = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_4F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_50_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_50 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 7, 3, 0, 1, 2, 6, },</div><div class='del'>-    ec_gf8_mul_50_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_50 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_50_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_51_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_51 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 7, 2, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_51_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_51 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_51_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_52_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   3,  5,  8 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_52 = {</div><div class='del'>-    10,</div><div class='del'>-    { 2, 3, 1, 4, 6, 7, 0, 5, 8, 9, },</div><div class='del'>-    ec_gf8_mul_52_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_COPY, 9, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR3, 3, 5, 8},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 2, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_52 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_52_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_53_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_53 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 0, 1, 4, 5, 6, 7, 3, },</div><div class='del'>-    ec_gf8_mul_53_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_53 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_53_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_54_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_54 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 3, 0, 4, 2, 6, 5, 1, },</div><div class='del'>-    ec_gf8_mul_54_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_54 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_54_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_55_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_55 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 5, 6, 4, 3, 7, 2, 0, },</div><div class='del'>-    ec_gf8_mul_55_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_55 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_55_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_56_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_56 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 0, 4, 5, 6, 7, 1, },</div><div class='del'>-    ec_gf8_mul_56_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_56 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_56_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_57_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_57 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 0, 1, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_57_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_57 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_57_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_58_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_58 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 3, 2, 7, 0, 1, 5, 6, },</div><div class='del'>-    ec_gf8_mul_58_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_58 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_58_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_59_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_59 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 3, 5, 6, 1, 2, 0, 4, },</div><div class='del'>-    ec_gf8_mul_59_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_59 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_59_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_5A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_5A = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 0, 1, 2, 3, 5, 4, },</div><div class='del'>-    ec_gf8_mul_5A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_5A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_5A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_5B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_5B = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 0, 7, 5, 2, 1, 3, 4, },</div><div class='del'>-    ec_gf8_mul_5B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_5B = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_5B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_5C_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_5C = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 5, 2, 4, 1, 0, 6, 3, 8, },</div><div class='del'>-    ec_gf8_mul_5C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_5C = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_5C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_5D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_5D = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 3, 5, 4, 6, 7, 2, 0, },</div><div class='del'>-    ec_gf8_mul_5D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_5D = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_5D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_5E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_5E = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 3, 6, 2, 5, 7, 0, 1, },</div><div class='del'>-    ec_gf8_mul_5E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_5E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_5E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_5F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_5F = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 1, 3, 4, 5, 7, 2, 0, },</div><div class='del'>-    ec_gf8_mul_5F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_5F = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_5F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_60_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_60 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 4, 7, 5, 6, 0, 1, },</div><div class='del'>-    ec_gf8_mul_60_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_60 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_60_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_61_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_61 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 5, 6, 7, 4, 2, 1, 3, },</div><div class='del'>-    ec_gf8_mul_61_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_61 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_61_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_62_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_62 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 0, 3, 4, 5, 6, 7, 1, },</div><div class='del'>-    ec_gf8_mul_62_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_62 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_62_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_63_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_63 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 6, 5, 7, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_63_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_63 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_63_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_64_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_64 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 3, 4, 6, 5, 7, 8, 1, 0, },</div><div class='del'>-    ec_gf8_mul_64_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 8, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_64 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_64_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_65_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_65 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 5, 1, 3, 4, 0, 6, 7, },</div><div class='del'>-    ec_gf8_mul_65_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_65 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_65_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_66_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_66 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 1, 4, 5, 7, 0, 6, },</div><div class='del'>-    ec_gf8_mul_66_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_66 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_66_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_67_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_67 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 4, 5, 6, 7, 3, 1, 0, },</div><div class='del'>-    ec_gf8_mul_67_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_67 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_67_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_68_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_68 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 7, 2, 3, 0, 6, 4, 1, },</div><div class='del'>-    ec_gf8_mul_68_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_68 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_68_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_69_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_69 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 3, 2, 4, 5, 7, 6, },</div><div class='del'>-    ec_gf8_mul_69_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_69 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_69_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_6A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_6A = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 7, 4, 6, 1, 2, 0, 3, },</div><div class='del'>-    ec_gf8_mul_6A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_6A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_6A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_6B_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_6B = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 7, 2, 0, 3, 1, 5, 4, 8, },</div><div class='del'>-    ec_gf8_mul_6B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_6B = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_6B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_6C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_6C = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 0, 1, 2, 3, 4, },</div><div class='del'>-    ec_gf8_mul_6C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_6C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_6C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_6D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_6D = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 6, 7, 0, 4, 5, 1, 2, 8, },</div><div class='del'>-    ec_gf8_mul_6D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 3, 4}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_6D = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_6D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_6E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_6E = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 3, 1, 7, 2, 0, 4, },</div><div class='del'>-    ec_gf8_mul_6E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_6E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_6E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_6F_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   0,  8,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_6F = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 6, 3, 7, 0, 1, 4, 5, 8, },</div><div class='del'>-    ec_gf8_mul_6F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 0, 8, 7}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_6F = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_6F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_70_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_70 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 5, 2, 6, 0, 1, 7, },</div><div class='del'>-    ec_gf8_mul_70_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_70 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_70_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_71_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_71 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 7, 5, 3, 6, 0, 2, 1, },</div><div class='del'>-    ec_gf8_mul_71_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_71 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_71_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_72_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_72 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 5, 2, 7, 4, 1, 3, 6, },</div><div class='del'>-    ec_gf8_mul_72_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_72 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_72_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_73_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_73 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 0, 1, 7, 4, 5, 2, 3, },</div><div class='del'>-    ec_gf8_mul_73_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_73 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_73_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_74_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_74 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 2, 1, 0, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_74_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_74 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_74_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_75_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_75 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 6, 7, 0, 1, 2, 3, },</div><div class='del'>-    ec_gf8_mul_75_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_75 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_75_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_76_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_76 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 3, 0, 6, 5, 1, 7, 8, 4, },</div><div class='del'>-    ec_gf8_mul_76_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR3, 8, 6, 2},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_76 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_76_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_77_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_77 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 4, 3, 6, 0, 1, 5, 2, },</div><div class='del'>-    ec_gf8_mul_77_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_77 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_77_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_78_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  0,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_78 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 7, 3, 2, 5, 1, 6, 0, 8, },</div><div class='del'>-    ec_gf8_mul_78_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR3, 8, 0, 2},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_78 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_78_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_79_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  4,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_79 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 7, 3, 1, 6, 2, 0, 8, },</div><div class='del'>-    ec_gf8_mul_79_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR3, 8, 4, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_79 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_79_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_7A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_7A = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 3, 4, 5, 6, 7, 0, },</div><div class='del'>-    ec_gf8_mul_7A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_7A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_7A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_7B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  5,  3 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   4,  1,  9 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_7B = {</div><div class='del'>-    10,</div><div class='del'>-    { 1, 2, 3, 4, 8, 5, 6, 0, 7, 9, },</div><div class='del'>-    ec_gf8_mul_7B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR3, 8, 5, 3},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 0, 0}, {EC_GF_OP_COPY, 9, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 2, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR3, 4, 1, 9},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_7B = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_7B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_7C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_7C = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 4, 1, 6, 3, 5, 7, 0, },</div><div class='del'>-    ec_gf8_mul_7C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_7C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_7C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_7D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_7D = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 0, 3, 5, 6, 7, 2, 4, },</div><div class='del'>-    ec_gf8_mul_7D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_7D = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_7D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_7E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   6,  2,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_7E = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 1, 2, 0, 7, 3, 4, 6, 8, },</div><div class='del'>-    ec_gf8_mul_7E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_COPY, 8, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR3, 6, 2, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_7E = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_7E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_7F_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  7,  5 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  6,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_7F = {</div><div class='del'>-    10,</div><div class='del'>-    { 4, 1, 0, 5, 6, 7, 2, 3, 8, 9, },</div><div class='del'>-    ec_gf8_mul_7F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 9, 7, 5}, {EC_GF_OP_XOR2, 2, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 9, 6, 4}, {EC_GF_OP_XOR2, 7, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 9, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_7F = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_7F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_80_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_80 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 5, 6, 4, 1, 2, 3, 0, },</div><div class='del'>-    ec_gf8_mul_80_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_80 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_80_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_81_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_81 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 7, 4, 1, 5, 6, 3, 0, },</div><div class='del'>-    ec_gf8_mul_81_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_81 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_81_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_82_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   5,  8,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_82 = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 2, 7, 5, 1, 3, 4, 0, 8, },</div><div class='del'>-    ec_gf8_mul_82_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 5, 8, 7}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_82 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_82_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_83_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_83 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 5, 6, 7, 1, 2, 4, 0, },</div><div class='del'>-    ec_gf8_mul_83_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_83 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_83_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_84_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_84 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 6, 0, 4, 1, 5, 3, 2, },</div><div class='del'>-    ec_gf8_mul_84_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_84 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_84_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_85_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_85 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 6, 0, 3, 2, 4, 5, 1, },</div><div class='del'>-    ec_gf8_mul_85_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_85 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_85_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_86_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_86 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 6, 4, 5, 7, 3, 0, },</div><div class='del'>-    ec_gf8_mul_86_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_86 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_86_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_87_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_87 = {</div><div class='del'>-    9,</div><div class='del'>-    { 1, 2, 3, 4, 5, 7, 6, 0, 8, },</div><div class='del'>-    ec_gf8_mul_87_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_COPY, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR3, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_87 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_87_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_88_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_88 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 3, 1, 2, 4, 5, 0, },</div><div class='del'>-    ec_gf8_mul_88_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_88 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_88_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_89_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  5,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_89 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 1, 6, 5, 7, 3, 4, 0, 8, },</div><div class='del'>-    ec_gf8_mul_89_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR3, 8, 5, 2},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_89 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_89_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_8A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_8A = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 3, 0, 6, 7, 4, 5, },</div><div class='del'>-    ec_gf8_mul_8A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_8A = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_8A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_8B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_8B = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 1, 2, 3, 5, 7, 4, 0, },</div><div class='del'>-    ec_gf8_mul_8B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_8B = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_8B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_8C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_8C = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 0, 7, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_8C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_8C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_8C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_8D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_8D = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 1, 3, 2, 4, 5, 0, 6, },</div><div class='del'>-    ec_gf8_mul_8D_ops</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_op_t ec_gf8_mul_8E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_8E = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 3, 4, 5, 6, 7, 0, },</div><div class='del'>-    ec_gf8_mul_8E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_8D = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_8D_ops};</div><div class='add'>+</div><div class='add'>+static ec_gf_op_t ec_gf8_mul_8E_ops[] = {{EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+                                         {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+                                         {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+                                         {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_8E = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_8E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_8F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_8F = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 3, 4, 5, 6, 7, 0, },</div><div class='del'>-    ec_gf8_mul_8F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_8F = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_8F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_90_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_90 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 6, 7, 0, 1, 3, 2, },</div><div class='del'>-    ec_gf8_mul_90_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_90 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_90_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_91_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_91 = {</div><div class='del'>-    10,</div><div class='del'>-    { 2, 3, 1, 4, 0, 6, 7, 5, 8, 9, },</div><div class='del'>-    ec_gf8_mul_91_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 9, 1, 0}, {EC_GF_OP_COPY, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 5, 8, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_91 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_91_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_92_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_92 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 0, 1, 2, 3, 5, 4, },</div><div class='del'>-    ec_gf8_mul_92_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_92 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_92_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_93_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_93 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 4, 5, 1, 7, 2, 3, 0, },</div><div class='del'>-    ec_gf8_mul_93_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_93 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_93_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_94_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_94 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 5, 0, 2, 6, 1, 3, 4, },</div><div class='del'>-    ec_gf8_mul_94_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_94 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_94_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_95_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_95 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 6, 1, 3, 0, 4, 5, 2, },</div><div class='del'>-    ec_gf8_mul_95_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_95 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_95_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_96_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  0,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_96 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 0, 1, 6, 7, 2, 3, 5, 8, },</div><div class='del'>-    ec_gf8_mul_96_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 0, 4}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_96 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_96_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_97_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_97 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 3, 6, 7, 1, 2, 0, 8, },</div><div class='del'>-    ec_gf8_mul_97_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_COPY, 8, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 8, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_97 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_97_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_98_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_98 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 2, 3, 6, 7, 5, 1, 0, },</div><div class='del'>-    ec_gf8_mul_98_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_98 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_98_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_99_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_99 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 5, 3, 7, 0, 1, 4, 2, },</div><div class='del'>-    ec_gf8_mul_99_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_99 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_99_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_9A_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_9A = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 3, 4, 0, 5, 1, 2, 7, 8, },</div><div class='del'>-    ec_gf8_mul_9A_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_9A = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_9A_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_9B_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_9B = {</div><div class='del'>-    10,</div><div class='del'>-    { 4, 5, 8, 6, 7, 1, 2, 0, 3, 9, },</div><div class='del'>-    ec_gf8_mul_9B_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 9, 5, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 3, 2}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 3, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_9B = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_9B_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_9C_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_9C = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 2, 1, 0, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_9C_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_9C = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_9C_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_9D_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_9D = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 3, 7, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_9D_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_9D = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_9D_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_9E_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_9E = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 3, 8, 6, 0, 2, 7, 1, },</div><div class='del'>-    ec_gf8_mul_9E_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_COPY, 8, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_9E = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_9E_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_9F_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  1,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_9F = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 6, 7, 0, 1, 2, 3, 8, },</div><div class='del'>-    ec_gf8_mul_9F_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 1, 2}, {EC_GF_OP_XOR2, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_9F = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_9F_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A0_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A0 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 1, 6, 7, 5, 2, 4, 0, },</div><div class='del'>-    ec_gf8_mul_A0_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A0 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A0_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A1_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  0,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A1 = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 4, 1, 5, 6, 0, 2, 3, 8, },</div><div class='del'>-    ec_gf8_mul_A1_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR3, 8, 0, 6},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A1 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A1_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A2_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A2 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 6, 3, 2, 1, 4, 5, },</div><div class='del'>-    ec_gf8_mul_A2_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A2 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A2_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A3_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A3 = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 7, 2, 6, 1, 4, 0, 5, 8, },</div><div class='del'>-    ec_gf8_mul_A3_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A3 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A3_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A4_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A4 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 2, 4, 3, 0, 1, },</div><div class='del'>-    ec_gf8_mul_A4_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A4 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A4_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A5_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  5,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A5 = {</div><div class='del'>-    9,</div><div class='del'>-    { 1, 4, 2, 5, 6, 7, 3, 0, 8, },</div><div class='del'>-    ec_gf8_mul_A5_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 5, 6}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A5 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A5_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A6_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A6 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 0, 3, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_A6_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A6 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A6_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A7_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A7 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 5, 6, 7, 3, 4, },</div><div class='del'>-    ec_gf8_mul_A7_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A7 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A7_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A8_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A8 = {</div><div class='del'>-    10,</div><div class='del'>-    { 1, 7, 5, 8, 6, 3, 4, 0, 2, 9, },</div><div class='del'>-    ec_gf8_mul_A8_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_COPY, 9, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 9, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A8 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A8_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_A9_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_A9 = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 7, 6, 1, 2, 0, 4, 5, },</div><div class='del'>-    ec_gf8_mul_A9_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_A9 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_A9_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_AA_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_AA = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 4, 5, 3, 6, 7, 1, 2, },</div><div class='del'>-    ec_gf8_mul_AA_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_AA = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_AA_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_AB_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   3,  9,  7 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_AB = {</div><div class='del'>-    10,</div><div class='del'>-    { 2, 3, 8, 0, 5, 6, 1, 4, 7, 9, },</div><div class='del'>-    ec_gf8_mul_AB_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 9, 6, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR3, 3, 9, 7},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_AB = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_AB_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_AC_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_AC = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 2, 1, 0, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_AC_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_AC = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_AC_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_AD_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  1,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_AD = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 5, 6, 7, 0, 1, 2, 8, },</div><div class='del'>-    ec_gf8_mul_AD_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 1, 2}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 4, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_AD = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_AD_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_AE_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_AE = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 0, 5, 6, 3, 4, 1, 2, 8, },</div><div class='del'>-    ec_gf8_mul_AE_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_AE = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_AE_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_AF_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_AF = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 7, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_AF_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_AF = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_AF_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B0_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B0 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 0, 7, 2, 3, 1, 6, 5, },</div><div class='del'>-    ec_gf8_mul_B0_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B0 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B0_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B1_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   5,  8,  1 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B1 = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 6, 4, 7, 0, 1, 3, 5, 8, },</div><div class='del'>-    ec_gf8_mul_B1_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_COPY, 8, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 5, 8, 1}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B1 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B1_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B2_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  4,  5 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B2 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 7, 4, 5, 6, 1, 2, 3, 8, },</div><div class='del'>-    ec_gf8_mul_B2_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR3, 8, 4, 5},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 8, 0}, {EC_GF_OP_XOR2, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B2 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B2_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B3_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   1,  9,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B3 = {</div><div class='del'>-    10,</div><div class='del'>-    { 2, 3, 4, 5, 1, 6, 0, 7, 8, 9, },</div><div class='del'>-    ec_gf8_mul_B3_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_COPY, 9, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR3, 8, 6, 4},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 8, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 1, 9, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B3 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B3_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B4_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B4 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 0, 1, 2, 3, 4, },</div><div class='del'>-    ec_gf8_mul_B4_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B4 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B4_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B5_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   4,  8,  3 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B5 = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 0, 7, 1, 5, 6, 2, 8, },</div><div class='del'>-    ec_gf8_mul_B5_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 4, 8, 3}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B5 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B5_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B6_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B6 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 3, 6, 4, 7, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_B6_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B6 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B6_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B7_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B7 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 0, 1, 4, 2, 6, 7, 3, },</div><div class='del'>-    ec_gf8_mul_B7_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B7 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B7_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B8_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B8 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 4, 5, 1, 2, 0, 7, 3, },</div><div class='del'>-    ec_gf8_mul_B8_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B8 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B8_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_B9_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   0,  8,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_B9 = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 7, 0, 2, 1, 4, 5, 3, 8, },</div><div class='del'>-    ec_gf8_mul_B9_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 0, 8, 2}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_B9 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_B9_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_BA_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_BA = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 4, 3, 5, 6, 0, 7, },</div><div class='del'>-    ec_gf8_mul_BA_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_BA = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_BA_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_BB_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_BB = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 2, 1, 8, 3, 5, 6, 4, 0, },</div><div class='del'>-    ec_gf8_mul_BB_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_COPY, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 8, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_BB = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_BB_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_BC_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   2,  8,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_BC = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 6, 3, 4, 5, 1, 7, 0, 8, },</div><div class='del'>-    ec_gf8_mul_BC_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR3, 2, 8, 4},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_BC = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_BC_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_BD_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_BD = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 0, 2, 7, 1, 6, 3, },</div><div class='del'>-    ec_gf8_mul_BD_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_BD = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_BD_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_BE_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_BE = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 6, 7, 4, 5, 1, 3, 2, },</div><div class='del'>-    ec_gf8_mul_BE_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_BE = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_BE_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_BF_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_BF = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 1, 7, 3, 0, 2, 4, },</div><div class='del'>-    ec_gf8_mul_BF_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_BF = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_BF_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C0_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C0 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 3, 4, 7, 5, 6, 0, },</div><div class='del'>-    ec_gf8_mul_C0_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C0 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C0_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C1_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  1,  2 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C1 = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 6, 7, 4, 1, 2, 3, 0, 8, },</div><div class='del'>-    ec_gf8_mul_C1_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 1, 2}, {EC_GF_OP_XOR2, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C1 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C1_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C2_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C2 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 6, 3, 0, 1, 4, 5, 2, },</div><div class='del'>-    ec_gf8_mul_C2_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C2 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C2_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C3_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   0,  2,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C3 = {</div><div class='del'>-    10,</div><div class='del'>-    { 5, 6, 4, 7, 1, 2, 3, 0, 8, 9, },</div><div class='del'>-    ec_gf8_mul_C3_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 0, 2, 6}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 9, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 7, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C3 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C3_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C4_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C4 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 2, 1, 3, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_C4_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 1, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C4 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C4_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C5_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C5 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 3, 5, 7, 6, 2, 0, 1, },</div><div class='del'>-    ec_gf8_mul_C5_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C5 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C5_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C6_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  5,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C6 = {</div><div class='del'>-    10,</div><div class='del'>-    { 6, 3, 0, 4, 5, 7, 2, 1, 8, 9, },</div><div class='del'>-    ec_gf8_mul_C6_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_COPY, 8, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR3, 9, 5, 4},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 9, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 9, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C6 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C6_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C7_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C7 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 6, 2, 5, 3, 4, 1, },</div><div class='del'>-    ec_gf8_mul_C7_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C7 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C7_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C8_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C8 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 3, 2, 4, 6, 7, 5, 0, },</div><div class='del'>-    ec_gf8_mul_C8_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C8 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C8_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_C9_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_C9 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 4, 5, 6, 7, 0, 1, },</div><div class='del'>-    ec_gf8_mul_C9_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_C9 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_C9_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_CA_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_CA = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 5, 7, 3, 4, 0, 6, },</div><div class='del'>-    ec_gf8_mul_CA_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_CA = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_CA_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_CB_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_CB = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 4, 5, 7, 6, 0, 1, },</div><div class='del'>-    ec_gf8_mul_CB_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_CB = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_CB_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_CC_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_CC = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 7, 1, 0, 5, 6, 3, 4, },</div><div class='del'>-    ec_gf8_mul_CC_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_CC = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_CC_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_CD_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_CD = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 6, 1, 2, 7, 3, 4, 5, },</div><div class='del'>-    ec_gf8_mul_CD_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_CD = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_CD_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_CE_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   3,  6,  8 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  2,  3 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_CE = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 7, 3, 0, 2, 6, 4, 1, 8, },</div><div class='del'>-    ec_gf8_mul_CE_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR3, 3, 6, 8},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR3, 8, 2, 3},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 4, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_CE = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_CE_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_CF_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_CF = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 6, 7, 0, 2, 4, 5, 1, },</div><div class='del'>-    ec_gf8_mul_CF_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_CF = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_CF_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D0_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D0 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 2, 0, 3, 1, 4, },</div><div class='del'>-    ec_gf8_mul_D0_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D0 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D0_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D1_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D1 = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 6, 3, 2, 0, 7, 4, 1, 8, },</div><div class='del'>-    ec_gf8_mul_D1_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR3, 8, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D1 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D1_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D2_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D2 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 2, 1, 3, 4, 6, 5, },</div><div class='del'>-    ec_gf8_mul_D2_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D2 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D2_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D3_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D3 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 3, 2, 8, 4, 6, 7, 1, 5, },</div><div class='del'>-    ec_gf8_mul_D3_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_COPY, 8, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 6, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D3 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D3_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D4_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   1,  7,  8 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D4 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 1, 7, 5, 0, 6, 3, 2, 8, },</div><div class='del'>-    ec_gf8_mul_D4_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_COPY, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR3, 1, 7, 8},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D4 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D4_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D5_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D5 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 4, 5, 2, 3, 1, 0, },</div><div class='del'>-    ec_gf8_mul_D5_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D5 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D5_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D6_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D6 = {</div><div class='del'>-    9,</div><div class='del'>-    { 0, 6, 2, 7, 1, 3, 4, 5, 8, },</div><div class='del'>-    ec_gf8_mul_D6_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D6 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D6_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D7_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  5 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   6,  7,  8 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D7 = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 6, 5, 0, 7, 1, 2, 8, },</div><div class='del'>-    ec_gf8_mul_D7_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 3, 5}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 6, 7, 8}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D7 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D7_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D8_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D8 = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 6, 7, 0, 1, 2, 3, },</div><div class='del'>-    ec_gf8_mul_D8_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D8 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D8_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_D9_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_D9 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 6, 7, 4, 5, 0, 3, },</div><div class='del'>-    ec_gf8_mul_D9_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 7, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_D9 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_D9_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_DA_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_DA = {</div><div class='del'>-    9,</div><div class='del'>-    { 2, 5, 7, 1, 0, 4, 3, 6, 8, },</div><div class='del'>-    ec_gf8_mul_DA_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 2, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 2, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_DA = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_DA_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_DB_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_DB = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 5, 6, 2, 3, 4, 1, 0, 8, },</div><div class='del'>-    ec_gf8_mul_DB_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 8, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 3, 0}, {EC_GF_OP_XOR2, 3, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_DB = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_DB_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_DC_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_DC = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 2, 6, 7, 1, 0, 3, },</div><div class='del'>-    ec_gf8_mul_DC_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_DC = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_DC_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_DD_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_DD = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 2, 3, 6, 7, 0, 4, 5, },</div><div class='del'>-    ec_gf8_mul_DD_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_DD = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_DD_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_DE_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_DE = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 5, 2, 6, 7, 1, 3, 4, },</div><div class='del'>-    ec_gf8_mul_DE_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_DE = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_DE_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_DF_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   1,  9,  2 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_DF = {</div><div class='del'>-    10,</div><div class='del'>-    { 7, 2, 8, 4, 3, 1, 0, 6, 5, 9, },</div><div class='del'>-    ec_gf8_mul_DF_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 9, 0, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 7, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 1, 9, 2}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_DF = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_DF_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E0_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E0 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 4, 7, 5, 6, 0, 1, },</div><div class='del'>-    ec_gf8_mul_E0_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 1, 0}, {EC_GF_OP_XOR2, 7, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 7, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E0 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E0_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E1_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  5,  3 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E1 = {</div><div class='del'>-    10,</div><div class='del'>-    { 0, 7, 1, 3, 4, 5, 6, 2, 8, 9, },</div><div class='del'>-    ec_gf8_mul_E1_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 1, 0}, {EC_GF_OP_XOR2, 8, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR3, 9, 5, 3},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 9, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 9, 0}, {EC_GF_OP_XOR2, 0, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E1 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E1_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E2_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E2 = {</div><div class='del'>-    8,</div><div class='del'>-    { 2, 3, 7, 1, 5, 6, 0, 4, },</div><div class='del'>-    ec_gf8_mul_E2_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E2 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E2_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E3_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  2,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   6,  8,  4 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E3 = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 4, 7, 2, 1, 3, 6, 0, 8, },</div><div class='del'>-    ec_gf8_mul_E3_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 3, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 2, 7}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 0, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 8, 0}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR3, 6, 8, 4},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E3 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        1,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E3_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E4_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E4 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 1, 6, 3, 4, 2, 5, },</div><div class='del'>-    ec_gf8_mul_E4_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 4, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 4, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E4 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E4_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E5_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E5 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 5, 3, 6, 7, 1, 0, 2, 8, },</div><div class='del'>-    ec_gf8_mul_E5_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 0, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E5 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E5_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E6_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E6 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 4, 3, 6, 7, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_E6_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 4, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E6 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E6_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E7_ops[] = {</div><div class='del'>-    { EC_GF_OP_COPY,   8,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  0,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E7 = {</div><div class='del'>-    10,</div><div class='del'>-    { 1, 4, 3, 6, 7, 5, 2, 0, 8, 9, },</div><div class='del'>-    ec_gf8_mul_E7_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_COPY, 8, 6, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 9, 0, 6}, {EC_GF_OP_XOR2, 4, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 9, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E7 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E7_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E8_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E8 = {</div><div class='del'>-    8,</div><div class='del'>-    { 1, 4, 2, 7, 3, 0, 5, 6, },</div><div class='del'>-    ec_gf8_mul_E8_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 2, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 1, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E8 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E8_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_E9_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_E9 = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 2, 0, 3, 4, 1, 5, 7, 8, },</div><div class='del'>-    ec_gf8_mul_E9_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_COPY, 8, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 6, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 6, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 1, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_E9 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_E9_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_EA_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_EA = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 5, 6, 7, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_EA_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_EA = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_EA_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_EB_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_EB = {</div><div class='del'>-    8,</div><div class='del'>-    { 3, 4, 5, 6, 7, 0, 1, 2, },</div><div class='del'>-    ec_gf8_mul_EB_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_EB = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_EB_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_EC_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_EC = {</div><div class='del'>-    9,</div><div class='del'>-    { 7, 4, 3, 0, 2, 5, 1, 6, 8, },</div><div class='del'>-    ec_gf8_mul_EC_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 4, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 3, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_EC = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        6,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_EC_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_ED_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_ED = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 0, 1, 4, 3, 2, },</div><div class='del'>-    ec_gf8_mul_ED_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 4, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 6, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 2, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_ED = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        2,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_ED_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_EE_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  2,  3 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_EE = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 4, 5, 7, 2, 3, 0, 1, 8, },</div><div class='del'>-    ec_gf8_mul_EE_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 3, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR3, 8, 2, 3},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_XOR2, 4, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 8, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 8, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 0, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_EE = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_EE_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_EF_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_EF = {</div><div class='del'>-    9,</div><div class='del'>-    { 6, 4, 5, 7, 2, 0, 3, 1, 8, },</div><div class='del'>-    ec_gf8_mul_EF_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_COPY, 8, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 2, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 6, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_EF = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_EF_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F0_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  3,  6 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F0 = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 6, 1, 2, 0, 5, 7, 8, },</div><div class='del'>-    ec_gf8_mul_F0_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR3, 8, 3, 6},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 8, 0}, {EC_GF_OP_XOR2, 8, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 1, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 2, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F0 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        5,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F0_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F1_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   9,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   9,  8,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  9,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F1 = {</div><div class='del'>-    10,</div><div class='del'>-    { 7, 2, 6, 3, 5, 1, 4, 0, 8, 9, },</div><div class='del'>-    ec_gf8_mul_F1_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 3, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 3, 0}, {EC_GF_OP_COPY, 9, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 9, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 5, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 9, 0}, {EC_GF_OP_XOR2, 4, 9, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR3, 9, 8, 7},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 9, 0}, {EC_GF_OP_XOR2, 5, 9, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F1 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        2,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F1_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F2_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  6,  4 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F2 = {</div><div class='del'>-    9,</div><div class='del'>-    { 1, 0, 6, 7, 4, 5, 2, 3, 8, },</div><div class='del'>-    ec_gf8_mul_F2_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 7, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 6, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 2, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_XOR3, 8, 6, 4},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F2 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        1,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F2_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F3_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F3 = {</div><div class='del'>-    8,</div><div class='del'>-    { 5, 6, 7, 0, 1, 2, 3, 4, },</div><div class='del'>-    ec_gf8_mul_F3_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 5, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F3 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F3_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F4_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F4 = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 3, 4, 5, 6, 7, },</div><div class='del'>-    ec_gf8_mul_F4_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 7, 0}, {EC_GF_OP_XOR2, 3, 7, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F4 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F4_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F5_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F5 = {</div><div class='del'>-    8,</div><div class='del'>-    { 7, 0, 1, 2, 3, 4, 5, 6, },</div><div class='del'>-    ec_gf8_mul_F5_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F5 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F5_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F6_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   9,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F6 = {</div><div class='del'>-    10,</div><div class='del'>-    { 0, 6, 2, 7, 4, 3, 5, 9, 1, 8, },</div><div class='del'>-    ec_gf8_mul_F6_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 1, 0}, {EC_GF_OP_COPY, 8, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 9, 3, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 7, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 9, 4, 0}, {EC_GF_OP_XOR2, 4, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 9, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 5, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR3, 7, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F6 = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        7,</div><div class='add'>+                                        4,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        9,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F6_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F7_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F7 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 7, 0, 1, 2, 3, 4, 5, },</div><div class='del'>-    ec_gf8_mul_F7_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 2, 0}, {EC_GF_OP_XOR2, 4, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 4, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F7 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F7_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F8_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F8 = {</div><div class='del'>-    8,</div><div class='del'>-    { 6, 2, 0, 1, 4, 5, 3, 7, },</div><div class='del'>-    ec_gf8_mul_F8_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 0, 0}, {EC_GF_OP_XOR2, 3, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 4, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 1, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 5, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 6, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 3, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F8 = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        2,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F8_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_F9_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  7,  1 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_F9 = {</div><div class='del'>-    9,</div><div class='del'>-    { 4, 1, 7, 6, 0, 3, 5, 2, 8, },</div><div class='del'>-    ec_gf8_mul_F9_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 5, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 6, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 7, 1}, {EC_GF_OP_XOR2, 1, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 8, 0}, {EC_GF_OP_XOR2, 5, 8, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_F9 = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        0,</div><div class='add'>+                                        3,</div><div class='add'>+                                        5,</div><div class='add'>+                                        2,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_F9_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_FA_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_FA = {</div><div class='del'>-    8,</div><div class='del'>-    { 0, 1, 2, 4, 5, 6, 7, 3, },</div><div class='del'>-    ec_gf8_mul_FA_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 1, 0}, {EC_GF_OP_XOR2, 0, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 2, 0}, {EC_GF_OP_XOR2, 1, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 7, 0}, {EC_GF_OP_XOR2, 5, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 6, 0}, {EC_GF_OP_XOR2, 0, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_FA = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_FA_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_FB_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_FB = {</div><div class='del'>-    8,</div><div class='del'>-    { 4, 5, 6, 7, 0, 1, 2, 3, },</div><div class='del'>-    ec_gf8_mul_FB_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 0, 0}, {EC_GF_OP_XOR2, 2, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 3, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 7, 0}, {EC_GF_OP_XOR2, 2, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 6, 0}, {EC_GF_OP_XOR2, 7, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 3, 0}, {EC_GF_OP_XOR2, 6, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 4, 0}, {EC_GF_OP_XOR2, 5, 4, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_FB = {8,</div><div class='add'>+                                    {</div><div class='add'>+                                        4,</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        7,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        3,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_FB_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_FC_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   8,  5,  7 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   0,  9,  2 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_FC = {</div><div class='del'>-    10,</div><div class='del'>-    { 5, 6, 3, 7, 1, 8, 0, 4, 2, 9, },</div><div class='del'>-    ec_gf8_mul_FC_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 0, 0}, {EC_GF_OP_XOR2, 7, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 1, 0}, {EC_GF_OP_COPY, 9, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 8, 5, 7}, {EC_GF_OP_XOR2, 3, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 3, 0}, {EC_GF_OP_XOR2, 2, 8, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 1, 2, 0}, {EC_GF_OP_XOR2, 4, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 3, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 6, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 0, 9, 2}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_FC = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        6,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        1,</div><div class='add'>+                                        8,</div><div class='add'>+                                        0,</div><div class='add'>+                                        4,</div><div class='add'>+                                        2,</div><div class='add'>+                                        9,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_FC_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_FD_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  1,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   1,  8,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_FD = {</div><div class='del'>-    9,</div><div class='del'>-    { 5, 3, 7, 6, 1, 2, 4, 0, 8, },</div><div class='del'>-    ec_gf8_mul_FD_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 1, 0}, {EC_GF_OP_COPY, 8, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 0, 0}, {EC_GF_OP_XOR2, 7, 5, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 4, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 5, 6, 0}, {EC_GF_OP_XOR2, 0, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 0, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 5, 0}, {EC_GF_OP_XOR2, 1, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 1, 0}, {EC_GF_OP_XOR2, 6, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 1, 8, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_FD = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        5,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        0,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_FD_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_FE_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   8,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  8,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  4,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_FE = {</div><div class='del'>-    9,</div><div class='del'>-    { 3, 4, 8, 2, 5, 0, 6, 1, 7, },</div><div class='del'>-    ec_gf8_mul_FE_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 0, 0}, {EC_GF_OP_COPY, 8, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 4, 0}, {EC_GF_OP_XOR2, 6, 2, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 8, 5, 0}, {EC_GF_OP_XOR2, 5, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 1, 0}, {EC_GF_OP_XOR2, 0, 6, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 7, 8, 0}, {EC_GF_OP_XOR2, 3, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 4, 0}, {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_FE = {9,</div><div class='add'>+                                    {</div><div class='add'>+                                        3,</div><div class='add'>+                                        4,</div><div class='add'>+                                        8,</div><div class='add'>+                                        2,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        6,</div><div class='add'>+                                        1,</div><div class='add'>+                                        7,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_FE_ops};</div><div class='ctx'> </div><div class='ctx'> static ec_gf_op_t ec_gf8_mul_FF_ops[] = {</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  7,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   9,  0,  0 },</div><div class='del'>-    { EC_GF_OP_COPY,   8,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   9,  1,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  2,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   9,  4,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   0,  5,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  0,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   3,  9,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   7,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   2,  6,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   5,  3,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   6,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR2,   1,  7,  0 },</div><div class='del'>-    { EC_GF_OP_XOR3,   3,  8,  5 },</div><div class='del'>-    { EC_GF_OP_XOR2,   4,  6,  0 },</div><div class='del'>-    { EC_GF_OP_END,    0,  0,  0 }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static ec_gf_mul_t ec_gf8_mul_FF = {</div><div class='del'>-    10,</div><div class='del'>-    { 6, 5, 0, 1, 2, 4, 9, 3, 7, 8, },</div><div class='del'>-    ec_gf8_mul_FF_ops</div><div class='del'>-};</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 7, 0}, {EC_GF_OP_COPY, 9, 0, 0},</div><div class='add'>+    {EC_GF_OP_COPY, 8, 4, 0}, {EC_GF_OP_XOR2, 9, 1, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 4, 2, 0}, {EC_GF_OP_XOR2, 9, 4, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 0, 5, 0}, {EC_GF_OP_XOR2, 2, 0, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 3, 9, 0}, {EC_GF_OP_XOR2, 7, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 2, 6, 0}, {EC_GF_OP_XOR2, 5, 3, 0},</div><div class='add'>+    {EC_GF_OP_XOR2, 6, 7, 0}, {EC_GF_OP_XOR2, 1, 7, 0},</div><div class='add'>+    {EC_GF_OP_XOR3, 3, 8, 5}, {EC_GF_OP_XOR2, 4, 6, 0},</div><div class='add'>+    {EC_GF_OP_END, 0, 0, 0}};</div><div class='add'>+</div><div class='add'>+static ec_gf_mul_t ec_gf8_mul_FF = {10,</div><div class='add'>+                                    {</div><div class='add'>+                                        6,</div><div class='add'>+                                        5,</div><div class='add'>+                                        0,</div><div class='add'>+                                        1,</div><div class='add'>+                                        2,</div><div class='add'>+                                        4,</div><div class='add'>+                                        9,</div><div class='add'>+                                        3,</div><div class='add'>+                                        7,</div><div class='add'>+                                        8,</div><div class='add'>+                                    },</div><div class='add'>+                                    ec_gf8_mul_FF_ops};</div><div class='ctx'> </div><div class='ctx'> ec_gf_mul_t *ec_gf8_mul[] = {</div><div class='ctx'>     &amp;ec_gf8_mul_00, &amp;ec_gf8_mul_01, &amp;ec_gf8_mul_02, &amp;ec_gf8_mul_03,</div><div class='hunk'>@@ -5955,5 +5879,4 @@ ec_gf_mul_t *ec_gf8_mul[] = {</div><div class='ctx'>     &amp;ec_gf8_mul_F0, &amp;ec_gf8_mul_F1, &amp;ec_gf8_mul_F2, &amp;ec_gf8_mul_F3,</div><div class='ctx'>     &amp;ec_gf8_mul_F4, &amp;ec_gf8_mul_F5, &amp;ec_gf8_mul_F6, &amp;ec_gf8_mul_F7,</div><div class='ctx'>     &amp;ec_gf8_mul_F8, &amp;ec_gf8_mul_F9, &amp;ec_gf8_mul_FA, &amp;ec_gf8_mul_FB,</div><div class='del'>-    &amp;ec_gf8_mul_FC, &amp;ec_gf8_mul_FD, &amp;ec_gf8_mul_FE, &amp;ec_gf8_mul_FF</div><div class='del'>-};</div><div class='add'>+    &amp;ec_gf8_mul_FC, &amp;ec_gf8_mul_FD, &amp;ec_gf8_mul_FE, &amp;ec_gf8_mul_FF};</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c<br/>index 976018c9e29..229c0683d91 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-heal.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-heal.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-heal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-heal.c</a></div><div class='hunk'>@@ -27,84 +27,104 @@</div><div class='ctx'> #include "ec-fops.h"</div><div class='ctx'> #include "ec-heald.h"</div><div class='ctx'> </div><div class='del'>-#define EC_COUNT(array, max) ({int __i; int __res = 0; for (__i = 0; __i &lt; max; __i++) if (array[__i]) __res++; __res; })</div><div class='del'>-#define EC_INTERSECT(dst, src1, src2, max) ({int __i; for (__i = 0; __i &lt; max; __i++) dst[__i] = src1[__i] &amp;&amp; src2[__i]; })</div><div class='del'>-#define EC_ADJUST_SOURCE(source, sources, max) ({int __i; if (sources[source] == 0) {source = -1; for (__i = 0; __i &lt; max; __i++) if (sources[__i]) source = __i; } })</div><div class='del'>-#define IA_EQUAL(f, s, field) (memcmp (&amp;(f.ia_##field), &amp;(s.ia_##field), sizeof (s.ia_##field)) == 0)</div><div class='del'>-#define EC_REPLIES_ALLOC(replies, numsubvols) do {              \</div><div class='del'>-        int __i = 0;                                            \</div><div class='del'>-        replies = alloca0(numsubvols * sizeof (*replies));      \</div><div class='del'>-        for (__i = 0; __i &lt; numsubvols; __i++)                  \</div><div class='del'>-                INIT_LIST_HEAD (&amp;replies[__i].entries.list);    \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='add'>+#define EC_COUNT(array, max)                                                   \</div><div class='add'>+    ({                                                                         \</div><div class='add'>+        int __i;                                                               \</div><div class='add'>+        int __res = 0;                                                         \</div><div class='add'>+        for (__i = 0; __i &lt; max; __i++)                                        \</div><div class='add'>+            if (array[__i])                                                    \</div><div class='add'>+                __res++;                                                       \</div><div class='add'>+        __res;                                                                 \</div><div class='add'>+    })</div><div class='add'>+#define EC_INTERSECT(dst, src1, src2, max)                                     \</div><div class='add'>+    ({                                                                         \</div><div class='add'>+        int __i;                                                               \</div><div class='add'>+        for (__i = 0; __i &lt; max; __i++)                                        \</div><div class='add'>+            dst[__i] = src1[__i] &amp;&amp; src2[__i];                                 \</div><div class='add'>+    })</div><div class='add'>+#define EC_ADJUST_SOURCE(source, sources, max)                                 \</div><div class='add'>+    ({                                                                         \</div><div class='add'>+        int __i;                                                               \</div><div class='add'>+        if (sources[source] == 0) {                                            \</div><div class='add'>+            source = -1;                                                       \</div><div class='add'>+            for (__i = 0; __i &lt; max; __i++)                                    \</div><div class='add'>+                if (sources[__i])                                              \</div><div class='add'>+                    source = __i;                                              \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    })</div><div class='add'>+#define IA_EQUAL(f, s, field)                                                  \</div><div class='add'>+    (memcmp(&amp;(f.ia_##field), &amp;(s.ia_##field), sizeof(s.ia_##field)) == 0)</div><div class='add'>+#define EC_REPLIES_ALLOC(replies, numsubvols)                                  \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        int __i = 0;                                                           \</div><div class='add'>+        replies = alloca0(numsubvols * sizeof(*replies));                      \</div><div class='add'>+        for (__i = 0; __i &lt; numsubvols; __i++)                                 \</div><div class='add'>+            INIT_LIST_HEAD(&amp;replies[__i].entries.list);                        \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> struct ec_name_data {</div><div class='del'>-        call_frame_t *frame;</div><div class='del'>-        unsigned char *participants;</div><div class='del'>-        unsigned char *failed_on;</div><div class='del'>-        unsigned char *gfidless;</div><div class='del'>-        unsigned char *enoent;</div><div class='del'>-        unsigned char *same;</div><div class='del'>-        char *name;</div><div class='del'>-        inode_t *parent;</div><div class='del'>-        default_args_cbk_t *replies;</div><div class='add'>+    call_frame_t *frame;</div><div class='add'>+    unsigned char *participants;</div><div class='add'>+    unsigned char *failed_on;</div><div class='add'>+    unsigned char *gfidless;</div><div class='add'>+    unsigned char *enoent;</div><div class='add'>+    unsigned char *same;</div><div class='add'>+    char *name;</div><div class='add'>+    inode_t *parent;</div><div class='add'>+    default_args_cbk_t *replies;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static char *ec_ignore_xattrs[] = {</div><div class='del'>-        GF_SELINUX_XATTR_KEY,</div><div class='del'>-        QUOTA_SIZE_KEY,</div><div class='del'>-        NULL</div><div class='del'>-};</div><div class='add'>+static char *ec_ignore_xattrs[] = {GF_SELINUX_XATTR_KEY, QUOTA_SIZE_KEY, NULL};</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_ignorable_key_match (dict_t *dict, char *key, data_t *val, void *mdata)</div><div class='add'>+ec_ignorable_key_match(dict_t *dict, char *key, data_t *val, void *mdata)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!key)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!key)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (strncmp (key, EC_XATTR_PREFIX, SLEN (EC_XATTR_PREFIX)) == 0)</div><div class='del'>-                        return _gf_true;</div><div class='add'>+    if (strncmp(key, EC_XATTR_PREFIX, SLEN(EC_XATTR_PREFIX)) == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; ec_ignore_xattrs[i]; i++) {</div><div class='del'>-                if (!strcmp (key, ec_ignore_xattrs[i]))</div><div class='del'>-                       return _gf_true;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; ec_ignore_xattrs[i]; i++) {</div><div class='add'>+        if (!strcmp(key, ec_ignore_xattrs[i]))</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_sh_key_match (dict_t *dict, char *key, data_t *val, void *mdata)</div><div class='add'>+ec_sh_key_match(dict_t *dict, char *key, data_t *val, void *mdata)</div><div class='ctx'> {</div><div class='del'>-        return !ec_ignorable_key_match (dict, key, val, mdata);</div><div class='add'>+    return !ec_ignorable_key_match(dict, key, val, mdata);</div><div class='ctx'> }</div><div class='ctx'> /* FOP: heal */</div><div class='ctx'> </div><div class='del'>-uintptr_t ec_heal_check(ec_fop_data_t * fop, uintptr_t * pgood)</div><div class='add'>+uintptr_t</div><div class='add'>+ec_heal_check(ec_fop_data_t *fop, uintptr_t *pgood)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='del'>-    uintptr_t mask[2] = { 0, 0 };</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='add'>+    uintptr_t mask[2] = {0, 0};</div><div class='ctx'> </div><div class='ctx'>     list_for_each_entry(cbk, &amp;fop-&gt;cbk_list, list)</div><div class='ctx'>     {</div><div class='ctx'>         mask[cbk-&gt;op_ret &gt;= 0] |= cbk-&gt;mask;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (pgood != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (pgood != NULL) {</div><div class='ctx'>         *pgood = mask[1];</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return mask[0];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_heal_update(ec_fop_data_t * fop, int32_t is_open)</div><div class='add'>+void</div><div class='add'>+ec_heal_update(ec_fop_data_t *fop, int32_t is_open)</div><div class='ctx'> {</div><div class='del'>-    ec_heal_t * heal = fop-&gt;data;</div><div class='add'>+    ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'>     uintptr_t good, bad;</div><div class='ctx'> </div><div class='ctx'>     bad = ec_heal_check(fop, &amp;good);</div><div class='hunk'>@@ -112,8 +132,7 @@ void ec_heal_update(ec_fop_data_t * fop, int32_t is_open)</div><div class='ctx'>     LOCK(&amp;heal-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>     heal-&gt;bad &amp;= ~bad;</div><div class='del'>-    if (is_open)</div><div class='del'>-    {</div><div class='add'>+    if (is_open) {</div><div class='ctx'>         heal-&gt;open |= good;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -122,9 +141,10 @@ void ec_heal_update(ec_fop_data_t * fop, int32_t is_open)</div><div class='ctx'>     fop-&gt;error = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_heal_avoid(ec_fop_data_t * fop)</div><div class='add'>+void</div><div class='add'>+ec_heal_avoid(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-    ec_heal_t * heal = fop-&gt;data;</div><div class='add'>+    ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'>     uintptr_t bad;</div><div class='ctx'> </div><div class='ctx'>     bad = ec_heal_check(fop, NULL);</div><div class='hunk'>@@ -136,22 +156,24 @@ void ec_heal_avoid(ec_fop_data_t * fop)</div><div class='ctx'>     UNLOCK(&amp;heal-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_heal_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_heal_lock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'> </div><div class='ctx'>     if (op_ret &gt;= 0) {</div><div class='del'>-        GF_ASSERT(ec_set_inode_size(heal-&gt;fop, heal-&gt;fd-&gt;inode,</div><div class='del'>-                                    heal-&gt;total_size));</div><div class='add'>+        GF_ASSERT(</div><div class='add'>+            ec_set_inode_size(heal-&gt;fop, heal-&gt;fd-&gt;inode, heal-&gt;total_size));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc,</div><div class='del'>-                  off_t offset, size_t size)</div><div class='add'>+void</div><div class='add'>+ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc, off_t offset,</div><div class='add'>+             size_t size)</div><div class='ctx'> {</div><div class='ctx'>     struct gf_flock flock;</div><div class='ctx'>     fop_inodelk_cbk_t cbk = NULL;</div><div class='hunk'>@@ -176,15 +198,12 @@ void ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc,</div><div class='ctx'>         cbk = ec_heal_lock_cbk;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (fd != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fd != NULL) {</div><div class='ctx'>         ec_finodelk(heal-&gt;fop-&gt;frame, heal-&gt;xl,</div><div class='ctx'>                     &amp;heal-&gt;fop-&gt;frame-&gt;root-&gt;lk_owner, heal-&gt;fop-&gt;mask,</div><div class='ctx'>                     EC_MINIMUM_ALL, cbk, heal, heal-&gt;xl-&gt;name, fd, F_SETLKW,</div><div class='ctx'>                     &amp;flock, NULL);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='add'>+    } else {</div><div class='ctx'>         ec_inodelk(heal-&gt;fop-&gt;frame, heal-&gt;xl,</div><div class='ctx'>                    &amp;heal-&gt;fop-&gt;frame-&gt;root-&gt;lk_owner, heal-&gt;fop-&gt;mask,</div><div class='ctx'>                    EC_MINIMUM_ALL, cbk, heal, heal-&gt;xl-&gt;name, loc, F_SETLKW,</div><div class='hunk'>@@ -192,28 +211,28 @@ void ec_heal_lock(ec_heal_t *heal, int32_t type, fd_t *fd, loc_t *loc,</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_heal_inodelk(ec_heal_t *heal, int32_t type, int32_t use_fd,</div><div class='del'>-                     off_t offset, size_t size)</div><div class='add'>+void</div><div class='add'>+ec_heal_inodelk(ec_heal_t *heal, int32_t type, int32_t use_fd, off_t offset,</div><div class='add'>+                size_t size)</div><div class='ctx'> {</div><div class='ctx'>     ec_heal_lock(heal, type, use_fd ? heal-&gt;fd : NULL, &amp;heal-&gt;loc, offset,</div><div class='ctx'>                  size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_heal_xattr_clean (dict_t *dict, char *key, data_t *data,</div><div class='del'>-                     void *arg)</div><div class='add'>+ec_heal_xattr_clean(dict_t *dict, char *key, data_t *data, void *arg)</div><div class='ctx'> {</div><div class='del'>-        dict_t *base = arg;</div><div class='add'>+    dict_t *base = arg;</div><div class='ctx'> </div><div class='del'>-        if (ec_ignorable_key_match (NULL, key, NULL, NULL)) {</div><div class='del'>-                dict_del (dict, key);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (ec_ignorable_key_match(NULL, key, NULL, NULL)) {</div><div class='add'>+        dict_del(dict, key);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get (base, key) != NULL)</div><div class='del'>-                dict_del (dict, key);</div><div class='add'>+    if (dict_get(base, key) != NULL)</div><div class='add'>+        dict_del(dict, key);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /********************************************************************</div><div class='hunk'>@@ -223,68 +242,66 @@ ec_heal_xattr_clean (dict_t *dict, char *key, data_t *data,</div><div class='ctx'>  *</div><div class='ctx'>  *******************************************************************/</div><div class='ctx'> void</div><div class='del'>-ec_wind_xattrop_parallel (call_frame_t *frame, xlator_t *subvol,</div><div class='del'>-                          int child_index, loc_t *loc,</div><div class='del'>-                          gf_xattrop_flags_t flags, dict_t **dict,</div><div class='del'>-                          dict_t *xdata)</div><div class='add'>+ec_wind_xattrop_parallel(call_frame_t *frame, xlator_t *subvol, int child_index,</div><div class='add'>+                         loc_t *loc, gf_xattrop_flags_t flags, dict_t **dict,</div><div class='add'>+                         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_msg_debug ("EC", 0, "WIND: on child %d ", child_index);</div><div class='del'>-        STACK_WIND_COOKIE (frame, cluster_xattrop_cbk,</div><div class='del'>-                           (void *)(uintptr_t) child_index,</div><div class='del'>-                           subvol, subvol-&gt;fops-&gt;xattrop, loc,</div><div class='del'>-                           flags, dict[child_index], xdata);</div><div class='add'>+    gf_msg_debug("EC", 0, "WIND: on child %d ", child_index);</div><div class='add'>+    STACK_WIND_COOKIE(</div><div class='add'>+        frame, cluster_xattrop_cbk, (void *)(uintptr_t)child_index, subvol,</div><div class='add'>+        subvol-&gt;fops-&gt;xattrop, loc, flags, dict[child_index], xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_heal_writev_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                    xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+ec_heal_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'> </div><div class='ctx'>     ec_trace("WRITE_CBK", cookie, "ret=%d, errno=%d", op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-    gf_msg_debug (fop-&gt;xl-&gt;name, 0, "%s: write op_ret %d, op_errno %s"</div><div class='del'>-            " at %"PRIu64, uuid_utoa (heal-&gt;fd-&gt;inode-&gt;gfid), op_ret,</div><div class='del'>-            strerror (op_errno), heal-&gt;offset);</div><div class='add'>+    gf_msg_debug(fop-&gt;xl-&gt;name, 0,</div><div class='add'>+                 "%s: write op_ret %d, op_errno %s"</div><div class='add'>+                 " at %" PRIu64,</div><div class='add'>+                 uuid_utoa(heal-&gt;fd-&gt;inode-&gt;gfid), op_ret, strerror(op_errno),</div><div class='add'>+                 heal-&gt;offset);</div><div class='ctx'> </div><div class='ctx'>     ec_heal_update(cookie, 0);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_heal_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          struct iovec * vector, int32_t count,</div><div class='del'>-                          struct iatt * stbuf, struct iobref * iobref,</div><div class='del'>-                          dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_heal_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                  int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = cookie;</div><div class='del'>-    ec_heal_t * heal = fop-&gt;data;</div><div class='add'>+    ec_fop_data_t *fop = cookie;</div><div class='add'>+    ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'> </div><div class='ctx'>     ec_trace("READ_CBK", fop, "ret=%d, errno=%d", op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     ec_heal_avoid(fop);</div><div class='ctx'> </div><div class='del'>-    if (op_ret &gt; 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg_debug (fop-&gt;xl-&gt;name, 0, "%s: read succeeded, proceeding "</div><div class='del'>-                "to write at %"PRIu64, uuid_utoa (heal-&gt;fd-&gt;inode-&gt;gfid),</div><div class='del'>-                heal-&gt;offset);</div><div class='add'>+    if (op_ret &gt; 0) {</div><div class='add'>+        gf_msg_debug(fop-&gt;xl-&gt;name, 0,</div><div class='add'>+                     "%s: read succeeded, proceeding "</div><div class='add'>+                     "to write at %" PRIu64,</div><div class='add'>+                     uuid_utoa(heal-&gt;fd-&gt;inode-&gt;gfid), heal-&gt;offset);</div><div class='ctx'>         ec_writev(heal-&gt;fop-&gt;frame, heal-&gt;xl, heal-&gt;bad, EC_MINIMUM_ONE,</div><div class='ctx'>                   ec_heal_writev_cbk, heal, heal-&gt;fd, vector, count,</div><div class='ctx'>                   heal-&gt;offset, 0, iobref, NULL);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='add'>+    } else {</div><div class='ctx'>         if (op_ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (fop-&gt;xl-&gt;name, 0, "%s: read failed %s, failing "</div><div class='del'>-                        "to heal block at %"PRIu64,</div><div class='del'>-                        uuid_utoa (heal-&gt;fd-&gt;inode-&gt;gfid), strerror (op_errno),</div><div class='del'>-                        heal-&gt;offset);</div><div class='del'>-                heal-&gt;bad = 0;</div><div class='add'>+            gf_msg_debug(fop-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: read failed %s, failing "</div><div class='add'>+                         "to heal block at %" PRIu64,</div><div class='add'>+                         uuid_utoa(heal-&gt;fd-&gt;inode-&gt;gfid), strerror(op_errno),</div><div class='add'>+                         heal-&gt;offset);</div><div class='add'>+            heal-&gt;bad = 0;</div><div class='ctx'>         }</div><div class='ctx'>         heal-&gt;done = 1;</div><div class='ctx'>     }</div><div class='hunk'>@@ -292,31 +309,31 @@ int32_t ec_heal_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_heal_data_block(ec_heal_t *heal)</div><div class='add'>+void</div><div class='add'>+ec_heal_data_block(ec_heal_t *heal)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("DATA", heal-&gt;fop, "good=%lX, bad=%lX", heal-&gt;good, heal-&gt;bad);</div><div class='ctx'> </div><div class='ctx'>     if ((heal-&gt;good != 0) &amp;&amp; (heal-&gt;bad != 0) &amp;&amp;</div><div class='del'>-        (heal-&gt;iatt.ia_type == IA_IFREG))</div><div class='del'>-    {</div><div class='add'>+        (heal-&gt;iatt.ia_type == IA_IFREG)) {</div><div class='ctx'>         ec_readv(heal-&gt;fop-&gt;frame, heal-&gt;xl, heal-&gt;good, EC_MINIMUM_MIN,</div><div class='del'>-                 ec_heal_readv_cbk, heal, heal-&gt;fd, heal-&gt;size, heal-&gt;offset,</div><div class='del'>-                 0, NULL);</div><div class='add'>+                 ec_heal_readv_cbk, heal, heal-&gt;fd, heal-&gt;size, heal-&gt;offset, 0,</div><div class='add'>+                 NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: fheal */</div><div class='ctx'> </div><div class='del'>-void ec_fheal(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_fheal_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-              int32_t partial, dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_fheal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_fheal_cbk_t func, void *data, fd_t *fd, int32_t partial,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fd_t * ctx = ec_fd_get(fd, this);</div><div class='add'>+    ec_fd_t *ctx = ec_fd_get(fd, this);</div><div class='ctx'> </div><div class='del'>-    if (ctx != NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg_trace ("ec", 0, "FHEAL ctx: flags=%X, open=%lX", ctx-&gt;flags,</div><div class='del'>-                      ctx-&gt;open);</div><div class='add'>+    if (ctx != NULL) {</div><div class='add'>+        gf_msg_trace("ec", 0, "FHEAL ctx: flags=%X, open=%lX", ctx-&gt;flags,</div><div class='add'>+                     ctx-&gt;open);</div><div class='ctx'>         ec_heal(frame, this, target, minimum, func, data, &amp;ctx-&gt;loc, partial,</div><div class='ctx'>                 xdata);</div><div class='ctx'>     }</div><div class='hunk'>@@ -324,1624 +341,1601 @@ void ec_fheal(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> /* Common heal code */</div><div class='ctx'> void</div><div class='del'>-ec_mask_to_char_array (uintptr_t mask, unsigned char *array, int numsubvols)</div><div class='add'>+ec_mask_to_char_array(uintptr_t mask, unsigned char *array, int numsubvols)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++)</div><div class='del'>-                array[i] = ((mask &gt;&gt; i) &amp; 1);</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++)</div><div class='add'>+        array[i] = ((mask &gt;&gt; i) &amp; 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uintptr_t</div><div class='del'>-ec_char_array_to_mask (unsigned char *array, int numsubvols)</div><div class='add'>+ec_char_array_to_mask(unsigned char *array, int numsubvols)</div><div class='ctx'> {</div><div class='del'>-        int       i    = 0;</div><div class='del'>-        uintptr_t mask = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uintptr_t mask = 0;</div><div class='ctx'> </div><div class='del'>-        if (array == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (array == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; numsubvols; i++)</div><div class='del'>-                if (array[i])</div><div class='del'>-                        mask |= (1ULL&lt;&lt;i);</div><div class='add'>+    for (i = 0; i &lt; numsubvols; i++)</div><div class='add'>+        if (array[i])</div><div class='add'>+            mask |= (1ULL &lt;&lt; i);</div><div class='ctx'> out:</div><div class='del'>-        return mask;</div><div class='add'>+    return mask;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_entry_find_direction (ec_t *ec, default_args_cbk_t *replies,</div><div class='del'>-                        uint64_t *versions, uint64_t *dirty,</div><div class='del'>-                        unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+ec_heal_entry_find_direction(ec_t *ec, default_args_cbk_t *replies,</div><div class='add'>+                             uint64_t *versions, uint64_t *dirty,</div><div class='add'>+                             unsigned char *sources,</div><div class='add'>+                             unsigned char *healed_sinks)</div><div class='ctx'> {</div><div class='del'>-        uint64_t    xattr[EC_VERSION_SIZE] = {0};</div><div class='del'>-        int         source      = -1;</div><div class='del'>-        uint64_t    max_version = 0;</div><div class='del'>-        int         ret         = 0;</div><div class='del'>-        int         i           = 0;</div><div class='add'>+    uint64_t xattr[EC_VERSION_SIZE] = {0};</div><div class='add'>+    int source = -1;</div><div class='add'>+    uint64_t max_version = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (source == -1)</div><div class='del'>-                        source = i;</div><div class='del'>-</div><div class='del'>-                ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_VERSION,</div><div class='del'>-                                         xattr, EC_VERSION_SIZE);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        versions[i] = xattr[EC_DATA_TXN];</div><div class='del'>-                        if (max_version &lt; versions[i]) {</div><div class='del'>-                                max_version = versions[i];</div><div class='del'>-                                source = i;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                memset (xattr, 0, sizeof(xattr));</div><div class='del'>-                ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_DIRTY,</div><div class='del'>-                                         xattr, EC_VERSION_SIZE);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        dirty[i] = xattr[EC_DATA_TXN];</div><div class='del'>-                }</div><div class='add'>+        if (replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (source == -1)</div><div class='add'>+            source = i;</div><div class='add'>+</div><div class='add'>+        ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_VERSION, xattr,</div><div class='add'>+                                EC_VERSION_SIZE);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            versions[i] = xattr[EC_DATA_TXN];</div><div class='add'>+            if (max_version &lt; versions[i]) {</div><div class='add'>+                max_version = versions[i];</div><div class='add'>+                source = i;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (source &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+        memset(xattr, 0, sizeof(xattr));</div><div class='add'>+        ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_DIRTY, xattr,</div><div class='add'>+                                EC_VERSION_SIZE);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            dirty[i] = xattr[EC_DATA_TXN];</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='add'>+    if (source &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                if (replies[i].op_ret == -1)</div><div class='del'>-                        continue;</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (versions[i] == versions[source])</div><div class='del'>-                        sources[i] = 1;</div><div class='del'>-                else</div><div class='del'>-                        healed_sinks[i] = 1;</div><div class='del'>-        }</div><div class='add'>+        if (replies[i].op_ret == -1)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (versions[i] == versions[source])</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+        else</div><div class='add'>+            healed_sinks[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return source;</div><div class='add'>+    return source;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_adjust_versions (call_frame_t *frame, ec_t *ec, ec_txn_t type,</div><div class='del'>-                    inode_t *inode, int source, unsigned char *sources,</div><div class='del'>-                    unsigned char *healed_sinks, uint64_t *versions,</div><div class='del'>-                    uint64_t *dirty)</div><div class='del'>-{</div><div class='del'>-        int                        i                 = 0;</div><div class='del'>-        int                        ret               = 0;</div><div class='del'>-        int                        call_count        = 0;</div><div class='del'>-        dict_t                     **xattr           = NULL;</div><div class='del'>-        int                        op_ret            = 0;</div><div class='del'>-        loc_t                      loc               = {0};</div><div class='del'>-        gf_boolean_t               erase_dirty       = _gf_false;</div><div class='del'>-        uint64_t                   *versions_xattr   = NULL;</div><div class='del'>-        uint64_t                   *dirty_xattr      = NULL;</div><div class='del'>-        uint64_t                   allzero[2]        = {0};</div><div class='del'>-        unsigned char              *on               = NULL;</div><div class='del'>-        unsigned char              *output           = NULL;</div><div class='del'>-        default_args_cbk_t         *replies          = NULL;</div><div class='del'>-</div><div class='del'>-        /* Allocate the required memory */</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        on = alloca0 (ec-&gt;nodes);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        xattr = GF_CALLOC (ec-&gt;nodes, sizeof (*xattr), gf_common_mt_pointer);</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                op_ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                xattr[i] = dict_new ();</div><div class='del'>-                if (!xattr[i]) {</div><div class='del'>-                        op_ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+ec_adjust_versions(call_frame_t *frame, ec_t *ec, ec_txn_t type, inode_t *inode,</div><div class='add'>+                   int source, unsigned char *sources,</div><div class='add'>+                   unsigned char *healed_sinks, uint64_t *versions,</div><div class='add'>+                   uint64_t *dirty)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    dict_t **xattr = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    gf_boolean_t erase_dirty = _gf_false;</div><div class='add'>+    uint64_t *versions_xattr = NULL;</div><div class='add'>+    uint64_t *dirty_xattr = NULL;</div><div class='add'>+    uint64_t allzero[2] = {0};</div><div class='add'>+    unsigned char *on = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+</div><div class='add'>+    /* Allocate the required memory */</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    xattr = GF_CALLOC(ec-&gt;nodes, sizeof(*xattr), gf_common_mt_pointer);</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        op_ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        xattr[i] = dict_new();</div><div class='add'>+        if (!xattr[i]) {</div><div class='add'>+            op_ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* dirty xattr represents if the file/dir needs heal. Unless all the</div><div class='del'>-         * copies are healed, don't erase it */</div><div class='del'>-        if (EC_COUNT (sources, ec-&gt;nodes) +</div><div class='del'>-            EC_COUNT (healed_sinks, ec-&gt;nodes) == ec-&gt;nodes)</div><div class='del'>-                erase_dirty = _gf_true;</div><div class='del'>-        else</div><div class='del'>-                op_ret = -ENOTCONN;</div><div class='del'>-</div><div class='del'>-        /* Populate the xattr array */</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!sources[i] &amp;&amp; !healed_sinks[i])</div><div class='del'>-                        continue;</div><div class='del'>-                versions_xattr = GF_CALLOC (EC_VERSION_SIZE,</div><div class='del'>-                                            sizeof(*versions_xattr),</div><div class='del'>-                                            gf_common_mt_pointer);</div><div class='del'>-                if (!versions_xattr) {</div><div class='del'>-                        op_ret = -ENOMEM;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                versions_xattr[type] = hton64(versions[source] - versions[i]);</div><div class='del'>-                ret = dict_set_bin (xattr[i], EC_XATTR_VERSION,</div><div class='del'>-                                    versions_xattr,</div><div class='del'>-                                    (sizeof (*versions_xattr) * EC_VERSION_SIZE)</div><div class='del'>-                                   );</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_ret = -ENOMEM;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (erase_dirty) {</div><div class='del'>-                        dirty_xattr = GF_CALLOC (EC_VERSION_SIZE,</div><div class='del'>-                                                 sizeof(*dirty_xattr),</div><div class='del'>-                                                 gf_common_mt_pointer);</div><div class='del'>-                        if (!dirty_xattr) {</div><div class='del'>-                                op_ret = -ENOMEM;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        dirty_xattr[type] = hton64(-dirty[i]);</div><div class='del'>-                        ret = dict_set_bin (xattr[i], EC_XATTR_DIRTY,</div><div class='del'>-                                            dirty_xattr,</div><div class='del'>-                                            (sizeof(*dirty_xattr) *</div><div class='del'>-                                            EC_VERSION_SIZE)</div><div class='del'>-                                           );</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                op_ret = -ENOMEM;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    /* dirty xattr represents if the file/dir needs heal. Unless all the</div><div class='add'>+     * copies are healed, don't erase it */</div><div class='add'>+    if (EC_COUNT(sources, ec-&gt;nodes) + EC_COUNT(healed_sinks, ec-&gt;nodes) ==</div><div class='add'>+        ec-&gt;nodes)</div><div class='add'>+        erase_dirty = _gf_true;</div><div class='add'>+    else</div><div class='add'>+        op_ret = -ENOTCONN;</div><div class='add'>+</div><div class='add'>+    /* Populate the xattr array */</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!sources[i] &amp;&amp; !healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+        versions_xattr = GF_CALLOC(EC_VERSION_SIZE, sizeof(*versions_xattr),</div><div class='add'>+                                   gf_common_mt_pointer);</div><div class='add'>+        if (!versions_xattr) {</div><div class='add'>+            op_ret = -ENOMEM;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        versions_xattr[type] = hton64(versions[source] - versions[i]);</div><div class='add'>+        ret = dict_set_bin(xattr[i], EC_XATTR_VERSION, versions_xattr,</div><div class='add'>+                           (sizeof(*versions_xattr) * EC_VERSION_SIZE));</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_ret = -ENOMEM;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (memcmp (versions_xattr, allzero,</div><div class='del'>-                            (sizeof(*versions_xattr) * EC_VERSION_SIZE)) == 0) {</div><div class='add'>+        if (erase_dirty) {</div><div class='add'>+            dirty_xattr = GF_CALLOC(EC_VERSION_SIZE, sizeof(*dirty_xattr),</div><div class='add'>+                                    gf_common_mt_pointer);</div><div class='add'>+            if (!dirty_xattr) {</div><div class='add'>+                op_ret = -ENOMEM;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        if (!erase_dirty) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+            dirty_xattr[type] = hton64(-dirty[i]);</div><div class='add'>+            ret = dict_set_bin(xattr[i], EC_XATTR_DIRTY, dirty_xattr,</div><div class='add'>+                               (sizeof(*dirty_xattr) * EC_VERSION_SIZE));</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                op_ret = -ENOMEM;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        if (memcmp (dirty_xattr, allzero, (sizeof (*dirty_xattr)</div><div class='del'>-                                    * EC_VERSION_SIZE)) == 0) {</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (memcmp(versions_xattr, allzero,</div><div class='add'>+                   (sizeof(*versions_xattr) * EC_VERSION_SIZE)) == 0) {</div><div class='add'>+            if (!erase_dirty) {</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                on[i] = 1;</div><div class='del'>-                call_count++;</div><div class='add'>+            if (memcmp(dirty_xattr, allzero,</div><div class='add'>+                       (sizeof(*dirty_xattr) * EC_VERSION_SIZE)) == 0) {</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Update the bricks with xattr */</div><div class='del'>-        if (call_count) {</div><div class='del'>-                PARALLEL_FOP_ONLIST (ec-&gt;xl_list, on, ec-&gt;nodes, replies,</div><div class='del'>-                                     frame, ec_wind_xattrop_parallel,</div><div class='del'>-                                     &amp;loc, GF_XATTROP_ADD_ARRAY64, xattr, NULL);</div><div class='del'>-                ret = cluster_fop_success_fill (replies, ec-&gt;nodes, output);</div><div class='del'>-        }</div><div class='add'>+        on[i] = 1;</div><div class='add'>+        call_count++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; call_count) {</div><div class='del'>-                op_ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Update the bricks with xattr */</div><div class='add'>+    if (call_count) {</div><div class='add'>+        PARALLEL_FOP_ONLIST(ec-&gt;xl_list, on, ec-&gt;nodes, replies, frame,</div><div class='add'>+                            ec_wind_xattrop_parallel, &amp;loc,</div><div class='add'>+                            GF_XATTROP_ADD_ARRAY64, xattr, NULL);</div><div class='add'>+        ret = cluster_fop_success_fill(replies, ec-&gt;nodes, output);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; call_count) {</div><div class='add'>+        op_ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /* Cleanup */</div><div class='del'>-        if (xattr) {</div><div class='del'>-                for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                        if (xattr[i])</div><div class='del'>-                                dict_unref (xattr[i]);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (xattr);</div><div class='add'>+    /* Cleanup */</div><div class='add'>+    if (xattr) {</div><div class='add'>+        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+            if (xattr[i])</div><div class='add'>+                dict_unref(xattr[i]);</div><div class='ctx'>         }</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return op_ret;</div><div class='add'>+        GF_FREE(xattr);</div><div class='add'>+    }</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_metadata_find_direction (ec_t *ec, default_args_cbk_t *replies,</div><div class='del'>-                                 uint64_t *versions, uint64_t *dirty,</div><div class='del'>-                            unsigned char *sources, unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        uint64_t xattr[EC_VERSION_SIZE] = {0};</div><div class='del'>-        uint64_t max_version    = 0;</div><div class='del'>-        int      same_count     = 0;</div><div class='del'>-        int      max_same_count = 0;</div><div class='del'>-        int      same_source    = -1;</div><div class='del'>-        int      ret            = 0;</div><div class='del'>-        int      i              = 0;</div><div class='del'>-        int      j              = 0;</div><div class='del'>-        int      *groups        = NULL;</div><div class='del'>-        struct iatt source_ia   = {0};</div><div class='del'>-        struct iatt child_ia    = {0};</div><div class='del'>-</div><div class='del'>-        groups = alloca0 (ec-&gt;nodes * sizeof(*groups));</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='del'>-                groups[i] = -1;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-                if (replies[i].op_ret &lt; 0)</div><div class='del'>-                        continue;</div><div class='del'>-                ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_VERSION,</div><div class='del'>-                                         xattr, EC_VERSION_SIZE);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        versions[i] = xattr[EC_METADATA_TXN];</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                memset (xattr, 0, sizeof (xattr));</div><div class='del'>-                ret = ec_dict_get_array (replies[i].xdata, EC_XATTR_DIRTY,</div><div class='del'>-                                         xattr, EC_VERSION_SIZE);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        dirty[i] = xattr[EC_METADATA_TXN];</div><div class='del'>-                }</div><div class='del'>-                if (groups[i] &gt;= 0) /*Already part of group*/</div><div class='del'>-                        continue;</div><div class='del'>-                groups[i] = i;</div><div class='del'>-                same_count = 1;</div><div class='del'>-                source_ia = replies[i].stat;</div><div class='del'>-                for (j = i + 1; j &lt; ec-&gt;nodes; j++) {</div><div class='del'>-                        if (!replies[j].valid || replies[j].op_ret &lt; 0)</div><div class='del'>-                                continue;</div><div class='del'>-                        child_ia = replies[j].stat;</div><div class='del'>-                        if (!IA_EQUAL(source_ia, child_ia, gfid) ||</div><div class='del'>-                            !IA_EQUAL(source_ia, child_ia, type) ||</div><div class='del'>-                            !IA_EQUAL(source_ia, child_ia, prot) ||</div><div class='del'>-                            !IA_EQUAL(source_ia, child_ia, uid) ||</div><div class='del'>-                            !IA_EQUAL(source_ia, child_ia, gid))</div><div class='del'>-                                continue;</div><div class='del'>-                        if (!are_dicts_equal(replies[i].xdata, replies[j].xdata,</div><div class='del'>-                                             ec_sh_key_match, NULL))</div><div class='del'>-                                continue;</div><div class='del'>-                        groups[j] = i;</div><div class='del'>-                        same_count++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (max_same_count &lt; same_count) {</div><div class='del'>-                        max_same_count = same_count;</div><div class='del'>-                        same_source = i;</div><div class='del'>-                }</div><div class='add'>+ec_heal_metadata_find_direction(ec_t *ec, default_args_cbk_t *replies,</div><div class='add'>+                                uint64_t *versions, uint64_t *dirty,</div><div class='add'>+                                unsigned char *sources,</div><div class='add'>+                                unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    uint64_t xattr[EC_VERSION_SIZE] = {0};</div><div class='add'>+    uint64_t max_version = 0;</div><div class='add'>+    int same_count = 0;</div><div class='add'>+    int max_same_count = 0;</div><div class='add'>+    int same_source = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    int *groups = NULL;</div><div class='add'>+    struct iatt source_ia = {0};</div><div class='add'>+    struct iatt child_ia = {0};</div><div class='add'>+</div><div class='add'>+    groups = alloca0(ec-&gt;nodes * sizeof(*groups));</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='add'>+        groups[i] = -1;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].op_ret &lt; 0)</div><div class='add'>+            continue;</div><div class='add'>+        ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_VERSION, xattr,</div><div class='add'>+                                EC_VERSION_SIZE);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            versions[i] = xattr[EC_METADATA_TXN];</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (max_same_count &lt; ec-&gt;fragments) {</div><div class='del'>-                ret = -EIO;</div><div class='del'>-                goto out;</div><div class='add'>+        memset(xattr, 0, sizeof(xattr));</div><div class='add'>+        ret = ec_dict_get_array(replies[i].xdata, EC_XATTR_DIRTY, xattr,</div><div class='add'>+                                EC_VERSION_SIZE);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            dirty[i] = xattr[EC_METADATA_TXN];</div><div class='add'>+        }</div><div class='add'>+        if (groups[i] &gt;= 0) /*Already part of group*/</div><div class='add'>+            continue;</div><div class='add'>+        groups[i] = i;</div><div class='add'>+        same_count = 1;</div><div class='add'>+        source_ia = replies[i].stat;</div><div class='add'>+        for (j = i + 1; j &lt; ec-&gt;nodes; j++) {</div><div class='add'>+            if (!replies[j].valid || replies[j].op_ret &lt; 0)</div><div class='add'>+                continue;</div><div class='add'>+            child_ia = replies[j].stat;</div><div class='add'>+            if (!IA_EQUAL(source_ia, child_ia, gfid) ||</div><div class='add'>+                !IA_EQUAL(source_ia, child_ia, type) ||</div><div class='add'>+                !IA_EQUAL(source_ia, child_ia, prot) ||</div><div class='add'>+                !IA_EQUAL(source_ia, child_ia, uid) ||</div><div class='add'>+                !IA_EQUAL(source_ia, child_ia, gid))</div><div class='add'>+                continue;</div><div class='add'>+            if (!are_dicts_equal(replies[i].xdata, replies[j].xdata,</div><div class='add'>+                                 ec_sh_key_match, NULL))</div><div class='add'>+                continue;</div><div class='add'>+            groups[j] = i;</div><div class='add'>+            same_count++;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (max_same_count &lt; same_count) {</div><div class='add'>+            max_same_count = same_count;</div><div class='add'>+            same_source = i;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (groups[i] == groups[same_source])</div><div class='del'>-                        sources[i] = 1;</div><div class='del'>-                else if (replies[i].valid &amp;&amp; replies[i].op_ret &gt;= 0)</div><div class='del'>-                        healed_sinks[i] = 1;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (sources[i] &amp;&amp; (versions[i] &gt; max_version)) {</div><div class='del'>-                         same_source = i;</div><div class='del'>-                         max_version = versions[i];</div><div class='del'>-                }</div><div class='add'>+    if (max_same_count &lt; ec-&gt;fragments) {</div><div class='add'>+        ret = -EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (groups[i] == groups[same_source])</div><div class='add'>+            sources[i] = 1;</div><div class='add'>+        else if (replies[i].valid &amp;&amp; replies[i].op_ret &gt;= 0)</div><div class='add'>+            healed_sinks[i] = 1;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (sources[i] &amp;&amp; (versions[i] &gt; max_version)) {</div><div class='add'>+            same_source = i;</div><div class='add'>+            max_version = versions[i];</div><div class='ctx'>         }</div><div class='del'>-        ret = same_source;</div><div class='add'>+    }</div><div class='add'>+    ret = same_source;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_metadata_prepare (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                   unsigned char *locked_on, default_args_cbk_t *replies,</div><div class='del'>-                   uint64_t *versions, uint64_t *dirty, unsigned char *sources,</div><div class='del'>-                   unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        loc_t              loc        = {0};</div><div class='del'>-        unsigned char      *output    = NULL;</div><div class='del'>-        unsigned char      *lookup_on = NULL;</div><div class='del'>-        int                ret        = 0;</div><div class='del'>-        int                source     = 0;</div><div class='del'>-        default_args_cbk_t *greplies  = NULL;</div><div class='del'>-        int                i          = 0;</div><div class='del'>-        EC_REPLIES_ALLOC (greplies, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        lookup_on = alloca0 (ec-&gt;nodes);</div><div class='del'>-        ret = cluster_lookup (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies,</div><div class='del'>-                              output, frame, ec-&gt;xl, &amp;loc, NULL);</div><div class='del'>-        if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_metadata_prepare(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                           unsigned char *locked_on,</div><div class='add'>+                           default_args_cbk_t *replies, uint64_t *versions,</div><div class='add'>+                           uint64_t *dirty, unsigned char *sources,</div><div class='add'>+                           unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    unsigned char *lookup_on = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int source = 0;</div><div class='add'>+    default_args_cbk_t *greplies = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    EC_REPLIES_ALLOC(greplies, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    lookup_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = cluster_lookup(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='add'>+                         frame, ec-&gt;xl, &amp;loc, NULL);</div><div class='add'>+    if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (lookup_on, output, ec-&gt;nodes);</div><div class='del'>-        /*Use getxattr to get the filtered xattrs which filter internal xattrs*/</div><div class='del'>-        ret = cluster_getxattr (ec-&gt;xl_list, lookup_on, ec-&gt;nodes, greplies,</div><div class='del'>-                                output, frame, ec-&gt;xl, &amp;loc, NULL, NULL);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (lookup_on[i] &amp;&amp; !output[i]) {</div><div class='del'>-                        replies[i].valid = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if (replies[i].xdata) {</div><div class='del'>-                        dict_unref (replies[i].xdata);</div><div class='del'>-                        replies[i].xdata = NULL;</div><div class='del'>-                        if (greplies[i].xattr)</div><div class='del'>-                                replies[i].xdata = dict_ref (greplies[i].xattr);</div><div class='del'>-                }</div><div class='add'>+    memcpy(lookup_on, output, ec-&gt;nodes);</div><div class='add'>+    /*Use getxattr to get the filtered xattrs which filter internal xattrs*/</div><div class='add'>+    ret = cluster_getxattr(ec-&gt;xl_list, lookup_on, ec-&gt;nodes, greplies, output,</div><div class='add'>+                           frame, ec-&gt;xl, &amp;loc, NULL, NULL);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (lookup_on[i] &amp;&amp; !output[i]) {</div><div class='add'>+            replies[i].valid = 0;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if (replies[i].xdata) {</div><div class='add'>+            dict_unref(replies[i].xdata);</div><div class='add'>+            replies[i].xdata = NULL;</div><div class='add'>+            if (greplies[i].xattr)</div><div class='add'>+                replies[i].xdata = dict_ref(greplies[i].xattr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        source = ec_heal_metadata_find_direction (ec, replies, versions,</div><div class='del'>-                                         dirty, sources, healed_sinks);</div><div class='del'>-        if (source &lt; 0) {</div><div class='del'>-                ret = -EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = source;</div><div class='add'>+    source = ec_heal_metadata_find_direction(ec, replies, versions, dirty,</div><div class='add'>+                                             sources, healed_sinks);</div><div class='add'>+    if (source &lt; 0) {</div><div class='add'>+        ret = -EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = source;</div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (greplies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(greplies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Metadata heal */</div><div class='ctx'> int</div><div class='del'>-__ec_removexattr_sinks (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                        int source, unsigned char *sources,</div><div class='del'>-                        unsigned char *healed_sinks,</div><div class='del'>-                        default_args_cbk_t *replies)</div><div class='del'>-{</div><div class='del'>-        int   i   = 0;</div><div class='del'>-        int   ret = 0;</div><div class='del'>-        loc_t loc = {0};</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (i == source)</div><div class='del'>-                        continue;</div><div class='del'>-                if (!sources[i] &amp;&amp; !healed_sinks[i])</div><div class='del'>-                        continue;</div><div class='del'>-                ret = dict_foreach (replies[i].xdata, ec_heal_xattr_clean,</div><div class='del'>-                                    replies[source].xdata);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                        healed_sinks[i] = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (replies[i].xdata-&gt;count == 0) {</div><div class='del'>-                        continue;</div><div class='del'>-                } else if (sources[i]) {</div><div class='del'>-                        /* This can happen if setxattr/removexattr succeeds on</div><div class='del'>-                         * the bricks but fails to update the version. This</div><div class='del'>-                         * will make sure that the xattrs are made equal after</div><div class='del'>-                         * heal*/</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                        healed_sinks[i] = 1;</div><div class='del'>-                }</div><div class='add'>+__ec_removexattr_sinks(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                       int source, unsigned char *sources,</div><div class='add'>+                       unsigned char *healed_sinks, default_args_cbk_t *replies)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (i == source)</div><div class='add'>+            continue;</div><div class='add'>+        if (!sources[i] &amp;&amp; !healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+        ret = dict_foreach(replies[i].xdata, ec_heal_xattr_clean,</div><div class='add'>+                           replies[source].xdata);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = syncop_removexattr (ec-&gt;xl_list[i], &amp;loc, "",</div><div class='del'>-                                          replies[i].xdata, NULL);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        healed_sinks[i] = 0;</div><div class='add'>+        if (replies[i].xdata-&gt;count == 0) {</div><div class='add'>+            continue;</div><div class='add'>+        } else if (sources[i]) {</div><div class='add'>+            /* This can happen if setxattr/removexattr succeeds on</div><div class='add'>+             * the bricks but fails to update the version. This</div><div class='add'>+             * will make sure that the xattrs are made equal after</div><div class='add'>+             * heal*/</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            healed_sinks[i] = 1;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0)</div><div class='del'>-                return -ENOTCONN;</div><div class='del'>-        return 0;</div><div class='add'>+        ret = syncop_removexattr(ec-&gt;xl_list[i], &amp;loc, "", replies[i].xdata,</div><div class='add'>+                                 NULL);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0)</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_metadata (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                    unsigned char *locked_on, unsigned char *sources,</div><div class='del'>-                    unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        loc_t              loc           = {0};</div><div class='del'>-        int                ret           = 0;</div><div class='del'>-        int                source        = 0;</div><div class='del'>-        default_args_cbk_t *replies      = NULL;</div><div class='del'>-        default_args_cbk_t *sreplies     = NULL;</div><div class='del'>-        uint64_t           *versions     = NULL;</div><div class='del'>-        uint64_t           *dirty        = NULL;</div><div class='del'>-        unsigned char      *output       = NULL;</div><div class='del'>-        dict_t             *source_dict  = NULL;</div><div class='del'>-        struct iatt        source_buf    = {0};</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        EC_REPLIES_ALLOC (sreplies, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        versions = alloca0 (ec-&gt;nodes * sizeof (*versions));</div><div class='del'>-        dirty = alloca0 (ec-&gt;nodes * sizeof (*dirty));</div><div class='del'>-        source = __ec_heal_metadata_prepare (frame, ec, inode, locked_on, replies,</div><div class='del'>-                                    versions, dirty, sources, healed_sinks);</div><div class='del'>-        if (source &lt; 0) {</div><div class='del'>-                ret = -EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_metadata(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                   unsigned char *locked_on, unsigned char *sources,</div><div class='add'>+                   unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int source = 0;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    default_args_cbk_t *sreplies = NULL;</div><div class='add'>+    uint64_t *versions = NULL;</div><div class='add'>+    uint64_t *dirty = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    dict_t *source_dict = NULL;</div><div class='add'>+    struct iatt source_buf = {0};</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    EC_REPLIES_ALLOC(sreplies, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    versions = alloca0(ec-&gt;nodes * sizeof(*versions));</div><div class='add'>+    dirty = alloca0(ec-&gt;nodes * sizeof(*dirty));</div><div class='add'>+    source = __ec_heal_metadata_prepare(frame, ec, inode, locked_on, replies,</div><div class='add'>+                                        versions, dirty, sources, healed_sinks);</div><div class='add'>+    if (source &lt; 0) {</div><div class='add'>+        ret = -EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((EC_COUNT (sources, ec-&gt;nodes) == ec-&gt;nodes) ||</div><div class='del'>-            (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto erase_dirty;</div><div class='del'>-        }</div><div class='add'>+    if ((EC_COUNT(sources, ec-&gt;nodes) == ec-&gt;nodes) ||</div><div class='add'>+        (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto erase_dirty;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        source_buf = replies[source].stat;</div><div class='del'>-        ret = cluster_setattr (ec-&gt;xl_list, healed_sinks, ec-&gt;nodes, sreplies,</div><div class='del'>-                               output, frame, ec-&gt;xl, &amp;loc,</div><div class='del'>-                               &amp;source_buf, GF_SET_ATTR_MODE |</div><div class='del'>-                               GF_SET_ATTR_UID | GF_SET_ATTR_GID, NULL);</div><div class='del'>-        /*In case the operation fails on some of the subvols*/</div><div class='del'>-        memcpy (healed_sinks, output, ec-&gt;nodes);</div><div class='del'>-        if (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    source_buf = replies[source].stat;</div><div class='add'>+    ret = cluster_setattr(ec-&gt;xl_list, healed_sinks, ec-&gt;nodes, sreplies,</div><div class='add'>+                          output, frame, ec-&gt;xl, &amp;loc, &amp;source_buf,</div><div class='add'>+                          GF_SET_ATTR_MODE | GF_SET_ATTR_UID | GF_SET_ATTR_GID,</div><div class='add'>+                          NULL);</div><div class='add'>+    /*In case the operation fails on some of the subvols*/</div><div class='add'>+    memcpy(healed_sinks, output, ec-&gt;nodes);</div><div class='add'>+    if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = __ec_removexattr_sinks (frame, ec, inode, source, sources,</div><div class='del'>-                                      healed_sinks, replies);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = __ec_removexattr_sinks(frame, ec, inode, source, sources,</div><div class='add'>+                                 healed_sinks, replies);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        source_dict = dict_ref (replies[source].xdata);</div><div class='del'>-        if (dict_foreach_match (source_dict, ec_ignorable_key_match, NULL,</div><div class='del'>-                                dict_remove_foreach_fn, NULL) == -1) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    source_dict = dict_ref(replies[source].xdata);</div><div class='add'>+    if (dict_foreach_match(source_dict, ec_ignorable_key_match, NULL,</div><div class='add'>+                           dict_remove_foreach_fn, NULL) == -1) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cluster_setxattr (ec-&gt;xl_list, healed_sinks, ec-&gt;nodes,</div><div class='del'>-                                replies, output, frame, ec-&gt;xl, &amp;loc,</div><div class='del'>-                                source_dict, 0, NULL);</div><div class='add'>+    ret = cluster_setxattr(ec-&gt;xl_list, healed_sinks, ec-&gt;nodes, replies,</div><div class='add'>+                           output, frame, ec-&gt;xl, &amp;loc, source_dict, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        EC_INTERSECT (healed_sinks, healed_sinks, output, ec-&gt;nodes);</div><div class='del'>-        if (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    EC_INTERSECT(healed_sinks, healed_sinks, output, ec-&gt;nodes);</div><div class='add'>+    if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> erase_dirty:</div><div class='del'>-        ret = ec_adjust_versions (frame, ec, EC_METADATA_TXN, inode, source,</div><div class='del'>-                                  sources, healed_sinks, versions, dirty);</div><div class='add'>+    ret = ec_adjust_versions(frame, ec, EC_METADATA_TXN, inode, source, sources,</div><div class='add'>+                             healed_sinks, versions, dirty);</div><div class='ctx'> out:</div><div class='del'>-        if (source_dict)</div><div class='del'>-                dict_unref (source_dict);</div><div class='add'>+    if (source_dict)</div><div class='add'>+        dict_unref(source_dict);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        cluster_replies_wipe (sreplies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    cluster_replies_wipe(sreplies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_metadata (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                  unsigned char *sources, unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        unsigned char      *locked_on  = NULL;</div><div class='del'>-        unsigned char      *up_subvols = NULL;</div><div class='del'>-        unsigned char      *output     = NULL;</div><div class='del'>-        int                ret         = 0;</div><div class='del'>-        default_args_cbk_t *replies    = NULL;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        locked_on = alloca0(ec-&gt;nodes);</div><div class='del'>-        output = alloca0(ec-&gt;nodes);</div><div class='del'>-        up_subvols = alloca0(ec-&gt;nodes);</div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='del'>-        ret = cluster_inodelk (ec-&gt;xl_list, up_subvols, ec-&gt;nodes, replies,</div><div class='del'>-                               locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0,</div><div class='del'>-                               0);</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: Skipping heal "</div><div class='del'>-                                "as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (inode-&gt;gfid), ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ret = __ec_heal_metadata (frame, ec, inode, locked_on, sources,</div><div class='del'>-                                          healed_sinks);</div><div class='del'>-        }</div><div class='add'>+ec_heal_metadata(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                 unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *up_subvols = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    up_subvols = alloca0(ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='add'>+    ret = cluster_inodelk(ec-&gt;xl_list, up_subvols, ec-&gt;nodes, replies,</div><div class='add'>+                          locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping heal "</div><div class='add'>+                         "as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ret = __ec_heal_metadata(frame, ec, inode, locked_on, sources,</div><div class='add'>+                                 healed_sinks);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*entry heal*/</div><div class='ctx'> int</div><div class='del'>-__ec_heal_entry_prepare (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                         unsigned char *locked_on, uint64_t *versions,</div><div class='del'>-                         uint64_t *dirty, unsigned char *sources,</div><div class='del'>-                         unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        loc_t              loc      = {0};</div><div class='del'>-        int                source   = 0;</div><div class='del'>-        int                ret      = 0;</div><div class='del'>-        default_args_cbk_t *replies = NULL;</div><div class='del'>-        unsigned char      *output  = NULL;</div><div class='del'>-        dict_t             *xdata   = NULL;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_entry_prepare(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                        unsigned char *locked_on, uint64_t *versions,</div><div class='add'>+                        uint64_t *dirty, unsigned char *sources,</div><div class='add'>+                        unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int source = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_set_uint64(xdata, EC_XATTR_VERSION, 0) ||</div><div class='del'>-            dict_set_uint64(xdata, EC_XATTR_DIRTY, 0)) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dict_set_uint64(xdata, EC_XATTR_VERSION, 0) ||</div><div class='add'>+        dict_set_uint64(xdata, EC_XATTR_DIRTY, 0)) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        ret = cluster_lookup (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies,</div><div class='del'>-                              output, frame, ec-&gt;xl, &amp;loc, xdata);</div><div class='del'>-        if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = cluster_lookup(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='add'>+                         frame, ec-&gt;xl, &amp;loc, xdata);</div><div class='add'>+    if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        source = ec_heal_entry_find_direction (ec, replies, versions,</div><div class='del'>-                                         dirty, sources, healed_sinks);</div><div class='del'>-        if (source &lt; 0) {</div><div class='del'>-                ret = -EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = source;</div><div class='add'>+    source = ec_heal_entry_find_direction(ec, replies, versions, dirty, sources,</div><div class='add'>+                                          healed_sinks);</div><div class='add'>+    if (source &lt; 0) {</div><div class='add'>+        ret = -EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = source;</div><div class='ctx'> out:</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int32_t</div><div class='del'>-ec_set_new_entry_dirty (ec_t *ec, loc_t *loc, struct iatt *ia,</div><div class='del'>-                        call_frame_t *frame, xlator_t *this, unsigned char *on)</div><div class='del'>-{</div><div class='del'>-        dict_t              *xattr = NULL;</div><div class='del'>-        int32_t             ret    = -1;</div><div class='del'>-        default_args_cbk_t  *replies = NULL;</div><div class='del'>-        unsigned char       *output  = NULL;</div><div class='del'>-        uint64_t            dirty[EC_VERSION_SIZE] = {1, 1};</div><div class='del'>-        loc_t               newloc = {0};</div><div class='del'>-</div><div class='del'>-        /*Symlinks don't have any data to be healed*/</div><div class='del'>-        if (ia-&gt;ia_type == IA_IFLNK)</div><div class='del'>-                dirty[EC_DATA_TXN] = 0;</div><div class='del'>-</div><div class='del'>-        newloc.inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        gf_uuid_copy (newloc.gfid, ia-&gt;ia_gfid);</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        xattr = dict_new();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+ec_set_new_entry_dirty(ec_t *ec, loc_t *loc, struct iatt *ia,</div><div class='add'>+                       call_frame_t *frame, xlator_t *this, unsigned char *on)</div><div class='add'>+{</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    uint64_t dirty[EC_VERSION_SIZE] = {1, 1};</div><div class='add'>+    loc_t newloc = {0};</div><div class='add'>+</div><div class='add'>+    /*Symlinks don't have any data to be healed*/</div><div class='add'>+    if (ia-&gt;ia_type == IA_IFLNK)</div><div class='add'>+        dirty[EC_DATA_TXN] = 0;</div><div class='add'>+</div><div class='add'>+    newloc.inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    gf_uuid_copy(newloc.gfid, ia-&gt;ia_gfid);</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ec_dict_set_array (xattr, EC_XATTR_DIRTY, dirty,</div><div class='del'>-                                 EC_VERSION_SIZE);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = ec_dict_set_array(xattr, EC_XATTR_DIRTY, dirty, EC_VERSION_SIZE);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = cluster_xattrop (ec-&gt;xl_list, on, ec-&gt;nodes, replies, output,</div><div class='del'>-                               frame, ec-&gt;xl, &amp;newloc,</div><div class='del'>-                               GF_XATTROP_ADD_ARRAY64, xattr, NULL);</div><div class='add'>+    ret = cluster_xattrop(ec-&gt;xl_list, on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                          ec-&gt;xl, &amp;newloc, GF_XATTROP_ADD_ARRAY64, xattr, NULL);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; ec-&gt;fragments) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; ec-&gt;fragments) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;newloc);</div><div class='del'>-        return ret;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;newloc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Name heal*/</div><div class='ctx'> int</div><div class='del'>-ec_delete_stale_name (dict_t *gfid_db, char *key, data_t *d, void *data)</div><div class='del'>-{</div><div class='del'>-        struct ec_name_data *name_data   = data;</div><div class='del'>-        struct iatt         *ia          = NULL;</div><div class='del'>-        ec_t                *ec          = NULL;</div><div class='del'>-        loc_t               loc          = {0};</div><div class='del'>-        unsigned char       *same        = data_to_bin (d);</div><div class='del'>-        default_args_cbk_t  *replies     = NULL;</div><div class='del'>-        unsigned char       *output      = NULL;</div><div class='del'>-        int                 ret          = 0;</div><div class='del'>-        int                 estale_count = 0;</div><div class='del'>-        int                 i            = 0;</div><div class='del'>-        call_frame_t        *frame       = name_data-&gt;frame;</div><div class='del'>-</div><div class='del'>-        ec = name_data-&gt;frame-&gt;this-&gt;private;</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        if (EC_COUNT (same, ec-&gt;nodes) &gt;= ec-&gt;fragments) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+ec_delete_stale_name(dict_t *gfid_db, char *key, data_t *d, void *data)</div><div class='add'>+{</div><div class='add'>+    struct ec_name_data *name_data = data;</div><div class='add'>+    struct iatt *ia = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    unsigned char *same = data_to_bin(d);</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int estale_count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    call_frame_t *frame = name_data-&gt;frame;</div><div class='add'>+</div><div class='add'>+    ec = name_data-&gt;frame-&gt;this-&gt;private;</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    if (EC_COUNT(same, ec-&gt;nodes) &gt;= ec-&gt;fragments) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_new (name_data-&gt;parent-&gt;table);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    loc.inode = inode_new(name_data-&gt;parent-&gt;table);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_parse(key, loc.gfid);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = cluster_lookup(ec-&gt;xl_list, name_data-&gt;participants, ec-&gt;nodes,</div><div class='add'>+                         replies, output, name_data-&gt;frame, ec-&gt;xl, &amp;loc, NULL);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].op_ret == -1) {</div><div class='add'>+            if (replies[i].op_errno == ESTALE || replies[i].op_errno == ENOENT)</div><div class='add'>+                estale_count++;</div><div class='add'>+            else</div><div class='add'>+                name_data-&gt;participants[i] = 0;</div><div class='ctx'>         }</div><div class='del'>-        gf_uuid_parse (key, loc.gfid);</div><div class='del'>-        output = alloca0(ec-&gt;nodes);</div><div class='del'>-        ret = cluster_lookup (ec-&gt;xl_list, name_data-&gt;participants, ec-&gt;nodes,</div><div class='del'>-                              replies, output, name_data-&gt;frame, ec-&gt;xl, &amp;loc,</div><div class='del'>-                              NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-                if (replies[i].op_ret == -1) {</div><div class='del'>-                        if (replies[i].op_errno == ESTALE ||</div><div class='del'>-                            replies[i].op_errno == ENOENT)</div><div class='del'>-                                estale_count++;</div><div class='del'>-                        else</div><div class='del'>-                                name_data-&gt;participants[i] = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (estale_count &lt;= ec-&gt;redundancy) {</div><div class='add'>+        /* We have at least ec-&gt;fragments number of fragments, so the</div><div class='add'>+         * file is recoverable, so don't delete it*/</div><div class='ctx'> </div><div class='del'>-        if (estale_count &lt;= ec-&gt;redundancy) {</div><div class='del'>-                /* We have at least ec-&gt;fragments number of fragments, so the</div><div class='del'>-                 * file is recoverable, so don't delete it*/</div><div class='add'>+        /* Please note that the lookup call above could fail with</div><div class='add'>+         * ENOTCONN on all subvoumes and still this branch will be</div><div class='add'>+         * true, but in those cases conservatively we decide to not</div><div class='add'>+         * delete the file until we are sure*/</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                /* Please note that the lookup call above could fail with</div><div class='del'>-                 * ENOTCONN on all subvoumes and still this branch will be</div><div class='del'>-                 * true, but in those cases conservatively we decide to not</div><div class='del'>-                 * delete the file until we are sure*/</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+    /*Noway to recover, delete the name*/</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    loc.parent = inode_ref(name_data-&gt;parent);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, loc.parent-&gt;gfid);</div><div class='add'>+    loc.name = name_data-&gt;name;</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (same[i] &amp;&amp; replies[i].valid &amp;&amp; (replies[i].op_ret == 0)) {</div><div class='add'>+            ia = &amp;replies[i].stat;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Noway to recover, delete the name*/</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        loc.parent = inode_ref (name_data-&gt;parent);</div><div class='del'>-        gf_uuid_copy (loc.pargfid, loc.parent-&gt;gfid);</div><div class='del'>-        loc.name = name_data-&gt;name;</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (same[i] &amp;&amp; replies[i].valid &amp;&amp; (replies[i].op_ret == 0)) {</div><div class='del'>-                        ia = &amp;replies[i].stat;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (!ia) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ia) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (IA_ISDIR(ia-&gt;ia_type)) {</div><div class='add'>+        ret = cluster_rmdir(ec-&gt;xl_list, same, ec-&gt;nodes, replies, output,</div><div class='add'>+                            frame, ec-&gt;xl, &amp;loc, 1, NULL);</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                     "cluster rmdir succeeded on %d "</div><div class='add'>+                     "nodes",</div><div class='add'>+                     ret);</div><div class='add'>+    } else {</div><div class='add'>+        ret = cluster_unlink(ec-&gt;xl_list, same, ec-&gt;nodes, replies, output,</div><div class='add'>+                             frame, ec-&gt;xl, &amp;loc, 0, NULL);</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                     "cluster unlink succeeded on %d "</div><div class='add'>+                     "nodes",</div><div class='add'>+                     ret);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (IA_ISDIR (ia-&gt;ia_type)) {</div><div class='del'>-                ret = cluster_rmdir (ec-&gt;xl_list, same, ec-&gt;nodes, replies,</div><div class='del'>-                                     output, frame, ec-&gt;xl, &amp;loc, 1, NULL);</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "cluster rmdir succeeded on %d "</div><div class='del'>-                              "nodes", ret);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (output[i]) {</div><div class='add'>+            same[i] = 0;</div><div class='add'>+            name_data-&gt;enoent[i] = 1;</div><div class='ctx'>         } else {</div><div class='del'>-                ret = cluster_unlink (ec-&gt;xl_list, same, ec-&gt;nodes, replies,</div><div class='del'>-                                      output, frame, ec-&gt;xl, &amp;loc, 0, NULL);</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "cluster unlink succeeded on %d "</div><div class='del'>-                              "nodes", ret);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (output[i]) {</div><div class='del'>-                        same[i] = 0;</div><div class='del'>-                        name_data-&gt;enoent[i] = 1;</div><div class='del'>-                } else {</div><div class='del'>-                        /*op failed*/</div><div class='del'>-                        if (same[i])</div><div class='del'>-                                name_data-&gt;participants[i] = 0;</div><div class='del'>-                }</div><div class='add'>+            /*op failed*/</div><div class='add'>+            if (same[i])</div><div class='add'>+                name_data-&gt;participants[i] = 0;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='del'>-        /*This will help in making decisions about creating names*/</div><div class='del'>-        dict_del (gfid_db, key);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+    /*This will help in making decisions about creating names*/</div><div class='add'>+    dict_del(gfid_db, key);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s/%s: heal failed %s",</div><div class='del'>-                        uuid_utoa (name_data-&gt;parent-&gt;gfid), name_data-&gt;name,</div><div class='del'>-                        strerror (-ret));</div><div class='del'>-        }</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "%s/%s: heal failed %s",</div><div class='add'>+                     uuid_utoa(name_data-&gt;parent-&gt;gfid), name_data-&gt;name,</div><div class='add'>+                     strerror(-ret));</div><div class='add'>+    }</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_delete_stale_names (call_frame_t *frame, ec_t *ec, inode_t *parent,</div><div class='del'>-                       char *name, default_args_cbk_t *replies, dict_t *gfid_db,</div><div class='del'>-                       unsigned char *enoent, unsigned char *gfidless,</div><div class='del'>-                       unsigned char *participants)</div><div class='add'>+ec_delete_stale_names(call_frame_t *frame, ec_t *ec, inode_t *parent,</div><div class='add'>+                      char *name, default_args_cbk_t *replies, dict_t *gfid_db,</div><div class='add'>+                      unsigned char *enoent, unsigned char *gfidless,</div><div class='add'>+                      unsigned char *participants)</div><div class='ctx'> {</div><div class='del'>-        struct ec_name_data name_data = {0};</div><div class='add'>+    struct ec_name_data name_data = {0};</div><div class='ctx'> </div><div class='del'>-        name_data.enoent = enoent;</div><div class='del'>-        name_data.gfidless = gfidless;</div><div class='del'>-        name_data.participants = participants;</div><div class='del'>-        name_data.name = name;</div><div class='del'>-        name_data.parent = parent;</div><div class='del'>-        name_data.frame = frame;</div><div class='del'>-        name_data.replies = replies;</div><div class='del'>-        return dict_foreach (gfid_db, ec_delete_stale_name, &amp;name_data);</div><div class='add'>+    name_data.enoent = enoent;</div><div class='add'>+    name_data.gfidless = gfidless;</div><div class='add'>+    name_data.participants = participants;</div><div class='add'>+    name_data.name = name;</div><div class='add'>+    name_data.parent = parent;</div><div class='add'>+    name_data.frame = frame;</div><div class='add'>+    name_data.replies = replies;</div><div class='add'>+    return dict_foreach(gfid_db, ec_delete_stale_name, &amp;name_data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_assign_same (dict_t *dict, char *key, data_t *value, void *data)</div><div class='add'>+_assign_same(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        struct ec_name_data *name_data = data;</div><div class='add'>+    struct ec_name_data *name_data = data;</div><div class='ctx'> </div><div class='del'>-        name_data-&gt;same = data_to_bin (value);</div><div class='del'>-        return 0;</div><div class='add'>+    name_data-&gt;same = data_to_bin(value);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_create_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name,</div><div class='del'>-                default_args_cbk_t *lookup_replies, dict_t *gfid_db,</div><div class='del'>-                unsigned char *enoent, unsigned char *participants)</div><div class='del'>-{</div><div class='del'>-        int                 ret       = 0;</div><div class='del'>-        int                 i         = 0;</div><div class='del'>-        struct ec_name_data name_data = {0};</div><div class='del'>-        struct iatt         *ia       = NULL;</div><div class='del'>-        unsigned char       *output   = 0;</div><div class='del'>-        unsigned char       *output1  = 0;</div><div class='del'>-        unsigned char       *on       = NULL;</div><div class='del'>-        default_args_cbk_t  *replies  = NULL;</div><div class='del'>-        loc_t               loc       = {0};</div><div class='del'>-        loc_t               srcloc    = {0};</div><div class='del'>-        unsigned char       *link     = NULL;</div><div class='del'>-        unsigned char       *create   = NULL;</div><div class='del'>-        dict_t              *xdata    = NULL;</div><div class='del'>-        char                *linkname = NULL;</div><div class='del'>-        ec_config_t         config;</div><div class='del'>-        /* There should be just one gfid key */</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        if (gfid_db-&gt;count != 1) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_foreach (gfid_db, _assign_same, &amp;name_data);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        /*There should at least be one valid success reply with gfid*/</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='del'>-                if (name_data.same[i])</div><div class='del'>-                        break;</div><div class='add'>+ec_create_name(call_frame_t *frame, ec_t *ec, inode_t *parent, char *name,</div><div class='add'>+               default_args_cbk_t *lookup_replies, dict_t *gfid_db,</div><div class='add'>+               unsigned char *enoent, unsigned char *participants)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct ec_name_data name_data = {0};</div><div class='add'>+    struct iatt *ia = NULL;</div><div class='add'>+    unsigned char *output = 0;</div><div class='add'>+    unsigned char *output1 = 0;</div><div class='add'>+    unsigned char *on = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    loc_t srcloc = {0};</div><div class='add'>+    unsigned char *link = NULL;</div><div class='add'>+    unsigned char *create = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    char *linkname = NULL;</div><div class='add'>+    ec_config_t config;</div><div class='add'>+    /* There should be just one gfid key */</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    if (gfid_db-&gt;count != 1) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (i == ec-&gt;nodes) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_foreach(gfid_db, _assign_same, &amp;name_data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    /*There should at least be one valid success reply with gfid*/</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='add'>+        if (name_data.same[i])</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        ia = &amp;lookup_replies[i].stat;</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        loc.parent = inode_ref (parent);</div><div class='del'>-        gf_uuid_copy (loc.pargfid, parent-&gt;gfid);</div><div class='del'>-        loc.inode = inode_new (parent-&gt;table);</div><div class='del'>-        if (loc.inode)</div><div class='del'>-                srcloc.inode = inode_ref (loc.inode);</div><div class='del'>-        gf_uuid_copy (srcloc.gfid, ia-&gt;ia_gfid);</div><div class='del'>-        if (!loc.inode || !xdata || dict_set_static_bin (xdata, "gfid-req",</div><div class='del'>-                                                         ia-&gt;ia_gfid,</div><div class='del'>-                                                        sizeof (ia-&gt;ia_gfid))) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        loc.name = name;</div><div class='del'>-        link = alloca0 (ec-&gt;nodes);</div><div class='del'>-        create = alloca0 (ec-&gt;nodes);</div><div class='del'>-        on = alloca0 (ec-&gt;nodes);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        output1 = alloca0 (ec-&gt;nodes);</div><div class='add'>+    if (i == ec-&gt;nodes) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!lookup_replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-                if (lookup_replies[i].op_ret)</div><div class='del'>-                        continue;</div><div class='del'>-                on[i] = 1;</div><div class='del'>-        }</div><div class='del'>-        switch (ia-&gt;ia_type) {</div><div class='add'>+    ia = &amp;lookup_replies[i].stat;</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, parent-&gt;gfid);</div><div class='add'>+    loc.inode = inode_new(parent-&gt;table);</div><div class='add'>+    if (loc.inode)</div><div class='add'>+        srcloc.inode = inode_ref(loc.inode);</div><div class='add'>+    gf_uuid_copy(srcloc.gfid, ia-&gt;ia_gfid);</div><div class='add'>+    if (!loc.inode || !xdata ||</div><div class='add'>+        dict_set_static_bin(xdata, "gfid-req", ia-&gt;ia_gfid,</div><div class='add'>+                            sizeof(ia-&gt;ia_gfid))) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    loc.name = name;</div><div class='add'>+    link = alloca0(ec-&gt;nodes);</div><div class='add'>+    create = alloca0(ec-&gt;nodes);</div><div class='add'>+    on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    output1 = alloca0(ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!lookup_replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (lookup_replies[i].op_ret)</div><div class='add'>+            continue;</div><div class='add'>+        on[i] = 1;</div><div class='add'>+    }</div><div class='add'>+    switch (ia-&gt;ia_type) {</div><div class='ctx'>         case IA_IFDIR:</div><div class='del'>-                ec_set_new_entry_dirty (ec, &amp;loc, ia, frame, ec-&gt;xl, on);</div><div class='del'>-                (void) cluster_mkdir (ec-&gt;xl_list, enoent, ec-&gt;nodes,</div><div class='del'>-                                   replies, output, frame, ec-&gt;xl, &amp;loc,</div><div class='del'>-                                   st_mode_from_ia (ia-&gt;ia_prot,</div><div class='del'>-                                                ia-&gt;ia_type), 0, xdata);</div><div class='del'>-                break;</div><div class='add'>+            ec_set_new_entry_dirty(ec, &amp;loc, ia, frame, ec-&gt;xl, on);</div><div class='add'>+            (void)cluster_mkdir(</div><div class='add'>+                ec-&gt;xl_list, enoent, ec-&gt;nodes, replies, output, frame, ec-&gt;xl,</div><div class='add'>+                &amp;loc, st_mode_from_ia(ia-&gt;ia_prot, ia-&gt;ia_type), 0, xdata);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case IA_IFLNK:</div><div class='del'>-                /*Check for hard links and create/link*/</div><div class='del'>-                ret = cluster_lookup (ec-&gt;xl_list, enoent, ec-&gt;nodes,</div><div class='del'>-                                      replies, output, frame, ec-&gt;xl,</div><div class='del'>-                                      &amp;srcloc, NULL);</div><div class='del'>-                for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                        if (output[i]) {</div><div class='del'>-                                link[i] = 1;</div><div class='del'>-                        } else {</div><div class='del'>-                                if (replies[i].op_errno == ENOENT ||</div><div class='del'>-                                    replies[i].op_errno == ESTALE) {</div><div class='del'>-                                        create[i] = 1;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            /*Check for hard links and create/link*/</div><div class='add'>+            ret = cluster_lookup(ec-&gt;xl_list, enoent, ec-&gt;nodes, replies,</div><div class='add'>+                                 output, frame, ec-&gt;xl, &amp;srcloc, NULL);</div><div class='add'>+            for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+                if (output[i]) {</div><div class='add'>+                    link[i] = 1;</div><div class='add'>+                } else {</div><div class='add'>+                    if (replies[i].op_errno == ENOENT ||</div><div class='add'>+                        replies[i].op_errno == ESTALE) {</div><div class='add'>+                        create[i] = 1;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                if (EC_COUNT (link, ec-&gt;nodes)) {</div><div class='del'>-                        cluster_link (ec-&gt;xl_list, link, ec-&gt;nodes,</div><div class='del'>-                                      replies, output1, frame, ec-&gt;xl,</div><div class='del'>-                                      &amp;srcloc, &amp;loc, NULL);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (EC_COUNT(link, ec-&gt;nodes)) {</div><div class='add'>+                cluster_link(ec-&gt;xl_list, link, ec-&gt;nodes, replies, output1,</div><div class='add'>+                             frame, ec-&gt;xl, &amp;srcloc, &amp;loc, NULL);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (EC_COUNT(create, ec-&gt;nodes)) {</div><div class='add'>+                cluster_readlink(ec-&gt;xl_list, name_data.same, ec-&gt;nodes,</div><div class='add'>+                                 replies, output, frame, ec-&gt;xl, &amp;srcloc, 4096,</div><div class='add'>+                                 NULL);</div><div class='add'>+                if (EC_COUNT(output, ec-&gt;nodes) == 0) {</div><div class='add'>+                    ret = -ENOTCONN;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if (EC_COUNT (create, ec-&gt;nodes)) {</div><div class='del'>-                        cluster_readlink (ec-&gt;xl_list, name_data.same,</div><div class='del'>-                                          ec-&gt;nodes, replies, output,</div><div class='del'>-                                          frame, ec-&gt;xl, &amp;srcloc, 4096,</div><div class='del'>-                                          NULL);</div><div class='del'>-                        if (EC_COUNT (output, ec-&gt;nodes) == 0) {</div><div class='del'>-                                ret = -ENOTCONN;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                                if (output[i])</div><div class='del'>-                                        break;</div><div class='del'>-                        }</div><div class='del'>-                        linkname = alloca0 (strlen(replies[i].buf) + 1);</div><div class='del'>-                        strcpy (linkname, replies[i].buf);</div><div class='del'>-                        ec_set_new_entry_dirty (ec, &amp;loc, ia, frame,</div><div class='del'>-                                                ec-&gt;xl, on);</div><div class='del'>-                        cluster_symlink (ec-&gt;xl_list, create, ec-&gt;nodes,</div><div class='del'>-                                         replies, output, frame, ec-&gt;xl,</div><div class='del'>-                                         linkname, &amp;loc, 0, xdata);</div><div class='add'>+                for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+                    if (output[i])</div><div class='add'>+                        break;</div><div class='ctx'>                 }</div><div class='del'>-                for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='del'>-                        if (output1[i])</div><div class='del'>-                                output[i] = 1;</div><div class='del'>-                break;</div><div class='add'>+                linkname = alloca0(strlen(replies[i].buf) + 1);</div><div class='add'>+                strcpy(linkname, replies[i].buf);</div><div class='add'>+                ec_set_new_entry_dirty(ec, &amp;loc, ia, frame, ec-&gt;xl, on);</div><div class='add'>+                cluster_symlink(ec-&gt;xl_list, create, ec-&gt;nodes, replies, output,</div><div class='add'>+                                frame, ec-&gt;xl, linkname, &amp;loc, 0, xdata);</div><div class='add'>+            }</div><div class='add'>+            for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='add'>+                if (output1[i])</div><div class='add'>+                    output[i] = 1;</div><div class='add'>+            break;</div><div class='ctx'>         case IA_IFREG:</div><div class='del'>-                ec_set_new_entry_dirty (ec, &amp;loc, ia,</div><div class='del'>-                                        frame, ec-&gt;xl, on);</div><div class='del'>-                config.version = EC_CONFIG_VERSION;</div><div class='del'>-                config.algorithm = EC_CONFIG_ALGORITHM;</div><div class='del'>-                config.gf_word_size = EC_GF_BITS;</div><div class='del'>-                config.bricks = ec-&gt;nodes;</div><div class='del'>-                config.redundancy = ec-&gt;redundancy;</div><div class='del'>-                config.chunk_size = EC_METHOD_CHUNK_SIZE;</div><div class='del'>-</div><div class='del'>-                ret = ec_dict_set_config(xdata, EC_XATTR_CONFIG, &amp;config);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ec_set_new_entry_dirty(ec, &amp;loc, ia, frame, ec-&gt;xl, on);</div><div class='add'>+            config.version = EC_CONFIG_VERSION;</div><div class='add'>+            config.algorithm = EC_CONFIG_ALGORITHM;</div><div class='add'>+            config.gf_word_size = EC_GF_BITS;</div><div class='add'>+            config.bricks = ec-&gt;nodes;</div><div class='add'>+            config.redundancy = ec-&gt;redundancy;</div><div class='add'>+            config.chunk_size = EC_METHOD_CHUNK_SIZE;</div><div class='add'>+</div><div class='add'>+            ret = ec_dict_set_config(xdata, EC_XATTR_CONFIG, &amp;config);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                ret = dict_set_int32 (xdata, GLUSTERFS_INTERNAL_FOP_KEY,</div><div class='del'>-                                      1);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = cluster_mknod (ec-&gt;xl_list, enoent, ec-&gt;nodes,</div><div class='del'>-                                     replies, output, frame, ec-&gt;xl,</div><div class='del'>-                                     &amp;loc, st_mode_from_ia (ia-&gt;ia_prot,</div><div class='del'>-                                                           ia-&gt;ia_type),</div><div class='del'>-                         makedev(ia_major(ia-&gt;ia_rdev), ia_minor(ia-&gt;ia_rdev)),</div><div class='del'>-                         0, xdata);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = dict_set_int32(xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            ret = cluster_mknod(</div><div class='add'>+                ec-&gt;xl_list, enoent, ec-&gt;nodes, replies, output, frame, ec-&gt;xl,</div><div class='add'>+                &amp;loc, st_mode_from_ia(ia-&gt;ia_prot, ia-&gt;ia_type),</div><div class='add'>+                makedev(ia_major(ia-&gt;ia_rdev), ia_minor(ia-&gt;ia_rdev)), 0,</div><div class='add'>+                xdata);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (enoent[i] &amp;&amp; !output[i])</div><div class='del'>-                        participants[i] = 0;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (enoent[i] &amp;&amp; !output[i])</div><div class='add'>+            participants[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s/%s: heal failed %s",</div><div class='del'>-                        uuid_utoa (parent-&gt;gfid), name, strerror (-ret));</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        loc_wipe (&amp;srcloc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "%s/%s: heal failed %s",</div><div class='add'>+                     uuid_utoa(parent-&gt;gfid), name, strerror(-ret));</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    loc_wipe(&amp;srcloc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name,</div><div class='del'>-                unsigned char *participants)</div><div class='del'>-{</div><div class='del'>-        unsigned char      *output   = NULL;</div><div class='del'>-        unsigned char      *enoent   = NULL;</div><div class='del'>-        default_args_cbk_t *replies  = NULL;</div><div class='del'>-        dict_t             *xdata    = NULL;</div><div class='del'>-        dict_t             *gfid_db  = NULL;</div><div class='del'>-        int                ret       = 0;</div><div class='del'>-        loc_t              loc       = {0};</div><div class='del'>-        int                i         = 0;</div><div class='del'>-        struct iatt        *ia       = NULL;</div><div class='del'>-        char               gfid[64]  = {0};</div><div class='del'>-        unsigned char      *same     = NULL;</div><div class='del'>-        unsigned char      *gfidless = NULL;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        loc.parent = inode_ref (parent);</div><div class='del'>-        loc.inode = inode_new (parent-&gt;table);</div><div class='del'>-        gf_uuid_copy (loc.pargfid, parent-&gt;gfid);</div><div class='del'>-        loc.name = name;</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        gfid_db = dict_new ();</div><div class='del'>-        if (!xdata || !gfid_db || !loc.inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_name(call_frame_t *frame, ec_t *ec, inode_t *parent, char *name,</div><div class='add'>+               unsigned char *participants)</div><div class='add'>+{</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    unsigned char *enoent = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    dict_t *gfid_db = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct iatt *ia = NULL;</div><div class='add'>+    char gfid[64] = {0};</div><div class='add'>+    unsigned char *same = NULL;</div><div class='add'>+    unsigned char *gfidless = NULL;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    loc.inode = inode_new(parent-&gt;table);</div><div class='add'>+    gf_uuid_copy(loc.pargfid, parent-&gt;gfid);</div><div class='add'>+    loc.name = name;</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    gfid_db = dict_new();</div><div class='add'>+    if (!xdata || !gfid_db || !loc.inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, GF_GFIDLESS_LOOKUP, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(xdata, GF_GFIDLESS_LOOKUP, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        gfidless = alloca0 (ec-&gt;nodes);</div><div class='del'>-        enoent = alloca0 (ec-&gt;nodes);</div><div class='del'>-        ret = cluster_lookup (ec-&gt;xl_list, participants, ec-&gt;nodes, replies,</div><div class='del'>-                              output, frame, ec-&gt;xl, &amp;loc, NULL);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (replies[i].op_ret == -1) {</div><div class='del'>-                        /*If ESTALE comes here, that means parent dir is not</div><div class='del'>-                         * present, nothing to do there, so reset participants</div><div class='del'>-                         * for that brick*/</div><div class='del'>-                        if (replies[i].op_errno == ENOENT)</div><div class='del'>-                                enoent[i] = 1;</div><div class='del'>-                        else</div><div class='del'>-                                participants[i] = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                ia = &amp;replies[i].stat;</div><div class='del'>-                if (gf_uuid_is_null (ia-&gt;ia_gfid)) {</div><div class='del'>-                        if (IA_ISDIR (ia-&gt;ia_type) || ia-&gt;ia_size == 0)</div><div class='del'>-                                gfidless[i] = 1;</div><div class='del'>-                        else</div><div class='del'>-                                participants[i] = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        uuid_utoa_r (ia-&gt;ia_gfid, gfid);</div><div class='del'>-                        ret = dict_get_bin (gfid_db, gfid, (void **)&amp;same);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                same = alloca0(ec-&gt;nodes);</div><div class='del'>-                        }</div><div class='del'>-                        same[i] = 1;</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                ret = dict_set_static_bin (gfid_db, gfid, same,</div><div class='del'>-                                                           ec-&gt;nodes);</div><div class='del'>-                        }</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    gfidless = alloca0(ec-&gt;nodes);</div><div class='add'>+    enoent = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = cluster_lookup(ec-&gt;xl_list, participants, ec-&gt;nodes, replies, output,</div><div class='add'>+                         frame, ec-&gt;xl, &amp;loc, NULL);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (replies[i].op_ret == -1) {</div><div class='add'>+            /*If ESTALE comes here, that means parent dir is not</div><div class='add'>+             * present, nothing to do there, so reset participants</div><div class='add'>+             * for that brick*/</div><div class='add'>+            if (replies[i].op_errno == ENOENT)</div><div class='add'>+                enoent[i] = 1;</div><div class='add'>+            else</div><div class='add'>+                participants[i] = 0;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        ia = &amp;replies[i].stat;</div><div class='add'>+        if (gf_uuid_is_null(ia-&gt;ia_gfid)) {</div><div class='add'>+            if (IA_ISDIR(ia-&gt;ia_type) || ia-&gt;ia_size == 0)</div><div class='add'>+                gfidless[i] = 1;</div><div class='add'>+            else</div><div class='add'>+                participants[i] = 0;</div><div class='add'>+        } else {</div><div class='add'>+            uuid_utoa_r(ia-&gt;ia_gfid, gfid);</div><div class='add'>+            ret = dict_get_bin(gfid_db, gfid, (void **)&amp;same);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                same = alloca0(ec-&gt;nodes);</div><div class='add'>+            }</div><div class='add'>+            same[i] = 1;</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                ret = dict_set_static_bin(gfid_db, gfid, same, ec-&gt;nodes);</div><div class='add'>+            }</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ec_delete_stale_names (frame, ec, parent, name, replies, gfid_db,</div><div class='del'>-                                     enoent, gfidless, participants);</div><div class='add'>+    ret = ec_delete_stale_names(frame, ec, parent, name, replies, gfid_db,</div><div class='add'>+                                enoent, gfidless, participants);</div><div class='ctx'> </div><div class='del'>-        if (gfid_db-&gt;count == 0) {</div><div class='del'>-                /* All entries seem to be stale entries and deleted,</div><div class='del'>-                 * nothing more to do.*/</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (gfid_db-&gt;count == 0) {</div><div class='add'>+        /* All entries seem to be stale entries and deleted,</div><div class='add'>+         * nothing more to do.*/</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (gfid_db-&gt;count &gt; 1) {</div><div class='del'>-                gf_msg (ec-&gt;xl-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        EC_MSG_HEAL_FAIL, "%s/%s: Not able to heal",</div><div class='del'>-                        uuid_utoa (parent-&gt;gfid), name);</div><div class='del'>-                memset (participants, 0, ec-&gt;nodes);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (gfid_db-&gt;count &gt; 1) {</div><div class='add'>+        gf_msg(ec-&gt;xl-&gt;name, GF_LOG_INFO, 0, EC_MSG_HEAL_FAIL,</div><div class='add'>+               "%s/%s: Not able to heal", uuid_utoa(parent-&gt;gfid), name);</div><div class='add'>+        memset(participants, 0, ec-&gt;nodes);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        EC_INTERSECT (enoent, enoent, participants, ec-&gt;nodes);</div><div class='del'>-        if (EC_COUNT (enoent, ec-&gt;nodes) == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    EC_INTERSECT(enoent, enoent, participants, ec-&gt;nodes);</div><div class='add'>+    if (EC_COUNT(enoent, ec-&gt;nodes) == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ec_create_name (frame, ec, parent, name, replies, gfid_db, enoent,</div><div class='del'>-                              participants);</div><div class='add'>+    ret = ec_create_name(frame, ec, parent, name, replies, gfid_db, enoent,</div><div class='add'>+                         participants);</div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        if (gfid_db)</div><div class='del'>-                dict_unref (gfid_db);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (gfid_db)</div><div class='add'>+        dict_unref(gfid_db);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_name (call_frame_t *frame, ec_t *ec, inode_t *parent, char *name,</div><div class='del'>-              unsigned char *participants)</div><div class='del'>-{</div><div class='del'>-        int                ret        = 0;</div><div class='del'>-        default_args_cbk_t *replies   = NULL;</div><div class='del'>-        unsigned char      *output    = NULL;</div><div class='del'>-        unsigned char      *locked_on = NULL;</div><div class='del'>-        loc_t              loc        = {0};</div><div class='del'>-</div><div class='del'>-        loc.parent = inode_ref (parent);</div><div class='del'>-        loc.name = name;</div><div class='del'>-        loc.inode = inode_new (parent-&gt;table);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+ec_heal_name(call_frame_t *frame, ec_t *ec, inode_t *parent, char *name,</div><div class='add'>+             unsigned char *participants)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+</div><div class='add'>+    loc.parent = inode_ref(parent);</div><div class='add'>+    loc.name = name;</div><div class='add'>+    loc.inode = inode_new(parent-&gt;table);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        locked_on = alloca0 (ec-&gt;nodes);</div><div class='del'>-        ret = cluster_inodelk (ec-&gt;xl_list, participants, ec-&gt;nodes, replies,</div><div class='del'>-                               locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, parent,</div><div class='del'>-                               0, 0);</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s/%s: Skipping "</div><div class='del'>-                                "heal as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (parent-&gt;gfid), name,</div><div class='del'>-                                ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                EC_INTERSECT (participants, participants, locked_on, ec-&gt;nodes);</div><div class='del'>-                ret = __ec_heal_name (frame, ec, parent, name, participants);</div><div class='del'>-        }</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = cluster_inodelk(ec-&gt;xl_list, participants, ec-&gt;nodes, replies,</div><div class='add'>+                          locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, parent, 0, 0);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s/%s: Skipping "</div><div class='add'>+                         "heal as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(parent-&gt;gfid), name, ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        EC_INTERSECT(participants, participants, locked_on, ec-&gt;nodes);</div><div class='add'>+        ret = __ec_heal_name(frame, ec, parent, name, participants);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, ec-&gt;xl-&gt;name, parent, 0, 0);</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, ec-&gt;xl-&gt;name, parent, 0, 0);</div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_name_heal_handler (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                      void *data)</div><div class='del'>-{</div><div class='del'>-        struct ec_name_data *name_data = data;</div><div class='del'>-        xlator_t            *this      = THIS;</div><div class='del'>-        ec_t                *ec        = this-&gt;private;</div><div class='del'>-        unsigned char       *name_on   = alloca0 (ec-&gt;nodes);</div><div class='del'>-        int                 i          = 0;</div><div class='del'>-        int                 ret        = 0;</div><div class='del'>-</div><div class='del'>-        if (ec-&gt;shutdown) {</div><div class='del'>-                gf_msg_debug(this-&gt;name, 0, "Cancelling directory heal "</div><div class='del'>-                                            "because EC is stopping.");</div><div class='del'>-                return -ENOTCONN;</div><div class='del'>-        }</div><div class='add'>+ec_name_heal_handler(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                     void *data)</div><div class='add'>+{</div><div class='add'>+    struct ec_name_data *name_data = data;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    unsigned char *name_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (ec-&gt;shutdown) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Cancelling directory heal "</div><div class='add'>+                     "because EC is stopping.");</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (name_on, name_data-&gt;participants, ec-&gt;nodes);</div><div class='del'>-        ret = ec_heal_name (name_data-&gt;frame, ec, parent-&gt;inode,</div><div class='del'>-                            entry-&gt;d_name, name_on);</div><div class='add'>+    memcpy(name_on, name_data-&gt;participants, ec-&gt;nodes);</div><div class='add'>+    ret = ec_heal_name(name_data-&gt;frame, ec, parent-&gt;inode, entry-&gt;d_name,</div><div class='add'>+                       name_on);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                memset (name_on, 0, ec-&gt;nodes);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        memset(name_on, 0, ec-&gt;nodes);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='del'>-                if (name_data-&gt;participants[i] &amp;&amp; !name_on[i])</div><div class='del'>-                        name_data-&gt;failed_on[i] = 1;</div><div class='del'>-        return 0;</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++)</div><div class='add'>+        if (name_data-&gt;participants[i] &amp;&amp; !name_on[i])</div><div class='add'>+            name_data-&gt;failed_on[i] = 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_names (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-               unsigned char *participants)</div><div class='add'>+ec_heal_names(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+              unsigned char *participants)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int j = 0;</div><div class='del'>-        loc_t loc = {0};</div><div class='del'>-        struct ec_name_data name_data = {0};</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        name_data.frame = frame;</div><div class='del'>-        name_data.participants = participants;</div><div class='del'>-        name_data.failed_on = alloca0(ec-&gt;nodes);;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!participants[i])</div><div class='del'>-                        continue;</div><div class='del'>-                ret = syncop_dir_scan (ec-&gt;xl_list[i], &amp;loc,</div><div class='del'>-                                       GF_CLIENT_PID_SELF_HEALD, &amp;name_data,</div><div class='del'>-                                       ec_name_heal_handler);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                for (j = 0; j &lt; ec-&gt;nodes; j++)</div><div class='del'>-                        if (name_data.failed_on[j])</div><div class='del'>-                                participants[j] = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    struct ec_name_data name_data = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    name_data.frame = frame;</div><div class='add'>+    name_data.participants = participants;</div><div class='add'>+    name_data.failed_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    ;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!participants[i])</div><div class='add'>+            continue;</div><div class='add'>+        ret = syncop_dir_scan(ec-&gt;xl_list[i], &amp;loc, GF_CLIENT_PID_SELF_HEALD,</div><div class='add'>+                              &amp;name_data, ec_name_heal_handler);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        for (j = 0; j &lt; ec-&gt;nodes; j++)</div><div class='add'>+            if (name_data.failed_on[j])</div><div class='add'>+                participants[j] = 0;</div><div class='ctx'> </div><div class='del'>-                if (EC_COUNT (participants, ec-&gt;nodes) &lt;= ec-&gt;fragments) {</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (EC_COUNT(participants, ec-&gt;nodes) &lt;= ec-&gt;fragments) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_entry (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                 unsigned char *heal_on, unsigned char *sources,</div><div class='del'>-                 unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        unsigned char      *locked_on    = NULL;</div><div class='del'>-        unsigned char      *output       = NULL;</div><div class='del'>-        uint64_t           *versions     = NULL;</div><div class='del'>-        uint64_t           *dirty        = NULL;</div><div class='del'>-        unsigned char      *participants = NULL;</div><div class='del'>-        default_args_cbk_t *replies      = NULL;</div><div class='del'>-        int                ret           = 0;</div><div class='del'>-        int                source        = 0;</div><div class='del'>-        int                i             = 0;</div><div class='del'>-</div><div class='del'>-        locked_on = alloca0(ec-&gt;nodes);</div><div class='del'>-        output = alloca0(ec-&gt;nodes);</div><div class='del'>-        versions = alloca0 (ec-&gt;nodes * sizeof (*versions));</div><div class='del'>-        dirty = alloca0 (ec-&gt;nodes * sizeof (*dirty));</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        ret = cluster_inodelk (ec-&gt;xl_list, heal_on, ec-&gt;nodes, replies,</div><div class='del'>-                               locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode,</div><div class='del'>-                               0, 0);</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: Skipping heal "</div><div class='del'>-                                "as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (inode-&gt;gfid), ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ret = __ec_heal_entry_prepare (frame, ec, inode, locked_on,</div><div class='del'>-                                               versions, dirty, sources,</div><div class='del'>-                                               healed_sinks);</div><div class='del'>-                source = ret;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_entry(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                unsigned char *heal_on, unsigned char *sources,</div><div class='add'>+                unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    uint64_t *versions = NULL;</div><div class='add'>+    uint64_t *dirty = NULL;</div><div class='add'>+    unsigned char *participants = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int source = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    versions = alloca0(ec-&gt;nodes * sizeof(*versions));</div><div class='add'>+    dirty = alloca0(ec-&gt;nodes * sizeof(*dirty));</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    ret = cluster_inodelk(ec-&gt;xl_list, heal_on, ec-&gt;nodes, replies, locked_on,</div><div class='add'>+                          frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping heal "</div><div class='add'>+                         "as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ret = __ec_heal_entry_prepare(frame, ec, inode, locked_on, versions,</div><div class='add'>+                                      dirty, sources, healed_sinks);</div><div class='add'>+        source = ret;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        participants = alloca0 (ec-&gt;nodes);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (sources[i] || healed_sinks[i])</div><div class='del'>-                        participants[i] = 1;</div><div class='del'>-        }</div><div class='del'>-        ret = ec_heal_names (frame, ec, inode, participants);</div><div class='add'>+    participants = alloca0(ec-&gt;nodes);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (sources[i] || healed_sinks[i])</div><div class='add'>+            participants[i] = 1;</div><div class='add'>+    }</div><div class='add'>+    ret = ec_heal_names(frame, ec, inode, participants);</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (participants, ec-&gt;nodes) &lt;= ec-&gt;fragments)</div><div class='del'>-                goto out;</div><div class='add'>+    if (EC_COUNT(participants, ec-&gt;nodes) &lt;= ec-&gt;fragments)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!participants[i]) {</div><div class='del'>-                        sources[i] = 0;</div><div class='del'>-                        healed_sinks[i] = 0;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!participants[i]) {</div><div class='add'>+            sources[i] = 0;</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ec_adjust_versions (frame, ec, EC_DATA_TXN, inode, source,</div><div class='del'>-                            sources, healed_sinks, versions, dirty);</div><div class='add'>+    ec_adjust_versions(frame, ec, EC_DATA_TXN, inode, source, sources,</div><div class='add'>+                       healed_sinks, versions, dirty);</div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_entry (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-               unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+ec_heal_entry(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+              unsigned char *sources, unsigned char *healed_sinks)</div><div class='ctx'> {</div><div class='del'>-        unsigned char      *locked_on            = NULL;</div><div class='del'>-        unsigned char      *up_subvols           = NULL;</div><div class='del'>-        unsigned char      *output               = NULL;</div><div class='del'>-        char               selfheal_domain[1024] = {0};</div><div class='del'>-        int                ret                   = 0;</div><div class='del'>-        default_args_cbk_t *replies              = NULL;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        locked_on = alloca0(ec-&gt;nodes);</div><div class='del'>-        output = alloca0(ec-&gt;nodes);</div><div class='del'>-        up_subvols = alloca0(ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        sprintf (selfheal_domain, "%s:self-heal", ec-&gt;xl-&gt;name);</div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='del'>-        /*If other processes are already doing the heal, don't block*/</div><div class='del'>-        ret = cluster_tiebreaker_inodelk (ec-&gt;xl_list, up_subvols, ec-&gt;nodes,</div><div class='del'>-                                          replies, locked_on, frame, ec-&gt;xl,</div><div class='del'>-                                          selfheal_domain, inode, 0, 0);</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: Skipping heal "</div><div class='del'>-                                "as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (inode-&gt;gfid), ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ret = __ec_heal_entry (frame, ec, inode, locked_on,</div><div class='del'>-                                       sources, healed_sinks);</div><div class='del'>-        }</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *up_subvols = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    char selfheal_domain[1024] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    up_subvols = alloca0(ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    sprintf(selfheal_domain, "%s:self-heal", ec-&gt;xl-&gt;name);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='add'>+    /*If other processes are already doing the heal, don't block*/</div><div class='add'>+    ret = cluster_tiebreaker_inodelk(ec-&gt;xl_list, up_subvols, ec-&gt;nodes,</div><div class='add'>+                                     replies, locked_on, frame, ec-&gt;xl,</div><div class='add'>+                                     selfheal_domain, inode, 0, 0);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping heal "</div><div class='add'>+                         "as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ret = __ec_heal_entry(frame, ec, inode, locked_on, sources,</div><div class='add'>+                              healed_sinks);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, selfheal_domain, inode, 0, 0);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, selfheal_domain, inode, 0, 0);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Find direction for data heal and heal info*/</div><div class='ctx'> int</div><div class='del'>-ec_heal_data_find_direction (ec_t *ec, default_args_cbk_t *replies,</div><div class='del'>-                       uint64_t *data_versions,</div><div class='del'>-                       uint64_t *dirty, uint64_t *size, unsigned char *sources,</div><div class='del'>-                       unsigned char *healed_sinks,</div><div class='del'>-                       gf_boolean_t check_ondisksize, int which)</div><div class='del'>-{</div><div class='del'>-        uint64_t        xattr[EC_VERSION_SIZE] = {0};</div><div class='del'>-        char            version_size[128] = {0};</div><div class='del'>-        dict_t          *version_size_db = NULL;</div><div class='del'>-        unsigned char   *same            = NULL;</div><div class='del'>-        int             max_same_count   = 0;</div><div class='del'>-        int             source           = 0;</div><div class='del'>-        int             i                = 0;</div><div class='del'>-        int             ret              = 0;</div><div class='del'>-        dict_t          *dict            = NULL;</div><div class='del'>-        uint64_t        source_size      = 0;</div><div class='del'>-</div><div class='del'>-        version_size_db = dict_new ();</div><div class='del'>-        if (!version_size_db) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+ec_heal_data_find_direction(ec_t *ec, default_args_cbk_t *replies,</div><div class='add'>+                            uint64_t *data_versions, uint64_t *dirty,</div><div class='add'>+                            uint64_t *size, unsigned char *sources,</div><div class='add'>+                            unsigned char *healed_sinks,</div><div class='add'>+                            gf_boolean_t check_ondisksize, int which)</div><div class='add'>+{</div><div class='add'>+    uint64_t xattr[EC_VERSION_SIZE] = {0};</div><div class='add'>+    char version_size[128] = {0};</div><div class='add'>+    dict_t *version_size_db = NULL;</div><div class='add'>+    unsigned char *same = NULL;</div><div class='add'>+    int max_same_count = 0;</div><div class='add'>+    int source = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    uint64_t source_size = 0;</div><div class='add'>+</div><div class='add'>+    version_size_db = dict_new();</div><div class='add'>+    if (!version_size_db) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!replies[i].valid)</div><div class='add'>+            continue;</div><div class='add'>+        if (replies[i].op_ret &lt; 0)</div><div class='add'>+            continue;</div><div class='add'>+        dict = (which == EC_COMBINE_XDATA) ? replies[i].xdata</div><div class='add'>+                                           : replies[i].xattr;</div><div class='add'>+</div><div class='add'>+        ret = ec_dict_get_array(dict, EC_XATTR_VERSION, xattr, EC_VERSION_SIZE);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            data_versions[i] = xattr[EC_DATA_TXN];</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!replies[i].valid)</div><div class='del'>-                        continue;</div><div class='del'>-                if (replies[i].op_ret &lt; 0)</div><div class='del'>-                        continue;</div><div class='del'>-                dict = (which == EC_COMBINE_XDATA) ? replies[i].xdata :</div><div class='del'>-                                                     replies[i].xattr;</div><div class='del'>-</div><div class='del'>-                ret = ec_dict_get_array (dict, EC_XATTR_VERSION,</div><div class='del'>-                                         xattr, EC_VERSION_SIZE);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        data_versions[i] = xattr[EC_DATA_TXN];</div><div class='del'>-                }</div><div class='add'>+        memset(xattr, 0, sizeof(xattr));</div><div class='add'>+        ret = ec_dict_get_array(dict, EC_XATTR_DIRTY, xattr, EC_VERSION_SIZE);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            dirty[i] = xattr[EC_DATA_TXN];</div><div class='add'>+        }</div><div class='add'>+        ret = ec_dict_del_number(dict, EC_XATTR_SIZE, &amp;size[i]);</div><div class='add'>+        /*Build a db of same metadata and data version and size*/</div><div class='add'>+        snprintf(version_size, sizeof(version_size), "%" PRIu64 "-%" PRIu64,</div><div class='add'>+                 data_versions[i], size[i]);</div><div class='ctx'> </div><div class='del'>-                memset (xattr, 0, sizeof (xattr));</div><div class='del'>-                ret = ec_dict_get_array (dict, EC_XATTR_DIRTY,</div><div class='del'>-                                         xattr, EC_VERSION_SIZE);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        dirty[i] = xattr[EC_DATA_TXN];</div><div class='del'>-                }</div><div class='del'>-                ret = ec_dict_del_number (dict, EC_XATTR_SIZE,</div><div class='del'>-                                          &amp;size[i]);</div><div class='del'>-                /*Build a db of same metadata and data version and size*/</div><div class='del'>-                snprintf (version_size, sizeof (version_size),</div><div class='del'>-                          "%"PRIu64"-%"PRIu64, data_versions[i], size[i]);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_bin (version_size_db, version_size,</div><div class='del'>-                                    (void **)&amp;same);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        same = alloca0 (ec-&gt;nodes);</div><div class='del'>-                }</div><div class='add'>+        ret = dict_get_bin(version_size_db, version_size, (void **)&amp;same);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            same = alloca0(ec-&gt;nodes);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                same[i] = 1;</div><div class='del'>-                if (max_same_count &lt; EC_COUNT (same, ec-&gt;nodes)) {</div><div class='del'>-                        max_same_count = EC_COUNT (same, ec-&gt;nodes);</div><div class='del'>-                        source = i;</div><div class='del'>-                }</div><div class='add'>+        same[i] = 1;</div><div class='add'>+        if (max_same_count &lt; EC_COUNT(same, ec-&gt;nodes)) {</div><div class='add'>+            max_same_count = EC_COUNT(same, ec-&gt;nodes);</div><div class='add'>+            source = i;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        ret = dict_set_static_bin (version_size_db,</div><div class='del'>-                                                version_size, same, ec-&gt;nodes);</div><div class='del'>-                }</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            ret = dict_set_static_bin(version_size_db, version_size, same,</div><div class='add'>+                                      ec-&gt;nodes);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        /* If we don't have ec-&gt;fragments number of same version,size it is not</div><div class='del'>-         * recoverable*/</div><div class='del'>-        if (max_same_count &lt; ec-&gt;fragments) {</div><div class='del'>-                ret = -EIO;</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                snprintf (version_size, sizeof (version_size),</div><div class='del'>-                          "%"PRIu64"-%"PRIu64, data_versions[source],</div><div class='del'>-                          size[source]);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_bin (version_size_db, version_size,</div><div class='del'>-                                    (void **)&amp;same);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                memcpy (sources, same, ec-&gt;nodes);</div><div class='del'>-                for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                        if (replies[i].valid &amp;&amp; (replies[i].op_ret == 0) &amp;&amp;</div><div class='del'>-                            !sources[i])</div><div class='del'>-                                healed_sinks[i] = 1;</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    /* If we don't have ec-&gt;fragments number of same version,size it is not</div><div class='add'>+     * recoverable*/</div><div class='add'>+    if (max_same_count &lt; ec-&gt;fragments) {</div><div class='add'>+        ret = -EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        snprintf(version_size, sizeof(version_size), "%" PRIu64 "-%" PRIu64,</div><div class='add'>+                 data_versions[source], size[source]);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_bin(version_size_db, version_size, (void **)&amp;same);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        memcpy(sources, same, ec-&gt;nodes);</div><div class='add'>+        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+            if (replies[i].valid &amp;&amp; (replies[i].op_ret == 0) &amp;&amp; !sources[i])</div><div class='add'>+                healed_sinks[i] = 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* There could be files with versions, size same but on disk ia_size</div><div class='del'>-         * could be different because of disk crashes, mark them as sinks as</div><div class='del'>-         * well*/</div><div class='add'>+    /* There could be files with versions, size same but on disk ia_size</div><div class='add'>+     * could be different because of disk crashes, mark them as sinks as</div><div class='add'>+     * well*/</div><div class='ctx'> </div><div class='del'>-        if (check_ondisksize) {</div><div class='del'>-                source_size = size[source];</div><div class='del'>-                ec_adjust_size_up (ec, &amp;source_size, _gf_true);</div><div class='add'>+    if (check_ondisksize) {</div><div class='add'>+        source_size = size[source];</div><div class='add'>+        ec_adjust_size_up(ec, &amp;source_size, _gf_true);</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                        if (sources[i]) {</div><div class='del'>-                                if (replies[i].stat.ia_size != source_size) {</div><div class='del'>-                                        sources[i] = 0;</div><div class='del'>-                                        healed_sinks[i] = 1;</div><div class='del'>-                                        max_same_count--;</div><div class='del'>-                                } else {</div><div class='del'>-                                        source = i;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (max_same_count &lt; ec-&gt;fragments) {</div><div class='del'>-                        ret = -EIO;</div><div class='del'>-                        goto out;</div><div class='add'>+        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+            if (sources[i]) {</div><div class='add'>+                if (replies[i].stat.ia_size != source_size) {</div><div class='add'>+                    sources[i] = 0;</div><div class='add'>+                    healed_sinks[i] = 1;</div><div class='add'>+                    max_same_count--;</div><div class='add'>+                } else {</div><div class='add'>+                    source = i;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+        if (max_same_count &lt; ec-&gt;fragments) {</div><div class='add'>+            ret = -EIO;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = source;</div><div class='add'>+    ret = source;</div><div class='ctx'> out:</div><div class='del'>-        if (version_size_db)</div><div class='del'>-                dict_unref (version_size_db);</div><div class='del'>-        return ret;</div><div class='add'>+    if (version_size_db)</div><div class='add'>+        dict_unref(version_size_db);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_data_prepare (call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='del'>-                        unsigned char *locked_on, uint64_t *versions,</div><div class='del'>-                        uint64_t *dirty, uint64_t *size, unsigned char *sources,</div><div class='del'>-                        unsigned char *healed_sinks, unsigned char *trim,</div><div class='del'>-                        struct iatt *stbuf)</div><div class='del'>-{</div><div class='del'>-        default_args_cbk_t *replies = NULL;</div><div class='del'>-        default_args_cbk_t *fstat_replies = NULL;</div><div class='del'>-        unsigned char      *output  = NULL;</div><div class='del'>-        unsigned char      *fstat_output  = NULL;</div><div class='del'>-        dict_t             *xattrs  = NULL;</div><div class='del'>-        uint64_t           zero_array[2] = {0};</div><div class='del'>-        int                source   = 0;</div><div class='del'>-        int                ret      = 0;</div><div class='del'>-        uint64_t           zero_value = 0;</div><div class='del'>-        int                i = 0;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        EC_REPLIES_ALLOC (fstat_replies, ec-&gt;nodes);</div><div class='del'>-        output = alloca0(ec-&gt;nodes);</div><div class='del'>-        fstat_output = alloca0(ec-&gt;nodes);</div><div class='del'>-        xattrs = dict_new ();</div><div class='del'>-        if (!xattrs ||</div><div class='del'>-            dict_set_static_bin (xattrs, EC_XATTR_VERSION, zero_array,</div><div class='del'>-                                 sizeof (zero_array)) ||</div><div class='del'>-            dict_set_static_bin (xattrs, EC_XATTR_DIRTY, zero_array,</div><div class='del'>-                                 sizeof (zero_array)) ||</div><div class='del'>-            dict_set_static_bin (xattrs, EC_XATTR_SIZE, &amp;zero_value,</div><div class='del'>-                                 sizeof (zero_value))) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_data_prepare(call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='add'>+                       unsigned char *locked_on, uint64_t *versions,</div><div class='add'>+                       uint64_t *dirty, uint64_t *size, unsigned char *sources,</div><div class='add'>+                       unsigned char *healed_sinks, unsigned char *trim,</div><div class='add'>+                       struct iatt *stbuf)</div><div class='add'>+{</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    default_args_cbk_t *fstat_replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    unsigned char *fstat_output = NULL;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    uint64_t zero_array[2] = {0};</div><div class='add'>+    int source = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t zero_value = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    EC_REPLIES_ALLOC(fstat_replies, ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    fstat_output = alloca0(ec-&gt;nodes);</div><div class='add'>+    xattrs = dict_new();</div><div class='add'>+    if (!xattrs ||</div><div class='add'>+        dict_set_static_bin(xattrs, EC_XATTR_VERSION, zero_array,</div><div class='add'>+                            sizeof(zero_array)) ||</div><div class='add'>+        dict_set_static_bin(xattrs, EC_XATTR_DIRTY, zero_array,</div><div class='add'>+                            sizeof(zero_array)) ||</div><div class='add'>+        dict_set_static_bin(xattrs, EC_XATTR_SIZE, &amp;zero_value,</div><div class='add'>+                            sizeof(zero_value))) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cluster_fxattrop (ec-&gt;xl_list, locked_on, ec-&gt;nodes,</div><div class='del'>-                                replies, output, frame, ec-&gt;xl, fd,</div><div class='del'>-                                GF_XATTROP_ADD_ARRAY64, xattrs, NULL);</div><div class='add'>+    ret = cluster_fxattrop(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='add'>+                           frame, ec-&gt;xl, fd, GF_XATTROP_ADD_ARRAY64, xattrs,</div><div class='add'>+                           NULL);</div><div class='ctx'> </div><div class='del'>-        ret = cluster_fstat (ec-&gt;xl_list, locked_on, ec-&gt;nodes, fstat_replies,</div><div class='del'>-                             fstat_output, frame, ec-&gt;xl, fd, NULL);</div><div class='add'>+    ret = cluster_fstat(ec-&gt;xl_list, locked_on, ec-&gt;nodes, fstat_replies,</div><div class='add'>+                        fstat_output, frame, ec-&gt;xl, fd, NULL);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                output[i] = output[i] &amp;&amp; fstat_output[i];</div><div class='del'>-                replies[i].valid = output[i];</div><div class='del'>-                if (output[i])</div><div class='del'>-                        replies[i].stat = fstat_replies[i].stat;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        output[i] = output[i] &amp;&amp; fstat_output[i];</div><div class='add'>+        replies[i].valid = output[i];</div><div class='add'>+        if (output[i])</div><div class='add'>+            replies[i].stat = fstat_replies[i].stat;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (output, ec-&gt;nodes) &lt;= ec-&gt;fragments) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (EC_COUNT(output, ec-&gt;nodes) &lt;= ec-&gt;fragments) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        source = ec_heal_data_find_direction (ec, replies, versions,</div><div class='del'>-                                              dirty, size, sources,</div><div class='del'>-                                              healed_sinks, _gf_true,</div><div class='del'>-                                              EC_COMBINE_DICT);</div><div class='del'>-        ret = source;</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    source = ec_heal_data_find_direction(ec, replies, versions, dirty, size,</div><div class='add'>+                                         sources, healed_sinks, _gf_true,</div><div class='add'>+                                         EC_COMBINE_DICT);</div><div class='add'>+    ret = source;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (stbuf)</div><div class='del'>-                *stbuf = replies[source].stat;</div><div class='add'>+    if (stbuf)</div><div class='add'>+        *stbuf = replies[source].stat;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (healed_sinks[i]) {</div><div class='del'>-                        if (replies[i].stat.ia_size)</div><div class='del'>-                                trim[i] = 1;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (healed_sinks[i]) {</div><div class='add'>+            if (replies[i].stat.ia_size)</div><div class='add'>+                trim[i] = 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT(sources, ec-&gt;nodes) &lt; ec-&gt;fragments) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (EC_COUNT(sources, ec-&gt;nodes) &lt; ec-&gt;fragments) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = source;</div><div class='add'>+    ret = source;</div><div class='ctx'> out:</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        cluster_replies_wipe (fstat_replies, ec-&gt;nodes);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid), strerror (-ret));</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: sources: %d, sinks: "</div><div class='del'>-                        "%d", uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        EC_COUNT (sources, ec-&gt;nodes),</div><div class='del'>-                        EC_COUNT (healed_sinks, ec-&gt;nodes));</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    cluster_replies_wipe(fstat_replies, ec-&gt;nodes);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(-ret));</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                     "%s: sources: %d, sinks: "</div><div class='add'>+                     "%d",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), EC_COUNT(sources, ec-&gt;nodes),</div><div class='add'>+                     EC_COUNT(healed_sinks, ec-&gt;nodes));</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_mark_sinks (call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='del'>-                      uint64_t *versions, unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        int                i        = 0;</div><div class='del'>-        int                ret      = 0;</div><div class='del'>-        unsigned char      *mark    = NULL;</div><div class='del'>-        dict_t             *xattrs  = NULL;</div><div class='del'>-        default_args_cbk_t *replies = NULL;</div><div class='del'>-        unsigned char      *output  = NULL;</div><div class='del'>-        uint64_t versions_xattr[2]  = {0};</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        xattrs = dict_new ();</div><div class='del'>-        if (!xattrs) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__ec_heal_mark_sinks(call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='add'>+                     uint64_t *versions, unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned char *mark = NULL;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    uint64_t versions_xattr[2] = {0};</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    xattrs = dict_new();</div><div class='add'>+    if (!xattrs) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mark = alloca0 (ec-&gt;nodes);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!healed_sinks[i])</div><div class='del'>-                        continue;</div><div class='del'>-                if ((versions[i] &gt;&gt; EC_SELFHEAL_BIT) &amp; 1)</div><div class='del'>-                        continue;</div><div class='del'>-                mark[i] = 1;</div><div class='del'>-        }</div><div class='add'>+    mark = alloca0(ec-&gt;nodes);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!healed_sinks[i])</div><div class='add'>+            continue;</div><div class='add'>+        if ((versions[i] &gt;&gt; EC_SELFHEAL_BIT) &amp; 1)</div><div class='add'>+            continue;</div><div class='add'>+        mark[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (mark, ec-&gt;nodes) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (EC_COUNT(mark, ec-&gt;nodes) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        versions_xattr[EC_DATA_TXN] = hton64(1ULL&lt;&lt;EC_SELFHEAL_BIT);</div><div class='del'>-        if (dict_set_static_bin (xattrs, EC_XATTR_VERSION, versions_xattr,</div><div class='del'>-                                 sizeof (versions_xattr))) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    versions_xattr[EC_DATA_TXN] = hton64(1ULL &lt;&lt; EC_SELFHEAL_BIT);</div><div class='add'>+    if (dict_set_static_bin(xattrs, EC_XATTR_VERSION, versions_xattr,</div><div class='add'>+                            sizeof(versions_xattr))) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-        ret = cluster_fxattrop (ec-&gt;xl_list, mark, ec-&gt;nodes,</div><div class='del'>-                                replies, output, frame, ec-&gt;xl, fd,</div><div class='del'>-                                GF_XATTROP_ADD_ARRAY64, xattrs, NULL);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!output[i]) {</div><div class='del'>-                        if (mark[i])</div><div class='del'>-                                healed_sinks[i] = 0;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                versions[i] |= (1ULL&lt;&lt;EC_SELFHEAL_BIT);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = cluster_fxattrop(ec-&gt;xl_list, mark, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                           ec-&gt;xl, fd, GF_XATTROP_ADD_ARRAY64, xattrs, NULL);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!output[i]) {</div><div class='add'>+            if (mark[i])</div><div class='add'>+                healed_sinks[i] = 0;</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+        versions[i] |= (1ULL &lt;&lt; EC_SELFHEAL_BIT);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid), strerror (-ret));</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(-ret));</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_manager_heal_block (ec_fop_data_t *fop, int32_t state)</div><div class='add'>+ec_manager_heal_block(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'>     heal-&gt;fop = fop;</div><div class='ctx'> </div><div class='ctx'>     switch (state) {</div><div class='del'>-    case EC_STATE_INIT:</div><div class='del'>-        ec_owner_set(fop-&gt;frame, fop-&gt;frame-&gt;root);</div><div class='add'>+        case EC_STATE_INIT:</div><div class='add'>+            ec_owner_set(fop-&gt;frame, fop-&gt;frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        ec_heal_inodelk(heal, F_WRLCK, 1, 0, 0);</div><div class='add'>+            ec_heal_inodelk(heal, F_WRLCK, 1, 0, 0);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_HEAL_DATA_COPY;</div><div class='add'>+            return EC_STATE_HEAL_DATA_COPY;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_HEAL_DATA_COPY:</div><div class='del'>-        gf_msg_debug (fop-&gt;xl-&gt;name, 0, "%s: read/write starting",</div><div class='del'>-                uuid_utoa (heal-&gt;fd-&gt;inode-&gt;gfid));</div><div class='del'>-        ec_heal_data_block (heal);</div><div class='add'>+        case EC_STATE_HEAL_DATA_COPY:</div><div class='add'>+            gf_msg_debug(fop-&gt;xl-&gt;name, 0, "%s: read/write starting",</div><div class='add'>+                         uuid_utoa(heal-&gt;fd-&gt;inode-&gt;gfid));</div><div class='add'>+            ec_heal_data_block(heal);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_HEAL_DATA_UNLOCK;</div><div class='add'>+            return EC_STATE_HEAL_DATA_UNLOCK;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_HEAL_DATA_COPY:</div><div class='del'>-    case -EC_STATE_HEAL_DATA_UNLOCK:</div><div class='del'>-    case EC_STATE_HEAL_DATA_UNLOCK:</div><div class='del'>-        ec_heal_inodelk(heal, F_UNLCK, 1, 0, 0);</div><div class='add'>+        case -EC_STATE_HEAL_DATA_COPY:</div><div class='add'>+        case -EC_STATE_HEAL_DATA_UNLOCK:</div><div class='add'>+        case EC_STATE_HEAL_DATA_UNLOCK:</div><div class='add'>+            ec_heal_inodelk(heal, F_UNLCK, 1, 0, 0);</div><div class='ctx'> </div><div class='del'>-         return EC_STATE_REPORT;</div><div class='add'>+            return EC_STATE_REPORT;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_REPORT:</div><div class='del'>-        if (fop-&gt;cbks.heal) {</div><div class='del'>-            fop-&gt;cbks.heal (fop-&gt;req_frame, fop, fop-&gt;xl, 0,</div><div class='del'>-                            0, (heal-&gt;good | heal-&gt;bad),</div><div class='del'>-                            heal-&gt;good, heal-&gt;bad, NULL);</div><div class='del'>-        }</div><div class='add'>+        case EC_STATE_REPORT:</div><div class='add'>+            if (fop-&gt;cbks.heal) {</div><div class='add'>+                fop-&gt;cbks.heal(fop-&gt;req_frame, fop, fop-&gt;xl, 0, 0,</div><div class='add'>+                               (heal-&gt;good | heal-&gt;bad), heal-&gt;good, heal-&gt;bad,</div><div class='add'>+                               NULL);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='del'>-    case -EC_STATE_REPORT:</div><div class='del'>-        if (fop-&gt;cbks.heal) {</div><div class='del'>-            fop-&gt;cbks.heal (fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                            fop-&gt;error, 0, 0, 0, NULL);</div><div class='del'>-        }</div><div class='add'>+            return EC_STATE_END;</div><div class='add'>+        case -EC_STATE_REPORT:</div><div class='add'>+            if (fop-&gt;cbks.heal) {</div><div class='add'>+                fop-&gt;cbks.heal(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error, 0,</div><div class='add'>+                               0, 0, NULL);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='del'>-    default:</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            return EC_STATE_END;</div><div class='add'>+        default:</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, 0, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*Takes lock */</div><div class='ctx'> void</div><div class='del'>-ec_heal_block (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+ec_heal_block(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>               int32_t minimum, fop_heal_cbk_t func, ec_heal_t *heal)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .heal = func };</div><div class='add'>+    ec_cbk_t callback = {.heal = func};</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='hunk'>@@ -1950,9 +1944,8 @@ ec_heal_block (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate (frame, this, EC_FOP_HEAL, 0, target, minimum,</div><div class='del'>-                                NULL, ec_manager_heal_block, callback,</div><div class='del'>-                                heal);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, EC_FOP_HEAL, 0, target, minimum,</div><div class='add'>+                               NULL, ec_manager_heal_block, callback, heal);</div><div class='ctx'>     if (fop == NULL)</div><div class='ctx'>         goto out;</div><div class='ctx'> </div><div class='hunk'>@@ -1967,761 +1960,751 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_heal_block_done (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, uintptr_t mask,</div><div class='del'>-                    uintptr_t good, uintptr_t bad, dict_t *xdata)</div><div class='add'>+ec_heal_block_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, uintptr_t mask,</div><div class='add'>+                   uintptr_t good, uintptr_t bad, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = cookie;</div><div class='del'>-        ec_heal_t *heal = fop-&gt;data;</div><div class='add'>+    ec_fop_data_t *fop = cookie;</div><div class='add'>+    ec_heal_t *heal = fop-&gt;data;</div><div class='ctx'> </div><div class='del'>-        fop-&gt;heal = NULL;</div><div class='del'>-        heal-&gt;fop = NULL;</div><div class='del'>-        heal-&gt;error = op_ret &lt; 0 ? op_errno : 0;</div><div class='del'>-        syncbarrier_wake (heal-&gt;data);</div><div class='del'>-        return 0;</div><div class='add'>+    fop-&gt;heal = NULL;</div><div class='add'>+    heal-&gt;fop = NULL;</div><div class='add'>+    heal-&gt;error = op_ret &lt; 0 ? op_errno : 0;</div><div class='add'>+    syncbarrier_wake(heal-&gt;data);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_sync_heal_block (call_frame_t *frame, xlator_t *this, ec_heal_t *heal)</div><div class='add'>+ec_sync_heal_block(call_frame_t *frame, xlator_t *this, ec_heal_t *heal)</div><div class='ctx'> {</div><div class='del'>-        ec_heal_block (frame, this, heal-&gt;bad|heal-&gt;good, EC_MINIMUM_ONE,</div><div class='del'>-                       ec_heal_block_done, heal);</div><div class='del'>-        syncbarrier_wait (heal-&gt;data, 1);</div><div class='del'>-        if (heal-&gt;error != 0) {</div><div class='del'>-                return -heal-&gt;error;</div><div class='del'>-        }</div><div class='del'>-        if (heal-&gt;bad == 0)</div><div class='del'>-                return -ENOTCONN;</div><div class='del'>-        return 0;</div><div class='add'>+    ec_heal_block(frame, this, heal-&gt;bad | heal-&gt;good, EC_MINIMUM_ONE,</div><div class='add'>+                  ec_heal_block_done, heal);</div><div class='add'>+    syncbarrier_wait(heal-&gt;data, 1);</div><div class='add'>+    if (heal-&gt;error != 0) {</div><div class='add'>+        return -heal-&gt;error;</div><div class='add'>+    }</div><div class='add'>+    if (heal-&gt;bad == 0)</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_rebuild_data (call_frame_t *frame, ec_t *ec, fd_t *fd, uint64_t size,</div><div class='del'>-                 unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+ec_rebuild_data(call_frame_t *frame, ec_t *ec, fd_t *fd, uint64_t size,</div><div class='add'>+                unsigned char *sources, unsigned char *healed_sinks)</div><div class='ctx'> {</div><div class='del'>-        ec_heal_t        *heal = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        syncbarrier_t    barrier;</div><div class='del'>-</div><div class='del'>-        if (syncbarrier_init (&amp;barrier))</div><div class='del'>-                return -ENOMEM;</div><div class='del'>-</div><div class='del'>-        heal = alloca0(sizeof (*heal));</div><div class='del'>-        heal-&gt;fd = fd_ref (fd);</div><div class='del'>-        heal-&gt;xl = ec-&gt;xl;</div><div class='del'>-        heal-&gt;data = &amp;barrier;</div><div class='del'>-        ec_adjust_size_up (ec, &amp;size, _gf_false);</div><div class='del'>-        heal-&gt;total_size = size;</div><div class='del'>-        heal-&gt;size = (128 * GF_UNIT_KB * (ec-&gt;self_heal_window_size));</div><div class='del'>-        /* We need to adjust the size to a multiple of the stripe size of the</div><div class='del'>-         * volume. Otherwise writes would need to fill gaps (head and/or tail)</div><div class='del'>-         * with existent data from the bad bricks. This could be garbage on a</div><div class='del'>-         * damaged file or it could fail if there aren't enough bricks. */</div><div class='del'>-        heal-&gt;size -= heal-&gt;size % ec-&gt;stripe_size;</div><div class='del'>-        heal-&gt;bad       = ec_char_array_to_mask (healed_sinks, ec-&gt;nodes);</div><div class='del'>-        heal-&gt;good      = ec_char_array_to_mask (sources, ec-&gt;nodes);</div><div class='del'>-        heal-&gt;iatt.ia_type = IA_IFREG;</div><div class='del'>-        LOCK_INIT(&amp;heal-&gt;lock);</div><div class='del'>-</div><div class='del'>-        for (heal-&gt;offset = 0; (heal-&gt;offset &lt; size) &amp;&amp; !heal-&gt;done;</div><div class='del'>-                                                   heal-&gt;offset += heal-&gt;size) {</div><div class='del'>-                /* We immediately abort any heal if a shutdown request has been</div><div class='del'>-                 * received to avoid delays. The healing of this file will be</div><div class='del'>-                 * restarted by another SHD or other client that accesses the</div><div class='del'>-                 * file. */</div><div class='del'>-                if (ec-&gt;shutdown) {</div><div class='del'>-                        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "Cancelling heal because "</div><div class='del'>-                                                      "EC is stopping.");</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: sources: %d, sinks: "</div><div class='del'>-                        "%d, offset: %"PRIu64" bsize: %"PRIu64,</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        EC_COUNT (sources, ec-&gt;nodes),</div><div class='del'>-                        EC_COUNT (healed_sinks, ec-&gt;nodes), heal-&gt;offset,</div><div class='del'>-                        heal-&gt;size);</div><div class='del'>-                ret = ec_sync_heal_block (frame, ec-&gt;xl, heal);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        memset (healed_sinks, 0, ec-&gt;nodes);</div><div class='del'>-        ec_mask_to_char_array (heal-&gt;bad, healed_sinks, ec-&gt;nodes);</div><div class='del'>-        fd_unref (heal-&gt;fd);</div><div class='del'>-        LOCK_DESTROY (&amp;heal-&gt;lock);</div><div class='del'>-        syncbarrier_destroy (heal-&gt;data);</div><div class='add'>+    ec_heal_t *heal = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    syncbarrier_t barrier;</div><div class='add'>+</div><div class='add'>+    if (syncbarrier_init(&amp;barrier))</div><div class='add'>+        return -ENOMEM;</div><div class='add'>+</div><div class='add'>+    heal = alloca0(sizeof(*heal));</div><div class='add'>+    heal-&gt;fd = fd_ref(fd);</div><div class='add'>+    heal-&gt;xl = ec-&gt;xl;</div><div class='add'>+    heal-&gt;data = &amp;barrier;</div><div class='add'>+    ec_adjust_size_up(ec, &amp;size, _gf_false);</div><div class='add'>+    heal-&gt;total_size = size;</div><div class='add'>+    heal-&gt;size = (128 * GF_UNIT_KB * (ec-&gt;self_heal_window_size));</div><div class='add'>+    /* We need to adjust the size to a multiple of the stripe size of the</div><div class='add'>+     * volume. Otherwise writes would need to fill gaps (head and/or tail)</div><div class='add'>+     * with existent data from the bad bricks. This could be garbage on a</div><div class='add'>+     * damaged file or it could fail if there aren't enough bricks. */</div><div class='add'>+    heal-&gt;size -= heal-&gt;size % ec-&gt;stripe_size;</div><div class='add'>+    heal-&gt;bad = ec_char_array_to_mask(healed_sinks, ec-&gt;nodes);</div><div class='add'>+    heal-&gt;good = ec_char_array_to_mask(sources, ec-&gt;nodes);</div><div class='add'>+    heal-&gt;iatt.ia_type = IA_IFREG;</div><div class='add'>+    LOCK_INIT(&amp;heal-&gt;lock);</div><div class='add'>+</div><div class='add'>+    for (heal-&gt;offset = 0; (heal-&gt;offset &lt; size) &amp;&amp; !heal-&gt;done;</div><div class='add'>+         heal-&gt;offset += heal-&gt;size) {</div><div class='add'>+        /* We immediately abort any heal if a shutdown request has been</div><div class='add'>+         * received to avoid delays. The healing of this file will be</div><div class='add'>+         * restarted by another SHD or other client that accesses the</div><div class='add'>+         * file. */</div><div class='add'>+        if (ec-&gt;shutdown) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "Cancelling heal because "</div><div class='add'>+                         "EC is stopping.");</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                     "%s: sources: %d, sinks: "</div><div class='add'>+                     "%d, offset: %" PRIu64 " bsize: %" PRIu64,</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), EC_COUNT(sources, ec-&gt;nodes),</div><div class='add'>+                     EC_COUNT(healed_sinks, ec-&gt;nodes), heal-&gt;offset,</div><div class='add'>+                     heal-&gt;size);</div><div class='add'>+        ret = ec_sync_heal_block(frame, ec-&gt;xl, heal);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid), strerror (-ret));</div><div class='del'>-        return ret;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    memset(healed_sinks, 0, ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(heal-&gt;bad, healed_sinks, ec-&gt;nodes);</div><div class='add'>+    fd_unref(heal-&gt;fd);</div><div class='add'>+    LOCK_DESTROY(&amp;heal-&gt;lock);</div><div class='add'>+    syncbarrier_destroy(heal-&gt;data);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(-ret));</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_trim_sinks (call_frame_t *frame, ec_t *ec,</div><div class='del'>-                      fd_t *fd, unsigned char *healed_sinks,</div><div class='del'>-                      unsigned char *trim, uint64_t size)</div><div class='add'>+__ec_heal_trim_sinks(call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='add'>+                     unsigned char *healed_sinks, unsigned char *trim,</div><div class='add'>+                     uint64_t size)</div><div class='ctx'> {</div><div class='del'>-        default_args_cbk_t *replies = NULL;</div><div class='del'>-        unsigned char      *output  = NULL;</div><div class='del'>-        int                ret      = 0;</div><div class='del'>-        int                i        = 0;</div><div class='del'>-        off_t        trim_offset    = 0;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    off_t trim_offset = 0;</div><div class='ctx'> </div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        output       = alloca0 (ec-&gt;nodes);</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (trim, ec-&gt;nodes) == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        trim_offset = size;</div><div class='del'>-        ec_adjust_offset_up (ec, &amp;trim_offset, _gf_true);</div><div class='del'>-        ret = cluster_ftruncate (ec-&gt;xl_list, trim, ec-&gt;nodes, replies, output,</div><div class='del'>-                                 frame, ec-&gt;xl, fd, trim_offset, NULL);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!output[i] &amp;&amp; trim[i])</div><div class='del'>-                        healed_sinks[i] = 0;</div><div class='del'>-        }</div><div class='add'>+    if (EC_COUNT(trim, ec-&gt;nodes) == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    trim_offset = size;</div><div class='add'>+    ec_adjust_offset_up(ec, &amp;trim_offset, _gf_true);</div><div class='add'>+    ret = cluster_ftruncate(ec-&gt;xl_list, trim, ec-&gt;nodes, replies, output,</div><div class='add'>+                            frame, ec-&gt;xl, fd, trim_offset, NULL);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!output[i] &amp;&amp; trim[i])</div><div class='add'>+            healed_sinks[i] = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid), strerror (-ret));</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "%s: heal failed %s",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(-ret));</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_data_undo_pending (call_frame_t *frame, ec_t *ec, fd_t *fd, dict_t *xattr,</div><div class='del'>-                      uint64_t *versions, uint64_t *dirty, uint64_t *size,</div><div class='del'>-                      int source, gf_boolean_t erase_dirty, int idx)</div><div class='del'>-{</div><div class='del'>-        uint64_t versions_xattr[2] = {0};</div><div class='del'>-        uint64_t dirty_xattr[2]    = {0};</div><div class='del'>-        uint64_t allzero[2]        = {0};</div><div class='del'>-        uint64_t size_xattr        = 0;</div><div class='del'>-        int      ret               = 0;</div><div class='del'>-</div><div class='del'>-        versions_xattr[EC_DATA_TXN] = hton64(versions[source] - versions[idx]);</div><div class='del'>-        ret = dict_set_static_bin (xattr, EC_XATTR_VERSION,</div><div class='del'>-                                   versions_xattr,</div><div class='del'>-                                   sizeof (versions_xattr));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+ec_data_undo_pending(call_frame_t *frame, ec_t *ec, fd_t *fd, dict_t *xattr,</div><div class='add'>+                     uint64_t *versions, uint64_t *dirty, uint64_t *size,</div><div class='add'>+                     int source, gf_boolean_t erase_dirty, int idx)</div><div class='add'>+{</div><div class='add'>+    uint64_t versions_xattr[2] = {0};</div><div class='add'>+    uint64_t dirty_xattr[2] = {0};</div><div class='add'>+    uint64_t allzero[2] = {0};</div><div class='add'>+    uint64_t size_xattr = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    versions_xattr[EC_DATA_TXN] = hton64(versions[source] - versions[idx]);</div><div class='add'>+    ret = dict_set_static_bin(xattr, EC_XATTR_VERSION, versions_xattr,</div><div class='add'>+                              sizeof(versions_xattr));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        size_xattr = hton64(size[source] - size[idx]);</div><div class='del'>-        ret = dict_set_static_bin (xattr, EC_XATTR_SIZE,</div><div class='del'>-                                   &amp;size_xattr, sizeof (size_xattr));</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    size_xattr = hton64(size[source] - size[idx]);</div><div class='add'>+    ret = dict_set_static_bin(xattr, EC_XATTR_SIZE, &amp;size_xattr,</div><div class='add'>+                              sizeof(size_xattr));</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (erase_dirty) {</div><div class='del'>-                dirty_xattr[EC_DATA_TXN] = hton64(-dirty[idx]);</div><div class='del'>-                ret = dict_set_static_bin (xattr, EC_XATTR_DIRTY,</div><div class='del'>-                                           dirty_xattr,</div><div class='del'>-                                           sizeof (dirty_xattr));</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (erase_dirty) {</div><div class='add'>+        dirty_xattr[EC_DATA_TXN] = hton64(-dirty[idx]);</div><div class='add'>+        ret = dict_set_static_bin(xattr, EC_XATTR_DIRTY, dirty_xattr,</div><div class='add'>+                                  sizeof(dirty_xattr));</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((memcmp (versions_xattr, allzero, sizeof (allzero)) == 0) &amp;&amp;</div><div class='del'>-            (memcmp (dirty_xattr, allzero, sizeof (allzero)) == 0) &amp;&amp;</div><div class='del'>-             (size_xattr == 0)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((memcmp(versions_xattr, allzero, sizeof(allzero)) == 0) &amp;&amp;</div><div class='add'>+        (memcmp(dirty_xattr, allzero, sizeof(allzero)) == 0) &amp;&amp;</div><div class='add'>+        (size_xattr == 0)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fxattrop (ec-&gt;xl_list[idx], fd,</div><div class='del'>-                               GF_XATTROP_ADD_ARRAY64, xattr, NULL, NULL, NULL);</div><div class='add'>+    ret = syncop_fxattrop(ec-&gt;xl_list[idx], fd, GF_XATTROP_ADD_ARRAY64, xattr,</div><div class='add'>+                          NULL, NULL, NULL);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_fd_data_adjust_versions (call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='del'>-                            unsigned char *sources, unsigned char *healed_sinks,</div><div class='del'>-                            uint64_t *versions, uint64_t *dirty, uint64_t *size)</div><div class='del'>-{</div><div class='del'>-        dict_t                     *xattr            = NULL;</div><div class='del'>-        int                        i                 = 0;</div><div class='del'>-        int                        ret               = 0;</div><div class='del'>-        int                        op_ret            = 0;</div><div class='del'>-        int                        source            = -1;</div><div class='del'>-        gf_boolean_t               erase_dirty       = _gf_false;</div><div class='del'>-</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                op_ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* dirty xattr represents if the file needs heal. Unless all the</div><div class='del'>-         * copies are healed, don't erase it */</div><div class='del'>-        if (EC_COUNT (sources, ec-&gt;nodes) +</div><div class='del'>-            EC_COUNT (healed_sinks, ec-&gt;nodes) == ec-&gt;nodes)</div><div class='del'>-                erase_dirty = _gf_true;</div><div class='add'>+__ec_fd_data_adjust_versions(call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='add'>+                             unsigned char *sources,</div><div class='add'>+                             unsigned char *healed_sinks, uint64_t *versions,</div><div class='add'>+                             uint64_t *dirty, uint64_t *size)</div><div class='add'>+{</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int source = -1;</div><div class='add'>+    gf_boolean_t erase_dirty = _gf_false;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        op_ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (sources[i]) {</div><div class='del'>-                        source = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    /* dirty xattr represents if the file needs heal. Unless all the</div><div class='add'>+     * copies are healed, don't erase it */</div><div class='add'>+    if (EC_COUNT(sources, ec-&gt;nodes) + EC_COUNT(healed_sinks, ec-&gt;nodes) ==</div><div class='add'>+        ec-&gt;nodes)</div><div class='add'>+        erase_dirty = _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (source == -1) {</div><div class='del'>-                op_ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (sources[i]) {</div><div class='add'>+            source = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (healed_sinks[i]) {</div><div class='del'>-                        ret = ec_data_undo_pending (frame, ec, fd, xattr,</div><div class='del'>-                                                    versions, dirty, size,</div><div class='del'>-                                                    source, erase_dirty, i);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    if (source == -1) {</div><div class='add'>+        op_ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!erase_dirty)</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (healed_sinks[i]) {</div><div class='add'>+            ret = ec_data_undo_pending(frame, ec, fd, xattr, versions, dirty,</div><div class='add'>+                                       size, source, erase_dirty, i);</div><div class='add'>+            if (ret &lt; 0)</div><div class='ctx'>                 goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (sources[i]) {</div><div class='del'>-                        ret = ec_data_undo_pending (frame, ec, fd, xattr,</div><div class='del'>-                                                    versions, dirty, size,</div><div class='del'>-                                                    source, erase_dirty, i);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                continue;</div><div class='del'>-                }</div><div class='add'>+    if (!erase_dirty)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (sources[i]) {</div><div class='add'>+            ret = ec_data_undo_pending(frame, ec, fd, xattr, versions, dirty,</div><div class='add'>+                                       size, source, erase_dirty, i);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                continue;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return op_ret;</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_restore_time_and_adjust_versions (call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='del'>-                                     unsigned char *sources,</div><div class='del'>-                                     unsigned char *healed_sinks,</div><div class='del'>-                                     uint64_t *versions, uint64_t *dirty,</div><div class='del'>-                                     uint64_t *size)</div><div class='del'>-{</div><div class='del'>-        unsigned char      *locked_on           = NULL;</div><div class='del'>-        unsigned char      *participants        = NULL;</div><div class='del'>-        unsigned char      *output              = NULL;</div><div class='del'>-        default_args_cbk_t *replies             = NULL;</div><div class='del'>-        unsigned char      *postsh_sources      = NULL;</div><div class='del'>-        unsigned char      *postsh_healed_sinks = NULL;</div><div class='del'>-        unsigned char      *postsh_trim         = NULL;</div><div class='del'>-        uint64_t           *postsh_versions     = NULL;</div><div class='del'>-        uint64_t           *postsh_dirty        = NULL;</div><div class='del'>-        uint64_t           *postsh_size         = NULL;</div><div class='del'>-        int                ret                  = 0;</div><div class='del'>-        int                i                    = 0;</div><div class='del'>-        struct iatt        source_buf           = {0};</div><div class='del'>-        loc_t              loc                  = {0};</div><div class='del'>-</div><div class='del'>-        locked_on           = alloca0(ec-&gt;nodes);</div><div class='del'>-        output              = alloca0(ec-&gt;nodes);</div><div class='del'>-        participants        = alloca0(ec-&gt;nodes);</div><div class='del'>-        postsh_sources      = alloca0(ec-&gt;nodes);</div><div class='del'>-        postsh_healed_sinks = alloca0(ec-&gt;nodes);</div><div class='del'>-        postsh_trim         = alloca0(ec-&gt;nodes);</div><div class='del'>-        postsh_versions     = alloca0(ec-&gt;nodes * sizeof (*postsh_versions));</div><div class='del'>-        postsh_dirty        = alloca0(ec-&gt;nodes * sizeof (*postsh_dirty));</div><div class='del'>-        postsh_size         = alloca0(ec-&gt;nodes * sizeof (*postsh_size));</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (healed_sinks[i] || sources[i])</div><div class='del'>-                        participants[i] = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        ret = cluster_inodelk (ec-&gt;xl_list, participants, ec-&gt;nodes, replies,</div><div class='del'>-                               locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name,</div><div class='del'>-                               fd-&gt;inode, 0, 0);</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: Skipping heal "</div><div class='del'>-                                "as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (fd-&gt;inode-&gt;gfid), ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+ec_restore_time_and_adjust_versions(call_frame_t *frame, ec_t *ec, fd_t *fd,</div><div class='add'>+                                    unsigned char *sources,</div><div class='add'>+                                    unsigned char *healed_sinks,</div><div class='add'>+                                    uint64_t *versions, uint64_t *dirty,</div><div class='add'>+                                    uint64_t *size)</div><div class='add'>+{</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *participants = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    unsigned char *postsh_sources = NULL;</div><div class='add'>+    unsigned char *postsh_healed_sinks = NULL;</div><div class='add'>+    unsigned char *postsh_trim = NULL;</div><div class='add'>+    uint64_t *postsh_versions = NULL;</div><div class='add'>+    uint64_t *postsh_dirty = NULL;</div><div class='add'>+    uint64_t *postsh_size = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct iatt source_buf = {0};</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    participants = alloca0(ec-&gt;nodes);</div><div class='add'>+    postsh_sources = alloca0(ec-&gt;nodes);</div><div class='add'>+    postsh_healed_sinks = alloca0(ec-&gt;nodes);</div><div class='add'>+    postsh_trim = alloca0(ec-&gt;nodes);</div><div class='add'>+    postsh_versions = alloca0(ec-&gt;nodes * sizeof(*postsh_versions));</div><div class='add'>+    postsh_dirty = alloca0(ec-&gt;nodes * sizeof(*postsh_dirty));</div><div class='add'>+    postsh_size = alloca0(ec-&gt;nodes * sizeof(*postsh_size));</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (healed_sinks[i] || sources[i])</div><div class='add'>+            participants[i] = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = __ec_heal_data_prepare (frame, ec, fd, locked_on,</div><div class='del'>-                                              postsh_versions, postsh_dirty,</div><div class='del'>-                                              postsh_size, postsh_sources,</div><div class='del'>-                                              postsh_healed_sinks, postsh_trim,</div><div class='del'>-                                              &amp;source_buf);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                loc.inode = inode_ref (fd-&gt;inode);</div><div class='del'>-                gf_uuid_copy (loc.gfid, fd-&gt;inode-&gt;gfid);</div><div class='del'>-                ret = cluster_setattr (ec-&gt;xl_list, healed_sinks, ec-&gt;nodes,</div><div class='del'>-                                       replies, output, frame, ec-&gt;xl, &amp;loc,</div><div class='del'>-                                       &amp;source_buf,</div><div class='del'>-                                       GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME,</div><div class='del'>-                                       NULL);</div><div class='del'>-                EC_INTERSECT (healed_sinks, healed_sinks, output, ec-&gt;nodes);</div><div class='del'>-                if (EC_COUNT (healed_sinks, ec-&gt;nodes) == 0) {</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ret = __ec_fd_data_adjust_versions (frame, ec, fd, sources,</div><div class='del'>-                                           healed_sinks, versions, dirty, size);</div><div class='del'>-        }</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    ret = cluster_inodelk(ec-&gt;xl_list, participants, ec-&gt;nodes, replies,</div><div class='add'>+                          locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, fd-&gt;inode, 0,</div><div class='add'>+                          0);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping heal "</div><div class='add'>+                         "as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __ec_heal_data_prepare(frame, ec, fd, locked_on, postsh_versions,</div><div class='add'>+                                     postsh_dirty, postsh_size, postsh_sources,</div><div class='add'>+                                     postsh_healed_sinks, postsh_trim,</div><div class='add'>+                                     &amp;source_buf);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        loc.inode = inode_ref(fd-&gt;inode);</div><div class='add'>+        gf_uuid_copy(loc.gfid, fd-&gt;inode-&gt;gfid);</div><div class='add'>+        ret = cluster_setattr(ec-&gt;xl_list, healed_sinks, ec-&gt;nodes, replies,</div><div class='add'>+                              output, frame, ec-&gt;xl, &amp;loc, &amp;source_buf,</div><div class='add'>+                              GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME, NULL);</div><div class='add'>+        EC_INTERSECT(healed_sinks, healed_sinks, output, ec-&gt;nodes);</div><div class='add'>+        if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ret = __ec_fd_data_adjust_versions(frame, ec, fd, sources, healed_sinks,</div><div class='add'>+                                           versions, dirty, size);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, ec-&gt;xl-&gt;name, fd-&gt;inode, 0, 0);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, ec-&gt;xl-&gt;name, fd-&gt;inode, 0, 0);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_heal_data (call_frame_t *frame, ec_t *ec, fd_t *fd, unsigned char *heal_on,</div><div class='del'>-                unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+__ec_heal_data(call_frame_t *frame, ec_t *ec, fd_t *fd, unsigned char *heal_on,</div><div class='add'>+               unsigned char *sources, unsigned char *healed_sinks)</div><div class='ctx'> {</div><div class='del'>-        unsigned char      *locked_on    = NULL;</div><div class='del'>-        unsigned char      *output       = NULL;</div><div class='del'>-        uint64_t           *versions     = NULL;</div><div class='del'>-        uint64_t           *dirty        = NULL;</div><div class='del'>-        uint64_t           *size         = NULL;</div><div class='del'>-        unsigned char      *trim         = NULL;</div><div class='del'>-        default_args_cbk_t *replies      = NULL;</div><div class='del'>-        int                ret           = 0;</div><div class='del'>-        int                source        = 0;</div><div class='del'>-</div><div class='del'>-        locked_on    = alloca0(ec-&gt;nodes);</div><div class='del'>-        output       = alloca0(ec-&gt;nodes);</div><div class='del'>-        trim         = alloca0 (ec-&gt;nodes);</div><div class='del'>-        versions     = alloca0 (ec-&gt;nodes * sizeof (*versions));</div><div class='del'>-        dirty        = alloca0 (ec-&gt;nodes * sizeof (*dirty));</div><div class='del'>-        size         = alloca0 (ec-&gt;nodes * sizeof (*size));</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        ret = cluster_inodelk (ec-&gt;xl_list, heal_on, ec-&gt;nodes, replies,</div><div class='del'>-                               locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name,</div><div class='del'>-                               fd-&gt;inode, 0, 0);</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: Skipping heal "</div><div class='del'>-                                "as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (fd-&gt;inode-&gt;gfid), ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = __ec_heal_data_prepare (frame, ec, fd, locked_on,</div><div class='del'>-                                              versions, dirty, size, sources,</div><div class='del'>-                                              healed_sinks, trim, NULL);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='del'>-                        ret = __ec_fd_data_adjust_versions (frame, ec, fd,</div><div class='del'>-                                                            sources,</div><div class='del'>-                                        healed_sinks, versions, dirty, size);</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    uint64_t *versions = NULL;</div><div class='add'>+    uint64_t *dirty = NULL;</div><div class='add'>+    uint64_t *size = NULL;</div><div class='add'>+    unsigned char *trim = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int source = 0;</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    trim = alloca0(ec-&gt;nodes);</div><div class='add'>+    versions = alloca0(ec-&gt;nodes * sizeof(*versions));</div><div class='add'>+    dirty = alloca0(ec-&gt;nodes * sizeof(*dirty));</div><div class='add'>+    size = alloca0(ec-&gt;nodes * sizeof(*size));</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    ret = cluster_inodelk(ec-&gt;xl_list, heal_on, ec-&gt;nodes, replies, locked_on,</div><div class='add'>+                          frame, ec-&gt;xl, ec-&gt;xl-&gt;name, fd-&gt;inode, 0, 0);</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping heal "</div><div class='add'>+                         "as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(fd-&gt;inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                source = ret;</div><div class='del'>-                ret = __ec_heal_mark_sinks (frame, ec, fd, versions,</div><div class='del'>-                                            healed_sinks);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto unlock;</div><div class='add'>+        ret = __ec_heal_data_prepare(frame, ec, fd, locked_on, versions, dirty,</div><div class='add'>+                                     size, sources, healed_sinks, trim, NULL);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                ret = __ec_heal_trim_sinks (frame, ec, fd, healed_sinks,</div><div class='del'>-                                            trim, size[source]);</div><div class='add'>+        if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0) {</div><div class='add'>+            ret = __ec_fd_data_adjust_versions(</div><div class='add'>+                frame, ec, fd, sources, healed_sinks, versions, dirty, size);</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, ec-&gt;xl-&gt;name, fd-&gt;inode, 0, 0);</div><div class='add'>+</div><div class='add'>+        source = ret;</div><div class='add'>+        ret = __ec_heal_mark_sinks(frame, ec, fd, versions, healed_sinks);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0)</div><div class='del'>-                goto out;</div><div class='add'>+        ret = __ec_heal_trim_sinks(frame, ec, fd, healed_sinks, trim,</div><div class='add'>+                                   size[source]);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, ec-&gt;xl-&gt;name, fd-&gt;inode, 0, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: sources: %d, sinks: "</div><div class='del'>-                "%d", uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                EC_COUNT (sources, ec-&gt;nodes),</div><div class='del'>-                EC_COUNT (healed_sinks, ec-&gt;nodes));</div><div class='add'>+    if (EC_COUNT(healed_sinks, ec-&gt;nodes) == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = ec_rebuild_data (frame, ec, fd, size[source], sources,</div><div class='del'>-                               healed_sinks);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                 "%s: sources: %d, sinks: "</div><div class='add'>+                 "%d",</div><div class='add'>+                 uuid_utoa(fd-&gt;inode-&gt;gfid), EC_COUNT(sources, ec-&gt;nodes),</div><div class='add'>+                 EC_COUNT(healed_sinks, ec-&gt;nodes));</div><div class='add'>+</div><div class='add'>+    ret = ec_rebuild_data(frame, ec, fd, size[source], sources, healed_sinks);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = ec_restore_time_and_adjust_versions (frame, ec, fd, sources,</div><div class='del'>-                                                   healed_sinks, versions,</div><div class='del'>-                                                   dirty, size);</div><div class='add'>+    ret = ec_restore_time_and_adjust_versions(</div><div class='add'>+        frame, ec, fd, sources, healed_sinks, versions, dirty, size);</div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_data (call_frame_t *frame, ec_t *ec, gf_boolean_t block, inode_t *inode,</div><div class='del'>-              unsigned char *sources, unsigned char *healed_sinks)</div><div class='del'>-{</div><div class='del'>-        unsigned char      *locked_on            = NULL;</div><div class='del'>-        unsigned char      *up_subvols           = NULL;</div><div class='del'>-        unsigned char      *output               = NULL;</div><div class='del'>-        default_args_cbk_t *replies              = NULL;</div><div class='del'>-        fd_t               *fd                   = NULL;</div><div class='del'>-        loc_t               loc                  = {0};</div><div class='del'>-        char               selfheal_domain[1024] = {0};</div><div class='del'>-        int                ret                   = 0;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        locked_on  = alloca0(ec-&gt;nodes);</div><div class='del'>-        output     = alloca0(ec-&gt;nodes);</div><div class='del'>-        up_subvols = alloca0(ec-&gt;nodes);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        fd = fd_create (inode, 0);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+ec_heal_data(call_frame_t *frame, ec_t *ec, gf_boolean_t block, inode_t *inode,</div><div class='add'>+             unsigned char *sources, unsigned char *healed_sinks)</div><div class='add'>+{</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *up_subvols = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    char selfheal_domain[1024] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    up_subvols = alloca0(ec-&gt;nodes);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    fd = fd_create(inode, 0);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='ctx'> </div><div class='del'>-        ret = cluster_open (ec-&gt;xl_list, up_subvols, ec-&gt;nodes, replies, output,</div><div class='del'>-                            frame, ec-&gt;xl, &amp;loc, O_RDWR|O_LARGEFILE, fd, NULL);</div><div class='del'>-        if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                ret = -ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = cluster_open(ec-&gt;xl_list, up_subvols, ec-&gt;nodes, replies, output,</div><div class='add'>+                       frame, ec-&gt;xl, &amp;loc, O_RDWR | O_LARGEFILE, fd, NULL);</div><div class='add'>+    if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+        ret = -ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='del'>-        sprintf (selfheal_domain, "%s:self-heal", ec-&gt;xl-&gt;name);</div><div class='del'>-        /*If other processes are already doing the heal, don't block*/</div><div class='del'>-        if (block) {</div><div class='del'>-                ret = cluster_inodelk (ec-&gt;xl_list, output, ec-&gt;nodes, replies,</div><div class='del'>-                                       locked_on, frame, ec-&gt;xl,</div><div class='del'>-                                       selfheal_domain, inode, 0, 0);</div><div class='del'>-        } else {</div><div class='del'>-                ret = cluster_tiebreaker_inodelk (ec-&gt;xl_list, output,</div><div class='del'>-                                                  ec-&gt;nodes, replies, locked_on,</div><div class='del'>-                                                  frame, ec-&gt;xl,</div><div class='del'>-                                                  selfheal_domain, inode, 0, 0);</div><div class='del'>-        }</div><div class='del'>-        {</div><div class='del'>-                if (ret &lt;= ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "%s: Skipping heal "</div><div class='del'>-                                "as only %d number of subvolumes could "</div><div class='del'>-                                "be locked", uuid_utoa (inode-&gt;gfid), ret);</div><div class='del'>-                        ret = -ENOTCONN;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                ret = __ec_heal_data (frame, ec, fd, locked_on, sources,</div><div class='del'>-                                      healed_sinks);</div><div class='del'>-        }</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+    sprintf(selfheal_domain, "%s:self-heal", ec-&gt;xl-&gt;name);</div><div class='add'>+    /*If other processes are already doing the heal, don't block*/</div><div class='add'>+    if (block) {</div><div class='add'>+        ret = cluster_inodelk(ec-&gt;xl_list, output, ec-&gt;nodes, replies,</div><div class='add'>+                              locked_on, frame, ec-&gt;xl, selfheal_domain, inode,</div><div class='add'>+                              0, 0);</div><div class='add'>+    } else {</div><div class='add'>+        ret = cluster_tiebreaker_inodelk(ec-&gt;xl_list, output, ec-&gt;nodes,</div><div class='add'>+                                         replies, locked_on, frame, ec-&gt;xl,</div><div class='add'>+                                         selfheal_domain, inode, 0, 0);</div><div class='add'>+    }</div><div class='add'>+    {</div><div class='add'>+        if (ret &lt;= ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(ec-&gt;xl-&gt;name, 0,</div><div class='add'>+                         "%s: Skipping heal "</div><div class='add'>+                         "as only %d number of subvolumes could "</div><div class='add'>+                         "be locked",</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid), ret);</div><div class='add'>+            ret = -ENOTCONN;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        ret = __ec_heal_data(frame, ec, fd, locked_on, sources, healed_sinks);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='del'>-                           frame, ec-&gt;xl, selfheal_domain, inode, 0, 0);</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, selfheal_domain, inode, 0, 0);</div><div class='ctx'> out:</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_heal_do (xlator_t *this, void *data, loc_t *loc, int32_t partial)</div><div class='del'>-{</div><div class='del'>-        call_frame_t  *frame         = NULL;</div><div class='del'>-        unsigned char *participants  = NULL;</div><div class='del'>-        unsigned char *msources      = NULL;</div><div class='del'>-        unsigned char *mhealed_sinks = NULL;</div><div class='del'>-        unsigned char *sources       = NULL;</div><div class='del'>-        unsigned char *healed_sinks  = NULL;</div><div class='del'>-        ec_t          *ec            = NULL;</div><div class='del'>-        int           ret            = 0;</div><div class='del'>-        int           op_ret         = 0;</div><div class='del'>-        int           op_errno       = 0;</div><div class='del'>-        intptr_t      mgood          = 0;</div><div class='del'>-        intptr_t      mbad           = 0;</div><div class='del'>-        intptr_t      good           = 0;</div><div class='del'>-        intptr_t      bad            = 0;</div><div class='del'>-        ec_fop_data_t *fop           = data;</div><div class='del'>-        gf_boolean_t  blocking       = _gf_false;</div><div class='del'>-        ec_heal_need_t  need_heal    = EC_HEAL_NONEED;</div><div class='del'>-        unsigned char *up_subvols    = NULL;</div><div class='del'>-        char up_bricks[32];</div><div class='del'>-</div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* If it is heal request from getxattr, complete the heal and then</div><div class='del'>-         * unwind, if it is ec_heal with NULL as frame then no need to block</div><div class='del'>-         * the heal as the caller doesn't care about its completion. In case</div><div class='del'>-         * of heald whichever gets tiebreaking inodelk will take care of the</div><div class='del'>-         * heal, so no need to block*/</div><div class='del'>-        if (fop-&gt;req_frame &amp;&amp; !ec-&gt;shd.iamshd)</div><div class='del'>-                blocking = _gf_true;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame)</div><div class='del'>-                goto out;</div><div class='add'>+ec_heal_do(xlator_t *this, void *data, loc_t *loc, int32_t partial)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    unsigned char *participants = NULL;</div><div class='add'>+    unsigned char *msources = NULL;</div><div class='add'>+    unsigned char *mhealed_sinks = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    intptr_t mgood = 0;</div><div class='add'>+    intptr_t mbad = 0;</div><div class='add'>+    intptr_t good = 0;</div><div class='add'>+    intptr_t bad = 0;</div><div class='add'>+    ec_fop_data_t *fop = data;</div><div class='add'>+    gf_boolean_t blocking = _gf_false;</div><div class='add'>+    ec_heal_need_t need_heal = EC_HEAL_NONEED;</div><div class='add'>+    unsigned char *up_subvols = NULL;</div><div class='add'>+    char up_bricks[32];</div><div class='add'>+</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* If it is heal request from getxattr, complete the heal and then</div><div class='add'>+     * unwind, if it is ec_heal with NULL as frame then no need to block</div><div class='add'>+     * the heal as the caller doesn't care about its completion. In case</div><div class='add'>+     * of heald whichever gets tiebreaking inodelk will take care of the</div><div class='add'>+     * heal, so no need to block*/</div><div class='add'>+    if (fop-&gt;req_frame &amp;&amp; !ec-&gt;shd.iamshd)</div><div class='add'>+        blocking = _gf_true;</div><div class='add'>+</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ec_owner_set(frame, frame-&gt;root);</div><div class='del'>-        /*Do heal as root*/</div><div class='del'>-        frame-&gt;root-&gt;uid = 0;</div><div class='del'>-        frame-&gt;root-&gt;gid = 0;</div><div class='del'>-        /*Mark the fops as internal*/</div><div class='del'>-        frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='del'>-        participants = alloca0(ec-&gt;nodes);</div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, participants, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        up_subvols = alloca0(ec-&gt;nodes);</div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        if (loc-&gt;name &amp;&amp; strlen (loc-&gt;name)) {</div><div class='del'>-                ret = ec_heal_name (frame, ec, loc-&gt;parent, (char *)loc-&gt;name,</div><div class='del'>-                                    participants);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: name heal "</div><div class='del'>-                                "successful on %lX", loc-&gt;path,</div><div class='del'>-                                ec_char_array_to_mask (participants,</div><div class='del'>-                                    ec-&gt;nodes));</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s: name heal "</div><div class='del'>-                                "failed. ret = %d, subvolumes up = %s",</div><div class='del'>-                                loc-&gt;path, ret,</div><div class='del'>-                                ec_bin(up_bricks, sizeof(up_bricks), ec-&gt;xl_up,</div><div class='del'>-                                ec-&gt;nodes));</div><div class='del'>-                }</div><div class='add'>+    ec_owner_set(frame, frame-&gt;root);</div><div class='add'>+    /*Do heal as root*/</div><div class='add'>+    frame-&gt;root-&gt;uid = 0;</div><div class='add'>+    frame-&gt;root-&gt;gid = 0;</div><div class='add'>+    /*Mark the fops as internal*/</div><div class='add'>+    frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='add'>+    participants = alloca0(ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, participants, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    up_subvols = alloca0(ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;name &amp;&amp; strlen(loc-&gt;name)) {</div><div class='add'>+        ret = ec_heal_name(frame, ec, loc-&gt;parent, (char *)loc-&gt;name,</div><div class='add'>+                           participants);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s: name heal "</div><div class='add'>+                         "successful on %lX",</div><div class='add'>+                         loc-&gt;path,</div><div class='add'>+                         ec_char_array_to_mask(participants, ec-&gt;nodes));</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(</div><div class='add'>+                this-&gt;name, 0,</div><div class='add'>+                "%s: name heal "</div><div class='add'>+                "failed. ret = %d, subvolumes up = %s",</div><div class='add'>+                loc-&gt;path, ret,</div><div class='add'>+                ec_bin(up_bricks, sizeof(up_bricks), ec-&gt;xl_up, ec-&gt;nodes));</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Mount triggers heal only when it detects that it must need heal, shd</div><div class='del'>-         * triggers heals periodically which need not be thorough*/</div><div class='del'>-        ec_heal_inspect (frame, ec, loc-&gt;inode, up_subvols, _gf_false,</div><div class='del'>-                         !ec-&gt;shd.iamshd, &amp;need_heal);</div><div class='add'>+    /* Mount triggers heal only when it detects that it must need heal, shd</div><div class='add'>+     * triggers heals periodically which need not be thorough*/</div><div class='add'>+    ec_heal_inspect(frame, ec, loc-&gt;inode, up_subvols, _gf_false,</div><div class='add'>+                    !ec-&gt;shd.iamshd, &amp;need_heal);</div><div class='ctx'> </div><div class='del'>-        if (need_heal == EC_HEAL_NONEED)  {</div><div class='del'>-                gf_msg (ec-&gt;xl-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                        EC_MSG_HEAL_FAIL, "Heal is not required for : %s ",</div><div class='del'>-                        uuid_utoa(loc-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (need_heal == EC_HEAL_NONEED) {</div><div class='add'>+        gf_msg(ec-&gt;xl-&gt;name, GF_LOG_DEBUG, 0, EC_MSG_HEAL_FAIL,</div><div class='add'>+               "Heal is not required for : %s ", uuid_utoa(loc-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        msources = alloca0(ec-&gt;nodes);</div><div class='del'>-        mhealed_sinks = alloca0(ec-&gt;nodes);</div><div class='del'>-        ret = ec_heal_metadata (frame, ec, loc-&gt;inode, msources, mhealed_sinks);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                mgood = ec_char_array_to_mask (msources, ec-&gt;nodes);</div><div class='del'>-                mbad  = ec_char_array_to_mask (mhealed_sinks, ec-&gt;nodes);</div><div class='del'>-        } else {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-        }</div><div class='del'>-        sources = alloca0(ec-&gt;nodes);</div><div class='del'>-        healed_sinks = alloca0(ec-&gt;nodes);</div><div class='del'>-        if (IA_ISREG (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                ret = ec_heal_data (frame, ec, blocking, loc-&gt;inode, sources,</div><div class='del'>-                                    healed_sinks);</div><div class='del'>-        } else if (IA_ISDIR (loc-&gt;inode-&gt;ia_type) &amp;&amp; !partial) {</div><div class='del'>-                ret = ec_heal_entry (frame, ec, loc-&gt;inode, sources,</div><div class='del'>-                                     healed_sinks);</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-                memcpy (sources, participants, ec-&gt;nodes);</div><div class='del'>-                memcpy (healed_sinks, participants, ec-&gt;nodes);</div><div class='del'>-        }</div><div class='add'>+    msources = alloca0(ec-&gt;nodes);</div><div class='add'>+    mhealed_sinks = alloca0(ec-&gt;nodes);</div><div class='add'>+    ret = ec_heal_metadata(frame, ec, loc-&gt;inode, msources, mhealed_sinks);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        mgood = ec_char_array_to_mask(msources, ec-&gt;nodes);</div><div class='add'>+        mbad = ec_char_array_to_mask(mhealed_sinks, ec-&gt;nodes);</div><div class='add'>+    } else {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+    }</div><div class='add'>+    sources = alloca0(ec-&gt;nodes);</div><div class='add'>+    healed_sinks = alloca0(ec-&gt;nodes);</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        ret = ec_heal_data(frame, ec, blocking, loc-&gt;inode, sources,</div><div class='add'>+                           healed_sinks);</div><div class='add'>+    } else if (IA_ISDIR(loc-&gt;inode-&gt;ia_type) &amp;&amp; !partial) {</div><div class='add'>+        ret = ec_heal_entry(frame, ec, loc-&gt;inode, sources, healed_sinks);</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+        memcpy(sources, participants, ec-&gt;nodes);</div><div class='add'>+        memcpy(healed_sinks, participants, ec-&gt;nodes);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                good = ec_char_array_to_mask (sources, ec-&gt;nodes);</div><div class='del'>-                bad  = ec_char_array_to_mask (healed_sinks, ec-&gt;nodes);</div><div class='del'>-        } else {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-        }</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        good = ec_char_array_to_mask(sources, ec-&gt;nodes);</div><div class='add'>+        bad = ec_char_array_to_mask(healed_sinks, ec-&gt;nodes);</div><div class='add'>+    } else {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fop-&gt;cbks.heal) {</div><div class='del'>-                fop-&gt;cbks.heal (fop-&gt;req_frame, fop, fop-&gt;xl, op_ret,</div><div class='del'>-                                op_errno, ec_char_array_to_mask (participants,</div><div class='del'>-                                                                 ec-&gt;nodes),</div><div class='del'>-                                mgood &amp; good, mbad &amp; bad, NULL);</div><div class='del'>-        }</div><div class='del'>-        if (frame)</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        return;</div><div class='add'>+    if (fop-&gt;cbks.heal) {</div><div class='add'>+        fop-&gt;cbks.heal(fop-&gt;req_frame, fop, fop-&gt;xl, op_ret, op_errno,</div><div class='add'>+                       ec_char_array_to_mask(participants, ec-&gt;nodes),</div><div class='add'>+                       mgood &amp; good, mbad &amp; bad, NULL);</div><div class='add'>+    }</div><div class='add'>+    if (frame)</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_synctask_heal_wrap (void *opaque)</div><div class='add'>+ec_synctask_heal_wrap(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = opaque;</div><div class='del'>-        ec_heal_do (fop-&gt;xl, fop, &amp;fop-&gt;loc[0], fop-&gt;int32);</div><div class='del'>-        return 0;</div><div class='add'>+    ec_fop_data_t *fop = opaque;</div><div class='add'>+    ec_heal_do(fop-&gt;xl, fop, &amp;fop-&gt;loc[0], fop-&gt;int32);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_heal_done (int ret, call_frame_t *heal, void *opaque)</div><div class='add'>+ec_heal_done(int ret, call_frame_t *heal, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        if (opaque)</div><div class='del'>-                ec_fop_data_release (opaque);</div><div class='del'>-        return 0;</div><div class='add'>+    if (opaque)</div><div class='add'>+        ec_fop_data_release(opaque);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_fop_data_t*</div><div class='del'>-__ec_dequeue_heals (ec_t *ec)</div><div class='add'>+ec_fop_data_t *</div><div class='add'>+__ec_dequeue_heals(ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;ec-&gt;heal_waiting))</div><div class='del'>-                goto none;</div><div class='add'>+    if (list_empty(&amp;ec-&gt;heal_waiting))</div><div class='add'>+        goto none;</div><div class='ctx'> </div><div class='del'>-        if ((ec-&gt;background_heals &gt; 0) &amp;&amp; (ec-&gt;healers &gt;= ec-&gt;background_heals))</div><div class='del'>-                goto none;</div><div class='add'>+    if ((ec-&gt;background_heals &gt; 0) &amp;&amp; (ec-&gt;healers &gt;= ec-&gt;background_heals))</div><div class='add'>+        goto none;</div><div class='ctx'> </div><div class='del'>-        fop = list_entry(ec-&gt;heal_waiting.next, ec_fop_data_t, healer);</div><div class='del'>-        ec-&gt;heal_waiters--;</div><div class='del'>-        list_del_init(&amp;fop-&gt;healer);</div><div class='del'>-        list_add(&amp;fop-&gt;healer, &amp;ec-&gt;healing);</div><div class='del'>-        ec-&gt;healers++;</div><div class='del'>-        return fop;</div><div class='add'>+    fop = list_entry(ec-&gt;heal_waiting.next, ec_fop_data_t, healer);</div><div class='add'>+    ec-&gt;heal_waiters--;</div><div class='add'>+    list_del_init(&amp;fop-&gt;healer);</div><div class='add'>+    list_add(&amp;fop-&gt;healer, &amp;ec-&gt;healing);</div><div class='add'>+    ec-&gt;healers++;</div><div class='add'>+    return fop;</div><div class='ctx'> none:</div><div class='del'>-        gf_msg_debug (ec-&gt;xl-&gt;name, 0, "Num healers: %d, Num Waiters: %d",</div><div class='del'>-                      ec-&gt;healers, ec-&gt;heal_waiters);</div><div class='del'>-        return NULL;</div><div class='add'>+    gf_msg_debug(ec-&gt;xl-&gt;name, 0, "Num healers: %d, Num Waiters: %d",</div><div class='add'>+                 ec-&gt;healers, ec-&gt;heal_waiters);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_heal_fail (ec_t *ec, ec_fop_data_t *fop)</div><div class='add'>+ec_heal_fail(ec_t *ec, ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        if (fop-&gt;cbks.heal) {</div><div class='del'>-            fop-&gt;cbks.heal (fop-&gt;req_frame, NULL, ec-&gt;xl, -1, fop-&gt;error, 0, 0,</div><div class='del'>-                            0, NULL);</div><div class='del'>-        }</div><div class='del'>-        ec_fop_data_release (fop);</div><div class='add'>+    if (fop-&gt;cbks.heal) {</div><div class='add'>+        fop-&gt;cbks.heal(fop-&gt;req_frame, NULL, ec-&gt;xl, -1, fop-&gt;error, 0, 0, 0,</div><div class='add'>+                       NULL);</div><div class='add'>+    }</div><div class='add'>+    ec_fop_data_release(fop);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_launch_heal (ec_t *ec, ec_fop_data_t *fop)</div><div class='add'>+ec_launch_heal(ec_t *ec, ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = synctask_new (ec-&gt;xl-&gt;ctx-&gt;env, ec_synctask_heal_wrap,</div><div class='del'>-                            ec_heal_done, NULL, fop);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ec_fop_set_error(fop, ENOMEM);</div><div class='del'>-                ec_heal_fail (ec, fop);</div><div class='del'>-        }</div><div class='add'>+    ret = synctask_new(ec-&gt;xl-&gt;ctx-&gt;env, ec_synctask_heal_wrap, ec_heal_done,</div><div class='add'>+                       NULL, fop);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ec_fop_set_error(fop, ENOMEM);</div><div class='add'>+        ec_heal_fail(ec, fop);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_handle_healers_done (ec_fop_data_t *fop)</div><div class='add'>+ec_handle_healers_done(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='del'>-        ec_fop_data_t *heal_fop = NULL;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_fop_data_t *heal_fop = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;fop-&gt;healer))</div><div class='del'>-                return;</div><div class='add'>+    if (list_empty(&amp;fop-&gt;healer))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ec-&gt;lock);</div><div class='add'>+    LOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;fop-&gt;healer);</div><div class='add'>+    list_del_init(&amp;fop-&gt;healer);</div><div class='ctx'> </div><div class='del'>-        do {</div><div class='del'>-                ec-&gt;healers--;</div><div class='del'>-                heal_fop = __ec_dequeue_heals (ec);</div><div class='add'>+    do {</div><div class='add'>+        ec-&gt;healers--;</div><div class='add'>+        heal_fop = __ec_dequeue_heals(ec);</div><div class='ctx'> </div><div class='del'>-                if ((heal_fop != NULL) &amp;&amp; ec-&gt;shutdown) {</div><div class='del'>-                        /* This will prevent ec_handle_healers_done() to be</div><div class='del'>-                         * called recursively. That would be problematic if</div><div class='del'>-                         * the queue is too big. */</div><div class='del'>-                        list_del_init(&amp;heal_fop-&gt;healer);</div><div class='add'>+        if ((heal_fop != NULL) &amp;&amp; ec-&gt;shutdown) {</div><div class='add'>+            /* This will prevent ec_handle_healers_done() to be</div><div class='add'>+             * called recursively. That would be problematic if</div><div class='add'>+             * the queue is too big. */</div><div class='add'>+            list_del_init(&amp;heal_fop-&gt;healer);</div><div class='ctx'> </div><div class='del'>-                        UNLOCK(&amp;ec-&gt;lock);</div><div class='add'>+            UNLOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                        ec_fop_set_error(fop, ENOTCONN);</div><div class='del'>-                        ec_heal_fail(ec, heal_fop);</div><div class='add'>+            ec_fop_set_error(fop, ENOTCONN);</div><div class='add'>+            ec_heal_fail(ec, heal_fop);</div><div class='ctx'> </div><div class='del'>-                        LOCK(&amp;ec-&gt;lock);</div><div class='del'>-                }</div><div class='del'>-        } while ((heal_fop != NULL) &amp;&amp; ec-&gt;shutdown);</div><div class='add'>+            LOCK(&amp;ec-&gt;lock);</div><div class='add'>+        }</div><div class='add'>+    } while ((heal_fop != NULL) &amp;&amp; ec-&gt;shutdown);</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;ec-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (heal_fop)</div><div class='del'>-                ec_launch_heal (ec, heal_fop);</div><div class='add'>+    if (heal_fop)</div><div class='add'>+        ec_launch_heal(ec, heal_fop);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_heal_throttle (xlator_t *this, ec_fop_data_t *fop)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t can_heal = _gf_true;</div><div class='del'>-        ec_t         *ec      = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (fop-&gt;req_frame == NULL) {</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;ec-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if ((ec-&gt;background_heals &gt; 0) &amp;&amp;</div><div class='del'>-                            (ec-&gt;heal_wait_qlen + ec-&gt;background_heals) &gt;</div><div class='del'>-                                             (ec-&gt;heal_waiters + ec-&gt;healers)) {</div><div class='del'>-                                list_add_tail(&amp;fop-&gt;healer, &amp;ec-&gt;heal_waiting);</div><div class='del'>-                                ec-&gt;heal_waiters++;</div><div class='del'>-                                fop = __ec_dequeue_heals (ec);</div><div class='del'>-                        } else {</div><div class='del'>-                                can_heal = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;ec-&gt;lock);</div><div class='del'>-        }</div><div class='add'>+ec_heal_throttle(xlator_t *this, ec_fop_data_t *fop)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t can_heal = _gf_true;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (can_heal) {</div><div class='del'>-                if (fop)</div><div class='del'>-                        ec_launch_heal (ec, fop);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Max number of heals are "</div><div class='del'>-                              "pending, background self-heal rejected");</div><div class='del'>-                ec_fop_set_error(fop, EBUSY);</div><div class='del'>-                ec_heal_fail (ec, fop);</div><div class='del'>-        }</div><div class='add'>+    if (fop-&gt;req_frame == NULL) {</div><div class='add'>+        LOCK(&amp;ec-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            if ((ec-&gt;background_heals &gt; 0) &amp;&amp;</div><div class='add'>+                (ec-&gt;heal_wait_qlen + ec-&gt;background_heals) &gt;</div><div class='add'>+                    (ec-&gt;heal_waiters + ec-&gt;healers)) {</div><div class='add'>+                list_add_tail(&amp;fop-&gt;healer, &amp;ec-&gt;heal_waiting);</div><div class='add'>+                ec-&gt;heal_waiters++;</div><div class='add'>+                fop = __ec_dequeue_heals(ec);</div><div class='add'>+            } else {</div><div class='add'>+                can_heal = _gf_false;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        UNLOCK(&amp;ec-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (can_heal) {</div><div class='add'>+        if (fop)</div><div class='add'>+            ec_launch_heal(ec, fop);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Max number of heals are "</div><div class='add'>+                     "pending, background self-heal rejected");</div><div class='add'>+        ec_fop_set_error(fop, EBUSY);</div><div class='add'>+        ec_heal_fail(ec, fop);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-         int32_t minimum, fop_heal_cbk_t func, void *data, loc_t *loc,</div><div class='del'>-         int32_t partial, dict_t *xdata)</div><div class='add'>+ec_heal(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+        fop_heal_cbk_t func, void *data, loc_t *loc, int32_t partial,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .heal = func };</div><div class='add'>+    ec_cbk_t callback = {.heal = func};</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t err = EINVAL;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(HEAL) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(HEAL) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, fail);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, fail);</div><div class='ctx'> </div><div class='del'>-    if (!loc || !loc-&gt;inode || gf_uuid_is_null (loc-&gt;inode-&gt;gfid))</div><div class='del'>-            goto fail;</div><div class='add'>+    if (!loc || !loc-&gt;inode || gf_uuid_is_null(loc-&gt;inode-&gt;gfid))</div><div class='add'>+        goto fail;</div><div class='ctx'> </div><div class='ctx'>     if (frame &amp;&amp; frame-&gt;local)</div><div class='del'>-            goto fail;</div><div class='del'>-    fop = ec_fop_data_allocate (frame, this, EC_FOP_HEAL, 0, target, minimum,</div><div class='del'>-                                NULL, NULL, callback, data);</div><div class='add'>+        goto fail;</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, EC_FOP_HEAL, 0, target, minimum,</div><div class='add'>+                               NULL, NULL, callback, data);</div><div class='ctx'> </div><div class='ctx'>     err = ENOMEM;</div><div class='ctx'> </div><div class='hunk'>@@ -2738,454 +2721,446 @@ ec_heal (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (xdata)</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-    ec_heal_throttle (this, fop);</div><div class='add'>+    ec_heal_throttle(this, fop);</div><div class='ctx'> </div><div class='ctx'>     return;</div><div class='ctx'> </div><div class='ctx'> fail:</div><div class='ctx'>     if (fop)</div><div class='del'>-            ec_fop_data_release (fop);</div><div class='add'>+        ec_fop_data_release(fop);</div><div class='ctx'>     if (func)</div><div class='del'>-            func (frame, NULL, this, -1, err, 0, 0, 0, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, err, 0, 0, 0, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_replace_heal_done (int ret, call_frame_t *heal, void *opaque)</div><div class='add'>+ec_replace_heal_done(int ret, call_frame_t *heal, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = opaque;</div><div class='add'>+    ec_t *ec = opaque;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (ec-&gt;xl-&gt;name, 0,</div><div class='del'>-                "getxattr on bricks is done ret %d", ret);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(ec-&gt;xl-&gt;name, 0, "getxattr on bricks is done ret %d", ret);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_replace_heal (ec_t *ec, inode_t *inode)</div><div class='add'>+ec_replace_heal(ec_t *ec, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        loc_t        loc = {0};</div><div class='del'>-        int          ret = 0;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        ret = syncop_getxattr (ec-&gt;xl, &amp;loc, NULL, EC_XATTR_HEAL,</div><div class='del'>-                               NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0,</div><div class='del'>-                        "Heal failed for replace brick ret = %d", ret);</div><div class='del'>-</div><div class='del'>-        /* Once the root inode has been checked, it might have triggered a</div><div class='del'>-         * self-heal on it after a replace brick command or for some other</div><div class='del'>-         * reason. It can also happen that the volume already had damaged</div><div class='del'>-         * files in the index, even if the heal on the root directory failed.</div><div class='del'>-         * In both cases we need to wake all index healers to continue</div><div class='del'>-         * healing remaining entries that are marked as dirty. */</div><div class='del'>-        ec_shd_index_healer_wake(ec);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    ret = syncop_getxattr(ec-&gt;xl, &amp;loc, NULL, EC_XATTR_HEAL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "Heal failed for replace brick ret = %d",</div><div class='add'>+                     ret);</div><div class='add'>+</div><div class='add'>+    /* Once the root inode has been checked, it might have triggered a</div><div class='add'>+     * self-heal on it after a replace brick command or for some other</div><div class='add'>+     * reason. It can also happen that the volume already had damaged</div><div class='add'>+     * files in the index, even if the heal on the root directory failed.</div><div class='add'>+     * In both cases we need to wake all index healers to continue</div><div class='add'>+     * healing remaining entries that are marked as dirty. */</div><div class='add'>+    ec_shd_index_healer_wake(ec);</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_replace_brick_heal_wrap (void  *opaque)</div><div class='add'>+ec_replace_brick_heal_wrap(void *opaque)</div><div class='ctx'> {</div><div class='del'>-         ec_t *ec = opaque;</div><div class='del'>-         inode_table_t   *itable = NULL;</div><div class='del'>-         int32_t         ret     = -1;</div><div class='add'>+    ec_t *ec = opaque;</div><div class='add'>+    inode_table_t *itable = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-         if (ec-&gt;xl-&gt;itable)</div><div class='del'>-                 itable = ec-&gt;xl-&gt;itable;</div><div class='del'>-         else</div><div class='del'>-                 goto out;</div><div class='del'>-         ret = ec_replace_heal (ec, itable-&gt;root);</div><div class='add'>+    if (ec-&gt;xl-&gt;itable)</div><div class='add'>+        itable = ec-&gt;xl-&gt;itable;</div><div class='add'>+    else</div><div class='add'>+        goto out;</div><div class='add'>+    ret = ec_replace_heal(ec, itable-&gt;root);</div><div class='ctx'> out:</div><div class='del'>-         return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_launch_replace_heal (ec_t *ec)</div><div class='add'>+ec_launch_replace_heal(ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!ec)</div><div class='del'>-                return ret;</div><div class='del'>-        ret = synctask_new (ec-&gt;xl-&gt;ctx-&gt;env, ec_replace_brick_heal_wrap,</div><div class='del'>-                            ec_replace_heal_done, NULL, ec);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (ec-&gt;xl-&gt;name, 0,</div><div class='del'>-                        "Heal failed for replace brick ret = %d", ret);</div><div class='del'>-        }</div><div class='add'>+    if (!ec)</div><div class='ctx'>         return ret;</div><div class='add'>+    ret = synctask_new(ec-&gt;xl-&gt;ctx-&gt;env, ec_replace_brick_heal_wrap,</div><div class='add'>+                       ec_replace_heal_done, NULL, ec);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(ec-&gt;xl-&gt;name, 0, "Heal failed for replace brick ret = %d",</div><div class='add'>+                     ret);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> ec_set_heal_info(dict_t **dict_rsp, char *status)</div><div class='ctx'> {</div><div class='del'>-        dict_t *dict = NULL;</div><div class='del'>-        int    ret   = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_str (dict, "heal-info", status);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        EC_MSG_HEAL_FAIL,</div><div class='del'>-                        "Failed to set heal-info key to "</div><div class='del'>-                        "%s", status);</div><div class='del'>-                dict_unref(dict);</div><div class='del'>-                dict = NULL;</div><div class='del'>-        }</div><div class='del'>-        *dict_rsp = dict;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_str(dict, "heal-info", status);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_WARNING, -ret, EC_MSG_HEAL_FAIL,</div><div class='add'>+               "Failed to set heal-info key to "</div><div class='add'>+               "%s",</div><div class='add'>+               status);</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        dict = NULL;</div><div class='add'>+    }</div><div class='add'>+    *dict_rsp = dict;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-_need_heal_calculate (ec_t *ec, uint64_t *dirty, unsigned char *sources,</div><div class='del'>-                      gf_boolean_t self_locked, int32_t lock_count,</div><div class='del'>-                      ec_heal_need_t *need_heal)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        int source_count = 0;</div><div class='del'>-</div><div class='del'>-        source_count = EC_COUNT (sources, ec-&gt;nodes);</div><div class='del'>-        if (source_count == ec-&gt;nodes) {</div><div class='del'>-                *need_heal = EC_HEAL_NONEED;</div><div class='del'>-                if (self_locked || lock_count == 0) {</div><div class='del'>-                        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                                if (dirty[i]) {</div><div class='del'>-                                        *need_heal = EC_HEAL_MUST;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                                /* Since each lock can only increment the dirty</div><div class='del'>-                                 * count once, if dirty is &gt; 1 it means that</div><div class='del'>-                                 * another operation has left the dirty count</div><div class='del'>-                                 * set and this indicates a problem in the</div><div class='del'>-                                 * inode.*/</div><div class='del'>-                                if (dirty[i] &gt; 1) {</div><div class='del'>-                                        *need_heal = EC_HEAL_MUST;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+_need_heal_calculate(ec_t *ec, uint64_t *dirty, unsigned char *sources,</div><div class='add'>+                     gf_boolean_t self_locked, int32_t lock_count,</div><div class='add'>+                     ec_heal_need_t *need_heal)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int source_count = 0;</div><div class='add'>+</div><div class='add'>+    source_count = EC_COUNT(sources, ec-&gt;nodes);</div><div class='add'>+    if (source_count == ec-&gt;nodes) {</div><div class='add'>+        *need_heal = EC_HEAL_NONEED;</div><div class='add'>+        if (self_locked || lock_count == 0) {</div><div class='add'>+            for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+                if (dirty[i]) {</div><div class='add'>+                    *need_heal = EC_HEAL_MUST;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                *need_heal = EC_HEAL_MUST;</div><div class='add'>+            for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+                /* Since each lock can only increment the dirty</div><div class='add'>+                 * count once, if dirty is &gt; 1 it means that</div><div class='add'>+                 * another operation has left the dirty count</div><div class='add'>+                 * set and this indicates a problem in the</div><div class='add'>+                 * inode.*/</div><div class='add'>+                if (dirty[i] &gt; 1) {</div><div class='add'>+                    *need_heal = EC_HEAL_MUST;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        *need_heal = EC_HEAL_MUST;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return source_count;</div><div class='add'>+    return source_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-ec_need_metadata_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='del'>-                       int32_t lock_count, gf_boolean_t self_locked,</div><div class='del'>-                       gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='del'>-{</div><div class='del'>-        uint64_t           *dirty         = NULL;</div><div class='del'>-        unsigned char      *sources       = NULL;</div><div class='del'>-        unsigned char      *healed_sinks  = NULL;</div><div class='del'>-        uint64_t           *meta_versions = NULL;</div><div class='del'>-        int                ret            = 0;</div><div class='del'>-        int                i              = 0;</div><div class='del'>-</div><div class='del'>-        sources = alloca0(ec-&gt;nodes);</div><div class='del'>-        healed_sinks = alloca0(ec-&gt;nodes);</div><div class='del'>-        dirty = alloca0 (ec-&gt;nodes * sizeof (*dirty));</div><div class='del'>-        meta_versions = alloca0 (ec-&gt;nodes * sizeof (*meta_versions));</div><div class='del'>-        ret = ec_heal_metadata_find_direction (ec, replies, meta_versions,</div><div class='del'>-                                               dirty, sources, healed_sinks);</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; ret != -EIO) {</div><div class='add'>+ec_need_metadata_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='add'>+                      int32_t lock_count, gf_boolean_t self_locked,</div><div class='add'>+                      gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='add'>+{</div><div class='add'>+    uint64_t *dirty = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    uint64_t *meta_versions = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    sources = alloca0(ec-&gt;nodes);</div><div class='add'>+    healed_sinks = alloca0(ec-&gt;nodes);</div><div class='add'>+    dirty = alloca0(ec-&gt;nodes * sizeof(*dirty));</div><div class='add'>+    meta_versions = alloca0(ec-&gt;nodes * sizeof(*meta_versions));</div><div class='add'>+    ret = ec_heal_metadata_find_direction(ec, replies, meta_versions, dirty,</div><div class='add'>+                                          sources, healed_sinks);</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; ret != -EIO) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = _need_heal_calculate(ec, dirty, sources, self_locked, lock_count,</div><div class='add'>+                               need_heal);</div><div class='add'>+    if (ret == ec-&gt;nodes &amp;&amp; *need_heal == EC_HEAL_NONEED) {</div><div class='add'>+        for (i = 1; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+            if (meta_versions[i] != meta_versions[0]) {</div><div class='add'>+                *need_heal = EC_HEAL_MUST;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = _need_heal_calculate (ec, dirty, sources, self_locked, lock_count,</div><div class='del'>-                                    need_heal);</div><div class='del'>-        if (ret == ec-&gt;nodes &amp;&amp; *need_heal == EC_HEAL_NONEED) {</div><div class='del'>-                for (i = 1; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                        if (meta_versions[i] != meta_versions[0]) {</div><div class='del'>-                                *need_heal = EC_HEAL_MUST;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+static int32_t</div><div class='add'>+ec_need_data_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='add'>+                  int32_t lock_count, gf_boolean_t self_locked,</div><div class='add'>+                  gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='add'>+{</div><div class='add'>+    uint64_t *dirty = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    uint64_t *data_versions = NULL;</div><div class='add'>+    uint64_t *size = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    sources = alloca0(ec-&gt;nodes);</div><div class='add'>+    healed_sinks = alloca0(ec-&gt;nodes);</div><div class='add'>+    dirty = alloca0(ec-&gt;nodes * sizeof(*dirty));</div><div class='add'>+    data_versions = alloca0(ec-&gt;nodes * sizeof(*data_versions));</div><div class='add'>+    size = alloca0(ec-&gt;nodes * sizeof(*size));</div><div class='add'>+</div><div class='add'>+    /* When dd is going on and heal info is called there is a very good</div><div class='add'>+     * chance for on disk sizes to mismatch even though nothing is wrong</div><div class='add'>+     * we don't need ondisk size check there. But if the file is either</div><div class='add'>+     * self-locked or the caller wants a thorough check then make sure to</div><div class='add'>+     * perform on disk check also. */</div><div class='add'>+    ret = ec_heal_data_find_direction(</div><div class='add'>+        ec, replies, data_versions, dirty, size, sources, healed_sinks,</div><div class='add'>+        self_locked || thorough, EC_COMBINE_XDATA);</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; ret != -EIO) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = _need_heal_calculate(ec, dirty, sources, self_locked, lock_count,</div><div class='add'>+                               need_heal);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-ec_need_data_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='add'>+ec_need_entry_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='ctx'>                    int32_t lock_count, gf_boolean_t self_locked,</div><div class='ctx'>                    gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='ctx'> {</div><div class='del'>-        uint64_t           *dirty         = NULL;</div><div class='del'>-        unsigned char      *sources       = NULL;</div><div class='del'>-        unsigned char      *healed_sinks  = NULL;</div><div class='del'>-        uint64_t           *data_versions = NULL;</div><div class='del'>-        uint64_t           *size          = NULL;</div><div class='del'>-        int                ret            = 0;</div><div class='del'>-</div><div class='del'>-        sources = alloca0(ec-&gt;nodes);</div><div class='del'>-        healed_sinks = alloca0(ec-&gt;nodes);</div><div class='del'>-        dirty = alloca0 (ec-&gt;nodes * sizeof (*dirty));</div><div class='del'>-        data_versions = alloca0 (ec-&gt;nodes * sizeof (*data_versions));</div><div class='del'>-        size = alloca0 (ec-&gt;nodes * sizeof (*size));</div><div class='del'>-</div><div class='del'>-        /* When dd is going on and heal info is called there is a very good</div><div class='del'>-         * chance for on disk sizes to mismatch even though nothing is wrong</div><div class='del'>-         * we don't need ondisk size check there. But if the file is either</div><div class='del'>-         * self-locked or the caller wants a thorough check then make sure to</div><div class='del'>-         * perform on disk check also. */</div><div class='del'>-        ret = ec_heal_data_find_direction (ec, replies, data_versions,</div><div class='del'>-                                           dirty, size, sources, healed_sinks,</div><div class='del'>-                                           self_locked || thorough,</div><div class='del'>-                                           EC_COMBINE_XDATA);</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; ret != -EIO) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    uint64_t *dirty = NULL;</div><div class='add'>+    unsigned char *sources = NULL;</div><div class='add'>+    unsigned char *healed_sinks = NULL;</div><div class='add'>+    uint64_t *data_versions = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = _need_heal_calculate (ec, dirty, sources, self_locked, lock_count,</div><div class='del'>-                                    need_heal);</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    sources = alloca0(ec-&gt;nodes);</div><div class='add'>+    healed_sinks = alloca0(ec-&gt;nodes);</div><div class='add'>+    dirty = alloca0(ec-&gt;nodes * sizeof(*dirty));</div><div class='add'>+    data_versions = alloca0(ec-&gt;nodes * sizeof(*data_versions));</div><div class='ctx'> </div><div class='del'>-static int32_t</div><div class='del'>-ec_need_entry_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='del'>-                    int32_t lock_count, gf_boolean_t self_locked,</div><div class='del'>-                    gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='del'>-{</div><div class='del'>-        uint64_t           *dirty         = NULL;</div><div class='del'>-        unsigned char      *sources       = NULL;</div><div class='del'>-        unsigned char      *healed_sinks  = NULL;</div><div class='del'>-        uint64_t           *data_versions = NULL;</div><div class='del'>-        int                ret            = 0;</div><div class='del'>-</div><div class='del'>-        sources = alloca0(ec-&gt;nodes);</div><div class='del'>-        healed_sinks = alloca0(ec-&gt;nodes);</div><div class='del'>-        dirty = alloca0 (ec-&gt;nodes * sizeof (*dirty));</div><div class='del'>-        data_versions = alloca0 (ec-&gt;nodes * sizeof (*data_versions));</div><div class='del'>-</div><div class='del'>-        ret = ec_heal_entry_find_direction (ec, replies, data_versions,</div><div class='del'>-                                           dirty, sources, healed_sinks);</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; ret != -EIO) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = ec_heal_entry_find_direction(ec, replies, data_versions, dirty,</div><div class='add'>+                                       sources, healed_sinks);</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; ret != -EIO) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _need_heal_calculate (ec, dirty, sources, self_locked, lock_count,</div><div class='del'>-                                    need_heal);</div><div class='add'>+    ret = _need_heal_calculate(ec, dirty, sources, self_locked, lock_count,</div><div class='add'>+                               need_heal);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-ec_need_heal (ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='del'>-              int32_t lock_count, gf_boolean_t self_locked,</div><div class='del'>-              gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='add'>+ec_need_heal(ec_t *ec, inode_t *inode, default_args_cbk_t *replies,</div><div class='add'>+             int32_t lock_count, gf_boolean_t self_locked,</div><div class='add'>+             gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='ctx'> {</div><div class='del'>-        int                ret            = 0;</div><div class='del'>-</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = ec_need_metadata_heal (ec, inode, replies, lock_count,</div><div class='del'>-                                     self_locked, thorough, need_heal);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = ec_need_metadata_heal(ec, inode, replies, lock_count, self_locked,</div><div class='add'>+                                thorough, need_heal);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (*need_heal == EC_HEAL_MUST)</div><div class='del'>-                goto out;</div><div class='add'>+    if (*need_heal == EC_HEAL_MUST)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (inode-&gt;ia_type == IA_IFREG) {</div><div class='del'>-                ret = ec_need_data_heal (ec, inode, replies, lock_count,</div><div class='del'>-                                         self_locked, thorough, need_heal);</div><div class='del'>-        } else if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                ret = ec_need_entry_heal (ec, inode, replies, lock_count,</div><div class='del'>-                                          self_locked, thorough, need_heal);</div><div class='del'>-        }</div><div class='add'>+    if (inode-&gt;ia_type == IA_IFREG) {</div><div class='add'>+        ret = ec_need_data_heal(ec, inode, replies, lock_count, self_locked,</div><div class='add'>+                                thorough, need_heal);</div><div class='add'>+    } else if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        ret = ec_need_entry_heal(ec, inode, replies, lock_count, self_locked,</div><div class='add'>+                                 thorough, need_heal);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_heal_inspect (call_frame_t *frame, ec_t *ec,</div><div class='del'>-                 inode_t *inode, unsigned char *locked_on,</div><div class='del'>-                 gf_boolean_t self_locked, gf_boolean_t thorough,</div><div class='del'>-                 ec_heal_need_t *need_heal)</div><div class='del'>-{</div><div class='del'>-        loc_t              loc           = {0};</div><div class='del'>-        int                i             = 0;</div><div class='del'>-        int                ret           = 0;</div><div class='del'>-        dict_t             *xdata        = NULL;</div><div class='del'>-        uint64_t           zero_array[2] = {0};</div><div class='del'>-        uint64_t           zero_value    = 0;</div><div class='del'>-        unsigned char      *output       = NULL;</div><div class='del'>-        default_args_cbk_t *replies      = NULL;</div><div class='del'>-        int32_t            lock_count    = 0;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        output = alloca0 (ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata ||</div><div class='del'>-            dict_set_static_bin (xdata, EC_XATTR_VERSION, zero_array,</div><div class='del'>-                                 sizeof (zero_array)) ||</div><div class='del'>-            dict_set_static_bin (xdata, EC_XATTR_DIRTY, zero_array,</div><div class='del'>-                                 sizeof (zero_array)) ||</div><div class='del'>-            dict_set_static_bin (xdata, EC_XATTR_SIZE, &amp;zero_value,</div><div class='del'>-                                 sizeof (zero_value))) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+ec_heal_inspect(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                unsigned char *locked_on, gf_boolean_t self_locked,</div><div class='add'>+                gf_boolean_t thorough, ec_heal_need_t *need_heal)</div><div class='add'>+{</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    uint64_t zero_array[2] = {0};</div><div class='add'>+    uint64_t zero_value = 0;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    int32_t lock_count = 0;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata ||</div><div class='add'>+        dict_set_static_bin(xdata, EC_XATTR_VERSION, zero_array,</div><div class='add'>+                            sizeof(zero_array)) ||</div><div class='add'>+        dict_set_static_bin(xdata, EC_XATTR_DIRTY, zero_array,</div><div class='add'>+                            sizeof(zero_array)) ||</div><div class='add'>+        dict_set_static_bin(xdata, EC_XATTR_SIZE, &amp;zero_value,</div><div class='add'>+                            sizeof(zero_value))) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!self_locked) {</div><div class='del'>-                ret = dict_set_str(xdata, GLUSTERFS_INODELK_DOM_COUNT,</div><div class='del'>-                             ec-&gt;xl-&gt;name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (!self_locked) {</div><div class='add'>+        ret = dict_set_str(xdata, GLUSTERFS_INODELK_DOM_COUNT, ec-&gt;xl-&gt;name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cluster_lookup (ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies,</div><div class='del'>-                              output, frame, ec-&gt;xl, &amp;loc, xdata);</div><div class='add'>+    ret = cluster_lookup(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output,</div><div class='add'>+                         frame, ec-&gt;xl, &amp;loc, xdata);</div><div class='ctx'> </div><div class='del'>-        if (ret != ec-&gt;nodes) {</div><div class='del'>-                ret = ec-&gt;nodes;</div><div class='del'>-                *need_heal = EC_HEAL_MUST;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret != ec-&gt;nodes) {</div><div class='add'>+        ret = ec-&gt;nodes;</div><div class='add'>+        *need_heal = EC_HEAL_MUST;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (self_locked)</div><div class='del'>-                goto need_heal;</div><div class='add'>+    if (self_locked)</div><div class='add'>+        goto need_heal;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (!output[i] || !replies[i].xdata) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                if ((dict_get_int32 (replies[i].xdata, GLUSTERFS_INODELK_COUNT,</div><div class='del'>-                                     &amp;lock_count) == 0) &amp;&amp; lock_count &gt; 0) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (!output[i] || !replies[i].xdata) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        if ((dict_get_int32(replies[i].xdata, GLUSTERFS_INODELK_COUNT,</div><div class='add'>+                            &amp;lock_count) == 0) &amp;&amp;</div><div class='add'>+            lock_count &gt; 0) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> need_heal:</div><div class='del'>-        ret = ec_need_heal (ec, inode, replies, lock_count,</div><div class='del'>-                            self_locked, thorough, need_heal);</div><div class='add'>+    ret = ec_need_heal(ec, inode, replies, lock_count, self_locked, thorough,</div><div class='add'>+                       need_heal);</div><div class='ctx'> </div><div class='del'>-        if (!self_locked &amp;&amp; *need_heal == EC_HEAL_MUST) {</div><div class='del'>-                *need_heal = EC_HEAL_MAYBE;</div><div class='del'>-        }</div><div class='add'>+    if (!self_locked &amp;&amp; *need_heal == EC_HEAL_MUST) {</div><div class='add'>+        *need_heal = EC_HEAL_MAYBE;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (xdata) {</div><div class='del'>-                dict_unref(xdata);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (xdata) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_heal_locked_inspect (call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='del'>-                        ec_heal_need_t *need_heal)</div><div class='del'>-{</div><div class='del'>-        unsigned char      *locked_on  = NULL;</div><div class='del'>-        unsigned char      *up_subvols = NULL;</div><div class='del'>-        unsigned char      *output     = NULL;</div><div class='del'>-        default_args_cbk_t *replies    = NULL;</div><div class='del'>-        int                ret         = 0;</div><div class='del'>-</div><div class='del'>-        EC_REPLIES_ALLOC (replies, ec-&gt;nodes);</div><div class='del'>-        locked_on = alloca0(ec-&gt;nodes);</div><div class='del'>-        output = alloca0(ec-&gt;nodes);</div><div class='del'>-        up_subvols = alloca0(ec-&gt;nodes);</div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='del'>-</div><div class='del'>-        ret = cluster_inodelk (ec-&gt;xl_list, up_subvols, ec-&gt;nodes,</div><div class='del'>-                               replies, locked_on, frame, ec-&gt;xl,</div><div class='del'>-                               ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='del'>-        if (ret != ec-&gt;nodes) {</div><div class='del'>-                *need_heal = EC_HEAL_MUST;</div><div class='del'>-                goto unlock;</div><div class='del'>-        }</div><div class='del'>-        ret = ec_heal_inspect (frame, ec, inode, locked_on, _gf_true, _gf_true,</div><div class='del'>-                               need_heal);</div><div class='add'>+ec_heal_locked_inspect(call_frame_t *frame, ec_t *ec, inode_t *inode,</div><div class='add'>+                       ec_heal_need_t *need_heal)</div><div class='add'>+{</div><div class='add'>+    unsigned char *locked_on = NULL;</div><div class='add'>+    unsigned char *up_subvols = NULL;</div><div class='add'>+    unsigned char *output = NULL;</div><div class='add'>+    default_args_cbk_t *replies = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    EC_REPLIES_ALLOC(replies, ec-&gt;nodes);</div><div class='add'>+    locked_on = alloca0(ec-&gt;nodes);</div><div class='add'>+    output = alloca0(ec-&gt;nodes);</div><div class='add'>+    up_subvols = alloca0(ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='add'>+</div><div class='add'>+    ret = cluster_inodelk(ec-&gt;xl_list, up_subvols, ec-&gt;nodes, replies,</div><div class='add'>+                          locked_on, frame, ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='add'>+    if (ret != ec-&gt;nodes) {</div><div class='add'>+        *need_heal = EC_HEAL_MUST;</div><div class='add'>+        goto unlock;</div><div class='add'>+    }</div><div class='add'>+    ret = ec_heal_inspect(frame, ec, inode, locked_on, _gf_true, _gf_true,</div><div class='add'>+                          need_heal);</div><div class='ctx'> unlock:</div><div class='del'>-        cluster_uninodelk (ec-&gt;xl_list, locked_on, ec-&gt;nodes,</div><div class='del'>-                           replies, output, frame, ec-&gt;xl,</div><div class='del'>-                           ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='del'>-        cluster_replies_wipe (replies, ec-&gt;nodes);</div><div class='del'>-        return ret;</div><div class='add'>+    cluster_uninodelk(ec-&gt;xl_list, locked_on, ec-&gt;nodes, replies, output, frame,</div><div class='add'>+                      ec-&gt;xl, ec-&gt;xl-&gt;name, inode, 0, 0);</div><div class='add'>+    cluster_replies_wipe(replies, ec-&gt;nodes);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_get_heal_info (xlator_t *this, loc_t *entry_loc, dict_t **dict_rsp)</div><div class='add'>+ec_get_heal_info(xlator_t *this, loc_t *entry_loc, dict_t **dict_rsp)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -ENOMEM;</div><div class='del'>-        ec_heal_need_t  need_heal       = EC_HEAL_NONEED;</div><div class='del'>-        call_frame_t    *frame          = NULL;</div><div class='del'>-        ec_t            *ec             = NULL;</div><div class='del'>-        unsigned char   *up_subvols     = NULL;</div><div class='del'>-        loc_t           loc             = {0, };</div><div class='add'>+    int ret = -ENOMEM;</div><div class='add'>+    ec_heal_need_t need_heal = EC_HEAL_NONEED;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    unsigned char *up_subvols = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO(this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO(this-&gt;name, entry_loc, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, entry_loc, out);</div><div class='ctx'> </div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-        up_subvols = alloca0(ec-&gt;nodes);</div><div class='del'>-        ec_mask_to_char_array (ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+    up_subvols = alloca0(ec-&gt;nodes);</div><div class='add'>+    ec_mask_to_char_array(ec-&gt;xl_up, up_subvols, ec-&gt;nodes);</div><div class='ctx'> </div><div class='del'>-        if (EC_COUNT (up_subvols, ec-&gt;nodes) != ec-&gt;nodes) {</div><div class='del'>-                need_heal = EC_HEAL_MUST;</div><div class='del'>-                goto set_heal;</div><div class='del'>-        }</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ec_owner_set(frame, frame-&gt;root);</div><div class='del'>-        frame-&gt;root-&gt;uid = 0;</div><div class='del'>-        frame-&gt;root-&gt;gid = 0;</div><div class='del'>-        frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='del'>-</div><div class='del'>-        if (loc_copy(&amp;loc, entry_loc) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                        "Failed to copy a location.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                ret = syncop_inode_find (this, this, loc.gfid,</div><div class='del'>-                                         &amp;loc.inode, NULL, NULL);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ec_heal_inspect (frame, ec, loc.inode, up_subvols, _gf_false,</div><div class='del'>-                               _gf_false, &amp;need_heal);</div><div class='del'>-        if (ret == ec-&gt;nodes &amp;&amp; need_heal == EC_HEAL_NONEED) {</div><div class='del'>-                goto set_heal;</div><div class='del'>-        }</div><div class='del'>-        need_heal = EC_HEAL_NONEED;</div><div class='del'>-        ret = ec_heal_locked_inspect (frame, ec, loc.inode,</div><div class='del'>-                                      &amp;need_heal);</div><div class='add'>+    if (EC_COUNT(up_subvols, ec-&gt;nodes) != ec-&gt;nodes) {</div><div class='add'>+        need_heal = EC_HEAL_MUST;</div><div class='add'>+        goto set_heal;</div><div class='add'>+    }</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ec_owner_set(frame, frame-&gt;root);</div><div class='add'>+    frame-&gt;root-&gt;uid = 0;</div><div class='add'>+    frame-&gt;root-&gt;gid = 0;</div><div class='add'>+    frame-&gt;root-&gt;pid = GF_CLIENT_PID_SELF_HEALD;</div><div class='add'>+</div><div class='add'>+    if (loc_copy(&amp;loc, entry_loc) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+               "Failed to copy a location.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = syncop_inode_find(this, this, loc.gfid, &amp;loc.inode, NULL, NULL);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ec_heal_inspect(frame, ec, loc.inode, up_subvols, _gf_false,</div><div class='add'>+                          _gf_false, &amp;need_heal);</div><div class='add'>+    if (ret == ec-&gt;nodes &amp;&amp; need_heal == EC_HEAL_NONEED) {</div><div class='add'>+        goto set_heal;</div><div class='add'>+    }</div><div class='add'>+    need_heal = EC_HEAL_NONEED;</div><div class='add'>+    ret = ec_heal_locked_inspect(frame, ec, loc.inode, &amp;need_heal);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> set_heal:</div><div class='del'>-        if (need_heal == EC_HEAL_MUST) {</div><div class='del'>-                ret =  ec_set_heal_info (dict_rsp, "heal");</div><div class='del'>-        } else {</div><div class='del'>-                ret =  ec_set_heal_info (dict_rsp, "no-heal");</div><div class='del'>-        }</div><div class='add'>+    if (need_heal == EC_HEAL_MUST) {</div><div class='add'>+        ret = ec_set_heal_info(dict_rsp, "heal");</div><div class='add'>+    } else {</div><div class='add'>+        ret = ec_set_heal_info(dict_rsp, "no-heal");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (frame) {</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        }</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    if (frame) {</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    }</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-heald.c b/xlators/cluster/ec/src/ec-heald.c<br/>index f36901ef74f..cc1062dd353 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-heald.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-heald.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-heald.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-heald.c</a></div><div class='hunk'>@@ -19,559 +19,545 @@</div><div class='ctx'> #include "syncop-utils.h"</div><div class='ctx'> #include "protocol-common.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-#define NTH_INDEX_HEALER(this, n) (&amp;((((ec_t *)this-&gt;private))-&gt;shd.index_healers[n]))</div><div class='del'>-#define NTH_FULL_HEALER(this, n) (&amp;((((ec_t *)this-&gt;private))-&gt;shd.full_healers[n]))</div><div class='add'>+#define NTH_INDEX_HEALER(this, n)                                              \</div><div class='add'>+    (&amp;((((ec_t *)this-&gt;private))-&gt;shd.index_healers[n]))</div><div class='add'>+#define NTH_FULL_HEALER(this, n)                                               \</div><div class='add'>+    (&amp;((((ec_t *)this-&gt;private))-&gt;shd.full_healers[n]))</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_shd_is_subvol_local (xlator_t *this, int subvol)</div><div class='add'>+ec_shd_is_subvol_local(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = NULL;</div><div class='del'>-        gf_boolean_t is_local = _gf_false;</div><div class='del'>-        loc_t loc = {0, };</div><div class='del'>-</div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-        loc.inode = this-&gt;itable-&gt;root;</div><div class='del'>-        syncop_is_subvol_local (ec-&gt;xl_list[subvol], &amp;loc, &amp;is_local);</div><div class='del'>-        return is_local;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    gf_boolean_t is_local = _gf_false;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+    loc.inode = this-&gt;itable-&gt;root;</div><div class='add'>+    syncop_is_subvol_local(ec-&gt;xl_list[subvol], &amp;loc, &amp;is_local);</div><div class='add'>+    return is_local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-ec_subvol_name (xlator_t *this, int subvol)</div><div class='add'>+ec_subvol_name(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='ctx'> </div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-        if (subvol &lt; 0 || subvol &gt; ec-&gt;nodes)</div><div class='del'>-                return NULL;</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+    if (subvol &lt; 0 || subvol &gt; ec-&gt;nodes)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        return ec-&gt;xl_list[subvol]-&gt;name;</div><div class='add'>+    return ec-&gt;xl_list[subvol]-&gt;name;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__ec_shd_healer_wait (struct subvol_healer *healer)</div><div class='add'>+__ec_shd_healer_wait(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = NULL;</div><div class='del'>-        struct timespec wait_till = {0, };</div><div class='del'>-        int ret = 0;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    struct timespec wait_till = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ec = healer-&gt;this-&gt;private;</div><div class='add'>+    ec = healer-&gt;this-&gt;private;</div><div class='ctx'> </div><div class='ctx'> disabled_loop:</div><div class='del'>-        wait_till.tv_sec = time (NULL) + 60;</div><div class='del'>-</div><div class='del'>-        while (!healer-&gt;rerun) {</div><div class='del'>-                ret = pthread_cond_timedwait (&amp;healer-&gt;cond,</div><div class='del'>-                                              &amp;healer-&gt;mutex,</div><div class='del'>-                                              &amp;wait_till);</div><div class='del'>-                if (ret == ETIMEDOUT)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+    wait_till.tv_sec = time(NULL) + 60;</div><div class='ctx'> </div><div class='del'>-        ret = healer-&gt;rerun;</div><div class='del'>-        healer-&gt;rerun = 0;</div><div class='add'>+    while (!healer-&gt;rerun) {</div><div class='add'>+        ret = pthread_cond_timedwait(&amp;healer-&gt;cond, &amp;healer-&gt;mutex, &amp;wait_till);</div><div class='add'>+        if (ret == ETIMEDOUT)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ec-&gt;shd.enabled || !ec-&gt;up)</div><div class='del'>-                goto disabled_loop;</div><div class='add'>+    ret = healer-&gt;rerun;</div><div class='add'>+    healer-&gt;rerun = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    if (!ec-&gt;shd.enabled || !ec-&gt;up)</div><div class='add'>+        goto disabled_loop;</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_healer_wait (struct subvol_healer *healer)</div><div class='add'>+ec_shd_healer_wait(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                ret = __ec_shd_healer_wait (healer);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = __ec_shd_healer_wait(healer);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_index_inode (xlator_t *this, xlator_t *subvol, inode_t **inode)</div><div class='add'>+ec_shd_index_inode(xlator_t *this, xlator_t *subvol, inode_t **inode)</div><div class='ctx'> {</div><div class='del'>-        loc_t   rootloc     = {0, };</div><div class='del'>-        int     ret         = 0;</div><div class='del'>-        dict_t  *xattr      = NULL;</div><div class='del'>-        void    *index_gfid = NULL;</div><div class='del'>-</div><div class='del'>-        *inode = NULL;</div><div class='del'>-        rootloc.inode = inode_ref (this-&gt;itable-&gt;root);</div><div class='del'>-        gf_uuid_copy (rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (subvol, &amp;rootloc, &amp;xattr,</div><div class='del'>-                               GF_XATTROP_INDEX_GFID, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_ptr (xattr, GF_XATTROP_INDEX_GFID, &amp;index_gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "index-dir gfid for %s: %s",</div><div class='del'>-                subvol-&gt;name, uuid_utoa (index_gfid));</div><div class='del'>-</div><div class='del'>-        ret = syncop_inode_find (this, subvol, index_gfid,</div><div class='del'>-                                 inode, NULL, NULL);</div><div class='add'>+    loc_t rootloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    void *index_gfid = NULL;</div><div class='add'>+</div><div class='add'>+    *inode = NULL;</div><div class='add'>+    rootloc.inode = inode_ref(this-&gt;itable-&gt;root);</div><div class='add'>+    gf_uuid_copy(rootloc.gfid, rootloc.inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(subvol, &amp;rootloc, &amp;xattr, GF_XATTROP_INDEX_GFID, NULL,</div><div class='add'>+                          NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_ptr(xattr, GF_XATTROP_INDEX_GFID, &amp;index_gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "index-dir gfid for %s: %s", subvol-&gt;name,</div><div class='add'>+                 uuid_utoa(index_gfid));</div><div class='add'>+</div><div class='add'>+    ret = syncop_inode_find(this, subvol, index_gfid, inode, NULL, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;rootloc);</div><div class='add'>+    loc_wipe(&amp;rootloc);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_index_purge (xlator_t *subvol, inode_t *inode, char *name)</div><div class='add'>+ec_shd_index_purge(xlator_t *subvol, inode_t *inode, char *name)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0, };</div><div class='del'>-        int ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        loc.parent = inode_ref (inode);</div><div class='del'>-        loc.name = name;</div><div class='add'>+    loc.parent = inode_ref(inode);</div><div class='add'>+    loc.name = name;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_unlink (subvol, &amp;loc, NULL, NULL);</div><div class='add'>+    ret = syncop_unlink(subvol, &amp;loc, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_selfheal (struct subvol_healer *healer, int child, loc_t *loc)</div><div class='add'>+ec_shd_selfheal(struct subvol_healer *healer, int child, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret;</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (healer-&gt;this, loc, NULL, EC_XATTR_HEAL, NULL,</div><div class='del'>-                               NULL);</div><div class='del'>-        if ((ret &gt;= 0) &amp;&amp; (loc-&gt;inode-&gt;ia_type == IA_IFDIR)) {</div><div class='del'>-                /* If we have just healed a directory, it's possible that</div><div class='del'>-                 * other index entries have appeared to be healed. We put a</div><div class='del'>-                 * mark so that we can check it later and restart a scan</div><div class='del'>-                 * without delay. */</div><div class='del'>-                healer-&gt;rerun = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret;</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(healer-&gt;this, loc, NULL, EC_XATTR_HEAL, NULL, NULL);</div><div class='add'>+    if ((ret &gt;= 0) &amp;&amp; (loc-&gt;inode-&gt;ia_type == IA_IFDIR)) {</div><div class='add'>+        /* If we have just healed a directory, it's possible that</div><div class='add'>+         * other index entries have appeared to be healed. We put a</div><div class='add'>+         * mark so that we can check it later and restart a scan</div><div class='add'>+         * without delay. */</div><div class='add'>+        healer-&gt;rerun = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ec_shd_index_heal (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                   void *data)</div><div class='add'>+ec_shd_index_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                  void *data)</div><div class='ctx'> {</div><div class='del'>-        struct subvol_healer *healer = data;</div><div class='del'>-        ec_t                 *ec     = NULL;</div><div class='del'>-        loc_t                loc     = {0};</div><div class='del'>-        int                  ret     = 0;</div><div class='del'>-</div><div class='del'>-        ec = healer-&gt;this-&gt;private;</div><div class='del'>-        if (ec-&gt;xl_up_count &lt;= ec-&gt;fragments) {</div><div class='del'>-                return -ENOTCONN;</div><div class='del'>-        }</div><div class='del'>-        if (!ec-&gt;shd.enabled)</div><div class='del'>-                return -EBUSY;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (healer-&gt;this-&gt;name, 0, "got entry: %s",</div><div class='del'>-                entry-&gt;d_name);</div><div class='del'>-</div><div class='del'>-        ret = gf_uuid_parse (entry-&gt;d_name, loc.gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                return 0;</div><div class='add'>+    struct subvol_healer *healer = data;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ec = healer-&gt;this-&gt;private;</div><div class='add'>+    if (ec-&gt;xl_up_count &lt;= ec-&gt;fragments) {</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    }</div><div class='add'>+    if (!ec-&gt;shd.enabled)</div><div class='add'>+        return -EBUSY;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(healer-&gt;this-&gt;name, 0, "got entry: %s", entry-&gt;d_name);</div><div class='add'>+</div><div class='add'>+    ret = gf_uuid_parse(entry-&gt;d_name, loc.gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        /* If this fails with ENOENT/ESTALE index is stale */</div><div class='del'>-        ret = syncop_gfid_to_path (healer-&gt;this-&gt;itable, subvol, loc.gfid,</div><div class='del'>-                                   (char **)&amp;loc.path);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* If this fails with ENOENT/ESTALE index is stale */</div><div class='add'>+    ret = syncop_gfid_to_path(healer-&gt;this-&gt;itable, subvol, loc.gfid,</div><div class='add'>+                              (char **)&amp;loc.path);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_inode_find (healer-&gt;this, healer-&gt;this, loc.gfid,</div><div class='del'>-                                 &amp;loc.inode, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = syncop_inode_find(healer-&gt;this, healer-&gt;this, loc.gfid, &amp;loc.inode,</div><div class='add'>+                            NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ec_shd_selfheal (healer, healer-&gt;subvol, &amp;loc);</div><div class='add'>+    ec_shd_selfheal(healer, healer-&gt;subvol, &amp;loc);</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -ENOENT || ret == -ESTALE) {</div><div class='del'>-                gf_msg (healer-&gt;this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                        EC_MSG_HEAL_FAIL, "Purging index for gfid %s:",</div><div class='del'>-                        uuid_utoa(loc.gfid));</div><div class='del'>-                ec_shd_index_purge (subvol, parent-&gt;inode, entry-&gt;d_name);</div><div class='del'>-        }</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    if (ret == -ENOENT || ret == -ESTALE) {</div><div class='add'>+        gf_msg(healer-&gt;this-&gt;name, GF_LOG_DEBUG, 0, EC_MSG_HEAL_FAIL,</div><div class='add'>+               "Purging index for gfid %s:", uuid_utoa(loc.gfid));</div><div class='add'>+        ec_shd_index_purge(subvol, parent-&gt;inode, entry-&gt;d_name);</div><div class='add'>+    }</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_index_sweep (struct subvol_healer *healer)</div><div class='add'>+ec_shd_index_sweep(struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-        loc_t         loc     = {0};</div><div class='del'>-        ec_t          *ec     = NULL;</div><div class='del'>-        int           ret     = 0;</div><div class='del'>-        xlator_t      *subvol = NULL;</div><div class='del'>-        dict_t        *xdata  = NULL;</div><div class='del'>-</div><div class='del'>-        ec = healer-&gt;this-&gt;private;</div><div class='del'>-        subvol = ec-&gt;xl_list[healer-&gt;subvol];</div><div class='del'>-</div><div class='del'>-        ret = ec_shd_index_inode (healer-&gt;this, subvol, &amp;loc.inode);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (healer-&gt;this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                        EC_MSG_INDEX_DIR_GET_FAIL,</div><div class='del'>-                        "unable to get index-dir on %s", subvol-&gt;name);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata || dict_set_int32 (xdata, "get-gfid-type", 1)) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_mt_dir_scan (NULL, subvol, &amp;loc, GF_CLIENT_PID_SELF_HEALD,</div><div class='del'>-                                  healer, ec_shd_index_heal, xdata,</div><div class='del'>-                                  ec-&gt;shd.max_threads, ec-&gt;shd.wait_qlength);</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+</div><div class='add'>+    ec = healer-&gt;this-&gt;private;</div><div class='add'>+    subvol = ec-&gt;xl_list[healer-&gt;subvol];</div><div class='add'>+</div><div class='add'>+    ret = ec_shd_index_inode(healer-&gt;this, subvol, &amp;loc.inode);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(healer-&gt;this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+               EC_MSG_INDEX_DIR_GET_FAIL, "unable to get index-dir on %s",</div><div class='add'>+               subvol-&gt;name);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata || dict_set_int32(xdata, "get-gfid-type", 1)) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_mt_dir_scan(NULL, subvol, &amp;loc, GF_CLIENT_PID_SELF_HEALD,</div><div class='add'>+                             healer, ec_shd_index_heal, xdata,</div><div class='add'>+                             ec-&gt;shd.max_threads, ec-&gt;shd.wait_qlength);</div><div class='ctx'> out:</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_full_heal (xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='del'>-                   void *data)</div><div class='add'>+ec_shd_full_heal(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                 void *data)</div><div class='ctx'> {</div><div class='del'>-        struct subvol_healer *healer = data;</div><div class='del'>-        xlator_t             *this   = healer-&gt;this;</div><div class='del'>-        ec_t                 *ec     = NULL;</div><div class='del'>-        loc_t                loc    = {0};</div><div class='del'>-        int                  ret    = 0;</div><div class='del'>-</div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-        if (ec-&gt;xl_up_count &lt;= ec-&gt;fragments) {</div><div class='del'>-                return -ENOTCONN;</div><div class='del'>-        }</div><div class='del'>-        if (!ec-&gt;shd.enabled)</div><div class='del'>-                return -EBUSY;</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_is_null(entry-&gt;d_stat.ia_gfid)) {</div><div class='del'>-                /* It's possible that an entry has been removed just after</div><div class='del'>-                 * being seen in a directory but before getting its stat info.</div><div class='del'>-                 * In this case we'll receive a NULL gfid here. Since the file</div><div class='del'>-                 * doesn't exist anymore, we can safely ignore it. */</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    struct subvol_healer *healer = data;</div><div class='add'>+    xlator_t *this = healer-&gt;this;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+    if (ec-&gt;xl_up_count &lt;= ec-&gt;fragments) {</div><div class='add'>+        return -ENOTCONN;</div><div class='add'>+    }</div><div class='add'>+    if (!ec-&gt;shd.enabled)</div><div class='add'>+        return -EBUSY;</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_is_null(entry-&gt;d_stat.ia_gfid)) {</div><div class='add'>+        /* It's possible that an entry has been removed just after</div><div class='add'>+         * being seen in a directory but before getting its stat info.</div><div class='add'>+         * In this case we'll receive a NULL gfid here. Since the file</div><div class='add'>+         * doesn't exist anymore, we can safely ignore it. */</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc.parent = inode_ref (parent-&gt;inode);</div><div class='del'>-        loc.name   = entry-&gt;d_name;</div><div class='del'>-        gf_uuid_copy (loc.gfid, entry-&gt;d_stat.ia_gfid);</div><div class='add'>+    loc.parent = inode_ref(parent-&gt;inode);</div><div class='add'>+    loc.name = entry-&gt;d_name;</div><div class='add'>+    gf_uuid_copy(loc.gfid, entry-&gt;d_stat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-        /* If this fails with ENOENT/ESTALE index is stale */</div><div class='del'>-        ret = syncop_gfid_to_path (this-&gt;itable, subvol, loc.gfid,</div><div class='del'>-                                   (char **)&amp;loc.path);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    /* If this fails with ENOENT/ESTALE index is stale */</div><div class='add'>+    ret = syncop_gfid_to_path(this-&gt;itable, subvol, loc.gfid,</div><div class='add'>+                              (char **)&amp;loc.path);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_inode_find (this, this, loc.gfid,</div><div class='del'>-                                 &amp;loc.inode, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = syncop_inode_find(this, this, loc.gfid, &amp;loc.inode, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ec_shd_selfheal (healer, healer-&gt;subvol, &amp;loc);</div><div class='add'>+    ec_shd_selfheal(healer, healer-&gt;subvol, &amp;loc);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_full_sweep (struct subvol_healer *healer, inode_t *inode)</div><div class='add'>+ec_shd_full_sweep(struct subvol_healer *healer, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        ec_t           *ec  = NULL;</div><div class='del'>-        loc_t          loc  = {0};</div><div class='del'>-</div><div class='del'>-        ec = healer-&gt;this-&gt;private;</div><div class='del'>-        loc.inode = inode;</div><div class='del'>-        return syncop_ftw (ec-&gt;xl_list[healer-&gt;subvol], &amp;loc,</div><div class='del'>-                           GF_CLIENT_PID_SELF_HEALD, healer,</div><div class='del'>-                           ec_shd_full_heal);</div><div class='del'>-}</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    loc_t loc = {0};</div><div class='ctx'> </div><div class='add'>+    ec = healer-&gt;this-&gt;private;</div><div class='add'>+    loc.inode = inode;</div><div class='add'>+    return syncop_ftw(ec-&gt;xl_list[healer-&gt;subvol], &amp;loc,</div><div class='add'>+                      GF_CLIENT_PID_SELF_HEALD, healer, ec_shd_full_heal);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-ec_shd_index_healer (void *data)</div><div class='add'>+ec_shd_index_healer(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct subvol_healer *healer = NULL;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-</div><div class='del'>-        healer = data;</div><div class='del'>-        THIS = this = healer-&gt;this;</div><div class='del'>-        ec_t *ec = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                ec_shd_healer_wait (healer);</div><div class='del'>-</div><div class='del'>-                if (ec-&gt;xl_up_count &gt; ec-&gt;fragments) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                "starting index sweep on subvol %s",</div><div class='del'>-                                ec_subvol_name (this, healer-&gt;subvol));</div><div class='del'>-                        ec_shd_index_sweep (healer);</div><div class='del'>-                }</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                        "finished index sweep on subvol %s",</div><div class='del'>-                        ec_subvol_name (this, healer-&gt;subvol));</div><div class='add'>+    struct subvol_healer *healer = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    healer = data;</div><div class='add'>+    THIS = this = healer-&gt;this;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        ec_shd_healer_wait(healer);</div><div class='add'>+</div><div class='add'>+        if (ec-&gt;xl_up_count &gt; ec-&gt;fragments) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "starting index sweep on subvol %s",</div><div class='add'>+                         ec_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+            ec_shd_index_sweep(healer);</div><div class='ctx'>         }</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "finished index sweep on subvol %s",</div><div class='add'>+                     ec_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-ec_shd_full_healer (void *data)</div><div class='add'>+ec_shd_full_healer(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct subvol_healer *healer = NULL;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        loc_t rootloc = {0};</div><div class='del'>-</div><div class='del'>-        int run = 0;</div><div class='del'>-</div><div class='del'>-        healer = data;</div><div class='del'>-        THIS = this = healer-&gt;this;</div><div class='del'>-        ec_t *ec = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        rootloc.inode = this-&gt;itable-&gt;root;</div><div class='del'>-        for (;;) {</div><div class='del'>-                pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        run = __ec_shd_healer_wait (healer);</div><div class='del'>-                        if (!run)</div><div class='del'>-                                healer-&gt;running = _gf_false;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                if (!run)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                if (ec-&gt;xl_up_count &gt; ec-&gt;fragments) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                EC_MSG_FULL_SWEEP_START,</div><div class='del'>-                                "starting full sweep on subvol %s",</div><div class='del'>-                                ec_subvol_name (this, healer-&gt;subvol));</div><div class='del'>-</div><div class='del'>-                        ec_shd_selfheal (healer, healer-&gt;subvol, &amp;rootloc);</div><div class='del'>-                        ec_shd_full_sweep (healer, this-&gt;itable-&gt;root);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        EC_MSG_FULL_SWEEP_STOP,</div><div class='del'>-                        "finished full sweep on subvol %s",</div><div class='del'>-                        ec_subvol_name (this, healer-&gt;subvol));</div><div class='add'>+    struct subvol_healer *healer = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t rootloc = {0};</div><div class='add'>+</div><div class='add'>+    int run = 0;</div><div class='add'>+</div><div class='add'>+    healer = data;</div><div class='add'>+    THIS = this = healer-&gt;this;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    rootloc.inode = this-&gt;itable-&gt;root;</div><div class='add'>+    for (;;) {</div><div class='add'>+        pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            run = __ec_shd_healer_wait(healer);</div><div class='add'>+            if (!run)</div><div class='add'>+                healer-&gt;running = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='del'>-}</div><div class='add'>+        if (!run)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (ec-&gt;xl_up_count &gt; ec-&gt;fragments) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, EC_MSG_FULL_SWEEP_START,</div><div class='add'>+                   "starting full sweep on subvol %s",</div><div class='add'>+                   ec_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+</div><div class='add'>+            ec_shd_selfheal(healer, healer-&gt;subvol, &amp;rootloc);</div><div class='add'>+            ec_shd_full_sweep(healer, this-&gt;itable-&gt;root);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, EC_MSG_FULL_SWEEP_STOP,</div><div class='add'>+               "finished full sweep on subvol %s",</div><div class='add'>+               ec_subvol_name(this, healer-&gt;subvol));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return NULL;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_healer_init (xlator_t *this, struct subvol_healer *healer)</div><div class='add'>+ec_shd_healer_init(xlator_t *this, struct subvol_healer *healer)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_mutex_init (&amp;healer-&gt;mutex, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = pthread_mutex_init(&amp;healer-&gt;mutex, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_cond_init (&amp;healer-&gt;cond, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = pthread_cond_init(&amp;healer-&gt;cond, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        healer-&gt;this = this;</div><div class='del'>-        healer-&gt;running = _gf_false;</div><div class='del'>-        healer-&gt;rerun = _gf_false;</div><div class='add'>+    healer-&gt;this = this;</div><div class='add'>+    healer-&gt;running = _gf_false;</div><div class='add'>+    healer-&gt;rerun = _gf_false;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ec_shd_healer_spawn (xlator_t *this, struct subvol_healer *healer,</div><div class='del'>-                      void *(threadfn)(void *))</div><div class='add'>+ec_shd_healer_spawn(xlator_t *this, struct subvol_healer *healer,</div><div class='add'>+                    void *(threadfn)(void *))</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;healer-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (healer-&gt;running) {</div><div class='del'>-                        pthread_cond_signal (&amp;healer-&gt;cond);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = gf_thread_create (&amp;healer-&gt;thread, NULL,</div><div class='del'>-                                                threadfn, healer, "ecshd");</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        healer-&gt;running = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                healer-&gt;rerun = 1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;healer-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (healer-&gt;running) {</div><div class='add'>+            pthread_cond_signal(&amp;healer-&gt;cond);</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_thread_create(&amp;healer-&gt;thread, NULL, threadfn, healer,</div><div class='add'>+                                   "ecshd");</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+            healer-&gt;running = 1;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        healer-&gt;rerun = 1;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;healer-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;healer-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_shd_full_healer_spawn (xlator_t *this, int subvol)</div><div class='add'>+ec_shd_full_healer_spawn(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        return ec_shd_healer_spawn (this, NTH_FULL_HEALER (this, subvol),</div><div class='del'>-                                    ec_shd_full_healer);</div><div class='add'>+    return ec_shd_healer_spawn(this, NTH_FULL_HEALER(this, subvol),</div><div class='add'>+                               ec_shd_full_healer);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ec_shd_index_healer_spawn (xlator_t *this, int subvol)</div><div class='add'>+ec_shd_index_healer_spawn(xlator_t *this, int subvol)</div><div class='ctx'> {</div><div class='del'>-        return ec_shd_healer_spawn (this, NTH_INDEX_HEALER (this, subvol),</div><div class='del'>-                                    ec_shd_index_healer);</div><div class='add'>+    return ec_shd_healer_spawn(this, NTH_INDEX_HEALER(this, subvol),</div><div class='add'>+                               ec_shd_index_healer);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> ec_shd_index_healer_wake(ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        int32_t i;</div><div class='add'>+    int32_t i;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (((ec-&gt;xl_up &gt;&gt; i) &amp; 1) != 0) {</div><div class='del'>-                        ec_shd_index_healer_spawn(ec-&gt;xl, i);</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (((ec-&gt;xl_up &gt;&gt; i) &amp; 1) != 0) {</div><div class='add'>+            ec_shd_index_healer_spawn(ec-&gt;xl, i);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_selfheal_daemon_init (xlator_t *this)</div><div class='add'>+ec_selfheal_daemon_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        ec_t    *ec = NULL;</div><div class='del'>-        ec_self_heald_t *shd = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int i = 0;</div><div class='del'>-</div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-        shd = &amp;ec-&gt;shd;</div><div class='del'>-</div><div class='del'>-        shd-&gt;index_healers = GF_CALLOC (sizeof(*shd-&gt;index_healers),</div><div class='del'>-                                        ec-&gt;nodes,</div><div class='del'>-                                        ec_mt_subvol_healer_t);</div><div class='del'>-        if (!shd-&gt;index_healers)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                shd-&gt;index_healers[i].subvol = i;</div><div class='del'>-                ret = ec_shd_healer_init (this, &amp;shd-&gt;index_healers[i]);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    ec_self_heald_t *shd = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+    shd = &amp;ec-&gt;shd;</div><div class='add'>+</div><div class='add'>+    shd-&gt;index_healers = GF_CALLOC(sizeof(*shd-&gt;index_healers), ec-&gt;nodes,</div><div class='add'>+                                   ec_mt_subvol_healer_t);</div><div class='add'>+    if (!shd-&gt;index_healers)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        shd-&gt;index_healers[i].subvol = i;</div><div class='add'>+        ret = ec_shd_healer_init(this, &amp;shd-&gt;index_healers[i]);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        shd-&gt;full_healers = GF_CALLOC (sizeof(*shd-&gt;full_healers),</div><div class='del'>-                                       ec-&gt;nodes,</div><div class='del'>-                                       ec_mt_subvol_healer_t);</div><div class='del'>-        if (!shd-&gt;full_healers)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                shd-&gt;full_healers[i].subvol = i;</div><div class='del'>-                ret = ec_shd_healer_init (this, &amp;shd-&gt;full_healers[i]);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    shd-&gt;full_healers = GF_CALLOC(sizeof(*shd-&gt;full_healers), ec-&gt;nodes,</div><div class='add'>+                                  ec_mt_subvol_healer_t);</div><div class='add'>+    if (!shd-&gt;full_healers)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        shd-&gt;full_healers[i].subvol = i;</div><div class='add'>+        ret = ec_shd_healer_init(this, &amp;shd-&gt;full_healers[i]);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ec_heal_op (xlator_t *this, dict_t *output, gf_xl_afr_op_t op, int xl_id)</div><div class='add'>+ec_heal_op(xlator_t *this, dict_t *output, gf_xl_afr_op_t op, int xl_id)</div><div class='ctx'> {</div><div class='del'>-        char key[64] = {0};</div><div class='del'>-        int op_ret = 0;</div><div class='del'>-        ec_t *ec = NULL;</div><div class='del'>-        int     i = 0;</div><div class='del'>-        GF_UNUSED int     ret = 0;</div><div class='del'>-</div><div class='del'>-        ec = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        op_ret = -1;</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-status", xl_id, i);</div><div class='del'>-</div><div class='del'>-                if (((ec-&gt;xl_up &gt;&gt; i) &amp; 1) == 0) {</div><div class='del'>-                        ret = dict_set_str (output, key, "Brick is not connected");</div><div class='del'>-                } else if (!ec-&gt;up) {</div><div class='del'>-                        ret = dict_set_str (output, key,</div><div class='del'>-                                            "Disperse subvolume is not up");</div><div class='del'>-                } else if (!ec_shd_is_subvol_local (this, i)) {</div><div class='del'>-                        ret = dict_set_str (output, key, "Brick is remote");</div><div class='del'>-                } else {</div><div class='del'>-                        ret = dict_set_str (output, key, "Started self-heal");</div><div class='del'>-                        if (op == GF_SHD_OP_HEAL_FULL) {</div><div class='del'>-                                ec_shd_full_healer_spawn (this, i);</div><div class='del'>-                        } else if (op == GF_SHD_OP_HEAL_INDEX) {</div><div class='del'>-                                ec_shd_index_healer_spawn (this, i);</div><div class='del'>-                        }</div><div class='del'>-                        op_ret = 0;</div><div class='del'>-                }</div><div class='add'>+    char key[64] = {0};</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+</div><div class='add'>+    ec = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    op_ret = -1;</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-status", xl_id, i);</div><div class='add'>+</div><div class='add'>+        if (((ec-&gt;xl_up &gt;&gt; i) &amp; 1) == 0) {</div><div class='add'>+            ret = dict_set_str(output, key, "Brick is not connected");</div><div class='add'>+        } else if (!ec-&gt;up) {</div><div class='add'>+            ret = dict_set_str(output, key, "Disperse subvolume is not up");</div><div class='add'>+        } else if (!ec_shd_is_subvol_local(this, i)) {</div><div class='add'>+            ret = dict_set_str(output, key, "Brick is remote");</div><div class='add'>+        } else {</div><div class='add'>+            ret = dict_set_str(output, key, "Started self-heal");</div><div class='add'>+            if (op == GF_SHD_OP_HEAL_FULL) {</div><div class='add'>+                ec_shd_full_healer_spawn(this, i);</div><div class='add'>+            } else if (op == GF_SHD_OP_HEAL_INDEX) {</div><div class='add'>+                ec_shd_index_healer_spawn(this, i);</div><div class='add'>+            }</div><div class='add'>+            op_ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        return op_ret;</div><div class='add'>+    }</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_xl_op (xlator_t *this, dict_t *input, dict_t *output)</div><div class='add'>+ec_xl_op(xlator_t *this, dict_t *input, dict_t *output)</div><div class='ctx'> {</div><div class='del'>-        gf_xl_afr_op_t op     = GF_SHD_OP_INVALID;</div><div class='del'>-        int            ret    = 0;</div><div class='del'>-        int            xl_id  = 0;</div><div class='add'>+    gf_xl_afr_op_t op = GF_SHD_OP_INVALID;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int xl_id = 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (input, "xl-op", (int32_t *)&amp;op);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(input, "xl-op", (int32_t *)&amp;op);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int32 (input, this-&gt;name, &amp;xl_id);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int32(input, this-&gt;name, &amp;xl_id);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (output, this-&gt;name, xl_id);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(output, this-&gt;name, xl_id);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        switch (op) {</div><div class='add'>+    switch (op) {</div><div class='ctx'>         case GF_SHD_OP_HEAL_FULL:</div><div class='del'>-                ret = ec_heal_op (this, output, op, xl_id);</div><div class='del'>-                break;</div><div class='add'>+            ret = ec_heal_op(this, output, op, xl_id);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_SHD_OP_HEAL_INDEX:</div><div class='del'>-                ret = ec_heal_op (this, output, op, xl_id);</div><div class='del'>-                break;</div><div class='add'>+            ret = ec_heal_op(this, output, op, xl_id);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                ret = -1;</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        dict_del (output, this-&gt;name);</div><div class='del'>-        return ret;</div><div class='add'>+    dict_del(output, this-&gt;name);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-helpers.c b/xlators/cluster/ec/src/ec-helpers.c<br/>index ff3558def86..dec39b9d2aa 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-helpers.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-helpers.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-helpers.c</a></div><div class='hunk'>@@ -19,25 +19,20 @@</div><div class='ctx'> #include "ec-method.h"</div><div class='ctx'> #include "ec-helpers.h"</div><div class='ctx'> </div><div class='del'>-static const char * ec_fop_list[] =</div><div class='del'>-{</div><div class='del'>-    [-EC_FOP_HEAL] = "HEAL"</div><div class='del'>-};</div><div class='add'>+static const char *ec_fop_list[] = {[-EC_FOP_HEAL] = "HEAL"};</div><div class='ctx'> </div><div class='del'>-const char * ec_bin(char * str, size_t size, uint64_t value, int32_t digits)</div><div class='add'>+const char *</div><div class='add'>+ec_bin(char *str, size_t size, uint64_t value, int32_t digits)</div><div class='ctx'> {</div><div class='ctx'>     str += size;</div><div class='ctx'> </div><div class='del'>-    if (size-- &lt; 1)</div><div class='del'>-    {</div><div class='add'>+    if (size-- &lt; 1) {</div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='ctx'>     *--str = 0;</div><div class='ctx'> </div><div class='del'>-    while ((value != 0) || (digits &gt; 0))</div><div class='del'>-    {</div><div class='del'>-        if (size-- &lt; 1)</div><div class='del'>-        {</div><div class='add'>+    while ((value != 0) || (digits &gt; 0)) {</div><div class='add'>+        if (size-- &lt; 1) {</div><div class='ctx'>             goto failed;</div><div class='ctx'>         }</div><div class='ctx'>         *--str = '0' + (value &amp; 1);</div><div class='hunk'>@@ -51,21 +46,22 @@ failed:</div><div class='ctx'>     return "&lt;buffer too small&gt;";</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-const char * ec_fop_name(int32_t id)</div><div class='add'>+const char *</div><div class='add'>+ec_fop_name(int32_t id)</div><div class='ctx'> {</div><div class='del'>-    if (id &gt;= 0)</div><div class='del'>-    {</div><div class='add'>+    if (id &gt;= 0) {</div><div class='ctx'>         return gf_fop_list[id];</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return ec_fop_list[-id];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_trace(const char * event, ec_fop_data_t * fop, const char * fmt, ...)</div><div class='add'>+void</div><div class='add'>+ec_trace(const char *event, ec_fop_data_t *fop, const char *fmt, ...)</div><div class='ctx'> {</div><div class='ctx'>     char str1[32], str2[32], str3[32];</div><div class='del'>-    char * msg;</div><div class='del'>-    ec_t * ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    char *msg;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     va_list args;</div><div class='ctx'>     int32_t ret;</div><div class='ctx'> </div><div class='hunk'>@@ -73,28 +69,28 @@ void ec_trace(const char * event, ec_fop_data_t * fop, const char * fmt, ...)</div><div class='ctx'>     ret = vasprintf(&amp;msg, fmt, args);</div><div class='ctx'>     va_end(args);</div><div class='ctx'> </div><div class='del'>-    if (ret &lt; 0)</div><div class='del'>-    {</div><div class='add'>+    if (ret &lt; 0) {</div><div class='ctx'>         msg = "&lt;memory allocation error&gt;";</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "%s(%s) %p(%p) [refs=%d, winds=%d, jobs=%d] "</div><div class='del'>-                               "frame=%p/%p, min/exp=%d/%d, err=%d state=%d "</div><div class='del'>-                               "{%s:%s:%s} %s",</div><div class='del'>-           event, ec_fop_name(fop-&gt;id), fop, fop-&gt;parent, fop-&gt;refs,</div><div class='del'>-           fop-&gt;winds, fop-&gt;jobs, fop-&gt;req_frame, fop-&gt;frame, fop-&gt;minimum,</div><div class='del'>-           fop-&gt;expected, fop-&gt;error, fop-&gt;state,</div><div class='del'>-           ec_bin(str1, sizeof(str1), fop-&gt;mask, ec-&gt;nodes),</div><div class='del'>-           ec_bin(str2, sizeof(str2), fop-&gt;remaining, ec-&gt;nodes),</div><div class='del'>-           ec_bin(str3, sizeof(str3), fop-&gt;good, ec-&gt;nodes), msg);</div><div class='add'>+    gf_msg_trace("ec", 0,</div><div class='add'>+                 "%s(%s) %p(%p) [refs=%d, winds=%d, jobs=%d] "</div><div class='add'>+                 "frame=%p/%p, min/exp=%d/%d, err=%d state=%d "</div><div class='add'>+                 "{%s:%s:%s} %s",</div><div class='add'>+                 event, ec_fop_name(fop-&gt;id), fop, fop-&gt;parent, fop-&gt;refs,</div><div class='add'>+                 fop-&gt;winds, fop-&gt;jobs, fop-&gt;req_frame, fop-&gt;frame,</div><div class='add'>+                 fop-&gt;minimum, fop-&gt;expected, fop-&gt;error, fop-&gt;state,</div><div class='add'>+                 ec_bin(str1, sizeof(str1), fop-&gt;mask, ec-&gt;nodes),</div><div class='add'>+                 ec_bin(str2, sizeof(str2), fop-&gt;remaining, ec-&gt;nodes),</div><div class='add'>+                 ec_bin(str3, sizeof(str3), fop-&gt;good, ec-&gt;nodes), msg);</div><div class='ctx'> </div><div class='del'>-    if (ret &gt;= 0)</div><div class='del'>-    {</div><div class='add'>+    if (ret &gt;= 0) {</div><div class='ctx'>         free(msg);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_bits_consume(uint64_t * n)</div><div class='add'>+int32_t</div><div class='add'>+ec_bits_consume(uint64_t *n)</div><div class='ctx'> {</div><div class='ctx'>     uint64_t tmp;</div><div class='ctx'> </div><div class='hunk'>@@ -105,21 +101,18 @@ int32_t ec_bits_consume(uint64_t * n)</div><div class='ctx'>     return gf_bits_index(tmp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-size_t ec_iov_copy_to(void * dst, struct iovec * vector, int32_t count,</div><div class='del'>-                      off_t offset, size_t size)</div><div class='add'>+size_t</div><div class='add'>+ec_iov_copy_to(void *dst, struct iovec *vector, int32_t count, off_t offset,</div><div class='add'>+               size_t size)</div><div class='ctx'> {</div><div class='ctx'>     int32_t i = 0;</div><div class='ctx'>     size_t total = 0, len = 0;</div><div class='ctx'> </div><div class='del'>-    while (i &lt; count)</div><div class='del'>-    {</div><div class='del'>-        if (offset &lt; vector[i].iov_len)</div><div class='del'>-        {</div><div class='del'>-            while ((i &lt; count) &amp;&amp; (size &gt; 0))</div><div class='del'>-            {</div><div class='add'>+    while (i &lt; count) {</div><div class='add'>+        if (offset &lt; vector[i].iov_len) {</div><div class='add'>+            while ((i &lt; count) &amp;&amp; (size &gt; 0)) {</div><div class='ctx'>                 len = size;</div><div class='del'>-                if (len &gt; vector[i].iov_len - offset)</div><div class='del'>-                {</div><div class='add'>+                if (len &gt; vector[i].iov_len - offset) {</div><div class='ctx'>                     len = vector[i].iov_len - offset;</div><div class='ctx'>                 }</div><div class='ctx'>                 memcpy(dst, vector[i++].iov_base + offset, len);</div><div class='hunk'>@@ -139,15 +132,15 @@ size_t ec_iov_copy_to(void * dst, struct iovec * vector, int32_t count,</div><div class='ctx'>     return total;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref,</div><div class='del'>-                        void **ptr)</div><div class='add'>+int32_t</div><div class='add'>+ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref, void **ptr)</div><div class='ctx'> {</div><div class='ctx'>     struct iobref *iobref = NULL;</div><div class='ctx'>     struct iobuf *iobuf = NULL;</div><div class='ctx'>     int32_t ret = -ENOMEM;</div><div class='ctx'> </div><div class='del'>-    iobuf = iobuf_get_page_aligned (xl-&gt;ctx-&gt;iobuf_pool, size,</div><div class='del'>-                                    EC_METHOD_WORD_SIZE);</div><div class='add'>+    iobuf = iobuf_get_page_aligned(xl-&gt;ctx-&gt;iobuf_pool, size,</div><div class='add'>+                                   EC_METHOD_WORD_SIZE);</div><div class='ctx'>     if (iobuf == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -186,12 +179,12 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_set_array(dict_t *dict, char *key, uint64_t value[],</div><div class='del'>-                          int32_t size)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_set_array(dict_t *dict, char *key, uint64_t value[], int32_t size)</div><div class='ctx'> {</div><div class='del'>-    int         ret = -1;</div><div class='del'>-    uint64_t   *ptr = NULL;</div><div class='del'>-    int32_t     vindex;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t *ptr = NULL;</div><div class='add'>+    int32_t vindex;</div><div class='ctx'> </div><div class='ctx'>     if (value == NULL) {</div><div class='ctx'>         return -EINVAL;</div><div class='hunk'>@@ -202,19 +195,18 @@ int32_t ec_dict_set_array(dict_t *dict, char *key, uint64_t value[],</div><div class='ctx'>         return -ENOMEM;</div><div class='ctx'>     }</div><div class='ctx'>     for (vindex = 0; vindex &lt; size; vindex++) {</div><div class='del'>-         ptr[vindex] = hton64(value[vindex]);</div><div class='add'>+        ptr[vindex] = hton64(value[vindex]);</div><div class='ctx'>     }</div><div class='ctx'>     ret = dict_set_bin(dict, key, ptr, sizeof(uint64_t) * size);</div><div class='ctx'>     if (ret)</div><div class='del'>-         GF_FREE (ptr);</div><div class='add'>+        GF_FREE(ptr);</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-ec_dict_get_array (dict_t *dict, char *key, uint64_t value[], int32_t size)</div><div class='add'>+ec_dict_get_array(dict_t *dict, char *key, uint64_t value[], int32_t size)</div><div class='ctx'> {</div><div class='del'>-    void    *ptr;</div><div class='add'>+    void *ptr;</div><div class='ctx'>     int32_t len;</div><div class='ctx'>     int32_t vindex;</div><div class='ctx'>     int32_t old_size = 0;</div><div class='hunk'>@@ -228,43 +220,43 @@ ec_dict_get_array (dict_t *dict, char *key, uint64_t value[], int32_t size)</div><div class='ctx'>         return err;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (len &gt; (size * sizeof(uint64_t)) || (len % sizeof (uint64_t))) {</div><div class='add'>+    if (len &gt; (size * sizeof(uint64_t)) || (len % sizeof(uint64_t))) {</div><div class='ctx'>         return -EINVAL;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     /* 3.6 version ec would have stored version in 64 bit. In that case treat</div><div class='ctx'>      * metadata versions same as data*/</div><div class='del'>-    old_size = min (size, len/sizeof(uint64_t));</div><div class='add'>+    old_size = min(size, len / sizeof(uint64_t));</div><div class='ctx'>     for (vindex = 0; vindex &lt; old_size; vindex++) {</div><div class='del'>-         value[vindex] = ntoh64(*((uint64_t *)ptr + vindex));</div><div class='add'>+        value[vindex] = ntoh64(*((uint64_t *)ptr + vindex));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (old_size &lt; size) {</div><div class='del'>-            for (vindex = old_size; vindex &lt; size; vindex++) {</div><div class='del'>-                 value[vindex] = value[old_size-1];</div><div class='del'>-            }</div><div class='add'>+        for (vindex = old_size; vindex &lt; size; vindex++) {</div><div class='add'>+            value[vindex] = value[old_size - 1];</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_dict_del_array (dict_t *dict, char *key, uint64_t value[], int32_t size)</div><div class='add'>+ec_dict_del_array(dict_t *dict, char *key, uint64_t value[], int32_t size)</div><div class='ctx'> {</div><div class='ctx'>     int ret = 0;</div><div class='ctx'> </div><div class='del'>-    ret = ec_dict_get_array (dict, key, value, size);</div><div class='add'>+    ret = ec_dict_get_array(dict, key, value, size);</div><div class='ctx'>     if (ret == 0)</div><div class='del'>-            dict_del(dict, key);</div><div class='add'>+        dict_del(dict, key);</div><div class='ctx'> </div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int32_t ec_dict_set_number(dict_t * dict, char * key, uint64_t value)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_set_number(dict_t *dict, char *key, uint64_t value)</div><div class='ctx'> {</div><div class='del'>-    int        ret = -1;</div><div class='del'>-    uint64_t * ptr;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t *ptr;</div><div class='ctx'> </div><div class='ctx'>     ptr = GF_MALLOC(sizeof(value), gf_common_mt_char);</div><div class='ctx'>     if (ptr == NULL) {</div><div class='hunk'>@@ -275,14 +267,15 @@ int32_t ec_dict_set_number(dict_t * dict, char * key, uint64_t value)</div><div class='ctx'> </div><div class='ctx'>     ret = dict_set_bin(dict, key, ptr, sizeof(value));</div><div class='ctx'>     if (ret)</div><div class='del'>-        GF_FREE (ptr);</div><div class='add'>+        GF_FREE(ptr);</div><div class='ctx'> </div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_del_number(dict_t * dict, char * key, uint64_t * value)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_del_number(dict_t *dict, char *key, uint64_t *value)</div><div class='ctx'> {</div><div class='del'>-    void * ptr;</div><div class='add'>+    void *ptr;</div><div class='ctx'>     int32_t len, err;</div><div class='ctx'> </div><div class='ctx'>     if (dict == NULL) {</div><div class='hunk'>@@ -303,24 +296,23 @@ int32_t ec_dict_del_number(dict_t * dict, char * key, uint64_t * value)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_set_config(dict_t * dict, char * key, ec_config_t * config)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_set_config(dict_t *dict, char *key, ec_config_t *config)</div><div class='ctx'> {</div><div class='ctx'>     int ret = -1;</div><div class='del'>-    uint64_t * ptr, data;</div><div class='add'>+    uint64_t *ptr, data;</div><div class='ctx'> </div><div class='del'>-    if (config-&gt;version &gt; EC_CONFIG_VERSION)</div><div class='del'>-    {</div><div class='del'>-        gf_msg ("ec", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_UNSUPPORTED_VERSION,</div><div class='del'>-                "Trying to store an unsupported config "</div><div class='del'>-                "version (%u)", config-&gt;version);</div><div class='add'>+    if (config-&gt;version &gt; EC_CONFIG_VERSION) {</div><div class='add'>+        gf_msg("ec", GF_LOG_ERROR, EINVAL, EC_MSG_UNSUPPORTED_VERSION,</div><div class='add'>+               "Trying to store an unsupported config "</div><div class='add'>+               "version (%u)",</div><div class='add'>+               config-&gt;version);</div><div class='ctx'> </div><div class='ctx'>         return -EINVAL;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ptr = GF_MALLOC(sizeof(uint64_t), gf_common_mt_char);</div><div class='del'>-    if (ptr == NULL)</div><div class='del'>-    {</div><div class='add'>+    if (ptr == NULL) {</div><div class='ctx'>         return -ENOMEM;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -335,14 +327,15 @@ int32_t ec_dict_set_config(dict_t * dict, char * key, ec_config_t * config)</div><div class='ctx'> </div><div class='ctx'>     ret = dict_set_bin(dict, key, ptr, sizeof(uint64_t));</div><div class='ctx'>     if (ret)</div><div class='del'>-        GF_FREE (ptr);</div><div class='add'>+        GF_FREE(ptr);</div><div class='ctx'> </div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config)</div><div class='add'>+int32_t</div><div class='add'>+ec_dict_del_config(dict_t *dict, char *key, ec_config_t *config)</div><div class='ctx'> {</div><div class='del'>-    void * ptr;</div><div class='add'>+    void *ptr;</div><div class='ctx'>     uint64_t data;</div><div class='ctx'>     int32_t len, err;</div><div class='ctx'> </div><div class='hunk'>@@ -372,12 +365,9 @@ int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     config-&gt;version = (data &gt;&gt; 56) &amp; 0xff;</div><div class='del'>-    if (config-&gt;version &gt; EC_CONFIG_VERSION)</div><div class='del'>-    {</div><div class='del'>-        gf_msg ("ec", GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_UNSUPPORTED_VERSION,</div><div class='del'>-                "Found an unsupported config version (%u)",</div><div class='del'>-                config-&gt;version);</div><div class='add'>+    if (config-&gt;version &gt; EC_CONFIG_VERSION) {</div><div class='add'>+        gf_msg("ec", GF_LOG_ERROR, EINVAL, EC_MSG_UNSUPPORTED_VERSION,</div><div class='add'>+               "Found an unsupported config version (%u)", config-&gt;version);</div><div class='ctx'> </div><div class='ctx'>         return -EINVAL;</div><div class='ctx'>     }</div><div class='hunk'>@@ -393,7 +383,8 @@ int32_t ec_dict_del_config(dict_t * dict, char * key, ec_config_t * config)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-gf_boolean_t ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src)</div><div class='add'>+gf_boolean_t</div><div class='add'>+ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src)</div><div class='ctx'> {</div><div class='ctx'>     if (gf_uuid_is_null(src)) {</div><div class='ctx'>         return _gf_true;</div><div class='hunk'>@@ -406,9 +397,8 @@ gf_boolean_t ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (gf_uuid_compare(dst, src) != 0) {</div><div class='del'>-        gf_msg (xl-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                EC_MSG_GFID_MISMATCH,</div><div class='del'>-                "Mismatching GFID's in loc");</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_WARNING, 0, EC_MSG_GFID_MISMATCH,</div><div class='add'>+               "Mismatching GFID's in loc");</div><div class='ctx'> </div><div class='ctx'>         return _gf_false;</div><div class='ctx'>     }</div><div class='hunk'>@@ -416,7 +406,8 @@ gf_boolean_t ec_loc_gfid_check(xlator_t *xl, uuid_t dst, uuid_t src)</div><div class='ctx'>     return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_setup_inode(xlator_t *xl, inode_table_t *table, loc_t *loc)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_setup_inode(xlator_t *xl, inode_table_t *table, loc_t *loc)</div><div class='ctx'> {</div><div class='ctx'>     int32_t ret = -EINVAL;</div><div class='ctx'> </div><div class='hunk'>@@ -427,7 +418,7 @@ int32_t ec_loc_setup_inode(xlator_t *xl, inode_table_t *table, loc_t *loc)</div><div class='ctx'>     } else if (table != NULL) {</div><div class='ctx'>         if (!gf_uuid_is_null(loc-&gt;gfid)) {</div><div class='ctx'>             loc-&gt;inode = inode_find(table, loc-&gt;gfid);</div><div class='del'>-        } else if (loc-&gt;path &amp;&amp; strchr (loc-&gt;path, '/')) {</div><div class='add'>+        } else if (loc-&gt;path &amp;&amp; strchr(loc-&gt;path, '/')) {</div><div class='ctx'>             loc-&gt;inode = inode_resolve(table, (char *)loc-&gt;path);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='hunk'>@@ -438,7 +429,8 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_setup_parent(xlator_t *xl, inode_table_t *table, loc_t *loc)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_setup_parent(xlator_t *xl, inode_table_t *table, loc_t *loc)</div><div class='ctx'> {</div><div class='ctx'>     char *path, *parent;</div><div class='ctx'>     int32_t ret = -EINVAL;</div><div class='hunk'>@@ -450,13 +442,11 @@ int32_t ec_loc_setup_parent(xlator_t *xl, inode_table_t *table, loc_t *loc)</div><div class='ctx'>     } else if (table != NULL) {</div><div class='ctx'>         if (!gf_uuid_is_null(loc-&gt;pargfid)) {</div><div class='ctx'>             loc-&gt;parent = inode_find(table, loc-&gt;pargfid);</div><div class='del'>-        } else if (loc-&gt;path &amp;&amp; strchr (loc-&gt;path, '/')) {</div><div class='add'>+        } else if (loc-&gt;path &amp;&amp; strchr(loc-&gt;path, '/')) {</div><div class='ctx'>             path = gf_strdup(loc-&gt;path);</div><div class='ctx'>             if (path == NULL) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        EC_MSG_NO_MEMORY,</div><div class='del'>-                        "Unable to duplicate path '%s'",</div><div class='del'>-                        loc-&gt;path);</div><div class='add'>+                gf_msg(xl-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                       "Unable to duplicate path '%s'", loc-&gt;path);</div><div class='ctx'> </div><div class='ctx'>                 ret = -ENOMEM;</div><div class='ctx'> </div><div class='hunk'>@@ -483,7 +473,8 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_setup_path(xlator_t *xl, loc_t *loc)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_setup_path(xlator_t *xl, loc_t *loc)</div><div class='ctx'> {</div><div class='ctx'>     uuid_t root = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};</div><div class='ctx'>     char *name;</div><div class='hunk'>@@ -513,10 +504,8 @@ int32_t ec_loc_setup_path(xlator_t *xl, loc_t *loc)</div><div class='ctx'> </div><div class='ctx'>         if (loc-&gt;name != NULL) {</div><div class='ctx'>             if (strcmp(loc-&gt;name, name) != 0) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        EC_MSG_INVALID_LOC_NAME,</div><div class='del'>-                        "Invalid name '%s' in loc",</div><div class='del'>-                        loc-&gt;name);</div><div class='add'>+                gf_msg(xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_LOC_NAME,</div><div class='add'>+                       "Invalid name '%s' in loc", loc-&gt;name);</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -531,7 +520,8 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent)</div><div class='ctx'> {</div><div class='ctx'>     inode_table_t *table = NULL;</div><div class='ctx'>     char *str = NULL;</div><div class='hunk'>@@ -548,24 +538,20 @@ int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent)</div><div class='ctx'>     if (!gf_uuid_is_null(loc-&gt;pargfid)) {</div><div class='ctx'>         gf_uuid_copy(parent-&gt;gfid, loc-&gt;pargfid);</div><div class='ctx'>     }</div><div class='del'>-    if (loc-&gt;path &amp;&amp; strchr (loc-&gt;path, '/')) {</div><div class='add'>+    if (loc-&gt;path &amp;&amp; strchr(loc-&gt;path, '/')) {</div><div class='ctx'>         str = gf_strdup(loc-&gt;path);</div><div class='ctx'>         if (str == NULL) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        EC_MSG_NO_MEMORY,</div><div class='del'>-                        "Unable to duplicate path '%s'",</div><div class='del'>-                        loc-&gt;path);</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Unable to duplicate path '%s'", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'>         parent-&gt;path = gf_strdup(dirname(str));</div><div class='ctx'>         if (parent-&gt;path == NULL) {</div><div class='del'>-                gf_msg (xl-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        EC_MSG_NO_MEMORY,</div><div class='del'>-                        "Unable to duplicate path '%s'",</div><div class='del'>-                        dirname(str));</div><div class='add'>+            gf_msg(xl-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Unable to duplicate path '%s'", dirname(str));</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -582,9 +568,8 @@ int32_t ec_loc_parent(xlator_t *xl, loc_t *loc, loc_t *parent)</div><div class='ctx'> </div><div class='ctx'>     if ((parent-&gt;inode == NULL) &amp;&amp; (parent-&gt;path == NULL) &amp;&amp;</div><div class='ctx'>         gf_uuid_is_null(parent-&gt;gfid)) {</div><div class='del'>-        gf_msg (xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_LOC_PARENT_INODE_MISSING,</div><div class='del'>-                "Parent inode missing for loc_t");</div><div class='add'>+        gf_msg(xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_LOC_PARENT_INODE_MISSING,</div><div class='add'>+               "Parent inode missing for loc_t");</div><div class='ctx'> </div><div class='ctx'>         ret = -EINVAL;</div><div class='ctx'> </div><div class='hunk'>@@ -603,8 +588,8 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_update(xlator_t *xl, loc_t *loc, inode_t *inode,</div><div class='del'>-                      struct iatt *iatt)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_update(xlator_t *xl, loc_t *loc, inode_t *inode, struct iatt *iatt)</div><div class='ctx'> {</div><div class='ctx'>     inode_table_t *table = NULL;</div><div class='ctx'>     int32_t ret = -EINVAL;</div><div class='hunk'>@@ -645,9 +630,10 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_from_fd(xlator_t * xl, loc_t * loc, fd_t * fd)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_from_fd(xlator_t *xl, loc_t *loc, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-    ec_fd_t * ctx;</div><div class='add'>+    ec_fd_t *ctx;</div><div class='ctx'>     int32_t ret = -ENOMEM;</div><div class='ctx'> </div><div class='ctx'>     memset(loc, 0, sizeof(*loc));</div><div class='hunk'>@@ -672,7 +658,8 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_loc_from_loc(xlator_t * xl, loc_t * dst, loc_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_loc_from_loc(xlator_t *xl, loc_t *dst, loc_t *src)</div><div class='ctx'> {</div><div class='ctx'>     int32_t ret = -ENOMEM;</div><div class='ctx'> </div><div class='hunk'>@@ -695,62 +682,61 @@ out:</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_owner_set(call_frame_t * frame, void * owner)</div><div class='add'>+void</div><div class='add'>+ec_owner_set(call_frame_t *frame, void *owner)</div><div class='ctx'> {</div><div class='ctx'>     set_lk_owner_from_ptr(&amp;frame-&gt;root-&gt;lk_owner, owner);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_owner_copy(call_frame_t *frame, gf_lkowner_t *owner)</div><div class='add'>+void</div><div class='add'>+ec_owner_copy(call_frame_t *frame, gf_lkowner_t *owner)</div><div class='ctx'> {</div><div class='del'>-    lk_owner_copy (&amp;frame-&gt;root-&gt;lk_owner, owner);</div><div class='add'>+    lk_owner_copy(&amp;frame-&gt;root-&gt;lk_owner, owner);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_stripe_cache_init (ec_t *ec, ec_inode_t *ctx)</div><div class='add'>+ec_stripe_cache_init(ec_t *ec, ec_inode_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        ec_stripe_list_t *stripe_cache = NULL;</div><div class='add'>+    ec_stripe_list_t *stripe_cache = NULL;</div><div class='ctx'> </div><div class='del'>-        stripe_cache = &amp;(ctx-&gt;stripe_cache);</div><div class='del'>-        if (stripe_cache-&gt;max == 0) {</div><div class='del'>-                stripe_cache-&gt;max = ec-&gt;stripe_cache;</div><div class='del'>-        }</div><div class='add'>+    stripe_cache = &amp;(ctx-&gt;stripe_cache);</div><div class='add'>+    if (stripe_cache-&gt;max == 0) {</div><div class='add'>+        stripe_cache-&gt;max = ec-&gt;stripe_cache;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_inode_t * __ec_inode_get(inode_t * inode, xlator_t * xl)</div><div class='add'>+ec_inode_t *</div><div class='add'>+__ec_inode_get(inode_t *inode, xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-    ec_inode_t * ctx = NULL;</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='ctx'>     uint64_t value = 0;</div><div class='ctx'> </div><div class='del'>-    if ((__inode_ctx_get(inode, xl, &amp;value) != 0) || (value == 0))</div><div class='del'>-    {</div><div class='add'>+    if ((__inode_ctx_get(inode, xl, &amp;value) != 0) || (value == 0)) {</div><div class='ctx'>         ctx = GF_MALLOC(sizeof(*ctx), ec_mt_ec_inode_t);</div><div class='del'>-        if (ctx != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (ctx != NULL) {</div><div class='ctx'>             memset(ctx, 0, sizeof(*ctx));</div><div class='ctx'>             INIT_LIST_HEAD(&amp;ctx-&gt;heal);</div><div class='ctx'>             INIT_LIST_HEAD(&amp;ctx-&gt;stripe_cache.lru);</div><div class='ctx'>             value = (uint64_t)(uintptr_t)ctx;</div><div class='del'>-            if (__inode_ctx_set(inode, xl, &amp;value) != 0)</div><div class='del'>-            {</div><div class='add'>+            if (__inode_ctx_set(inode, xl, &amp;value) != 0) {</div><div class='ctx'>                 GF_FREE(ctx);</div><div class='ctx'> </div><div class='ctx'>                 return NULL;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='add'>+    } else {</div><div class='ctx'>         ctx = (ec_inode_t *)(uintptr_t)value;</div><div class='ctx'>     }</div><div class='ctx'>     if (ctx)</div><div class='del'>-        ec_stripe_cache_init (xl-&gt;private, ctx);</div><div class='add'>+        ec_stripe_cache_init(xl-&gt;private, ctx);</div><div class='ctx'> </div><div class='ctx'>     return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_inode_t * ec_inode_get(inode_t * inode, xlator_t * xl)</div><div class='add'>+ec_inode_t *</div><div class='add'>+ec_inode_get(inode_t *inode, xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-    ec_inode_t * ctx = NULL;</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -761,30 +747,31 @@ ec_inode_t * ec_inode_get(inode_t * inode, xlator_t * xl)</div><div class='ctx'>     return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_fd_t * __ec_fd_get(fd_t * fd, xlator_t * xl)</div><div class='add'>+ec_fd_t *</div><div class='add'>+__ec_fd_get(fd_t *fd, xlator_t *xl)</div><div class='ctx'> {</div><div class='ctx'>     int i = 0;</div><div class='del'>-    ec_fd_t * ctx = NULL;</div><div class='add'>+    ec_fd_t *ctx = NULL;</div><div class='ctx'>     uint64_t value = 0;</div><div class='ctx'>     ec_t *ec = xl-&gt;private;</div><div class='ctx'> </div><div class='ctx'>     if ((__fd_ctx_get(fd, xl, &amp;value) != 0) || (value == 0)) {</div><div class='del'>-        ctx = GF_MALLOC(sizeof(*ctx) + (sizeof (ec_fd_status_t) * ec-&gt;nodes),</div><div class='add'>+        ctx = GF_MALLOC(sizeof(*ctx) + (sizeof(ec_fd_status_t) * ec-&gt;nodes),</div><div class='ctx'>                         ec_mt_ec_fd_t);</div><div class='ctx'>         if (ctx != NULL) {</div><div class='ctx'>             memset(ctx, 0, sizeof(*ctx));</div><div class='ctx'> </div><div class='ctx'>             for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (fd_is_anonymous (fd)) {</div><div class='del'>-                        ctx-&gt;fd_status[i] = EC_FD_OPENED;</div><div class='add'>+                if (fd_is_anonymous(fd)) {</div><div class='add'>+                    ctx-&gt;fd_status[i] = EC_FD_OPENED;</div><div class='ctx'>                 } else {</div><div class='del'>-                        ctx-&gt;fd_status[i] = EC_FD_NOT_OPENED;</div><div class='add'>+                    ctx-&gt;fd_status[i] = EC_FD_NOT_OPENED;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             value = (uint64_t)(uintptr_t)ctx;</div><div class='ctx'>             if (__fd_ctx_set(fd, xl, value) != 0) {</div><div class='del'>-                GF_FREE (ctx);</div><div class='add'>+                GF_FREE(ctx);</div><div class='ctx'>                 return NULL;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='hunk'>@@ -803,9 +790,10 @@ ec_fd_t * __ec_fd_get(fd_t * fd, xlator_t * xl)</div><div class='ctx'>     return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-ec_fd_t * ec_fd_get(fd_t * fd, xlator_t * xl)</div><div class='add'>+ec_fd_t *</div><div class='add'>+ec_fd_get(fd_t *fd, xlator_t *xl)</div><div class='ctx'> {</div><div class='del'>-    ec_fd_t * ctx = NULL;</div><div class='add'>+    ec_fd_t *ctx = NULL;</div><div class='ctx'> </div><div class='ctx'>     LOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -817,37 +805,36 @@ ec_fd_t * ec_fd_get(fd_t * fd, xlator_t * xl)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_is_internal_xattr (dict_t *dict, char *key, data_t *value, void *data)</div><div class='add'>+ec_is_internal_xattr(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        if (key &amp;&amp;</div><div class='del'>-            (strncmp (key, EC_XATTR_PREFIX, SLEN (EC_XATTR_PREFIX)) == 0))</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (key &amp;&amp; (strncmp(key, EC_XATTR_PREFIX, SLEN(EC_XATTR_PREFIX)) == 0))</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_filter_internal_xattrs (dict_t *xattr)</div><div class='add'>+ec_filter_internal_xattrs(dict_t *xattr)</div><div class='ctx'> {</div><div class='del'>-        dict_foreach_match (xattr, ec_is_internal_xattr, NULL,</div><div class='del'>-                            dict_remove_foreach_fn, NULL);</div><div class='add'>+    dict_foreach_match(xattr, ec_is_internal_xattr, NULL,</div><div class='add'>+                       dict_remove_foreach_fn, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-ec_is_data_fop (glusterfs_fop_t fop)</div><div class='add'>+ec_is_data_fop(glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-        switch (fop) {</div><div class='add'>+    switch (fop) {</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='ctx'>         case GF_FOP_TRUNCATE:</div><div class='ctx'>         case GF_FOP_FTRUNCATE:</div><div class='ctx'>         case GF_FOP_FALLOCATE:</div><div class='ctx'>         case GF_FOP_DISCARD:</div><div class='ctx'>         case GF_FOP_ZEROFILL:</div><div class='del'>-                return _gf_true;</div><div class='add'>+            return _gf_true;</div><div class='ctx'>         default:</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> /*</div><div class='ctx'> gf_boolean_t</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-inode-read.c b/xlators/cluster/ec/src/ec-inode-read.c<br/>index 30d76371da6..7a8b174bbed 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-inode-read.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-inode-read.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-inode-read.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-inode-read.c</a></div><div class='hunk'>@@ -21,8 +21,9 @@</div><div class='ctx'> </div><div class='ctx'> /* FOP: access */</div><div class='ctx'> </div><div class='del'>-int32_t ec_access_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL;</div><div class='hunk'>@@ -35,27 +36,27 @@ int32_t ec_access_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-    cbk = ec_cbk_data_allocate (frame, this, fop, GF_FOP_ACCESS,</div><div class='del'>-                                idx, op_ret, op_errno);</div><div class='add'>+    cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_ACCESS, idx, op_ret,</div><div class='add'>+                               op_errno);</div><div class='ctx'>     if (cbk) {</div><div class='ctx'>         if (xdata)</div><div class='del'>-               cbk-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        ec_combine (cbk, NULL);</div><div class='add'>+            cbk-&gt;xdata = dict_ref(xdata);</div><div class='add'>+        ec_combine(cbk, NULL);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='del'>-        ec_complete (fop);</div><div class='add'>+    if (fop != NULL) {</div><div class='add'>+        ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_access(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_access(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -67,19 +68,19 @@ void ec_wind_access(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'> int32_t</div><div class='ctx'> ec_manager_access(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-        ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'> </div><div class='del'>-        switch (state) {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='del'>-            ec_lock_prepare_inode (fop, &amp;fop-&gt;loc[0], EC_QUERY_INFO, 0,</div><div class='del'>-                                   LLONG_MAX);</div><div class='del'>-            ec_lock (fop);</div><div class='add'>+            ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0], EC_QUERY_INFO, 0,</div><div class='add'>+                                  LLONG_MAX);</div><div class='add'>+            ec_lock(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_DISPATCH;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='del'>-            ec_dispatch_one (fop);</div><div class='add'>+            ec_dispatch_one(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='hunk'>@@ -92,12 +93,11 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_REPORT:</div><div class='ctx'>             cbk = fop-&gt;answer;</div><div class='del'>-            GF_ASSERT (cbk);</div><div class='add'>+            GF_ASSERT(cbk);</div><div class='ctx'>             if (fop-&gt;cbks.access != NULL) {</div><div class='ctx'>                 if (cbk) {</div><div class='del'>-                    fop-&gt;cbks.access(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='del'>-                                     cbk-&gt;op_ret, cbk-&gt;op_errno,</div><div class='del'>-                                     cbk-&gt;xdata);</div><div class='add'>+                    fop-&gt;cbks.access(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                     cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='hunk'>@@ -108,8 +108,8 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_PREPARE_ANSWER:</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             if (fop-&gt;cbks.access != NULL) {</div><div class='del'>-                fop-&gt;cbks.access(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                                 fop-&gt;error, NULL);</div><div class='add'>+                fop-&gt;cbks.access(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='add'>+                                 NULL);</div><div class='ctx'>             }</div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='hunk'>@@ -126,24 +126,23 @@ ec_manager_access(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_access_cbk_t func, void * data,</div><div class='del'>-               loc_t * loc, int32_t mask, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_access(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_access_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+          int32_t mask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .access = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.access = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(ACCESS) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(ACCESS) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -160,9 +159,8 @@ void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -170,10 +168,9 @@ void ec_access(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -191,14 +188,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: getxattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_getxattr(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                            ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_getxattr(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-    if (!ec_dict_compare(dst-&gt;dict, src-&gt;dict))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_DICT_MISMATCH, "Mismatching dictionary in "</div><div class='del'>-                                             "answers of 'GF_FOP_GETXATTR'");</div><div class='add'>+    if (!ec_dict_compare(dst-&gt;dict, src-&gt;dict)) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_DICT_MISMATCH,</div><div class='add'>+               "Mismatching dictionary in "</div><div class='add'>+               "answers of 'GF_FOP_GETXATTR'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -206,12 +202,12 @@ int32_t ec_combine_getxattr(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_getxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t * dict,</div><div class='del'>-                        dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -221,38 +217,30 @@ int32_t ec_getxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_GETXATTR, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (dict != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (dict != NULL) {</div><div class='ctx'>                 cbk-&gt;dict = dict_ref(dict);</div><div class='del'>-                if (cbk-&gt;dict == NULL)</div><div class='del'>-                {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                            EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                            "Failed to reference a "</div><div class='del'>-                            "dictionary.");</div><div class='add'>+                if (cbk-&gt;dict == NULL) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                           "Failed to reference a "</div><div class='add'>+                           "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -262,15 +250,15 @@ int32_t ec_getxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_getxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_getxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -280,40 +268,40 @@ void ec_wind_getxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_handle_special_xattrs (ec_fop_data_t *fop)</div><div class='add'>+ec_handle_special_xattrs(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_cbk_data_t *cbk = NULL;</div><div class='del'>-        /* Stime may not be available on all the bricks, so even if some of the</div><div class='del'>-         * subvols succeed the operation, treat it as answer.*/</div><div class='del'>-        if (fop-&gt;str[0] &amp;&amp;</div><div class='del'>-            fnmatch (GF_XATTR_STIME_PATTERN, fop-&gt;str[0], 0) == 0) {</div><div class='del'>-                if (!fop-&gt;answer || (fop-&gt;answer-&gt;op_ret &lt; 0)) {</div><div class='del'>-                        list_for_each_entry (cbk, &amp;fop-&gt;cbk_list, list) {</div><div class='del'>-                                if (cbk-&gt;op_ret &gt;= 0) {</div><div class='del'>-                                        fop-&gt;answer = cbk;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    /* Stime may not be available on all the bricks, so even if some of the</div><div class='add'>+     * subvols succeed the operation, treat it as answer.*/</div><div class='add'>+    if (fop-&gt;str[0] &amp;&amp; fnmatch(GF_XATTR_STIME_PATTERN, fop-&gt;str[0], 0) == 0) {</div><div class='add'>+        if (!fop-&gt;answer || (fop-&gt;answer-&gt;op_ret &lt; 0)) {</div><div class='add'>+            list_for_each_entry(cbk, &amp;fop-&gt;cbk_list, list)</div><div class='add'>+            {</div><div class='add'>+                if (cbk-&gt;op_ret &gt;= 0) {</div><div class='add'>+                    fop-&gt;answer = cbk;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_getxattr(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             /* clear-locks commands must be done without any locks acquired</div><div class='ctx'>                to avoid interferences. */</div><div class='ctx'>             if ((fop-&gt;str[0] == NULL) ||</div><div class='ctx'>                 (strncmp(fop-&gt;str[0], GF_XATTR_CLRLK_CMD,</div><div class='del'>-                         SLEN (GF_XATTR_CLRLK_CMD)) != 0)) {</div><div class='add'>+                         SLEN(GF_XATTR_CLRLK_CMD)) != 0)) {</div><div class='ctx'>                 if (fop-&gt;fd == NULL) {</div><div class='del'>-                    ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0], EC_QUERY_INFO,</div><div class='del'>-                                          0, LLONG_MAX);</div><div class='add'>+                    ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0], EC_QUERY_INFO, 0,</div><div class='add'>+                                          LLONG_MAX);</div><div class='ctx'>                 } else {</div><div class='ctx'>                     ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, 0,</div><div class='ctx'>                                        LLONG_MAX);</div><div class='hunk'>@@ -333,11 +321,11 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_PREPARE_ANSWER:</div><div class='del'>-            ec_handle_special_xattrs (fop);</div><div class='add'>+            ec_handle_special_xattrs(fop);</div><div class='ctx'>             if (fop-&gt;minimum == EC_MINIMUM_ALL) {</div><div class='ctx'>                 cbk = ec_fop_prepare_answer(fop, _gf_true);</div><div class='ctx'>             } else {</div><div class='del'>-                if (ec_dispatch_one_retry (fop, &amp;cbk)) {</div><div class='add'>+                if (ec_dispatch_one_retry(fop, &amp;cbk)) {</div><div class='ctx'>                     return EC_STATE_DISPATCH;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='hunk'>@@ -347,10 +335,10 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                 err = ec_dict_combine(cbk, EC_COMBINE_DICT);</div><div class='ctx'>                 if (!ec_cbk_set_error(cbk, -err, _gf_true)) {</div><div class='ctx'>                     if (cbk-&gt;xdata != NULL)</div><div class='del'>-                            ec_filter_internal_xattrs (cbk-&gt;xdata);</div><div class='add'>+                        ec_filter_internal_xattrs(cbk-&gt;xdata);</div><div class='ctx'> </div><div class='ctx'>                     if (cbk-&gt;dict != NULL)</div><div class='del'>-                            ec_filter_internal_xattrs (cbk-&gt;dict);</div><div class='add'>+                        ec_filter_internal_xattrs(cbk-&gt;dict);</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='hunk'>@@ -361,8 +349,7 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.getxattr != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.getxattr != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.getxattr(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                    cbk-&gt;op_errno, cbk-&gt;dict, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -376,10 +363,9 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.getxattr != NULL)</div><div class='del'>-            {</div><div class='del'>-                fop-&gt;cbks.getxattr(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                                   fop-&gt;error, NULL, NULL);</div><div class='add'>+            if (fop-&gt;cbks.getxattr != NULL) {</div><div class='add'>+                fop-&gt;cbks.getxattr(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='add'>+                                   NULL, NULL);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='hunk'>@@ -397,18 +383,17 @@ int32_t ec_manager_getxattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_getxattr_heal_cbk(call_frame_t *frame, void *cookie, xlator_t *xl,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno, uintptr_t mask,</div><div class='del'>-                             uintptr_t good, uintptr_t bad, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_getxattr_heal_cbk(call_frame_t *frame, void *cookie, xlator_t *xl,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, uintptr_t mask,</div><div class='add'>+                     uintptr_t good, uintptr_t bad, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     fop_getxattr_cbk_t func = fop-&gt;data;</div><div class='hunk'>@@ -460,15 +445,15 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-             int32_t minimum, fop_getxattr_cbk_t func, void *data,</div><div class='del'>-             loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+ec_getxattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_getxattr_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+            const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .getxattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.getxattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(GETXATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(GETXATTR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -476,25 +461,23 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     /* Special handling of an explicit self-heal request */</div><div class='ctx'>     if ((name != NULL) &amp;&amp; (strcmp(name, EC_XATTR_HEAL) == 0)) {</div><div class='del'>-        ec_heal(frame, this, target, EC_MINIMUM_ONE, ec_getxattr_heal_cbk,</div><div class='del'>-                func, loc, 0, NULL);</div><div class='add'>+        ec_heal(frame, this, target, EC_MINIMUM_ONE, ec_getxattr_heal_cbk, func,</div><div class='add'>+                loc, 0, NULL);</div><div class='ctx'> </div><div class='ctx'>         return;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_GETXATTR,</div><div class='del'>-                               EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='del'>-                               ec_wind_getxattr, ec_manager_getxattr, callback,</div><div class='del'>-                               data);</div><div class='add'>+    fop = ec_fop_data_allocate(</div><div class='add'>+        frame, this, GF_FOP_GETXATTR, EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='add'>+        ec_wind_getxattr, ec_manager_getxattr, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -503,15 +486,14 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>         /* In case of list-node-uuids xattr, set flag to indicate</div><div class='ctx'>          * the same and use node-uuid xattr for winding fop */</div><div class='ctx'>         if (XATTR_IS_NODE_UUID_LIST(name)) {</div><div class='del'>-                fop-&gt;int32 = 1;</div><div class='del'>-                fop-&gt;str[0] = gf_strdup(GF_XATTR_NODE_UUID_KEY);</div><div class='add'>+            fop-&gt;int32 = 1;</div><div class='add'>+            fop-&gt;str[0] = gf_strdup(GF_XATTR_NODE_UUID_KEY);</div><div class='ctx'>         } else {</div><div class='del'>-                fop-&gt;str[0] = gf_strdup(name);</div><div class='add'>+            fop-&gt;str[0] = gf_strdup(name);</div><div class='ctx'>         }</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -519,10 +501,9 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -532,20 +513,20 @@ ec_getxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fop != NULL) {</div><div class='del'>-        ec_manager (fop, error);</div><div class='add'>+        ec_manager(fop, error);</div><div class='ctx'>     } else {</div><div class='del'>-        func (frame, NULL, this, -1, error, NULL, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, error, NULL, NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: fgetxattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_fgetxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t * dict,</div><div class='del'>-                         dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -555,38 +536,30 @@ int32_t ec_fgetxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FGETXATTR, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (dict != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (dict != NULL) {</div><div class='ctx'>                 cbk-&gt;dict = dict_ref(dict);</div><div class='del'>-                if (cbk-&gt;dict == NULL)</div><div class='del'>-                {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                            EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                            "Failed to reference a "</div><div class='del'>-                            "dictionary.");</div><div class='add'>+                if (cbk-&gt;dict == NULL) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                           "Failed to reference a "</div><div class='add'>+                           "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -596,8 +569,7 @@ int32_t ec_fgetxattr_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -605,7 +577,7 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_wind_fgetxattr (ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='add'>+ec_wind_fgetxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -615,24 +587,23 @@ ec_wind_fgetxattr (ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_fgetxattr_cbk_t func, void *data,</div><div class='del'>-              fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+ec_fgetxattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+             int32_t minimum, fop_fgetxattr_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+             const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fgetxattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fgetxattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FGETXATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FGETXATTR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_FGETXATTR,</div><div class='del'>-                               EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='del'>-                               ec_wind_fgetxattr, ec_manager_getxattr,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(</div><div class='add'>+        frame, this, GF_FOP_FGETXATTR, EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='add'>+        ec_wind_fgetxattr, ec_manager_getxattr, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -642,10 +613,9 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -653,8 +623,8 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (name != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(name);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY, "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -662,9 +632,9 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -674,22 +644,21 @@ ec_fgetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fop != NULL) {</div><div class='del'>-        ec_manager (fop, error);</div><div class='add'>+        ec_manager(fop, error);</div><div class='ctx'>     } else {</div><div class='del'>-        func (frame, NULL, this, -1, error, NULL, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, error, NULL, NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: open */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_open(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                        ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_open(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-    if (dst-&gt;fd != src-&gt;fd)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_FD_MISMATCH, "Mismatching fd in answers "</div><div class='del'>-                                             "of 'GF_FOP_OPEN': %p &lt;-&gt; %p",</div><div class='add'>+    if (dst-&gt;fd != src-&gt;fd) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_FD_MISMATCH,</div><div class='add'>+               "Mismatching fd in answers "</div><div class='add'>+               "of 'GF_FOP_OPEN': %p &lt;-&gt; %p",</div><div class='ctx'>                dst-&gt;fd, src-&gt;fd);</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='hunk'>@@ -698,12 +667,12 @@ int32_t ec_combine_open(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_open_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, fd_t * fd,</div><div class='del'>-                    dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -713,36 +682,31 @@ int32_t ec_open_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_OPEN, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (fd != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (fd != NULL) {</div><div class='ctx'>                 cbk-&gt;fd = fd_ref(fd);</div><div class='del'>-                if (cbk-&gt;fd == NULL)</div><div class='del'>-                {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                            EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                     "file descriptor.");</div><div class='add'>+                if (cbk-&gt;fd == NULL) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                           "Failed to reference a "</div><div class='add'>+                           "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -750,20 +714,19 @@ int32_t ec_open_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>         ec_combine(cbk, ec_combine_open);</div><div class='ctx'> </div><div class='del'>-        ec_update_fd_status (fd, this, idx, op_ret);</div><div class='del'>-</div><div class='add'>+        ec_update_fd_status(fd, this, idx, op_ret);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_open(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_open(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -772,10 +735,10 @@ void ec_wind_open(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;int32, fop-&gt;fd, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_open_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                             int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                             dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_open_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = cookie;</div><div class='ctx'>     int32_t error = 0;</div><div class='hunk'>@@ -792,14 +755,14 @@ int32_t ec_open_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_open(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='del'>-    ec_fd_t * ctx;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='add'>+    ec_fd_t *ctx;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             LOCK(&amp;fop-&gt;fd-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -833,7 +796,7 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             fop-&gt;uint32 = fop-&gt;int32 &amp; O_TRUNC;</div><div class='ctx'>             fop-&gt;int32 &amp;= ~(O_APPEND | O_TRUNC);</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -864,8 +827,8 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                     if (fop-&gt;uint32 != 0) {</div><div class='ctx'>                         ec_sleep(fop);</div><div class='ctx'>                         ec_ftruncate(fop-&gt;req_frame, fop-&gt;xl, cbk-&gt;mask,</div><div class='del'>-                                     fop-&gt;minimum, ec_open_truncate_cbk,</div><div class='del'>-                                     fop, cbk-&gt;fd, 0, NULL);</div><div class='add'>+                                     fop-&gt;minimum, ec_open_truncate_cbk, fop,</div><div class='add'>+                                     cbk-&gt;fd, 0, NULL);</div><div class='ctx'>                     }</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='hunk'>@@ -877,8 +840,7 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.open != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.open != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.open(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                cbk-&gt;op_errno, cbk-&gt;fd, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -891,8 +853,7 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.open != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.open != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.open(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -900,23 +861,23 @@ int32_t ec_manager_open(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-             int32_t minimum, fop_open_cbk_t func, void * data, loc_t * loc,</div><div class='del'>-             int32_t flags, fd_t * fd, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_open(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+        fop_open_cbk_t func, void *data, loc_t *loc, int32_t flags, fd_t *fd,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .open = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.open = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(OPEN) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(OPEN) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -933,8 +894,8 @@ void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -942,9 +903,9 @@ void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -952,9 +913,9 @@ void ec_open(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -972,13 +933,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: readlink */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_readlink(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                            ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_readlink(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='ctx'>     if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, 1)) {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_IATT_MISMATCH, "Mismatching iatt in "</div><div class='del'>-                                             "answers of 'GF_FOP_READLINK'");</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH,</div><div class='add'>+               "Mismatching iatt in "</div><div class='add'>+               "answers of 'GF_FOP_READLINK'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -987,13 +948,13 @@ int32_t ec_combine_readlink(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, const char *path,</div><div class='del'>-                 struct iatt *buf, dict_t *xdata)</div><div class='add'>+ec_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t   *fop = NULL;</div><div class='del'>-    ec_cbk_data_t   *cbk = NULL;</div><div class='del'>-    int32_t         idx  = (int32_t)(uintptr_t)cookie;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1002,23 +963,23 @@ ec_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-    cbk = ec_cbk_data_allocate (frame, this, fop, fop-&gt;id,</div><div class='del'>-                                idx, op_ret, op_errno);</div><div class='add'>+    cbk = ec_cbk_data_allocate(frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='add'>+                               op_errno);</div><div class='ctx'>     if (cbk) {</div><div class='del'>-            if (xdata)</div><div class='del'>-                    cbk-&gt;xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-            if (cbk-&gt;op_ret &gt;= 0) {</div><div class='del'>-                    cbk-&gt;iatt[0] = *buf;</div><div class='del'>-                    cbk-&gt;str = gf_strdup (path);</div><div class='del'>-                    if (!cbk-&gt;str) {</div><div class='del'>-                            ec_cbk_set_error(cbk, ENOMEM, _gf_true);</div><div class='del'>-                    }</div><div class='add'>+        if (xdata)</div><div class='add'>+            cbk-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+        if (cbk-&gt;op_ret &gt;= 0) {</div><div class='add'>+            cbk-&gt;iatt[0] = *buf;</div><div class='add'>+            cbk-&gt;str = gf_strdup(path);</div><div class='add'>+            if (!cbk-&gt;str) {</div><div class='add'>+                ec_cbk_set_error(cbk, ENOMEM, _gf_true);</div><div class='ctx'>             }</div><div class='del'>-            ec_combine (cbk, NULL);</div><div class='add'>+        }</div><div class='add'>+        ec_combine(cbk, NULL);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='hunk'>@@ -1028,7 +989,8 @@ out:</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_readlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_readlink(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1037,21 +999,21 @@ void ec_wind_readlink(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;size, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_readlink(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='del'>-            ec_lock_prepare_inode (fop, &amp;fop-&gt;loc[0], EC_QUERY_INFO, 0,</div><div class='del'>-                                   LLONG_MAX);</div><div class='del'>-            ec_lock (fop);</div><div class='add'>+            ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0], EC_QUERY_INFO, 0,</div><div class='add'>+                                  LLONG_MAX);</div><div class='add'>+            ec_lock(fop);</div><div class='ctx'>             return EC_STATE_DISPATCH;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='del'>-            ec_dispatch_one (fop);</div><div class='add'>+            ec_dispatch_one(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='hunk'>@@ -1068,11 +1030,11 @@ int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_REPORT:</div><div class='ctx'>             cbk = fop-&gt;answer;</div><div class='del'>-            GF_ASSERT (cbk);</div><div class='add'>+            GF_ASSERT(cbk);</div><div class='ctx'>             if (fop-&gt;cbks.readlink != NULL) {</div><div class='del'>-                fop-&gt;cbks.readlink (fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='del'>-                                    cbk-&gt;op_errno, cbk-&gt;str, &amp;cbk-&gt;iatt[0],</div><div class='del'>-                                    cbk-&gt;xdata);</div><div class='add'>+                fop-&gt;cbks.readlink(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                   cbk-&gt;op_errno, cbk-&gt;str, &amp;cbk-&gt;iatt[0],</div><div class='add'>+                                   cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='hunk'>@@ -1083,8 +1045,8 @@ int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_PREPARE_ANSWER:</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             if (fop-&gt;cbks.readlink != NULL) {</div><div class='del'>-                fop-&gt;cbks.readlink(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                                   fop-&gt;error, NULL, NULL, NULL);</div><div class='add'>+                fop-&gt;cbks.readlink(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='add'>+                                   NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='ctx'>             return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='hunk'>@@ -1100,32 +1062,31 @@ int32_t ec_manager_readlink(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_readlink_cbk_t func, void * data,</div><div class='del'>-                 loc_t * loc, size_t size, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_readlink(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_readlink_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+            size_t size, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .readlink = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.readlink = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(READLINK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(READLINK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_READLINK,</div><div class='del'>-                               EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='del'>-                               ec_wind_readlink, ec_manager_readlink, callback,</div><div class='del'>-                               data);</div><div class='add'>+    fop = ec_fop_data_allocate(</div><div class='add'>+        frame, this, GF_FOP_READLINK, EC_FLAG_LOCK_SHARED, target, minimum,</div><div class='add'>+        ec_wind_readlink, ec_manager_readlink, callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1134,8 +1095,8 @@ void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1143,9 +1104,9 @@ void ec_readlink(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1163,7 +1124,8 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: readv */</div><div class='ctx'> </div><div class='del'>-int32_t ec_readv_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk)</div><div class='add'>+int32_t</div><div class='add'>+ec_readv_rebuild(ec_t *ec, ec_fop_data_t *fop, ec_cbk_data_t *cbk)</div><div class='ctx'> {</div><div class='ctx'>     struct iovec vector[1];</div><div class='ctx'>     ec_cbk_data_t *ans = NULL;</div><div class='hunk'>@@ -1256,22 +1218,21 @@ out:</div><div class='ctx'>     return err;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_readv(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                         ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_readv(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-    if (!ec_vector_compare(dst-&gt;vector, dst-&gt;int32, src-&gt;vector, src-&gt;int32))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_VECTOR_MISMATCH, "Mismatching vector in "</div><div class='del'>-                                             "answers of 'GF_FOP_READ'");</div><div class='add'>+    if (!ec_vector_compare(dst-&gt;vector, dst-&gt;int32, src-&gt;vector, src-&gt;int32)) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_VECTOR_MISMATCH,</div><div class='add'>+               "Mismatching vector in "</div><div class='add'>+               "answers of 'GF_FOP_READ'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, 1)) {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_IATT_MISMATCH, "Mismatching iatt in "</div><div class='del'>-                                             "answers of 'GF_FOP_READ'");</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH,</div><div class='add'>+               "Mismatching iatt in "</div><div class='add'>+               "answers of 'GF_FOP_READ'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1279,14 +1240,14 @@ int32_t ec_combine_readv(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iovec * vector,</div><div class='del'>-                     int32_t count, struct iatt * stbuf,</div><div class='del'>-                     struct iobref * iobref, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iovec *vector, int32_t count,</div><div class='add'>+             struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -1296,8 +1257,8 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_READ, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='hunk'>@@ -1308,9 +1269,9 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>             if (count &gt; 0) {</div><div class='ctx'>                 cbk-&gt;vector = iov_dup(vector, count);</div><div class='ctx'>                 if (cbk-&gt;vector == NULL) {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                            EC_MSG_NO_MEMORY, "Failed to duplicate a "</div><div class='del'>-                                                     "vector list.");</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                           "Failed to duplicate a "</div><div class='add'>+                           "vector list.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='hunk'>@@ -1322,9 +1283,9 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>             if (iobref != NULL) {</div><div class='ctx'>                 cbk-&gt;buffers = iobref_ref(iobref);</div><div class='ctx'>                 if (cbk-&gt;buffers == NULL) {</div><div class='del'>-                    gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                            EC_MSG_BUF_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                     "buffer.");</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_BUF_REF_FAIL,</div><div class='add'>+                           "Failed to reference a "</div><div class='add'>+                           "buffer.");</div><div class='ctx'> </div><div class='ctx'>                     goto out;</div><div class='ctx'>                 }</div><div class='hunk'>@@ -1333,9 +1294,9 @@ int32_t ec_readv_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>         if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>             if (cbk-&gt;xdata == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -1356,7 +1317,8 @@ out:</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_readv(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_readv(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1365,12 +1327,12 @@ void ec_wind_readv(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;size, fop-&gt;offset, fop-&gt;uint32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_readv(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             fop-&gt;user_size = fop-&gt;size;</div><div class='ctx'>             fop-&gt;head = ec_adjust_offset_down(fop-&gt;xl-&gt;private, &amp;fop-&gt;offset,</div><div class='hunk'>@@ -1378,7 +1340,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             fop-&gt;size += fop-&gt;head;</div><div class='ctx'>             ec_adjust_size_up(fop-&gt;xl-&gt;private, &amp;fop-&gt;size, _gf_true);</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, fop-&gt;offset,</div><div class='hunk'>@@ -1397,8 +1359,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             if (cbk != NULL) {</div><div class='ctx'>                 int32_t err;</div><div class='ctx'> </div><div class='del'>-                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 1,</div><div class='del'>-                                cbk-&gt;count);</div><div class='add'>+                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 1, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                 err = ec_readv_rebuild(fop-&gt;xl-&gt;private, fop, cbk);</div><div class='ctx'>                 if (err != 0) {</div><div class='hunk'>@@ -1413,8 +1374,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.readv != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.readv != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.readv(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                 cbk-&gt;op_errno, cbk-&gt;vector, cbk-&gt;int32,</div><div class='ctx'>                                 &amp;cbk-&gt;iatt[0], cbk-&gt;buffers, cbk-&gt;xdata);</div><div class='hunk'>@@ -1429,8 +1389,7 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.readv != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.readv != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.readv(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                 NULL, 0, NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1450,31 +1409,31 @@ int32_t ec_manager_readv(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_readv_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-              size_t size, off_t offset, uint32_t flags, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_readv(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_readv_cbk_t func, void *data, fd_t *fd, size_t size, off_t offset,</div><div class='add'>+         uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .readv = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.readv = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(READ) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(READ) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_READ, EC_FLAG_LOCK_SHARED,</div><div class='del'>-                               target, minimum, ec_wind_readv,</div><div class='del'>-                               ec_manager_readv, callback, data);</div><div class='add'>+                               target, minimum, ec_wind_readv, ec_manager_readv,</div><div class='add'>+                               callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1488,9 +1447,9 @@ void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1498,9 +1457,9 @@ void ec_readv(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1518,9 +1477,9 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: seek */</div><div class='ctx'> </div><div class='del'>-int32_t ec_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, off_t offset,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL;</div><div class='hunk'>@@ -1534,8 +1493,8 @@ int32_t ec_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_SEEK, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='hunk'>@@ -1563,7 +1522,8 @@ out:</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_seek(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_seek(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1572,126 +1532,128 @@ void ec_wind_seek(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;offset, fop-&gt;seek, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_seek(ec_fop_data_t *fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_seek(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_cbk_data_t *cbk;</div><div class='ctx'>     size_t size;</div><div class='ctx'> </div><div class='ctx'>     switch (state) {</div><div class='del'>-    case EC_STATE_INIT:</div><div class='del'>-        fop-&gt;user_size = fop-&gt;offset;</div><div class='del'>-        fop-&gt;head = ec_adjust_offset_down(fop-&gt;xl-&gt;private, &amp;fop-&gt;offset,</div><div class='del'>-                                          _gf_true);</div><div class='add'>+        case EC_STATE_INIT:</div><div class='add'>+            fop-&gt;user_size = fop-&gt;offset;</div><div class='add'>+            fop-&gt;head = ec_adjust_offset_down(fop-&gt;xl-&gt;private, &amp;fop-&gt;offset,</div><div class='add'>+                                              _gf_true);</div><div class='ctx'> </div><div class='del'>-    /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_LOCK:</div><div class='del'>-        ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, fop-&gt;offset, LLONG_MAX);</div><div class='del'>-        ec_lock(fop);</div><div class='add'>+        case EC_STATE_LOCK:</div><div class='add'>+            ec_lock_prepare_fd(fop, fop-&gt;fd, EC_QUERY_INFO, fop-&gt;offset,</div><div class='add'>+                               LLONG_MAX);</div><div class='add'>+            ec_lock(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_DISPATCH;</div><div class='add'>+            return EC_STATE_DISPATCH;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_DISPATCH:</div><div class='del'>-        /* This shouldn't fail because we have the inode locked. */</div><div class='del'>-        GF_ASSERT(ec_get_inode_size(fop, fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='del'>-                                    &amp;size));</div><div class='add'>+        case EC_STATE_DISPATCH:</div><div class='add'>+            /* This shouldn't fail because we have the inode locked. */</div><div class='add'>+            GF_ASSERT(</div><div class='add'>+                ec_get_inode_size(fop, fop-&gt;locks[0].lock-&gt;loc.inode, &amp;size));</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;user_size &gt;= size) {</div><div class='del'>-            ec_fop_set_error(fop, ENXIO);</div><div class='add'>+            if (fop-&gt;user_size &gt;= size) {</div><div class='add'>+                ec_fop_set_error(fop, ENXIO);</div><div class='ctx'> </div><div class='del'>-            return EC_STATE_REPORT;</div><div class='del'>-        }</div><div class='add'>+                return EC_STATE_REPORT;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        ec_dispatch_one(fop);</div><div class='add'>+            ec_dispatch_one(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_PREPARE_ANSWER;</div><div class='add'>+            return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_PREPARE_ANSWER:</div><div class='del'>-        if (ec_dispatch_one_retry(fop, &amp;cbk)) {</div><div class='del'>-            return EC_STATE_DISPATCH;</div><div class='del'>-        }</div><div class='del'>-        if ((cbk != NULL) &amp;&amp; (cbk-&gt;op_ret &gt;= 0)) {</div><div class='del'>-            ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+        case EC_STATE_PREPARE_ANSWER:</div><div class='add'>+            if (ec_dispatch_one_retry(fop, &amp;cbk)) {</div><div class='add'>+                return EC_STATE_DISPATCH;</div><div class='add'>+            }</div><div class='add'>+            if ((cbk != NULL) &amp;&amp; (cbk-&gt;op_ret &gt;= 0)) {</div><div class='add'>+                ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='del'>-            /* This shouldn't fail because we have the inode locked. */</div><div class='del'>-            GF_ASSERT(ec_get_inode_size(fop, fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='del'>-                                        &amp;size));</div><div class='add'>+                /* This shouldn't fail because we have the inode locked. */</div><div class='add'>+                GF_ASSERT(ec_get_inode_size(fop, fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='add'>+                                            &amp;size));</div><div class='ctx'> </div><div class='del'>-            cbk-&gt;offset *= ec-&gt;fragments;</div><div class='del'>-            if (cbk-&gt;offset &lt; fop-&gt;user_size) {</div><div class='del'>-                cbk-&gt;offset = fop-&gt;user_size;</div><div class='del'>-            }</div><div class='del'>-            if (cbk-&gt;offset &gt; size) {</div><div class='del'>-                cbk-&gt;offset = size;</div><div class='add'>+                cbk-&gt;offset *= ec-&gt;fragments;</div><div class='add'>+                if (cbk-&gt;offset &lt; fop-&gt;user_size) {</div><div class='add'>+                    cbk-&gt;offset = fop-&gt;user_size;</div><div class='add'>+                }</div><div class='add'>+                if (cbk-&gt;offset &gt; size) {</div><div class='add'>+                    cbk-&gt;offset = size;</div><div class='add'>+                }</div><div class='ctx'>             }</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_REPORT;</div><div class='add'>+            return EC_STATE_REPORT;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_REPORT:</div><div class='del'>-        cbk = fop-&gt;answer;</div><div class='add'>+        case EC_STATE_REPORT:</div><div class='add'>+            cbk = fop-&gt;answer;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(cbk != NULL);</div><div class='add'>+            GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;cbks.seek != NULL) {</div><div class='del'>-            fop-&gt;cbks.seek(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='del'>-                           cbk-&gt;op_errno, cbk-&gt;offset, cbk-&gt;xdata);</div><div class='del'>-        }</div><div class='add'>+            if (fop-&gt;cbks.seek != NULL) {</div><div class='add'>+                fop-&gt;cbks.seek(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                               cbk-&gt;op_errno, cbk-&gt;offset, cbk-&gt;xdata);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_INIT:</div><div class='del'>-    case -EC_STATE_LOCK:</div><div class='del'>-    case -EC_STATE_DISPATCH:</div><div class='del'>-    case -EC_STATE_PREPARE_ANSWER:</div><div class='del'>-    case -EC_STATE_REPORT:</div><div class='del'>-        GF_ASSERT(fop-&gt;error != 0);</div><div class='add'>+        case -EC_STATE_INIT:</div><div class='add'>+        case -EC_STATE_LOCK:</div><div class='add'>+        case -EC_STATE_DISPATCH:</div><div class='add'>+        case -EC_STATE_PREPARE_ANSWER:</div><div class='add'>+        case -EC_STATE_REPORT:</div><div class='add'>+            GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;cbks.seek != NULL) {</div><div class='del'>-            fop-&gt;cbks.seek(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error, 0,</div><div class='del'>-                           NULL);</div><div class='del'>-        }</div><div class='add'>+            if (fop-&gt;cbks.seek != NULL) {</div><div class='add'>+                fop-&gt;cbks.seek(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error, 0,</div><div class='add'>+                               NULL);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_LOCK_REUSE:</div><div class='del'>-    case EC_STATE_LOCK_REUSE:</div><div class='del'>-        ec_lock_reuse(fop);</div><div class='add'>+        case -EC_STATE_LOCK_REUSE:</div><div class='add'>+        case EC_STATE_LOCK_REUSE:</div><div class='add'>+            ec_lock_reuse(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_UNLOCK;</div><div class='add'>+            return EC_STATE_UNLOCK;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_UNLOCK:</div><div class='del'>-    case EC_STATE_UNLOCK:</div><div class='del'>-        ec_unlock(fop);</div><div class='add'>+        case -EC_STATE_UNLOCK:</div><div class='add'>+        case EC_STATE_UNLOCK:</div><div class='add'>+            ec_unlock(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'> </div><div class='del'>-    default:</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s", state,</div><div class='del'>-                ec_fop_name(fop-&gt;id));</div><div class='add'>+        default:</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, 0, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_seek(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_seek_cbk_t func, void *data, fd_t *fd,</div><div class='del'>-              off_t offset, gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_seek(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+        fop_seek_cbk_t func, void *data, fd_t *fd, off_t offset,</div><div class='add'>+        gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .seek = func };</div><div class='add'>+    ec_cbk_t callback = {.seek = func};</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = EIO;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(SEEK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(SEEK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_SEEK, EC_FLAG_LOCK_SHARED,</div><div class='del'>-                               target, minimum, ec_wind_seek,</div><div class='del'>-                               ec_manager_seek, callback, data);</div><div class='add'>+                               target, minimum, ec_wind_seek, ec_manager_seek,</div><div class='add'>+                               callback, data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1720,13 +1682,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: stat */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_stat(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                        ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_stat(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='ctx'>     if (!ec_iatt_combine(fop, dst-&gt;iatt, src-&gt;iatt, 1)) {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_IATT_MISMATCH, "Mismatching iatt in "</div><div class='del'>-                                             "answers of 'GF_FOP_STAT'");</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_IATT_MISMATCH,</div><div class='add'>+               "Mismatching iatt in "</div><div class='add'>+               "answers of 'GF_FOP_STAT'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1734,12 +1696,12 @@ int32_t ec_combine_stat(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_stat_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt * buf,</div><div class='del'>-                    dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -1749,28 +1711,23 @@ int32_t ec_stat_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_STAT, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (buf != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (buf != NULL) {</div><div class='ctx'>                 cbk-&gt;iatt[0] = *buf;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -1780,15 +1737,15 @@ int32_t ec_stat_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_stat(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_stat(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1797,12 +1754,12 @@ void ec_wind_stat(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_stat(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             if (fop-&gt;fd == NULL) {</div><div class='hunk'>@@ -1825,8 +1782,7 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             if (cbk != NULL) {</div><div class='ctx'>                 if (cbk-&gt;iatt[0].ia_type == IA_IFREG) {</div><div class='del'>-                    ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 1,</div><div class='del'>-                                    cbk-&gt;count);</div><div class='add'>+                    ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 1, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                     /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                     GF_ASSERT(ec_get_inode_size(fop,</div><div class='hunk'>@@ -1842,18 +1798,13 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_STAT)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.stat != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_STAT) {</div><div class='add'>+                if (fop-&gt;cbks.stat != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.stat(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                    cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fstat != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fstat != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fstat(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                     cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -1868,18 +1819,13 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_STAT)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.stat != NULL)</div><div class='del'>-                {</div><div class='del'>-                    fop-&gt;cbks.stat(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                                   fop-&gt;error, NULL, NULL);</div><div class='add'>+            if (fop-&gt;id == GF_FOP_STAT) {</div><div class='add'>+                if (fop-&gt;cbks.stat != NULL) {</div><div class='add'>+                    fop-&gt;cbks.stat(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='add'>+                                   NULL, NULL);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fstat != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fstat != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fstat(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                     fop-&gt;error, NULL, NULL);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -1900,23 +1846,22 @@ int32_t ec_manager_stat(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE, "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-             int32_t minimum, fop_stat_cbk_t func, void * data, loc_t * loc,</div><div class='del'>-             dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_stat(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+        fop_stat_cbk_t func, void *data, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .stat = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.stat = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(STAT) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(STAT) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1931,8 +1876,8 @@ void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL, "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1940,9 +1885,9 @@ void ec_stat(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1960,12 +1905,12 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: fstat */</div><div class='ctx'> </div><div class='del'>-int32_t ec_fstat_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt * buf,</div><div class='del'>-                     dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -1975,28 +1920,23 @@ int32_t ec_fstat_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSTAT, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (buf != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (buf != NULL) {</div><div class='ctx'>                 cbk-&gt;iatt[0] = *buf;</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                                 "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -2006,15 +1946,15 @@ int32_t ec_fstat_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fstat(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fstat(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -2023,15 +1963,15 @@ void ec_wind_fstat(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_fstat_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-              dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_fstat(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+         fop_fstat_cbk_t func, void *data, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fstat = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fstat = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FSTAT) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FSTAT) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -2049,9 +1989,9 @@ void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -2059,9 +1999,9 @@ void ec_fstat(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL, "Failed to reference a "</div><div class='del'>-                                             "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-inode-write.c b/xlators/cluster/ec/src/ec-inode-write.c<br/>index c9fbd3cf7df..ffdac632683 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-inode-write.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-inode-write.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-inode-write.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-inode-write.c</a></div><div class='hunk'>@@ -21,56 +21,55 @@</div><div class='ctx'> #include "ec-mem-types.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_update_writev_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+ec_update_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t *fop    = cookie;</div><div class='del'>-    ec_cbk_data_t *cbk    = NULL;</div><div class='add'>+    ec_fop_data_t *fop = cookie;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     ec_fop_data_t *parent = fop-&gt;parent;</div><div class='del'>-    int           i       = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='ctx'>     ec_trace("UPDATE_WRITEV_CBK", cookie, "ret=%d, errno=%d, parent-fop=%s",</div><div class='del'>-             op_ret, op_errno, ec_fop_name (parent-&gt;id));</div><div class='add'>+             op_ret, op_errno, ec_fop_name(parent-&gt;id));</div><div class='ctx'> </div><div class='ctx'>     if (op_ret &lt; 0) {</div><div class='del'>-            ec_fop_set_error (parent, op_errno);</div><div class='del'>-            goto out;</div><div class='add'>+        ec_fop_set_error(parent, op_errno);</div><div class='add'>+        goto out;</div><div class='ctx'>     }</div><div class='del'>-    cbk = ec_cbk_data_allocate (parent-&gt;frame, this, parent,</div><div class='del'>-                                parent-&gt;id, 0, op_ret, op_errno);</div><div class='add'>+    cbk = ec_cbk_data_allocate(parent-&gt;frame, this, parent, parent-&gt;id, 0,</div><div class='add'>+                               op_ret, op_errno);</div><div class='ctx'>     if (!cbk) {</div><div class='del'>-            ec_fop_set_error (parent, ENOMEM);</div><div class='del'>-            goto out;</div><div class='add'>+        ec_fop_set_error(parent, ENOMEM);</div><div class='add'>+        goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (xdata)</div><div class='del'>-            cbk-&gt;xdata = dict_ref (xdata);</div><div class='add'>+        cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='ctx'>     if (prebuf)</div><div class='del'>-            cbk-&gt;iatt[i++] = *prebuf;</div><div class='add'>+        cbk-&gt;iatt[i++] = *prebuf;</div><div class='ctx'> </div><div class='ctx'>     if (postbuf)</div><div class='del'>-            cbk-&gt;iatt[i++] = *postbuf;</div><div class='add'>+        cbk-&gt;iatt[i++] = *postbuf;</div><div class='ctx'> </div><div class='del'>-    LOCK (&amp;parent-&gt;lock);</div><div class='add'>+    LOCK(&amp;parent-&gt;lock);</div><div class='ctx'>     {</div><div class='del'>-            parent-&gt;good &amp;= fop-&gt;good;</div><div class='add'>+        parent-&gt;good &amp;= fop-&gt;good;</div><div class='ctx'> </div><div class='del'>-            if (gf_bits_count (parent-&gt;good) &lt; parent-&gt;minimum) {</div><div class='del'>-                    __ec_fop_set_error (parent, EIO);</div><div class='del'>-            } else if (fop-&gt;error == 0 &amp;&amp; parent-&gt;answer == NULL) {</div><div class='del'>-                    parent-&gt;answer = cbk;</div><div class='del'>-            }</div><div class='add'>+        if (gf_bits_count(parent-&gt;good) &lt; parent-&gt;minimum) {</div><div class='add'>+            __ec_fop_set_error(parent, EIO);</div><div class='add'>+        } else if (fop-&gt;error == 0 &amp;&amp; parent-&gt;answer == NULL) {</div><div class='add'>+            parent-&gt;answer = cbk;</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='del'>-    UNLOCK (&amp;parent-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;parent-&gt;lock);</div><div class='ctx'> out:</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset,</div><div class='del'>-                        size_t size)</div><div class='add'>+int32_t</div><div class='add'>+ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset, size_t size)</div><div class='ctx'> {</div><div class='ctx'>     struct iobref *iobref = NULL;</div><div class='ctx'>     struct iobuf *iobuf = NULL;</div><div class='hunk'>@@ -94,9 +93,8 @@ int32_t ec_update_write(ec_fop_data_t *fop, uintptr_t mask, off_t offset,</div><div class='ctx'>     vector.iov_len = size;</div><div class='ctx'>     memset(vector.iov_base, 0, vector.iov_len);</div><div class='ctx'> </div><div class='del'>-    ec_writev(fop-&gt;frame, fop-&gt;xl, mask, fop-&gt;minimum,</div><div class='del'>-              ec_update_writev_cbk, NULL, fop-&gt;fd, &amp;vector, 1,</div><div class='del'>-              offset, 0, iobref, NULL);</div><div class='add'>+    ec_writev(fop-&gt;frame, fop-&gt;xl, mask, fop-&gt;minimum, ec_update_writev_cbk,</div><div class='add'>+              NULL, fop-&gt;fd, &amp;vector, 1, offset, 0, iobref, NULL);</div><div class='ctx'> </div><div class='ctx'>     err = 0;</div><div class='ctx'> </div><div class='hunk'>@@ -112,62 +110,63 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_inode_write_cbk (call_frame_t *frame, xlator_t *this, void *cookie,</div><div class='del'>-                    int op_ret, int op_errno, struct iatt *prestat,</div><div class='del'>-                    struct iatt *poststat, dict_t *xdata)</div><div class='add'>+ec_inode_write_cbk(call_frame_t *frame, xlator_t *this, void *cookie,</div><div class='add'>+                   int op_ret, int op_errno, struct iatt *prestat,</div><div class='add'>+                   struct iatt *poststat, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = NULL;</div><div class='del'>-        ec_cbk_data_t *cbk = NULL;</div><div class='del'>-        int           i    = 0;</div><div class='del'>-        int           idx  = 0;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int idx = 0;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame-&gt;local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        fop = frame-&gt;local;</div><div class='del'>-        idx = (int32_t)(uintptr_t) cookie;</div><div class='add'>+    fop = frame-&gt;local;</div><div class='add'>+    idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='del'>-        ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-                 frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-        cbk = ec_cbk_data_allocate (frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='del'>-                                    op_errno);</div><div class='del'>-        if (!cbk)</div><div class='del'>-                goto out;</div><div class='add'>+    cbk = ec_cbk_data_allocate(frame, this, fop, fop-&gt;id, idx, op_ret,</div><div class='add'>+                               op_errno);</div><div class='add'>+    if (!cbk)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                cbk-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        cbk-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (prestat)</div><div class='del'>-                cbk-&gt;iatt[i++] = *prestat;</div><div class='add'>+    if (prestat)</div><div class='add'>+        cbk-&gt;iatt[i++] = *prestat;</div><div class='ctx'> </div><div class='del'>-        if (poststat)</div><div class='del'>-                cbk-&gt;iatt[i++] = *poststat;</div><div class='add'>+    if (poststat)</div><div class='add'>+        cbk-&gt;iatt[i++] = *poststat;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (cbk)</div><div class='del'>-                ec_combine (cbk, ec_combine_write);</div><div class='add'>+    if (cbk)</div><div class='add'>+        ec_combine(cbk, ec_combine_write);</div><div class='ctx'> </div><div class='del'>-        if (fop)</div><div class='del'>-                ec_complete (fop);</div><div class='del'>-        return 0;</div><div class='add'>+    if (fop)</div><div class='add'>+        ec_complete(fop);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> /* FOP: removexattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_removexattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                            xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                            dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   NULL, NULL, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, NULL,</div><div class='add'>+                              xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_removexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_removexattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -177,127 +176,123 @@ void ec_wind_removexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-              int32_t op_errno, dict_t *xdata)</div><div class='add'>+ec_xattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ec_fop_data_t *fop = cookie;</div><div class='del'>-        switch (fop-&gt;id) {</div><div class='add'>+    ec_fop_data_t *fop = cookie;</div><div class='add'>+    switch (fop-&gt;id) {</div><div class='ctx'>         case GF_FOP_SETXATTR:</div><div class='del'>-                if (fop-&gt;cbks.setxattr) {</div><div class='del'>-                        fop-&gt;cbks.setxattr (frame, cookie, this, op_ret,</div><div class='del'>-                                            op_errno, xdata);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (fop-&gt;cbks.setxattr) {</div><div class='add'>+                fop-&gt;cbks.setxattr(frame, cookie, this, op_ret, op_errno,</div><div class='add'>+                                   xdata);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_REMOVEXATTR:</div><div class='del'>-                if (fop-&gt;cbks.removexattr) {</div><div class='del'>-                        fop-&gt;cbks.removexattr (frame, cookie, this, op_ret,</div><div class='del'>-                                               op_errno, xdata);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (fop-&gt;cbks.removexattr) {</div><div class='add'>+                fop-&gt;cbks.removexattr(frame, cookie, this, op_ret, op_errno,</div><div class='add'>+                                      xdata);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-                if (fop-&gt;cbks.fsetxattr) {</div><div class='del'>-                        fop-&gt;cbks.fsetxattr (frame, cookie, this, op_ret,</div><div class='del'>-                                             op_errno, xdata);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (fop-&gt;cbks.fsetxattr) {</div><div class='add'>+                fop-&gt;cbks.fsetxattr(frame, cookie, this, op_ret, op_errno,</div><div class='add'>+                                    xdata);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FREMOVEXATTR:</div><div class='del'>-                if (fop-&gt;cbks.fremovexattr) {</div><div class='del'>-                        fop-&gt;cbks.fremovexattr (frame, cookie, this, op_ret,</div><div class='del'>-                                                op_errno, xdata);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            if (fop-&gt;cbks.fremovexattr) {</div><div class='add'>+                fop-&gt;cbks.fremovexattr(frame, cookie, this, op_ret, op_errno,</div><div class='add'>+                                       xdata);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_manager_xattr (ec_fop_data_t *fop, int32_t state)</div><div class='add'>+ec_manager_xattr(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-        switch (state) {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='del'>-                if (fop-&gt;fd == NULL) {</div><div class='del'>-                        ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0],</div><div class='del'>-                                              EC_UPDATE_META | EC_QUERY_INFO,</div><div class='del'>-                                              0, LLONG_MAX);</div><div class='del'>-                } else {</div><div class='del'>-                        ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='del'>-                                           EC_UPDATE_META | EC_QUERY_INFO,</div><div class='del'>-                                           0, LLONG_MAX);</div><div class='del'>-                }</div><div class='del'>-                ec_lock(fop);</div><div class='add'>+            if (fop-&gt;fd == NULL) {</div><div class='add'>+                ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0],</div><div class='add'>+                                      EC_UPDATE_META | EC_QUERY_INFO, 0,</div><div class='add'>+                                      LLONG_MAX);</div><div class='add'>+            } else {</div><div class='add'>+                ec_lock_prepare_fd(fop, fop-&gt;fd, EC_UPDATE_META | EC_QUERY_INFO,</div><div class='add'>+                                   0, LLONG_MAX);</div><div class='add'>+            }</div><div class='add'>+            ec_lock(fop);</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_DISPATCH;</div><div class='add'>+            return EC_STATE_DISPATCH;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='del'>-                ec_dispatch_all(fop);</div><div class='add'>+            ec_dispatch_all(fop);</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_PREPARE_ANSWER;</div><div class='add'>+            return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_PREPARE_ANSWER:</div><div class='del'>-                ec_fop_prepare_answer(fop, _gf_false);</div><div class='add'>+            ec_fop_prepare_answer(fop, _gf_false);</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_REPORT;</div><div class='add'>+            return EC_STATE_REPORT;</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_REPORT:</div><div class='del'>-                cbk = fop-&gt;answer;</div><div class='add'>+            cbk = fop-&gt;answer;</div><div class='ctx'> </div><div class='del'>-                GF_ASSERT(cbk != NULL);</div><div class='add'>+            GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-                ec_xattr_cbk (fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='del'>-                              cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='add'>+            ec_xattr_cbk(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                         cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-                    return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_INIT:</div><div class='ctx'>         case -EC_STATE_LOCK:</div><div class='ctx'>         case -EC_STATE_DISPATCH:</div><div class='ctx'>         case -EC_STATE_PREPARE_ANSWER:</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='del'>-                GF_ASSERT(fop-&gt;error != 0);</div><div class='add'>+            GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-                ec_xattr_cbk (fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='del'>-                              NULL);</div><div class='add'>+            ec_xattr_cbk(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error, NULL);</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_LOCK_REUSE:</div><div class='ctx'>         case EC_STATE_LOCK_REUSE:</div><div class='del'>-                ec_lock_reuse(fop);</div><div class='add'>+            ec_lock_reuse(fop);</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_UNLOCK;</div><div class='add'>+            return EC_STATE_UNLOCK;</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_UNLOCK:</div><div class='ctx'>         case EC_STATE_UNLOCK:</div><div class='del'>-                ec_unlock(fop);</div><div class='add'>+            ec_unlock(fop);</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                        "Unhandled state %d for %s",</div><div class='del'>-                        state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='del'>-                return EC_STATE_END;</div><div class='del'>-        }</div><div class='add'>+            return EC_STATE_END;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_removexattr_cbk_t func, void *data,</div><div class='del'>-                loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+ec_removexattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+               int32_t minimum, fop_removexattr_cbk_t func, void *data,</div><div class='add'>+               loc_t *loc, const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .removexattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.removexattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(REMOVEXATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(REMOVEXATTR) %p", frame);</div><div class='ctx'> </div><div class='del'>-    VALIDATE_OR_GOTO (this, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_REMOVEXATTR, 0, target,</div><div class='ctx'>                                minimum, ec_wind_removexattr, ec_manager_xattr,</div><div class='hunk'>@@ -308,9 +303,8 @@ ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -318,20 +312,18 @@ ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (name != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(name);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (xdata != NULL) {</div><div class='del'>-        fop-&gt;xdata = dict_copy_with_ref (xdata, NULL);</div><div class='add'>+        fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -341,23 +333,24 @@ ec_removexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fop != NULL) {</div><div class='del'>-        ec_manager (fop, error);</div><div class='add'>+        ec_manager(fop, error);</div><div class='ctx'>     } else {</div><div class='del'>-        func (frame, NULL, this, -1, error, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, error, NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: fremovexattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_fremovexattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                             xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   NULL, NULL, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, NULL,</div><div class='add'>+                              xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fremovexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fremovexattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -367,19 +360,19 @@ void ec_wind_fremovexattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_fremovexattr_cbk_t func, void *data,</div><div class='del'>-                 fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+ec_fremovexattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+                int32_t minimum, fop_fremovexattr_cbk_t func, void *data,</div><div class='add'>+                fd_t *fd, const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fremovexattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fremovexattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FREMOVEXATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FREMOVEXATTR) %p", frame);</div><div class='ctx'> </div><div class='del'>-    VALIDATE_OR_GOTO (this, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = ec_fop_data_allocate(frame, this, GF_FOP_FREMOVEXATTR, 0, target,</div><div class='ctx'>                                minimum, ec_wind_fremovexattr, ec_manager_xattr,</div><div class='hunk'>@@ -393,10 +386,9 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -404,9 +396,8 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (name != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(name);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -414,10 +405,9 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -427,24 +417,25 @@ ec_fremovexattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fop != NULL) {</div><div class='del'>-        ec_manager (fop, error);</div><div class='add'>+        ec_manager(fop, error);</div><div class='ctx'>     } else {</div><div class='del'>-        func (frame, NULL, this, -1, error, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, error, NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: setattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        struct iatt *prestat, struct iatt *poststat,</div><div class='del'>-                        dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prestat,</div><div class='add'>+               struct iatt *poststat, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   prestat, poststat, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat,</div><div class='add'>+                              poststat, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_setattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_setattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -453,18 +444,18 @@ void ec_wind_setattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], &amp;fop-&gt;iatt, fop-&gt;int32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_setattr(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             if (fop-&gt;fd == NULL) {</div><div class='ctx'>                 ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0],</div><div class='del'>-                                      EC_UPDATE_META | EC_QUERY_INFO,</div><div class='del'>-                                      0, LLONG_MAX);</div><div class='add'>+                                      EC_UPDATE_META | EC_QUERY_INFO, 0,</div><div class='add'>+                                      LLONG_MAX);</div><div class='ctx'>             } else {</div><div class='ctx'>                 ec_lock_prepare_fd(fop, fop-&gt;fd, EC_UPDATE_META | EC_QUERY_INFO,</div><div class='ctx'>                                    0, LLONG_MAX);</div><div class='hunk'>@@ -482,8 +473,7 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             cbk = ec_fop_prepare_answer(fop, _gf_false);</div><div class='ctx'>             if (cbk != NULL) {</div><div class='ctx'>                 if (cbk-&gt;iatt[0].ia_type == IA_IFREG) {</div><div class='del'>-                    ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2,</div><div class='del'>-                                    cbk-&gt;count);</div><div class='add'>+                    ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                     /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                     GF_ASSERT(ec_get_inode_size(fop,</div><div class='hunk'>@@ -500,20 +490,14 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_SETATTR)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.setattr != NULL)</div><div class='del'>-                {</div><div class='del'>-                    fop-&gt;cbks.setattr(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='del'>-                                      cbk-&gt;op_ret, cbk-&gt;op_errno,</div><div class='del'>-                                      &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='del'>-                                      cbk-&gt;xdata);</div><div class='add'>+            if (fop-&gt;id == GF_FOP_SETATTR) {</div><div class='add'>+                if (fop-&gt;cbks.setattr != NULL) {</div><div class='add'>+                    fop-&gt;cbks.setattr(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                      cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0],</div><div class='add'>+                                      &amp;cbk-&gt;iatt[1], cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fsetattr != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fsetattr != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fsetattr(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='ctx'>                                        cbk-&gt;op_ret, cbk-&gt;op_errno,</div><div class='ctx'>                                        &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='hunk'>@@ -530,18 +514,13 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_SETATTR)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.setattr != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_SETATTR) {</div><div class='add'>+                if (fop-&gt;cbks.setattr != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.setattr(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                       fop-&gt;error, NULL, NULL, NULL);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fsetattr != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fsetattr != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fsetattr(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                        fop-&gt;error, NULL, NULL, NULL);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -562,25 +541,23 @@ int32_t ec_manager_setattr(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_setattr_cbk_t func, void * data,</div><div class='del'>-                loc_t * loc, struct iatt * stbuf, int32_t valid,</div><div class='del'>-                dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_setattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_setattr_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+           struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .setattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.setattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(SETATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(SETATTR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -597,9 +574,8 @@ void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -610,10 +586,9 @@ void ec_setattr(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -631,16 +606,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: fsetattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         struct iatt *prestat, struct iatt *poststat,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *prestat,</div><div class='add'>+                struct iatt *poststat, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   prestat, poststat, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat,</div><div class='add'>+                              poststat, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fsetattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fsetattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -649,23 +625,24 @@ void ec_wind_fsetattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, &amp;fop-&gt;iatt, fop-&gt;int32, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_fsetattr_cbk_t func, void * data,</div><div class='del'>-                 fd_t * fd, struct iatt * stbuf, int32_t valid, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_fsetattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_fsetattr_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+            struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fsetattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fsetattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FSETATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FSETATTR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_FSETATTR, 0, target,</div><div class='del'>-                               minimum, ec_wind_fsetattr, ec_manager_setattr,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_FSETATTR, 0, target, minimum,</div><div class='add'>+                               ec_wind_fsetattr, ec_manager_setattr, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -677,10 +654,9 @@ void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -691,10 +667,9 @@ void ec_fsetattr(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -712,14 +687,16 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: setxattr */</div><div class='ctx'> </div><div class='del'>-int32_t ec_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   NULL, NULL, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, NULL, NULL,</div><div class='add'>+                              xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_setxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_setxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -729,23 +706,23 @@ void ec_wind_setxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-             int32_t minimum, fop_setxattr_cbk_t func, void *data,</div><div class='del'>-             loc_t *loc, dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+ec_setxattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_setxattr_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+            dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .setxattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.setxattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(SETXATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(SETXATTR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_SETXATTR, 0, target,</div><div class='del'>-                               minimum, ec_wind_setxattr, ec_manager_xattr,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_SETXATTR, 0, target, minimum,</div><div class='add'>+                               ec_wind_setxattr, ec_manager_xattr, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -754,9 +731,8 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -764,10 +740,9 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (dict != NULL) {</div><div class='ctx'>         fop-&gt;dict = dict_copy_with_ref(dict, NULL);</div><div class='ctx'>         if (fop-&gt;dict == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -775,10 +750,9 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -788,45 +762,41 @@ ec_setxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fop != NULL) {</div><div class='del'>-        ec_manager (fop, error);</div><div class='add'>+        ec_manager(fop, error);</div><div class='ctx'>     } else {</div><div class='del'>-        func (frame, NULL, this, -1, error, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, error, NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: fsetxattr */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+ec_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='del'>-    VALIDATE_OR_GOTO (this, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, frame-&gt;local, out);</div><div class='del'>-    GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    VALIDATE_OR_GOTO(this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame-&gt;local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FSETXATTR, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -836,15 +806,15 @@ ec_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fsetxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fsetxattr(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -854,15 +824,15 @@ void ec_wind_fsetxattr(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_fsetxattr_cbk_t func, void *data,</div><div class='del'>-              fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+ec_fsetxattr(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+             int32_t minimum, fop_fsetxattr_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+             dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fsetxattr = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fsetxattr = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FSETXATTR) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FSETXATTR) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -882,10 +852,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -893,10 +862,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (dict != NULL) {</div><div class='ctx'>         fop-&gt;dict = dict_copy_with_ref(dict, NULL);</div><div class='ctx'>         if (fop-&gt;dict == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -904,10 +872,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -917,9 +884,9 @@ ec_fsetxattr (call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'>     if (fop != NULL) {</div><div class='del'>-        ec_manager (fop, error);</div><div class='add'>+        ec_manager(fop, error);</div><div class='ctx'>     } else {</div><div class='del'>-        func (frame, NULL, this, -1, error, NULL);</div><div class='add'>+        func(frame, NULL, this, -1, error, NULL);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -929,154 +896,153 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  *********************************************************************/</div><div class='ctx'> </div><div class='del'>-int32_t ec_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                         struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   prebuf, postbuf, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prebuf,</div><div class='add'>+                              postbuf, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fallocate(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fallocate(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='ctx'>     STACK_WIND_COOKIE(fop-&gt;frame, ec_fallocate_cbk, (void *)(uintptr_t)idx,</div><div class='ctx'>                       ec-&gt;xl_list[idx], ec-&gt;xl_list[idx]-&gt;fops-&gt;fallocate,</div><div class='del'>-                      fop-&gt;fd, fop-&gt;int32, fop-&gt;offset,</div><div class='del'>-                      fop-&gt;size, fop-&gt;xdata);</div><div class='add'>+                      fop-&gt;fd, fop-&gt;int32, fop-&gt;offset, fop-&gt;size, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_fallocate(ec_fop_data_t *fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_fallocate(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_cbk_data_t *cbk = NULL;</div><div class='ctx'> </div><div class='ctx'>     switch (state) {</div><div class='del'>-    case EC_STATE_INIT:</div><div class='del'>-        if (fop-&gt;size == 0) {</div><div class='add'>+        case EC_STATE_INIT:</div><div class='add'>+            if (fop-&gt;size == 0) {</div><div class='ctx'>                 ec_fop_set_error(fop, EINVAL);</div><div class='ctx'>                 return EC_STATE_REPORT;</div><div class='del'>-        }</div><div class='del'>-        if (fop-&gt;int32 &amp; (FALLOC_FL_COLLAPSE_RANGE</div><div class='del'>-                         |FALLOC_FL_INSERT_RANGE</div><div class='del'>-                         |FALLOC_FL_ZERO_RANGE</div><div class='del'>-                         |FALLOC_FL_PUNCH_HOLE)) {</div><div class='add'>+            }</div><div class='add'>+            if (fop-&gt;int32 &amp;</div><div class='add'>+                (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE |</div><div class='add'>+                 FALLOC_FL_ZERO_RANGE | FALLOC_FL_PUNCH_HOLE)) {</div><div class='ctx'>                 ec_fop_set_error(fop, ENOTSUP);</div><div class='ctx'>                 return EC_STATE_REPORT;</div><div class='del'>-        }</div><div class='del'>-        fop-&gt;user_size = fop-&gt;offset + fop-&gt;size;</div><div class='del'>-        fop-&gt;head = ec_adjust_offset_down (fop-&gt;xl-&gt;private, &amp;fop-&gt;offset,</div><div class='del'>-                                           _gf_true);</div><div class='del'>-        fop-&gt;size += fop-&gt;head;</div><div class='del'>-        ec_adjust_size_up (fop-&gt;xl-&gt;private, &amp;fop-&gt;size, _gf_true);</div><div class='add'>+            }</div><div class='add'>+            fop-&gt;user_size = fop-&gt;offset + fop-&gt;size;</div><div class='add'>+            fop-&gt;head = ec_adjust_offset_down(fop-&gt;xl-&gt;private, &amp;fop-&gt;offset,</div><div class='add'>+                                              _gf_true);</div><div class='add'>+            fop-&gt;size += fop-&gt;head;</div><div class='add'>+            ec_adjust_size_up(fop-&gt;xl-&gt;private, &amp;fop-&gt;size, _gf_true);</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_LOCK:</div><div class='del'>-        ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='del'>-                           EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,</div><div class='del'>-                           fop-&gt;offset, fop-&gt;size);</div><div class='del'>-        ec_lock(fop);</div><div class='add'>+        case EC_STATE_LOCK:</div><div class='add'>+            ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='add'>+                               EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,</div><div class='add'>+                               fop-&gt;offset, fop-&gt;size);</div><div class='add'>+            ec_lock(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_DISPATCH;</div><div class='add'>+            return EC_STATE_DISPATCH;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_DISPATCH:</div><div class='add'>+        case EC_STATE_DISPATCH:</div><div class='ctx'> </div><div class='del'>-        ec_dispatch_all(fop);</div><div class='add'>+            ec_dispatch_all(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_PREPARE_ANSWER;</div><div class='add'>+            return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_PREPARE_ANSWER:</div><div class='del'>-        cbk = ec_fop_prepare_answer(fop, _gf_false);</div><div class='del'>-        if (cbk != NULL) {</div><div class='del'>-                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2,</div><div class='del'>-                            cbk-&gt;count);</div><div class='add'>+        case EC_STATE_PREPARE_ANSWER:</div><div class='add'>+            cbk = ec_fop_prepare_answer(fop, _gf_false);</div><div class='add'>+            if (cbk != NULL) {</div><div class='add'>+                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                 /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                 LOCK(&amp;fop-&gt;locks[0].lock-&gt;loc.inode-&gt;lock);</div><div class='ctx'>                 {</div><div class='del'>-                        GF_ASSERT(__ec_get_inode_size(fop,</div><div class='del'>-                                                fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='del'>-                                                &amp;cbk-&gt;iatt[0].ia_size));</div><div class='add'>+                    GF_ASSERT(__ec_get_inode_size(fop,</div><div class='add'>+                                                  fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='add'>+                                                  &amp;cbk-&gt;iatt[0].ia_size));</div><div class='ctx'> </div><div class='del'>-                        /*If mode has FALLOC_FL_KEEP_SIZE keep the size */</div><div class='del'>-                        if (fop-&gt;int32 &amp; FALLOC_FL_KEEP_SIZE) {</div><div class='del'>-                                cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='del'>-                        } else if (fop-&gt;user_size &gt; cbk-&gt;iatt[0].ia_size) {</div><div class='del'>-                                cbk-&gt;iatt[1].ia_size = fop-&gt;user_size;</div><div class='del'>-</div><div class='del'>-                                /* This shouldn't fail because we have the inode</div><div class='del'>-                                 * locked. */</div><div class='del'>-                                GF_ASSERT(__ec_set_inode_size(fop,</div><div class='del'>-                                          fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='del'>-                                                    cbk-&gt;iatt[1].ia_size));</div><div class='del'>-                        } else {</div><div class='del'>-                                cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='del'>-                        }</div><div class='add'>+                    /*If mode has FALLOC_FL_KEEP_SIZE keep the size */</div><div class='add'>+                    if (fop-&gt;int32 &amp; FALLOC_FL_KEEP_SIZE) {</div><div class='add'>+                        cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='add'>+                    } else if (fop-&gt;user_size &gt; cbk-&gt;iatt[0].ia_size) {</div><div class='add'>+                        cbk-&gt;iatt[1].ia_size = fop-&gt;user_size;</div><div class='add'>+</div><div class='add'>+                        /* This shouldn't fail because we have the inode</div><div class='add'>+                         * locked. */</div><div class='add'>+                        GF_ASSERT(__ec_set_inode_size(</div><div class='add'>+                            fop, fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='add'>+                            cbk-&gt;iatt[1].ia_size));</div><div class='add'>+                    } else {</div><div class='add'>+                        cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='ctx'>                 UNLOCK(&amp;fop-&gt;locks[0].lock-&gt;loc.inode-&gt;lock);</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_REPORT;</div><div class='add'>+            return EC_STATE_REPORT;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_REPORT:</div><div class='del'>-        cbk = fop-&gt;answer;</div><div class='add'>+        case EC_STATE_REPORT:</div><div class='add'>+            cbk = fop-&gt;answer;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(cbk != NULL);</div><div class='add'>+            GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;cbks.fallocate != NULL) {</div><div class='add'>+            if (fop-&gt;cbks.fallocate != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.fallocate(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                     cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                     cbk-&gt;xdata);</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_INIT:</div><div class='del'>-    case -EC_STATE_LOCK:</div><div class='del'>-    case -EC_STATE_DISPATCH:</div><div class='del'>-    case -EC_STATE_PREPARE_ANSWER:</div><div class='del'>-    case -EC_STATE_REPORT:</div><div class='del'>-        GF_ASSERT(fop-&gt;error != 0);</div><div class='add'>+        case -EC_STATE_INIT:</div><div class='add'>+        case -EC_STATE_LOCK:</div><div class='add'>+        case -EC_STATE_DISPATCH:</div><div class='add'>+        case -EC_STATE_PREPARE_ANSWER:</div><div class='add'>+        case -EC_STATE_REPORT:</div><div class='add'>+            GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;cbks.fallocate != NULL) {</div><div class='add'>+            if (fop-&gt;cbks.fallocate != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.fallocate(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                     fop-&gt;error, NULL, NULL, NULL);</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_LOCK_REUSE:</div><div class='del'>-    case EC_STATE_LOCK_REUSE:</div><div class='del'>-        ec_lock_reuse(fop);</div><div class='add'>+        case -EC_STATE_LOCK_REUSE:</div><div class='add'>+        case EC_STATE_LOCK_REUSE:</div><div class='add'>+            ec_lock_reuse(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_UNLOCK;</div><div class='add'>+            return EC_STATE_UNLOCK;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_UNLOCK:</div><div class='del'>-    case EC_STATE_UNLOCK:</div><div class='del'>-        ec_unlock(fop);</div><div class='add'>+        case -EC_STATE_UNLOCK:</div><div class='add'>+        case EC_STATE_UNLOCK:</div><div class='add'>+            ec_unlock(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'> </div><div class='del'>-    default:</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                "Unhandled state %d for %s",</div><div class='del'>-                state, ec_fop_name(fop-&gt;id));</div><div class='add'>+        default:</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-              int32_t minimum, fop_fallocate_cbk_t func, void *data, fd_t *fd,</div><div class='del'>-              int32_t mode, off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+             int32_t minimum, fop_fallocate_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+             int32_t mode, off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fallocate = func };</div><div class='add'>+    ec_cbk_t callback = {.fallocate = func};</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FALLOCATE) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FALLOCATE) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1097,22 +1063,20 @@ void ec_fallocate(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "file descriptor.");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -1131,66 +1095,70 @@ out:</div><div class='ctx'>  * File Operation : Discard</div><div class='ctx'>  *</div><div class='ctx'>  *********************************************************************/</div><div class='del'>-void ec_update_discard_write(ec_fop_data_t *fop, uintptr_t mask)</div><div class='add'>+void</div><div class='add'>+ec_update_discard_write(ec_fop_data_t *fop, uintptr_t mask)</div><div class='ctx'> {</div><div class='del'>-    ec_t   *ec       = fop-&gt;xl-&gt;private;</div><div class='del'>-    off_t  off_head  = 0;</div><div class='del'>-    off_t  off_tail  = 0;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    off_t off_head = 0;</div><div class='add'>+    off_t off_tail = 0;</div><div class='ctx'>     size_t size_head = 0;</div><div class='ctx'>     size_t size_tail = 0;</div><div class='del'>-    int    error     = 0;</div><div class='add'>+    int error = 0;</div><div class='ctx'> </div><div class='ctx'>     off_head = fop-&gt;offset * ec-&gt;fragments - fop-&gt;int32;</div><div class='ctx'>     if (fop-&gt;size == 0) {</div><div class='del'>-            error = ec_update_write (fop, mask, off_head, fop-&gt;user_size);</div><div class='add'>+        error = ec_update_write(fop, mask, off_head, fop-&gt;user_size);</div><div class='ctx'>     } else {</div><div class='del'>-            size_head = fop-&gt;int32;</div><div class='del'>-            size_tail = (off_head + fop-&gt;user_size) % ec-&gt;stripe_size;</div><div class='del'>-            off_tail = off_head + fop-&gt;user_size - size_tail;</div><div class='del'>-            if (size_head) {</div><div class='del'>-                    error = ec_update_write (fop, mask, off_head, size_head);</div><div class='del'>-                    if (error) {</div><div class='del'>-                        goto out;</div><div class='del'>-                    }</div><div class='del'>-            }</div><div class='del'>-            if (size_tail) {</div><div class='del'>-                    error = ec_update_write (fop, mask, off_tail, size_tail);</div><div class='add'>+        size_head = fop-&gt;int32;</div><div class='add'>+        size_tail = (off_head + fop-&gt;user_size) % ec-&gt;stripe_size;</div><div class='add'>+        off_tail = off_head + fop-&gt;user_size - size_tail;</div><div class='add'>+        if (size_head) {</div><div class='add'>+            error = ec_update_write(fop, mask, off_head, size_head);</div><div class='add'>+            if (error) {</div><div class='add'>+                goto out;</div><div class='ctx'>             }</div><div class='add'>+        }</div><div class='add'>+        if (size_tail) {</div><div class='add'>+            error = ec_update_write(fop, mask, off_tail, size_tail);</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'> out:</div><div class='ctx'>     if (error)</div><div class='del'>-            ec_fop_set_error (fop, -error);</div><div class='add'>+        ec_fop_set_error(fop, -error);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_discard_adjust_offset_size(ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_discard_adjust_offset_size(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'> </div><div class='del'>-        fop-&gt;user_size = fop-&gt;size;</div><div class='del'>-        /* If discard length covers at least a fragment on brick, we will</div><div class='del'>-         * perform discard operation(when fop-&gt;size is non-zero) else we just</div><div class='del'>-         * write zeros.</div><div class='del'>-         */</div><div class='del'>-        fop-&gt;int32 = ec_adjust_offset_up(ec, &amp;fop-&gt;offset, _gf_true);</div><div class='del'>-        fop-&gt;frag_range.first = fop-&gt;offset;</div><div class='del'>-        if (fop-&gt;size &lt; fop-&gt;int32) {</div><div class='del'>-                fop-&gt;size = 0;</div><div class='del'>-        } else {</div><div class='del'>-                fop-&gt;size -= fop-&gt;int32;</div><div class='del'>-                ec_adjust_size_down(ec, &amp;fop-&gt;size, _gf_true);</div><div class='del'>-        }</div><div class='del'>-        fop-&gt;frag_range.last = fop-&gt;offset + fop-&gt;size;</div><div class='add'>+    fop-&gt;user_size = fop-&gt;size;</div><div class='add'>+    /* If discard length covers at least a fragment on brick, we will</div><div class='add'>+     * perform discard operation(when fop-&gt;size is non-zero) else we just</div><div class='add'>+     * write zeros.</div><div class='add'>+     */</div><div class='add'>+    fop-&gt;int32 = ec_adjust_offset_up(ec, &amp;fop-&gt;offset, _gf_true);</div><div class='add'>+    fop-&gt;frag_range.first = fop-&gt;offset;</div><div class='add'>+    if (fop-&gt;size &lt; fop-&gt;int32) {</div><div class='add'>+        fop-&gt;size = 0;</div><div class='add'>+    } else {</div><div class='add'>+        fop-&gt;size -= fop-&gt;int32;</div><div class='add'>+        ec_adjust_size_down(ec, &amp;fop-&gt;size, _gf_true);</div><div class='add'>+    }</div><div class='add'>+    fop-&gt;frag_range.last = fop-&gt;offset + fop-&gt;size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+               struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                               prebuf, postbuf, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prebuf,</div><div class='add'>+                              postbuf, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_discard(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_discard(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1199,146 +1167,144 @@ void ec_wind_discard(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;offset, fop-&gt;size, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_discard(ec_fop_data_t *fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_discard(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t *cbk     = NULL;</div><div class='del'>-    off_t         fl_start = 0;</div><div class='del'>-    size_t        fl_size  = 0;</div><div class='del'>-</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='add'>+    off_t fl_start = 0;</div><div class='add'>+    size_t fl_size = 0;</div><div class='ctx'> </div><div class='ctx'>     switch (state) {</div><div class='del'>-    case EC_STATE_INIT:</div><div class='del'>-        if ((fop-&gt;size &lt;= 0) || (fop-&gt;offset &lt; 0)) {</div><div class='add'>+        case EC_STATE_INIT:</div><div class='add'>+            if ((fop-&gt;size &lt;= 0) || (fop-&gt;offset &lt; 0)) {</div><div class='ctx'>                 ec_fop_set_error(fop, EINVAL);</div><div class='ctx'>                 return EC_STATE_REPORT;</div><div class='del'>-        }</div><div class='del'>-        /* Because of the head/tail writes, "discard" happens on the remaining</div><div class='del'>-         * regions, but we need to compute region including head/tail writes</div><div class='del'>-         * so compute them separately*/</div><div class='del'>-        fl_start = fop-&gt;offset;</div><div class='del'>-        fl_size = fop-&gt;size;</div><div class='del'>-        fl_size += ec_adjust_offset_down (fop-&gt;xl-&gt;private, &amp;fl_start,</div><div class='del'>-                                          _gf_true);</div><div class='del'>-        ec_adjust_size_up (fop-&gt;xl-&gt;private, &amp;fl_size, _gf_true);</div><div class='add'>+            }</div><div class='add'>+            /* Because of the head/tail writes, "discard" happens on the</div><div class='add'>+             * remaining regions, but we need to compute region including</div><div class='add'>+             * head/tail writes so compute them separately*/</div><div class='add'>+            fl_start = fop-&gt;offset;</div><div class='add'>+            fl_size = fop-&gt;size;</div><div class='add'>+            fl_size += ec_adjust_offset_down(fop-&gt;xl-&gt;private, &amp;fl_start,</div><div class='add'>+                                             _gf_true);</div><div class='add'>+            ec_adjust_size_up(fop-&gt;xl-&gt;private, &amp;fl_size, _gf_true);</div><div class='ctx'> </div><div class='del'>-        ec_discard_adjust_offset_size(fop);</div><div class='add'>+            ec_discard_adjust_offset_size(fop);</div><div class='ctx'> </div><div class='del'>-    /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_LOCK:</div><div class='del'>-        ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='del'>-                           EC_UPDATE_DATA | EC_UPDATE_META |</div><div class='del'>-                           EC_QUERY_INFO, fl_start, fl_size);</div><div class='del'>-        ec_lock(fop);</div><div class='add'>+        case EC_STATE_LOCK:</div><div class='add'>+            ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='add'>+                               EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,</div><div class='add'>+                               fl_start, fl_size);</div><div class='add'>+            ec_lock(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_DISPATCH;</div><div class='add'>+            return EC_STATE_DISPATCH;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_DISPATCH:</div><div class='add'>+        case EC_STATE_DISPATCH:</div><div class='ctx'> </div><div class='del'>-        /* Dispatch discard fop only if we have whole fragment</div><div class='del'>-         * to deallocate */</div><div class='del'>-        if (fop-&gt;size) {</div><div class='add'>+            /* Dispatch discard fop only if we have whole fragment</div><div class='add'>+             * to deallocate */</div><div class='add'>+            if (fop-&gt;size) {</div><div class='ctx'>                 ec_dispatch_all(fop);</div><div class='ctx'>                 return EC_STATE_DELAYED_START;</div><div class='del'>-        } else {</div><div class='add'>+            } else {</div><div class='ctx'>                 /*Assume discard to have succeeded on mask*/</div><div class='ctx'>                 fop-&gt;good = fop-&gt;mask;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_DELAYED_START:</div><div class='add'>+        case EC_STATE_DELAYED_START:</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;size) {</div><div class='add'>+            if (fop-&gt;size) {</div><div class='ctx'>                 if (fop-&gt;answer &amp;&amp; fop-&gt;answer-&gt;op_ret == 0)</div><div class='del'>-                        ec_update_discard_write (fop, fop-&gt;answer-&gt;mask);</div><div class='del'>-        } else {</div><div class='del'>-                ec_update_discard_write (fop, fop-&gt;mask);</div><div class='del'>-        }</div><div class='add'>+                    ec_update_discard_write(fop, fop-&gt;answer-&gt;mask);</div><div class='add'>+            } else {</div><div class='add'>+                ec_update_discard_write(fop, fop-&gt;mask);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_PREPARE_ANSWER;</div><div class='add'>+            return EC_STATE_PREPARE_ANSWER;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_PREPARE_ANSWER:</div><div class='del'>-        cbk = ec_fop_prepare_answer(fop, _gf_false);</div><div class='del'>-        if (cbk != NULL) {</div><div class='del'>-                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2,</div><div class='del'>-                                cbk-&gt;count);</div><div class='add'>+        case EC_STATE_PREPARE_ANSWER:</div><div class='add'>+            cbk = ec_fop_prepare_answer(fop, _gf_false);</div><div class='add'>+            if (cbk != NULL) {</div><div class='add'>+                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                 /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                 GF_ASSERT(ec_get_inode_size(fop, fop-&gt;locks[0].lock-&gt;loc.inode,</div><div class='ctx'>                                             &amp;cbk-&gt;iatt[0].ia_size));</div><div class='ctx'> </div><div class='ctx'>                 cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='del'>-        }</div><div class='del'>-        return EC_STATE_REPORT;</div><div class='add'>+            }</div><div class='add'>+            return EC_STATE_REPORT;</div><div class='ctx'> </div><div class='del'>-    case EC_STATE_REPORT:</div><div class='del'>-        cbk = fop-&gt;answer;</div><div class='add'>+        case EC_STATE_REPORT:</div><div class='add'>+            cbk = fop-&gt;answer;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(cbk != NULL);</div><div class='add'>+            GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;cbks.discard != NULL) {</div><div class='add'>+            if (fop-&gt;cbks.discard != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.discard(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                   cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                   cbk-&gt;xdata);</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_INIT:</div><div class='del'>-    case -EC_STATE_LOCK:</div><div class='del'>-    case -EC_STATE_DISPATCH:</div><div class='del'>-    case -EC_STATE_DELAYED_START:</div><div class='del'>-    case -EC_STATE_PREPARE_ANSWER:</div><div class='del'>-    case -EC_STATE_REPORT:</div><div class='del'>-        GF_ASSERT(fop-&gt;error != 0);</div><div class='add'>+        case -EC_STATE_INIT:</div><div class='add'>+        case -EC_STATE_LOCK:</div><div class='add'>+        case -EC_STATE_DISPATCH:</div><div class='add'>+        case -EC_STATE_DELAYED_START:</div><div class='add'>+        case -EC_STATE_PREPARE_ANSWER:</div><div class='add'>+        case -EC_STATE_REPORT:</div><div class='add'>+            GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-        if (fop-&gt;cbks.discard != NULL) {</div><div class='del'>-                fop-&gt;cbks.discard(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='del'>-                                  fop-&gt;error, NULL, NULL, NULL);</div><div class='del'>-        }</div><div class='add'>+            if (fop-&gt;cbks.discard != NULL) {</div><div class='add'>+                fop-&gt;cbks.discard(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='add'>+                                  NULL, NULL, NULL);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_LOCK_REUSE;</div><div class='add'>+            return EC_STATE_LOCK_REUSE;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_LOCK_REUSE:</div><div class='del'>-    case EC_STATE_LOCK_REUSE:</div><div class='del'>-        ec_lock_reuse(fop);</div><div class='add'>+        case -EC_STATE_LOCK_REUSE:</div><div class='add'>+        case EC_STATE_LOCK_REUSE:</div><div class='add'>+            ec_lock_reuse(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_UNLOCK;</div><div class='add'>+            return EC_STATE_UNLOCK;</div><div class='ctx'> </div><div class='del'>-    case -EC_STATE_UNLOCK:</div><div class='del'>-    case EC_STATE_UNLOCK:</div><div class='del'>-        ec_unlock(fop);</div><div class='add'>+        case -EC_STATE_UNLOCK:</div><div class='add'>+        case EC_STATE_UNLOCK:</div><div class='add'>+            ec_unlock(fop);</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'> </div><div class='del'>-    default:</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                "Unhandled state %d for %s",</div><div class='del'>-                state, ec_fop_name(fop-&gt;id));</div><div class='add'>+        default:</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='del'>-        return EC_STATE_END;</div><div class='add'>+            return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_discard(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_discard_cbk_t func, void *data, fd_t *fd,</div><div class='del'>-                off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_discard(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_discard_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+           off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .discard = func };</div><div class='add'>+    ec_cbk_t callback = {.discard = func};</div><div class='ctx'>     ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(DISCARD) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(DISCARD) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_DISCARD, 0, target,</div><div class='del'>-                               minimum, ec_wind_discard, ec_manager_discard,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_DISCARD, 0, target, minimum,</div><div class='add'>+                               ec_wind_discard, ec_manager_discard, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1371,33 +1337,35 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  *********************************************************************/</div><div class='ctx'> </div><div class='del'>-int32_t ec_update_truncate_write (ec_fop_data_t *fop, uintptr_t mask)</div><div class='add'>+int32_t</div><div class='add'>+ec_update_truncate_write(ec_fop_data_t *fop, uintptr_t mask)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='del'>-        size_t size = fop-&gt;offset * ec-&gt;fragments - fop-&gt;user_size;</div><div class='del'>-        return ec_update_write (fop, mask, fop-&gt;user_size, size);</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    size_t size = fop-&gt;offset * ec-&gt;fragments - fop-&gt;user_size;</div><div class='add'>+    return ec_update_write(fop, mask, fop-&gt;user_size, size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_truncate_open_cbk(call_frame_t * frame, void * cookie,</div><div class='del'>-                             xlator_t * this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             fd_t * fd, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_truncate_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = cookie;</div><div class='add'>+    ec_fop_data_t *fop = cookie;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='ctx'>     fop-&gt;parent-&gt;good &amp;= fop-&gt;good;</div><div class='ctx'>     if (op_ret &gt;= 0) {</div><div class='del'>-        fd_bind (fd);</div><div class='del'>-        err = ec_update_truncate_write (fop-&gt;parent, fop-&gt;answer-&gt;mask);</div><div class='add'>+        fd_bind(fd);</div><div class='add'>+        err = ec_update_truncate_write(fop-&gt;parent, fop-&gt;answer-&gt;mask);</div><div class='ctx'>         if (err != 0) {</div><div class='del'>-            ec_fop_set_error (fop-&gt;parent, -err);</div><div class='add'>+            ec_fop_set_error(fop-&gt;parent, -err);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_truncate_clean(ec_fop_data_t * fop)</div><div class='add'>+int32_t</div><div class='add'>+ec_truncate_clean(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     if (fop-&gt;fd == NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_create(fop-&gt;loc[0].inode, fop-&gt;frame-&gt;root-&gt;pid);</div><div class='hunk'>@@ -1406,24 +1374,25 @@ int32_t ec_truncate_clean(ec_fop_data_t * fop)</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         ec_open(fop-&gt;frame, fop-&gt;xl, fop-&gt;answer-&gt;mask, fop-&gt;minimum,</div><div class='del'>-                ec_truncate_open_cbk, fop, &amp;fop-&gt;loc[0], O_RDWR, fop-&gt;fd,</div><div class='del'>-                NULL);</div><div class='add'>+                ec_truncate_open_cbk, fop, &amp;fop-&gt;loc[0], O_RDWR, fop-&gt;fd, NULL);</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     } else {</div><div class='del'>-        return ec_update_truncate_write (fop, fop-&gt;answer-&gt;mask);</div><div class='add'>+        return ec_update_truncate_write(fop, fop-&gt;answer-&gt;mask);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, struct iatt *prestat,</div><div class='del'>-                         struct iatt *poststat, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *prestat,</div><div class='add'>+                struct iatt *poststat, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   prestat, poststat, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat,</div><div class='add'>+                              poststat, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_truncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_truncate(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1432,29 +1401,31 @@ void ec_wind_truncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       &amp;fop-&gt;loc[0], fop-&gt;offset, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_truncate(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>             fop-&gt;user_size = fop-&gt;offset;</div><div class='ctx'>             ec_adjust_offset_up(fop-&gt;xl-&gt;private, &amp;fop-&gt;offset, _gf_true);</div><div class='ctx'>             fop-&gt;frag_range.first = fop-&gt;offset;</div><div class='ctx'>             fop-&gt;frag_range.last = UINT64_MAX;</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='ctx'>             if (fop-&gt;id == GF_FOP_TRUNCATE) {</div><div class='del'>-                ec_lock_prepare_inode(fop, &amp;fop-&gt;loc[0],</div><div class='del'>-                                      EC_UPDATE_DATA | EC_UPDATE_META |</div><div class='del'>-                                      EC_QUERY_INFO, fop-&gt;offset, LLONG_MAX);</div><div class='add'>+                ec_lock_prepare_inode(</div><div class='add'>+                    fop, &amp;fop-&gt;loc[0],</div><div class='add'>+                    EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,</div><div class='add'>+                    fop-&gt;offset, LLONG_MAX);</div><div class='ctx'>             } else {</div><div class='del'>-                ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='del'>-                                   EC_UPDATE_DATA | EC_UPDATE_META |</div><div class='del'>-                                   EC_QUERY_INFO, fop-&gt;offset, LLONG_MAX);</div><div class='add'>+                ec_lock_prepare_fd(</div><div class='add'>+                    fop, fop-&gt;fd,</div><div class='add'>+                    EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,</div><div class='add'>+                    fop-&gt;offset, LLONG_MAX);</div><div class='ctx'>             }</div><div class='ctx'>             ec_lock(fop);</div><div class='ctx'> </div><div class='hunk'>@@ -1470,8 +1441,7 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             if (cbk != NULL) {</div><div class='ctx'>                 int32_t err;</div><div class='ctx'> </div><div class='del'>-                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2,</div><div class='del'>-                                cbk-&gt;count);</div><div class='add'>+                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                 /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                 /* Inode size doesn't need to be updated under locks, because</div><div class='hunk'>@@ -1499,20 +1469,15 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_TRUNCATE)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.truncate != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_TRUNCATE) {</div><div class='add'>+                if (fop-&gt;cbks.truncate != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.truncate(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='ctx'>                                        cbk-&gt;op_ret, cbk-&gt;op_errno,</div><div class='ctx'>                                        &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                        cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.ftruncate != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.ftruncate != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.ftruncate(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='ctx'>                                         cbk-&gt;op_ret, cbk-&gt;op_errno,</div><div class='ctx'>                                         &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='hunk'>@@ -1529,18 +1494,13 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_TRUNCATE)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.truncate != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_TRUNCATE) {</div><div class='add'>+                if (fop-&gt;cbks.truncate != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.truncate(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                        fop-&gt;error, NULL, NULL, NULL);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.ftruncate != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.ftruncate != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.ftruncate(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                         fop-&gt;error, NULL, NULL, NULL);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -1561,32 +1521,31 @@ int32_t ec_manager_truncate(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_truncate_cbk_t func, void * data,</div><div class='del'>-                 loc_t * loc, off_t offset, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_truncate(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_truncate_cbk_t func, void *data, loc_t *loc,</div><div class='add'>+            off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .truncate = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.truncate = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(TRUNCATE) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(TRUNCATE) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_TRUNCATE, 0, target,</div><div class='del'>-                               minimum, ec_wind_truncate, ec_manager_truncate,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_TRUNCATE, 0, target, minimum,</div><div class='add'>+                               ec_wind_truncate, ec_manager_truncate, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1595,9 +1554,8 @@ void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'> </div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1605,10 +1563,9 @@ void ec_truncate(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1626,16 +1583,17 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: ftruncate */</div><div class='ctx'> </div><div class='del'>-int32_t ec_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          struct iatt *prestat, struct iatt *poststat,</div><div class='del'>-                          dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prestat,</div><div class='add'>+                 struct iatt *poststat, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   prestat, poststat, xdata);</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat,</div><div class='add'>+                              poststat, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_ftruncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_ftruncate(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1644,15 +1602,16 @@ void ec_wind_ftruncate(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;fd, fop-&gt;offset, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                  int32_t minimum, fop_ftruncate_cbk_t func, void * data,</div><div class='del'>-                  fd_t * fd, off_t offset, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_ftruncate(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+             int32_t minimum, fop_ftruncate_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+             off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .ftruncate = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.ftruncate = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FTRUNCATE) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FTRUNCATE) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1672,10 +1631,9 @@ void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1683,10 +1641,9 @@ void ec_ftruncate(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1704,95 +1661,91 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: writev */</div><div class='ctx'> static ec_stripe_t *</div><div class='del'>-ec_allocate_stripe (ec_t *ec, ec_stripe_list_t *stripe_cache)</div><div class='add'>+ec_allocate_stripe(ec_t *ec, ec_stripe_list_t *stripe_cache)</div><div class='ctx'> {</div><div class='del'>-        ec_stripe_t *stripe = NULL;</div><div class='add'>+    ec_stripe_t *stripe = NULL;</div><div class='ctx'> </div><div class='del'>-        if (stripe_cache-&gt;count &gt;= stripe_cache-&gt;max) {</div><div class='del'>-                GF_ASSERT (!list_empty(&amp;stripe_cache-&gt;lru));</div><div class='del'>-                stripe = list_first_entry(&amp;stripe_cache-&gt;lru, ec_stripe_t, lru);</div><div class='del'>-                list_move_tail(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='del'>-                GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.evicts);</div><div class='add'>+    if (stripe_cache-&gt;count &gt;= stripe_cache-&gt;max) {</div><div class='add'>+        GF_ASSERT(!list_empty(&amp;stripe_cache-&gt;lru));</div><div class='add'>+        stripe = list_first_entry(&amp;stripe_cache-&gt;lru, ec_stripe_t, lru);</div><div class='add'>+        list_move_tail(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='add'>+        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.evicts);</div><div class='add'>+    } else {</div><div class='add'>+        stripe = GF_MALLOC(sizeof(ec_stripe_t) + ec-&gt;stripe_size,</div><div class='add'>+                           ec_mt_ec_stripe_t);</div><div class='add'>+        if (stripe != NULL) {</div><div class='add'>+            stripe_cache-&gt;count++;</div><div class='add'>+            list_add_tail(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='add'>+            GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.allocs);</div><div class='ctx'>         } else {</div><div class='del'>-                stripe = GF_MALLOC (sizeof (ec_stripe_t) + ec-&gt;stripe_size,</div><div class='del'>-                                    ec_mt_ec_stripe_t);</div><div class='del'>-                if (stripe != NULL) {</div><div class='del'>-                        stripe_cache-&gt;count++;</div><div class='del'>-                        list_add_tail (&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='del'>-                        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.allocs);</div><div class='del'>-                } else {</div><div class='del'>-                        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.errors);</div><div class='del'>-                }</div><div class='add'>+            GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.errors);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return stripe;</div><div class='add'>+    return stripe;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_write_stripe_data (ec_t *ec, ec_fop_data_t *fop,</div><div class='del'>-                      ec_stripe_t *stripe)</div><div class='add'>+ec_write_stripe_data(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe)</div><div class='ctx'> {</div><div class='del'>-        off_t   base;</div><div class='add'>+    off_t base;</div><div class='ctx'> </div><div class='del'>-        base = fop-&gt;size - ec-&gt;stripe_size;</div><div class='del'>-        memcpy(stripe-&gt;data, fop-&gt;vector[0].iov_base + base, ec-&gt;stripe_size);</div><div class='del'>-        stripe-&gt;frag_offset = fop-&gt;frag_range.last - ec-&gt;fragment_size;</div><div class='add'>+    base = fop-&gt;size - ec-&gt;stripe_size;</div><div class='add'>+    memcpy(stripe-&gt;data, fop-&gt;vector[0].iov_base + base, ec-&gt;stripe_size);</div><div class='add'>+    stripe-&gt;frag_offset = fop-&gt;frag_range.last - ec-&gt;fragment_size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_add_stripe_in_cache (ec_t *ec, ec_fop_data_t *fop)</div><div class='add'>+ec_add_stripe_in_cache(ec_t *ec, ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='del'>-        ec_inode_t       *ctx    = NULL;</div><div class='del'>-        ec_stripe_t      *stripe = NULL;</div><div class='del'>-        ec_stripe_list_t *stripe_cache = NULL;</div><div class='del'>-        gf_boolean_t      failed = _gf_true;</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='add'>+    ec_stripe_t *stripe = NULL;</div><div class='add'>+    ec_stripe_list_t *stripe_cache = NULL;</div><div class='add'>+    gf_boolean_t failed = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ctx = __ec_inode_get (fop-&gt;fd-&gt;inode, fop-&gt;xl);</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    LOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='del'>-        if (stripe_cache-&gt;max &gt; 0) {</div><div class='del'>-                stripe = ec_allocate_stripe (ec, stripe_cache);</div><div class='del'>-                if (stripe == NULL) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    ctx = __ec_inode_get(fop-&gt;fd-&gt;inode, fop-&gt;xl);</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ec_write_stripe_data (ec, fop, stripe);</div><div class='add'>+    stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='add'>+    if (stripe_cache-&gt;max &gt; 0) {</div><div class='add'>+        stripe = ec_allocate_stripe(ec, stripe_cache);</div><div class='add'>+        if (stripe == NULL) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        failed = _gf_false;</div><div class='add'>+        ec_write_stripe_data(ec, fop, stripe);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    failed = _gf_false;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        UNLOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (failed) {</div><div class='del'>-                gf_msg (ec-&gt;xl-&gt;name, GF_LOG_DEBUG, ENOMEM,</div><div class='del'>-                        EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                        "Failed to create and add stripe in cache");</div><div class='del'>-        }</div><div class='add'>+    if (failed) {</div><div class='add'>+        gf_msg(ec-&gt;xl-&gt;name, GF_LOG_DEBUG, ENOMEM, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+               "Failed to create and add stripe in cache");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_writev_merge_tail(call_frame_t * frame, void * cookie,</div><div class='del'>-                             xlator_t * this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             struct iovec * vector, int32_t count,</div><div class='del'>-                             struct iatt * stbuf, struct iobref * iobref,</div><div class='del'>-                             dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_writev_merge_tail(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                     int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='del'>-    ec_fop_data_t * fop = frame-&gt;local;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    ec_fop_data_t *fop = frame-&gt;local;</div><div class='ctx'>     size_t size, base, tmp;</div><div class='ctx'> </div><div class='del'>-    if (op_ret &gt;= 0)</div><div class='del'>-    {</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='ctx'>         tmp = 0;</div><div class='ctx'>         size = fop-&gt;size - fop-&gt;user_size - fop-&gt;head;</div><div class='ctx'>         base = ec-&gt;stripe_size - size;</div><div class='del'>-        if (op_ret &gt; base)</div><div class='del'>-        {</div><div class='add'>+        if (op_ret &gt; base) {</div><div class='ctx'>             tmp = min(op_ret - base, size);</div><div class='ctx'>             ec_iov_copy_to(fop-&gt;vector[0].iov_base + fop-&gt;size - size, vector,</div><div class='ctx'>                            count, base, tmp);</div><div class='hunk'>@@ -1800,49 +1753,44 @@ int32_t ec_writev_merge_tail(call_frame_t * frame, void * cookie,</div><div class='ctx'>             size -= tmp;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (size &gt; 0)</div><div class='del'>-        {</div><div class='add'>+        if (size &gt; 0) {</div><div class='ctx'>             memset(fop-&gt;vector[0].iov_base + fop-&gt;size - size, 0, size);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (ec-&gt;stripe_cache) {</div><div class='del'>-                ec_add_stripe_in_cache (ec, fop);</div><div class='add'>+            ec_add_stripe_in_cache(ec, fop);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_writev_merge_head(call_frame_t * frame, void * cookie,</div><div class='del'>-                             xlator_t * this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                             struct iovec * vector, int32_t count,</div><div class='del'>-                             struct iatt * stbuf, struct iobref * iobref,</div><div class='del'>-                             dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_writev_merge_head(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                     int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='del'>-    ec_fop_data_t * fop = frame-&gt;local;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    ec_fop_data_t *fop = frame-&gt;local;</div><div class='ctx'>     size_t size, base;</div><div class='ctx'> </div><div class='del'>-    if (op_ret &gt;= 0)</div><div class='del'>-    {</div><div class='add'>+    if (op_ret &gt;= 0) {</div><div class='ctx'>         size = fop-&gt;head;</div><div class='ctx'>         base = 0;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt; 0)</div><div class='del'>-        {</div><div class='add'>+        if (op_ret &gt; 0) {</div><div class='ctx'>             base = min(op_ret, size);</div><div class='ctx'>             ec_iov_copy_to(fop-&gt;vector[0].iov_base, vector, count, 0, base);</div><div class='ctx'> </div><div class='ctx'>             size -= base;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (size &gt; 0)</div><div class='del'>-        {</div><div class='add'>+        if (size &gt; 0) {</div><div class='ctx'>             memset(fop-&gt;vector[0].iov_base + base, 0, size);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         size = fop-&gt;size - fop-&gt;user_size - fop-&gt;head;</div><div class='del'>-        if ((size &gt; 0) &amp;&amp; (fop-&gt;size == ec-&gt;stripe_size))</div><div class='del'>-        {</div><div class='add'>+        if ((size &gt; 0) &amp;&amp; (fop-&gt;size == ec-&gt;stripe_size)) {</div><div class='ctx'>             ec_writev_merge_tail(frame, cookie, this, op_ret, op_errno, vector,</div><div class='ctx'>                                  count, stbuf, iobref, xdata);</div><div class='ctx'>         }</div><div class='hunk'>@@ -1852,7 +1800,7 @@ int32_t ec_writev_merge_head(call_frame_t * frame, void * cookie,</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ec_make_internal_fop_xdata (dict_t **xdata)</div><div class='add'>+ec_make_internal_fop_xdata(dict_t **xdata)</div><div class='ctx'> {</div><div class='ctx'>     dict_t *dict = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -1861,16 +1809,16 @@ ec_make_internal_fop_xdata (dict_t **xdata)</div><div class='ctx'> </div><div class='ctx'>     dict = dict_new();</div><div class='ctx'>     if (!dict)</div><div class='del'>-       goto out;</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-    if (dict_set_str (dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes"))</div><div class='del'>-       goto out;</div><div class='add'>+    if (dict_set_str(dict, GLUSTERFS_INTERNAL_FOP_KEY, "yes"))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'>     *xdata = dict;</div><div class='ctx'>     return 0;</div><div class='ctx'> out:</div><div class='ctx'>     if (dict)</div><div class='del'>-            dict_unref (dict);</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'>     return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -1889,8 +1837,7 @@ ec_writev_prepare_buffers(ec_t *ec, ec_fop_data_t *fop)</div><div class='ctx'>     ec_adjust_size_up(ec, &amp;fop-&gt;size, _gf_false);</div><div class='ctx'>     fop-&gt;frag_range.last = fop-&gt;frag_range.first + fop-&gt;size / ec-&gt;fragments;</div><div class='ctx'> </div><div class='del'>-    if ((fop-&gt;int32 != 1) || (fop-&gt;head != 0) ||</div><div class='del'>-        (fop-&gt;size &gt; fop-&gt;user_size) ||</div><div class='add'>+    if ((fop-&gt;int32 != 1) || (fop-&gt;head != 0) || (fop-&gt;size &gt; fop-&gt;user_size) ||</div><div class='ctx'>         !EC_ALIGN_CHECK(fop-&gt;vector[0].iov_base, EC_METHOD_WORD_SIZE)) {</div><div class='ctx'>         err = ec_buffer_alloc(ec-&gt;xl, fop-&gt;size, &amp;iobref, &amp;ptr);</div><div class='ctx'>         if (err != 0) {</div><div class='hunk'>@@ -1935,98 +1882,99 @@ out:</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_merge_stripe_head_locked (ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe)</div><div class='add'>+ec_merge_stripe_head_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe)</div><div class='ctx'> {</div><div class='del'>-        size_t head, size;</div><div class='add'>+    size_t head, size;</div><div class='ctx'> </div><div class='del'>-        head = fop-&gt;head;</div><div class='del'>-        memcpy(fop-&gt;vector[0].iov_base, stripe-&gt;data, head);</div><div class='add'>+    head = fop-&gt;head;</div><div class='add'>+    memcpy(fop-&gt;vector[0].iov_base, stripe-&gt;data, head);</div><div class='ctx'> </div><div class='add'>+    size = ec-&gt;stripe_size - head;</div><div class='add'>+    if (size &gt; fop-&gt;user_size) {</div><div class='add'>+        head += fop-&gt;user_size;</div><div class='ctx'>         size = ec-&gt;stripe_size - head;</div><div class='del'>-        if (size &gt; fop-&gt;user_size) {</div><div class='del'>-                head += fop-&gt;user_size;</div><div class='del'>-                size = ec-&gt;stripe_size - head;</div><div class='del'>-                memcpy(fop-&gt;vector[0].iov_base + head, stripe-&gt;data + head,</div><div class='del'>-                       size);</div><div class='del'>-        }</div><div class='add'>+        memcpy(fop-&gt;vector[0].iov_base + head, stripe-&gt;data + head, size);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ec_merge_stripe_tail_locked (ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe)</div><div class='add'>+ec_merge_stripe_tail_locked(ec_t *ec, ec_fop_data_t *fop, ec_stripe_t *stripe)</div><div class='ctx'> {</div><div class='del'>-        size_t head, tail;</div><div class='del'>-        off_t  offset;</div><div class='add'>+    size_t head, tail;</div><div class='add'>+    off_t offset;</div><div class='ctx'> </div><div class='del'>-        offset = fop-&gt;user_size + fop-&gt;head;</div><div class='del'>-        tail = fop-&gt;size - offset;</div><div class='del'>-        head = ec-&gt;stripe_size - tail;</div><div class='add'>+    offset = fop-&gt;user_size + fop-&gt;head;</div><div class='add'>+    tail = fop-&gt;size - offset;</div><div class='add'>+    head = ec-&gt;stripe_size - tail;</div><div class='ctx'> </div><div class='del'>-        memcpy(fop-&gt;vector[0].iov_base + offset, stripe-&gt;data + head, tail);</div><div class='add'>+    memcpy(fop-&gt;vector[0].iov_base + offset, stripe-&gt;data + head, tail);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static ec_stripe_t *</div><div class='del'>-ec_get_stripe_from_cache_locked (ec_t *ec, ec_fop_data_t *fop,</div><div class='del'>-                                 uint64_t frag_offset)</div><div class='add'>+ec_get_stripe_from_cache_locked(ec_t *ec, ec_fop_data_t *fop,</div><div class='add'>+                                uint64_t frag_offset)</div><div class='ctx'> {</div><div class='del'>-        ec_inode_t       *ctx    = NULL;</div><div class='del'>-        ec_stripe_t      *stripe = NULL;</div><div class='del'>-        ec_stripe_list_t *stripe_cache = NULL;</div><div class='del'>-</div><div class='del'>-        ctx = __ec_inode_get (fop-&gt;fd-&gt;inode, fop-&gt;xl);</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.errors);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='add'>+    ec_stripe_t *stripe = NULL;</div><div class='add'>+    ec_stripe_list_t *stripe_cache = NULL;</div><div class='ctx'> </div><div class='del'>-        stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='del'>-        list_for_each_entry (stripe, &amp;stripe_cache-&gt;lru, lru) {</div><div class='del'>-                if (stripe-&gt;frag_offset == frag_offset) {</div><div class='del'>-                        list_move_tail (&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='del'>-                        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.hits);</div><div class='del'>-                        return stripe;</div><div class='del'>-                }</div><div class='add'>+    ctx = __ec_inode_get(fop-&gt;fd-&gt;inode, fop-&gt;xl);</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.errors);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stripe_cache = &amp;ctx-&gt;stripe_cache;</div><div class='add'>+    list_for_each_entry(stripe, &amp;stripe_cache-&gt;lru, lru)</div><div class='add'>+    {</div><div class='add'>+        if (stripe-&gt;frag_offset == frag_offset) {</div><div class='add'>+            list_move_tail(&amp;stripe-&gt;lru, &amp;stripe_cache-&gt;lru);</div><div class='add'>+            GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.hits);</div><div class='add'>+            return stripe;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.misses);</div><div class='add'>+    GF_ATOMIC_INC(ec-&gt;stats.stripe_cache.misses);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-ec_get_and_merge_stripe (ec_t *ec, ec_fop_data_t *fop, ec_stripe_part_t which)</div><div class='add'>+ec_get_and_merge_stripe(ec_t *ec, ec_fop_data_t *fop, ec_stripe_part_t which)</div><div class='ctx'> {</div><div class='del'>-        uint64_t      frag_offset;</div><div class='del'>-        ec_stripe_t  *stripe = NULL;</div><div class='del'>-        gf_boolean_t  found  = _gf_false;</div><div class='add'>+    uint64_t frag_offset;</div><div class='add'>+    ec_stripe_t *stripe = NULL;</div><div class='add'>+    gf_boolean_t found = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!ec-&gt;stripe_cache) {</div><div class='del'>-                return found;</div><div class='del'>-        }</div><div class='add'>+    if (!ec-&gt;stripe_cache) {</div><div class='add'>+        return found;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='del'>-        if (which == EC_STRIPE_HEAD) {</div><div class='del'>-                frag_offset = fop-&gt;frag_range.first;</div><div class='del'>-                stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset);</div><div class='del'>-                if (stripe) {</div><div class='del'>-                        ec_merge_stripe_head_locked (ec, fop, stripe);</div><div class='del'>-                        found = _gf_true;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='add'>+    if (which == EC_STRIPE_HEAD) {</div><div class='add'>+        frag_offset = fop-&gt;frag_range.first;</div><div class='add'>+        stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset);</div><div class='add'>+        if (stripe) {</div><div class='add'>+            ec_merge_stripe_head_locked(ec, fop, stripe);</div><div class='add'>+            found = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (which == EC_STRIPE_TAIL) {</div><div class='del'>-                frag_offset = fop-&gt;frag_range.last - ec-&gt;fragment_size;</div><div class='del'>-                stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset);</div><div class='del'>-                if (stripe) {</div><div class='del'>-                        ec_merge_stripe_tail_locked (ec, fop, stripe);</div><div class='del'>-                        found = _gf_true;</div><div class='del'>-                }</div><div class='add'>+    if (which == EC_STRIPE_TAIL) {</div><div class='add'>+        frag_offset = fop-&gt;frag_range.last - ec-&gt;fragment_size;</div><div class='add'>+        stripe = ec_get_stripe_from_cache_locked(ec, fop, frag_offset);</div><div class='add'>+        if (stripe) {</div><div class='add'>+            ec_merge_stripe_tail_locked(ec, fop, stripe);</div><div class='add'>+            found = _gf_true;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_writev_start(ec_fop_data_t *fop)</div><div class='add'>+void</div><div class='add'>+ec_writev_start(ec_fop_data_t *fop)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     ec_fd_t *ctx;</div><div class='hunk'>@@ -2062,40 +2010,39 @@ void ec_writev_start(ec_fop_data_t *fop)</div><div class='ctx'>         goto failed_fd;</div><div class='ctx'>     }</div><div class='ctx'>     if (fop-&gt;head &gt; 0) {</div><div class='del'>-        found_stripe = ec_get_and_merge_stripe (ec, fop, EC_STRIPE_HEAD);</div><div class='add'>+        found_stripe = ec_get_and_merge_stripe(ec, fop, EC_STRIPE_HEAD);</div><div class='ctx'>         if (!found_stripe) {</div><div class='del'>-                if (ec_make_internal_fop_xdata (&amp;xdata)) {</div><div class='del'>-                        err = -ENOMEM;</div><div class='del'>-                        goto failed_xdata;</div><div class='del'>-                }</div><div class='del'>-                ec_readv(fop-&gt;frame, fop-&gt;xl, -1, EC_MINIMUM_MIN,</div><div class='del'>-                         ec_writev_merge_head,</div><div class='del'>-                         NULL, fd, ec-&gt;stripe_size, fop-&gt;offset, 0, xdata);</div><div class='add'>+            if (ec_make_internal_fop_xdata(&amp;xdata)) {</div><div class='add'>+                err = -ENOMEM;</div><div class='add'>+                goto failed_xdata;</div><div class='add'>+            }</div><div class='add'>+            ec_readv(fop-&gt;frame, fop-&gt;xl, -1, EC_MINIMUM_MIN,</div><div class='add'>+                     ec_writev_merge_head, NULL, fd, ec-&gt;stripe_size,</div><div class='add'>+                     fop-&gt;offset, 0, xdata);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     tail = fop-&gt;size - fop-&gt;user_size - fop-&gt;head;</div><div class='ctx'>     if ((tail &gt; 0) &amp;&amp; ((fop-&gt;head == 0) || (fop-&gt;size &gt; ec-&gt;stripe_size))) {</div><div class='del'>-            /* Current locking scheme will make sure the 'current' below will</div><div class='del'>-             * never decrease while the fop is in progress, so the checks will</div><div class='del'>-             * work as expected</div><div class='del'>-             */</div><div class='add'>+        /* Current locking scheme will make sure the 'current' below will</div><div class='add'>+         * never decrease while the fop is in progress, so the checks will</div><div class='add'>+         * work as expected</div><div class='add'>+         */</div><div class='ctx'>         if (current &gt; fop-&gt;offset + fop-&gt;head + fop-&gt;user_size) {</div><div class='del'>-            found_stripe = ec_get_and_merge_stripe (ec, fop, EC_STRIPE_TAIL);</div><div class='add'>+            found_stripe = ec_get_and_merge_stripe(ec, fop, EC_STRIPE_TAIL);</div><div class='ctx'>             if (!found_stripe) {</div><div class='del'>-                    if (ec_make_internal_fop_xdata (&amp;xdata)) {</div><div class='del'>-                            err = -ENOMEM;</div><div class='del'>-                            goto failed_xdata;</div><div class='del'>-                    }</div><div class='del'>-                    ec_readv(fop-&gt;frame, fop-&gt;xl, -1, EC_MINIMUM_MIN,</div><div class='del'>-                             ec_writev_merge_tail, NULL, fd, ec-&gt;stripe_size,</div><div class='del'>-                             fop-&gt;offset + fop-&gt;size - ec-&gt;stripe_size,</div><div class='del'>-                             0, xdata);</div><div class='add'>+                if (ec_make_internal_fop_xdata(&amp;xdata)) {</div><div class='add'>+                    err = -ENOMEM;</div><div class='add'>+                    goto failed_xdata;</div><div class='add'>+                }</div><div class='add'>+                ec_readv(fop-&gt;frame, fop-&gt;xl, -1, EC_MINIMUM_MIN,</div><div class='add'>+                         ec_writev_merge_tail, NULL, fd, ec-&gt;stripe_size,</div><div class='add'>+                         fop-&gt;offset + fop-&gt;size - ec-&gt;stripe_size, 0, xdata);</div><div class='ctx'>             }</div><div class='ctx'>         } else {</div><div class='ctx'>             memset(fop-&gt;vector[0].iov_base + fop-&gt;size - tail, 0, tail);</div><div class='ctx'>             if (ec-&gt;stripe_cache) {</div><div class='del'>-                ec_add_stripe_in_cache (ec, fop);</div><div class='add'>+                ec_add_stripe_in_cache(ec, fop);</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='hunk'>@@ -2112,23 +2059,25 @@ failed:</div><div class='ctx'>     ec_fop_set_error(fop, -err);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prestat,</div><div class='del'>-                       struct iatt *poststat, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *prestat, struct iatt *poststat,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ec_t    *ec = NULL;</div><div class='del'>-        if (this &amp;&amp; this-&gt;private) {</div><div class='del'>-                ec = this-&gt;private;</div><div class='del'>-                if ((op_ret &gt; 0) &amp;&amp; ((op_ret % ec-&gt;fragment_size) != 0)) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = EIO;</div><div class='del'>-                }</div><div class='add'>+    ec_t *ec = NULL;</div><div class='add'>+    if (this &amp;&amp; this-&gt;private) {</div><div class='add'>+        ec = this-&gt;private;</div><div class='add'>+        if ((op_ret &gt; 0) &amp;&amp; ((op_ret % ec-&gt;fragment_size) != 0)) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EIO;</div><div class='ctx'>         }</div><div class='del'>-        return ec_inode_write_cbk (frame, this, cookie, op_ret, op_errno,</div><div class='del'>-                                   prestat, poststat, xdata);</div><div class='add'>+    }</div><div class='add'>+    return ec_inode_write_cbk(frame, this, cookie, op_ret, op_errno, prestat,</div><div class='add'>+                              poststat, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_writev(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_writev(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -2141,9 +2090,9 @@ void ec_wind_writev(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>     vector[0].iov_len = size;</div><div class='ctx'> </div><div class='ctx'>     STACK_WIND_COOKIE(fop-&gt;frame, ec_writev_cbk, (void *)(uintptr_t)idx,</div><div class='del'>-                      ec-&gt;xl_list[idx], ec-&gt;xl_list[idx]-&gt;fops-&gt;writev,</div><div class='del'>-                      fop-&gt;fd, vector, 1, fop-&gt;offset / ec-&gt;fragments,</div><div class='del'>-                      fop-&gt;uint32, fop-&gt;buffers, fop-&gt;xdata);</div><div class='add'>+                      ec-&gt;xl_list[idx], ec-&gt;xl_list[idx]-&gt;fops-&gt;writev, fop-&gt;fd,</div><div class='add'>+                      vector, 1, fop-&gt;offset / ec-&gt;fragments, fop-&gt;uint32,</div><div class='add'>+                      fop-&gt;buffers, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -2161,35 +2110,34 @@ ec_writev_encode(ec_fop_data_t *fop)</div><div class='ctx'>                      fop-&gt;vector[0].iov_base, blocks);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='ctx'>     ec_cbk_data_t *cbk;</div><div class='ctx'>     ec_fd_t *ctx = NULL;</div><div class='del'>-    ec_t    *ec = fop-&gt;xl-&gt;private;</div><div class='add'>+    ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     off_t fl_start = 0;</div><div class='ctx'>     size_t fl_size = LLONG_MAX;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='ctx'>         case EC_STATE_LOCK:</div><div class='del'>-                ctx = ec_fd_get(fop-&gt;fd, fop-&gt;xl);</div><div class='del'>-                if (ctx != NULL) {</div><div class='del'>-                    if ((ctx-&gt;flags &amp; O_APPEND) == 0) {</div><div class='del'>-                            off_t user_size = 0;</div><div class='del'>-                            off_t head = 0;</div><div class='del'>-</div><div class='del'>-                            fl_start = fop-&gt;offset;</div><div class='del'>-                            user_size = iov_length(fop-&gt;vector, fop-&gt;int32);</div><div class='del'>-                            head = ec_adjust_offset_down(ec, &amp;fl_start,</div><div class='del'>-                                                         _gf_true);</div><div class='del'>-                            fl_size = user_size + head;</div><div class='del'>-                            ec_adjust_size_up(ec, &amp;fl_size, _gf_true);</div><div class='del'>-                    }</div><div class='add'>+            ctx = ec_fd_get(fop-&gt;fd, fop-&gt;xl);</div><div class='add'>+            if (ctx != NULL) {</div><div class='add'>+                if ((ctx-&gt;flags &amp; O_APPEND) == 0) {</div><div class='add'>+                    off_t user_size = 0;</div><div class='add'>+                    off_t head = 0;</div><div class='add'>+</div><div class='add'>+                    fl_start = fop-&gt;offset;</div><div class='add'>+                    user_size = iov_length(fop-&gt;vector, fop-&gt;int32);</div><div class='add'>+                    head = ec_adjust_offset_down(ec, &amp;fl_start, _gf_true);</div><div class='add'>+                    fl_size = user_size + head;</div><div class='add'>+                    ec_adjust_size_up(ec, &amp;fl_size, _gf_true);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>             ec_lock_prepare_fd(fop, fop-&gt;fd,</div><div class='del'>-                               EC_UPDATE_DATA | EC_UPDATE_META |</div><div class='del'>-                               EC_QUERY_INFO, fl_start, fl_size);</div><div class='add'>+                               EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,</div><div class='add'>+                               fl_start, fl_size);</div><div class='ctx'>             ec_lock(fop);</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_DISPATCH;</div><div class='hunk'>@@ -2217,29 +2165,28 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>                 ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>                 size_t size;</div><div class='ctx'> </div><div class='del'>-                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2,</div><div class='del'>-                                cbk-&gt;count);</div><div class='add'>+                ec_iatt_rebuild(fop-&gt;xl-&gt;private, cbk-&gt;iatt, 2, cbk-&gt;count);</div><div class='ctx'> </div><div class='ctx'>                 /* This shouldn't fail because we have the inode locked. */</div><div class='ctx'>                 LOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='ctx'>                 {</div><div class='del'>-                        GF_ASSERT(__ec_get_inode_size(fop, fop-&gt;fd-&gt;inode,</div><div class='del'>-                                                    &amp;cbk-&gt;iatt[0].ia_size));</div><div class='del'>-                        cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='del'>-                        size = fop-&gt;offset + fop-&gt;head + fop-&gt;user_size;</div><div class='del'>-                        if (size &gt; cbk-&gt;iatt[0].ia_size) {</div><div class='del'>-                           /* Only update inode size if this is a top level fop.</div><div class='del'>-                            * Otherwise this is an internal write and the top</div><div class='del'>-                            * level fop should take care of the real inode size.</div><div class='del'>-                            */</div><div class='del'>-                            if (fop-&gt;parent == NULL) {</div><div class='del'>-                                /* This shouldn't fail because we have the inode</div><div class='del'>-                                 * locked. */</div><div class='del'>-                                GF_ASSERT(__ec_set_inode_size(fop,</div><div class='del'>-                                                        fop-&gt;fd-&gt;inode, size));</div><div class='del'>-                            }</div><div class='del'>-                            cbk-&gt;iatt[1].ia_size = size;</div><div class='add'>+                    GF_ASSERT(__ec_get_inode_size(fop, fop-&gt;fd-&gt;inode,</div><div class='add'>+                                                  &amp;cbk-&gt;iatt[0].ia_size));</div><div class='add'>+                    cbk-&gt;iatt[1].ia_size = cbk-&gt;iatt[0].ia_size;</div><div class='add'>+                    size = fop-&gt;offset + fop-&gt;head + fop-&gt;user_size;</div><div class='add'>+                    if (size &gt; cbk-&gt;iatt[0].ia_size) {</div><div class='add'>+                        /* Only update inode size if this is a top level fop.</div><div class='add'>+                         * Otherwise this is an internal write and the top</div><div class='add'>+                         * level fop should take care of the real inode size.</div><div class='add'>+                         */</div><div class='add'>+                        if (fop-&gt;parent == NULL) {</div><div class='add'>+                            /* This shouldn't fail because we have the inode</div><div class='add'>+                             * locked. */</div><div class='add'>+                            GF_ASSERT(</div><div class='add'>+                                __ec_set_inode_size(fop, fop-&gt;fd-&gt;inode, size));</div><div class='ctx'>                         }</div><div class='add'>+                        cbk-&gt;iatt[1].ia_size = size;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='ctx'>                 UNLOCK(&amp;fop-&gt;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='hunk'>@@ -2263,8 +2210,7 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.writev != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.writev != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.writev(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                                  cbk-&gt;op_errno, &amp;cbk-&gt;iatt[0], &amp;cbk-&gt;iatt[1],</div><div class='ctx'>                                  cbk-&gt;xdata);</div><div class='hunk'>@@ -2278,7 +2224,7 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>             fop-&gt;frame-&gt;root-&gt;uid = fop-&gt;uid;</div><div class='ctx'>             fop-&gt;frame-&gt;root-&gt;gid = fop-&gt;gid;</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case -EC_STATE_INIT:</div><div class='ctx'>         case -EC_STATE_LOCK:</div><div class='hunk'>@@ -2287,8 +2233,7 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.writev != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.writev != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.writev(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='ctx'>                                  NULL, NULL, NULL);</div><div class='ctx'>             }</div><div class='hunk'>@@ -2308,25 +2253,24 @@ int32_t ec_manager_writev(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-               int32_t minimum, fop_writev_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-               struct iovec * vector, int32_t count, off_t offset,</div><div class='del'>-               uint32_t flags, struct iobref * iobref, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_writev(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+          int32_t minimum, fop_writev_cbk_t func, void *data, fd_t *fd,</div><div class='add'>+          struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+          struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .writev = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.writev = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(WRITE) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(WRITE) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -2348,10 +2292,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -2359,10 +2302,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (count &gt; 0) {</div><div class='ctx'>         fop-&gt;vector = iov_dup(vector, count);</div><div class='ctx'>         if (fop-&gt;vector == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a "</div><div class='del'>-                    "vector list.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a "</div><div class='add'>+                   "vector list.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -2371,10 +2313,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (iobref != NULL) {</div><div class='ctx'>         fop-&gt;buffers = iobref_ref(iobref);</div><div class='ctx'>         if (fop-&gt;buffers == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_BUF_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "buffer.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_BUF_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "buffer.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -2382,10 +2323,9 @@ void ec_writev(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_copy_with_ref(xdata, NULL);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-locks.c b/xlators/cluster/ec/src/ec-locks.c<br/>index d8ad7721f53..47a069b1775 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-locks.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-locks.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-locks.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-locks.c</a></div><div class='hunk'>@@ -19,10 +19,11 @@</div><div class='ctx'> #include "ec-messages.h"</div><div class='ctx'> </div><div class='ctx'> #define EC_LOCK_MODE_NONE 0</div><div class='del'>-#define EC_LOCK_MODE_INC  1</div><div class='del'>-#define EC_LOCK_MODE_ALL  2</div><div class='add'>+#define EC_LOCK_MODE_INC 1</div><div class='add'>+#define EC_LOCK_MODE_ALL 2</div><div class='ctx'> </div><div class='del'>-int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask)</div><div class='add'>+int32_t</div><div class='add'>+ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='ctx'>     ec_cbk_data_t *ans = NULL;</div><div class='hunk'>@@ -30,7 +31,8 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask)</div><div class='ctx'>     uintptr_t locked = 0, notlocked = 0;</div><div class='ctx'>     int32_t error = -1;</div><div class='ctx'> </div><div class='del'>-    list_for_each_entry(ans, &amp;fop-&gt;cbk_list, list) {</div><div class='add'>+    list_for_each_entry(ans, &amp;fop-&gt;cbk_list, list)</div><div class='add'>+    {</div><div class='ctx'>         if (ans-&gt;op_ret &gt;= 0) {</div><div class='ctx'>             if (locked != 0) {</div><div class='ctx'>                 error = EIO;</div><div class='hunk'>@@ -38,16 +40,16 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask)</div><div class='ctx'>             locked |= ans-&gt;mask;</div><div class='ctx'>             cbk = ans;</div><div class='ctx'>         } else {</div><div class='del'>-                if (ans-&gt;op_errno == EAGAIN) {</div><div class='del'>-                        switch (fop-&gt;uint32) {</div><div class='del'>-                        case EC_LOCK_MODE_NONE:</div><div class='del'>-                        case EC_LOCK_MODE_ALL:</div><div class='del'>-                                /* Goal is to treat non-blocking lock as failure</div><div class='del'>-                                 * even if there is a single EAGAIN*/</div><div class='del'>-                                notlocked |= ans-&gt;mask;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            if (ans-&gt;op_errno == EAGAIN) {</div><div class='add'>+                switch (fop-&gt;uint32) {</div><div class='add'>+                    case EC_LOCK_MODE_NONE:</div><div class='add'>+                    case EC_LOCK_MODE_ALL:</div><div class='add'>+                        /* Goal is to treat non-blocking lock as failure</div><div class='add'>+                         * even if there is a single EAGAIN*/</div><div class='add'>+                        notlocked |= ans-&gt;mask;</div><div class='add'>+                        break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -63,24 +65,24 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask)</div><div class='ctx'>                 error = 0;</div><div class='ctx'>             } else {</div><div class='ctx'>                 switch (fop-&gt;uint32) {</div><div class='del'>-                case EC_LOCK_MODE_NONE:</div><div class='del'>-                    error = EAGAIN;</div><div class='del'>-                    break;</div><div class='add'>+                    case EC_LOCK_MODE_NONE:</div><div class='add'>+                        error = EAGAIN;</div><div class='add'>+                        break;</div><div class='ctx'> </div><div class='del'>-                case EC_LOCK_MODE_ALL:</div><div class='del'>-                    fop-&gt;uint32 = EC_LOCK_MODE_INC;</div><div class='del'>-                    break;</div><div class='add'>+                    case EC_LOCK_MODE_ALL:</div><div class='add'>+                        fop-&gt;uint32 = EC_LOCK_MODE_INC;</div><div class='add'>+                        break;</div><div class='ctx'> </div><div class='del'>-                default:</div><div class='del'>-                    error = EIO;</div><div class='del'>-                    break;</div><div class='add'>+                    default:</div><div class='add'>+                        error = EIO;</div><div class='add'>+                        break;</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>         } else {</div><div class='ctx'>             if (fop-&gt;answer &amp;&amp; fop-&gt;answer-&gt;op_ret &lt; 0)</div><div class='del'>-                    error = fop-&gt;answer-&gt;op_errno;</div><div class='add'>+                error = fop-&gt;answer-&gt;op_errno;</div><div class='ctx'>             else</div><div class='del'>-                    error = EIO;</div><div class='add'>+                error = EIO;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -89,28 +91,25 @@ int32_t ec_lock_check(ec_fop_data_t *fop, uintptr_t *mask)</div><div class='ctx'>     return error;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_lock_unlocked(call_frame_t * frame, void * cookie,</div><div class='del'>-                         xlator_t * this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                         dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_lock_unlocked(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    if (op_ret &lt; 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                EC_MSG_UNLOCK_FAILED,</div><div class='del'>-                "Failed to unlock an entry/inode");</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, EC_MSG_UNLOCK_FAILED,</div><div class='add'>+               "Failed to unlock an entry/inode");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_lock_lk_unlocked(call_frame_t * frame, void * cookie,</div><div class='del'>-                            xlator_t * this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                            struct gf_flock * flock, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_lock_lk_unlocked(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct gf_flock *flock,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    if (op_ret &lt; 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-               EC_MSG_LK_UNLOCK_FAILED,</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, EC_MSG_LK_UNLOCK_FAILED,</div><div class='ctx'>                "Failed to unlock an lk");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -119,11 +118,12 @@ int32_t ec_lock_lk_unlocked(call_frame_t * frame, void * cookie,</div><div class='ctx'> </div><div class='ctx'> /* FOP: entrylk */</div><div class='ctx'> </div><div class='del'>-int32_t ec_entrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -133,20 +133,16 @@ int32_t ec_entrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_ENTRYLK, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                       EC_MSG_DICT_REF_FAIL,</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='ctx'>                        "Failed to reference a "</div><div class='ctx'>                        "dictionary.");</div><div class='ctx'> </div><div class='hunk'>@@ -158,15 +154,15 @@ int32_t ec_entrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_entrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_entrylk(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -176,20 +172,19 @@ void ec_wind_entrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;entrylk_type, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_entrylk(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='del'>-            if (fop-&gt;entrylk_cmd == ENTRYLK_LOCK)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;entrylk_cmd == ENTRYLK_LOCK) {</div><div class='ctx'>                 fop-&gt;uint32 = EC_LOCK_MODE_ALL;</div><div class='ctx'>                 fop-&gt;entrylk_cmd = ENTRYLK_LOCK_NB;</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -201,15 +196,14 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             if (fop-&gt;entrylk_cmd != ENTRYLK_UNLOCK) {</div><div class='ctx'>                 uintptr_t mask;</div><div class='ctx'> </div><div class='del'>-                ec_fop_set_error (fop, ec_lock_check(fop, &amp;mask));</div><div class='add'>+                ec_fop_set_error(fop, ec_lock_check(fop, &amp;mask));</div><div class='ctx'>                 if (fop-&gt;error != 0) {</div><div class='ctx'>                     if (mask != 0) {</div><div class='ctx'>                         if (fop-&gt;id == GF_FOP_ENTRYLK) {</div><div class='del'>-                            ec_entrylk(fop-&gt;frame, fop-&gt;xl, mask, 1,</div><div class='del'>-                                       ec_lock_unlocked, NULL, fop-&gt;str[0],</div><div class='del'>-                                       &amp;fop-&gt;loc[0], fop-&gt;str[1],</div><div class='del'>-                                       ENTRYLK_UNLOCK, fop-&gt;entrylk_type,</div><div class='del'>-                                       fop-&gt;xdata);</div><div class='add'>+                            ec_entrylk(</div><div class='add'>+                                fop-&gt;frame, fop-&gt;xl, mask, 1, ec_lock_unlocked,</div><div class='add'>+                                NULL, fop-&gt;str[0], &amp;fop-&gt;loc[0], fop-&gt;str[1],</div><div class='add'>+                                ENTRYLK_UNLOCK, fop-&gt;entrylk_type, fop-&gt;xdata);</div><div class='ctx'>                         } else {</div><div class='ctx'>                             ec_fentrylk(fop-&gt;frame, fop-&gt;xl, mask, 1,</div><div class='ctx'>                                         ec_lock_unlocked, NULL, fop-&gt;str[0],</div><div class='hunk'>@@ -238,18 +232,13 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_ENTRYLK)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.entrylk != NULL)</div><div class='del'>-                {</div><div class='del'>-                    fop-&gt;cbks.entrylk(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='del'>-                                      cbk-&gt;op_ret, cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='add'>+            if (fop-&gt;id == GF_FOP_ENTRYLK) {</div><div class='add'>+                if (fop-&gt;cbks.entrylk != NULL) {</div><div class='add'>+                    fop-&gt;cbks.entrylk(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                      cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fentrylk != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fentrylk != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fentrylk(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='ctx'>                                        cbk-&gt;op_ret, cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -262,18 +251,13 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_ENTRYLK)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.entrylk != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_ENTRYLK) {</div><div class='add'>+                if (fop-&gt;cbks.entrylk != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.entrylk(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                       fop-&gt;error, NULL);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.fentrylk != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.fentrylk != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.fentrylk(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                        fop-&gt;error, NULL);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -282,25 +266,24 @@ int32_t ec_manager_entrylk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                int32_t minimum, fop_entrylk_cbk_t func, void * data,</div><div class='del'>-                const char * volume, loc_t * loc, const char * basename,</div><div class='del'>-                entrylk_cmd cmd, entrylk_type type, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_entrylk(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+           int32_t minimum, fop_entrylk_cbk_t func, void *data,</div><div class='add'>+           const char *volume, loc_t *loc, const char *basename,</div><div class='add'>+           entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .entrylk = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.entrylk = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(ENTRYLK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(ENTRYLK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -319,18 +302,16 @@ void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (volume != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(volume);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -338,9 +319,8 @@ void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (basename != NULL) {</div><div class='ctx'>         fop-&gt;str[1] = gf_strdup(basename);</div><div class='ctx'>         if (fop-&gt;str[1] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -348,10 +328,9 @@ void ec_entrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -369,11 +348,12 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: fentrylk */</div><div class='ctx'> </div><div class='del'>-int32_t ec_fentrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -383,22 +363,18 @@ int32_t ec_fentrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FENTRYLK, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                         "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -408,15 +384,15 @@ int32_t ec_fentrylk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_fentrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_fentrylk(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -426,24 +402,25 @@ void ec_wind_fentrylk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;entrylk_type, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-                 int32_t minimum, fop_fentrylk_cbk_t func, void * data,</div><div class='del'>-                 const char * volume, fd_t * fd, const char * basename,</div><div class='del'>-                 entrylk_cmd cmd, entrylk_type type, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_fentrylk(call_frame_t *frame, xlator_t *this, uintptr_t target,</div><div class='add'>+            int32_t minimum, fop_fentrylk_cbk_t func, void *data,</div><div class='add'>+            const char *volume, fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='add'>+            entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .fentrylk = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.fentrylk = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FENTRYLK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FENTRYLK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_FENTRYLK, 0, target,</div><div class='del'>-                               minimum, ec_wind_fentrylk, ec_manager_entrylk,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_FENTRYLK, 0, target, minimum,</div><div class='add'>+                               ec_wind_fentrylk, ec_manager_entrylk, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -456,9 +433,8 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (volume != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(volume);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -466,10 +442,9 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -477,9 +452,8 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (basename != NULL) {</div><div class='ctx'>         fop-&gt;str[1] = gf_strdup(basename);</div><div class='ctx'>         if (fop-&gt;str[1] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -487,10 +461,9 @@ void ec_fentrylk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -508,11 +481,12 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: inodelk */</div><div class='ctx'> </div><div class='del'>-int32_t ec_inodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -522,22 +496,18 @@ int32_t ec_inodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_INODELK, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -547,15 +517,15 @@ int32_t ec_inodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_inodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_inodelk(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -565,24 +535,22 @@ void ec_wind_inodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_inodelk(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='del'>-            fop-&gt;flock.l_len += ec_adjust_offset_down(fop-&gt;xl-&gt;private,</div><div class='del'>-                                                      &amp;fop-&gt;flock.l_start,</div><div class='del'>-                                                      _gf_true);</div><div class='add'>+            fop-&gt;flock.l_len += ec_adjust_offset_down(</div><div class='add'>+                fop-&gt;xl-&gt;private, &amp;fop-&gt;flock.l_start, _gf_true);</div><div class='ctx'>             ec_adjust_offset_up(fop-&gt;xl-&gt;private, &amp;fop-&gt;flock.l_len, _gf_true);</div><div class='del'>-            if ((fop-&gt;int32 == F_SETLKW) &amp;&amp; (fop-&gt;flock.l_type != F_UNLCK))</div><div class='del'>-            {</div><div class='add'>+            if ((fop-&gt;int32 == F_SETLKW) &amp;&amp; (fop-&gt;flock.l_type != F_UNLCK)) {</div><div class='ctx'>                 fop-&gt;uint32 = EC_LOCK_MODE_ALL;</div><div class='ctx'>                 fop-&gt;int32 = F_SETLK;</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -594,7 +562,7 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             if (fop-&gt;flock.l_type != F_UNLCK) {</div><div class='ctx'>                 uintptr_t mask;</div><div class='ctx'> </div><div class='del'>-                ec_fop_set_error (fop, ec_lock_check(fop, &amp;mask));</div><div class='add'>+                ec_fop_set_error(fop, ec_lock_check(fop, &amp;mask));</div><div class='ctx'>                 if (fop-&gt;error != 0) {</div><div class='ctx'>                     if (mask != 0) {</div><div class='ctx'>                         ec_t *ec = fop-&gt;xl-&gt;private;</div><div class='hunk'>@@ -641,18 +609,13 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_INODELK)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.inodelk != NULL)</div><div class='del'>-                {</div><div class='del'>-                    fop-&gt;cbks.inodelk(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='del'>-                                      cbk-&gt;op_ret, cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='add'>+            if (fop-&gt;id == GF_FOP_INODELK) {</div><div class='add'>+                if (fop-&gt;cbks.inodelk != NULL) {</div><div class='add'>+                    fop-&gt;cbks.inodelk(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='add'>+                                      cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.finodelk != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.finodelk != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.finodelk(fop-&gt;req_frame, fop, fop-&gt;xl,</div><div class='ctx'>                                        cbk-&gt;op_ret, cbk-&gt;op_errno, cbk-&gt;xdata);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -665,18 +628,13 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;id == GF_FOP_INODELK)</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.inodelk != NULL)</div><div class='del'>-                {</div><div class='add'>+            if (fop-&gt;id == GF_FOP_INODELK) {</div><div class='add'>+                if (fop-&gt;cbks.inodelk != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.inodelk(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                       fop-&gt;error, NULL);</div><div class='ctx'>                 }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if (fop-&gt;cbks.finodelk != NULL)</div><div class='del'>-                {</div><div class='add'>+            } else {</div><div class='add'>+                if (fop-&gt;cbks.finodelk != NULL) {</div><div class='ctx'>                     fop-&gt;cbks.finodelk(fop-&gt;req_frame, fop, fop-&gt;xl, -1,</div><div class='ctx'>                                        fop-&gt;error, NULL);</div><div class='ctx'>                 }</div><div class='hunk'>@@ -685,25 +643,24 @@ int32_t ec_manager_inodelk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='del'>-                 uintptr_t target, int32_t minimum, fop_inodelk_cbk_t func,</div><div class='del'>-                 void *data, const char *volume, loc_t *loc, int32_t cmd,</div><div class='del'>-                 struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_inodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='add'>+           uintptr_t target, int32_t minimum, fop_inodelk_cbk_t func,</div><div class='add'>+           void *data, const char *volume, loc_t *loc, int32_t cmd,</div><div class='add'>+           struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .inodelk = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.inodelk = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(INODELK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(INODELK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -717,23 +674,21 @@ void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     fop-&gt;int32 = cmd;</div><div class='del'>-    ec_owner_copy (fop-&gt;frame, owner);</div><div class='add'>+    ec_owner_copy(fop-&gt;frame, owner);</div><div class='ctx'> </div><div class='ctx'>     if (volume != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(volume);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     if (loc != NULL) {</div><div class='ctx'>         if (loc_copy(&amp;fop-&gt;loc[0], loc) != 0) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_LOC_COPY_FAIL,</div><div class='del'>-                    "Failed to copy a location.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_LOC_COPY_FAIL,</div><div class='add'>+                   "Failed to copy a location.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -753,10 +708,9 @@ void ec_inodelk (call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -774,11 +728,12 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: finodelk */</div><div class='ctx'> </div><div class='del'>-int32_t ec_finodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -788,22 +743,18 @@ int32_t ec_finodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_FINODELK, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -813,15 +764,15 @@ int32_t ec_finodelk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_finodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_finodelk(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -831,24 +782,25 @@ void ec_wind_finodelk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='del'>-                 uintptr_t target, int32_t minimum, fop_finodelk_cbk_t func,</div><div class='del'>-                 void *data, const char *volume, fd_t *fd, int32_t cmd,</div><div class='del'>-                 struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+void</div><div class='add'>+ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='add'>+            uintptr_t target, int32_t minimum, fop_finodelk_cbk_t func,</div><div class='add'>+            void *data, const char *volume, fd_t *fd, int32_t cmd,</div><div class='add'>+            struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .finodelk = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.finodelk = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(FINODELK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(FINODELK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-    fop = ec_fop_data_allocate(frame, this, GF_FOP_FINODELK, 0, target,</div><div class='del'>-                               minimum, ec_wind_finodelk, ec_manager_inodelk,</div><div class='del'>-                               callback, data);</div><div class='add'>+    fop = ec_fop_data_allocate(frame, this, GF_FOP_FINODELK, 0, target, minimum,</div><div class='add'>+                               ec_wind_finodelk, ec_manager_inodelk, callback,</div><div class='add'>+                               data);</div><div class='ctx'>     if (fop == NULL) {</div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='hunk'>@@ -856,14 +808,13 @@ void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='ctx'>     fop-&gt;use_fd = 1;</div><div class='ctx'> </div><div class='ctx'>     fop-&gt;int32 = cmd;</div><div class='del'>-    ec_owner_copy (fop-&gt;frame, owner);</div><div class='add'>+    ec_owner_copy(fop-&gt;frame, owner);</div><div class='ctx'> </div><div class='ctx'>     if (volume != NULL) {</div><div class='ctx'>         fop-&gt;str[0] = gf_strdup(volume);</div><div class='ctx'>         if (fop-&gt;str[0] == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                    EC_MSG_NO_MEMORY,</div><div class='del'>-                    "Failed to duplicate a string.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+                   "Failed to duplicate a string.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -871,10 +822,9 @@ void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -894,10 +844,9 @@ void ec_finodelk(call_frame_t *frame, xlator_t *this, gf_lkowner_t *owner,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -915,15 +864,13 @@ out:</div><div class='ctx'> </div><div class='ctx'> /* FOP: lk */</div><div class='ctx'> </div><div class='del'>-int32_t ec_combine_lk(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='del'>-                      ec_cbk_data_t * src)</div><div class='add'>+int32_t</div><div class='add'>+ec_combine_lk(ec_fop_data_t *fop, ec_cbk_data_t *dst, ec_cbk_data_t *src)</div><div class='ctx'> {</div><div class='del'>-    if (!ec_flock_compare(&amp;dst-&gt;flock, &amp;src-&gt;flock))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0,</div><div class='del'>-                EC_MSG_LOCK_MISMATCH,</div><div class='del'>-                "Mismatching lock in "</div><div class='del'>-                "answers of 'GF_FOP_LK'");</div><div class='add'>+    if (!ec_flock_compare(&amp;dst-&gt;flock, &amp;src-&gt;flock)) {</div><div class='add'>+        gf_msg(fop-&gt;xl-&gt;name, GF_LOG_NOTICE, 0, EC_MSG_LOCK_MISMATCH,</div><div class='add'>+               "Mismatching lock in "</div><div class='add'>+               "answers of 'GF_FOP_LK'");</div><div class='ctx'> </div><div class='ctx'>         return 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -931,12 +878,12 @@ int32_t ec_combine_lk(ec_fop_data_t * fop, ec_cbk_data_t * dst,</div><div class='ctx'>     return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_lk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct gf_flock * flock,</div><div class='del'>-                  dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+          int32_t op_errno, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='del'>-    ec_cbk_data_t * cbk = NULL;</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='add'>+    ec_cbk_data_t *cbk = NULL;</div><div class='ctx'>     int32_t idx = (int32_t)(uintptr_t)cookie;</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='hunk'>@@ -946,39 +893,32 @@ int32_t ec_lk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'> </div><div class='ctx'>     fop = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx,</div><div class='del'>-             frame, op_ret, op_errno);</div><div class='add'>+    ec_trace("CBK", fop, "idx=%d, frame=%p, op_ret=%d, op_errno=%d", idx, frame,</div><div class='add'>+             op_ret, op_errno);</div><div class='ctx'> </div><div class='ctx'>     cbk = ec_cbk_data_allocate(frame, this, fop, GF_FOP_LK, idx, op_ret,</div><div class='ctx'>                                op_errno);</div><div class='del'>-    if (cbk != NULL)</div><div class='del'>-    {</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-            if (flock != NULL)</div><div class='del'>-            {</div><div class='add'>+    if (cbk != NULL) {</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (flock != NULL) {</div><div class='ctx'>                 cbk-&gt;flock.l_type = flock-&gt;l_type;</div><div class='ctx'>                 cbk-&gt;flock.l_whence = flock-&gt;l_whence;</div><div class='ctx'>                 cbk-&gt;flock.l_start = flock-&gt;l_start;</div><div class='ctx'>                 cbk-&gt;flock.l_len = flock-&gt;l_len;</div><div class='ctx'>                 cbk-&gt;flock.l_pid = flock-&gt;l_pid;</div><div class='ctx'>                 cbk-&gt;flock.l_owner.len = flock-&gt;l_owner.len;</div><div class='del'>-                if (flock-&gt;l_owner.len &gt; 0)</div><div class='del'>-                {</div><div class='add'>+                if (flock-&gt;l_owner.len &gt; 0) {</div><div class='ctx'>                     memcpy(cbk-&gt;flock.l_owner.data, flock-&gt;l_owner.data,</div><div class='ctx'>                            flock-&gt;l_owner.len);</div><div class='ctx'>                 }</div><div class='ctx'>             }</div><div class='ctx'>         }</div><div class='del'>-        if (xdata != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (xdata != NULL) {</div><div class='ctx'>             cbk-&gt;xdata = dict_ref(xdata);</div><div class='del'>-            if (cbk-&gt;xdata == NULL)</div><div class='del'>-            {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                        "Failed to reference a "</div><div class='del'>-                        "dictionary.");</div><div class='add'>+            if (cbk-&gt;xdata == NULL) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                       "Failed to reference a "</div><div class='add'>+                       "dictionary.");</div><div class='ctx'> </div><div class='ctx'>                 goto out;</div><div class='ctx'>             }</div><div class='hunk'>@@ -988,15 +928,15 @@ int32_t ec_lk_cbk(call_frame_t * frame, void * cookie, xlator_t * this,</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-    if (fop != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (fop != NULL) {</div><div class='ctx'>         ec_complete(fop);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_wind_lk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='add'>+void</div><div class='add'>+ec_wind_lk(ec_t *ec, ec_fop_data_t *fop, int32_t idx)</div><div class='ctx'> {</div><div class='ctx'>     ec_trace("WIND", fop, "idx=%d", idx);</div><div class='ctx'> </div><div class='hunk'>@@ -1005,20 +945,19 @@ void ec_wind_lk(ec_t * ec, ec_fop_data_t * fop, int32_t idx)</div><div class='ctx'>                       fop-&gt;int32, &amp;fop-&gt;flock, fop-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state)</div><div class='add'>+int32_t</div><div class='add'>+ec_manager_lk(ec_fop_data_t *fop, int32_t state)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_data_t * cbk;</div><div class='add'>+    ec_cbk_data_t *cbk;</div><div class='ctx'> </div><div class='del'>-    switch (state)</div><div class='del'>-    {</div><div class='add'>+    switch (state) {</div><div class='ctx'>         case EC_STATE_INIT:</div><div class='del'>-            if ((fop-&gt;int32 == F_SETLKW) &amp;&amp; (fop-&gt;flock.l_type != F_UNLCK))</div><div class='del'>-            {</div><div class='add'>+            if ((fop-&gt;int32 == F_SETLKW) &amp;&amp; (fop-&gt;flock.l_type != F_UNLCK)) {</div><div class='ctx'>                 fop-&gt;uint32 = EC_LOCK_MODE_ALL;</div><div class='ctx'>                 fop-&gt;int32 = F_SETLK;</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-        /* Fall through */</div><div class='add'>+            /* Fall through */</div><div class='ctx'> </div><div class='ctx'>         case EC_STATE_DISPATCH:</div><div class='ctx'>             ec_dispatch_all(fop);</div><div class='hunk'>@@ -1030,7 +969,7 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>             if (fop-&gt;flock.l_type != F_UNLCK) {</div><div class='ctx'>                 uintptr_t mask;</div><div class='ctx'> </div><div class='del'>-                ec_fop_set_error (fop, ec_lock_check(fop, &amp;mask));</div><div class='add'>+                ec_fop_set_error(fop, ec_lock_check(fop, &amp;mask));</div><div class='ctx'>                 if (fop-&gt;error != 0) {</div><div class='ctx'>                     if (mask != 0) {</div><div class='ctx'>                         struct gf_flock flock = {0};</div><div class='hunk'>@@ -1040,11 +979,10 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>                         flock.l_start = fop-&gt;flock.l_start;</div><div class='ctx'>                         flock.l_len = fop-&gt;flock.l_len;</div><div class='ctx'>                         flock.l_pid = fop-&gt;flock.l_pid;</div><div class='del'>-                        lk_owner_copy (&amp;flock.l_owner, &amp;fop-&gt;flock.l_owner);</div><div class='add'>+                        lk_owner_copy(&amp;flock.l_owner, &amp;fop-&gt;flock.l_owner);</div><div class='ctx'> </div><div class='del'>-                        ec_lk(fop-&gt;frame, fop-&gt;xl, mask, 1,</div><div class='del'>-                              ec_lock_lk_unlocked, NULL, fop-&gt;fd, F_SETLK,</div><div class='del'>-                              &amp;flock, fop-&gt;xdata);</div><div class='add'>+                        ec_lk(fop-&gt;frame, fop-&gt;xl, mask, 1, ec_lock_lk_unlocked,</div><div class='add'>+                              NULL, fop-&gt;fd, F_SETLK, &amp;flock, fop-&gt;xdata);</div><div class='ctx'>                     }</div><div class='ctx'> </div><div class='ctx'>                     if (fop-&gt;error &lt; 0) {</div><div class='hunk'>@@ -1068,8 +1006,7 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'> </div><div class='ctx'>             GF_ASSERT(cbk != NULL);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.lk != NULL)</div><div class='del'>-            {</div><div class='add'>+            if (fop-&gt;cbks.lk != NULL) {</div><div class='ctx'>                 fop-&gt;cbks.lk(fop-&gt;req_frame, fop, fop-&gt;xl, cbk-&gt;op_ret,</div><div class='ctx'>                              cbk-&gt;op_errno, &amp;cbk-&gt;flock, cbk-&gt;xdata);</div><div class='ctx'>             }</div><div class='hunk'>@@ -1081,34 +1018,31 @@ int32_t ec_manager_lk(ec_fop_data_t * fop, int32_t state)</div><div class='ctx'>         case -EC_STATE_REPORT:</div><div class='ctx'>             GF_ASSERT(fop-&gt;error != 0);</div><div class='ctx'> </div><div class='del'>-            if (fop-&gt;cbks.lk != NULL)</div><div class='del'>-            {</div><div class='del'>-                fop-&gt;cbks.lk(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error,</div><div class='del'>-                             NULL, NULL);</div><div class='add'>+            if (fop-&gt;cbks.lk != NULL) {</div><div class='add'>+                fop-&gt;cbks.lk(fop-&gt;req_frame, fop, fop-&gt;xl, -1, fop-&gt;error, NULL,</div><div class='add'>+                             NULL);</div><div class='ctx'>             }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-            gf_msg (fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                    EC_MSG_UNHANDLED_STATE,</div><div class='del'>-                    "Unhandled state %d for %s",</div><div class='del'>-                    state, ec_fop_name(fop-&gt;id));</div><div class='add'>+            gf_msg(fop-&gt;xl-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_UNHANDLED_STATE,</div><div class='add'>+                   "Unhandled state %d for %s", state, ec_fop_name(fop-&gt;id));</div><div class='ctx'> </div><div class='ctx'>             return EC_STATE_END;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='del'>-           int32_t minimum, fop_lk_cbk_t func, void * data, fd_t * fd,</div><div class='del'>-           int32_t cmd, struct gf_flock * flock, dict_t * xdata)</div><div class='add'>+void</div><div class='add'>+ec_lk(call_frame_t *frame, xlator_t *this, uintptr_t target, int32_t minimum,</div><div class='add'>+      fop_lk_cbk_t func, void *data, fd_t *fd, int32_t cmd,</div><div class='add'>+      struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_cbk_t callback = { .lk = func };</div><div class='del'>-    ec_fop_data_t * fop = NULL;</div><div class='add'>+    ec_cbk_t callback = {.lk = func};</div><div class='add'>+    ec_fop_data_t *fop = NULL;</div><div class='ctx'>     int32_t error = ENOMEM;</div><div class='ctx'> </div><div class='del'>-    gf_msg_trace ("ec", 0, "EC(LK) %p", frame);</div><div class='add'>+    gf_msg_trace("ec", 0, "EC(LK) %p", frame);</div><div class='ctx'> </div><div class='ctx'>     VALIDATE_OR_GOTO(this, out);</div><div class='ctx'>     GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='hunk'>@@ -1127,10 +1061,9 @@ void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (fd != NULL) {</div><div class='ctx'>         fop-&gt;fd = fd_ref(fd);</div><div class='ctx'>         if (fop-&gt;fd == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_FILE_DESC_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "file descriptor.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_FILE_DESC_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "file descriptor.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='hunk'>@@ -1150,10 +1083,9 @@ void ec_lk(call_frame_t * frame, xlator_t * this, uintptr_t target,</div><div class='ctx'>     if (xdata != NULL) {</div><div class='ctx'>         fop-&gt;xdata = dict_ref(xdata);</div><div class='ctx'>         if (fop-&gt;xdata == NULL) {</div><div class='del'>-            gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                    EC_MSG_DICT_REF_FAIL,</div><div class='del'>-                    "Failed to reference a "</div><div class='del'>-                    "dictionary.");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_DICT_REF_FAIL,</div><div class='add'>+                   "Failed to reference a "</div><div class='add'>+                   "dictionary.");</div><div class='ctx'> </div><div class='ctx'>             goto out;</div><div class='ctx'>         }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec-method.c b/xlators/cluster/ec/src/ec-method.c<br/>index fdc89391bfb..3aff6b096bd 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-method.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec-method.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec-method.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec-method.c</a></div><div class='hunk'>@@ -88,11 +88,9 @@ ec_method_matrix_init(ec_matrix_list_t *list, ec_matrix_t *matrix,</div><div class='ctx'>                                  matrix-&gt;rows);</div><div class='ctx'>         for (i = 0; i &lt; matrix-&gt;rows; i++) {</div><div class='ctx'>             matrix-&gt;row_data[i].values = matrix-&gt;values + i * matrix-&gt;columns;</div><div class='del'>-            matrix-&gt;row_data[i].func.interleaved =</div><div class='del'>-                ec_code_build_interleaved(matrix-&gt;code,</div><div class='del'>-                                          EC_METHOD_WORD_SIZE,</div><div class='del'>-                                          matrix-&gt;row_data[i].values,</div><div class='del'>-                                          matrix-&gt;columns);</div><div class='add'>+            matrix-&gt;row_data[i].func.interleaved = ec_code_build_interleaved(</div><div class='add'>+                matrix-&gt;code, EC_METHOD_WORD_SIZE, matrix-&gt;row_data[i].values,</div><div class='add'>+                matrix-&gt;columns);</div><div class='ctx'>         }</div><div class='ctx'>     } else {</div><div class='ctx'>         matrix-&gt;rows = list-&gt;rows;</div><div class='hunk'>@@ -100,10 +98,9 @@ ec_method_matrix_init(ec_matrix_list_t *list, ec_matrix_t *matrix,</div><div class='ctx'>                                 matrix-&gt;columns, rows, matrix-&gt;rows);</div><div class='ctx'>         for (i = 0; i &lt; matrix-&gt;rows; i++) {</div><div class='ctx'>             matrix-&gt;row_data[i].values = matrix-&gt;values + i * matrix-&gt;columns;</div><div class='del'>-            matrix-&gt;row_data[i].func.linear =</div><div class='del'>-                ec_code_build_linear(matrix-&gt;code, EC_METHOD_WORD_SIZE,</div><div class='del'>-                                     matrix-&gt;row_data[i].values,</div><div class='del'>-                                     matrix-&gt;columns);</div><div class='add'>+            matrix-&gt;row_data[i].func.linear = ec_code_build_linear(</div><div class='add'>+                matrix-&gt;code, EC_METHOD_WORD_SIZE, matrix-&gt;row_data[i].values,</div><div class='add'>+                matrix-&gt;columns);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='hunk'>@@ -266,8 +263,8 @@ ec_method_setup(xlator_t *xl, ec_matrix_list_t *list, const char *gen)</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='ctx'>     matrix = GF_MALLOC(sizeof(ec_matrix_t) +</div><div class='del'>-                       sizeof(ec_matrix_row_t) * list-&gt;rows +</div><div class='del'>-                       sizeof(uint32_t) * list-&gt;columns * list-&gt;rows,</div><div class='add'>+                           sizeof(ec_matrix_row_t) * list-&gt;rows +</div><div class='add'>+                           sizeof(uint32_t) * list-&gt;columns * list-&gt;rows,</div><div class='ctx'>                        ec_mt_ec_matrix_t);</div><div class='ctx'>     if (matrix == NULL) {</div><div class='ctx'>         err = -ENOMEM;</div><div class='hunk'>@@ -310,9 +307,10 @@ ec_method_init(xlator_t *xl, ec_matrix_list_t *list, uint32_t columns,</div><div class='ctx'>     INIT_LIST_HEAD(&amp;list-&gt;lru);</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    list-&gt;pool = mem_pool_new_fn(xl-&gt;ctx, sizeof(ec_matrix_t) +</div><div class='del'>-                                 sizeof(ec_matrix_row_t) * columns +</div><div class='del'>-                                 sizeof(uint32_t) * columns * columns,</div><div class='add'>+    list-&gt;pool = mem_pool_new_fn(xl-&gt;ctx,</div><div class='add'>+                                 sizeof(ec_matrix_t) +</div><div class='add'>+                                     sizeof(ec_matrix_row_t) * columns +</div><div class='add'>+                                     sizeof(uint32_t) * columns * columns,</div><div class='ctx'>                                  128, "ec_matrix_t");</div><div class='ctx'>     if (list-&gt;pool == NULL) {</div><div class='ctx'>         err = -ENOMEM;</div><div class='hunk'>@@ -370,8 +368,8 @@ ec_method_fini(ec_matrix_list_t *list)</div><div class='ctx'> </div><div class='ctx'>     GF_ASSERT(list-&gt;count == 0);</div><div class='ctx'> </div><div class='del'>-    if (list-&gt;pool)/*Init was successful*/</div><div class='del'>-            LOCK_DESTROY(&amp;list-&gt;lock);</div><div class='add'>+    if (list-&gt;pool) /*Init was successful*/</div><div class='add'>+        LOCK_DESTROY(&amp;list-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>     ec_method_matrix_release(list-&gt;encode);</div><div class='ctx'>     GF_FREE(list-&gt;encode);</div><div class='hunk'>@@ -402,9 +400,8 @@ ec_method_encode(ec_matrix_list_t *list, size_t size, void *in, void **out)</div><div class='ctx'>     matrix = list-&gt;encode;</div><div class='ctx'>     for (pos = 0; pos &lt; size; pos += list-&gt;stripe) {</div><div class='ctx'>         for (i = 0; i &lt; matrix-&gt;rows; i++) {</div><div class='del'>-            matrix-&gt;row_data[i].func.linear(out[i], in, pos,</div><div class='del'>-                                            matrix-&gt;row_data[i].values,</div><div class='del'>-                                            list-&gt;columns);</div><div class='add'>+            matrix-&gt;row_data[i].func.linear(</div><div class='add'>+                out[i], in, pos, matrix-&gt;row_data[i].values, list-&gt;columns);</div><div class='ctx'>             out[i] += EC_METHOD_CHUNK_SIZE;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='hunk'>@@ -424,9 +421,8 @@ ec_method_decode(ec_matrix_list_t *list, size_t size, uintptr_t mask,</div><div class='ctx'>     }</div><div class='ctx'>     for (pos = 0; pos &lt; size; pos += EC_METHOD_CHUNK_SIZE) {</div><div class='ctx'>         for (i = 0; i &lt; matrix-&gt;rows; i++) {</div><div class='del'>-            matrix-&gt;row_data[i].func.interleaved(out, in, pos,</div><div class='del'>-                                                 matrix-&gt;row_data[i].values,</div><div class='del'>-                                                 list-&gt;columns);</div><div class='add'>+            matrix-&gt;row_data[i].func.interleaved(</div><div class='add'>+                out, in, pos, matrix-&gt;row_data[i].values, list-&gt;columns);</div><div class='ctx'>             out += EC_METHOD_CHUNK_SIZE;</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='head'>diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c<br/>index a82305104c5..0350325d6fb 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/ec/src/ec.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/ec/src/ec.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/ec/src/ec.c</a></div><div class='hunk'>@@ -26,47 +26,45 @@</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='ctx'> static char *ec_read_policies[EC_READ_POLICY_MAX + 1] = {</div><div class='del'>-        [EC_ROUND_ROBIN] = "round-robin",</div><div class='del'>-        [EC_GFID_HASH] = "gfid-hash",</div><div class='del'>-        [EC_READ_POLICY_MAX] = NULL</div><div class='del'>-};</div><div class='add'>+    [EC_ROUND_ROBIN] = "round-robin",</div><div class='add'>+    [EC_GFID_HASH] = "gfid-hash",</div><div class='add'>+    [EC_READ_POLICY_MAX] = NULL};</div><div class='ctx'> </div><div class='ctx'> #define EC_INTERNAL_XATTR_OR_GOTO(name, xattr, op_errno, label)                \</div><div class='del'>-        do {                                                                   \</div><div class='del'>-                if (ec_is_internal_xattr (NULL, (char *)name, NULL, NULL)) {   \</div><div class='del'>-                        op_errno = EPERM;                                      \</div><div class='del'>-                        goto label;                                            \</div><div class='del'>-                }                                                              \</div><div class='del'>-                if (name &amp;&amp; (strlen (name) == 0) &amp;&amp; xattr) {                   \</div><div class='del'>-                        /* Bulk [f]removexattr/[f]setxattr */                  \</div><div class='del'>-                        GF_IF_INTERNAL_XATTR_GOTO (EC_XATTR_PREFIX"*", xattr,  \</div><div class='del'>-                                                   op_errno, label);           \</div><div class='del'>-                }                                                              \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-int32_t ec_parse_options(xlator_t * this)</div><div class='del'>-{</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (ec_is_internal_xattr(NULL, (char *)name, NULL, NULL)) {            \</div><div class='add'>+            op_errno = EPERM;                                                  \</div><div class='add'>+            goto label;                                                        \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        if (name &amp;&amp; (strlen(name) == 0) &amp;&amp; xattr) {                            \</div><div class='add'>+            /* Bulk [f]removexattr/[f]setxattr */                              \</div><div class='add'>+            GF_IF_INTERNAL_XATTR_GOTO(EC_XATTR_PREFIX "*", xattr, op_errno,    \</div><div class='add'>+                                      label);                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+ec_parse_options(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'>     int32_t error = EINVAL;</div><div class='ctx'>     uintptr_t mask;</div><div class='ctx'> </div><div class='ctx'>     GF_OPTION_INIT("redundancy", ec-&gt;redundancy, int32, out);</div><div class='ctx'>     ec-&gt;fragments = ec-&gt;nodes - ec-&gt;redundancy;</div><div class='ctx'>     if ((ec-&gt;redundancy &lt; 1) || (ec-&gt;redundancy &gt;= ec-&gt;fragments) ||</div><div class='del'>-        (ec-&gt;fragments &gt; EC_MAX_FRAGMENTS))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_INVALID_REDUNDANCY,</div><div class='del'>-                "Invalid redundancy (must be between "</div><div class='del'>-                "1 and %d)", (ec-&gt;nodes - 1) / 2);</div><div class='add'>+        (ec-&gt;fragments &gt; EC_MAX_FRAGMENTS)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_INVALID_REDUNDANCY,</div><div class='add'>+               "Invalid redundancy (must be between "</div><div class='add'>+               "1 and %d)",</div><div class='add'>+               (ec-&gt;nodes - 1) / 2);</div><div class='ctx'> </div><div class='ctx'>         goto out;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ec-&gt;bits_for_nodes = 1;</div><div class='ctx'>     mask = 2;</div><div class='del'>-    while (ec-&gt;nodes &gt; mask)</div><div class='del'>-    {</div><div class='add'>+    while (ec-&gt;nodes &gt; mask) {</div><div class='ctx'>         ec-&gt;bits_for_nodes++;</div><div class='ctx'>         mask &lt;&lt;= 1;</div><div class='ctx'>     }</div><div class='hunk'>@@ -74,9 +72,10 @@ int32_t ec_parse_options(xlator_t * this)</div><div class='ctx'>     ec-&gt;fragment_size = EC_METHOD_CHUNK_SIZE;</div><div class='ctx'>     ec-&gt;stripe_size = ec-&gt;fragment_size * ec-&gt;fragments;</div><div class='ctx'> </div><div class='del'>-    gf_msg_debug ("ec", 0, "Initialized with: nodes=%u, fragments=%u, "</div><div class='del'>-                               "stripe_size=%u, node_mask=%lX",</div><div class='del'>-           ec-&gt;nodes, ec-&gt;fragments, ec-&gt;stripe_size, ec-&gt;node_mask);</div><div class='add'>+    gf_msg_debug("ec", 0,</div><div class='add'>+                 "Initialized with: nodes=%u, fragments=%u, "</div><div class='add'>+                 "stripe_size=%u, node_mask=%lX",</div><div class='add'>+                 ec-&gt;nodes, ec-&gt;fragments, ec-&gt;stripe_size, ec-&gt;node_mask);</div><div class='ctx'> </div><div class='ctx'>     error = 0;</div><div class='ctx'> </div><div class='hunk'>@@ -84,30 +83,28 @@ out:</div><div class='ctx'>     return error;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_prepare_childs(xlator_t * this)</div><div class='add'>+int32_t</div><div class='add'>+ec_prepare_childs(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='del'>-    xlator_list_t * child = NULL;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    xlator_list_t *child = NULL;</div><div class='ctx'>     int32_t count = 0;</div><div class='ctx'> </div><div class='del'>-    for (child = this-&gt;children; child != NULL; child = child-&gt;next)</div><div class='del'>-    {</div><div class='add'>+    for (child = this-&gt;children; child != NULL; child = child-&gt;next) {</div><div class='ctx'>         count++;</div><div class='ctx'>     }</div><div class='del'>-    if (count &gt; EC_MAX_NODES)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_TOO_MANY_SUBVOLS, "Too many subvolumes");</div><div class='add'>+    if (count &gt; EC_MAX_NODES) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_TOO_MANY_SUBVOLS,</div><div class='add'>+               "Too many subvolumes");</div><div class='ctx'> </div><div class='ctx'>         return EINVAL;</div><div class='ctx'>     }</div><div class='ctx'>     ec-&gt;nodes = count;</div><div class='ctx'> </div><div class='ctx'>     ec-&gt;xl_list = GF_CALLOC(count, sizeof(ec-&gt;xl_list[0]), ec_mt_xlator_t);</div><div class='del'>-    if (ec-&gt;xl_list == NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Allocation of xlator list failed");</div><div class='add'>+    if (ec-&gt;xl_list == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Allocation of xlator list failed");</div><div class='ctx'> </div><div class='ctx'>         return ENOMEM;</div><div class='ctx'>     }</div><div class='hunk'>@@ -115,8 +112,7 @@ int32_t ec_prepare_childs(xlator_t * this)</div><div class='ctx'>     ec-&gt;xl_up_count = 0;</div><div class='ctx'> </div><div class='ctx'>     count = 0;</div><div class='del'>-    for (child = this-&gt;children; child != NULL; child = child-&gt;next)</div><div class='del'>-    {</div><div class='add'>+    for (child = this-&gt;children; child != NULL; child = child-&gt;next) {</div><div class='ctx'>         ec-&gt;xl_list[count++] = child-&gt;xlator;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -125,43 +121,42 @@ int32_t ec_prepare_childs(xlator_t * this)</div><div class='ctx'> </div><div class='ctx'> /* This function transforms the subvol to subvol-id*/</div><div class='ctx'> static int</div><div class='del'>-_subvol_to_subvolid (dict_t *this, char *key, data_t *value, void *data)</div><div class='del'>-{</div><div class='del'>-        ec_t *ec = data;</div><div class='del'>-        xlator_t *subvol = NULL;</div><div class='del'>-        int      i = 0;</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        subvol = data_to_ptr (value);</div><div class='del'>-        for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='del'>-                if (ec-&gt;xl_list[i] == subvol) {</div><div class='del'>-                        ret = dict_set_int32 (this, key, i);</div><div class='del'>-                        /* -1 stops dict_foreach and returns -1*/</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+_subvol_to_subvolid(dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+{</div><div class='add'>+    ec_t *ec = data;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    subvol = data_to_ptr(value);</div><div class='add'>+    for (i = 0; i &lt; ec-&gt;nodes; i++) {</div><div class='add'>+        if (ec-&gt;xl_list[i] == subvol) {</div><div class='add'>+            ret = dict_set_int32(this, key, i);</div><div class='add'>+            /* -1 stops dict_foreach and returns -1*/</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_subvol_to_subvol_id_transform (ec_t *ec, dict_t *leaf_to_subvolid)</div><div class='add'>+ec_subvol_to_subvol_id_transform(ec_t *ec, dict_t *leaf_to_subvolid)</div><div class='ctx'> {</div><div class='del'>-        return dict_foreach (leaf_to_subvolid, _subvol_to_subvolid, ec);</div><div class='add'>+    return dict_foreach(leaf_to_subvolid, _subvol_to_subvolid, ec);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void __ec_destroy_private(xlator_t * this)</div><div class='add'>+void</div><div class='add'>+__ec_destroy_private(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-    ec_t * ec = this-&gt;private;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-    if (ec != NULL)</div><div class='del'>-    {</div><div class='add'>+    if (ec != NULL) {</div><div class='ctx'>         LOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (ec-&gt;timer != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (ec-&gt;timer != NULL) {</div><div class='ctx'>             gf_timer_call_cancel(this-&gt;ctx, ec-&gt;timer);</div><div class='ctx'>             ec-&gt;timer = NULL;</div><div class='ctx'>         }</div><div class='hunk'>@@ -179,31 +174,27 @@ void __ec_destroy_private(xlator_t * this)</div><div class='ctx'>         sleep(2);</div><div class='ctx'> </div><div class='ctx'>         this-&gt;private = NULL;</div><div class='del'>-        if (ec-&gt;xl_list != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (ec-&gt;xl_list != NULL) {</div><div class='ctx'>             GF_FREE(ec-&gt;xl_list);</div><div class='ctx'>             ec-&gt;xl_list = NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ec-&gt;fop_pool != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (ec-&gt;fop_pool != NULL) {</div><div class='ctx'>             mem_pool_destroy(ec-&gt;fop_pool);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ec-&gt;cbk_pool != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (ec-&gt;cbk_pool != NULL) {</div><div class='ctx'>             mem_pool_destroy(ec-&gt;cbk_pool);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ec-&gt;lock_pool != NULL)</div><div class='del'>-        {</div><div class='add'>+        if (ec-&gt;lock_pool != NULL) {</div><div class='ctx'>             mem_pool_destroy(ec-&gt;lock_pool);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         LOCK_DESTROY(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>         if (ec-&gt;leaf_to_subvolid)</div><div class='del'>-                dict_unref (ec-&gt;leaf_to_subvolid);</div><div class='add'>+            dict_unref(ec-&gt;leaf_to_subvolid);</div><div class='ctx'> </div><div class='ctx'>         ec_method_fini(&amp;ec-&gt;matrix);</div><div class='ctx'> </div><div class='hunk'>@@ -211,13 +202,13 @@ void __ec_destroy_private(xlator_t * this)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t mem_acct_init(xlator_t * this)</div><div class='add'>+int32_t</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-    if (xlator_mem_acct_init(this, ec_mt_end + 1) != 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Memory accounting initialization "</div><div class='del'>-                                         "failed.");</div><div class='add'>+    if (xlator_mem_acct_init(this, ec_mt_end + 1) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Memory accounting initialization "</div><div class='add'>+               "failed.");</div><div class='ctx'> </div><div class='ctx'>         return -1;</div><div class='ctx'>     }</div><div class='hunk'>@@ -226,442 +217,435 @@ int32_t mem_acct_init(xlator_t * this)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_configure_background_heal_opts (ec_t *ec, int background_heals,</div><div class='del'>-                                   int heal_wait_qlen)</div><div class='add'>+ec_configure_background_heal_opts(ec_t *ec, int background_heals,</div><div class='add'>+                                  int heal_wait_qlen)</div><div class='ctx'> {</div><div class='del'>-        if (background_heals == 0) {</div><div class='del'>-                ec-&gt;heal_wait_qlen = 0;</div><div class='del'>-        } else {</div><div class='del'>-                ec-&gt;heal_wait_qlen = heal_wait_qlen;</div><div class='del'>-        }</div><div class='del'>-        ec-&gt;background_heals = background_heals;</div><div class='add'>+    if (background_heals == 0) {</div><div class='add'>+        ec-&gt;heal_wait_qlen = 0;</div><div class='add'>+    } else {</div><div class='add'>+        ec-&gt;heal_wait_qlen = heal_wait_qlen;</div><div class='add'>+    }</div><div class='add'>+    ec-&gt;background_heals = background_heals;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_assign_read_policy (ec_t *ec, char *read_policy)</div><div class='add'>+ec_assign_read_policy(ec_t *ec, char *read_policy)</div><div class='ctx'> {</div><div class='del'>-        int read_policy_idx = -1;</div><div class='add'>+    int read_policy_idx = -1;</div><div class='ctx'> </div><div class='del'>-        read_policy_idx = gf_get_index_by_elem (ec_read_policies, read_policy);</div><div class='del'>-        if (read_policy_idx &lt; 0 || read_policy_idx &gt;= EC_READ_POLICY_MAX)</div><div class='del'>-                return -1;</div><div class='add'>+    read_policy_idx = gf_get_index_by_elem(ec_read_policies, read_policy);</div><div class='add'>+    if (read_policy_idx &lt; 0 || read_policy_idx &gt;= EC_READ_POLICY_MAX)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ec-&gt;read_policy = read_policy_idx;</div><div class='del'>-        return 0;</div><div class='add'>+    ec-&gt;read_policy = read_policy_idx;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='del'>-{</div><div class='del'>-        ec_t     *ec              = this-&gt;private;</div><div class='del'>-        char     *read_policy     = NULL;</div><div class='del'>-        char     *extensions      = NULL;</div><div class='del'>-        uint32_t heal_wait_qlen   = 0;</div><div class='del'>-        uint32_t background_heals = 0;</div><div class='del'>-        int32_t  ret              = -1;</div><div class='del'>-        int32_t  err;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("cpu-extensions", extensions, options, str, failed);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("self-heal-daemon", ec-&gt;shd.enabled, options, bool,</div><div class='del'>-                          failed);</div><div class='del'>-        GF_OPTION_RECONF ("iam-self-heal-daemon", ec-&gt;shd.iamshd, options,</div><div class='del'>-                          bool, failed);</div><div class='del'>-        GF_OPTION_RECONF ("eager-lock", ec-&gt;eager_lock, options,</div><div class='del'>-                          bool, failed);</div><div class='del'>-        GF_OPTION_RECONF ("other-eager-lock", ec-&gt;other_eager_lock, options,</div><div class='del'>-                          bool, failed);</div><div class='del'>-        GF_OPTION_RECONF ("eager-lock-timeout", ec-&gt;eager_lock_timeout,</div><div class='del'>-                          options, uint32, failed);</div><div class='del'>-        GF_OPTION_RECONF ("other-eager-lock-timeout",</div><div class='del'>-                          ec-&gt;other_eager_lock_timeout, options, uint32,</div><div class='del'>-                          failed);</div><div class='del'>-        GF_OPTION_RECONF ("background-heals", background_heals, options,</div><div class='del'>-                          uint32, failed);</div><div class='del'>-        GF_OPTION_RECONF ("heal-wait-qlength", heal_wait_qlen, options,</div><div class='del'>-                          uint32, failed);</div><div class='del'>-        GF_OPTION_RECONF ("self-heal-window-size", ec-&gt;self_heal_window_size,</div><div class='del'>-                          options, uint32, failed);</div><div class='del'>-        GF_OPTION_RECONF ("heal-timeout", ec-&gt;shd.timeout, options,</div><div class='del'>-                          int32, failed);</div><div class='del'>-        ec_configure_background_heal_opts (ec, background_heals,</div><div class='del'>-                                           heal_wait_qlen);</div><div class='del'>-        GF_OPTION_RECONF ("shd-max-threads", ec-&gt;shd.max_threads,</div><div class='del'>-                          options, uint32, failed);</div><div class='del'>-        GF_OPTION_RECONF ("shd-wait-qlength", ec-&gt;shd.wait_qlength,</div><div class='del'>-                          options, uint32, failed);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("read-policy", read_policy, options, str, failed);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("optimistic-change-log", ec-&gt;optimistic_changelog,</div><div class='del'>-                          options, bool, failed);</div><div class='del'>-        GF_OPTION_RECONF ("parallel-writes", ec-&gt;parallel_writes,</div><div class='del'>-                          options, bool, failed);</div><div class='del'>-        GF_OPTION_RECONF ("stripe-cache", ec-&gt;stripe_cache, options, uint32,</div><div class='del'>-                          failed);</div><div class='del'>-        ret = 0;</div><div class='del'>-        if (ec_assign_read_policy (ec, read_policy)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    char *read_policy = NULL;</div><div class='add'>+    char *extensions = NULL;</div><div class='add'>+    uint32_t heal_wait_qlen = 0;</div><div class='add'>+    uint32_t background_heals = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t err;</div><div class='ctx'> </div><div class='del'>-        err = ec_method_update(this, &amp;ec-&gt;matrix, extensions);</div><div class='del'>-        if (err != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_RECONF("cpu-extensions", extensions, options, str, failed);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("self-heal-daemon", ec-&gt;shd.enabled, options, bool,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("iam-self-heal-daemon", ec-&gt;shd.iamshd, options, bool,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("eager-lock", ec-&gt;eager_lock, options, bool, failed);</div><div class='add'>+    GF_OPTION_RECONF("other-eager-lock", ec-&gt;other_eager_lock, options, bool,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("eager-lock-timeout", ec-&gt;eager_lock_timeout, options,</div><div class='add'>+                     uint32, failed);</div><div class='add'>+    GF_OPTION_RECONF("other-eager-lock-timeout", ec-&gt;other_eager_lock_timeout,</div><div class='add'>+                     options, uint32, failed);</div><div class='add'>+    GF_OPTION_RECONF("background-heals", background_heals, options, uint32,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("heal-wait-qlength", heal_wait_qlen, options, uint32,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("self-heal-window-size", ec-&gt;self_heal_window_size,</div><div class='add'>+                     options, uint32, failed);</div><div class='add'>+    GF_OPTION_RECONF("heal-timeout", ec-&gt;shd.timeout, options, int32, failed);</div><div class='add'>+    ec_configure_background_heal_opts(ec, background_heals, heal_wait_qlen);</div><div class='add'>+    GF_OPTION_RECONF("shd-max-threads", ec-&gt;shd.max_threads, options, uint32,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("shd-wait-qlength", ec-&gt;shd.wait_qlength, options, uint32,</div><div class='add'>+                     failed);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("read-policy", read_policy, options, str, failed);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("optimistic-change-log", ec-&gt;optimistic_changelog, options,</div><div class='add'>+                     bool, failed);</div><div class='add'>+    GF_OPTION_RECONF("parallel-writes", ec-&gt;parallel_writes, options, bool,</div><div class='add'>+                     failed);</div><div class='add'>+    GF_OPTION_RECONF("stripe-cache", ec-&gt;stripe_cache, options, uint32, failed);</div><div class='add'>+    ret = 0;</div><div class='add'>+    if (ec_assign_read_policy(ec, read_policy)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    err = ec_method_update(this, &amp;ec-&gt;matrix, extensions);</div><div class='add'>+    if (err != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> failed:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> glusterfs_event_t</div><div class='del'>-ec_get_event_from_state (ec_t *ec)</div><div class='del'>-{</div><div class='del'>-        int               down_count = 0;</div><div class='del'>-</div><div class='del'>-        if (ec-&gt;xl_up_count &gt;= ec-&gt;fragments) {</div><div class='del'>-                /* If ec is up but some subvolumes are yet to notify, give</div><div class='del'>-                 * grace time for other subvols to notify to prevent start of</div><div class='del'>-                 * I/O which may result in self-heals */</div><div class='del'>-                if (ec-&gt;xl_notify_count &lt; ec-&gt;nodes)</div><div class='del'>-                        return GF_EVENT_MAXVAL;</div><div class='del'>-</div><div class='del'>-                return GF_EVENT_CHILD_UP;</div><div class='del'>-        } else {</div><div class='del'>-                down_count = ec-&gt;xl_notify_count - ec-&gt;xl_up_count;</div><div class='del'>-                if (down_count &gt; ec-&gt;redundancy)</div><div class='del'>-                        return GF_EVENT_CHILD_DOWN;</div><div class='del'>-        }</div><div class='add'>+ec_get_event_from_state(ec_t *ec)</div><div class='add'>+{</div><div class='add'>+    int down_count = 0;</div><div class='add'>+</div><div class='add'>+    if (ec-&gt;xl_up_count &gt;= ec-&gt;fragments) {</div><div class='add'>+        /* If ec is up but some subvolumes are yet to notify, give</div><div class='add'>+         * grace time for other subvols to notify to prevent start of</div><div class='add'>+         * I/O which may result in self-heals */</div><div class='add'>+        if (ec-&gt;xl_notify_count &lt; ec-&gt;nodes)</div><div class='add'>+            return GF_EVENT_MAXVAL;</div><div class='add'>+</div><div class='add'>+        return GF_EVENT_CHILD_UP;</div><div class='add'>+    } else {</div><div class='add'>+        down_count = ec-&gt;xl_notify_count - ec-&gt;xl_up_count;</div><div class='add'>+        if (down_count &gt; ec-&gt;redundancy)</div><div class='add'>+            return GF_EVENT_CHILD_DOWN;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return GF_EVENT_MAXVAL;</div><div class='add'>+    return GF_EVENT_MAXVAL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_up (xlator_t *this, ec_t *ec)</div><div class='add'>+ec_up(xlator_t *this, ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        if (ec-&gt;timer != NULL) {</div><div class='del'>-                gf_timer_call_cancel (this-&gt;ctx, ec-&gt;timer);</div><div class='del'>-                ec-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ec-&gt;timer != NULL) {</div><div class='add'>+        gf_timer_call_cancel(this-&gt;ctx, ec-&gt;timer);</div><div class='add'>+        ec-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ec-&gt;up = 1;</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, EC_MSG_EC_UP, "Going UP");</div><div class='add'>+    ec-&gt;up = 1;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, EC_MSG_EC_UP, "Going UP");</div><div class='ctx'> </div><div class='del'>-        gf_event (EVENT_EC_MIN_BRICKS_UP, "subvol=%s", this-&gt;name);</div><div class='add'>+    gf_event(EVENT_EC_MIN_BRICKS_UP, "subvol=%s", this-&gt;name);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_down (xlator_t *this, ec_t *ec)</div><div class='add'>+ec_down(xlator_t *this, ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        if (ec-&gt;timer != NULL) {</div><div class='del'>-                gf_timer_call_cancel(this-&gt;ctx, ec-&gt;timer);</div><div class='del'>-                ec-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ec-&gt;timer != NULL) {</div><div class='add'>+        gf_timer_call_cancel(this-&gt;ctx, ec-&gt;timer);</div><div class='add'>+        ec-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ec-&gt;up = 0;</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, EC_MSG_EC_DOWN, "Going DOWN");</div><div class='add'>+    ec-&gt;up = 0;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, EC_MSG_EC_DOWN, "Going DOWN");</div><div class='ctx'> </div><div class='del'>-        gf_event (EVENT_EC_MIN_BRICKS_NOT_UP, "subvol=%s", this-&gt;name);</div><div class='add'>+    gf_event(EVENT_EC_MIN_BRICKS_NOT_UP, "subvol=%s", this-&gt;name);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_notify_cbk (void *data)</div><div class='add'>+ec_notify_cbk(void *data)</div><div class='ctx'> {</div><div class='del'>-        ec_t *ec = data;</div><div class='del'>-        glusterfs_event_t event = GF_EVENT_MAXVAL;</div><div class='del'>-        gf_boolean_t propagate = _gf_false;</div><div class='add'>+    ec_t *ec = data;</div><div class='add'>+    glusterfs_event_t event = GF_EVENT_MAXVAL;</div><div class='add'>+    gf_boolean_t propagate = _gf_false;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;ec-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (!ec-&gt;timer) {</div><div class='del'>-                        /*</div><div class='del'>-                         * Either child_up/child_down is already sent to parent</div><div class='del'>-                         * This is a spurious wake up.</div><div class='del'>-                         */</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_timer_call_cancel (ec-&gt;xl-&gt;ctx, ec-&gt;timer);</div><div class='del'>-                ec-&gt;timer = NULL;</div><div class='del'>-</div><div class='del'>-                /* The timeout has expired, so any subvolume that has not</div><div class='del'>-                 * already reported its state, will be considered to be down.</div><div class='del'>-                 * We mark as if all bricks had reported. */</div><div class='del'>-                ec-&gt;xl_notify = (1ULL &lt;&lt; ec-&gt;nodes) - 1ULL;</div><div class='del'>-                ec-&gt;xl_notify_count = ec-&gt;nodes;</div><div class='del'>-</div><div class='del'>-                /* Since we have marked all subvolumes as notified, it's</div><div class='del'>-                 * guaranteed that ec_get_event_from_state() will return</div><div class='del'>-                 * CHILD_UP or CHILD_DOWN, but not MAXVAL. */</div><div class='del'>-                event = ec_get_event_from_state (ec);</div><div class='del'>-                if (event == GF_EVENT_CHILD_UP) {</div><div class='del'>-                        /* We are ready to bring the volume up. If there are</div><div class='del'>-                         * still bricks DOWN, they will be healed when they</div><div class='del'>-                         * come up. */</div><div class='del'>-                        ec_up (ec-&gt;xl, ec);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                propagate = _gf_true;</div><div class='add'>+    LOCK(&amp;ec-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (!ec-&gt;timer) {</div><div class='add'>+            /*</div><div class='add'>+             * Either child_up/child_down is already sent to parent</div><div class='add'>+             * This is a spurious wake up.</div><div class='add'>+             */</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_timer_call_cancel(ec-&gt;xl-&gt;ctx, ec-&gt;timer);</div><div class='add'>+        ec-&gt;timer = NULL;</div><div class='add'>+</div><div class='add'>+        /* The timeout has expired, so any subvolume that has not</div><div class='add'>+         * already reported its state, will be considered to be down.</div><div class='add'>+         * We mark as if all bricks had reported. */</div><div class='add'>+        ec-&gt;xl_notify = (1ULL &lt;&lt; ec-&gt;nodes) - 1ULL;</div><div class='add'>+        ec-&gt;xl_notify_count = ec-&gt;nodes;</div><div class='add'>+</div><div class='add'>+        /* Since we have marked all subvolumes as notified, it's</div><div class='add'>+         * guaranteed that ec_get_event_from_state() will return</div><div class='add'>+         * CHILD_UP or CHILD_DOWN, but not MAXVAL. */</div><div class='add'>+        event = ec_get_event_from_state(ec);</div><div class='add'>+        if (event == GF_EVENT_CHILD_UP) {</div><div class='add'>+            /* We are ready to bring the volume up. If there are</div><div class='add'>+             * still bricks DOWN, they will be healed when they</div><div class='add'>+             * come up. */</div><div class='add'>+            ec_up(ec-&gt;xl, ec);</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        UNLOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (propagate) {</div><div class='del'>-                if ((event == GF_EVENT_CHILD_UP) &amp;&amp; ec-&gt;shd.iamshd) {</div><div class='del'>-                        /* We have just brought the volume UP, so we trigger</div><div class='del'>-                         * a self-heal check on the root directory. */</div><div class='del'>-                        ec_launch_replace_heal (ec);</div><div class='del'>-                }</div><div class='add'>+        propagate = _gf_true;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                default_notify (ec-&gt;xl, event, NULL);</div><div class='add'>+    if (propagate) {</div><div class='add'>+        if ((event == GF_EVENT_CHILD_UP) &amp;&amp; ec-&gt;shd.iamshd) {</div><div class='add'>+            /* We have just brought the volume UP, so we trigger</div><div class='add'>+             * a self-heal check on the root directory. */</div><div class='add'>+            ec_launch_replace_heal(ec);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        default_notify(ec-&gt;xl, event, NULL);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ec_launch_notify_timer (xlator_t *this, ec_t *ec)</div><div class='del'>-{</div><div class='del'>-        struct timespec delay = {0, };</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Initiating child-down timer");</div><div class='del'>-        delay.tv_sec = 10;</div><div class='del'>-        delay.tv_nsec = 0;</div><div class='del'>-        ec-&gt;timer = gf_timer_call_after (this-&gt;ctx, delay, ec_notify_cbk, ec);</div><div class='del'>-        if (ec-&gt;timer == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        EC_MSG_TIMER_CREATE_FAIL, "Cannot create timer "</div><div class='del'>-                        "for delayed initialization");</div><div class='del'>-        }</div><div class='add'>+ec_launch_notify_timer(xlator_t *this, ec_t *ec)</div><div class='add'>+{</div><div class='add'>+    struct timespec delay = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Initiating child-down timer");</div><div class='add'>+    delay.tv_sec = 10;</div><div class='add'>+    delay.tv_nsec = 0;</div><div class='add'>+    ec-&gt;timer = gf_timer_call_after(this-&gt;ctx, delay, ec_notify_cbk, ec);</div><div class='add'>+    if (ec-&gt;timer == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_TIMER_CREATE_FAIL,</div><div class='add'>+               "Cannot create timer "</div><div class='add'>+               "for delayed initialization");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='ctx'> ec_disable_delays(ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        ec-&gt;shutdown = _gf_true;</div><div class='add'>+    ec-&gt;shutdown = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return list_empty (&amp;ec-&gt;pending_fops);</div><div class='add'>+    return list_empty(&amp;ec-&gt;pending_fops);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> ec_pending_fops_completed(ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        if (ec-&gt;shutdown) {</div><div class='del'>-                default_notify (ec-&gt;xl, GF_EVENT_PARENT_DOWN, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (ec-&gt;shutdown) {</div><div class='add'>+        default_notify(ec-&gt;xl, GF_EVENT_PARENT_DOWN, NULL);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> ec_set_up_state(ec_t *ec, uintptr_t index_mask, uintptr_t new_state)</div><div class='ctx'> {</div><div class='del'>-        uintptr_t current_state = 0;</div><div class='add'>+    uintptr_t current_state = 0;</div><div class='ctx'> </div><div class='del'>-        if ((ec-&gt;xl_notify &amp; index_mask) == 0) {</div><div class='del'>-                ec-&gt;xl_notify |= index_mask;</div><div class='del'>-                ec-&gt;xl_notify_count++;</div><div class='del'>-        }</div><div class='del'>-        current_state = ec-&gt;xl_up &amp; index_mask;</div><div class='del'>-        if (current_state != new_state) {</div><div class='del'>-                ec-&gt;xl_up ^= index_mask;</div><div class='del'>-                ec-&gt;xl_up_count += (current_state ? -1 : 1);</div><div class='add'>+    if ((ec-&gt;xl_notify &amp; index_mask) == 0) {</div><div class='add'>+        ec-&gt;xl_notify |= index_mask;</div><div class='add'>+        ec-&gt;xl_notify_count++;</div><div class='add'>+    }</div><div class='add'>+    current_state = ec-&gt;xl_up &amp; index_mask;</div><div class='add'>+    if (current_state != new_state) {</div><div class='add'>+        ec-&gt;xl_up ^= index_mask;</div><div class='add'>+        ec-&gt;xl_up_count += (current_state ? -1 : 1);</div><div class='ctx'> </div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+        return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> ec_upcall(ec_t *ec, struct gf_upcall *upcall)</div><div class='ctx'> {</div><div class='del'>-        struct gf_upcall_cache_invalidation *ci = NULL;</div><div class='del'>-        struct gf_upcall_inodelk_contention *lc = NULL;</div><div class='del'>-        inode_t *inode;</div><div class='add'>+    struct gf_upcall_cache_invalidation *ci = NULL;</div><div class='add'>+    struct gf_upcall_inodelk_contention *lc = NULL;</div><div class='add'>+    inode_t *inode;</div><div class='ctx'> </div><div class='del'>-        switch (upcall-&gt;event_type) {</div><div class='add'>+    switch (upcall-&gt;event_type) {</div><div class='ctx'>         case GF_UPCALL_CACHE_INVALIDATION:</div><div class='del'>-                ci = upcall-&gt;data;</div><div class='del'>-                ci-&gt;flags |= UP_INVAL_ATTR;</div><div class='del'>-                return _gf_true;</div><div class='add'>+            ci = upcall-&gt;data;</div><div class='add'>+            ci-&gt;flags |= UP_INVAL_ATTR;</div><div class='add'>+            return _gf_true;</div><div class='ctx'> </div><div class='ctx'>         case GF_UPCALL_INODELK_CONTENTION:</div><div class='del'>-                lc = upcall-&gt;data;</div><div class='del'>-                if (strcmp(lc-&gt;domain, ec-&gt;xl-&gt;name) != 0) {</div><div class='del'>-                        /* The lock is not owned by EC, ignore it. */</div><div class='del'>-                        return _gf_true;</div><div class='del'>-                }</div><div class='del'>-                inode = inode_find(((xlator_t *)ec-&gt;xl-&gt;graph-&gt;top)-&gt;itable,</div><div class='del'>-                                   upcall-&gt;gfid);</div><div class='del'>-                /* If inode is not found, it means that it's already released,</div><div class='del'>-                 * so we can ignore it. Probably it has been released and</div><div class='del'>-                 * destroyed while the contention notification was being sent.</div><div class='del'>-                 */</div><div class='del'>-                if (inode != NULL) {</div><div class='del'>-                        ec_lock_release(ec, inode);</div><div class='del'>-                        inode_unref(inode);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                return _gf_false;</div><div class='add'>+            lc = upcall-&gt;data;</div><div class='add'>+            if (strcmp(lc-&gt;domain, ec-&gt;xl-&gt;name) != 0) {</div><div class='add'>+                /* The lock is not owned by EC, ignore it. */</div><div class='add'>+                return _gf_true;</div><div class='add'>+            }</div><div class='add'>+            inode = inode_find(((xlator_t *)ec-&gt;xl-&gt;graph-&gt;top)-&gt;itable,</div><div class='add'>+                               upcall-&gt;gfid);</div><div class='add'>+            /* If inode is not found, it means that it's already released,</div><div class='add'>+             * so we can ignore it. Probably it has been released and</div><div class='add'>+             * destroyed while the contention notification was being sent.</div><div class='add'>+             */</div><div class='add'>+            if (inode != NULL) {</div><div class='add'>+                ec_lock_release(ec, inode);</div><div class='add'>+                inode_unref(inode);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            return _gf_false;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                return _gf_true;</div><div class='del'>-        }</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_notify (xlator_t *this, int32_t event, void *data, void *data2)</div><div class='del'>-{</div><div class='del'>-        ec_t             *ec              = this-&gt;private;</div><div class='del'>-        int32_t           idx             = 0;</div><div class='del'>-        int32_t           error           = 0;</div><div class='del'>-        glusterfs_event_t old_event       = GF_EVENT_MAXVAL;</div><div class='del'>-        dict_t            *input          = NULL;</div><div class='del'>-        dict_t            *output         = NULL;</div><div class='del'>-        gf_boolean_t      propagate       = _gf_true;</div><div class='del'>-        gf_boolean_t      needs_shd_check = _gf_false;</div><div class='del'>-        int32_t           orig_event      = event;</div><div class='del'>-        uintptr_t         mask            = 0;</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "NOTIFY(%d): %p, %p",</div><div class='del'>-                event, data, data2);</div><div class='del'>-</div><div class='del'>-        if (event == GF_EVENT_UPCALL) {</div><div class='del'>-                propagate = ec_upcall(ec, data);</div><div class='del'>-                goto done;</div><div class='add'>+ec_notify(xlator_t *this, int32_t event, void *data, void *data2)</div><div class='add'>+{</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    int32_t idx = 0;</div><div class='add'>+    int32_t error = 0;</div><div class='add'>+    glusterfs_event_t old_event = GF_EVENT_MAXVAL;</div><div class='add'>+    dict_t *input = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    gf_boolean_t propagate = _gf_true;</div><div class='add'>+    gf_boolean_t needs_shd_check = _gf_false;</div><div class='add'>+    int32_t orig_event = event;</div><div class='add'>+    uintptr_t mask = 0;</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "NOTIFY(%d): %p, %p", event, data, data2);</div><div class='add'>+</div><div class='add'>+    if (event == GF_EVENT_UPCALL) {</div><div class='add'>+        propagate = ec_upcall(ec, data);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (event == GF_EVENT_TRANSLATOR_OP) {</div><div class='add'>+        if (!ec-&gt;up) {</div><div class='add'>+            error = -1;</div><div class='add'>+        } else {</div><div class='add'>+            input = data;</div><div class='add'>+            output = data2;</div><div class='add'>+            error = ec_xl_op(this, input, output);</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (event == GF_EVENT_TRANSLATOR_OP) {</div><div class='del'>-                if (!ec-&gt;up) {</div><div class='del'>-                        error = -1;</div><div class='del'>-                } else {</div><div class='del'>-                        input = data;</div><div class='del'>-                        output = data2;</div><div class='del'>-                        error = ec_xl_op (this, input, output);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    for (idx = 0; idx &lt; ec-&gt;nodes; idx++) {</div><div class='add'>+        if (ec-&gt;xl_list[idx] == data) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (idx = 0; idx &lt; ec-&gt;nodes; idx++) {</div><div class='del'>-                if (ec-&gt;xl_list[idx] == data) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;ec-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (event == GF_EVENT_PARENT_UP) {</div><div class='add'>+        /*</div><div class='add'>+         * Start a timer which sends appropriate event to parent</div><div class='add'>+         * xlator to prevent the 'mount' syscall from hanging.</div><div class='add'>+         */</div><div class='add'>+        ec_launch_notify_timer(this, ec);</div><div class='add'>+        goto unlock;</div><div class='add'>+    } else if (event == GF_EVENT_PARENT_DOWN) {</div><div class='add'>+        /* If there aren't pending fops running after we have waken up</div><div class='add'>+         * them, we immediately propagate the notification. */</div><div class='add'>+        propagate = ec_disable_delays(ec);</div><div class='add'>+        goto unlock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (idx &lt; ec-&gt;nodes) { /* CHILD_* events */</div><div class='add'>+        old_event = ec_get_event_from_state(ec);</div><div class='add'>+</div><div class='add'>+        mask = 1ULL &lt;&lt; idx;</div><div class='add'>+        if (event == GF_EVENT_CHILD_UP) {</div><div class='add'>+            /* We need to trigger a selfheal if a brick changes</div><div class='add'>+             * to UP state. */</div><div class='add'>+            needs_shd_check = ec_set_up_state(ec, mask, mask);</div><div class='add'>+        } else if (event == GF_EVENT_CHILD_DOWN) {</div><div class='add'>+            ec_set_up_state(ec, mask, 0);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ec-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (event == GF_EVENT_PARENT_UP) {</div><div class='del'>-                /*</div><div class='del'>-                 * Start a timer which sends appropriate event to parent</div><div class='del'>-                 * xlator to prevent the 'mount' syscall from hanging.</div><div class='del'>-                 */</div><div class='del'>-                ec_launch_notify_timer (this, ec);</div><div class='del'>-                goto unlock;</div><div class='del'>-        } else if (event == GF_EVENT_PARENT_DOWN) {</div><div class='del'>-                /* If there aren't pending fops running after we have waken up</div><div class='del'>-                 * them, we immediately propagate the notification. */</div><div class='del'>-                propagate = ec_disable_delays(ec);</div><div class='del'>-                goto unlock;</div><div class='add'>+        event = ec_get_event_from_state(ec);</div><div class='add'>+</div><div class='add'>+        if (event == GF_EVENT_CHILD_UP) {</div><div class='add'>+            if (!ec-&gt;up) {</div><div class='add'>+                ec_up(this, ec);</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            /* If the volume is not UP, it's irrelevant if one</div><div class='add'>+             * brick has come up. We cannot heal anything. */</div><div class='add'>+            needs_shd_check = _gf_false;</div><div class='add'>+</div><div class='add'>+            if ((event == GF_EVENT_CHILD_DOWN) &amp;&amp; ec-&gt;up) {</div><div class='add'>+                ec_down(this, ec);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (idx &lt; ec-&gt;nodes) { /* CHILD_* events */</div><div class='del'>-                old_event = ec_get_event_from_state (ec);</div><div class='del'>-</div><div class='del'>-                mask = 1ULL &lt;&lt; idx;</div><div class='del'>-                if (event == GF_EVENT_CHILD_UP) {</div><div class='del'>-                        /* We need to trigger a selfheal if a brick changes</div><div class='del'>-                         * to UP state. */</div><div class='del'>-                        needs_shd_check = ec_set_up_state(ec, mask, mask);</div><div class='del'>-                } else if (event == GF_EVENT_CHILD_DOWN) {</div><div class='del'>-                        ec_set_up_state(ec, mask, 0);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                event = ec_get_event_from_state (ec);</div><div class='del'>-</div><div class='del'>-                if (event == GF_EVENT_CHILD_UP) {</div><div class='del'>-                        if (!ec-&gt;up) {</div><div class='del'>-                                ec_up (this, ec);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        /* If the volume is not UP, it's irrelevant if one</div><div class='del'>-                         * brick has come up. We cannot heal anything. */</div><div class='del'>-                        needs_shd_check = _gf_false;</div><div class='del'>-</div><div class='del'>-                        if ((event == GF_EVENT_CHILD_DOWN) &amp;&amp; ec-&gt;up) {</div><div class='del'>-                                ec_down (this, ec);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (event != GF_EVENT_MAXVAL) {</div><div class='del'>-                        if (event == old_event) {</div><div class='del'>-                                if (orig_event == GF_EVENT_CHILD_UP)</div><div class='del'>-                                        event = GF_EVENT_SOME_DESCENDENT_UP;</div><div class='del'>-                                else /* orig_event has to be GF_EVENT_CHILD_DOWN */</div><div class='del'>-                                        event = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        propagate = _gf_false;</div><div class='del'>-                }</div><div class='add'>+        if (event != GF_EVENT_MAXVAL) {</div><div class='add'>+            if (event == old_event) {</div><div class='add'>+                if (orig_event == GF_EVENT_CHILD_UP)</div><div class='add'>+                    event = GF_EVENT_SOME_DESCENDENT_UP;</div><div class='add'>+                else /* orig_event has to be GF_EVENT_CHILD_DOWN */</div><div class='add'>+                    event = GF_EVENT_SOME_DESCENDENT_DOWN;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            propagate = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;ec-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;ec-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        if (propagate) {</div><div class='del'>-                if (needs_shd_check &amp;&amp; ec-&gt;shd.iamshd) {</div><div class='del'>-                        ec_launch_replace_heal (ec);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                error = default_notify (this, event, data);</div><div class='add'>+    if (propagate) {</div><div class='add'>+        if (needs_shd_check &amp;&amp; ec-&gt;shd.iamshd) {</div><div class='add'>+            ec_launch_replace_heal(ec);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        error = default_notify(this, event, data);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return error;</div><div class='add'>+    return error;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        va_list         ap;</div><div class='del'>-        void *data2 = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    va_list ap;</div><div class='add'>+    void *data2 = NULL;</div><div class='ctx'> </div><div class='del'>-        va_start (ap, data);</div><div class='del'>-        data2 = va_arg (ap, dict_t*);</div><div class='del'>-        va_end (ap);</div><div class='del'>-        ret = ec_notify (this, event, data, data2);</div><div class='add'>+    va_start(ap, data);</div><div class='add'>+    data2 = va_arg(ap, dict_t *);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    ret = ec_notify(this, event, data, data2);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> ec_statistics_init(ec_t *ec)</div><div class='ctx'> {</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.hits, 0);</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.misses, 0);</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.updates, 0);</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.invals, 0);</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.evicts, 0);</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.allocs, 0);</div><div class='del'>-        GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.errors, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.hits, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.misses, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.updates, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.invals, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.evicts, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.allocs, 0);</div><div class='add'>+    GF_ATOMIC_INIT(ec-&gt;stats.stripe_cache.errors, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-    ec_t *ec          = NULL;</div><div class='add'>+    ec_t *ec = NULL;</div><div class='ctx'>     char *read_policy = NULL;</div><div class='del'>-    char *extensions  = NULL;</div><div class='add'>+    char *extensions = NULL;</div><div class='ctx'>     int32_t err;</div><div class='ctx'> </div><div class='del'>-    if (this-&gt;parents == NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                EC_MSG_NO_PARENTS, "Volume does not have parents.");</div><div class='add'>+    if (this-&gt;parents == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, EC_MSG_NO_PARENTS,</div><div class='add'>+               "Volume does not have parents.");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ec = GF_MALLOC(sizeof(*ec), ec_mt_ec_t);</div><div class='del'>-    if (ec == NULL)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Failed to allocate private memory.");</div><div class='add'>+    if (ec == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Failed to allocate private memory.");</div><div class='ctx'> </div><div class='ctx'>         return -1;</div><div class='ctx'>     }</div><div class='hunk'>@@ -680,26 +664,23 @@ init (xlator_t *this)</div><div class='ctx'>     ec-&gt;cbk_pool = mem_pool_new(ec_cbk_data_t, 4096);</div><div class='ctx'>     ec-&gt;lock_pool = mem_pool_new(ec_lock_t, 1024);</div><div class='ctx'>     if ((ec-&gt;fop_pool == NULL) || (ec-&gt;cbk_pool == NULL) ||</div><div class='del'>-        (ec-&gt;lock_pool == NULL))</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                EC_MSG_NO_MEMORY, "Failed to create memory pools.");</div><div class='add'>+        (ec-&gt;lock_pool == NULL)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, EC_MSG_NO_MEMORY,</div><div class='add'>+               "Failed to create memory pools.");</div><div class='ctx'> </div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (ec_prepare_childs(this) != 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                EC_MSG_XLATOR_INIT_FAIL, "Failed to initialize xlator");</div><div class='add'>+    if (ec_prepare_childs(this) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_XLATOR_INIT_FAIL,</div><div class='add'>+               "Failed to initialize xlator");</div><div class='ctx'> </div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (ec_parse_options(this) != 0)</div><div class='del'>-    {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                EC_MSG_XLATOR_PARSE_OPT_FAIL, "Failed to parse xlator options");</div><div class='add'>+    if (ec_parse_options(this) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, EC_MSG_XLATOR_PARSE_OPT_FAIL,</div><div class='add'>+               "Failed to parse xlator options");</div><div class='ctx'> </div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='hunk'>@@ -709,58 +690,59 @@ init (xlator_t *this)</div><div class='ctx'>     err = ec_method_init(this, &amp;ec-&gt;matrix, ec-&gt;fragments, ec-&gt;nodes,</div><div class='ctx'>                          ec-&gt;nodes * 2, extensions);</div><div class='ctx'>     if (err != 0) {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, -err, EC_MSG_MATRIX_FAILED,</div><div class='del'>-                "Failed to initialize matrix management");</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -err, EC_MSG_MATRIX_FAILED,</div><div class='add'>+               "Failed to initialize matrix management");</div><div class='ctx'> </div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    GF_OPTION_INIT ("self-heal-daemon", ec-&gt;shd.enabled, bool, failed);</div><div class='del'>-    GF_OPTION_INIT ("iam-self-heal-daemon", ec-&gt;shd.iamshd, bool, failed);</div><div class='del'>-    GF_OPTION_INIT ("eager-lock", ec-&gt;eager_lock, bool, failed);</div><div class='del'>-    GF_OPTION_INIT ("other-eager-lock", ec-&gt;other_eager_lock, bool, failed);</div><div class='del'>-    GF_OPTION_INIT ("eager-lock-timeout", ec-&gt;eager_lock_timeout, uint32,</div><div class='del'>-                    failed);</div><div class='del'>-    GF_OPTION_INIT ("other-eager-lock-timeout", ec-&gt;other_eager_lock_timeout,</div><div class='del'>-                    uint32, failed);</div><div class='del'>-    GF_OPTION_INIT ("background-heals", ec-&gt;background_heals, uint32, failed);</div><div class='del'>-    GF_OPTION_INIT ("heal-wait-qlength", ec-&gt;heal_wait_qlen, uint32, failed);</div><div class='del'>-    GF_OPTION_INIT ("self-heal-window-size", ec-&gt;self_heal_window_size, uint32,</div><div class='del'>-                    failed);</div><div class='del'>-    ec_configure_background_heal_opts (ec, ec-&gt;background_heals,</div><div class='del'>-                                       ec-&gt;heal_wait_qlen);</div><div class='del'>-    GF_OPTION_INIT ("read-policy", read_policy, str, failed);</div><div class='del'>-    if (ec_assign_read_policy (ec, read_policy))</div><div class='del'>-            goto failed;</div><div class='del'>-</div><div class='del'>-    GF_OPTION_INIT ("shd-max-threads", ec-&gt;shd.max_threads, uint32, failed);</div><div class='del'>-    GF_OPTION_INIT ("shd-wait-qlength", ec-&gt;shd.wait_qlength, uint32, failed);</div><div class='del'>-    GF_OPTION_INIT ("optimistic-change-log", ec-&gt;optimistic_changelog, bool, failed);</div><div class='del'>-    GF_OPTION_INIT ("parallel-writes", ec-&gt;parallel_writes, bool, failed);</div><div class='del'>-    GF_OPTION_INIT ("stripe-cache", ec-&gt;stripe_cache, uint32, failed);</div><div class='del'>-</div><div class='del'>-    this-&gt;itable = inode_table_new (EC_SHD_INODE_LRU_LIMIT, this);</div><div class='add'>+    GF_OPTION_INIT("self-heal-daemon", ec-&gt;shd.enabled, bool, failed);</div><div class='add'>+    GF_OPTION_INIT("iam-self-heal-daemon", ec-&gt;shd.iamshd, bool, failed);</div><div class='add'>+    GF_OPTION_INIT("eager-lock", ec-&gt;eager_lock, bool, failed);</div><div class='add'>+    GF_OPTION_INIT("other-eager-lock", ec-&gt;other_eager_lock, bool, failed);</div><div class='add'>+    GF_OPTION_INIT("eager-lock-timeout", ec-&gt;eager_lock_timeout, uint32,</div><div class='add'>+                   failed);</div><div class='add'>+    GF_OPTION_INIT("other-eager-lock-timeout", ec-&gt;other_eager_lock_timeout,</div><div class='add'>+                   uint32, failed);</div><div class='add'>+    GF_OPTION_INIT("background-heals", ec-&gt;background_heals, uint32, failed);</div><div class='add'>+    GF_OPTION_INIT("heal-wait-qlength", ec-&gt;heal_wait_qlen, uint32, failed);</div><div class='add'>+    GF_OPTION_INIT("self-heal-window-size", ec-&gt;self_heal_window_size, uint32,</div><div class='add'>+                   failed);</div><div class='add'>+    ec_configure_background_heal_opts(ec, ec-&gt;background_heals,</div><div class='add'>+                                      ec-&gt;heal_wait_qlen);</div><div class='add'>+    GF_OPTION_INIT("read-policy", read_policy, str, failed);</div><div class='add'>+    if (ec_assign_read_policy(ec, read_policy))</div><div class='add'>+        goto failed;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("shd-max-threads", ec-&gt;shd.max_threads, uint32, failed);</div><div class='add'>+    GF_OPTION_INIT("shd-wait-qlength", ec-&gt;shd.wait_qlength, uint32, failed);</div><div class='add'>+    GF_OPTION_INIT("optimistic-change-log", ec-&gt;optimistic_changelog, bool,</div><div class='add'>+                   failed);</div><div class='add'>+    GF_OPTION_INIT("parallel-writes", ec-&gt;parallel_writes, bool, failed);</div><div class='add'>+    GF_OPTION_INIT("stripe-cache", ec-&gt;stripe_cache, uint32, failed);</div><div class='add'>+</div><div class='add'>+    this-&gt;itable = inode_table_new(EC_SHD_INODE_LRU_LIMIT, this);</div><div class='ctx'>     if (!this-&gt;itable)</div><div class='del'>-            goto failed;</div><div class='add'>+        goto failed;</div><div class='ctx'> </div><div class='ctx'>     if (ec-&gt;shd.iamshd)</div><div class='del'>-            ec_selfheal_daemon_init (this);</div><div class='del'>-    gf_msg_debug (this-&gt;name, 0, "Disperse translator initialized.");</div><div class='add'>+        ec_selfheal_daemon_init(this);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Disperse translator initialized.");</div><div class='ctx'> </div><div class='del'>-    ec-&gt;leaf_to_subvolid = dict_new ();</div><div class='add'>+    ec-&gt;leaf_to_subvolid = dict_new();</div><div class='ctx'>     if (!ec-&gt;leaf_to_subvolid)</div><div class='del'>-            goto failed;</div><div class='del'>-    if (glusterfs_reachable_leaves (this, ec-&gt;leaf_to_subvolid)) {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                EC_MSG_SUBVOL_BUILD_FAIL, "Failed to build subvol "</div><div class='del'>-                "dictionary");</div><div class='add'>+        goto failed;</div><div class='add'>+    if (glusterfs_reachable_leaves(this, ec-&gt;leaf_to_subvolid)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_SUBVOL_BUILD_FAIL,</div><div class='add'>+               "Failed to build subvol "</div><div class='add'>+               "dictionary");</div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (ec_subvol_to_subvol_id_transform (ec, ec-&gt;leaf_to_subvolid) &lt; 0) {</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                EC_MSG_SUBVOL_ID_DICT_SET_FAIL, "Failed to build subvol-id "</div><div class='del'>-                "dictionary");</div><div class='add'>+    if (ec_subvol_to_subvol_id_transform(ec, ec-&gt;leaf_to_subvolid) &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, EC_MSG_SUBVOL_ID_DICT_SET_FAIL,</div><div class='add'>+               "Failed to build subvol-id "</div><div class='add'>+               "dictionary");</div><div class='ctx'>         goto failed;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -774,13 +756,15 @@ failed:</div><div class='ctx'>     return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void fini(xlator_t * this)</div><div class='add'>+void</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='ctx'>     __ec_destroy_private(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_access(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                     int32_t mask, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_access(frame, this, -1, EC_MINIMUM_ONE, default_access_cbk, NULL, loc,</div><div class='ctx'>               mask, xdata);</div><div class='hunk'>@@ -788,9 +772,9 @@ int32_t ec_gf_access(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_create(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                     int32_t flags, mode_t mode, mode_t umask, fd_t * fd,</div><div class='del'>-                     dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+             mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_create(frame, this, -1, EC_MINIMUM_MIN, default_create_cbk, NULL, loc,</div><div class='ctx'>               flags, mode, umask, fd, xdata);</div><div class='hunk'>@@ -798,53 +782,56 @@ int32_t ec_gf_create(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_discard(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                      off_t offset, size_t len, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+              size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_discard(frame, this, -1, EC_MINIMUM_MIN, default_discard_cbk,</div><div class='del'>-               NULL, fd, offset, len, xdata);</div><div class='add'>+    ec_discard(frame, this, -1, EC_MINIMUM_MIN, default_discard_cbk, NULL, fd,</div><div class='add'>+               offset, len, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_entrylk(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                      const char * volume, loc_t * loc, const char * basename,</div><div class='del'>-                      entrylk_cmd cmd, entrylk_type type, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_entrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+              loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+              entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     int32_t minimum = EC_MINIMUM_ALL;</div><div class='ctx'>     if (cmd == ENTRYLK_UNLOCK)</div><div class='del'>-            minimum = EC_MINIMUM_ONE;</div><div class='del'>-    ec_entrylk(frame, this, -1, minimum, default_entrylk_cbk, NULL,</div><div class='del'>-               volume, loc, basename, cmd, type, xdata);</div><div class='add'>+        minimum = EC_MINIMUM_ONE;</div><div class='add'>+    ec_entrylk(frame, this, -1, minimum, default_entrylk_cbk, NULL, volume, loc,</div><div class='add'>+               basename, cmd, type, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fentrylk(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                       const char * volume, fd_t * fd, const char * basename,</div><div class='del'>-                       entrylk_cmd cmd, entrylk_type type, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+               fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='add'>+               entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     int32_t minimum = EC_MINIMUM_ALL;</div><div class='ctx'>     if (cmd == ENTRYLK_UNLOCK)</div><div class='del'>-            minimum = EC_MINIMUM_ONE;</div><div class='del'>-    ec_fentrylk(frame, this, -1, minimum, default_fentrylk_cbk, NULL,</div><div class='del'>-                volume, fd, basename, cmd, type, xdata);</div><div class='add'>+        minimum = EC_MINIMUM_ONE;</div><div class='add'>+    ec_fentrylk(frame, this, -1, minimum, default_fentrylk_cbk, NULL, volume,</div><div class='add'>+                fd, basename, cmd, type, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fallocate(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                        int32_t mode, off_t offset, size_t len,</div><div class='del'>-                        dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='add'>+                off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fallocate(frame, this, -1, EC_MINIMUM_MIN, default_fallocate_cbk,</div><div class='del'>-                 NULL, fd, mode, offset, len, xdata);</div><div class='add'>+    ec_fallocate(frame, this, -1, EC_MINIMUM_MIN, default_fallocate_cbk, NULL,</div><div class='add'>+                 fd, mode, offset, len, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_flush(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                    dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_flush(frame, this, -1, EC_MINIMUM_MIN, default_flush_cbk, NULL, fd,</div><div class='ctx'>              xdata);</div><div class='hunk'>@@ -852,8 +839,9 @@ int32_t ec_gf_flush(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fsync(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                    int32_t datasync, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fsync(frame, this, -1, EC_MINIMUM_MIN, default_fsync_cbk, NULL, fd,</div><div class='ctx'>              datasync, xdata);</div><div class='hunk'>@@ -861,114 +849,114 @@ int32_t ec_gf_fsync(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fsyncdir(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                       int32_t datasync, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fsyncdir(frame, this, -1, EC_MINIMUM_MIN, default_fsyncdir_cbk, NULL,</div><div class='del'>-                fd, datasync, xdata);</div><div class='add'>+    ec_fsyncdir(frame, this, -1, EC_MINIMUM_MIN, default_fsyncdir_cbk, NULL, fd,</div><div class='add'>+                datasync, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ec_marker_populate_args (call_frame_t *frame, int type, int *gauge,</div><div class='del'>-                         xlator_t **subvols)</div><div class='add'>+ec_marker_populate_args(call_frame_t *frame, int type, int *gauge,</div><div class='add'>+                        xlator_t **subvols)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = frame-&gt;this;</div><div class='del'>-        ec_t *ec = this-&gt;private;</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        memcpy (subvols, ec-&gt;xl_list, sizeof (*subvols) * ec-&gt;nodes);</div><div class='add'>+    memcpy(subvols, ec-&gt;xl_list, sizeof(*subvols) * ec-&gt;nodes);</div><div class='ctx'> </div><div class='del'>-        if (type == MARKER_XTIME_TYPE) {</div><div class='del'>-                /*Don't error out on ENOENT/ENOTCONN */</div><div class='del'>-                gauge[MCNT_NOTFOUND] = 0;</div><div class='del'>-                gauge[MCNT_ENOTCONN] = 0;</div><div class='del'>-        }</div><div class='add'>+    if (type == MARKER_XTIME_TYPE) {</div><div class='add'>+        /*Don't error out on ENOENT/ENOTCONN */</div><div class='add'>+        gauge[MCNT_NOTFOUND] = 0;</div><div class='add'>+        gauge[MCNT_ENOTCONN] = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ec-&gt;nodes;</div><div class='add'>+    return ec-&gt;nodes;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_handle_heal_commands (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                         const char *name, dict_t *xdata)</div><div class='add'>+ec_handle_heal_commands(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                        const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dict_rsp = NULL;</div><div class='del'>-        int     op_ret = -1;</div><div class='del'>-        int     op_errno = ENOMEM;</div><div class='add'>+    dict_t *dict_rsp = NULL;</div><div class='add'>+    int op_ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        if (!name || strcmp (name, GF_HEAL_INFO))</div><div class='del'>-                return -1;</div><div class='add'>+    if (!name || strcmp(name, GF_HEAL_INFO))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        op_errno = -ec_get_heal_info (this, loc, &amp;dict_rsp);</div><div class='del'>-        if (op_errno &lt;= 0) {</div><div class='del'>-                op_errno = op_ret = 0;</div><div class='del'>-        }</div><div class='add'>+    op_errno = -ec_get_heal_info(this, loc, &amp;dict_rsp);</div><div class='add'>+    if (op_errno &lt;= 0) {</div><div class='add'>+        op_errno = op_ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict_rsp, NULL);</div><div class='del'>-        if (dict_rsp)</div><div class='del'>-                dict_unref (dict_rsp);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict_rsp, NULL);</div><div class='add'>+    if (dict_rsp)</div><div class='add'>+        dict_unref(dict_rsp);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_gf_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                const char *name, dict_t *xdata)</div><div class='add'>+ec_gf_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int     error = 0;</div><div class='del'>-        ec_t    *ec = this-&gt;private;</div><div class='del'>-        int32_t minimum = EC_MINIMUM_ONE;</div><div class='add'>+    int error = 0;</div><div class='add'>+    ec_t *ec = this-&gt;private;</div><div class='add'>+    int32_t minimum = EC_MINIMUM_ONE;</div><div class='ctx'> </div><div class='del'>-        if (name &amp;&amp; strcmp (name, EC_XATTR_HEAL) != 0) {</div><div class='del'>-                EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out);</div><div class='del'>-        }</div><div class='add'>+    if (name &amp;&amp; strcmp(name, EC_XATTR_HEAL) != 0) {</div><div class='add'>+        EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ec_handle_heal_commands (frame, this, loc, name, xdata) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (ec_handle_heal_commands(frame, this, loc, name, xdata) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (cluster_handle_marker_getxattr (frame, loc, name, ec-&gt;vol_uuid,</div><div class='del'>-                                            NULL, ec_marker_populate_args) == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (cluster_handle_marker_getxattr(frame, loc, name, ec-&gt;vol_uuid, NULL,</div><div class='add'>+                                       ec_marker_populate_args) == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (name &amp;&amp;</div><div class='del'>-            ((fnmatch (GF_XATTR_STIME_PATTERN, name, 0) == 0) ||</div><div class='del'>-             XATTR_IS_NODE_UUID(name) || XATTR_IS_NODE_UUID_LIST(name))) {</div><div class='del'>-                minimum = EC_MINIMUM_ALL;</div><div class='del'>-        }</div><div class='add'>+    if (name &amp;&amp; ((fnmatch(GF_XATTR_STIME_PATTERN, name, 0) == 0) ||</div><div class='add'>+                 XATTR_IS_NODE_UUID(name) || XATTR_IS_NODE_UUID_LIST(name))) {</div><div class='add'>+        minimum = EC_MINIMUM_ALL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ec_getxattr (frame, this, -1, minimum, default_getxattr_cbk,</div><div class='del'>-                     NULL, loc, name, xdata);</div><div class='add'>+    ec_getxattr(frame, this, -1, minimum, default_getxattr_cbk, NULL, loc, name,</div><div class='add'>+                xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        error = ENODATA;</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, -1, error, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    error = ENODATA;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, -1, error, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_gf_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 const char *name, dict_t *xdata)</div><div class='add'>+ec_gf_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int     error = 0;</div><div class='add'>+    int error = 0;</div><div class='ctx'> </div><div class='del'>-        EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out);</div><div class='add'>+    EC_INTERNAL_XATTR_OR_GOTO(name, NULL, error, out);</div><div class='ctx'> </div><div class='del'>-        ec_fgetxattr (frame, this, -1, EC_MINIMUM_ONE, default_fgetxattr_cbk,</div><div class='del'>-                      NULL, fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    ec_fgetxattr(frame, this, -1, EC_MINIMUM_ONE, default_fgetxattr_cbk, NULL,</div><div class='add'>+                 fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        error = ENODATA;</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, -1, error, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    error = ENODATA;</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, -1, error, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_inodelk(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                      const char * volume, loc_t * loc, int32_t cmd,</div><div class='del'>-                      struct gf_flock * flock, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+              loc_t *loc, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     int32_t minimum = EC_MINIMUM_ALL;</div><div class='ctx'>     if (flock-&gt;l_type == F_UNLCK)</div><div class='del'>-            minimum = EC_MINIMUM_ONE;</div><div class='add'>+        minimum = EC_MINIMUM_ONE;</div><div class='ctx'> </div><div class='ctx'>     ec_inodelk(frame, this, &amp;frame-&gt;root-&gt;lk_owner, -1, minimum,</div><div class='ctx'>                default_inodelk_cbk, NULL, volume, loc, cmd, flock, xdata);</div><div class='hunk'>@@ -976,21 +964,22 @@ int32_t ec_gf_inodelk(call_frame_t * frame, xlator_t * this,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_finodelk(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                       const char * volume, fd_t * fd, int32_t cmd,</div><div class='del'>-                       struct gf_flock * flock, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_finodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+               fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     int32_t minimum = EC_MINIMUM_ALL;</div><div class='ctx'>     if (flock-&gt;l_type == F_UNLCK)</div><div class='del'>-            minimum = EC_MINIMUM_ONE;</div><div class='add'>+        minimum = EC_MINIMUM_ONE;</div><div class='ctx'>     ec_finodelk(frame, this, &amp;frame-&gt;root-&gt;lk_owner, -1, minimum,</div><div class='ctx'>                 default_finodelk_cbk, NULL, volume, fd, cmd, flock, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_link(call_frame_t * frame, xlator_t * this, loc_t * oldloc,</div><div class='del'>-                   loc_t * newloc, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_link(frame, this, -1, EC_MINIMUM_MIN, default_link_cbk, NULL, oldloc,</div><div class='ctx'>             newloc, xdata);</div><div class='hunk'>@@ -998,20 +987,21 @@ int32_t ec_gf_link(call_frame_t * frame, xlator_t * this, loc_t * oldloc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_lk(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                 int32_t cmd, struct gf_flock * flock, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+         struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     int32_t minimum = EC_MINIMUM_ALL;</div><div class='ctx'>     if (flock-&gt;l_type == F_UNLCK)</div><div class='del'>-            minimum = EC_MINIMUM_ONE;</div><div class='del'>-    ec_lk(frame, this, -1, minimum, default_lk_cbk, NULL, fd, cmd,</div><div class='del'>-          flock, xdata);</div><div class='add'>+        minimum = EC_MINIMUM_ONE;</div><div class='add'>+    ec_lk(frame, this, -1, minimum, default_lk_cbk, NULL, fd, cmd, flock,</div><div class='add'>+          xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_lookup(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                     dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_lookup(frame, this, -1, EC_MINIMUM_MIN, default_lookup_cbk, NULL, loc,</div><div class='ctx'>               xdata);</div><div class='hunk'>@@ -1019,8 +1009,9 @@ int32_t ec_gf_lookup(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_mkdir(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                    mode_t mode, mode_t umask, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+            mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_mkdir(frame, this, -1, EC_MINIMUM_MIN, default_mkdir_cbk, NULL, loc,</div><div class='ctx'>              mode, umask, xdata);</div><div class='hunk'>@@ -1028,8 +1019,9 @@ int32_t ec_gf_mkdir(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_mknod(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                    mode_t mode, dev_t rdev, mode_t umask, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+            dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_mknod(frame, this, -1, EC_MINIMUM_MIN, default_mknod_cbk, NULL, loc,</div><div class='ctx'>              mode, rdev, umask, xdata);</div><div class='hunk'>@@ -1037,17 +1029,19 @@ int32_t ec_gf_mknod(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_open(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                   int32_t flags, fd_t * fd, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_open(frame, this, -1, EC_MINIMUM_MIN, default_open_cbk, NULL, loc,</div><div class='del'>-            flags, fd, xdata);</div><div class='add'>+    ec_open(frame, this, -1, EC_MINIMUM_MIN, default_open_cbk, NULL, loc, flags,</div><div class='add'>+            fd, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_opendir(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                      fd_t * fd, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_opendir(frame, this, -1, EC_MINIMUM_MIN, default_opendir_cbk, NULL, loc,</div><div class='ctx'>                fd, xdata);</div><div class='hunk'>@@ -1055,8 +1049,9 @@ int32_t ec_gf_opendir(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_readdir(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                      size_t size, off_t offset, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_readdir(frame, this, -1, EC_MINIMUM_ONE, default_readdir_cbk, NULL, fd,</div><div class='ctx'>                size, offset, xdata);</div><div class='hunk'>@@ -1064,17 +1059,19 @@ int32_t ec_gf_readdir(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_readdirp(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                       size_t size, off_t offset, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_readdirp(frame, this, -1, EC_MINIMUM_ONE, default_readdirp_cbk, NULL,</div><div class='del'>-                fd, size, offset, xdata);</div><div class='add'>+    ec_readdirp(frame, this, -1, EC_MINIMUM_ONE, default_readdirp_cbk, NULL, fd,</div><div class='add'>+                size, offset, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_readlink(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                       size_t size, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_readlink(frame, this, -1, EC_MINIMUM_ONE, default_readlink_cbk, NULL,</div><div class='ctx'>                 loc, size, xdata);</div><div class='hunk'>@@ -1082,60 +1079,63 @@ int32_t ec_gf_readlink(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_readv(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                    size_t size, off_t offset, uint32_t flags, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_readv(frame, this, -1, EC_MINIMUM_MIN, default_readv_cbk, NULL, fd,</div><div class='del'>-             size, offset, flags, xdata);</div><div class='add'>+    ec_readv(frame, this, -1, EC_MINIMUM_MIN, default_readv_cbk, NULL, fd, size,</div><div class='add'>+             offset, flags, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_gf_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                   const char *name, dict_t *xdata)</div><div class='add'>+ec_gf_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int     error  = 0;</div><div class='add'>+    int error = 0;</div><div class='ctx'> </div><div class='del'>-        EC_INTERNAL_XATTR_OR_GOTO (name, xdata, error, out);</div><div class='add'>+    EC_INTERNAL_XATTR_OR_GOTO(name, xdata, error, out);</div><div class='ctx'> </div><div class='del'>-        ec_removexattr (frame, this, -1, EC_MINIMUM_MIN,</div><div class='del'>-                        default_removexattr_cbk, NULL, loc, name, xdata);</div><div class='add'>+    ec_removexattr(frame, this, -1, EC_MINIMUM_MIN, default_removexattr_cbk,</div><div class='add'>+                   NULL, loc, name, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, -1, error, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, -1, error, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_gf_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                    const char *name, dict_t *xdata)</div><div class='add'>+ec_gf_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                   const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int     error  = 0;</div><div class='add'>+    int error = 0;</div><div class='ctx'> </div><div class='del'>-        EC_INTERNAL_XATTR_OR_GOTO (name, xdata, error, out);</div><div class='add'>+    EC_INTERNAL_XATTR_OR_GOTO(name, xdata, error, out);</div><div class='ctx'> </div><div class='del'>-        ec_fremovexattr (frame, this, -1, EC_MINIMUM_MIN,</div><div class='del'>-                         default_fremovexattr_cbk, NULL, fd, name, xdata);</div><div class='add'>+    ec_fremovexattr(frame, this, -1, EC_MINIMUM_MIN, default_fremovexattr_cbk,</div><div class='add'>+                    NULL, fd, name, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, -1, error, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, -1, error, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_rename(call_frame_t * frame, xlator_t * this, loc_t * oldloc,</div><div class='del'>-                     loc_t * newloc, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_rename(frame, this, -1, EC_MINIMUM_MIN, default_rename_cbk, NULL,</div><div class='del'>-              oldloc, newloc, xdata);</div><div class='add'>+    ec_rename(frame, this, -1, EC_MINIMUM_MIN, default_rename_cbk, NULL, oldloc,</div><div class='add'>+              newloc, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_rmdir(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                    int xflags, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_rmdir(frame, this, -1, EC_MINIMUM_MIN, default_rmdir_cbk, NULL, loc,</div><div class='ctx'>              xflags, xdata);</div><div class='hunk'>@@ -1143,8 +1143,9 @@ int32_t ec_gf_rmdir(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_setattr(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                      struct iatt * stbuf, int32_t valid, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_setattr(frame, this, -1, EC_MINIMUM_MIN, default_setattr_cbk, NULL, loc,</div><div class='ctx'>                stbuf, valid, xdata);</div><div class='hunk'>@@ -1152,51 +1153,52 @@ int32_t ec_gf_setattr(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fsetattr(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                       struct iatt * stbuf, int32_t valid, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fsetattr(frame, this, -1, EC_MINIMUM_MIN, default_fsetattr_cbk, NULL,</div><div class='del'>-                fd, stbuf, valid, xdata);</div><div class='add'>+    ec_fsetattr(frame, this, -1, EC_MINIMUM_MIN, default_fsetattr_cbk, NULL, fd,</div><div class='add'>+                stbuf, valid, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_gf_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+ec_gf_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+               int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int     error = 0;</div><div class='add'>+    int error = 0;</div><div class='ctx'> </div><div class='del'>-        EC_INTERNAL_XATTR_OR_GOTO ("", dict, error, out);</div><div class='add'>+    EC_INTERNAL_XATTR_OR_GOTO("", dict, error, out);</div><div class='ctx'> </div><div class='del'>-        ec_setxattr (frame, this, -1, EC_MINIMUM_MIN, default_setxattr_cbk,</div><div class='del'>-                     NULL, loc, dict, flags, xdata);</div><div class='add'>+    ec_setxattr(frame, this, -1, EC_MINIMUM_MIN, default_setxattr_cbk, NULL,</div><div class='add'>+                loc, dict, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, -1, error, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, -1, error, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ec_gf_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+ec_gf_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int     error = 0;</div><div class='add'>+    int error = 0;</div><div class='ctx'> </div><div class='del'>-        EC_INTERNAL_XATTR_OR_GOTO ("", dict, error, out);</div><div class='add'>+    EC_INTERNAL_XATTR_OR_GOTO("", dict, error, out);</div><div class='ctx'> </div><div class='del'>-        ec_fsetxattr (frame, this, -1, EC_MINIMUM_MIN, default_fsetxattr_cbk,</div><div class='del'>-                      NULL, fd, dict, flags, xdata);</div><div class='add'>+    ec_fsetxattr(frame, this, -1, EC_MINIMUM_MIN, default_fsetxattr_cbk, NULL,</div><div class='add'>+                 fd, dict, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, -1, error, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, -1, error, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_stat(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                   dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_stat(frame, this, -1, EC_MINIMUM_MIN, default_stat_cbk, NULL, loc,</div><div class='ctx'>             xdata);</div><div class='hunk'>@@ -1204,8 +1206,8 @@ int32_t ec_gf_stat(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fstat(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                    dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_fstat(frame, this, -1, EC_MINIMUM_MIN, default_fstat_cbk, NULL, fd,</div><div class='ctx'>              xdata);</div><div class='hunk'>@@ -1213,8 +1215,8 @@ int32_t ec_gf_fstat(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_statfs(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                     dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_statfs(frame, this, -1, EC_MINIMUM_MIN, default_statfs_cbk, NULL, loc,</div><div class='ctx'>               xdata);</div><div class='hunk'>@@ -1222,9 +1224,9 @@ int32_t ec_gf_statfs(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_symlink(call_frame_t * frame, xlator_t * this,</div><div class='del'>-                      const char * linkname, loc_t * loc, mode_t umask,</div><div class='del'>-                      dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='add'>+              loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_symlink(frame, this, -1, EC_MINIMUM_MIN, default_symlink_cbk, NULL,</div><div class='ctx'>                linkname, loc, umask, xdata);</div><div class='hunk'>@@ -1232,8 +1234,9 @@ int32_t ec_gf_symlink(call_frame_t * frame, xlator_t * this,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_truncate(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                       off_t offset, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_truncate(frame, this, -1, EC_MINIMUM_MIN, default_truncate_cbk, NULL,</div><div class='ctx'>                 loc, offset, xdata);</div><div class='hunk'>@@ -1241,8 +1244,9 @@ int32_t ec_gf_truncate(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_ftruncate(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                        off_t offset, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_ftruncate(frame, this, -1, EC_MINIMUM_MIN, default_ftruncate_cbk, NULL,</div><div class='ctx'>                  fd, offset, xdata);</div><div class='hunk'>@@ -1250,8 +1254,9 @@ int32_t ec_gf_ftruncate(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_unlink(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                     int xflags, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_unlink(frame, this, -1, EC_MINIMUM_MIN, default_unlink_cbk, NULL, loc,</div><div class='ctx'>               xflags, xdata);</div><div class='hunk'>@@ -1259,9 +1264,10 @@ int32_t ec_gf_unlink(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_writev(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                     struct iovec * vector, int32_t count, off_t offset,</div><div class='del'>-                     uint32_t flags, struct iobref * iobref, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+             struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+             struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_writev(frame, this, -1, EC_MINIMUM_MIN, default_writev_cbk, NULL, fd,</div><div class='ctx'>               vector, count, offset, flags, iobref, xdata);</div><div class='hunk'>@@ -1269,9 +1275,9 @@ int32_t ec_gf_writev(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_xattrop(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='del'>-                      gf_xattrop_flags_t optype, dict_t * xattr,</div><div class='del'>-                      dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_xattrop(frame, this, -1, EC_MINIMUM_MIN, default_xattrop_cbk, NULL, loc,</div><div class='ctx'>                optype, xattr, xdata);</div><div class='hunk'>@@ -1279,47 +1285,49 @@ int32_t ec_gf_xattrop(call_frame_t * frame, xlator_t * this, loc_t * loc,</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_fxattrop(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                       gf_xattrop_flags_t optype, dict_t * xattr,</div><div class='del'>-                       dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_fxattrop(frame, this, -1, EC_MINIMUM_MIN, default_fxattrop_cbk, NULL,</div><div class='del'>-                fd, optype, xattr, xdata);</div><div class='add'>+    ec_fxattrop(frame, this, -1, EC_MINIMUM_MIN, default_fxattrop_cbk, NULL, fd,</div><div class='add'>+                optype, xattr, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_zerofill(call_frame_t * frame, xlator_t * this, fd_t * fd,</div><div class='del'>-                       off_t offset, off_t len, dict_t * xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+               off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     default_zerofill_failure_cbk(frame, ENOTSUP);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                   gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+           gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-    ec_seek(frame, this, -1, EC_MINIMUM_ONE, default_seek_cbk, NULL, fd,</div><div class='del'>-            offset, what, xdata);</div><div class='add'>+    ec_seek(frame, this, -1, EC_MINIMUM_ONE, default_seek_cbk, NULL, fd, offset,</div><div class='add'>+            what, xdata);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_ipc(call_frame_t *frame, xlator_t *this, int32_t op,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='ctx'>     ec_ipc(frame, this, -1, EC_MINIMUM_MIN, default_ipc_cbk, NULL, op, xdata);</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_forget(xlator_t * this, inode_t * inode)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='ctx'>     uint64_t value = 0;</div><div class='del'>-    ec_inode_t * ctx = NULL;</div><div class='add'>+    ec_inode_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-    if ((inode_ctx_del(inode, this, &amp;value) == 0) &amp;&amp; (value != 0))</div><div class='del'>-    {</div><div class='add'>+    if ((inode_ctx_del(inode, this, &amp;value) == 0) &amp;&amp; (value != 0)) {</div><div class='ctx'>         ctx = (ec_inode_t *)(uintptr_t)value;</div><div class='ctx'>         /* We can only forget an inode if it has been unlocked, so the stripe</div><div class='ctx'>          * cache should also be empty. */</div><div class='hunk'>@@ -1330,38 +1338,41 @@ int32_t ec_gf_forget(xlator_t * this, inode_t * inode)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void ec_gf_release_fd(xlator_t * this, fd_t * fd)</div><div class='add'>+void</div><div class='add'>+ec_gf_release_fd(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='ctx'>     uint64_t value = 0;</div><div class='del'>-    ec_fd_t * ctx = NULL;</div><div class='add'>+    ec_fd_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-    if ((fd_ctx_del(fd, this, &amp;value) == 0) &amp;&amp; (value != 0))</div><div class='del'>-    {</div><div class='add'>+    if ((fd_ctx_del(fd, this, &amp;value) == 0) &amp;&amp; (value != 0)) {</div><div class='ctx'>         ctx = (ec_fd_t *)(uintptr_t)value;</div><div class='ctx'>         loc_wipe(&amp;ctx-&gt;loc);</div><div class='ctx'>         GF_FREE(ctx);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_release(xlator_t * this, fd_t * fd)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='ctx'>     ec_gf_release_fd(this, fd);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_gf_releasedir(xlator_t * this, fd_t * fd)</div><div class='add'>+int32_t</div><div class='add'>+ec_gf_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='ctx'>     ec_gf_release_fd(this, fd);</div><div class='ctx'> </div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t ec_dump_private(xlator_t *this)</div><div class='add'>+int32_t</div><div class='add'>+ec_dump_private(xlator_t *this)</div><div class='ctx'> {</div><div class='ctx'>     ec_t *ec = NULL;</div><div class='del'>-    char  key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-    char  tmp[65];</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char tmp[65];</div><div class='ctx'> </div><div class='ctx'>     GF_ASSERT(this);</div><div class='ctx'> </div><div class='hunk'>@@ -1380,7 +1391,7 @@ int32_t ec_dump_private(xlator_t *this)</div><div class='ctx'>                        ec_bin(tmp, sizeof(tmp), ec-&gt;xl_up, ec-&gt;nodes));</div><div class='ctx'>     gf_proc_dump_write("background-heals", "%d", ec-&gt;background_heals);</div><div class='ctx'>     gf_proc_dump_write("heal-wait-qlength", "%d", ec-&gt;heal_wait_qlen);</div><div class='del'>-    gf_proc_dump_write("self-heal-window-size", "%"PRIu32,</div><div class='add'>+    gf_proc_dump_write("self-heal-window-size", "%" PRIu32,</div><div class='ctx'>                        ec-&gt;self_heal_window_size);</div><div class='ctx'>     gf_proc_dump_write("healers", "%d", ec-&gt;healers);</div><div class='ctx'>     gf_proc_dump_write("heal-waiters", "%d", ec-&gt;heal_waiters);</div><div class='hunk'>@@ -1409,77 +1420,66 @@ int32_t ec_dump_private(xlator_t *this)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct xlator_fops fops =</div><div class='del'>-{</div><div class='del'>-    .lookup       = ec_gf_lookup,</div><div class='del'>-    .stat         = ec_gf_stat,</div><div class='del'>-    .fstat        = ec_gf_fstat,</div><div class='del'>-    .truncate     = ec_gf_truncate,</div><div class='del'>-    .ftruncate    = ec_gf_ftruncate,</div><div class='del'>-    .access       = ec_gf_access,</div><div class='del'>-    .readlink     = ec_gf_readlink,</div><div class='del'>-    .mknod        = ec_gf_mknod,</div><div class='del'>-    .mkdir        = ec_gf_mkdir,</div><div class='del'>-    .unlink       = ec_gf_unlink,</div><div class='del'>-    .rmdir        = ec_gf_rmdir,</div><div class='del'>-    .symlink      = ec_gf_symlink,</div><div class='del'>-    .rename       = ec_gf_rename,</div><div class='del'>-    .link         = ec_gf_link,</div><div class='del'>-    .create       = ec_gf_create,</div><div class='del'>-    .open         = ec_gf_open,</div><div class='del'>-    .readv        = ec_gf_readv,</div><div class='del'>-    .writev       = ec_gf_writev,</div><div class='del'>-    .flush        = ec_gf_flush,</div><div class='del'>-    .fsync        = ec_gf_fsync,</div><div class='del'>-    .opendir      = ec_gf_opendir,</div><div class='del'>-    .readdir      = ec_gf_readdir,</div><div class='del'>-    .readdirp     = ec_gf_readdirp,</div><div class='del'>-    .fsyncdir     = ec_gf_fsyncdir,</div><div class='del'>-    .statfs       = ec_gf_statfs,</div><div class='del'>-    .setxattr     = ec_gf_setxattr,</div><div class='del'>-    .getxattr     = ec_gf_getxattr,</div><div class='del'>-    .fsetxattr    = ec_gf_fsetxattr,</div><div class='del'>-    .fgetxattr    = ec_gf_fgetxattr,</div><div class='del'>-    .removexattr  = ec_gf_removexattr,</div><div class='del'>-    .fremovexattr = ec_gf_fremovexattr,</div><div class='del'>-    .lk           = ec_gf_lk,</div><div class='del'>-    .inodelk      = ec_gf_inodelk,</div><div class='del'>-    .finodelk     = ec_gf_finodelk,</div><div class='del'>-    .entrylk      = ec_gf_entrylk,</div><div class='del'>-    .fentrylk     = ec_gf_fentrylk,</div><div class='del'>-    .xattrop      = ec_gf_xattrop,</div><div class='del'>-    .fxattrop     = ec_gf_fxattrop,</div><div class='del'>-    .setattr      = ec_gf_setattr,</div><div class='del'>-    .fsetattr     = ec_gf_fsetattr,</div><div class='del'>-    .fallocate    = ec_gf_fallocate,</div><div class='del'>-    .discard      = ec_gf_discard,</div><div class='del'>-    .zerofill     = ec_gf_zerofill,</div><div class='del'>-    .seek         = ec_gf_seek,</div><div class='del'>-    .ipc          = ec_gf_ipc</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks =</div><div class='del'>-{</div><div class='del'>-    .forget            = ec_gf_forget,</div><div class='del'>-    .release           = ec_gf_release,</div><div class='del'>-    .releasedir        = ec_gf_releasedir</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct xlator_dumpops dumpops = {</div><div class='del'>-    .priv = ec_dump_private</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct volume_options options[] =</div><div class='del'>-{</div><div class='del'>-    {</div><div class='del'>-        .key = { "redundancy" },</div><div class='del'>-        .type = GF_OPTION_TYPE_INT,</div><div class='del'>-        .default_value = "{{ volume.redundancy }}",</div><div class='del'>-        .description = "Maximum number of bricks that can fail "</div><div class='del'>-                       "simultaneously without losing data."</div><div class='del'>-    },</div><div class='add'>+struct xlator_fops fops = {.lookup = ec_gf_lookup,</div><div class='add'>+                           .stat = ec_gf_stat,</div><div class='add'>+                           .fstat = ec_gf_fstat,</div><div class='add'>+                           .truncate = ec_gf_truncate,</div><div class='add'>+                           .ftruncate = ec_gf_ftruncate,</div><div class='add'>+                           .access = ec_gf_access,</div><div class='add'>+                           .readlink = ec_gf_readlink,</div><div class='add'>+                           .mknod = ec_gf_mknod,</div><div class='add'>+                           .mkdir = ec_gf_mkdir,</div><div class='add'>+                           .unlink = ec_gf_unlink,</div><div class='add'>+                           .rmdir = ec_gf_rmdir,</div><div class='add'>+                           .symlink = ec_gf_symlink,</div><div class='add'>+                           .rename = ec_gf_rename,</div><div class='add'>+                           .link = ec_gf_link,</div><div class='add'>+                           .create = ec_gf_create,</div><div class='add'>+                           .open = ec_gf_open,</div><div class='add'>+                           .readv = ec_gf_readv,</div><div class='add'>+                           .writev = ec_gf_writev,</div><div class='add'>+                           .flush = ec_gf_flush,</div><div class='add'>+                           .fsync = ec_gf_fsync,</div><div class='add'>+                           .opendir = ec_gf_opendir,</div><div class='add'>+                           .readdir = ec_gf_readdir,</div><div class='add'>+                           .readdirp = ec_gf_readdirp,</div><div class='add'>+                           .fsyncdir = ec_gf_fsyncdir,</div><div class='add'>+                           .statfs = ec_gf_statfs,</div><div class='add'>+                           .setxattr = ec_gf_setxattr,</div><div class='add'>+                           .getxattr = ec_gf_getxattr,</div><div class='add'>+                           .fsetxattr = ec_gf_fsetxattr,</div><div class='add'>+                           .fgetxattr = ec_gf_fgetxattr,</div><div class='add'>+                           .removexattr = ec_gf_removexattr,</div><div class='add'>+                           .fremovexattr = ec_gf_fremovexattr,</div><div class='add'>+                           .lk = ec_gf_lk,</div><div class='add'>+                           .inodelk = ec_gf_inodelk,</div><div class='add'>+                           .finodelk = ec_gf_finodelk,</div><div class='add'>+                           .entrylk = ec_gf_entrylk,</div><div class='add'>+                           .fentrylk = ec_gf_fentrylk,</div><div class='add'>+                           .xattrop = ec_gf_xattrop,</div><div class='add'>+                           .fxattrop = ec_gf_fxattrop,</div><div class='add'>+                           .setattr = ec_gf_setattr,</div><div class='add'>+                           .fsetattr = ec_gf_fsetattr,</div><div class='add'>+                           .fallocate = ec_gf_fallocate,</div><div class='add'>+                           .discard = ec_gf_discard,</div><div class='add'>+                           .zerofill = ec_gf_zerofill,</div><div class='add'>+                           .seek = ec_gf_seek,</div><div class='add'>+                           .ipc = ec_gf_ipc};</div><div class='add'>+</div><div class='add'>+struct xlator_cbks cbks = {.forget = ec_gf_forget,</div><div class='add'>+                           .release = ec_gf_release,</div><div class='add'>+                           .releasedir = ec_gf_releasedir};</div><div class='add'>+</div><div class='add'>+struct xlator_dumpops dumpops = {.priv = ec_dump_private};</div><div class='add'>+</div><div class='add'>+struct volume_options options[] = {</div><div class='add'>+    {.key = {"redundancy"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "{{ volume.redundancy }}",</div><div class='add'>+     .description = "Maximum number of bricks that can fail "</div><div class='add'>+                    "simultaneously without losing data."},</div><div class='ctx'>     {</div><div class='del'>-        .key = { "self-heal-daemon" },</div><div class='add'>+        .key = {"self-heal-daemon"},</div><div class='ctx'>         .type = GF_OPTION_TYPE_BOOL,</div><div class='ctx'>         .description = "self-heal daemon enable/disable",</div><div class='ctx'>         .default_value = "enable",</div><div class='hunk'>@@ -1487,193 +1487,183 @@ struct volume_options options[] =</div><div class='ctx'>         .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='ctx'>         .tags = {"disperse"},</div><div class='ctx'>     },</div><div class='del'>-    { .key = {"iam-self-heal-daemon"},</div><div class='del'>-      .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-      .default_value = "off",</div><div class='del'>-      .description = "This option differentiates if the disperse "</div><div class='del'>-                     "translator is running as part of self-heal-daemon "</div><div class='del'>-                     "or not."</div><div class='del'>-    },</div><div class='del'>-    { .key = {"eager-lock"},</div><div class='del'>-      .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-      .default_value = "on",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_7_10},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "Enable/Disable eager lock for regular files on a "</div><div class='del'>-                     "disperse volume. If a fop takes a lock and completes "</div><div class='del'>-                     "its operation, it waits for next 1 second before "</div><div class='del'>-                     "releasing the lock, to see if the lock can be reused "</div><div class='del'>-                     "for next fop from the same client. If ec finds any lock "</div><div class='del'>-                     "contention within 1 second it releases the lock "</div><div class='del'>-                     "immediately before time expires. This improves the "</div><div class='del'>-                     "performance of file operations. However, as it takes "</div><div class='del'>-                     "lock on first brick, for few operations like read, "</div><div class='del'>-                     "discovery of lock contention might take long time and "</div><div class='del'>-                     "can actually degrade the performance. If eager lock is "</div><div class='del'>-                     "disabled, lock will be released as soon as fop "</div><div class='del'>-                     "completes."</div><div class='del'>-    },</div><div class='del'>-    { .key = {"other-eager-lock"},</div><div class='del'>-      .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-      .default_value = "on",</div><div class='del'>-      .op_version = { GD_OP_VERSION_3_13_0 },</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = { "disperse" },</div><div class='del'>-      .description = "It's equivalent to the eager-lock option but for non "</div><div class='del'>-                     "regular files."</div><div class='del'>-    },</div><div class='del'>-    { .key = {"eager-lock-timeout"},</div><div class='del'>-      .type = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min = 1,</div><div class='del'>-      .max = 60,</div><div class='del'>-      .default_value = "1",</div><div class='del'>-      .op_version = { GD_OP_VERSION_4_0_0 },</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = { "disperse", "locks", "timeout" },</div><div class='del'>-      .description = "Maximum time (in seconds) that a lock on an inode is "</div><div class='del'>-                     "kept held if no new operations on the inode are "</div><div class='del'>-                     "received."</div><div class='del'>-    },</div><div class='del'>-    { .key = {"other-eager-lock-timeout"},</div><div class='del'>-      .type = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min = 1,</div><div class='del'>-      .max = 60,</div><div class='del'>-      .default_value = "1",</div><div class='del'>-      .op_version = { GD_OP_VERSION_4_0_0 },</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = { "disperse", "locks", "timeout" },</div><div class='del'>-      .description = "It's equivalent to eager-lock-timeout option but for "</div><div class='del'>-                     "non regular files."</div><div class='del'>-    },</div><div class='del'>-    { .key = {"background-heals"},</div><div class='del'>-      .type = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min = 0,/*Disabling background heals*/</div><div class='del'>-      .max = 256,</div><div class='del'>-      .default_value = "8",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_7_3},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "This option can be used to control number of parallel"</div><div class='del'>-                     " heals",</div><div class='del'>-    },</div><div class='del'>-    { .key = {"heal-wait-qlength"},</div><div class='del'>-      .type = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min = 0,</div><div class='del'>-      .max = 65536, /*Around 100MB as of now with sizeof(ec_fop_data_t) at 1800*/</div><div class='del'>-      .default_value = "128",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_7_3},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "This option can be used to control number of heals"</div><div class='del'>-                     " that can wait",</div><div class='del'>-    },</div><div class='del'>-    { .key  = {"heal-timeout"},</div><div class='del'>-      .type = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min  = 60,</div><div class='del'>-      .max  = INT_MAX,</div><div class='del'>-      .default_value = "600",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_7_3},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "time interval for checking the need to self-heal "</div><div class='del'>-                     "in self-heal-daemon"</div><div class='del'>-    },</div><div class='del'>-    { .key = {"read-policy" },</div><div class='del'>-      .type = GF_OPTION_TYPE_STR,</div><div class='del'>-      .value = {"round-robin", "gfid-hash"},</div><div class='del'>-      .default_value = "gfid-hash",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_7_6},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "inode-read fops happen only on 'k' number of bricks in"</div><div class='del'>-              " n=k+m disperse subvolume. 'round-robin' selects the read"</div><div class='del'>-              " subvolume using round-robin algo. 'gfid-hash' selects read"</div><div class='del'>-              " subvolume based on hash of the gfid of that file/directory.",</div><div class='del'>-    },</div><div class='del'>-    { .key   = {"shd-max-threads"},</div><div class='del'>-      .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min   = 1,</div><div class='del'>-      .max   = 64,</div><div class='del'>-      .default_value = "1",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_9_0},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "Maximum number of parallel heals SHD can do per local "</div><div class='del'>-                      "brick.  This can substantially lower heal times, "</div><div class='del'>-                      "but can also crush your bricks if you don't have "</div><div class='del'>-                      "the storage hardware to support this."</div><div class='add'>+    {.key = {"iam-self-heal-daemon"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "This option differentiates if the disperse "</div><div class='add'>+                    "translator is running as part of self-heal-daemon "</div><div class='add'>+                    "or not."},</div><div class='add'>+    {.key = {"eager-lock"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_10},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "Enable/Disable eager lock for regular files on a "</div><div class='add'>+                    "disperse volume. If a fop takes a lock and completes "</div><div class='add'>+                    "its operation, it waits for next 1 second before "</div><div class='add'>+                    "releasing the lock, to see if the lock can be reused "</div><div class='add'>+                    "for next fop from the same client. If ec finds any lock "</div><div class='add'>+                    "contention within 1 second it releases the lock "</div><div class='add'>+                    "immediately before time expires. This improves the "</div><div class='add'>+                    "performance of file operations. However, as it takes "</div><div class='add'>+                    "lock on first brick, for few operations like read, "</div><div class='add'>+                    "discovery of lock contention might take long time and "</div><div class='add'>+                    "can actually degrade the performance. If eager lock is "</div><div class='add'>+                    "disabled, lock will be released as soon as fop "</div><div class='add'>+                    "completes."},</div><div class='add'>+    {.key = {"other-eager-lock"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_13_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "It's equivalent to the eager-lock option but for non "</div><div class='add'>+                    "regular files."},</div><div class='add'>+    {.key = {"eager-lock-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 60,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse", "locks", "timeout"},</div><div class='add'>+     .description = "Maximum time (in seconds) that a lock on an inode is "</div><div class='add'>+                    "kept held if no new operations on the inode are "</div><div class='add'>+                    "received."},</div><div class='add'>+    {.key = {"other-eager-lock-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 60,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse", "locks", "timeout"},</div><div class='add'>+     .description = "It's equivalent to eager-lock-timeout option but for "</div><div class='add'>+                    "non regular files."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"background-heals"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 0, /*Disabling background heals*/</div><div class='add'>+        .max = 256,</div><div class='add'>+        .default_value = "8",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_3},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"disperse"},</div><div class='add'>+        .description = "This option can be used to control number of parallel"</div><div class='add'>+                       " heals",</div><div class='ctx'>     },</div><div class='del'>-    { .key   = {"shd-wait-qlength"},</div><div class='del'>-      .type  = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min   = 1,</div><div class='del'>-      .max   = 65536,</div><div class='del'>-      .default_value = "1024",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_9_0},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "This option can be used to control number of heals"</div><div class='del'>-                     " that can wait in SHD per subvolume"</div><div class='add'>+    {</div><div class='add'>+        .key = {"heal-wait-qlength"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 0,</div><div class='add'>+        .max =</div><div class='add'>+            65536, /*Around 100MB as of now with sizeof(ec_fop_data_t) at 1800*/</div><div class='add'>+        .default_value = "128",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_3},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"disperse"},</div><div class='add'>+        .description = "This option can be used to control number of heals"</div><div class='add'>+                       " that can wait",</div><div class='ctx'>     },</div><div class='add'>+    {.key = {"heal-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 60,</div><div class='add'>+     .max = INT_MAX,</div><div class='add'>+     .default_value = "600",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "time interval for checking the need to self-heal "</div><div class='add'>+                    "in self-heal-daemon"},</div><div class='ctx'>     {</div><div class='del'>-        .key = { "cpu-extensions" },</div><div class='add'>+        .key = {"read-policy"},</div><div class='ctx'>         .type = GF_OPTION_TYPE_STR,</div><div class='del'>-        .value = { "none", "auto", "x64", "sse", "avx" },</div><div class='del'>-        .default_value = "auto",</div><div class='del'>-        .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+        .value = {"round-robin", "gfid-hash"},</div><div class='add'>+        .default_value = "gfid-hash",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_6},</div><div class='ctx'>         .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='ctx'>         .tags = {"disperse"},</div><div class='del'>-        .description = "force the cpu extensions to be used to accelerate the "</div><div class='del'>-                       "galois field computations."</div><div class='del'>-    },</div><div class='del'>-    { .key  = {"self-heal-window-size"},</div><div class='del'>-      .type = GF_OPTION_TYPE_INT,</div><div class='del'>-      .min  = 1,</div><div class='del'>-      .max  = 1024,</div><div class='del'>-      .default_value = "1",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_11_0},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description = "Maximum number blocks(128KB) per file for which "</div><div class='del'>-                     "self-heal process would be applied simultaneously."</div><div class='del'>-    },</div><div class='del'>-    { .key = {"optimistic-change-log"},</div><div class='del'>-      .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-      .default_value = "on",</div><div class='del'>-      .op_version = {GD_OP_VERSION_3_10_1},</div><div class='del'>-      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT,</div><div class='del'>-      .tags = {"disperse"},</div><div class='del'>-      .description =  "Set/Unset dirty flag for every update fop at the start"</div><div class='del'>-                      "of the fop. If OFF, this option impacts performance of"</div><div class='del'>-                      "entry  operations or metadata operations as it will"</div><div class='del'>-                      "set dirty flag at the start and unset it at the end of"</div><div class='del'>-                      "ALL update fop. If ON and all the bricks are good,"</div><div class='del'>-                      "dirty flag will be set at the start only for file fops"</div><div class='del'>-                      "For metadata and entry fops dirty flag will not be set"</div><div class='del'>-                      "at the start, if all the bricks are good. This does"</div><div class='del'>-                      "not impact performance for metadata operations and"</div><div class='del'>-                      "entry operation but has a very small window to miss"</div><div class='del'>-                      "marking entry as dirty in case it is required to be"</div><div class='del'>-                      "healed"</div><div class='del'>-    },</div><div class='del'>-    { .key = {"parallel-writes"},</div><div class='del'>-      .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-      .default_value = "on",</div><div class='del'>-      .description = "This controls if writes can be wound in parallel as long"</div><div class='del'>-                     "as it doesn't modify same stripes"</div><div class='del'>-    },</div><div class='del'>-    {   .key = {"stripe-cache"},</div><div class='del'>-        .type = GF_OPTION_TYPE_INT,</div><div class='del'>-        .min = 0,/*Disabling stripe_cache*/</div><div class='del'>-        .max = EC_STRIPE_CACHE_MAX_SIZE,</div><div class='del'>-        .default_value = "4",</div><div class='del'>-        .description =  "This option will keep the last stripe of write fop"</div><div class='del'>-                        "in memory. If next write falls in this stripe, we need"</div><div class='del'>-                        "not to read it again from backend and we can save READ"</div><div class='del'>-                        "fop going over the network. This will improve performance,"</div><div class='del'>-                        "specially for sequential writes. However, this will also"</div><div class='del'>-                        "lead to extra memory consumption, maximum "</div><div class='del'>-                        "(cache size * stripe size) Bytes per open file."</div><div class='add'>+        .description =</div><div class='add'>+            "inode-read fops happen only on 'k' number of bricks in"</div><div class='add'>+            " n=k+m disperse subvolume. 'round-robin' selects the read"</div><div class='add'>+            " subvolume using round-robin algo. 'gfid-hash' selects read"</div><div class='add'>+            " subvolume based on hash of the gfid of that file/directory.",</div><div class='ctx'>     },</div><div class='del'>-    { .key = {NULL} }</div><div class='del'>-};</div><div class='add'>+    {.key = {"shd-max-threads"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 64,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "Maximum number of parallel heals SHD can do per local "</div><div class='add'>+                    "brick.  This can substantially lower heal times, "</div><div class='add'>+                    "but can also crush your bricks if you don't have "</div><div class='add'>+                    "the storage hardware to support this."},</div><div class='add'>+    {.key = {"shd-wait-qlength"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 65536,</div><div class='add'>+     .default_value = "1024",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "This option can be used to control number of heals"</div><div class='add'>+                    " that can wait in SHD per subvolume"},</div><div class='add'>+    {.key = {"cpu-extensions"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"none", "auto", "x64", "sse", "avx"},</div><div class='add'>+     .default_value = "auto",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "force the cpu extensions to be used to accelerate the "</div><div class='add'>+                    "galois field computations."},</div><div class='add'>+    {.key = {"self-heal-window-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 1024,</div><div class='add'>+     .default_value = "1",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_11_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "Maximum number blocks(128KB) per file for which "</div><div class='add'>+                    "self-heal process would be applied simultaneously."},</div><div class='add'>+    {.key = {"optimistic-change-log"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_10_1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT,</div><div class='add'>+     .tags = {"disperse"},</div><div class='add'>+     .description = "Set/Unset dirty flag for every update fop at the start"</div><div class='add'>+                    "of the fop. If OFF, this option impacts performance of"</div><div class='add'>+                    "entry  operations or metadata operations as it will"</div><div class='add'>+                    "set dirty flag at the start and unset it at the end of"</div><div class='add'>+                    "ALL update fop. If ON and all the bricks are good,"</div><div class='add'>+                    "dirty flag will be set at the start only for file fops"</div><div class='add'>+                    "For metadata and entry fops dirty flag will not be set"</div><div class='add'>+                    "at the start, if all the bricks are good. This does"</div><div class='add'>+                    "not impact performance for metadata operations and"</div><div class='add'>+                    "entry operation but has a very small window to miss"</div><div class='add'>+                    "marking entry as dirty in case it is required to be"</div><div class='add'>+                    "healed"},</div><div class='add'>+    {.key = {"parallel-writes"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "on",</div><div class='add'>+     .description = "This controls if writes can be wound in parallel as long"</div><div class='add'>+                    "as it doesn't modify same stripes"},</div><div class='add'>+    {.key = {"stripe-cache"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 0, /*Disabling stripe_cache*/</div><div class='add'>+     .max = EC_STRIPE_CACHE_MAX_SIZE,</div><div class='add'>+     .default_value = "4",</div><div class='add'>+     .description = "This option will keep the last stripe of write fop"</div><div class='add'>+                    "in memory. If next write falls in this stripe, we need"</div><div class='add'>+                    "not to read it again from backend and we can save READ"</div><div class='add'>+                    "fop going over the network. This will improve performance,"</div><div class='add'>+                    "specially for sequential writes. However, this will also"</div><div class='add'>+                    "lead to extra memory consumption, maximum "</div><div class='add'>+                    "(cache size * stripe size) Bytes per open file."},</div><div class='add'>+    {.key = {NULL}}};</div><div class='head'>diff --git a/xlators/cluster/stripe/src/stripe-helpers.c b/xlators/cluster/stripe/src/stripe-helpers.c<br/>index 59dfdfad979..7301494415d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/stripe/src/stripe-helpers.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/stripe/src/stripe-helpers.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/stripe/src/stripe-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/stripe/src/stripe-helpers.c</a></div><div class='hunk'>@@ -16,664 +16,643 @@</div><div class='ctx'> #include "logging.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-stripe_local_wipe (stripe_local_t *local)</div><div class='add'>+stripe_local_wipe(stripe_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc2);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc2);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd)</div><div class='del'>-                fd_unref (local-&gt;fd);</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inode)</div><div class='del'>-                inode_unref (local-&gt;inode);</div><div class='add'>+    if (local-&gt;inode)</div><div class='add'>+        inode_unref(local-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr)</div><div class='del'>-                dict_unref (local-&gt;xattr);</div><div class='add'>+    if (local-&gt;xattr)</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-stripe_aggregate (dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+stripe_aggregate(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *dst  = NULL;</div><div class='del'>-        int64_t *ptr  = 0, *size = NULL;</div><div class='del'>-        int32_t  ret  = -1;</div><div class='del'>-</div><div class='del'>-        dst = data;</div><div class='del'>-</div><div class='del'>-        if (strcmp (key, QUOTA_SIZE_KEY) == 0) {</div><div class='del'>-                ret = dict_get_bin (dst, key, (void **)&amp;size);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        size = GF_CALLOC (1, sizeof (int64_t),</div><div class='del'>-                                          gf_common_mt_char);</div><div class='del'>-                        if (size == NULL) {</div><div class='del'>-                                gf_log ("stripe", GF_LOG_WARNING,</div><div class='del'>-                                        "memory allocation failed");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ret = dict_set_bin (dst, key, size, sizeof (int64_t));</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log ("stripe", GF_LOG_WARNING,</div><div class='del'>-                                        "stripe aggregate dict set failed");</div><div class='del'>-                                GF_FREE (size);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ptr = data_to_bin (value);</div><div class='del'>-                if (ptr == NULL) {</div><div class='del'>-                        gf_log ("stripe", GF_LOG_WARNING, "data to bin failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                *size = hton64 (ntoh64 (*size) + ntoh64 (*ptr));</div><div class='del'>-        } else if (strcmp (key, GF_CONTENT_KEY)) {</div><div class='del'>-                /* No need to aggregate 'CONTENT' data */</div><div class='del'>-                ret = dict_set (dst, key, value);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log ("stripe", GF_LOG_WARNING, "xattr dict set failed");</div><div class='add'>+    dict_t *dst = NULL;</div><div class='add'>+    int64_t *ptr = 0, *size = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    dst = data;</div><div class='add'>+</div><div class='add'>+    if (strcmp(key, QUOTA_SIZE_KEY) == 0) {</div><div class='add'>+        ret = dict_get_bin(dst, key, (void **)&amp;size);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            size = GF_CALLOC(1, sizeof(int64_t), gf_common_mt_char);</div><div class='add'>+            if (size == NULL) {</div><div class='add'>+                gf_log("stripe", GF_LOG_WARNING, "memory allocation failed");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            ret = dict_set_bin(dst, key, size, sizeof(int64_t));</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log("stripe", GF_LOG_WARNING,</div><div class='add'>+                       "stripe aggregate dict set failed");</div><div class='add'>+                GF_FREE(size);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ptr = data_to_bin(value);</div><div class='add'>+        if (ptr == NULL) {</div><div class='add'>+            gf_log("stripe", GF_LOG_WARNING, "data to bin failed");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        *size = hton64(ntoh64(*size) + ntoh64(*ptr));</div><div class='add'>+    } else if (strcmp(key, GF_CONTENT_KEY)) {</div><div class='add'>+        /* No need to aggregate 'CONTENT' data */</div><div class='add'>+        ret = dict_set(dst, key, value);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log("stripe", GF_LOG_WARNING, "xattr dict set failed");</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-stripe_aggregate_xattr (dict_t *dst, dict_t *src)</div><div class='add'>+stripe_aggregate_xattr(dict_t *dst, dict_t *src)</div><div class='ctx'> {</div><div class='del'>-        if ((dst == NULL) || (src == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((dst == NULL) || (src == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict_foreach (src, stripe_aggregate, dst);</div><div class='add'>+    dict_foreach(src, stripe_aggregate, dst);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_xattr_aggregate (char *buffer, stripe_local_t *local, int32_t *total)</div><div class='add'>+stripe_xattr_aggregate(char *buffer, stripe_local_t *local, int32_t *total)</div><div class='ctx'> {</div><div class='del'>-        int32_t              i     = 0;</div><div class='del'>-        int32_t              ret   = -1;</div><div class='del'>-        int32_t              len   = 0;</div><div class='del'>-        char                *sbuf  = NULL;</div><div class='del'>-        stripe_xattr_sort_t *xattr = NULL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+    char *sbuf = NULL;</div><div class='add'>+    stripe_xattr_sort_t *xattr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!buffer || !local || !local-&gt;xattr_list)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!buffer || !local || !local-&gt;xattr_list)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        sbuf = buffer;</div><div class='add'>+    sbuf = buffer;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; local-&gt;nallocs; i++) {</div><div class='del'>-                xattr = local-&gt;xattr_list + i;</div><div class='del'>-                len = xattr-&gt;xattr_len - 1; /* length includes \0 */</div><div class='add'>+    for (i = 0; i &lt; local-&gt;nallocs; i++) {</div><div class='add'>+        xattr = local-&gt;xattr_list + i;</div><div class='add'>+        len = xattr-&gt;xattr_len - 1; /* length includes \0 */</div><div class='ctx'> </div><div class='del'>-                if (len &amp;&amp; xattr &amp;&amp; xattr-&gt;xattr_value) {</div><div class='del'>-                        memcpy (buffer, xattr-&gt;xattr_value, len);</div><div class='del'>-                        buffer += len;</div><div class='del'>-                        *buffer++ = ' ';</div><div class='del'>-                }</div><div class='add'>+        if (len &amp;&amp; xattr &amp;&amp; xattr-&gt;xattr_value) {</div><div class='add'>+            memcpy(buffer, xattr-&gt;xattr_value, len);</div><div class='add'>+            buffer += len;</div><div class='add'>+            *buffer++ = ' ';</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *--buffer = '\0';</div><div class='del'>-        if (total)</div><div class='del'>-                *total = buffer - sbuf;</div><div class='del'>-        ret = 0;</div><div class='add'>+    *--buffer = '\0';</div><div class='add'>+    if (total)</div><div class='add'>+        *total = buffer - sbuf;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_free_xattr_str (stripe_local_t *local)</div><div class='add'>+stripe_free_xattr_str(stripe_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int32_t              i     = 0;</div><div class='del'>-        int32_t              ret   = -1;</div><div class='del'>-        stripe_xattr_sort_t *xattr = NULL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    stripe_xattr_sort_t *xattr = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!local || !local-&gt;xattr_list)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local || !local-&gt;xattr_list)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; local-&gt;nallocs; i++) {</div><div class='del'>-                xattr = local-&gt;xattr_list + i;</div><div class='add'>+    for (i = 0; i &lt; local-&gt;nallocs; i++) {</div><div class='add'>+        xattr = local-&gt;xattr_list + i;</div><div class='ctx'> </div><div class='del'>-                if (xattr &amp;&amp; xattr-&gt;xattr_value)</div><div class='del'>-                        GF_FREE (xattr-&gt;xattr_value);</div><div class='del'>-        }</div><div class='add'>+        if (xattr &amp;&amp; xattr-&gt;xattr_value)</div><div class='add'>+            GF_FREE(xattr-&gt;xattr_value);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_fill_lockinfo_xattr (xlator_t *this, stripe_local_t *local,</div><div class='del'>-                            void **xattr_serz)</div><div class='add'>+stripe_fill_lockinfo_xattr(xlator_t *this, stripe_local_t *local,</div><div class='add'>+                           void **xattr_serz)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret   = -1, i = 0, len = 0;</div><div class='del'>-        dict_t              *tmp1  = NULL, *tmp2 = NULL;</div><div class='del'>-        char                *buf   = NULL;</div><div class='del'>-        stripe_xattr_sort_t *xattr = NULL;</div><div class='del'>-</div><div class='del'>-        if (xattr_serz == NULL) {</div><div class='add'>+    int32_t ret = -1, i = 0, len = 0;</div><div class='add'>+    dict_t *tmp1 = NULL, *tmp2 = NULL;</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    stripe_xattr_sort_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    if (xattr_serz == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmp2 = dict_new();</div><div class='add'>+</div><div class='add'>+    if (tmp2 == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; local-&gt;nallocs; i++) {</div><div class='add'>+        xattr = local-&gt;xattr_list + i;</div><div class='add'>+        len = xattr-&gt;xattr_len;</div><div class='add'>+</div><div class='add'>+        if (len &amp;&amp; xattr &amp;&amp; xattr-&gt;xattr_value) {</div><div class='add'>+            ret = dict_reset(tmp2);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "dict_reset failed (%s)",</div><div class='add'>+                       strerror(-ret));</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = dict_unserialize(xattr-&gt;xattr_value, xattr-&gt;xattr_len, &amp;tmp2);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "dict_unserialize failed (%s)", strerror(-ret));</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tmp2 = dict_new ();</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (tmp2 == NULL) {</div><div class='add'>+            tmp1 = dict_copy(tmp2, tmp1);</div><div class='add'>+            if (tmp1 == NULL) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING, "dict_copy failed (%s)",</div><div class='add'>+                       strerror(-ret));</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; local-&gt;nallocs; i++) {</div><div class='del'>-                xattr = local-&gt;xattr_list + i;</div><div class='del'>-                len = xattr-&gt;xattr_len;</div><div class='del'>-</div><div class='del'>-                if (len &amp;&amp; xattr &amp;&amp; xattr-&gt;xattr_value) {</div><div class='del'>-                        ret = dict_reset (tmp2);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "dict_reset failed (%s)",</div><div class='del'>-                                        strerror (-ret));</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = dict_unserialize (xattr-&gt;xattr_value,</div><div class='del'>-                                                xattr-&gt;xattr_len,</div><div class='del'>-                                                &amp;tmp2);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "dict_unserialize failed (%s)",</div><div class='del'>-                                        strerror (-ret));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        tmp1 = dict_copy (tmp2, tmp1);</div><div class='del'>-                        if (tmp1 == NULL) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "dict_copy failed (%s)",</div><div class='del'>-                                        strerror (-ret));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = dict_serialized_length(tmp1);</div><div class='add'>+    if (len &gt; 0) {</div><div class='add'>+        buf = GF_CALLOC(1, len, gf_common_mt_dict_t);</div><div class='add'>+        if (buf == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        len = dict_serialized_length (tmp1);</div><div class='del'>-        if (len &gt; 0) {</div><div class='del'>-                buf = GF_CALLOC (1, len, gf_common_mt_dict_t);</div><div class='del'>-                if (buf == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_serialize (tmp1, buf);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "dict_serialize failed (%s)", strerror (-ret));</div><div class='del'>-                        GF_FREE(buf);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                *xattr_serz = buf;</div><div class='add'>+        ret = dict_serialize(tmp1, buf);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "dict_serialize failed (%s)",</div><div class='add'>+                   strerror(-ret));</div><div class='add'>+            GF_FREE(buf);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        *xattr_serz = buf;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (tmp1 != NULL) {</div><div class='del'>-                dict_unref (tmp1);</div><div class='del'>-        }</div><div class='add'>+    if (tmp1 != NULL) {</div><div class='add'>+        dict_unref(tmp1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (tmp2 != NULL) {</div><div class='del'>-                dict_unref (tmp2);</div><div class='del'>-        }</div><div class='add'>+    if (tmp2 != NULL) {</div><div class='add'>+        dict_unref(tmp2);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_fill_pathinfo_xattr (xlator_t *this, stripe_local_t *local,</div><div class='del'>-                            char **xattr_serz)</div><div class='add'>+stripe_fill_pathinfo_xattr(xlator_t *this, stripe_local_t *local,</div><div class='add'>+                           char **xattr_serz)</div><div class='ctx'> {</div><div class='del'>-        int      ret             = -1;</div><div class='del'>-        int32_t  padding         = 0;</div><div class='del'>-        int32_t  tlen            = 0;</div><div class='del'>-        int      len             = 0;</div><div class='del'>-        char stripe_size_str[20] = {0,};</div><div class='del'>-        char    *pathinfo_serz   = NULL;</div><div class='del'>-</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        len = snprintf (stripe_size_str, sizeof (stripe_size_str), "%"PRId64,</div><div class='del'>-                         (long long) (local-&gt;fctx) ? local-&gt;fctx-&gt;stripe_size : 0);</div><div class='del'>-        if (len &lt; 0 || len &gt;= sizeof (stripe_size_str))</div><div class='del'>-                goto out;</div><div class='del'>-        /* extra bytes for decorations (brackets and &lt;&gt;'s) */</div><div class='del'>-        padding = strlen (this-&gt;name) + SLEN (STRIPE_PATHINFO_HEADER)</div><div class='del'>-                  + len + 7;</div><div class='del'>-        local-&gt;xattr_total_len += (padding + 2);</div><div class='del'>-</div><div class='del'>-        pathinfo_serz = GF_MALLOC (local-&gt;xattr_total_len,</div><div class='del'>-                                   gf_common_mt_char);</div><div class='del'>-        if (!pathinfo_serz)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* xlator info */</div><div class='del'>-        (void) sprintf (pathinfo_serz, "(&lt;"STRIPE_PATHINFO_HEADER"%s:[%s]&gt; ",</div><div class='del'>-                        this-&gt;name, stripe_size_str);</div><div class='del'>-</div><div class='del'>-        ret = stripe_xattr_aggregate (pathinfo_serz + padding, local, &amp;tlen);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Cannot aggregate pathinfo list");</div><div class='del'>-                GF_FREE(pathinfo_serz);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *(pathinfo_serz + padding + tlen) = ')';</div><div class='del'>-        *(pathinfo_serz + padding + tlen + 1) = '\0';</div><div class='del'>-</div><div class='del'>-        *xattr_serz = pathinfo_serz;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t padding = 0;</div><div class='add'>+    int32_t tlen = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+    char stripe_size_str[20] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *pathinfo_serz = NULL;</div><div class='add'>+</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = snprintf(stripe_size_str, sizeof(stripe_size_str), "%" PRId64,</div><div class='add'>+                   (long long)(local-&gt;fctx) ? local-&gt;fctx-&gt;stripe_size : 0);</div><div class='add'>+    if (len &lt; 0 || len &gt;= sizeof(stripe_size_str))</div><div class='add'>+        goto out;</div><div class='add'>+    /* extra bytes for decorations (brackets and &lt;&gt;'s) */</div><div class='add'>+    padding = strlen(this-&gt;name) + SLEN(STRIPE_PATHINFO_HEADER) + len + 7;</div><div class='add'>+    local-&gt;xattr_total_len += (padding + 2);</div><div class='add'>+</div><div class='add'>+    pathinfo_serz = GF_MALLOC(local-&gt;xattr_total_len, gf_common_mt_char);</div><div class='add'>+    if (!pathinfo_serz)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* xlator info */</div><div class='add'>+    (void)sprintf(pathinfo_serz, "(&lt;" STRIPE_PATHINFO_HEADER "%s:[%s]&gt; ",</div><div class='add'>+                  this-&gt;name, stripe_size_str);</div><div class='add'>+</div><div class='add'>+    ret = stripe_xattr_aggregate(pathinfo_serz + padding, local, &amp;tlen);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Cannot aggregate pathinfo list");</div><div class='add'>+        GF_FREE(pathinfo_serz);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *(pathinfo_serz + padding + tlen) = ')';</div><div class='add'>+    *(pathinfo_serz + padding + tlen + 1) = '\0';</div><div class='add'>+</div><div class='add'>+    *xattr_serz = pathinfo_serz;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * stripe_get_matching_bs - Get the matching block size for the given path.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-stripe_get_matching_bs (const char *path, stripe_private_t *priv)</div><div class='add'>+stripe_get_matching_bs(const char *path, stripe_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        struct stripe_options *trav       = NULL;</div><div class='del'>-        uint64_t               block_size = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("stripe", priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("stripe", path, out);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                block_size = priv-&gt;block_size;</div><div class='del'>-                trav = priv-&gt;pattern;</div><div class='del'>-                while (trav) {</div><div class='del'>-                        if (!fnmatch (trav-&gt;path_pattern, path, FNM_NOESCAPE)) {</div><div class='del'>-                                block_size = trav-&gt;block_size;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                }</div><div class='add'>+    struct stripe_options *trav = NULL;</div><div class='add'>+    uint64_t block_size = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("stripe", priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("stripe", path, out);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        block_size = priv-&gt;block_size;</div><div class='add'>+        trav = priv-&gt;pattern;</div><div class='add'>+        while (trav) {</div><div class='add'>+            if (!fnmatch(trav-&gt;path_pattern, path, FNM_NOESCAPE)) {</div><div class='add'>+                block_size = trav-&gt;block_size;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            trav = trav-&gt;next;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return block_size;</div><div class='add'>+    return block_size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_ctx_handle (xlator_t *this, call_frame_t *prev, stripe_local_t *local,</div><div class='del'>-                   dict_t *dict)</div><div class='add'>+stripe_ctx_handle(xlator_t *this, call_frame_t *prev, stripe_local_t *local,</div><div class='add'>+                  dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        char            key[256]       = {0,};</div><div class='del'>-        data_t         *data            = NULL;</div><div class='del'>-        int32_t         index           = 0;</div><div class='del'>-        stripe_private_t *priv          = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!local-&gt;fctx) {</div><div class='add'>+        local-&gt;fctx = GF_CALLOC(1, sizeof(stripe_fd_ctx_t),</div><div class='add'>+                                gf_stripe_mt_stripe_fd_ctx_t);</div><div class='ctx'>         if (!local-&gt;fctx) {</div><div class='del'>-                local-&gt;fctx =  GF_CALLOC (1, sizeof (stripe_fd_ctx_t),</div><div class='del'>-                                         gf_stripe_mt_stripe_fd_ctx_t);</div><div class='del'>-                if (!local-&gt;fctx) {</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;fctx-&gt;static_array = 0;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        /* Stripe block size */</div><div class='del'>-        sprintf (key, "trusted.%s.stripe-size", this-&gt;name);</div><div class='del'>-        data = dict_get (dict, key);</div><div class='del'>-        if (!data) {</div><div class='del'>-                local-&gt;xattr_self_heal_needed = 1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get stripe-size");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                if (!local-&gt;fctx-&gt;stripe_size) {</div><div class='del'>-                        local-&gt;fctx-&gt;stripe_size =</div><div class='del'>-                                     data_to_int64 (data);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;fctx-&gt;stripe_size != data_to_int64 (data)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "stripe-size mismatch in blocks");</div><div class='del'>-                        local-&gt;xattr_self_heal_needed = 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Stripe count */</div><div class='del'>-        sprintf (key, "trusted.%s.stripe-count", this-&gt;name);</div><div class='del'>-        data = dict_get (dict, key);</div><div class='ctx'> </div><div class='del'>-        if (!data) {</div><div class='del'>-                local-&gt;xattr_self_heal_needed = 1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get stripe-count");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!local-&gt;fctx-&gt;xl_array) {</div><div class='del'>-                local-&gt;fctx-&gt;stripe_count = data_to_int32 (data);</div><div class='del'>-                if (!local-&gt;fctx-&gt;stripe_count) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "error with stripe-count xattr");</div><div class='del'>-                        local-&gt;op_ret   = -1;</div><div class='del'>-                        local-&gt;op_errno = EIO;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;fctx-&gt;xl_array = GF_CALLOC (local-&gt;fctx-&gt;stripe_count,</div><div class='del'>-                                                   sizeof (xlator_t *),</div><div class='del'>-                                                   gf_stripe_mt_xlator_t);</div><div class='del'>-</div><div class='del'>-                if (!local-&gt;fctx-&gt;xl_array) {</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        local-&gt;op_ret   = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (local-&gt;fctx-&gt;stripe_count != data_to_int32 (data)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "error with stripe-count xattr (%d != %d)",</div><div class='del'>-                        local-&gt;fctx-&gt;stripe_count, data_to_int32 (data));</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                goto out;</div><div class='add'>+        local-&gt;fctx-&gt;static_array = 0;</div><div class='add'>+    }</div><div class='add'>+    /* Stripe block size */</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-size", this-&gt;name);</div><div class='add'>+    data = dict_get(dict, key);</div><div class='add'>+    if (!data) {</div><div class='add'>+        local-&gt;xattr_self_heal_needed = 1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to get stripe-size");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        if (!local-&gt;fctx-&gt;stripe_size) {</div><div class='add'>+            local-&gt;fctx-&gt;stripe_size = data_to_int64(data);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* index */</div><div class='del'>-        sprintf (key, "trusted.%s.stripe-index", this-&gt;name);</div><div class='del'>-        data = dict_get (dict, key);</div><div class='del'>-        if (!data) {</div><div class='del'>-                local-&gt;xattr_self_heal_needed = 1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get stripe-index");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        index = data_to_int32 (data);</div><div class='del'>-        if (index &gt; priv-&gt;child_count) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "error with stripe-index xattr (%d)", index);</div><div class='del'>-                local-&gt;op_ret   = -1;</div><div class='del'>-                local-&gt;op_errno = EIO;</div><div class='del'>-                goto out;</div><div class='add'>+        if (local-&gt;fctx-&gt;stripe_size != data_to_int64(data)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "stripe-size mismatch in blocks");</div><div class='add'>+            local-&gt;xattr_self_heal_needed = 1;</div><div class='ctx'>         }</div><div class='del'>-        if (local-&gt;fctx-&gt;xl_array) {</div><div class='del'>-                if (!local-&gt;fctx-&gt;xl_array[index])</div><div class='del'>-                        local-&gt;fctx-&gt;xl_array[index] = prev-&gt;this;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Stripe count */</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-count", this-&gt;name);</div><div class='add'>+    data = dict_get(dict, key);</div><div class='add'>+</div><div class='add'>+    if (!data) {</div><div class='add'>+        local-&gt;xattr_self_heal_needed = 1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to get stripe-count");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!local-&gt;fctx-&gt;xl_array) {</div><div class='add'>+        local-&gt;fctx-&gt;stripe_count = data_to_int32(data);</div><div class='add'>+        if (!local-&gt;fctx-&gt;stripe_count) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "error with stripe-count xattr");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EIO;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	sprintf(key, "trusted.%s.stripe-coalesce", this-&gt;name);</div><div class='del'>-	data = dict_get(dict, key);</div><div class='del'>-	if (!data) {</div><div class='del'>-		/*</div><div class='del'>-		 * The file was probably created prior to coalesce support.</div><div class='del'>-		 * Assume non-coalesce mode for this file to maintain backwards</div><div class='del'>-		 * compatibility.</div><div class='del'>-		 */</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_DEBUG, "missing stripe-coalesce "</div><div class='del'>-			"attr, assume non-coalesce mode");</div><div class='del'>-		local-&gt;fctx-&gt;stripe_coalesce = 0;</div><div class='del'>-	} else {</div><div class='del'>-		local-&gt;fctx-&gt;stripe_coalesce = data_to_int32(data);</div><div class='del'>-	}</div><div class='add'>+        local-&gt;fctx-&gt;xl_array = GF_CALLOC(local-&gt;fctx-&gt;stripe_count,</div><div class='add'>+                                          sizeof(xlator_t *),</div><div class='add'>+                                          gf_stripe_mt_xlator_t);</div><div class='ctx'> </div><div class='add'>+        if (!local-&gt;fctx-&gt;xl_array) {</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;fctx-&gt;stripe_count != data_to_int32(data)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "error with stripe-count xattr (%d != %d)",</div><div class='add'>+               local-&gt;fctx-&gt;stripe_count, data_to_int32(data));</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* index */</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-index", this-&gt;name);</div><div class='add'>+    data = dict_get(dict, key);</div><div class='add'>+    if (!data) {</div><div class='add'>+        local-&gt;xattr_self_heal_needed = 1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to get stripe-index");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    index = data_to_int32(data);</div><div class='add'>+    if (index &gt; priv-&gt;child_count) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "error with stripe-index xattr (%d)",</div><div class='add'>+               index);</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;fctx-&gt;xl_array) {</div><div class='add'>+        if (!local-&gt;fctx-&gt;xl_array[index])</div><div class='add'>+            local-&gt;fctx-&gt;xl_array[index] = prev-&gt;this;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-coalesce", this-&gt;name);</div><div class='add'>+    data = dict_get(dict, key);</div><div class='add'>+    if (!data) {</div><div class='add'>+        /*</div><div class='add'>+         * The file was probably created prior to coalesce support.</div><div class='add'>+         * Assume non-coalesce mode for this file to maintain backwards</div><div class='add'>+         * compatibility.</div><div class='add'>+         */</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "missing stripe-coalesce "</div><div class='add'>+               "attr, assume non-coalesce mode");</div><div class='add'>+        local-&gt;fctx-&gt;stripe_coalesce = 0;</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;fctx-&gt;stripe_coalesce = data_to_int32(data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_xattr_request_build (xlator_t *this, dict_t *dict, uint64_t stripe_size,</div><div class='del'>-                            uint32_t stripe_count, uint32_t stripe_index,</div><div class='del'>-			    uint32_t stripe_coalesce)</div><div class='add'>+stripe_xattr_request_build(xlator_t *this, dict_t *dict, uint64_t stripe_size,</div><div class='add'>+                           uint32_t stripe_count, uint32_t stripe_index,</div><div class='add'>+                           uint32_t stripe_coalesce)</div><div class='ctx'> {</div><div class='del'>-        char            key[256]       = {0,};</div><div class='del'>-        int32_t         ret             = -1;</div><div class='del'>-</div><div class='del'>-        sprintf (key, "trusted.%s.stripe-size", this-&gt;name);</div><div class='del'>-        ret = dict_set_int64 (dict, key, stripe_size);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set %s in xattr_req dict", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sprintf (key, "trusted.%s.stripe-count", this-&gt;name);</div><div class='del'>-        ret = dict_set_int32 (dict, key, stripe_count);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set %s in xattr_req dict", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sprintf (key, "trusted.%s.stripe-index", this-&gt;name);</div><div class='del'>-        ret = dict_set_int32 (dict, key, stripe_index);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set %s in xattr_req dict", key);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	sprintf(key, "trusted.%s.stripe-coalesce", this-&gt;name);</div><div class='del'>-	ret = dict_set_int32(dict, key, stripe_coalesce);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"failed to set %s in xattr_req_dict", key);</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='add'>+    char key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-size", this-&gt;name);</div><div class='add'>+    ret = dict_set_int64(dict, key, stripe_size);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set %s in xattr_req dict",</div><div class='add'>+               key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-count", this-&gt;name);</div><div class='add'>+    ret = dict_set_int32(dict, key, stripe_count);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set %s in xattr_req dict",</div><div class='add'>+               key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-index", this-&gt;name);</div><div class='add'>+    ret = dict_set_int32(dict, key, stripe_index);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set %s in xattr_req dict",</div><div class='add'>+               key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sprintf(key, "trusted.%s.stripe-coalesce", this-&gt;name);</div><div class='add'>+    ret = dict_set_int32(dict, key, stripe_coalesce);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set %s in xattr_req_dict",</div><div class='add'>+               key);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-set_default_block_size (stripe_private_t *priv, char *num)</div><div class='add'>+set_default_block_size(stripe_private_t *priv, char *num)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("stripe", THIS, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, num, out);</div><div class='add'>+</div><div class='add'>+    if (gf_string2bytesize_uint64(num, &amp;priv-&gt;block_size) != 0) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_ERROR, "invalid number format \"%s\"", num);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        int             ret = -1;</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("stripe", THIS, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, num, out);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (gf_string2bytesize_uint64 (num, &amp;priv-&gt;block_size) != 0) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "invalid number format \"%s\"", num);</div><div class='add'>+int</div><div class='add'>+set_stripe_block_size(xlator_t *this, stripe_private_t *priv, char *data)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='add'>+    char *tmp_str1 = NULL;</div><div class='add'>+    char *dup_str = NULL;</div><div class='add'>+    char *stripe_str = NULL;</div><div class='add'>+    char *pattern = NULL;</div><div class='add'>+    char *num = NULL;</div><div class='add'>+    struct stripe_options *temp_stripeopt = NULL;</div><div class='add'>+    struct stripe_options *stripe_opt = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !priv || !data)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* Get the pattern for striping.</div><div class='add'>+       "option block-size *avi:10MB" etc */</div><div class='add'>+    stripe_str = strtok_r(data, ",", &amp;tmp_str);</div><div class='add'>+    while (stripe_str) {</div><div class='add'>+        dup_str = gf_strdup(stripe_str);</div><div class='add'>+        stripe_opt = GF_CALLOC(1, sizeof(struct stripe_options),</div><div class='add'>+                               gf_stripe_mt_stripe_options);</div><div class='add'>+        if (!stripe_opt) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        pattern = strtok_r(dup_str, ":", &amp;tmp_str1);</div><div class='add'>+        num = strtok_r(NULL, ":", &amp;tmp_str1);</div><div class='add'>+        if (!num) {</div><div class='add'>+            num = pattern;</div><div class='add'>+            pattern = "*";</div><div class='add'>+            ret = set_default_block_size(priv, num);</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='ctx'>         }</div><div class='add'>+        if (gf_string2bytesize_uint64(num, &amp;stripe_opt-&gt;block_size) != 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "invalid number format \"%s\"",</div><div class='add'>+                   num);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        if (stripe_opt-&gt;block_size &lt; STRIPE_MIN_BLOCK_SIZE) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Invalid Block-size: "</div><div class='add'>+                   "%s. Should be at least %llu bytes",</div><div class='add'>+                   num, STRIPE_MIN_BLOCK_SIZE);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (stripe_opt-&gt;block_size % 512) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Block-size: %s should"</div><div class='add'>+                   " be a multiple of 512 bytes",</div><div class='add'>+                   num);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+        memcpy(stripe_opt-&gt;path_pattern, pattern, strlen(pattern));</div><div class='ctx'> </div><div class='del'>-}</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "block-size : pattern %s : size %" PRId64,</div><div class='add'>+               stripe_opt-&gt;path_pattern, stripe_opt-&gt;block_size);</div><div class='ctx'> </div><div class='add'>+        if (priv-&gt;pattern)</div><div class='add'>+            temp_stripeopt = NULL;</div><div class='add'>+        else</div><div class='add'>+            temp_stripeopt = priv-&gt;pattern;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-set_stripe_block_size (xlator_t *this, stripe_private_t *priv, char *data)</div><div class='del'>-{</div><div class='del'>-        int                    ret = -1;</div><div class='del'>-        char                  *tmp_str = NULL;</div><div class='del'>-        char                  *tmp_str1 = NULL;</div><div class='del'>-        char                  *dup_str = NULL;</div><div class='del'>-        char                  *stripe_str = NULL;</div><div class='del'>-        char                  *pattern = NULL;</div><div class='del'>-        char                  *num = NULL;</div><div class='del'>-        struct stripe_options *temp_stripeopt = NULL;</div><div class='del'>-        struct stripe_options *stripe_opt = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !priv || !data)</div><div class='del'>-                goto out;</div><div class='add'>+        stripe_opt-&gt;next = temp_stripeopt;</div><div class='ctx'> </div><div class='del'>-        /* Get the pattern for striping.</div><div class='del'>-           "option block-size *avi:10MB" etc */</div><div class='del'>-        stripe_str = strtok_r (data, ",", &amp;tmp_str);</div><div class='del'>-        while (stripe_str) {</div><div class='del'>-                dup_str = gf_strdup (stripe_str);</div><div class='del'>-                stripe_opt = GF_CALLOC (1, sizeof (struct stripe_options),</div><div class='del'>-                                        gf_stripe_mt_stripe_options);</div><div class='del'>-                if (!stripe_opt) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                pattern = strtok_r (dup_str, ":", &amp;tmp_str1);</div><div class='del'>-                num = strtok_r (NULL, ":", &amp;tmp_str1);</div><div class='del'>-                if (!num) {</div><div class='del'>-                        num = pattern;</div><div class='del'>-                        pattern = "*";</div><div class='del'>-                        ret = set_default_block_size (priv, num);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-                if (gf_string2bytesize_uint64 (num, &amp;stripe_opt-&gt;block_size) != 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "invalid number format \"%s\"", num);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (stripe_opt-&gt;block_size &lt; STRIPE_MIN_BLOCK_SIZE) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Invalid Block-size: "</div><div class='del'>-                                "%s. Should be at least %llu bytes", num,</div><div class='del'>-                                STRIPE_MIN_BLOCK_SIZE);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (stripe_opt-&gt;block_size % 512) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Block-size: %s should"</div><div class='del'>-                                " be a multiple of 512 bytes", num);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                memcpy (stripe_opt-&gt;path_pattern, pattern, strlen (pattern));</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "block-size : pattern %s : size %"PRId64,</div><div class='del'>-                        stripe_opt-&gt;path_pattern, stripe_opt-&gt;block_size);</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;pattern)</div><div class='del'>-                        temp_stripeopt = NULL;</div><div class='del'>-                else</div><div class='del'>-                        temp_stripeopt = priv-&gt;pattern;</div><div class='del'>-</div><div class='del'>-                stripe_opt-&gt;next = temp_stripeopt;</div><div class='del'>-</div><div class='del'>-                priv-&gt;pattern = stripe_opt;</div><div class='del'>-                stripe_opt = NULL;</div><div class='del'>-</div><div class='del'>-                GF_FREE (dup_str);</div><div class='del'>-                dup_str = NULL;</div><div class='del'>-</div><div class='del'>-                stripe_str = strtok_r (NULL, ",", &amp;tmp_str);</div><div class='del'>-        }</div><div class='add'>+        priv-&gt;pattern = stripe_opt;</div><div class='add'>+        stripe_opt = NULL;</div><div class='add'>+</div><div class='add'>+        GF_FREE(dup_str);</div><div class='add'>+        dup_str = NULL;</div><div class='add'>+</div><div class='add'>+        stripe_str = strtok_r(NULL, ",", &amp;tmp_str);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        GF_FREE (dup_str);</div><div class='add'>+    GF_FREE(dup_str);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (stripe_opt);</div><div class='add'>+    GF_FREE(stripe_opt);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_iatt_merge (struct iatt *from, struct iatt *to)</div><div class='add'>+stripe_iatt_merge(struct iatt *from, struct iatt *to)</div><div class='ctx'> {</div><div class='del'>-        if (to-&gt;ia_size &lt; from-&gt;ia_size)</div><div class='del'>-                to-&gt;ia_size = from-&gt;ia_size;</div><div class='del'>-        if (to-&gt;ia_mtime &lt; from-&gt;ia_mtime)</div><div class='del'>-                to-&gt;ia_mtime = from-&gt;ia_mtime;</div><div class='del'>-        if (to-&gt;ia_ctime &lt; from-&gt;ia_ctime)</div><div class='del'>-                to-&gt;ia_ctime = from-&gt;ia_ctime;</div><div class='del'>-        if (to-&gt;ia_atime &lt; from-&gt;ia_atime)</div><div class='del'>-                to-&gt;ia_atime = from-&gt;ia_atime;</div><div class='del'>-        return 0;</div><div class='add'>+    if (to-&gt;ia_size &lt; from-&gt;ia_size)</div><div class='add'>+        to-&gt;ia_size = from-&gt;ia_size;</div><div class='add'>+    if (to-&gt;ia_mtime &lt; from-&gt;ia_mtime)</div><div class='add'>+        to-&gt;ia_mtime = from-&gt;ia_mtime;</div><div class='add'>+    if (to-&gt;ia_ctime &lt; from-&gt;ia_ctime)</div><div class='add'>+        to-&gt;ia_ctime = from-&gt;ia_ctime;</div><div class='add'>+    if (to-&gt;ia_atime &lt; from-&gt;ia_atime)</div><div class='add'>+        to-&gt;ia_atime = from-&gt;ia_atime;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='ctx'> coalesced_offset(off_t offset, uint64_t stripe_size, int stripe_count)</div><div class='ctx'> {</div><div class='del'>-	size_t line_size = 0;</div><div class='del'>-	uint64_t stripe_num = 0;</div><div class='del'>-	off_t coalesced_offset = 0;</div><div class='add'>+    size_t line_size = 0;</div><div class='add'>+    uint64_t stripe_num = 0;</div><div class='add'>+    off_t coalesced_offset = 0;</div><div class='ctx'> </div><div class='del'>-	line_size = stripe_size * stripe_count;</div><div class='del'>-	stripe_num = offset / line_size;</div><div class='add'>+    line_size = stripe_size * stripe_count;</div><div class='add'>+    stripe_num = offset / line_size;</div><div class='ctx'> </div><div class='del'>-	coalesced_offset = (stripe_num * stripe_size) +</div><div class='del'>-		(offset % stripe_size);</div><div class='add'>+    coalesced_offset = (stripe_num * stripe_size) + (offset % stripe_size);</div><div class='ctx'> </div><div class='del'>-	return coalesced_offset;</div><div class='add'>+    return coalesced_offset;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='ctx'> uncoalesced_size(off_t size, uint64_t stripe_size, int stripe_count,</div><div class='del'>-		int stripe_index)</div><div class='add'>+                 int stripe_index)</div><div class='ctx'> {</div><div class='del'>-        uint64_t nr_full_stripe_chunks = 0, mod = 0;</div><div class='del'>-</div><div class='del'>-        if (!size)</div><div class='del'>-                return size;</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * Estimate the number of fully written stripes from the</div><div class='del'>-	 * local file size. Each stripe_size chunk corresponds to</div><div class='del'>-	 * a stripe.</div><div class='del'>-	 */</div><div class='del'>-        nr_full_stripe_chunks = (size / stripe_size) * stripe_count;</div><div class='del'>-        mod = size % stripe_size;</div><div class='del'>-</div><div class='del'>-        if (!mod) {</div><div class='del'>-                /*</div><div class='del'>-		 * There is no remainder, thus we could have overestimated</div><div class='del'>-		 * the size of the file in terms of chunks. Trim the number</div><div class='del'>-		 * of chunks by the following stripe members and leave it</div><div class='del'>-		 * up to those nodes to respond with a larger size (if</div><div class='del'>-		 * necessary).</div><div class='del'>-		 */</div><div class='del'>-                nr_full_stripe_chunks -= stripe_count -</div><div class='del'>-                        (stripe_index + 1);</div><div class='del'>-                size = nr_full_stripe_chunks * stripe_size;</div><div class='del'>-        } else {</div><div class='del'>-		/*</div><div class='del'>-		 * There is a remainder and thus we own the last chunk of the</div><div class='del'>-		 * file. Add the preceding stripe members of the final stripe</div><div class='del'>-		 * along with the remainder to calculate the exact size.</div><div class='del'>-		 */</div><div class='del'>-                nr_full_stripe_chunks += stripe_index;</div><div class='del'>-                size = nr_full_stripe_chunks * stripe_size + mod;</div><div class='del'>-        }</div><div class='add'>+    uint64_t nr_full_stripe_chunks = 0, mod = 0;</div><div class='ctx'> </div><div class='add'>+    if (!size)</div><div class='ctx'>         return size;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Estimate the number of fully written stripes from the</div><div class='add'>+     * local file size. Each stripe_size chunk corresponds to</div><div class='add'>+     * a stripe.</div><div class='add'>+     */</div><div class='add'>+    nr_full_stripe_chunks = (size / stripe_size) * stripe_count;</div><div class='add'>+    mod = size % stripe_size;</div><div class='add'>+</div><div class='add'>+    if (!mod) {</div><div class='add'>+        /*</div><div class='add'>+         * There is no remainder, thus we could have overestimated</div><div class='add'>+         * the size of the file in terms of chunks. Trim the number</div><div class='add'>+         * of chunks by the following stripe members and leave it</div><div class='add'>+         * up to those nodes to respond with a larger size (if</div><div class='add'>+         * necessary).</div><div class='add'>+         */</div><div class='add'>+        nr_full_stripe_chunks -= stripe_count - (stripe_index + 1);</div><div class='add'>+        size = nr_full_stripe_chunks * stripe_size;</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * There is a remainder and thus we own the last chunk of the</div><div class='add'>+         * file. Add the preceding stripe members of the final stripe</div><div class='add'>+         * along with the remainder to calculate the exact size.</div><div class='add'>+         */</div><div class='add'>+        nr_full_stripe_chunks += stripe_index;</div><div class='add'>+        size = nr_full_stripe_chunks * stripe_size + mod;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c<br/>index 75851aa6c5d..a6027d1f281 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/cluster/stripe/src/stripe.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/cluster/stripe/src/stripe.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/cluster/stripe/src/stripe.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/cluster/stripe/src/stripe.c</a></div><div class='hunk'>@@ -32,2291 +32,2217 @@</div><div class='ctx'> struct volume_options options[];</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_sh_chown_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *preop, struct iatt *postop, dict_t *xdata)</div><div class='add'>+stripe_sh_chown_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *preop,</div><div class='add'>+                    struct iatt *postop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             callcnt = -1;</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='add'>+    int callcnt = -1;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                STRIPE_STACK_DESTROY (frame);</div><div class='del'>-        }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        STRIPE_STACK_DESTROY(frame);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_sh_make_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                          struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                          struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_sh_make_entry_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                         struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                         struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t    *prev = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local || !cookie || !this) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !frame-&gt;local || !cookie || !this) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_sh_chown_cbk, prev-&gt;this,</div><div class='del'>-                    prev-&gt;this-&gt;fops-&gt;setattr, &amp;local-&gt;loc,</div><div class='del'>-                    &amp;local-&gt;stbuf, (GF_SET_ATTR_UID | GF_SET_ATTR_GID), NULL);</div><div class='add'>+    STACK_WIND(frame, stripe_sh_chown_cbk, prev-&gt;this,</div><div class='add'>+               prev-&gt;this-&gt;fops-&gt;setattr, &amp;local-&gt;loc, &amp;local-&gt;stbuf,</div><div class='add'>+               (GF_SET_ATTR_UID | GF_SET_ATTR_GID), NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_entry_self_heal (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        stripe_local_t *local)</div><div class='add'>+stripe_entry_self_heal(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                       stripe_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav   = NULL;</div><div class='del'>-        call_frame_t     *rframe = NULL;</div><div class='del'>-        stripe_local_t   *rlocal = NULL;</div><div class='del'>-        stripe_private_t *priv   = NULL;</div><div class='del'>-        dict_t           *xdata  = NULL;</div><div class='del'>-        int               ret    = 0;</div><div class='del'>-</div><div class='del'>-        if (!local || !this || !frame) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(IA_ISREG (local-&gt;stbuf.ia_type) ||</div><div class='del'>-              IA_ISDIR (local-&gt;stbuf.ia_type)))</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        rframe = copy_frame (frame);</div><div class='del'>-        if (!rframe) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        rlocal = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!rlocal) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        rframe-&gt;local = rlocal;</div><div class='del'>-        rlocal-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        loc_copy (&amp;rlocal-&gt;loc, &amp;local-&gt;loc);</div><div class='del'>-        memcpy (&amp;rlocal-&gt;stbuf, &amp;local-&gt;stbuf, sizeof (struct iatt));</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    call_frame_t *rframe = NULL;</div><div class='add'>+    stripe_local_t *rlocal = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!local || !this || !frame) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!(IA_ISREG(local-&gt;stbuf.ia_type) || IA_ISDIR(local-&gt;stbuf.ia_type)))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_gfuuid (xdata, "gfid-req", local-&gt;stbuf.ia_gfid, true);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "%s: failed to set gfid-req", local-&gt;loc.path);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    rframe = copy_frame(frame);</div><div class='add'>+    if (!rframe) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    rlocal = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!rlocal) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    rframe-&gt;local = rlocal;</div><div class='add'>+    rlocal-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    loc_copy(&amp;rlocal-&gt;loc, &amp;local-&gt;loc);</div><div class='add'>+    memcpy(&amp;rlocal-&gt;stbuf, &amp;local-&gt;stbuf, sizeof(struct iatt));</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                if (IA_ISREG (local-&gt;stbuf.ia_type)) {</div><div class='del'>-                        STACK_WIND (rframe, stripe_sh_make_entry_cbk,</div><div class='del'>-                                    trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;mknod,</div><div class='del'>-                                    &amp;local-&gt;loc,</div><div class='del'>-                                    st_mode_from_ia (local-&gt;stbuf.ia_prot,</div><div class='del'>-                                                     local-&gt;stbuf.ia_type),</div><div class='del'>-                                    0, 0, xdata);</div><div class='del'>-                }</div><div class='del'>-                if (IA_ISDIR (local-&gt;stbuf.ia_type)) {</div><div class='del'>-                        STACK_WIND (rframe, stripe_sh_make_entry_cbk,</div><div class='del'>-                                    trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;mkdir,</div><div class='del'>-                                    &amp;local-&gt;loc,</div><div class='del'>-                                    st_mode_from_ia (local-&gt;stbuf.ia_prot,</div><div class='del'>-                                                     local-&gt;stbuf.ia_type),</div><div class='del'>-                                    0, xdata);</div><div class='del'>-                }</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    ret = dict_set_gfuuid(xdata, "gfid-req", local-&gt;stbuf.ia_gfid, true);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "%s: failed to set gfid-req",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (IA_ISREG(local-&gt;stbuf.ia_type)) {</div><div class='add'>+            STACK_WIND(</div><div class='add'>+                rframe, stripe_sh_make_entry_cbk, trav-&gt;xlator,</div><div class='add'>+                trav-&gt;xlator-&gt;fops-&gt;mknod, &amp;local-&gt;loc,</div><div class='add'>+                st_mode_from_ia(local-&gt;stbuf.ia_prot, local-&gt;stbuf.ia_type), 0,</div><div class='add'>+                0, xdata);</div><div class='add'>+        }</div><div class='add'>+        if (IA_ISDIR(local-&gt;stbuf.ia_type)) {</div><div class='add'>+            STACK_WIND(</div><div class='add'>+                rframe, stripe_sh_make_entry_cbk, trav-&gt;xlator,</div><div class='add'>+                trav-&gt;xlator-&gt;fops-&gt;mkdir, &amp;local-&gt;loc,</div><div class='add'>+                st_mode_from_ia(local-&gt;stbuf.ia_prot, local-&gt;stbuf.ia_type), 0,</div><div class='add'>+                xdata);</div><div class='ctx'>         }</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (rframe)</div><div class='del'>-                STRIPE_STACK_DESTROY (rframe);</div><div class='add'>+    if (rframe)</div><div class='add'>+        STRIPE_STACK_DESTROY(rframe);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+stripe_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt     = 0;</div><div class='del'>-        stripe_local_t *local       = NULL;</div><div class='del'>-        call_frame_t   *prev        = NULL;</div><div class='del'>-        int             ret         = 0;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        if ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE))</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "%s returned error %s",</div><div class='del'>-                                        prev-&gt;this-&gt;name,</div><div class='del'>-                                        strerror (op_errno));</div><div class='del'>-                        if (local-&gt;op_errno != ESTALE)</div><div class='del'>-                                local-&gt;op_errno = op_errno;</div><div class='del'>-                        if (((op_errno != ENOENT) &amp;&amp; (op_errno != ENOTCONN)</div><div class='del'>-                              &amp;&amp; (op_errno != ESTALE)) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                        if (op_errno == ENOENT)</div><div class='del'>-                                local-&gt;entry_self_heal_needed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-                        if (IA_ISREG (buf-&gt;ia_type)) {</div><div class='del'>-                                ret = stripe_ctx_handle (this, prev, local,</div><div class='del'>-                                                         xdata);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                 "Error getting fctx info from"</div><div class='del'>-                                                 " dict");</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                local-&gt;stbuf      = *buf;</div><div class='del'>-                                local-&gt;postparent = *postparent;</div><div class='del'>-                                local-&gt;inode = inode_ref (inode);</div><div class='del'>-                                if (xdata)</div><div class='del'>-                                        local-&gt;xdata = dict_ref (xdata);</div><div class='del'>-                                if (local-&gt;xattr) {</div><div class='del'>-                                        stripe_aggregate_xattr (local-&gt;xdata,</div><div class='del'>-                                                                local-&gt;xattr);</div><div class='del'>-                                        dict_unref (local-&gt;xattr);</div><div class='del'>-                                        local-&gt;xattr = NULL;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (!local-&gt;xdata &amp;&amp; !local-&gt;xattr) {</div><div class='del'>-                                local-&gt;xattr = dict_ref (xdata);</div><div class='del'>-                        } else if (local-&gt;xdata) {</div><div class='del'>-                                stripe_aggregate_xattr (local-&gt;xdata, xdata);</div><div class='del'>-                        } else if (local-&gt;xattr) {</div><div class='del'>-                                stripe_aggregate_xattr (local-&gt;xattr, xdata);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        local-&gt;stbuf_blocks      += buf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='del'>-</div><div class='del'>-                        if (gf_uuid_is_null (local-&gt;ia_gfid))</div><div class='del'>-                                gf_uuid_copy (local-&gt;ia_gfid, buf-&gt;ia_gfid);</div><div class='del'>-</div><div class='del'>-                        /* Make sure the gfid on all the nodes are same */</div><div class='del'>-                        if (gf_uuid_compare (local-&gt;ia_gfid, buf-&gt;ia_gfid)) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "%s: gfid different on subvolume %s",</div><div class='del'>-                                        local-&gt;loc.path, prev-&gt;this-&gt;name);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            if ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE))</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                       prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            if (local-&gt;op_errno != ESTALE)</div><div class='add'>+                local-&gt;op_errno = op_errno;</div><div class='add'>+            if (((op_errno != ENOENT) &amp;&amp; (op_errno != ENOTCONN) &amp;&amp;</div><div class='add'>+                 (op_errno != ESTALE)) ||</div><div class='add'>+                (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+            if (op_errno == ENOENT)</div><div class='add'>+                local-&gt;entry_self_heal_needed = 1;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;op_ret == 0 &amp;&amp; local-&gt;entry_self_heal_needed &amp;&amp;</div><div class='del'>-                    !gf_uuid_is_null (local-&gt;loc.inode-&gt;gfid))</div><div class='del'>-                        stripe_entry_self_heal (frame, this, local);</div><div class='del'>-</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='del'>-                        local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-                        local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-                        inode_ctx_put (local-&gt;inode, this,</div><div class='del'>-                                       (uint64_t) (long)local-&gt;fctx);</div><div class='add'>+</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+            if (IA_ISREG(buf-&gt;ia_type)) {</div><div class='add'>+                ret = stripe_ctx_handle(this, prev, local, xdata);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "Error getting fctx info from"</div><div class='add'>+                           " dict");</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                local-&gt;stbuf = *buf;</div><div class='add'>+                local-&gt;postparent = *postparent;</div><div class='add'>+                local-&gt;inode = inode_ref(inode);</div><div class='add'>+                if (xdata)</div><div class='add'>+                    local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+                if (local-&gt;xattr) {</div><div class='add'>+                    stripe_aggregate_xattr(local-&gt;xdata, local-&gt;xattr);</div><div class='add'>+                    dict_unref(local-&gt;xattr);</div><div class='add'>+                    local-&gt;xattr = NULL;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (lookup, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;inode,</div><div class='del'>-                                     &amp;local-&gt;stbuf, local-&gt;xdata,</div><div class='del'>-                                     &amp;local-&gt;postparent);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+            if (!local-&gt;xdata &amp;&amp; !local-&gt;xattr) {</div><div class='add'>+                local-&gt;xattr = dict_ref(xdata);</div><div class='add'>+            } else if (local-&gt;xdata) {</div><div class='add'>+                stripe_aggregate_xattr(local-&gt;xdata, xdata);</div><div class='add'>+            } else if (local-&gt;xattr) {</div><div class='add'>+                stripe_aggregate_xattr(local-&gt;xattr, xdata);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-stripe_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        stripe_local_t   *local    = NULL;</div><div class='del'>-        xlator_list_t    *trav     = NULL;</div><div class='del'>-        stripe_private_t *priv     = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-        int64_t           filesize = 0;</div><div class='del'>-        int               ret      = 0;</div><div class='del'>-        uint64_t          tmpctx   = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-        inode_ctx_get (local-&gt;inode, this, &amp;tmpctx);</div><div class='del'>-        if (tmpctx)</div><div class='del'>-                local-&gt;fctx = (stripe_fd_ctx_t*) (long)tmpctx;</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='add'>+                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-        /* quick-read friendly changes */</div><div class='del'>-        if (xdata &amp;&amp; dict_get (xdata, GF_CONTENT_KEY)) {</div><div class='del'>-                ret = dict_get_int64 (xdata, GF_CONTENT_KEY, &amp;filesize);</div><div class='del'>-                if (!ret &amp;&amp; (filesize &gt; priv-&gt;block_size))</div><div class='del'>-                        dict_del (xdata, GF_CONTENT_KEY);</div><div class='add'>+            if (gf_uuid_is_null(local-&gt;ia_gfid))</div><div class='add'>+                gf_uuid_copy(local-&gt;ia_gfid, buf-&gt;ia_gfid);</div><div class='add'>+</div><div class='add'>+            /* Make sure the gfid on all the nodes are same */</div><div class='add'>+            if (gf_uuid_compare(local-&gt;ia_gfid, buf-&gt;ia_gfid)) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "%s: gfid different on subvolume %s", local-&gt;loc.path,</div><div class='add'>+                       prev-&gt;this-&gt;name);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /* get stripe-size xattr on lookup. This would be required for</div><div class='del'>-         * open/read/write/pathinfo calls. Hence we send down the request</div><div class='del'>-         * even when type == IA_INVAL */</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * We aren't guaranteed to have xdata here. We need the format info for</div><div class='del'>-	 * the file, so allocate xdata if necessary.</div><div class='del'>-	 */</div><div class='del'>-	if (!xdata)</div><div class='del'>-		xdata = dict_new();</div><div class='del'>-	else</div><div class='del'>-		xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-        if (xdata &amp;&amp; (IA_ISREG (loc-&gt;inode-&gt;ia_type) ||</div><div class='del'>-            (loc-&gt;inode-&gt;ia_type == IA_INVAL))) {</div><div class='del'>-                ret = stripe_xattr_request_build (this, xdata, 8, 4, 4, 0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log (this-&gt;name , GF_LOG_ERROR, "Failed to build"</div><div class='del'>-                                " xattr request for %s", loc-&gt;path);</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;op_ret == 0 &amp;&amp; local-&gt;entry_self_heal_needed &amp;&amp;</div><div class='add'>+            !gf_uuid_is_null(local-&gt;loc.inode-&gt;gfid))</div><div class='add'>+            stripe_entry_self_heal(frame, this, local);</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* Every time in stripe lookup, all child nodes</div><div class='del'>-           should be looked up */</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_lookup_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;lookup, loc, xdata);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+            local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+            inode_ctx_put(local-&gt;inode, this, (uint64_t)(long)local-&gt;fctx);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-	dict_unref(xdata);</div><div class='add'>+        STRIPE_STACK_UNWIND(lookup, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;inode, &amp;local-&gt;stbuf, local-&gt;xdata,</div><div class='add'>+                            &amp;local-&gt;postparent);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+int32_t</div><div class='add'>+stripe_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int64_t filesize = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t tmpctx = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(local-&gt;inode, this, &amp;tmpctx);</div><div class='add'>+    if (tmpctx)</div><div class='add'>+        local-&gt;fctx = (stripe_fd_ctx_t *)(long)tmpctx;</div><div class='add'>+</div><div class='add'>+    /* quick-read friendly changes */</div><div class='add'>+    if (xdata &amp;&amp; dict_get(xdata, GF_CONTENT_KEY)) {</div><div class='add'>+        ret = dict_get_int64(xdata, GF_CONTENT_KEY, &amp;filesize);</div><div class='add'>+        if (!ret &amp;&amp; (filesize &gt; priv-&gt;block_size))</div><div class='add'>+            dict_del(xdata, GF_CONTENT_KEY);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get stripe-size xattr on lookup. This would be required for</div><div class='add'>+     * open/read/write/pathinfo calls. Hence we send down the request</div><div class='add'>+     * even when type == IA_INVAL */</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * We aren't guaranteed to have xdata here. We need the format info for</div><div class='add'>+     * the file, so allocate xdata if necessary.</div><div class='add'>+     */</div><div class='add'>+    if (!xdata)</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+    else</div><div class='add'>+        xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (xdata &amp;&amp;</div><div class='add'>+        (IA_ISREG(loc-&gt;inode-&gt;ia_type) || (loc-&gt;inode-&gt;ia_type == IA_INVAL))) {</div><div class='add'>+        ret = stripe_xattr_request_build(this, xdata, 8, 4, 4, 0);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to build"</div><div class='add'>+                   " xattr request for %s",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Every time in stripe lookup, all child nodes</div><div class='add'>+       should be looked up */</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_lookup_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+stripe_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                local-&gt;stbuf = *buf;</div><div class='del'>-                        }</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                        local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                local-&gt;stbuf = *buf;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;stbuf.ia_size   = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='del'>-                }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (stat, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;stbuf, NULL);</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        STRIPE_STACK_UNWIND(stat, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;stbuf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+stripe_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-	stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        inode_ctx_get(loc-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+        if (!fctx)</div><div class='add'>+            goto err;</div><div class='add'>+        local-&gt;fctx = fctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-		inode_ctx_get(loc-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-		if (!fctx)</div><div class='del'>-			goto err;</div><div class='del'>-		local-&gt;fctx = fctx;</div><div class='del'>-	}</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_stat_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;stat, loc, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_stat_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;stat, loc, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (stat, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(stat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct statvfs *stbuf, dict_t *xdata)</div><div class='add'>+stripe_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct statvfs *stbuf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret &amp;&amp; (op_errno != ENOTCONN)) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        struct statvfs *dict_buf = &amp;local-&gt;statvfs_buf;</div><div class='del'>-                        dict_buf-&gt;f_bsize   = stbuf-&gt;f_bsize;</div><div class='del'>-                        dict_buf-&gt;f_frsize  = stbuf-&gt;f_frsize;</div><div class='del'>-                        dict_buf-&gt;f_blocks += stbuf-&gt;f_blocks;</div><div class='del'>-                        dict_buf-&gt;f_bfree  += stbuf-&gt;f_bfree;</div><div class='del'>-                        dict_buf-&gt;f_bavail += stbuf-&gt;f_bavail;</div><div class='del'>-                        dict_buf-&gt;f_files  += stbuf-&gt;f_files;</div><div class='del'>-                        dict_buf-&gt;f_ffree  += stbuf-&gt;f_ffree;</div><div class='del'>-                        dict_buf-&gt;f_favail += stbuf-&gt;f_favail;</div><div class='del'>-                        dict_buf-&gt;f_fsid    = stbuf-&gt;f_fsid;</div><div class='del'>-                        dict_buf-&gt;f_flag    = stbuf-&gt;f_flag;</div><div class='del'>-                        dict_buf-&gt;f_namemax = stbuf-&gt;f_namemax;</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                STRIPE_STACK_UNWIND (statfs, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;statvfs_buf, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret &amp;&amp; (op_errno != ENOTCONN)) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        }</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            struct statvfs *dict_buf = &amp;local-&gt;statvfs_buf;</div><div class='add'>+            dict_buf-&gt;f_bsize = stbuf-&gt;f_bsize;</div><div class='add'>+            dict_buf-&gt;f_frsize = stbuf-&gt;f_frsize;</div><div class='add'>+            dict_buf-&gt;f_blocks += stbuf-&gt;f_blocks;</div><div class='add'>+            dict_buf-&gt;f_bfree += stbuf-&gt;f_bfree;</div><div class='add'>+            dict_buf-&gt;f_bavail += stbuf-&gt;f_bavail;</div><div class='add'>+            dict_buf-&gt;f_files += stbuf-&gt;f_files;</div><div class='add'>+            dict_buf-&gt;f_ffree += stbuf-&gt;f_ffree;</div><div class='add'>+            dict_buf-&gt;f_favail += stbuf-&gt;f_favail;</div><div class='add'>+            dict_buf-&gt;f_fsid = stbuf-&gt;f_fsid;</div><div class='add'>+            dict_buf-&gt;f_flag = stbuf-&gt;f_flag;</div><div class='add'>+            dict_buf-&gt;f_namemax = stbuf-&gt;f_namemax;</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        STRIPE_STACK_UNWIND(statfs, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;statvfs_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+stripe_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;op_errno = ENOTCONN;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_statfs_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;statfs, loc, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = ENOTCONN;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_statfs_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;statfs, loc, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (statfs, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(statfs, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+stripe_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                local-&gt;pre_buf  = *prebuf;</div><div class='del'>-                                local-&gt;post_buf = *postbuf;</div><div class='del'>-                        }</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        local-&gt;prebuf_blocks  += prebuf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                local-&gt;pre_buf = *prebuf;</div><div class='add'>+                local-&gt;post_buf = *postbuf;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-			correct_file_size(prebuf, local-&gt;fctx, prev);</div><div class='del'>-			correct_file_size(postbuf, local-&gt;fctx, prev);</div><div class='add'>+            local-&gt;prebuf_blocks += prebuf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='del'>-                                local-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='add'>+            correct_file_size(prebuf, local-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postbuf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='del'>-                                local-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+            if (local-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='add'>+                local-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+            if (local-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='add'>+                local-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;pre_buf.ia_blocks  = local-&gt;prebuf_blocks;</div><div class='del'>-                        local-&gt;pre_buf.ia_size    = local-&gt;prebuf_size;</div><div class='del'>-                        local-&gt;post_buf.ia_blocks = local-&gt;postbuf_blocks;</div><div class='del'>-                        local-&gt;post_buf.ia_size   = local-&gt;postbuf_size;</div><div class='del'>-                }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (truncate, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;pre_buf,</div><div class='del'>-                                     &amp;local-&gt;post_buf, NULL);</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;pre_buf.ia_blocks = local-&gt;prebuf_blocks;</div><div class='add'>+            local-&gt;pre_buf.ia_size = local-&gt;prebuf_size;</div><div class='add'>+            local-&gt;post_buf.ia_blocks = local-&gt;postbuf_blocks;</div><div class='add'>+            local-&gt;post_buf.ia_size = local-&gt;postbuf_size;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        STRIPE_STACK_UNWIND(truncate, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;pre_buf, &amp;local-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, dict_t *xdata)</div><div class='add'>+stripe_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-	stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-	int		  i, eof_idx;</div><div class='del'>-	off_t		  dest_offset, tmp_offset;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int i, eof_idx;</div><div class='add'>+    off_t dest_offset, tmp_offset;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(loc-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+    if (!fctx) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "no stripe context");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+    eof_idx = (offset / fctx-&gt;stripe_size) % fctx-&gt;stripe_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; fctx-&gt;stripe_count; i++) {</div><div class='add'>+        if (!fctx-&gt;xl_array[i]) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "no xlator at index %d", i);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (fctx-&gt;stripe_coalesce) {</div><div class='add'>+            /*</div><div class='add'>+             * The node that owns EOF is truncated to the exact</div><div class='add'>+             * coalesced offset. Nodes prior to this index should</div><div class='add'>+             * be rounded up to the size of the complete stripe,</div><div class='add'>+             * while nodes after this index should be rounded down</div><div class='add'>+             * to the size of the previous stripe.</div><div class='add'>+             */</div><div class='add'>+            if (i &lt; eof_idx)</div><div class='add'>+                tmp_offset = roof(offset,</div><div class='add'>+                                  fctx-&gt;stripe_size * fctx-&gt;stripe_count);</div><div class='add'>+            else if (i &gt; eof_idx)</div><div class='add'>+                tmp_offset = floor(offset,</div><div class='add'>+                                   fctx-&gt;stripe_size * fctx-&gt;stripe_count);</div><div class='add'>+            else</div><div class='add'>+                tmp_offset = offset;</div><div class='add'>+</div><div class='add'>+            dest_offset = coalesced_offset(tmp_offset, fctx-&gt;stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+        } else {</div><div class='add'>+            dest_offset = offset;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-	inode_ctx_get(loc-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-	if (!fctx) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "no stripe context");</div><div class='del'>-		op_errno = EINVAL;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local-&gt;fctx = fctx;</div><div class='del'>-	eof_idx = (offset / fctx-&gt;stripe_size) % fctx-&gt;stripe_count;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; fctx-&gt;stripe_count; i++) {</div><div class='del'>-		if (!fctx-&gt;xl_array[i]) {</div><div class='del'>-			gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-				"no xlator at index %d", i);</div><div class='del'>-			op_errno = EINVAL;</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (fctx-&gt;stripe_coalesce) {</div><div class='del'>-			/*</div><div class='del'>-	 		 * The node that owns EOF is truncated to the exact</div><div class='del'>-	 		 * coalesced offset. Nodes prior to this index should</div><div class='del'>-	 		 * be rounded up to the size of the complete stripe,</div><div class='del'>-	 		 * while nodes after this index should be rounded down</div><div class='del'>-			 * to the size of the previous stripe.</div><div class='del'>-			 */</div><div class='del'>-			if (i &lt; eof_idx)</div><div class='del'>-				tmp_offset = roof(offset, fctx-&gt;stripe_size *</div><div class='del'>-						fctx-&gt;stripe_count);</div><div class='del'>-			else if (i &gt; eof_idx)</div><div class='del'>-				tmp_offset = floor(offset, fctx-&gt;stripe_size *</div><div class='del'>-						fctx-&gt;stripe_count);</div><div class='del'>-			else</div><div class='del'>-				tmp_offset = offset;</div><div class='del'>-</div><div class='del'>-			dest_offset = coalesced_offset(tmp_offset,</div><div class='del'>-					fctx-&gt;stripe_size, fctx-&gt;stripe_count);</div><div class='del'>-		} else {</div><div class='del'>-			dest_offset = offset;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		STACK_WIND(frame, stripe_truncate_cbk, fctx-&gt;xl_array[i],</div><div class='del'>-			fctx-&gt;xl_array[i]-&gt;fops-&gt;truncate, loc, dest_offset,</div><div class='del'>-			NULL);</div><div class='del'>-	}</div><div class='add'>+        STACK_WIND(frame, stripe_truncate_cbk, fctx-&gt;xl_array[i],</div><div class='add'>+                   fctx-&gt;xl_array[i]-&gt;fops-&gt;truncate, loc, dest_offset, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *preop, struct iatt *postop, dict_t *xdata)</div><div class='add'>+stripe_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *preop,</div><div class='add'>+                   struct iatt *postop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                local-&gt;pre_buf  = *preop;</div><div class='del'>-                                local-&gt;post_buf = *postop;</div><div class='del'>-                        }</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                local-&gt;pre_buf = *preop;</div><div class='add'>+                local-&gt;post_buf = *postop;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        local-&gt;prebuf_blocks  += preop-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postbuf_blocks += postop-&gt;ia_blocks;</div><div class='add'>+            local-&gt;prebuf_blocks += preop-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postbuf_blocks += postop-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-			correct_file_size(preop, local-&gt;fctx, prev);</div><div class='del'>-			correct_file_size(postop, local-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(preop, local-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postop, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;prebuf_size &lt; preop-&gt;ia_size)</div><div class='del'>-                                local-&gt;prebuf_size = preop-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;postbuf_size &lt; postop-&gt;ia_size)</div><div class='del'>-                                local-&gt;postbuf_size = postop-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;prebuf_size &lt; preop-&gt;ia_size)</div><div class='add'>+                local-&gt;prebuf_size = preop-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postbuf_size &lt; postop-&gt;ia_size)</div><div class='add'>+                local-&gt;postbuf_size = postop-&gt;ia_size;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;pre_buf.ia_blocks  = local-&gt;prebuf_blocks;</div><div class='del'>-                        local-&gt;pre_buf.ia_size    = local-&gt;prebuf_size;</div><div class='del'>-                        local-&gt;post_buf.ia_blocks = local-&gt;postbuf_blocks;</div><div class='del'>-                        local-&gt;post_buf.ia_size   = local-&gt;postbuf_size;</div><div class='del'>-                }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (setattr, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;pre_buf,</div><div class='del'>-                                     &amp;local-&gt;post_buf, NULL);</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;pre_buf.ia_blocks = local-&gt;prebuf_blocks;</div><div class='add'>+            local-&gt;pre_buf.ia_size = local-&gt;prebuf_size;</div><div class='add'>+            local-&gt;post_buf.ia_blocks = local-&gt;postbuf_blocks;</div><div class='add'>+            local-&gt;post_buf.ia_size = local-&gt;postbuf_size;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        STRIPE_STACK_UNWIND(setattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;pre_buf, &amp;local-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+stripe_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-	stripe_fd_ctx_t	 *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        if (!IA_ISDIR (loc-&gt;inode-&gt;ia_type) &amp;&amp;</div><div class='del'>-            !IA_ISREG (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                local-&gt;call_count = 1;</div><div class='del'>-                STACK_WIND (frame, stripe_setattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;setattr,</div><div class='del'>-                            loc, stbuf, valid, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    if (!IA_ISDIR(loc-&gt;inode-&gt;ia_type) &amp;&amp; !IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        local-&gt;call_count = 1;</div><div class='add'>+        STACK_WIND(frame, stripe_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-		inode_ctx_get(loc-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-		if (!fctx)</div><div class='del'>-			goto err;</div><div class='del'>-		local-&gt;fctx = fctx;</div><div class='del'>-	}</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        inode_ctx_get(loc-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+        if (!fctx)</div><div class='add'>+            goto err;</div><div class='add'>+        local-&gt;fctx = fctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_setattr_cbk,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;setattr,</div><div class='del'>-                            loc, stbuf, valid, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_setattr_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;setattr, loc, stbuf, valid, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(setattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+stripe_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_setattr_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;fsetattr, fd, stbuf, valid, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_setattr_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;fsetattr, fd, stbuf, valid, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fsetattr, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_stack_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                         struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                         struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+stripe_stack_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                        struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                        struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        local-&gt;stbuf.ia_blocks      += buf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;preparent.ia_blocks  += preoldparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postparent.ia_blocks += postoldparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;pre_buf.ia_blocks    += prenewparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;post_buf.ia_blocks   += postnewparent-&gt;ia_blocks;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='add'>+            local-&gt;stbuf.ia_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;preparent.ia_blocks += preoldparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postparent.ia_blocks += postoldparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;pre_buf.ia_blocks += prenewparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;post_buf.ia_blocks += postnewparent-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;stbuf.ia_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf.ia_size =  buf-&gt;ia_size;</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;preparent.ia_size &lt; preoldparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;preparent.ia_size = preoldparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;stbuf.ia_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf.ia_size = buf-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;postparent.ia_size &lt; postoldparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;postparent.ia_size = postoldparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;preparent.ia_size &lt; preoldparent-&gt;ia_size)</div><div class='add'>+                local-&gt;preparent.ia_size = preoldparent-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;pre_buf.ia_size &lt; prenewparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;pre_buf.ia_size = prenewparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postparent.ia_size &lt; postoldparent-&gt;ia_size)</div><div class='add'>+                local-&gt;postparent.ia_size = postoldparent-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;post_buf.ia_size &lt; postnewparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;post_buf.ia_size = postnewparent-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;pre_buf.ia_size &lt; prenewparent-&gt;ia_size)</div><div class='add'>+                local-&gt;pre_buf.ia_size = prenewparent-&gt;ia_size;</div><div class='add'>+</div><div class='add'>+            if (local-&gt;post_buf.ia_size &lt; postnewparent-&gt;ia_size)</div><div class='add'>+                local-&gt;post_buf.ia_size = postnewparent-&gt;ia_size;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (rename, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                     &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                                     &amp;local-&gt;postparent,  &amp;local-&gt;pre_buf,</div><div class='del'>-                                     &amp;local-&gt;post_buf, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(rename, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                            &amp;local-&gt;postparent, &amp;local-&gt;pre_buf,</div><div class='add'>+                            &amp;local-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_first_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                         struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                         struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+stripe_first_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                        struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                        struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        xlator_list_t  *trav = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        local-&gt;stbuf      = *buf;</div><div class='del'>-        local-&gt;preparent  = *preoldparent;</div><div class='del'>-        local-&gt;postparent = *postoldparent;</div><div class='del'>-        local-&gt;pre_buf    = *prenewparent;</div><div class='del'>-        local-&gt;post_buf   = *postnewparent;</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        local-&gt;call_count--;</div><div class='del'>-</div><div class='del'>-        trav = trav-&gt;next; /* Skip first child */</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_stack_rename_cbk,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;rename,</div><div class='del'>-                            &amp;local-&gt;loc, &amp;local-&gt;loc2, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    local-&gt;stbuf = *buf;</div><div class='add'>+    local-&gt;preparent = *preoldparent;</div><div class='add'>+    local-&gt;postparent = *postoldparent;</div><div class='add'>+    local-&gt;pre_buf = *prenewparent;</div><div class='add'>+    local-&gt;post_buf = *postnewparent;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;call_count--;</div><div class='add'>+</div><div class='add'>+    trav = trav-&gt;next; /* Skip first child */</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_stack_rename_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;rename, &amp;local-&gt;loc, &amp;local-&gt;loc2, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STRIPE_STACK_UNWIND (rename, frame, -1, op_errno, buf, preoldparent,</div><div class='del'>-                             postoldparent, prenewparent, postnewparent, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(rename, frame, -1, op_errno, buf, preoldparent,</div><div class='add'>+                        postoldparent, prenewparent, postnewparent, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='del'>-               loc_t *newloc, dict_t *xdata)</div><div class='add'>+stripe_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-	stripe_fd_ctx_t	 *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc-&gt;inode, err);</div><div class='del'>-        VALIDATE_OR_GOTO (newloc, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        /* If any one node is down, don't allow rename */</div><div class='del'>-        if (priv-&gt;nodes_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, oldloc);</div><div class='del'>-        loc_copy (&amp;local-&gt;loc2, newloc);</div><div class='del'>-</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-	if (IA_ISREG(oldloc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-		inode_ctx_get(oldloc-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-		if (!fctx)</div><div class='del'>-			goto err;</div><div class='del'>-		local-&gt;fctx = fctx;</div><div class='del'>-	}</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc-&gt;inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(newloc, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* If any one node is down, don't allow rename */</div><div class='add'>+    if (priv-&gt;nodes_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, oldloc);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc2, newloc);</div><div class='add'>+</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(oldloc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        inode_ctx_get(oldloc-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+        if (!fctx)</div><div class='add'>+            goto err;</div><div class='add'>+        local-&gt;fctx = fctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_first_rename_cbk, trav-&gt;xlator,</div><div class='del'>-                    trav-&gt;xlator-&gt;fops-&gt;rename, oldloc, newloc, NULL);</div><div class='add'>+    STACK_WIND(frame, stripe_first_rename_cbk, trav-&gt;xlator,</div><div class='add'>+               trav-&gt;xlator-&gt;fops-&gt;rename, oldloc, newloc, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(rename, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int32_t</div><div class='del'>-stripe_first_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                         struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_first_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno,</div><div class='add'>+                        struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s returned %s",</div><div class='del'>-                        prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        local-&gt;preparent  = *preparent;</div><div class='del'>-        local-&gt;postparent = *postparent;</div><div class='del'>-        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-        STRIPE_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                            &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned %s", prev-&gt;this-&gt;name,</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;preparent = *preparent;</div><div class='add'>+    local-&gt;postparent = *postparent;</div><div class='add'>+    local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+    local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+    STRIPE_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                        &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    STRIPE_STACK_UNWIND(unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG, "%s returned %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if (op_errno != ENOENT) {</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                                local-&gt;op_ret = op_ret;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned %s", prev-&gt;this-&gt;name,</div><div class='add'>+                   strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if (op_errno != ENOENT) {</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+                local-&gt;op_ret = op_ret;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (callcnt == 1) {</div><div class='del'>-                if (local-&gt;failed) {</div><div class='del'>-                        op_errno = local-&gt;op_errno;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                STACK_WIND(frame, stripe_first_unlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                           FIRST_CHILD (this)-&gt;fops-&gt;unlink, &amp;local-&gt;loc,</div><div class='del'>-                           local-&gt;xflag, local-&gt;xdata);</div><div class='add'>+    if (callcnt == 1) {</div><div class='add'>+        if (local-&gt;failed) {</div><div class='add'>+            op_errno = local-&gt;op_errno;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND(frame, stripe_first_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;unlink, &amp;local-&gt;loc, local-&gt;xflag,</div><div class='add'>+                   local-&gt;xdata);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    STRIPE_STACK_UNWIND(unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               int xflag, dict_t *xdata)</div><div class='add'>+stripe_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Don't unlink a file if a node is down */</div><div class='del'>-        if (priv-&gt;nodes_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;xflag = xflag;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-            local-&gt;xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        trav = trav-&gt;next; /* Skip the first child */</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_unlink_cbk,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='del'>-                            loc, xflag, xdata);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Don't unlink a file if a node is down */</div><div class='add'>+    if (priv-&gt;nodes_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;xflag = xflag;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    trav = trav-&gt;next; /* Skip the first child */</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_unlink_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(unlink, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_first_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,struct iatt *preparent,</div><div class='del'>-                        struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_first_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                       struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count--; /* First child successful */</div><div class='add'>+    local-&gt;call_count--; /* First child successful */</div><div class='ctx'> </div><div class='del'>-        local-&gt;preparent  = *preparent;</div><div class='del'>-        local-&gt;postparent = *postparent;</div><div class='del'>-        local-&gt;preparent_size  = preparent-&gt;ia_size;</div><div class='del'>-        local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='del'>-        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+    local-&gt;preparent = *preparent;</div><div class='add'>+    local-&gt;postparent = *postparent;</div><div class='add'>+    local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+    local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='add'>+    local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+    local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-        STRIPE_STACK_UNWIND (rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                             &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(rmdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                        &amp;local-&gt;preparent, &amp;local-&gt;postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (rmdir, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    STRIPE_STACK_UNWIND(rmdir, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG, "%s returned %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        if (op_errno != ENOENT)</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (callcnt == 1) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        goto out;</div><div class='del'>-                STACK_WIND (frame, stripe_first_rmdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;rmdir, &amp;local-&gt;loc,</div><div class='del'>-                            local-&gt;flags, NULL);</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned %s", prev-&gt;this-&gt;name,</div><div class='add'>+                   strerror(op_errno));</div><div class='add'>+            if (op_errno != ENOENT)</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (callcnt == 1) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            goto out;</div><div class='add'>+        STACK_WIND(frame, stripe_first_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;rmdir, &amp;local-&gt;loc, local-&gt;flags,</div><div class='add'>+                   NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags, dict_t *xdata)</div><div class='add'>+stripe_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        /* don't delete a directory if any of the subvolume is down */</div><div class='del'>-        if (priv-&gt;nodes_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;flags = flags;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        trav = trav-&gt;next; /* skip the first child */</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_rmdir_cbk,  trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;rmdir, loc, flags, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* don't delete a directory if any of the subvolume is down */</div><div class='add'>+    if (priv-&gt;nodes_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    trav = trav-&gt;next; /* skip the first child */</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_rmdir_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;rmdir, loc, flags, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(rmdir, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_mknod_ifreg_fail_unlink_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                    xlator_t *this, int32_t op_ret,</div><div class='del'>-                                    int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_mknod_ifreg_fail_unlink_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                   xlator_t *this, int32_t op_ret,</div><div class='add'>+                                   int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                STRIPE_STACK_UNWIND (mknod, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                     local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='del'>-                                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        STRIPE_STACK_UNWIND(mknod, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;inode, &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                            &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-stripe_mknod_ifreg_setxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                 xlator_t *this, int32_t op_ret,</div><div class='del'>-                                 int32_t op_errno, dict_t *xdata)</div><div class='add'>+stripe_mknod_ifreg_setxattr_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                xlator_t *this, int32_t op_ret,</div><div class='add'>+                                int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t           callcnt = 0;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        call_frame_t     *prev = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;op_ret == -1) {</div><div class='del'>-                        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-                        while (trav) {</div><div class='del'>-                                STACK_WIND (frame,</div><div class='del'>-                                            stripe_mknod_ifreg_fail_unlink_cbk,</div><div class='del'>-                                            trav-&gt;xlator,</div><div class='del'>-                                            trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='del'>-                                            &amp;local-&gt;loc, 0, NULL);</div><div class='del'>-                                trav = trav-&gt;next;</div><div class='del'>-                        }</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (mknod, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                     local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='del'>-                                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;op_ret == -1) {</div><div class='add'>+            local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+            while (trav) {</div><div class='add'>+                STACK_WIND(frame, stripe_mknod_ifreg_fail_unlink_cbk,</div><div class='add'>+                           trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='add'>+                           &amp;local-&gt;loc, 0, NULL);</div><div class='add'>+                trav = trav-&gt;next;</div><div class='add'>+            }</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        STRIPE_STACK_UNWIND(mknod, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;inode, &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                            &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_mknod_ifreg_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                        struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                        struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_mknod_ifreg_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                       struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                       struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t           callcnt = 0;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        call_frame_t     *prev = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-</div><div class='del'>-                        /* Can be used as a mechanism to understand if mknod</div><div class='del'>-                           was successful in at least one place */</div><div class='del'>-                        if (gf_uuid_is_null (local-&gt;ia_gfid))</div><div class='del'>-                                gf_uuid_copy (local-&gt;ia_gfid, buf-&gt;ia_gfid);</div><div class='del'>-</div><div class='del'>-			if (stripe_ctx_handle(this, prev, local, xdata))</div><div class='del'>-				gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-					"Error getting fctx info from dict");</div><div class='del'>-</div><div class='del'>-                        local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-</div><div class='del'>-                if ((local-&gt;op_ret == -1) &amp;&amp; !gf_uuid_is_null (local-&gt;ia_gfid)) {</div><div class='del'>-                        /* ia_gfid set means, at least on one node 'mknod'</div><div class='del'>-                           is successful */</div><div class='del'>-                        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-                        trav = this-&gt;children;</div><div class='del'>-                        while (trav) {</div><div class='del'>-                                STACK_WIND (frame,</div><div class='del'>-                                            stripe_mknod_ifreg_fail_unlink_cbk,</div><div class='del'>-                                            trav-&gt;xlator,</div><div class='del'>-                                            trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='del'>-                                            &amp;local-&gt;loc, 0, NULL);</div><div class='del'>-                                trav = trav-&gt;next;</div><div class='del'>-                        }</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='ctx'> </div><div class='add'>+            /* Can be used as a mechanism to understand if mknod</div><div class='add'>+               was successful in at least one place */</div><div class='add'>+            if (gf_uuid_is_null(local-&gt;ia_gfid))</div><div class='add'>+                gf_uuid_copy(local-&gt;ia_gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;preparent.ia_blocks  = local-&gt;preparent_blocks;</div><div class='del'>-                        local-&gt;preparent.ia_size    = local-&gt;preparent_size;</div><div class='del'>-                        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-                        local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-                        local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='del'>-                        inode_ctx_put (local-&gt;inode, this,</div><div class='del'>-                                       (uint64_t)(long) local-&gt;fctx);</div><div class='add'>+            if (stripe_ctx_handle(this, prev, local, xdata))</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Error getting fctx info from dict");</div><div class='ctx'> </div><div class='del'>-                }</div><div class='del'>-                STRIPE_STACK_UNWIND (mknod, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                     local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='del'>-                                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='add'>+</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+            if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='add'>+                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='add'>+                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+        if ((local-&gt;op_ret == -1) &amp;&amp; !gf_uuid_is_null(local-&gt;ia_gfid)) {</div><div class='add'>+            /* ia_gfid set means, at least on one node 'mknod'</div><div class='add'>+               is successful */</div><div class='add'>+            local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+            trav = this-&gt;children;</div><div class='add'>+            while (trav) {</div><div class='add'>+                STACK_WIND(frame, stripe_mknod_ifreg_fail_unlink_cbk,</div><div class='add'>+                           trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='add'>+                           &amp;local-&gt;loc, 0, NULL);</div><div class='add'>+                trav = trav-&gt;next;</div><div class='add'>+            }</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;preparent.ia_blocks = local-&gt;preparent_blocks;</div><div class='add'>+            local-&gt;preparent.ia_size = local-&gt;preparent_size;</div><div class='add'>+            local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+            local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+            inode_ctx_put(local-&gt;inode, this, (uint64_t)(long)local-&gt;fctx);</div><div class='add'>+        }</div><div class='add'>+        STRIPE_STACK_UNWIND(mknod, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;inode, &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                            &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_mknod_first_ifreg_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                        struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                        struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_mknod_first_ifreg_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                             struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                             struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        call_frame_t     *prev = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int               i    = 1;</div><div class='del'>-        dict_t           *dict           = NULL;</div><div class='del'>-        int               ret            = 0;</div><div class='del'>-        int               need_unref     = 0;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int i = 1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int need_unref = 0;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    trav = this-&gt;children;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count--;</div><div class='add'>+    local-&gt;call_count--;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='del'>-                        prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                local-&gt;failed = 1;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+               prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+        local-&gt;failed = 1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='ctx'> </div><div class='del'>-        local-&gt;stbuf      = *buf;</div><div class='del'>-        local-&gt;preparent  = *preparent;</div><div class='del'>-        local-&gt;postparent = *postparent;</div><div class='add'>+    local-&gt;stbuf = *buf;</div><div class='add'>+    local-&gt;preparent = *preparent;</div><div class='add'>+    local-&gt;postparent = *postparent;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;ia_gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;ia_gfid, buf-&gt;ia_gfid);</div><div class='del'>-        local-&gt;preparent.ia_blocks  = local-&gt;preparent_blocks;</div><div class='del'>-        local-&gt;preparent.ia_size    = local-&gt;preparent_size;</div><div class='del'>-        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-        local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-        local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-        local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;ia_gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;ia_gfid, buf-&gt;ia_gfid);</div><div class='add'>+    local-&gt;preparent.ia_blocks = local-&gt;preparent_blocks;</div><div class='add'>+    local-&gt;preparent.ia_size = local-&gt;preparent_size;</div><div class='add'>+    local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+    local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+    local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+    local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='ctx'> </div><div class='del'>-        trav = trav-&gt;next;</div><div class='del'>-        while (trav) {</div><div class='del'>-                if (priv-&gt;xattr_supported) {</div><div class='del'>-                        dict = dict_new ();</div><div class='del'>-                        if (!dict) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "failed to allocate dict %s", local-&gt;loc.path);</div><div class='del'>-                        }</div><div class='del'>-                        need_unref = 1;</div><div class='del'>-</div><div class='del'>-                        dict_copy (local-&gt;xattr, dict);</div><div class='del'>-</div><div class='del'>-                        ret = stripe_xattr_request_build (this, dict,</div><div class='del'>-                                                          local-&gt;stripe_size,</div><div class='del'>-                                                          priv-&gt;child_count, i,</div><div class='del'>-							  priv-&gt;coalesce);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to build xattr request");</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                        dict = local-&gt;xattr;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND (frame, stripe_mknod_ifreg_cbk,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;mknod,</div><div class='del'>-                            &amp;local-&gt;loc, local-&gt;mode, local-&gt;rdev, 0, dict);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-                i++;</div><div class='add'>+    trav = trav-&gt;next;</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (priv-&gt;xattr_supported) {</div><div class='add'>+            dict = dict_new();</div><div class='add'>+            if (!dict) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "failed to allocate dict %s",</div><div class='add'>+                       local-&gt;loc.path);</div><div class='add'>+            }</div><div class='add'>+            need_unref = 1;</div><div class='add'>+</div><div class='add'>+            dict_copy(local-&gt;xattr, dict);</div><div class='add'>+</div><div class='add'>+            ret = stripe_xattr_request_build(this, dict, local-&gt;stripe_size,</div><div class='add'>+                                             priv-&gt;child_count, i,</div><div class='add'>+                                             priv-&gt;coalesce);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Failed to build xattr request");</div><div class='ctx'> </div><div class='del'>-                if (dict &amp;&amp; need_unref)</div><div class='del'>-                        dict_unref (dict);</div><div class='add'>+        } else {</div><div class='add'>+            dict = local-&gt;xattr;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND(frame, stripe_mknod_ifreg_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;mknod, &amp;local-&gt;loc, local-&gt;mode,</div><div class='add'>+                   local-&gt;rdev, 0, dict);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+        i++;</div><div class='add'>+</div><div class='add'>+        if (dict &amp;&amp; need_unref)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-       STRIPE_STACK_UNWIND (mknod, frame, op_ret, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-       return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(mknod, frame, op_ret, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_single_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                         struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                         struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_single_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                        struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                        struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STRIPE_STACK_UNWIND (mknod, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(mknod, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-stripe_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-              dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+stripe_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+             dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t *priv           = NULL;</div><div class='del'>-        stripe_local_t   *local          = NULL;</div><div class='del'>-        int32_t           op_errno       = EINVAL;</div><div class='del'>-        int32_t           i              = 0;</div><div class='del'>-        dict_t           *dict           = NULL;</div><div class='del'>-        int               ret            = 0;</div><div class='del'>-        int               need_unref     = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int need_unref = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (S_ISREG(mode)) {</div><div class='add'>+        /* NOTE: on older kernels (older than 2.6.9),</div><div class='add'>+           creat() fops is sent as mknod() + open(). Hence handling</div><div class='add'>+           S_IFREG files is necessary */</div><div class='add'>+        if (priv-&gt;nodes_down) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Some node down, returning EIO");</div><div class='add'>+            op_errno = EIO;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (S_ISREG(mode)) {</div><div class='del'>-                /* NOTE: on older kernels (older than 2.6.9),</div><div class='del'>-                   creat() fops is sent as mknod() + open(). Hence handling</div><div class='del'>-                   S_IFREG files is necessary */</div><div class='del'>-                if (priv-&gt;nodes_down) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Some node down, returning EIO");</div><div class='del'>-                        op_errno = EIO;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Initialization */</div><div class='del'>-                local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-                if (!local) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ENOTCONN;</div><div class='del'>-                local-&gt;stripe_size = stripe_get_matching_bs (loc-&gt;path, priv);</div><div class='del'>-                frame-&gt;local = local;</div><div class='del'>-                local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-                loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-                local-&gt;xattr = dict_copy_with_ref (xdata, NULL);</div><div class='del'>-                local-&gt;mode = mode;</div><div class='del'>-                local-&gt;umask = umask;</div><div class='del'>-                local-&gt;rdev = rdev;</div><div class='del'>-</div><div class='del'>-                /* Every time in stripe lookup, all child nodes should</div><div class='del'>-                   be looked up */</div><div class='del'>-                local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;xattr_supported) {</div><div class='del'>-                        dict = dict_new ();</div><div class='del'>-                        if (!dict) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "failed to allocate dict %s", loc-&gt;path);</div><div class='del'>-                        }</div><div class='del'>-                        need_unref = 1;</div><div class='del'>-</div><div class='del'>-                        dict_copy (xdata, dict);</div><div class='del'>-</div><div class='del'>-                        ret = stripe_xattr_request_build (this, dict,</div><div class='del'>-                                                          local-&gt;stripe_size,</div><div class='del'>-                                                          priv-&gt;child_count,</div><div class='del'>-                                                          i, priv-&gt;coalesce);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "failed to build xattr request");</div><div class='del'>-                } else {</div><div class='del'>-                        dict = xdata;</div><div class='del'>-                }</div><div class='add'>+        /* Initialization */</div><div class='add'>+        local = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!local) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOTCONN;</div><div class='add'>+        local-&gt;stripe_size = stripe_get_matching_bs(loc-&gt;path, priv);</div><div class='add'>+        frame-&gt;local = local;</div><div class='add'>+        local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+        loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+        local-&gt;xattr = dict_copy_with_ref(xdata, NULL);</div><div class='add'>+        local-&gt;mode = mode;</div><div class='add'>+        local-&gt;umask = umask;</div><div class='add'>+        local-&gt;rdev = rdev;</div><div class='ctx'> </div><div class='del'>-                STACK_WIND (frame, stripe_mknod_first_ifreg_cbk,</div><div class='del'>-                            FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;mknod,</div><div class='del'>-                            loc, mode, rdev, umask, dict);</div><div class='add'>+        /* Every time in stripe lookup, all child nodes should</div><div class='add'>+           be looked up */</div><div class='add'>+        local-&gt;call_count = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-                        if (dict &amp;&amp; need_unref)</div><div class='del'>-                                dict_unref (dict);</div><div class='del'>-                return 0;</div><div class='add'>+        if (priv-&gt;xattr_supported) {</div><div class='add'>+            dict = dict_new();</div><div class='add'>+            if (!dict) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "failed to allocate dict %s",</div><div class='add'>+                       loc-&gt;path);</div><div class='add'>+            }</div><div class='add'>+            need_unref = 1;</div><div class='add'>+</div><div class='add'>+            dict_copy(xdata, dict);</div><div class='add'>+</div><div class='add'>+            ret = stripe_xattr_request_build(this, dict, local-&gt;stripe_size,</div><div class='add'>+                                             priv-&gt;child_count, i,</div><div class='add'>+                                             priv-&gt;coalesce);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "failed to build xattr request");</div><div class='add'>+        } else {</div><div class='add'>+            dict = xdata;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_single_mknod_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, rdev, umask, xdata);</div><div class='add'>+        STACK_WIND(frame, stripe_mknod_first_ifreg_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask,</div><div class='add'>+                   dict);</div><div class='ctx'> </div><div class='add'>+        if (dict &amp;&amp; need_unref)</div><div class='add'>+            dict_unref(dict);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, stripe_single_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t  *local   = NULL;</div><div class='del'>-        call_frame_t    *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                        local-&gt;stbuf_blocks      += buf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed != -1) {</div><div class='del'>-                        local-&gt;preparent.ia_blocks  = local-&gt;preparent_blocks;</div><div class='del'>-                        local-&gt;preparent.ia_size    = local-&gt;preparent_size;</div><div class='del'>-                        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-                        local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-                        local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='del'>-                }</div><div class='del'>-                STRIPE_STACK_UNWIND (mkdir, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;inode,</div><div class='del'>-                                     &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                                     &amp;local-&gt;postparent, NULL);</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+            if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='add'>+                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='add'>+                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed != -1) {</div><div class='add'>+            local-&gt;preparent.ia_blocks = local-&gt;preparent_blocks;</div><div class='add'>+            local-&gt;preparent.ia_size = local-&gt;preparent_size;</div><div class='add'>+            local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+            local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+        }</div><div class='add'>+        STRIPE_STACK_UNWIND(mkdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;inode, &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                            &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_first_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                        struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                        struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_first_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                       struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                       struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t  *local   = NULL;</div><div class='del'>-        call_frame_t    *prev = NULL;</div><div class='del'>-        xlator_list_t        *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    trav = this-&gt;children;</div><div class='ctx'> </div><div class='del'>-        local-&gt;call_count--; /* first child is successful */</div><div class='del'>-        trav = trav-&gt;next;   /* skip first child */</div><div class='add'>+    local-&gt;call_count--; /* first child is successful */</div><div class='add'>+    trav = trav-&gt;next;   /* skip first child */</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='del'>-                        prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+               prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        local-&gt;inode      = inode_ref (inode);</div><div class='del'>-        local-&gt;stbuf      = *buf;</div><div class='del'>-        local-&gt;postparent = *postparent;</div><div class='del'>-        local-&gt;preparent  = *preparent;</div><div class='add'>+    local-&gt;inode = inode_ref(inode);</div><div class='add'>+    local-&gt;stbuf = *buf;</div><div class='add'>+    local-&gt;postparent = *postparent;</div><div class='add'>+    local-&gt;preparent = *preparent;</div><div class='ctx'> </div><div class='del'>-        local-&gt;stbuf_blocks      += buf-&gt;ia_blocks;</div><div class='del'>-        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+    local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+    local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+    local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-        local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-        local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='del'>-        local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='add'>+    local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+    local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+    local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_mkdir_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;mkdir, &amp;local-&gt;loc, local-&gt;mode,</div><div class='del'>-                            local-&gt;umask, local-&gt;xdata);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_mkdir_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;mkdir, &amp;local-&gt;loc, local-&gt;mode,</div><div class='add'>+                   local-&gt;umask, local-&gt;xdata);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-stripe_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-              mode_t umask, dict_t *xdata)</div><div class='add'>+stripe_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+             mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        local-&gt;mode  = mode;</div><div class='del'>-        local-&gt;umask = umask;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-        /* Every time in stripe lookup, all child nodes should be looked up */</div><div class='del'>-        STACK_WIND (frame, stripe_first_mkdir_cbk, trav-&gt;xlator,</div><div class='del'>-                    trav-&gt;xlator-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    local-&gt;mode = mode;</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    /* Every time in stripe lookup, all child nodes should be looked up */</div><div class='add'>+    STACK_WIND(frame, stripe_first_mkdir_cbk, trav-&gt;xlator,</div><div class='add'>+               trav-&gt;xlator-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                 struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t  *local   = NULL;</div><div class='del'>-        call_frame_t    *prev = NULL;</div><div class='del'>-	stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='del'>-</div><div class='del'>-			if (IA_ISREG(inode-&gt;ia_type)) {</div><div class='del'>-				inode_ctx_get(inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-				if (!fctx) {</div><div class='del'>-					gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-						"failed to get stripe context");</div><div class='del'>-					op_ret = -1;</div><div class='del'>-					op_errno = EINVAL;</div><div class='del'>-				}</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                local-&gt;inode      = inode_ref (inode);</div><div class='del'>-                                local-&gt;stbuf      = *buf;</div><div class='del'>-                                local-&gt;postparent = *postparent;</div><div class='del'>-                                local-&gt;preparent  = *preparent;</div><div class='del'>-                        }</div><div class='del'>-                        local-&gt;stbuf_blocks      += buf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-			correct_file_size(buf, fctx, prev);</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;preparent.ia_blocks  = local-&gt;preparent_blocks;</div><div class='del'>-                        local-&gt;preparent.ia_size    = local-&gt;preparent_size;</div><div class='del'>-                        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-                        local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-                        local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='add'>+</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='add'>+</div><div class='add'>+            if (IA_ISREG(inode-&gt;ia_type)) {</div><div class='add'>+                inode_ctx_get(inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+                if (!fctx) {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "failed to get stripe context");</div><div class='add'>+                    op_ret = -1;</div><div class='add'>+                    op_errno = EINVAL;</div><div class='ctx'>                 }</div><div class='del'>-                STRIPE_STACK_UNWIND (link, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;inode,</div><div class='del'>-                                     &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='del'>-                                     &amp;local-&gt;postparent, NULL);</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                local-&gt;inode = inode_ref(inode);</div><div class='add'>+                local-&gt;stbuf = *buf;</div><div class='add'>+                local-&gt;postparent = *postparent;</div><div class='add'>+                local-&gt;preparent = *preparent;</div><div class='add'>+            }</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+            correct_file_size(buf, fctx, prev);</div><div class='add'>+</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+            if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='add'>+                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='add'>+                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;preparent.ia_blocks = local-&gt;preparent_blocks;</div><div class='add'>+            local-&gt;preparent.ia_size = local-&gt;preparent_size;</div><div class='add'>+            local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+            local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+        }</div><div class='add'>+        STRIPE_STACK_UNWIND(link, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;inode, &amp;local-&gt;stbuf, &amp;local-&gt;preparent,</div><div class='add'>+                            &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+stripe_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (oldloc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        /* If any one node is down, don't allow link operation */</div><div class='del'>-        if (priv-&gt;nodes_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        /* Every time in stripe lookup, all child</div><div class='del'>-           nodes should be looked up */</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_link_cbk,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;link,</div><div class='del'>-                            oldloc, newloc, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(oldloc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* If any one node is down, don't allow link operation */</div><div class='add'>+    if (priv-&gt;nodes_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    /* Every time in stripe lookup, all child</div><div class='add'>+       nodes should be looked up */</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_link_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;link, oldloc, newloc, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(link, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_create_fail_unlink_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                               xlator_t *this, int32_t op_ret,</div><div class='del'>-                               int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                               struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_create_fail_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                              int32_t op_ret, int32_t op_errno,</div><div class='add'>+                              struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                STRIPE_STACK_UNWIND (create, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='del'>-                                     local-&gt;fd, local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='del'>-                                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='del'>-        }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        STRIPE_STACK_UNWIND(create, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;fd, local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='add'>+                            &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                   inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+stripe_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t           callcnt = 0;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        call_frame_t     *prev = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;failed = 1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-			if (IA_ISREG(buf-&gt;ia_type)) {</div><div class='del'>-				if (stripe_ctx_handle(this, prev, local, xdata))</div><div class='del'>-					gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-						"Error getting fctx info from "</div><div class='del'>-						"dict");</div><div class='del'>-			}</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;failed = 1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (IA_ISREG(buf-&gt;ia_type)) {</div><div class='add'>+                if (stripe_ctx_handle(this, prev, local, xdata))</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "Error getting fctx info from "</div><div class='add'>+                           "dict");</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='ctx'> </div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='del'>-                        if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='del'>-                                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-</div><div class='del'>-                if (local-&gt;op_ret == -1) {</div><div class='del'>-                        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-                        trav = this-&gt;children;</div><div class='del'>-                        while (trav) {</div><div class='del'>-                                STACK_WIND (frame,</div><div class='del'>-                                            stripe_create_fail_unlink_cbk,</div><div class='del'>-                                            trav-&gt;xlator,</div><div class='del'>-                                            trav-&gt;xlator-&gt;fops-&gt;unlink,</div><div class='del'>-                                            &amp;local-&gt;loc, 0, NULL);</div><div class='del'>-                                trav = trav-&gt;next;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (local-&gt;op_ret &gt;= 0) {</div><div class='del'>-                        local-&gt;preparent.ia_blocks  = local-&gt;preparent_blocks;</div><div class='del'>-                        local-&gt;preparent.ia_size    = local-&gt;preparent_size;</div><div class='del'>-                        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-                        local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-                        local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='del'>-</div><div class='del'>-			stripe_copy_xl_array(local-&gt;fctx-&gt;xl_array,</div><div class='del'>-				             priv-&gt;xl_array,</div><div class='del'>-					     local-&gt;fctx-&gt;stripe_count);</div><div class='del'>-			inode_ctx_put(local-&gt;inode, this,</div><div class='del'>-					(uint64_t) local-&gt;fctx);</div><div class='del'>-                }</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                /* Create itself has failed.. so return</div><div class='del'>-                   without setxattring */</div><div class='del'>-                STRIPE_STACK_UNWIND (create, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;fd,</div><div class='del'>-                                     local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='del'>-                                     &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+            if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='add'>+                local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+            if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='add'>+                local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='add'>+        if (local-&gt;op_ret == -1) {</div><div class='add'>+            local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+            trav = this-&gt;children;</div><div class='add'>+            while (trav) {</div><div class='add'>+                STACK_WIND(frame, stripe_create_fail_unlink_cbk, trav-&gt;xlator,</div><div class='add'>+                           trav-&gt;xlator-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, NULL);</div><div class='add'>+                trav = trav-&gt;next;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-stripe_first_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                   inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        call_frame_t     *prev = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int               i    = 1;</div><div class='del'>-        dict_t           *dict = NULL;</div><div class='del'>-        loc_t            *loc  = NULL;</div><div class='del'>-        int32_t           need_unref = 0;</div><div class='del'>-        int32_t           ret  = -1;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        loc = &amp;local-&gt;loc;</div><div class='del'>-</div><div class='del'>-        --local-&gt;call_count;</div><div class='add'>+        if (local-&gt;op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;preparent.ia_blocks = local-&gt;preparent_blocks;</div><div class='add'>+            local-&gt;preparent.ia_size = local-&gt;preparent_size;</div><div class='add'>+            local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+            local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='del'>-                        prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                 local-&gt;failed = 1;</div><div class='del'>-                 local-&gt;op_errno = op_errno;</div><div class='add'>+            stripe_copy_xl_array(local-&gt;fctx-&gt;xl_array, priv-&gt;xl_array,</div><div class='add'>+                                 local-&gt;fctx-&gt;stripe_count);</div><div class='add'>+            inode_ctx_put(local-&gt;inode, this, (uint64_t)local-&gt;fctx);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='del'>-        /* Get the mapping in inode private */</div><div class='del'>-        /* Get the stat buf right */</div><div class='del'>-        local-&gt;stbuf      = *buf;</div><div class='del'>-        local-&gt;preparent  = *preparent;</div><div class='del'>-        local-&gt;postparent = *postparent;</div><div class='add'>+        /* Create itself has failed.. so return</div><div class='add'>+           without setxattring */</div><div class='add'>+        STRIPE_STACK_UNWIND(create, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;fd, local-&gt;inode, &amp;local-&gt;stbuf,</div><div class='add'>+                            &amp;local-&gt;preparent, &amp;local-&gt;postparent, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='del'>-        local-&gt;preparent_blocks  += preparent-&gt;ia_blocks;</div><div class='del'>-        local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-              local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-        if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='del'>-              local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='del'>-        if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='del'>-              local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='add'>+int32_t</div><div class='add'>+stripe_first_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='add'>+                        inode_t *inode, struct iatt *buf,</div><div class='add'>+                        struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                        dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int i = 1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    int32_t need_unref = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    loc = &amp;local-&gt;loc;</div><div class='add'>+</div><div class='add'>+    --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+               prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+        local-&gt;failed = 1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='add'>+    /* Get the mapping in inode private */</div><div class='add'>+    /* Get the stat buf right */</div><div class='add'>+    local-&gt;stbuf = *buf;</div><div class='add'>+    local-&gt;preparent = *preparent;</div><div class='add'>+    local-&gt;postparent = *postparent;</div><div class='add'>+</div><div class='add'>+    local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+    local-&gt;preparent_blocks += preparent-&gt;ia_blocks;</div><div class='add'>+    local-&gt;postparent_blocks += postparent-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+        local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+    if (local-&gt;preparent_size &lt; preparent-&gt;ia_size)</div><div class='add'>+        local-&gt;preparent_size = preparent-&gt;ia_size;</div><div class='add'>+    if (local-&gt;postparent_size &lt; postparent-&gt;ia_size)</div><div class='add'>+        local-&gt;postparent_size = postparent-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;failed)</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='add'>+    if (local-&gt;failed)</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret == -1) {</div><div class='del'>-                local-&gt;call_count = 1;</div><div class='del'>-                STACK_WIND (frame, stripe_create_fail_unlink_cbk,</div><div class='del'>-                            FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;unlink,</div><div class='del'>-                            &amp;local-&gt;loc, 0, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;op_ret == -1) {</div><div class='add'>+        local-&gt;call_count = 1;</div><div class='add'>+        STACK_WIND(frame, stripe_create_fail_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;unlink, &amp;local-&gt;loc, 0, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op_ret &gt;= 0) {</div><div class='del'>-                local-&gt;preparent.ia_blocks  = local-&gt;preparent_blocks;</div><div class='del'>-                local-&gt;preparent.ia_size    = local-&gt;preparent_size;</div><div class='del'>-                local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='del'>-                local-&gt;postparent.ia_size   = local-&gt;postparent_size;</div><div class='del'>-                local-&gt;stbuf.ia_size        = local-&gt;stbuf_size;</div><div class='del'>-                local-&gt;stbuf.ia_blocks      = local-&gt;stbuf_blocks;</div><div class='add'>+    if (local-&gt;op_ret &gt;= 0) {</div><div class='add'>+        local-&gt;preparent.ia_blocks = local-&gt;preparent_blocks;</div><div class='add'>+        local-&gt;preparent.ia_size = local-&gt;preparent_size;</div><div class='add'>+        local-&gt;postparent.ia_blocks = local-&gt;postparent_blocks;</div><div class='add'>+        local-&gt;postparent.ia_size = local-&gt;postparent_size;</div><div class='add'>+        local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+        local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Send a setxattr request to nodes where the</div><div class='add'>+       files are created */</div><div class='add'>+    trav = trav-&gt;next;</div><div class='add'>+    while (trav) {</div><div class='add'>+        if (priv-&gt;xattr_supported) {</div><div class='add'>+            dict = dict_new();</div><div class='add'>+            if (!dict) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "failed to allocate dict %s",</div><div class='add'>+                       loc-&gt;path);</div><div class='add'>+            }</div><div class='add'>+            need_unref = 1;</div><div class='add'>+</div><div class='add'>+            dict_copy(local-&gt;xattr, dict);</div><div class='add'>+</div><div class='add'>+            ret = stripe_xattr_request_build(this, dict, local-&gt;stripe_size,</div><div class='add'>+                                             priv-&gt;child_count, i,</div><div class='add'>+                                             priv-&gt;coalesce);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "failed to build xattr request");</div><div class='add'>+        } else {</div><div class='add'>+            dict = local-&gt;xattr;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Send a setxattr request to nodes where the</div><div class='del'>-           files are created */</div><div class='add'>+        STACK_WIND(frame, stripe_create_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;create, &amp;local-&gt;loc, local-&gt;flags,</div><div class='add'>+                   local-&gt;mode, local-&gt;umask, local-&gt;fd, dict);</div><div class='ctx'>         trav = trav-&gt;next;</div><div class='del'>-        while (trav) {</div><div class='del'>-                if (priv-&gt;xattr_supported) {</div><div class='del'>-                        dict = dict_new ();</div><div class='del'>-                        if (!dict) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "failed to allocate dict %s", loc-&gt;path);</div><div class='del'>-                        }</div><div class='del'>-                        need_unref = 1;</div><div class='del'>-</div><div class='del'>-                        dict_copy (local-&gt;xattr, dict);</div><div class='del'>-</div><div class='del'>-                        ret = stripe_xattr_request_build (this, dict,</div><div class='del'>-                                                          local-&gt;stripe_size,</div><div class='del'>-                                                          priv-&gt;child_count,</div><div class='del'>-                                                          i, priv-&gt;coalesce);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "failed to build xattr request");</div><div class='del'>-                } else {</div><div class='del'>-                        dict = local-&gt;xattr;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                STACK_WIND (frame, stripe_create_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;create, &amp;local-&gt;loc,</div><div class='del'>-                            local-&gt;flags, local-&gt;mode, local-&gt;umask, local-&gt;fd,</div><div class='del'>-                            dict);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-                if (need_unref &amp;&amp; dict)</div><div class='del'>-                        dict_unref (dict);</div><div class='del'>-                i++;</div><div class='del'>-        }</div><div class='add'>+        if (need_unref &amp;&amp; dict)</div><div class='add'>+            dict_unref(dict);</div><div class='add'>+        i++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * stripe_create - If a block-size is specified for the 'name', create the</div><div class='ctx'>  *    file in all the child nodes. If not, create it in only first child.</div><div class='hunk'>@@ -2324,958 +2250,928 @@ out:</div><div class='ctx'>  * @name- complete path of the file to be created.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-stripe_create (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               int32_t flags, mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+              mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-        int               ret            = 0;</div><div class='del'>-        int               need_unref     = 0;</div><div class='del'>-        int               i              = 0;</div><div class='del'>-        dict_t           *dict           = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* files created in O_APPEND mode does not allow lseek() on fd */</div><div class='del'>-        flags &amp;= ~O_APPEND;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down || priv-&gt;nodes_down) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "First node down, returning EIO");</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;op_errno = ENOTCONN;</div><div class='del'>-        local-&gt;stripe_size = stripe_get_matching_bs (loc-&gt;path, priv);</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        local-&gt;flags = flags;</div><div class='del'>-        local-&gt;mode = mode;</div><div class='del'>-        local-&gt;umask = umask;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xattr = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        /* Send a setxattr request to nodes where the</div><div class='del'>-           files are created */</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;xattr_supported) {</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "failed to allocate dict %s", loc-&gt;path);</div><div class='del'>-                }</div><div class='del'>-                need_unref = 1;</div><div class='del'>-</div><div class='del'>-                dict_copy (xdata, dict);</div><div class='del'>-</div><div class='del'>-                ret = stripe_xattr_request_build (this, dict,</div><div class='del'>-                                                  local-&gt;stripe_size,</div><div class='del'>-                                                  priv-&gt;child_count,</div><div class='del'>-                                                  i, priv-&gt;coalesce);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "failed to build xattr request");</div><div class='del'>-        } else {</div><div class='del'>-                        dict = xdata;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, stripe_first_create_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;create, loc, flags, mode,</div><div class='del'>-                    umask, fd, dict);</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int need_unref = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* files created in O_APPEND mode does not allow lseek() on fd */</div><div class='add'>+    flags &amp;= ~O_APPEND;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down || priv-&gt;nodes_down) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "First node down, returning EIO");</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = ENOTCONN;</div><div class='add'>+    local-&gt;stripe_size = stripe_get_matching_bs(loc-&gt;path, priv);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+    local-&gt;mode = mode;</div><div class='add'>+    local-&gt;umask = umask;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xattr = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    /* Send a setxattr request to nodes where the</div><div class='add'>+       files are created */</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;xattr_supported) {</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "failed to allocate dict %s",</div><div class='add'>+                   loc-&gt;path);</div><div class='add'>+        }</div><div class='add'>+        need_unref = 1;</div><div class='add'>+</div><div class='add'>+        dict_copy(xdata, dict);</div><div class='add'>+</div><div class='add'>+        ret = stripe_xattr_request_build(this, dict, local-&gt;stripe_size,</div><div class='add'>+                                         priv-&gt;child_count, i, priv-&gt;coalesce);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "failed to build xattr request");</div><div class='add'>+    } else {</div><div class='add'>+        dict = xdata;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (need_unref &amp;&amp; dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    STACK_WIND(frame, stripe_first_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               dict);</div><div class='ctx'> </div><div class='add'>+    if (need_unref &amp;&amp; dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(create, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (op_ret == -1) {</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0)</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+        if (op_ret &gt;= 0)</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (open, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;fd, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+</div><div class='add'>+        STRIPE_STACK_UNWIND(open, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;fd, xdata);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * stripe_open -</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-stripe_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+            fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* files opened in O_APPEND mode does not allow lseek() on fd */</div><div class='del'>-        flags &amp;= ~O_APPEND;</div><div class='del'>-</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-</div><div class='del'>-        /* Striped files */</div><div class='del'>-        local-&gt;flags = flags;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        local-&gt;stripe_size = stripe_get_matching_bs (loc-&gt;path, priv);</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_open_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;open,</div><div class='del'>-                            &amp;local-&gt;loc, local-&gt;flags, local-&gt;fd,</div><div class='del'>-                            xdata);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* files opened in O_APPEND mode does not allow lseek() on fd */</div><div class='add'>+    flags &amp;= ~O_APPEND;</div><div class='add'>+</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    /* Striped files */</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    local-&gt;stripe_size = stripe_get_matching_bs(loc-&gt;path, priv);</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_open_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;open, &amp;local-&gt;loc, local-&gt;flags,</div><div class='add'>+                   local-&gt;fd, xdata);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (open, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(open, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0)</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                STRIPE_STACK_UNWIND (opendir, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, local-&gt;fd, NULL);</div><div class='del'>-        }</div><div class='add'>+        if (op_ret &gt;= 0)</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        STRIPE_STACK_UNWIND(opendir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            local-&gt;fd, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_opendir_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;opendir, loc, fd, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_opendir_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;opendir, loc, fd, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (opendir, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(opendir, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+stripe_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                /* First successful call, copy the *lock */</div><div class='del'>-                                local-&gt;op_ret = op_ret;</div><div class='del'>-                                local-&gt;lock = *lock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                STRIPE_STACK_UNWIND (lk, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;lock, NULL);</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                /* First successful call, copy the *lock */</div><div class='add'>+                local-&gt;op_ret = op_ret;</div><div class='add'>+                local-&gt;lock = *lock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+        STRIPE_STACK_UNWIND(lk, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;lock, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='del'>-           struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+stripe_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+          struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_lk_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;lk, fd, cmd, lock, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_lk_cbk, trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;lk,</div><div class='add'>+                   fd, cmd, lock, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (lk, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(lk, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+stripe_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret &gt;= 0)</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned %s", prev-&gt;this-&gt;name,</div><div class='add'>+                   strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        if (op_ret &gt;= 0)</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (flush, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(flush, frame, local-&gt;op_ret, local-&gt;op_errno, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_flush_cbk,  trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;flush, fd, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_flush_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;flush, fd, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (flush, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(flush, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                  struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+stripe_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='del'>-                                local-&gt;pre_buf  = *prebuf;</div><div class='del'>-                                local-&gt;post_buf = *postbuf;</div><div class='del'>-                        }</div><div class='del'>-                        local-&gt;prebuf_blocks  += prebuf-&gt;ia_blocks;</div><div class='del'>-                        local-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-			correct_file_size(prebuf, local-&gt;fctx, prev);</div><div class='del'>-			correct_file_size(postbuf, local-&gt;fctx, prev);</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='del'>-                                local-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='del'>-                                local-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned %s", prev-&gt;this-&gt;name,</div><div class='add'>+                   strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this) {</div><div class='add'>+                local-&gt;pre_buf = *prebuf;</div><div class='add'>+                local-&gt;post_buf = *postbuf;</div><div class='add'>+            }</div><div class='add'>+            local-&gt;prebuf_blocks += prebuf-&gt;ia_blocks;</div><div class='add'>+            local-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+            correct_file_size(prebuf, local-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postbuf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;pre_buf.ia_blocks  = local-&gt;prebuf_blocks;</div><div class='del'>-                        local-&gt;pre_buf.ia_size    = local-&gt;prebuf_size;</div><div class='del'>-                        local-&gt;post_buf.ia_blocks = local-&gt;postbuf_blocks;</div><div class='del'>-                        local-&gt;post_buf.ia_size   = local-&gt;postbuf_size;</div><div class='del'>-                }</div><div class='add'>+            if (local-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='add'>+                local-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (fsync, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;pre_buf,</div><div class='del'>-                                     &amp;local-&gt;post_buf, NULL);</div><div class='add'>+            if (local-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='add'>+                local-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-stripe_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-	stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;pre_buf.ia_blocks = local-&gt;prebuf_blocks;</div><div class='add'>+            local-&gt;pre_buf.ia_size = local-&gt;prebuf_size;</div><div class='add'>+            local-&gt;post_buf.ia_blocks = local-&gt;postbuf_blocks;</div><div class='add'>+            local-&gt;post_buf.ia_size = local-&gt;postbuf_size;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-	inode_ctx_get(fd-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-	if (!fctx) {</div><div class='del'>-		op_errno = EINVAL;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fctx = fctx;</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+        STRIPE_STACK_UNWIND(fsync, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;pre_buf, &amp;local-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_fsync_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;fsync, fd, flags, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+int32_t</div><div class='add'>+stripe_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+    if (!fctx) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_fsync_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;fsync, fd, flags, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fsync, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+stripe_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned error %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        local-&gt;op_ret = 0;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned error %s",</div><div class='add'>+                   prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        if (FIRST_CHILD(this) == prev-&gt;this)</div><div class='del'>-                                local-&gt;stbuf = *buf;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-                        local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='add'>+            if (FIRST_CHILD(this) == prev-&gt;this)</div><div class='add'>+                local-&gt;stbuf = *buf;</div><div class='ctx'> </div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='add'>+            local-&gt;stbuf_blocks += buf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;op_ret != -1) {</div><div class='del'>-                        local-&gt;stbuf.ia_size   = local-&gt;stbuf_size;</div><div class='del'>-                        local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='del'>-                }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (fstat, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, &amp;local-&gt;stbuf, NULL);</div><div class='add'>+        if (local-&gt;op_ret != -1) {</div><div class='add'>+            local-&gt;stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+            local-&gt;stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        STRIPE_STACK_UNWIND(fstat, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            &amp;local-&gt;stbuf, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_fstat (call_frame_t *frame,</div><div class='del'>-              xlator_t *this,</div><div class='del'>-              fd_t *fd, dict_t *xdata)</div><div class='add'>+stripe_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-	stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-	if (IA_ISREG(fd-&gt;inode-&gt;ia_type)) {</div><div class='del'>-		inode_ctx_get(fd-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-		if (!fctx)</div><div class='del'>-			goto err;</div><div class='del'>-		local-&gt;fctx = fctx;</div><div class='del'>-	}</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    if (IA_ISREG(fd-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        inode_ctx_get(fd-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+        if (!fctx)</div><div class='add'>+            goto err;</div><div class='add'>+        local-&gt;fctx = fctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_fstat_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;fstat, fd, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_fstat_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;fstat, fd, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (fstat, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fstat, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, dict_t *xdata)</div><div class='add'>+stripe_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-	stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-	int		  i, eof_idx;</div><div class='del'>-	off_t		  dest_offset, tmp_offset;</div><div class='del'>-        int32_t		  op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int i, eof_idx;</div><div class='add'>+    off_t dest_offset, tmp_offset;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, (uint64_t *)&amp;fctx);</div><div class='add'>+    if (!fctx) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "no stripe context");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (!fctx-&gt;stripe_count) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "no stripe count");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+    eof_idx = (offset / fctx-&gt;stripe_size) % fctx-&gt;stripe_count;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; fctx-&gt;stripe_count; i++) {</div><div class='add'>+        if (!fctx-&gt;xl_array[i]) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "no xlator at index "</div><div class='add'>+                   "%d",</div><div class='add'>+                   i);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (fctx-&gt;stripe_coalesce) {</div><div class='add'>+            if (i &lt; eof_idx)</div><div class='add'>+                tmp_offset = roof(offset,</div><div class='add'>+                                  fctx-&gt;stripe_size * fctx-&gt;stripe_count);</div><div class='add'>+            else if (i &gt; eof_idx)</div><div class='add'>+                tmp_offset = floor(offset,</div><div class='add'>+                                   fctx-&gt;stripe_size * fctx-&gt;stripe_count);</div><div class='add'>+            else</div><div class='add'>+                tmp_offset = offset;</div><div class='add'>+</div><div class='add'>+            dest_offset = coalesced_offset(tmp_offset, fctx-&gt;stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+        } else {</div><div class='add'>+            dest_offset = offset;</div><div class='ctx'>         }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-	inode_ctx_get(fd-&gt;inode, this, (uint64_t *) &amp;fctx);</div><div class='del'>-	if (!fctx) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "no stripe context");</div><div class='del'>-		op_errno = EINVAL;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-	if (!fctx-&gt;stripe_count) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "no stripe count");</div><div class='del'>-		op_errno = EINVAL;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local-&gt;fctx = fctx;</div><div class='del'>-	eof_idx = (offset / fctx-&gt;stripe_size) % fctx-&gt;stripe_count;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; fctx-&gt;stripe_count; i++) {</div><div class='del'>-		if (!fctx-&gt;xl_array[i]) {</div><div class='del'>-			gf_log(this-&gt;name, GF_LOG_ERROR, "no xlator at index "</div><div class='del'>-				"%d", i);</div><div class='del'>-			op_errno = EINVAL;</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		if (fctx-&gt;stripe_coalesce) {</div><div class='del'>-			if (i &lt; eof_idx)</div><div class='del'>-				tmp_offset = roof(offset, fctx-&gt;stripe_size *</div><div class='del'>-						fctx-&gt;stripe_count);</div><div class='del'>-			else if (i &gt; eof_idx)</div><div class='del'>-				tmp_offset = floor(offset, fctx-&gt;stripe_size *</div><div class='del'>-						fctx-&gt;stripe_count);</div><div class='del'>-			else</div><div class='del'>-				tmp_offset = offset;</div><div class='del'>-</div><div class='del'>-			dest_offset = coalesced_offset(tmp_offset,</div><div class='del'>-				fctx-&gt;stripe_size, fctx-&gt;stripe_count);</div><div class='del'>-		} else {</div><div class='del'>-			dest_offset = offset;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		STACK_WIND(frame, stripe_truncate_cbk, fctx-&gt;xl_array[i],</div><div class='del'>-			fctx-&gt;xl_array[i]-&gt;fops-&gt;ftruncate, fd, dest_offset,</div><div class='del'>-			NULL);</div><div class='del'>-	}</div><div class='add'>+        STACK_WIND(frame, stripe_truncate_cbk, fctx-&gt;xl_array[i],</div><div class='add'>+                   fctx-&gt;xl_array[i]-&gt;fops-&gt;ftruncate, fd, dest_offset, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(ftruncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+stripe_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local   = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s returned %s",</div><div class='del'>-                                prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        if ((op_errno != ENOENT) ||</div><div class='del'>-                            (prev-&gt;this == FIRST_CHILD (this)))</div><div class='del'>-                                local-&gt;failed = 1;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret &gt;= 0)</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s returned %s", prev-&gt;this-&gt;name,</div><div class='add'>+                   strerror(op_errno));</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            if ((op_errno != ENOENT) || (prev-&gt;this == FIRST_CHILD(this)))</div><div class='add'>+                local-&gt;failed = 1;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+        if (op_ret &gt;= 0)</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (local-&gt;failed)</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (local-&gt;failed)</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (fsyncdir, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(fsyncdir, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags, dict_t *xdata)</div><div class='add'>+stripe_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;call_count = priv-&gt;child_count;</div><div class='del'>-</div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_fsyncdir_cbk, trav-&gt;xlator,</div><div class='del'>-                            trav-&gt;xlator-&gt;fops-&gt;fsyncdir, fd, flags, NULL);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;call_count = priv-&gt;child_count;</div><div class='add'>+</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_fsyncdir_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;fsyncdir, fd, flags, NULL);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (fsyncdir, frame, -1, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fsyncdir, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_readv_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+stripe_readv_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         i = 0;</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        int32_t         count = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        struct iovec   *vec = NULL;</div><div class='del'>-        struct iatt     tmp_stbuf = {0,};</div><div class='del'>-        struct iobref  *tmp_iobref = NULL;</div><div class='del'>-        struct iobuf   *iobuf = NULL;</div><div class='del'>-	call_frame_t   *prev = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	prev = cookie;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;call_count;</div><div class='del'>-                if (op_ret != -1) {</div><div class='del'>-			correct_file_size(buf, local-&gt;fctx, prev);</div><div class='del'>-                        if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='del'>-		}</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                op_ret = 0;</div><div class='del'>-</div><div class='del'>-                /* Keep extra space for filling in '\0's */</div><div class='del'>-                vec = GF_CALLOC ((local-&gt;count * 2), sizeof (struct iovec),</div><div class='del'>-                                 gf_stripe_mt_iovec);</div><div class='del'>-                if (!vec) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        goto done;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    struct iovec *vec = NULL;</div><div class='add'>+    struct iatt tmp_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobref *tmp_iobref = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;call_count;</div><div class='add'>+        if (op_ret != -1) {</div><div class='add'>+            correct_file_size(buf, local-&gt;fctx, prev);</div><div class='add'>+            if (local-&gt;stbuf_size &lt; buf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = buf-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        op_ret = 0;</div><div class='add'>+</div><div class='add'>+        /* Keep extra space for filling in '\0's */</div><div class='add'>+        vec = GF_CALLOC((local-&gt;count * 2), sizeof(struct iovec),</div><div class='add'>+                        gf_stripe_mt_iovec);</div><div class='add'>+        if (!vec) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        for (i = 0; i &lt; local-&gt;wind_count; i++) {</div><div class='add'>+            if (local-&gt;replies[i].op_ret) {</div><div class='add'>+                memcpy((vec + count), local-&gt;replies[i].vector,</div><div class='add'>+                       (local-&gt;replies[i].count * sizeof(struct iovec)));</div><div class='add'>+                count += local-&gt;replies[i].count;</div><div class='add'>+                op_ret += local-&gt;replies[i].op_ret;</div><div class='add'>+            }</div><div class='add'>+            if ((local-&gt;replies[i].op_ret &lt; local-&gt;replies[i].requested_size) &amp;&amp;</div><div class='add'>+                (local-&gt;stbuf_size &gt; (local-&gt;offset + op_ret))) {</div><div class='add'>+                /* Fill in 0s here */</div><div class='add'>+                vec[count].iov_len = (local-&gt;replies[i].requested_size -</div><div class='add'>+                                      local-&gt;replies[i].op_ret);</div><div class='add'>+                iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, vec[count].iov_len);</div><div class='add'>+                if (!iobuf) {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR, "Out of memory.");</div><div class='add'>+                    op_ret = -1;</div><div class='add'>+                    op_errno = ENOMEM;</div><div class='add'>+                    goto done;</div><div class='ctx'>                 }</div><div class='add'>+                memset(iobuf-&gt;ptr, 0, vec[count].iov_len);</div><div class='add'>+                vec[count].iov_base = iobuf-&gt;ptr;</div><div class='ctx'> </div><div class='del'>-                for (i = 0; i &lt; local-&gt;wind_count; i++) {</div><div class='del'>-                        if (local-&gt;replies[i].op_ret) {</div><div class='del'>-                                memcpy ((vec + count), local-&gt;replies[i].vector,</div><div class='del'>-                                        (local-&gt;replies[i].count * sizeof (struct iovec)));</div><div class='del'>-                                count +=  local-&gt;replies[i].count;</div><div class='del'>-                                op_ret += local-&gt;replies[i].op_ret;</div><div class='del'>-                        }</div><div class='del'>-                        if ((local-&gt;replies[i].op_ret &lt;</div><div class='del'>-                             local-&gt;replies[i].requested_size) &amp;&amp;</div><div class='del'>-                            (local-&gt;stbuf_size &gt; (local-&gt;offset + op_ret))) {</div><div class='del'>-                                /* Fill in 0s here */</div><div class='del'>-                                vec[count].iov_len  =</div><div class='del'>-                                        (local-&gt;replies[i].requested_size -</div><div class='del'>-                                         local-&gt;replies[i].op_ret);</div><div class='del'>-                                iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool,</div><div class='del'>-                                                    vec[count].iov_len);</div><div class='del'>-                                if (!iobuf) {</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                "Out of memory.");</div><div class='del'>-                                        op_ret = -1;</div><div class='del'>-                                        op_errno = ENOMEM;</div><div class='del'>-                                        goto done;</div><div class='del'>-                                }</div><div class='del'>-                                memset (iobuf-&gt;ptr, 0, vec[count].iov_len);</div><div class='del'>-                                vec[count].iov_base = iobuf-&gt;ptr;</div><div class='del'>-</div><div class='del'>-                                iobref_add (local-&gt;iobref, iobuf);</div><div class='del'>-                                iobuf_unref(iobuf);</div><div class='del'>-</div><div class='del'>-                                op_ret += vec[count].iov_len;</div><div class='del'>-                                count++;</div><div class='del'>-                        }</div><div class='del'>-                        GF_FREE (local-&gt;replies[i].vector);</div><div class='del'>-                }</div><div class='add'>+                iobref_add(local-&gt;iobref, iobuf);</div><div class='add'>+                iobuf_unref(iobuf);</div><div class='ctx'> </div><div class='del'>-                /* ENOENT signals EOF to the NFS-server */</div><div class='del'>-                if (op_ret != -1 &amp;&amp; op_ret &lt; local-&gt;readv_size &amp;&amp;</div><div class='del'>-                    (local-&gt;offset + op_ret == buf-&gt;ia_size))</div><div class='del'>-                        op_errno = ENOENT;</div><div class='del'>-</div><div class='del'>-                /* FIXME: notice that st_ino, and st_dev (gen) will be</div><div class='del'>-                 * different than what inode will have. Make sure this doesn't</div><div class='del'>-                 * cause any bugs at higher levels */</div><div class='del'>-                memcpy (&amp;tmp_stbuf, &amp;local-&gt;replies[0].stbuf,</div><div class='del'>-                        sizeof (struct iatt));</div><div class='del'>-                tmp_stbuf.ia_size = local-&gt;stbuf_size;</div><div class='del'>-</div><div class='del'>-        done:</div><div class='del'>-                GF_FREE (local-&gt;replies);</div><div class='del'>-                tmp_iobref = local-&gt;iobref;</div><div class='del'>-                STRIPE_STACK_UNWIND (readv, frame, op_ret, op_errno, vec,</div><div class='del'>-                                     count, &amp;tmp_stbuf, tmp_iobref, NULL);</div><div class='del'>-</div><div class='del'>-                iobref_unref (tmp_iobref);</div><div class='del'>-                GF_FREE (vec);</div><div class='del'>-        }</div><div class='add'>+                op_ret += vec[count].iov_len;</div><div class='add'>+                count++;</div><div class='add'>+            }</div><div class='add'>+            GF_FREE(local-&gt;replies[i].vector);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* ENOENT signals EOF to the NFS-server */</div><div class='add'>+        if (op_ret != -1 &amp;&amp; op_ret &lt; local-&gt;readv_size &amp;&amp;</div><div class='add'>+            (local-&gt;offset + op_ret == buf-&gt;ia_size))</div><div class='add'>+            op_errno = ENOENT;</div><div class='add'>+</div><div class='add'>+        /* FIXME: notice that st_ino, and st_dev (gen) will be</div><div class='add'>+         * different than what inode will have. Make sure this doesn't</div><div class='add'>+         * cause any bugs at higher levels */</div><div class='add'>+        memcpy(&amp;tmp_stbuf, &amp;local-&gt;replies[0].stbuf, sizeof(struct iatt));</div><div class='add'>+        tmp_stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+</div><div class='add'>+    done:</div><div class='add'>+        GF_FREE(local-&gt;replies);</div><div class='add'>+        tmp_iobref = local-&gt;iobref;</div><div class='add'>+        STRIPE_STACK_UNWIND(readv, frame, op_ret, op_errno, vec, count,</div><div class='add'>+                            &amp;tmp_stbuf, tmp_iobref, NULL);</div><div class='add'>+</div><div class='add'>+        iobref_unref(tmp_iobref);</div><div class='add'>+        GF_FREE(vec);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -3283,1838 +3179,1780 @@ out:</div><div class='ctx'>  *        to above layer after putting it in a single vector.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-stripe_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-                  int32_t count, struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+stripe_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                 int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         index = 0;</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        int32_t         final_count = 0;</div><div class='del'>-        int32_t         need_to_check_proper_size = 0;</div><div class='del'>-        call_frame_t   *mframe = NULL;</div><div class='del'>-        stripe_local_t *mlocal = NULL;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        struct iovec   *final_vec = NULL;</div><div class='del'>-        struct iatt     tmp_stbuf = {0,};</div><div class='del'>-        struct iatt    *tmp_stbuf_p = NULL; //need it for a warning</div><div class='del'>-        struct iobref  *tmp_iobref = NULL;</div><div class='del'>-        stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-	call_frame_t	*prev = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto end;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local  = frame-&gt;local;</div><div class='del'>-        index  = local-&gt;node_index;</div><div class='del'>-	prev = cookie;</div><div class='del'>-        mframe = local-&gt;orig_frame;</div><div class='del'>-        if (!mframe)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        mlocal = mframe-&gt;local;</div><div class='del'>-        if (!mlocal)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fctx = mlocal-&gt;fctx;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;mframe-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                mlocal-&gt;replies[index].op_ret = op_ret;</div><div class='del'>-                mlocal-&gt;replies[index].op_errno = op_errno;</div><div class='del'>-                mlocal-&gt;replies[index].requested_size = local-&gt;readv_size;</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        mlocal-&gt;replies[index].stbuf  = *stbuf;</div><div class='del'>-                        mlocal-&gt;replies[index].count  = count;</div><div class='del'>-                        mlocal-&gt;replies[index].vector = iov_dup (vector, count);</div><div class='del'>-</div><div class='del'>-			correct_file_size(stbuf, fctx, prev);</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;stbuf_size &lt; stbuf-&gt;ia_size)</div><div class='del'>-                                local-&gt;stbuf_size = stbuf-&gt;ia_size;</div><div class='del'>-                        local-&gt;stbuf_blocks += stbuf-&gt;ia_blocks;</div><div class='del'>-</div><div class='del'>-                        if (!mlocal-&gt;iobref)</div><div class='del'>-                                mlocal-&gt;iobref = iobref_new ();</div><div class='del'>-                        iobref_merge (mlocal-&gt;iobref, iobref);</div><div class='del'>-                }</div><div class='del'>-                callcnt = ++mlocal-&gt;call_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;mframe-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (callcnt == mlocal-&gt;wind_count) {</div><div class='del'>-                op_ret = 0;</div><div class='del'>-</div><div class='del'>-                for (index=0; index &lt; mlocal-&gt;wind_count; index++) {</div><div class='del'>-                        /* check whether each stripe returned</div><div class='del'>-                         * 'expected' number of bytes */</div><div class='del'>-                        if (mlocal-&gt;replies[index].op_ret == -1) {</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                op_errno = mlocal-&gt;replies[index].op_errno;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        /* TODO: handle the 'holes' within the read range</div><div class='del'>-                           properly */</div><div class='del'>-                        if (mlocal-&gt;replies[index].op_ret &lt;</div><div class='del'>-                            mlocal-&gt;replies[index].requested_size) {</div><div class='del'>-                                need_to_check_proper_size = 1;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        op_ret       += mlocal-&gt;replies[index].op_ret;</div><div class='del'>-                        mlocal-&gt;count += mlocal-&gt;replies[index].count;</div><div class='del'>-                }</div><div class='del'>-                if (op_ret == -1)</div><div class='del'>-                        goto done;</div><div class='del'>-                if (need_to_check_proper_size)</div><div class='del'>-                        goto check_size;</div><div class='del'>-</div><div class='del'>-                final_vec = GF_CALLOC (mlocal-&gt;count, sizeof (struct iovec),</div><div class='del'>-                                       gf_stripe_mt_iovec);</div><div class='del'>-</div><div class='del'>-                if (!final_vec) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                for (index = 0; index &lt; mlocal-&gt;wind_count; index++) {</div><div class='del'>-                        memcpy ((final_vec + final_count),</div><div class='del'>-                                mlocal-&gt;replies[index].vector,</div><div class='del'>-                                (mlocal-&gt;replies[index].count *</div><div class='del'>-                                 sizeof (struct iovec)));</div><div class='del'>-                        final_count +=  mlocal-&gt;replies[index].count;</div><div class='del'>-                        GF_FREE (mlocal-&gt;replies[index].vector);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* FIXME: notice that st_ino, and st_dev (gen) will be</div><div class='del'>-                 * different than what inode will have. Make sure this doesn't</div><div class='del'>-                 * cause any bugs at higher levels */</div><div class='del'>-                memcpy (&amp;tmp_stbuf, &amp;mlocal-&gt;replies[0].stbuf,</div><div class='del'>-                        sizeof (struct iatt));</div><div class='del'>-                tmp_stbuf.ia_size = local-&gt;stbuf_size;</div><div class='del'>-                tmp_stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='del'>-</div><div class='del'>-        done:</div><div class='del'>-                /* */</div><div class='del'>-                GF_FREE (mlocal-&gt;replies);</div><div class='del'>-                tmp_iobref = mlocal-&gt;iobref;</div><div class='del'>-                /* work around for nfs truncated read. Bug 3774 */</div><div class='del'>-                tmp_stbuf_p = &amp;tmp_stbuf;</div><div class='del'>-                WIPE (tmp_stbuf_p);</div><div class='del'>-                STRIPE_STACK_UNWIND (readv, mframe, op_ret, op_errno, final_vec,</div><div class='del'>-                                     final_count, &amp;tmp_stbuf, tmp_iobref, NULL);</div><div class='del'>-</div><div class='del'>-                iobref_unref (tmp_iobref);</div><div class='del'>-                GF_FREE (final_vec);</div><div class='del'>-        }</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    int32_t final_count = 0;</div><div class='add'>+    int32_t need_to_check_proper_size = 0;</div><div class='add'>+    call_frame_t *mframe = NULL;</div><div class='add'>+    stripe_local_t *mlocal = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    struct iovec *final_vec = NULL;</div><div class='add'>+    struct iatt tmp_stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt *tmp_stbuf_p = NULL;  // need it for a warning</div><div class='add'>+    struct iobref *tmp_iobref = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto end;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    index = local-&gt;node_index;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    mframe = local-&gt;orig_frame;</div><div class='add'>+    if (!mframe)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    mlocal = mframe-&gt;local;</div><div class='add'>+    if (!mlocal)</div><div class='ctx'>         goto out;</div><div class='ctx'> </div><div class='add'>+    fctx = mlocal-&gt;fctx;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;mframe-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        mlocal-&gt;replies[index].op_ret = op_ret;</div><div class='add'>+        mlocal-&gt;replies[index].op_errno = op_errno;</div><div class='add'>+        mlocal-&gt;replies[index].requested_size = local-&gt;readv_size;</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            mlocal-&gt;replies[index].stbuf = *stbuf;</div><div class='add'>+            mlocal-&gt;replies[index].count = count;</div><div class='add'>+            mlocal-&gt;replies[index].vector = iov_dup(vector, count);</div><div class='add'>+</div><div class='add'>+            correct_file_size(stbuf, fctx, prev);</div><div class='add'>+</div><div class='add'>+            if (local-&gt;stbuf_size &lt; stbuf-&gt;ia_size)</div><div class='add'>+                local-&gt;stbuf_size = stbuf-&gt;ia_size;</div><div class='add'>+            local-&gt;stbuf_blocks += stbuf-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+            if (!mlocal-&gt;iobref)</div><div class='add'>+                mlocal-&gt;iobref = iobref_new();</div><div class='add'>+            iobref_merge(mlocal-&gt;iobref, iobref);</div><div class='add'>+        }</div><div class='add'>+        callcnt = ++mlocal-&gt;call_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;mframe-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (callcnt == mlocal-&gt;wind_count) {</div><div class='add'>+        op_ret = 0;</div><div class='add'>+</div><div class='add'>+        for (index = 0; index &lt; mlocal-&gt;wind_count; index++) {</div><div class='add'>+            /* check whether each stripe returned</div><div class='add'>+             * 'expected' number of bytes */</div><div class='add'>+            if (mlocal-&gt;replies[index].op_ret == -1) {</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = mlocal-&gt;replies[index].op_errno;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            /* TODO: handle the 'holes' within the read range</div><div class='add'>+               properly */</div><div class='add'>+            if (mlocal-&gt;replies[index].op_ret &lt;</div><div class='add'>+                mlocal-&gt;replies[index].requested_size) {</div><div class='add'>+                need_to_check_proper_size = 1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            op_ret += mlocal-&gt;replies[index].op_ret;</div><div class='add'>+            mlocal-&gt;count += mlocal-&gt;replies[index].count;</div><div class='add'>+        }</div><div class='add'>+        if (op_ret == -1)</div><div class='add'>+            goto done;</div><div class='add'>+        if (need_to_check_proper_size)</div><div class='add'>+            goto check_size;</div><div class='add'>+</div><div class='add'>+        final_vec = GF_CALLOC(mlocal-&gt;count, sizeof(struct iovec),</div><div class='add'>+                              gf_stripe_mt_iovec);</div><div class='add'>+</div><div class='add'>+        if (!final_vec) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        for (index = 0; index &lt; mlocal-&gt;wind_count; index++) {</div><div class='add'>+            memcpy((final_vec + final_count), mlocal-&gt;replies[index].vector,</div><div class='add'>+                   (mlocal-&gt;replies[index].count * sizeof(struct iovec)));</div><div class='add'>+            final_count += mlocal-&gt;replies[index].count;</div><div class='add'>+            GF_FREE(mlocal-&gt;replies[index].vector);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* FIXME: notice that st_ino, and st_dev (gen) will be</div><div class='add'>+         * different than what inode will have. Make sure this doesn't</div><div class='add'>+         * cause any bugs at higher levels */</div><div class='add'>+        memcpy(&amp;tmp_stbuf, &amp;mlocal-&gt;replies[0].stbuf, sizeof(struct iatt));</div><div class='add'>+        tmp_stbuf.ia_size = local-&gt;stbuf_size;</div><div class='add'>+        tmp_stbuf.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+</div><div class='add'>+    done:</div><div class='add'>+        /* */</div><div class='add'>+        GF_FREE(mlocal-&gt;replies);</div><div class='add'>+        tmp_iobref = mlocal-&gt;iobref;</div><div class='add'>+        /* work around for nfs truncated read. Bug 3774 */</div><div class='add'>+        tmp_stbuf_p = &amp;tmp_stbuf;</div><div class='add'>+        WIPE(tmp_stbuf_p);</div><div class='add'>+        STRIPE_STACK_UNWIND(readv, mframe, op_ret, op_errno, final_vec,</div><div class='add'>+                            final_count, &amp;tmp_stbuf, tmp_iobref, NULL);</div><div class='add'>+</div><div class='add'>+        iobref_unref(tmp_iobref);</div><div class='add'>+        GF_FREE(final_vec);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    goto out;</div><div class='add'>+</div><div class='ctx'> check_size:</div><div class='del'>-        mlocal-&gt;call_count = fctx-&gt;stripe_count;</div><div class='add'>+    mlocal-&gt;call_count = fctx-&gt;stripe_count;</div><div class='ctx'> </div><div class='del'>-        for (index = 0; index &lt; fctx-&gt;stripe_count; index++) {</div><div class='del'>-                STACK_WIND (mframe, stripe_readv_fstat_cbk,</div><div class='del'>-                            (fctx-&gt;xl_array[index]),</div><div class='del'>-                            (fctx-&gt;xl_array[index])-&gt;fops-&gt;fstat,</div><div class='del'>-                            mlocal-&gt;fd, NULL);</div><div class='del'>-        }</div><div class='add'>+    for (index = 0; index &lt; fctx-&gt;stripe_count; index++) {</div><div class='add'>+        STACK_WIND(mframe, stripe_readv_fstat_cbk, (fctx-&gt;xl_array[index]),</div><div class='add'>+                   (fctx-&gt;xl_array[index])-&gt;fops-&gt;fstat, mlocal-&gt;fd, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_DESTROY (frame);</div><div class='add'>+    STRIPE_STACK_DESTROY(frame);</div><div class='ctx'> end:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+stripe_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+             off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-        int32_t           idx = 0;</div><div class='del'>-        int32_t           index = 0;</div><div class='del'>-        int32_t           num_stripe = 0;</div><div class='del'>-        int32_t           off_index = 0;</div><div class='del'>-        size_t            frame_size = 0;</div><div class='del'>-        off_t             rounded_end = 0;</div><div class='del'>-        uint64_t          tmp_fctx = 0;</div><div class='del'>-        uint64_t          stripe_size = 0;</div><div class='del'>-        off_t             rounded_start = 0;</div><div class='del'>-        off_t             frame_offset = offset;</div><div class='del'>-	off_t		  dest_offset = 0;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        call_frame_t     *rframe = NULL;</div><div class='del'>-        stripe_local_t   *rlocal = NULL;</div><div class='del'>-        stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        inode_ctx_get (fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='del'>-        if (!tmp_fctx) {</div><div class='del'>-                op_errno = EBADFD;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='del'>-        stripe_size = fctx-&gt;stripe_size;</div><div class='del'>-</div><div class='del'>-        STRIPE_VALIDATE_FCTX (fctx, err);</div><div class='del'>-</div><div class='del'>-        if (!stripe_size) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Wrong stripe size for the file");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        /* The file is stripe across the child nodes. Send the read request</div><div class='del'>-         * to the child nodes appropriately after checking which region of</div><div class='del'>-         * the file is in which child node. Always '0-&lt;stripe_size&gt;' part of</div><div class='del'>-         * the file resides in the first child.</div><div class='del'>-         */</div><div class='del'>-        rounded_start = floor (offset, stripe_size);</div><div class='del'>-        rounded_end = roof (offset+size, stripe_size);</div><div class='del'>-        num_stripe = (rounded_end- rounded_start)/stripe_size;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-        /* This is where all the vectors should be copied. */</div><div class='del'>-        local-&gt;replies = GF_CALLOC (num_stripe, sizeof (struct stripe_replies),</div><div class='del'>-                                    gf_stripe_mt_stripe_replies);</div><div class='del'>-        if (!local-&gt;replies) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int32_t idx = 0;</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    int32_t num_stripe = 0;</div><div class='add'>+    int32_t off_index = 0;</div><div class='add'>+    size_t frame_size = 0;</div><div class='add'>+    off_t rounded_end = 0;</div><div class='add'>+    uint64_t tmp_fctx = 0;</div><div class='add'>+    uint64_t stripe_size = 0;</div><div class='add'>+    off_t rounded_start = 0;</div><div class='add'>+    off_t frame_offset = offset;</div><div class='add'>+    off_t dest_offset = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *rframe = NULL;</div><div class='add'>+    stripe_local_t *rlocal = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='add'>+    if (!tmp_fctx) {</div><div class='add'>+        op_errno = EBADFD;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='add'>+    stripe_size = fctx-&gt;stripe_size;</div><div class='add'>+</div><div class='add'>+    STRIPE_VALIDATE_FCTX(fctx, err);</div><div class='add'>+</div><div class='add'>+    if (!stripe_size) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Wrong stripe size for the file");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    /* The file is stripe across the child nodes. Send the read request</div><div class='add'>+     * to the child nodes appropriately after checking which region of</div><div class='add'>+     * the file is in which child node. Always '0-&lt;stripe_size&gt;' part of</div><div class='add'>+     * the file resides in the first child.</div><div class='add'>+     */</div><div class='add'>+    rounded_start = floor(offset, stripe_size);</div><div class='add'>+    rounded_end = roof(offset + size, stripe_size);</div><div class='add'>+    num_stripe = (rounded_end - rounded_start) / stripe_size;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    /* This is where all the vectors should be copied. */</div><div class='add'>+    local-&gt;replies = GF_CALLOC(num_stripe, sizeof(struct stripe_replies),</div><div class='add'>+                               gf_stripe_mt_stripe_replies);</div><div class='add'>+    if (!local-&gt;replies) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    off_index = (offset / stripe_size) % fctx-&gt;stripe_count;</div><div class='add'>+    local-&gt;wind_count = num_stripe;</div><div class='add'>+    local-&gt;readv_size = size;</div><div class='add'>+    local-&gt;offset = offset;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+</div><div class='add'>+    for (index = off_index; index &lt; (num_stripe + off_index); index++) {</div><div class='add'>+        rframe = copy_frame(frame);</div><div class='add'>+        rlocal = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!rlocal) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        off_index = (offset / stripe_size) % fctx-&gt;stripe_count;</div><div class='del'>-        local-&gt;wind_count = num_stripe;</div><div class='del'>-        local-&gt;readv_size = size;</div><div class='del'>-        local-&gt;offset     = offset;</div><div class='del'>-        local-&gt;fd         = fd_ref (fd);</div><div class='del'>-        local-&gt;fctx       = fctx;</div><div class='del'>-</div><div class='del'>-        for (index = off_index; index &lt; (num_stripe + off_index); index++) {</div><div class='del'>-                rframe = copy_frame (frame);</div><div class='del'>-                rlocal = mem_get0 (this-&gt;local_pool);</div><div class='del'>-                if (!rlocal) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        frame_size = min(roof(frame_offset + 1, stripe_size), (offset + size)) -</div><div class='add'>+                     frame_offset;</div><div class='ctx'> </div><div class='del'>-                frame_size = min (roof (frame_offset+1, stripe_size),</div><div class='del'>-                                  (offset + size)) - frame_offset;</div><div class='add'>+        rlocal-&gt;node_index = index - off_index;</div><div class='add'>+        rlocal-&gt;orig_frame = frame;</div><div class='add'>+        rlocal-&gt;readv_size = frame_size;</div><div class='add'>+        rframe-&gt;local = rlocal;</div><div class='add'>+        idx = (index % fctx-&gt;stripe_count);</div><div class='ctx'> </div><div class='del'>-                rlocal-&gt;node_index = index - off_index;</div><div class='del'>-                rlocal-&gt;orig_frame = frame;</div><div class='del'>-                rlocal-&gt;readv_size = frame_size;</div><div class='del'>-                rframe-&gt;local = rlocal;</div><div class='del'>-                idx = (index % fctx-&gt;stripe_count);</div><div class='add'>+        if (fctx-&gt;stripe_coalesce)</div><div class='add'>+            dest_offset = coalesced_offset(frame_offset, stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+        else</div><div class='add'>+            dest_offset = frame_offset;</div><div class='ctx'> </div><div class='del'>-		if (fctx-&gt;stripe_coalesce)</div><div class='del'>-			dest_offset = coalesced_offset(frame_offset,</div><div class='del'>-				stripe_size, fctx-&gt;stripe_count);</div><div class='del'>-		else</div><div class='del'>-			dest_offset = frame_offset;</div><div class='add'>+        STACK_WIND(rframe, stripe_readv_cbk, fctx-&gt;xl_array[idx],</div><div class='add'>+                   fctx-&gt;xl_array[idx]-&gt;fops-&gt;readv, fd, frame_size,</div><div class='add'>+                   dest_offset, flags, xdata);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND (rframe, stripe_readv_cbk, fctx-&gt;xl_array[idx],</div><div class='del'>-                            fctx-&gt;xl_array[idx]-&gt;fops-&gt;readv,</div><div class='del'>-                            fd, frame_size, dest_offset, flags, xdata);</div><div class='add'>+        frame_offset += frame_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                frame_offset += frame_size;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (rframe)</div><div class='del'>-                STRIPE_STACK_DESTROY (rframe);</div><div class='add'>+    if (rframe)</div><div class='add'>+        STRIPE_STACK_DESTROY(rframe);</div><div class='ctx'> </div><div class='del'>-        STRIPE_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+stripe_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                  struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-	stripe_local_t *mlocal = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='del'>-	call_frame_t   *mframe = NULL;</div><div class='del'>-	struct stripe_replies *reply = NULL;</div><div class='del'>-	int32_t		i = 0;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	mframe = local-&gt;orig_frame;</div><div class='del'>-	mlocal = mframe-&gt;local;</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = ++mlocal-&gt;call_count;</div><div class='del'>-</div><div class='del'>-		mlocal-&gt;replies[local-&gt;node_index].op_ret = op_ret;</div><div class='del'>-		mlocal-&gt;replies[local-&gt;node_index].op_errno = op_errno;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_local_t *mlocal = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    call_frame_t *mframe = NULL;</div><div class='add'>+    struct stripe_replies *reply = NULL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    mframe = local-&gt;orig_frame;</div><div class='add'>+    mlocal = mframe-&gt;local;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = ++mlocal-&gt;call_count;</div><div class='add'>+</div><div class='add'>+        mlocal-&gt;replies[local-&gt;node_index].op_ret = op_ret;</div><div class='add'>+        mlocal-&gt;replies[local-&gt;node_index].op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            mlocal-&gt;post_buf = *postbuf;</div><div class='add'>+            mlocal-&gt;pre_buf = *prebuf;</div><div class='add'>+</div><div class='add'>+            mlocal-&gt;prebuf_blocks += prebuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='add'>+</div><div class='add'>+            correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='add'>+</div><div class='add'>+            if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='add'>+            if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='add'>+        mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='add'>+        mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='add'>+        mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='add'>+        mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Only return the number of consecutively written bytes up until</div><div class='add'>+         * the first error. Only return an error if it occurs first.</div><div class='add'>+         *</div><div class='add'>+         * When a short write occurs, the application should retry at the</div><div class='add'>+         * appropriate offset, at which point we'll potentially pass back</div><div class='add'>+         * the error.</div><div class='add'>+         */</div><div class='add'>+        for (i = 0, reply = mlocal-&gt;replies; i &lt; mlocal-&gt;wind_count;</div><div class='add'>+             i++, reply++) {</div><div class='add'>+            if (reply-&gt;op_ret == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                       "reply %d "</div><div class='add'>+                       "returned error %s",</div><div class='add'>+                       i, strerror(reply-&gt;op_errno));</div><div class='add'>+                if (!mlocal-&gt;op_ret) {</div><div class='add'>+                    mlocal-&gt;op_ret = -1;</div><div class='add'>+                    mlocal-&gt;op_errno = reply-&gt;op_errno;</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        mlocal-&gt;post_buf = *postbuf;</div><div class='del'>-                        mlocal-&gt;pre_buf = *prebuf;</div><div class='add'>+            mlocal-&gt;op_ret += reply-&gt;op_ret;</div><div class='ctx'> </div><div class='del'>-			mlocal-&gt;prebuf_blocks  += prebuf-&gt;ia_blocks;</div><div class='del'>-			mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='add'>+            if (reply-&gt;op_ret &lt; reply-&gt;requested_size)</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-			correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='del'>-			correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='add'>+        GF_FREE(mlocal-&gt;replies);</div><div class='ctx'> </div><div class='del'>-			if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='del'>-				mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='del'>-			if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='del'>-				mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='del'>-		mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='del'>-		mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='del'>-		mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='del'>-		mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * Only return the number of consecutively written bytes up until</div><div class='del'>-		 * the first error. Only return an error if it occurs first.</div><div class='del'>-		 *</div><div class='del'>-		 * When a short write occurs, the application should retry at the</div><div class='del'>-		 * appropriate offset, at which point we'll potentially pass back</div><div class='del'>-		 * the error.</div><div class='del'>-		 */</div><div class='del'>-		for (i = 0, reply = mlocal-&gt;replies; i &lt; mlocal-&gt;wind_count;</div><div class='del'>-			i++, reply++) {</div><div class='del'>-			if (reply-&gt;op_ret == -1) {</div><div class='del'>-				gf_log(this-&gt;name, GF_LOG_DEBUG, "reply %d "</div><div class='del'>-					"returned error %s", i,</div><div class='del'>-					strerror(reply-&gt;op_errno));</div><div class='del'>-				if (!mlocal-&gt;op_ret) {</div><div class='del'>-					mlocal-&gt;op_ret = -1;</div><div class='del'>-					mlocal-&gt;op_errno = reply-&gt;op_errno;</div><div class='del'>-				}</div><div class='del'>-				break;</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-			mlocal-&gt;op_ret += reply-&gt;op_ret;</div><div class='del'>-</div><div class='del'>-			if (reply-&gt;op_ret &lt; reply-&gt;requested_size)</div><div class='del'>-				break;</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		GF_FREE(mlocal-&gt;replies);</div><div class='del'>-</div><div class='del'>-                STRIPE_STACK_UNWIND (writev, mframe, mlocal-&gt;op_ret,</div><div class='del'>-                                     mlocal-&gt;op_errno, &amp;mlocal-&gt;pre_buf,</div><div class='del'>-                                     &amp;mlocal-&gt;post_buf, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(writev, mframe, mlocal-&gt;op_ret, mlocal-&gt;op_errno,</div><div class='add'>+                            &amp;mlocal-&gt;pre_buf, &amp;mlocal-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-                STRIPE_STACK_DESTROY(frame);</div><div class='del'>-        return 0;</div><div class='add'>+    if (frame)</div><div class='add'>+        STRIPE_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-               struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-               uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+stripe_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+              struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+              struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct iovec     *tmp_vec = NULL;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-        int32_t           idx = 0;</div><div class='del'>-        int32_t           total_size = 0;</div><div class='del'>-        int32_t           offset_offset = 0;</div><div class='del'>-        int32_t           remaining_size = 0;</div><div class='del'>-        int32_t           tmp_count = count;</div><div class='del'>-        off_t             fill_size = 0;</div><div class='del'>-        uint64_t          stripe_size = 0;</div><div class='del'>-        uint64_t          tmp_fctx = 0;</div><div class='del'>-	off_t		  dest_offset = 0;</div><div class='del'>-	off_t		  rounded_start = 0;</div><div class='del'>-	off_t		  rounded_end = 0;</div><div class='del'>-	int32_t		  total_chunks = 0;</div><div class='del'>-	call_frame_t	  *wframe = NULL;</div><div class='del'>-	stripe_local_t	  *wlocal = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        inode_ctx_get (fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='del'>-        if (!tmp_fctx) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='del'>-        stripe_size = fctx-&gt;stripe_size;</div><div class='del'>-</div><div class='del'>-        STRIPE_VALIDATE_FCTX (fctx, err);</div><div class='del'>-</div><div class='del'>-        /* File has to be stripped across the child nodes */</div><div class='del'>-        total_size = iov_length (vector, count);</div><div class='del'>-        remaining_size = total_size;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;stripe_size = stripe_size;</div><div class='del'>-	local-&gt;fctx = fctx;</div><div class='del'>-</div><div class='del'>-        if (!stripe_size) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Wrong stripe size for the file");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	rounded_start = floor(offset, stripe_size);</div><div class='del'>-	rounded_end = roof(offset + total_size, stripe_size);</div><div class='del'>-	total_chunks = (rounded_end - rounded_start) / stripe_size;</div><div class='del'>-	local-&gt;replies = GF_CALLOC(total_chunks, sizeof(struct stripe_replies),</div><div class='del'>-				gf_stripe_mt_stripe_replies);</div><div class='del'>-	if (!local-&gt;replies) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto err;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	total_chunks = 0;</div><div class='del'>-        while (1) {</div><div class='del'>-		wframe = copy_frame(frame);</div><div class='del'>-		wlocal = mem_get0(this-&gt;local_pool);</div><div class='del'>-		if (!wlocal) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		wlocal-&gt;orig_frame = frame;</div><div class='del'>-		wframe-&gt;local = wlocal;</div><div class='del'>-</div><div class='del'>-                /* Send striped chunk of the vector to child</div><div class='del'>-                   nodes appropriately. */</div><div class='del'>-                idx = (((offset + offset_offset) /</div><div class='del'>-                        local-&gt;stripe_size) % fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-                fill_size = (local-&gt;stripe_size -</div><div class='del'>-                             ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='del'>-                if (fill_size &gt; remaining_size)</div><div class='del'>-                        fill_size = remaining_size;</div><div class='del'>-</div><div class='del'>-                remaining_size -= fill_size;</div><div class='del'>-</div><div class='del'>-                tmp_count = iov_subset (vector, count, offset_offset,</div><div class='del'>-                                        offset_offset + fill_size, NULL);</div><div class='del'>-                tmp_vec = GF_CALLOC (tmp_count, sizeof (struct iovec),</div><div class='del'>-                                     gf_stripe_mt_iovec);</div><div class='del'>-                if (!tmp_vec) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                tmp_count = iov_subset (vector, count, offset_offset,</div><div class='del'>-                                        offset_offset + fill_size, tmp_vec);</div><div class='del'>-</div><div class='del'>-                local-&gt;wind_count++;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        local-&gt;unwind = 1;</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * Store off the request index (with respect to the chunk of the</div><div class='del'>-		 * initial offset) and the size of the request. This is required</div><div class='del'>-		 * in the callback to calculate an appropriate return value in</div><div class='del'>-		 * the event of a write failure in one or more requests.</div><div class='del'>-		 */</div><div class='del'>-		wlocal-&gt;node_index = total_chunks;</div><div class='del'>-		local-&gt;replies[total_chunks].requested_size = fill_size;</div><div class='del'>-</div><div class='del'>-		dest_offset = offset + offset_offset;</div><div class='del'>-		if (fctx-&gt;stripe_coalesce)</div><div class='del'>-			dest_offset = coalesced_offset(dest_offset,</div><div class='del'>-					local-&gt;stripe_size, fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-                STACK_WIND (wframe, stripe_writev_cbk, fctx-&gt;xl_array[idx],</div><div class='del'>-                            fctx-&gt;xl_array[idx]-&gt;fops-&gt;writev, fd, tmp_vec,</div><div class='del'>-                            tmp_count, dest_offset, flags, iobref,</div><div class='del'>-                            xdata);</div><div class='del'>-</div><div class='del'>-                GF_FREE (tmp_vec);</div><div class='del'>-                offset_offset += fill_size;</div><div class='del'>-		total_chunks++;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    struct iovec *tmp_vec = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+    int32_t idx = 0;</div><div class='add'>+    int32_t total_size = 0;</div><div class='add'>+    int32_t offset_offset = 0;</div><div class='add'>+    int32_t remaining_size = 0;</div><div class='add'>+    int32_t tmp_count = count;</div><div class='add'>+    off_t fill_size = 0;</div><div class='add'>+    uint64_t stripe_size = 0;</div><div class='add'>+    uint64_t tmp_fctx = 0;</div><div class='add'>+    off_t dest_offset = 0;</div><div class='add'>+    off_t rounded_start = 0;</div><div class='add'>+    off_t rounded_end = 0;</div><div class='add'>+    int32_t total_chunks = 0;</div><div class='add'>+    call_frame_t *wframe = NULL;</div><div class='add'>+    stripe_local_t *wlocal = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='add'>+    if (!tmp_fctx) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='add'>+    stripe_size = fctx-&gt;stripe_size;</div><div class='add'>+</div><div class='add'>+    STRIPE_VALIDATE_FCTX(fctx, err);</div><div class='add'>+</div><div class='add'>+    /* File has to be stripped across the child nodes */</div><div class='add'>+    total_size = iov_length(vector, count);</div><div class='add'>+    remaining_size = total_size;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;stripe_size = stripe_size;</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+</div><div class='add'>+    if (!stripe_size) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Wrong stripe size for the file");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rounded_start = floor(offset, stripe_size);</div><div class='add'>+    rounded_end = roof(offset + total_size, stripe_size);</div><div class='add'>+    total_chunks = (rounded_end - rounded_start) / stripe_size;</div><div class='add'>+    local-&gt;replies = GF_CALLOC(total_chunks, sizeof(struct stripe_replies),</div><div class='add'>+                               gf_stripe_mt_stripe_replies);</div><div class='add'>+    if (!local-&gt;replies) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    total_chunks = 0;</div><div class='add'>+    while (1) {</div><div class='add'>+        wframe = copy_frame(frame);</div><div class='add'>+        wlocal = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!wlocal) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        wlocal-&gt;orig_frame = frame;</div><div class='add'>+        wframe-&gt;local = wlocal;</div><div class='add'>+</div><div class='add'>+        /* Send striped chunk of the vector to child</div><div class='add'>+           nodes appropriately. */</div><div class='add'>+        idx = (((offset + offset_offset) / local-&gt;stripe_size) %</div><div class='add'>+               fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        fill_size = (local-&gt;stripe_size -</div><div class='add'>+                     ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='add'>+        if (fill_size &gt; remaining_size)</div><div class='add'>+            fill_size = remaining_size;</div><div class='add'>+</div><div class='add'>+        remaining_size -= fill_size;</div><div class='add'>+</div><div class='add'>+        tmp_count = iov_subset(vector, count, offset_offset,</div><div class='add'>+                               offset_offset + fill_size, NULL);</div><div class='add'>+        tmp_vec = GF_CALLOC(tmp_count, sizeof(struct iovec),</div><div class='add'>+                            gf_stripe_mt_iovec);</div><div class='add'>+        if (!tmp_vec) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        tmp_count = iov_subset(vector, count, offset_offset,</div><div class='add'>+                               offset_offset + fill_size, tmp_vec);</div><div class='add'>+</div><div class='add'>+        local-&gt;wind_count++;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            local-&gt;unwind = 1;</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * Store off the request index (with respect to the chunk of the</div><div class='add'>+         * initial offset) and the size of the request. This is required</div><div class='add'>+         * in the callback to calculate an appropriate return value in</div><div class='add'>+         * the event of a write failure in one or more requests.</div><div class='add'>+         */</div><div class='add'>+        wlocal-&gt;node_index = total_chunks;</div><div class='add'>+        local-&gt;replies[total_chunks].requested_size = fill_size;</div><div class='add'>+</div><div class='add'>+        dest_offset = offset + offset_offset;</div><div class='add'>+        if (fctx-&gt;stripe_coalesce)</div><div class='add'>+            dest_offset = coalesced_offset(dest_offset, local-&gt;stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        STACK_WIND(wframe, stripe_writev_cbk, fctx-&gt;xl_array[idx],</div><div class='add'>+                   fctx-&gt;xl_array[idx]-&gt;fops-&gt;writev, fd, tmp_vec, tmp_count,</div><div class='add'>+                   dest_offset, flags, iobref, xdata);</div><div class='add'>+</div><div class='add'>+        GF_FREE(tmp_vec);</div><div class='add'>+        offset_offset += fill_size;</div><div class='add'>+        total_chunks++;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-	if (wframe)</div><div class='del'>-		STRIPE_STACK_DESTROY(wframe);</div><div class='add'>+    if (wframe)</div><div class='add'>+        STRIPE_STACK_DESTROY(wframe);</div><div class='ctx'> </div><div class='del'>-        STRIPE_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='ctx'> stripe_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='ctx'>                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-	stripe_local_t *mlocal = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='del'>-	call_frame_t   *mframe = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_local_t *mlocal = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    call_frame_t *mframe = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	mframe = local-&gt;orig_frame;</div><div class='del'>-	mlocal = mframe-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    mframe = local-&gt;orig_frame;</div><div class='add'>+    mlocal = mframe-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = ++mlocal-&gt;call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = ++mlocal-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        mlocal-&gt;post_buf = *postbuf;</div><div class='del'>-                        mlocal-&gt;pre_buf = *prebuf;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            mlocal-&gt;post_buf = *postbuf;</div><div class='add'>+            mlocal-&gt;pre_buf = *prebuf;</div><div class='ctx'> </div><div class='del'>-			mlocal-&gt;prebuf_blocks  += prebuf-&gt;ia_blocks;</div><div class='del'>-			mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;prebuf_blocks += prebuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-			correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='del'>-			correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-			if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='del'>-				mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='del'>-			if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='del'>-				mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+            if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='add'>+            if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		/* return the first failure */</div><div class='del'>-		if (mlocal-&gt;op_ret == 0) {</div><div class='del'>-			mlocal-&gt;op_ret = op_ret;</div><div class='del'>-			mlocal-&gt;op_errno = op_errno;</div><div class='del'>-		}</div><div class='add'>+        /* return the first failure */</div><div class='add'>+        if (mlocal-&gt;op_ret == 0) {</div><div class='add'>+            mlocal-&gt;op_ret = op_ret;</div><div class='add'>+            mlocal-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='del'>-		mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='del'>-		mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='del'>-		mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='del'>-		mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='add'>+    if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='add'>+        mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='add'>+        mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='add'>+        mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='add'>+        mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (fallocate, mframe, mlocal-&gt;op_ret,</div><div class='del'>-                                     mlocal-&gt;op_errno, &amp;mlocal-&gt;pre_buf,</div><div class='del'>-                                     &amp;mlocal-&gt;post_buf, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(fallocate, mframe, mlocal-&gt;op_ret, mlocal-&gt;op_errno,</div><div class='add'>+                            &amp;mlocal-&gt;pre_buf, &amp;mlocal-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-	        STRIPE_STACK_DESTROY(frame);</div><div class='del'>-        return 0;</div><div class='add'>+    if (frame)</div><div class='add'>+        STRIPE_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> stripe_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='del'>-		 off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+                 off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-        int32_t           idx = 0;</div><div class='del'>-        int32_t           offset_offset = 0;</div><div class='del'>-        int32_t           remaining_size = 0;</div><div class='del'>-        off_t             fill_size = 0;</div><div class='del'>-        uint64_t          stripe_size = 0;</div><div class='del'>-        uint64_t          tmp_fctx = 0;</div><div class='del'>-	off_t		  dest_offset = 0;</div><div class='del'>-	call_frame_t	  *fframe = NULL;</div><div class='del'>-	stripe_local_t	  *flocal = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        inode_ctx_get (fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='del'>-        if (!tmp_fctx) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='del'>-        stripe_size = fctx-&gt;stripe_size;</div><div class='del'>-</div><div class='del'>-        STRIPE_VALIDATE_FCTX (fctx, err);</div><div class='del'>-</div><div class='del'>-        remaining_size = len;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;stripe_size = stripe_size;</div><div class='del'>-	local-&gt;fctx = fctx;</div><div class='del'>-</div><div class='del'>-        if (!stripe_size) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Wrong stripe size for the file");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+    int32_t idx = 0;</div><div class='add'>+    int32_t offset_offset = 0;</div><div class='add'>+    int32_t remaining_size = 0;</div><div class='add'>+    off_t fill_size = 0;</div><div class='add'>+    uint64_t stripe_size = 0;</div><div class='add'>+    uint64_t tmp_fctx = 0;</div><div class='add'>+    off_t dest_offset = 0;</div><div class='add'>+    call_frame_t *fframe = NULL;</div><div class='add'>+    stripe_local_t *flocal = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='add'>+    if (!tmp_fctx) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='add'>+    stripe_size = fctx-&gt;stripe_size;</div><div class='add'>+</div><div class='add'>+    STRIPE_VALIDATE_FCTX(fctx, err);</div><div class='add'>+</div><div class='add'>+    remaining_size = len;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;stripe_size = stripe_size;</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+</div><div class='add'>+    if (!stripe_size) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Wrong stripe size for the file");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        fframe = copy_frame(frame);</div><div class='add'>+        flocal = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!flocal) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        flocal-&gt;orig_frame = frame;</div><div class='add'>+        fframe-&gt;local = flocal;</div><div class='add'>+</div><div class='add'>+        /* send fallocate request to the associated child node */</div><div class='add'>+        idx = (((offset + offset_offset) / local-&gt;stripe_size) %</div><div class='add'>+               fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        fill_size = (local-&gt;stripe_size -</div><div class='add'>+                     ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='add'>+        if (fill_size &gt; remaining_size)</div><div class='add'>+            fill_size = remaining_size;</div><div class='add'>+</div><div class='add'>+        remaining_size -= fill_size;</div><div class='add'>+</div><div class='add'>+        local-&gt;wind_count++;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            local-&gt;unwind = 1;</div><div class='add'>+</div><div class='add'>+        dest_offset = offset + offset_offset;</div><div class='add'>+        if (fctx-&gt;stripe_coalesce)</div><div class='add'>+            dest_offset = coalesced_offset(dest_offset, local-&gt;stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * TODO: Create a separate handler for coalesce mode that sends a</div><div class='add'>+         * single fallocate per-child (since the ranges are linear).</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND(fframe, stripe_fallocate_cbk, fctx-&gt;xl_array[idx],</div><div class='add'>+                   fctx-&gt;xl_array[idx]-&gt;fops-&gt;fallocate, fd, mode, dest_offset,</div><div class='add'>+                   fill_size, xdata);</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-		fframe = copy_frame(frame);</div><div class='del'>-		flocal = mem_get0(this-&gt;local_pool);</div><div class='del'>-		if (!flocal) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		flocal-&gt;orig_frame = frame;</div><div class='del'>-		fframe-&gt;local = flocal;</div><div class='del'>-</div><div class='del'>-		/* send fallocate request to the associated child node */</div><div class='del'>-                idx = (((offset + offset_offset) /</div><div class='del'>-                        local-&gt;stripe_size) % fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-                fill_size = (local-&gt;stripe_size -</div><div class='del'>-                             ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='del'>-                if (fill_size &gt; remaining_size)</div><div class='del'>-                        fill_size = remaining_size;</div><div class='del'>-</div><div class='del'>-                remaining_size -= fill_size;</div><div class='del'>-</div><div class='del'>-                local-&gt;wind_count++;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        local-&gt;unwind = 1;</div><div class='del'>-</div><div class='del'>-		dest_offset = offset + offset_offset;</div><div class='del'>-		if (fctx-&gt;stripe_coalesce)</div><div class='del'>-			dest_offset = coalesced_offset(dest_offset,</div><div class='del'>-					local-&gt;stripe_size, fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * TODO: Create a separate handler for coalesce mode that sends a</div><div class='del'>-		 * single fallocate per-child (since the ranges are linear).</div><div class='del'>-		 */</div><div class='del'>-		STACK_WIND(fframe, stripe_fallocate_cbk, fctx-&gt;xl_array[idx],</div><div class='del'>-			   fctx-&gt;xl_array[idx]-&gt;fops-&gt;fallocate, fd, mode,</div><div class='del'>-			   dest_offset, fill_size, xdata);</div><div class='del'>-</div><div class='del'>-                offset_offset += fill_size;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        offset_offset += fill_size;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-	if (fframe)</div><div class='del'>-		STRIPE_STACK_DESTROY(fframe);</div><div class='add'>+    if (fframe)</div><div class='add'>+        STRIPE_STACK_DESTROY(fframe);</div><div class='ctx'> </div><div class='del'>-        STRIPE_STACK_UNWIND (fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fallocate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='ctx'> stripe_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='ctx'>                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-	stripe_local_t *mlocal = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='del'>-	call_frame_t   *mframe = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_local_t *mlocal = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    call_frame_t *mframe = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-	mframe = local-&gt;orig_frame;</div><div class='del'>-	mlocal = mframe-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    mframe = local-&gt;orig_frame;</div><div class='add'>+    mlocal = mframe-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = ++mlocal-&gt;call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = ++mlocal-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        mlocal-&gt;post_buf = *postbuf;</div><div class='del'>-                        mlocal-&gt;pre_buf = *prebuf;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            mlocal-&gt;post_buf = *postbuf;</div><div class='add'>+            mlocal-&gt;pre_buf = *prebuf;</div><div class='ctx'> </div><div class='del'>-			mlocal-&gt;prebuf_blocks  += prebuf-&gt;ia_blocks;</div><div class='del'>-			mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;prebuf_blocks += prebuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-			correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='del'>-			correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-			if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='del'>-				mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='del'>-			if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='del'>-				mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+            if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='add'>+            if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		/* return the first failure */</div><div class='del'>-		if (mlocal-&gt;op_ret == 0) {</div><div class='del'>-			mlocal-&gt;op_ret = op_ret;</div><div class='del'>-			mlocal-&gt;op_errno = op_errno;</div><div class='del'>-		}</div><div class='add'>+        /* return the first failure */</div><div class='add'>+        if (mlocal-&gt;op_ret == 0) {</div><div class='add'>+            mlocal-&gt;op_ret = op_ret;</div><div class='add'>+            mlocal-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='del'>-		mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='del'>-		mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='del'>-		mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='del'>-		mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='add'>+    if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='add'>+        mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='add'>+        mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='add'>+        mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='add'>+        mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (discard, mframe, mlocal-&gt;op_ret,</div><div class='del'>-                                     mlocal-&gt;op_errno, &amp;mlocal-&gt;pre_buf,</div><div class='del'>-                                     &amp;mlocal-&gt;post_buf, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(discard, mframe, mlocal-&gt;op_ret, mlocal-&gt;op_errno,</div><div class='add'>+                            &amp;mlocal-&gt;pre_buf, &amp;mlocal-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (frame)</div><div class='del'>-                STRIPE_STACK_DESTROY(frame);</div><div class='add'>+    if (frame)</div><div class='add'>+        STRIPE_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> stripe_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-	       size_t len, dict_t *xdata)</div><div class='add'>+               size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_fd_ctx_t  *fctx = NULL;</div><div class='del'>-        int32_t           op_errno = 1;</div><div class='del'>-        int32_t           idx = 0;</div><div class='del'>-        int32_t           offset_offset = 0;</div><div class='del'>-        int32_t           remaining_size = 0;</div><div class='del'>-        off_t             fill_size = 0;</div><div class='del'>-        uint64_t          stripe_size = 0;</div><div class='del'>-        uint64_t          tmp_fctx = 0;</div><div class='del'>-	off_t		  dest_offset = 0;</div><div class='del'>-	call_frame_t	  *fframe = NULL;</div><div class='del'>-	stripe_local_t	  *flocal = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        inode_ctx_get (fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='del'>-        if (!tmp_fctx) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='del'>-        stripe_size = fctx-&gt;stripe_size;</div><div class='del'>-</div><div class='del'>-        STRIPE_VALIDATE_FCTX (fctx, err);</div><div class='del'>-</div><div class='del'>-        remaining_size = len;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;stripe_size = stripe_size;</div><div class='del'>-	local-&gt;fctx = fctx;</div><div class='del'>-</div><div class='del'>-        if (!stripe_size) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Wrong stripe size for the file");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+    int32_t idx = 0;</div><div class='add'>+    int32_t offset_offset = 0;</div><div class='add'>+    int32_t remaining_size = 0;</div><div class='add'>+    off_t fill_size = 0;</div><div class='add'>+    uint64_t stripe_size = 0;</div><div class='add'>+    uint64_t tmp_fctx = 0;</div><div class='add'>+    off_t dest_offset = 0;</div><div class='add'>+    call_frame_t *fframe = NULL;</div><div class='add'>+    stripe_local_t *flocal = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='add'>+    if (!tmp_fctx) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='add'>+    stripe_size = fctx-&gt;stripe_size;</div><div class='add'>+</div><div class='add'>+    STRIPE_VALIDATE_FCTX(fctx, err);</div><div class='add'>+</div><div class='add'>+    remaining_size = len;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;stripe_size = stripe_size;</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+</div><div class='add'>+    if (!stripe_size) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Wrong stripe size for the file");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        fframe = copy_frame(frame);</div><div class='add'>+        flocal = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!flocal) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        flocal-&gt;orig_frame = frame;</div><div class='add'>+        fframe-&gt;local = flocal;</div><div class='add'>+</div><div class='add'>+        /* send discard request to the associated child node */</div><div class='add'>+        idx = (((offset + offset_offset) / local-&gt;stripe_size) %</div><div class='add'>+               fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        fill_size = (local-&gt;stripe_size -</div><div class='add'>+                     ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='add'>+        if (fill_size &gt; remaining_size)</div><div class='add'>+            fill_size = remaining_size;</div><div class='add'>+</div><div class='add'>+        remaining_size -= fill_size;</div><div class='add'>+</div><div class='add'>+        local-&gt;wind_count++;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            local-&gt;unwind = 1;</div><div class='add'>+</div><div class='add'>+        dest_offset = offset + offset_offset;</div><div class='add'>+        if (fctx-&gt;stripe_coalesce)</div><div class='add'>+            dest_offset = coalesced_offset(dest_offset, local-&gt;stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * TODO: Create a separate handler for coalesce mode that sends a</div><div class='add'>+         * single discard per-child (since the ranges are linear).</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND(fframe, stripe_discard_cbk, fctx-&gt;xl_array[idx],</div><div class='add'>+                   fctx-&gt;xl_array[idx]-&gt;fops-&gt;discard, fd, dest_offset,</div><div class='add'>+                   fill_size, xdata);</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-		fframe = copy_frame(frame);</div><div class='del'>-		flocal = mem_get0(this-&gt;local_pool);</div><div class='del'>-		if (!flocal) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto err;</div><div class='del'>-		}</div><div class='del'>-		flocal-&gt;orig_frame = frame;</div><div class='del'>-		fframe-&gt;local = flocal;</div><div class='del'>-</div><div class='del'>-		/* send discard request to the associated child node */</div><div class='del'>-                idx = (((offset + offset_offset) /</div><div class='del'>-                        local-&gt;stripe_size) % fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-                fill_size = (local-&gt;stripe_size -</div><div class='del'>-                             ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='del'>-                if (fill_size &gt; remaining_size)</div><div class='del'>-                        fill_size = remaining_size;</div><div class='del'>-</div><div class='del'>-                remaining_size -= fill_size;</div><div class='del'>-</div><div class='del'>-                local-&gt;wind_count++;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        local-&gt;unwind = 1;</div><div class='del'>-</div><div class='del'>-		dest_offset = offset + offset_offset;</div><div class='del'>-		if (fctx-&gt;stripe_coalesce)</div><div class='del'>-			dest_offset = coalesced_offset(dest_offset,</div><div class='del'>-					local-&gt;stripe_size, fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * TODO: Create a separate handler for coalesce mode that sends a</div><div class='del'>-		 * single discard per-child (since the ranges are linear).</div><div class='del'>-		 */</div><div class='del'>-		STACK_WIND(fframe, stripe_discard_cbk, fctx-&gt;xl_array[idx],</div><div class='del'>-			   fctx-&gt;xl_array[idx]-&gt;fops-&gt;discard, fd, dest_offset,</div><div class='del'>-			   fill_size, xdata);</div><div class='del'>-</div><div class='del'>-                offset_offset += fill_size;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        offset_offset += fill_size;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-	if (fframe)</div><div class='del'>-		STRIPE_STACK_DESTROY(fframe);</div><div class='add'>+    if (fframe)</div><div class='add'>+        STRIPE_STACK_DESTROY(fframe);</div><div class='ctx'> </div><div class='del'>-        STRIPE_STACK_UNWIND (discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(discard, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> stripe_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         callcnt    = 0;</div><div class='del'>-        stripe_local_t *local      = NULL;</div><div class='del'>-        stripe_local_t *mlocal     = NULL;</div><div class='del'>-        call_frame_t   *prev       = NULL;</div><div class='del'>-        call_frame_t   *mframe     = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_local_t *mlocal = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    call_frame_t *mframe = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (frame);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='ctx'> </div><div class='del'>-        if (!this || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        mframe = local-&gt;orig_frame;</div><div class='del'>-        mlocal = mframe-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    mframe = local-&gt;orig_frame;</div><div class='add'>+    mlocal = mframe-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = ++mlocal-&gt;call_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = ++mlocal-&gt;call_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        mlocal-&gt;post_buf = *postbuf;</div><div class='del'>-                        mlocal-&gt;pre_buf = *prebuf;</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            mlocal-&gt;post_buf = *postbuf;</div><div class='add'>+            mlocal-&gt;pre_buf = *prebuf;</div><div class='ctx'> </div><div class='del'>-                        mlocal-&gt;prebuf_blocks  += prebuf-&gt;ia_blocks;</div><div class='del'>-                        mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;prebuf_blocks += prebuf-&gt;ia_blocks;</div><div class='add'>+            mlocal-&gt;postbuf_blocks += postbuf-&gt;ia_blocks;</div><div class='ctx'> </div><div class='del'>-                        correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='del'>-                        correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(prebuf, mlocal-&gt;fctx, prev);</div><div class='add'>+            correct_file_size(postbuf, mlocal-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                        if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='del'>-                                mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='del'>-                        if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='del'>-                                mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='del'>-                }</div><div class='add'>+            if (mlocal-&gt;prebuf_size &lt; prebuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;prebuf_size = prebuf-&gt;ia_size;</div><div class='add'>+            if (mlocal-&gt;postbuf_size &lt; postbuf-&gt;ia_size)</div><div class='add'>+                mlocal-&gt;postbuf_size = postbuf-&gt;ia_size;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* return the first failure */</div><div class='del'>-                if (mlocal-&gt;op_ret == 0) {</div><div class='del'>-                        mlocal-&gt;op_ret = op_ret;</div><div class='del'>-                        mlocal-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+        /* return the first failure */</div><div class='add'>+        if (mlocal-&gt;op_ret == 0) {</div><div class='add'>+            mlocal-&gt;op_ret = op_ret;</div><div class='add'>+            mlocal-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='del'>-                mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='del'>-                mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='del'>-                mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='del'>-                mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='add'>+    if ((callcnt == mlocal-&gt;wind_count) &amp;&amp; mlocal-&gt;unwind) {</div><div class='add'>+        mlocal-&gt;pre_buf.ia_size = mlocal-&gt;prebuf_size;</div><div class='add'>+        mlocal-&gt;pre_buf.ia_blocks = mlocal-&gt;prebuf_blocks;</div><div class='add'>+        mlocal-&gt;post_buf.ia_size = mlocal-&gt;postbuf_size;</div><div class='add'>+        mlocal-&gt;post_buf.ia_blocks = mlocal-&gt;postbuf_blocks;</div><div class='ctx'> </div><div class='del'>-                STRIPE_STACK_UNWIND (zerofill, mframe, mlocal-&gt;op_ret,</div><div class='del'>-                                     mlocal-&gt;op_errno, &amp;mlocal-&gt;pre_buf,</div><div class='del'>-                                     &amp;mlocal-&gt;post_buf, NULL);</div><div class='del'>-        }</div><div class='add'>+        STRIPE_STACK_UNWIND(zerofill, mframe, mlocal-&gt;op_ret, mlocal-&gt;op_errno,</div><div class='add'>+                            &amp;mlocal-&gt;pre_buf, &amp;mlocal-&gt;post_buf, NULL);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_DESTROY(frame);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_DESTROY(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> stripe_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-               off_t len, dict_t *xdata)</div><div class='add'>+                off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local            = NULL;</div><div class='del'>-        stripe_fd_ctx_t  *fctx             = NULL;</div><div class='del'>-        int32_t           op_errno         = 1;</div><div class='del'>-        int32_t           idx              = 0;</div><div class='del'>-        int32_t           offset_offset    = 0;</div><div class='del'>-        int32_t           remaining_size   = 0;</div><div class='del'>-        off_t             fill_size        = 0;</div><div class='del'>-        uint64_t          stripe_size      = 0;</div><div class='del'>-        uint64_t          tmp_fctx         = 0;</div><div class='del'>-        off_t             dest_offset      = 0;</div><div class='del'>-        call_frame_t     *fframe           = NULL;</div><div class='del'>-        stripe_local_t   *flocal           = NULL;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        inode_ctx_get (fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='del'>-        if (!tmp_fctx) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='del'>-        stripe_size = fctx-&gt;stripe_size;</div><div class='del'>-</div><div class='del'>-        STRIPE_VALIDATE_FCTX (fctx, err);</div><div class='del'>-</div><div class='del'>-        remaining_size = len;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;stripe_size = stripe_size;</div><div class='del'>-        local-&gt;fctx = fctx;</div><div class='del'>-</div><div class='del'>-        if (!stripe_size) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Wrong stripe size for the file");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                fframe = copy_frame(frame);</div><div class='del'>-                flocal = mem_get0(this-&gt;local_pool);</div><div class='del'>-                if (!flocal) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                flocal-&gt;orig_frame = frame;</div><div class='del'>-                fframe-&gt;local = flocal;</div><div class='del'>-</div><div class='del'>-                idx = (((offset + offset_offset) /</div><div class='del'>-                        local-&gt;stripe_size) % fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-                fill_size = (local-&gt;stripe_size -</div><div class='del'>-                             ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='del'>-                if (fill_size &gt; remaining_size)</div><div class='del'>-                        fill_size = remaining_size;</div><div class='del'>-</div><div class='del'>-                remaining_size -= fill_size;</div><div class='del'>-</div><div class='del'>-                local-&gt;wind_count++;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        local-&gt;unwind = 1;</div><div class='del'>-</div><div class='del'>-                dest_offset = offset + offset_offset;</div><div class='del'>-                if (fctx-&gt;stripe_coalesce)</div><div class='del'>-                        dest_offset = coalesced_offset(dest_offset,</div><div class='del'>-                                                       local-&gt;stripe_size,</div><div class='del'>-                                                       fctx-&gt;stripe_count);</div><div class='del'>-</div><div class='del'>-                STACK_WIND(fframe, stripe_zerofill_cbk, fctx-&gt;xl_array[idx],</div><div class='del'>-                           fctx-&gt;xl_array[idx]-&gt;fops-&gt;zerofill, fd,</div><div class='del'>-                           dest_offset, fill_size, xdata);</div><div class='del'>-                offset_offset += fill_size;</div><div class='del'>-                if (remaining_size == 0)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='add'>+    int32_t op_errno = 1;</div><div class='add'>+    int32_t idx = 0;</div><div class='add'>+    int32_t offset_offset = 0;</div><div class='add'>+    int32_t remaining_size = 0;</div><div class='add'>+    off_t fill_size = 0;</div><div class='add'>+    uint64_t stripe_size = 0;</div><div class='add'>+    uint64_t tmp_fctx = 0;</div><div class='add'>+    off_t dest_offset = 0;</div><div class='add'>+    call_frame_t *fframe = NULL;</div><div class='add'>+    stripe_local_t *flocal = NULL;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    inode_ctx_get(fd-&gt;inode, this, &amp;tmp_fctx);</div><div class='add'>+    if (!tmp_fctx) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='add'>+    stripe_size = fctx-&gt;stripe_size;</div><div class='add'>+</div><div class='add'>+    STRIPE_VALIDATE_FCTX(fctx, err);</div><div class='add'>+</div><div class='add'>+    remaining_size = len;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;stripe_size = stripe_size;</div><div class='add'>+    local-&gt;fctx = fctx;</div><div class='add'>+</div><div class='add'>+    if (!stripe_size) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Wrong stripe size for the file");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        fframe = copy_frame(frame);</div><div class='add'>+        flocal = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!flocal) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        flocal-&gt;orig_frame = frame;</div><div class='add'>+        fframe-&gt;local = flocal;</div><div class='add'>+</div><div class='add'>+        idx = (((offset + offset_offset) / local-&gt;stripe_size) %</div><div class='add'>+               fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        fill_size = (local-&gt;stripe_size -</div><div class='add'>+                     ((offset + offset_offset) % local-&gt;stripe_size));</div><div class='add'>+        if (fill_size &gt; remaining_size)</div><div class='add'>+            fill_size = remaining_size;</div><div class='add'>+</div><div class='add'>+        remaining_size -= fill_size;</div><div class='add'>+</div><div class='add'>+        local-&gt;wind_count++;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            local-&gt;unwind = 1;</div><div class='add'>+</div><div class='add'>+        dest_offset = offset + offset_offset;</div><div class='add'>+        if (fctx-&gt;stripe_coalesce)</div><div class='add'>+            dest_offset = coalesced_offset(dest_offset, local-&gt;stripe_size,</div><div class='add'>+                                           fctx-&gt;stripe_count);</div><div class='add'>+</div><div class='add'>+        STACK_WIND(fframe, stripe_zerofill_cbk, fctx-&gt;xl_array[idx],</div><div class='add'>+                   fctx-&gt;xl_array[idx]-&gt;fops-&gt;zerofill, fd, dest_offset,</div><div class='add'>+                   fill_size, xdata);</div><div class='add'>+        offset_offset += fill_size;</div><div class='add'>+        if (remaining_size == 0)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (fframe)</div><div class='del'>-                STRIPE_STACK_DESTROY(fframe);</div><div class='add'>+    if (fframe)</div><div class='add'>+        STRIPE_STACK_DESTROY(fframe);</div><div class='ctx'> </div><div class='del'>-        STRIPE_STACK_UNWIND (zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(zerofill, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_seek (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-             gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+stripe_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+            gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        /* TBD */</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "seek called on %s.",</div><div class='del'>-                uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-        STRIPE_STACK_UNWIND (seek, frame, -1, ENOTSUP, 0, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    /* TBD */</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "seek called on %s.",</div><div class='add'>+           uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+    STRIPE_STACK_UNWIND(seek, frame, -1, ENOTSUP, 0, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_release (xlator_t *this, fd_t *fd)</div><div class='add'>+stripe_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+stripe_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t          tmp_fctx = 0;</div><div class='del'>-        stripe_fd_ctx_t  *fctx = NULL;</div><div class='add'>+    uint64_t tmp_fctx = 0;</div><div class='add'>+    stripe_fd_ctx_t *fctx = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (inode, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(inode, err);</div><div class='ctx'> </div><div class='del'>-        (void) inode_ctx_del (inode, this, &amp;tmp_fctx);</div><div class='del'>-        if (!tmp_fctx) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    (void)inode_ctx_del(inode, this, &amp;tmp_fctx);</div><div class='add'>+    if (!tmp_fctx) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='add'>+    fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;</div><div class='ctx'> </div><div class='del'>-        if (!fctx-&gt;static_array)</div><div class='del'>-                GF_FREE (fctx-&gt;xl_array);</div><div class='add'>+    if (!fctx-&gt;static_array)</div><div class='add'>+        GF_FREE(fctx-&gt;xl_array);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (fctx);</div><div class='add'>+    GF_FREE(fctx);</div><div class='ctx'> err:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int               down_client = 0;</div><div class='del'>-        int               i = 0;</div><div class='del'>-        gf_boolean_t      heard_from_all_children = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        switch (event)</div><div class='del'>-        {</div><div class='del'>-        case GF_EVENT_CHILD_UP:</div><div class='del'>-        {</div><div class='del'>-                /* get an index number to set */</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (data == priv-&gt;xl_array[i])</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;child_count == i) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "got GF_EVENT_CHILD_UP bad subvolume %s",</div><div class='del'>-                                data? ((xlator_t *)data)-&gt;name: NULL);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int down_client = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t heard_from_all_children = _gf_false;</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (data == FIRST_CHILD (this))</div><div class='del'>-                                priv-&gt;first_child_down = 0;</div><div class='del'>-                        priv-&gt;last_event[i] = event;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-        case GF_EVENT_CHILD_CONNECTING:</div><div class='del'>-        {</div><div class='del'>-                // 'CONNECTING' doesn't ensure its CHILD_UP, so do nothing</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        case GF_EVENT_CHILD_DOWN:</div><div class='del'>-        {</div><div class='del'>-                /* get an index number to set */</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        if (data == priv-&gt;xl_array[i])</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;child_count == i) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "got GF_EVENT_CHILD_DOWN bad subvolume %s",</div><div class='del'>-                                data? ((xlator_t *)data)-&gt;name: NULL);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (data == FIRST_CHILD (this))</div><div class='del'>-                                priv-&gt;first_child_down = 1;</div><div class='del'>-                        priv-&gt;last_event[i] = event;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        default:</div><div class='del'>-        {</div><div class='del'>-                /* */</div><div class='del'>-                default_notify (this, event, data);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-        }</div><div class='add'>+    if (!this)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        // Consider child as down if it's last_event is not CHILD_UP</div><div class='del'>-        for (i = 0, down_client = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (priv-&gt;last_event[i] != GF_EVENT_CHILD_UP)</div><div class='del'>-                        down_client++;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                priv-&gt;nodes_down = down_client;</div><div class='add'>+    switch (event) {</div><div class='add'>+        case GF_EVENT_CHILD_UP: {</div><div class='add'>+            /* get an index number to set */</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                if (data == priv-&gt;xl_array[i])</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (priv-&gt;child_count == i) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "got GF_EVENT_CHILD_UP bad subvolume %s",</div><div class='add'>+                       data ? ((xlator_t *)data)-&gt;name : NULL);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                if (data == FIRST_CHILD(this))</div><div class='add'>+                    priv-&gt;first_child_down = 0;</div><div class='add'>+                priv-&gt;last_event[i] = event;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+        } break;</div><div class='add'>+        case GF_EVENT_CHILD_CONNECTING: {</div><div class='add'>+            // 'CONNECTING' doesn't ensure its CHILD_UP, so do nothing</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        heard_from_all_children = _gf_true;</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='del'>-                if (!priv-&gt;last_event[i])</div><div class='del'>-                        heard_from_all_children = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (heard_from_all_children)</div><div class='del'>-                default_notify (this, event, data);</div><div class='add'>+        case GF_EVENT_CHILD_DOWN: {</div><div class='add'>+            /* get an index number to set */</div><div class='add'>+            for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+                if (data == priv-&gt;xl_array[i])</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (priv-&gt;child_count == i) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "got GF_EVENT_CHILD_DOWN bad subvolume %s",</div><div class='add'>+                       data ? ((xlator_t *)data)-&gt;name : NULL);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                if (data == FIRST_CHILD(this))</div><div class='add'>+                    priv-&gt;first_child_down = 1;</div><div class='add'>+                priv-&gt;last_event[i] = event;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+        } break;</div><div class='add'>+</div><div class='add'>+        default: {</div><div class='add'>+            /* */</div><div class='add'>+            default_notify(this, event, data);</div><div class='add'>+            goto out;</div><div class='add'>+        } break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    // Consider child as down if it's last_event is not CHILD_UP</div><div class='add'>+    for (i = 0, down_client = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (priv-&gt;last_event[i] != GF_EVENT_CHILD_UP)</div><div class='add'>+            down_client++;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        priv-&gt;nodes_down = down_client;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    heard_from_all_children = _gf_true;</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++)</div><div class='add'>+        if (!priv-&gt;last_event[i])</div><div class='add'>+            heard_from_all_children = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (heard_from_all_children)</div><div class='add'>+        default_notify(this, event, data);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_setxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                     xlator_t *this, int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+stripe_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int call_cnt = 0;</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!frame || !frame-&gt;local || !this) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Possible NULL deref");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (!frame || !frame-&gt;local || !this) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Possible NULL deref");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                call_cnt = --local-&gt;wind_count;</div><div class='del'>-</div><div class='del'>-                /**</div><div class='del'>-                 * We overwrite -&gt;op_* values here for subsequent failure</div><div class='del'>-                 * conditions, hence we propagate the last errno down the</div><div class='del'>-                 * stack.</div><div class='del'>-                 */</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        call_cnt = --local-&gt;wind_count;</div><div class='add'>+</div><div class='add'>+        /**</div><div class='add'>+         * We overwrite -&gt;op_* values here for subsequent failure</div><div class='add'>+         * conditions, hence we propagate the last errno down the</div><div class='add'>+         * stack.</div><div class='add'>+         */</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- unlock:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!call_cnt) {</div><div class='del'>-                STRIPE_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (!call_cnt) {</div><div class='add'>+        STRIPE_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_BD_XLATOR</div><div class='ctx'> int</div><div class='del'>-stripe_is_bd (dict_t *this, char *key, data_t *value, void *data)</div><div class='add'>+stripe_is_bd(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t *is_bd = data;</div><div class='add'>+    gf_boolean_t *is_bd = data;</div><div class='ctx'> </div><div class='del'>-        if (data == NULL)</div><div class='del'>-                return 0;</div><div class='add'>+    if (data == NULL)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (XATTR_IS_BD (key))</div><div class='del'>-            *is_bd = _gf_true;</div><div class='add'>+    if (XATTR_IS_BD(key))</div><div class='add'>+        *is_bd = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-stripe_setxattr_is_bd (dict_t *dict)</div><div class='add'>+stripe_setxattr_is_bd(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t is_bd = _gf_false;</div><div class='add'>+    gf_boolean_t is_bd = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (dict == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (dict == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict_foreach (dict, stripe_is_bd, &amp;is_bd);</div><div class='add'>+    dict_foreach(dict, stripe_is_bd, &amp;is_bd);</div><div class='ctx'> out:</div><div class='del'>-        return is_bd;</div><div class='add'>+    return is_bd;</div><div class='ctx'> }</div><div class='ctx'> #else</div><div class='ctx'> #define stripe_setxattr_is_bd(dict) _gf_false</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+stripe_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+                int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t           op_errno = EINVAL;</div><div class='del'>-        xlator_list_t    *trav     = NULL;</div><div class='del'>-        stripe_private_t *priv     = NULL;</div><div class='del'>-        stripe_local_t   *local    = NULL;</div><div class='del'>-        int               i        = 0;</div><div class='del'>-        gf_boolean_t      is_bd    = _gf_false;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        GF_IF_INTERNAL_XATTR_GOTO ("trusted.*stripe*", dict,</div><div class='del'>-                                   op_errno, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;wind_count = priv-&gt;child_count;</div><div class='del'>-        local-&gt;op_ret = local-&gt;op_errno = 0;</div><div class='del'>-</div><div class='del'>-        is_bd = stripe_setxattr_is_bd (dict);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Set xattrs for directories on all subvolumes. Additionally</div><div class='del'>-         * this power is only given to a special client. Bd xlator</div><div class='del'>-         * also needs xattrs for regular files (ie LVs)</div><div class='del'>-         */</div><div class='del'>-        if (((frame-&gt;root-&gt;pid == GF_CLIENT_PID_GSYNCD) &amp;&amp;</div><div class='del'>-             IA_ISDIR (loc-&gt;inode-&gt;ia_type)) || is_bd) {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++, trav = trav-&gt;next) {</div><div class='del'>-                        STACK_WIND (frame, stripe_setxattr_cbk,</div><div class='del'>-                                    trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;setxattr,</div><div class='del'>-                                    loc, dict, flags, xdata);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;wind_count = 1;</div><div class='del'>-                STACK_WIND (frame, stripe_setxattr_cbk,</div><div class='del'>-                            FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                            loc, dict, flags, xdata);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    gf_boolean_t is_bd = _gf_false;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    GF_IF_INTERNAL_XATTR_GOTO("trusted.*stripe*", dict, op_errno, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;wind_count = priv-&gt;child_count;</div><div class='add'>+    local-&gt;op_ret = local-&gt;op_errno = 0;</div><div class='add'>+</div><div class='add'>+    is_bd = stripe_setxattr_is_bd(dict);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Set xattrs for directories on all subvolumes. Additionally</div><div class='add'>+     * this power is only given to a special client. Bd xlator</div><div class='add'>+     * also needs xattrs for regular files (ie LVs)</div><div class='add'>+     */</div><div class='add'>+    if (((frame-&gt;root-&gt;pid == GF_CLIENT_PID_GSYNCD) &amp;&amp;</div><div class='add'>+         IA_ISDIR(loc-&gt;inode-&gt;ia_type)) ||</div><div class='add'>+        is_bd) {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++, trav = trav-&gt;next) {</div><div class='add'>+            STACK_WIND(frame, stripe_setxattr_cbk, trav-&gt;xlator,</div><div class='add'>+                       trav-&gt;xlator-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;wind_count = 1;</div><div class='add'>+        STACK_WIND(frame, stripe_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (setxattr, frame, -1,  op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-stripe_fsetxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+stripe_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STRIPE_STACK_UNWIND (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-stripe_is_special_key (dict_t *this,</div><div class='del'>-                       char *key,</div><div class='del'>-                       data_t *value,</div><div class='del'>-                       void *data)</div><div class='add'>+stripe_is_special_key(dict_t *this, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t *is_special = NULL;</div><div class='add'>+    gf_boolean_t *is_special = NULL;</div><div class='ctx'> </div><div class='del'>-        if (data == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (data == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        is_special = data;</div><div class='add'>+    is_special = data;</div><div class='ctx'> </div><div class='del'>-        if (XATTR_IS_LOCKINFO (key) || XATTR_IS_BD (key))</div><div class='del'>-                *is_special = _gf_true;</div><div class='add'>+    if (XATTR_IS_LOCKINFO(key) || XATTR_IS_BD(key))</div><div class='add'>+        *is_special = _gf_true;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_fsetxattr_everyone_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                               dict_t *xdata)</div><div class='add'>+stripe_fsetxattr_everyone_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             call_count = 0;</div><div class='del'>-        stripe_local_t *local      = NULL;</div><div class='add'>+    int call_count = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                call_count = --local-&gt;wind_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        call_count = --local-&gt;wind_count;</div><div class='ctx'> </div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                }</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                STRIPE_STACK_UNWIND (fsetxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                     local-&gt;op_errno, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        STRIPE_STACK_UNWIND(fsetxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_fsetxattr_to_everyone (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                              dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+stripe_fsetxattr_to_everyone(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                             dict_t *dict, int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t    *trav  = NULL;</div><div class='del'>-        stripe_private_t *priv  = NULL;</div><div class='del'>-        int               ret   = -1;</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (local == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (local == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;wind_count = priv-&gt;child_count;</div><div class='add'>+    local-&gt;wind_count = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+    trav = this-&gt;children;</div><div class='ctx'> </div><div class='del'>-        while (trav) {</div><div class='del'>-                STACK_WIND (frame, stripe_fsetxattr_everyone_cbk,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                            fd, dict, flags, xdata);</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    while (trav) {</div><div class='add'>+        STACK_WIND(frame, stripe_fsetxattr_everyone_cbk, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-stripe_fsetxattr_is_special (dict_t *dict)</div><div class='add'>+stripe_fsetxattr_is_special(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t is_spl = _gf_false;</div><div class='add'>+    gf_boolean_t is_spl = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (dict == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dict == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict_foreach (dict, stripe_is_special_key, &amp;is_spl);</div><div class='add'>+    dict_foreach(dict, stripe_is_special_key, &amp;is_spl);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return is_spl;</div><div class='add'>+    return is_spl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+stripe_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                 int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t      op_ret = -1, ret = -1, op_errno = EINVAL;</div><div class='del'>-        gf_boolean_t is_spl = _gf_false;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='del'>-</div><div class='del'>-        GF_IF_INTERNAL_XATTR_GOTO ("trusted.*stripe*", dict,</div><div class='del'>-                                   op_errno, err);</div><div class='del'>-</div><div class='del'>-        is_spl = stripe_fsetxattr_is_special (dict);</div><div class='del'>-        if (is_spl) {</div><div class='del'>-                ret = stripe_fsetxattr_to_everyone (frame, this, fd, dict,</div><div class='del'>-                                                    flags, xdata);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    int32_t op_ret = -1, ret = -1, op_errno = EINVAL;</div><div class='add'>+    gf_boolean_t is_spl = _gf_false;</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='add'>+</div><div class='add'>+    GF_IF_INTERNAL_XATTR_GOTO("trusted.*stripe*", dict, op_errno, err);</div><div class='add'>+</div><div class='add'>+    is_spl = stripe_fsetxattr_is_special(dict);</div><div class='add'>+    if (is_spl) {</div><div class='add'>+        ret = stripe_fsetxattr_to_everyone(frame, this, fd, dict, flags, xdata);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, stripe_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+stripe_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STRIPE_STACK_UNWIND (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+stripe_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         op_errno = EINVAL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO ("trusted.*stripe*",</div><div class='del'>-                                 name, op_errno, err);</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO("trusted.*stripe*", name, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_removexattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, stripe_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (removexattr, frame, -1,  op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(removexattr, frame, -1, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-stripe_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+stripe_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STRIPE_STACK_UNWIND (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_fremovexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+stripe_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                    const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         op_ret   = -1;</div><div class='del'>-        int32_t         op_errno = EINVAL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        GF_IF_NATIVE_XATTR_GOTO ("trusted.*stripe*",</div><div class='del'>-                                 name, op_errno, err);</div><div class='add'>+    GF_IF_NATIVE_XATTR_GOTO("trusted.*stripe*", name, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_fremovexattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='del'>- err:</div><div class='del'>-        STRIPE_STACK_UNWIND (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, stripe_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+err:</div><div class='add'>+    STRIPE_STACK_UNWIND(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_readdirp_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                            xlator_t *this, int op_ret, int op_errno,</div><div class='del'>-                            inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                            dict_t *xattr, struct iatt *parent)</div><div class='add'>+stripe_readdirp_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int op_ret, int op_errno, inode_t *inode,</div><div class='add'>+                           struct iatt *stbuf, dict_t *xattr,</div><div class='add'>+                           struct iatt *parent)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t          *local          = NULL;</div><div class='del'>-        call_frame_t            *main_frame     = NULL;</div><div class='del'>-        stripe_local_t          *main_local     = NULL;</div><div class='del'>-        gf_dirent_t             *entry          = NULL;</div><div class='del'>-        call_frame_t            *prev           = NULL;</div><div class='del'>-        int                      done           = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        prev = cookie;</div><div class='del'>-</div><div class='del'>-        entry = local-&gt;dirent;</div><div class='del'>-</div><div class='del'>-        main_frame = local-&gt;orig_frame;</div><div class='del'>-        main_local = main_frame-&gt;local;</div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-</div><div class='del'>-                local-&gt;call_count--;</div><div class='del'>-                if (!local-&gt;call_count)</div><div class='del'>-                        done = 1;</div><div class='del'>-                if (op_ret == -1) {</div><div class='del'>-                        local-&gt;op_errno = op_errno;</div><div class='del'>-                        local-&gt;op_ret = op_ret;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    stripe_local_t *main_local = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    int done = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    prev = cookie;</div><div class='add'>+</div><div class='add'>+    entry = local-&gt;dirent;</div><div class='add'>+</div><div class='add'>+    main_frame = local-&gt;orig_frame;</div><div class='add'>+    main_local = main_frame-&gt;local;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;call_count--;</div><div class='add'>+        if (!local-&gt;call_count)</div><div class='add'>+            done = 1;</div><div class='add'>+        if (op_ret == -1) {</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-		if (stripe_ctx_handle(this, prev, local, xattr))</div><div class='del'>-			gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-				"Error getting fctx info from dict.");</div><div class='add'>+        if (stripe_ctx_handle(this, prev, local, xattr))</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Error getting fctx info from dict.");</div><div class='ctx'> </div><div class='del'>-		correct_file_size(stbuf, local-&gt;fctx, prev);</div><div class='add'>+        correct_file_size(stbuf, local-&gt;fctx, prev);</div><div class='ctx'> </div><div class='del'>-                stripe_iatt_merge (stbuf, &amp;entry-&gt;d_stat);</div><div class='del'>-                local-&gt;stbuf_blocks += stbuf-&gt;ia_blocks;</div><div class='del'>-        }</div><div class='add'>+        stripe_iatt_merge(stbuf, &amp;entry-&gt;d_stat);</div><div class='add'>+        local-&gt;stbuf_blocks += stbuf-&gt;ia_blocks;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='add'>+    if (done) {</div><div class='add'>+        inode_ctx_put(entry-&gt;inode, this, (uint64_t)(long)local-&gt;fctx);</div><div class='add'>+</div><div class='add'>+        done = 0;</div><div class='add'>+        LOCK(&amp;main_frame-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            main_local-&gt;wind_count--;</div><div class='add'>+            if (!main_local-&gt;wind_count)</div><div class='add'>+                done = 1;</div><div class='add'>+            if (local-&gt;op_ret == -1) {</div><div class='add'>+                main_local-&gt;op_errno = local-&gt;op_errno;</div><div class='add'>+                main_local-&gt;op_ret = local-&gt;op_ret;</div><div class='add'>+            }</div><div class='add'>+            entry-&gt;d_stat.ia_blocks = local-&gt;stbuf_blocks;</div><div class='add'>+        }</div><div class='add'>+        UNLOCK(&amp;main_frame-&gt;lock);</div><div class='ctx'>         if (done) {</div><div class='del'>-                inode_ctx_put (entry-&gt;inode, this,</div><div class='del'>-                               (uint64_t) (long)local-&gt;fctx);</div><div class='del'>-</div><div class='del'>-                done = 0;</div><div class='del'>-                LOCK (&amp;main_frame-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        main_local-&gt;wind_count--;</div><div class='del'>-                        if (!main_local-&gt;wind_count)</div><div class='del'>-                                done = 1;</div><div class='del'>-                        if (local-&gt;op_ret == -1) {</div><div class='del'>-                                main_local-&gt;op_errno = local-&gt;op_errno;</div><div class='del'>-                                main_local-&gt;op_ret = local-&gt;op_ret;</div><div class='del'>-                        }</div><div class='del'>-                        entry-&gt;d_stat.ia_blocks = local-&gt;stbuf_blocks;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;main_frame-&gt;lock);</div><div class='del'>-                if (done) {</div><div class='del'>-                        main_frame-&gt;local = NULL;</div><div class='del'>-                        STRIPE_STACK_UNWIND (readdir, main_frame,</div><div class='del'>-                                             main_local-&gt;op_ret,</div><div class='del'>-                                             main_local-&gt;op_errno,</div><div class='del'>-                                             &amp;main_local-&gt;entries, NULL);</div><div class='del'>-                        gf_dirent_free (&amp;main_local-&gt;entries);</div><div class='del'>-                        stripe_local_wipe (main_local);</div><div class='del'>-                        mem_put (main_local);</div><div class='del'>-                }</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                stripe_local_wipe (local);</div><div class='del'>-                mem_put (local);</div><div class='del'>-                STRIPE_STACK_DESTROY (frame);</div><div class='del'>-        }</div><div class='add'>+            main_frame-&gt;local = NULL;</div><div class='add'>+            STRIPE_STACK_UNWIND(readdir, main_frame, main_local-&gt;op_ret,</div><div class='add'>+                                main_local-&gt;op_errno, &amp;main_local-&gt;entries,</div><div class='add'>+                                NULL);</div><div class='add'>+            gf_dirent_free(&amp;main_local-&gt;entries);</div><div class='add'>+            stripe_local_wipe(main_local);</div><div class='add'>+            mem_put(main_local);</div><div class='add'>+        }</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        stripe_local_wipe(local);</div><div class='add'>+        mem_put(local);</div><div class='add'>+        STRIPE_STACK_DESTROY(frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     gf_dirent_t *orig_entries, dict_t *xdata)</div><div class='add'>+stripe_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, gf_dirent_t *orig_entries,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t *local = NULL;</div><div class='del'>-        call_frame_t   *prev = NULL;</div><div class='del'>-        gf_dirent_t    *local_entry = NULL;</div><div class='del'>-        gf_dirent_t    *tmp_entry = NULL;</div><div class='del'>-        xlator_list_t  *trav = NULL;</div><div class='del'>-        loc_t          loc = {0, };</div><div class='del'>-        int32_t        count = 0;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        int32_t        subvols = 0;</div><div class='del'>-        dict_t         *xattrs = NULL;</div><div class='del'>-        call_frame_t   *local_frame = NULL;</div><div class='del'>-        stripe_local_t *local_ent = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !frame-&gt;local || !cookie) {</div><div class='del'>-                gf_log ("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        prev  = cookie;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    call_frame_t *prev = NULL;</div><div class='add'>+    gf_dirent_t *local_entry = NULL;</div><div class='add'>+    gf_dirent_t *tmp_entry = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t subvols = 0;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    call_frame_t *local_frame = NULL;</div><div class='add'>+    stripe_local_t *local_ent = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this || !frame-&gt;local || !cookie) {</div><div class='add'>+        gf_log("stripe", GF_LOG_DEBUG, "possible NULL deref");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    prev = cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        subvols = priv-&gt;child_count;</div><div class='add'>+    subvols = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-</div><div class='del'>-                if (op_ret != -1) {</div><div class='del'>-                        list_splice_init (&amp;orig_entries-&gt;list,</div><div class='del'>-                                          &amp;local-&gt;entries.list);</div><div class='del'>-                        local-&gt;wind_count = op_ret;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='ctx'> </div><div class='add'>+        if (op_ret != -1) {</div><div class='add'>+            list_splice_init(&amp;orig_entries-&gt;list, &amp;local-&gt;entries.list);</div><div class='add'>+            local-&gt;wind_count = op_ret;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "%s returned error %s",</div><div class='del'>-                        prev-&gt;this-&gt;name, strerror (op_errno));</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "%s returned error %s",</div><div class='add'>+               prev-&gt;this-&gt;name, strerror(op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattrs = dict_new();</div><div class='add'>+    if (xattrs)</div><div class='add'>+        (void)stripe_xattr_request_build(this, xattrs, 0, 0, 0, 0);</div><div class='add'>+    count = op_ret;</div><div class='add'>+    list_for_each_entry_safe(local_entry, tmp_entry, (&amp;local-&gt;entries.list),</div><div class='add'>+                             list)</div><div class='add'>+    {</div><div class='add'>+        if (!local_entry)</div><div class='add'>+            break;</div><div class='add'>+        if (!IA_ISREG(local_entry-&gt;d_stat.ia_type) || !local_entry-&gt;inode) {</div><div class='add'>+            LOCK(&amp;frame-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                local-&gt;wind_count--;</div><div class='add'>+                count = local-&gt;wind_count;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        local_frame = copy_frame(frame);</div><div class='add'>+</div><div class='add'>+        if (!local_frame) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        xattrs = dict_new ();</div><div class='del'>-        if (xattrs)</div><div class='del'>-                (void) stripe_xattr_request_build (this, xattrs, 0, 0, 0, 0);</div><div class='del'>-        count = op_ret;</div><div class='del'>-        list_for_each_entry_safe (local_entry, tmp_entry,</div><div class='del'>-                                  (&amp;local-&gt;entries.list), list) {</div><div class='del'>-</div><div class='del'>-                if (!local_entry)</div><div class='del'>-                        break;</div><div class='del'>-                if (!IA_ISREG (local_entry-&gt;d_stat.ia_type) || !local_entry-&gt;inode) {</div><div class='del'>-                        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                local-&gt;wind_count--;</div><div class='del'>-                                count = local-&gt;wind_count;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local_frame = copy_frame (frame);</div><div class='del'>-</div><div class='del'>-                if (!local_frame) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local_ent = mem_get0 (this-&gt;local_pool);</div><div class='del'>-                if (!local_ent) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        local_ent = mem_get0(this-&gt;local_pool);</div><div class='add'>+        if (!local_ent) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                loc.inode = inode_ref (local_entry-&gt;inode);</div><div class='add'>+        loc.inode = inode_ref(local_entry-&gt;inode);</div><div class='ctx'> </div><div class='del'>-                gf_uuid_copy (loc.gfid, local_entry-&gt;d_stat.ia_gfid);</div><div class='add'>+        gf_uuid_copy(loc.gfid, local_entry-&gt;d_stat.ia_gfid);</div><div class='ctx'> </div><div class='del'>-                local_ent-&gt;orig_frame = frame;</div><div class='add'>+        local_ent-&gt;orig_frame = frame;</div><div class='ctx'> </div><div class='del'>-                local_ent-&gt;call_count = subvols;</div><div class='add'>+        local_ent-&gt;call_count = subvols;</div><div class='ctx'> </div><div class='del'>-                local_ent-&gt;dirent = local_entry;</div><div class='add'>+        local_ent-&gt;dirent = local_entry;</div><div class='ctx'> </div><div class='del'>-                local_frame-&gt;local = local_ent;</div><div class='add'>+        local_frame-&gt;local = local_ent;</div><div class='ctx'> </div><div class='del'>-                trav = this-&gt;children;</div><div class='del'>-                while (trav) {</div><div class='del'>-                        STACK_WIND (local_frame, stripe_readdirp_lookup_cbk,</div><div class='del'>-                                    trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;lookup,</div><div class='del'>-                                    &amp;loc, xattrs);</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                }</div><div class='del'>-                loc_wipe (&amp;loc);</div><div class='add'>+        trav = this-&gt;children;</div><div class='add'>+        while (trav) {</div><div class='add'>+            STACK_WIND(local_frame, stripe_readdirp_lookup_cbk, trav-&gt;xlator,</div><div class='add'>+                       trav-&gt;xlator-&gt;fops-&gt;lookup, &amp;loc, xattrs);</div><div class='add'>+            trav = trav-&gt;next;</div><div class='ctx'>         }</div><div class='add'>+        loc_wipe(&amp;loc);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (!count) {</div><div class='del'>-                /* all entries are directories */</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                STRIPE_STACK_UNWIND (readdir, frame,</div><div class='del'>-                                     (local ? local-&gt;op_ret : -1),</div><div class='del'>-                                     (local ? local-&gt;op_errno : EINVAL),</div><div class='del'>-                                     (local ? &amp;local-&gt;entries : NULL),</div><div class='del'>-                                     NULL);</div><div class='del'>-                gf_dirent_free (&amp;local-&gt;entries);</div><div class='del'>-                stripe_local_wipe (local);</div><div class='del'>-                mem_put (local);</div><div class='del'>-        }</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    if (!count) {</div><div class='add'>+        /* all entries are directories */</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        STRIPE_STACK_UNWIND(readdir, frame, (local ? local-&gt;op_ret : -1),</div><div class='add'>+                            (local ? local-&gt;op_errno : EINVAL),</div><div class='add'>+                            (local ? &amp;local-&gt;entries : NULL), NULL);</div><div class='add'>+        gf_dirent_free(&amp;local-&gt;entries);</div><div class='add'>+        stripe_local_wipe(local);</div><div class='add'>+        mem_put(local);</div><div class='add'>+    }</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> int32_t</div><div class='del'>-stripe_readdirp (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='add'>+stripe_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t  *local  = NULL;</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t   *trav = NULL;</div><div class='del'>-        int             op_errno = -1;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int op_errno = -1;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (fd, err);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(fd, err);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;first_child_down) {</div><div class='del'>-                op_errno = ENOTCONN;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;first_child_down) {</div><div class='add'>+        op_errno = ENOTCONN;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fd = fd_ref (fd);</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='ctx'> </div><div class='del'>-        local-&gt;wind_count = 0;</div><div class='add'>+    local-&gt;wind_count = 0;</div><div class='ctx'> </div><div class='del'>-        local-&gt;count = 0;</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        INIT_LIST_HEAD(&amp;local-&gt;entries);</div><div class='add'>+    local-&gt;count = 0;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;entries);</div><div class='ctx'> </div><div class='del'>-        if (!trav)</div><div class='del'>-                goto err;</div><div class='add'>+    if (!trav)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_readdirp_cbk, trav-&gt;xlator,</div><div class='del'>-                    trav-&gt;xlator-&gt;fops-&gt;readdirp, fd, size, off, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, stripe_readdirp_cbk, trav-&gt;xlator,</div><div class='add'>+               trav-&gt;xlator-&gt;fops-&gt;readdirp, fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='del'>-        STRIPE_STACK_UNWIND (readdir, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    op_errno = (op_errno == -1) ? errno : op_errno;</div><div class='add'>+    STRIPE_STACK_UNWIND(readdir, frame, -1, op_errno, NULL, NULL);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_stripe_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_stripe_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                        "failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-clear_pattern_list (stripe_private_t *priv)</div><div class='add'>+clear_pattern_list(stripe_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        struct stripe_options *prev = NULL;</div><div class='del'>-        struct stripe_options *trav = NULL;</div><div class='del'>-        int                    ret = -1;</div><div class='add'>+    struct stripe_options *prev = NULL;</div><div class='add'>+    struct stripe_options *trav = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("stripe", priv, out);</div><div class='del'>-</div><div class='del'>-        trav = priv-&gt;pattern;</div><div class='del'>-        priv-&gt;pattern = NULL;</div><div class='del'>-        while (trav) {</div><div class='del'>-                prev = trav;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-                GF_FREE (prev);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("stripe", priv, out);</div><div class='ctx'> </div><div class='add'>+    trav = priv-&gt;pattern;</div><div class='add'>+    priv-&gt;pattern = NULL;</div><div class='add'>+    while (trav) {</div><div class='add'>+        prev = trav;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+        GF_FREE(prev);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    volume_option_t *opt = NULL;</div><div class='ctx'> </div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        data_t           *data = NULL;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        volume_option_t  *opt = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (this-&gt;private);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(this-&gt;private);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    ret = 0;</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = clear_pattern_list(priv);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = clear_pattern_list (priv);</div><div class='del'>-                if (ret)</div><div class='del'>-                         goto unlock;</div><div class='del'>-</div><div class='del'>-                data = dict_get (options, "block-size");</div><div class='del'>-                if (data) {</div><div class='del'>-                        ret = set_stripe_block_size (this, priv, data-&gt;data);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                } else {</div><div class='del'>-                        opt = xlator_volume_option_get (this, "block-size");</div><div class='del'>-                        if (!opt) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "option 'block-size' not found");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (gf_string2bytesize_uint64 (opt-&gt;default_value, &amp;priv-&gt;block_size)){</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Unable to set default block-size ");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        data = dict_get(options, "block-size");</div><div class='add'>+        if (data) {</div><div class='add'>+            ret = set_stripe_block_size(this, priv, data-&gt;data);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+        } else {</div><div class='add'>+            opt = xlator_volume_option_get(this, "block-size");</div><div class='add'>+            if (!opt) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "option 'block-size' not found");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-		GF_OPTION_RECONF("coalesce", priv-&gt;coalesce, options, bool,</div><div class='del'>-				unlock);</div><div class='add'>+            if (gf_string2bytesize_uint64(opt-&gt;default_value,</div><div class='add'>+                                          &amp;priv-&gt;block_size)) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Unable to set default block-size ");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>- unlock:</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+        GF_OPTION_RECONF("coalesce", priv-&gt;coalesce, options, bool, unlock);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -5123,129 +4961,126 @@ reconfigure (xlator_t *this, dict_t *options)</div><div class='ctx'>  * @this -</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t *priv = NULL;</div><div class='del'>-        volume_option_t  *opt = NULL;</div><div class='del'>-        xlator_list_t    *trav = NULL;</div><div class='del'>-        data_t           *data = NULL;</div><div class='del'>-        int32_t           count = 0;</div><div class='del'>-        int               ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        while (trav) {</div><div class='del'>-                count++;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    volume_option_t *opt = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!count) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "stripe configured without \"subvolumes\" option. "</div><div class='del'>-                        "exiting");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    while (trav) {</div><div class='add'>+        count++;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='del'>-        }</div><div class='add'>+    if (!count) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "stripe configured without \"subvolumes\" option. "</div><div class='add'>+               "exiting");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (count == 1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "stripe configured with only one \"subvolumes\" option."</div><div class='del'>-                        " please check the volume. exiting");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = GF_CALLOC (1, sizeof (stripe_private_t),</div><div class='del'>-                          gf_stripe_mt_stripe_private_t);</div><div class='add'>+    if (count == 1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "stripe configured with only one \"subvolumes\" option."</div><div class='add'>+               " please check the volume. exiting");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-        priv-&gt;xl_array = GF_CALLOC (count, sizeof (xlator_t *),</div><div class='del'>-                                    gf_stripe_mt_xlator_t);</div><div class='del'>-        if (!priv-&gt;xl_array)</div><div class='del'>-                goto out;</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(stripe_private_t),</div><div class='add'>+                     gf_stripe_mt_stripe_private_t);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;last_event = GF_CALLOC (count, sizeof (int),</div><div class='del'>-                                      gf_stripe_mt_int32_t);</div><div class='del'>-        if (!priv-&gt;last_event)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+    priv-&gt;xl_array = GF_CALLOC(count, sizeof(xlator_t *),</div><div class='add'>+                               gf_stripe_mt_xlator_t);</div><div class='add'>+    if (!priv-&gt;xl_array)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;child_count = count;</div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;lock);</div><div class='add'>+    priv-&gt;last_event = GF_CALLOC(count, sizeof(int), gf_stripe_mt_int32_t);</div><div class='add'>+    if (!priv-&gt;last_event)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        count = 0;</div><div class='del'>-        while (trav) {</div><div class='del'>-                priv-&gt;xl_array[count++] = trav-&gt;xlator;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;child_count = count;</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (count &gt; 256) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "maximum number of stripe subvolumes supported "</div><div class='del'>-                        "is 256");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    count = 0;</div><div class='add'>+    while (trav) {</div><div class='add'>+        priv-&gt;xl_array[count++] = trav-&gt;xlator;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                opt = xlator_volume_option_get (this, "block-size");</div><div class='del'>-                if (!opt) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "option 'block-size' not found");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                if (gf_string2bytesize_uint64 (opt-&gt;default_value, &amp;priv-&gt;block_size)){</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Unable to set default block-size ");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                /* option stripe-pattern *avi:1GB,*pdf:16K */</div><div class='del'>-                data = dict_get (this-&gt;options, "block-size");</div><div class='del'>-                if (data) {</div><div class='del'>-                        ret = set_stripe_block_size (this, priv, data-&gt;data);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>- unlock:</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    if (count &gt; 256) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "maximum number of stripe subvolumes supported "</div><div class='add'>+               "is 256");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        opt = xlator_volume_option_get(this, "block-size");</div><div class='add'>+        if (!opt) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "option 'block-size' not found");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        if (gf_string2bytesize_uint64(opt-&gt;default_value, &amp;priv-&gt;block_size)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Unable to set default block-size ");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        /* option stripe-pattern *avi:1GB,*pdf:16K */</div><div class='add'>+        data = dict_get(this-&gt;options, "block-size");</div><div class='add'>+        if (data) {</div><div class='add'>+            ret = set_stripe_block_size(this, priv, data-&gt;data);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("use-xattr", priv-&gt;xattr_supported, bool, out);</div><div class='del'>-        /* notify related */</div><div class='del'>-        priv-&gt;nodes_down = priv-&gt;child_count;</div><div class='add'>+    GF_OPTION_INIT("use-xattr", priv-&gt;xattr_supported, bool, out);</div><div class='add'>+    /* notify related */</div><div class='add'>+    priv-&gt;nodes_down = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_INIT("coalesce", priv-&gt;coalesce, bool, out);</div><div class='add'>+    GF_OPTION_INIT("coalesce", priv-&gt;coalesce, bool, out);</div><div class='ctx'> </div><div class='del'>-        this-&gt;local_pool = mem_pool_new (stripe_local_t, 128);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to create local_t's memory pool");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(stripe_local_t, 128);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to create local_t's memory pool");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='add'>+    this-&gt;private = priv;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (priv) {</div><div class='del'>-                        GF_FREE (priv-&gt;xl_array);</div><div class='del'>-                        GF_FREE (priv);</div><div class='del'>-                }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (priv) {</div><div class='add'>+            GF_FREE(priv-&gt;xl_array);</div><div class='add'>+            GF_FREE(priv);</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -5253,533 +5088,524 @@ out:</div><div class='ctx'>  * @this -</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        stripe_private_t      *priv = NULL;</div><div class='del'>-        struct stripe_options *prev = NULL;</div><div class='del'>-        struct stripe_options *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    struct stripe_options *prev = NULL;</div><div class='add'>+    struct stripe_options *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv) {</div><div class='del'>-                this-&gt;private = NULL;</div><div class='del'>-                GF_FREE (priv-&gt;xl_array);</div><div class='del'>-</div><div class='del'>-                trav = priv-&gt;pattern;</div><div class='del'>-                while (trav) {</div><div class='del'>-                        prev = trav;</div><div class='del'>-                        trav = trav-&gt;next;</div><div class='del'>-                        GF_FREE (prev);</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (priv-&gt;last_event);</div><div class='del'>-                LOCK_DESTROY (&amp;priv-&gt;lock);</div><div class='del'>-                GF_FREE (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv) {</div><div class='add'>+        this-&gt;private = NULL;</div><div class='add'>+        GF_FREE(priv-&gt;xl_array);</div><div class='add'>+</div><div class='add'>+        trav = priv-&gt;pattern;</div><div class='add'>+        while (trav) {</div><div class='add'>+            prev = trav;</div><div class='add'>+            trav = trav-&gt;next;</div><div class='add'>+            GF_FREE(prev);</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(priv-&gt;last_event);</div><div class='add'>+        LOCK_DESTROY(&amp;priv-&gt;lock);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_getxattr_unwind (call_frame_t *frame,</div><div class='del'>-                        int op_ret, int op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+stripe_getxattr_unwind(call_frame_t *frame, int op_ret, int op_errno,</div><div class='add'>+                       dict_t *dict, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        STRIPE_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_internal_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                              int op_ret, int op_errno, dict_t *xattr,</div><div class='del'>-                              dict_t *xdata)</div><div class='add'>+stripe_internal_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int op_ret, int op_errno, dict_t *xattr,</div><div class='add'>+                             dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    char size_key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char index_key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char count_key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char coalesce_key[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame-&gt;local, out);</div><div class='add'>+</div><div class='add'>+    if (!xattr || (op_ret == -1))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        char        size_key[256]  = {0,};</div><div class='del'>-        char        index_key[256] = {0,};</div><div class='del'>-        char        count_key[256] = {0,};</div><div class='del'>-        char        coalesce_key[256] = {0,};</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (frame-&gt;local, out);</div><div class='del'>-</div><div class='del'>-        if (!xattr || (op_ret == -1))</div><div class='del'>-            goto out;</div><div class='del'>-</div><div class='del'>-        sprintf (size_key, "trusted.%s.stripe-size", this-&gt;name);</div><div class='del'>-        sprintf (count_key, "trusted.%s.stripe-count", this-&gt;name);</div><div class='del'>-        sprintf (index_key, "trusted.%s.stripe-index", this-&gt;name);</div><div class='del'>-	sprintf (coalesce_key, "trusted.%s.stripe-coalesce", this-&gt;name);</div><div class='add'>+    sprintf(size_key, "trusted.%s.stripe-size", this-&gt;name);</div><div class='add'>+    sprintf(count_key, "trusted.%s.stripe-count", this-&gt;name);</div><div class='add'>+    sprintf(index_key, "trusted.%s.stripe-index", this-&gt;name);</div><div class='add'>+    sprintf(coalesce_key, "trusted.%s.stripe-coalesce", this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        dict_del (xattr, size_key);</div><div class='del'>-        dict_del (xattr, count_key);</div><div class='del'>-        dict_del (xattr, index_key);</div><div class='del'>-        dict_del (xattr, coalesce_key);</div><div class='add'>+    dict_del(xattr, size_key);</div><div class='add'>+    dict_del(xattr, count_key);</div><div class='add'>+    dict_del(xattr, index_key);</div><div class='add'>+    dict_del(xattr, coalesce_key);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STRIPE_STACK_UNWIND (getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+stripe_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int                     call_cnt = 0;</div><div class='del'>-        stripe_local_t         *local = NULL;</div><div class='add'>+    int call_cnt = 0;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (frame-&gt;local, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(frame-&gt;local, out);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                call_cnt = --local-&gt;wind_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        call_cnt = --local-&gt;wind_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!xattr || (op_ret &lt; 0))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!xattr || (op_ret &lt; 0))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = 0;</div><div class='add'>+    local-&gt;op_ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;xattr) {</div><div class='del'>-                local-&gt;xattr = dict_ref (xattr);</div><div class='del'>-        } else {</div><div class='del'>-                stripe_aggregate_xattr (local-&gt;xattr, xattr);</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        local-&gt;xattr = dict_ref(xattr);</div><div class='add'>+    } else {</div><div class='add'>+        stripe_aggregate_xattr(local-&gt;xattr, xattr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (!call_cnt) {</div><div class='del'>-                STRIPE_STACK_UNWIND (getxattr, frame,</div><div class='del'>-                                     (local ? local-&gt;op_ret : -1),</div><div class='del'>-                                     op_errno,</div><div class='del'>-                                     (local ? local-&gt;xattr : NULL), xdata);</div><div class='del'>-        }</div><div class='add'>+    if (!call_cnt) {</div><div class='add'>+        STRIPE_STACK_UNWIND(getxattr, frame, (local ? local-&gt;op_ret : -1),</div><div class='add'>+                            op_errno, (local ? local-&gt;xattr : NULL), xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_vgetxattr_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                      xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      dict_t *dict, dict_t *xdata)</div><div class='add'>+stripe_vgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t      *local         = NULL;</div><div class='del'>-        int32_t              callcnt       = 0;</div><div class='del'>-        int32_t              ret           = -1;</div><div class='del'>-        long                 cky           = 0;</div><div class='del'>-        void                *xattr_val     = NULL;</div><div class='del'>-        void                *xattr_serz    = NULL;</div><div class='del'>-        stripe_xattr_sort_t *xattr         = NULL;</div><div class='del'>-        dict_t              *stripe_xattr  = NULL;</div><div class='del'>-</div><div class='del'>-        if (!frame || !frame-&gt;local || !this) {</div><div class='del'>-                gf_log ("", GF_LOG_ERROR, "Possible NULL deref");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    int32_t callcnt = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    long cky = 0;</div><div class='add'>+    void *xattr_val = NULL;</div><div class='add'>+    void *xattr_serz = NULL;</div><div class='add'>+    stripe_xattr_sort_t *xattr = NULL;</div><div class='add'>+    dict_t *stripe_xattr = NULL;</div><div class='add'>+</div><div class='add'>+    if (!frame || !frame-&gt;local || !this) {</div><div class='add'>+        gf_log("", GF_LOG_ERROR, "Possible NULL deref");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        cky = (long) cookie;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    cky = (long)cookie;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xsel[0] == '\0') {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Empty xattr in cbk");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;xsel[0] == '\0') {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Empty xattr in cbk");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;frame-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                callcnt = --local-&gt;wind_count;</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        callcnt = --local-&gt;wind_count;</div><div class='ctx'> </div><div class='del'>-                if (!dict || (op_ret &lt; 0))</div><div class='del'>-                        goto out;</div><div class='add'>+        if (!dict || (op_ret &lt; 0))</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;xattr_list)</div><div class='del'>-                        local-&gt;xattr_list = (stripe_xattr_sort_t *)</div><div class='del'>-                                GF_CALLOC (local-&gt;nallocs,</div><div class='del'>-                                           sizeof (stripe_xattr_sort_t),</div><div class='del'>-                                           gf_stripe_mt_xattr_sort_t);</div><div class='add'>+        if (!local-&gt;xattr_list)</div><div class='add'>+            local-&gt;xattr_list = (stripe_xattr_sort_t *)GF_CALLOC(</div><div class='add'>+                local-&gt;nallocs, sizeof(stripe_xattr_sort_t),</div><div class='add'>+                gf_stripe_mt_xattr_sort_t);</div><div class='ctx'> </div><div class='del'>-                if (local-&gt;xattr_list) {</div><div class='del'>-                        xattr = local-&gt;xattr_list + (int32_t) cky;</div><div class='add'>+        if (local-&gt;xattr_list) {</div><div class='add'>+            xattr = local-&gt;xattr_list + (int32_t)cky;</div><div class='ctx'> </div><div class='del'>-                        ret = dict_get_ptr_and_len (dict, local-&gt;xsel,</div><div class='del'>-                                                    &amp;xattr_val,</div><div class='del'>-                                                    &amp;xattr-&gt;xattr_len);</div><div class='del'>-                        if (xattr-&gt;xattr_len == 0)</div><div class='del'>-                                goto out;</div><div class='add'>+            ret = dict_get_ptr_and_len(dict, local-&gt;xsel, &amp;xattr_val,</div><div class='add'>+                                       &amp;xattr-&gt;xattr_len);</div><div class='add'>+            if (xattr-&gt;xattr_len == 0)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-                        xattr-&gt;pos = cky;</div><div class='del'>-                        xattr-&gt;xattr_value = gf_memdup (xattr_val,</div><div class='del'>-                                                        xattr-&gt;xattr_len);</div><div class='add'>+            xattr-&gt;pos = cky;</div><div class='add'>+            xattr-&gt;xattr_value = gf_memdup(xattr_val, xattr-&gt;xattr_len);</div><div class='ctx'> </div><div class='del'>-                        if (xattr-&gt;xattr_value != NULL)</div><div class='del'>-                                local-&gt;xattr_total_len += xattr-&gt;xattr_len + 1;</div><div class='del'>-                }</div><div class='add'>+            if (xattr-&gt;xattr_value != NULL)</div><div class='add'>+                local-&gt;xattr_total_len += xattr-&gt;xattr_len + 1;</div><div class='ctx'>         }</div><div class='del'>- out:</div><div class='del'>-        UNLOCK (&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (!callcnt) {</div><div class='del'>-                if (!local-&gt;xattr_total_len)</div><div class='del'>-                        goto unwind;</div><div class='del'>-</div><div class='del'>-                stripe_xattr = dict_new ();</div><div class='del'>-                if (!stripe_xattr)</div><div class='del'>-                        goto unwind;</div><div class='del'>-</div><div class='del'>-                /* select filler based on -&gt;xsel */</div><div class='del'>-                if (XATTR_IS_PATHINFO (local-&gt;xsel))</div><div class='del'>-                        ret = stripe_fill_pathinfo_xattr (this, local,</div><div class='del'>-                                                          (char **)&amp;xattr_serz);</div><div class='del'>-                else if (XATTR_IS_LOCKINFO (local-&gt;xsel)) {</div><div class='del'>-                        ret = stripe_fill_lockinfo_xattr (this, local,</div><div class='del'>-                                                          &amp;xattr_serz);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Unknown xattr in xattr request");</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (!ret) {</div><div class='del'>-                        ret = dict_set_dynptr (stripe_xattr, local-&gt;xsel,</div><div class='del'>-                                               xattr_serz,</div><div class='del'>-                                               local-&gt;xattr_total_len);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Can't set %s key in dict",</div><div class='del'>-                                        local-&gt;xsel);</div><div class='del'>-                }</div><div class='add'>+    if (!callcnt) {</div><div class='add'>+        if (!local-&gt;xattr_total_len)</div><div class='add'>+            goto unwind;</div><div class='add'>+</div><div class='add'>+        stripe_xattr = dict_new();</div><div class='add'>+        if (!stripe_xattr)</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-        unwind:</div><div class='del'>-                /*</div><div class='del'>-                 * Among other things, STRIPE_STACK_UNWIND will free "local"</div><div class='del'>-                 * for us.  That means we can't dereference it afterward.</div><div class='del'>-                 * Fortunately, the actual result is in stripe_xattr now, so we</div><div class='del'>-                 * can simply clean up before unwinding.</div><div class='del'>-                 */</div><div class='del'>-                ret = stripe_free_xattr_str (local);</div><div class='del'>-                GF_FREE (local-&gt;xattr_list);</div><div class='del'>-                local-&gt;xattr_list = NULL;</div><div class='del'>-</div><div class='del'>-                STRIPE_STACK_UNWIND (getxattr, frame, op_ret, op_errno,</div><div class='del'>-                                     stripe_xattr, NULL);</div><div class='del'>-</div><div class='del'>-                if (stripe_xattr)</div><div class='del'>-                        dict_unref (stripe_xattr);</div><div class='add'>+        /* select filler based on -&gt;xsel */</div><div class='add'>+        if (XATTR_IS_PATHINFO(local-&gt;xsel))</div><div class='add'>+            ret = stripe_fill_pathinfo_xattr(this, local, (char **)&amp;xattr_serz);</div><div class='add'>+        else if (XATTR_IS_LOCKINFO(local-&gt;xsel)) {</div><div class='add'>+            ret = stripe_fill_lockinfo_xattr(this, local, &amp;xattr_serz);</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Unknown xattr in xattr request");</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+        if (!ret) {</div><div class='add'>+            ret = dict_set_dynptr(stripe_xattr, local-&gt;xsel, xattr_serz,</div><div class='add'>+                                  local-&gt;xattr_total_len);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "Can't set %s key in dict",</div><div class='add'>+                       local-&gt;xsel);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    unwind:</div><div class='add'>+        /*</div><div class='add'>+         * Among other things, STRIPE_STACK_UNWIND will free "local"</div><div class='add'>+         * for us.  That means we can't dereference it afterward.</div><div class='add'>+         * Fortunately, the actual result is in stripe_xattr now, so we</div><div class='add'>+         * can simply clean up before unwinding.</div><div class='add'>+         */</div><div class='add'>+        ret = stripe_free_xattr_str(local);</div><div class='add'>+        GF_FREE(local-&gt;xattr_list);</div><div class='add'>+        local-&gt;xattr_list = NULL;</div><div class='add'>+</div><div class='add'>+        STRIPE_STACK_UNWIND(getxattr, frame, op_ret, op_errno, stripe_xattr,</div><div class='add'>+                            NULL);</div><div class='add'>+</div><div class='add'>+        if (stripe_xattr)</div><div class='add'>+            dict_unref(stripe_xattr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-stripe_marker_populate_args (call_frame_t *frame, int type, int *gauge,</div><div class='add'>+stripe_marker_populate_args(call_frame_t *frame, int type, int *gauge,</div><div class='ctx'>                             xlator_t **subvols)</div><div class='ctx'> {</div><div class='del'>-        xlator_t         *this  = frame-&gt;this;</div><div class='del'>-        stripe_private_t *priv  = this-&gt;private;</div><div class='del'>-        stripe_local_t   *local = frame-&gt;local;</div><div class='del'>-        int              count  = 0;</div><div class='del'>-</div><div class='del'>-        count = priv-&gt;child_count;</div><div class='del'>-        if (MARKER_XTIME_TYPE == type) {</div><div class='del'>-                if (!IA_FILE_OR_DIR (local-&gt;loc.inode-&gt;ia_type))</div><div class='del'>-                        count = 1;</div><div class='del'>-        }</div><div class='del'>-        memcpy (subvols, priv-&gt;xl_array, sizeof (*subvols) * count);</div><div class='del'>-</div><div class='del'>-        return count;</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    stripe_private_t *priv = this-&gt;private;</div><div class='add'>+    stripe_local_t *local = frame-&gt;local;</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    count = priv-&gt;child_count;</div><div class='add'>+    if (MARKER_XTIME_TYPE == type) {</div><div class='add'>+        if (!IA_FILE_OR_DIR(local-&gt;loc.inode-&gt;ia_type))</div><div class='add'>+            count = 1;</div><div class='add'>+    }</div><div class='add'>+    memcpy(subvols, priv-&gt;xl_array, sizeof(*subvols) * count);</div><div class='add'>+</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+stripe_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t    *local    = NULL;</div><div class='del'>-        xlator_list_t     *trav     = NULL;</div><div class='del'>-        stripe_private_t  *priv     = NULL;</div><div class='del'>-        int32_t            op_errno = EINVAL;</div><div class='del'>-        int                i        = 0;</div><div class='del'>-        int                ret      = 0;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;path, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc-&gt;inode, err);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        trav = this-&gt;children;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;path, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc-&gt;inode, err);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+</div><div class='add'>+    /* Initialization */</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    if (name &amp;&amp; strncmp(name, QUOTA_SIZE_KEY, SLEN(QUOTA_SIZE_KEY)) == 0) {</div><div class='add'>+        local-&gt;wind_count = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-        /* Initialization */</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+        for (i = 0, trav = this-&gt;children; i &lt; priv-&gt;child_count;</div><div class='add'>+             i++, trav = trav-&gt;next) {</div><div class='add'>+            STACK_WIND(frame, stripe_getxattr_cbk, trav-&gt;xlator,</div><div class='add'>+                       trav-&gt;xlator-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='ctx'>         }</div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (name &amp;&amp; strncmp (name, QUOTA_SIZE_KEY,</div><div class='del'>-                             SLEN (QUOTA_SIZE_KEY)) == 0) {</div><div class='del'>-                local-&gt;wind_count = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-                for (i = 0, trav=this-&gt;children; i &lt; priv-&gt;child_count; i++,</div><div class='del'>-                             trav = trav-&gt;next) {</div><div class='del'>-                        STACK_WIND (frame, stripe_getxattr_cbk,</div><div class='del'>-                                    trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;getxattr,</div><div class='del'>-                                    loc, name, xdata);</div><div class='del'>-                }</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='add'>+    if (name &amp;&amp; (XATTR_IS_PATHINFO(name))) {</div><div class='add'>+        if (IA_ISREG(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+            ret = inode_ctx_get(loc-&gt;inode, this, (uint64_t *)&amp;local-&gt;fctx);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "stripe size unavailable from fctx"</div><div class='add'>+                       " relying on pathinfo could lead to"</div><div class='add'>+                       " wrong results");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (name &amp;&amp; (XATTR_IS_PATHINFO (name))) {</div><div class='del'>-                if (IA_ISREG (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-                        ret = inode_ctx_get (loc-&gt;inode, this,</div><div class='del'>-                                             (uint64_t *) &amp;local-&gt;fctx);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "stripe size unavailable from fctx"</div><div class='del'>-                                        " relying on pathinfo could lead to"</div><div class='del'>-                                        " wrong results");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;nallocs = local-&gt;wind_count = priv-&gt;child_count;</div><div class='del'>-                (void) strncpy (local-&gt;xsel, name, strlen (name));</div><div class='del'>-</div><div class='del'>-                /**</div><div class='del'>-                 * for xattrs that need info from all children, fill -&gt;xsel</div><div class='del'>-                 * as above and call the filler function in cbk based on</div><div class='del'>-                 * it</div><div class='del'>-                 */</div><div class='del'>-                for (i = 0, trav = this-&gt;children; i &lt; priv-&gt;child_count; i++,</div><div class='del'>-                     trav = trav-&gt;next) {</div><div class='del'>-                        STACK_WIND_COOKIE (frame, stripe_vgetxattr_cbk,</div><div class='del'>-                                           (void *) (long) i, trav-&gt;xlator,</div><div class='del'>-                                           trav-&gt;xlator-&gt;fops-&gt;getxattr,</div><div class='del'>-                                           loc, name, xdata);</div><div class='del'>-                }</div><div class='add'>+        local-&gt;nallocs = local-&gt;wind_count = priv-&gt;child_count;</div><div class='add'>+        (void)strncpy(local-&gt;xsel, name, strlen(name));</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='add'>+        /**</div><div class='add'>+         * for xattrs that need info from all children, fill -&gt;xsel</div><div class='add'>+         * as above and call the filler function in cbk based on</div><div class='add'>+         * it</div><div class='add'>+         */</div><div class='add'>+        for (i = 0, trav = this-&gt;children; i &lt; priv-&gt;child_count;</div><div class='add'>+             i++, trav = trav-&gt;next) {</div><div class='add'>+            STACK_WIND_COOKIE(frame, stripe_vgetxattr_cbk, (void *)(long)i,</div><div class='add'>+                              trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;getxattr, loc,</div><div class='add'>+                              name, xdata);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (cluster_handle_marker_getxattr (frame, loc, name, priv-&gt;vol_uuid,</div><div class='del'>-                                            stripe_getxattr_unwind,</div><div class='del'>-                                            stripe_marker_populate_args) == 0)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, stripe_internal_getxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    if (cluster_handle_marker_getxattr(frame, loc, name, priv-&gt;vol_uuid,</div><div class='add'>+                                       stripe_getxattr_unwind,</div><div class='add'>+                                       stripe_marker_populate_args) == 0)</div><div class='ctx'>         return 0;</div><div class='ctx'> </div><div class='add'>+    STACK_WIND(frame, stripe_internal_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='ctx'> err:</div><div class='del'>-        STRIPE_STACK_UNWIND (getxattr, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STRIPE_STACK_UNWIND(getxattr, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-stripe_is_special_xattr (const char *name)</div><div class='add'>+stripe_is_special_xattr(const char *name)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    is_spl = _gf_false;</div><div class='add'>+    gf_boolean_t is_spl = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!name) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!name) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!strncmp (name, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                      SLEN (GF_XATTR_LOCKINFO_KEY))</div><div class='del'>-            || XATTR_IS_PATHINFO (name))</div><div class='del'>-                is_spl = _gf_true;</div><div class='add'>+    if (!strncmp(name, GF_XATTR_LOCKINFO_KEY, SLEN(GF_XATTR_LOCKINFO_KEY)) ||</div><div class='add'>+        XATTR_IS_PATHINFO(name))</div><div class='add'>+        is_spl = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return is_spl;</div><div class='add'>+    return is_spl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_fgetxattr_from_everyone (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                                const char *name, dict_t *xdata)</div><div class='add'>+stripe_fgetxattr_from_everyone(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        stripe_local_t   *local = NULL;</div><div class='del'>-        stripe_private_t *priv  = NULL;</div><div class='del'>-        int32_t           ret   = -1, op_errno = 0;</div><div class='del'>-        int               i     = 0;</div><div class='del'>-        xlator_list_t    *trav  = NULL;</div><div class='add'>+    stripe_local_t *local = NULL;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1, op_errno = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret = -1;</div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        strncpy (local-&gt;xsel, name, strlen (name));</div><div class='del'>-        local-&gt;nallocs = local-&gt;wind_count = priv-&gt;child_count;</div><div class='add'>+    strncpy(local-&gt;xsel, name, strlen(name));</div><div class='add'>+    local-&gt;nallocs = local-&gt;wind_count = priv-&gt;child_count;</div><div class='ctx'> </div><div class='del'>-        for (i = 0, trav = this-&gt;children; i &lt; priv-&gt;child_count; i++,</div><div class='del'>-                     trav = trav-&gt;next) {</div><div class='del'>-                STACK_WIND_COOKIE (frame, stripe_vgetxattr_cbk,</div><div class='del'>-                                   (void *) (long) i, trav-&gt;xlator,</div><div class='del'>-                                   trav-&gt;xlator-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                                   fd, name, xdata);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0, trav = this-&gt;children; i &lt; priv-&gt;child_count;</div><div class='add'>+         i++, trav = trav-&gt;next) {</div><div class='add'>+        STACK_WIND_COOKIE(frame, stripe_vgetxattr_cbk, (void *)(long)i,</div><div class='add'>+                          trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;fgetxattr, fd, name,</div><div class='add'>+                          xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return ret;</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stripe_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  const char *name, dict_t *xdata)</div><div class='add'>+stripe_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                 const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (stripe_is_special_xattr (name)) {</div><div class='del'>-                stripe_fgetxattr_from_everyone (frame, this, fd, name, xdata);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (stripe_is_special_xattr(name)) {</div><div class='add'>+        stripe_fgetxattr_from_everyone(frame, this, fd, name, xdata);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, stripe_internal_getxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    STACK_WIND(frame, stripe_internal_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-stripe_priv_dump (xlator_t *this)</div><div class='add'>+stripe_priv_dump(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        char                    key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        stripe_private_t       *priv = NULL;</div><div class='del'>-        int                     ret = -1;</div><div class='del'>-        struct stripe_options  *options = NULL;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int i = 0;</div><div class='add'>+    stripe_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stripe_options *options = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("stripe", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("stripe", this, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = TRY_LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section("xlator.cluster.stripe.%s.priv", this-&gt;name);</div><div class='del'>-        gf_proc_dump_write("child_count","%d", priv-&gt;child_count);</div><div class='add'>+    gf_proc_dump_add_section("xlator.cluster.stripe.%s.priv", this-&gt;name);</div><div class='add'>+    gf_proc_dump_write("child_count", "%d", priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                sprintf (key, "subvolumes[%d]", i);</div><div class='del'>-                gf_proc_dump_write (key, "%s.%s", priv-&gt;xl_array[i]-&gt;type,</div><div class='del'>-                                    priv-&gt;xl_array[i]-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        sprintf(key, "subvolumes[%d]", i);</div><div class='add'>+        gf_proc_dump_write(key, "%s.%s", priv-&gt;xl_array[i]-&gt;type,</div><div class='add'>+                           priv-&gt;xl_array[i]-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        options = priv-&gt;pattern;</div><div class='del'>-        while (options != NULL) {</div><div class='del'>-                gf_proc_dump_write ("path_pattern", "%s", priv-&gt;pattern-&gt;path_pattern);</div><div class='del'>-                gf_proc_dump_write ("options_block_size", "%ul", options-&gt;block_size);</div><div class='add'>+    options = priv-&gt;pattern;</div><div class='add'>+    while (options != NULL) {</div><div class='add'>+        gf_proc_dump_write("path_pattern", "%s", priv-&gt;pattern-&gt;path_pattern);</div><div class='add'>+        gf_proc_dump_write("options_block_size", "%ul", options-&gt;block_size);</div><div class='ctx'> </div><div class='del'>-                options = options-&gt;next;</div><div class='del'>-        }</div><div class='add'>+        options = options-&gt;next;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write ("block_size", "%ul", priv-&gt;block_size);</div><div class='del'>-        gf_proc_dump_write ("nodes-down", "%d", priv-&gt;nodes_down);</div><div class='del'>-        gf_proc_dump_write ("first-child_down", "%d", priv-&gt;first_child_down);</div><div class='del'>-        gf_proc_dump_write ("xattr_supported", "%d", priv-&gt;xattr_supported);</div><div class='add'>+    gf_proc_dump_write("block_size", "%ul", priv-&gt;block_size);</div><div class='add'>+    gf_proc_dump_write("nodes-down", "%d", priv-&gt;nodes_down);</div><div class='add'>+    gf_proc_dump_write("first-child_down", "%d", priv-&gt;first_child_down);</div><div class='add'>+    gf_proc_dump_write("xattr_supported", "%d", priv-&gt;xattr_supported);</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .stat           = stripe_stat,</div><div class='del'>-        .unlink         = stripe_unlink,</div><div class='del'>-        .rename         = stripe_rename,</div><div class='del'>-        .link           = stripe_link,</div><div class='del'>-        .truncate       = stripe_truncate,</div><div class='del'>-        .create         = stripe_create,</div><div class='del'>-        .open           = stripe_open,</div><div class='del'>-        .readv          = stripe_readv,</div><div class='del'>-        .writev         = stripe_writev,</div><div class='del'>-        .statfs         = stripe_statfs,</div><div class='del'>-        .flush          = stripe_flush,</div><div class='del'>-        .fsync          = stripe_fsync,</div><div class='del'>-        .ftruncate      = stripe_ftruncate,</div><div class='del'>-        .fstat          = stripe_fstat,</div><div class='del'>-        .mkdir          = stripe_mkdir,</div><div class='del'>-        .rmdir          = stripe_rmdir,</div><div class='del'>-        .lk             = stripe_lk,</div><div class='del'>-        .opendir        = stripe_opendir,</div><div class='del'>-        .fsyncdir       = stripe_fsyncdir,</div><div class='del'>-        .setattr        = stripe_setattr,</div><div class='del'>-        .fsetattr       = stripe_fsetattr,</div><div class='del'>-        .lookup         = stripe_lookup,</div><div class='del'>-        .mknod          = stripe_mknod,</div><div class='del'>-        .setxattr       = stripe_setxattr,</div><div class='del'>-        .fsetxattr      = stripe_fsetxattr,</div><div class='del'>-        .getxattr       = stripe_getxattr,</div><div class='del'>-        .fgetxattr      = stripe_fgetxattr,</div><div class='del'>-        .removexattr    = stripe_removexattr,</div><div class='del'>-        .fremovexattr   = stripe_fremovexattr,</div><div class='del'>-        .readdirp       = stripe_readdirp,</div><div class='del'>-	.fallocate	= stripe_fallocate,</div><div class='del'>-	.discard	= stripe_discard,</div><div class='del'>-        .zerofill       = stripe_zerofill,</div><div class='del'>-        .seek           = stripe_seek,</div><div class='add'>+    .stat = stripe_stat,</div><div class='add'>+    .unlink = stripe_unlink,</div><div class='add'>+    .rename = stripe_rename,</div><div class='add'>+    .link = stripe_link,</div><div class='add'>+    .truncate = stripe_truncate,</div><div class='add'>+    .create = stripe_create,</div><div class='add'>+    .open = stripe_open,</div><div class='add'>+    .readv = stripe_readv,</div><div class='add'>+    .writev = stripe_writev,</div><div class='add'>+    .statfs = stripe_statfs,</div><div class='add'>+    .flush = stripe_flush,</div><div class='add'>+    .fsync = stripe_fsync,</div><div class='add'>+    .ftruncate = stripe_ftruncate,</div><div class='add'>+    .fstat = stripe_fstat,</div><div class='add'>+    .mkdir = stripe_mkdir,</div><div class='add'>+    .rmdir = stripe_rmdir,</div><div class='add'>+    .lk = stripe_lk,</div><div class='add'>+    .opendir = stripe_opendir,</div><div class='add'>+    .fsyncdir = stripe_fsyncdir,</div><div class='add'>+    .setattr = stripe_setattr,</div><div class='add'>+    .fsetattr = stripe_fsetattr,</div><div class='add'>+    .lookup = stripe_lookup,</div><div class='add'>+    .mknod = stripe_mknod,</div><div class='add'>+    .setxattr = stripe_setxattr,</div><div class='add'>+    .fsetxattr = stripe_fsetxattr,</div><div class='add'>+    .getxattr = stripe_getxattr,</div><div class='add'>+    .fgetxattr = stripe_fgetxattr,</div><div class='add'>+    .removexattr = stripe_removexattr,</div><div class='add'>+    .fremovexattr = stripe_fremovexattr,</div><div class='add'>+    .readdirp = stripe_readdirp,</div><div class='add'>+    .fallocate = stripe_fallocate,</div><div class='add'>+    .discard = stripe_discard,</div><div class='add'>+    .zerofill = stripe_zerofill,</div><div class='add'>+    .seek = stripe_seek,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .release = stripe_release,</div><div class='del'>-        .forget  = stripe_forget,</div><div class='add'>+    .release = stripe_release,</div><div class='add'>+    .forget = stripe_forget,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv = stripe_priv_dump,</div><div class='add'>+    .priv = stripe_priv_dump,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"block-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_SIZE_LIST,</div><div class='del'>-          .default_value = "128KB",</div><div class='del'>-          .min = STRIPE_MIN_BLOCK_SIZE,</div><div class='del'>-          .description = "Size of the stripe unit that would be read "</div><div class='del'>-          "from or written to the striped servers.",</div><div class='del'>-          .op_version = { 1 },</div><div class='del'>-          .tags = { "stripe" },</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"use-xattr"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "true",</div><div class='del'>-          .description = "handle the stripe without the xattr",</div><div class='del'>-          .tags = { "stripe", "dev-only" },</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT,</div><div class='del'>-        },</div><div class='del'>-	{ .key = {"coalesce"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-	  .default_value = "true",</div><div class='del'>-	  .description = "Enable/Disable coalesce mode to flatten striped "</div><div class='del'>-          "files as stored on the server (i.e., eliminate holes "</div><div class='del'>-          "caused by the traditional format).",</div><div class='del'>-          .op_version = { 1 },</div><div class='del'>-          .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = { "stripe" },</div><div class='del'>-	},</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {</div><div class='add'>+        .key = {"block-size"},</div><div class='add'>+        .type = GF_OPTION_TYPE_SIZE_LIST,</div><div class='add'>+        .default_value = "128KB",</div><div class='add'>+        .min = STRIPE_MIN_BLOCK_SIZE,</div><div class='add'>+        .description = "Size of the stripe unit that would be read "</div><div class='add'>+                       "from or written to the striped servers.",</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .tags = {"stripe"},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"use-xattr"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "true",</div><div class='add'>+        .description = "handle the stripe without the xattr",</div><div class='add'>+        .tags = {"stripe", "dev-only"},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT,</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"coalesce"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "true",</div><div class='add'>+        .description = "Enable/Disable coalesce mode to flatten striped "</div><div class='add'>+                       "files as stored on the server (i.e., eliminate holes "</div><div class='add'>+                       "caused by the traditional format).",</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"stripe"},</div><div class='add'>+    },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/debug/delay-gen/src/delay-gen.c b/xlators/debug/delay-gen/src/delay-gen.c<br/>index 849ebeaabcd..a2d02527f23 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/debug/delay-gen/src/delay-gen.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/debug/delay-gen/src/delay-gen.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/debug/delay-gen/src/delay-gen.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/delay-gen/src/delay-gen.c</a></div><div class='hunk'>@@ -8,741 +8,675 @@</div><div class='ctx'>  *  cases as published by the Free Software Foundation.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> #include "delay-gen.h"</div><div class='ctx'> </div><div class='del'>-#define DELAY_GRANULARITY     (1 &lt;&lt; 20)</div><div class='add'>+#define DELAY_GRANULARITY (1 &lt;&lt; 20)</div><div class='ctx'> </div><div class='ctx'> #define DG_FOP(fop, name, frame, this, args...)                                \</div><div class='del'>-        do {                                                                   \</div><div class='del'>-                delay_gen (this, fop);                                         \</div><div class='del'>-                default_##name (frame, this, args);                            \</div><div class='del'>-        } while (0)</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        delay_gen(this, fop);                                                  \</div><div class='add'>+        default_##name(frame, this, args);                                     \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-delay_gen (xlator_t *this, int fop)</div><div class='add'>+delay_gen(xlator_t *this, int fop)</div><div class='ctx'> {</div><div class='del'>-        dg_t             *dg = this-&gt;private;</div><div class='add'>+    dg_t *dg = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!dg-&gt;enable[fop] || !dg-&gt;delay_ppm)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!dg-&gt;enable[fop] || !dg-&gt;delay_ppm)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if ((rand () % DELAY_GRANULARITY) &lt; dg-&gt;delay_ppm)</div><div class='del'>-                usleep (dg-&gt;delay_duration);</div><div class='add'>+    if ((rand() % DELAY_GRANULARITY) &lt; dg-&gt;delay_ppm)</div><div class='add'>+        usleep(dg-&gt;delay_duration);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+dg_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_RENAME, rename, frame, this,  oldloc,  newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_RENAME, rename, frame, this, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+dg_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_IPC, ipc, frame, this, op, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_IPC, ipc, frame, this, op, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_setactivelk (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+dg_setactivelk(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               lock_migration_info_t *locklist, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_SETACTIVELK, setactivelk, frame, this, loc,</div><div class='del'>-                locklist, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_SETACTIVELK, setactivelk, frame, this, loc, locklist, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+dg_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FLUSH, flush, frame, this, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FLUSH, flush, frame, this, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-            off_t off, dict_t *xdata)</div><div class='add'>+dg_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+           off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_READDIR, readdir, frame, this,  fd, size, off, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_READDIR, readdir, frame, this, fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='del'>-             int32_t flags, dict_t *xdata)</div><div class='add'>+dg_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+            int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_SETXATTR, setxattr, frame, this, loc, dict, flags,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_SETXATTR, setxattr, frame, this, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-          dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+dg_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_MKNOD, mknod, frame, this, loc, mode, rdev, umask,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_MKNOD, mknod, frame, this, loc, mode, rdev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-              int32_t flags, dict_t *xdata)</div><div class='add'>+dg_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+             int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FSETXATTR, fsetxattr, frame, this, fd, dict, flags,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FSETXATTR, fsetxattr, frame, this, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-          off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+dg_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+         off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_READ, readv, frame, this, fd, size, offset, flags,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_READ, readv, frame, this, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-            loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+dg_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_INODELK, inodelk, frame, this, volume, loc, cmd, lock,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_INODELK, inodelk, frame, this, volume, loc, cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 const char *name, dict_t *xdata)</div><div class='add'>+dg_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FREMOVEXATTR, fremovexattr, frame, this, fd, name,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FREMOVEXATTR, fremovexattr, frame, this, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-         fd_t *fd, dict_t *xdata)</div><div class='add'>+dg_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+        fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_OPEN, open, frame, this, loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_OPEN, open, frame, this, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+dg_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+           gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_XATTROP, xattrop, frame, this, loc, flags, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_XATTROP, xattrop, frame, this, loc, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_entrylk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-            loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='del'>-            entrylk_type type, dict_t *xdata)</div><div class='add'>+dg_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_ENTRYLK, entrylk, frame, this, volume,</div><div class='del'>-                loc, basename, cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_ENTRYLK, entrylk, frame, this, volume, loc, basename, cmd,</div><div class='add'>+           type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_getactivelk (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+dg_getactivelk(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_GETACTIVELK, getactivelk, frame, this, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_GETACTIVELK, getactivelk, frame, this, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-             fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+dg_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+            int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FINODELK, finodelk, frame, this, volume, fd, cmd, lock,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FINODELK, finodelk, frame, this, volume, fd, cmd, lock,</div><div class='add'>+           xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-           mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+dg_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+          mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_CREATE, create, frame, this, loc, flags, mode, umask, fd,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_CREATE, create, frame, this, loc, flags, mode, umask, fd,</div><div class='add'>+           xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-            size_t len, dict_t *xdata)</div><div class='add'>+dg_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+           size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_DISCARD, discard, frame, this, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_DISCARD, discard, frame, this, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-          mode_t umask, dict_t *xdata)</div><div class='add'>+dg_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_MKDIR, mkdir, frame, this, loc, mode, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_MKDIR, mkdir, frame, this, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='del'>-       struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+dg_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+      struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_LK, lk, frame, this, fd, cmd, lock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_LK, lk, frame, this, fd, cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-           struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='del'>-           struct iobref *iobref, dict_t *xdata)</div><div class='add'>+dg_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+          int32_t count, off_t off, uint32_t flags, struct iobref *iobref,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_WRITE, writev, frame, this, fd,</div><div class='del'>-                vector, count, off, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_WRITE, writev, frame, this, fd, vector, count, off, flags,</div><div class='add'>+           iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+dg_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_ACCESS, access, frame, this, loc, mask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_ACCESS, access, frame, this, loc, mask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+dg_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_LOOKUP, lookup, frame, this, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_LOOKUP, lookup, frame, this, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-          int32_t flags, dict_t *xdata)</div><div class='add'>+dg_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_RMDIR, rmdir, frame, this, loc, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_RMDIR, rmdir, frame, this, loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t keep_size,</div><div class='del'>-              off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+dg_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t keep_size,</div><div class='add'>+             off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FALLOCATE, fallocate, frame, this, fd, keep_size, offset,</div><div class='del'>-                len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FALLOCATE, fallocate, frame, this, fd, keep_size, offset, len,</div><div class='add'>+           xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+dg_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FSTAT, fstat, frame, this, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FSTAT, fstat, frame, this, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_lease (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-          struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+dg_lease(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+         struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_LEASE, lease, frame, this, loc, lease, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_LEASE, lease, frame, this, loc, lease, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+dg_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_STAT, stat, frame, this, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_STAT, stat, frame, this, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+dg_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_TRUNCATE, truncate, frame, this, loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_TRUNCATE, truncate, frame, this, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             const char *name, dict_t *xdata)</div><div class='add'>+dg_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_GETXATTR, getxattr, frame, this, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_GETXATTR, getxattr, frame, this, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-            loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+dg_symlink(call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+           loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_SYMLINK, symlink, frame, this, linkpath, loc, umask,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_SYMLINK, symlink, frame, this, linkpath, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-             off_t len, dict_t *xdata)</div><div class='add'>+dg_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+            off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_ZEROFILL, zerofill, frame, this, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_ZEROFILL, zerofill, frame, this, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+dg_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FSYNCDIR, fsyncdir, frame, this, fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FSYNCDIR, fsyncdir, frame, this, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+dg_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FGETXATTR, fgetxattr, frame, this, fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FGETXATTR, fgetxattr, frame, this, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-             off_t off, dict_t *xdata)</div><div class='add'>+dg_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_READDIRP, readdirp, frame, this, fd, size, off,  xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_READDIRP, readdirp, frame, this, fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-         dict_t *xdata)</div><div class='add'>+dg_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_LINK, link, frame, this, oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_LINK, link, frame, this, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+dg_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+            gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FXATTROP, fxattrop, frame, this, fd, flags, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FXATTROP, fxattrop, frame, this, fd, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+dg_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FTRUNCATE, ftruncate, frame, this, fd, offset,  xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FTRUNCATE, ftruncate, frame, this, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-              int32_t len, dict_t *xdata)</div><div class='add'>+dg_rchecksum(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_RCHECKSUM, rchecksum, frame, this, fd, offset, len,</div><div class='del'>-                xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_RCHECKSUM, rchecksum, frame, this, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+dg_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_UNLINK, unlink, frame, this, loc, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_UNLINK, unlink, frame, this, loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-             fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='del'>-             entrylk_type type, dict_t *xdata)</div><div class='add'>+dg_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+            const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FENTRYLK, fentrylk, frame, this, volume,  fd, basename,</div><div class='del'>-                cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FENTRYLK, fentrylk, frame, this, volume, fd, basename, cmd,</div><div class='add'>+           type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_getspec (call_frame_t *frame, xlator_t *this, const char *key,</div><div class='del'>-            int32_t flags)</div><div class='add'>+dg_getspec(call_frame_t *frame, xlator_t *this, const char *key, int32_t flags)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_GETSPEC, getspec, frame, this, key, flags);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_GETSPEC, getspec, frame, this, key, flags);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+dg_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+           int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_SETATTR, setattr, frame, this, loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_SETATTR, setattr, frame, this, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='del'>-          dict_t *xdata)</div><div class='add'>+dg_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FSYNC, fsync, frame, this,  fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FSYNC, fsync, frame, this, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+dg_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_STATFS, statfs, frame, this, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_STATFS, statfs, frame, this, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_seek (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-         gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+dg_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+        gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_SEEK, seek, frame, this, fd, offset, what, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_SEEK, seek, frame, this, fd, offset, what, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+dg_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='add'>+            int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_FSETATTR, fsetattr, frame, this, fd,</div><div class='del'>-                stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_FSETATTR, fsetattr, frame, this, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+dg_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_OPENDIR, opendir, frame, this, loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_OPENDIR, opendir, frame, this, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+dg_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_READLINK, readlink, frame, this, loc, size, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_READLINK, readlink, frame, this, loc, size, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-dg_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                const char *name, dict_t *xdata)</div><div class='add'>+dg_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        DG_FOP (GF_FOP_REMOVEXATTR, removexattr, frame, this, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    DG_FOP(GF_FOP_REMOVEXATTR, removexattr, frame, this, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+dg_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_release (xlator_t *this, fd_t *fd)</div><div class='add'>+dg_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dg_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+dg_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-delay_gen_parse_fill_fops (dg_t *dg, char *enable_fops)</div><div class='del'>-{</div><div class='del'>-        char            *op_no_str = NULL;</div><div class='del'>-        int              op_no = -1;</div><div class='del'>-        int              i = 0;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='del'>-        char            *saveptr = NULL;</div><div class='del'>-        char            *dup_enable_fops = NULL;</div><div class='del'>-</div><div class='del'>-        if (strlen (enable_fops) == 0) {</div><div class='del'>-                for (i = GF_FOP_NULL + 1; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='del'>-                        dg-&gt;enable[i] = 1;</div><div class='del'>-        } else {</div><div class='del'>-                dup_enable_fops = gf_strdup (enable_fops);</div><div class='del'>-                if (!dup_enable_fops) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                op_no_str = strtok_r (dup_enable_fops, ",", &amp;saveptr);</div><div class='del'>-                while (op_no_str) {</div><div class='del'>-                        op_no = gf_fop_int (op_no_str);</div><div class='del'>-                        if (op_no == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Wrong option value %s", op_no_str);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                dg-&gt;enable[op_no] = 1;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        op_no_str = strtok_r (NULL, ",", &amp;saveptr);</div><div class='del'>-                }</div><div class='add'>+delay_gen_parse_fill_fops(dg_t *dg, char *enable_fops)</div><div class='add'>+{</div><div class='add'>+    char *op_no_str = NULL;</div><div class='add'>+    int op_no = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    char *dup_enable_fops = NULL;</div><div class='add'>+</div><div class='add'>+    if (strlen(enable_fops) == 0) {</div><div class='add'>+        for (i = GF_FOP_NULL + 1; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='add'>+            dg-&gt;enable[i] = 1;</div><div class='add'>+    } else {</div><div class='add'>+        dup_enable_fops = gf_strdup(enable_fops);</div><div class='add'>+        if (!dup_enable_fops) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        op_no_str = strtok_r(dup_enable_fops, ",", &amp;saveptr);</div><div class='add'>+        while (op_no_str) {</div><div class='add'>+            op_no = gf_fop_int(op_no_str);</div><div class='add'>+            if (op_no == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING, "Wrong option value %s",</div><div class='add'>+                       op_no_str);</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            } else {</div><div class='add'>+                dg-&gt;enable[op_no] = 1;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            op_no_str = strtok_r(NULL, ",", &amp;saveptr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (dup_enable_fops);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(dup_enable_fops);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-delay_gen_set_delay_ppm (dg_t *dg, double percent)</div><div class='add'>+delay_gen_set_delay_ppm(dg_t *dg, double percent)</div><div class='ctx'> {</div><div class='del'>-        double ppm;</div><div class='add'>+    double ppm;</div><div class='ctx'> </div><div class='del'>-        ppm = (percent / 100.0) * (double) DELAY_GRANULARITY;</div><div class='del'>-        dg-&gt;delay_ppm = ppm;</div><div class='add'>+    ppm = (percent / 100.0) * (double)DELAY_GRANULARITY;</div><div class='add'>+    dg-&gt;delay_ppm = ppm;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dg_t            *dg = NULL;</div><div class='del'>-        int32_t          ret = 0;</div><div class='del'>-        double          delay_percent = 0;</div><div class='del'>-        char            *delay_enable_fops = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "delay-gen not configured with one subvolume");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dg_t *dg = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    double delay_percent = 0;</div><div class='add'>+    char *delay_enable_fops = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "delay-gen not configured with one subvolume");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dg = GF_CALLOC (1, sizeof (*dg), gf_delay_gen_mt_dg_t);</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!dg) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dg = GF_CALLOC(1, sizeof(*dg), gf_delay_gen_mt_dg_t);</div><div class='ctx'> </div><div class='add'>+    if (!dg) {</div><div class='ctx'>         ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("delay-percentage", delay_percent, percent, out);</div><div class='del'>-        GF_OPTION_INIT ("enable", delay_enable_fops, str, out);</div><div class='del'>-        GF_OPTION_INIT ("delay-duration", dg-&gt;delay_duration, int32, out);</div><div class='add'>+    ret = -1;</div><div class='ctx'> </div><div class='del'>-        delay_gen_set_delay_ppm (dg, delay_percent);</div><div class='add'>+    GF_OPTION_INIT("delay-percentage", delay_percent, percent, out);</div><div class='add'>+    GF_OPTION_INIT("enable", delay_enable_fops, str, out);</div><div class='add'>+    GF_OPTION_INIT("delay-duration", dg-&gt;delay_duration, int32, out);</div><div class='ctx'> </div><div class='del'>-        ret = delay_gen_parse_fill_fops (dg, delay_enable_fops);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    delay_gen_set_delay_ppm(dg, delay_percent);</div><div class='add'>+</div><div class='add'>+    ret = delay_gen_parse_fill_fops(dg, delay_enable_fops);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = dg;</div><div class='add'>+    this-&gt;private = dg;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_FREE (dg);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_FREE(dg);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (this-&gt;private);</div><div class='add'>+    GF_FREE(this-&gt;private);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_delay_gen_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                        " failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_delay_gen_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               " failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-reconfigure (xlator_t *this, dict_t *dict)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        /*At the moment I don't see any need to implement this. In future</div><div class='del'>-         *if this is needed we can add code here.</div><div class='del'>-         */</div><div class='del'>-        return 0;</div><div class='add'>+    /*At the moment I don't see any need to implement this. In future</div><div class='add'>+     *if this is needed we can add code here.</div><div class='add'>+     */</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        return default_notify (this, event, data);</div><div class='add'>+    return default_notify(this, event, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .rename               = dg_rename,</div><div class='del'>-        .ipc                  = dg_ipc,</div><div class='del'>-        .setactivelk          = dg_setactivelk,</div><div class='del'>-        .flush                = dg_flush,</div><div class='del'>-        .readdir              = dg_readdir,</div><div class='del'>-        .setxattr             = dg_setxattr,</div><div class='del'>-        .mknod                = dg_mknod,</div><div class='del'>-        .fsetxattr            = dg_fsetxattr,</div><div class='del'>-        .readv                = dg_readv,</div><div class='del'>-        .inodelk              = dg_inodelk,</div><div class='del'>-        .fremovexattr         = dg_fremovexattr,</div><div class='del'>-        .open                 = dg_open,</div><div class='del'>-        .xattrop              = dg_xattrop,</div><div class='del'>-        .entrylk              = dg_entrylk,</div><div class='del'>-        .getactivelk          = dg_getactivelk,</div><div class='del'>-        .finodelk             = dg_finodelk,</div><div class='del'>-        .create               = dg_create,</div><div class='del'>-        .discard              = dg_discard,</div><div class='del'>-        .mkdir                = dg_mkdir,</div><div class='del'>-        .lk                   = dg_lk,</div><div class='del'>-        .writev               = dg_writev,</div><div class='del'>-        .access               = dg_access,</div><div class='del'>-        .lookup               = dg_lookup,</div><div class='del'>-        .rmdir                = dg_rmdir,</div><div class='del'>-        .fallocate            = dg_fallocate,</div><div class='del'>-        .fstat                = dg_fstat,</div><div class='del'>-        .lease                = dg_lease,</div><div class='del'>-        .stat                 = dg_stat,</div><div class='del'>-        .truncate             = dg_truncate,</div><div class='del'>-        .getxattr             = dg_getxattr,</div><div class='del'>-        .symlink              = dg_symlink,</div><div class='del'>-        .zerofill             = dg_zerofill,</div><div class='del'>-        .fsyncdir             = dg_fsyncdir,</div><div class='del'>-        .fgetxattr            = dg_fgetxattr,</div><div class='del'>-        .readdirp             = dg_readdirp,</div><div class='del'>-        .link                 = dg_link,</div><div class='del'>-        .fxattrop             = dg_fxattrop,</div><div class='del'>-        .ftruncate            = dg_ftruncate,</div><div class='del'>-        .rchecksum            = dg_rchecksum,</div><div class='del'>-        .unlink               = dg_unlink,</div><div class='del'>-        .fentrylk             = dg_fentrylk,</div><div class='del'>-        .getspec              = dg_getspec,</div><div class='del'>-        .setattr              = dg_setattr,</div><div class='del'>-        .fsync                = dg_fsync,</div><div class='del'>-        .statfs               = dg_statfs,</div><div class='del'>-        .seek                 = dg_seek,</div><div class='del'>-        .fsetattr             = dg_fsetattr,</div><div class='del'>-        .opendir              = dg_opendir,</div><div class='del'>-        .readlink             = dg_readlink,</div><div class='del'>-        .removexattr          = dg_removexattr,</div><div class='add'>+    .rename = dg_rename,</div><div class='add'>+    .ipc = dg_ipc,</div><div class='add'>+    .setactivelk = dg_setactivelk,</div><div class='add'>+    .flush = dg_flush,</div><div class='add'>+    .readdir = dg_readdir,</div><div class='add'>+    .setxattr = dg_setxattr,</div><div class='add'>+    .mknod = dg_mknod,</div><div class='add'>+    .fsetxattr = dg_fsetxattr,</div><div class='add'>+    .readv = dg_readv,</div><div class='add'>+    .inodelk = dg_inodelk,</div><div class='add'>+    .fremovexattr = dg_fremovexattr,</div><div class='add'>+    .open = dg_open,</div><div class='add'>+    .xattrop = dg_xattrop,</div><div class='add'>+    .entrylk = dg_entrylk,</div><div class='add'>+    .getactivelk = dg_getactivelk,</div><div class='add'>+    .finodelk = dg_finodelk,</div><div class='add'>+    .create = dg_create,</div><div class='add'>+    .discard = dg_discard,</div><div class='add'>+    .mkdir = dg_mkdir,</div><div class='add'>+    .lk = dg_lk,</div><div class='add'>+    .writev = dg_writev,</div><div class='add'>+    .access = dg_access,</div><div class='add'>+    .lookup = dg_lookup,</div><div class='add'>+    .rmdir = dg_rmdir,</div><div class='add'>+    .fallocate = dg_fallocate,</div><div class='add'>+    .fstat = dg_fstat,</div><div class='add'>+    .lease = dg_lease,</div><div class='add'>+    .stat = dg_stat,</div><div class='add'>+    .truncate = dg_truncate,</div><div class='add'>+    .getxattr = dg_getxattr,</div><div class='add'>+    .symlink = dg_symlink,</div><div class='add'>+    .zerofill = dg_zerofill,</div><div class='add'>+    .fsyncdir = dg_fsyncdir,</div><div class='add'>+    .fgetxattr = dg_fgetxattr,</div><div class='add'>+    .readdirp = dg_readdirp,</div><div class='add'>+    .link = dg_link,</div><div class='add'>+    .fxattrop = dg_fxattrop,</div><div class='add'>+    .ftruncate = dg_ftruncate,</div><div class='add'>+    .rchecksum = dg_rchecksum,</div><div class='add'>+    .unlink = dg_unlink,</div><div class='add'>+    .fentrylk = dg_fentrylk,</div><div class='add'>+    .getspec = dg_getspec,</div><div class='add'>+    .setattr = dg_setattr,</div><div class='add'>+    .fsync = dg_fsync,</div><div class='add'>+    .statfs = dg_statfs,</div><div class='add'>+    .seek = dg_seek,</div><div class='add'>+    .fsetattr = dg_fsetattr,</div><div class='add'>+    .opendir = dg_opendir,</div><div class='add'>+    .readlink = dg_readlink,</div><div class='add'>+    .removexattr = dg_removexattr,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget               = dg_forget,</div><div class='del'>-        .release              = dg_release,</div><div class='del'>-        .releasedir           = dg_releasedir,</div><div class='add'>+    .forget = dg_forget,</div><div class='add'>+    .release = dg_release,</div><div class='add'>+    .releasedir = dg_releasedir,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"delay-percentage"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT,</div><div class='del'>-          .default_value = "10%",</div><div class='del'>-          .description = "Percentage delay of operations when enabled.",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_13_0},</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags        = {"delay-gen"},</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"delay-duration"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .description = "Delay duration in micro seconds",</div><div class='del'>-          .default_value = "100000",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_13_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags  = {"delay-gen"},</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"enable"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Accepts a string which takes ',' separated fop "</div><div class='del'>-                         "strings to denote which fops are enabled for delay",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_13_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags  = {"delay-gen"},</div><div class='del'>-          .default_value = "",</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {NULL} }</div><div class='del'>-};</div><div class='add'>+    {</div><div class='add'>+        .key = {"delay-percentage"},</div><div class='add'>+        .type = GF_OPTION_TYPE_PERCENT,</div><div class='add'>+        .default_value = "10%",</div><div class='add'>+        .description = "Percentage delay of operations when enabled.",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_13_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"delay-gen"},</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"delay-duration"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .description = "Delay duration in micro seconds",</div><div class='add'>+        .default_value = "100000",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_13_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"delay-gen"},</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"enable"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .description = "Accepts a string which takes ',' separated fop "</div><div class='add'>+                       "strings to denote which fops are enabled for delay",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_13_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"delay-gen"},</div><div class='add'>+        .default_value = "",</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {.key = {NULL}}};</div><div class='head'>diff --git a/xlators/debug/error-gen/src/error-gen.c b/xlators/debug/error-gen/src/error-gen.c<br/>index eeb7b3d0953..c6595b4c0e4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/debug/error-gen/src/error-gen.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/debug/error-gen/src/error-gen.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/debug/error-gen/src/error-gen.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/error-gen/src/error-gen.c</a></div><div class='hunk'>@@ -26,1694 +26,1622 @@</div><div class='ctx'>  * something completely different and this number is irrelevant.  See error_gen</div><div class='ctx'>  * for the legacy code.)</div><div class='ctx'>  */</div><div class='del'>-#define FAILURE_GRANULARITY     (1 &lt;&lt; 20)</div><div class='add'>+#define FAILURE_GRANULARITY (1 &lt;&lt; 20)</div><div class='ctx'> </div><div class='ctx'> sys_error_t error_no_list[] = {</div><div class='del'>-        [GF_FOP_LOOKUP]            = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {ENOENT,ENOTDIR,</div><div class='del'>-                                                 ENAMETOOLONG,EAGAIN}},</div><div class='del'>-        [GF_FOP_STAT]              = { .error_no_count = 7,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,EFAULT,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                 ENOMEM,ENOTDIR}},</div><div class='del'>-        [GF_FOP_READLINK]          = { .error_no_count = 8,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,EINVAL,EIO,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,ENOMEM,</div><div class='del'>-                                                 ENOTDIR}},</div><div class='del'>-        [GF_FOP_MKNOD]             = { .error_no_count = 11,</div><div class='del'>-                                    .error_no = {EACCES,EEXIST,EFAULT,</div><div class='del'>-                                                 EINVAL,ENAMETOOLONG,</div><div class='del'>-                                                 ENOENT,ENOMEM,ENOSPC,</div><div class='del'>-                                                 ENOTDIR,EPERM,EROFS}},</div><div class='del'>-        [GF_FOP_MKDIR]             = { .error_no_count = 10,</div><div class='del'>-                                    .error_no = {EACCES,EEXIST,EFAULT,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                 ENOMEM,ENOSPC,ENOTDIR,</div><div class='del'>-						 EPERM,EROFS}},</div><div class='del'>-        [GF_FOP_UNLINK]            = { .error_no_count = 10,</div><div class='del'>-                                    .error_no = {EACCES,EBUSY,EFAULT,EIO,</div><div class='del'>-                                                 EISDIR,ENAMETOOLONG,</div><div class='del'>-                                                 ENOENT,ENOMEM,ENOTDIR,</div><div class='del'>-                                                 EPERM,EROFS}},</div><div class='del'>-        [GF_FOP_RMDIR]             = { .error_no_count = 8,</div><div class='del'>-                                    .error_no = {EACCES,EBUSY,EFAULT,</div><div class='del'>-                                                 ENOMEM,ENOTDIR,ENOTEMPTY,</div><div class='del'>-                                                 EPERM,EROFS}},</div><div class='del'>-        [GF_FOP_SYMLINK]           = { .error_no_count = 11,</div><div class='del'>-                                    .error_no = {EACCES,EEXIST,EFAULT,EIO,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,ENOMEM,</div><div class='del'>-                                                 ENOSPC,ENOTDIR,EPERM,</div><div class='del'>-                                                 EROFS}},</div><div class='del'>-        [GF_FOP_RENAME]            = { .error_no_count = 13,</div><div class='del'>-                                    .error_no = {EACCES,EBUSY,EFAULT,</div><div class='del'>-                                                 EINVAL,EISDIR,EMLINK,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,ENOMEM,</div><div class='del'>-                                                 ENOSPC,ENOTDIR,EEXIST,</div><div class='del'>-                                                 EXDEV}},</div><div class='del'>-        [GF_FOP_LINK]              = { .error_no_count = 13,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,EEXIST,EIO,</div><div class='del'>-                                                 EMLINK,ENAMETOOLONG,</div><div class='del'>-                                                 ENOENT,ENOMEM,ENOSPC,</div><div class='del'>-                                                 ENOTDIR,EPERM,EROFS,</div><div class='del'>-                                                 EXDEV}},</div><div class='del'>-        [GF_FOP_TRUNCATE]          = { .error_no_count = 10,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,EFBIG,</div><div class='del'>-                                                 EINTR,EINVAL,EIO,EISDIR,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                 EISDIR}},</div><div class='del'>-        [GF_FOP_CREATE]            = {.error_no_count = 10,</div><div class='del'>-                                   .error_no = {EACCES,EEXIST,EFAULT,</div><div class='del'>-                                                EISDIR,EMFILE,ENAMETOOLONG,</div><div class='del'>-                                                ENFILE,ENODEV,ENOENT,</div><div class='del'>-                                                ENODEV}},</div><div class='del'>-        [GF_FOP_OPEN]              = { .error_no_count = 10,</div><div class='del'>-                                    .error_no = {EACCES,EEXIST,EFAULT,</div><div class='del'>-                                                 EISDIR,EMFILE,</div><div class='del'>-                                                 ENAMETOOLONG,ENFILE,</div><div class='del'>-                                                 ENODEV,ENOENT,ENOMEM}},</div><div class='del'>-        [GF_FOP_READ]              = { .error_no_count = 5,</div><div class='del'>-                                    .error_no = {EINVAL,EBADF,EFAULT,EISDIR,</div><div class='del'>-                                                 ENAMETOOLONG}},</div><div class='del'>-        [GF_FOP_WRITE]             = { .error_no_count = 7,</div><div class='del'>-                                    .error_no = {EINVAL,EBADF,EFAULT,EISDIR,</div><div class='del'>-                                                 ENAMETOOLONG,ENOSPC,</div><div class='del'>-						 GF_ERROR_SHORT_WRITE}},</div><div class='del'>-        [GF_FOP_STATFS]            = {.error_no_count = 10,</div><div class='del'>-                                   .error_no = {EACCES,EBADF,EFAULT,EINTR,</div><div class='del'>-                                                EIO,ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                ENOMEM,ENOSYS,ENOTDIR}},</div><div class='del'>-        [GF_FOP_FLUSH]             = { .error_no_count = 5,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,</div><div class='del'>-                                                 ENAMETOOLONG,ENOSYS,</div><div class='del'>-                                                 ENOENT}},</div><div class='del'>-        [GF_FOP_FSYNC]             = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EBADF,EIO,EROFS,EINVAL}},</div><div class='del'>-        [GF_FOP_SETXATTR]          = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,EINTR,</div><div class='del'>-                                                 ENAMETOOLONG}},</div><div class='del'>-        [GF_FOP_GETXATTR]          = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,ENAMETOOLONG,</div><div class='del'>-                                                 EINTR}},</div><div class='del'>-        [GF_FOP_REMOVEXATTR]       = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,ENAMETOOLONG,</div><div class='del'>-                                                 EINTR}},</div><div class='del'>-        [GF_FOP_FSETXATTR]          = { .error_no_count = 4,</div><div class='del'>-                                        .error_no = {EACCES,EBADF,EINTR,</div><div class='del'>-                                                     ENAMETOOLONG}},</div><div class='del'>-        [GF_FOP_FGETXATTR]          = { .error_no_count = 4,</div><div class='del'>-                                        .error_no = {EACCES,EBADF,ENAMETOOLONG,</div><div class='del'>-                                                     EINTR}},</div><div class='del'>-        [GF_FOP_FREMOVEXATTR]       = { .error_no_count = 4,</div><div class='del'>-                                        .error_no = {EACCES,EBADF,ENAMETOOLONG,</div><div class='del'>-                                                     EINTR}},</div><div class='del'>-        [GF_FOP_OPENDIR]           = { .error_no_count = 8,</div><div class='del'>-                                    .error_no = {EACCES,EEXIST,EFAULT,</div><div class='del'>-                                                 EISDIR,EMFILE,</div><div class='del'>-                                                 ENAMETOOLONG,ENFILE,</div><div class='del'>-                                                 ENODEV}},</div><div class='del'>-        [GF_FOP_READDIR]           = { .error_no_count = 5,</div><div class='del'>-                                    .error_no = {EINVAL,EACCES,EBADF,</div><div class='del'>-                                                 EMFILE,ENOENT}},</div><div class='del'>-        [GF_FOP_READDIRP]          = { .error_no_count = 5,</div><div class='del'>-                                    .error_no = {EINVAL,EACCES,EBADF,</div><div class='del'>-                                                 EMFILE,ENOENT}},</div><div class='del'>-        [GF_FOP_FSYNCDIR]          = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EBADF,EIO,EROFS,EINVAL}},</div><div class='del'>-        [GF_FOP_ACCESS]            = { .error_no_count = 8,</div><div class='del'>-                                    .error_no = {EACCES,ENAMETOOLONG,</div><div class='del'>-                                                 ENOENT,ENOTDIR,EROFS,</div><div class='del'>-                                                 EFAULT,EINVAL,EIO}},</div><div class='del'>-        [GF_FOP_FTRUNCATE]         = { .error_no_count = 9,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,EFBIG,</div><div class='del'>-                                                 EINTR,EINVAL,EIO,EISDIR,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT}},</div><div class='del'>-        [GF_FOP_FSTAT]             = { .error_no_count = 7,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,EFAULT,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                 ENOMEM,ENOTDIR}},</div><div class='del'>-        [GF_FOP_LK]                = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,ENOENT,</div><div class='del'>-                                                 EINTR}},</div><div class='del'>-        [GF_FOP_XATTROP]           = { .error_no_count = 5,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,</div><div class='del'>-                                                 ENAMETOOLONG,ENOSYS,</div><div class='del'>-                                                 ENOENT}},</div><div class='del'>-        [GF_FOP_FXATTROP]          = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EBADF,EIO,EROFS,EINVAL}},</div><div class='del'>-        [GF_FOP_INODELK]           = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,EINTR,</div><div class='del'>-                                                 ENAMETOOLONG}},</div><div class='del'>-        [GF_FOP_FINODELK]          = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,EINTR,</div><div class='del'>-                                                 ENAMETOOLONG}},</div><div class='del'>-        [GF_FOP_ENTRYLK]           = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,</div><div class='del'>-                                                 ENAMETOOLONG,EINTR}},</div><div class='del'>-        [GF_FOP_FENTRYLK]          = { .error_no_count = 10,</div><div class='del'>-                                    .error_no = {EACCES,EEXIST,EFAULT,</div><div class='del'>-                                                 EISDIR,EMFILE,</div><div class='del'>-                                                 ENAMETOOLONG,ENFILE,</div><div class='del'>-                                                 ENODEV,ENOENT,ENOMEM}},</div><div class='del'>-        [GF_FOP_SETATTR]           = {.error_no_count = 11,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,EIO,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                 ENOMEM,ENOTDIR,EPERM,</div><div class='del'>-                                                 EROFS,EBADF,EIO}},</div><div class='del'>-        [GF_FOP_FSETATTR]          = { .error_no_count = 11,</div><div class='del'>-                                    .error_no = {EACCES,EFAULT,EIO,</div><div class='del'>-                                                 ENAMETOOLONG,ENOENT,</div><div class='del'>-                                                 ENOMEM,ENOTDIR,EPERM,</div><div class='del'>-                                                 EROFS,EBADF,EIO}},</div><div class='del'>-        [GF_FOP_GETSPEC]           = { .error_no_count = 4,</div><div class='del'>-                                    .error_no = {EACCES,EBADF,ENAMETOOLONG,</div><div class='del'>-                                                 EINTR}}</div><div class='del'>-};</div><div class='add'>+    [GF_FOP_LOOKUP] = {.error_no_count = 4,</div><div class='add'>+                       .error_no = {ENOENT, ENOTDIR, ENAMETOOLONG, EAGAIN}},</div><div class='add'>+    [GF_FOP_STAT] = {.error_no_count = 7,</div><div class='add'>+                     .error_no = {EACCES, EBADF, EFAULT, ENAMETOOLONG, ENOENT,</div><div class='add'>+                                  ENOMEM, ENOTDIR}},</div><div class='add'>+    [GF_FOP_READLINK] = {.error_no_count = 8,</div><div class='add'>+                         .error_no = {EACCES, EFAULT, EINVAL, EIO, ENAMETOOLONG,</div><div class='add'>+                                      ENOENT, ENOMEM, ENOTDIR}},</div><div class='add'>+    [GF_FOP_MKNOD] = {.error_no_count = 11,</div><div class='add'>+                      .error_no = {EACCES, EEXIST, EFAULT, EINVAL, ENAMETOOLONG,</div><div class='add'>+                                   ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM,</div><div class='add'>+                                   EROFS}},</div><div class='add'>+    [GF_FOP_MKDIR] = {.error_no_count = 10,</div><div class='add'>+                      .error_no = {EACCES, EEXIST, EFAULT, ENAMETOOLONG, ENOENT,</div><div class='add'>+                                   ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS}},</div><div class='add'>+    [GF_FOP_UNLINK] = {.error_no_count = 10,</div><div class='add'>+                       .error_no = {EACCES, EBUSY, EFAULT, EIO, EISDIR,</div><div class='add'>+                                    ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR,</div><div class='add'>+                                    EPERM, EROFS}},</div><div class='add'>+    [GF_FOP_RMDIR] = {.error_no_count = 8,</div><div class='add'>+                      .error_no = {EACCES, EBUSY, EFAULT, ENOMEM, ENOTDIR,</div><div class='add'>+                                   ENOTEMPTY, EPERM, EROFS}},</div><div class='add'>+    [GF_FOP_SYMLINK] = {.error_no_count = 11,</div><div class='add'>+                        .error_no = {EACCES, EEXIST, EFAULT, EIO, ENAMETOOLONG,</div><div class='add'>+                                     ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM,</div><div class='add'>+                                     EROFS}},</div><div class='add'>+    [GF_FOP_RENAME] = {.error_no_count = 13,</div><div class='add'>+                       .error_no = {EACCES, EBUSY, EFAULT, EINVAL, EISDIR,</div><div class='add'>+                                    EMLINK, ENAMETOOLONG, ENOENT, ENOMEM,</div><div class='add'>+                                    ENOSPC, ENOTDIR, EEXIST, EXDEV}},</div><div class='add'>+    [GF_FOP_LINK] = {.error_no_count = 13,</div><div class='add'>+                     .error_no = {EACCES, EFAULT, EEXIST, EIO, EMLINK,</div><div class='add'>+                                  ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR,</div><div class='add'>+                                  EPERM, EROFS, EXDEV}},</div><div class='add'>+    [GF_FOP_TRUNCATE] = {.error_no_count = 10,</div><div class='add'>+                         .error_no = {EACCES, EFAULT, EFBIG, EINTR, EINVAL, EIO,</div><div class='add'>+                                      EISDIR, ENAMETOOLONG, ENOENT, EISDIR}},</div><div class='add'>+    [GF_FOP_CREATE] = {.error_no_count = 10,</div><div class='add'>+                       .error_no = {EACCES, EEXIST, EFAULT, EISDIR, EMFILE,</div><div class='add'>+                                    ENAMETOOLONG, ENFILE, ENODEV, ENOENT,</div><div class='add'>+                                    ENODEV}},</div><div class='add'>+    [GF_FOP_OPEN] = {.error_no_count = 10,</div><div class='add'>+                     .error_no = {EACCES, EEXIST, EFAULT, EISDIR, EMFILE,</div><div class='add'>+                                  ENAMETOOLONG, ENFILE, ENODEV, ENOENT,</div><div class='add'>+                                  ENOMEM}},</div><div class='add'>+    [GF_FOP_READ] = {.error_no_count = 5,</div><div class='add'>+                     .error_no = {EINVAL, EBADF, EFAULT, EISDIR, ENAMETOOLONG}},</div><div class='add'>+    [GF_FOP_WRITE] = {.error_no_count = 7,</div><div class='add'>+                      .error_no = {EINVAL, EBADF, EFAULT, EISDIR, ENAMETOOLONG,</div><div class='add'>+                                   ENOSPC, GF_ERROR_SHORT_WRITE}},</div><div class='add'>+    [GF_FOP_STATFS] = {.error_no_count = 10,</div><div class='add'>+                       .error_no = {EACCES, EBADF, EFAULT, EINTR, EIO,</div><div class='add'>+                                    ENAMETOOLONG, ENOENT, ENOMEM, ENOSYS,</div><div class='add'>+                                    ENOTDIR}},</div><div class='add'>+    [GF_FOP_FLUSH] = {.error_no_count = 5,</div><div class='add'>+                      .error_no = {EACCES, EFAULT, ENAMETOOLONG, ENOSYS,</div><div class='add'>+                                   ENOENT}},</div><div class='add'>+    [GF_FOP_FSYNC] = {.error_no_count = 4,</div><div class='add'>+                      .error_no = {EBADF, EIO, EROFS, EINVAL}},</div><div class='add'>+    [GF_FOP_SETXATTR] = {.error_no_count = 4,</div><div class='add'>+                         .error_no = {EACCES, EBADF, EINTR, ENAMETOOLONG}},</div><div class='add'>+    [GF_FOP_GETXATTR] = {.error_no_count = 4,</div><div class='add'>+                         .error_no = {EACCES, EBADF, ENAMETOOLONG, EINTR}},</div><div class='add'>+    [GF_FOP_REMOVEXATTR] = {.error_no_count = 4,</div><div class='add'>+                            .error_no = {EACCES, EBADF, ENAMETOOLONG, EINTR}},</div><div class='add'>+    [GF_FOP_FSETXATTR] = {.error_no_count = 4,</div><div class='add'>+                          .error_no = {EACCES, EBADF, EINTR, ENAMETOOLONG}},</div><div class='add'>+    [GF_FOP_FGETXATTR] = {.error_no_count = 4,</div><div class='add'>+                          .error_no = {EACCES, EBADF, ENAMETOOLONG, EINTR}},</div><div class='add'>+    [GF_FOP_FREMOVEXATTR] = {.error_no_count = 4,</div><div class='add'>+                             .error_no = {EACCES, EBADF, ENAMETOOLONG, EINTR}},</div><div class='add'>+    [GF_FOP_OPENDIR] = {.error_no_count = 8,</div><div class='add'>+                        .error_no = {EACCES, EEXIST, EFAULT, EISDIR, EMFILE,</div><div class='add'>+                                     ENAMETOOLONG, ENFILE, ENODEV}},</div><div class='add'>+    [GF_FOP_READDIR] = {.error_no_count = 5,</div><div class='add'>+                        .error_no = {EINVAL, EACCES, EBADF, EMFILE, ENOENT}},</div><div class='add'>+    [GF_FOP_READDIRP] = {.error_no_count = 5,</div><div class='add'>+                         .error_no = {EINVAL, EACCES, EBADF, EMFILE, ENOENT}},</div><div class='add'>+    [GF_FOP_FSYNCDIR] = {.error_no_count = 4,</div><div class='add'>+                         .error_no = {EBADF, EIO, EROFS, EINVAL}},</div><div class='add'>+    [GF_FOP_ACCESS] = {.error_no_count = 8,</div><div class='add'>+                       .error_no = {EACCES, ENAMETOOLONG, ENOENT, ENOTDIR,</div><div class='add'>+                                    EROFS, EFAULT, EINVAL, EIO}},</div><div class='add'>+    [GF_FOP_FTRUNCATE] = {.error_no_count = 9,</div><div class='add'>+                          .error_no = {EACCES, EFAULT, EFBIG, EINTR, EINVAL,</div><div class='add'>+                                       EIO, EISDIR, ENAMETOOLONG, ENOENT}},</div><div class='add'>+    [GF_FOP_FSTAT] = {.error_no_count = 7,</div><div class='add'>+                      .error_no = {EACCES, EBADF, EFAULT, ENAMETOOLONG, ENOENT,</div><div class='add'>+                                   ENOMEM, ENOTDIR}},</div><div class='add'>+    [GF_FOP_LK] = {.error_no_count = 4,</div><div class='add'>+                   .error_no = {EACCES, EFAULT, ENOENT, EINTR}},</div><div class='add'>+    [GF_FOP_XATTROP] = {.error_no_count = 5,</div><div class='add'>+                        .error_no = {EACCES, EFAULT, ENAMETOOLONG, ENOSYS,</div><div class='add'>+                                     ENOENT}},</div><div class='add'>+    [GF_FOP_FXATTROP] = {.error_no_count = 4,</div><div class='add'>+                         .error_no = {EBADF, EIO, EROFS, EINVAL}},</div><div class='add'>+    [GF_FOP_INODELK] = {.error_no_count = 4,</div><div class='add'>+                        .error_no = {EACCES, EBADF, EINTR, ENAMETOOLONG}},</div><div class='add'>+    [GF_FOP_FINODELK] = {.error_no_count = 4,</div><div class='add'>+                         .error_no = {EACCES, EBADF, EINTR, ENAMETOOLONG}},</div><div class='add'>+    [GF_FOP_ENTRYLK] = {.error_no_count = 4,</div><div class='add'>+                        .error_no = {EACCES, EBADF, ENAMETOOLONG, EINTR}},</div><div class='add'>+    [GF_FOP_FENTRYLK] = {.error_no_count = 10,</div><div class='add'>+                         .error_no = {EACCES, EEXIST, EFAULT, EISDIR, EMFILE,</div><div class='add'>+                                      ENAMETOOLONG, ENFILE, ENODEV, ENOENT,</div><div class='add'>+                                      ENOMEM}},</div><div class='add'>+    [GF_FOP_SETATTR] = {.error_no_count = 11,</div><div class='add'>+                        .error_no = {EACCES, EFAULT, EIO, ENAMETOOLONG, ENOENT,</div><div class='add'>+                                     ENOMEM, ENOTDIR, EPERM, EROFS, EBADF,</div><div class='add'>+                                     EIO}},</div><div class='add'>+    [GF_FOP_FSETATTR] = {.error_no_count = 11,</div><div class='add'>+                         .error_no = {EACCES, EFAULT, EIO, ENAMETOOLONG, ENOENT,</div><div class='add'>+                                      ENOMEM, ENOTDIR, EPERM, EROFS, EBADF,</div><div class='add'>+                                      EIO}},</div><div class='add'>+    [GF_FOP_GETSPEC] = {.error_no_count = 4,</div><div class='add'>+                        .error_no = {EACCES, EBADF, ENAMETOOLONG, EINTR}}};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-generate_rand_no (int op_no)</div><div class='add'>+generate_rand_no(int op_no)</div><div class='ctx'> {</div><div class='del'>-        int             rand_no = 0;</div><div class='del'>-        int             error_no_list_size = 0;</div><div class='add'>+    int rand_no = 0;</div><div class='add'>+    int error_no_list_size = 0;</div><div class='ctx'> </div><div class='del'>-        error_no_list_size = sizeof(error_no_list)/sizeof(error_no_list[0]);</div><div class='add'>+    error_no_list_size = sizeof(error_no_list) / sizeof(error_no_list[0]);</div><div class='ctx'> </div><div class='del'>-        if (op_no &lt; error_no_list_size)</div><div class='del'>-                /* coverity[DC.WEAK_CRYPTO] */</div><div class='del'>-                rand_no = rand () % error_no_list[op_no].error_no_count;</div><div class='del'>-        return rand_no;</div><div class='add'>+    if (op_no &lt; error_no_list_size)</div><div class='add'>+        /* coverity[DC.WEAK_CRYPTO] */</div><div class='add'>+        rand_no = rand() % error_no_list[op_no].error_no_count;</div><div class='add'>+    return rand_no;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-conv_errno_to_int (char **error_no)</div><div class='add'>+conv_errno_to_int(char **error_no)</div><div class='ctx'> {</div><div class='del'>-        if (!strcmp ((*error_no), "ENOENT"))</div><div class='del'>-                return ENOENT;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENOTDIR"))</div><div class='del'>-                return ENOTDIR;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENAMETOOLONG"))</div><div class='del'>-                return ENAMETOOLONG;</div><div class='del'>-        else if (!strcmp ((*error_no), "EACCES"))</div><div class='del'>-                return EACCES;</div><div class='del'>-        else if (!strcmp ((*error_no), "EBADF"))</div><div class='del'>-                return EBADF;</div><div class='del'>-        else if (!strcmp ((*error_no), "EFAULT"))</div><div class='del'>-                return EFAULT;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENOMEM"))</div><div class='del'>-                return ENOMEM;</div><div class='del'>-        else if (!strcmp ((*error_no), "EINVAL"))</div><div class='del'>-                return EINVAL;</div><div class='del'>-        else if (!strcmp ((*error_no), "EIO"))</div><div class='del'>-                return EIO;</div><div class='del'>-        else if (!strcmp ((*error_no), "EEXIST"))</div><div class='del'>-                return EEXIST;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENOSPC"))</div><div class='del'>-                return ENOSPC;</div><div class='del'>-        else if (!strcmp ((*error_no), "EPERM"))</div><div class='del'>-                return EPERM;</div><div class='del'>-        else if (!strcmp ((*error_no), "EROFS"))</div><div class='del'>-                return EROFS;</div><div class='del'>-        else if (!strcmp ((*error_no), "EBUSY"))</div><div class='del'>-                return EBUSY;</div><div class='del'>-        else if (!strcmp ((*error_no), "EISDIR"))</div><div class='del'>-                return EISDIR;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENOTEMPTY"))</div><div class='del'>-                return ENOTEMPTY;</div><div class='del'>-        else if (!strcmp ((*error_no), "EMLINK"))</div><div class='del'>-                return EMLINK;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENODEV"))</div><div class='del'>-                return ENODEV;</div><div class='del'>-        else if (!strcmp ((*error_no), "EXDEV"))</div><div class='del'>-                return EXDEV;</div><div class='del'>-        else if (!strcmp ((*error_no), "EMFILE"))</div><div class='del'>-                return EMFILE;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENFILE"))</div><div class='del'>-                return ENFILE;</div><div class='del'>-        else if (!strcmp ((*error_no), "ENOSYS"))</div><div class='del'>-                return ENOSYS;</div><div class='del'>-        else if (!strcmp ((*error_no), "EINTR"))</div><div class='del'>-                return EINTR;</div><div class='del'>-        else if (!strcmp ((*error_no), "EFBIG"))</div><div class='del'>-                return EFBIG;</div><div class='del'>-	else if (!strcmp((*error_no), "GF_ERROR_SHORT_WRITE"))</div><div class='del'>-		return GF_ERROR_SHORT_WRITE;</div><div class='del'>-        else</div><div class='del'>-                return EAGAIN;</div><div class='add'>+    if (!strcmp((*error_no), "ENOENT"))</div><div class='add'>+        return ENOENT;</div><div class='add'>+    else if (!strcmp((*error_no), "ENOTDIR"))</div><div class='add'>+        return ENOTDIR;</div><div class='add'>+    else if (!strcmp((*error_no), "ENAMETOOLONG"))</div><div class='add'>+        return ENAMETOOLONG;</div><div class='add'>+    else if (!strcmp((*error_no), "EACCES"))</div><div class='add'>+        return EACCES;</div><div class='add'>+    else if (!strcmp((*error_no), "EBADF"))</div><div class='add'>+        return EBADF;</div><div class='add'>+    else if (!strcmp((*error_no), "EFAULT"))</div><div class='add'>+        return EFAULT;</div><div class='add'>+    else if (!strcmp((*error_no), "ENOMEM"))</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    else if (!strcmp((*error_no), "EINVAL"))</div><div class='add'>+        return EINVAL;</div><div class='add'>+    else if (!strcmp((*error_no), "EIO"))</div><div class='add'>+        return EIO;</div><div class='add'>+    else if (!strcmp((*error_no), "EEXIST"))</div><div class='add'>+        return EEXIST;</div><div class='add'>+    else if (!strcmp((*error_no), "ENOSPC"))</div><div class='add'>+        return ENOSPC;</div><div class='add'>+    else if (!strcmp((*error_no), "EPERM"))</div><div class='add'>+        return EPERM;</div><div class='add'>+    else if (!strcmp((*error_no), "EROFS"))</div><div class='add'>+        return EROFS;</div><div class='add'>+    else if (!strcmp((*error_no), "EBUSY"))</div><div class='add'>+        return EBUSY;</div><div class='add'>+    else if (!strcmp((*error_no), "EISDIR"))</div><div class='add'>+        return EISDIR;</div><div class='add'>+    else if (!strcmp((*error_no), "ENOTEMPTY"))</div><div class='add'>+        return ENOTEMPTY;</div><div class='add'>+    else if (!strcmp((*error_no), "EMLINK"))</div><div class='add'>+        return EMLINK;</div><div class='add'>+    else if (!strcmp((*error_no), "ENODEV"))</div><div class='add'>+        return ENODEV;</div><div class='add'>+    else if (!strcmp((*error_no), "EXDEV"))</div><div class='add'>+        return EXDEV;</div><div class='add'>+    else if (!strcmp((*error_no), "EMFILE"))</div><div class='add'>+        return EMFILE;</div><div class='add'>+    else if (!strcmp((*error_no), "ENFILE"))</div><div class='add'>+        return ENFILE;</div><div class='add'>+    else if (!strcmp((*error_no), "ENOSYS"))</div><div class='add'>+        return ENOSYS;</div><div class='add'>+    else if (!strcmp((*error_no), "EINTR"))</div><div class='add'>+        return EINTR;</div><div class='add'>+    else if (!strcmp((*error_no), "EFBIG"))</div><div class='add'>+        return EFBIG;</div><div class='add'>+    else if (!strcmp((*error_no), "GF_ERROR_SHORT_WRITE"))</div><div class='add'>+        return GF_ERROR_SHORT_WRITE;</div><div class='add'>+    else</div><div class='add'>+        return EAGAIN;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen (xlator_t *this, int op_no)</div><div class='add'>+error_gen(xlator_t *this, int op_no)</div><div class='ctx'> {</div><div class='del'>-        eg_t             *egp = NULL;</div><div class='del'>-        int              count = 0;</div><div class='del'>-        int              error_no_int = 0;</div><div class='del'>-        int              rand_no = 0;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        gf_boolean_t     should_err = _gf_false;</div><div class='del'>-        int              error_no_list_size = 0;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (egp-&gt;random_failure) {</div><div class='del'>-                /*</div><div class='del'>-                 * I honestly don't know why anyone would use this "feature"</div><div class='del'>-                 * but I'll try to preserve its functionality anyway.  Without</div><div class='del'>-                 * locking twice to update failure_iter_no and egp-&gt;op_count</div><div class='del'>-                 * separately, then not locking at all to update</div><div class='del'>-                 * egp-&gt;failure_iter_no.  That's not needed for compatibility,</div><div class='del'>-                 * and it's abhorrently wrong.  I have *some* standards.</div><div class='del'>-                 */</div><div class='del'>-                LOCK (&amp;egp-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        count = ++(egp-&gt;op_count);</div><div class='del'>-                        error_no_int = egp-&gt;error_no_int;</div><div class='del'>-                        if ((count % egp-&gt;failure_iter_no) == 0) {</div><div class='del'>-                                egp-&gt;op_count = 0;</div><div class='del'>-                                /* coverity[DC.WEAK_CRYPTO] */</div><div class='del'>-                                egp-&gt;failure_iter_no = 3</div><div class='del'>-                                        + (rand () % GF_UNIVERSAL_ANSWER);</div><div class='del'>-                                should_err = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;egp-&gt;lock);</div><div class='del'>-        } else {</div><div class='del'>-                /*</div><div class='del'>-                 * It turns out that rand() is almost universally implemented</div><div class='del'>-                 * as a linear congruential PRNG, which is about as cheap as</div><div class='del'>-                 * it gets.  This gets us real random behavior, including</div><div class='del'>-                 * phenomena like streaks and dry spells, with controllable</div><div class='del'>-                 * long-term probability, cheaply.</div><div class='del'>-                 */</div><div class='del'>-                if ((rand () % FAILURE_GRANULARITY) &lt; egp-&gt;failure_iter_no) {</div><div class='del'>-                        should_err = _gf_true;</div><div class='del'>-                }</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int error_no_int = 0;</div><div class='add'>+    int rand_no = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_boolean_t should_err = _gf_false;</div><div class='add'>+    int error_no_list_size = 0;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (egp-&gt;random_failure) {</div><div class='add'>+        /*</div><div class='add'>+         * I honestly don't know why anyone would use this "feature"</div><div class='add'>+         * but I'll try to preserve its functionality anyway.  Without</div><div class='add'>+         * locking twice to update failure_iter_no and egp-&gt;op_count</div><div class='add'>+         * separately, then not locking at all to update</div><div class='add'>+         * egp-&gt;failure_iter_no.  That's not needed for compatibility,</div><div class='add'>+         * and it's abhorrently wrong.  I have *some* standards.</div><div class='add'>+         */</div><div class='add'>+        LOCK(&amp;egp-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            count = ++(egp-&gt;op_count);</div><div class='add'>+            error_no_int = egp-&gt;error_no_int;</div><div class='add'>+            if ((count % egp-&gt;failure_iter_no) == 0) {</div><div class='add'>+                egp-&gt;op_count = 0;</div><div class='add'>+                /* coverity[DC.WEAK_CRYPTO] */</div><div class='add'>+                egp-&gt;failure_iter_no = 3 + (rand() % GF_UNIVERSAL_ANSWER);</div><div class='add'>+                should_err = _gf_true;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        error_no_list_size = sizeof(error_no_list)/sizeof(error_no_list[0]);</div><div class='del'>-        if (should_err) {</div><div class='del'>-                if (error_no_int)</div><div class='del'>-                        ret = error_no_int;</div><div class='del'>-                else {</div><div class='del'>-                        rand_no = generate_rand_no (op_no);</div><div class='del'>-                        if (op_no &gt;= error_no_list_size)</div><div class='del'>-                                op_no = 0;</div><div class='del'>-                        if (rand_no &gt;= error_no_list[op_no].error_no_count)</div><div class='del'>-                                rand_no = 0;</div><div class='del'>-                        ret = error_no_list[op_no].error_no[rand_no];</div><div class='del'>-                }</div><div class='add'>+        UNLOCK(&amp;egp-&gt;lock);</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * It turns out that rand() is almost universally implemented</div><div class='add'>+         * as a linear congruential PRNG, which is about as cheap as</div><div class='add'>+         * it gets.  This gets us real random behavior, including</div><div class='add'>+         * phenomena like streaks and dry spells, with controllable</div><div class='add'>+         * long-term probability, cheaply.</div><div class='add'>+         */</div><div class='add'>+        if ((rand() % FAILURE_GRANULARITY) &lt; egp-&gt;failure_iter_no) {</div><div class='add'>+            should_err = _gf_true;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    error_no_list_size = sizeof(error_no_list) / sizeof(error_no_list[0]);</div><div class='add'>+    if (should_err) {</div><div class='add'>+        if (error_no_int)</div><div class='add'>+            ret = error_no_int;</div><div class='add'>+        else {</div><div class='add'>+            rand_no = generate_rand_no(op_no);</div><div class='add'>+            if (op_no &gt;= error_no_list_size)</div><div class='add'>+                op_no = 0;</div><div class='add'>+            if (rand_no &gt;= error_no_list[op_no].error_no_count)</div><div class='add'>+                rand_no = 0;</div><div class='add'>+            ret = error_no_list[op_no].error_no[rand_no];</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+error_gen_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_LOOKUP];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_LOOKUP);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='del'>-                                     NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-		    loc, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_LOOKUP];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_LOOKUP);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(lookup, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='add'>+                            NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='add'>+                    loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+error_gen_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_STAT];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_STAT);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_STAT];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (stat, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_STAT);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                   FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(stat, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;stat,</div><div class='add'>+                    loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                   struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+error_gen_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_SETATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_SETATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_SETATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (setattr, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='del'>-	        return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_SETATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;setattr,</div><div class='del'>-		    loc, stbuf, valid, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(setattr, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;setattr,</div><div class='add'>+                    loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                    struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+error_gen_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                   struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int             op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int             enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FSETATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FSETATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FSETATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fsetattr, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FSETATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fsetattr,</div><div class='del'>-		    fd, stbuf, valid, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fsetattr, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fsetattr,</div><div class='add'>+                    fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                    off_t offset, dict_t *xdata)</div><div class='add'>+error_gen_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_TRUNCATE];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_TRUNCATE);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (truncate, frame, -1, op_errno,</div><div class='del'>-                                     NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='del'>-		    loc, offset, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_TRUNCATE];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_TRUNCATE);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(truncate, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='add'>+                    loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		     off_t offset, dict_t *xdata)</div><div class='add'>+error_gen_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp =NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FTRUNCATE];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FTRUNCATE);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (ftruncate, frame, -1, op_errno,</div><div class='del'>-                                     NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-		    fd, offset, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FTRUNCATE];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FTRUNCATE);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(ftruncate, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_access (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		  int32_t mask, dict_t *xdata)</div><div class='add'>+error_gen_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_ACCESS];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_ACCESS];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_ACCESS);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_ACCESS);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (access, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;access,</div><div class='del'>-		    loc, mask, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(access, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;access,</div><div class='add'>+                    loc, mask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                    size_t size, dict_t *xdata)</div><div class='add'>+error_gen_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_READLINK];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_READLINK);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_READLINK];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (readlink, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_READLINK);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;readlink,</div><div class='del'>-		    loc, size, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(readlink, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readlink,</div><div class='add'>+                    loc, size, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		 mode_t mode, dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+error_gen_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+                dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_MKNOD];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_MKNOD);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (mknod, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                     NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;mknod,</div><div class='del'>-		    loc, mode, rdev, umask, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_MKNOD];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_MKNOD);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                            xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;mknod,</div><div class='add'>+                    loc, mode, rdev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_mkdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		 loc_t *loc, mode_t mode, mode_t umask, dict_t *xdata)</div><div class='add'>+error_gen_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+                mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_MKDIR];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_MKDIR);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (mkdir, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                     NULL, NULL, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;mkdir,</div><div class='del'>-		    loc, mode, umask, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_MKDIR];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_MKDIR);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                            xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;mkdir,</div><div class='add'>+                    loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+error_gen_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_UNLINK];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_UNLINK);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (unlink, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                     xdata);</div><div class='del'>-                return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-		    loc, xflag, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_UNLINK];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_UNLINK);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(unlink, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='add'>+                    loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+error_gen_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_RMDIR];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_RMDIR];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_RMDIR);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_RMDIR);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (rmdir, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;rmdir,</div><div class='del'>-		    loc, flags, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(rmdir, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;rmdir,</div><div class='add'>+                    loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-		   loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+error_gen_symlink(call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+                  loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_SYMLINK];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_SYMLINK);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (symlink, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                     NULL, NULL, NULL); /* pre &amp; post parent attr */</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='del'>-		    linkpath, loc, umask, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_SYMLINK];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_SYMLINK);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(symlink, frame, -1, op_errno, NULL, NULL, NULL,</div><div class='add'>+                            NULL, NULL); /* pre &amp; post parent attr */</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='add'>+                    linkpath, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		  loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+error_gen_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+                 loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_RENAME];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_RENAME);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (rename, frame, -1, op_errno, NULL,</div><div class='del'>-                                     NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='del'>-		    oldloc, newloc, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_RENAME];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_RENAME);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(rename, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                            NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='add'>+                    oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+error_gen_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+               loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int             op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int             enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_LINK];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_LINK);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (link, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='del'>-		    oldloc, newloc, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_LINK];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_LINK);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(link, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                            NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='add'>+                    oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_create (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		  int32_t flags, mode_t mode, mode_t umask, fd_t *fd,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+error_gen_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+                 mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int             op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int             enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_CREATE];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_CREATE);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (create, frame, -1, op_errno, NULL, NULL,</div><div class='del'>-                                     NULL, NULL, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='del'>-		    loc, flags, mode, umask, fd, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_CREATE];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_CREATE);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(create, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                            NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='add'>+                    loc, flags, mode, umask, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+error_gen_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+               fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_OPEN];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_OPEN);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_OPEN];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (open, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_OPEN);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-		    loc, flags, fd, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(open, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='add'>+                    loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		 fd_t *fd, size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+error_gen_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_READ];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_READ);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (readv, frame, -1, op_errno, NULL, 0,</div><div class='del'>-                                     NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='del'>-		    fd, size, offset, flags, xdata);</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_READ];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_READ);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(readv, frame, -1, op_errno, NULL, 0, NULL, NULL,</div><div class='add'>+                            xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='add'>+                    fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		  struct iovec *vector, int32_t count,</div><div class='del'>-		  off_t off, uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+error_gen_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                 struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='add'>+                 struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-	struct iovec *shortvec = NULL;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_WRITE];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_WRITE);</div><div class='del'>-</div><div class='del'>-	if (op_errno == GF_ERROR_SHORT_WRITE) {</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * A short write error returns some value less than what was</div><div class='del'>-		 * requested from a write. To simulate this, replace the vector</div><div class='del'>-		 * with one half the size;</div><div class='del'>-		 */</div><div class='del'>-		shortvec = iov_dup(vector, 1);</div><div class='del'>-		shortvec-&gt;iov_len /= 2;</div><div class='del'>-		goto wind;</div><div class='del'>-	} else if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (writev, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='del'>-        	return 0;</div><div class='del'>-	}</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+    struct iovec *shortvec = NULL;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_WRITE];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_WRITE);</div><div class='add'>+</div><div class='add'>+    if (op_errno == GF_ERROR_SHORT_WRITE) {</div><div class='add'>+        /*</div><div class='add'>+         * A short write error returns some value less than what was</div><div class='add'>+         * requested from a write. To simulate this, replace the vector</div><div class='add'>+         * with one half the size;</div><div class='add'>+         */</div><div class='add'>+        shortvec = iov_dup(vector, 1);</div><div class='add'>+        shortvec-&gt;iov_len /= 2;</div><div class='add'>+        goto wind;</div><div class='add'>+    } else if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(writev, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> wind:</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                   FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-                   fd, shortvec?shortvec:vector,</div><div class='del'>-                   count, off, flags, iobref, xdata);</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='add'>+                    fd, shortvec ? shortvec : vector, count, off, flags, iobref,</div><div class='add'>+                    xdata);</div><div class='ctx'> </div><div class='del'>-	if (shortvec)</div><div class='del'>-		GF_FREE (shortvec);</div><div class='del'>-        return 0;</div><div class='add'>+    if (shortvec)</div><div class='add'>+        GF_FREE(shortvec);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+error_gen_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FLUSH];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FLUSH];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FLUSH);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FLUSH);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (flush, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-		    fd, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(flush, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='add'>+                    fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags, dict_t *xdata)</div><div class='add'>+error_gen_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FSYNC];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FSYNC);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FSYNC];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fsync, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FSYNC);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fsync,</div><div class='del'>-		    fd, flags, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fsync, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fsync,</div><div class='add'>+                    fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+error_gen_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FSTAT];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FSTAT);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FSTAT];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fstat, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-	        return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FSTAT);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-		    fd, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fstat, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='add'>+                    fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+error_gen_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_OPENDIR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_OPENDIR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_OPENDIR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (opendir, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_OPENDIR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;opendir,</div><div class='del'>-		    loc, fd, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(opendir, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;opendir,</div><div class='add'>+                    loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                    int32_t flags, dict_t *xdata)</div><div class='add'>+error_gen_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FSYNCDIR];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FSYNCDIR];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FSYNCDIR);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FSYNCDIR);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fsyncdir, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir,</div><div class='del'>-		    fd, flags, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fsyncdir, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir,</div><div class='add'>+                    fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+error_gen_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_STATFS];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_STATFS);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_STATFS];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (statfs, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_STATFS);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;statfs,</div><div class='del'>-		    loc, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(statfs, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;statfs,</div><div class='add'>+                    loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		    dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+error_gen_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_SETXATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_SETXATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_SETXATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (setxattr, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_SETXATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-		    loc, dict, flags, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(setxattr, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='add'>+                    loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		    const char *name, dict_t *xdata)</div><div class='add'>+error_gen_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_GETXATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_GETXATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_GETXATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (getxattr, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_GETXATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-		    loc, name, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(getxattr, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='add'>+                    loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                     dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+error_gen_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                    int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FSETXATTR];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FSETXATTR];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FSETXATTR);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FSETXATTR);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fsetxattr, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-		    fd, dict, flags, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fsetxattr, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                     const char *name, dict_t *xdata)</div><div class='add'>+error_gen_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                    const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FGETXATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FGETXATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FGETXATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fgetxattr, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FGETXATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-		    fd, name, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fgetxattr, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		   gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+error_gen_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_XATTROP];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_XATTROP);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_XATTROP];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (xattrop, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_XATTROP);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;xattrop,</div><div class='del'>-		    loc, flags, dict, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(xattrop, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;xattrop,</div><div class='add'>+                    loc, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		    gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+error_gen_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                   gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FXATTROP];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FXATTROP);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FXATTROP];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fxattrop, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-	        return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FXATTROP);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fxattrop,</div><div class='del'>-		    fd, flags, dict, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fxattrop, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fxattrop,</div><div class='add'>+                    fd, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-		       const char *name, dict_t *xdata)</div><div class='add'>+error_gen_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                      const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_REMOVEXATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_REMOVEXATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_REMOVEXATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (removexattr, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_REMOVEXATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;removexattr,</div><div class='del'>-		    loc, name, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(removexattr, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                        const char *name, dict_t *xdata)</div><div class='add'>+error_gen_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                       const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FREMOVEXATTR];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FREMOVEXATTR);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FREMOVEXATTR];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fremovexattr, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FREMOVEXATTR);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-		    fd, name, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fremovexattr, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='del'>-	      struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+error_gen_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+             struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_LK];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_LK];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_LK);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_LK);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (lk, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;lk,</div><div class='del'>-		    fd, cmd, lock, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(lk, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;lk, fd,</div><div class='add'>+                    cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		   const char *volume, loc_t *loc, int32_t cmd,</div><div class='del'>-                   struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+error_gen_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                  loc_t *loc, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_INODELK];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_INODELK];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_INODELK);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_INODELK);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (inodelk, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;inodelk,</div><div class='del'>-		    volume, loc, cmd, lock, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(inodelk, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;inodelk,</div><div class='add'>+                    volume, loc, cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_finodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		    const char *volume, fd_t *fd, int32_t cmd,</div><div class='del'>-                    struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+error_gen_finodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                   fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FINODELK];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FINODELK];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FINODELK);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FINODELK);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (finodelk, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		    volume, fd, cmd, lock, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(finodelk, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='add'>+                    volume, fd, cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		   const char *volume, loc_t *loc, const char *basename,</div><div class='del'>-		   entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+error_gen_entrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                  loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                  entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_ENTRYLK];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_ENTRYLK];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_ENTRYLK);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_ENTRYLK);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (entrylk, frame, -1, op_errno, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;entrylk,</div><div class='del'>-		    volume, loc, basename, cmd, type, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(entrylk, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;entrylk,</div><div class='add'>+                    volume, loc, basename, cmd, type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_fentrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		    const char *volume, fd_t *fd, const char *basename,</div><div class='del'>-		    entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+error_gen_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                   fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                   entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int             op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int             enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_FENTRYLK];</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_FENTRYLK);</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_FENTRYLK];</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (fentrylk, frame, -1, op_errno, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-	}</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_FENTRYLK);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fentrylk,</div><div class='del'>-		    volume, fd, basename, cmd, type, xdata);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(fentrylk, frame, -1, op_errno, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fentrylk,</div><div class='add'>+                    volume, fd, basename, cmd, type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_getspec (call_frame_t *frame, xlator_t *this, const char *key,</div><div class='del'>-		   int32_t flags)</div><div class='add'>+error_gen_getspec(call_frame_t *frame, xlator_t *this, const char *key,</div><div class='add'>+                  int32_t flags)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_GETSPEC];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_GETSPEC);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (getspec, frame, -1, op_errno, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;getspec,</div><div class='del'>-		    key, flags);</div><div class='del'>-	return 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_GETSPEC];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_GETSPEC);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(getspec, frame, -1, op_errno, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;getspec,</div><div class='add'>+                    key, flags);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		   size_t size, off_t off, dict_t *xdata)</div><div class='add'>+error_gen_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                  off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='del'>-</div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_READDIR];</div><div class='del'>-</div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_READDIR);</div><div class='del'>-</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (readdir, frame, -1, op_errno, NULL, xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;readdir,</div><div class='del'>-		    fd, size, off, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='add'>+</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_READDIR];</div><div class='add'>+</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_READDIR);</div><div class='add'>+</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(readdir, frame, -1, op_errno, NULL, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readdir,</div><div class='add'>+                    fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-error_gen_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-                    off_t off, dict_t *dict)</div><div class='add'>+error_gen_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                   off_t off, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-	int              op_errno = 0;</div><div class='del'>-        eg_t            *egp = NULL;</div><div class='del'>-        int              enable = 1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    eg_t *egp = NULL;</div><div class='add'>+    int enable = 1;</div><div class='ctx'> </div><div class='del'>-        egp = this-&gt;private;</div><div class='del'>-        enable = egp-&gt;enable[GF_FOP_READDIRP];</div><div class='add'>+    egp = this-&gt;private;</div><div class='add'>+    enable = egp-&gt;enable[GF_FOP_READDIRP];</div><div class='ctx'> </div><div class='del'>-        if (enable)</div><div class='del'>-                op_errno = error_gen (this, GF_FOP_READDIRP);</div><div class='add'>+    if (enable)</div><div class='add'>+        op_errno = error_gen(this, GF_FOP_READDIRP);</div><div class='ctx'> </div><div class='del'>-	if (op_errno) {</div><div class='del'>-		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno));</div><div class='del'>-		STACK_UNWIND_STRICT (readdirp, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        GF_ERROR(this, "unwind(-1, %s)", strerror(op_errno));</div><div class='add'>+        STACK_UNWIND_STRICT(readdirp, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='ctx'>                     fd, size, off, dict);</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-error_gen_set_failure (eg_t *pvt, double percent)</div><div class='add'>+error_gen_set_failure(eg_t *pvt, double percent)</div><div class='ctx'> {</div><div class='del'>-        double  ppm;</div><div class='add'>+    double ppm;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (pvt);</div><div class='add'>+    GF_ASSERT(pvt);</div><div class='ctx'> </div><div class='del'>-        ppm = (percent / 100.0) * (double)FAILURE_GRANULARITY;</div><div class='del'>-        pvt-&gt;failure_iter_no = (int)ppm;</div><div class='add'>+    ppm = (percent / 100.0) * (double)FAILURE_GRANULARITY;</div><div class='add'>+    pvt-&gt;failure_iter_no = (int)ppm;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-error_gen_parse_fill_fops (eg_t *pvt, char *enable_fops)</div><div class='add'>+error_gen_parse_fill_fops(eg_t *pvt, char *enable_fops)</div><div class='ctx'> {</div><div class='del'>-        char            *op_no_str = NULL;</div><div class='del'>-        int              op_no = -1;</div><div class='del'>-        int              i = 0;</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='del'>-        char            *saveptr = NULL;</div><div class='add'>+    char *op_no_str = NULL;</div><div class='add'>+    int op_no = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    char *saveptr = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (pvt);</div><div class='del'>-        GF_ASSERT (this);</div><div class='add'>+    GF_ASSERT(pvt);</div><div class='add'>+    GF_ASSERT(this);</div><div class='ctx'> </div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='add'>+        pvt-&gt;enable[i] = 0;</div><div class='add'>+</div><div class='add'>+    if (!enable_fops) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "All fops are enabled.");</div><div class='ctx'>         for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='del'>-                pvt-&gt;enable[i] = 0;</div><div class='del'>-</div><div class='del'>-        if (!enable_fops) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "All fops are enabled.");</div><div class='del'>-                for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='del'>-                        pvt-&gt;enable[i] = 1;</div><div class='del'>-        } else {</div><div class='del'>-                op_no_str = strtok_r (enable_fops, ",", &amp;saveptr);</div><div class='del'>-                while (op_no_str) {</div><div class='del'>-                        op_no = gf_fop_int (op_no_str);</div><div class='del'>-                        if (op_no == -1) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Wrong option value %s", op_no_str);</div><div class='del'>-                        } else</div><div class='del'>-                                pvt-&gt;enable[op_no] = 1;</div><div class='del'>-</div><div class='del'>-                        op_no_str = strtok_r (NULL, ",", &amp;saveptr);</div><div class='del'>-                }</div><div class='add'>+            pvt-&gt;enable[i] = 1;</div><div class='add'>+    } else {</div><div class='add'>+        op_no_str = strtok_r(enable_fops, ",", &amp;saveptr);</div><div class='add'>+        while (op_no_str) {</div><div class='add'>+            op_no = gf_fop_int(op_no_str);</div><div class='add'>+            if (op_no == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING, "Wrong option value %s",</div><div class='add'>+                       op_no_str);</div><div class='add'>+            } else</div><div class='add'>+                pvt-&gt;enable[op_no] = 1;</div><div class='add'>+</div><div class='add'>+            op_no_str = strtok_r(NULL, ",", &amp;saveptr);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-error_gen_priv_dump (xlator_t *this)</div><div class='add'>+error_gen_priv_dump(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        char            key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        eg_t            *conf = NULL;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    int ret = -1;</div><div class='add'>+    eg_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-            goto out;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-            goto out;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = TRY_LOCK(&amp;conf-&gt;lock);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = TRY_LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section("xlator.debug.error-gen.%s.priv", this-&gt;name);</div><div class='del'>-        gf_proc_dump_build_key(key_prefix,"xlator.debug.error-gen","%s.priv",</div><div class='del'>-                               this-&gt;name);</div><div class='add'>+    gf_proc_dump_add_section("xlator.debug.error-gen.%s.priv", this-&gt;name);</div><div class='add'>+    gf_proc_dump_build_key(key_prefix, "xlator.debug.error-gen", "%s.priv",</div><div class='add'>+                           this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write("op_count", "%d", conf-&gt;op_count);</div><div class='del'>-        gf_proc_dump_write("failure_iter_no", "%d", conf-&gt;failure_iter_no);</div><div class='del'>-        gf_proc_dump_write("error_no", "%s", conf-&gt;error_no);</div><div class='del'>-        gf_proc_dump_write("random_failure", "%d", conf-&gt;random_failure);</div><div class='add'>+    gf_proc_dump_write("op_count", "%d", conf-&gt;op_count);</div><div class='add'>+    gf_proc_dump_write("failure_iter_no", "%d", conf-&gt;failure_iter_no);</div><div class='add'>+    gf_proc_dump_write("error_no", "%s", conf-&gt;error_no);</div><div class='add'>+    gf_proc_dump_write("random_failure", "%d", conf-&gt;random_failure);</div><div class='ctx'> </div><div class='del'>-        UNLOCK(&amp;conf-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_error_gen_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                        " failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_error_gen_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               " failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        eg_t            *pvt = NULL;</div><div class='del'>-        int32_t          ret = 0;</div><div class='del'>-        char            *error_enable_fops = NULL;</div><div class='del'>-        double           failure_percent_dbl = 0.0;</div><div class='add'>+    eg_t *pvt = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char *error_enable_fops = NULL;</div><div class='add'>+    double failure_percent_dbl = 0.0;</div><div class='ctx'> </div><div class='del'>-        if (!this || !this-&gt;private)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!this || !this-&gt;private)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pvt = this-&gt;private;</div><div class='add'>+    pvt = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = -1;</div><div class='add'>+    ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("error-no", pvt-&gt;error_no, options, str, out);</div><div class='add'>+    GF_OPTION_RECONF("error-no", pvt-&gt;error_no, options, str, out);</div><div class='ctx'> </div><div class='del'>-        if (pvt-&gt;error_no)</div><div class='del'>-                pvt-&gt;error_no_int = conv_errno_to_int (&amp;pvt-&gt;error_no);</div><div class='add'>+    if (pvt-&gt;error_no)</div><div class='add'>+        pvt-&gt;error_no_int = conv_errno_to_int(&amp;pvt-&gt;error_no);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("failure", failure_percent_dbl, options, percent,</div><div class='del'>-                          out);</div><div class='add'>+    GF_OPTION_RECONF("failure", failure_percent_dbl, options, percent, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("enable", error_enable_fops, options, str, out);</div><div class='add'>+    GF_OPTION_RECONF("enable", error_enable_fops, options, str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("random-failure", pvt-&gt;random_failure, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+    GF_OPTION_RECONF("random-failure", pvt-&gt;random_failure, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        error_gen_parse_fill_fops (pvt, error_enable_fops);</div><div class='del'>-        error_gen_set_failure (pvt, failure_percent_dbl);</div><div class='add'>+    error_gen_parse_fill_fops(pvt, error_enable_fops);</div><div class='add'>+    error_gen_set_failure(pvt, failure_percent_dbl);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        gf_log (this ? this-&gt;name : "error-gen", GF_LOG_DEBUG,</div><div class='del'>-                "reconfigure returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log(this ? this-&gt;name : "error-gen", GF_LOG_DEBUG,</div><div class='add'>+           "reconfigure returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        eg_t            *pvt = NULL;</div><div class='del'>-        int32_t          ret = 0;</div><div class='del'>-        char            *error_enable_fops = NULL;</div><div class='del'>-        double          failure_percent_dbl = 0.0;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "error-gen not configured with one subvolume");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pvt = GF_CALLOC (1, sizeof (eg_t), gf_error_gen_mt_eg_t);</div><div class='add'>+    eg_t *pvt = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char *error_enable_fops = NULL;</div><div class='add'>+    double failure_percent_dbl = 0.0;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "error-gen not configured with one subvolume");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!pvt) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;pvt-&gt;lock);</div><div class='add'>+    pvt = GF_CALLOC(1, sizeof(eg_t), gf_error_gen_mt_eg_t);</div><div class='ctx'> </div><div class='add'>+    if (!pvt) {</div><div class='ctx'>         ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("error-no", pvt-&gt;error_no, str, out);</div><div class='add'>+    LOCK_INIT(&amp;pvt-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (pvt-&gt;error_no)</div><div class='del'>-                pvt-&gt;error_no_int = conv_errno_to_int (&amp;pvt-&gt;error_no);</div><div class='add'>+    ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("failure", failure_percent_dbl, percent, out);</div><div class='add'>+    GF_OPTION_INIT("error-no", pvt-&gt;error_no, str, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("enable", error_enable_fops, str, out);</div><div class='add'>+    if (pvt-&gt;error_no)</div><div class='add'>+        pvt-&gt;error_no_int = conv_errno_to_int(&amp;pvt-&gt;error_no);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("random-failure", pvt-&gt;random_failure, bool, out);</div><div class='add'>+    GF_OPTION_INIT("failure", failure_percent_dbl, percent, out);</div><div class='ctx'> </div><div class='add'>+    GF_OPTION_INIT("enable", error_enable_fops, str, out);</div><div class='ctx'> </div><div class='del'>-        error_gen_parse_fill_fops (pvt, error_enable_fops);</div><div class='del'>-        error_gen_set_failure (pvt, failure_percent_dbl);</div><div class='add'>+    GF_OPTION_INIT("random-failure", pvt-&gt;random_failure, bool, out);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = pvt;</div><div class='add'>+    error_gen_parse_fill_fops(pvt, error_enable_fops);</div><div class='add'>+    error_gen_set_failure(pvt, failure_percent_dbl);</div><div class='ctx'> </div><div class='del'>-        /* Give some seed value here */</div><div class='del'>-        srand (time(NULL));</div><div class='add'>+    this-&gt;private = pvt;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    /* Give some seed value here */</div><div class='add'>+    srand(time(NULL));</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_FREE (pvt);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_FREE(pvt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        eg_t            *pvt = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                 return;</div><div class='del'>-        pvt = this-&gt;private;</div><div class='add'>+    eg_t *pvt = NULL;</div><div class='ctx'> </div><div class='del'>-        if (pvt) {</div><div class='del'>-                LOCK_DESTROY (&amp;pvt-&gt;lock);</div><div class='del'>-                GF_FREE (pvt);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "fini called");</div><div class='del'>-        }</div><div class='add'>+    if (!this)</div><div class='ctx'>         return;</div><div class='add'>+    pvt = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (pvt) {</div><div class='add'>+        LOCK_DESTROY(&amp;pvt-&gt;lock);</div><div class='add'>+        GF_FREE(pvt);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "fini called");</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv = error_gen_priv_dump,</div><div class='add'>+    .priv = error_gen_priv_dump,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks;</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-	.lookup      = error_gen_lookup,</div><div class='del'>-	.stat        = error_gen_stat,</div><div class='del'>-	.readlink    = error_gen_readlink,</div><div class='del'>-	.mknod       = error_gen_mknod,</div><div class='del'>-	.mkdir       = error_gen_mkdir,</div><div class='del'>-	.unlink      = error_gen_unlink,</div><div class='del'>-	.rmdir       = error_gen_rmdir,</div><div class='del'>-	.symlink     = error_gen_symlink,</div><div class='del'>-	.rename      = error_gen_rename,</div><div class='del'>-	.link        = error_gen_link,</div><div class='del'>-	.truncate    = error_gen_truncate,</div><div class='del'>-	.create      = error_gen_create,</div><div class='del'>-	.open        = error_gen_open,</div><div class='del'>-	.readv       = error_gen_readv,</div><div class='del'>-	.writev      = error_gen_writev,</div><div class='del'>-	.statfs      = error_gen_statfs,</div><div class='del'>-	.flush       = error_gen_flush,</div><div class='del'>-	.fsync       = error_gen_fsync,</div><div class='del'>-	.setxattr    = error_gen_setxattr,</div><div class='del'>-	.getxattr    = error_gen_getxattr,</div><div class='del'>-	.removexattr = error_gen_removexattr,</div><div class='del'>-	.fsetxattr    = error_gen_fsetxattr,</div><div class='del'>-	.fgetxattr    = error_gen_fgetxattr,</div><div class='del'>-	.fremovexattr = error_gen_fremovexattr,</div><div class='del'>-	.opendir     = error_gen_opendir,</div><div class='del'>-	.readdir     = error_gen_readdir,</div><div class='del'>-	.readdirp    = error_gen_readdirp,</div><div class='del'>-	.fsyncdir    = error_gen_fsyncdir,</div><div class='del'>-	.access      = error_gen_access,</div><div class='del'>-	.ftruncate   = error_gen_ftruncate,</div><div class='del'>-	.fstat       = error_gen_fstat,</div><div class='del'>-	.lk          = error_gen_lk,</div><div class='del'>-	.xattrop     = error_gen_xattrop,</div><div class='del'>-	.fxattrop    = error_gen_fxattrop,</div><div class='del'>-	.inodelk     = error_gen_inodelk,</div><div class='del'>-	.finodelk    = error_gen_finodelk,</div><div class='del'>-	.entrylk     = error_gen_entrylk,</div><div class='del'>-	.fentrylk    = error_gen_fentrylk,</div><div class='del'>-        .setattr     = error_gen_setattr,</div><div class='del'>-        .fsetattr    = error_gen_fsetattr,</div><div class='del'>-	.getspec     = error_gen_getspec,</div><div class='add'>+    .lookup = error_gen_lookup,</div><div class='add'>+    .stat = error_gen_stat,</div><div class='add'>+    .readlink = error_gen_readlink,</div><div class='add'>+    .mknod = error_gen_mknod,</div><div class='add'>+    .mkdir = error_gen_mkdir,</div><div class='add'>+    .unlink = error_gen_unlink,</div><div class='add'>+    .rmdir = error_gen_rmdir,</div><div class='add'>+    .symlink = error_gen_symlink,</div><div class='add'>+    .rename = error_gen_rename,</div><div class='add'>+    .link = error_gen_link,</div><div class='add'>+    .truncate = error_gen_truncate,</div><div class='add'>+    .create = error_gen_create,</div><div class='add'>+    .open = error_gen_open,</div><div class='add'>+    .readv = error_gen_readv,</div><div class='add'>+    .writev = error_gen_writev,</div><div class='add'>+    .statfs = error_gen_statfs,</div><div class='add'>+    .flush = error_gen_flush,</div><div class='add'>+    .fsync = error_gen_fsync,</div><div class='add'>+    .setxattr = error_gen_setxattr,</div><div class='add'>+    .getxattr = error_gen_getxattr,</div><div class='add'>+    .removexattr = error_gen_removexattr,</div><div class='add'>+    .fsetxattr = error_gen_fsetxattr,</div><div class='add'>+    .fgetxattr = error_gen_fgetxattr,</div><div class='add'>+    .fremovexattr = error_gen_fremovexattr,</div><div class='add'>+    .opendir = error_gen_opendir,</div><div class='add'>+    .readdir = error_gen_readdir,</div><div class='add'>+    .readdirp = error_gen_readdirp,</div><div class='add'>+    .fsyncdir = error_gen_fsyncdir,</div><div class='add'>+    .access = error_gen_access,</div><div class='add'>+    .ftruncate = error_gen_ftruncate,</div><div class='add'>+    .fstat = error_gen_fstat,</div><div class='add'>+    .lk = error_gen_lk,</div><div class='add'>+    .xattrop = error_gen_xattrop,</div><div class='add'>+    .fxattrop = error_gen_fxattrop,</div><div class='add'>+    .inodelk = error_gen_inodelk,</div><div class='add'>+    .finodelk = error_gen_finodelk,</div><div class='add'>+    .entrylk = error_gen_entrylk,</div><div class='add'>+    .fentrylk = error_gen_fentrylk,</div><div class='add'>+    .setattr = error_gen_setattr,</div><div class='add'>+    .fsetattr = error_gen_fsetattr,</div><div class='add'>+    .getspec = error_gen_getspec,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"failure"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT,</div><div class='del'>-          .description = "Percentage failure of operations when enabled.",</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"error-no"},</div><div class='del'>-          .value = {"ENOENT","ENOTDIR","ENAMETOOLONG","EACCES","EBADF",</div><div class='del'>-                    "EFAULT","ENOMEM","EINVAL","EIO","EEXIST","ENOSPC",</div><div class='del'>-                    "EPERM","EROFS","EBUSY","EISDIR","ENOTEMPTY","EMLINK"</div><div class='del'>-                    "ENODEV","EXDEV","EMFILE","ENFILE","ENOSYS","EINTR",</div><div class='del'>-                    "EFBIG","EAGAIN","GF_ERROR_SHORT_WRITE"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {3},</div><div class='del'>-          .tags = {"error-gen"},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key = {"random-failure"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .op_version = {3},</div><div class='del'>-          .tags = {"error-gen"},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {"enable", "error-fops"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Accepts a string which takes ',' separated fop "</div><div class='del'>-                         "strings to denote which fops are enabled for error",</div><div class='del'>-          .op_version = {3},</div><div class='del'>-          .tags = {"error-gen"},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        { .key  = {NULL} }</div><div class='del'>-};</div><div class='add'>+    {</div><div class='add'>+        .key = {"failure"},</div><div class='add'>+        .type = GF_OPTION_TYPE_PERCENT,</div><div class='add'>+        .description = "Percentage failure of operations when enabled.",</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"error-no"},</div><div class='add'>+        .value = {"ENOENT",</div><div class='add'>+                  "ENOTDIR",</div><div class='add'>+                  "ENAMETOOLONG",</div><div class='add'>+                  "EACCES",</div><div class='add'>+                  "EBADF",</div><div class='add'>+                  "EFAULT",</div><div class='add'>+                  "ENOMEM",</div><div class='add'>+                  "EINVAL",</div><div class='add'>+                  "EIO",</div><div class='add'>+                  "EEXIST",</div><div class='add'>+                  "ENOSPC",</div><div class='add'>+                  "EPERM",</div><div class='add'>+                  "EROFS",</div><div class='add'>+                  "EBUSY",</div><div class='add'>+                  "EISDIR",</div><div class='add'>+                  "ENOTEMPTY",</div><div class='add'>+                  "EMLINK"</div><div class='add'>+                  "ENODEV",</div><div class='add'>+                  "EXDEV",</div><div class='add'>+                  "EMFILE",</div><div class='add'>+                  "ENFILE",</div><div class='add'>+                  "ENOSYS",</div><div class='add'>+                  "EINTR",</div><div class='add'>+                  "EFBIG",</div><div class='add'>+                  "EAGAIN",</div><div class='add'>+                  "GF_ERROR_SHORT_WRITE"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .op_version = {3},</div><div class='add'>+        .tags = {"error-gen"},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"random-failure"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "off",</div><div class='add'>+        .op_version = {3},</div><div class='add'>+        .tags = {"error-gen"},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        .key = {"enable", "error-fops"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .description = "Accepts a string which takes ',' separated fop "</div><div class='add'>+                       "strings to denote which fops are enabled for error",</div><div class='add'>+        .op_version = {3},</div><div class='add'>+        .tags = {"error-gen"},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    {.key = {NULL}}};</div><div class='head'>diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c<br/>index 4bc8b7999a7..6f6104033d8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/debug/io-stats/src/io-stats.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/debug/io-stats/src/io-stats.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/debug/io-stats/src/io-stats.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/io-stats/src/io-stats.c</a></div><div class='hunk'>@@ -17,9 +17,9 @@</div><div class='ctx'>  *</div><div class='ctx'>  *  a) total read data - since process start, last interval and per fd</div><div class='ctx'>  *  b) total write data - since process start, last interval and per fd</div><div class='del'>- *  c) counts of read IO block size - since process start, last interval and per fd</div><div class='del'>- *  d) counts of write IO block size - since process start, last interval and per fd</div><div class='del'>- *  e) counts of all FOP types passing through it</div><div class='add'>+ *  c) counts of read IO block size - since process start, last interval and per</div><div class='add'>+ * fd d) counts of write IO block size - since process start, last interval and</div><div class='add'>+ * per fd e) counts of all FOP types passing through it</div><div class='ctx'>  *</div><div class='ctx'>  *  Usage: setfattr -n trusted.io-stats-dump /tmp/filename /mnt/gluster</div><div class='ctx'>  *      output is written to /tmp/filename.&lt;iostats xlator instance name&gt;</div><div class='hunk'>@@ -49,169 +49,168 @@</div><div class='ctx'> #define IOS_STATS_DUMP_DIR DEFAULT_VAR_RUN_DIRECTORY</div><div class='ctx'> </div><div class='ctx'> typedef enum {</div><div class='del'>-        IOS_STATS_TYPE_NONE,</div><div class='del'>-        IOS_STATS_TYPE_OPEN,</div><div class='del'>-        IOS_STATS_TYPE_READ,</div><div class='del'>-        IOS_STATS_TYPE_WRITE,</div><div class='del'>-        IOS_STATS_TYPE_OPENDIR,</div><div class='del'>-        IOS_STATS_TYPE_READDIRP,</div><div class='del'>-        IOS_STATS_TYPE_READ_THROUGHPUT,</div><div class='del'>-        IOS_STATS_TYPE_WRITE_THROUGHPUT,</div><div class='del'>-        IOS_STATS_TYPE_MAX</div><div class='del'>-}ios_stats_type_t;</div><div class='add'>+    IOS_STATS_TYPE_NONE,</div><div class='add'>+    IOS_STATS_TYPE_OPEN,</div><div class='add'>+    IOS_STATS_TYPE_READ,</div><div class='add'>+    IOS_STATS_TYPE_WRITE,</div><div class='add'>+    IOS_STATS_TYPE_OPENDIR,</div><div class='add'>+    IOS_STATS_TYPE_READDIRP,</div><div class='add'>+    IOS_STATS_TYPE_READ_THROUGHPUT,</div><div class='add'>+    IOS_STATS_TYPE_WRITE_THROUGHPUT,</div><div class='add'>+    IOS_STATS_TYPE_MAX</div><div class='add'>+} ios_stats_type_t;</div><div class='ctx'> </div><div class='ctx'> typedef enum {</div><div class='del'>-        IOS_STATS_THRU_READ,</div><div class='del'>-        IOS_STATS_THRU_WRITE,</div><div class='del'>-        IOS_STATS_THRU_MAX,</div><div class='del'>-}ios_stats_thru_t;</div><div class='add'>+    IOS_STATS_THRU_READ,</div><div class='add'>+    IOS_STATS_THRU_WRITE,</div><div class='add'>+    IOS_STATS_THRU_MAX,</div><div class='add'>+} ios_stats_thru_t;</div><div class='ctx'> </div><div class='ctx'> struct ios_stat_lat {</div><div class='del'>-        struct timeval  time;</div><div class='del'>-        double          throughput;</div><div class='add'>+    struct timeval time;</div><div class='add'>+    double throughput;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ios_stat {</div><div class='del'>-        gf_lock_t       lock;</div><div class='del'>-        uuid_t          gfid;</div><div class='del'>-        char           *filename;</div><div class='del'>-        gf_atomic_t     counters[IOS_STATS_TYPE_MAX];</div><div class='del'>-        struct ios_stat_lat thru_counters [IOS_STATS_THRU_MAX];</div><div class='del'>-        gf_atomic_t     refcnt;</div><div class='add'>+    gf_lock_t lock;</div><div class='add'>+    uuid_t gfid;</div><div class='add'>+    char *filename;</div><div class='add'>+    gf_atomic_t counters[IOS_STATS_TYPE_MAX];</div><div class='add'>+    struct ios_stat_lat thru_counters[IOS_STATS_THRU_MAX];</div><div class='add'>+    gf_atomic_t refcnt;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ios_stat_list {</div><div class='del'>-        struct list_head  list;</div><div class='del'>-        struct ios_stat  *iosstat;</div><div class='del'>-        double            value;</div><div class='add'>+    struct list_head list;</div><div class='add'>+    struct ios_stat *iosstat;</div><div class='add'>+    double value;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ios_stat_head {</div><div class='del'>-       gf_lock_t                lock;</div><div class='del'>-       double                   min_cnt;</div><div class='del'>-       uint64_t                 members;</div><div class='del'>-       struct ios_stat_list    *iosstats;</div><div class='add'>+    gf_lock_t lock;</div><div class='add'>+    double min_cnt;</div><div class='add'>+    uint64_t members;</div><div class='add'>+    struct ios_stat_list *iosstats;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> typedef struct _ios_sample_t {</div><div class='del'>-        uid_t  uid;</div><div class='del'>-        gid_t  gid;</div><div class='del'>-        char   identifier[UNIX_PATH_MAX];</div><div class='del'>-        glusterfs_fop_t fop_type;</div><div class='del'>-        struct timeval timestamp;</div><div class='del'>-        double elapsed;</div><div class='add'>+    uid_t uid;</div><div class='add'>+    gid_t gid;</div><div class='add'>+    char identifier[UNIX_PATH_MAX];</div><div class='add'>+    glusterfs_fop_t fop_type;</div><div class='add'>+    struct timeval timestamp;</div><div class='add'>+    double elapsed;</div><div class='ctx'> } ios_sample_t;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> typedef struct _ios_sample_buf_t {</div><div class='del'>-        uint64_t        pos;  /* Position in write buffer */</div><div class='del'>-        uint64_t        size;  /* Size of ring buffer */</div><div class='del'>-        uint64_t        collected;  /* Number of samples we've collected */</div><div class='del'>-        uint64_t        observed;  /* Number of FOPs we've observed */</div><div class='del'>-        ios_sample_t    *ios_samples;  /* Our list of samples */</div><div class='add'>+    uint64_t pos;              /* Position in write buffer */</div><div class='add'>+    uint64_t size;             /* Size of ring buffer */</div><div class='add'>+    uint64_t collected;        /* Number of samples we've collected */</div><div class='add'>+    uint64_t observed;         /* Number of FOPs we've observed */</div><div class='add'>+    ios_sample_t *ios_samples; /* Our list of samples */</div><div class='ctx'> } ios_sample_buf_t;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct ios_lat {</div><div class='del'>-        double      min;</div><div class='del'>-        double      max;</div><div class='del'>-        double      avg;</div><div class='del'>-        uint64_t    total;</div><div class='add'>+    double min;</div><div class='add'>+    double max;</div><div class='add'>+    double avg;</div><div class='add'>+    uint64_t total;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ios_global_stats {</div><div class='del'>-        gf_atomic_t     data_written;</div><div class='del'>-        gf_atomic_t     data_read;</div><div class='del'>-        gf_atomic_t     block_count_write[IOS_BLOCK_COUNT_SIZE];</div><div class='del'>-        gf_atomic_t     block_count_read[IOS_BLOCK_COUNT_SIZE];</div><div class='del'>-        gf_atomic_t     fop_hits[GF_FOP_MAXVALUE];</div><div class='del'>-        gf_atomic_t     upcall_hits[GF_UPCALL_FLAGS_MAXVALUE];</div><div class='del'>-        struct timeval  started_at;</div><div class='del'>-        struct ios_lat  latency[GF_FOP_MAXVALUE];</div><div class='del'>-        uint64_t        nr_opens;</div><div class='del'>-        uint64_t        max_nr_opens;</div><div class='del'>-        struct timeval  max_openfd_time;</div><div class='add'>+    gf_atomic_t data_written;</div><div class='add'>+    gf_atomic_t data_read;</div><div class='add'>+    gf_atomic_t block_count_write[IOS_BLOCK_COUNT_SIZE];</div><div class='add'>+    gf_atomic_t block_count_read[IOS_BLOCK_COUNT_SIZE];</div><div class='add'>+    gf_atomic_t fop_hits[GF_FOP_MAXVALUE];</div><div class='add'>+    gf_atomic_t upcall_hits[GF_UPCALL_FLAGS_MAXVALUE];</div><div class='add'>+    struct timeval started_at;</div><div class='add'>+    struct ios_lat latency[GF_FOP_MAXVALUE];</div><div class='add'>+    uint64_t nr_opens;</div><div class='add'>+    uint64_t max_nr_opens;</div><div class='add'>+    struct timeval max_openfd_time;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> typedef enum {</div><div class='del'>-        IOS_DUMP_TYPE_NONE      = 0,</div><div class='del'>-        IOS_DUMP_TYPE_FILE      = 1,</div><div class='del'>-        IOS_DUMP_TYPE_DICT      = 2,</div><div class='del'>-        IOS_DUMP_TYPE_JSON_FILE = 3,</div><div class='del'>-        IOS_DUMP_TYPE_SAMPLES   = 4,</div><div class='del'>-        IOS_DUMP_TYPE_MAX       = 5</div><div class='add'>+    IOS_DUMP_TYPE_NONE = 0,</div><div class='add'>+    IOS_DUMP_TYPE_FILE = 1,</div><div class='add'>+    IOS_DUMP_TYPE_DICT = 2,</div><div class='add'>+    IOS_DUMP_TYPE_JSON_FILE = 3,</div><div class='add'>+    IOS_DUMP_TYPE_SAMPLES = 4,</div><div class='add'>+    IOS_DUMP_TYPE_MAX = 5</div><div class='ctx'> } ios_dump_type_t;</div><div class='ctx'> </div><div class='ctx'> struct ios_conf {</div><div class='del'>-        gf_lock_t                 lock;</div><div class='del'>-        struct ios_global_stats   cumulative;</div><div class='del'>-        uint64_t                  increment;</div><div class='del'>-        struct ios_global_stats   incremental;</div><div class='del'>-        gf_boolean_t              dump_fd_stats;</div><div class='del'>-        gf_boolean_t              count_fop_hits;</div><div class='del'>-        gf_boolean_t              measure_latency;</div><div class='del'>-        struct ios_stat_head      list[IOS_STATS_TYPE_MAX];</div><div class='del'>-        struct ios_stat_head      thru_list[IOS_STATS_THRU_MAX];</div><div class='del'>-        int32_t                   ios_dump_interval;</div><div class='del'>-        pthread_t                 dump_thread;</div><div class='del'>-        gf_boolean_t              dump_thread_should_die;</div><div class='del'>-        gf_boolean_t              dump_thread_running;</div><div class='del'>-        gf_lock_t                 ios_sampling_lock;</div><div class='del'>-        int32_t                   ios_sample_interval;</div><div class='del'>-        int32_t                   ios_sample_buf_size;</div><div class='del'>-        ios_sample_buf_t          *ios_sample_buf;</div><div class='del'>-        struct dnscache           *dnscache;</div><div class='del'>-        int32_t                   ios_dnscache_ttl_sec;</div><div class='del'>-        /*</div><div class='del'>-         * What we really need here is just a unique value to keep files</div><div class='del'>-         * created by this instance distinct from those created by any other.</div><div class='del'>-         * On the client side this isn't a problem, so we just use the</div><div class='del'>-         * translator name.  On the server side conflicts can occur, so the</div><div class='del'>-         * volfile-generation code automatically sets this (via an option)</div><div class='del'>-         * to be the brick path.</div><div class='del'>-         *</div><div class='del'>-         * NB While the *field* name has changed, it didn't seem worth changing</div><div class='del'>-         * all of the cases where "xlator_name" is used as a *variable* name.</div><div class='del'>-         */</div><div class='del'>-        char                      *unique_id;</div><div class='del'>-        ios_dump_type_t            dump_format;</div><div class='del'>-        char                      *dump_format_str;</div><div class='add'>+    gf_lock_t lock;</div><div class='add'>+    struct ios_global_stats cumulative;</div><div class='add'>+    uint64_t increment;</div><div class='add'>+    struct ios_global_stats incremental;</div><div class='add'>+    gf_boolean_t dump_fd_stats;</div><div class='add'>+    gf_boolean_t count_fop_hits;</div><div class='add'>+    gf_boolean_t measure_latency;</div><div class='add'>+    struct ios_stat_head list[IOS_STATS_TYPE_MAX];</div><div class='add'>+    struct ios_stat_head thru_list[IOS_STATS_THRU_MAX];</div><div class='add'>+    int32_t ios_dump_interval;</div><div class='add'>+    pthread_t dump_thread;</div><div class='add'>+    gf_boolean_t dump_thread_should_die;</div><div class='add'>+    gf_boolean_t dump_thread_running;</div><div class='add'>+    gf_lock_t ios_sampling_lock;</div><div class='add'>+    int32_t ios_sample_interval;</div><div class='add'>+    int32_t ios_sample_buf_size;</div><div class='add'>+    ios_sample_buf_t *ios_sample_buf;</div><div class='add'>+    struct dnscache *dnscache;</div><div class='add'>+    int32_t ios_dnscache_ttl_sec;</div><div class='add'>+    /*</div><div class='add'>+     * What we really need here is just a unique value to keep files</div><div class='add'>+     * created by this instance distinct from those created by any other.</div><div class='add'>+     * On the client side this isn't a problem, so we just use the</div><div class='add'>+     * translator name.  On the server side conflicts can occur, so the</div><div class='add'>+     * volfile-generation code automatically sets this (via an option)</div><div class='add'>+     * to be the brick path.</div><div class='add'>+     *</div><div class='add'>+     * NB While the *field* name has changed, it didn't seem worth changing</div><div class='add'>+     * all of the cases where "xlator_name" is used as a *variable* name.</div><div class='add'>+     */</div><div class='add'>+    char *unique_id;</div><div class='add'>+    ios_dump_type_t dump_format;</div><div class='add'>+    char *dump_format_str;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct ios_fd {</div><div class='del'>-        char           *filename;</div><div class='del'>-        gf_atomic_t     data_written;</div><div class='del'>-        gf_atomic_t     data_read;</div><div class='del'>-        gf_atomic_t     block_count_write[IOS_BLOCK_COUNT_SIZE];</div><div class='del'>-        gf_atomic_t     block_count_read[IOS_BLOCK_COUNT_SIZE];</div><div class='del'>-        struct timeval  opened_at;</div><div class='add'>+    char *filename;</div><div class='add'>+    gf_atomic_t data_written;</div><div class='add'>+    gf_atomic_t data_read;</div><div class='add'>+    gf_atomic_t block_count_write[IOS_BLOCK_COUNT_SIZE];</div><div class='add'>+    gf_atomic_t block_count_read[IOS_BLOCK_COUNT_SIZE];</div><div class='add'>+    struct timeval opened_at;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ios_dump_args {</div><div class='del'>-        ios_dump_type_t type;</div><div class='del'>-        union {</div><div class='del'>-                FILE *logfp;</div><div class='del'>-                dict_t *dict;</div><div class='del'>-        } u;</div><div class='add'>+    ios_dump_type_t type;</div><div class='add'>+    union {</div><div class='add'>+        FILE *logfp;</div><div class='add'>+        dict_t *dict;</div><div class='add'>+    } u;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-typedef int (*block_dump_func) (xlator_t *, struct ios_dump_args*,</div><div class='del'>-                                    int , int , uint64_t ) ;</div><div class='add'>+typedef int (*block_dump_func)(xlator_t *, struct ios_dump_args *, int, int,</div><div class='add'>+                               uint64_t);</div><div class='ctx'> </div><div class='ctx'> struct ios_local {</div><div class='del'>-        struct timeval  wind_at;</div><div class='del'>-        struct timeval  unwind_at;</div><div class='add'>+    struct timeval wind_at;</div><div class='add'>+    struct timeval unwind_at;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[];</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-is_fop_latency_started (call_frame_t *frame)</div><div class='add'>+is_fop_latency_started(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (frame);</div><div class='del'>-        struct timeval epoch = {0,};</div><div class='del'>-        return memcmp (&amp;frame-&gt;begin, &amp;epoch, sizeof (epoch));</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    struct timeval epoch = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    return memcmp(&amp;frame-&gt;begin, &amp;epoch, sizeof(epoch));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define _IOS_SAMP_DIR DEFAULT_LOG_FILE_DIRECTORY "/samples"</div><div class='hunk'>@@ -221,354 +220,334 @@ is_fop_latency_started (call_frame_t *frame)</div><div class='ctx'> #define _IOS_DUMP_DIR DATADIR "/db/glusterd/stats"</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define END_FOP_LATENCY(frame, op)                                      \</div><div class='del'>-        do {                                                            \</div><div class='del'>-                struct ios_conf  *conf = NULL;                          \</div><div class='del'>-                                                                        \</div><div class='del'>-                conf = this-&gt;private;                                   \</div><div class='del'>-                if (conf &amp;&amp; conf-&gt;measure_latency) {                    \</div><div class='del'>-                        timespec_now (&amp;frame-&gt;end);                     \</div><div class='del'>-                        update_ios_latency (conf, frame, GF_FOP_##op);  \</div><div class='del'>-                }                                                       \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define START_FOP_LATENCY(frame)                                         \</div><div class='del'>-        do {                                                             \</div><div class='del'>-                struct ios_conf  *conf = NULL;                           \</div><div class='del'>-                                                                         \</div><div class='del'>-                conf = this-&gt;private;                                    \</div><div class='del'>-                if (conf &amp;&amp; conf-&gt;measure_latency) {                     \</div><div class='del'>-                        timespec_now (&amp;frame-&gt;begin);                    \</div><div class='del'>-                } else {                                                 \</div><div class='del'>-                        memset (&amp;frame-&gt;begin, 0, sizeof (frame-&gt;begin));\</div><div class='del'>-                }                                                        \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define BUMP_FOP(op)                                                    \</div><div class='del'>-        do {                                                            \</div><div class='del'>-                struct ios_conf  *conf = NULL;                          \</div><div class='del'>-                                                                        \</div><div class='del'>-                conf = this-&gt;private;                                   \</div><div class='del'>-                if (!conf)                                              \</div><div class='del'>-                        break;                                          \</div><div class='del'>-                GF_ATOMIC_INC (conf-&gt;cumulative.fop_hits[GF_FOP_##op]); \</div><div class='del'>-                GF_ATOMIC_INC (conf-&gt;incremental.fop_hits[GF_FOP_##op]);\</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define UPDATE_PROFILE_STATS(frame, op)                                       \</div><div class='del'>-        do {                                                                  \</div><div class='del'>-                struct ios_conf  *conf = NULL;                                \</div><div class='del'>-                                                                              \</div><div class='del'>-                if (!is_fop_latency_started (frame))                          \</div><div class='del'>-                        break;                                                \</div><div class='del'>-                conf = this-&gt;private;                                         \</div><div class='del'>-                if (conf &amp;&amp; conf-&gt;measure_latency &amp;&amp;                          \</div><div class='del'>-                    conf-&gt;count_fop_hits) {                                   \</div><div class='del'>-                        BUMP_FOP (op);                                        \</div><div class='del'>-                        timespec_now (&amp;frame-&gt;end);                           \</div><div class='del'>-                        update_ios_latency (conf, frame, GF_FOP_##op);        \</div><div class='del'>-                }                                                             \</div><div class='del'>-        } while (0)</div><div class='add'>+#define END_FOP_LATENCY(frame, op)                                             \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        struct ios_conf *conf = NULL;                                          \</div><div class='add'>+                                                                               \</div><div class='add'>+        conf = this-&gt;private;                                                  \</div><div class='add'>+        if (conf &amp;&amp; conf-&gt;measure_latency) {                                   \</div><div class='add'>+            timespec_now(&amp;frame-&gt;end);                                         \</div><div class='add'>+            update_ios_latency(conf, frame, GF_FOP_##op);                      \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define START_FOP_LATENCY(frame)                                               \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        struct ios_conf *conf = NULL;                                          \</div><div class='add'>+                                                                               \</div><div class='add'>+        conf = this-&gt;private;                                                  \</div><div class='add'>+        if (conf &amp;&amp; conf-&gt;measure_latency) {                                   \</div><div class='add'>+            timespec_now(&amp;frame-&gt;begin);                                       \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            memset(&amp;frame-&gt;begin, 0, sizeof(frame-&gt;begin));                    \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define BUMP_FOP(op)                                                           \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        struct ios_conf *conf = NULL;                                          \</div><div class='add'>+                                                                               \</div><div class='add'>+        conf = this-&gt;private;                                                  \</div><div class='add'>+        if (!conf)                                                             \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        GF_ATOMIC_INC(conf-&gt;cumulative.fop_hits[GF_FOP_##op]);                 \</div><div class='add'>+        GF_ATOMIC_INC(conf-&gt;incremental.fop_hits[GF_FOP_##op]);                \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define UPDATE_PROFILE_STATS(frame, op)                                        \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        struct ios_conf *conf = NULL;                                          \</div><div class='add'>+                                                                               \</div><div class='add'>+        if (!is_fop_latency_started(frame))                                    \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        conf = this-&gt;private;                                                  \</div><div class='add'>+        if (conf &amp;&amp; conf-&gt;measure_latency &amp;&amp; conf-&gt;count_fop_hits) {           \</div><div class='add'>+            BUMP_FOP(op);                                                      \</div><div class='add'>+            timespec_now(&amp;frame-&gt;end);                                         \</div><div class='add'>+            update_ios_latency(conf, frame, GF_FOP_##op);                      \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> #define BUMP_THROUGHPUT(iosstat, type)                                         \</div><div class='del'>-        do {                                                                   \</div><div class='del'>-                struct ios_conf         *conf = NULL;                          \</div><div class='del'>-                double                   elapsed;                              \</div><div class='del'>-                struct timespec         *begin, *end;                          \</div><div class='del'>-                double                   throughput;                           \</div><div class='del'>-                int                      flag = 0;                             \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        struct ios_conf *conf = NULL;                                          \</div><div class='add'>+        double elapsed;                                                        \</div><div class='add'>+        struct timespec *begin, *end;                                          \</div><div class='add'>+        double throughput;                                                     \</div><div class='add'>+        int flag = 0;                                                          \</div><div class='ctx'>                                                                                \</div><div class='del'>-                begin = &amp;frame-&gt;begin;                                         \</div><div class='del'>-                end   = &amp;frame-&gt;end;                                           \</div><div class='add'>+        begin = &amp;frame-&gt;begin;                                                 \</div><div class='add'>+        end = &amp;frame-&gt;end;                                                     \</div><div class='ctx'>                                                                                \</div><div class='del'>-                elapsed = ((end-&gt;tv_sec - begin-&gt;tv_sec) * 1e9                 \</div><div class='del'>-                           + (end-&gt;tv_nsec - begin-&gt;tv_nsec)) / 1000;          \</div><div class='del'>-                throughput = op_ret / elapsed;                                 \</div><div class='add'>+        elapsed = ((end-&gt;tv_sec - begin-&gt;tv_sec) * 1e9 +                       \</div><div class='add'>+                   (end-&gt;tv_nsec - begin-&gt;tv_nsec)) /                          \</div><div class='add'>+                  1000;                                                        \</div><div class='add'>+        throughput = op_ret / elapsed;                                         \</div><div class='ctx'>                                                                                \</div><div class='del'>-                conf = this-&gt;private;                                          \</div><div class='del'>-                LOCK (&amp;iosstat-&gt;lock);                                         \</div><div class='del'>-                {                                                              \</div><div class='del'>-                        if (iosstat-&gt;thru_counters[type].throughput            \</div><div class='del'>-                                &lt;= throughput) {                               \</div><div class='del'>-                                iosstat-&gt;thru_counters[type].throughput =      \</div><div class='del'>-                                                                throughput;    \</div><div class='del'>-                                gettimeofday (&amp;iosstat-&gt;                       \</div><div class='del'>-                                             thru_counters[type].time, NULL);  \</div><div class='del'>-                               flag = 1;                                       \</div><div class='del'>-                        }                                                      \</div><div class='del'>-                }                                                              \</div><div class='del'>-                UNLOCK (&amp;iosstat-&gt;lock);                                       \</div><div class='del'>-                if (flag)                                                      \</div><div class='del'>-                       ios_stat_add_to_list (&amp;conf-&gt;thru_list[type],           \</div><div class='del'>-                                               throughput, iosstat);           \</div><div class='del'>-        } while (0)</div><div class='add'>+        conf = this-&gt;private;                                                  \</div><div class='add'>+        LOCK(&amp;iosstat-&gt;lock);                                                  \</div><div class='add'>+        {                                                                      \</div><div class='add'>+            if (iosstat-&gt;thru_counters[type].throughput &lt;= throughput) {       \</div><div class='add'>+                iosstat-&gt;thru_counters[type].throughput = throughput;          \</div><div class='add'>+                gettimeofday(&amp;iosstat-&gt;thru_counters[type].time, NULL);        \</div><div class='add'>+                flag = 1;                                                      \</div><div class='add'>+            }                                                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        UNLOCK(&amp;iosstat-&gt;lock);                                                \</div><div class='add'>+        if (flag)                                                              \</div><div class='add'>+            ios_stat_add_to_list(&amp;conf-&gt;thru_list[type], throughput, iosstat); \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ios_fd_ctx_get (fd_t *fd, xlator_t *this, struct ios_fd **iosfd)</div><div class='add'>+ios_fd_ctx_get(fd_t *fd, xlator_t *this, struct ios_fd **iosfd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t      iosfd64 = 0;</div><div class='del'>-        unsigned long iosfdlong = 0;</div><div class='del'>-        int           ret = 0;</div><div class='add'>+    uint64_t iosfd64 = 0;</div><div class='add'>+    unsigned long iosfdlong = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_get (fd, this, &amp;iosfd64);</div><div class='del'>-        iosfdlong = iosfd64;</div><div class='del'>-        if (ret != -1)</div><div class='del'>-                *iosfd = (void *) iosfdlong;</div><div class='add'>+    ret = fd_ctx_get(fd, this, &amp;iosfd64);</div><div class='add'>+    iosfdlong = iosfd64;</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        *iosfd = (void *)iosfdlong;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-ios_fd_ctx_set (fd_t *fd, xlator_t *this, struct ios_fd *iosfd)</div><div class='add'>+ios_fd_ctx_set(fd_t *fd, xlator_t *this, struct ios_fd *iosfd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t   iosfd64 = 0;</div><div class='del'>-        int        ret = 0;</div><div class='add'>+    uint64_t iosfd64 = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        iosfd64 = (unsigned long) iosfd;</div><div class='del'>-        ret = fd_ctx_set (fd, this, iosfd64);</div><div class='add'>+    iosfd64 = (unsigned long)iosfd;</div><div class='add'>+    ret = fd_ctx_set(fd, this, iosfd64);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-ios_stat_ref (struct ios_stat *iosstat)</div><div class='add'>+ios_stat_ref(struct ios_stat *iosstat)</div><div class='ctx'> {</div><div class='del'>-        uint64_t refcnt = 0;</div><div class='del'>-        refcnt = GF_ATOMIC_INC (iosstat-&gt;refcnt);</div><div class='add'>+    uint64_t refcnt = 0;</div><div class='add'>+    refcnt = GF_ATOMIC_INC(iosstat-&gt;refcnt);</div><div class='ctx'> </div><div class='del'>-        return refcnt;</div><div class='add'>+    return refcnt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-ios_stat_unref (struct ios_stat *iosstat)</div><div class='add'>+ios_stat_unref(struct ios_stat *iosstat)</div><div class='ctx'> {</div><div class='del'>-        int cleanup = 0;</div><div class='del'>-        uint64_t refcnt = 0;</div><div class='add'>+    int cleanup = 0;</div><div class='add'>+    uint64_t refcnt = 0;</div><div class='ctx'> </div><div class='del'>-        refcnt = GF_ATOMIC_DEC (iosstat-&gt;refcnt);</div><div class='del'>-        if (refcnt == 0) {</div><div class='del'>-                if (iosstat-&gt;filename) {</div><div class='del'>-                        GF_FREE (iosstat-&gt;filename);</div><div class='del'>-                        iosstat-&gt;filename = NULL;</div><div class='del'>-                }</div><div class='del'>-                cleanup = 1;</div><div class='add'>+    refcnt = GF_ATOMIC_DEC(iosstat-&gt;refcnt);</div><div class='add'>+    if (refcnt == 0) {</div><div class='add'>+        if (iosstat-&gt;filename) {</div><div class='add'>+            GF_FREE(iosstat-&gt;filename);</div><div class='add'>+            iosstat-&gt;filename = NULL;</div><div class='ctx'>         }</div><div class='add'>+        cleanup = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (cleanup) {</div><div class='del'>-                LOCK_DESTROY (&amp;iosstat-&gt;lock);</div><div class='del'>-                GF_FREE (iosstat);</div><div class='del'>-                iosstat = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (cleanup) {</div><div class='add'>+        LOCK_DESTROY(&amp;iosstat-&gt;lock);</div><div class='add'>+        GF_FREE(iosstat);</div><div class='add'>+        iosstat = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-ios_stat_add_to_list (struct ios_stat_head *list_head, uint64_t value,</div><div class='del'>-                            struct ios_stat *iosstat)</div><div class='del'>-{</div><div class='del'>-        struct ios_stat_list *new = NULL;</div><div class='del'>-        struct ios_stat_list *entry = NULL;</div><div class='del'>-        struct ios_stat_list *t = NULL;</div><div class='del'>-        struct ios_stat_list *list_entry = NULL;</div><div class='del'>-        struct ios_stat_list *tmp = NULL;</div><div class='del'>-        struct ios_stat_list *last = NULL;</div><div class='del'>-        struct ios_stat      *stat = NULL;</div><div class='del'>-        int                   cnt = 0;</div><div class='del'>-        int                   found = 0;</div><div class='del'>-        int                   reposition = 0;</div><div class='del'>-        double                min_count = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;list_head-&gt;lock);</div><div class='add'>+ios_stat_add_to_list(struct ios_stat_head *list_head, uint64_t value,</div><div class='add'>+                     struct ios_stat *iosstat)</div><div class='add'>+{</div><div class='add'>+    struct ios_stat_list *new = NULL;</div><div class='add'>+    struct ios_stat_list *entry = NULL;</div><div class='add'>+    struct ios_stat_list *t = NULL;</div><div class='add'>+    struct ios_stat_list *list_entry = NULL;</div><div class='add'>+    struct ios_stat_list *tmp = NULL;</div><div class='add'>+    struct ios_stat_list *last = NULL;</div><div class='add'>+    struct ios_stat *stat = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    int found = 0;</div><div class='add'>+    int reposition = 0;</div><div class='add'>+    double min_count = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (list_head-&gt;min_cnt == 0)</div><div class='add'>+            list_head-&gt;min_cnt = value;</div><div class='add'>+        if ((list_head-&gt;members == MAX_LIST_MEMBERS) &amp;&amp;</div><div class='add'>+            (list_head-&gt;min_cnt &gt; value))</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        list_for_each_entry_safe(entry, t, &amp;list_head-&gt;iosstats-&gt;list, list)</div><div class='ctx'>         {</div><div class='del'>-</div><div class='del'>-                if (list_head-&gt;min_cnt == 0)</div><div class='add'>+            cnt++;</div><div class='add'>+            if (cnt == list_head-&gt;members)</div><div class='add'>+                last = entry;</div><div class='add'>+</div><div class='add'>+            if (!gf_uuid_compare(iosstat-&gt;gfid, entry-&gt;iosstat-&gt;gfid)) {</div><div class='add'>+                list_entry = entry;</div><div class='add'>+                found = cnt;</div><div class='add'>+                entry-&gt;value = value;</div><div class='add'>+                if (!reposition) {</div><div class='add'>+                    if (cnt == list_head-&gt;members)</div><div class='ctx'>                         list_head-&gt;min_cnt = value;</div><div class='del'>-                if ((list_head-&gt;members == MAX_LIST_MEMBERS) &amp;&amp;</div><div class='del'>-                     (list_head-&gt;min_cnt &gt; value))</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (entry, t,</div><div class='del'>-                              &amp;list_head-&gt;iosstats-&gt;list, list) {</div><div class='del'>-                        cnt++;</div><div class='del'>-                        if (cnt == list_head-&gt;members)</div><div class='del'>-                                last = entry;</div><div class='del'>-</div><div class='del'>-                        if (!gf_uuid_compare (iosstat-&gt;gfid,</div><div class='del'>-                            entry-&gt;iosstat-&gt;gfid)) {</div><div class='del'>-                                list_entry = entry;</div><div class='del'>-                                found = cnt;</div><div class='del'>-                                entry-&gt;value = value;</div><div class='del'>-                                if (!reposition) {</div><div class='del'>-                                        if (cnt == list_head-&gt;members)</div><div class='del'>-                                                list_head-&gt;min_cnt = value;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                break;</div><div class='del'>-                        } else if (entry-&gt;value &lt;= value &amp;&amp; !reposition) {</div><div class='del'>-                                reposition = cnt;</div><div class='del'>-                                tmp = entry;</div><div class='del'>-                                if (cnt == list_head-&gt;members - 1)</div><div class='del'>-                                        min_count = entry-&gt;value;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (found) {</div><div class='del'>-                        list_del (&amp;list_entry-&gt;list);</div><div class='del'>-                        list_add_tail (&amp;list_entry-&gt;list, &amp;tmp-&gt;list);</div><div class='del'>-                        if (min_count)</div><div class='del'>-                                list_head-&gt;min_cnt = min_count;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else if (list_head-&gt;members == MAX_LIST_MEMBERS &amp;&amp; reposition) {</div><div class='del'>-                        new = GF_CALLOC (1, sizeof (*new),</div><div class='del'>-                                        gf_io_stats_mt_ios_stat_list);</div><div class='del'>-                        new-&gt;iosstat = iosstat;</div><div class='del'>-                        new-&gt;value = value;</div><div class='del'>-                        ios_stat_ref (iosstat);</div><div class='del'>-                        list_add_tail (&amp;new-&gt;list, &amp;tmp-&gt;list);</div><div class='del'>-                        if (last) {</div><div class='del'>-                                stat = last-&gt;iosstat;</div><div class='del'>-                                last-&gt;iosstat = NULL;</div><div class='del'>-                                ios_stat_unref (stat);</div><div class='del'>-                                list_del (&amp;last-&gt;list);</div><div class='del'>-                                GF_FREE (last);</div><div class='del'>-                        }</div><div class='del'>-                        if (reposition == MAX_LIST_MEMBERS)</div><div class='del'>-                                list_head-&gt;min_cnt = value;</div><div class='del'>-                        else if (min_count) {</div><div class='del'>-                                list_head-&gt;min_cnt = min_count;</div><div class='del'>-                        }</div><div class='del'>-                } else if (list_head-&gt;members &lt; MAX_LIST_MEMBERS) {</div><div class='del'>-                        new  = GF_CALLOC (1, sizeof (*new),</div><div class='del'>-                                          gf_io_stats_mt_ios_stat_list);</div><div class='del'>-                        new-&gt;iosstat = iosstat;</div><div class='del'>-                        new-&gt;value = value;</div><div class='del'>-                        ios_stat_ref (iosstat);</div><div class='del'>-                        if (reposition) {</div><div class='del'>-                                list_add_tail (&amp;new-&gt;list, &amp;tmp-&gt;list);</div><div class='del'>-                        } else {</div><div class='del'>-                                list_add_tail (&amp;new-&gt;list, &amp;entry-&gt;list);</div><div class='del'>-                        }</div><div class='del'>-                        list_head-&gt;members++;</div><div class='del'>-                        if (list_head-&gt;min_cnt &gt; value)</div><div class='del'>-                                list_head-&gt;min_cnt = value;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            } else if (entry-&gt;value &lt;= value &amp;&amp; !reposition) {</div><div class='add'>+                reposition = cnt;</div><div class='add'>+                tmp = entry;</div><div class='add'>+                if (cnt == list_head-&gt;members - 1)</div><div class='add'>+                    min_count = entry-&gt;value;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        if (found) {</div><div class='add'>+            list_del(&amp;list_entry-&gt;list);</div><div class='add'>+            list_add_tail(&amp;list_entry-&gt;list, &amp;tmp-&gt;list);</div><div class='add'>+            if (min_count)</div><div class='add'>+                list_head-&gt;min_cnt = min_count;</div><div class='add'>+            goto out;</div><div class='add'>+        } else if (list_head-&gt;members == MAX_LIST_MEMBERS &amp;&amp; reposition) {</div><div class='add'>+            new = GF_CALLOC(1, sizeof(*new), gf_io_stats_mt_ios_stat_list);</div><div class='add'>+            new-&gt;iosstat = iosstat;</div><div class='add'>+            new-&gt;value = value;</div><div class='add'>+            ios_stat_ref(iosstat);</div><div class='add'>+            list_add_tail(&amp;new-&gt;list, &amp;tmp-&gt;list);</div><div class='add'>+            if (last) {</div><div class='add'>+                stat = last-&gt;iosstat;</div><div class='add'>+                last-&gt;iosstat = NULL;</div><div class='add'>+                ios_stat_unref(stat);</div><div class='add'>+                list_del(&amp;last-&gt;list);</div><div class='add'>+                GF_FREE(last);</div><div class='add'>+            }</div><div class='add'>+            if (reposition == MAX_LIST_MEMBERS)</div><div class='add'>+                list_head-&gt;min_cnt = value;</div><div class='add'>+            else if (min_count) {</div><div class='add'>+                list_head-&gt;min_cnt = min_count;</div><div class='add'>+            }</div><div class='add'>+        } else if (list_head-&gt;members &lt; MAX_LIST_MEMBERS) {</div><div class='add'>+            new = GF_CALLOC(1, sizeof(*new), gf_io_stats_mt_ios_stat_list);</div><div class='add'>+            new-&gt;iosstat = iosstat;</div><div class='add'>+            new-&gt;value = value;</div><div class='add'>+            ios_stat_ref(iosstat);</div><div class='add'>+            if (reposition) {</div><div class='add'>+                list_add_tail(&amp;new-&gt;list, &amp;tmp-&gt;list);</div><div class='add'>+            } else {</div><div class='add'>+                list_add_tail(&amp;new-&gt;list, &amp;entry-&gt;list);</div><div class='add'>+            }</div><div class='add'>+            list_head-&gt;members++;</div><div class='add'>+            if (list_head-&gt;min_cnt &gt; value)</div><div class='add'>+                list_head-&gt;min_cnt = value;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;list_head-&gt;lock);</div><div class='del'>-        return 0;</div><div class='add'>+    UNLOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-ios_bump_read (xlator_t *this, fd_t *fd, size_t len)</div><div class='del'>-{</div><div class='del'>-        struct ios_conf  *conf = NULL;</div><div class='del'>-        struct ios_fd    *iosfd = NULL;</div><div class='del'>-        int               lb2 = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        lb2 = log_base2 (len);</div><div class='del'>-        ios_fd_ctx_get (fd, this, &amp;iosfd);</div><div class='del'>-        if (!conf)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        GF_ATOMIC_ADD (conf-&gt;cumulative.data_read, len);</div><div class='del'>-        GF_ATOMIC_ADD (conf-&gt;incremental.data_read, len);</div><div class='del'>-        GF_ATOMIC_INC (conf-&gt;cumulative.block_count_read[lb2]);</div><div class='del'>-        GF_ATOMIC_INC (conf-&gt;incremental.block_count_read[lb2]);</div><div class='del'>-</div><div class='del'>-        if (iosfd) {</div><div class='del'>-                GF_ATOMIC_ADD (iosfd-&gt;data_read, len);</div><div class='del'>-                GF_ATOMIC_INC (iosfd-&gt;block_count_read[lb2]);</div><div class='del'>-        }</div><div class='del'>-}</div><div class='add'>+ios_bump_read(xlator_t *this, fd_t *fd, size_t len)</div><div class='add'>+{</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    struct ios_fd *iosfd = NULL;</div><div class='add'>+    int lb2 = 0;</div><div class='ctx'> </div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    lb2 = log_base2(len);</div><div class='add'>+    ios_fd_ctx_get(fd, this, &amp;iosfd);</div><div class='add'>+    if (!conf)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-ios_bump_write (xlator_t *this, fd_t *fd, size_t len)</div><div class='del'>-{</div><div class='del'>-        struct ios_conf  *conf = NULL;</div><div class='del'>-        struct ios_fd    *iosfd = NULL;</div><div class='del'>-        int               lb2 = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        lb2 = log_base2 (len);</div><div class='del'>-        ios_fd_ctx_get (fd, this, &amp;iosfd);</div><div class='del'>-        if (!conf)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        GF_ATOMIC_ADD (conf-&gt;cumulative.data_written, len);</div><div class='del'>-        GF_ATOMIC_ADD (conf-&gt;incremental.data_written, len);</div><div class='del'>-        GF_ATOMIC_INC (conf-&gt;cumulative.block_count_write[lb2]);</div><div class='del'>-        GF_ATOMIC_INC (conf-&gt;incremental.block_count_write[lb2]);</div><div class='del'>-</div><div class='del'>-        if (iosfd) {</div><div class='del'>-                GF_ATOMIC_ADD (iosfd-&gt;data_written, len);</div><div class='del'>-                GF_ATOMIC_INC (iosfd-&gt;block_count_write[lb2]);</div><div class='del'>-        }</div><div class='del'>-}</div><div class='add'>+    GF_ATOMIC_ADD(conf-&gt;cumulative.data_read, len);</div><div class='add'>+    GF_ATOMIC_ADD(conf-&gt;incremental.data_read, len);</div><div class='add'>+    GF_ATOMIC_INC(conf-&gt;cumulative.block_count_read[lb2]);</div><div class='add'>+    GF_ATOMIC_INC(conf-&gt;incremental.block_count_read[lb2]);</div><div class='ctx'> </div><div class='add'>+    if (iosfd) {</div><div class='add'>+        GF_ATOMIC_ADD(iosfd-&gt;data_read, len);</div><div class='add'>+        GF_ATOMIC_INC(iosfd-&gt;block_count_read[lb2]);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ios_bump_upcall (xlator_t *this, gf_upcall_flags_t event)</div><div class='add'>+ios_bump_write(xlator_t *this, fd_t *fd, size_t len)</div><div class='ctx'> {</div><div class='del'>-        struct ios_conf  *conf = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    struct ios_fd *iosfd = NULL;</div><div class='add'>+    int lb2 = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                return;</div><div class='del'>-        if (conf-&gt;count_fop_hits) {</div><div class='del'>-                GF_ATOMIC_INC (conf-&gt;cumulative.upcall_hits[event]);</div><div class='del'>-                GF_ATOMIC_INC (conf-&gt;incremental.upcall_hits[event]);</div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    lb2 = log_base2(len);</div><div class='add'>+    ios_fd_ctx_get(fd, this, &amp;iosfd);</div><div class='add'>+    if (!conf)</div><div class='add'>+        return;</div><div class='add'>+</div><div class='add'>+    GF_ATOMIC_ADD(conf-&gt;cumulative.data_written, len);</div><div class='add'>+    GF_ATOMIC_ADD(conf-&gt;incremental.data_written, len);</div><div class='add'>+    GF_ATOMIC_INC(conf-&gt;cumulative.block_count_write[lb2]);</div><div class='add'>+    GF_ATOMIC_INC(conf-&gt;incremental.block_count_write[lb2]);</div><div class='add'>+</div><div class='add'>+    if (iosfd) {</div><div class='add'>+        GF_ATOMIC_ADD(iosfd-&gt;data_written, len);</div><div class='add'>+        GF_ATOMIC_INC(iosfd-&gt;block_count_write[lb2]);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static void</div><div class='add'>+ios_bump_upcall(xlator_t *this, gf_upcall_flags_t event)</div><div class='add'>+{</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return;</div><div class='add'>+    if (conf-&gt;count_fop_hits) {</div><div class='add'>+        GF_ATOMIC_INC(conf-&gt;cumulative.upcall_hits[event]);</div><div class='add'>+        GF_ATOMIC_INC(conf-&gt;incremental.upcall_hits[event]);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ios_bump_stats (xlator_t *this, struct ios_stat *iosstat,</div><div class='del'>-                ios_stats_type_t type)</div><div class='add'>+ios_bump_stats(xlator_t *this, struct ios_stat *iosstat, ios_stats_type_t type)</div><div class='ctx'> {</div><div class='del'>-        struct ios_conf         *conf = NULL;</div><div class='del'>-        uint64_t                 value = 0;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        value = GF_ATOMIC_INC (iosstat-&gt;counters[type]);</div><div class='del'>-        ios_stat_add_to_list (&amp;conf-&gt;list[type], value, iosstat);</div><div class='add'>+    value = GF_ATOMIC_INC(iosstat-&gt;counters[type]);</div><div class='add'>+    ios_stat_add_to_list(&amp;conf-&gt;list[type], value, iosstat);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ios_inode_ctx_set (inode_t *inode, xlator_t *this, struct ios_stat *iosstat)</div><div class='add'>+ios_inode_ctx_set(inode_t *inode, xlator_t *this, struct ios_stat *iosstat)</div><div class='ctx'> {</div><div class='del'>-        uint64_t   iosstat64 = 0;</div><div class='del'>-        int        ret     = 0;</div><div class='add'>+    uint64_t iosstat64 = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ios_stat_ref (iosstat);</div><div class='del'>-        iosstat64 = (unsigned long) iosstat;</div><div class='del'>-        ret = inode_ctx_put (inode, this, iosstat64);</div><div class='del'>-        return ret;</div><div class='add'>+    ios_stat_ref(iosstat);</div><div class='add'>+    iosstat64 = (unsigned long)iosstat;</div><div class='add'>+    ret = inode_ctx_put(inode, this, iosstat64);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ios_inode_ctx_get (inode_t *inode, xlator_t *this, struct ios_stat **iosstat)</div><div class='add'>+ios_inode_ctx_get(inode_t *inode, xlator_t *this, struct ios_stat **iosstat)</div><div class='ctx'> {</div><div class='del'>-        uint64_t      iosstat64 = 0;</div><div class='del'>-        unsigned long iosstatlong = 0;</div><div class='del'>-        int           ret = 0;</div><div class='add'>+    uint64_t iosstat64 = 0;</div><div class='add'>+    unsigned long iosstatlong = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;iosstat64);</div><div class='del'>-        iosstatlong = iosstat64;</div><div class='del'>-        if (ret != -1)</div><div class='del'>-                *iosstat = (void *) iosstatlong;</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;iosstat64);</div><div class='add'>+    iosstatlong = iosstat64;</div><div class='add'>+    if (ret != -1)</div><div class='add'>+        *iosstat = (void *)iosstatlong;</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -583,598 +562,575 @@ ios_inode_ctx_get (inode_t *inode, xlator_t *this, struct ios_stat **iosstat)</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='ctx'> ios_sample_buf_t *</div><div class='del'>-ios_create_sample_buf (size_t buf_size)</div><div class='add'>+ios_create_sample_buf(size_t buf_size)</div><div class='ctx'> {</div><div class='del'>-        ios_sample_buf_t *ios_sample_buf = NULL;</div><div class='del'>-        ios_sample_t     *ios_samples = NULL;</div><div class='add'>+    ios_sample_buf_t *ios_sample_buf = NULL;</div><div class='add'>+    ios_sample_t *ios_samples = NULL;</div><div class='ctx'> </div><div class='del'>-        ios_sample_buf = GF_CALLOC (1,</div><div class='del'>-                sizeof (*ios_sample_buf),</div><div class='del'>-                gf_io_stats_mt_ios_sample_buf);</div><div class='del'>-        if (!ios_sample_buf)</div><div class='del'>-                goto err;</div><div class='add'>+    ios_sample_buf = GF_CALLOC(1, sizeof(*ios_sample_buf),</div><div class='add'>+                               gf_io_stats_mt_ios_sample_buf);</div><div class='add'>+    if (!ios_sample_buf)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ios_samples = GF_CALLOC (buf_size,</div><div class='del'>-                sizeof (*ios_samples),</div><div class='del'>-                gf_io_stats_mt_ios_sample);</div><div class='add'>+    ios_samples = GF_CALLOC(buf_size, sizeof(*ios_samples),</div><div class='add'>+                            gf_io_stats_mt_ios_sample);</div><div class='ctx'> </div><div class='del'>-        if (!ios_samples)</div><div class='del'>-                goto err;</div><div class='add'>+    if (!ios_samples)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ios_sample_buf-&gt;ios_samples = ios_samples;</div><div class='del'>-        ios_sample_buf-&gt;size = buf_size;</div><div class='del'>-        ios_sample_buf-&gt;pos = 0;</div><div class='del'>-        ios_sample_buf-&gt;observed = 0;</div><div class='del'>-        ios_sample_buf-&gt;collected = 0;</div><div class='add'>+    ios_sample_buf-&gt;ios_samples = ios_samples;</div><div class='add'>+    ios_sample_buf-&gt;size = buf_size;</div><div class='add'>+    ios_sample_buf-&gt;pos = 0;</div><div class='add'>+    ios_sample_buf-&gt;observed = 0;</div><div class='add'>+    ios_sample_buf-&gt;collected = 0;</div><div class='ctx'> </div><div class='del'>-        return ios_sample_buf;</div><div class='add'>+    return ios_sample_buf;</div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (ios_sample_buf);</div><div class='del'>-        return NULL;</div><div class='add'>+    GF_FREE(ios_sample_buf);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ios_destroy_sample_buf (ios_sample_buf_t *ios_sample_buf)</div><div class='add'>+ios_destroy_sample_buf(ios_sample_buf_t *ios_sample_buf)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (ios_sample_buf-&gt;ios_samples);</div><div class='del'>-        GF_FREE (ios_sample_buf);</div><div class='add'>+    GF_FREE(ios_sample_buf-&gt;ios_samples);</div><div class='add'>+    GF_FREE(ios_sample_buf);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ios_init_sample_buf (struct ios_conf *conf)</div><div class='add'>+ios_init_sample_buf(struct ios_conf *conf)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (conf);</div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-        conf-&gt;ios_sample_buf = ios_create_sample_buf (</div><div class='del'>-                conf-&gt;ios_sample_buf_size);</div><div class='del'>-        if (!conf-&gt;ios_sample_buf)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = 0;</div><div class='add'>+    GF_ASSERT(conf);</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    conf-&gt;ios_sample_buf = ios_create_sample_buf(conf-&gt;ios_sample_buf_size);</div><div class='add'>+    if (!conf-&gt;ios_sample_buf)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='del'>-        return ret;</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ios_stats_cleanup (xlator_t *this, inode_t *inode)</div><div class='add'>+ios_stats_cleanup(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    uint64_t iosstat64 = 0;</div><div class='ctx'> </div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-        uint64_t         iosstat64 = 0;</div><div class='del'>-</div><div class='del'>-        inode_ctx_del (inode, this, &amp;iosstat64);</div><div class='del'>-        if (!iosstat64) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "could not get inode ctx");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        iosstat = (void *) (long)iosstat64;</div><div class='del'>-        if (iosstat) {</div><div class='del'>-                ios_stat_unref (iosstat);</div><div class='del'>-        }</div><div class='add'>+    inode_ctx_del(inode, this, &amp;iosstat64);</div><div class='add'>+    if (!iosstat64) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "could not get inode ctx");</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ios_log(this, logfp, fmt ...)                           \</div><div class='del'>-        do {                                                    \</div><div class='del'>-                if (logfp) {                                    \</div><div class='del'>-                        fprintf (logfp, fmt);                   \</div><div class='del'>-                        fprintf (logfp, "\n");                  \</div><div class='del'>-                }                                               \</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, fmt);        \</div><div class='del'>-        } while (0)</div><div class='add'>+    }</div><div class='add'>+    iosstat = (void *)(long)iosstat64;</div><div class='add'>+    if (iosstat) {</div><div class='add'>+        ios_stat_unref(iosstat);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define ios_log(this, logfp, fmt...)                                           \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (logfp) {                                                           \</div><div class='add'>+            fprintf(logfp, fmt);                                               \</div><div class='add'>+            fprintf(logfp, "\n");                                              \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, fmt);                                 \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ios_dump_file_stats (struct ios_stat_head *list_head, xlator_t *this,</div><div class='del'>-                     FILE *logfp)</div><div class='add'>+ios_dump_file_stats(struct ios_stat_head *list_head, xlator_t *this,</div><div class='add'>+                    FILE *logfp)</div><div class='ctx'> {</div><div class='del'>-        struct ios_stat_list *entry = NULL;</div><div class='add'>+    struct ios_stat_list *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;list_head-&gt;lock);</div><div class='add'>+    LOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(entry, &amp;list_head-&gt;iosstats-&gt;list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (entry, &amp;list_head-&gt;iosstats-&gt;list, list) {</div><div class='del'>-                        ios_log (this, logfp, "%-12.0f %s",</div><div class='del'>-                                entry-&gt;value, entry-&gt;iosstat-&gt;filename);</div><div class='del'>-                }</div><div class='add'>+            ios_log(this, logfp, "%-12.0f %s", entry-&gt;value,</div><div class='add'>+                    entry-&gt;iosstat-&gt;filename);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;list_head-&gt;lock);</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ios_dump_throughput_stats (struct ios_stat_head *list_head, xlator_t *this,</div><div class='del'>-                           FILE *logfp, ios_stats_thru_t type)</div><div class='del'>-{</div><div class='del'>-        struct ios_stat_list *entry = NULL;</div><div class='del'>-        struct timeval        time  = {0, };</div><div class='del'>-        char                  timestr[256] = {0, };</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;list_head-&gt;lock);</div><div class='add'>+ios_dump_throughput_stats(struct ios_stat_head *list_head, xlator_t *this,</div><div class='add'>+                          FILE *logfp, ios_stats_thru_t type)</div><div class='add'>+{</div><div class='add'>+    struct ios_stat_list *entry = NULL;</div><div class='add'>+    struct timeval time = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(entry, &amp;list_head-&gt;iosstats-&gt;list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (entry, &amp;list_head-&gt;iosstats-&gt;list, list) {</div><div class='del'>-                        gf_time_fmt (timestr, sizeof timestr,</div><div class='del'>-                                     entry-&gt;iosstat-&gt;thru_counters[type].time.tv_sec,</div><div class='del'>-                                     gf_timefmt_FT);</div><div class='del'>-                        snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                          ".%"GF_PRI_SUSECONDS, time.tv_usec);</div><div class='del'>-</div><div class='del'>-                        ios_log (this, logfp, "%s \t %-10.2f  \t  %s",</div><div class='del'>-                                 timestr, entry-&gt;value, entry-&gt;iosstat-&gt;filename);</div><div class='del'>-                }</div><div class='add'>+            gf_time_fmt(timestr, sizeof timestr,</div><div class='add'>+                        entry-&gt;iosstat-&gt;thru_counters[type].time.tv_sec,</div><div class='add'>+                        gf_timefmt_FT);</div><div class='add'>+            snprintf(timestr + strlen(timestr),</div><div class='add'>+                     sizeof timestr - strlen(timestr), ".%" GF_PRI_SUSECONDS,</div><div class='add'>+                     time.tv_usec);</div><div class='add'>+</div><div class='add'>+            ios_log(this, logfp, "%s \t %-10.2f  \t  %s", timestr, entry-&gt;value,</div><div class='add'>+                    entry-&gt;iosstat-&gt;filename);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;list_head-&gt;lock);</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_io_stats_get_key_prefix (xlator_t *this, char **key_prefix) {</div><div class='del'>-        char                  *key_root = "gluster";</div><div class='del'>-        char                  *xlator_name = NULL;</div><div class='del'>-        char                  *instance_name = NULL;</div><div class='del'>-        size_t                key_len = 0;</div><div class='del'>-        int                   bytes_written = 0;</div><div class='del'>-        int                   i = 0;</div><div class='del'>-        int                   ret = 0;</div><div class='del'>-        struct ios_conf       *conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        xlator_name = strdupa (conf-&gt;unique_id);</div><div class='del'>-        for (i = 0; i &lt; strlen (xlator_name); i++) {</div><div class='del'>-                if (xlator_name[i] == '/')</div><div class='del'>-                        xlator_name[i] = '_';</div><div class='add'>+_io_stats_get_key_prefix(xlator_t *this, char **key_prefix)</div><div class='add'>+{</div><div class='add'>+    char *key_root = "gluster";</div><div class='add'>+    char *xlator_name = NULL;</div><div class='add'>+    char *instance_name = NULL;</div><div class='add'>+    size_t key_len = 0;</div><div class='add'>+    int bytes_written = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct ios_conf *conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    xlator_name = strdupa(conf-&gt;unique_id);</div><div class='add'>+    for (i = 0; i &lt; strlen(xlator_name); i++) {</div><div class='add'>+        if (xlator_name[i] == '/')</div><div class='add'>+            xlator_name[i] = '_';</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    instance_name = this-&gt;instance_name;</div><div class='add'>+    if (this-&gt;name &amp;&amp; strcmp(this-&gt;name, "glustershd") == 0) {</div><div class='add'>+        xlator_name = "shd";</div><div class='add'>+    } else if (this-&gt;prev &amp;&amp; strcmp(this-&gt;prev-&gt;name, "nfs-server") == 0) {</div><div class='add'>+        xlator_name = "nfsd";</div><div class='add'>+        if (this-&gt;prev-&gt;instance_name)</div><div class='add'>+            instance_name = strdupa(this-&gt;prev-&gt;instance_name);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (strcmp(__progname, "glusterfsd") == 0)</div><div class='add'>+        key_root = "gluster.brick";</div><div class='add'>+</div><div class='add'>+    if (instance_name) {</div><div class='add'>+        /* +3 for 2 x "." + NULL */</div><div class='add'>+        key_len = strlen(key_root) + strlen(xlator_name) +</div><div class='add'>+                  strlen(instance_name) + 3;</div><div class='add'>+        *key_prefix = GF_CALLOC(key_len, sizeof(char), gf_common_mt_char);</div><div class='add'>+        if (!*key_prefix) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        instance_name = this-&gt;instance_name;</div><div class='del'>-        if (this-&gt;name &amp;&amp; strcmp (this-&gt;name, "glustershd") == 0) {</div><div class='del'>-                xlator_name = "shd";</div><div class='del'>-        } else if (this-&gt;prev &amp;&amp;</div><div class='del'>-                   strcmp (this-&gt;prev-&gt;name, "nfs-server") == 0) {</div><div class='del'>-                xlator_name = "nfsd";</div><div class='del'>-                if (this-&gt;prev-&gt;instance_name)</div><div class='del'>-                        instance_name = strdupa (this-&gt;prev-&gt;instance_name);</div><div class='add'>+        bytes_written = snprintf(*key_prefix, key_len, "%s.%s.%s", key_root,</div><div class='add'>+                                 xlator_name, instance_name);</div><div class='add'>+        if (bytes_written != key_len - 1) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (strcmp (__progname, "glusterfsd") == 0)</div><div class='del'>-                key_root = "gluster.brick";</div><div class='del'>-</div><div class='del'>-        if (instance_name) {</div><div class='del'>-                /* +3 for 2 x "." + NULL */</div><div class='del'>-                key_len = strlen (key_root) + strlen (xlator_name) +</div><div class='del'>-                        strlen (instance_name) + 3;</div><div class='del'>-                *key_prefix = GF_CALLOC (key_len, sizeof (char),</div><div class='del'>-                        gf_common_mt_char);</div><div class='del'>-                if (!*key_prefix) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                bytes_written = snprintf (*key_prefix, key_len, "%s.%s.%s",</div><div class='del'>-                        key_root, xlator_name, instance_name);</div><div class='del'>-                if (bytes_written != key_len - 1) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                /* +2 for 1 x "." + NULL */</div><div class='del'>-                key_len = strlen (key_root) + strlen (xlator_name) + 2;</div><div class='del'>-                *key_prefix = GF_CALLOC (key_len, sizeof (char),</div><div class='del'>-                        gf_common_mt_char);</div><div class='del'>-                if (!*key_prefix) {</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                bytes_written = snprintf (*key_prefix, key_len, "%s.%s",</div><div class='del'>-                        key_root, xlator_name);</div><div class='del'>-                if (bytes_written != key_len - 1) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    } else {</div><div class='add'>+        /* +2 for 1 x "." + NULL */</div><div class='add'>+        key_len = strlen(key_root) + strlen(xlator_name) + 2;</div><div class='add'>+        *key_prefix = GF_CALLOC(key_len, sizeof(char), gf_common_mt_char);</div><div class='add'>+        if (!*key_prefix) {</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        bytes_written = snprintf(*key_prefix, key_len, "%s.%s", key_root,</div><div class='add'>+                                 xlator_name);</div><div class='add'>+        if (bytes_written != key_len - 1) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        GF_FREE (*key_prefix);</div><div class='del'>-        *key_prefix = NULL;</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(*key_prefix);</div><div class='add'>+    *key_prefix = NULL;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_dump_global_to_json_logfp (xlator_t *this,</div><div class='del'>-    struct ios_global_stats *stats, struct timeval *now, int interval,</div><div class='del'>-    FILE *logfp)</div><div class='del'>-{</div><div class='del'>-        int                   i = 0;</div><div class='del'>-        int                   j = 0;</div><div class='del'>-        struct ios_conf       *conf = NULL;</div><div class='del'>-        char                  *key_prefix = NULL;</div><div class='del'>-        char                  *str_prefix = NULL;</div><div class='del'>-        char                  *lc_fop_name = NULL;</div><div class='del'>-        int                   ret = 1;  /* Default to error */</div><div class='del'>-        int                   rw_size;</div><div class='del'>-        char                  *rw_unit = NULL;</div><div class='del'>-        uint64_t              fop_hits;</div><div class='del'>-        float                 fop_lat_ave;</div><div class='del'>-        float                 fop_lat_min;</div><div class='del'>-        float                 fop_lat_max;</div><div class='del'>-        double                interval_sec;</div><div class='del'>-        double                fop_ave_usec = 0.0;</div><div class='del'>-        double                fop_ave_usec_sum = 0.0;</div><div class='del'>-        double                weighted_fop_ave_usec = 0.0;</div><div class='del'>-        double                weighted_fop_ave_usec_sum = 0.0;</div><div class='del'>-        long                  total_fop_hits = 0;</div><div class='del'>-        loc_t                 unused_loc = {0, };</div><div class='del'>-        dict_t                *xattr = NULL;</div><div class='del'>-</div><div class='del'>-        interval_sec = ((now-&gt;tv_sec * 1000000.0 + now-&gt;tv_usec) -</div><div class='del'>-                (stats-&gt;started_at.tv_sec * 1000000.0 +</div><div class='del'>-                 stats-&gt;started_at.tv_usec)) / 1000000.0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = _io_stats_get_key_prefix (this, &amp;key_prefix);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='add'>+io_stats_dump_global_to_json_logfp(xlator_t *this,</div><div class='add'>+                                   struct ios_global_stats *stats,</div><div class='add'>+                                   struct timeval *now, int interval,</div><div class='add'>+                                   FILE *logfp)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int j = 0;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    char *key_prefix = NULL;</div><div class='add'>+    char *str_prefix = NULL;</div><div class='add'>+    char *lc_fop_name = NULL;</div><div class='add'>+    int ret = 1; /* Default to error */</div><div class='add'>+    int rw_size;</div><div class='add'>+    char *rw_unit = NULL;</div><div class='add'>+    uint64_t fop_hits;</div><div class='add'>+    float fop_lat_ave;</div><div class='add'>+    float fop_lat_min;</div><div class='add'>+    float fop_lat_max;</div><div class='add'>+    double interval_sec;</div><div class='add'>+    double fop_ave_usec = 0.0;</div><div class='add'>+    double fop_ave_usec_sum = 0.0;</div><div class='add'>+    double weighted_fop_ave_usec = 0.0;</div><div class='add'>+    double weighted_fop_ave_usec_sum = 0.0;</div><div class='add'>+    long total_fop_hits = 0;</div><div class='add'>+    loc_t unused_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    interval_sec = ((now-&gt;tv_sec * 1000000.0 + now-&gt;tv_usec) -</div><div class='add'>+                    (stats-&gt;started_at.tv_sec * 1000000.0 +</div><div class='add'>+                     stats-&gt;started_at.tv_usec)) /</div><div class='add'>+                   1000000.0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = _io_stats_get_key_prefix(this, &amp;key_prefix);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (interval == -1) {</div><div class='add'>+        str_prefix = "aggr";</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        str_prefix = "inter";</div><div class='add'>+    }</div><div class='add'>+    ios_log(this, logfp, "{");</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 31; i++) {</div><div class='add'>+        rw_size = (1 &lt;&lt; i);</div><div class='add'>+        if (rw_size &gt;= 1024 * 1024) {</div><div class='add'>+            rw_size = rw_size / (1024 * 1024);</div><div class='add'>+            rw_unit = "mb";</div><div class='add'>+        } else if (rw_size &gt;= 1024) {</div><div class='add'>+            rw_size = rw_size / 1024;</div><div class='add'>+            rw_unit = "kb";</div><div class='add'>+        } else {</div><div class='add'>+            rw_unit = "b";</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (interval == -1) {</div><div class='del'>-                str_prefix = "aggr";</div><div class='del'>-</div><div class='add'>+            ios_log(this, logfp, "\"%s.%s.read_%d%s\": \"%" GF_PRI_ATOMIC "\",",</div><div class='add'>+                    key_prefix, str_prefix, rw_size, rw_unit,</div><div class='add'>+                    GF_ATOMIC_GET(stats-&gt;block_count_read[i]));</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "\"%s.%s.write_%d%s\": \"%" GF_PRI_ATOMIC "\",", key_prefix,</div><div class='add'>+                    str_prefix, rw_size, rw_unit,</div><div class='add'>+                    GF_ATOMIC_GET(stats-&gt;block_count_write[i]));</div><div class='ctx'>         } else {</div><div class='del'>-                str_prefix = "inter";</div><div class='add'>+            ios_log(this, logfp, "\"%s.%s.read_%d%s_per_sec\": \"%0.2lf\",",</div><div class='add'>+                    key_prefix, str_prefix, rw_size, rw_unit,</div><div class='add'>+                    (double)(GF_ATOMIC_GET(stats-&gt;block_count_read[i]) /</div><div class='add'>+                             interval_sec));</div><div class='add'>+            ios_log(this, logfp, "\"%s.%s.write_%d%s_per_sec\": \"%0.2lf\",",</div><div class='add'>+                    key_prefix, str_prefix, rw_size, rw_unit,</div><div class='add'>+                    (double)(GF_ATOMIC_GET(stats-&gt;block_count_write[i]) /</div><div class='add'>+                             interval_sec));</div><div class='ctx'>         }</div><div class='del'>-        ios_log (this, logfp, "{");</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 31; i++) {</div><div class='del'>-                rw_size = (1 &lt;&lt; i);</div><div class='del'>-                if (rw_size &gt;= 1024 * 1024) {</div><div class='del'>-                        rw_size = rw_size / (1024 * 1024);</div><div class='del'>-                        rw_unit = "mb";</div><div class='del'>-                } else if (rw_size &gt;= 1024) {</div><div class='del'>-                        rw_size = rw_size / 1024;</div><div class='del'>-                        rw_unit = "kb";</div><div class='del'>-                } else {</div><div class='del'>-                        rw_unit = "b";</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (interval == -1) {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.read_%d%s\": \"%"GF_PRI_ATOMIC"\",",</div><div class='del'>-                                key_prefix, str_prefix, rw_size, rw_unit,</div><div class='del'>-                                GF_ATOMIC_GET (stats-&gt;block_count_read[i]));</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.write_%d%s\": \"%"GF_PRI_ATOMIC"\",",</div><div class='del'>-                                key_prefix, str_prefix, rw_size, rw_unit,</div><div class='del'>-                                GF_ATOMIC_GET (stats-&gt;block_count_write[i]));</div><div class='del'>-                } else {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.read_%d%s_per_sec\": \"%0.2lf\",",</div><div class='del'>-                                key_prefix, str_prefix, rw_size, rw_unit,</div><div class='del'>-                                (double)</div><div class='del'>-                                (GF_ATOMIC_GET (stats-&gt;block_count_read[i]) /</div><div class='del'>-                                 interval_sec));</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.write_%d%s_per_sec\": \"%0.2lf\",",</div><div class='del'>-                                key_prefix, str_prefix, rw_size, rw_unit,</div><div class='del'>-                                (double)</div><div class='del'>-                                (GF_ATOMIC_GET (stats-&gt;block_count_write[i]) /</div><div class='del'>-                                 interval_sec));</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (interval == -1) {</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.fds.open_count\": \"%" PRId64 "\",",</div><div class='add'>+                key_prefix, str_prefix, conf-&gt;cumulative.nr_opens);</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.fds.max_open_count\": \"%" PRId64 "\",",</div><div class='add'>+                key_prefix, str_prefix, conf-&gt;cumulative.max_nr_opens);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        lc_fop_name = strdupa(gf_fop_list[i]);</div><div class='add'>+        for (j = 0; lc_fop_name[j]; j++) {</div><div class='add'>+            lc_fop_name[j] = tolower(lc_fop_name[j]);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (interval == -1) {</div><div class='del'>-                ios_log (this, logfp, "\"%s.%s.fds.open_count\": \"%"PRId64</div><div class='del'>-                        "\",", key_prefix, str_prefix,</div><div class='del'>-                        conf-&gt;cumulative.nr_opens);</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                        "\"%s.%s.fds.max_open_count\": \"%"PRId64"\",",</div><div class='del'>-                        key_prefix, str_prefix, conf-&gt;cumulative.max_nr_opens);</div><div class='add'>+        fop_hits = GF_ATOMIC_GET(stats-&gt;fop_hits[i]);</div><div class='add'>+        fop_lat_ave = 0.0;</div><div class='add'>+        fop_lat_min = 0.0;</div><div class='add'>+        fop_lat_max = 0.0;</div><div class='add'>+        if (fop_hits) {</div><div class='add'>+            if (stats-&gt;latency[i].avg) {</div><div class='add'>+                fop_lat_ave = stats-&gt;latency[i].avg;</div><div class='add'>+                fop_lat_min = stats-&gt;latency[i].min;</div><div class='add'>+                fop_lat_max = stats-&gt;latency[i].max;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                lc_fop_name = strdupa (gf_fop_list[i]);</div><div class='del'>-                for (j = 0; lc_fop_name[j]; j++) {</div><div class='del'>-                        lc_fop_name[j] = tolower (lc_fop_name[j]);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                fop_hits = GF_ATOMIC_GET (stats-&gt;fop_hits[i]);</div><div class='del'>-                fop_lat_ave = 0.0;</div><div class='del'>-                fop_lat_min = 0.0;</div><div class='del'>-                fop_lat_max = 0.0;</div><div class='del'>-                if (fop_hits) {</div><div class='del'>-                        if (stats-&gt;latency[i].avg) {</div><div class='del'>-                                fop_lat_ave = stats-&gt;latency[i].avg;</div><div class='del'>-                                fop_lat_min = stats-&gt;latency[i].min;</div><div class='del'>-                                fop_lat_max = stats-&gt;latency[i].max;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                if (interval == -1) {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.fop.%s.count\": \"%"GF_PRI_ATOMIC"\",",</div><div class='del'>-                                key_prefix, str_prefix, lc_fop_name,</div><div class='del'>-                                fop_hits);</div><div class='del'>-                } else {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.fop.%s.per_sec\": \"%0.2lf\",",</div><div class='del'>-                                key_prefix, str_prefix, lc_fop_name,</div><div class='del'>-                                (double)(fop_hits / interval_sec));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                        "\"%s.%s.fop.%s.latency_ave_usec\": \"%0.2lf\",",</div><div class='del'>-                         key_prefix, str_prefix, lc_fop_name, fop_lat_ave);</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                        "\"%s.%s.fop.%s.latency_min_usec\": \"%0.2lf\",",</div><div class='del'>-                         key_prefix, str_prefix, lc_fop_name, fop_lat_min);</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                        "\"%s.%s.fop.%s.latency_max_usec\": \"%0.2lf\",",</div><div class='del'>-                        key_prefix, str_prefix, lc_fop_name, fop_lat_max);</div><div class='del'>-</div><div class='del'>-                fop_ave_usec_sum += fop_lat_ave;</div><div class='del'>-                weighted_fop_ave_usec_sum += fop_hits * fop_lat_ave;</div><div class='del'>-                total_fop_hits += fop_hits;</div><div class='add'>+        if (interval == -1) {</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "\"%s.%s.fop.%s.count\": \"%" GF_PRI_ATOMIC "\",",</div><div class='add'>+                    key_prefix, str_prefix, lc_fop_name, fop_hits);</div><div class='add'>+        } else {</div><div class='add'>+            ios_log(this, logfp, "\"%s.%s.fop.%s.per_sec\": \"%0.2lf\",",</div><div class='add'>+                    key_prefix, str_prefix, lc_fop_name,</div><div class='add'>+                    (double)(fop_hits / interval_sec));</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (total_fop_hits) {</div><div class='del'>-                weighted_fop_ave_usec =</div><div class='del'>-                        weighted_fop_ave_usec_sum/total_fop_hits;</div><div class='del'>-                /* Extra key that does not print out an entry w/ 0.00 for</div><div class='del'>-                 * intervals with no data</div><div class='del'>-                 */</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                         "\"%s.%s.fop.weighted_latency_ave_usec_nozerofill\": "</div><div class='del'>-                         "\"%0.4lf\",",</div><div class='del'>-                         key_prefix, str_prefix, weighted_fop_ave_usec);</div><div class='del'>-        }</div><div class='del'>-        ios_log (this, logfp,</div><div class='del'>-                 "\"%s.%s.fop.weighted_latency_ave_usec\": \"%0.4lf\",",</div><div class='del'>-                 key_prefix, str_prefix, weighted_fop_ave_usec);</div><div class='del'>-        ios_log (this, logfp,</div><div class='del'>-                 "\"%s.%s.fop.weighted_fop_count\": \"%ld\",",</div><div class='del'>-                 key_prefix, str_prefix, total_fop_hits);</div><div class='del'>-</div><div class='del'>-        fop_ave_usec = fop_ave_usec_sum/GF_FOP_MAXVALUE;</div><div class='del'>-        ios_log (this, logfp,</div><div class='del'>-                 "\"%s.%s.fop.unweighted_latency_ave_usec\":\"%0.4lf\",",</div><div class='del'>-                 key_prefix, str_prefix, fop_ave_usec);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='del'>-                lc_fop_name = strdupa (gf_upcall_list[i]);</div><div class='del'>-                for (j = 0; lc_fop_name[j]; j++) {</div><div class='del'>-                        lc_fop_name[j] = tolower (lc_fop_name[j]);</div><div class='del'>-                }</div><div class='del'>-                fop_hits = GF_ATOMIC_GET (stats-&gt;upcall_hits[i]);</div><div class='del'>-                if (interval == -1) {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.fop.%s.count\": \"%"GF_PRI_ATOMIC"\",",</div><div class='del'>-                                key_prefix, str_prefix, lc_fop_name,</div><div class='del'>-                                fop_hits);</div><div class='del'>-                } else {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                "\"%s.%s.fop.%s.per_sec\": \"%0.2lf\",",</div><div class='del'>-                                key_prefix, str_prefix, lc_fop_name,</div><div class='del'>-                                (double)(fop_hits / interval_sec));</div><div class='del'>-                }</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.fop.%s.latency_ave_usec\": \"%0.2lf\",",</div><div class='add'>+                key_prefix, str_prefix, lc_fop_name, fop_lat_ave);</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.fop.%s.latency_min_usec\": \"%0.2lf\",",</div><div class='add'>+                key_prefix, str_prefix, lc_fop_name, fop_lat_min);</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.fop.%s.latency_max_usec\": \"%0.2lf\",",</div><div class='add'>+                key_prefix, str_prefix, lc_fop_name, fop_lat_max);</div><div class='add'>+</div><div class='add'>+        fop_ave_usec_sum += fop_lat_ave;</div><div class='add'>+        weighted_fop_ave_usec_sum += fop_hits * fop_lat_ave;</div><div class='add'>+        total_fop_hits += fop_hits;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (total_fop_hits) {</div><div class='add'>+        weighted_fop_ave_usec = weighted_fop_ave_usec_sum / total_fop_hits;</div><div class='add'>+        /* Extra key that does not print out an entry w/ 0.00 for</div><div class='add'>+         * intervals with no data</div><div class='add'>+         */</div><div class='add'>+        ios_log(this, logfp,</div><div class='add'>+                "\"%s.%s.fop.weighted_latency_ave_usec_nozerofill\": "</div><div class='add'>+                "\"%0.4lf\",",</div><div class='add'>+                key_prefix, str_prefix, weighted_fop_ave_usec);</div><div class='add'>+    }</div><div class='add'>+    ios_log(this, logfp, "\"%s.%s.fop.weighted_latency_ave_usec\": \"%0.4lf\",",</div><div class='add'>+            key_prefix, str_prefix, weighted_fop_ave_usec);</div><div class='add'>+    ios_log(this, logfp, "\"%s.%s.fop.weighted_fop_count\": \"%ld\",",</div><div class='add'>+            key_prefix, str_prefix, total_fop_hits);</div><div class='add'>+</div><div class='add'>+    fop_ave_usec = fop_ave_usec_sum / GF_FOP_MAXVALUE;</div><div class='add'>+    ios_log(this, logfp,</div><div class='add'>+            "\"%s.%s.fop.unweighted_latency_ave_usec\":\"%0.4lf\",", key_prefix,</div><div class='add'>+            str_prefix, fop_ave_usec);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='add'>+        lc_fop_name = strdupa(gf_upcall_list[i]);</div><div class='add'>+        for (j = 0; lc_fop_name[j]; j++) {</div><div class='add'>+            lc_fop_name[j] = tolower(lc_fop_name[j]);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (this, &amp;unused_loc, &amp;xattr,</div><div class='del'>-                               IO_THREADS_QUEUE_SIZE_KEY, NULL, NULL);</div><div class='del'>-        if (xattr) {</div><div class='del'>-                /*</div><div class='del'>-                 * Iterate over the dictionary returned to us by io-threads and</div><div class='del'>-                 * dump the results to the stats file.</div><div class='del'>-                 */</div><div class='del'>-                data_pair_t *curr = NULL;</div><div class='del'>-</div><div class='del'>-                dict_foreach_inline (xattr, curr) {</div><div class='del'>-                        ios_log (this, logfp,</div><div class='del'>-                                 "\"%s.%s.%s.queue_size\": \"%d\",",</div><div class='del'>-                                 key_prefix, str_prefix, curr-&gt;key,</div><div class='del'>-                                 data_to_int32 (curr-&gt;value));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Free the dictionary */</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+        fop_hits = GF_ATOMIC_GET(stats-&gt;upcall_hits[i]);</div><div class='add'>+        if (interval == -1) {</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "\"%s.%s.fop.%s.count\": \"%" GF_PRI_ATOMIC "\",",</div><div class='add'>+                    key_prefix, str_prefix, lc_fop_name, fop_hits);</div><div class='ctx'>         } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Unable to get queue size counts from "</div><div class='del'>-                        "the io-threads translator!");</div><div class='add'>+            ios_log(this, logfp, "\"%s.%s.fop.%s.per_sec\": \"%0.2lf\",",</div><div class='add'>+                    key_prefix, str_prefix, lc_fop_name,</div><div class='add'>+                    (double)(fop_hits / interval_sec));</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (interval == -1) {</div><div class='del'>-                ios_log (this, logfp, "\"%s.%s.uptime\": \"%"PRId64"\",",</div><div class='del'>-                         key_prefix, str_prefix,</div><div class='del'>-                         (uint64_t) (now-&gt;tv_sec - stats-&gt;started_at.tv_sec));</div><div class='del'>-                ios_log (this, logfp, "\"%s.%s.bytes_read\": \""</div><div class='del'>-                         "%"GF_PRI_ATOMIC"\",", key_prefix, str_prefix,</div><div class='del'>-                         GF_ATOMIC_GET (stats-&gt;data_read));</div><div class='del'>-                ios_log (this, logfp, "\"%s.%s.bytes_written\": \""</div><div class='del'>-                         "%"GF_PRI_ATOMIC"\"", key_prefix, str_prefix,</div><div class='del'>-                         GF_ATOMIC_GET (stats-&gt;data_written));</div><div class='del'>-        } else {</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                         "\"%s.%s.sample_interval_sec\": \"%0.2lf\",",</div><div class='del'>-                         key_prefix, str_prefix,</div><div class='del'>-                         interval_sec);</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                         "\"%s.%s.bytes_read_per_sec\": \"%0.2lf\",",</div><div class='del'>-                         key_prefix, str_prefix, (double)</div><div class='del'>-                         (GF_ATOMIC_GET (stats-&gt;data_read) / interval_sec));</div><div class='del'>-                ios_log (this, logfp,</div><div class='del'>-                         "\"%s.%s.bytes_written_per_sec\": \"%0.2lf\"",</div><div class='del'>-                         key_prefix, str_prefix, (double)</div><div class='del'>-                         (GF_ATOMIC_GET (stats-&gt;data_written) / interval_sec));</div><div class='add'>+    ret = syncop_getxattr(this, &amp;unused_loc, &amp;xattr, IO_THREADS_QUEUE_SIZE_KEY,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (xattr) {</div><div class='add'>+        /*</div><div class='add'>+         * Iterate over the dictionary returned to us by io-threads and</div><div class='add'>+         * dump the results to the stats file.</div><div class='add'>+         */</div><div class='add'>+        data_pair_t *curr = NULL;</div><div class='add'>+</div><div class='add'>+        dict_foreach_inline(xattr, curr)</div><div class='add'>+        {</div><div class='add'>+            ios_log(this, logfp, "\"%s.%s.%s.queue_size\": \"%d\",", key_prefix,</div><div class='add'>+                    str_prefix, curr-&gt;key, data_to_int32(curr-&gt;value));</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ios_log (this, logfp, "}");</div><div class='del'>-        ret = 0;</div><div class='add'>+        /* Free the dictionary */</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Unable to get queue size counts from "</div><div class='add'>+               "the io-threads translator!");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (interval == -1) {</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.uptime\": \"%" PRId64 "\",", key_prefix,</div><div class='add'>+                str_prefix, (uint64_t)(now-&gt;tv_sec - stats-&gt;started_at.tv_sec));</div><div class='add'>+        ios_log(this, logfp,</div><div class='add'>+                "\"%s.%s.bytes_read\": \""</div><div class='add'>+                "%" GF_PRI_ATOMIC "\",",</div><div class='add'>+                key_prefix, str_prefix, GF_ATOMIC_GET(stats-&gt;data_read));</div><div class='add'>+        ios_log(this, logfp,</div><div class='add'>+                "\"%s.%s.bytes_written\": \""</div><div class='add'>+                "%" GF_PRI_ATOMIC "\"",</div><div class='add'>+                key_prefix, str_prefix, GF_ATOMIC_GET(stats-&gt;data_written));</div><div class='add'>+    } else {</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.sample_interval_sec\": \"%0.2lf\",",</div><div class='add'>+                key_prefix, str_prefix, interval_sec);</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.bytes_read_per_sec\": \"%0.2lf\",",</div><div class='add'>+                key_prefix, str_prefix,</div><div class='add'>+                (double)(GF_ATOMIC_GET(stats-&gt;data_read) / interval_sec));</div><div class='add'>+        ios_log(this, logfp, "\"%s.%s.bytes_written_per_sec\": \"%0.2lf\"",</div><div class='add'>+                key_prefix, str_prefix,</div><div class='add'>+                (double)(GF_ATOMIC_GET(stats-&gt;data_written) / interval_sec));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ios_log(this, logfp, "}");</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (key_prefix);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(key_prefix);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-_resolve_username (xlator_t *this, uid_t uid)</div><div class='add'>+_resolve_username(xlator_t *this, uid_t uid)</div><div class='ctx'> {</div><div class='del'>-        struct passwd pwd;</div><div class='del'>-        struct passwd *pwd_result = NULL;</div><div class='del'>-        size_t pwd_buf_len;</div><div class='del'>-        char   *pwd_buf = NULL;</div><div class='del'>-        char   *ret = NULL;</div><div class='add'>+    struct passwd pwd;</div><div class='add'>+    struct passwd *pwd_result = NULL;</div><div class='add'>+    size_t pwd_buf_len;</div><div class='add'>+    char *pwd_buf = NULL;</div><div class='add'>+    char *ret = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Prepare our buffer for the uid-&gt;username translation */</div><div class='add'>+    /* Prepare our buffer for the uid-&gt;username translation */</div><div class='ctx'> #ifdef _SC_GETGR_R_SIZE_MAX</div><div class='del'>-        pwd_buf_len = sysconf (_SC_GETGR_R_SIZE_MAX);</div><div class='add'>+    pwd_buf_len = sysconf(_SC_GETGR_R_SIZE_MAX);</div><div class='ctx'> #else</div><div class='del'>-        pwd_buf_len = -1;</div><div class='add'>+    pwd_buf_len = -1;</div><div class='ctx'> #endif</div><div class='del'>-        if (pwd_buf_len == -1) {</div><div class='del'>-                pwd_buf_len = DEFAULT_PWD_BUF_SZ;  /* per the man page */</div><div class='del'>-        }</div><div class='add'>+    if (pwd_buf_len == -1) {</div><div class='add'>+        pwd_buf_len = DEFAULT_PWD_BUF_SZ; /* per the man page */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pwd_buf = alloca (pwd_buf_len);</div><div class='del'>-        if (!pwd_buf)</div><div class='del'>-                goto err;</div><div class='add'>+    pwd_buf = alloca(pwd_buf_len);</div><div class='add'>+    if (!pwd_buf)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        getpwuid_r (uid, &amp;pwd, pwd_buf, pwd_buf_len,</div><div class='del'>-                   &amp;pwd_result);</div><div class='del'>-        if (!pwd_result)</div><div class='del'>-                goto err;</div><div class='add'>+    getpwuid_r(uid, &amp;pwd, pwd_buf, pwd_buf_len, &amp;pwd_result);</div><div class='add'>+    if (!pwd_result)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = gf_strdup (pwd.pw_name);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-        else</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "gf_strdup failed, failing username "</div><div class='del'>-                        "resolution.");</div><div class='del'>-err:</div><div class='add'>+    ret = gf_strdup(pwd.pw_name);</div><div class='add'>+    if (ret)</div><div class='ctx'>         return ret;</div><div class='add'>+    else</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "gf_strdup failed, failing username "</div><div class='add'>+               "resolution.");</div><div class='add'>+err:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-_resolve_group_name (xlator_t *this, gid_t gid)</div><div class='add'>+_resolve_group_name(xlator_t *this, gid_t gid)</div><div class='ctx'> {</div><div class='del'>-        struct group grp;</div><div class='del'>-        struct group *grp_result = NULL;</div><div class='del'>-        size_t grp_buf_len;</div><div class='del'>-        char   *grp_buf = NULL;</div><div class='del'>-        char   *ret = NULL;</div><div class='add'>+    struct group grp;</div><div class='add'>+    struct group *grp_result = NULL;</div><div class='add'>+    size_t grp_buf_len;</div><div class='add'>+    char *grp_buf = NULL;</div><div class='add'>+    char *ret = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Prepare our buffer for the gid-&gt;group name translation */</div><div class='add'>+    /* Prepare our buffer for the gid-&gt;group name translation */</div><div class='ctx'> #ifdef _SC_GETGR_R_SIZE_MAX</div><div class='del'>-        grp_buf_len = sysconf (_SC_GETGR_R_SIZE_MAX);</div><div class='add'>+    grp_buf_len = sysconf(_SC_GETGR_R_SIZE_MAX);</div><div class='ctx'> #else</div><div class='del'>-        grp_buf_len = -1;</div><div class='add'>+    grp_buf_len = -1;</div><div class='ctx'> #endif</div><div class='del'>-        if (grp_buf_len == -1) {</div><div class='del'>-                grp_buf_len = DEFAULT_GRP_BUF_SZ;  /* per the man page */</div><div class='del'>-        }</div><div class='add'>+    if (grp_buf_len == -1) {</div><div class='add'>+        grp_buf_len = DEFAULT_GRP_BUF_SZ; /* per the man page */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        grp_buf = alloca (grp_buf_len);</div><div class='del'>-        if (!grp_buf) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    grp_buf = alloca(grp_buf_len);</div><div class='add'>+    if (!grp_buf) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (getgrgid_r (gid, &amp;grp, grp_buf, grp_buf_len, &amp;grp_result) != 0)</div><div class='del'>-                goto err;</div><div class='add'>+    if (getgrgid_r(gid, &amp;grp, grp_buf, grp_buf_len, &amp;grp_result) != 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (!grp_result)</div><div class='del'>-                goto err;</div><div class='add'>+    if (!grp_result)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = gf_strdup (grp.gr_name);</div><div class='del'>-        if (ret)</div><div class='del'>-                return ret;</div><div class='del'>-        else</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "gf_strdup failed, failing username "</div><div class='del'>-                        "resolution.");</div><div class='del'>-err:</div><div class='add'>+    ret = gf_strdup(grp.gr_name);</div><div class='add'>+    if (ret)</div><div class='ctx'>         return ret;</div><div class='add'>+    else</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "gf_strdup failed, failing username "</div><div class='add'>+               "resolution.");</div><div class='add'>+err:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * This function writes out a latency sample to a given file descriptor</div><div class='ctx'>  * and beautifies the output in the process.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-_io_stats_write_latency_sample (xlator_t *this, ios_sample_t *sample,</div><div class='del'>-                                FILE *logfp)</div><div class='del'>-{</div><div class='del'>-        double epoch_time = 0.00;</div><div class='del'>-        char   *xlator_name = NULL;</div><div class='del'>-        char   *instance_name = NULL;</div><div class='del'>-        char   *hostname = NULL;</div><div class='del'>-        char   *identifier = NULL;</div><div class='del'>-        char   *port = NULL;</div><div class='del'>-        char   *port_pos = NULL;</div><div class='del'>-        char   *group_name = NULL;</div><div class='del'>-        char   *username = NULL;</div><div class='del'>-        struct ios_conf *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        epoch_time = (sample-&gt;timestamp).tv_sec +</div><div class='del'>-          ((sample-&gt;timestamp).tv_usec / 1000000.0);</div><div class='del'>-</div><div class='del'>-        if (strlen (sample-&gt;identifier) == 0) {</div><div class='del'>-                hostname = "Unknown";</div><div class='del'>-                port = "Unknown";</div><div class='del'>-        } else {</div><div class='del'>-                identifier = strdupa (sample-&gt;identifier);</div><div class='del'>-                port_pos = strrchr (identifier, ':');</div><div class='del'>-                if (!port_pos || strlen(port_pos) &lt; 2)</div><div class='del'>-                        goto err;</div><div class='del'>-                port = strdupa (port_pos + 1);</div><div class='del'>-                if (!port)</div><div class='del'>-                        goto err;</div><div class='del'>-                *port_pos = '\0';</div><div class='del'>-                hostname = gf_rev_dns_lookup_cached (identifier,</div><div class='del'>-                                                     conf-&gt;dnscache);</div><div class='del'>-                if (!hostname)</div><div class='del'>-                        hostname = "Unknown";</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xlator_name = conf-&gt;unique_id;</div><div class='del'>-        if (!xlator_name || strlen (xlator_name) == 0)</div><div class='del'>-                xlator_name = "Unknown";</div><div class='del'>-</div><div class='del'>-        instance_name = this-&gt;instance_name;</div><div class='del'>-        if (!instance_name || strlen (instance_name) == 0)</div><div class='del'>-                instance_name = "N/A";</div><div class='del'>-</div><div class='del'>-        /* Resolve the UID to a string username */</div><div class='del'>-        username = _resolve_username (this, sample-&gt;uid);</div><div class='add'>+_io_stats_write_latency_sample(xlator_t *this, ios_sample_t *sample,</div><div class='add'>+                               FILE *logfp)</div><div class='add'>+{</div><div class='add'>+    double epoch_time = 0.00;</div><div class='add'>+    char *xlator_name = NULL;</div><div class='add'>+    char *instance_name = NULL;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *identifier = NULL;</div><div class='add'>+    char *port = NULL;</div><div class='add'>+    char *port_pos = NULL;</div><div class='add'>+    char *group_name = NULL;</div><div class='add'>+    char *username = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    epoch_time = (sample-&gt;timestamp).tv_sec +</div><div class='add'>+                 ((sample-&gt;timestamp).tv_usec / 1000000.0);</div><div class='add'>+</div><div class='add'>+    if (strlen(sample-&gt;identifier) == 0) {</div><div class='add'>+        hostname = "Unknown";</div><div class='add'>+        port = "Unknown";</div><div class='add'>+    } else {</div><div class='add'>+        identifier = strdupa(sample-&gt;identifier);</div><div class='add'>+        port_pos = strrchr(identifier, ':');</div><div class='add'>+        if (!port_pos || strlen(port_pos) &lt; 2)</div><div class='add'>+            goto err;</div><div class='add'>+        port = strdupa(port_pos + 1);</div><div class='add'>+        if (!port)</div><div class='add'>+            goto err;</div><div class='add'>+        *port_pos = '\0';</div><div class='add'>+        hostname = gf_rev_dns_lookup_cached(identifier, conf-&gt;dnscache);</div><div class='add'>+        if (!hostname)</div><div class='add'>+            hostname = "Unknown";</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xlator_name = conf-&gt;unique_id;</div><div class='add'>+    if (!xlator_name || strlen(xlator_name) == 0)</div><div class='add'>+        xlator_name = "Unknown";</div><div class='add'>+</div><div class='add'>+    instance_name = this-&gt;instance_name;</div><div class='add'>+    if (!instance_name || strlen(instance_name) == 0)</div><div class='add'>+        instance_name = "N/A";</div><div class='add'>+</div><div class='add'>+    /* Resolve the UID to a string username */</div><div class='add'>+    username = _resolve_username(this, sample-&gt;uid);</div><div class='add'>+    if (!username) {</div><div class='add'>+        username = GF_MALLOC(30, gf_common_mt_char);</div><div class='ctx'>         if (!username) {</div><div class='del'>-                username = GF_MALLOC (30, gf_common_mt_char);</div><div class='del'>-                if (!username) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                sprintf (username, "%d", (int32_t)sample-&gt;uid);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        sprintf(username, "%d", (int32_t)sample-&gt;uid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Resolve the GID to a string group name */</div><div class='del'>-        group_name = _resolve_group_name (this, sample-&gt;gid);</div><div class='add'>+    /* Resolve the GID to a string group name */</div><div class='add'>+    group_name = _resolve_group_name(this, sample-&gt;gid);</div><div class='add'>+    if (!group_name) {</div><div class='add'>+        group_name = GF_MALLOC(30, gf_common_mt_char);</div><div class='ctx'>         if (!group_name) {</div><div class='del'>-                group_name = GF_MALLOC (30, gf_common_mt_char);</div><div class='del'>-                if (!group_name) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                sprintf (group_name, "%d", (int32_t)sample-&gt;gid);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ios_log (this, logfp,</div><div class='del'>-                 "%0.6lf,%s,%s,%0.4lf,%s,%s,%s,%s,%s,%s",</div><div class='del'>-                 epoch_time, fop_enum_to_pri_string (sample-&gt;fop_type),</div><div class='del'>-                 gf_fop_string (sample-&gt;fop_type),</div><div class='del'>-                 sample-&gt;elapsed, xlator_name, instance_name, username,</div><div class='del'>-                 group_name, hostname, port);</div><div class='del'>-        goto out;</div><div class='add'>+        sprintf(group_name, "%d", (int32_t)sample-&gt;gid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ios_log(this, logfp, "%0.6lf,%s,%s,%0.4lf,%s,%s,%s,%s,%s,%s", epoch_time,</div><div class='add'>+            fop_enum_to_pri_string(sample-&gt;fop_type),</div><div class='add'>+            gf_fop_string(sample-&gt;fop_type), sample-&gt;elapsed, xlator_name,</div><div class='add'>+            instance_name, username, group_name, hostname, port);</div><div class='add'>+    goto out;</div><div class='ctx'> err:</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                "Error parsing socket identifier");</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_ERROR, "Error parsing socket identifier");</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (group_name);</div><div class='del'>-        GF_FREE (username);</div><div class='add'>+    GF_FREE(group_name);</div><div class='add'>+    GF_FREE(username);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1183,3424 +1139,3210 @@ out:</div><div class='ctx'>  * contents of the saved reference.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-io_stats_dump_latency_samples_logfp (xlator_t *this, FILE *logfp)</div><div class='del'>-{</div><div class='del'>-        uint64_t              i = 0;</div><div class='del'>-        struct ios_conf       *conf = NULL;</div><div class='del'>-        ios_sample_buf_t      *sample_buf = NULL;</div><div class='del'>-        int                   ret = 1;  /* Default to error */</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Save pointer to old buffer; the CS equivalent of</div><div class='del'>-         * Indiana Jones: https://www.youtube.com/watch?v=Pr-8AP0To4k,</div><div class='del'>-         * though ours will end better I hope!</div><div class='del'>-         */</div><div class='del'>-        sample_buf = conf-&gt;ios_sample_buf;</div><div class='del'>-        if (!sample_buf) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Sampling buffer is null, bailing!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Empty case, nothing to do, exit. */</div><div class='del'>-        if (sample_buf-&gt;collected == 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "No samples, dump not required.");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Init a new buffer, so we are free to work on the one we saved a</div><div class='del'>-         * reference to above.</div><div class='del'>-         */</div><div class='del'>-        if (ios_init_sample_buf (conf) != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Failed to init new sampling buffer, out of memory?");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+io_stats_dump_latency_samples_logfp(xlator_t *this, FILE *logfp)</div><div class='add'>+{</div><div class='add'>+    uint64_t i = 0;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    ios_sample_buf_t *sample_buf = NULL;</div><div class='add'>+    int ret = 1; /* Default to error */</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Save pointer to old buffer; the CS equivalent of</div><div class='add'>+     * Indiana Jones: https://www.youtube.com/watch?v=Pr-8AP0To4k,</div><div class='add'>+     * though ours will end better I hope!</div><div class='add'>+     */</div><div class='add'>+    sample_buf = conf-&gt;ios_sample_buf;</div><div class='add'>+    if (!sample_buf) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Sampling buffer is null, bailing!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Wrap-around case, dump from pos to sample_buf-&gt;size -1</div><div class='del'>-         * and then from 0 to sample_buf-&gt;pos (covered off by</div><div class='del'>-         * "simple case")</div><div class='del'>-         */</div><div class='del'>-        if (sample_buf-&gt;collected &gt; sample_buf-&gt;pos + 1) {</div><div class='del'>-                for (i = sample_buf-&gt;pos; i &lt; sample_buf-&gt;size; i++) {</div><div class='del'>-                        _io_stats_write_latency_sample (this,</div><div class='del'>-                                &amp;(sample_buf-&gt;ios_samples[i]), logfp);</div><div class='del'>-                }</div><div class='add'>+    /* Empty case, nothing to do, exit. */</div><div class='add'>+    if (sample_buf-&gt;collected == 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "No samples, dump not required.");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Init a new buffer, so we are free to work on the one we saved a</div><div class='add'>+     * reference to above.</div><div class='add'>+     */</div><div class='add'>+    if (ios_init_sample_buf(conf) != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Failed to init new sampling buffer, out of memory?");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Wrap-around case, dump from pos to sample_buf-&gt;size -1</div><div class='add'>+     * and then from 0 to sample_buf-&gt;pos (covered off by</div><div class='add'>+     * "simple case")</div><div class='add'>+     */</div><div class='add'>+    if (sample_buf-&gt;collected &gt; sample_buf-&gt;pos + 1) {</div><div class='add'>+        for (i = sample_buf-&gt;pos; i &lt; sample_buf-&gt;size; i++) {</div><div class='add'>+            _io_stats_write_latency_sample(this, &amp;(sample_buf-&gt;ios_samples[i]),</div><div class='add'>+                                           logfp);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Simple case: Dump from 0 to sample_buf-&gt;pos */</div><div class='del'>-        for (i = 0; i &lt; sample_buf-&gt;pos; i++) {</div><div class='del'>-                _io_stats_write_latency_sample (this,</div><div class='del'>-                        &amp;(sample_buf-&gt;ios_samples[i]), logfp);</div><div class='del'>-        }</div><div class='del'>-        ios_destroy_sample_buf (sample_buf);</div><div class='add'>+    /* Simple case: Dump from 0 to sample_buf-&gt;pos */</div><div class='add'>+    for (i = 0; i &lt; sample_buf-&gt;pos; i++) {</div><div class='add'>+        _io_stats_write_latency_sample(this, &amp;(sample_buf-&gt;ios_samples[i]),</div><div class='add'>+                                       logfp);</div><div class='add'>+    }</div><div class='add'>+    ios_destroy_sample_buf(sample_buf);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_dump_global_to_logfp (xlator_t *this, struct ios_global_stats *stats,</div><div class='del'>-                               struct timeval *now, int interval, FILE *logfp)</div><div class='del'>-{</div><div class='del'>-        int                   i = 0;</div><div class='del'>-        int                   per_line = 0;</div><div class='del'>-        int                   index = 0;</div><div class='del'>-        struct ios_stat_head *list_head = NULL;</div><div class='del'>-        struct ios_conf      *conf = NULL;</div><div class='del'>-        char                  timestr[256] = {0, };</div><div class='del'>-        char                  str_header[128] = {0};</div><div class='del'>-        char                  str_read[128] = {0};</div><div class='del'>-        char                  str_write[128] = {0};</div><div class='del'>-        uint64_t              fop_hits = 0;</div><div class='del'>-        uint64_t              block_count_read = 0;</div><div class='del'>-        uint64_t              block_count_write = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (interval == -1)</div><div class='del'>-                ios_log (this, logfp, "\n=== Cumulative stats ===");</div><div class='add'>+io_stats_dump_global_to_logfp(xlator_t *this, struct ios_global_stats *stats,</div><div class='add'>+                              struct timeval *now, int interval, FILE *logfp)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int per_line = 0;</div><div class='add'>+    int index = 0;</div><div class='add'>+    struct ios_stat_head *list_head = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char str_header[128] = {0};</div><div class='add'>+    char str_read[128] = {0};</div><div class='add'>+    char str_write[128] = {0};</div><div class='add'>+    uint64_t fop_hits = 0;</div><div class='add'>+    uint64_t block_count_read = 0;</div><div class='add'>+    uint64_t block_count_write = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (interval == -1)</div><div class='add'>+        ios_log(this, logfp, "\n=== Cumulative stats ===");</div><div class='add'>+    else</div><div class='add'>+        ios_log(this, logfp, "\n=== Interval %d stats ===", interval);</div><div class='add'>+    ios_log(this, logfp, "      Duration : %" PRId64 " secs",</div><div class='add'>+            (uint64_t)(now-&gt;tv_sec - stats-&gt;started_at.tv_sec));</div><div class='add'>+    ios_log(this, logfp, "     BytesRead : %" GF_PRI_ATOMIC,</div><div class='add'>+            GF_ATOMIC_GET(stats-&gt;data_read));</div><div class='add'>+    ios_log(this, logfp, "  BytesWritten : %" GF_PRI_ATOMIC "\n",</div><div class='add'>+            GF_ATOMIC_GET(stats-&gt;data_written));</div><div class='add'>+</div><div class='add'>+    snprintf(str_header, sizeof(str_header), "%-12s %c", "Block Size", ':');</div><div class='add'>+    snprintf(str_read, sizeof(str_read), "%-12s %c", "Read Count", ':');</div><div class='add'>+    snprintf(str_write, sizeof(str_write), "%-12s %c", "Write Count", ':');</div><div class='add'>+    index = 14;</div><div class='add'>+    for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='add'>+        block_count_read = GF_ATOMIC_GET(stats-&gt;block_count_read[i]);</div><div class='add'>+        block_count_write = GF_ATOMIC_GET(stats-&gt;block_count_write[i]);</div><div class='add'>+        if ((block_count_read == 0) &amp;&amp; (block_count_write == 0))</div><div class='add'>+            continue;</div><div class='add'>+        per_line++;</div><div class='add'>+</div><div class='add'>+        snprintf(str_header + index, sizeof(str_header) - index, "%16dB+",</div><div class='add'>+                 (1 &lt;&lt; i));</div><div class='add'>+        if (block_count_read)</div><div class='add'>+            snprintf(str_read + index, sizeof(str_read) - index, "%18" PRId64,</div><div class='add'>+                     block_count_read);</div><div class='ctx'>         else</div><div class='del'>-                ios_log (this, logfp, "\n=== Interval %d stats ===",</div><div class='del'>-                         interval);</div><div class='del'>-        ios_log (this, logfp, "      Duration : %"PRId64" secs",</div><div class='del'>-                 (uint64_t) (now-&gt;tv_sec - stats-&gt;started_at.tv_sec));</div><div class='del'>-        ios_log (this, logfp, "     BytesRead : %"GF_PRI_ATOMIC,</div><div class='del'>-                 GF_ATOMIC_GET (stats-&gt;data_read));</div><div class='del'>-        ios_log (this, logfp, "  BytesWritten : %"GF_PRI_ATOMIC"\n",</div><div class='del'>-                 GF_ATOMIC_GET (stats-&gt;data_written));</div><div class='del'>-</div><div class='del'>-        snprintf (str_header, sizeof (str_header), "%-12s %c", "Block Size", ':');</div><div class='del'>-        snprintf (str_read, sizeof (str_read), "%-12s %c", "Read Count", ':');</div><div class='del'>-        snprintf (str_write, sizeof (str_write), "%-12s %c", "Write Count", ':');</div><div class='del'>-        index = 14;</div><div class='del'>-        for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='del'>-                block_count_read = GF_ATOMIC_GET (stats-&gt;block_count_read[i]);</div><div class='del'>-                block_count_write = GF_ATOMIC_GET (stats-&gt;block_count_write[i]);</div><div class='del'>-                if ((block_count_read == 0) &amp;&amp; (block_count_write == 0))</div><div class='del'>-                        continue;</div><div class='del'>-                per_line++;</div><div class='del'>-</div><div class='del'>-                snprintf (str_header+index, sizeof (str_header)-index,</div><div class='del'>-                          "%16dB+", (1&lt;&lt;i));</div><div class='del'>-                if (block_count_read)</div><div class='del'>-                        snprintf (str_read+index, sizeof (str_read)-index,</div><div class='del'>-                                  "%18"PRId64, block_count_read);</div><div class='del'>-                else    snprintf (str_read+index, sizeof (str_read)-index,</div><div class='del'>-                                  "%18s", "0");</div><div class='del'>-                if (block_count_write)</div><div class='del'>-                        snprintf (str_write+index, sizeof (str_write)-index,</div><div class='del'>-                                  "%18"GF_PRI_ATOMIC, block_count_write);</div><div class='del'>-                else    snprintf (str_write+index, sizeof (str_write)-index,</div><div class='del'>-                                  "%18s", "0");</div><div class='del'>-</div><div class='del'>-                index += 18;</div><div class='del'>-                if (per_line == 3) {</div><div class='del'>-                        ios_log (this, logfp, "%s", str_header);</div><div class='del'>-                        ios_log (this, logfp, "%s", str_read);</div><div class='del'>-                        ios_log (this, logfp, "%s\n", str_write);</div><div class='del'>-</div><div class='del'>-                        snprintf (str_header, sizeof (str_header), "%-12s %c",</div><div class='del'>-                                  "Block Size", ':');</div><div class='del'>-                        snprintf (str_read, sizeof (str_read), "%-12s %c",</div><div class='del'>-                                  "Read Count", ':');</div><div class='del'>-                        snprintf (str_write, sizeof (str_write), "%-12s %c",</div><div class='del'>-                                  "Write Count", ':');</div><div class='del'>-</div><div class='del'>-                        index = 14;</div><div class='del'>-                        per_line = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (per_line != 0) {</div><div class='del'>-                ios_log (this, logfp, "%s", str_header);</div><div class='del'>-                ios_log (this, logfp, "%s", str_read);</div><div class='del'>-                ios_log (this, logfp, "%s\n", str_write);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ios_log (this, logfp, "%-13s %10s %14s %14s %14s", "Fop",</div><div class='del'>-                 "Call Count", "Avg-Latency", "Min-Latency",</div><div class='del'>-                 "Max-Latency");</div><div class='del'>-        ios_log (this, logfp, "%-13s %10s %14s %14s %14s", "---", "----------",</div><div class='del'>-                 "-----------", "-----------", "-----------");</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                fop_hits = GF_ATOMIC_GET (stats-&gt;fop_hits[i]);</div><div class='del'>-                if (fop_hits &amp;&amp; !stats-&gt;latency[i].avg)</div><div class='del'>-                        ios_log (this, logfp, "%-13s %10"GF_PRI_ATOMIC" %11s "</div><div class='del'>-                                 "us %11s us %11s us", gf_fop_list[i],</div><div class='del'>-                                 fop_hits, "0", "0", "0");</div><div class='del'>-                else if (fop_hits &amp;&amp; stats-&gt;latency[i].avg)</div><div class='del'>-                        ios_log (this, logfp, "%-13s %10"GF_PRI_ATOMIC" "</div><div class='del'>-                                 "%11.2lf us %11.2lf us %11.2lf us",</div><div class='del'>-                                 gf_fop_list[i], fop_hits,</div><div class='del'>-                                 stats-&gt;latency[i].avg, stats-&gt;latency[i].min,</div><div class='del'>-                                 stats-&gt;latency[i].max);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='del'>-                fop_hits = GF_ATOMIC_GET (stats-&gt;upcall_hits[i]);</div><div class='del'>-                if (fop_hits)</div><div class='del'>-                        ios_log (this, logfp, "%-13s %10"PRId64" %11s "</div><div class='del'>-                                 "us %11s us %11s us", gf_upcall_list[i],</div><div class='del'>-                                 fop_hits, "0", "0", "0");</div><div class='add'>+            snprintf(str_read + index, sizeof(str_read) - index, "%18s", "0");</div><div class='add'>+        if (block_count_write)</div><div class='add'>+            snprintf(str_write + index, sizeof(str_write) - index,</div><div class='add'>+                     "%18" GF_PRI_ATOMIC, block_count_write);</div><div class='add'>+        else</div><div class='add'>+            snprintf(str_write + index, sizeof(str_write) - index, "%18s", "0");</div><div class='add'>+</div><div class='add'>+        index += 18;</div><div class='add'>+        if (per_line == 3) {</div><div class='add'>+            ios_log(this, logfp, "%s", str_header);</div><div class='add'>+            ios_log(this, logfp, "%s", str_read);</div><div class='add'>+            ios_log(this, logfp, "%s\n", str_write);</div><div class='add'>+</div><div class='add'>+            snprintf(str_header, sizeof(str_header), "%-12s %c", "Block Size",</div><div class='add'>+                     ':');</div><div class='add'>+            snprintf(str_read, sizeof(str_read), "%-12s %c", "Read Count", ':');</div><div class='add'>+            snprintf(str_write, sizeof(str_write), "%-12s %c", "Write Count",</div><div class='add'>+                     ':');</div><div class='add'>+</div><div class='add'>+            index = 14;</div><div class='add'>+            per_line = 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ios_log (this, logfp, "------ ----- ----- ----- ----- ----- ----- ----- "</div><div class='del'>-                 " ----- ----- ----- -----\n");</div><div class='del'>-</div><div class='del'>-        if (interval == -1) {</div><div class='del'>-                LOCK (&amp;conf-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        gf_time_fmt (timestr, sizeof timestr,</div><div class='del'>-                                     conf-&gt;cumulative.max_openfd_time.tv_sec,</div><div class='del'>-                                     gf_timefmt_FT);</div><div class='del'>-                        snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                                  ".%"GF_PRI_SUSECONDS,</div><div class='del'>-                                  conf-&gt;cumulative.max_openfd_time.tv_usec);</div><div class='del'>-                        ios_log (this, logfp, "Current open fd's: %"PRId64</div><div class='del'>-                                 " Max open fd's: %"PRId64" time %s",</div><div class='del'>-                                 conf-&gt;cumulative.nr_opens,</div><div class='del'>-                                 conf-&gt;cumulative.max_nr_opens, timestr);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;conf-&gt;lock);</div><div class='del'>-                ios_log (this, logfp, "\n==========Open File Stats========");</div><div class='del'>-                ios_log (this, logfp, "\nCOUNT:  \t  FILE NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPEN];</div><div class='del'>-                ios_dump_file_stats (list_head, this, logfp);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp, "\n==========Read File Stats========");</div><div class='del'>-                ios_log (this, logfp, "\nCOUNT:  \t  FILE NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READ];</div><div class='del'>-                ios_dump_file_stats (list_head, this, logfp);</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp, "\n==========Write File Stats========");</div><div class='del'>-                ios_log (this, logfp, "\nCOUNT:  \t  FILE NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_WRITE];</div><div class='del'>-                ios_dump_file_stats (list_head, this, logfp);</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp, "\n==========Directory open stats========");</div><div class='del'>-                ios_log (this, logfp, "\nCOUNT:  \t  DIRECTORY NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPENDIR];</div><div class='del'>-                ios_dump_file_stats (list_head, this, logfp);</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp, "\n========Directory readdirp Stats=======");</div><div class='del'>-                ios_log (this, logfp, "\nCOUNT:  \t  DIRECTORY NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READDIRP];</div><div class='del'>-                ios_dump_file_stats (list_head, this, logfp);</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp, "\n========Read Throughput File Stats=====");</div><div class='del'>-                ios_log (this, logfp, "\nTIMESTAMP \t\t\t THROUGHPUT(KBPS)"</div><div class='del'>-                         "\tFILE NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_READ];</div><div class='del'>-                ios_dump_throughput_stats(list_head, this, logfp,</div><div class='del'>-                                          IOS_STATS_THRU_READ);</div><div class='del'>-</div><div class='del'>-                ios_log (this, logfp, "\n======Write Throughput File Stats======");</div><div class='del'>-                ios_log (this, logfp, "\nTIMESTAMP \t\t\t THROUGHPUT(KBPS)"</div><div class='del'>-                         "\tFILE NAME");</div><div class='del'>-                list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_WRITE];</div><div class='del'>-                ios_dump_throughput_stats (list_head, this, logfp,</div><div class='del'>-                                           IOS_STATS_THRU_WRITE);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (per_line != 0) {</div><div class='add'>+        ios_log(this, logfp, "%s", str_header);</div><div class='add'>+        ios_log(this, logfp, "%s", str_read);</div><div class='add'>+        ios_log(this, logfp, "%s\n", str_write);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ios_log(this, logfp, "%-13s %10s %14s %14s %14s", "Fop", "Call Count",</div><div class='add'>+            "Avg-Latency", "Min-Latency", "Max-Latency");</div><div class='add'>+    ios_log(this, logfp, "%-13s %10s %14s %14s %14s", "---", "----------",</div><div class='add'>+            "-----------", "-----------", "-----------");</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        fop_hits = GF_ATOMIC_GET(stats-&gt;fop_hits[i]);</div><div class='add'>+        if (fop_hits &amp;&amp; !stats-&gt;latency[i].avg)</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "%-13s %10" GF_PRI_ATOMIC</div><div class='add'>+                    " %11s "</div><div class='add'>+                    "us %11s us %11s us",</div><div class='add'>+                    gf_fop_list[i], fop_hits, "0", "0", "0");</div><div class='add'>+        else if (fop_hits &amp;&amp; stats-&gt;latency[i].avg)</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "%-13s %10" GF_PRI_ATOMIC</div><div class='add'>+                    " "</div><div class='add'>+                    "%11.2lf us %11.2lf us %11.2lf us",</div><div class='add'>+                    gf_fop_list[i], fop_hits, stats-&gt;latency[i].avg,</div><div class='add'>+                    stats-&gt;latency[i].min, stats-&gt;latency[i].max);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='add'>+        fop_hits = GF_ATOMIC_GET(stats-&gt;upcall_hits[i]);</div><div class='add'>+        if (fop_hits)</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "%-13s %10" PRId64</div><div class='add'>+                    " %11s "</div><div class='add'>+                    "us %11s us %11s us",</div><div class='add'>+                    gf_upcall_list[i], fop_hits, "0", "0", "0");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ios_log(this, logfp,</div><div class='add'>+            "------ ----- ----- ----- ----- ----- ----- ----- "</div><div class='add'>+            " ----- ----- ----- -----\n");</div><div class='add'>+</div><div class='add'>+    if (interval == -1) {</div><div class='add'>+        LOCK(&amp;conf-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            gf_time_fmt(timestr, sizeof timestr,</div><div class='add'>+                        conf-&gt;cumulative.max_openfd_time.tv_sec, gf_timefmt_FT);</div><div class='add'>+            snprintf(timestr + strlen(timestr),</div><div class='add'>+                     sizeof timestr - strlen(timestr), ".%" GF_PRI_SUSECONDS,</div><div class='add'>+                     conf-&gt;cumulative.max_openfd_time.tv_usec);</div><div class='add'>+            ios_log(this, logfp,</div><div class='add'>+                    "Current open fd's: %" PRId64 " Max open fd's: %" PRId64</div><div class='add'>+                    " time %s",</div><div class='add'>+                    conf-&gt;cumulative.nr_opens, conf-&gt;cumulative.max_nr_opens,</div><div class='add'>+                    timestr);</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+        UNLOCK(&amp;conf-&gt;lock);</div><div class='add'>+        ios_log(this, logfp, "\n==========Open File Stats========");</div><div class='add'>+        ios_log(this, logfp, "\nCOUNT:  \t  FILE NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPEN];</div><div class='add'>+        ios_dump_file_stats(list_head, this, logfp);</div><div class='add'>+</div><div class='add'>+        ios_log(this, logfp, "\n==========Read File Stats========");</div><div class='add'>+        ios_log(this, logfp, "\nCOUNT:  \t  FILE NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READ];</div><div class='add'>+        ios_dump_file_stats(list_head, this, logfp);</div><div class='add'>+</div><div class='add'>+        ios_log(this, logfp, "\n==========Write File Stats========");</div><div class='add'>+        ios_log(this, logfp, "\nCOUNT:  \t  FILE NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_WRITE];</div><div class='add'>+        ios_dump_file_stats(list_head, this, logfp);</div><div class='add'>+</div><div class='add'>+        ios_log(this, logfp, "\n==========Directory open stats========");</div><div class='add'>+        ios_log(this, logfp, "\nCOUNT:  \t  DIRECTORY NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPENDIR];</div><div class='add'>+        ios_dump_file_stats(list_head, this, logfp);</div><div class='add'>+</div><div class='add'>+        ios_log(this, logfp, "\n========Directory readdirp Stats=======");</div><div class='add'>+        ios_log(this, logfp, "\nCOUNT:  \t  DIRECTORY NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READDIRP];</div><div class='add'>+        ios_dump_file_stats(list_head, this, logfp);</div><div class='add'>+</div><div class='add'>+        ios_log(this, logfp, "\n========Read Throughput File Stats=====");</div><div class='add'>+        ios_log(this, logfp,</div><div class='add'>+                "\nTIMESTAMP \t\t\t THROUGHPUT(KBPS)"</div><div class='add'>+                "\tFILE NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_READ];</div><div class='add'>+        ios_dump_throughput_stats(list_head, this, logfp, IOS_STATS_THRU_READ);</div><div class='add'>+</div><div class='add'>+        ios_log(this, logfp, "\n======Write Throughput File Stats======");</div><div class='add'>+        ios_log(this, logfp,</div><div class='add'>+                "\nTIMESTAMP \t\t\t THROUGHPUT(KBPS)"</div><div class='add'>+                "\tFILE NAME");</div><div class='add'>+        list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_WRITE];</div><div class='add'>+        ios_dump_throughput_stats(list_head, this, logfp, IOS_STATS_THRU_WRITE);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_dump_global_to_dict (xlator_t *this, struct ios_global_stats *stats,</div><div class='del'>-                              struct timeval *now, int interval, dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        char            key[256] = {0};</div><div class='del'>-        uint64_t        sec = 0;</div><div class='del'>-        int             i = 0;</div><div class='del'>-        uint64_t        count = 0;</div><div class='del'>-        uint64_t        fop_hits = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (stats);</div><div class='del'>-        GF_ASSERT (now);</div><div class='del'>-        GF_ASSERT (dict);</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        if (interval == -1)</div><div class='del'>-                snprintf (key, sizeof (key), "cumulative");</div><div class='del'>-        else</div><div class='del'>-                snprintf (key, sizeof (key), "interval");</div><div class='del'>-        ret = dict_set_int32 (dict, key, interval);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set "</div><div class='del'>-                        "interval %d", interval);</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-duration", interval);</div><div class='del'>-        sec = (uint64_t) (now-&gt;tv_sec - stats-&gt;started_at.tv_sec);</div><div class='del'>-        ret = dict_set_uint64 (dict, key, sec);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set "</div><div class='del'>-                        "duration(%d) - %"PRId64, interval, sec);</div><div class='add'>+io_stats_dump_global_to_dict(xlator_t *this, struct ios_global_stats *stats,</div><div class='add'>+                             struct timeval *now, int interval, dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char key[256] = {0};</div><div class='add'>+    uint64_t sec = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+    uint64_t fop_hits = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(stats);</div><div class='add'>+    GF_ASSERT(now);</div><div class='add'>+    GF_ASSERT(dict);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    if (interval == -1)</div><div class='add'>+        snprintf(key, sizeof(key), "cumulative");</div><div class='add'>+    else</div><div class='add'>+        snprintf(key, sizeof(key), "interval");</div><div class='add'>+    ret = dict_set_int32(dict, key, interval);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to set "</div><div class='add'>+               "interval %d",</div><div class='add'>+               interval);</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-duration", interval);</div><div class='add'>+    sec = (uint64_t)(now-&gt;tv_sec - stats-&gt;started_at.tv_sec);</div><div class='add'>+    ret = dict_set_uint64(dict, key, sec);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to set "</div><div class='add'>+               "duration(%d) - %" PRId64,</div><div class='add'>+               interval, sec);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-total-read", interval);</div><div class='add'>+    ret = dict_set_uint64(dict, key, GF_ATOMIC_GET(stats-&gt;data_read));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to set total "</div><div class='add'>+               "read(%d) - %" GF_PRI_ATOMIC,</div><div class='add'>+               interval, GF_ATOMIC_GET(stats-&gt;data_read));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(key, sizeof(key), "%d-total-write", interval);</div><div class='add'>+    ret = dict_set_uint64(dict, key, GF_ATOMIC_GET(stats-&gt;data_written));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to set total "</div><div class='add'>+               "write(%d) - %" GF_PRI_ATOMIC,</div><div class='add'>+               interval, GF_ATOMIC_GET(stats-&gt;data_written));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; 32; i++) {</div><div class='add'>+        count = GF_ATOMIC_GET(stats-&gt;block_count_read[i]);</div><div class='add'>+        if (count) {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-read-%d", interval, (1 &lt;&lt; i));</div><div class='add'>+            ret = dict_set_uint64(dict, key, count);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "failed to "</div><div class='add'>+                       "set read-%db+, with: %" PRId64,</div><div class='add'>+                       (1 &lt;&lt; i), count);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-total-read", interval);</div><div class='del'>-        ret = dict_set_uint64 (dict, key, GF_ATOMIC_GET (stats-&gt;data_read));</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set total "</div><div class='del'>-                       "read(%d) - %"GF_PRI_ATOMIC, interval,</div><div class='del'>-                       GF_ATOMIC_GET (stats-&gt;data_read));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='add'>+        count = GF_ATOMIC_GET(stats-&gt;block_count_write[i]);</div><div class='add'>+        if (count) {</div><div class='add'>+            snprintf(key, sizeof(key), "%d-write-%d", interval, (1 &lt;&lt; i));</div><div class='add'>+            ret = dict_set_uint64(dict, key, count);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "failed to "</div><div class='add'>+                       "set write-%db+, with: %" PRId64,</div><div class='add'>+                       (1 &lt;&lt; i), count);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        snprintf (key, sizeof (key), "%d-total-write", interval);</div><div class='del'>-        ret = dict_set_uint64 (dict, key, GF_ATOMIC_GET (stats-&gt;data_written));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        fop_hits = GF_ATOMIC_GET(stats-&gt;fop_hits[i]);</div><div class='add'>+        if (fop_hits == 0)</div><div class='add'>+            continue;</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-hits", interval, i);</div><div class='add'>+        ret = dict_set_uint64(dict, key, fop_hits);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set total "</div><div class='del'>-                        "write(%d) - %"GF_PRI_ATOMIC, interval,</div><div class='del'>-                        GF_ATOMIC_GET (stats-&gt;data_written));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; 32; i++) {</div><div class='del'>-                count = GF_ATOMIC_GET (stats-&gt;block_count_read[i]);</div><div class='del'>-                if (count) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-read-%d", interval,</div><div class='del'>-                                  (1 &lt;&lt; i));</div><div class='del'>-                        ret = dict_set_uint64 (dict, key, count);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                                        "set read-%db+, with: %"PRId64,</div><div class='del'>-                                        (1&lt;&lt;i), count);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set "</div><div class='add'>+                   "%s-fop-hits: %" GF_PRI_ATOMIC,</div><div class='add'>+                   gf_fop_list[i], fop_hits);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='del'>-                count = GF_ATOMIC_GET (stats-&gt;block_count_write[i]);</div><div class='del'>-                if (count) {</div><div class='del'>-                        snprintf (key, sizeof (key), "%d-write-%d", interval,</div><div class='del'>-                                  (1&lt;&lt;i));</div><div class='del'>-                        ret = dict_set_uint64 (dict, key, count);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                                        "set write-%db+, with: %"PRId64,</div><div class='del'>-                                        (1&lt;&lt;i), count);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        if (stats-&gt;latency[i].avg == 0)</div><div class='add'>+            continue;</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-avglatency", interval, i);</div><div class='add'>+        ret = dict_set_double(dict, key, stats-&gt;latency[i].avg);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set %s "</div><div class='add'>+                   "avglatency(%d) with %f",</div><div class='add'>+                   gf_fop_list[i], interval, stats-&gt;latency[i].avg);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                fop_hits = GF_ATOMIC_GET (stats-&gt;fop_hits[i]);</div><div class='del'>-                if (fop_hits == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-hits", interval, i);</div><div class='del'>-                ret = dict_set_uint64 (dict, key, fop_hits);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set "</div><div class='del'>-                                "%s-fop-hits: %"GF_PRI_ATOMIC, gf_fop_list[i],</div><div class='del'>-                                fop_hits);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (stats-&gt;latency[i].avg == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-avglatency", interval, i);</div><div class='del'>-                ret = dict_set_double (dict, key, stats-&gt;latency[i].avg);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set %s "</div><div class='del'>-                                "avglatency(%d) with %f", gf_fop_list[i],</div><div class='del'>-                                interval, stats-&gt;latency[i].avg);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-minlatency", interval, i);</div><div class='del'>-                ret = dict_set_double (dict, key, stats-&gt;latency[i].min);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set %s "</div><div class='del'>-                                "minlatency(%d) with %f", gf_fop_list[i],</div><div class='del'>-                                interval, stats-&gt;latency[i].min);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-maxlatency", interval, i);</div><div class='del'>-                ret = dict_set_double (dict, key, stats-&gt;latency[i].max);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "failed to set %s "</div><div class='del'>-                                "maxlatency(%d) with %f", gf_fop_list[i],</div><div class='del'>-                                interval, stats-&gt;latency[i].max);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-minlatency", interval, i);</div><div class='add'>+        ret = dict_set_double(dict, key, stats-&gt;latency[i].min);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set %s "</div><div class='add'>+                   "minlatency(%d) with %f",</div><div class='add'>+                   gf_fop_list[i], interval, stats-&gt;latency[i].min);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='del'>-                fop_hits = GF_ATOMIC_GET (stats-&gt;upcall_hits[i]);</div><div class='del'>-                if (fop_hits == 0)</div><div class='del'>-                        continue;</div><div class='del'>-                snprintf (key, sizeof (key), "%d-%d-upcall-hits", interval, i);</div><div class='del'>-                ret = dict_set_uint64 (dict, key, fop_hits);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                                "set %s-upcall-hits: %"PRIu64,</div><div class='del'>-                                gf_upcall_list[i], fop_hits);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-maxlatency", interval, i);</div><div class='add'>+        ret = dict_set_double(dict, key, stats-&gt;latency[i].max);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to set %s "</div><div class='add'>+                   "maxlatency(%d) with %f",</div><div class='add'>+                   gf_fop_list[i], interval, stats-&gt;latency[i].max);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++) {</div><div class='add'>+        fop_hits = GF_ATOMIC_GET(stats-&gt;upcall_hits[i]);</div><div class='add'>+        if (fop_hits == 0)</div><div class='add'>+            continue;</div><div class='add'>+        snprintf(key, sizeof(key), "%d-%d-upcall-hits", interval, i);</div><div class='add'>+        ret = dict_set_uint64(dict, key, fop_hits);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   "set %s-upcall-hits: %" PRIu64,</div><div class='add'>+                   gf_upcall_list[i], fop_hits);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_dump_global (xlator_t *this, struct ios_global_stats *stats,</div><div class='del'>-                      struct timeval *now, int interval,</div><div class='del'>-                      struct ios_dump_args *args)</div><div class='add'>+io_stats_dump_global(xlator_t *this, struct ios_global_stats *stats,</div><div class='add'>+                     struct timeval *now, int interval,</div><div class='add'>+                     struct ios_dump_args *args)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (args);</div><div class='del'>-        GF_ASSERT (now);</div><div class='del'>-        GF_ASSERT (stats);</div><div class='del'>-        GF_ASSERT (this);</div><div class='add'>+    GF_ASSERT(args);</div><div class='add'>+    GF_ASSERT(now);</div><div class='add'>+    GF_ASSERT(stats);</div><div class='add'>+    GF_ASSERT(this);</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        switch (args-&gt;type) {</div><div class='add'>+    switch (args-&gt;type) {</div><div class='ctx'>         case IOS_DUMP_TYPE_JSON_FILE:</div><div class='del'>-                ret = io_stats_dump_global_to_json_logfp (</div><div class='del'>-                    this, stats, now, interval, args-&gt;u.logfp);</div><div class='del'>-        break;</div><div class='add'>+            ret = io_stats_dump_global_to_json_logfp(this, stats, now, interval,</div><div class='add'>+                                                     args-&gt;u.logfp);</div><div class='add'>+            break;</div><div class='ctx'>         case IOS_DUMP_TYPE_FILE:</div><div class='del'>-                ret = io_stats_dump_global_to_logfp (this, stats, now,</div><div class='del'>-                                                     interval, args-&gt;u.logfp);</div><div class='del'>-        break;</div><div class='add'>+            ret = io_stats_dump_global_to_logfp(this, stats, now, interval,</div><div class='add'>+                                                args-&gt;u.logfp);</div><div class='add'>+            break;</div><div class='ctx'>         case IOS_DUMP_TYPE_DICT:</div><div class='del'>-                ret = io_stats_dump_global_to_dict (this, stats, now,</div><div class='del'>-                                                    interval, args-&gt;u.dict);</div><div class='del'>-        break;</div><div class='add'>+            ret = io_stats_dump_global_to_dict(this, stats, now, interval,</div><div class='add'>+                                               args-&gt;u.dict);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                GF_ASSERT (0);</div><div class='del'>-                ret = -1;</div><div class='del'>-        break;</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+            GF_ASSERT(0);</div><div class='add'>+            ret = -1;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ios_dump_args_init (struct ios_dump_args *args, ios_dump_type_t type,</div><div class='del'>-                    void *output)</div><div class='add'>+ios_dump_args_init(struct ios_dump_args *args, ios_dump_type_t type,</div><div class='add'>+                   void *output)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (args);</div><div class='del'>-        GF_ASSERT (type &gt; IOS_DUMP_TYPE_NONE &amp;&amp; type &lt; IOS_DUMP_TYPE_MAX);</div><div class='del'>-        GF_ASSERT (output);</div><div class='add'>+    GF_ASSERT(args);</div><div class='add'>+    GF_ASSERT(type &gt; IOS_DUMP_TYPE_NONE &amp;&amp; type &lt; IOS_DUMP_TYPE_MAX);</div><div class='add'>+    GF_ASSERT(output);</div><div class='ctx'> </div><div class='del'>-        args-&gt;type = type;</div><div class='del'>-        switch (args-&gt;type) {</div><div class='add'>+    args-&gt;type = type;</div><div class='add'>+    switch (args-&gt;type) {</div><div class='ctx'>         case IOS_DUMP_TYPE_JSON_FILE:</div><div class='ctx'>         case IOS_DUMP_TYPE_FILE:</div><div class='del'>-                args-&gt;u.logfp = output;</div><div class='del'>-                break;</div><div class='add'>+            args-&gt;u.logfp = output;</div><div class='add'>+            break;</div><div class='ctx'>         case IOS_DUMP_TYPE_DICT:</div><div class='del'>-                args-&gt;u.dict = output;</div><div class='del'>-                break;</div><div class='add'>+            args-&gt;u.dict = output;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                GF_ASSERT (0);</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+            GF_ASSERT(0);</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ios_global_stats_clear (struct ios_global_stats *stats, struct timeval *now)</div><div class='add'>+ios_global_stats_clear(struct ios_global_stats *stats, struct timeval *now)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (stats);</div><div class='del'>-        GF_ASSERT (now);</div><div class='add'>+    GF_ASSERT(stats);</div><div class='add'>+    GF_ASSERT(now);</div><div class='ctx'> </div><div class='del'>-        memset (stats, 0, sizeof (*stats));</div><div class='del'>-        stats-&gt;started_at = *now;</div><div class='add'>+    memset(stats, 0, sizeof(*stats));</div><div class='add'>+    stats-&gt;started_at = *now;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_dump (xlator_t *this, struct ios_dump_args *args,</div><div class='del'>-               gf1_cli_info_op op, gf_boolean_t is_peek)</div><div class='add'>+io_stats_dump(xlator_t *this, struct ios_dump_args *args, gf1_cli_info_op op,</div><div class='add'>+              gf_boolean_t is_peek)</div><div class='ctx'> {</div><div class='del'>-        struct ios_conf         *conf = NULL;</div><div class='del'>-        struct ios_global_stats  cumulative = { };</div><div class='del'>-        struct ios_global_stats  incremental = { };</div><div class='del'>-        int                      increment = 0;</div><div class='del'>-        struct timeval           now;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    struct ios_global_stats cumulative = {};</div><div class='add'>+    struct ios_global_stats incremental = {};</div><div class='add'>+    int increment = 0;</div><div class='add'>+    struct timeval now;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (args);</div><div class='del'>-        GF_ASSERT (args-&gt;type &gt; IOS_DUMP_TYPE_NONE);</div><div class='del'>-        GF_ASSERT (args-&gt;type &lt; IOS_DUMP_TYPE_MAX);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(args);</div><div class='add'>+    GF_ASSERT(args-&gt;type &gt; IOS_DUMP_TYPE_NONE);</div><div class='add'>+    GF_ASSERT(args-&gt;type &lt; IOS_DUMP_TYPE_MAX);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;now, NULL);</div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (op == GF_CLI_INFO_ALL ||</div><div class='del'>-                    op == GF_CLI_INFO_CUMULATIVE)</div><div class='del'>-                        cumulative  = conf-&gt;cumulative;</div><div class='add'>+    gettimeofday(&amp;now, NULL);</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (op == GF_CLI_INFO_ALL || op == GF_CLI_INFO_CUMULATIVE)</div><div class='add'>+            cumulative = conf-&gt;cumulative;</div><div class='ctx'> </div><div class='del'>-                if (op == GF_CLI_INFO_ALL ||</div><div class='del'>-                    op == GF_CLI_INFO_INCREMENTAL) {</div><div class='del'>-                        incremental = conf-&gt;incremental;</div><div class='del'>-                        increment = conf-&gt;increment;</div><div class='add'>+        if (op == GF_CLI_INFO_ALL || op == GF_CLI_INFO_INCREMENTAL) {</div><div class='add'>+            incremental = conf-&gt;incremental;</div><div class='add'>+            increment = conf-&gt;increment;</div><div class='ctx'> </div><div class='del'>-                        if (!is_peek) {</div><div class='del'>-                                increment = conf-&gt;increment++;</div><div class='add'>+            if (!is_peek) {</div><div class='add'>+                increment = conf-&gt;increment++;</div><div class='ctx'> </div><div class='del'>-                                ios_global_stats_clear (&amp;conf-&gt;incremental,</div><div class='del'>-                                                        &amp;now);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                ios_global_stats_clear(&amp;conf-&gt;incremental, &amp;now);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (op == GF_CLI_INFO_ALL ||</div><div class='del'>-            op == GF_CLI_INFO_CUMULATIVE)</div><div class='del'>-                io_stats_dump_global (this, &amp;cumulative, &amp;now, -1, args);</div><div class='add'>+    if (op == GF_CLI_INFO_ALL || op == GF_CLI_INFO_CUMULATIVE)</div><div class='add'>+        io_stats_dump_global(this, &amp;cumulative, &amp;now, -1, args);</div><div class='ctx'> </div><div class='del'>-        if (op == GF_CLI_INFO_ALL ||</div><div class='del'>-            op == GF_CLI_INFO_INCREMENTAL)</div><div class='del'>-                io_stats_dump_global (this, &amp;incremental, &amp;now, increment, args);</div><div class='add'>+    if (op == GF_CLI_INFO_ALL || op == GF_CLI_INFO_INCREMENTAL)</div><div class='add'>+        io_stats_dump_global(this, &amp;incremental, &amp;now, increment, args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_dump_fd (xlator_t *this, struct ios_fd *iosfd)</div><div class='add'>+io_stats_dump_fd(xlator_t *this, struct ios_fd *iosfd)</div><div class='ctx'> {</div><div class='del'>-        struct ios_conf         *conf = NULL;</div><div class='del'>-        struct timeval           now;</div><div class='del'>-        uint64_t                 sec = 0;</div><div class='del'>-        uint64_t                 usec = 0;</div><div class='del'>-        int                      i = 0;</div><div class='del'>-        uint64_t                 data_read = 0;</div><div class='del'>-        uint64_t                 data_written = 0;</div><div class='del'>-        uint64_t                 block_count_read = 0;</div><div class='del'>-        uint64_t                 block_count_write = 0;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    struct timeval now;</div><div class='add'>+    uint64_t sec = 0;</div><div class='add'>+    uint64_t usec = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    uint64_t data_read = 0;</div><div class='add'>+    uint64_t data_written = 0;</div><div class='add'>+    uint64_t block_count_read = 0;</div><div class='add'>+    uint64_t block_count_write = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;dump_fd_stats)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!conf-&gt;dump_fd_stats)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (!iosfd)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!iosfd)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;now, NULL);</div><div class='add'>+    gettimeofday(&amp;now, NULL);</div><div class='ctx'> </div><div class='del'>-        if (iosfd-&gt;opened_at.tv_usec &gt; now.tv_usec) {</div><div class='del'>-                now.tv_usec += 1000000;</div><div class='del'>-                now.tv_usec--;</div><div class='del'>-        }</div><div class='add'>+    if (iosfd-&gt;opened_at.tv_usec &gt; now.tv_usec) {</div><div class='add'>+        now.tv_usec += 1000000;</div><div class='add'>+        now.tv_usec--;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        sec = now.tv_sec - iosfd-&gt;opened_at.tv_sec;</div><div class='del'>-        usec = now.tv_usec - iosfd-&gt;opened_at.tv_usec;</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "--- fd stats ---");</div><div class='del'>-</div><div class='del'>-        if (iosfd-&gt;filename)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "      Filename : %s",</div><div class='del'>-                        iosfd-&gt;filename);</div><div class='del'>-</div><div class='del'>-        if (sec)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "      Lifetime : %"PRId64"secs, %"PRId64"usecs",</div><div class='del'>-                        sec, usec);</div><div class='del'>-</div><div class='del'>-        data_read = GF_ATOMIC_GET (iosfd-&gt;data_read);</div><div class='del'>-        if (data_read)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "     BytesRead : %"PRId64" bytes", data_read);</div><div class='del'>-</div><div class='del'>-        data_written = GF_ATOMIC_GET (iosfd-&gt;data_written);</div><div class='del'>-        if (data_written)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "  BytesWritten : %"PRId64" bytes",</div><div class='del'>-                        data_written);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 32; i++) {</div><div class='del'>-                block_count_read = GF_ATOMIC_GET (iosfd-&gt;block_count_read[i]);</div><div class='del'>-                if (block_count_read)</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_INFO, " Read %06db+ :"</div><div class='del'>-                                "%"PRId64, (1 &lt;&lt; i), block_count_read);</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='del'>-                block_count_write = GF_ATOMIC_GET (iosfd-&gt;block_count_write[i]);</div><div class='del'>-                if (block_count_write)</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                "Write %06db+ : %"PRId64,</div><div class='del'>-                                (1 &lt;&lt; i), block_count_write);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    sec = now.tv_sec - iosfd-&gt;opened_at.tv_sec;</div><div class='add'>+    usec = now.tv_usec - iosfd-&gt;opened_at.tv_usec;</div><div class='ctx'> </div><div class='del'>-void collect_ios_latency_sample (struct ios_conf *conf,</div><div class='del'>-                glusterfs_fop_t fop_type, double elapsed,</div><div class='del'>-                call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-        ios_sample_buf_t *ios_sample_buf = NULL;</div><div class='del'>-        ios_sample_t     *ios_sample = NULL;</div><div class='del'>-        struct timespec  *timestamp = NULL;</div><div class='del'>-        call_stack_t     *root = NULL;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "--- fd stats ---");</div><div class='ctx'> </div><div class='add'>+    if (iosfd-&gt;filename)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "      Filename : %s", iosfd-&gt;filename);</div><div class='ctx'> </div><div class='del'>-        ios_sample_buf = conf-&gt;ios_sample_buf;</div><div class='del'>-        LOCK (&amp;conf-&gt;ios_sampling_lock);</div><div class='del'>-        if (conf-&gt;ios_sample_interval == 0 ||</div><div class='del'>-            ios_sample_buf-&gt;observed % conf-&gt;ios_sample_interval != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (sec)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+               "      Lifetime : %" PRId64 "secs, %" PRId64 "usecs", sec, usec);</div><div class='ctx'> </div><div class='del'>-        timestamp = &amp;frame-&gt;begin;</div><div class='del'>-        root = frame-&gt;root;</div><div class='del'>-</div><div class='del'>-        ios_sample = &amp;(ios_sample_buf-&gt;ios_samples[ios_sample_buf-&gt;pos]);</div><div class='del'>-        ios_sample-&gt;elapsed = elapsed;</div><div class='del'>-        ios_sample-&gt;fop_type = fop_type;</div><div class='del'>-        ios_sample-&gt;uid = root-&gt;uid;</div><div class='del'>-        ios_sample-&gt;gid = root-&gt;gid;</div><div class='del'>-        (ios_sample-&gt;timestamp).tv_sec = timestamp-&gt;tv_sec;</div><div class='del'>-        (ios_sample-&gt;timestamp).tv_usec = timestamp-&gt;tv_nsec / 1000;</div><div class='del'>-        memcpy (&amp;ios_sample-&gt;identifier, &amp;root-&gt;identifier,</div><div class='del'>-                sizeof (root-&gt;identifier));</div><div class='del'>-</div><div class='del'>-        /* We've reached the end of the circular buffer, start from the</div><div class='del'>-         * beginning. */</div><div class='del'>-        if (ios_sample_buf-&gt;pos == (ios_sample_buf-&gt;size - 1))</div><div class='del'>-                ios_sample_buf-&gt;pos = 0;</div><div class='del'>-        else</div><div class='del'>-                ios_sample_buf-&gt;pos++;</div><div class='del'>-        ios_sample_buf-&gt;collected++;</div><div class='add'>+    data_read = GF_ATOMIC_GET(iosfd-&gt;data_read);</div><div class='add'>+    if (data_read)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "     BytesRead : %" PRId64 " bytes",</div><div class='add'>+               data_read);</div><div class='add'>+</div><div class='add'>+    data_written = GF_ATOMIC_GET(iosfd-&gt;data_written);</div><div class='add'>+    if (data_written)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "  BytesWritten : %" PRId64 " bytes",</div><div class='add'>+               data_written);</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; 32; i++) {</div><div class='add'>+        block_count_read = GF_ATOMIC_GET(iosfd-&gt;block_count_read[i]);</div><div class='add'>+        if (block_count_read)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   " Read %06db+ :"</div><div class='add'>+                   "%" PRId64,</div><div class='add'>+                   (1 &lt;&lt; i), block_count_read);</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='add'>+        block_count_write = GF_ATOMIC_GET(iosfd-&gt;block_count_write[i]);</div><div class='add'>+        if (block_count_write)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "Write %06db+ : %" PRId64, (1 &lt;&lt; i),</div><div class='add'>+                   block_count_write);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+collect_ios_latency_sample(struct ios_conf *conf, glusterfs_fop_t fop_type,</div><div class='add'>+                           double elapsed, call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    ios_sample_buf_t *ios_sample_buf = NULL;</div><div class='add'>+    ios_sample_t *ios_sample = NULL;</div><div class='add'>+    struct timespec *timestamp = NULL;</div><div class='add'>+    call_stack_t *root = NULL;</div><div class='add'>+</div><div class='add'>+    ios_sample_buf = conf-&gt;ios_sample_buf;</div><div class='add'>+    LOCK(&amp;conf-&gt;ios_sampling_lock);</div><div class='add'>+    if (conf-&gt;ios_sample_interval == 0 ||</div><div class='add'>+        ios_sample_buf-&gt;observed % conf-&gt;ios_sample_interval != 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    timestamp = &amp;frame-&gt;begin;</div><div class='add'>+    root = frame-&gt;root;</div><div class='add'>+</div><div class='add'>+    ios_sample = &amp;(ios_sample_buf-&gt;ios_samples[ios_sample_buf-&gt;pos]);</div><div class='add'>+    ios_sample-&gt;elapsed = elapsed;</div><div class='add'>+    ios_sample-&gt;fop_type = fop_type;</div><div class='add'>+    ios_sample-&gt;uid = root-&gt;uid;</div><div class='add'>+    ios_sample-&gt;gid = root-&gt;gid;</div><div class='add'>+    (ios_sample-&gt;timestamp).tv_sec = timestamp-&gt;tv_sec;</div><div class='add'>+    (ios_sample-&gt;timestamp).tv_usec = timestamp-&gt;tv_nsec / 1000;</div><div class='add'>+    memcpy(&amp;ios_sample-&gt;identifier, &amp;root-&gt;identifier,</div><div class='add'>+           sizeof(root-&gt;identifier));</div><div class='add'>+</div><div class='add'>+    /* We've reached the end of the circular buffer, start from the</div><div class='add'>+     * beginning. */</div><div class='add'>+    if (ios_sample_buf-&gt;pos == (ios_sample_buf-&gt;size - 1))</div><div class='add'>+        ios_sample_buf-&gt;pos = 0;</div><div class='add'>+    else</div><div class='add'>+        ios_sample_buf-&gt;pos++;</div><div class='add'>+    ios_sample_buf-&gt;collected++;</div><div class='ctx'> out:</div><div class='del'>-        ios_sample_buf-&gt;observed++;</div><div class='del'>-        UNLOCK (&amp;conf-&gt;ios_sampling_lock);</div><div class='del'>-        return;</div><div class='add'>+    ios_sample_buf-&gt;observed++;</div><div class='add'>+    UNLOCK(&amp;conf-&gt;ios_sampling_lock);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-update_ios_latency_stats (struct ios_global_stats   *stats, double elapsed,</div><div class='del'>-                          glusterfs_fop_t op)</div><div class='add'>+update_ios_latency_stats(struct ios_global_stats *stats, double elapsed,</div><div class='add'>+                         glusterfs_fop_t op)</div><div class='ctx'> {</div><div class='del'>-        double avg;</div><div class='add'>+    double avg;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (stats);</div><div class='add'>+    GF_ASSERT(stats);</div><div class='ctx'> </div><div class='del'>-        stats-&gt;latency[op].total += elapsed;</div><div class='add'>+    stats-&gt;latency[op].total += elapsed;</div><div class='ctx'> </div><div class='del'>-        if (!stats-&gt;latency[op].min)</div><div class='del'>-                stats-&gt;latency[op].min = elapsed;</div><div class='del'>-        if (stats-&gt;latency[op].min &gt; elapsed)</div><div class='del'>-                stats-&gt;latency[op].min = elapsed;</div><div class='del'>-        if (stats-&gt;latency[op].max &lt; elapsed)</div><div class='del'>-                stats-&gt;latency[op].max = elapsed;</div><div class='add'>+    if (!stats-&gt;latency[op].min)</div><div class='add'>+        stats-&gt;latency[op].min = elapsed;</div><div class='add'>+    if (stats-&gt;latency[op].min &gt; elapsed)</div><div class='add'>+        stats-&gt;latency[op].min = elapsed;</div><div class='add'>+    if (stats-&gt;latency[op].max &lt; elapsed)</div><div class='add'>+        stats-&gt;latency[op].max = elapsed;</div><div class='ctx'> </div><div class='del'>-        avg = stats-&gt;latency[op].avg;</div><div class='add'>+    avg = stats-&gt;latency[op].avg;</div><div class='ctx'> </div><div class='del'>-        stats-&gt;latency[op].avg = avg + (elapsed - avg) /</div><div class='del'>-                                       GF_ATOMIC_GET (stats-&gt;fop_hits[op]);</div><div class='add'>+    stats-&gt;latency[op].avg = avg + (elapsed - avg) /</div><div class='add'>+                                       GF_ATOMIC_GET(stats-&gt;fop_hits[op]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-update_ios_latency (struct ios_conf *conf, call_frame_t *frame,</div><div class='del'>-                    glusterfs_fop_t op)</div><div class='add'>+update_ios_latency(struct ios_conf *conf, call_frame_t *frame,</div><div class='add'>+                   glusterfs_fop_t op)</div><div class='ctx'> {</div><div class='del'>-        double elapsed;</div><div class='del'>-        struct timespec *begin, *end;</div><div class='add'>+    double elapsed;</div><div class='add'>+    struct timespec *begin, *end;</div><div class='ctx'> </div><div class='del'>-        begin = &amp;frame-&gt;begin;</div><div class='del'>-        end   = &amp;frame-&gt;end;</div><div class='add'>+    begin = &amp;frame-&gt;begin;</div><div class='add'>+    end = &amp;frame-&gt;end;</div><div class='ctx'> </div><div class='del'>-        elapsed = ((end-&gt;tv_sec - begin-&gt;tv_sec) * 1e9</div><div class='del'>-                   + (end-&gt;tv_nsec - begin-&gt;tv_nsec)) / 1000;</div><div class='add'>+    elapsed = ((end-&gt;tv_sec - begin-&gt;tv_sec) * 1e9 +</div><div class='add'>+               (end-&gt;tv_nsec - begin-&gt;tv_nsec)) /</div><div class='add'>+              1000;</div><div class='ctx'> </div><div class='del'>-        update_ios_latency_stats (&amp;conf-&gt;cumulative, elapsed, op);</div><div class='del'>-        update_ios_latency_stats (&amp;conf-&gt;incremental, elapsed, op);</div><div class='del'>-        collect_ios_latency_sample (conf, op, elapsed, frame);</div><div class='add'>+    update_ios_latency_stats(&amp;conf-&gt;cumulative, elapsed, op);</div><div class='add'>+    update_ios_latency_stats(&amp;conf-&gt;incremental, elapsed, op);</div><div class='add'>+    collect_ios_latency_sample(conf, op, elapsed, frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-io_stats_dump_stats_to_dict (xlator_t *this, dict_t *resp,</div><div class='del'>-                             ios_stats_type_t flags, int32_t list_cnt)</div><div class='del'>-{</div><div class='del'>-        struct ios_conf         *conf = NULL;</div><div class='del'>-        int                      cnt  = 0;</div><div class='del'>-        char                     key[256];</div><div class='del'>-        struct ios_stat_head    *list_head = NULL;</div><div class='del'>-        struct ios_stat_list    *entry = NULL;</div><div class='del'>-        int                      ret = -1;</div><div class='del'>-        ios_stats_thru_t         index = IOS_STATS_THRU_MAX;</div><div class='del'>-        char                     timestr[256] = {0, };</div><div class='del'>-        char                    *dict_timestr = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        switch (flags) {</div><div class='del'>-                case IOS_STATS_TYPE_OPEN:</div><div class='del'>-                        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPEN];</div><div class='del'>-                        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                ret = dict_set_uint64 (resp, "current-open",</div><div class='del'>-                                                     conf-&gt;cumulative.nr_opens);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                ret = dict_set_uint64 (resp, "max-open",</div><div class='del'>-                                                       conf-&gt;cumulative.max_nr_opens);</div><div class='del'>-</div><div class='del'>-                                gf_time_fmt (timestr, sizeof timestr,</div><div class='del'>-                                             conf-&gt;cumulative.max_openfd_time.tv_sec,</div><div class='del'>-                                             gf_timefmt_FT);</div><div class='del'>-                                if (conf-&gt;cumulative.max_openfd_time.tv_sec)</div><div class='del'>-                                        snprintf (timestr + strlen (timestr), sizeof timestr - strlen (timestr),</div><div class='del'>-                                                  ".%"GF_PRI_SUSECONDS,</div><div class='del'>-                                                  conf-&gt;cumulative.max_openfd_time.tv_usec);</div><div class='del'>-</div><div class='del'>-                                dict_timestr = gf_strdup (timestr);</div><div class='del'>-                                if (!dict_timestr)</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                ret = dict_set_dynstr (resp, "max-openfd-time",</div><div class='del'>-                                                       dict_timestr);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                        }</div><div class='add'>+io_stats_dump_stats_to_dict(xlator_t *this, dict_t *resp,</div><div class='add'>+                            ios_stats_type_t flags, int32_t list_cnt)</div><div class='add'>+{</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    char key[256];</div><div class='add'>+    struct ios_stat_head *list_head = NULL;</div><div class='add'>+    struct ios_stat_list *entry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ios_stats_thru_t index = IOS_STATS_THRU_MAX;</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *dict_timestr = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    switch (flags) {</div><div class='add'>+        case IOS_STATS_TYPE_OPEN:</div><div class='add'>+            list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPEN];</div><div class='add'>+            LOCK(&amp;conf-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                ret = dict_set_uint64(resp, "current-open",</div><div class='add'>+                                      conf-&gt;cumulative.nr_opens);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto unlock;</div><div class='add'>+                ret = dict_set_uint64(resp, "max-open",</div><div class='add'>+                                      conf-&gt;cumulative.max_nr_opens);</div><div class='add'>+</div><div class='add'>+                gf_time_fmt(timestr, sizeof timestr,</div><div class='add'>+                            conf-&gt;cumulative.max_openfd_time.tv_sec,</div><div class='add'>+                            gf_timefmt_FT);</div><div class='add'>+                if (conf-&gt;cumulative.max_openfd_time.tv_sec)</div><div class='add'>+                    snprintf(timestr + strlen(timestr),</div><div class='add'>+                             sizeof timestr - strlen(timestr),</div><div class='add'>+                             ".%" GF_PRI_SUSECONDS,</div><div class='add'>+                             conf-&gt;cumulative.max_openfd_time.tv_usec);</div><div class='add'>+</div><div class='add'>+                dict_timestr = gf_strdup(timestr);</div><div class='add'>+                if (!dict_timestr)</div><div class='add'>+                    goto unlock;</div><div class='add'>+                ret = dict_set_dynstr(resp, "max-openfd-time", dict_timestr);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         unlock:</div><div class='del'>-                        UNLOCK (&amp;conf-&gt;lock);</div><div class='del'>-                        /* Do not proceed if we came here because of some error</div><div class='del'>-                         * during the dict operation */</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        break;</div><div class='del'>-                case IOS_STATS_TYPE_READ:</div><div class='del'>-                        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READ];</div><div class='del'>-                        break;</div><div class='del'>-                case IOS_STATS_TYPE_WRITE:</div><div class='del'>-                        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_WRITE];</div><div class='del'>-                        break;</div><div class='del'>-                case IOS_STATS_TYPE_OPENDIR:</div><div class='del'>-                        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPENDIR];</div><div class='del'>-                        break;</div><div class='del'>-                case IOS_STATS_TYPE_READDIRP:</div><div class='del'>-                        list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READDIRP];</div><div class='del'>-                        break;</div><div class='del'>-                case IOS_STATS_TYPE_READ_THROUGHPUT:</div><div class='del'>-                        list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_READ];</div><div class='del'>-                        index = IOS_STATS_THRU_READ;</div><div class='del'>-                        break;</div><div class='del'>-                case IOS_STATS_TYPE_WRITE_THROUGHPUT:</div><div class='del'>-                        list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_WRITE];</div><div class='del'>-                        index = IOS_STATS_THRU_WRITE;</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                       goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = dict_set_int32 (resp, "top-op", flags);</div><div class='del'>-        if (!list_cnt)</div><div class='add'>+            UNLOCK(&amp;conf-&gt;lock);</div><div class='add'>+            /* Do not proceed if we came here because of some error</div><div class='add'>+             * during the dict operation */</div><div class='add'>+            if (ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        LOCK (&amp;list_head-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_for_each_entry (entry, &amp;list_head-&gt;iosstats-&gt;list, list) {</div><div class='del'>-</div><div class='del'>-                        cnt++;</div><div class='del'>-                        snprintf (key, 256, "%s-%d", "filename", cnt);</div><div class='del'>-                        ret = dict_set_str (resp, key, entry-&gt;iosstat-&gt;filename);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto unlock_list_head;</div><div class='del'>-                         snprintf (key, 256, "%s-%d", "value",cnt);</div><div class='del'>-                         ret = dict_set_uint64 (resp, key, entry-&gt;value);</div><div class='del'>-                         if (ret)</div><div class='del'>-                                 goto unlock_list_head;</div><div class='del'>-                         if (index != IOS_STATS_THRU_MAX) {</div><div class='del'>-                                 snprintf (key, 256, "%s-%d", "time-sec", cnt);</div><div class='del'>-                                 ret = dict_set_int32 (resp, key,</div><div class='del'>-                                         entry-&gt;iosstat-&gt;thru_counters[index].time.tv_sec);</div><div class='del'>-                                 if (ret)</div><div class='del'>-                                         goto unlock_list_head;</div><div class='del'>-                                 snprintf (key, 256, "%s-%d", "time-usec", cnt);</div><div class='del'>-                                 ret = dict_set_int32 (resp, key,</div><div class='del'>-                                         entry-&gt;iosstat-&gt;thru_counters[index].time.tv_usec);</div><div class='del'>-                                 if (ret)</div><div class='del'>-                                         goto unlock_list_head;</div><div class='del'>-                         }</div><div class='del'>-                         if (cnt == list_cnt)</div><div class='del'>-                                 break;</div><div class='add'>+            break;</div><div class='add'>+        case IOS_STATS_TYPE_READ:</div><div class='add'>+            list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READ];</div><div class='add'>+            break;</div><div class='add'>+        case IOS_STATS_TYPE_WRITE:</div><div class='add'>+            list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_WRITE];</div><div class='add'>+            break;</div><div class='add'>+        case IOS_STATS_TYPE_OPENDIR:</div><div class='add'>+            list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_OPENDIR];</div><div class='add'>+            break;</div><div class='add'>+        case IOS_STATS_TYPE_READDIRP:</div><div class='add'>+            list_head = &amp;conf-&gt;list[IOS_STATS_TYPE_READDIRP];</div><div class='add'>+            break;</div><div class='add'>+        case IOS_STATS_TYPE_READ_THROUGHPUT:</div><div class='add'>+            list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_READ];</div><div class='add'>+            index = IOS_STATS_THRU_READ;</div><div class='add'>+            break;</div><div class='add'>+        case IOS_STATS_TYPE_WRITE_THROUGHPUT:</div><div class='add'>+            list_head = &amp;conf-&gt;thru_list[IOS_STATS_THRU_WRITE];</div><div class='add'>+            index = IOS_STATS_THRU_WRITE;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                }</div><div class='add'>+        default:</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_int32(resp, "top-op", flags);</div><div class='add'>+    if (!list_cnt)</div><div class='add'>+        goto out;</div><div class='add'>+    LOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(entry, &amp;list_head-&gt;iosstats-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            cnt++;</div><div class='add'>+            snprintf(key, 256, "%s-%d", "filename", cnt);</div><div class='add'>+            ret = dict_set_str(resp, key, entry-&gt;iosstat-&gt;filename);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock_list_head;</div><div class='add'>+            snprintf(key, 256, "%s-%d", "value", cnt);</div><div class='add'>+            ret = dict_set_uint64(resp, key, entry-&gt;value);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto unlock_list_head;</div><div class='add'>+            if (index != IOS_STATS_THRU_MAX) {</div><div class='add'>+                snprintf(key, 256, "%s-%d", "time-sec", cnt);</div><div class='add'>+                ret = dict_set_int32(</div><div class='add'>+                    resp, key,</div><div class='add'>+                    entry-&gt;iosstat-&gt;thru_counters[index].time.tv_sec);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto unlock_list_head;</div><div class='add'>+                snprintf(key, 256, "%s-%d", "time-usec", cnt);</div><div class='add'>+                ret = dict_set_int32(</div><div class='add'>+                    resp, key,</div><div class='add'>+                    entry-&gt;iosstat-&gt;thru_counters[index].time.tv_usec);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto unlock_list_head;</div><div class='add'>+            }</div><div class='add'>+            if (cnt == list_cnt)</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock_list_head:</div><div class='del'>-        UNLOCK (&amp;list_head-&gt;lock);</div><div class='del'>-        /* ret is !=0 if some dict operation in the above critical region</div><div class='del'>-         * failed. */</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_int32 (resp, "members", cnt);</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    UNLOCK(&amp;list_head-&gt;lock);</div><div class='add'>+    /* ret is !=0 if some dict operation in the above critical region</div><div class='add'>+     * failed. */</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_int32(resp, "members", cnt);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct ios_stat*</div><div class='del'>-ios_init_iosstat (xlator_t *this, char *path, uuid_t gfid, inode_t *inode)</div><div class='add'>+static struct ios_stat *</div><div class='add'>+ios_init_iosstat(xlator_t *this, char *path, uuid_t gfid, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-        int              i       = 0;</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        iosstat = GF_CALLOC (1, sizeof (*iosstat), gf_io_stats_mt_ios_stat);</div><div class='del'>-        if (!iosstat)</div><div class='del'>-                goto out;</div><div class='add'>+    iosstat = GF_CALLOC(1, sizeof(*iosstat), gf_io_stats_mt_ios_stat);</div><div class='add'>+    if (!iosstat)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        iosstat-&gt;filename = gf_strdup (path);</div><div class='del'>-        gf_uuid_copy (iosstat-&gt;gfid, gfid);</div><div class='del'>-        LOCK_INIT (&amp;iosstat-&gt;lock);</div><div class='add'>+    iosstat-&gt;filename = gf_strdup(path);</div><div class='add'>+    gf_uuid_copy(iosstat-&gt;gfid, gfid);</div><div class='add'>+    LOCK_INIT(&amp;iosstat-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOS_STATS_TYPE_MAX; i++)</div><div class='del'>-                GF_ATOMIC_INIT (iosstat-&gt;counters[i], 0);</div><div class='add'>+    for (i = 0; i &lt; IOS_STATS_TYPE_MAX; i++)</div><div class='add'>+        GF_ATOMIC_INIT(iosstat-&gt;counters[i], 0);</div><div class='ctx'> </div><div class='del'>-        ios_inode_ctx_set (inode, this, iosstat);</div><div class='add'>+    ios_inode_ctx_set(inode, this, iosstat);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return iosstat;</div><div class='add'>+    return iosstat;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                     inode_t *inode, struct iatt *buf,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        struct ios_fd *iosfd = NULL;</div><div class='del'>-        char          *path = NULL;</div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-        struct ios_conf   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        path = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-</div><div class='del'>-        if (!path)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                GF_FREE (path);</div><div class='del'>-                goto unwind;</div><div class='add'>+io_stats_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct ios_fd *iosfd = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    path = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+</div><div class='add'>+    if (!path)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        GF_FREE(path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iosfd = GF_CALLOC(1, sizeof(*iosfd), gf_io_stats_mt_ios_fd);</div><div class='add'>+    if (!iosfd) {</div><div class='add'>+        GF_FREE(path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iosfd-&gt;filename = path;</div><div class='add'>+    gettimeofday(&amp;iosfd-&gt;opened_at, NULL);</div><div class='add'>+</div><div class='add'>+    ios_fd_ctx_set(fd, this, iosfd);</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        conf-&gt;cumulative.nr_opens++;</div><div class='add'>+        if (conf-&gt;cumulative.nr_opens &gt; conf-&gt;cumulative.max_nr_opens) {</div><div class='add'>+            conf-&gt;cumulative.max_nr_opens = conf-&gt;cumulative.nr_opens;</div><div class='add'>+            conf-&gt;cumulative.max_openfd_time = iosfd-&gt;opened_at;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        iosfd = GF_CALLOC (1, sizeof (*iosfd), gf_io_stats_mt_ios_fd);</div><div class='del'>-        if (!iosfd) {</div><div class='del'>-                GF_FREE (path);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iosfd-&gt;filename = path;</div><div class='del'>-        gettimeofday (&amp;iosfd-&gt;opened_at, NULL);</div><div class='del'>-</div><div class='del'>-        ios_fd_ctx_set (fd, this, iosfd);</div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                conf-&gt;cumulative.nr_opens++;</div><div class='del'>-                if (conf-&gt;cumulative.nr_opens &gt; conf-&gt;cumulative.max_nr_opens) {</div><div class='del'>-                        conf-&gt;cumulative.max_nr_opens = conf-&gt;cumulative.nr_opens;</div><div class='del'>-                        conf-&gt;cumulative.max_openfd_time = iosfd-&gt;opened_at;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='del'>-</div><div class='del'>-        iosstat = ios_init_iosstat (this, path, buf-&gt;ia_gfid, inode);</div><div class='del'>-        if (!iosstat)</div><div class='del'>-                GF_FREE (path);</div><div class='add'>+    iosstat = ios_init_iosstat(this, path, buf-&gt;ia_gfid, inode);</div><div class='add'>+    if (!iosstat)</div><div class='add'>+        GF_FREE(path);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, CREATE);</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, CREATE);</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        struct ios_fd     *iosfd = NULL;</div><div class='del'>-        char              *path = NULL;</div><div class='del'>-        struct ios_stat   *iosstat = NULL;</div><div class='del'>-        struct ios_conf   *conf = NULL;</div><div class='del'>-        int                i = 0;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        path = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-</div><div class='del'>-        if (!path)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                GF_FREE (path);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iosfd = GF_CALLOC (1, sizeof (*iosfd), gf_io_stats_mt_ios_fd);</div><div class='del'>-        if (!iosfd) {</div><div class='del'>-                GF_FREE (path);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iosfd-&gt;filename = path;</div><div class='del'>-        GF_ATOMIC_INIT (iosfd-&gt;data_read, 0);</div><div class='del'>-        GF_ATOMIC_INIT (iosfd-&gt;data_written, 0);</div><div class='del'>-        for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='del'>-                GF_ATOMIC_INIT (iosfd-&gt;block_count_write[i], 0);</div><div class='del'>-                GF_ATOMIC_INIT (iosfd-&gt;block_count_read[i], 0);</div><div class='del'>-        }</div><div class='del'>-        gettimeofday (&amp;iosfd-&gt;opened_at, NULL);</div><div class='del'>-</div><div class='del'>-        ios_fd_ctx_set (fd, this, iosfd);</div><div class='del'>-</div><div class='del'>-        ios_inode_ctx_get (fd-&gt;inode, this, &amp;iosstat);</div><div class='del'>-        if (!iosstat) {</div><div class='del'>-                iosstat = ios_init_iosstat (this, path, fd-&gt;inode-&gt;gfid,</div><div class='del'>-                                            fd-&gt;inode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                conf-&gt;cumulative.nr_opens++;</div><div class='del'>-                if (conf-&gt;cumulative.nr_opens &gt; conf-&gt;cumulative.max_nr_opens) {</div><div class='del'>-                        conf-&gt;cumulative.max_nr_opens = conf-&gt;cumulative.nr_opens;</div><div class='del'>-                        conf-&gt;cumulative.max_openfd_time = iosfd-&gt;opened_at;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='del'>-        if (iosstat) {</div><div class='del'>-                ios_bump_stats (this, iosstat, IOS_STATS_TYPE_OPEN);</div><div class='del'>-                iosstat = NULL;</div><div class='add'>+io_stats_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct ios_fd *iosfd = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    path = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+</div><div class='add'>+    if (!path)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        GF_FREE(path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iosfd = GF_CALLOC(1, sizeof(*iosfd), gf_io_stats_mt_ios_fd);</div><div class='add'>+    if (!iosfd) {</div><div class='add'>+        GF_FREE(path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iosfd-&gt;filename = path;</div><div class='add'>+    GF_ATOMIC_INIT(iosfd-&gt;data_read, 0);</div><div class='add'>+    GF_ATOMIC_INIT(iosfd-&gt;data_written, 0);</div><div class='add'>+    for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='add'>+        GF_ATOMIC_INIT(iosfd-&gt;block_count_write[i], 0);</div><div class='add'>+        GF_ATOMIC_INIT(iosfd-&gt;block_count_read[i], 0);</div><div class='add'>+    }</div><div class='add'>+    gettimeofday(&amp;iosfd-&gt;opened_at, NULL);</div><div class='add'>+</div><div class='add'>+    ios_fd_ctx_set(fd, this, iosfd);</div><div class='add'>+</div><div class='add'>+    ios_inode_ctx_get(fd-&gt;inode, this, &amp;iosstat);</div><div class='add'>+    if (!iosstat) {</div><div class='add'>+        iosstat = ios_init_iosstat(this, path, fd-&gt;inode-&gt;gfid, fd-&gt;inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        conf-&gt;cumulative.nr_opens++;</div><div class='add'>+        if (conf-&gt;cumulative.nr_opens &gt; conf-&gt;cumulative.max_nr_opens) {</div><div class='add'>+            conf-&gt;cumulative.max_nr_opens = conf-&gt;cumulative.nr_opens;</div><div class='add'>+            conf-&gt;cumulative.max_openfd_time = iosfd-&gt;opened_at;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='add'>+    if (iosstat) {</div><div class='add'>+        ios_bump_stats(this, iosstat, IOS_STATS_TYPE_OPEN);</div><div class='add'>+        iosstat = NULL;</div><div class='add'>+    }</div><div class='ctx'> unwind:</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, OPEN);</div><div class='del'>-</div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, OPEN);</div><div class='ctx'> </div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+io_stats_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, STAT);</div><div class='del'>-        STACK_UNWIND_STRICT (stat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, STAT);</div><div class='add'>+    STACK_UNWIND_STRICT(stat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iovec *vector, int32_t count,</div><div class='del'>-                    struct iatt *buf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+io_stats_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                   int32_t count, struct iatt *buf, struct iobref *iobref,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int              len = 0;</div><div class='del'>-        fd_t            *fd = NULL;</div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-</div><div class='del'>-        fd = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt; 0) {</div><div class='del'>-                len = iov_length (vector, count);</div><div class='del'>-                ios_bump_read (this, fd, len);</div><div class='del'>-        }</div><div class='add'>+    fd = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        UPDATE_PROFILE_STATS (frame, READ);</div><div class='del'>-        ios_inode_ctx_get (fd-&gt;inode, this, &amp;iosstat);</div><div class='add'>+    if (op_ret &gt; 0) {</div><div class='add'>+        len = iov_length(vector, count);</div><div class='add'>+        ios_bump_read(this, fd, len);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (iosstat) {</div><div class='del'>-                ios_bump_stats (this, iosstat, IOS_STATS_TYPE_READ);</div><div class='del'>-                BUMP_THROUGHPUT (iosstat, IOS_STATS_THRU_READ);</div><div class='del'>-                iosstat = NULL;</div><div class='del'>-        }</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, READ);</div><div class='add'>+    ios_inode_ctx_get(fd-&gt;inode, this, &amp;iosstat);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno,</div><div class='del'>-                             vector, count, buf, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (iosstat) {</div><div class='add'>+        ios_bump_stats(this, iosstat, IOS_STATS_TYPE_READ);</div><div class='add'>+        BUMP_THROUGHPUT(iosstat, IOS_STATS_THRU_READ);</div><div class='add'>+        iosstat = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, buf,</div><div class='add'>+                        iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-        inode_t         *inode   = NULL;</div><div class='del'>-</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, WRITE);</div><div class='del'>-        if (frame-&gt;local){</div><div class='del'>-                inode = frame-&gt;local;</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                ios_inode_ctx_get (inode, this, &amp;iosstat);</div><div class='del'>-                if (iosstat) {</div><div class='del'>-                        ios_bump_stats (this, iosstat, IOS_STATS_TYPE_WRITE);</div><div class='del'>-                        BUMP_THROUGHPUT (iosstat, IOS_STATS_THRU_WRITE);</div><div class='del'>-                        inode = NULL;</div><div class='del'>-                        iosstat = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+io_stats_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, WRITE);</div><div class='add'>+    if (frame-&gt;local) {</div><div class='add'>+        inode = frame-&gt;local;</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        ios_inode_ctx_get(inode, this, &amp;iosstat);</div><div class='add'>+        if (iosstat) {</div><div class='add'>+            ios_bump_stats(this, iosstat, IOS_STATS_TYPE_WRITE);</div><div class='add'>+            BUMP_THROUGHPUT(iosstat, IOS_STATS_THRU_WRITE);</div><div class='add'>+            inode = NULL;</div><div class='add'>+            iosstat = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, gf_dirent_t *buf, dict_t *xdata)</div><div class='add'>+io_stats_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, gf_dirent_t *buf,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-        inode_t         *inode   = frame-&gt;local;</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    inode_t *inode = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        UPDATE_PROFILE_STATS (frame, READDIRP);</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, READDIRP);</div><div class='ctx'> </div><div class='del'>-        ios_inode_ctx_get (inode, this, &amp;iosstat);</div><div class='add'>+    ios_inode_ctx_get(inode, this, &amp;iosstat);</div><div class='ctx'> </div><div class='del'>-        if (iosstat) {</div><div class='del'>-                ios_bump_stats (this, iosstat, IOS_STATS_TYPE_READDIRP);</div><div class='del'>-                iosstat = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (iosstat) {</div><div class='add'>+        ios_bump_stats(this, iosstat, IOS_STATS_TYPE_READDIRP);</div><div class='add'>+        iosstat = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, gf_dirent_t *buf, dict_t *xdata)</div><div class='add'>+io_stats_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, gf_dirent_t *buf,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, READDIR);</div><div class='del'>-        STACK_UNWIND_STRICT (readdir, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, READDIR);</div><div class='add'>+    STACK_UNWIND_STRICT(readdir, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+io_stats_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FSYNC);</div><div class='del'>-        STACK_UNWIND_STRICT (fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FSYNC);</div><div class='add'>+    STACK_UNWIND_STRICT(fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      struct iatt *preop, struct iatt *postop, dict_t *xdata)</div><div class='add'>+io_stats_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *preop,</div><div class='add'>+                     struct iatt *postop, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, SETATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (setattr, frame, op_ret, op_errno, preop, postop, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, SETATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(setattr, frame, op_ret, op_errno, preop, postop, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+io_stats_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, UNLINK);</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, UNLINK);</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                     struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                     struct iatt *prenewparent, struct iatt *postnewparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, RENAME);</div><div class='del'>-        STACK_UNWIND_STRICT (rename, frame, op_ret, op_errno, buf,</div><div class='del'>-                             preoldparent, postoldparent,</div><div class='del'>-                             prenewparent, postnewparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+io_stats_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                    dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, RENAME);</div><div class='add'>+    STACK_UNWIND_STRICT(rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                        postoldparent, prenewparent, postnewparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, const char *buf,</div><div class='del'>-                       struct iatt *sbuf, dict_t *xdata)</div><div class='add'>+io_stats_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, const char *buf,</div><div class='add'>+                      struct iatt *sbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, READLINK);</div><div class='del'>-        STACK_UNWIND_STRICT (readlink, frame, op_ret, op_errno, buf, sbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, READLINK);</div><div class='add'>+    STACK_UNWIND_STRICT(readlink, frame, op_ret, op_errno, buf, sbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     inode_t *inode, struct iatt *buf,</div><div class='del'>-                     dict_t *xdata, struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, LOOKUP);</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='del'>-                             postparent);</div><div class='del'>-        return 0;</div><div class='add'>+io_stats_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, LOOKUP);</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      inode_t *inode, struct iatt *buf,</div><div class='del'>-                      struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, SYMLINK);</div><div class='del'>-        STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+io_stats_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                     struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, SYMLINK);</div><div class='add'>+    STACK_UNWIND_STRICT(symlink, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    inode_t *inode, struct iatt *buf,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, MKNOD);</div><div class='del'>-        STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+io_stats_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, MKNOD);</div><div class='add'>+    STACK_UNWIND_STRICT(mknod, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    inode_t *inode, struct iatt *buf,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+io_stats_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char   *path = frame-&gt;local;</div><div class='add'>+    char *path = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!path)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (!path)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        UPDATE_PROFILE_STATS (frame, MKDIR);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, MKDIR);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        /* allocate a struct ios_stat and set the inode ctx */</div><div class='del'>-        ios_init_iosstat (this, path, buf-&gt;ia_gfid, inode);</div><div class='add'>+    /* allocate a struct ios_stat and set the inode ctx */</div><div class='add'>+    ios_init_iosstat(this, path, buf-&gt;ia_gfid, inode);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        /* local is assigned with path */</div><div class='del'>-        GF_FREE (frame-&gt;local);</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    /* local is assigned with path */</div><div class='add'>+    GF_FREE(frame-&gt;local);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(mkdir, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   inode_t *inode, struct iatt *buf,</div><div class='del'>-                   struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, LINK);</div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+io_stats_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, LINK);</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FLUSH);</div><div class='del'>-        STACK_UNWIND_STRICT (flush, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FLUSH);</div><div class='add'>+    STACK_UNWIND_STRICT(flush, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+io_stats_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct ios_stat *iosstat = NULL;</div><div class='del'>-        int              ret     = -1;</div><div class='add'>+    struct ios_stat *iosstat = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        UPDATE_PROFILE_STATS (frame, OPENDIR);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, OPENDIR);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        ios_fd_ctx_set (fd, this, 0);</div><div class='add'>+    ios_fd_ctx_set(fd, this, 0);</div><div class='ctx'> </div><div class='del'>-        ret = ios_inode_ctx_get (fd-&gt;inode, this, &amp;iosstat);</div><div class='del'>-        if (!ret)</div><div class='del'>-                ios_bump_stats (this, iosstat, IOS_STATS_TYPE_OPENDIR);</div><div class='add'>+    ret = ios_inode_ctx_get(fd-&gt;inode, this, &amp;iosstat);</div><div class='add'>+    if (!ret)</div><div class='add'>+        ios_bump_stats(this, iosstat, IOS_STATS_TYPE_OPENDIR);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+io_stats_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, RMDIR);</div><div class='ctx'> </div><div class='del'>-        UPDATE_PROFILE_STATS (frame, RMDIR);</div><div class='del'>-</div><div class='del'>-        STACK_UNWIND_STRICT (rmdir, frame, op_ret, op_errno,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(rmdir, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+io_stats_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, TRUNCATE);</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno,</div><div class='del'>-                             prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, TRUNCATE);</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='add'>+io_stats_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, STATFS);</div><div class='del'>-        STACK_UNWIND_STRICT (statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, STATFS);</div><div class='add'>+    STACK_UNWIND_STRICT(statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, SETXATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, SETXATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+io_stats_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, GETXATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, GETXATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, REMOVEXATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, REMOVEXATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FSETXATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FSETXATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+io_stats_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FGETXATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FGETXATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FREMOVEXATTR);</div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FREMOVEXATTR);</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FSYNCDIR);</div><div class='del'>-        STACK_UNWIND_STRICT (fsyncdir, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FSYNCDIR);</div><div class='add'>+    STACK_UNWIND_STRICT(fsyncdir, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, ACCESS);</div><div class='del'>-        STACK_UNWIND_STRICT (access, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, ACCESS);</div><div class='add'>+    STACK_UNWIND_STRICT(access, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno,</div><div class='del'>-                        struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+io_stats_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FTRUNCATE);</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno,</div><div class='del'>-                             prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FTRUNCATE);</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+io_stats_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FSTAT);</div><div class='del'>-        STACK_UNWIND_STRICT (fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FSTAT);</div><div class='add'>+    STACK_UNWIND_STRICT(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> io_stats_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-		       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	UPDATE_PROFILE_STATS(frame, FALLOCATE);</div><div class='del'>-	STACK_UNWIND_STRICT(fallocate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-			    xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FALLOCATE);</div><div class='add'>+    STACK_UNWIND_STRICT(fallocate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> io_stats_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-		     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-		     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	UPDATE_PROFILE_STATS(frame, DISCARD);</div><div class='del'>-	STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-			    xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, DISCARD);</div><div class='add'>+    STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> io_stats_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS(frame, ZEROFILL);</div><div class='del'>-        STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                            xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, ZEROFILL);</div><div class='add'>+    STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-io_stats_ipc_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS(frame, IPC);</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, op_ret, op_errno,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, IPC);</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+io_stats_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, LK);</div><div class='del'>-        STACK_UNWIND_STRICT (lk, frame, op_ret, op_errno, lock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, LK);</div><div class='add'>+    STACK_UNWIND_STRICT(lk, frame, op_ret, op_errno, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, ENTRYLK);</div><div class='del'>-        STACK_UNWIND_STRICT (entrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, ENTRYLK);</div><div class='add'>+    STACK_UNWIND_STRICT(entrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FENTRYLK);</div><div class='del'>-        STACK_UNWIND_STRICT (fentrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FENTRYLK);</div><div class='add'>+    STACK_UNWIND_STRICT(fentrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_rchecksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+io_stats_rchecksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                        int32_t op_ret, int32_t op_errno, uint32_t weak_checksum,</div><div class='ctx'>                        uint8_t *strong_checksum, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, RCHECKSUM);</div><div class='del'>-        STACK_UNWIND_STRICT (rchecksum, frame, op_ret, op_errno, weak_checksum,</div><div class='del'>-                            strong_checksum, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, RCHECKSUM);</div><div class='add'>+    STACK_UNWIND_STRICT(rchecksum, frame, op_ret, op_errno, weak_checksum,</div><div class='add'>+                        strong_checksum, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_seek_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, off_t offset,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+io_stats_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, SEEK);</div><div class='del'>-        STACK_UNWIND_STRICT (seek, frame, op_ret, op_errno, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, SEEK);</div><div class='add'>+    STACK_UNWIND_STRICT(seek, frame, op_ret, op_errno, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_lease_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+io_stats_lease_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct gf_lease *lease,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, LEASE);</div><div class='del'>-        STACK_UNWIND_STRICT (lease, frame, op_ret, op_errno, lease, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, LEASE);</div><div class='add'>+    STACK_UNWIND_STRICT(lease, frame, op_ret, op_errno, lease, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_getactivelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          lock_migration_info_t *locklist,</div><div class='del'>-                          dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, GETACTIVELK);</div><div class='del'>-        STACK_UNWIND_STRICT (getactivelk, frame, op_ret, op_errno,</div><div class='del'>-                             locklist, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+io_stats_getactivelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno,</div><div class='add'>+                         lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, GETACTIVELK);</div><div class='add'>+    STACK_UNWIND_STRICT(getactivelk, frame, op_ret, op_errno, locklist, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_setactivelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_setactivelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, SETACTIVELK);</div><div class='del'>-        STACK_UNWIND_STRICT (setactivelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, SETACTIVELK);</div><div class='add'>+    STACK_UNWIND_STRICT(setactivelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_compound_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, void *data,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+io_stats_compound_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, void *data,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, COMPOUND);</div><div class='del'>-        STACK_UNWIND_STRICT (compound, frame, op_ret, op_errno, data, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, COMPOUND);</div><div class='add'>+    STACK_UNWIND_STRICT(compound, frame, op_ret, op_errno, data, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+io_stats_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, XATTROP);</div><div class='del'>-        STACK_UNWIND_STRICT (xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, XATTROP);</div><div class='add'>+    STACK_UNWIND_STRICT(xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+io_stats_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FXATTROP);</div><div class='del'>-        STACK_UNWIND_STRICT (fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FXATTROP);</div><div class='add'>+    STACK_UNWIND_STRICT(fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, INODELK);</div><div class='del'>-        STACK_UNWIND_STRICT (inodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, INODELK);</div><div class='add'>+    STACK_UNWIND_STRICT(inodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  const char *volume, loc_t *loc, const char *basename,</div><div class='del'>-                  entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+io_stats_entrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                 loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                 entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_entrylk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;entrylk,</div><div class='del'>-                    volume, loc, basename, cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_entrylk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;entrylk, volume, loc, basename, cmd,</div><div class='add'>+               type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_fentrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-		    const char *volume, fd_t *fd, const char *basename,</div><div class='del'>-		    entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+io_stats_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                  fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                  entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-       START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-       STACK_WIND (frame, io_stats_fentrylk_cbk,</div><div class='del'>-		    FIRST_CHILD(this),</div><div class='del'>-		    FIRST_CHILD(this)-&gt;fops-&gt;fentrylk,</div><div class='del'>-		    volume, fd, basename, cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fentrylk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fentrylk, volume, fd, basename, cmd,</div><div class='add'>+               type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+io_stats_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                 loc_t *loc, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, io_stats_inodelk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;inodelk,</div><div class='del'>-                    volume, loc, cmd, flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_inodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;inodelk, volume, loc, cmd, flock,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+io_stats_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        UPDATE_PROFILE_STATS (frame, FINODELK);</div><div class='del'>-        STACK_UNWIND_STRICT (finodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    UPDATE_PROFILE_STATS(frame, FINODELK);</div><div class='add'>+    STACK_UNWIND_STRICT(finodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-                   fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+io_stats_finodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                  fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_finodelk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;finodelk,</div><div class='del'>-                    volume, fd, cmd, flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, volume, fd, cmd, flock,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+io_stats_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                 gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_xattrop_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;xattrop,</div><div class='del'>-                    loc, flags, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_xattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+io_stats_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                  gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fxattrop_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fxattrop,</div><div class='del'>-                    fd, flags, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fxattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, dict_t *xdata)</div><div class='add'>+io_stats_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_lookup_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-                    loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+io_stats_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_stat_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;stat,</div><div class='del'>-                    loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   loc_t *loc, size_t size, dict_t *xdata)</div><div class='add'>+io_stats_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_readlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readlink,</div><div class='del'>-                    loc, size, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_readlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                mode_t mode, dev_t dev, mode_t umask, dict_t *xdata)</div><div class='add'>+io_stats_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+               dev_t dev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_mknod_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, dev, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, dev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_mkdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, mode_t mode, mode_t umask, dict_t *xdata)</div><div class='add'>+io_stats_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+               mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (loc-&gt;path)</div><div class='del'>-                frame-&gt;local = gf_strdup (loc-&gt;path);</div><div class='add'>+    if (loc-&gt;path)</div><div class='add'>+        frame-&gt;local = gf_strdup(loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_mkdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mkdir,</div><div class='del'>-                    loc, mode, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_unlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, int xflag, dict_t *xdata)</div><div class='add'>+io_stats_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_rmdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, int flags, dict_t *xdata)</div><div class='add'>+io_stats_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_rmdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-                  loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+io_stats_symlink(call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+                 loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_symlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='del'>-                    linkpath, loc, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkpath, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+io_stats_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+                loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_rename_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+io_stats_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_link_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_setattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+io_stats_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                 struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_setattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setattr,</div><div class='del'>-                    loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_truncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   loc_t *loc, off_t offset, dict_t *xdata)</div><div class='add'>+io_stats_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_truncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+io_stats_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+              fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (loc-&gt;path)</div><div class='del'>-                frame-&gt;local = gf_strdup (loc-&gt;path);</div><div class='add'>+    if (loc-&gt;path)</div><div class='add'>+        frame-&gt;local = gf_strdup(loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_open_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-                    loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-                 mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+io_stats_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+                mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (loc-&gt;path)</div><div class='del'>-                frame-&gt;local = gf_strdup (loc-&gt;path);</div><div class='add'>+    if (loc-&gt;path)</div><div class='add'>+        frame-&gt;local = gf_strdup(loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_create_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                fd_t *fd, size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+io_stats_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = fd;</div><div class='add'>+    frame-&gt;local = fd;</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_readv_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='del'>-                    fd, size, offset, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_writev (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 fd_t *fd, struct iovec *vector,</div><div class='del'>-                 int32_t count, off_t offset,</div><div class='del'>-                 uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+io_stats_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                struct iovec *vector, int32_t count, off_t offset,</div><div class='add'>+                uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int                 len = 0;</div><div class='del'>-</div><div class='del'>-        if (fd-&gt;inode)</div><div class='del'>-                frame-&gt;local = fd-&gt;inode;</div><div class='del'>-        len = iov_length (vector, count);</div><div class='add'>+    int len = 0;</div><div class='ctx'> </div><div class='del'>-        ios_bump_write (this, fd, len);</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    if (fd-&gt;inode)</div><div class='add'>+        frame-&gt;local = fd-&gt;inode;</div><div class='add'>+    len = iov_length(vector, count);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_writev_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, vector, count, offset, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    ios_bump_write(this, fd, len);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='add'>+    STACK_WIND(frame, io_stats_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_statfs (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, dict_t *xdata)</div><div class='add'>+io_stats_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_statfs_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;statfs,</div><div class='del'>-                    loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_statfs_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_flush (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                fd_t *fd, dict_t *xdata)</div><div class='add'>+io_stats_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_flush_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_flush_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fsync (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                fd_t *fd, int32_t flags, dict_t *xdata)</div><div class='add'>+io_stats_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fsync_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsync,</div><div class='del'>-                    fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-conditional_dump (dict_t *dict, char *key, data_t *value, void *data)</div><div class='del'>-{</div><div class='del'>-        struct {</div><div class='del'>-                xlator_t       *this;</div><div class='del'>-                inode_t        *inode;</div><div class='del'>-                const char     *path;</div><div class='del'>-        } *stub;</div><div class='del'>-        xlator_t             *this = NULL;</div><div class='del'>-        char                 *filename = NULL;</div><div class='del'>-        FILE                 *logfp = NULL;</div><div class='del'>-        struct ios_dump_args args = {0};</div><div class='del'>-        int                   pid, namelen, dirlen;</div><div class='del'>-        char                  dump_key[100];</div><div class='del'>-        char                 *slash_ptr = NULL;</div><div class='del'>-        char                 *path_in_value = NULL;</div><div class='del'>-</div><div class='del'>-        stub  = data;</div><div class='del'>-        this  = stub-&gt;this;</div><div class='del'>-</div><div class='del'>-        /* Create a file name that is appended with the io-stats instance</div><div class='del'>-        name as well. This helps when there is more than a single io-stats</div><div class='del'>-        instance in the graph, or the client and server processes are running</div><div class='del'>-        on the same node */</div><div class='del'>-        /* For the sanity of where the file should be located, we should make</div><div class='del'>-           sure file is written only inside RUNDIR (ie, /var/run/gluster) */</div><div class='del'>-        /* TODO: provide an option to dump it to different directory of</div><div class='del'>-           choice, based on options */</div><div class='del'>-        /* name format: /var/run/gluster/&lt;passed in path/filename&gt;.&lt;xlator name slashes to -&gt; */</div><div class='del'>-</div><div class='del'>-        path_in_value = data_to_str (value);</div><div class='del'>-</div><div class='del'>-        if (strstr (path_in_value, "../")) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "%s: no \"../\" allowed in path", path_in_value);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        dirlen = strlen (IOS_STATS_DUMP_DIR);</div><div class='del'>-        namelen = (dirlen + value-&gt;len + strlen (this-&gt;name) + 3);</div><div class='del'>-        /* +3 for '/', '.' and '\0' added in snprintf below*/</div><div class='del'>-</div><div class='del'>-        filename = alloca0 (namelen);</div><div class='del'>-</div><div class='del'>-        snprintf (filename, namelen, "%s/%s.%s", IOS_STATS_DUMP_DIR,</div><div class='del'>-                  path_in_value, this-&gt;name);</div><div class='del'>-</div><div class='del'>-        /* convert any slashes to '-' so that fopen works correctly */</div><div class='del'>-        slash_ptr = strchr (filename + dirlen + 1, '/');</div><div class='del'>-        while (slash_ptr) {</div><div class='del'>-                *slash_ptr = '-';</div><div class='del'>-                slash_ptr = strchr (slash_ptr, '/');</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pid = getpid ();</div><div class='del'>-</div><div class='del'>-        if (!strncmp (filename, "", 1)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "No filename given");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        logfp = fopen (filename, "w+");</div><div class='del'>-        if (!logfp) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to open %s "</div><div class='del'>-                                "for writing", filename);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        sprintf (dump_key, "*io*stat*%d_json_dump", pid);</div><div class='del'>-        if (fnmatch (dump_key, key, 0) == 0) {</div><div class='del'>-                (void) ios_dump_args_init (</div><div class='del'>-                                &amp;args, IOS_DUMP_TYPE_JSON_FILE,</div><div class='del'>-                                logfp);</div><div class='del'>-        } else {</div><div class='del'>-                (void) ios_dump_args_init (&amp;args, IOS_DUMP_TYPE_FILE,</div><div class='del'>-                                logfp);</div><div class='del'>-        }</div><div class='del'>-        io_stats_dump (this, &amp;args, GF_CLI_INFO_ALL, _gf_false);</div><div class='del'>-        fclose (logfp);</div><div class='del'>-        return 0;</div><div class='add'>+conditional_dump(dict_t *dict, char *key, data_t *value, void *data)</div><div class='add'>+{</div><div class='add'>+    struct {</div><div class='add'>+        xlator_t *this;</div><div class='add'>+        inode_t *inode;</div><div class='add'>+        const char *path;</div><div class='add'>+    } * stub;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char *filename = NULL;</div><div class='add'>+    FILE *logfp = NULL;</div><div class='add'>+    struct ios_dump_args args = {0};</div><div class='add'>+    int pid, namelen, dirlen;</div><div class='add'>+    char dump_key[100];</div><div class='add'>+    char *slash_ptr = NULL;</div><div class='add'>+    char *path_in_value = NULL;</div><div class='add'>+</div><div class='add'>+    stub = data;</div><div class='add'>+    this = stub-&gt;this;</div><div class='add'>+</div><div class='add'>+    /* Create a file name that is appended with the io-stats instance</div><div class='add'>+    name as well. This helps when there is more than a single io-stats</div><div class='add'>+    instance in the graph, or the client and server processes are running</div><div class='add'>+    on the same node */</div><div class='add'>+    /* For the sanity of where the file should be located, we should make</div><div class='add'>+       sure file is written only inside RUNDIR (ie, /var/run/gluster) */</div><div class='add'>+    /* TODO: provide an option to dump it to different directory of</div><div class='add'>+       choice, based on options */</div><div class='add'>+    /* name format: /var/run/gluster/&lt;passed in path/filename&gt;.&lt;xlator name</div><div class='add'>+     * slashes to -&gt; */</div><div class='add'>+</div><div class='add'>+    path_in_value = data_to_str(value);</div><div class='add'>+</div><div class='add'>+    if (strstr(path_in_value, "../")) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "%s: no \"../\" allowed in path",</div><div class='add'>+               path_in_value);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    dirlen = strlen(IOS_STATS_DUMP_DIR);</div><div class='add'>+    namelen = (dirlen + value-&gt;len + strlen(this-&gt;name) + 3);</div><div class='add'>+    /* +3 for '/', '.' and '\0' added in snprintf below*/</div><div class='add'>+</div><div class='add'>+    filename = alloca0(namelen);</div><div class='add'>+</div><div class='add'>+    snprintf(filename, namelen, "%s/%s.%s", IOS_STATS_DUMP_DIR, path_in_value,</div><div class='add'>+             this-&gt;name);</div><div class='add'>+</div><div class='add'>+    /* convert any slashes to '-' so that fopen works correctly */</div><div class='add'>+    slash_ptr = strchr(filename + dirlen + 1, '/');</div><div class='add'>+    while (slash_ptr) {</div><div class='add'>+        *slash_ptr = '-';</div><div class='add'>+        slash_ptr = strchr(slash_ptr, '/');</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pid = getpid();</div><div class='add'>+</div><div class='add'>+    if (!strncmp(filename, "", 1)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "No filename given");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    logfp = fopen(filename, "w+");</div><div class='add'>+    if (!logfp) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to open %s "</div><div class='add'>+               "for writing",</div><div class='add'>+               filename);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    sprintf(dump_key, "*io*stat*%d_json_dump", pid);</div><div class='add'>+    if (fnmatch(dump_key, key, 0) == 0) {</div><div class='add'>+        (void)ios_dump_args_init(&amp;args, IOS_DUMP_TYPE_JSON_FILE, logfp);</div><div class='add'>+    } else {</div><div class='add'>+        (void)ios_dump_args_init(&amp;args, IOS_DUMP_TYPE_FILE, logfp);</div><div class='add'>+    }</div><div class='add'>+    io_stats_dump(this, &amp;args, GF_CLI_INFO_ALL, _gf_false);</div><div class='add'>+    fclose(logfp);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_ios_destroy_dump_thread (struct ios_conf *conf) {</div><div class='del'>-        conf-&gt;dump_thread_should_die = _gf_true;</div><div class='del'>-        if (conf-&gt;dump_thread_running) {</div><div class='del'>-                (void) pthread_cancel (conf-&gt;dump_thread);</div><div class='del'>-                (void) pthread_join (conf-&gt;dump_thread, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+_ios_destroy_dump_thread(struct ios_conf *conf)</div><div class='add'>+{</div><div class='add'>+    conf-&gt;dump_thread_should_die = _gf_true;</div><div class='add'>+    if (conf-&gt;dump_thread_running) {</div><div class='add'>+        (void)pthread_cancel(conf-&gt;dump_thread);</div><div class='add'>+        (void)pthread_join(conf-&gt;dump_thread, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-_ios_dump_thread (xlator_t *this) {</div><div class='del'>-        struct ios_conf         *conf = NULL;</div><div class='del'>-        FILE                    *stats_logfp = NULL;</div><div class='del'>-        FILE                    *samples_logfp = NULL;</div><div class='del'>-        struct ios_dump_args args = {0};</div><div class='del'>-        int                     i;</div><div class='del'>-        int                     stats_bytes_written = 0;</div><div class='del'>-        int                     samples_bytes_written = 0;</div><div class='del'>-        char                    stats_filename[PATH_MAX];</div><div class='del'>-        char                    samples_filename[PATH_MAX];</div><div class='del'>-        char                    *xlator_name;</div><div class='del'>-        char                    *instance_name;</div><div class='del'>-        gf_boolean_t            log_stats_fopen_failure = _gf_true;</div><div class='del'>-        gf_boolean_t            log_samples_fopen_failure = _gf_true;</div><div class='del'>-        int                     old_cancel_type;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "IO stats dump thread started, "</div><div class='del'>-                "polling IO stats every %d seconds", conf-&gt;ios_dump_interval);</div><div class='del'>-        xlator_name = strdupa (conf-&gt;unique_id);</div><div class='del'>-        for (i = 0; i &lt; strlen (xlator_name); i++) {</div><div class='del'>-                if (xlator_name[i] == '/')</div><div class='del'>-                        xlator_name[i] = '_';</div><div class='add'>+_ios_dump_thread(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    FILE *stats_logfp = NULL;</div><div class='add'>+    FILE *samples_logfp = NULL;</div><div class='add'>+    struct ios_dump_args args = {0};</div><div class='add'>+    int i;</div><div class='add'>+    int stats_bytes_written = 0;</div><div class='add'>+    int samples_bytes_written = 0;</div><div class='add'>+    char stats_filename[PATH_MAX];</div><div class='add'>+    char samples_filename[PATH_MAX];</div><div class='add'>+    char *xlator_name;</div><div class='add'>+    char *instance_name;</div><div class='add'>+    gf_boolean_t log_stats_fopen_failure = _gf_true;</div><div class='add'>+    gf_boolean_t log_samples_fopen_failure = _gf_true;</div><div class='add'>+    int old_cancel_type;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "IO stats dump thread started, "</div><div class='add'>+           "polling IO stats every %d seconds",</div><div class='add'>+           conf-&gt;ios_dump_interval);</div><div class='add'>+    xlator_name = strdupa(conf-&gt;unique_id);</div><div class='add'>+    for (i = 0; i &lt; strlen(xlator_name); i++) {</div><div class='add'>+        if (xlator_name[i] == '/')</div><div class='add'>+            xlator_name[i] = '_';</div><div class='add'>+    }</div><div class='add'>+    instance_name = this-&gt;instance_name;</div><div class='add'>+    if (this-&gt;name &amp;&amp; strcmp(this-&gt;name, "glustershd") == 0) {</div><div class='add'>+        xlator_name = "shd";</div><div class='add'>+    } else if (this-&gt;prev &amp;&amp; strcmp(this-&gt;prev-&gt;name, "nfs-server") == 0) {</div><div class='add'>+        xlator_name = "nfsd";</div><div class='add'>+        instance_name = this-&gt;prev-&gt;instance_name;</div><div class='add'>+    }</div><div class='add'>+    if (sys_mkdir(_IOS_DUMP_DIR, S_IRWXU | S_IRWXO | S_IRWXG) == (-1)) {</div><div class='add'>+        if (errno != EEXIST) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "could not create stats-dump directory %s", _IOS_DUMP_DIR);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        instance_name = this-&gt;instance_name;</div><div class='del'>-        if (this-&gt;name &amp;&amp; strcmp (this-&gt;name, "glustershd") == 0) {</div><div class='del'>-                xlator_name = "shd";</div><div class='del'>-        } else if (this-&gt;prev &amp;&amp;</div><div class='del'>-                   strcmp (this-&gt;prev-&gt;name, "nfs-server") == 0) {</div><div class='del'>-                xlator_name = "nfsd";</div><div class='del'>-                instance_name = this-&gt;prev-&gt;instance_name;</div><div class='add'>+    }</div><div class='add'>+    if (sys_mkdir(_IOS_SAMP_DIR, S_IRWXU | S_IRWXO | S_IRWXG) == (-1)) {</div><div class='add'>+        if (errno != EEXIST) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "could not create stats-sample directory %s", _IOS_SAMP_DIR);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        if (sys_mkdir (_IOS_DUMP_DIR, S_IRWXU | S_IRWXO | S_IRWXG) == (-1)) {</div><div class='del'>-                if (errno != EEXIST) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "could not create stats-dump directory %s",</div><div class='del'>-                                _IOS_DUMP_DIR);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (sys_mkdir (_IOS_SAMP_DIR, S_IRWXU | S_IRWXO | S_IRWXG) == (-1)) {</div><div class='del'>-                if (errno != EEXIST) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "could not create stats-sample directory %s",</div><div class='del'>-                                _IOS_SAMP_DIR);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (instance_name) {</div><div class='del'>-                stats_bytes_written = snprintf (stats_filename, PATH_MAX,</div><div class='del'>-                        "%s/%s_%s_%s.dump", _IOS_DUMP_DIR,</div><div class='del'>-                        __progname, xlator_name, instance_name);</div><div class='del'>-                samples_bytes_written = snprintf (samples_filename, PATH_MAX,</div><div class='del'>-                        "%s/%s_%s_%s.samp", _IOS_SAMP_DIR,</div><div class='del'>-                        __progname, xlator_name, instance_name);</div><div class='del'>-        } else {</div><div class='del'>-                stats_bytes_written = snprintf (stats_filename, PATH_MAX,</div><div class='del'>-                        "%s/%s_%s.dump", _IOS_DUMP_DIR, __progname,</div><div class='del'>-                        xlator_name);</div><div class='del'>-                samples_bytes_written = snprintf (samples_filename, PATH_MAX,</div><div class='del'>-                        "%s/%s_%s.samp", _IOS_SAMP_DIR, __progname,</div><div class='del'>-                        xlator_name);</div><div class='add'>+    }</div><div class='add'>+    if (instance_name) {</div><div class='add'>+        stats_bytes_written = snprintf(stats_filename, PATH_MAX,</div><div class='add'>+                                       "%s/%s_%s_%s.dump", _IOS_DUMP_DIR,</div><div class='add'>+                                       __progname, xlator_name, instance_name);</div><div class='add'>+        samples_bytes_written = snprintf(</div><div class='add'>+            samples_filename, PATH_MAX, "%s/%s_%s_%s.samp", _IOS_SAMP_DIR,</div><div class='add'>+            __progname, xlator_name, instance_name);</div><div class='add'>+    } else {</div><div class='add'>+        stats_bytes_written = snprintf(stats_filename, PATH_MAX,</div><div class='add'>+                                       "%s/%s_%s.dump", _IOS_DUMP_DIR,</div><div class='add'>+                                       __progname, xlator_name);</div><div class='add'>+        samples_bytes_written = snprintf(samples_filename, PATH_MAX,</div><div class='add'>+                                         "%s/%s_%s.samp", _IOS_SAMP_DIR,</div><div class='add'>+                                         __progname, xlator_name);</div><div class='add'>+    }</div><div class='add'>+    if ((stats_bytes_written &gt;= PATH_MAX) ||</div><div class='add'>+        (samples_bytes_written &gt;= PATH_MAX)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Invalid path for stats dump (%s) and/or latency "</div><div class='add'>+               "samples (%s)",</div><div class='add'>+               stats_filename, samples_filename);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    while (1) {</div><div class='add'>+        if (conf-&gt;dump_thread_should_die)</div><div class='add'>+            break;</div><div class='add'>+        (void)pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,</div><div class='add'>+                                    &amp;old_cancel_type);</div><div class='add'>+        sleep(conf-&gt;ios_dump_interval);</div><div class='add'>+        (void)pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &amp;old_cancel_type);</div><div class='add'>+        /*</div><div class='add'>+         * It's not clear whether we should reopen this each time, or</div><div class='add'>+         * just hold it open and rewind/truncate on each iteration.</div><div class='add'>+         * Leaving it alone for now.</div><div class='add'>+         */</div><div class='add'>+        stats_logfp = fopen(stats_filename, "w+");</div><div class='add'>+        if (stats_logfp) {</div><div class='add'>+            (void)ios_dump_args_init(&amp;args, conf-&gt;dump_format, stats_logfp);</div><div class='add'>+            io_stats_dump(this, &amp;args, GF_CLI_INFO_ALL, _gf_false);</div><div class='add'>+            fclose(stats_logfp);</div><div class='add'>+            log_stats_fopen_failure = _gf_true;</div><div class='add'>+        } else if (log_stats_fopen_failure) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "could not open stats-dump file %s (%s)", stats_filename,</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            log_stats_fopen_failure = _gf_false;</div><div class='ctx'>         }</div><div class='del'>-        if ((stats_bytes_written &gt;= PATH_MAX) ||</div><div class='del'>-            (samples_bytes_written &gt;= PATH_MAX)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Invalid path for stats dump (%s) and/or latency "</div><div class='del'>-                        "samples (%s)", stats_filename, samples_filename);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        while (1) {</div><div class='del'>-                if (conf-&gt;dump_thread_should_die)</div><div class='del'>-                        break;</div><div class='del'>-                (void) pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS,</div><div class='del'>-                                              &amp;old_cancel_type);</div><div class='del'>-                sleep (conf-&gt;ios_dump_interval);</div><div class='del'>-                (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,</div><div class='del'>-                                              &amp;old_cancel_type);</div><div class='del'>-                /*</div><div class='del'>-                 * It's not clear whether we should reopen this each time, or</div><div class='del'>-                 * just hold it open and rewind/truncate on each iteration.</div><div class='del'>-                 * Leaving it alone for now.</div><div class='del'>-                 */</div><div class='del'>-                stats_logfp = fopen (stats_filename, "w+");</div><div class='del'>-                if (stats_logfp) {</div><div class='del'>-                        (void) ios_dump_args_init (&amp;args,</div><div class='del'>-                                                   conf-&gt;dump_format,</div><div class='del'>-                                                   stats_logfp);</div><div class='del'>-                        io_stats_dump (this, &amp;args, GF_CLI_INFO_ALL, _gf_false);</div><div class='del'>-                        fclose (stats_logfp);</div><div class='del'>-                        log_stats_fopen_failure = _gf_true;</div><div class='del'>-                } else if (log_stats_fopen_failure) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "could not open stats-dump file %s (%s)",</div><div class='del'>-                                stats_filename, strerror(errno));</div><div class='del'>-                        log_stats_fopen_failure = _gf_false;</div><div class='del'>-                }</div><div class='del'>-                samples_logfp = fopen (samples_filename, "w+");</div><div class='del'>-                if (samples_logfp) {</div><div class='del'>-                        io_stats_dump_latency_samples_logfp (this,</div><div class='del'>-                                                             samples_logfp);</div><div class='del'>-                        fclose (samples_logfp);</div><div class='del'>-                        log_samples_fopen_failure = _gf_true;</div><div class='del'>-                } else if (log_samples_fopen_failure) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "could not open samples-dump file %s (%s)",</div><div class='del'>-                                samples_filename, strerror(errno));</div><div class='del'>-                        log_samples_fopen_failure = _gf_false;</div><div class='del'>-                }</div><div class='add'>+        samples_logfp = fopen(samples_filename, "w+");</div><div class='add'>+        if (samples_logfp) {</div><div class='add'>+            io_stats_dump_latency_samples_logfp(this, samples_logfp);</div><div class='add'>+            fclose(samples_logfp);</div><div class='add'>+            log_samples_fopen_failure = _gf_true;</div><div class='add'>+        } else if (log_samples_fopen_failure) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "could not open samples-dump file %s (%s)", samples_filename,</div><div class='add'>+                   strerror(errno));</div><div class='add'>+            log_samples_fopen_failure = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        conf-&gt;dump_thread_running = _gf_false;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "IO stats dump thread terminated");</div><div class='del'>-        return NULL;</div><div class='add'>+    conf-&gt;dump_thread_running = _gf_false;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "IO stats dump thread terminated");</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-match_special_xattr (dict_t *d, char *k, data_t *val, void *mdata)</div><div class='add'>+match_special_xattr(dict_t *d, char *k, data_t *val, void *mdata)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t ret = _gf_false;</div><div class='del'>-        if (fnmatch ("*io*stat*dump", k, 0) == 0) {</div><div class='del'>-                ret = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    gf_boolean_t ret = _gf_false;</div><div class='add'>+    if (fnmatch("*io*stat*dump", k, 0) == 0) {</div><div class='add'>+        ret = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   loc_t *loc, dict_t *dict,</div><div class='del'>-                   int32_t flags, dict_t *xdata)</div><div class='add'>+io_stats_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+                  int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct {</div><div class='del'>-                xlator_t     *this;</div><div class='del'>-                inode_t      *inode;</div><div class='del'>-                const char   *path;</div><div class='del'>-        } stub;</div><div class='add'>+    struct {</div><div class='add'>+        xlator_t *this;</div><div class='add'>+        inode_t *inode;</div><div class='add'>+        const char *path;</div><div class='add'>+    } stub;</div><div class='ctx'> </div><div class='del'>-        stub.this  = this;</div><div class='del'>-        stub.inode = loc-&gt;inode;</div><div class='del'>-        stub.path  = loc-&gt;path;</div><div class='add'>+    stub.this = this;</div><div class='add'>+    stub.inode = loc-&gt;inode;</div><div class='add'>+    stub.path = loc-&gt;path;</div><div class='ctx'> </div><div class='del'>-        (void) dict_foreach_match (dict, match_special_xattr, NULL,</div><div class='del'>-                                   conditional_dump, &amp;stub);</div><div class='add'>+    (void)dict_foreach_match(dict, match_special_xattr, NULL, conditional_dump,</div><div class='add'>+                             &amp;stub);</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_setxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+io_stats_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_getxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+io_stats_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                     const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_removexattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fsetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    fd_t *fd, dict_t *dict,</div><div class='del'>-                    int32_t flags, dict_t *xdata)</div><div class='add'>+io_stats_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                   int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fgetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+io_stats_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                   const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fgetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fremovexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                       fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+io_stats_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                      const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fremovexattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_opendir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+io_stats_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, io_stats_opendir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;opendir,</div><div class='del'>-                    loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-                   off_t offset, dict_t *dict)</div><div class='add'>+io_stats_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                  off_t offset, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = fd-&gt;inode;</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    frame-&gt;local = fd-&gt;inode;</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_readdirp_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-                    fd, size, offset, dict);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, dict);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_readdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  fd_t *fd, size_t size, off_t offset, dict_t *xdata)</div><div class='add'>+io_stats_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                 off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_readdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdir,</div><div class='del'>-                    fd, size, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_readdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fsyncdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   fd_t *fd, int32_t datasync, dict_t *xdata)</div><div class='add'>+io_stats_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                  int32_t datasync, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fsyncdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir,</div><div class='del'>-                    fd, datasync, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fsyncdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_access (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, int32_t mask, dict_t *xdata)</div><div class='add'>+io_stats_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_access_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;access,</div><div class='del'>-                    loc, mask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_access_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_ftruncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    fd_t *fd, off_t offset, dict_t *xdata)</div><div class='add'>+io_stats_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_ftruncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                    fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fsetattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   fd_t *fd, struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+io_stats_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                  struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_setattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetattr,</div><div class='del'>-                    fd, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_fstat (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                fd_t *fd, dict_t *xdata)</div><div class='add'>+io_stats_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_fstat_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> io_stats_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='del'>-		   off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+                   off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	START_FOP_LATENCY(frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame, io_stats_fallocate_cbk, FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd, mode, offset, len,</div><div class='del'>-		   xdata);</div><div class='add'>+    STACK_WIND(frame, io_stats_fallocate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd, mode, offset, len,</div><div class='add'>+               xdata);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> io_stats_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-		 size_t len, dict_t *xdata)</div><div class='add'>+                 size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	START_FOP_LATENCY(frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame, io_stats_discard_cbk, FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='add'>+    STACK_WIND(frame, io_stats_discard_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='ctx'> </div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='ctx'> io_stats_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                 off_t len, dict_t *xdata)</div><div class='add'>+                  off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY(frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame, io_stats_zerofill_cbk, FIRST_CHILD(this),</div><div class='del'>-                   FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='add'>+    STACK_WIND(frame, io_stats_zerofill_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-io_stats_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+io_stats_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY(frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_ipc_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_ipc_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_lk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             fd_t *fd, int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+io_stats_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+            struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_lk_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lk,</div><div class='del'>-                    fd, cmd, lock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_lk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lk, fd, cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_rchecksum (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                    fd_t *fd, off_t offset, int32_t len, dict_t *xdata)</div><div class='add'>+io_stats_rchecksum(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                   int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_rchecksum_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rchecksum,</div><div class='del'>-                    fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_rchecksum_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rchecksum, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_seek (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                off_t offset, gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+io_stats_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+              gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_seek_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;seek,</div><div class='del'>-                    fd, offset, what, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_seek_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;seek, fd, offset, what, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_lease (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+io_stats_lease(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_lease_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lease,</div><div class='del'>-                    loc, lease, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_lease_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lease, loc, lease, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_getactivelk (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+io_stats_getactivelk(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_getactivelk_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getactivelk,</div><div class='del'>-                    loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_getactivelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getactivelk, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_setactivelk (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                      lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+io_stats_setactivelk(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                     lock_migration_info_t *locklist, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_setactivelk_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setactivelk,</div><div class='del'>-                    loc, locklist, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_setactivelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setactivelk, loc, locklist, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_compound (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   void *args, dict_t *xdata)</div><div class='add'>+io_stats_compound(call_frame_t *frame, xlator_t *this, void *args,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        START_FOP_LATENCY (frame);</div><div class='add'>+    START_FOP_LATENCY(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, io_stats_compound_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;compound,</div><div class='del'>-                    args, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, io_stats_compound_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;compound, args, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-io_stats_release (xlator_t *this, fd_t *fd)</div><div class='add'>+io_stats_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        struct ios_fd  *iosfd = NULL;</div><div class='del'>-        struct ios_conf *conf = NULL;</div><div class='add'>+    struct ios_fd *iosfd = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        BUMP_FOP (RELEASE);</div><div class='add'>+    BUMP_FOP(RELEASE);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                conf-&gt;cumulative.nr_opens--;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        conf-&gt;cumulative.nr_opens--;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ios_fd_ctx_get (fd, this, &amp;iosfd);</div><div class='del'>-        if (iosfd) {</div><div class='del'>-                io_stats_dump_fd (this, iosfd);</div><div class='add'>+    ios_fd_ctx_get(fd, this, &amp;iosfd);</div><div class='add'>+    if (iosfd) {</div><div class='add'>+        io_stats_dump_fd(this, iosfd);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (iosfd-&gt;filename);</div><div class='del'>-                GF_FREE (iosfd);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(iosfd-&gt;filename);</div><div class='add'>+        GF_FREE(iosfd);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+io_stats_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        BUMP_FOP (RELEASEDIR);</div><div class='add'>+    BUMP_FOP(RELEASEDIR);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-io_stats_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+io_stats_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        BUMP_FOP (FORGET);</div><div class='del'>-        ios_stats_cleanup (this, inode);</div><div class='del'>-        return 0;</div><div class='add'>+    BUMP_FOP(FORGET);</div><div class='add'>+    ios_stats_cleanup(this, inode);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ios_init_top_stats (struct ios_conf *conf)</div><div class='add'>+ios_init_top_stats(struct ios_conf *conf)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (conf);</div><div class='add'>+    GF_ASSERT(conf);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt;IOS_STATS_TYPE_MAX; i++) {</div><div class='del'>-                conf-&gt;list[i].iosstats = GF_CALLOC (1,</div><div class='del'>-                                         sizeof(*conf-&gt;list[i].iosstats),</div><div class='del'>-                                         gf_io_stats_mt_ios_stat);</div><div class='add'>+    for (i = 0; i &lt; IOS_STATS_TYPE_MAX; i++) {</div><div class='add'>+        conf-&gt;list[i].iosstats = GF_CALLOC(1, sizeof(*conf-&gt;list[i].iosstats),</div><div class='add'>+                                           gf_io_stats_mt_ios_stat);</div><div class='ctx'> </div><div class='del'>-                if (!conf-&gt;list[i].iosstats)</div><div class='del'>-                        return -1;</div><div class='add'>+        if (!conf-&gt;list[i].iosstats)</div><div class='add'>+            return -1;</div><div class='ctx'> </div><div class='del'>-                INIT_LIST_HEAD(&amp;conf-&gt;list[i].iosstats-&gt;list);</div><div class='del'>-                LOCK_INIT (&amp;conf-&gt;list[i].lock);</div><div class='del'>-        }</div><div class='add'>+        INIT_LIST_HEAD(&amp;conf-&gt;list[i].iosstats-&gt;list);</div><div class='add'>+        LOCK_INIT(&amp;conf-&gt;list[i].lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOS_STATS_THRU_MAX; i ++) {</div><div class='del'>-                conf-&gt;thru_list[i].iosstats = GF_CALLOC (1,</div><div class='del'>-                                 sizeof (*conf-&gt;thru_list[i].iosstats),</div><div class='del'>-                                 gf_io_stats_mt_ios_stat);</div><div class='add'>+    for (i = 0; i &lt; IOS_STATS_THRU_MAX; i++) {</div><div class='add'>+        conf-&gt;thru_list[i].iosstats = GF_CALLOC(</div><div class='add'>+            1, sizeof(*conf-&gt;thru_list[i].iosstats), gf_io_stats_mt_ios_stat);</div><div class='ctx'> </div><div class='del'>-                if (!conf-&gt;thru_list[i].iosstats)</div><div class='del'>-                        return -1;</div><div class='add'>+        if (!conf-&gt;thru_list[i].iosstats)</div><div class='add'>+            return -1;</div><div class='ctx'> </div><div class='del'>-                INIT_LIST_HEAD(&amp;conf-&gt;thru_list[i].iosstats-&gt;list);</div><div class='del'>-                LOCK_INIT (&amp;conf-&gt;thru_list[i].lock);</div><div class='del'>-        }</div><div class='add'>+        INIT_LIST_HEAD(&amp;conf-&gt;thru_list[i].iosstats-&gt;list);</div><div class='add'>+        LOCK_INIT(&amp;conf-&gt;thru_list[i].lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ios_destroy_top_stats (struct ios_conf *conf)</div><div class='del'>-{</div><div class='del'>-        int                     i = 0;</div><div class='del'>-        struct ios_stat_head    *list_head = NULL;</div><div class='del'>-        struct ios_stat_list    *entry     = NULL;</div><div class='del'>-        struct ios_stat_list    *tmp       = NULL;</div><div class='del'>-        struct ios_stat_list    *list      = NULL;</div><div class='del'>-        struct ios_stat         *stat      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (conf);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;conf-&gt;lock);</div><div class='del'>-</div><div class='del'>-        conf-&gt;cumulative.nr_opens = 0;</div><div class='del'>-        conf-&gt;cumulative.max_nr_opens = 0;</div><div class='del'>-        conf-&gt;cumulative.max_openfd_time.tv_sec = 0;</div><div class='del'>-        conf-&gt;cumulative.max_openfd_time.tv_usec = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; IOS_STATS_TYPE_MAX; i++) {</div><div class='del'>-                list_head = &amp;conf-&gt;list[i];</div><div class='del'>-                if (!list_head)</div><div class='del'>-                        continue;</div><div class='del'>-                list_for_each_entry_safe (entry, tmp,</div><div class='del'>-                                          &amp;list_head-&gt;iosstats-&gt;list, list) {</div><div class='del'>-                        list = entry;</div><div class='del'>-                        stat = list-&gt;iosstat;</div><div class='del'>-                        ios_stat_unref (stat);</div><div class='del'>-                        list_del (&amp;list-&gt;list);</div><div class='del'>-                        GF_FREE (list);</div><div class='del'>-                        list_head-&gt;members--;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (list_head-&gt;iosstats);</div><div class='del'>-        }</div><div class='add'>+ios_destroy_top_stats(struct ios_conf *conf)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct ios_stat_head *list_head = NULL;</div><div class='add'>+    struct ios_stat_list *entry = NULL;</div><div class='add'>+    struct ios_stat_list *tmp = NULL;</div><div class='add'>+    struct ios_stat_list *list = NULL;</div><div class='add'>+    struct ios_stat *stat = NULL;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOS_STATS_THRU_MAX; i++) {</div><div class='del'>-                list_head = &amp;conf-&gt;thru_list[i];</div><div class='del'>-                if (!list_head)</div><div class='del'>-                        continue;</div><div class='del'>-                list_for_each_entry_safe (entry, tmp,</div><div class='del'>-                                          &amp;list_head-&gt;iosstats-&gt;list, list) {</div><div class='del'>-                        list = entry;</div><div class='del'>-                        stat = list-&gt;iosstat;</div><div class='del'>-                        ios_stat_unref (stat);</div><div class='del'>-                        list_del (&amp;list-&gt;list);</div><div class='del'>-                        GF_FREE (list);</div><div class='del'>-                        list_head-&gt;members--;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE (list_head-&gt;iosstats);</div><div class='add'>+    GF_ASSERT(conf);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;conf-&gt;lock);</div><div class='add'>+</div><div class='add'>+    conf-&gt;cumulative.nr_opens = 0;</div><div class='add'>+    conf-&gt;cumulative.max_nr_opens = 0;</div><div class='add'>+    conf-&gt;cumulative.max_openfd_time.tv_sec = 0;</div><div class='add'>+    conf-&gt;cumulative.max_openfd_time.tv_usec = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; IOS_STATS_TYPE_MAX; i++) {</div><div class='add'>+        list_head = &amp;conf-&gt;list[i];</div><div class='add'>+        if (!list_head)</div><div class='add'>+            continue;</div><div class='add'>+        list_for_each_entry_safe(entry, tmp, &amp;list_head-&gt;iosstats-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            list = entry;</div><div class='add'>+            stat = list-&gt;iosstat;</div><div class='add'>+            ios_stat_unref(stat);</div><div class='add'>+            list_del(&amp;list-&gt;list);</div><div class='add'>+            GF_FREE(list);</div><div class='add'>+            list_head-&gt;members--;</div><div class='add'>+        }</div><div class='add'>+        GF_FREE(list_head-&gt;iosstats);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; IOS_STATS_THRU_MAX; i++) {</div><div class='add'>+        list_head = &amp;conf-&gt;thru_list[i];</div><div class='add'>+        if (!list_head)</div><div class='add'>+            continue;</div><div class='add'>+        list_for_each_entry_safe(entry, tmp, &amp;list_head-&gt;iosstats-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            list = entry;</div><div class='add'>+            stat = list-&gt;iosstat;</div><div class='add'>+            ios_stat_unref(stat);</div><div class='add'>+            list_del(&amp;list-&gt;list);</div><div class='add'>+            GF_FREE(list);</div><div class='add'>+            list_head-&gt;members--;</div><div class='ctx'>         }</div><div class='add'>+        GF_FREE(list_head-&gt;iosstats);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;conf-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;conf-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-io_stats_clear (struct ios_conf *conf)</div><div class='add'>+io_stats_clear(struct ios_conf *conf)</div><div class='ctx'> {</div><div class='del'>-        struct timeval      now;</div><div class='del'>-        int                 ret = -1;</div><div class='add'>+    struct timeval now;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (conf);</div><div class='add'>+    GF_ASSERT(conf);</div><div class='ctx'> </div><div class='del'>-        if (!gettimeofday (&amp;now, NULL))</div><div class='add'>+    if (!gettimeofday(&amp;now, NULL)) {</div><div class='add'>+        LOCK(&amp;conf-&gt;lock);</div><div class='ctx'>         {</div><div class='del'>-            LOCK (&amp;conf-&gt;lock);</div><div class='del'>-            {</div><div class='del'>-                    ios_global_stats_clear (&amp;conf-&gt;cumulative, &amp;now);</div><div class='del'>-                    ios_global_stats_clear (&amp;conf-&gt;incremental, &amp;now);</div><div class='del'>-                    conf-&gt;increment = 0;</div><div class='del'>-            }</div><div class='del'>-            UNLOCK (&amp;conf-&gt;lock);</div><div class='del'>-            ret = 0;</div><div class='add'>+            ios_global_stats_clear(&amp;conf-&gt;cumulative, &amp;now);</div><div class='add'>+            ios_global_stats_clear(&amp;conf-&gt;incremental, &amp;now);</div><div class='add'>+            conf-&gt;increment = 0;</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;conf-&gt;lock);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-io_priv (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int                 i;</div><div class='del'>-        char                key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        char                key_prefix_cumulative[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        char                key_prefix_incremental[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        double              min, max, avg;</div><div class='del'>-        uint64_t            count, total;</div><div class='del'>-        struct ios_conf    *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        if (!conf)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if(!conf-&gt;count_fop_hits || !conf-&gt;measure_latency)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write ("cumulative.data_read", "%"GF_PRI_ATOMIC,</div><div class='del'>-                            GF_ATOMIC_GET (conf-&gt;cumulative.data_read));</div><div class='del'>-        gf_proc_dump_write ("cumulative.data_written", "%"GF_PRI_ATOMIC,</div><div class='del'>-                            GF_ATOMIC_GET (conf-&gt;cumulative.data_written));</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_write ("incremental.data_read", "%"GF_PRI_ATOMIC,</div><div class='del'>-                            GF_ATOMIC_GET (conf-&gt;incremental.data_read));</div><div class='del'>-        gf_proc_dump_write ("incremental.data_written", "%"GF_PRI_ATOMIC,</div><div class='del'>-                            GF_ATOMIC_GET (conf-&gt;incremental.data_written));</div><div class='del'>-</div><div class='del'>-        snprintf (key_prefix_cumulative, GF_DUMP_MAX_BUF_LEN, "%s.cumulative",</div><div class='del'>-                  this-&gt;name);</div><div class='del'>-        snprintf (key_prefix_incremental, GF_DUMP_MAX_BUF_LEN, "%s.incremental",</div><div class='del'>-                  this-&gt;name);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                count = GF_ATOMIC_GET (conf-&gt;cumulative.fop_hits[i]);</div><div class='del'>-                total = conf-&gt;cumulative.latency[i].total;</div><div class='del'>-                min = conf-&gt;cumulative.latency[i].min;</div><div class='del'>-                max = conf-&gt;cumulative.latency[i].max;</div><div class='del'>-                avg = conf-&gt;cumulative.latency[i].avg;</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_build_key (key, key_prefix_cumulative, "%s",</div><div class='del'>-                                        (char *)gf_fop_list[i]);</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_write (key,"%"PRId64",%"PRId64",%.03f,%.03f,%.03f",</div><div class='del'>-                                    count, total, min, max, avg);</div><div class='del'>-</div><div class='del'>-                count = GF_ATOMIC_GET (conf-&gt;incremental.fop_hits[i]);</div><div class='del'>-                total = conf-&gt;incremental.latency[i].total;</div><div class='del'>-                min = conf-&gt;incremental.latency[i].min;</div><div class='del'>-                max = conf-&gt;incremental.latency[i].max;</div><div class='del'>-                avg = conf-&gt;incremental.latency[i].avg;</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_build_key (key, key_prefix_incremental, "%s",</div><div class='del'>-                                        (char *)gf_fop_list[i]);</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_write (key,"%"PRId64",%"PRId64",%.03f,%.03f,%.03f",</div><div class='del'>-                                    count, total, min, max, avg);</div><div class='add'>+io_priv(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int i;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char key_prefix_cumulative[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    char key_prefix_incremental[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    double min, max, avg;</div><div class='add'>+    uint64_t count, total;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        }</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    if (!conf-&gt;count_fop_hits || !conf-&gt;measure_latency)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-ios_set_log_format_code (struct ios_conf *conf)</div><div class='del'>-{</div><div class='del'>-        if (strcmp (conf-&gt;dump_format_str, "json") == 0)</div><div class='del'>-                conf-&gt;dump_format = IOS_DUMP_TYPE_JSON_FILE;</div><div class='del'>-        else if (strcmp (conf-&gt;dump_format_str, "text") == 0)</div><div class='del'>-                conf-&gt;dump_format = IOS_DUMP_TYPE_FILE;</div><div class='del'>-        else if (strcmp (conf-&gt;dump_format_str, "dict") == 0)</div><div class='del'>-                conf-&gt;dump_format = IOS_DUMP_TYPE_DICT;</div><div class='del'>-        else if (strcmp (conf-&gt;dump_format_str, "samples") == 0)</div><div class='del'>-                conf-&gt;dump_format = IOS_DUMP_TYPE_SAMPLES;</div><div class='del'>-}</div><div class='add'>+    gf_proc_dump_write("cumulative.data_read", "%" GF_PRI_ATOMIC,</div><div class='add'>+                       GF_ATOMIC_GET(conf-&gt;cumulative.data_read));</div><div class='add'>+    gf_proc_dump_write("cumulative.data_written", "%" GF_PRI_ATOMIC,</div><div class='add'>+                       GF_ATOMIC_GET(conf-&gt;cumulative.data_written));</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='del'>-{</div><div class='del'>-        struct ios_conf    *conf = NULL;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        char               *sys_log_str = NULL;</div><div class='del'>-        char               *log_format_str = NULL;</div><div class='del'>-        char               *logger_str    = NULL;</div><div class='del'>-        int                 sys_log_level = -1;</div><div class='del'>-        char               *log_str = NULL;</div><div class='del'>-        int                 log_level = -1;</div><div class='del'>-        int                 log_format = -1;</div><div class='del'>-        int                 logger = -1;</div><div class='del'>-        uint32_t            log_buf_size = 0;</div><div class='del'>-        uint32_t            log_flush_timeout = 0;</div><div class='del'>-        int32_t             old_dump_interval;</div><div class='del'>-</div><div class='del'>-        if (!this || !this-&gt;private)</div><div class='del'>-                goto out;</div><div class='add'>+    gf_proc_dump_write("incremental.data_read", "%" GF_PRI_ATOMIC,</div><div class='add'>+                       GF_ATOMIC_GET(conf-&gt;incremental.data_read));</div><div class='add'>+    gf_proc_dump_write("incremental.data_written", "%" GF_PRI_ATOMIC,</div><div class='add'>+                       GF_ATOMIC_GET(conf-&gt;incremental.data_written));</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    snprintf(key_prefix_cumulative, GF_DUMP_MAX_BUF_LEN, "%s.cumulative",</div><div class='add'>+             this-&gt;name);</div><div class='add'>+    snprintf(key_prefix_incremental, GF_DUMP_MAX_BUF_LEN, "%s.incremental",</div><div class='add'>+             this-&gt;name);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("dump-fd-stats", conf-&gt;dump_fd_stats, options, bool,</div><div class='del'>-                          out);</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+        count = GF_ATOMIC_GET(conf-&gt;cumulative.fop_hits[i]);</div><div class='add'>+        total = conf-&gt;cumulative.latency[i].total;</div><div class='add'>+        min = conf-&gt;cumulative.latency[i].min;</div><div class='add'>+        max = conf-&gt;cumulative.latency[i].max;</div><div class='add'>+        avg = conf-&gt;cumulative.latency[i].avg;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("count-fop-hits", conf-&gt;count_fop_hits, options, bool,</div><div class='del'>-                          out);</div><div class='add'>+        gf_proc_dump_build_key(key, key_prefix_cumulative, "%s",</div><div class='add'>+                               (char *)gf_fop_list[i]);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("latency-measurement", conf-&gt;measure_latency,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+        gf_proc_dump_write(key, "%" PRId64 ",%" PRId64 ",%.03f,%.03f,%.03f",</div><div class='add'>+                           count, total, min, max, avg);</div><div class='ctx'> </div><div class='del'>-        old_dump_interval = conf-&gt;ios_dump_interval;</div><div class='del'>-        GF_OPTION_RECONF ("ios-dump-interval", conf-&gt;ios_dump_interval, options,</div><div class='del'>-                         int32, out);</div><div class='del'>-        if ((old_dump_interval &lt;= 0) &amp;&amp; (conf-&gt;ios_dump_interval &gt; 0)) {</div><div class='del'>-                conf-&gt;dump_thread_running = _gf_true;</div><div class='del'>-                conf-&gt;dump_thread_should_die = _gf_false;</div><div class='del'>-                ret = gf_thread_create (&amp;conf-&gt;dump_thread, NULL,</div><div class='del'>-                                  (void *) &amp;_ios_dump_thread, this, "iosdump");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        conf-&gt;dump_thread_running = _gf_false;</div><div class='del'>-                        gf_log (this ? this-&gt;name : "io-stats",</div><div class='del'>-                                GF_LOG_ERROR, "Failed to start thread"</div><div class='del'>-                                "while reconfigure. Returning %d", ret);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if ((old_dump_interval &gt; 0) &amp;&amp; (conf-&gt;ios_dump_interval == 0)) {</div><div class='del'>-                _ios_destroy_dump_thread (conf);</div><div class='del'>-        }</div><div class='add'>+        count = GF_ATOMIC_GET(conf-&gt;incremental.fop_hits[i]);</div><div class='add'>+        total = conf-&gt;incremental.latency[i].total;</div><div class='add'>+        min = conf-&gt;incremental.latency[i].min;</div><div class='add'>+        max = conf-&gt;incremental.latency[i].max;</div><div class='add'>+        avg = conf-&gt;incremental.latency[i].avg;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("ios-sample-interval", conf-&gt;ios_sample_interval,</div><div class='del'>-                         options, int32, out);</div><div class='del'>-        GF_OPTION_RECONF ("ios-dump-format", conf-&gt;dump_format_str, options,</div><div class='del'>-                          str, out);</div><div class='del'>-        ios_set_log_format_code (conf);</div><div class='del'>-        GF_OPTION_RECONF ("ios-sample-buf-size", conf-&gt;ios_sample_buf_size,</div><div class='del'>-                         options, int32, out);</div><div class='del'>-        GF_OPTION_RECONF ("sys-log-level", sys_log_str, options, str, out);</div><div class='del'>-        if (sys_log_str) {</div><div class='del'>-                sys_log_level = glusterd_check_log_level (sys_log_str);</div><div class='del'>-                set_sys_log_level (sys_log_level);</div><div class='del'>-        }</div><div class='add'>+        gf_proc_dump_build_key(key, key_prefix_incremental, "%s",</div><div class='add'>+                               (char *)gf_fop_list[i]);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("log-level", log_str, options, str, out);</div><div class='del'>-        if (log_str) {</div><div class='del'>-                log_level = glusterd_check_log_level (log_str);</div><div class='del'>-                gf_log_set_loglevel (this-&gt;ctx, log_level);</div><div class='del'>-        }</div><div class='add'>+        gf_proc_dump_write(key, "%" PRId64 ",%" PRId64 ",%.03f,%.03f,%.03f",</div><div class='add'>+                           count, total, min, max, avg);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("logger", logger_str, options, str, out);</div><div class='del'>-        if (logger_str) {</div><div class='del'>-                logger = gf_check_logger (logger_str);</div><div class='del'>-                gf_log_set_logger (logger);</div><div class='del'>-        }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("log-format", log_format_str, options, str, out);</div><div class='del'>-        if (log_format_str) {</div><div class='del'>-                log_format = gf_check_log_format (log_format_str);</div><div class='del'>-                gf_log_set_logformat (log_format);</div><div class='del'>-        }</div><div class='add'>+static void</div><div class='add'>+ios_set_log_format_code(struct ios_conf *conf)</div><div class='add'>+{</div><div class='add'>+    if (strcmp(conf-&gt;dump_format_str, "json") == 0)</div><div class='add'>+        conf-&gt;dump_format = IOS_DUMP_TYPE_JSON_FILE;</div><div class='add'>+    else if (strcmp(conf-&gt;dump_format_str, "text") == 0)</div><div class='add'>+        conf-&gt;dump_format = IOS_DUMP_TYPE_FILE;</div><div class='add'>+    else if (strcmp(conf-&gt;dump_format_str, "dict") == 0)</div><div class='add'>+        conf-&gt;dump_format = IOS_DUMP_TYPE_DICT;</div><div class='add'>+    else if (strcmp(conf-&gt;dump_format_str, "samples") == 0)</div><div class='add'>+        conf-&gt;dump_format = IOS_DUMP_TYPE_SAMPLES;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *sys_log_str = NULL;</div><div class='add'>+    char *log_format_str = NULL;</div><div class='add'>+    char *logger_str = NULL;</div><div class='add'>+    int sys_log_level = -1;</div><div class='add'>+    char *log_str = NULL;</div><div class='add'>+    int log_level = -1;</div><div class='add'>+    int log_format = -1;</div><div class='add'>+    int logger = -1;</div><div class='add'>+    uint32_t log_buf_size = 0;</div><div class='add'>+    uint32_t log_flush_timeout = 0;</div><div class='add'>+    int32_t old_dump_interval;</div><div class='add'>+</div><div class='add'>+    if (!this || !this-&gt;private)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("log-buf-size", log_buf_size, options, uint32, out);</div><div class='del'>-        gf_log_set_log_buf_size (log_buf_size);</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("log-flush-timeout", log_flush_timeout, options,</div><div class='del'>-                          time, out);</div><div class='del'>-        gf_log_set_log_flush_timeout (log_flush_timeout);</div><div class='add'>+    GF_OPTION_RECONF("dump-fd-stats", conf-&gt;dump_fd_stats, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    GF_OPTION_RECONF("count-fop-hits", conf-&gt;count_fop_hits, options, bool,</div><div class='add'>+                     out);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("latency-measurement", conf-&gt;measure_latency, options,</div><div class='add'>+                     bool, out);</div><div class='add'>+</div><div class='add'>+    old_dump_interval = conf-&gt;ios_dump_interval;</div><div class='add'>+    GF_OPTION_RECONF("ios-dump-interval", conf-&gt;ios_dump_interval, options,</div><div class='add'>+                     int32, out);</div><div class='add'>+    if ((old_dump_interval &lt;= 0) &amp;&amp; (conf-&gt;ios_dump_interval &gt; 0)) {</div><div class='add'>+        conf-&gt;dump_thread_running = _gf_true;</div><div class='add'>+        conf-&gt;dump_thread_should_die = _gf_false;</div><div class='add'>+        ret = gf_thread_create(&amp;conf-&gt;dump_thread, NULL,</div><div class='add'>+                               (void *)&amp;_ios_dump_thread, this, "iosdump");</div><div class='add'>+        if (ret) {</div><div class='add'>+            conf-&gt;dump_thread_running = _gf_false;</div><div class='add'>+            gf_log(this ? this-&gt;name : "io-stats", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to start thread"</div><div class='add'>+                   "while reconfigure. Returning %d",</div><div class='add'>+                   ret);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if ((old_dump_interval &gt; 0) &amp;&amp; (conf-&gt;ios_dump_interval == 0)) {</div><div class='add'>+        _ios_destroy_dump_thread(conf);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("ios-sample-interval", conf-&gt;ios_sample_interval, options,</div><div class='add'>+                     int32, out);</div><div class='add'>+    GF_OPTION_RECONF("ios-dump-format", conf-&gt;dump_format_str, options, str,</div><div class='add'>+                     out);</div><div class='add'>+    ios_set_log_format_code(conf);</div><div class='add'>+    GF_OPTION_RECONF("ios-sample-buf-size", conf-&gt;ios_sample_buf_size, options,</div><div class='add'>+                     int32, out);</div><div class='add'>+    GF_OPTION_RECONF("sys-log-level", sys_log_str, options, str, out);</div><div class='add'>+    if (sys_log_str) {</div><div class='add'>+        sys_log_level = glusterd_check_log_level(sys_log_str);</div><div class='add'>+        set_sys_log_level(sys_log_level);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("log-level", log_str, options, str, out);</div><div class='add'>+    if (log_str) {</div><div class='add'>+        log_level = glusterd_check_log_level(log_str);</div><div class='add'>+        gf_log_set_loglevel(this-&gt;ctx, log_level);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("logger", logger_str, options, str, out);</div><div class='add'>+    if (logger_str) {</div><div class='add'>+        logger = gf_check_logger(logger_str);</div><div class='add'>+        gf_log_set_logger(logger);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("log-format", log_format_str, options, str, out);</div><div class='add'>+    if (log_format_str) {</div><div class='add'>+        log_format = gf_check_log_format(log_format_str);</div><div class='add'>+        gf_log_set_logformat(log_format);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("log-buf-size", log_buf_size, options, uint32, out);</div><div class='add'>+    gf_log_set_log_buf_size(log_buf_size);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("log-flush-timeout", log_flush_timeout, options, time,</div><div class='add'>+                     out);</div><div class='add'>+    gf_log_set_log_flush_timeout(log_flush_timeout);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        gf_log (this ? this-&gt;name : "io-stats",</div><div class='del'>-                        GF_LOG_DEBUG, "reconfigure returning %d", ret);</div><div class='del'>-        return ret;</div><div class='add'>+    gf_log(this ? this-&gt;name : "io-stats", GF_LOG_DEBUG,</div><div class='add'>+           "reconfigure returning %d", ret);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_io_stats_mt_end + 1);</div><div class='del'>-</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                        " failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_io_stats_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               " failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ios_conf_destroy (struct ios_conf *conf)</div><div class='add'>+ios_conf_destroy(struct ios_conf *conf)</div><div class='ctx'> {</div><div class='del'>-        if (!conf)</div><div class='del'>-                return;</div><div class='add'>+    if (!conf)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ios_destroy_top_stats (conf);</div><div class='del'>-        _ios_destroy_dump_thread (conf);</div><div class='del'>-        ios_destroy_sample_buf (conf-&gt;ios_sample_buf);</div><div class='del'>-        LOCK_DESTROY (&amp;conf-&gt;lock);</div><div class='del'>-        GF_FREE(conf-&gt;dnscache);</div><div class='del'>-        GF_FREE(conf);</div><div class='add'>+    ios_destroy_top_stats(conf);</div><div class='add'>+    _ios_destroy_dump_thread(conf);</div><div class='add'>+    ios_destroy_sample_buf(conf-&gt;ios_sample_buf);</div><div class='add'>+    LOCK_DESTROY(&amp;conf-&gt;lock);</div><div class='add'>+    GF_FREE(conf-&gt;dnscache);</div><div class='add'>+    GF_FREE(conf);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-ios_init_stats (struct ios_global_stats *stats)</div><div class='add'>+ios_init_stats(struct ios_global_stats *stats)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ATOMIC_INIT (stats-&gt;data_read, 0);</div><div class='del'>-        GF_ATOMIC_INIT (stats-&gt;data_written, 0);</div><div class='add'>+    GF_ATOMIC_INIT(stats-&gt;data_read, 0);</div><div class='add'>+    GF_ATOMIC_INIT(stats-&gt;data_written, 0);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='del'>-                GF_ATOMIC_INIT (stats-&gt;block_count_write[i], 0);</div><div class='del'>-                GF_ATOMIC_INIT (stats-&gt;block_count_read[i], 0);</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; i &lt; IOS_BLOCK_COUNT_SIZE; i++) {</div><div class='add'>+        GF_ATOMIC_INIT(stats-&gt;block_count_write[i], 0);</div><div class='add'>+        GF_ATOMIC_INIT(stats-&gt;block_count_read[i], 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='del'>-                GF_ATOMIC_INIT (stats-&gt;fop_hits[i], 0);</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='add'>+        GF_ATOMIC_INIT(stats-&gt;fop_hits[i], 0);</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++)</div><div class='del'>-                GF_ATOMIC_INIT (stats-&gt;upcall_hits[i], 0);</div><div class='add'>+    for (i = 0; i &lt; GF_UPCALL_FLAGS_MAXVALUE; i++)</div><div class='add'>+        GF_ATOMIC_INIT(stats-&gt;upcall_hits[i], 0);</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;stats-&gt;started_at, NULL);</div><div class='add'>+    gettimeofday(&amp;stats-&gt;started_at, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        struct ios_conf    *conf = NULL;</div><div class='del'>-        char               *sys_log_str = NULL;</div><div class='del'>-        char               *logger_str  = NULL;</div><div class='del'>-        char               *log_format_str  = NULL;</div><div class='del'>-        int                 logger = -1;</div><div class='del'>-        int                 log_format = -1;</div><div class='del'>-        int                 sys_log_level = -1;</div><div class='del'>-        char               *log_str = NULL;</div><div class='del'>-        int                 log_level = -1;</div><div class='del'>-        int                 ret = -1;</div><div class='del'>-        uint32_t            log_buf_size = 0;</div><div class='del'>-        uint32_t            log_flush_timeout = 0;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "io_stats translator requires at least one subvolume");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                /* This is very much valid as io-stats currently is loaded</div><div class='del'>-                 * on top of volumes on both client and server, hence this is</div><div class='del'>-                 * not an warning message */</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = GF_CALLOC (1, sizeof(*conf), gf_io_stats_mt_ios_conf);</div><div class='del'>-</div><div class='del'>-        if (!conf)</div><div class='del'>-                goto out;</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='add'>+    char *sys_log_str = NULL;</div><div class='add'>+    char *logger_str = NULL;</div><div class='add'>+    char *log_format_str = NULL;</div><div class='add'>+    int logger = -1;</div><div class='add'>+    int log_format = -1;</div><div class='add'>+    int sys_log_level = -1;</div><div class='add'>+    char *log_str = NULL;</div><div class='add'>+    int log_level = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t log_buf_size = 0;</div><div class='add'>+    uint32_t log_flush_timeout = 0;</div><div class='add'>+</div><div class='add'>+    if (!this)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "io_stats translator requires at least one subvolume");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        /* This is very much valid as io-stats currently is loaded</div><div class='add'>+         * on top of volumes on both client and server, hence this is</div><div class='add'>+         * not an warning message */</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conf = GF_CALLOC(1, sizeof(*conf), gf_io_stats_mt_ios_conf);</div><div class='add'>+</div><div class='add'>+    if (!conf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (this-&gt;options, "unique-id", &amp;conf-&gt;unique_id) != 0) {</div><div class='del'>-                /* This is always set on servers, so we must be a client. */</div><div class='del'>-                conf-&gt;unique_id = this-&gt;name;</div><div class='del'>-        }</div><div class='add'>+    if (dict_get_str(this-&gt;options, "unique-id", &amp;conf-&gt;unique_id) != 0) {</div><div class='add'>+        /* This is always set on servers, so we must be a client. */</div><div class='add'>+        conf-&gt;unique_id = this-&gt;name;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Init it just after calloc, so that we are sure the lock is inited</div><div class='del'>-         * in case of error paths.</div><div class='del'>-         */</div><div class='del'>-        LOCK_INIT (&amp;conf-&gt;lock);</div><div class='del'>-        LOCK_INIT (&amp;conf-&gt;ios_sampling_lock);</div><div class='add'>+    /*</div><div class='add'>+     * Init it just after calloc, so that we are sure the lock is inited</div><div class='add'>+     * in case of error paths.</div><div class='add'>+     */</div><div class='add'>+    LOCK_INIT(&amp;conf-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;conf-&gt;ios_sampling_lock);</div><div class='ctx'> </div><div class='del'>-        ios_init_stats (&amp;conf-&gt;cumulative);</div><div class='del'>-        ios_init_stats (&amp;conf-&gt;incremental);</div><div class='add'>+    ios_init_stats(&amp;conf-&gt;cumulative);</div><div class='add'>+    ios_init_stats(&amp;conf-&gt;incremental);</div><div class='ctx'> </div><div class='del'>-        ret = ios_init_top_stats (conf);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = ios_init_top_stats(conf);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("dump-fd-stats", conf-&gt;dump_fd_stats, bool, out);</div><div class='add'>+    GF_OPTION_INIT("dump-fd-stats", conf-&gt;dump_fd_stats, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("count-fop-hits", conf-&gt;count_fop_hits, bool, out);</div><div class='add'>+    GF_OPTION_INIT("count-fop-hits", conf-&gt;count_fop_hits, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("latency-measurement", conf-&gt;measure_latency,</div><div class='del'>-                        bool, out);</div><div class='add'>+    GF_OPTION_INIT("latency-measurement", conf-&gt;measure_latency, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("ios-dump-interval", conf-&gt;ios_dump_interval,</div><div class='del'>-                        int32, out);</div><div class='add'>+    GF_OPTION_INIT("ios-dump-interval", conf-&gt;ios_dump_interval, int32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("ios-sample-interval", conf-&gt;ios_sample_interval,</div><div class='del'>-                        int32, out);</div><div class='add'>+    GF_OPTION_INIT("ios-sample-interval", conf-&gt;ios_sample_interval, int32,</div><div class='add'>+                   out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("ios-dump-format", conf-&gt;dump_format_str, str, out);</div><div class='del'>-        ios_set_log_format_code (conf);</div><div class='add'>+    GF_OPTION_INIT("ios-dump-format", conf-&gt;dump_format_str, str, out);</div><div class='add'>+    ios_set_log_format_code(conf);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("ios-sample-buf-size", conf-&gt;ios_sample_buf_size,</div><div class='del'>-                        int32, out);</div><div class='add'>+    GF_OPTION_INIT("ios-sample-buf-size", conf-&gt;ios_sample_buf_size, int32,</div><div class='add'>+                   out);</div><div class='ctx'> </div><div class='del'>-        ret = ios_init_sample_buf (conf);</div><div class='add'>+    ret = ios_init_sample_buf(conf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Out of memory.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("ios-dnscache-ttl-sec", conf-&gt;ios_dnscache_ttl_sec, int32,</div><div class='add'>+                   out);</div><div class='add'>+    conf-&gt;dnscache = gf_dnscache_init(conf-&gt;ios_dnscache_ttl_sec);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("sys-log-level", sys_log_str, str, out);</div><div class='add'>+    if (sys_log_str) {</div><div class='add'>+        sys_log_level = glusterd_check_log_level(sys_log_str);</div><div class='add'>+        set_sys_log_level(sys_log_level);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-level", log_str, str, out);</div><div class='add'>+    if (log_str) {</div><div class='add'>+        log_level = glusterd_check_log_level(log_str);</div><div class='add'>+        if (DEFAULT_LOG_LEVEL != log_level)</div><div class='add'>+            gf_log_set_loglevel(this-&gt;ctx, log_level);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("logger", logger_str, str, out);</div><div class='add'>+    if (logger_str) {</div><div class='add'>+        logger = gf_check_logger(logger_str);</div><div class='add'>+        gf_log_set_logger(logger);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-format", log_format_str, str, out);</div><div class='add'>+    if (log_format_str) {</div><div class='add'>+        log_format = gf_check_log_format(log_format_str);</div><div class='add'>+        gf_log_set_logformat(log_format);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-buf-size", log_buf_size, uint32, out);</div><div class='add'>+    gf_log_set_log_buf_size(log_buf_size);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-flush-timeout", log_flush_timeout, time, out);</div><div class='add'>+    gf_log_set_log_flush_timeout(log_flush_timeout);</div><div class='add'>+</div><div class='add'>+    this-&gt;private = conf;</div><div class='add'>+    if (conf-&gt;ios_dump_interval &gt; 0) {</div><div class='add'>+        conf-&gt;dump_thread_running = _gf_true;</div><div class='add'>+        conf-&gt;dump_thread_should_die = _gf_false;</div><div class='add'>+        ret = gf_thread_create(&amp;conf-&gt;dump_thread, NULL,</div><div class='add'>+                               (void *)&amp;_ios_dump_thread, this, "iosdump");</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Out of memory.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("ios-dnscache-ttl-sec", conf-&gt;ios_dnscache_ttl_sec,</div><div class='del'>-                        int32, out);</div><div class='del'>-        conf-&gt;dnscache = gf_dnscache_init (conf-&gt;ios_dnscache_ttl_sec);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("sys-log-level", sys_log_str, str, out);</div><div class='del'>-        if (sys_log_str) {</div><div class='del'>-                sys_log_level = glusterd_check_log_level (sys_log_str);</div><div class='del'>-                set_sys_log_level (sys_log_level);</div><div class='add'>+            conf-&gt;dump_thread_running = _gf_false;</div><div class='add'>+            gf_log(this ? this-&gt;name : "io-stats", GF_LOG_ERROR,</div><div class='add'>+                   "Failed to start thread"</div><div class='add'>+                   "in init. Returning %d",</div><div class='add'>+                   ret);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-level", log_str, str, out);</div><div class='del'>-        if (log_str) {</div><div class='del'>-                log_level = glusterd_check_log_level (log_str);</div><div class='del'>-                if (DEFAULT_LOG_LEVEL != log_level)</div><div class='del'>-                        gf_log_set_loglevel (this-&gt;ctx, log_level);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("logger", logger_str, str, out);</div><div class='del'>-        if (logger_str) {</div><div class='del'>-                logger = gf_check_logger (logger_str);</div><div class='del'>-                gf_log_set_logger (logger);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-format", log_format_str, str, out);</div><div class='del'>-        if (log_format_str) {</div><div class='del'>-                log_format = gf_check_log_format (log_format_str);</div><div class='del'>-                gf_log_set_logformat (log_format);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-buf-size", log_buf_size, uint32, out);</div><div class='del'>-        gf_log_set_log_buf_size (log_buf_size);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-flush-timeout", log_flush_timeout, time, out);</div><div class='del'>-        gf_log_set_log_flush_timeout (log_flush_timeout);</div><div class='del'>-</div><div class='del'>-        this-&gt;private = conf;</div><div class='del'>-        if (conf-&gt;ios_dump_interval &gt; 0) {</div><div class='del'>-                conf-&gt;dump_thread_running = _gf_true;</div><div class='del'>-                conf-&gt;dump_thread_should_die = _gf_false;</div><div class='del'>-                ret = gf_thread_create (&amp;conf-&gt;dump_thread, NULL,</div><div class='del'>-                                        (void *) &amp;_ios_dump_thread,</div><div class='del'>-                                        this, "iosdump");</div><div class='del'>-                if (ret) {</div><div class='del'>-                        conf-&gt;dump_thread_running = _gf_false;</div><div class='del'>-                        gf_log (this ? this-&gt;name : "io-stats",</div><div class='del'>-                                GF_LOG_ERROR, "Failed to start thread"</div><div class='del'>-                                "in init. Returning %d", ret);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        ios_conf_destroy (conf);</div><div class='del'>-        return ret;</div><div class='add'>+    ios_conf_destroy(conf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        struct ios_conf *conf = NULL;</div><div class='add'>+    struct ios_conf *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return;</div><div class='add'>+    if (!this)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ios_conf_destroy (conf);</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "io-stats translator unloaded");</div><div class='del'>-        return;</div><div class='add'>+    ios_conf_destroy(conf);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "io-stats translator unloaded");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='del'>-{</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        struct ios_dump_args args = {0};</div><div class='del'>-        dict_t       *output = NULL;</div><div class='del'>-        dict_t       *dict = NULL;</div><div class='del'>-        int32_t       op = 0;</div><div class='del'>-        int32_t       list_cnt = 0;</div><div class='del'>-        double        throughput = 0;</div><div class='del'>-        double        time = 0;</div><div class='del'>-        gf_boolean_t  is_peek = _gf_false;</div><div class='del'>-        va_list ap;</div><div class='del'>-        struct gf_upcall *up_data = NULL;</div><div class='del'>-        struct gf_upcall_cache_invalidation *up_ci = NULL;</div><div class='del'>-</div><div class='del'>-        dict = data;</div><div class='del'>-        va_start (ap, data);</div><div class='del'>-        output = va_arg (ap, dict_t*);</div><div class='del'>-        va_end (ap);</div><div class='del'>-        switch (event) {</div><div class='add'>+notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct ios_dump_args args = {0};</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int32_t op = 0;</div><div class='add'>+    int32_t list_cnt = 0;</div><div class='add'>+    double throughput = 0;</div><div class='add'>+    double time = 0;</div><div class='add'>+    gf_boolean_t is_peek = _gf_false;</div><div class='add'>+    va_list ap;</div><div class='add'>+    struct gf_upcall *up_data = NULL;</div><div class='add'>+    struct gf_upcall_cache_invalidation *up_ci = NULL;</div><div class='add'>+</div><div class='add'>+    dict = data;</div><div class='add'>+    va_start(ap, data);</div><div class='add'>+    output = va_arg(ap, dict_t *);</div><div class='add'>+    va_end(ap);</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_TRANSLATOR_INFO:</div><div class='del'>-                ret = dict_get_str_boolean (dict, "clear-stats", _gf_false);</div><div class='add'>+            ret = dict_get_str_boolean(dict, "clear-stats", _gf_false);</div><div class='add'>+            if (ret) {</div><div class='add'>+                ret = dict_set_int32(output, "top-op", op);</div><div class='ctx'>                 if (ret) {</div><div class='del'>-                        ret = dict_set_int32 (output, "top-op", op);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to set top-op in dict");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        ios_destroy_top_stats (this-&gt;private);</div><div class='del'>-                        ret = ios_init_top_stats (this-&gt;private);</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "Failed to set top-op in dict");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+                ios_destroy_top_stats(this-&gt;private);</div><div class='add'>+                ret = ios_init_top_stats(this-&gt;private);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "Failed to reset top stats");</div><div class='add'>+                ret = dict_set_int32(output, "stats-cleared", ret ? 0 : 1);</div><div class='add'>+                if (ret)</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "Failed to set stats-cleared"</div><div class='add'>+                           " in dict");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = dict_get_int32(dict, "top-op", &amp;op);</div><div class='add'>+            if (!ret) {</div><div class='add'>+                ret = dict_get_int32(dict, "list-cnt", &amp;list_cnt);</div><div class='add'>+                if (op &gt; IOS_STATS_TYPE_NONE &amp;&amp; op &lt; IOS_STATS_TYPE_MAX)</div><div class='add'>+                    ret = io_stats_dump_stats_to_dict(this, output, op,</div><div class='add'>+                                                      list_cnt);</div><div class='add'>+                if (op == IOS_STATS_TYPE_READ_THROUGHPUT ||</div><div class='add'>+                    op == IOS_STATS_TYPE_WRITE_THROUGHPUT) {</div><div class='add'>+                    ret = dict_get_double(dict, "throughput", &amp;throughput);</div><div class='add'>+                    if (!ret) {</div><div class='add'>+                        ret = dict_get_double(dict, "time", &amp;time);</div><div class='ctx'>                         if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to reset top stats");</div><div class='del'>-                        ret = dict_set_int32 (output, "stats-cleared",</div><div class='del'>-                                              ret ? 0 : 1);</div><div class='add'>+                            goto out;</div><div class='add'>+                        ret = dict_set_double(output, "throughput", throughput);</div><div class='ctx'>                         if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to set stats-cleared"</div><div class='del'>-                                        " in dict");</div><div class='del'>-                        goto out;</div><div class='add'>+                            goto out;</div><div class='add'>+                        ret = dict_set_double(output, "time", time);</div><div class='add'>+                        if (ret)</div><div class='add'>+                            goto out;</div><div class='add'>+                    }</div><div class='add'>+                    ret = 0;</div><div class='ctx'>                 }</div><div class='add'>+            } else {</div><div class='add'>+                ret = dict_get_int32(dict, "info-op", &amp;op);</div><div class='add'>+                if (ret || op &lt; GF_CLI_INFO_ALL || GF_CLI_INFO_CLEAR &lt; op)</div><div class='add'>+                    op = GF_CLI_INFO_ALL;</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_int32 (dict, "top-op", &amp;op);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        ret = dict_get_int32 (dict, "list-cnt", &amp;list_cnt);</div><div class='del'>-                        if (op &gt; IOS_STATS_TYPE_NONE &amp;&amp;</div><div class='del'>-                            op &lt; IOS_STATS_TYPE_MAX)</div><div class='del'>-                                ret = io_stats_dump_stats_to_dict (this, output,</div><div class='del'>-                                                             op, list_cnt);</div><div class='del'>-                        if (op == IOS_STATS_TYPE_READ_THROUGHPUT ||</div><div class='del'>-                                op == IOS_STATS_TYPE_WRITE_THROUGHPUT) {</div><div class='del'>-                                ret = dict_get_double (dict, "throughput",</div><div class='del'>-                                                        &amp;throughput);</div><div class='del'>-                                if (!ret) {</div><div class='del'>-                                        ret = dict_get_double (dict, "time",</div><div class='del'>-                                                                &amp;time);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        ret = dict_set_double (output,</div><div class='del'>-                                                "throughput", throughput);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                        ret = dict_set_double (output, "time",</div><div class='del'>-                                                        time);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto out;</div><div class='del'>-                                }</div><div class='del'>-                                ret = 0;</div><div class='del'>-</div><div class='del'>-                        }</div><div class='add'>+                ret = dict_set_int32(output, "info-op", op);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                           "Failed to set info-op in dict");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                if (GF_CLI_INFO_CLEAR == op) {</div><div class='add'>+                    ret = io_stats_clear(this-&gt;private);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                               "Failed to clear info stats");</div><div class='add'>+</div><div class='add'>+                    ret = dict_set_int32(output, "stats-cleared", ret ? 0 : 1);</div><div class='add'>+                    if (ret)</div><div class='add'>+                        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                               "Failed to set stats-cleared"</div><div class='add'>+                               " in dict");</div><div class='ctx'>                 } else {</div><div class='del'>-                        ret = dict_get_int32 (dict, "info-op", &amp;op);</div><div class='del'>-                        if (ret || op &lt; GF_CLI_INFO_ALL ||</div><div class='del'>-                            GF_CLI_INFO_CLEAR &lt; op)</div><div class='del'>-                            op = GF_CLI_INFO_ALL;</div><div class='del'>-</div><div class='del'>-                        ret = dict_set_int32 (output, "info-op", op);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "Failed to set info-op in dict");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (GF_CLI_INFO_CLEAR == op) {</div><div class='del'>-                                ret = io_stats_clear (this-&gt;private);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                "Failed to clear info stats");</div><div class='del'>-</div><div class='del'>-                                ret = dict_set_int32 (output, "stats-cleared",</div><div class='del'>-                                              ret ? 0 : 1);</div><div class='del'>-                                if (ret)</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                "Failed to set stats-cleared"</div><div class='del'>-                                                " in dict");</div><div class='del'>-                        }</div><div class='del'>-                        else {</div><div class='del'>-                                ret = dict_get_str_boolean (dict, "peek",</div><div class='del'>-                                                            _gf_false);</div><div class='del'>-                                if (-1 != ret)</div><div class='del'>-                                        is_peek = ret;</div><div class='del'>-</div><div class='del'>-                                (void) ios_dump_args_init (&amp;args,</div><div class='del'>-                                                IOS_DUMP_TYPE_DICT, output);</div><div class='del'>-                                ret = io_stats_dump (this, &amp;args, op, is_peek);</div><div class='del'>-                        }</div><div class='add'>+                    ret = dict_get_str_boolean(dict, "peek", _gf_false);</div><div class='add'>+                    if (-1 != ret)</div><div class='add'>+                        is_peek = ret;</div><div class='add'>+</div><div class='add'>+                    (void)ios_dump_args_init(&amp;args, IOS_DUMP_TYPE_DICT, output);</div><div class='add'>+                    ret = io_stats_dump(this, &amp;args, op, is_peek);</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_EVENT_UPCALL:</div><div class='del'>-                up_data = (struct gf_upcall *)data;</div><div class='del'>-                ios_bump_upcall (this, GF_UPCALL);</div><div class='add'>+            up_data = (struct gf_upcall *)data;</div><div class='add'>+            ios_bump_upcall(this, GF_UPCALL);</div><div class='ctx'> </div><div class='del'>-                switch (up_data-&gt;event_type) {</div><div class='add'>+            switch (up_data-&gt;event_type) {</div><div class='ctx'>                 case GF_UPCALL_RECALL_LEASE:</div><div class='del'>-                        ios_bump_upcall (this, GF_UPCALL_LEASE_RECALL);</div><div class='del'>-                        break;</div><div class='add'>+                    ios_bump_upcall(this, GF_UPCALL_LEASE_RECALL);</div><div class='add'>+                    break;</div><div class='ctx'>                 case GF_UPCALL_CACHE_INVALIDATION:</div><div class='del'>-                        up_ci = (struct gf_upcall_cache_invalidation *)up_data-&gt;data;</div><div class='del'>-                        if (up_ci-&gt;flags &amp; (UP_XATTR | UP_XATTR_RM))</div><div class='del'>-                                ios_bump_upcall (this, GF_UPCALL_CI_XATTR);</div><div class='del'>-                        if (up_ci-&gt;flags &amp; IATT_UPDATE_FLAGS)</div><div class='del'>-                                ios_bump_upcall (this, GF_UPCALL_CI_STAT);</div><div class='del'>-                        if (up_ci-&gt;flags &amp; UP_RENAME_FLAGS)</div><div class='del'>-                                ios_bump_upcall (this, GF_UPCALL_CI_RENAME);</div><div class='del'>-                        if (up_ci-&gt;flags &amp; UP_FORGET)</div><div class='del'>-                                ios_bump_upcall (this, GF_UPCALL_CI_FORGET);</div><div class='del'>-                        if (up_ci-&gt;flags &amp; UP_NLINK)</div><div class='del'>-                                ios_bump_upcall (this, GF_UPCALL_CI_NLINK);</div><div class='del'>-                        break;</div><div class='add'>+                    up_ci = (struct gf_upcall_cache_invalidation *)</div><div class='add'>+                                up_data-&gt;data;</div><div class='add'>+                    if (up_ci-&gt;flags &amp; (UP_XATTR | UP_XATTR_RM))</div><div class='add'>+                        ios_bump_upcall(this, GF_UPCALL_CI_XATTR);</div><div class='add'>+                    if (up_ci-&gt;flags &amp; IATT_UPDATE_FLAGS)</div><div class='add'>+                        ios_bump_upcall(this, GF_UPCALL_CI_STAT);</div><div class='add'>+                    if (up_ci-&gt;flags &amp; UP_RENAME_FLAGS)</div><div class='add'>+                        ios_bump_upcall(this, GF_UPCALL_CI_RENAME);</div><div class='add'>+                    if (up_ci-&gt;flags &amp; UP_FORGET)</div><div class='add'>+                        ios_bump_upcall(this, GF_UPCALL_CI_FORGET);</div><div class='add'>+                    if (up_ci-&gt;flags &amp; UP_NLINK)</div><div class='add'>+                        ios_bump_upcall(this, GF_UPCALL_CI_NLINK);</div><div class='add'>+                    break;</div><div class='ctx'>                 default:</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Unknown upcall event "</div><div class='del'>-                                      "type :%d", up_data-&gt;event_type);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+                    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                                 "Unknown upcall event "</div><div class='add'>+                                 "type :%d",</div><div class='add'>+                                 up_data-&gt;event_type);</div><div class='add'>+                    break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                default_notify (this, event, data);</div><div class='del'>-                break;</div><div class='add'>+            default_notify(this, event, data);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                default_notify (this, event, data);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+            default_notify(this, event, data);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv    = io_priv</div><div class='del'>-};</div><div class='add'>+struct xlator_dumpops dumpops = {.priv = io_priv};</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .stat        = io_stats_stat,</div><div class='del'>-        .readlink    = io_stats_readlink,</div><div class='del'>-        .mknod       = io_stats_mknod,</div><div class='del'>-        .mkdir       = io_stats_mkdir,</div><div class='del'>-        .unlink      = io_stats_unlink,</div><div class='del'>-        .rmdir       = io_stats_rmdir,</div><div class='del'>-        .symlink     = io_stats_symlink,</div><div class='del'>-        .rename      = io_stats_rename,</div><div class='del'>-        .link        = io_stats_link,</div><div class='del'>-        .truncate    = io_stats_truncate,</div><div class='del'>-        .open        = io_stats_open,</div><div class='del'>-        .readv       = io_stats_readv,</div><div class='del'>-        .writev      = io_stats_writev,</div><div class='del'>-        .statfs      = io_stats_statfs,</div><div class='del'>-        .flush       = io_stats_flush,</div><div class='del'>-        .fsync       = io_stats_fsync,</div><div class='del'>-        .setxattr    = io_stats_setxattr,</div><div class='del'>-        .getxattr    = io_stats_getxattr,</div><div class='del'>-        .removexattr = io_stats_removexattr,</div><div class='del'>-        .fsetxattr    = io_stats_fsetxattr,</div><div class='del'>-        .fgetxattr    = io_stats_fgetxattr,</div><div class='del'>-        .fremovexattr = io_stats_fremovexattr,</div><div class='del'>-        .opendir     = io_stats_opendir,</div><div class='del'>-        .readdir     = io_stats_readdir,</div><div class='del'>-        .readdirp    = io_stats_readdirp,</div><div class='del'>-        .fsyncdir    = io_stats_fsyncdir,</div><div class='del'>-        .access      = io_stats_access,</div><div class='del'>-        .ftruncate   = io_stats_ftruncate,</div><div class='del'>-        .fstat       = io_stats_fstat,</div><div class='del'>-        .create      = io_stats_create,</div><div class='del'>-        .lk          = io_stats_lk,</div><div class='del'>-        .inodelk     = io_stats_inodelk,</div><div class='del'>-        .finodelk    = io_stats_finodelk,</div><div class='del'>-        .entrylk     = io_stats_entrylk,</div><div class='del'>-        .fentrylk    = io_stats_fentrylk,</div><div class='del'>-        .lookup      = io_stats_lookup,</div><div class='del'>-        .xattrop     = io_stats_xattrop,</div><div class='del'>-        .fxattrop    = io_stats_fxattrop,</div><div class='del'>-        .setattr     = io_stats_setattr,</div><div class='del'>-        .fsetattr    = io_stats_fsetattr,</div><div class='del'>-	.fallocate   = io_stats_fallocate,</div><div class='del'>-	.discard     = io_stats_discard,</div><div class='del'>-        .zerofill    = io_stats_zerofill,</div><div class='del'>-        .ipc         = io_stats_ipc,</div><div class='del'>-        .rchecksum   = io_stats_rchecksum,</div><div class='del'>-        .seek        = io_stats_seek,</div><div class='del'>-        .lease       = io_stats_lease,</div><div class='del'>-        .getactivelk = io_stats_getactivelk,</div><div class='del'>-        .setactivelk = io_stats_setactivelk,</div><div class='del'>-        .compound    = io_stats_compound,</div><div class='add'>+    .stat = io_stats_stat,</div><div class='add'>+    .readlink = io_stats_readlink,</div><div class='add'>+    .mknod = io_stats_mknod,</div><div class='add'>+    .mkdir = io_stats_mkdir,</div><div class='add'>+    .unlink = io_stats_unlink,</div><div class='add'>+    .rmdir = io_stats_rmdir,</div><div class='add'>+    .symlink = io_stats_symlink,</div><div class='add'>+    .rename = io_stats_rename,</div><div class='add'>+    .link = io_stats_link,</div><div class='add'>+    .truncate = io_stats_truncate,</div><div class='add'>+    .open = io_stats_open,</div><div class='add'>+    .readv = io_stats_readv,</div><div class='add'>+    .writev = io_stats_writev,</div><div class='add'>+    .statfs = io_stats_statfs,</div><div class='add'>+    .flush = io_stats_flush,</div><div class='add'>+    .fsync = io_stats_fsync,</div><div class='add'>+    .setxattr = io_stats_setxattr,</div><div class='add'>+    .getxattr = io_stats_getxattr,</div><div class='add'>+    .removexattr = io_stats_removexattr,</div><div class='add'>+    .fsetxattr = io_stats_fsetxattr,</div><div class='add'>+    .fgetxattr = io_stats_fgetxattr,</div><div class='add'>+    .fremovexattr = io_stats_fremovexattr,</div><div class='add'>+    .opendir = io_stats_opendir,</div><div class='add'>+    .readdir = io_stats_readdir,</div><div class='add'>+    .readdirp = io_stats_readdirp,</div><div class='add'>+    .fsyncdir = io_stats_fsyncdir,</div><div class='add'>+    .access = io_stats_access,</div><div class='add'>+    .ftruncate = io_stats_ftruncate,</div><div class='add'>+    .fstat = io_stats_fstat,</div><div class='add'>+    .create = io_stats_create,</div><div class='add'>+    .lk = io_stats_lk,</div><div class='add'>+    .inodelk = io_stats_inodelk,</div><div class='add'>+    .finodelk = io_stats_finodelk,</div><div class='add'>+    .entrylk = io_stats_entrylk,</div><div class='add'>+    .fentrylk = io_stats_fentrylk,</div><div class='add'>+    .lookup = io_stats_lookup,</div><div class='add'>+    .xattrop = io_stats_xattrop,</div><div class='add'>+    .fxattrop = io_stats_fxattrop,</div><div class='add'>+    .setattr = io_stats_setattr,</div><div class='add'>+    .fsetattr = io_stats_fsetattr,</div><div class='add'>+    .fallocate = io_stats_fallocate,</div><div class='add'>+    .discard = io_stats_discard,</div><div class='add'>+    .zerofill = io_stats_zerofill,</div><div class='add'>+    .ipc = io_stats_ipc,</div><div class='add'>+    .rchecksum = io_stats_rchecksum,</div><div class='add'>+    .seek = io_stats_seek,</div><div class='add'>+    .lease = io_stats_lease,</div><div class='add'>+    .getactivelk = io_stats_getactivelk,</div><div class='add'>+    .setactivelk = io_stats_setactivelk,</div><div class='add'>+    .compound = io_stats_compound,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .release     = io_stats_release,</div><div class='del'>-        .releasedir  = io_stats_releasedir,</div><div class='del'>-        .forget      = io_stats_forget,</div><div class='add'>+    .release = io_stats_release,</div><div class='add'>+    .releasedir = io_stats_releasedir,</div><div class='add'>+    .forget = io_stats_forget,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"dump-fd-stats"},</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "If on stats related to file-operations would be "</div><div class='del'>-                         "tracked inside GlusterFS data-structures."</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "ios-dump-interval" },</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min = 0,</div><div class='del'>-          .max = 3600,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-          .description = "Interval (in seconds) at which to auto-dump "</div><div class='del'>-                         "statistics. Zero disables automatic dumping."</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "ios-sample-interval" },</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min = 0,</div><div class='del'>-          .max = 65535,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-          .description = "Interval in which we want to collect FOP latency "</div><div class='del'>-                         "samples.  2 means collect a sample every 2nd FOP."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"ios-dump-format"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_12_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = "json",</div><div class='del'>-          .description = " The dump-format option specifies the format in which"</div><div class='del'>-                         " to dump the statistics. Select between \"text\", "</div><div class='del'>-                         "\"json\", \"dict\" and \"samples\". Default is "</div><div class='del'>-                         "\"json\".",</div><div class='del'>-          .value       = { "text", "json", "dict", "samples"}</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "ios-sample-buf-size" },</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min = 1024,</div><div class='del'>-          .max = 1024*1024,</div><div class='del'>-          .default_value = "65535",</div><div class='del'>-          .description = "The maximum size of our FOP sampling ring buffer."</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "ios-dnscache-ttl-sec" },</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min = 1,</div><div class='del'>-          .max = 3600 * 72,</div><div class='del'>-          .default_value = "86400",</div><div class='del'>-          .description = "The interval after wish a cached DNS entry will be "</div><div class='del'>-                         "re-validated.  Default: 24 hrs"</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "latency-measurement" },</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "If on stats related to the latency of each operation "</div><div class='del'>-                         "would be tracked inside GlusterFS data-structures. "</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"count-fop-hits"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-        },</div><div class='del'>-        { .key = {"log-level"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = { "DEBUG", "WARNING", "ERROR", "INFO",</div><div class='del'>-                     "CRITICAL", "NONE", "TRACE"}</div><div class='del'>-        },</div><div class='del'>-</div><div class='del'>-        /* These are synthetic entries to assist validation of CLI's  *</div><div class='del'>-         *  volume set  command                                       */</div><div class='del'>-        { .key = {"client-log-level"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = "INFO",</div><div class='del'>-          .description = "Changes the log-level of the clients",</div><div class='del'>-          .value = { "DEBUG", "WARNING", "ERROR", "INFO",</div><div class='del'>-                     "CRITICAL", "NONE", "TRACE"}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"sys-log-level"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "CRITICAL",</div><div class='del'>-          .description = "Gluster's syslog log-level",</div><div class='del'>-          .value = { "WARNING", "ERROR", "INFO", "CRITICAL"}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"brick-log-level"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {1},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = "INFO",</div><div class='del'>-          .description = "Changes the log-level of the bricks",</div><div class='del'>-          .value = { "DEBUG", "WARNING", "ERROR", "INFO",</div><div class='del'>-                     "CRITICAL", "NONE", "TRACE"}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"logger"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = { GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"client-logger"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = GF_LOGGER_GLUSTER_LOG,</div><div class='del'>-          .description = "Changes the logging sub-system to log to, for the "</div><div class='del'>-                         "clients",</div><div class='del'>-          .value = { GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"brick-logger"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = GF_LOGGER_GLUSTER_LOG,</div><div class='del'>-          .description = "Changes the logging sub-system to log to, for the "</div><div class='del'>-                         "bricks",</div><div class='del'>-          .value = { GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"log-format"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = { GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"client-log-format"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = GF_LOG_FORMAT_WITH_MSG_ID,</div><div class='del'>-          .description = "Changes log format for the clients",</div><div class='del'>-          .value = { GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"brick-log-format"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .default_value = GF_LOG_FORMAT_WITH_MSG_ID,</div><div class='del'>-          .description = "Changes the log format for the bricks",</div><div class='del'>-          .value = { GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"log-buf-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min  = GF_LOG_LRU_BUFSIZE_MIN,</div><div class='del'>-          .max  = GF_LOG_LRU_BUFSIZE_MAX,</div><div class='del'>-          .default_value = "5",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"client-log-buf-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min  = GF_LOG_LRU_BUFSIZE_MIN,</div><div class='del'>-          .max  = GF_LOG_LRU_BUFSIZE_MAX,</div><div class='del'>-          .default_value = "5",</div><div class='del'>-          .description = "This option determines the maximum number of unique "</div><div class='del'>-                         "log messages that can be buffered for a time equal to"</div><div class='del'>-                         " the value of the option client-log-flush-timeout."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"brick-log-buf-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min  = GF_LOG_LRU_BUFSIZE_MIN,</div><div class='del'>-          .max  = GF_LOG_LRU_BUFSIZE_MAX,</div><div class='del'>-          .default_value = "5",</div><div class='del'>-          .description = "This option determines the maximum number of unique "</div><div class='del'>-                         "log messages that can be buffered for a time equal to"</div><div class='del'>-                         " the value of the option brick-log-flush-timeout."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"log-flush-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-          .min  = GF_LOG_FLUSH_TIMEOUT_MIN,</div><div class='del'>-          .max  = GF_LOG_FLUSH_TIMEOUT_MAX,</div><div class='del'>-          .default_value = "120",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"client-log-flush-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min  = GF_LOG_FLUSH_TIMEOUT_MIN,</div><div class='del'>-          .max  = GF_LOG_FLUSH_TIMEOUT_MAX,</div><div class='del'>-          .default_value = "120",</div><div class='del'>-          .description = "This option determines the maximum number of unique "</div><div class='del'>-                         "log messages that can be buffered for a time equal to"</div><div class='del'>-                         " the value of the option client-log-flush-timeout."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"brick-log-flush-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags = {"io-stats"},</div><div class='del'>-          .min  = GF_LOG_FLUSH_TIMEOUT_MIN,</div><div class='del'>-          .max  = GF_LOG_FLUSH_TIMEOUT_MAX,</div><div class='del'>-          .default_value = "120",</div><div class='del'>-          .description = "This option determines the maximum number of unique "</div><div class='del'>-                         "log messages that can be buffered for a time equal to"</div><div class='del'>-                         " the value of the option brick-log-flush-timeout."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"unique-id"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "/no/such/path",</div><div class='del'>-          .description = "Unique ID for our files."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {"dump-fd-stats"},</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "If on stats related to file-operations would be "</div><div class='add'>+                    "tracked inside GlusterFS data-structures."},</div><div class='add'>+    {.key = {"ios-dump-interval"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = 0,</div><div class='add'>+     .max = 3600,</div><div class='add'>+     .default_value = "0",</div><div class='add'>+     .description = "Interval (in seconds) at which to auto-dump "</div><div class='add'>+                    "statistics. Zero disables automatic dumping."},</div><div class='add'>+    {.key = {"ios-sample-interval"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = 0,</div><div class='add'>+     .max = 65535,</div><div class='add'>+     .default_value = "0",</div><div class='add'>+     .description = "Interval in which we want to collect FOP latency "</div><div class='add'>+                    "samples.  2 means collect a sample every 2nd FOP."},</div><div class='add'>+    {.key = {"ios-dump-format"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_12_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = "json",</div><div class='add'>+     .description = " The dump-format option specifies the format in which"</div><div class='add'>+                    " to dump the statistics. Select between \"text\", "</div><div class='add'>+                    "\"json\", \"dict\" and \"samples\". Default is "</div><div class='add'>+                    "\"json\".",</div><div class='add'>+     .value = {"text", "json", "dict", "samples"}},</div><div class='add'>+    {.key = {"ios-sample-buf-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = 1024,</div><div class='add'>+     .max = 1024 * 1024,</div><div class='add'>+     .default_value = "65535",</div><div class='add'>+     .description = "The maximum size of our FOP sampling ring buffer."},</div><div class='add'>+    {.key = {"ios-dnscache-ttl-sec"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = 1,</div><div class='add'>+     .max = 3600 * 72,</div><div class='add'>+     .default_value = "86400",</div><div class='add'>+     .description = "The interval after wish a cached DNS entry will be "</div><div class='add'>+                    "re-validated.  Default: 24 hrs"},</div><div class='add'>+    {.key = {"latency-measurement"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "If on stats related to the latency of each operation "</div><div class='add'>+                    "would be tracked inside GlusterFS data-structures. "},</div><div class='add'>+    {</div><div class='add'>+        .key = {"count-fop-hits"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .tags = {"io-stats"},</div><div class='add'>+    },</div><div class='add'>+    {.key = {"log-level"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"DEBUG", "WARNING", "ERROR", "INFO", "CRITICAL", "NONE",</div><div class='add'>+               "TRACE"}},</div><div class='add'>+</div><div class='add'>+    /* These are synthetic entries to assist validation of CLI's  *</div><div class='add'>+     *  volume set  command                                       */</div><div class='add'>+    {.key = {"client-log-level"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = "INFO",</div><div class='add'>+     .description = "Changes the log-level of the clients",</div><div class='add'>+     .value = {"DEBUG", "WARNING", "ERROR", "INFO", "CRITICAL", "NONE",</div><div class='add'>+               "TRACE"}},</div><div class='add'>+    {.key = {"sys-log-level"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "CRITICAL",</div><div class='add'>+     .description = "Gluster's syslog log-level",</div><div class='add'>+     .value = {"WARNING", "ERROR", "INFO", "CRITICAL"}},</div><div class='add'>+    {.key = {"brick-log-level"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {1},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = "INFO",</div><div class='add'>+     .description = "Changes the log-level of the bricks",</div><div class='add'>+     .value = {"DEBUG", "WARNING", "ERROR", "INFO", "CRITICAL", "NONE",</div><div class='add'>+               "TRACE"}},</div><div class='add'>+    {.key = {"logger"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}},</div><div class='add'>+    {.key = {"client-logger"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = GF_LOGGER_GLUSTER_LOG,</div><div class='add'>+     .description = "Changes the logging sub-system to log to, for the "</div><div class='add'>+                    "clients",</div><div class='add'>+     .value = {GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}},</div><div class='add'>+    {.key = {"brick-logger"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = GF_LOGGER_GLUSTER_LOG,</div><div class='add'>+     .description = "Changes the logging sub-system to log to, for the "</div><div class='add'>+                    "bricks",</div><div class='add'>+     .value = {GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}},</div><div class='add'>+    {.key = {"log-format"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}},</div><div class='add'>+    {.key = {"client-log-format"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = GF_LOG_FORMAT_WITH_MSG_ID,</div><div class='add'>+     .description = "Changes log format for the clients",</div><div class='add'>+     .value = {GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}},</div><div class='add'>+    {.key = {"brick-log-format"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .default_value = GF_LOG_FORMAT_WITH_MSG_ID,</div><div class='add'>+     .description = "Changes the log format for the bricks",</div><div class='add'>+     .value = {GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}},</div><div class='add'>+    {</div><div class='add'>+        .key = {"log-buf-size"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = GF_LOG_LRU_BUFSIZE_MIN,</div><div class='add'>+        .max = GF_LOG_LRU_BUFSIZE_MAX,</div><div class='add'>+        .default_value = "5",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"client-log-buf-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = GF_LOG_LRU_BUFSIZE_MIN,</div><div class='add'>+     .max = GF_LOG_LRU_BUFSIZE_MAX,</div><div class='add'>+     .default_value = "5",</div><div class='add'>+     .description = "This option determines the maximum number of unique "</div><div class='add'>+                    "log messages that can be buffered for a time equal to"</div><div class='add'>+                    " the value of the option client-log-flush-timeout."},</div><div class='add'>+    {.key = {"brick-log-buf-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = GF_LOG_LRU_BUFSIZE_MIN,</div><div class='add'>+     .max = GF_LOG_LRU_BUFSIZE_MAX,</div><div class='add'>+     .default_value = "5",</div><div class='add'>+     .description = "This option determines the maximum number of unique "</div><div class='add'>+                    "log messages that can be buffered for a time equal to"</div><div class='add'>+                    " the value of the option brick-log-flush-timeout."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"log-flush-timeout"},</div><div class='add'>+        .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+        .min = GF_LOG_FLUSH_TIMEOUT_MIN,</div><div class='add'>+        .max = GF_LOG_FLUSH_TIMEOUT_MAX,</div><div class='add'>+        .default_value = "120",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"client-log-flush-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = GF_LOG_FLUSH_TIMEOUT_MIN,</div><div class='add'>+     .max = GF_LOG_FLUSH_TIMEOUT_MAX,</div><div class='add'>+     .default_value = "120",</div><div class='add'>+     .description = "This option determines the maximum number of unique "</div><div class='add'>+                    "log messages that can be buffered for a time equal to"</div><div class='add'>+                    " the value of the option client-log-flush-timeout."},</div><div class='add'>+    {.key = {"brick-log-flush-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"io-stats"},</div><div class='add'>+     .min = GF_LOG_FLUSH_TIMEOUT_MIN,</div><div class='add'>+     .max = GF_LOG_FLUSH_TIMEOUT_MAX,</div><div class='add'>+     .default_value = "120",</div><div class='add'>+     .description = "This option determines the maximum number of unique "</div><div class='add'>+                    "log messages that can be buffered for a time equal to"</div><div class='add'>+                    " the value of the option brick-log-flush-timeout."},</div><div class='add'>+    {.key = {"unique-id"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "/no/such/path",</div><div class='add'>+     .description = "Unique ID for our files."},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> </div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/debug/sink/src/sink.c b/xlators/debug/sink/src/sink.c<br/>index dfd5685a969..fbbdd3a4847 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/debug/sink/src/sink.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/debug/sink/src/sink.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/debug/sink/src/sink.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/sink/src/sink.c</a></div><div class='hunk'>@@ -12,37 +12,37 @@</div><div class='ctx'> #include "defaults.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * notify - when parent sends PARENT_UP, send CHILD_UP event from here</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_PARENT_UP:</div><div class='del'>-                /* Tell the parent that this xlator is up */</div><div class='del'>-                default_notify (this, GF_EVENT_CHILD_UP, data);</div><div class='del'>-                break;</div><div class='add'>+            /* Tell the parent that this xlator is up */</div><div class='add'>+            default_notify(this, GF_EVENT_CHILD_UP, data);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_EVENT_PARENT_DOWN:</div><div class='del'>-                /* Tell the parent that this xlator is down */</div><div class='del'>-                default_notify (this, GF_EVENT_CHILD_DOWN, data);</div><div class='del'>-                break;</div><div class='add'>+            /* Tell the parent that this xlator is down */</div><div class='add'>+            default_notify(this, GF_EVENT_CHILD_DOWN, data);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -53,27 +53,30 @@ notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'>  * extended to support different LOOKUPs too.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-sink_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+sink_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        struct iatt stbuf = { 0, };</div><div class='del'>-        struct iatt postparent = { 0, };</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt postparent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        /* the root of the volume always need to be a directory */</div><div class='del'>-        stbuf.ia_type = IA_IFDIR;</div><div class='add'>+    /* the root of the volume always need to be a directory */</div><div class='add'>+    stbuf.ia_type = IA_IFDIR;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, 0, 0, loc ? loc-&gt;inode : NULL,</div><div class='del'>-                             &amp;stbuf, xdata, &amp;postparent);</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, 0, 0, loc ? loc-&gt;inode : NULL, &amp;stbuf,</div><div class='add'>+                        xdata, &amp;postparent);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup = sink_lookup,</div><div class='add'>+    .lookup = sink_lookup,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/debug/trace/src/trace.c b/xlators/debug/trace/src/trace.c<br/>index ec14a6dbb1b..86fa9d4611d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/debug/trace/src/trace.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/debug/trace/src/trace.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/debug/trace/src/trace.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/debug/trace/src/trace.c</a></div><div class='hunk'>@@ -17,3351 +17,3506 @@</div><div class='ctx'>  *    their _cbk functions, which later passes the call to next layer.</div><div class='ctx'>  *    Very helpful translator for debugging.</div><div class='ctx'>  */</div><div class='del'>-#define TRACE_STAT_TO_STR(buf, str) trace_stat_to_str (buf, str, sizeof (str))</div><div class='add'>+#define TRACE_STAT_TO_STR(buf, str) trace_stat_to_str(buf, str, sizeof(str))</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> trace_stat_to_str(struct iatt *buf, char *str, size_t len)</div><div class='ctx'> {</div><div class='del'>-        char     atime_buf[200]    = {0,};</div><div class='del'>-        char     mtime_buf[200]    = {0,};</div><div class='del'>-        char     ctime_buf[200]    = {0,};</div><div class='del'>-</div><div class='del'>-        if (!buf)</div><div class='del'>-                return;</div><div class='add'>+    char atime_buf[200] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char mtime_buf[200] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char ctime_buf[200] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (!buf)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (atime_buf, sizeof atime_buf, buf-&gt;ia_atime,</div><div class='del'>-                     gf_timefmt_dirent);</div><div class='add'>+    gf_time_fmt(atime_buf, sizeof atime_buf, buf-&gt;ia_atime, gf_timefmt_dirent);</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (mtime_buf, sizeof mtime_buf, buf-&gt;ia_mtime,</div><div class='del'>-                     gf_timefmt_dirent);</div><div class='add'>+    gf_time_fmt(mtime_buf, sizeof mtime_buf, buf-&gt;ia_mtime, gf_timefmt_dirent);</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (ctime_buf, sizeof ctime_buf, buf-&gt;ia_ctime,</div><div class='del'>-                     gf_timefmt_dirent);</div><div class='add'>+    gf_time_fmt(ctime_buf, sizeof ctime_buf, buf-&gt;ia_ctime, gf_timefmt_dirent);</div><div class='ctx'> </div><div class='del'>-        snprintf (str, len, "gfid=%s ino=%"PRIu64", mode=%o, "</div><div class='del'>-                  "nlink=%"GF_PRI_NLINK", uid=%u, gid=%u, size=%"PRIu64", "</div><div class='del'>-                  "blocks=%"PRIu64", atime=%s mtime=%s ctime=%s "</div><div class='del'>-                  "atime_sec=%"PRId64", atime_nsec=%"PRIu32","</div><div class='del'>-                  " mtime_sec=%"PRId64", mtime_nsec=%"PRIu32", "</div><div class='del'>-                  "ctime_sec=%"PRId64", ctime_nsec=%"PRIu32"",</div><div class='del'>-                  uuid_utoa (buf-&gt;ia_gfid), buf-&gt;ia_ino,</div><div class='del'>-                  st_mode_from_ia (buf-&gt;ia_prot, buf-&gt;ia_type), buf-&gt;ia_nlink,</div><div class='del'>-                  buf-&gt;ia_uid, buf-&gt;ia_gid, buf-&gt;ia_size, buf-&gt;ia_blocks,</div><div class='del'>-                  atime_buf, mtime_buf, ctime_buf,</div><div class='del'>-                  buf-&gt;ia_atime, buf-&gt;ia_atime_nsec,</div><div class='del'>-                  buf-&gt;ia_mtime, buf-&gt;ia_mtime_nsec,</div><div class='del'>-                  buf-&gt;ia_ctime, buf-&gt;ia_ctime_nsec);</div><div class='add'>+    snprintf(str, len,</div><div class='add'>+             "gfid=%s ino=%" PRIu64</div><div class='add'>+             ", mode=%o, "</div><div class='add'>+             "nlink=%" GF_PRI_NLINK ", uid=%u, gid=%u, size=%" PRIu64</div><div class='add'>+             ", "</div><div class='add'>+             "blocks=%" PRIu64</div><div class='add'>+             ", atime=%s mtime=%s ctime=%s "</div><div class='add'>+             "atime_sec=%" PRId64 ", atime_nsec=%" PRIu32</div><div class='add'>+             ","</div><div class='add'>+             " mtime_sec=%" PRId64 ", mtime_nsec=%" PRIu32</div><div class='add'>+             ", "</div><div class='add'>+             "ctime_sec=%" PRId64 ", ctime_nsec=%" PRIu32 "",</div><div class='add'>+             uuid_utoa(buf-&gt;ia_gfid), buf-&gt;ia_ino,</div><div class='add'>+             st_mode_from_ia(buf-&gt;ia_prot, buf-&gt;ia_type), buf-&gt;ia_nlink,</div><div class='add'>+             buf-&gt;ia_uid, buf-&gt;ia_gid, buf-&gt;ia_size, buf-&gt;ia_blocks, atime_buf,</div><div class='add'>+             mtime_buf, ctime_buf, buf-&gt;ia_atime, buf-&gt;ia_atime_nsec,</div><div class='add'>+             buf-&gt;ia_mtime, buf-&gt;ia_mtime_nsec, buf-&gt;ia_ctime,</div><div class='add'>+             buf-&gt;ia_ctime_nsec);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-dump_history_trace (circular_buffer_t *cb, void *data)</div><div class='add'>+int</div><div class='add'>+dump_history_trace(circular_buffer_t *cb, void *data)</div><div class='ctx'> {</div><div class='del'>-        char     timestr[256] = {0,};</div><div class='add'>+    char timestr[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        /* Since we are continuing with adding entries to the buffer even when</div><div class='del'>-           gettimeofday () fails, it's safe to check tm and then dump the time</div><div class='del'>-           at which the entry was added to the buffer */</div><div class='add'>+    /* Since we are continuing with adding entries to the buffer even when</div><div class='add'>+       gettimeofday () fails, it's safe to check tm and then dump the time</div><div class='add'>+       at which the entry was added to the buffer */</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (timestr, sizeof timestr, cb-&gt;tv.tv_sec, gf_timefmt_Ymd_T);</div><div class='del'>-        snprintf (timestr + strlen (timestr), 256 - strlen (timestr),</div><div class='del'>-                  ".%"GF_PRI_SUSECONDS, cb-&gt;tv.tv_usec);</div><div class='del'>-        gf_proc_dump_write ("TIME", "%s", timestr);</div><div class='add'>+    gf_time_fmt(timestr, sizeof timestr, cb-&gt;tv.tv_sec, gf_timefmt_Ymd_T);</div><div class='add'>+    snprintf(timestr + strlen(timestr), 256 - strlen(timestr),</div><div class='add'>+             ".%" GF_PRI_SUSECONDS, cb-&gt;tv.tv_usec);</div><div class='add'>+    gf_proc_dump_write("TIME", "%s", timestr);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write ("FOP", "%s\n", cb-&gt;data);</div><div class='add'>+    gf_proc_dump_write("FOP", "%s\n", cb-&gt;data);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                  inode_t *inode, struct iatt *buf,</div><div class='del'>-                  struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+trace_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char          statstr[1024]       = {0, };</div><div class='del'>-        char          preparentstr[1024]  = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_CREATE].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s (op_ret=%d, fd=%p"</div><div class='del'>-                                  "*stbuf {%s}, *preparent {%s}, "</div><div class='del'>-                                  "*postparent = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (inode-&gt;gfid), op_ret, fd,</div><div class='del'>-                                  statstr, preparentstr, postparentstr);</div><div class='del'>-</div><div class='del'>-                        /* for 'release' log */</div><div class='del'>-                        fd_ctx_set (fd, this, 0);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-trace_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t      *conf = NULL;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_CREATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_OPEN].enabled) {</div><div class='del'>-                char     string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d, "</div><div class='del'>-                          "*fd=%p", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno,</div><div class='del'>-                          fd);</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s (op_ret=%d, fd=%p"</div><div class='add'>+                     "*stbuf {%s}, *preparent {%s}, "</div><div class='add'>+                     "*postparent = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(inode-&gt;gfid), op_ret, fd,</div><div class='add'>+                     statstr, preparentstr, postparentstr);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='add'>+            /* for 'release' log */</div><div class='add'>+            fd_ctx_set(fd, this, 0);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64 ": (op_ret=%d, op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, op_errno);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        /* for 'release' log */</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-                fd_ctx_set (fd, this, 0);</div><div class='del'>-</div><div class='del'>-        TRACE_STACK_UNWIND (open, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                       preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+trace_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char          statstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf         = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_STAT].enabled) {</div><div class='del'>-                char string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        (void)snprintf (string, sizeof (string),</div><div class='del'>-                                        "%"PRId64": gfid=%s op_ret=%d buf=%s",</div><div class='del'>-                                        frame-&gt;root-&gt;unique,</div><div class='del'>-                                        uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                        statstr);</div><div class='del'>-                } else {</div><div class='del'>-                        (void)snprintf (string, sizeof (string),</div><div class='del'>-                                        "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                        "op_errno=%d)",</div><div class='del'>-                                        frame-&gt;root-&gt;unique,</div><div class='del'>-                                        uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                        op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (stat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-trace_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-                 int32_t count, struct iatt *buf, struct iobref *iobref,</div><div class='del'>-                 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf         = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READ].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d buf=%s",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  statstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (readv, frame, op_ret, op_errno, vector, count,</div><div class='del'>-                            buf, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char         preopstr[1024]  = {0, };</div><div class='del'>-        char         postopstr[1024] = {0, };</div><div class='del'>-        trace_conf_t *conf           = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_WRITE].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret &gt;= 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (prebuf, preopstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postbuf, postopstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*prebuf = {%s}, *postbuf = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  preopstr, postopstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                            xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, gf_dirent_t *buf,</div><div class='del'>-                   dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_OPEN].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s op_ret=%d, op_errno=%d, "</div><div class='add'>+                 "*fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, op_errno,</div><div class='add'>+                 fd);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READDIR].enabled) {</div><div class='del'>-                char    string[4096]  = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64" : gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique, uuid_utoa (frame-&gt;local),</div><div class='del'>-                          op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (readdir, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    /* for 'release' log */</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        fd_ctx_set(fd, this, 0);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, gf_dirent_t *buf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+trace_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             count         = 0;</div><div class='del'>-        char            statstr[1024] = {0,};</div><div class='del'>-        char            string[4096]  = {0,};</div><div class='del'>-        trace_conf_t   *conf          = NULL;</div><div class='del'>-        gf_dirent_t    *entry         = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READDIRP].enabled) {</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64" : gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique, uuid_utoa (frame-&gt;local),</div><div class='del'>-                          op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (entry, &amp;buf-&gt;list, list) {</div><div class='del'>-                count++;</div><div class='del'>-                TRACE_STAT_TO_STR (&amp;entry-&gt;d_stat, statstr);</div><div class='del'>-                snprintf (string, sizeof (string), "entry no. %d, pargfid=%s, "</div><div class='del'>-                          "bname=%s *buf {%s}", count, uuid_utoa (frame-&gt;local),</div><div class='del'>-                          entry-&gt;d_name, statstr);</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (readdirp, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_STAT].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            (void)snprintf(</div><div class='add'>+                string, sizeof(string), "%" PRId64 ": gfid=%s op_ret=%d buf=%s",</div><div class='add'>+                frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, statstr);</div><div class='add'>+        } else {</div><div class='add'>+            (void)snprintf(string, sizeof(string),</div><div class='add'>+                           "%" PRId64</div><div class='add'>+                           ": gfid=%s op_ret=%d, "</div><div class='add'>+                           "op_errno=%d)",</div><div class='add'>+                           frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                           op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(stat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                int32_t count, struct iatt *buf, struct iobref *iobref,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char          preopstr[1024]  = {0, };</div><div class='del'>-        char          postopstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf           = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSYNC].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (prebuf, preopstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postbuf, postopstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*prebuf = {%s}, *postbuf = {%s}",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  preopstr, postopstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (fsync, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                            xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   struct iatt *statpre, struct iatt *statpost, dict_t *xdata)</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READ].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            snprintf(</div><div class='add'>+                string, sizeof(string), "%" PRId64 ": gfid=%s op_ret=%d buf=%s",</div><div class='add'>+                frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, statstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(readv, frame, op_ret, op_errno, vector, count, buf,</div><div class='add'>+                       iobref, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_WRITE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret &gt;= 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(prebuf, preopstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postbuf, postopstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*prebuf = {%s}, *postbuf = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, preopstr, postopstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(writev, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, gf_dirent_t *buf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char          preopstr[1024]  = {0, };</div><div class='del'>-        char          postopstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf           = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SETATTR].enabled) {</div><div class='del'>-                char  string[4096]  = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (statpre, preopstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (statpost, postopstr);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 " : gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*prebuf = {%s}, *postbuf = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  preopstr, postopstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d)", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (setattr, frame, op_ret, op_errno, statpre,</div><div class='del'>-                            statpost, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *statpre, struct iatt *statpost, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          preopstr[1024]  = {0, };</div><div class='del'>-        char          postopstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf           = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSETATTR].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (statpre, preopstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (statpost, postopstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*prebuf = {%s}, *postbuf = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  preopstr, postopstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (fsetattr, frame, op_ret, op_errno,</div><div class='del'>-                            statpre, statpost, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    TRACE_STACK_UNWIND(readdir, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-trace_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          preparentstr[1024]  = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_UNLINK].enabled) {</div><div class='del'>-                char string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  " *preparent = {%s}, "</div><div class='del'>-                                  "*postparent = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, preparentstr,</div><div class='del'>-                                  postparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (unlink, frame, op_ret, op_errno,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                  struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                  struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char           statstr[1024]          = {0, };</div><div class='del'>-        char           preoldparentstr[1024]  = {0, };</div><div class='del'>-        char           postoldparentstr[1024] = {0, };</div><div class='del'>-        char           prenewparentstr[1024]  = {0, };</div><div class='del'>-        char           postnewparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t   *conf                  = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_RENAME].enabled) {</div><div class='del'>-                char  string[6044] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (preoldparent, preoldparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postoldparent, postoldparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (prenewparent, prenewparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postnewparent, postnewparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*stbuf = {%s}, *preoldparent = {%s},"</div><div class='del'>-                                  " *postoldparent = {%s}"</div><div class='del'>-                                  " *prenewparent = {%s}, "</div><div class='del'>-                                  "*postnewparent = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret, statstr,</div><div class='del'>-                                  preoldparentstr, postoldparentstr,</div><div class='del'>-                                  prenewparentstr, postnewparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (rename, frame, op_ret, op_errno, buf,</div><div class='del'>-                            preoldparent, postoldparent,</div><div class='del'>-                            prenewparent, postnewparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    const char *buf, struct iatt *stbuf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf         = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READLINK].enabled) {</div><div class='del'>-                char string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (stbuf, statstr);</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, op_errno=%d,"</div><div class='del'>-                                  "buf=%s, stbuf = { %s })",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret, op_errno,</div><div class='del'>-                                  buf, statstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (readlink, frame, op_ret, op_errno, buf, stbuf,</div><div class='del'>-                            xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  inode_t *inode, struct iatt *buf,</div><div class='del'>-                  dict_t *xdata, struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024]       = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_LOOKUP].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-                        /* print buf-&gt;ia_gfid instead of inode-&gt;gfid,</div><div class='del'>-                         * since if the inode is not yet linked to the</div><div class='del'>-                         * inode table (fresh lookup) then null gfid</div><div class='del'>-                         * will be printed.</div><div class='del'>-                         */</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s (op_ret=%d "</div><div class='del'>-                                  "*buf {%s}, *postparent {%s}",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (buf-&gt;ia_gfid),</div><div class='del'>-                                  op_ret, statstr, postparentstr);</div><div class='del'>-</div><div class='del'>-                        /* For 'forget' */</div><div class='del'>-                        inode_ctx_put (inode, this, 0);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                            xdata, postparent);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   inode_t *inode, struct iatt *buf,</div><div class='del'>-                   struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+trace_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, gf_dirent_t *buf,</div><div class='ctx'>                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char          statstr[1024]       = {0, };</div><div class='del'>-        char          preparentstr[1024]  = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SYMLINK].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s (op_ret=%d "</div><div class='del'>-                                  "*stbuf = {%s}, *preparent = {%s}, "</div><div class='del'>-                                  "*postparent = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (inode-&gt;gfid),</div><div class='del'>-                                  op_ret, statstr, preparentstr,</div><div class='del'>-                                  postparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": op_ret=%d, op_errno=%d",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (symlink, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 inode_t *inode, struct iatt *buf,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024]       = {0, };</div><div class='del'>-        char          preparentstr[1024]  = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        char string[4096]  = {0,};</div><div class='del'>-        if (trace_fop_names[GF_FOP_MKNOD].enabled) {</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s (op_ret=%d "</div><div class='del'>-                                  "*stbuf = {%s}, *preparent = {%s}, "</div><div class='del'>-                                  "*postparent = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (inode-&gt;gfid),</div><div class='del'>-                                  op_ret, statstr, preparentstr,</div><div class='del'>-                                  postparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (mknod, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 inode_t *inode, struct iatt *buf,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024]       = {0, };</div><div class='del'>-        char          preparentstr[1024]  = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_MKDIR].enabled) {</div><div class='del'>-                char  string[4096]  = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s (op_ret=%d "</div><div class='del'>-                                  ", *stbuf = {%s}, *prebuf = {%s}, "</div><div class='del'>-                                  "*postbuf = {%s} )",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (inode-&gt;gfid),</div><div class='del'>-                                  op_ret, statstr, preparentstr,</div><div class='del'>-                                  postparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (mkdir, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno,</div><div class='del'>-                inode_t *inode, struct iatt *buf,</div><div class='del'>-                struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024]       = {0, };</div><div class='del'>-        char          preparentstr[1024]  = {0, };</div><div class='del'>-        char          postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        char  string[4096]  = {0,};</div><div class='del'>-        if (trace_fop_names[GF_FOP_LINK].enabled) {</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*stbuf = {%s},  *prebuf = {%s},"</div><div class='del'>-                                  " *postbuf = {%s})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  statstr, preparentstr, postparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (link, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+    int count = 0;</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char string[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READDIRP].enabled) {</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 " : gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, &amp;buf-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        count++;</div><div class='add'>+        TRACE_STAT_TO_STR(&amp;entry-&gt;d_stat, statstr);</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "entry no. %d, pargfid=%s, "</div><div class='add'>+                 "bname=%s *buf {%s}",</div><div class='add'>+                 count, uuid_utoa(frame-&gt;local), entry-&gt;d_name, statstr);</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(readdirp, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSYNC].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(prebuf, preopstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postbuf, postopstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*prebuf = {%s}, *postbuf = {%s}",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, preopstr, postopstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                  struct iatt *statpost, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SETATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(statpre, preopstr);</div><div class='add'>+            TRACE_STAT_TO_STR(statpost, postopstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*prebuf = {%s}, *postbuf = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, preopstr, postopstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(setattr, frame, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                   struct iatt *statpost, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSETATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(statpre, preopstr);</div><div class='add'>+            TRACE_STAT_TO_STR(statpost, postopstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*prebuf = {%s}, *postbuf = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, preopstr, postopstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(fsetattr, frame, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_UNLINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     " *preparent = {%s}, "</div><div class='add'>+                     "*postparent = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     preparentstr, postparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                 struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                 struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                 dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char preoldparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postoldparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char prenewparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postnewparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_RENAME].enabled) {</div><div class='add'>+        char string[6044] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(preoldparent, preoldparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postoldparent, postoldparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(prenewparent, prenewparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postnewparent, postnewparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*stbuf = {%s}, *preoldparent = {%s},"</div><div class='add'>+                     " *postoldparent = {%s}"</div><div class='add'>+                     " *prenewparent = {%s}, "</div><div class='add'>+                     "*postnewparent = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, statstr, preoldparentstr,</div><div class='add'>+                     postoldparentstr, prenewparentstr, postnewparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                       postoldparent, prenewparent, postnewparent, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, const char *buf,</div><div class='add'>+                   struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READLINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(stbuf, statstr);</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, op_errno=%d,"</div><div class='add'>+                     "buf=%s, stbuf = { %s })",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, op_errno, buf, statstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(readlink, frame, op_ret, op_errno, buf, stbuf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_LOOKUP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+            /* print buf-&gt;ia_gfid instead of inode-&gt;gfid,</div><div class='add'>+             * since if the inode is not yet linked to the</div><div class='add'>+             * inode table (fresh lookup) then null gfid</div><div class='add'>+             * will be printed.</div><div class='add'>+             */</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s (op_ret=%d "</div><div class='add'>+                     "*buf {%s}, *postparent {%s}",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(buf-&gt;ia_gfid), op_ret,</div><div class='add'>+                     statstr, postparentstr);</div><div class='add'>+</div><div class='add'>+            /* For 'forget' */</div><div class='add'>+            inode_ctx_put(inode, this, 0);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                       postparent);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SYMLINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s (op_ret=%d "</div><div class='add'>+                     "*stbuf = {%s}, *preparent = {%s}, "</div><div class='add'>+                     "*postparent = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(inode-&gt;gfid), op_ret,</div><div class='add'>+                     statstr, preparentstr, postparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64 ": op_ret=%d, op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='add'>+                     op_ret, op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(symlink, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                       postparent, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    char string[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    if (trace_fop_names[GF_FOP_MKNOD].enabled) {</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s (op_ret=%d "</div><div class='add'>+                     "*stbuf = {%s}, *preparent = {%s}, "</div><div class='add'>+                     "*postparent = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(inode-&gt;gfid), op_ret,</div><div class='add'>+                     statstr, preparentstr, postparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64 ": (op_ret=%d, op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(mknod, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                       postparent, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_MKDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s (op_ret=%d "</div><div class='add'>+                     ", *stbuf = {%s}, *prebuf = {%s}, "</div><div class='add'>+                     "*postbuf = {%s} )",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(inode-&gt;gfid), op_ret,</div><div class='add'>+                     statstr, preparentstr, postparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64 ": (op_ret=%d, op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(mkdir, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                       postparent, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+               struct iatt *buf, struct iatt *preparent,</div><div class='add'>+               struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    char string[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    if (trace_fop_names[GF_FOP_LINK].enabled) {</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*stbuf = {%s},  *prebuf = {%s},"</div><div class='add'>+                     " *postbuf = {%s})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, statstr, preparentstr,</div><div class='add'>+                     postparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(link, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                       postparent, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    char string[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    if (trace_fop_names[GF_FOP_FLUSH].enabled) {</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(flush, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    char string[4096] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    if (trace_fop_names[GF_FOP_OPENDIR].enabled) {</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s op_ret=%d, op_errno=%d,"</div><div class='add'>+                 " fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, op_errno,</div><div class='add'>+                 fd);</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    /* for 'releasedir' log */</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        fd_ctx_set(fd, this, 0);</div><div class='add'>+</div><div class='add'>+    TRACE_STACK_UNWIND(opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postparentstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_RMDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(preparent, preparentstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postparent, postparentstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "*prebuf={%s},  *postbuf={%s}",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     preparentstr, postparentstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(rmdir, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char preopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postopstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_TRUNCATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(prebuf, preopstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postbuf, postopstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "*prebuf = {%s}, *postbuf = {%s} )",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, preopstr, postopstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='add'>+                 dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_STATFS].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": ({f_bsize=%lu, "</div><div class='add'>+                     "f_frsize=%lu, "</div><div class='add'>+                     "f_blocks=%" GF_PRI_FSBLK ", f_bfree=%" GF_PRI_FSBLK</div><div class='add'>+                     ", "</div><div class='add'>+                     "f_bavail=%" GF_PRI_FSBLK</div><div class='add'>+                     ", "</div><div class='add'>+                     "f_files=%" GF_PRI_FSBLK</div><div class='add'>+                     ", "</div><div class='add'>+                     "f_ffree=%" GF_PRI_FSBLK</div><div class='add'>+                     ", "</div><div class='add'>+                     "f_favail=%" GF_PRI_FSBLK</div><div class='add'>+                     ", "</div><div class='add'>+                     "f_fsid=%lu, f_flag=%lu, "</div><div class='add'>+                     "f_namemax=%lu}) =&gt; ret=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, buf-&gt;f_bsize, buf-&gt;f_frsize,</div><div class='add'>+                     buf-&gt;f_blocks, buf-&gt;f_bfree, buf-&gt;f_bavail, buf-&gt;f_files,</div><div class='add'>+                     buf-&gt;f_ffree, buf-&gt;f_favail, buf-&gt;f_fsid, buf-&gt;f_flag,</div><div class='add'>+                     buf-&gt;f_namemax, op_ret);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": (op_ret=%d, "</div><div class='add'>+                     "op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        char      string[4096] = {0,};</div><div class='del'>-        if (trace_fop_names[GF_FOP_FLUSH].enabled) {</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique, uuid_utoa (frame-&gt;local),</div><div class='del'>-                          op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (flush, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+trace_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        char    string[4096] = {0,};</div><div class='del'>-        if (trace_fop_names[GF_FOP_OPENDIR].enabled) {</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d,"</div><div class='del'>-                          " fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique, uuid_utoa (frame-&gt;local),</div><div class='del'>-                          op_ret, op_errno, fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_GETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s op_ret=%d, op_errno=%d,"</div><div class='add'>+                 " dict=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, op_errno,</div><div class='add'>+                 dict);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        /* for 'releasedir' log */</div><div class='del'>-        if (op_ret &gt;= 0)</div><div class='del'>-                fd_ctx_set (fd, this, 0);</div><div class='del'>-</div><div class='del'>-        TRACE_STACK_UNWIND (opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char           preparentstr[1024]  = {0, };</div><div class='del'>-        char           postparentstr[1024] = {0, };</div><div class='del'>-        trace_conf_t   *conf               = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_RMDIR].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (preparent, preparentstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postparent, postparentstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "*prebuf={%s},  *postbuf={%s}",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, preparentstr, postparentstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (rmdir, frame, op_ret, op_errno,</div><div class='del'>-                            preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno,</div><div class='del'>-                    struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char           preopstr[1024]  = {0, };</div><div class='del'>-        char           postopstr[1024] = {0, };</div><div class='del'>-        trace_conf_t   *conf           = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_TRUNCATE].enabled) {</div><div class='del'>-                char   string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (prebuf, preopstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postbuf, postopstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "*prebuf = {%s}, *postbuf = {%s} )",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  preopstr, postopstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (truncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                            postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    TRACE_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-trace_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='del'>-                  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_STATFS].enabled) {</div><div class='del'>-                char   string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": ({f_bsize=%lu, "</div><div class='del'>-                                  "f_frsize=%lu, "</div><div class='del'>-                                  "f_blocks=%"GF_PRI_FSBLK</div><div class='del'>-                                  ", f_bfree=%"GF_PRI_FSBLK", "</div><div class='del'>-                                  "f_bavail=%"GF_PRI_FSBLK", "</div><div class='del'>-                                  "f_files=%"GF_PRI_FSBLK", "</div><div class='del'>-                                  "f_ffree=%"GF_PRI_FSBLK", "</div><div class='del'>-                                  "f_favail=%"GF_PRI_FSBLK", "</div><div class='del'>-                                  "f_fsid=%lu, f_flag=%lu, "</div><div class='del'>-                                  "f_namemax=%lu}) =&gt; ret=%d",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, buf-&gt;f_bsize,</div><div class='del'>-                                  buf-&gt;f_frsize, buf-&gt;f_blocks,</div><div class='del'>-                                  buf-&gt;f_bfree, buf-&gt;f_bavail,</div><div class='del'>-                                  buf-&gt;f_files, buf-&gt;f_ffree,</div><div class='del'>-                                  buf-&gt;f_favail, buf-&gt;f_fsid,</div><div class='del'>-                                  buf-&gt;f_flag, buf-&gt;f_namemax, op_ret);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": (op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+trace_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t     *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SETXATTR].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                          op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+trace_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='ctx'>                     dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_GETXATTR].enabled) {</div><div class='del'>-                char       string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d,"</div><div class='del'>-                          " dict=%p", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno,</div><div class='del'>-                          dict);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FGETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s op_ret=%d, op_errno=%d,"</div><div class='add'>+                 " dict=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, op_errno,</div><div class='add'>+                 dict);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSETXATTR].enabled) {</div><div class='del'>-                char    string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    TRACE_STACK_UNWIND(fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+trace_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FGETXATTR].enabled) {</div><div class='del'>-                char      string[4096]  = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d,"</div><div class='del'>-                          " dict=%p", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno,</div><div class='del'>-                          dict);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_REMOVEXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    TRACE_STACK_UNWIND(removexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+trace_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_REMOVEXATTR].enabled) {</div><div class='del'>-                char       string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSYNCDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(fsyncdir, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+trace_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t     *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSYNCDIR].enabled) {</div><div class='del'>-                char       string[4096]   =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (fsyncdir, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_ACCESS].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s op_ret=%d, "</div><div class='add'>+                 "op_errno=%d)",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(access, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char prebufstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char postbufstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FTRUNCATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(prebuf, prebufstr);</div><div class='add'>+            TRACE_STAT_TO_STR(postbuf, postbufstr);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": op_ret=%d, "</div><div class='add'>+                     "*prebuf = {%s}, *postbuf = {%s} )",</div><div class='add'>+                     frame-&gt;root-&gt;unique, op_ret, prebufstr, postbufstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    char statstr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSTAT].enabled) {</div><div class='add'>+        char string[4096] = {0.};</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            TRACE_STAT_TO_STR(buf, statstr);</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d "</div><div class='add'>+                     "buf=%s",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     statstr);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_LK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (op_ret == 0) {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "{l_type=%d, l_whence=%d, "</div><div class='add'>+                     "l_start=%" PRId64</div><div class='add'>+                     ", "</div><div class='add'>+                     "l_len=%" PRId64 ", l_pid=%u})",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     lock-&gt;l_type, lock-&gt;l_whence, lock-&gt;l_start, lock-&gt;l_len,</div><div class='add'>+                     lock-&gt;l_pid);</div><div class='add'>+        } else {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s op_ret=%d, "</div><div class='add'>+                     "op_errno=%d)",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                     op_errno);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(lk, frame, op_ret, op_errno, lock, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+trace_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_ACCESS].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                          "op_errno=%d)", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_ENTRYLK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (access, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          prebufstr[1024]  = {0, };</div><div class='del'>-        char          postbufstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf            = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FTRUNCATE].enabled) {</div><div class='del'>-                char  string[4096]  = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (prebuf, prebufstr);</div><div class='del'>-                        TRACE_STAT_TO_STR (postbuf, postbufstr);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": op_ret=%d, "</div><div class='del'>-                                  "*prebuf = {%s}, *postbuf = {%s} )",</div><div class='del'>-                                  frame-&gt;root-&gt;unique, op_ret,</div><div class='del'>-                                  prebufstr, postbufstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                            xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        char          statstr[1024] = {0, };</div><div class='del'>-        trace_conf_t  *conf         = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSTAT].enabled) {</div><div class='del'>-                char string[4096]  = {0.};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        TRACE_STAT_TO_STR (buf, statstr);</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d "</div><div class='del'>-                                  "buf=%s", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  statstr);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(entrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='del'>-              dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_LK].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                if (op_ret == 0) {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "{l_type=%d, l_whence=%d, "</div><div class='del'>-                                  "l_start=%"PRId64", "</div><div class='del'>-                                  "l_len=%"PRId64", l_pid=%u})",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local),</div><div class='del'>-                                  op_ret, lock-&gt;l_type, lock-&gt;l_whence,</div><div class='del'>-                                  lock-&gt;l_start, lock-&gt;l_len,</div><div class='del'>-                                  lock-&gt;l_pid);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s op_ret=%d, "</div><div class='del'>-                                  "op_errno=%d)", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (frame-&gt;local), op_ret,</div><div class='del'>-                                  op_errno);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (lk, frame, op_ret, op_errno, lock, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+trace_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_ENTRYLK].enabled) {</div><div class='del'>-                char   string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FENTRYLK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (entrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(fentrylk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+trace_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FENTRYLK].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_XATTROP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (fentrylk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+trace_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='ctx'>                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_XATTROP].enabled) {</div><div class='del'>-                char    string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FXATTROP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (xattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+trace_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FXATTROP].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_INODELK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (fxattrop, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(inodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+trace_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_INODELK].enabled) {</div><div class='del'>-                char       string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local),op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FINODELK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d, op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (inodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-trace_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FINODELK].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d, op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (finodelk, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    TRACE_STACK_UNWIND(finodelk, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_rchecksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     uint32_t weak_checksum, uint8_t *strong_checksum,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+trace_rchecksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, uint32_t weak_checksum,</div><div class='add'>+                    uint8_t *strong_checksum, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_RCHECKSUM].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d op_errno=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_RCHECKSUM].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s op_ret=%d op_errno=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        TRACE_STACK_UNWIND (rchecksum, frame, op_ret, op_errno, weak_checksum,</div><div class='del'>-                            strong_checksum, xdata);</div><div class='add'>+    TRACE_STACK_UNWIND(rchecksum, frame, op_ret, op_errno, weak_checksum,</div><div class='add'>+                       strong_checksum, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* *_cbk section over &lt;----------&gt; fop section start */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               const char *volume, loc_t *loc, const char *basename,</div><div class='del'>-               entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+trace_entrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+              loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+              entrylk_type type, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_ENTRYLK].enabled) {</div><div class='del'>-                char     string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s volume=%s, (path=%s "</div><div class='del'>-                          "basename=%s, cmd=%s, type=%s)",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                          volume, loc-&gt;path, basename,</div><div class='del'>-                          ((cmd == ENTRYLK_LOCK) ? "ENTRYLK_LOCK" :</div><div class='del'>-                           "ENTRYLK_UNLOCK"),</div><div class='del'>-                          ((type == ENTRYLK_RDLCK) ? "ENTRYLK_RDLCK" :</div><div class='del'>-                           "ENTRYLK_WRLCK"));</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_ENTRYLK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s volume=%s, (path=%s "</div><div class='add'>+                 "basename=%s, cmd=%s, type=%s)",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), volume,</div><div class='add'>+                 loc-&gt;path, basename,</div><div class='add'>+                 ((cmd == ENTRYLK_LOCK) ? "ENTRYLK_LOCK" : "ENTRYLK_UNLOCK"),</div><div class='add'>+                 ((type == ENTRYLK_RDLCK) ? "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK"));</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_entrylk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;entrylk,</div><div class='del'>-                    volume, loc, basename, cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_entrylk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;entrylk, volume, loc, basename, cmd,</div><div class='add'>+               type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-               loc_t *loc, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+trace_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+              loc_t *loc, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char         *cmd_str  = NULL;</div><div class='del'>-        char         *type_str = NULL;</div><div class='del'>-        trace_conf_t *conf     = NULL;</div><div class='add'>+    char *cmd_str = NULL;</div><div class='add'>+    char *type_str = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_INODELK].enabled) {</div><div class='del'>-                char string[4096]  = {0,};</div><div class='del'>-                switch (cmd) {</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_INODELK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        switch (cmd) {</div><div class='ctx'> #if F_GETLK != F_GETLK64</div><div class='del'>-                case F_GETLK64:</div><div class='add'>+            case F_GETLK64:</div><div class='ctx'> #endif</div><div class='del'>-                case F_GETLK:</div><div class='del'>-                        cmd_str = "GETLK";</div><div class='del'>-                        break;</div><div class='add'>+            case F_GETLK:</div><div class='add'>+                cmd_str = "GETLK";</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLK != F_SETLK64</div><div class='del'>-                case F_SETLK64:</div><div class='add'>+            case F_SETLK64:</div><div class='ctx'> #endif</div><div class='del'>-                case F_SETLK:</div><div class='del'>-                        cmd_str = "SETLK";</div><div class='del'>-                        break;</div><div class='add'>+            case F_SETLK:</div><div class='add'>+                cmd_str = "SETLK";</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLKW != F_SETLKW64</div><div class='del'>-                case F_SETLKW64:</div><div class='add'>+            case F_SETLKW64:</div><div class='ctx'> #endif</div><div class='del'>-                case F_SETLKW:</div><div class='del'>-                        cmd_str = "SETLKW";</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        cmd_str = "UNKNOWN";</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (flock-&gt;l_type) {</div><div class='del'>-                case F_RDLCK:</div><div class='del'>-                        type_str = "READ";</div><div class='del'>-                        break;</div><div class='del'>-                case F_WRLCK:</div><div class='del'>-                        type_str = "WRITE";</div><div class='del'>-                        break;</div><div class='del'>-                case F_UNLCK:</div><div class='del'>-                        type_str = "UNLOCK";</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        type_str = "UNKNOWN";</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s volume=%s, (path=%s "</div><div class='del'>-                          "cmd=%s, type=%s, start=%llu, len=%llu, "</div><div class='del'>-                          "pid=%llu)", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), volume,</div><div class='del'>-                          loc-&gt;path, cmd_str, type_str,</div><div class='del'>-                          (unsigned long long)flock-&gt;l_start,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_pid);</div><div class='del'>-</div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='add'>+            case F_SETLKW:</div><div class='add'>+                cmd_str = "SETLKW";</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            default:</div><div class='add'>+                cmd_str = "UNKNOWN";</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        switch (flock-&gt;l_type) {</div><div class='add'>+            case F_RDLCK:</div><div class='add'>+                type_str = "READ";</div><div class='add'>+                break;</div><div class='add'>+            case F_WRLCK:</div><div class='add'>+                type_str = "WRITE";</div><div class='add'>+                break;</div><div class='add'>+            case F_UNLCK:</div><div class='add'>+                type_str = "UNLOCK";</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                type_str = "UNKNOWN";</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        snprintf(</div><div class='add'>+            string, sizeof(string),</div><div class='add'>+            "%" PRId64</div><div class='add'>+            ": gfid=%s volume=%s, (path=%s "</div><div class='add'>+            "cmd=%s, type=%s, start=%llu, len=%llu, "</div><div class='add'>+            "pid=%llu)",</div><div class='add'>+            frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), volume, loc-&gt;path,</div><div class='add'>+            cmd_str, type_str, (unsigned long long)flock-&gt;l_start,</div><div class='add'>+            (unsigned long long)flock-&gt;l_len, (unsigned long long)flock-&gt;l_pid);</div><div class='add'>+</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_inodelk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;inodelk,</div><div class='del'>-                    volume, loc, cmd, flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_inodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;inodelk, volume, loc, cmd, flock,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_finodelk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-                fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+trace_finodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+               fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char          *cmd_str  = NULL;</div><div class='del'>-        char          *type_str = NULL;</div><div class='del'>-        trace_conf_t  *conf     = NULL;</div><div class='add'>+    char *cmd_str = NULL;</div><div class='add'>+    char *type_str = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FINODELK].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                switch (cmd) {</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FINODELK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        switch (cmd) {</div><div class='ctx'> #if F_GETLK != F_GETLK64</div><div class='del'>-                case F_GETLK64:</div><div class='add'>+            case F_GETLK64:</div><div class='ctx'> #endif</div><div class='del'>-                case F_GETLK:</div><div class='del'>-                        cmd_str = "GETLK";</div><div class='del'>-                        break;</div><div class='add'>+            case F_GETLK:</div><div class='add'>+                cmd_str = "GETLK";</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLK != F_SETLK64</div><div class='del'>-                case F_SETLK64:</div><div class='add'>+            case F_SETLK64:</div><div class='ctx'> #endif</div><div class='del'>-                case F_SETLK:</div><div class='del'>-                        cmd_str = "SETLK";</div><div class='del'>-                        break;</div><div class='add'>+            case F_SETLK:</div><div class='add'>+                cmd_str = "SETLK";</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLKW != F_SETLKW64</div><div class='del'>-                case F_SETLKW64:</div><div class='add'>+            case F_SETLKW64:</div><div class='ctx'> #endif</div><div class='del'>-                case F_SETLKW:</div><div class='del'>-                        cmd_str = "SETLKW";</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                        cmd_str = "UNKNOWN";</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                switch (flock-&gt;l_type) {</div><div class='del'>-                case F_RDLCK:</div><div class='del'>-                        type_str = "READ";</div><div class='del'>-                        break;</div><div class='del'>-                case F_WRLCK:</div><div class='del'>-                        type_str = "WRITE";</div><div class='del'>-                        break;</div><div class='del'>-                case F_UNLCK:</div><div class='del'>-                        type_str = "UNLOCK";</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        type_str = "UNKNOWN";</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s volume=%s, (fd =%p "</div><div class='del'>-                          "cmd=%s, type=%s, start=%llu, len=%llu, "</div><div class='del'>-                          "pid=%llu)", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), volume, fd,</div><div class='del'>-                          cmd_str, type_str,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_start,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_pid);</div><div class='del'>-</div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='add'>+            case F_SETLKW:</div><div class='add'>+                cmd_str = "SETLKW";</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            default:</div><div class='add'>+                cmd_str = "UNKNOWN";</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        switch (flock-&gt;l_type) {</div><div class='add'>+            case F_RDLCK:</div><div class='add'>+                type_str = "READ";</div><div class='add'>+                break;</div><div class='add'>+            case F_WRLCK:</div><div class='add'>+                type_str = "WRITE";</div><div class='add'>+                break;</div><div class='add'>+            case F_UNLCK:</div><div class='add'>+                type_str = "UNLOCK";</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                type_str = "UNKNOWN";</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s volume=%s, (fd =%p "</div><div class='add'>+                 "cmd=%s, type=%s, start=%llu, len=%llu, "</div><div class='add'>+                 "pid=%llu)",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), volume, fd,</div><div class='add'>+                 cmd_str, type_str, (unsigned long long)flock-&gt;l_start,</div><div class='add'>+                 (unsigned long long)flock-&gt;l_len,</div><div class='add'>+                 (unsigned long long)flock-&gt;l_pid);</div><div class='add'>+</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_finodelk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;finodelk,</div><div class='del'>-                    volume, fd, cmd, flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, volume, fd, cmd, flock,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+trace_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_XATTROP].enabled) {</div><div class='del'>-                char    string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s (path=%s flags=%d)",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          flags);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_XATTROP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s (path=%s flags=%d)", frame-&gt;root-&gt;unique,</div><div class='add'>+                 uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path, flags);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_xattrop_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;xattrop,</div><div class='del'>-                    loc, flags, dict, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_xattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, flags, dict, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+trace_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FXATTROP].enabled) {</div><div class='del'>-                char    string[4096]  = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p, flags=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, flags);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FXATTROP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s fd=%p, flags=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, flags);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fxattrop_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fxattrop,</div><div class='del'>-                    fd, flags, dict, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_fxattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, flags, dict, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, dict_t *xdata)</div><div class='add'>+trace_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_LOOKUP].enabled) {</div><div class='del'>-                char string[4096] = {0,};</div><div class='del'>-                /* TODO: print all the keys mentioned in xattr_req */</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_LOOKUP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        /* TODO: print all the keys mentioned in xattr_req */</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_lookup_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-                    loc, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+trace_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_STAT].enabled) {</div><div class='del'>-                char  string[4096]  = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_STAT].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_stat_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;stat,</div><div class='del'>-                    loc, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+trace_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READLINK].enabled) {</div><div class='del'>-                char      string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s, "</div><div class='del'>-                          "size=%"GF_PRI_SIZET")", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          size);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READLINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s path=%s, "</div><div class='add'>+                 "size=%" GF_PRI_SIZET ")",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 size);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_readlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readlink,</div><div class='del'>-                    loc, size, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_readlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             mode_t mode, dev_t dev, mode_t umask, dict_t *xdata)</div><div class='add'>+trace_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+            dev_t dev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_MKNOD].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s mode=%d "</div><div class='del'>-                          "umask=0%o, dev=%"GF_PRI_DEV")",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          mode, umask, dev);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_MKNOD].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s path=%s mode=%d "</div><div class='add'>+                 "umask=0%o, dev=%" GF_PRI_DEV ")",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 mode, umask, dev);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_mknod_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, dev, umask, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, dev, umask, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-             mode_t umask, dict_t *xdata)</div><div class='add'>+trace_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+            mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_MKDIR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s mode=%d"</div><div class='del'>-                          " umask=0%o", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          mode, umask);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_MKDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s path=%s mode=%d"</div><div class='add'>+                 " umask=0%o",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 mode, umask);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_mkdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mkdir,</div><div class='del'>-                    loc, mode, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+trace_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_UNLINK].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s flag=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          xflag);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_UNLINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s flag=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 xflag);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+trace_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_RMDIR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s flags=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          flags);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_RMDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s path=%s flags=%d", frame-&gt;root-&gt;unique,</div><div class='add'>+                 uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path, flags);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_rmdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, flags, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-               loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+trace_symlink(call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+              loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t     *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SYMLINK].enabled) {</div><div class='del'>-                char     string[4096]   =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s linkpath=%s, path=%s"</div><div class='del'>-                          " umask=0%o", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), linkpath,</div><div class='del'>-                          loc-&gt;path, umask);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SYMLINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s linkpath=%s, path=%s"</div><div class='add'>+                 " umask=0%o",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), linkpath,</div><div class='add'>+                 loc-&gt;path, umask);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_symlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='del'>-                    linkpath, loc, umask, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkpath, loc, umask, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+trace_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char         oldgfid[50] = {0,};</div><div class='del'>-        char         newgfid[50] = {0,};</div><div class='del'>-        trace_conf_t *conf       = NULL;</div><div class='add'>+    char oldgfid[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char newgfid[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_RENAME].enabled) {</div><div class='del'>-                char string[4096] = {0,};</div><div class='del'>-                if (newloc-&gt;inode)</div><div class='del'>-                        uuid_utoa_r (newloc-&gt;inode-&gt;gfid, newgfid);</div><div class='del'>-                else</div><div class='del'>-                        strcpy (newgfid, "0");</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_RENAME].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (newloc-&gt;inode)</div><div class='add'>+            uuid_utoa_r(newloc-&gt;inode-&gt;gfid, newgfid);</div><div class='add'>+        else</div><div class='add'>+            strcpy(newgfid, "0");</div><div class='ctx'> </div><div class='del'>-                uuid_utoa_r (oldloc-&gt;inode-&gt;gfid, oldgfid);</div><div class='add'>+        uuid_utoa_r(oldloc-&gt;inode-&gt;gfid, oldgfid);</div><div class='ctx'> </div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": oldgfid=%s oldpath=%s --&gt; "</div><div class='del'>-                          "newgfid=%s newpath=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique, oldgfid,</div><div class='del'>-                          oldloc-&gt;path, newgfid, newloc-&gt;path);</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": oldgfid=%s oldpath=%s --&gt; "</div><div class='add'>+                 "newgfid=%s newpath=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, oldgfid, oldloc-&gt;path, newgfid,</div><div class='add'>+                 newloc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = oldloc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = oldloc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_rename_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+trace_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char         oldgfid[50] = {0,};</div><div class='del'>-        char         newgfid[50] = {0,};</div><div class='del'>-        trace_conf_t *conf       = NULL;</div><div class='add'>+    char oldgfid[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char newgfid[50] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_LINK].enabled) {</div><div class='del'>-                char string[4096]  = {0,};</div><div class='del'>-                if (newloc-&gt;inode)</div><div class='del'>-                        uuid_utoa_r (newloc-&gt;inode-&gt;gfid, newgfid);</div><div class='del'>-                else</div><div class='del'>-                        strcpy (newgfid, "0");</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_LINK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (newloc-&gt;inode)</div><div class='add'>+            uuid_utoa_r(newloc-&gt;inode-&gt;gfid, newgfid);</div><div class='add'>+        else</div><div class='add'>+            strcpy(newgfid, "0");</div><div class='ctx'> </div><div class='del'>-                uuid_utoa_r (oldloc-&gt;inode-&gt;gfid, oldgfid);</div><div class='add'>+        uuid_utoa_r(oldloc-&gt;inode-&gt;gfid, oldgfid);</div><div class='ctx'> </div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": oldgfid=%s oldpath=%s --&gt; "</div><div class='del'>-                          "newgfid=%s newpath=%s", frame-&gt;root-&gt;unique,</div><div class='del'>-                          oldgfid, oldloc-&gt;path, newgfid,</div><div class='del'>-                          newloc-&gt;path);</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": oldgfid=%s oldpath=%s --&gt; "</div><div class='add'>+                 "newgfid=%s newpath=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, oldgfid, oldloc-&gt;path, newgfid,</div><div class='add'>+                 newloc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = oldloc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = oldloc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_link_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+trace_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char         actime_str[256]  = {0,};</div><div class='del'>-        char         modtime_str[256] = {0,};</div><div class='del'>-        trace_conf_t *conf            = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SETATTR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                if (valid &amp; GF_SET_ATTR_MODE) {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s path=%s mode=%o)",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                                  loc-&gt;path,</div><div class='del'>-                                  st_mode_from_ia (stbuf-&gt;ia_prot,</div><div class='del'>-                                                   stbuf-&gt;ia_type));</div><div class='del'>-</div><div class='del'>-                        LOG_ELEMENT (conf, string);</div><div class='del'>-                        memset (string, 0 , sizeof (string));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (valid &amp; (GF_SET_ATTR_UID | GF_SET_ATTR_GID)) {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s path=%s uid=%o,"</div><div class='del'>-                                  " gid=%o", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                                  loc-&gt;path, stbuf-&gt;ia_uid,</div><div class='del'>-                                  stbuf-&gt;ia_gid);</div><div class='del'>-</div><div class='del'>-                        LOG_ELEMENT (conf, string);</div><div class='del'>-                        memset (string, 0 , sizeof (string));</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (valid &amp; (GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME)) {</div><div class='del'>-                        gf_time_fmt (actime_str, sizeof actime_str,</div><div class='del'>-                                     stbuf-&gt;ia_atime, gf_timefmt_bdT);</div><div class='del'>-</div><div class='del'>-                        gf_time_fmt (modtime_str, sizeof modtime_str,</div><div class='del'>-                                     stbuf-&gt;ia_mtime, gf_timefmt_bdT);</div><div class='del'>-</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s path=%s "</div><div class='del'>-                                  "ia_atime=%s, ia_mtime=%s",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                                  loc-&gt;path, actime_str, modtime_str);</div><div class='del'>-</div><div class='del'>-                        LOG_ELEMENT (conf, string);</div><div class='del'>-                        memset (string, 0 , sizeof (string));</div><div class='del'>-                }</div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+    char actime_str[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char modtime_str[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SETATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (valid &amp; GF_SET_ATTR_MODE) {</div><div class='add'>+            snprintf(</div><div class='add'>+                string, sizeof(string), "%" PRId64 ": gfid=%s path=%s mode=%o)",</div><div class='add'>+                frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                st_mode_from_ia(stbuf-&gt;ia_prot, stbuf-&gt;ia_type));</div><div class='add'>+</div><div class='add'>+            LOG_ELEMENT(conf, string);</div><div class='add'>+            memset(string, 0, sizeof(string));</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (valid &amp; (GF_SET_ATTR_UID | GF_SET_ATTR_GID)) {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s path=%s uid=%o,"</div><div class='add'>+                     " gid=%o",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid),</div><div class='add'>+                     loc-&gt;path, stbuf-&gt;ia_uid, stbuf-&gt;ia_gid);</div><div class='add'>+</div><div class='add'>+            LOG_ELEMENT(conf, string);</div><div class='add'>+            memset(string, 0, sizeof(string));</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if (valid &amp; (GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME)) {</div><div class='add'>+            gf_time_fmt(actime_str, sizeof actime_str, stbuf-&gt;ia_atime,</div><div class='add'>+                        gf_timefmt_bdT);</div><div class='add'>+</div><div class='add'>+            gf_time_fmt(modtime_str, sizeof modtime_str, stbuf-&gt;ia_mtime,</div><div class='add'>+                        gf_timefmt_bdT);</div><div class='add'>+</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s path=%s "</div><div class='add'>+                     "ia_atime=%s, ia_mtime=%s",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid),</div><div class='add'>+                     loc-&gt;path, actime_str, modtime_str);</div><div class='add'>+</div><div class='add'>+            LOG_ELEMENT(conf, string);</div><div class='add'>+            memset(string, 0, sizeof(string));</div><div class='add'>+        }</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_setattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setattr,</div><div class='del'>-                    loc, stbuf, valid, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+trace_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char           actime_str[256]  = {0,};</div><div class='del'>-        char           modtime_str[256] = {0,};</div><div class='del'>-        trace_conf_t   *conf            = NULL;</div><div class='add'>+    char actime_str[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char modtime_str[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSETATTR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                if (valid &amp; GF_SET_ATTR_MODE) {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s fd=%p, mode=%o",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (fd-&gt;inode-&gt;gfid), fd,</div><div class='del'>-                                  st_mode_from_ia (stbuf-&gt;ia_prot,</div><div class='del'>-                                                   stbuf-&gt;ia_type));</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSETATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        if (valid &amp; GF_SET_ATTR_MODE) {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64 ": gfid=%s fd=%p, mode=%o", frame-&gt;root-&gt;unique,</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), fd,</div><div class='add'>+                     st_mode_from_ia(stbuf-&gt;ia_prot, stbuf-&gt;ia_type));</div><div class='ctx'> </div><div class='del'>-                        LOG_ELEMENT (conf, string);</div><div class='del'>-                        memset (string, 0, sizeof (string));</div><div class='del'>-                }</div><div class='add'>+            LOG_ELEMENT(conf, string);</div><div class='add'>+            memset(string, 0, sizeof(string));</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (valid &amp; (GF_SET_ATTR_UID | GF_SET_ATTR_GID)) {</div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s fd=%p, uid=%o, "</div><div class='del'>-                                  "gid=%o", frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                  fd, stbuf-&gt;ia_uid, stbuf-&gt;ia_gid);</div><div class='add'>+        if (valid &amp; (GF_SET_ATTR_UID | GF_SET_ATTR_GID)) {</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s fd=%p, uid=%o, "</div><div class='add'>+                     "gid=%o",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd,</div><div class='add'>+                     stbuf-&gt;ia_uid, stbuf-&gt;ia_gid);</div><div class='ctx'> </div><div class='del'>-                        LOG_ELEMENT (conf, string);</div><div class='del'>-                        memset (string, 0, sizeof (string));</div><div class='del'>-                }</div><div class='add'>+            LOG_ELEMENT(conf, string);</div><div class='add'>+            memset(string, 0, sizeof(string));</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (valid &amp; (GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME)) {</div><div class='del'>-                        gf_time_fmt (actime_str, sizeof actime_str,</div><div class='del'>-                                     stbuf-&gt;ia_atime, gf_timefmt_bdT);</div><div class='add'>+        if (valid &amp; (GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME)) {</div><div class='add'>+            gf_time_fmt(actime_str, sizeof actime_str, stbuf-&gt;ia_atime,</div><div class='add'>+                        gf_timefmt_bdT);</div><div class='ctx'> </div><div class='del'>-                        gf_time_fmt (modtime_str, sizeof modtime_str,</div><div class='del'>-                                     stbuf-&gt;ia_mtime, gf_timefmt_bdT);</div><div class='add'>+            gf_time_fmt(modtime_str, sizeof modtime_str, stbuf-&gt;ia_mtime,</div><div class='add'>+                        gf_timefmt_bdT);</div><div class='ctx'> </div><div class='del'>-                        snprintf (string, sizeof (string),</div><div class='del'>-                                  "%"PRId64": gfid=%s fd=%p "</div><div class='del'>-                                  "ia_atime=%s, ia_mtime=%s",</div><div class='del'>-                                  frame-&gt;root-&gt;unique,</div><div class='del'>-                                  uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                  fd, actime_str, modtime_str);</div><div class='add'>+            snprintf(string, sizeof(string),</div><div class='add'>+                     "%" PRId64</div><div class='add'>+                     ": gfid=%s fd=%p "</div><div class='add'>+                     "ia_atime=%s, ia_mtime=%s",</div><div class='add'>+                     frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd,</div><div class='add'>+                     actime_str, modtime_str);</div><div class='ctx'> </div><div class='del'>-                        LOG_ELEMENT (conf, string);</div><div class='del'>-                        memset (string, 0, sizeof (string));</div><div class='del'>-                }</div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+            LOG_ELEMENT(conf, string);</div><div class='add'>+            memset(string, 0, sizeof(string));</div><div class='ctx'>         }</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fsetattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetattr,</div><div class='del'>-                    fd, stbuf, valid, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-trace_seek_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t  *conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SEEK].enabled) {</div><div class='del'>-                char  string[4096] = {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s op_ret=%d op_errno=%d, "</div><div class='del'>-                          "offset=%"PRId64"", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (frame-&gt;local), op_ret, op_errno, offset);</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        TRACE_STACK_UNWIND (seek, frame, op_ret, op_errno, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+trace_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    trace_conf_t *conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SEEK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s op_ret=%d op_errno=%d, "</div><div class='add'>+                 "offset=%" PRId64 "",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(frame-&gt;local), op_ret, op_errno,</div><div class='add'>+                 offset);</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    TRACE_STACK_UNWIND(seek, frame, op_ret, op_errno, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-trace_seek (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-            off_t offset, gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+trace_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+           gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = this-&gt;private;</div><div class='add'>+    trace_conf_t *conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SEEK].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string), "%"PRId64": gfid=%s fd=%p "</div><div class='del'>-                          "offset=%"PRId64" what=%d", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, offset, what);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SEEK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s fd=%p "</div><div class='add'>+                 "offset=%" PRId64 " what=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, offset,</div><div class='add'>+                 what);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_seek_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;seek, fd, offset, what, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_seek_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;seek, fd, offset, what, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                off_t offset, dict_t *xdata)</div><div class='add'>+trace_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_TRUNCATE].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s, "</div><div class='del'>-                          "offset=%"PRId64"", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          offset);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_TRUNCATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s path=%s, "</div><div class='add'>+                 "offset=%" PRId64 "",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 offset);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_truncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+trace_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_OPEN].enabled) {</div><div class='del'>-                char      string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s flags=%d fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          flags, fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_OPEN].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s path=%s flags=%d fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 flags, fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_open_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-                    loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_create (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-              int32_t flags, mode_t mode, mode_t umask, fd_t *fd,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+trace_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+             mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_CREATE].enabled) {</div><div class='del'>-                char    string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s, fd=%p, "</div><div class='del'>-                          "flags=0%o mode=0%o umask=0%o",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          fd, flags, mode, umask);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_CREATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s path=%s, fd=%p, "</div><div class='add'>+                 "flags=0%o mode=0%o umask=0%o",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 fd, flags, mode, umask);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_create_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+trace_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READ].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p, size=%"</div><div class='del'>-                          GF_PRI_SIZET"offset=%"PRId64" flags=0%x)",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, size,</div><div class='del'>-                          offset, flags);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READ].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s fd=%p, size=%" GF_PRI_SIZET</div><div class='add'>+                 "offset=%" PRId64 " flags=0%x)",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, size,</div><div class='add'>+                 offset, flags);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_readv_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='del'>-                    fd, size, offset, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              struct iovec *vector, int32_t count,</div><div class='del'>-              off_t offset, uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+trace_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+             struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+             struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='del'>-        int i = 0;</div><div class='del'>-        size_t total_size = 0;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t total_size = 0;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_WRITE].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                for (i = 0; i &lt; count; i++)</div><div class='del'>-                        total_size += vector[i].iov_len;</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_WRITE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        for (i = 0; i &lt; count; i++)</div><div class='add'>+            total_size += vector[i].iov_len;</div><div class='ctx'> </div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p, count=%d, "</div><div class='del'>-                          " offset=%"PRId64" flags=0%x write_size=%zu",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, count,</div><div class='del'>-                          offset, flags, total_size);</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s fd=%p, count=%d, "</div><div class='add'>+                 " offset=%" PRId64 " flags=0%x write_size=%zu",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, count,</div><div class='add'>+                 offset, flags, total_size);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_writev_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, vector, count, offset, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+trace_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_STATFS].enabled) {</div><div class='del'>-                char  string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique, (loc-&gt;inode)?</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid):"0", loc-&gt;path);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_STATFS].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique,</div><div class='add'>+                 (loc-&gt;inode) ? uuid_utoa(loc-&gt;inode-&gt;gfid) : "0", loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_statfs_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;statfs,</div><div class='del'>-                    loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_statfs_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+trace_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FLUSH].enabled) {</div><div class='del'>-                char    string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FLUSH].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_flush_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_flush_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+trace_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSYNC].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s flags=%d fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), flags, fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSYNC].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s flags=%d fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), flags, fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fsync_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsync,</div><div class='del'>-                    fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+trace_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+               int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_SETXATTR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s flags=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          flags);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_SETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s path=%s flags=%d", frame-&gt;root-&gt;unique,</div><div class='add'>+                 uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path, flags);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_setxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+trace_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_GETXATTR].enabled) {</div><div class='del'>-                char    string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s name=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          name);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_GETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s name=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 name);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_getxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+trace_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_REMOVEXATTR].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s name=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='del'>-                          name);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_REMOVEXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s name=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 name);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_removexattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+trace_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_OPENDIR].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path, fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_OPENDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s path=%s fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                 fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_opendir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;opendir,</div><div class='del'>-                    loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-                off_t offset, dict_t *dict)</div><div class='add'>+trace_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t offset, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READDIRP].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p, size=%"GF_PRI_SIZET</div><div class='del'>-                          ", offset=%"PRId64" dict=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, size,</div><div class='del'>-                          offset, dict);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READDIRP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s fd=%p, size=%" GF_PRI_SIZET</div><div class='add'>+                 ", offset=%" PRId64 " dict=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, size,</div><div class='add'>+                 offset, dict);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_readdirp_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-                    fd, size, offset, dict);</div><div class='add'>+    STACK_WIND(frame, trace_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-               size_t size, off_t offset, dict_t *xdata)</div><div class='add'>+trace_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_READDIR].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p, size=%"GF_PRI_SIZET</div><div class='del'>-                          ", offset=%"PRId64,</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, size,</div><div class='del'>-                          offset);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_READDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s fd=%p, size=%" GF_PRI_SIZET</div><div class='add'>+                 ", offset=%" PRId64,</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, size,</div><div class='add'>+                 offset);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_readdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdir,</div><div class='del'>-                    fd, size, offset, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_readdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, offset, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fsyncdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                fd_t *fd, int32_t datasync, dict_t *xdata)</div><div class='add'>+trace_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSYNCDIR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s datasync=%d fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), datasync, fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSYNCDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s datasync=%d fd=%p", frame-&gt;root-&gt;unique,</div><div class='add'>+                 uuid_utoa(fd-&gt;inode-&gt;gfid), datasync, fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fsyncdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir,</div><div class='del'>-                    fd, datasync, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_fsyncdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+trace_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_ACCESS].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s path=%s mask=0%o",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                          loc-&gt;path, mask);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_ACCESS].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s path=%s mask=0%o", frame-&gt;root-&gt;unique,</div><div class='add'>+                 uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path, mask);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = loc-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_access_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;access,</div><div class='del'>-                    loc, mask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_access_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                 int32_t len, dict_t *xdata)</div><div class='add'>+trace_rchecksum(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        trace_conf_t *conf = NULL;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_RCHECKSUM].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s offset=%" PRId64 "len=%u fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), offset, len,</div><div class='add'>+                 fd);</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_RCHECKSUM].enabled) {</div><div class='del'>-                char    string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s offset=%"PRId64</div><div class='del'>-                          "len=%u fd=%p", frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), offset, len, fd);</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_rchecksum_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rchecksum,</div><div class='del'>-                    fd, offset, len, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_rchecksum_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rchecksum, fd, offset, len, xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-                fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='del'>-                entrylk_type type, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FENTRYLK].enabled) {</div><div class='del'>-                char      string[4096]   =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s volume=%s, (fd=%p "</div><div class='del'>-                          "basename=%s, cmd=%s, type=%s)",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), volume, fd,</div><div class='del'>-                          basename,</div><div class='del'>-                          ((cmd == ENTRYLK_LOCK) ? "ENTRYLK_LOCK" :</div><div class='del'>-                           "ENTRYLK_UNLOCK"),</div><div class='del'>-                          ((type == ENTRYLK_RDLCK) ? "ENTRYLK_RDLCK" :</div><div class='del'>-                           "ENTRYLK_WRLCK"));</div><div class='del'>-</div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='del'>-</div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+trace_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+               fd_t *fd, const char *basename, entrylk_cmd cmd,</div><div class='add'>+               entrylk_type type, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        STACK_WIND (frame, trace_fentrylk_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fentrylk,</div><div class='del'>-                    volume, fd, basename, cmd, type, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FENTRYLK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s volume=%s, (fd=%p "</div><div class='add'>+                 "basename=%s, cmd=%s, type=%s)",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), volume, fd,</div><div class='add'>+                 basename,</div><div class='add'>+                 ((cmd == ENTRYLK_LOCK) ? "ENTRYLK_LOCK" : "ENTRYLK_UNLOCK"),</div><div class='add'>+                 ((type == ENTRYLK_RDLCK) ? "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK"));</div><div class='ctx'> </div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    STACK_WIND(frame, trace_fentrylk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fentrylk, volume, fd, basename, cmd,</div><div class='add'>+               type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 const char *name, dict_t *xdata)</div><div class='add'>+trace_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-                goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FGETXATTR].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p name=%s",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, name);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FGETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s fd=%p name=%s",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, name);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fgetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+trace_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSETXATTR].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p flags=%d",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, flags);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSETXATTR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s fd=%p flags=%d",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, flags);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_ftruncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 fd_t *fd, off_t offset, dict_t *xdata)</div><div class='add'>+trace_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FTRUNCATE].enabled) {</div><div class='del'>-                char    string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s offset=%"PRId64" fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), offset, fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FTRUNCATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64 ": gfid=%s offset=%" PRId64 " fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), offset, fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_ftruncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                    fd, offset, xdata);</div><div class='add'>+    STACK_WIND(frame, trace_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+trace_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_FSTAT].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_FSTAT].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "%" PRId64 ": gfid=%s fd=%p",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_fstat_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-trace_lk (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-          int32_t cmd, struct gf_flock *lock, dict_t *xdata)</div><div class='add'>+trace_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+         struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_LK].enabled) {</div><div class='del'>-                char     string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "%"PRId64": gfid=%s fd=%p, cmd=%d, "</div><div class='del'>-                          "lock {l_type=%d, "</div><div class='del'>-                          "l_whence=%d, l_start=%"PRId64", "</div><div class='del'>-                          "l_len=%"PRId64", l_pid=%u})",</div><div class='del'>-                          frame-&gt;root-&gt;unique,</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd, cmd,</div><div class='del'>-                          lock-&gt;l_type, lock-&gt;l_whence,</div><div class='del'>-                          lock-&gt;l_start, lock-&gt;l_len, lock-&gt;l_pid);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_LK].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string),</div><div class='add'>+                 "%" PRId64</div><div class='add'>+                 ": gfid=%s fd=%p, cmd=%d, "</div><div class='add'>+                 "lock {l_type=%d, "</div><div class='add'>+                 "l_whence=%d, l_start=%" PRId64</div><div class='add'>+                 ", "</div><div class='add'>+                 "l_len=%" PRId64 ", l_pid=%u})",</div><div class='add'>+                 frame-&gt;root-&gt;unique, uuid_utoa(fd-&gt;inode-&gt;gfid), fd, cmd,</div><div class='add'>+                 lock-&gt;l_type, lock-&gt;l_whence, lock-&gt;l_start, lock-&gt;l_len,</div><div class='add'>+                 lock-&gt;l_pid);</div><div class='ctx'> </div><div class='del'>-                frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='add'>+        frame-&gt;local = fd-&gt;inode-&gt;gfid;</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, trace_lk_cbk,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lk,</div><div class='del'>-                    fd, cmd, lock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, trace_lk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lk, fd, cmd, lock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+trace_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        /* If user want to understand when a lookup happens,</div><div class='del'>-           he should know about 'forget' too */</div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_LOOKUP].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "gfid=%s", uuid_utoa (inode-&gt;gfid));</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    /* If user want to understand when a lookup happens,</div><div class='add'>+       he should know about 'forget' too */</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_LOOKUP].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "gfid=%s", uuid_utoa(inode-&gt;gfid));</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+trace_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t  *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_OPENDIR].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "gfid=%s fd=%p",</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_OPENDIR].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "gfid=%s fd=%p",</div><div class='add'>+                 uuid_utoa(fd-&gt;inode-&gt;gfid), fd);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_release (xlator_t *this, fd_t *fd)</div><div class='add'>+trace_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        trace_conf_t   *conf = NULL;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='del'>-		goto out;</div><div class='del'>-        if (trace_fop_names[GF_FOP_OPEN].enabled ||</div><div class='del'>-            trace_fop_names[GF_FOP_CREATE].enabled) {</div><div class='del'>-                char   string[4096]  =  {0,};</div><div class='del'>-                snprintf (string, sizeof (string),</div><div class='del'>-                          "gfid=%s fd=%p",</div><div class='del'>-                          uuid_utoa (fd-&gt;inode-&gt;gfid), fd);</div><div class='add'>+    if (!conf-&gt;log_file &amp;&amp; !conf-&gt;log_history)</div><div class='add'>+        goto out;</div><div class='add'>+    if (trace_fop_names[GF_FOP_OPEN].enabled ||</div><div class='add'>+        trace_fop_names[GF_FOP_CREATE].enabled) {</div><div class='add'>+        char string[4096] = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+        snprintf(string, sizeof(string), "gfid=%s fd=%p",</div><div class='add'>+                 uuid_utoa(fd-&gt;inode-&gt;gfid), fd);</div><div class='ctx'> </div><div class='del'>-                LOG_ELEMENT (conf, string);</div><div class='del'>-        }</div><div class='add'>+        LOG_ELEMENT(conf, string);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-enable_all_calls (int enabled)</div><div class='add'>+enable_all_calls(int enabled)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='del'>-                trace_fop_names[i].enabled = enabled;</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='add'>+        trace_fop_names[i].enabled = enabled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-enable_call (const char *name, int enabled)</div><div class='add'>+enable_call(const char *name, int enabled)</div><div class='ctx'> {</div><div class='del'>-        int i;</div><div class='del'>-        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='del'>-                if (!strcasecmp(trace_fop_names[i].name, name))</div><div class='del'>-                        trace_fop_names[i].enabled = enabled;</div><div class='add'>+    int i;</div><div class='add'>+    for (i = 0; i &lt; GF_FOP_MAXVALUE; i++)</div><div class='add'>+        if (!strcasecmp(trace_fop_names[i].name, name))</div><div class='add'>+            trace_fop_names[i].enabled = enabled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>   include = 1 for "include-ops"</div><div class='ctx'>   = 0 for "exclude-ops"</div><div class='ctx'> */</div><div class='ctx'> void</div><div class='del'>-process_call_list (const char *list, int include)</div><div class='add'>+process_call_list(const char *list, int include)</div><div class='ctx'> {</div><div class='del'>-        enable_all_calls (include ? 0 : 1);</div><div class='add'>+    enable_all_calls(include ? 0 : 1);</div><div class='ctx'> </div><div class='del'>-        char *call = strsep ((char **)&amp;list, ",");</div><div class='add'>+    char *call = strsep((char **)&amp;list, ",");</div><div class='ctx'> </div><div class='del'>-        while (call) {</div><div class='del'>-                enable_call (call, include);</div><div class='del'>-                call = strsep ((char **)&amp;list, ",");</div><div class='del'>-        }</div><div class='add'>+    while (call) {</div><div class='add'>+        enable_call(call, include);</div><div class='add'>+        call = strsep((char **)&amp;list, ",");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-trace_dump_history (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char key_prefix[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        trace_conf_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("trace", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;history, out);</div><div class='del'>-</div><div class='del'>-        conf = this-&gt;private;</div><div class='del'>-        // Is it ok to return silently if log-history option his off?</div><div class='del'>-        if (conf &amp;&amp; conf-&gt;log_history == _gf_true) {</div><div class='del'>-                gf_proc_dump_build_key (key_prefix, "xlator.debug.trace",</div><div class='del'>-                                        "history");</div><div class='del'>-                gf_proc_dump_add_section (key_prefix);</div><div class='del'>-                eh_dump (this-&gt;history, NULL, dump_history_trace);</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+trace_dump_history(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("trace", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;history, out);</div><div class='add'>+</div><div class='add'>+    conf = this-&gt;private;</div><div class='add'>+    // Is it ok to return silently if log-history option his off?</div><div class='add'>+    if (conf &amp;&amp; conf-&gt;log_history == _gf_true) {</div><div class='add'>+        gf_proc_dump_build_key(key_prefix, "xlator.debug.trace", "history");</div><div class='add'>+        gf_proc_dump_add_section(key_prefix);</div><div class='add'>+        eh_dump(this-&gt;history, NULL, dump_history_trace);</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_trace_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                        " failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_trace_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               " failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int32_t       ret            = -1;</div><div class='del'>-        trace_conf_t    *conf           = NULL;</div><div class='del'>-        char            *includes = NULL, *excludes = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+    char *includes = NULL, *excludes = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("quick-read", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, options, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("quick-read", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, options, out);</div><div class='ctx'> </div><div class='del'>-        conf = this-&gt;private;</div><div class='add'>+    conf = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        includes = data_to_str (dict_get (options, "include-ops"));</div><div class='del'>-        excludes = data_to_str (dict_get (options, "exclude-ops"));</div><div class='add'>+    includes = data_to_str(dict_get(options, "include-ops"));</div><div class='add'>+    excludes = data_to_str(dict_get(options, "exclude-ops"));</div><div class='ctx'> </div><div class='del'>-        {</div><div class='del'>-                int i;</div><div class='del'>-                for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                        if (gf_fop_list[i])</div><div class='del'>-                                strncpy (trace_fop_names[i].name,</div><div class='del'>-                                         gf_fop_list[i],</div><div class='del'>-                                         sizeof (trace_fop_names[i].name));</div><div class='del'>-                        else</div><div class='del'>-                                strncpy (trace_fop_names[i].name, ":0",</div><div class='del'>-                                         sizeof (trace_fop_names[i].name));</div><div class='del'>-                        trace_fop_names[i].enabled = 1;</div><div class='del'>-                        trace_fop_names[i].name[sizeof (</div><div class='del'>-                                        trace_fop_names[i].name) - 1] = 0;</div><div class='del'>-                }</div><div class='add'>+    {</div><div class='add'>+        int i;</div><div class='add'>+        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+            if (gf_fop_list[i])</div><div class='add'>+                strncpy(trace_fop_names[i].name, gf_fop_list[i],</div><div class='add'>+                        sizeof(trace_fop_names[i].name));</div><div class='add'>+            else</div><div class='add'>+                strncpy(trace_fop_names[i].name, ":0",</div><div class='add'>+                        sizeof(trace_fop_names[i].name));</div><div class='add'>+            trace_fop_names[i].enabled = 1;</div><div class='add'>+            trace_fop_names[i].name[sizeof(trace_fop_names[i].name) - 1] = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (includes &amp;&amp; excludes) {</div><div class='del'>-                gf_log (this-&gt;name,</div><div class='del'>-                        GF_LOG_ERROR,</div><div class='del'>-                        "must specify only one of 'include-ops' and "</div><div class='del'>-                        "'exclude-ops'");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (includes &amp;&amp; excludes) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "must specify only one of 'include-ops' and "</div><div class='add'>+               "'exclude-ops'");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (includes)</div><div class='del'>-                process_call_list (includes, 1);</div><div class='del'>-        if (excludes)</div><div class='del'>-                process_call_list (excludes, 0);</div><div class='add'>+    if (includes)</div><div class='add'>+        process_call_list(includes, 1);</div><div class='add'>+    if (excludes)</div><div class='add'>+        process_call_list(excludes, 0);</div><div class='ctx'> </div><div class='del'>-        /* Should resizing of the event-history be allowed in reconfigure?</div><div class='del'>-         * for which a new event_history might have to be allocated and the</div><div class='del'>-         * older history has to be freed.</div><div class='del'>-         */</div><div class='del'>-        GF_OPTION_RECONF ("log-file", conf-&gt;log_file, options, bool, out);</div><div class='add'>+    /* Should resizing of the event-history be allowed in reconfigure?</div><div class='add'>+     * for which a new event_history might have to be allocated and the</div><div class='add'>+     * older history has to be freed.</div><div class='add'>+     */</div><div class='add'>+    GF_OPTION_RECONF("log-file", conf-&gt;log_file, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("log-history", conf-&gt;log_history, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("log-history", conf-&gt;log_history, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        dict_t *options = NULL;</div><div class='del'>-        char *includes = NULL, *excludes = NULL;</div><div class='del'>-        char *forced_loglevel = NULL;</div><div class='del'>-        eh_t *history = NULL;</div><div class='del'>-        int  ret = -1;</div><div class='del'>-        size_t  history_size = TRACE_DEFAULT_HISTORY_SIZE;</div><div class='del'>-        trace_conf_t    *conf = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "trace translator requires one subvolume");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        conf = GF_CALLOC (1, sizeof (trace_conf_t), gf_trace_mt_trace_conf_t);</div><div class='del'>-        if (!conf) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "cannot allocate "</div><div class='del'>-                        "xl-&gt;private");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        options = this-&gt;options;</div><div class='del'>-        includes = data_to_str (dict_get (options, "include-ops"));</div><div class='del'>-        excludes = data_to_str (dict_get (options, "exclude-ops"));</div><div class='del'>-</div><div class='del'>-        {</div><div class='del'>-                int i;</div><div class='del'>-                for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='del'>-                        if (gf_fop_list[i])</div><div class='del'>-                                strncpy (trace_fop_names[i].name,</div><div class='del'>-                                         gf_fop_list[i],</div><div class='del'>-                                         sizeof (trace_fop_names[i].name));</div><div class='del'>-                        else</div><div class='del'>-                                strncpy (trace_fop_names[i].name, ":O",</div><div class='del'>-                                         sizeof (trace_fop_names[i].name));</div><div class='del'>-                        trace_fop_names[i].enabled = 1;</div><div class='del'>-                        trace_fop_names[i].name[sizeof (</div><div class='del'>-                                        trace_fop_names[i].name) - 1] = 0;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (includes &amp;&amp; excludes) {</div><div class='del'>-                gf_log (this-&gt;name,</div><div class='del'>-                        GF_LOG_ERROR,</div><div class='del'>-                        "must specify only one of 'include-ops' and "</div><div class='del'>-                        "'exclude-ops'");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (includes)</div><div class='del'>-                process_call_list (includes, 1);</div><div class='del'>-        if (excludes)</div><div class='del'>-                process_call_list (excludes, 0);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("history-size", conf-&gt;history_size, size, out);</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "history size %"GF_PRI_SIZET,</div><div class='del'>-                history_size);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-file", conf-&gt;log_file, bool, out);</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "logging to file %s",</div><div class='del'>-                (conf-&gt;log_file == _gf_true)?"enabled":"disabled");</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-history", conf-&gt;log_history, bool, out);</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "logging to history %s",</div><div class='del'>-                (conf-&gt;log_history == _gf_true)?"enabled":"disabled");</div><div class='del'>-</div><div class='del'>-        history = eh_new (history_size, _gf_false, NULL);</div><div class='del'>-        if (!history) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "event history cannot be "</div><div class='del'>-                        "initialized");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this-&gt;history = history;</div><div class='del'>-</div><div class='del'>-        conf-&gt;trace_log_level = GF_LOG_INFO;</div><div class='del'>-</div><div class='del'>-        if (dict_get (options, "force-log-level")) {</div><div class='del'>-                forced_loglevel = data_to_str (dict_get (options,</div><div class='del'>-                                                         "force-log-level"));</div><div class='del'>-                if (!forced_loglevel)</div><div class='del'>-                        goto setloglevel;</div><div class='del'>-</div><div class='del'>-                if (strcmp (forced_loglevel, "INFO") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_INFO;</div><div class='del'>-                else if (strcmp (forced_loglevel, "TRACE") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_TRACE;</div><div class='del'>-                else if (strcmp (forced_loglevel, "ERROR") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_ERROR;</div><div class='del'>-                else if (strcmp (forced_loglevel, "DEBUG") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_DEBUG;</div><div class='del'>-                else if (strcmp (forced_loglevel, "WARNING") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_WARNING;</div><div class='del'>-                else if (strcmp (forced_loglevel, "CRITICAL") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_CRITICAL;</div><div class='del'>-                else if (strcmp (forced_loglevel, "NONE") == 0)</div><div class='del'>-                        conf-&gt;trace_log_level = GF_LOG_NONE;</div><div class='del'>-        }</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    char *includes = NULL, *excludes = NULL;</div><div class='add'>+    char *forced_loglevel = NULL;</div><div class='add'>+    eh_t *history = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t history_size = TRACE_DEFAULT_HISTORY_SIZE;</div><div class='add'>+    trace_conf_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "trace translator requires one subvolume");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    conf = GF_CALLOC(1, sizeof(trace_conf_t), gf_trace_mt_trace_conf_t);</div><div class='add'>+    if (!conf) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "cannot allocate "</div><div class='add'>+               "xl-&gt;private");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    options = this-&gt;options;</div><div class='add'>+    includes = data_to_str(dict_get(options, "include-ops"));</div><div class='add'>+    excludes = data_to_str(dict_get(options, "exclude-ops"));</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+        int i;</div><div class='add'>+        for (i = 0; i &lt; GF_FOP_MAXVALUE; i++) {</div><div class='add'>+            if (gf_fop_list[i])</div><div class='add'>+                strncpy(trace_fop_names[i].name, gf_fop_list[i],</div><div class='add'>+                        sizeof(trace_fop_names[i].name));</div><div class='add'>+            else</div><div class='add'>+                strncpy(trace_fop_names[i].name, ":O",</div><div class='add'>+                        sizeof(trace_fop_names[i].name));</div><div class='add'>+            trace_fop_names[i].enabled = 1;</div><div class='add'>+            trace_fop_names[i].name[sizeof(trace_fop_names[i].name) - 1] = 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (includes &amp;&amp; excludes) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "must specify only one of 'include-ops' and "</div><div class='add'>+               "'exclude-ops'");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (includes)</div><div class='add'>+        process_call_list(includes, 1);</div><div class='add'>+    if (excludes)</div><div class='add'>+        process_call_list(excludes, 0);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("history-size", conf-&gt;history_size, size, out);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "history size %" GF_PRI_SIZET,</div><div class='add'>+           history_size);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-file", conf-&gt;log_file, bool, out);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "logging to file %s",</div><div class='add'>+           (conf-&gt;log_file == _gf_true) ? "enabled" : "disabled");</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-history", conf-&gt;log_history, bool, out);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "logging to history %s",</div><div class='add'>+           (conf-&gt;log_history == _gf_true) ? "enabled" : "disabled");</div><div class='add'>+</div><div class='add'>+    history = eh_new(history_size, _gf_false, NULL);</div><div class='add'>+    if (!history) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "event history cannot be "</div><div class='add'>+               "initialized");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;history = history;</div><div class='add'>+</div><div class='add'>+    conf-&gt;trace_log_level = GF_LOG_INFO;</div><div class='add'>+</div><div class='add'>+    if (dict_get(options, "force-log-level")) {</div><div class='add'>+        forced_loglevel = data_to_str(dict_get(options, "force-log-level"));</div><div class='add'>+        if (!forced_loglevel)</div><div class='add'>+            goto setloglevel;</div><div class='add'>+</div><div class='add'>+        if (strcmp(forced_loglevel, "INFO") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_INFO;</div><div class='add'>+        else if (strcmp(forced_loglevel, "TRACE") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_TRACE;</div><div class='add'>+        else if (strcmp(forced_loglevel, "ERROR") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_ERROR;</div><div class='add'>+        else if (strcmp(forced_loglevel, "DEBUG") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_DEBUG;</div><div class='add'>+        else if (strcmp(forced_loglevel, "WARNING") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_WARNING;</div><div class='add'>+        else if (strcmp(forced_loglevel, "CRITICAL") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_CRITICAL;</div><div class='add'>+        else if (strcmp(forced_loglevel, "NONE") == 0)</div><div class='add'>+            conf-&gt;trace_log_level = GF_LOG_NONE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> setloglevel:</div><div class='del'>-        gf_log_set_loglevel (this-&gt;ctx, conf-&gt;trace_log_level);</div><div class='del'>-        this-&gt;private = conf;</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (history)</div><div class='del'>-                        GF_FREE (history);</div><div class='del'>-                if (conf)</div><div class='del'>-                        GF_FREE (conf);</div><div class='del'>-        }</div><div class='add'>+    gf_log_set_loglevel(this-&gt;ctx, conf-&gt;trace_log_level);</div><div class='add'>+    this-&gt;private = conf;</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (history)</div><div class='add'>+            GF_FREE(history);</div><div class='add'>+        if (conf)</div><div class='add'>+            GF_FREE(conf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (!this)</div><div class='del'>-                return;</div><div class='add'>+    if (!this)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;history)</div><div class='del'>-                eh_destroy (this-&gt;history);</div><div class='add'>+    if (this-&gt;history)</div><div class='add'>+        eh_destroy(this-&gt;history);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "trace translator unloaded");</div><div class='del'>-        return;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "trace translator unloaded");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .stat        = trace_stat,</div><div class='del'>-        .readlink    = trace_readlink,</div><div class='del'>-        .mknod       = trace_mknod,</div><div class='del'>-        .mkdir       = trace_mkdir,</div><div class='del'>-        .unlink      = trace_unlink,</div><div class='del'>-        .rmdir       = trace_rmdir,</div><div class='del'>-        .symlink     = trace_symlink,</div><div class='del'>-        .rename      = trace_rename,</div><div class='del'>-        .link        = trace_link,</div><div class='del'>-        .truncate    = trace_truncate,</div><div class='del'>-        .open        = trace_open,</div><div class='del'>-        .readv       = trace_readv,</div><div class='del'>-        .writev      = trace_writev,</div><div class='del'>-        .statfs      = trace_statfs,</div><div class='del'>-        .flush       = trace_flush,</div><div class='del'>-        .fsync       = trace_fsync,</div><div class='del'>-        .setxattr    = trace_setxattr,</div><div class='del'>-        .getxattr    = trace_getxattr,</div><div class='del'>-        .fsetxattr   = trace_fsetxattr,</div><div class='del'>-        .fgetxattr   = trace_fgetxattr,</div><div class='del'>-        .removexattr = trace_removexattr,</div><div class='del'>-        .opendir     = trace_opendir,</div><div class='del'>-        .readdir     = trace_readdir,</div><div class='del'>-        .readdirp    = trace_readdirp,</div><div class='del'>-        .fsyncdir    = trace_fsyncdir,</div><div class='del'>-        .access      = trace_access,</div><div class='del'>-        .ftruncate   = trace_ftruncate,</div><div class='del'>-        .fstat       = trace_fstat,</div><div class='del'>-        .create      = trace_create,</div><div class='del'>-        .lk          = trace_lk,</div><div class='del'>-        .inodelk     = trace_inodelk,</div><div class='del'>-        .finodelk    = trace_finodelk,</div><div class='del'>-        .entrylk     = trace_entrylk,</div><div class='del'>-        .fentrylk    = trace_fentrylk,</div><div class='del'>-        .lookup      = trace_lookup,</div><div class='del'>-        .rchecksum   = trace_rchecksum,</div><div class='del'>-        .xattrop     = trace_xattrop,</div><div class='del'>-        .fxattrop    = trace_fxattrop,</div><div class='del'>-        .setattr     = trace_setattr,</div><div class='del'>-        .fsetattr    = trace_fsetattr,</div><div class='del'>-        .seek        = trace_seek,</div><div class='add'>+    .stat = trace_stat,</div><div class='add'>+    .readlink = trace_readlink,</div><div class='add'>+    .mknod = trace_mknod,</div><div class='add'>+    .mkdir = trace_mkdir,</div><div class='add'>+    .unlink = trace_unlink,</div><div class='add'>+    .rmdir = trace_rmdir,</div><div class='add'>+    .symlink = trace_symlink,</div><div class='add'>+    .rename = trace_rename,</div><div class='add'>+    .link = trace_link,</div><div class='add'>+    .truncate = trace_truncate,</div><div class='add'>+    .open = trace_open,</div><div class='add'>+    .readv = trace_readv,</div><div class='add'>+    .writev = trace_writev,</div><div class='add'>+    .statfs = trace_statfs,</div><div class='add'>+    .flush = trace_flush,</div><div class='add'>+    .fsync = trace_fsync,</div><div class='add'>+    .setxattr = trace_setxattr,</div><div class='add'>+    .getxattr = trace_getxattr,</div><div class='add'>+    .fsetxattr = trace_fsetxattr,</div><div class='add'>+    .fgetxattr = trace_fgetxattr,</div><div class='add'>+    .removexattr = trace_removexattr,</div><div class='add'>+    .opendir = trace_opendir,</div><div class='add'>+    .readdir = trace_readdir,</div><div class='add'>+    .readdirp = trace_readdirp,</div><div class='add'>+    .fsyncdir = trace_fsyncdir,</div><div class='add'>+    .access = trace_access,</div><div class='add'>+    .ftruncate = trace_ftruncate,</div><div class='add'>+    .fstat = trace_fstat,</div><div class='add'>+    .create = trace_create,</div><div class='add'>+    .lk = trace_lk,</div><div class='add'>+    .inodelk = trace_inodelk,</div><div class='add'>+    .finodelk = trace_finodelk,</div><div class='add'>+    .entrylk = trace_entrylk,</div><div class='add'>+    .fentrylk = trace_fentrylk,</div><div class='add'>+    .lookup = trace_lookup,</div><div class='add'>+    .rchecksum = trace_rchecksum,</div><div class='add'>+    .xattrop = trace_xattrop,</div><div class='add'>+    .fxattrop = trace_fxattrop,</div><div class='add'>+    .setattr = trace_setattr,</div><div class='add'>+    .fsetattr = trace_fsetattr,</div><div class='add'>+    .seek = trace_seek,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .release     = trace_release,</div><div class='del'>-        .releasedir  = trace_releasedir,</div><div class='del'>-        .forget      = trace_forget,</div><div class='add'>+    .release = trace_release,</div><div class='add'>+    .releasedir = trace_releasedir,</div><div class='add'>+    .forget = trace_forget,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"include-ops", "include"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          /*.value = { ""} */</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"exclude-ops", "exclude"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR</div><div class='del'>-          /*.value = { ""} */</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"history-size"},</div><div class='del'>-          .type = GF_OPTION_TYPE_SIZET,</div><div class='del'>-          .default_value = "1024",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"log-file"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"log-history"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {</div><div class='add'>+        .key = {"include-ops", "include"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        /*.value = { ""} */</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"exclude-ops", "exclude"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR</div><div class='add'>+        /*.value = { ""} */</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"history-size"},</div><div class='add'>+        .type = GF_OPTION_TYPE_SIZET,</div><div class='add'>+        .default_value = "1024",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"log-file"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "no",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"log-history"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "no",</div><div class='add'>+    },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_dumpops dumpops = {</div><div class='del'>-        .history = trace_dump_history</div><div class='del'>-};</div><div class='add'>+struct xlator_dumpops dumpops = {.history = trace_dump_history};</div><div class='head'>diff --git a/xlators/encryption/crypt/src/atom.c b/xlators/encryption/crypt/src/atom.c<br/>index fc90892fae8..8e9c4940abd 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/atom.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/encryption/crypt/src/atom.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/atom.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/atom.c</a></div><div class='hunk'>@@ -71,182 +71,182 @@</div><div class='ctx'> /*</div><div class='ctx'>  * atom-&gt;offset_at()</div><div class='ctx'>  */</div><div class='del'>-static off_t offset_at_head(struct avec_config *conf)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_head(struct avec_config *conf)</div><div class='ctx'> {</div><div class='del'>-	return conf-&gt;aligned_offset;</div><div class='add'>+    return conf-&gt;aligned_offset;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static off_t offset_at_hole_head(call_frame_t *frame,</div><div class='del'>-					 struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_hole_head(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_at_head(get_hole_conf(frame));</div><div class='add'>+    return offset_at_head(get_hole_conf(frame));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static off_t offset_at_data_head(call_frame_t *frame,</div><div class='del'>-					 struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_data_head(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_at_head(get_data_conf(frame));</div><div class='add'>+    return offset_at_head(get_data_conf(frame));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-static off_t offset_at_tail(struct avec_config *conf,</div><div class='del'>-				    struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_tail(struct avec_config *conf, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return conf-&gt;aligned_offset +</div><div class='del'>-		(conf-&gt;off_in_head ? get_atom_size(object) : 0) +</div><div class='del'>-		(conf-&gt;nr_full_blocks &lt;&lt; get_atom_bits(object));</div><div class='add'>+    return conf-&gt;aligned_offset +</div><div class='add'>+           (conf-&gt;off_in_head ? get_atom_size(object) : 0) +</div><div class='add'>+           (conf-&gt;nr_full_blocks &lt;&lt; get_atom_bits(object));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static off_t offset_at_hole_tail(call_frame_t *frame,</div><div class='del'>-					 struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_hole_tail(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_at_tail(get_hole_conf(frame), object);</div><div class='add'>+    return offset_at_tail(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-static off_t offset_at_data_tail(call_frame_t *frame,</div><div class='del'>-					 struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_data_tail(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_at_tail(get_data_conf(frame), object);</div><div class='add'>+    return offset_at_tail(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static off_t offset_at_full(struct avec_config *conf,</div><div class='del'>-				    struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_full(struct avec_config *conf, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return conf-&gt;aligned_offset +</div><div class='del'>-		(conf-&gt;off_in_head ? get_atom_size(object) : 0);</div><div class='add'>+    return conf-&gt;aligned_offset +</div><div class='add'>+           (conf-&gt;off_in_head ? get_atom_size(object) : 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static off_t offset_at_data_full(call_frame_t *frame,</div><div class='del'>-					 struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_data_full(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_at_full(get_data_conf(frame), object);</div><div class='add'>+    return offset_at_full(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static off_t offset_at_hole_full(call_frame_t *frame,</div><div class='del'>-					 struct object_cipher_info *object)</div><div class='add'>+static off_t</div><div class='add'>+offset_at_hole_full(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_at_full(get_hole_conf(frame), object);</div><div class='add'>+    return offset_at_full(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * atom-&gt;io_size_nopad()</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_head(struct avec_config *conf,</div><div class='del'>-				   struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_head(struct avec_config *conf, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	uint32_t gap_at_beg;</div><div class='del'>-	uint32_t gap_at_end;</div><div class='add'>+    uint32_t gap_at_beg;</div><div class='add'>+    uint32_t gap_at_end;</div><div class='ctx'> </div><div class='del'>-	check_head_block(conf);</div><div class='add'>+    check_head_block(conf);</div><div class='ctx'> </div><div class='del'>-	gap_at_beg = conf-&gt;off_in_head;</div><div class='add'>+    gap_at_beg = conf-&gt;off_in_head;</div><div class='ctx'> </div><div class='del'>-	if (has_tail_block(conf) || has_full_blocks(conf) || conf-&gt;off_in_tail == 0 )</div><div class='del'>-		gap_at_end = 0;</div><div class='del'>-	else</div><div class='del'>-		gap_at_end = get_atom_size(object) - conf-&gt;off_in_tail;</div><div class='add'>+    if (has_tail_block(conf) || has_full_blocks(conf) || conf-&gt;off_in_tail == 0)</div><div class='add'>+        gap_at_end = 0;</div><div class='add'>+    else</div><div class='add'>+        gap_at_end = get_atom_size(object) - conf-&gt;off_in_tail;</div><div class='ctx'> </div><div class='del'>-	return get_atom_size(object) - (gap_at_beg + gap_at_end);</div><div class='add'>+    return get_atom_size(object) - (gap_at_beg + gap_at_end);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_tail(struct avec_config *conf,</div><div class='del'>-				   struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_tail(struct avec_config *conf, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	check_tail_block(conf);</div><div class='del'>-	return conf-&gt;off_in_tail;</div><div class='add'>+    check_tail_block(conf);</div><div class='add'>+    return conf-&gt;off_in_tail;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_full(struct avec_config *conf,</div><div class='del'>-				   struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_full(struct avec_config *conf, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	check_full_block(conf);</div><div class='del'>-	return get_atom_size(object);</div><div class='add'>+    check_full_block(conf);</div><div class='add'>+    return get_atom_size(object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_data_head(call_frame_t *frame,</div><div class='del'>-					struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_data_head(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return io_size_nopad_head(get_data_conf(frame), object);</div><div class='add'>+    return io_size_nopad_head(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_hole_head(call_frame_t *frame,</div><div class='del'>-					struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_hole_head(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return io_size_nopad_head(get_hole_conf(frame), object);</div><div class='add'>+    return io_size_nopad_head(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_data_tail(call_frame_t *frame,</div><div class='del'>-					struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_data_tail(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return io_size_nopad_tail(get_data_conf(frame), object);</div><div class='add'>+    return io_size_nopad_tail(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_hole_tail(call_frame_t *frame,</div><div class='del'>-					struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_hole_tail(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return io_size_nopad_tail(get_hole_conf(frame), object);</div><div class='add'>+    return io_size_nopad_tail(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_data_full(call_frame_t *frame,</div><div class='del'>-					struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_data_full(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return io_size_nopad_full(get_data_conf(frame), object);</div><div class='add'>+    return io_size_nopad_full(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t io_size_nopad_hole_full(call_frame_t *frame,</div><div class='del'>-					struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+io_size_nopad_hole_full(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return io_size_nopad_full(get_hole_conf(frame), object);</div><div class='add'>+    return io_size_nopad_full(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_head(struct avec_config *conf)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_head(struct avec_config *conf)</div><div class='ctx'> {</div><div class='del'>-	check_cursor_head(conf);</div><div class='add'>+    check_cursor_head(conf);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;off_in_head;</div><div class='add'>+    return conf-&gt;off_in_head;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_tail(call_frame_t *frame,</div><div class='del'>-			       struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_tail(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_full(struct avec_config *conf,</div><div class='del'>-			       struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_full(struct avec_config *conf, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	check_cursor_full(conf);</div><div class='add'>+    check_cursor_full(conf);</div><div class='ctx'> </div><div class='del'>-	if (has_head_block(conf))</div><div class='del'>-		return (conf-&gt;cursor - 1) &lt;&lt; get_atom_bits(object);</div><div class='del'>-	else</div><div class='del'>-		return conf-&gt;cursor &lt;&lt; get_atom_bits(object);</div><div class='add'>+    if (has_head_block(conf))</div><div class='add'>+        return (conf-&gt;cursor - 1) &lt;&lt; get_atom_bits(object);</div><div class='add'>+    else</div><div class='add'>+        return conf-&gt;cursor &lt;&lt; get_atom_bits(object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_data_head(call_frame_t *frame,</div><div class='del'>-				    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_data_head(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_in_head(get_data_conf(frame));</div><div class='add'>+    return offset_in_head(get_data_conf(frame));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_hole_head(call_frame_t *frame,</div><div class='del'>-				    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_hole_head(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_in_head(get_hole_conf(frame));</div><div class='add'>+    return offset_in_head(get_hole_conf(frame));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_data_full(call_frame_t *frame,</div><div class='del'>-				    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_data_full(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_in_full(get_data_conf(frame), object);</div><div class='add'>+    return offset_in_full(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t offset_in_hole_full(call_frame_t *frame,</div><div class='del'>-				    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+offset_in_hole_full(call_frame_t *frame, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return offset_in_full(get_hole_conf(frame), object);</div><div class='add'>+    return offset_in_full(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -261,94 +261,88 @@ static uint32_t offset_in_hole_full(call_frame_t *frame,</div><div class='ctx'>  * this plain text, encrypt the whole block</div><div class='ctx'>  * and write the result to disk.</div><div class='ctx'>  */</div><div class='del'>-static int32_t rmw_partial_block(call_frame_t *frame,</div><div class='del'>-				 void *cookie,</div><div class='del'>-				 xlator_t *this,</div><div class='del'>-				 int32_t op_ret,</div><div class='del'>-				 int32_t op_errno,</div><div class='del'>-				 struct iovec *vec,</div><div class='del'>-				 int32_t count,</div><div class='del'>-				 struct iatt *stbuf,</div><div class='del'>-				 struct iobref *iobref,</div><div class='del'>-				 struct rmw_atom *atom)</div><div class='del'>-{</div><div class='del'>-	size_t was_read = 0;</div><div class='del'>-	uint64_t file_size;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	struct iovec *partial = atom-&gt;get_iovec(frame, 0);</div><div class='del'>-	struct avec_config *conf = atom-&gt;get_config(frame);</div><div class='del'>-	end_writeback_handler_t end_writeback_partial_block;</div><div class='add'>+static int32_t</div><div class='add'>+rmw_partial_block(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iovec *vec,</div><div class='add'>+                  int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                  struct rmw_atom *atom)</div><div class='add'>+{</div><div class='add'>+    size_t was_read = 0;</div><div class='add'>+    uint64_t file_size;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    struct iovec *partial = atom-&gt;get_iovec(frame, 0);</div><div class='add'>+    struct avec_config *conf = atom-&gt;get_config(frame);</div><div class='add'>+    end_writeback_handler_t end_writeback_partial_block;</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	gf_boolean_t check_last_cblock = _gf_false;</div><div class='add'>+    gf_boolean_t check_last_cblock = _gf_false;</div><div class='ctx'> #endif</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto exit;</div><div class='del'>-</div><div class='del'>-	file_size = local-&gt;cur_file_size;</div><div class='del'>-	was_read = op_ret;</div><div class='del'>-</div><div class='del'>-	if (atom-&gt;locality == HEAD_ATOM &amp;&amp; conf-&gt;off_in_head) {</div><div class='del'>-		/*</div><div class='del'>-		 * head atom with a non-uptodate gap</div><div class='del'>-		 * at the beginning</div><div class='del'>-		 *</div><div class='del'>-		 * fill the gap with plain text of the</div><div class='del'>-		 * latest version. Convert a part of hole</div><div class='del'>-		 * (if any) to zeros.</div><div class='del'>-		 */</div><div class='del'>-		int32_t i;</div><div class='del'>-		int32_t copied = 0;</div><div class='del'>-		int32_t to_gap; /* amount of data needed to uptodate</div><div class='del'>-				   the gap at the beginning */</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto exit;</div><div class='add'>+</div><div class='add'>+    file_size = local-&gt;cur_file_size;</div><div class='add'>+    was_read = op_ret;</div><div class='add'>+</div><div class='add'>+    if (atom-&gt;locality == HEAD_ATOM &amp;&amp; conf-&gt;off_in_head) {</div><div class='add'>+        /*</div><div class='add'>+         * head atom with a non-uptodate gap</div><div class='add'>+         * at the beginning</div><div class='add'>+         *</div><div class='add'>+         * fill the gap with plain text of the</div><div class='add'>+         * latest version. Convert a part of hole</div><div class='add'>+         * (if any) to zeros.</div><div class='add'>+         */</div><div class='add'>+        int32_t i;</div><div class='add'>+        int32_t copied = 0;</div><div class='add'>+        int32_t to_gap; /* amount of data needed to uptodate</div><div class='add'>+                           the gap at the beginning */</div><div class='ctx'> #if 0</div><div class='ctx'> 		int32_t hole = 0; /* The part of the hole which</div><div class='ctx'> 				   * got in the head block */</div><div class='ctx'> #endif /* 0 */</div><div class='del'>-		to_gap = conf-&gt;off_in_head;</div><div class='del'>-</div><div class='del'>-		if (was_read &lt; to_gap) {</div><div class='del'>-			if (file_size &gt;</div><div class='del'>-			    offset_at_head(conf) + was_read) {</div><div class='del'>-				/*</div><div class='del'>-				 * It is impossible to uptodate</div><div class='del'>-				 * head block: too few bytes have</div><div class='del'>-				 * been read from disk, so that</div><div class='del'>-				 * partial write is impossible.</div><div class='del'>-				 *</div><div class='del'>-				 * It could happen because of many</div><div class='del'>-				 * reasons: IO errors, (meta)data</div><div class='del'>-				 * corruption in the local file system,</div><div class='del'>-				 * etc.</div><div class='del'>-				 */</div><div class='del'>-				gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-				     "Can not uptodate a gap at the beginning");</div><div class='del'>-				local-&gt;op_ret = -1;</div><div class='del'>-				local-&gt;op_errno = EIO;</div><div class='del'>-				goto exit;</div><div class='del'>-			}</div><div class='add'>+        to_gap = conf-&gt;off_in_head;</div><div class='add'>+</div><div class='add'>+        if (was_read &lt; to_gap) {</div><div class='add'>+            if (file_size &gt; offset_at_head(conf) + was_read) {</div><div class='add'>+                /*</div><div class='add'>+                 * It is impossible to uptodate</div><div class='add'>+                 * head block: too few bytes have</div><div class='add'>+                 * been read from disk, so that</div><div class='add'>+                 * partial write is impossible.</div><div class='add'>+                 *</div><div class='add'>+                 * It could happen because of many</div><div class='add'>+                 * reasons: IO errors, (meta)data</div><div class='add'>+                 * corruption in the local file system,</div><div class='add'>+                 * etc.</div><div class='add'>+                 */</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Can not uptodate a gap at the beginning");</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = EIO;</div><div class='add'>+                goto exit;</div><div class='add'>+            }</div><div class='ctx'> #if 0</div><div class='ctx'> 			hole = to_gap - was_read;</div><div class='ctx'> #endif /* 0 */</div><div class='del'>-			to_gap = was_read;</div><div class='del'>-		}</div><div class='del'>-		/*</div><div class='del'>-		 * uptodate the gap at the beginning</div><div class='del'>-		 */</div><div class='del'>-		for (i = 0; i &lt; count &amp;&amp; copied &lt; to_gap; i++) {</div><div class='del'>-			int32_t to_copy;</div><div class='del'>-</div><div class='del'>-			to_copy = vec[i].iov_len;</div><div class='del'>-			if (to_copy &gt; to_gap - copied)</div><div class='del'>-				to_copy = to_gap - copied;</div><div class='del'>-</div><div class='del'>-			memcpy(partial-&gt;iov_base, vec[i].iov_base, to_copy);</div><div class='del'>-			copied += to_copy;</div><div class='del'>-		}</div><div class='add'>+            to_gap = was_read;</div><div class='add'>+        }</div><div class='add'>+        /*</div><div class='add'>+         * uptodate the gap at the beginning</div><div class='add'>+         */</div><div class='add'>+        for (i = 0; i &lt; count &amp;&amp; copied &lt; to_gap; i++) {</div><div class='add'>+            int32_t to_copy;</div><div class='add'>+</div><div class='add'>+            to_copy = vec[i].iov_len;</div><div class='add'>+            if (to_copy &gt; to_gap - copied)</div><div class='add'>+                to_copy = to_gap - copied;</div><div class='add'>+</div><div class='add'>+            memcpy(partial-&gt;iov_base, vec[i].iov_base, to_copy);</div><div class='add'>+            copied += to_copy;</div><div class='add'>+        }</div><div class='ctx'> #if 0</div><div class='ctx'> 		/*</div><div class='ctx'> 		 * If possible, convert part of the</div><div class='hunk'>@@ -386,146 +380,128 @@ static int32_t rmw_partial_block(call_frame_t *frame,</div><div class='ctx'> 		      */</div><div class='ctx'> 			;</div><div class='ctx'> #endif /* 0 */</div><div class='del'>-	}</div><div class='del'>-	if (atom-&gt;locality == TAIL_ATOM ||</div><div class='del'>-	    (!has_tail_block(conf) &amp;&amp; conf-&gt;off_in_tail)) {</div><div class='del'>-		/*</div><div class='del'>-		 * tail atom, or head atom with a non-uptodate</div><div class='del'>-		 * gap at the end.</div><div class='del'>-		 *</div><div class='del'>-		 * fill the gap at the end of the block</div><div class='del'>-		 * with plain text of the latest version.</div><div class='del'>-		 * Pad the result, (if needed)</div><div class='del'>-		 */</div><div class='del'>-		int32_t i;</div><div class='del'>-		int32_t to_gap;</div><div class='del'>-		int copied;</div><div class='del'>-		off_t off_in_tail;</div><div class='del'>-		int32_t to_copy;</div><div class='del'>-</div><div class='del'>-		off_in_tail = conf-&gt;off_in_tail;</div><div class='del'>-		to_gap = conf-&gt;gap_in_tail;</div><div class='del'>-</div><div class='del'>-		if (to_gap &amp;&amp; was_read &lt; off_in_tail + to_gap) {</div><div class='del'>-			/*</div><div class='del'>-			 * It is impossible to uptodate</div><div class='del'>-			 * the gap at the end: too few bytes</div><div class='del'>-			 * have been read from disk, so that</div><div class='del'>-			 * partial write is impossible.</div><div class='del'>-			 *</div><div class='del'>-			 * It could happen because of many</div><div class='del'>-			 * reasons: IO errors, (meta)data</div><div class='del'>-			 * corruption in the local file system,</div><div class='del'>-			 * etc.</div><div class='del'>-			 */</div><div class='del'>-			gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			       "Can not uptodate a gap at the end");</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = EIO;</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-		/*</div><div class='del'>-		 * uptodate the gap at the end</div><div class='del'>-		 */</div><div class='del'>-		copied = 0;</div><div class='del'>-		to_copy = to_gap;</div><div class='del'>-		for(i = count - 1; i &gt;= 0 &amp;&amp; to_copy &gt; 0; i--) {</div><div class='del'>-			uint32_t from_vec, off_in_vec;</div><div class='del'>-</div><div class='del'>-			off_in_vec = 0;</div><div class='del'>-			from_vec = vec[i].iov_len;</div><div class='del'>-			if (from_vec &gt; to_copy) {</div><div class='del'>-				off_in_vec = from_vec - to_copy;</div><div class='del'>-				from_vec = to_copy;</div><div class='del'>-			}</div><div class='del'>-			memcpy(partial-&gt;iov_base +</div><div class='del'>-			       off_in_tail + to_gap - copied - from_vec,</div><div class='del'>-			       vec[i].iov_base + off_in_vec,</div><div class='del'>-			       from_vec);</div><div class='del'>-</div><div class='del'>-			gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-			       "uptodate %d bytes at tail. Offset at target(source): %d(%d)",</div><div class='del'>-			       (int)from_vec,</div><div class='del'>-			       (int)off_in_tail + to_gap - copied - from_vec,</div><div class='del'>-			       (int)off_in_vec);</div><div class='del'>-</div><div class='del'>-			copied += from_vec;</div><div class='del'>-			to_copy -= from_vec;</div><div class='del'>-		}</div><div class='del'>-		partial-&gt;iov_len = off_in_tail + to_gap;</div><div class='del'>-</div><div class='del'>-		if (object_alg_should_pad(object)) {</div><div class='del'>-			int32_t resid = 0;</div><div class='del'>-			resid = partial-&gt;iov_len &amp; (object_alg_blksize(object) - 1);</div><div class='del'>-			if (resid) {</div><div class='del'>-				/*</div><div class='del'>-				 * append a new EOF padding</div><div class='del'>-				 */</div><div class='del'>-				local-&gt;eof_padding_size =</div><div class='del'>-					object_alg_blksize(object) - resid;</div><div class='del'>-</div><div class='del'>-				gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-				       "set padding size %d",</div><div class='del'>-				       local-&gt;eof_padding_size);</div><div class='del'>-</div><div class='del'>-				memset(partial-&gt;iov_base + partial-&gt;iov_len,</div><div class='del'>-				       1,</div><div class='del'>-				       local-&gt;eof_padding_size);</div><div class='del'>-				partial-&gt;iov_len += local-&gt;eof_padding_size;</div><div class='add'>+    }</div><div class='add'>+    if (atom-&gt;locality == TAIL_ATOM ||</div><div class='add'>+        (!has_tail_block(conf) &amp;&amp; conf-&gt;off_in_tail)) {</div><div class='add'>+        /*</div><div class='add'>+         * tail atom, or head atom with a non-uptodate</div><div class='add'>+         * gap at the end.</div><div class='add'>+         *</div><div class='add'>+         * fill the gap at the end of the block</div><div class='add'>+         * with plain text of the latest version.</div><div class='add'>+         * Pad the result, (if needed)</div><div class='add'>+         */</div><div class='add'>+        int32_t i;</div><div class='add'>+        int32_t to_gap;</div><div class='add'>+        int copied;</div><div class='add'>+        off_t off_in_tail;</div><div class='add'>+        int32_t to_copy;</div><div class='add'>+</div><div class='add'>+        off_in_tail = conf-&gt;off_in_tail;</div><div class='add'>+        to_gap = conf-&gt;gap_in_tail;</div><div class='add'>+</div><div class='add'>+        if (to_gap &amp;&amp; was_read &lt; off_in_tail + to_gap) {</div><div class='add'>+            /*</div><div class='add'>+             * It is impossible to uptodate</div><div class='add'>+             * the gap at the end: too few bytes</div><div class='add'>+             * have been read from disk, so that</div><div class='add'>+             * partial write is impossible.</div><div class='add'>+             *</div><div class='add'>+             * It could happen because of many</div><div class='add'>+             * reasons: IO errors, (meta)data</div><div class='add'>+             * corruption in the local file system,</div><div class='add'>+             * etc.</div><div class='add'>+             */</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Can not uptodate a gap at the end");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EIO;</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+        /*</div><div class='add'>+         * uptodate the gap at the end</div><div class='add'>+         */</div><div class='add'>+        copied = 0;</div><div class='add'>+        to_copy = to_gap;</div><div class='add'>+        for (i = count - 1; i &gt;= 0 &amp;&amp; to_copy &gt; 0; i--) {</div><div class='add'>+            uint32_t from_vec, off_in_vec;</div><div class='add'>+</div><div class='add'>+            off_in_vec = 0;</div><div class='add'>+            from_vec = vec[i].iov_len;</div><div class='add'>+            if (from_vec &gt; to_copy) {</div><div class='add'>+                off_in_vec = from_vec - to_copy;</div><div class='add'>+                from_vec = to_copy;</div><div class='add'>+            }</div><div class='add'>+            memcpy(partial-&gt;iov_base + off_in_tail + to_gap - copied - from_vec,</div><div class='add'>+                   vec[i].iov_base + off_in_vec, from_vec);</div><div class='add'>+</div><div class='add'>+            gf_log(</div><div class='add'>+                this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                "uptodate %d bytes at tail. Offset at target(source): %d(%d)",</div><div class='add'>+                (int)from_vec, (int)off_in_tail + to_gap - copied - from_vec,</div><div class='add'>+                (int)off_in_vec);</div><div class='add'>+</div><div class='add'>+            copied += from_vec;</div><div class='add'>+            to_copy -= from_vec;</div><div class='add'>+        }</div><div class='add'>+        partial-&gt;iov_len = off_in_tail + to_gap;</div><div class='add'>+</div><div class='add'>+        if (object_alg_should_pad(object)) {</div><div class='add'>+            int32_t resid = 0;</div><div class='add'>+            resid = partial-&gt;iov_len &amp; (object_alg_blksize(object) - 1);</div><div class='add'>+            if (resid) {</div><div class='add'>+                /*</div><div class='add'>+                 * append a new EOF padding</div><div class='add'>+                 */</div><div class='add'>+                local-&gt;eof_padding_size = object_alg_blksize(object) - resid;</div><div class='add'>+</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "set padding size %d",</div><div class='add'>+                       local-&gt;eof_padding_size);</div><div class='add'>+</div><div class='add'>+                memset(partial-&gt;iov_base + partial-&gt;iov_len, 1,</div><div class='add'>+                       local-&gt;eof_padding_size);</div><div class='add'>+                partial-&gt;iov_len += local-&gt;eof_padding_size;</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-				gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-				       "pad cblock with %d zeros:",</div><div class='del'>-				       local-&gt;eof_padding_size);</div><div class='del'>-				dump_cblock(this,</div><div class='del'>-					    (unsigned char *)partial-&gt;iov_base +</div><div class='del'>-					    partial-&gt;iov_len - object_alg_blksize(object));</div><div class='del'>-				check_last_cblock = _gf_true;</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                       "pad cblock with %d zeros:", local-&gt;eof_padding_size);</div><div class='add'>+                dump_cblock(this, (unsigned char *)partial-&gt;iov_base +</div><div class='add'>+                                      partial-&gt;iov_len -</div><div class='add'>+                                      object_alg_blksize(object));</div><div class='add'>+                check_last_cblock = _gf_true;</div><div class='ctx'> #endif</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * encrypt the whole block</div><div class='del'>-	 */</div><div class='del'>-	encrypt_aligned_iov(object,</div><div class='del'>-			    partial,</div><div class='del'>-			    1,</div><div class='del'>-			    atom-&gt;offset_at(frame, object));</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * encrypt the whole block</div><div class='add'>+     */</div><div class='add'>+    encrypt_aligned_iov(object, partial, 1, atom-&gt;offset_at(frame, object));</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	if (check_last_cblock == _gf_true) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-		       "encrypt last cblock with offset %llu",</div><div class='del'>-		       (unsigned long long)atom-&gt;offset_at(frame, object));</div><div class='del'>-		dump_cblock(this, (unsigned char *)partial-&gt;iov_base +</div><div class='del'>-			    partial-&gt;iov_len - object_alg_blksize(object));</div><div class='del'>-	}</div><div class='add'>+    if (check_last_cblock == _gf_true) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "encrypt last cblock with offset %llu",</div><div class='add'>+               (unsigned long long)atom-&gt;offset_at(frame, object));</div><div class='add'>+        dump_cblock(this, (unsigned char *)partial-&gt;iov_base +</div><div class='add'>+                              partial-&gt;iov_len - object_alg_blksize(object));</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='del'>-	set_local_io_params_writev(frame, object, atom,</div><div class='del'>-				   atom-&gt;offset_at(frame, object),</div><div class='del'>-				   iov_length(partial, 1));</div><div class='del'>-	/*</div><div class='del'>-	 * write the whole block to disk</div><div class='del'>-	 */</div><div class='del'>-	end_writeback_partial_block = dispatch_end_writeback(local-&gt;fop);</div><div class='del'>-	conf-&gt;cursor ++;</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   end_writeback_partial_block,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   partial,</div><div class='del'>-		   1,</div><div class='del'>-		   atom-&gt;offset_at(frame, object),</div><div class='del'>-		   local-&gt;flags,</div><div class='del'>-		   local-&gt;iobref_data,</div><div class='del'>-		   local-&gt;xdata);</div><div class='del'>-</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "submit partial block: %d bytes from %d offset",</div><div class='del'>-	       (int)iov_length(partial, 1),</div><div class='del'>-	       (int)atom-&gt;offset_at(frame, object));</div><div class='del'>- exit:</div><div class='del'>-	return 0;</div><div class='add'>+    set_local_io_params_writev(frame, object, atom,</div><div class='add'>+                               atom-&gt;offset_at(frame, object),</div><div class='add'>+                               iov_length(partial, 1));</div><div class='add'>+    /*</div><div class='add'>+     * write the whole block to disk</div><div class='add'>+     */</div><div class='add'>+    end_writeback_partial_block = dispatch_end_writeback(local-&gt;fop);</div><div class='add'>+    conf-&gt;cursor++;</div><div class='add'>+    STACK_WIND(frame, end_writeback_partial_block, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, local-&gt;fd, partial, 1,</div><div class='add'>+               atom-&gt;offset_at(frame, object), local-&gt;flags, local-&gt;iobref_data,</div><div class='add'>+               local-&gt;xdata);</div><div class='add'>+</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+           "submit partial block: %d bytes from %d offset",</div><div class='add'>+           (int)iov_length(partial, 1), (int)atom-&gt;offset_at(frame, object));</div><div class='add'>+exit:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -534,415 +510,343 @@ static int32_t rmw_partial_block(call_frame_t *frame,</div><div class='ctx'>  * of upper server-side manager, i.e. the caller</div><div class='ctx'>  * needs to make sure this is his turn to rmw.</div><div class='ctx'>  */</div><div class='del'>-void submit_partial(call_frame_t *frame,</div><div class='del'>-		    xlator_t *this,</div><div class='del'>-		    fd_t *fd,</div><div class='del'>-		    atom_locality_type ltype)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	dict_t *dict;</div><div class='del'>-	struct rmw_atom *atom;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	atom = atom_by_types(local-&gt;active_setup, ltype);</div><div class='del'>-	/*</div><div class='del'>-	 * To perform the "read" component of the read-modify-write</div><div class='del'>-	 * sequence the crypt translator does stack_wind to itself.</div><div class='del'>-	 *</div><div class='del'>-	 * Pass current file size to crypt_readv()</div><div class='del'>-	 */</div><div class='del'>-	dict = dict_new();</div><div class='del'>-	if (!dict) {</div><div class='del'>-		/*</div><div class='del'>-		 * FIXME: Handle the error</div><div class='del'>-		 */</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Can not alloc dict");</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	ret = dict_set(dict,</div><div class='del'>-		       FSIZE_XATTR_PREFIX,</div><div class='del'>-		       data_from_uint64(local-&gt;cur_file_size));</div><div class='del'>-	if (ret) {</div><div class='del'>-		/*</div><div class='del'>-		 * FIXME: Handle the error</div><div class='del'>-		 */</div><div class='del'>-		dict_unref(dict);</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Can not set dict");</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   atom-&gt;rmw,</div><div class='del'>-		   this,</div><div class='del'>-		   this-&gt;fops-&gt;readv, /* crypt_readv */</div><div class='del'>-		   fd,</div><div class='del'>-		   atom-&gt;count_to_uptodate(frame, object), /* count */</div><div class='del'>-		   atom-&gt;offset_at(frame, object), /* offset to read from */</div><div class='del'>-		   0,</div><div class='del'>-		   dict);</div><div class='del'>- exit:</div><div class='del'>-	dict_unref(dict);</div><div class='add'>+void</div><div class='add'>+submit_partial(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               atom_locality_type ltype)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    dict_t *dict;</div><div class='add'>+    struct rmw_atom *atom;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    atom = atom_by_types(local-&gt;active_setup, ltype);</div><div class='add'>+    /*</div><div class='add'>+     * To perform the "read" component of the read-modify-write</div><div class='add'>+     * sequence the crypt translator does stack_wind to itself.</div><div class='add'>+     *</div><div class='add'>+     * Pass current file size to crypt_readv()</div><div class='add'>+     */</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        /*</div><div class='add'>+         * FIXME: Handle the error</div><div class='add'>+         */</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Can not alloc dict");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(dict, FSIZE_XATTR_PREFIX,</div><div class='add'>+                   data_from_uint64(local-&gt;cur_file_size));</div><div class='add'>+    if (ret) {</div><div class='add'>+        /*</div><div class='add'>+         * FIXME: Handle the error</div><div class='add'>+         */</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Can not set dict");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, atom-&gt;rmw, this, this-&gt;fops-&gt;readv,  /* crypt_readv */</div><div class='add'>+               fd, atom-&gt;count_to_uptodate(frame, object), /* count */</div><div class='add'>+               atom-&gt;offset_at(frame, object), /* offset to read from */</div><div class='add'>+               0, dict);</div><div class='add'>+exit:</div><div class='add'>+    dict_unref(dict);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * submit blocks of FULL_ATOM type</div><div class='ctx'>  */</div><div class='del'>-void submit_full(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-	struct rmw_atom *atom = atom_by_types(local-&gt;active_setup, FULL_ATOM);</div><div class='del'>-	uint32_t count; /* total number of full blocks to submit */</div><div class='del'>-	uint32_t granularity; /* number of blocks to submit in one iteration */</div><div class='del'>-</div><div class='del'>-	uint64_t off_in_file; /* start offset in the file, bytes */</div><div class='del'>-	uint32_t off_in_atom; /* start offset in the atom, blocks */</div><div class='del'>-	uint32_t blocks_written = 0; /* blocks written for this submit */</div><div class='del'>-</div><div class='del'>-	struct avec_config *conf = atom-&gt;get_config(frame);</div><div class='del'>-	end_writeback_handler_t end_writeback_full_block;</div><div class='del'>-	/*</div><div class='del'>-	 * Write full blocks by groups of granularity size.</div><div class='del'>-	 */</div><div class='del'>-	end_writeback_full_block = dispatch_end_writeback(local-&gt;fop);</div><div class='del'>-</div><div class='del'>-	if (is_ordered_mode(frame)) {</div><div class='del'>-		uint32_t skip = has_head_block(conf) ? 1 : 0;</div><div class='del'>-		count = 1;</div><div class='del'>-		granularity = 1;</div><div class='del'>-		/*</div><div class='del'>-		 * calculate start offset using cursor value;</div><div class='del'>-		 * here we should take into account head block,</div><div class='del'>-		 * which corresponds to cursor value 0.</div><div class='del'>-		 */</div><div class='del'>-		off_in_file = atom-&gt;offset_at(frame, object) +</div><div class='del'>-			((conf-&gt;cursor - skip) &lt;&lt; get_atom_bits(object));</div><div class='del'>-		off_in_atom = conf-&gt;cursor - skip;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-		/*</div><div class='del'>-		 * in parallel mode</div><div class='del'>-		 */</div><div class='del'>-		count = conf-&gt;nr_full_blocks;</div><div class='del'>-		granularity = MAX_IOVEC;</div><div class='del'>-		off_in_file = atom-&gt;offset_at(frame, object);</div><div class='del'>-		off_in_atom = 0;</div><div class='del'>-	}</div><div class='del'>-	while (count) {</div><div class='del'>-		uint32_t blocks_to_write = count;</div><div class='del'>-</div><div class='del'>-		if (blocks_to_write &gt; granularity)</div><div class='del'>-			blocks_to_write = granularity;</div><div class='del'>-		if (conf-&gt;type == HOLE_ATOM)</div><div class='del'>-			/*</div><div class='del'>-			 * reset iovec before encryption</div><div class='del'>-			 */</div><div class='del'>-			memset(atom-&gt;get_iovec(frame, 0)-&gt;iov_base,</div><div class='del'>-			       0,</div><div class='del'>-			       get_atom_size(object));</div><div class='del'>-		/*</div><div class='del'>-		 * encrypt the group</div><div class='del'>-		 */</div><div class='del'>-		encrypt_aligned_iov(object,</div><div class='del'>-				    atom-&gt;get_iovec(frame,</div><div class='del'>-						    off_in_atom +</div><div class='del'>-						    blocks_written),</div><div class='del'>-				    blocks_to_write,</div><div class='del'>-				    off_in_file + (blocks_written &lt;&lt;</div><div class='del'>-						   get_atom_bits(object)));</div><div class='del'>-</div><div class='del'>-		set_local_io_params_writev(frame, object, atom,</div><div class='del'>-		        off_in_file + (blocks_written &lt;&lt; get_atom_bits(object)),</div><div class='del'>-			blocks_to_write &lt;&lt;  get_atom_bits(object));</div><div class='del'>-</div><div class='del'>-		conf-&gt;cursor += blocks_to_write;</div><div class='del'>-</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   end_writeback_full_block,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-			   local-&gt;fd,</div><div class='del'>-			   atom-&gt;get_iovec(frame, off_in_atom + blocks_written),</div><div class='del'>-			   blocks_to_write,</div><div class='del'>-			   off_in_file + (blocks_written &lt;&lt; get_atom_bits(object)),</div><div class='del'>-			   local-&gt;flags,</div><div class='del'>-			   local-&gt;iobref_data ? local-&gt;iobref_data : local-&gt;iobref,</div><div class='del'>-			   local-&gt;xdata);</div><div class='del'>-</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "submit %d full blocks from %d offset",</div><div class='del'>-		       blocks_to_write,</div><div class='del'>-		       (int)(off_in_file + (blocks_written &lt;&lt; get_atom_bits(object))));</div><div class='del'>-</div><div class='del'>-		count -= blocks_to_write;</div><div class='del'>-		blocks_written += blocks_to_write;</div><div class='del'>-	}</div><div class='del'>-	return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t rmw_data_head(call_frame_t *frame,</div><div class='del'>-			     void *cookie,</div><div class='del'>-			     xlator_t *this,</div><div class='del'>-			     int32_t op_ret,</div><div class='del'>-			     int32_t op_errno,</div><div class='del'>-			     struct iovec *vec,</div><div class='del'>-			     int32_t count,</div><div class='del'>-			     struct iatt *stbuf,</div><div class='del'>-			     struct iobref *iobref,</div><div class='del'>-			     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return rmw_partial_block(frame,</div><div class='del'>-				 cookie,</div><div class='del'>-				 this,</div><div class='del'>-				 op_ret,</div><div class='del'>-				 op_errno,</div><div class='del'>-				 vec,</div><div class='del'>-				 count,</div><div class='del'>-				 stbuf,</div><div class='del'>-				 iobref,</div><div class='del'>-				 atom_by_types(DATA_ATOM, HEAD_ATOM));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t rmw_data_tail(call_frame_t *frame,</div><div class='del'>-			     void *cookie,</div><div class='del'>-			     xlator_t *this,</div><div class='del'>-			     int32_t op_ret,</div><div class='del'>-			     int32_t op_errno,</div><div class='del'>-			     struct iovec *vec,</div><div class='del'>-			     int32_t count,</div><div class='del'>-			     struct iatt *stbuf,</div><div class='del'>-			     struct iobref *iobref,</div><div class='del'>-			     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return rmw_partial_block(frame,</div><div class='del'>-				 cookie,</div><div class='del'>-				 this,</div><div class='del'>-				 op_ret,</div><div class='del'>-				 op_errno,</div><div class='del'>-				 vec,</div><div class='del'>-				 count,</div><div class='del'>-				 stbuf,</div><div class='del'>-				 iobref,</div><div class='del'>-				 atom_by_types(DATA_ATOM, TAIL_ATOM));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t rmw_hole_head(call_frame_t *frame,</div><div class='del'>-			     void *cookie,</div><div class='del'>-			     xlator_t *this,</div><div class='del'>-			     int32_t op_ret,</div><div class='del'>-			     int32_t op_errno,</div><div class='del'>-			     struct iovec *vec,</div><div class='del'>-			     int32_t count,</div><div class='del'>-			     struct iatt *stbuf,</div><div class='del'>-			     struct iobref *iobref,</div><div class='del'>-			     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return rmw_partial_block(frame,</div><div class='del'>-				 cookie,</div><div class='del'>-				 this,</div><div class='del'>-				 op_ret,</div><div class='del'>-				 op_errno,</div><div class='del'>-				 vec,</div><div class='del'>-				 count,</div><div class='del'>-				 stbuf,</div><div class='del'>-				 iobref,</div><div class='del'>-				 atom_by_types(HOLE_ATOM, HEAD_ATOM));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t rmw_hole_tail(call_frame_t *frame,</div><div class='del'>-			     void *cookie,</div><div class='del'>-			     xlator_t *this,</div><div class='del'>-			     int32_t op_ret,</div><div class='del'>-			     int32_t op_errno,</div><div class='del'>-			     struct iovec *vec,</div><div class='del'>-			     int32_t count,</div><div class='del'>-			     struct iatt *stbuf,</div><div class='del'>-			     struct iobref *iobref,</div><div class='del'>-			     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return rmw_partial_block(frame,</div><div class='del'>-				 cookie,</div><div class='del'>-				 this,</div><div class='del'>-				 op_ret,</div><div class='del'>-				 op_errno,</div><div class='del'>-				 vec,</div><div class='del'>-				 count,</div><div class='del'>-				 stbuf,</div><div class='del'>-				 iobref,</div><div class='del'>-				 atom_by_types(HOLE_ATOM, TAIL_ATOM));</div><div class='add'>+void</div><div class='add'>+submit_full(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+    struct rmw_atom *atom = atom_by_types(local-&gt;active_setup, FULL_ATOM);</div><div class='add'>+    uint32_t count;       /* total number of full blocks to submit */</div><div class='add'>+    uint32_t granularity; /* number of blocks to submit in one iteration */</div><div class='add'>+</div><div class='add'>+    uint64_t off_in_file;        /* start offset in the file, bytes */</div><div class='add'>+    uint32_t off_in_atom;        /* start offset in the atom, blocks */</div><div class='add'>+    uint32_t blocks_written = 0; /* blocks written for this submit */</div><div class='add'>+</div><div class='add'>+    struct avec_config *conf = atom-&gt;get_config(frame);</div><div class='add'>+    end_writeback_handler_t end_writeback_full_block;</div><div class='add'>+    /*</div><div class='add'>+     * Write full blocks by groups of granularity size.</div><div class='add'>+     */</div><div class='add'>+    end_writeback_full_block = dispatch_end_writeback(local-&gt;fop);</div><div class='add'>+</div><div class='add'>+    if (is_ordered_mode(frame)) {</div><div class='add'>+        uint32_t skip = has_head_block(conf) ? 1 : 0;</div><div class='add'>+        count = 1;</div><div class='add'>+        granularity = 1;</div><div class='add'>+        /*</div><div class='add'>+         * calculate start offset using cursor value;</div><div class='add'>+         * here we should take into account head block,</div><div class='add'>+         * which corresponds to cursor value 0.</div><div class='add'>+         */</div><div class='add'>+        off_in_file = atom-&gt;offset_at(frame, object) +</div><div class='add'>+                      ((conf-&gt;cursor - skip) &lt;&lt; get_atom_bits(object));</div><div class='add'>+        off_in_atom = conf-&gt;cursor - skip;</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * in parallel mode</div><div class='add'>+         */</div><div class='add'>+        count = conf-&gt;nr_full_blocks;</div><div class='add'>+        granularity = MAX_IOVEC;</div><div class='add'>+        off_in_file = atom-&gt;offset_at(frame, object);</div><div class='add'>+        off_in_atom = 0;</div><div class='add'>+    }</div><div class='add'>+    while (count) {</div><div class='add'>+        uint32_t blocks_to_write = count;</div><div class='add'>+</div><div class='add'>+        if (blocks_to_write &gt; granularity)</div><div class='add'>+            blocks_to_write = granularity;</div><div class='add'>+        if (conf-&gt;type == HOLE_ATOM)</div><div class='add'>+            /*</div><div class='add'>+             * reset iovec before encryption</div><div class='add'>+             */</div><div class='add'>+            memset(atom-&gt;get_iovec(frame, 0)-&gt;iov_base, 0,</div><div class='add'>+                   get_atom_size(object));</div><div class='add'>+        /*</div><div class='add'>+         * encrypt the group</div><div class='add'>+         */</div><div class='add'>+        encrypt_aligned_iov(</div><div class='add'>+            object, atom-&gt;get_iovec(frame, off_in_atom + blocks_written),</div><div class='add'>+            blocks_to_write,</div><div class='add'>+            off_in_file + (blocks_written &lt;&lt; get_atom_bits(object)));</div><div class='add'>+</div><div class='add'>+        set_local_io_params_writev(</div><div class='add'>+            frame, object, atom,</div><div class='add'>+            off_in_file + (blocks_written &lt;&lt; get_atom_bits(object)),</div><div class='add'>+            blocks_to_write &lt;&lt; get_atom_bits(object));</div><div class='add'>+</div><div class='add'>+        conf-&gt;cursor += blocks_to_write;</div><div class='add'>+</div><div class='add'>+        STACK_WIND(frame, end_writeback_full_block, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;writev, local-&gt;fd,</div><div class='add'>+                   atom-&gt;get_iovec(frame, off_in_atom + blocks_written),</div><div class='add'>+                   blocks_to_write,</div><div class='add'>+                   off_in_file + (blocks_written &lt;&lt; get_atom_bits(object)),</div><div class='add'>+                   local-&gt;flags,</div><div class='add'>+                   local-&gt;iobref_data ? local-&gt;iobref_data : local-&gt;iobref,</div><div class='add'>+                   local-&gt;xdata);</div><div class='add'>+</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "submit %d full blocks from %d offset",</div><div class='add'>+               blocks_to_write,</div><div class='add'>+               (int)(off_in_file + (blocks_written &lt;&lt; get_atom_bits(object))));</div><div class='add'>+</div><div class='add'>+        count -= blocks_to_write;</div><div class='add'>+        blocks_written += blocks_to_write;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+rmw_data_head(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iovec *vec, int32_t count,</div><div class='add'>+              struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return rmw_partial_block(frame, cookie, this, op_ret, op_errno, vec, count,</div><div class='add'>+                             stbuf, iobref,</div><div class='add'>+                             atom_by_types(DATA_ATOM, HEAD_ATOM));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+rmw_data_tail(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iovec *vec, int32_t count,</div><div class='add'>+              struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return rmw_partial_block(frame, cookie, this, op_ret, op_errno, vec, count,</div><div class='add'>+                             stbuf, iobref,</div><div class='add'>+                             atom_by_types(DATA_ATOM, TAIL_ATOM));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+rmw_hole_head(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iovec *vec, int32_t count,</div><div class='add'>+              struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return rmw_partial_block(frame, cookie, this, op_ret, op_errno, vec, count,</div><div class='add'>+                             stbuf, iobref,</div><div class='add'>+                             atom_by_types(HOLE_ATOM, HEAD_ATOM));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+rmw_hole_tail(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iovec *vec, int32_t count,</div><div class='add'>+              struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return rmw_partial_block(frame, cookie, this, op_ret, op_errno, vec, count,</div><div class='add'>+                             stbuf, iobref,</div><div class='add'>+                             atom_by_types(HOLE_ATOM, TAIL_ATOM));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * atom-&gt;count_to_uptodate()</div><div class='ctx'>  */</div><div class='del'>-static uint32_t count_to_uptodate_head(struct avec_config *conf,</div><div class='del'>-				       struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+count_to_uptodate_head(struct avec_config *conf,</div><div class='add'>+                       struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	if (conf-&gt;acount == 1 &amp;&amp; conf-&gt;off_in_tail)</div><div class='del'>-		return get_atom_size(object);</div><div class='del'>-	else</div><div class='del'>-		/* there is no need to read the whole head block */</div><div class='del'>-		return conf-&gt;off_in_head;</div><div class='add'>+    if (conf-&gt;acount == 1 &amp;&amp; conf-&gt;off_in_tail)</div><div class='add'>+        return get_atom_size(object);</div><div class='add'>+    else</div><div class='add'>+        /* there is no need to read the whole head block */</div><div class='add'>+        return conf-&gt;off_in_head;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t count_to_uptodate_tail(struct avec_config *conf,</div><div class='del'>-				       struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+count_to_uptodate_tail(struct avec_config *conf,</div><div class='add'>+                       struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	/* we need to read the whole tail block */</div><div class='del'>-	return get_atom_size(object);</div><div class='add'>+    /* we need to read the whole tail block */</div><div class='add'>+    return get_atom_size(object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t count_to_uptodate_data_head(call_frame_t *frame,</div><div class='del'>-					    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+count_to_uptodate_data_head(call_frame_t *frame,</div><div class='add'>+                            struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return count_to_uptodate_head(get_data_conf(frame), object);</div><div class='add'>+    return count_to_uptodate_head(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t count_to_uptodate_data_tail(call_frame_t *frame,</div><div class='del'>-					    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+count_to_uptodate_data_tail(call_frame_t *frame,</div><div class='add'>+                            struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return count_to_uptodate_tail(get_data_conf(frame), object);</div><div class='add'>+    return count_to_uptodate_tail(get_data_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t count_to_uptodate_hole_head(call_frame_t *frame,</div><div class='del'>-					    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+count_to_uptodate_hole_head(call_frame_t *frame,</div><div class='add'>+                            struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return count_to_uptodate_head(get_hole_conf(frame), object);</div><div class='add'>+    return count_to_uptodate_head(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static uint32_t count_to_uptodate_hole_tail(call_frame_t *frame,</div><div class='del'>-					    struct object_cipher_info *object)</div><div class='add'>+static uint32_t</div><div class='add'>+count_to_uptodate_hole_tail(call_frame_t *frame,</div><div class='add'>+                            struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	return count_to_uptodate_tail(get_hole_conf(frame), object);</div><div class='add'>+    return count_to_uptodate_tail(get_hole_conf(frame), object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* atom-&gt;get_config() */</div><div class='ctx'> </div><div class='del'>-static struct avec_config *get_config_data(call_frame_t *frame)</div><div class='add'>+static struct avec_config *</div><div class='add'>+get_config_data(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-	return &amp;((crypt_local_t *)frame-&gt;local)-&gt;data_conf;</div><div class='add'>+    return &amp;((crypt_local_t *)frame-&gt;local)-&gt;data_conf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct avec_config *get_config_hole(call_frame_t *frame)</div><div class='add'>+static struct avec_config *</div><div class='add'>+get_config_hole(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-	return &amp;((crypt_local_t *)frame-&gt;local)-&gt;hole_conf;</div><div class='add'>+    return &amp;((crypt_local_t *)frame-&gt;local)-&gt;hole_conf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * atom-&gt;get_iovec()</div><div class='ctx'>  */</div><div class='del'>-static struct iovec *get_iovec_hole_head(call_frame_t *frame,</div><div class='del'>-					 uint32_t count)</div><div class='add'>+static struct iovec *</div><div class='add'>+get_iovec_hole_head(call_frame_t *frame, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = get_hole_conf(frame);</div><div class='add'>+    struct avec_config *conf = get_hole_conf(frame);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec;</div><div class='add'>+    return conf-&gt;avec;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct iovec *get_iovec_hole_full(call_frame_t *frame,</div><div class='del'>-					 uint32_t count)</div><div class='add'>+static struct iovec *</div><div class='add'>+get_iovec_hole_full(call_frame_t *frame, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = get_hole_conf(frame);</div><div class='add'>+    struct avec_config *conf = get_hole_conf(frame);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec + (conf-&gt;off_in_head ? 1 : 0);</div><div class='add'>+    return conf-&gt;avec + (conf-&gt;off_in_head ? 1 : 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct iovec *get_iovec_hole_tail(call_frame_t *frame,</div><div class='del'>-						uint32_t count)</div><div class='add'>+static struct iovec *</div><div class='add'>+get_iovec_hole_tail(call_frame_t *frame, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = get_hole_conf(frame);</div><div class='add'>+    struct avec_config *conf = get_hole_conf(frame);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec + (conf-&gt;blocks_in_pool - 1);</div><div class='add'>+    return conf-&gt;avec + (conf-&gt;blocks_in_pool - 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct iovec *get_iovec_data_head(call_frame_t *frame,</div><div class='del'>-						uint32_t count)</div><div class='add'>+static struct iovec *</div><div class='add'>+get_iovec_data_head(call_frame_t *frame, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = get_data_conf(frame);</div><div class='add'>+    struct avec_config *conf = get_data_conf(frame);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec;</div><div class='add'>+    return conf-&gt;avec;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct iovec *get_iovec_data_full(call_frame_t *frame,</div><div class='del'>-						uint32_t count)</div><div class='add'>+static struct iovec *</div><div class='add'>+get_iovec_data_full(call_frame_t *frame, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = get_data_conf(frame);</div><div class='add'>+    struct avec_config *conf = get_data_conf(frame);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec + (conf-&gt;off_in_head ? 1 : 0) + count;</div><div class='add'>+    return conf-&gt;avec + (conf-&gt;off_in_head ? 1 : 0) + count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct iovec *get_iovec_data_tail(call_frame_t *frame,</div><div class='del'>-						uint32_t count)</div><div class='add'>+static struct iovec *</div><div class='add'>+get_iovec_data_tail(call_frame_t *frame, uint32_t count)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = get_data_conf(frame);</div><div class='add'>+    struct avec_config *conf = get_data_conf(frame);</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec +</div><div class='del'>-		(conf-&gt;off_in_head ? 1 : 0) +</div><div class='del'>-		conf-&gt;nr_full_blocks;</div><div class='add'>+    return conf-&gt;avec + (conf-&gt;off_in_head ? 1 : 0) + conf-&gt;nr_full_blocks;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct rmw_atom atoms[LAST_DATA_TYPE][LAST_LOCALITY_TYPE] = {</div><div class='del'>-	[DATA_ATOM][HEAD_ATOM] =</div><div class='del'>-	{ .locality = HEAD_ATOM,</div><div class='del'>-	  .rmw = rmw_data_head,</div><div class='del'>-	  .offset_at = offset_at_data_head,</div><div class='del'>-	  .offset_in = offset_in_data_head,</div><div class='del'>-	  .get_iovec = get_iovec_data_head,</div><div class='del'>-	  .io_size_nopad = io_size_nopad_data_head,</div><div class='del'>-	  .count_to_uptodate = count_to_uptodate_data_head,</div><div class='del'>-	  .get_config = get_config_data</div><div class='del'>-	},</div><div class='del'>-	[DATA_ATOM][TAIL_ATOM] =</div><div class='del'>-	{ .locality = TAIL_ATOM,</div><div class='del'>-	  .rmw = rmw_data_tail,</div><div class='del'>-	  .offset_at = offset_at_data_tail,</div><div class='del'>-	  .offset_in = offset_in_tail,</div><div class='del'>-	  .get_iovec = get_iovec_data_tail,</div><div class='del'>-	  .io_size_nopad = io_size_nopad_data_tail,</div><div class='del'>-	  .count_to_uptodate = count_to_uptodate_data_tail,</div><div class='del'>-	  .get_config = get_config_data</div><div class='del'>-	},</div><div class='del'>-	[DATA_ATOM][FULL_ATOM] =</div><div class='del'>-	{ .locality = FULL_ATOM,</div><div class='del'>-	  .offset_at = offset_at_data_full,</div><div class='del'>-	  .offset_in = offset_in_data_full,</div><div class='del'>-	  .get_iovec = get_iovec_data_full,</div><div class='del'>-	  .io_size_nopad = io_size_nopad_data_full,</div><div class='del'>-	  .get_config = get_config_data</div><div class='del'>-	},</div><div class='del'>-	[HOLE_ATOM][HEAD_ATOM] =</div><div class='del'>-	{ .locality = HEAD_ATOM,</div><div class='del'>-	  .rmw = rmw_hole_head,</div><div class='del'>-	  .offset_at = offset_at_hole_head,</div><div class='del'>-	  .offset_in = offset_in_hole_head,</div><div class='del'>-	  .get_iovec = get_iovec_hole_head,</div><div class='del'>-	  .io_size_nopad = io_size_nopad_hole_head,</div><div class='del'>-	  .count_to_uptodate = count_to_uptodate_hole_head,</div><div class='del'>-	  .get_config = get_config_hole</div><div class='del'>-	},</div><div class='del'>-	[HOLE_ATOM][TAIL_ATOM] =</div><div class='del'>-	{ .locality = TAIL_ATOM,</div><div class='del'>-	  .rmw = rmw_hole_tail,</div><div class='del'>-	  .offset_at = offset_at_hole_tail,</div><div class='del'>-	  .offset_in = offset_in_tail,</div><div class='del'>-	  .get_iovec = get_iovec_hole_tail,</div><div class='del'>-	  .io_size_nopad = io_size_nopad_hole_tail,</div><div class='del'>-	  .count_to_uptodate = count_to_uptodate_hole_tail,</div><div class='del'>-	  .get_config = get_config_hole</div><div class='del'>-	},</div><div class='del'>-	[HOLE_ATOM][FULL_ATOM] =</div><div class='del'>-	{ .locality = FULL_ATOM,</div><div class='del'>-	  .offset_at = offset_at_hole_full,</div><div class='del'>-	  .offset_in = offset_in_hole_full,</div><div class='del'>-	  .get_iovec = get_iovec_hole_full,</div><div class='del'>-	  .io_size_nopad = io_size_nopad_hole_full,</div><div class='del'>-	  .get_config = get_config_hole</div><div class='del'>-	}</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct rmw_atom *atom_by_types(atom_data_type data,</div><div class='del'>-			       atom_locality_type locality)</div><div class='del'>-{</div><div class='del'>-	return &amp;atoms[data][locality];</div><div class='add'>+    [DATA_ATOM][HEAD_ATOM] = {.locality = HEAD_ATOM,</div><div class='add'>+                              .rmw = rmw_data_head,</div><div class='add'>+                              .offset_at = offset_at_data_head,</div><div class='add'>+                              .offset_in = offset_in_data_head,</div><div class='add'>+                              .get_iovec = get_iovec_data_head,</div><div class='add'>+                              .io_size_nopad = io_size_nopad_data_head,</div><div class='add'>+                              .count_to_uptodate = count_to_uptodate_data_head,</div><div class='add'>+                              .get_config = get_config_data},</div><div class='add'>+    [DATA_ATOM][TAIL_ATOM] = {.locality = TAIL_ATOM,</div><div class='add'>+                              .rmw = rmw_data_tail,</div><div class='add'>+                              .offset_at = offset_at_data_tail,</div><div class='add'>+                              .offset_in = offset_in_tail,</div><div class='add'>+                              .get_iovec = get_iovec_data_tail,</div><div class='add'>+                              .io_size_nopad = io_size_nopad_data_tail,</div><div class='add'>+                              .count_to_uptodate = count_to_uptodate_data_tail,</div><div class='add'>+                              .get_config = get_config_data},</div><div class='add'>+    [DATA_ATOM][FULL_ATOM] = {.locality = FULL_ATOM,</div><div class='add'>+                              .offset_at = offset_at_data_full,</div><div class='add'>+                              .offset_in = offset_in_data_full,</div><div class='add'>+                              .get_iovec = get_iovec_data_full,</div><div class='add'>+                              .io_size_nopad = io_size_nopad_data_full,</div><div class='add'>+                              .get_config = get_config_data},</div><div class='add'>+    [HOLE_ATOM][HEAD_ATOM] = {.locality = HEAD_ATOM,</div><div class='add'>+                              .rmw = rmw_hole_head,</div><div class='add'>+                              .offset_at = offset_at_hole_head,</div><div class='add'>+                              .offset_in = offset_in_hole_head,</div><div class='add'>+                              .get_iovec = get_iovec_hole_head,</div><div class='add'>+                              .io_size_nopad = io_size_nopad_hole_head,</div><div class='add'>+                              .count_to_uptodate = count_to_uptodate_hole_head,</div><div class='add'>+                              .get_config = get_config_hole},</div><div class='add'>+    [HOLE_ATOM][TAIL_ATOM] = {.locality = TAIL_ATOM,</div><div class='add'>+                              .rmw = rmw_hole_tail,</div><div class='add'>+                              .offset_at = offset_at_hole_tail,</div><div class='add'>+                              .offset_in = offset_in_tail,</div><div class='add'>+                              .get_iovec = get_iovec_hole_tail,</div><div class='add'>+                              .io_size_nopad = io_size_nopad_hole_tail,</div><div class='add'>+                              .count_to_uptodate = count_to_uptodate_hole_tail,</div><div class='add'>+                              .get_config = get_config_hole},</div><div class='add'>+    [HOLE_ATOM][FULL_ATOM] = {.locality = FULL_ATOM,</div><div class='add'>+                              .offset_at = offset_at_hole_full,</div><div class='add'>+                              .offset_in = offset_in_hole_full,</div><div class='add'>+                              .get_iovec = get_iovec_hole_full,</div><div class='add'>+                              .io_size_nopad = io_size_nopad_hole_full,</div><div class='add'>+                              .get_config = get_config_hole}};</div><div class='add'>+</div><div class='add'>+struct rmw_atom *</div><div class='add'>+atom_by_types(atom_data_type data, atom_locality_type locality)</div><div class='add'>+{</div><div class='add'>+    return &amp;atoms[data][locality];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='head'>diff --git a/xlators/encryption/crypt/src/crypt.c b/xlators/encryption/crypt/src/crypt.c<br/>index 93d64c82a9e..02c4028c087 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/crypt.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/encryption/crypt/src/crypt.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/crypt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/crypt.c</a></div><div class='hunk'>@@ -18,231 +18,242 @@</div><div class='ctx'> #include "crypt-common.h"</div><div class='ctx'> #include "crypt.h"</div><div class='ctx'> </div><div class='del'>-static void init_inode_info_head(struct crypt_inode_info *info, fd_t *fd);</div><div class='del'>-static int32_t init_inode_info_tail(struct crypt_inode_info *info,</div><div class='del'>-				    struct master_cipher_info *master);</div><div class='del'>-static int32_t prepare_for_submit_hole(call_frame_t *frame, xlator_t *this,</div><div class='del'>-				       uint64_t from, off_t size);</div><div class='del'>-static int32_t load_file_size(call_frame_t *frame, void *cookie,</div><div class='del'>-			      xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-			      dict_t *dict, dict_t *xdata);</div><div class='del'>-static void do_ordered_submit(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			      atom_data_type dtype);</div><div class='del'>-static void do_parallel_submit(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			       atom_data_type dtype);</div><div class='del'>-static void put_one_call_open(call_frame_t *frame);</div><div class='del'>-static void put_one_call_readv(call_frame_t *frame, xlator_t *this);</div><div class='del'>-static void put_one_call_writev(call_frame_t *frame, xlator_t *this);</div><div class='del'>-static void put_one_call_ftruncate(call_frame_t *frame, xlator_t *this);</div><div class='del'>-static void free_avec(struct iovec *avec, char **pool, int blocks_in_pool);</div><div class='del'>-static void free_avec_data(crypt_local_t *local);</div><div class='del'>-static void free_avec_hole(crypt_local_t *local);</div><div class='del'>-</div><div class='del'>-static crypt_local_t *crypt_alloc_local(call_frame_t *frame, xlator_t *this,</div><div class='del'>-					glusterfs_fop_t fop)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-	local = GF_CALLOC (1, sizeof (crypt_local_t), gf_crypt_mt_local);</div><div class='del'>-	if (!local) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "out of memory");</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fop = fop;</div><div class='del'>-	LOCK_INIT(&amp;local-&gt;hole_lock);</div><div class='del'>-	LOCK_INIT(&amp;local-&gt;call_lock);</div><div class='del'>-	LOCK_INIT(&amp;local-&gt;rw_count_lock);</div><div class='del'>-</div><div class='del'>-	frame-&gt;local = local;</div><div class='del'>-	return local;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct crypt_inode_info *get_crypt_inode_info(inode_t *inode, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	int ret;</div><div class='del'>-	uint64_t value = 0;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-</div><div class='del'>-	ret = inode_ctx_get(inode, this, &amp;value);</div><div class='del'>-	if (ret == -1) {</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"Can not get inode info");</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-	info = (struct crypt_inode_info *)(long)value;</div><div class='del'>-	if (info == NULL) {</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"Can not obtain inode info");</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-	return info;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct crypt_inode_info *local_get_inode_info(crypt_local_t *local,</div><div class='del'>-						      xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	if (local-&gt;info)</div><div class='del'>-		return local-&gt;info;</div><div class='del'>-	local-&gt;info = get_crypt_inode_info(local-&gt;fd-&gt;inode, this);</div><div class='del'>-	return local-&gt;info;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct crypt_inode_info *alloc_inode_info(crypt_local_t *local,</div><div class='del'>-						 loc_t *loc)</div><div class='del'>-{</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-</div><div class='del'>-	info = GF_CALLOC(1, sizeof(struct crypt_inode_info), gf_crypt_mt_inode);</div><div class='del'>-	if (!info) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = ENOMEM;</div><div class='del'>-		gf_log ("crypt", GF_LOG_WARNING,</div><div class='del'>-			"Can not allocate inode info");</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+static void</div><div class='add'>+init_inode_info_head(struct crypt_inode_info *info, fd_t *fd);</div><div class='add'>+static int32_t</div><div class='add'>+init_inode_info_tail(struct crypt_inode_info *info,</div><div class='add'>+                     struct master_cipher_info *master);</div><div class='add'>+static int32_t</div><div class='add'>+prepare_for_submit_hole(call_frame_t *frame, xlator_t *this, uint64_t from,</div><div class='add'>+                        off_t size);</div><div class='add'>+static int32_t</div><div class='add'>+load_file_size(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata);</div><div class='add'>+static void</div><div class='add'>+do_ordered_submit(call_frame_t *frame, xlator_t *this, atom_data_type dtype);</div><div class='add'>+static void</div><div class='add'>+do_parallel_submit(call_frame_t *frame, xlator_t *this, atom_data_type dtype);</div><div class='add'>+static void</div><div class='add'>+put_one_call_open(call_frame_t *frame);</div><div class='add'>+static void</div><div class='add'>+put_one_call_readv(call_frame_t *frame, xlator_t *this);</div><div class='add'>+static void</div><div class='add'>+put_one_call_writev(call_frame_t *frame, xlator_t *this);</div><div class='add'>+static void</div><div class='add'>+put_one_call_ftruncate(call_frame_t *frame, xlator_t *this);</div><div class='add'>+static void</div><div class='add'>+free_avec(struct iovec *avec, char **pool, int blocks_in_pool);</div><div class='add'>+static void</div><div class='add'>+free_avec_data(crypt_local_t *local);</div><div class='add'>+static void</div><div class='add'>+free_avec_hole(crypt_local_t *local);</div><div class='add'>+</div><div class='add'>+static crypt_local_t *</div><div class='add'>+crypt_alloc_local(call_frame_t *frame, xlator_t *this, glusterfs_fop_t fop)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    local = GF_CALLOC(1, sizeof(crypt_local_t), gf_crypt_mt_local);</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "out of memory");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fop = fop;</div><div class='add'>+    LOCK_INIT(&amp;local-&gt;hole_lock);</div><div class='add'>+    LOCK_INIT(&amp;local-&gt;call_lock);</div><div class='add'>+    LOCK_INIT(&amp;local-&gt;rw_count_lock);</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    return local;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+struct crypt_inode_info *</div><div class='add'>+get_crypt_inode_info(inode_t *inode, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;value);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Can not get inode info");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    info = (struct crypt_inode_info *)(long)value;</div><div class='add'>+    if (info == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Can not obtain inode info");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    return info;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static struct crypt_inode_info *</div><div class='add'>+local_get_inode_info(crypt_local_t *local, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    if (local-&gt;info)</div><div class='add'>+        return local-&gt;info;</div><div class='add'>+    local-&gt;info = get_crypt_inode_info(local-&gt;fd-&gt;inode, this);</div><div class='add'>+    return local-&gt;info;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static struct crypt_inode_info *</div><div class='add'>+alloc_inode_info(crypt_local_t *local, loc_t *loc)</div><div class='add'>+{</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+</div><div class='add'>+    info = GF_CALLOC(1, sizeof(struct crypt_inode_info), gf_crypt_mt_inode);</div><div class='add'>+    if (!info) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Can not allocate inode info");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	info-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='del'>-	if (!info-&gt;loc) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Can not allocate loc");</div><div class='del'>-		GF_FREE(info);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-	if (loc_copy(info-&gt;loc, loc)){</div><div class='del'>-		GF_FREE(info-&gt;loc);</div><div class='del'>-		GF_FREE(info);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    info-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='add'>+    if (!info-&gt;loc) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Can not allocate loc");</div><div class='add'>+        GF_FREE(info);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    if (loc_copy(info-&gt;loc, loc)) {</div><div class='add'>+        GF_FREE(info-&gt;loc);</div><div class='add'>+        GF_FREE(info);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> #endif /* DEBUG_CRYPT */</div><div class='ctx'> </div><div class='del'>-	local-&gt;info = info;</div><div class='del'>-	return info;</div><div class='add'>+    local-&gt;info = info;</div><div class='add'>+    return info;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void free_inode_info(struct crypt_inode_info *info)</div><div class='add'>+static void</div><div class='add'>+free_inode_info(struct crypt_inode_info *info)</div><div class='ctx'> {</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	loc_wipe(info-&gt;loc);</div><div class='del'>-	GF_FREE(info-&gt;loc);</div><div class='add'>+    loc_wipe(info-&gt;loc);</div><div class='add'>+    GF_FREE(info-&gt;loc);</div><div class='ctx'> #endif</div><div class='del'>-	memset(info, 0, sizeof(*info));</div><div class='del'>-	GF_FREE(info);</div><div class='add'>+    memset(info, 0, sizeof(*info));</div><div class='add'>+    GF_FREE(info);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int crypt_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+int</div><div class='add'>+crypt_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-        if (!inode_ctx_del (inode, this, &amp;ctx_addr))</div><div class='del'>-                free_inode_info((struct crypt_inode_info *)(long)ctx_addr);</div><div class='del'>-        return 0;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    if (!inode_ctx_del(inode, this, &amp;ctx_addr))</div><div class='add'>+        free_inode_info((struct crypt_inode_info *)(long)ctx_addr);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-static void check_read(call_frame_t *frame, xlator_t *this, int32_t read,</div><div class='del'>-		       struct iovec *vec, int32_t count, struct iatt *stbuf)</div><div class='add'>+static void</div><div class='add'>+check_read(call_frame_t *frame, xlator_t *this, int32_t read, struct iovec *vec,</div><div class='add'>+           int32_t count, struct iatt *stbuf)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = get_object_cinfo(local-&gt;info);</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='del'>-	uint32_t resid = stbuf-&gt;ia_size &amp; (object_alg_blksize(object) - 1);</div><div class='del'>-</div><div class='del'>-	if (read &lt;= 0)</div><div class='del'>-		return;</div><div class='del'>-	if (read != iov_length(vec, count))</div><div class='del'>-		gf_log ("crypt", GF_LOG_DEBUG,</div><div class='del'>-			"op_ret differs from amount of read bytes");</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = get_object_cinfo(local-&gt;info);</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+    uint32_t resid = stbuf-&gt;ia_size &amp; (object_alg_blksize(object) - 1);</div><div class='ctx'> </div><div class='del'>-	if (object_alg_should_pad(object) &amp;&amp; (read &amp; (object_alg_blksize(object) - 1)))</div><div class='del'>-		gf_log ("crypt", GF_LOG_DEBUG,</div><div class='del'>-			"bad amount of read bytes (!= 0 mod(cblock size))");</div><div class='add'>+    if (read &lt;= 0)</div><div class='add'>+        return;</div><div class='add'>+    if (read != iov_length(vec, count))</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+               "op_ret differs from amount of read bytes");</div><div class='ctx'> </div><div class='del'>-	if (conf-&gt;aligned_offset + read &gt;</div><div class='del'>-	    stbuf-&gt;ia_size + (resid ? object_alg_blksize(object) - resid : 0))</div><div class='del'>-		gf_log ("crypt", GF_LOG_DEBUG,</div><div class='del'>-			"bad amount of read bytes (too large))");</div><div class='add'>+    if (object_alg_should_pad(object) &amp;&amp;</div><div class='add'>+        (read &amp; (object_alg_blksize(object) - 1)))</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+               "bad amount of read bytes (!= 0 mod(cblock size))");</div><div class='ctx'> </div><div class='add'>+    if (conf-&gt;aligned_offset + read &gt;</div><div class='add'>+        stbuf-&gt;ia_size + (resid ? object_alg_blksize(object) - resid : 0))</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "bad amount of read bytes (too large))");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define PT_BYTES_TO_DUMP (32)</div><div class='del'>-static void dump_plain_text(crypt_local_t *local, struct iovec *avec)</div><div class='del'>-{</div><div class='del'>-	int32_t to_dump;</div><div class='del'>-	char str[PT_BYTES_TO_DUMP + 1];</div><div class='del'>-</div><div class='del'>-	if (!avec)</div><div class='del'>-		return;</div><div class='del'>-	to_dump = avec-&gt;iov_len;</div><div class='del'>-	if (to_dump &gt; PT_BYTES_TO_DUMP)</div><div class='del'>-		to_dump = PT_BYTES_TO_DUMP;</div><div class='del'>-	memcpy(str, avec-&gt;iov_base, to_dump);</div><div class='del'>-	memset(str + to_dump, '0', 1);</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG, "Read file: %s", str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t data_conf_invariant(struct avec_config *conf)</div><div class='del'>-{</div><div class='del'>-	return conf-&gt;acount ==</div><div class='del'>-		!!has_head_block(conf) +</div><div class='del'>-		!!has_tail_block(conf)+</div><div class='del'>-		conf-&gt;nr_full_blocks;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t hole_conf_invariant(struct avec_config *conf)</div><div class='del'>-{</div><div class='del'>-	return conf-&gt;blocks_in_pool ==</div><div class='del'>-		!!has_head_block(conf) +</div><div class='del'>-		!!has_tail_block(conf)+</div><div class='del'>-		!!has_full_blocks(conf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void crypt_check_conf(struct avec_config *conf)</div><div class='del'>-{</div><div class='del'>-	int32_t ret = 0;</div><div class='del'>-	const char *msg;</div><div class='del'>-</div><div class='del'>-	switch (conf-&gt;type) {</div><div class='del'>-	case DATA_ATOM:</div><div class='del'>-		msg = "data";</div><div class='del'>-		ret = data_conf_invariant(conf);</div><div class='del'>-		break;</div><div class='del'>-	case HOLE_ATOM:</div><div class='del'>-		msg = "hole";</div><div class='del'>-		ret = hole_conf_invariant(conf);</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		msg = "unknown";</div><div class='del'>-	}</div><div class='del'>-	if (!ret)</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "bad %s conf", msg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void check_buf(call_frame_t *frame, xlator_t *this, struct iatt *buf)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-	uint64_t local_file_size;</div><div class='del'>-</div><div class='del'>-	switch(local-&gt;fop) {</div><div class='del'>-	case GF_FOP_FTRUNCATE:</div><div class='del'>-		return;</div><div class='del'>-	case GF_FOP_WRITE:</div><div class='del'>-		local_file_size = local-&gt;new_file_size;</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_READ:</div><div class='del'>-		if (parent_is_crypt_xlator(frame, this))</div><div class='del'>-			return;</div><div class='del'>-		local_file_size = local-&gt;cur_file_size;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "bad file operation");</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	if (buf-&gt;ia_size != round_up(local_file_size,</div><div class='del'>-					 object_alg_blksize(object)))</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-		       "bad ia_size in buf (%llu), should be %llu",</div><div class='del'>-		       (unsigned long long)buf-&gt;ia_size,</div><div class='del'>-		       (unsigned long long)round_up(local_file_size,</div><div class='del'>-						    object_alg_blksize(object)));</div><div class='add'>+static void</div><div class='add'>+dump_plain_text(crypt_local_t *local, struct iovec *avec)</div><div class='add'>+{</div><div class='add'>+    int32_t to_dump;</div><div class='add'>+    char str[PT_BYTES_TO_DUMP + 1];</div><div class='add'>+</div><div class='add'>+    if (!avec)</div><div class='add'>+        return;</div><div class='add'>+    to_dump = avec-&gt;iov_len;</div><div class='add'>+    if (to_dump &gt; PT_BYTES_TO_DUMP)</div><div class='add'>+        to_dump = PT_BYTES_TO_DUMP;</div><div class='add'>+    memcpy(str, avec-&gt;iov_base, to_dump);</div><div class='add'>+    memset(str + to_dump, '0', 1);</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "Read file: %s", str);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+data_conf_invariant(struct avec_config *conf)</div><div class='add'>+{</div><div class='add'>+    return conf-&gt;acount == !!has_head_block(conf) + !!has_tail_block(conf) +</div><div class='add'>+                               conf-&gt;nr_full_blocks;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+hole_conf_invariant(struct avec_config *conf)</div><div class='add'>+{</div><div class='add'>+    return conf-&gt;blocks_in_pool == !!has_head_block(conf) +</div><div class='add'>+                                       !!has_tail_block(conf) +</div><div class='add'>+                                       !!has_full_blocks(conf);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+crypt_check_conf(struct avec_config *conf)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    const char *msg;</div><div class='add'>+</div><div class='add'>+    switch (conf-&gt;type) {</div><div class='add'>+        case DATA_ATOM:</div><div class='add'>+            msg = "data";</div><div class='add'>+            ret = data_conf_invariant(conf);</div><div class='add'>+            break;</div><div class='add'>+        case HOLE_ATOM:</div><div class='add'>+            msg = "hole";</div><div class='add'>+            ret = hole_conf_invariant(conf);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            msg = "unknown";</div><div class='add'>+    }</div><div class='add'>+    if (!ret)</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "bad %s conf", msg);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+check_buf(call_frame_t *frame, xlator_t *this, struct iatt *buf)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+    uint64_t local_file_size;</div><div class='add'>+</div><div class='add'>+    switch (local-&gt;fop) {</div><div class='add'>+        case GF_FOP_FTRUNCATE:</div><div class='add'>+            return;</div><div class='add'>+        case GF_FOP_WRITE:</div><div class='add'>+            local_file_size = local-&gt;new_file_size;</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_READ:</div><div class='add'>+            if (parent_is_crypt_xlator(frame, this))</div><div class='add'>+                return;</div><div class='add'>+            local_file_size = local-&gt;cur_file_size;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_DEBUG, "bad file operation");</div><div class='add'>+            return;</div><div class='add'>+    }</div><div class='add'>+    if (buf-&gt;ia_size != round_up(local_file_size, object_alg_blksize(object)))</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+               "bad ia_size in buf (%llu), should be %llu",</div><div class='add'>+               (unsigned long long)buf-&gt;ia_size,</div><div class='add'>+               (unsigned long long)round_up(local_file_size,</div><div class='add'>+                                            object_alg_blksize(object)));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #else</div><div class='hunk'>@@ -262,582 +273,509 @@ static void check_buf(call_frame_t *frame, xlator_t *this, struct iatt *buf)</div><div class='ctx'>  * of data corresponding to the original size and offset.</div><div class='ctx'>  * Pass the result to the next translator.</div><div class='ctx'>  */</div><div class='del'>-int32_t crypt_readv_cbk(call_frame_t *frame,</div><div class='del'>-			void *cookie,</div><div class='del'>-			xlator_t *this,</div><div class='del'>-			int32_t op_ret,</div><div class='del'>-			int32_t op_errno,</div><div class='del'>-			struct iovec *vec,</div><div class='del'>-			int32_t count,</div><div class='del'>-			struct iatt *stbuf,</div><div class='del'>-			struct iobref *iobref,</div><div class='del'>-			dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	struct iovec *avec;</div><div class='del'>-	uint32_t i;</div><div class='del'>-	uint32_t to_vec;</div><div class='del'>-	uint32_t to_user;</div><div class='del'>-</div><div class='del'>-	check_buf(frame, this, stbuf);</div><div class='del'>-	check_read(frame, this, op_ret, vec, count, stbuf);</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	local-&gt;iobref = iobref_ref(iobref);</div><div class='del'>-</div><div class='del'>-	local-&gt;buf = *stbuf;</div><div class='del'>-	local-&gt;buf.ia_size = local-&gt;cur_file_size;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt;= 0 || count == 0 || vec[0].iov_len == 0)</div><div class='del'>-		goto put_one_call;</div><div class='del'>-</div><div class='del'>-	if (conf-&gt;orig_offset &gt;= local-&gt;cur_file_size) {</div><div class='del'>-		local-&gt;op_ret = 0;</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * correct config params with real file size</div><div class='del'>-	 * and actual amount of bytes read</div><div class='del'>-	 */</div><div class='del'>-	set_config_offsets(frame, this,</div><div class='del'>-			   conf-&gt;orig_offset, op_ret, DATA_ATOM, 0);</div><div class='del'>-</div><div class='del'>-	if (conf-&gt;orig_offset + conf-&gt;orig_size &gt; local-&gt;cur_file_size)</div><div class='del'>-		conf-&gt;orig_size = local-&gt;cur_file_size - conf-&gt;orig_offset;</div><div class='del'>-	/*</div><div class='del'>-	 * calculate amount of data to be returned</div><div class='del'>-	 * to user.</div><div class='del'>-	 */</div><div class='del'>-	to_user = op_ret;</div><div class='del'>-	if (conf-&gt;aligned_offset + to_user &lt;= conf-&gt;orig_offset) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING, "Incomplete read");</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = EIO;</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	to_user -= (conf-&gt;aligned_offset - conf-&gt;orig_offset);</div><div class='del'>-</div><div class='del'>-	if (to_user &gt; conf-&gt;orig_size)</div><div class='del'>-		to_user = conf-&gt;orig_size;</div><div class='del'>-	local-&gt;rw_count = to_user;</div><div class='del'>-</div><div class='del'>-	op_errno = set_config_avec_data(this, local,</div><div class='del'>-					conf, object, vec, count);</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = op_errno;</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	avec = conf-&gt;avec;</div><div class='add'>+int32_t</div><div class='add'>+crypt_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iovec *vec,</div><div class='add'>+                int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    struct iovec *avec;</div><div class='add'>+    uint32_t i;</div><div class='add'>+    uint32_t to_vec;</div><div class='add'>+    uint32_t to_user;</div><div class='add'>+</div><div class='add'>+    check_buf(frame, this, stbuf);</div><div class='add'>+    check_read(frame, this, op_ret, vec, count, stbuf);</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+</div><div class='add'>+    local-&gt;buf = *stbuf;</div><div class='add'>+    local-&gt;buf.ia_size = local-&gt;cur_file_size;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt;= 0 || count == 0 || vec[0].iov_len == 0)</div><div class='add'>+        goto put_one_call;</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;orig_offset &gt;= local-&gt;cur_file_size) {</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * correct config params with real file size</div><div class='add'>+     * and actual amount of bytes read</div><div class='add'>+     */</div><div class='add'>+    set_config_offsets(frame, this, conf-&gt;orig_offset, op_ret, DATA_ATOM, 0);</div><div class='add'>+</div><div class='add'>+    if (conf-&gt;orig_offset + conf-&gt;orig_size &gt; local-&gt;cur_file_size)</div><div class='add'>+        conf-&gt;orig_size = local-&gt;cur_file_size - conf-&gt;orig_offset;</div><div class='add'>+    /*</div><div class='add'>+     * calculate amount of data to be returned</div><div class='add'>+     * to user.</div><div class='add'>+     */</div><div class='add'>+    to_user = op_ret;</div><div class='add'>+    if (conf-&gt;aligned_offset + to_user &lt;= conf-&gt;orig_offset) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Incomplete read");</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    to_user -= (conf-&gt;aligned_offset - conf-&gt;orig_offset);</div><div class='add'>+</div><div class='add'>+    if (to_user &gt; conf-&gt;orig_size)</div><div class='add'>+        to_user = conf-&gt;orig_size;</div><div class='add'>+    local-&gt;rw_count = to_user;</div><div class='add'>+</div><div class='add'>+    op_errno = set_config_avec_data(this, local, conf, object, vec, count);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    avec = conf-&gt;avec;</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	if (conf-&gt;off_in_tail != 0 &amp;&amp;</div><div class='del'>-	    conf-&gt;off_in_tail &lt; object_alg_blksize(object) &amp;&amp;</div><div class='del'>-	    object_alg_should_pad(object))</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_DEBUG, "Bad offset in tail %d",</div><div class='del'>-		       conf-&gt;off_in_tail);</div><div class='del'>-	if (iov_length(vec, count) != 0 &amp;&amp;</div><div class='del'>-	    in_same_lblock(conf-&gt;orig_offset + iov_length(vec, count) - 1,</div><div class='del'>-			   local-&gt;cur_file_size - 1,</div><div class='del'>-			   object_alg_blkbits(object))) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_DEBUG, "Compound last cblock");</div><div class='del'>-		dump_cblock(this,</div><div class='del'>-			    (unsigned char *)(avec[conf-&gt;acount - 1].iov_base) +</div><div class='del'>-			    avec[conf-&gt;acount - 1].iov_len - object_alg_blksize(object));</div><div class='del'>-		dump_cblock(this,</div><div class='del'>-			    (unsigned char *)(vec[count - 1].iov_base) +</div><div class='del'>-			    vec[count - 1].iov_len - object_alg_blksize(object));</div><div class='del'>-	}</div><div class='add'>+    if (conf-&gt;off_in_tail != 0 &amp;&amp;</div><div class='add'>+        conf-&gt;off_in_tail &lt; object_alg_blksize(object) &amp;&amp;</div><div class='add'>+        object_alg_should_pad(object))</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Bad offset in tail %d",</div><div class='add'>+               conf-&gt;off_in_tail);</div><div class='add'>+    if (iov_length(vec, count) != 0 &amp;&amp;</div><div class='add'>+        in_same_lblock(conf-&gt;orig_offset + iov_length(vec, count) - 1,</div><div class='add'>+                       local-&gt;cur_file_size - 1, object_alg_blkbits(object))) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Compound last cblock");</div><div class='add'>+        dump_cblock(this, (unsigned char *)(avec[conf-&gt;acount - 1].iov_base) +</div><div class='add'>+                              avec[conf-&gt;acount - 1].iov_len -</div><div class='add'>+                              object_alg_blksize(object));</div><div class='add'>+        dump_cblock(this, (unsigned char *)(vec[count - 1].iov_base) +</div><div class='add'>+                              vec[count - 1].iov_len -</div><div class='add'>+                              object_alg_blksize(object));</div><div class='add'>+    }</div><div class='ctx'> #endif</div><div class='del'>-	decrypt_aligned_iov(object, avec,</div><div class='del'>-			    conf-&gt;acount, conf-&gt;aligned_offset);</div><div class='del'>-	/*</div><div class='del'>-	 * pass proper plain data to user</div><div class='del'>-	 */</div><div class='del'>-	avec[0].iov_base += (conf-&gt;aligned_offset - conf-&gt;orig_offset);</div><div class='del'>-	avec[0].iov_len  -= (conf-&gt;aligned_offset - conf-&gt;orig_offset);</div><div class='del'>-</div><div class='del'>-	to_vec = to_user;</div><div class='del'>-	for (i = 0; i &lt; conf-&gt;acount; i++) {</div><div class='del'>-		if (avec[i].iov_len &gt; to_vec)</div><div class='del'>-			avec[i].iov_len = to_vec;</div><div class='del'>-		to_vec -= avec[i].iov_len;</div><div class='del'>-	}</div><div class='del'>- put_one_call:</div><div class='del'>-	put_one_call_readv(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t do_readv(call_frame_t *frame,</div><div class='del'>-			void *cookie,</div><div class='del'>-			xlator_t *this,</div><div class='del'>-			int32_t op_ret,</div><div class='del'>-			int32_t op_errno,</div><div class='del'>-			dict_t *dict,</div><div class='del'>-			dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	data_t *data;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * extract regular file size</div><div class='del'>-	 */</div><div class='del'>-	data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='del'>-	if (!data) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='del'>-		op_errno = EIO;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;cur_file_size = data_to_uint64(data);</div><div class='del'>-</div><div class='del'>-	get_one_call(frame);</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_readv_cbk,</div><div class='del'>-		   FIRST_CHILD (this),</div><div class='del'>-		   FIRST_CHILD (this)-&gt;fops-&gt;readv,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   /*</div><div class='del'>-		    * FIXME: read amount can be reduced</div><div class='del'>-		    */</div><div class='del'>-		   local-&gt;data_conf.expanded_size,</div><div class='del'>-		   local-&gt;data_conf.aligned_offset,</div><div class='del'>-		   local-&gt;flags,</div><div class='del'>-		   local-&gt;xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	get_one_call(frame);</div><div class='del'>-	put_one_call_readv(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_readv_finodelk_cbk(call_frame_t *frame,</div><div class='del'>-					void *cookie,</div><div class='del'>-					xlator_t *this,</div><div class='del'>-					int32_t op_ret,</div><div class='del'>-					int32_t op_errno,</div><div class='del'>-					dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * An access has been granted,</div><div class='del'>-	 * retrieve file size</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   do_readv,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   FSIZE_XATTR_PREFIX,</div><div class='del'>-		   NULL);</div><div class='del'>-	return  0;</div><div class='del'>- error:</div><div class='del'>-	fd_unref(local-&gt;fd);</div><div class='del'>-	if (local-&gt;xdata)</div><div class='del'>-		dict_unref(local-&gt;xdata);</div><div class='del'>-	CRYPT_STACK_UNWIND(readv,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   NULL,</div><div class='del'>-			   0,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t readv_trivial_completion(call_frame_t *frame,</div><div class='del'>-					void *cookie,</div><div class='del'>-					xlator_t *this,</div><div class='del'>-					int32_t op_ret,</div><div class='del'>-					int32_t op_errno,</div><div class='del'>-					struct iatt *buf,</div><div class='del'>-					dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "stat failed (%d)", op_errno);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;buf = *buf;</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   load_file_size,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-		   local-&gt;loc,</div><div class='del'>-		   FSIZE_XATTR_PREFIX,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(readv, frame, op_ret, op_errno,</div><div class='del'>-			   NULL, 0, NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t crypt_readv(call_frame_t *frame,</div><div class='del'>-		    xlator_t *this,</div><div class='del'>-		    fd_t *fd,</div><div class='del'>-		    size_t size,</div><div class='del'>-		    off_t offset,</div><div class='del'>-		    uint32_t flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-	struct gf_flock lock = {0, };</div><div class='add'>+    decrypt_aligned_iov(object, avec, conf-&gt;acount, conf-&gt;aligned_offset);</div><div class='add'>+    /*</div><div class='add'>+     * pass proper plain data to user</div><div class='add'>+     */</div><div class='add'>+    avec[0].iov_base += (conf-&gt;aligned_offset - conf-&gt;orig_offset);</div><div class='add'>+    avec[0].iov_len -= (conf-&gt;aligned_offset - conf-&gt;orig_offset);</div><div class='add'>+</div><div class='add'>+    to_vec = to_user;</div><div class='add'>+    for (i = 0; i &lt; conf-&gt;acount; i++) {</div><div class='add'>+        if (avec[i].iov_len &gt; to_vec)</div><div class='add'>+            avec[i].iov_len = to_vec;</div><div class='add'>+        to_vec -= avec[i].iov_len;</div><div class='add'>+    }</div><div class='add'>+put_one_call:</div><div class='add'>+    put_one_call_readv(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+do_readv(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+         int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    data_t *data;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * extract regular file size</div><div class='add'>+     */</div><div class='add'>+    data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='add'>+    if (!data) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;cur_file_size = data_to_uint64(data);</div><div class='add'>+</div><div class='add'>+    get_one_call(frame);</div><div class='add'>+    STACK_WIND(frame, crypt_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, local-&gt;fd,</div><div class='add'>+               /*</div><div class='add'>+                * FIXME: read amount can be reduced</div><div class='add'>+                */</div><div class='add'>+               local-&gt;data_conf.expanded_size, local-&gt;data_conf.aligned_offset,</div><div class='add'>+               local-&gt;flags, local-&gt;xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    get_one_call(frame);</div><div class='add'>+    put_one_call_readv(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_readv_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * An access has been granted,</div><div class='add'>+     * retrieve file size</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, do_readv, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+               FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    fd_unref(local-&gt;fd);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+    CRYPT_STACK_UNWIND(readv, frame, -1, op_errno, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+readv_trivial_completion(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                         dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "stat failed (%d)", op_errno);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;buf = *buf;</div><div class='add'>+    STACK_WIND(frame, load_file_size, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, local-&gt;loc,</div><div class='add'>+               FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(readv, frame, op_ret, op_errno, NULL, 0, NULL, NULL,</div><div class='add'>+                       NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+crypt_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG, "reading %d bytes from offset %llu",</div><div class='del'>-	       (int)size, (long long)offset);</div><div class='del'>-	if (parent_is_crypt_xlator(frame, this))</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "parent is crypt");</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "reading %d bytes from offset %llu",</div><div class='add'>+           (int)size, (long long)offset);</div><div class='add'>+    if (parent_is_crypt_xlator(frame, this))</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "parent is crypt");</div><div class='ctx'> #endif</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_READ);</div><div class='del'>-	if (!local) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (size == 0)</div><div class='del'>-		goto trivial;</div><div class='del'>-</div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='del'>-	local-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-	info = local_get_inode_info(local, this);</div><div class='del'>-	if (info == NULL) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (!object_alg_atomic(&amp;info-&gt;cinfo)) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	set_config_offsets(frame, this, offset, size,</div><div class='del'>-			   DATA_ATOM, 0);</div><div class='del'>-	if (parent_is_crypt_xlator(frame, this)) {</div><div class='del'>-		data_t *data;</div><div class='del'>-		/*</div><div class='del'>-		 * We are called by crypt_writev (or cypt_ftruncate)</div><div class='del'>-		 * to perform the "read" component of the read-modify-write</div><div class='del'>-		 * (or read-prune-write) sequence for some atom;</div><div class='del'>-		 *</div><div class='del'>-		 * don't ask for access:</div><div class='del'>-		 * it has already been acquired</div><div class='del'>-		 *</div><div class='del'>-		 * Retrieve current file size</div><div class='del'>-		 */</div><div class='del'>-		if (!xdata) {</div><div class='del'>-			gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-			       "Regular file size hasn't been passed");</div><div class='del'>-			ret = EIO;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		data = dict_get(xdata, FSIZE_XATTR_PREFIX);</div><div class='del'>-		if (!data) {</div><div class='del'>-			gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-			       "Regular file size not found");</div><div class='del'>-			ret = EIO;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		local-&gt;old_file_size =</div><div class='del'>-			local-&gt;cur_file_size = data_to_uint64(data);</div><div class='del'>-</div><div class='del'>-		get_one_call(frame);</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   crypt_readv_cbk,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='del'>-			   local-&gt;fd,</div><div class='del'>-			   /*</div><div class='del'>-			    * FIXME: read amount can be reduced</div><div class='del'>-			    */</div><div class='del'>-			   local-&gt;data_conf.expanded_size,</div><div class='del'>-			   local-&gt;data_conf.aligned_offset,</div><div class='del'>-			   flags,</div><div class='del'>-			   NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_READ);</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (size == 0)</div><div class='add'>+        goto trivial;</div><div class='add'>+</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    info = local_get_inode_info(local, this);</div><div class='add'>+    if (info == NULL) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (!object_alg_atomic(&amp;info-&gt;cinfo)) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    set_config_offsets(frame, this, offset, size, DATA_ATOM, 0);</div><div class='add'>+    if (parent_is_crypt_xlator(frame, this)) {</div><div class='add'>+        data_t *data;</div><div class='add'>+        /*</div><div class='add'>+         * We are called by crypt_writev (or cypt_ftruncate)</div><div class='add'>+         * to perform the "read" component of the read-modify-write</div><div class='add'>+         * (or read-prune-write) sequence for some atom;</div><div class='add'>+         *</div><div class='add'>+         * don't ask for access:</div><div class='add'>+         * it has already been acquired</div><div class='add'>+         *</div><div class='add'>+         * Retrieve current file size</div><div class='add'>+         */</div><div class='add'>+        if (!xdata) {</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING,</div><div class='add'>+                   "Regular file size hasn't been passed");</div><div class='add'>+            ret = EIO;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+        data = dict_get(xdata, FSIZE_XATTR_PREFIX);</div><div class='add'>+        if (!data) {</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='add'>+            ret = EIO;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;old_file_size = local-&gt;cur_file_size = data_to_uint64(data);</div><div class='add'>+</div><div class='add'>+        get_one_call(frame);</div><div class='add'>+        STACK_WIND(frame, crypt_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;readv, local-&gt;fd,</div><div class='add'>+                   /*</div><div class='add'>+                    * FIXME: read amount can be reduced</div><div class='add'>+                    */</div><div class='add'>+                   local-&gt;data_conf.expanded_size,</div><div class='add'>+                   local-&gt;data_conf.aligned_offset, flags, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_readv_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, fd, F_SETLKW,</div><div class='add'>+               &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+trivial:</div><div class='add'>+    STACK_WIND(frame, readv_trivial_completion, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(readv, frame, -1, ret, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+set_local_io_params_writev(call_frame_t *frame,</div><div class='add'>+                           struct object_cipher_info *object,</div><div class='add'>+                           struct rmw_atom *atom, off_t io_offset,</div><div class='add'>+                           uint32_t io_size)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;io_offset = io_offset;</div><div class='add'>+    local-&gt;io_size = io_size;</div><div class='add'>+</div><div class='add'>+    local-&gt;io_offset_nopad = atom-&gt;offset_at(frame, object) +</div><div class='add'>+                             atom-&gt;offset_in(frame, object);</div><div class='add'>+</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "set nopad offset to %llu",</div><div class='add'>+           (unsigned long long)local-&gt;io_offset_nopad);</div><div class='add'>+</div><div class='add'>+    local-&gt;io_size_nopad = atom-&gt;io_size_nopad(frame, object);</div><div class='add'>+</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "set nopad size to %llu",</div><div class='add'>+           (unsigned long long)local-&gt;io_size_nopad);</div><div class='add'>+</div><div class='add'>+    local-&gt;update_disk_file_size = 0;</div><div class='add'>+    /*</div><div class='add'>+     * NOTE: eof_padding_size is 0 for all full atoms;</div><div class='add'>+     * For head and tail atoms it will be set up at rmw_partial block()</div><div class='add'>+     */</div><div class='add'>+    local-&gt;new_file_size = local-&gt;cur_file_size;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;io_offset_nopad + local-&gt;io_size_nopad &gt; local-&gt;cur_file_size) {</div><div class='add'>+        local-&gt;new_file_size = local-&gt;io_offset_nopad + local-&gt;io_size_nopad;</div><div class='add'>+</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "set new file size to %llu",</div><div class='add'>+               (unsigned long long)local-&gt;new_file_size);</div><div class='add'>+</div><div class='add'>+        local-&gt;update_disk_file_size = 1;</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+set_local_io_params_ftruncate(call_frame_t *frame,</div><div class='add'>+                              struct object_cipher_info *object)</div><div class='add'>+{</div><div class='add'>+    uint32_t resid;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+</div><div class='add'>+    resid = conf-&gt;orig_offset &amp; (object_alg_blksize(object) - 1);</div><div class='add'>+    if (resid) {</div><div class='add'>+        local-&gt;eof_padding_size = object_alg_blksize(object) - resid;</div><div class='add'>+        local-&gt;new_file_size = conf-&gt;aligned_offset;</div><div class='add'>+        local-&gt;update_disk_file_size = 0;</div><div class='add'>+        /*</div><div class='add'>+         * file size will be updated</div><div class='add'>+         * in the -&gt;writev() stack,</div><div class='add'>+         * when submitting file tail</div><div class='add'>+         */</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;eof_padding_size = 0;</div><div class='add'>+        local-&gt;new_file_size = conf-&gt;orig_offset;</div><div class='add'>+        local-&gt;update_disk_file_size = 1;</div><div class='add'>+        /*</div><div class='add'>+         * file size will be updated</div><div class='add'>+         * in this -&gt;ftruncate stack</div><div class='add'>+         */</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+submit_head(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    submit_partial(frame, this, local-&gt;fd, HEAD_ATOM);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_readv_finodelk_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- trivial:</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   readv_trivial_completion,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-		   fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(readv,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   ret,</div><div class='del'>-			   NULL,</div><div class='del'>-			   0,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void set_local_io_params_writev(call_frame_t *frame,</div><div class='del'>-				struct object_cipher_info *object,</div><div class='del'>-				struct rmw_atom *atom,</div><div class='del'>-				off_t io_offset,</div><div class='del'>-				uint32_t io_size)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;io_offset = io_offset;</div><div class='del'>-	local-&gt;io_size = io_size;</div><div class='del'>-</div><div class='del'>-	local-&gt;io_offset_nopad =</div><div class='del'>-		atom-&gt;offset_at(frame, object) + atom-&gt;offset_in(frame, object);</div><div class='del'>-</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "set nopad offset to %llu",</div><div class='del'>-	       (unsigned long long)local-&gt;io_offset_nopad);</div><div class='del'>-</div><div class='del'>-	local-&gt;io_size_nopad = atom-&gt;io_size_nopad(frame, object);</div><div class='del'>-</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "set nopad size to %llu",</div><div class='del'>-	       (unsigned long long)local-&gt;io_size_nopad);</div><div class='del'>-</div><div class='del'>-	local-&gt;update_disk_file_size = 0;</div><div class='del'>-	/*</div><div class='del'>-	 * NOTE: eof_padding_size is 0 for all full atoms;</div><div class='del'>-	 * For head and tail atoms it will be set up at rmw_partial block()</div><div class='del'>-	 */</div><div class='del'>-	local-&gt;new_file_size = local-&gt;cur_file_size;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;io_offset_nopad + local-&gt;io_size_nopad &gt; local-&gt;cur_file_size) {</div><div class='del'>-</div><div class='del'>-		local-&gt;new_file_size = local-&gt;io_offset_nopad + local-&gt;io_size_nopad;</div><div class='del'>-</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-		       "set new file size to %llu",</div><div class='del'>-		       (unsigned long long)local-&gt;new_file_size);</div><div class='del'>-</div><div class='del'>-		local-&gt;update_disk_file_size = 1;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void set_local_io_params_ftruncate(call_frame_t *frame,</div><div class='del'>-				   struct object_cipher_info *object)</div><div class='del'>-{</div><div class='del'>-	uint32_t resid;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='del'>-</div><div class='del'>-	resid = conf-&gt;orig_offset &amp; (object_alg_blksize(object) - 1);</div><div class='del'>-	if (resid) {</div><div class='del'>-		local-&gt;eof_padding_size =</div><div class='del'>-			object_alg_blksize(object) - resid;</div><div class='del'>-		local-&gt;new_file_size = conf-&gt;aligned_offset;</div><div class='del'>-		local-&gt;update_disk_file_size = 0;</div><div class='del'>-		/*</div><div class='del'>-		 * file size will be updated</div><div class='del'>-		 * in the -&gt;writev() stack,</div><div class='del'>-		 * when submitting file tail</div><div class='del'>-		 */</div><div class='del'>-	} else {</div><div class='del'>-		local-&gt;eof_padding_size = 0;</div><div class='del'>-		local-&gt;new_file_size = conf-&gt;orig_offset;</div><div class='del'>-		local-&gt;update_disk_file_size = 1;</div><div class='del'>-		/*</div><div class='del'>-		 * file size will be updated</div><div class='del'>-		 * in this -&gt;ftruncate stack</div><div class='del'>-		 */</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void submit_head(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	submit_partial(frame, this, local-&gt;fd, HEAD_ATOM);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void submit_tail(call_frame_t *frame, xlator_t *this)</div><div class='add'>+static void</div><div class='add'>+submit_tail(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	submit_partial(frame, this, local-&gt;fd, TAIL_ATOM);</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    submit_partial(frame, this, local-&gt;fd, TAIL_ATOM);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void submit_hole(call_frame_t *frame, xlator_t *this)</div><div class='add'>+static void</div><div class='add'>+submit_hole(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	/*</div><div class='del'>-	 * hole conversion always means</div><div class='del'>-	 * appended write and goes in ordered fashion</div><div class='del'>-	 */</div><div class='del'>-	do_ordered_submit(frame, this, HOLE_ATOM);</div><div class='add'>+    /*</div><div class='add'>+     * hole conversion always means</div><div class='add'>+     * appended write and goes in ordered fashion</div><div class='add'>+     */</div><div class='add'>+    do_ordered_submit(frame, this, HOLE_ATOM);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void submit_data(call_frame_t *frame, xlator_t *this)</div><div class='add'>+static void</div><div class='add'>+submit_data(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	if (is_ordered_mode(frame)) {</div><div class='del'>-		do_ordered_submit(frame, this, DATA_ATOM);</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	gf_log("crypt", GF_LOG_WARNING, "Bad submit mode");</div><div class='del'>-	get_nr_calls(frame, nr_calls_data(frame));</div><div class='del'>-	do_parallel_submit(frame, this, DATA_ATOM);</div><div class='del'>-	return;</div><div class='add'>+    if (is_ordered_mode(frame)) {</div><div class='add'>+        do_ordered_submit(frame, this, DATA_ATOM);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    gf_log("crypt", GF_LOG_WARNING, "Bad submit mode");</div><div class='add'>+    get_nr_calls(frame, nr_calls_data(frame));</div><div class='add'>+    do_parallel_submit(frame, this, DATA_ATOM);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * heplers called by writev_cbk, fruncate_cbk in ordered mode</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-static int32_t should_submit_hole(crypt_local_t *local)</div><div class='add'>+static int32_t</div><div class='add'>+should_submit_hole(crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;hole_conf;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;hole_conf;</div><div class='ctx'> </div><div class='del'>-	return conf-&gt;avec != NULL;</div><div class='add'>+    return conf-&gt;avec != NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t should_resume_submit_hole(crypt_local_t *local)</div><div class='add'>+static int32_t</div><div class='add'>+should_resume_submit_hole(crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;hole_conf;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;hole_conf;</div><div class='ctx'> </div><div class='del'>-	if (local-&gt;fop == GF_FOP_WRITE &amp;&amp; has_tail_block(conf))</div><div class='del'>-		/*</div><div class='del'>-		 * Don't submit a part of hole, which</div><div class='del'>-		 * fits into a data block:</div><div class='del'>- 		 * this part of hole will be converted</div><div class='del'>-		 * as a gap filled by zeros in data head</div><div class='del'>-		 * block.</div><div class='del'>-		 */</div><div class='del'>-		return conf-&gt;cursor &lt; conf-&gt;acount - 1;</div><div class='del'>-	else</div><div class='del'>-		return conf-&gt;cursor &lt; conf-&gt;acount;</div><div class='add'>+    if (local-&gt;fop == GF_FOP_WRITE &amp;&amp; has_tail_block(conf))</div><div class='add'>+        /*</div><div class='add'>+         * Don't submit a part of hole, which</div><div class='add'>+         * fits into a data block:</div><div class='add'>+         * this part of hole will be converted</div><div class='add'>+         * as a gap filled by zeros in data head</div><div class='add'>+         * block.</div><div class='add'>+         */</div><div class='add'>+        return conf-&gt;cursor &lt; conf-&gt;acount - 1;</div><div class='add'>+    else</div><div class='add'>+        return conf-&gt;cursor &lt; conf-&gt;acount;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t should_resume_submit_data(call_frame_t *frame)</div><div class='add'>+static int32_t</div><div class='add'>+should_resume_submit_data(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='ctx'> </div><div class='del'>-	if (is_ordered_mode(frame))</div><div class='del'>-		return conf-&gt;cursor &lt; conf-&gt;acount;</div><div class='del'>-	/*</div><div class='del'>-	 * parallel writes</div><div class='del'>-	 */</div><div class='del'>-	return 0;</div><div class='add'>+    if (is_ordered_mode(frame))</div><div class='add'>+        return conf-&gt;cursor &lt; conf-&gt;acount;</div><div class='add'>+    /*</div><div class='add'>+     * parallel writes</div><div class='add'>+     */</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t should_submit_data_after_hole(crypt_local_t *local)</div><div class='add'>+static int32_t</div><div class='add'>+should_submit_data_after_hole(crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	return local-&gt;data_conf.avec != NULL;</div><div class='add'>+    return local-&gt;data_conf.avec != NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void update_local_file_params(call_frame_t *frame,</div><div class='del'>-				     xlator_t *this,</div><div class='del'>-				     struct iatt *prebuf,</div><div class='del'>-				     struct iatt *postbuf)</div><div class='add'>+static void</div><div class='add'>+update_local_file_params(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                         struct iatt *prebuf, struct iatt *postbuf)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	check_buf(frame, this, postbuf);</div><div class='add'>+    check_buf(frame, this, postbuf);</div><div class='ctx'> </div><div class='del'>-	local-&gt;prebuf = *prebuf;</div><div class='del'>-	local-&gt;postbuf = *postbuf;</div><div class='add'>+    local-&gt;prebuf = *prebuf;</div><div class='add'>+    local-&gt;postbuf = *postbuf;</div><div class='ctx'> </div><div class='del'>-	local-&gt;prebuf.ia_size  = local-&gt;cur_file_size;</div><div class='del'>-	local-&gt;postbuf.ia_size = local-&gt;new_file_size;</div><div class='add'>+    local-&gt;prebuf.ia_size = local-&gt;cur_file_size;</div><div class='add'>+    local-&gt;postbuf.ia_size = local-&gt;new_file_size;</div><div class='ctx'> </div><div class='del'>-	local-&gt;cur_file_size = local-&gt;new_file_size;</div><div class='add'>+    local-&gt;cur_file_size = local-&gt;new_file_size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t end_writeback_writev(call_frame_t *frame,</div><div class='del'>-				    void *cookie,</div><div class='del'>-				    xlator_t *this,</div><div class='del'>-				    int32_t op_ret,</div><div class='del'>-				    int32_t op_errno,</div><div class='del'>-				    struct iatt *prebuf,</div><div class='del'>-				    struct iatt *postbuf,</div><div class='del'>-				    dict_t *xdata)</div><div class='add'>+static int32_t</div><div class='add'>+end_writeback_writev(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	if (op_ret &lt;= 0) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "writev iteration failed");</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * op_ret includes paddings (atom's head, atom's tail and EOF)</div><div class='del'>-	 */</div><div class='del'>-	if (op_ret &lt; local-&gt;io_size) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "Incomplete writev iteration");</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	op_ret -= local-&gt;eof_padding_size;</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-	update_local_file_params(frame, this, prebuf, postbuf);</div><div class='add'>+    if (op_ret &lt;= 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "writev iteration failed");</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * op_ret includes paddings (atom's head, atom's tail and EOF)</div><div class='add'>+     */</div><div class='add'>+    if (op_ret &lt; local-&gt;io_size) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Incomplete writev iteration");</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    op_ret -= local-&gt;eof_padding_size;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='ctx'> </div><div class='del'>-	if (data_write_in_progress(local)) {</div><div class='add'>+    update_local_file_params(frame, this, prebuf, postbuf);</div><div class='ctx'> </div><div class='del'>-		LOCK(&amp;local-&gt;rw_count_lock);</div><div class='del'>-		local-&gt;rw_count += op_ret;</div><div class='del'>-		UNLOCK(&amp;local-&gt;rw_count_lock);</div><div class='add'>+    if (data_write_in_progress(local)) {</div><div class='add'>+        LOCK(&amp;local-&gt;rw_count_lock);</div><div class='add'>+        local-&gt;rw_count += op_ret;</div><div class='add'>+        UNLOCK(&amp;local-&gt;rw_count_lock);</div><div class='ctx'> </div><div class='del'>-		if (should_resume_submit_data(frame))</div><div class='del'>-			submit_data(frame, this);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-		/*</div><div class='del'>-		 * hole conversion is going on;</div><div class='del'>-		 * don't take into account written zeros</div><div class='del'>-		 */</div><div class='del'>-		if (should_resume_submit_hole(local))</div><div class='del'>-			submit_hole(frame, this);</div><div class='add'>+        if (should_resume_submit_data(frame))</div><div class='add'>+            submit_data(frame, this);</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * hole conversion is going on;</div><div class='add'>+         * don't take into account written zeros</div><div class='add'>+         */</div><div class='add'>+        if (should_resume_submit_hole(local))</div><div class='add'>+            submit_hole(frame, this);</div><div class='ctx'> </div><div class='del'>-		else if (should_submit_data_after_hole(local))</div><div class='del'>-			submit_data(frame, this);</div><div class='del'>-	}</div><div class='del'>- put_one_call:</div><div class='del'>-	put_one_call_writev(frame, this);</div><div class='del'>-	return 0;</div><div class='add'>+        else if (should_submit_data_after_hole(local))</div><div class='add'>+            submit_data(frame, this);</div><div class='add'>+    }</div><div class='add'>+put_one_call:</div><div class='add'>+    put_one_call_writev(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define crypt_writev_cbk end_writeback_writev</div><div class='hunk'>@@ -853,363 +791,331 @@ static int32_t end_writeback_writev(call_frame_t *frame,</div><div class='ctx'>  * Pre-conditions:</div><div class='ctx'>  * @local-&gt;file_size is set and valid.</div><div class='ctx'>  */</div><div class='del'>-int32_t prepare_for_submit_hole(call_frame_t *frame, xlator_t *this,</div><div class='del'>-				uint64_t off, off_t size)</div><div class='add'>+int32_t</div><div class='add'>+prepare_for_submit_hole(call_frame_t *frame, xlator_t *this, uint64_t off,</div><div class='add'>+                        off_t size)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='ctx'> </div><div class='del'>-	set_config_offsets(frame, this, off, size, HOLE_ATOM, 1);</div><div class='add'>+    set_config_offsets(frame, this, off, size, HOLE_ATOM, 1);</div><div class='ctx'> </div><div class='del'>-	ret = set_config_avec_hole(this, local,</div><div class='del'>-				   &amp;local-&gt;hole_conf, object, local-&gt;fop);</div><div class='del'>-	crypt_check_conf(&amp;local-&gt;hole_conf);</div><div class='add'>+    ret = set_config_avec_hole(this, local, &amp;local-&gt;hole_conf, object,</div><div class='add'>+                               local-&gt;fop);</div><div class='add'>+    crypt_check_conf(&amp;local-&gt;hole_conf);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * prepare for submit @count bytes at offset @from</div><div class='ctx'>  */</div><div class='del'>-int32_t prepare_for_submit_data(call_frame_t *frame, xlator_t *this,</div><div class='del'>-				off_t from, int32_t size, struct iovec *vec,</div><div class='del'>-				int32_t vec_count, int32_t setup_gap)</div><div class='add'>+int32_t</div><div class='add'>+prepare_for_submit_data(call_frame_t *frame, xlator_t *this, off_t from,</div><div class='add'>+                        int32_t size, struct iovec *vec, int32_t vec_count,</div><div class='add'>+                        int32_t setup_gap)</div><div class='ctx'> {</div><div class='del'>-	uint32_t ret;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+    uint32_t ret;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='ctx'> </div><div class='del'>-	set_config_offsets(frame, this, from, size,</div><div class='del'>-			   DATA_ATOM, setup_gap);</div><div class='add'>+    set_config_offsets(frame, this, from, size, DATA_ATOM, setup_gap);</div><div class='ctx'> </div><div class='del'>-	ret = set_config_avec_data(this, local,</div><div class='del'>-				   &amp;local-&gt;data_conf, object, vec, vec_count);</div><div class='del'>-	crypt_check_conf(&amp;local-&gt;data_conf);</div><div class='add'>+    ret = set_config_avec_data(this, local, &amp;local-&gt;data_conf, object, vec,</div><div class='add'>+                               vec_count);</div><div class='add'>+    crypt_check_conf(&amp;local-&gt;data_conf);</div><div class='ctx'> </div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+free_avec(struct iovec *avec, char **pool, int blocks_in_pool)</div><div class='add'>+{</div><div class='add'>+    if (!avec)</div><div class='add'>+        return;</div><div class='add'>+    GF_FREE(pool);</div><div class='add'>+    GF_FREE(avec);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+free_avec_data(crypt_local_t *local)</div><div class='add'>+{</div><div class='add'>+    return free_avec(local-&gt;data_conf.avec, local-&gt;data_conf.pool,</div><div class='add'>+                     local-&gt;data_conf.blocks_in_pool);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+free_avec_hole(crypt_local_t *local)</div><div class='add'>+{</div><div class='add'>+    return free_avec(local-&gt;hole_conf.avec, local-&gt;hole_conf.pool,</div><div class='add'>+                     local-&gt;hole_conf.blocks_in_pool);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+do_parallel_submit(call_frame_t *frame, xlator_t *this, atom_data_type dtype)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf;</div><div class='add'>+</div><div class='add'>+    local-&gt;active_setup = dtype;</div><div class='add'>+    conf = conf_by_type(frame, dtype);</div><div class='add'>+</div><div class='add'>+    if (has_head_block(conf))</div><div class='add'>+        submit_head(frame, this);</div><div class='add'>+</div><div class='add'>+    if (has_full_blocks(conf))</div><div class='add'>+        submit_full(frame, this);</div><div class='add'>+</div><div class='add'>+    if (has_tail_block(conf))</div><div class='add'>+        submit_tail(frame, this);</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+do_ordered_submit(call_frame_t *frame, xlator_t *this, atom_data_type dtype)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf;</div><div class='add'>+</div><div class='add'>+    local-&gt;active_setup = dtype;</div><div class='add'>+    conf = conf_by_type(frame, dtype);</div><div class='add'>+</div><div class='add'>+    if (should_submit_head_block(conf)) {</div><div class='add'>+        get_one_call_nolock(frame);</div><div class='add'>+        submit_head(frame, this);</div><div class='add'>+    } else if (should_submit_full_block(conf)) {</div><div class='add'>+        get_one_call_nolock(frame);</div><div class='add'>+        submit_full(frame, this);</div><div class='add'>+    } else if (should_submit_tail_block(conf)) {</div><div class='add'>+        get_one_call_nolock(frame);</div><div class='add'>+        submit_tail(frame, this);</div><div class='add'>+    } else</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+               "nothing has been submitted in ordered mode");</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+do_writev(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+          int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    data_t *data;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+    /*</div><div class='add'>+     * extract regular file size</div><div class='add'>+     */</div><div class='add'>+    data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='add'>+    if (!data) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;old_file_size = local-&gt;cur_file_size = data_to_uint64(data);</div><div class='add'>+</div><div class='add'>+    set_gap_at_end(frame, object, &amp;local-&gt;data_conf, DATA_ATOM);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;cur_file_size &lt; local-&gt;data_conf.orig_offset) {</div><div class='add'>+        /*</div><div class='add'>+         * Set up hole config</div><div class='add'>+         */</div><div class='add'>+        op_errno = prepare_for_submit_hole(</div><div class='add'>+            frame, this, local-&gt;cur_file_size,</div><div class='add'>+            local-&gt;data_conf.orig_offset - local-&gt;cur_file_size);</div><div class='add'>+        if (op_errno) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (should_submit_hole(local))</div><div class='add'>+        submit_hole(frame, this);</div><div class='add'>+    else</div><div class='add'>+        submit_data(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    get_one_call_nolock(frame);</div><div class='add'>+    put_one_call_writev(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_writev_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * An access has been granted,</div><div class='add'>+     * retrieve file size first</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, do_writev, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+               FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    get_one_call_nolock(frame);</div><div class='add'>+    put_one_call_writev(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void free_avec(struct iovec *avec,</div><div class='del'>-		      char **pool, int blocks_in_pool)</div><div class='add'>+static int32_t</div><div class='add'>+writev_trivial_completion(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                          dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-	if (!avec)</div><div class='del'>-		return;</div><div class='del'>-	GF_FREE(pool);</div><div class='del'>-	GF_FREE(avec);</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;prebuf = *buf;</div><div class='add'>+    local-&gt;postbuf = *buf;</div><div class='add'>+</div><div class='add'>+    local-&gt;prebuf.ia_size = local-&gt;cur_file_size;</div><div class='add'>+    local-&gt;postbuf.ia_size = local-&gt;cur_file_size;</div><div class='add'>+</div><div class='add'>+    get_one_call(frame);</div><div class='add'>+    put_one_call_writev(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void free_avec_data(crypt_local_t *local)</div><div class='del'>-{</div><div class='del'>-	return free_avec(local-&gt;data_conf.avec,</div><div class='del'>-			 local-&gt;data_conf.pool,</div><div class='del'>-			 local-&gt;data_conf.blocks_in_pool);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void free_avec_hole(crypt_local_t *local)</div><div class='del'>-{</div><div class='del'>-	return free_avec(local-&gt;hole_conf.avec,</div><div class='del'>-			 local-&gt;hole_conf.pool,</div><div class='del'>-			 local-&gt;hole_conf.blocks_in_pool);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void do_parallel_submit(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			       atom_data_type dtype)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf;</div><div class='del'>-</div><div class='del'>-	local-&gt;active_setup = dtype;</div><div class='del'>-	conf = conf_by_type(frame, dtype);</div><div class='del'>-</div><div class='del'>-	if (has_head_block(conf))</div><div class='del'>-		submit_head(frame, this);</div><div class='del'>-</div><div class='del'>-	if (has_full_blocks(conf))</div><div class='del'>-		submit_full(frame, this);</div><div class='del'>-</div><div class='del'>-	if (has_tail_block(conf))</div><div class='del'>-		submit_tail(frame, this);</div><div class='del'>-	return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void do_ordered_submit(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			      atom_data_type dtype)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf;</div><div class='del'>-</div><div class='del'>-	local-&gt;active_setup = dtype;</div><div class='del'>-	conf = conf_by_type(frame, dtype);</div><div class='del'>-</div><div class='del'>-	if (should_submit_head_block(conf)) {</div><div class='del'>-		get_one_call_nolock(frame);</div><div class='del'>-		submit_head(frame, this);</div><div class='del'>-	}</div><div class='del'>-	else if (should_submit_full_block(conf)) {</div><div class='del'>-		get_one_call_nolock(frame);</div><div class='del'>-		submit_full(frame, this);</div><div class='del'>-	}</div><div class='del'>-	else if (should_submit_tail_block(conf)) {</div><div class='del'>-		get_one_call_nolock(frame);</div><div class='del'>-		submit_tail(frame, this);</div><div class='del'>-	}</div><div class='del'>-	else</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-		       "nothing has been submitted in ordered mode");</div><div class='del'>-	return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t do_writev(call_frame_t *frame,</div><div class='del'>-			 void *cookie,</div><div class='del'>-			 xlator_t *this,</div><div class='del'>-			 int32_t op_ret,</div><div class='del'>-			 int32_t op_errno,</div><div class='del'>-			 dict_t *dict,</div><div class='del'>-			 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	data_t *data;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-	/*</div><div class='del'>-	 * extract regular file size</div><div class='del'>-	 */</div><div class='del'>-	data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='del'>-	if (!data) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='del'>-		op_ret = -1;</div><div class='del'>-		op_errno = EIO;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;old_file_size = local-&gt;cur_file_size = data_to_uint64(data);</div><div class='del'>-</div><div class='del'>-	set_gap_at_end(frame, object, &amp;local-&gt;data_conf, DATA_ATOM);</div><div class='del'>-</div><div class='del'>-	if (local-&gt;cur_file_size &lt; local-&gt;data_conf.orig_offset) {</div><div class='del'>-		/*</div><div class='del'>-		 * Set up hole config</div><div class='del'>-		 */</div><div class='del'>-		op_errno = prepare_for_submit_hole(frame,</div><div class='del'>-			       this,</div><div class='del'>-			       local-&gt;cur_file_size,</div><div class='del'>-			       local-&gt;data_conf.orig_offset - local-&gt;cur_file_size);</div><div class='del'>-		if (op_errno) {</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = op_errno;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	if (should_submit_hole(local))</div><div class='del'>-		submit_hole(frame, this);</div><div class='del'>-	else</div><div class='del'>-		submit_data(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	get_one_call_nolock(frame);</div><div class='del'>-	put_one_call_writev(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_writev_finodelk_cbk(call_frame_t *frame,</div><div class='del'>-					 void *cookie,</div><div class='del'>-					 xlator_t *this,</div><div class='del'>-					 int32_t op_ret,</div><div class='del'>-					 int32_t op_errno,</div><div class='del'>-					 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * An access has been granted,</div><div class='del'>-	 * retrieve file size first</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   do_writev,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   FSIZE_XATTR_PREFIX,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	get_one_call_nolock(frame);</div><div class='del'>-	put_one_call_writev(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t writev_trivial_completion(call_frame_t *frame,</div><div class='del'>-					 void *cookie,</div><div class='del'>-					 xlator_t *this,</div><div class='del'>-					 int32_t op_ret,</div><div class='del'>-					 int32_t op_errno,</div><div class='del'>-					 struct iatt *buf,</div><div class='del'>-					 dict_t *dict)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	local-&gt;prebuf = *buf;</div><div class='del'>-	local-&gt;postbuf = *buf;</div><div class='del'>-</div><div class='del'>-	local-&gt;prebuf.ia_size = local-&gt;cur_file_size;</div><div class='del'>-	local-&gt;postbuf.ia_size = local-&gt;cur_file_size;</div><div class='del'>-</div><div class='del'>-	get_one_call(frame);</div><div class='del'>-	put_one_call_writev(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int crypt_writev(call_frame_t *frame,</div><div class='del'>-		 xlator_t *this,</div><div class='del'>-		 fd_t *fd,</div><div class='del'>-		 struct iovec *vec,</div><div class='del'>-		 int32_t count,</div><div class='del'>-		 off_t offset,</div><div class='del'>-		 uint32_t flags,</div><div class='del'>-		 struct iobref *iobref,</div><div class='del'>-		 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-	struct gf_flock lock = {0, };</div><div class='add'>+int</div><div class='add'>+crypt_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vec,</div><div class='add'>+             int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	gf_log ("crypt", GF_LOG_DEBUG, "writing %d bytes from offset %llu",</div><div class='del'>-		(int)iov_length(vec, count), (long long)offset);</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "writing %d bytes from offset %llu",</div><div class='add'>+           (int)iov_length(vec, count), (long long)offset);</div><div class='ctx'> #endif</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_WRITE);</div><div class='del'>-	if (!local) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='del'>-</div><div class='del'>-	if (iobref)</div><div class='del'>-		local-&gt;iobref = iobref_ref(iobref);</div><div class='del'>-	/*</div><div class='del'>-	 * to update real file size on the server</div><div class='del'>-	 */</div><div class='del'>-	local-&gt;xattr = dict_new();</div><div class='del'>-	if (!local-&gt;xattr) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;flags = flags;</div><div class='del'>-</div><div class='del'>-	info = local_get_inode_info(local, this);</div><div class='del'>-	if (info == NULL) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (!object_alg_atomic(&amp;info-&gt;cinfo)) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (iov_length(vec, count) == 0)</div><div class='del'>-		goto trivial;</div><div class='del'>-</div><div class='del'>-	ret = prepare_for_submit_data(frame, this, offset,</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_WRITE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+</div><div class='add'>+    if (iobref)</div><div class='add'>+        local-&gt;iobref = iobref_ref(iobref);</div><div class='add'>+    /*</div><div class='add'>+     * to update real file size on the server</div><div class='add'>+     */</div><div class='add'>+    local-&gt;xattr = dict_new();</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+</div><div class='add'>+    info = local_get_inode_info(local, this);</div><div class='add'>+    if (info == NULL) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (!object_alg_atomic(&amp;info-&gt;cinfo)) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (iov_length(vec, count) == 0)</div><div class='add'>+        goto trivial;</div><div class='add'>+</div><div class='add'>+    ret = prepare_for_submit_data(frame, this, offset,</div><div class='ctx'> 				      iov_length(vec, count),</div><div class='ctx'> 				      vec, count, 0 /* don't setup gup</div><div class='ctx'> 						       in tail: we don't</div><div class='ctx'> 						       know file size yet */);</div><div class='del'>-	if (ret) {</div><div class='del'>-                ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (parent_is_crypt_xlator(frame, this)) {</div><div class='add'>+        data_t *data;</div><div class='add'>+        /*</div><div class='add'>+         * we are called by shinking crypt_ftruncate(),</div><div class='add'>+         * which doesn't perform hole conversion;</div><div class='add'>+         *</div><div class='add'>+         * don't ask for access:</div><div class='add'>+         * it has already been acquired</div><div class='add'>+         */</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * extract file size</div><div class='add'>+         */</div><div class='add'>+        if (!xdata) {</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING,</div><div class='add'>+                   "Regular file size hasn't been passed");</div><div class='add'>+            ret = EIO;</div><div class='add'>+            goto error;</div><div class='ctx'>         }</div><div class='add'>+        data = dict_get(xdata, FSIZE_XATTR_PREFIX);</div><div class='add'>+        if (!data) {</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='add'>+            ret = EIO;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+        local-&gt;old_file_size = local-&gt;cur_file_size = data_to_uint64(data);</div><div class='ctx'> </div><div class='del'>-	if (parent_is_crypt_xlator(frame, this)) {</div><div class='del'>-		data_t *data;</div><div class='del'>-		/*</div><div class='del'>-		 * we are called by shinking crypt_ftruncate(),</div><div class='del'>-		 * which doesn't perform hole conversion;</div><div class='del'>-		 *</div><div class='del'>-		 * don't ask for access:</div><div class='del'>-		 * it has already been acquired</div><div class='del'>-		 */</div><div class='del'>-</div><div class='del'>-		/*</div><div class='del'>-		 * extract file size</div><div class='del'>-		 */</div><div class='del'>-		if (!xdata) {</div><div class='del'>-			gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-			       "Regular file size hasn't been passed");</div><div class='del'>-			ret = EIO;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		data = dict_get(xdata, FSIZE_XATTR_PREFIX);</div><div class='del'>-		if (!data) {</div><div class='del'>-			gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-			       "Regular file size not found");</div><div class='del'>-			ret = EIO;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		local-&gt;old_file_size =</div><div class='del'>-			local-&gt;cur_file_size = data_to_uint64(data);</div><div class='del'>-</div><div class='del'>-		submit_data(frame, this);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-	/*</div><div class='del'>-	 * lock the file and retrieve its size</div><div class='del'>-	 */</div><div class='del'>-	lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='add'>+        submit_data(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    /*</div><div class='add'>+     * lock the file and retrieve its size</div><div class='add'>+     */</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_writev_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, fd, F_SETLKW,</div><div class='add'>+               &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+trivial:</div><div class='add'>+    STACK_WIND(frame, writev_trivial_completion, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    if (local &amp;&amp; local-&gt;fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (local &amp;&amp; local-&gt;iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (local &amp;&amp; local-&gt;xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (local &amp;&amp; local-&gt;xattr)</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='add'>+    if (local &amp;&amp; local-&gt;info)</div><div class='add'>+        free_inode_info(local-&gt;info);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_writev_finodelk_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- trivial:</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   writev_trivial_completion,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-		   fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	if (local &amp;&amp; local-&gt;fd)</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-	if (local &amp;&amp; local-&gt;iobref)</div><div class='del'>-		iobref_unref(iobref);</div><div class='del'>-	if (local &amp;&amp; local-&gt;xdata)</div><div class='del'>-		dict_unref(xdata);</div><div class='del'>-	if (local &amp;&amp; local-&gt;xattr)</div><div class='del'>-		dict_unref(local-&gt;xattr);</div><div class='del'>-	if (local &amp;&amp; local-&gt;info)</div><div class='del'>-		free_inode_info(local-&gt;info);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(writev, frame, -1, ret, NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t prepare_for_prune(call_frame_t *frame, xlator_t *this, uint64_t offset)</div><div class='del'>-{</div><div class='del'>-	set_config_offsets(frame, this,</div><div class='add'>+    CRYPT_STACK_UNWIND(writev, frame, -1, ret, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+prepare_for_prune(call_frame_t *frame, xlator_t *this, uint64_t offset)</div><div class='add'>+{</div><div class='add'>+    set_config_offsets(frame, this,</div><div class='ctx'> 			   offset,</div><div class='ctx'> 			   0, /* count */</div><div class='ctx'> 			   DATA_ATOM,</div><div class='ctx'> 			   0 /* since we prune, there is no</div><div class='ctx'> 				gap in tail to uptodate */);</div><div class='del'>-	return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1220,24 +1126,20 @@ int32_t prepare_for_prune(call_frame_t *frame, xlator_t *this, uint64_t offset)</div><div class='ctx'>  * 2) -&gt;writev_cbk() for non-cblock-aligned prune</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-static int32_t prune_complete(call_frame_t *frame,</div><div class='del'>-			      void *cookie,</div><div class='del'>-			      xlator_t *this,</div><div class='del'>-			      int32_t op_ret,</div><div class='del'>-			      int32_t op_errno,</div><div class='del'>-			      struct iatt *prebuf,</div><div class='del'>-			      struct iatt *postbuf,</div><div class='del'>-			      dict_t *xdata)</div><div class='add'>+static int32_t</div><div class='add'>+prune_complete(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+               struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='ctx'> </div><div class='del'>-	update_local_file_params(frame, this, prebuf, postbuf);</div><div class='add'>+    update_local_file_params(frame, this, prebuf, postbuf);</div><div class='ctx'> </div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1248,81 +1150,69 @@ static int32_t prune_complete(call_frame_t *frame,</div><div class='ctx'>  *</div><div class='ctx'>  * submuit the rest of the file</div><div class='ctx'>  */</div><div class='del'>-static int32_t prune_submit_file_tail(call_frame_t *frame,</div><div class='del'>-				      void *cookie,</div><div class='del'>-				      xlator_t *this,</div><div class='del'>-				      int32_t op_ret,</div><div class='del'>-				      int32_t op_errno,</div><div class='del'>-				      struct iatt *prebuf,</div><div class='del'>-				      struct iatt *postbuf,</div><div class='del'>-				      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='del'>-	dict_t *dict;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto put_one_call;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;xdata) {</div><div class='del'>-		dict_unref(local-&gt;xdata);</div><div class='del'>-		local-&gt;xdata = NULL;</div><div class='del'>-	}</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	dict = dict_new();</div><div class='del'>-	if (!dict) {</div><div class='del'>-		op_errno = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	update_local_file_params(frame, this, prebuf, postbuf);</div><div class='del'>-	local-&gt;new_file_size = conf-&gt;orig_offset;</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * The rest of the file is a partial block and, hence,</div><div class='del'>-	 * should be written via RMW sequence, so the crypt xlator</div><div class='del'>-	 * does STACK_WIND to itself.</div><div class='del'>-	 *</div><div class='del'>-	 * Pass current file size to crypt_writev()</div><div class='del'>-	 */</div><div class='del'>-	op_errno = dict_set(dict,</div><div class='del'>-			    FSIZE_XATTR_PREFIX,</div><div class='del'>-			    data_from_uint64(local-&gt;cur_file_size));</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "can not set key to update file size");</div><div class='del'>-		dict_unref(dict);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "passing current file size (%llu) to crypt_writev",</div><div class='del'>-	       (unsigned long long)local-&gt;cur_file_size);</div><div class='del'>-	/*</div><div class='del'>-	 * Padding will be filled with</div><div class='del'>-	 * zeros by rmw_partial_block()</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   prune_complete,</div><div class='del'>-		   this,</div><div class='del'>-		   this-&gt;fops-&gt;writev, /* crypt_writev */</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   &amp;local-&gt;vec,</div><div class='del'>-		   1,</div><div class='del'>-		   conf-&gt;aligned_offset, /* offset to write from */</div><div class='del'>-		   0,</div><div class='del'>-		   local-&gt;iobref,</div><div class='del'>-		   dict);</div><div class='del'>-</div><div class='del'>-	dict_unref(dict);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>- put_one_call:</div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+prune_submit_file_tail(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+    dict_t *dict;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto put_one_call;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;xdata) {</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+        local-&gt;xdata = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    update_local_file_params(frame, this, prebuf, postbuf);</div><div class='add'>+    local-&gt;new_file_size = conf-&gt;orig_offset;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * The rest of the file is a partial block and, hence,</div><div class='add'>+     * should be written via RMW sequence, so the crypt xlator</div><div class='add'>+     * does STACK_WIND to itself.</div><div class='add'>+     *</div><div class='add'>+     * Pass current file size to crypt_writev()</div><div class='add'>+     */</div><div class='add'>+    op_errno = dict_set(dict, FSIZE_XATTR_PREFIX,</div><div class='add'>+                        data_from_uint64(local-&gt;cur_file_size));</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "can not set key to update file size");</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+           "passing current file size (%llu) to crypt_writev",</div><div class='add'>+           (unsigned long long)local-&gt;cur_file_size);</div><div class='add'>+    /*</div><div class='add'>+     * Padding will be filled with</div><div class='add'>+     * zeros by rmw_partial_block()</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, prune_complete, this,</div><div class='add'>+               this-&gt;fops-&gt;writev, /* crypt_writev */</div><div class='add'>+               local-&gt;fd, &amp;local-&gt;vec, 1,</div><div class='add'>+               conf-&gt;aligned_offset, /* offset to write from */</div><div class='add'>+               0, local-&gt;iobref, dict);</div><div class='add'>+</div><div class='add'>+    dict_unref(dict);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+put_one_call:</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1333,40 +1223,36 @@ static int32_t prune_submit_file_tail(call_frame_t *frame,</div><div class='ctx'>  * 2) an rmw partial data block issued by non-cblock-aligned</div><div class='ctx'>  * prune.</div><div class='ctx'>  */</div><div class='del'>-int32_t end_writeback_ftruncate(call_frame_t *frame,</div><div class='del'>-				void *cookie,</div><div class='del'>-				xlator_t *this,</div><div class='del'>-				int32_t op_ret,</div><div class='del'>-				int32_t op_errno,</div><div class='del'>-				struct iatt *prebuf,</div><div class='del'>-				struct iatt *postbuf,</div><div class='del'>-				dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t  *local = frame-&gt;local;</div><div class='del'>-	/*</div><div class='del'>-	 * if nothing has been written,</div><div class='del'>-	 * then it must be an error</div><div class='del'>-	 */</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto put_one_call;</div><div class='del'>-</div><div class='del'>-	update_local_file_params(frame, this, prebuf, postbuf);</div><div class='del'>-</div><div class='del'>-	if (data_write_in_progress(local))</div><div class='del'>-		/* case (2) */</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	/* case (1) */</div><div class='del'>-	if (should_resume_submit_hole(local))</div><div class='del'>-		submit_hole(frame, this);</div><div class='del'>-	/*</div><div class='del'>-	 * case of hole, when we shouldn't resume</div><div class='del'>-	 */</div><div class='del'>- put_one_call:</div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='add'>+int32_t</div><div class='add'>+end_writeback_ftruncate(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    /*</div><div class='add'>+     * if nothing has been written,</div><div class='add'>+     * then it must be an error</div><div class='add'>+     */</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto put_one_call;</div><div class='add'>+</div><div class='add'>+    update_local_file_params(frame, this, prebuf, postbuf);</div><div class='add'>+</div><div class='add'>+    if (data_write_in_progress(local))</div><div class='add'>+        /* case (2) */</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    /* case (1) */</div><div class='add'>+    if (should_resume_submit_hole(local))</div><div class='add'>+        submit_hole(frame, this);</div><div class='add'>+    /*</div><div class='add'>+     * case of hole, when we shouldn't resume</div><div class='add'>+     */</div><div class='add'>+put_one_call:</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1379,150 +1265,126 @@ int32_t end_writeback_ftruncate(call_frame_t *frame,</div><div class='ctx'>  * @vec contains the latest atom of the file</div><div class='ctx'>  * (plain text)</div><div class='ctx'>  */</div><div class='del'>-static int32_t prune_write(call_frame_t *frame,</div><div class='del'>-			   void *cookie,</div><div class='del'>-			   xlator_t *this,</div><div class='del'>-			   int32_t op_ret,</div><div class='del'>-			   int32_t op_errno,</div><div class='del'>-			   struct iovec *vec,</div><div class='del'>-			   int32_t count,</div><div class='del'>-			   struct iatt *stbuf,</div><div class='del'>-			   struct iobref *iobref,</div><div class='del'>-			   dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t i;</div><div class='del'>-	size_t to_copy;</div><div class='del'>-	size_t copied = 0;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	if (op_ret == -1)</div><div class='del'>-		goto put_one_call;</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * At first, uptodate head block</div><div class='del'>-	 */</div><div class='del'>-	if (iov_length(vec, count) &lt; conf-&gt;off_in_head) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "Failed to uptodate head block for prune");</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = EIO;</div><div class='del'>-		goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;vec.iov_len = conf-&gt;off_in_head;</div><div class='del'>-	local-&gt;vec.iov_base = GF_CALLOC(1, local-&gt;vec.iov_len,</div><div class='del'>-					gf_crypt_mt_data);</div><div class='del'>-</div><div class='del'>-	if (local-&gt;vec.iov_base == NULL) {</div><div class='del'>-	        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                       "Failed to calloc head block for prune");</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = ENOMEM;</div><div class='del'>-	        goto put_one_call;</div><div class='del'>-	}</div><div class='del'>-	for (i = 0; i &lt; count; i++) {</div><div class='del'>-		to_copy = vec[i].iov_len;</div><div class='del'>-		if (to_copy &gt; local-&gt;vec.iov_len - copied)</div><div class='del'>-			to_copy = local-&gt;vec.iov_len - copied;</div><div class='del'>-</div><div class='del'>-		memcpy((char *)local-&gt;vec.iov_base + copied,</div><div class='del'>-		       vec[i].iov_base,</div><div class='del'>-		       to_copy);</div><div class='del'>-		copied += to_copy;</div><div class='del'>-		if (copied == local-&gt;vec.iov_len)</div><div class='del'>-			break;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * perform prune with aligned offset</div><div class='del'>-	 * (i.e. at this step we prune a bit</div><div class='del'>-	 * more then it is needed</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   prune_submit_file_tail,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   conf-&gt;aligned_offset,</div><div class='del'>-		   local-&gt;xdata);</div><div class='del'>-	return 0;</div><div class='del'>- put_one_call:</div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+prune_write(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, struct iovec *vec, int32_t count,</div><div class='add'>+            struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t i;</div><div class='add'>+    size_t to_copy;</div><div class='add'>+    size_t copied = 0;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        goto put_one_call;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * At first, uptodate head block</div><div class='add'>+     */</div><div class='add'>+    if (iov_length(vec, count) &lt; conf-&gt;off_in_head) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Failed to uptodate head block for prune");</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EIO;</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;vec.iov_len = conf-&gt;off_in_head;</div><div class='add'>+    local-&gt;vec.iov_base = GF_CALLOC(1, local-&gt;vec.iov_len, gf_crypt_mt_data);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;vec.iov_base == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Failed to calloc head block for prune");</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOMEM;</div><div class='add'>+        goto put_one_call;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        to_copy = vec[i].iov_len;</div><div class='add'>+        if (to_copy &gt; local-&gt;vec.iov_len - copied)</div><div class='add'>+            to_copy = local-&gt;vec.iov_len - copied;</div><div class='add'>+</div><div class='add'>+        memcpy((char *)local-&gt;vec.iov_base + copied, vec[i].iov_base, to_copy);</div><div class='add'>+        copied += to_copy;</div><div class='add'>+        if (copied == local-&gt;vec.iov_len)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * perform prune with aligned offset</div><div class='add'>+     * (i.e. at this step we prune a bit</div><div class='add'>+     * more then it is needed</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, prune_submit_file_tail, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, local-&gt;fd,</div><div class='add'>+               conf-&gt;aligned_offset, local-&gt;xdata);</div><div class='add'>+    return 0;</div><div class='add'>+put_one_call:</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Perform a read-prune-write sequence</div><div class='ctx'>  */</div><div class='del'>-int32_t read_prune_write(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	int32_t ret = 0;</div><div class='del'>-	dict_t *dict = NULL;</div><div class='del'>-	crypt_local_t  *local = frame-&gt;local;</div><div class='del'>-	struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='del'>-	struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	set_local_io_params_ftruncate(frame, object);</div><div class='del'>-	get_one_call_nolock(frame);</div><div class='del'>-</div><div class='del'>-	if ((conf-&gt;orig_offset &amp; (object_alg_blksize(object) - 1)) == 0) {</div><div class='del'>-		/*</div><div class='del'>-		 * cblock-aligned prune:</div><div class='del'>-		 * we don't need read and write components,</div><div class='del'>-		 * just cut file body</div><div class='del'>-		 */</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-		       "prune without RMW (at offset %llu",</div><div class='del'>-		       (unsigned long long)conf-&gt;orig_offset);</div><div class='del'>-</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   prune_complete,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-			   local-&gt;fd,</div><div class='del'>-			   conf-&gt;orig_offset,</div><div class='del'>-			   local-&gt;xdata);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "prune with RMW (at offset %llu",</div><div class='del'>-	       (unsigned long long)conf-&gt;orig_offset);</div><div class='del'>-	/*</div><div class='del'>-	 * We are about to perform the "read" component of the</div><div class='del'>-	 * read-prune-write sequence. It means that we need to</div><div class='del'>-	 * read encrypted data from disk and decrypt it.</div><div class='del'>-	 * So, the crypt translator does STACK_WIND to itself.</div><div class='del'>-	 *</div><div class='del'>-	 * Pass current file size to crypt_readv()</div><div class='del'>-</div><div class='del'>-	 */</div><div class='del'>-	dict = dict_new();</div><div class='del'>-	if (!dict) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Can not alloc dict");</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	ret = dict_set(dict,</div><div class='del'>-		       FSIZE_XATTR_PREFIX,</div><div class='del'>-		       data_from_uint64(local-&gt;cur_file_size));</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Can not set dict");</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   prune_write,</div><div class='del'>-		   this,</div><div class='del'>-		   this-&gt;fops-&gt;readv, /* crypt_readv */</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   get_atom_size(object), /* bytes to read */</div><div class='del'>-		   conf-&gt;aligned_offset, /* offset to read from */</div><div class='del'>-		   0,</div><div class='del'>-		   dict);</div><div class='del'>- exit:</div><div class='del'>-	if (dict)</div><div class='del'>-		dict_unref(dict);</div><div class='del'>-	return ret;</div><div class='add'>+int32_t</div><div class='add'>+read_prune_write(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct avec_config *conf = &amp;local-&gt;data_conf;</div><div class='add'>+    struct object_cipher_info *object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    set_local_io_params_ftruncate(frame, object);</div><div class='add'>+    get_one_call_nolock(frame);</div><div class='add'>+</div><div class='add'>+    if ((conf-&gt;orig_offset &amp; (object_alg_blksize(object) - 1)) == 0) {</div><div class='add'>+        /*</div><div class='add'>+         * cblock-aligned prune:</div><div class='add'>+         * we don't need read and write components,</div><div class='add'>+         * just cut file body</div><div class='add'>+         */</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "prune without RMW (at offset %llu",</div><div class='add'>+               (unsigned long long)conf-&gt;orig_offset);</div><div class='add'>+</div><div class='add'>+        STACK_WIND(frame, prune_complete, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, local-&gt;fd,</div><div class='add'>+                   conf-&gt;orig_offset, local-&gt;xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "prune with RMW (at offset %llu",</div><div class='add'>+           (unsigned long long)conf-&gt;orig_offset);</div><div class='add'>+    /*</div><div class='add'>+     * We are about to perform the "read" component of the</div><div class='add'>+     * read-prune-write sequence. It means that we need to</div><div class='add'>+     * read encrypted data from disk and decrypt it.</div><div class='add'>+     * So, the crypt translator does STACK_WIND to itself.</div><div class='add'>+     *</div><div class='add'>+     * Pass current file size to crypt_readv()</div><div class='add'>+</div><div class='add'>+     */</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Can not alloc dict");</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(dict, FSIZE_XATTR_PREFIX,</div><div class='add'>+                   data_from_uint64(local-&gt;cur_file_size));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Can not set dict");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, prune_write, this, this-&gt;fops-&gt;readv, /* crypt_readv */</div><div class='add'>+               local-&gt;fd, get_atom_size(object),            /* bytes to read */</div><div class='add'>+               conf-&gt;aligned_offset, /* offset to read from */</div><div class='add'>+               0, dict);</div><div class='add'>+exit:</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1539,159 +1401,135 @@ int32_t read_prune_write(call_frame_t *frame, xlator_t *this)</div><div class='ctx'>  * 2) perform cblock-aligned prune</div><div class='ctx'>  * 3) issue a write request for the end-of-file</div><div class='ctx'>  */</div><div class='del'>-int32_t prune_file(call_frame_t *frame, xlator_t *this, uint64_t offset)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-</div><div class='del'>-	ret = prepare_for_prune(frame, this, offset);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	return read_prune_write(frame, this);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t expand_file(call_frame_t *frame, xlator_t *this,</div><div class='del'>-		    uint64_t offset)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	ret = prepare_for_submit_hole(frame, this,</div><div class='del'>-				      local-&gt;old_file_size,</div><div class='del'>-				      offset - local-&gt;old_file_size);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	submit_hole(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t ftruncate_trivial_completion(call_frame_t *frame,</div><div class='del'>-					    void *cookie,</div><div class='del'>-					    xlator_t *this,</div><div class='del'>-					    int32_t op_ret,</div><div class='del'>-					    int32_t op_errno,</div><div class='del'>-					    struct iatt *buf,</div><div class='del'>-					    dict_t *dict)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	local-&gt;prebuf = *buf;</div><div class='del'>-	local-&gt;postbuf = *buf;</div><div class='del'>-</div><div class='del'>-	local-&gt;prebuf.ia_size = local-&gt;cur_file_size;</div><div class='del'>-	local-&gt;postbuf.ia_size = local-&gt;cur_file_size;</div><div class='del'>-</div><div class='del'>-	get_one_call(frame);</div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t do_ftruncate(call_frame_t *frame,</div><div class='del'>-			    void *cookie,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    int32_t op_ret,</div><div class='del'>-			    int32_t op_errno,</div><div class='del'>-			    dict_t *dict,</div><div class='del'>-			    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	data_t *data;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * extract regular file size</div><div class='del'>-	 */</div><div class='del'>-	data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='del'>-	if (!data) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='del'>-		op_errno = EIO;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;old_file_size = local-&gt;cur_file_size = data_to_uint64(data);</div><div class='del'>-</div><div class='del'>-	if (local-&gt;data_conf.orig_offset == local-&gt;cur_file_size) {</div><div class='add'>+int32_t</div><div class='add'>+prune_file(call_frame_t *frame, xlator_t *this, uint64_t offset)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+</div><div class='add'>+    ret = prepare_for_prune(frame, this, offset);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    return read_prune_write(frame, this);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+expand_file(call_frame_t *frame, xlator_t *this, uint64_t offset)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    ret = prepare_for_submit_hole(frame, this, local-&gt;old_file_size,</div><div class='add'>+                                  offset - local-&gt;old_file_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    submit_hole(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+ftruncate_trivial_completion(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                             dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    local-&gt;prebuf = *buf;</div><div class='add'>+    local-&gt;postbuf = *buf;</div><div class='add'>+</div><div class='add'>+    local-&gt;prebuf.ia_size = local-&gt;cur_file_size;</div><div class='add'>+    local-&gt;postbuf.ia_size = local-&gt;cur_file_size;</div><div class='add'>+</div><div class='add'>+    get_one_call(frame);</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+do_ftruncate(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    data_t *data;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * extract regular file size</div><div class='add'>+     */</div><div class='add'>+    data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='add'>+    if (!data) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;old_file_size = local-&gt;cur_file_size = data_to_uint64(data);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;data_conf.orig_offset == local-&gt;cur_file_size) {</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-		       "trivial ftruncate (current file size %llu)",</div><div class='del'>-		       (unsigned long long)local-&gt;cur_file_size);</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+               "trivial ftruncate (current file size %llu)",</div><div class='add'>+               (unsigned long long)local-&gt;cur_file_size);</div><div class='ctx'> #endif</div><div class='del'>-		goto trivial;</div><div class='del'>-	}</div><div class='del'>-	else if (local-&gt;data_conf.orig_offset &lt; local-&gt;cur_file_size) {</div><div class='add'>+        goto trivial;</div><div class='add'>+    } else if (local-&gt;data_conf.orig_offset &lt; local-&gt;cur_file_size) {</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "prune from %llu to %llu",</div><div class='del'>-		       (unsigned long long)local-&gt;cur_file_size,</div><div class='del'>-		       (unsigned long long)local-&gt;data_conf.orig_offset);</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "prune from %llu to %llu",</div><div class='add'>+               (unsigned long long)local-&gt;cur_file_size,</div><div class='add'>+               (unsigned long long)local-&gt;data_conf.orig_offset);</div><div class='ctx'> #endif</div><div class='del'>-		op_errno = prune_file(frame,</div><div class='del'>-				      this,</div><div class='del'>-				      local-&gt;data_conf.orig_offset);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='add'>+        op_errno = prune_file(frame, this, local-&gt;data_conf.orig_offset);</div><div class='add'>+    } else {</div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "expand from %llu to %llu",</div><div class='del'>-		       (unsigned long long)local-&gt;cur_file_size,</div><div class='del'>-		       (unsigned long long)local-&gt;data_conf.orig_offset);</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "expand from %llu to %llu",</div><div class='add'>+               (unsigned long long)local-&gt;cur_file_size,</div><div class='add'>+               (unsigned long long)local-&gt;data_conf.orig_offset);</div><div class='ctx'> #endif</div><div class='del'>-		op_errno = expand_file(frame,</div><div class='del'>-				       this,</div><div class='del'>-				       local-&gt;data_conf.orig_offset);</div><div class='del'>-	}</div><div class='del'>-	if (op_errno)</div><div class='del'>-		goto error;</div><div class='del'>-	return 0;</div><div class='del'>- trivial:</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   ftruncate_trivial_completion,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	/*</div><div class='del'>-	 * finish with ftruncate</div><div class='del'>-	 */</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	get_one_call_nolock(frame);</div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_ftruncate_finodelk_cbk(call_frame_t *frame,</div><div class='del'>-					    void *cookie,</div><div class='del'>-					    xlator_t *this,</div><div class='del'>-					    int32_t op_ret,</div><div class='del'>-					    int32_t op_errno,</div><div class='del'>-					    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * An access has been granted,</div><div class='del'>-	 * retrieve file size first</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   do_ftruncate,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   FSIZE_XATTR_PREFIX,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	get_one_call_nolock(frame);</div><div class='del'>-	put_one_call_ftruncate(frame, this);</div><div class='del'>-	return 0;</div><div class='add'>+        op_errno = expand_file(frame, this, local-&gt;data_conf.orig_offset);</div><div class='add'>+    }</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto error;</div><div class='add'>+    return 0;</div><div class='add'>+trivial:</div><div class='add'>+    STACK_WIND(frame, ftruncate_trivial_completion, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, local-&gt;fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    /*</div><div class='add'>+     * finish with ftruncate</div><div class='add'>+     */</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    get_one_call_nolock(frame);</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_ftruncate_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * An access has been granted,</div><div class='add'>+     * retrieve file size first</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, do_ftruncate, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+               FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    get_one_call_nolock(frame);</div><div class='add'>+    put_one_call_ftruncate(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1699,1612 +1537,1316 @@ static int32_t crypt_ftruncate_finodelk_cbk(call_frame_t *frame,</div><div class='ctx'>  * . receive file size;</div><div class='ctx'>  * . expand or prune file.</div><div class='ctx'>  */</div><div class='del'>-static int32_t crypt_ftruncate(call_frame_t *frame,</div><div class='del'>-			       xlator_t *this,</div><div class='del'>-			       fd_t *fd,</div><div class='del'>-			       off_t offset,</div><div class='del'>-			       dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-	struct gf_flock lock = {0, };</div><div class='del'>-</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_FTRUNCATE);</div><div class='del'>-	if (!local) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;xattr = dict_new();</div><div class='del'>-	if (!local-&gt;xattr) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='del'>-	info = local_get_inode_info(local, this);</div><div class='del'>-	if (info == NULL) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (!object_alg_atomic(&amp;info-&gt;cinfo)) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;data_conf.orig_offset = offset;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='add'>+static int32_t</div><div class='add'>+crypt_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_FTRUNCATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;xattr = dict_new();</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    info = local_get_inode_info(local, this);</div><div class='add'>+    if (info == NULL) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (!object_alg_atomic(&amp;info-&gt;cinfo)) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;data_conf.orig_offset = offset;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_ftruncate_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, fd, F_SETLKW,</div><div class='add'>+               &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    if (local &amp;&amp; local-&gt;fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    if (local &amp;&amp; local-&gt;xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (local &amp;&amp; local-&gt;xattr)</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='add'>+    if (local &amp;&amp; local-&gt;info)</div><div class='add'>+        free_inode_info(local-&gt;info);</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_ftruncate_finodelk_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	if (local &amp;&amp; local-&gt;fd)</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-	if (local &amp;&amp; local-&gt;xdata)</div><div class='del'>-		dict_unref(xdata);</div><div class='del'>-	if (local &amp;&amp; local-&gt;xattr)</div><div class='del'>-		dict_unref(local-&gt;xattr);</div><div class='del'>-	if (local &amp;&amp; local-&gt;info)</div><div class='del'>-		free_inode_info(local-&gt;info);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(ftruncate, frame, -1, ret, NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='add'>+    CRYPT_STACK_UNWIND(ftruncate, frame, -1, ret, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* -&gt;flush_cbk() */</div><div class='del'>-int32_t truncate_end(call_frame_t *frame,</div><div class='del'>-		     void *cookie,</div><div class='del'>-		     xlator_t *this,</div><div class='del'>-		     int32_t op_ret,</div><div class='del'>-		     int32_t op_errno,</div><div class='del'>-		     dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+truncate_end(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	CRYPT_STACK_UNWIND(truncate,</div><div class='del'>-			   frame,</div><div class='del'>-			   op_ret,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   local-&gt;xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    CRYPT_STACK_UNWIND(truncate, frame, op_ret, op_errno, &amp;local-&gt;prebuf,</div><div class='add'>+                       &amp;local-&gt;postbuf, local-&gt;xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* ftruncate_cbk() */</div><div class='del'>-int32_t truncate_flush(call_frame_t *frame,</div><div class='del'>-		       void *cookie,</div><div class='del'>-		       xlator_t *this,</div><div class='del'>-		       int32_t op_ret,</div><div class='del'>-		       int32_t op_errno,</div><div class='del'>-		       struct iatt *prebuf,</div><div class='del'>-		       struct iatt *postbuf,</div><div class='del'>-		       dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	fd_t *fd = local-&gt;fd;</div><div class='del'>-	local-&gt;prebuf = *prebuf;</div><div class='del'>-	local-&gt;postbuf = *postbuf;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   truncate_end,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-		   fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	fd_unref(fd);</div><div class='del'>-	return 0;</div><div class='add'>+int32_t</div><div class='add'>+truncate_flush(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+               struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    fd_t *fd = local-&gt;fd;</div><div class='add'>+    local-&gt;prebuf = *prebuf;</div><div class='add'>+    local-&gt;postbuf = *postbuf;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, truncate_end, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, NULL);</div><div class='add'>+    fd_unref(fd);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * is called as -&gt;open_cbk()</div><div class='ctx'>  */</div><div class='del'>-static int32_t truncate_begin(call_frame_t *frame,</div><div class='del'>-			      void *cookie,</div><div class='del'>-			      xlator_t *this,</div><div class='del'>-			      int32_t op_ret,</div><div class='del'>-			      int32_t op_errno,</div><div class='del'>-			      fd_t *fd,</div><div class='del'>-			      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-		CRYPT_STACK_UNWIND(truncate,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno, NULL, NULL, NULL);</div><div class='del'>-		return 0;</div><div class='del'>-	} else {</div><div class='del'>-	        fd_bind (fd);</div><div class='del'>-        }</div><div class='del'>-	/*</div><div class='del'>-	 * crypt_truncate() is implemented via crypt_ftruncate(),</div><div class='del'>-	 * so the crypt xlator does STACK_WIND to itself here</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   truncate_flush,</div><div class='del'>-		   this,</div><div class='del'>-		   this-&gt;fops-&gt;ftruncate, /* crypt_ftruncate */</div><div class='del'>-		   fd,</div><div class='del'>-		   local-&gt;offset,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+truncate_begin(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        CRYPT_STACK_UNWIND(truncate, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    } else {</div><div class='add'>+        fd_bind(fd);</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * crypt_truncate() is implemented via crypt_ftruncate(),</div><div class='add'>+     * so the crypt xlator does STACK_WIND to itself here</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, truncate_flush, this,</div><div class='add'>+               this-&gt;fops-&gt;ftruncate, /* crypt_ftruncate */</div><div class='add'>+               fd, local-&gt;offset, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * crypt_truncate() is implemented via crypt_ftruncate() as a</div><div class='ctx'>  * sequence crypt_open() - crypt_ftruncate() - truncate_flush()</div><div class='ctx'>  */</div><div class='del'>-int32_t crypt_truncate(call_frame_t *frame,</div><div class='del'>-		       xlator_t *this,</div><div class='del'>-		       loc_t *loc,</div><div class='del'>-		       off_t offset,</div><div class='del'>-		       dict_t *xdata)</div><div class='add'>+int32_t</div><div class='add'>+crypt_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	fd_t *fd;</div><div class='del'>-	crypt_local_t *local;</div><div class='add'>+    fd_t *fd;</div><div class='add'>+    crypt_local_t *local;</div><div class='ctx'> </div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-	       "truncate file %s at offset %llu",</div><div class='del'>-	       loc-&gt;path, (unsigned long long)offset);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "truncate file %s at offset %llu",</div><div class='add'>+           loc-&gt;path, (unsigned long long)offset);</div><div class='ctx'> #endif</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_TRUNCATE);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto error;</div><div class='del'>-</div><div class='del'>-	fd = fd_create(loc-&gt;inode, frame-&gt;root-&gt;pid);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create fd");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fd = fd;</div><div class='del'>-	local-&gt;offset = offset;</div><div class='del'>-	local-&gt;xdata = xdata;</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   truncate_begin,</div><div class='del'>-		   this,</div><div class='del'>-		   this-&gt;fops-&gt;open, /* crypt_open() */</div><div class='del'>-		   loc,</div><div class='del'>-		   O_RDWR,</div><div class='del'>-		   fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(truncate, frame, -1, EINVAL, NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-end_writeback_handler_t dispatch_end_writeback(glusterfs_fop_t fop)</div><div class='del'>-{</div><div class='del'>-	switch (fop) {</div><div class='del'>-	case GF_FOP_WRITE:</div><div class='del'>-		return end_writeback_writev;</div><div class='del'>-	case GF_FOP_FTRUNCATE:</div><div class='del'>-		return end_writeback_ftruncate;</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Bad wb operation %d", fop);</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_TRUNCATE);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    fd = fd_create(loc-&gt;inode, frame-&gt;root-&gt;pid);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create fd");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fd = fd;</div><div class='add'>+    local-&gt;offset = offset;</div><div class='add'>+    local-&gt;xdata = xdata;</div><div class='add'>+    STACK_WIND(frame, truncate_begin, this, this-&gt;fops-&gt;open, /* crypt_open() */</div><div class='add'>+               loc, O_RDWR, fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(truncate, frame, -1, EINVAL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+end_writeback_handler_t</div><div class='add'>+dispatch_end_writeback(glusterfs_fop_t fop)</div><div class='add'>+{</div><div class='add'>+    switch (fop) {</div><div class='add'>+        case GF_FOP_WRITE:</div><div class='add'>+            return end_writeback_writev;</div><div class='add'>+        case GF_FOP_FTRUNCATE:</div><div class='add'>+            return end_writeback_ftruncate;</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING, "Bad wb operation %d", fop);</div><div class='add'>+            return NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * true, if the caller needs metadata string</div><div class='ctx'>  */</div><div class='del'>-static int32_t is_custom_mtd(dict_t *xdata)</div><div class='add'>+static int32_t</div><div class='add'>+is_custom_mtd(dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	data_t *data;</div><div class='del'>-	uint32_t flags;</div><div class='add'>+    data_t *data;</div><div class='add'>+    uint32_t flags;</div><div class='ctx'> </div><div class='del'>-	if (!xdata)</div><div class='del'>-		return 0;</div><div class='add'>+    if (!xdata)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-	data = dict_get(xdata, MSGFLAGS_PREFIX);</div><div class='del'>-	if (!data)</div><div class='del'>-		return 0;</div><div class='del'>-	if (data-&gt;len != sizeof(uint32_t)) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "Bad msgflags size (%d)", data-&gt;len);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	flags = *((uint32_t *)data-&gt;data);</div><div class='del'>-	return msgflags_check_mtd_lock(&amp;flags);</div><div class='add'>+    data = dict_get(xdata, MSGFLAGS_PREFIX);</div><div class='add'>+    if (!data)</div><div class='add'>+        return 0;</div><div class='add'>+    if (data-&gt;len != sizeof(uint32_t)) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Bad msgflags size (%d)", data-&gt;len);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    flags = *((uint32_t *)data-&gt;data);</div><div class='add'>+    return msgflags_check_mtd_lock(&amp;flags);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t crypt_open_done(call_frame_t *frame,</div><div class='del'>-			       void *cookie,</div><div class='del'>-			       xlator_t *this,</div><div class='del'>-			       int32_t op_ret,</div><div class='del'>-			       int32_t op_errno, dict_t *xdata)</div><div class='add'>+static int32_t</div><div class='add'>+crypt_open_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING, "mtd unlock failed (%d)",</div><div class='del'>-		       op_errno);</div><div class='del'>-	put_one_call_open(frame);</div><div class='del'>-	return 0;</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "mtd unlock failed (%d)", op_errno);</div><div class='add'>+    put_one_call_open(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void crypt_open_tail(call_frame_t *frame, xlator_t *this)</div><div class='add'>+static void</div><div class='add'>+crypt_open_tail(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	struct gf_flock  lock  = {0, };</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        lock.l_type   = F_UNLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_pid    = 0;</div><div class='add'>+    lock.l_type = F_UNLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_pid = 0;</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_open_done,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='add'>+    STACK_WIND(frame, crypt_open_done, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+               F_SETLKW, &amp;lock, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * load private inode info at open time</div><div class='ctx'>  * called as -&gt;fgetxattr_cbk()</div><div class='ctx'>  */</div><div class='del'>-static int load_mtd_open(call_frame_t *frame,</div><div class='del'>-			 void *cookie,</div><div class='del'>-			 xlator_t *this,</div><div class='del'>-			 int32_t op_ret,</div><div class='del'>-			 int32_t op_errno,</div><div class='del'>-			 dict_t *dict,</div><div class='del'>-			 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	gf_boolean_t upload_info;</div><div class='del'>-	data_t *mtd;</div><div class='del'>-	uint64_t value = 0;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	crypt_private_t *priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;fd-&gt;inode-&gt;ia_type == IA_IFLNK)</div><div class='del'>-		goto exit;</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto exit;</div><div class='del'>-	/*</div><div class='del'>-	 * first, check for cached info</div><div class='del'>-	 */</div><div class='del'>-	ret = inode_ctx_get(local-&gt;fd-&gt;inode, this, &amp;value);</div><div class='del'>-	if (ret != -1) {</div><div class='del'>-		info = (struct crypt_inode_info *)(long)value;</div><div class='del'>-		if (info == NULL) {</div><div class='del'>-			gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			       "Inode info expected, but not found");</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = EIO;</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-		/*</div><div class='del'>-		 * info has been found in the cache</div><div class='del'>-		 */</div><div class='del'>-		upload_info = _gf_false;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-		/*</div><div class='del'>-		 * info hasn't been found in the cache.</div><div class='del'>-		 */</div><div class='del'>-		info = alloc_inode_info(local, local-&gt;loc);</div><div class='del'>-		if (!info) {</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = ENOMEM;</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-		init_inode_info_head(info, local-&gt;fd);</div><div class='del'>-		upload_info = _gf_true;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * extract metadata</div><div class='del'>-	 */</div><div class='del'>-	mtd = dict_get(dict, CRYPTO_FORMAT_PREFIX);</div><div class='del'>-	if (!mtd) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = ENOENT;</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"Format string wasn't found");</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * authenticate metadata against the path</div><div class='del'>-	 */</div><div class='del'>-	ret = open_format((unsigned char *)mtd-&gt;data,</div><div class='del'>-			  mtd-&gt;len,</div><div class='del'>-			  local-&gt;loc,</div><div class='del'>-			  info,</div><div class='del'>-			  get_master_cinfo(priv),</div><div class='del'>-			  local,</div><div class='del'>-			  upload_info);</div><div class='del'>-	if (ret) {</div><div class='del'>-		local-&gt;op_ret = -1;</div><div class='del'>-		local-&gt;op_errno = ret;</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	if (upload_info) {</div><div class='del'>-		ret = init_inode_info_tail(info, get_master_cinfo(priv));</div><div class='del'>-		if (ret) {</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = ret;</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-		ret = inode_ctx_put(local-&gt;fd-&gt;inode,</div><div class='del'>-				    this, (uint64_t)(long)info);</div><div class='del'>-		if (ret == -1) {</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = EIO;</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;custom_mtd) {</div><div class='del'>-		/*</div><div class='del'>-		 * pass the metadata string to the customer</div><div class='del'>-		 */</div><div class='del'>-		ret = dict_set_static_bin(local-&gt;xdata,</div><div class='del'>-					  CRYPTO_FORMAT_PREFIX,</div><div class='del'>-					  mtd-&gt;data,</div><div class='del'>-					  mtd-&gt;len);</div><div class='del'>-		if (ret) {</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = ret;</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>- exit:</div><div class='del'>-	if (!local-&gt;custom_mtd)</div><div class='del'>-		crypt_open_tail(frame, this);</div><div class='del'>-	else</div><div class='del'>-		put_one_call_open(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_open_finodelk_cbk(call_frame_t *frame,</div><div class='del'>-				       void *cookie,</div><div class='del'>-				       xlator_t *this,</div><div class='del'>-				       int32_t op_ret,</div><div class='del'>-				       int32_t op_errno,</div><div class='del'>-				       dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING, "finodelk (LOCK) failed");</div><div class='del'>-		goto exit;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   load_mtd_open,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   CRYPTO_FORMAT_PREFIX,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- exit:</div><div class='del'>-	put_one_call_open(frame);</div><div class='del'>-	return 0;</div><div class='add'>+static int</div><div class='add'>+load_mtd_open(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    gf_boolean_t upload_info;</div><div class='add'>+    data_t *mtd;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    crypt_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd-&gt;inode-&gt;ia_type == IA_IFLNK)</div><div class='add'>+        goto exit;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto exit;</div><div class='add'>+    /*</div><div class='add'>+     * first, check for cached info</div><div class='add'>+     */</div><div class='add'>+    ret = inode_ctx_get(local-&gt;fd-&gt;inode, this, &amp;value);</div><div class='add'>+    if (ret != -1) {</div><div class='add'>+        info = (struct crypt_inode_info *)(long)value;</div><div class='add'>+        if (info == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Inode info expected, but not found");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EIO;</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+        /*</div><div class='add'>+         * info has been found in the cache</div><div class='add'>+         */</div><div class='add'>+        upload_info = _gf_false;</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * info hasn't been found in the cache.</div><div class='add'>+         */</div><div class='add'>+        info = alloc_inode_info(local, local-&gt;loc);</div><div class='add'>+        if (!info) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+        init_inode_info_head(info, local-&gt;fd);</div><div class='add'>+        upload_info = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * extract metadata</div><div class='add'>+     */</div><div class='add'>+    mtd = dict_get(dict, CRYPTO_FORMAT_PREFIX);</div><div class='add'>+    if (!mtd) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ENOENT;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Format string wasn't found");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * authenticate metadata against the path</div><div class='add'>+     */</div><div class='add'>+    ret = open_format((unsigned char *)mtd-&gt;data, mtd-&gt;len, local-&gt;loc, info,</div><div class='add'>+                      get_master_cinfo(priv), local, upload_info);</div><div class='add'>+    if (ret) {</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ret;</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    if (upload_info) {</div><div class='add'>+        ret = init_inode_info_tail(info, get_master_cinfo(priv));</div><div class='add'>+        if (ret) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ret;</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+        ret = inode_ctx_put(local-&gt;fd-&gt;inode, this, (uint64_t)(long)info);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EIO;</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;custom_mtd) {</div><div class='add'>+        /*</div><div class='add'>+         * pass the metadata string to the customer</div><div class='add'>+         */</div><div class='add'>+        ret = dict_set_static_bin(local-&gt;xdata, CRYPTO_FORMAT_PREFIX, mtd-&gt;data,</div><div class='add'>+                                  mtd-&gt;len);</div><div class='add'>+        if (ret) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ret;</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+exit:</div><div class='add'>+    if (!local-&gt;custom_mtd)</div><div class='add'>+        crypt_open_tail(frame, this);</div><div class='add'>+    else</div><div class='add'>+        put_one_call_open(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_open_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "finodelk (LOCK) failed");</div><div class='add'>+        goto exit;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, load_mtd_open, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+               CRYPTO_FORMAT_PREFIX, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+exit:</div><div class='add'>+    put_one_call_open(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * verify metadata against the specified pathname</div><div class='ctx'>  */</div><div class='del'>-static int32_t crypt_open_cbk(call_frame_t *frame,</div><div class='del'>-			      void *cookie,</div><div class='del'>-			      xlator_t *this,</div><div class='del'>-			      int32_t op_ret,</div><div class='del'>-			      int32_t op_errno,</div><div class='del'>-			      fd_t *fd,</div><div class='del'>-			      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	struct gf_flock lock = {0, };</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;fd-&gt;inode-&gt;ia_type == IA_IFLNK)</div><div class='del'>-		goto exit;</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto exit;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-	else if (local-&gt;custom_mtd){</div><div class='del'>-		local-&gt;xdata = dict_new();</div><div class='del'>-		if (!local-&gt;xdata) {</div><div class='del'>-			local-&gt;op_ret = -1;</div><div class='del'>-			local-&gt;op_errno = ENOMEM;</div><div class='del'>-			gf_log ("crypt", GF_LOG_ERROR,</div><div class='del'>-				"Can not get new dict for mtd string");</div><div class='del'>-			goto exit;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = local-&gt;custom_mtd ? F_WRLCK : F_RDLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='add'>+static int32_t</div><div class='add'>+crypt_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd-&gt;inode-&gt;ia_type == IA_IFLNK)</div><div class='add'>+        goto exit;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto exit;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    else if (local-&gt;custom_mtd) {</div><div class='add'>+        local-&gt;xdata = dict_new();</div><div class='add'>+        if (!local-&gt;xdata) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR,</div><div class='add'>+                   "Can not get new dict for mtd string");</div><div class='add'>+            goto exit;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = local-&gt;custom_mtd ? F_WRLCK : F_RDLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_open_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, fd, F_SETLKW,</div><div class='add'>+               &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+exit:</div><div class='add'>+    put_one_call_open(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = ENOMEM;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_OPEN);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto error;</div><div class='add'>+    local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='add'>+    if (!local-&gt;loc) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    ret = loc_copy(local-&gt;loc, loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+</div><div class='add'>+    ret = is_custom_mtd(xdata);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        loc_wipe(local-&gt;loc);</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;custom_mtd = ret;</div><div class='add'>+</div><div class='add'>+    if ((flags &amp; O_ACCMODE) == O_WRONLY)</div><div class='add'>+        /*</div><div class='add'>+         * we can't open O_WRONLY, because</div><div class='add'>+         * we need to do read-modify-write</div><div class='add'>+         */</div><div class='add'>+        flags = (flags &amp; ~O_ACCMODE) | O_RDWR;</div><div class='add'>+    /*</div><div class='add'>+     * Make sure that out translated offsets</div><div class='add'>+     * and counts won't be ignored</div><div class='add'>+     */</div><div class='add'>+    flags &amp;= ~O_APPEND;</div><div class='add'>+    get_one_call_nolock(frame);</div><div class='add'>+    STACK_WIND(frame, crypt_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(open, frame, -1, ret, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_open_finodelk_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- exit:</div><div class='del'>-	put_one_call_open(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_open(call_frame_t *frame,</div><div class='del'>-			  xlator_t *this,</div><div class='del'>-			  loc_t *loc,</div><div class='del'>-			  int32_t flags,</div><div class='del'>-			  fd_t *fd,</div><div class='del'>-			  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret = ENOMEM;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_OPEN);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto error;</div><div class='del'>-	local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='del'>-	if (!local-&gt;loc) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	ret = loc_copy(local-&gt;loc, loc);</div><div class='del'>-	if (ret) {</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-                ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='del'>-</div><div class='del'>-	ret = is_custom_mtd(xdata);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		loc_wipe(local-&gt;loc);</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;custom_mtd = ret;</div><div class='del'>-</div><div class='del'>-	if ((flags &amp; O_ACCMODE) == O_WRONLY)</div><div class='del'>-		/*</div><div class='del'>-		 * we can't open O_WRONLY, because</div><div class='del'>-		 * we need to do read-modify-write</div><div class='del'>-		 */</div><div class='del'>-		flags = (flags &amp; ~O_ACCMODE) | O_RDWR;</div><div class='del'>-	/*</div><div class='del'>-	 * Make sure that out translated offsets</div><div class='del'>-	 * and counts won't be ignored</div><div class='del'>-	 */</div><div class='del'>-	flags &amp;= ~O_APPEND;</div><div class='del'>-	get_one_call_nolock(frame);</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_open_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-		   loc,</div><div class='del'>-		   flags,</div><div class='del'>-		   fd,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(open,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   ret,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t init_inode_info_tail(struct crypt_inode_info *info,</div><div class='del'>-				    struct master_cipher_info *master)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	struct object_cipher_info *object = &amp;info-&gt;cinfo;</div><div class='add'>+static int32_t</div><div class='add'>+init_inode_info_tail(struct crypt_inode_info *info,</div><div class='add'>+                     struct master_cipher_info *master)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    struct object_cipher_info *object = &amp;info-&gt;cinfo;</div><div class='ctx'> </div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG, "Init inode info for object %s",</div><div class='del'>-	       uuid_utoa(info-&gt;oid));</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "Init inode info for object %s",</div><div class='add'>+           uuid_utoa(info-&gt;oid));</div><div class='ctx'> #endif</div><div class='del'>-	ret = data_cipher_algs[object-&gt;o_alg][object-&gt;o_mode].set_private(info,</div><div class='del'>-									master);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Set private info failed");</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    ret = data_cipher_algs[object-&gt;o_alg][object-&gt;o_mode].set_private(info,</div><div class='add'>+                                                                      master);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Set private info failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Init inode info at -&gt;create() time</div><div class='ctx'>  */</div><div class='del'>-static void init_inode_info_create(struct crypt_inode_info *info,</div><div class='del'>-				   struct master_cipher_info *master,</div><div class='del'>-				   data_t *data)</div><div class='del'>-{</div><div class='del'>-	struct object_cipher_info *object;</div><div class='del'>-</div><div class='del'>-	info-&gt;nr_minor = CRYPT_XLATOR_ID;</div><div class='del'>-	memcpy(info-&gt;oid, data-&gt;data, data-&gt;len);</div><div class='del'>-</div><div class='del'>-	object = &amp;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	object-&gt;o_alg        = master-&gt;m_alg;</div><div class='del'>-	object-&gt;o_mode       = master-&gt;m_mode;</div><div class='del'>-	object-&gt;o_block_bits = master-&gt;m_block_bits;</div><div class='del'>-	object-&gt;o_dkey_size  = master-&gt;m_dkey_size;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void init_inode_info_head(struct crypt_inode_info *info, fd_t *fd)</div><div class='del'>-{</div><div class='del'>-	memcpy(info-&gt;oid, fd-&gt;inode-&gt;gfid, sizeof(uuid_t));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_create_done(call_frame_t *frame,</div><div class='del'>-				 void *cookie,</div><div class='del'>-				 xlator_t *this,</div><div class='del'>-				 int32_t op_ret,</div><div class='del'>-				 int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_private_t *priv = this-&gt;private;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct crypt_inode_info *info = local-&gt;info;</div><div class='del'>-	fd_t *local_fd = local-&gt;fd;</div><div class='del'>-	dict_t *local_xdata = local-&gt;xdata;</div><div class='del'>-	inode_t *local_inode = local-&gt;inode;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		goto unwind;</div><div class='del'>-	}</div><div class='del'>-	op_errno = init_inode_info_tail(info, get_master_cinfo(priv));</div><div class='del'>-	if (op_errno) {</div><div class='del'>-		op_ret = -1;</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		goto unwind;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * FIXME: drop major subversion number</div><div class='del'>-	 */</div><div class='del'>-	op_ret = inode_ctx_put(local-&gt;fd-&gt;inode, this, (uint64_t)(long)info);</div><div class='del'>-	if (op_ret == -1) {</div><div class='del'>-		op_errno = EIO;</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		goto unwind;</div><div class='del'>-	}</div><div class='del'>- unwind:</div><div class='del'>-	free_format(local);</div><div class='del'>-	CRYPT_STACK_UNWIND(create,</div><div class='del'>-			   frame,</div><div class='del'>-			   op_ret,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   local_fd,</div><div class='del'>-			   local_inode,</div><div class='del'>-			   &amp;local-&gt;buf,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   local_xdata);</div><div class='del'>-	fd_unref(local_fd);</div><div class='del'>-	inode_unref(local_inode);</div><div class='del'>-	if (local_xdata)</div><div class='del'>-		dict_unref(local_xdata);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int crypt_create_tail(call_frame_t *frame,</div><div class='del'>-			     void *cookie,</div><div class='del'>-			     xlator_t *this,</div><div class='del'>-			     int32_t op_ret,</div><div class='del'>-			     int32_t op_errno,</div><div class='del'>-			     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	struct gf_flock  lock  = {0, };</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	fd_t *local_fd = local-&gt;fd;</div><div class='del'>-	dict_t *local_xdata = local-&gt;xdata;</div><div class='del'>-	inode_t *local_inode = local-&gt;inode;</div><div class='del'>-</div><div class='del'>-	dict_unref(local-&gt;xattr);</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-</div><div class='del'>-        lock.l_type   = F_UNLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_pid    = 0;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_create_done,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	free_inode_info(local-&gt;info);</div><div class='del'>-	free_format(local);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(create,</div><div class='del'>-			   frame,</div><div class='del'>-			   op_ret,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   local_fd,</div><div class='del'>-			   local_inode,</div><div class='del'>-			   &amp;local-&gt;buf,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   local_xdata);</div><div class='del'>-</div><div class='del'>-	fd_unref(local_fd);</div><div class='del'>-	inode_unref(local_inode);</div><div class='del'>-	if (local_xdata)</div><div class='del'>-		dict_unref(local_xdata);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_create_finodelk_cbk(call_frame_t *frame,</div><div class='del'>-					 void *cookie,</div><div class='del'>-					 xlator_t *this,</div><div class='del'>-					 int32_t op_ret,</div><div class='del'>-					 int32_t op_errno,</div><div class='del'>-					 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct crypt_inode_info *info = local-&gt;info;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_create_tail,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   local-&gt;xattr, /* CRYPTO_FORMAT_PREFIX */</div><div class='del'>-		   0,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	free_inode_info(info);</div><div class='del'>-	free_format(local);</div><div class='del'>-	fd_unref(local-&gt;fd);</div><div class='del'>-	dict_unref(local-&gt;xattr);</div><div class='del'>-	if (local-&gt;xdata)</div><div class='del'>-		dict_unref(local-&gt;xdata);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(create,</div><div class='del'>-			   frame,</div><div class='del'>-			   op_ret,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='add'>+static void</div><div class='add'>+init_inode_info_create(struct crypt_inode_info *info,</div><div class='add'>+                       struct master_cipher_info *master, data_t *data)</div><div class='add'>+{</div><div class='add'>+    struct object_cipher_info *object;</div><div class='add'>+</div><div class='add'>+    info-&gt;nr_minor = CRYPT_XLATOR_ID;</div><div class='add'>+    memcpy(info-&gt;oid, data-&gt;data, data-&gt;len);</div><div class='add'>+</div><div class='add'>+    object = &amp;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    object-&gt;o_alg = master-&gt;m_alg;</div><div class='add'>+    object-&gt;o_mode = master-&gt;m_mode;</div><div class='add'>+    object-&gt;o_block_bits = master-&gt;m_block_bits;</div><div class='add'>+    object-&gt;o_dkey_size = master-&gt;m_dkey_size;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+init_inode_info_head(struct crypt_inode_info *info, fd_t *fd)</div><div class='add'>+{</div><div class='add'>+    memcpy(info-&gt;oid, fd-&gt;inode-&gt;gfid, sizeof(uuid_t));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_create_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_private_t *priv = this-&gt;private;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct crypt_inode_info *info = local-&gt;info;</div><div class='add'>+    fd_t *local_fd = local-&gt;fd;</div><div class='add'>+    dict_t *local_xdata = local-&gt;xdata;</div><div class='add'>+    inode_t *local_inode = local-&gt;inode;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    op_errno = init_inode_info_tail(info, get_master_cinfo(priv));</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * FIXME: drop major subversion number</div><div class='add'>+     */</div><div class='add'>+    op_ret = inode_ctx_put(local-&gt;fd-&gt;inode, this, (uint64_t)(long)info);</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+unwind:</div><div class='add'>+    free_format(local);</div><div class='add'>+    CRYPT_STACK_UNWIND(create, frame, op_ret, op_errno, local_fd, local_inode,</div><div class='add'>+                       &amp;local-&gt;buf, &amp;local-&gt;prebuf, &amp;local-&gt;postbuf,</div><div class='add'>+                       local_xdata);</div><div class='add'>+    fd_unref(local_fd);</div><div class='add'>+    inode_unref(local_inode);</div><div class='add'>+    if (local_xdata)</div><div class='add'>+        dict_unref(local_xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+crypt_create_tail(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    fd_t *local_fd = local-&gt;fd;</div><div class='add'>+    dict_t *local_xdata = local-&gt;xdata;</div><div class='add'>+    inode_t *local_inode = local-&gt;inode;</div><div class='add'>+</div><div class='add'>+    dict_unref(local-&gt;xattr);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_UNLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_pid = 0;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_create_done, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+               F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    free_inode_info(local-&gt;info);</div><div class='add'>+    free_format(local);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(create, frame, op_ret, op_errno, local_fd, local_inode,</div><div class='add'>+                       &amp;local-&gt;buf, &amp;local-&gt;prebuf, &amp;local-&gt;postbuf,</div><div class='add'>+                       local_xdata);</div><div class='add'>+</div><div class='add'>+    fd_unref(local_fd);</div><div class='add'>+    inode_unref(local_inode);</div><div class='add'>+    if (local_xdata)</div><div class='add'>+        dict_unref(local_xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_create_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct crypt_inode_info *info = local-&gt;info;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_create_tail, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+               local-&gt;xattr, /* CRYPTO_FORMAT_PREFIX */</div><div class='add'>+               0, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    free_inode_info(info);</div><div class='add'>+    free_format(local);</div><div class='add'>+    fd_unref(local-&gt;fd);</div><div class='add'>+    dict_unref(local-&gt;xattr);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(create, frame, op_ret, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                       NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Create and store crypt-specific format on disk;</div><div class='ctx'>  * Populate cache with private inode info</div><div class='ctx'>  */</div><div class='del'>-static int32_t crypt_create_cbk(call_frame_t *frame,</div><div class='del'>-				void *cookie,</div><div class='del'>-				xlator_t *this,</div><div class='del'>-				int32_t op_ret,</div><div class='del'>-				int32_t op_errno,</div><div class='del'>-				fd_t *fd,</div><div class='del'>-				inode_t *inode,</div><div class='del'>-				struct iatt *buf,</div><div class='del'>-				struct iatt *preparent,</div><div class='del'>-				struct iatt *postparent,</div><div class='del'>-				dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	struct gf_flock lock = {0, };</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct crypt_inode_info *info = local-&gt;info;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-	local-&gt;inode = inode_ref(inode);</div><div class='del'>-	local-&gt;buf = *buf;</div><div class='del'>-	local-&gt;prebuf = *preparent;</div><div class='del'>-	local-&gt;postbuf = *postparent;</div><div class='del'>-</div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-</div><div class='del'>-        STACK_WIND(frame,</div><div class='del'>-		   crypt_create_finodelk_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	free_inode_info(info);</div><div class='del'>-	free_format(local);</div><div class='del'>-	fd_unref(local-&gt;fd);</div><div class='del'>-	dict_unref(local-&gt;xattr);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(create,</div><div class='del'>-			   frame,</div><div class='del'>-			   op_ret,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   NULL, NULL, NULL,</div><div class='del'>-			   NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_create(call_frame_t *frame,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    loc_t *loc,</div><div class='del'>-			    int32_t flags,</div><div class='del'>-			    mode_t mode,</div><div class='del'>-			    mode_t umask,</div><div class='del'>-			    fd_t *fd,</div><div class='del'>-			    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int ret;</div><div class='del'>-	data_t *data;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-	crypt_private_t *priv;</div><div class='del'>-	struct master_cipher_info *master;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-	master = get_master_cinfo(priv);</div><div class='del'>-</div><div class='del'>-	if (master_alg_atomic(master)) {</div><div class='del'>-		/*</div><div class='del'>-		 * We can't open O_WRONLY, because we</div><div class='del'>-		 * need to do read-modify-write.</div><div class='del'>-		 */</div><div class='del'>-		if ((flags &amp; O_ACCMODE) == O_WRONLY)</div><div class='del'>-			flags = (flags &amp; ~O_ACCMODE) | O_RDWR;</div><div class='del'>-		/*</div><div class='del'>-		 * Make sure that out translated offsets</div><div class='del'>-		 * and counts won't be ignored</div><div class='del'>-		 */</div><div class='del'>-		flags &amp;= ~O_APPEND;</div><div class='del'>-	}</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_CREATE);</div><div class='del'>-	if (!local) {</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	data = dict_get(xdata, "gfid-req");</div><div class='del'>-	if (!data) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "gfid not found");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (data-&gt;len != sizeof(uuid_t)) {</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "bad gfid size (%d), should be %d",</div><div class='del'>-		       (int)data-&gt;len, (int)sizeof(uuid_t));</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	info = alloc_inode_info(local, loc);</div><div class='del'>-	if (!info){</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * NOTE:</div><div class='del'>-	 * format has to be created BEFORE</div><div class='del'>-	 * proceeding to the untrusted server</div><div class='del'>-	 */</div><div class='del'>-	ret = alloc_format_create(local);</div><div class='del'>-	if (ret) {</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	init_inode_info_create(info, master, data);</div><div class='del'>-</div><div class='del'>-	ret = create_format(local-&gt;format,</div><div class='del'>-			    loc,</div><div class='del'>-			    info,</div><div class='del'>-			    master);</div><div class='del'>-	if (ret) {</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;xattr = dict_new();</div><div class='del'>-	if (!local-&gt;xattr) {</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		free_format(local);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	ret = dict_set_static_bin(local-&gt;xattr,</div><div class='del'>-				  CRYPTO_FORMAT_PREFIX,</div><div class='del'>-				  local-&gt;format,</div><div class='del'>-				  new_format_size());</div><div class='del'>-	if (ret) {</div><div class='del'>-		dict_unref(local-&gt;xattr);</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		free_format(local);</div><div class='del'>-                ret = EINVAL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	ret = dict_set(local-&gt;xattr, FSIZE_XATTR_PREFIX, data_from_uint64(0));</div><div class='del'>-	if (ret) {</div><div class='del'>-		dict_unref(local-&gt;xattr);</div><div class='del'>-		free_inode_info(info);</div><div class='del'>-		free_format(local);</div><div class='del'>-                ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_create_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='del'>-		   loc,</div><div class='del'>-		   flags,</div><div class='del'>-		   mode,</div><div class='del'>-		   umask,</div><div class='del'>-		   fd,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	gf_log("crypt", GF_LOG_WARNING, "can not create file");</div><div class='del'>-	CRYPT_STACK_UNWIND(create,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   ret,</div><div class='del'>-			   NULL, NULL, NULL,</div><div class='del'>-			   NULL, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+crypt_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct crypt_inode_info *info = local-&gt;info;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    local-&gt;inode = inode_ref(inode);</div><div class='add'>+    local-&gt;buf = *buf;</div><div class='add'>+    local-&gt;prebuf = *preparent;</div><div class='add'>+    local-&gt;postbuf = *postparent;</div><div class='add'>+</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_create_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+               F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    free_inode_info(info);</div><div class='add'>+    free_format(local);</div><div class='add'>+    fd_unref(local-&gt;fd);</div><div class='add'>+    dict_unref(local-&gt;xattr);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(create, frame, op_ret, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                       NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+             mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret;</div><div class='add'>+    data_t *data;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+    crypt_private_t *priv;</div><div class='add'>+    struct master_cipher_info *master;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    master = get_master_cinfo(priv);</div><div class='add'>+</div><div class='add'>+    if (master_alg_atomic(master)) {</div><div class='add'>+        /*</div><div class='add'>+         * We can't open O_WRONLY, because we</div><div class='add'>+         * need to do read-modify-write.</div><div class='add'>+         */</div><div class='add'>+        if ((flags &amp; O_ACCMODE) == O_WRONLY)</div><div class='add'>+            flags = (flags &amp; ~O_ACCMODE) | O_RDWR;</div><div class='add'>+        /*</div><div class='add'>+         * Make sure that out translated offsets</div><div class='add'>+         * and counts won't be ignored</div><div class='add'>+         */</div><div class='add'>+        flags &amp;= ~O_APPEND;</div><div class='add'>+    }</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_CREATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    data = dict_get(xdata, "gfid-req");</div><div class='add'>+    if (!data) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "gfid not found");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (data-&gt;len != sizeof(uuid_t)) {</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "bad gfid size (%d), should be %d",</div><div class='add'>+               (int)data-&gt;len, (int)sizeof(uuid_t));</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    info = alloc_inode_info(local, loc);</div><div class='add'>+    if (!info) {</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * NOTE:</div><div class='add'>+     * format has to be created BEFORE</div><div class='add'>+     * proceeding to the untrusted server</div><div class='add'>+     */</div><div class='add'>+    ret = alloc_format_create(local);</div><div class='add'>+    if (ret) {</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    init_inode_info_create(info, master, data);</div><div class='add'>+</div><div class='add'>+    ret = create_format(local-&gt;format, loc, info, master);</div><div class='add'>+    if (ret) {</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;xattr = dict_new();</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        free_format(local);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set_static_bin(local-&gt;xattr, CRYPTO_FORMAT_PREFIX, local-&gt;format,</div><div class='add'>+                              new_format_size());</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        free_format(local);</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_set(local-&gt;xattr, FSIZE_XATTR_PREFIX, data_from_uint64(0));</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='add'>+        free_inode_info(info);</div><div class='add'>+        free_format(local);</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, crypt_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    gf_log("crypt", GF_LOG_WARNING, "can not create file");</div><div class='add'>+    CRYPT_STACK_UNWIND(create, frame, -1, ret, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                       NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * FIXME: this should depends on the version of format string</div><div class='ctx'>  */</div><div class='del'>-static int32_t filter_crypt_xattr(dict_t *dict,</div><div class='del'>-				  char *key, data_t *value, void *data)</div><div class='add'>+static int32_t</div><div class='add'>+filter_crypt_xattr(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        dict_del(dict, key);</div><div class='del'>-        return 0;</div><div class='add'>+    dict_del(dict, key);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t crypt_fsetxattr(call_frame_t *frame,</div><div class='del'>-			       xlator_t *this,</div><div class='del'>-			       fd_t *fd,</div><div class='del'>-			       dict_t *dict,</div><div class='del'>-			       int32_t flags, dict_t *xdata)</div><div class='add'>+static int32_t</div><div class='add'>+crypt_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	dict_foreach_fnmatch(dict, "trusted.glusterfs.crypt*",</div><div class='del'>-			     filter_crypt_xattr, NULL);</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   default_fsetxattr_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-		   fd,</div><div class='del'>-		   dict,</div><div class='del'>-		   flags,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    dict_foreach_fnmatch(dict, "trusted.glusterfs.crypt*", filter_crypt_xattr,</div><div class='add'>+                         NULL);</div><div class='add'>+    STACK_WIND(frame, default_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * TBD: verify file metadata before wind</div><div class='ctx'>  */</div><div class='del'>-static int32_t crypt_setxattr(call_frame_t *frame,</div><div class='del'>-			      xlator_t *this,</div><div class='del'>-			      loc_t *loc,</div><div class='del'>-			      dict_t *dict,</div><div class='del'>-			      int32_t flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	dict_foreach_fnmatch(dict, "trusted.glusterfs.crypt*",</div><div class='del'>-			     filter_crypt_xattr, NULL);</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   default_setxattr_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-		   loc,</div><div class='del'>-		   dict,</div><div class='del'>-		   flags,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+crypt_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+               int32_t flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    dict_foreach_fnmatch(dict, "trusted.glusterfs.crypt*", filter_crypt_xattr,</div><div class='add'>+                         NULL);</div><div class='add'>+    STACK_WIND(frame, default_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * called as flush_cbk()</div><div class='ctx'>  */</div><div class='del'>-static int32_t linkop_end(call_frame_t *frame,</div><div class='del'>-			  void *cookie,</div><div class='del'>-			  xlator_t *this,</div><div class='del'>-			  int32_t op_ret,</div><div class='del'>-			  int32_t op_errno,</div><div class='del'>-			  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	linkop_unwind_handler_t unwind_fn;</div><div class='del'>-	unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0 &amp;&amp;</div><div class='del'>-	    op_errno == ENOENT &amp;&amp;</div><div class='del'>-	    local-&gt;loc-&gt;inode-&gt;ia_type == IA_IFLNK) {</div><div class='del'>-		local-&gt;op_ret = 0;</div><div class='del'>-		local-&gt;op_errno = 0;</div><div class='del'>-	}</div><div class='del'>-	unwind_fn(frame);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+linkop_end(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+           int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    linkop_unwind_handler_t unwind_fn;</div><div class='add'>+    unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0 &amp;&amp; op_errno == ENOENT &amp;&amp;</div><div class='add'>+        local-&gt;loc-&gt;inode-&gt;ia_type == IA_IFLNK) {</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;op_errno = 0;</div><div class='add'>+    }</div><div class='add'>+    unwind_fn(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * unpin inode on the server</div><div class='ctx'>  */</div><div class='del'>-static int32_t link_flush(call_frame_t *frame,</div><div class='del'>-			  void *cookie,</div><div class='del'>-			  xlator_t *this,</div><div class='del'>-			  int32_t op_ret,</div><div class='del'>-			  int32_t op_errno,</div><div class='del'>-			  inode_t *inode,</div><div class='del'>-			  struct iatt *buf,</div><div class='del'>-			  struct iatt *preparent,</div><div class='del'>-			  struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	if (local-&gt;xdata) {</div><div class='del'>-		dict_unref(local-&gt;xdata);</div><div class='del'>-		local-&gt;xdata = NULL;</div><div class='del'>-	}</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-	local-&gt;inode = inode_ref(inode);</div><div class='del'>-	local-&gt;buf = *buf;</div><div class='del'>-	local-&gt;prebuf = *preparent;</div><div class='del'>-	local-&gt;postbuf = *postparent;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   linkop_end,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	link_unwind(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void link_unwind(call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	dict_t *xdata;</div><div class='del'>-	dict_t *xattr;</div><div class='del'>-	inode_t *inode;</div><div class='del'>-</div><div class='del'>-	if (!local) {</div><div class='del'>-		CRYPT_STACK_UNWIND(link,</div><div class='del'>-				   frame,</div><div class='del'>-				   -1,</div><div class='del'>-				   ENOMEM,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL);</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	xdata = local-&gt;xdata;</div><div class='del'>-	xattr = local-&gt;xattr;</div><div class='del'>-	inode = local-&gt;inode;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;loc){</div><div class='del'>-		loc_wipe(local-&gt;loc);</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;newloc) {</div><div class='del'>-		loc_wipe(local-&gt;newloc);</div><div class='del'>-		GF_FREE(local-&gt;newloc);</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;fd)</div><div class='del'>-		fd_unref(local-&gt;fd);</div><div class='del'>-	if (local-&gt;format)</div><div class='del'>-		GF_FREE(local-&gt;format);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(link,</div><div class='del'>-			   frame,</div><div class='del'>-			   local-&gt;op_ret,</div><div class='del'>-			   local-&gt;op_errno,</div><div class='del'>-			   inode,</div><div class='del'>-			   &amp;local-&gt;buf,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   xdata);</div><div class='del'>-	if (xdata)</div><div class='del'>-		dict_unref(xdata);</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref(xattr);</div><div class='del'>-	if (inode)</div><div class='del'>-		inode_unref(inode);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void link_wind(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   link_flush,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='del'>-		   local-&gt;loc,</div><div class='del'>-		   local-&gt;newloc,</div><div class='del'>-		   local-&gt;xdata);</div><div class='add'>+static int32_t</div><div class='add'>+link_flush(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+           int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+           struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    if (local-&gt;xdata) {</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+        local-&gt;xdata = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    local-&gt;inode = inode_ref(inode);</div><div class='add'>+    local-&gt;buf = *buf;</div><div class='add'>+    local-&gt;prebuf = *preparent;</div><div class='add'>+    local-&gt;postbuf = *postparent;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, linkop_end, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, local-&gt;fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    link_unwind(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+link_unwind(call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    dict_t *xdata;</div><div class='add'>+    dict_t *xattr;</div><div class='add'>+    inode_t *inode;</div><div class='add'>+</div><div class='add'>+    if (!local) {</div><div class='add'>+        CRYPT_STACK_UNWIND(link, frame, -1, ENOMEM, NULL, NULL, NULL, NULL,</div><div class='add'>+                           NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    xdata = local-&gt;xdata;</div><div class='add'>+    xattr = local-&gt;xattr;</div><div class='add'>+    inode = local-&gt;inode;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc) {</div><div class='add'>+        loc_wipe(local-&gt;loc);</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;newloc) {</div><div class='add'>+        loc_wipe(local-&gt;newloc);</div><div class='add'>+        GF_FREE(local-&gt;newloc);</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+    if (local-&gt;format)</div><div class='add'>+        GF_FREE(local-&gt;format);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(link, frame, local-&gt;op_ret, local-&gt;op_errno, inode,</div><div class='add'>+                       &amp;local-&gt;buf, &amp;local-&gt;prebuf, &amp;local-&gt;postbuf, xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    if (inode)</div><div class='add'>+        inode_unref(inode);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+link_wind(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, link_flush, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, local-&gt;loc, local-&gt;newloc,</div><div class='add'>+               local-&gt;xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * unlink()</div><div class='ctx'>  */</div><div class='del'>-static int32_t unlink_flush(call_frame_t *frame,</div><div class='del'>-			    void *cookie,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    int32_t op_ret,</div><div class='del'>-			    int32_t op_errno,</div><div class='del'>-			    struct iatt *preparent,</div><div class='del'>-			    struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	local-&gt;prebuf = *preparent;</div><div class='del'>-	local-&gt;postbuf = *postparent;</div><div class='del'>-	if (local-&gt;xdata) {</div><div class='del'>-		dict_unref(local-&gt;xdata);</div><div class='del'>-		local-&gt;xdata = NULL;</div><div class='del'>-	}</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   linkop_end,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	unlink_unwind(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void unlink_unwind(call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	dict_t *xdata;</div><div class='del'>-	dict_t *xattr;</div><div class='del'>-</div><div class='del'>-	if (!local) {</div><div class='del'>-		CRYPT_STACK_UNWIND(unlink,</div><div class='del'>-				   frame,</div><div class='del'>-				   -1,</div><div class='del'>-				   ENOMEM,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL);</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	xdata = local-&gt;xdata;</div><div class='del'>-	xattr = local-&gt;xattr;</div><div class='del'>-	if (local-&gt;loc){</div><div class='del'>-		loc_wipe(local-&gt;loc);</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;fd)</div><div class='del'>-		fd_unref(local-&gt;fd);</div><div class='del'>-	if (local-&gt;format)</div><div class='del'>-		GF_FREE(local-&gt;format);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(unlink,</div><div class='del'>-			   frame,</div><div class='del'>-			   local-&gt;op_ret,</div><div class='del'>-			   local-&gt;op_errno,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   xdata);</div><div class='del'>-	if (xdata)</div><div class='del'>-		dict_unref(xdata);</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref(xattr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void unlink_wind(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   unlink_flush,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-		   local-&gt;loc,</div><div class='del'>-		   local-&gt;flags,</div><div class='del'>-		   local-&gt;xdata);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void rename_unwind(call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	dict_t *xdata;</div><div class='del'>-	dict_t *xattr;</div><div class='del'>-	struct iatt *prenewparent;</div><div class='del'>-	struct iatt *postnewparent;</div><div class='del'>-</div><div class='del'>-	if (!local) {</div><div class='del'>-		CRYPT_STACK_UNWIND(rename,</div><div class='del'>-				   frame,</div><div class='del'>-				   -1,</div><div class='del'>-				   ENOMEM,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL);</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	xdata = local-&gt;xdata;</div><div class='del'>-	xattr = local-&gt;xattr;</div><div class='del'>-	prenewparent = local-&gt;prenewparent;</div><div class='del'>-	postnewparent = local-&gt;postnewparent;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;loc){</div><div class='del'>-		loc_wipe(local-&gt;loc);</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;newloc){</div><div class='del'>-		loc_wipe(local-&gt;newloc);</div><div class='del'>-		GF_FREE(local-&gt;newloc);</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;fd)</div><div class='del'>-		fd_unref(local-&gt;fd);</div><div class='del'>-	if (local-&gt;format)</div><div class='del'>-		GF_FREE(local-&gt;format);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(rename,</div><div class='del'>-			   frame,</div><div class='del'>-			   local-&gt;op_ret,</div><div class='del'>-			   local-&gt;op_errno,</div><div class='del'>-			   &amp;local-&gt;buf,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   prenewparent,</div><div class='del'>-			   postnewparent,</div><div class='del'>-			   xdata);</div><div class='del'>-	if (xdata)</div><div class='del'>-		dict_unref(xdata);</div><div class='del'>-	if (xattr)</div><div class='del'>-		dict_unref(xattr);</div><div class='del'>-	if (prenewparent)</div><div class='del'>-		GF_FREE(prenewparent);</div><div class='del'>-	if (postnewparent)</div><div class='del'>-		GF_FREE(postnewparent);</div><div class='add'>+static int32_t</div><div class='add'>+unlink_flush(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    local-&gt;prebuf = *preparent;</div><div class='add'>+    local-&gt;postbuf = *postparent;</div><div class='add'>+    if (local-&gt;xdata) {</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+        local-&gt;xdata = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, linkop_end, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, local-&gt;fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    unlink_unwind(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+unlink_unwind(call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    dict_t *xdata;</div><div class='add'>+    dict_t *xattr;</div><div class='add'>+</div><div class='add'>+    if (!local) {</div><div class='add'>+        CRYPT_STACK_UNWIND(unlink, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    xdata = local-&gt;xdata;</div><div class='add'>+    xattr = local-&gt;xattr;</div><div class='add'>+    if (local-&gt;loc) {</div><div class='add'>+        loc_wipe(local-&gt;loc);</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+    if (local-&gt;format)</div><div class='add'>+        GF_FREE(local-&gt;format);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(unlink, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                       &amp;local-&gt;prebuf, &amp;local-&gt;postbuf, xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+unlink_wind(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, unlink_flush, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, local-&gt;loc, local-&gt;flags,</div><div class='add'>+               local-&gt;xdata);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+rename_unwind(call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    dict_t *xdata;</div><div class='add'>+    dict_t *xattr;</div><div class='add'>+    struct iatt *prenewparent;</div><div class='add'>+    struct iatt *postnewparent;</div><div class='add'>+</div><div class='add'>+    if (!local) {</div><div class='add'>+        CRYPT_STACK_UNWIND(rename, frame, -1, ENOMEM, NULL, NULL, NULL, NULL,</div><div class='add'>+                           NULL, NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    xdata = local-&gt;xdata;</div><div class='add'>+    xattr = local-&gt;xattr;</div><div class='add'>+    prenewparent = local-&gt;prenewparent;</div><div class='add'>+    postnewparent = local-&gt;postnewparent;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;loc) {</div><div class='add'>+        loc_wipe(local-&gt;loc);</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;newloc) {</div><div class='add'>+        loc_wipe(local-&gt;newloc);</div><div class='add'>+        GF_FREE(local-&gt;newloc);</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+    if (local-&gt;format)</div><div class='add'>+        GF_FREE(local-&gt;format);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(rename, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                       &amp;local-&gt;buf, &amp;local-&gt;prebuf, &amp;local-&gt;postbuf,</div><div class='add'>+                       prenewparent, postnewparent, xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    if (prenewparent)</div><div class='add'>+        GF_FREE(prenewparent);</div><div class='add'>+    if (postnewparent)</div><div class='add'>+        GF_FREE(postnewparent);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * called as flush_cbk()</div><div class='ctx'>  */</div><div class='del'>-static int32_t rename_end(call_frame_t *frame,</div><div class='del'>-			  void *cookie,</div><div class='del'>-			  xlator_t *this,</div><div class='del'>-			  int32_t op_ret,</div><div class='del'>-			  int32_t op_errno,</div><div class='del'>-			  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	rename_unwind(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t rename_flush(call_frame_t *frame,</div><div class='del'>-			    void *cookie,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    int32_t op_ret,</div><div class='del'>-			    int32_t op_errno,</div><div class='del'>-			    struct iatt *buf,</div><div class='del'>-			    struct iatt *preoldparent,</div><div class='del'>-			    struct iatt *postoldparent,</div><div class='del'>-			    struct iatt *prenewparent,</div><div class='del'>-			    struct iatt *postnewparent,</div><div class='del'>-			    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-	dict_unref(local-&gt;xdata);</div><div class='del'>-	local-&gt;xdata = NULL;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	local-&gt;buf = *buf;</div><div class='del'>-	local-&gt;prebuf = *preoldparent;</div><div class='del'>-	local-&gt;postbuf = *postoldparent;</div><div class='del'>-	if (prenewparent) {</div><div class='del'>-		local-&gt;prenewparent = GF_CALLOC(1, sizeof(*prenewparent),</div><div class='del'>-						gf_crypt_mt_iatt);</div><div class='del'>-		if (!local-&gt;prenewparent) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		*local-&gt;prenewparent = *prenewparent;</div><div class='del'>-	}</div><div class='del'>-	if (postnewparent) {</div><div class='del'>-		local-&gt;postnewparent = GF_CALLOC(1, sizeof(*postnewparent),</div><div class='del'>-						 gf_crypt_mt_iatt);</div><div class='del'>-		if (!local-&gt;postnewparent) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		*local-&gt;postnewparent = *postnewparent;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   rename_end,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;flush,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	rename_unwind(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void rename_wind(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   rename_flush,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='del'>-		   local-&gt;loc,</div><div class='del'>-		   local-&gt;newloc,</div><div class='del'>-		   local-&gt;xdata);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t __do_linkop(call_frame_t *frame,</div><div class='del'>-			   void *cookie,</div><div class='del'>-			   xlator_t *this,</div><div class='del'>-			   int32_t op_ret,</div><div class='del'>-			   int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	linkop_wind_handler_t wind_fn;</div><div class='del'>-	linkop_unwind_handler_t unwind_fn;</div><div class='del'>-</div><div class='del'>-	wind_fn = linkop_wind_dispatch(local-&gt;fop);</div><div class='del'>-	unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='del'>-</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if (op_ret &gt;= 0)</div><div class='del'>-		wind_fn(frame, this);</div><div class='del'>-	else {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING, "mtd unlock failed (%d)",</div><div class='del'>-		       op_errno);</div><div class='del'>-		unwind_fn(frame);</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t do_linkop(call_frame_t *frame,</div><div class='del'>-			 void *cookie,</div><div class='del'>-			 xlator_t *this,</div><div class='del'>-			 int32_t op_ret,</div><div class='del'>-			 int32_t op_errno,</div><div class='del'>-			 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	struct gf_flock  lock  = {0, };</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	linkop_unwind_handler_t unwind_fn;</div><div class='del'>-</div><div class='del'>-	unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='del'>-	local-&gt;op_ret = op_ret;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-</div><div class='del'>-	if(op_ret &lt; 0)</div><div class='del'>-		goto error;</div><div class='del'>-</div><div class='del'>-	lock.l_type   = F_UNLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_pid    = 0;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   __do_linkop,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	unwind_fn(frame);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+rename_end(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+           int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    rename_unwind(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+rename_flush(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *buf, struct iatt *preoldparent,</div><div class='add'>+             struct iatt *postoldparent, struct iatt *prenewparent,</div><div class='add'>+             struct iatt *postnewparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+    dict_unref(local-&gt;xdata);</div><div class='add'>+    local-&gt;xdata = NULL;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    local-&gt;buf = *buf;</div><div class='add'>+    local-&gt;prebuf = *preoldparent;</div><div class='add'>+    local-&gt;postbuf = *postoldparent;</div><div class='add'>+    if (prenewparent) {</div><div class='add'>+        local-&gt;prenewparent = GF_CALLOC(1, sizeof(*prenewparent),</div><div class='add'>+                                        gf_crypt_mt_iatt);</div><div class='add'>+        if (!local-&gt;prenewparent) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+        *local-&gt;prenewparent = *prenewparent;</div><div class='add'>+    }</div><div class='add'>+    if (postnewparent) {</div><div class='add'>+        local-&gt;postnewparent = GF_CALLOC(1, sizeof(*postnewparent),</div><div class='add'>+                                         gf_crypt_mt_iatt);</div><div class='add'>+        if (!local-&gt;postnewparent) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+        *local-&gt;postnewparent = *postnewparent;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, rename_end, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, local-&gt;fd, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    rename_unwind(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+void</div><div class='add'>+rename_wind(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, rename_flush, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, local-&gt;loc, local-&gt;newloc,</div><div class='add'>+               local-&gt;xdata);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+__do_linkop(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    linkop_wind_handler_t wind_fn;</div><div class='add'>+    linkop_unwind_handler_t unwind_fn;</div><div class='add'>+</div><div class='add'>+    wind_fn = linkop_wind_dispatch(local-&gt;fop);</div><div class='add'>+    unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0)</div><div class='add'>+        wind_fn(frame, this);</div><div class='add'>+    else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "mtd unlock failed (%d)", op_errno);</div><div class='add'>+        unwind_fn(frame);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+do_linkop(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+          int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    linkop_unwind_handler_t unwind_fn;</div><div class='add'>+</div><div class='add'>+    unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='add'>+    local-&gt;op_ret = op_ret;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_UNLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_pid = 0;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, __do_linkop, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+               F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    unwind_fn(frame);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Update the metadata string (against the new pathname);</div><div class='ctx'>  * submit the result</div><div class='ctx'>  */</div><div class='del'>-static int32_t linkop_begin(call_frame_t *frame,</div><div class='del'>-			    void *cookie,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    int32_t op_ret,</div><div class='del'>-			    int32_t op_errno,</div><div class='del'>-			    fd_t *fd,</div><div class='del'>-			    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	gf_boolean_t upload_info;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	crypt_private_t *priv = this-&gt;private;</div><div class='del'>-	struct crypt_inode_info *info;</div><div class='del'>-	data_t *old_mtd;</div><div class='del'>-	uint32_t new_mtd_size;</div><div class='del'>-	uint64_t value = 0;</div><div class='del'>-	void (*unwind_fn)(call_frame_t *frame);</div><div class='del'>-	mtd_op_t mop;</div><div class='del'>-</div><div class='del'>-	unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='del'>-	mop = linkop_mtdop_dispatch(local-&gt;fop);</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		/*</div><div class='del'>-		 * verification failed</div><div class='del'>-		 */</div><div class='del'>-		goto error;</div><div class='del'>-        } else {</div><div class='del'>-                fd_bind (fd);</div><div class='add'>+static int32_t</div><div class='add'>+linkop_begin(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t upload_info;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    crypt_private_t *priv = this-&gt;private;</div><div class='add'>+    struct crypt_inode_info *info;</div><div class='add'>+    data_t *old_mtd;</div><div class='add'>+    uint32_t new_mtd_size;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    void (*unwind_fn)(call_frame_t * frame);</div><div class='add'>+    mtd_op_t mop;</div><div class='add'>+</div><div class='add'>+    unwind_fn = linkop_unwind_dispatch(local-&gt;fop);</div><div class='add'>+    mop = linkop_mtdop_dispatch(local-&gt;fop);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        /*</div><div class='add'>+         * verification failed</div><div class='add'>+         */</div><div class='add'>+        goto error;</div><div class='add'>+    } else {</div><div class='add'>+        fd_bind(fd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    old_mtd = dict_get(xdata, CRYPTO_FORMAT_PREFIX);</div><div class='add'>+    if (!old_mtd) {</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Metadata string wasn't found");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    new_mtd_size = format_size(mop, old_mtd-&gt;len);</div><div class='add'>+    op_errno = alloc_format(local, new_mtd_size);</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * check for cached info</div><div class='add'>+     */</div><div class='add'>+    op_ret = inode_ctx_get(fd-&gt;inode, this, &amp;value);</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        info = (struct crypt_inode_info *)(long)value;</div><div class='add'>+        if (info == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Inode info was not found");</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto error;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-	old_mtd = dict_get(xdata, CRYPTO_FORMAT_PREFIX);</div><div class='del'>-	if (!old_mtd) {</div><div class='del'>-		op_errno = EIO;</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-			"Metadata string wasn't found");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	new_mtd_size = format_size(mop, old_mtd-&gt;len);</div><div class='del'>-	op_errno = alloc_format(local, new_mtd_size);</div><div class='del'>-	if (op_errno)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * check for cached info</div><div class='del'>-	 */</div><div class='del'>-	op_ret = inode_ctx_get(fd-&gt;inode, this, &amp;value);</div><div class='del'>-	if (op_ret != -1) {</div><div class='del'>-		info = (struct crypt_inode_info *)(long)value;</div><div class='del'>-		if (info == NULL) {</div><div class='del'>-			gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-				"Inode info was not found");</div><div class='del'>-			op_errno = EINVAL;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		/*</div><div class='del'>-		 * info was found in the cache</div><div class='del'>-		 */</div><div class='del'>-		local-&gt;info = info;</div><div class='del'>-		upload_info = _gf_false;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-		/*</div><div class='del'>-		 * info wasn't found in the cache;</div><div class='del'>-		 */</div><div class='del'>-		info = alloc_inode_info(local, local-&gt;loc);</div><div class='del'>-		if (!info)</div><div class='del'>-			goto error;</div><div class='del'>-		init_inode_info_head(info, fd);</div><div class='del'>-		local-&gt;info = info;</div><div class='del'>-		upload_info = _gf_true;</div><div class='del'>-	}</div><div class='del'>-	op_errno = open_format((unsigned char *)old_mtd-&gt;data,</div><div class='del'>-			       old_mtd-&gt;len,</div><div class='del'>-			       local-&gt;loc,</div><div class='del'>-			       info,</div><div class='del'>-			       get_master_cinfo(priv),</div><div class='del'>-			       local,</div><div class='del'>-			       upload_info);</div><div class='del'>-	if (op_errno)</div><div class='del'>-		goto error;</div><div class='del'>-	if (upload_info == _gf_true) {</div><div class='del'>-		op_errno = init_inode_info_tail(info,</div><div class='del'>-						get_master_cinfo(priv));</div><div class='del'>-		if (op_errno)</div><div class='del'>-			goto error;</div><div class='del'>-		op_errno = inode_ctx_put(fd-&gt;inode, this,</div><div class='del'>-					 (uint64_t)(long)(info));</div><div class='del'>-		if (op_errno == -1) {</div><div class='del'>-			op_errno = EIO;</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * update the format string (append/update/cup a MAC)</div><div class='del'>-	 */</div><div class='del'>-	op_errno = update_format(local-&gt;format,</div><div class='del'>-				 (unsigned char *)old_mtd-&gt;data,</div><div class='del'>-				 old_mtd-&gt;len,</div><div class='del'>-				 local-&gt;mac_idx,</div><div class='del'>-				 mop,</div><div class='del'>-				 local-&gt;newloc,</div><div class='del'>-				 info,</div><div class='del'>-				 get_master_cinfo(priv),</div><div class='del'>-				 local);</div><div class='del'>-	if (op_errno)</div><div class='del'>-		goto error;</div><div class='del'>-	/*</div><div class='del'>-	 * store the new format string on the server</div><div class='del'>-	 */</div><div class='del'>-	if (new_mtd_size) {</div><div class='del'>-		op_errno = dict_set_static_bin(local-&gt;xattr,</div><div class='del'>-					       CRYPTO_FORMAT_PREFIX,</div><div class='del'>-					       local-&gt;format,</div><div class='del'>-					       new_mtd_size);</div><div class='del'>-		if (op_errno)</div><div class='del'>-			goto error;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   do_linkop,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-		   local-&gt;loc,</div><div class='del'>-		   local-&gt;xattr,</div><div class='del'>-		   0,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = op_errno;</div><div class='del'>-	unwind_fn(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t linkop_grab_local(call_frame_t *frame,</div><div class='del'>-				 xlator_t *this,</div><div class='del'>-				 loc_t *oldloc,</div><div class='del'>-				 loc_t *newloc,</div><div class='del'>-				 int flags, dict_t *xdata,</div><div class='del'>-				 glusterfs_fop_t op)</div><div class='del'>-{</div><div class='del'>-	int32_t ret = ENOMEM;</div><div class='del'>-	fd_t *fd;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-</div><div class='del'>-	local = crypt_alloc_local(frame, this, op);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto error;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	fd = fd_create(oldloc-&gt;inode, frame-&gt;root-&gt;pid);</div><div class='del'>-	if (!fd) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create fd");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;fd = fd;</div><div class='del'>-	local-&gt;flags = flags;</div><div class='del'>-	local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='del'>-	if (!local-&gt;loc)</div><div class='del'>-		goto error;</div><div class='del'>-	ret = loc_copy(local-&gt;loc, oldloc);</div><div class='del'>-	if (ret) {</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-		local-&gt;loc = NULL;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	if (newloc) {</div><div class='del'>-		local-&gt;newloc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='del'>-		if (!local-&gt;newloc) {</div><div class='del'>-			loc_wipe(local-&gt;loc);</div><div class='del'>-			GF_FREE(local-&gt;loc);</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-		ret = loc_copy(local-&gt;newloc, newloc);</div><div class='del'>-		if (ret) {</div><div class='del'>-			loc_wipe(local-&gt;loc);</div><div class='del'>-			GF_FREE(local-&gt;loc);</div><div class='del'>-			GF_FREE(local-&gt;newloc);</div><div class='del'>-			goto error;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	local-&gt;xattr = dict_new();</div><div class='del'>-	if (!local-&gt;xattr) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create dict");</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>-</div><div class='add'>+        /*</div><div class='add'>+         * info was found in the cache</div><div class='add'>+         */</div><div class='add'>+        local-&gt;info = info;</div><div class='add'>+        upload_info = _gf_false;</div><div class='add'>+    } else {</div><div class='add'>+        /*</div><div class='add'>+         * info wasn't found in the cache;</div><div class='add'>+         */</div><div class='add'>+        info = alloc_inode_info(local, local-&gt;loc);</div><div class='add'>+        if (!info)</div><div class='add'>+            goto error;</div><div class='add'>+        init_inode_info_head(info, fd);</div><div class='add'>+        local-&gt;info = info;</div><div class='add'>+        upload_info = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    op_errno = open_format((unsigned char *)old_mtd-&gt;data, old_mtd-&gt;len,</div><div class='add'>+                           local-&gt;loc, info, get_master_cinfo(priv), local,</div><div class='add'>+                           upload_info);</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto error;</div><div class='add'>+    if (upload_info == _gf_true) {</div><div class='add'>+        op_errno = init_inode_info_tail(info, get_master_cinfo(priv));</div><div class='add'>+        if (op_errno)</div><div class='add'>+            goto error;</div><div class='add'>+        op_errno = inode_ctx_put(fd-&gt;inode, this, (uint64_t)(long)(info));</div><div class='add'>+        if (op_errno == -1) {</div><div class='add'>+            op_errno = EIO;</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * update the format string (append/update/cup a MAC)</div><div class='add'>+     */</div><div class='add'>+    op_errno = update_format(local-&gt;format, (unsigned char *)old_mtd-&gt;data,</div><div class='add'>+                             old_mtd-&gt;len, local-&gt;mac_idx, mop, local-&gt;newloc,</div><div class='add'>+                             info, get_master_cinfo(priv), local);</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto error;</div><div class='add'>+    /*</div><div class='add'>+     * store the new format string on the server</div><div class='add'>+     */</div><div class='add'>+    if (new_mtd_size) {</div><div class='add'>+        op_errno = dict_set_static_bin(local-&gt;xattr, CRYPTO_FORMAT_PREFIX,</div><div class='add'>+                                       local-&gt;format, new_mtd_size);</div><div class='add'>+        if (op_errno)</div><div class='add'>+            goto error;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, do_linkop, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, local-&gt;loc, local-&gt;xattr, 0,</div><div class='add'>+               NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> error:</div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;xdata)</div><div class='del'>-                        dict_unref(local-&gt;xdata);</div><div class='del'>-                if (local-&gt;fd)</div><div class='del'>-                        fd_unref(local-&gt;fd);</div><div class='del'>-                local-&gt;fd = 0;</div><div class='del'>-                local-&gt;loc = NULL;</div><div class='del'>-                local-&gt;newloc = NULL;</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = ret;</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = op_errno;</div><div class='add'>+    unwind_fn(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+linkop_grab_local(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+                  loc_t *newloc, int flags, dict_t *xdata, glusterfs_fop_t op)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = ENOMEM;</div><div class='add'>+    fd_t *fd;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+</div><div class='add'>+    local = crypt_alloc_local(frame, this, op);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto error;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    fd = fd_create(oldloc-&gt;inode, frame-&gt;root-&gt;pid);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create fd");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;fd = fd;</div><div class='add'>+    local-&gt;flags = flags;</div><div class='add'>+    local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='add'>+    if (!local-&gt;loc)</div><div class='add'>+        goto error;</div><div class='add'>+    ret = loc_copy(local-&gt;loc, oldloc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+        local-&gt;loc = NULL;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    if (newloc) {</div><div class='add'>+        local-&gt;newloc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='add'>+        if (!local-&gt;newloc) {</div><div class='add'>+            loc_wipe(local-&gt;loc);</div><div class='add'>+            GF_FREE(local-&gt;loc);</div><div class='add'>+            goto error;</div><div class='add'>+        }</div><div class='add'>+        ret = loc_copy(local-&gt;newloc, newloc);</div><div class='add'>+        if (ret) {</div><div class='add'>+            loc_wipe(local-&gt;loc);</div><div class='add'>+            GF_FREE(local-&gt;loc);</div><div class='add'>+            GF_FREE(local-&gt;newloc);</div><div class='add'>+            goto error;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    local-&gt;xattr = dict_new();</div><div class='add'>+    if (!local-&gt;xattr) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create dict");</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+error:</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;xdata)</div><div class='add'>+            dict_unref(local-&gt;xdata);</div><div class='add'>+        if (local-&gt;fd)</div><div class='add'>+            fd_unref(local-&gt;fd);</div><div class='add'>+        local-&gt;fd = 0;</div><div class='add'>+        local-&gt;loc = NULL;</div><div class='add'>+        local-&gt;newloc = NULL;</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -3313,802 +2855,650 @@ error:</div><div class='ctx'>  * submit modified metadata;</div><div class='ctx'>  * wind;</div><div class='ctx'>  */</div><div class='del'>-static int32_t linkop(call_frame_t *frame,</div><div class='del'>-		      xlator_t *this,</div><div class='del'>-		      loc_t *oldloc,</div><div class='del'>-		      loc_t *newloc,</div><div class='del'>-		      int flags,</div><div class='del'>-		      dict_t *xdata,</div><div class='del'>-		      glusterfs_fop_t op)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	dict_t *dict;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-	void (*unwind_fn)(call_frame_t *frame);</div><div class='del'>-        void (*wind_fn)(call_frame_t *frame, xlator_t *this);</div><div class='del'>-</div><div class='del'>-        wind_fn = linkop_wind_dispatch(op);</div><div class='del'>-	unwind_fn = linkop_unwind_dispatch(op);</div><div class='del'>-</div><div class='del'>-	ret = linkop_grab_local(frame, this, oldloc, newloc, flags, xdata, op);</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	if (ret)</div><div class='del'>-		goto error;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd-&gt;inode-&gt;ia_type == IA_IFLNK)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-	dict = dict_new();</div><div class='del'>-	if (!dict) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create dict");</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * Set a message to crypt_open() that we need</div><div class='del'>-	 * locked metadata string.</div><div class='del'>-	 * All link operations (link, unlink, rename)</div><div class='del'>-	 * need write lock</div><div class='del'>-	 */</div><div class='del'>-	msgflags_set_mtd_wlock(&amp;local-&gt;msgflags);</div><div class='del'>-	ret = dict_set_static_bin(dict,</div><div class='del'>-				  MSGFLAGS_PREFIX,</div><div class='del'>-				  &amp;local-&gt;msgflags,</div><div class='del'>-				  sizeof(local-&gt;msgflags));</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "Can not set dict");</div><div class='del'>-		dict_unref(dict);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * verify metadata against the old pathname</div><div class='del'>-	 * and retrieve locked metadata string</div><div class='del'>-	 */</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   linkop_begin,</div><div class='del'>-		   this,</div><div class='del'>-		   this-&gt;fops-&gt;open, /* crypt_open() */</div><div class='del'>-		   oldloc,</div><div class='del'>-		   O_RDWR,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   dict);</div><div class='del'>-	dict_unref(dict);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+linkop(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+       int flags, dict_t *xdata, glusterfs_fop_t op)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    dict_t *dict;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+    void (*unwind_fn)(call_frame_t * frame);</div><div class='add'>+    void (*wind_fn)(call_frame_t * frame, xlator_t * this);</div><div class='add'>+</div><div class='add'>+    wind_fn = linkop_wind_dispatch(op);</div><div class='add'>+    unwind_fn = linkop_unwind_dispatch(op);</div><div class='add'>+</div><div class='add'>+    ret = linkop_grab_local(frame, this, oldloc, newloc, flags, xdata, op);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd-&gt;inode-&gt;ia_type == IA_IFLNK)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Can not create dict");</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * Set a message to crypt_open() that we need</div><div class='add'>+     * locked metadata string.</div><div class='add'>+     * All link operations (link, unlink, rename)</div><div class='add'>+     * need write lock</div><div class='add'>+     */</div><div class='add'>+    msgflags_set_mtd_wlock(&amp;local-&gt;msgflags);</div><div class='add'>+    ret = dict_set_static_bin(dict, MSGFLAGS_PREFIX, &amp;local-&gt;msgflags,</div><div class='add'>+                              sizeof(local-&gt;msgflags));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Can not set dict");</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * verify metadata against the old pathname</div><div class='add'>+     * and retrieve locked metadata string</div><div class='add'>+     */</div><div class='add'>+    STACK_WIND(frame, linkop_begin, this, this-&gt;fops-&gt;open, /* crypt_open() */</div><div class='add'>+               oldloc, O_RDWR, local-&gt;fd, dict);</div><div class='add'>+    dict_unref(dict);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        wind_fn(frame, this);</div><div class='del'>-        return 0;</div><div class='add'>+    wind_fn(frame, this);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> error:</div><div class='del'>-	local-&gt;op_ret = -1;</div><div class='del'>-	local-&gt;op_errno = ret;</div><div class='del'>-	unwind_fn(frame);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_link(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			  loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return linkop(frame, this, oldloc, newloc, 0, xdata, GF_FOP_LINK);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_unlink(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			    loc_t *loc, int flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return linkop(frame, this, loc, NULL, flags, xdata, GF_FOP_UNLINK);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_rename(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			    loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	return linkop(frame, this, oldloc, newloc, 0, xdata, GF_FOP_RENAME);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void put_one_call_open(call_frame_t *frame)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	if (put_one_call(local)) {</div><div class='del'>-		fd_t *fd = local-&gt;fd;</div><div class='del'>-		loc_t *loc = local-&gt;loc;</div><div class='del'>-		dict_t *xdata = local-&gt;xdata;</div><div class='del'>-</div><div class='del'>-		CRYPT_STACK_UNWIND(open,</div><div class='del'>-				   frame,</div><div class='del'>-				   local-&gt;op_ret,</div><div class='del'>-				   local-&gt;op_errno,</div><div class='del'>-				   fd,</div><div class='del'>-				   xdata);</div><div class='del'>-		fd_unref(fd);</div><div class='del'>-		if (xdata)</div><div class='del'>-			dict_unref(xdata);</div><div class='del'>-		loc_wipe(loc);</div><div class='del'>-		GF_FREE(loc);</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t __crypt_readv_done(call_frame_t *frame,</div><div class='del'>-				  void *cookie,</div><div class='del'>-				  xlator_t *this,</div><div class='del'>-				  int32_t op_ret,</div><div class='del'>-				  int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	fd_t *local_fd = local-&gt;fd;</div><div class='del'>-	dict_t *local_xdata = local-&gt;xdata;</div><div class='del'>-	/* read deals with data configs only */</div><div class='del'>-	struct iovec *avec = local-&gt;data_conf.avec;</div><div class='del'>-	char **pool = local-&gt;data_conf.pool;</div><div class='del'>-	int blocks_in_pool = local-&gt;data_conf.blocks_in_pool;</div><div class='del'>-	struct iobref *iobref = local-&gt;iobref;</div><div class='del'>-	struct iobref *iobref_data = local-&gt;iobref_data;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "readv unlock failed (%d)", op_errno);</div><div class='del'>-		if (local-&gt;op_ret &gt;= 0) {</div><div class='del'>-			local-&gt;op_ret = op_ret;</div><div class='del'>-			local-&gt;op_errno = op_errno;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	dump_plain_text(local, avec);</div><div class='del'>-</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "readv: ret_to_user: %d, iovec len: %d, ia_size: %llu",</div><div class='del'>-	       (int)(local-&gt;rw_count &gt; 0 ? local-&gt;rw_count : local-&gt;op_ret),</div><div class='del'>-	       (int)(local-&gt;rw_count &gt; 0 ? iov_length(avec, local-&gt;data_conf.acount) : 0),</div><div class='del'>-	       (unsigned long long)local-&gt;buf.ia_size);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(readv,</div><div class='del'>-			   frame,</div><div class='del'>-			   local-&gt;rw_count &gt; 0 ? local-&gt;rw_count : local-&gt;op_ret,</div><div class='del'>-			   local-&gt;op_errno,</div><div class='del'>-			   avec,</div><div class='del'>-			   avec ? local-&gt;data_conf.acount : 0,</div><div class='del'>-			   &amp;local-&gt;buf,</div><div class='del'>-			   local-&gt;iobref,</div><div class='del'>-			   local_xdata);</div><div class='del'>-</div><div class='del'>-	free_avec(avec, pool, blocks_in_pool);</div><div class='del'>-	fd_unref(local_fd);</div><div class='del'>-	if (local_xdata)</div><div class='del'>-		dict_unref(local_xdata);</div><div class='del'>-	if (iobref)</div><div class='del'>-		iobref_unref(iobref);</div><div class='del'>-	if (iobref_data)</div><div class='del'>-		iobref_unref(iobref_data);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void crypt_readv_done(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	if (parent_is_crypt_xlator(frame, this))</div><div class='del'>-		/*</div><div class='del'>-		 *  don't unlock (it will be done by the parent)</div><div class='del'>-		 */</div><div class='del'>-		__crypt_readv_done(frame, NULL, this, 0, 0, NULL);</div><div class='del'>-	else {</div><div class='del'>-		crypt_local_t *local = frame-&gt;local;</div><div class='del'>-		struct gf_flock  lock  = {0, };</div><div class='del'>-</div><div class='del'>-		lock.l_type   = F_UNLCK;</div><div class='del'>-		lock.l_whence = SEEK_SET;</div><div class='del'>-		lock.l_start  = 0;</div><div class='del'>-		lock.l_len    = 0;</div><div class='del'>-		lock.l_pid    = 0;</div><div class='del'>-</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   __crypt_readv_done,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-			   this-&gt;name,</div><div class='del'>-			   local-&gt;fd,</div><div class='del'>-			   F_SETLKW,</div><div class='del'>-			   &amp;lock,</div><div class='del'>-			   NULL);</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void put_one_call_readv(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	if (put_one_call(local))</div><div class='del'>-		crypt_readv_done(frame, this);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t __crypt_writev_done(call_frame_t *frame,</div><div class='del'>-				   void *cookie,</div><div class='del'>-				   xlator_t *this,</div><div class='del'>-				   int32_t op_ret,</div><div class='del'>-				   int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	fd_t *local_fd = local-&gt;fd;</div><div class='del'>-	dict_t *local_xdata = local-&gt;xdata;</div><div class='del'>-	int32_t ret_to_user;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;xattr)</div><div class='del'>-		dict_unref(local-&gt;xattr);</div><div class='del'>-	/*</div><div class='del'>-	 * Calculate amount of butes to be returned</div><div class='del'>-	 * to user. We need to subtract paddings that</div><div class='del'>-	 * have been written as a part of atom.</div><div class='del'>-	 */</div><div class='del'>-	/*</div><div class='del'>-	 * subtract head padding</div><div class='del'>-	 */</div><div class='del'>-	if (local-&gt;rw_count == 0)</div><div class='del'>-		/*</div><div class='del'>-		 * Nothing has been written, it must be an error</div><div class='del'>-		 */</div><div class='del'>-		ret_to_user = local-&gt;op_ret;</div><div class='del'>-	else if (local-&gt;rw_count &lt;= local-&gt;data_conf.off_in_head) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Incomplete write");</div><div class='del'>-		ret_to_user = 0;</div><div class='del'>-	}</div><div class='del'>-	else</div><div class='del'>-		ret_to_user = local-&gt;rw_count -</div><div class='del'>-			local-&gt;data_conf.off_in_head;</div><div class='del'>-	/*</div><div class='del'>-	 * subtract tail padding</div><div class='del'>-	 */</div><div class='del'>-	if (ret_to_user &gt; local-&gt;data_conf.orig_size)</div><div class='del'>-		ret_to_user = local-&gt;data_conf.orig_size;</div><div class='del'>-</div><div class='del'>-	if (local-&gt;iobref)</div><div class='del'>-		iobref_unref(local-&gt;iobref);</div><div class='del'>-	if (local-&gt;iobref_data)</div><div class='del'>-		iobref_unref(local-&gt;iobref_data);</div><div class='del'>-	free_avec_data(local);</div><div class='del'>-	free_avec_hole(local);</div><div class='del'>-</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "writev: ret_to_user: %d", ret_to_user);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(writev,</div><div class='del'>-			   frame,</div><div class='del'>-			   ret_to_user,</div><div class='del'>-			   local-&gt;op_errno,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   local_xdata);</div><div class='del'>-	fd_unref(local_fd);</div><div class='del'>-	if (local_xdata)</div><div class='del'>-		dict_unref(local_xdata);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_writev_done(call_frame_t *frame,</div><div class='del'>-				 void *cookie,</div><div class='del'>-				 xlator_t *this,</div><div class='del'>-				 int32_t op_ret,</div><div class='del'>-				 int32_t op_errno,</div><div class='del'>-				 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "can not update file size");</div><div class='del'>-</div><div class='del'>-	if (parent_is_crypt_xlator(frame, this))</div><div class='del'>-		/*</div><div class='del'>-		 * don't unlock (it will be done by the parent)</div><div class='del'>-		 */</div><div class='del'>-		__crypt_writev_done(frame, NULL, this, 0, 0, NULL);</div><div class='del'>-	else {</div><div class='del'>-		struct gf_flock  lock  = {0, };</div><div class='del'>-</div><div class='del'>-		lock.l_type   = F_UNLCK;</div><div class='del'>-		lock.l_whence = SEEK_SET;</div><div class='del'>-		lock.l_start  = 0;</div><div class='del'>-		lock.l_len    = 0;</div><div class='del'>-		lock.l_pid    = 0;</div><div class='del'>-</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   __crypt_writev_done,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-			   this-&gt;name,</div><div class='del'>-			   local-&gt;fd,</div><div class='del'>-			   F_SETLKW,</div><div class='del'>-			   &amp;lock,</div><div class='del'>-			   NULL);</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void put_one_call_writev(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	if (put_one_call(local)) {</div><div class='del'>-		if (local-&gt;update_disk_file_size) {</div><div class='del'>-			int32_t ret;</div><div class='del'>-			/*</div><div class='del'>-			 * update file size, unlock the file and unwind</div><div class='del'>-			 */</div><div class='del'>-			ret = dict_set(local-&gt;xattr,</div><div class='del'>-				       FSIZE_XATTR_PREFIX,</div><div class='del'>-				       data_from_uint64(local-&gt;cur_file_size));</div><div class='del'>-			if (ret) {</div><div class='del'>-				gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-				       "can not set key to update file size");</div><div class='del'>-				crypt_writev_done(frame, NULL,</div><div class='del'>-						  this, 0, 0, NULL);</div><div class='del'>-				return;</div><div class='del'>-			}</div><div class='del'>-			gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-			       "Updating disk file size to %llu",</div><div class='del'>-			       (unsigned long long)local-&gt;cur_file_size);</div><div class='del'>-			STACK_WIND(frame,</div><div class='del'>-				   crypt_writev_done,</div><div class='del'>-				   FIRST_CHILD(this),</div><div class='del'>-				   FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-				   local-&gt;fd,</div><div class='del'>-				   local-&gt;xattr, /* CRYPTO_FORMAT_PREFIX */</div><div class='del'>-				   0,</div><div class='del'>-				   NULL);</div><div class='del'>-		}</div><div class='del'>-		else</div><div class='del'>-			crypt_writev_done(frame, NULL, this, 0, 0, NULL);</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t __crypt_ftruncate_done(call_frame_t *frame,</div><div class='del'>-				      void *cookie,</div><div class='del'>-				      xlator_t *this,</div><div class='del'>-				      int32_t op_ret,</div><div class='del'>-				      int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	fd_t *local_fd = local-&gt;fd;</div><div class='del'>-	dict_t *local_xdata = local-&gt;xdata;</div><div class='del'>-	char *iobase = local-&gt;vec.iov_base;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "ftruncate unlock failed (%d)", op_errno);</div><div class='del'>-		if (local-&gt;op_ret &gt;= 0) {</div><div class='del'>-			local-&gt;op_ret = op_ret;</div><div class='del'>-			local-&gt;op_errno = op_errno;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	if (local-&gt;iobref_data)</div><div class='del'>-		iobref_unref(local-&gt;iobref_data);</div><div class='del'>-	free_avec_data(local);</div><div class='del'>-	free_avec_hole(local);</div><div class='del'>-</div><div class='del'>-	gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-	       "ftruncate, return to user: presize=%llu, postsize=%llu",</div><div class='del'>-	       (unsigned long long)local-&gt;prebuf.ia_size,</div><div class='del'>-	       (unsigned long long)local-&gt;postbuf.ia_size);</div><div class='del'>-</div><div class='del'>-	CRYPT_STACK_UNWIND(ftruncate,</div><div class='del'>-			   frame,</div><div class='del'>-			   ((local-&gt;op_ret &lt; 0) ? -1 : 0),</div><div class='del'>-			   local-&gt;op_errno,</div><div class='del'>-			   &amp;local-&gt;prebuf,</div><div class='del'>-			   &amp;local-&gt;postbuf,</div><div class='del'>-			   local_xdata);</div><div class='del'>-	fd_unref(local_fd);</div><div class='del'>-	if (local_xdata)</div><div class='del'>-		dict_unref(local_xdata);</div><div class='del'>-	if (iobase)</div><div class='del'>-		GF_FREE(iobase);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_ftruncate_done(call_frame_t *frame,</div><div class='del'>-				    void *cookie,</div><div class='del'>-				    xlator_t *this,</div><div class='del'>-				    int32_t op_ret,</div><div class='del'>-				    int32_t op_errno,</div><div class='del'>-				    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	struct gf_flock  lock  = {0, };</div><div class='del'>-</div><div class='del'>-	dict_unref(local-&gt;xattr);</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "can not update file size");</div><div class='del'>-</div><div class='del'>-	lock.l_type   = F_UNLCK;</div><div class='del'>-	lock.l_whence = SEEK_SET;</div><div class='del'>-	lock.l_start  = 0;</div><div class='del'>-	lock.l_len    = 0;</div><div class='del'>-	lock.l_pid    = 0;</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   __crypt_ftruncate_done,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;finodelk,</div><div class='del'>-		   this-&gt;name,</div><div class='del'>-		   local-&gt;fd,</div><div class='del'>-		   F_SETLKW,</div><div class='del'>-		   &amp;lock,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void put_one_call_ftruncate(call_frame_t *frame, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	if (put_one_call(local)) {</div><div class='del'>-		if (local-&gt;update_disk_file_size) {</div><div class='del'>-			int32_t ret;</div><div class='del'>-			/*</div><div class='del'>-			 * update file size, unlock the file and unwind</div><div class='del'>-			 */</div><div class='del'>-			ret = dict_set(local-&gt;xattr,</div><div class='del'>-				       FSIZE_XATTR_PREFIX,</div><div class='del'>-				       data_from_uint64(local-&gt;cur_file_size));</div><div class='del'>-			if (ret) {</div><div class='del'>-				gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-				       "can not set key to update file size");</div><div class='del'>-				crypt_ftruncate_done(frame, NULL,</div><div class='del'>-						     this, 0, 0, NULL);</div><div class='del'>-				return;</div><div class='del'>-			}</div><div class='del'>-			gf_log("crypt", GF_LOG_DEBUG,</div><div class='del'>-			       "Updating disk file size to %llu",</div><div class='del'>-			       (unsigned long long)local-&gt;cur_file_size);</div><div class='del'>-			STACK_WIND(frame,</div><div class='del'>-				   crypt_ftruncate_done,</div><div class='del'>-				   FIRST_CHILD(this),</div><div class='del'>-				   FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-				   local-&gt;fd,</div><div class='del'>-				   local-&gt;xattr, /* CRYPTO_FORMAT_PREFIX */</div><div class='del'>-				   0,</div><div class='del'>-				   NULL);</div><div class='del'>-		}</div><div class='del'>-		else</div><div class='del'>-			crypt_ftruncate_done(frame, NULL, this, 0, 0, NULL);</div><div class='del'>-	}</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = ret;</div><div class='add'>+    unwind_fn(frame);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+           dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return linkop(frame, this, oldloc, newloc, 0, xdata, GF_FOP_LINK);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return linkop(frame, this, loc, NULL, flags, xdata, GF_FOP_UNLINK);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    return linkop(frame, this, oldloc, newloc, 0, xdata, GF_FOP_RENAME);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+put_one_call_open(call_frame_t *frame)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    if (put_one_call(local)) {</div><div class='add'>+        fd_t *fd = local-&gt;fd;</div><div class='add'>+        loc_t *loc = local-&gt;loc;</div><div class='add'>+        dict_t *xdata = local-&gt;xdata;</div><div class='add'>+</div><div class='add'>+        CRYPT_STACK_UNWIND(open, frame, local-&gt;op_ret, local-&gt;op_errno, fd,</div><div class='add'>+                           xdata);</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        if (xdata)</div><div class='add'>+            dict_unref(xdata);</div><div class='add'>+        loc_wipe(loc);</div><div class='add'>+        GF_FREE(loc);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+__crypt_readv_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    fd_t *local_fd = local-&gt;fd;</div><div class='add'>+    dict_t *local_xdata = local-&gt;xdata;</div><div class='add'>+    /* read deals with data configs only */</div><div class='add'>+    struct iovec *avec = local-&gt;data_conf.avec;</div><div class='add'>+    char **pool = local-&gt;data_conf.pool;</div><div class='add'>+    int blocks_in_pool = local-&gt;data_conf.blocks_in_pool;</div><div class='add'>+    struct iobref *iobref = local-&gt;iobref;</div><div class='add'>+    struct iobref *iobref_data = local-&gt;iobref_data;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "readv unlock failed (%d)",</div><div class='add'>+               op_errno);</div><div class='add'>+        if (local-&gt;op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    dump_plain_text(local, avec);</div><div class='add'>+</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+           "readv: ret_to_user: %d, iovec len: %d, ia_size: %llu",</div><div class='add'>+           (int)(local-&gt;rw_count &gt; 0 ? local-&gt;rw_count : local-&gt;op_ret),</div><div class='add'>+           (int)(local-&gt;rw_count &gt; 0 ? iov_length(avec, local-&gt;data_conf.acount)</div><div class='add'>+                                     : 0),</div><div class='add'>+           (unsigned long long)local-&gt;buf.ia_size);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(</div><div class='add'>+        readv, frame, local-&gt;rw_count &gt; 0 ? local-&gt;rw_count : local-&gt;op_ret,</div><div class='add'>+        local-&gt;op_errno, avec, avec ? local-&gt;data_conf.acount : 0, &amp;local-&gt;buf,</div><div class='add'>+        local-&gt;iobref, local_xdata);</div><div class='add'>+</div><div class='add'>+    free_avec(avec, pool, blocks_in_pool);</div><div class='add'>+    fd_unref(local_fd);</div><div class='add'>+    if (local_xdata)</div><div class='add'>+        dict_unref(local_xdata);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (iobref_data)</div><div class='add'>+        iobref_unref(iobref_data);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+crypt_readv_done(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    if (parent_is_crypt_xlator(frame, this))</div><div class='add'>+        /*</div><div class='add'>+         *  don't unlock (it will be done by the parent)</div><div class='add'>+         */</div><div class='add'>+        __crypt_readv_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    else {</div><div class='add'>+        crypt_local_t *local = frame-&gt;local;</div><div class='add'>+        struct gf_flock lock = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        lock.l_type = F_UNLCK;</div><div class='add'>+        lock.l_whence = SEEK_SET;</div><div class='add'>+        lock.l_start = 0;</div><div class='add'>+        lock.l_len = 0;</div><div class='add'>+        lock.l_pid = 0;</div><div class='add'>+</div><div class='add'>+        STACK_WIND(frame, __crypt_readv_done, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+                   F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+put_one_call_readv(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    if (put_one_call(local))</div><div class='add'>+        crypt_readv_done(frame, this);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+__crypt_writev_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    fd_t *local_fd = local-&gt;fd;</div><div class='add'>+    dict_t *local_xdata = local-&gt;xdata;</div><div class='add'>+    int32_t ret_to_user;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;xattr)</div><div class='add'>+        dict_unref(local-&gt;xattr);</div><div class='add'>+    /*</div><div class='add'>+     * Calculate amount of butes to be returned</div><div class='add'>+     * to user. We need to subtract paddings that</div><div class='add'>+     * have been written as a part of atom.</div><div class='add'>+     */</div><div class='add'>+    /*</div><div class='add'>+     * subtract head padding</div><div class='add'>+     */</div><div class='add'>+    if (local-&gt;rw_count == 0)</div><div class='add'>+        /*</div><div class='add'>+         * Nothing has been written, it must be an error</div><div class='add'>+         */</div><div class='add'>+        ret_to_user = local-&gt;op_ret;</div><div class='add'>+    else if (local-&gt;rw_count &lt;= local-&gt;data_conf.off_in_head) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Incomplete write");</div><div class='add'>+        ret_to_user = 0;</div><div class='add'>+    } else</div><div class='add'>+        ret_to_user = local-&gt;rw_count - local-&gt;data_conf.off_in_head;</div><div class='add'>+    /*</div><div class='add'>+     * subtract tail padding</div><div class='add'>+     */</div><div class='add'>+    if (ret_to_user &gt; local-&gt;data_conf.orig_size)</div><div class='add'>+        ret_to_user = local-&gt;data_conf.orig_size;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;iobref)</div><div class='add'>+        iobref_unref(local-&gt;iobref);</div><div class='add'>+    if (local-&gt;iobref_data)</div><div class='add'>+        iobref_unref(local-&gt;iobref_data);</div><div class='add'>+    free_avec_data(local);</div><div class='add'>+    free_avec_hole(local);</div><div class='add'>+</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG, "writev: ret_to_user: %d", ret_to_user);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(writev, frame, ret_to_user, local-&gt;op_errno,</div><div class='add'>+                       &amp;local-&gt;prebuf, &amp;local-&gt;postbuf, local_xdata);</div><div class='add'>+    fd_unref(local_fd);</div><div class='add'>+    if (local_xdata)</div><div class='add'>+        dict_unref(local_xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_writev_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "can not update file size");</div><div class='add'>+</div><div class='add'>+    if (parent_is_crypt_xlator(frame, this))</div><div class='add'>+        /*</div><div class='add'>+         * don't unlock (it will be done by the parent)</div><div class='add'>+         */</div><div class='add'>+        __crypt_writev_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    else {</div><div class='add'>+        struct gf_flock lock = {</div><div class='add'>+            0,</div><div class='add'>+        };</div><div class='add'>+</div><div class='add'>+        lock.l_type = F_UNLCK;</div><div class='add'>+        lock.l_whence = SEEK_SET;</div><div class='add'>+        lock.l_start = 0;</div><div class='add'>+        lock.l_len = 0;</div><div class='add'>+        lock.l_pid = 0;</div><div class='add'>+</div><div class='add'>+        STACK_WIND(frame, __crypt_writev_done, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+                   F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+put_one_call_writev(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    if (put_one_call(local)) {</div><div class='add'>+        if (local-&gt;update_disk_file_size) {</div><div class='add'>+            int32_t ret;</div><div class='add'>+            /*</div><div class='add'>+             * update file size, unlock the file and unwind</div><div class='add'>+             */</div><div class='add'>+            ret = dict_set(local-&gt;xattr, FSIZE_XATTR_PREFIX,</div><div class='add'>+                           data_from_uint64(local-&gt;cur_file_size));</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("crypt", GF_LOG_WARNING,</div><div class='add'>+                       "can not set key to update file size");</div><div class='add'>+                crypt_writev_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+                return;</div><div class='add'>+            }</div><div class='add'>+            gf_log("crypt", GF_LOG_DEBUG, "Updating disk file size to %llu",</div><div class='add'>+                   (unsigned long long)local-&gt;cur_file_size);</div><div class='add'>+            STACK_WIND(frame, crypt_writev_done, FIRST_CHILD(this),</div><div class='add'>+                       FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+                       local-&gt;xattr, /* CRYPTO_FORMAT_PREFIX */</div><div class='add'>+                       0, NULL);</div><div class='add'>+        } else</div><div class='add'>+            crypt_writev_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+__crypt_ftruncate_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    fd_t *local_fd = local-&gt;fd;</div><div class='add'>+    dict_t *local_xdata = local-&gt;xdata;</div><div class='add'>+    char *iobase = local-&gt;vec.iov_base;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "ftruncate unlock failed (%d)",</div><div class='add'>+               op_errno);</div><div class='add'>+        if (local-&gt;op_ret &gt;= 0) {</div><div class='add'>+            local-&gt;op_ret = op_ret;</div><div class='add'>+            local-&gt;op_errno = op_errno;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;iobref_data)</div><div class='add'>+        iobref_unref(local-&gt;iobref_data);</div><div class='add'>+    free_avec_data(local);</div><div class='add'>+    free_avec_hole(local);</div><div class='add'>+</div><div class='add'>+    gf_log("crypt", GF_LOG_DEBUG,</div><div class='add'>+           "ftruncate, return to user: presize=%llu, postsize=%llu",</div><div class='add'>+           (unsigned long long)local-&gt;prebuf.ia_size,</div><div class='add'>+           (unsigned long long)local-&gt;postbuf.ia_size);</div><div class='add'>+</div><div class='add'>+    CRYPT_STACK_UNWIND(ftruncate, frame, ((local-&gt;op_ret &lt; 0) ? -1 : 0),</div><div class='add'>+                       local-&gt;op_errno, &amp;local-&gt;prebuf, &amp;local-&gt;postbuf,</div><div class='add'>+                       local_xdata);</div><div class='add'>+    fd_unref(local_fd);</div><div class='add'>+    if (local_xdata)</div><div class='add'>+        dict_unref(local_xdata);</div><div class='add'>+    if (iobase)</div><div class='add'>+        GF_FREE(iobase);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_ftruncate_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    dict_unref(local-&gt;xattr);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "can not update file size");</div><div class='add'>+</div><div class='add'>+    lock.l_type = F_UNLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_pid = 0;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, __crypt_ftruncate_done, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, this-&gt;name, local-&gt;fd,</div><div class='add'>+               F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+put_one_call_ftruncate(call_frame_t *frame, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    if (put_one_call(local)) {</div><div class='add'>+        if (local-&gt;update_disk_file_size) {</div><div class='add'>+            int32_t ret;</div><div class='add'>+            /*</div><div class='add'>+             * update file size, unlock the file and unwind</div><div class='add'>+             */</div><div class='add'>+            ret = dict_set(local-&gt;xattr, FSIZE_XATTR_PREFIX,</div><div class='add'>+                           data_from_uint64(local-&gt;cur_file_size));</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log("crypt", GF_LOG_WARNING,</div><div class='add'>+                       "can not set key to update file size");</div><div class='add'>+                crypt_ftruncate_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+                return;</div><div class='add'>+            }</div><div class='add'>+            gf_log("crypt", GF_LOG_DEBUG, "Updating disk file size to %llu",</div><div class='add'>+                   (unsigned long long)local-&gt;cur_file_size);</div><div class='add'>+            STACK_WIND(frame, crypt_ftruncate_done, FIRST_CHILD(this),</div><div class='add'>+                       FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, local-&gt;fd,</div><div class='add'>+                       local-&gt;xattr, /* CRYPTO_FORMAT_PREFIX */</div><div class='add'>+                       0, NULL);</div><div class='add'>+        } else</div><div class='add'>+            crypt_ftruncate_done(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * load regular file size for some FOPs</div><div class='ctx'>  */</div><div class='del'>-static int32_t load_file_size(call_frame_t *frame,</div><div class='del'>-			      void *cookie,</div><div class='del'>-			      xlator_t *this,</div><div class='del'>-			      int32_t op_ret,</div><div class='del'>-			      int32_t op_errno,</div><div class='del'>-			      dict_t *dict,</div><div class='del'>-			      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	data_t *data;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	dict_t *local_xdata = local-&gt;xdata;</div><div class='del'>-	inode_t *local_inode = local-&gt;inode;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto unwind;</div><div class='del'>-	/*</div><div class='del'>-	 * load regular file size</div><div class='del'>-	 */</div><div class='del'>-	data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='del'>-	if (!data) {</div><div class='del'>-		if (local-&gt;xdata)</div><div class='del'>-			dict_unref(local-&gt;xdata);</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='del'>-		op_ret = -1;</div><div class='del'>-		op_errno = EIO;</div><div class='del'>-		goto unwind;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;buf.ia_size = data_to_uint64(data);</div><div class='del'>-</div><div class='del'>-	gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-	       "FOP %d: Translate regular file to %llu",</div><div class='del'>-	       local-&gt;fop,</div><div class='del'>-	       (unsigned long long)local-&gt;buf.ia_size);</div><div class='del'>- unwind:</div><div class='del'>-	if (local-&gt;fd)</div><div class='del'>-		fd_unref(local-&gt;fd);</div><div class='del'>-	if (local-&gt;loc) {</div><div class='del'>-		loc_wipe(local-&gt;loc);</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-	}</div><div class='del'>-	switch (local-&gt;fop) {</div><div class='del'>-	case GF_FOP_FSTAT:</div><div class='del'>-		CRYPT_STACK_UNWIND(fstat,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno,</div><div class='del'>-				   op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL,</div><div class='del'>-				   local-&gt;xdata);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_STAT:</div><div class='del'>-		CRYPT_STACK_UNWIND(stat,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno,</div><div class='del'>-				   op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL,</div><div class='del'>-				   local-&gt;xdata);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_LOOKUP:</div><div class='del'>-		CRYPT_STACK_UNWIND(lookup,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno,</div><div class='del'>-				   op_ret &gt;= 0 ? local-&gt;inode : NULL,</div><div class='del'>-				   op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL,</div><div class='del'>-				   local-&gt;xdata,</div><div class='del'>-				   op_ret &gt;= 0 ? &amp;local-&gt;postbuf : NULL);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_READ:</div><div class='del'>-		CRYPT_STACK_UNWIND(readv,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno,</div><div class='del'>-				   NULL,</div><div class='del'>-				   0,</div><div class='del'>-				   op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL,</div><div class='del'>-				   NULL,</div><div class='del'>-				   NULL);</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-		       "Improper file operation %d", local-&gt;fop);</div><div class='del'>-	}</div><div class='del'>-	if (local_xdata)</div><div class='del'>-		dict_unref(local_xdata);</div><div class='del'>-	if (local_inode)</div><div class='del'>-		inode_unref(local_inode);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_stat_common_cbk(call_frame_t *frame,</div><div class='del'>-				     void *cookie,</div><div class='del'>-				     xlator_t *this,</div><div class='del'>-				     int32_t op_ret,</div><div class='del'>-				     int32_t op_errno,</div><div class='del'>-				     struct iatt *buf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto unwind;</div><div class='del'>-	if (!IA_ISREG(buf-&gt;ia_type))</div><div class='del'>-		goto unwind;</div><div class='del'>-</div><div class='del'>-	local-&gt;buf = *buf;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-</div><div class='del'>-	switch (local-&gt;fop) {</div><div class='del'>-	case GF_FOP_FSTAT:</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   load_file_size,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-			   local-&gt;fd,</div><div class='del'>-			   FSIZE_XATTR_PREFIX,</div><div class='del'>-			   NULL);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_STAT:</div><div class='del'>-		STACK_WIND(frame,</div><div class='del'>-			   load_file_size,</div><div class='del'>-			   FIRST_CHILD(this),</div><div class='del'>-			   FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-			   local-&gt;loc,</div><div class='del'>-			   FSIZE_XATTR_PREFIX,</div><div class='del'>-			   NULL);</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"Improper file operation %d", local-&gt;fop);</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>- unwind:</div><div class='del'>-	if (local-&gt;fd)</div><div class='del'>-		fd_unref(local-&gt;fd);</div><div class='del'>-	if (local-&gt;loc) {</div><div class='del'>-		loc_wipe(local-&gt;loc);</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-	}</div><div class='del'>-	switch (local-&gt;fop) {</div><div class='del'>-	case GF_FOP_FSTAT:</div><div class='del'>-		CRYPT_STACK_UNWIND(fstat,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno,</div><div class='del'>-				   op_ret &gt;= 0 ? buf : NULL,</div><div class='del'>-				   op_ret &gt;= 0 ? xdata : NULL);</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_STAT:</div><div class='del'>-		CRYPT_STACK_UNWIND(stat,</div><div class='del'>-				   frame,</div><div class='del'>-				   op_ret,</div><div class='del'>-				   op_errno,</div><div class='del'>-				   op_ret &gt;= 0 ? buf : NULL,</div><div class='del'>-				   op_ret &gt;= 0 ? xdata : NULL);</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"Improper file operation %d", local-&gt;fop);</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_fstat(call_frame_t *frame,</div><div class='del'>-			   xlator_t *this,</div><div class='del'>-			   fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_FSTAT);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto error;</div><div class='del'>-	local-&gt;fd = fd_ref(fd);</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_stat_common_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-		   fd,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(fstat,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   ENOMEM,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_stat(call_frame_t *frame,</div><div class='del'>-			  xlator_t *this,</div><div class='del'>-			  loc_t *loc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_STAT);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto error;</div><div class='del'>-	local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='del'>-	if (!local-&gt;loc)</div><div class='del'>-		goto error;</div><div class='del'>-	ret = loc_copy(local-&gt;loc, loc);</div><div class='del'>-	if (ret) {</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_stat_common_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;stat,</div><div class='del'>-		   loc,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(stat,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   ENOMEM,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_lookup_cbk(call_frame_t *frame,</div><div class='del'>-				void *cookie,</div><div class='del'>-				xlator_t *this,</div><div class='del'>-				int32_t op_ret,</div><div class='del'>-				int32_t op_errno,</div><div class='del'>-				inode_t *inode,</div><div class='del'>-				struct iatt *buf, dict_t *xdata,</div><div class='del'>-				struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto unwind;</div><div class='del'>-	if (!IA_ISREG(buf-&gt;ia_type))</div><div class='del'>-		goto unwind;</div><div class='del'>-</div><div class='del'>-	local-&gt;inode = inode_ref(inode);</div><div class='del'>-	local-&gt;buf = *buf;</div><div class='del'>-	local-&gt;postbuf = *postparent;</div><div class='del'>-	if (xdata)</div><div class='del'>-		local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-	gf_uuid_copy(local-&gt;loc-&gt;gfid, buf-&gt;ia_gfid);</div><div class='del'>-</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   load_file_size,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-		   local-&gt;loc,</div><div class='del'>-		   FSIZE_XATTR_PREFIX,</div><div class='del'>-		   NULL);</div><div class='del'>-	return 0;</div><div class='del'>- unwind:</div><div class='del'>-	loc_wipe(local-&gt;loc);</div><div class='del'>-	GF_FREE(local-&gt;loc);</div><div class='del'>-	CRYPT_STACK_UNWIND(lookup,</div><div class='del'>-			   frame,</div><div class='del'>-			   op_ret,</div><div class='del'>-			   op_errno,</div><div class='del'>-			   inode,</div><div class='del'>-			   buf,</div><div class='del'>-			   xdata,</div><div class='del'>-			   postparent);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_lookup(call_frame_t *frame,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    loc_t *loc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-</div><div class='del'>-	local = crypt_alloc_local(frame, this, GF_FOP_LOOKUP);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto error;</div><div class='del'>-	local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='del'>-	if (!local-&gt;loc)</div><div class='del'>-		goto error;</div><div class='del'>-	ret = loc_copy(local-&gt;loc, loc);</div><div class='del'>-	if (ret) {</div><div class='del'>-		GF_FREE(local-&gt;loc);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	gf_log(this-&gt;name, GF_LOG_DEBUG, "Lookup %s", loc-&gt;path);</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_lookup_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-		   loc,</div><div class='del'>-		   xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(lookup,</div><div class='del'>-			   frame,</div><div class='del'>-			   -1,</div><div class='del'>-			   ENOMEM,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL,</div><div class='del'>-			   NULL);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+load_file_size(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    data_t *data;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    dict_t *local_xdata = local-&gt;xdata;</div><div class='add'>+    inode_t *local_inode = local-&gt;inode;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+    /*</div><div class='add'>+     * load regular file size</div><div class='add'>+     */</div><div class='add'>+    data = dict_get(dict, FSIZE_XATTR_PREFIX);</div><div class='add'>+    if (!data) {</div><div class='add'>+        if (local-&gt;xdata)</div><div class='add'>+            dict_unref(local-&gt;xdata);</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "Regular file size not found");</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;buf.ia_size = data_to_uint64(data);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "FOP %d: Translate regular file to %llu",</div><div class='add'>+           local-&gt;fop, (unsigned long long)local-&gt;buf.ia_size);</div><div class='add'>+unwind:</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+    if (local-&gt;loc) {</div><div class='add'>+        loc_wipe(local-&gt;loc);</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+    }</div><div class='add'>+    switch (local-&gt;fop) {</div><div class='add'>+        case GF_FOP_FSTAT:</div><div class='add'>+            CRYPT_STACK_UNWIND(fstat, frame, op_ret, op_errno,</div><div class='add'>+                               op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL, local-&gt;xdata);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_STAT:</div><div class='add'>+            CRYPT_STACK_UNWIND(stat, frame, op_ret, op_errno,</div><div class='add'>+                               op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL, local-&gt;xdata);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_LOOKUP:</div><div class='add'>+            CRYPT_STACK_UNWIND(lookup, frame, op_ret, op_errno,</div><div class='add'>+                               op_ret &gt;= 0 ? local-&gt;inode : NULL,</div><div class='add'>+                               op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL, local-&gt;xdata,</div><div class='add'>+                               op_ret &gt;= 0 ? &amp;local-&gt;postbuf : NULL);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_READ:</div><div class='add'>+            CRYPT_STACK_UNWIND(readv, frame, op_ret, op_errno, NULL, 0,</div><div class='add'>+                               op_ret &gt;= 0 ? &amp;local-&gt;buf : NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Improper file operation %d",</div><div class='add'>+                   local-&gt;fop);</div><div class='add'>+    }</div><div class='add'>+    if (local_xdata)</div><div class='add'>+        dict_unref(local_xdata);</div><div class='add'>+    if (local_inode)</div><div class='add'>+        inode_unref(local_inode);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_stat_common_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                      dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+    if (!IA_ISREG(buf-&gt;ia_type))</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    local-&gt;buf = *buf;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    switch (local-&gt;fop) {</div><div class='add'>+        case GF_FOP_FSTAT:</div><div class='add'>+            STACK_WIND(frame, load_file_size, FIRST_CHILD(this),</div><div class='add'>+                       FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, local-&gt;fd,</div><div class='add'>+                       FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_STAT:</div><div class='add'>+            STACK_WIND(frame, load_file_size, FIRST_CHILD(this),</div><div class='add'>+                       FIRST_CHILD(this)-&gt;fops-&gt;getxattr, local-&gt;loc,</div><div class='add'>+                       FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Improper file operation %d",</div><div class='add'>+                   local-&gt;fop);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+unwind:</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+    if (local-&gt;loc) {</div><div class='add'>+        loc_wipe(local-&gt;loc);</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+    }</div><div class='add'>+    switch (local-&gt;fop) {</div><div class='add'>+        case GF_FOP_FSTAT:</div><div class='add'>+            CRYPT_STACK_UNWIND(fstat, frame, op_ret, op_errno,</div><div class='add'>+                               op_ret &gt;= 0 ? buf : NULL,</div><div class='add'>+                               op_ret &gt;= 0 ? xdata : NULL);</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_STAT:</div><div class='add'>+            CRYPT_STACK_UNWIND(stat, frame, op_ret, op_errno,</div><div class='add'>+                               op_ret &gt;= 0 ? buf : NULL,</div><div class='add'>+                               op_ret &gt;= 0 ? xdata : NULL);</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Improper file operation %d",</div><div class='add'>+                   local-&gt;fop);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_FSTAT);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto error;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    STACK_WIND(frame, crypt_stat_common_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(fstat, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_STAT);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto error;</div><div class='add'>+    local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='add'>+    if (!local-&gt;loc)</div><div class='add'>+        goto error;</div><div class='add'>+    ret = loc_copy(local-&gt;loc, loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, crypt_stat_common_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(stat, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+    if (!IA_ISREG(buf-&gt;ia_type))</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    local-&gt;inode = inode_ref(inode);</div><div class='add'>+    local-&gt;buf = *buf;</div><div class='add'>+    local-&gt;postbuf = *postparent;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    gf_uuid_copy(local-&gt;loc-&gt;gfid, buf-&gt;ia_gfid);</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, load_file_size, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, local-&gt;loc,</div><div class='add'>+               FSIZE_XATTR_PREFIX, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+unwind:</div><div class='add'>+    loc_wipe(local-&gt;loc);</div><div class='add'>+    GF_FREE(local-&gt;loc);</div><div class='add'>+    CRYPT_STACK_UNWIND(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                       postparent);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+</div><div class='add'>+    local = crypt_alloc_local(frame, this, GF_FOP_LOOKUP);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto error;</div><div class='add'>+    local-&gt;loc = GF_CALLOC(1, sizeof(loc_t), gf_crypt_mt_loc);</div><div class='add'>+    if (!local-&gt;loc)</div><div class='add'>+        goto error;</div><div class='add'>+    ret = loc_copy(local-&gt;loc, loc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(local-&gt;loc);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "Lookup %s", loc-&gt;path);</div><div class='add'>+    STACK_WIND(frame, crypt_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * for every regular directory entry find its real file size</div><div class='ctx'>  * and update stat's buf properly</div><div class='ctx'>  */</div><div class='del'>-static int32_t crypt_readdirp_cbk(call_frame_t *frame,</div><div class='del'>-				  void *cookie,</div><div class='del'>-				  xlator_t *this,</div><div class='del'>-				  int32_t op_ret,</div><div class='del'>-				  int32_t op_errno,</div><div class='del'>-				  gf_dirent_t *entries, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	gf_dirent_t *entry = NULL;</div><div class='del'>-</div><div class='del'>-	if (op_ret &lt; 0)</div><div class='del'>-		goto unwind;</div><div class='del'>-</div><div class='del'>-	list_for_each_entry (entry, (&amp;entries-&gt;list), list) {</div><div class='del'>-		data_t *data;</div><div class='del'>-</div><div class='del'>-		if (!IA_ISREG(entry-&gt;d_stat.ia_type))</div><div class='del'>-			continue;</div><div class='del'>-		data = dict_get(entry-&gt;dict, FSIZE_XATTR_PREFIX);</div><div class='del'>-		if (!data){</div><div class='del'>-			gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-			       "Regular file size of direntry not found");</div><div class='del'>-			op_errno = EIO;</div><div class='del'>-			op_ret = -1;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-		entry-&gt;d_stat.ia_size = data_to_uint64(data);</div><div class='del'>-	}</div><div class='del'>- unwind:</div><div class='del'>-	CRYPT_STACK_UNWIND(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+crypt_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                   dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, (&amp;entries-&gt;list), list)</div><div class='add'>+    {</div><div class='add'>+        data_t *data;</div><div class='add'>+</div><div class='add'>+        if (!IA_ISREG(entry-&gt;d_stat.ia_type))</div><div class='add'>+            continue;</div><div class='add'>+        data = dict_get(entry-&gt;dict, FSIZE_XATTR_PREFIX);</div><div class='add'>+        if (!data) {</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING,</div><div class='add'>+                   "Regular file size of direntry not found");</div><div class='add'>+            op_errno = EIO;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        entry-&gt;d_stat.ia_size = data_to_uint64(data);</div><div class='add'>+    }</div><div class='add'>+unwind:</div><div class='add'>+    CRYPT_STACK_UNWIND(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -4116,401 +3506,392 @@ static int32_t crypt_readdirp_cbk(call_frame_t *frame,</div><div class='ctx'>  * file sizes for all directory entries of the parent @fd.</div><div class='ctx'>  * Actual updates take place in -&gt;crypt_readdirp_cbk()</div><div class='ctx'>  */</div><div class='del'>-static int32_t crypt_readdirp(call_frame_t *frame, xlator_t *this,</div><div class='del'>-			      fd_t *fd, size_t size, off_t offset,</div><div class='del'>-			      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	int32_t ret = ENOMEM;</div><div class='del'>-</div><div class='del'>-	if (!xdata) {</div><div class='del'>-		xdata = dict_new();</div><div class='del'>-		if (!xdata)</div><div class='del'>-			goto error;</div><div class='del'>-	}</div><div class='del'>-	else</div><div class='del'>-		dict_ref(xdata);</div><div class='del'>-	/*</div><div class='del'>-	 * make sure that we'll have real file sizes at -&gt;readdirp_cbk()</div><div class='del'>-	 */</div><div class='del'>-	ret = dict_set(xdata, FSIZE_XATTR_PREFIX, data_from_uint64(0));</div><div class='del'>-	if (ret) {</div><div class='del'>-		dict_unref(xdata);</div><div class='del'>-                ret = ENOMEM;</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	STACK_WIND(frame,</div><div class='del'>-		   crypt_readdirp_cbk,</div><div class='del'>-		   FIRST_CHILD(this),</div><div class='del'>-		   FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-		   fd,</div><div class='del'>-		   size,</div><div class='del'>-		   offset,</div><div class='del'>-		   xdata);</div><div class='del'>-	dict_unref(xdata);</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	CRYPT_STACK_UNWIND(readdirp, frame, -1, ret, NULL, NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int32_t crypt_access(call_frame_t *frame,</div><div class='del'>-			    xlator_t *this,</div><div class='del'>-			    loc_t *loc,</div><div class='del'>-			    int32_t mask, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-	gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-	       "NFS mounts of encrypted volumes are unsupported");</div><div class='del'>-	CRYPT_STACK_UNWIND(access, frame, -1, EPERM, NULL);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t master_set_block_size (xlator_t *this, crypt_private_t *priv,</div><div class='del'>-			       dict_t *options)</div><div class='del'>-{</div><div class='del'>-	uint64_t block_size = 0;</div><div class='del'>-	struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='del'>-</div><div class='del'>-	if (options != NULL)</div><div class='del'>-		GF_OPTION_RECONF("block-size", block_size, options,</div><div class='del'>-				 size_uint64, error);</div><div class='del'>-	else</div><div class='del'>-		GF_OPTION_INIT("block-size", block_size, size_uint64, error);</div><div class='del'>-</div><div class='del'>-	switch (block_size) {</div><div class='del'>-	case 512:</div><div class='del'>-		master-&gt;m_block_bits = 9;</div><div class='del'>-		break;</div><div class='del'>-	case 1024:</div><div class='del'>-		master-&gt;m_block_bits = 10;</div><div class='del'>-		break;</div><div class='del'>-	case 2048:</div><div class='del'>-		master-&gt;m_block_bits = 11;</div><div class='del'>-		break;</div><div class='del'>-	case 4096:</div><div class='del'>-		master-&gt;m_block_bits = 12;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "FATAL: unsupported block size %llu",</div><div class='del'>-		       (unsigned long long)block_size);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	return -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t master_set_alg(xlator_t *this, crypt_private_t *priv)</div><div class='del'>-{</div><div class='del'>-	struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='del'>-	master-&gt;m_alg = AES_CIPHER_ALG;</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t master_set_mode(xlator_t *this, crypt_private_t *priv)</div><div class='del'>-{</div><div class='del'>-	struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='del'>-	master-&gt;m_mode = XTS_CIPHER_MODE;</div><div class='del'>-	return 0;</div><div class='add'>+static int32_t</div><div class='add'>+crypt_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t offset, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = ENOMEM;</div><div class='add'>+</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+        if (!xdata)</div><div class='add'>+            goto error;</div><div class='add'>+    } else</div><div class='add'>+        dict_ref(xdata);</div><div class='add'>+    /*</div><div class='add'>+     * make sure that we'll have real file sizes at -&gt;readdirp_cbk()</div><div class='add'>+     */</div><div class='add'>+    ret = dict_set(xdata, FSIZE_XATTR_PREFIX, data_from_uint64(0));</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, crypt_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, xdata);</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    CRYPT_STACK_UNWIND(readdirp, frame, -1, ret, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int32_t</div><div class='add'>+crypt_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+             dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+           "NFS mounts of encrypted volumes are unsupported");</div><div class='add'>+    CRYPT_STACK_UNWIND(access, frame, -1, EPERM, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+master_set_block_size(xlator_t *this, crypt_private_t *priv, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    uint64_t block_size = 0;</div><div class='add'>+    struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='add'>+</div><div class='add'>+    if (options != NULL)</div><div class='add'>+        GF_OPTION_RECONF("block-size", block_size, options, size_uint64, error);</div><div class='add'>+    else</div><div class='add'>+        GF_OPTION_INIT("block-size", block_size, size_uint64, error);</div><div class='add'>+</div><div class='add'>+    switch (block_size) {</div><div class='add'>+        case 512:</div><div class='add'>+            master-&gt;m_block_bits = 9;</div><div class='add'>+            break;</div><div class='add'>+        case 1024:</div><div class='add'>+            master-&gt;m_block_bits = 10;</div><div class='add'>+            break;</div><div class='add'>+        case 2048:</div><div class='add'>+            master-&gt;m_block_bits = 11;</div><div class='add'>+            break;</div><div class='add'>+        case 4096:</div><div class='add'>+            master-&gt;m_block_bits = 12;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR, "FATAL: unsupported block size %llu",</div><div class='add'>+                   (unsigned long long)block_size);</div><div class='add'>+            goto error;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+master_set_alg(xlator_t *this, crypt_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='add'>+    master-&gt;m_alg = AES_CIPHER_ALG;</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+master_set_mode(xlator_t *this, crypt_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='add'>+    master-&gt;m_mode = XTS_CIPHER_MODE;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * set key size in bits to the master info</div><div class='ctx'>  * Pre-conditions: cipher mode in the master info is uptodate.</div><div class='ctx'>  */</div><div class='del'>-static int master_set_data_key_size (xlator_t *this, crypt_private_t *priv,</div><div class='del'>-				     dict_t *options)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	uint64_t key_size = 0;</div><div class='del'>-	struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='del'>-</div><div class='del'>-	if (options != NULL)</div><div class='del'>-		GF_OPTION_RECONF("data-key-size", key_size, options,</div><div class='del'>-				 uint64, error);</div><div class='del'>-	else</div><div class='del'>-		GF_OPTION_INIT("data-key-size", key_size, uint64, error);</div><div class='del'>-</div><div class='del'>-	ret = data_cipher_algs[master-&gt;m_alg][master-&gt;m_mode].check_key(key_size);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "FATAL: wrong bin key size %llu for alg %d mode %d",</div><div class='del'>-		       (unsigned long long)key_size,</div><div class='del'>-		       (int)master-&gt;m_alg,</div><div class='del'>-		       (int)master-&gt;m_mode);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	master-&gt;m_dkey_size = key_size;</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	return -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int is_hex(char *s) {</div><div class='del'>-	return  ('0' &lt;= *s &amp;&amp; *s &lt;= '9') || ('a' &lt;= *s &amp;&amp; *s &lt;= 'f');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int parse_hex_buf(xlator_t *this, char *src, unsigned char *dst,</div><div class='del'>-			 int hex_size)</div><div class='del'>-{</div><div class='del'>-	int i;</div><div class='del'>-	int hex_byte = 0;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; (hex_size / 2); i++) {</div><div class='del'>-		if (!is_hex(src + i*2) || !is_hex(src + i*2 + 1)) {</div><div class='del'>-			gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-			       "FATAL: not hex symbol in key");</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-		if (sscanf(src + i*2, "%2x", &amp;hex_byte) != 1) {</div><div class='del'>-			gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-			       "FATAL: can not parse hex key");</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-		dst[i] = hex_byte &amp; 0xff;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+static int</div><div class='add'>+master_set_data_key_size(xlator_t *this, crypt_private_t *priv, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    uint64_t key_size = 0;</div><div class='add'>+    struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='add'>+</div><div class='add'>+    if (options != NULL)</div><div class='add'>+        GF_OPTION_RECONF("data-key-size", key_size, options, uint64, error);</div><div class='add'>+    else</div><div class='add'>+        GF_OPTION_INIT("data-key-size", key_size, uint64, error);</div><div class='add'>+</div><div class='add'>+    ret = data_cipher_algs[master-&gt;m_alg][master-&gt;m_mode].check_key(key_size);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR,</div><div class='add'>+               "FATAL: wrong bin key size %llu for alg %d mode %d",</div><div class='add'>+               (unsigned long long)key_size, (int)master-&gt;m_alg,</div><div class='add'>+               (int)master-&gt;m_mode);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    master-&gt;m_dkey_size = key_size;</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+is_hex(char *s)</div><div class='add'>+{</div><div class='add'>+    return ('0' &lt;= *s &amp;&amp; *s &lt;= '9') || ('a' &lt;= *s &amp;&amp; *s &lt;= 'f');</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+parse_hex_buf(xlator_t *this, char *src, unsigned char *dst, int hex_size)</div><div class='add'>+{</div><div class='add'>+    int i;</div><div class='add'>+    int hex_byte = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; (hex_size / 2); i++) {</div><div class='add'>+        if (!is_hex(src + i * 2) || !is_hex(src + i * 2 + 1)) {</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR, "FATAL: not hex symbol in key");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        if (sscanf(src + i * 2, "%2x", &amp;hex_byte) != 1) {</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR, "FATAL: can not parse hex key");</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+        dst[i] = hex_byte &amp; 0xff;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Parse options;</div><div class='ctx'>  * install master volume key</div><div class='ctx'>  */</div><div class='del'>-int32_t master_set_master_vol_key(xlator_t *this, crypt_private_t *priv)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-	FILE *file = NULL;</div><div class='del'>-</div><div class='del'>-	int32_t key_size;</div><div class='del'>-	char *opt_key_file_pathname = NULL;</div><div class='del'>-</div><div class='del'>-	unsigned char bin_buf[MASTER_VOL_KEY_SIZE];</div><div class='del'>-	char hex_buf[2 * MASTER_VOL_KEY_SIZE];</div><div class='del'>-</div><div class='del'>-	struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='del'>-	/*</div><div class='del'>-	 * extract master key passed via option</div><div class='del'>-	 */</div><div class='del'>-	GF_OPTION_INIT("master-key", opt_key_file_pathname, path, bad_key);</div><div class='del'>-</div><div class='del'>-	if (!opt_key_file_pathname) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR, "FATAL: missing master key");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	gf_log(this-&gt;name, GF_LOG_DEBUG, "handling file key %s",</div><div class='del'>-	       opt_key_file_pathname);</div><div class='del'>-</div><div class='del'>-	file = fopen(opt_key_file_pathname, "r");</div><div class='del'>-	if (file == NULL) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-		       "FATAL: can not open file with master key");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * extract hex key</div><div class='del'>-	 */</div><div class='del'>-	key_size = fread(hex_buf, 1, sizeof(hex_buf), file);</div><div class='del'>-	if (key_size &lt; sizeof(hex_buf)) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-		       "FATAL: master key is too short");</div><div class='del'>-		goto bad_key;</div><div class='del'>-	}</div><div class='del'>-	ret = parse_hex_buf(this, hex_buf, bin_buf, key_size);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto bad_key;</div><div class='del'>-	memcpy(master-&gt;m_key, bin_buf, MASTER_VOL_KEY_SIZE);</div><div class='del'>-	memset(hex_buf, 0, sizeof(hex_buf));</div><div class='del'>-	fclose(file);</div><div class='del'>-</div><div class='del'>- 	memset(bin_buf, 0, sizeof(bin_buf));</div><div class='del'>-	return 0;</div><div class='del'>- bad_key:</div><div class='del'>-	gf_log(this-&gt;name, GF_LOG_ERROR, "FATAL: bad master key");</div><div class='del'>-	if (file)</div><div class='del'>-		fclose(file);</div><div class='del'>-	memset(bin_buf, 0, sizeof(bin_buf));</div><div class='del'>-	return -1;</div><div class='add'>+int32_t</div><div class='add'>+master_set_master_vol_key(xlator_t *this, crypt_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+    FILE *file = NULL;</div><div class='add'>+</div><div class='add'>+    int32_t key_size;</div><div class='add'>+    char *opt_key_file_pathname = NULL;</div><div class='add'>+</div><div class='add'>+    unsigned char bin_buf[MASTER_VOL_KEY_SIZE];</div><div class='add'>+    char hex_buf[2 * MASTER_VOL_KEY_SIZE];</div><div class='add'>+</div><div class='add'>+    struct master_cipher_info *master = get_master_cinfo(priv);</div><div class='add'>+    /*</div><div class='add'>+     * extract master key passed via option</div><div class='add'>+     */</div><div class='add'>+    GF_OPTION_INIT("master-key", opt_key_file_pathname, path, bad_key);</div><div class='add'>+</div><div class='add'>+    if (!opt_key_file_pathname) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "FATAL: missing master key");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "handling file key %s",</div><div class='add'>+           opt_key_file_pathname);</div><div class='add'>+</div><div class='add'>+    file = fopen(opt_key_file_pathname, "r");</div><div class='add'>+    if (file == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "FATAL: can not open file with master key");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * extract hex key</div><div class='add'>+     */</div><div class='add'>+    key_size = fread(hex_buf, 1, sizeof(hex_buf), file);</div><div class='add'>+    if (key_size &lt; sizeof(hex_buf)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "FATAL: master key is too short");</div><div class='add'>+        goto bad_key;</div><div class='add'>+    }</div><div class='add'>+    ret = parse_hex_buf(this, hex_buf, bin_buf, key_size);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto bad_key;</div><div class='add'>+    memcpy(master-&gt;m_key, bin_buf, MASTER_VOL_KEY_SIZE);</div><div class='add'>+    memset(hex_buf, 0, sizeof(hex_buf));</div><div class='add'>+    fclose(file);</div><div class='add'>+</div><div class='add'>+    memset(bin_buf, 0, sizeof(bin_buf));</div><div class='add'>+    return 0;</div><div class='add'>+bad_key:</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_ERROR, "FATAL: bad master key");</div><div class='add'>+    if (file)</div><div class='add'>+        fclose(file);</div><div class='add'>+    memset(bin_buf, 0, sizeof(bin_buf));</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Derive volume key for object-id authentication</div><div class='ctx'>  */</div><div class='del'>-int32_t master_set_nmtd_vol_key(xlator_t *this, crypt_private_t *priv)</div><div class='add'>+int32_t</div><div class='add'>+master_set_nmtd_vol_key(xlator_t *this, crypt_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-	return get_nmtd_vol_key(get_master_cinfo(priv));</div><div class='add'>+    return get_nmtd_vol_key(get_master_cinfo(priv));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t crypt_init_xlator(xlator_t *this)</div><div class='add'>+int32_t</div><div class='add'>+crypt_init_xlator(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	crypt_private_t *priv = this-&gt;private;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    crypt_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	ret = master_set_alg(this, priv);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = master_set_mode(this, priv);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = master_set_block_size(this, priv, NULL);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = master_set_data_key_size(this, priv, NULL);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = master_set_master_vol_key(this, priv);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	return master_set_nmtd_vol_key(this, priv);</div><div class='add'>+    ret = master_set_alg(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    ret = master_set_mode(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    ret = master_set_block_size(this, priv, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    ret = master_set_data_key_size(this, priv, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    ret = master_set_master_vol_key(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    return master_set_nmtd_vol_key(this, priv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t crypt_alloc_private(xlator_t *this)</div><div class='add'>+static int32_t</div><div class='add'>+crypt_alloc_private(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	this-&gt;private = GF_CALLOC(1, sizeof(crypt_private_t), gf_crypt_mt_priv);</div><div class='del'>-	if (!this-&gt;private) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "Can not allocate memory for private data");</div><div class='del'>-		return ENOMEM;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    this-&gt;private = GF_CALLOC(1, sizeof(crypt_private_t), gf_crypt_mt_priv);</div><div class='add'>+    if (!this-&gt;private) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR,</div><div class='add'>+               "Can not allocate memory for private data");</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void crypt_free_private(xlator_t *this)</div><div class='add'>+static void</div><div class='add'>+crypt_free_private(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	crypt_private_t *priv = this-&gt;private;</div><div class='del'>-	if (priv) {</div><div class='del'>-		memset(priv, 0, sizeof(*priv));</div><div class='del'>-		GF_FREE(priv);</div><div class='del'>-	}</div><div class='add'>+    crypt_private_t *priv = this-&gt;private;</div><div class='add'>+    if (priv) {</div><div class='add'>+        memset(priv, 0, sizeof(*priv));</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_crypt_mt_end);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_crypt_mt_end);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                       "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    crypt_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("crypt", this, error);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, error);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, options, error);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = master_set_block_size(this, priv, options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("this-&gt;name", GF_LOG_ERROR, "Failed to reconfure block size");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    ret = master_set_data_key_size(this, priv, options);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("this-&gt;name", GF_LOG_ERROR, "Failed to reconfure data key size");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='add'>+int32_t</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int32_t ret;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR,</div><div class='add'>+               "FATAL: crypt should have exactly one child");</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+    ret = crypt_alloc_private(this);</div><div class='add'>+    if (ret)</div><div class='ctx'>         return ret;</div><div class='add'>+    ret = crypt_init_xlator(this);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error;</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(crypt_local_t, 64);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to create local_t's memory pool");</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    gf_log("crypt", GF_LOG_INFO, "crypt xlator loaded");</div><div class='add'>+    return 0;</div><div class='add'>+error:</div><div class='add'>+    crypt_free_private(this);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t reconfigure (xlator_t *this, dict_t *options)</div><div class='del'>-{</div><div class='del'>-	int32_t ret = -1;</div><div class='del'>-	crypt_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	GF_VALIDATE_OR_GOTO ("crypt", this, error);</div><div class='del'>-	GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, error);</div><div class='del'>-	GF_VALIDATE_OR_GOTO (this-&gt;name, options, error);</div><div class='del'>-</div><div class='del'>-	priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-	ret = master_set_block_size(this, priv, options);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("this-&gt;name", GF_LOG_ERROR,</div><div class='del'>-		       "Failed to reconfure block size");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	ret = master_set_data_key_size(this, priv, options);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("this-&gt;name", GF_LOG_ERROR,</div><div class='del'>-		       "Failed to reconfure data key size");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t init(xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	int32_t ret;</div><div class='del'>-</div><div class='del'>-	if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-		gf_log ("crypt", GF_LOG_ERROR,</div><div class='del'>-			"FATAL: crypt should have exactly one child");</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-	if (!this-&gt;parents) {</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"dangling volume. check volfile ");</div><div class='del'>-	}</div><div class='del'>-	ret = crypt_alloc_private(this);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = crypt_init_xlator(this);</div><div class='del'>-	if (ret)</div><div class='del'>-		goto error;</div><div class='del'>-	this-&gt;local_pool = mem_pool_new(crypt_local_t, 64);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-		gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-		       "failed to create local_t's memory pool");</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-	gf_log ("crypt", GF_LOG_INFO, "crypt xlator loaded");</div><div class='del'>-	return 0;</div><div class='del'>- error:</div><div class='del'>-	crypt_free_private(this);</div><div class='del'>-	return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void fini (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-	crypt_free_private(this);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-	.readv        = crypt_readv,</div><div class='del'>-	.writev       = crypt_writev,</div><div class='del'>-	.truncate     = crypt_truncate,</div><div class='del'>-	.ftruncate    = crypt_ftruncate,</div><div class='del'>-	.setxattr     = crypt_setxattr,</div><div class='del'>-	.fsetxattr    = crypt_fsetxattr,</div><div class='del'>-	.link         = crypt_link,</div><div class='del'>-	.unlink       = crypt_unlink,</div><div class='del'>-	.rename       = crypt_rename,</div><div class='del'>-	.open         = crypt_open,</div><div class='del'>-	.create       = crypt_create,</div><div class='del'>-	.stat         = crypt_stat,</div><div class='del'>-	.fstat        = crypt_fstat,</div><div class='del'>-	.lookup       = crypt_lookup,</div><div class='del'>-	.readdirp     = crypt_readdirp,</div><div class='del'>-	.access       = crypt_access</div><div class='del'>-};</div><div class='add'>+void</div><div class='add'>+fini(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    crypt_free_private(this);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-	.forget       = crypt_forget</div><div class='del'>-};</div><div class='add'>+struct xlator_fops fops = {.readv = crypt_readv,</div><div class='add'>+                           .writev = crypt_writev,</div><div class='add'>+                           .truncate = crypt_truncate,</div><div class='add'>+                           .ftruncate = crypt_ftruncate,</div><div class='add'>+                           .setxattr = crypt_setxattr,</div><div class='add'>+                           .fsetxattr = crypt_fsetxattr,</div><div class='add'>+                           .link = crypt_link,</div><div class='add'>+                           .unlink = crypt_unlink,</div><div class='add'>+                           .rename = crypt_rename,</div><div class='add'>+                           .open = crypt_open,</div><div class='add'>+                           .create = crypt_create,</div><div class='add'>+                           .stat = crypt_stat,</div><div class='add'>+                           .fstat = crypt_fstat,</div><div class='add'>+                           .lookup = crypt_lookup,</div><div class='add'>+                           .readdirp = crypt_readdirp,</div><div class='add'>+                           .access = crypt_access};</div><div class='add'>+</div><div class='add'>+struct xlator_cbks cbks = {.forget = crypt_forget};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-	{ .key = {"master-key"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_PATH,</div><div class='del'>-	  .description = "Pathname of regular file which contains master volume key"</div><div class='del'>-	},</div><div class='del'>-	{ .key = {"data-key-size"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_SIZET,</div><div class='del'>-	  .description = "Data key size (bits)",</div><div class='del'>-	  .min = 256,</div><div class='del'>-	  .max = 512,</div><div class='del'>-	  .default_value = "256",</div><div class='del'>-	},</div><div class='del'>-	{ .key = {"block-size"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_SIZET,</div><div class='del'>-	  .description = "Atom size (bits)",</div><div class='del'>-	  .min = 512,</div><div class='del'>-	  .max = 4096,</div><div class='del'>-	  .default_value = "4096"</div><div class='del'>-	},</div><div class='del'>-	{ .key  = {NULL} },</div><div class='add'>+    {.key = {"master-key"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PATH,</div><div class='add'>+     .description =</div><div class='add'>+         "Pathname of regular file which contains master volume key"},</div><div class='add'>+    {</div><div class='add'>+        .key = {"data-key-size"},</div><div class='add'>+        .type = GF_OPTION_TYPE_SIZET,</div><div class='add'>+        .description = "Data key size (bits)",</div><div class='add'>+        .min = 256,</div><div class='add'>+        .max = 512,</div><div class='add'>+        .default_value = "256",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"block-size"},</div><div class='add'>+     .type = GF_OPTION_TYPE_SIZET,</div><div class='add'>+     .description = "Atom size (bits)",</div><div class='add'>+     .min = 512,</div><div class='add'>+     .max = 4096,</div><div class='add'>+     .default_value = "4096"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='head'>diff --git a/xlators/encryption/crypt/src/data.c b/xlators/encryption/crypt/src/data.c<br/>index 0aae60d7139..8e8701b6bf2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/data.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/encryption/crypt/src/data.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/data.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/data.c</a></div><div class='hunk'>@@ -12,136 +12,130 @@</div><div class='ctx'> #include "crypt-common.h"</div><div class='ctx'> #include "crypt.h"</div><div class='ctx'> </div><div class='del'>-static void set_iv_aes_xts(off_t offset, struct object_cipher_info *object)</div><div class='add'>+static void</div><div class='add'>+set_iv_aes_xts(off_t offset, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	unsigned char *ivec;</div><div class='add'>+    unsigned char *ivec;</div><div class='ctx'> </div><div class='del'>-	ivec = object-&gt;u.aes_xts.ivec;</div><div class='add'>+    ivec = object-&gt;u.aes_xts.ivec;</div><div class='ctx'> </div><div class='del'>-	/* convert the tweak into a little-endian byte</div><div class='del'>-	 * array (IEEE P1619/D16, May 2007, section 5.1)</div><div class='del'>-	 */</div><div class='add'>+    /* convert the tweak into a little-endian byte</div><div class='add'>+     * array (IEEE P1619/D16, May 2007, section 5.1)</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-	*((uint64_t *)ivec) = htole64(offset);</div><div class='add'>+    *((uint64_t *)ivec) = htole64(offset);</div><div class='ctx'> </div><div class='del'>-	/* ivec is padded with zeroes */</div><div class='add'>+    /* ivec is padded with zeroes */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t aes_set_keys_common(unsigned char *raw_key, uint32_t key_size,</div><div class='del'>-				   AES_KEY *keys)</div><div class='add'>+static int32_t</div><div class='add'>+aes_set_keys_common(unsigned char *raw_key, uint32_t key_size, AES_KEY *keys)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-</div><div class='del'>-	ret = AES_set_encrypt_key(raw_key,</div><div class='del'>-				  key_size,</div><div class='del'>-				  &amp;keys[AES_ENCRYPT]);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Set encrypt key failed");</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	ret = AES_set_decrypt_key(raw_key,</div><div class='del'>-				  key_size,</div><div class='del'>-				  &amp;keys[AES_DECRYPT]);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Set decrypt key failed");</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+</div><div class='add'>+    ret = AES_set_encrypt_key(raw_key, key_size, &amp;keys[AES_ENCRYPT]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Set encrypt key failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    ret = AES_set_decrypt_key(raw_key, key_size, &amp;keys[AES_DECRYPT]);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Set decrypt key failed");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * set private cipher info for xts mode</div><div class='ctx'>  */</div><div class='del'>-static int32_t set_private_aes_xts(struct crypt_inode_info *info,</div><div class='del'>-				   struct master_cipher_info *master)</div><div class='add'>+static int32_t</div><div class='add'>+set_private_aes_xts(struct crypt_inode_info *info,</div><div class='add'>+                    struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int ret;</div><div class='del'>-	struct object_cipher_info *object = get_object_cinfo(info);</div><div class='del'>-	unsigned char *data_key;</div><div class='del'>-	uint32_t subkey_size;</div><div class='del'>-</div><div class='del'>-	/* init tweak value */</div><div class='del'>-	memset(object-&gt;u.aes_xts.ivec, 0, 16);</div><div class='del'>-</div><div class='del'>-	data_key = GF_CALLOC(1, object-&gt;o_dkey_size, gf_crypt_mt_key);</div><div class='del'>-	if (!data_key)</div><div class='del'>-		return ENOMEM;</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * retrieve data keying material</div><div class='del'>-	 */</div><div class='del'>-	ret = get_data_file_key(info, master, object-&gt;o_dkey_size, data_key);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Failed to retrieve data key");</div><div class='del'>-		GF_FREE(data_key);</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * parse compound xts key</div><div class='del'>-	 */</div><div class='del'>-	subkey_size = object-&gt;o_dkey_size &gt;&gt; 4; /* (xts-key-size-in-bytes / 2) */</div><div class='del'>-	/*</div><div class='del'>-	 * install key for data encryption</div><div class='del'>-	 */</div><div class='del'>-	ret = aes_set_keys_common(data_key,</div><div class='del'>-				  subkey_size &lt;&lt; 3, object-&gt;u.aes_xts.dkey);</div><div class='del'>-	if (ret) {</div><div class='del'>-		GF_FREE(data_key);</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * set up key used to encrypt tweaks</div><div class='del'>-	 */</div><div class='del'>-	ret = AES_set_encrypt_key(data_key + subkey_size,</div><div class='del'>-				  object-&gt;o_dkey_size / 2,</div><div class='del'>-				  &amp;object-&gt;u.aes_xts.tkey);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Set tweak key failed");</div><div class='del'>-</div><div class='del'>-	GF_FREE(data_key);</div><div class='del'>-	return ret;</div><div class='add'>+    int ret;</div><div class='add'>+    struct object_cipher_info *object = get_object_cinfo(info);</div><div class='add'>+    unsigned char *data_key;</div><div class='add'>+    uint32_t subkey_size;</div><div class='add'>+</div><div class='add'>+    /* init tweak value */</div><div class='add'>+    memset(object-&gt;u.aes_xts.ivec, 0, 16);</div><div class='add'>+</div><div class='add'>+    data_key = GF_CALLOC(1, object-&gt;o_dkey_size, gf_crypt_mt_key);</div><div class='add'>+    if (!data_key)</div><div class='add'>+        return ENOMEM;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * retrieve data keying material</div><div class='add'>+     */</div><div class='add'>+    ret = get_data_file_key(info, master, object-&gt;o_dkey_size, data_key);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Failed to retrieve data key");</div><div class='add'>+        GF_FREE(data_key);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * parse compound xts key</div><div class='add'>+     */</div><div class='add'>+    subkey_size = object-&gt;o_dkey_size &gt;&gt; 4; /* (xts-key-size-in-bytes / 2) */</div><div class='add'>+    /*</div><div class='add'>+     * install key for data encryption</div><div class='add'>+     */</div><div class='add'>+    ret = aes_set_keys_common(data_key, subkey_size &lt;&lt; 3,</div><div class='add'>+                              object-&gt;u.aes_xts.dkey);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(data_key);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * set up key used to encrypt tweaks</div><div class='add'>+     */</div><div class='add'>+    ret = AES_set_encrypt_key(data_key + subkey_size, object-&gt;o_dkey_size / 2,</div><div class='add'>+                              &amp;object-&gt;u.aes_xts.tkey);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Set tweak key failed");</div><div class='add'>+</div><div class='add'>+    GF_FREE(data_key);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t aes_xts_init(void)</div><div class='add'>+static int32_t</div><div class='add'>+aes_xts_init(void)</div><div class='ctx'> {</div><div class='del'>-	cassert(AES_BLOCK_SIZE == (1 &lt;&lt; AES_BLOCK_BITS));</div><div class='del'>-	return 0;</div><div class='add'>+    cassert(AES_BLOCK_SIZE == (1 &lt;&lt; AES_BLOCK_BITS));</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t check_key_aes_xts(uint32_t keysize)</div><div class='add'>+static int32_t</div><div class='add'>+check_key_aes_xts(uint32_t keysize)</div><div class='ctx'> {</div><div class='del'>-	switch(keysize) {</div><div class='del'>-	case 256:</div><div class='del'>-	case 512:</div><div class='del'>-		return 0;</div><div class='del'>-	default:</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return -1;</div><div class='add'>+    switch (keysize) {</div><div class='add'>+        case 256:</div><div class='add'>+        case 512:</div><div class='add'>+            return 0;</div><div class='add'>+        default:</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t encrypt_aes_xts(const unsigned char *from,</div><div class='del'>-			       unsigned char *to, size_t length,</div><div class='del'>-			       off_t offset, const int enc,</div><div class='del'>-			       struct object_cipher_info *object)</div><div class='add'>+static int32_t</div><div class='add'>+encrypt_aes_xts(const unsigned char *from, unsigned char *to, size_t length,</div><div class='add'>+                off_t offset, const int enc, struct object_cipher_info *object)</div><div class='ctx'> {</div><div class='del'>-	XTS128_CONTEXT ctx;</div><div class='del'>-	if (enc) {</div><div class='del'>-		ctx.key1 = &amp;object-&gt;u.aes_xts.dkey[AES_ENCRYPT];</div><div class='del'>-		ctx.block1 = (block128_f)AES_encrypt;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-		ctx.key1 = &amp;object-&gt;u.aes_xts.dkey[AES_DECRYPT];</div><div class='del'>-		ctx.block1 = (block128_f)AES_decrypt;</div><div class='del'>-	}</div><div class='del'>-	ctx.key2 = &amp;object-&gt;u.aes_xts.tkey;</div><div class='del'>-	ctx.block2 = (block128_f)AES_encrypt;</div><div class='del'>-</div><div class='del'>-	return CRYPTO_xts128_encrypt(&amp;ctx,</div><div class='del'>-				     object-&gt;u.aes_xts.ivec,</div><div class='del'>-				     from,</div><div class='del'>-				     to,</div><div class='del'>-				     length, enc);</div><div class='add'>+    XTS128_CONTEXT ctx;</div><div class='add'>+    if (enc) {</div><div class='add'>+        ctx.key1 = &amp;object-&gt;u.aes_xts.dkey[AES_ENCRYPT];</div><div class='add'>+        ctx.block1 = (block128_f)AES_encrypt;</div><div class='add'>+    } else {</div><div class='add'>+        ctx.key1 = &amp;object-&gt;u.aes_xts.dkey[AES_DECRYPT];</div><div class='add'>+        ctx.block1 = (block128_f)AES_decrypt;</div><div class='add'>+    }</div><div class='add'>+    ctx.key2 = &amp;object-&gt;u.aes_xts.tkey;</div><div class='add'>+    ctx.block2 = (block128_f)AES_encrypt;</div><div class='add'>+</div><div class='add'>+    return CRYPTO_xts128_encrypt(&amp;ctx, object-&gt;u.aes_xts.ivec, from, to, length,</div><div class='add'>+                                 enc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -149,26 +143,19 @@ static int32_t encrypt_aes_xts(const unsigned char *from,</div><div class='ctx'>  * @to: result of cipher transform;</div><div class='ctx'>  * @off: offset in a file (must be cblock-aligned);</div><div class='ctx'>  */</div><div class='del'>-static void cipher_data(struct object_cipher_info *object,</div><div class='del'>-			char *from,</div><div class='del'>-			char *to,</div><div class='del'>-			off_t off,</div><div class='del'>-			size_t len,</div><div class='del'>-			const int enc)</div><div class='add'>+static void</div><div class='add'>+cipher_data(struct object_cipher_info *object, char *from, char *to, off_t off,</div><div class='add'>+            size_t len, const int enc)</div><div class='ctx'> {</div><div class='del'>-	crypt_check_input_len(len, object);</div><div class='add'>+    crypt_check_input_len(len, object);</div><div class='ctx'> </div><div class='ctx'> #if TRIVIAL_TFM &amp;&amp; DEBUG_CRYPT</div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> #endif</div><div class='del'>-	data_cipher_algs[object-&gt;o_alg][object-&gt;o_mode].set_iv(off, object);</div><div class='del'>-	data_cipher_algs[object-&gt;o_alg][object-&gt;o_mode].encrypt</div><div class='del'>-		((const unsigned char *)from,</div><div class='del'>-		 (unsigned char *)to,</div><div class='del'>-		 len,</div><div class='del'>-		 off,</div><div class='del'>-		 enc,</div><div class='del'>-		 object);</div><div class='add'>+    data_cipher_algs[object-&gt;o_alg][object-&gt;o_mode].set_iv(off, object);</div><div class='add'>+    data_cipher_algs[object-&gt;o_alg][object-&gt;o_mode].encrypt(</div><div class='add'>+        (const unsigned char *)from, (unsigned char *)to, len, off, enc,</div><div class='add'>+        object);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define MAX_CIPHER_CHUNK (1 &lt;&lt; 30)</div><div class='hunk'>@@ -184,32 +171,24 @@ static void cipher_data(struct object_cipher_info *object,</div><div class='ctx'>  *       for other modes).</div><div class='ctx'>  * @dir: direction of transform (encrypt/decrypt).</div><div class='ctx'>  */</div><div class='del'>-static void cipher_region(struct object_cipher_info *object,</div><div class='del'>-			  char *from,</div><div class='del'>-			  char *to,</div><div class='del'>-			  off_t off,</div><div class='del'>-			  size_t len,</div><div class='del'>-			  int dir)</div><div class='add'>+static void</div><div class='add'>+cipher_region(struct object_cipher_info *object, char *from, char *to,</div><div class='add'>+              off_t off, size_t len, int dir)</div><div class='ctx'> {</div><div class='del'>-	while (len &gt; 0) {</div><div class='del'>-		size_t to_cipher;</div><div class='del'>-</div><div class='del'>-		to_cipher = len;</div><div class='del'>-		if (to_cipher &gt; MAX_CIPHER_CHUNK)</div><div class='del'>-			to_cipher = MAX_CIPHER_CHUNK;</div><div class='del'>-</div><div class='del'>-		/* this will reset IV */</div><div class='del'>-		cipher_data(object,</div><div class='del'>-			    from,</div><div class='del'>-			    to,</div><div class='del'>-			    off,</div><div class='del'>-			    to_cipher,</div><div class='del'>-			    dir);</div><div class='del'>-		from += to_cipher;</div><div class='del'>-		to   += to_cipher;</div><div class='del'>-		off  += to_cipher;</div><div class='del'>-		len  -= to_cipher;</div><div class='del'>-	}</div><div class='add'>+    while (len &gt; 0) {</div><div class='add'>+        size_t to_cipher;</div><div class='add'>+</div><div class='add'>+        to_cipher = len;</div><div class='add'>+        if (to_cipher &gt; MAX_CIPHER_CHUNK)</div><div class='add'>+            to_cipher = MAX_CIPHER_CHUNK;</div><div class='add'>+</div><div class='add'>+        /* this will reset IV */</div><div class='add'>+        cipher_data(object, from, to, off, to_cipher, dir);</div><div class='add'>+        from += to_cipher;</div><div class='add'>+        to += to_cipher;</div><div class='add'>+        off += to_cipher;</div><div class='add'>+        len -= to_cipher;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -224,115 +203,105 @@ static void cipher_region(struct object_cipher_info *object,</div><div class='ctx'>  * responsible for this. @dir is "direction" of</div><div class='ctx'>  * transform (encrypt/decrypt).</div><div class='ctx'>  */</div><div class='del'>-static void cipher_aligned_iov(struct object_cipher_info *object,</div><div class='del'>-			       struct iovec *vec,</div><div class='del'>-			       int count,</div><div class='del'>-			       off_t off,</div><div class='del'>-			       int32_t dir)</div><div class='add'>+static void</div><div class='add'>+cipher_aligned_iov(struct object_cipher_info *object, struct iovec *vec,</div><div class='add'>+                   int count, off_t off, int32_t dir)</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	int len = 0;</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; count; i++) {</div><div class='del'>-		cipher_region(object,</div><div class='del'>-			      vec[i].iov_base,</div><div class='del'>-			      vec[i].iov_base,</div><div class='del'>-			      off + len,</div><div class='del'>-			      vec[i].iov_len,</div><div class='del'>-			      dir);</div><div class='del'>-		len += vec[i].iov_len;</div><div class='del'>-	}</div><div class='add'>+    int i;</div><div class='add'>+    int len = 0;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        cipher_region(object, vec[i].iov_base, vec[i].iov_base, off + len,</div><div class='add'>+                      vec[i].iov_len, dir);</div><div class='add'>+        len += vec[i].iov_len;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void encrypt_aligned_iov(struct object_cipher_info *object,</div><div class='del'>-			 struct iovec *vec,</div><div class='del'>-			 int count,</div><div class='del'>-			 off_t off)</div><div class='add'>+void</div><div class='add'>+encrypt_aligned_iov(struct object_cipher_info *object, struct iovec *vec,</div><div class='add'>+                    int count, off_t off)</div><div class='ctx'> {</div><div class='del'>-	cipher_aligned_iov(object, vec, count, off, 1);</div><div class='add'>+    cipher_aligned_iov(object, vec, count, off, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void decrypt_aligned_iov(struct object_cipher_info *object,</div><div class='del'>-			 struct iovec *vec,</div><div class='del'>-			 int count,</div><div class='del'>-			 off_t off)</div><div class='add'>+void</div><div class='add'>+decrypt_aligned_iov(struct object_cipher_info *object, struct iovec *vec,</div><div class='add'>+                    int count, off_t off)</div><div class='ctx'> {</div><div class='del'>-	cipher_aligned_iov(object, vec, count, off, 0);</div><div class='add'>+    cipher_aligned_iov(object, vec, count, off, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-static void compound_stream(struct iovec *vec, int count, char *buf, off_t skip)</div><div class='add'>+static void</div><div class='add'>+compound_stream(struct iovec *vec, int count, char *buf, off_t skip)</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	int off = 0;</div><div class='del'>-	for (i = 0; i &lt; count; i++) {</div><div class='del'>-		memcpy(buf + off,</div><div class='del'>-		       vec[i].iov_base + skip,</div><div class='del'>-		       vec[i].iov_len - skip);</div><div class='del'>-</div><div class='del'>-		off += (vec[i].iov_len - skip);</div><div class='del'>-		skip = 0;</div><div class='del'>-	}</div><div class='add'>+    int i;</div><div class='add'>+    int off = 0;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        memcpy(buf + off, vec[i].iov_base + skip, vec[i].iov_len - skip);</div><div class='add'>+</div><div class='add'>+        off += (vec[i].iov_len - skip);</div><div class='add'>+        skip = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void check_iovecs(struct iovec *vec, int cnt,</div><div class='del'>-			 struct iovec *avec, int acnt, uint32_t off_in_head)</div><div class='add'>+static void</div><div class='add'>+check_iovecs(struct iovec *vec, int cnt, struct iovec *avec, int acnt,</div><div class='add'>+             uint32_t off_in_head)</div><div class='ctx'> {</div><div class='del'>-	char *s1, *s2;</div><div class='del'>-	uint32_t size, asize;</div><div class='del'>-</div><div class='del'>-	size = iov_length(vec, cnt);</div><div class='del'>-	asize = iov_length(avec, acnt) - off_in_head;</div><div class='del'>-	if (size != asize) {</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "size %d is not eq asize %d",</div><div class='del'>-		       size, asize);</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	s1 = GF_CALLOC(1, size, gf_crypt_mt_data);</div><div class='del'>-	if (!s1) {</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "Can not allocate stream ");</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	s2 = GF_CALLOC(1, asize, gf_crypt_mt_data);</div><div class='del'>-	if (!s2) {</div><div class='del'>-		GF_FREE(s1);</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "Can not allocate stream ");</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	compound_stream(vec, cnt, s1, 0);</div><div class='del'>-	compound_stream(avec, acnt, s2, off_in_head);</div><div class='del'>-	if (memcmp(s1, s2, size))</div><div class='del'>-		gf_log("crypt", GF_LOG_DEBUG, "chunks of different data");</div><div class='del'>-	GF_FREE(s1);</div><div class='del'>-	GF_FREE(s2);</div><div class='add'>+    char *s1, *s2;</div><div class='add'>+    uint32_t size, asize;</div><div class='add'>+</div><div class='add'>+    size = iov_length(vec, cnt);</div><div class='add'>+    asize = iov_length(avec, acnt) - off_in_head;</div><div class='add'>+    if (size != asize) {</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "size %d is not eq asize %d", size,</div><div class='add'>+               asize);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    s1 = GF_CALLOC(1, size, gf_crypt_mt_data);</div><div class='add'>+    if (!s1) {</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "Can not allocate stream ");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    s2 = GF_CALLOC(1, asize, gf_crypt_mt_data);</div><div class='add'>+    if (!s2) {</div><div class='add'>+        GF_FREE(s1);</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "Can not allocate stream ");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    compound_stream(vec, cnt, s1, 0);</div><div class='add'>+    compound_stream(avec, acnt, s2, off_in_head);</div><div class='add'>+    if (memcmp(s1, s2, size))</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "chunks of different data");</div><div class='add'>+    GF_FREE(s1);</div><div class='add'>+    GF_FREE(s2);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #else</div><div class='ctx'> #define check_iovecs(vec, count, avec, avecn, off) noop</div><div class='ctx'> #endif /* DEBUG_CRYPT */</div><div class='ctx'> </div><div class='del'>-static char *data_alloc_block(xlator_t *this, crypt_local_t *local,</div><div class='del'>-			      int32_t block_size)</div><div class='add'>+static char *</div><div class='add'>+data_alloc_block(xlator_t *this, crypt_local_t *local, int32_t block_size)</div><div class='ctx'> {</div><div class='del'>-	struct iobuf *iobuf = NULL;</div><div class='del'>-</div><div class='del'>-	iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, block_size);</div><div class='del'>-	if (!iobuf) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "Failed to get iobuf");</div><div class='del'>-		return NULL;</div><div class='del'>-	}</div><div class='del'>-	if (!local-&gt;iobref_data) {</div><div class='del'>-		local-&gt;iobref_data = iobref_new();</div><div class='del'>-		if (!local-&gt;iobref_data) {</div><div class='del'>-			gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-			       "Failed to get iobref");</div><div class='del'>-			iobuf_unref(iobuf);</div><div class='del'>-			return NULL;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	iobref_add(local-&gt;iobref_data, iobuf);</div><div class='del'>-	return iobuf-&gt;ptr;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+</div><div class='add'>+    iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, block_size);</div><div class='add'>+    if (!iobuf) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Failed to get iobuf");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    if (!local-&gt;iobref_data) {</div><div class='add'>+        local-&gt;iobref_data = iobref_new();</div><div class='add'>+        if (!local-&gt;iobref_data) {</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR, "Failed to get iobref");</div><div class='add'>+            iobuf_unref(iobuf);</div><div class='add'>+            return NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    iobref_add(local-&gt;iobref_data, iobuf);</div><div class='add'>+    return iobuf-&gt;ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -360,250 +329,239 @@ static char *data_alloc_block(xlator_t *this, crypt_local_t *local,</div><div class='ctx'>  * 3 - full non-compound (the case of reuse);</div><div class='ctx'>  * 4 - incomplete non-compound (tail).</div><div class='ctx'>  */</div><div class='del'>-int32_t align_iov_by_atoms(xlator_t *this,</div><div class='del'>-			   crypt_local_t *local,</div><div class='del'>-			   struct object_cipher_info *object,</div><div class='del'>-			   struct iovec *vec /* input vector */,</div><div class='del'>-			   int32_t count /* number of vec components */,</div><div class='del'>-			   struct iovec *avec /* aligned vector */,</div><div class='del'>-			   char **blocks /* pool of blocks */,</div><div class='del'>-			   uint32_t *blocks_allocated,</div><div class='del'>-			   struct avec_config *conf)</div><div class='add'>+int32_t</div><div class='add'>+align_iov_by_atoms(xlator_t *this, crypt_local_t *local,</div><div class='add'>+                   struct object_cipher_info *object,</div><div class='add'>+                   struct iovec *vec /* input vector */,</div><div class='add'>+                   int32_t count /* number of vec components */,</div><div class='add'>+                   struct iovec *avec /* aligned vector */,</div><div class='add'>+                   char **blocks /* pool of blocks */,</div><div class='add'>+                   uint32_t *blocks_allocated, struct avec_config *conf)</div><div class='ctx'> {</div><div class='del'>-	int vecn = 0;      /* number of the current component in vec */</div><div class='del'>-	int avecn = 0;     /* number of the current component in avec */</div><div class='del'>-	off_t vec_off = 0; /* offset in the current vec component,</div><div class='del'>-			    * i.e. the number of bytes have already</div><div class='del'>-			    * been copied */</div><div class='del'>-	int32_t block_size = get_atom_size(object);</div><div class='del'>-	size_t to_process; /* number of vec's bytes to copy and(or) re-use */</div><div class='del'>-	int32_t off_in_head = conf-&gt;off_in_head;</div><div class='del'>-</div><div class='del'>-	to_process = iov_length(vec, count);</div><div class='del'>-</div><div class='del'>-	while (to_process &gt; 0) {</div><div class='del'>-		if (off_in_head ||</div><div class='del'>-		    vec[vecn].iov_len - vec_off &lt; block_size) {</div><div class='del'>-			/*</div><div class='del'>-			 * less than block_size:</div><div class='del'>-			 * the case of incomplete (head or tail),</div><div class='del'>-			 * or compound block</div><div class='del'>-			 */</div><div class='del'>-			size_t copied = 0;</div><div class='del'>-			/*</div><div class='del'>-			 * populate the pool with a new block</div><div class='del'>-			 */</div><div class='del'>-			blocks[*blocks_allocated] = data_alloc_block(this,</div><div class='del'>-								    local,</div><div class='del'>-								    block_size);</div><div class='del'>-			if (!blocks[*blocks_allocated])</div><div class='del'>-				return -ENOMEM;</div><div class='del'>-			memset(blocks[*blocks_allocated], 0, off_in_head);</div><div class='del'>-			/*</div><div class='del'>-			 * fill the block with vec components</div><div class='del'>-			 */</div><div class='del'>-			do {</div><div class='del'>-				size_t to_copy;</div><div class='del'>-</div><div class='del'>-				to_copy = vec[vecn].iov_len - vec_off;</div><div class='del'>-				if (to_copy &gt; block_size - off_in_head)</div><div class='del'>-					to_copy = block_size - off_in_head;</div><div class='del'>-</div><div class='del'>-				memcpy(blocks[*blocks_allocated] + off_in_head + copied,</div><div class='del'>-				       vec[vecn].iov_base + vec_off,</div><div class='del'>-				       to_copy);</div><div class='del'>-</div><div class='del'>-				copied += to_copy;</div><div class='del'>-				to_process -= to_copy;</div><div class='del'>-</div><div class='del'>-				vec_off += to_copy;</div><div class='del'>-				if (vec_off == vec[vecn].iov_len) {</div><div class='del'>-					/* finished with this vecn */</div><div class='del'>-					vec_off = 0;</div><div class='del'>-					vecn++;</div><div class='del'>-				}</div><div class='del'>-			} while (copied &lt; (block_size - off_in_head) &amp;&amp; to_process &gt; 0);</div><div class='del'>-			/*</div><div class='del'>-			 * update avec</div><div class='del'>-			 */</div><div class='del'>-			avec[avecn].iov_len = off_in_head + copied;</div><div class='del'>-			avec[avecn].iov_base = blocks[*blocks_allocated];</div><div class='del'>-</div><div class='del'>-			(*blocks_allocated)++;</div><div class='del'>-			off_in_head = 0;</div><div class='del'>-		} else {</div><div class='del'>-			/*</div><div class='del'>-			 * the rest of the current vec component</div><div class='del'>-			 * is not less than block_size, so reuse</div><div class='del'>-			 * the memory buffer of the component.</div><div class='del'>-			 */</div><div class='del'>-			size_t to_reuse;</div><div class='del'>-			to_reuse = (to_process &gt; block_size ?</div><div class='del'>-				    block_size :</div><div class='del'>-				    to_process);</div><div class='del'>-			avec[avecn].iov_len = to_reuse;</div><div class='del'>-			avec[avecn].iov_base = vec[vecn].iov_base + vec_off;</div><div class='del'>-</div><div class='del'>-			vec_off += to_reuse;</div><div class='del'>-			if (vec_off == vec[vecn].iov_len) {</div><div class='del'>-				/* finished with this vecn */</div><div class='del'>-				vec_off = 0;</div><div class='del'>-				vecn++;</div><div class='del'>-			}</div><div class='del'>-			to_process -= to_reuse;</div><div class='del'>-		}</div><div class='del'>-		avecn++;</div><div class='del'>-	}</div><div class='del'>-	check_iovecs(vec, count, avec, avecn, conf-&gt;off_in_head);</div><div class='del'>-	return 0;</div><div class='add'>+    int vecn = 0;      /* number of the current component in vec */</div><div class='add'>+    int avecn = 0;     /* number of the current component in avec */</div><div class='add'>+    off_t vec_off = 0; /* offset in the current vec component,</div><div class='add'>+                        * i.e. the number of bytes have already</div><div class='add'>+                        * been copied */</div><div class='add'>+    int32_t block_size = get_atom_size(object);</div><div class='add'>+    size_t to_process; /* number of vec's bytes to copy and(or) re-use */</div><div class='add'>+    int32_t off_in_head = conf-&gt;off_in_head;</div><div class='add'>+</div><div class='add'>+    to_process = iov_length(vec, count);</div><div class='add'>+</div><div class='add'>+    while (to_process &gt; 0) {</div><div class='add'>+        if (off_in_head || vec[vecn].iov_len - vec_off &lt; block_size) {</div><div class='add'>+            /*</div><div class='add'>+             * less than block_size:</div><div class='add'>+             * the case of incomplete (head or tail),</div><div class='add'>+             * or compound block</div><div class='add'>+             */</div><div class='add'>+            size_t copied = 0;</div><div class='add'>+            /*</div><div class='add'>+             * populate the pool with a new block</div><div class='add'>+             */</div><div class='add'>+            blocks[*blocks_allocated] = data_alloc_block(this, local,</div><div class='add'>+                                                         block_size);</div><div class='add'>+            if (!blocks[*blocks_allocated])</div><div class='add'>+                return -ENOMEM;</div><div class='add'>+            memset(blocks[*blocks_allocated], 0, off_in_head);</div><div class='add'>+            /*</div><div class='add'>+             * fill the block with vec components</div><div class='add'>+             */</div><div class='add'>+            do {</div><div class='add'>+                size_t to_copy;</div><div class='add'>+</div><div class='add'>+                to_copy = vec[vecn].iov_len - vec_off;</div><div class='add'>+                if (to_copy &gt; block_size - off_in_head)</div><div class='add'>+                    to_copy = block_size - off_in_head;</div><div class='add'>+</div><div class='add'>+                memcpy(blocks[*blocks_allocated] + off_in_head + copied,</div><div class='add'>+                       vec[vecn].iov_base + vec_off, to_copy);</div><div class='add'>+</div><div class='add'>+                copied += to_copy;</div><div class='add'>+                to_process -= to_copy;</div><div class='add'>+</div><div class='add'>+                vec_off += to_copy;</div><div class='add'>+                if (vec_off == vec[vecn].iov_len) {</div><div class='add'>+                    /* finished with this vecn */</div><div class='add'>+                    vec_off = 0;</div><div class='add'>+                    vecn++;</div><div class='add'>+                }</div><div class='add'>+            } while (copied &lt; (block_size - off_in_head) &amp;&amp; to_process &gt; 0);</div><div class='add'>+            /*</div><div class='add'>+             * update avec</div><div class='add'>+             */</div><div class='add'>+            avec[avecn].iov_len = off_in_head + copied;</div><div class='add'>+            avec[avecn].iov_base = blocks[*blocks_allocated];</div><div class='add'>+</div><div class='add'>+            (*blocks_allocated)++;</div><div class='add'>+            off_in_head = 0;</div><div class='add'>+        } else {</div><div class='add'>+            /*</div><div class='add'>+             * the rest of the current vec component</div><div class='add'>+             * is not less than block_size, so reuse</div><div class='add'>+             * the memory buffer of the component.</div><div class='add'>+             */</div><div class='add'>+            size_t to_reuse;</div><div class='add'>+            to_reuse = (to_process &gt; block_size ? block_size : to_process);</div><div class='add'>+            avec[avecn].iov_len = to_reuse;</div><div class='add'>+            avec[avecn].iov_base = vec[vecn].iov_base + vec_off;</div><div class='add'>+</div><div class='add'>+            vec_off += to_reuse;</div><div class='add'>+            if (vec_off == vec[vecn].iov_len) {</div><div class='add'>+                /* finished with this vecn */</div><div class='add'>+                vec_off = 0;</div><div class='add'>+                vecn++;</div><div class='add'>+            }</div><div class='add'>+            to_process -= to_reuse;</div><div class='add'>+        }</div><div class='add'>+        avecn++;</div><div class='add'>+    }</div><div class='add'>+    check_iovecs(vec, count, avec, avecn, conf-&gt;off_in_head);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * allocate and setup aligned vector for data submission</div><div class='ctx'>  * Pre-condition: @conf is set.</div><div class='ctx'>  */</div><div class='del'>-int32_t set_config_avec_data(xlator_t *this,</div><div class='del'>-			     crypt_local_t *local,</div><div class='del'>-			     struct avec_config *conf,</div><div class='del'>-			     struct object_cipher_info *object,</div><div class='del'>-			     struct iovec *vec,</div><div class='del'>-			     int32_t vec_count)</div><div class='add'>+int32_t</div><div class='add'>+set_config_avec_data(xlator_t *this, crypt_local_t *local,</div><div class='add'>+                     struct avec_config *conf,</div><div class='add'>+                     struct object_cipher_info *object, struct iovec *vec,</div><div class='add'>+                     int32_t vec_count)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret = ENOMEM;</div><div class='del'>-	struct iovec *avec;</div><div class='del'>-	char **pool;</div><div class='del'>-	uint32_t blocks_in_pool = 0;</div><div class='del'>-</div><div class='del'>-	conf-&gt;type = DATA_ATOM;</div><div class='del'>-</div><div class='del'>-	avec = GF_CALLOC(conf-&gt;acount, sizeof(*avec), gf_crypt_mt_iovec);</div><div class='del'>-	if (!avec)</div><div class='del'>-		return ret;</div><div class='del'>-	pool = GF_CALLOC(conf-&gt;acount, sizeof(*pool), gf_crypt_mt_char);</div><div class='del'>-	if (!pool) {</div><div class='del'>-		GF_FREE(avec);</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	if (!vec) {</div><div class='del'>-		/*</div><div class='del'>-		 * degenerated case: no data</div><div class='del'>-		 */</div><div class='del'>-		pool[0] = data_alloc_block(this, local, get_atom_size(object));</div><div class='del'>-		if (!pool[0])</div><div class='del'>-			goto free;</div><div class='del'>-		blocks_in_pool = 1;</div><div class='del'>-		avec-&gt;iov_base = pool[0];</div><div class='del'>-		avec-&gt;iov_len = conf-&gt;off_in_tail;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-		ret = align_iov_by_atoms(this, local, object, vec, vec_count,</div><div class='del'>-					 avec, pool, &amp;blocks_in_pool, conf);</div><div class='del'>-		if (ret)</div><div class='del'>-			goto free;</div><div class='del'>-	}</div><div class='del'>-	conf-&gt;avec = avec;</div><div class='del'>-	conf-&gt;pool = pool;</div><div class='del'>-	conf-&gt;blocks_in_pool = blocks_in_pool;</div><div class='del'>-	return 0;</div><div class='del'>- free:</div><div class='del'>-	GF_FREE(avec);</div><div class='del'>-	GF_FREE(pool);</div><div class='del'>-	return ret;</div><div class='add'>+    int32_t ret = ENOMEM;</div><div class='add'>+    struct iovec *avec;</div><div class='add'>+    char **pool;</div><div class='add'>+    uint32_t blocks_in_pool = 0;</div><div class='add'>+</div><div class='add'>+    conf-&gt;type = DATA_ATOM;</div><div class='add'>+</div><div class='add'>+    avec = GF_CALLOC(conf-&gt;acount, sizeof(*avec), gf_crypt_mt_iovec);</div><div class='add'>+    if (!avec)</div><div class='add'>+        return ret;</div><div class='add'>+    pool = GF_CALLOC(conf-&gt;acount, sizeof(*pool), gf_crypt_mt_char);</div><div class='add'>+    if (!pool) {</div><div class='add'>+        GF_FREE(avec);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    if (!vec) {</div><div class='add'>+        /*</div><div class='add'>+         * degenerated case: no data</div><div class='add'>+         */</div><div class='add'>+        pool[0] = data_alloc_block(this, local, get_atom_size(object));</div><div class='add'>+        if (!pool[0])</div><div class='add'>+            goto free;</div><div class='add'>+        blocks_in_pool = 1;</div><div class='add'>+        avec-&gt;iov_base = pool[0];</div><div class='add'>+        avec-&gt;iov_len = conf-&gt;off_in_tail;</div><div class='add'>+    } else {</div><div class='add'>+        ret = align_iov_by_atoms(this, local, object, vec, vec_count, avec,</div><div class='add'>+                                 pool, &amp;blocks_in_pool, conf);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto free;</div><div class='add'>+    }</div><div class='add'>+    conf-&gt;avec = avec;</div><div class='add'>+    conf-&gt;pool = pool;</div><div class='add'>+    conf-&gt;blocks_in_pool = blocks_in_pool;</div><div class='add'>+    return 0;</div><div class='add'>+free:</div><div class='add'>+    GF_FREE(avec);</div><div class='add'>+    GF_FREE(pool);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * allocate and setup aligned vector for hole submission</div><div class='ctx'>  */</div><div class='del'>-int32_t set_config_avec_hole(xlator_t *this,</div><div class='del'>-			     crypt_local_t *local,</div><div class='del'>-			     struct avec_config *conf,</div><div class='del'>-			     struct object_cipher_info *object,</div><div class='del'>-			     glusterfs_fop_t fop)</div><div class='add'>+int32_t</div><div class='add'>+set_config_avec_hole(xlator_t *this, crypt_local_t *local,</div><div class='add'>+                     struct avec_config *conf,</div><div class='add'>+                     struct object_cipher_info *object, glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-	uint32_t i, idx;</div><div class='del'>-	struct iovec *avec;</div><div class='del'>-	char **pool;</div><div class='del'>-	uint32_t num_blocks;</div><div class='del'>-	uint32_t blocks_in_pool = 0;</div><div class='del'>-</div><div class='del'>-	conf-&gt;type = HOLE_ATOM;</div><div class='del'>-</div><div class='del'>-	num_blocks = conf-&gt;acount -</div><div class='del'>-		(conf-&gt;nr_full_blocks ? conf-&gt;nr_full_blocks - 1 : 0);</div><div class='del'>-</div><div class='del'>-	switch (fop) {</div><div class='del'>-	case GF_FOP_WRITE:</div><div class='del'>-		/*</div><div class='del'>-		 * hole goes before data</div><div class='del'>-		 */</div><div class='del'>-		if (num_blocks == 1 &amp;&amp; conf-&gt;off_in_tail != 0)</div><div class='del'>-		/*</div><div class='del'>-		 * we won't submit a hole which fits into</div><div class='del'>-		 * a data atom: this part of hole will be</div><div class='del'>-		 * submitted with data write</div><div class='del'>-		 */</div><div class='del'>-			return 0;</div><div class='del'>-		break;</div><div class='del'>-	case GF_FOP_FTRUNCATE:</div><div class='del'>-		/*</div><div class='del'>-		 * expanding truncate, hole goes after data,</div><div class='del'>-		 * and will be submitted in any case.</div><div class='del'>- 		 */</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "bad file operation %d", fop);</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-	avec = GF_CALLOC(num_blocks, sizeof(*avec), gf_crypt_mt_iovec);</div><div class='del'>-	if (!avec)</div><div class='del'>-		return ENOMEM;</div><div class='del'>-	pool = GF_CALLOC(num_blocks, sizeof(*pool), gf_crypt_mt_char);</div><div class='del'>-	if (!pool) {</div><div class='del'>-		GF_FREE(avec);</div><div class='del'>-		return ENOMEM;</div><div class='del'>-	}</div><div class='del'>-	for (i = 0; i &lt; num_blocks; i++) {</div><div class='del'>-		pool[i] = data_alloc_block(this, local, get_atom_size(object));</div><div class='del'>-		if (pool[i] == NULL)</div><div class='del'>-			goto free;</div><div class='del'>-		blocks_in_pool++;</div><div class='del'>-	}</div><div class='del'>-	if (has_head_block(conf)) {</div><div class='del'>-		/* set head block */</div><div class='del'>-		idx = 0;</div><div class='del'>-		avec[idx].iov_base = pool[idx];</div><div class='del'>-		avec[idx].iov_len = get_atom_size(object);</div><div class='del'>-		memset(avec[idx].iov_base + conf-&gt;off_in_head,</div><div class='del'>-		       0,</div><div class='del'>-		       get_atom_size(object) - conf-&gt;off_in_head);</div><div class='del'>-	}</div><div class='del'>-	if (has_tail_block(conf)) {</div><div class='del'>-		/* set tail block */</div><div class='del'>-		idx = num_blocks - 1;</div><div class='del'>-		avec[idx].iov_base = pool[idx];</div><div class='del'>-		avec[idx].iov_len = get_atom_size(object);</div><div class='del'>-		memset(avec[idx].iov_base, 0, conf-&gt;off_in_tail);</div><div class='del'>-	}</div><div class='del'>-	if (has_full_blocks(conf)) {</div><div class='del'>-		/* set full block */</div><div class='del'>-		idx = conf-&gt;off_in_head ? 1 : 0;</div><div class='del'>-		avec[idx].iov_base = pool[idx];</div><div class='del'>-		avec[idx].iov_len = get_atom_size(object);</div><div class='del'>-		/*</div><div class='del'>-		 * since we re-use the buffer,</div><div class='del'>-		 * zeroes will be set every time</div><div class='del'>-		 * before encryption, see submit_full()</div><div class='del'>-		 */</div><div class='del'>-	}</div><div class='del'>-	conf-&gt;avec = avec;</div><div class='del'>-	conf-&gt;pool = pool;</div><div class='del'>-	conf-&gt;blocks_in_pool = blocks_in_pool;</div><div class='del'>-	return 0;</div><div class='del'>- free:</div><div class='del'>-	GF_FREE(avec);</div><div class='del'>-	GF_FREE(pool);</div><div class='del'>-	return ENOMEM;</div><div class='add'>+    uint32_t i, idx;</div><div class='add'>+    struct iovec *avec;</div><div class='add'>+    char **pool;</div><div class='add'>+    uint32_t num_blocks;</div><div class='add'>+    uint32_t blocks_in_pool = 0;</div><div class='add'>+</div><div class='add'>+    conf-&gt;type = HOLE_ATOM;</div><div class='add'>+</div><div class='add'>+    num_blocks = conf-&gt;acount -</div><div class='add'>+                 (conf-&gt;nr_full_blocks ? conf-&gt;nr_full_blocks - 1 : 0);</div><div class='add'>+</div><div class='add'>+    switch (fop) {</div><div class='add'>+        case GF_FOP_WRITE:</div><div class='add'>+            /*</div><div class='add'>+             * hole goes before data</div><div class='add'>+             */</div><div class='add'>+            if (num_blocks == 1 &amp;&amp; conf-&gt;off_in_tail != 0)</div><div class='add'>+                /*</div><div class='add'>+                 * we won't submit a hole which fits into</div><div class='add'>+                 * a data atom: this part of hole will be</div><div class='add'>+                 * submitted with data write</div><div class='add'>+                 */</div><div class='add'>+                return 0;</div><div class='add'>+            break;</div><div class='add'>+        case GF_FOP_FTRUNCATE:</div><div class='add'>+            /*</div><div class='add'>+             * expanding truncate, hole goes after data,</div><div class='add'>+             * and will be submitted in any case.</div><div class='add'>+             */</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING, "bad file operation %d", fop);</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+    avec = GF_CALLOC(num_blocks, sizeof(*avec), gf_crypt_mt_iovec);</div><div class='add'>+    if (!avec)</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    pool = GF_CALLOC(num_blocks, sizeof(*pool), gf_crypt_mt_char);</div><div class='add'>+    if (!pool) {</div><div class='add'>+        GF_FREE(avec);</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    for (i = 0; i &lt; num_blocks; i++) {</div><div class='add'>+        pool[i] = data_alloc_block(this, local, get_atom_size(object));</div><div class='add'>+        if (pool[i] == NULL)</div><div class='add'>+            goto free;</div><div class='add'>+        blocks_in_pool++;</div><div class='add'>+    }</div><div class='add'>+    if (has_head_block(conf)) {</div><div class='add'>+        /* set head block */</div><div class='add'>+        idx = 0;</div><div class='add'>+        avec[idx].iov_base = pool[idx];</div><div class='add'>+        avec[idx].iov_len = get_atom_size(object);</div><div class='add'>+        memset(avec[idx].iov_base + conf-&gt;off_in_head, 0,</div><div class='add'>+               get_atom_size(object) - conf-&gt;off_in_head);</div><div class='add'>+    }</div><div class='add'>+    if (has_tail_block(conf)) {</div><div class='add'>+        /* set tail block */</div><div class='add'>+        idx = num_blocks - 1;</div><div class='add'>+        avec[idx].iov_base = pool[idx];</div><div class='add'>+        avec[idx].iov_len = get_atom_size(object);</div><div class='add'>+        memset(avec[idx].iov_base, 0, conf-&gt;off_in_tail);</div><div class='add'>+    }</div><div class='add'>+    if (has_full_blocks(conf)) {</div><div class='add'>+        /* set full block */</div><div class='add'>+        idx = conf-&gt;off_in_head ? 1 : 0;</div><div class='add'>+        avec[idx].iov_base = pool[idx];</div><div class='add'>+        avec[idx].iov_len = get_atom_size(object);</div><div class='add'>+        /*</div><div class='add'>+         * since we re-use the buffer,</div><div class='add'>+         * zeroes will be set every time</div><div class='add'>+         * before encryption, see submit_full()</div><div class='add'>+         */</div><div class='add'>+    }</div><div class='add'>+    conf-&gt;avec = avec;</div><div class='add'>+    conf-&gt;pool = pool;</div><div class='add'>+    conf-&gt;blocks_in_pool = blocks_in_pool;</div><div class='add'>+    return 0;</div><div class='add'>+free:</div><div class='add'>+    GF_FREE(avec);</div><div class='add'>+    GF_FREE(pool);</div><div class='add'>+    return ENOMEM;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* A helper for setting up config of partial atoms (which</div><div class='hunk'>@@ -617,140 +575,133 @@ int32_t set_config_avec_hole(xlator_t *this,</div><div class='ctx'>  * @conf contains setup, which is enough for correct calculation</div><div class='ctx'>  * of has_tail_block(), -&gt;get_offset().</div><div class='ctx'>  */</div><div class='del'>-void set_gap_at_end(call_frame_t *frame, struct object_cipher_info *object,</div><div class='del'>-		    struct avec_config *conf, atom_data_type dtype)</div><div class='add'>+void</div><div class='add'>+set_gap_at_end(call_frame_t *frame, struct object_cipher_info *object,</div><div class='add'>+               struct avec_config *conf, atom_data_type dtype)</div><div class='ctx'> {</div><div class='del'>-	uint32_t to_block;</div><div class='del'>-	crypt_local_t *local = frame-&gt;local;</div><div class='del'>-	uint64_t old_file_size = local-&gt;old_file_size;</div><div class='del'>-	struct rmw_atom *partial = atom_by_types(dtype,</div><div class='del'>-						 has_tail_block(conf) ?</div><div class='del'>-						 TAIL_ATOM : HEAD_ATOM);</div><div class='del'>-</div><div class='del'>-	if (old_file_size &lt;= partial-&gt;offset_at(frame, object))</div><div class='del'>-		to_block = 0;</div><div class='del'>-	else {</div><div class='del'>-		to_block = old_file_size - partial-&gt;offset_at(frame, object);</div><div class='del'>-		if (to_block &gt; get_atom_size(object))</div><div class='del'>-			to_block = get_atom_size(object);</div><div class='del'>-	}</div><div class='del'>-	if (to_block &gt; conf-&gt;off_in_tail)</div><div class='del'>-		conf-&gt;gap_in_tail = to_block - conf-&gt;off_in_tail;</div><div class='del'>-	else</div><div class='del'>-		/*</div><div class='del'>-		 * nothing to uptodate</div><div class='del'>-		 */</div><div class='del'>-		conf-&gt;gap_in_tail = 0;</div><div class='add'>+    uint32_t to_block;</div><div class='add'>+    crypt_local_t *local = frame-&gt;local;</div><div class='add'>+    uint64_t old_file_size = local-&gt;old_file_size;</div><div class='add'>+    struct rmw_atom *partial = atom_by_types(</div><div class='add'>+        dtype, has_tail_block(conf) ? TAIL_ATOM : HEAD_ATOM);</div><div class='add'>+</div><div class='add'>+    if (old_file_size &lt;= partial-&gt;offset_at(frame, object))</div><div class='add'>+        to_block = 0;</div><div class='add'>+    else {</div><div class='add'>+        to_block = old_file_size - partial-&gt;offset_at(frame, object);</div><div class='add'>+        if (to_block &gt; get_atom_size(object))</div><div class='add'>+            to_block = get_atom_size(object);</div><div class='add'>+    }</div><div class='add'>+    if (to_block &gt; conf-&gt;off_in_tail)</div><div class='add'>+        conf-&gt;gap_in_tail = to_block - conf-&gt;off_in_tail;</div><div class='add'>+    else</div><div class='add'>+        /*</div><div class='add'>+         * nothing to uptodate</div><div class='add'>+         */</div><div class='add'>+        conf-&gt;gap_in_tail = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * fill struct avec_config with offsets layouts</div><div class='ctx'>  */</div><div class='del'>-void set_config_offsets(call_frame_t *frame,</div><div class='del'>-			xlator_t *this,</div><div class='del'>-			uint64_t offset,</div><div class='del'>-			uint64_t count,</div><div class='del'>-			atom_data_type dtype,</div><div class='del'>-			int32_t set_gap)</div><div class='add'>+void</div><div class='add'>+set_config_offsets(call_frame_t *frame, xlator_t *this, uint64_t offset,</div><div class='add'>+                   uint64_t count, atom_data_type dtype, int32_t set_gap)</div><div class='ctx'> {</div><div class='del'>-	crypt_local_t *local;</div><div class='del'>-	struct object_cipher_info *object;</div><div class='del'>-	struct avec_config *conf;</div><div class='del'>-	uint32_t resid;</div><div class='del'>-</div><div class='del'>-	uint32_t atom_size;</div><div class='del'>-	uint32_t atom_bits;</div><div class='del'>-</div><div class='del'>-	size_t orig_size;</div><div class='del'>-	off_t orig_offset;</div><div class='del'>-	size_t expanded_size;</div><div class='del'>-	off_t aligned_offset;</div><div class='del'>-</div><div class='del'>-	uint32_t off_in_head = 0;</div><div class='del'>-	uint32_t off_in_tail = 0;</div><div class='del'>-	uint32_t nr_full_blocks;</div><div class='del'>-	int32_t size_full_blocks;</div><div class='del'>-</div><div class='del'>-	uint32_t acount; /* number of aligned components to write.</div><div class='del'>-			  * The same as number of occupied logical</div><div class='del'>-			  * blocks (atoms)</div><div class='del'>-			  */</div><div class='del'>-	local = frame-&gt;local;</div><div class='del'>-	object = &amp;local-&gt;info-&gt;cinfo;</div><div class='del'>-	conf = (dtype == DATA_ATOM ?</div><div class='del'>-		get_data_conf(frame) : get_hole_conf(frame));</div><div class='del'>-</div><div class='del'>-	orig_offset = offset;</div><div class='del'>-	orig_size = count;</div><div class='del'>-</div><div class='del'>-	atom_size = get_atom_size(object);</div><div class='del'>-	atom_bits = get_atom_bits(object);</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * Round-down the start,</div><div class='del'>-	 * round-up the end.</div><div class='del'>-	 */</div><div class='del'>-	resid = offset &amp; (uint64_t)(atom_size - 1);</div><div class='del'>-</div><div class='del'>-	if (resid)</div><div class='del'>-		off_in_head = resid;</div><div class='del'>-	aligned_offset = offset - off_in_head;</div><div class='del'>-	expanded_size = orig_size + off_in_head;</div><div class='del'>-</div><div class='del'>-	/* calculate tail,</div><div class='del'>-	   expand size forward  */</div><div class='del'>-	resid = (offset + orig_size) &amp; (uint64_t)(atom_size - 1);</div><div class='del'>-</div><div class='del'>-	if (resid) {</div><div class='del'>-		off_in_tail = resid;</div><div class='del'>-		expanded_size += (atom_size - off_in_tail);</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * calculate number of occupied blocks</div><div class='del'>-	 */</div><div class='del'>-	acount = expanded_size &gt;&gt; atom_bits;</div><div class='del'>-	/*</div><div class='del'>-	 * calculate number of full blocks</div><div class='del'>-	 */</div><div class='del'>-	size_full_blocks = expanded_size;</div><div class='del'>-	if (off_in_head)</div><div class='del'>-		size_full_blocks -= atom_size;</div><div class='del'>-	if (off_in_tail &amp;&amp; size_full_blocks &gt; 0)</div><div class='del'>-		size_full_blocks -= atom_size;</div><div class='del'>-	nr_full_blocks = size_full_blocks &gt;&gt; atom_bits;</div><div class='del'>-</div><div class='del'>-	conf-&gt;atom_size = atom_size;</div><div class='del'>-	conf-&gt;orig_size = orig_size;</div><div class='del'>-	conf-&gt;orig_offset = orig_offset;</div><div class='del'>-	conf-&gt;expanded_size = expanded_size;</div><div class='del'>-	conf-&gt;aligned_offset = aligned_offset;</div><div class='del'>-</div><div class='del'>-	conf-&gt;off_in_head = off_in_head;</div><div class='del'>-	conf-&gt;off_in_tail = off_in_tail;</div><div class='del'>-	conf-&gt;nr_full_blocks = nr_full_blocks;</div><div class='del'>-	conf-&gt;acount = acount;</div><div class='del'>-	/*</div><div class='del'>-	 * Finally, calculate precise amount of</div><div class='del'>-	 * "extra-bytes" that should be uptodated</div><div class='del'>-	 * at the end.</div><div class='del'>-	 * Only if RMW is expected.</div><div class='del'>-	 */</div><div class='del'>-	if (off_in_tail &amp;&amp; set_gap)</div><div class='del'>-		set_gap_at_end(frame, object, conf, dtype);</div><div class='add'>+    crypt_local_t *local;</div><div class='add'>+    struct object_cipher_info *object;</div><div class='add'>+    struct avec_config *conf;</div><div class='add'>+    uint32_t resid;</div><div class='add'>+</div><div class='add'>+    uint32_t atom_size;</div><div class='add'>+    uint32_t atom_bits;</div><div class='add'>+</div><div class='add'>+    size_t orig_size;</div><div class='add'>+    off_t orig_offset;</div><div class='add'>+    size_t expanded_size;</div><div class='add'>+    off_t aligned_offset;</div><div class='add'>+</div><div class='add'>+    uint32_t off_in_head = 0;</div><div class='add'>+    uint32_t off_in_tail = 0;</div><div class='add'>+    uint32_t nr_full_blocks;</div><div class='add'>+    int32_t size_full_blocks;</div><div class='add'>+</div><div class='add'>+    uint32_t acount; /* number of aligned components to write.</div><div class='add'>+                      * The same as number of occupied logical</div><div class='add'>+                      * blocks (atoms)</div><div class='add'>+                      */</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    object = &amp;local-&gt;info-&gt;cinfo;</div><div class='add'>+    conf = (dtype == DATA_ATOM ? get_data_conf(frame) : get_hole_conf(frame));</div><div class='add'>+</div><div class='add'>+    orig_offset = offset;</div><div class='add'>+    orig_size = count;</div><div class='add'>+</div><div class='add'>+    atom_size = get_atom_size(object);</div><div class='add'>+    atom_bits = get_atom_bits(object);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Round-down the start,</div><div class='add'>+     * round-up the end.</div><div class='add'>+     */</div><div class='add'>+    resid = offset &amp; (uint64_t)(atom_size - 1);</div><div class='add'>+</div><div class='add'>+    if (resid)</div><div class='add'>+        off_in_head = resid;</div><div class='add'>+    aligned_offset = offset - off_in_head;</div><div class='add'>+    expanded_size = orig_size + off_in_head;</div><div class='add'>+</div><div class='add'>+    /* calculate tail,</div><div class='add'>+       expand size forward  */</div><div class='add'>+    resid = (offset + orig_size) &amp; (uint64_t)(atom_size - 1);</div><div class='add'>+</div><div class='add'>+    if (resid) {</div><div class='add'>+        off_in_tail = resid;</div><div class='add'>+        expanded_size += (atom_size - off_in_tail);</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * calculate number of occupied blocks</div><div class='add'>+     */</div><div class='add'>+    acount = expanded_size &gt;&gt; atom_bits;</div><div class='add'>+    /*</div><div class='add'>+     * calculate number of full blocks</div><div class='add'>+     */</div><div class='add'>+    size_full_blocks = expanded_size;</div><div class='add'>+    if (off_in_head)</div><div class='add'>+        size_full_blocks -= atom_size;</div><div class='add'>+    if (off_in_tail &amp;&amp; size_full_blocks &gt; 0)</div><div class='add'>+        size_full_blocks -= atom_size;</div><div class='add'>+    nr_full_blocks = size_full_blocks &gt;&gt; atom_bits;</div><div class='add'>+</div><div class='add'>+    conf-&gt;atom_size = atom_size;</div><div class='add'>+    conf-&gt;orig_size = orig_size;</div><div class='add'>+    conf-&gt;orig_offset = orig_offset;</div><div class='add'>+    conf-&gt;expanded_size = expanded_size;</div><div class='add'>+    conf-&gt;aligned_offset = aligned_offset;</div><div class='add'>+</div><div class='add'>+    conf-&gt;off_in_head = off_in_head;</div><div class='add'>+    conf-&gt;off_in_tail = off_in_tail;</div><div class='add'>+    conf-&gt;nr_full_blocks = nr_full_blocks;</div><div class='add'>+    conf-&gt;acount = acount;</div><div class='add'>+    /*</div><div class='add'>+     * Finally, calculate precise amount of</div><div class='add'>+     * "extra-bytes" that should be uptodated</div><div class='add'>+     * at the end.</div><div class='add'>+     * Only if RMW is expected.</div><div class='add'>+     */</div><div class='add'>+    if (off_in_tail &amp;&amp; set_gap)</div><div class='add'>+        set_gap_at_end(frame, object, conf, dtype);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct data_cipher_alg data_cipher_algs[LAST_CIPHER_ALG][LAST_CIPHER_MODE] = {</div><div class='del'>-	[AES_CIPHER_ALG][XTS_CIPHER_MODE] =</div><div class='del'>-	{ .atomic = _gf_true,</div><div class='del'>-	  .should_pad = _gf_true,</div><div class='del'>-	  .blkbits = AES_BLOCK_BITS,</div><div class='del'>-	  .init = aes_xts_init,</div><div class='del'>-	  .set_private = set_private_aes_xts,</div><div class='del'>-	  .check_key = check_key_aes_xts,</div><div class='del'>-	  .set_iv = set_iv_aes_xts,</div><div class='del'>-	  .encrypt = encrypt_aes_xts</div><div class='del'>-	}</div><div class='del'>-};</div><div class='add'>+    [AES_CIPHER_ALG][XTS_CIPHER_MODE] = {.atomic = _gf_true,</div><div class='add'>+                                         .should_pad = _gf_true,</div><div class='add'>+                                         .blkbits = AES_BLOCK_BITS,</div><div class='add'>+                                         .init = aes_xts_init,</div><div class='add'>+                                         .set_private = set_private_aes_xts,</div><div class='add'>+                                         .check_key = check_key_aes_xts,</div><div class='add'>+                                         .set_iv = set_iv_aes_xts,</div><div class='add'>+                                         .encrypt = encrypt_aes_xts}};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>   Local variables:</div><div class='head'>diff --git a/xlators/encryption/crypt/src/keys.c b/xlators/encryption/crypt/src/keys.c<br/>index e9da55960c8..a9357005a36 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/keys.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/encryption/crypt/src/keys.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/keys.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/keys.c</a></div><div class='hunk'>@@ -34,18 +34,19 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #if DEBUG_CRYPT</div><div class='del'>-static void check_prf_iters(uint32_t num_iters)</div><div class='add'>+static void</div><div class='add'>+check_prf_iters(uint32_t num_iters)</div><div class='ctx'> {</div><div class='del'>-	if (num_iters == 0)</div><div class='del'>-		gf_log ("crypt", GF_LOG_DEBUG,</div><div class='del'>-			"bad number of prf iterations : %d", num_iters);</div><div class='add'>+    if (num_iters == 0)</div><div class='add'>+        gf_log("crypt", GF_LOG_DEBUG, "bad number of prf iterations : %d",</div><div class='add'>+               num_iters);</div><div class='ctx'> }</div><div class='ctx'> #else</div><div class='ctx'> #define check_prf_iters(num_iters) noop</div><div class='ctx'> #endif /* DEBUG_CRYPT */</div><div class='ctx'> </div><div class='del'>-unsigned char crypt_fake_oid[16] =</div><div class='del'>-	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};</div><div class='add'>+unsigned char crypt_fake_oid[16] = {0, 0, 0, 0, 0, 0, 0, 0,</div><div class='add'>+                                    0, 0, 0, 0, 0, 0, 0, 0};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * derive key in the counter mode using</div><div class='hunk'>@@ -53,250 +54,223 @@ unsigned char crypt_fake_oid[16] =</div><div class='ctx'>  * NIST Special Publication 800-108, 5.1)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-#define PRF_OUTPUT_SIZE  SHA256_DIGEST_LENGTH</div><div class='add'>+#define PRF_OUTPUT_SIZE SHA256_DIGEST_LENGTH</div><div class='ctx'> </div><div class='del'>-static int32_t kderive_init(struct kderive_context *ctx,</div><div class='del'>-			    const unsigned char *pkey, /* parent key */</div><div class='del'>-			    uint32_t pkey_size,  /* parent key size */</div><div class='del'>-			    const unsigned char *idctx, /* id-context */</div><div class='del'>-			    uint32_t idctx_size,</div><div class='del'>-			    crypt_key_type type  /* type of child key */)</div><div class='add'>+static int32_t</div><div class='add'>+kderive_init(struct kderive_context *ctx,</div><div class='add'>+             const unsigned char *pkey,  /* parent key */</div><div class='add'>+             uint32_t pkey_size,         /* parent key size */</div><div class='add'>+             const unsigned char *idctx, /* id-context */</div><div class='add'>+             uint32_t idctx_size, crypt_key_type type /* type of child key */)</div><div class='ctx'> {</div><div class='del'>-	unsigned char *pos;</div><div class='del'>-	uint32_t llen = strlen(crypt_keys[type].label);</div><div class='del'>-	/*</div><div class='del'>-	 * Compoud the fixed input data for KDF:</div><div class='del'>-	 * [i]_2 || Label || 0x00 || Id-Context || [L]_2),</div><div class='del'>-	 * NIST SP 800-108, 5.1</div><div class='del'>-	 */</div><div class='del'>-	ctx-&gt;fid_len =</div><div class='del'>-		sizeof(uint32_t) +</div><div class='del'>-		llen +</div><div class='del'>-		1 +</div><div class='del'>-		idctx_size +</div><div class='del'>-		sizeof(uint32_t);</div><div class='del'>-</div><div class='del'>-	ctx-&gt;fid = GF_CALLOC(ctx-&gt;fid_len, 1, gf_crypt_mt_key);</div><div class='del'>-	if (!ctx-&gt;fid)</div><div class='del'>-		return ENOMEM;</div><div class='del'>-	ctx-&gt;out_len = round_up(crypt_keys[type].len &gt;&gt; 3,</div><div class='del'>-				PRF_OUTPUT_SIZE);</div><div class='del'>-	ctx-&gt;out = GF_CALLOC(ctx-&gt;out_len, 1, gf_crypt_mt_key);</div><div class='del'>-	if (!ctx-&gt;out) {</div><div class='del'>-		GF_FREE(ctx-&gt;fid);</div><div class='del'>-		return ENOMEM;</div><div class='del'>-	}</div><div class='del'>-	ctx-&gt;pkey = pkey;</div><div class='del'>-	ctx-&gt;pkey_len = pkey_size;</div><div class='del'>-	ctx-&gt;ckey_len = crypt_keys[type].len;</div><div class='del'>-</div><div class='del'>-	pos = ctx-&gt;fid;</div><div class='del'>-</div><div class='del'>-	/* counter will be set up in kderive_rfn() */</div><div class='del'>-	pos += sizeof(uint32_t);</div><div class='del'>-</div><div class='del'>-	memcpy(pos, crypt_keys[type].label, llen);</div><div class='del'>-	pos += llen;</div><div class='del'>-</div><div class='del'>-	/* set up zero octet */</div><div class='del'>-	*pos = 0;</div><div class='del'>-	pos += 1;</div><div class='del'>-</div><div class='del'>-	memcpy(pos, idctx, idctx_size);</div><div class='del'>-	pos += idctx_size;</div><div class='del'>-</div><div class='del'>-	*((uint32_t *)pos) = htobe32(ctx-&gt;ckey_len);</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    unsigned char *pos;</div><div class='add'>+    uint32_t llen = strlen(crypt_keys[type].label);</div><div class='add'>+    /*</div><div class='add'>+     * Compoud the fixed input data for KDF:</div><div class='add'>+     * [i]_2 || Label || 0x00 || Id-Context || [L]_2),</div><div class='add'>+     * NIST SP 800-108, 5.1</div><div class='add'>+     */</div><div class='add'>+    ctx-&gt;fid_len = sizeof(uint32_t) + llen + 1 + idctx_size + sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    ctx-&gt;fid = GF_CALLOC(ctx-&gt;fid_len, 1, gf_crypt_mt_key);</div><div class='add'>+    if (!ctx-&gt;fid)</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    ctx-&gt;out_len = round_up(crypt_keys[type].len &gt;&gt; 3, PRF_OUTPUT_SIZE);</div><div class='add'>+    ctx-&gt;out = GF_CALLOC(ctx-&gt;out_len, 1, gf_crypt_mt_key);</div><div class='add'>+    if (!ctx-&gt;out) {</div><div class='add'>+        GF_FREE(ctx-&gt;fid);</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    ctx-&gt;pkey = pkey;</div><div class='add'>+    ctx-&gt;pkey_len = pkey_size;</div><div class='add'>+    ctx-&gt;ckey_len = crypt_keys[type].len;</div><div class='add'>+</div><div class='add'>+    pos = ctx-&gt;fid;</div><div class='add'>+</div><div class='add'>+    /* counter will be set up in kderive_rfn() */</div><div class='add'>+    pos += sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    memcpy(pos, crypt_keys[type].label, llen);</div><div class='add'>+    pos += llen;</div><div class='add'>+</div><div class='add'>+    /* set up zero octet */</div><div class='add'>+    *pos = 0;</div><div class='add'>+    pos += 1;</div><div class='add'>+</div><div class='add'>+    memcpy(pos, idctx, idctx_size);</div><div class='add'>+    pos += idctx_size;</div><div class='add'>+</div><div class='add'>+    *((uint32_t *)pos) = htobe32(ctx-&gt;ckey_len);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void kderive_update(struct kderive_context *ctx)</div><div class='add'>+static void</div><div class='add'>+kderive_update(struct kderive_context *ctx)</div><div class='ctx'> {</div><div class='del'>-	uint32_t i;</div><div class='add'>+    uint32_t i;</div><div class='ctx'> #if (OPENSSL_VERSION_NUMBER &lt; 0x1010002f)</div><div class='del'>-	HMAC_CTX hctx;</div><div class='add'>+    HMAC_CTX hctx;</div><div class='ctx'> #endif</div><div class='del'>-        HMAC_CTX *phctx = NULL;</div><div class='del'>-	unsigned char *pos = ctx-&gt;out;</div><div class='del'>-	uint32_t *p_iter = (uint32_t *)ctx-&gt;fid;</div><div class='del'>-	uint32_t num_iters = ctx-&gt;out_len / PRF_OUTPUT_SIZE;</div><div class='add'>+    HMAC_CTX *phctx = NULL;</div><div class='add'>+    unsigned char *pos = ctx-&gt;out;</div><div class='add'>+    uint32_t *p_iter = (uint32_t *)ctx-&gt;fid;</div><div class='add'>+    uint32_t num_iters = ctx-&gt;out_len / PRF_OUTPUT_SIZE;</div><div class='ctx'> </div><div class='del'>-	check_prf_iters(num_iters);</div><div class='add'>+    check_prf_iters(num_iters);</div><div class='ctx'> </div><div class='ctx'> #if (OPENSSL_VERSION_NUMBER &lt; 0x1010002f)</div><div class='del'>-	HMAC_CTX_init(&amp;hctx);</div><div class='del'>-        phctx = &amp;hctx;</div><div class='add'>+    HMAC_CTX_init(&amp;hctx);</div><div class='add'>+    phctx = &amp;hctx;</div><div class='ctx'> #else</div><div class='del'>-        phctx = HMAC_CTX_new();</div><div class='del'>-        /* I guess we presume it was successful? */</div><div class='add'>+    phctx = HMAC_CTX_new();</div><div class='add'>+    /* I guess we presume it was successful? */</div><div class='ctx'> #endif</div><div class='del'>-	for (i = 0; i &lt; num_iters; i++) {</div><div class='del'>-		/*</div><div class='del'>-		 * update the iteration number in the fid</div><div class='del'>-		 */</div><div class='del'>-		*p_iter = htobe32(i);</div><div class='del'>-		HMAC_Init_ex(phctx,</div><div class='del'>-			     ctx-&gt;pkey, ctx-&gt;pkey_len &gt;&gt; 3,</div><div class='del'>-			     EVP_sha256(),</div><div class='del'>-			     NULL);</div><div class='del'>-		HMAC_Update(phctx, ctx-&gt;fid, ctx-&gt;fid_len);</div><div class='del'>-		HMAC_Final(phctx, pos, NULL);</div><div class='del'>-</div><div class='del'>-		pos += PRF_OUTPUT_SIZE;</div><div class='del'>-	}</div><div class='add'>+    for (i = 0; i &lt; num_iters; i++) {</div><div class='add'>+        /*</div><div class='add'>+         * update the iteration number in the fid</div><div class='add'>+         */</div><div class='add'>+        *p_iter = htobe32(i);</div><div class='add'>+        HMAC_Init_ex(phctx, ctx-&gt;pkey, ctx-&gt;pkey_len &gt;&gt; 3, EVP_sha256(), NULL);</div><div class='add'>+        HMAC_Update(phctx, ctx-&gt;fid, ctx-&gt;fid_len);</div><div class='add'>+        HMAC_Final(phctx, pos, NULL);</div><div class='add'>+</div><div class='add'>+        pos += PRF_OUTPUT_SIZE;</div><div class='add'>+    }</div><div class='ctx'> #if (OPENSSL_VERSION_NUMBER &lt; 0x1010002f)</div><div class='del'>-	HMAC_CTX_cleanup(phctx);</div><div class='add'>+    HMAC_CTX_cleanup(phctx);</div><div class='ctx'> #else</div><div class='del'>-        HMAC_CTX_free(phctx);</div><div class='add'>+    HMAC_CTX_free(phctx);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void kderive_final(struct kderive_context *ctx, unsigned char *child)</div><div class='add'>+static void</div><div class='add'>+kderive_final(struct kderive_context *ctx, unsigned char *child)</div><div class='ctx'> {</div><div class='del'>-	memcpy(child, ctx-&gt;out, ctx-&gt;ckey_len &gt;&gt; 3);</div><div class='del'>-	GF_FREE(ctx-&gt;fid);</div><div class='del'>-	GF_FREE(ctx-&gt;out);</div><div class='del'>-	memset(ctx, 0, sizeof(*ctx));</div><div class='add'>+    memcpy(child, ctx-&gt;out, ctx-&gt;ckey_len &gt;&gt; 3);</div><div class='add'>+    GF_FREE(ctx-&gt;fid);</div><div class='add'>+    GF_FREE(ctx-&gt;out);</div><div class='add'>+    memset(ctx, 0, sizeof(*ctx));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * derive per-volume key for object ids aithentication</div><div class='ctx'>  */</div><div class='del'>-int32_t get_nmtd_vol_key(struct master_cipher_info *master)</div><div class='add'>+int32_t</div><div class='add'>+get_nmtd_vol_key(struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	struct kderive_context ctx;</div><div class='del'>-</div><div class='del'>-	ret = kderive_init(&amp;ctx,</div><div class='del'>-			   master-&gt;m_key,</div><div class='del'>-			   master_key_size(),</div><div class='del'>-			   crypt_fake_oid, sizeof(uuid_t), NMTD_VOL_KEY);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	kderive_update(&amp;ctx);</div><div class='del'>-	kderive_final(&amp;ctx, master-&gt;m_nmtd_key);</div><div class='del'>-	return 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    struct kderive_context ctx;</div><div class='add'>+</div><div class='add'>+    ret = kderive_init(&amp;ctx, master-&gt;m_key, master_key_size(), crypt_fake_oid,</div><div class='add'>+                       sizeof(uuid_t), NMTD_VOL_KEY);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    kderive_update(&amp;ctx);</div><div class='add'>+    kderive_final(&amp;ctx, master-&gt;m_nmtd_key);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * derive per-link key for aithentication of non-encrypted</div><div class='ctx'>  * meta-data (nmtd)</div><div class='ctx'>  */</div><div class='del'>-int32_t get_nmtd_link_key(loc_t *loc,</div><div class='del'>-			  struct master_cipher_info *master,</div><div class='del'>-			  unsigned char *result)</div><div class='add'>+int32_t</div><div class='add'>+get_nmtd_link_key(loc_t *loc, struct master_cipher_info *master,</div><div class='add'>+                  unsigned char *result)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	struct kderive_context ctx;</div><div class='del'>-</div><div class='del'>-	ret = kderive_init(&amp;ctx,</div><div class='del'>-			   master-&gt;m_nmtd_key,</div><div class='del'>-			   nmtd_vol_key_size(),</div><div class='del'>-			   (const unsigned char *)loc-&gt;path,</div><div class='del'>-			   strlen(loc-&gt;path), NMTD_LINK_KEY);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	kderive_update(&amp;ctx);</div><div class='del'>-	kderive_final(&amp;ctx, result);</div><div class='del'>-	return 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    struct kderive_context ctx;</div><div class='add'>+</div><div class='add'>+    ret = kderive_init(&amp;ctx, master-&gt;m_nmtd_key, nmtd_vol_key_size(),</div><div class='add'>+                       (const unsigned char *)loc-&gt;path, strlen(loc-&gt;path),</div><div class='add'>+                       NMTD_LINK_KEY);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    kderive_update(&amp;ctx);</div><div class='add'>+    kderive_final(&amp;ctx, result);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * derive per-file key for encryption and authentication</div><div class='ctx'>  * of encrypted part of metadata (emtd)</div><div class='ctx'>  */</div><div class='del'>-int32_t get_emtd_file_key(struct crypt_inode_info *info,</div><div class='del'>-			  struct master_cipher_info *master,</div><div class='del'>-			  unsigned char *result)</div><div class='add'>+int32_t</div><div class='add'>+get_emtd_file_key(struct crypt_inode_info *info,</div><div class='add'>+                  struct master_cipher_info *master, unsigned char *result)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	struct kderive_context ctx;</div><div class='del'>-</div><div class='del'>-	ret = kderive_init(&amp;ctx,</div><div class='del'>-			   master-&gt;m_key,</div><div class='del'>-			   master_key_size(),</div><div class='del'>-			   info-&gt;oid, sizeof(uuid_t), EMTD_FILE_KEY);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	kderive_update(&amp;ctx);</div><div class='del'>-	kderive_final(&amp;ctx, result);</div><div class='del'>-	return 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    struct kderive_context ctx;</div><div class='add'>+</div><div class='add'>+    ret = kderive_init(&amp;ctx, master-&gt;m_key, master_key_size(), info-&gt;oid,</div><div class='add'>+                       sizeof(uuid_t), EMTD_FILE_KEY);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    kderive_update(&amp;ctx);</div><div class='add'>+    kderive_final(&amp;ctx, result);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t data_key_type_by_size(uint32_t keysize, crypt_key_type *type)</div><div class='add'>+static int32_t</div><div class='add'>+data_key_type_by_size(uint32_t keysize, crypt_key_type *type)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret = 0;</div><div class='del'>-	switch (keysize) {</div><div class='del'>-	case 256:</div><div class='del'>-		*type = DATA_FILE_KEY_256;</div><div class='del'>-		break;</div><div class='del'>-	case 512:</div><div class='del'>-		*type = DATA_FILE_KEY_512;</div><div class='del'>-		break;</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Unsupported data key size %d",</div><div class='del'>-		       keysize);</div><div class='del'>-		ret = ENOTSUP;</div><div class='del'>-		break;</div><div class='del'>-	}</div><div class='del'>-	return ret;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    switch (keysize) {</div><div class='add'>+        case 256:</div><div class='add'>+            *type = DATA_FILE_KEY_256;</div><div class='add'>+            break;</div><div class='add'>+        case 512:</div><div class='add'>+            *type = DATA_FILE_KEY_512;</div><div class='add'>+            break;</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR, "Unsupported data key size %d",</div><div class='add'>+                   keysize);</div><div class='add'>+            ret = ENOTSUP;</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * derive per-file key for data encryption</div><div class='ctx'>  */</div><div class='del'>-int32_t get_data_file_key(struct crypt_inode_info *info,</div><div class='del'>-			  struct master_cipher_info *master,</div><div class='del'>-			  uint32_t keysize,</div><div class='del'>-			  unsigned char *key)</div><div class='add'>+int32_t</div><div class='add'>+get_data_file_key(struct crypt_inode_info *info,</div><div class='add'>+                  struct master_cipher_info *master, uint32_t keysize,</div><div class='add'>+                  unsigned char *key)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	struct kderive_context ctx;</div><div class='del'>-	crypt_key_type type;</div><div class='del'>-</div><div class='del'>-	ret = data_key_type_by_size(keysize, &amp;type);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = kderive_init(&amp;ctx,</div><div class='del'>-			   master-&gt;m_key,</div><div class='del'>-			   master_key_size(),</div><div class='del'>-			   info-&gt;oid, sizeof(uuid_t), type);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	kderive_update(&amp;ctx);</div><div class='del'>-	kderive_final(&amp;ctx, key);</div><div class='del'>-	return 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    struct kderive_context ctx;</div><div class='add'>+    crypt_key_type type;</div><div class='add'>+</div><div class='add'>+    ret = data_key_type_by_size(keysize, &amp;type);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    ret = kderive_init(&amp;ctx, master-&gt;m_key, master_key_size(), info-&gt;oid,</div><div class='add'>+                       sizeof(uuid_t), type);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    kderive_update(&amp;ctx);</div><div class='add'>+    kderive_final(&amp;ctx, key);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * NOTE: Don't change existing keys: it will break compatibility;</div><div class='ctx'>  */</div><div class='ctx'> struct crypt_key crypt_keys[LAST_KEY_TYPE] = {</div><div class='del'>-	[MASTER_VOL_KEY] =</div><div class='del'>-	{ .len = MASTER_VOL_KEY_SIZE &lt;&lt; 3,</div><div class='del'>-	  .label = "volume-master",</div><div class='del'>-	},</div><div class='del'>-	[NMTD_VOL_KEY] =</div><div class='del'>-	{ .len = NMTD_VOL_KEY_SIZE &lt;&lt; 3,</div><div class='del'>-	  .label = "volume-nmtd-key-generation"</div><div class='del'>-	},</div><div class='del'>-	[NMTD_LINK_KEY] =</div><div class='del'>-	{ .len = 128,</div><div class='del'>-	  .label = "link-nmtd-authentication"</div><div class='del'>-	},</div><div class='del'>-	[EMTD_FILE_KEY] =</div><div class='del'>-	{ .len = 128,</div><div class='del'>-	  .label = "file-emtd-encryption-and-auth"</div><div class='del'>-	},</div><div class='del'>-	[DATA_FILE_KEY_256] =</div><div class='del'>-	{ .len = 256,</div><div class='del'>-	  .label = "file-data-encryption-256"</div><div class='del'>-	},</div><div class='del'>-	[DATA_FILE_KEY_512] =</div><div class='del'>-	{ .len = 512,</div><div class='del'>-	  .label = "file-data-encryption-512"</div><div class='del'>-	}</div><div class='del'>-};</div><div class='add'>+    [MASTER_VOL_KEY] =</div><div class='add'>+        {</div><div class='add'>+            .len = MASTER_VOL_KEY_SIZE &lt;&lt; 3,</div><div class='add'>+            .label = "volume-master",</div><div class='add'>+        },</div><div class='add'>+    [NMTD_VOL_KEY] = {.len = NMTD_VOL_KEY_SIZE &lt;&lt; 3,</div><div class='add'>+                      .label = "volume-nmtd-key-generation"},</div><div class='add'>+    [NMTD_LINK_KEY] = {.len = 128, .label = "link-nmtd-authentication"},</div><div class='add'>+    [EMTD_FILE_KEY] = {.len = 128, .label = "file-emtd-encryption-and-auth"},</div><div class='add'>+    [DATA_FILE_KEY_256] = {.len = 256, .label = "file-data-encryption-256"},</div><div class='add'>+    [DATA_FILE_KEY_512] = {.len = 512, .label = "file-data-encryption-512"}};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>   Local variables:</div><div class='head'>diff --git a/xlators/encryption/crypt/src/metadata.c b/xlators/encryption/crypt/src/metadata.c<br/>index 96fe7d64e21..90c53a9f721 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/metadata.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/encryption/crypt/src/metadata.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/encryption/crypt/src/metadata.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/crypt/src/metadata.c</a></div><div class='hunk'>@@ -13,236 +13,235 @@</div><div class='ctx'> #include "crypt.h"</div><div class='ctx'> #include "metadata.h"</div><div class='ctx'> </div><div class='del'>-int32_t alloc_format(crypt_local_t *local, size_t size)</div><div class='add'>+int32_t</div><div class='add'>+alloc_format(crypt_local_t *local, size_t size)</div><div class='ctx'> {</div><div class='del'>-	if (size &gt; 0) {</div><div class='del'>-		local-&gt;format = GF_CALLOC(1, size, gf_crypt_mt_mtd);</div><div class='del'>-		if (!local-&gt;format)</div><div class='del'>-			return ENOMEM;</div><div class='del'>-	}</div><div class='del'>-	local-&gt;format_size = size;</div><div class='del'>-	return 0;</div><div class='add'>+    if (size &gt; 0) {</div><div class='add'>+        local-&gt;format = GF_CALLOC(1, size, gf_crypt_mt_mtd);</div><div class='add'>+        if (!local-&gt;format)</div><div class='add'>+            return ENOMEM;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;format_size = size;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t alloc_format_create(crypt_local_t *local)</div><div class='add'>+int32_t</div><div class='add'>+alloc_format_create(crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	return alloc_format(local, new_format_size());</div><div class='add'>+    return alloc_format(local, new_format_size());</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void free_format(crypt_local_t *local)</div><div class='add'>+void</div><div class='add'>+free_format(crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	GF_FREE(local-&gt;format);</div><div class='add'>+    GF_FREE(local-&gt;format);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Check compatibility with extracted metadata</div><div class='ctx'>  */</div><div class='del'>-static int32_t check_file_metadata(struct crypt_inode_info *info)</div><div class='add'>+static int32_t</div><div class='add'>+check_file_metadata(struct crypt_inode_info *info)</div><div class='ctx'> {</div><div class='del'>-	struct object_cipher_info *object = &amp;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	if (info-&gt;nr_minor != CRYPT_XLATOR_ID) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "unsupported minor subversion %d", info-&gt;nr_minor);</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-	if (object-&gt;o_alg &gt; LAST_CIPHER_ALG) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "unsupported cipher algorithm %d",</div><div class='del'>-		       object-&gt;o_alg);</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-	if (object-&gt;o_mode &gt; LAST_CIPHER_MODE) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING,</div><div class='del'>-		       "unsupported cipher mode %d",</div><div class='del'>-		       object-&gt;o_mode);</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-	if (object-&gt;o_block_bits &lt; CRYPT_MIN_BLOCK_BITS ||</div><div class='del'>-	    object-&gt;o_block_bits &gt; CRYPT_MAX_BLOCK_BITS) {</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "unsupported block bits %d",</div><div class='del'>-		       object-&gt;o_block_bits);</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-	/* TBD: check data key size */</div><div class='del'>-	return 0;</div><div class='add'>+    struct object_cipher_info *object = &amp;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    if (info-&gt;nr_minor != CRYPT_XLATOR_ID) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "unsupported minor subversion %d",</div><div class='add'>+               info-&gt;nr_minor);</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+    if (object-&gt;o_alg &gt; LAST_CIPHER_ALG) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "unsupported cipher algorithm %d",</div><div class='add'>+               object-&gt;o_alg);</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+    if (object-&gt;o_mode &gt; LAST_CIPHER_MODE) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "unsupported cipher mode %d",</div><div class='add'>+               object-&gt;o_mode);</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+    if (object-&gt;o_block_bits &lt; CRYPT_MIN_BLOCK_BITS ||</div><div class='add'>+        object-&gt;o_block_bits &gt; CRYPT_MAX_BLOCK_BITS) {</div><div class='add'>+        gf_log("crypt", GF_LOG_WARNING, "unsupported block bits %d",</div><div class='add'>+               object-&gt;o_block_bits);</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+    /* TBD: check data key size */</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static size_t format_size_v1(mtd_op_t op, size_t old_size)</div><div class='add'>+static size_t</div><div class='add'>+format_size_v1(mtd_op_t op, size_t old_size)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-	switch (op) {</div><div class='del'>-	case MTD_CREATE:</div><div class='del'>-		return sizeof(struct mtd_format_v1);</div><div class='del'>-	case MTD_OVERWRITE:</div><div class='del'>-		return old_size;</div><div class='del'>-	case MTD_APPEND:</div><div class='del'>-		return old_size + NMTD_8_MAC_SIZE;</div><div class='del'>-	case MTD_CUT:</div><div class='del'>-		if (old_size &gt; sizeof(struct mtd_format_v1))</div><div class='del'>-			return old_size - NMTD_8_MAC_SIZE;</div><div class='del'>-		else</div><div class='del'>-			return 0;</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_WARNING, "Bad mtd operation");</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='add'>+    switch (op) {</div><div class='add'>+        case MTD_CREATE:</div><div class='add'>+            return sizeof(struct mtd_format_v1);</div><div class='add'>+        case MTD_OVERWRITE:</div><div class='add'>+            return old_size;</div><div class='add'>+        case MTD_APPEND:</div><div class='add'>+            return old_size + NMTD_8_MAC_SIZE;</div><div class='add'>+        case MTD_CUT:</div><div class='add'>+            if (old_size &gt; sizeof(struct mtd_format_v1))</div><div class='add'>+                return old_size - NMTD_8_MAC_SIZE;</div><div class='add'>+            else</div><div class='add'>+                return 0;</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_WARNING, "Bad mtd operation");</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Calculate size of the updated format string.</div><div class='ctx'>  * Returned zero means that we don't need to update the format string.</div><div class='ctx'>  */</div><div class='del'>-size_t format_size(mtd_op_t op, size_t old_size)</div><div class='add'>+size_t</div><div class='add'>+format_size(mtd_op_t op, size_t old_size)</div><div class='ctx'> {</div><div class='del'>-	size_t versioned;</div><div class='add'>+    size_t versioned;</div><div class='ctx'> </div><div class='del'>-	versioned = mtd_loaders[current_mtd_loader()].format_size(op,</div><div class='del'>-				 old_size - sizeof(struct crypt_format));</div><div class='del'>-	if (versioned != 0)</div><div class='del'>-		return versioned + sizeof(struct crypt_format);</div><div class='del'>-	return 0;</div><div class='add'>+    versioned = mtd_loaders[current_mtd_loader()].format_size(</div><div class='add'>+        op, old_size - sizeof(struct crypt_format));</div><div class='add'>+    if (versioned != 0)</div><div class='add'>+        return versioned + sizeof(struct crypt_format);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * size of the format string of newly created file (nr_links = 1)</div><div class='ctx'>  */</div><div class='del'>-size_t new_format_size(void)</div><div class='add'>+size_t</div><div class='add'>+new_format_size(void)</div><div class='ctx'> {</div><div class='del'>-	return format_size(MTD_CREATE, 0);</div><div class='add'>+    return format_size(MTD_CREATE, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Calculate per-link MAC by pathname</div><div class='ctx'>  */</div><div class='del'>-static int32_t calc_link_mac_v1(struct mtd_format_v1 *fmt,</div><div class='del'>-				loc_t *loc,</div><div class='del'>-				unsigned char *result,</div><div class='del'>-				struct crypt_inode_info *info,</div><div class='del'>-				struct master_cipher_info *master)</div><div class='add'>+static int32_t</div><div class='add'>+calc_link_mac_v1(struct mtd_format_v1 *fmt, loc_t *loc, unsigned char *result,</div><div class='add'>+                 struct crypt_inode_info *info,</div><div class='add'>+                 struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	unsigned char nmtd_link_key[16];</div><div class='del'>-	CMAC_CTX *cctx;</div><div class='del'>-	size_t len;</div><div class='del'>-</div><div class='del'>-	ret = get_nmtd_link_key(loc, master, nmtd_link_key);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Can not get nmtd link key");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	cctx = CMAC_CTX_new();</div><div class='del'>-	if (!cctx) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "CMAC_CTX_new failed");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	ret = CMAC_Init(cctx, nmtd_link_key, sizeof(nmtd_link_key),</div><div class='del'>-			EVP_aes_128_cbc(), 0);</div><div class='del'>-	if (!ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "CMAC_Init failed");</div><div class='del'>-		CMAC_CTX_free(cctx);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	ret = CMAC_Update(cctx, get_NMTD_V1(info), SIZE_OF_NMTD_V1);</div><div class='del'>-	if (!ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "CMAC_Update failed");</div><div class='del'>-		CMAC_CTX_free(cctx);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	ret = CMAC_Final(cctx, result, &amp;len);</div><div class='del'>-	CMAC_CTX_free(cctx);</div><div class='del'>-	if (!ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "CMAC_Final failed");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    unsigned char nmtd_link_key[16];</div><div class='add'>+    CMAC_CTX *cctx;</div><div class='add'>+    size_t len;</div><div class='add'>+</div><div class='add'>+    ret = get_nmtd_link_key(loc, master, nmtd_link_key);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Can not get nmtd link key");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    cctx = CMAC_CTX_new();</div><div class='add'>+    if (!cctx) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "CMAC_CTX_new failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = CMAC_Init(cctx, nmtd_link_key, sizeof(nmtd_link_key),</div><div class='add'>+                    EVP_aes_128_cbc(), 0);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "CMAC_Init failed");</div><div class='add'>+        CMAC_CTX_free(cctx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = CMAC_Update(cctx, get_NMTD_V1(info), SIZE_OF_NMTD_V1);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "CMAC_Update failed");</div><div class='add'>+        CMAC_CTX_free(cctx);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    ret = CMAC_Final(cctx, result, &amp;len);</div><div class='add'>+    CMAC_CTX_free(cctx);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "CMAC_Final failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Create per-link MAC of index @idx by pathname</div><div class='ctx'>  */</div><div class='del'>-static int32_t create_link_mac_v1(struct mtd_format_v1 *fmt,</div><div class='del'>-				  uint32_t idx,</div><div class='del'>-				  loc_t *loc,</div><div class='del'>-				  struct crypt_inode_info *info,</div><div class='del'>-				  struct master_cipher_info *master)</div><div class='add'>+static int32_t</div><div class='add'>+create_link_mac_v1(struct mtd_format_v1 *fmt, uint32_t idx, loc_t *loc,</div><div class='add'>+                   struct crypt_inode_info *info,</div><div class='add'>+                   struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	unsigned char *mac;</div><div class='del'>-	unsigned char cmac[16];</div><div class='add'>+    int32_t ret;</div><div class='add'>+    unsigned char *mac;</div><div class='add'>+    unsigned char cmac[16];</div><div class='ctx'> </div><div class='del'>-	mac = get_NMTD_V1_MAC(fmt) + idx * SIZE_OF_NMTD_V1_MAC;</div><div class='add'>+    mac = get_NMTD_V1_MAC(fmt) + idx * SIZE_OF_NMTD_V1_MAC;</div><div class='ctx'> </div><div class='del'>-	ret = calc_link_mac_v1(fmt, loc, cmac, info, master);</div><div class='del'>-	if (ret)</div><div class='del'>-		return -1;</div><div class='del'>-	memcpy(mac, cmac, SIZE_OF_NMTD_V1_MAC);</div><div class='del'>-	return 0;</div><div class='add'>+    ret = calc_link_mac_v1(fmt, loc, cmac, info, master);</div><div class='add'>+    if (ret)</div><div class='add'>+        return -1;</div><div class='add'>+    memcpy(mac, cmac, SIZE_OF_NMTD_V1_MAC);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int32_t create_format_v1(unsigned char *wire,</div><div class='del'>-				loc_t *loc,</div><div class='del'>-				struct crypt_inode_info *info,</div><div class='del'>-				struct master_cipher_info *master)</div><div class='add'>+static int32_t</div><div class='add'>+create_format_v1(unsigned char *wire, loc_t *loc, struct crypt_inode_info *info,</div><div class='add'>+                 struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	struct mtd_format_v1 *fmt;</div><div class='del'>-	unsigned char mtd_key[16];</div><div class='del'>-	AES_KEY EMTD_KEY;</div><div class='del'>-	unsigned char nmtd_link_key[16];</div><div class='del'>-	uint32_t ad;</div><div class='del'>-	GCM128_CONTEXT *gctx;</div><div class='del'>-</div><div class='del'>-	fmt = (struct mtd_format_v1 *)wire;</div><div class='del'>-</div><div class='del'>-	fmt-&gt;minor_id = info-&gt;nr_minor;</div><div class='del'>-	fmt-&gt;alg_id = AES_CIPHER_ALG;</div><div class='del'>-	fmt-&gt;dkey_factor = master-&gt;m_dkey_size &gt;&gt; KEY_FACTOR_BITS;</div><div class='del'>-	fmt-&gt;block_bits = master-&gt;m_block_bits;</div><div class='del'>-	fmt-&gt;mode_id = master-&gt;m_mode;</div><div class='del'>-	/*</div><div class='del'>-	 * retrieve keys for the parts of metadata</div><div class='del'>-	 */</div><div class='del'>-	ret = get_emtd_file_key(info, master, mtd_key);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-	ret = get_nmtd_link_key(loc, master, nmtd_link_key);</div><div class='del'>-	if (ret)</div><div class='del'>-		return ret;</div><div class='del'>-</div><div class='del'>-	AES_set_encrypt_key(mtd_key, sizeof(mtd_key)*8, &amp;EMTD_KEY);</div><div class='del'>-</div><div class='del'>-	gctx = CRYPTO_gcm128_new(&amp;EMTD_KEY, (block128_f)AES_encrypt);</div><div class='del'>-</div><div class='del'>-	/* TBD: Check return values */</div><div class='del'>-</div><div class='del'>-	CRYPTO_gcm128_setiv(gctx, info-&gt;oid, sizeof(uuid_t));</div><div class='del'>-</div><div class='del'>-	ad = htole32(MTD_LOADER_V1);</div><div class='del'>-	ret = CRYPTO_gcm128_aad(gctx, (const unsigned char *)&amp;ad, sizeof(ad));</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_aad failed");</div><div class='del'>-		CRYPTO_gcm128_release(gctx);</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	ret = CRYPTO_gcm128_encrypt(gctx,</div><div class='del'>-				    get_EMTD_V1(fmt),</div><div class='del'>-				    get_EMTD_V1(fmt),</div><div class='del'>-				    SIZE_OF_EMTD_V1);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_encrypt failed");</div><div class='del'>-		CRYPTO_gcm128_release(gctx);</div><div class='del'>-		return ret;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * set MAC of encrypted part of metadata</div><div class='del'>-	 */</div><div class='del'>-	CRYPTO_gcm128_tag(gctx, get_EMTD_V1_MAC(fmt), SIZE_OF_EMTD_V1_MAC);</div><div class='del'>-	CRYPTO_gcm128_release(gctx);</div><div class='del'>-	/*</div><div class='del'>-	 * set the first MAC of non-encrypted part of metadata</div><div class='del'>-	 */</div><div class='del'>-	return create_link_mac_v1(fmt, 0, loc, info, master);</div><div class='add'>+    int32_t ret;</div><div class='add'>+    struct mtd_format_v1 *fmt;</div><div class='add'>+    unsigned char mtd_key[16];</div><div class='add'>+    AES_KEY EMTD_KEY;</div><div class='add'>+    unsigned char nmtd_link_key[16];</div><div class='add'>+    uint32_t ad;</div><div class='add'>+    GCM128_CONTEXT *gctx;</div><div class='add'>+</div><div class='add'>+    fmt = (struct mtd_format_v1 *)wire;</div><div class='add'>+</div><div class='add'>+    fmt-&gt;minor_id = info-&gt;nr_minor;</div><div class='add'>+    fmt-&gt;alg_id = AES_CIPHER_ALG;</div><div class='add'>+    fmt-&gt;dkey_factor = master-&gt;m_dkey_size &gt;&gt; KEY_FACTOR_BITS;</div><div class='add'>+    fmt-&gt;block_bits = master-&gt;m_block_bits;</div><div class='add'>+    fmt-&gt;mode_id = master-&gt;m_mode;</div><div class='add'>+    /*</div><div class='add'>+     * retrieve keys for the parts of metadata</div><div class='add'>+     */</div><div class='add'>+    ret = get_emtd_file_key(info, master, mtd_key);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+    ret = get_nmtd_link_key(loc, master, nmtd_link_key);</div><div class='add'>+    if (ret)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    AES_set_encrypt_key(mtd_key, sizeof(mtd_key) * 8, &amp;EMTD_KEY);</div><div class='add'>+</div><div class='add'>+    gctx = CRYPTO_gcm128_new(&amp;EMTD_KEY, (block128_f)AES_encrypt);</div><div class='add'>+</div><div class='add'>+    /* TBD: Check return values */</div><div class='add'>+</div><div class='add'>+    CRYPTO_gcm128_setiv(gctx, info-&gt;oid, sizeof(uuid_t));</div><div class='add'>+</div><div class='add'>+    ad = htole32(MTD_LOADER_V1);</div><div class='add'>+    ret = CRYPTO_gcm128_aad(gctx, (const unsigned char *)&amp;ad, sizeof(ad));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_aad failed");</div><div class='add'>+        CRYPTO_gcm128_release(gctx);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    ret = CRYPTO_gcm128_encrypt(gctx, get_EMTD_V1(fmt), get_EMTD_V1(fmt),</div><div class='add'>+                                SIZE_OF_EMTD_V1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_encrypt failed");</div><div class='add'>+        CRYPTO_gcm128_release(gctx);</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * set MAC of encrypted part of metadata</div><div class='add'>+     */</div><div class='add'>+    CRYPTO_gcm128_tag(gctx, get_EMTD_V1_MAC(fmt), SIZE_OF_EMTD_V1_MAC);</div><div class='add'>+    CRYPTO_gcm128_release(gctx);</div><div class='add'>+    /*</div><div class='add'>+     * set the first MAC of non-encrypted part of metadata</div><div class='add'>+     */</div><div class='add'>+    return create_link_mac_v1(fmt, 0, loc, info, master);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -253,83 +252,70 @@ static int32_t create_format_v1(unsigned char *wire,</div><div class='ctx'>  * Pack common and version-specific parts of file's metadata</div><div class='ctx'>  * Pre-conditions: @info contains valid object-id.</div><div class='ctx'>  */</div><div class='del'>-int32_t create_format(unsigned char *wire,</div><div class='del'>-		      loc_t *loc,</div><div class='del'>-		      struct crypt_inode_info *info,</div><div class='del'>-		      struct master_cipher_info *master)</div><div class='add'>+int32_t</div><div class='add'>+create_format(unsigned char *wire, loc_t *loc, struct crypt_inode_info *info,</div><div class='add'>+              struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	struct crypt_format *fmt = (struct crypt_format *)wire;</div><div class='add'>+    struct crypt_format *fmt = (struct crypt_format *)wire;</div><div class='ctx'> </div><div class='del'>-	fmt-&gt;loader_id = current_mtd_loader();</div><div class='add'>+    fmt-&gt;loader_id = current_mtd_loader();</div><div class='ctx'> </div><div class='del'>-	wire += sizeof(struct crypt_format);</div><div class='del'>-	return mtd_loaders[current_mtd_loader()].create_format(wire, loc,</div><div class='del'>-							       info, master);</div><div class='add'>+    wire += sizeof(struct crypt_format);</div><div class='add'>+    return mtd_loaders[current_mtd_loader()].create_format(wire, loc, info,</div><div class='add'>+                                                           master);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Append or overwrite per-link mac of @mac_idx index</div><div class='ctx'>  * in accordance with the new pathname</div><div class='ctx'>  */</div><div class='del'>-int32_t appov_link_mac_v1(unsigned char *new,</div><div class='del'>-			  unsigned char *old,</div><div class='del'>-			  uint32_t old_size,</div><div class='del'>-			  int32_t mac_idx,</div><div class='del'>-			  loc_t *loc,</div><div class='del'>-			  struct crypt_inode_info *info,</div><div class='del'>-			  struct master_cipher_info *master,</div><div class='del'>-			  crypt_local_t *local)</div><div class='add'>+int32_t</div><div class='add'>+appov_link_mac_v1(unsigned char *new, unsigned char *old, uint32_t old_size,</div><div class='add'>+                  int32_t mac_idx, loc_t *loc, struct crypt_inode_info *info,</div><div class='add'>+                  struct master_cipher_info *master, crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	memcpy(new, old, old_size);</div><div class='del'>-	return create_link_mac_v1((struct mtd_format_v1 *)new, mac_idx,</div><div class='del'>-				  loc, info, master);</div><div class='add'>+    memcpy(new, old, old_size);</div><div class='add'>+    return create_link_mac_v1((struct mtd_format_v1 *)new, mac_idx, loc, info,</div><div class='add'>+                              master);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Cut per-link mac of @mac_idx index</div><div class='ctx'>  */</div><div class='del'>-static int32_t cut_link_mac_v1(unsigned char *new,</div><div class='del'>-			       unsigned char *old,</div><div class='del'>-			       uint32_t old_size,</div><div class='del'>-			       int32_t mac_idx,</div><div class='del'>-			       loc_t *loc,</div><div class='del'>-			       struct crypt_inode_info *info,</div><div class='del'>-			       struct master_cipher_info *master,</div><div class='del'>-			       crypt_local_t *local)</div><div class='add'>+static int32_t</div><div class='add'>+cut_link_mac_v1(unsigned char *new, unsigned char *old, uint32_t old_size,</div><div class='add'>+                int32_t mac_idx, loc_t *loc, struct crypt_inode_info *info,</div><div class='add'>+                struct master_cipher_info *master, crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	memcpy(new,</div><div class='del'>-	       old,</div><div class='del'>-	       sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * (mac_idx - 1));</div><div class='del'>-</div><div class='del'>-	memcpy(new + sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * (mac_idx - 1),</div><div class='del'>-	       old + sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * mac_idx,</div><div class='del'>-	       old_size - (sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * mac_idx));</div><div class='del'>-	return 0;</div><div class='add'>+    memcpy(new, old,</div><div class='add'>+           sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * (mac_idx - 1));</div><div class='add'>+</div><div class='add'>+    memcpy(</div><div class='add'>+        new + sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE *(mac_idx - 1),</div><div class='add'>+        old + sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * mac_idx,</div><div class='add'>+        old_size - (sizeof(struct mtd_format_v1) + NMTD_8_MAC_SIZE * mac_idx));</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int32_t update_format_v1(unsigned char *new,</div><div class='del'>-			 unsigned char *old,</div><div class='del'>-				size_t old_len,</div><div class='del'>-				int32_t mac_idx, /* of old name */</div><div class='del'>-				mtd_op_t op,</div><div class='del'>-				loc_t *loc,</div><div class='del'>-				struct crypt_inode_info *info,</div><div class='del'>-				struct master_cipher_info *master,</div><div class='del'>-				crypt_local_t *local)</div><div class='add'>+int32_t</div><div class='add'>+update_format_v1(unsigned char *new, unsigned char *old, size_t old_len,</div><div class='add'>+                 int32_t mac_idx, /* of old name */</div><div class='add'>+                 mtd_op_t op, loc_t *loc, struct crypt_inode_info *info,</div><div class='add'>+                 struct master_cipher_info *master, crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	switch (op) {</div><div class='del'>-	case MTD_APPEND:</div><div class='del'>-		mac_idx = 1 + (old_len - sizeof(struct mtd_format_v1))/8;</div><div class='del'>-	case MTD_OVERWRITE:</div><div class='del'>-		return appov_link_mac_v1(new, old, old_len, mac_idx,</div><div class='del'>-					 loc, info, master, local);</div><div class='del'>-	case MTD_CUT:</div><div class='del'>-		return cut_link_mac_v1(new, old, old_len, mac_idx,</div><div class='del'>-				       loc, info, master, local);</div><div class='del'>-	default:</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Bad  mtd operation %d", op);</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='add'>+    switch (op) {</div><div class='add'>+        case MTD_APPEND:</div><div class='add'>+            mac_idx = 1 + (old_len - sizeof(struct mtd_format_v1)) / 8;</div><div class='add'>+        case MTD_OVERWRITE:</div><div class='add'>+            return appov_link_mac_v1(new, old, old_len, mac_idx, loc, info,</div><div class='add'>+                                     master, local);</div><div class='add'>+        case MTD_CUT:</div><div class='add'>+            return cut_link_mac_v1(new, old, old_len, mac_idx, loc, info,</div><div class='add'>+                                   master, local);</div><div class='add'>+        default:</div><div class='add'>+            gf_log("crypt", GF_LOG_ERROR, "Bad  mtd operation %d", op);</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -340,29 +326,22 @@ int32_t update_format_v1(unsigned char *new,</div><div class='ctx'>  * -&gt;rename()</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='del'>-int32_t update_format(unsigned char *new,</div><div class='del'>-		      unsigned char *old,</div><div class='del'>-		      size_t old_len,</div><div class='del'>-		      int32_t mac_idx,</div><div class='del'>-		      mtd_op_t op,</div><div class='del'>-		      loc_t *loc,</div><div class='del'>-		      struct crypt_inode_info *info,</div><div class='del'>-		      struct master_cipher_info *master,</div><div class='del'>-		      crypt_local_t *local)</div><div class='add'>+int32_t</div><div class='add'>+update_format(unsigned char *new, unsigned char *old, size_t old_len,</div><div class='add'>+              int32_t mac_idx, mtd_op_t op, loc_t *loc,</div><div class='add'>+              struct crypt_inode_info *info, struct master_cipher_info *master,</div><div class='add'>+              crypt_local_t *local)</div><div class='ctx'> {</div><div class='del'>-	if (!new)</div><div class='del'>-		return 0;</div><div class='del'>-	memcpy(new, old, sizeof(struct crypt_format));</div><div class='del'>-</div><div class='del'>-	old += sizeof(struct crypt_format);</div><div class='del'>-	new += sizeof(struct crypt_format);</div><div class='del'>-	old_len -= sizeof(struct crypt_format);</div><div class='del'>-</div><div class='del'>-	return mtd_loaders[current_mtd_loader()].update_format(new, old,</div><div class='del'>-							       old_len,</div><div class='del'>-							       mac_idx, op,</div><div class='del'>-							       loc, info,</div><div class='del'>-							       master, local);</div><div class='add'>+    if (!new)</div><div class='add'>+        return 0;</div><div class='add'>+    memcpy(new, old, sizeof(struct crypt_format));</div><div class='add'>+</div><div class='add'>+    old += sizeof(struct crypt_format);</div><div class='add'>+    new += sizeof(struct crypt_format);</div><div class='add'>+    old_len -= sizeof(struct crypt_format);</div><div class='add'>+</div><div class='add'>+    return mtd_loaders[current_mtd_loader()].update_format(</div><div class='add'>+        new, old, old_len, mac_idx, op, loc, info, master, local);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -370,27 +349,26 @@ int32_t update_format(unsigned char *new,</div><div class='ctx'>  * Return &lt; 0 on errors;</div><div class='ctx'>  * Return number of object-id MACs (&gt;= 1) on success</div><div class='ctx'>  */</div><div class='del'>-int32_t check_format_v1(uint32_t len, unsigned char *wire)</div><div class='add'>+int32_t</div><div class='add'>+check_format_v1(uint32_t len, unsigned char *wire)</div><div class='ctx'> {</div><div class='del'>-	uint32_t nr_links;</div><div class='del'>-</div><div class='del'>-	if (len &lt; sizeof(struct mtd_format_v1)) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "v1-loader: bad metadata size %d", len);</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	len -= sizeof(struct mtd_format_v1);</div><div class='del'>-	if (len % sizeof(nmtd_8_mac_t)) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "v1-loader: bad metadata format");</div><div class='del'>-		goto error;</div><div class='del'>-	}</div><div class='del'>-	nr_links = 1 + len / sizeof(nmtd_8_mac_t);</div><div class='del'>-	if (nr_links &gt; _POSIX_LINK_MAX)</div><div class='del'>-		goto error;</div><div class='del'>-	return nr_links;</div><div class='del'>- error:</div><div class='del'>-	return EIO;</div><div class='add'>+    uint32_t nr_links;</div><div class='add'>+</div><div class='add'>+    if (len &lt; sizeof(struct mtd_format_v1)) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "v1-loader: bad metadata size %d", len);</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    len -= sizeof(struct mtd_format_v1);</div><div class='add'>+    if (len % sizeof(nmtd_8_mac_t)) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "v1-loader: bad metadata format");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+    nr_links = 1 + len / sizeof(nmtd_8_mac_t);</div><div class='add'>+    if (nr_links &gt; _POSIX_LINK_MAX)</div><div class='add'>+        goto error;</div><div class='add'>+    return nr_links;</div><div class='add'>+error:</div><div class='add'>+    return EIO;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -401,24 +379,24 @@ int32_t check_format_v1(uint32_t len, unsigned char *wire)</div><div class='ctx'>  *  0 on failed verification;</div><div class='ctx'>  *  1 on successful verification</div><div class='ctx'>  */</div><div class='del'>-static int32_t verify_link_mac_v1(struct mtd_format_v1 *fmt,</div><div class='del'>-				  uint32_t idx /* index of the mac to verify */,</div><div class='del'>-				  loc_t *loc,</div><div class='del'>-				  struct crypt_inode_info *info,</div><div class='del'>-				  struct master_cipher_info *master)</div><div class='add'>+static int32_t</div><div class='add'>+verify_link_mac_v1(struct mtd_format_v1 *fmt,</div><div class='add'>+                   uint32_t idx /* index of the mac to verify */, loc_t *loc,</div><div class='add'>+                   struct crypt_inode_info *info,</div><div class='add'>+                   struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	unsigned char *mac;</div><div class='del'>-	unsigned char cmac[16];</div><div class='del'>-</div><div class='del'>-	mac = get_NMTD_V1_MAC(fmt) + idx * SIZE_OF_NMTD_V1_MAC;</div><div class='del'>-</div><div class='del'>-	ret = calc_link_mac_v1(fmt, loc, cmac, info, master);</div><div class='del'>-	if (ret)</div><div class='del'>-		return -1;</div><div class='del'>-	if (memcmp(cmac, mac, SIZE_OF_NMTD_V1_MAC))</div><div class='del'>-		return 0;</div><div class='del'>-	return 1;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    unsigned char *mac;</div><div class='add'>+    unsigned char cmac[16];</div><div class='add'>+</div><div class='add'>+    mac = get_NMTD_V1_MAC(fmt) + idx * SIZE_OF_NMTD_V1_MAC;</div><div class='add'>+</div><div class='add'>+    ret = calc_link_mac_v1(fmt, loc, cmac, info, master);</div><div class='add'>+    if (ret)</div><div class='add'>+        return -1;</div><div class='add'>+    if (memcmp(cmac, mac, SIZE_OF_NMTD_V1_MAC))</div><div class='add'>+        return 0;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -427,133 +405,127 @@ static int32_t verify_link_mac_v1(struct mtd_format_v1 *fmt,</div><div class='ctx'>  * return index of the MAC, if it was found;</div><div class='ctx'>  * return &lt; 0 on errors, or if the MAC wasn't found</div><div class='ctx'>  */</div><div class='del'>-static int32_t lookup_link_mac_v1(struct mtd_format_v1 *fmt,</div><div class='del'>-				  uint32_t nr_macs,</div><div class='del'>-				  loc_t *loc,</div><div class='del'>-				  struct crypt_inode_info *info,</div><div class='del'>-				  struct master_cipher_info *master)</div><div class='add'>+static int32_t</div><div class='add'>+lookup_link_mac_v1(struct mtd_format_v1 *fmt, uint32_t nr_macs, loc_t *loc,</div><div class='add'>+                   struct crypt_inode_info *info,</div><div class='add'>+                   struct master_cipher_info *master)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	uint32_t idx;</div><div class='del'>-</div><div class='del'>-	for (idx = 0; idx &lt; nr_macs; idx++) {</div><div class='del'>-		ret = verify_link_mac_v1(fmt, idx, loc, info, master);</div><div class='del'>-		if (ret &lt; 0)</div><div class='del'>-			return ret;</div><div class='del'>-		if (ret &gt; 0)</div><div class='del'>-			return idx;</div><div class='del'>-	}</div><div class='del'>-	return -ENOENT;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    uint32_t idx;</div><div class='add'>+</div><div class='add'>+    for (idx = 0; idx &lt; nr_macs; idx++) {</div><div class='add'>+        ret = verify_link_mac_v1(fmt, idx, loc, info, master);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            return ret;</div><div class='add'>+        if (ret &gt; 0)</div><div class='add'>+            return idx;</div><div class='add'>+    }</div><div class='add'>+    return -ENOENT;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * Extract version-specific part of metadata</div><div class='ctx'>  */</div><div class='del'>-static int32_t open_format_v1(unsigned char *wire,</div><div class='del'>-			      int32_t len,</div><div class='del'>-			      loc_t *loc,</div><div class='del'>-			      struct crypt_inode_info *info,</div><div class='del'>-			      struct master_cipher_info *master,</div><div class='del'>-			      crypt_local_t *local,</div><div class='del'>-			      gf_boolean_t load_info)</div><div class='add'>+static int32_t</div><div class='add'>+open_format_v1(unsigned char *wire, int32_t len, loc_t *loc,</div><div class='add'>+               struct crypt_inode_info *info, struct master_cipher_info *master,</div><div class='add'>+               crypt_local_t *local, gf_boolean_t load_info)</div><div class='ctx'> {</div><div class='del'>-	int32_t ret;</div><div class='del'>-	int32_t num_nmtd_macs;</div><div class='del'>-	struct mtd_format_v1 *fmt;</div><div class='del'>-	unsigned char mtd_key[16];</div><div class='del'>-	AES_KEY EMTD_KEY;</div><div class='del'>-	GCM128_CONTEXT *gctx;</div><div class='del'>-	uint32_t ad;</div><div class='del'>-	emtd_8_mac_t gmac;</div><div class='del'>-	struct object_cipher_info *object;</div><div class='del'>-</div><div class='del'>-	num_nmtd_macs = check_format_v1(len, wire);</div><div class='del'>-	if (num_nmtd_macs &lt;= 0)</div><div class='del'>-		return EIO;</div><div class='del'>-</div><div class='del'>-	ret = lookup_link_mac_v1((struct mtd_format_v1 *)wire,</div><div class='del'>-				 num_nmtd_macs, loc, info, master);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "NMTD verification failed");</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	local-&gt;mac_idx = ret;</div><div class='del'>-	if (load_info == _gf_false)</div><div class='del'>-		/* the case of partial open */</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	fmt = GF_MALLOC(len, gf_crypt_mt_mtd);</div><div class='del'>-	if (!fmt)</div><div class='del'>-		return ENOMEM;</div><div class='del'>-	memcpy(fmt, wire, len);</div><div class='del'>-</div><div class='del'>-	object = &amp;info-&gt;cinfo;</div><div class='del'>-</div><div class='del'>-	ret = get_emtd_file_key(info, master, mtd_key);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Can not retrieve metadata key");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * decrypt encrypted meta-data</div><div class='del'>-	 */</div><div class='del'>-	ret = AES_set_encrypt_key(mtd_key, sizeof(mtd_key)*8, &amp;EMTD_KEY);</div><div class='del'>-	if (ret &lt; 0) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Can not set encrypt key");</div><div class='del'>-		ret = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-	gctx = CRYPTO_gcm128_new(&amp;EMTD_KEY, (block128_f)AES_encrypt);</div><div class='del'>-	if (!gctx) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Can not alloc gcm context");</div><div class='del'>-		ret = ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-	CRYPTO_gcm128_setiv(gctx, info-&gt;oid, sizeof(uuid_t));</div><div class='del'>-</div><div class='del'>-	ad = htole32(MTD_LOADER_V1);</div><div class='del'>-	ret = CRYPTO_gcm128_aad(gctx, (const unsigned char *)&amp;ad, sizeof(ad));</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_aad failed");</div><div class='del'>-		CRYPTO_gcm128_release(gctx);</div><div class='del'>-		ret = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-	ret = CRYPTO_gcm128_decrypt(gctx,</div><div class='del'>-				    get_EMTD_V1(fmt),</div><div class='del'>-				    get_EMTD_V1(fmt),</div><div class='del'>-				    SIZE_OF_EMTD_V1);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_decrypt failed");</div><div class='del'>-		CRYPTO_gcm128_release(gctx);</div><div class='del'>-		ret = EIO;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * verify metadata</div><div class='del'>-	 */</div><div class='del'>-	CRYPTO_gcm128_tag(gctx, gmac, sizeof(gmac));</div><div class='del'>-	CRYPTO_gcm128_release(gctx);</div><div class='del'>-	if (memcmp(gmac, get_EMTD_V1_MAC(fmt), SIZE_OF_EMTD_V1_MAC)) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "EMTD verification failed");</div><div class='del'>-		ret = EINVAL;</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-	/*</div><div class='del'>-	 * load verified metadata to the private part of inode</div><div class='del'>-	 */</div><div class='del'>-	info-&gt;nr_minor = fmt-&gt;minor_id;</div><div class='del'>-</div><div class='del'>-	object-&gt;o_alg = fmt-&gt;alg_id;</div><div class='del'>-	object-&gt;o_dkey_size = fmt-&gt;dkey_factor &lt;&lt; KEY_FACTOR_BITS;</div><div class='del'>-	object-&gt;o_block_bits = fmt-&gt;block_bits;</div><div class='del'>-	object-&gt;o_mode = fmt-&gt;mode_id;</div><div class='del'>-</div><div class='del'>-	ret = check_file_metadata(info);</div><div class='del'>- out:</div><div class='del'>-	GF_FREE(fmt);</div><div class='del'>-	return ret;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    int32_t num_nmtd_macs;</div><div class='add'>+    struct mtd_format_v1 *fmt;</div><div class='add'>+    unsigned char mtd_key[16];</div><div class='add'>+    AES_KEY EMTD_KEY;</div><div class='add'>+    GCM128_CONTEXT *gctx;</div><div class='add'>+    uint32_t ad;</div><div class='add'>+    emtd_8_mac_t gmac;</div><div class='add'>+    struct object_cipher_info *object;</div><div class='add'>+</div><div class='add'>+    num_nmtd_macs = check_format_v1(len, wire);</div><div class='add'>+    if (num_nmtd_macs &lt;= 0)</div><div class='add'>+        return EIO;</div><div class='add'>+</div><div class='add'>+    ret = lookup_link_mac_v1((struct mtd_format_v1 *)wire, num_nmtd_macs, loc,</div><div class='add'>+                             info, master);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "NMTD verification failed");</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;mac_idx = ret;</div><div class='add'>+    if (load_info == _gf_false)</div><div class='add'>+        /* the case of partial open */</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    fmt = GF_MALLOC(len, gf_crypt_mt_mtd);</div><div class='add'>+    if (!fmt)</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    memcpy(fmt, wire, len);</div><div class='add'>+</div><div class='add'>+    object = &amp;info-&gt;cinfo;</div><div class='add'>+</div><div class='add'>+    ret = get_emtd_file_key(info, master, mtd_key);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Can not retrieve metadata key");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * decrypt encrypted meta-data</div><div class='add'>+     */</div><div class='add'>+    ret = AES_set_encrypt_key(mtd_key, sizeof(mtd_key) * 8, &amp;EMTD_KEY);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Can not set encrypt key");</div><div class='add'>+        ret = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gctx = CRYPTO_gcm128_new(&amp;EMTD_KEY, (block128_f)AES_encrypt);</div><div class='add'>+    if (!gctx) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Can not alloc gcm context");</div><div class='add'>+        ret = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    CRYPTO_gcm128_setiv(gctx, info-&gt;oid, sizeof(uuid_t));</div><div class='add'>+</div><div class='add'>+    ad = htole32(MTD_LOADER_V1);</div><div class='add'>+    ret = CRYPTO_gcm128_aad(gctx, (const unsigned char *)&amp;ad, sizeof(ad));</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_aad failed");</div><div class='add'>+        CRYPTO_gcm128_release(gctx);</div><div class='add'>+        ret = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = CRYPTO_gcm128_decrypt(gctx, get_EMTD_V1(fmt), get_EMTD_V1(fmt),</div><div class='add'>+                                SIZE_OF_EMTD_V1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, " CRYPTO_gcm128_decrypt failed");</div><div class='add'>+        CRYPTO_gcm128_release(gctx);</div><div class='add'>+        ret = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * verify metadata</div><div class='add'>+     */</div><div class='add'>+    CRYPTO_gcm128_tag(gctx, gmac, sizeof(gmac));</div><div class='add'>+    CRYPTO_gcm128_release(gctx);</div><div class='add'>+    if (memcmp(gmac, get_EMTD_V1_MAC(fmt), SIZE_OF_EMTD_V1_MAC)) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "EMTD verification failed");</div><div class='add'>+        ret = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*</div><div class='add'>+     * load verified metadata to the private part of inode</div><div class='add'>+     */</div><div class='add'>+    info-&gt;nr_minor = fmt-&gt;minor_id;</div><div class='add'>+</div><div class='add'>+    object-&gt;o_alg = fmt-&gt;alg_id;</div><div class='add'>+    object-&gt;o_dkey_size = fmt-&gt;dkey_factor &lt;&lt; KEY_FACTOR_BITS;</div><div class='add'>+    object-&gt;o_block_bits = fmt-&gt;block_bits;</div><div class='add'>+    object-&gt;o_mode = fmt-&gt;mode_id;</div><div class='add'>+</div><div class='add'>+    ret = check_file_metadata(info);</div><div class='add'>+out:</div><div class='add'>+    GF_FREE(fmt);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -561,46 +533,35 @@ static int32_t open_format_v1(unsigned char *wire,</div><div class='ctx'>  * extract crypt-specific attribute and populate @info</div><div class='ctx'>  * with them (optional)</div><div class='ctx'>  */</div><div class='del'>-int32_t open_format(unsigned char *str,</div><div class='del'>-		    int32_t len,</div><div class='del'>-		    loc_t *loc,</div><div class='del'>-		    struct crypt_inode_info *info,</div><div class='del'>-		    struct master_cipher_info *master,</div><div class='del'>-		    crypt_local_t *local,</div><div class='del'>-		    gf_boolean_t load_info)</div><div class='add'>+int32_t</div><div class='add'>+open_format(unsigned char *str, int32_t len, loc_t *loc,</div><div class='add'>+            struct crypt_inode_info *info, struct master_cipher_info *master,</div><div class='add'>+            crypt_local_t *local, gf_boolean_t load_info)</div><div class='ctx'> {</div><div class='del'>-	struct crypt_format *fmt;</div><div class='del'>-	if (len &lt; sizeof(*fmt)) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR, "Bad core format");</div><div class='del'>-		return EIO;</div><div class='del'>-	}</div><div class='del'>-	fmt = (struct crypt_format *)str;</div><div class='del'>-</div><div class='del'>-	if (fmt-&gt;loader_id &gt;= LAST_MTD_LOADER) {</div><div class='del'>-		gf_log("crypt", GF_LOG_ERROR,</div><div class='del'>-		       "Unsupported loader id %d", fmt-&gt;loader_id);</div><div class='del'>-		return EINVAL;</div><div class='del'>-	}</div><div class='del'>-	str += sizeof(*fmt);</div><div class='del'>-	len -= sizeof(*fmt);</div><div class='del'>-</div><div class='del'>-	return mtd_loaders[fmt-&gt;loader_id].open_format(str,</div><div class='del'>-						       len,</div><div class='del'>-						       loc,</div><div class='del'>-						       info,</div><div class='del'>-						       master,</div><div class='del'>-						       local,</div><div class='del'>-						       load_info);</div><div class='add'>+    struct crypt_format *fmt;</div><div class='add'>+    if (len &lt; sizeof(*fmt)) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Bad core format");</div><div class='add'>+        return EIO;</div><div class='add'>+    }</div><div class='add'>+    fmt = (struct crypt_format *)str;</div><div class='add'>+</div><div class='add'>+    if (fmt-&gt;loader_id &gt;= LAST_MTD_LOADER) {</div><div class='add'>+        gf_log("crypt", GF_LOG_ERROR, "Unsupported loader id %d",</div><div class='add'>+               fmt-&gt;loader_id);</div><div class='add'>+        return EINVAL;</div><div class='add'>+    }</div><div class='add'>+    str += sizeof(*fmt);</div><div class='add'>+    len -= sizeof(*fmt);</div><div class='add'>+</div><div class='add'>+    return mtd_loaders[fmt-&gt;loader_id].open_format(str, len, loc, info, master,</div><div class='add'>+                                                   local, load_info);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct crypt_mtd_loader mtd_loaders [LAST_MTD_LOADER] = {</div><div class='del'>-	[MTD_LOADER_V1] =</div><div class='del'>-	{.format_size = format_size_v1,</div><div class='del'>-	 .create_format = create_format_v1,</div><div class='del'>-	 .open_format = open_format_v1,</div><div class='del'>-	 .update_format = update_format_v1</div><div class='del'>-	}</div><div class='del'>-};</div><div class='add'>+struct crypt_mtd_loader mtd_loaders[LAST_MTD_LOADER] = {</div><div class='add'>+    [MTD_LOADER_V1] = {.format_size = format_size_v1,</div><div class='add'>+                       .create_format = create_format_v1,</div><div class='add'>+                       .open_format = open_format_v1,</div><div class='add'>+                       .update_format = update_format_v1}};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>   Local variables:</div><div class='head'>diff --git a/xlators/encryption/rot-13/src/rot-13.c b/xlators/encryption/rot-13/src/rot-13.c<br/>index 6ec1b47c87b..acb918e8854 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/encryption/rot-13/src/rot-13.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/encryption/rot-13/src/rot-13.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/encryption/rot-13/src/rot-13.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/encryption/rot-13/src/rot-13.c</a></div><div class='hunk'>@@ -24,173 +24,143 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rot13 (char *buf, int len)</div><div class='add'>+rot13(char *buf, int len)</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	for (i = 0; i &lt; len; i++) {</div><div class='del'>-		if (buf[i] &gt;= 'a' &amp;&amp; buf[i] &lt;= 'z')</div><div class='del'>-			buf[i] = 'a' + ((buf[i] - 'a' + 13) % 26);</div><div class='del'>-		else if (buf[i] &gt;= 'A' &amp;&amp; buf[i] &lt;= 'Z')</div><div class='del'>-			buf[i] = 'A' + ((buf[i] - 'A' + 13) % 26);</div><div class='del'>-	}</div><div class='add'>+    int i;</div><div class='add'>+    for (i = 0; i &lt; len; i++) {</div><div class='add'>+        if (buf[i] &gt;= 'a' &amp;&amp; buf[i] &lt;= 'z')</div><div class='add'>+            buf[i] = 'a' + ((buf[i] - 'a' + 13) % 26);</div><div class='add'>+        else if (buf[i] &gt;= 'A' &amp;&amp; buf[i] &lt;= 'Z')</div><div class='add'>+            buf[i] = 'A' + ((buf[i] - 'A' + 13) % 26);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rot13_iovec (struct iovec *vector, int count)</div><div class='add'>+rot13_iovec(struct iovec *vector, int count)</div><div class='ctx'> {</div><div class='del'>-	int i;</div><div class='del'>-	for (i = 0; i &lt; count; i++) {</div><div class='del'>-		rot13 (vector[i].iov_base, vector[i].iov_len);</div><div class='del'>-	}</div><div class='add'>+    int i;</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        rot13(vector[i].iov_base, vector[i].iov_len);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rot13_readv_cbk (call_frame_t *frame,</div><div class='del'>-                 void *cookie,</div><div class='del'>-                 xlator_t *this,</div><div class='del'>-                 int32_t op_ret,</div><div class='del'>-                 int32_t op_errno,</div><div class='del'>-                 struct iovec *vector,</div><div class='del'>-                 int32_t count,</div><div class='del'>-		 struct iatt *stbuf,</div><div class='del'>-                 struct iobref *iobref, dict_t *xdata)</div><div class='add'>+rot13_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	rot_13_private_t *priv = (rot_13_private_t *)this-&gt;private;</div><div class='add'>+    rot_13_private_t *priv = (rot_13_private_t *)this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	if (priv-&gt;decrypt_read)</div><div class='del'>-		rot13_iovec (vector, count);</div><div class='add'>+    if (priv-&gt;decrypt_read)</div><div class='add'>+        rot13_iovec(vector, count);</div><div class='ctx'> </div><div class='del'>-	STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno, vector, count,</div><div class='del'>-                             stbuf, iobref, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                        iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rot13_readv (call_frame_t *frame,</div><div class='del'>-             xlator_t *this,</div><div class='del'>-             fd_t *fd,</div><div class='del'>-             size_t size,</div><div class='del'>-             off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+rot13_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	STACK_WIND (frame,</div><div class='del'>-		    rot13_readv_cbk,</div><div class='del'>-		    FIRST_CHILD (this),</div><div class='del'>-		    FIRST_CHILD (this)-&gt;fops-&gt;readv,</div><div class='del'>-		    fd, size, offset, flags, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    STACK_WIND(frame, rot13_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rot13_writev_cbk (call_frame_t *frame,</div><div class='del'>-                  void *cookie,</div><div class='del'>-                  xlator_t *this,</div><div class='del'>-                  int32_t op_ret,</div><div class='del'>-                  int32_t op_errno,</div><div class='del'>-                  struct iatt *prebuf,</div><div class='del'>-		  struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+rot13_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-rot13_writev (call_frame_t *frame,</div><div class='del'>-              xlator_t *this,</div><div class='del'>-              fd_t *fd,</div><div class='del'>-              struct iovec *vector,</div><div class='del'>-              int32_t count,</div><div class='del'>-              off_t offset, uint32_t flags,</div><div class='del'>-              struct iobref *iobref, dict_t *xdata)</div><div class='add'>+rot13_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+             struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+             struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-	rot_13_private_t *priv = (rot_13_private_t *)this-&gt;private;</div><div class='del'>-	if (priv-&gt;encrypt_write)</div><div class='del'>-		rot13_iovec (vector, count);</div><div class='del'>-</div><div class='del'>-	STACK_WIND (frame,</div><div class='del'>-		    rot13_writev_cbk,</div><div class='del'>-		    FIRST_CHILD (this),</div><div class='del'>-		    FIRST_CHILD (this)-&gt;fops-&gt;writev,</div><div class='del'>-		    fd, vector, count, offset, flags,</div><div class='del'>-                    iobref, xdata);</div><div class='del'>-	return 0;</div><div class='add'>+    rot_13_private_t *priv = (rot_13_private_t *)this-&gt;private;</div><div class='add'>+    if (priv-&gt;encrypt_write)</div><div class='add'>+        rot13_iovec(vector, count);</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, rot13_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	data_t *data = NULL;</div><div class='del'>-	rot_13_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-		gf_log ("rot13", GF_LOG_ERROR,</div><div class='del'>-			"FATAL: rot13 should have exactly one child");</div><div class='del'>-		return -1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!this-&gt;parents) {</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-			"dangling volume. check volfile ");</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	priv = GF_CALLOC (sizeof (rot_13_private_t), 1, 0);</div><div class='del'>-        if (!priv)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-	priv-&gt;decrypt_read = 1;</div><div class='del'>-	priv-&gt;encrypt_write = 1;</div><div class='del'>-</div><div class='del'>-	data = dict_get (this-&gt;options, "encrypt-write");</div><div class='del'>-	if (data) {</div><div class='del'>-		if (gf_string2boolean (data-&gt;data, &amp;priv-&gt;encrypt_write) == -1) {</div><div class='del'>-			gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-				"encrypt-write takes only boolean options");</div><div class='del'>-			GF_FREE (priv);</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	data = dict_get (this-&gt;options, "decrypt-read");</div><div class='del'>-	if (data) {</div><div class='del'>-		if (gf_string2boolean (data-&gt;data, &amp;priv-&gt;decrypt_read) == -1) {</div><div class='del'>-			gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-				"decrypt-read takes only boolean options");</div><div class='del'>-			GF_FREE (priv);</div><div class='del'>-			return -1;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	this-&gt;private = priv;</div><div class='del'>-	gf_log ("rot13", GF_LOG_DEBUG, "rot13 xlator loaded");</div><div class='del'>-	return 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    rot_13_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log("rot13", GF_LOG_ERROR,</div><div class='add'>+               "FATAL: rot13 should have exactly one child");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(sizeof(rot_13_private_t), 1, 0);</div><div class='add'>+    if (!priv)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    priv-&gt;decrypt_read = 1;</div><div class='add'>+    priv-&gt;encrypt_write = 1;</div><div class='add'>+</div><div class='add'>+    data = dict_get(this-&gt;options, "encrypt-write");</div><div class='add'>+    if (data) {</div><div class='add'>+        if (gf_string2boolean(data-&gt;data, &amp;priv-&gt;encrypt_write) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "encrypt-write takes only boolean options");</div><div class='add'>+            GF_FREE(priv);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    data = dict_get(this-&gt;options, "decrypt-read");</div><div class='add'>+    if (data) {</div><div class='add'>+        if (gf_string2boolean(data-&gt;data, &amp;priv-&gt;decrypt_read) == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "decrypt-read takes only boolean options");</div><div class='add'>+            GF_FREE(priv);</div><div class='add'>+            return -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    gf_log("rot13", GF_LOG_DEBUG, "rot13 xlator loaded");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	rot_13_private_t *priv = this-&gt;private;</div><div class='add'>+    rot_13_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv)</div><div class='del'>-                return;</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-	GF_FREE (priv);</div><div class='add'>+    if (!priv)</div><div class='add'>+        return;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-	.readv        = rot13_readv,</div><div class='del'>-	.writev       = rot13_writev</div><div class='del'>-};</div><div class='add'>+struct xlator_fops fops = {.readv = rot13_readv, .writev = rot13_writev};</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks;</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-	{ .key  = {"encrypt-write"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_BOOL</div><div class='del'>-	},</div><div class='del'>-	{ .key  = {"decrypt-read"},</div><div class='del'>-	  .type = GF_OPTION_TYPE_BOOL</div><div class='del'>-	},</div><div class='del'>-	{ .key  = {NULL} },</div><div class='add'>+    {.key = {"encrypt-write"}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {"decrypt-read"}, .type = GF_OPTION_TYPE_BOOL},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c b/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c<br/>index bd1d446e2b5..556385724a4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/dht2/dht2-client/src/dht2-client-main.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/dht2/dht2-client/src/dht2-client-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/dht2/dht2-client/src/dht2-client-main.c</a></div><div class='hunk'>@@ -20,34 +20,33 @@</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht2_client_init (xlator_t *this)</div><div class='add'>+dht2_client_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Missing children in volume graph, this (%s) is"</div><div class='del'>-                        " not a leaf translator", this-&gt;name);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Missing children in volume graph, this (%s) is"</div><div class='add'>+               " not a leaf translator",</div><div class='add'>+               this-&gt;name);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht2_client_fini (xlator_t *this)</div><div class='add'>+dht2_client_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = dht2_client_init,</div><div class='del'>-        .fini           = dht2_client_fini,</div><div class='add'>+    .init = dht2_client_init,</div><div class='add'>+    .fini = dht2_client_fini,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-};</div><div class='add'>+struct xlator_fops fops = {};</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='hunk'>@@ -55,5 +54,5 @@ struct xlator_dumpops dumpops = {</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c b/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c<br/>index 1f232cc3430..f051a44e99f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/dht2/dht2-server/src/dht2-server-main.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/dht2/dht2-server/src/dht2-server-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/dht2/dht2-server/src/dht2-server-main.c</a></div><div class='hunk'>@@ -20,34 +20,33 @@</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-dht2_server_init (xlator_t *this)</div><div class='add'>+dht2_server_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Missing children in volume graph, this (%s) is"</div><div class='del'>-                        " not a leaf translator", this-&gt;name);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Missing children in volume graph, this (%s) is"</div><div class='add'>+               " not a leaf translator",</div><div class='add'>+               this-&gt;name);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dht2_server_fini (xlator_t *this)</div><div class='add'>+dht2_server_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = dht2_server_init,</div><div class='del'>-        .fini           = dht2_server_fini,</div><div class='add'>+    .init = dht2_server_init,</div><div class='add'>+    .fini = dht2_server_fini,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-};</div><div class='add'>+struct xlator_fops fops = {};</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='hunk'>@@ -55,5 +54,5 @@ struct xlator_dumpops dumpops = {</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/fdl/src/dump-tmpl.c b/xlators/experimental/fdl/src/dump-tmpl.c<br/>index 32b0fef6af3..d19f6589e66 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/dump-tmpl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/fdl/src/dump-tmpl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/dump-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/dump-tmpl.c</a></div><div class='hunk'>@@ -14,150 +14,140 @@</div><div class='ctx'>  * Returns 0 if the string is ASCII printable *</div><div class='ctx'>  * and -1 if it's not ASCII printable         *</div><div class='ctx'>  */</div><div class='del'>-int str_isprint (char *s)</div><div class='add'>+int</div><div class='add'>+str_isprint(char *s)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!s)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!s)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        while (s[0] != '\0') {</div><div class='del'>-                if (!isprint(s[0]))</div><div class='del'>-                        goto out;</div><div class='del'>-                else</div><div class='del'>-                        s++;</div><div class='del'>-        }</div><div class='add'>+    while (s[0] != '\0') {</div><div class='add'>+        if (!isprint(s[0]))</div><div class='add'>+            goto out;</div><div class='add'>+        else</div><div class='add'>+            s++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment DICT</div><div class='del'>-        {</div><div class='del'>-                int key_len, data_len;</div><div class='del'>-                char *key_ptr;</div><div class='del'>-                char *key_val;</div><div class='del'>-                printf ("@ARGNAME@ = dict {\n");</div><div class='del'>-                for (;;) {</div><div class='del'>-                        key_len = *((int *)new_meta);</div><div class='del'>-                        new_meta += sizeof(int);</div><div class='del'>-                        if (!key_len) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        key_ptr = new_meta;</div><div class='del'>-                        new_meta += key_len;</div><div class='del'>-                        data_len = *((int *)new_meta);</div><div class='del'>-                        key_val = new_meta + sizeof(int);</div><div class='del'>-                        new_meta += sizeof(int) + data_len;</div><div class='del'>-                        if (str_isprint(key_val))</div><div class='del'>-                                printf (" %s = &lt;%d bytes&gt;\n",</div><div class='del'>-                                        key_ptr, data_len);</div><div class='del'>-                        else</div><div class='del'>-                                printf (" %s = %s &lt;%d bytes&gt;\n",</div><div class='del'>-                                        key_ptr, key_val, data_len);</div><div class='del'>-                }</div><div class='del'>-                printf ("}\n");</div><div class='add'>+{</div><div class='add'>+    int key_len, data_len;</div><div class='add'>+    char *key_ptr;</div><div class='add'>+    char *key_val;</div><div class='add'>+    printf("@ARGNAME@ = dict {\n");</div><div class='add'>+    for (;;) {</div><div class='add'>+        key_len = *((int *)new_meta);</div><div class='add'>+        new_meta += sizeof(int);</div><div class='add'>+        if (!key_len) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        key_ptr = new_meta;</div><div class='add'>+        new_meta += key_len;</div><div class='add'>+        data_len = *((int *)new_meta);</div><div class='add'>+        key_val = new_meta + sizeof(int);</div><div class='add'>+        new_meta += sizeof(int) + data_len;</div><div class='add'>+        if (str_isprint(key_val))</div><div class='add'>+            printf(" %s = &lt;%d bytes&gt;\n", key_ptr, data_len);</div><div class='add'>+        else</div><div class='add'>+            printf(" %s = %s &lt;%d bytes&gt;\n", key_ptr, key_val, data_len);</div><div class='add'>+    }</div><div class='add'>+    printf("}\n");</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment DOUBLE</div><div class='del'>-        printf ("@ARGNAME@ = @FORMAT@\n", *((uint64_t *)new_meta),</div><div class='del'>-                *((uint64_t *)new_meta));</div><div class='del'>-        new_meta += sizeof(uint64_t);</div><div class='add'>+printf("@ARGNAME@ = @FORMAT@\n", *((uint64_t *)new_meta),</div><div class='add'>+       *((uint64_t *)new_meta));</div><div class='add'>+new_meta += sizeof(uint64_t);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment GFID</div><div class='del'>-        printf ("@ARGNAME@ = &lt;gfid %s&gt;\n", uuid_utoa(*((uuid_t *)new_meta)));</div><div class='del'>-        new_meta += 16;</div><div class='add'>+printf("@ARGNAME@ = &lt;gfid %s&gt;\n", uuid_utoa(*((uuid_t *)new_meta)));</div><div class='add'>+new_meta += 16;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment INTEGER</div><div class='del'>-        printf ("@ARGNAME@ = @FORMAT@\n", *((uint32_t *)new_meta),</div><div class='del'>-                *((uint32_t *)new_meta));</div><div class='del'>-        new_meta += sizeof(uint32_t);</div><div class='add'>+printf("@ARGNAME@ = @FORMAT@\n", *((uint32_t *)new_meta),</div><div class='add'>+       *((uint32_t *)new_meta));</div><div class='add'>+new_meta += sizeof(uint32_t);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment LOC</div><div class='del'>-        printf ("@ARGNAME@ = loc {\n");</div><div class='del'>-        printf ("  gfid = %s\n", uuid_utoa(*((uuid_t *)new_meta)));</div><div class='del'>-        new_meta += 16;</div><div class='del'>-        printf ("  pargfid = %s\n", uuid_utoa(*((uuid_t *)new_meta)));</div><div class='del'>-        new_meta += 16;</div><div class='del'>-        if (*(new_meta++)) {</div><div class='del'>-                printf ("  name = %s\n", new_meta);</div><div class='del'>-                new_meta += (strlen(new_meta) + 1);</div><div class='del'>-        }</div><div class='del'>-        printf ("}\n");</div><div class='add'>+printf("@ARGNAME@ = loc {\n");</div><div class='add'>+printf("  gfid = %s\n", uuid_utoa(*((uuid_t *)new_meta)));</div><div class='add'>+new_meta += 16;</div><div class='add'>+printf("  pargfid = %s\n", uuid_utoa(*((uuid_t *)new_meta)));</div><div class='add'>+new_meta += 16;</div><div class='add'>+if (*(new_meta++)) {</div><div class='add'>+    printf("  name = %s\n", new_meta);</div><div class='add'>+    new_meta += (strlen(new_meta) + 1);</div><div class='add'>+}</div><div class='add'>+printf("}\n");</div><div class='ctx'> </div><div class='ctx'> #pragma fragment STRING</div><div class='del'>-        if (*(new_meta++)) {</div><div class='del'>-                printf ("@ARGNAME@ = %s\n", new_meta);</div><div class='del'>-                new_meta += (strlen(new_meta) + 1);</div><div class='del'>-        }</div><div class='add'>+if (*(new_meta++)) {</div><div class='add'>+    printf("@ARGNAME@ = %s\n", new_meta);</div><div class='add'>+    new_meta += (strlen(new_meta) + 1);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment VECTOR</div><div class='del'>-        {</div><div class='del'>-                size_t len = *((size_t *)new_meta);</div><div class='del'>-                new_meta += sizeof(len);</div><div class='del'>-                printf ("@ARGNAME@ = &lt;%zu bytes&gt;\n", len);</div><div class='del'>-                new_data += len;</div><div class='del'>-        }</div><div class='add'>+{</div><div class='add'>+    size_t len = *((size_t *)new_meta);</div><div class='add'>+    new_meta += sizeof(len);</div><div class='add'>+    printf("@ARGNAME@ = &lt;%zu bytes&gt;\n", len);</div><div class='add'>+    new_data += len;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment IATT</div><div class='del'>-        {</div><div class='del'>-                ia_prot_t *myprot = ((ia_prot_t *)new_meta);</div><div class='del'>-                printf ("@ARGNAME@ = iatt {\n");</div><div class='del'>-                printf ("  ia_prot = %c%c%c",</div><div class='del'>-                        myprot-&gt;suid ? 'S' : '-',</div><div class='del'>-                        myprot-&gt;sgid ? 'S' : '-',</div><div class='del'>-                        myprot-&gt;sticky ? 'T' : '-');</div><div class='del'>-                printf ("%c%c%c",</div><div class='del'>-                        myprot-&gt;owner.read ? 'r' : '-',</div><div class='del'>-                        myprot-&gt;owner.write ? 'w' : '-',</div><div class='del'>-                        myprot-&gt;owner.exec ? 'x' : '-');</div><div class='del'>-                printf ("%c%c%c",</div><div class='del'>-                        myprot-&gt;group.read ? 'r' : '-',</div><div class='del'>-                        myprot-&gt;group.write ? 'w' : '-',</div><div class='del'>-                        myprot-&gt;group.exec ? 'x' : '-');</div><div class='del'>-                printf ("%c%c%c\n",</div><div class='del'>-                        myprot-&gt;other.read ? 'r' : '-',</div><div class='del'>-                        myprot-&gt;other.write ? 'w' : '-',</div><div class='del'>-                        myprot-&gt;other.exec ? 'x' : '-');</div><div class='del'>-                new_meta += sizeof(ia_prot_t);</div><div class='del'>-                uint32_t *myints = (uint32_t *)new_meta;</div><div class='del'>-                printf ("  ia_uid = %u\n", myints[0]);</div><div class='del'>-                printf ("  ia_gid = %u\n", myints[1]);</div><div class='del'>-                printf ("  ia_atime = %u.%09u\n", myints[2], myints[3]);</div><div class='del'>-                printf ("  ia_mtime = %u.%09u\n", myints[4], myints[5]);</div><div class='del'>-                new_meta += sizeof(*myints) * 6;</div><div class='del'>-        }</div><div class='add'>+{</div><div class='add'>+    ia_prot_t *myprot = ((ia_prot_t *)new_meta);</div><div class='add'>+    printf("@ARGNAME@ = iatt {\n");</div><div class='add'>+    printf("  ia_prot = %c%c%c", myprot-&gt;suid ? 'S' : '-',</div><div class='add'>+           myprot-&gt;sgid ? 'S' : '-', myprot-&gt;sticky ? 'T' : '-');</div><div class='add'>+    printf("%c%c%c", myprot-&gt;owner.read ? 'r' : '-',</div><div class='add'>+           myprot-&gt;owner.write ? 'w' : '-', myprot-&gt;owner.exec ? 'x' : '-');</div><div class='add'>+    printf("%c%c%c", myprot-&gt;group.read ? 'r' : '-',</div><div class='add'>+           myprot-&gt;group.write ? 'w' : '-', myprot-&gt;group.exec ? 'x' : '-');</div><div class='add'>+    printf("%c%c%c\n", myprot-&gt;other.read ? 'r' : '-',</div><div class='add'>+           myprot-&gt;other.write ? 'w' : '-', myprot-&gt;other.exec ? 'x' : '-');</div><div class='add'>+    new_meta += sizeof(ia_prot_t);</div><div class='add'>+    uint32_t *myints = (uint32_t *)new_meta;</div><div class='add'>+    printf("  ia_uid = %u\n", myints[0]);</div><div class='add'>+    printf("  ia_gid = %u\n", myints[1]);</div><div class='add'>+    printf("  ia_atime = %u.%09u\n", myints[2], myints[3]);</div><div class='add'>+    printf("  ia_mtime = %u.%09u\n", myints[4], myints[5]);</div><div class='add'>+    new_meta += sizeof(*myints) * 6;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment FOP</div><div class='del'>-void</div><div class='del'>-fdl_dump_@NAME@ (char **old_meta, char **old_data)</div><div class='add'>+void fdl_dump_ @NAME @(char **old_meta, char **old_data)</div><div class='ctx'> {</div><div class='del'>-        char    *new_meta	= *old_meta;</div><div class='del'>-        char	*new_data	= *old_data;</div><div class='add'>+    char *new_meta = *old_meta;</div><div class='add'>+    char *new_data = *old_data;</div><div class='ctx'> </div><div class='del'>-        /* TBD: word size/endianness */</div><div class='del'>-@FUNCTION_BODY@</div><div class='add'>+    /* TBD: word size/endianness */</div><div class='add'>+    @FUNCTION_BODY @</div><div class='ctx'> </div><div class='ctx'>         *old_meta = new_meta;</div><div class='del'>-        *old_data = new_data;</div><div class='add'>+    *old_data = new_data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment CASE</div><div class='del'>-        case GF_FOP_@UPNAME@:</div><div class='del'>-                printf ("=== GF_FOP_@UPNAME@\n");</div><div class='del'>-                fdl_dump_@NAME@ (&amp;new_meta, &amp;new_data);</div><div class='del'>-                break;</div><div class='add'>+case GF_FOP_ @UPNAME @:</div><div class='add'>+    printf("=== GF_FOP_@UPNAME@\n");</div><div class='add'>+    fdl_dump_ @NAME @(&amp;new_meta, &amp;new_data);</div><div class='add'>+    break;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment EPILOG</div><div class='del'>-int</div><div class='del'>-fdl_dump (char **old_meta, char **old_data)</div><div class='del'>-{</div><div class='del'>-        char            *new_meta       = *old_meta;</div><div class='del'>-        char            *new_data       = *old_data;</div><div class='del'>-        static glfs_t   *fs             = NULL;</div><div class='del'>-        int             recognized      = 1;</div><div class='del'>-        event_header_t  *eh;</div><div class='add'>+    int</div><div class='add'>+    fdl_dump(char **old_meta, char **old_data)</div><div class='add'>+    {</div><div class='add'>+        char *new_meta = *old_meta;</div><div class='add'>+        char *new_data = *old_data;</div><div class='add'>+        static glfs_t *fs = NULL;</div><div class='add'>+        int recognized = 1;</div><div class='add'>+        event_header_t *eh;</div><div class='ctx'> </div><div class='ctx'>         /*</div><div class='ctx'>          * We don't really call anything else in GFAPI, but this is the most</div><div class='hunk'>@@ -165,23 +155,22 @@ fdl_dump (char **old_meta, char **old_data)</div><div class='ctx'>          * or glusterfsd initialize (e.g. setting up THIS).</div><div class='ctx'>          */</div><div class='ctx'>         if (!fs) {</div><div class='del'>-                fs = glfs_new ("dummy");</div><div class='add'>+            fs = glfs_new("dummy");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         eh = (event_header_t *)new_meta;</div><div class='del'>-        new_meta += sizeof (*eh);</div><div class='add'>+        new_meta += sizeof(*eh);</div><div class='ctx'> </div><div class='ctx'>         /* TBD: check event_type instead of assuming NEW_REQUEST */</div><div class='ctx'> </div><div class='ctx'>         switch (eh-&gt;fop_type) {</div><div class='del'>-@SWITCH_BODY@</div><div class='add'>+            @SWITCH_BODY @</div><div class='ctx'> </div><div class='del'>-        default:</div><div class='del'>-                printf ("unknown fop %u\n", eh-&gt;fop_type);</div><div class='del'>-                recognized = 0;</div><div class='add'>+                default : printf("unknown fop %u\n", eh-&gt;fop_type);</div><div class='add'>+            recognized = 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         *old_meta = new_meta;</div><div class='ctx'>         *old_data = new_data;</div><div class='ctx'>         return recognized;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='head'>diff --git a/xlators/experimental/fdl/src/fdl-tmpl.c b/xlators/experimental/fdl/src/fdl-tmpl.c<br/>index 145dad7964a..7388b83e0bc 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/fdl-tmpl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/fdl/src/fdl-tmpl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/fdl-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/fdl-tmpl.c</a></div><div class='hunk'>@@ -24,513 +24,489 @@</div><div class='ctx'> #include "fdl.h"</div><div class='ctx'> </div><div class='ctx'> /* TBD: make tunable */</div><div class='del'>-#define META_FILE_SIZE  (1 &lt;&lt; 20)</div><div class='del'>-#define DATA_FILE_SIZE  (1 &lt;&lt; 24)</div><div class='add'>+#define META_FILE_SIZE (1 &lt;&lt; 20)</div><div class='add'>+#define DATA_FILE_SIZE (1 &lt;&lt; 24)</div><div class='ctx'> </div><div class='del'>-enum gf_fdl {</div><div class='del'>-        gf_fdl_mt_fdl_private_t = gf_common_mt_end + 1,</div><div class='del'>-        gf_fdl_mt_end</div><div class='del'>-};</div><div class='add'>+enum gf_fdl { gf_fdl_mt_fdl_private_t = gf_common_mt_end + 1, gf_fdl_mt_end };</div><div class='ctx'> </div><div class='ctx'> typedef struct {</div><div class='del'>-        char            *type;</div><div class='del'>-        off_t           size;</div><div class='del'>-        char            *path;</div><div class='del'>-        int             fd;</div><div class='del'>-        void *          ptr;</div><div class='del'>-        off_t           max_offset;</div><div class='add'>+    char *type;</div><div class='add'>+    off_t size;</div><div class='add'>+    char *path;</div><div class='add'>+    int fd;</div><div class='add'>+    void *ptr;</div><div class='add'>+    off_t max_offset;</div><div class='ctx'> } log_obj_t;</div><div class='ctx'> </div><div class='ctx'> typedef struct {</div><div class='del'>-        struct list_head        reqs;</div><div class='del'>-        pthread_mutex_t         req_lock;</div><div class='del'>-        pthread_cond_t          req_cond;</div><div class='del'>-        char                    *log_dir;</div><div class='del'>-        pthread_t               worker;</div><div class='del'>-        gf_boolean_t            should_stop;</div><div class='del'>-        gf_boolean_t            change_term;</div><div class='del'>-        log_obj_t               meta_log;</div><div class='del'>-        log_obj_t               data_log;</div><div class='del'>-        int                     term;</div><div class='del'>-        int                     first_term;</div><div class='add'>+    struct list_head reqs;</div><div class='add'>+    pthread_mutex_t req_lock;</div><div class='add'>+    pthread_cond_t req_cond;</div><div class='add'>+    char *log_dir;</div><div class='add'>+    pthread_t worker;</div><div class='add'>+    gf_boolean_t should_stop;</div><div class='add'>+    gf_boolean_t change_term;</div><div class='add'>+    log_obj_t meta_log;</div><div class='add'>+    log_obj_t data_log;</div><div class='add'>+    int term;</div><div class='add'>+    int first_term;</div><div class='ctx'> } fdl_private_t;</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-fdl_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata);</div><div class='add'>+fdl_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fdl_enqueue (xlator_t *this, call_stub_t *stub)</div><div class='add'>+fdl_enqueue(xlator_t *this, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv   = this-&gt;private;</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;req_lock);</div><div class='del'>-        list_add_tail (&amp;stub-&gt;list, &amp;priv-&gt;reqs);</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;req_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;req_lock);</div><div class='add'>+    list_add_tail(&amp;stub-&gt;list, &amp;priv-&gt;reqs);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;req_lock);</div><div class='ctx'> </div><div class='del'>-        pthread_cond_signal (&amp;priv-&gt;req_cond);</div><div class='add'>+    pthread_cond_signal(&amp;priv-&gt;req_cond);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma generate</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-fdl_open_term_log (xlator_t *this, log_obj_t *obj, int term)</div><div class='add'>+fdl_open_term_log(xlator_t *this, log_obj_t *obj, int term)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv   = this-&gt;private;</div><div class='del'>-        int             ret;</div><div class='del'>-        char *          ptr     = NULL;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Use .jnl instead of .log so that we don't get test info (mistakenly)</div><div class='del'>-         * appended to our journal files.</div><div class='del'>-         */</div><div class='del'>-        if (this-&gt;ctx-&gt;cmd_args.log_ident) {</div><div class='del'>-                ret = gf_asprintf (&amp;obj-&gt;path, "%s/%s-%s-%d.jnl",</div><div class='del'>-                                   priv-&gt;log_dir, this-&gt;ctx-&gt;cmd_args.log_ident,</div><div class='del'>-                                   obj-&gt;type, term);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                ret = gf_asprintf (&amp;obj-&gt;path, "%s/fubar-%s-%d.jnl",</div><div class='del'>-                                   priv-&gt;log_dir, obj-&gt;type, term);</div><div class='del'>-        }</div><div class='del'>-        if ((ret &lt;= 0) || !obj-&gt;path) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to construct log-file path");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "opening %s (size %ld)",</div><div class='del'>-                obj-&gt;path, obj-&gt;size);</div><div class='del'>-</div><div class='del'>-        obj-&gt;fd = open (obj-&gt;path, O_RDWR|O_CREAT|O_TRUNC, 0666);</div><div class='del'>-        if (obj-&gt;fd &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to open log file (%s)", strerror(errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='add'>+    int ret;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Use .jnl instead of .log so that we don't get test info (mistakenly)</div><div class='add'>+     * appended to our journal files.</div><div class='add'>+     */</div><div class='add'>+    if (this-&gt;ctx-&gt;cmd_args.log_ident) {</div><div class='add'>+        ret = gf_asprintf(&amp;obj-&gt;path, "%s/%s-%s-%d.jnl", priv-&gt;log_dir,</div><div class='add'>+                          this-&gt;ctx-&gt;cmd_args.log_ident, obj-&gt;type, term);</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_asprintf(&amp;obj-&gt;path, "%s/fubar-%s-%d.jnl", priv-&gt;log_dir,</div><div class='add'>+                          obj-&gt;type, term);</div><div class='add'>+    }</div><div class='add'>+    if ((ret &lt;= 0) || !obj-&gt;path) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to construct log-file path");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "opening %s (size %ld)", obj-&gt;path,</div><div class='add'>+           obj-&gt;size);</div><div class='add'>+</div><div class='add'>+    obj-&gt;fd = open(obj-&gt;path, O_RDWR | O_CREAT | O_TRUNC, 0666);</div><div class='add'>+    if (obj-&gt;fd &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to open log file (%s)",</div><div class='add'>+               strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> #if !defined(GF_BSD_HOST_OS)</div><div class='del'>-        /*</div><div class='del'>-         * NetBSD can just go die in a fire.  Even though it claims to support</div><div class='del'>-         * fallocate/posix_fallocate they don't actually *do* anything so the</div><div class='del'>-         * file size remains zero.  Then mmap succeeds anyway, but any access</div><div class='del'>-         * to the mmap'ed region will segfault.  It would be acceptable for</div><div class='del'>-         * fallocate to do what it says, for mmap to fail, or for access to</div><div class='del'>-         * extend the file.  NetBSD managed to hit the trifecta of Getting</div><div class='del'>-         * Everything Wrong, and debugging in that environment to get this far</div><div class='del'>-         * has already been painful enough (systems I worked on in 1990 were</div><div class='del'>-         * better that way).  We'll fall through to the lseek/write method, and</div><div class='del'>-         * performance will be worse, and TOO BAD.</div><div class='del'>-         */</div><div class='del'>-        if (sys_fallocate(obj-&gt;fd,0,0,obj-&gt;size) &lt; 0)</div><div class='add'>+    /*</div><div class='add'>+     * NetBSD can just go die in a fire.  Even though it claims to support</div><div class='add'>+     * fallocate/posix_fallocate they don't actually *do* anything so the</div><div class='add'>+     * file size remains zero.  Then mmap succeeds anyway, but any access</div><div class='add'>+     * to the mmap'ed region will segfault.  It would be acceptable for</div><div class='add'>+     * fallocate to do what it says, for mmap to fail, or for access to</div><div class='add'>+     * extend the file.  NetBSD managed to hit the trifecta of Getting</div><div class='add'>+     * Everything Wrong, and debugging in that environment to get this far</div><div class='add'>+     * has already been painful enough (systems I worked on in 1990 were</div><div class='add'>+     * better that way).  We'll fall through to the lseek/write method, and</div><div class='add'>+     * performance will be worse, and TOO BAD.</div><div class='add'>+     */</div><div class='add'>+    if (sys_fallocate(obj-&gt;fd, 0, 0, obj-&gt;size) &lt; 0)</div><div class='ctx'> #endif</div><div class='del'>-        {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to fallocate space for log file");</div><div class='del'>-                /* Have to do this the ugly page-faulty way. */</div><div class='del'>-                (void) sys_lseek (obj-&gt;fd, obj-&gt;size-1, SEEK_SET);</div><div class='del'>-                (void) sys_write (obj-&gt;fd, "", 1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ptr = mmap (NULL, obj-&gt;size, PROT_WRITE, MAP_SHARED, obj-&gt;fd, 0);</div><div class='del'>-        if (ptr == MAP_FAILED) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to mmap log (%s)",</div><div class='del'>-                        strerror(errno));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        obj-&gt;ptr = ptr;</div><div class='del'>-        obj-&gt;max_offset = 0;</div><div class='del'>-        return ptr;</div><div class='add'>+    {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "failed to fallocate space for log file");</div><div class='add'>+        /* Have to do this the ugly page-faulty way. */</div><div class='add'>+        (void)sys_lseek(obj-&gt;fd, obj-&gt;size - 1, SEEK_SET);</div><div class='add'>+        (void)sys_write(obj-&gt;fd, "", 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ptr = mmap(NULL, obj-&gt;size, PROT_WRITE, MAP_SHARED, obj-&gt;fd, 0);</div><div class='add'>+    if (ptr == MAP_FAILED) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to mmap log (%s)",</div><div class='add'>+               strerror(errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    obj-&gt;ptr = ptr;</div><div class='add'>+    obj-&gt;max_offset = 0;</div><div class='add'>+    return ptr;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (obj-&gt;fd &gt;= 0) {</div><div class='del'>-                sys_close (obj-&gt;fd);</div><div class='del'>-                obj-&gt;fd = (-1);</div><div class='del'>-        }</div><div class='del'>-        if (obj-&gt;path) {</div><div class='del'>-                GF_FREE (obj-&gt;path);</div><div class='del'>-                obj-&gt;path = NULL;</div><div class='del'>-        }</div><div class='del'>-        return ptr;</div><div class='add'>+    if (obj-&gt;fd &gt;= 0) {</div><div class='add'>+        sys_close(obj-&gt;fd);</div><div class='add'>+        obj-&gt;fd = (-1);</div><div class='add'>+    }</div><div class='add'>+    if (obj-&gt;path) {</div><div class='add'>+        GF_FREE(obj-&gt;path);</div><div class='add'>+        obj-&gt;path = NULL;</div><div class='add'>+    }</div><div class='add'>+    return ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fdl_close_term_log (xlator_t *this, log_obj_t *obj)</div><div class='add'>+fdl_close_term_log(xlator_t *this, log_obj_t *obj)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv           = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (obj-&gt;ptr) {</div><div class='del'>-                (void) munmap (obj-&gt;ptr, obj-&gt;size);</div><div class='del'>-                obj-&gt;ptr = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (obj-&gt;fd &gt;= 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        "truncating term %d %s journal to %ld",</div><div class='del'>-                        priv-&gt;term, obj-&gt;type, obj-&gt;max_offset);</div><div class='del'>-                if (sys_ftruncate(obj-&gt;fd,obj-&gt;max_offset) &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to truncate journal (%s)",</div><div class='del'>-                                strerror(errno));</div><div class='del'>-                }</div><div class='del'>-                sys_close (obj-&gt;fd);</div><div class='del'>-                obj-&gt;fd = (-1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (obj-&gt;path) {</div><div class='del'>-                GF_FREE (obj-&gt;path);</div><div class='del'>-                obj-&gt;path = NULL;</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (obj-&gt;ptr) {</div><div class='add'>+        (void)munmap(obj-&gt;ptr, obj-&gt;size);</div><div class='add'>+        obj-&gt;ptr = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (obj-&gt;fd &gt;= 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_INFO, "truncating term %d %s journal to %ld",</div><div class='add'>+               priv-&gt;term, obj-&gt;type, obj-&gt;max_offset);</div><div class='add'>+        if (sys_ftruncate(obj-&gt;fd, obj-&gt;max_offset) &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "failed to truncate journal (%s)", strerror(errno));</div><div class='ctx'>         }</div><div class='add'>+        sys_close(obj-&gt;fd);</div><div class='add'>+        obj-&gt;fd = (-1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (obj-&gt;path) {</div><div class='add'>+        GF_FREE(obj-&gt;path);</div><div class='add'>+        obj-&gt;path = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-fdl_change_term (xlator_t *this, char **meta_ptr, char **data_ptr)</div><div class='add'>+fdl_change_term(xlator_t *this, char **meta_ptr, char **data_ptr)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv           = this-&gt;private;</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        fdl_close_term_log (this, &amp;priv-&gt;meta_log);</div><div class='del'>-        fdl_close_term_log (this, &amp;priv-&gt;data_log);</div><div class='add'>+    fdl_close_term_log(this, &amp;priv-&gt;meta_log);</div><div class='add'>+    fdl_close_term_log(this, &amp;priv-&gt;data_log);</div><div class='ctx'> </div><div class='del'>-        ++(priv-&gt;term);</div><div class='add'>+    ++(priv-&gt;term);</div><div class='ctx'> </div><div class='del'>-        *meta_ptr = fdl_open_term_log (this, &amp;priv-&gt;meta_log, priv-&gt;term);</div><div class='del'>-        if (!*meta_ptr) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    *meta_ptr = fdl_open_term_log(this, &amp;priv-&gt;meta_log, priv-&gt;term);</div><div class='add'>+    if (!*meta_ptr) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *data_ptr = fdl_open_term_log (this, &amp;priv-&gt;data_log, priv-&gt;term);</div><div class='del'>-        if (!*data_ptr) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    *data_ptr = fdl_open_term_log(this, &amp;priv-&gt;data_log, priv-&gt;term);</div><div class='add'>+    if (!*data_ptr) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-fdl_worker (void *arg)</div><div class='add'>+fdl_worker(void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this           = arg;</div><div class='del'>-        fdl_private_t   *priv           = this-&gt;private;</div><div class='del'>-        call_stub_t     *stub;</div><div class='del'>-        char *          meta_ptr        = NULL;</div><div class='del'>-        off_t           *meta_offset    = &amp;priv-&gt;meta_log.max_offset;</div><div class='del'>-        char *          data_ptr        = NULL;</div><div class='del'>-        off_t           *data_offset    = &amp;priv-&gt;data_log.max_offset;</div><div class='del'>-        unsigned long   base_as_ul;</div><div class='del'>-        void *          msync_ptr;</div><div class='del'>-        size_t          msync_len;</div><div class='del'>-        gf_boolean_t    recycle;</div><div class='del'>-        void            *err_label      = &amp;&amp;err_unlocked;</div><div class='del'>-</div><div class='del'>-        priv-&gt;meta_log.type = "meta";</div><div class='del'>-        priv-&gt;meta_log.size = META_FILE_SIZE;</div><div class='del'>-        priv-&gt;meta_log.path = NULL;</div><div class='del'>-        priv-&gt;meta_log.fd = (-1);</div><div class='del'>-        priv-&gt;meta_log.ptr = NULL;</div><div class='del'>-</div><div class='del'>-        priv-&gt;data_log.type = "data";</div><div class='del'>-        priv-&gt;data_log.size = DATA_FILE_SIZE;</div><div class='del'>-        priv-&gt;data_log.path = NULL;</div><div class='del'>-        priv-&gt;data_log.fd = (-1);</div><div class='del'>-        priv-&gt;data_log.ptr = NULL;</div><div class='del'>-</div><div class='del'>-        /* TBD: initial term should come from persistent storage (e.g. etcd) */</div><div class='del'>-        priv-&gt;first_term = ++(priv-&gt;term);</div><div class='del'>-        meta_ptr = fdl_open_term_log (this, &amp;priv-&gt;meta_log, priv-&gt;term);</div><div class='del'>-        if (!meta_ptr) {</div><div class='add'>+    xlator_t *this = arg;</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='add'>+    call_stub_t *stub;</div><div class='add'>+    char *meta_ptr = NULL;</div><div class='add'>+    off_t *meta_offset = &amp;priv-&gt;meta_log.max_offset;</div><div class='add'>+    char *data_ptr = NULL;</div><div class='add'>+    off_t *data_offset = &amp;priv-&gt;data_log.max_offset;</div><div class='add'>+    unsigned long base_as_ul;</div><div class='add'>+    void *msync_ptr;</div><div class='add'>+    size_t msync_len;</div><div class='add'>+    gf_boolean_t recycle;</div><div class='add'>+    void *err_label = &amp;&amp;err_unlocked;</div><div class='add'>+</div><div class='add'>+    priv-&gt;meta_log.type = "meta";</div><div class='add'>+    priv-&gt;meta_log.size = META_FILE_SIZE;</div><div class='add'>+    priv-&gt;meta_log.path = NULL;</div><div class='add'>+    priv-&gt;meta_log.fd = (-1);</div><div class='add'>+    priv-&gt;meta_log.ptr = NULL;</div><div class='add'>+</div><div class='add'>+    priv-&gt;data_log.type = "data";</div><div class='add'>+    priv-&gt;data_log.size = DATA_FILE_SIZE;</div><div class='add'>+    priv-&gt;data_log.path = NULL;</div><div class='add'>+    priv-&gt;data_log.fd = (-1);</div><div class='add'>+    priv-&gt;data_log.ptr = NULL;</div><div class='add'>+</div><div class='add'>+    /* TBD: initial term should come from persistent storage (e.g. etcd) */</div><div class='add'>+    priv-&gt;first_term = ++(priv-&gt;term);</div><div class='add'>+    meta_ptr = fdl_open_term_log(this, &amp;priv-&gt;meta_log, priv-&gt;term);</div><div class='add'>+    if (!meta_ptr) {</div><div class='add'>+        goto *err_label;</div><div class='add'>+    }</div><div class='add'>+    data_ptr = fdl_open_term_log(this, &amp;priv-&gt;data_log, priv-&gt;term);</div><div class='add'>+    if (!data_ptr) {</div><div class='add'>+        fdl_close_term_log(this, &amp;priv-&gt;meta_log);</div><div class='add'>+        goto *err_label;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;req_lock);</div><div class='add'>+        err_label = &amp;&amp;err_locked;</div><div class='add'>+        while (list_empty(&amp;priv-&gt;reqs)) {</div><div class='add'>+            pthread_cond_wait(&amp;priv-&gt;req_cond, &amp;priv-&gt;req_lock);</div><div class='add'>+            if (priv-&gt;should_stop) {</div><div class='ctx'>                 goto *err_label;</div><div class='add'>+            }</div><div class='add'>+            if (priv-&gt;change_term) {</div><div class='add'>+                if (!fdl_change_term(this, &amp;meta_ptr, &amp;data_ptr)) {</div><div class='add'>+                    goto *err_label;</div><div class='add'>+                }</div><div class='add'>+                priv-&gt;change_term = _gf_false;</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        data_ptr = fdl_open_term_log (this, &amp;priv-&gt;data_log, priv-&gt;term);</div><div class='del'>-        if (!data_ptr) {</div><div class='del'>-                fdl_close_term_log (this, &amp;priv-&gt;meta_log);</div><div class='del'>-                goto *err_label;</div><div class='add'>+        stub = list_entry(priv-&gt;reqs.next, call_stub_t, list);</div><div class='add'>+        list_del_init(&amp;stub-&gt;list);</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;req_lock);</div><div class='add'>+        err_label = &amp;&amp;err_unlocked;</div><div class='add'>+        /*</div><div class='add'>+         * TBD: batch requests</div><div class='add'>+         *</div><div class='add'>+         * What we should do here is gather up *all* of the requests</div><div class='add'>+         * that have accumulated since we were last at this point,</div><div class='add'>+         * blast them all out in one big writev, and then dispatch them</div><div class='add'>+         * all before coming back for more.  That maximizes throughput,</div><div class='add'>+         * at some cost to latency (due to queuing effects at the log</div><div class='add'>+         * stage).  Note that we're likely to be above io-threads, so</div><div class='add'>+         * the dispatch itself will be parallelized (at further cost to</div><div class='add'>+         * latency).  For now, we just do the simplest thing and handle</div><div class='add'>+         * one request all the way through before fetching the next.</div><div class='add'>+         *</div><div class='add'>+         * So, why mmap/msync instead of writev/fdatasync?  Because it's</div><div class='add'>+         * faster.  Much faster.  So much faster that I half-suspect</div><div class='add'>+         * cheating, but it's more convenient for now than having to</div><div class='add'>+         * ensure that everything's page-aligned for O_DIRECT (the only</div><div class='add'>+         * alternative that still might avoid ridiculous levels of</div><div class='add'>+         * local-FS overhead).</div><div class='add'>+         *</div><div class='add'>+         * TBD: check that msync really does get our data to disk.</div><div class='add'>+         */</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "logging %u+%u bytes for op %d",</div><div class='add'>+               stub-&gt;jnl_meta_len, stub-&gt;jnl_data_len, stub-&gt;fop);</div><div class='add'>+        recycle = _gf_false;</div><div class='add'>+        if ((*meta_offset + stub-&gt;jnl_meta_len) &gt; priv-&gt;meta_log.size) {</div><div class='add'>+            recycle = _gf_true;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;req_lock);</div><div class='del'>-                err_label = &amp;&amp;err_locked;</div><div class='del'>-                while (list_empty(&amp;priv-&gt;reqs)) {</div><div class='del'>-                        pthread_cond_wait (&amp;priv-&gt;req_cond, &amp;priv-&gt;req_lock);</div><div class='del'>-                        if (priv-&gt;should_stop) {</div><div class='del'>-                                goto *err_label;</div><div class='del'>-                        }</div><div class='del'>-                        if (priv-&gt;change_term) {</div><div class='del'>-                                if (!fdl_change_term(this, &amp;meta_ptr,</div><div class='del'>-                                                           &amp;data_ptr)) {</div><div class='del'>-                                        goto *err_label;</div><div class='del'>-                                }</div><div class='del'>-                                priv-&gt;change_term = _gf_false;</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                stub = list_entry (priv-&gt;reqs.next, call_stub_t, list);</div><div class='del'>-                list_del_init (&amp;stub-&gt;list);</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;req_lock);</div><div class='del'>-                err_label = &amp;&amp;err_unlocked;</div><div class='del'>-                /*</div><div class='del'>-                 * TBD: batch requests</div><div class='del'>-                 *</div><div class='del'>-                 * What we should do here is gather up *all* of the requests</div><div class='del'>-                 * that have accumulated since we were last at this point,</div><div class='del'>-                 * blast them all out in one big writev, and then dispatch them</div><div class='del'>-                 * all before coming back for more.  That maximizes throughput,</div><div class='del'>-                 * at some cost to latency (due to queuing effects at the log</div><div class='del'>-                 * stage).  Note that we're likely to be above io-threads, so</div><div class='del'>-                 * the dispatch itself will be parallelized (at further cost to</div><div class='del'>-                 * latency).  For now, we just do the simplest thing and handle</div><div class='del'>-                 * one request all the way through before fetching the next.</div><div class='del'>-                 *</div><div class='del'>-                 * So, why mmap/msync instead of writev/fdatasync?  Because it's</div><div class='del'>-                 * faster.  Much faster.  So much faster that I half-suspect</div><div class='del'>-                 * cheating, but it's more convenient for now than having to</div><div class='del'>-                 * ensure that everything's page-aligned for O_DIRECT (the only</div><div class='del'>-                 * alternative that still might avoid ridiculous levels of</div><div class='del'>-                 * local-FS overhead).</div><div class='del'>-                 *</div><div class='del'>-                 * TBD: check that msync really does get our data to disk.</div><div class='del'>-                 */</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "logging %u+%u bytes for op %d",</div><div class='del'>-                        stub-&gt;jnl_meta_len, stub-&gt;jnl_data_len, stub-&gt;fop);</div><div class='del'>-                recycle = _gf_false;</div><div class='del'>-                if ((*meta_offset + stub-&gt;jnl_meta_len) &gt; priv-&gt;meta_log.size) {</div><div class='del'>-                        recycle = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                if ((*data_offset + stub-&gt;jnl_data_len) &gt; priv-&gt;data_log.size) {</div><div class='del'>-                        recycle = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                if (recycle &amp;&amp; !fdl_change_term(this,&amp;meta_ptr,&amp;data_ptr)) {</div><div class='del'>-                        goto *err_label;</div><div class='del'>-                }</div><div class='del'>-                meta_ptr = priv-&gt;meta_log.ptr;</div><div class='del'>-                data_ptr = priv-&gt;data_log.ptr;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "serializing to %p/%p",</div><div class='del'>-                        meta_ptr + *meta_offset, data_ptr + *data_offset);</div><div class='del'>-                stub-&gt;serialize (stub, meta_ptr + *meta_offset,</div><div class='del'>-                                       data_ptr + *data_offset);</div><div class='del'>-                if (stub-&gt;jnl_meta_len &gt; 0) {</div><div class='del'>-                        base_as_ul = (unsigned long) (meta_ptr + *meta_offset);</div><div class='del'>-                        msync_ptr = (void *) (base_as_ul &amp; ~0x0fff);</div><div class='del'>-                        msync_len = (size_t) (base_as_ul &amp;  0x0fff);</div><div class='del'>-                        if (msync (msync_ptr, msync_len+stub-&gt;jnl_meta_len,</div><div class='del'>-                                              MS_SYNC) &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "failed to log request meta (%s)",</div><div class='del'>-                                        strerror(errno));</div><div class='del'>-                        }</div><div class='del'>-                        *meta_offset += stub-&gt;jnl_meta_len;</div><div class='del'>-                }</div><div class='del'>-                if (stub-&gt;jnl_data_len &gt; 0) {</div><div class='del'>-                        base_as_ul = (unsigned long) (data_ptr + *data_offset);</div><div class='del'>-                        msync_ptr = (void *) (base_as_ul &amp; ~0x0fff);</div><div class='del'>-                        msync_len = (size_t) (base_as_ul &amp;  0x0fff);</div><div class='del'>-                        if (msync (msync_ptr, msync_len+stub-&gt;jnl_data_len,</div><div class='del'>-                                              MS_SYNC) &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "failed to log request data (%s)",</div><div class='del'>-                                        strerror(errno));</div><div class='del'>-                        }</div><div class='del'>-                        *data_offset += stub-&gt;jnl_data_len;</div><div class='del'>-                }</div><div class='del'>-                call_resume (stub);</div><div class='add'>+        if ((*data_offset + stub-&gt;jnl_data_len) &gt; priv-&gt;data_log.size) {</div><div class='add'>+            recycle = _gf_true;</div><div class='add'>+        }</div><div class='add'>+        if (recycle &amp;&amp; !fdl_change_term(this, &amp;meta_ptr, &amp;data_ptr)) {</div><div class='add'>+            goto *err_label;</div><div class='add'>+        }</div><div class='add'>+        meta_ptr = priv-&gt;meta_log.ptr;</div><div class='add'>+        data_ptr = priv-&gt;data_log.ptr;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "serializing to %p/%p",</div><div class='add'>+               meta_ptr + *meta_offset, data_ptr + *data_offset);</div><div class='add'>+        stub-&gt;serialize(stub, meta_ptr + *meta_offset, data_ptr + *data_offset);</div><div class='add'>+        if (stub-&gt;jnl_meta_len &gt; 0) {</div><div class='add'>+            base_as_ul = (unsigned long)(meta_ptr + *meta_offset);</div><div class='add'>+            msync_ptr = (void *)(base_as_ul &amp; ~0x0fff);</div><div class='add'>+            msync_len = (size_t)(base_as_ul &amp; 0x0fff);</div><div class='add'>+            if (msync(msync_ptr, msync_len + stub-&gt;jnl_meta_len, MS_SYNC) &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "failed to log request meta (%s)", strerror(errno));</div><div class='add'>+            }</div><div class='add'>+            *meta_offset += stub-&gt;jnl_meta_len;</div><div class='ctx'>         }</div><div class='add'>+        if (stub-&gt;jnl_data_len &gt; 0) {</div><div class='add'>+            base_as_ul = (unsigned long)(data_ptr + *data_offset);</div><div class='add'>+            msync_ptr = (void *)(base_as_ul &amp; ~0x0fff);</div><div class='add'>+            msync_len = (size_t)(base_as_ul &amp; 0x0fff);</div><div class='add'>+            if (msync(msync_ptr, msync_len + stub-&gt;jnl_data_len, MS_SYNC) &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "failed to log request data (%s)", strerror(errno));</div><div class='add'>+            }</div><div class='add'>+            *data_offset += stub-&gt;jnl_data_len;</div><div class='add'>+        }</div><div class='add'>+        call_resume(stub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err_locked:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;req_lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;req_lock);</div><div class='ctx'> err_unlocked:</div><div class='del'>-        fdl_close_term_log (this, &amp;priv-&gt;meta_log);</div><div class='del'>-        fdl_close_term_log (this, &amp;priv-&gt;data_log);</div><div class='del'>-        return NULL;</div><div class='add'>+    fdl_close_term_log(this, &amp;priv-&gt;meta_log);</div><div class='add'>+    fdl_close_term_log(this, &amp;priv-&gt;data_log);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-fdl_ipc_continue (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  int32_t op, dict_t *xdata)</div><div class='add'>+fdl_ipc_continue(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        /*</div><div class='del'>-         * Nothing to be done here. Just Unwind. *</div><div class='del'>-         */</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, 0, 0, xdata);</div><div class='add'>+    /*</div><div class='add'>+     * Nothing to be done here. Just Unwind. *</div><div class='add'>+     */</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, 0, 0, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-fdl_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+fdl_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t     *stub;</div><div class='del'>-        fdl_private_t   *priv   = this-&gt;private;</div><div class='del'>-        dict_t          *tdict;</div><div class='del'>-        int32_t         gt_err  = EIO;</div><div class='del'>-</div><div class='del'>-        switch (op) {</div><div class='add'>+    call_stub_t *stub;</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='add'>+    dict_t *tdict;</div><div class='add'>+    int32_t gt_err = EIO;</div><div class='ctx'> </div><div class='add'>+    switch (op) {</div><div class='ctx'>         case FDL_IPC_CHANGE_TERM:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO, "got CHANGE_TERM op");</div><div class='del'>-                priv-&gt;change_term = _gf_true;</div><div class='del'>-                pthread_cond_signal (&amp;priv-&gt;req_cond);</div><div class='del'>-                STACK_UNWIND_STRICT (ipc, frame, 0, 0, NULL);</div><div class='del'>-                break;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "got CHANGE_TERM op");</div><div class='add'>+            priv-&gt;change_term = _gf_true;</div><div class='add'>+            pthread_cond_signal(&amp;priv-&gt;req_cond);</div><div class='add'>+            STACK_UNWIND_STRICT(ipc, frame, 0, 0, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case FDL_IPC_GET_TERMS:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO, "got GET_TERMS op");</div><div class='del'>-                tdict = dict_new ();</div><div class='del'>-                if (!tdict) {</div><div class='del'>-                        gt_err = ENOMEM;</div><div class='del'>-                        goto gt_done;</div><div class='del'>-                }</div><div class='del'>-                if (dict_set_int32(tdict,"first",priv-&gt;first_term) != 0) {</div><div class='del'>-                        goto gt_done;</div><div class='del'>-                }</div><div class='del'>-                if (dict_set_int32(tdict,"last",priv-&gt;term) != 0) {</div><div class='del'>-                        goto gt_done;</div><div class='del'>-                }</div><div class='del'>-                gt_err = 0;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "got GET_TERMS op");</div><div class='add'>+            tdict = dict_new();</div><div class='add'>+            if (!tdict) {</div><div class='add'>+                gt_err = ENOMEM;</div><div class='add'>+                goto gt_done;</div><div class='add'>+            }</div><div class='add'>+            if (dict_set_int32(tdict, "first", priv-&gt;first_term) != 0) {</div><div class='add'>+                goto gt_done;</div><div class='add'>+            }</div><div class='add'>+            if (dict_set_int32(tdict, "last", priv-&gt;term) != 0) {</div><div class='add'>+                goto gt_done;</div><div class='add'>+            }</div><div class='add'>+            gt_err = 0;</div><div class='ctx'>         gt_done:</div><div class='del'>-                if (gt_err) {</div><div class='del'>-                        STACK_UNWIND_STRICT (ipc, frame, -1, gt_err, NULL);</div><div class='del'>-                } else {</div><div class='del'>-                        STACK_UNWIND_STRICT (ipc, frame, 0, 0, tdict);</div><div class='del'>-                }</div><div class='del'>-                if (tdict) {</div><div class='del'>-                        dict_unref (tdict);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            if (gt_err) {</div><div class='add'>+                STACK_UNWIND_STRICT(ipc, frame, -1, gt_err, NULL);</div><div class='add'>+            } else {</div><div class='add'>+                STACK_UNWIND_STRICT(ipc, frame, 0, 0, tdict);</div><div class='add'>+            }</div><div class='add'>+            if (tdict) {</div><div class='add'>+                dict_unref(tdict);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case FDL_IPC_JBR_SERVER_ROLLBACK:</div><div class='del'>-                /*</div><div class='del'>-                 * In case of a rollback from jbr-server, dump  *</div><div class='del'>-                 * the term and index number in the journal,    *</div><div class='del'>-                 * which will later be used to rollback the fop *</div><div class='del'>-                 */</div><div class='del'>-                stub = fop_ipc_stub (frame, fdl_ipc_continue,</div><div class='del'>-                                     op, xdata);</div><div class='del'>-                fdl_len_ipc (stub);</div><div class='del'>-                stub-&gt;serialize = fdl_serialize_ipc;</div><div class='del'>-                fdl_enqueue (this, stub);</div><div class='del'>-</div><div class='del'>-                break;</div><div class='add'>+            /*</div><div class='add'>+             * In case of a rollback from jbr-server, dump  *</div><div class='add'>+             * the term and index number in the journal,    *</div><div class='add'>+             * which will later be used to rollback the fop *</div><div class='add'>+             */</div><div class='add'>+            stub = fop_ipc_stub(frame, fdl_ipc_continue, op, xdata);</div><div class='add'>+            fdl_len_ipc(stub);</div><div class='add'>+            stub-&gt;serialize = fdl_serialize_ipc;</div><div class='add'>+            fdl_enqueue(this, stub);</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                STACK_WIND_TAIL (frame,</div><div class='del'>-                                 FIRST_CHILD(this),</div><div class='del'>-                                 FIRST_CHILD(this)-&gt;fops-&gt;ipc,</div><div class='del'>-                                 op, xdata);</div><div class='del'>-        }</div><div class='add'>+            STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                            FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fdl_init (xlator_t *this)</div><div class='add'>+fdl_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv   = NULL;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_fdl_mt_fdl_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to allocate fdl_private");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;reqs);</div><div class='del'>-        if (pthread_mutex_init (&amp;priv-&gt;req_lock, NULL) != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to initialize req_lock");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (pthread_cond_init (&amp;priv-&gt;req_cond, NULL) != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to initialize req_cond");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("log-path", priv-&gt;log_dir, path, err);</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        /*</div><div class='del'>-         * The rest of the fop table is automatically generated, so this is a</div><div class='del'>-         * bit cleaner than messing with the generation to add a hand-written</div><div class='del'>-         * exception.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if (gf_thread_create (&amp;priv-&gt;worker, NULL, fdl_worker, this,</div><div class='del'>-                              "fdlwrker") != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to start fdl_worker");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    fdl_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_fdl_mt_fdl_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to allocate fdl_private");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;reqs);</div><div class='add'>+    if (pthread_mutex_init(&amp;priv-&gt;req_lock, NULL) != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to initialize req_lock");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (pthread_cond_init(&amp;priv-&gt;req_cond, NULL) != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to initialize req_cond");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("log-path", priv-&gt;log_dir, path, err);</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    /*</div><div class='add'>+     * The rest of the fop table is automatically generated, so this is a</div><div class='add'>+     * bit cleaner than messing with the generation to add a hand-written</div><div class='add'>+     * exception.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (gf_thread_create(&amp;priv-&gt;worker, NULL, fdl_worker, this, "fdlwrker") !=</div><div class='add'>+        0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "failed to start fdl_worker");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (priv) {</div><div class='del'>-                GF_FREE(priv);</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    if (priv) {</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fdl_fini (xlator_t *this)</div><div class='add'>+fdl_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv   = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv) {</div><div class='del'>-                priv-&gt;should_stop = _gf_true;</div><div class='del'>-                pthread_cond_signal (&amp;priv-&gt;req_cond);</div><div class='del'>-                pthread_join (priv-&gt;worker, NULL);</div><div class='del'>-                GF_FREE(priv);</div><div class='del'>-        }</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv) {</div><div class='add'>+        priv-&gt;should_stop = _gf_true;</div><div class='add'>+        pthread_cond_signal(&amp;priv-&gt;req_cond);</div><div class='add'>+        pthread_join(priv-&gt;worker, NULL);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fdl_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+fdl_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        fdl_private_t   *priv   = this-&gt;private;</div><div class='add'>+    fdl_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	GF_OPTION_RECONF ("log_dir", priv-&gt;log_dir, options, path, out);</div><div class='del'>-        /* TBD: react if it changed */</div><div class='add'>+    GF_OPTION_RECONF("log_dir", priv-&gt;log_dir, options, path, out);</div><div class='add'>+    /* TBD: react if it changed */</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("fdl", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("fdl", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_fdl_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_fdl_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                        "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = fdl_init,</div><div class='del'>-        .fini           = fdl_fini,</div><div class='del'>-        .reconfigure    = fdl_reconfigure,</div><div class='del'>-        .notify         = default_notify,</div><div class='add'>+    .init = fdl_init,</div><div class='add'>+    .fini = fdl_fini,</div><div class='add'>+    .reconfigure = fdl_reconfigure,</div><div class='add'>+    .notify = default_notify,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key = {"log-path"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PATH,</div><div class='del'>-          .default_value = DEFAULT_LOG_FILE_DIRECTORY,</div><div class='del'>-          .description = "Directory for FDL files."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {"log-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PATH,</div><div class='add'>+     .default_value = DEFAULT_LOG_FILE_DIRECTORY,</div><div class='add'>+     .description = "Directory for FDL files."},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .release        = default_release,</div><div class='del'>-        .releasedir     = default_releasedir,</div><div class='del'>-        .forget         = default_forget,</div><div class='add'>+    .release = default_release,</div><div class='add'>+    .releasedir = default_releasedir,</div><div class='add'>+    .forget = default_forget,</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/fdl/src/logdump.c b/xlators/experimental/fdl/src/logdump.c<br/>index 7c979c32a04..6fbc5218d47 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/logdump.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/fdl/src/logdump.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/logdump.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/logdump.c</a></div><div class='hunk'>@@ -4,47 +4,48 @@</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;sys/mman.h&gt;</div><div class='ctx'> </div><div class='del'>-extern int fdl_dump (char **, char **);</div><div class='add'>+extern int</div><div class='add'>+fdl_dump(char **, char **);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int     meta_fd         = (-1);</div><div class='del'>-        char    *meta_buf       = NULL;</div><div class='del'>-        int     data_fd         = (-1);</div><div class='del'>-        char    *data_buf       = NULL;</div><div class='del'>-</div><div class='del'>-        meta_fd = open (argv[1], O_RDONLY);</div><div class='del'>-        if (meta_fd &lt; 0) {</div><div class='del'>-                perror ("open");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='add'>+    int meta_fd = (-1);</div><div class='add'>+    char *meta_buf = NULL;</div><div class='add'>+    int data_fd = (-1);</div><div class='add'>+    char *data_buf = NULL;</div><div class='add'>+</div><div class='add'>+    meta_fd = open(argv[1], O_RDONLY);</div><div class='add'>+    if (meta_fd &lt; 0) {</div><div class='add'>+        perror("open");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TBD: get proper length */</div><div class='add'>+    meta_buf = mmap(NULL, 1048576, PROT_READ, MAP_PRIVATE, meta_fd, 0);</div><div class='add'>+    if (meta_buf == MAP_FAILED) {</div><div class='add'>+        perror("mmap");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    data_fd = open(argv[2], O_RDONLY);</div><div class='add'>+    if (data_fd &lt; 0) {</div><div class='add'>+        perror("open");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TBD: get proper length */</div><div class='add'>+    data_buf = mmap(NULL, 1048576, PROT_READ, MAP_PRIVATE, data_fd, 0);</div><div class='add'>+    if (data_buf == MAP_FAILED) {</div><div class='add'>+        perror("mmap");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        if (!fdl_dump(&amp;meta_buf, &amp;data_buf)) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TBD: get proper length */</div><div class='del'>-        meta_buf = mmap (NULL, 1048576, PROT_READ, MAP_PRIVATE, meta_fd, 0);</div><div class='del'>-        if (meta_buf == MAP_FAILED) {</div><div class='del'>-                perror ("mmap");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        data_fd = open (argv[2], O_RDONLY);</div><div class='del'>-        if (data_fd &lt; 0) {</div><div class='del'>-                perror ("open");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TBD: get proper length */</div><div class='del'>-        data_buf = mmap (NULL, 1048576, PROT_READ, MAP_PRIVATE, data_fd, 0);</div><div class='del'>-        if (data_buf == MAP_FAILED) {</div><div class='del'>-                perror ("mmap");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                if (!fdl_dump(&amp;meta_buf,&amp;data_buf)) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return EXIT_SUCCESS;</div><div class='add'>+    return EXIT_SUCCESS;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/experimental/fdl/src/recon-tmpl.c b/xlators/experimental/fdl/src/recon-tmpl.c<br/>index 228860401ae..4760eaad2e2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/recon-tmpl.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/fdl/src/recon-tmpl.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/recon-tmpl.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/recon-tmpl.c</a></div><div class='hunk'>@@ -15,290 +15,283 @@</div><div class='ctx'> #define GFAPI_SUCCESS 0</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-recon_get_inode (glfs_t *fs, uuid_t gfid)</div><div class='add'>+recon_get_inode(glfs_t *fs, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        inode_t         *inode;</div><div class='del'>-        loc_t           loc     = {NULL,};</div><div class='del'>-        struct iatt     iatt;</div><div class='del'>-        int             ret;</div><div class='del'>-        inode_t         *newinode;</div><div class='del'>-</div><div class='del'>-        inode = inode_find (fs-&gt;active_subvol-&gt;itable, gfid);</div><div class='del'>-        if (inode) {</div><div class='del'>-                printf ("=== FOUND %s IN TABLE\n", uuid_utoa(gfid));</div><div class='del'>-                return inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_new (fs-&gt;active_subvol-&gt;itable);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-        gf_uuid_copy (loc.inode-&gt;gfid, gfid);</div><div class='del'>-        gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        printf ("=== DOING LOOKUP FOR %s\n", uuid_utoa(gfid));</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (fs-&gt;active_subvol, &amp;loc, &amp;iatt,</div><div class='del'>-                             NULL, NULL, NULL);</div><div class='del'>-        if (ret != GFAPI_SUCCESS) {</div><div class='del'>-                fprintf (stderr, "syncop_lookup failed (%d)\n", ret);</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newinode = inode_link (loc.inode, NULL, NULL, &amp;iatt);</div><div class='del'>-        if (newinode) {</div><div class='del'>-                inode_lookup (newinode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return newinode;</div><div class='add'>+    inode_t *inode;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        NULL,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt;</div><div class='add'>+    int ret;</div><div class='add'>+    inode_t *newinode;</div><div class='add'>+</div><div class='add'>+    inode = inode_find(fs-&gt;active_subvol-&gt;itable, gfid);</div><div class='add'>+    if (inode) {</div><div class='add'>+        printf("=== FOUND %s IN TABLE\n", uuid_utoa(gfid));</div><div class='add'>+        return inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_new(fs-&gt;active_subvol-&gt;itable);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_copy(loc.inode-&gt;gfid, gfid);</div><div class='add'>+    gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    printf("=== DOING LOOKUP FOR %s\n", uuid_utoa(gfid));</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(fs-&gt;active_subvol, &amp;loc, &amp;iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret != GFAPI_SUCCESS) {</div><div class='add'>+        fprintf(stderr, "syncop_lookup failed (%d)\n", ret);</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newinode = inode_link(loc.inode, NULL, NULL, &amp;iatt);</div><div class='add'>+    if (newinode) {</div><div class='add'>+        inode_lookup(newinode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return newinode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment DICT</div><div class='del'>-        dict_t  *@ARGNAME@;</div><div class='add'>+dict_t *@ARGNAME @;</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@ = dict_new();</div><div class='del'>-        if (!@ARGNAME@) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@;</div><div class='del'>-</div><div class='del'>-        {</div><div class='del'>-                int     key_len, data_len;</div><div class='del'>-                char    *key_ptr;</div><div class='del'>-                int     garbage;</div><div class='del'>-                for (;;) {</div><div class='del'>-                        key_len = *((int *)new_meta);</div><div class='del'>-                        new_meta += sizeof(int);</div><div class='del'>-                        if (!key_len) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        key_ptr = new_meta;</div><div class='del'>-                        new_meta += key_len;</div><div class='del'>-                        data_len = *((int *)new_meta);</div><div class='del'>-                        new_meta += sizeof(int);</div><div class='del'>-                        garbage = dict_set_static_bin (@ARGNAME@, key_ptr,</div><div class='del'>-                                                       new_meta, data_len);</div><div class='del'>-                        /* TBD: check error from dict_set_static_bin */</div><div class='del'>-                        (void)garbage;</div><div class='del'>-                        new_meta += data_len;</div><div class='del'>-                }</div><div class='add'>+@ARGNAME @ = dict_new();</div><div class='add'>+if (!@ARGNAME @) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @;</div><div class='add'>+</div><div class='add'>+{</div><div class='add'>+    int key_len, data_len;</div><div class='add'>+    char *key_ptr;</div><div class='add'>+    int garbage;</div><div class='add'>+    for (;;) {</div><div class='add'>+        key_len = *((int *)new_meta);</div><div class='add'>+        new_meta += sizeof(int);</div><div class='add'>+        if (!key_len) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        key_ptr = new_meta;</div><div class='add'>+        new_meta += key_len;</div><div class='add'>+        data_len = *((int *)new_meta);</div><div class='add'>+        new_meta += sizeof(int);</div><div class='add'>+        garbage = dict_set_static_bin(@ARGNAME @, key_ptr, new_meta, data_len);</div><div class='add'>+        /* TBD: check error from dict_set_static_bin */</div><div class='add'>+        (void)garbage;</div><div class='add'>+        new_meta += data_len;</div><div class='add'>+    }</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment DICT_CLEANUP</div><div class='del'>-cleanup_@ARGNAME@:</div><div class='del'>-        dict_unref (@ARGNAME@);</div><div class='add'>+cleanup_ @ARGNAME @ : dict_unref(@ARGNAME @);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment DOUBLE</div><div class='del'>-        @ARGTYPE@       @ARGNAME@       = *((@ARGTYPE@ *)new_meta);</div><div class='del'>-        new_meta += sizeof(uint64_t);</div><div class='add'>+@ARGTYPE @ @ARGNAME @ = *((@ARGTYPE @ *)new_meta);</div><div class='add'>+new_meta += sizeof(uint64_t);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment FD</div><div class='del'>-        inode_t *@ARGNAME@_ino;</div><div class='del'>-        fd_t    *@ARGNAME@;</div><div class='add'>+inode_t *@ARGNAME @_ino;</div><div class='add'>+fd_t *@ARGNAME @;</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@_ino = recon_get_inode (fs, *((uuid_t *)new_meta));</div><div class='del'>-        new_meta += 16;</div><div class='del'>-        if (!@ARGNAME@_ino) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@_ino;</div><div class='add'>+@ARGNAME @_ino = recon_get_inode(fs, *((uuid_t *)new_meta));</div><div class='add'>+new_meta += 16;</div><div class='add'>+if (!@ARGNAME @_ino) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @_ino;</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@ = fd_anonymous (@ARGNAME@_ino);</div><div class='del'>-        if (!@ARGNAME@) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@;</div><div class='add'>+@ARGNAME @ = fd_anonymous(@ARGNAME @_ino);</div><div class='add'>+if (!@ARGNAME @) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment FD_CLEANUP</div><div class='del'>-cleanup_@ARGNAME@:</div><div class='del'>-        fd_unref (@ARGNAME@);</div><div class='del'>-cleanup_@ARGNAME@_ino:</div><div class='del'>-        inode_unref (@ARGNAME@_ino);</div><div class='add'>+cleanup_ @ARGNAME @ : fd_unref(@ARGNAME @);</div><div class='add'>+cleanup_ @ARGNAME @_ino : inode_unref(@ARGNAME @_ino);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment NEW_FD</div><div class='del'>-        /*</div><div class='del'>-         * This pseudo-type is only used for create, and in that case we know</div><div class='del'>-         * we'll be using loc.inode, so it's not worth generalizing to take an</div><div class='del'>-         * extra argument.</div><div class='del'>-         */</div><div class='del'>-        fd_t    *@ARGNAME@      = fd_anonymous (loc.inode);</div><div class='del'>-</div><div class='del'>-        if (!fd) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@;</div><div class='del'>-        new_meta += 16;</div><div class='add'>+/*</div><div class='add'>+ * This pseudo-type is only used for create, and in that case we know</div><div class='add'>+ * we'll be using loc.inode, so it's not worth generalizing to take an</div><div class='add'>+ * extra argument.</div><div class='add'>+ */</div><div class='add'>+fd_t *@ARGNAME @ = fd_anonymous(loc.inode);</div><div class='add'>+</div><div class='add'>+if (!fd) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @;</div><div class='add'>+new_meta += 16;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment NEW_FD_CLEANUP</div><div class='del'>-cleanup_@ARGNAME@:</div><div class='del'>-        fd_unref (@ARGNAME@);</div><div class='add'>+cleanup_ @ARGNAME @ : fd_unref(@ARGNAME @);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment INTEGER</div><div class='del'>-        @ARGTYPE@       @ARGNAME@       = *((@ARGTYPE@ *)new_meta);</div><div class='add'>+@ARGTYPE @ @ARGNAME @ = *((@ARGTYPE @ *)new_meta);</div><div class='ctx'> </div><div class='del'>-        new_meta += sizeof(@ARGTYPE@);</div><div class='add'>+new_meta += sizeof(@ARGTYPE @);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment LOC</div><div class='del'>-        loc_t           @ARGNAME@       = { NULL, };</div><div class='add'>+loc_t @ARGNAME @ = {</div><div class='add'>+    NULL,</div><div class='add'>+};</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@.inode = recon_get_inode (fs, *((uuid_t *)new_meta));</div><div class='del'>-        if (!@ARGNAME@.inode) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@;</div><div class='del'>-        gf_uuid_copy (@ARGNAME@.gfid, @ARGNAME@.inode-&gt;gfid);</div><div class='del'>-        new_meta += 16;</div><div class='del'>-        new_meta += 16; /* skip over pargfid */</div><div class='del'>-        if (*(new_meta++)) {</div><div class='del'>-                @ARGNAME@.name = new_meta;</div><div class='del'>-                new_meta += strlen(new_meta) + 1;</div><div class='del'>-        }</div><div class='add'>+@ARGNAME @.inode = recon_get_inode(fs, *((uuid_t *)new_meta));</div><div class='add'>+if (!@ARGNAME @.inode) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @;</div><div class='add'>+gf_uuid_copy(@ARGNAME @.gfid, @ARGNAME @.inode-&gt;gfid);</div><div class='add'>+new_meta += 16;</div><div class='add'>+new_meta += 16; /* skip over pargfid */</div><div class='add'>+if (*(new_meta++)) {</div><div class='add'>+    @ARGNAME @.name = new_meta;</div><div class='add'>+    new_meta += strlen(new_meta) + 1;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment LOC_CLEANUP</div><div class='del'>-cleanup_@ARGNAME@:</div><div class='del'>-        loc_wipe (&amp;@ARGNAME@);</div><div class='add'>+cleanup_ @ARGNAME @ : loc_wipe(&amp;@ARGNAME @);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment PARENT_LOC</div><div class='del'>-        loc_t           @ARGNAME@       = { NULL, };</div><div class='del'>-</div><div class='del'>-        new_meta += 16; /* skip over gfid */</div><div class='del'>-        @ARGNAME@.parent = recon_get_inode (fs, *((uuid_t *)new_meta));</div><div class='del'>-        if (!@ARGNAME@.parent) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@;</div><div class='del'>-        gf_uuid_copy (@ARGNAME@.pargfid, @ARGNAME@.parent-&gt;gfid);</div><div class='del'>-        new_meta += 16;</div><div class='del'>-        if (!*(new_meta++)) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        @ARGNAME@.name = new_meta;</div><div class='del'>-        new_meta += strlen(new_meta) + 1;</div><div class='add'>+loc_t @ARGNAME @ = {</div><div class='add'>+    NULL,</div><div class='add'>+};</div><div class='add'>+</div><div class='add'>+new_meta += 16; /* skip over gfid */</div><div class='add'>+@ARGNAME @.parent = recon_get_inode(fs, *((uuid_t *)new_meta));</div><div class='add'>+if (!@ARGNAME @.parent) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @;</div><div class='add'>+gf_uuid_copy(@ARGNAME @.pargfid, @ARGNAME @.parent-&gt;gfid);</div><div class='add'>+new_meta += 16;</div><div class='add'>+if (!*(new_meta++)) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+@ARGNAME @.name = new_meta;</div><div class='add'>+new_meta += strlen(new_meta) + 1;</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@.inode = inode_new (fs-&gt;active_subvol-&gt;itable);</div><div class='del'>-        if (!@ARGNAME@.inode) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='add'>+@ARGNAME @.inode = inode_new(fs-&gt;active_subvol-&gt;itable);</div><div class='add'>+if (!@ARGNAME @.inode) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment PARENT_LOC_CLEANUP</div><div class='del'>-cleanup_@ARGNAME@:</div><div class='del'>-        loc_wipe (&amp;@ARGNAME@);</div><div class='add'>+cleanup_ @ARGNAME @ : loc_wipe(&amp;@ARGNAME @);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment STRING</div><div class='del'>-        char    *@ARGNAME@;</div><div class='del'>-        if (*(new_meta++)) {</div><div class='del'>-                @ARGNAME@ = new_meta;</div><div class='del'>-                new_meta += (strlen(new_meta) + 1);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='add'>+char *@ARGNAME @;</div><div class='add'>+if (*(new_meta++)) {</div><div class='add'>+    @ARGNAME @ = new_meta;</div><div class='add'>+    new_meta += (strlen(new_meta) + 1);</div><div class='add'>+} else {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment VECTOR</div><div class='del'>-        struct iovec    @ARGNAME@;</div><div class='add'>+struct iovec @ARGNAME @;</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@.iov_len = *((size_t *)new_meta);</div><div class='del'>-        new_meta += sizeof(@ARGNAME@.iov_len);</div><div class='del'>-        @ARGNAME@.iov_base = new_data;</div><div class='del'>-        new_data += @ARGNAME@.iov_len;</div><div class='add'>+@ARGNAME @.iov_len = *((size_t *)new_meta);</div><div class='add'>+new_meta += sizeof(@ARGNAME @.iov_len);</div><div class='add'>+@ARGNAME @.iov_base = new_data;</div><div class='add'>+new_data += @ARGNAME @.iov_len;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment IATT</div><div class='del'>-        struct iatt     @ARGNAME@;</div><div class='del'>-        {</div><div class='del'>-                @ARGNAME@.ia_prot = *((ia_prot_t *)new_meta);</div><div class='del'>-                new_meta += sizeof(ia_prot_t);</div><div class='del'>-                uint32_t *myints = (uint32_t *)new_meta;</div><div class='del'>-                @ARGNAME@.ia_uid = myints[0];</div><div class='del'>-                @ARGNAME@.ia_gid = myints[1];</div><div class='del'>-                @ARGNAME@.ia_atime = myints[2];</div><div class='del'>-                @ARGNAME@.ia_atime_nsec = myints[3];</div><div class='del'>-                @ARGNAME@.ia_mtime = myints[4];</div><div class='del'>-                @ARGNAME@.ia_mtime_nsec = myints[5];</div><div class='del'>-                new_meta += sizeof(*myints) * 6;</div><div class='del'>-        }</div><div class='add'>+struct iatt @ARGNAME @;</div><div class='add'>+{</div><div class='add'>+    @ARGNAME @.ia_prot = *((ia_prot_t *)new_meta);</div><div class='add'>+    new_meta += sizeof(ia_prot_t);</div><div class='add'>+    uint32_t *myints = (uint32_t *)new_meta;</div><div class='add'>+    @ARGNAME @.ia_uid = myints[0];</div><div class='add'>+    @ARGNAME @.ia_gid = myints[1];</div><div class='add'>+    @ARGNAME @.ia_atime = myints[2];</div><div class='add'>+    @ARGNAME @.ia_atime_nsec = myints[3];</div><div class='add'>+    @ARGNAME @.ia_mtime = myints[4];</div><div class='add'>+    @ARGNAME @.ia_mtime_nsec = myints[5];</div><div class='add'>+    new_meta += sizeof(*myints) * 6;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment IOBREF</div><div class='del'>-        struct iobref   *@ARGNAME@;</div><div class='add'>+struct iobref *@ARGNAME @;</div><div class='ctx'> </div><div class='del'>-        @ARGNAME@ = iobref_new();</div><div class='del'>-        if (!@ARGNAME@) {</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='del'>-        err_label = &amp;&amp;cleanup_@ARGNAME@;</div><div class='add'>+@ARGNAME @ = iobref_new();</div><div class='add'>+if (!@ARGNAME @) {</div><div class='add'>+    goto *err_label;</div><div class='add'>+}</div><div class='add'>+err_label = &amp;&amp;cleanup_ @ARGNAME @;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment IOBREF_CLEANUP</div><div class='del'>-cleanup_@ARGNAME@:</div><div class='del'>-        iobref_unref (@ARGNAME@);</div><div class='add'>+cleanup_ @ARGNAME @ : iobref_unref(@ARGNAME @);</div><div class='ctx'> </div><div class='ctx'> #pragma fragment LINK</div><div class='del'>-        /* TBD: check error */</div><div class='del'>-        inode_t *new_inode = inode_link (@INODE_ARG@, NULL, NULL, @IATT_ARG@);</div><div class='del'>-        if (new_inode) {</div><div class='del'>-                inode_lookup (new_inode);</div><div class='del'>-        }</div><div class='add'>+/* TBD: check error */</div><div class='add'>+inode_t *new_inode = inode_link(@INODE_ARG @, NULL, NULL, @IATT_ARG @);</div><div class='add'>+if (new_inode) {</div><div class='add'>+    inode_lookup(new_inode);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #pragma fragment FOP</div><div class='del'>-int</div><div class='del'>-fdl_replay_@NAME@ (glfs_t *fs, char **old_meta, char **old_data)</div><div class='add'>+int fdl_replay_ @NAME @(glfs_t *fs, char **old_meta, char **old_data)</div><div class='ctx'> {</div><div class='del'>-        char    *new_meta	= *old_meta;</div><div class='del'>-        char	*new_data	= *old_data;</div><div class='del'>-        int     ret;</div><div class='del'>-        int     status          = 0xbad;</div><div class='del'>-        void    *err_label      = &amp;&amp;done;</div><div class='del'>-</div><div class='del'>-@FUNCTION_BODY@</div><div class='del'>-</div><div class='del'>-        ret = syncop_@NAME@ (fs-&gt;active_subvol, @SYNCOP_ARGS@, NULL);</div><div class='del'>-        if (ret != @SUCCESS_VALUE@) {</div><div class='del'>-                fprintf (stderr, "syncop_@NAME@ returned %d", ret);</div><div class='del'>-                goto *err_label;</div><div class='del'>-        }</div><div class='add'>+    char *new_meta = *old_meta;</div><div class='add'>+    char *new_data = *old_data;</div><div class='add'>+    int ret;</div><div class='add'>+    int status = 0xbad;</div><div class='add'>+    void *err_label = &amp;&amp;done;</div><div class='ctx'> </div><div class='del'>-@LINKS@</div><div class='add'>+    @FUNCTION_BODY @</div><div class='add'>+</div><div class='add'>+        ret = syncop_ @NAME @(fs-&gt;active_subvol, @SYNCOP_ARGS @, NULL);</div><div class='add'>+    if (ret != @SUCCESS_VALUE @) {</div><div class='add'>+        fprintf(stderr, "syncop_@NAME@ returned %d", ret);</div><div class='add'>+        goto *err_label;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    @LINKS @</div><div class='ctx'> </div><div class='ctx'>         status = 0;</div><div class='ctx'> </div><div class='del'>-@CLEANUPS@</div><div class='add'>+    @CLEANUPS @</div><div class='ctx'> </div><div class='del'>-done:</div><div class='del'>-        *old_meta = new_meta;</div><div class='del'>-        *old_data = new_data;</div><div class='del'>-        return status;</div><div class='add'>+        done : *old_meta = new_meta;</div><div class='add'>+    *old_data = new_data;</div><div class='add'>+    return status;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma fragment CASE</div><div class='del'>-        case GF_FOP_@UPNAME@:</div><div class='del'>-                printf ("=== GF_FOP_@UPNAME@\n");</div><div class='del'>-                if (fdl_replay_@NAME@ (fs, &amp;new_meta, &amp;new_data) != 0) {</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-                recognized = 1;</div><div class='del'>-                break;</div><div class='add'>+case GF_FOP_ @UPNAME @:</div><div class='add'>+    printf("=== GF_FOP_@UPNAME@\n");</div><div class='add'>+    if (fdl_replay_ @NAME @(fs, &amp;new_meta, &amp;new_data) != 0) {</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+    recognized = 1;</div><div class='add'>+    break;</div><div class='ctx'> </div><div class='ctx'> #pragma fragment EPILOG</div><div class='del'>-int</div><div class='del'>-recon_execute (glfs_t *fs, char **old_meta, char **old_data)</div><div class='del'>-{</div><div class='del'>-        char            *new_meta       = *old_meta;</div><div class='del'>-        char            *new_data       = *old_data;</div><div class='del'>-        int             recognized      = 0;</div><div class='del'>-        event_header_t  *eh;</div><div class='add'>+    int</div><div class='add'>+    recon_execute(glfs_t *fs, char **old_meta, char **old_data)</div><div class='add'>+    {</div><div class='add'>+        char *new_meta = *old_meta;</div><div class='add'>+        char *new_data = *old_data;</div><div class='add'>+        int recognized = 0;</div><div class='add'>+        event_header_t *eh;</div><div class='ctx'> </div><div class='ctx'>         eh = (event_header_t *)new_meta;</div><div class='del'>-        new_meta += sizeof (*eh);</div><div class='add'>+        new_meta += sizeof(*eh);</div><div class='ctx'> </div><div class='ctx'>         /* TBD: check event_type instead of assuming NEW_REQUEST */</div><div class='ctx'> </div><div class='ctx'>         switch (eh-&gt;fop_type) {</div><div class='del'>-@SWITCH_BODY@</div><div class='add'>+            @SWITCH_BODY @</div><div class='ctx'> </div><div class='del'>-        default:</div><div class='del'>-                printf ("unknown fop %u\n", eh-&gt;fop_type);</div><div class='add'>+                default : printf("unknown fop %u\n", eh-&gt;fop_type);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-done:</div><div class='add'>+    done:</div><div class='ctx'>         *old_meta = new_meta;</div><div class='ctx'>         *old_data = new_data;</div><div class='ctx'>         return recognized;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='head'>diff --git a/xlators/experimental/fdl/src/recon.c b/xlators/experimental/fdl/src/recon.c<br/>index 14168a011e0..ec1bf37dad9 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/recon.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/fdl/src/recon.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/fdl/src/recon.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/fdl/src/recon.c</a></div><div class='hunk'>@@ -11,79 +11,79 @@</div><div class='ctx'> </div><div class='ctx'> #define GFAPI_SUCCESS 0</div><div class='ctx'> </div><div class='del'>-extern int recon_execute (glfs_t *, char **, char **);</div><div class='add'>+extern int</div><div class='add'>+recon_execute(glfs_t *, char **, char **);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        glfs_t  *fs;</div><div class='del'>-        int     ret;</div><div class='del'>-        int     meta_fd         = (-1);</div><div class='del'>-        char    *meta_buf       = NULL;</div><div class='del'>-        int     data_fd         = (-1);</div><div class='del'>-        char    *data_buf       = NULL;</div><div class='add'>+    glfs_t *fs;</div><div class='add'>+    int ret;</div><div class='add'>+    int meta_fd = (-1);</div><div class='add'>+    char *meta_buf = NULL;</div><div class='add'>+    int data_fd = (-1);</div><div class='add'>+    char *data_buf = NULL;</div><div class='ctx'> </div><div class='del'>-        fs = glfs_new ("whocares");</div><div class='del'>-        if (!fs) {</div><div class='del'>-                fprintf (stderr, "glfs_new failed\n");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    fs = glfs_new("whocares");</div><div class='add'>+    if (!fs) {</div><div class='add'>+        fprintf(stderr, "glfs_new failed\n");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (getenv("RECON_DEBUG")) {</div><div class='del'>-                ret = glfs_set_logging (fs, "/dev/stderr", 7);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                ret = glfs_set_logging (fs, "/dev/null", 0);</div><div class='del'>-        }</div><div class='add'>+    if (getenv("RECON_DEBUG")) {</div><div class='add'>+        ret = glfs_set_logging(fs, "/dev/stderr", 7);</div><div class='add'>+    } else {</div><div class='add'>+        ret = glfs_set_logging(fs, "/dev/null", 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret != GFAPI_SUCCESS) {</div><div class='del'>-                fprintf (stderr, "glfs_set_logging failed (%d)\n", errno);</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    if (ret != GFAPI_SUCCESS) {</div><div class='add'>+        fprintf(stderr, "glfs_set_logging failed (%d)\n", errno);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_set_volfile (fs, argv[1]);</div><div class='del'>-        if (ret != GFAPI_SUCCESS) {</div><div class='del'>-                fprintf (stderr, "glfs_set_volfile failed (%d)\n", errno);</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_set_volfile(fs, argv[1]);</div><div class='add'>+    if (ret != GFAPI_SUCCESS) {</div><div class='add'>+        fprintf(stderr, "glfs_set_volfile failed (%d)\n", errno);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = glfs_init (fs);</div><div class='del'>-        if (ret != GFAPI_SUCCESS) {</div><div class='del'>-                fprintf (stderr, "glfs_init failed (%d)\n", errno);</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    ret = glfs_init(fs);</div><div class='add'>+    if (ret != GFAPI_SUCCESS) {</div><div class='add'>+        fprintf(stderr, "glfs_init failed (%d)\n", errno);</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        meta_fd = open (argv[2], O_RDONLY);</div><div class='del'>-        if (meta_fd &lt; 0) {</div><div class='del'>-                perror ("open");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    meta_fd = open(argv[2], O_RDONLY);</div><div class='add'>+    if (meta_fd &lt; 0) {</div><div class='add'>+        perror("open");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TBD: get proper length */</div><div class='del'>-        meta_buf = mmap (NULL, 1048576, PROT_READ, MAP_PRIVATE, meta_fd, 0);</div><div class='del'>-        if (meta_buf == MAP_FAILED) {</div><div class='del'>-                perror ("mmap");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    /* TBD: get proper length */</div><div class='add'>+    meta_buf = mmap(NULL, 1048576, PROT_READ, MAP_PRIVATE, meta_fd, 0);</div><div class='add'>+    if (meta_buf == MAP_FAILED) {</div><div class='add'>+        perror("mmap");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data_fd = open (argv[3], O_RDONLY);</div><div class='del'>-        if (data_fd &lt; 0) {</div><div class='del'>-                perror ("open");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    data_fd = open(argv[3], O_RDONLY);</div><div class='add'>+    if (data_fd &lt; 0) {</div><div class='add'>+        perror("open");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TBD: get proper length */</div><div class='del'>-        data_buf = mmap (NULL, 1048576, PROT_READ, MAP_PRIVATE, data_fd, 0);</div><div class='del'>-        if (data_buf == MAP_FAILED) {</div><div class='del'>-                perror ("mmap");</div><div class='del'>-                return EXIT_FAILURE;</div><div class='del'>-        }</div><div class='add'>+    /* TBD: get proper length */</div><div class='add'>+    data_buf = mmap(NULL, 1048576, PROT_READ, MAP_PRIVATE, data_fd, 0);</div><div class='add'>+    if (data_buf == MAP_FAILED) {</div><div class='add'>+        perror("mmap");</div><div class='add'>+        return EXIT_FAILURE;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                if (!recon_execute(fs,&amp;meta_buf,&amp;data_buf)) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (;;) {</div><div class='add'>+        if (!recon_execute(fs, &amp;meta_buf, &amp;data_buf)) {</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return EXIT_SUCCESS;</div><div class='add'>+    return EXIT_SUCCESS;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/experimental/jbr-client/src/fop-template.c b/xlators/experimental/jbr-client/src/fop-template.c<br/>index 7719f511f01..d2f2212c480 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-client/src/fop-template.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/jbr-client/src/fop-template.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-client/src/fop-template.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-client/src/fop-template.c</a></div><div class='hunk'>@@ -1,113 +1,104 @@</div><div class='ctx'> /* template-name fop */</div><div class='del'>-int32_t</div><div class='del'>-jbrc_@NAME@ (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             @LONG_ARGS@)</div><div class='add'>+int32_t jbrc_ @NAME @(call_frame_t *frame, xlator_t *this, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbrc_local_t    *local          = NULL;</div><div class='del'>-        xlator_t        *target_xl      = ACTIVE_CHILD(this);</div><div class='add'>+    jbrc_local_t *local = NULL;</div><div class='add'>+    xlator_t *target_xl = ACTIVE_CHILD(this);</div><div class='ctx'> </div><div class='del'>-        local = mem_get(this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    local = mem_get(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;stub = fop_@NAME@_stub (frame, jbrc_@NAME@_continue,</div><div class='del'>-                                       @SHORT_ARGS@);</div><div class='del'>-        if (!local-&gt;stub) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        local-&gt;curr_xl = target_xl;</div><div class='del'>-        local-&gt;scars = 0;</div><div class='add'>+    local-&gt;stub = fop_ @NAME</div><div class='add'>+        @_stub(frame, jbrc_ @NAME @_continue, @SHORT_ARGS @);</div><div class='add'>+    if (!local-&gt;stub) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    local-&gt;curr_xl = target_xl;</div><div class='add'>+    local-&gt;scars = 0;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        STACK_WIND_COOKIE (frame, jbrc_@NAME@_cbk, target_xl,</div><div class='del'>-                    target_xl, target_xl-&gt;fops-&gt;@NAME@,</div><div class='del'>-                    @SHORT_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    STACK_WIND_COOKIE(frame, jbrc_ @NAME @_cbk, target_xl, target_xl,</div><div class='add'>+                      target_xl-&gt;fops-&gt;@NAME @, @SHORT_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (local) {</div><div class='del'>-                mem_put(local);</div><div class='del'>-        }</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, -1, ENOMEM,</div><div class='del'>-                             @ERROR_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    if (local) {</div><div class='add'>+        mem_put(local);</div><div class='add'>+    }</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, -1, ENOMEM, @ERROR_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name cbk */</div><div class='del'>-int32_t</div><div class='del'>-jbrc_@NAME@_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 @LONG_ARGS@)</div><div class='add'>+int32_t jbrc_ @NAME @_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbrc_local_t    *local          = frame-&gt;local;</div><div class='del'>-        xlator_t        *last_xl        = cookie;</div><div class='del'>-        xlator_t        *next_xl;</div><div class='del'>-        jbrc_private_t  *priv           = this-&gt;private;</div><div class='del'>-        struct timespec spec;</div><div class='add'>+    jbrc_local_t *local = frame-&gt;local;</div><div class='add'>+    xlator_t *last_xl = cookie;</div><div class='add'>+    xlator_t *next_xl;</div><div class='add'>+    jbrc_private_t *priv = this-&gt;private;</div><div class='add'>+    struct timespec spec;</div><div class='ctx'> </div><div class='del'>-        if (op_ret != (-1)) {</div><div class='del'>-                if (local-&gt;scars) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, J_MSG_RETRY_MSG,</div><div class='del'>-                                HILITE("retried %p OK"), frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-                priv-&gt;active = last_xl;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        if ((op_errno != EREMOTE) &amp;&amp; (op_errno != ENOTCONN)) {</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret != (-1)) {</div><div class='add'>+        if (local-&gt;scars) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_RETRY_MSG,</div><div class='add'>+                   HILITE("retried %p OK"), frame-&gt;local);</div><div class='ctx'>         }</div><div class='add'>+        priv-&gt;active = last_xl;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    if ((op_errno != EREMOTE) &amp;&amp; (op_errno != ENOTCONN)) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* TBD: get leader ID from xdata? */</div><div class='del'>-        next_xl = next_xlator(this, last_xl);</div><div class='del'>-        /*</div><div class='del'>-         * We can't just give up after we've tried all bricks, because it's</div><div class='del'>-         * quite likely that a new leader election just hasn't finished yet.</div><div class='del'>-         * We also shouldn't retry endlessly, and especially not at a high</div><div class='del'>-         * rate, but that's good enough while we work on other things.</div><div class='del'>-         *</div><div class='del'>-         * TBD: implement slow/finite retry via a worker thread</div><div class='del'>-         */</div><div class='del'>-        if (!next_xl || (local-&gt;scars &gt;= SCAR_LIMIT)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_DEBUG, 0, J_MSG_RETRY_MSG,</div><div class='del'>-                        HILITE("ran out of retries for %p"), frame-&gt;local);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    /* TBD: get leader ID from xdata? */</div><div class='add'>+    next_xl = next_xlator(this, last_xl);</div><div class='add'>+    /*</div><div class='add'>+     * We can't just give up after we've tried all bricks, because it's</div><div class='add'>+     * quite likely that a new leader election just hasn't finished yet.</div><div class='add'>+     * We also shouldn't retry endlessly, and especially not at a high</div><div class='add'>+     * rate, but that's good enough while we work on other things.</div><div class='add'>+     *</div><div class='add'>+     * TBD: implement slow/finite retry via a worker thread</div><div class='add'>+     */</div><div class='add'>+    if (!next_xl || (local-&gt;scars &gt;= SCAR_LIMIT)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, J_MSG_RETRY_MSG,</div><div class='add'>+               HILITE("ran out of retries for %p"), frame-&gt;local);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;curr_xl = next_xl;</div><div class='del'>-        local-&gt;scars += 1;</div><div class='del'>-        spec.tv_sec = 1;</div><div class='del'>-        spec.tv_nsec = 0;</div><div class='del'>-        /*</div><div class='del'>-         * WARNING</div><div class='del'>-         *</div><div class='del'>-         * Just calling gf_timer_call_after like this leaves open the</div><div class='del'>-         * possibility that writes will get reordered, if a first write is</div><div class='del'>-         * rescheduled and then a second comes along to find an updated</div><div class='del'>-         * priv-&gt;active before the first actually executes.  We might need to</div><div class='del'>-         * implement a stricter (and more complicated) queuing mechanism to</div><div class='del'>-         * ensure absolute consistency in this case.</div><div class='del'>-         */</div><div class='del'>-        if (gf_timer_call_after(this-&gt;ctx, spec, jbrc_retry_cb, local)) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    local-&gt;curr_xl = next_xl;</div><div class='add'>+    local-&gt;scars += 1;</div><div class='add'>+    spec.tv_sec = 1;</div><div class='add'>+    spec.tv_nsec = 0;</div><div class='add'>+    /*</div><div class='add'>+     * WARNING</div><div class='add'>+     *</div><div class='add'>+     * Just calling gf_timer_call_after like this leaves open the</div><div class='add'>+     * possibility that writes will get reordered, if a first write is</div><div class='add'>+     * rescheduled and then a second comes along to find an updated</div><div class='add'>+     * priv-&gt;active before the first actually executes.  We might need to</div><div class='add'>+     * implement a stricter (and more complicated) queuing mechanism to</div><div class='add'>+     * ensure absolute consistency in this case.</div><div class='add'>+     */</div><div class='add'>+    if (gf_timer_call_after(this-&gt;ctx, spec, jbrc_retry_cb, local)) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        call_stub_destroy(local-&gt;stub);</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, op_ret, op_errno,</div><div class='del'>-                                     @SHORT_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    call_stub_destroy(local-&gt;stub);</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, op_ret, op_errno, @SHORT_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name cont-func */</div><div class='del'>-int32_t</div><div class='del'>-jbrc_@NAME@_continue (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      @LONG_ARGS@)</div><div class='add'>+int32_t jbrc_ @NAME</div><div class='add'>+    @_continue(call_frame_t *frame, xlator_t *this, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbrc_local_t    *local  = frame-&gt;local;</div><div class='add'>+    jbrc_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, jbrc_@NAME@_cbk, local-&gt;curr_xl,</div><div class='del'>-                           local-&gt;curr_xl, local-&gt;curr_xl-&gt;fops-&gt;@NAME@,</div><div class='del'>-                           @SHORT_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, jbrc_ @NAME @_cbk, local-&gt;curr_xl, local-&gt;curr_xl,</div><div class='add'>+                      local-&gt;curr_xl-&gt;fops-&gt;@NAME @, @SHORT_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/experimental/jbr-client/src/jbrc.c b/xlators/experimental/jbr-client/src/jbrc.c<br/>index 9bb9346c5c0..01c3020e117 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-client/src/jbrc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/jbr-client/src/jbrc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-client/src/jbrc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-client/src/jbrc.c</a></div><div class='hunk'>@@ -20,8 +20,8 @@</div><div class='ctx'> #include "jbrc.h"</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='del'>-#define SCAR_LIMIT      20</div><div class='del'>-#define HILITE(x)       ("[1;33m"x"[0m")</div><div class='add'>+#define SCAR_LIMIT 20</div><div class='add'>+#define HILITE(x) ("[1;33m" x "[0m")</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * The fops are actually generated by gen-fops.py; the rest was mostly copied</div><div class='hunk'>@@ -29,292 +29,283 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> enum gf_dht_mem_types_ {</div><div class='del'>-        gf_mt_jbrc_private_t = gf_common_mt_end + 1,</div><div class='del'>-        gf_mt_jbrc_end</div><div class='add'>+    gf_mt_jbrc_private_t = gf_common_mt_end + 1,</div><div class='add'>+    gf_mt_jbrc_end</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-char            *JBRC_XATTR     = "user.jbr.active";</div><div class='add'>+char *JBRC_XATTR = "user.jbr.active";</div><div class='ctx'> </div><div class='del'>-static inline</div><div class='del'>-xlator_t *</div><div class='del'>-ACTIVE_CHILD (xlator_t *parent)</div><div class='add'>+static inline xlator_t *</div><div class='add'>+ACTIVE_CHILD(xlator_t *parent)</div><div class='ctx'> {</div><div class='del'>-        jbrc_private_t  *priv   = parent-&gt;private;</div><div class='add'>+    jbrc_private_t *priv = parent-&gt;private;</div><div class='ctx'> </div><div class='del'>-        return priv ? priv-&gt;active : FIRST_CHILD(parent);</div><div class='add'>+    return priv ? priv-&gt;active : FIRST_CHILD(parent);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> xlator_t *</div><div class='del'>-next_xlator (xlator_t *this, xlator_t *prev)</div><div class='add'>+next_xlator(xlator_t *this, xlator_t *prev)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *trav;</div><div class='add'>+    xlator_list_t *trav;</div><div class='ctx'> </div><div class='del'>-        for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                if (trav-&gt;xlator == prev) {</div><div class='del'>-                        return trav-&gt;next ? trav-&gt;next-&gt;xlator</div><div class='del'>-                                          : this-&gt;children-&gt;xlator;</div><div class='del'>-                }</div><div class='add'>+    for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        if (trav-&gt;xlator == prev) {</div><div class='add'>+            return trav-&gt;next ? trav-&gt;next-&gt;xlator : this-&gt;children-&gt;xlator;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-jbrc_retry_cb (void *cb_arg)</div><div class='add'>+jbrc_retry_cb(void *cb_arg)</div><div class='ctx'> {</div><div class='del'>-        jbrc_local_t    *local  = cb_arg;</div><div class='add'>+    jbrc_local_t *local = cb_arg;</div><div class='ctx'> </div><div class='del'>-        gf_msg (__func__, GF_LOG_INFO, 0, J_MSG_RETRY_MSG,</div><div class='del'>-                HILITE("retrying %p"), local);</div><div class='del'>-        call_resume_wind(local-&gt;stub);</div><div class='add'>+    gf_msg(__func__, GF_LOG_INFO, 0, J_MSG_RETRY_MSG, HILITE("retrying %p"),</div><div class='add'>+           local);</div><div class='add'>+    call_resume_wind(local-&gt;stub);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma generate</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbrc_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+jbrc_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, 0, J_MSG_INIT_FAIL,</div><div class='del'>-                          "xlator does not implement forget_cbk");</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0, J_MSG_INIT_FAIL,</div><div class='add'>+                     "xlator does not implement forget_cbk");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-jbrc_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+jbrc_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, 0, J_MSG_INIT_FAIL,</div><div class='del'>-                          "xlator does not implement releasedir_cbk");</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0, J_MSG_INIT_FAIL,</div><div class='add'>+                     "xlator does not implement releasedir_cbk");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbrc_release (xlator_t *this, fd_t *fd)</div><div class='add'>+jbrc_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, 0, J_MSG_INIT_FAIL,</div><div class='del'>-                          "xlator does not implement release_cbk");</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0, J_MSG_INIT_FAIL,</div><div class='add'>+                     "xlator does not implement release_cbk");</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup         = jbrc_lookup,</div><div class='del'>-        .stat           = jbrc_stat,</div><div class='del'>-        .fstat          = jbrc_fstat,</div><div class='del'>-        .truncate       = jbrc_truncate,</div><div class='del'>-        .ftruncate      = jbrc_ftruncate,</div><div class='del'>-        .access         = jbrc_access,</div><div class='del'>-        .readlink       = jbrc_readlink,</div><div class='del'>-        .mknod          = jbrc_mknod,</div><div class='del'>-        .mkdir          = jbrc_mkdir,</div><div class='del'>-        .unlink         = jbrc_unlink,</div><div class='del'>-        .rmdir          = jbrc_rmdir,</div><div class='del'>-        .symlink        = jbrc_symlink,</div><div class='del'>-        .rename         = jbrc_rename,</div><div class='del'>-        .link           = jbrc_link,</div><div class='del'>-        .create         = jbrc_create,</div><div class='del'>-        .open           = jbrc_open,</div><div class='del'>-        .readv          = jbrc_readv,</div><div class='del'>-        .writev         = jbrc_writev,</div><div class='del'>-        .flush          = jbrc_flush,</div><div class='del'>-        .fsync          = jbrc_fsync,</div><div class='del'>-        .opendir        = jbrc_opendir,</div><div class='del'>-        .readdir        = jbrc_readdir,</div><div class='del'>-        .readdirp       = jbrc_readdirp,</div><div class='del'>-        .fsyncdir       = jbrc_fsyncdir,</div><div class='del'>-        .statfs         = jbrc_statfs,</div><div class='del'>-        .setxattr       = jbrc_setxattr,</div><div class='del'>-        .getxattr       = jbrc_getxattr,</div><div class='del'>-        .fsetxattr      = jbrc_fsetxattr,</div><div class='del'>-        .fgetxattr      = jbrc_fgetxattr,</div><div class='del'>-        .removexattr    = jbrc_removexattr,</div><div class='del'>-        .fremovexattr   = jbrc_fremovexattr,</div><div class='del'>-        .lk             = jbrc_lk,</div><div class='del'>-        .inodelk        = jbrc_inodelk,</div><div class='del'>-        .finodelk       = jbrc_finodelk,</div><div class='del'>-        .entrylk        = jbrc_entrylk,</div><div class='del'>-        .fentrylk       = jbrc_fentrylk,</div><div class='del'>-        .rchecksum      = jbrc_rchecksum,</div><div class='del'>-        .xattrop        = jbrc_xattrop,</div><div class='del'>-        .fxattrop       = jbrc_fxattrop,</div><div class='del'>-        .setattr        = jbrc_setattr,</div><div class='del'>-        .fsetattr       = jbrc_fsetattr,</div><div class='del'>-	.fallocate	= jbrc_fallocate,</div><div class='del'>-	.discard        = jbrc_discard,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='add'>+    .lookup = jbrc_lookup,</div><div class='add'>+    .stat = jbrc_stat,</div><div class='add'>+    .fstat = jbrc_fstat,</div><div class='add'>+    .truncate = jbrc_truncate,</div><div class='add'>+    .ftruncate = jbrc_ftruncate,</div><div class='add'>+    .access = jbrc_access,</div><div class='add'>+    .readlink = jbrc_readlink,</div><div class='add'>+    .mknod = jbrc_mknod,</div><div class='add'>+    .mkdir = jbrc_mkdir,</div><div class='add'>+    .unlink = jbrc_unlink,</div><div class='add'>+    .rmdir = jbrc_rmdir,</div><div class='add'>+    .symlink = jbrc_symlink,</div><div class='add'>+    .rename = jbrc_rename,</div><div class='add'>+    .link = jbrc_link,</div><div class='add'>+    .create = jbrc_create,</div><div class='add'>+    .open = jbrc_open,</div><div class='add'>+    .readv = jbrc_readv,</div><div class='add'>+    .writev = jbrc_writev,</div><div class='add'>+    .flush = jbrc_flush,</div><div class='add'>+    .fsync = jbrc_fsync,</div><div class='add'>+    .opendir = jbrc_opendir,</div><div class='add'>+    .readdir = jbrc_readdir,</div><div class='add'>+    .readdirp = jbrc_readdirp,</div><div class='add'>+    .fsyncdir = jbrc_fsyncdir,</div><div class='add'>+    .statfs = jbrc_statfs,</div><div class='add'>+    .setxattr = jbrc_setxattr,</div><div class='add'>+    .getxattr = jbrc_getxattr,</div><div class='add'>+    .fsetxattr = jbrc_fsetxattr,</div><div class='add'>+    .fgetxattr = jbrc_fgetxattr,</div><div class='add'>+    .removexattr = jbrc_removexattr,</div><div class='add'>+    .fremovexattr = jbrc_fremovexattr,</div><div class='add'>+    .lk = jbrc_lk,</div><div class='add'>+    .inodelk = jbrc_inodelk,</div><div class='add'>+    .finodelk = jbrc_finodelk,</div><div class='add'>+    .entrylk = jbrc_entrylk,</div><div class='add'>+    .fentrylk = jbrc_fentrylk,</div><div class='add'>+    .rchecksum = jbrc_rchecksum,</div><div class='add'>+    .xattrop = jbrc_xattrop,</div><div class='add'>+    .fxattrop = jbrc_fxattrop,</div><div class='add'>+    .setattr = jbrc_setattr,</div><div class='add'>+    .fsetattr = jbrc_fsetattr,</div><div class='add'>+    .fallocate = jbrc_fallocate,</div><div class='add'>+    .discard = jbrc_discard,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbrc", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbrc", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_mt_jbrc_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_mt_jbrc_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, J_MSG_MEM_ERR,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, J_MSG_MEM_ERR,</div><div class='add'>+               "Memory accounting init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-jbrc_init (xlator_t *this)</div><div class='add'>+jbrc_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        jbrc_private_t  *priv   = NULL;</div><div class='del'>-        xlator_list_t   *trav   = NULL;</div><div class='del'>-</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (jbrc_local_t, 128);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, J_MSG_MEM_ERR,</div><div class='del'>-                        "failed to create jbrc_local_t pool");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    jbrc_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_mt_jbrc_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(jbrc_local_t, 128);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, J_MSG_MEM_ERR,</div><div class='add'>+               "failed to create jbrc_local_t pool");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                ++(priv-&gt;n_children);</div><div class='del'>-        }</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_mt_jbrc_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;active = FIRST_CHILD(this);</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        return 0;</div><div class='add'>+    for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        ++(priv-&gt;n_children);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;active = FIRST_CHILD(this);</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (priv) {</div><div class='del'>-                GF_FREE(priv);</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    if (priv) {</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-jbrc_fini (xlator_t *this)</div><div class='add'>+jbrc_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE(this-&gt;private);</div><div class='add'>+    GF_FREE(this-&gt;private);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-jbrc_get_child_index (xlator_t *this, xlator_t *kid)</div><div class='add'>+jbrc_get_child_index(xlator_t *this, xlator_t *kid)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-        int             retval = -1;</div><div class='del'>-</div><div class='del'>-        for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                ++retval;</div><div class='del'>-                if (trav-&gt;xlator == kid) {</div><div class='del'>-                        return retval;</div><div class='del'>-                }</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+    int retval = -1;</div><div class='add'>+</div><div class='add'>+    for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        ++retval;</div><div class='add'>+        if (trav-&gt;xlator == kid) {</div><div class='add'>+            return retval;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint8_t</div><div class='del'>-jbrc_count_up_kids (jbrc_private_t *priv)</div><div class='add'>+jbrc_count_up_kids(jbrc_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        uint8_t         retval  = 0;</div><div class='del'>-        uint8_t         i;</div><div class='add'>+    uint8_t retval = 0;</div><div class='add'>+    uint8_t i;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;n_children; ++i) {</div><div class='del'>-                if (priv-&gt;kid_state &amp; (1 &lt;&lt; i)) {</div><div class='del'>-                        ++retval;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;n_children; ++i) {</div><div class='add'>+        if (priv-&gt;kid_state &amp; (1 &lt;&lt; i)) {</div><div class='add'>+            ++retval;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return retval;</div><div class='add'>+    return retval;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbrc_notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+jbrc_notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int32_t           ret        = 0;</div><div class='del'>-        int32_t           index      = 0;</div><div class='del'>-        jbrc_private_t   *priv       = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t index = 0;</div><div class='add'>+    jbrc_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_CHILD_UP:</div><div class='del'>-                index = jbrc_get_child_index(this, data);</div><div class='del'>-                if (index &gt;= 0) {</div><div class='del'>-                        priv-&gt;kid_state |= (1 &lt;&lt; index);</div><div class='del'>-                        priv-&gt;up_children = jbrc_count_up_kids(priv);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='del'>-                                "got CHILD_UP for %s, now %u kids",</div><div class='del'>-                                ((xlator_t *)data)-&gt;name,</div><div class='del'>-                                priv-&gt;up_children);</div><div class='del'>-                }</div><div class='del'>-                ret = default_notify (this, event, data);</div><div class='del'>-                break;</div><div class='add'>+            index = jbrc_get_child_index(this, data);</div><div class='add'>+            if (index &gt;= 0) {</div><div class='add'>+                priv-&gt;kid_state |= (1 &lt;&lt; index);</div><div class='add'>+                priv-&gt;up_children = jbrc_count_up_kids(priv);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                       "got CHILD_UP for %s, now %u kids",</div><div class='add'>+                       ((xlator_t *)data)-&gt;name, priv-&gt;up_children);</div><div class='add'>+            }</div><div class='add'>+            ret = default_notify(this, event, data);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_EVENT_CHILD_DOWN:</div><div class='del'>-                index = jbrc_get_child_index(this, data);</div><div class='del'>-                if (index &gt;= 0) {</div><div class='del'>-                        priv-&gt;kid_state &amp;= ~(1 &lt;&lt; index);</div><div class='del'>-                        priv-&gt;up_children = jbrc_count_up_kids(priv);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='del'>-                                "got CHILD_DOWN for %s, now %u kids",</div><div class='del'>-                                ((xlator_t *)data)-&gt;name,</div><div class='del'>-                                priv-&gt;up_children);</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            index = jbrc_get_child_index(this, data);</div><div class='add'>+            if (index &gt;= 0) {</div><div class='add'>+                priv-&gt;kid_state &amp;= ~(1 &lt;&lt; index);</div><div class='add'>+                priv-&gt;up_children = jbrc_count_up_kids(priv);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                       "got CHILD_DOWN for %s, now %u kids",</div><div class='add'>+                       ((xlator_t *)data)-&gt;name, priv-&gt;up_children);</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = default_notify (this, event, data);</div><div class='del'>-        }</div><div class='add'>+            ret = default_notify(this, event, data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-jbrc_priv_dump (xlator_t *this)</div><div class='add'>+jbrc_priv_dump(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        jbrc_private_t     *priv = NULL;</div><div class='del'>-        char                key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-        xlator_list_t      *trav = NULL;</div><div class='del'>-        int32_t             i    = -1;</div><div class='add'>+    jbrc_private_t *priv = NULL;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN];</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    int32_t i = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (THIS-&gt;name, this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(THIS-&gt;name, this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='ctx'> </div><div class='del'>-        snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "%s.%s",</div><div class='del'>-                 this-&gt;type, this-&gt;name);</div><div class='del'>-        gf_proc_dump_add_section(key_prefix);</div><div class='add'>+    snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "%s.%s", this-&gt;type, this-&gt;name);</div><div class='add'>+    gf_proc_dump_add_section(key_prefix);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write("up_children", "%u", priv-&gt;up_children);</div><div class='add'>+    gf_proc_dump_write("up_children", "%u", priv-&gt;up_children);</div><div class='ctx'> </div><div class='del'>-        for (trav = this-&gt;children, i = 0; trav; trav = trav-&gt;next, i++) {</div><div class='del'>-                snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "child_%d", i);</div><div class='del'>-                gf_proc_dump_write(key_prefix, "%s", trav-&gt;xlator-&gt;name);</div><div class='del'>-        }</div><div class='add'>+    for (trav = this-&gt;children, i = 0; trav; trav = trav-&gt;next, i++) {</div><div class='add'>+        snprintf(key_prefix, GF_DUMP_MAX_BUF_LEN, "child_%d", i);</div><div class='add'>+        gf_proc_dump_write(key_prefix, "%s", trav-&gt;xlator-&gt;name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv       = jbrc_priv_dump,</div><div class='add'>+    .priv = jbrc_priv_dump,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = jbrc_init,</div><div class='del'>-        .fini           = jbrc_fini,</div><div class='del'>-        .notify         = jbrc_notify,</div><div class='add'>+    .init = jbrc_init,</div><div class='add'>+    .fini = jbrc_fini,</div><div class='add'>+    .notify = jbrc_notify,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-	{ .key = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/jbr-server/src/all-templates.c b/xlators/experimental/jbr-server/src/all-templates.c<br/>index 530c4187571..a3ae74fea0f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-server/src/all-templates.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/jbr-server/src/all-templates.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-server/src/all-templates.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-server/src/all-templates.c</a></div><div class='hunk'>@@ -3,46 +3,40 @@</div><div class='ctx'>  * will be ignored until we reach the first template-name comment.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* template-name read-fop */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@ (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @(call_frame_t *frame, xlator_t *this, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbr_private_t   *priv     = NULL;</div><div class='del'>-        gf_boolean_t     in_recon = _gf_false;</div><div class='del'>-        int32_t          op_errno = 0;</div><div class='del'>-        int32_t          recon_term, recon_index;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, err);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, err);</div><div class='del'>-</div><div class='del'>-        op_errno = EREMOTE;</div><div class='del'>-</div><div class='del'>-        /* allow reads during reconciliation       *</div><div class='del'>-         * TBD: allow "dirty" reads on non-leaders *</div><div class='del'>-         */</div><div class='del'>-        if (xdata &amp;&amp;</div><div class='del'>-            (dict_get_int32(xdata, RECON_TERM_XATTR, &amp;recon_term) == 0) &amp;&amp;</div><div class='del'>-            (dict_get_int32(xdata, RECON_INDEX_XATTR, &amp;recon_index) == 0)) {</div><div class='del'>-                in_recon = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((!priv-&gt;leader) &amp;&amp; (in_recon == _gf_false)) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, default_@NAME@_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;@NAME@,</div><div class='del'>-                    @SHORT_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t in_recon = _gf_false;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int32_t recon_term, recon_index;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, err);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, err);</div><div class='add'>+</div><div class='add'>+    op_errno = EREMOTE;</div><div class='add'>+</div><div class='add'>+    /* allow reads during reconciliation       *</div><div class='add'>+     * TBD: allow "dirty" reads on non-leaders *</div><div class='add'>+     */</div><div class='add'>+    if (xdata &amp;&amp; (dict_get_int32(xdata, RECON_TERM_XATTR, &amp;recon_term) == 0) &amp;&amp;</div><div class='add'>+        (dict_get_int32(xdata, RECON_INDEX_XATTR, &amp;recon_index) == 0)) {</div><div class='add'>+        in_recon = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((!priv-&gt;leader) &amp;&amp; (in_recon == _gf_false)) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, default_ @NAME @_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;@NAME @, @SHORT_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, -1, op_errno,</div><div class='del'>-                             @ERROR_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, -1, op_errno, @ERROR_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name read-perform_local_op */</div><div class='hunk'>@@ -64,479 +58,445 @@ err:</div><div class='ctx'> /* No "complete" function needed for @NAME@ */</div><div class='ctx'> </div><div class='ctx'> /* template-name write-fop */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@ (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @(call_frame_t *frame, xlator_t *this, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t     *local         = NULL;</div><div class='del'>-        jbr_private_t   *priv          = NULL;</div><div class='del'>-        int32_t          ret           = -1;</div><div class='del'>-        int              op_errno      = ENOMEM;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, err);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, err);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, err);</div><div class='ctx'> </div><div class='ctx'> #if defined(JBR_CG_NEED_FD)</div><div class='del'>-        ret = jbr_leader_checks_and_init (frame, this, &amp;op_errno, xdata, fd);</div><div class='add'>+    ret = jbr_leader_checks_and_init(frame, this, &amp;op_errno, xdata, fd);</div><div class='ctx'> #else</div><div class='del'>-        ret = jbr_leader_checks_and_init (frame, this, &amp;op_errno, xdata, NULL);</div><div class='add'>+    ret = jbr_leader_checks_and_init(frame, this, &amp;op_errno, xdata, NULL);</div><div class='ctx'> #endif</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * If we let it through despite not being the leader, then we just want</div><div class='del'>-         * to pass it on down without all of the additional xattrs, queuing, and</div><div class='del'>-         * so on.  However, jbr_*_complete does depend on the initialization</div><div class='del'>-         * immediately above this.</div><div class='del'>-         */</div><div class='del'>-        if (!priv-&gt;leader) {</div><div class='del'>-                STACK_WIND (frame, jbr_@NAME@_complete,</div><div class='del'>-                            FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;@NAME@,</div><div class='del'>-                            @SHORT_ARGS@);</div><div class='del'>-                return 0;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If we let it through despite not being the leader, then we just want</div><div class='add'>+     * to pass it on down without all of the additional xattrs, queuing, and</div><div class='add'>+     * so on.  However, jbr_*_complete does depend on the initialization</div><div class='add'>+     * immediately above this.</div><div class='add'>+     */</div><div class='add'>+    if (!priv-&gt;leader) {</div><div class='add'>+        STACK_WIND(frame, jbr_ @NAME @_complete, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;@NAME @, @SHORT_ARGS @);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = jbr_initialize_xdata_set_attrs(this, &amp;xdata);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    local-&gt;stub = fop_ @NAME</div><div class='add'>+        @_stub(frame, jbr_ @NAME @_continue, @SHORT_ARGS @);</div><div class='add'>+    if (!local-&gt;stub) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Can be used to just call_dispatch or be customised per fop to *</div><div class='add'>+     * perform ops specific to that particular fop.                  *</div><div class='add'>+     */</div><div class='add'>+    ret = jbr_ @NAME @_perform_local_op(frame, this, &amp;op_errno, @SHORT_ARGS @);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='add'>+err:</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;stub) {</div><div class='add'>+            call_stub_destroy(local-&gt;stub);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        ret = jbr_initialize_xdata_set_attrs (this, &amp;xdata);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        local-&gt;xdata = dict_ref(xdata);</div><div class='del'>-        local-&gt;stub = fop_@NAME@_stub (frame, jbr_@NAME@_continue,</div><div class='del'>-                                       @SHORT_ARGS@);</div><div class='del'>-        if (!local-&gt;stub) {</div><div class='del'>-                goto err;</div><div class='add'>+        if (local-&gt;qstub) {</div><div class='add'>+            call_stub_destroy(local-&gt;qstub);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Can be used to just call_dispatch or be customised per fop to *</div><div class='del'>-         * perform ops specific to that particular fop.                  *</div><div class='del'>-         */</div><div class='del'>-        ret = jbr_@NAME@_perform_local_op (frame, this, &amp;op_errno,</div><div class='del'>-                                           @SHORT_ARGS@);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='del'>-err:</div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;stub) {</div><div class='del'>-                        call_stub_destroy(local-&gt;stub);</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;qstub) {</div><div class='del'>-                        call_stub_destroy(local-&gt;qstub);</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        fd_unref(local-&gt;fd);</div><div class='del'>-                }</div><div class='del'>-                mem_put(local);</div><div class='add'>+        if (local-&gt;fd) {</div><div class='add'>+            fd_unref(local-&gt;fd);</div><div class='ctx'>         }</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, -1, op_errno,</div><div class='del'>-                             @ERROR_ARGS@);</div><div class='del'>-        return 0;</div><div class='add'>+        mem_put(local);</div><div class='add'>+    }</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, -1, op_errno, @ERROR_ARGS @);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name write-perform_local_op */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@_perform_local_op (call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='del'>-                             @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @_perform_local_op(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                      int *op_errno, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret    = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, op_errno, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = jbr_@NAME@_call_dispatch (frame, this, op_errno,</div><div class='del'>-                                        @SHORT_ARGS@);</div><div class='add'>+    ret = jbr_ @NAME @_call_dispatch(frame, this, op_errno, @SHORT_ARGS @);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name write-call_dispatch */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@_call_dispatch (call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='del'>-                          @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @_call_dispatch(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                   int *op_errno, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t     *local  = NULL;</div><div class='del'>-        jbr_private_t   *priv   = NULL;</div><div class='del'>-        int32_t          ret    = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, op_errno, out);</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, op_errno, out);</div><div class='ctx'> </div><div class='ctx'> #if defined(JBR_CG_QUEUE)</div><div class='del'>-        jbr_inode_ctx_t  *ictx  = jbr_get_inode_ctx(this, fd-&gt;inode);</div><div class='del'>-        if (!ictx) {</div><div class='del'>-                *op_errno = EIO;</div><div class='del'>-                goto out;</div><div class='add'>+    jbr_inode_ctx_t *ictx = jbr_get_inode_ctx(this, fd-&gt;inode);</div><div class='add'>+    if (!ictx) {</div><div class='add'>+        *op_errno = EIO;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ictx-&gt;lock);</div><div class='add'>+    if (ictx-&gt;active) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "queuing request due to conflict");</div><div class='add'>+        /*</div><div class='add'>+         * TBD: enqueue only for real conflict</div><div class='add'>+         *</div><div class='add'>+         * Currently we just act like all writes are in</div><div class='add'>+         * conflict with one another.  What we should really do</div><div class='add'>+         * is check the active/pending queues and defer only if</div><div class='add'>+         * there's a conflict there.</div><div class='add'>+         *</div><div class='add'>+         * It's important to check the pending queue because we</div><div class='add'>+         * might have an active request X which conflicts with</div><div class='add'>+         * a pending request Y, and this request Z might</div><div class='add'>+         * conflict with Y but not X.  If we checked only the</div><div class='add'>+         * active queue then Z could jump ahead of Y, which</div><div class='add'>+         * would be incorrect.</div><div class='add'>+         */</div><div class='add'>+        local-&gt;qstub = fop_ @NAME</div><div class='add'>+            @_stub(frame, jbr_ @NAME @_dispatch, @SHORT_ARGS @);</div><div class='add'>+        if (!local-&gt;qstub) {</div><div class='add'>+            UNLOCK(&amp;ictx-&gt;lock);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                if (ictx-&gt;active) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "queuing request due to conflict");</div><div class='del'>-                        /*</div><div class='del'>-                         * TBD: enqueue only for real conflict</div><div class='del'>-                         *</div><div class='del'>-                         * Currently we just act like all writes are in</div><div class='del'>-                         * conflict with one another.  What we should really do</div><div class='del'>-                         * is check the active/pending queues and defer only if</div><div class='del'>-                         * there's a conflict there.</div><div class='del'>-                         *</div><div class='del'>-                         * It's important to check the pending queue because we</div><div class='del'>-                         * might have an active request X which conflicts with</div><div class='del'>-                         * a pending request Y, and this request Z might</div><div class='del'>-                         * conflict with Y but not X.  If we checked only the</div><div class='del'>-                         * active queue then Z could jump ahead of Y, which</div><div class='del'>-                         * would be incorrect.</div><div class='del'>-                         */</div><div class='del'>-                        local-&gt;qstub = fop_@NAME@_stub (frame,</div><div class='del'>-                                                        jbr_@NAME@_dispatch,</div><div class='del'>-                                                        @SHORT_ARGS@);</div><div class='del'>-                        if (!local-&gt;qstub) {</div><div class='del'>-                                UNLOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;pqueue);</div><div class='del'>-                        ++(ictx-&gt;pending);</div><div class='del'>-                        UNLOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;aqueue);</div><div class='del'>-                        ++(ictx-&gt;active);</div><div class='del'>-                }</div><div class='add'>+        list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;pqueue);</div><div class='add'>+        ++(ictx-&gt;pending);</div><div class='ctx'>         UNLOCK(&amp;ictx-&gt;lock);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;aqueue);</div><div class='add'>+        ++(ictx-&gt;active);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ictx-&gt;lock);</div><div class='ctx'> #endif</div><div class='del'>-        ret = jbr_@NAME@_dispatch (frame, this, @SHORT_ARGS@);</div><div class='add'>+    ret = jbr_ @NAME @_dispatch(frame, this, @SHORT_ARGS @);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name write-dispatch */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@_dispatch (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @_dispatch(call_frame_t *frame, xlator_t *this, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t     *local  = NULL;</div><div class='del'>-        jbr_private_t   *priv   = NULL;</div><div class='del'>-        int32_t          ret    = -1;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * TBD: unblock pending request(s) if we fail after this point but</div><div class='del'>-         * before we get to jbr_@NAME@_complete (where that code currently</div><div class='del'>-         * resides).</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        local-&gt;call_count = priv-&gt;n_children - 1;</div><div class='del'>-        for (trav = this-&gt;children-&gt;next; trav; trav = trav-&gt;next) {</div><div class='del'>-                STACK_WIND (frame, jbr_@NAME@_fan_in,</div><div class='del'>-                            trav-&gt;xlator, trav-&gt;xlator-&gt;fops-&gt;@NAME@,</div><div class='del'>-                            @SHORT_ARGS@);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TBD: variable Issue count */</div><div class='del'>-        ret = 0;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * TBD: unblock pending request(s) if we fail after this point but</div><div class='add'>+     * before we get to jbr_@NAME@_complete (where that code currently</div><div class='add'>+     * resides).</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    local-&gt;call_count = priv-&gt;n_children - 1;</div><div class='add'>+    for (trav = this-&gt;children-&gt;next; trav; trav = trav-&gt;next) {</div><div class='add'>+        STACK_WIND(frame, jbr_ @NAME @_fan_in, trav-&gt;xlator,</div><div class='add'>+                   trav-&gt;xlator-&gt;fops-&gt;@NAME @, @SHORT_ARGS @);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TBD: variable Issue count */</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name write-fan-in */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@_fan_in (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno,</div><div class='del'>-                   @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @_fan_in(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t   *local  = NULL;</div><div class='del'>-        int32_t        ret    = -1;</div><div class='del'>-        uint8_t        call_count;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "op_ret = %d, op_errno = %d\n",</div><div class='del'>-                      op_ret, op_errno);</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        call_count = --(local-&gt;call_count);</div><div class='del'>-        if (op_ret != -1) {</div><div class='del'>-                /* Increment the number of successful acks *</div><div class='del'>-                 * received for the operation.             *</div><div class='del'>-                 */</div><div class='del'>-                (local-&gt;successful_acks)++;</div><div class='del'>-                local-&gt;successful_op_ret = op_ret;</div><div class='del'>-        }</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "succ_acks = %d, op_ret = %d, op_errno = %d\n",</div><div class='del'>-                      op_ret, op_errno, local-&gt;successful_acks);</div><div class='del'>-        UNLOCK(&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* TBD: variable Completion count */</div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                call_resume(local-&gt;stub);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint8_t call_count;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "op_ret = %d, op_errno = %d\n", op_ret,</div><div class='add'>+                 op_errno);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    call_count = --(local-&gt;call_count);</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        /* Increment the number of successful acks *</div><div class='add'>+         * received for the operation.             *</div><div class='add'>+         */</div><div class='add'>+        (local-&gt;successful_acks)++;</div><div class='add'>+        local-&gt;successful_op_ret = op_ret;</div><div class='add'>+    }</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "succ_acks = %d, op_ret = %d, op_errno = %d\n",</div><div class='add'>+                 op_ret, op_errno, local-&gt;successful_acks);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* TBD: variable Completion count */</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        call_resume(local-&gt;stub);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name write-continue */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@_continue (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @_continue(call_frame_t *frame, xlator_t *this, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret       = -1;</div><div class='del'>-        gf_boolean_t     result    = _gf_false;</div><div class='del'>-        jbr_local_t     *local     = NULL;</div><div class='del'>-        jbr_local_t     *new_local = NULL;</div><div class='del'>-        jbr_private_t   *priv      = NULL;</div><div class='del'>-        int32_t          op_errno  = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-</div><div class='del'>-        /* Perform quorum check to see if the leader needs     *</div><div class='del'>-         * to perform the operation. If the operation will not *</div><div class='del'>-         * meet quorum irrespective of the leader's result     *</div><div class='del'>-         * there is no point in the leader performing the fop  *</div><div class='del'>-         */</div><div class='del'>-        result = fop_quorum_check (this, (double)priv-&gt;n_children,</div><div class='del'>-                                   (double)local-&gt;successful_acks + 1);</div><div class='del'>-        if (result == _gf_false) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EROFS,</div><div class='del'>-                        J_MSG_QUORUM_NOT_MET, "Didn't receive enough acks "</div><div class='del'>-                        "to meet quorum. Failing the operation without trying "</div><div class='del'>-                        "it on the leader.");</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_local_t *new_local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+</div><div class='add'>+    /* Perform quorum check to see if the leader needs     *</div><div class='add'>+     * to perform the operation. If the operation will not *</div><div class='add'>+     * meet quorum irrespective of the leader's result     *</div><div class='add'>+     * there is no point in the leader performing the fop  *</div><div class='add'>+     */</div><div class='add'>+    result = fop_quorum_check(this, (double)priv-&gt;n_children,</div><div class='add'>+                              (double)local-&gt;successful_acks + 1);</div><div class='add'>+    if (result == _gf_false) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EROFS, J_MSG_QUORUM_NOT_MET,</div><div class='add'>+               "Didn't receive enough acks "</div><div class='add'>+               "to meet quorum. Failing the operation without trying "</div><div class='add'>+               "it on the leader.");</div><div class='ctx'> </div><div class='ctx'> #if defined(JBR_CG_QUEUE)</div><div class='del'>-                /*</div><div class='del'>-                 * In case of a fop failure, before unwinding need to *</div><div class='del'>-                 * remove it from queue                               *</div><div class='del'>-                 */</div><div class='del'>-                ret = jbr_remove_from_queue (frame, this);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                J_MSG_GENERIC, "Failed to remove from queue.");</div><div class='del'>-                }</div><div class='add'>+        /*</div><div class='add'>+         * In case of a fop failure, before unwinding need to *</div><div class='add'>+         * remove it from queue                               *</div><div class='add'>+         */</div><div class='add'>+        ret = jbr_remove_from_queue(frame, this);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_GENERIC,</div><div class='add'>+                   "Failed to remove from queue.");</div><div class='add'>+        }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-                /*</div><div class='del'>-                 * In this case, the quorum is not met on the followers  *</div><div class='del'>-                 * So the operation will not be performed on the leader  *</div><div class='del'>-                 * and a rollback will be sent via GF_FOP_IPC to all the *</div><div class='del'>-                 * followers, where this particular fop's term and index *</div><div class='del'>-                 * numbers will be journaled, and later used to rollback *</div><div class='del'>-                 */</div><div class='del'>-                call_frame_t    *new_frame;</div><div class='del'>-</div><div class='del'>-                new_frame = copy_frame (frame);</div><div class='del'>-</div><div class='del'>-                if (new_frame) {</div><div class='del'>-                        new_local = mem_get0(this-&gt;local_pool);</div><div class='del'>-                        if (new_local) {</div><div class='del'>-                                INIT_LIST_HEAD(&amp;new_local-&gt;qlinks);</div><div class='del'>-                                ret = dict_set_int32 (local-&gt;xdata,</div><div class='del'>-                                                      "rollback-fop",</div><div class='del'>-                                                      GF_FOP_@UPNAME@);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                J_MSG_DICT_FLR,</div><div class='del'>-                                                "failed to set rollback-fop");</div><div class='del'>-                                } else {</div><div class='del'>-                                        new_local-&gt;xdata = dict_ref(local-&gt;xdata);</div><div class='del'>-                                        new_frame-&gt;local = new_local;</div><div class='del'>-                                        jbr_ipc_call_dispatch (new_frame,</div><div class='del'>-                                                               this, &amp;op_errno,</div><div class='del'>-                                                               FDL_IPC_JBR_SERVER_ROLLBACK,</div><div class='del'>-                                                               new_local-&gt;xdata);</div><div class='del'>-                                }</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Could not create local for new_frame");</div><div class='del'>-                        }</div><div class='add'>+        /*</div><div class='add'>+         * In this case, the quorum is not met on the followers  *</div><div class='add'>+         * So the operation will not be performed on the leader  *</div><div class='add'>+         * and a rollback will be sent via GF_FOP_IPC to all the *</div><div class='add'>+         * followers, where this particular fop's term and index *</div><div class='add'>+         * numbers will be journaled, and later used to rollback *</div><div class='add'>+         */</div><div class='add'>+        call_frame_t *new_frame;</div><div class='add'>+</div><div class='add'>+        new_frame = copy_frame(frame);</div><div class='add'>+</div><div class='add'>+        if (new_frame) {</div><div class='add'>+            new_local = mem_get0(this-&gt;local_pool);</div><div class='add'>+            if (new_local) {</div><div class='add'>+                INIT_LIST_HEAD(&amp;new_local-&gt;qlinks);</div><div class='add'>+                ret = dict_set_int32(local-&gt;xdata, "rollback-fop",</div><div class='add'>+                                     GF_FOP_ @UPNAME @);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+                           "failed to set rollback-fop");</div><div class='ctx'>                 } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Could not send rollback ipc");</div><div class='add'>+                    new_local-&gt;xdata = dict_ref(local-&gt;xdata);</div><div class='add'>+                    new_frame-&gt;local = new_local;</div><div class='add'>+                    jbr_ipc_call_dispatch(new_frame, this, &amp;op_errno,</div><div class='add'>+                                          FDL_IPC_JBR_SERVER_ROLLBACK,</div><div class='add'>+                                          new_local-&gt;xdata);</div><div class='ctx'>                 }</div><div class='del'>-</div><div class='del'>-                STACK_UNWIND_STRICT (@NAME@, frame, -1, EROFS,</div><div class='del'>-                                     @ERROR_ARGS@);</div><div class='add'>+            } else {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Could not create local for new_frame");</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                STACK_WIND (frame, jbr_@NAME@_complete,</div><div class='del'>-                            FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;@NAME@,</div><div class='del'>-                            @SHORT_ARGS@);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Could not send rollback ipc");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        STACK_UNWIND_STRICT(@NAME @, frame, -1, EROFS, @ERROR_ARGS @);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND(frame, jbr_ @NAME @_complete, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;@NAME @, @SHORT_ARGS @);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* template-name write-complete */</div><div class='del'>-int32_t</div><div class='del'>-jbr_@NAME@_complete (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno,</div><div class='del'>-                     @LONG_ARGS@)</div><div class='add'>+int32_t jbr_ @NAME @_complete(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                              int32_t op_ret, int32_t op_errno, @LONG_ARGS @)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret       = -1;</div><div class='del'>-        gf_boolean_t     result    = _gf_false;</div><div class='del'>-        jbr_private_t   *priv      = NULL;</div><div class='del'>-        jbr_local_t     *local     = NULL;</div><div class='del'>-        jbr_local_t     *new_local = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, err);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, err);</div><div class='del'>-</div><div class='del'>-        /* If the fop failed on the leader, then reduce one successful ack</div><div class='del'>-         * before calculating the fop quorum</div><div class='del'>-         */</div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                (local-&gt;successful_acks)--;</div><div class='del'>-        UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_local_t *new_local = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, err);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, err);</div><div class='add'>+</div><div class='add'>+    /* If the fop failed on the leader, then reduce one successful ack</div><div class='add'>+     * before calculating the fop quorum</div><div class='add'>+     */</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        (local-&gt;successful_acks)--;</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> #if defined(JBR_CG_QUEUE)</div><div class='del'>-        ret = jbr_remove_from_queue (frame, this);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = jbr_remove_from_queue(frame, this);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined(JBR_CG_FSYNC)</div><div class='del'>-        jbr_mark_fd_dirty(this, local);</div><div class='add'>+    jbr_mark_fd_dirty(this, local);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined(JBR_CG_NEED_FD)</div><div class='del'>-        fd_unref(local-&gt;fd);</div><div class='add'>+    fd_unref(local-&gt;fd);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        /* After the leader completes the fop, a quorum check is      *</div><div class='del'>-         * performed, taking into account the outcome of the fop      *</div><div class='del'>-         * on the leader. Irrespective of the fop being successful    *</div><div class='del'>-         * or failing on the leader, the result of the quorum will    *</div><div class='del'>-         * determine if the overall fop is successful or not. For     *</div><div class='del'>-         * example, a fop might have succeeded on every node except   *</div><div class='del'>-         * the leader, in which case as quorum is being met, the fop  *</div><div class='del'>-         * will be treated as a successful fop, even though it failed *</div><div class='del'>-         * on the leader. On follower nodes, no quorum check should   *</div><div class='del'>-         * be done, and the result is returned to the leader as is.   *</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;leader) {</div><div class='del'>-                result = fop_quorum_check (this, (double)priv-&gt;n_children,</div><div class='del'>-                                           (double)local-&gt;successful_acks + 1);</div><div class='del'>-                if (result == _gf_false) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = EROFS;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, EROFS,</div><div class='del'>-                                J_MSG_QUORUM_NOT_MET, "Quorum is not met. "</div><div class='del'>-                                "The operation has failed.");</div><div class='add'>+    /* After the leader completes the fop, a quorum check is      *</div><div class='add'>+     * performed, taking into account the outcome of the fop      *</div><div class='add'>+     * on the leader. Irrespective of the fop being successful    *</div><div class='add'>+     * or failing on the leader, the result of the quorum will    *</div><div class='add'>+     * determine if the overall fop is successful or not. For     *</div><div class='add'>+     * example, a fop might have succeeded on every node except   *</div><div class='add'>+     * the leader, in which case as quorum is being met, the fop  *</div><div class='add'>+     * will be treated as a successful fop, even though it failed *</div><div class='add'>+     * on the leader. On follower nodes, no quorum check should   *</div><div class='add'>+     * be done, and the result is returned to the leader as is.   *</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;leader) {</div><div class='add'>+        result = fop_quorum_check(this, (double)priv-&gt;n_children,</div><div class='add'>+                                  (double)local-&gt;successful_acks + 1);</div><div class='add'>+        if (result == _gf_false) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EROFS;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, EROFS, J_MSG_QUORUM_NOT_MET,</div><div class='add'>+                   "Quorum is not met. "</div><div class='add'>+                   "The operation has failed.");</div><div class='add'>+            /*</div><div class='add'>+             * In this case, the quorum is not met after the      *</div><div class='add'>+             * operation is performed on the leader. Hence a      *</div><div class='add'>+             * rollback will be sent via GF_FOP_IPC to the leader *</div><div class='add'>+             * where this particular fop's term and index numbers *</div><div class='add'>+             * will be journaled, and later used to rollback.     *</div><div class='add'>+             * The same will be done on all the followers         *</div><div class='add'>+             */</div><div class='add'>+            call_frame_t *new_frame;</div><div class='add'>+</div><div class='add'>+            new_frame = copy_frame(frame);</div><div class='add'>+            if (new_frame) {</div><div class='add'>+                new_local = mem_get0(this-&gt;local_pool);</div><div class='add'>+                if (new_local) {</div><div class='add'>+                    INIT_LIST_HEAD(&amp;new_local-&gt;qlinks);</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+                           "op = %d", new_frame-&gt;op);</div><div class='add'>+                    ret = dict_set_int32(local-&gt;xdata, "rollback-fop",</div><div class='add'>+                                         GF_FOP_ @UPNAME @);</div><div class='add'>+                    if (ret) {</div><div class='add'>+                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+                               "failed to set "</div><div class='add'>+                               "rollback-fop");</div><div class='add'>+                    } else {</div><div class='add'>+                        new_local-&gt;xdata = dict_ref(local-&gt;xdata);</div><div class='add'>+                        new_frame-&gt;local = new_local;</div><div class='ctx'>                         /*</div><div class='del'>-                         * In this case, the quorum is not met after the      *</div><div class='del'>-                         * operation is performed on the leader. Hence a      *</div><div class='del'>-                         * rollback will be sent via GF_FOP_IPC to the leader *</div><div class='del'>-                         * where this particular fop's term and index numbers *</div><div class='del'>-                         * will be journaled, and later used to rollback.     *</div><div class='del'>-                         * The same will be done on all the followers         *</div><div class='add'>+                         * Calling STACK_WIND instead *</div><div class='add'>+                         * of jbr_ipc as it will not  *</div><div class='add'>+                         * unwind to the previous     *</div><div class='add'>+                         * translators like it will   *</div><div class='add'>+                         * in case of jbr_ipc.        *</div><div class='ctx'>                          */</div><div class='del'>-                        call_frame_t    *new_frame;</div><div class='del'>-</div><div class='del'>-                        new_frame = copy_frame (frame);</div><div class='del'>-                        if (new_frame) {</div><div class='del'>-                                new_local = mem_get0(this-&gt;local_pool);</div><div class='del'>-                                if (new_local) {</div><div class='del'>-                                        INIT_LIST_HEAD(&amp;new_local-&gt;qlinks);</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                J_MSG_DICT_FLR, "op = %d",</div><div class='del'>-                                                new_frame-&gt;op);</div><div class='del'>-                                        ret = dict_set_int32 (local-&gt;xdata,</div><div class='del'>-                                                              "rollback-fop",</div><div class='del'>-                                                              GF_FOP_@UPNAME@);</div><div class='del'>-                                        if (ret) {</div><div class='del'>-                                                gf_msg (this-&gt;name,</div><div class='del'>-                                                        GF_LOG_ERROR, 0,</div><div class='del'>-                                                        J_MSG_DICT_FLR,</div><div class='del'>-                                                        "failed to set "</div><div class='del'>-                                                        "rollback-fop");</div><div class='del'>-                                        } else {</div><div class='del'>-                                                new_local-&gt;xdata = dict_ref (local-&gt;xdata);</div><div class='del'>-                                                new_frame-&gt;local = new_local;</div><div class='del'>-                                                /*</div><div class='del'>-                                                 * Calling STACK_WIND instead *</div><div class='del'>-                                                 * of jbr_ipc as it will not  *</div><div class='del'>-                                                 * unwind to the previous     *</div><div class='del'>-                                                 * translators like it will   *</div><div class='del'>-                                                 * in case of jbr_ipc.        *</div><div class='del'>-                                                 */</div><div class='del'>-                                                STACK_WIND (new_frame,</div><div class='del'>-                                                            jbr_ipc_complete,</div><div class='del'>-                                                            FIRST_CHILD(this),</div><div class='del'>-                                                            FIRST_CHILD(this)-&gt;fops-&gt;ipc,</div><div class='del'>-                                                            FDL_IPC_JBR_SERVER_ROLLBACK,</div><div class='del'>-                                                            new_local-&gt;xdata);</div><div class='del'>-                                        }</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                                "Could not create local "</div><div class='del'>-                                                "for new_frame");</div><div class='del'>-                                }</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Could not send rollback ipc");</div><div class='del'>-                        }</div><div class='add'>+                        STACK_WIND(</div><div class='add'>+                            new_frame, jbr_ipc_complete, FIRST_CHILD(this),</div><div class='add'>+                            FIRST_CHILD(this)-&gt;fops-&gt;ipc,</div><div class='add'>+                            FDL_IPC_JBR_SERVER_ROLLBACK, new_local-&gt;xdata);</div><div class='add'>+                    }</div><div class='ctx'>                 } else {</div><div class='add'>+                    gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                           "Could not create local "</div><div class='add'>+                           "for new_frame");</div><div class='add'>+                }</div><div class='add'>+            } else {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Could not send rollback ipc");</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='ctx'> #if defined(JBR_CG_NEED_FD)</div><div class='del'>-                        op_ret = local-&gt;successful_op_ret;</div><div class='add'>+            op_ret = local-&gt;successful_op_ret;</div><div class='ctx'> #else</div><div class='del'>-                        op_ret = 0;</div><div class='add'>+            op_ret = 0;</div><div class='ctx'> #endif</div><div class='del'>-                        op_errno = 0;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Quorum has met. The operation has succeeded.");</div><div class='del'>-                }</div><div class='add'>+            op_errno = 0;</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Quorum has met. The operation has succeeded.");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Unrefing the reference taken in jbr_@NAME@ () *</div><div class='del'>-         */</div><div class='del'>-        dict_unref (local-&gt;xdata);</div><div class='del'>-</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, op_ret, op_errno,</div><div class='del'>-                             @SHORT_ARGS@);</div><div class='add'>+    /*</div><div class='add'>+     * Unrefing the reference taken in jbr_@NAME@ () *</div><div class='add'>+     */</div><div class='add'>+    dict_unref(local-&gt;xdata);</div><div class='ctx'> </div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, op_ret, op_errno, @SHORT_ARGS @);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (@NAME@, frame, -1, 0,</div><div class='del'>-                             @SHORT_ARGS@);</div><div class='add'>+    STACK_UNWIND_STRICT(@NAME @, frame, -1, 0, @SHORT_ARGS @);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/experimental/jbr-server/src/jbr.c b/xlators/experimental/jbr-server/src/jbr.c<br/>index cd03dfe9b8a..49d7eb467f7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-server/src/jbr.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/jbr-server/src/jbr.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/jbr-server/src/jbr.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/jbr-server/src/jbr.c</a></div><div class='hunk'>@@ -29,14 +29,14 @@</div><div class='ctx'> #include "jbr-internal.h"</div><div class='ctx'> #include "jbr-messages.h"</div><div class='ctx'> </div><div class='del'>-#define JBR_FLUSH_INTERVAL      5</div><div class='add'>+#define JBR_FLUSH_INTERVAL 5</div><div class='ctx'> </div><div class='ctx'> enum {</div><div class='del'>-        /* echo "cluster/jbr-server" | md5sum | cut -c 1-8 */</div><div class='del'>-        JBR_SERVER_IPC_BASE = 0x0e2d66a5,</div><div class='del'>-        JBR_SERVER_TERM_RANGE,</div><div class='del'>-        JBR_SERVER_OPEN_TERM,</div><div class='del'>-        JBR_SERVER_NEXT_ENTRY</div><div class='add'>+    /* echo "cluster/jbr-server" | md5sum | cut -c 1-8 */</div><div class='add'>+    JBR_SERVER_IPC_BASE = 0x0e2d66a5,</div><div class='add'>+    JBR_SERVER_TERM_RANGE,</div><div class='add'>+    JBR_SERVER_OPEN_TERM,</div><div class='add'>+    JBR_SERVER_NEXT_ENTRY</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -44,551 +44,525 @@ enum {</div><div class='ctx'>  * jbr_lk_perform_local_op call it, before code is generated.  *</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-jbr_lk_call_dispatch (call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='del'>-                      fd_t *fd, int32_t cmd, struct gf_flock *lock,</div><div class='del'>-                      dict_t *xdata);</div><div class='add'>+jbr_lk_call_dispatch(call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='add'>+                     fd_t *fd, int32_t cmd, struct gf_flock *lock,</div><div class='add'>+                     dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_lk_dispatch (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 fd_t *fd, int32_t cmd, struct gf_flock *lock,</div><div class='del'>-                 dict_t *xdata);</div><div class='add'>+jbr_lk_dispatch(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+                struct gf_flock *lock, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_ipc_call_dispatch (call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='del'>-                       int32_t op, dict_t *xdata);</div><div class='add'>+jbr_ipc_call_dispatch(call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='add'>+                      int32_t op, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_ipc_complete (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  dict_t *xdata);</div><div class='add'>+jbr_ipc_complete(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> /* Used to check the quorum of acks received after the fop</div><div class='ctx'>  * confirming the status of the fop on all the brick processes</div><div class='ctx'>  * for this particular subvolume</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-fop_quorum_check (xlator_t *this, double n_children,</div><div class='del'>-                  double current_state)</div><div class='add'>+fop_quorum_check(xlator_t *this, double n_children, double current_state)</div><div class='ctx'> {</div><div class='del'>-        jbr_private_t   *priv           = NULL;</div><div class='del'>-        gf_boolean_t     result         = _gf_false;</div><div class='del'>-        double           required       = 0;</div><div class='del'>-        double           current        = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-</div><div class='del'>-        required = n_children * priv-&gt;quorum_pct;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Before performing the fop on the leader, we need to check,</div><div class='del'>-         * if there is any merit in performing the fop on the leader.</div><div class='del'>-         * In a case, where even a successful write on the leader, will</div><div class='del'>-         * not meet quorum, there is no point in trying the fop on the</div><div class='del'>-         * leader.</div><div class='del'>-         * When this function is called after the leader has tried</div><div class='del'>-         * performing the fop, this check will calculate quorum taking into</div><div class='del'>-         * account the status of the fop on the leader. If the leader's</div><div class='del'>-         * op_ret was -1, the complete function would account that by</div><div class='del'>-         * decrementing successful_acks by 1</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        current = current_state * 100.0;</div><div class='del'>-</div><div class='del'>-        if (current &lt; required) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_QUORUM_NOT_MET,</div><div class='del'>-                        "Quorum not met. quorum_pct = %f "</div><div class='del'>-                        "Current State = %f, Required State = %f",</div><div class='del'>-                        priv-&gt;quorum_pct, current,</div><div class='del'>-                        required);</div><div class='del'>-        } else</div><div class='del'>-                result = _gf_true;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    double required = 0;</div><div class='add'>+    double current = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+</div><div class='add'>+    required = n_children * priv-&gt;quorum_pct;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Before performing the fop on the leader, we need to check,</div><div class='add'>+     * if there is any merit in performing the fop on the leader.</div><div class='add'>+     * In a case, where even a successful write on the leader, will</div><div class='add'>+     * not meet quorum, there is no point in trying the fop on the</div><div class='add'>+     * leader.</div><div class='add'>+     * When this function is called after the leader has tried</div><div class='add'>+     * performing the fop, this check will calculate quorum taking into</div><div class='add'>+     * account the status of the fop on the leader. If the leader's</div><div class='add'>+     * op_ret was -1, the complete function would account that by</div><div class='add'>+     * decrementing successful_acks by 1</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    current = current_state * 100.0;</div><div class='add'>+</div><div class='add'>+    if (current &lt; required) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_QUORUM_NOT_MET,</div><div class='add'>+               "Quorum not met. quorum_pct = %f "</div><div class='add'>+               "Current State = %f, Required State = %f",</div><div class='add'>+               priv-&gt;quorum_pct, current, required);</div><div class='add'>+    } else</div><div class='add'>+        result = _gf_true;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return result;</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> jbr_inode_ctx_t *</div><div class='del'>-jbr_get_inode_ctx (xlator_t *this, inode_t *inode)</div><div class='add'>+jbr_get_inode_ctx(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t                ctx_int         = 0LL;</div><div class='del'>-        jbr_inode_ctx_t         *ctx_ptr;</div><div class='del'>-</div><div class='del'>-        if (__inode_ctx_get(inode, this, &amp;ctx_int) == 0) {</div><div class='del'>-                ctx_ptr = (jbr_inode_ctx_t *)(long)ctx_int;</div><div class='del'>-        } else {</div><div class='del'>-                ctx_ptr = GF_CALLOC (1, sizeof(*ctx_ptr),</div><div class='del'>-                                     gf_mt_jbr_inode_ctx_t);</div><div class='del'>-                if (ctx_ptr) {</div><div class='del'>-                        ctx_int = (uint64_t)(long)ctx_ptr;</div><div class='del'>-                        if (__inode_ctx_set(inode, this, &amp;ctx_int) == 0) {</div><div class='del'>-                                LOCK_INIT(&amp;ctx_ptr-&gt;lock);</div><div class='del'>-                                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;aqueue);</div><div class='del'>-                                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;pqueue);</div><div class='del'>-                        } else {</div><div class='del'>-                                GF_FREE(ctx_ptr);</div><div class='del'>-                                ctx_ptr = NULL;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ctx_ptr;</div><div class='add'>+    uint64_t ctx_int = 0LL;</div><div class='add'>+    jbr_inode_ctx_t *ctx_ptr;</div><div class='add'>+</div><div class='add'>+    if (__inode_ctx_get(inode, this, &amp;ctx_int) == 0) {</div><div class='add'>+        ctx_ptr = (jbr_inode_ctx_t *)(long)ctx_int;</div><div class='add'>+    } else {</div><div class='add'>+        ctx_ptr = GF_CALLOC(1, sizeof(*ctx_ptr), gf_mt_jbr_inode_ctx_t);</div><div class='add'>+        if (ctx_ptr) {</div><div class='add'>+            ctx_int = (uint64_t)(long)ctx_ptr;</div><div class='add'>+            if (__inode_ctx_set(inode, this, &amp;ctx_int) == 0) {</div><div class='add'>+                LOCK_INIT(&amp;ctx_ptr-&gt;lock);</div><div class='add'>+                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;aqueue);</div><div class='add'>+                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;pqueue);</div><div class='add'>+            } else {</div><div class='add'>+                GF_FREE(ctx_ptr);</div><div class='add'>+                ctx_ptr = NULL;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ctx_ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> jbr_fd_ctx_t *</div><div class='del'>-jbr_get_fd_ctx (xlator_t *this, fd_t *fd)</div><div class='add'>+jbr_get_fd_ctx(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t                ctx_int         = 0LL;</div><div class='del'>-        jbr_fd_ctx_t            *ctx_ptr;</div><div class='del'>-</div><div class='del'>-        if (__fd_ctx_get(fd, this, &amp;ctx_int) == 0) {</div><div class='del'>-                ctx_ptr = (jbr_fd_ctx_t *)(long)ctx_int;</div><div class='del'>-        } else {</div><div class='del'>-                ctx_ptr = GF_CALLOC (1, sizeof(*ctx_ptr), gf_mt_jbr_fd_ctx_t);</div><div class='del'>-                if (ctx_ptr) {</div><div class='del'>-                        if (__fd_ctx_set(fd, this, (uint64_t)ctx_ptr) == 0) {</div><div class='del'>-                                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;dirty_list);</div><div class='del'>-                                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;fd_list);</div><div class='del'>-                        } else {</div><div class='del'>-                                GF_FREE(ctx_ptr);</div><div class='del'>-                                ctx_ptr = NULL;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ctx_ptr;</div><div class='add'>+    uint64_t ctx_int = 0LL;</div><div class='add'>+    jbr_fd_ctx_t *ctx_ptr;</div><div class='add'>+</div><div class='add'>+    if (__fd_ctx_get(fd, this, &amp;ctx_int) == 0) {</div><div class='add'>+        ctx_ptr = (jbr_fd_ctx_t *)(long)ctx_int;</div><div class='add'>+    } else {</div><div class='add'>+        ctx_ptr = GF_CALLOC(1, sizeof(*ctx_ptr), gf_mt_jbr_fd_ctx_t);</div><div class='add'>+        if (ctx_ptr) {</div><div class='add'>+            if (__fd_ctx_set(fd, this, (uint64_t)ctx_ptr) == 0) {</div><div class='add'>+                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;dirty_list);</div><div class='add'>+                INIT_LIST_HEAD(&amp;ctx_ptr-&gt;fd_list);</div><div class='add'>+            } else {</div><div class='add'>+                GF_FREE(ctx_ptr);</div><div class='add'>+                ctx_ptr = NULL;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ctx_ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-jbr_mark_fd_dirty (xlator_t *this, jbr_local_t *local)</div><div class='add'>+jbr_mark_fd_dirty(xlator_t *this, jbr_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        fd_t                    *fd             = local-&gt;fd;</div><div class='del'>-        jbr_fd_ctx_t            *ctx_ptr;</div><div class='del'>-        jbr_dirty_list_t        *dirty;</div><div class='del'>-        jbr_private_t           *priv           = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * TBD: don't do any of this for O_SYNC/O_DIRECT writes.</div><div class='del'>-         * Unfortunately, that optimization requires that we distinguish</div><div class='del'>-         * between writev and other "write" calls, saving the original flags</div><div class='del'>-         * and checking them in the callback.  Too much work for too little</div><div class='del'>-         * gain right now.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;fd-&gt;lock);</div><div class='del'>-                ctx_ptr = jbr_get_fd_ctx(this, fd);</div><div class='del'>-                dirty = GF_CALLOC(1, sizeof(*dirty), gf_mt_jbr_dirty_t);</div><div class='del'>-                if (ctx_ptr &amp;&amp; dirty) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                                      "marking fd %p as dirty (%p)", fd, dirty);</div><div class='del'>-                        /* TBD: fill dirty-&gt;id from what changelog gave us */</div><div class='del'>-                        list_add_tail(&amp;dirty-&gt;links, &amp;ctx_ptr-&gt;dirty_list);</div><div class='del'>-                        if (list_empty(&amp;ctx_ptr-&gt;fd_list)) {</div><div class='del'>-                                /* Add a ref so _release doesn't get called. */</div><div class='del'>-                                ctx_ptr-&gt;fd = fd_ref(fd);</div><div class='del'>-                                LOCK(&amp;priv-&gt;dirty_lock);</div><div class='del'>-                                        list_add_tail (&amp;ctx_ptr-&gt;fd_list,</div><div class='del'>-                                                       &amp;priv-&gt;dirty_fds);</div><div class='del'>-                                UNLOCK(&amp;priv-&gt;dirty_lock);</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                J_MSG_MEM_ERR, "could not mark %p dirty", fd);</div><div class='del'>-                        if (ctx_ptr) {</div><div class='del'>-                                GF_FREE(ctx_ptr);</div><div class='del'>-                        }</div><div class='del'>-                        if (dirty) {</div><div class='del'>-                                GF_FREE(dirty);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        UNLOCK(&amp;fd-&gt;lock);</div><div class='add'>+    fd_t *fd = local-&gt;fd;</div><div class='add'>+    jbr_fd_ctx_t *ctx_ptr;</div><div class='add'>+    jbr_dirty_list_t *dirty;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * TBD: don't do any of this for O_SYNC/O_DIRECT writes.</div><div class='add'>+     * Unfortunately, that optimization requires that we distinguish</div><div class='add'>+     * between writev and other "write" calls, saving the original flags</div><div class='add'>+     * and checking them in the callback.  Too much work for too little</div><div class='add'>+     * gain right now.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    ctx_ptr = jbr_get_fd_ctx(this, fd);</div><div class='add'>+    dirty = GF_CALLOC(1, sizeof(*dirty), gf_mt_jbr_dirty_t);</div><div class='add'>+    if (ctx_ptr &amp;&amp; dirty) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "marking fd %p as dirty (%p)", fd, dirty);</div><div class='add'>+        /* TBD: fill dirty-&gt;id from what changelog gave us */</div><div class='add'>+        list_add_tail(&amp;dirty-&gt;links, &amp;ctx_ptr-&gt;dirty_list);</div><div class='add'>+        if (list_empty(&amp;ctx_ptr-&gt;fd_list)) {</div><div class='add'>+            /* Add a ref so _release doesn't get called. */</div><div class='add'>+            ctx_ptr-&gt;fd = fd_ref(fd);</div><div class='add'>+            LOCK(&amp;priv-&gt;dirty_lock);</div><div class='add'>+            list_add_tail(&amp;ctx_ptr-&gt;fd_list, &amp;priv-&gt;dirty_fds);</div><div class='add'>+            UNLOCK(&amp;priv-&gt;dirty_lock);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, J_MSG_MEM_ERR,</div><div class='add'>+               "could not mark %p dirty", fd);</div><div class='add'>+        if (ctx_ptr) {</div><div class='add'>+            GF_FREE(ctx_ptr);</div><div class='add'>+        }</div><div class='add'>+        if (dirty) {</div><div class='add'>+            GF_FREE(dirty);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define JBR_TERM_XATTR          "trusted.jbr.term"</div><div class='del'>-#define JBR_INDEX_XATTR         "trusted.jbr.index"</div><div class='del'>-#define JBR_REP_COUNT_XATTR     "trusted.jbr.rep-count"</div><div class='del'>-#define RECON_TERM_XATTR        "trusted.jbr.recon-term"</div><div class='del'>-#define RECON_INDEX_XATTR       "trusted.jbr.recon-index"</div><div class='add'>+#define JBR_TERM_XATTR "trusted.jbr.term"</div><div class='add'>+#define JBR_INDEX_XATTR "trusted.jbr.index"</div><div class='add'>+#define JBR_REP_COUNT_XATTR "trusted.jbr.rep-count"</div><div class='add'>+#define RECON_TERM_XATTR "trusted.jbr.recon-term"</div><div class='add'>+#define RECON_INDEX_XATTR "trusted.jbr.recon-index"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_leader_checks_and_init (call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='del'>-                            dict_t *xdata, fd_t *fd)</div><div class='add'>+jbr_leader_checks_and_init(call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='add'>+                           dict_t *xdata, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t     *local         = NULL;</div><div class='del'>-        jbr_private_t   *priv          = NULL;</div><div class='del'>-        int32_t          ret           = -1;</div><div class='del'>-        gf_boolean_t     result        = _gf_false;</div><div class='del'>-        int              from_leader   = _gf_false;</div><div class='del'>-        int              from_recon    = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, op_errno, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Our first goal here is to avoid "split brain surprise" for users who</div><div class='del'>-         * specify exactly 50% with two- or three-way replication.  That means</div><div class='del'>-         * either a more-than check against half the total replicas or an</div><div class='del'>-         * at-least check against half of our peers (one less).  Of the two,</div><div class='del'>-         * only an at-least check supports the intuitive use of 100% to mean</div><div class='del'>-         * all replicas must be present, because "more than 100%" will never</div><div class='del'>-         * succeed regardless of which count we use.  This leaves us with a</div><div class='del'>-         * slightly non-traditional definition of quorum ("at least X% of peers</div><div class='del'>-         * not including ourselves") but one that's useful enough to be worth</div><div class='del'>-         * it.</div><div class='del'>-         *</div><div class='del'>-         * Note that n_children and up_children *do* include the local</div><div class='del'>-         * subvolume, so we need to subtract one in each case.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;leader) {</div><div class='del'>-                result = fop_quorum_check (this, (double)(priv-&gt;n_children - 1),</div><div class='del'>-                                   (double)(priv-&gt;up_children - 1));</div><div class='del'>-</div><div class='del'>-                if (result == _gf_false) {</div><div class='del'>-                        /* Emulate the AFR client-side-quorum behavior. */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, EROFS,</div><div class='del'>-                                J_MSG_QUORUM_NOT_MET, "Sufficient number of "</div><div class='del'>-                                "subvolumes are not up to meet quorum.");</div><div class='del'>-                        *op_errno = EROFS;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    int from_leader = _gf_false;</div><div class='add'>+    int from_recon = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, op_errno, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Our first goal here is to avoid "split brain surprise" for users who</div><div class='add'>+     * specify exactly 50% with two- or three-way replication.  That means</div><div class='add'>+     * either a more-than check against half the total replicas or an</div><div class='add'>+     * at-least check against half of our peers (one less).  Of the two,</div><div class='add'>+     * only an at-least check supports the intuitive use of 100% to mean</div><div class='add'>+     * all replicas must be present, because "more than 100%" will never</div><div class='add'>+     * succeed regardless of which count we use.  This leaves us with a</div><div class='add'>+     * slightly non-traditional definition of quorum ("at least X% of peers</div><div class='add'>+     * not including ourselves") but one that's useful enough to be worth</div><div class='add'>+     * it.</div><div class='add'>+     *</div><div class='add'>+     * Note that n_children and up_children *do* include the local</div><div class='add'>+     * subvolume, so we need to subtract one in each case.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;leader) {</div><div class='add'>+        result = fop_quorum_check(this, (double)(priv-&gt;n_children - 1),</div><div class='add'>+                                  (double)(priv-&gt;up_children - 1));</div><div class='add'>+</div><div class='add'>+        if (result == _gf_false) {</div><div class='add'>+            /* Emulate the AFR client-side-quorum behavior. */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, EROFS, J_MSG_QUORUM_NOT_MET,</div><div class='add'>+                   "Sufficient number of "</div><div class='add'>+                   "subvolumes are not up to meet quorum.");</div><div class='add'>+            *op_errno = EROFS;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (xdata) {</div><div class='add'>+            from_leader = !!dict_get(xdata, JBR_TERM_XATTR);</div><div class='add'>+            from_recon = !!dict_get(xdata, RECON_TERM_XATTR) &amp;&amp;</div><div class='add'>+                         !!dict_get(xdata, RECON_INDEX_XATTR);</div><div class='ctx'>         } else {</div><div class='del'>-                if (xdata) {</div><div class='del'>-                        from_leader = !!dict_get(xdata, JBR_TERM_XATTR);</div><div class='del'>-                        from_recon = !!dict_get(xdata, RECON_TERM_XATTR)</div><div class='del'>-                                  &amp;&amp; !!dict_get(xdata, RECON_INDEX_XATTR);</div><div class='del'>-                } else {</div><div class='del'>-                        from_leader = from_recon = _gf_false;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* follower/recon path        *</div><div class='del'>-                 * just send it to local node *</div><div class='del'>-                 */</div><div class='del'>-                if (!from_leader &amp;&amp; !from_recon) {</div><div class='del'>-                        *op_errno = EREMOTE;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            from_leader = from_recon = _gf_false;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local = mem_get0(this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                goto out;</div><div class='add'>+        /* follower/recon path        *</div><div class='add'>+         * just send it to local node *</div><div class='add'>+         */</div><div class='add'>+        if (!from_leader &amp;&amp; !from_recon) {</div><div class='add'>+            *op_errno = EREMOTE;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                local-&gt;fd = fd_ref(fd);</div><div class='del'>-        else</div><div class='del'>-                local-&gt;fd = NULL;</div><div class='add'>+    if (fd)</div><div class='add'>+        local-&gt;fd = fd_ref(fd);</div><div class='add'>+    else</div><div class='add'>+        local-&gt;fd = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD(&amp;local-&gt;qlinks);</div><div class='del'>-        local-&gt;successful_acks = 0;</div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;qlinks);</div><div class='add'>+    local-&gt;successful_acks = 0;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_initialize_xdata_set_attrs (xlator_t *this, dict_t **xdata)</div><div class='add'>+jbr_initialize_xdata_set_attrs(xlator_t *this, dict_t **xdata)</div><div class='ctx'> {</div><div class='del'>-        jbr_private_t   *priv          = NULL;</div><div class='del'>-        int32_t          ret           = -1;</div><div class='del'>-        uint32_t         ti            = 0;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint32_t ti = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, xdata, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, xdata, out);</div><div class='ctx'> </div><div class='add'>+    if (!*xdata) {</div><div class='add'>+        *xdata = dict_new();</div><div class='ctx'>         if (!*xdata) {</div><div class='del'>-                *xdata = dict_new();</div><div class='del'>-                if (!*xdata) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                J_MSG_MEM_ERR, "failed to allocate xdata");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_set_int32(*xdata, JBR_TERM_XATTR, priv-&gt;current_term) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_DICT_FLR, "failed to set jbr-term");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;priv-&gt;index_lock);</div><div class='del'>-        ti = ++(priv-&gt;index);</div><div class='del'>-        UNLOCK(&amp;priv-&gt;index_lock);</div><div class='del'>-        if (dict_set_int32(*xdata, JBR_INDEX_XATTR, ti) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_DICT_FLR, "failed to set index");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, J_MSG_MEM_ERR,</div><div class='add'>+                   "failed to allocate xdata");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_set_int32(*xdata, JBR_TERM_XATTR, priv-&gt;current_term) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+               "failed to set jbr-term");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;index_lock);</div><div class='add'>+    ti = ++(priv-&gt;index);</div><div class='add'>+    UNLOCK(&amp;priv-&gt;index_lock);</div><div class='add'>+    if (dict_set_int32(*xdata, JBR_INDEX_XATTR, ti) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+               "failed to set index");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_remove_from_queue (call_frame_t *frame, xlator_t *this)</div><div class='add'>+jbr_remove_from_queue(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret       = -1;</div><div class='del'>-        jbr_inode_ctx_t *ictx      = NULL;</div><div class='del'>-        jbr_local_t     *local     = NULL;</div><div class='del'>-        jbr_local_t     *next      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-</div><div class='del'>-        if (local-&gt;qlinks.next != &amp;local-&gt;qlinks) {</div><div class='del'>-                list_del(&amp;local-&gt;qlinks);</div><div class='del'>-                ictx = jbr_get_inode_ctx(this, local-&gt;fd-&gt;inode);</div><div class='del'>-                if (ictx) {</div><div class='del'>-                        LOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                                if (ictx-&gt;pending) {</div><div class='del'>-                                        /*</div><div class='del'>-                                         * TBD: dequeue *all* non-conflicting</div><div class='del'>-                                         * reqs</div><div class='del'>-                                         *</div><div class='del'>-                                         * With the stub implementation there</div><div class='del'>-                                         * can only be one request active at a</div><div class='del'>-                                         * time (zero here) so it's not an</div><div class='del'>-                                         * issue.  In a real implementation</div><div class='del'>-                                         * there might still be other active</div><div class='del'>-                                         * requests to check against, and</div><div class='del'>-                                         * multiple pending requests that could</div><div class='del'>-                                         * continue.</div><div class='del'>-                                         */</div><div class='del'>-                                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                                     "unblocking next request");</div><div class='del'>-                                        --(ictx-&gt;pending);</div><div class='del'>-                                        next = list_entry (ictx-&gt;pqueue.next,</div><div class='del'>-                                                           jbr_local_t, qlinks);</div><div class='del'>-                                        list_del(&amp;next-&gt;qlinks);</div><div class='del'>-                                        list_add_tail(&amp;next-&gt;qlinks,</div><div class='del'>-                                                      &amp;ictx-&gt;aqueue);</div><div class='del'>-                                        call_resume(next-&gt;qstub);</div><div class='del'>-                                } else {</div><div class='del'>-                                        --(ictx-&gt;active);</div><div class='del'>-                                }</div><div class='del'>-                        UNLOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    jbr_inode_ctx_t *ictx = NULL;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_local_t *next = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;qlinks.next != &amp;local-&gt;qlinks) {</div><div class='add'>+        list_del(&amp;local-&gt;qlinks);</div><div class='add'>+        ictx = jbr_get_inode_ctx(this, local-&gt;fd-&gt;inode);</div><div class='add'>+        if (ictx) {</div><div class='add'>+            LOCK(&amp;ictx-&gt;lock);</div><div class='add'>+            if (ictx-&gt;pending) {</div><div class='add'>+                /*</div><div class='add'>+                 * TBD: dequeue *all* non-conflicting</div><div class='add'>+                 * reqs</div><div class='add'>+                 *</div><div class='add'>+                 * With the stub implementation there</div><div class='add'>+                 * can only be one request active at a</div><div class='add'>+                 * time (zero here) so it's not an</div><div class='add'>+                 * issue.  In a real implementation</div><div class='add'>+                 * there might still be other active</div><div class='add'>+                 * requests to check against, and</div><div class='add'>+                 * multiple pending requests that could</div><div class='add'>+                 * continue.</div><div class='add'>+                 */</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "unblocking next request");</div><div class='add'>+                --(ictx-&gt;pending);</div><div class='add'>+                next = list_entry(ictx-&gt;pqueue.next, jbr_local_t, qlinks);</div><div class='add'>+                list_del(&amp;next-&gt;qlinks);</div><div class='add'>+                list_add_tail(&amp;next-&gt;qlinks, &amp;ictx-&gt;aqueue);</div><div class='add'>+                call_resume(next-&gt;qstub);</div><div class='add'>+            } else {</div><div class='add'>+                --(ictx-&gt;active);</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;ictx-&gt;lock);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_lk_complete (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+jbr_lk_complete(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct gf_flock *flock,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret       = -1;</div><div class='del'>-        jbr_private_t   *priv      = NULL;</div><div class='del'>-        jbr_local_t     *local     = NULL;</div><div class='del'>-        gf_boolean_t     result    = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, err);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, err);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, flock, err);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, xdata, err);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, err);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, err);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, flock, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, xdata, err);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Remove from queue for unlock operation only   *</div><div class='add'>+     * For lock operation, it will be done in fan-in *</div><div class='add'>+     */</div><div class='add'>+    if (flock-&gt;l_type == F_UNLCK) {</div><div class='add'>+        ret = jbr_remove_from_queue(frame, this);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * On a follower, unwind with the op_ret and op_errno. On a *</div><div class='add'>+     * leader, if the fop is a locking fop, and its a failure,  *</div><div class='add'>+     * send fail, else call stub which will dispatch the fop to *</div><div class='add'>+     * the followers.                                           *</div><div class='add'>+     *                                                          *</div><div class='add'>+     * If the fop is a unlocking fop, check quorum. If quorum   *</div><div class='add'>+     * is met, then send success. Else Rollback on leader,      *</div><div class='add'>+     * followed by followers, and then send -ve ack to client.  *</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;leader) {</div><div class='add'>+        /* Increase the successful acks if it's a success. */</div><div class='add'>+        LOCK(&amp;frame-&gt;lock);</div><div class='add'>+        if (op_ret != -1)</div><div class='add'>+            (local-&gt;successful_acks)++;</div><div class='add'>+        UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         * Remove from queue for unlock operation only   *</div><div class='del'>-         * For lock operation, it will be done in fan-in *</div><div class='del'>-         */</div><div class='ctx'>         if (flock-&gt;l_type == F_UNLCK) {</div><div class='del'>-                ret = jbr_remove_from_queue (frame, this);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * On a follower, unwind with the op_ret and op_errno. On a *</div><div class='del'>-         * leader, if the fop is a locking fop, and its a failure,  *</div><div class='del'>-         * send fail, else call stub which will dispatch the fop to *</div><div class='del'>-         * the followers.                                           *</div><div class='del'>-         *                                                          *</div><div class='del'>-         * If the fop is a unlocking fop, check quorum. If quorum   *</div><div class='del'>-         * is met, then send success. Else Rollback on leader,      *</div><div class='del'>-         * followed by followers, and then send -ve ack to client.  *</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;leader) {</div><div class='del'>-</div><div class='del'>-                /* Increase the successful acks if it's a success. */</div><div class='del'>-                LOCK(&amp;frame-&gt;lock);</div><div class='del'>-                if (op_ret != -1)</div><div class='del'>-                        (local-&gt;successful_acks)++;</div><div class='del'>-                UNLOCK(&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-                if (flock-&gt;l_type == F_UNLCK) {</div><div class='del'>-                        result = fop_quorum_check (this,</div><div class='del'>-                                            (double)priv-&gt;n_children,</div><div class='del'>-                                            (double)local-&gt;successful_acks);</div><div class='del'>-                        if (result == _gf_false) {</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                op_errno = EROFS;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, EROFS,</div><div class='del'>-                                        J_MSG_QUORUM_NOT_MET,</div><div class='del'>-                                        "Quorum is not met. "</div><div class='del'>-                                        "The operation has failed.");</div><div class='del'>-</div><div class='del'>-                                /* TODO: PERFORM UNLOCK ROLLBACK ON LEADER *</div><div class='del'>-                                 * FOLLOWED BY FOLLOWERS. */</div><div class='del'>-                        } else {</div><div class='del'>-                                op_ret = 0;</div><div class='del'>-                                op_errno = 0;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        fd_unref(local-&gt;fd);</div><div class='del'>-                        STACK_UNWIND_STRICT (lk, frame, op_ret, op_errno,</div><div class='del'>-                                             flock, xdata);</div><div class='del'>-                } else {</div><div class='del'>-                        if (op_ret == -1) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        J_MSG_LOCK_FAILURE,</div><div class='del'>-                                        "The lock operation failed on "</div><div class='del'>-                                        "the leader.");</div><div class='del'>-</div><div class='del'>-                                fd_unref(local-&gt;fd);</div><div class='del'>-                                STACK_UNWIND_STRICT (lk, frame, op_ret,</div><div class='del'>-                                                     op_errno, flock, xdata);</div><div class='del'>-                        } else {</div><div class='del'>-                                if (!local-&gt;stub) {</div><div class='del'>-                                        goto err;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                call_resume(local-&gt;stub);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            result = fop_quorum_check(this, (double)priv-&gt;n_children,</div><div class='add'>+                                      (double)local-&gt;successful_acks);</div><div class='add'>+            if (result == _gf_false) {</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = EROFS;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, EROFS, J_MSG_QUORUM_NOT_MET,</div><div class='add'>+                       "Quorum is not met. "</div><div class='add'>+                       "The operation has failed.");</div><div class='add'>+</div><div class='add'>+                /* TODO: PERFORM UNLOCK ROLLBACK ON LEADER *</div><div class='add'>+                 * FOLLOWED BY FOLLOWERS. */</div><div class='add'>+            } else {</div><div class='add'>+                op_ret = 0;</div><div class='add'>+                op_errno = 0;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            fd_unref(local-&gt;fd);</div><div class='add'>+            STACK_UNWIND_STRICT(lk, frame, op_ret, op_errno, flock, xdata);</div><div class='ctx'>         } else {</div><div class='add'>+            if (op_ret == -1) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_LOCK_FAILURE,</div><div class='add'>+                       "The lock operation failed on "</div><div class='add'>+                       "the leader.");</div><div class='add'>+</div><div class='ctx'>                 fd_unref(local-&gt;fd);</div><div class='del'>-                STACK_UNWIND_STRICT (lk, frame, op_ret, op_errno,</div><div class='del'>-                                     flock, xdata);</div><div class='add'>+                STACK_UNWIND_STRICT(lk, frame, op_ret, op_errno, flock, xdata);</div><div class='add'>+            } else {</div><div class='add'>+                if (!local-&gt;stub) {</div><div class='add'>+                    goto err;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                call_resume(local-&gt;stub);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+        STACK_UNWIND_STRICT(lk, frame, op_ret, op_errno, flock, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;stub) {</div><div class='del'>-                        call_stub_destroy(local-&gt;stub);</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;qstub) {</div><div class='del'>-                        call_stub_destroy(local-&gt;qstub);</div><div class='del'>-                }</div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        fd_unref(local-&gt;fd);</div><div class='del'>-                }</div><div class='del'>-                mem_put(local);</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;stub) {</div><div class='add'>+            call_stub_destroy(local-&gt;stub);</div><div class='ctx'>         }</div><div class='del'>-        STACK_UNWIND_STRICT (lk, frame, -1, op_errno,</div><div class='del'>-                             flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+        if (local-&gt;qstub) {</div><div class='add'>+            call_stub_destroy(local-&gt;qstub);</div><div class='add'>+        }</div><div class='add'>+        if (local-&gt;fd) {</div><div class='add'>+            fd_unref(local-&gt;fd);</div><div class='add'>+        }</div><div class='add'>+        mem_put(local);</div><div class='add'>+    }</div><div class='add'>+    STACK_UNWIND_STRICT(lk, frame, -1, op_errno, flock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_lk_fan_in (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct gf_flock *flock,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+jbr_lk_fan_in(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint8_t          call_count = -1;</div><div class='del'>-        int32_t          ret        = -1;</div><div class='del'>-        gf_boolean_t     result     = _gf_false;</div><div class='del'>-        jbr_local_t     *local      = NULL;</div><div class='del'>-        jbr_private_t   *priv       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "op_ret = %d, op_errno = %d\n",</div><div class='del'>-                      op_ret, op_errno);</div><div class='add'>+    uint8_t call_count = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "op_ret = %d, op_errno = %d\n", op_ret,</div><div class='add'>+                 op_errno);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    call_count = --(local-&gt;call_count);</div><div class='add'>+    if (op_ret != -1) {</div><div class='add'>+        /* Increment the number of successful acks *</div><div class='add'>+         * received for the operation.             *</div><div class='add'>+         */</div><div class='add'>+        (local-&gt;successful_acks)++;</div><div class='add'>+        local-&gt;successful_op_ret = op_ret;</div><div class='add'>+    }</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "succ_acks = %d, op_ret = %d, op_errno = %d\n",</div><div class='add'>+                 op_ret, op_errno, local-&gt;successful_acks);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (call_count == 0) {</div><div class='add'>+        /*</div><div class='add'>+         * If the fop is a locking fop, then check quorum. If quorum *</div><div class='add'>+         * is met, send successful ack to the client. If quorum is   *</div><div class='add'>+         * not met, then rollback locking on followers, followed by  *</div><div class='add'>+         * rollback of locking on leader, and then sending -ve ack   *</div><div class='add'>+         * to the client.                                            *</div><div class='add'>+         *                                                           *</div><div class='add'>+         * If the fop is a unlocking fop, then call stub.            *</div><div class='add'>+         */</div><div class='add'>+        if (flock-&gt;l_type == F_UNLCK) {</div><div class='add'>+            call_resume(local-&gt;stub);</div><div class='add'>+        } else {</div><div class='add'>+            /*</div><div class='add'>+             * Remove from queue for locking fops, for unlocking *</div><div class='add'>+             * fops, it is taken care of in jbr_lk_complete      *</div><div class='add'>+             */</div><div class='add'>+            ret = jbr_remove_from_queue(frame, this);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        call_count = --(local-&gt;call_count);</div><div class='del'>-        if (op_ret != -1) {</div><div class='del'>-                /* Increment the number of successful acks *</div><div class='del'>-                 * received for the operation.             *</div><div class='add'>+            fd_unref(local-&gt;fd);</div><div class='add'>+</div><div class='add'>+            result = fop_quorum_check(this, (double)priv-&gt;n_children,</div><div class='add'>+                                      (double)local-&gt;successful_acks);</div><div class='add'>+            if (result == _gf_false) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, EROFS, J_MSG_QUORUM_NOT_MET,</div><div class='add'>+                       "Didn't receive enough acks to meet "</div><div class='add'>+                       "quorum. Failing the locking "</div><div class='add'>+                       "operation and initiating rollback on "</div><div class='add'>+                       "followers and the leader "</div><div class='add'>+                       "respectively.");</div><div class='add'>+</div><div class='add'>+                /* TODO: PERFORM ROLLBACK OF LOCKING ON</div><div class='add'>+                 * FOLLOWERS, FOLLOWED BY ROLLBACK ON</div><div class='add'>+                 * LEADER.</div><div class='ctx'>                  */</div><div class='del'>-                (local-&gt;successful_acks)++;</div><div class='del'>-                local-&gt;successful_op_ret = op_ret;</div><div class='del'>-        }</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "succ_acks = %d, op_ret = %d, op_errno = %d\n",</div><div class='del'>-                      op_ret, op_errno, local-&gt;successful_acks);</div><div class='del'>-        UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='del'>-                /*</div><div class='del'>-                 * If the fop is a locking fop, then check quorum. If quorum *</div><div class='del'>-                 * is met, send successful ack to the client. If quorum is   *</div><div class='del'>-                 * not met, then rollback locking on followers, followed by  *</div><div class='del'>-                 * rollback of locking on leader, and then sending -ve ack   *</div><div class='del'>-                 * to the client.                                            *</div><div class='del'>-                 *                                                           *</div><div class='del'>-                 * If the fop is a unlocking fop, then call stub.            *</div><div class='del'>-                 */</div><div class='del'>-                if (flock-&gt;l_type == F_UNLCK) {</div><div class='del'>-                        call_resume(local-&gt;stub);</div><div class='del'>-                } else {</div><div class='del'>-                        /*</div><div class='del'>-                         * Remove from queue for locking fops, for unlocking *</div><div class='del'>-                         * fops, it is taken care of in jbr_lk_complete      *</div><div class='del'>-                         */</div><div class='del'>-                        ret = jbr_remove_from_queue (frame, this);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        fd_unref(local-&gt;fd);</div><div class='del'>-</div><div class='del'>-                        result = fop_quorum_check (this,</div><div class='del'>-                                          (double)priv-&gt;n_children,</div><div class='del'>-                                          (double)local-&gt;successful_acks);</div><div class='del'>-                        if (result == _gf_false) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, EROFS,</div><div class='del'>-                                        J_MSG_QUORUM_NOT_MET,</div><div class='del'>-                                        "Didn't receive enough acks to meet "</div><div class='del'>-                                        "quorum. Failing the locking "</div><div class='del'>-                                        "operation and initiating rollback on "</div><div class='del'>-                                        "followers and the leader "</div><div class='del'>-                                        "respectively.");</div><div class='del'>-</div><div class='del'>-                                /* TODO: PERFORM ROLLBACK OF LOCKING ON</div><div class='del'>-                                 * FOLLOWERS, FOLLOWED BY ROLLBACK ON</div><div class='del'>-                                 * LEADER.</div><div class='del'>-                                 */</div><div class='del'>-</div><div class='del'>-                                STACK_UNWIND_STRICT (lk, frame, -1, EROFS,</div><div class='del'>-                                                     flock, xdata);</div><div class='del'>-                        } else {</div><div class='del'>-                                STACK_UNWIND_STRICT (lk, frame, 0, 0,</div><div class='del'>-                                                     flock, xdata);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+                STACK_UNWIND_STRICT(lk, frame, -1, EROFS, flock, xdata);</div><div class='add'>+            } else {</div><div class='add'>+                STACK_UNWIND_STRICT(lk, frame, 0, 0, flock, xdata);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -596,154 +570,146 @@ out:</div><div class='ctx'>  * function so as to support queues.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-jbr_perform_lk_on_leader (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         fd_t *fd, int32_t cmd, struct gf_flock *flock,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+jbr_perform_lk_on_leader(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                         int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret    = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, flock, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, flock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, jbr_lk_complete,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;lk,</div><div class='del'>-                    fd, cmd, flock, xdata);</div><div class='add'>+    STACK_WIND(frame, jbr_lk_complete, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lk, fd, cmd, flock, xdata);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_lk_perform_local_op (call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='del'>-                         fd_t *fd, int32_t cmd, struct gf_flock *flock,</div><div class='del'>-                         dict_t *xdata)</div><div class='add'>+jbr_lk_perform_local_op(call_frame_t *frame, xlator_t *this, int *op_errno,</div><div class='add'>+                        fd_t *fd, int32_t cmd, struct gf_flock *flock,</div><div class='add'>+                        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret    = -1;</div><div class='del'>-        jbr_local_t     *local  = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, op_errno, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, flock, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Check if the fop is a locking fop or unlocking fop, and</div><div class='del'>-         * handle it accordingly. If it is a locking fop, take the</div><div class='del'>-         * lock on leader first, and then send it to the followers.</div><div class='del'>-         * If it is a unlocking fop, unlock the followers first,</div><div class='del'>-         * and then on meeting quorum perform the unlock on the leader.</div><div class='del'>-         */</div><div class='del'>-        if (flock-&gt;l_type == F_UNLCK) {</div><div class='del'>-                ret = jbr_lk_call_dispatch (frame, this, op_errno,</div><div class='del'>-                                            fd, cmd, flock, xdata);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        } else {</div><div class='del'>-                jbr_inode_ctx_t  *ictx  = jbr_get_inode_ctx(this, fd-&gt;inode);</div><div class='del'>-</div><div class='del'>-                if (!ictx) {</div><div class='del'>-                        *op_errno = EIO;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                LOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                        if (ictx-&gt;active) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "queuing request due to conflict");</div><div class='del'>-</div><div class='del'>-                                local-&gt;qstub = fop_lk_stub (frame,</div><div class='del'>-                                                       jbr_perform_lk_on_leader,</div><div class='del'>-                                                       fd, cmd, flock, xdata);</div><div class='del'>-                                if (!local-&gt;qstub) {</div><div class='del'>-                                        UNLOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;pqueue);</div><div class='del'>-                                ++(ictx-&gt;pending);</div><div class='del'>-                                UNLOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        } else {</div><div class='del'>-                                list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;aqueue);</div><div class='del'>-                                ++(ictx-&gt;active);</div><div class='del'>-                        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, op_errno, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, flock, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Check if the fop is a locking fop or unlocking fop, and</div><div class='add'>+     * handle it accordingly. If it is a locking fop, take the</div><div class='add'>+     * lock on leader first, and then send it to the followers.</div><div class='add'>+     * If it is a unlocking fop, unlock the followers first,</div><div class='add'>+     * and then on meeting quorum perform the unlock on the leader.</div><div class='add'>+     */</div><div class='add'>+    if (flock-&gt;l_type == F_UNLCK) {</div><div class='add'>+        ret = jbr_lk_call_dispatch(frame, this, op_errno, fd, cmd, flock,</div><div class='add'>+                                   xdata);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    } else {</div><div class='add'>+        jbr_inode_ctx_t *ictx = jbr_get_inode_ctx(this, fd-&gt;inode);</div><div class='add'>+</div><div class='add'>+        if (!ictx) {</div><div class='add'>+            *op_errno = EIO;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        LOCK(&amp;ictx-&gt;lock);</div><div class='add'>+        if (ictx-&gt;active) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "queuing request due to conflict");</div><div class='add'>+</div><div class='add'>+            local-&gt;qstub = fop_lk_stub(frame, jbr_perform_lk_on_leader, fd, cmd,</div><div class='add'>+                                       flock, xdata);</div><div class='add'>+            if (!local-&gt;qstub) {</div><div class='ctx'>                 UNLOCK(&amp;ictx-&gt;lock);</div><div class='del'>-                ret = jbr_perform_lk_on_leader (frame, this, fd, cmd,</div><div class='del'>-                                                flock, xdata);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;pqueue);</div><div class='add'>+            ++(ictx-&gt;pending);</div><div class='add'>+            UNLOCK(&amp;ictx-&gt;lock);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            list_add_tail(&amp;local-&gt;qlinks, &amp;ictx-&gt;aqueue);</div><div class='add'>+            ++(ictx-&gt;active);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;ictx-&gt;lock);</div><div class='add'>+        ret = jbr_perform_lk_on_leader(frame, this, fd, cmd, flock, xdata);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_lk_continue (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+jbr_lk_continue(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+                struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret      = -1;</div><div class='del'>-        jbr_local_t     *local    = NULL;</div><div class='del'>-        jbr_private_t   *priv     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, flock, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, xdata, out);</div><div class='del'>-</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, flock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, xdata, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * If it's a locking fop, then call dispatch to followers  *</div><div class='add'>+     * If it's a unlock fop, then perform the unlock operation *</div><div class='add'>+     */</div><div class='add'>+    if (flock-&gt;l_type == F_UNLCK) {</div><div class='add'>+        STACK_WIND(frame, jbr_lk_complete, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;lk, fd, cmd, flock, xdata);</div><div class='add'>+    } else {</div><div class='ctx'>         /*</div><div class='del'>-         * If it's a locking fop, then call dispatch to followers  *</div><div class='del'>-         * If it's a unlock fop, then perform the unlock operation *</div><div class='add'>+         * Directly call jbr_lk_dispatch instead of appending *</div><div class='add'>+         * in queue, which is done at jbr_lk_perform_local_op *</div><div class='add'>+         * for locking fops                                   *</div><div class='ctx'>          */</div><div class='del'>-        if (flock-&gt;l_type == F_UNLCK) {</div><div class='del'>-                STACK_WIND (frame, jbr_lk_complete,</div><div class='del'>-                            FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;lk,</div><div class='del'>-                            fd, cmd, flock, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                /*</div><div class='del'>-                 * Directly call jbr_lk_dispatch instead of appending *</div><div class='del'>-                 * in queue, which is done at jbr_lk_perform_local_op *</div><div class='del'>-                 * for locking fops                                   *</div><div class='del'>-                 */</div><div class='del'>-                ret = jbr_lk_dispatch (frame, this, fd, cmd,</div><div class='del'>-                                       flock, xdata);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        STACK_UNWIND_STRICT (lk, frame, -1, 0,</div><div class='del'>-                                             flock, xdata);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        ret = jbr_lk_dispatch(frame, this, fd, cmd, flock, xdata);</div><div class='add'>+        if (ret) {</div><div class='add'>+            STACK_UNWIND_STRICT(lk, frame, -1, 0, flock, xdata);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint8_t</div><div class='del'>-jbr_count_up_kids (jbr_private_t *priv)</div><div class='add'>+jbr_count_up_kids(jbr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        uint8_t         retval  = 0;</div><div class='del'>-        uint8_t         i;</div><div class='add'>+    uint8_t retval = 0;</div><div class='add'>+    uint8_t i;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;n_children; ++i) {</div><div class='del'>-                if (priv-&gt;kid_state &amp; (1 &lt;&lt; i)) {</div><div class='del'>-                        ++retval;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;n_children; ++i) {</div><div class='add'>+        if (priv-&gt;kid_state &amp; (1 &lt;&lt; i)) {</div><div class='add'>+            ++retval;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return retval;</div><div class='add'>+    return retval;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -758,706 +724,673 @@ jbr_count_up_kids (jbr_private_t *priv)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-               struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+jbr_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t     *local  = frame-&gt;local;</div><div class='del'>-        gf_boolean_t    unwind;</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-                unwind = !--(local-&gt;call_count);</div><div class='del'>-        UNLOCK(&amp;frame-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (unwind) {</div><div class='del'>-                STACK_UNWIND_STRICT (fsync, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                                     postbuf, xdata);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    jbr_local_t *local = frame-&gt;local;</div><div class='add'>+    gf_boolean_t unwind;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    unwind = !--(local-&gt;call_count);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (unwind) {</div><div class='add'>+        STACK_UNWIND_STRICT(fsync, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                            xdata);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_fsync_local_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+jbr_fsync_local_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        jbr_dirty_list_t        *dirty;</div><div class='del'>-        jbr_dirty_list_t        *dtmp;</div><div class='del'>-        jbr_local_t             *local  = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (dirty, dtmp, &amp;local-&gt;qlinks, links) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "sending post-op on %p (%p)", local-&gt;fd, dirty);</div><div class='del'>-                GF_FREE(dirty);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return jbr_fsync_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                              prebuf, postbuf, xdata);</div><div class='add'>+    jbr_dirty_list_t *dirty;</div><div class='add'>+    jbr_dirty_list_t *dtmp;</div><div class='add'>+    jbr_local_t *local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(dirty, dtmp, &amp;local-&gt;qlinks, links)</div><div class='add'>+    {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "sending post-op on %p (%p)", local-&gt;fd,</div><div class='add'>+                     dirty);</div><div class='add'>+        GF_FREE(dirty);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return jbr_fsync_cbk(frame, cookie, this, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                         xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+jbr_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        jbr_private_t   *priv   = this-&gt;private;</div><div class='del'>-        jbr_local_t     *local;</div><div class='del'>-        uint64_t        ctx_int         = 0LL;</div><div class='del'>-        jbr_fd_ctx_t    *ctx_ptr;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-</div><div class='del'>-        local = mem_get0(this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                STACK_UNWIND_STRICT(fsync, frame, -1, ENOMEM,</div><div class='del'>-                                    NULL, NULL, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        INIT_LIST_HEAD(&amp;local-&gt;qlinks);</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-</div><div class='del'>-        /* Move the dirty list from the fd to the fsync request. */</div><div class='del'>-        LOCK(&amp;fd-&gt;lock);</div><div class='del'>-                if (__fd_ctx_get(fd, this, &amp;ctx_int) == 0) {</div><div class='del'>-                        ctx_ptr = (jbr_fd_ctx_t *)(long)ctx_int;</div><div class='del'>-                        list_splice_init (&amp;ctx_ptr-&gt;dirty_list,</div><div class='del'>-                                          &amp;local-&gt;qlinks);</div><div class='del'>-                }</div><div class='del'>-        UNLOCK(&amp;fd-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* Issue the local call. */</div><div class='del'>-        local-&gt;call_count = priv-&gt;leader ? priv-&gt;n_children : 1;</div><div class='del'>-        STACK_WIND (frame, jbr_fsync_local_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fsync,</div><div class='del'>-                    fd, flags, xdata);</div><div class='del'>-</div><div class='del'>-        /* Issue remote calls if we're the leader. */</div><div class='del'>-        if (priv-&gt;leader) {</div><div class='del'>-                for (trav = this-&gt;children-&gt;next; trav; trav = trav-&gt;next) {</div><div class='del'>-                        STACK_WIND (frame, jbr_fsync_cbk,</div><div class='del'>-                                    FIRST_CHILD(this),</div><div class='del'>-                                    FIRST_CHILD(this)-&gt;fops-&gt;fsync,</div><div class='del'>-                                    fd, flags, xdata);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='add'>+    jbr_local_t *local;</div><div class='add'>+    uint64_t ctx_int = 0LL;</div><div class='add'>+    jbr_fd_ctx_t *ctx_ptr;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        STACK_UNWIND_STRICT(fsync, frame, -1, ENOMEM, NULL, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+    INIT_LIST_HEAD(&amp;local-&gt;qlinks);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+</div><div class='add'>+    /* Move the dirty list from the fd to the fsync request. */</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    if (__fd_ctx_get(fd, this, &amp;ctx_int) == 0) {</div><div class='add'>+        ctx_ptr = (jbr_fd_ctx_t *)(long)ctx_int;</div><div class='add'>+        list_splice_init(&amp;ctx_ptr-&gt;dirty_list, &amp;local-&gt;qlinks);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* Issue the local call. */</div><div class='add'>+    local-&gt;call_count = priv-&gt;leader ? priv-&gt;n_children : 1;</div><div class='add'>+    STACK_WIND(frame, jbr_fsync_local_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+</div><div class='add'>+    /* Issue remote calls if we're the leader. */</div><div class='add'>+    if (priv-&gt;leader) {</div><div class='add'>+        for (trav = this-&gt;children-&gt;next; trav; trav = trav-&gt;next) {</div><div class='add'>+            STACK_WIND(frame, jbr_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+                       FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_getxattr_special (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                      const char *name, dict_t *xdata)</div><div class='add'>+jbr_getxattr_special(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                     const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        dict_t          *result;</div><div class='del'>-        jbr_private_t   *priv   = this-&gt;private;</div><div class='add'>+    dict_t *result;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;leader) {</div><div class='del'>-                STACK_UNWIND_STRICT (getxattr, frame, -1, EREMOTE, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;leader) {</div><div class='add'>+        STACK_UNWIND_STRICT(getxattr, frame, -1, EREMOTE, NULL, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!name || (strcmp(name, JBR_REP_COUNT_XATTR) != 0)) {</div><div class='del'>-                STACK_WIND_TAIL (frame,</div><div class='del'>-                                 FIRST_CHILD(this),</div><div class='del'>-                                 FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-                                 loc, name, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!name || (strcmp(name, JBR_REP_COUNT_XATTR) != 0)) {</div><div class='add'>+        STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                        FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        result = dict_new();</div><div class='del'>-        if (!result) {</div><div class='del'>-                goto dn_failed;</div><div class='del'>-        }</div><div class='add'>+    result = dict_new();</div><div class='add'>+    if (!result) {</div><div class='add'>+        goto dn_failed;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;up_children = jbr_count_up_kids(this-&gt;private);</div><div class='del'>-        if (dict_set_uint32(result, JBR_REP_COUNT_XATTR,</div><div class='del'>-                            priv-&gt;up_children) != 0) {</div><div class='del'>-                goto dsu_failed;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;up_children = jbr_count_up_kids(this-&gt;private);</div><div class='add'>+    if (dict_set_uint32(result, JBR_REP_COUNT_XATTR, priv-&gt;up_children) != 0) {</div><div class='add'>+        goto dsu_failed;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, 0, 0, result, NULL);</div><div class='del'>-        dict_unref(result);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, 0, 0, result, NULL);</div><div class='add'>+    dict_unref(result);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> dsu_failed:</div><div class='del'>-        dict_unref(result);</div><div class='add'>+    dict_unref(result);</div><div class='ctx'> dn_failed:</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-jbr_flush_fd (xlator_t *this, jbr_fd_ctx_t *fd_ctx)</div><div class='add'>+jbr_flush_fd(xlator_t *this, jbr_fd_ctx_t *fd_ctx)</div><div class='ctx'> {</div><div class='del'>-        jbr_dirty_list_t        *dirty;</div><div class='del'>-        jbr_dirty_list_t        *dtmp;</div><div class='add'>+    jbr_dirty_list_t *dirty;</div><div class='add'>+    jbr_dirty_list_t *dtmp;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (dirty, dtmp, &amp;fd_ctx-&gt;dirty_list, links) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                              "sending post-op on %p (%p)", fd_ctx-&gt;fd, dirty);</div><div class='del'>-                GF_FREE(dirty);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(dirty, dtmp, &amp;fd_ctx-&gt;dirty_list, links)</div><div class='add'>+    {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "sending post-op on %p (%p)", fd_ctx-&gt;fd,</div><div class='add'>+                     dirty);</div><div class='add'>+        GF_FREE(dirty);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD(&amp;fd_ctx-&gt;dirty_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fd_ctx-&gt;dirty_list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-jbr_flush_thread (void *ctx)</div><div class='add'>+jbr_flush_thread(void *ctx)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this   = ctx;</div><div class='del'>-        jbr_private_t           *priv   = this-&gt;private;</div><div class='del'>-        struct list_head        dirty_fds;</div><div class='del'>-        jbr_fd_ctx_t            *fd_ctx;</div><div class='del'>-        jbr_fd_ctx_t            *fd_tmp;</div><div class='del'>-        int                     ret;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                /*</div><div class='del'>-                 * We have to be very careful to avoid lock inversions here, so</div><div class='del'>-                 * we can't just hold priv-&gt;dirty_lock while we take and</div><div class='del'>-                 * release locks for each fd.  Instead, we only hold dirty_lock</div><div class='del'>-                 * at the beginning of each iteration, as we (effectively) make</div><div class='del'>-                 * a copy of the current list head and then clear the original.</div><div class='del'>-                 * This leads to four scenarios for adding the first entry to</div><div class='del'>-                 * an fd and potentially putting it on the global list.</div><div class='del'>-                 *</div><div class='del'>-                 * (1) While we're asleep.  No lock contention, it just gets</div><div class='del'>-                 *     added and will be processed on the next iteration.</div><div class='del'>-                 *</div><div class='del'>-                 * (2) After we've made a local copy, but before we've started</div><div class='del'>-                 *     processing that fd.  The new entry will be added to the</div><div class='del'>-                 *     fd (under its lock), and we'll process it on the current</div><div class='del'>-                 *     iteration.</div><div class='del'>-                 *</div><div class='del'>-                 * (3) While we're processing the fd.  They'll block on the fd</div><div class='del'>-                 *     lock, then see that the list is empty and put it on the</div><div class='del'>-                 *     global list.  We'll process it here on the next</div><div class='del'>-                 *     iteration.</div><div class='del'>-                 *</div><div class='del'>-                 * (4) While we're working, but after we've processed that fd.</div><div class='del'>-                 *     Same as (1) as far as that fd is concerned.</div><div class='del'>-                 */</div><div class='del'>-                INIT_LIST_HEAD(&amp;dirty_fds);</div><div class='del'>-                LOCK(&amp;priv-&gt;dirty_lock);</div><div class='del'>-                list_splice_init(&amp;priv-&gt;dirty_fds, &amp;dirty_fds);</div><div class='del'>-                UNLOCK(&amp;priv-&gt;dirty_lock);</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (fd_ctx, fd_tmp, &amp;dirty_fds, fd_list) {</div><div class='del'>-                        ret = syncop_fsync(FIRST_CHILD(this), fd_ctx-&gt;fd, 0,</div><div class='del'>-                                           NULL, NULL, NULL, NULL);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        J_MSG_SYS_CALL_FAILURE,</div><div class='del'>-                                        "failed to fsync %p (%d)",</div><div class='del'>-                                        fd_ctx-&gt;fd, -ret);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        LOCK(&amp;fd_ctx-&gt;fd-&gt;lock);</div><div class='del'>-                                jbr_flush_fd(this, fd_ctx);</div><div class='del'>-                                list_del_init(&amp;fd_ctx-&gt;fd_list);</div><div class='del'>-                        UNLOCK(&amp;fd_ctx-&gt;fd-&gt;lock);</div><div class='del'>-                        fd_unref(fd_ctx-&gt;fd);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                sleep(JBR_FLUSH_INTERVAL);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return NULL;</div><div class='add'>+    xlator_t *this = ctx;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='add'>+    struct list_head dirty_fds;</div><div class='add'>+    jbr_fd_ctx_t *fd_ctx;</div><div class='add'>+    jbr_fd_ctx_t *fd_tmp;</div><div class='add'>+    int ret;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        /*</div><div class='add'>+         * We have to be very careful to avoid lock inversions here, so</div><div class='add'>+         * we can't just hold priv-&gt;dirty_lock while we take and</div><div class='add'>+         * release locks for each fd.  Instead, we only hold dirty_lock</div><div class='add'>+         * at the beginning of each iteration, as we (effectively) make</div><div class='add'>+         * a copy of the current list head and then clear the original.</div><div class='add'>+         * This leads to four scenarios for adding the first entry to</div><div class='add'>+         * an fd and potentially putting it on the global list.</div><div class='add'>+         *</div><div class='add'>+         * (1) While we're asleep.  No lock contention, it just gets</div><div class='add'>+         *     added and will be processed on the next iteration.</div><div class='add'>+         *</div><div class='add'>+         * (2) After we've made a local copy, but before we've started</div><div class='add'>+         *     processing that fd.  The new entry will be added to the</div><div class='add'>+         *     fd (under its lock), and we'll process it on the current</div><div class='add'>+         *     iteration.</div><div class='add'>+         *</div><div class='add'>+         * (3) While we're processing the fd.  They'll block on the fd</div><div class='add'>+         *     lock, then see that the list is empty and put it on the</div><div class='add'>+         *     global list.  We'll process it here on the next</div><div class='add'>+         *     iteration.</div><div class='add'>+         *</div><div class='add'>+         * (4) While we're working, but after we've processed that fd.</div><div class='add'>+         *     Same as (1) as far as that fd is concerned.</div><div class='add'>+         */</div><div class='add'>+        INIT_LIST_HEAD(&amp;dirty_fds);</div><div class='add'>+        LOCK(&amp;priv-&gt;dirty_lock);</div><div class='add'>+        list_splice_init(&amp;priv-&gt;dirty_fds, &amp;dirty_fds);</div><div class='add'>+        UNLOCK(&amp;priv-&gt;dirty_lock);</div><div class='add'>+</div><div class='add'>+        list_for_each_entry_safe(fd_ctx, fd_tmp, &amp;dirty_fds, fd_list)</div><div class='add'>+        {</div><div class='add'>+            ret = syncop_fsync(FIRST_CHILD(this), fd_ctx-&gt;fd, 0, NULL, NULL,</div><div class='add'>+                               NULL, NULL);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='add'>+                       "failed to fsync %p (%d)", fd_ctx-&gt;fd, -ret);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            LOCK(&amp;fd_ctx-&gt;fd-&gt;lock);</div><div class='add'>+            jbr_flush_fd(this, fd_ctx);</div><div class='add'>+            list_del_init(&amp;fd_ctx-&gt;fd_list);</div><div class='add'>+            UNLOCK(&amp;fd_ctx-&gt;fd-&gt;lock);</div><div class='add'>+            fd_unref(fd_ctx-&gt;fd);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        sleep(JBR_FLUSH_INTERVAL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-jbr_get_changelog_dir (xlator_t *this, char **cl_dir_p)</div><div class='add'>+jbr_get_changelog_dir(xlator_t *this, char **cl_dir_p)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *cl_xl;</div><div class='del'>-</div><div class='del'>-        /* Find our changelog translator. */</div><div class='del'>-        cl_xl = this;</div><div class='del'>-        while (cl_xl) {</div><div class='del'>-                if (strcmp(cl_xl-&gt;type, "features/changelog") == 0) {</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                cl_xl = cl_xl-&gt;children-&gt;xlator;</div><div class='del'>-        }</div><div class='del'>-        if (!cl_xl) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_INIT_FAIL,</div><div class='del'>-                        "failed to find changelog translator");</div><div class='del'>-                return ENOENT;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Find the actual changelog directory. */</div><div class='del'>-        if (dict_get_str(cl_xl-&gt;options, "changelog-dir", cl_dir_p) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_INIT_FAIL,</div><div class='del'>-                        "failed to find changelog-dir for %s", cl_xl-&gt;name);</div><div class='del'>-                return ENODATA;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    xlator_t *cl_xl;</div><div class='add'>+</div><div class='add'>+    /* Find our changelog translator. */</div><div class='add'>+    cl_xl = this;</div><div class='add'>+    while (cl_xl) {</div><div class='add'>+        if (strcmp(cl_xl-&gt;type, "features/changelog") == 0) {</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        cl_xl = cl_xl-&gt;children-&gt;xlator;</div><div class='add'>+    }</div><div class='add'>+    if (!cl_xl) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_INIT_FAIL,</div><div class='add'>+               "failed to find changelog translator");</div><div class='add'>+        return ENOENT;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Find the actual changelog directory. */</div><div class='add'>+    if (dict_get_str(cl_xl-&gt;options, "changelog-dir", cl_dir_p) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_INIT_FAIL,</div><div class='add'>+               "failed to find changelog-dir for %s", cl_xl-&gt;name);</div><div class='add'>+        return ENODATA;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-jbr_get_terms (call_frame_t *frame, xlator_t *this)</div><div class='add'>+jbr_get_terms(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t        op_errno      = 0;</div><div class='del'>-        char          *cl_dir        = NULL;</div><div class='del'>-        int32_t        term_first    = -1;</div><div class='del'>-        int32_t        term_contig   = -1;</div><div class='del'>-        int32_t        term_last     = -1;</div><div class='del'>-        int            term_num      = 0;</div><div class='del'>-        char          *probe_str     = NULL;</div><div class='del'>-        dict_t        *my_xdata      = NULL;</div><div class='del'>-        DIR           *fp            = NULL;</div><div class='del'>-        struct dirent *entry         = NULL;</div><div class='del'>-        struct dirent  scratch[2]    = {{0,},};</div><div class='del'>-</div><div class='del'>-        op_errno = jbr_get_changelog_dir(this, &amp;cl_dir);</div><div class='del'>-        if (op_errno) {</div><div class='del'>-                goto err;       /* Error was already logged. */</div><div class='del'>-        }</div><div class='del'>-        op_errno = ENODATA;     /* Most common error after this. */</div><div class='del'>-</div><div class='del'>-        fp = sys_opendir (cl_dir);</div><div class='del'>-        if (!fp) {</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    char *cl_dir = NULL;</div><div class='add'>+    int32_t term_first = -1;</div><div class='add'>+    int32_t term_contig = -1;</div><div class='add'>+    int32_t term_last = -1;</div><div class='add'>+    int term_num = 0;</div><div class='add'>+    char *probe_str = NULL;</div><div class='add'>+    dict_t *my_xdata = NULL;</div><div class='add'>+    DIR *fp = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    op_errno = jbr_get_changelog_dir(this, &amp;cl_dir);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        goto err; /* Error was already logged. */</div><div class='add'>+    }</div><div class='add'>+    op_errno = ENODATA; /* Most common error after this. */</div><div class='add'>+</div><div class='add'>+    fp = sys_opendir(cl_dir);</div><div class='add'>+    if (!fp) {</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Find first and last terms. */</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(fp, scratch);</div><div class='add'>+        if (!entry || errno != 0) {</div><div class='add'>+            if (errno != 0) {</div><div class='ctx'>                 op_errno = errno;</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Find first and last terms. */</div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (fp, scratch);</div><div class='del'>-                if (!entry || errno != 0) {</div><div class='del'>-                        if (errno != 0) {</div><div class='del'>-                                op_errno = errno;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (fnmatch("TERM.*", entry-&gt;d_name, FNM_PATHNAME) != 0) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                /* +5 points to the character after the period */</div><div class='del'>-                term_num = atoi(entry-&gt;d_name+5);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        J_MSG_GENERIC,</div><div class='del'>-                        "%s =&gt; %d", entry-&gt;d_name, term_num);</div><div class='del'>-                if (term_num &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                J_MSG_INVALID,</div><div class='del'>-                                "invalid term file name %s", entry-&gt;d_name);</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                if ((term_first &lt; 0) || (term_first &gt; term_num)) {</div><div class='del'>-                        term_first = term_num;</div><div class='del'>-                }</div><div class='del'>-                if ((term_last &lt; 0) || (term_last &lt; term_num)) {</div><div class='del'>-                        term_last = term_num;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if ((term_first &lt; 0) || (term_last &lt; 0)) {</div><div class='del'>-                /* TBD: are we *sure* there should always be at least one? */</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_NO_DATA, "no terms found");</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) sys_closedir (fp);</div><div class='del'>-        fp = NULL;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Find term_contig, which is the earliest term for which there are</div><div class='del'>-         * no gaps between it and term_last.</div><div class='del'>-         */</div><div class='del'>-        for (term_contig = term_last; term_contig &gt; 0; --term_contig) {</div><div class='del'>-                if (gf_asprintf(&amp;probe_str, "%s/TERM.%d",</div><div class='del'>-                                cl_dir, term_contig-1) &lt;= 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                J_MSG_MEM_ERR,</div><div class='del'>-                                "failed to format term %d", term_contig-1);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                if (sys_access(probe_str, F_OK) != 0) {</div><div class='del'>-                        GF_FREE(probe_str);</div><div class='del'>-                        probe_str = NULL;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                GF_FREE(probe_str);</div><div class='del'>-                probe_str = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                J_MSG_GENERIC,</div><div class='del'>-                "found terms %d-%d (%d)",</div><div class='del'>-                term_first, term_last, term_contig);</div><div class='del'>-</div><div class='del'>-        /* Return what we've found */</div><div class='del'>-        my_xdata = dict_new();</div><div class='del'>-        if (!my_xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_MEM_ERR,</div><div class='del'>-                        "failed to allocate reply dictionary");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (dict_set_int32(my_xdata, "term-first", term_first) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_DICT_FLR,</div><div class='del'>-                        "failed to set term-first");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (dict_set_int32(my_xdata, "term-contig", term_contig) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_DICT_FLR,</div><div class='del'>-                        "failed to set term-contig");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        if (dict_set_int32(my_xdata, "term-last", term_last) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_DICT_FLR,</div><div class='del'>-                        "failed to set term-last");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Finally! */</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, 0, 0, my_xdata);</div><div class='del'>-        dict_unref(my_xdata);</div><div class='del'>-        return;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (fnmatch("TERM.*", entry-&gt;d_name, FNM_PATHNAME) != 0) {</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        /* +5 points to the character after the period */</div><div class='add'>+        term_num = atoi(entry-&gt;d_name + 5);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC, "%s =&gt; %d",</div><div class='add'>+               entry-&gt;d_name, term_num);</div><div class='add'>+        if (term_num &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_INVALID,</div><div class='add'>+                   "invalid term file name %s", entry-&gt;d_name);</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        if ((term_first &lt; 0) || (term_first &gt; term_num)) {</div><div class='add'>+            term_first = term_num;</div><div class='add'>+        }</div><div class='add'>+        if ((term_last &lt; 0) || (term_last &lt; term_num)) {</div><div class='add'>+            term_last = term_num;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if ((term_first &lt; 0) || (term_last &lt; 0)) {</div><div class='add'>+        /* TBD: are we *sure* there should always be at least one? */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA, "no terms found");</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)sys_closedir(fp);</div><div class='add'>+    fp = NULL;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Find term_contig, which is the earliest term for which there are</div><div class='add'>+     * no gaps between it and term_last.</div><div class='add'>+     */</div><div class='add'>+    for (term_contig = term_last; term_contig &gt; 0; --term_contig) {</div><div class='add'>+        if (gf_asprintf(&amp;probe_str, "%s/TERM.%d", cl_dir, term_contig - 1) &lt;=</div><div class='add'>+            0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+                   "failed to format term %d", term_contig - 1);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        if (sys_access(probe_str, F_OK) != 0) {</div><div class='add'>+            GF_FREE(probe_str);</div><div class='add'>+            probe_str = NULL;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+        GF_FREE(probe_str);</div><div class='add'>+        probe_str = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC, "found terms %d-%d (%d)",</div><div class='add'>+           term_first, term_last, term_contig);</div><div class='add'>+</div><div class='add'>+    /* Return what we've found */</div><div class='add'>+    my_xdata = dict_new();</div><div class='add'>+    if (!my_xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+               "failed to allocate reply dictionary");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (dict_set_int32(my_xdata, "term-first", term_first) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+               "failed to set term-first");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (dict_set_int32(my_xdata, "term-contig", term_contig) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+               "failed to set term-contig");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    if (dict_set_int32(my_xdata, "term-last", term_last) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+               "failed to set term-last");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Finally! */</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, 0, 0, my_xdata);</div><div class='add'>+    dict_unref(my_xdata);</div><div class='add'>+    return;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (fp) {</div><div class='del'>-                (void) sys_closedir (fp);</div><div class='del'>-        }</div><div class='del'>-        if (my_xdata) {</div><div class='del'>-                dict_unref(my_xdata);</div><div class='del'>-        }</div><div class='add'>+    if (fp) {</div><div class='add'>+        (void)sys_closedir(fp);</div><div class='add'>+    }</div><div class='add'>+    if (my_xdata) {</div><div class='add'>+        dict_unref(my_xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (probe_str)</div><div class='del'>-                GF_FREE (probe_str);</div><div class='add'>+    if (probe_str)</div><div class='add'>+        GF_FREE(probe_str);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, -1, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, -1, op_errno, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> long</div><div class='del'>-get_entry_count (xlator_t *this, int fd)</div><div class='add'>+get_entry_count(xlator_t *this, int fd)</div><div class='ctx'> {</div><div class='del'>-        struct stat     buf;</div><div class='del'>-        long            min;            /* last entry not known to be empty */</div><div class='del'>-        long            max;            /* first entry known to be empty */</div><div class='del'>-        long            curr;</div><div class='del'>-        char            entry[CHANGELOG_ENTRY_SIZE];</div><div class='del'>-</div><div class='del'>-        if (sys_fstat (fd, &amp;buf) &lt; 0) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    struct stat buf;</div><div class='add'>+    long min; /* last entry not known to be empty */</div><div class='add'>+    long max; /* first entry known to be empty */</div><div class='add'>+    long curr;</div><div class='add'>+    char entry[CHANGELOG_ENTRY_SIZE];</div><div class='ctx'> </div><div class='del'>-        min = 0;</div><div class='del'>-        max = buf.st_size / CHANGELOG_ENTRY_SIZE;</div><div class='add'>+    if (sys_fstat(fd, &amp;buf) &lt; 0) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while ((min+1) &lt; max) {</div><div class='del'>-                curr = (min + max) / 2;</div><div class='del'>-                if (sys_lseek(fd, curr*CHANGELOG_ENTRY_SIZE, SEEK_SET) &lt; 0) {</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                if (sys_read(fd, entry, sizeof(entry)) != sizeof(entry)) {</div><div class='del'>-                        return -1;</div><div class='del'>-                }</div><div class='del'>-                if ((entry[0] == '_') &amp;&amp; (entry[1] == 'P')) {</div><div class='del'>-                        min = curr;</div><div class='del'>-                } else {</div><div class='del'>-                        max = curr;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    min = 0;</div><div class='add'>+    max = buf.st_size / CHANGELOG_ENTRY_SIZE;</div><div class='ctx'> </div><div class='del'>-        if (sys_lseek(fd, 0, SEEK_SET) &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        J_MSG_SYS_CALL_FAILURE,</div><div class='del'>-                        "failed to reset offset");</div><div class='add'>+    while ((min + 1) &lt; max) {</div><div class='add'>+        curr = (min + max) / 2;</div><div class='add'>+        if (sys_lseek(fd, curr * CHANGELOG_ENTRY_SIZE, SEEK_SET) &lt; 0) {</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='del'>-        return max;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-jbr_open_term (call_frame_t *frame, xlator_t *this, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t         op_errno;</div><div class='del'>-        char            *cl_dir;</div><div class='del'>-        char            *term;</div><div class='del'>-        char            *path = NULL;</div><div class='del'>-        jbr_private_t   *priv           = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        op_errno = jbr_get_changelog_dir(this, &amp;cl_dir);</div><div class='del'>-        if (op_errno) {</div><div class='del'>-                goto err;</div><div class='add'>+        if (sys_read(fd, entry, sizeof(entry)) != sizeof(entry)) {</div><div class='add'>+            return -1;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (dict_get_str(xdata, "term", &amp;term) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_NO_DATA, "missing term");</div><div class='del'>-                op_errno = ENODATA;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (gf_asprintf(&amp;path, "%s/TERM.%s", cl_dir, term) &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_MEM_ERR, "failed to construct path");</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+        if ((entry[0] == '_') &amp;&amp; (entry[1] == 'P')) {</div><div class='add'>+            min = curr;</div><div class='add'>+        } else {</div><div class='add'>+            max = curr;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;term_fd &gt;= 0) {</div><div class='del'>-                sys_close (priv-&gt;term_fd);</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;term_fd = open(path, O_RDONLY);</div><div class='del'>-        if (priv-&gt;term_fd &lt; 0) {</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_SYS_CALL_FAILURE,</div><div class='del'>-                        "failed to open term file");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (sys_lseek(fd, 0, SEEK_SET) &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='add'>+               "failed to reset offset");</div><div class='add'>+    }</div><div class='add'>+    return max;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        priv-&gt;term_total = get_entry_count(this, priv-&gt;term_fd);</div><div class='del'>-        if (priv-&gt;term_total &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_NO_DATA, "failed to get entry count");</div><div class='del'>-                sys_close (priv-&gt;term_fd);</div><div class='del'>-                priv-&gt;term_fd = -1;</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;term_read = 0;</div><div class='add'>+void</div><div class='add'>+jbr_open_term(call_frame_t *frame, xlator_t *this, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t op_errno;</div><div class='add'>+    char *cl_dir;</div><div class='add'>+    char *term;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    op_errno = jbr_get_changelog_dir(this, &amp;cl_dir);</div><div class='add'>+    if (op_errno) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(xdata, "term", &amp;term) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA, "missing term");</div><div class='add'>+        op_errno = ENODATA;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (gf_asprintf(&amp;path, "%s/TERM.%s", cl_dir, term) &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+               "failed to construct path");</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;term_fd &gt;= 0) {</div><div class='add'>+        sys_close(priv-&gt;term_fd);</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;term_fd = open(path, O_RDONLY);</div><div class='add'>+    if (priv-&gt;term_fd &lt; 0) {</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='add'>+               "failed to open term file");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;term_total = get_entry_count(this, priv-&gt;term_fd);</div><div class='add'>+    if (priv-&gt;term_total &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA,</div><div class='add'>+               "failed to get entry count");</div><div class='add'>+        sys_close(priv-&gt;term_fd);</div><div class='add'>+        priv-&gt;term_fd = -1;</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;term_read = 0;</div><div class='ctx'> </div><div class='del'>-        /* Success! */</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, 0, 0, NULL);</div><div class='del'>-        GF_FREE (path);</div><div class='del'>-        return;</div><div class='add'>+    /* Success! */</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, 0, 0, NULL);</div><div class='add'>+    GF_FREE(path);</div><div class='add'>+    return;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, -1, op_errno, NULL);</div><div class='del'>-        GF_FREE (path);</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, -1, op_errno, NULL);</div><div class='add'>+    GF_FREE(path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-jbr_next_entry (call_frame_t *frame, xlator_t *this)</div><div class='add'>+jbr_next_entry(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t         op_errno        = ENOMEM;</div><div class='del'>-        jbr_private_t   *priv           = this-&gt;private;</div><div class='del'>-        ssize_t          nbytes;</div><div class='del'>-        dict_t          *my_xdata;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;term_fd &lt; 0) {</div><div class='del'>-                op_errno = EBADFD;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;term_read &gt;= priv-&gt;term_total) {</div><div class='del'>-                op_errno = ENODATA;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        nbytes = sys_read (priv-&gt;term_fd, priv-&gt;term_buf, CHANGELOG_ENTRY_SIZE);</div><div class='del'>-        if (nbytes &lt; CHANGELOG_ENTRY_SIZE) {</div><div class='del'>-                if (nbytes &lt; 0) {</div><div class='del'>-                        op_errno = errno;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                J_MSG_SYS_CALL_FAILURE,</div><div class='del'>-                                "error reading next entry: %s",</div><div class='del'>-                                strerror(errno));</div><div class='del'>-                } else {</div><div class='del'>-                        op_errno = EIO;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                J_MSG_SYS_CALL_FAILURE,</div><div class='del'>-                                "got %zd/%d bytes for next entry",</div><div class='del'>-                                nbytes, CHANGELOG_ENTRY_SIZE);</div><div class='del'>-                }</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ++(priv-&gt;term_read);</div><div class='del'>-</div><div class='del'>-        my_xdata = dict_new();</div><div class='del'>-        if (!my_xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_MEM_ERR, "failed to allocate reply xdata");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_set_static_bin(my_xdata, "data",</div><div class='del'>-                                priv-&gt;term_buf, CHANGELOG_ENTRY_SIZE) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        J_MSG_DICT_FLR, "failed to assign reply xdata");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, 0, 0, my_xdata);</div><div class='del'>-        dict_unref(my_xdata);</div><div class='del'>-        return;</div><div class='add'>+    int32_t op_errno = ENOMEM;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='add'>+    ssize_t nbytes;</div><div class='add'>+    dict_t *my_xdata;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;term_fd &lt; 0) {</div><div class='add'>+        op_errno = EBADFD;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;term_read &gt;= priv-&gt;term_total) {</div><div class='add'>+        op_errno = ENODATA;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    nbytes = sys_read(priv-&gt;term_fd, priv-&gt;term_buf, CHANGELOG_ENTRY_SIZE);</div><div class='add'>+    if (nbytes &lt; CHANGELOG_ENTRY_SIZE) {</div><div class='add'>+        if (nbytes &lt; 0) {</div><div class='add'>+            op_errno = errno;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='add'>+                   "error reading next entry: %s", strerror(errno));</div><div class='add'>+        } else {</div><div class='add'>+            op_errno = EIO;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='add'>+                   "got %zd/%d bytes for next entry", nbytes,</div><div class='add'>+                   CHANGELOG_ENTRY_SIZE);</div><div class='add'>+        }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ++(priv-&gt;term_read);</div><div class='add'>+</div><div class='add'>+    my_xdata = dict_new();</div><div class='add'>+    if (!my_xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+               "failed to allocate reply xdata");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_set_static_bin(my_xdata, "data", priv-&gt;term_buf,</div><div class='add'>+                            CHANGELOG_ENTRY_SIZE) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_DICT_FLR,</div><div class='add'>+               "failed to assign reply xdata");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, 0, 0, my_xdata);</div><div class='add'>+    dict_unref(my_xdata);</div><div class='add'>+    return;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, -1, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, -1, op_errno, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_ipc_fan_in (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+jbr_ipc_fan_in(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t   *local  = NULL;</div><div class='del'>-        int32_t        ret    = -1;</div><div class='del'>-        uint8_t        call_count;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint8_t call_count;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "op_ret = %d, op_errno = %d\n",</div><div class='del'>-                      op_ret, op_errno);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "op_ret = %d, op_errno = %d\n", op_ret,</div><div class='add'>+                 op_errno);</div><div class='ctx'> </div><div class='del'>-        LOCK(&amp;frame-&gt;lock);</div><div class='del'>-        call_count = --(local-&gt;call_count);</div><div class='del'>-        UNLOCK(&amp;frame-&gt;lock);</div><div class='add'>+    LOCK(&amp;frame-&gt;lock);</div><div class='add'>+    call_count = --(local-&gt;call_count);</div><div class='add'>+    UNLOCK(&amp;frame-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (call_count == 0) {</div><div class='add'>+    if (call_count == 0) {</div><div class='ctx'> #if defined(JBR_CG_QUEUE)</div><div class='del'>-                ret = jbr_remove_from_queue (frame, this);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                J_MSG_GENERIC, "Failed to remove from queue.");</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-                /*</div><div class='del'>-                 * Unrefing the reference taken in continue() or complete() *</div><div class='del'>-                 */</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='add'>+        ret = jbr_remove_from_queue(frame, this);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_GENERIC,</div><div class='add'>+                   "Failed to remove from queue.");</div><div class='ctx'>         }</div><div class='add'>+#endif</div><div class='add'>+        /*</div><div class='add'>+         * Unrefing the reference taken in continue() or complete() *</div><div class='add'>+         */</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_ipc_complete (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+jbr_ipc_complete(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        jbr_local_t     *local     = NULL;</div><div class='add'>+    jbr_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='ctx'> </div><div class='del'>-        jbr_ipc_call_dispatch (frame,</div><div class='del'>-                               this, &amp;op_errno,</div><div class='del'>-                               FDL_IPC_JBR_SERVER_ROLLBACK,</div><div class='del'>-                               local-&gt;xdata);</div><div class='add'>+    jbr_ipc_call_dispatch(frame, this, &amp;op_errno, FDL_IPC_JBR_SERVER_ROLLBACK,</div><div class='add'>+                          local-&gt;xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+jbr_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        switch (op) {</div><div class='add'>+    switch (op) {</div><div class='ctx'>         case JBR_SERVER_TERM_RANGE:</div><div class='del'>-                jbr_get_terms(frame, this);</div><div class='del'>-                break;</div><div class='add'>+            jbr_get_terms(frame, this);</div><div class='add'>+            break;</div><div class='ctx'>         case JBR_SERVER_OPEN_TERM:</div><div class='del'>-                jbr_open_term(frame, this, xdata);</div><div class='del'>-                break;</div><div class='add'>+            jbr_open_term(frame, this, xdata);</div><div class='add'>+            break;</div><div class='ctx'>         case JBR_SERVER_NEXT_ENTRY:</div><div class='del'>-                jbr_next_entry(frame, this);</div><div class='del'>-                break;</div><div class='add'>+            jbr_next_entry(frame, this);</div><div class='add'>+            break;</div><div class='ctx'>         case FDL_IPC_JBR_SERVER_ROLLBACK:</div><div class='del'>-                /*</div><div class='del'>-                 * Just send the fop down to fdl. Need not *</div><div class='del'>-                 * dispatch it to other bricks in the sub- *</div><div class='del'>-                 * volume, as it will be done where the op *</div><div class='del'>-                 * has failed.                             *</div><div class='del'>-                 */</div><div class='add'>+            /*</div><div class='add'>+             * Just send the fop down to fdl. Need not *</div><div class='add'>+             * dispatch it to other bricks in the sub- *</div><div class='add'>+             * volume, as it will be done where the op *</div><div class='add'>+             * has failed.                             *</div><div class='add'>+             */</div><div class='ctx'>         default:</div><div class='del'>-                STACK_WIND_TAIL (frame,</div><div class='del'>-                                 FIRST_CHILD(this),</div><div class='del'>-                                 FIRST_CHILD(this)-&gt;fops-&gt;ipc,</div><div class='del'>-                                 op, xdata);</div><div class='del'>-        }</div><div class='add'>+            STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                            FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #pragma generate</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+jbr_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        ctx     = 0LL;</div><div class='add'>+    uint64_t ctx = 0LL;</div><div class='ctx'> </div><div class='del'>-        if ((inode_ctx_del(inode, this, &amp;ctx) == 0) &amp;&amp; ctx) {</div><div class='del'>-                GF_FREE((void *)(long)ctx);</div><div class='del'>-        }</div><div class='add'>+    if ((inode_ctx_del(inode, this, &amp;ctx) == 0) &amp;&amp; ctx) {</div><div class='add'>+        GF_FREE((void *)(long)ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-jbr_release (xlator_t *this, fd_t *fd)</div><div class='add'>+jbr_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        ctx     = 0LL;</div><div class='add'>+    uint64_t ctx = 0LL;</div><div class='ctx'> </div><div class='del'>-        if ((fd_ctx_del(fd, this, &amp;ctx) == 0) &amp;&amp; ctx) {</div><div class='del'>-                GF_FREE((void *)(long)ctx);</div><div class='del'>-        }</div><div class='add'>+    if ((fd_ctx_del(fd, this, &amp;ctx) == 0) &amp;&amp; ctx) {</div><div class='add'>+        GF_FREE((void *)(long)ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget  = jbr_forget,</div><div class='del'>-        .release = jbr_release,</div><div class='add'>+    .forget = jbr_forget,</div><div class='add'>+    .release = jbr_release,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-jbr_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+jbr_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        jbr_private_t   *priv   = this-&gt;private;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("leader",</div><div class='del'>-                          priv-&gt;config_leader, options, bool, err);</div><div class='del'>-        GF_OPTION_RECONF ("quorum-percent",</div><div class='del'>-                          priv-&gt;quorum_pct, options, percent, err);</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='del'>-                "reconfigure called, config_leader = %d, quorum_pct = %.1f\n",</div><div class='del'>-                priv-&gt;leader, priv-&gt;quorum_pct);</div><div class='add'>+    GF_OPTION_RECONF("leader", priv-&gt;config_leader, options, bool, err);</div><div class='add'>+    GF_OPTION_RECONF("quorum-percent", priv-&gt;quorum_pct, options, percent, err);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+           "reconfigure called, config_leader = %d, quorum_pct = %.1f\n",</div><div class='add'>+           priv-&gt;leader, priv-&gt;quorum_pct);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;leader = priv-&gt;config_leader;</div><div class='add'>+    priv-&gt;leader = priv-&gt;config_leader;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-jbr_get_child_index (xlator_t *this, xlator_t *kid)</div><div class='add'>+jbr_get_child_index(xlator_t *this, xlator_t *kid)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-        int             retval = -1;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+    int retval = -1;</div><div class='ctx'> </div><div class='del'>-        for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                ++retval;</div><div class='del'>-                if (trav-&gt;xlator == kid) {</div><div class='del'>-                        return retval;</div><div class='del'>-                }</div><div class='add'>+    for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        ++retval;</div><div class='add'>+        if (trav-&gt;xlator == kid) {</div><div class='add'>+            return retval;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1469,289 +1402,275 @@ jbr_get_child_index (xlator_t *this, xlator_t *kid)</div><div class='ctx'>  * then generate counts on demand.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-jbr_notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+jbr_notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        jbr_private_t   *priv         = this-&gt;private;</div><div class='del'>-        int             index         = -1;</div><div class='del'>-        int             ret           = -1;</div><div class='del'>-        gf_boolean_t    result        = _gf_false;</div><div class='del'>-        gf_boolean_t    relevant      = _gf_false;</div><div class='add'>+    jbr_private_t *priv = this-&gt;private;</div><div class='add'>+    int index = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t result = _gf_false;</div><div class='add'>+    gf_boolean_t relevant = _gf_false;</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_CHILD_UP:</div><div class='del'>-                index = jbr_get_child_index(this, data);</div><div class='del'>-                if (index &gt;= 0) {</div><div class='del'>-                        /* Check if the child was previously down</div><div class='del'>-                         * and it's not a false CHILD_UP</div><div class='del'>-                         */</div><div class='del'>-                        if (!(priv-&gt;kid_state &amp; (1 &lt;&lt; index))) {</div><div class='del'>-                                relevant = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        priv-&gt;kid_state |= (1 &lt;&lt; index);</div><div class='del'>-                        priv-&gt;up_children = jbr_count_up_kids(priv);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='del'>-                                "got CHILD_UP for %s, now %u kids",</div><div class='del'>-                                ((xlator_t *)data)-&gt;name,</div><div class='del'>-                                priv-&gt;up_children);</div><div class='del'>-                        if (!priv-&gt;config_leader &amp;&amp; (priv-&gt;up_children &gt; 1)) {</div><div class='del'>-                                priv-&gt;leader = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* If it's not relevant, or we have already *</div><div class='del'>-                         * sent CHILD_UP just break */</div><div class='del'>-                        if (!relevant || priv-&gt;child_up)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        /* If it's not a leader, just send the notify up */</div><div class='del'>-                        if (!priv-&gt;leader) {</div><div class='del'>-                                ret = default_notify(this, event, data);</div><div class='del'>-                                if (!ret)</div><div class='del'>-                                        priv-&gt;child_up = _gf_true;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        result = fop_quorum_check (this,</div><div class='del'>-                                                (double)(priv-&gt;n_children - 1),</div><div class='del'>-                                               (double)(priv-&gt;up_children - 1));</div><div class='del'>-                        if (result == _gf_false) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        J_MSG_GENERIC, "Not enough children "</div><div class='del'>-                                        "are up to meet quorum. Waiting to "</div><div class='del'>-                                        "send CHILD_UP from leader");</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        J_MSG_GENERIC, "Enough children are up "</div><div class='del'>-                                        "to meet quorum. Sending CHILD_UP "</div><div class='del'>-                                        "from leader");</div><div class='del'>-                                ret = default_notify(this, event, data);</div><div class='del'>-                                if (!ret)</div><div class='del'>-                                        priv-&gt;child_up = _gf_true;</div><div class='del'>-                        }</div><div class='add'>+            index = jbr_get_child_index(this, data);</div><div class='add'>+            if (index &gt;= 0) {</div><div class='add'>+                /* Check if the child was previously down</div><div class='add'>+                 * and it's not a false CHILD_UP</div><div class='add'>+                 */</div><div class='add'>+                if (!(priv-&gt;kid_state &amp; (1 &lt;&lt; index))) {</div><div class='add'>+                    relevant = _gf_true;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                priv-&gt;kid_state |= (1 &lt;&lt; index);</div><div class='add'>+                priv-&gt;up_children = jbr_count_up_kids(priv);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                       "got CHILD_UP for %s, now %u kids",</div><div class='add'>+                       ((xlator_t *)data)-&gt;name, priv-&gt;up_children);</div><div class='add'>+                if (!priv-&gt;config_leader &amp;&amp; (priv-&gt;up_children &gt; 1)) {</div><div class='add'>+                    priv-&gt;leader = _gf_false;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                /* If it's not relevant, or we have already *</div><div class='add'>+                 * sent CHILD_UP just break */</div><div class='add'>+                if (!relevant || priv-&gt;child_up)</div><div class='add'>+                    break;</div><div class='add'>+</div><div class='add'>+                /* If it's not a leader, just send the notify up */</div><div class='add'>+                if (!priv-&gt;leader) {</div><div class='add'>+                    ret = default_notify(this, event, data);</div><div class='add'>+                    if (!ret)</div><div class='add'>+                        priv-&gt;child_up = _gf_true;</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+</div><div class='add'>+                result = fop_quorum_check(this, (double)(priv-&gt;n_children - 1),</div><div class='add'>+                                          (double)(priv-&gt;up_children - 1));</div><div class='add'>+                if (result == _gf_false) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                           "Not enough children "</div><div class='add'>+                           "are up to meet quorum. Waiting to "</div><div class='add'>+                           "send CHILD_UP from leader");</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                           "Enough children are up "</div><div class='add'>+                           "to meet quorum. Sending CHILD_UP "</div><div class='add'>+                           "from leader");</div><div class='add'>+                    ret = default_notify(this, event, data);</div><div class='add'>+                    if (!ret)</div><div class='add'>+                        priv-&gt;child_up = _gf_true;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case GF_EVENT_CHILD_DOWN:</div><div class='del'>-                index = jbr_get_child_index(this, data);</div><div class='del'>-                if (index &gt;= 0) {</div><div class='del'>-                        /* Check if the child was previously up</div><div class='del'>-                         * and it's not a false CHILD_DOWN</div><div class='del'>-                         */</div><div class='del'>-                        if (priv-&gt;kid_state &amp; (1 &lt;&lt; index)) {</div><div class='del'>-                                relevant = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                        priv-&gt;kid_state &amp;= ~(1 &lt;&lt; index);</div><div class='del'>-                        priv-&gt;up_children = jbr_count_up_kids(priv);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='del'>-                                "got CHILD_DOWN for %s, now %u kids",</div><div class='del'>-                                ((xlator_t *)data)-&gt;name,</div><div class='del'>-                                priv-&gt;up_children);</div><div class='del'>-                        if (!priv-&gt;config_leader &amp;&amp; (priv-&gt;up_children &lt; 2)</div><div class='del'>-                            &amp;&amp; relevant) {</div><div class='del'>-                                priv-&gt;leader = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* If it's not relevant, or we have already *</div><div class='del'>-                         * sent CHILD_DOWN just break */</div><div class='del'>-                        if (!relevant || !priv-&gt;child_up)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        /* If it's not a leader, just break coz we shouldn't  *</div><div class='del'>-                         * propagate the failure from the failure till it     *</div><div class='del'>-                         * itself goes down                                   *</div><div class='del'>-                         */</div><div class='del'>-                        if (!priv-&gt;leader) {</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        result = fop_quorum_check (this,</div><div class='del'>-                                           (double)(priv-&gt;n_children - 1),</div><div class='del'>-                                           (double)(priv-&gt;up_children - 1));</div><div class='del'>-                        if (result == _gf_false) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        J_MSG_GENERIC, "Enough children are "</div><div class='del'>-                                        "to down to fail quorum. "</div><div class='del'>-                                        "Sending CHILD_DOWN from leader");</div><div class='del'>-                                ret = default_notify(this, event, data);</div><div class='del'>-                                if (!ret)</div><div class='del'>-                                        priv-&gt;child_up = _gf_false;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        J_MSG_GENERIC, "Not enough children "</div><div class='del'>-                                        "are down to fail quorum. Waiting to "</div><div class='del'>-                                        "send CHILD_DOWN from leader");</div><div class='del'>-                        }</div><div class='add'>+            index = jbr_get_child_index(this, data);</div><div class='add'>+            if (index &gt;= 0) {</div><div class='add'>+                /* Check if the child was previously up</div><div class='add'>+                 * and it's not a false CHILD_DOWN</div><div class='add'>+                 */</div><div class='add'>+                if (priv-&gt;kid_state &amp; (1 &lt;&lt; index)) {</div><div class='add'>+                    relevant = _gf_true;</div><div class='add'>+                }</div><div class='add'>+                priv-&gt;kid_state &amp;= ~(1 &lt;&lt; index);</div><div class='add'>+                priv-&gt;up_children = jbr_count_up_kids(priv);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                       "got CHILD_DOWN for %s, now %u kids",</div><div class='add'>+                       ((xlator_t *)data)-&gt;name, priv-&gt;up_children);</div><div class='add'>+                if (!priv-&gt;config_leader &amp;&amp; (priv-&gt;up_children &lt; 2) &amp;&amp;</div><div class='add'>+                    relevant) {</div><div class='add'>+                    priv-&gt;leader = _gf_true;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+</div><div class='add'>+                /* If it's not relevant, or we have already *</div><div class='add'>+                 * sent CHILD_DOWN just break */</div><div class='add'>+                if (!relevant || !priv-&gt;child_up)</div><div class='add'>+                    break;</div><div class='add'>+</div><div class='add'>+                /* If it's not a leader, just break coz we shouldn't  *</div><div class='add'>+                 * propagate the failure from the failure till it     *</div><div class='add'>+                 * itself goes down                                   *</div><div class='add'>+                 */</div><div class='add'>+                if (!priv-&gt;leader) {</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                result = fop_quorum_check(this, (double)(priv-&gt;n_children - 1),</div><div class='add'>+                                          (double)(priv-&gt;up_children - 1));</div><div class='add'>+                if (result == _gf_false) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                           "Enough children are "</div><div class='add'>+                           "to down to fail quorum. "</div><div class='add'>+                           "Sending CHILD_DOWN from leader");</div><div class='add'>+                    ret = default_notify(this, event, data);</div><div class='add'>+                    if (!ret)</div><div class='add'>+                        priv-&gt;child_up = _gf_false;</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0, J_MSG_GENERIC,</div><div class='add'>+                           "Not enough children "</div><div class='add'>+                           "are down to fail quorum. Waiting to "</div><div class='add'>+                           "send CHILD_DOWN from leader");</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                ret = default_notify(this, event, data);</div><div class='del'>-        }</div><div class='add'>+            ret = default_notify(this, event, data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("jbr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("jbr", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_mt_jbr_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_mt_jbr_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='del'>-                        "Memory accounting init" "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-jbr_deallocate_priv (jbr_private_t *priv)</div><div class='add'>+jbr_deallocate_priv(jbr_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        if (!priv) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!priv) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE(priv);</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-jbr_init (xlator_t *this)</div><div class='add'>+jbr_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        xlator_list_t   *remote;</div><div class='del'>-        xlator_list_t   *local;</div><div class='del'>-        jbr_private_t   *priv           = NULL;</div><div class='del'>-        xlator_list_t   *trav;</div><div class='del'>-        pthread_t       kid;</div><div class='del'>-        extern xlator_t global_xlator;</div><div class='del'>-        glusterfs_ctx_t *oldctx         = global_xlator.ctx;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Any fop that gets special treatment has to be patched in here,</div><div class='del'>-         * because the compiled-in table is produced by the code generator and</div><div class='del'>-         * only contains generated functions.  Note that we have to go through</div><div class='del'>-         * this-&gt;fops because of some dynamic-linking strangeness; modifying</div><div class='del'>-         * the static table doesn't work.</div><div class='del'>-         */</div><div class='del'>-        this-&gt;fops-&gt;getxattr = jbr_getxattr_special;</div><div class='del'>-        this-&gt;fops-&gt;fsync = jbr_fsync;</div><div class='del'>-</div><div class='del'>-        local = this-&gt;children;</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA,</div><div class='del'>-                        "no local subvolume");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        remote = local-&gt;next;</div><div class='del'>-        if (!remote) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA,</div><div class='del'>-                        "no remote subvolumes");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (jbr_local_t, 128);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='del'>-                        "failed to create jbr_local_t pool");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof(*priv), gf_mt_jbr_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='del'>-                        "could not allocate priv");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='del'>-                ++(priv-&gt;n_children);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK_INIT(&amp;priv-&gt;dirty_lock);</div><div class='del'>-	LOCK_INIT(&amp;priv-&gt;index_lock);</div><div class='del'>-        INIT_LIST_HEAD(&amp;priv-&gt;dirty_fds);</div><div class='del'>-        priv-&gt;term_fd = -1;</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("leader", priv-&gt;config_leader, bool, err);</div><div class='del'>-        GF_OPTION_INIT ("quorum-percent", priv-&gt;quorum_pct, percent, err);</div><div class='del'>-</div><div class='del'>-        priv-&gt;leader = priv-&gt;config_leader;</div><div class='del'>-        priv-&gt;child_up = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (gf_thread_create (&amp;kid, NULL, jbr_flush_thread, this,</div><div class='del'>-                              "jbrflush") != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='del'>-                        "could not start flush thread");</div><div class='del'>-                /* TBD: treat this as a fatal error? */</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Calling glfs_new changes old-&gt;ctx, even if THIS still points</div><div class='del'>-         * to global_xlator.  That causes problems later in the main</div><div class='del'>-         * thread, when gf_log_dump_graph tries to use the FILE after</div><div class='del'>-         * we've mucked with it and gets a segfault in __fprintf_chk.</div><div class='del'>-         * We can avoid all that by undoing the damage before we</div><div class='del'>-         * continue.</div><div class='del'>-         */</div><div class='del'>-        global_xlator.ctx = oldctx;</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='add'>+    xlator_list_t *remote;</div><div class='add'>+    xlator_list_t *local;</div><div class='add'>+    jbr_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav;</div><div class='add'>+    pthread_t kid;</div><div class='add'>+    extern xlator_t global_xlator;</div><div class='add'>+    glusterfs_ctx_t *oldctx = global_xlator.ctx;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Any fop that gets special treatment has to be patched in here,</div><div class='add'>+     * because the compiled-in table is produced by the code generator and</div><div class='add'>+     * only contains generated functions.  Note that we have to go through</div><div class='add'>+     * this-&gt;fops because of some dynamic-linking strangeness; modifying</div><div class='add'>+     * the static table doesn't work.</div><div class='add'>+     */</div><div class='add'>+    this-&gt;fops-&gt;getxattr = jbr_getxattr_special;</div><div class='add'>+    this-&gt;fops-&gt;fsync = jbr_fsync;</div><div class='add'>+</div><div class='add'>+    local = this-&gt;children;</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA,</div><div class='add'>+               "no local subvolume");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    remote = local-&gt;next;</div><div class='add'>+    if (!remote) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_NO_DATA,</div><div class='add'>+               "no remote subvolumes");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(jbr_local_t, 128);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+               "failed to create jbr_local_t pool");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_mt_jbr_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_MEM_ERR,</div><div class='add'>+               "could not allocate priv");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (trav = this-&gt;children; trav; trav = trav-&gt;next) {</div><div class='add'>+        ++(priv-&gt;n_children);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;dirty_lock);</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;index_lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;dirty_fds);</div><div class='add'>+    priv-&gt;term_fd = -1;</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("leader", priv-&gt;config_leader, bool, err);</div><div class='add'>+    GF_OPTION_INIT("quorum-percent", priv-&gt;quorum_pct, percent, err);</div><div class='add'>+</div><div class='add'>+    priv-&gt;leader = priv-&gt;config_leader;</div><div class='add'>+    priv-&gt;child_up = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (gf_thread_create(&amp;kid, NULL, jbr_flush_thread, this, "jbrflush") != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, J_MSG_SYS_CALL_FAILURE,</div><div class='add'>+               "could not start flush thread");</div><div class='add'>+        /* TBD: treat this as a fatal error? */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Calling glfs_new changes old-&gt;ctx, even if THIS still points</div><div class='add'>+     * to global_xlator.  That causes problems later in the main</div><div class='add'>+     * thread, when gf_log_dump_graph tries to use the FILE after</div><div class='add'>+     * we've mucked with it and gets a segfault in __fprintf_chk.</div><div class='add'>+     * We can avoid all that by undoing the damage before we</div><div class='add'>+     * continue.</div><div class='add'>+     */</div><div class='add'>+    global_xlator.ctx = oldctx;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        jbr_deallocate_priv(priv);</div><div class='del'>-        return -1;</div><div class='add'>+    jbr_deallocate_priv(priv);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-jbr_fini (xlator_t *this)</div><div class='add'>+jbr_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        jbr_deallocate_priv(this-&gt;private);</div><div class='add'>+    jbr_deallocate_priv(this-&gt;private);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = jbr_init,</div><div class='del'>-        .fini           = jbr_fini,</div><div class='del'>-        .reconfigure    = jbr_reconfigure,</div><div class='del'>-        .notify         = jbr_notify,</div><div class='add'>+    .init = jbr_init,</div><div class='add'>+    .fini = jbr_fini,</div><div class='add'>+    .reconfigure = jbr_reconfigure,</div><div class='add'>+    .notify = jbr_notify,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key = {"leader"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "false",</div><div class='del'>-          .description = "Start in the leader role.  This is only for "</div><div class='del'>-                         "bootstrapping the code, and should go away when we "</div><div class='del'>-                         "have real leader election."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"vol-name"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "volume name"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"my-name"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "brick name in form of host:/path"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"etcd-servers"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "list of comma separated etc servers"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"subvol-uuid"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "UUID for this JBR (sub)volume"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"quorum-percent"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PERCENT,</div><div class='del'>-          .default_value = "50.0",</div><div class='del'>-          .description = "percentage of rep_count-1 that must be up"</div><div class='del'>-        },</div><div class='del'>-	{ .key = {NULL} },</div><div class='add'>+    {.key = {"leader"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "false",</div><div class='add'>+     .description = "Start in the leader role.  This is only for "</div><div class='add'>+                    "bootstrapping the code, and should go away when we "</div><div class='add'>+                    "have real leader election."},</div><div class='add'>+    {.key = {"vol-name"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "volume name"},</div><div class='add'>+    {.key = {"my-name"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "brick name in form of host:/path"},</div><div class='add'>+    {.key = {"etcd-servers"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "list of comma separated etc servers"},</div><div class='add'>+    {.key = {"subvol-uuid"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "UUID for this JBR (sub)volume"},</div><div class='add'>+    {.key = {"quorum-percent"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PERCENT,</div><div class='add'>+     .default_value = "50.0",</div><div class='add'>+     .description = "percentage of rep_count-1 that must be up"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/posix2/ds/src/posix2-ds-main.c b/xlators/experimental/posix2/ds/src/posix2-ds-main.c<br/>index 675c4d7c9da..4e399a98ed4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/posix2/ds/src/posix2-ds-main.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/posix2/ds/src/posix2-ds-main.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/posix2/ds/src/posix2-ds-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/posix2/ds/src/posix2-ds-main.c</a></div><div class='hunk'>@@ -20,34 +20,31 @@</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-posix2_ds_init (xlator_t *this)</div><div class='add'>+posix2_ds_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (this-&gt;children) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "This (%s) is a leaf xlator, but found children",</div><div class='del'>-                        this-&gt;name);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    if (this-&gt;children) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "This (%s) is a leaf xlator, but found children", this-&gt;name);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-posix2_ds_fini (xlator_t *this)</div><div class='add'>+posix2_ds_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = posix2_ds_init,</div><div class='del'>-        .fini           = posix2_ds_fini,</div><div class='add'>+    .init = posix2_ds_init,</div><div class='add'>+    .fini = posix2_ds_fini,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-};</div><div class='add'>+struct xlator_fops fops = {};</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='hunk'>@@ -55,5 +52,5 @@ struct xlator_dumpops dumpops = {</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/experimental/posix2/mds/src/posix2-mds-main.c b/xlators/experimental/posix2/mds/src/posix2-mds-main.c<br/>index 71ff4e0089c..58da05f2091 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/experimental/posix2/mds/src/posix2-mds-main.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/experimental/posix2/mds/src/posix2-mds-main.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/experimental/posix2/mds/src/posix2-mds-main.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/experimental/posix2/mds/src/posix2-mds-main.c</a></div><div class='hunk'>@@ -20,34 +20,31 @@</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-posix2_mds_init (xlator_t *this)</div><div class='add'>+posix2_mds_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        if (this-&gt;children) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "This (%s) is a leaf xlator, but found children",</div><div class='del'>-                        this-&gt;name);</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    if (this-&gt;children) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "This (%s) is a leaf xlator, but found children", this-&gt;name);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-posix2_mds_fini (xlator_t *this)</div><div class='add'>+posix2_mds_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> class_methods_t class_methods = {</div><div class='del'>-        .init           = posix2_mds_init,</div><div class='del'>-        .fini           = posix2_mds_fini,</div><div class='add'>+    .init = posix2_mds_init,</div><div class='add'>+    .fini = posix2_mds_fini,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-};</div><div class='add'>+struct xlator_fops fops = {};</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='hunk'>@@ -55,5 +52,5 @@ struct xlator_dumpops dumpops = {</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/arbiter/src/arbiter.c b/xlators/features/arbiter/src/arbiter.c<br/>index cf0841653b7..436f228a566 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/arbiter/src/arbiter.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/arbiter/src/arbiter.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/arbiter/src/arbiter.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/arbiter/src/arbiter.c</a></div><div class='hunk'>@@ -15,357 +15,353 @@</div><div class='ctx'> #include "logging.h"</div><div class='ctx'> </div><div class='ctx'> static arbiter_inode_ctx_t *</div><div class='del'>-__arbiter_inode_ctx_get (inode_t *inode, xlator_t *this)</div><div class='add'>+__arbiter_inode_ctx_get(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        arbiter_inode_ctx_t *ctx = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctx_addr);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                ctx = (arbiter_inode_ctx_t *) (long) ctx_addr;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = GF_CALLOC (1, sizeof (*ctx), gf_arbiter_mt_inode_ctx_t);</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_put (inode, this, (uint64_t)ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (ctx);</div><div class='del'>-                ctx = NULL;</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_ERROR, "failed to "</div><div class='del'>-                                  "set the inode ctx (%s)",</div><div class='del'>-                                  uuid_utoa (inode-&gt;gfid));</div><div class='del'>-        }</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;ctx_addr);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        ctx = (arbiter_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = GF_CALLOC(1, sizeof(*ctx), gf_arbiter_mt_inode_ctx_t);</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_put(inode, this, (uint64_t)ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(ctx);</div><div class='add'>+        ctx = NULL;</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                         "failed to "</div><div class='add'>+                         "set the inode ctx (%s)",</div><div class='add'>+                         uuid_utoa(inode-&gt;gfid));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static arbiter_inode_ctx_t *</div><div class='del'>-arbiter_inode_ctx_get (inode_t *inode, xlator_t *this)</div><div class='add'>+arbiter_inode_ctx_get(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        LOCK(&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx = __arbiter_inode_ctx_get (inode, this);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK(&amp;inode-&gt;lock);</div><div class='del'>-        return ctx;</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx = __arbiter_inode_ctx_get(inode, this);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+arbiter_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret != 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-        ctx = arbiter_inode_ctx_get (inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        memcpy (&amp;ctx-&gt;iattbuf, buf, sizeof (ctx-&gt;iattbuf));</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret != 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+    ctx = arbiter_inode_ctx_get(inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    memcpy(&amp;ctx-&gt;iattbuf, buf, sizeof(ctx-&gt;iattbuf));</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             xdata, postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+arbiter_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, arbiter_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, arbiter_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+arbiter_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        struct iatt         *buf      = NULL;</div><div class='del'>-        int32_t              op_ret   = 0;</div><div class='del'>-        int32_t              op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ctx = arbiter_inode_ctx_get (loc-&gt;inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        buf = &amp;ctx-&gt;iattbuf;</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    struct iatt *buf = NULL;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ctx = arbiter_inode_ctx_get(loc-&gt;inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    buf = &amp;ctx-&gt;iattbuf;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+arbiter_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        struct iatt         *buf      = NULL;</div><div class='del'>-        int32_t              op_ret   = 0;</div><div class='del'>-        int32_t              op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ctx = arbiter_inode_ctx_get (fd-&gt;inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        buf = &amp;ctx-&gt;iattbuf;</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    struct iatt *buf = NULL;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ctx = arbiter_inode_ctx_get(fd-&gt;inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    buf = &amp;ctx-&gt;iattbuf;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, buf, buf,</div><div class='del'>-                             NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-dict_t*</div><div class='del'>-arbiter_fill_writev_xdata (fd_t *fd, dict_t *xdata, xlator_t *this)</div><div class='add'>+dict_t *</div><div class='add'>+arbiter_fill_writev_xdata(fd_t *fd, dict_t *xdata, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        dict_t  *rsp_xdata = NULL;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        int is_append = 1;</div><div class='del'>-</div><div class='del'>-        if (!fd || !fd-&gt;inode || gf_uuid_is_null (fd-&gt;inode-&gt;gfid)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        rsp_xdata = dict_new();</div><div class='del'>-        if (!rsp_xdata)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (dict_get (xdata, GLUSTERFS_OPEN_FD_COUNT)) {</div><div class='del'>-                ret = dict_set_uint32 (rsp_xdata, GLUSTERFS_OPEN_FD_COUNT,</div><div class='del'>-                                       fd-&gt;inode-&gt;fd_count);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Failed to set dict value"</div><div class='del'>-                                      " for GLUSTERFS_OPEN_FD_COUNT");</div><div class='del'>-                }</div><div class='add'>+    dict_t *rsp_xdata = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int is_append = 1;</div><div class='add'>+</div><div class='add'>+    if (!fd || !fd-&gt;inode || gf_uuid_is_null(fd-&gt;inode-&gt;gfid)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    rsp_xdata = dict_new();</div><div class='add'>+    if (!rsp_xdata)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (dict_get(xdata, GLUSTERFS_OPEN_FD_COUNT)) {</div><div class='add'>+        ret = dict_set_uint32(rsp_xdata, GLUSTERFS_OPEN_FD_COUNT,</div><div class='add'>+                              fd-&gt;inode-&gt;fd_count);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Failed to set dict value"</div><div class='add'>+                         " for GLUSTERFS_OPEN_FD_COUNT");</div><div class='ctx'>         }</div><div class='del'>-        if (dict_get (xdata, GLUSTERFS_WRITE_IS_APPEND)) {</div><div class='del'>-                ret = dict_set_uint32 (rsp_xdata, GLUSTERFS_WRITE_IS_APPEND,</div><div class='del'>-                                       is_append);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Failed to set dict value"</div><div class='del'>-                                      " for GLUSTERFS_WRITE_IS_APPEND");</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    if (dict_get(xdata, GLUSTERFS_WRITE_IS_APPEND)) {</div><div class='add'>+        ret = dict_set_uint32(rsp_xdata, GLUSTERFS_WRITE_IS_APPEND, is_append);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Failed to set dict value"</div><div class='add'>+                         " for GLUSTERFS_WRITE_IS_APPEND");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return rsp_xdata;</div><div class='add'>+    return rsp_xdata;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='del'>-                struct iobref *iobref, dict_t *xdata)</div><div class='add'>+arbiter_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='add'>+               struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        struct iatt         *buf      = NULL;</div><div class='del'>-        dict_t           *rsp_xdata   = NULL;</div><div class='del'>-        int                  op_ret   = 0;</div><div class='del'>-        int                  op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ctx = arbiter_inode_ctx_get (fd-&gt;inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        buf = &amp;ctx-&gt;iattbuf;</div><div class='del'>-        op_ret = iov_length (vector, count);</div><div class='del'>-        rsp_xdata = arbiter_fill_writev_xdata (fd, xdata, this);</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    struct iatt *buf = NULL;</div><div class='add'>+    dict_t *rsp_xdata = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ctx = arbiter_inode_ctx_get(fd-&gt;inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    buf = &amp;ctx-&gt;iattbuf;</div><div class='add'>+    op_ret = iov_length(vector, count);</div><div class='add'>+    rsp_xdata = arbiter_fill_writev_xdata(fd, xdata, this);</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, buf, buf,</div><div class='del'>-                             rsp_xdata);</div><div class='del'>-        if (rsp_xdata)</div><div class='del'>-                dict_unref (rsp_xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, buf, buf, rsp_xdata);</div><div class='add'>+    if (rsp_xdata)</div><div class='add'>+        dict_unref(rsp_xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+arbiter_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'>                   int32_t keep_size, off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        struct iatt         *buf      = NULL;</div><div class='del'>-        int                  op_ret   = 0;</div><div class='del'>-        int                  op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ctx = arbiter_inode_ctx_get (fd-&gt;inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        buf = &amp;ctx-&gt;iattbuf;</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    struct iatt *buf = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ctx = arbiter_inode_ctx_get(fd-&gt;inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    buf = &amp;ctx-&gt;iattbuf;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT(fallocate, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fallocate, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_discard (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+arbiter_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        struct iatt         *buf      = NULL;</div><div class='del'>-        int                  op_ret   = 0;</div><div class='del'>-        int                  op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ctx = arbiter_inode_ctx_get (fd-&gt;inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        buf = &amp;ctx-&gt;iattbuf;</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    struct iatt *buf = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ctx = arbiter_inode_ctx_get(fd-&gt;inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    buf = &amp;ctx-&gt;iattbuf;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-arbiter_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  off_t offset, off_t len, dict_t *xdata)</div><div class='add'>+arbiter_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                 off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        struct iatt         *buf      = NULL;</div><div class='del'>-        int                  op_ret   = 0;</div><div class='del'>-        int                  op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ctx = arbiter_inode_ctx_get (fd-&gt;inode, this);</div><div class='del'>-        if (!ctx) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-        buf = &amp;ctx-&gt;iattbuf;</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    struct iatt *buf = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ctx = arbiter_inode_ctx_get(fd-&gt;inode, this);</div><div class='add'>+    if (!ctx) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+    buf = &amp;ctx-&gt;iattbuf;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, buf, buf, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-arbiter_readv (call_frame_t *frame,  xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-               off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+arbiter_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, -1, ENOSYS, NULL, 0, NULL, NULL,</div><div class='del'>-                             NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, -1, ENOSYS, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-arbiter_seek (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-              gf_seek_what_t what, dict_t *xdata)</div><div class='add'>+arbiter_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (seek, frame, -1, ENOSYS, 0, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(seek, frame, -1, ENOSYS, 0, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_arbiter_mt_end + 1);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting "</div><div class='del'>-                        "initialization failed.");</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_arbiter_mt_end + 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting "</div><div class='add'>+               "initialization failed.");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-arbiter_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+arbiter_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        arbiter_inode_ctx_t *ctx = NULL;</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-</div><div class='del'>-        inode_ctx_del (inode, this, &amp;ctx_addr);</div><div class='del'>-        if (!ctx_addr)</div><div class='del'>-                return 0;</div><div class='del'>-        ctx = (arbiter_inode_ctx_t *) (long) ctx_addr;</div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    arbiter_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+</div><div class='add'>+    inode_ctx_del(inode, this, &amp;ctx_addr);</div><div class='add'>+    if (!ctx_addr)</div><div class='ctx'>         return 0;</div><div class='add'>+    ctx = (arbiter_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+    GF_FREE(ctx);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "'arbiter' not configured with exactly one child");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "'arbiter' not configured with exactly one child");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='add'>+    if (!this-&gt;parents)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dangling volume. check volfile ");</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup = arbiter_lookup,</div><div class='del'>-</div><div class='del'>-        /* Return success for these inode write FOPS without winding it down to</div><div class='del'>-         * posix; this is needed for AFR write transaction logic to work.*/</div><div class='del'>-        .truncate = arbiter_truncate,</div><div class='del'>-        .writev = arbiter_writev,</div><div class='del'>-        .ftruncate = arbiter_ftruncate,</div><div class='del'>-        .fallocate = arbiter_fallocate,</div><div class='del'>-        .discard = arbiter_discard,</div><div class='del'>-        .zerofill = arbiter_zerofill,</div><div class='del'>-</div><div class='del'>-        /* AFR is not expected to wind these inode read FOPS initiated by the</div><div class='del'>-         * application to the arbiter brick. But in case a bug causes them</div><div class='del'>-         * to be called, we return ENOSYS. */</div><div class='del'>-        .readv = arbiter_readv,</div><div class='del'>-        .seek = arbiter_seek,</div><div class='del'>-</div><div class='del'>-        /* The following inode read FOPS initiated by the application are not</div><div class='del'>-         * wound by AFR either but internal logic like  shd, glfsheal and</div><div class='del'>-         * client side healing in AFR will send them for selfheal/ inode refresh</div><div class='del'>-         * operations etc.,so we need to wind them down to posix:</div><div class='del'>-         *</div><div class='del'>-         * (f)stat, readdir(p), readlink, (f)getxattr.*/</div><div class='del'>-</div><div class='del'>-        /* All other FOPs not listed here are safe to be wound down to posix.*/</div><div class='add'>+    .lookup = arbiter_lookup,</div><div class='add'>+</div><div class='add'>+    /* Return success for these inode write FOPS without winding it down to</div><div class='add'>+     * posix; this is needed for AFR write transaction logic to work.*/</div><div class='add'>+    .truncate = arbiter_truncate,</div><div class='add'>+    .writev = arbiter_writev,</div><div class='add'>+    .ftruncate = arbiter_ftruncate,</div><div class='add'>+    .fallocate = arbiter_fallocate,</div><div class='add'>+    .discard = arbiter_discard,</div><div class='add'>+    .zerofill = arbiter_zerofill,</div><div class='add'>+</div><div class='add'>+    /* AFR is not expected to wind these inode read FOPS initiated by the</div><div class='add'>+     * application to the arbiter brick. But in case a bug causes them</div><div class='add'>+     * to be called, we return ENOSYS. */</div><div class='add'>+    .readv = arbiter_readv,</div><div class='add'>+    .seek = arbiter_seek,</div><div class='add'>+</div><div class='add'>+    /* The following inode read FOPS initiated by the application are not</div><div class='add'>+     * wound by AFR either but internal logic like  shd, glfsheal and</div><div class='add'>+     * client side healing in AFR will send them for selfheal/ inode refresh</div><div class='add'>+     * operations etc.,so we need to wind them down to posix:</div><div class='add'>+     *</div><div class='add'>+     * (f)stat, readdir(p), readlink, (f)getxattr.*/</div><div class='add'>+</div><div class='add'>+    /* All other FOPs not listed here are safe to be wound down to posix.*/</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget = arbiter_forget,</div><div class='add'>+    .forget = arbiter_forget,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/barrier/src/barrier.c b/xlators/features/barrier/src/barrier.c<br/>index 27f3135c3af..edecae1a55e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/barrier/src/barrier.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/barrier/src/barrier.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/barrier/src/barrier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/barrier/src/barrier.c</a></div><div class='hunk'>@@ -15,792 +15,797 @@</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-barrier_local_set_gfid (call_frame_t *frame, uuid_t gfid, xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        if (gfid) {</div><div class='del'>-                uuid_t *id = GF_MALLOC (sizeof (uuid_t), gf_common_mt_uuid_t);</div><div class='del'>-                if (!id) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "Could not set gfid"</div><div class='del'>-                                ". gfid will not be dumped in statedump file.");</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='del'>-                gf_uuid_copy (*id, gfid);</div><div class='del'>-                frame-&gt;local = id;</div><div class='add'>+barrier_local_set_gfid(call_frame_t *frame, uuid_t gfid, xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    if (gfid) {</div><div class='add'>+        uuid_t *id = GF_MALLOC(sizeof(uuid_t), gf_common_mt_uuid_t);</div><div class='add'>+        if (!id) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Could not set gfid"</div><div class='add'>+                   ". gfid will not be dumped in statedump file.");</div><div class='add'>+            return;</div><div class='ctx'>         }</div><div class='add'>+        gf_uuid_copy(*id, gfid);</div><div class='add'>+        frame-&gt;local = id;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-barrier_local_free_gfid (call_frame_t *frame)</div><div class='add'>+barrier_local_free_gfid(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        if (frame-&gt;local) {</div><div class='del'>-                GF_FREE (frame-&gt;local);</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (frame-&gt;local) {</div><div class='add'>+        GF_FREE(frame-&gt;local);</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_truncate_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+barrier_truncate_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                            int32_t op_ret, int32_t op_errno,</div><div class='add'>+                            struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                            dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+barrier_ftruncate_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                              int32_t op_ret, int32_t op_errno,</div><div class='ctx'>                              struct iatt *prebuf, struct iatt *postbuf,</div><div class='ctx'>                              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_ftruncate_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                              int32_t op_ret, int32_t op_errno,</div><div class='del'>-                              struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                              dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+barrier_unlink_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno,</div><div class='add'>+                          struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                          dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_unlink_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno,</div><div class='del'>-                           struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                           dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+barrier_rmdir_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno,</div><div class='add'>+                         struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                         dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(rmdir, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_rmdir_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno,</div><div class='del'>-                          struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+barrier_rename_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                          struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                          struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='ctx'>                           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (rmdir, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                        postoldparent, prenewparent, postnewparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_rename_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                           struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                           struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                           dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='del'>-                             postoldparent, prenewparent, postnewparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+barrier_writev_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                          struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_writev_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno,</div><div class='del'>-                           struct iatt *prebuf, struct iatt *postbuf,</div><div class='del'>-                           dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+barrier_fsync_cbk_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                         struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_fsync_cbk_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                          struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+barrier_removexattr_cbk_resume(call_frame_t *frame, void *cookie,</div><div class='add'>+                               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='add'>+                               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (fsync, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_removexattr_cbk_resume (call_frame_t *frame, void *cookie,</div><div class='add'>+barrier_fremovexattr_cbk_resume(call_frame_t *frame, void *cookie,</div><div class='ctx'>                                 xlator_t *this, int32_t op_ret,</div><div class='ctx'>                                 int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_free_gfid(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_fremovexattr_cbk_resume (call_frame_t *frame, void *cookie,</div><div class='del'>-                                 xlator_t *this, int32_t op_ret,</div><div class='del'>-                                 int32_t op_errno, dict_t *xdata)</div><div class='add'>+barrier_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_free_gfid (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    BARRIER_FOP_CBK(writev, out, frame, this, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                    xdata);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+barrier_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        BARRIER_FOP_CBK (writev, out, frame, this, op_ret, op_errno,</div><div class='del'>-                         prebuf, postbuf, xdata);</div><div class='add'>+    BARRIER_FOP_CBK(fremovexattr, out, frame, this, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+barrier_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        BARRIER_FOP_CBK (fremovexattr, out, frame, this, op_ret, op_errno,</div><div class='del'>-                         xdata);</div><div class='add'>+    BARRIER_FOP_CBK(removexattr, out, frame, this, op_ret, op_errno, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+barrier_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        BARRIER_FOP_CBK (removexattr, out, frame, this, op_ret, op_errno,</div><div class='del'>-                         xdata);</div><div class='add'>+    BARRIER_FOP_CBK(truncate, out, frame, this, op_ret, op_errno, prebuf,</div><div class='add'>+                    postbuf, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+barrier_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='ctx'>                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        BARRIER_FOP_CBK (truncate, out, frame, this, op_ret, op_errno, prebuf,</div><div class='del'>-                         postbuf, xdata);</div><div class='add'>+    BARRIER_FOP_CBK(ftruncate, out, frame, this, op_ret, op_errno, prebuf,</div><div class='add'>+                    postbuf, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        BARRIER_FOP_CBK (ftruncate, out, frame, this, op_ret, op_errno, prebuf,</div><div class='del'>-                         postbuf, xdata);</div><div class='add'>+barrier_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                   struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                   struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                   dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    BARRIER_FOP_CBK(rename, out, frame, this, op_ret, op_errno, buf,</div><div class='add'>+                    preoldparent, postoldparent, prenewparent, postnewparent,</div><div class='add'>+                    xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        BARRIER_FOP_CBK (rename, out, frame, this, op_ret, op_errno, buf,</div><div class='del'>-                         preoldparent, postoldparent, prenewparent,</div><div class='del'>-                         postnewparent, xdata);</div><div class='add'>+barrier_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    BARRIER_FOP_CBK(rmdir, out, frame, this, op_ret, op_errno, preparent,</div><div class='add'>+                    postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+barrier_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='ctx'>                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        BARRIER_FOP_CBK (rmdir, out, frame, this, op_ret, op_errno, preparent,</div><div class='del'>-                         postparent, xdata);</div><div class='add'>+    BARRIER_FOP_CBK(unlink, out, frame, this, op_ret, op_errno, preparent,</div><div class='add'>+                    postparent, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-barrier_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        BARRIER_FOP_CBK (unlink, out, frame, this, op_ret, op_errno, preparent,</div><div class='del'>-                         postparent, xdata);</div><div class='del'>-out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+barrier_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                  struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        BARRIER_FOP_CBK (fsync, out, frame, this, op_ret, op_errno,</div><div class='del'>-                         prebuf, postbuf, xdata);</div><div class='add'>+    BARRIER_FOP_CBK(fsync, out, frame, this, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                    xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='del'>-                struct iobref *iobref, dict_t *xdata)</div><div class='add'>+barrier_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iovec *vector, int32_t count, off_t off, uint32_t flags,</div><div class='add'>+               struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (!((flags | fd-&gt;flags) &amp; (O_SYNC | O_DSYNC))) {</div><div class='del'>-                STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                                 FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-                                 fd, vector, count, off, flags, iobref, xdata);</div><div class='del'>-</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!((flags | fd-&gt;flags) &amp; (O_SYNC | O_DSYNC))) {</div><div class='add'>+        STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                        FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, off,</div><div class='add'>+                        flags, iobref, xdata);</div><div class='ctx'> </div><div class='del'>-        barrier_local_set_gfid (frame, fd-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_writev_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count,</div><div class='del'>-                    off, flags, iobref, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    barrier_local_set_gfid(frame, fd-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, off, flags,</div><div class='add'>+               iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                      const char *name, dict_t *xdata)</div><div class='add'>+barrier_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                     const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, fd-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_fremovexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, fd-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                     const char *name, dict_t *xdata)</div><div class='add'>+barrier_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                    const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, loc-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_removexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, loc-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  off_t offset, dict_t *xdata)</div><div class='add'>+barrier_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, loc-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_truncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, loc-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-barrier_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='del'>-                loc_t *newloc, dict_t *xdata)</div><div class='add'>+barrier_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+               loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, oldloc-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_rename_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, oldloc-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-barrier_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+barrier_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, loc-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_rmdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, loc-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_unlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, int xflag, dict_t *xdata)</div><div class='add'>+barrier_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, loc-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_unlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, loc-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   off_t offset, dict_t *xdata)</div><div class='add'>+barrier_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, fd-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_ftruncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                    fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, fd-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-barrier_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-               int32_t flags, dict_t *xdata)</div><div class='add'>+barrier_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        barrier_local_set_gfid (frame, fd-&gt;inode-&gt;gfid, this);</div><div class='del'>-        STACK_WIND (frame, barrier_fsync_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsync,</div><div class='del'>-                    fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    barrier_local_set_gfid(frame, fd-&gt;inode-&gt;gfid, this);</div><div class='add'>+    STACK_WIND(frame, barrier_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-__barrier_dequeue (xlator_t *this, struct list_head *queue)</div><div class='add'>+__barrier_dequeue(xlator_t *this, struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t    *stub            = NULL;</div><div class='del'>-        barrier_priv_t *priv            = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        if (list_empty (queue))</div><div class='del'>-                goto out;</div><div class='add'>+    if (list_empty(queue))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stub = list_entry (queue-&gt;next, call_stub_t, list);</div><div class='del'>-        list_del_init (&amp;stub-&gt;list);</div><div class='add'>+    stub = list_entry(queue-&gt;next, call_stub_t, list);</div><div class='add'>+    list_del_init(&amp;stub-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-barrier_dequeue_all (xlator_t *this, struct list_head *queue)</div><div class='add'>+barrier_dequeue_all(xlator_t *this, struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t            *stub    = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "Dequeuing all the barriered fops");</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "Dequeuing all the barriered fops");</div><div class='ctx'> </div><div class='del'>-        /* TODO: Start the below task in a new thread */</div><div class='del'>-        while ((stub = __barrier_dequeue (this, queue)))</div><div class='del'>-                call_resume (stub);</div><div class='add'>+    /* TODO: Start the below task in a new thread */</div><div class='add'>+    while ((stub = __barrier_dequeue(this, queue)))</div><div class='add'>+        call_resume(stub);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "Dequeuing the barriered fops is "</div><div class='del'>-                                         "finished");</div><div class='del'>-        return;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "Dequeuing the barriered fops is "</div><div class='add'>+           "finished");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-barrier_timeout (void *data)</div><div class='add'>+barrier_timeout(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t               *this    = NULL;</div><div class='del'>-        barrier_priv_t         *priv    = NULL;</div><div class='del'>-        struct list_head        queue   = {0,};</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        this = data;</div><div class='del'>-        THIS = this;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    this = data;</div><div class='add'>+    THIS = this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_CRITICAL, "Disabling barrier because of "</div><div class='del'>-                                             "the barrier timeout.");</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+           "Disabling barrier because of "</div><div class='add'>+           "the barrier timeout.");</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __barrier_disable (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __barrier_disable(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        barrier_dequeue_all (this, &amp;queue);</div><div class='add'>+    barrier_dequeue_all(this, &amp;queue);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__barrier_enqueue (xlator_t *this, call_stub_t *stub)</div><div class='add'>+__barrier_enqueue(xlator_t *this, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        barrier_priv_t *priv    = NULL;</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;stub-&gt;list, &amp;priv-&gt;queue);</div><div class='del'>-        priv-&gt;queue_size++;</div><div class='add'>+    list_add_tail(&amp;stub-&gt;list, &amp;priv-&gt;queue);</div><div class='add'>+    priv-&gt;queue_size++;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__barrier_disable (xlator_t *this, struct list_head *queue)</div><div class='add'>+__barrier_disable(xlator_t *this, struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        GF_UNUSED int   ret     = 0;</div><div class='del'>-        barrier_priv_t *priv    = NULL;</div><div class='add'>+    GF_UNUSED int ret = 0;</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;timer) {</div><div class='del'>-                ret = gf_timer_call_cancel (this-&gt;ctx, priv-&gt;timer);</div><div class='del'>-                priv-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;timer) {</div><div class='add'>+        ret = gf_timer_call_cancel(this-&gt;ctx, priv-&gt;timer);</div><div class='add'>+        priv-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_splice_init (&amp;priv-&gt;queue, queue);</div><div class='del'>-        priv-&gt;queue_size = 0;</div><div class='del'>-        priv-&gt;barrier_enabled = _gf_false;</div><div class='add'>+    list_splice_init(&amp;priv-&gt;queue, queue);</div><div class='add'>+    priv-&gt;queue_size = 0;</div><div class='add'>+    priv-&gt;barrier_enabled = _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__barrier_enable (xlator_t *this, barrier_priv_t *priv)</div><div class='add'>+__barrier_enable(xlator_t *this, barrier_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int             ret     = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;timer = gf_timer_call_after (this-&gt;ctx, priv-&gt;timeout,</div><div class='del'>-                                           barrier_timeout, (void *) this);</div><div class='del'>-        if (!priv-&gt;timer) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_CRITICAL, "Couldn't add barrier "</div><div class='del'>-                                                     "timeout event.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;timer = gf_timer_call_after(this-&gt;ctx, priv-&gt;timeout, barrier_timeout,</div><div class='add'>+                                      (void *)this);</div><div class='add'>+    if (!priv-&gt;timer) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+               "Couldn't add barrier "</div><div class='add'>+               "timeout event.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;barrier_enabled = _gf_true;</div><div class='del'>-        ret = 0;</div><div class='add'>+    priv-&gt;barrier_enabled = _gf_true;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='del'>-{</div><div class='del'>-        barrier_priv_t  *priv                   = NULL;</div><div class='del'>-        dict_t          *dict                   = NULL;</div><div class='del'>-        gf_boolean_t     past                   = _gf_false;</div><div class='del'>-        int              ret                    = -1;</div><div class='del'>-        int              barrier_enabled        = _gf_false;</div><div class='del'>-        struct list_head queue                  = {0,};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='del'>-</div><div class='del'>-        switch (event) {</div><div class='del'>-        case GF_EVENT_TRANSLATOR_OP:</div><div class='del'>-        {</div><div class='del'>-                dict = data;</div><div class='del'>-                barrier_enabled = dict_get_str_boolean (dict, "barrier", -1);</div><div class='del'>-</div><div class='del'>-                if (barrier_enabled == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Could not fetch "</div><div class='del'>-                                " barrier key from the dictionary.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        past = priv-&gt;barrier_enabled;</div><div class='del'>-</div><div class='del'>-                        switch (past) {</div><div class='del'>-                        case _gf_false:</div><div class='del'>-                                if (barrier_enabled) {</div><div class='del'>-                                        ret = __barrier_enable (this,priv);</div><div class='del'>-                                        if (ret)</div><div class='del'>-                                                goto unlock;</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                "Already disabled.");</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        case _gf_true:</div><div class='del'>-                                if (!barrier_enabled) {</div><div class='del'>-                                        __barrier_disable(this, &amp;queue);</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                                "Already enabled");</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-unlock:</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                if (!list_empty (&amp;queue))</div><div class='del'>-                        barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        default:</div><div class='del'>-        {</div><div class='del'>-                default_notify (this, event, data);</div><div class='del'>-                ret = 0;</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='add'>+{</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    gf_boolean_t past = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int barrier_enabled = _gf_false;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='add'>+</div><div class='add'>+    switch (event) {</div><div class='add'>+        case GF_EVENT_TRANSLATOR_OP: {</div><div class='add'>+            dict = data;</div><div class='add'>+            barrier_enabled = dict_get_str_boolean(dict, "barrier", -1);</div><div class='add'>+</div><div class='add'>+            if (barrier_enabled == -1) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Could not fetch "</div><div class='add'>+                       " barrier key from the dictionary.");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='del'>-{</div><div class='del'>-        barrier_priv_t  *priv                   = NULL;</div><div class='del'>-        gf_boolean_t     past                   = _gf_false;</div><div class='del'>-        int              ret                    = -1;</div><div class='del'>-        gf_boolean_t     barrier_enabled        = _gf_false;</div><div class='del'>-        uint32_t         timeout                = {0,};</div><div class='del'>-        struct list_head queue                  = {0,};</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("barrier", barrier_enabled, options, bool, out);</div><div class='del'>-        GF_OPTION_RECONF ("barrier-timeout", timeout, options, time, out);</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='ctx'>                 past = priv-&gt;barrier_enabled;</div><div class='ctx'> </div><div class='ctx'>                 switch (past) {</div><div class='del'>-                case _gf_false:</div><div class='add'>+                    case _gf_false:</div><div class='ctx'>                         if (barrier_enabled) {</div><div class='del'>-                                ret = __barrier_enable (this, priv);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='add'>+                            ret = __barrier_enable(this, priv);</div><div class='add'>+                            if (ret)</div><div class='add'>+                                goto unlock;</div><div class='add'>+                        } else {</div><div class='add'>+                            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                                   "Already disabled.");</div><div class='add'>+                            goto unlock;</div><div class='ctx'>                         }</div><div class='ctx'>                         break;</div><div class='ctx'> </div><div class='del'>-                case _gf_true:</div><div class='add'>+                    case _gf_true:</div><div class='ctx'>                         if (!barrier_enabled) {</div><div class='del'>-                                __barrier_disable (this, &amp;queue);</div><div class='del'>-</div><div class='add'>+                            __barrier_disable(this, &amp;queue);</div><div class='add'>+                        } else {</div><div class='add'>+                            gf_log(this-&gt;name, GF_LOG_ERROR, "Already enabled");</div><div class='add'>+                            goto unlock;</div><div class='ctx'>                         }</div><div class='ctx'>                         break;</div><div class='ctx'>                 }</div><div class='del'>-                priv-&gt;timeout.tv_sec = timeout;</div><div class='ctx'>                 ret = 0;</div><div class='add'>+            }</div><div class='add'>+        unlock:</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+            if (!list_empty(&amp;queue))</div><div class='add'>+                barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        default: {</div><div class='add'>+            default_notify(this, event, data);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='add'>+    gf_boolean_t past = _gf_false;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+    uint32_t timeout = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("barrier", barrier_enabled, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("barrier-timeout", timeout, options, time, out);</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        past = priv-&gt;barrier_enabled;</div><div class='add'>+</div><div class='add'>+        switch (past) {</div><div class='add'>+            case _gf_false:</div><div class='add'>+                if (barrier_enabled) {</div><div class='add'>+                    ret = __barrier_enable(this, priv);</div><div class='add'>+                    if (ret) {</div><div class='add'>+                        goto unlock;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            case _gf_true:</div><div class='add'>+                if (!barrier_enabled) {</div><div class='add'>+                    __barrier_disable(this, &amp;queue);</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+        priv-&gt;timeout.tv_sec = timeout;</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (&amp;queue))</div><div class='del'>-                barrier_dequeue_all (this, &amp;queue);</div><div class='add'>+    if (!list_empty(&amp;queue))</div><div class='add'>+        barrier_dequeue_all(this, &amp;queue);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_barrier_mt_end + 1);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting "</div><div class='del'>-                        "initialization failed.");</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_barrier_mt_end + 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting "</div><div class='add'>+               "initialization failed.");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int                     ret     = -1;</div><div class='del'>-        barrier_priv_t         *priv    = NULL;</div><div class='del'>-        uint32_t                timeout = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='add'>+    uint32_t timeout = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "'barrier' not configured with exactly one child");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "'barrier' not configured with exactly one child");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;parents)</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='add'>+    if (!this-&gt;parents)</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dangling volume. check volfile ");</div><div class='ctx'> </div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_barrier_mt_priv_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_barrier_mt_priv_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("barrier", priv-&gt;barrier_enabled, bool, out);</div><div class='del'>-        GF_OPTION_INIT ("barrier-timeout", timeout, time, out);</div><div class='del'>-        priv-&gt;timeout.tv_sec = timeout;</div><div class='add'>+    GF_OPTION_INIT("barrier", priv-&gt;barrier_enabled, bool, out);</div><div class='add'>+    GF_OPTION_INIT("barrier-timeout", timeout, time, out);</div><div class='add'>+    priv-&gt;timeout.tv_sec = timeout;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;queue);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;queue);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;barrier_enabled) {</div><div class='del'>-                ret = __barrier_enable (this, priv);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;barrier_enabled) {</div><div class='add'>+        ret = __barrier_enable(this, priv);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        ret = 0;</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; priv)</div><div class='del'>-                GF_FREE (priv);</div><div class='add'>+    if (ret &amp;&amp; priv)</div><div class='add'>+        GF_FREE(priv);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        barrier_priv_t         *priv    = NULL;</div><div class='del'>-        struct list_head        queue   = {0,};</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "Disabling barriering and dequeuing "</div><div class='del'>-                                         "all the queued fops");</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __barrier_disable (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "Disabling barriering and dequeuing "</div><div class='add'>+           "all the queued fops");</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __barrier_disable(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (&amp;queue))</div><div class='del'>-                barrier_dequeue_all (this, &amp;queue);</div><div class='add'>+    if (!list_empty(&amp;queue))</div><div class='add'>+        barrier_dequeue_all(this, &amp;queue);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;priv-&gt;lock);</div><div class='del'>-        GF_FREE (priv);</div><div class='add'>+    LOCK_DESTROY(&amp;priv-&gt;lock);</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-barrier_dump_stub (call_stub_t *stub, char *prefix)</div><div class='add'>+barrier_dump_stub(call_stub_t *stub, char *prefix)</div><div class='ctx'> {</div><div class='del'>-        char key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_build_key (key, prefix, "fop");</div><div class='del'>-        gf_proc_dump_write (key, "%s", gf_fop_list[stub-&gt;fop]);</div><div class='add'>+    gf_proc_dump_build_key(key, prefix, "fop");</div><div class='add'>+    gf_proc_dump_write(key, "%s", gf_fop_list[stub-&gt;fop]);</div><div class='ctx'> </div><div class='del'>-        if (stub-&gt;frame-&gt;local) {</div><div class='del'>-                gf_proc_dump_build_key (key, prefix, "gfid");</div><div class='del'>-                gf_proc_dump_write (key, "%s",</div><div class='del'>-                                    uuid_utoa (*(uuid_t*)(stub-&gt;frame-&gt;local)));</div><div class='del'>-        }</div><div class='del'>-        if (stub-&gt;args.loc.path) {</div><div class='del'>-                gf_proc_dump_build_key (key, prefix, "path");</div><div class='del'>-                gf_proc_dump_write (key, "%s", stub-&gt;args.loc.path);</div><div class='del'>-        }</div><div class='del'>-        if (stub-&gt;args.loc.name) {</div><div class='del'>-                gf_proc_dump_build_key (key, prefix, "name");</div><div class='del'>-                gf_proc_dump_write (key, "%s", stub-&gt;args.loc.name);</div><div class='del'>-        }</div><div class='add'>+    if (stub-&gt;frame-&gt;local) {</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "gfid");</div><div class='add'>+        gf_proc_dump_write(key, "%s",</div><div class='add'>+                           uuid_utoa(*(uuid_t *)(stub-&gt;frame-&gt;local)));</div><div class='add'>+    }</div><div class='add'>+    if (stub-&gt;args.loc.path) {</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "path");</div><div class='add'>+        gf_proc_dump_write(key, "%s", stub-&gt;args.loc.path);</div><div class='add'>+    }</div><div class='add'>+    if (stub-&gt;args.loc.name) {</div><div class='add'>+        gf_proc_dump_build_key(key, prefix, "name");</div><div class='add'>+        gf_proc_dump_write(key, "%s", stub-&gt;args.loc.name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__barrier_dump_queue (barrier_priv_t *priv)</div><div class='add'>+__barrier_dump_queue(barrier_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='del'>-        char key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        int i = 0;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("barrier", priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("barrier", priv, out);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (stub, &amp;priv-&gt;queue, list) {</div><div class='del'>-                snprintf (key, sizeof (key), "stub.%d", i++);</div><div class='del'>-                gf_proc_dump_add_section (key);</div><div class='del'>-                barrier_dump_stub(stub, key);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(stub, &amp;priv-&gt;queue, list)</div><div class='add'>+    {</div><div class='add'>+        snprintf(key, sizeof(key), "stub.%d", i++);</div><div class='add'>+        gf_proc_dump_add_section(key);</div><div class='add'>+        barrier_dump_stub(stub, key);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-barrier_dump_priv (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        barrier_priv_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("barrier", this, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        gf_proc_dump_build_key (key, "xlator.features.barrier", "priv");</div><div class='del'>-        gf_proc_dump_add_section (key);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                gf_proc_dump_build_key (key, "barrier", "enabled");</div><div class='del'>-                gf_proc_dump_write (key, "%d", priv-&gt;barrier_enabled);</div><div class='del'>-                gf_proc_dump_build_key (key, "barrier", "timeout");</div><div class='del'>-                gf_proc_dump_write (key, "%"PRId64, priv-&gt;timeout.tv_sec);</div><div class='del'>-                if (priv-&gt;barrier_enabled) {</div><div class='del'>-                        gf_proc_dump_build_key (key, "barrier", "queue_size");</div><div class='del'>-                        gf_proc_dump_write (key, "%d", priv-&gt;queue_size);</div><div class='del'>-                        __barrier_dump_queue (priv);</div><div class='del'>-                }</div><div class='add'>+barrier_dump_priv(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    barrier_priv_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("barrier", this, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        return 0;</div><div class='add'>+</div><div class='add'>+    gf_proc_dump_build_key(key, "xlator.features.barrier", "priv");</div><div class='add'>+    gf_proc_dump_add_section(key);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        gf_proc_dump_build_key(key, "barrier", "enabled");</div><div class='add'>+        gf_proc_dump_write(key, "%d", priv-&gt;barrier_enabled);</div><div class='add'>+        gf_proc_dump_build_key(key, "barrier", "timeout");</div><div class='add'>+        gf_proc_dump_write(key, "%" PRId64, priv-&gt;timeout.tv_sec);</div><div class='add'>+        if (priv-&gt;barrier_enabled) {</div><div class='add'>+            gf_proc_dump_build_key(key, "barrier", "queue_size");</div><div class='add'>+            gf_proc_dump_write(key, "%d", priv-&gt;queue_size);</div><div class='add'>+            __barrier_dump_queue(priv);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='ctx'> </div><div class='del'>-        /* Barrier Class fops */</div><div class='del'>-        .rmdir          = barrier_rmdir,</div><div class='del'>-        .unlink         = barrier_unlink,</div><div class='del'>-        .rename         = barrier_rename,</div><div class='del'>-        .removexattr    = barrier_removexattr,</div><div class='del'>-        .fremovexattr   = barrier_fremovexattr,</div><div class='del'>-        .truncate       = barrier_truncate,</div><div class='del'>-        .ftruncate      = barrier_ftruncate,</div><div class='del'>-        .fsync          = barrier_fsync,</div><div class='del'>-</div><div class='del'>-        /* Writes with only O_SYNC flag */</div><div class='del'>-        .writev         = barrier_writev,</div><div class='add'>+    /* Barrier Class fops */</div><div class='add'>+    .rmdir = barrier_rmdir,</div><div class='add'>+    .unlink = barrier_unlink,</div><div class='add'>+    .rename = barrier_rename,</div><div class='add'>+    .removexattr = barrier_removexattr,</div><div class='add'>+    .fremovexattr = barrier_fremovexattr,</div><div class='add'>+    .truncate = barrier_truncate,</div><div class='add'>+    .ftruncate = barrier_ftruncate,</div><div class='add'>+    .fsync = barrier_fsync,</div><div class='add'>+</div><div class='add'>+    /* Writes with only O_SYNC flag */</div><div class='add'>+    .writev = barrier_writev,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .priv = barrier_dump_priv,</div><div class='add'>+    .priv = barrier_dump_priv,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks;</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"barrier"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "disable",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "When \"enabled\", blocks acknowledgements to application "</div><div class='del'>-                         "for file operations such as rmdir, rename, unlink, "</div><div class='del'>-                         "removexattr, fremovexattr, truncate, ftruncate, "</div><div class='del'>-                         "write (with O_SYNC), fsync. It is turned \"off\" by "</div><div class='del'>-                         "default."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"barrier-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-          .default_value = BARRIER_TIMEOUT,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_6_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "After 'timeout' seconds since the time 'barrier' "</div><div class='del'>-                         "option was set to \"on\", acknowledgements to file "</div><div class='del'>-                         "operations are no longer blocked and previously "</div><div class='del'>-                         "blocked acknowledgements are sent to the application"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {"barrier"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "disable",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "When \"enabled\", blocks acknowledgements to application "</div><div class='add'>+                    "for file operations such as rmdir, rename, unlink, "</div><div class='add'>+                    "removexattr, fremovexattr, truncate, ftruncate, "</div><div class='add'>+                    "write (with O_SYNC), fsync. It is turned \"off\" by "</div><div class='add'>+                    "default."},</div><div class='add'>+    {.key = {"barrier-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+     .default_value = BARRIER_TIMEOUT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_6_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .description = "After 'timeout' seconds since the time 'barrier' "</div><div class='add'>+                    "option was set to \"on\", acknowledgements to file "</div><div class='add'>+                    "operations are no longer blocked and previously "</div><div class='add'>+                    "blocked acknowledgements are sent to the application"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c b/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c<br/>index 210beca7e2f..34e20f9df11 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.c</a></div><div class='hunk'>@@ -14,67 +14,65 @@</div><div class='ctx'> #include "bit-rot-scrub-status.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_inc_unsigned_file_count (br_scrub_stats_t *scrub_stat)</div><div class='add'>+br_inc_unsigned_file_count(br_scrub_stats_t *scrub_stat)</div><div class='ctx'> {</div><div class='del'>-        if (!scrub_stat)</div><div class='del'>-                return;</div><div class='add'>+    if (!scrub_stat)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;scrub_stat-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                scrub_stat-&gt;unsigned_files++;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_stat-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_stat-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        scrub_stat-&gt;unsigned_files++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_stat-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_inc_scrubbed_file (br_scrub_stats_t *scrub_stat)</div><div class='add'>+br_inc_scrubbed_file(br_scrub_stats_t *scrub_stat)</div><div class='ctx'> {</div><div class='del'>-        if (!scrub_stat)</div><div class='del'>-                return;</div><div class='add'>+    if (!scrub_stat)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;scrub_stat-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                scrub_stat-&gt;scrubbed_files++;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_stat-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_stat-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        scrub_stat-&gt;scrubbed_files++;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_stat-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_update_scrub_start_time (br_scrub_stats_t *scrub_stat, struct timeval *tv)</div><div class='add'>+br_update_scrub_start_time(br_scrub_stats_t *scrub_stat, struct timeval *tv)</div><div class='ctx'> {</div><div class='del'>-        if (!scrub_stat)</div><div class='del'>-                return;</div><div class='add'>+    if (!scrub_stat)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;scrub_stat-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                scrub_stat-&gt;scrub_start_tv.tv_sec = tv-&gt;tv_sec;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_stat-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_stat-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        scrub_stat-&gt;scrub_start_tv.tv_sec = tv-&gt;tv_sec;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_stat-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_update_scrub_finish_time (br_scrub_stats_t *scrub_stat, char *timestr,</div><div class='del'>-                             struct timeval *tv)</div><div class='add'>+br_update_scrub_finish_time(br_scrub_stats_t *scrub_stat, char *timestr,</div><div class='add'>+                            struct timeval *tv)</div><div class='ctx'> {</div><div class='del'>-        int lst_size = 0;</div><div class='add'>+    int lst_size = 0;</div><div class='ctx'> </div><div class='del'>-        if (!scrub_stat)</div><div class='del'>-                return;</div><div class='add'>+    if (!scrub_stat)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        lst_size = sizeof (scrub_stat-&gt;last_scrub_time);</div><div class='del'>-        if (strlen (timestr)  &gt;= lst_size)</div><div class='del'>-                return;</div><div class='add'>+    lst_size = sizeof(scrub_stat-&gt;last_scrub_time);</div><div class='add'>+    if (strlen(timestr) &gt;= lst_size)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;scrub_stat-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                scrub_stat-&gt;scrub_end_tv.tv_sec = tv-&gt;tv_sec;</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_stat-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        scrub_stat-&gt;scrub_end_tv.tv_sec = tv-&gt;tv_sec;</div><div class='ctx'> </div><div class='del'>-                scrub_stat-&gt;scrub_duration =</div><div class='del'>-                                 scrub_stat-&gt;scrub_end_tv.tv_sec -</div><div class='del'>-                                 scrub_stat-&gt;scrub_start_tv.tv_sec;</div><div class='add'>+        scrub_stat-&gt;scrub_duration = scrub_stat-&gt;scrub_end_tv.tv_sec -</div><div class='add'>+                                     scrub_stat-&gt;scrub_start_tv.tv_sec;</div><div class='ctx'> </div><div class='del'>-                snprintf (scrub_stat-&gt;last_scrub_time, lst_size, "%s",</div><div class='del'>-                          timestr);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_stat-&gt;lock);</div><div class='add'>+        snprintf(scrub_stat-&gt;last_scrub_time, lst_size, "%s", timestr);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_stat-&gt;lock);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c<br/>index e2665acab98..b856c168eb7 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/bit-rot/src/bitd/bit-rot-scrub.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot-scrub.c</a></div><div class='hunk'>@@ -23,21 +23,21 @@</div><div class='ctx'> #include "events.h"</div><div class='ctx'> </div><div class='ctx'> struct br_scrubbers {</div><div class='del'>-        pthread_t scrubthread;</div><div class='add'>+    pthread_t scrubthread;</div><div class='ctx'> </div><div class='del'>-        struct list_head list;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct br_fsscan_entry {</div><div class='del'>-        void *data;</div><div class='add'>+    void *data;</div><div class='ctx'> </div><div class='del'>-        loc_t parent;</div><div class='add'>+    loc_t parent;</div><div class='ctx'> </div><div class='del'>-        gf_dirent_t *entry;</div><div class='add'>+    gf_dirent_t *entry;</div><div class='ctx'> </div><div class='del'>-        struct br_scanfs *fsscan;  /* backpointer to subvolume scanner */</div><div class='add'>+    struct br_scanfs *fsscan; /* backpointer to subvolume scanner */</div><div class='ctx'> </div><div class='del'>-        struct list_head list;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -46,34 +46,32 @@ struct br_fsscan_entry {</div><div class='ctx'>  * to the dictionary value.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-bitd_fetch_signature (xlator_t *this, br_child_t *child,</div><div class='del'>-                      fd_t *fd, dict_t **xattr, br_isignature_out_t **sign)</div><div class='add'>+bitd_fetch_signature(xlator_t *this, br_child_t *child, fd_t *fd,</div><div class='add'>+                     dict_t **xattr, br_isignature_out_t **sign)</div><div class='ctx'> {</div><div class='del'>-       int32_t ret = -1;</div><div class='del'>-</div><div class='del'>-        ret = syncop_fgetxattr (child-&gt;xl, fd, xattr,</div><div class='del'>-                               GLUSTERFS_GET_OBJECT_SIGNATURE, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                br_log_object (this, "fgetxattr", fd-&gt;inode-&gt;gfid, -ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_ptr</div><div class='del'>-                (*xattr, GLUSTERFS_GET_OBJECT_SIGNATURE, (void **) sign);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SIGN_FAILED,</div><div class='del'>-                        "failed to extract signature info [GFID: %s]",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unref_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- unref_dict:</div><div class='del'>-        dict_unref (*xattr);</div><div class='del'>- out:</div><div class='del'>-        return -1;</div><div class='del'>-</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = syncop_fgetxattr(child-&gt;xl, fd, xattr, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='add'>+                           NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        br_log_object(this, "fgetxattr", fd-&gt;inode-&gt;gfid, -ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_ptr(*xattr, GLUSTERFS_GET_OBJECT_SIGNATURE, (void **)sign);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SIGN_FAILED,</div><div class='add'>+               "failed to extract signature info [GFID: %s]",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unref_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+unref_dict:</div><div class='add'>+    dict_unref(*xattr);</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -86,88 +84,85 @@ bitd_fetch_signature (xlator_t *this, br_child_t *child,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-bitd_scrub_post_compute_check (xlator_t *this,</div><div class='del'>-                               br_child_t *child,</div><div class='del'>-                               fd_t *fd, unsigned long version,</div><div class='del'>-                               br_isignature_out_t **signature,</div><div class='del'>-                               br_scrub_stats_t *scrub_stat,</div><div class='del'>-                               gf_boolean_t skip_stat)</div><div class='add'>+bitd_scrub_post_compute_check(xlator_t *this, br_child_t *child, fd_t *fd,</div><div class='add'>+                              unsigned long version,</div><div class='add'>+                              br_isignature_out_t **signature,</div><div class='add'>+                              br_scrub_stats_t *scrub_stat,</div><div class='add'>+                              gf_boolean_t skip_stat)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret     = 0;</div><div class='del'>-        size_t               signlen = 0;</div><div class='del'>-        dict_t              *xattr   = NULL;</div><div class='del'>-        br_isignature_out_t *signptr = NULL;</div><div class='del'>-</div><div class='del'>-        ret = bitd_fetch_signature (this, child, fd, &amp;xattr, &amp;signptr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (!skip_stat)</div><div class='del'>-                        br_inc_unsigned_file_count (scrub_stat);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Either the object got dirtied during the time the signature was</div><div class='del'>-         * calculated OR the version we saved during pre-compute check does</div><div class='del'>-         * not match now, implying that the object got dirtied and signed in</div><div class='del'>-         * between scrubs pre &amp; post compute checks (checksum window).</div><div class='del'>-         *</div><div class='del'>-         * The log entry looks pretty ugly, but helps in debugging..</div><div class='del'>-         */</div><div class='del'>-        if (signptr-&gt;stale || (signptr-&gt;version != version)) {</div><div class='del'>-                if (!skip_stat)</div><div class='del'>-                        br_inc_unsigned_file_count (scrub_stat);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "&lt;STAGE: POST&gt; Object [GFID: %s] "</div><div class='del'>-                              "either has a stale signature OR underwent "</div><div class='del'>-                              "signing during checksumming {Stale: %d | "</div><div class='del'>-                              "Version: %lu,%lu}", uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                              (signptr-&gt;stale) ? 1 : 0, version,</div><div class='del'>-                              signptr-&gt;version);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto unref_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        signlen = signptr-&gt;signaturelen;</div><div class='del'>-        *signature = GF_MALLOC (sizeof (br_isignature_out_t) + signlen,</div><div class='del'>-                                gf_common_mt_char);</div><div class='del'>-</div><div class='del'>-        (void) memcpy (*signature, signptr,</div><div class='del'>-                       sizeof (br_isignature_out_t) + signlen);</div><div class='del'>-</div><div class='del'>- unref_dict:</div><div class='del'>-        dict_unref (xattr);</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    size_t signlen = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    br_isignature_out_t *signptr = NULL;</div><div class='ctx'> </div><div class='add'>+    ret = bitd_fetch_signature(this, child, fd, &amp;xattr, &amp;signptr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (!skip_stat)</div><div class='add'>+            br_inc_unsigned_file_count(scrub_stat);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Either the object got dirtied during the time the signature was</div><div class='add'>+     * calculated OR the version we saved during pre-compute check does</div><div class='add'>+     * not match now, implying that the object got dirtied and signed in</div><div class='add'>+     * between scrubs pre &amp; post compute checks (checksum window).</div><div class='add'>+     *</div><div class='add'>+     * The log entry looks pretty ugly, but helps in debugging..</div><div class='add'>+     */</div><div class='add'>+    if (signptr-&gt;stale || (signptr-&gt;version != version)) {</div><div class='add'>+        if (!skip_stat)</div><div class='add'>+            br_inc_unsigned_file_count(scrub_stat);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "&lt;STAGE: POST&gt; Object [GFID: %s] "</div><div class='add'>+                     "either has a stale signature OR underwent "</div><div class='add'>+                     "signing during checksumming {Stale: %d | "</div><div class='add'>+                     "Version: %lu,%lu}",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid), (signptr-&gt;stale) ? 1 : 0,</div><div class='add'>+                     version, signptr-&gt;version);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto unref_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    signlen = signptr-&gt;signaturelen;</div><div class='add'>+    *signature = GF_MALLOC(sizeof(br_isignature_out_t) + signlen,</div><div class='add'>+                           gf_common_mt_char);</div><div class='add'>+</div><div class='add'>+    (void)memcpy(*signature, signptr, sizeof(br_isignature_out_t) + signlen);</div><div class='add'>+</div><div class='add'>+unref_dict:</div><div class='add'>+    dict_unref(xattr);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-bitd_signature_staleness (xlator_t *this,</div><div class='del'>-                          br_child_t *child, fd_t *fd,</div><div class='del'>-                          int *stale, unsigned long *version,</div><div class='del'>-                          br_scrub_stats_t *scrub_stat, gf_boolean_t skip_stat)</div><div class='add'>+bitd_signature_staleness(xlator_t *this, br_child_t *child, fd_t *fd,</div><div class='add'>+                         int *stale, unsigned long *version,</div><div class='add'>+                         br_scrub_stats_t *scrub_stat, gf_boolean_t skip_stat)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-        br_isignature_out_t *signptr = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    br_isignature_out_t *signptr = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = bitd_fetch_signature (this, child, fd, &amp;xattr, &amp;signptr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (!skip_stat)</div><div class='del'>-                        br_inc_unsigned_file_count (scrub_stat);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = bitd_fetch_signature(this, child, fd, &amp;xattr, &amp;signptr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (!skip_stat)</div><div class='add'>+            br_inc_unsigned_file_count(scrub_stat);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * save version for validation in post compute stage</div><div class='del'>-         * c.f. bitd_scrub_post_compute_check()</div><div class='del'>-         */</div><div class='del'>-        *stale = signptr-&gt;stale ? 1 : 0;</div><div class='del'>-        *version = signptr-&gt;version;</div><div class='add'>+    /**</div><div class='add'>+     * save version for validation in post compute stage</div><div class='add'>+     * c.f. bitd_scrub_post_compute_check()</div><div class='add'>+     */</div><div class='add'>+    *stale = signptr-&gt;stale ? 1 : 0;</div><div class='add'>+    *version = signptr-&gt;version;</div><div class='ctx'> </div><div class='del'>-        dict_unref (xattr);</div><div class='add'>+    dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -179,101 +174,102 @@ bitd_signature_staleness (xlator_t *this,</div><div class='ctx'>  *  - has stale signature</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-bitd_scrub_pre_compute_check (xlator_t *this, br_child_t *child,</div><div class='del'>-                              fd_t *fd, unsigned long *version,</div><div class='del'>-                              br_scrub_stats_t *scrub_stat,</div><div class='del'>-                              gf_boolean_t skip_stat)</div><div class='add'>+bitd_scrub_pre_compute_check(xlator_t *this, br_child_t *child, fd_t *fd,</div><div class='add'>+                             unsigned long *version,</div><div class='add'>+                             br_scrub_stats_t *scrub_stat,</div><div class='add'>+                             gf_boolean_t skip_stat)</div><div class='ctx'> {</div><div class='del'>-        int     stale = 0;</div><div class='del'>-        int32_t ret   = -1;</div><div class='del'>-</div><div class='del'>-        if (bitd_is_bad_file (this, child, NULL, fd)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SKIP_OBJECT,</div><div class='del'>-                        "Object [GFID: %s] is marked corrupted, skipping..",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = bitd_signature_staleness (this, child, fd, &amp;stale, version,</div><div class='del'>-                                        scrub_stat, skip_stat);</div><div class='del'>-        if (!ret &amp;&amp; stale) {</div><div class='del'>-                if (!skip_stat)</div><div class='del'>-                        br_inc_unsigned_file_count (scrub_stat);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "&lt;STAGE: PRE&gt; Object [GFID: %s] "</div><div class='del'>-                              "has stale signature",</div><div class='del'>-                              uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    int stale = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    if (bitd_is_bad_file(this, child, NULL, fd)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SKIP_OBJECT,</div><div class='add'>+               "Object [GFID: %s] is marked corrupted, skipping..",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = bitd_signature_staleness(this, child, fd, &amp;stale, version, scrub_stat,</div><div class='add'>+                                   skip_stat);</div><div class='add'>+    if (!ret &amp;&amp; stale) {</div><div class='add'>+        if (!skip_stat)</div><div class='add'>+            br_inc_unsigned_file_count(scrub_stat);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "&lt;STAGE: PRE&gt; Object [GFID: %s] "</div><div class='add'>+                     "has stale signature",</div><div class='add'>+                     uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* static int */</div><div class='ctx'> int</div><div class='del'>-bitd_compare_ckum (xlator_t *this,</div><div class='del'>-                   br_isignature_out_t *sign,</div><div class='del'>-                   unsigned char *md, inode_t *linked_inode,</div><div class='del'>-                   gf_dirent_t *entry, fd_t *fd, br_child_t *child, loc_t *loc)</div><div class='add'>+bitd_compare_ckum(xlator_t *this, br_isignature_out_t *sign, unsigned char *md,</div><div class='add'>+                  inode_t *linked_inode, gf_dirent_t *entry, fd_t *fd,</div><div class='add'>+                  br_child_t *child, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int   ret = -1;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, sign, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, linked_inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, md, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, entry, out);</div><div class='del'>-</div><div class='del'>-        if (strncmp</div><div class='del'>-            (sign-&gt;signature, (char *) md, strlen (sign-&gt;signature)) == 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s [GFID: %s | Brick: %s] "</div><div class='del'>-                              "matches calculated checksum", loc-&gt;path,</div><div class='del'>-                              uuid_utoa (linked_inode-&gt;gfid),</div><div class='del'>-                              child-&gt;brick_path);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_DEBUG, 0, BRB_MSG_CHECKSUM_MISMATCH,</div><div class='del'>-                "Object checksum mismatch: %s [GFID: %s | Brick: %s]",</div><div class='del'>-                loc-&gt;path, uuid_utoa (linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ALERT, 0, BRB_MSG_CHECKSUM_MISMATCH,</div><div class='del'>-                "CORRUPTION DETECTED: Object %s {Brick: %s | GFID: %s}",</div><div class='del'>-                loc-&gt;path, child-&gt;brick_path, uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        /* Perform bad-file marking */</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (xattr, BITROT_OBJECT_BAD_KEY, _gf_true);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_MARK_BAD_FILE,</div><div class='del'>-                        "Error setting bad-file marker for %s [GFID: %s | "</div><div class='del'>-                        "Brick: %s]", loc-&gt;path, uuid_utoa (linked_inode-&gt;gfid),</div><div class='del'>-                        child-&gt;brick_path);</div><div class='del'>-                goto dictfree;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ALERT, 0, BRB_MSG_MARK_CORRUPTED, "Marking"</div><div class='del'>-                " %s [GFID: %s | Brick: %s] as corrupted..", loc-&gt;path,</div><div class='del'>-                uuid_utoa (linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='del'>-        gf_event (EVENT_BITROT_BAD_FILE, "gfid=%s;path=%s;brick=%s",</div><div class='del'>-                  uuid_utoa (linked_inode-&gt;gfid), loc-&gt;path, child-&gt;brick_path);</div><div class='del'>-        ret = syncop_fsetxattr (child-&gt;xl, fd, xattr, 0, NULL, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_MARK_BAD_FILE,</div><div class='del'>-                        "Error marking object %s [GFID: %s] as corrupted",</div><div class='del'>-                        loc-&gt;path, uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>- dictfree:</div><div class='del'>-        dict_unref (xattr);</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, sign, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, linked_inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, md, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, entry, out);</div><div class='add'>+</div><div class='add'>+    if (strncmp(sign-&gt;signature, (char *)md, strlen(sign-&gt;signature)) == 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "%s [GFID: %s | Brick: %s] "</div><div class='add'>+                     "matches calculated checksum",</div><div class='add'>+                     loc-&gt;path, uuid_utoa(linked_inode-&gt;gfid),</div><div class='add'>+                     child-&gt;brick_path);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, BRB_MSG_CHECKSUM_MISMATCH,</div><div class='add'>+           "Object checksum mismatch: %s [GFID: %s | Brick: %s]", loc-&gt;path,</div><div class='add'>+           uuid_utoa(linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ALERT, 0, BRB_MSG_CHECKSUM_MISMATCH,</div><div class='add'>+           "CORRUPTION DETECTED: Object %s {Brick: %s | GFID: %s}", loc-&gt;path,</div><div class='add'>+           child-&gt;brick_path, uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    /* Perform bad-file marking */</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(xattr, BITROT_OBJECT_BAD_KEY, _gf_true);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_MARK_BAD_FILE,</div><div class='add'>+               "Error setting bad-file marker for %s [GFID: %s | "</div><div class='add'>+               "Brick: %s]",</div><div class='add'>+               loc-&gt;path, uuid_utoa(linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='add'>+        goto dictfree;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ALERT, 0, BRB_MSG_MARK_CORRUPTED,</div><div class='add'>+           "Marking"</div><div class='add'>+           " %s [GFID: %s | Brick: %s] as corrupted..",</div><div class='add'>+           loc-&gt;path, uuid_utoa(linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='add'>+    gf_event(EVENT_BITROT_BAD_FILE, "gfid=%s;path=%s;brick=%s",</div><div class='add'>+             uuid_utoa(linked_inode-&gt;gfid), loc-&gt;path, child-&gt;brick_path);</div><div class='add'>+    ret = syncop_fsetxattr(child-&gt;xl, fd, xattr, 0, NULL, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_MARK_BAD_FILE,</div><div class='add'>+               "Error marking object %s [GFID: %s] as corrupted", loc-&gt;path,</div><div class='add'>+               uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+dictfree:</div><div class='add'>+    dict_unref(xattr);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -284,539 +280,552 @@ bitd_compare_ckum (xlator_t *this,</div><div class='ctx'>  * signs with SHA256).</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-br_scrubber_scrub_begin (xlator_t *this, struct br_fsscan_entry *fsentry)</div><div class='add'>+br_scrubber_scrub_begin(xlator_t *this, struct br_fsscan_entry *fsentry)</div><div class='ctx'> {</div><div class='del'>-        int32_t                ret           = -1;</div><div class='del'>-        fd_t                  *fd            = NULL;</div><div class='del'>-        loc_t                  loc           = {0, };</div><div class='del'>-        struct iatt            iatt          = {0, };</div><div class='del'>-        struct iatt            parent_buf    = {0, };</div><div class='del'>-        pid_t                  pid           = 0;</div><div class='del'>-        br_child_t            *child         = NULL;</div><div class='del'>-        unsigned char         *md            = NULL;</div><div class='del'>-        inode_t               *linked_inode  = NULL;</div><div class='del'>-        br_isignature_out_t   *sign          = NULL;</div><div class='del'>-        unsigned long          signedversion = 0;</div><div class='del'>-        gf_dirent_t           *entry         = NULL;</div><div class='del'>-        br_private_t          *priv          = NULL;</div><div class='del'>-        loc_t                 *parent        = NULL;</div><div class='del'>-        gf_boolean_t           skip_stat     = _gf_false;</div><div class='del'>-        uuid_t                 shard_root_gfid = {0,};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", fsentry, out);</div><div class='del'>-</div><div class='del'>-        entry = fsentry-&gt;entry;</div><div class='del'>-        parent = &amp;fsentry-&gt;parent;</div><div class='del'>-        child = fsentry-&gt;data;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", entry, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", parent, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", priv, out);</div><div class='del'>-</div><div class='del'>-        pid = GF_CLIENT_PID_SCRUB;</div><div class='del'>-</div><div class='del'>-        ret = br_prepare_loc (this, child, parent, entry, &amp;loc);</div><div class='del'>-        if (!ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        syncopctx_setfspid (&amp;pid);</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (child-&gt;xl, &amp;loc, &amp;iatt, &amp;parent_buf, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                br_log_object_path (this, "lookup", loc.path, -ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        linked_inode = inode_link (loc.inode, parent-&gt;inode, loc.name, &amp;iatt);</div><div class='del'>-        if (linked_inode)</div><div class='del'>-                inode_lookup (linked_inode);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Scrubbing object %s [GFID: %s]",</div><div class='del'>-                      entry-&gt;d_name, uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        if (iatt.ia_type != IA_IFREG) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s is not a regular file",</div><div class='del'>-                              entry-&gt;d_name);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (IS_DHT_LINKFILE_MODE ((&amp;iatt))) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s is a dht sticky bit file",</div><div class='del'>-                              entry-&gt;d_name);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* skip updating scrub statistics for shard entries */</div><div class='del'>-        gf_uuid_parse (SHARD_ROOT_GFID, shard_root_gfid);</div><div class='del'>-        if (gf_uuid_compare (loc.pargfid, shard_root_gfid) == 0)</div><div class='del'>-                skip_stat = _gf_true;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * open() an fd for subsequent operations</div><div class='del'>-         */</div><div class='del'>-        fd = fd_create (linked_inode, 0);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_FD_CREATE_FAILED,</div><div class='del'>-                        "failed to create fd for inode %s",</div><div class='del'>-                        uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_open (child-&gt;xl, &amp;loc, O_RDWR, fd, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                br_log_object (this, "open", linked_inode-&gt;gfid, -ret);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto unrefd;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd_bind (fd);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * perform pre compute checks before initiating checksum</div><div class='del'>-         * computation</div><div class='del'>-         *  - presence of bad object</div><div class='del'>-         *  - signature staleness</div><div class='del'>-         */</div><div class='del'>-        ret = bitd_scrub_pre_compute_check (this, child, fd, &amp;signedversion,</div><div class='del'>-                                            &amp;priv-&gt;scrub_stat, skip_stat);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unrefd; /* skip this object */</div><div class='del'>-</div><div class='del'>-        /* if all's good, proceed to calculate the hash */</div><div class='del'>-        md = GF_MALLOC (SHA256_DIGEST_LENGTH, gf_common_mt_char);</div><div class='del'>-        if (!md)</div><div class='del'>-                goto unrefd;</div><div class='del'>-</div><div class='del'>-        ret = br_calculate_obj_checksum (md, child, fd, &amp;iatt);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_CALC_ERROR,</div><div class='del'>-                        "error calculating hash for object [GFID: %s]",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto free_md;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * perform post compute checks as an object's signature may have</div><div class='del'>-         * become stale while scrubber calculated checksum.</div><div class='del'>-         */</div><div class='del'>-        ret = bitd_scrub_post_compute_check (this, child, fd, signedversion,</div><div class='del'>-                                             &amp;sign, &amp;priv-&gt;scrub_stat,</div><div class='del'>-                                             skip_stat);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto free_md;</div><div class='del'>-</div><div class='del'>-        ret = bitd_compare_ckum (this, sign, md,</div><div class='del'>-                                 linked_inode, entry, fd, child, &amp;loc);</div><div class='del'>-</div><div class='del'>-        if (!skip_stat)</div><div class='del'>-                br_inc_scrubbed_file (&amp;priv-&gt;scrub_stat);</div><div class='del'>-</div><div class='del'>-        GF_FREE (sign); /* allocated on post-compute */</div><div class='del'>-</div><div class='del'>-        /** fd_unref() takes care of closing fd.. like syncop_close() */</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt parent_buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    pid_t pid = 0;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    unsigned char *md = NULL;</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    br_isignature_out_t *sign = NULL;</div><div class='add'>+    unsigned long signedversion = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    loc_t *parent = NULL;</div><div class='add'>+    gf_boolean_t skip_stat = _gf_false;</div><div class='add'>+    uuid_t shard_root_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", fsentry, out);</div><div class='add'>+</div><div class='add'>+    entry = fsentry-&gt;entry;</div><div class='add'>+    parent = &amp;fsentry-&gt;parent;</div><div class='add'>+    child = fsentry-&gt;data;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", entry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", parent, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", priv, out);</div><div class='add'>+</div><div class='add'>+    pid = GF_CLIENT_PID_SCRUB;</div><div class='add'>+</div><div class='add'>+    ret = br_prepare_loc(this, child, parent, entry, &amp;loc);</div><div class='add'>+    if (!ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    syncopctx_setfspid(&amp;pid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(child-&gt;xl, &amp;loc, &amp;iatt, &amp;parent_buf, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        br_log_object_path(this, "lookup", loc.path, -ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    linked_inode = inode_link(loc.inode, parent-&gt;inode, loc.name, &amp;iatt);</div><div class='add'>+    if (linked_inode)</div><div class='add'>+        inode_lookup(linked_inode);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Scrubbing object %s [GFID: %s]", entry-&gt;d_name,</div><div class='add'>+                 uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    if (iatt.ia_type != IA_IFREG) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s is not a regular file", entry-&gt;d_name);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- free_md:</div><div class='del'>-        GF_FREE (md);</div><div class='del'>- unrefd:</div><div class='del'>-        fd_unref (fd);</div><div class='del'>- unref_inode:</div><div class='del'>-        inode_unref (linked_inode);</div><div class='del'>- out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    if (IS_DHT_LINKFILE_MODE((&amp;iatt))) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "%s is a dht sticky bit file",</div><div class='add'>+                     entry-&gt;d_name);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* skip updating scrub statistics for shard entries */</div><div class='add'>+    gf_uuid_parse(SHARD_ROOT_GFID, shard_root_gfid);</div><div class='add'>+    if (gf_uuid_compare(loc.pargfid, shard_root_gfid) == 0)</div><div class='add'>+        skip_stat = _gf_true;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * open() an fd for subsequent operations</div><div class='add'>+     */</div><div class='add'>+    fd = fd_create(linked_inode, 0);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_FD_CREATE_FAILED,</div><div class='add'>+               "failed to create fd for inode %s",</div><div class='add'>+               uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_open(child-&gt;xl, &amp;loc, O_RDWR, fd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        br_log_object(this, "open", linked_inode-&gt;gfid, -ret);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto unrefd;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * perform pre compute checks before initiating checksum</div><div class='add'>+     * computation</div><div class='add'>+     *  - presence of bad object</div><div class='add'>+     *  - signature staleness</div><div class='add'>+     */</div><div class='add'>+    ret = bitd_scrub_pre_compute_check(this, child, fd, &amp;signedversion,</div><div class='add'>+                                       &amp;priv-&gt;scrub_stat, skip_stat);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unrefd; /* skip this object */</div><div class='add'>+</div><div class='add'>+    /* if all's good, proceed to calculate the hash */</div><div class='add'>+    md = GF_MALLOC(SHA256_DIGEST_LENGTH, gf_common_mt_char);</div><div class='add'>+    if (!md)</div><div class='add'>+        goto unrefd;</div><div class='add'>+</div><div class='add'>+    ret = br_calculate_obj_checksum(md, child, fd, &amp;iatt);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_CALC_ERROR,</div><div class='add'>+               "error calculating hash for object [GFID: %s]",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto free_md;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * perform post compute checks as an object's signature may have</div><div class='add'>+     * become stale while scrubber calculated checksum.</div><div class='add'>+     */</div><div class='add'>+    ret = bitd_scrub_post_compute_check(this, child, fd, signedversion, &amp;sign,</div><div class='add'>+                                        &amp;priv-&gt;scrub_stat, skip_stat);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto free_md;</div><div class='add'>+</div><div class='add'>+    ret = bitd_compare_ckum(this, sign, md, linked_inode, entry, fd, child,</div><div class='add'>+                            &amp;loc);</div><div class='add'>+</div><div class='add'>+    if (!skip_stat)</div><div class='add'>+        br_inc_scrubbed_file(&amp;priv-&gt;scrub_stat);</div><div class='add'>+</div><div class='add'>+    GF_FREE(sign); /* allocated on post-compute */</div><div class='add'>+</div><div class='add'>+    /** fd_unref() takes care of closing fd.. like syncop_close() */</div><div class='add'>+</div><div class='add'>+free_md:</div><div class='add'>+    GF_FREE(md);</div><div class='add'>+unrefd:</div><div class='add'>+    fd_unref(fd);</div><div class='add'>+unref_inode:</div><div class='add'>+    inode_unref(linked_inode);</div><div class='add'>+out:</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_lock_cleaner (void *arg)</div><div class='add'>+_br_lock_cleaner(void *arg)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_t *mutex = arg;</div><div class='add'>+    pthread_mutex_t *mutex = arg;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_unlock (mutex);</div><div class='add'>+    pthread_mutex_unlock(mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-wait_for_scrubbing (xlator_t *this, struct br_scanfs *fsscan)</div><div class='add'>+wait_for_scrubbing(xlator_t *this, struct br_scanfs *fsscan)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='ctx'> </div><div class='del'>-        pthread_cleanup_push (_br_lock_cleaner, &amp;fsscan-&gt;waitlock);</div><div class='del'>-        pthread_mutex_lock (&amp;fsscan-&gt;waitlock);</div><div class='add'>+    pthread_cleanup_push(_br_lock_cleaner, &amp;fsscan-&gt;waitlock);</div><div class='add'>+    pthread_mutex_lock(&amp;fsscan-&gt;waitlock);</div><div class='add'>+    {</div><div class='add'>+        pthread_cleanup_push(_br_lock_cleaner, &amp;fsscrub-&gt;mutex);</div><div class='add'>+        pthread_mutex_lock(&amp;fsscrub-&gt;mutex);</div><div class='ctx'>         {</div><div class='del'>-                pthread_cleanup_push (_br_lock_cleaner, &amp;fsscrub-&gt;mutex);</div><div class='del'>-                pthread_mutex_lock (&amp;fsscrub-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        list_replace_init (&amp;fsscan-&gt;queued, &amp;fsscan-&gt;ready);</div><div class='del'>-</div><div class='del'>-                        /* wake up scrubbers */</div><div class='del'>-                        pthread_cond_broadcast (&amp;fsscrub-&gt;cond);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;fsscrub-&gt;mutex);</div><div class='del'>-                pthread_cleanup_pop (0);</div><div class='del'>-</div><div class='del'>-                while (fsscan-&gt;entries != 0)</div><div class='del'>-                        pthread_cond_wait</div><div class='del'>-                                    (&amp;fsscan-&gt;waitcond, &amp;fsscan-&gt;waitlock);</div><div class='add'>+            list_replace_init(&amp;fsscan-&gt;queued, &amp;fsscan-&gt;ready);</div><div class='add'>+</div><div class='add'>+            /* wake up scrubbers */</div><div class='add'>+            pthread_cond_broadcast(&amp;fsscrub-&gt;cond);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;fsscan-&gt;waitlock);</div><div class='del'>-        pthread_cleanup_pop (0);</div><div class='add'>+        pthread_mutex_unlock(&amp;fsscrub-&gt;mutex);</div><div class='add'>+        pthread_cleanup_pop(0);</div><div class='add'>+</div><div class='add'>+        while (fsscan-&gt;entries != 0)</div><div class='add'>+            pthread_cond_wait(&amp;fsscan-&gt;waitcond, &amp;fsscan-&gt;waitlock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fsscan-&gt;waitlock);</div><div class='add'>+    pthread_cleanup_pop(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_fsscan_inc_entry_count (struct br_scanfs *fsscan)</div><div class='add'>+_br_fsscan_inc_entry_count(struct br_scanfs *fsscan)</div><div class='ctx'> {</div><div class='del'>-        fsscan-&gt;entries++;</div><div class='add'>+    fsscan-&gt;entries++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_fsscan_dec_entry_count (struct br_scanfs *fsscan)</div><div class='add'>+_br_fsscan_dec_entry_count(struct br_scanfs *fsscan)</div><div class='ctx'> {</div><div class='del'>-        if (--fsscan-&gt;entries == 0) {</div><div class='del'>-                pthread_mutex_lock (&amp;fsscan-&gt;waitlock);</div><div class='del'>-                {</div><div class='del'>-                        pthread_cond_signal (&amp;fsscan-&gt;waitcond);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;fsscan-&gt;waitlock);</div><div class='add'>+    if (--fsscan-&gt;entries == 0) {</div><div class='add'>+        pthread_mutex_lock(&amp;fsscan-&gt;waitlock);</div><div class='add'>+        {</div><div class='add'>+            pthread_cond_signal(&amp;fsscan-&gt;waitcond);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;fsscan-&gt;waitlock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_fsscan_collect_entry (struct br_scanfs *fsscan,</div><div class='del'>-                           struct br_fsscan_entry *fsentry)</div><div class='add'>+_br_fsscan_collect_entry(struct br_scanfs *fsscan,</div><div class='add'>+                         struct br_fsscan_entry *fsentry)</div><div class='ctx'> {</div><div class='del'>-        list_add_tail (&amp;fsentry-&gt;list, &amp;fsscan-&gt;queued);</div><div class='del'>-        _br_fsscan_inc_entry_count (fsscan);</div><div class='add'>+    list_add_tail(&amp;fsentry-&gt;list, &amp;fsscan-&gt;queued);</div><div class='add'>+    _br_fsscan_inc_entry_count(fsscan);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define NR_ENTRIES (1&lt;&lt;7) /* ..bulk scrubbing */</div><div class='add'>+#define NR_ENTRIES (1 &lt;&lt; 7) /* ..bulk scrubbing */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_fsscanner_handle_entry (xlator_t *subvol,</div><div class='del'>-                           gf_dirent_t *entry, loc_t *parent, void *data)</div><div class='add'>+br_fsscanner_handle_entry(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                          void *data)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret     = -1;</div><div class='del'>-        int                     scrub   = 0;</div><div class='del'>-        br_child_t             *child   = NULL;</div><div class='del'>-        xlator_t               *this    = NULL;</div><div class='del'>-        struct br_scanfs       *fsscan  = NULL;</div><div class='del'>-        struct br_fsscan_entry *fsentry = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int scrub = 0;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct br_scanfs *fsscan = NULL;</div><div class='add'>+    struct br_fsscan_entry *fsentry = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", subvol, error_return);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", data, error_return);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", subvol, error_return);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", data, error_return);</div><div class='ctx'> </div><div class='del'>-        child = data;</div><div class='del'>-        this = child-&gt;this;</div><div class='del'>-        fsscan = &amp;child-&gt;fsscan;</div><div class='add'>+    child = data;</div><div class='add'>+    this = child-&gt;this;</div><div class='add'>+    fsscan = &amp;child-&gt;fsscan;</div><div class='ctx'> </div><div class='del'>-        _mask_cancellation ();</div><div class='add'>+    _mask_cancellation();</div><div class='ctx'> </div><div class='del'>-        fsentry = GF_CALLOC (1, sizeof (*fsentry), gf_br_mt_br_fsscan_entry_t);</div><div class='del'>-        if (!fsentry)</div><div class='del'>-                goto error_return;</div><div class='add'>+    fsentry = GF_CALLOC(1, sizeof(*fsentry), gf_br_mt_br_fsscan_entry_t);</div><div class='add'>+    if (!fsentry)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        {</div><div class='del'>-                fsentry-&gt;data = data;</div><div class='del'>-                fsentry-&gt;fsscan = &amp;child-&gt;fsscan;</div><div class='add'>+    {</div><div class='add'>+        fsentry-&gt;data = data;</div><div class='add'>+        fsentry-&gt;fsscan = &amp;child-&gt;fsscan;</div><div class='ctx'> </div><div class='del'>-                /* copy parent loc */</div><div class='del'>-                ret = loc_copy (&amp;fsentry-&gt;parent, parent);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto dealloc;</div><div class='add'>+        /* copy parent loc */</div><div class='add'>+        ret = loc_copy(&amp;fsentry-&gt;parent, parent);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto dealloc;</div><div class='ctx'> </div><div class='del'>-                /* copy child entry */</div><div class='del'>-                fsentry-&gt;entry = entry_copy (entry);</div><div class='del'>-                if (!fsentry-&gt;entry)</div><div class='del'>-                        goto locwipe;</div><div class='add'>+        /* copy child entry */</div><div class='add'>+        fsentry-&gt;entry = entry_copy(entry);</div><div class='add'>+        if (!fsentry-&gt;entry)</div><div class='add'>+            goto locwipe;</div><div class='ctx'> </div><div class='del'>-                INIT_LIST_HEAD (&amp;fsentry-&gt;list);</div><div class='del'>-        }</div><div class='add'>+        INIT_LIST_HEAD(&amp;fsentry-&gt;list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fsscan-&gt;entrylock);</div><div class='del'>-        {</div><div class='del'>-                _br_fsscan_collect_entry (fsscan, fsentry);</div><div class='del'>-</div><div class='del'>-                /**</div><div class='del'>-                 * need not be a equality check as entries may be pushed</div><div class='del'>-                 * back onto the scanned queue when thread(s) are cleaned.</div><div class='del'>-                 */</div><div class='del'>-                if (fsscan-&gt;entries &gt;= NR_ENTRIES)</div><div class='del'>-                        scrub = 1;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fsscan-&gt;entrylock);</div><div class='add'>+    LOCK(&amp;fsscan-&gt;entrylock);</div><div class='add'>+    {</div><div class='add'>+        _br_fsscan_collect_entry(fsscan, fsentry);</div><div class='ctx'> </div><div class='del'>-        _unmask_cancellation ();</div><div class='add'>+        /**</div><div class='add'>+         * need not be a equality check as entries may be pushed</div><div class='add'>+         * back onto the scanned queue when thread(s) are cleaned.</div><div class='add'>+         */</div><div class='add'>+        if (fsscan-&gt;entries &gt;= NR_ENTRIES)</div><div class='add'>+            scrub = 1;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fsscan-&gt;entrylock);</div><div class='ctx'> </div><div class='del'>-        if (scrub)</div><div class='del'>-                wait_for_scrubbing (this, fsscan);</div><div class='add'>+    _unmask_cancellation();</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (scrub)</div><div class='add'>+        wait_for_scrubbing(this, fsscan);</div><div class='ctx'> </div><div class='del'>- locwipe:</div><div class='del'>-        loc_wipe (&amp;fsentry-&gt;parent);</div><div class='del'>- dealloc:</div><div class='del'>-        GF_FREE (fsentry);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+locwipe:</div><div class='add'>+    loc_wipe(&amp;fsentry-&gt;parent);</div><div class='add'>+dealloc:</div><div class='add'>+    GF_FREE(fsentry);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_fsscan_deactivate (xlator_t *this)</div><div class='add'>+br_fsscan_deactivate(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        br_scrub_state_t nstate = 0;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        ret = gf_tw_del_timer (priv-&gt;timer_wheel, scrub_monitor-&gt;timer);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                nstate = BR_SCRUB_STATE_STALLED;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Volume is under active scrubbing. Pausing scrub..");</div><div class='del'>-        } else {</div><div class='del'>-                nstate = BR_SCRUB_STATE_PAUSED;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Scrubber paused");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        _br_monitor_set_scrub_state (scrub_monitor, nstate);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    br_scrub_state_t nstate = 0;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    ret = gf_tw_del_timer(priv-&gt;timer_wheel, scrub_monitor-&gt;timer);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        nstate = BR_SCRUB_STATE_STALLED;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Volume is under active scrubbing. Pausing scrub..");</div><div class='add'>+    } else {</div><div class='add'>+        nstate = BR_SCRUB_STATE_PAUSED;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Scrubber paused");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    _br_monitor_set_scrub_state(scrub_monitor, nstate);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_scrubber_log_time (xlator_t *this, const char *sfx)</div><div class='add'>+br_scrubber_log_time(xlator_t *this, const char *sfx)</div><div class='ctx'> {</div><div class='del'>-        char           timestr[1024] = {0,};</div><div class='del'>-        struct         timeval tv    = {0,};</div><div class='del'>-        br_private_t  *priv          = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        gettimeofday (&amp;tv, NULL);</div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr), tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-</div><div class='del'>-        if (strcasecmp (sfx, "started") == 0) {</div><div class='del'>-                br_update_scrub_start_time (&amp;priv-&gt;scrub_stat, &amp;tv);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_START,</div><div class='del'>-                        "Scrubbing %s at %s", sfx, timestr);</div><div class='del'>-        } else {</div><div class='del'>-                br_update_scrub_finish_time (&amp;priv-&gt;scrub_stat, timestr, &amp;tv);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_FINISH,</div><div class='del'>-                        "Scrubbing %s at %s", sfx, timestr);</div><div class='del'>-        }</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;tv, NULL);</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+</div><div class='add'>+    if (strcasecmp(sfx, "started") == 0) {</div><div class='add'>+        br_update_scrub_start_time(&amp;priv-&gt;scrub_stat, &amp;tv);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_START,</div><div class='add'>+               "Scrubbing %s at %s", sfx, timestr);</div><div class='add'>+    } else {</div><div class='add'>+        br_update_scrub_finish_time(&amp;priv-&gt;scrub_stat, timestr, &amp;tv);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_FINISH,</div><div class='add'>+               "Scrubbing %s at %s", sfx, timestr);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_fsscanner_log_time (xlator_t *this, br_child_t *child, const char *sfx)</div><div class='add'>+br_fsscanner_log_time(xlator_t *this, br_child_t *child, const char *sfx)</div><div class='ctx'> {</div><div class='del'>-        char           timestr[1024] = {0,};</div><div class='del'>-        struct         timeval tv    = {0,};</div><div class='del'>-</div><div class='del'>-        gettimeofday (&amp;tv, NULL);</div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr), tv.tv_sec, gf_timefmt_FT);</div><div class='del'>-</div><div class='del'>-        if (strcasecmp (sfx, "started") == 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Scrubbing \"%s\" %s at %s",</div><div class='del'>-                              child-&gt;brick_path, sfx, timestr);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Scrubbing \"%s\" %s at %s",</div><div class='del'>-                              child-&gt;brick_path, sfx, timestr);</div><div class='del'>-        }</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    gettimeofday(&amp;tv, NULL);</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), tv.tv_sec, gf_timefmt_FT);</div><div class='add'>+</div><div class='add'>+    if (strcasecmp(sfx, "started") == 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Scrubbing \"%s\" %s at %s",</div><div class='add'>+                     child-&gt;brick_path, sfx, timestr);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Scrubbing \"%s\" %s at %s",</div><div class='add'>+                     child-&gt;brick_path, sfx, timestr);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_child_set_scrub_state (br_child_t *child, gf_boolean_t state)</div><div class='add'>+br_child_set_scrub_state(br_child_t *child, gf_boolean_t state)</div><div class='ctx'> {</div><div class='del'>-        child-&gt;active_scrubbing = state;</div><div class='add'>+    child-&gt;active_scrubbing = state;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_fsscanner_wait_until_kicked (xlator_t *this, br_child_t *child)</div><div class='add'>+br_fsscanner_wait_until_kicked(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        br_private_t      *priv          = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        pthread_cleanup_push (_br_lock_cleaner, &amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    pthread_cleanup_push(_br_lock_cleaner, &amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    {</div><div class='add'>+        while (!scrub_monitor-&gt;kick)</div><div class='add'>+            pthread_cond_wait(&amp;scrub_monitor-&gt;wakecond,</div><div class='add'>+                              &amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+</div><div class='add'>+        /* Child lock is to synchronize with disconnect events */</div><div class='add'>+        pthread_cleanup_push(_br_lock_cleaner, &amp;child-&gt;lock);</div><div class='add'>+        pthread_mutex_lock(&amp;child-&gt;lock);</div><div class='ctx'>         {</div><div class='del'>-                while (!scrub_monitor-&gt;kick)</div><div class='del'>-                        pthread_cond_wait (&amp;scrub_monitor-&gt;wakecond,</div><div class='del'>-                                           &amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-</div><div class='del'>-                /* Child lock is to synchronize with disconnect events */</div><div class='del'>-                pthread_cleanup_push (_br_lock_cleaner, &amp;child-&gt;lock);</div><div class='del'>-                pthread_mutex_lock (&amp;child-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        scrub_monitor-&gt;active_child_count++;</div><div class='del'>-                        br_child_set_scrub_state (child, _gf_true);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;child-&gt;lock);</div><div class='del'>-                pthread_cleanup_pop (0);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        pthread_cleanup_pop (0);</div><div class='add'>+            scrub_monitor-&gt;active_child_count++;</div><div class='add'>+            br_child_set_scrub_state(child, _gf_true);</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;child-&gt;lock);</div><div class='add'>+        pthread_cleanup_pop(0);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    pthread_cleanup_pop(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_scrubber_entry_control (xlator_t *this)</div><div class='add'>+br_scrubber_entry_control(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_private_t      *priv          = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;scrub_monitor-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /* Move the state to BR_SCRUB_STATE_ACTIVE */</div><div class='del'>-                if (scrub_monitor-&gt;state == BR_SCRUB_STATE_PENDING)</div><div class='del'>-                        scrub_monitor-&gt;state = BR_SCRUB_STATE_ACTIVE;</div><div class='del'>-                br_scrubber_log_time (this, "started");</div><div class='del'>-                priv-&gt;scrub_stat.scrub_running = 1;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* Move the state to BR_SCRUB_STATE_ACTIVE */</div><div class='add'>+        if (scrub_monitor-&gt;state == BR_SCRUB_STATE_PENDING)</div><div class='add'>+            scrub_monitor-&gt;state = BR_SCRUB_STATE_ACTIVE;</div><div class='add'>+        br_scrubber_log_time(this, "started");</div><div class='add'>+        priv-&gt;scrub_stat.scrub_running = 1;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;scrub_monitor-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_scrubber_exit_control (xlator_t *this)</div><div class='add'>+br_scrubber_exit_control(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_private_t      *priv          = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;scrub_monitor-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                br_scrubber_log_time (this, "finished");</div><div class='del'>-                priv-&gt;scrub_stat.scrub_running = 0;</div><div class='del'>-</div><div class='del'>-                if (scrub_monitor-&gt;state == BR_SCRUB_STATE_ACTIVE) {</div><div class='del'>-                        (void) br_fsscan_activate (this);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                                "Volume waiting to get rescheduled..");</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        br_scrubber_log_time(this, "finished");</div><div class='add'>+        priv-&gt;scrub_stat.scrub_running = 0;</div><div class='add'>+</div><div class='add'>+        if (scrub_monitor-&gt;state == BR_SCRUB_STATE_ACTIVE) {</div><div class='add'>+            (void)br_fsscan_activate(this);</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+                   "Volume waiting to get rescheduled..");</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;scrub_monitor-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_fsscanner_entry_control (xlator_t *this, br_child_t *child)</div><div class='add'>+br_fsscanner_entry_control(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-                br_fsscanner_log_time (this, child, "started");</div><div class='add'>+    br_fsscanner_log_time(this, child, "started");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_fsscanner_exit_control (xlator_t *this, br_child_t *child)</div><div class='add'>+br_fsscanner_exit_control(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        if (!_br_is_child_connected (child)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Brick [%s] disconnected while scrubbing. Scrubbing "</div><div class='del'>-                        "might be incomplete", child-&gt;brick_path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        br_fsscanner_log_time (this, child, "finished");</div><div class='del'>-</div><div class='del'>-        pthread_cleanup_push (_br_lock_cleaner, &amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    if (!_br_is_child_connected(child)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Brick [%s] disconnected while scrubbing. Scrubbing "</div><div class='add'>+               "might be incomplete",</div><div class='add'>+               child-&gt;brick_path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    br_fsscanner_log_time(this, child, "finished");</div><div class='add'>+</div><div class='add'>+    pthread_cleanup_push(_br_lock_cleaner, &amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    {</div><div class='add'>+        scrub_monitor-&gt;active_child_count--;</div><div class='add'>+        pthread_cleanup_push(_br_lock_cleaner, &amp;child-&gt;lock);</div><div class='add'>+        pthread_mutex_lock(&amp;child-&gt;lock);</div><div class='ctx'>         {</div><div class='del'>-                scrub_monitor-&gt;active_child_count--;</div><div class='del'>-                pthread_cleanup_push (_br_lock_cleaner, &amp;child-&gt;lock);</div><div class='del'>-                pthread_mutex_lock (&amp;child-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        br_child_set_scrub_state (child, _gf_false);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;child-&gt;lock);</div><div class='del'>-                pthread_cleanup_pop (0);</div><div class='del'>-</div><div class='del'>-                if (scrub_monitor-&gt;active_child_count == 0) {</div><div class='del'>-                        /* The last child has finished scrubbing.</div><div class='del'>-                         * Set the kick to false and  wake up other</div><div class='del'>-                         * children who are waiting for the last</div><div class='del'>-                         * child to complete scrubbing.</div><div class='del'>-                         */</div><div class='del'>-                        scrub_monitor-&gt;kick = _gf_false;</div><div class='del'>-                        pthread_cond_broadcast (&amp;scrub_monitor-&gt;wakecond);</div><div class='del'>-</div><div class='del'>-                        /* Signal monitor thread waiting for the all</div><div class='del'>-                         * the children to finish scrubbing.</div><div class='del'>-                         */</div><div class='del'>-                        pthread_cleanup_push (_br_lock_cleaner,</div><div class='del'>-                                              &amp;scrub_monitor-&gt;donelock);</div><div class='del'>-                        pthread_mutex_lock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-                        {</div><div class='del'>-                                scrub_monitor-&gt;done = _gf_true;</div><div class='del'>-                                pthread_cond_signal (&amp;scrub_monitor-&gt;donecond);</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-                        pthread_cleanup_pop (0);</div><div class='del'>-                } else {</div><div class='del'>-                        while (scrub_monitor-&gt;active_child_count)</div><div class='del'>-                                pthread_cond_wait (&amp;scrub_monitor-&gt;wakecond,</div><div class='del'>-                                                   &amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-                }</div><div class='add'>+            br_child_set_scrub_state(child, _gf_false);</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;child-&gt;lock);</div><div class='add'>+        pthread_cleanup_pop(0);</div><div class='add'>+</div><div class='add'>+        if (scrub_monitor-&gt;active_child_count == 0) {</div><div class='add'>+            /* The last child has finished scrubbing.</div><div class='add'>+             * Set the kick to false and  wake up other</div><div class='add'>+             * children who are waiting for the last</div><div class='add'>+             * child to complete scrubbing.</div><div class='add'>+             */</div><div class='add'>+            scrub_monitor-&gt;kick = _gf_false;</div><div class='add'>+            pthread_cond_broadcast(&amp;scrub_monitor-&gt;wakecond);</div><div class='add'>+</div><div class='add'>+            /* Signal monitor thread waiting for the all</div><div class='add'>+             * the children to finish scrubbing.</div><div class='add'>+             */</div><div class='add'>+            pthread_cleanup_push(_br_lock_cleaner, &amp;scrub_monitor-&gt;donelock);</div><div class='add'>+            pthread_mutex_lock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+            {</div><div class='add'>+                scrub_monitor-&gt;done = _gf_true;</div><div class='add'>+                pthread_cond_signal(&amp;scrub_monitor-&gt;donecond);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+            pthread_cleanup_pop(0);</div><div class='add'>+        } else {</div><div class='add'>+            while (scrub_monitor-&gt;active_child_count)</div><div class='add'>+                pthread_cond_wait(&amp;scrub_monitor-&gt;wakecond,</div><div class='add'>+                                  &amp;scrub_monitor-&gt;wakelock);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        pthread_cleanup_pop (0);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    pthread_cleanup_pop(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-br_fsscanner (void *arg)</div><div class='add'>+br_fsscanner(void *arg)</div><div class='ctx'> {</div><div class='del'>-        loc_t               loc     = {0,};</div><div class='del'>-        br_child_t         *child   = NULL;</div><div class='del'>-        xlator_t           *this    = NULL;</div><div class='del'>-        struct br_scanfs   *fsscan  = NULL;</div><div class='del'>-</div><div class='del'>-        child = arg;</div><div class='del'>-        this = child-&gt;this;</div><div class='del'>-        fsscan = &amp;child-&gt;fsscan;</div><div class='del'>-</div><div class='del'>-        THIS = this;</div><div class='del'>-        loc.inode = child-&gt;table-&gt;root;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                br_fsscanner_wait_until_kicked (this, child);</div><div class='del'>-                {</div><div class='del'>-                        /* precursor for scrub */</div><div class='del'>-                        br_fsscanner_entry_control (this, child);</div><div class='del'>-</div><div class='del'>-                        /* scrub */</div><div class='del'>-                        (void) syncop_ftw (child-&gt;xl,</div><div class='del'>-                                           &amp;loc, GF_CLIENT_PID_SCRUB,</div><div class='del'>-                                           child, br_fsscanner_handle_entry);</div><div class='del'>-                        if (!list_empty (&amp;fsscan-&gt;queued))</div><div class='del'>-                                wait_for_scrubbing (this, fsscan);</div><div class='del'>-</div><div class='del'>-                        /* scrub exit criteria */</div><div class='del'>-                        br_fsscanner_exit_control (this, child);</div><div class='del'>-                }</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct br_scanfs *fsscan = NULL;</div><div class='add'>+</div><div class='add'>+    child = arg;</div><div class='add'>+    this = child-&gt;this;</div><div class='add'>+    fsscan = &amp;child-&gt;fsscan;</div><div class='add'>+</div><div class='add'>+    THIS = this;</div><div class='add'>+    loc.inode = child-&gt;table-&gt;root;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        br_fsscanner_wait_until_kicked(this, child);</div><div class='add'>+        {</div><div class='add'>+            /* precursor for scrub */</div><div class='add'>+            br_fsscanner_entry_control(this, child);</div><div class='add'>+</div><div class='add'>+            /* scrub */</div><div class='add'>+            (void)syncop_ftw(child-&gt;xl, &amp;loc, GF_CLIENT_PID_SCRUB, child,</div><div class='add'>+                             br_fsscanner_handle_entry);</div><div class='add'>+            if (!list_empty(&amp;fsscan-&gt;queued))</div><div class='add'>+                wait_for_scrubbing(this, fsscan);</div><div class='add'>+</div><div class='add'>+            /* scrub exit criteria */</div><div class='add'>+            br_fsscanner_exit_control(this, child);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -827,263 +836,280 @@ br_fsscanner (void *arg)</div><div class='ctx'>  * non-pending timer.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-br_kickstart_scanner (struct gf_tw_timer_list *timer,</div><div class='del'>-                      void *data, unsigned long calltime)</div><div class='add'>+br_kickstart_scanner(struct gf_tw_timer_list *timer, void *data,</div><div class='add'>+                     unsigned long calltime)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = data;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        THIS = this = scrub_monitor-&gt;this;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Reset scrub statistics */</div><div class='del'>-        priv-&gt;scrub_stat.scrubbed_files = 0;</div><div class='del'>-        priv-&gt;scrub_stat.unsigned_files = 0;</div><div class='del'>-</div><div class='del'>-        /* Moves state from PENDING to ACTIVE */</div><div class='del'>-        (void) br_scrubber_entry_control (this);</div><div class='del'>-</div><div class='del'>-        /* kickstart scanning.. */</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        {</div><div class='del'>-                scrub_monitor-&gt;kick = _gf_true;</div><div class='del'>-                GF_ASSERT (scrub_monitor-&gt;active_child_count == 0);</div><div class='del'>-                pthread_cond_broadcast (&amp;scrub_monitor-&gt;wakecond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = data;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    THIS = this = scrub_monitor-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Reset scrub statistics */</div><div class='add'>+    priv-&gt;scrub_stat.scrubbed_files = 0;</div><div class='add'>+    priv-&gt;scrub_stat.unsigned_files = 0;</div><div class='add'>+</div><div class='add'>+    /* Moves state from PENDING to ACTIVE */</div><div class='add'>+    (void)br_scrubber_entry_control(this);</div><div class='add'>+</div><div class='add'>+    /* kickstart scanning.. */</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    {</div><div class='add'>+        scrub_monitor-&gt;kick = _gf_true;</div><div class='add'>+        GF_ASSERT(scrub_monitor-&gt;active_child_count == 0);</div><div class='add'>+        pthread_cond_broadcast(&amp;scrub_monitor-&gt;wakecond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static uint32_t</div><div class='del'>-br_fsscan_calculate_delta (uint32_t times)</div><div class='add'>+br_fsscan_calculate_delta(uint32_t times)</div><div class='ctx'> {</div><div class='del'>-        return times;</div><div class='add'>+    return times;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define BR_SCRUB_ONDEMAND   (1)</div><div class='del'>-#define BR_SCRUB_MINUTE     (60)</div><div class='del'>-#define BR_SCRUB_HOURLY     (60 * 60)</div><div class='del'>-#define BR_SCRUB_DAILY      (1 * 24 * 60 * 60)</div><div class='del'>-#define BR_SCRUB_WEEKLY     (7 * 24 * 60 * 60)</div><div class='del'>-#define BR_SCRUB_BIWEEKLY   (14 * 24 * 60 * 60)</div><div class='del'>-#define BR_SCRUB_MONTHLY    (30 * 24 * 60 * 60)</div><div class='add'>+#define BR_SCRUB_ONDEMAND (1)</div><div class='add'>+#define BR_SCRUB_MINUTE (60)</div><div class='add'>+#define BR_SCRUB_HOURLY (60 * 60)</div><div class='add'>+#define BR_SCRUB_DAILY (1 * 24 * 60 * 60)</div><div class='add'>+#define BR_SCRUB_WEEKLY (7 * 24 * 60 * 60)</div><div class='add'>+#define BR_SCRUB_BIWEEKLY (14 * 24 * 60 * 60)</div><div class='add'>+#define BR_SCRUB_MONTHLY (30 * 24 * 60 * 60)</div><div class='ctx'> </div><div class='ctx'> static unsigned int</div><div class='del'>-br_fsscan_calculate_timeout (scrub_freq_t freq)</div><div class='add'>+br_fsscan_calculate_timeout(scrub_freq_t freq)</div><div class='ctx'> {</div><div class='del'>-        uint32_t timo = 0;</div><div class='add'>+    uint32_t timo = 0;</div><div class='ctx'> </div><div class='del'>-        switch (freq) {</div><div class='add'>+    switch (freq) {</div><div class='ctx'>         case BR_FSSCRUB_FREQ_MINUTE:</div><div class='del'>-                timo = br_fsscan_calculate_delta (BR_SCRUB_MINUTE);</div><div class='del'>-                break;</div><div class='add'>+            timo = br_fsscan_calculate_delta(BR_SCRUB_MINUTE);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_FSSCRUB_FREQ_HOURLY:</div><div class='del'>-                timo = br_fsscan_calculate_delta (BR_SCRUB_HOURLY);</div><div class='del'>-                break;</div><div class='add'>+            timo = br_fsscan_calculate_delta(BR_SCRUB_HOURLY);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_FSSCRUB_FREQ_DAILY:</div><div class='del'>-                timo = br_fsscan_calculate_delta (BR_SCRUB_DAILY);</div><div class='del'>-                break;</div><div class='add'>+            timo = br_fsscan_calculate_delta(BR_SCRUB_DAILY);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_FSSCRUB_FREQ_WEEKLY:</div><div class='del'>-                timo = br_fsscan_calculate_delta (BR_SCRUB_WEEKLY);</div><div class='del'>-                break;</div><div class='add'>+            timo = br_fsscan_calculate_delta(BR_SCRUB_WEEKLY);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_FSSCRUB_FREQ_BIWEEKLY:</div><div class='del'>-                timo = br_fsscan_calculate_delta (BR_SCRUB_BIWEEKLY);</div><div class='del'>-                break;</div><div class='add'>+            timo = br_fsscan_calculate_delta(BR_SCRUB_BIWEEKLY);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_FSSCRUB_FREQ_MONTHLY:</div><div class='del'>-                timo = br_fsscan_calculate_delta (BR_SCRUB_MONTHLY);</div><div class='del'>-                break;</div><div class='add'>+            timo = br_fsscan_calculate_delta(BR_SCRUB_MONTHLY);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                timo = 0;</div><div class='del'>-        }</div><div class='add'>+            timo = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return timo;</div><div class='add'>+    return timo;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_fsscan_schedule (xlator_t *this)</div><div class='add'>+br_fsscan_schedule(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        uint32_t timo = 0;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct timeval tv = {0,};</div><div class='del'>-        char timestr[1024] = {0,};</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        struct gf_tw_timer_list *timer = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        (void) gettimeofday (&amp;tv, NULL);</div><div class='del'>-        scrub_monitor-&gt;boot = tv.tv_sec;</div><div class='del'>-</div><div class='del'>-        timo = br_fsscan_calculate_timeout (fsscrub-&gt;frequency);</div><div class='del'>-        if (timo == 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_ZERO_TIMEOUT_BUG,</div><div class='del'>-                        "BUG: Zero schedule timeout");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        scrub_monitor-&gt;timer = GF_CALLOC (1, sizeof (*scrub_monitor-&gt;timer),</div><div class='del'>-                                   gf_br_stub_mt_br_scanner_freq_t);</div><div class='del'>-        if (!scrub_monitor-&gt;timer)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        timer = scrub_monitor-&gt;timer;</div><div class='del'>-        INIT_LIST_HEAD (&amp;timer-&gt;entry);</div><div class='del'>-</div><div class='del'>-        timer-&gt;data = scrub_monitor;</div><div class='del'>-        timer-&gt;expires = timo;</div><div class='del'>-        timer-&gt;function = br_kickstart_scanner;</div><div class='del'>-</div><div class='del'>-        gf_tw_add_timer (priv-&gt;timer_wheel, timer);</div><div class='del'>-        _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='del'>-</div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr),</div><div class='del'>-                     (scrub_monitor-&gt;boot + timo), gf_timefmt_FT);</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO, "Scrubbing is "</div><div class='del'>-                "scheduled to run at %s", timestr);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    uint32_t timo = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    struct gf_tw_timer_list *timer = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    (void)gettimeofday(&amp;tv, NULL);</div><div class='add'>+    scrub_monitor-&gt;boot = tv.tv_sec;</div><div class='add'>+</div><div class='add'>+    timo = br_fsscan_calculate_timeout(fsscrub-&gt;frequency);</div><div class='add'>+    if (timo == 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_ZERO_TIMEOUT_BUG,</div><div class='add'>+               "BUG: Zero schedule timeout");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    scrub_monitor-&gt;timer = GF_CALLOC(1, sizeof(*scrub_monitor-&gt;timer),</div><div class='add'>+                                     gf_br_stub_mt_br_scanner_freq_t);</div><div class='add'>+    if (!scrub_monitor-&gt;timer)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    timer = scrub_monitor-&gt;timer;</div><div class='add'>+    INIT_LIST_HEAD(&amp;timer-&gt;entry);</div><div class='add'>+</div><div class='add'>+    timer-&gt;data = scrub_monitor;</div><div class='add'>+    timer-&gt;expires = timo;</div><div class='add'>+    timer-&gt;function = br_kickstart_scanner;</div><div class='add'>+</div><div class='add'>+    gf_tw_add_timer(priv-&gt;timer_wheel, timer);</div><div class='add'>+    _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='add'>+</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), (scrub_monitor-&gt;boot + timo),</div><div class='add'>+                gf_timefmt_FT);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+           "Scrubbing is "</div><div class='add'>+           "scheduled to run at %s",</div><div class='add'>+           timestr);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_fsscan_activate (xlator_t *this)</div><div class='add'>+br_fsscan_activate(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        uint32_t            timo    = 0;</div><div class='del'>-        char timestr[1024]          = {0,};</div><div class='del'>-        struct timeval      now     = {0,};</div><div class='del'>-        br_private_t       *priv    = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        struct br_monitor  *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        (void) gettimeofday (&amp;now, NULL);</div><div class='del'>-        timo = br_fsscan_calculate_timeout (fsscrub-&gt;frequency);</div><div class='del'>-        if (timo == 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_ZERO_TIMEOUT_BUG,</div><div class='del'>-                        "BUG: Zero schedule timeout");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    uint32_t timo = 0;</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval now = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    (void)gettimeofday(&amp;now, NULL);</div><div class='add'>+    timo = br_fsscan_calculate_timeout(fsscrub-&gt;frequency);</div><div class='add'>+    if (timo == 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_ZERO_TIMEOUT_BUG,</div><div class='add'>+               "BUG: Zero schedule timeout");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        {</div><div class='del'>-                scrub_monitor-&gt;done = _gf_false;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    {</div><div class='add'>+        scrub_monitor-&gt;done = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;donelock);</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr),</div><div class='del'>-                     (now.tv_sec + timo), gf_timefmt_FT);</div><div class='del'>-        (void) gf_tw_mod_timer (priv-&gt;timer_wheel, scrub_monitor-&gt;timer, timo);</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), (now.tv_sec + timo), gf_timefmt_FT);</div><div class='add'>+    (void)gf_tw_mod_timer(priv-&gt;timer_wheel, scrub_monitor-&gt;timer, timo);</div><div class='ctx'> </div><div class='del'>-        _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO, "Scrubbing is "</div><div class='del'>-                "rescheduled to run at %s", timestr);</div><div class='add'>+    _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+           "Scrubbing is "</div><div class='add'>+           "rescheduled to run at %s",</div><div class='add'>+           timestr);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_fsscan_reschedule (xlator_t *this)</div><div class='add'>+br_fsscan_reschedule(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t             ret     = 0;</div><div class='del'>-        uint32_t            timo    = 0;</div><div class='del'>-        char timestr[1024]          = {0,};</div><div class='del'>-        struct timeval      now     = {0,};</div><div class='del'>-        br_private_t       *priv    = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        struct br_monitor  *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        if (!fsscrub-&gt;frequency_reconf)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        (void) gettimeofday (&amp;now, NULL);</div><div class='del'>-        timo = br_fsscan_calculate_timeout (fsscrub-&gt;frequency);</div><div class='del'>-        if (timo == 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_ZERO_TIMEOUT_BUG,</div><div class='del'>-                        "BUG: Zero schedule timeout");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint32_t timo = 0;</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval now = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    if (!fsscrub-&gt;frequency_reconf)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr),</div><div class='del'>-                     (now.tv_sec + timo), gf_timefmt_FT);</div><div class='add'>+    (void)gettimeofday(&amp;now, NULL);</div><div class='add'>+    timo = br_fsscan_calculate_timeout(fsscrub-&gt;frequency);</div><div class='add'>+    if (timo == 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_ZERO_TIMEOUT_BUG,</div><div class='add'>+               "BUG: Zero schedule timeout");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        {</div><div class='del'>-                scrub_monitor-&gt;done = _gf_false;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-</div><div class='del'>-        ret = gf_tw_mod_timer_pending (priv-&gt;timer_wheel, scrub_monitor-&gt;timer, timo);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Scrubber is currently running and would be "</div><div class='del'>-                        "rescheduled after completion");</div><div class='del'>-        else {</div><div class='del'>-                _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Scrubbing rescheduled to run at %s", timestr);</div><div class='del'>-        }</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), (now.tv_sec + timo), gf_timefmt_FT);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    {</div><div class='add'>+        scrub_monitor-&gt;done = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+</div><div class='add'>+    ret = gf_tw_mod_timer_pending(priv-&gt;timer_wheel, scrub_monitor-&gt;timer,</div><div class='add'>+                                  timo);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Scrubber is currently running and would be "</div><div class='add'>+               "rescheduled after completion");</div><div class='add'>+    else {</div><div class='add'>+        _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Scrubbing rescheduled to run at %s", timestr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_fsscan_ondemand (xlator_t *this)</div><div class='add'>+br_fsscan_ondemand(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t             ret     = 0;</div><div class='del'>-        uint32_t            timo    = 0;</div><div class='del'>-        char timestr[1024]          = {0,};</div><div class='del'>-        struct timeval      now     = {0,};</div><div class='del'>-        br_private_t       *priv    = NULL;</div><div class='del'>-        struct br_monitor  *scrub_monitor = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint32_t timo = 0;</div><div class='add'>+    char timestr[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval now = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        (void) gettimeofday (&amp;now, NULL);</div><div class='add'>+    (void)gettimeofday(&amp;now, NULL);</div><div class='ctx'> </div><div class='del'>-        timo = BR_SCRUB_ONDEMAND;</div><div class='add'>+    timo = BR_SCRUB_ONDEMAND;</div><div class='ctx'> </div><div class='del'>-        gf_time_fmt (timestr, sizeof (timestr),</div><div class='del'>-                     (now.tv_sec + timo), gf_timefmt_FT);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        {</div><div class='del'>-                scrub_monitor-&gt;done = _gf_false;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-</div><div class='del'>-        ret = gf_tw_mod_timer_pending (priv-&gt;timer_wheel, scrub_monitor-&gt;timer,</div><div class='del'>-                                       timo);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Scrubber is currently running and would be "</div><div class='del'>-                        "rescheduled after completion");</div><div class='del'>-        else {</div><div class='del'>-                _br_monitor_set_scrub_state (scrub_monitor,</div><div class='del'>-                                             BR_SCRUB_STATE_PENDING);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                        "Ondemand Scrubbing scheduled to run at %s", timestr);</div><div class='del'>-        }</div><div class='add'>+    gf_time_fmt(timestr, sizeof(timestr), (now.tv_sec + timo), gf_timefmt_FT);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    {</div><div class='add'>+        scrub_monitor-&gt;done = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+</div><div class='add'>+    ret = gf_tw_mod_timer_pending(priv-&gt;timer_wheel, scrub_monitor-&gt;timer,</div><div class='add'>+                                  timo);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Scrubber is currently running and would be "</div><div class='add'>+               "rescheduled after completion");</div><div class='add'>+    else {</div><div class='add'>+        _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_PENDING);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+               "Ondemand Scrubbing scheduled to run at %s", timestr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define BR_SCRUB_THREAD_SCALE_LAZY       0</div><div class='del'>-#define BR_SCRUB_THREAD_SCALE_NORMAL     0.4</div><div class='add'>+#define BR_SCRUB_THREAD_SCALE_LAZY 0</div><div class='add'>+#define BR_SCRUB_THREAD_SCALE_NORMAL 0.4</div><div class='ctx'> #define BR_SCRUB_THREAD_SCALE_AGGRESSIVE 1.0</div><div class='ctx'> </div><div class='ctx'> #ifndef M_E</div><div class='hunk'>@@ -1096,111 +1122,105 @@ br_fsscan_ondemand (xlator_t *this)</div><div class='ctx'>  * the scale based on the number of processor cores too.</div><div class='ctx'>  */</div><div class='ctx'> static unsigned int</div><div class='del'>-br_scrubber_calc_scale (xlator_t *this,</div><div class='del'>-                        br_private_t *priv, scrub_throttle_t throttle)</div><div class='add'>+br_scrubber_calc_scale(xlator_t *this, br_private_t *priv,</div><div class='add'>+                       scrub_throttle_t throttle)</div><div class='ctx'> {</div><div class='del'>-        unsigned int scale = 0;</div><div class='add'>+    unsigned int scale = 0;</div><div class='ctx'> </div><div class='del'>-        switch (throttle) {</div><div class='add'>+    switch (throttle) {</div><div class='ctx'>         case BR_SCRUB_THROTTLE_VOID:</div><div class='ctx'>         case BR_SCRUB_THROTTLE_STALLED:</div><div class='del'>-                scale = 0;</div><div class='del'>-                break;</div><div class='add'>+            scale = 0;</div><div class='add'>+            break;</div><div class='ctx'>         case BR_SCRUB_THROTTLE_LAZY:</div><div class='del'>-                scale = priv-&gt;child_count *</div><div class='del'>-                              pow (M_E, BR_SCRUB_THREAD_SCALE_LAZY);</div><div class='del'>-                break;</div><div class='add'>+            scale = priv-&gt;child_count * pow(M_E, BR_SCRUB_THREAD_SCALE_LAZY);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_SCRUB_THROTTLE_NORMAL:</div><div class='del'>-                scale = priv-&gt;child_count *</div><div class='del'>-                              pow (M_E, BR_SCRUB_THREAD_SCALE_NORMAL);</div><div class='del'>-                break;</div><div class='add'>+            scale = priv-&gt;child_count * pow(M_E, BR_SCRUB_THREAD_SCALE_NORMAL);</div><div class='add'>+            break;</div><div class='ctx'>         case BR_SCRUB_THROTTLE_AGGRESSIVE:</div><div class='del'>-                scale = priv-&gt;child_count *</div><div class='del'>-                              pow (M_E, BR_SCRUB_THREAD_SCALE_AGGRESSIVE);</div><div class='del'>-                break;</div><div class='add'>+            scale = priv-&gt;child_count *</div><div class='add'>+                    pow(M_E, BR_SCRUB_THREAD_SCALE_AGGRESSIVE);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_UNKNOWN_THROTTLE,</div><div class='del'>-                        "Unknown throttle %d", throttle);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return scale;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_UNKNOWN_THROTTLE,</div><div class='add'>+                   "Unknown throttle %d", throttle);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return scale;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static br_child_t *</div><div class='del'>-_br_scrubber_get_next_child (struct br_scrubber *fsscrub)</div><div class='add'>+_br_scrubber_get_next_child(struct br_scrubber *fsscrub)</div><div class='ctx'> {</div><div class='del'>-        br_child_t *child = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='ctx'> </div><div class='del'>-        child = list_first_entry (&amp;fsscrub-&gt;scrublist, br_child_t, list);</div><div class='del'>-        list_rotate_left (&amp;fsscrub-&gt;scrublist);</div><div class='add'>+    child = list_first_entry(&amp;fsscrub-&gt;scrublist, br_child_t, list);</div><div class='add'>+    list_rotate_left(&amp;fsscrub-&gt;scrublist);</div><div class='ctx'> </div><div class='del'>-        return child;</div><div class='add'>+    return child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_scrubber_get_entry (br_child_t *child, struct br_fsscan_entry **fsentry)</div><div class='add'>+_br_scrubber_get_entry(br_child_t *child, struct br_fsscan_entry **fsentry)</div><div class='ctx'> {</div><div class='del'>-        struct br_scanfs *fsscan = &amp;child-&gt;fsscan;</div><div class='add'>+    struct br_scanfs *fsscan = &amp;child-&gt;fsscan;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;fsscan-&gt;ready))</div><div class='del'>-                return;</div><div class='del'>-        *fsentry = list_first_entry</div><div class='del'>-                            (&amp;fsscan-&gt;ready, struct br_fsscan_entry, list);</div><div class='del'>-        list_del_init (&amp;(*fsentry)-&gt;list);</div><div class='add'>+    if (list_empty(&amp;fsscan-&gt;ready))</div><div class='add'>+        return;</div><div class='add'>+    *fsentry = list_first_entry(&amp;fsscan-&gt;ready, struct br_fsscan_entry, list);</div><div class='add'>+    list_del_init(&amp;(*fsentry)-&gt;list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_scrubber_find_scrubbable_entry (struct br_scrubber *fsscrub,</div><div class='del'>-                                     struct br_fsscan_entry **fsentry)</div><div class='add'>+_br_scrubber_find_scrubbable_entry(struct br_scrubber *fsscrub,</div><div class='add'>+                                   struct br_fsscan_entry **fsentry)</div><div class='ctx'> {</div><div class='del'>-        br_child_t *child = NULL;</div><div class='del'>-        br_child_t *firstchild = NULL;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                while (list_empty (&amp;fsscrub-&gt;scrublist))</div><div class='del'>-                        pthread_cond_wait (&amp;fsscrub-&gt;cond, &amp;fsscrub-&gt;mutex);</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    br_child_t *firstchild = NULL;</div><div class='ctx'> </div><div class='del'>-                firstchild = NULL;</div><div class='del'>-                for (child = _br_scrubber_get_next_child (fsscrub);</div><div class='del'>-                     child != firstchild;</div><div class='del'>-                     child = _br_scrubber_get_next_child (fsscrub)) {</div><div class='add'>+    while (1) {</div><div class='add'>+        while (list_empty(&amp;fsscrub-&gt;scrublist))</div><div class='add'>+            pthread_cond_wait(&amp;fsscrub-&gt;cond, &amp;fsscrub-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                        if (!firstchild)</div><div class='del'>-                                firstchild = child;</div><div class='add'>+        firstchild = NULL;</div><div class='add'>+        for (child = _br_scrubber_get_next_child(fsscrub); child != firstchild;</div><div class='add'>+             child = _br_scrubber_get_next_child(fsscrub)) {</div><div class='add'>+            if (!firstchild)</div><div class='add'>+                firstchild = child;</div><div class='ctx'> </div><div class='del'>-                        _br_scrubber_get_entry (child, fsentry);</div><div class='del'>-                        if (*fsentry)</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+            _br_scrubber_get_entry(child, fsentry);</div><div class='add'>+            if (*fsentry)</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (*fsentry)</div><div class='del'>-                        break;</div><div class='add'>+        if (*fsentry)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                /* nothing to work on.. wait till available */</div><div class='del'>-                pthread_cond_wait (&amp;fsscrub-&gt;cond, &amp;fsscrub-&gt;mutex);</div><div class='del'>-        }</div><div class='add'>+        /* nothing to work on.. wait till available */</div><div class='add'>+        pthread_cond_wait(&amp;fsscrub-&gt;cond, &amp;fsscrub-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_scrubber_pick_entry (struct br_scrubber *fsscrub,</div><div class='del'>-                        struct br_fsscan_entry **fsentry)</div><div class='add'>+br_scrubber_pick_entry(struct br_scrubber *fsscrub,</div><div class='add'>+                       struct br_fsscan_entry **fsentry)</div><div class='ctx'> {</div><div class='del'>-        pthread_cleanup_push (_br_lock_cleaner, &amp;fsscrub-&gt;mutex);</div><div class='add'>+    pthread_cleanup_push(_br_lock_cleaner, &amp;fsscrub-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;fsscrub-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                *fsentry = NULL;</div><div class='del'>-                _br_scrubber_find_scrubbable_entry (fsscrub, fsentry);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fsscrub-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;fsscrub-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        *fsentry = NULL;</div><div class='add'>+        _br_scrubber_find_scrubbable_entry(fsscrub, fsentry);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fsscrub-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        pthread_cleanup_pop (0);</div><div class='add'>+    pthread_cleanup_pop(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct br_scrub_entry {</div><div class='del'>-        gf_boolean_t scrubbed;</div><div class='del'>-        struct br_fsscan_entry *fsentry;</div><div class='add'>+    gf_boolean_t scrubbed;</div><div class='add'>+    struct br_fsscan_entry *fsentry;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1210,686 +1230,698 @@ struct br_scrub_entry {</div><div class='ctx'>  * in the -&gt;pending queue or when an object is undergoing scrubbing.</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-br_scrubber_entry_handle (void *arg)</div><div class='add'>+br_scrubber_entry_handle(void *arg)</div><div class='ctx'> {</div><div class='del'>-        struct br_scanfs       *fsscan  = NULL;</div><div class='del'>-        struct br_scrub_entry  *sentry  = NULL;</div><div class='del'>-        struct br_fsscan_entry *fsentry = NULL;</div><div class='add'>+    struct br_scanfs *fsscan = NULL;</div><div class='add'>+    struct br_scrub_entry *sentry = NULL;</div><div class='add'>+    struct br_fsscan_entry *fsentry = NULL;</div><div class='ctx'> </div><div class='del'>-        sentry = arg;</div><div class='add'>+    sentry = arg;</div><div class='ctx'> </div><div class='del'>-        fsentry = sentry-&gt;fsentry;</div><div class='del'>-        fsscan  = fsentry-&gt;fsscan;</div><div class='add'>+    fsentry = sentry-&gt;fsentry;</div><div class='add'>+    fsscan = fsentry-&gt;fsscan;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fsscan-&gt;entrylock);</div><div class='del'>-        {</div><div class='del'>-                if (sentry-&gt;scrubbed) {</div><div class='del'>-                        _br_fsscan_dec_entry_count (fsscan);</div><div class='del'>-</div><div class='del'>-                        /* cleanup -&gt;entry */</div><div class='del'>-                        fsentry-&gt;data   = NULL;</div><div class='del'>-                        fsentry-&gt;fsscan = NULL;</div><div class='del'>-                        loc_wipe (&amp;fsentry-&gt;parent);</div><div class='del'>-                        gf_dirent_entry_free (fsentry-&gt;entry);</div><div class='del'>-</div><div class='del'>-                        GF_FREE (sentry-&gt;fsentry);</div><div class='del'>-                } else {</div><div class='del'>-                        /* (re)queue the entry again for scrub */</div><div class='del'>-                        _br_fsscan_collect_entry (fsscan, sentry-&gt;fsentry);</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;fsscan-&gt;entrylock);</div><div class='add'>+    {</div><div class='add'>+        if (sentry-&gt;scrubbed) {</div><div class='add'>+            _br_fsscan_dec_entry_count(fsscan);</div><div class='add'>+</div><div class='add'>+            /* cleanup -&gt;entry */</div><div class='add'>+            fsentry-&gt;data = NULL;</div><div class='add'>+            fsentry-&gt;fsscan = NULL;</div><div class='add'>+            loc_wipe(&amp;fsentry-&gt;parent);</div><div class='add'>+            gf_dirent_entry_free(fsentry-&gt;entry);</div><div class='add'>+</div><div class='add'>+            GF_FREE(sentry-&gt;fsentry);</div><div class='add'>+        } else {</div><div class='add'>+            /* (re)queue the entry again for scrub */</div><div class='add'>+            _br_fsscan_collect_entry(fsscan, sentry-&gt;fsentry);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;fsscan-&gt;entrylock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fsscan-&gt;entrylock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_scrubber_scrub_entry (xlator_t *this, struct br_fsscan_entry *fsentry)</div><div class='add'>+br_scrubber_scrub_entry(xlator_t *this, struct br_fsscan_entry *fsentry)</div><div class='ctx'> {</div><div class='del'>-        struct br_scrub_entry sentry = {0, };</div><div class='del'>-</div><div class='del'>-        sentry.scrubbed = 0;</div><div class='del'>-        sentry.fsentry = fsentry;</div><div class='del'>-</div><div class='del'>-        pthread_cleanup_push (br_scrubber_entry_handle, &amp;sentry);</div><div class='del'>-        {</div><div class='del'>-                (void) br_scrubber_scrub_begin (this, fsentry);</div><div class='del'>-                sentry.scrubbed = 1;</div><div class='del'>-        }</div><div class='del'>-        pthread_cleanup_pop (1);</div><div class='add'>+    struct br_scrub_entry sentry = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    sentry.scrubbed = 0;</div><div class='add'>+    sentry.fsentry = fsentry;</div><div class='add'>+</div><div class='add'>+    pthread_cleanup_push(br_scrubber_entry_handle, &amp;sentry);</div><div class='add'>+    {</div><div class='add'>+        (void)br_scrubber_scrub_begin(this, fsentry);</div><div class='add'>+        sentry.scrubbed = 1;</div><div class='add'>+    }</div><div class='add'>+    pthread_cleanup_pop(1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void *br_scrubber_proc (void *arg)</div><div class='add'>+void *</div><div class='add'>+br_scrubber_proc(void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        struct br_fsscan_entry *fsentry = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    struct br_fsscan_entry *fsentry = NULL;</div><div class='ctx'> </div><div class='del'>-        fsscrub = arg;</div><div class='del'>-        THIS = this = fsscrub-&gt;this;</div><div class='add'>+    fsscrub = arg;</div><div class='add'>+    THIS = this = fsscrub-&gt;this;</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                br_scrubber_pick_entry (fsscrub, &amp;fsentry);</div><div class='del'>-                br_scrubber_scrub_entry (this, fsentry);</div><div class='del'>-                sleep (1);</div><div class='del'>-        }</div><div class='add'>+    while (1) {</div><div class='add'>+        br_scrubber_pick_entry(fsscrub, &amp;fsentry);</div><div class='add'>+        br_scrubber_scrub_entry(this, fsentry);</div><div class='add'>+        sleep(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_scale_up (xlator_t *this,</div><div class='del'>-                      struct br_scrubber *fsscrub,</div><div class='del'>-                      unsigned int v1, unsigned int v2)</div><div class='add'>+br_scrubber_scale_up(xlator_t *this, struct br_scrubber *fsscrub,</div><div class='add'>+                     unsigned int v1, unsigned int v2)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        int diff = 0;</div><div class='del'>-        struct br_scrubbers *scrub = NULL;</div><div class='del'>-</div><div class='del'>-        diff = (int)(v2 - v1);</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCALING_UP_SCRUBBER,</div><div class='del'>-                "Scaling up scrubbers [%d =&gt; %d]", v1, v2);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; diff; i++) {</div><div class='del'>-                scrub = GF_CALLOC (diff, sizeof (*scrub),</div><div class='del'>-                                   gf_br_mt_br_scrubber_t);</div><div class='del'>-                if (!scrub)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;scrub-&gt;list);</div><div class='del'>-                ret = gf_thread_create (&amp;scrub-&gt;scrubthread,</div><div class='del'>-                                        NULL, br_scrubber_proc, fsscrub,</div><div class='del'>-                                        "brsproc");</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                fsscrub-&gt;nr_scrubbers++;</div><div class='del'>-                list_add_tail (&amp;scrub-&gt;list, &amp;fsscrub-&gt;scrubbers);</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int diff = 0;</div><div class='add'>+    struct br_scrubbers *scrub = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((i != diff) &amp;&amp; !scrub)</div><div class='del'>-                goto error_return;</div><div class='add'>+    diff = (int)(v2 - v1);</div><div class='ctx'> </div><div class='del'>-        if (i != diff) /* degraded scaling.. */</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SCALE_UP_FAILED,</div><div class='del'>-                        "Could not fully scale up to %d scrubber(s). Spawned "</div><div class='del'>-                        "%d/%d [total scrubber(s): %d]", v2, i, diff, (v1 + i));</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCALING_UP_SCRUBBER,</div><div class='add'>+           "Scaling up scrubbers [%d =&gt; %d]", v1, v2);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    for (i = 0; i &lt; diff; i++) {</div><div class='add'>+        scrub = GF_CALLOC(diff, sizeof(*scrub), gf_br_mt_br_scrubber_t);</div><div class='add'>+        if (!scrub)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+        INIT_LIST_HEAD(&amp;scrub-&gt;list);</div><div class='add'>+        ret = gf_thread_create(&amp;scrub-&gt;scrubthread, NULL, br_scrubber_proc,</div><div class='add'>+                               fsscrub, "brsproc");</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        fsscrub-&gt;nr_scrubbers++;</div><div class='add'>+        list_add_tail(&amp;scrub-&gt;list, &amp;fsscrub-&gt;scrubbers);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((i != diff) &amp;&amp; !scrub)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    if (i != diff) /* degraded scaling.. */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SCALE_UP_FAILED,</div><div class='add'>+               "Could not fully scale up to %d scrubber(s). Spawned "</div><div class='add'>+               "%d/%d [total scrubber(s): %d]",</div><div class='add'>+               v2, i, diff, (v1 + i));</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_scale_down (xlator_t *this,</div><div class='del'>-                        struct br_scrubber *fsscrub,</div><div class='del'>-                        unsigned int v1, unsigned int v2)</div><div class='add'>+br_scrubber_scale_down(xlator_t *this, struct br_scrubber *fsscrub,</div><div class='add'>+                       unsigned int v1, unsigned int v2)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int diff = 0;</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        struct br_scrubbers *scrub = NULL;</div><div class='del'>-</div><div class='del'>-        diff = (int)(v1 - v2);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int diff = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    struct br_scrubbers *scrub = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCALE_DOWN_SCRUBBER,</div><div class='del'>-                "Scaling down scrubbers [%d =&gt; %d]", v1, v2);</div><div class='add'>+    diff = (int)(v1 - v2);</div><div class='ctx'> </div><div class='del'>-        for (i = 0 ; i &lt; diff; i++) {</div><div class='del'>-                scrub = list_first_entry</div><div class='del'>-                            (&amp;fsscrub-&gt;scrubbers, struct br_scrubbers, list);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCALE_DOWN_SCRUBBER,</div><div class='add'>+           "Scaling down scrubbers [%d =&gt; %d]", v1, v2);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;scrub-&gt;list);</div><div class='del'>-                ret = gf_thread_cleanup_xint (scrub-&gt;scrubthread);</div><div class='del'>-                if (ret)</div><div class='del'>-                        break;</div><div class='del'>-                GF_FREE (scrub);</div><div class='add'>+    for (i = 0; i &lt; diff; i++) {</div><div class='add'>+        scrub = list_first_entry(&amp;fsscrub-&gt;scrubbers, struct br_scrubbers,</div><div class='add'>+                                 list);</div><div class='ctx'> </div><div class='del'>-                fsscrub-&gt;nr_scrubbers--;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRB_MSG_SCALE_DOWN_FAILED, "Could not fully scale down "</div><div class='del'>-                        "to %d scrubber(s). Terminated %d/%d [total "</div><div class='del'>-                        "scrubber(s): %d]", v1, i, diff, (v2 - i));</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+        list_del_init(&amp;scrub-&gt;list);</div><div class='add'>+        ret = gf_thread_cleanup_xint(scrub-&gt;scrubthread);</div><div class='add'>+        if (ret)</div><div class='add'>+            break;</div><div class='add'>+        GF_FREE(scrub);</div><div class='add'>+</div><div class='add'>+        fsscrub-&gt;nr_scrubbers--;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SCALE_DOWN_FAILED,</div><div class='add'>+               "Could not fully scale down "</div><div class='add'>+               "to %d scrubber(s). Terminated %d/%d [total "</div><div class='add'>+               "scrubber(s): %d]",</div><div class='add'>+               v1, i, diff, (v2 - i));</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_configure (xlator_t *this, br_private_t *priv,</div><div class='del'>-                       struct br_scrubber *fsscrub, scrub_throttle_t nthrottle)</div><div class='add'>+br_scrubber_configure(xlator_t *this, br_private_t *priv,</div><div class='add'>+                      struct br_scrubber *fsscrub, scrub_throttle_t nthrottle)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        unsigned int v1 = 0;</div><div class='del'>-        unsigned int v2 = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    unsigned int v1 = 0;</div><div class='add'>+    unsigned int v2 = 0;</div><div class='ctx'> </div><div class='del'>-        v1 = fsscrub-&gt;nr_scrubbers;</div><div class='del'>-        v2 = br_scrubber_calc_scale (this, priv, nthrottle);</div><div class='add'>+    v1 = fsscrub-&gt;nr_scrubbers;</div><div class='add'>+    v2 = br_scrubber_calc_scale(this, priv, nthrottle);</div><div class='ctx'> </div><div class='del'>-        if (v1 == v2)</div><div class='del'>-                return 0;</div><div class='add'>+    if (v1 == v2)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if (v1 &gt; v2)</div><div class='del'>-                ret = br_scrubber_scale_down (this, fsscrub, v1, v2);</div><div class='del'>-        else</div><div class='del'>-                ret = br_scrubber_scale_up (this, fsscrub, v1, v2);</div><div class='add'>+    if (v1 &gt; v2)</div><div class='add'>+        ret = br_scrubber_scale_down(this, fsscrub, v1, v2);</div><div class='add'>+    else</div><div class='add'>+        ret = br_scrubber_scale_up(this, fsscrub, v1, v2);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_fetch_option (xlator_t *this,</div><div class='del'>-                          char *opt, dict_t *options, char **value)</div><div class='add'>+br_scrubber_fetch_option(xlator_t *this, char *opt, dict_t *options,</div><div class='add'>+                         char **value)</div><div class='ctx'> {</div><div class='del'>-        if (options)</div><div class='del'>-                GF_OPTION_RECONF (opt, *value, options, str, error_return);</div><div class='del'>-        else</div><div class='del'>-                GF_OPTION_INIT (opt, *value, str, error_return);</div><div class='add'>+    if (options)</div><div class='add'>+        GF_OPTION_RECONF(opt, *value, options, str, error_return);</div><div class='add'>+    else</div><div class='add'>+        GF_OPTION_INIT(opt, *value, str, error_return);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* internal "throttle" override */</div><div class='del'>-#define BR_SCRUB_STALLED  "STALLED"</div><div class='add'>+#define BR_SCRUB_STALLED "STALLED"</div><div class='ctx'> </div><div class='ctx'> /* TODO: token buket spec */</div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_handle_throttle (xlator_t *this, br_private_t *priv,</div><div class='del'>-                             dict_t *options, gf_boolean_t scrubstall)</div><div class='add'>+br_scrubber_handle_throttle(xlator_t *this, br_private_t *priv, dict_t *options,</div><div class='add'>+                            gf_boolean_t scrubstall)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        char *tmp = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        scrub_throttle_t nthrottle = BR_SCRUB_THROTTLE_VOID;</div><div class='del'>-</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        fsscrub-&gt;throttle_reconf = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = br_scrubber_fetch_option (this, "scrub-throttle", options, &amp;tmp);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        if (scrubstall)</div><div class='del'>-                tmp = BR_SCRUB_STALLED;</div><div class='del'>-</div><div class='del'>-        if (strcasecmp (tmp, "lazy") == 0)</div><div class='del'>-                nthrottle = BR_SCRUB_THROTTLE_LAZY;</div><div class='del'>-        else if (strcasecmp (tmp, "normal") == 0)</div><div class='del'>-                nthrottle = BR_SCRUB_THROTTLE_NORMAL;</div><div class='del'>-        else if (strcasecmp (tmp, "aggressive") == 0)</div><div class='del'>-                nthrottle = BR_SCRUB_THROTTLE_AGGRESSIVE;</div><div class='del'>-        else if (strcasecmp (tmp, BR_SCRUB_STALLED) == 0)</div><div class='del'>-                nthrottle = BR_SCRUB_THROTTLE_STALLED;</div><div class='del'>-        else</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        /* on failure old throttling value is preserved */</div><div class='del'>-        ret = br_scrubber_configure (this, priv, fsscrub, nthrottle);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        if (fsscrub-&gt;throttle != nthrottle)</div><div class='del'>-                fsscrub-&gt;throttle_reconf = _gf_true;</div><div class='del'>-</div><div class='del'>-        fsscrub-&gt;throttle = nthrottle;</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    scrub_throttle_t nthrottle = BR_SCRUB_THROTTLE_VOID;</div><div class='add'>+</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    fsscrub-&gt;throttle_reconf = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = br_scrubber_fetch_option(this, "scrub-throttle", options, &amp;tmp);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    if (scrubstall)</div><div class='add'>+        tmp = BR_SCRUB_STALLED;</div><div class='add'>+</div><div class='add'>+    if (strcasecmp(tmp, "lazy") == 0)</div><div class='add'>+        nthrottle = BR_SCRUB_THROTTLE_LAZY;</div><div class='add'>+    else if (strcasecmp(tmp, "normal") == 0)</div><div class='add'>+        nthrottle = BR_SCRUB_THROTTLE_NORMAL;</div><div class='add'>+    else if (strcasecmp(tmp, "aggressive") == 0)</div><div class='add'>+        nthrottle = BR_SCRUB_THROTTLE_AGGRESSIVE;</div><div class='add'>+    else if (strcasecmp(tmp, BR_SCRUB_STALLED) == 0)</div><div class='add'>+        nthrottle = BR_SCRUB_THROTTLE_STALLED;</div><div class='add'>+    else</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    /* on failure old throttling value is preserved */</div><div class='add'>+    ret = br_scrubber_configure(this, priv, fsscrub, nthrottle);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    if (fsscrub-&gt;throttle != nthrottle)</div><div class='add'>+        fsscrub-&gt;throttle_reconf = _gf_true;</div><div class='add'>+</div><div class='add'>+    fsscrub-&gt;throttle = nthrottle;</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_handle_stall (xlator_t *this, br_private_t *priv,</div><div class='del'>-                          dict_t *options, gf_boolean_t *scrubstall)</div><div class='add'>+br_scrubber_handle_stall(xlator_t *this, br_private_t *priv, dict_t *options,</div><div class='add'>+                         gf_boolean_t *scrubstall)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        char *tmp = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = br_scrubber_fetch_option (this, "scrub-state", options, &amp;tmp);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = br_scrubber_fetch_option(this, "scrub-state", options, &amp;tmp);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        if (strcasecmp (tmp, "pause") == 0) /* anything else is active */</div><div class='del'>-                *scrubstall = _gf_true;</div><div class='add'>+    if (strcasecmp(tmp, "pause") == 0) /* anything else is active */</div><div class='add'>+        *scrubstall = _gf_true;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_scrubber_handle_freq (xlator_t *this, br_private_t *priv,</div><div class='del'>-                         dict_t *options, gf_boolean_t scrubstall)</div><div class='add'>+br_scrubber_handle_freq(xlator_t *this, br_private_t *priv, dict_t *options,</div><div class='add'>+                        gf_boolean_t scrubstall)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret  = -1;</div><div class='del'>-        char *tmp = NULL;</div><div class='del'>-        scrub_freq_t frequency = BR_FSSCRUB_FREQ_HOURLY;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        fsscrub-&gt;frequency_reconf = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = br_scrubber_fetch_option (this, "scrub-freq", options, &amp;tmp);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        if (scrubstall)</div><div class='del'>-                tmp = BR_SCRUB_STALLED;</div><div class='del'>-</div><div class='del'>-        if (strcasecmp (tmp, "hourly") == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_HOURLY;</div><div class='del'>-        } else if (strcasecmp (tmp, "daily") == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_DAILY;</div><div class='del'>-        } else if (strcasecmp (tmp, "weekly") == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_WEEKLY;</div><div class='del'>-        } else if (strcasecmp (tmp, "biweekly") == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_BIWEEKLY;</div><div class='del'>-        } else if (strcasecmp (tmp, "monthly") == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_MONTHLY;</div><div class='del'>-        } else if (strcasecmp (tmp, "minute") == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_MINUTE;</div><div class='del'>-        } else if (strcasecmp (tmp, BR_SCRUB_STALLED) == 0) {</div><div class='del'>-                frequency = BR_FSSCRUB_FREQ_STALLED;</div><div class='del'>-        } else</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        if (fsscrub-&gt;frequency == frequency)</div><div class='del'>-                fsscrub-&gt;frequency_reconf = _gf_false;</div><div class='del'>-        else</div><div class='del'>-                fsscrub-&gt;frequency = frequency;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    scrub_freq_t frequency = BR_FSSCRUB_FREQ_HOURLY;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    fsscrub-&gt;frequency_reconf = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = br_scrubber_fetch_option(this, "scrub-freq", options, &amp;tmp);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    if (scrubstall)</div><div class='add'>+        tmp = BR_SCRUB_STALLED;</div><div class='add'>+</div><div class='add'>+    if (strcasecmp(tmp, "hourly") == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_HOURLY;</div><div class='add'>+    } else if (strcasecmp(tmp, "daily") == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_DAILY;</div><div class='add'>+    } else if (strcasecmp(tmp, "weekly") == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_WEEKLY;</div><div class='add'>+    } else if (strcasecmp(tmp, "biweekly") == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_BIWEEKLY;</div><div class='add'>+    } else if (strcasecmp(tmp, "monthly") == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_MONTHLY;</div><div class='add'>+    } else if (strcasecmp(tmp, "minute") == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_MINUTE;</div><div class='add'>+    } else if (strcasecmp(tmp, BR_SCRUB_STALLED) == 0) {</div><div class='add'>+        frequency = BR_FSSCRUB_FREQ_STALLED;</div><div class='add'>+    } else</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    if (fsscrub-&gt;frequency == frequency)</div><div class='add'>+        fsscrub-&gt;frequency_reconf = _gf_false;</div><div class='add'>+    else</div><div class='add'>+        fsscrub-&gt;frequency = frequency;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void br_scrubber_log_option (xlator_t *this,</div><div class='del'>-                                    br_private_t *priv, gf_boolean_t scrubstall)</div><div class='add'>+static void</div><div class='add'>+br_scrubber_log_option(xlator_t *this, br_private_t *priv,</div><div class='add'>+                       gf_boolean_t scrubstall)</div><div class='ctx'> {</div><div class='del'>-        struct br_scrubber *fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        char *scrub_throttle_str[] = {</div><div class='del'>-                [BR_SCRUB_THROTTLE_LAZY]       = "lazy",</div><div class='del'>-                [BR_SCRUB_THROTTLE_NORMAL]     = "normal",</div><div class='del'>-                [BR_SCRUB_THROTTLE_AGGRESSIVE] = "aggressive",</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        char *scrub_freq_str[] = {</div><div class='del'>-                [BR_FSSCRUB_FREQ_HOURLY]   = "hourly",</div><div class='del'>-                [BR_FSSCRUB_FREQ_DAILY]    = "daily",</div><div class='del'>-                [BR_FSSCRUB_FREQ_WEEKLY]   = "weekly",</div><div class='del'>-                [BR_FSSCRUB_FREQ_BIWEEKLY] = "biweekly",</div><div class='del'>-                [BR_FSSCRUB_FREQ_MONTHLY]  = "monthly (30 days)",</div><div class='del'>-                [BR_FSSCRUB_FREQ_MINUTE]  = "every minute",</div><div class='del'>-        };</div><div class='del'>-</div><div class='del'>-        if (scrubstall)</div><div class='del'>-                return; /* logged as pause */</div><div class='del'>-</div><div class='del'>-        if (fsscrub-&gt;frequency_reconf || fsscrub-&gt;throttle_reconf) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_TUNABLE,</div><div class='del'>-                        "SCRUB TUNABLES:: [Frequency: %s, Throttle: %s]",</div><div class='del'>-                        scrub_freq_str[fsscrub-&gt;frequency],</div><div class='del'>-                        scrub_throttle_str[fsscrub-&gt;throttle]);</div><div class='del'>-        }</div><div class='add'>+    struct br_scrubber *fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    char *scrub_throttle_str[] = {</div><div class='add'>+        [BR_SCRUB_THROTTLE_LAZY] = "lazy",</div><div class='add'>+        [BR_SCRUB_THROTTLE_NORMAL] = "normal",</div><div class='add'>+        [BR_SCRUB_THROTTLE_AGGRESSIVE] = "aggressive",</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    char *scrub_freq_str[] = {</div><div class='add'>+        [BR_FSSCRUB_FREQ_HOURLY] = "hourly",</div><div class='add'>+        [BR_FSSCRUB_FREQ_DAILY] = "daily",</div><div class='add'>+        [BR_FSSCRUB_FREQ_WEEKLY] = "weekly",</div><div class='add'>+        [BR_FSSCRUB_FREQ_BIWEEKLY] = "biweekly",</div><div class='add'>+        [BR_FSSCRUB_FREQ_MONTHLY] = "monthly (30 days)",</div><div class='add'>+        [BR_FSSCRUB_FREQ_MINUTE] = "every minute",</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (scrubstall)</div><div class='add'>+        return; /* logged as pause */</div><div class='add'>+</div><div class='add'>+    if (fsscrub-&gt;frequency_reconf || fsscrub-&gt;throttle_reconf) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_TUNABLE,</div><div class='add'>+               "SCRUB TUNABLES:: [Frequency: %s, Throttle: %s]",</div><div class='add'>+               scrub_freq_str[fsscrub-&gt;frequency],</div><div class='add'>+               scrub_throttle_str[fsscrub-&gt;throttle]);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_scrubber_handle_options (xlator_t *this, br_private_t *priv, dict_t *options)</div><div class='add'>+br_scrubber_handle_options(xlator_t *this, br_private_t *priv, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        gf_boolean_t scrubstall = _gf_false; /* not as dangerous as it sounds */</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_boolean_t scrubstall = _gf_false; /* not as dangerous as it sounds */</div><div class='ctx'> </div><div class='del'>-        ret = br_scrubber_handle_stall (this, priv, options, &amp;scrubstall);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = br_scrubber_handle_stall(this, priv, options, &amp;scrubstall);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = br_scrubber_handle_throttle (this, priv, options, scrubstall);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = br_scrubber_handle_throttle(this, priv, options, scrubstall);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = br_scrubber_handle_freq (this, priv, options, scrubstall);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = br_scrubber_handle_freq(this, priv, options, scrubstall);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        br_scrubber_log_option (this, priv, scrubstall);</div><div class='add'>+    br_scrubber_log_option(this, priv, scrubstall);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_t *</div><div class='del'>-br_lookup_bad_obj_dir (xlator_t *this, br_child_t *child, uuid_t gfid)</div><div class='add'>+br_lookup_bad_obj_dir(xlator_t *this, br_child_t *child, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        struct  iatt statbuf   = {0, };</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        int32_t      ret     = -1;</div><div class='del'>-        loc_t        loc     = {0, };</div><div class='del'>-        inode_t     *linked_inode = NULL;</div><div class='del'>-        int32_t      op_errno = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-scrubber", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='del'>-</div><div class='del'>-        table = child-&gt;table;</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_new (table);</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        BRB_MSG_NO_MEMORY, "failed to allocate a new inode for"</div><div class='del'>-                        "bad object directory");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (loc.gfid, gfid);</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (child-&gt;xl, &amp;loc, &amp;statbuf, NULL, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRB_MSG_LOOKUP_FAILED, "failed to lookup the bad "</div><div class='del'>-                        "objects directory (gfid: %s (%s))", uuid_utoa (gfid),</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        linked_inode = inode_link (loc.inode, NULL, NULL, &amp;statbuf);</div><div class='del'>-        if (linked_inode)</div><div class='del'>-                inode_lookup (linked_inode);</div><div class='add'>+    struct iatt statbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-scrubber", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='add'>+</div><div class='add'>+    table = child-&gt;table;</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_new(table);</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate a new inode for"</div><div class='add'>+               "bad object directory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(child-&gt;xl, &amp;loc, &amp;statbuf, NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_LOOKUP_FAILED,</div><div class='add'>+               "failed to lookup the bad "</div><div class='add'>+               "objects directory (gfid: %s (%s))",</div><div class='add'>+               uuid_utoa(gfid), strerror(op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    linked_inode = inode_link(loc.inode, NULL, NULL, &amp;statbuf);</div><div class='add'>+    if (linked_inode)</div><div class='add'>+        inode_lookup(linked_inode);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return linked_inode;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return linked_inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_read_bad_object_dir (xlator_t *this, br_child_t *child, fd_t *fd,</div><div class='del'>-                        dict_t *dict)</div><div class='add'>+br_read_bad_object_dir(xlator_t *this, br_child_t *child, fd_t *fd,</div><div class='add'>+                       dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t  entries;</div><div class='del'>-        gf_dirent_t *entry   = NULL;</div><div class='del'>-        int32_t      ret     = -1;</div><div class='del'>-        off_t        offset  = 0;</div><div class='del'>-        int32_t      count   = 0;</div><div class='del'>-        char         key[PATH_MAX] = {0, };</div><div class='del'>-        dict_t      *out_dict = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        while ((ret = syncop_readdir (child-&gt;xl, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                      NULL, &amp;out_dict))) {</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                         offset = entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                         snprintf (key, sizeof (key), "quarantine-%d", count);</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * ignore the dict_set errors for now. The intention is</div><div class='del'>-                         * to get as many bad objects as possible instead of</div><div class='del'>-                         * erroring out at the first failure.</div><div class='del'>-                         */</div><div class='del'>-                         ret = dict_set_dynstr_with_alloc (dict, key,</div><div class='del'>-                                                           entry-&gt;d_name);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                count++;</div><div class='del'>-</div><div class='del'>-                        if (out_dict) {</div><div class='del'>-                                dict_copy (out_dict, dict);</div><div class='del'>-                                dict_unref (out_dict);</div><div class='del'>-                                out_dict = NULL;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='del'>-        }</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    char key[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *out_dict = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    while ((ret = syncop_readdir(child-&gt;xl, fd, 131072, offset, &amp;entries, NULL,</div><div class='add'>+                                 &amp;out_dict))) {</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-        ret = count;</div><div class='del'>-        ret = dict_set_int32 (dict, "count", count);</div><div class='add'>+            snprintf(key, sizeof(key), "quarantine-%d", count);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-br_get_bad_objects_from_child (xlator_t *this, dict_t *dict, br_child_t *child)</div><div class='del'>-{</div><div class='del'>-        inode_t     *inode   = NULL;</div><div class='del'>-        inode_table_t *table = NULL;</div><div class='del'>-        fd_t        *fd      = NULL;</div><div class='del'>-        int32_t      ret     = -1;</div><div class='del'>-        loc_t        loc     = {0, };</div><div class='del'>-        int32_t      op_errno = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-scrubber", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, dict, out);</div><div class='del'>-</div><div class='del'>-        table = child-&gt;table;</div><div class='del'>-</div><div class='del'>-        inode = inode_find (table, BR_BAD_OBJ_CONTAINER);</div><div class='del'>-        if (!inode) {</div><div class='del'>-                inode = br_lookup_bad_obj_dir (this, child,</div><div class='del'>-                                               BR_BAD_OBJ_CONTAINER);</div><div class='del'>-                if (!inode)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            /*</div><div class='add'>+             * ignore the dict_set errors for now. The intention is</div><div class='add'>+             * to get as many bad objects as possible instead of</div><div class='add'>+             * erroring out at the first failure.</div><div class='add'>+             */</div><div class='add'>+            ret = dict_set_dynstr_with_alloc(dict, key, entry-&gt;d_name);</div><div class='add'>+            if (!ret)</div><div class='add'>+                count++;</div><div class='ctx'> </div><div class='del'>-        fd = fd_create (inode, 0);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        BRB_MSG_FD_CREATE_FAILED, "fd creation for the bad "</div><div class='del'>-                        "objects directory failed (gfid: %s)",</div><div class='del'>-                        uuid_utoa (BR_BAD_OBJ_CONTAINER));</div><div class='del'>-                goto out;</div><div class='add'>+            if (out_dict) {</div><div class='add'>+                dict_copy(out_dict, dict);</div><div class='add'>+                dict_unref(out_dict);</div><div class='add'>+                out_dict = NULL;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode;</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        ret = syncop_opendir (child-&gt;xl, &amp;loc, fd, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-                fd = NULL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        BRB_MSG_FD_CREATE_FAILED, "failed to open the bad "</div><div class='del'>-                        "objects directory %s",</div><div class='del'>-                        uuid_utoa (BR_BAD_OBJ_CONTAINER));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='add'>+    ret = count;</div><div class='add'>+    ret = dict_set_int32(dict, "count", count);</div><div class='ctx'> </div><div class='del'>-        ret = br_read_bad_object_dir (this, child, fd, dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRB_MSG_BAD_OBJ_READDIR_FAIL, "readdir of the bad "</div><div class='del'>-                        "objects directory (%s) failed ",</div><div class='del'>-                        uuid_utoa (BR_BAD_OBJ_CONTAINER));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+int32_t</div><div class='add'>+br_get_bad_objects_from_child(xlator_t *this, dict_t *dict, br_child_t *child)</div><div class='add'>+{</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_table_t *table = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-scrubber", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, dict, out);</div><div class='add'>+</div><div class='add'>+    table = child-&gt;table;</div><div class='add'>+</div><div class='add'>+    inode = inode_find(table, BR_BAD_OBJ_CONTAINER);</div><div class='add'>+    if (!inode) {</div><div class='add'>+        inode = br_lookup_bad_obj_dir(this, child, BR_BAD_OBJ_CONTAINER);</div><div class='add'>+        if (!inode)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = fd_create(inode, 0);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_FD_CREATE_FAILED,</div><div class='add'>+               "fd creation for the bad "</div><div class='add'>+               "objects directory failed (gfid: %s)",</div><div class='add'>+               uuid_utoa(BR_BAD_OBJ_CONTAINER));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc.inode = inode;</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_opendir(child-&gt;xl, &amp;loc, fd, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        fd = NULL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_FD_CREATE_FAILED,</div><div class='add'>+               "failed to open the bad "</div><div class='add'>+               "objects directory %s",</div><div class='add'>+               uuid_utoa(BR_BAD_OBJ_CONTAINER));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+</div><div class='add'>+    ret = br_read_bad_object_dir(this, child, fd, dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_BAD_OBJ_READDIR_FAIL,</div><div class='add'>+               "readdir of the bad "</div><div class='add'>+               "objects directory (%s) failed ",</div><div class='add'>+               uuid_utoa(BR_BAD_OBJ_CONTAINER));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_collect_bad_objects_of_child (xlator_t *this, br_child_t *child,</div><div class='del'>-                                 dict_t *dict, dict_t *child_dict,</div><div class='del'>-                                 int32_t total_count)</div><div class='add'>+br_collect_bad_objects_of_child(xlator_t *this, br_child_t *child, dict_t *dict,</div><div class='add'>+                                dict_t *child_dict, int32_t total_count)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int32_t    ret = -1;</div><div class='del'>-        int32_t    count = 0;</div><div class='del'>-        char       key[PATH_MAX] = {0, };</div><div class='del'>-        char       main_key[PATH_MAX] = {0, };</div><div class='del'>-        int32_t     j = 0;</div><div class='del'>-        int32_t    tmp_count = 0;</div><div class='del'>-        char       *entry = NULL;</div><div class='del'>-        char       tmp[PATH_MAX]  = {0, };</div><div class='del'>-        char       *path = NULL;</div><div class='del'>-        int32_t     len = 0;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int32 (child_dict, "count", &amp;count);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    char key[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char main_key[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t j = 0;</div><div class='add'>+    int32_t tmp_count = 0;</div><div class='add'>+    char *entry = NULL;</div><div class='add'>+    char tmp[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *path = NULL;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int32(child_dict, "count", &amp;count);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    tmp_count = total_count;</div><div class='add'>+</div><div class='add'>+    for (j = 0; j &lt; count; j++) {</div><div class='add'>+        snprintf(key, PATH_MAX, "quarantine-%d", j);</div><div class='add'>+        ret = dict_get_str(child_dict, key, &amp;entry);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        tmp_count = total_count;</div><div class='del'>-</div><div class='del'>-        for (j = 0; j &lt; count; j++) {</div><div class='del'>-                snprintf (key, PATH_MAX, "quarantine-%d", j);</div><div class='del'>-                ret = dict_get_str (child_dict, key, &amp;entry);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (child_dict, entry, &amp;path);</div><div class='del'>-                len = snprintf (tmp, PATH_MAX, "%s ==&gt; BRICK: %s\n path: %s",</div><div class='del'>-                                entry, child-&gt;brick_path, path);</div><div class='del'>-                if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                snprintf (main_key, PATH_MAX, "quarantine-%d",</div><div class='del'>-                          tmp_count);</div><div class='del'>-</div><div class='del'>-                ret = dict_set_dynstr_with_alloc (dict, main_key, tmp);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        tmp_count++;</div><div class='del'>-                path = NULL;</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        ret = dict_get_str(child_dict, entry, &amp;path);</div><div class='add'>+        len = snprintf(tmp, PATH_MAX, "%s ==&gt; BRICK: %s\n path: %s", entry,</div><div class='add'>+                       child-&gt;brick_path, path);</div><div class='add'>+        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='add'>+        snprintf(main_key, PATH_MAX, "quarantine-%d", tmp_count);</div><div class='ctx'> </div><div class='del'>-        ret = tmp_count;</div><div class='add'>+        ret = dict_set_dynstr_with_alloc(dict, main_key, tmp);</div><div class='add'>+        if (!ret)</div><div class='add'>+            tmp_count++;</div><div class='add'>+        path = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = tmp_count;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_collect_bad_objects_from_children (xlator_t *this, dict_t *dict)</div><div class='add'>+br_collect_bad_objects_from_children(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int32_t    ret = -1;</div><div class='del'>-        dict_t    *child_dict = NULL;</div><div class='del'>-        int32_t    i = 0;</div><div class='del'>-        int32_t    total_count = 0;</div><div class='del'>-        br_child_t *child = NULL;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        dict_t     *tmp_dict = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        tmp_dict = dict;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                child = &amp;priv-&gt;children[i];</div><div class='del'>-                GF_ASSERT (child);</div><div class='del'>-                if (!_br_is_child_connected (child))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                child_dict = dict_new ();</div><div class='del'>-                if (!child_dict) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                BRB_MSG_NO_MEMORY, "failed to allocate dict");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                ret = br_get_bad_objects_from_child (this, child_dict, child);</div><div class='del'>-                /*</div><div class='del'>-                 * Continue asking the remaining children for the list of</div><div class='del'>-                 * bad objects even though getting the list from one of them</div><div class='del'>-                 * fails.</div><div class='del'>-                 */</div><div class='del'>-                if (ret) {</div><div class='del'>-                        dict_unref (child_dict);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = br_collect_bad_objects_of_child (this, child, tmp_dict,</div><div class='del'>-                                                       child_dict, total_count);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        dict_unref (child_dict);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                total_count = ret;</div><div class='del'>-                dict_unref (child_dict);</div><div class='del'>-                child_dict = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *child_dict = NULL;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    int32_t total_count = 0;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    dict_t *tmp_dict = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    tmp_dict = dict;</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        child = &amp;priv-&gt;children[i];</div><div class='add'>+        GF_ASSERT(child);</div><div class='add'>+        if (!_br_is_child_connected(child))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        child_dict = dict_new();</div><div class='add'>+        if (!child_dict) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+                   "failed to allocate dict");</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        ret = br_get_bad_objects_from_child(this, child_dict, child);</div><div class='add'>+        /*</div><div class='add'>+         * Continue asking the remaining children for the list of</div><div class='add'>+         * bad objects even though getting the list from one of them</div><div class='add'>+         * fails.</div><div class='add'>+         */</div><div class='add'>+        if (ret) {</div><div class='add'>+            dict_unref(child_dict);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (tmp_dict, "total-count", total_count);</div><div class='add'>+        ret = br_collect_bad_objects_of_child(this, child, tmp_dict, child_dict,</div><div class='add'>+                                              total_count);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            dict_unref(child_dict);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        total_count = ret;</div><div class='add'>+        dict_unref(child_dict);</div><div class='add'>+        child_dict = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    ret = dict_set_int32(tmp_dict, "total-count", total_count);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_get_bad_objects_list (xlator_t *this, dict_t **dict)</div><div class='add'>+br_get_bad_objects_list(xlator_t *this, dict_t **dict)</div><div class='ctx'> {</div><div class='del'>-        int32_t      ret     = -1;</div><div class='del'>-        dict_t      *tmp_dict = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *tmp_dict = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bir-rot-scrubber", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, dict, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bir-rot-scrubber", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, dict, out);</div><div class='ctx'> </div><div class='del'>-        tmp_dict = *dict;</div><div class='add'>+    tmp_dict = *dict;</div><div class='add'>+    if (!tmp_dict) {</div><div class='add'>+        tmp_dict = dict_new();</div><div class='ctx'>         if (!tmp_dict) {</div><div class='del'>-                tmp_dict = dict_new ();</div><div class='del'>-                if (!tmp_dict) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                                BRB_MSG_NO_MEMORY, "failed to allocate dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                *dict = tmp_dict;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+                   "failed to allocate dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        *dict = tmp_dict;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = br_collect_bad_objects_from_children (this, tmp_dict);</div><div class='add'>+    ret = br_collect_bad_objects_from_children(this, tmp_dict);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-wait_for_scrub_to_finish (xlator_t *this)</div><div class='add'>+wait_for_scrub_to_finish(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int                  ret               = -1;</div><div class='del'>-        br_private_t         *priv             = NULL;</div><div class='del'>-        struct br_monitor    *scrub_monitor    = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", scrub_monitor, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='del'>-                "Waiting for all children to start and finish scrub");</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        {</div><div class='del'>-                while (!scrub_monitor-&gt;done)</div><div class='del'>-                        pthread_cond_wait (&amp;scrub_monitor-&gt;donecond,</div><div class='del'>-                                           &amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", scrub_monitor, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_INFO,</div><div class='add'>+           "Waiting for all children to start and finish scrub");</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    {</div><div class='add'>+        while (!scrub_monitor-&gt;done)</div><div class='add'>+            pthread_cond_wait(&amp;scrub_monitor-&gt;donecond,</div><div class='add'>+                              &amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1897,153 +1929,150 @@ out:</div><div class='ctx'>  * thread that takes care of state machine.</div><div class='ctx'>  */</div><div class='ctx'> void *</div><div class='del'>-br_monitor_thread (void *arg)</div><div class='add'>+br_monitor_thread(void *arg)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret               = 0;</div><div class='del'>-        xlator_t            *this              = NULL;</div><div class='del'>-        br_private_t        *priv              = NULL;</div><div class='del'>-        struct br_monitor   *scrub_monitor     = NULL;</div><div class='del'>-</div><div class='del'>-        this = arg;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Since, this is the topmost xlator, THIS has to be set by bit-rot</div><div class='del'>-         * xlator itself (STACK_WIND won't help in this case). Also it has</div><div class='del'>-         * to be done for each thread that gets spawned. Otherwise, a new</div><div class='del'>-         * thread will get global_xlator's pointer when it does "THIS".</div><div class='del'>-         */</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                while (!scrub_monitor-&gt;inited)</div><div class='del'>-                        pthread_cond_wait (&amp;scrub_monitor-&gt;cond,</div><div class='del'>-                                           &amp;scrub_monitor-&gt;mutex);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        /* this needs to be serialized with reconfigure() */</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = br_scrub_state_machine (this, _gf_false);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    this = arg;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Since, this is the topmost xlator, THIS has to be set by bit-rot</div><div class='add'>+     * xlator itself (STACK_WIND won't help in this case). Also it has</div><div class='add'>+     * to be done for each thread that gets spawned. Otherwise, a new</div><div class='add'>+     * thread will get global_xlator's pointer when it does "THIS".</div><div class='add'>+     */</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        while (!scrub_monitor-&gt;inited)</div><div class='add'>+            pthread_cond_wait(&amp;scrub_monitor-&gt;cond, &amp;scrub_monitor-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    /* this needs to be serialized with reconfigure() */</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = br_scrub_state_machine(this, _gf_false);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, BRB_MSG_SSM_FAILED,</div><div class='add'>+               "Scrub state machine failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        /* Wait for all children to finish scrubbing */</div><div class='add'>+        ret = wait_for_scrub_to_finish(this);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        BRB_MSG_SSM_FAILED,</div><div class='del'>-                        "Scrub state machine failed");</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, BRB_MSG_SCRUB_WAIT_FAILED,</div><div class='add'>+                   "Scrub wait failed");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                /* Wait for all children to finish scrubbing */</div><div class='del'>-                ret = wait_for_scrub_to_finish (this);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                BRB_MSG_SCRUB_WAIT_FAILED,</div><div class='del'>-                                "Scrub wait failed");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* scrub exit criteria: Move the state to PENDING */</div><div class='del'>-                br_scrubber_exit_control (this);</div><div class='del'>-        }</div><div class='add'>+        /* scrub exit criteria: Move the state to PENDING */</div><div class='add'>+        br_scrubber_exit_control(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_set_scrub_state (struct br_monitor *scrub_monitor, br_scrub_state_t state)</div><div class='add'>+br_set_scrub_state(struct br_monitor *scrub_monitor, br_scrub_state_t state)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;scrub_monitor-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                _br_monitor_set_scrub_state (scrub_monitor, state);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    LOCK(&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        _br_monitor_set_scrub_state(scrub_monitor, state);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;scrub_monitor-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_scrubber_monitor_init (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_scrubber_monitor_init(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-        int                ret           = 0;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;scrub_monitor-&gt;lock);</div><div class='del'>-        scrub_monitor-&gt;this = this;</div><div class='add'>+    LOCK_INIT(&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    scrub_monitor-&gt;this = this;</div><div class='ctx'> </div><div class='del'>-        scrub_monitor-&gt;inited = _gf_false;</div><div class='del'>-        pthread_mutex_init (&amp;scrub_monitor-&gt;mutex, NULL);</div><div class='del'>-        pthread_cond_init (&amp;scrub_monitor-&gt;cond, NULL);</div><div class='add'>+    scrub_monitor-&gt;inited = _gf_false;</div><div class='add'>+    pthread_mutex_init(&amp;scrub_monitor-&gt;mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;scrub_monitor-&gt;cond, NULL);</div><div class='ctx'> </div><div class='del'>-        scrub_monitor-&gt;kick = _gf_false;</div><div class='del'>-        scrub_monitor-&gt;active_child_count = 0;</div><div class='del'>-        pthread_mutex_init (&amp;scrub_monitor-&gt;wakelock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;scrub_monitor-&gt;wakecond, NULL);</div><div class='add'>+    scrub_monitor-&gt;kick = _gf_false;</div><div class='add'>+    scrub_monitor-&gt;active_child_count = 0;</div><div class='add'>+    pthread_mutex_init(&amp;scrub_monitor-&gt;wakelock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;scrub_monitor-&gt;wakecond, NULL);</div><div class='ctx'> </div><div class='del'>-        scrub_monitor-&gt;done = _gf_false;</div><div class='del'>-        pthread_mutex_init (&amp;scrub_monitor-&gt;donelock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;scrub_monitor-&gt;donecond, NULL);</div><div class='del'>-</div><div class='del'>-        /* Set the state to INACTIVE */</div><div class='del'>-        br_set_scrub_state (&amp;priv-&gt;scrub_monitor, BR_SCRUB_STATE_INACTIVE);</div><div class='del'>-</div><div class='del'>-        /* Start the monitor thread */</div><div class='del'>-        ret = gf_thread_create (&amp;scrub_monitor-&gt;thread, NULL,</div><div class='del'>-                                br_monitor_thread, this, "brmon");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        BRB_MSG_SPAWN_FAILED, "monitor thread creation failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    scrub_monitor-&gt;done = _gf_false;</div><div class='add'>+    pthread_mutex_init(&amp;scrub_monitor-&gt;donelock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;scrub_monitor-&gt;donecond, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    /* Set the state to INACTIVE */</div><div class='add'>+    br_set_scrub_state(&amp;priv-&gt;scrub_monitor, BR_SCRUB_STATE_INACTIVE);</div><div class='add'>+</div><div class='add'>+    /* Start the monitor thread */</div><div class='add'>+    ret = gf_thread_create(&amp;scrub_monitor-&gt;thread, NULL, br_monitor_thread,</div><div class='add'>+                           this, "brmon");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, BRB_MSG_SPAWN_FAILED,</div><div class='add'>+               "monitor thread creation failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        pthread_mutex_destroy (&amp;scrub_monitor-&gt;mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;scrub_monitor-&gt;cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;scrub_monitor-&gt;mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;scrub_monitor-&gt;cond);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        pthread_cond_destroy (&amp;scrub_monitor-&gt;wakecond);</div><div class='add'>+    pthread_mutex_destroy(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    pthread_cond_destroy(&amp;scrub_monitor-&gt;wakecond);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        pthread_cond_destroy (&amp;scrub_monitor-&gt;donecond);</div><div class='add'>+    pthread_mutex_destroy(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    pthread_cond_destroy(&amp;scrub_monitor-&gt;donecond);</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    LOCK_DESTROY(&amp;scrub_monitor-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_scrubber_init (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_scrubber_init(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        int                 ret     = 0;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;tbf = tbf_init (NULL, 0);</div><div class='del'>-        if (!priv-&gt;tbf)</div><div class='del'>-                return -1;</div><div class='add'>+    priv-&gt;tbf = tbf_init(NULL, 0);</div><div class='add'>+    if (!priv-&gt;tbf)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ret = br_scrubber_monitor_init (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                return -1;</div><div class='add'>+    ret = br_scrubber_monitor_init(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='ctx'> </div><div class='del'>-        fsscrub-&gt;this = this;</div><div class='del'>-        fsscrub-&gt;throttle = BR_SCRUB_THROTTLE_VOID;</div><div class='add'>+    fsscrub-&gt;this = this;</div><div class='add'>+    fsscrub-&gt;throttle = BR_SCRUB_THROTTLE_VOID;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;fsscrub-&gt;mutex, NULL);</div><div class='del'>-        pthread_cond_init (&amp;fsscrub-&gt;cond, NULL);</div><div class='add'>+    pthread_mutex_init(&amp;fsscrub-&gt;mutex, NULL);</div><div class='add'>+    pthread_cond_init(&amp;fsscrub-&gt;cond, NULL);</div><div class='ctx'> </div><div class='del'>-        fsscrub-&gt;nr_scrubbers = 0;</div><div class='del'>-        INIT_LIST_HEAD (&amp;fsscrub-&gt;scrubbers);</div><div class='del'>-        INIT_LIST_HEAD (&amp;fsscrub-&gt;scrublist);</div><div class='add'>+    fsscrub-&gt;nr_scrubbers = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;fsscrub-&gt;scrubbers);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fsscrub-&gt;scrublist);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-ssm.c b/xlators/features/bit-rot/src/bitd/bit-rot-ssm.c<br/>index af887a1ff8b..753e31a3b23 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot-ssm.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/bit-rot/src/bitd/bit-rot-ssm.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot-ssm.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot-ssm.c</a></div><div class='hunk'>@@ -12,78 +12,79 @@</div><div class='ctx'> #include "bit-rot-scrub.h"</div><div class='ctx'> #include "bit-rot-bitd-messages.h"</div><div class='ctx'> </div><div class='del'>-int br_scrub_ssm_noop (xlator_t *this)</div><div class='add'>+int</div><div class='add'>+br_scrub_ssm_noop(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_scrub_ssm_state_pause (xlator_t *this)</div><div class='add'>+br_scrub_ssm_state_pause(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_private_t        *priv               = NULL;</div><div class='del'>-        struct br_monitor   *scrub_monitor      = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='del'>-                "Scrubber paused");</div><div class='del'>-        _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_PAUSED);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='add'>+           "Scrubber paused");</div><div class='add'>+    _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_PAUSED);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_scrub_ssm_state_ipause (xlator_t *this)</div><div class='add'>+br_scrub_ssm_state_ipause(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_private_t        *priv               = NULL;</div><div class='del'>-        struct br_monitor   *scrub_monitor      = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='del'>-                "Scrubber paused");</div><div class='del'>-        _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_IPAUSED);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='add'>+           "Scrubber paused");</div><div class='add'>+    _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_IPAUSED);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_scrub_ssm_state_active (xlator_t *this)</div><div class='add'>+br_scrub_ssm_state_active(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_private_t        *priv               = NULL;</div><div class='del'>-        struct br_monitor   *scrub_monitor      = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        if (scrub_monitor-&gt;done) {</div><div class='del'>-                (void) br_fsscan_activate (this);</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='del'>-                        "Scrubbing resumed");</div><div class='del'>-                _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_ACTIVE);</div><div class='del'>-        }</div><div class='add'>+    if (scrub_monitor-&gt;done) {</div><div class='add'>+        (void)br_fsscan_activate(this);</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='add'>+               "Scrubbing resumed");</div><div class='add'>+        _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_ACTIVE);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_scrub_ssm_state_stall (xlator_t *this)</div><div class='add'>+br_scrub_ssm_state_stall(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_private_t        *priv               = NULL;</div><div class='del'>-        struct br_monitor   *scrub_monitor      = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='del'>-                "Volume is under active scrubbing. Pausing scrub..");</div><div class='del'>-        _br_monitor_set_scrub_state (scrub_monitor, BR_SCRUB_STATE_STALLED);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_GENERIC_SSM_INFO,</div><div class='add'>+           "Volume is under active scrubbing. Pausing scrub..");</div><div class='add'>+    _br_monitor_set_scrub_state(scrub_monitor, BR_SCRUB_STATE_STALLED);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static br_scrub_ssm_call *</div><div class='del'>-br_scrub_ssm[BR_SCRUB_MAXSTATES][BR_SCRUB_MAXEVENTS] = {</div><div class='add'>+static br_scrub_ssm_call *br_scrub_ssm[BR_SCRUB_MAXSTATES][BR_SCRUB_MAXEVENTS] =</div><div class='add'>+    {</div><div class='ctx'>         /* INACTIVE */</div><div class='ctx'>         {br_fsscan_schedule, br_scrub_ssm_state_ipause, br_scrub_ssm_noop},</div><div class='ctx'>         /* PENDING  */</div><div class='hunk'>@@ -99,25 +100,25 @@ br_scrub_ssm[BR_SCRUB_MAXSTATES][BR_SCRUB_MAXEVENTS] = {</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_scrub_state_machine (xlator_t *this, gf_boolean_t scrub_ondemand)</div><div class='add'>+br_scrub_state_machine(xlator_t *this, gf_boolean_t scrub_ondemand)</div><div class='ctx'> {</div><div class='del'>-        br_private_t       *priv      = NULL;</div><div class='del'>-        br_scrub_ssm_call  *call      = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub   = NULL;</div><div class='del'>-        br_scrub_state_t    currstate = 0;</div><div class='del'>-        br_scrub_event_t    event     = 0;</div><div class='del'>-        struct br_monitor  *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        currstate = scrub_monitor-&gt;state;</div><div class='del'>-        if (scrub_ondemand)</div><div class='del'>-                event = BR_SCRUB_EVENT_ONDEMAND;</div><div class='del'>-        else</div><div class='del'>-                event = _br_child_get_scrub_event (fsscrub);</div><div class='del'>-</div><div class='del'>-        call = br_scrub_ssm[currstate][event];</div><div class='del'>-        return call (this);</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    br_scrub_ssm_call *call = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    br_scrub_state_t currstate = 0;</div><div class='add'>+    br_scrub_event_t event = 0;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    currstate = scrub_monitor-&gt;state;</div><div class='add'>+    if (scrub_ondemand)</div><div class='add'>+        event = BR_SCRUB_EVENT_ONDEMAND;</div><div class='add'>+    else</div><div class='add'>+        event = _br_child_get_scrub_event(fsscrub);</div><div class='add'>+</div><div class='add'>+    call = br_scrub_ssm[currstate][event];</div><div class='add'>+    return call(this);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/bit-rot/src/bitd/bit-rot.c b/xlators/features/bit-rot/src/bitd/bit-rot.c<br/>index cf59232263b..75fa0490c90 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/bit-rot/src/bitd/bit-rot.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/bitd/bit-rot.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/bitd/bit-rot.c</a></div><div class='hunk'>@@ -21,72 +21,72 @@</div><div class='ctx'> #include &lt;pthread.h&gt;</div><div class='ctx'> #include "bit-rot-bitd-messages.h"</div><div class='ctx'> </div><div class='del'>-#define BR_HASH_CALC_READ_SIZE  (128 * 1024)</div><div class='add'>+#define BR_HASH_CALC_READ_SIZE (128 * 1024)</div><div class='ctx'> </div><div class='del'>-typedef int32_t (br_child_handler)(xlator_t *, br_child_t *);</div><div class='add'>+typedef int32_t(br_child_handler)(xlator_t *, br_child_t *);</div><div class='ctx'> </div><div class='ctx'> struct br_child_event {</div><div class='del'>-        xlator_t *this;</div><div class='add'>+    xlator_t *this;</div><div class='ctx'> </div><div class='del'>-        br_child_t *child;</div><div class='add'>+    br_child_t *child;</div><div class='ctx'> </div><div class='del'>-        br_child_handler *call;</div><div class='add'>+    br_child_handler *call;</div><div class='ctx'> </div><div class='del'>-        struct list_head list;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_find_child_index (xlator_t *this, xlator_t *child)</div><div class='add'>+br_find_child_index(xlator_t *this, xlator_t *child)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv   = NULL;</div><div class='del'>-        int           i      = -1;</div><div class='del'>-        int           index  = -1;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    int i = -1;</div><div class='add'>+    int index = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                if (child == priv-&gt;children[i].xl) {</div><div class='del'>-                        index = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+        if (child == priv-&gt;children[i].xl) {</div><div class='add'>+            index = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return index;</div><div class='add'>+    return index;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> br_child_t *</div><div class='del'>-br_get_child_from_brick_path (xlator_t *this, char *brick_path)</div><div class='add'>+br_get_child_from_brick_path(xlator_t *this, char *brick_path)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv  = NULL;</div><div class='del'>-        br_child_t   *child = NULL;</div><div class='del'>-        br_child_t   *tmp   = NULL;</div><div class='del'>-        int           i     = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    br_child_t *tmp = NULL;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, brick_path, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, brick_path, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='del'>-                        tmp = &amp;priv-&gt;children[i];</div><div class='del'>-                        if (!strcmp (tmp-&gt;brick_path, brick_path)) {</div><div class='del'>-                                child = tmp;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        for (i = 0; i &lt; priv-&gt;child_count; i++) {</div><div class='add'>+            tmp = &amp;priv-&gt;children[i];</div><div class='add'>+            if (!strcmp(tmp-&gt;brick_path, brick_path)) {</div><div class='add'>+                child = tmp;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return child;</div><div class='add'>+    return child;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -94,18 +94,18 @@ out:</div><div class='ctx'>  * needed -- later.</div><div class='ctx'>  */</div><div class='ctx'> void *</div><div class='del'>-br_brick_init (void *xl, struct gf_brick_spec *brick)</div><div class='add'>+br_brick_init(void *xl, struct gf_brick_spec *brick)</div><div class='ctx'> {</div><div class='del'>-        return brick;</div><div class='add'>+    return brick;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * and cleanup things here when allocated br_brick_init().</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-br_brick_fini (void *xl, char *brick, void *data)</div><div class='add'>+br_brick_fini(void *xl, char *brick, void *data)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -117,109 +117,109 @@ br_brick_fini (void *xl, char *brick, void *data)</div><div class='ctx'>  *      change stub to handle this change.</div><div class='ctx'>  */</div><div class='ctx'> static br_isignature_t *</div><div class='del'>-br_prepare_signature (const unsigned char *sign,</div><div class='del'>-                      unsigned long hashlen,</div><div class='del'>-                      int8_t hashtype, br_object_t *object)</div><div class='add'>+br_prepare_signature(const unsigned char *sign, unsigned long hashlen,</div><div class='add'>+                     int8_t hashtype, br_object_t *object)</div><div class='ctx'> {</div><div class='del'>-        br_isignature_t *signature = NULL;</div><div class='add'>+    br_isignature_t *signature = NULL;</div><div class='ctx'> </div><div class='del'>-        /* TODO: use mem-pool */</div><div class='del'>-        signature = GF_CALLOC (1, signature_size (hashlen + 1),</div><div class='del'>-                               gf_br_stub_mt_signature_t);</div><div class='del'>-        if (!signature)</div><div class='del'>-                return NULL;</div><div class='add'>+    /* TODO: use mem-pool */</div><div class='add'>+    signature = GF_CALLOC(1, signature_size(hashlen + 1),</div><div class='add'>+                          gf_br_stub_mt_signature_t);</div><div class='add'>+    if (!signature)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        /* object version */</div><div class='del'>-        signature-&gt;signedversion = object-&gt;signedversion;</div><div class='add'>+    /* object version */</div><div class='add'>+    signature-&gt;signedversion = object-&gt;signedversion;</div><div class='ctx'> </div><div class='del'>-        /* signature length &amp; type */</div><div class='del'>-        signature-&gt;signaturelen = hashlen;</div><div class='del'>-        signature-&gt;signaturetype = hashtype;</div><div class='add'>+    /* signature length &amp; type */</div><div class='add'>+    signature-&gt;signaturelen = hashlen;</div><div class='add'>+    signature-&gt;signaturetype = hashtype;</div><div class='ctx'> </div><div class='del'>-        /* signature itself */</div><div class='del'>-        memcpy (signature-&gt;signature, (char *)sign, hashlen);</div><div class='del'>-        signature-&gt;signature[hashlen+1] = '\0';</div><div class='add'>+    /* signature itself */</div><div class='add'>+    memcpy(signature-&gt;signature, (char *)sign, hashlen);</div><div class='add'>+    signature-&gt;signature[hashlen + 1] = '\0';</div><div class='ctx'> </div><div class='del'>-        return signature;</div><div class='add'>+    return signature;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-bitd_is_bad_file (xlator_t *this, br_child_t *child, loc_t *loc, fd_t *fd)</div><div class='add'>+bitd_is_bad_file(xlator_t *this, br_child_t *child, loc_t *loc, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int32_t       ret      = -1;</div><div class='del'>-        dict_t       *xattr    = NULL;</div><div class='del'>-        inode_t      *inode    = NULL;</div><div class='del'>-        gf_boolean_t  bad_file = _gf_false;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    gf_boolean_t bad_file = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='ctx'> </div><div class='del'>-        inode = (loc) ? loc-&gt;inode : fd-&gt;inode;</div><div class='add'>+    inode = (loc) ? loc-&gt;inode : fd-&gt;inode;</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                ret = syncop_fgetxattr (child-&gt;xl, fd, &amp;xattr,</div><div class='del'>-                                        BITROT_OBJECT_BAD_KEY, NULL, NULL);</div><div class='del'>-        else if (loc)</div><div class='del'>-                ret = syncop_getxattr (child-&gt;xl, loc,</div><div class='del'>-                                       &amp;xattr, BITROT_OBJECT_BAD_KEY, NULL,</div><div class='del'>-                                       NULL);</div><div class='add'>+    if (fd)</div><div class='add'>+        ret = syncop_fgetxattr(child-&gt;xl, fd, &amp;xattr, BITROT_OBJECT_BAD_KEY,</div><div class='add'>+                               NULL, NULL);</div><div class='add'>+    else if (loc)</div><div class='add'>+        ret = syncop_getxattr(child-&gt;xl, loc, &amp;xattr, BITROT_OBJECT_BAD_KEY,</div><div class='add'>+                              NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "[GFID: %s] is marked corrupted",</div><div class='del'>-                              uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                bad_file = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "[GFID: %s] is marked corrupted",</div><div class='add'>+                     uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        bad_file = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return bad_file;</div><div class='add'>+    return bad_file;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * Do a lookup on the gfid present within the object.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_object_lookup (xlator_t *this, br_object_t *object,</div><div class='del'>-                  struct iatt *iatt, inode_t **linked_inode)</div><div class='add'>+br_object_lookup(xlator_t *this, br_object_t *object, struct iatt *iatt,</div><div class='add'>+                 inode_t **linked_inode)</div><div class='ctx'> {</div><div class='del'>-	int      ret          = -EINVAL;</div><div class='del'>-	loc_t    loc          = {0, };</div><div class='del'>-	inode_t *inode        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, object, out);</div><div class='del'>-</div><div class='del'>-	inode = inode_find (object-&gt;child-&gt;table, object-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        if (inode)</div><div class='del'>-                loc.inode = inode;</div><div class='del'>-        else</div><div class='del'>-                loc.inode = inode_new (object-&gt;child-&gt;table);</div><div class='del'>-</div><div class='del'>-	if (!loc.inode) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-		goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	gf_uuid_copy (loc.gfid, object-&gt;gfid);</div><div class='del'>-</div><div class='del'>-	ret = syncop_lookup (object-&gt;child-&gt;xl, &amp;loc, iatt, NULL, NULL, NULL);</div><div class='del'>-	if (ret &lt; 0)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * The file might have been deleted by the application</div><div class='del'>-         * after getting the event, but before doing a lookup.</div><div class='del'>-         * So use linked_inode after inode_link is done.</div><div class='del'>-         */</div><div class='del'>-	*linked_inode = inode_link (loc.inode, NULL, NULL, iatt);</div><div class='del'>-	if (*linked_inode)</div><div class='del'>-		inode_lookup (*linked_inode);</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, object, out);</div><div class='add'>+</div><div class='add'>+    inode = inode_find(object-&gt;child-&gt;table, object-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    if (inode)</div><div class='add'>+        loc.inode = inode;</div><div class='add'>+    else</div><div class='add'>+        loc.inode = inode_new(object-&gt;child-&gt;table);</div><div class='add'>+</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, object-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(object-&gt;child-&gt;xl, &amp;loc, iatt, NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * The file might have been deleted by the application</div><div class='add'>+     * after getting the event, but before doing a lookup.</div><div class='add'>+     * So use linked_inode after inode_link is done.</div><div class='add'>+     */</div><div class='add'>+    *linked_inode = inode_link(loc.inode, NULL, NULL, iatt);</div><div class='add'>+    if (*linked_inode)</div><div class='add'>+        inode_lookup(*linked_inode);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-	loc_wipe (&amp;loc);</div><div class='del'>-	return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -228,43 +228,44 @@ out:</div><div class='ctx'>  * passing xdata -- may be use frame-&gt;root-&gt;pid itself.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_object_open (xlator_t *this,</div><div class='del'>-                br_object_t *object, inode_t *inode, fd_t **openfd)</div><div class='add'>+br_object_open(xlator_t *this, br_object_t *object, inode_t *inode,</div><div class='add'>+               fd_t **openfd)</div><div class='ctx'> {</div><div class='del'>-        int32_t      ret   = -1;</div><div class='del'>-        fd_t        *fd   = NULL;</div><div class='del'>-        loc_t        loc   = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, object, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='del'>-</div><div class='del'>-        ret = -EINVAL;</div><div class='del'>-        fd = fd_create (inode, 0);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_FD_CREATE_FAILED,</div><div class='del'>-                        "failed to create fd for the inode %s",</div><div class='del'>-                        uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-	gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        ret = syncop_open (object-&gt;child-&gt;xl, &amp;loc, O_RDONLY, fd, NULL, NULL);</div><div class='del'>-	if (ret) {</div><div class='del'>-                br_log_object (this, "open", inode-&gt;gfid, -ret);</div><div class='del'>-		fd_unref (fd);</div><div class='del'>-		fd = NULL;</div><div class='del'>-	} else {</div><div class='del'>-		fd_bind (fd);</div><div class='del'>-                *openfd = fd;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, object, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='add'>+</div><div class='add'>+    ret = -EINVAL;</div><div class='add'>+    fd = fd_create(inode, 0);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_FD_CREATE_FAILED,</div><div class='add'>+               "failed to create fd for the inode %s", uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = syncop_open(object-&gt;child-&gt;xl, &amp;loc, O_RDONLY, fd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        br_log_object(this, "open", inode-&gt;gfid, -ret);</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        fd = NULL;</div><div class='add'>+    } else {</div><div class='add'>+        fd_bind(fd);</div><div class='add'>+        *openfd = fd;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -272,287 +273,289 @@ out:</div><div class='ctx'>  * and return the buffer.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_object_read_block_and_sign (xlator_t *this, fd_t *fd, br_child_t *child,</div><div class='del'>-                               off_t offset, size_t size, SHA256_CTX *sha256)</div><div class='add'>+br_object_read_block_and_sign(xlator_t *this, fd_t *fd, br_child_t *child,</div><div class='add'>+                              off_t offset, size_t size, SHA256_CTX *sha256)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret    = -1;</div><div class='del'>-        tbf_t      *tbf    = NULL;</div><div class='del'>-        struct iovec  *iovec  = NULL;</div><div class='del'>-        struct iobref *iobref = NULL;</div><div class='del'>-        br_private_t  *priv   = NULL;</div><div class='del'>-        int            count  = 0;</div><div class='del'>-        int            i      = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd-&gt;inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv-&gt;tbf, out);</div><div class='del'>-        tbf = priv-&gt;tbf;</div><div class='del'>-</div><div class='del'>-        ret = syncop_readv (child-&gt;xl, fd,</div><div class='del'>-                            size, offset, 0, &amp;iovec, &amp;count, &amp;iobref, NULL,</div><div class='del'>-                            NULL, NULL);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno, BRB_MSG_READV_FAILED,</div><div class='del'>-                        "readv on %s failed", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    tbf_t *tbf = NULL;</div><div class='add'>+    struct iovec *iovec = NULL;</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv-&gt;tbf, out);</div><div class='add'>+    tbf = priv-&gt;tbf;</div><div class='add'>+</div><div class='add'>+    ret = syncop_readv(child-&gt;xl, fd, size, offset, 0, &amp;iovec, &amp;count, &amp;iobref,</div><div class='add'>+                       NULL, NULL, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRB_MSG_READV_FAILED,</div><div class='add'>+               "readv on %s failed", uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; count; i++) {</div><div class='del'>-                TBF_THROTTLE_BEGIN (tbf, TBF_OP_HASH, iovec[i].iov_len);</div><div class='del'>-                {</div><div class='del'>-                        SHA256_Update (sha256, (const unsigned char *)</div><div class='del'>-                                       (iovec[i].iov_base), iovec[i].iov_len);</div><div class='del'>-                }</div><div class='del'>-                TBF_THROTTLE_BEGIN (tbf, TBF_OP_HASH, iovec[i].iov_len);</div><div class='add'>+    for (i = 0; i &lt; count; i++) {</div><div class='add'>+        TBF_THROTTLE_BEGIN(tbf, TBF_OP_HASH, iovec[i].iov_len);</div><div class='add'>+        {</div><div class='add'>+            SHA256_Update(sha256, (const unsigned char *)(iovec[i].iov_base),</div><div class='add'>+                          iovec[i].iov_len);</div><div class='ctx'>         }</div><div class='add'>+        TBF_THROTTLE_BEGIN(tbf, TBF_OP_HASH, iovec[i].iov_len);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (iovec)</div><div class='del'>-                GF_FREE (iovec);</div><div class='add'>+out:</div><div class='add'>+    if (iovec)</div><div class='add'>+        GF_FREE(iovec);</div><div class='ctx'> </div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_calculate_obj_checksum (unsigned char *md,</div><div class='del'>-                           br_child_t *child, fd_t *fd, struct iatt *iatt)</div><div class='add'>+br_calculate_obj_checksum(unsigned char *md, br_child_t *child, fd_t *fd,</div><div class='add'>+                          struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-        int32_t   ret    = -1;</div><div class='del'>-        off_t     offset = 0;</div><div class='del'>-        size_t    block  = BR_HASH_CALC_READ_SIZE;</div><div class='del'>-        xlator_t *this   = NULL;</div><div class='del'>-</div><div class='del'>-        SHA256_CTX       sha256;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    size_t block = BR_HASH_CALC_READ_SIZE;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", iatt, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", fd, out);</div><div class='add'>+    SHA256_CTX sha256;</div><div class='ctx'> </div><div class='del'>-        this = child-&gt;this;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", iatt, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", fd, out);</div><div class='ctx'> </div><div class='del'>-        SHA256_Init (&amp;sha256);</div><div class='add'>+    this = child-&gt;this;</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                ret = br_object_read_block_and_sign (this, fd, child,</div><div class='del'>-                                                     offset, block, &amp;sha256);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_BLOCK_READ_FAILED, "reading block with "</div><div class='del'>-                                "offset %lu of object %s failed", offset,</div><div class='del'>-                                uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    SHA256_Init(&amp;sha256);</div><div class='ctx'> </div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                offset += ret;</div><div class='add'>+    while (1) {</div><div class='add'>+        ret = br_object_read_block_and_sign(this, fd, child, offset, block,</div><div class='add'>+                                            &amp;sha256);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_BLOCK_READ_FAILED,</div><div class='add'>+                   "reading block with "</div><div class='add'>+                   "offset %lu of object %s failed",</div><div class='add'>+                   offset, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='ctx'>         if (ret == 0)</div><div class='del'>-                SHA256_Final (md, &amp;sha256);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+        offset += ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        SHA256_Final(md, &amp;sha256);</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_object_checksum (unsigned char *md,</div><div class='del'>-                    br_object_t *object, fd_t *fd, struct iatt *iatt)</div><div class='add'>+br_object_checksum(unsigned char *md, br_object_t *object, fd_t *fd,</div><div class='add'>+                   struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-        return br_calculate_obj_checksum (md, object-&gt;child, fd,  iatt);</div><div class='add'>+    return br_calculate_obj_checksum(md, object-&gt;child, fd, iatt);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_object_read_sign (inode_t *linked_inode, fd_t *fd, br_object_t *object,</div><div class='del'>-                     struct iatt *iatt)</div><div class='add'>+br_object_read_sign(inode_t *linked_inode, fd_t *fd, br_object_t *object,</div><div class='add'>+                    struct iatt *iatt)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret           = -1;</div><div class='del'>-        xlator_t        *this          = NULL;</div><div class='del'>-        dict_t          *xattr         = NULL;</div><div class='del'>-        unsigned char   *md            = NULL;</div><div class='del'>-        br_isignature_t *sign          = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", object, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", linked_inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", fd, out);</div><div class='del'>-</div><div class='del'>-        this = object-&gt;this;</div><div class='del'>-</div><div class='del'>-        md = GF_MALLOC (SHA256_DIGEST_LENGTH, gf_common_mt_char);</div><div class='del'>-        if (!md) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate memory for saving hash of the "</div><div class='del'>-                        "object %s", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = br_object_checksum (md, object, fd, iatt);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRB_MSG_CALC_CHECKSUM_FAILED, "calculating checksum "</div><div class='del'>-                        "for the object %s failed",</div><div class='del'>-                        uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-                goto free_signature;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sign = br_prepare_signature (md, SHA256_DIGEST_LENGTH,</div><div class='del'>-                                     BR_SIGNATURE_TYPE_SHA256, object);</div><div class='del'>-        if (!sign) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SIGN_FAILED,</div><div class='del'>-                        "failed to get the signature for the object %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto free_signature;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xattr = dict_for_key_value</div><div class='del'>-                (GLUSTERFS_SET_OBJECT_SIGNATURE,</div><div class='del'>-                 (void *)sign, signature_size (SHA256_DIGEST_LENGTH), _gf_true);</div><div class='del'>-</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SET_SIGN_FAILED,</div><div class='del'>-                        "dict allocation for signing failed for the object %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto free_isign;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_fsetxattr (object-&gt;child-&gt;xl, fd, xattr, 0, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SET_SIGN_FAILED,</div><div class='del'>-                        "fsetxattr of signature to the object %s failed",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unref_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- unref_dict:</div><div class='del'>-        dict_unref (xattr);</div><div class='del'>- free_isign:</div><div class='del'>-        GF_FREE (sign);</div><div class='del'>- free_signature:</div><div class='del'>-        GF_FREE (md);</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    unsigned char *md = NULL;</div><div class='add'>+    br_isignature_t *sign = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", object, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", linked_inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", fd, out);</div><div class='add'>+</div><div class='add'>+    this = object-&gt;this;</div><div class='add'>+</div><div class='add'>+    md = GF_MALLOC(SHA256_DIGEST_LENGTH, gf_common_mt_char);</div><div class='add'>+    if (!md) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate memory for saving hash of the "</div><div class='add'>+               "object %s",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = br_object_checksum(md, object, fd, iatt);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_CALC_CHECKSUM_FAILED,</div><div class='add'>+               "calculating checksum "</div><div class='add'>+               "for the object %s failed",</div><div class='add'>+               uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+        goto free_signature;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sign = br_prepare_signature(md, SHA256_DIGEST_LENGTH,</div><div class='add'>+                                BR_SIGNATURE_TYPE_SHA256, object);</div><div class='add'>+    if (!sign) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SIGN_FAILED,</div><div class='add'>+               "failed to get the signature for the object %s",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto free_signature;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xattr = dict_for_key_value(GLUSTERFS_SET_OBJECT_SIGNATURE, (void *)sign,</div><div class='add'>+                               signature_size(SHA256_DIGEST_LENGTH), _gf_true);</div><div class='add'>+</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SET_SIGN_FAILED,</div><div class='add'>+               "dict allocation for signing failed for the object %s",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto free_isign;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetxattr(object-&gt;child-&gt;xl, fd, xattr, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SET_SIGN_FAILED,</div><div class='add'>+               "fsetxattr of signature to the object %s failed",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unref_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+unref_dict:</div><div class='add'>+    dict_unref(xattr);</div><div class='add'>+free_isign:</div><div class='add'>+    GF_FREE(sign);</div><div class='add'>+free_signature:</div><div class='add'>+    GF_FREE(md);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int br_object_sign_softerror (int32_t op_errno)</div><div class='add'>+static int</div><div class='add'>+br_object_sign_softerror(int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        return ((op_errno == ENOENT) || (op_errno == ESTALE)</div><div class='del'>-                || (op_errno == ENODATA));</div><div class='add'>+    return ((op_errno == ENOENT) || (op_errno == ESTALE) ||</div><div class='add'>+            (op_errno == ENODATA));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_log_object (xlator_t *this, char *op, uuid_t gfid, int32_t op_errno)</div><div class='add'>+br_log_object(xlator_t *this, char *op, uuid_t gfid, int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        int softerror = br_object_sign_softerror (op_errno);</div><div class='del'>-        if (softerror) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s() failed on object %s "</div><div class='del'>-                              "[reason: %s]", op, uuid_utoa (gfid),</div><div class='del'>-                              strerror (op_errno));</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_OP_FAILED,</div><div class='del'>-                        "%s() failed on object %s", op, uuid_utoa (gfid));</div><div class='del'>-        }</div><div class='add'>+    int softerror = br_object_sign_softerror(op_errno);</div><div class='add'>+    if (softerror) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "%s() failed on object %s "</div><div class='add'>+                     "[reason: %s]",</div><div class='add'>+                     op, uuid_utoa(gfid), strerror(op_errno));</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_OP_FAILED,</div><div class='add'>+               "%s() failed on object %s", op, uuid_utoa(gfid));</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_log_object_path (xlator_t *this, char *op,</div><div class='del'>-                    const char *path, int32_t op_errno)</div><div class='add'>+br_log_object_path(xlator_t *this, char *op, const char *path, int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        int softerror = br_object_sign_softerror (op_errno);</div><div class='del'>-        if (softerror) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "%s() failed on object %s "</div><div class='del'>-                              "[reason: %s]", op, path, strerror (op_errno));</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_OP_FAILED,</div><div class='del'>-                        "%s() failed on object %s", op, path);</div><div class='del'>-        }</div><div class='add'>+    int softerror = br_object_sign_softerror(op_errno);</div><div class='add'>+    if (softerror) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "%s() failed on object %s "</div><div class='add'>+                     "[reason: %s]",</div><div class='add'>+                     op, path, strerror(op_errno));</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_OP_FAILED,</div><div class='add'>+               "%s() failed on object %s", op, path);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_trigger_sign (xlator_t *this, br_child_t *child,</div><div class='del'>-                 inode_t *linked_inode, loc_t *loc, gf_boolean_t need_reopen)</div><div class='add'>+br_trigger_sign(xlator_t *this, br_child_t *child, inode_t *linked_inode,</div><div class='add'>+                loc_t *loc, gf_boolean_t need_reopen)</div><div class='ctx'> {</div><div class='del'>-        fd_t     *fd   = NULL;</div><div class='del'>-        int32_t   ret  = -1;</div><div class='del'>-        uint32_t  val  = 0;</div><div class='del'>-        dict_t   *dict = NULL;</div><div class='del'>-        pid_t     pid  = GF_CLIENT_PID_BITD;</div><div class='del'>-</div><div class='del'>-        syncopctx_setfspid (&amp;pid);</div><div class='del'>-</div><div class='del'>-        val = (need_reopen == _gf_true) ? BR_OBJECT_REOPEN : BR_OBJECT_RESIGN;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (dict, BR_REOPEN_SIGN_HINT_KEY, val);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_dict;</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-        fd = fd_create (linked_inode, 0);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_FD_CREATE_FAILED,</div><div class='del'>-                        "Failed to create fd [GFID %s]",</div><div class='del'>-                        uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-                goto cleanup_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_open (child-&gt;xl, loc, O_RDWR, fd, NULL, NULL);</div><div class='del'>-	if (ret) {</div><div class='del'>-                br_log_object (this, "open", linked_inode-&gt;gfid, -ret);</div><div class='del'>-                goto unref_fd;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        fd_bind (fd);</div><div class='del'>-</div><div class='del'>-        ret = syncop_fsetxattr (child-&gt;xl, fd, dict, 0, NULL, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                br_log_object (this, "fsetxattr", linked_inode-&gt;gfid, -ret);</div><div class='del'>-</div><div class='del'>-        /* passthough: fd_unref() */</div><div class='del'>-</div><div class='del'>- unref_fd:</div><div class='del'>-        fd_unref (fd);</div><div class='del'>- cleanup_dict:</div><div class='del'>-        dict_unref (dict);</div><div class='del'>- out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_TRIGGER_SIGN,</div><div class='del'>-                        "Could not trigger signingd for %s (reopen hint: %d)",</div><div class='del'>-                        uuid_utoa (linked_inode-&gt;gfid), val);</div><div class='del'>-        }</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint32_t val = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    pid_t pid = GF_CLIENT_PID_BITD;</div><div class='add'>+</div><div class='add'>+    syncopctx_setfspid(&amp;pid);</div><div class='add'>+</div><div class='add'>+    val = (need_reopen == _gf_true) ? BR_OBJECT_REOPEN : BR_OBJECT_RESIGN;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(dict, BR_REOPEN_SIGN_HINT_KEY, val);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_dict;</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+    fd = fd_create(linked_inode, 0);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_FD_CREATE_FAILED,</div><div class='add'>+               "Failed to create fd [GFID %s]", uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+        goto cleanup_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_open(child-&gt;xl, loc, O_RDWR, fd, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        br_log_object(this, "open", linked_inode-&gt;gfid, -ret);</div><div class='add'>+        goto unref_fd;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetxattr(child-&gt;xl, fd, dict, 0, NULL, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        br_log_object(this, "fsetxattr", linked_inode-&gt;gfid, -ret);</div><div class='add'>+</div><div class='add'>+    /* passthough: fd_unref() */</div><div class='add'>+</div><div class='add'>+unref_fd:</div><div class='add'>+    fd_unref(fd);</div><div class='add'>+cleanup_dict:</div><div class='add'>+    dict_unref(dict);</div><div class='add'>+out:</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_TRIGGER_SIGN,</div><div class='add'>+               "Could not trigger signingd for %s (reopen hint: %d)",</div><div class='add'>+               uuid_utoa(linked_inode-&gt;gfid), val);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_object_resign (xlator_t *this,</div><div class='del'>-                  br_object_t *object, inode_t *linked_inode)</div><div class='add'>+br_object_resign(xlator_t *this, br_object_t *object, inode_t *linked_inode)</div><div class='ctx'> {</div><div class='del'>-        loc_t loc = {0, };</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        loc.inode = inode_ref (linked_inode);</div><div class='del'>-        gf_uuid_copy (loc.gfid, linked_inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(linked_inode);</div><div class='add'>+    gf_uuid_copy(loc.gfid, linked_inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        br_trigger_sign (this, object-&gt;child, linked_inode, &amp;loc, _gf_false);</div><div class='add'>+    br_trigger_sign(this, object-&gt;child, linked_inode, &amp;loc, _gf_false);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -560,122 +563,125 @@ br_object_resign (xlator_t *this,</div><div class='ctx'>  * some form of priority scheduling and/or read burstness to avoid starving</div><div class='ctx'>  * (or kicking) client I/O's.</div><div class='ctx'>  */</div><div class='del'>-static int32_t br_sign_object (br_object_t *object)</div><div class='add'>+static int32_t</div><div class='add'>+br_sign_object(br_object_t *object)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret           = -1;</div><div class='del'>-        inode_t        *linked_inode  = NULL;</div><div class='del'>-        xlator_t       *this          = NULL;</div><div class='del'>-        fd_t           *fd            = NULL;</div><div class='del'>-        struct iatt     iatt          = {0, };</div><div class='del'>-        pid_t           pid           = GF_CLIENT_PID_BITD;</div><div class='del'>-        br_sign_state_t sign_info     = BR_SIGN_NORMAL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", object, out);</div><div class='del'>-</div><div class='del'>-        this = object-&gt;this;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * FIXME: This is required as signing an object is restricted to</div><div class='del'>-         * clients with special frame-&gt;root-&gt;pid. Change the way client</div><div class='del'>-         * pid is set.</div><div class='del'>-         */</div><div class='del'>-        syncopctx_setfspid (&amp;pid);</div><div class='del'>-</div><div class='del'>-        ret = br_object_lookup (this, object, &amp;iatt, &amp;linked_inode);</div><div class='del'>-        if (ret) {</div><div class='del'>-                br_log_object (this, "lookup", object-&gt;gfid, -ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * For fd's that have notified for reopening, we send an explicit</div><div class='del'>-         * open() followed by a dummy write() call. This triggers the</div><div class='del'>-         * actual signing of the object.</div><div class='del'>-         */</div><div class='del'>-        sign_info = ntohl (object-&gt;sign_info);</div><div class='del'>-        if (sign_info == BR_SIGN_REOPEN_WAIT) {</div><div class='del'>-                br_object_resign (this, object, linked_inode);</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = br_object_open (this, object, linked_inode, &amp;fd);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                br_log_object (this, "open", object-&gt;gfid, -ret);</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * we have an open file descriptor on the object. from here on,</div><div class='del'>-         * do not be generous to file operation errors.</div><div class='del'>-         */</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Signing object [%s]",</div><div class='del'>-                      uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        ret = br_object_read_sign (linked_inode, fd, object, &amp;iatt);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRB_MSG_READ_AND_SIGN_FAILED, "reading and signing of "</div><div class='del'>-                        "the object %s failed", uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-                goto unref_fd;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- unref_fd:</div><div class='del'>-        fd_unref (fd);</div><div class='del'>- unref_inode:</div><div class='del'>-        inode_unref (linked_inode);</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    pid_t pid = GF_CLIENT_PID_BITD;</div><div class='add'>+    br_sign_state_t sign_info = BR_SIGN_NORMAL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", object, out);</div><div class='add'>+</div><div class='add'>+    this = object-&gt;this;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * FIXME: This is required as signing an object is restricted to</div><div class='add'>+     * clients with special frame-&gt;root-&gt;pid. Change the way client</div><div class='add'>+     * pid is set.</div><div class='add'>+     */</div><div class='add'>+    syncopctx_setfspid(&amp;pid);</div><div class='add'>+</div><div class='add'>+    ret = br_object_lookup(this, object, &amp;iatt, &amp;linked_inode);</div><div class='add'>+    if (ret) {</div><div class='add'>+        br_log_object(this, "lookup", object-&gt;gfid, -ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * For fd's that have notified for reopening, we send an explicit</div><div class='add'>+     * open() followed by a dummy write() call. This triggers the</div><div class='add'>+     * actual signing of the object.</div><div class='add'>+     */</div><div class='add'>+    sign_info = ntohl(object-&gt;sign_info);</div><div class='add'>+    if (sign_info == BR_SIGN_REOPEN_WAIT) {</div><div class='add'>+        br_object_resign(this, object, linked_inode);</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = br_object_open(this, object, linked_inode, &amp;fd);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        br_log_object(this, "open", object-&gt;gfid, -ret);</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * we have an open file descriptor on the object. from here on,</div><div class='add'>+     * do not be generous to file operation errors.</div><div class='add'>+     */</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Signing object [%s]",</div><div class='add'>+                 uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    ret = br_object_read_sign(linked_inode, fd, object, &amp;iatt);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_READ_AND_SIGN_FAILED,</div><div class='add'>+               "reading and signing of "</div><div class='add'>+               "the object %s failed",</div><div class='add'>+               uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+        goto unref_fd;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+unref_fd:</div><div class='add'>+    fd_unref(fd);</div><div class='add'>+unref_inode:</div><div class='add'>+    inode_unref(linked_inode);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static br_object_t *__br_pick_object (br_private_t *priv)</div><div class='add'>+static br_object_t *</div><div class='add'>+__br_pick_object(br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        br_object_t *object = NULL;</div><div class='add'>+    br_object_t *object = NULL;</div><div class='ctx'> </div><div class='del'>-        while (list_empty (&amp;priv-&gt;obj_queue-&gt;objects)) {</div><div class='del'>-                pthread_cond_wait (&amp;priv-&gt;object_cond, &amp;priv-&gt;lock);</div><div class='del'>-        }</div><div class='add'>+    while (list_empty(&amp;priv-&gt;obj_queue-&gt;objects)) {</div><div class='add'>+        pthread_cond_wait(&amp;priv-&gt;object_cond, &amp;priv-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        object = list_first_entry</div><div class='del'>-                (&amp;priv-&gt;obj_queue-&gt;objects, br_object_t, list);</div><div class='del'>-        list_del_init (&amp;object-&gt;list);</div><div class='add'>+    object = list_first_entry(&amp;priv-&gt;obj_queue-&gt;objects, br_object_t, list);</div><div class='add'>+    list_del_init(&amp;object-&gt;list);</div><div class='ctx'> </div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * This is the place where the signing of the objects is triggered.</div><div class='ctx'>  */</div><div class='ctx'> void *</div><div class='del'>-br_process_object (void *arg)</div><div class='add'>+br_process_object(void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *this   = NULL;</div><div class='del'>-        br_object_t  *object = NULL;</div><div class='del'>-        br_private_t *priv   = NULL;</div><div class='del'>-        int32_t       ret    = -1;</div><div class='del'>-</div><div class='del'>-        this = arg;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        object = __br_pick_object (priv);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                ret = br_sign_object (object);</div><div class='del'>-                if (ret &amp;&amp; !br_object_sign_softerror (-ret))</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_SIGN_FAILED, "SIGNING FAILURE [%s]",</div><div class='del'>-                                uuid_utoa (object-&gt;gfid));</div><div class='del'>-                GF_FREE (object);</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    br_object_t *object = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    this = arg;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            object = __br_pick_object(priv);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        ret = br_sign_object(object);</div><div class='add'>+        if (ret &amp;&amp; !br_object_sign_softerror(-ret))</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SIGN_FAILED,</div><div class='add'>+                   "SIGNING FAILURE [%s]", uuid_utoa(object-&gt;gfid));</div><div class='add'>+        GF_FREE(object);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -692,98 +698,98 @@ br_process_object (void *arg)</div><div class='ctx'>  * NOTE: use call_time to instrument signing time in br_sign_object().</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-br_add_object_to_queue (struct gf_tw_timer_list *timer,</div><div class='del'>-                        void *data, unsigned long call_time)</div><div class='add'>+br_add_object_to_queue(struct gf_tw_timer_list *timer, void *data,</div><div class='add'>+                       unsigned long call_time)</div><div class='ctx'> {</div><div class='del'>-        br_object_t   *object = NULL;</div><div class='del'>-        xlator_t      *this   = NULL;</div><div class='del'>-        br_private_t  *priv   = NULL;</div><div class='del'>-</div><div class='del'>-        object = data;</div><div class='del'>-        this   = object-&gt;this;</div><div class='del'>-        priv   = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;object-&gt;list, &amp;priv-&gt;obj_queue-&gt;objects);</div><div class='del'>-                pthread_cond_broadcast (&amp;priv-&gt;object_cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (timer)</div><div class='del'>-                mem_put (timer);</div><div class='del'>-        return;</div><div class='add'>+    br_object_t *object = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    object = data;</div><div class='add'>+    this = object-&gt;this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;object-&gt;list, &amp;priv-&gt;obj_queue-&gt;objects);</div><div class='add'>+        pthread_cond_broadcast(&amp;priv-&gt;object_cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (timer)</div><div class='add'>+        mem_put(timer);</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static br_object_t *</div><div class='del'>-br_initialize_object (xlator_t *this, br_child_t *child, changelog_event_t *ev)</div><div class='add'>+br_initialize_object(xlator_t *this, br_child_t *child, changelog_event_t *ev)</div><div class='ctx'> {</div><div class='del'>-        br_object_t *object = NULL;</div><div class='add'>+    br_object_t *object = NULL;</div><div class='ctx'> </div><div class='del'>-        object = GF_CALLOC (1, sizeof (*object), gf_br_mt_br_object_t);</div><div class='del'>-        if (!object)</div><div class='del'>-                goto out;</div><div class='del'>-        INIT_LIST_HEAD (&amp;object-&gt;list);</div><div class='add'>+    object = GF_CALLOC(1, sizeof(*object), gf_br_mt_br_object_t);</div><div class='add'>+    if (!object)</div><div class='add'>+        goto out;</div><div class='add'>+    INIT_LIST_HEAD(&amp;object-&gt;list);</div><div class='ctx'> </div><div class='del'>-        object-&gt;this  = this;</div><div class='del'>-        object-&gt;child = child;</div><div class='del'>-        gf_uuid_copy (object-&gt;gfid, ev-&gt;u.releasebr.gfid);</div><div class='add'>+    object-&gt;this = this;</div><div class='add'>+    object-&gt;child = child;</div><div class='add'>+    gf_uuid_copy(object-&gt;gfid, ev-&gt;u.releasebr.gfid);</div><div class='ctx'> </div><div class='del'>-        /* NOTE: it's BE, but no worry */</div><div class='del'>-        object-&gt;signedversion = ev-&gt;u.releasebr.version;</div><div class='del'>-        object-&gt;sign_info = ev-&gt;u.releasebr.sign_info;</div><div class='add'>+    /* NOTE: it's BE, but no worry */</div><div class='add'>+    object-&gt;signedversion = ev-&gt;u.releasebr.version;</div><div class='add'>+    object-&gt;sign_info = ev-&gt;u.releasebr.sign_info;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return object;</div><div class='add'>+    return object;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct gf_tw_timer_list *</div><div class='del'>-br_initialize_timer (xlator_t *this, br_object_t *object, br_child_t *child,</div><div class='del'>-                     changelog_event_t *ev)</div><div class='add'>+br_initialize_timer(xlator_t *this, br_object_t *object, br_child_t *child,</div><div class='add'>+                    changelog_event_t *ev)</div><div class='ctx'> {</div><div class='del'>-        br_private_t  *priv = NULL;</div><div class='del'>-        struct gf_tw_timer_list *timer = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct gf_tw_timer_list *timer = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        timer = mem_get0 (child-&gt;timer_pool);</div><div class='del'>-        if (!timer)</div><div class='del'>-                goto out;</div><div class='del'>-        INIT_LIST_HEAD (&amp;timer-&gt;entry);</div><div class='add'>+    timer = mem_get0(child-&gt;timer_pool);</div><div class='add'>+    if (!timer)</div><div class='add'>+        goto out;</div><div class='add'>+    INIT_LIST_HEAD(&amp;timer-&gt;entry);</div><div class='ctx'> </div><div class='del'>-        timer-&gt;expires = priv-&gt;expiry_time;</div><div class='del'>-        if (!timer-&gt;expires)</div><div class='del'>-                timer-&gt;expires = 1;</div><div class='add'>+    timer-&gt;expires = priv-&gt;expiry_time;</div><div class='add'>+    if (!timer-&gt;expires)</div><div class='add'>+        timer-&gt;expires = 1;</div><div class='ctx'> </div><div class='del'>-        timer-&gt;data     = object;</div><div class='del'>-        timer-&gt;function = br_add_object_to_queue;</div><div class='del'>-        gf_tw_add_timer (priv-&gt;timer_wheel, timer);</div><div class='add'>+    timer-&gt;data = object;</div><div class='add'>+    timer-&gt;function = br_add_object_to_queue;</div><div class='add'>+    gf_tw_add_timer(priv-&gt;timer_wheel, timer);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return timer;</div><div class='add'>+    return timer;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_schedule_object_reopen (xlator_t *this, br_object_t *object,</div><div class='del'>-                           br_child_t *child, changelog_event_t *ev)</div><div class='add'>+br_schedule_object_reopen(xlator_t *this, br_object_t *object,</div><div class='add'>+                          br_child_t *child, changelog_event_t *ev)</div><div class='ctx'> {</div><div class='del'>-        struct gf_tw_timer_list *timer = NULL;</div><div class='del'>-</div><div class='del'>-        timer = br_initialize_timer (this, object, child, ev);</div><div class='del'>-        if (!timer)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SET_TIMER_FAILED,</div><div class='del'>-                        "Failed to allocate object expiry timer [GFID: %s]",</div><div class='del'>-                        uuid_utoa (object-&gt;gfid));</div><div class='del'>-        return timer ? 0 : -1;</div><div class='add'>+    struct gf_tw_timer_list *timer = NULL;</div><div class='add'>+</div><div class='add'>+    timer = br_initialize_timer(this, object, child, ev);</div><div class='add'>+    if (!timer)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SET_TIMER_FAILED,</div><div class='add'>+               "Failed to allocate object expiry timer [GFID: %s]",</div><div class='add'>+               uuid_utoa(object-&gt;gfid));</div><div class='add'>+    return timer ? 0 : -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_object_quicksign (xlator_t *this, br_object_t *object)</div><div class='add'>+br_object_quicksign(xlator_t *this, br_object_t *object)</div><div class='ctx'> {</div><div class='del'>-        br_add_object_to_queue (NULL, object, 0ULL);</div><div class='del'>-        return 0;</div><div class='add'>+    br_add_object_to_queue(NULL, object, 0ULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -796,148 +802,146 @@ br_object_quicksign (xlator_t *this, br_object_t *object)</div><div class='ctx'>  * object as a single alloc and bifurcate their respective pointers.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-br_brick_callback (void *xl, char *brick,</div><div class='del'>-                   void *data, changelog_event_t *ev)</div><div class='add'>+br_brick_callback(void *xl, char *brick, void *data, changelog_event_t *ev)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret       = 0;</div><div class='del'>-        uuid_t           gfid      = {0,};</div><div class='del'>-        xlator_t        *this      = NULL;</div><div class='del'>-        br_object_t     *object    = NULL;</div><div class='del'>-        br_child_t      *child     = NULL;</div><div class='del'>-        br_sign_state_t  sign_info = BR_SIGN_INVALID;</div><div class='del'>-</div><div class='del'>-        this = xl;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, ev, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (ev-&gt;ev_type == CHANGELOG_OP_TYPE_BR_RELEASE);</div><div class='del'>-        GF_ASSERT (!gf_uuid_is_null (ev-&gt;u.releasebr.gfid));</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (gfid, ev-&gt;u.releasebr.gfid);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "RELEASE EVENT [GFID %s]",</div><div class='del'>-                      uuid_utoa (gfid));</div><div class='del'>-</div><div class='del'>-        child = br_get_child_from_brick_path (this, brick);</div><div class='del'>-        if (!child) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SUBVOL_FAILED,</div><div class='del'>-                        "failed to get the subvolume for the brick %s", brick);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        object = br_initialize_object (this, child, ev);</div><div class='del'>-        if (!object) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate object memory [GFID: %s]",</div><div class='del'>-                        uuid_utoa (gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* sanity check */</div><div class='del'>-        sign_info = ntohl (object-&gt;sign_info);</div><div class='del'>-        GF_ASSERT (sign_info != BR_SIGN_NORMAL);</div><div class='del'>-</div><div class='del'>-        if (sign_info == BR_SIGN_REOPEN_WAIT)</div><div class='del'>-                ret = br_schedule_object_reopen (this, object, child, ev);</div><div class='del'>-        else</div><div class='del'>-                ret = br_object_quicksign (this, object);</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                goto free_object;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "-&gt;callback: brick [%s], type [%d]\n",</div><div class='del'>-                      brick, ev-&gt;ev_type);</div><div class='del'>-        return;</div><div class='del'>-</div><div class='del'>- free_object:</div><div class='del'>-        GF_FREE (object);</div><div class='del'>- out:</div><div class='del'>-        return;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    br_object_t *object = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    br_sign_state_t sign_info = BR_SIGN_INVALID;</div><div class='add'>+</div><div class='add'>+    this = xl;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, ev, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(ev-&gt;ev_type == CHANGELOG_OP_TYPE_BR_RELEASE);</div><div class='add'>+    GF_ASSERT(!gf_uuid_is_null(ev-&gt;u.releasebr.gfid));</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(gfid, ev-&gt;u.releasebr.gfid);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "RELEASE EVENT [GFID %s]", uuid_utoa(gfid));</div><div class='add'>+</div><div class='add'>+    child = br_get_child_from_brick_path(this, brick);</div><div class='add'>+    if (!child) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SUBVOL_FAILED,</div><div class='add'>+               "failed to get the subvolume for the brick %s", brick);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    object = br_initialize_object(this, child, ev);</div><div class='add'>+    if (!object) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate object memory [GFID: %s]", uuid_utoa(gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* sanity check */</div><div class='add'>+    sign_info = ntohl(object-&gt;sign_info);</div><div class='add'>+    GF_ASSERT(sign_info != BR_SIGN_NORMAL);</div><div class='add'>+</div><div class='add'>+    if (sign_info == BR_SIGN_REOPEN_WAIT)</div><div class='add'>+        ret = br_schedule_object_reopen(this, object, child, ev);</div><div class='add'>+    else</div><div class='add'>+        ret = br_object_quicksign(this, object);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto free_object;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "-&gt;callback: brick [%s], type [%d]\n", brick,</div><div class='add'>+                 ev-&gt;ev_type);</div><div class='add'>+    return;</div><div class='add'>+</div><div class='add'>+free_object:</div><div class='add'>+    GF_FREE(object);</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_fill_brick_spec (struct gf_brick_spec *brick, char *path)</div><div class='add'>+br_fill_brick_spec(struct gf_brick_spec *brick, char *path)</div><div class='ctx'> {</div><div class='del'>-        brick-&gt;brick_path = gf_strdup (path);</div><div class='del'>-        brick-&gt;filter = CHANGELOG_OP_TYPE_BR_RELEASE;</div><div class='del'>-</div><div class='del'>-        brick-&gt;init         = br_brick_init;</div><div class='del'>-        brick-&gt;fini         = br_brick_fini;</div><div class='del'>-        brick-&gt;callback     = br_brick_callback;</div><div class='del'>-        brick-&gt;connected    = NULL;</div><div class='del'>-        brick-&gt;disconnected = NULL;</div><div class='add'>+    brick-&gt;brick_path = gf_strdup(path);</div><div class='add'>+    brick-&gt;filter = CHANGELOG_OP_TYPE_BR_RELEASE;</div><div class='add'>+</div><div class='add'>+    brick-&gt;init = br_brick_init;</div><div class='add'>+    brick-&gt;fini = br_brick_fini;</div><div class='add'>+    brick-&gt;callback = br_brick_callback;</div><div class='add'>+    brick-&gt;connected = NULL;</div><div class='add'>+    brick-&gt;disconnected = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-br_check_object_need_sign (xlator_t *this, dict_t *xattr, br_child_t *child)</div><div class='add'>+br_check_object_need_sign(xlator_t *this, dict_t *xattr, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret       = -1;</div><div class='del'>-        gf_boolean_t         need_sign = _gf_false;</div><div class='del'>-        br_isignature_out_t *sign      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, xattr, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_ptr (xattr, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='del'>-                            (void **)&amp;sign);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SIGN_FAILED,</div><div class='del'>-                        "failed to get object signature info");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t need_sign = _gf_false;</div><div class='add'>+    br_isignature_out_t *sign = NULL;</div><div class='ctx'> </div><div class='del'>-        /* Object has been opened and hence dirty. Do not sign it */</div><div class='del'>-        if (sign-&gt;stale)</div><div class='del'>-                need_sign = _gf_true;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, xattr, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return need_sign;</div><div class='del'>-}</div><div class='add'>+    ret = dict_get_ptr(xattr, GLUSTERFS_GET_OBJECT_SIGNATURE, (void **)&amp;sign);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_SIGN_FAILED,</div><div class='add'>+               "failed to get object signature info");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    /* Object has been opened and hence dirty. Do not sign it */</div><div class='add'>+    if (sign-&gt;stale)</div><div class='add'>+        need_sign = _gf_true;</div><div class='ctx'> </div><div class='add'>+out:</div><div class='add'>+    return need_sign;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_prepare_loc (xlator_t *this, br_child_t *child, loc_t *parent,</div><div class='del'>-                gf_dirent_t *entry, loc_t *loc)</div><div class='add'>+br_prepare_loc(xlator_t *this, br_child_t *child, loc_t *parent,</div><div class='add'>+               gf_dirent_t *entry, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int32_t  ret   = -1;</div><div class='del'>-        inode_t *inode = NULL;</div><div class='del'>-</div><div class='del'>-        inode = inode_grep (child-&gt;table, parent-&gt;inode, entry-&gt;d_name);</div><div class='del'>-        if (!inode)</div><div class='del'>-                loc-&gt;inode = inode_new (child-&gt;table);</div><div class='del'>-        else {</div><div class='del'>-                loc-&gt;inode = inode;</div><div class='del'>-                if (loc-&gt;inode-&gt;ia_type != IA_IFREG) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "%s is not a regular "</div><div class='del'>-                                      "file", entry-&gt;d_name);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc-&gt;parent = inode_ref (parent-&gt;inode);</div><div class='del'>-        gf_uuid_copy (loc-&gt;pargfid, parent-&gt;inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        ret = inode_path (parent-&gt;inode, entry-&gt;d_name, (char **)&amp;loc-&gt;path);</div><div class='del'>-        if (ret &lt; 0 || !loc-&gt;path) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_PATH_FAILED,</div><div class='del'>-                        "inode_path on %s (parent: %s) failed", entry-&gt;d_name,</div><div class='del'>-                        uuid_utoa (parent-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc-&gt;name = strrchr (loc-&gt;path, '/');</div><div class='del'>-        if (loc-&gt;name)</div><div class='del'>-                loc-&gt;name++;</div><div class='del'>-</div><div class='del'>-        ret = 1;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+</div><div class='add'>+    inode = inode_grep(child-&gt;table, parent-&gt;inode, entry-&gt;d_name);</div><div class='add'>+    if (!inode)</div><div class='add'>+        loc-&gt;inode = inode_new(child-&gt;table);</div><div class='add'>+    else {</div><div class='add'>+        loc-&gt;inode = inode;</div><div class='add'>+        if (loc-&gt;inode-&gt;ia_type != IA_IFREG) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "%s is not a regular "</div><div class='add'>+                         "file",</div><div class='add'>+                         entry-&gt;d_name);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc-&gt;parent = inode_ref(parent-&gt;inode);</div><div class='add'>+    gf_uuid_copy(loc-&gt;pargfid, parent-&gt;inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    ret = inode_path(parent-&gt;inode, entry-&gt;d_name, (char **)&amp;loc-&gt;path);</div><div class='add'>+    if (ret &lt; 0 || !loc-&gt;path) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_PATH_FAILED,</div><div class='add'>+               "inode_path on %s (parent: %s) failed", entry-&gt;d_name,</div><div class='add'>+               uuid_utoa(parent-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc-&gt;name = strrchr(loc-&gt;path, '/');</div><div class='add'>+    if (loc-&gt;name)</div><div class='add'>+        loc-&gt;name++;</div><div class='add'>+</div><div class='add'>+    ret = 1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -951,150 +955,161 @@ out:</div><div class='ctx'>  * (though not back to itself :))</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-bitd_oneshot_crawl (xlator_t *subvol,</div><div class='del'>-                    gf_dirent_t *entry, loc_t *parent, void *data)</div><div class='add'>+bitd_oneshot_crawl(xlator_t *subvol, gf_dirent_t *entry, loc_t *parent,</div><div class='add'>+                   void *data)</div><div class='ctx'> {</div><div class='del'>-        int           op_errno     = 0;</div><div class='del'>-        br_child_t   *child        = NULL;</div><div class='del'>-        xlator_t     *this         = NULL;</div><div class='del'>-        loc_t         loc          = {0, };</div><div class='del'>-        struct iatt   iatt         = {0, };</div><div class='del'>-        struct iatt   parent_buf   = {0, };</div><div class='del'>-        dict_t       *xattr        = NULL;</div><div class='del'>-        int32_t       ret          = -1;</div><div class='del'>-        inode_t      *linked_inode = NULL;</div><div class='del'>-        gf_boolean_t  need_signing = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", subvol, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", data, out);</div><div class='del'>-</div><div class='del'>-        child = data;</div><div class='del'>-        this = child-&gt;this;</div><div class='del'>-</div><div class='del'>-        ret = br_prepare_loc (this, child, parent, entry, &amp;loc);</div><div class='del'>-        if (!ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (child-&gt;xl, &amp;loc, &amp;iatt, &amp;parent_buf, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                br_log_object_path (this, "lookup", loc.path, -ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        linked_inode = inode_link (loc.inode, parent-&gt;inode, loc.name, &amp;iatt);</div><div class='del'>-        if (linked_inode)</div><div class='del'>-                inode_lookup (linked_inode);</div><div class='del'>-</div><div class='del'>-        if (iatt.ia_type != IA_IFREG) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,  "%s is not a regular file, "</div><div class='del'>-                              "skipping..", entry-&gt;d_name);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt iatt = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt parent_buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    gf_boolean_t need_signing = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", subvol, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", data, out);</div><div class='add'>+</div><div class='add'>+    child = data;</div><div class='add'>+    this = child-&gt;this;</div><div class='add'>+</div><div class='add'>+    ret = br_prepare_loc(this, child, parent, entry, &amp;loc);</div><div class='add'>+    if (!ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(child-&gt;xl, &amp;loc, &amp;iatt, &amp;parent_buf, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        br_log_object_path(this, "lookup", loc.path, -ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    linked_inode = inode_link(loc.inode, parent-&gt;inode, loc.name, &amp;iatt);</div><div class='add'>+    if (linked_inode)</div><div class='add'>+        inode_lookup(linked_inode);</div><div class='add'>+</div><div class='add'>+    if (iatt.ia_type != IA_IFREG) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "%s is not a regular file, "</div><div class='add'>+                     "skipping..",</div><div class='add'>+                     entry-&gt;d_name);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * As of now, 2 cases  are possible and handled.</div><div class='add'>+     * 1) GlusterFS is upgraded from a previous version which does not</div><div class='add'>+     *    have any idea about bit-rot and have data in the filesystem.</div><div class='add'>+     *    In this case syncop_getxattr fails with ENODATA and the object</div><div class='add'>+     *    is signed. (In real, when crawler sends lookup, bit-rot-stub</div><div class='add'>+     *    creates the xattrs before returning lookup reply)</div><div class='add'>+     * 2) Bit-rot was not enabled or BitD was does for some reasons, during</div><div class='add'>+     *    which some files were created, but since BitD was down, were not</div><div class='add'>+     *    signed.</div><div class='add'>+     * If the file was just created and was being written some data when</div><div class='add'>+     * the down BitD came up, then bit-rot stub should be intelligent to</div><div class='add'>+     * identify this case (by comparing the ongoing version or by checking</div><div class='add'>+     * if there are any fds present for that inode) and handle properly.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    if (bitd_is_bad_file(this, child, &amp;loc, NULL)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SKIP_OBJECT,</div><div class='add'>+               "Entry [%s] is marked corrupted.. skipping.", loc.path);</div><div class='add'>+        goto unref_inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(child-&gt;xl, &amp;loc, &amp;xattr,</div><div class='add'>+                          GLUSTERFS_GET_OBJECT_SIGNATURE, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        br_log_object(this, "getxattr", linked_inode-&gt;gfid, op_errno);</div><div class='ctx'> </div><div class='ctx'>         /**</div><div class='del'>-         * As of now, 2 cases  are possible and handled.</div><div class='del'>-         * 1) GlusterFS is upgraded from a previous version which does not</div><div class='del'>-         *    have any idea about bit-rot and have data in the filesystem.</div><div class='del'>-         *    In this case syncop_getxattr fails with ENODATA and the object</div><div class='del'>-         *    is signed. (In real, when crawler sends lookup, bit-rot-stub</div><div class='del'>-         *    creates the xattrs before returning lookup reply)</div><div class='del'>-         * 2) Bit-rot was not enabled or BitD was does for some reasons, during</div><div class='del'>-         *    which some files were created, but since BitD was down, were not</div><div class='del'>-         *    signed.</div><div class='del'>-         * If the file was just created and was being written some data when</div><div class='del'>-         * the down BitD came up, then bit-rot stub should be intelligent to</div><div class='del'>-         * identify this case (by comparing the ongoing version or by checking</div><div class='del'>-         * if there are any fds present for that inode) and handle properly.</div><div class='add'>+         * No need to sign the zero byte objects as the signing</div><div class='add'>+         * happens upon first modification of the object.</div><div class='ctx'>          */</div><div class='add'>+        if (op_errno == ENODATA &amp;&amp; (iatt.ia_size != 0))</div><div class='add'>+            need_signing = _gf_true;</div><div class='add'>+        if (op_errno == EINVAL)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                   BRB_MSG_PARTIAL_VERSION_PRESENCE,</div><div class='add'>+                   "Partial "</div><div class='add'>+                   "version xattr presence detected, ignoring "</div><div class='add'>+                   "[GFID: %s]",</div><div class='add'>+                   uuid_utoa(linked_inode-&gt;gfid));</div><div class='add'>+    } else {</div><div class='add'>+        need_signing = br_check_object_need_sign(this, xattr, child);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!need_signing)</div><div class='add'>+        goto unref_dict;</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_TRIGGER_SIGN,</div><div class='add'>+           "Triggering signing for %s [GFID: %s | Brick: %s]", loc.path,</div><div class='add'>+           uuid_utoa(linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='add'>+    br_trigger_sign(this, child, linked_inode, &amp;loc, _gf_true);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+unref_dict:</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+unref_inode:</div><div class='add'>+    inode_unref(linked_inode);</div><div class='add'>+out:</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (bitd_is_bad_file (this, child, &amp;loc, NULL)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SKIP_OBJECT,</div><div class='del'>-                        "Entry [%s] is marked corrupted.. skipping.", loc.path);</div><div class='del'>-                goto unref_inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (child-&gt;xl, &amp;loc, &amp;xattr,</div><div class='del'>-                               GLUSTERFS_GET_OBJECT_SIGNATURE, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                br_log_object (this, "getxattr", linked_inode-&gt;gfid, op_errno);</div><div class='del'>-</div><div class='del'>-                /**</div><div class='del'>-                 * No need to sign the zero byte objects as the signing</div><div class='del'>-                 * happens upon first modification of the object.</div><div class='del'>-                 */</div><div class='del'>-                if (op_errno == ENODATA &amp;&amp; (iatt.ia_size != 0))</div><div class='del'>-                        need_signing = _gf_true;</div><div class='del'>-                if (op_errno == EINVAL)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                BRB_MSG_PARTIAL_VERSION_PRESENCE, "Partial "</div><div class='del'>-                                "version xattr presence detected, ignoring "</div><div class='del'>-                                "[GFID: %s]", uuid_utoa (linked_inode-&gt;gfid));</div><div class='del'>-        } else {</div><div class='del'>-                need_signing = br_check_object_need_sign (this, xattr, child);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!need_signing)</div><div class='del'>-                goto unref_dict;</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_TRIGGER_SIGN,</div><div class='del'>-                "Triggering signing for %s [GFID: %s | Brick: %s]",</div><div class='del'>-                loc.path, uuid_utoa (linked_inode-&gt;gfid), child-&gt;brick_path);</div><div class='del'>-        br_trigger_sign (this, child, linked_inode, &amp;loc, _gf_true);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- unref_dict:</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>- unref_inode:</div><div class='del'>-        inode_unref (linked_inode);</div><div class='del'>- out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define BR_CRAWL_THROTTLE_COUNT 50</div><div class='del'>-#define BR_CRAWL_THROTTLE_ZZZ   5</div><div class='add'>+#define BR_CRAWL_THROTTLE_ZZZ 5</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-br_oneshot_signer (void *arg)</div><div class='add'>+br_oneshot_signer(void *arg)</div><div class='ctx'> {</div><div class='del'>-        loc_t       loc   = {0,};</div><div class='del'>-        xlator_t   *this  = NULL;</div><div class='del'>-        br_child_t *child = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='ctx'> </div><div class='del'>-        child = arg;</div><div class='del'>-        this = child-&gt;this;</div><div class='add'>+    child = arg;</div><div class='add'>+    this = child-&gt;this;</div><div class='ctx'> </div><div class='del'>-        THIS = this;</div><div class='add'>+    THIS = this;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_CRAWLING_START,</div><div class='del'>-                "Crawling brick [%s], scanning for unsigned objects",</div><div class='del'>-                child-&gt;brick_path);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_CRAWLING_START,</div><div class='add'>+           "Crawling brick [%s], scanning for unsigned objects",</div><div class='add'>+           child-&gt;brick_path);</div><div class='ctx'> </div><div class='del'>-        loc.inode = child-&gt;table-&gt;root;</div><div class='del'>-        (void) syncop_ftw_throttle</div><div class='del'>-                         (child-&gt;xl, &amp;loc,</div><div class='del'>-                         GF_CLIENT_PID_BITD, child, bitd_oneshot_crawl,</div><div class='del'>-                         BR_CRAWL_THROTTLE_COUNT, BR_CRAWL_THROTTLE_ZZZ);</div><div class='add'>+    loc.inode = child-&gt;table-&gt;root;</div><div class='add'>+    (void)syncop_ftw_throttle(child-&gt;xl, &amp;loc, GF_CLIENT_PID_BITD, child,</div><div class='add'>+                              bitd_oneshot_crawl, BR_CRAWL_THROTTLE_COUNT,</div><div class='add'>+                              BR_CRAWL_THROTTLE_ZZZ);</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_CRAWLING_FINISH,</div><div class='del'>-                "Completed crawling brick [%s]", child-&gt;brick_path);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_CRAWLING_FINISH,</div><div class='add'>+           "Completed crawling brick [%s]", child-&gt;brick_path);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_set_child_state (br_child_t *child, br_child_state_t state)</div><div class='add'>+br_set_child_state(br_child_t *child, br_child_state_t state)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;child-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                _br_set_child_state (child, state);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;child-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;child-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        _br_set_child_state(child, state);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;child-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1109,160 +1124,159 @@ br_set_child_state (br_child_t *child, br_child_state_t state)</div><div class='ctx'>  * notifications.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_enact_signer (xlator_t *this, br_child_t *child, br_stub_init_t *stub)</div><div class='add'>+br_enact_signer(xlator_t *this, br_child_t *child, br_stub_init_t *stub)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct gf_brick_spec *brick = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        brick = GF_CALLOC (1, sizeof (struct gf_brick_spec),</div><div class='del'>-                           gf_common_mt_gf_brick_spec_t);</div><div class='del'>-        if (!brick)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        br_fill_brick_spec (brick, stub-&gt;export);</div><div class='del'>-        ret = gf_changelog_register_generic</div><div class='del'>-                         (brick, 1, 1, this-&gt;ctx-&gt;cmd_args.log_file, -1, this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        BRB_MSG_REGISTER_FAILED, "Register to changelog "</div><div class='del'>-                        "failed");</div><div class='del'>-                goto dealloc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        child-&gt;threadrunning = 0;</div><div class='del'>-        ret = gf_thread_create (&amp;child-&gt;thread, NULL, br_oneshot_signer, child,</div><div class='del'>-                                "brosign");</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SPAWN_FAILED,</div><div class='del'>-                        "failed to spawn FS crawler thread");</div><div class='del'>-        else</div><div class='del'>-                child-&gt;threadrunning = 1;</div><div class='del'>-</div><div class='del'>-        /* it's OK to continue, "old" objects would be signed when modified */</div><div class='del'>-        list_add_tail (&amp;child-&gt;list, &amp;priv-&gt;signing);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- dealloc:</div><div class='del'>-        GF_FREE (brick);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct gf_brick_spec *brick = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    brick = GF_CALLOC(1, sizeof(struct gf_brick_spec),</div><div class='add'>+                      gf_common_mt_gf_brick_spec_t);</div><div class='add'>+    if (!brick)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    br_fill_brick_spec(brick, stub-&gt;export);</div><div class='add'>+    ret = gf_changelog_register_generic(brick, 1, 1,</div><div class='add'>+                                        this-&gt;ctx-&gt;cmd_args.log_file, -1, this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRB_MSG_REGISTER_FAILED,</div><div class='add'>+               "Register to changelog "</div><div class='add'>+               "failed");</div><div class='add'>+        goto dealloc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    child-&gt;threadrunning = 0;</div><div class='add'>+    ret = gf_thread_create(&amp;child-&gt;thread, NULL, br_oneshot_signer, child,</div><div class='add'>+                           "brosign");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_SPAWN_FAILED,</div><div class='add'>+               "failed to spawn FS crawler thread");</div><div class='add'>+    else</div><div class='add'>+        child-&gt;threadrunning = 1;</div><div class='add'>+</div><div class='add'>+    /* it's OK to continue, "old" objects would be signed when modified */</div><div class='add'>+    list_add_tail(&amp;child-&gt;list, &amp;priv-&gt;signing);</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+dealloc:</div><div class='add'>+    GF_FREE(brick);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_launch_scrubber (xlator_t *this, br_child_t *child,</div><div class='del'>-                    struct br_scanfs *fsscan, struct br_scrubber *fsscrub)</div><div class='add'>+br_launch_scrubber(xlator_t *this, br_child_t *child, struct br_scanfs *fsscan,</div><div class='add'>+                   struct br_scrubber *fsscrub)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-        ret = gf_thread_create (&amp;child-&gt;thread, NULL, br_fsscanner, child,</div><div class='del'>-                                "brfsscan");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ALERT, 0, BRB_MSG_SPAWN_FAILED,</div><div class='del'>-                        "failed to spawn bitrot scrubber daemon [Brick: %s]",</div><div class='del'>-                        child-&gt;brick_path);</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Signal monitor to kick off state machine*/</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (!scrub_monitor-&gt;inited)</div><div class='del'>-                        pthread_cond_signal (&amp;scrub_monitor-&gt;cond);</div><div class='del'>-                scrub_monitor-&gt;inited = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Everything has been setup.. add this subvolume to scrubbers</div><div class='del'>-         * list.</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;fsscrub-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;child-&gt;list, &amp;fsscrub-&gt;scrublist);</div><div class='del'>-                pthread_cond_broadcast (&amp;fsscrub-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fsscrub-&gt;mutex);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    ret = gf_thread_create(&amp;child-&gt;thread, NULL, br_fsscanner, child,</div><div class='add'>+                           "brfsscan");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ALERT, 0, BRB_MSG_SPAWN_FAILED,</div><div class='add'>+               "failed to spawn bitrot scrubber daemon [Brick: %s]",</div><div class='add'>+               child-&gt;brick_path);</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Signal monitor to kick off state machine*/</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!scrub_monitor-&gt;inited)</div><div class='add'>+            pthread_cond_signal(&amp;scrub_monitor-&gt;cond);</div><div class='add'>+        scrub_monitor-&gt;inited = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Everything has been setup.. add this subvolume to scrubbers</div><div class='add'>+     * list.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;fsscrub-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;child-&gt;list, &amp;fsscrub-&gt;scrublist);</div><div class='add'>+        pthread_cond_broadcast(&amp;fsscrub-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fsscrub-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_enact_scrubber (xlator_t *this, br_child_t *child)</div><div class='add'>+br_enact_scrubber(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct br_scanfs *fsscan = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_scanfs *fsscan = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        fsscan = &amp;child-&gt;fsscan;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    fsscan = &amp;child-&gt;fsscan;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * if this child already witnesses a successful connection earlier</div><div class='del'>-         * there's no need to initialize mutexes, condvars, etc..</div><div class='del'>-         */</div><div class='del'>-        if (_br_child_witnessed_connection (child))</div><div class='del'>-                return br_launch_scrubber (this, child, fsscan, fsscrub);</div><div class='add'>+    /**</div><div class='add'>+     * if this child already witnesses a successful connection earlier</div><div class='add'>+     * there's no need to initialize mutexes, condvars, etc..</div><div class='add'>+     */</div><div class='add'>+    if (_br_child_witnessed_connection(child))</div><div class='add'>+        return br_launch_scrubber(this, child, fsscan, fsscrub);</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;fsscan-&gt;entrylock);</div><div class='del'>-        pthread_mutex_init (&amp;fsscan-&gt;waitlock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;fsscan-&gt;waitcond, NULL);</div><div class='add'>+    LOCK_INIT(&amp;fsscan-&gt;entrylock);</div><div class='add'>+    pthread_mutex_init(&amp;fsscan-&gt;waitlock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;fsscan-&gt;waitcond, NULL);</div><div class='ctx'> </div><div class='del'>-        fsscan-&gt;entries = 0;</div><div class='del'>-        INIT_LIST_HEAD (&amp;fsscan-&gt;queued);</div><div class='del'>-        INIT_LIST_HEAD (&amp;fsscan-&gt;ready);</div><div class='add'>+    fsscan-&gt;entries = 0;</div><div class='add'>+    INIT_LIST_HEAD(&amp;fsscan-&gt;queued);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fsscan-&gt;ready);</div><div class='ctx'> </div><div class='del'>-        ret = br_launch_scrubber (this, child, fsscan, fsscrub);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = br_launch_scrubber(this, child, fsscan, fsscrub);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        LOCK_DESTROY (&amp;fsscan-&gt;entrylock);</div><div class='del'>-        pthread_mutex_destroy (&amp;fsscan-&gt;waitlock);</div><div class='del'>-        pthread_cond_destroy (&amp;fsscan-&gt;waitcond);</div><div class='add'>+error_return:</div><div class='add'>+    LOCK_DESTROY(&amp;fsscan-&gt;entrylock);</div><div class='add'>+    pthread_mutex_destroy(&amp;fsscan-&gt;waitlock);</div><div class='add'>+    pthread_cond_destroy(&amp;fsscan-&gt;waitcond);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_child_enaction (xlator_t *this, br_child_t *child, br_stub_init_t *stub)</div><div class='add'>+br_child_enaction(xlator_t *this, br_child_t *child, br_stub_init_t *stub)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        br_private_t *priv = this-&gt;private;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;child-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;iamscrubber)</div><div class='del'>-                        ret = br_enact_scrubber (this, child);</div><div class='del'>-                else</div><div class='del'>-                        ret = br_enact_signer (this, child, stub);</div><div class='del'>-</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        child-&gt;witnessed = 1;</div><div class='del'>-                        _br_set_child_state (child, BR_CHILD_STATE_CONNECTED);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                                0, BRB_MSG_CONNECTED_TO_BRICK,</div><div class='del'>-                                "Connected to brick %s..", child-&gt;brick_path);</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;child-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;iamscrubber)</div><div class='add'>+            ret = br_enact_scrubber(this, child);</div><div class='add'>+        else</div><div class='add'>+            ret = br_enact_signer(this, child, stub);</div><div class='add'>+</div><div class='add'>+        if (!ret) {</div><div class='add'>+            child-&gt;witnessed = 1;</div><div class='add'>+            _br_set_child_state(child, BR_CHILD_STATE_CONNECTED);</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_CONNECTED_TO_BRICK,</div><div class='add'>+                   "Connected to brick %s..", child-&gt;brick_path);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;child-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;child-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1273,129 +1287,132 @@ br_child_enaction (xlator_t *this, br_child_t *child, br_stub_init_t *stub)</div><div class='ctx'>  * process either acts as a signer or a scrubber.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-br_brick_connect (xlator_t *this, br_child_t *child)</div><div class='add'>+br_brick_connect(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret      = -1;</div><div class='del'>-        loc_t           loc      = {0, };</div><div class='del'>-        struct iatt     buf      = {0, };</div><div class='del'>-        struct iatt     parent   = {0, };</div><div class='del'>-        br_stub_init_t *stub     = NULL;</div><div class='del'>-        dict_t         *xattr    = NULL;</div><div class='del'>-        int             op_errno = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, child, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-</div><div class='del'>-        br_child_set_scrub_state (child, _gf_false);</div><div class='del'>-        br_set_child_state (child, BR_CHILD_STATE_INITIALIZING);</div><div class='del'>-</div><div class='del'>-        loc.inode = inode_ref (child-&gt;table-&gt;root);</div><div class='del'>-        gf_uuid_copy (loc.gfid, loc.inode-&gt;gfid);</div><div class='del'>-        loc.path = gf_strdup ("/");</div><div class='del'>-</div><div class='del'>-        ret = syncop_lookup (child-&gt;xl, &amp;loc, &amp;buf, &amp;parent, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        BRB_MSG_LOOKUP_FAILED, "lookup on root failed");</div><div class='del'>-                goto wipeloc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (child-&gt;xl, &amp;loc, &amp;xattr,</div><div class='del'>-                               GLUSTERFS_GET_BR_STUB_INIT_TIME, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        BRB_MSG_GET_INFO_FAILED, "failed to get stub info");</div><div class='del'>-                goto wipeloc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_ptr (xattr, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='del'>-                            (void **)&amp;stub);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_INFO_FAILED,</div><div class='del'>-                        "failed to extract stub information");</div><div class='del'>-                goto free_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (child-&gt;brick_path, stub-&gt;export, strlen (stub-&gt;export) + 1);</div><div class='del'>-        child-&gt;tv.tv_sec = ntohl (stub-&gt;timebuf[0]);</div><div class='del'>-        child-&gt;tv.tv_usec = ntohl (stub-&gt;timebuf[1]);</div><div class='del'>-</div><div class='del'>-        ret = br_child_enaction (this, child, stub);</div><div class='del'>-</div><div class='del'>- free_dict:</div><div class='del'>-        dict_unref (xattr);</div><div class='del'>- wipeloc:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>- out:</div><div class='del'>-        if (ret)</div><div class='del'>-                br_set_child_state (child, BR_CHILD_STATE_CONNFAILED);</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt parent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_stub_init_t *stub = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, child, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+</div><div class='add'>+    br_child_set_scrub_state(child, _gf_false);</div><div class='add'>+    br_set_child_state(child, BR_CHILD_STATE_INITIALIZING);</div><div class='add'>+</div><div class='add'>+    loc.inode = inode_ref(child-&gt;table-&gt;root);</div><div class='add'>+    gf_uuid_copy(loc.gfid, loc.inode-&gt;gfid);</div><div class='add'>+    loc.path = gf_strdup("/");</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(child-&gt;xl, &amp;loc, &amp;buf, &amp;parent, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_LOOKUP_FAILED,</div><div class='add'>+               "lookup on root failed");</div><div class='add'>+        goto wipeloc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(child-&gt;xl, &amp;loc, &amp;xattr,</div><div class='add'>+                          GLUSTERFS_GET_BR_STUB_INIT_TIME, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, BRB_MSG_GET_INFO_FAILED,</div><div class='add'>+               "failed to get stub info");</div><div class='add'>+        goto wipeloc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_ptr(xattr, GLUSTERFS_GET_BR_STUB_INIT_TIME, (void **)&amp;stub);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_GET_INFO_FAILED,</div><div class='add'>+               "failed to extract stub information");</div><div class='add'>+        goto free_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(child-&gt;brick_path, stub-&gt;export, strlen(stub-&gt;export) + 1);</div><div class='add'>+    child-&gt;tv.tv_sec = ntohl(stub-&gt;timebuf[0]);</div><div class='add'>+    child-&gt;tv.tv_usec = ntohl(stub-&gt;timebuf[1]);</div><div class='add'>+</div><div class='add'>+    ret = br_child_enaction(this, child, stub);</div><div class='add'>+</div><div class='add'>+free_dict:</div><div class='add'>+    dict_unref(xattr);</div><div class='add'>+wipeloc:</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+out:</div><div class='add'>+    if (ret)</div><div class='add'>+        br_set_child_state(child, BR_CHILD_STATE_CONNFAILED);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: cleanup signer */</div><div class='ctx'> static int32_t</div><div class='del'>-br_cleanup_signer (xlator_t *this, br_child_t *child)</div><div class='add'>+br_cleanup_signer(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_cleanup_scrubber (xlator_t *this, br_child_t *child)</div><div class='add'>+br_cleanup_scrubber(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct br_scrubber *fsscrub = NULL;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-</div><div class='del'>-        priv    = this-&gt;private;</div><div class='del'>-        fsscrub = &amp;priv-&gt;fsscrub;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='del'>-</div><div class='del'>-        if (_br_is_child_scrub_active (child)) {</div><div class='del'>-                scrub_monitor-&gt;active_child_count--;</div><div class='del'>-                br_child_set_scrub_state (child, _gf_false);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * 0x0: child (brick) goes out of rotation</div><div class='del'>-         *</div><div class='del'>-         * This is fully safe w.r.t. entries for this child being actively</div><div class='del'>-         * scrubbed. Each of the scrubber thread(s) would finish scrubbing</div><div class='del'>-         * the entry (probably failing due to disconnection) and either</div><div class='del'>-         * putting the entry back into the queue or continuing further.</div><div class='del'>-         * Either way, pending entries for this child's queue need not be</div><div class='del'>-         * drained; entries just sit there in the queued/ready list to be</div><div class='del'>-         * consumed later upon re-connection.</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;fsscrub-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                list_del_init (&amp;child-&gt;list);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;fsscrub-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * 0x1: cleanup scanner thread</div><div class='del'>-         *</div><div class='del'>-         * The pending timer needs to be removed _after_ cleaning up the</div><div class='del'>-         * filesystem scanner (scheduling the next scrub time is not a</div><div class='del'>-         * cancellation point).</div><div class='del'>-         */</div><div class='del'>-        ret = gf_thread_cleanup_xint (child-&gt;thread);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                        0, BRB_MSG_SCRUB_THREAD_CLEANUP,</div><div class='del'>-                        "Error cleaning up scanner thread");</div><div class='del'>-</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                0, BRB_MSG_SCRUBBER_CLEANED,</div><div class='del'>-                "Cleaned up scrubber for brick [%s]", child-&gt;brick_path);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_scrubber *fsscrub = NULL;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    fsscrub = &amp;priv-&gt;fsscrub;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    if (_br_is_child_scrub_active(child)) {</div><div class='add'>+        scrub_monitor-&gt;active_child_count--;</div><div class='add'>+        br_child_set_scrub_state(child, _gf_false);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * 0x0: child (brick) goes out of rotation</div><div class='add'>+     *</div><div class='add'>+     * This is fully safe w.r.t. entries for this child being actively</div><div class='add'>+     * scrubbed. Each of the scrubber thread(s) would finish scrubbing</div><div class='add'>+     * the entry (probably failing due to disconnection) and either</div><div class='add'>+     * putting the entry back into the queue or continuing further.</div><div class='add'>+     * Either way, pending entries for this child's queue need not be</div><div class='add'>+     * drained; entries just sit there in the queued/ready list to be</div><div class='add'>+     * consumed later upon re-connection.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;fsscrub-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;child-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;fsscrub-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * 0x1: cleanup scanner thread</div><div class='add'>+     *</div><div class='add'>+     * The pending timer needs to be removed _after_ cleaning up the</div><div class='add'>+     * filesystem scanner (scheduling the next scrub time is not a</div><div class='add'>+     * cancellation point).</div><div class='add'>+     */</div><div class='add'>+    ret = gf_thread_cleanup_xint(child-&gt;thread);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUB_THREAD_CLEANUP,</div><div class='add'>+               "Error cleaning up scanner thread");</div><div class='add'>+</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_SCRUBBER_CLEANED,</div><div class='add'>+           "Cleaned up scrubber for brick [%s]", child-&gt;brick_path);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1404,38 +1421,38 @@ br_cleanup_scrubber (xlator_t *this, br_child_t *child)</div><div class='ctx'>  * the inode table, it's just reused taking care of stale inodes)</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-br_brick_disconnect (xlator_t *this, br_child_t *child)</div><div class='add'>+br_brick_disconnect(xlator_t *this, br_child_t *child)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        struct br_monitor *scrub_monitor = NULL;</div><div class='del'>-        br_private_t *priv = this-&gt;private;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='add'>+    br_private_t *priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+</div><div class='add'>+    /* Lock order should be wakelock and then child lock to</div><div class='add'>+     * dead locks.</div><div class='add'>+     */</div><div class='add'>+    pthread_mutex_lock(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    {</div><div class='add'>+        pthread_mutex_lock(&amp;child-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            if (!_br_is_child_connected(child))</div><div class='add'>+                goto unblock;</div><div class='ctx'> </div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+            /* child is on death row.. */</div><div class='add'>+            _br_set_child_state(child, BR_CHILD_STATE_DISCONNECTED);</div><div class='ctx'> </div><div class='del'>-        /* Lock order should be wakelock and then child lock to</div><div class='del'>-         * dead locks.</div><div class='del'>-         */</div><div class='del'>-        pthread_mutex_lock (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        {</div><div class='del'>-                pthread_mutex_lock (&amp;child-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (!_br_is_child_connected (child))</div><div class='del'>-                                goto unblock;</div><div class='del'>-</div><div class='del'>-                        /* child is on death row.. */</div><div class='del'>-                        _br_set_child_state (child, BR_CHILD_STATE_DISCONNECTED);</div><div class='del'>-</div><div class='del'>-                        if (priv-&gt;iamscrubber)</div><div class='del'>-                                ret = br_cleanup_scrubber (this, child);</div><div class='del'>-                        else</div><div class='del'>-                                ret = br_cleanup_signer (this, child);</div><div class='del'>-                }</div><div class='del'>- unblock:</div><div class='del'>-                pthread_mutex_unlock (&amp;child-&gt;lock);</div><div class='add'>+            if (priv-&gt;iamscrubber)</div><div class='add'>+                ret = br_cleanup_scrubber(this, child);</div><div class='add'>+            else</div><div class='add'>+                ret = br_cleanup_signer(this, child);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    unblock:</div><div class='add'>+        pthread_mutex_unlock(&amp;child-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;scrub_monitor-&gt;wakelock);</div><div class='ctx'> </div><div class='del'>-         return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1444,275 +1461,278 @@ br_brick_disconnect (xlator_t *this, br_child_t *child)</div><div class='ctx'>  * information regarding that brick (such as brick path).</div><div class='ctx'>  */</div><div class='ctx'> void *</div><div class='del'>-br_handle_events (void *arg)</div><div class='add'>+br_handle_events(void *arg)</div><div class='ctx'> {</div><div class='del'>-        int32_t       ret   = 0;</div><div class='del'>-        xlator_t     *this  = NULL;</div><div class='del'>-        br_private_t *priv  = NULL;</div><div class='del'>-        br_child_t *child = NULL;</div><div class='del'>-        struct br_child_event *childev = NULL;</div><div class='del'>-</div><div class='del'>-        this = arg;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Since, this is the topmost xlator, THIS has to be set by bit-rot</div><div class='del'>-         * xlator itself (STACK_WIND won't help in this case). Also it has</div><div class='del'>-         * to be done for each thread that gets spawned. Otherwise, a new</div><div class='del'>-         * thread will get global_xlator's pointer when it does "THIS".</div><div class='del'>-         */</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;priv-&gt;bricks))</div><div class='del'>-                                pthread_cond_wait (&amp;priv-&gt;cond, &amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                        childev = list_first_entry</div><div class='del'>-                                   (&amp;priv-&gt;bricks, struct br_child_event, list);</div><div class='del'>-                        list_del_init (&amp;childev-&gt;list);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                child = childev-&gt;child;</div><div class='del'>-                ret = childev-&gt;call (this, child);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_SUBVOL_CONNECT_FAILED,</div><div class='del'>-                                "callback handler for subvolume [%s] failed",</div><div class='del'>-                                child-&gt;xl-&gt;name);</div><div class='del'>-                GF_FREE (childev);</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    struct br_child_event *childev = NULL;</div><div class='add'>+</div><div class='add'>+    this = arg;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Since, this is the topmost xlator, THIS has to be set by bit-rot</div><div class='add'>+     * xlator itself (STACK_WIND won't help in this case). Also it has</div><div class='add'>+     * to be done for each thread that gets spawned. Otherwise, a new</div><div class='add'>+     * thread will get global_xlator's pointer when it does "THIS".</div><div class='add'>+     */</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;priv-&gt;bricks))</div><div class='add'>+                pthread_cond_wait(&amp;priv-&gt;cond, &amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+            childev = list_first_entry(&amp;priv-&gt;bricks, struct br_child_event,</div><div class='add'>+                                       list);</div><div class='add'>+            list_del_init(&amp;childev-&gt;list);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        child = childev-&gt;child;</div><div class='add'>+        ret = childev-&gt;call(this, child);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_SUBVOL_CONNECT_FAILED,</div><div class='add'>+                   "callback handler for subvolume [%s] failed",</div><div class='add'>+                   child-&gt;xl-&gt;name);</div><div class='add'>+        GF_FREE(childev);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_br_stub_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_MEM_ACNT_FAILED,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_br_stub_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRB_MSG_MEM_ACNT_FAILED,</div><div class='add'>+               "Memory accounting init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-_br_qchild_event (xlator_t *this, br_child_t *child, br_child_handler *call)</div><div class='add'>+_br_qchild_event(xlator_t *this, br_child_t *child, br_child_handler *call)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        struct br_child_event *childev = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_child_event *childev = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        childev = GF_CALLOC (1, sizeof (*childev), gf_br_mt_br_child_event_t);</div><div class='del'>-        if (!childev) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='del'>-                        "Event unhandled for child.. [Brick: %s]",</div><div class='del'>-                        child-&gt;xl-&gt;name);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    childev = GF_CALLOC(1, sizeof(*childev), gf_br_mt_br_child_event_t);</div><div class='add'>+    if (!childev) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+               "Event unhandled for child.. [Brick: %s]", child-&gt;xl-&gt;name);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;childev-&gt;list);</div><div class='del'>-        childev-&gt;this  = this;</div><div class='del'>-        childev-&gt;child = child;</div><div class='del'>-        childev-&gt;call  = call;</div><div class='add'>+    INIT_LIST_HEAD(&amp;childev-&gt;list);</div><div class='add'>+    childev-&gt;this = this;</div><div class='add'>+    childev-&gt;child = child;</div><div class='add'>+    childev-&gt;call = call;</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;childev-&gt;list, &amp;priv-&gt;bricks);</div><div class='add'>+    list_add_tail(&amp;childev-&gt;list, &amp;priv-&gt;bricks);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_scrubber_status_get (xlator_t *this, dict_t **dict)</div><div class='add'>+br_scrubber_status_get(xlator_t *this, dict_t **dict)</div><div class='ctx'> {</div><div class='del'>-        int                    ret          = -1;</div><div class='del'>-        br_private_t          *priv         = NULL;</div><div class='del'>-        struct br_scrub_stats *scrub_stats  = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot", priv, out);</div><div class='del'>-</div><div class='del'>-        scrub_stats = &amp;priv-&gt;scrub_stat;</div><div class='del'>-</div><div class='del'>-        ret = br_get_bad_objects_list (this, dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to collect corrupt "</div><div class='del'>-                              "files");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (*dict, "scrub-running",</div><div class='del'>-                             scrub_stats-&gt;scrub_running);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed setting scrub_running "</div><div class='del'>-                              "entry to the dictionary");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (*dict, "scrubbed-files",</div><div class='del'>-                               scrub_stats-&gt;scrubbed_files);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to setting scrubbed file "</div><div class='del'>-                              "entry to the dictionary");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (*dict, "unsigned-files",</div><div class='del'>-                               scrub_stats-&gt;unsigned_files);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to set unsigned file count"</div><div class='del'>-                              " entry to the dictionary");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (*dict, "scrub-duration",</div><div class='del'>-                               scrub_stats-&gt;scrub_duration);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to set scrub duration"</div><div class='del'>-                              " entry to the dictionary");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_dynstr_with_alloc (*dict, "last-scrub-time",</div><div class='del'>-                                          scrub_stats-&gt;last_scrub_time);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to set "</div><div class='del'>-                                      "last scrub time value");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    struct br_scrub_stats *scrub_stats = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot", priv, out);</div><div class='add'>+</div><div class='add'>+    scrub_stats = &amp;priv-&gt;scrub_stat;</div><div class='add'>+</div><div class='add'>+    ret = br_get_bad_objects_list(this, dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to collect corrupt "</div><div class='add'>+                     "files");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int8(*dict, "scrub-running", scrub_stats-&gt;scrub_running);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed setting scrub_running "</div><div class='add'>+                     "entry to the dictionary");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(*dict, "scrubbed-files", scrub_stats-&gt;scrubbed_files);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to setting scrubbed file "</div><div class='add'>+                     "entry to the dictionary");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(*dict, "unsigned-files", scrub_stats-&gt;unsigned_files);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to set unsigned file count"</div><div class='add'>+                     " entry to the dictionary");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(*dict, "scrub-duration", scrub_stats-&gt;scrub_duration);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to set scrub duration"</div><div class='add'>+                     " entry to the dictionary");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr_with_alloc(*dict, "last-scrub-time",</div><div class='add'>+                                     scrub_stats-&gt;last_scrub_time);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to set "</div><div class='add'>+                     "last scrub time value");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int           idx    = -1;</div><div class='del'>-        int           ret    = -1;</div><div class='del'>-        xlator_t     *subvol = NULL;</div><div class='del'>-        br_child_t   *child  = NULL;</div><div class='del'>-        br_private_t *priv   = NULL;</div><div class='del'>-        dict_t       *output = NULL;</div><div class='del'>-        va_list       ap;</div><div class='del'>-        struct br_monitor  *scrub_monitor = NULL;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *subvol = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    dict_t *output = NULL;</div><div class='add'>+    va_list ap;</div><div class='add'>+    struct br_monitor *scrub_monitor = NULL;</div><div class='ctx'> </div><div class='del'>-        subvol = (xlator_t *)data;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    subvol = (xlator_t *)data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "Notification received: %d", event);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "Notification received: %d", event);</div><div class='ctx'> </div><div class='del'>-        idx = br_find_child_index (this, subvol);</div><div class='add'>+    idx = br_find_child_index(this, subvol);</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case GF_EVENT_CHILD_UP:</div><div class='del'>-                if (idx &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_INVALID_SUBVOL, "Got event %d from "</div><div class='del'>-                                "invalid subvolume", event);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        child = &amp;priv-&gt;children[idx];</div><div class='del'>-                        if (child-&gt;child_up == 1)</div><div class='del'>-                                goto unblock_0;</div><div class='del'>-                        priv-&gt;up_children++;</div><div class='del'>-</div><div class='del'>-                        child-&gt;child_up = 1;</div><div class='del'>-                        child-&gt;xl = subvol;</div><div class='del'>-                        if (!child-&gt;table)</div><div class='del'>-                                child-&gt;table = inode_table_new (4096, subvol);</div><div class='del'>-</div><div class='del'>-                        _br_qchild_event (this, child, br_brick_connect);</div><div class='del'>-                        pthread_cond_signal (&amp;priv-&gt;cond);</div><div class='del'>-                }</div><div class='add'>+            if (idx &lt; 0) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_INVALID_SUBVOL,</div><div class='add'>+                       "Got event %d from "</div><div class='add'>+                       "invalid subvolume",</div><div class='add'>+                       event);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                child = &amp;priv-&gt;children[idx];</div><div class='add'>+                if (child-&gt;child_up == 1)</div><div class='add'>+                    goto unblock_0;</div><div class='add'>+                priv-&gt;up_children++;</div><div class='add'>+</div><div class='add'>+                child-&gt;child_up = 1;</div><div class='add'>+                child-&gt;xl = subvol;</div><div class='add'>+                if (!child-&gt;table)</div><div class='add'>+                    child-&gt;table = inode_table_new(4096, subvol);</div><div class='add'>+</div><div class='add'>+                _br_qchild_event(this, child, br_brick_connect);</div><div class='add'>+                pthread_cond_signal(&amp;priv-&gt;cond);</div><div class='add'>+            }</div><div class='ctx'>         unblock_0:</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;up_children == priv-&gt;child_count)</div><div class='del'>-                        default_notify (this, event, data);</div><div class='del'>-                break;</div><div class='add'>+            if (priv-&gt;up_children == priv-&gt;child_count)</div><div class='add'>+                default_notify(this, event, data);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_EVENT_CHILD_DOWN:</div><div class='del'>-                if (idx &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_INVALID_SUBVOL_CHILD,</div><div class='del'>-                                "Got event %d from invalid subvolume", event);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        child = &amp;priv-&gt;children[idx];</div><div class='del'>-                        if (child-&gt;child_up == 0)</div><div class='del'>-                                goto unblock_1;</div><div class='del'>-</div><div class='del'>-                        child-&gt;child_up = 0;</div><div class='del'>-                        priv-&gt;up_children--;</div><div class='del'>-</div><div class='del'>-                        _br_qchild_event (this, child, br_brick_disconnect);</div><div class='del'>-                        pthread_cond_signal (&amp;priv-&gt;cond);</div><div class='del'>-                }</div><div class='add'>+            if (idx &lt; 0) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       BRB_MSG_INVALID_SUBVOL_CHILD,</div><div class='add'>+                       "Got event %d from invalid subvolume", event);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                child = &amp;priv-&gt;children[idx];</div><div class='add'>+                if (child-&gt;child_up == 0)</div><div class='add'>+                    goto unblock_1;</div><div class='add'>+</div><div class='add'>+                child-&gt;child_up = 0;</div><div class='add'>+                priv-&gt;up_children--;</div><div class='add'>+</div><div class='add'>+                _br_qchild_event(this, child, br_brick_disconnect);</div><div class='add'>+                pthread_cond_signal(&amp;priv-&gt;cond);</div><div class='add'>+            }</div><div class='ctx'>         unblock_1:</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;up_children == 0)</div><div class='del'>-                        default_notify (this, event, data);</div><div class='del'>-                break;</div><div class='add'>+            if (priv-&gt;up_children == 0)</div><div class='add'>+                default_notify(this, event, data);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_EVENT_SCRUB_STATUS:</div><div class='del'>-                gf_msg_debug (this-&gt;name, GF_LOG_INFO, "BitRot scrub status "</div><div class='del'>-                              "called");</div><div class='del'>-                va_start (ap, data);</div><div class='del'>-                output = va_arg (ap, dict_t *);</div><div class='del'>-                va_end (ap);</div><div class='del'>-</div><div class='del'>-                ret = br_scrubber_status_get (this, &amp;output);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "returning %d", ret);</div><div class='del'>-                break;</div><div class='add'>+            gf_msg_debug(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+                         "BitRot scrub status "</div><div class='add'>+                         "called");</div><div class='add'>+            va_start(ap, data);</div><div class='add'>+            output = va_arg(ap, dict_t *);</div><div class='add'>+            va_end(ap);</div><div class='add'>+</div><div class='add'>+            ret = br_scrubber_status_get(this, &amp;output);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "returning %d", ret);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_EVENT_SCRUB_ONDEMAND:</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_INFO, "BitRot scrub ondemand "</div><div class='del'>-                              "called");</div><div class='del'>-</div><div class='del'>-                if (scrub_monitor-&gt;state != BR_SCRUB_STATE_PENDING) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_RESCHEDULE_SCRUBBER_FAILED,</div><div class='del'>-                                "on demand scrub schedule failed. Scrubber is "</div><div class='del'>-                                "not in pending state. Current state is %d",</div><div class='del'>-                                 scrub_monitor-&gt;state);</div><div class='del'>-                        return -2;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Needs synchronization with reconfigure thread */</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        ret = br_scrub_state_machine (this, _gf_true);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRB_MSG_RESCHEDULE_SCRUBBER_FAILED,</div><div class='del'>-                                "Could not schedule ondemand scrubbing. "</div><div class='del'>-                                "Scrubbing will continue according to "</div><div class='del'>-                                "old frequency.");</div><div class='del'>-                }</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "returning %d", ret);</div><div class='del'>-                break;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+                   "BitRot scrub ondemand "</div><div class='add'>+                   "called");</div><div class='add'>+</div><div class='add'>+            if (scrub_monitor-&gt;state != BR_SCRUB_STATE_PENDING) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       BRB_MSG_RESCHEDULE_SCRUBBER_FAILED,</div><div class='add'>+                       "on demand scrub schedule failed. Scrubber is "</div><div class='add'>+                       "not in pending state. Current state is %d",</div><div class='add'>+                       scrub_monitor-&gt;state);</div><div class='add'>+                return -2;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Needs synchronization with reconfigure thread */</div><div class='add'>+            pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                ret = br_scrub_state_machine(this, _gf_true);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       BRB_MSG_RESCHEDULE_SCRUBBER_FAILED,</div><div class='add'>+                       "Could not schedule ondemand scrubbing. "</div><div class='add'>+                       "Scrubbing will continue according to "</div><div class='add'>+                       "old frequency.");</div><div class='add'>+            }</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "returning %d", ret);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                default_notify (this, event, data);</div><div class='del'>-        }</div><div class='add'>+            default_notify(this, event, data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1720,62 +1740,62 @@ notify (xlator_t *this, int32_t event, void *data, ...)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_fini_signer (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_fini_signer(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (; i &lt; BR_WORKERS; i++) {</div><div class='del'>-                (void) gf_thread_cleanup_xint (priv-&gt;obj_queue-&gt;workers[i]);</div><div class='del'>-        }</div><div class='add'>+    for (; i &lt; BR_WORKERS; i++) {</div><div class='add'>+        (void)gf_thread_cleanup_xint(priv-&gt;obj_queue-&gt;workers[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;object_cond);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;object_cond);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_init_signer (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_init_signer(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* initialize gfchangelog xlator context */</div><div class='del'>-        ret = gf_changelog_init (this);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    /* initialize gfchangelog xlator context */</div><div class='add'>+    ret = gf_changelog_init(this);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pthread_cond_init (&amp;priv-&gt;object_cond, NULL);</div><div class='del'>-</div><div class='del'>-        priv-&gt;obj_queue = GF_CALLOC (1, sizeof (*priv-&gt;obj_queue),</div><div class='del'>-                                     gf_br_mt_br_ob_n_wk_t);</div><div class='del'>-        if (!priv-&gt;obj_queue)</div><div class='del'>-                goto cleanup_cond;</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;obj_queue-&gt;objects);</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; BR_WORKERS; i++) {</div><div class='del'>-                ret = gf_thread_create (&amp;priv-&gt;obj_queue-&gt;workers[i], NULL,</div><div class='del'>-                                        br_process_object, this, "brpobj");</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                BRB_MSG_SPAWN_FAILED, "thread creation"</div><div class='del'>-                                " failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto cleanup_threads;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    pthread_cond_init(&amp;priv-&gt;object_cond, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    priv-&gt;obj_queue = GF_CALLOC(1, sizeof(*priv-&gt;obj_queue),</div><div class='add'>+                                gf_br_mt_br_ob_n_wk_t);</div><div class='add'>+    if (!priv-&gt;obj_queue)</div><div class='add'>+        goto cleanup_cond;</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;obj_queue-&gt;objects);</div><div class='ctx'> </div><div class='del'>- cleanup_threads:</div><div class='del'>-        for (i--; i &gt;= 0; i--) {</div><div class='del'>-                (void) gf_thread_cleanup_xint (priv-&gt;obj_queue-&gt;workers[i]);</div><div class='add'>+    for (i = 0; i &lt; BR_WORKERS; i++) {</div><div class='add'>+        ret = gf_thread_create(&amp;priv-&gt;obj_queue-&gt;workers[i], NULL,</div><div class='add'>+                               br_process_object, this, "brpobj");</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, BRB_MSG_SPAWN_FAILED,</div><div class='add'>+                   "thread creation"</div><div class='add'>+                   " failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto cleanup_threads;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_threads:</div><div class='add'>+    for (i--; i &gt;= 0; i--) {</div><div class='add'>+        (void)gf_thread_cleanup_xint(priv-&gt;obj_queue-&gt;workers[i]);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (priv-&gt;obj_queue);</div><div class='add'>+    GF_FREE(priv-&gt;obj_queue);</div><div class='ctx'> </div><div class='del'>- cleanup_cond:</div><div class='del'>-        /* that's explicit */</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;object_cond);</div><div class='del'>- out:</div><div class='del'>-        return -1;</div><div class='add'>+cleanup_cond:</div><div class='add'>+    /* that's explicit */</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;object_cond);</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1784,360 +1804,356 @@ br_init_signer (xlator_t *this, br_private_t *priv)</div><div class='ctx'>  * throttle.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_rate_limit_signer (xlator_t *this, int child_count, int numbricks)</div><div class='add'>+br_rate_limit_signer(xlator_t *this, int child_count, int numbricks)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='del'>-        tbf_opspec_t spec = {0,};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        spec.op       = TBF_OP_HASH;</div><div class='del'>-        spec.rate     = 0;</div><div class='del'>-        spec.maxlimit = 0;</div><div class='del'>-</div><div class='del'>-/**</div><div class='del'>- * OK. Most implementations of TBF I've come across generate tokens</div><div class='del'>- * every second (UML, etc..) and some chose sub-second granularity</div><div class='del'>- * (blk-iothrottle cgroups). TBF algorithm itself does not enforce</div><div class='del'>- * any logic for choosing generation interval and it seems pretty</div><div class='del'>- * logical as one could jack up token count per interval w.r.t.</div><div class='del'>- * generation rate.</div><div class='del'>- *</div><div class='del'>- * Value used here is chosen based on a series of test(s) performed</div><div class='del'>- * to balance object signing time and not maxing out on all available</div><div class='del'>- * CPU cores. It's obvious to have seconds granularity and jack up</div><div class='del'>- * token count per interval, thereby achieving close to similar</div><div class='del'>- * results. Let's stick to this as it seems to be working fine for</div><div class='del'>- * the set of ops that are throttled.</div><div class='del'>- **/</div><div class='del'>-        spec.token_gen_interval = 600000; /* In usec */</div><div class='del'>-</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='add'>+    tbf_opspec_t spec = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    spec.op = TBF_OP_HASH;</div><div class='add'>+    spec.rate = 0;</div><div class='add'>+    spec.maxlimit = 0;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * OK. Most implementations of TBF I've come across generate tokens</div><div class='add'>+     * every second (UML, etc..) and some chose sub-second granularity</div><div class='add'>+     * (blk-iothrottle cgroups). TBF algorithm itself does not enforce</div><div class='add'>+     * any logic for choosing generation interval and it seems pretty</div><div class='add'>+     * logical as one could jack up token count per interval w.r.t.</div><div class='add'>+     * generation rate.</div><div class='add'>+     *</div><div class='add'>+     * Value used here is chosen based on a series of test(s) performed</div><div class='add'>+     * to balance object signing time and not maxing out on all available</div><div class='add'>+     * CPU cores. It's obvious to have seconds granularity and jack up</div><div class='add'>+     * token count per interval, thereby achieving close to similar</div><div class='add'>+     * results. Let's stick to this as it seems to be working fine for</div><div class='add'>+     * the set of ops that are throttled.</div><div class='add'>+     **/</div><div class='add'>+    spec.token_gen_interval = 600000; /* In usec */</div><div class='ctx'> </div><div class='ctx'> #ifdef BR_RATE_LIMIT_SIGNER</div><div class='ctx'> </div><div class='del'>-        double contribution = 0;</div><div class='del'>-        contribution = ((double)1 - ((double)child_count / (double)numbricks));</div><div class='del'>-        if (contribution == 0)</div><div class='del'>-                contribution = 1;</div><div class='del'>-        spec.rate = BR_HASH_CALC_READ_SIZE * contribution;</div><div class='del'>-        spec.maxlimit = BR_WORKERS * BR_HASH_CALC_READ_SIZE;</div><div class='add'>+    double contribution = 0;</div><div class='add'>+    contribution = ((double)1 - ((double)child_count / (double)numbricks));</div><div class='add'>+    if (contribution == 0)</div><div class='add'>+        contribution = 1;</div><div class='add'>+    spec.rate = BR_HASH_CALC_READ_SIZE * contribution;</div><div class='add'>+    spec.maxlimit = BR_WORKERS * BR_HASH_CALC_READ_SIZE;</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-        if (!spec.rate)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_RATE_LIMIT_INFO,</div><div class='del'>-                        "[Rate Limit Info] \"FULL THROTTLE\"");</div><div class='del'>-        else</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_RATE_LIMIT_INFO,</div><div class='del'>-                        "[Rate Limit Info] \"tokens/sec (rate): %lu, "</div><div class='del'>-                        "maxlimit: %lu\"", spec.rate, spec.maxlimit);</div><div class='del'>-</div><div class='del'>-        priv-&gt;tbf = tbf_init (&amp;spec, 1);</div><div class='del'>-        return priv-&gt;tbf ? 0 : -1;</div><div class='add'>+    if (!spec.rate)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_RATE_LIMIT_INFO,</div><div class='add'>+               "[Rate Limit Info] \"FULL THROTTLE\"");</div><div class='add'>+    else</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_RATE_LIMIT_INFO,</div><div class='add'>+               "[Rate Limit Info] \"tokens/sec (rate): %lu, "</div><div class='add'>+               "maxlimit: %lu\"",</div><div class='add'>+               spec.rate, spec.maxlimit);</div><div class='add'>+</div><div class='add'>+    priv-&gt;tbf = tbf_init(&amp;spec, 1);</div><div class='add'>+    return priv-&gt;tbf ? 0 : -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_signer_handle_options (xlator_t *this, br_private_t *priv, dict_t *options)</div><div class='add'>+br_signer_handle_options(xlator_t *this, br_private_t *priv, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        if (options)</div><div class='del'>-                GF_OPTION_RECONF ("expiry-time", priv-&gt;expiry_time,</div><div class='del'>-                                  options, uint32, error_return);</div><div class='del'>-        else</div><div class='del'>-                GF_OPTION_INIT ("expiry-time", priv-&gt;expiry_time,</div><div class='del'>-                                uint32, error_return);</div><div class='add'>+    if (options)</div><div class='add'>+        GF_OPTION_RECONF("expiry-time", priv-&gt;expiry_time, options, uint32,</div><div class='add'>+                         error_return);</div><div class='add'>+    else</div><div class='add'>+        GF_OPTION_INIT("expiry-time", priv-&gt;expiry_time, uint32, error_return);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_signer_init (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_signer_init(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        int numbricks = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int numbricks = 0;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("expiry-time", priv-&gt;expiry_time, uint32, error_return);</div><div class='del'>-        GF_OPTION_INIT ("brick-count", numbricks, int32, error_return);</div><div class='add'>+    GF_OPTION_INIT("expiry-time", priv-&gt;expiry_time, uint32, error_return);</div><div class='add'>+    GF_OPTION_INIT("brick-count", numbricks, int32, error_return);</div><div class='ctx'> </div><div class='del'>-        ret = br_rate_limit_signer (this, priv-&gt;child_count, numbricks);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = br_rate_limit_signer(this, priv-&gt;child_count, numbricks);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = br_init_signer (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_tbf;</div><div class='add'>+    ret = br_init_signer(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_tbf;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- cleanup_tbf:</div><div class='del'>-        /* cleanup TBF */</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='add'>+cleanup_tbf:</div><div class='add'>+    /* cleanup TBF */</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_free_scrubber_monitor (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_free_scrubber_monitor(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        struct br_monitor *scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='add'>+    struct br_monitor *scrub_monitor = &amp;priv-&gt;scrub_monitor;</div><div class='ctx'> </div><div class='del'>-        if (scrub_monitor-&gt;timer) {</div><div class='del'>-                (void) gf_tw_del_timer (priv-&gt;timer_wheel, scrub_monitor-&gt;timer);</div><div class='add'>+    if (scrub_monitor-&gt;timer) {</div><div class='add'>+        (void)gf_tw_del_timer(priv-&gt;timer_wheel, scrub_monitor-&gt;timer);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (scrub_monitor-&gt;timer);</div><div class='del'>-                scrub_monitor-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(scrub_monitor-&gt;timer);</div><div class='add'>+        scrub_monitor-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        (void) gf_thread_cleanup_xint (scrub_monitor-&gt;thread);</div><div class='add'>+    (void)gf_thread_cleanup_xint(scrub_monitor-&gt;thread);</div><div class='ctx'> </div><div class='del'>-        /* Clean up cond and mutex variables */</div><div class='del'>-        pthread_mutex_destroy (&amp;scrub_monitor-&gt;mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;scrub_monitor-&gt;cond);</div><div class='add'>+    /* Clean up cond and mutex variables */</div><div class='add'>+    pthread_mutex_destroy(&amp;scrub_monitor-&gt;mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;scrub_monitor-&gt;cond);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;scrub_monitor-&gt;wakelock);</div><div class='del'>-        pthread_cond_destroy (&amp;scrub_monitor-&gt;wakecond);</div><div class='add'>+    pthread_mutex_destroy(&amp;scrub_monitor-&gt;wakelock);</div><div class='add'>+    pthread_cond_destroy(&amp;scrub_monitor-&gt;wakecond);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;scrub_monitor-&gt;donelock);</div><div class='del'>-        pthread_cond_destroy (&amp;scrub_monitor-&gt;donecond);</div><div class='add'>+    pthread_mutex_destroy(&amp;scrub_monitor-&gt;donelock);</div><div class='add'>+    pthread_cond_destroy(&amp;scrub_monitor-&gt;donecond);</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;scrub_monitor-&gt;lock);</div><div class='add'>+    LOCK_DESTROY(&amp;scrub_monitor-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_free_children (xlator_t *this, br_private_t *priv, int count)</div><div class='add'>+br_free_children(xlator_t *this, br_private_t *priv, int count)</div><div class='ctx'> {</div><div class='del'>-        br_child_t *child = NULL;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='ctx'> </div><div class='del'>-        for (--count; count &gt;= 0; count--) {</div><div class='del'>-                child = &amp;priv-&gt;children[count];</div><div class='del'>-                mem_pool_destroy (child-&gt;timer_pool);</div><div class='del'>-                pthread_mutex_destroy (&amp;child-&gt;lock);</div><div class='del'>-        }</div><div class='add'>+    for (--count; count &gt;= 0; count--) {</div><div class='add'>+        child = &amp;priv-&gt;children[count];</div><div class='add'>+        mem_pool_destroy(child-&gt;timer_pool);</div><div class='add'>+        pthread_mutex_destroy(&amp;child-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (priv-&gt;children);</div><div class='del'>-        priv-&gt;children = NULL;</div><div class='add'>+    GF_FREE(priv-&gt;children);</div><div class='add'>+    priv-&gt;children = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_init_children (xlator_t *this, br_private_t *priv)</div><div class='add'>+br_init_children(xlator_t *this, br_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        br_child_t *child = NULL;</div><div class='del'>-        xlator_list_t *trav = NULL;</div><div class='del'>-</div><div class='del'>-        priv-&gt;child_count = xlator_subvolume_count (this);</div><div class='del'>-        priv-&gt;children = GF_CALLOC (priv-&gt;child_count, sizeof (*priv-&gt;children),</div><div class='del'>-                                    gf_br_mt_br_child_t);</div><div class='del'>-        if (!priv-&gt;children)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        while (trav) {</div><div class='del'>-                child = &amp;priv-&gt;children[i];</div><div class='del'>-</div><div class='del'>-                pthread_mutex_init (&amp;child-&gt;lock, NULL);</div><div class='del'>-                child-&gt;witnessed = 0;</div><div class='del'>-</div><div class='del'>-                br_set_child_state (child, BR_CHILD_STATE_DISCONNECTED);</div><div class='del'>-</div><div class='del'>-                child-&gt;this = this;</div><div class='del'>-                child-&gt;xl = trav-&gt;xlator;</div><div class='del'>-</div><div class='del'>-                child-&gt;timer_pool = mem_pool_new</div><div class='del'>-                                    (struct gf_tw_timer_list,  4096);</div><div class='del'>-                if (!child-&gt;timer_pool) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='del'>-                                "failed to allocate mem-pool for timer");</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto freechild;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;child-&gt;list);</div><div class='del'>-</div><div class='del'>-                i++;</div><div class='del'>-                trav = trav-&gt;next;</div><div class='add'>+    int i = 0;</div><div class='add'>+    br_child_t *child = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+</div><div class='add'>+    priv-&gt;child_count = xlator_subvolume_count(this);</div><div class='add'>+    priv-&gt;children = GF_CALLOC(priv-&gt;child_count, sizeof(*priv-&gt;children),</div><div class='add'>+                               gf_br_mt_br_child_t);</div><div class='add'>+    if (!priv-&gt;children)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    while (trav) {</div><div class='add'>+        child = &amp;priv-&gt;children[i];</div><div class='add'>+</div><div class='add'>+        pthread_mutex_init(&amp;child-&gt;lock, NULL);</div><div class='add'>+        child-&gt;witnessed = 0;</div><div class='add'>+</div><div class='add'>+        br_set_child_state(child, BR_CHILD_STATE_DISCONNECTED);</div><div class='add'>+</div><div class='add'>+        child-&gt;this = this;</div><div class='add'>+        child-&gt;xl = trav-&gt;xlator;</div><div class='add'>+</div><div class='add'>+        child-&gt;timer_pool = mem_pool_new(struct gf_tw_timer_list, 4096);</div><div class='add'>+        if (!child-&gt;timer_pool) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+                   "failed to allocate mem-pool for timer");</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto freechild;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        INIT_LIST_HEAD(&amp;child-&gt;list);</div><div class='add'>+</div><div class='add'>+        i++;</div><div class='add'>+        trav = trav-&gt;next;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- freechild:</div><div class='del'>-        br_free_children (this, priv, i);</div><div class='del'>- err:</div><div class='del'>-        return -1;</div><div class='add'>+freechild:</div><div class='add'>+    br_free_children(this, priv, i);</div><div class='add'>+err:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t       ret  = -1;</div><div class='del'>-	br_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-	if (!this-&gt;children) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_NO_CHILD,</div><div class='del'>-                        "FATAL: no children");</div><div class='del'>-		goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_br_mt_br_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate memory (-&gt;priv)");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("scrubber", priv-&gt;iamscrubber, bool, free_priv);</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_NO_CHILD,</div><div class='add'>+               "FATAL: no children");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = br_init_children (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto free_priv;</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_br_mt_br_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRB_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate memory (-&gt;priv)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;lock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;priv-&gt;cond, NULL);</div><div class='add'>+    GF_OPTION_INIT("scrubber", priv-&gt;iamscrubber, bool, free_priv);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;bricks);</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;signing);</div><div class='add'>+    ret = br_init_children(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto free_priv;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;timer_wheel = glusterfs_ctx_tw_get (this-&gt;ctx);</div><div class='del'>-        if (!priv-&gt;timer_wheel) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRB_MSG_TIMER_WHEEL_UNAVAILABLE,</div><div class='del'>-                        "global timer wheel unavailable");</div><div class='del'>-                goto cleanup;</div><div class='del'>-        }</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;lock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;priv-&gt;cond, NULL);</div><div class='ctx'> </div><div class='del'>-	this-&gt;private = priv;</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;bricks);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;signing);</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;iamscrubber) {</div><div class='del'>-                ret = br_signer_init (this, priv);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        ret = br_signer_handle_options (this, priv, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                ret = br_scrubber_init (this, priv);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        ret = br_scrubber_handle_options (this, priv, NULL);</div><div class='del'>-        }</div><div class='add'>+    priv-&gt;timer_wheel = glusterfs_ctx_tw_get(this-&gt;ctx);</div><div class='add'>+    if (!priv-&gt;timer_wheel) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_TIMER_WHEEL_UNAVAILABLE,</div><div class='add'>+               "global timer wheel unavailable");</div><div class='add'>+        goto cleanup;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup;</div><div class='add'>+    this-&gt;private = priv;</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;thread, NULL, br_handle_events, this,</div><div class='del'>-                                "brhevent");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                        BRB_MSG_SPAWN_FAILED, "thread creation failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;iamscrubber) {</div><div class='add'>+        ret = br_signer_init(this, priv);</div><div class='add'>+        if (!ret)</div><div class='add'>+            ret = br_signer_handle_options(this, priv, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        ret = br_scrubber_init(this, priv);</div><div class='add'>+        if (!ret)</div><div class='add'>+            ret = br_scrubber_handle_options(this, priv, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_BITROT_LOADED,</div><div class='del'>-                        "bit-rot xlator loaded in \"%s\" mode",</div><div class='del'>-                        (priv-&gt;iamscrubber) ? "SCRUBBER" : "SIGNER");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup;</div><div class='ctx'> </div><div class='del'>- cleanup:</div><div class='del'>-        (void) pthread_cond_destroy (&amp;priv-&gt;cond);</div><div class='del'>-        (void) pthread_mutex_destroy (&amp;priv-&gt;lock);</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;thread, NULL, br_handle_events, this,</div><div class='add'>+                           "brhevent");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, BRB_MSG_SPAWN_FAILED,</div><div class='add'>+               "thread creation failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        br_free_children (this, priv, priv-&gt;child_count);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, BRB_MSG_BITROT_LOADED,</div><div class='add'>+               "bit-rot xlator loaded in \"%s\" mode",</div><div class='add'>+               (priv-&gt;iamscrubber) ? "SCRUBBER" : "SIGNER");</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- free_priv:</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>- out:</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        return -1;</div><div class='add'>+cleanup:</div><div class='add'>+    (void)pthread_cond_destroy(&amp;priv-&gt;cond);</div><div class='add'>+    (void)pthread_mutex_destroy(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    br_free_children(this, priv, priv-&gt;child_count);</div><div class='add'>+</div><div class='add'>+free_priv:</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+out:</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-	br_private_t *priv = this-&gt;private;</div><div class='add'>+    br_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;iamscrubber)</div><div class='del'>-                br_fini_signer (this, priv);</div><div class='del'>-        else</div><div class='del'>-                (void) br_free_scrubber_monitor (this, priv);</div><div class='add'>+    if (!priv-&gt;iamscrubber)</div><div class='add'>+        br_fini_signer(this, priv);</div><div class='add'>+    else</div><div class='add'>+        (void)br_free_scrubber_monitor(this, priv);</div><div class='ctx'> </div><div class='del'>-        br_free_children (this, priv, priv-&gt;child_count);</div><div class='add'>+    br_free_children(this, priv, priv-&gt;child_count);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-	GF_FREE (priv);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> </div><div class='del'>-        glusterfs_ctx_tw_put (this-&gt;ctx);</div><div class='add'>+    glusterfs_ctx_tw_put(this-&gt;ctx);</div><div class='ctx'> </div><div class='del'>-	return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_reconfigure_monitor (xlator_t *this)</div><div class='add'>+br_reconfigure_monitor(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = br_scrub_state_machine (this, _gf_false);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRB_MSG_RESCHEDULE_SCRUBBER_FAILED,</div><div class='del'>-                        "Could not reschedule scrubber for the volume. Scrubbing "</div><div class='del'>-                        "will continue according to old frequency.");</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = br_scrub_state_machine(this, _gf_false);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRB_MSG_RESCHEDULE_SCRUBBER_FAILED,</div><div class='add'>+               "Could not reschedule scrubber for the volume. Scrubbing "</div><div class='add'>+               "will continue according to old frequency.");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_reconfigure_scrubber (xlator_t *this, dict_t *options)</div><div class='add'>+br_reconfigure_scrubber(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int32_t       ret   = -1;</div><div class='del'>-        br_private_t *priv  = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = br_scrubber_handle_options (this, priv, options);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = br_scrubber_handle_options(this, priv, options);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        /* change state for all _up_ subvolume(s) */</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                br_reconfigure_monitor (this);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+    /* change state for all _up_ subvolume(s) */</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        br_reconfigure_monitor(this);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>- err:</div><div class='del'>-        return ret;</div><div class='add'>+err:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_reconfigure_signer (xlator_t *this, dict_t *options)</div><div class='add'>+br_reconfigure_signer(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        br_private_t *priv = this-&gt;private;</div><div class='add'>+    br_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        return br_signer_handle_options (this, priv, options);</div><div class='add'>+    return br_signer_handle_options(this, priv, options);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        br_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    br_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;iamscrubber)</div><div class='del'>-                ret = br_reconfigure_scrubber (this, options);</div><div class='del'>-        else</div><div class='del'>-                ret = br_reconfigure_signer (this, options);</div><div class='add'>+    if (priv-&gt;iamscrubber)</div><div class='add'>+        ret = br_reconfigure_scrubber(this, options);</div><div class='add'>+    else</div><div class='add'>+        ret = br_reconfigure_signer(this, options);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops;</div><div class='hunk'>@@ -2145,49 +2161,55 @@ struct xlator_fops fops;</div><div class='ctx'> struct xlator_cbks cbks;</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key = {"expiry-time"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = SIGNING_TIMEOUT,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Waiting time for an object on which it waits "</div><div class='del'>-                         "before it is signed",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"brick-count"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Total number of bricks for the current node for "</div><div class='del'>-                         "all volumes in the trusted storage pool.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"scrubber", "scrub"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "false",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='del'>-          .description = "option to run as a scrubber",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"scrub-throttle"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "lazy",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Scrub-throttle value is a measure of how fast "</div><div class='del'>-                         "or slow the scrubber scrubs the filesystem for "</div><div class='del'>-                         "volume &lt;VOLNAME&gt;",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"scrub-freq"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "biweekly",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Scrub frequency for volume &lt;VOLNAME&gt;",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"scrub-state"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "active",</div><div class='del'>-          .op_version = {GD_OP_VERSION_4_0_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .description = "Pause/Resume scrub. Upon resume, scrubber "</div><div class='del'>-                         "continues from where it left off.",</div><div class='del'>-        },</div><div class='del'>-	{ .key  = {NULL} },</div><div class='add'>+    {</div><div class='add'>+        .key = {"expiry-time"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .default_value = SIGNING_TIMEOUT,</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .description = "Waiting time for an object on which it waits "</div><div class='add'>+                       "before it is signed",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"brick-count"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .description = "Total number of bricks for the current node for "</div><div class='add'>+                       "all volumes in the trusted storage pool.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"scrubber", "scrub"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "false",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='add'>+        .description = "option to run as a scrubber",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"scrub-throttle"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = "lazy",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .description = "Scrub-throttle value is a measure of how fast "</div><div class='add'>+                       "or slow the scrubber scrubs the filesystem for "</div><div class='add'>+                       "volume &lt;VOLNAME&gt;",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"scrub-freq"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = "biweekly",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .description = "Scrub frequency for volume &lt;VOLNAME&gt;",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"scrub-state"},</div><div class='add'>+        .type = GF_OPTION_TYPE_STR,</div><div class='add'>+        .default_value = "active",</div><div class='add'>+        .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+        .description = "Pause/Resume scrub. Upon resume, scrubber "</div><div class='add'>+                       "continues from where it left off.",</div><div class='add'>+    },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c b/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c<br/>index 42398bbf2ca..cb567297b60 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/stub/bit-rot-stub-helpers.c</a></div><div class='hunk'>@@ -11,89 +11,88 @@</div><div class='ctx'> #include "bit-rot-stub.h"</div><div class='ctx'> </div><div class='ctx'> br_stub_fd_t *</div><div class='del'>-br_stub_fd_new (void)</div><div class='add'>+br_stub_fd_new(void)</div><div class='ctx'> {</div><div class='del'>-        br_stub_fd_t    *br_stub_fd = NULL;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='ctx'> </div><div class='del'>-        br_stub_fd = GF_CALLOC (1, sizeof (*br_stub_fd),</div><div class='del'>-                                gf_br_stub_mt_br_stub_fd_t);</div><div class='add'>+    br_stub_fd = GF_CALLOC(1, sizeof(*br_stub_fd), gf_br_stub_mt_br_stub_fd_t);</div><div class='ctx'> </div><div class='del'>-        return br_stub_fd;</div><div class='add'>+    return br_stub_fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__br_stub_fd_ctx_set (xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd)</div><div class='add'>+__br_stub_fd_ctx_set(xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd)</div><div class='ctx'> {</div><div class='del'>-        uint64_t    value = 0;</div><div class='del'>-        int         ret   = -1;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, br_stub_fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, br_stub_fd, out);</div><div class='ctx'> </div><div class='del'>-        value = (uint64_t)(long) br_stub_fd;</div><div class='add'>+    value = (uint64_t)(long)br_stub_fd;</div><div class='ctx'> </div><div class='del'>-        ret = __fd_ctx_set (fd, this, value);</div><div class='add'>+    ret = __fd_ctx_set(fd, this, value);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> br_stub_fd_t *</div><div class='del'>-__br_stub_fd_ctx_get (xlator_t *this, fd_t *fd)</div><div class='add'>+__br_stub_fd_ctx_get(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        br_stub_fd_t *br_stub_fd = NULL;</div><div class='del'>-        uint64_t  value  = 0;</div><div class='del'>-        int       ret    = -1;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-        ret = __fd_ctx_get (fd, this, &amp;value);</div><div class='del'>-        if (ret)</div><div class='del'>-                return NULL;</div><div class='add'>+    ret = __fd_ctx_get(fd, this, &amp;value);</div><div class='add'>+    if (ret)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        br_stub_fd = (br_stub_fd_t *) ((long) value);</div><div class='add'>+    br_stub_fd = (br_stub_fd_t *)((long)value);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return br_stub_fd;</div><div class='add'>+    return br_stub_fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> br_stub_fd_t *</div><div class='del'>-br_stub_fd_ctx_get (xlator_t *this, fd_t *fd)</div><div class='add'>+br_stub_fd_ctx_get(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        br_stub_fd_t *br_stub_fd = NULL;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                br_stub_fd = __br_stub_fd_ctx_get (this, fd);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        br_stub_fd = __br_stub_fd_ctx_get(this, fd);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return br_stub_fd;</div><div class='add'>+    return br_stub_fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_fd_ctx_set (xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd)</div><div class='add'>+br_stub_fd_ctx_set(xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd)</div><div class='ctx'> {</div><div class='del'>-        int32_t    ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, br_stub_fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, br_stub_fd, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __br_stub_fd_ctx_set (this, fd, br_stub_fd);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __br_stub_fd_ctx_set(this, fd, br_stub_fd);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -101,114 +100,114 @@ out:</div><div class='ctx'>  * @gfid: gfid of the bad object being added to the bad objects directory</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-br_stub_add (xlator_t *this, uuid_t gfid)</div><div class='add'>+br_stub_add(xlator_t *this, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        char              gfid_path[BR_PATH_MAX_PLUS] = {0};</div><div class='del'>-        char              bad_gfid_path[BR_PATH_MAX_PLUS] = {0};</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='del'>-        struct stat       st = {0};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name, !gf_uuid_is_null (gfid),</div><div class='del'>-                                       out, errno, EINVAL);</div><div class='add'>+    char gfid_path[BR_PATH_MAX_PLUS] = {0};</div><div class='add'>+    char bad_gfid_path[BR_PATH_MAX_PLUS] = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    struct stat st = {0};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, !gf_uuid_is_null(gfid), out,</div><div class='add'>+                                  errno, EINVAL);</div><div class='add'>+</div><div class='add'>+    snprintf(gfid_path, sizeof(gfid_path), "%s/%s", priv-&gt;stub_basepath,</div><div class='add'>+             uuid_utoa(gfid));</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(gfid_path, &amp;st);</div><div class='add'>+    if (!ret)</div><div class='add'>+        goto out;</div><div class='add'>+    snprintf(bad_gfid_path, sizeof(bad_gfid_path), "%s/stub-%s",</div><div class='add'>+             priv-&gt;stub_basepath, uuid_utoa(priv-&gt;bad_object_dir_gfid));</div><div class='add'>+</div><div class='add'>+    ret = sys_link(bad_gfid_path, gfid_path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if ((errno != ENOENT) &amp;&amp; (errno != EMLINK) &amp;&amp; (errno != EEXIST))</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        snprintf (gfid_path, sizeof (gfid_path), "%s/%s",</div><div class='del'>-                  priv-&gt;stub_basepath, uuid_utoa (gfid));</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (gfid_path, &amp;st);</div><div class='del'>-        if (!ret)</div><div class='del'>-                goto out;</div><div class='del'>-        snprintf (bad_gfid_path, sizeof (bad_gfid_path), "%s/stub-%s",</div><div class='del'>-                  priv-&gt;stub_basepath, uuid_utoa (priv-&gt;bad_object_dir_gfid));</div><div class='del'>-</div><div class='del'>-        ret = sys_link (bad_gfid_path, gfid_path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if ((errno != ENOENT) &amp;&amp; (errno != EMLINK) &amp;&amp; (errno != EEXIST))</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Continue with success. At least we'll have half of the</div><div class='del'>-                 * functionality, in the sense, object is marked bad and</div><div class='del'>-                 * would be inaccessible. It's only scrub status that would</div><div class='del'>-                 * show up less number of objects. That's fine as we'll have</div><div class='del'>-                 * the log files that will have the missing information.</div><div class='del'>-                 */</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, errno, BRS_MSG_LINK_FAIL,</div><div class='del'>-                        "failed to record  gfid [%s]", uuid_utoa (gfid));</div><div class='del'>-        }</div><div class='add'>+        /*</div><div class='add'>+         * Continue with success. At least we'll have half of the</div><div class='add'>+         * functionality, in the sense, object is marked bad and</div><div class='add'>+         * would be inaccessible. It's only scrub status that would</div><div class='add'>+         * show up less number of objects. That's fine as we'll have</div><div class='add'>+         * the log files that will have the missing information.</div><div class='add'>+         */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, errno, BRS_MSG_LINK_FAIL,</div><div class='add'>+               "failed to record  gfid [%s]", uuid_utoa(gfid));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_del (xlator_t *this, uuid_t gfid)</div><div class='add'>+br_stub_del(xlator_t *this, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        int32_t      op_errno __attribute__((unused)) = 0;</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        char         gfid_path[BR_PATH_MAX_PLUS] = {0};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name, !gf_uuid_is_null (gfid),</div><div class='del'>-                                       out, op_errno, EINVAL);</div><div class='del'>-        snprintf (gfid_path, sizeof (gfid_path), "%s/%s",</div><div class='del'>-                  priv-&gt;stub_basepath, uuid_utoa (gfid));</div><div class='del'>-        ret = sys_unlink (gfid_path);</div><div class='del'>-        if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        BRS_MSG_BAD_OBJ_UNLINK_FAIL,</div><div class='del'>-                        "%s: failed to delete bad object link from quarantine "</div><div class='del'>-                        "directory", gfid_path);</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int32_t op_errno __attribute__((unused)) = 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char gfid_path[BR_PATH_MAX_PLUS] = {0};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, !gf_uuid_is_null(gfid), out,</div><div class='add'>+                                  op_errno, EINVAL);</div><div class='add'>+    snprintf(gfid_path, sizeof(gfid_path), "%s/%s", priv-&gt;stub_basepath,</div><div class='add'>+             uuid_utoa(gfid));</div><div class='add'>+    ret = sys_unlink(gfid_path);</div><div class='add'>+    if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRS_MSG_BAD_OBJ_UNLINK_FAIL,</div><div class='add'>+               "%s: failed to delete bad object link from quarantine "</div><div class='add'>+               "directory",</div><div class='add'>+               gfid_path);</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_check_stub_directory (xlator_t *this, char *fullpath)</div><div class='add'>+br_stub_check_stub_directory(xlator_t *this, char *fullpath)</div><div class='ctx'> {</div><div class='del'>-        int         ret         = 0;</div><div class='del'>-        struct stat st          = {0,};</div><div class='del'>-        char  oldpath[BR_PATH_MAX_PLUS] = {0};</div><div class='del'>-        br_stub_private_t    *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        snprintf (oldpath, sizeof (oldpath), "%s/%s",</div><div class='del'>-                  priv-&gt;export, OLD_BR_STUB_QUARANTINE_DIR);</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (fullpath, &amp;st);</div><div class='del'>-        if (!ret &amp;&amp; !S_ISDIR (st.st_mode))</div><div class='del'>-                goto error_return;</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (errno != ENOENT)</div><div class='del'>-                        goto error_return;</div><div class='del'>-                ret =  sys_stat (oldpath, &amp;st);</div><div class='del'>-                if (ret)</div><div class='del'>-                        ret = mkdir_p (fullpath, 0600, _gf_true);</div><div class='del'>-                else</div><div class='del'>-                        ret = sys_rename (oldpath, fullpath);</div><div class='del'>-        }</div><div class='del'>-</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char oldpath[BR_PATH_MAX_PLUS] = {0};</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    snprintf(oldpath, sizeof(oldpath), "%s/%s", priv-&gt;export,</div><div class='add'>+             OLD_BR_STUB_QUARANTINE_DIR);</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(fullpath, &amp;st);</div><div class='add'>+    if (!ret &amp;&amp; !S_ISDIR(st.st_mode))</div><div class='add'>+        goto error_return;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (errno != ENOENT)</div><div class='add'>+            goto error_return;</div><div class='add'>+        ret = sys_stat(oldpath, &amp;st);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='del'>-                        "failed to create stub directory [%s]", fullpath);</div><div class='del'>-        return ret;</div><div class='add'>+            ret = mkdir_p(fullpath, 0600, _gf_true);</div><div class='add'>+        else</div><div class='add'>+            ret = sys_rename(oldpath, fullpath);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='add'>+               "failed to create stub directory [%s]", fullpath);</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> error_return:</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='del'>-                "Failed to verify stub directory [%s]", fullpath);</div><div class='del'>-        return -1;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='add'>+           "Failed to verify stub directory [%s]", fullpath);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -216,397 +215,405 @@ error_return:</div><div class='ctx'>  * directory.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-br_stub_check_stub_file (xlator_t *this, char *path)</div><div class='add'>+br_stub_check_stub_file(xlator_t *this, char *path)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int fd = -1;</div><div class='del'>-        struct stat st = {0,};</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (path, &amp;st);</div><div class='del'>-        if (!ret &amp;&amp; !S_ISREG (st.st_mode))</div><div class='del'>-                goto error_return;</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (errno != ENOENT)</div><div class='del'>-                        goto error_return;</div><div class='del'>-                fd = sys_creat (path, 0);</div><div class='del'>-                if (fd &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='del'>-                                "Failed to create stub file [%s]", path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fd &gt;= 0) {</div><div class='del'>-                sys_close (fd);</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    struct stat st = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(path, &amp;st);</div><div class='add'>+    if (!ret &amp;&amp; !S_ISREG(st.st_mode))</div><div class='add'>+        goto error_return;</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (errno != ENOENT)</div><div class='add'>+            goto error_return;</div><div class='add'>+        fd = sys_creat(path, 0);</div><div class='add'>+        if (fd &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='add'>+                   "Failed to create stub file [%s]", path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd &gt;= 0) {</div><div class='add'>+        sys_close(fd);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> error_return:</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                BRS_MSG_BAD_OBJECT_DIR_FAIL, "Failed to verify stub file [%s]", path);</div><div class='del'>-        return -1;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, errno, BRS_MSG_BAD_OBJECT_DIR_FAIL,</div><div class='add'>+           "Failed to verify stub file [%s]", path);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_dir_create (xlator_t *this, br_stub_private_t *priv)</div><div class='add'>+br_stub_dir_create(xlator_t *this, br_stub_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int          ret = -1;</div><div class='del'>-        char         fullpath[BR_PATH_MAX_PLUS] = {0,};</div><div class='del'>-        char         stub_gfid_path[BR_PATH_MAX_PLUS] = {0,};</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (priv-&gt;bad_object_dir_gfid, BR_BAD_OBJ_CONTAINER);</div><div class='del'>-</div><div class='del'>-        if (snprintf (fullpath, sizeof (fullpath), "%s",</div><div class='del'>-		      priv-&gt;stub_basepath) &gt;= sizeof (fullpath))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (snprintf (stub_gfid_path, sizeof (stub_gfid_path), "%s/stub-%s",</div><div class='del'>-                  priv-&gt;stub_basepath, uuid_utoa (priv-&gt;bad_object_dir_gfid))</div><div class='del'>-                  &gt;= sizeof (stub_gfid_path))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_check_stub_directory (this, fullpath);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = br_stub_check_stub_file (this, stub_gfid_path);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char fullpath[BR_PATH_MAX_PLUS] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char stub_gfid_path[BR_PATH_MAX_PLUS] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(priv-&gt;bad_object_dir_gfid, BR_BAD_OBJ_CONTAINER);</div><div class='add'>+</div><div class='add'>+    if (snprintf(fullpath, sizeof(fullpath), "%s", priv-&gt;stub_basepath) &gt;=</div><div class='add'>+        sizeof(fullpath))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (snprintf(stub_gfid_path, sizeof(stub_gfid_path), "%s/stub-%s",</div><div class='add'>+                 priv-&gt;stub_basepath, uuid_utoa(priv-&gt;bad_object_dir_gfid)) &gt;=</div><div class='add'>+        sizeof(stub_gfid_path))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_check_stub_directory(this, fullpath);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = br_stub_check_stub_file(this, stub_gfid_path);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-__br_stub_dequeue (struct list_head *callstubs)</div><div class='add'>+__br_stub_dequeue(struct list_head *callstubs)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (callstubs)) {</div><div class='del'>-                stub = list_entry (callstubs-&gt;next, call_stub_t, list);</div><div class='del'>-                list_del_init (&amp;stub-&gt;list);</div><div class='del'>-        }</div><div class='add'>+    if (!list_empty(callstubs)) {</div><div class='add'>+        stub = list_entry(callstubs-&gt;next, call_stub_t, list);</div><div class='add'>+        list_del_init(&amp;stub-&gt;list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__br_stub_enqueue (struct list_head *callstubs, call_stub_t *stub)</div><div class='add'>+__br_stub_enqueue(struct list_head *callstubs, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        list_add_tail (&amp;stub-&gt;list, callstubs);</div><div class='add'>+    list_add_tail(&amp;stub-&gt;list, callstubs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_stub_worker_enqueue (xlator_t *this, call_stub_t *stub)</div><div class='add'>+br_stub_worker_enqueue(xlator_t *this, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        br_stub_private_t    *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;container.bad_lock);</div><div class='del'>-        {</div><div class='del'>-                __br_stub_enqueue (&amp;priv-&gt;container.bad_queue, stub);</div><div class='del'>-                pthread_cond_signal (&amp;priv-&gt;container.bad_cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;container.bad_lock);</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;container.bad_lock);</div><div class='add'>+    {</div><div class='add'>+        __br_stub_enqueue(&amp;priv-&gt;container.bad_queue, stub);</div><div class='add'>+        pthread_cond_signal(&amp;priv-&gt;container.bad_cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;container.bad_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-br_stub_worker (void *data)</div><div class='add'>+br_stub_worker(void *data)</div><div class='ctx'> {</div><div class='del'>-        br_stub_private_t     *priv = NULL;</div><div class='del'>-        xlator_t         *this = NULL;</div><div class='del'>-        call_stub_t      *stub = NULL;</div><div class='del'>-</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        THIS = data;</div><div class='del'>-        this = data;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    THIS = data;</div><div class='add'>+    this = data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;container.bad_lock);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;priv-&gt;container.bad_queue)) {</div><div class='del'>-                              (void) pthread_cond_wait (&amp;priv-&gt;container.bad_cond,</div><div class='del'>-                                                        &amp;priv-&gt;container.bad_lock);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        stub = __br_stub_dequeue (&amp;priv-&gt;container.bad_queue);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;container.bad_lock);</div><div class='add'>+    for (;;) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;container.bad_lock);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;priv-&gt;container.bad_queue)) {</div><div class='add'>+                (void)pthread_cond_wait(&amp;priv-&gt;container.bad_cond,</div><div class='add'>+                                        &amp;priv-&gt;container.bad_lock);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (stub) /* guard against spurious wakeups */</div><div class='del'>-                        call_resume (stub);</div><div class='add'>+            stub = __br_stub_dequeue(&amp;priv-&gt;container.bad_queue);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;container.bad_lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        if (stub) /* guard against spurious wakeups */</div><div class='add'>+            call_resume(stub);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_lookup_wrapper (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      loc_t *loc, dict_t *xattr_req)</div><div class='add'>+br_stub_lookup_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                       dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        br_stub_private_t *priv        = NULL;</div><div class='del'>-        struct stat        lstatbuf    = {0};</div><div class='del'>-        int                ret         = 0;</div><div class='del'>-        int32_t            op_errno    = EINVAL;</div><div class='del'>-        int32_t            op_ret      = -1;</div><div class='del'>-        struct iatt        stbuf       = {0, };</div><div class='del'>-        struct iatt        postparent  = {0,};</div><div class='del'>-        dict_t            *xattr       = NULL;</div><div class='del'>-        gf_boolean_t       ver_enabled = _gf_false;</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        BR_STUB_VER_COND_GOTO (priv, (!ver_enabled), done);</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (loc, done);</div><div class='del'>-        if (gf_uuid_compare (loc-&gt;gfid, priv-&gt;bad_object_dir_gfid))</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        ret = sys_lstat (priv-&gt;stub_basepath, &amp;lstatbuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, errno, "Stat failed on stub bad "</div><div class='del'>-                              "object dir");</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                goto done;</div><div class='del'>-        } else if (!S_ISDIR (lstatbuf.st_mode)) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, errno, "bad object container is not "</div><div class='del'>-                              "a directory");</div><div class='del'>-                op_errno = ENOTDIR;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iatt_from_stat (&amp;stbuf, &amp;lstatbuf);</div><div class='del'>-        gf_uuid_copy (stbuf.ia_gfid, priv-&gt;bad_object_dir_gfid);</div><div class='del'>-</div><div class='del'>-        op_ret = op_errno = 0;</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-        }</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    struct stat lstatbuf = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt postparent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    gf_boolean_t ver_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    BR_STUB_VER_COND_GOTO(priv, (!ver_enabled), done);</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(loc, done);</div><div class='add'>+    if (gf_uuid_compare(loc-&gt;gfid, priv-&gt;bad_object_dir_gfid))</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    ret = sys_lstat(priv-&gt;stub_basepath, &amp;lstatbuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, errno,</div><div class='add'>+                     "Stat failed on stub bad "</div><div class='add'>+                     "object dir");</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        goto done;</div><div class='add'>+    } else if (!S_ISDIR(lstatbuf.st_mode)) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, errno,</div><div class='add'>+                     "bad object container is not "</div><div class='add'>+                     "a directory");</div><div class='add'>+        op_errno = ENOTDIR;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iatt_from_stat(&amp;stbuf, &amp;lstatbuf);</div><div class='add'>+    gf_uuid_copy(stbuf.ia_gfid, priv-&gt;bad_object_dir_gfid);</div><div class='add'>+</div><div class='add'>+    op_ret = op_errno = 0;</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno,</div><div class='del'>-                             loc-&gt;inode, &amp;stbuf, xattr, &amp;postparent);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, loc-&gt;inode, &amp;stbuf,</div><div class='add'>+                        xattr, &amp;postparent);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-is_bad_gfid_file_current (char *filename, uuid_t gfid)</div><div class='add'>+is_bad_gfid_file_current(char *filename, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        char current_stub_gfid[GF_UUID_BUF_SIZE + 16] = {0, };</div><div class='add'>+    char current_stub_gfid[GF_UUID_BUF_SIZE + 16] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        snprintf (current_stub_gfid, sizeof current_stub_gfid,</div><div class='del'>-                  "stub-%s", uuid_utoa(gfid));</div><div class='del'>-        return (!strcmp(filename, current_stub_gfid));</div><div class='add'>+    snprintf(current_stub_gfid, sizeof current_stub_gfid, "stub-%s",</div><div class='add'>+             uuid_utoa(gfid));</div><div class='add'>+    return (!strcmp(filename, current_stub_gfid));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-check_delete_stale_bad_file (xlator_t *this, char *filename)</div><div class='add'>+check_delete_stale_bad_file(xlator_t *this, char *filename)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        struct stat     st = {0};</div><div class='del'>-        char            filepath[BR_PATH_MAX_PLUS] = {0};</div><div class='del'>-        br_stub_private_t    *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct stat st = {0};</div><div class='add'>+    char filepath[BR_PATH_MAX_PLUS] = {0};</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (is_bad_gfid_file_current (filename, priv-&gt;bad_object_dir_gfid))</div><div class='del'>-                return;</div><div class='add'>+    if (is_bad_gfid_file_current(filename, priv-&gt;bad_object_dir_gfid))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        snprintf (filepath, sizeof (filepath), "%s/%s",</div><div class='del'>-                  priv-&gt;stub_basepath, filename);</div><div class='add'>+    snprintf(filepath, sizeof(filepath), "%s/%s", priv-&gt;stub_basepath,</div><div class='add'>+             filename);</div><div class='ctx'> </div><div class='del'>-        ret = sys_stat (filepath, &amp;st);</div><div class='del'>-        if (!ret &amp;&amp; st.st_nlink == 1)</div><div class='del'>-                sys_unlink (filepath);</div><div class='add'>+    ret = sys_stat(filepath, &amp;st);</div><div class='add'>+    if (!ret &amp;&amp; st.st_nlink == 1)</div><div class='add'>+        sys_unlink(filepath);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_fill_readdir (fd_t *fd, br_stub_fd_t *fctx, DIR *dir, off_t off,</div><div class='del'>-                      size_t size, gf_dirent_t *entries)</div><div class='add'>+br_stub_fill_readdir(fd_t *fd, br_stub_fd_t *fctx, DIR *dir, off_t off,</div><div class='add'>+                     size_t size, gf_dirent_t *entries)</div><div class='ctx'> {</div><div class='del'>-        off_t          in_case = -1;</div><div class='del'>-        off_t          last_off = 0;</div><div class='del'>-        size_t         filled = 0;</div><div class='del'>-        int            count = 0;</div><div class='del'>-        int32_t        this_size      = -1;</div><div class='del'>-        gf_dirent_t   *this_entry     = NULL;</div><div class='del'>-        xlator_t      *this           = NULL;</div><div class='del'>-        struct dirent *entry          = NULL;</div><div class='del'>-        struct dirent  scratch[2]     = {{0,},};</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!off) {</div><div class='del'>-                rewinddir (dir);</div><div class='del'>-        } else {</div><div class='del'>-                seekdir (dir, off);</div><div class='add'>+    off_t in_case = -1;</div><div class='add'>+    off_t last_off = 0;</div><div class='add'>+    size_t filled = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int32_t this_size = -1;</div><div class='add'>+    gf_dirent_t *this_entry = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!off) {</div><div class='add'>+        rewinddir(dir);</div><div class='add'>+    } else {</div><div class='add'>+        seekdir(dir, off);</div><div class='ctx'> #ifndef GF_LINUX_HOST_OS</div><div class='del'>-                if ((u_long)telldir(dir) != off &amp;&amp;</div><div class='del'>-                    off != fctx-&gt;bad_object.dir_eof) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_BAD_OBJECT_DIR_SEEK_FAIL,</div><div class='del'>-                                "seekdir(0x%llx) failed on dir=%p: "</div><div class='del'>-				"Invalid argument (offset reused from "</div><div class='del'>-				"another DIR * structure?)", off, dir);</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        count = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-#endif /* GF_LINUX_HOST_OS */</div><div class='add'>+        if ((u_long)telldir(dir) != off &amp;&amp; off != fctx-&gt;bad_object.dir_eof) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   BRS_MSG_BAD_OBJECT_DIR_SEEK_FAIL,</div><div class='add'>+                   "seekdir(0x%llx) failed on dir=%p: "</div><div class='add'>+                   "Invalid argument (offset reused from "</div><div class='add'>+                   "another DIR * structure?)",</div><div class='add'>+                   off, dir);</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            count = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        while (filled &lt;= size) {</div><div class='del'>-                in_case = (u_long)telldir (dir);</div><div class='del'>-</div><div class='del'>-                if (in_case == -1) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_BAD_OBJECT_DIR_TELL_FAIL,</div><div class='del'>-                                "telldir failed on dir=%p: %s",</div><div class='del'>-                                dir, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (dir, scratch);</div><div class='del'>-                if (!entry || errno != 0) {</div><div class='del'>-                        if (errno == EBADF) {</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        BRS_MSG_BAD_OBJECT_DIR_READ_FAIL,</div><div class='del'>-                                        "readdir failed on dir=%p: %s",</div><div class='del'>-                                        dir, strerror (errno));</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                    !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (!strncmp (entry-&gt;d_name, "stub-",</div><div class='del'>-                              strlen ("stub-"))) {</div><div class='del'>-                        check_delete_stale_bad_file (this, entry-&gt;d_name);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                this_size = max (sizeof (gf_dirent_t),</div><div class='del'>-                                 sizeof (gfs3_dirplist))</div><div class='del'>-                        + strlen (entry-&gt;d_name) + 1;</div><div class='del'>-</div><div class='del'>-                if (this_size + filled &gt; size) {</div><div class='del'>-                        seekdir (dir, in_case);</div><div class='del'>-#ifndef GF_LINUX_HOST_OS</div><div class='del'>-                        if ((u_long)telldir(dir) != in_case &amp;&amp;</div><div class='del'>-                            in_case != fctx-&gt;bad_object.dir_eof) {</div><div class='del'>-				gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        BRS_MSG_BAD_OBJECT_DIR_SEEK_FAIL,</div><div class='del'>-					"seekdir(0x%llx) failed on dir=%p: "</div><div class='del'>-					"Invalid argument (offset reused from "</div><div class='del'>-					"another DIR * structure?)",</div><div class='del'>-					in_case, dir);</div><div class='del'>-				errno = EINVAL;</div><div class='del'>-				count = -1;</div><div class='del'>-				goto out;</div><div class='del'>-                        }</div><div class='ctx'> #endif /* GF_LINUX_HOST_OS */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                this_entry = gf_dirent_for_name (entry-&gt;d_name);</div><div class='del'>-</div><div class='del'>-                if (!this_entry) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_NO_MEMORY,</div><div class='del'>-                                "could not create gf_dirent for entry %s: (%s)",</div><div class='del'>-                                entry-&gt;d_name, strerror (errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /*</div><div class='del'>-                 * we store the offset of next entry here, which is</div><div class='del'>-                 * probably not intended, but code using syncop_readdir()</div><div class='del'>-                 * (glfs-heal.c, afr-self-heald.c, pump.c) rely on it</div><div class='del'>-                 * for directory read resumption.</div><div class='del'>-                 */</div><div class='del'>-                last_off = (u_long)telldir(dir);</div><div class='del'>-                this_entry-&gt;d_off = last_off;</div><div class='del'>-                this_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='del'>-</div><div class='del'>-                list_add_tail (&amp;this_entry-&gt;list, &amp;entries-&gt;list);</div><div class='del'>-</div><div class='del'>-                filled += this_size;</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((!sys_readdir (dir, scratch) &amp;&amp; (errno == 0))) {</div><div class='del'>-                /* Indicate EOF */</div><div class='del'>-                errno = ENOENT;</div><div class='del'>-                /* Remember EOF offset for later detection */</div><div class='del'>-                fctx-&gt;bad_object.dir_eof = last_off;</div><div class='add'>+    while (filled &lt;= size) {</div><div class='add'>+        in_case = (u_long)telldir(dir);</div><div class='add'>+</div><div class='add'>+        if (in_case == -1) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   BRS_MSG_BAD_OBJECT_DIR_TELL_FAIL,</div><div class='add'>+                   "telldir failed on dir=%p: %s", dir, strerror(errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='del'>-        return count;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-br_stub_readdir_wrapper (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        br_stub_fd_t         *fctx           = NULL;</div><div class='del'>-        DIR                  *dir            = NULL;</div><div class='del'>-        int                   ret            = -1;</div><div class='del'>-        int32_t               op_ret         = -1;</div><div class='del'>-        int32_t               op_errno       = 0;</div><div class='del'>-        int                   count          = 0;</div><div class='del'>-        gf_dirent_t           entries;</div><div class='del'>-        gf_boolean_t          xdata_unref    = _gf_false;</div><div class='del'>-        dict_t               *dict           = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        fctx = br_stub_fd_ctx_get (this, fd);</div><div class='del'>-        if (!fctx) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_GET_FD_CONTEXT_FAILED,</div><div class='del'>-                        "pfd is NULL, fd=%p", fd);</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto done;</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(dir, scratch);</div><div class='add'>+        if (!entry || errno != 0) {</div><div class='add'>+            if (errno == EBADF) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       BRS_MSG_BAD_OBJECT_DIR_READ_FAIL,</div><div class='add'>+                       "readdir failed on dir=%p: %s", dir, strerror(errno));</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dir = fctx-&gt;bad_object.dir;</div><div class='add'>+        if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        if (!dir) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_BAD_HANDLE_DIR_NULL,</div><div class='del'>-                        "dir is NULL for fd=%p", fd);</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto done;</div><div class='add'>+        if (!strncmp(entry-&gt;d_name, "stub-", strlen("stub-"))) {</div><div class='add'>+            check_delete_stale_bad_file(this, entry-&gt;d_name);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        count = br_stub_fill_readdir (fd, fctx, dir, off, size, &amp;entries);</div><div class='add'>+        this_size = max(sizeof(gf_dirent_t), sizeof(gfs3_dirplist)) +</div><div class='add'>+                    strlen(entry-&gt;d_name) + 1;</div><div class='ctx'> </div><div class='del'>-        /* pick ENOENT to indicate EOF */</div><div class='del'>-        op_errno = errno;</div><div class='del'>-        op_ret = count;</div><div class='add'>+        if (this_size + filled &gt; size) {</div><div class='add'>+            seekdir(dir, in_case);</div><div class='add'>+#ifndef GF_LINUX_HOST_OS</div><div class='add'>+            if ((u_long)telldir(dir) != in_case &amp;&amp;</div><div class='add'>+                in_case != fctx-&gt;bad_object.dir_eof) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       BRS_MSG_BAD_OBJECT_DIR_SEEK_FAIL,</div><div class='add'>+                       "seekdir(0x%llx) failed on dir=%p: "</div><div class='add'>+                       "Invalid argument (offset reused from "</div><div class='add'>+                       "another DIR * structure?)",</div><div class='add'>+                       in_case, dir);</div><div class='add'>+                errno = EINVAL;</div><div class='add'>+                count = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+#endif /* GF_LINUX_HOST_OS */</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        this_entry = gf_dirent_for_name(entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-        dict = xdata;</div><div class='del'>-        (void) br_stub_bad_objects_path (this, fd, &amp;entries, &amp;dict);</div><div class='del'>-        if (!xdata &amp;&amp; dict) {</div><div class='del'>-                xdata = dict;</div><div class='del'>-                xdata_unref = _gf_true;</div><div class='add'>+        if (!this_entry) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_MEMORY,</div><div class='add'>+                   "could not create gf_dirent for entry %s: (%s)",</div><div class='add'>+                   entry-&gt;d_name, strerror(errno));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        /*</div><div class='add'>+         * we store the offset of next entry here, which is</div><div class='add'>+         * probably not intended, but code using syncop_readdir()</div><div class='add'>+         * (glfs-heal.c, afr-self-heald.c, pump.c) rely on it</div><div class='add'>+         * for directory read resumption.</div><div class='add'>+         */</div><div class='add'>+        last_off = (u_long)telldir(dir);</div><div class='add'>+        this_entry-&gt;d_off = last_off;</div><div class='add'>+        this_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='add'>+</div><div class='add'>+        list_add_tail(&amp;this_entry-&gt;list, &amp;entries-&gt;list);</div><div class='add'>+</div><div class='add'>+        filled += this_size;</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((!sys_readdir(dir, scratch) &amp;&amp; (errno == 0))) {</div><div class='add'>+        /* Indicate EOF */</div><div class='add'>+        errno = ENOENT;</div><div class='add'>+        /* Remember EOF offset for later detection */</div><div class='add'>+        fctx-&gt;bad_object.dir_eof = last_off;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return count;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+br_stub_readdir_wrapper(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                        size_t size, off_t off, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    br_stub_fd_t *fctx = NULL;</div><div class='add'>+    DIR *dir = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_boolean_t xdata_unref = _gf_false;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    fctx = br_stub_fd_ctx_get(this, fd);</div><div class='add'>+    if (!fctx) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_GET_FD_CONTEXT_FAILED,</div><div class='add'>+               "pfd is NULL, fd=%p", fd);</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dir = fctx-&gt;bad_object.dir;</div><div class='add'>+</div><div class='add'>+    if (!dir) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_BAD_HANDLE_DIR_NULL,</div><div class='add'>+               "dir is NULL for fd=%p", fd);</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    count = br_stub_fill_readdir(fd, fctx, dir, off, size, &amp;entries);</div><div class='add'>+</div><div class='add'>+    /* pick ENOENT to indicate EOF */</div><div class='add'>+    op_errno = errno;</div><div class='add'>+    op_ret = count;</div><div class='add'>+</div><div class='add'>+    dict = xdata;</div><div class='add'>+    (void)br_stub_bad_objects_path(this, fd, &amp;entries, &amp;dict);</div><div class='add'>+    if (!xdata &amp;&amp; dict) {</div><div class='add'>+        xdata = dict;</div><div class='add'>+        xdata_unref = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        STACK_UNWIND_STRICT (readdir, frame, op_ret, op_errno, &amp;entries, xdata);</div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='del'>-        if (xdata_unref)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readdir, frame, op_ret, op_errno, &amp;entries, xdata);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='add'>+    if (xdata_unref)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -642,168 +649,165 @@ done:</div><div class='ctx'>  *    path will not be printed in scrub and only the gfid will be there.</div><div class='ctx'>  **/</div><div class='ctx'> int</div><div class='del'>-br_stub_bad_objects_path (xlator_t *this, fd_t *fd, gf_dirent_t *entries,</div><div class='del'>-                          dict_t **dict)</div><div class='add'>+br_stub_bad_objects_path(xlator_t *this, fd_t *fd, gf_dirent_t *entries,</div><div class='add'>+                         dict_t **dict)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t     *entry    = NULL;</div><div class='del'>-        inode_t         *inode    = NULL;</div><div class='del'>-        char            *hpath    = NULL;</div><div class='del'>-        uuid_t           gfid     = {0};</div><div class='del'>-        int              ret      = -1;</div><div class='del'>-        dict_t          *tmp_dict = NULL;</div><div class='del'>-        char             str_gfid[64] = {0};</div><div class='del'>-</div><div class='del'>-        if (list_empty(&amp;entries-&gt;list))</div><div class='del'>-                return 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    char *hpath = NULL;</div><div class='add'>+    uuid_t gfid = {0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    dict_t *tmp_dict = NULL;</div><div class='add'>+    char str_gfid[64] = {0};</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;entries-&gt;list))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        tmp_dict = *dict;</div><div class='add'>+    tmp_dict = *dict;</div><div class='ctx'> </div><div class='add'>+    if (!tmp_dict) {</div><div class='add'>+        tmp_dict = dict_new();</div><div class='add'>+        /*</div><div class='add'>+         * If the allocation of dict fails then no need treat it</div><div class='add'>+         * it as a error. This path (or function) is executed when</div><div class='add'>+         * "gluster volume bitrot &lt;volume name&gt; scrub status" is</div><div class='add'>+         * executed, to get the list of the corrupted objects.</div><div class='add'>+         * And the motive of this function is to get the paths of</div><div class='add'>+         * the corrupted objects. If the dict allocation fails, then</div><div class='add'>+         * the scrub status will only show the gfids of those corrupted</div><div class='add'>+         * objects (which is the behavior as of the time of this patch</div><div class='add'>+         * being worked upon). So just return and only the gfids will</div><div class='add'>+         * be shown.</div><div class='add'>+         */</div><div class='ctx'>         if (!tmp_dict) {</div><div class='del'>-                tmp_dict = dict_new ();</div><div class='del'>-                /*</div><div class='del'>-                 * If the allocation of dict fails then no need treat it</div><div class='del'>-                 * it as a error. This path (or function) is executed when</div><div class='del'>-                 * "gluster volume bitrot &lt;volume name&gt; scrub status" is</div><div class='del'>-                 * executed, to get the list of the corrupted objects.</div><div class='del'>-                 * And the motive of this function is to get the paths of</div><div class='del'>-                 * the corrupted objects. If the dict allocation fails, then</div><div class='del'>-                 * the scrub status will only show the gfids of those corrupted</div><div class='del'>-                 * objects (which is the behavior as of the time of this patch</div><div class='del'>-                 * being worked upon). So just return and only the gfids will</div><div class='del'>-                 * be shown.</div><div class='del'>-                 */</div><div class='del'>-                if (!tmp_dict) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_MEMORY,</div><div class='del'>-                                "failed to allocate new dict for saving the paths "</div><div class='del'>-                                "of the corrupted objects. Scrub status will only "</div><div class='del'>-                                "display the gfid");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_MEMORY,</div><div class='add'>+                   "failed to allocate new dict for saving the paths "</div><div class='add'>+                   "of the corrupted objects. Scrub status will only "</div><div class='add'>+                   "display the gfid");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                gf_uuid_clear (gfid);</div><div class='del'>-                gf_uuid_parse (entry-&gt;d_name, gfid);</div><div class='del'>-</div><div class='del'>-                inode = inode_find (fd-&gt;inode-&gt;table, gfid);</div><div class='del'>-</div><div class='del'>-                /* No need to check the return value here.</div><div class='del'>-                 * Because @hpath is examined.</div><div class='del'>-                 */</div><div class='del'>-                (void) br_stub_get_path_of_gfid (this, fd-&gt;inode, inode,</div><div class='del'>-                                                 gfid, &amp;hpath);</div><div class='del'>-</div><div class='del'>-                if (hpath) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "path of the corrupted "</div><div class='del'>-                                      "object (gfid: %s) is %s",</div><div class='del'>-                                      uuid_utoa (gfid), hpath);</div><div class='del'>-                        br_stub_entry_xattr_fill (this, hpath, entry, tmp_dict);</div><div class='del'>-                } else</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                BRS_MSG_PATH_GET_FAILED,</div><div class='del'>-                                "failed to get the path for the inode %s",</div><div class='del'>-                                uuid_utoa_r (gfid, str_gfid));</div><div class='del'>-</div><div class='del'>-                inode = NULL;</div><div class='del'>-                hpath = NULL;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        gf_uuid_clear(gfid);</div><div class='add'>+        gf_uuid_parse(entry-&gt;d_name, gfid);</div><div class='ctx'> </div><div class='del'>-         ret = 0;</div><div class='del'>-         *dict = tmp_dict;</div><div class='add'>+        inode = inode_find(fd-&gt;inode-&gt;table, gfid);</div><div class='add'>+</div><div class='add'>+        /* No need to check the return value here.</div><div class='add'>+         * Because @hpath is examined.</div><div class='add'>+         */</div><div class='add'>+        (void)br_stub_get_path_of_gfid(this, fd-&gt;inode, inode, gfid, &amp;hpath);</div><div class='add'>+</div><div class='add'>+        if (hpath) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "path of the corrupted "</div><div class='add'>+                         "object (gfid: %s) is %s",</div><div class='add'>+                         uuid_utoa(gfid), hpath);</div><div class='add'>+            br_stub_entry_xattr_fill(this, hpath, entry, tmp_dict);</div><div class='add'>+        } else</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_PATH_GET_FAILED,</div><div class='add'>+                   "failed to get the path for the inode %s",</div><div class='add'>+                   uuid_utoa_r(gfid, str_gfid));</div><div class='add'>+</div><div class='add'>+        inode = NULL;</div><div class='add'>+        hpath = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    *dict = tmp_dict;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-         return ret;</div><div class='del'>- }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_get_path_of_gfid (xlator_t *this, inode_t *parent, inode_t *inode,</div><div class='del'>-                          uuid_t gfid, char **path)</div><div class='add'>+br_stub_get_path_of_gfid(xlator_t *this, inode_t *parent, inode_t *inode,</div><div class='add'>+                         uuid_t gfid, char **path)</div><div class='ctx'> {</div><div class='del'>-        int32_t    ret = -1;</div><div class='del'>-        char       gfid_str[64] = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bitrot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, parent, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, path, out);</div><div class='del'>-</div><div class='del'>-        /* Above, No need to validate the @inode for hard resolution. Because</div><div class='del'>-         * inode can be NULL and if it is NULL, then syncop_gfid_to_path_hard</div><div class='del'>-         * will allocate a new inode and proceed. So no need to bother about</div><div class='del'>-         * @inode. Because we need it only to send a syncop_getxattr call</div><div class='del'>-         * from inside syncop_gfid_to_path_hard. And getxattr fetches the</div><div class='del'>-         * path from the backend.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        ret = syncop_gfid_to_path_hard (parent-&gt;table, FIRST_CHILD (this), gfid,</div><div class='del'>-                                        inode, path, _gf_true);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char gfid_str[64] = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bitrot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, parent, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, path, out);</div><div class='add'>+</div><div class='add'>+    /* Above, No need to validate the @inode for hard resolution. Because</div><div class='add'>+     * inode can be NULL and if it is NULL, then syncop_gfid_to_path_hard</div><div class='add'>+     * will allocate a new inode and proceed. So no need to bother about</div><div class='add'>+     * @inode. Because we need it only to send a syncop_getxattr call</div><div class='add'>+     * from inside syncop_gfid_to_path_hard. And getxattr fetches the</div><div class='add'>+     * path from the backend.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = syncop_gfid_to_path_hard(parent-&gt;table, FIRST_CHILD(this), gfid,</div><div class='add'>+                                   inode, path, _gf_true);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_PATH_GET_FAILED,</div><div class='add'>+               "failed to get the path xattr from disk for the "</div><div class='add'>+               " gfid %s. Trying to get path from the memory",</div><div class='add'>+               uuid_utoa_r(gfid, gfid_str));</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Try with soft resolution of path if hard resolve fails. Because</div><div class='add'>+     * checking the xattr on disk to get the path of a inode (or gfid)</div><div class='add'>+     * is dependent on whether that option is enabled in the posix</div><div class='add'>+     * xlator or not. If it is not enabled, then hard resolution by</div><div class='add'>+     * checking the on disk xattr fails.</div><div class='add'>+     *</div><div class='add'>+     * Thus in such situations fall back to the soft resolution which</div><div class='add'>+     * mainly depends on the inode_path() function. And for using</div><div class='add'>+     * inode_path, @inode has to be linked i.e. a successful lookup should</div><div class='add'>+     * have happened on the gfid (or the path) to link the inode to the</div><div class='add'>+     * inode table. And if @inode is NULL, means, the inode has not been</div><div class='add'>+     * found in the inode table and better not to do inode_path() on the</div><div class='add'>+     * inode which has not been linked.</div><div class='add'>+     */</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; inode) {</div><div class='add'>+        ret = syncop_gfid_to_path_hard(parent-&gt;table, FIRST_CHILD(this), gfid,</div><div class='add'>+                                       inode, path, _gf_false);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_PATH_GET_FAILED,</div><div class='del'>-                        "failed to get the path xattr from disk for the "</div><div class='del'>-                        " gfid %s. Trying to get path from the memory",</div><div class='del'>-                        uuid_utoa_r (gfid, gfid_str));</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Try with soft resolution of path if hard resolve fails. Because</div><div class='del'>-         * checking the xattr on disk to get the path of a inode (or gfid)</div><div class='del'>-         * is dependent on whether that option is enabled in the posix</div><div class='del'>-         * xlator or not. If it is not enabled, then hard resolution by</div><div class='del'>-         * checking the on disk xattr fails.</div><div class='del'>-         *</div><div class='del'>-         * Thus in such situations fall back to the soft resolution which</div><div class='del'>-         * mainly depends on the inode_path() function. And for using</div><div class='del'>-         * inode_path, @inode has to be linked i.e. a successful lookup should</div><div class='del'>-         * have happened on the gfid (or the path) to link the inode to the</div><div class='del'>-         * inode table. And if @inode is NULL, means, the inode has not been</div><div class='del'>-         * found in the inode table and better not to do inode_path() on the</div><div class='del'>-         * inode which has not been linked.</div><div class='del'>-         */</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; inode) {</div><div class='del'>-                ret = syncop_gfid_to_path_hard (parent-&gt;table,</div><div class='del'>-                                                FIRST_CHILD (this), gfid, inode,</div><div class='del'>-                                                path, _gf_false);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                BRS_MSG_PATH_GET_FAILED,</div><div class='del'>-                                "failed to get the path from the memory for gfid %s",</div><div class='del'>-                                uuid_utoa_r (gfid, gfid_str));</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_PATH_GET_FAILED,</div><div class='add'>+                   "failed to get the path from the memory for gfid %s",</div><div class='add'>+                   uuid_utoa_r(gfid, gfid_str));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='del'>-* NOTE: If the file has multiple hardlinks (in gluster volume</div><div class='del'>-* namespace), the path would be one of the hardlinks. Its up to</div><div class='del'>-* the user to find the remaining hardlinks (using find -samefile)</div><div class='del'>-* and remove them.</div><div class='del'>-**/</div><div class='add'>+ * NOTE: If the file has multiple hardlinks (in gluster volume</div><div class='add'>+ * namespace), the path would be one of the hardlinks. Its up to</div><div class='add'>+ * the user to find the remaining hardlinks (using find -samefile)</div><div class='add'>+ * and remove them.</div><div class='add'>+ **/</div><div class='ctx'> void</div><div class='del'>-br_stub_entry_xattr_fill (xlator_t *this, char *hpath, gf_dirent_t *entry,</div><div class='del'>-                          dict_t *dict)</div><div class='add'>+br_stub_entry_xattr_fill(xlator_t *this, char *hpath, gf_dirent_t *entry,</div><div class='add'>+                         dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-                int32_t    ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, hpath, out);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Use the entry-&gt;d_name (which is nothing but the gfid of the</div><div class='del'>-         * corrupted object) as the key. And the value will be the actual</div><div class='del'>-         * path of that object (or file).</div><div class='del'>-         *</div><div class='del'>-         * ALso ignore the dict_set errors. scrubber will get the gfid of</div><div class='del'>-         * the corrupted object for sure. So, for now lets just log the</div><div class='del'>-         * dict_set_dynstr failure and move on.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        ret = dict_set_dynstr (dict, entry-&gt;d_name, hpath);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_DICT_SET_FAILED,</div><div class='del'>-                        "failed to set the actual path %s as the value in the "</div><div class='del'>-                        "dict for the corrupted object %s", hpath,</div><div class='del'>-                        entry-&gt;d_name);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, hpath, out);</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Use the entry-&gt;d_name (which is nothing but the gfid of the</div><div class='add'>+     * corrupted object) as the key. And the value will be the actual</div><div class='add'>+     * path of that object (or file).</div><div class='add'>+     *</div><div class='add'>+     * ALso ignore the dict_set errors. scrubber will get the gfid of</div><div class='add'>+     * the corrupted object for sure. So, for now lets just log the</div><div class='add'>+     * dict_set_dynstr failure and move on.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    ret = dict_set_dynstr(dict, entry-&gt;d_name, hpath);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_DICT_SET_FAILED,</div><div class='add'>+               "failed to set the actual path %s as the value in the "</div><div class='add'>+               "dict for the corrupted object %s",</div><div class='add'>+               hpath, entry-&gt;d_name);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c<br/>index f7fdd491809..2f5cc2b18dd 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/stub/bit-rot-stub.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/bit-rot/src/stub/bit-rot-stub.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/bit-rot/src/stub/bit-rot-stub.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/bit-rot/src/stub/bit-rot-stub.c</a></div><div class='hunk'>@@ -24,171 +24,170 @@</div><div class='ctx'> #include "bit-rot-stub-messages.h"</div><div class='ctx'> #include "bit-rot-common.h"</div><div class='ctx'> </div><div class='del'>-#define BR_STUB_REQUEST_COOKIE  0x1</div><div class='add'>+#define BR_STUB_REQUEST_COOKIE 0x1</div><div class='ctx'> </div><div class='del'>-void *br_stub_signth (void *);</div><div class='add'>+void *</div><div class='add'>+br_stub_signth(void *);</div><div class='ctx'> </div><div class='ctx'> struct br_stub_signentry {</div><div class='del'>-        unsigned long v;</div><div class='add'>+    unsigned long v;</div><div class='ctx'> </div><div class='del'>-        call_stub_t *stub;</div><div class='add'>+    call_stub_t *stub;</div><div class='ctx'> </div><div class='del'>-        struct list_head list;</div><div class='add'>+    struct list_head list;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_br_stub_mt_end + 1);</div><div class='del'>-</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_MEM_ACNT_FAILED,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_br_stub_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_MEM_ACNT_FAILED,</div><div class='add'>+               "Memory accounting init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_bad_object_container_init (xlator_t *this, br_stub_private_t *priv)</div><div class='del'>-{</div><div class='del'>-        pthread_attr_t  w_attr;</div><div class='del'>-        int         ret          = -1;</div><div class='del'>-</div><div class='del'>-        ret = pthread_cond_init(&amp;priv-&gt;container.bad_cond, NULL);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='del'>-                        "pthread_cond_init failed (%d)", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_init(&amp;priv-&gt;container.bad_lock, NULL);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='del'>-                        "pthread_mutex_init failed (%d)", ret);</div><div class='del'>-                goto cleanup_cond;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pthread_attr_init (&amp;w_attr);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='del'>-                        "pthread_attr_init failed (%d)", ret);</div><div class='del'>-                goto cleanup_lock;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pthread_attr_setstacksize (&amp;w_attr, BAD_OBJECT_THREAD_STACK_SIZE);</div><div class='del'>-        if (ret == EINVAL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='del'>-                        "Using default thread stack size");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;container.bad_queue);</div><div class='del'>-        ret = br_stub_dir_create (this, priv);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto cleanup_lock;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;container.thread, &amp;w_attr,</div><div class='del'>-                                br_stub_worker, this, "brswrker");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_attr;</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+br_stub_bad_object_container_init(xlator_t *this, br_stub_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    pthread_attr_t w_attr;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = pthread_cond_init(&amp;priv-&gt;container.bad_cond, NULL);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='add'>+               "pthread_cond_init failed (%d)", ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_init(&amp;priv-&gt;container.bad_lock, NULL);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='add'>+               "pthread_mutex_init failed (%d)", ret);</div><div class='add'>+        goto cleanup_cond;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_attr_init(&amp;w_attr);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='add'>+               "pthread_attr_init failed (%d)", ret);</div><div class='add'>+        goto cleanup_lock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_attr_setstacksize(&amp;w_attr, BAD_OBJECT_THREAD_STACK_SIZE);</div><div class='add'>+    if (ret == EINVAL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_BAD_OBJ_THREAD_FAIL,</div><div class='add'>+               "Using default thread stack size");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;container.bad_queue);</div><div class='add'>+    ret = br_stub_dir_create(this, priv);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto cleanup_lock;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;container.thread, &amp;w_attr, br_stub_worker,</div><div class='add'>+                           this, "brswrker");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_attr;</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> cleanup_attr:</div><div class='del'>-        pthread_attr_destroy (&amp;w_attr);</div><div class='add'>+    pthread_attr_destroy(&amp;w_attr);</div><div class='ctx'> cleanup_lock:</div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;container.bad_lock);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;container.bad_lock);</div><div class='ctx'> cleanup_cond:</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;container.bad_cond);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;container.bad_cond);</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char *tmp = NULL;</div><div class='del'>-        struct timeval tv = {0,};</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_CHILD,</div><div class='del'>-                        "FATAL: no children");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_CHILD,</div><div class='add'>+               "FATAL: no children");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_br_stub_mt_private_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto error_return;</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_br_stub_mt_private_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;local_pool = mem_pool_new (br_stub_local_t, 512);</div><div class='del'>-        if (!priv-&gt;local_pool)</div><div class='del'>-                goto free_priv;</div><div class='add'>+    priv-&gt;local_pool = mem_pool_new(br_stub_local_t, 512);</div><div class='add'>+    if (!priv-&gt;local_pool)</div><div class='add'>+        goto free_priv;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("bitrot", priv-&gt;do_versioning, bool, free_mempool);</div><div class='add'>+    GF_OPTION_INIT("bitrot", priv-&gt;do_versioning, bool, free_mempool);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("export", tmp, str, free_mempool);</div><div class='add'>+    GF_OPTION_INIT("export", tmp, str, free_mempool);</div><div class='ctx'> </div><div class='del'>-        if (snprintf (priv-&gt;export, PATH_MAX, "%s", tmp) &gt;= PATH_MAX)</div><div class='del'>-                goto free_mempool;</div><div class='add'>+    if (snprintf(priv-&gt;export, PATH_MAX, "%s", tmp) &gt;= PATH_MAX)</div><div class='add'>+        goto free_mempool;</div><div class='ctx'> </div><div class='del'>-        if (snprintf (priv-&gt;stub_basepath, sizeof (priv-&gt;stub_basepath),</div><div class='del'>-                     "%s/%s", priv-&gt;export, BR_STUB_QUARANTINE_DIR) &gt;=</div><div class='del'>-            sizeof (priv-&gt;stub_basepath))</div><div class='del'>-                goto free_mempool;</div><div class='add'>+    if (snprintf(priv-&gt;stub_basepath, sizeof(priv-&gt;stub_basepath), "%s/%s",</div><div class='add'>+                 priv-&gt;export,</div><div class='add'>+                 BR_STUB_QUARANTINE_DIR) &gt;= sizeof(priv-&gt;stub_basepath))</div><div class='add'>+        goto free_mempool;</div><div class='ctx'> </div><div class='del'>-        (void) gettimeofday (&amp;tv, NULL);</div><div class='add'>+    (void)gettimeofday(&amp;tv, NULL);</div><div class='ctx'> </div><div class='del'>-        /* boot time is in network endian format */</div><div class='del'>-        priv-&gt;boot[0] = htonl (tv.tv_sec);</div><div class='del'>-        priv-&gt;boot[1] = htonl (tv.tv_usec);</div><div class='add'>+    /* boot time is in network endian format */</div><div class='add'>+    priv-&gt;boot[0] = htonl(tv.tv_sec);</div><div class='add'>+    priv-&gt;boot[1] = htonl(tv.tv_usec);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;lock, NULL);</div><div class='del'>-        pthread_cond_init (&amp;priv-&gt;cond, NULL);</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;squeue);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;lock, NULL);</div><div class='add'>+    pthread_cond_init(&amp;priv-&gt;cond, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;squeue);</div><div class='ctx'> </div><div class='del'>-        /* Thread creations need 'this' to be passed so that THIS can be</div><div class='del'>-         * assigned inside the thread. So setting this-&gt;private here.</div><div class='del'>-         */</div><div class='del'>-        this-&gt;private = priv;</div><div class='add'>+    /* Thread creations need 'this' to be passed so that THIS can be</div><div class='add'>+     * assigned inside the thread. So setting this-&gt;private here.</div><div class='add'>+     */</div><div class='add'>+    this-&gt;private = priv;</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;signth, NULL, br_stub_signth, this,</div><div class='del'>-                                "brssign");</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_lock;</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;signth, NULL, br_stub_signth, this,</div><div class='add'>+                           "brssign");</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_lock;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_bad_object_container_init (this, priv);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_CONTAINER_FAIL,</div><div class='del'>-                        "failed to launch the thread for storing bad gfids");</div><div class='del'>-                goto cleanup_lock;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_bad_object_container_init(this, priv);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_CONTAINER_FAIL,</div><div class='add'>+               "failed to launch the thread for storing bad gfids");</div><div class='add'>+        goto cleanup_lock;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "bit-rot stub loaded");</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "bit-rot stub loaded");</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- cleanup_lock:</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;cond);</div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;lock);</div><div class='del'>- free_mempool:</div><div class='del'>-        mem_pool_destroy (priv-&gt;local_pool);</div><div class='del'>- free_priv:</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+cleanup_lock:</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;lock);</div><div class='add'>+free_mempool:</div><div class='add'>+    mem_pool_destroy(priv-&gt;local_pool);</div><div class='add'>+free_priv:</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO:</div><div class='hunk'>@@ -205,178 +204,173 @@ init (xlator_t *this)</div><div class='ctx'>  * Ex: ICAP.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret  = -1;</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("bitrot", priv-&gt;do_versioning, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("bitrot", priv-&gt;do_versioning, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!this)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        default_notify (this, event, data);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    default_notify(this, event, data);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-	br_stub_private_t *priv = this-&gt;private;</div><div class='del'>-        struct br_stub_signentry *sigstub = NULL;</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_stub_private_t *priv = this-&gt;private;</div><div class='add'>+    struct br_stub_signentry *sigstub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!priv)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_cleanup_xint (priv-&gt;signth);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_CANCEL_SIGN_THREAD_FAILED,</div><div class='del'>-                        "Could not cancel sign serializer thread");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;signth = 0;</div><div class='add'>+    ret = gf_thread_cleanup_xint(priv-&gt;signth);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_CANCEL_SIGN_THREAD_FAILED,</div><div class='add'>+               "Could not cancel sign serializer thread");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;signth = 0;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;priv-&gt;squeue)) {</div><div class='del'>-                sigstub = list_first_entry (&amp;priv-&gt;squeue,</div><div class='del'>-                                            struct br_stub_signentry, list);</div><div class='del'>-                list_del_init (&amp;sigstub-&gt;list);</div><div class='add'>+    while (!list_empty(&amp;priv-&gt;squeue)) {</div><div class='add'>+        sigstub = list_first_entry(&amp;priv-&gt;squeue, struct br_stub_signentry,</div><div class='add'>+                                   list);</div><div class='add'>+        list_del_init(&amp;sigstub-&gt;list);</div><div class='ctx'> </div><div class='del'>-                call_stub_destroy (sigstub-&gt;stub);</div><div class='del'>-                GF_FREE (sigstub);</div><div class='del'>-        }</div><div class='add'>+        call_stub_destroy(sigstub-&gt;stub);</div><div class='add'>+        GF_FREE(sigstub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;lock);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;lock);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;cond);</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_cleanup_xint (priv-&gt;container.thread);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_CANCEL_SIGN_THREAD_FAILED,</div><div class='del'>-                        "Could not cancel sign serializer thread");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_thread_cleanup_xint(priv-&gt;container.thread);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_CANCEL_SIGN_THREAD_FAILED,</div><div class='add'>+               "Could not cancel sign serializer thread");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;container.thread = 0;</div><div class='add'>+    priv-&gt;container.thread = 0;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty (&amp;priv-&gt;container.bad_queue)) {</div><div class='del'>-                stub = list_first_entry (&amp;priv-&gt;container.bad_queue, call_stub_t,</div><div class='del'>-                                         list);</div><div class='del'>-                list_del_init (&amp;stub-&gt;list);</div><div class='del'>-                call_stub_destroy (stub);</div><div class='del'>-        }</div><div class='add'>+    while (!list_empty(&amp;priv-&gt;container.bad_queue)) {</div><div class='add'>+        stub = list_first_entry(&amp;priv-&gt;container.bad_queue, call_stub_t, list);</div><div class='add'>+        list_del_init(&amp;stub-&gt;list);</div><div class='add'>+        call_stub_destroy(stub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;local_pool) {</div><div class='del'>-                mem_pool_destroy (priv-&gt;local_pool);</div><div class='del'>-                priv-&gt;local_pool = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;local_pool) {</div><div class='add'>+        mem_pool_destroy(priv-&gt;local_pool);</div><div class='add'>+        priv-&gt;local_pool = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;container.bad_lock);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;container.bad_cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;container.bad_lock);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;container.bad_cond);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-	GF_FREE (priv);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-	return;</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_alloc_versions (br_version_t **obuf,</div><div class='del'>-                        br_signature_t **sbuf, size_t signaturelen)</div><div class='add'>+br_stub_alloc_versions(br_version_t **obuf, br_signature_t **sbuf,</div><div class='add'>+                       size_t signaturelen)</div><div class='ctx'> {</div><div class='del'>-        void *mem = NULL;</div><div class='del'>-        size_t size = 0;</div><div class='add'>+    void *mem = NULL;</div><div class='add'>+    size_t size = 0;</div><div class='ctx'> </div><div class='del'>-        if (obuf)</div><div class='del'>-                size += sizeof (br_version_t);</div><div class='del'>-        if (sbuf)</div><div class='del'>-                size += sizeof (br_signature_t) + signaturelen;</div><div class='add'>+    if (obuf)</div><div class='add'>+        size += sizeof(br_version_t);</div><div class='add'>+    if (sbuf)</div><div class='add'>+        size += sizeof(br_signature_t) + signaturelen;</div><div class='ctx'> </div><div class='del'>-        mem = GF_CALLOC (1, size, gf_br_stub_mt_version_t);</div><div class='del'>-        if (!mem)</div><div class='del'>-                goto error_return;</div><div class='add'>+    mem = GF_CALLOC(1, size, gf_br_stub_mt_version_t);</div><div class='add'>+    if (!mem)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        if (obuf) {</div><div class='del'>-                *obuf = (br_version_t *)mem;</div><div class='del'>-                mem = ((char *)mem + sizeof (br_version_t));</div><div class='del'>-        }</div><div class='del'>-        if (sbuf) {</div><div class='del'>-                *sbuf = (br_signature_t *)mem;</div><div class='del'>-        }</div><div class='add'>+    if (obuf) {</div><div class='add'>+        *obuf = (br_version_t *)mem;</div><div class='add'>+        mem = ((char *)mem + sizeof(br_version_t));</div><div class='add'>+    }</div><div class='add'>+    if (sbuf) {</div><div class='add'>+        *sbuf = (br_signature_t *)mem;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_dealloc_versions (void *mem)</div><div class='add'>+br_stub_dealloc_versions(void *mem)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (mem);</div><div class='add'>+    GF_FREE(mem);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static br_stub_local_t *</div><div class='del'>-br_stub_alloc_local (xlator_t *this)</div><div class='add'>+br_stub_alloc_local(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        br_stub_private_t *priv = this-&gt;private;</div><div class='add'>+    br_stub_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        return mem_get0 (priv-&gt;local_pool);</div><div class='add'>+    return mem_get0(priv-&gt;local_pool);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_dealloc_local (br_stub_local_t *ptr)</div><div class='add'>+br_stub_dealloc_local(br_stub_local_t *ptr)</div><div class='ctx'> {</div><div class='del'>-        if (!ptr)</div><div class='del'>-                return;</div><div class='add'>+    if (!ptr)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        mem_put (ptr);</div><div class='add'>+    mem_put(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_prepare_version_request (xlator_t *this, dict_t *dict,</div><div class='add'>+br_stub_prepare_version_request(xlator_t *this, dict_t *dict,</div><div class='ctx'>                                 br_version_t *obuf, unsigned long oversion)</div><div class='ctx'> {</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        br_set_ongoingversion (obuf, oversion, priv-&gt;boot);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    br_set_ongoingversion(obuf, oversion, priv-&gt;boot);</div><div class='ctx'> </div><div class='del'>-        return dict_set_static_bin (dict, BITROT_CURRENT_VERSION_KEY,</div><div class='del'>-                                    (void *)obuf, sizeof (br_version_t));</div><div class='add'>+    return dict_set_static_bin(dict, BITROT_CURRENT_VERSION_KEY, (void *)obuf,</div><div class='add'>+                               sizeof(br_version_t));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_prepare_signing_request (dict_t *dict,</div><div class='del'>-                                 br_signature_t *sbuf,</div><div class='del'>-                                 br_isignature_t *sign, size_t signaturelen)</div><div class='add'>+br_stub_prepare_signing_request(dict_t *dict, br_signature_t *sbuf,</div><div class='add'>+                                br_isignature_t *sign, size_t signaturelen)</div><div class='ctx'> {</div><div class='del'>-        size_t size = 0;</div><div class='add'>+    size_t size = 0;</div><div class='ctx'> </div><div class='del'>-        br_set_signature (sbuf, sign, signaturelen, &amp;size);</div><div class='add'>+    br_set_signature(sbuf, sign, signaturelen, &amp;size);</div><div class='ctx'> </div><div class='del'>-        return dict_set_static_bin (dict, BITROT_SIGNING_VERSION_KEY,</div><div class='del'>-                                    (void *)sbuf, size);</div><div class='add'>+    return dict_set_static_bin(dict, BITROT_SIGNING_VERSION_KEY, (void *)sbuf,</div><div class='add'>+                               size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -386,253 +380,250 @@ br_stub_prepare_signing_request (dict_t *dict,</div><div class='ctx'>  * initializes the transient inode version.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-br_stub_init_inode_versions (xlator_t *this, fd_t *fd, inode_t *inode,</div><div class='del'>-                             unsigned long version, gf_boolean_t markdirty,</div><div class='del'>-                             gf_boolean_t bad_object, uint64_t *ctx_addr)</div><div class='del'>-{</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx = NULL;</div><div class='del'>-</div><div class='del'>-        ctx = GF_CALLOC (1, sizeof (br_stub_inode_ctx_t),</div><div class='del'>-                         gf_br_stub_mt_inode_ctx_t);</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;fd_list);</div><div class='del'>-        (markdirty) ? __br_stub_mark_inode_dirty (ctx)</div><div class='del'>-                : __br_stub_mark_inode_synced (ctx);</div><div class='del'>-        __br_stub_set_ongoing_version (ctx, version);</div><div class='del'>-</div><div class='del'>-        if (bad_object)</div><div class='del'>-                __br_stub_mark_object_bad (ctx);</div><div class='del'>-</div><div class='del'>-        if (fd) {</div><div class='del'>-                ret = br_stub_add_fd_to_inode (this, fd, ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto free_ctx;</div><div class='del'>-        }</div><div class='add'>+br_stub_init_inode_versions(xlator_t *this, fd_t *fd, inode_t *inode,</div><div class='add'>+                            unsigned long version, gf_boolean_t markdirty,</div><div class='add'>+                            gf_boolean_t bad_object, uint64_t *ctx_addr)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    ctx = GF_CALLOC(1, sizeof(br_stub_inode_ctx_t), gf_br_stub_mt_inode_ctx_t);</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;fd_list);</div><div class='add'>+    (markdirty) ? __br_stub_mark_inode_dirty(ctx)</div><div class='add'>+                : __br_stub_mark_inode_synced(ctx);</div><div class='add'>+    __br_stub_set_ongoing_version(ctx, version);</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_set_inode_ctx (this, inode, ctx);</div><div class='add'>+    if (bad_object)</div><div class='add'>+        __br_stub_mark_object_bad(ctx);</div><div class='add'>+</div><div class='add'>+    if (fd) {</div><div class='add'>+        ret = br_stub_add_fd_to_inode(this, fd, ctx);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto free_ctx;</div><div class='add'>+            goto free_ctx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (ctx_addr)</div><div class='del'>-                *ctx_addr = (uint64_t) ctx;</div><div class='del'>-        return 0;</div><div class='add'>+    ret = br_stub_set_inode_ctx(this, inode, ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto free_ctx;</div><div class='add'>+</div><div class='add'>+    if (ctx_addr)</div><div class='add'>+        *ctx_addr = (uint64_t)ctx;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> free_ctx:</div><div class='del'>-        GF_FREE (ctx);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    GF_FREE(ctx);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * modify the ongoing version of an inode.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-br_stub_mod_inode_versions (xlator_t *this,</div><div class='del'>-                            fd_t *fd, inode_t *inode, unsigned long version)</div><div class='add'>+br_stub_mod_inode_versions(xlator_t *this, fd_t *fd, inode_t *inode,</div><div class='add'>+                           unsigned long version)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        br_stub_inode_ctx_t *ctx = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx = __br_stub_get_ongoing_version_ctx (this, inode, NULL);</div><div class='del'>-                if (ctx == NULL)</div><div class='del'>-                        goto unblock;</div><div class='del'>-                if (__br_stub_is_inode_dirty (ctx)) {</div><div class='del'>-                        __br_stub_set_ongoing_version (ctx, version);</div><div class='del'>-                        __br_stub_mark_inode_synced (ctx);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = 0;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx = __br_stub_get_ongoing_version_ctx(this, inode, NULL);</div><div class='add'>+        if (ctx == NULL)</div><div class='add'>+            goto unblock;</div><div class='add'>+        if (__br_stub_is_inode_dirty(ctx)) {</div><div class='add'>+            __br_stub_set_ongoing_version(ctx, version);</div><div class='add'>+            __br_stub_mark_inode_synced(ctx);</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unblock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_fill_local (br_stub_local_t *local,</div><div class='del'>-                    call_stub_t *stub, fd_t *fd, inode_t *inode, uuid_t gfid,</div><div class='del'>-                    int versioningtype, unsigned long memversion)</div><div class='add'>+br_stub_fill_local(br_stub_local_t *local, call_stub_t *stub, fd_t *fd,</div><div class='add'>+                   inode_t *inode, uuid_t gfid, int versioningtype,</div><div class='add'>+                   unsigned long memversion)</div><div class='ctx'> {</div><div class='del'>-        local-&gt;fopstub = stub;</div><div class='del'>-        local-&gt;versioningtype = versioningtype;</div><div class='del'>-        local-&gt;u.context.version = memversion;</div><div class='del'>-        if (fd)</div><div class='del'>-                local-&gt;u.context.fd = fd_ref (fd);</div><div class='del'>-        if (inode)</div><div class='del'>-                local-&gt;u.context.inode = inode_ref (inode);</div><div class='del'>-        gf_uuid_copy (local-&gt;u.context.gfid, gfid);</div><div class='add'>+    local-&gt;fopstub = stub;</div><div class='add'>+    local-&gt;versioningtype = versioningtype;</div><div class='add'>+    local-&gt;u.context.version = memversion;</div><div class='add'>+    if (fd)</div><div class='add'>+        local-&gt;u.context.fd = fd_ref(fd);</div><div class='add'>+    if (inode)</div><div class='add'>+        local-&gt;u.context.inode = inode_ref(inode);</div><div class='add'>+    gf_uuid_copy(local-&gt;u.context.gfid, gfid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_cleanup_local (br_stub_local_t *local)</div><div class='add'>+br_stub_cleanup_local(br_stub_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (!local)</div><div class='del'>-                return;</div><div class='add'>+    if (!local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        local-&gt;fopstub = NULL;</div><div class='del'>-        local-&gt;versioningtype = 0;</div><div class='del'>-        local-&gt;u.context.version = 0;</div><div class='del'>-        if (local-&gt;u.context.fd) {</div><div class='del'>-                fd_unref (local-&gt;u.context.fd);</div><div class='del'>-                local-&gt;u.context.fd = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (local-&gt;u.context.inode) {</div><div class='del'>-                inode_unref (local-&gt;u.context.inode);</div><div class='del'>-                local-&gt;u.context.inode = NULL;</div><div class='del'>-        }</div><div class='del'>-        memset (local-&gt;u.context.gfid, '\0', sizeof (uuid_t));</div><div class='add'>+    local-&gt;fopstub = NULL;</div><div class='add'>+    local-&gt;versioningtype = 0;</div><div class='add'>+    local-&gt;u.context.version = 0;</div><div class='add'>+    if (local-&gt;u.context.fd) {</div><div class='add'>+        fd_unref(local-&gt;u.context.fd);</div><div class='add'>+        local-&gt;u.context.fd = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (local-&gt;u.context.inode) {</div><div class='add'>+        inode_unref(local-&gt;u.context.inode);</div><div class='add'>+        local-&gt;u.context.inode = NULL;</div><div class='add'>+    }</div><div class='add'>+    memset(local-&gt;u.context.gfid, '\0', sizeof(uuid_t));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_need_versioning (xlator_t *this,</div><div class='del'>-                         fd_t *fd, gf_boolean_t *versioning,</div><div class='del'>-                         gf_boolean_t *modified, br_stub_inode_ctx_t **ctx)</div><div class='del'>-{</div><div class='del'>-        int32_t ret      = -1;</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *c = NULL;</div><div class='del'>-        unsigned long        version  = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-</div><div class='del'>-        *versioning = _gf_false;</div><div class='del'>-        *modified = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* Bitrot stub inode context was initialized only in lookup, create</div><div class='del'>-         * and mknod cbk path. Object versioning was enabled by default</div><div class='del'>-         * irrespective of bitrot enabled or not. But it's made optional now.</div><div class='del'>-         * As a consequence there could be cases where getting inode ctx would</div><div class='del'>-         * fail because it's not set yet.</div><div class='del'>-         * e.g., If versioning (with bitrot enable) is enabled while I/O is</div><div class='del'>-         * happening, it could directly get other fops like writev without</div><div class='del'>-         * lookup, where getting inode ctx would fail. Hence initialize the</div><div class='del'>-         * inode ctx on failure to get ctx. This is done in all places where</div><div class='del'>-         * applicable.</div><div class='del'>-         */</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, fd-&gt;inode, &amp;ctx_addr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = br_stub_init_inode_versions (this, fd, fd-&gt;inode, version,</div><div class='del'>-                                                   _gf_true, _gf_false,</div><div class='del'>-                                                   &amp;ctx_addr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_GET_INODE_CONTEXT_FAILED, "failed to "</div><div class='del'>-                                " init the inode context for the inode %s",</div><div class='del'>-                                uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                        goto error_return;</div><div class='del'>-                }</div><div class='add'>+br_stub_need_versioning(xlator_t *this, fd_t *fd, gf_boolean_t *versioning,</div><div class='add'>+                        gf_boolean_t *modified, br_stub_inode_ctx_t **ctx)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *c = NULL;</div><div class='add'>+    unsigned long version = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='add'>+</div><div class='add'>+    *versioning = _gf_false;</div><div class='add'>+    *modified = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* Bitrot stub inode context was initialized only in lookup, create</div><div class='add'>+     * and mknod cbk path. Object versioning was enabled by default</div><div class='add'>+     * irrespective of bitrot enabled or not. But it's made optional now.</div><div class='add'>+     * As a consequence there could be cases where getting inode ctx would</div><div class='add'>+     * fail because it's not set yet.</div><div class='add'>+     * e.g., If versioning (with bitrot enable) is enabled while I/O is</div><div class='add'>+     * happening, it could directly get other fops like writev without</div><div class='add'>+     * lookup, where getting inode ctx would fail. Hence initialize the</div><div class='add'>+     * inode ctx on failure to get ctx. This is done in all places where</div><div class='add'>+     * applicable.</div><div class='add'>+     */</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, fd-&gt;inode, &amp;ctx_addr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = br_stub_init_inode_versions(this, fd, fd-&gt;inode, version,</div><div class='add'>+                                          _gf_true, _gf_false, &amp;ctx_addr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='add'>+                   "failed to "</div><div class='add'>+                   " init the inode context for the inode %s",</div><div class='add'>+                   uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+            goto error_return;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        c = (br_stub_inode_ctx_t *) (long) ctx_addr;</div><div class='add'>+    c = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (__br_stub_is_inode_dirty (c))</div><div class='del'>-                        *versioning = _gf_true;</div><div class='del'>-                if (__br_stub_is_inode_modified (c))</div><div class='del'>-                        *modified = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (__br_stub_is_inode_dirty(c))</div><div class='add'>+            *versioning = _gf_true;</div><div class='add'>+        if (__br_stub_is_inode_modified(c))</div><div class='add'>+            *modified = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (ctx)</div><div class='del'>-                *ctx = c;</div><div class='del'>-        return 0;</div><div class='add'>+    if (ctx)</div><div class='add'>+        *ctx = c;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_stub_anon_fd_ctx (xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx)</div><div class='del'>-{</div><div class='del'>-        int32_t  ret = -1;</div><div class='del'>-        br_stub_fd_t *br_stub_fd = NULL;</div><div class='del'>-</div><div class='del'>-        br_stub_fd = br_stub_fd_ctx_get (this, fd);</div><div class='del'>-        if (!br_stub_fd) {</div><div class='del'>-                ret = br_stub_add_fd_to_inode (this, fd, ctx);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_ADD_FD_TO_INODE, "failed to add fd to "</div><div class='del'>-                                "the inode (gfid: %s)",</div><div class='del'>-                                uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+br_stub_anon_fd_ctx(xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='add'>+</div><div class='add'>+    br_stub_fd = br_stub_fd_ctx_get(this, fd);</div><div class='add'>+    if (!br_stub_fd) {</div><div class='add'>+        ret = br_stub_add_fd_to_inode(this, fd, ctx);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_ADD_FD_TO_INODE,</div><div class='add'>+                   "failed to add fd to "</div><div class='add'>+                   "the inode (gfid: %s)",</div><div class='add'>+                   uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_versioning_prep (call_frame_t *frame,</div><div class='del'>-                         xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx)</div><div class='del'>-{</div><div class='del'>-        int32_t          ret = -1;</div><div class='del'>-        br_stub_local_t *local   = NULL;</div><div class='del'>-</div><div class='del'>-        local = br_stub_alloc_local (this);</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, BRS_MSG_NO_MEMORY,</div><div class='del'>-                        "local allocation failed (gfid: %s)",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (fd_is_anonymous (fd)) {</div><div class='del'>-                ret = br_stub_anon_fd_ctx (this, fd, ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto free_local;</div><div class='del'>-        }</div><div class='add'>+br_stub_versioning_prep(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                        br_stub_inode_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    local = br_stub_alloc_local(this);</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRS_MSG_NO_MEMORY,</div><div class='add'>+               "local allocation failed (gfid: %s)",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd_is_anonymous(fd)) {</div><div class='add'>+        ret = br_stub_anon_fd_ctx(this, fd, ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto free_local;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- free_local:</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+free_local:</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_mark_inode_modified (xlator_t *this, br_stub_local_t *local)</div><div class='del'>-{</div><div class='del'>-        fd_t                *fd       = NULL;</div><div class='del'>-        int32_t              ret      = 0;</div><div class='del'>-        uint64_t             ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        unsigned long        version  = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-</div><div class='del'>-        fd = local-&gt;u.context.fd;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, fd-&gt;inode, &amp;ctx_addr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = br_stub_init_inode_versions (this, fd, fd-&gt;inode, version,</div><div class='del'>-                                                   _gf_true, _gf_false,</div><div class='del'>-                                                   &amp;ctx_addr);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto error_return;</div><div class='del'>-        }</div><div class='add'>+br_stub_mark_inode_modified(xlator_t *this, br_stub_local_t *local)</div><div class='add'>+{</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    unsigned long version = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='ctx'> </div><div class='del'>-        ctx = (br_stub_inode_ctx_t *) (long) ctx_addr;</div><div class='add'>+    fd = local-&gt;u.context.fd;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __br_stub_set_inode_modified (ctx);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, fd-&gt;inode, &amp;ctx_addr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = br_stub_init_inode_versions(this, fd, fd-&gt;inode, version,</div><div class='add'>+                                          _gf_true, _gf_false, &amp;ctx_addr);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto error_return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __br_stub_set_inode_modified(ctx);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -644,71 +635,68 @@ br_stub_mark_inode_modified (xlator_t *this, br_stub_local_t *local)</div><div class='ctx'>  * and error is returned upwards.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-br_stub_check_bad_object (xlator_t *this, inode_t *inode, int32_t *op_ret,</div><div class='del'>-                           int32_t *op_errno)</div><div class='del'>-{</div><div class='del'>-        int ret = -1;</div><div class='del'>-        unsigned long        version  = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_is_bad_object (this, inode);</div><div class='del'>-        if (ret == -2) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJECT_ACCESS,</div><div class='del'>-                        "%s is a bad object. Returning",</div><div class='del'>-                        uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                *op_ret = -1;</div><div class='del'>-                *op_errno = EIO;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                ret = br_stub_init_inode_versions (this, NULL, inode, version,</div><div class='del'>-                                                   _gf_true, _gf_false, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='del'>-                                "failed to init inode context for %s",</div><div class='del'>-                                uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        *op_ret = -1;</div><div class='del'>-                        *op_errno = EINVAL;</div><div class='del'>-                }</div><div class='add'>+br_stub_check_bad_object(xlator_t *this, inode_t *inode, int32_t *op_ret,</div><div class='add'>+                         int32_t *op_errno)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    unsigned long version = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_is_bad_object(this, inode);</div><div class='add'>+    if (ret == -2) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJECT_ACCESS,</div><div class='add'>+               "%s is a bad object. Returning", uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        *op_ret = -1;</div><div class='add'>+        *op_errno = EIO;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        ret = br_stub_init_inode_versions(this, NULL, inode, version, _gf_true,</div><div class='add'>+                                          _gf_false, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(</div><div class='add'>+                this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='add'>+                "failed to init inode context for %s", uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            *op_ret = -1;</div><div class='add'>+            *op_errno = EINVAL;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * callback for inode/fd versioning</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-br_stub_fd_incversioning_cbk (call_frame_t *frame,</div><div class='del'>-                              void *cookie, xlator_t *this,</div><div class='del'>-                              int op_ret, int op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        fd_t            *fd      = NULL;</div><div class='del'>-        inode_t         *inode   = NULL;</div><div class='del'>-        unsigned long    version = 0;</div><div class='del'>-        br_stub_local_t *local   = NULL;</div><div class='del'>-</div><div class='del'>-        local = (br_stub_local_t *)frame-&gt;local;</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='del'>-        fd      = local-&gt;u.context.fd;</div><div class='del'>-        inode   = local-&gt;u.context.inode;</div><div class='del'>-        version = local-&gt;u.context.version;</div><div class='del'>-</div><div class='del'>-        op_ret = br_stub_mod_inode_versions (this, fd, inode, version);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>- done:</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                call_unwind_error (local-&gt;fopstub, -1, op_errno);</div><div class='del'>-                br_stub_cleanup_local (local);</div><div class='del'>-                br_stub_dealloc_local (local);</div><div class='del'>-        } else {</div><div class='del'>-                call_resume (local-&gt;fopstub);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+br_stub_fd_incversioning_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int op_ret, int op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    unsigned long version = 0;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    local = (br_stub_local_t *)frame-&gt;local;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='add'>+    fd = local-&gt;u.context.fd;</div><div class='add'>+    inode = local-&gt;u.context.inode;</div><div class='add'>+    version = local-&gt;u.context.version;</div><div class='add'>+</div><div class='add'>+    op_ret = br_stub_mod_inode_versions(this, fd, inode, version);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+done:</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        call_unwind_error(local-&gt;fopstub, -1, op_errno);</div><div class='add'>+        br_stub_cleanup_local(local);</div><div class='add'>+        br_stub_dealloc_local(local);</div><div class='add'>+    } else {</div><div class='add'>+        call_resume(local-&gt;fopstub);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -745,98 +733,93 @@ br_stub_fd_incversioning_cbk (call_frame_t *frame,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_fd_versioning (xlator_t *this, call_frame_t *frame,</div><div class='del'>-                       call_stub_t *stub, dict_t *dict, fd_t *fd,</div><div class='del'>-                       br_stub_version_cbk *callback, unsigned long memversion,</div><div class='del'>-                       int versioningtype, int durable)</div><div class='add'>+br_stub_fd_versioning(xlator_t *this, call_frame_t *frame, call_stub_t *stub,</div><div class='add'>+                      dict_t *dict, fd_t *fd, br_stub_version_cbk *callback,</div><div class='add'>+                      unsigned long memversion, int versioningtype, int durable)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = -1;</div><div class='del'>-        int              flags = 0;</div><div class='del'>-        dict_t          *xdata = NULL;</div><div class='del'>-        br_stub_local_t *local = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto done;</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int32(xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_xdata;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, GLUSTERFS_INTERNAL_FOP_KEY, 1);</div><div class='add'>+    if (durable) {</div><div class='add'>+        ret = dict_set_int32(xdata, GLUSTERFS_DURABLE_OP, 0);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto dealloc_xdata;</div><div class='add'>+            goto dealloc_xdata;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (durable) {</div><div class='del'>-                ret = dict_set_int32 (xdata, GLUSTERFS_DURABLE_OP, 0);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto dealloc_xdata;</div><div class='del'>-        }</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    br_stub_fill_local(local, stub, fd, fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='add'>+                       versioningtype, memversion);</div><div class='ctx'> </div><div class='del'>-        br_stub_fill_local (local, stub, fd,</div><div class='del'>-                            fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='del'>-                            versioningtype, memversion);</div><div class='add'>+    STACK_WIND(frame, callback, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, callback,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- dealloc_xdata:</div><div class='del'>-        dict_unref (xdata);</div><div class='del'>- done:</div><div class='del'>-        return ret;</div><div class='add'>+dealloc_xdata:</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+done:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_perform_incversioning (xlator_t *this,</div><div class='del'>-                               call_frame_t *frame, call_stub_t *stub,</div><div class='del'>-                               fd_t *fd, br_stub_inode_ctx_t *ctx)</div><div class='del'>-{</div><div class='del'>-        int32_t          ret               = -1;</div><div class='del'>-        dict_t          *dict              = NULL;</div><div class='del'>-        br_version_t    *obuf              = NULL;</div><div class='del'>-        unsigned long    writeback_version = 0;</div><div class='del'>-        int              op_errno          = 0;</div><div class='del'>-        br_stub_local_t *local             = NULL;</div><div class='del'>-</div><div class='del'>-        op_errno = EINVAL;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        writeback_version = __br_stub_writeback_version (ctx);</div><div class='del'>-</div><div class='del'>-        op_errno = ENOMEM;</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto done;</div><div class='del'>-        ret = br_stub_alloc_versions (&amp;obuf, NULL, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-        ret = br_stub_prepare_version_request (this, dict,</div><div class='del'>-                                               obuf, writeback_version);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_versions;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_fd_versioning</div><div class='del'>-                (this, frame, stub, dict,</div><div class='del'>-                 fd, br_stub_fd_incversioning_cbk, writeback_version,</div><div class='del'>-                 BR_STUB_INCREMENTAL_VERSIONING, !WRITEBACK_DURABLE);</div><div class='del'>-</div><div class='del'>- dealloc_versions:</div><div class='del'>-        br_stub_dealloc_versions (obuf);</div><div class='del'>- dealloc_dict:</div><div class='del'>-        dict_unref (dict);</div><div class='del'>- done:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (local)</div><div class='del'>-                        frame-&gt;local = NULL;</div><div class='del'>-                call_unwind_error (stub, -1, op_errno);</div><div class='del'>-                if (local) {</div><div class='del'>-                        br_stub_cleanup_local (local);</div><div class='del'>-                        br_stub_dealloc_local (local);</div><div class='del'>-                }</div><div class='add'>+br_stub_perform_incversioning(xlator_t *this, call_frame_t *frame,</div><div class='add'>+                              call_stub_t *stub, fd_t *fd,</div><div class='add'>+                              br_stub_inode_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    br_version_t *obuf = NULL;</div><div class='add'>+    unsigned long writeback_version = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    op_errno = EINVAL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    writeback_version = __br_stub_writeback_version(ctx);</div><div class='add'>+</div><div class='add'>+    op_errno = ENOMEM;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto done;</div><div class='add'>+    ret = br_stub_alloc_versions(&amp;obuf, NULL, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+    ret = br_stub_prepare_version_request(this, dict, obuf, writeback_version);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_versions;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_fd_versioning(</div><div class='add'>+        this, frame, stub, dict, fd, br_stub_fd_incversioning_cbk,</div><div class='add'>+        writeback_version, BR_STUB_INCREMENTAL_VERSIONING, !WRITEBACK_DURABLE);</div><div class='add'>+</div><div class='add'>+dealloc_versions:</div><div class='add'>+    br_stub_dealloc_versions(obuf);</div><div class='add'>+dealloc_dict:</div><div class='add'>+    dict_unref(dict);</div><div class='add'>+done:</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (local)</div><div class='add'>+            frame-&gt;local = NULL;</div><div class='add'>+        call_unwind_error(stub, -1, op_errno);</div><div class='add'>+        if (local) {</div><div class='add'>+            br_stub_cleanup_local(local);</div><div class='add'>+            br_stub_dealloc_local(local);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** {{{ */</div><div class='hunk'>@@ -844,247 +827,242 @@ br_stub_perform_incversioning (xlator_t *this,</div><div class='ctx'> /* fsetxattr() */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_perform_objsign (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         fd_t *fd, dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+br_stub_perform_objsign(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                        dict_t *dict, int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, default_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr, fd,</div><div class='del'>-                    dict, flags, xdata);</div><div class='add'>+    STACK_WIND(frame, default_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-br_stub_signth (void *arg)</div><div class='add'>+br_stub_signth(void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = arg;</div><div class='del'>-        br_stub_private_t *priv = this-&gt;private;</div><div class='del'>-        struct br_stub_signentry *sigstub = NULL;</div><div class='del'>-</div><div class='del'>-        THIS = this;</div><div class='del'>-        while (1) {</div><div class='add'>+    xlator_t *this = arg;</div><div class='add'>+    br_stub_private_t *priv = this-&gt;private;</div><div class='add'>+    struct br_stub_signentry *sigstub = NULL;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;priv-&gt;squeue))</div><div class='del'>-                                pthread_cond_wait (&amp;priv-&gt;cond, &amp;priv-&gt;lock);</div><div class='add'>+    THIS = this;</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;priv-&gt;squeue))</div><div class='add'>+                pthread_cond_wait(&amp;priv-&gt;cond, &amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                        sigstub = list_first_entry</div><div class='del'>-                                (&amp;priv-&gt;squeue, struct br_stub_signentry, list);</div><div class='del'>-                        list_del_init (&amp;sigstub-&gt;list);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+            sigstub = list_first_entry(&amp;priv-&gt;squeue, struct br_stub_signentry,</div><div class='add'>+                                       list);</div><div class='add'>+            list_del_init(&amp;sigstub-&gt;list);</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                call_resume (sigstub-&gt;stub);</div><div class='add'>+        call_resume(sigstub-&gt;stub);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (sigstub);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(sigstub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-br_stub_internal_xattr (dict_t *dict) {</div><div class='del'>-</div><div class='del'>-        if (dict_get (dict, GLUSTERFS_SET_OBJECT_SIGNATURE) ||</div><div class='del'>-            dict_get (dict, GLUSTERFS_GET_OBJECT_SIGNATURE) ||</div><div class='del'>-            dict_get (dict, BR_REOPEN_SIGN_HINT_KEY) ||</div><div class='del'>-            dict_get (dict, BITROT_OBJECT_BAD_KEY) ||</div><div class='del'>-            dict_get (dict, BITROT_SIGNING_VERSION_KEY) ||</div><div class='del'>-            dict_get (dict, BITROT_CURRENT_VERSION_KEY))</div><div class='del'>-                return _gf_true;</div><div class='add'>+br_stub_internal_xattr(dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    if (dict_get(dict, GLUSTERFS_SET_OBJECT_SIGNATURE) ||</div><div class='add'>+        dict_get(dict, GLUSTERFS_GET_OBJECT_SIGNATURE) ||</div><div class='add'>+        dict_get(dict, BR_REOPEN_SIGN_HINT_KEY) ||</div><div class='add'>+        dict_get(dict, BITROT_OBJECT_BAD_KEY) ||</div><div class='add'>+        dict_get(dict, BITROT_SIGNING_VERSION_KEY) ||</div><div class='add'>+        dict_get(dict, BITROT_CURRENT_VERSION_KEY))</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-orderq (struct list_head *elem1, struct list_head *elem2)</div><div class='add'>+orderq(struct list_head *elem1, struct list_head *elem2)</div><div class='ctx'> {</div><div class='del'>-        struct br_stub_signentry *s1 = NULL;</div><div class='del'>-        struct br_stub_signentry *s2 = NULL;</div><div class='add'>+    struct br_stub_signentry *s1 = NULL;</div><div class='add'>+    struct br_stub_signentry *s2 = NULL;</div><div class='ctx'> </div><div class='del'>-        s1 = list_entry (elem1, struct br_stub_signentry, list);</div><div class='del'>-        s2 = list_entry (elem2, struct br_stub_signentry, list);</div><div class='add'>+    s1 = list_entry(elem1, struct br_stub_signentry, list);</div><div class='add'>+    s2 = list_entry(elem2, struct br_stub_signentry, list);</div><div class='ctx'> </div><div class='del'>-        return (s1-&gt;v &gt; s2-&gt;v);</div><div class='add'>+    return (s1-&gt;v &gt; s2-&gt;v);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_compare_sign_version (xlator_t *this,</div><div class='del'>-                              inode_t *inode,</div><div class='del'>-                              br_signature_t *sbuf,</div><div class='del'>-                              dict_t *dict, int *fakesuccess)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret     = -1;</div><div class='del'>-        uint64_t             tmp_ctx = 0;</div><div class='del'>-        gf_boolean_t         invalid = _gf_false;</div><div class='del'>-        br_stub_inode_ctx_t *ctx     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, sbuf, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, dict, out);</div><div class='del'>-</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, inode, &amp;tmp_ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                dict_del (dict, BITROT_SIGNING_VERSION_KEY);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = (br_stub_inode_ctx_t *)(long)tmp_ctx;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (ctx-&gt;currentversion &lt; sbuf-&gt;signedversion) {</div><div class='del'>-                        invalid = _gf_true;</div><div class='del'>-                } else if (ctx-&gt;currentversion &gt; sbuf-&gt;signedversion) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "\"Signing version\" "</div><div class='del'>-                                      "(%lu) lower than \"Current version \" "</div><div class='del'>-                                      "(%lu)", ctx-&gt;currentversion,</div><div class='del'>-                                      sbuf-&gt;signedversion);</div><div class='del'>-                        *fakesuccess = 1;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (invalid) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_SIGN_VERSION_ERROR, "Signing version exceeds "</div><div class='del'>-                        "current version [%lu &gt; %lu]", sbuf-&gt;signedversion,</div><div class='del'>-                        ctx-&gt;currentversion);</div><div class='del'>-        }</div><div class='add'>+br_stub_compare_sign_version(xlator_t *this, inode_t *inode,</div><div class='add'>+                             br_signature_t *sbuf, dict_t *dict,</div><div class='add'>+                             int *fakesuccess)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t tmp_ctx = 0;</div><div class='add'>+    gf_boolean_t invalid = _gf_false;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, sbuf, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, dict, out);</div><div class='add'>+</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, inode, &amp;tmp_ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        dict_del(dict, BITROT_SIGNING_VERSION_KEY);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)tmp_ctx;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (ctx-&gt;currentversion &lt; sbuf-&gt;signedversion) {</div><div class='add'>+            invalid = _gf_true;</div><div class='add'>+        } else if (ctx-&gt;currentversion &gt; sbuf-&gt;signedversion) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "\"Signing version\" "</div><div class='add'>+                         "(%lu) lower than \"Current version \" "</div><div class='add'>+                         "(%lu)",</div><div class='add'>+                         ctx-&gt;currentversion, sbuf-&gt;signedversion);</div><div class='add'>+            *fakesuccess = 1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (invalid) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_SIGN_VERSION_ERROR,</div><div class='add'>+               "Signing version exceeds "</div><div class='add'>+               "current version [%lu &gt; %lu]",</div><div class='add'>+               sbuf-&gt;signedversion, ctx-&gt;currentversion);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-br_stub_prepare_signature (xlator_t *this,</div><div class='del'>-                           dict_t *dict, inode_t *inode,</div><div class='del'>-                           br_isignature_t *sign, int *fakesuccess)</div><div class='add'>+br_stub_prepare_signature(xlator_t *this, dict_t *dict, inode_t *inode,</div><div class='add'>+                          br_isignature_t *sign, int *fakesuccess)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        size_t signaturelen = 0;</div><div class='del'>-        br_signature_t *sbuf = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    size_t signaturelen = 0;</div><div class='add'>+    br_signature_t *sbuf = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!br_is_signature_type_valid (sign-&gt;signaturetype))</div><div class='del'>-                goto error_return;</div><div class='add'>+    if (!br_is_signature_type_valid(sign-&gt;signaturetype))</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        signaturelen = sign-&gt;signaturelen;</div><div class='del'>-        ret = br_stub_alloc_versions (NULL, &amp;sbuf, signaturelen);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='del'>-        ret = br_stub_prepare_signing_request (dict, sbuf, sign, signaturelen);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_versions;</div><div class='add'>+    signaturelen = sign-&gt;signaturelen;</div><div class='add'>+    ret = br_stub_alloc_versions(NULL, &amp;sbuf, signaturelen);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='add'>+    ret = br_stub_prepare_signing_request(dict, sbuf, sign, signaturelen);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_versions;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_compare_sign_version (this, inode,</div><div class='del'>-                                            sbuf, dict, fakesuccess);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_versions;</div><div class='add'>+    ret = br_stub_compare_sign_version(this, inode, sbuf, dict, fakesuccess);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_versions;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- dealloc_versions:</div><div class='del'>-        br_stub_dealloc_versions (sbuf);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+dealloc_versions:</div><div class='add'>+    br_stub_dealloc_versions(sbuf);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_handle_object_signature (call_frame_t *frame,</div><div class='del'>-                                 xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-                                 br_isignature_t *sign, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t                   ret         = -1;</div><div class='del'>-        int32_t                   op_ret      = -1;</div><div class='del'>-        int32_t                   op_errno    = EINVAL;</div><div class='del'>-        int                       fakesuccess = 0;</div><div class='del'>-        br_stub_private_t        *priv        = NULL;</div><div class='del'>-        struct br_stub_signentry *sigstub     = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_BITD)</div><div class='del'>-                goto dofop;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_prepare_signature (this, dict,</div><div class='del'>-                                         fd-&gt;inode, sign, &amp;fakesuccess);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dofop;</div><div class='del'>-        if (fakesuccess) {</div><div class='del'>-                op_ret = op_errno = 0;</div><div class='del'>-                goto dofop;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict_del (dict, GLUSTERFS_SET_OBJECT_SIGNATURE);</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-                if (!xdata)</div><div class='del'>-                        goto dofop;</div><div class='del'>-        } else {</div><div class='del'>-                dict_ref (xdata);</div><div class='del'>-        }</div><div class='add'>+br_stub_handle_object_signature(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                                dict_t *dict, br_isignature_t *sign,</div><div class='add'>+                                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int fakesuccess = 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    struct br_stub_signentry *sigstub = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_BITD)</div><div class='add'>+        goto dofop;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_prepare_signature(this, dict, fd-&gt;inode, sign, &amp;fakesuccess);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dofop;</div><div class='add'>+    if (fakesuccess) {</div><div class='add'>+        op_ret = op_errno = 0;</div><div class='add'>+        goto dofop;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict_del(dict, GLUSTERFS_SET_OBJECT_SIGNATURE);</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+        if (!xdata)</div><div class='add'>+            goto dofop;</div><div class='add'>+    } else {</div><div class='add'>+        dict_ref(xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, GLUSTERFS_DURABLE_OP, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unref_dict;</div><div class='add'>+    ret = dict_set_int32(xdata, GLUSTERFS_DURABLE_OP, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unref_dict;</div><div class='ctx'> </div><div class='del'>-        /* prepare dispatch stub to order object signing */</div><div class='del'>-        sigstub = GF_CALLOC (1, sizeof (*sigstub), gf_br_stub_mt_sigstub_t);</div><div class='del'>-        if (!sigstub)</div><div class='del'>-                goto unref_dict;</div><div class='add'>+    /* prepare dispatch stub to order object signing */</div><div class='add'>+    sigstub = GF_CALLOC(1, sizeof(*sigstub), gf_br_stub_mt_sigstub_t);</div><div class='add'>+    if (!sigstub)</div><div class='add'>+        goto unref_dict;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;sigstub-&gt;list);</div><div class='del'>-        sigstub-&gt;v = ntohl (sign-&gt;signedversion);</div><div class='del'>-        sigstub-&gt;stub = fop_fsetxattr_stub (frame, br_stub_perform_objsign,</div><div class='del'>-                                            fd, dict, 0, xdata);</div><div class='del'>-        if (!sigstub-&gt;stub)</div><div class='del'>-                goto cleanup_stub;</div><div class='add'>+    INIT_LIST_HEAD(&amp;sigstub-&gt;list);</div><div class='add'>+    sigstub-&gt;v = ntohl(sign-&gt;signedversion);</div><div class='add'>+    sigstub-&gt;stub = fop_fsetxattr_stub(frame, br_stub_perform_objsign, fd, dict,</div><div class='add'>+                                       0, xdata);</div><div class='add'>+    if (!sigstub-&gt;stub)</div><div class='add'>+        goto cleanup_stub;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_order (&amp;sigstub-&gt;list, &amp;priv-&gt;squeue, orderq);</div><div class='del'>-                pthread_cond_signal (&amp;priv-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_order(&amp;sigstub-&gt;list, &amp;priv-&gt;squeue, orderq);</div><div class='add'>+        pthread_cond_signal(&amp;priv-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> </div><div class='del'>- cleanup_stub:</div><div class='del'>-        GF_FREE (sigstub);</div><div class='del'>- unref_dict:</div><div class='del'>-        dict_unref (xdata);</div><div class='del'>- dofop:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+cleanup_stub:</div><div class='add'>+    GF_FREE(sigstub);</div><div class='add'>+unref_dict:</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+dofop:</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_fsetxattr_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+br_stub_fsetxattr_resume(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-        br_stub_local_t *local = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_mark_inode_modified (this, local);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_mark_inode_modified(this, local);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1122,65 +1100,64 @@ br_stub_fsetxattr_resume (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>  * }</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-br_stub_handle_object_reopen (call_frame_t *frame,</div><div class='del'>-                              xlator_t *this, fd_t *fd, uint32_t val)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret         = -1;</div><div class='del'>-        int32_t              op_ret      = -1;</div><div class='del'>-        int32_t              op_errno    = EINVAL;</div><div class='del'>-        call_stub_t         *stub        = NULL;</div><div class='del'>-        gf_boolean_t         inc_version = _gf_false;</div><div class='del'>-        gf_boolean_t         modified    = _gf_false;</div><div class='del'>-        br_stub_inode_ctx_t *ctx         = NULL;</div><div class='del'>-        br_stub_local_t     *local       = NULL;</div><div class='del'>-        gf_boolean_t         goback      = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_need_versioning (this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+br_stub_handle_object_reopen(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                             uint32_t val)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    gf_boolean_t inc_version = _gf_false;</div><div class='add'>+    gf_boolean_t modified = _gf_false;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    gf_boolean_t goback = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_need_versioning(this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((val == BR_OBJECT_REOPEN) &amp;&amp; inc_version)</div><div class='add'>+            goback = _gf_false;</div><div class='add'>+        if (val == BR_OBJECT_RESIGN &amp;&amp; ctx-&gt;info_sign == BR_SIGN_NORMAL) {</div><div class='add'>+            __br_stub_mark_inode_synced(ctx);</div><div class='add'>+            __br_stub_set_inode_modified(ctx);</div><div class='add'>+        }</div><div class='add'>+        (void)__br_stub_inode_sign_state(ctx, GF_FOP_FSETXATTR, fd);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (goback) {</div><div class='add'>+        op_ret = op_errno = 0;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = br_stub_versioning_prep(frame, this, fd, ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    stub = fop_fsetxattr_cbk_stub(frame, br_stub_fsetxattr_resume, 0, 0, NULL);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='add'>+               "failed to allocate stub for fsetxattr fop (gfid: %s),"</div><div class='add'>+               " unwinding",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto cleanup_local;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)br_stub_perform_incversioning(this, frame, stub, fd, ctx);</div><div class='add'>+    return;</div><div class='add'>+</div><div class='add'>+cleanup_local:</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((val == BR_OBJECT_REOPEN) &amp;&amp; inc_version)</div><div class='del'>-                        goback = _gf_false;</div><div class='del'>-                if (val == BR_OBJECT_RESIGN &amp;&amp;</div><div class='del'>-                    ctx-&gt;info_sign == BR_SIGN_NORMAL) {</div><div class='del'>-                        __br_stub_mark_inode_synced (ctx);</div><div class='del'>-                        __br_stub_set_inode_modified (ctx);</div><div class='del'>-                }</div><div class='del'>-                (void) __br_stub_inode_sign_state (ctx, GF_FOP_FSETXATTR, fd);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (goback) {</div><div class='del'>-                op_ret = op_errno = 0;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = br_stub_versioning_prep (frame, this, fd, ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        stub = fop_fsetxattr_cbk_stub (frame, br_stub_fsetxattr_resume,</div><div class='del'>-                                       0, 0, NULL);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='del'>-                        "failed to allocate stub for fsetxattr fop (gfid: %s),"</div><div class='del'>-                        " unwinding", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto cleanup_local;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) br_stub_perform_incversioning (this, frame, stub, fd, ctx);</div><div class='del'>-        return;</div><div class='del'>-</div><div class='del'>- cleanup_local:</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='del'>-</div><div class='del'>- unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+unwind:</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1191,89 +1168,87 @@ br_stub_handle_object_reopen (call_frame_t *frame,</div><div class='ctx'>  * to mark the object as bad.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-br_stub_fsetxattr_bad_object_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                                  xlator_t *this, int32_t op_ret,</div><div class='del'>-                                  int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        br_stub_local_t *local = NULL;</div><div class='del'>-        int32_t          ret   = -1;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * What to do if marking the object as bad fails? (i.e. in memory</div><div class='del'>-         * marking within the inode context. If we are here means fsetxattr</div><div class='del'>-         * fop has succeeded on disk and the bad object xattr has been set).</div><div class='del'>-         * We can return failure to scruber, but there is nothing the scrubber</div><div class='del'>-         * can do with it (it might assume that the on disk setxattr itself has</div><div class='del'>-         * failed). The main purpose of this operation is to help identify the</div><div class='del'>-         * bad object by checking the inode context itself (thus avoiding the</div><div class='del'>-         * necessity of doing a getxattr fop on the disk).</div><div class='del'>-         *</div><div class='del'>-         * So as of now, success itself is being returned even though inode</div><div class='del'>-         * context set operation fails.</div><div class='del'>-         * In future if there is any change in the policy which can handle this,</div><div class='del'>-         * then appropriate response should be sent (i.e. success or error).</div><div class='del'>-         */</div><div class='del'>-        ret = br_stub_mark_object_bad (this, local-&gt;u.context.inode);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJ_MARK_FAIL,</div><div class='del'>-                        "failed to mark object %s as bad",</div><div class='del'>-                        uuid_utoa (local-&gt;u.context.inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        ret = br_stub_add (this, local-&gt;u.context.inode-&gt;gfid);</div><div class='add'>+br_stub_fsetxattr_bad_object_cbk(call_frame_t *frame, void *cookie,</div><div class='add'>+                                 xlator_t *this, int32_t op_ret,</div><div class='add'>+                                 int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * What to do if marking the object as bad fails? (i.e. in memory</div><div class='add'>+     * marking within the inode context. If we are here means fsetxattr</div><div class='add'>+     * fop has succeeded on disk and the bad object xattr has been set).</div><div class='add'>+     * We can return failure to scruber, but there is nothing the scrubber</div><div class='add'>+     * can do with it (it might assume that the on disk setxattr itself has</div><div class='add'>+     * failed). The main purpose of this operation is to help identify the</div><div class='add'>+     * bad object by checking the inode context itself (thus avoiding the</div><div class='add'>+     * necessity of doing a getxattr fop on the disk).</div><div class='add'>+     *</div><div class='add'>+     * So as of now, success itself is being returned even though inode</div><div class='add'>+     * context set operation fails.</div><div class='add'>+     * In future if there is any change in the policy which can handle this,</div><div class='add'>+     * then appropriate response should be sent (i.e. success or error).</div><div class='add'>+     */</div><div class='add'>+    ret = br_stub_mark_object_bad(this, local-&gt;u.context.inode);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJ_MARK_FAIL,</div><div class='add'>+               "failed to mark object %s as bad",</div><div class='add'>+               uuid_utoa(local-&gt;u.context.inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    ret = br_stub_add(this, local-&gt;u.context.inode-&gt;gfid);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-br_stub_handle_bad_object_key (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                               dict_t *dict, int flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        br_stub_local_t *local    = NULL;</div><div class='del'>-        int32_t          op_ret   = -1;</div><div class='del'>-        int32_t         op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_SCRUB) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_NON_SCRUB_BAD_OBJ_MARK, "bad object marking "</div><div class='del'>-                        "on %s is not from the scrubber",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = br_stub_alloc_local (this);</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate memory for fsetxattr on %s",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+br_stub_handle_bad_object_key(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                              dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_SCRUB) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NON_SCRUB_BAD_OBJ_MARK,</div><div class='add'>+               "bad object marking "</div><div class='add'>+               "on %s is not from the scrubber",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = br_stub_alloc_local(this);</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate memory for fsetxattr on %s",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        br_stub_fill_local (local, NULL, fd, fd-&gt;inode,</div><div class='del'>-                            fd-&gt;inode-&gt;gfid, BR_STUB_NO_VERSIONING, 0);</div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    br_stub_fill_local(local, NULL, fd, fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='add'>+                       BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, br_stub_fsetxattr_bad_object_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr, fd, dict, flags,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, br_stub_fsetxattr_bad_object_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * As of now, versioning is done by the stub (though as a setxattr</div><div class='ctx'>  * operation) as part of inode modification operations such as writev,</div><div class='hunk'>@@ -1289,126 +1264,122 @@ unwind:</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_stub_handle_internal_xattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                               char *key)</div><div class='add'>+br_stub_handle_internal_xattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                              char *key)</div><div class='ctx'> {</div><div class='del'>-        int32_t          op_ret   = -1;</div><div class='del'>-        int32_t          op_errno = EINVAL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                BRS_MSG_SET_INTERNAL_XATTR, "setxattr called"</div><div class='del'>-                " on the internal xattr %s for inode %s", key,</div><div class='del'>-                uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_SET_INTERNAL_XATTR,</div><div class='add'>+           "setxattr called"</div><div class='add'>+           " on the internal xattr %s for inode %s",</div><div class='add'>+           key, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_dump_xattr (xlator_t *this, dict_t *dict, int *op_errno)</div><div class='del'>-{</div><div class='del'>-        char                *format   = "(%s:%s)";</div><div class='del'>-        char                *dump     = NULL;</div><div class='del'>-</div><div class='del'>-        dump = GF_CALLOC (1, BR_STUB_DUMP_STR_SIZE, gf_br_stub_mt_misc);</div><div class='del'>-        if (!dump) {</div><div class='del'>-                *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dict_dump_to_str (dict, dump, BR_STUB_DUMP_STR_SIZE, format);</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                BRS_MSG_SET_INTERNAL_XATTR, "fsetxattr called on "</div><div class='del'>-                "internal xattr %s", dump);</div><div class='del'>- out:</div><div class='del'>-        if (dump) {</div><div class='del'>-                GF_FREE (dump);</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+br_stub_dump_xattr(xlator_t *this, dict_t *dict, int *op_errno)</div><div class='add'>+{</div><div class='add'>+    char *format = "(%s:%s)";</div><div class='add'>+    char *dump = NULL;</div><div class='add'>+</div><div class='add'>+    dump = GF_CALLOC(1, BR_STUB_DUMP_STR_SIZE, gf_br_stub_mt_misc);</div><div class='add'>+    if (!dump) {</div><div class='add'>+        *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dict_dump_to_str(dict, dump, BR_STUB_DUMP_STR_SIZE, format);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_SET_INTERNAL_XATTR,</div><div class='add'>+           "fsetxattr called on "</div><div class='add'>+           "internal xattr %s",</div><div class='add'>+           dump);</div><div class='add'>+out:</div><div class='add'>+    if (dump) {</div><div class='add'>+        GF_FREE(dump);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_fsetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   fd_t *fd, dict_t *dict, int flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret      = 0;</div><div class='del'>-        uint32_t             val      = 0;</div><div class='del'>-        br_isignature_t     *sign     = NULL;</div><div class='del'>-        br_stub_private_t   *priv     = NULL;</div><div class='del'>-        int32_t              op_ret   = -1;</div><div class='del'>-        int32_t              op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if ((frame-&gt;root-&gt;pid != GF_CLIENT_PID_BITD &amp;&amp;</div><div class='del'>-            frame-&gt;root-&gt;pid != GF_CLIENT_PID_SCRUB) &amp;&amp;</div><div class='del'>-            br_stub_internal_xattr (dict)) {</div><div class='del'>-                br_stub_dump_xattr (this, dict, &amp;op_errno);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        if (!IA_ISREG (fd-&gt;inode-&gt;ia_type))</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        /* object signature request */</div><div class='del'>-        ret = dict_get_bin (dict, GLUSTERFS_SET_OBJECT_SIGNATURE,</div><div class='del'>-                            (void **) &amp;sign);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                br_stub_handle_object_signature (frame, this,</div><div class='del'>-                                                 fd, dict, sign, xdata);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* signing xattr */</div><div class='del'>-        if (dict_get(dict, BITROT_SIGNING_VERSION_KEY)) {</div><div class='del'>-                br_stub_handle_internal_xattr (frame, this, fd,</div><div class='del'>-                                               BITROT_SIGNING_VERSION_KEY);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* version xattr */</div><div class='del'>-        if (dict_get(dict, BITROT_CURRENT_VERSION_KEY)) {</div><div class='del'>-                br_stub_handle_internal_xattr (frame, this, fd,</div><div class='del'>-                                               BITROT_CURRENT_VERSION_KEY);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get (dict, GLUSTERFS_GET_OBJECT_SIGNATURE)) {</div><div class='del'>-                br_stub_handle_internal_xattr (frame, this, fd,</div><div class='del'>-                                               GLUSTERFS_GET_OBJECT_SIGNATURE);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* object reopen request */</div><div class='del'>-        ret = dict_get_uint32 (dict, BR_REOPEN_SIGN_HINT_KEY, &amp;val);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                br_stub_handle_object_reopen (frame, this, fd, val);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* handle bad object */</div><div class='del'>-        if (dict_get (dict, BITROT_OBJECT_BAD_KEY)) {</div><div class='del'>-                br_stub_handle_bad_object_key (frame, this, fd,</div><div class='del'>-                                               dict, flags, xdata);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+br_stub_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                  int flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint32_t val = 0;</div><div class='add'>+    br_isignature_t *sign = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if ((frame-&gt;root-&gt;pid != GF_CLIENT_PID_BITD &amp;&amp;</div><div class='add'>+         frame-&gt;root-&gt;pid != GF_CLIENT_PID_SCRUB) &amp;&amp;</div><div class='add'>+        br_stub_internal_xattr(dict)) {</div><div class='add'>+        br_stub_dump_xattr(this, dict, &amp;op_errno);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    if (!IA_ISREG(fd-&gt;inode-&gt;ia_type))</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    /* object signature request */</div><div class='add'>+    ret = dict_get_bin(dict, GLUSTERFS_SET_OBJECT_SIGNATURE, (void **)&amp;sign);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        br_stub_handle_object_signature(frame, this, fd, dict, sign, xdata);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* signing xattr */</div><div class='add'>+    if (dict_get(dict, BITROT_SIGNING_VERSION_KEY)) {</div><div class='add'>+        br_stub_handle_internal_xattr(frame, this, fd,</div><div class='add'>+                                      BITROT_SIGNING_VERSION_KEY);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* version xattr */</div><div class='add'>+    if (dict_get(dict, BITROT_CURRENT_VERSION_KEY)) {</div><div class='add'>+        br_stub_handle_internal_xattr(frame, this, fd,</div><div class='add'>+                                      BITROT_CURRENT_VERSION_KEY);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict_get(dict, GLUSTERFS_GET_OBJECT_SIGNATURE)) {</div><div class='add'>+        br_stub_handle_internal_xattr(frame, this, fd,</div><div class='add'>+                                      GLUSTERFS_GET_OBJECT_SIGNATURE);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* object reopen request */</div><div class='add'>+    ret = dict_get_uint32(dict, BR_REOPEN_SIGN_HINT_KEY, &amp;val);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        br_stub_handle_object_reopen(frame, this, fd, val);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* handle bad object */</div><div class='add'>+    if (dict_get(dict, BITROT_OBJECT_BAD_KEY)) {</div><div class='add'>+        br_stub_handle_bad_object_key(frame, this, fd, dict, flags, xdata);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, default_fsetxattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr, fd, dict, flags,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * Currently BitD and scrubber are doing fsetxattr to either sign the object</div><div class='ctx'>  * or to mark it as bad. Hence setxattr on any of those keys is denied directly</div><div class='hunk'>@@ -1417,82 +1388,79 @@ done:</div><div class='ctx'>  * check has to be added below.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-br_stub_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+br_stub_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+                 int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t  op_ret                    = -1;</div><div class='del'>-        int32_t  op_errno                  = EINVAL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        if (br_stub_internal_xattr (dict)) {</div><div class='del'>-                br_stub_dump_xattr (this, dict, &amp;op_errno);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (br_stub_internal_xattr(dict)) {</div><div class='add'>+        br_stub_dump_xattr(this, dict, &amp;op_errno);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD (this),</div><div class='del'>-                         FIRST_CHILD (this)-&gt;fops-&gt;setxattr, loc, dict, flags,</div><div class='del'>-                         xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='add'>+                    loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /** {{{ */</div><div class='ctx'> </div><div class='ctx'> /* {f}removexattr() */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                     loc_t *loc, const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t op_ret    = -1;</div><div class='del'>-        int32_t op_errno  = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (!strcmp (BITROT_OBJECT_BAD_KEY, name) ||</div><div class='del'>-            !strcmp (BITROT_SIGNING_VERSION_KEY, name) ||</div><div class='del'>-            !strcmp (BITROT_CURRENT_VERSION_KEY, name)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_REMOVE_INTERNAL_XATTR, "removexattr called"</div><div class='del'>-                        " on internal xattr %s for file %s", name, loc-&gt;path);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                         loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+br_stub_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                    const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(BITROT_OBJECT_BAD_KEY, name) ||</div><div class='add'>+        !strcmp(BITROT_SIGNING_VERSION_KEY, name) ||</div><div class='add'>+        !strcmp(BITROT_CURRENT_VERSION_KEY, name)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_REMOVE_INTERNAL_XATTR,</div><div class='add'>+               "removexattr called"</div><div class='add'>+               " on internal xattr %s for file %s",</div><div class='add'>+               name, loc-&gt;path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_fremovexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      fd_t *fd, const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t op_ret    = -1;</div><div class='del'>-        int32_t op_errno  = EINVAL;</div><div class='del'>-</div><div class='del'>-        if (!strcmp (BITROT_OBJECT_BAD_KEY, name) ||</div><div class='del'>-            !strcmp (BITROT_SIGNING_VERSION_KEY, name) ||</div><div class='del'>-            !strcmp (BITROT_CURRENT_VERSION_KEY, name)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_REMOVE_INTERNAL_XATTR, "removexattr called"</div><div class='del'>-                        " on internal xattr %s for inode %s", name,</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                         fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+br_stub_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                     const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    if (!strcmp(BITROT_OBJECT_BAD_KEY, name) ||</div><div class='add'>+        !strcmp(BITROT_SIGNING_VERSION_KEY, name) ||</div><div class='add'>+        !strcmp(BITROT_CURRENT_VERSION_KEY, name)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_REMOVE_INTERNAL_XATTR,</div><div class='add'>+               "removexattr called"</div><div class='add'>+               " on internal xattr %s for inode %s",</div><div class='add'>+               name, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this),</div><div class='add'>+                    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='hunk'>@@ -1502,17 +1470,17 @@ unwind:</div><div class='ctx'> /* {f}getxattr() */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_listxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+br_stub_listxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        br_stub_remove_vxattrs (xattr);</div><div class='add'>+    br_stub_remove_vxattrs(xattr);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1551,383 +1519,386 @@ br_stub_listxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>  * then treat the object as stale.</div><div class='ctx'>  */</div><div class='ctx'> char</div><div class='del'>-br_stub_is_object_stale (xlator_t *this, call_frame_t *frame, inode_t *inode,</div><div class='del'>-                         br_version_t *obuf, br_signature_t *sbuf)</div><div class='del'>-{</div><div class='del'>-        uint64_t   ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx = NULL;</div><div class='del'>-        int32_t  ret = -1;</div><div class='del'>-        char stale = 0;</div><div class='del'>-</div><div class='del'>-        if (obuf-&gt;ongoingversion == sbuf-&gt;signedversion)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_SCRUB) {</div><div class='del'>-                stale = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, inode, &amp;ctx_addr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_GET_INODE_CONTEXT_FAILED, "failed to get the "</div><div class='del'>-                        "inode context for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((!__br_stub_is_inode_dirty (ctx) &amp;&amp;</div><div class='del'>-                     ctx-&gt;info_sign != BR_SIGN_NORMAL) ||</div><div class='del'>-                    __br_stub_is_inode_dirty (ctx))</div><div class='del'>-                        stale = 1;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+br_stub_is_object_stale(xlator_t *this, call_frame_t *frame, inode_t *inode,</div><div class='add'>+                        br_version_t *obuf, br_signature_t *sbuf)</div><div class='add'>+{</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char stale = 0;</div><div class='add'>+</div><div class='add'>+    if (obuf-&gt;ongoingversion == sbuf-&gt;signedversion)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_SCRUB) {</div><div class='add'>+        stale = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, inode, &amp;ctx_addr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='add'>+               "failed to get the "</div><div class='add'>+               "inode context for %s",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((!__br_stub_is_inode_dirty(ctx) &amp;&amp;</div><div class='add'>+             ctx-&gt;info_sign != BR_SIGN_NORMAL) ||</div><div class='add'>+            __br_stub_is_inode_dirty(ctx))</div><div class='add'>+            stale = 1;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stale;</div><div class='add'>+    return stale;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret          = 0;</div><div class='del'>-        size_t               totallen     = 0;</div><div class='del'>-        size_t               signaturelen = 0;</div><div class='del'>-        br_stub_private_t   *priv         = NULL;</div><div class='del'>-        br_version_t        *obuf         = NULL;</div><div class='del'>-        br_signature_t      *sbuf         = NULL;</div><div class='del'>-        br_isignature_out_t *sign         = NULL;</div><div class='del'>-        br_vxattr_status_t   status;</div><div class='del'>-        br_stub_local_t     *local        = NULL;</div><div class='del'>-        inode_t             *inode        = NULL;</div><div class='del'>-        gf_boolean_t         bad_object   = _gf_false;</div><div class='del'>-        gf_boolean_t         ver_enabled  = _gf_false;</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-        BR_STUB_VER_COND_GOTO (priv, (!ver_enabled), delkeys);</div><div class='del'>-</div><div class='del'>-        if (cookie != (void *) BR_STUB_REQUEST_COOKIE)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        inode = local-&gt;u.context.inode;</div><div class='del'>-</div><div class='del'>-        op_ret   = -1;</div><div class='del'>-        status = br_version_xattr_state (xattr, &amp;obuf, &amp;sbuf, &amp;bad_object);</div><div class='add'>+br_stub_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    size_t totallen = 0;</div><div class='add'>+    size_t signaturelen = 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    br_version_t *obuf = NULL;</div><div class='add'>+    br_signature_t *sbuf = NULL;</div><div class='add'>+    br_isignature_out_t *sign = NULL;</div><div class='add'>+    br_vxattr_status_t status;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    gf_boolean_t bad_object = _gf_false;</div><div class='add'>+    gf_boolean_t ver_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+    BR_STUB_VER_COND_GOTO(priv, (!ver_enabled), delkeys);</div><div class='add'>+</div><div class='add'>+    if (cookie != (void *)BR_STUB_REQUEST_COOKIE)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    inode = local-&gt;u.context.inode;</div><div class='add'>+</div><div class='add'>+    op_ret = -1;</div><div class='add'>+    status = br_version_xattr_state(xattr, &amp;obuf, &amp;sbuf, &amp;bad_object);</div><div class='add'>+</div><div class='add'>+    op_errno = EIO;</div><div class='add'>+    if (bad_object)</div><div class='add'>+        goto delkeys;</div><div class='add'>+</div><div class='add'>+    op_errno = EINVAL;</div><div class='add'>+    if (status == BR_VXATTR_STATUS_INVALID)</div><div class='add'>+        goto delkeys;</div><div class='add'>+</div><div class='add'>+    op_errno = ENODATA;</div><div class='add'>+    if ((status == BR_VXATTR_STATUS_MISSING) ||</div><div class='add'>+        (status == BR_VXATTR_STATUS_UNSIGNED))</div><div class='add'>+        goto delkeys;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * okay.. we have enough information to satisfy the request,</div><div class='add'>+     * namely: version and signing extended attribute. what's</div><div class='add'>+     * pending is the signature length -- that's figured out</div><div class='add'>+     * indirectly via the size of the _whole_ xattr and the</div><div class='add'>+     * on-disk signing xattr header size.</div><div class='add'>+     */</div><div class='add'>+    op_errno = EINVAL;</div><div class='add'>+    ret = dict_get_uint32(xattr, BITROT_SIGNING_XATTR_SIZE_KEY,</div><div class='add'>+                          (uint32_t *)&amp;signaturelen);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto delkeys;</div><div class='add'>+</div><div class='add'>+    signaturelen -= sizeof(br_signature_t);</div><div class='add'>+    totallen = sizeof(br_isignature_out_t) + signaturelen;</div><div class='add'>+</div><div class='add'>+    op_errno = ENOMEM;</div><div class='add'>+    sign = GF_CALLOC(1, totallen, gf_br_stub_mt_signature_t);</div><div class='add'>+    if (!sign)</div><div class='add'>+        goto delkeys;</div><div class='add'>+</div><div class='add'>+    sign-&gt;time[0] = obuf-&gt;timebuf[0];</div><div class='add'>+    sign-&gt;time[1] = obuf-&gt;timebuf[1];</div><div class='add'>+</div><div class='add'>+    /* Object's dirty state &amp; current signed version */</div><div class='add'>+    sign-&gt;version = sbuf-&gt;signedversion;</div><div class='add'>+    sign-&gt;stale = br_stub_is_object_stale(this, frame, inode, obuf, sbuf);</div><div class='add'>+</div><div class='add'>+    /* Object's signature */</div><div class='add'>+    sign-&gt;signaturelen = signaturelen;</div><div class='add'>+    sign-&gt;signaturetype = sbuf-&gt;signaturetype;</div><div class='add'>+    (void)memcpy(sign-&gt;signature, sbuf-&gt;signature, signaturelen);</div><div class='add'>+</div><div class='add'>+    op_errno = EINVAL;</div><div class='add'>+    ret = dict_set_bin(xattr, GLUSTERFS_GET_OBJECT_SIGNATURE, (void *)sign,</div><div class='add'>+                       totallen);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        GF_FREE(sign);</div><div class='add'>+        goto delkeys;</div><div class='add'>+    }</div><div class='add'>+    op_errno = 0;</div><div class='add'>+    op_ret = totallen;</div><div class='add'>+</div><div class='add'>+delkeys:</div><div class='add'>+    br_stub_remove_vxattrs(xattr);</div><div class='ctx'> </div><div class='del'>-        op_errno = EIO;</div><div class='del'>-        if (bad_object)</div><div class='del'>-                goto delkeys;</div><div class='del'>-</div><div class='del'>-        op_errno = EINVAL;</div><div class='del'>-        if (status == BR_VXATTR_STATUS_INVALID)</div><div class='del'>-                goto delkeys;</div><div class='del'>-</div><div class='del'>-        op_errno = ENODATA;</div><div class='del'>-        if ((status == BR_VXATTR_STATUS_MISSING)</div><div class='del'>-            || (status == BR_VXATTR_STATUS_UNSIGNED))</div><div class='del'>-                goto delkeys;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * okay.. we have enough information to satisfy the request,</div><div class='del'>-         * namely: version and signing extended attribute. what's</div><div class='del'>-         * pending is the signature length -- that's figured out</div><div class='del'>-         * indirectly via the size of the _whole_ xattr and the</div><div class='del'>-         * on-disk signing xattr header size.</div><div class='del'>-         */</div><div class='del'>-        op_errno = EINVAL;</div><div class='del'>-        ret = dict_get_uint32 (xattr, BITROT_SIGNING_XATTR_SIZE_KEY,</div><div class='del'>-                               (uint32_t *)&amp;signaturelen);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto delkeys;</div><div class='del'>-</div><div class='del'>-        signaturelen -= sizeof (br_signature_t);</div><div class='del'>-        totallen = sizeof (br_isignature_out_t) + signaturelen;</div><div class='del'>-</div><div class='del'>-        op_errno = ENOMEM;</div><div class='del'>-        sign = GF_CALLOC (1, totallen, gf_br_stub_mt_signature_t);</div><div class='del'>-        if (!sign)</div><div class='del'>-                goto delkeys;</div><div class='del'>-</div><div class='del'>-        sign-&gt;time[0] = obuf-&gt;timebuf[0];</div><div class='del'>-        sign-&gt;time[1] = obuf-&gt;timebuf[1];</div><div class='del'>-</div><div class='del'>-        /* Object's dirty state &amp; current signed version */</div><div class='del'>-        sign-&gt;version = sbuf-&gt;signedversion;</div><div class='del'>-        sign-&gt;stale = br_stub_is_object_stale (this, frame, inode, obuf, sbuf);</div><div class='del'>-</div><div class='del'>-        /* Object's signature */</div><div class='del'>-        sign-&gt;signaturelen  = signaturelen;</div><div class='del'>-        sign-&gt;signaturetype = sbuf-&gt;signaturetype;</div><div class='del'>-        (void) memcpy (sign-&gt;signature, sbuf-&gt;signature, signaturelen);</div><div class='del'>-</div><div class='del'>-        op_errno = EINVAL;</div><div class='del'>-        ret = dict_set_bin (xattr, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='del'>-                            (void *)sign, totallen);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                GF_FREE (sign);</div><div class='del'>-                goto delkeys;</div><div class='del'>-        }</div><div class='del'>-        op_errno = 0;</div><div class='del'>-        op_ret = totallen;</div><div class='del'>-</div><div class='del'>- delkeys:</div><div class='del'>-        br_stub_remove_vxattrs (xattr);</div><div class='del'>-</div><div class='del'>- unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='del'>-        if (local) {</div><div class='del'>-                br_stub_cleanup_local (local);</div><div class='del'>-                br_stub_dealloc_local (local);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+    if (local) {</div><div class='add'>+        br_stub_cleanup_local(local);</div><div class='add'>+        br_stub_dealloc_local(local);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_send_stub_init_time (call_frame_t *frame, xlator_t *this)</div><div class='add'>+br_stub_send_stub_init_time(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int op_ret = 0;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        dict_t *xattr = NULL;</div><div class='del'>-        br_stub_init_t stub = {{0,},};</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    br_stub_init_t stub = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        stub.timebuf[0] = priv-&gt;boot[0];</div><div class='del'>-        stub.timebuf[1] = priv-&gt;boot[1];</div><div class='del'>-        memcpy (stub.export, priv-&gt;export, strlen (priv-&gt;export) + 1);</div><div class='add'>+    stub.timebuf[0] = priv-&gt;boot[0];</div><div class='add'>+    stub.timebuf[1] = priv-&gt;boot[1];</div><div class='add'>+    memcpy(stub.export, priv-&gt;export, strlen(priv-&gt;export) + 1);</div><div class='ctx'> </div><div class='del'>-        op_ret = dict_set_static_bin (xattr, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='del'>-                                      (void *) &amp;stub, sizeof (br_stub_init_t));</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    op_ret = dict_set_static_bin(xattr, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='add'>+                                 (void *)&amp;stub, sizeof(br_stub_init_t));</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        op_ret = sizeof (br_stub_init_t);</div><div class='add'>+    op_ret = sizeof(br_stub_init_t);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, xattr, NULL);</div><div class='add'>+unwind:</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, xattr, NULL);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        void               *cookie   = NULL;</div><div class='del'>-        uuid_t              rootgfid = {0, };</div><div class='del'>-        fop_getxattr_cbk_t  cbk      = br_stub_getxattr_cbk;</div><div class='del'>-        int32_t             op_ret   = -1;</div><div class='del'>-        int32_t             op_errno = EINVAL;</div><div class='del'>-        br_stub_local_t    *local    = NULL;</div><div class='del'>-        br_stub_private_t  *priv     = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;inode, unwind);</div><div class='del'>-</div><div class='del'>-        rootgfid[15] = 1;</div><div class='del'>-</div><div class='del'>-        if (!name) {</div><div class='del'>-                cbk = br_stub_listxattr_cbk;</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (br_stub_is_internal_xattr (name))</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        BR_STUB_VER_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * If xattr is node-uuid and the inode is marked bad, return EIO.</div><div class='del'>-         * Returning EIO would result in AFR to choose correct node-uuid</div><div class='del'>-         * corresponding to the subvolume * where the good copy of the</div><div class='del'>-         * file resides.</div><div class='del'>-         */</div><div class='del'>-        if (IA_ISREG (loc-&gt;inode-&gt;ia_type) &amp;&amp; XATTR_IS_NODE_UUID (name) &amp;&amp;</div><div class='del'>-            br_stub_check_bad_object (this, loc-&gt;inode, &amp;op_ret, &amp;op_errno)) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * this special extended attribute is allowed only on root</div><div class='del'>-         */</div><div class='del'>-        if (name</div><div class='del'>-            &amp;&amp; (strncmp (name, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='del'>-                          sizeof (GLUSTERFS_GET_BR_STUB_INIT_TIME) - 1) == 0)</div><div class='del'>-            &amp;&amp; ((gf_uuid_compare (loc-&gt;gfid, rootgfid) == 0)</div><div class='del'>-                || (gf_uuid_compare (loc-&gt;inode-&gt;gfid, rootgfid) == 0))) {</div><div class='del'>-                BR_STUB_RESET_LOCAL_NULL (frame);</div><div class='del'>-                br_stub_send_stub_init_time (frame, this);</div><div class='del'>-                return 0;</div><div class='add'>+br_stub_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                 const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    void *cookie = NULL;</div><div class='add'>+    uuid_t rootgfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fop_getxattr_cbk_t cbk = br_stub_getxattr_cbk;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;inode, unwind);</div><div class='add'>+</div><div class='add'>+    rootgfid[15] = 1;</div><div class='add'>+</div><div class='add'>+    if (!name) {</div><div class='add'>+        cbk = br_stub_listxattr_cbk;</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (br_stub_is_internal_xattr(name))</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * If xattr is node-uuid and the inode is marked bad, return EIO.</div><div class='add'>+     * Returning EIO would result in AFR to choose correct node-uuid</div><div class='add'>+     * corresponding to the subvolume * where the good copy of the</div><div class='add'>+     * file resides.</div><div class='add'>+     */</div><div class='add'>+    if (IA_ISREG(loc-&gt;inode-&gt;ia_type) &amp;&amp; XATTR_IS_NODE_UUID(name) &amp;&amp;</div><div class='add'>+        br_stub_check_bad_object(this, loc-&gt;inode, &amp;op_ret, &amp;op_errno)) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * this special extended attribute is allowed only on root</div><div class='add'>+     */</div><div class='add'>+    if (name &amp;&amp;</div><div class='add'>+        (strncmp(name, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='add'>+                 sizeof(GLUSTERFS_GET_BR_STUB_INIT_TIME) - 1) == 0) &amp;&amp;</div><div class='add'>+        ((gf_uuid_compare(loc-&gt;gfid, rootgfid) == 0) ||</div><div class='add'>+         (gf_uuid_compare(loc-&gt;inode-&gt;gfid, rootgfid) == 0))) {</div><div class='add'>+        BR_STUB_RESET_LOCAL_NULL(frame);</div><div class='add'>+        br_stub_send_stub_init_time(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISREG(loc-&gt;inode-&gt;ia_type))</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    if (name &amp;&amp; (strncmp(name, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='add'>+                         sizeof(GLUSTERFS_GET_OBJECT_SIGNATURE) - 1) == 0)) {</div><div class='add'>+        cookie = (void *)BR_STUB_REQUEST_COOKIE;</div><div class='add'>+</div><div class='add'>+        local = br_stub_alloc_local(this);</div><div class='add'>+        if (!local) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!IA_ISREG (loc-&gt;inode-&gt;ia_type))</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        if (name &amp;&amp; (strncmp (name, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='del'>-                              sizeof (GLUSTERFS_GET_OBJECT_SIGNATURE) - 1) == 0)) {</div><div class='del'>-                cookie = (void *) BR_STUB_REQUEST_COOKIE;</div><div class='del'>-</div><div class='del'>-                local = br_stub_alloc_local (this);</div><div class='del'>-                if (!local) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                br_stub_fill_local (local, NULL, NULL, loc-&gt;inode,</div><div class='del'>-                                    loc-&gt;inode-&gt;gfid,</div><div class='del'>-                                    BR_STUB_NO_VERSIONING, 0);</div><div class='del'>-                frame-&gt;local = local;</div><div class='del'>-        }</div><div class='add'>+        br_stub_fill_local(local, NULL, NULL, loc-&gt;inode, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                           BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+        frame-&gt;local = local;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND_COOKIE</div><div class='del'>-                      (frame, cbk, cookie, FIRST_CHILD (this),</div><div class='del'>-                       FIRST_CHILD (this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND_COOKIE(frame, cbk, cookie, FIRST_CHILD(this),</div><div class='add'>+                      FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        BR_STUB_RESET_LOCAL_NULL (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='add'>+    BR_STUB_RESET_LOCAL_NULL(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_fgetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   fd_t *fd, const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        void *cookie = NULL;</div><div class='del'>-        uuid_t rootgfid = {0, };</div><div class='del'>-        fop_fgetxattr_cbk_t cbk = br_stub_getxattr_cbk;</div><div class='del'>-        int32_t op_ret = -1;</div><div class='del'>-        int32_t op_errno = EINVAL;</div><div class='del'>-        br_stub_local_t *local = NULL;</div><div class='del'>-        br_stub_private_t  *priv = NULL;</div><div class='del'>-</div><div class='del'>-        rootgfid[15] = 1;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!name) {</div><div class='del'>-                cbk = br_stub_listxattr_cbk;</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (br_stub_is_internal_xattr (name))</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * If xattr is node-uuid and the inode is marked bad, return EIO.</div><div class='del'>-         * Returning EIO would result in AFR to choose correct node-uuid</div><div class='del'>-         * corresponding to the subvolume * where the good copy of the</div><div class='del'>-         * file resides.</div><div class='del'>-         */</div><div class='del'>-        if (IA_ISREG (fd-&gt;inode-&gt;ia_type) &amp;&amp; XATTR_IS_NODE_UUID (name) &amp;&amp;</div><div class='del'>-            br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno)) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * this special extended attribute is allowed only on root</div><div class='del'>-         */</div><div class='del'>-        if (name</div><div class='del'>-            &amp;&amp; (strncmp (name, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='del'>-                         sizeof (GLUSTERFS_GET_BR_STUB_INIT_TIME) - 1) == 0)</div><div class='del'>-            &amp;&amp; (gf_uuid_compare (fd-&gt;inode-&gt;gfid, rootgfid) == 0)) {</div><div class='del'>-                BR_STUB_RESET_LOCAL_NULL (frame);</div><div class='del'>-                br_stub_send_stub_init_time (frame, this);</div><div class='del'>-                return 0;</div><div class='add'>+br_stub_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    void *cookie = NULL;</div><div class='add'>+    uuid_t rootgfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    fop_fgetxattr_cbk_t cbk = br_stub_getxattr_cbk;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    rootgfid[15] = 1;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!name) {</div><div class='add'>+        cbk = br_stub_listxattr_cbk;</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (br_stub_is_internal_xattr(name))</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * If xattr is node-uuid and the inode is marked bad, return EIO.</div><div class='add'>+     * Returning EIO would result in AFR to choose correct node-uuid</div><div class='add'>+     * corresponding to the subvolume * where the good copy of the</div><div class='add'>+     * file resides.</div><div class='add'>+     */</div><div class='add'>+    if (IA_ISREG(fd-&gt;inode-&gt;ia_type) &amp;&amp; XATTR_IS_NODE_UUID(name) &amp;&amp;</div><div class='add'>+        br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno)) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * this special extended attribute is allowed only on root</div><div class='add'>+     */</div><div class='add'>+    if (name &amp;&amp;</div><div class='add'>+        (strncmp(name, GLUSTERFS_GET_BR_STUB_INIT_TIME,</div><div class='add'>+                 sizeof(GLUSTERFS_GET_BR_STUB_INIT_TIME) - 1) == 0) &amp;&amp;</div><div class='add'>+        (gf_uuid_compare(fd-&gt;inode-&gt;gfid, rootgfid) == 0)) {</div><div class='add'>+        BR_STUB_RESET_LOCAL_NULL(frame);</div><div class='add'>+        br_stub_send_stub_init_time(frame, this);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!IA_ISREG(fd-&gt;inode-&gt;ia_type))</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    if (name &amp;&amp; (strncmp(name, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='add'>+                         sizeof(GLUSTERFS_GET_OBJECT_SIGNATURE) - 1) == 0)) {</div><div class='add'>+        cookie = (void *)BR_STUB_REQUEST_COOKIE;</div><div class='add'>+</div><div class='add'>+        local = br_stub_alloc_local(this);</div><div class='add'>+        if (!local) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!IA_ISREG (fd-&gt;inode-&gt;ia_type))</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        if (name &amp;&amp; (strncmp (name, GLUSTERFS_GET_OBJECT_SIGNATURE,</div><div class='del'>-                              sizeof (GLUSTERFS_GET_OBJECT_SIGNATURE) - 1) == 0)) {</div><div class='del'>-                cookie = (void *) BR_STUB_REQUEST_COOKIE;</div><div class='del'>-</div><div class='del'>-                local = br_stub_alloc_local (this);</div><div class='del'>-                if (!local) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                br_stub_fill_local (local, NULL, fd, fd-&gt;inode,</div><div class='del'>-                                    fd-&gt;inode-&gt;gfid,</div><div class='del'>-                                    BR_STUB_NO_VERSIONING, 0);</div><div class='del'>-                frame-&gt;local = local;</div><div class='del'>-        }</div><div class='add'>+        br_stub_fill_local(local, NULL, fd, fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='add'>+                           BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+        frame-&gt;local = local;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND_COOKIE</div><div class='del'>-                      (frame, cbk, cookie, FIRST_CHILD (this),</div><div class='del'>-                       FIRST_CHILD (this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND_COOKIE(frame, cbk, cookie, FIRST_CHILD(this),</div><div class='add'>+                      FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        BR_STUB_RESET_LOCAL_NULL (frame);</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    BR_STUB_RESET_LOCAL_NULL(frame);</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+br_stub_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t              op_ret   = -1;</div><div class='del'>-        int32_t              op_errno = EINVAL;</div><div class='del'>-        int32_t              ret      = -1;</div><div class='del'>-        br_stub_private_t   *priv     = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd-&gt;inode, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd-&gt;inode, unwind);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset,</div><div class='del'>-                         flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='add'>+                    fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno, NULL, 0, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, NULL, 0, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1938,44 +1909,44 @@ unwind:</div><div class='ctx'>  * fds.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-br_stub_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+br_stub_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                   struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret   = 0;</div><div class='del'>-        br_stub_local_t   *local = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_mark_inode_modified (this, local);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_mark_inode_modified(this, local);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame,</div><div class='del'>-                             op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_writev_resume (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                       struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-                       uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+br_stub_writev_resume(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                      struct iovec *vector, int32_t count, off_t offset,</div><div class='add'>+                      uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, br_stub_writev_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count,</div><div class='del'>-                    offset, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, br_stub_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1989,248 +1960,247 @@ br_stub_writev_resume (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'>  * This prevents signing of objects that have not been modified.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-br_stub_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-                uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        call_stub_t         *stub        = NULL;</div><div class='del'>-        int32_t              op_ret      = -1;</div><div class='del'>-        int32_t              op_errno    = EINVAL;</div><div class='del'>-        gf_boolean_t         inc_version = _gf_false;</div><div class='del'>-        gf_boolean_t         modified    = _gf_false;</div><div class='del'>-        br_stub_inode_ctx_t *ctx         = NULL;</div><div class='del'>-        int32_t              ret         = -1;</div><div class='del'>-        fop_writev_cbk_t     cbk         = default_writev_cbk;</div><div class='del'>-        br_stub_local_t     *local       = NULL;</div><div class='del'>-        br_stub_private_t   *priv        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, unwind);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_need_versioning (this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+br_stub_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iovec *vector, int32_t count, off_t offset,</div><div class='add'>+               uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    gf_boolean_t inc_version = _gf_false;</div><div class='add'>+    gf_boolean_t modified = _gf_false;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fop_writev_cbk_t cbk = default_writev_cbk;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, unwind);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_need_versioning(this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * The inode is not dirty and also witnessed at least one successful</div><div class='add'>+     * modification operation. Therefore, subsequent operations need not</div><div class='add'>+     * perform any special tracking.</div><div class='add'>+     */</div><div class='add'>+    if (!inc_version &amp;&amp; modified)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * okay.. so, either the inode needs versioning or the modification</div><div class='add'>+     * needs to be tracked. -&gt;cbk is set to the appropriate callback</div><div class='add'>+     * routine for this.</div><div class='add'>+     * NOTE: -&gt;local needs to be deallocated on failures from here on.</div><div class='add'>+     */</div><div class='add'>+    ret = br_stub_versioning_prep(frame, this, fd, ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!inc_version) {</div><div class='add'>+        br_stub_fill_local(local, NULL, fd, fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='add'>+                           BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+        cbk = br_stub_writev_cbk;</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stub = fop_writev_stub(frame, br_stub_writev_resume, fd, vector, count,</div><div class='add'>+                           offset, flags, iobref, xdata);</div><div class='add'>+</div><div class='add'>+    if (!stub) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='add'>+               "failed to allocate stub for write fop (gfid: %s), "</div><div class='add'>+               "unwinding",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto cleanup_local;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Perform Versioning */</div><div class='add'>+    return br_stub_perform_incversioning(this, frame, stub, fd, ctx);</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * The inode is not dirty and also witnessed at least one successful</div><div class='del'>-         * modification operation. Therefore, subsequent operations need not</div><div class='del'>-         * perform any special tracking.</div><div class='del'>-         */</div><div class='del'>-        if (!inc_version &amp;&amp; modified)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * okay.. so, either the inode needs versioning or the modification</div><div class='del'>-         * needs to be tracked. -&gt;cbk is set to the appropriate callback</div><div class='del'>-         * routine for this.</div><div class='del'>-         * NOTE: -&gt;local needs to be deallocated on failures from here on.</div><div class='del'>-         */</div><div class='del'>-        ret = br_stub_versioning_prep (frame, this, fd, ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!inc_version) {</div><div class='del'>-                br_stub_fill_local (local, NULL, fd, fd-&gt;inode,</div><div class='del'>-                                    fd-&gt;inode-&gt;gfid, BR_STUB_NO_VERSIONING, 0);</div><div class='del'>-                cbk = br_stub_writev_cbk;</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        stub = fop_writev_stub (frame, br_stub_writev_resume, fd, vector, count,</div><div class='del'>-                                offset, flags, iobref, xdata);</div><div class='del'>-</div><div class='del'>-        if (!stub) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='del'>-                        "failed to allocate stub for write fop (gfid: %s), "</div><div class='del'>-                        "unwinding", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto cleanup_local;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Perform Versioning */</div><div class='del'>-        return br_stub_perform_incversioning (this, frame, stub, fd, ctx);</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, vector, count, offset, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, cbk, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='add'>+               fd, vector, count, offset, flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- cleanup_local:</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='add'>+cleanup_local:</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, NULL, NULL,</div><div class='del'>-                             NULL);</div><div class='add'>+unwind:</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+br_stub_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                      struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret   = -1;</div><div class='del'>-        br_stub_local_t   *local = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_mark_inode_modified (this, local);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_mark_inode_modified(this, local);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame,</div><div class='del'>-                             op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_ftruncate_resume (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                          off_t offset, dict_t *xdata)</div><div class='add'>+br_stub_ftruncate_resume(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                         off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, br_stub_ftruncate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, br_stub_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* c.f. br_stub_writev() for explanation */</div><div class='ctx'> int32_t</div><div class='del'>-br_stub_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   off_t offset, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        br_stub_local_t     *local       = NULL;</div><div class='del'>-        call_stub_t         *stub        = NULL;</div><div class='del'>-        int32_t              op_ret      = -1;</div><div class='del'>-        int32_t              op_errno    = EINVAL;</div><div class='del'>-        gf_boolean_t         inc_version = _gf_false;</div><div class='del'>-        gf_boolean_t         modified    = _gf_false;</div><div class='del'>-        br_stub_inode_ctx_t *ctx         = NULL;</div><div class='del'>-        int32_t              ret         = -1;</div><div class='del'>-        fop_ftruncate_cbk_t  cbk         = default_ftruncate_cbk;</div><div class='del'>-        br_stub_private_t   *priv        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, unwind);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_need_versioning (this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (!inc_version &amp;&amp; modified)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_versioning_prep (frame, this, fd, ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!inc_version) {</div><div class='del'>-                br_stub_fill_local (local, NULL, fd, fd-&gt;inode,</div><div class='del'>-                                    fd-&gt;inode-&gt;gfid, BR_STUB_NO_VERSIONING, 0);</div><div class='del'>-                cbk = br_stub_ftruncate_cbk;</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+br_stub_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                  dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    gf_boolean_t inc_version = _gf_false;</div><div class='add'>+    gf_boolean_t modified = _gf_false;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fop_ftruncate_cbk_t cbk = default_ftruncate_cbk;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, unwind);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_need_versioning(this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (!inc_version &amp;&amp; modified)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_versioning_prep(frame, this, fd, ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!inc_version) {</div><div class='add'>+        br_stub_fill_local(local, NULL, fd, fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='add'>+                           BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+        cbk = br_stub_ftruncate_cbk;</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stub = fop_ftruncate_stub(frame, br_stub_ftruncate_resume, fd, offset,</div><div class='add'>+                              xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='add'>+               "failed to allocate stub for ftruncate fop (gfid: %s),"</div><div class='add'>+               " unwinding",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto cleanup_local;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return br_stub_perform_incversioning(this, frame, stub, fd, ctx);</div><div class='ctx'> </div><div class='del'>-        stub = fop_ftruncate_stub (frame, br_stub_ftruncate_resume, fd, offset,</div><div class='del'>-                                   xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='del'>-                        "failed to allocate stub for ftruncate fop (gfid: %s),"</div><div class='del'>-                        " unwinding", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto cleanup_local;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return br_stub_perform_incversioning (this, frame, stub, fd, ctx);</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- cleanup_local:</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='add'>+cleanup_local:</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, NULL, NULL,</div><div class='del'>-                             NULL);</div><div class='add'>+unwind:</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+br_stub_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        br_stub_local_t *local = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_mark_inode_modified (this, local);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_mark_inode_modified(this, local);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_truncate_resume (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                          off_t offset, dict_t *xdata)</div><div class='add'>+br_stub_truncate_resume(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                        off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        br_stub_local_t *local = frame-&gt;local;</div><div class='add'>+    br_stub_local_t *local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        fd_unref (local-&gt;u.context.fd);</div><div class='del'>-        STACK_WIND (frame, br_stub_ftruncate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    fd_unref(local-&gt;u.context.fd);</div><div class='add'>+    STACK_WIND(frame, br_stub_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2248,97 +2218,96 @@ br_stub_truncate_resume (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='ctx'>  * c.f. br_writev_cbk() for explanation</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-br_stub_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  off_t offset, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        br_stub_local_t     *local       = NULL;</div><div class='del'>-        call_stub_t         *stub        = NULL;</div><div class='del'>-        int32_t              op_ret      = -1;</div><div class='del'>-        int32_t              op_errno    = EINVAL;</div><div class='del'>-        gf_boolean_t         inc_version = _gf_false;</div><div class='del'>-        gf_boolean_t         modified    = _gf_false;</div><div class='del'>-        br_stub_inode_ctx_t *ctx         = NULL;</div><div class='del'>-        int32_t              ret         = -1;</div><div class='del'>-        fd_t                *fd          = NULL;</div><div class='del'>-        fop_truncate_cbk_t   cbk         = default_truncate_cbk;</div><div class='del'>-        br_stub_private_t   *priv        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;inode, unwind);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        fd = fd_anonymous (loc-&gt;inode);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_CREATE_ANONYMOUS_FD_FAILED, "failed to create "</div><div class='del'>-                        "anonymous fd for the inode %s",</div><div class='del'>-                        uuid_utoa (loc-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = br_stub_need_versioning (this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_fd;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (!inc_version &amp;&amp; modified)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_versioning_prep (frame, this, fd, ctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_fd;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!inc_version) {</div><div class='del'>-                br_stub_fill_local (local, NULL, fd, fd-&gt;inode,</div><div class='del'>-                                    fd-&gt;inode-&gt;gfid, BR_STUB_NO_VERSIONING, 0);</div><div class='del'>-                cbk = br_stub_truncate_cbk;</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        stub = fop_truncate_stub (frame, br_stub_truncate_resume, loc, offset,</div><div class='del'>-                                  xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='del'>-                        "failed to allocate stub for truncate fop (gfid: %s), "</div><div class='del'>-                        "unwinding", uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto cleanup_local;</div><div class='del'>-        }</div><div class='add'>+br_stub_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    gf_boolean_t inc_version = _gf_false;</div><div class='add'>+    gf_boolean_t modified = _gf_false;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    fop_truncate_cbk_t cbk = default_truncate_cbk;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;inode, unwind);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    fd = fd_anonymous(loc-&gt;inode);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_CREATE_ANONYMOUS_FD_FAILED,</div><div class='add'>+               "failed to create "</div><div class='add'>+               "anonymous fd for the inode %s",</div><div class='add'>+               uuid_utoa(loc-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = br_stub_need_versioning(this, fd, &amp;inc_version, &amp;modified, &amp;ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_fd;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (!inc_version &amp;&amp; modified)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_versioning_prep(frame, this, fd, ctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_fd;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!inc_version) {</div><div class='add'>+        br_stub_fill_local(local, NULL, fd, fd-&gt;inode, fd-&gt;inode-&gt;gfid,</div><div class='add'>+                           BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+        cbk = br_stub_truncate_cbk;</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stub = fop_truncate_stub(frame, br_stub_truncate_resume, loc, offset,</div><div class='add'>+                             xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_STUB_ALLOC_FAILED,</div><div class='add'>+               "failed to allocate stub for truncate fop (gfid: %s), "</div><div class='add'>+               "unwinding",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto cleanup_local;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return br_stub_perform_incversioning (this, frame, stub, fd, ctx);</div><div class='add'>+    return br_stub_perform_incversioning(this, frame, stub, fd, ctx);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- cleanup_local:</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='del'>- cleanup_fd:</div><div class='del'>-        fd_unref (fd);</div><div class='del'>- unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, NULL, NULL,</div><div class='del'>-                             NULL);</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, cbk, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='add'>+               loc, offset, xdata);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_local:</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='add'>+cleanup_fd:</div><div class='add'>+    fd_unref(fd);</div><div class='add'>+unwind:</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /** {{{ */</div><div class='ctx'> </div><div class='ctx'> /* open() */</div><div class='hunk'>@@ -2358,76 +2327,73 @@ br_stub_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_open (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret      = -1;</div><div class='del'>-        br_stub_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        uint64_t             ctx_addr = 0;</div><div class='del'>-        int32_t              op_ret   = -1;</div><div class='del'>-        int32_t              op_errno = EINVAL;</div><div class='del'>-        br_stub_private_t   *priv     = NULL;</div><div class='del'>-        unsigned long        version  = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd-&gt;inode, unwind);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, fd-&gt;inode, &amp;ctx_addr);</div><div class='add'>+br_stub_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+             fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    unsigned long version = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd-&gt;inode, unwind);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, fd-&gt;inode, &amp;ctx_addr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = br_stub_init_inode_versions(this, fd, fd-&gt;inode, version,</div><div class='add'>+                                          _gf_true, _gf_false, &amp;ctx_addr);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                ret = br_stub_init_inode_versions (this, fd, fd-&gt;inode, version,</div><div class='del'>-                                                   _gf_true, _gf_false,</div><div class='del'>-                                                   &amp;ctx_addr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='del'>-                                "failed to init the inode context for "</div><div class='del'>-                                "the file %s (gfid: %s)", loc-&gt;path,</div><div class='del'>-                                uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='add'>+                   "failed to init the inode context for "</div><div class='add'>+                   "the file %s (gfid: %s)",</div><div class='add'>+                   loc-&gt;path, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_SCRUB)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_SCRUB)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        if (flags == O_RDONLY)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (flags == O_RDONLY)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_add_fd_to_inode (this, fd, ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_ADD_FD_TO_LIST_FAILED,</div><div class='del'>-                        "failed add fd to the list (gfid: %s)",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_add_fd_to_inode(this, fd, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_ADD_FD_TO_LIST_FAILED,</div><div class='add'>+               "failed add fd to the list (gfid: %s)",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, default_open_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /** {{{ */</div><div class='ctx'> </div><div class='ctx'> /* creat() */</div><div class='hunk'>@@ -2437,143 +2403,139 @@ unwind:</div><div class='ctx'>  * fd to the inode context fd tracking list.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-br_stub_add_fd_to_inode (xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx)</div><div class='add'>+br_stub_add_fd_to_inode(xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t       ret        = -1;</div><div class='del'>-        br_stub_fd_t *br_stub_fd = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_require_release_call (this, fd, &amp;br_stub_fd);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        BRS_MSG_SET_FD_CONTEXT_FAILED, "failed to set the fd "</div><div class='del'>-                        "context for the file (gfid: %s)",</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_require_release_call(this, fd, &amp;br_stub_fd);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_SET_FD_CONTEXT_FAILED,</div><div class='add'>+               "failed to set the fd "</div><div class='add'>+               "context for the file (gfid: %s)",</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;ctx-&gt;fd_list, &amp;br_stub_fd-&gt;list);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;ctx-&gt;fd_list, &amp;br_stub_fd-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-                    struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret      = 0;</div><div class='del'>-        uint64_t             ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        unsigned long        version  = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-        br_stub_private_t   *priv     = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, fd-&gt;inode, &amp;ctx_addr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = br_stub_init_inode_versions (this, fd, inode, version,</div><div class='del'>-                                                   _gf_true, _gf_false,</div><div class='del'>-                                                   &amp;ctx_addr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='del'>-                ret = br_stub_add_fd_to_inode (this, fd, ctx);</div><div class='add'>+br_stub_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                   struct iatt *stbuf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    unsigned long version = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, fd-&gt;inode, &amp;ctx_addr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = br_stub_init_inode_versions(this, fd, inode, version, _gf_true,</div><div class='add'>+                                          _gf_false, &amp;ctx_addr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EINVAL;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+        ret = br_stub_add_fd_to_inode(this, fd, ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno,</div><div class='del'>-                             fd, inode, stbuf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, stbuf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_create (call_frame_t *frame,</div><div class='del'>-                xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-                mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;inode, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd-&gt;inode, unwind);</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, br_stub_create_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+br_stub_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+               mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;inode, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd-&gt;inode, unwind);</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, br_stub_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, -1, EINVAL, NULL, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, -1, EINVAL, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret      = -1;</div><div class='del'>-        unsigned long        version  = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-        br_stub_private_t   *priv     = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_init_inode_versions (this, NULL, inode, version,</div><div class='del'>-                                           _gf_true, _gf_false, NULL);</div><div class='del'>-        /**</div><div class='del'>-         * Like lookup, if init_inode_versions fail, return EINVAL</div><div class='del'>-         */</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-        }</div><div class='add'>+br_stub_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                  struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    unsigned long version = BITROT_DEFAULT_CURRENT_VERSION;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_init_inode_versions(this, NULL, inode, version, _gf_true,</div><div class='add'>+                                      _gf_false, NULL);</div><div class='add'>+    /**</div><div class='add'>+     * Like lookup, if init_inode_versions fail, return EINVAL</div><div class='add'>+     */</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno,</div><div class='del'>-                             inode, stbuf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(mknod, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_mknod (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, mode_t mode, dev_t dev, mode_t umask, dict_t *xdata)</div><div class='add'>+br_stub_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+              dev_t dev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;inode, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;inode, unwind);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, br_stub_mknod_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, dev, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, br_stub_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, dev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (mknod, frame, -1, EINVAL, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(mknod, frame, -1, EINVAL, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='hunk'>@@ -2603,226 +2565,225 @@ unwind:</div><div class='ctx'>  * creattion failure as the lookup failure.</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-br_stub_lookup_version (xlator_t *this,</div><div class='del'>-                        uuid_t gfid, inode_t *inode, dict_t *xattr)</div><div class='del'>-{</div><div class='del'>-        unsigned long       version = 0;</div><div class='del'>-        br_version_t       *obuf    = NULL;</div><div class='del'>-        br_signature_t     *sbuf    = NULL;</div><div class='del'>-        br_vxattr_status_t  status;</div><div class='del'>-        gf_boolean_t        bad_object = _gf_false;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * versioning xattrs were requested from POSIX. if available, figure</div><div class='del'>-         * out the correct version to use in the inode context (start with</div><div class='del'>-         * the default version if unavailable). As of now versions are not</div><div class='del'>-         * persisted on-disk. The inode is marked dirty, so that the first</div><div class='del'>-         * operation (such as write(), etc..) triggers synchronization to</div><div class='del'>-         * disk.</div><div class='del'>-         */</div><div class='del'>-        status = br_version_xattr_state (xattr, &amp;obuf, &amp;sbuf, &amp;bad_object);</div><div class='del'>-        version = ((status == BR_VXATTR_STATUS_FULL)</div><div class='del'>-                   || (status == BR_VXATTR_STATUS_UNSIGNED))</div><div class='del'>-                        ? obuf-&gt;ongoingversion : BITROT_DEFAULT_CURRENT_VERSION;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * If signature is there, but version is not there then that status is</div><div class='del'>-         * is treated as INVALID. So in that case, we should not initialize the</div><div class='del'>-         * inode context with wrong version names etc.</div><div class='del'>-         */</div><div class='del'>-        if (status == BR_VXATTR_STATUS_INVALID)</div><div class='del'>-                return -1;</div><div class='add'>+br_stub_lookup_version(xlator_t *this, uuid_t gfid, inode_t *inode,</div><div class='add'>+                       dict_t *xattr)</div><div class='add'>+{</div><div class='add'>+    unsigned long version = 0;</div><div class='add'>+    br_version_t *obuf = NULL;</div><div class='add'>+    br_signature_t *sbuf = NULL;</div><div class='add'>+    br_vxattr_status_t status;</div><div class='add'>+    gf_boolean_t bad_object = _gf_false;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * versioning xattrs were requested from POSIX. if available, figure</div><div class='add'>+     * out the correct version to use in the inode context (start with</div><div class='add'>+     * the default version if unavailable). As of now versions are not</div><div class='add'>+     * persisted on-disk. The inode is marked dirty, so that the first</div><div class='add'>+     * operation (such as write(), etc..) triggers synchronization to</div><div class='add'>+     * disk.</div><div class='add'>+     */</div><div class='add'>+    status = br_version_xattr_state(xattr, &amp;obuf, &amp;sbuf, &amp;bad_object);</div><div class='add'>+    version = ((status == BR_VXATTR_STATUS_FULL) ||</div><div class='add'>+               (status == BR_VXATTR_STATUS_UNSIGNED))</div><div class='add'>+                  ? obuf-&gt;ongoingversion</div><div class='add'>+                  : BITROT_DEFAULT_CURRENT_VERSION;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * If signature is there, but version is not there then that status is</div><div class='add'>+     * is treated as INVALID. So in that case, we should not initialize the</div><div class='add'>+     * inode context with wrong version names etc.</div><div class='add'>+     */</div><div class='add'>+    if (status == BR_VXATTR_STATUS_INVALID)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        return br_stub_init_inode_versions (this, NULL, inode, version,</div><div class='del'>-                                            _gf_true, bad_object, NULL);</div><div class='add'>+    return br_stub_init_inode_versions(this, NULL, inode, version, _gf_true,</div><div class='add'>+                                       bad_object, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /** {{{ */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_opendir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        br_stub_private_t    *priv = NULL;</div><div class='del'>-        br_stub_fd_t         *fd_ctx = NULL;</div><div class='del'>-        int32_t               op_ret = -1;</div><div class='del'>-        int32_t               op_errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (gf_uuid_compare (fd-&gt;inode-&gt;gfid, priv-&gt;bad_object_dir_gfid))</div><div class='del'>-                goto normal;</div><div class='del'>-</div><div class='del'>-        fd_ctx = br_stub_fd_new ();</div><div class='del'>-        if (!fd_ctx) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+br_stub_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    br_stub_fd_t *fd_ctx = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        fd_ctx-&gt;bad_object.dir_eof = -1;</div><div class='del'>-        fd_ctx-&gt;bad_object.dir = sys_opendir (priv-&gt;stub_basepath);</div><div class='del'>-        if (!fd_ctx-&gt;bad_object.dir) {</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                goto err_freectx;</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (gf_uuid_compare(fd-&gt;inode-&gt;gfid, priv-&gt;bad_object_dir_gfid))</div><div class='add'>+        goto normal;</div><div class='add'>+</div><div class='add'>+    fd_ctx = br_stub_fd_new();</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_ctx-&gt;bad_object.dir_eof = -1;</div><div class='add'>+    fd_ctx-&gt;bad_object.dir = sys_opendir(priv-&gt;stub_basepath);</div><div class='add'>+    if (!fd_ctx-&gt;bad_object.dir) {</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        goto err_freectx;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        op_ret = br_stub_fd_ctx_set (this, fd, fd_ctx);</div><div class='del'>-        if (!op_ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    op_ret = br_stub_fd_ctx_set(this, fd, fd_ctx);</div><div class='add'>+    if (!op_ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        sys_closedir (fd_ctx-&gt;bad_object.dir);</div><div class='add'>+    sys_closedir(fd_ctx-&gt;bad_object.dir);</div><div class='ctx'> </div><div class='ctx'> err_freectx:</div><div class='del'>-        GF_FREE (fd_ctx);</div><div class='add'>+    GF_FREE(fd_ctx);</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (opendir, frame, op_ret, op_errno, fd, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(opendir, frame, op_ret, op_errno, fd, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> normal:</div><div class='del'>-        STACK_WIND (frame, default_opendir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_readdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        call_stub_t     *stub = NULL;</div><div class='del'>-        br_stub_private_t    *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (gf_uuid_compare (fd-&gt;inode-&gt;gfid, priv-&gt;bad_object_dir_gfid))</div><div class='del'>-                goto out;</div><div class='del'>-        stub = fop_readdir_stub (frame, br_stub_readdir_wrapper, fd, size, off,</div><div class='del'>-                                 xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                STACK_UNWIND_STRICT (readdir, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        br_stub_worker_enqueue (this, stub);</div><div class='del'>-        return 0;</div><div class='add'>+br_stub_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                off_t off, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (gf_uuid_compare(fd-&gt;inode-&gt;gfid, priv-&gt;bad_object_dir_gfid))</div><div class='add'>+        goto out;</div><div class='add'>+    stub = fop_readdir_stub(frame, br_stub_readdir_wrapper, fd, size, off,</div><div class='add'>+                            xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        STACK_UNWIND_STRICT(readdir, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    br_stub_worker_enqueue(this, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, default_readdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, off, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_readdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='del'>-                      dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        int32_t            ret     = 0;</div><div class='del'>-        uint64_t           ctxaddr = 0;</div><div class='del'>-        gf_dirent_t       *entry   = NULL;</div><div class='del'>-        br_stub_private_t *priv    = NULL;</div><div class='del'>-        gf_boolean_t       ver_enabled = _gf_false;</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_ENABLED_IN_CALLPATH (frame, ver_enabled);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        BR_STUB_VER_COND_GOTO (priv, (!ver_enabled), unwind);</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                if ((strcmp (entry-&gt;d_name, ".") == 0)</div><div class='del'>-                    || (strcmp (entry-&gt;d_name, "..") == 0))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                if (!IA_ISREG (entry-&gt;d_stat.ia_type))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                ret = br_stub_get_inode_ctx (this, entry-&gt;inode, &amp;ctxaddr);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        ctxaddr = 0;</div><div class='del'>-                if (ctxaddr) { /* already has the context */</div><div class='del'>-                        br_stub_remove_vxattrs (entry-&gt;dict);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = br_stub_lookup_version</div><div class='del'>-                        (this, entry-&gt;inode-&gt;gfid, entry-&gt;inode, entry-&gt;dict);</div><div class='del'>-                br_stub_remove_vxattrs (entry-&gt;dict);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        /**</div><div class='del'>-                         * there's no per-file granularity support in case of</div><div class='del'>-                         * failure. let's fail the entire request for now..</div><div class='del'>-                         */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+br_stub_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='add'>+                     dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint64_t ctxaddr = 0;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t ver_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    BR_STUB_VER_COND_GOTO(priv, (!ver_enabled), unwind);</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if ((strcmp(entry-&gt;d_name, ".") == 0) ||</div><div class='add'>+            (strcmp(entry-&gt;d_name, "..") == 0))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (!IA_ISREG(entry-&gt;d_stat.ia_type))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        ret = br_stub_get_inode_ctx(this, entry-&gt;inode, &amp;ctxaddr);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            ctxaddr = 0;</div><div class='add'>+        if (ctxaddr) { /* already has the context */</div><div class='add'>+            br_stub_remove_vxattrs(entry-&gt;dict);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ret = br_stub_lookup_version(this, entry-&gt;inode-&gt;gfid, entry-&gt;inode,</div><div class='add'>+                                     entry-&gt;dict);</div><div class='add'>+        br_stub_remove_vxattrs(entry-&gt;dict);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='add'>+            /**</div><div class='add'>+             * there's no per-file granularity support in case of</div><div class='add'>+             * failure. let's fail the entire request for now..</div><div class='add'>+             */</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries, dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, dict);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_readdirp (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  fd_t *fd, size_t size, off_t offset, dict_t *dict)</div><div class='add'>+br_stub_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                 off_t offset, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret      = -1;</div><div class='del'>-        int                op_errno = 0;</div><div class='del'>-        gf_boolean_t       xref     = _gf_false;</div><div class='del'>-        br_stub_private_t *priv     = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    gf_boolean_t xref = _gf_false;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        BR_STUB_VER_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        op_errno = ENOMEM;</div><div class='del'>-        if (!dict) {</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (!dict)</div><div class='del'>-                        goto unwind;</div><div class='del'>-        } else {</div><div class='del'>-                dict = dict_ref (dict);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        xref = _gf_true;</div><div class='del'>-</div><div class='del'>-        op_errno = EINVAL;</div><div class='del'>-        ret = dict_set_uint32 (dict, BITROT_CURRENT_VERSION_KEY, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-        ret = dict_set_uint32 (dict, BITROT_SIGNING_VERSION_KEY, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-        ret = dict_set_uint32 (dict, BITROT_OBJECT_BAD_KEY, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    op_errno = ENOMEM;</div><div class='add'>+    if (!dict) {</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (!dict)</div><div class='add'>+            goto unwind;</div><div class='add'>+    } else {</div><div class='add'>+        dict = dict_ref(dict);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xref = _gf_true;</div><div class='add'>+</div><div class='add'>+    op_errno = EINVAL;</div><div class='add'>+    ret = dict_set_uint32(dict, BITROT_CURRENT_VERSION_KEY, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+    ret = dict_set_uint32(dict, BITROT_SIGNING_VERSION_KEY, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+    ret = dict_set_uint32(dict, BITROT_OBJECT_BAD_KEY, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, br_stub_readdirp_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size,</div><div class='del'>-                    offset, dict);</div><div class='del'>-        goto unref_dict;</div><div class='add'>+    STACK_WIND(frame, br_stub_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, dict);</div><div class='add'>+    goto unref_dict;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        if (frame-&gt;local == (void *)0x1)</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    if (frame-&gt;local == (void *)0x1)</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unref_dict:</div><div class='del'>-        if (xref)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return 0;</div><div class='add'>+    if (xref)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /** {{{ */</div><div class='ctx'> </div><div class='ctx'> /* lookup() */</div><div class='hunk'>@@ -2836,203 +2797,198 @@ unref_dict:</div><div class='ctx'>  * either forget () or lookup () will take care of removing the link.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-br_stub_handle_lookup_error (xlator_t *this, inode_t *inode, int32_t op_errno)</div><div class='add'>+br_stub_handle_lookup_error(xlator_t *this, inode_t *inode, int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-        int32_t     ret = -1;</div><div class='del'>-        uint64_t   ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_errno != ENOENT)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_errno != ENOENT)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!inode_is_linked (inode))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!inode_is_linked(inode))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_get_inode_ctx (this, inode, &amp;ctx_addr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, inode, &amp;ctx_addr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (__br_stub_is_bad_object (ctx))</div><div class='del'>-                        (void) br_stub_del (this, inode-&gt;gfid);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (__br_stub_is_bad_object (ctx)) {</div><div class='del'>-                /* File is not present, might be deleted for recovery,</div><div class='del'>-                 * del the bitrot inode context</div><div class='del'>-                 */</div><div class='del'>-                ctx_addr = 0;</div><div class='del'>-                inode_ctx_del (inode, this, &amp;ctx_addr);</div><div class='del'>-                if (ctx_addr) {</div><div class='del'>-                        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='del'>-                        GF_FREE (ctx);</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (__br_stub_is_bad_object(ctx))</div><div class='add'>+            (void)br_stub_del(this, inode-&gt;gfid);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (__br_stub_is_bad_object(ctx)) {</div><div class='add'>+        /* File is not present, might be deleted for recovery,</div><div class='add'>+         * del the bitrot inode context</div><div class='add'>+         */</div><div class='add'>+        ctx_addr = 0;</div><div class='add'>+        inode_ctx_del(inode, this, &amp;ctx_addr);</div><div class='add'>+        if (ctx_addr) {</div><div class='add'>+            ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+            GF_FREE(ctx);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_lookup_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-                    xlator_t *this, int op_ret, int op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *stbuf, dict_t *xattr, struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='del'>-        gf_boolean_t  ver_enabled = _gf_false;</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                (void) br_stub_handle_lookup_error (this, inode, op_errno);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_COND_GOTO (priv, (!ver_enabled), delkey);</div><div class='del'>-</div><div class='del'>-        if (!IA_ISREG (stbuf-&gt;ia_type))</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * If the object is bad, then "bad inode" marker has to be sent back</div><div class='del'>-         * in resoinse, for revalidated lookups as well. Some xlators such as</div><div class='del'>-         * quick-read might cache the data in revalidated lookup as fresh</div><div class='del'>-         * lookup would anyway have sent "bad inode" marker.</div><div class='del'>-         * In general send bad inode marker for every lookup operation on the</div><div class='del'>-         * bad object.</div><div class='del'>-         */</div><div class='del'>-        if (cookie != (void *) BR_STUB_REQUEST_COOKIE) {</div><div class='del'>-                ret =  br_stub_mark_xdata_bad_object (this, inode, xattr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = EIO;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                goto delkey;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = br_stub_lookup_version (this, stbuf-&gt;ia_gfid, inode, xattr);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto delkey;</div><div class='add'>+br_stub_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                   dict_t *xattr, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t ver_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        (void)br_stub_handle_lookup_error(this, inode, op_errno);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_COND_GOTO(priv, (!ver_enabled), delkey);</div><div class='add'>+</div><div class='add'>+    if (!IA_ISREG(stbuf-&gt;ia_type))</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * If the object is bad, then "bad inode" marker has to be sent back</div><div class='add'>+     * in resoinse, for revalidated lookups as well. Some xlators such as</div><div class='add'>+     * quick-read might cache the data in revalidated lookup as fresh</div><div class='add'>+     * lookup would anyway have sent "bad inode" marker.</div><div class='add'>+     * In general send bad inode marker for every lookup operation on the</div><div class='add'>+     * bad object.</div><div class='add'>+     */</div><div class='add'>+    if (cookie != (void *)BR_STUB_REQUEST_COOKIE) {</div><div class='add'>+        ret = br_stub_mark_xdata_bad_object(this, inode, xattr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = EIO;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='add'>+        goto delkey;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = br_stub_lookup_version(this, stbuf-&gt;ia_gfid, inode, xattr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto delkey;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * If the object is bad, send "bad inode" marker back in response</div><div class='add'>+     * for xlator(s) to act accordingly (such as quick-read, etc..)</div><div class='add'>+     */</div><div class='add'>+    ret = br_stub_mark_xdata_bad_object(this, inode, xattr);</div><div class='add'>+    if (ret) {</div><div class='ctx'>         /**</div><div class='del'>-         * If the object is bad, send "bad inode" marker back in response</div><div class='del'>-         * for xlator(s) to act accordingly (such as quick-read, etc..)</div><div class='add'>+         * aaha! bad object, but sorry we would not</div><div class='add'>+         * satisfy the request on allocation failures.</div><div class='ctx'>          */</div><div class='del'>-        ret = br_stub_mark_xdata_bad_object (this, inode, xattr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /**</div><div class='del'>-                 * aaha! bad object, but sorry we would not</div><div class='del'>-                 * satisfy the request on allocation failures.</div><div class='del'>-                 */</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EIO;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EIO;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> delkey:</div><div class='del'>-        br_stub_remove_vxattrs (xattr);</div><div class='add'>+    br_stub_remove_vxattrs(xattr);</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame,</div><div class='del'>-                             op_ret, op_errno, inode, stbuf, xattr, postparent);</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, stbuf, xattr,</div><div class='add'>+                        postparent);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_lookup (call_frame_t *frame,</div><div class='del'>-                xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        void *cookie = NULL;</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-        gf_boolean_t xref = _gf_false;</div><div class='del'>-        br_stub_private_t *priv = NULL;</div><div class='del'>-        call_stub_t       *stub = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, unwind);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;inode, unwind);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        BR_STUB_VER_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        if (!gf_uuid_compare (loc-&gt;gfid, priv-&gt;bad_object_dir_gfid) ||</div><div class='del'>-            !gf_uuid_compare (loc-&gt;pargfid, priv-&gt;bad_object_dir_gfid)) {</div><div class='del'>-</div><div class='del'>-                stub = fop_lookup_stub (frame, br_stub_lookup_wrapper, loc,</div><div class='del'>-                                        xdata);</div><div class='del'>-                if (!stub) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                br_stub_worker_enqueue (this, stub);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+br_stub_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    void *cookie = NULL;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    gf_boolean_t xref = _gf_false;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_get_inode_ctx (this, loc-&gt;inode, &amp;ctx_addr);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                ctx_addr = 0;</div><div class='del'>-        if (ctx_addr != 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    GF_VALIDATE_OR_GOTO("bit-rot-stub", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;inode, unwind);</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * fresh lookup: request version keys from POSIX</div><div class='del'>-         */</div><div class='del'>-        op_errno = ENOMEM;</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-                if (!xdata)</div><div class='del'>-                        goto unwind;</div><div class='del'>-        } else {</div><div class='del'>-                xdata = dict_ref (xdata);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    if (!gf_uuid_compare(loc-&gt;gfid, priv-&gt;bad_object_dir_gfid) ||</div><div class='add'>+        !gf_uuid_compare(loc-&gt;pargfid, priv-&gt;bad_object_dir_gfid)) {</div><div class='add'>+        stub = fop_lookup_stub(frame, br_stub_lookup_wrapper, loc, xdata);</div><div class='add'>+        if (!stub) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='add'>+        br_stub_worker_enqueue(this, stub);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        xref = _gf_true;</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, loc-&gt;inode, &amp;ctx_addr);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        ctx_addr = 0;</div><div class='add'>+    if (ctx_addr != 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * Requesting both xattrs provides a way of sanity checking the</div><div class='del'>-         * object. Anomaly checking is done in cbk by examining absence</div><div class='del'>-         * of either or both xattrs.</div><div class='del'>-         */</div><div class='del'>-        op_errno = EINVAL;</div><div class='del'>-        ret = dict_set_uint32 (xdata, BITROT_CURRENT_VERSION_KEY, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-        ret = dict_set_uint32 (xdata, BITROT_SIGNING_VERSION_KEY, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-        ret = dict_set_uint32 (xdata, BITROT_OBJECT_BAD_KEY, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-        cookie = (void *) BR_STUB_REQUEST_COOKIE;</div><div class='add'>+    /**</div><div class='add'>+     * fresh lookup: request version keys from POSIX</div><div class='add'>+     */</div><div class='add'>+    op_errno = ENOMEM;</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+        if (!xdata)</div><div class='add'>+            goto unwind;</div><div class='add'>+    } else {</div><div class='add'>+        xdata = dict_ref(xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    xref = _gf_true;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Requesting both xattrs provides a way of sanity checking the</div><div class='add'>+     * object. Anomaly checking is done in cbk by examining absence</div><div class='add'>+     * of either or both xattrs.</div><div class='add'>+     */</div><div class='add'>+    op_errno = EINVAL;</div><div class='add'>+    ret = dict_set_uint32(xdata, BITROT_CURRENT_VERSION_KEY, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+    ret = dict_set_uint32(xdata, BITROT_SIGNING_VERSION_KEY, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+    ret = dict_set_uint32(xdata, BITROT_OBJECT_BAD_KEY, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+    cookie = (void *)BR_STUB_REQUEST_COOKIE;</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND_COOKIE (frame, br_stub_lookup_cbk, cookie,</div><div class='del'>-                           FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-                           loc, xdata);</div><div class='del'>-        goto dealloc_dict;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND_COOKIE(frame, br_stub_lookup_cbk, cookie, FIRST_CHILD(this),</div><div class='add'>+                      FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    goto dealloc_dict;</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        if (frame-&gt;local == (void *) 0x1)</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame,</div><div class='del'>-                             -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='del'>- dealloc_dict:</div><div class='del'>-        if (xref)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    if (frame-&gt;local == (void *)0x1)</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);</div><div class='add'>+dealloc_dict:</div><div class='add'>+    if (xref)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='hunk'>@@ -3041,64 +2997,64 @@ br_stub_lookup (call_frame_t *frame,</div><div class='ctx'> </div><div class='ctx'> /* stat */</div><div class='ctx'> int</div><div class='del'>-br_stub_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+br_stub_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret      = 0;</div><div class='del'>-        int32_t            op_ret   = -1;</div><div class='del'>-        int32_t            op_errno = EINVAL;</div><div class='del'>-        br_stub_private_t *priv     = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        if (!IA_ISREG (loc-&gt;inode-&gt;ia_type))</div><div class='del'>-                goto wind;</div><div class='add'>+    if (!IA_ISREG(loc-&gt;inode-&gt;ia_type))</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_check_bad_object (this, loc-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = br_stub_check_bad_object(this, loc-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;stat,</div><div class='add'>+                    loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (stat, frame, op_ret, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(stat, frame, op_ret, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* fstat */</div><div class='ctx'> int</div><div class='del'>-br_stub_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+br_stub_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret      = 0;</div><div class='del'>-        int32_t            op_ret   = -1;</div><div class='del'>-        int32_t            op_errno = EINVAL;</div><div class='del'>-        br_stub_private_t *priv     = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;do_versioning)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (!priv-&gt;do_versioning)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        if (!IA_ISREG (fd-&gt;inode-&gt;ia_type))</div><div class='del'>-                goto wind;</div><div class='add'>+    if (!IA_ISREG(fd-&gt;inode-&gt;ia_type))</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_check_bad_object (this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto unwind;</div><div class='add'>+    ret = br_stub_check_bad_object(this, fd-&gt;inode, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='add'>+                    fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fstat, frame, op_ret, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fstat, frame, op_ret, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='hunk'>@@ -3108,114 +3064,111 @@ unwind:</div><div class='ctx'> /* unlink() */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+br_stub_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='ctx'>                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        br_stub_local_t     *local    = NULL;</div><div class='del'>-        inode_t             *inode    = NULL;</div><div class='del'>-        uint64_t             ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx      = NULL;</div><div class='del'>-        int32_t              ret      = -1;</div><div class='del'>-        br_stub_private_t   *priv     = NULL;</div><div class='del'>-        gf_boolean_t         ver_enabled = _gf_false;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t ver_enabled = _gf_false;</div><div class='ctx'> </div><div class='del'>-        BR_STUB_VER_ENABLED_IN_CALLPATH (frame, ver_enabled);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        BR_STUB_VER_COND_GOTO (priv, (!ver_enabled), unwind);</div><div class='add'>+    BR_STUB_VER_ENABLED_IN_CALLPATH(frame, ver_enabled);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    BR_STUB_VER_COND_GOTO(priv, (!ver_enabled), unwind);</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        inode = local-&gt;u.context.inode;</div><div class='del'>-        if (!IA_ISREG (inode-&gt;ia_type))</div><div class='del'>-           goto unwind;</div><div class='add'>+    inode = local-&gt;u.context.inode;</div><div class='add'>+    if (!IA_ISREG(inode-&gt;ia_type))</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        ret = br_stub_get_inode_ctx (this, inode, &amp;ctx_addr);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /**</div><div class='del'>-                 * If the inode is bad AND context is not there, then there</div><div class='del'>-                 * is a possibility of the gfid of the object being listed</div><div class='del'>-                 * in the quarantine directory and will be shown in the</div><div class='del'>-                 * bad objects list. So continuing with the fop with a</div><div class='del'>-                 * warning log. The entry from the quarantine directory</div><div class='del'>-                 * has to be removed manually. Its not a good idea to fail</div><div class='del'>-                 * the fop, as the object has already been deleted.</div><div class='del'>-                 */</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='del'>-                        "failed to get the context for the inode %s",</div><div class='del'>-                        uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, inode, &amp;ctx_addr);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /**</div><div class='add'>+         * If the inode is bad AND context is not there, then there</div><div class='add'>+         * is a possibility of the gfid of the object being listed</div><div class='add'>+         * in the quarantine directory and will be shown in the</div><div class='add'>+         * bad objects list. So continuing with the fop with a</div><div class='add'>+         * warning log. The entry from the quarantine directory</div><div class='add'>+         * has to be removed manually. Its not a good idea to fail</div><div class='add'>+         * the fop, as the object has already been deleted.</div><div class='add'>+         */</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_GET_INODE_CONTEXT_FAILED,</div><div class='add'>+               "failed to get the context for the inode %s",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                /**</div><div class='del'>-                 * Ignoring the return value of br_stub_del ().</div><div class='del'>-                 * There is not much that can be done if unlinking</div><div class='del'>-                 * of the entry in the quarantine directory fails.</div><div class='del'>-                 * The failure is logged.</div><div class='del'>-                 */</div><div class='del'>-                if (__br_stub_is_bad_object (ctx))</div><div class='del'>-                        (void) br_stub_del (this, inode-&gt;gfid);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /**</div><div class='add'>+         * Ignoring the return value of br_stub_del ().</div><div class='add'>+         * There is not much that can be done if unlinking</div><div class='add'>+         * of the entry in the quarantine directory fails.</div><div class='add'>+         * The failure is logged.</div><div class='add'>+         */</div><div class='add'>+        if (__br_stub_is_bad_object(ctx))</div><div class='add'>+            (void)br_stub_del(this, inode-&gt;gfid);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='del'>-        br_stub_cleanup_local (local);</div><div class='del'>-        br_stub_dealloc_local (local);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    br_stub_cleanup_local(local);</div><div class='add'>+    br_stub_dealloc_local(local);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+br_stub_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        br_stub_local_t   *local    = NULL;</div><div class='del'>-        int32_t            op_ret   = -1;</div><div class='del'>-        int32_t            op_errno = 0;</div><div class='del'>-        br_stub_private_t *priv     = NULL;</div><div class='add'>+    br_stub_local_t *local = NULL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    br_stub_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        BR_STUB_VER_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        local = br_stub_alloc_local (this);</div><div class='del'>-        if (!local) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, BRS_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to allocate memory for local (path: %s, gfid: %s)",</div><div class='del'>-                        loc-&gt;path, uuid_utoa (loc-&gt;inode-&gt;gfid));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    local = br_stub_alloc_local(this);</div><div class='add'>+    if (!local) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, BRS_MSG_NO_MEMORY,</div><div class='add'>+               "failed to allocate memory for local (path: %s, gfid: %s)",</div><div class='add'>+               loc-&gt;path, uuid_utoa(loc-&gt;inode-&gt;gfid));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        br_stub_fill_local (local, NULL, NULL, loc-&gt;inode,</div><div class='del'>-                            loc-&gt;inode-&gt;gfid,</div><div class='del'>-                            BR_STUB_NO_VERSIONING, 0);</div><div class='add'>+    br_stub_fill_local(local, NULL, NULL, loc-&gt;inode, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                       BR_STUB_NO_VERSIONING, 0);</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, br_stub_unlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;unlink, loc, flag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, br_stub_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, flag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        if (frame-&gt;local == (void *)0x1)</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    if (frame-&gt;local == (void *)0x1)</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /** }}} */</div><div class='ctx'> </div><div class='ctx'> /** {{{ */</div><div class='hunk'>@@ -3223,20 +3176,20 @@ unwind:</div><div class='ctx'> /* forget() */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-br_stub_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+br_stub_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        inode_ctx_del (inode, this, &amp;ctx_addr);</div><div class='del'>-        if (!ctx_addr)</div><div class='del'>-                return 0;</div><div class='add'>+    inode_ctx_del(inode, this, &amp;ctx_addr);</div><div class='add'>+    if (!ctx_addr)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ctx = (br_stub_inode_ctx_t *) (long) ctx_addr;</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    GF_FREE(ctx);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='hunk'>@@ -3244,60 +3197,60 @@ br_stub_forget (xlator_t *this, inode_t *inode)</div><div class='ctx'> /** {{{ */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_noop (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+br_stub_noop(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-br_stub_send_ipc_fop (xlator_t *this, fd_t *fd, unsigned long releaseversion,</div><div class='del'>-                      int sign_info)</div><div class='del'>-{</div><div class='del'>-        int32_t op = 0;</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        dict_t *xdata = NULL;</div><div class='del'>-        call_frame_t *frame = NULL;</div><div class='del'>-        changelog_event_t ev = {0,};</div><div class='del'>-</div><div class='del'>-        ev.ev_type = CHANGELOG_OP_TYPE_BR_RELEASE;</div><div class='del'>-        ev.u.releasebr.version = releaseversion;</div><div class='del'>-        ev.u.releasebr.sign_info = sign_info;</div><div class='del'>-        gf_uuid_copy (ev.u.releasebr.gfid, fd-&gt;inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM, BRS_MSG_NO_MEMORY,</div><div class='del'>-                        "dict allocation failed: cannot send IPC FOP "</div><div class='del'>-                        "to changelog");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_static_bin (xdata,</div><div class='del'>-                                   "RELEASE-EVENT", &amp;ev, CHANGELOG_EV_SIZE);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_SET_EVENT_FAILED,</div><div class='del'>-                        "cannot set release event in dict");</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-        }</div><div class='add'>+br_stub_send_ipc_fop(xlator_t *this, fd_t *fd, unsigned long releaseversion,</div><div class='add'>+                     int sign_info)</div><div class='add'>+{</div><div class='add'>+    int32_t op = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    changelog_event_t ev = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ev.ev_type = CHANGELOG_OP_TYPE_BR_RELEASE;</div><div class='add'>+    ev.u.releasebr.version = releaseversion;</div><div class='add'>+    ev.u.releasebr.sign_info = sign_info;</div><div class='add'>+    gf_uuid_copy(ev.u.releasebr.gfid, fd-&gt;inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, BRS_MSG_NO_MEMORY,</div><div class='add'>+               "dict allocation failed: cannot send IPC FOP "</div><div class='add'>+               "to changelog");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_static_bin(xdata, "RELEASE-EVENT", &amp;ev, CHANGELOG_EV_SIZE);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_SET_EVENT_FAILED,</div><div class='add'>+               "cannot set release event in dict");</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        BRS_MSG_CREATE_FRAME_FAILED,</div><div class='del'>-                        "create_frame() failure");</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-        }</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, BRS_MSG_CREATE_FRAME_FAILED,</div><div class='add'>+               "create_frame() failure");</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        op = GF_IPC_TARGET_CHANGELOG;</div><div class='del'>-        STACK_WIND (frame, br_stub_noop, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    op = GF_IPC_TARGET_CHANGELOG;</div><div class='add'>+    STACK_WIND(frame, br_stub_noop, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='ctx'> </div><div class='del'>- dealloc_dict:</div><div class='del'>-        dict_unref (xdata);</div><div class='del'>- out:</div><div class='del'>-        return;</div><div class='add'>+dealloc_dict:</div><div class='add'>+    dict_unref(xdata);</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -3321,115 +3274,113 @@ br_stub_send_ipc_fop (xlator_t *this, fd_t *fd, unsigned long releaseversion,</div><div class='ctx'>  *     set state = BR_SIGN_QUICK;</div><div class='ctx'>  */</div><div class='ctx'> br_sign_state_t</div><div class='del'>-__br_stub_inode_sign_state (br_stub_inode_ctx_t *ctx,</div><div class='del'>-                            glusterfs_fop_t fop, fd_t *fd)</div><div class='add'>+__br_stub_inode_sign_state(br_stub_inode_ctx_t *ctx, glusterfs_fop_t fop,</div><div class='add'>+                           fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        br_sign_state_t sign_info = BR_SIGN_INVALID;</div><div class='del'>-</div><div class='del'>-        switch (fop) {</div><div class='add'>+    br_sign_state_t sign_info = BR_SIGN_INVALID;</div><div class='ctx'> </div><div class='add'>+    switch (fop) {</div><div class='ctx'>         case GF_FOP_FSETXATTR:</div><div class='del'>-                sign_info = ctx-&gt;info_sign = BR_SIGN_QUICK;</div><div class='del'>-                break;</div><div class='add'>+            sign_info = ctx-&gt;info_sign = BR_SIGN_QUICK;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_RELEASE:</div><div class='del'>-                GF_ASSERT (ctx-&gt;info_sign != BR_SIGN_REOPEN_WAIT);</div><div class='add'>+            GF_ASSERT(ctx-&gt;info_sign != BR_SIGN_REOPEN_WAIT);</div><div class='ctx'> </div><div class='del'>-                if (ctx-&gt;info_sign == BR_SIGN_NORMAL) {</div><div class='del'>-                        sign_info = ctx-&gt;info_sign = BR_SIGN_REOPEN_WAIT;</div><div class='del'>-                } else {</div><div class='del'>-                        sign_info = ctx-&gt;info_sign;</div><div class='del'>-                        ctx-&gt;info_sign = BR_SIGN_NORMAL;</div><div class='del'>-                }</div><div class='add'>+            if (ctx-&gt;info_sign == BR_SIGN_NORMAL) {</div><div class='add'>+                sign_info = ctx-&gt;info_sign = BR_SIGN_REOPEN_WAIT;</div><div class='add'>+            } else {</div><div class='add'>+                sign_info = ctx-&gt;info_sign;</div><div class='add'>+                ctx-&gt;info_sign = BR_SIGN_NORMAL;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return sign_info;</div><div class='add'>+    return sign_info;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_release (xlator_t *this, fd_t *fd)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret            = 0;</div><div class='del'>-        int32_t              flags          = 0;</div><div class='del'>-        inode_t             *inode          = NULL;</div><div class='del'>-        unsigned long        releaseversion = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx            = NULL;</div><div class='del'>-        uint64_t             tmp            = 0;</div><div class='del'>-        br_stub_fd_t        *br_stub_fd     = NULL;</div><div class='del'>-        int32_t              signinfo       = 0;</div><div class='del'>-</div><div class='del'>-        inode = fd-&gt;inode;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx = __br_stub_get_ongoing_version_ctx (this, inode, NULL);</div><div class='del'>-                if (ctx == NULL)</div><div class='del'>-                        goto unblock;</div><div class='del'>-                br_stub_fd = br_stub_fd_ctx_get (this, fd);</div><div class='del'>-                if (br_stub_fd) {</div><div class='del'>-                        list_del_init (&amp;br_stub_fd-&gt;list);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = __br_stub_can_trigger_release</div><div class='del'>-                                    (inode, ctx, &amp;releaseversion);</div><div class='del'>-                if (!ret)</div><div class='del'>-                        goto unblock;</div><div class='del'>-</div><div class='del'>-                signinfo = __br_stub_inode_sign_state (ctx, GF_FOP_RELEASE, fd);</div><div class='del'>-                signinfo = htonl (signinfo);</div><div class='del'>-</div><div class='del'>-                /* inode back to initital state: mark dirty */</div><div class='del'>-                if (ctx-&gt;info_sign == BR_SIGN_NORMAL) {</div><div class='del'>-                        __br_stub_mark_inode_dirty (ctx);</div><div class='del'>-                        __br_stub_unset_inode_modified (ctx);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>- unblock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+br_stub_release(xlator_t *this, fd_t *fd)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t flags = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    unsigned long releaseversion = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t tmp = 0;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='add'>+    int32_t signinfo = 0;</div><div class='add'>+</div><div class='add'>+    inode = fd-&gt;inode;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx = __br_stub_get_ongoing_version_ctx(this, inode, NULL);</div><div class='add'>+        if (ctx == NULL)</div><div class='add'>+            goto unblock;</div><div class='add'>+        br_stub_fd = br_stub_fd_ctx_get(this, fd);</div><div class='add'>+        if (br_stub_fd) {</div><div class='add'>+            list_del_init(&amp;br_stub_fd-&gt;list);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = __br_stub_can_trigger_release(inode, ctx, &amp;releaseversion);</div><div class='add'>+        if (!ret)</div><div class='add'>+            goto unblock;</div><div class='add'>+</div><div class='add'>+        signinfo = __br_stub_inode_sign_state(ctx, GF_FOP_RELEASE, fd);</div><div class='add'>+        signinfo = htonl(signinfo);</div><div class='add'>+</div><div class='add'>+        /* inode back to initital state: mark dirty */</div><div class='add'>+        if (ctx-&gt;info_sign == BR_SIGN_NORMAL) {</div><div class='add'>+            __br_stub_mark_inode_dirty(ctx);</div><div class='add'>+            __br_stub_unset_inode_modified(ctx);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+unblock:</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "releaseversion: %lu | flags: %d "</div><div class='del'>-                              "| signinfo: %d",</div><div class='del'>-                              (unsigned long) ntohl (releaseversion), flags,</div><div class='del'>-                              ntohl(signinfo));</div><div class='del'>-                br_stub_send_ipc_fop (this, fd, releaseversion, signinfo);</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "releaseversion: %lu | flags: %d "</div><div class='add'>+                     "| signinfo: %d",</div><div class='add'>+                     (unsigned long)ntohl(releaseversion), flags,</div><div class='add'>+                     ntohl(signinfo));</div><div class='add'>+        br_stub_send_ipc_fop(this, fd, releaseversion, signinfo);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;tmp);</div><div class='del'>-        br_stub_fd = (br_stub_fd_t *)(long)tmp;</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;tmp);</div><div class='add'>+    br_stub_fd = (br_stub_fd_t *)(long)tmp;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (br_stub_fd);</div><div class='add'>+    GF_FREE(br_stub_fd);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-br_stub_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+br_stub_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        br_stub_fd_t   *fctx = NULL;</div><div class='del'>-        uint64_t        ctx  = 0;</div><div class='del'>-        int             ret  = 0;</div><div class='add'>+    br_stub_fd_t *fctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fctx = (br_stub_fd_t *) (long) ctx;</div><div class='del'>-        if (fctx-&gt;bad_object.dir) {</div><div class='del'>-                ret = sys_closedir (fctx-&gt;bad_object.dir);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                BRS_MSG_BAD_OBJ_DIR_CLOSE_FAIL,</div><div class='del'>-                                "closedir error: %s", strerror (errno));</div><div class='del'>-        }</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fctx = (br_stub_fd_t *)(long)ctx;</div><div class='add'>+    if (fctx-&gt;bad_object.dir) {</div><div class='add'>+        ret = sys_closedir(fctx-&gt;bad_object.dir);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, BRS_MSG_BAD_OBJ_DIR_CLOSE_FAIL,</div><div class='add'>+                   "closedir error: %s", strerror(errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (fctx);</div><div class='add'>+    GF_FREE(fctx);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='hunk'>@@ -3439,90 +3390,86 @@ out:</div><div class='ctx'> /* ictxmerge */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-br_stub_ictxmerge (xlator_t *this, fd_t *fd,</div><div class='del'>-                   inode_t *inode, inode_t *linked_inode)</div><div class='del'>-{</div><div class='del'>-        int32_t              ret        = 0;</div><div class='del'>-        uint64_t             ctxaddr    = 0;</div><div class='del'>-        uint64_t             lctxaddr   = 0;</div><div class='del'>-        br_stub_inode_ctx_t *ctx        = NULL;</div><div class='del'>-        br_stub_inode_ctx_t *lctx       = NULL;</div><div class='del'>-        br_stub_fd_t        *br_stub_fd = NULL;</div><div class='del'>-</div><div class='del'>-        ret = br_stub_get_inode_ctx (this, inode, &amp;ctxaddr);</div><div class='add'>+br_stub_ictxmerge(xlator_t *this, fd_t *fd, inode_t *inode,</div><div class='add'>+                  inode_t *linked_inode)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    uint64_t ctxaddr = 0;</div><div class='add'>+    uint64_t lctxaddr = 0;</div><div class='add'>+    br_stub_inode_ctx_t *ctx = NULL;</div><div class='add'>+    br_stub_inode_ctx_t *lctx = NULL;</div><div class='add'>+    br_stub_fd_t *br_stub_fd = NULL;</div><div class='add'>+</div><div class='add'>+    ret = br_stub_get_inode_ctx(this, inode, &amp;ctxaddr);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='add'>+    ctx = (br_stub_inode_ctx_t *)ctxaddr;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;linked_inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __br_stub_get_inode_ctx(this, linked_inode, &amp;lctxaddr);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='del'>-        ctx = (br_stub_inode_ctx_t *) ctxaddr;</div><div class='add'>+            goto unblock;</div><div class='add'>+        lctx = (br_stub_inode_ctx_t *)lctxaddr;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;linked_inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __br_stub_get_inode_ctx (this, linked_inode, &amp;lctxaddr);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto unblock;</div><div class='del'>-                lctx = (br_stub_inode_ctx_t *) lctxaddr;</div><div class='del'>-</div><div class='del'>-                GF_ASSERT (list_is_singular (&amp;ctx-&gt;fd_list));</div><div class='del'>-                br_stub_fd = list_first_entry (&amp;ctx-&gt;fd_list, br_stub_fd_t,</div><div class='del'>-                                               list);</div><div class='del'>-                if (br_stub_fd) {</div><div class='del'>-                        GF_ASSERT (br_stub_fd-&gt;fd == fd);</div><div class='del'>-                        list_move_tail (&amp;br_stub_fd-&gt;list, &amp;lctx-&gt;fd_list);</div><div class='del'>-                }</div><div class='add'>+        GF_ASSERT(list_is_singular(&amp;ctx-&gt;fd_list));</div><div class='add'>+        br_stub_fd = list_first_entry(&amp;ctx-&gt;fd_list, br_stub_fd_t, list);</div><div class='add'>+        if (br_stub_fd) {</div><div class='add'>+            GF_ASSERT(br_stub_fd-&gt;fd == fd);</div><div class='add'>+            list_move_tail(&amp;br_stub_fd-&gt;list, &amp;lctx-&gt;fd_list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unblock:</div><div class='del'>-        UNLOCK (&amp;linked_inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;linked_inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>- done:</div><div class='del'>-        return;</div><div class='add'>+done:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup    = br_stub_lookup,</div><div class='del'>-        .stat      = br_stub_stat,</div><div class='del'>-        .fstat     = br_stub_fstat,</div><div class='del'>-        .open      = br_stub_open,</div><div class='del'>-        .create    = br_stub_create,</div><div class='del'>-        .readdirp  = br_stub_readdirp,</div><div class='del'>-        .getxattr  = br_stub_getxattr,</div><div class='del'>-        .fgetxattr = br_stub_fgetxattr,</div><div class='del'>-        .fsetxattr = br_stub_fsetxattr,</div><div class='del'>-        .writev    = br_stub_writev,</div><div class='del'>-        .truncate  = br_stub_truncate,</div><div class='del'>-        .ftruncate = br_stub_ftruncate,</div><div class='del'>-        .mknod     = br_stub_mknod,</div><div class='del'>-        .readv     = br_stub_readv,</div><div class='del'>-        .removexattr = br_stub_removexattr,</div><div class='del'>-        .fremovexattr = br_stub_fremovexattr,</div><div class='del'>-        .setxattr  = br_stub_setxattr,</div><div class='del'>-        .opendir   = br_stub_opendir,</div><div class='del'>-        .readdir   = br_stub_readdir,</div><div class='del'>-        .unlink    = br_stub_unlink,</div><div class='add'>+    .lookup = br_stub_lookup,</div><div class='add'>+    .stat = br_stub_stat,</div><div class='add'>+    .fstat = br_stub_fstat,</div><div class='add'>+    .open = br_stub_open,</div><div class='add'>+    .create = br_stub_create,</div><div class='add'>+    .readdirp = br_stub_readdirp,</div><div class='add'>+    .getxattr = br_stub_getxattr,</div><div class='add'>+    .fgetxattr = br_stub_fgetxattr,</div><div class='add'>+    .fsetxattr = br_stub_fsetxattr,</div><div class='add'>+    .writev = br_stub_writev,</div><div class='add'>+    .truncate = br_stub_truncate,</div><div class='add'>+    .ftruncate = br_stub_ftruncate,</div><div class='add'>+    .mknod = br_stub_mknod,</div><div class='add'>+    .readv = br_stub_readv,</div><div class='add'>+    .removexattr = br_stub_removexattr,</div><div class='add'>+    .fremovexattr = br_stub_fremovexattr,</div><div class='add'>+    .setxattr = br_stub_setxattr,</div><div class='add'>+    .opendir = br_stub_opendir,</div><div class='add'>+    .readdir = br_stub_readdir,</div><div class='add'>+    .unlink = br_stub_unlink,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget    = br_stub_forget,</div><div class='del'>-        .release   = br_stub_release,</div><div class='del'>-        .ictxmerge = br_stub_ictxmerge,</div><div class='add'>+    .forget = br_stub_forget,</div><div class='add'>+    .release = br_stub_release,</div><div class='add'>+    .ictxmerge = br_stub_ictxmerge,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key = {"bitrot"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='del'>-          .tags        = {"bitrot"},</div><div class='del'>-          .description = "enable/disable bitrot stub"</div><div class='del'>-        },</div><div class='del'>-        { .key = {"export"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PATH,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags        = {"bitrot"},</div><div class='del'>-          .description = "brick path for versioning",</div><div class='del'>-          .default_value = "{{ brick.path }}"</div><div class='del'>-        },</div><div class='del'>-	{ .key  = {NULL} },</div><div class='add'>+    {.key = {"bitrot"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='add'>+     .tags = {"bitrot"},</div><div class='add'>+     .description = "enable/disable bitrot stub"},</div><div class='add'>+    {.key = {"export"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PATH,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {"bitrot"},</div><div class='add'>+     .description = "brick path for versioning",</div><div class='add'>+     .default_value = "{{ brick.path }}"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changelog/lib/examples/c/get-changes-multi.c b/xlators/features/changelog/lib/examples/c/get-changes-multi.c<br/>index 3741bdf6edc..5ea5bbb6630 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/examples/c/get-changes-multi.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/examples/c/get-changes-multi.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/examples/c/get-changes-multi.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/examples/c/get-changes-multi.c</a></div><div class='hunk'>@@ -25,64 +25,66 @@</div><div class='ctx'> </div><div class='ctx'> #include "changelog.h"</div><div class='ctx'> </div><div class='del'>-void *brick_init (void *xl, struct gf_brick_spec *brick)</div><div class='add'>+void *</div><div class='add'>+brick_init(void *xl, struct gf_brick_spec *brick)</div><div class='ctx'> {</div><div class='del'>-        return brick;</div><div class='add'>+    return brick;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void brick_fini (void *xl, char *brick, void *data)</div><div class='add'>+void</div><div class='add'>+brick_fini(void *xl, char *brick, void *data)</div><div class='ctx'> {</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void brick_callback (void *xl, char *brick,</div><div class='del'>-                    void *data, changelog_event_t *ev)</div><div class='add'>+void</div><div class='add'>+brick_callback(void *xl, char *brick, void *data, changelog_event_t *ev)</div><div class='ctx'> {</div><div class='del'>-        printf ("-&gt;callback: (brick,type) [%s:%d]\n", brick, ev-&gt;ev_type);</div><div class='add'>+    printf("-&gt;callback: (brick,type) [%s:%d]\n", brick, ev-&gt;ev_type);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void fill_brick_spec (struct gf_brick_spec *brick, char *path)</div><div class='add'>+void</div><div class='add'>+fill_brick_spec(struct gf_brick_spec *brick, char *path)</div><div class='ctx'> {</div><div class='del'>-        brick-&gt;brick_path = strdup (path);</div><div class='del'>-        brick-&gt;filter = CHANGELOG_OP_TYPE_BR_RELEASE;</div><div class='del'>-</div><div class='del'>-        brick-&gt;init         = brick_init;</div><div class='del'>-        brick-&gt;fini         = brick_fini;</div><div class='del'>-        brick-&gt;callback     = brick_callback;</div><div class='del'>-        brick-&gt;connected    = NULL;</div><div class='del'>-        brick-&gt;disconnected = NULL;</div><div class='add'>+    brick-&gt;brick_path = strdup(path);</div><div class='add'>+    brick-&gt;filter = CHANGELOG_OP_TYPE_BR_RELEASE;</div><div class='add'>+</div><div class='add'>+    brick-&gt;init = brick_init;</div><div class='add'>+    brick-&gt;fini = brick_fini;</div><div class='add'>+    brick-&gt;callback = brick_callback;</div><div class='add'>+    brick-&gt;connected = NULL;</div><div class='add'>+    brick-&gt;disconnected = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char **argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        void *bricks = NULL;</div><div class='del'>-        struct gf_brick_spec *brick = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *bricks = NULL;</div><div class='add'>+    struct gf_brick_spec *brick = NULL;</div><div class='ctx'> </div><div class='del'>-        bricks = calloc (2, sizeof (struct gf_brick_spec));</div><div class='del'>-        if (!bricks)</div><div class='del'>-                goto error_return;</div><div class='add'>+    bricks = calloc(2, sizeof(struct gf_brick_spec));</div><div class='add'>+    if (!bricks)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        brick = (struct gf_brick_spec *)bricks;</div><div class='del'>-        fill_brick_spec (brick, "/export/z1/zwoop");</div><div class='add'>+    brick = (struct gf_brick_spec *)bricks;</div><div class='add'>+    fill_brick_spec(brick, "/export/z1/zwoop");</div><div class='ctx'> </div><div class='del'>-        brick++;</div><div class='del'>-        fill_brick_spec (brick, "/export/z2/zwoop");</div><div class='add'>+    brick++;</div><div class='add'>+    fill_brick_spec(brick, "/export/z2/zwoop");</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_init (NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = gf_changelog_init(NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_register_generic ((struct gf_brick_spec *)bricks, 2,</div><div class='del'>-                                             0, "/tmp/multi-changes.log", 9,</div><div class='del'>-                                             NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ret = gf_changelog_register_generic((struct gf_brick_spec *)bricks, 2, 0,</div><div class='add'>+                                        "/tmp/multi-changes.log", 9, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        /* let callbacks do the job */</div><div class='del'>-        select (0, NULL, NULL, NULL, NULL);</div><div class='add'>+    /* let callbacks do the job */</div><div class='add'>+    select(0, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/examples/c/get-changes.c b/xlators/features/changelog/lib/examples/c/get-changes.c<br/>index ef766c566b6..8bc651c24a4 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/examples/c/get-changes.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/examples/c/get-changes.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/examples/c/get-changes.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/examples/c/get-changes.c</a></div><div class='hunk'>@@ -27,67 +27,67 @@</div><div class='ctx'> </div><div class='ctx'> #include "changelog.h"</div><div class='ctx'> </div><div class='del'>-#define handle_error(fn)                                \</div><div class='del'>-        printf ("%s (reason: %s)\n", fn, strerror (errno))</div><div class='add'>+#define handle_error(fn) printf("%s (reason: %s)\n", fn, strerror(errno))</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char ** argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int     i           = 0;</div><div class='del'>-        int     ret         = 0;</div><div class='del'>-        ssize_t nr_changes  = 0;</div><div class='del'>-        ssize_t changes     = 0;</div><div class='del'>-        char fbuf[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        ret = gf_changelog_init (NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                handle_error ("Init failed");</div><div class='del'>-                goto out;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    ssize_t nr_changes = 0;</div><div class='add'>+    ssize_t changes = 0;</div><div class='add'>+    char fbuf[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = gf_changelog_init(NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        handle_error("Init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get changes for brick "/home/vshankar/export/yow/yow-1" */</div><div class='add'>+    ret = gf_changelog_register("/export/z1/zwoop", "/tmp/scratch",</div><div class='add'>+                                "/tmp/change.log", 9, 5);</div><div class='add'>+    if (ret) {</div><div class='add'>+        handle_error("register failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        i = 0;</div><div class='add'>+        nr_changes = gf_changelog_scan();</div><div class='add'>+        if (nr_changes &lt; 0) {</div><div class='add'>+            handle_error("scan(): ");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* get changes for brick "/home/vshankar/export/yow/yow-1" */</div><div class='del'>-        ret = gf_changelog_register ("/export/z1/zwoop",</div><div class='del'>-                                     "/tmp/scratch", "/tmp/change.log", 9, 5);</div><div class='del'>-        if (ret) {</div><div class='del'>-                handle_error ("register failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                i = 0;</div><div class='del'>-                nr_changes = gf_changelog_scan ();</div><div class='del'>-                if (nr_changes &lt; 0) {</div><div class='del'>-                        handle_error ("scan(): ");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (nr_changes == 0)</div><div class='del'>-                        goto next;</div><div class='add'>+        if (nr_changes == 0)</div><div class='add'>+            goto next;</div><div class='ctx'> </div><div class='del'>-                printf ("Got %ld changelog files\n", nr_changes);</div><div class='add'>+        printf("Got %ld changelog files\n", nr_changes);</div><div class='ctx'> </div><div class='del'>-                while ( (changes =</div><div class='del'>-                         gf_changelog_next_change (fbuf, PATH_MAX)) &gt; 0) {</div><div class='del'>-                        printf ("changelog file [%d]: %s\n", ++i, fbuf);</div><div class='add'>+        while ((changes = gf_changelog_next_change(fbuf, PATH_MAX)) &gt; 0) {</div><div class='add'>+            printf("changelog file [%d]: %s\n", ++i, fbuf);</div><div class='ctx'> </div><div class='del'>-                        /* process changelog */</div><div class='del'>-                        /* ... */</div><div class='del'>-                        /* ... */</div><div class='del'>-                        /* ... */</div><div class='del'>-                        /* done processing */</div><div class='add'>+            /* process changelog */</div><div class='add'>+            /* ... */</div><div class='add'>+            /* ... */</div><div class='add'>+            /* ... */</div><div class='add'>+            /* done processing */</div><div class='ctx'> </div><div class='del'>-                        ret = gf_changelog_done (fbuf);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                handle_error ("gf_changelog_done");</div><div class='del'>-                }</div><div class='add'>+            ret = gf_changelog_done(fbuf);</div><div class='add'>+            if (ret)</div><div class='add'>+                handle_error("gf_changelog_done");</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (changes == -1)</div><div class='del'>-                        handle_error ("gf_changelog_next_change");</div><div class='add'>+        if (changes == -1)</div><div class='add'>+            handle_error("gf_changelog_next_change");</div><div class='ctx'> </div><div class='del'>-        next:</div><div class='del'>-                sleep (10);</div><div class='del'>-        }</div><div class='add'>+    next:</div><div class='add'>+        sleep(10);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/examples/c/get-history.c b/xlators/features/changelog/lib/examples/c/get-history.c<br/>index ee3ec0ad100..3e888d75ca6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/examples/c/get-history.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/examples/c/get-history.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/examples/c/get-history.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/examples/c/get-history.c</a></div><div class='hunk'>@@ -27,90 +27,90 @@</div><div class='ctx'> </div><div class='ctx'> #include "changelog.h"</div><div class='ctx'> </div><div class='del'>-#define handle_error(fn)                                \</div><div class='del'>-        printf ("%s (reason: %s)\n", fn, strerror (errno))</div><div class='add'>+#define handle_error(fn) printf("%s (reason: %s)\n", fn, strerror(errno))</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-main (int argc, char ** argv)</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-        int     i            = 0;</div><div class='del'>-        int     ret          = 0;</div><div class='del'>-        ssize_t nr_changes   = 0;</div><div class='del'>-        ssize_t changes      = 0;</div><div class='del'>-        char fbuf[PATH_MAX]  = {0,};</div><div class='del'>-        unsigned long end_ts = 0;</div><div class='del'>-</div><div class='del'>-        ret = gf_changelog_init (NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                handle_error ("init failed");</div><div class='del'>-                goto out;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    ssize_t nr_changes = 0;</div><div class='add'>+    ssize_t changes = 0;</div><div class='add'>+    char fbuf[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    unsigned long end_ts = 0;</div><div class='add'>+</div><div class='add'>+    ret = gf_changelog_init(NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        handle_error("init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_changelog_register("/export/z1/zwoop", "/tmp/scratch_v1",</div><div class='add'>+                                "/tmp/changes.log", 9, 5);</div><div class='add'>+    if (ret) {</div><div class='add'>+        handle_error("register failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    int a, b;</div><div class='add'>+    printf("give the two numbers start and end\t");</div><div class='add'>+    scanf("%d%d", &amp;a, &amp;b);</div><div class='add'>+    ret = gf_history_changelog("/export/z1/zwoop/.glusterfs/changelogs", a, b,</div><div class='add'>+                               3, &amp;end_ts);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        printf("history failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    printf("end time till when changelog available : %d , ret(%d) \t", end_ts,</div><div class='add'>+           ret);</div><div class='add'>+    fflush(stdout);</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        nr_changes = gf_history_changelog_scan();</div><div class='add'>+        printf("scanned, nr_changes : %d\n", nr_changes);</div><div class='add'>+        if (nr_changes &lt; 0) {</div><div class='add'>+            handle_error("scan(): ");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_register ("/export/z1/zwoop",</div><div class='del'>-                                     "/tmp/scratch_v1", "/tmp/changes.log",</div><div class='del'>-                                     9, 5);</div><div class='del'>-        if (ret) {</div><div class='del'>-                handle_error ("register failed");</div><div class='del'>-                goto out;</div><div class='add'>+        if (nr_changes == 0) {</div><div class='add'>+            printf("done scanning \n");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        int a, b;</div><div class='del'>-        printf ("give the two numbers start and end\t");</div><div class='del'>-        scanf ("%d%d", &amp;a, &amp;b);</div><div class='del'>-        ret = gf_history_changelog ("/export/z1/zwoop/.glusterfs/changelogs",</div><div class='del'>-                                    a, b, 3, &amp;end_ts);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                printf ("history failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        printf("Got %ld changelog files\n", nr_changes);</div><div class='add'>+</div><div class='add'>+        while ((changes = gf_history_changelog_next_change(fbuf, PATH_MAX)) &gt;</div><div class='add'>+               0) {</div><div class='add'>+            printf("changelog file [%d]: %s\n", ++i, fbuf);</div><div class='ctx'> </div><div class='del'>-        printf ("end time till when changelog available : %d , ret(%d) \t", end_ts, ret);</div><div class='del'>-        fflush(stdout);</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                nr_changes = gf_history_changelog_scan ();</div><div class='del'>-                printf ("scanned, nr_changes : %d\n",nr_changes);</div><div class='del'>-                if (nr_changes &lt; 0) {</div><div class='del'>-                        handle_error ("scan(): ");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (nr_changes == 0) {</div><div class='del'>-                        printf ("done scanning \n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                printf ("Got %ld changelog files\n", nr_changes);</div><div class='del'>-</div><div class='del'>-                while ( (changes =</div><div class='del'>-                         gf_history_changelog_next_change (fbuf, PATH_MAX)) &gt; 0) {</div><div class='del'>-                        printf ("changelog file [%d]: %s\n", ++i, fbuf);</div><div class='del'>-</div><div class='del'>-                        /* process changelog */</div><div class='del'>-                        /* ... */</div><div class='del'>-                        /* ... */</div><div class='del'>-                        /* ... */</div><div class='del'>-                        /* done processing */</div><div class='del'>-</div><div class='del'>-                        ret = gf_history_changelog_done (fbuf);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                handle_error ("gf_changelog_done");</div><div class='del'>-                }</div><div class='del'>-                /*</div><div class='del'>-                if (changes == -1)</div><div class='del'>-                        handle_error ("gf_changelog_next_change");</div><div class='del'>-                if (nr_changes ==1){</div><div class='del'>-                        printf("continue scanning\n");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if(nr_changes == 0){</div><div class='del'>-                        printf("done scanning \n");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                */</div><div class='add'>+            /* process changelog */</div><div class='add'>+            /* ... */</div><div class='add'>+            /* ... */</div><div class='add'>+            /* ... */</div><div class='add'>+            /* done processing */</div><div class='add'>+</div><div class='add'>+            ret = gf_history_changelog_done(fbuf);</div><div class='add'>+            if (ret)</div><div class='add'>+                handle_error("gf_changelog_done");</div><div class='add'>+        }</div><div class='add'>+        /*</div><div class='add'>+        if (changes == -1)</div><div class='add'>+                handle_error ("gf_changelog_next_change");</div><div class='add'>+        if (nr_changes ==1){</div><div class='add'>+                printf("continue scanning\n");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if(nr_changes == 0){</div><div class='add'>+                printf("done scanning \n");</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='add'>+        */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-changelog-api.c b/xlators/features/changelog/lib/src/gf-changelog-api.c<br/>index 372550c7acf..1b6e932596d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-api.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-changelog-api.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-api.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-api.c</a></div><div class='hunk'>@@ -19,57 +19,54 @@</div><div class='ctx'> #include "changelog-lib-messages.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_done (char *file)</div><div class='add'>+gf_changelog_done(char *file)</div><div class='ctx'> {</div><div class='del'>-        int                     ret    = -1;</div><div class='del'>-        char                   *buffer = NULL;</div><div class='del'>-        xlator_t               *this   = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl    = NULL;</div><div class='del'>-        char to_path[PATH_MAX]         = {0,};</div><div class='del'>-</div><div class='del'>-        errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!file || !strlen (file))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* make sure 'file' is inside -&gt;jnl_working_dir */</div><div class='del'>-        buffer = realpath (file, NULL);</div><div class='del'>-        if (!buffer)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (strncmp (jnl-&gt;jnl_working_dir,</div><div class='del'>-                     buffer, strlen (jnl-&gt;jnl_working_dir)))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        (void) snprintf (to_path, PATH_MAX, "%s%s",</div><div class='del'>-                         jnl-&gt;jnl_processed_dir, basename (buffer));</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "moving %s to processed directory", file);</div><div class='del'>-        ret = sys_rename (buffer, to_path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_RENAME_FAILED,</div><div class='del'>-                         "cannot move changelog file",</div><div class='del'>-                         "from=%s", file,</div><div class='del'>-                         "to=%s", to_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    char to_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!file || !strlen(file))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* make sure 'file' is inside -&gt;jnl_working_dir */</div><div class='add'>+    buffer = realpath(file, NULL);</div><div class='add'>+    if (!buffer)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (strncmp(jnl-&gt;jnl_working_dir, buffer, strlen(jnl-&gt;jnl_working_dir)))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    (void)snprintf(to_path, PATH_MAX, "%s%s", jnl-&gt;jnl_processed_dir,</div><div class='add'>+                   basename(buffer));</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "moving %s to processed directory", file);</div><div class='add'>+    ret = sys_rename(buffer, to_path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_LIB_MSG_RENAME_FAILED, "cannot move changelog file",</div><div class='add'>+                "from=%s", file, "to=%s", to_path, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (buffer)</div><div class='del'>-                free (buffer); /* allocated by realpath() */</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    if (buffer)</div><div class='add'>+        free(buffer); /* allocated by realpath() */</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -77,28 +74,28 @@ gf_changelog_done (char *file)</div><div class='ctx'>  *  for a set of changelogs, start from the beginning</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_changelog_start_fresh ()</div><div class='add'>+gf_changelog_start_fresh()</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='add'>+    errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (gf_ftruncate (jnl-&gt;jnl_fd, 0))</div><div class='del'>-                goto out;</div><div class='add'>+    if (gf_ftruncate(jnl-&gt;jnl_fd, 0))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return -1;</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -107,40 +104,42 @@ gf_changelog_start_fresh ()</div><div class='ctx'>  * consumed.</div><div class='ctx'>  */</div><div class='ctx'> ssize_t</div><div class='del'>-gf_changelog_next_change (char *bufptr, size_t maxlen)</div><div class='add'>+gf_changelog_next_change(char *bufptr, size_t maxlen)</div><div class='ctx'> {</div><div class='del'>-        ssize_t         size       = -1;</div><div class='del'>-        int             tracker_fd = 0;</div><div class='del'>-        xlator_t       *this       = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='del'>-        char buffer[PATH_MAX]      = {0,};</div><div class='add'>+    ssize_t size = -1;</div><div class='add'>+    int tracker_fd = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    char buffer[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='add'>+    errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        tracker_fd = jnl-&gt;jnl_fd;</div><div class='add'>+    tracker_fd = jnl-&gt;jnl_fd;</div><div class='ctx'> </div><div class='del'>-        size = gf_readline (tracker_fd, buffer, maxlen);</div><div class='del'>-        if (size &lt; 0) {</div><div class='del'>-                size = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    size = gf_readline(tracker_fd, buffer, maxlen);</div><div class='add'>+    if (size &lt; 0) {</div><div class='add'>+        size = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (size == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (size == 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        memcpy (bufptr, buffer, size - 1);</div><div class='del'>-        bufptr[size - 1] = '\0';</div><div class='add'>+    memcpy(bufptr, buffer, size - 1);</div><div class='add'>+    bufptr[size - 1] = '\0';</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -152,70 +151,74 @@ out:</div><div class='ctx'>  * This call also acts as a cancellation point for the consumer.</div><div class='ctx'>  */</div><div class='ctx'> ssize_t</div><div class='del'>-gf_changelog_scan ()</div><div class='add'>+gf_changelog_scan()</div><div class='ctx'> {</div><div class='del'>-        int             tracker_fd  = 0;</div><div class='del'>-        size_t          off         = 0;</div><div class='del'>-        xlator_t       *this        = NULL;</div><div class='del'>-        size_t          nr_entries  = 0;</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='del'>-        struct dirent  *entry       = NULL;</div><div class='del'>-        struct dirent   scratch[2]  = {{0,},};</div><div class='del'>-        char            buffer[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='del'>-        if (JNL_IS_API_DISCONNECTED (jnl)) {</div><div class='del'>-                errno = ENOTCONN;</div><div class='del'>-                goto out;</div><div class='add'>+    int tracker_fd = 0;</div><div class='add'>+    size_t off = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    size_t nr_entries = 0;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    char buffer[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='add'>+    if (JNL_IS_API_DISCONNECTED(jnl)) {</div><div class='add'>+        errno = ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    tracker_fd = jnl-&gt;jnl_fd;</div><div class='add'>+    if (gf_ftruncate(tracker_fd, 0))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    rewinddir(jnl-&gt;jnl_dir);</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(jnl-&gt;jnl_dir, scratch);</div><div class='add'>+        if (!entry || errno != 0)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        if (!strcmp(basename(entry-&gt;d_name), ".") ||</div><div class='add'>+            !strcmp(basename(entry-&gt;d_name), ".."))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        nr_entries++;</div><div class='add'>+</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(jnl-&gt;jnl_processing_dir, buffer, off,</div><div class='add'>+                                 strlen(jnl-&gt;jnl_processing_dir));</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(entry-&gt;d_name, buffer, off,</div><div class='add'>+                                 strlen(entry-&gt;d_name));</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER("\n", buffer, off, 1);</div><div class='add'>+</div><div class='add'>+        if (gf_changelog_write(tracker_fd, buffer, off) != off) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_WRITE_FAILED,</div><div class='add'>+                   "error writing changelog filename"</div><div class='add'>+                   " to tracker file");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+        off = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        tracker_fd = jnl-&gt;jnl_fd;</div><div class='del'>-        if (gf_ftruncate (tracker_fd, 0))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        rewinddir (jnl-&gt;jnl_dir);</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (jnl-&gt;jnl_dir, scratch);</div><div class='del'>-                if (!entry || errno != 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                if (!strcmp (basename (entry-&gt;d_name), ".")</div><div class='del'>-                     || !strcmp (basename (entry-&gt;d_name), ".."))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                nr_entries++;</div><div class='del'>-</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (jnl-&gt;jnl_processing_dir,</div><div class='del'>-                                          buffer, off,</div><div class='del'>-                                          strlen (jnl-&gt;jnl_processing_dir));</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (entry-&gt;d_name, buffer,</div><div class='del'>-                                          off, strlen (entry-&gt;d_name));</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER ("\n", buffer, off, 1);</div><div class='del'>-</div><div class='del'>-                if (gf_changelog_write (tracker_fd, buffer, off) != off) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_LIB_MSG_WRITE_FAILED,</div><div class='del'>-                                "error writing changelog filename"</div><div class='del'>-                                " to tracker file");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                off = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!entry) {</div><div class='del'>-                if (gf_lseek (tracker_fd, 0, SEEK_SET) != -1)</div><div class='del'>-                        return nr_entries;</div><div class='del'>-        }</div><div class='del'>- out:</div><div class='del'>-        return -1;</div><div class='add'>+    if (!entry) {</div><div class='add'>+        if (gf_lseek(tracker_fd, 0, SEEK_SET) != -1)</div><div class='add'>+            return nr_entries;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-changelog-helpers.c b/xlators/features/changelog/lib/src/gf-changelog-helpers.c<br/>index 9ff1d135933..fd15ec68ab8 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-helpers.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-changelog-helpers.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-helpers.c</a></div><div class='hunk'>@@ -13,38 +13,40 @@</div><div class='ctx'> #include "changelog-lib-messages.h"</div><div class='ctx'> #include "syscall.h"</div><div class='ctx'> </div><div class='del'>-ssize_t gf_changelog_read_path (int fd, char *buffer, size_t bufsize)</div><div class='add'>+ssize_t</div><div class='add'>+gf_changelog_read_path(int fd, char *buffer, size_t bufsize)</div><div class='ctx'> {</div><div class='del'>-        return sys_read (fd, buffer, bufsize);</div><div class='add'>+    return sys_read(fd, buffer, bufsize);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-gf_changelog_write (int fd, char *buffer, size_t len)</div><div class='add'>+gf_changelog_write(int fd, char *buffer, size_t len)</div><div class='ctx'> {</div><div class='del'>-        ssize_t size = 0;</div><div class='del'>-        size_t written = 0;</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    size_t written = 0;</div><div class='ctx'> </div><div class='del'>-        while (written &lt; len) {</div><div class='del'>-                size = sys_write (fd, buffer + written, len - written);</div><div class='del'>-                if (size &lt;= 0)</div><div class='del'>-                        break;</div><div class='add'>+    while (written &lt; len) {</div><div class='add'>+        size = sys_write(fd, buffer + written, len - written);</div><div class='add'>+        if (size &lt;= 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                written += size;</div><div class='del'>-        }</div><div class='add'>+        written += size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return written;</div><div class='add'>+    return written;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_rfc3986_encode_space_newline (unsigned char *s, char *enc, char *estr)</div><div class='add'>+gf_rfc3986_encode_space_newline(unsigned char *s, char *enc, char *estr)</div><div class='ctx'> {</div><div class='del'>-        for (; *s; s++) {</div><div class='del'>-                if (estr[*s])</div><div class='del'>-                        sprintf(enc, "%c", estr[*s]);</div><div class='del'>-                else</div><div class='del'>-                        sprintf(enc, "%%%02X", *s);</div><div class='del'>-                while (*++enc);</div><div class='del'>-        }</div><div class='add'>+    for (; *s; s++) {</div><div class='add'>+        if (estr[*s])</div><div class='add'>+            sprintf(enc, "%c", estr[*s]);</div><div class='add'>+        else</div><div class='add'>+            sprintf(enc, "%%%02X", *s);</div><div class='add'>+        while (*++enc)</div><div class='add'>+            ;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -66,154 +68,152 @@ static pthread_key_t rl_key;</div><div class='ctx'> static pthread_once_t rl_once = PTHREAD_ONCE_INIT;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-readline_destructor (void *ptr)</div><div class='add'>+readline_destructor(void *ptr)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (ptr);</div><div class='add'>+    GF_FREE(ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-readline_once (void)</div><div class='add'>+readline_once(void)</div><div class='ctx'> {</div><div class='del'>-        pthread_key_create (&amp;rl_key, readline_destructor);</div><div class='add'>+    pthread_key_create(&amp;rl_key, readline_destructor);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static ssize_t</div><div class='del'>-my_read (read_line_t *tsd, int fd, char *ptr)</div><div class='add'>+my_read(read_line_t *tsd, int fd, char *ptr)</div><div class='ctx'> {</div><div class='del'>-        if (tsd-&gt;rl_cnt &lt;= 0) {</div><div class='del'>-                tsd-&gt;rl_cnt = sys_read (fd, tsd-&gt;rl_buf, MAXLINE);</div><div class='del'>-</div><div class='del'>-                if (tsd-&gt;rl_cnt &lt; 0)</div><div class='del'>-                        return -1;</div><div class='del'>-                else if (tsd-&gt;rl_cnt == 0)</div><div class='del'>-                        return 0;</div><div class='del'>-                tsd-&gt;rl_bufptr = tsd-&gt;rl_buf;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tsd-&gt;rl_cnt--;</div><div class='del'>-        *ptr = *tsd-&gt;rl_bufptr++;</div><div class='del'>-        return 1;</div><div class='add'>+    if (tsd-&gt;rl_cnt &lt;= 0) {</div><div class='add'>+        tsd-&gt;rl_cnt = sys_read(fd, tsd-&gt;rl_buf, MAXLINE);</div><div class='add'>+</div><div class='add'>+        if (tsd-&gt;rl_cnt &lt; 0)</div><div class='add'>+            return -1;</div><div class='add'>+        else if (tsd-&gt;rl_cnt == 0)</div><div class='add'>+            return 0;</div><div class='add'>+        tsd-&gt;rl_bufptr = tsd-&gt;rl_buf;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tsd-&gt;rl_cnt--;</div><div class='add'>+    *ptr = *tsd-&gt;rl_bufptr++;</div><div class='add'>+    return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_readline_init_once (read_line_t **tsd)</div><div class='add'>+gf_readline_init_once(read_line_t **tsd)</div><div class='ctx'> {</div><div class='del'>-        if (pthread_once (&amp;rl_once, readline_once) != 0)</div><div class='del'>-                return -1;</div><div class='add'>+    if (pthread_once(&amp;rl_once, readline_once) != 0)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        *tsd = pthread_getspecific (rl_key);</div><div class='del'>-        if (*tsd)</div><div class='del'>-                goto out;</div><div class='add'>+    *tsd = pthread_getspecific(rl_key);</div><div class='add'>+    if (*tsd)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *tsd = GF_CALLOC (1, sizeof (**tsd),</div><div class='del'>-                          gf_changelog_mt_libgfchangelog_rl_t);</div><div class='del'>-        if (!*tsd)</div><div class='del'>-                return -1;</div><div class='add'>+    *tsd = GF_CALLOC(1, sizeof(**tsd), gf_changelog_mt_libgfchangelog_rl_t);</div><div class='add'>+    if (!*tsd)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (pthread_setspecific (rl_key, *tsd) != 0)</div><div class='del'>-                return -1;</div><div class='add'>+    if (pthread_setspecific(rl_key, *tsd) != 0)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ssize_t</div><div class='del'>-gf_readline (int fd, void *vptr, size_t maxlen)</div><div class='add'>+gf_readline(int fd, void *vptr, size_t maxlen)</div><div class='ctx'> {</div><div class='del'>-        size_t       n   = 0;</div><div class='del'>-        size_t       rc  = 0;</div><div class='del'>-        char         c   = ' ';</div><div class='del'>-        char        *ptr = NULL;</div><div class='del'>-        read_line_t *tsd = NULL;</div><div class='del'>-</div><div class='del'>-        if (gf_readline_init_once (&amp;tsd))</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        ptr = vptr;</div><div class='del'>-        for (n = 1; n &lt; maxlen; n++) {</div><div class='del'>-                if ( (rc = my_read (tsd, fd, &amp;c)) == 1 ) {</div><div class='del'>-                        *ptr++ = c;</div><div class='del'>-                        if (c == '\n')</div><div class='del'>-                                break;</div><div class='del'>-                } else if (rc == 0) {</div><div class='del'>-                        *ptr = '\0';</div><div class='del'>-                        return (n - 1);</div><div class='del'>-                } else</div><div class='del'>-                        return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *ptr = '\0';</div><div class='del'>-        return n;</div><div class='add'>+    size_t n = 0;</div><div class='add'>+    size_t rc = 0;</div><div class='add'>+    char c = ' ';</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    read_line_t *tsd = NULL;</div><div class='add'>+</div><div class='add'>+    if (gf_readline_init_once(&amp;tsd))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='add'>+    ptr = vptr;</div><div class='add'>+    for (n = 1; n &lt; maxlen; n++) {</div><div class='add'>+        if ((rc = my_read(tsd, fd, &amp;c)) == 1) {</div><div class='add'>+            *ptr++ = c;</div><div class='add'>+            if (c == '\n')</div><div class='add'>+                break;</div><div class='add'>+        } else if (rc == 0) {</div><div class='add'>+            *ptr = '\0';</div><div class='add'>+            return (n - 1);</div><div class='add'>+        } else</div><div class='add'>+            return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *ptr = '\0';</div><div class='add'>+    return n;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> off_t</div><div class='del'>-gf_lseek (int fd, off_t offset, int whence)</div><div class='add'>+gf_lseek(int fd, off_t offset, int whence)</div><div class='ctx'> {</div><div class='del'>-        off_t        off = 0;</div><div class='del'>-        read_line_t *tsd = NULL;</div><div class='add'>+    off_t off = 0;</div><div class='add'>+    read_line_t *tsd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (gf_readline_init_once (&amp;tsd))</div><div class='del'>-                return -1;</div><div class='add'>+    if (gf_readline_init_once(&amp;tsd))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        off = sys_lseek (fd, offset, whence);</div><div class='del'>-        if (off == -1)</div><div class='del'>-                return -1;</div><div class='add'>+    off = sys_lseek(fd, offset, whence);</div><div class='add'>+    if (off == -1)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        tsd-&gt;rl_cnt = 0;</div><div class='del'>-        tsd-&gt;rl_bufptr = tsd-&gt;rl_buf;</div><div class='add'>+    tsd-&gt;rl_cnt = 0;</div><div class='add'>+    tsd-&gt;rl_bufptr = tsd-&gt;rl_buf;</div><div class='ctx'> </div><div class='del'>-        return off;</div><div class='add'>+    return off;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_ftruncate (int fd, off_t length)</div><div class='add'>+gf_ftruncate(int fd, off_t length)</div><div class='ctx'> {</div><div class='del'>-        read_line_t *tsd = NULL;</div><div class='add'>+    read_line_t *tsd = NULL;</div><div class='ctx'> </div><div class='del'>-        if (gf_readline_init_once (&amp;tsd))</div><div class='del'>-                return -1;</div><div class='add'>+    if (gf_readline_init_once(&amp;tsd))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (sys_ftruncate (fd, 0))</div><div class='del'>-                return -1;</div><div class='add'>+    if (sys_ftruncate(fd, 0))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        tsd-&gt;rl_cnt = 0;</div><div class='del'>-        tsd-&gt;rl_bufptr = tsd-&gt;rl_buf;</div><div class='add'>+    tsd-&gt;rl_cnt = 0;</div><div class='add'>+    tsd-&gt;rl_bufptr = tsd-&gt;rl_buf;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_thread_cleanup (xlator_t *this, pthread_t thread)</div><div class='add'>+gf_thread_cleanup(xlator_t *this, pthread_t thread)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        void *res = NULL;</div><div class='del'>-</div><div class='del'>-        ret = pthread_cancel (thread);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_THREAD_CLEANUP_WARNING,</div><div class='del'>-                        "Failed to send cancellation to thread");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pthread_join (thread, &amp;res);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_THREAD_CLEANUP_WARNING,</div><div class='del'>-                        "failed to join thread");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (res != PTHREAD_CANCELED) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_THREAD_CLEANUP_WARNING,</div><div class='del'>-                        "Thread could not be cleaned up");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *res = NULL;</div><div class='add'>+</div><div class='add'>+    ret = pthread_cancel(thread);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               CHANGELOG_LIB_MSG_THREAD_CLEANUP_WARNING,</div><div class='add'>+               "Failed to send cancellation to thread");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_join(thread, &amp;res);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               CHANGELOG_LIB_MSG_THREAD_CLEANUP_WARNING,</div><div class='add'>+               "failed to join thread");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (res != PTHREAD_CANCELED) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+               CHANGELOG_LIB_MSG_THREAD_CLEANUP_WARNING,</div><div class='add'>+               "Thread could not be cleaned up");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-changelog-journal-handler.c b/xlators/features/changelog/lib/src/gf-changelog-journal-handler.c<br/>index bdb410030f6..ef46bf50c97 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-journal-handler.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-changelog-journal-handler.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-journal-handler.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-journal-handler.c</a></div><div class='hunk'>@@ -25,112 +25,107 @@</div><div class='ctx'> </div><div class='ctx'> extern int byebye;</div><div class='ctx'> </div><div class='del'>-enum changelog_versions {</div><div class='del'>-    VERSION_1_1 = 0,</div><div class='del'>-    VERSION_1_2 = 1</div><div class='del'>-};</div><div class='add'>+enum changelog_versions { VERSION_1_1 = 0, VERSION_1_2 = 1 };</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * number of gfid records after fop number</div><div class='ctx'>  */</div><div class='del'>-int nr_gfids[2][GF_FOP_MAXVALUE] = {</div><div class='del'>-    {</div><div class='del'>-        [GF_FOP_MKNOD]   = 1,</div><div class='del'>-        [GF_FOP_MKDIR]   = 1,</div><div class='del'>-        [GF_FOP_UNLINK]  = 1,</div><div class='del'>-        [GF_FOP_RMDIR]   = 1,</div><div class='del'>-        [GF_FOP_SYMLINK] = 1,</div><div class='del'>-        [GF_FOP_RENAME]  = 2,</div><div class='del'>-        [GF_FOP_LINK]    = 1,</div><div class='del'>-        [GF_FOP_CREATE]  = 1,</div><div class='del'>-    },</div><div class='del'>-    {</div><div class='del'>-        [GF_FOP_MKNOD]   = 1,</div><div class='del'>-        [GF_FOP_MKDIR]   = 1,</div><div class='del'>-        [GF_FOP_UNLINK]  = 2,</div><div class='del'>-        [GF_FOP_RMDIR]   = 2,</div><div class='del'>-        [GF_FOP_SYMLINK] = 1,</div><div class='del'>-        [GF_FOP_RENAME]  = 2,</div><div class='del'>-        [GF_FOP_LINK]    = 1,</div><div class='del'>-        [GF_FOP_CREATE]  = 1,</div><div class='del'>-    }</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int nr_extra_recs[2][GF_FOP_MAXVALUE] = {</div><div class='del'>-    {</div><div class='del'>-        [GF_FOP_MKNOD]   = 3,</div><div class='del'>-        [GF_FOP_MKDIR]   = 3,</div><div class='del'>-        [GF_FOP_UNLINK]  = 0,</div><div class='del'>-        [GF_FOP_RMDIR]   = 0,</div><div class='del'>-        [GF_FOP_SYMLINK] = 0,</div><div class='del'>-        [GF_FOP_RENAME]  = 0,</div><div class='del'>-        [GF_FOP_LINK]    = 0,</div><div class='del'>-        [GF_FOP_CREATE]  = 3,</div><div class='del'>-    },</div><div class='del'>-    {</div><div class='del'>-        [GF_FOP_MKNOD]   = 3,</div><div class='del'>-        [GF_FOP_MKDIR]   = 3,</div><div class='del'>-        [GF_FOP_UNLINK]  = 0,</div><div class='del'>-        [GF_FOP_RMDIR]   = 0,</div><div class='del'>-        [GF_FOP_SYMLINK] = 0,</div><div class='del'>-        [GF_FOP_RENAME]  = 0,</div><div class='del'>-        [GF_FOP_LINK]    = 0,</div><div class='del'>-        [GF_FOP_CREATE]  = 3,</div><div class='del'>-    }</div><div class='del'>-};</div><div class='add'>+int nr_gfids[2][GF_FOP_MAXVALUE] = {{</div><div class='add'>+                                        [GF_FOP_MKNOD] = 1,</div><div class='add'>+                                        [GF_FOP_MKDIR] = 1,</div><div class='add'>+                                        [GF_FOP_UNLINK] = 1,</div><div class='add'>+                                        [GF_FOP_RMDIR] = 1,</div><div class='add'>+                                        [GF_FOP_SYMLINK] = 1,</div><div class='add'>+                                        [GF_FOP_RENAME] = 2,</div><div class='add'>+                                        [GF_FOP_LINK] = 1,</div><div class='add'>+                                        [GF_FOP_CREATE] = 1,</div><div class='add'>+                                    },</div><div class='add'>+                                    {</div><div class='add'>+                                        [GF_FOP_MKNOD] = 1,</div><div class='add'>+                                        [GF_FOP_MKDIR] = 1,</div><div class='add'>+                                        [GF_FOP_UNLINK] = 2,</div><div class='add'>+                                        [GF_FOP_RMDIR] = 2,</div><div class='add'>+                                        [GF_FOP_SYMLINK] = 1,</div><div class='add'>+                                        [GF_FOP_RENAME] = 2,</div><div class='add'>+                                        [GF_FOP_LINK] = 1,</div><div class='add'>+                                        [GF_FOP_CREATE] = 1,</div><div class='add'>+                                    }};</div><div class='add'>+</div><div class='add'>+int nr_extra_recs[2][GF_FOP_MAXVALUE] = {{</div><div class='add'>+                                             [GF_FOP_MKNOD] = 3,</div><div class='add'>+                                             [GF_FOP_MKDIR] = 3,</div><div class='add'>+                                             [GF_FOP_UNLINK] = 0,</div><div class='add'>+                                             [GF_FOP_RMDIR] = 0,</div><div class='add'>+                                             [GF_FOP_SYMLINK] = 0,</div><div class='add'>+                                             [GF_FOP_RENAME] = 0,</div><div class='add'>+                                             [GF_FOP_LINK] = 0,</div><div class='add'>+                                             [GF_FOP_CREATE] = 3,</div><div class='add'>+                                         },</div><div class='add'>+                                         {</div><div class='add'>+                                             [GF_FOP_MKNOD] = 3,</div><div class='add'>+                                             [GF_FOP_MKDIR] = 3,</div><div class='add'>+                                             [GF_FOP_UNLINK] = 0,</div><div class='add'>+                                             [GF_FOP_RMDIR] = 0,</div><div class='add'>+                                             [GF_FOP_SYMLINK] = 0,</div><div class='add'>+                                             [GF_FOP_RENAME] = 0,</div><div class='add'>+                                             [GF_FOP_LINK] = 0,</div><div class='add'>+                                             [GF_FOP_CREATE] = 3,</div><div class='add'>+                                         }};</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-binary_to_ascii (uuid_t uuid)</div><div class='add'>+binary_to_ascii(uuid_t uuid)</div><div class='ctx'> {</div><div class='del'>-        return uuid_utoa (uuid);</div><div class='add'>+    return uuid_utoa(uuid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='del'>-conv_noop (char *ptr) { return ptr; }</div><div class='del'>-</div><div class='del'>-#define VERIFY_SEPARATOR(ptr, plen, perr)       \</div><div class='del'>-        {                                       \</div><div class='del'>-                if (*(ptr + plen) != '\0') {    \</div><div class='del'>-                        perr = 1;               \</div><div class='del'>-                        break;                  \</div><div class='del'>-                }                               \</div><div class='del'>-        }</div><div class='add'>+conv_noop(char *ptr)</div><div class='add'>+{</div><div class='add'>+    return ptr;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-#define MOVER_MOVE(mover, nleft, bytes)         \</div><div class='del'>-        {                                       \</div><div class='del'>-                mover += bytes;                 \</div><div class='del'>-                nleft -= bytes;                 \</div><div class='del'>-        }                                       \</div><div class='del'>-</div><div class='del'>-#define PARSE_GFID(mov, ptr, le, fn, perr)                      \</div><div class='del'>-        {                                                       \</div><div class='del'>-                VERIFY_SEPARATOR (mov, le, perr);               \</div><div class='del'>-                ptr = fn (mov);                                 \</div><div class='del'>-                if (!ptr) {                                     \</div><div class='del'>-                        perr = 1;                               \</div><div class='del'>-                        break;                                  \</div><div class='del'>-                }                                               \</div><div class='del'>-        }</div><div class='add'>+#define VERIFY_SEPARATOR(ptr, plen, perr)                                      \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        if (*(ptr + plen) != '\0') {                                           \</div><div class='add'>+            perr = 1;                                                          \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#define FILL_AND_MOVE(pt, buf, of, mo, nl, le)                          \</div><div class='del'>-        {                                                               \</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (pt, buf, of, strlen (pt));    \</div><div class='del'>-                MOVER_MOVE (mo, nl, le);                                \</div><div class='del'>-        }</div><div class='add'>+#define MOVER_MOVE(mover, nleft, bytes)                                        \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        mover += bytes;                                                        \</div><div class='add'>+        nleft -= bytes;                                                        \</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+#define PARSE_GFID(mov, ptr, le, fn, perr)                                     \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        VERIFY_SEPARATOR(mov, le, perr);                                       \</div><div class='add'>+        ptr = fn(mov);                                                         \</div><div class='add'>+        if (!ptr) {                                                            \</div><div class='add'>+            perr = 1;                                                          \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+#define FILL_AND_MOVE(pt, buf, of, mo, nl, le)                                 \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(pt, buf, of, strlen(pt));                     \</div><div class='add'>+        MOVER_MOVE(mo, nl, le);                                                \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#define PARSE_GFID_MOVE(ptr, uuid, mover, nleft, perr)          \</div><div class='del'>-        {                                                       \</div><div class='del'>-                memcpy (uuid, mover, sizeof (uuid_t));          \</div><div class='del'>-                ptr = binary_to_ascii (uuid);                   \</div><div class='del'>-                if (!ptr) {                                     \</div><div class='del'>-                        perr = 1;                               \</div><div class='del'>-                        break;                                  \</div><div class='del'>-                }                                               \</div><div class='del'>-                MOVER_MOVE (mover, nleft, sizeof (uuid_t));     \</div><div class='del'>-        }                                                       \</div><div class='add'>+#define PARSE_GFID_MOVE(ptr, uuid, mover, nleft, perr)                         \</div><div class='add'>+    {                                                                          \</div><div class='add'>+        memcpy(uuid, mover, sizeof(uuid_t));                                   \</div><div class='add'>+        ptr = binary_to_ascii(uuid);                                           \</div><div class='add'>+        if (!ptr) {                                                            \</div><div class='add'>+            perr = 1;                                                          \</div><div class='add'>+            break;                                                             \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        MOVER_MOVE(mover, nleft, sizeof(uuid_t));                              \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#define LINE_BUFSIZE  (3*PATH_MAX) /* enough buffer for extra chars too */</div><div class='add'>+#define LINE_BUFSIZE (3 * PATH_MAX) /* enough buffer for extra chars too */</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * using mmap() makes parsing easy. fgets() cannot be used here as</div><div class='hunk'>@@ -145,111 +140,107 @@ conv_noop (char *ptr) { return ptr; }</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_parse_binary (xlator_t *this,</div><div class='del'>-                           gf_changelog_journal_t *jnl,</div><div class='del'>-                           int from_fd, int to_fd,</div><div class='del'>-                           size_t start_offset, struct stat *stbuf,</div><div class='del'>-                           int version_idx)</div><div class='add'>+gf_changelog_parse_binary(xlator_t *this, gf_changelog_journal_t *jnl,</div><div class='add'>+                          int from_fd, int to_fd, size_t start_offset,</div><div class='add'>+                          struct stat *stbuf, int version_idx)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        int     ret              = -1;</div><div class='del'>-        off_t   off              = 0;</div><div class='del'>-        off_t   nleft            = 0;</div><div class='del'>-        uuid_t  uuid             = {0,};</div><div class='del'>-        char   *ptr              = NULL;</div><div class='del'>-        char   *bname_start      = NULL;</div><div class='del'>-        char   *bname_end        = NULL;</div><div class='del'>-        char   *mover            = NULL;</div><div class='del'>-        void   *start            = NULL;</div><div class='del'>-        char    current_mover    = ' ';</div><div class='del'>-        size_t  blen             = 0;</div><div class='del'>-        int     parse_err        = 0;</div><div class='del'>-        char   *ascii            = NULL;</div><div class='del'>-</div><div class='del'>-        ascii = GF_CALLOC (LINE_BUFSIZE, sizeof(char), gf_common_mt_char);</div><div class='del'>-</div><div class='del'>-        nleft = stbuf-&gt;st_size;</div><div class='del'>-</div><div class='del'>-        start = mmap (NULL, nleft, PROT_READ, MAP_PRIVATE, from_fd, 0);</div><div class='del'>-        if (start == MAP_FAILED) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_MMAP_FAILED,</div><div class='del'>-                        "mmap() error");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        mover = start;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    off_t off = 0;</div><div class='add'>+    off_t nleft = 0;</div><div class='add'>+    uuid_t uuid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *bname_start = NULL;</div><div class='add'>+    char *bname_end = NULL;</div><div class='add'>+    char *mover = NULL;</div><div class='add'>+    void *start = NULL;</div><div class='add'>+    char current_mover = ' ';</div><div class='add'>+    size_t blen = 0;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    char *ascii = NULL;</div><div class='add'>+</div><div class='add'>+    ascii = GF_CALLOC(LINE_BUFSIZE, sizeof(char), gf_common_mt_char);</div><div class='add'>+</div><div class='add'>+    nleft = stbuf-&gt;st_size;</div><div class='add'>+</div><div class='add'>+    start = mmap(NULL, nleft, PROT_READ, MAP_PRIVATE, from_fd, 0);</div><div class='add'>+    if (start == MAP_FAILED) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_MMAP_FAILED,</div><div class='add'>+               "mmap() error");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        MOVER_MOVE (mover, nleft, start_offset);</div><div class='add'>+    mover = start;</div><div class='ctx'> </div><div class='del'>-        while (nleft &gt; 0) {</div><div class='add'>+    MOVER_MOVE(mover, nleft, start_offset);</div><div class='ctx'> </div><div class='del'>-                off = blen = 0;</div><div class='del'>-                ptr = bname_start = bname_end = NULL;</div><div class='add'>+    while (nleft &gt; 0) {</div><div class='add'>+        off = blen = 0;</div><div class='add'>+        ptr = bname_start = bname_end = NULL;</div><div class='ctx'> </div><div class='del'>-                current_mover = *mover;</div><div class='add'>+        current_mover = *mover;</div><div class='ctx'> </div><div class='del'>-                switch (current_mover) {</div><div class='del'>-                case 'D':</div><div class='del'>-                case 'M':</div><div class='del'>-                        MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-                        PARSE_GFID_MOVE (ptr, uuid, mover, nleft, parse_err);</div><div class='add'>+        switch (current_mover) {</div><div class='add'>+            case 'D':</div><div class='add'>+            case 'M':</div><div class='add'>+                MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+                PARSE_GFID_MOVE(ptr, uuid, mover, nleft, parse_err);</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                case 'E':</div><div class='del'>-                        MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-                        PARSE_GFID_MOVE (ptr, uuid, mover, nleft, parse_err);</div><div class='add'>+            case 'E':</div><div class='add'>+                MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+                PARSE_GFID_MOVE(ptr, uuid, mover, nleft, parse_err);</div><div class='ctx'> </div><div class='del'>-                        bname_start = mover;</div><div class='del'>-                        bname_end = strchr (mover, '\n');</div><div class='del'>-                        if (bname_end == NULL) {</div><div class='del'>-                                parse_err = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+                bname_start = mover;</div><div class='add'>+                bname_end = strchr(mover, '\n');</div><div class='add'>+                if (bname_end == NULL) {</div><div class='add'>+                    parse_err = 1;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        blen = bname_end - bname_start;</div><div class='del'>-                        MOVER_MOVE (mover, nleft, blen);</div><div class='add'>+                blen = bname_end - bname_start;</div><div class='add'>+                MOVER_MOVE(mover, nleft, blen);</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                default:</div><div class='del'>-                        parse_err = 1;</div><div class='del'>-                }</div><div class='add'>+            default:</div><div class='add'>+                parse_err = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (parse_err)</div><div class='del'>-                        break;</div><div class='add'>+        if (parse_err)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(&amp;current_mover, ascii, off, 1);</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(" ", ascii, off, 1);</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(ptr, ascii, off, strlen(ptr));</div><div class='add'>+        if (blen)</div><div class='add'>+            GF_CHANGELOG_FILL_BUFFER(bname_start, ascii, off, blen);</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER("\n", ascii, off, 1);</div><div class='add'>+</div><div class='add'>+        if (gf_changelog_write(to_fd, ascii, off) != off) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   CHANGELOG_LIB_MSG_ASCII_ERROR,</div><div class='add'>+                   "processing binary changelog failed due to "</div><div class='add'>+                   " error in writing ascii change");</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (&amp;current_mover, ascii, off, 1);</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (" ", ascii, off, 1);</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (ptr, ascii, off, strlen (ptr));</div><div class='del'>-                if (blen)</div><div class='del'>-                        GF_CHANGELOG_FILL_BUFFER (bname_start,</div><div class='del'>-                                                  ascii, off, blen);</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER ("\n", ascii, off, 1);</div><div class='del'>-</div><div class='del'>-                if (gf_changelog_write (to_fd, ascii, off) != off) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_LIB_MSG_ASCII_ERROR,</div><div class='del'>-                                "processing binary changelog failed due to "</div><div class='del'>-                                " error in writing ascii change");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-        }</div><div class='add'>+    if ((nleft == 0) &amp;&amp; (!parse_err))</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        if ((nleft == 0) &amp;&amp; (!parse_err))</div><div class='del'>-                ret = 0;</div><div class='del'>-</div><div class='del'>-        if (munmap (start, stbuf-&gt;st_size))</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_MUNMAP_FAILED,</div><div class='del'>-                        "munmap() error");</div><div class='del'>- out:</div><div class='del'>-        if (ascii)</div><div class='del'>-                GF_FREE (ascii);</div><div class='del'>-        return ret;</div><div class='add'>+    if (munmap(start, stbuf-&gt;st_size))</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_MUNMAP_FAILED,</div><div class='add'>+               "munmap() error");</div><div class='add'>+out:</div><div class='add'>+    if (ascii)</div><div class='add'>+        GF_FREE(ascii);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -258,804 +249,784 @@ gf_changelog_parse_binary (xlator_t *this,</div><div class='ctx'>  *  - use fop name rather than fop number</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-gf_changelog_parse_ascii (xlator_t *this,</div><div class='del'>-                          gf_changelog_journal_t *jnl,</div><div class='del'>-                          int from_fd, int to_fd,</div><div class='del'>-                          size_t start_offset, struct stat *stbuf,</div><div class='del'>-                          int version_idx)</div><div class='add'>+gf_changelog_parse_ascii(xlator_t *this, gf_changelog_journal_t *jnl,</div><div class='add'>+                         int from_fd, int to_fd, size_t start_offset,</div><div class='add'>+                         struct stat *stbuf, int version_idx)</div><div class='ctx'> {</div><div class='del'>-        int           ng            = 0;</div><div class='del'>-        int           ret           = -1;</div><div class='del'>-        int           fop           = 0;</div><div class='del'>-        int           len           = 0;</div><div class='del'>-        off_t         off           = 0;</div><div class='del'>-        off_t         nleft         = 0;</div><div class='del'>-        char         *ptr           = NULL;</div><div class='del'>-        char         *eptr          = NULL;</div><div class='del'>-        void         *start         = NULL;</div><div class='del'>-        char         *mover         = NULL;</div><div class='del'>-        int           parse_err     = 0;</div><div class='del'>-        char          current_mover = ' ';</div><div class='del'>-        char         *ascii         = NULL;</div><div class='del'>-        const char   *fopname       = NULL;</div><div class='del'>-</div><div class='del'>-        ascii = GF_CALLOC (LINE_BUFSIZE, sizeof(char), gf_common_mt_char);</div><div class='del'>-</div><div class='del'>-        nleft = stbuf-&gt;st_size;</div><div class='del'>-</div><div class='del'>-        start = mmap (NULL, nleft, PROT_READ, MAP_PRIVATE, from_fd, 0);</div><div class='del'>-        if (start == MAP_FAILED) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_MMAP_FAILED,</div><div class='del'>-                        "mmap() error");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ng = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fop = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+    off_t off = 0;</div><div class='add'>+    off_t nleft = 0;</div><div class='add'>+    char *ptr = NULL;</div><div class='add'>+    char *eptr = NULL;</div><div class='add'>+    void *start = NULL;</div><div class='add'>+    char *mover = NULL;</div><div class='add'>+    int parse_err = 0;</div><div class='add'>+    char current_mover = ' ';</div><div class='add'>+    char *ascii = NULL;</div><div class='add'>+    const char *fopname = NULL;</div><div class='add'>+</div><div class='add'>+    ascii = GF_CALLOC(LINE_BUFSIZE, sizeof(char), gf_common_mt_char);</div><div class='add'>+</div><div class='add'>+    nleft = stbuf-&gt;st_size;</div><div class='add'>+</div><div class='add'>+    start = mmap(NULL, nleft, PROT_READ, MAP_PRIVATE, from_fd, 0);</div><div class='add'>+    if (start == MAP_FAILED) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_MMAP_FAILED,</div><div class='add'>+               "mmap() error");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mover = start;</div><div class='add'>+    mover = start;</div><div class='ctx'> </div><div class='del'>-        MOVER_MOVE (mover, nleft, start_offset);</div><div class='add'>+    MOVER_MOVE(mover, nleft, start_offset);</div><div class='ctx'> </div><div class='del'>-        while (nleft &gt; 0) {</div><div class='del'>-                off = 0;</div><div class='del'>-                current_mover = *mover;</div><div class='add'>+    while (nleft &gt; 0) {</div><div class='add'>+        off = 0;</div><div class='add'>+        current_mover = *mover;</div><div class='ctx'> </div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (&amp;current_mover, ascii, off, 1);</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (" ", ascii, off, 1);</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(&amp;current_mover, ascii, off, 1);</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(" ", ascii, off, 1);</div><div class='ctx'> </div><div class='del'>-                switch (current_mover) {</div><div class='del'>-                case 'D':</div><div class='del'>-                        MOVER_MOVE (mover, nleft, 1);</div><div class='add'>+        switch (current_mover) {</div><div class='add'>+            case 'D':</div><div class='add'>+                MOVER_MOVE(mover, nleft, 1);</div><div class='ctx'> </div><div class='del'>-                        /* target gfid */</div><div class='del'>-                        PARSE_GFID (mover, ptr, UUID_CANONICAL_FORM_LEN,</div><div class='del'>-                                    conv_noop, parse_err);</div><div class='del'>-                        FILL_AND_MOVE(ptr, ascii, off,</div><div class='del'>-                                      mover, nleft, UUID_CANONICAL_FORM_LEN);</div><div class='del'>-                        break;</div><div class='del'>-                case 'M':</div><div class='del'>-                        MOVER_MOVE (mover, nleft, 1);</div><div class='add'>+                /* target gfid */</div><div class='add'>+                PARSE_GFID(mover, ptr, UUID_CANONICAL_FORM_LEN, conv_noop,</div><div class='add'>+                           parse_err);</div><div class='add'>+                FILL_AND_MOVE(ptr, ascii, off, mover, nleft,</div><div class='add'>+                              UUID_CANONICAL_FORM_LEN);</div><div class='add'>+                break;</div><div class='add'>+            case 'M':</div><div class='add'>+                MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+</div><div class='add'>+                /* target gfid */</div><div class='add'>+                PARSE_GFID(mover, ptr, UUID_CANONICAL_FORM_LEN, conv_noop,</div><div class='add'>+                           parse_err);</div><div class='add'>+                FILL_AND_MOVE(ptr, ascii, off, mover, nleft,</div><div class='add'>+                              UUID_CANONICAL_FORM_LEN);</div><div class='add'>+                FILL_AND_MOVE(" ", ascii, off, mover, nleft, 1);</div><div class='add'>+</div><div class='add'>+                /* fop */</div><div class='add'>+                len = strlen(mover);</div><div class='add'>+                VERIFY_SEPARATOR(mover, len, parse_err);</div><div class='add'>+</div><div class='add'>+                fop = atoi(mover);</div><div class='add'>+                fopname = gf_fop_list[fop];</div><div class='add'>+                if (fopname == NULL) {</div><div class='add'>+                    parse_err = 1;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        /* target gfid */</div><div class='del'>-                        PARSE_GFID (mover, ptr, UUID_CANONICAL_FORM_LEN,</div><div class='del'>-                                    conv_noop, parse_err);</div><div class='del'>-                        FILL_AND_MOVE (ptr, ascii, off,</div><div class='del'>-                                       mover, nleft, UUID_CANONICAL_FORM_LEN);</div><div class='del'>-                        FILL_AND_MOVE (" ", ascii, off, mover, nleft, 1);</div><div class='add'>+                MOVER_MOVE(mover, nleft, len);</div><div class='ctx'> </div><div class='del'>-                        /* fop */</div><div class='del'>-                        len = strlen (mover);</div><div class='del'>-                        VERIFY_SEPARATOR (mover, len, parse_err);</div><div class='add'>+                len = strlen(fopname);</div><div class='add'>+                GF_CHANGELOG_FILL_BUFFER(fopname, ascii, off, len);</div><div class='ctx'> </div><div class='del'>-                        fop = atoi (mover);</div><div class='del'>-                        fopname = gf_fop_list[fop];</div><div class='del'>-                        if (fopname == NULL) {</div><div class='del'>-                                parse_err = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                        MOVER_MOVE (mover, nleft, len);</div><div class='add'>+            case 'E':</div><div class='add'>+                MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+</div><div class='add'>+                /* target gfid */</div><div class='add'>+                PARSE_GFID(mover, ptr, UUID_CANONICAL_FORM_LEN, conv_noop,</div><div class='add'>+                           parse_err);</div><div class='add'>+                FILL_AND_MOVE(ptr, ascii, off, mover, nleft,</div><div class='add'>+                              UUID_CANONICAL_FORM_LEN);</div><div class='add'>+                FILL_AND_MOVE(" ", ascii, off, mover, nleft, 1);</div><div class='add'>+</div><div class='add'>+                /* fop */</div><div class='add'>+                len = strlen(mover);</div><div class='add'>+                VERIFY_SEPARATOR(mover, len, parse_err);</div><div class='add'>+</div><div class='add'>+                fop = atoi(mover);</div><div class='add'>+                fopname = gf_fop_list[fop];</div><div class='add'>+                if (fopname == NULL) {</div><div class='add'>+                    parse_err = 1;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                        len = strlen (fopname);</div><div class='del'>-                        GF_CHANGELOG_FILL_BUFFER (fopname, ascii, off, len);</div><div class='add'>+                MOVER_MOVE(mover, nleft, len);</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='add'>+                len = strlen(fopname);</div><div class='add'>+                GF_CHANGELOG_FILL_BUFFER(fopname, ascii, off, len);</div><div class='ctx'> </div><div class='del'>-                case 'E':</div><div class='del'>-                        MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-</div><div class='del'>-                        /* target gfid */</div><div class='del'>-                        PARSE_GFID (mover, ptr, UUID_CANONICAL_FORM_LEN,</div><div class='del'>-                                    conv_noop, parse_err);</div><div class='del'>-                        FILL_AND_MOVE (ptr, ascii, off,</div><div class='del'>-                                       mover, nleft, UUID_CANONICAL_FORM_LEN);</div><div class='del'>-                        FILL_AND_MOVE (" ", ascii, off,</div><div class='del'>-                                       mover, nleft, 1);</div><div class='del'>-</div><div class='del'>-                        /* fop */</div><div class='del'>-                        len = strlen (mover);</div><div class='del'>-                        VERIFY_SEPARATOR (mover, len, parse_err);</div><div class='del'>-</div><div class='del'>-                        fop = atoi (mover);</div><div class='del'>-                        fopname = gf_fop_list[fop];</div><div class='del'>-                        if (fopname == NULL) {</div><div class='del'>-                                parse_err = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        MOVER_MOVE (mover, nleft, len);</div><div class='del'>-</div><div class='del'>-                        len = strlen (fopname);</div><div class='del'>-                        GF_CHANGELOG_FILL_BUFFER (fopname, ascii, off, len);</div><div class='del'>-</div><div class='del'>-                        ng = nr_extra_recs[version_idx][fop];</div><div class='del'>-                        for (; ng &gt; 0; ng--) {</div><div class='del'>-                                MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-                                len = strlen (mover);</div><div class='del'>-                                VERIFY_SEPARATOR (mover, len, parse_err);</div><div class='del'>-</div><div class='del'>-                                GF_CHANGELOG_FILL_BUFFER (" ", ascii, off, 1);</div><div class='del'>-                                FILL_AND_MOVE (mover, ascii,</div><div class='del'>-                                               off, mover, nleft, len);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* pargfid + bname */</div><div class='del'>-                        ng = nr_gfids[version_idx][fop];</div><div class='del'>-                        while (ng-- &gt; 0) {</div><div class='del'>-                                MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-                                len = strlen (mover);</div><div class='del'>-                                if (!len) {</div><div class='del'>-                                        MOVER_MOVE (mover, nleft, 1);</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                GF_CHANGELOG_FILL_BUFFER (" ", ascii, off, 1);</div><div class='del'>-</div><div class='del'>-                                PARSE_GFID (mover, ptr, len,</div><div class='del'>-                                            conv_noop, parse_err);</div><div class='del'>-                                eptr = calloc (3, strlen (ptr));</div><div class='del'>-                                if (!eptr) {</div><div class='del'>-                                        parse_err = 1;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                gf_rfc3986_encode_space_newline (</div><div class='del'>-                                                   (unsigned char *) ptr,</div><div class='del'>-                                                   eptr,</div><div class='del'>-                                                   jnl-&gt;rfc3986_space_newline);</div><div class='del'>-                                FILL_AND_MOVE (eptr, ascii, off,</div><div class='del'>-                                               mover, nleft, len);</div><div class='del'>-                                free (eptr);</div><div class='del'>-                        }</div><div class='add'>+                ng = nr_extra_recs[version_idx][fop];</div><div class='add'>+                for (; ng &gt; 0; ng--) {</div><div class='add'>+                    MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+                    len = strlen(mover);</div><div class='add'>+                    VERIFY_SEPARATOR(mover, len, parse_err);</div><div class='ctx'> </div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        parse_err = 1;</div><div class='add'>+                    GF_CHANGELOG_FILL_BUFFER(" ", ascii, off, 1);</div><div class='add'>+                    FILL_AND_MOVE(mover, ascii, off, mover, nleft, len);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if (parse_err)</div><div class='add'>+                /* pargfid + bname */</div><div class='add'>+                ng = nr_gfids[version_idx][fop];</div><div class='add'>+                while (ng-- &gt; 0) {</div><div class='add'>+                    MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+                    len = strlen(mover);</div><div class='add'>+                    if (!len) {</div><div class='add'>+                        MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+                        continue;</div><div class='add'>+                    }</div><div class='add'>+</div><div class='add'>+                    GF_CHANGELOG_FILL_BUFFER(" ", ascii, off, 1);</div><div class='add'>+</div><div class='add'>+                    PARSE_GFID(mover, ptr, len, conv_noop, parse_err);</div><div class='add'>+                    eptr = calloc(3, strlen(ptr));</div><div class='add'>+                    if (!eptr) {</div><div class='add'>+                        parse_err = 1;</div><div class='ctx'>                         break;</div><div class='add'>+                    }</div><div class='ctx'> </div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER ("\n", ascii, off, 1);</div><div class='del'>-</div><div class='del'>-                if (gf_changelog_write (to_fd, ascii, off) != off) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_LIB_MSG_ASCII_ERROR,</div><div class='del'>-                                "processing ascii changelog failed due to "</div><div class='del'>-                                " error in writing change");</div><div class='del'>-                        break;</div><div class='add'>+                    gf_rfc3986_encode_space_newline((unsigned char *)ptr, eptr,</div><div class='add'>+                                                    jnl-&gt;rfc3986_space_newline);</div><div class='add'>+                    FILL_AND_MOVE(eptr, ascii, off, mover, nleft, len);</div><div class='add'>+                    free(eptr);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                MOVER_MOVE (mover, nleft, 1);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                parse_err = 1;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (parse_err)</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER("\n", ascii, off, 1);</div><div class='ctx'> </div><div class='add'>+        if (gf_changelog_write(to_fd, ascii, off) != off) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   CHANGELOG_LIB_MSG_ASCII_ERROR,</div><div class='add'>+                   "processing ascii changelog failed due to "</div><div class='add'>+                   " error in writing change");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((nleft == 0) &amp;&amp; (!parse_err))</div><div class='del'>-                ret = 0;</div><div class='add'>+        MOVER_MOVE(mover, nleft, 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((nleft == 0) &amp;&amp; (!parse_err))</div><div class='add'>+        ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (munmap (start, stbuf-&gt;st_size))</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_MUNMAP_FAILED,</div><div class='del'>-                        "munmap() error");</div><div class='add'>+    if (munmap(start, stbuf-&gt;st_size))</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_MUNMAP_FAILED,</div><div class='add'>+               "munmap() error");</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (ascii)</div><div class='del'>-                GF_FREE (ascii);</div><div class='add'>+out:</div><div class='add'>+    if (ascii)</div><div class='add'>+        GF_FREE(ascii);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_decode (xlator_t *this, gf_changelog_journal_t *jnl,</div><div class='del'>-                     int from_fd, int to_fd, struct stat *stbuf, int *zerob)</div><div class='add'>+gf_changelog_decode(xlator_t *this, gf_changelog_journal_t *jnl, int from_fd,</div><div class='add'>+                    int to_fd, struct stat *stbuf, int *zerob)</div><div class='ctx'> {</div><div class='del'>-        int    ret        = -1;</div><div class='del'>-        int    encoding   = -1;</div><div class='del'>-        int major_version = -1;</div><div class='del'>-        int minor_version = -1;</div><div class='del'>-        int version_idx   = -1;</div><div class='del'>-        size_t elen       = 0;</div><div class='del'>-        char buffer[1024] = {0,};</div><div class='del'>-</div><div class='del'>-        CHANGELOG_GET_HEADER_INFO (from_fd, buffer, sizeof (buffer), encoding,</div><div class='del'>-                                   major_version, minor_version, elen);</div><div class='del'>-        if (encoding == -1) /* unknown encoding */</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (major_version == -1) /* unknown major version */</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (minor_version == -1) /* unknown minor version */</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!CHANGELOG_VALID_ENCODING (encoding))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (elen == stbuf-&gt;st_size) {</div><div class='del'>-                *zerob = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int encoding = -1;</div><div class='add'>+    int major_version = -1;</div><div class='add'>+    int minor_version = -1;</div><div class='add'>+    int version_idx = -1;</div><div class='add'>+    size_t elen = 0;</div><div class='add'>+    char buffer[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    CHANGELOG_GET_HEADER_INFO(from_fd, buffer, sizeof(buffer), encoding,</div><div class='add'>+                              major_version, minor_version, elen);</div><div class='add'>+    if (encoding == -1) /* unknown encoding */</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (major_version == -1) /* unknown major version */</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (minor_version == -1) /* unknown minor version */</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!CHANGELOG_VALID_ENCODING(encoding))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (elen == stbuf-&gt;st_size) {</div><div class='add'>+        *zerob = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (major_version == 1 &amp;&amp; minor_version == 1) {</div><div class='del'>-                version_idx = VERSION_1_1;</div><div class='del'>-        } else if (major_version == 1 &amp;&amp; minor_version == 2) {</div><div class='del'>-                version_idx = VERSION_1_2;</div><div class='del'>-        }</div><div class='add'>+    if (major_version == 1 &amp;&amp; minor_version == 1) {</div><div class='add'>+        version_idx = VERSION_1_1;</div><div class='add'>+    } else if (major_version == 1 &amp;&amp; minor_version == 2) {</div><div class='add'>+        version_idx = VERSION_1_2;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (version_idx == -1) /* unknown version number */</div><div class='del'>-                goto out;</div><div class='add'>+    if (version_idx == -1) /* unknown version number */</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * start processing after the header</div><div class='del'>-         */</div><div class='del'>-        if (sys_lseek (from_fd, elen, SEEK_SET) &lt; 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        switch (encoding) {</div><div class='add'>+    /**</div><div class='add'>+     * start processing after the header</div><div class='add'>+     */</div><div class='add'>+    if (sys_lseek(from_fd, elen, SEEK_SET) &lt; 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    switch (encoding) {</div><div class='ctx'>         case CHANGELOG_ENCODE_BINARY:</div><div class='del'>-                /**</div><div class='del'>-                 * this ideally should have been a part of changelog-encoders.c</div><div class='del'>-                 * (ie. part of the changelog translator).</div><div class='del'>-                 */</div><div class='del'>-                ret = gf_changelog_parse_binary (this, jnl, from_fd,</div><div class='del'>-                                                 to_fd, elen, stbuf,</div><div class='del'>-                                                 version_idx);</div><div class='del'>-                break;</div><div class='add'>+            /**</div><div class='add'>+             * this ideally should have been a part of changelog-encoders.c</div><div class='add'>+             * (ie. part of the changelog translator).</div><div class='add'>+             */</div><div class='add'>+            ret = gf_changelog_parse_binary(this, jnl, from_fd, to_fd, elen,</div><div class='add'>+                                            stbuf, version_idx);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case CHANGELOG_ENCODE_ASCII:</div><div class='del'>-                ret = gf_changelog_parse_ascii (this, jnl, from_fd,</div><div class='del'>-                                                to_fd, elen, stbuf,</div><div class='del'>-                                                version_idx);</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            ret = gf_changelog_parse_ascii(this, jnl, from_fd, to_fd, elen,</div><div class='add'>+                                           stbuf, version_idx);</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_publish (xlator_t *this,</div><div class='del'>-                      gf_changelog_journal_t *jnl, char *from_path)</div><div class='add'>+gf_changelog_publish(xlator_t *this, gf_changelog_journal_t *jnl,</div><div class='add'>+                     char *from_path)</div><div class='ctx'> {</div><div class='del'>-        int         ret        = 0;</div><div class='del'>-        char dest[PATH_MAX]    = {0,};</div><div class='del'>-        char to_path[PATH_MAX] = {0,};</div><div class='del'>-        struct stat stbuf      = {0,};</div><div class='del'>-</div><div class='del'>-        if (snprintf (to_path, PATH_MAX, "%s%s", jnl-&gt;jnl_current_dir,</div><div class='del'>-                      basename (from_path)) &gt;= PATH_MAX)</div><div class='del'>-	        return -1;</div><div class='del'>-</div><div class='del'>-        /* handle zerob file that won't exist in current */</div><div class='del'>-        ret = sys_stat (to_path, &amp;stbuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (errno == ENOENT)</div><div class='del'>-                        ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char dest[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char to_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (snprintf(to_path, PATH_MAX, "%s%s", jnl-&gt;jnl_current_dir,</div><div class='add'>+                 basename(from_path)) &gt;= PATH_MAX)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (snprintf (dest, PATH_MAX, "%s%s", jnl-&gt;jnl_processing_dir,</div><div class='del'>-                      basename (from_path)) &gt;= PATH_MAX)</div><div class='del'>-		return -1;</div><div class='del'>-</div><div class='del'>-        ret = sys_rename (to_path, dest);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_RENAME_FAILED,</div><div class='del'>-                         "error moving changelog to processing dir",</div><div class='del'>-                         "path=%s", to_path,</div><div class='del'>-                         NULL);</div><div class='del'>-        }</div><div class='add'>+    /* handle zerob file that won't exist in current */</div><div class='add'>+    ret = sys_stat(to_path, &amp;stbuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (errno == ENOENT)</div><div class='add'>+            ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (snprintf(dest, PATH_MAX, "%s%s", jnl-&gt;jnl_processing_dir,</div><div class='add'>+                 basename(from_path)) &gt;= PATH_MAX)</div><div class='add'>+        return -1;</div><div class='add'>+</div><div class='add'>+    ret = sys_rename(to_path, dest);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_LIB_MSG_RENAME_FAILED,</div><div class='add'>+                "error moving changelog to processing dir", "path=%s", to_path,</div><div class='add'>+                NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_consume (xlator_t *this,</div><div class='del'>-                      gf_changelog_journal_t *jnl,</div><div class='del'>-                      char *from_path, gf_boolean_t no_publish)</div><div class='add'>+gf_changelog_consume(xlator_t *this, gf_changelog_journal_t *jnl,</div><div class='add'>+                     char *from_path, gf_boolean_t no_publish)</div><div class='ctx'> {</div><div class='del'>-        int         ret        = -1;</div><div class='del'>-        int         fd1        = 0;</div><div class='del'>-        int         fd2        = 0;</div><div class='del'>-        int         zerob      = 0;</div><div class='del'>-        struct stat stbuf      = {0,};</div><div class='del'>-        char dest[PATH_MAX]    = {0,};</div><div class='del'>-        char to_path[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        if (snprintf (to_path, PATH_MAX, "%s%s", jnl-&gt;jnl_current_dir,</div><div class='del'>-                     basename (from_path)) &gt;= PATH_MAX)</div><div class='del'>-                goto out;</div><div class='del'>-        if (snprintf (dest, PATH_MAX, "%s%s", jnl-&gt;jnl_processing_dir,</div><div class='del'>-                      basename (from_path)) &gt;= PATH_MAX)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (from_path, &amp;stbuf);</div><div class='del'>-        if (ret || !S_ISREG(stbuf.st_mode)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_STAT_FAILED,</div><div class='del'>-                         "stat failed on changelog file",</div><div class='del'>-                         "path=%s", from_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int fd1 = 0;</div><div class='add'>+    int fd2 = 0;</div><div class='add'>+    int zerob = 0;</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char dest[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char to_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (snprintf(to_path, PATH_MAX, "%s%s", jnl-&gt;jnl_current_dir,</div><div class='add'>+                 basename(from_path)) &gt;= PATH_MAX)</div><div class='add'>+        goto out;</div><div class='add'>+    if (snprintf(dest, PATH_MAX, "%s%s", jnl-&gt;jnl_processing_dir,</div><div class='add'>+                 basename(from_path)) &gt;= PATH_MAX)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(from_path, &amp;stbuf);</div><div class='add'>+    if (ret || !S_ISREG(stbuf.st_mode)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_STAT_FAILED,</div><div class='add'>+                "stat failed on changelog file", "path=%s", from_path, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd1 = open (from_path, O_RDONLY);</div><div class='del'>-        if (fd1 &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_OPEN_FAILED,</div><div class='del'>-                         "cannot open changelog file",</div><div class='del'>-                         "path=%s", from_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd1 = open(from_path, O_RDONLY);</div><div class='add'>+    if (fd1 &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_OPEN_FAILED,</div><div class='add'>+                "cannot open changelog file", "path=%s", from_path, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd2 = open (to_path, O_CREAT | O_TRUNC | O_RDWR,</div><div class='del'>-                    S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (fd2 &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_OPEN_FAILED,</div><div class='del'>-                         "cannot create ascii changelog file",</div><div class='del'>-                         "path=%s", to_path,</div><div class='del'>-                         NULL);</div><div class='add'>+    fd2 = open(to_path, O_CREAT | O_TRUNC | O_RDWR,</div><div class='add'>+               S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (fd2 &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_OPEN_FAILED,</div><div class='add'>+                "cannot create ascii changelog file", "path=%s", to_path, NULL);</div><div class='add'>+        goto close_fd;</div><div class='add'>+    } else {</div><div class='add'>+        ret = gf_changelog_decode(this, jnl, fd1, fd2, &amp;stbuf, &amp;zerob);</div><div class='add'>+</div><div class='add'>+        sys_close(fd2);</div><div class='add'>+</div><div class='add'>+        if (!ret) {</div><div class='add'>+            /* move it to processing on a successful</div><div class='add'>+               decode */</div><div class='add'>+            if (no_publish == _gf_true)</div><div class='ctx'>                 goto close_fd;</div><div class='del'>-        } else {</div><div class='del'>-                ret = gf_changelog_decode (this, jnl, fd1,</div><div class='del'>-                                           fd2, &amp;stbuf, &amp;zerob);</div><div class='del'>-</div><div class='del'>-                sys_close (fd2);</div><div class='del'>-</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        /* move it to processing on a successful</div><div class='del'>-                           decode */</div><div class='del'>-                        if (no_publish == _gf_true)</div><div class='del'>-                                goto close_fd;</div><div class='del'>-                        ret = sys_rename (to_path, dest);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                         CHANGELOG_LIB_MSG_RENAME_FAILED,</div><div class='del'>-                                         "error moving changelog to processing dir",</div><div class='del'>-                                         "path=%s", to_path,</div><div class='del'>-                                         NULL);</div><div class='del'>-                }</div><div class='add'>+            ret = sys_rename(to_path, dest);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                        CHANGELOG_LIB_MSG_RENAME_FAILED,</div><div class='add'>+                        "error moving changelog to processing dir", "path=%s",</div><div class='add'>+                        to_path, NULL);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* remove it from .current if it's an empty file */</div><div class='del'>-                if (zerob) {</div><div class='del'>-                        /* zerob changelogs must be unlinked */</div><div class='del'>-                        ret = sys_unlink (to_path);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                         CHANGELOG_LIB_MSG_UNLINK_FAILED,</div><div class='del'>-                                         "could not unlink empty changelog",</div><div class='del'>-                                         "path=%s", to_path,</div><div class='del'>-                                         NULL);</div><div class='del'>-                }</div><div class='add'>+        /* remove it from .current if it's an empty file */</div><div class='add'>+        if (zerob) {</div><div class='add'>+            /* zerob changelogs must be unlinked */</div><div class='add'>+            ret = sys_unlink(to_path);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                        CHANGELOG_LIB_MSG_UNLINK_FAILED,</div><div class='add'>+                        "could not unlink empty changelog", "path=%s", to_path,</div><div class='add'>+                        NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- close_fd:</div><div class='del'>-        sys_close (fd1);</div><div class='add'>+close_fd:</div><div class='add'>+    sys_close(fd1);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_changelog_process (void *data)</div><div class='add'>+gf_changelog_process(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='del'>-        gf_changelog_entry_t *entry = NULL;</div><div class='del'>-        gf_changelog_processor_t *jnl_proc = NULL;</div><div class='del'>-</div><div class='del'>-        jnl = data;</div><div class='del'>-        jnl_proc = jnl-&gt;jnl_proc;</div><div class='del'>-        THIS = jnl-&gt;this;</div><div class='del'>-        this = jnl-&gt;this;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;jnl_proc-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;jnl_proc-&gt;entries)) {</div><div class='del'>-                                jnl_proc-&gt;waiting = _gf_true;</div><div class='del'>-                                pthread_cond_wait</div><div class='del'>-                                        (&amp;jnl_proc-&gt;cond, &amp;jnl_proc-&gt;lock);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        entry = list_first_entry (&amp;jnl_proc-&gt;entries,</div><div class='del'>-                                                  gf_changelog_entry_t, list);</div><div class='del'>-                        if (entry)</div><div class='del'>-                                list_del (&amp;entry-&gt;list);</div><div class='del'>-</div><div class='del'>-                        jnl_proc-&gt;waiting = _gf_false;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;jnl_proc-&gt;lock);</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_entry_t *entry = NULL;</div><div class='add'>+    gf_changelog_processor_t *jnl_proc = NULL;</div><div class='add'>+</div><div class='add'>+    jnl = data;</div><div class='add'>+    jnl_proc = jnl-&gt;jnl_proc;</div><div class='add'>+    THIS = jnl-&gt;this;</div><div class='add'>+    this = jnl-&gt;this;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;jnl_proc-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;jnl_proc-&gt;entries)) {</div><div class='add'>+                jnl_proc-&gt;waiting = _gf_true;</div><div class='add'>+                pthread_cond_wait(&amp;jnl_proc-&gt;cond, &amp;jnl_proc-&gt;lock);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                if (entry) {</div><div class='del'>-                        (void) gf_changelog_consume (this, jnl,</div><div class='del'>-                                                     entry-&gt;path, _gf_false);</div><div class='del'>-                        GF_FREE (entry);</div><div class='del'>-                }</div><div class='add'>+            entry = list_first_entry(&amp;jnl_proc-&gt;entries, gf_changelog_entry_t,</div><div class='add'>+                                     list);</div><div class='add'>+            if (entry)</div><div class='add'>+                list_del(&amp;entry-&gt;list);</div><div class='add'>+</div><div class='add'>+            jnl_proc-&gt;waiting = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;jnl_proc-&gt;lock);</div><div class='add'>+</div><div class='add'>+        if (entry) {</div><div class='add'>+            (void)gf_changelog_consume(this, jnl, entry-&gt;path, _gf_false);</div><div class='add'>+            GF_FREE(entry);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_changelog_queue_journal (gf_changelog_processor_t *jnl_proc,</div><div class='del'>-                            changelog_event_t *event)</div><div class='add'>+gf_changelog_queue_journal(gf_changelog_processor_t *jnl_proc,</div><div class='add'>+                           changelog_event_t *event)</div><div class='ctx'> {</div><div class='del'>-        size_t len = 0;</div><div class='del'>-        gf_changelog_entry_t *entry = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    gf_changelog_entry_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        entry = GF_CALLOC (1, sizeof (gf_changelog_entry_t),</div><div class='del'>-                           gf_changelog_mt_libgfchangelog_entry_t);</div><div class='del'>-        if (!entry)</div><div class='del'>-                return;</div><div class='del'>-        INIT_LIST_HEAD (&amp;entry-&gt;list);</div><div class='add'>+    entry = GF_CALLOC(1, sizeof(gf_changelog_entry_t),</div><div class='add'>+                      gf_changelog_mt_libgfchangelog_entry_t);</div><div class='add'>+    if (!entry)</div><div class='add'>+        return;</div><div class='add'>+    INIT_LIST_HEAD(&amp;entry-&gt;list);</div><div class='ctx'> </div><div class='del'>-        len = strlen (event-&gt;u.journal.path);</div><div class='del'>-        (void)memcpy (entry-&gt;path, event-&gt;u.journal.path, len+1);</div><div class='del'>-        entry-&gt;path[len] = '\0';</div><div class='add'>+    len = strlen(event-&gt;u.journal.path);</div><div class='add'>+    (void)memcpy(entry-&gt;path, event-&gt;u.journal.path, len + 1);</div><div class='add'>+    entry-&gt;path[len] = '\0';</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;jnl_proc-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;entry-&gt;list, &amp;jnl_proc-&gt;entries);</div><div class='del'>-                if (jnl_proc-&gt;waiting)</div><div class='del'>-                        pthread_cond_signal (&amp;jnl_proc-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;jnl_proc-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;jnl_proc-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;jnl_proc-&gt;entries);</div><div class='add'>+        if (jnl_proc-&gt;waiting)</div><div class='add'>+            pthread_cond_signal(&amp;jnl_proc-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;jnl_proc-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_changelog_handle_journal (void *xl, char *brick,</div><div class='del'>-                             void *cbkdata, changelog_event_t *event)</div><div class='add'>+gf_changelog_handle_journal(void *xl, char *brick, void *cbkdata,</div><div class='add'>+                            changelog_event_t *event)</div><div class='ctx'> {</div><div class='del'>-        gf_changelog_journal_t   *jnl      = NULL;</div><div class='del'>-        gf_changelog_processor_t *jnl_proc = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_processor_t *jnl_proc = NULL;</div><div class='ctx'> </div><div class='del'>-        jnl      = cbkdata;</div><div class='del'>-        jnl_proc = jnl-&gt;jnl_proc;</div><div class='add'>+    jnl = cbkdata;</div><div class='add'>+    jnl_proc = jnl-&gt;jnl_proc;</div><div class='ctx'> </div><div class='del'>-        gf_changelog_queue_journal (jnl_proc, event);</div><div class='add'>+    gf_changelog_queue_journal(jnl_proc, event);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_changelog_journal_disconnect (void *xl, char *brick, void *data)</div><div class='add'>+gf_changelog_journal_disconnect(void *xl, char *brick, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='ctx'> </div><div class='del'>-        jnl = data;</div><div class='add'>+    jnl = data;</div><div class='ctx'> </div><div class='del'>-        pthread_spin_lock (&amp;jnl-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                JNL_SET_API_STATE (jnl, JNL_API_DISCONNECTED);</div><div class='del'>-        };</div><div class='del'>-        pthread_spin_unlock (&amp;jnl-&gt;lock);</div><div class='add'>+    pthread_spin_lock(&amp;jnl-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        JNL_SET_API_STATE(jnl, JNL_API_DISCONNECTED);</div><div class='add'>+    };</div><div class='add'>+    pthread_spin_unlock(&amp;jnl-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_changelog_journal_connect (void *xl, char *brick, void *data)</div><div class='add'>+gf_changelog_journal_connect(void *xl, char *brick, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='ctx'> </div><div class='del'>-        jnl = data;</div><div class='add'>+    jnl = data;</div><div class='ctx'> </div><div class='del'>-        pthread_spin_lock (&amp;jnl-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                JNL_SET_API_STATE (jnl, JNL_API_CONNECTED);</div><div class='del'>-        };</div><div class='del'>-        pthread_spin_unlock (&amp;jnl-&gt;lock);</div><div class='add'>+    pthread_spin_lock(&amp;jnl-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        JNL_SET_API_STATE(jnl, JNL_API_CONNECTED);</div><div class='add'>+    };</div><div class='add'>+    pthread_spin_unlock(&amp;jnl-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_changelog_cleanup_processor (gf_changelog_journal_t *jnl)</div><div class='add'>+gf_changelog_cleanup_processor(gf_changelog_journal_t *jnl)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_changelog_processor_t *jnl_proc = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this || !jnl || !jnl-&gt;jnl_proc)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        jnl_proc = jnl-&gt;jnl_proc;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_cleanup (this, jnl_proc-&gt;processor);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_CLEANUP_ERROR,</div><div class='del'>-                        "failed to cleanup processor thread");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_processor_t *jnl_proc = NULL;</div><div class='ctx'> </div><div class='del'>-        (void)pthread_mutex_destroy (&amp;jnl_proc-&gt;lock);</div><div class='del'>-        (void)pthread_cond_destroy (&amp;jnl_proc-&gt;cond);</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this || !jnl || !jnl-&gt;jnl_proc)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (jnl_proc);</div><div class='add'>+    jnl_proc = jnl-&gt;jnl_proc;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return;</div><div class='add'>+    ret = gf_thread_cleanup(this, jnl_proc-&gt;processor);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_CLEANUP_ERROR,</div><div class='add'>+               "failed to cleanup processor thread");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)pthread_mutex_destroy(&amp;jnl_proc-&gt;lock);</div><div class='add'>+    (void)pthread_cond_destroy(&amp;jnl_proc-&gt;cond);</div><div class='add'>+</div><div class='add'>+    GF_FREE(jnl_proc);</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_init_processor (gf_changelog_journal_t *jnl)</div><div class='add'>+gf_changelog_init_processor(gf_changelog_journal_t *jnl)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_changelog_processor_t *jnl_proc = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_changelog_processor_t *jnl_proc = NULL;</div><div class='ctx'> </div><div class='del'>-        jnl_proc = GF_CALLOC (1, sizeof (gf_changelog_processor_t),</div><div class='del'>-                              gf_changelog_mt_libgfchangelog_t);</div><div class='del'>-        if (!jnl_proc)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_init (&amp;jnl_proc-&gt;lock, NULL);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto free_jnl_proc;</div><div class='del'>-        ret = pthread_cond_init (&amp;jnl_proc-&gt;cond, NULL);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_mutex;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;jnl_proc-&gt;entries);</div><div class='del'>-        jnl_proc-&gt;waiting = _gf_false;</div><div class='del'>-        jnl-&gt;jnl_proc = jnl_proc;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;jnl_proc-&gt;processor,</div><div class='del'>-                                NULL, gf_changelog_process, jnl, "clogproc");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                jnl-&gt;jnl_proc = NULL;</div><div class='del'>-                goto cleanup_cond;</div><div class='del'>-        }</div><div class='add'>+    jnl_proc = GF_CALLOC(1, sizeof(gf_changelog_processor_t),</div><div class='add'>+                         gf_changelog_mt_libgfchangelog_t);</div><div class='add'>+    if (!jnl_proc)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_init(&amp;jnl_proc-&gt;lock, NULL);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto free_jnl_proc;</div><div class='add'>+    ret = pthread_cond_init(&amp;jnl_proc-&gt;cond, NULL);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_mutex;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;jnl_proc-&gt;entries);</div><div class='add'>+    jnl_proc-&gt;waiting = _gf_false;</div><div class='add'>+    jnl-&gt;jnl_proc = jnl_proc;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;jnl_proc-&gt;processor, NULL, gf_changelog_process,</div><div class='add'>+                           jnl, "clogproc");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        jnl-&gt;jnl_proc = NULL;</div><div class='add'>+        goto cleanup_cond;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- cleanup_cond:</div><div class='del'>-        (void) pthread_cond_destroy (&amp;jnl_proc-&gt;cond);</div><div class='del'>- cleanup_mutex:</div><div class='del'>-        (void) pthread_mutex_destroy (&amp;jnl_proc-&gt;lock);</div><div class='del'>- free_jnl_proc:</div><div class='del'>-        GF_FREE (jnl_proc);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+cleanup_cond:</div><div class='add'>+    (void)pthread_cond_destroy(&amp;jnl_proc-&gt;cond);</div><div class='add'>+cleanup_mutex:</div><div class='add'>+    (void)pthread_mutex_destroy(&amp;jnl_proc-&gt;lock);</div><div class='add'>+free_jnl_proc:</div><div class='add'>+    GF_FREE(jnl_proc);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-gf_changelog_cleanup_fds (gf_changelog_journal_t *jnl)</div><div class='add'>+gf_changelog_cleanup_fds(gf_changelog_journal_t *jnl)</div><div class='ctx'> {</div><div class='del'>-        /* tracker fd */</div><div class='del'>-        if (jnl-&gt;jnl_fd != -1)</div><div class='del'>-                sys_close (jnl-&gt;jnl_fd);</div><div class='del'>-        /* processing dir */</div><div class='del'>-        if (jnl-&gt;jnl_dir)</div><div class='del'>-                sys_closedir (jnl-&gt;jnl_dir);</div><div class='del'>-</div><div class='del'>-        if (jnl-&gt;jnl_working_dir)</div><div class='del'>-                free (jnl-&gt;jnl_working_dir); /* allocated by realpath */</div><div class='add'>+    /* tracker fd */</div><div class='add'>+    if (jnl-&gt;jnl_fd != -1)</div><div class='add'>+        sys_close(jnl-&gt;jnl_fd);</div><div class='add'>+    /* processing dir */</div><div class='add'>+    if (jnl-&gt;jnl_dir)</div><div class='add'>+        sys_closedir(jnl-&gt;jnl_dir);</div><div class='add'>+</div><div class='add'>+    if (jnl-&gt;jnl_working_dir)</div><div class='add'>+        free(jnl-&gt;jnl_working_dir); /* allocated by realpath */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_open_dirs (xlator_t *this, gf_changelog_journal_t *jnl)</div><div class='add'>+gf_changelog_open_dirs(xlator_t *this, gf_changelog_journal_t *jnl)</div><div class='ctx'> {</div><div class='del'>-        int  ret                    = -1;</div><div class='del'>-        DIR *dir                    = NULL;</div><div class='del'>-        int  tracker_fd             = 0;</div><div class='del'>-        char tracker_path[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        /* .current */</div><div class='del'>-        (void) snprintf (jnl-&gt;jnl_current_dir, PATH_MAX,</div><div class='del'>-                         "%s/"GF_CHANGELOG_CURRENT_DIR"/",</div><div class='del'>-                         jnl-&gt;jnl_working_dir);</div><div class='del'>-        ret = recursive_rmdir (jnl-&gt;jnl_current_dir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_FAILED_TO_RMDIR,</div><div class='del'>-                         "Failed to rmdir",</div><div class='del'>-                         "path=%s", jnl-&gt;jnl_current_dir,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = mkdir_p (jnl-&gt;jnl_current_dir, 0600, _gf_false);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    DIR *dir = NULL;</div><div class='add'>+    int tracker_fd = 0;</div><div class='add'>+    char tracker_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* .current */</div><div class='add'>+    (void)snprintf(jnl-&gt;jnl_current_dir, PATH_MAX,</div><div class='add'>+                   "%s/" GF_CHANGELOG_CURRENT_DIR "/", jnl-&gt;jnl_working_dir);</div><div class='add'>+    ret = recursive_rmdir(jnl-&gt;jnl_current_dir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_LIB_MSG_FAILED_TO_RMDIR, "Failed to rmdir", "path=%s",</div><div class='add'>+                jnl-&gt;jnl_current_dir, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = mkdir_p(jnl-&gt;jnl_current_dir, 0600, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* .processed */</div><div class='add'>+    (void)snprintf(jnl-&gt;jnl_processed_dir, PATH_MAX,</div><div class='add'>+                   "%s/" GF_CHANGELOG_PROCESSED_DIR "/", jnl-&gt;jnl_working_dir);</div><div class='add'>+    ret = mkdir_p(jnl-&gt;jnl_processed_dir, 0600, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* .processing */</div><div class='add'>+    (void)snprintf(jnl-&gt;jnl_processing_dir, PATH_MAX,</div><div class='add'>+                   "%s/" GF_CHANGELOG_PROCESSING_DIR "/", jnl-&gt;jnl_working_dir);</div><div class='add'>+    ret = recursive_rmdir(jnl-&gt;jnl_processing_dir);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_LIB_MSG_FAILED_TO_RMDIR, "Failed to rmdir", "path=%s",</div><div class='add'>+                jnl-&gt;jnl_processing_dir, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* .processed */</div><div class='del'>-        (void) snprintf (jnl-&gt;jnl_processed_dir, PATH_MAX,</div><div class='del'>-                         "%s/"GF_CHANGELOG_PROCESSED_DIR"/",</div><div class='del'>-                         jnl-&gt;jnl_working_dir);</div><div class='del'>-        ret = mkdir_p (jnl-&gt;jnl_processed_dir, 0600, _gf_false);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* .processing */</div><div class='del'>-        (void) snprintf (jnl-&gt;jnl_processing_dir, PATH_MAX,</div><div class='del'>-                         "%s/"GF_CHANGELOG_PROCESSING_DIR"/",</div><div class='del'>-                         jnl-&gt;jnl_working_dir);</div><div class='del'>-        ret = recursive_rmdir (jnl-&gt;jnl_processing_dir);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_FAILED_TO_RMDIR,</div><div class='del'>-                         "Failed to rmdir",</div><div class='del'>-                         "path=%s", jnl-&gt;jnl_processing_dir,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = mkdir_p(jnl-&gt;jnl_processing_dir, 0600, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mkdir_p (jnl-&gt;jnl_processing_dir, 0600, _gf_false);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        dir = sys_opendir (jnl-&gt;jnl_processing_dir);</div><div class='del'>-        if (!dir) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_OPENDIR_ERROR,</div><div class='del'>-                        "opendir() error");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dir = sys_opendir(jnl-&gt;jnl_processing_dir);</div><div class='add'>+    if (!dir) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_OPENDIR_ERROR,</div><div class='add'>+               "opendir() error");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        jnl-&gt;jnl_dir = dir;</div><div class='add'>+    jnl-&gt;jnl_dir = dir;</div><div class='ctx'> </div><div class='del'>-        (void) snprintf (tracker_path, PATH_MAX,</div><div class='del'>-                         "%s/"GF_CHANGELOG_TRACKER, jnl-&gt;jnl_working_dir);</div><div class='add'>+    (void)snprintf(tracker_path, PATH_MAX, "%s/" GF_CHANGELOG_TRACKER,</div><div class='add'>+                   jnl-&gt;jnl_working_dir);</div><div class='ctx'> </div><div class='del'>-        tracker_fd = open (tracker_path, O_CREAT | O_APPEND | O_RDWR,</div><div class='del'>-                           S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (tracker_fd &lt; 0) {</div><div class='del'>-                sys_closedir (jnl-&gt;jnl_dir);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    tracker_fd = open(tracker_path, O_CREAT | O_APPEND | O_RDWR,</div><div class='add'>+                      S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (tracker_fd &lt; 0) {</div><div class='add'>+        sys_closedir(jnl-&gt;jnl_dir);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        jnl-&gt;jnl_fd = tracker_fd;</div><div class='del'>-        ret = 0;</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    jnl-&gt;jnl_fd = tracker_fd;</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_init_history (xlator_t *this,</div><div class='del'>-                           gf_changelog_journal_t *jnl,</div><div class='del'>-                           char *brick_path)</div><div class='add'>+gf_changelog_init_history(xlator_t *this, gf_changelog_journal_t *jnl,</div><div class='add'>+                          char *brick_path)</div><div class='ctx'> {</div><div class='del'>-        int i   = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char hist_scratch_dir[PATH_MAX] = {0,};</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char hist_scratch_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        jnl-&gt;hist_jnl = GF_CALLOC (1, sizeof (*jnl),</div><div class='del'>-                         gf_changelog_mt_libgfchangelog_t);</div><div class='del'>-        if (!jnl-&gt;hist_jnl)</div><div class='del'>-                goto error_return;</div><div class='add'>+    jnl-&gt;hist_jnl = GF_CALLOC(1, sizeof(*jnl),</div><div class='add'>+                              gf_changelog_mt_libgfchangelog_t);</div><div class='add'>+    if (!jnl-&gt;hist_jnl)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        jnl-&gt;hist_jnl-&gt;jnl_dir = NULL;</div><div class='del'>-        jnl-&gt;hist_jnl-&gt;jnl_fd =  -1;</div><div class='add'>+    jnl-&gt;hist_jnl-&gt;jnl_dir = NULL;</div><div class='add'>+    jnl-&gt;hist_jnl-&gt;jnl_fd = -1;</div><div class='ctx'> </div><div class='del'>-        (void) snprintf (hist_scratch_dir, PATH_MAX,</div><div class='del'>-                         "%s/"GF_CHANGELOG_HISTORY_DIR"/",</div><div class='del'>-                         jnl-&gt;jnl_working_dir);</div><div class='add'>+    (void)snprintf(hist_scratch_dir, PATH_MAX,</div><div class='add'>+                   "%s/" GF_CHANGELOG_HISTORY_DIR "/", jnl-&gt;jnl_working_dir);</div><div class='ctx'> </div><div class='del'>-        ret = mkdir_p (hist_scratch_dir, 0600, _gf_false);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_hist;</div><div class='del'>-</div><div class='del'>-        jnl-&gt;hist_jnl-&gt;jnl_working_dir = realpath (hist_scratch_dir, NULL);</div><div class='del'>-        if (!jnl-&gt;hist_jnl-&gt;jnl_working_dir)</div><div class='del'>-                goto dealloc_hist;</div><div class='del'>-</div><div class='del'>-        ret = gf_changelog_open_dirs (this, jnl-&gt;hist_jnl);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_OPENDIR_ERROR,</div><div class='del'>-                        "could not create entries in history scratch dir");</div><div class='del'>-                goto dealloc_hist;</div><div class='del'>-        }</div><div class='add'>+    ret = mkdir_p(hist_scratch_dir, 0600, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_hist;</div><div class='ctx'> </div><div class='del'>-        if (snprintf (jnl-&gt;hist_jnl-&gt;jnl_brickpath, PATH_MAX, "%s",</div><div class='del'>-                      brick_path) &gt;= PATH_MAX)</div><div class='del'>-                goto dealloc_hist;</div><div class='add'>+    jnl-&gt;hist_jnl-&gt;jnl_working_dir = realpath(hist_scratch_dir, NULL);</div><div class='add'>+    if (!jnl-&gt;hist_jnl-&gt;jnl_working_dir)</div><div class='add'>+        goto dealloc_hist;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; 256; i++) {</div><div class='del'>-                jnl-&gt;hist_jnl-&gt;rfc3986_space_newline[i] =</div><div class='del'>-                        (i == ' ' || i == '\n' || i == '%') ? 0 : i;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_changelog_open_dirs(this, jnl-&gt;hist_jnl);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_OPENDIR_ERROR,</div><div class='add'>+               "could not create entries in history scratch dir");</div><div class='add'>+        goto dealloc_hist;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (snprintf(jnl-&gt;hist_jnl-&gt;jnl_brickpath, PATH_MAX, "%s", brick_path) &gt;=</div><div class='add'>+        PATH_MAX)</div><div class='add'>+        goto dealloc_hist;</div><div class='ctx'> </div><div class='del'>- dealloc_hist:</div><div class='del'>-        GF_FREE (jnl-&gt;hist_jnl);</div><div class='del'>-        jnl-&gt;hist_jnl = NULL;</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    for (i = 0; i &lt; 256; i++) {</div><div class='add'>+        jnl-&gt;hist_jnl-&gt;rfc3986_space_newline[i] = (i == ' ' || i == '\n' ||</div><div class='add'>+                                                   i == '%')</div><div class='add'>+                                                      ? 0</div><div class='add'>+                                                      : i;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+dealloc_hist:</div><div class='add'>+    GF_FREE(jnl-&gt;hist_jnl);</div><div class='add'>+    jnl-&gt;hist_jnl = NULL;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-gf_changelog_journal_fini (void *xl, char *brick, void *data)</div><div class='add'>+gf_changelog_journal_fini(void *xl, char *brick, void *data)</div><div class='ctx'> {</div><div class='del'>-        gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='ctx'> </div><div class='del'>-        jnl = data;</div><div class='add'>+    jnl = data;</div><div class='ctx'> </div><div class='del'>-        gf_changelog_cleanup_processor (jnl);</div><div class='add'>+    gf_changelog_cleanup_processor(jnl);</div><div class='ctx'> </div><div class='del'>-        gf_changelog_cleanup_fds (jnl);</div><div class='del'>-        if (jnl-&gt;hist_jnl)</div><div class='del'>-                gf_changelog_cleanup_fds (jnl-&gt;hist_jnl);</div><div class='add'>+    gf_changelog_cleanup_fds(jnl);</div><div class='add'>+    if (jnl-&gt;hist_jnl)</div><div class='add'>+        gf_changelog_cleanup_fds(jnl-&gt;hist_jnl);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (jnl);</div><div class='add'>+    GF_FREE(jnl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_changelog_journal_init (void *xl, struct gf_brick_spec *brick)</div><div class='add'>+gf_changelog_journal_init(void *xl, struct gf_brick_spec *brick)</div><div class='ctx'> {</div><div class='del'>-        int                     i           = 0;</div><div class='del'>-        int                     ret         = 0;</div><div class='del'>-        xlator_t               *this        = NULL;</div><div class='del'>-        struct stat             buf         = {0,};</div><div class='del'>-        char                   *scratch_dir = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl         = NULL;</div><div class='del'>-</div><div class='del'>-        this = xl;</div><div class='del'>-        scratch_dir = (char *) brick-&gt;ptr;</div><div class='del'>-</div><div class='del'>-        jnl = GF_CALLOC (1, sizeof (gf_changelog_journal_t),</div><div class='del'>-                         gf_changelog_mt_libgfchangelog_t);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        if (snprintf (jnl-&gt;jnl_brickpath, PATH_MAX, "%s",</div><div class='del'>-		      brick-&gt;brick_path) &gt;= PATH_MAX)</div><div class='del'>-                goto dealloc_private;</div><div class='del'>-</div><div class='del'>-        if (sys_stat (scratch_dir, &amp;buf) &amp;&amp; errno == ENOENT) {</div><div class='del'>-                ret = mkdir_p (scratch_dir, 0600, _gf_true);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto dealloc_private;</div><div class='del'>-        }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct stat buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *scratch_dir = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+</div><div class='add'>+    this = xl;</div><div class='add'>+    scratch_dir = (char *)brick-&gt;ptr;</div><div class='add'>+</div><div class='add'>+    jnl = GF_CALLOC(1, sizeof(gf_changelog_journal_t),</div><div class='add'>+                    gf_changelog_mt_libgfchangelog_t);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    if (snprintf(jnl-&gt;jnl_brickpath, PATH_MAX, "%s", brick-&gt;brick_path) &gt;=</div><div class='add'>+        PATH_MAX)</div><div class='add'>+        goto dealloc_private;</div><div class='add'>+</div><div class='add'>+    if (sys_stat(scratch_dir, &amp;buf) &amp;&amp; errno == ENOENT) {</div><div class='add'>+        ret = mkdir_p(scratch_dir, 0600, _gf_true);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto dealloc_private;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        jnl-&gt;jnl_working_dir = realpath (scratch_dir, NULL);</div><div class='del'>-        if (!jnl-&gt;jnl_working_dir)</div><div class='del'>-                goto dealloc_private;</div><div class='add'>+    jnl-&gt;jnl_working_dir = realpath(scratch_dir, NULL);</div><div class='add'>+    if (!jnl-&gt;jnl_working_dir)</div><div class='add'>+        goto dealloc_private;</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_open_dirs (this, jnl);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_OPENDIR_ERROR,</div><div class='del'>-                        "could not create entries in scratch dir");</div><div class='del'>-                goto dealloc_private;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* RFC 3986 {de,en}coding */</div><div class='del'>-        for (i = 0; i &lt; 256; i++) {</div><div class='del'>-                jnl-&gt;rfc3986_space_newline[i] =</div><div class='del'>-                        (i == ' ' || i == '\n' || i == '%') ? 0 : i;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_changelog_open_dirs(this, jnl);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_OPENDIR_ERROR,</div><div class='add'>+               "could not create entries in scratch dir");</div><div class='add'>+        goto dealloc_private;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_init_history (this, jnl, brick-&gt;brick_path);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_fds;</div><div class='add'>+    /* RFC 3986 {de,en}coding */</div><div class='add'>+    for (i = 0; i &lt; 256; i++) {</div><div class='add'>+        jnl-&gt;rfc3986_space_newline[i] = (i == ' ' || i == '\n' || i == '%') ? 0</div><div class='add'>+                                                                            : i;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* initialize journal processor */</div><div class='del'>-        jnl-&gt;this = this;</div><div class='del'>-        ret = gf_changelog_init_processor (jnl);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_fds;</div><div class='del'>-</div><div class='del'>-        JNL_SET_API_STATE (jnl, JNL_API_CONN_INPROGESS);</div><div class='del'>-        ret = pthread_spin_init (&amp;jnl-&gt;lock, 0);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_processor;</div><div class='del'>-        return jnl;</div><div class='del'>-</div><div class='del'>- cleanup_processor:</div><div class='del'>-        gf_changelog_cleanup_processor (jnl);</div><div class='del'>- cleanup_fds:</div><div class='del'>-        gf_changelog_cleanup_fds (jnl);</div><div class='del'>-        if (jnl-&gt;hist_jnl)</div><div class='del'>-                gf_changelog_cleanup_fds (jnl-&gt;hist_jnl);</div><div class='del'>- dealloc_private:</div><div class='del'>-        GF_FREE (jnl);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+    ret = gf_changelog_init_history(this, jnl, brick-&gt;brick_path);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_fds;</div><div class='add'>+</div><div class='add'>+    /* initialize journal processor */</div><div class='add'>+    jnl-&gt;this = this;</div><div class='add'>+    ret = gf_changelog_init_processor(jnl);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_fds;</div><div class='add'>+</div><div class='add'>+    JNL_SET_API_STATE(jnl, JNL_API_CONN_INPROGESS);</div><div class='add'>+    ret = pthread_spin_init(&amp;jnl-&gt;lock, 0);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_processor;</div><div class='add'>+    return jnl;</div><div class='add'>+</div><div class='add'>+cleanup_processor:</div><div class='add'>+    gf_changelog_cleanup_processor(jnl);</div><div class='add'>+cleanup_fds:</div><div class='add'>+    gf_changelog_cleanup_fds(jnl);</div><div class='add'>+    if (jnl-&gt;hist_jnl)</div><div class='add'>+        gf_changelog_cleanup_fds(jnl-&gt;hist_jnl);</div><div class='add'>+dealloc_private:</div><div class='add'>+    GF_FREE(jnl);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-changelog-reborp.c b/xlators/features/changelog/lib/src/gf-changelog-reborp.c<br/>index f9fb8fcf01a..8dfda4c79c5 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-reborp.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-changelog-reborp.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-reborp.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-reborp.c</a></div><div class='hunk'>@@ -25,133 +25,121 @@</div><div class='ctx'> struct rpcsvc_program *gf_changelog_reborp_programs[];</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_changelog_connection_janitor (void *arg)</div><div class='add'>+gf_changelog_connection_janitor(void *arg)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_private_t *priv = NULL;</div><div class='del'>-        gf_changelog_t *entry = NULL;</div><div class='del'>-        struct gf_event *event = NULL;</div><div class='del'>-        struct gf_event_list *ev = NULL;</div><div class='del'>-        unsigned long drained = 0;</div><div class='del'>-</div><div class='del'>-        this = arg;</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;priv-&gt;cleanups))</div><div class='del'>-                                pthread_cond_wait (&amp;priv-&gt;cond, &amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                        entry = list_first_entry (&amp;priv-&gt;cleanups,</div><div class='del'>-                                                  gf_changelog_t, list);</div><div class='del'>-                        list_del_init (&amp;entry-&gt;list);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                drained = 0;</div><div class='del'>-                ev = &amp;entry-&gt;event;</div><div class='del'>-</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                         CHANGELOG_LIB_MSG_CLEANING_BRICK_ENTRY_INFO,</div><div class='del'>-                         "Cleaning brick entry for brick",</div><div class='del'>-                         "brick=%s", entry-&gt;brick,</div><div class='del'>-                         NULL);</div><div class='del'>-</div><div class='del'>-                /* 0x0: disable rpc-clnt */</div><div class='del'>-                rpc_clnt_disable (RPC_PROBER (entry));</div><div class='del'>-</div><div class='del'>-                /* 0x1: cleanup callback invoker thread */</div><div class='del'>-                ret = gf_cleanup_event (this, ev);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                /* 0x2: drain pending events */</div><div class='del'>-                while (!list_empty (&amp;ev-&gt;events)) {</div><div class='del'>-                        event = list_first_entry (&amp;ev-&gt;events,</div><div class='del'>-                                                  struct gf_event, list);</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                 CHANGELOG_LIB_MSG_DRAINING_EVENT_INFO,</div><div class='del'>-                                 "Draining event",</div><div class='del'>-                                 "seq=%lu", event-&gt;seq,</div><div class='del'>-                                 "payload=%d", event-&gt;count,</div><div class='del'>-                                 NULL);</div><div class='del'>-</div><div class='del'>-                        GF_FREE (event);</div><div class='del'>-                        drained++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                         CHANGELOG_LIB_MSG_DRAINING_EVENT_INFO,</div><div class='del'>-                         "Drained events",</div><div class='del'>-                         "num=%lu", drained,</div><div class='del'>-                         NULL);</div><div class='del'>-</div><div class='del'>-                /* 0x3: freeup brick entry */</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                         CHANGELOG_LIB_MSG_FREEING_ENTRY_INFO,</div><div class='del'>-                         "freeing entry",</div><div class='del'>-                         "entry=%p", entry,</div><div class='del'>-                         NULL);</div><div class='del'>-                LOCK_DESTROY (&amp;entry-&gt;statelock);</div><div class='del'>-                GF_FREE (entry);</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_private_t *priv = NULL;</div><div class='add'>+    gf_changelog_t *entry = NULL;</div><div class='add'>+    struct gf_event *event = NULL;</div><div class='add'>+    struct gf_event_list *ev = NULL;</div><div class='add'>+    unsigned long drained = 0;</div><div class='add'>+</div><div class='add'>+    this = arg;</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;priv-&gt;cleanups))</div><div class='add'>+                pthread_cond_wait(&amp;priv-&gt;cond, &amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+            entry = list_first_entry(&amp;priv-&gt;cleanups, gf_changelog_t, list);</div><div class='add'>+            list_del_init(&amp;entry-&gt;list);</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+        drained = 0;</div><div class='add'>+        ev = &amp;entry-&gt;event;</div><div class='add'>+</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                CHANGELOG_LIB_MSG_CLEANING_BRICK_ENTRY_INFO,</div><div class='add'>+                "Cleaning brick entry for brick", "brick=%s", entry-&gt;brick,</div><div class='add'>+                NULL);</div><div class='add'>+</div><div class='add'>+        /* 0x0: disable rpc-clnt */</div><div class='add'>+        rpc_clnt_disable(RPC_PROBER(entry));</div><div class='add'>+</div><div class='add'>+        /* 0x1: cleanup callback invoker thread */</div><div class='add'>+        ret = gf_cleanup_event(this, ev);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        /* 0x2: drain pending events */</div><div class='add'>+        while (!list_empty(&amp;ev-&gt;events)) {</div><div class='add'>+            event = list_first_entry(&amp;ev-&gt;events, struct gf_event, list);</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                    CHANGELOG_LIB_MSG_DRAINING_EVENT_INFO, "Draining event",</div><div class='add'>+                    "seq=%lu", event-&gt;seq, "payload=%d", event-&gt;count, NULL);</div><div class='add'>+</div><div class='add'>+            GF_FREE(event);</div><div class='add'>+            drained++;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                CHANGELOG_LIB_MSG_DRAINING_EVENT_INFO, "Drained events",</div><div class='add'>+                "num=%lu", drained, NULL);</div><div class='add'>+</div><div class='add'>+        /* 0x3: freeup brick entry */</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                CHANGELOG_LIB_MSG_FREEING_ENTRY_INFO, "freeing entry",</div><div class='add'>+                "entry=%p", entry, NULL);</div><div class='add'>+        LOCK_DESTROY(&amp;entry-&gt;statelock);</div><div class='add'>+        GF_FREE(entry);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_reborp_rpcsvc_notify (rpcsvc_t *rpc, void *mydata,</div><div class='del'>-                                   rpcsvc_event_t event, void *data)</div><div class='add'>+gf_changelog_reborp_rpcsvc_notify(rpcsvc_t *rpc, void *mydata,</div><div class='add'>+                                  rpcsvc_event_t event, void *data)</div><div class='ctx'> {</div><div class='del'>-        int             ret      = 0;</div><div class='del'>-        xlator_t       *this     = NULL;</div><div class='del'>-        gf_changelog_t *entry    = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!(event == RPCSVC_EVENT_ACCEPT ||</div><div class='del'>-              event == RPCSVC_EVENT_DISCONNECT))</div><div class='del'>-                return 0;</div><div class='add'>+    if (!(event == RPCSVC_EVENT_ACCEPT || event == RPCSVC_EVENT_DISCONNECT))</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        entry = mydata;</div><div class='del'>-        this = entry-&gt;this;</div><div class='add'>+    entry = mydata;</div><div class='add'>+    this = entry-&gt;this;</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case RPCSVC_EVENT_ACCEPT:</div><div class='del'>-                ret = sys_unlink (RPC_SOCK(entry));</div><div class='del'>-                if (ret != 0)</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                 CHANGELOG_LIB_MSG_UNLINK_FAILED,</div><div class='del'>-                                 "failed to unlink "</div><div class='del'>-                                 "reverse socket",</div><div class='del'>-                                 "path=%s", RPC_SOCK (entry),</div><div class='del'>-                                 NULL);</div><div class='del'>-                if (entry-&gt;connected)</div><div class='del'>-                        GF_CHANGELOG_INVOKE_CBK (this, entry-&gt;connected,</div><div class='del'>-                                                 entry-&gt;brick, entry-&gt;ptr);</div><div class='del'>-                break;</div><div class='add'>+            ret = sys_unlink(RPC_SOCK(entry));</div><div class='add'>+            if (ret != 0)</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                        CHANGELOG_LIB_MSG_UNLINK_FAILED,</div><div class='add'>+                        "failed to unlink "</div><div class='add'>+                        "reverse socket",</div><div class='add'>+                        "path=%s", RPC_SOCK(entry), NULL);</div><div class='add'>+            if (entry-&gt;connected)</div><div class='add'>+                GF_CHANGELOG_INVOKE_CBK(this, entry-&gt;connected, entry-&gt;brick,</div><div class='add'>+                                        entry-&gt;ptr);</div><div class='add'>+            break;</div><div class='ctx'>         case RPCSVC_EVENT_DISCONNECT:</div><div class='del'>-                if (entry-&gt;disconnected)</div><div class='del'>-                        GF_CHANGELOG_INVOKE_CBK (this, entry-&gt;disconnected,</div><div class='del'>-                                                 entry-&gt;brick, entry-&gt;ptr);</div><div class='del'>-                /* passthrough */</div><div class='add'>+            if (entry-&gt;disconnected)</div><div class='add'>+                GF_CHANGELOG_INVOKE_CBK(this, entry-&gt;disconnected, entry-&gt;brick,</div><div class='add'>+                                        entry-&gt;ptr);</div><div class='add'>+            /* passthrough */</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_t *</div><div class='del'>-gf_changelog_reborp_init_rpc_listner (xlator_t *this,</div><div class='del'>-                                      char *path, char *sock, void *cbkdata)</div><div class='add'>+gf_changelog_reborp_init_rpc_listner(xlator_t *this, char *path, char *sock,</div><div class='add'>+                                     void *cbkdata)</div><div class='ctx'> {</div><div class='del'>-        CHANGELOG_MAKE_TMP_SOCKET_PATH (path, sock, UNIX_PATH_MAX);</div><div class='del'>-        return changelog_rpc_server_init (this, sock, cbkdata,</div><div class='del'>-                                          gf_changelog_reborp_rpcsvc_notify,</div><div class='del'>-                                          gf_changelog_reborp_programs);</div><div class='add'>+    CHANGELOG_MAKE_TMP_SOCKET_PATH(path, sock, UNIX_PATH_MAX);</div><div class='add'>+    return changelog_rpc_server_init(this, sock, cbkdata,</div><div class='add'>+                                     gf_changelog_reborp_rpcsvc_notify,</div><div class='add'>+                                     gf_changelog_reborp_programs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -164,29 +152,27 @@ gf_changelog_reborp_init_rpc_listner (xlator_t *this,</div><div class='ctx'>  * @FIXME: cleanup this bugger once server filters events.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-gf_changelog_invoke_callback (gf_changelog_t *entry,</div><div class='del'>-                              struct iovec **vec, int payloadcnt)</div><div class='add'>+gf_changelog_invoke_callback(gf_changelog_t *entry, struct iovec **vec,</div><div class='add'>+                             int payloadcnt)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='del'>-        int evsize = 0;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        changelog_event_t *event = NULL;</div><div class='del'>-</div><div class='del'>-        this = entry-&gt;this;</div><div class='del'>-</div><div class='del'>-        for (; i &lt; payloadcnt; i++) {</div><div class='del'>-                event = (changelog_event_t *)vec[i]-&gt;iov_base;</div><div class='del'>-                evsize = vec[i]-&gt;iov_len / CHANGELOG_EV_SIZE;</div><div class='del'>-</div><div class='del'>-                for (; evsize &gt; 0; evsize--, event++) {</div><div class='del'>-                        if (gf_changelog_filter_check (entry, event)) {</div><div class='del'>-                                GF_CHANGELOG_INVOKE_CBK (this,</div><div class='del'>-                                                         entry-&gt;callback,</div><div class='del'>-                                                         entry-&gt;brick,</div><div class='del'>-                                                         entry-&gt;ptr, event);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int i = 0;</div><div class='add'>+    int evsize = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_event_t *event = NULL;</div><div class='add'>+</div><div class='add'>+    this = entry-&gt;this;</div><div class='add'>+</div><div class='add'>+    for (; i &lt; payloadcnt; i++) {</div><div class='add'>+        event = (changelog_event_t *)vec[i]-&gt;iov_base;</div><div class='add'>+        evsize = vec[i]-&gt;iov_len / CHANGELOG_EV_SIZE;</div><div class='add'>+</div><div class='add'>+        for (; evsize &gt; 0; evsize--, event++) {</div><div class='add'>+            if (gf_changelog_filter_check(entry, event)) {</div><div class='add'>+                GF_CHANGELOG_INVOKE_CBK(this, entry-&gt;callback, entry-&gt;brick,</div><div class='add'>+                                        entry-&gt;ptr, event);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -197,218 +183,217 @@ gf_changelog_invoke_callback (gf_changelog_t *entry,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__is_expected_sequence (struct gf_event_list *ev, struct gf_event *event)</div><div class='add'>+__is_expected_sequence(struct gf_event_list *ev, struct gf_event *event)</div><div class='ctx'> {</div><div class='del'>-        return (ev-&gt;next_seq == event-&gt;seq);</div><div class='add'>+    return (ev-&gt;next_seq == event-&gt;seq);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__can_process_event (struct gf_event_list *ev, struct gf_event **event)</div><div class='add'>+__can_process_event(struct gf_event_list *ev, struct gf_event **event)</div><div class='ctx'> {</div><div class='del'>-        *event = list_first_entry (&amp;ev-&gt;events, struct gf_event, list);</div><div class='add'>+    *event = list_first_entry(&amp;ev-&gt;events, struct gf_event, list);</div><div class='ctx'> </div><div class='del'>-        if (__is_expected_sequence (ev, *event)) {</div><div class='del'>-                list_del (&amp;(*event)-&gt;list);</div><div class='del'>-                ev-&gt;next_seq++;</div><div class='del'>-                return 1;</div><div class='del'>-        }</div><div class='add'>+    if (__is_expected_sequence(ev, *event)) {</div><div class='add'>+        list_del(&amp;(*event)-&gt;list);</div><div class='add'>+        ev-&gt;next_seq++;</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pick_event_ordered (struct gf_event_list *ev, struct gf_event **event)</div><div class='add'>+pick_event_ordered(struct gf_event_list *ev, struct gf_event **event)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;ev-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                while (list_empty (&amp;ev-&gt;events)</div><div class='del'>-                       || !__can_process_event (ev, event))</div><div class='del'>-                        pthread_cond_wait (&amp;ev-&gt;cond, &amp;ev-&gt;lock);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ev-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;ev-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        while (list_empty(&amp;ev-&gt;events) || !__can_process_event(ev, event))</div><div class='add'>+            pthread_cond_wait(&amp;ev-&gt;cond, &amp;ev-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ev-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pick_event_unordered (struct gf_event_list *ev, struct gf_event **event)</div><div class='add'>+pick_event_unordered(struct gf_event_list *ev, struct gf_event **event)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;ev-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                while (list_empty (&amp;ev-&gt;events))</div><div class='del'>-                        pthread_cond_wait (&amp;ev-&gt;cond, &amp;ev-&gt;lock);</div><div class='del'>-                *event = list_first_entry (&amp;ev-&gt;events, struct gf_event, list);</div><div class='del'>-                list_del (&amp;(*event)-&gt;list);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ev-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;ev-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        while (list_empty(&amp;ev-&gt;events))</div><div class='add'>+            pthread_cond_wait(&amp;ev-&gt;cond, &amp;ev-&gt;lock);</div><div class='add'>+        *event = list_first_entry(&amp;ev-&gt;events, struct gf_event, list);</div><div class='add'>+        list_del(&amp;(*event)-&gt;list);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ev-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_changelog_callback_invoker (void *arg)</div><div class='add'>+gf_changelog_callback_invoker(void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t             *this   = NULL;</div><div class='del'>-        gf_changelog_t       *entry  = NULL;</div><div class='del'>-        struct iovec         *vec    = NULL;</div><div class='del'>-        struct gf_event      *event  = NULL;</div><div class='del'>-        struct gf_event_list *ev     = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_t *entry = NULL;</div><div class='add'>+    struct iovec *vec = NULL;</div><div class='add'>+    struct gf_event *event = NULL;</div><div class='add'>+    struct gf_event_list *ev = NULL;</div><div class='ctx'> </div><div class='del'>-        ev    = arg;</div><div class='del'>-        entry = ev-&gt;entry;</div><div class='del'>-        THIS = this = entry-&gt;this;</div><div class='add'>+    ev = arg;</div><div class='add'>+    entry = ev-&gt;entry;</div><div class='add'>+    THIS = this = entry-&gt;this;</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                entry-&gt;pickevent (ev, &amp;event);</div><div class='add'>+    while (1) {</div><div class='add'>+        entry-&gt;pickevent(ev, &amp;event);</div><div class='ctx'> </div><div class='del'>-                vec = (struct iovec *) &amp;event-&gt;iov;</div><div class='del'>-                gf_changelog_invoke_callback (entry, &amp;vec, event-&gt;count);</div><div class='add'>+        vec = (struct iovec *)&amp;event-&gt;iov;</div><div class='add'>+        gf_changelog_invoke_callback(entry, &amp;vec, event-&gt;count);</div><div class='ctx'> </div><div class='del'>-                GF_FREE (event);</div><div class='del'>-        }</div><div class='add'>+        GF_FREE(event);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-orderfn (struct list_head *pos1, struct list_head *pos2)</div><div class='add'>+orderfn(struct list_head *pos1, struct list_head *pos2)</div><div class='ctx'> {</div><div class='del'>-        struct gf_event *event1 = NULL;</div><div class='del'>-        struct gf_event *event2 = NULL;</div><div class='add'>+    struct gf_event *event1 = NULL;</div><div class='add'>+    struct gf_event *event2 = NULL;</div><div class='ctx'> </div><div class='del'>-        event1 = list_entry (pos1, struct gf_event, list);</div><div class='del'>-        event2 = list_entry (pos2, struct gf_event, list);</div><div class='add'>+    event1 = list_entry(pos1, struct gf_event, list);</div><div class='add'>+    event2 = list_entry(pos2, struct gf_event, list);</div><div class='ctx'> </div><div class='del'>-        if  (event1-&gt;seq &gt; event2-&gt;seq)</div><div class='del'>-                return 1;</div><div class='del'>-        return -1;</div><div class='add'>+    if (event1-&gt;seq &gt; event2-&gt;seq)</div><div class='add'>+        return 1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-queue_ordered_event (struct gf_event_list *ev, struct gf_event *event)</div><div class='add'>+queue_ordered_event(struct gf_event_list *ev, struct gf_event *event)</div><div class='ctx'> {</div><div class='del'>-        /* add event to the ordered event list and wake up listener(s) */</div><div class='del'>-        pthread_mutex_lock (&amp;ev-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_order (&amp;event-&gt;list, &amp;ev-&gt;events, orderfn);</div><div class='del'>-                if (!ev-&gt;next_seq)</div><div class='del'>-                        ev-&gt;next_seq = event-&gt;seq;</div><div class='del'>-                if (ev-&gt;next_seq == event-&gt;seq)</div><div class='del'>-                        pthread_cond_signal (&amp;ev-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ev-&gt;lock);</div><div class='add'>+    /* add event to the ordered event list and wake up listener(s) */</div><div class='add'>+    pthread_mutex_lock(&amp;ev-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_order(&amp;event-&gt;list, &amp;ev-&gt;events, orderfn);</div><div class='add'>+        if (!ev-&gt;next_seq)</div><div class='add'>+            ev-&gt;next_seq = event-&gt;seq;</div><div class='add'>+        if (ev-&gt;next_seq == event-&gt;seq)</div><div class='add'>+            pthread_cond_signal(&amp;ev-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ev-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-queue_unordered_event (struct gf_event_list *ev, struct gf_event *event)</div><div class='add'>+queue_unordered_event(struct gf_event_list *ev, struct gf_event *event)</div><div class='ctx'> {</div><div class='del'>-        /* add event to the tail of the queue and wake up listener(s) */</div><div class='del'>-        pthread_mutex_lock (&amp;ev-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;event-&gt;list, &amp;ev-&gt;events);</div><div class='del'>-                pthread_cond_signal (&amp;ev-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;ev-&gt;lock);</div><div class='add'>+    /* add event to the tail of the queue and wake up listener(s) */</div><div class='add'>+    pthread_mutex_lock(&amp;ev-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;event-&gt;list, &amp;ev-&gt;events);</div><div class='add'>+        pthread_cond_signal(&amp;ev-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ev-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_event_handler (rpcsvc_request_t *req,</div><div class='del'>-                            xlator_t *this, gf_changelog_t *entry)</div><div class='add'>+gf_changelog_event_handler(rpcsvc_request_t *req, xlator_t *this,</div><div class='add'>+                           gf_changelog_t *entry)</div><div class='ctx'> {</div><div class='del'>-        int                   i          = 0;</div><div class='del'>-        size_t                payloadlen = 0;</div><div class='del'>-        ssize_t               len        = 0;</div><div class='del'>-        int                   payloadcnt = 0;</div><div class='del'>-        changelog_event_req   rpc_req    = {0,};</div><div class='del'>-        changelog_event_rsp   rpc_rsp    = {0,};</div><div class='del'>-        struct iovec         *vec        = NULL;</div><div class='del'>-        struct gf_event      *event      = NULL;</div><div class='del'>-        struct gf_event_list *ev         = NULL;</div><div class='del'>-</div><div class='del'>-        ev = &amp;entry-&gt;event;</div><div class='del'>-</div><div class='del'>-        len = xdr_to_generic (req-&gt;msg[0],</div><div class='del'>-                              &amp;rpc_req, (xdrproc_t)xdr_changelog_event_req);</div><div class='del'>-        if (len &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_XDR_DECODING_FAILED,</div><div class='del'>-                        "xdr decoding failed");</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto handle_xdr_error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (len &lt; req-&gt;msg[0].iov_len) {</div><div class='del'>-                payloadcnt = 1;</div><div class='del'>-                payloadlen = (req-&gt;msg[0].iov_len - len);</div><div class='del'>-        }</div><div class='del'>-        for (i = 1; i &lt; req-&gt;count; i++) {</div><div class='del'>-                payloadcnt++;</div><div class='del'>-                payloadlen += req-&gt;msg[i].iov_len;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        event = GF_CALLOC (1, GF_EVENT_CALLOC_SIZE (payloadcnt, payloadlen),</div><div class='del'>-                           gf_changelog_mt_libgfchangelog_event_t);</div><div class='del'>-        if (!event)</div><div class='del'>-                goto handle_xdr_error;</div><div class='del'>-        INIT_LIST_HEAD (&amp;event-&gt;list);</div><div class='del'>-</div><div class='del'>-        payloadlen   = 0;</div><div class='del'>-        event-&gt;seq   = rpc_req.seq;</div><div class='del'>-        event-&gt;count = payloadcnt;</div><div class='del'>-</div><div class='del'>-        /* deep copy IO vectors */</div><div class='del'>-        vec = &amp;event-&gt;iov[0];</div><div class='del'>-        GF_EVENT_ASSIGN_IOVEC (vec, event,</div><div class='del'>-                               (req-&gt;msg[0].iov_len - len), payloadlen);</div><div class='del'>-        (void) memcpy (vec-&gt;iov_base,</div><div class='del'>-                       req-&gt;msg[0].iov_base + len, vec-&gt;iov_len);</div><div class='del'>-</div><div class='del'>-        for (i = 1; i &lt; req-&gt;count; i++) {</div><div class='del'>-                vec = &amp;event-&gt;iov[i];</div><div class='del'>-                GF_EVENT_ASSIGN_IOVEC (vec, event,</div><div class='del'>-                                       req-&gt;msg[i].iov_len, payloadlen);</div><div class='del'>-                (void) memcpy (event-&gt;iov[i].iov_base,</div><div class='del'>-                               req-&gt;msg[i].iov_base, req-&gt;msg[i].iov_len);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "seq: %lu [%s] (time: %lu.%lu), (vec: %d, len: %zd)",</div><div class='del'>-                      rpc_req.seq, entry-&gt;brick, rpc_req.tv_sec,</div><div class='del'>-                      rpc_req.tv_usec, payloadcnt, payloadlen);</div><div class='del'>-</div><div class='del'>-        /* dispatch event */</div><div class='del'>-        entry-&gt;queueevent (ev, event);</div><div class='del'>-</div><div class='del'>-        /* ack sequence number */</div><div class='del'>-        rpc_rsp.op_ret = 0;</div><div class='del'>-        rpc_rsp.seq    = rpc_req.seq;</div><div class='del'>-</div><div class='del'>-        goto submit_rpc;</div><div class='del'>-</div><div class='del'>- handle_xdr_error:</div><div class='del'>-        rpc_rsp.op_ret = -1;</div><div class='del'>-        rpc_rsp.seq    = 0;     /* invalid */</div><div class='del'>- submit_rpc:</div><div class='del'>-        return changelog_rpc_sumbit_reply (req, &amp;rpc_rsp, NULL, 0, NULL,</div><div class='del'>-                                           (xdrproc_t)xdr_changelog_event_rsp);</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t payloadlen = 0;</div><div class='add'>+    ssize_t len = 0;</div><div class='add'>+    int payloadcnt = 0;</div><div class='add'>+    changelog_event_req rpc_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_event_rsp rpc_rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iovec *vec = NULL;</div><div class='add'>+    struct gf_event *event = NULL;</div><div class='add'>+    struct gf_event_list *ev = NULL;</div><div class='add'>+</div><div class='add'>+    ev = &amp;entry-&gt;event;</div><div class='add'>+</div><div class='add'>+    len = xdr_to_generic(req-&gt;msg[0], &amp;rpc_req,</div><div class='add'>+                         (xdrproc_t)xdr_changelog_event_req);</div><div class='add'>+    if (len &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CHANGELOG_LIB_MSG_XDR_DECODING_FAILED, "xdr decoding failed");</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto handle_xdr_error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (len &lt; req-&gt;msg[0].iov_len) {</div><div class='add'>+        payloadcnt = 1;</div><div class='add'>+        payloadlen = (req-&gt;msg[0].iov_len - len);</div><div class='add'>+    }</div><div class='add'>+    for (i = 1; i &lt; req-&gt;count; i++) {</div><div class='add'>+        payloadcnt++;</div><div class='add'>+        payloadlen += req-&gt;msg[i].iov_len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    event = GF_CALLOC(1, GF_EVENT_CALLOC_SIZE(payloadcnt, payloadlen),</div><div class='add'>+                      gf_changelog_mt_libgfchangelog_event_t);</div><div class='add'>+    if (!event)</div><div class='add'>+        goto handle_xdr_error;</div><div class='add'>+    INIT_LIST_HEAD(&amp;event-&gt;list);</div><div class='add'>+</div><div class='add'>+    payloadlen = 0;</div><div class='add'>+    event-&gt;seq = rpc_req.seq;</div><div class='add'>+    event-&gt;count = payloadcnt;</div><div class='add'>+</div><div class='add'>+    /* deep copy IO vectors */</div><div class='add'>+    vec = &amp;event-&gt;iov[0];</div><div class='add'>+    GF_EVENT_ASSIGN_IOVEC(vec, event, (req-&gt;msg[0].iov_len - len), payloadlen);</div><div class='add'>+    (void)memcpy(vec-&gt;iov_base, req-&gt;msg[0].iov_base + len, vec-&gt;iov_len);</div><div class='add'>+</div><div class='add'>+    for (i = 1; i &lt; req-&gt;count; i++) {</div><div class='add'>+        vec = &amp;event-&gt;iov[i];</div><div class='add'>+        GF_EVENT_ASSIGN_IOVEC(vec, event, req-&gt;msg[i].iov_len, payloadlen);</div><div class='add'>+        (void)memcpy(event-&gt;iov[i].iov_base, req-&gt;msg[i].iov_base,</div><div class='add'>+                     req-&gt;msg[i].iov_len);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "seq: %lu [%s] (time: %lu.%lu), (vec: %d, len: %zd)",</div><div class='add'>+                 rpc_req.seq, entry-&gt;brick, rpc_req.tv_sec, rpc_req.tv_usec,</div><div class='add'>+                 payloadcnt, payloadlen);</div><div class='add'>+</div><div class='add'>+    /* dispatch event */</div><div class='add'>+    entry-&gt;queueevent(ev, event);</div><div class='add'>+</div><div class='add'>+    /* ack sequence number */</div><div class='add'>+    rpc_rsp.op_ret = 0;</div><div class='add'>+    rpc_rsp.seq = rpc_req.seq;</div><div class='add'>+</div><div class='add'>+    goto submit_rpc;</div><div class='add'>+</div><div class='add'>+handle_xdr_error:</div><div class='add'>+    rpc_rsp.op_ret = -1;</div><div class='add'>+    rpc_rsp.seq = 0; /* invalid */</div><div class='add'>+submit_rpc:</div><div class='add'>+    return changelog_rpc_sumbit_reply(req, &amp;rpc_rsp, NULL, 0, NULL,</div><div class='add'>+                                      (xdrproc_t)xdr_changelog_event_rsp);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_reborp_handle_event (rpcsvc_request_t *req)</div><div class='add'>+gf_changelog_reborp_handle_event(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        xlator_t       *this  = NULL;</div><div class='del'>-        rpcsvc_t       *svc   = NULL;</div><div class='del'>-        gf_changelog_t *entry = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    gf_changelog_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        svc = rpcsvc_request_service (req);</div><div class='del'>-        entry = svc-&gt;mydata;</div><div class='add'>+    svc = rpcsvc_request_service(req);</div><div class='add'>+    entry = svc-&gt;mydata;</div><div class='ctx'> </div><div class='del'>-        this = THIS = entry-&gt;this;</div><div class='add'>+    this = THIS = entry-&gt;this;</div><div class='ctx'> </div><div class='del'>-        return gf_changelog_event_handler (req, this, entry);</div><div class='add'>+    return gf_changelog_event_handler(req, this, entry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_actor_t gf_changelog_reborp_actors[CHANGELOG_REV_PROC_MAX] = {</div><div class='del'>-        [CHANGELOG_REV_PROC_EVENT] = {</div><div class='del'>-                "CHANGELOG EVENT HANDLER", CHANGELOG_REV_PROC_EVENT,</div><div class='del'>-                gf_changelog_reborp_handle_event, NULL, 0, DRC_NA</div><div class='del'>-        },</div><div class='add'>+    [CHANGELOG_REV_PROC_EVENT] = {"CHANGELOG EVENT HANDLER",</div><div class='add'>+                                  CHANGELOG_REV_PROC_EVENT,</div><div class='add'>+                                  gf_changelog_reborp_handle_event, NULL, 0,</div><div class='add'>+                                  DRC_NA},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -418,15 +403,15 @@ rpcsvc_actor_t gf_changelog_reborp_actors[CHANGELOG_REV_PROC_MAX] = {</div><div class='ctx'>  * brick path and it's private data.</div><div class='ctx'>  */</div><div class='ctx'> struct rpcsvc_program gf_changelog_reborp_prog = {</div><div class='del'>-        .progname  = "LIBGFCHANGELOG REBORP",</div><div class='del'>-        .prognum   = CHANGELOG_REV_RPC_PROCNUM,</div><div class='del'>-        .progver   = CHANGELOG_REV_RPC_PROCVER,</div><div class='del'>-        .numactors = CHANGELOG_REV_PROC_MAX,</div><div class='del'>-        .actors    = gf_changelog_reborp_actors,</div><div class='del'>-        .synctask  = _gf_false,</div><div class='add'>+    .progname = "LIBGFCHANGELOG REBORP",</div><div class='add'>+    .prognum = CHANGELOG_REV_RPC_PROCNUM,</div><div class='add'>+    .progver = CHANGELOG_REV_RPC_PROCVER,</div><div class='add'>+    .numactors = CHANGELOG_REV_PROC_MAX,</div><div class='add'>+    .actors = gf_changelog_reborp_actors,</div><div class='add'>+    .synctask = _gf_false,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpcsvc_program *gf_changelog_reborp_programs[] = {</div><div class='del'>-        &amp;gf_changelog_reborp_prog,</div><div class='del'>-        NULL,</div><div class='add'>+    &amp;gf_changelog_reborp_prog,</div><div class='add'>+    NULL,</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-changelog-rpc.c b/xlators/features/changelog/lib/src/gf-changelog-rpc.c<br/>index 7eb5416ae98..8ec6ffbcebc 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-rpc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-changelog-rpc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog-rpc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog-rpc.c</a></div><div class='hunk'>@@ -16,31 +16,32 @@ struct rpc_clnt_program gf_changelog_clnt;</div><div class='ctx'> </div><div class='ctx'> /* TODO: piggyback reconnect to called (upcall) */</div><div class='ctx'> int</div><div class='del'>-gf_changelog_rpc_notify (struct rpc_clnt *rpc,</div><div class='del'>-                         void *mydata, rpc_clnt_event_t event, void *data)</div><div class='add'>+gf_changelog_rpc_notify(struct rpc_clnt *rpc, void *mydata,</div><div class='add'>+                        rpc_clnt_event_t event, void *data)</div><div class='ctx'> {</div><div class='del'>-        switch (event) {</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case RPC_CLNT_CONNECT:</div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case RPC_CLNT_DISCONNECT:</div><div class='ctx'>         case RPC_CLNT_MSG:</div><div class='ctx'>         case RPC_CLNT_DESTROY:</div><div class='ctx'>         case RPC_CLNT_PING:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-gf_changelog_rpc_init (xlator_t *this, gf_changelog_t *entry)</div><div class='add'>+gf_changelog_rpc_init(xlator_t *this, gf_changelog_t *entry)</div><div class='ctx'> {</div><div class='del'>-        char sockfile[UNIX_PATH_MAX] = {0,};</div><div class='add'>+    char sockfile[UNIX_PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_MAKE_SOCKET_PATH (entry-&gt;brick,</div><div class='del'>-                                    sockfile, UNIX_PATH_MAX);</div><div class='del'>-        return changelog_rpc_client_init (this, entry,</div><div class='del'>-                                          sockfile, gf_changelog_rpc_notify);</div><div class='add'>+    CHANGELOG_MAKE_SOCKET_PATH(entry-&gt;brick, sockfile, UNIX_PATH_MAX);</div><div class='add'>+    return changelog_rpc_client_init(this, entry, sockfile,</div><div class='add'>+                                     gf_changelog_rpc_notify);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -48,51 +49,50 @@ gf_changelog_rpc_init (xlator_t *this, gf_changelog_t *entry)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_probe_changelog_cbk (struct rpc_req *req,</div><div class='del'>-                        struct iovec *iovec, int count, void *myframe)</div><div class='add'>+gf_probe_changelog_cbk(struct rpc_req *req, struct iovec *iovec, int count,</div><div class='add'>+                       void *myframe)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_probe_changelog_filter (call_frame_t *frame, xlator_t *this, void *data)</div><div class='add'>+gf_probe_changelog_filter(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        char *sock = NULL;</div><div class='del'>-        gf_changelog_t *entry = NULL;</div><div class='del'>-        changelog_probe_req req = {0,};</div><div class='del'>-</div><div class='del'>-        entry = data;</div><div class='del'>-        sock = RPC_SOCK (entry);</div><div class='del'>-</div><div class='del'>-        (void) memcpy (&amp;req.sock, sock, strlen (sock));</div><div class='del'>-        req.filter = entry-&gt;notify;</div><div class='del'>-</div><div class='del'>-        /* invoke RPC */</div><div class='del'>-        return changelog_rpc_sumbit_req (RPC_PROBER (entry), (void *) &amp;req,</div><div class='del'>-                                         frame, &amp;gf_changelog_clnt,</div><div class='del'>-                                         CHANGELOG_RPC_PROBE_FILTER, NULL, 0,</div><div class='del'>-                                         NULL, this, gf_probe_changelog_cbk,</div><div class='del'>-                                         (xdrproc_t) xdr_changelog_probe_req);</div><div class='add'>+    char *sock = NULL;</div><div class='add'>+    gf_changelog_t *entry = NULL;</div><div class='add'>+    changelog_probe_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    entry = data;</div><div class='add'>+    sock = RPC_SOCK(entry);</div><div class='add'>+</div><div class='add'>+    (void)memcpy(&amp;req.sock, sock, strlen(sock));</div><div class='add'>+    req.filter = entry-&gt;notify;</div><div class='add'>+</div><div class='add'>+    /* invoke RPC */</div><div class='add'>+    return changelog_rpc_sumbit_req(</div><div class='add'>+        RPC_PROBER(entry), (void *)&amp;req, frame, &amp;gf_changelog_clnt,</div><div class='add'>+        CHANGELOG_RPC_PROBE_FILTER, NULL, 0, NULL, this, gf_probe_changelog_cbk,</div><div class='add'>+        (xdrproc_t)xdr_changelog_probe_req);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_invoke_rpc (xlator_t *this, gf_changelog_t *entry, int procidx)</div><div class='add'>+gf_changelog_invoke_rpc(xlator_t *this, gf_changelog_t *entry, int procidx)</div><div class='ctx'> {</div><div class='del'>-        return changelog_invoke_rpc (this, RPC_PROBER (entry),</div><div class='del'>-                                     &amp;gf_changelog_clnt, procidx, entry);</div><div class='add'>+    return changelog_invoke_rpc(this, RPC_PROBER(entry), &amp;gf_changelog_clnt,</div><div class='add'>+                                procidx, entry);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_procedure gf_changelog_procs[CHANGELOG_RPC_PROC_MAX] = {</div><div class='del'>-        [CHANGELOG_RPC_PROC_NULL] = {"NULL", NULL},</div><div class='del'>-        [CHANGELOG_RPC_PROBE_FILTER] = {</div><div class='del'>-                "PROBE FILTER", gf_probe_changelog_filter</div><div class='del'>-        },</div><div class='add'>+    [CHANGELOG_RPC_PROC_NULL] = {"NULL", NULL},</div><div class='add'>+    [CHANGELOG_RPC_PROBE_FILTER] = {"PROBE FILTER", gf_probe_changelog_filter},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_program gf_changelog_clnt = {</div><div class='del'>-        .progname  = "LIBGFCHANGELOG",</div><div class='del'>-        .prognum   = CHANGELOG_RPC_PROGNUM,</div><div class='del'>-        .progver   = CHANGELOG_RPC_PROGVER,</div><div class='del'>-        .numproc   = CHANGELOG_RPC_PROC_MAX,</div><div class='del'>-        .proctable = gf_changelog_procs,</div><div class='add'>+    .progname = "LIBGFCHANGELOG",</div><div class='add'>+    .prognum = CHANGELOG_RPC_PROGNUM,</div><div class='add'>+    .progver = CHANGELOG_RPC_PROGVER,</div><div class='add'>+    .numproc = CHANGELOG_RPC_PROC_MAX,</div><div class='add'>+    .proctable = gf_changelog_procs,</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-changelog.c b/xlators/features/changelog/lib/src/gf-changelog.c<br/>index 8198560e736..c7791c62950 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-changelog.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-changelog.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-changelog.c</a></div><div class='hunk'>@@ -45,291 +45,291 @@</div><div class='ctx'>  */</div><div class='ctx'> xlator_t *master = NULL;</div><div class='ctx'> </div><div class='del'>-static inline</div><div class='del'>-gf_private_t *gf_changelog_alloc_priv ()</div><div class='add'>+static inline gf_private_t *</div><div class='add'>+gf_changelog_alloc_priv()</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        gf_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_changelog_mt_priv_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto error_return;</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;connections);</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;cleanups);</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_init (&amp;priv-&gt;lock, NULL);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto free_priv;</div><div class='del'>-        ret = pthread_cond_init (&amp;priv-&gt;cond, NULL);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_mutex;</div><div class='del'>-</div><div class='del'>-        priv-&gt;api = NULL;</div><div class='del'>-        return priv;</div><div class='del'>-</div><div class='del'>- cleanup_mutex:</div><div class='del'>-        (void) pthread_mutex_destroy (&amp;priv-&gt;lock);</div><div class='del'>- free_priv:</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_changelog_mt_priv_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto error_return;</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;connections);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;cleanups);</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_init(&amp;priv-&gt;lock, NULL);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto free_priv;</div><div class='add'>+    ret = pthread_cond_init(&amp;priv-&gt;cond, NULL);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_mutex;</div><div class='add'>+</div><div class='add'>+    priv-&gt;api = NULL;</div><div class='add'>+    return priv;</div><div class='add'>+</div><div class='add'>+cleanup_mutex:</div><div class='add'>+    (void)pthread_mutex_destroy(&amp;priv-&gt;lock);</div><div class='add'>+free_priv:</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define GF_CHANGELOG_EVENT_POOL_SIZE   16384</div><div class='add'>+#define GF_CHANGELOG_EVENT_POOL_SIZE 16384</div><div class='ctx'> #define GF_CHANGELOG_EVENT_THREAD_COUNT 4</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_ctx_defaults_init (glusterfs_ctx_t *ctx)</div><div class='add'>+gf_changelog_ctx_defaults_init(glusterfs_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        cmd_args_t    *cmd_args = NULL;</div><div class='del'>-        struct rlimit  lim = {0, };</div><div class='del'>-        call_pool_t   *pool = NULL;</div><div class='del'>-        int            ret         = -1;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (THIS, gf_changelog_mt_end);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                return -1;</div><div class='add'>+    cmd_args_t *cmd_args = NULL;</div><div class='add'>+    struct rlimit lim = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_pool_t *pool = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ret = xlator_mem_acct_init(THIS, gf_changelog_mt_end);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;process_uuid = generate_glusterfs_ctx_id ();</div><div class='del'>-        if (!ctx-&gt;process_uuid)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;process_uuid = generate_glusterfs_ctx_id();</div><div class='add'>+    if (!ctx-&gt;process_uuid)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;page_size  = 128 * GF_UNIT_KB;</div><div class='add'>+    ctx-&gt;page_size = 128 * GF_UNIT_KB;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;iobuf_pool = iobuf_pool_new ();</div><div class='del'>-        if (!ctx-&gt;iobuf_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;iobuf_pool = iobuf_pool_new();</div><div class='add'>+    if (!ctx-&gt;iobuf_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;event_pool = event_pool_new (GF_CHANGELOG_EVENT_POOL_SIZE,</div><div class='del'>-                                          GF_CHANGELOG_EVENT_THREAD_COUNT);</div><div class='del'>-        if (!ctx-&gt;event_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;event_pool = event_pool_new(GF_CHANGELOG_EVENT_POOL_SIZE,</div><div class='add'>+                                     GF_CHANGELOG_EVENT_THREAD_COUNT);</div><div class='add'>+    if (!ctx-&gt;event_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        pool = GF_CALLOC (1, sizeof (call_pool_t),</div><div class='del'>-                          gf_changelog_mt_libgfchangelog_call_pool_t);</div><div class='del'>-        if (!pool)</div><div class='del'>-                return -1;</div><div class='add'>+    pool = GF_CALLOC(1, sizeof(call_pool_t),</div><div class='add'>+                     gf_changelog_mt_libgfchangelog_call_pool_t);</div><div class='add'>+    if (!pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        /* frame_mem_pool size 112 * 64 */</div><div class='del'>-        pool-&gt;frame_mem_pool = mem_pool_new (call_frame_t, 32);</div><div class='del'>-        if (!pool-&gt;frame_mem_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    /* frame_mem_pool size 112 * 64 */</div><div class='add'>+    pool-&gt;frame_mem_pool = mem_pool_new(call_frame_t, 32);</div><div class='add'>+    if (!pool-&gt;frame_mem_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        /* stack_mem_pool size 256 * 128 */</div><div class='del'>-        pool-&gt;stack_mem_pool = mem_pool_new (call_stack_t, 16);</div><div class='add'>+    /* stack_mem_pool size 256 * 128 */</div><div class='add'>+    pool-&gt;stack_mem_pool = mem_pool_new(call_stack_t, 16);</div><div class='ctx'> </div><div class='del'>-        if (!pool-&gt;stack_mem_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!pool-&gt;stack_mem_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;stub_mem_pool = mem_pool_new (call_stub_t, 16);</div><div class='del'>-        if (!ctx-&gt;stub_mem_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;stub_mem_pool = mem_pool_new(call_stub_t, 16);</div><div class='add'>+    if (!ctx-&gt;stub_mem_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;dict_pool = mem_pool_new (dict_t, 32);</div><div class='del'>-        if (!ctx-&gt;dict_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;dict_pool = mem_pool_new(dict_t, 32);</div><div class='add'>+    if (!ctx-&gt;dict_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;dict_pair_pool = mem_pool_new (data_pair_t, 512);</div><div class='del'>-        if (!ctx-&gt;dict_pair_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;dict_pair_pool = mem_pool_new(data_pair_t, 512);</div><div class='add'>+    if (!ctx-&gt;dict_pair_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;dict_data_pool = mem_pool_new (data_t, 512);</div><div class='del'>-        if (!ctx-&gt;dict_data_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;dict_data_pool = mem_pool_new(data_t, 512);</div><div class='add'>+    if (!ctx-&gt;dict_data_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;logbuf_pool = mem_pool_new (log_buf_t, 256);</div><div class='del'>-        if (!ctx-&gt;logbuf_pool)</div><div class='del'>-                return -1;</div><div class='add'>+    ctx-&gt;logbuf_pool = mem_pool_new(log_buf_t, 256);</div><div class='add'>+    if (!ctx-&gt;logbuf_pool)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;pool-&gt;all_frames);</div><div class='del'>-        LOCK_INIT (&amp;pool-&gt;lock);</div><div class='del'>-        ctx-&gt;pool = pool;</div><div class='add'>+    INIT_LIST_HEAD(&amp;pool-&gt;all_frames);</div><div class='add'>+    LOCK_INIT(&amp;pool-&gt;lock);</div><div class='add'>+    ctx-&gt;pool = pool;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;ctx-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='add'>+    cmd_args = &amp;ctx-&gt;cmd_args;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;cmd_args-&gt;xlator_options);</div><div class='add'>+    INIT_LIST_HEAD(&amp;cmd_args-&gt;xlator_options);</div><div class='ctx'> </div><div class='del'>-        lim.rlim_cur = RLIM_INFINITY;</div><div class='del'>-        lim.rlim_max = RLIM_INFINITY;</div><div class='del'>-        setrlimit (RLIMIT_CORE, &amp;lim);</div><div class='add'>+    lim.rlim_cur = RLIM_INFINITY;</div><div class='add'>+    lim.rlim_max = RLIM_INFINITY;</div><div class='add'>+    setrlimit(RLIMIT_CORE, &amp;lim);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: cleanup ctx defaults */</div><div class='ctx'> void</div><div class='del'>-gf_changelog_cleanup_this (xlator_t *this)</div><div class='add'>+gf_changelog_cleanup_this(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return;</div><div class='add'>+    if (!this)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ctx = this-&gt;ctx;</div><div class='del'>-        syncenv_destroy (ctx-&gt;env);</div><div class='del'>-        free (ctx);</div><div class='add'>+    ctx = this-&gt;ctx;</div><div class='add'>+    syncenv_destroy(ctx-&gt;env);</div><div class='add'>+    free(ctx);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        this-&gt;ctx = NULL;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    this-&gt;ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        mem_pools_fini ();</div><div class='add'>+    mem_pools_fini();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_init_context ()</div><div class='add'>+gf_changelog_init_context()</div><div class='ctx'> {</div><div class='del'>-        glusterfs_ctx_t *ctx = NULL;</div><div class='add'>+    glusterfs_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = glusterfs_ctx_new ();</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto error_return;</div><div class='add'>+    ctx = glusterfs_ctx_new();</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        if (glusterfs_globals_init (ctx))</div><div class='del'>-                goto free_ctx;</div><div class='add'>+    if (glusterfs_globals_init(ctx))</div><div class='add'>+        goto free_ctx;</div><div class='ctx'> </div><div class='del'>-        THIS-&gt;ctx = ctx;</div><div class='del'>-        if (gf_changelog_ctx_defaults_init (ctx))</div><div class='del'>-                goto free_ctx;</div><div class='add'>+    THIS-&gt;ctx = ctx;</div><div class='add'>+    if (gf_changelog_ctx_defaults_init(ctx))</div><div class='add'>+        goto free_ctx;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;env = syncenv_new (0, 0, 0);</div><div class='del'>-        if (!ctx-&gt;env)</div><div class='del'>-                goto free_ctx;</div><div class='del'>-        return 0;</div><div class='add'>+    ctx-&gt;env = syncenv_new(0, 0, 0);</div><div class='add'>+    if (!ctx-&gt;env)</div><div class='add'>+        goto free_ctx;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- free_ctx:</div><div class='del'>-        free (ctx);</div><div class='del'>-        THIS-&gt;ctx = NULL;</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+free_ctx:</div><div class='add'>+    free(ctx);</div><div class='add'>+    THIS-&gt;ctx = NULL;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_init_master ()</div><div class='add'>+gf_changelog_init_master()</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        mem_pools_init_early ();</div><div class='del'>-        ret = gf_changelog_init_context ();</div><div class='del'>-        mem_pools_init_late ();</div><div class='add'>+    mem_pools_init_early();</div><div class='add'>+    ret = gf_changelog_init_context();</div><div class='add'>+    mem_pools_init_late();</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* TODO: cleanup clnt/svc on failure */</div><div class='ctx'> int</div><div class='del'>-gf_changelog_setup_rpc (xlator_t *this,</div><div class='del'>-                        gf_changelog_t *entry, int proc)</div><div class='add'>+gf_changelog_setup_rpc(xlator_t *this, gf_changelog_t *entry, int proc)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        rpcsvc_t        *svc = NULL;</div><div class='del'>-        struct rpc_clnt *rpc = NULL;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Initialize a connect back socket. A probe() RPC call to the server</div><div class='del'>-         * triggers a reverse connect.</div><div class='del'>-         */</div><div class='del'>-        svc = gf_changelog_reborp_init_rpc_listner (this, entry-&gt;brick,</div><div class='del'>-                                                    RPC_SOCK (entry), entry);</div><div class='del'>-        if (!svc)</div><div class='del'>-                goto error_return;</div><div class='del'>-        RPC_REBORP (entry) = svc;</div><div class='del'>-</div><div class='del'>-        /* Initialize an RPC client */</div><div class='del'>-        rpc = gf_changelog_rpc_init (this, entry);</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto error_return;</div><div class='del'>-        RPC_PROBER (entry) = rpc;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * @FIXME</div><div class='del'>-         * till we have connection state machine, let's delay the RPC call</div><div class='del'>-         * for now..</div><div class='del'>-         */</div><div class='del'>-        sleep (2);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * Probe changelog translator for reverse connection. After a successful</div><div class='del'>-         * call, there's less use of the client and can be disconnected, but</div><div class='del'>-         * let's leave the connection active for any future RPC calls.</div><div class='del'>-         */</div><div class='del'>-        ret = gf_changelog_invoke_rpc (this, entry, proc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_LIB_MSG_INVOKE_RPC_FAILED,</div><div class='del'>-                        "Could not initiate probe RPC, bailing out!!!");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Initialize a connect back socket. A probe() RPC call to the server</div><div class='add'>+     * triggers a reverse connect.</div><div class='add'>+     */</div><div class='add'>+    svc = gf_changelog_reborp_init_rpc_listner(this, entry-&gt;brick,</div><div class='add'>+                                               RPC_SOCK(entry), entry);</div><div class='add'>+    if (!svc)</div><div class='add'>+        goto error_return;</div><div class='add'>+    RPC_REBORP(entry) = svc;</div><div class='add'>+</div><div class='add'>+    /* Initialize an RPC client */</div><div class='add'>+    rpc = gf_changelog_rpc_init(this, entry);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto error_return;</div><div class='add'>+    RPC_PROBER(entry) = rpc;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * @FIXME</div><div class='add'>+     * till we have connection state machine, let's delay the RPC call</div><div class='add'>+     * for now..</div><div class='add'>+     */</div><div class='add'>+    sleep(2);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Probe changelog translator for reverse connection. After a successful</div><div class='add'>+     * call, there's less use of the client and can be disconnected, but</div><div class='add'>+     * let's leave the connection active for any future RPC calls.</div><div class='add'>+     */</div><div class='add'>+    ret = gf_changelog_invoke_rpc(this, entry, proc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_INVOKE_RPC_FAILED,</div><div class='add'>+               "Could not initiate probe RPC, bailing out!!!");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cleanup_event (xlator_t *this, struct gf_event_list *ev)</div><div class='add'>+gf_cleanup_event(xlator_t *this, struct gf_event_list *ev)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_cleanup (this, ev-&gt;invoker);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='del'>-                        CHANGELOG_LIB_MSG_CLEANUP_ERROR,</div><div class='del'>-                        "cannot cleanup callback invoker thread."</div><div class='del'>-                        " Not freeing resources");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_cleanup(this, ev-&gt;invoker);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, -ret,</div><div class='add'>+               CHANGELOG_LIB_MSG_CLEANUP_ERROR,</div><div class='add'>+               "cannot cleanup callback invoker thread."</div><div class='add'>+               " Not freeing resources");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ev-&gt;entry = NULL;</div><div class='add'>+    ev-&gt;entry = NULL;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_init_event (gf_changelog_t *entry)</div><div class='add'>+gf_init_event(gf_changelog_t *entry)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        struct gf_event_list *ev = NULL;</div><div class='del'>-</div><div class='del'>-        ev = &amp;entry-&gt;event;</div><div class='del'>-        ev-&gt;entry = entry;</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_init (&amp;ev-&gt;lock, NULL);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='del'>-        ret = pthread_cond_init (&amp;ev-&gt;cond, NULL);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_mutex;</div><div class='del'>-        INIT_LIST_HEAD (&amp;ev-&gt;events);</div><div class='del'>-</div><div class='del'>-        ev-&gt;next_seq = 0;  /* bootstrap sequencing */</div><div class='del'>-</div><div class='del'>-        if (GF_NEED_ORDERED_EVENTS (entry)) {</div><div class='del'>-                entry-&gt;pickevent  = pick_event_ordered;</div><div class='del'>-                entry-&gt;queueevent = queue_ordered_event;</div><div class='del'>-        } else {</div><div class='del'>-                entry-&gt;pickevent  = pick_event_unordered;</div><div class='del'>-                entry-&gt;queueevent = queue_unordered_event;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;ev-&gt;invoker, NULL,</div><div class='del'>-                                gf_changelog_callback_invoker, ev, "clogcbki");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                entry-&gt;pickevent = NULL;</div><div class='del'>-                entry-&gt;queueevent = NULL;</div><div class='del'>-                goto cleanup_cond;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- cleanup_cond:</div><div class='del'>-        (void) pthread_cond_destroy (&amp;ev-&gt;cond);</div><div class='del'>- cleanup_mutex:</div><div class='del'>-        (void) pthread_mutex_destroy (&amp;ev-&gt;lock);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct gf_event_list *ev = NULL;</div><div class='add'>+</div><div class='add'>+    ev = &amp;entry-&gt;event;</div><div class='add'>+    ev-&gt;entry = entry;</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_init(&amp;ev-&gt;lock, NULL);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='add'>+    ret = pthread_cond_init(&amp;ev-&gt;cond, NULL);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_mutex;</div><div class='add'>+    INIT_LIST_HEAD(&amp;ev-&gt;events);</div><div class='add'>+</div><div class='add'>+    ev-&gt;next_seq = 0; /* bootstrap sequencing */</div><div class='add'>+</div><div class='add'>+    if (GF_NEED_ORDERED_EVENTS(entry)) {</div><div class='add'>+        entry-&gt;pickevent = pick_event_ordered;</div><div class='add'>+        entry-&gt;queueevent = queue_ordered_event;</div><div class='add'>+    } else {</div><div class='add'>+        entry-&gt;pickevent = pick_event_unordered;</div><div class='add'>+        entry-&gt;queueevent = queue_unordered_event;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;ev-&gt;invoker, NULL, gf_changelog_callback_invoker,</div><div class='add'>+                           ev, "clogcbki");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        entry-&gt;pickevent = NULL;</div><div class='add'>+        entry-&gt;queueevent = NULL;</div><div class='add'>+        goto cleanup_cond;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_cond:</div><div class='add'>+    (void)pthread_cond_destroy(&amp;ev-&gt;cond);</div><div class='add'>+cleanup_mutex:</div><div class='add'>+    (void)pthread_mutex_destroy(&amp;ev-&gt;lock);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -339,251 +339,242 @@ gf_init_event (gf_changelog_t *entry)</div><div class='ctx'>  *  - destroy rpc{-clnt, svc}</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_cleanup_brick_connection (xlator_t *this, gf_changelog_t *entry)</div><div class='add'>+gf_cleanup_brick_connection(xlator_t *this, gf_changelog_t *entry)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_cleanup_connections (xlator_t *this)</div><div class='add'>+gf_cleanup_connections(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_setup_brick_connection (xlator_t *this,</div><div class='del'>-                           struct gf_brick_spec *brick,</div><div class='del'>-                           gf_boolean_t ordered, void *xl)</div><div class='add'>+gf_setup_brick_connection(xlator_t *this, struct gf_brick_spec *brick,</div><div class='add'>+                          gf_boolean_t ordered, void *xl)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        gf_private_t *priv = NULL;</div><div class='del'>-        gf_changelog_t *entry = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!brick-&gt;callback || !brick-&gt;init || !brick-&gt;fini)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        entry = GF_CALLOC (1, sizeof (*entry),</div><div class='del'>-                           gf_changelog_mt_libgfchangelog_t);</div><div class='del'>-        if (!entry)</div><div class='del'>-                goto error_return;</div><div class='del'>-        INIT_LIST_HEAD (&amp;entry-&gt;list);</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;entry-&gt;statelock);</div><div class='del'>-        entry-&gt;connstate = GF_CHANGELOG_CONN_STATE_PENDING;</div><div class='del'>-</div><div class='del'>-        entry-&gt;notify = brick-&gt;filter;</div><div class='del'>-        if (snprintf (entry-&gt;brick, PATH_MAX, "%s", brick-&gt;brick_path)</div><div class='del'>-            &gt;= PATH_MAX)</div><div class='del'>-                goto free_entry;</div><div class='del'>-</div><div class='del'>-        entry-&gt;this = this;</div><div class='del'>-        entry-&gt;invokerxl = xl;</div><div class='del'>-</div><div class='del'>-        entry-&gt;ordered = ordered;</div><div class='del'>-        ret = gf_init_event (entry);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto free_entry;</div><div class='del'>-</div><div class='del'>-        entry-&gt;fini         = brick-&gt;fini;</div><div class='del'>-        entry-&gt;callback     = brick-&gt;callback;</div><div class='del'>-        entry-&gt;connected    = brick-&gt;connected;</div><div class='del'>-        entry-&gt;disconnected = brick-&gt;disconnected;</div><div class='del'>-</div><div class='del'>-        entry-&gt;ptr = brick-&gt;init (this, brick);</div><div class='del'>-        if (!entry-&gt;ptr)</div><div class='del'>-                goto cleanup_event;</div><div class='del'>-        priv-&gt;api = entry-&gt;ptr;  /* pointer to API, if required */</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;entry-&gt;list, &amp;priv-&gt;connections);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        ret = gf_changelog_setup_rpc (this, entry, CHANGELOG_RPC_PROBE_FILTER);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_event;</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- cleanup_event:</div><div class='del'>-        (void) gf_cleanup_event (this, &amp;entry-&gt;event);</div><div class='del'>- free_entry:</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "freeing entry %p", entry);</div><div class='del'>-        list_del (&amp;entry-&gt;list); /* FIXME: kludge for now */</div><div class='del'>-        GF_FREE (entry);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_private_t *priv = NULL;</div><div class='add'>+    gf_changelog_t *entry = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (!brick-&gt;callback || !brick-&gt;init || !brick-&gt;fini)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    entry = GF_CALLOC(1, sizeof(*entry), gf_changelog_mt_libgfchangelog_t);</div><div class='add'>+    if (!entry)</div><div class='add'>+        goto error_return;</div><div class='add'>+    INIT_LIST_HEAD(&amp;entry-&gt;list);</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;entry-&gt;statelock);</div><div class='add'>+    entry-&gt;connstate = GF_CHANGELOG_CONN_STATE_PENDING;</div><div class='add'>+</div><div class='add'>+    entry-&gt;notify = brick-&gt;filter;</div><div class='add'>+    if (snprintf(entry-&gt;brick, PATH_MAX, "%s", brick-&gt;brick_path) &gt;= PATH_MAX)</div><div class='add'>+        goto free_entry;</div><div class='add'>+</div><div class='add'>+    entry-&gt;this = this;</div><div class='add'>+    entry-&gt;invokerxl = xl;</div><div class='add'>+</div><div class='add'>+    entry-&gt;ordered = ordered;</div><div class='add'>+    ret = gf_init_event(entry);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto free_entry;</div><div class='add'>+</div><div class='add'>+    entry-&gt;fini = brick-&gt;fini;</div><div class='add'>+    entry-&gt;callback = brick-&gt;callback;</div><div class='add'>+    entry-&gt;connected = brick-&gt;connected;</div><div class='add'>+    entry-&gt;disconnected = brick-&gt;disconnected;</div><div class='add'>+</div><div class='add'>+    entry-&gt;ptr = brick-&gt;init(this, brick);</div><div class='add'>+    if (!entry-&gt;ptr)</div><div class='add'>+        goto cleanup_event;</div><div class='add'>+    priv-&gt;api = entry-&gt;ptr; /* pointer to API, if required */</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;entry-&gt;list, &amp;priv-&gt;connections);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    ret = gf_changelog_setup_rpc(this, entry, CHANGELOG_RPC_PROBE_FILTER);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_event;</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_event:</div><div class='add'>+    (void)gf_cleanup_event(this, &amp;entry-&gt;event);</div><div class='add'>+free_entry:</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "freeing entry %p", entry);</div><div class='add'>+    list_del(&amp;entry-&gt;list); /* FIXME: kludge for now */</div><div class='add'>+    GF_FREE(entry);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_register_brick (xlator_t *this,</div><div class='del'>-                             struct gf_brick_spec *brick,</div><div class='del'>-                             gf_boolean_t ordered, void *xl)</div><div class='add'>+gf_changelog_register_brick(xlator_t *this, struct gf_brick_spec *brick,</div><div class='add'>+                            gf_boolean_t ordered, void *xl)</div><div class='ctx'> {</div><div class='del'>-        return gf_setup_brick_connection (this, brick, ordered, xl);</div><div class='add'>+    return gf_setup_brick_connection(this, brick, ordered, xl);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_setup_logging (xlator_t *this, char *logfile, int loglevel)</div><div class='add'>+gf_changelog_setup_logging(xlator_t *this, char *logfile, int loglevel)</div><div class='ctx'> {</div><div class='del'>-        /* passing ident as NULL means to use default ident for syslog */</div><div class='del'>-        if (gf_log_init (this-&gt;ctx, logfile, NULL))</div><div class='del'>-                return -1;</div><div class='add'>+    /* passing ident as NULL means to use default ident for syslog */</div><div class='add'>+    if (gf_log_init(this-&gt;ctx, logfile, NULL))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        gf_log_set_loglevel (this-&gt;ctx, (loglevel == -1) ? GF_LOG_INFO :</div><div class='del'>-                             loglevel);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_log_set_loglevel(this-&gt;ctx, (loglevel == -1) ? GF_LOG_INFO : loglevel);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-gf_changelog_set_master (xlator_t *master, void *xl)</div><div class='add'>+gf_changelog_set_master(xlator_t *master, void *xl)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        xlator_t *old_this = NULL;</div><div class='del'>-        gf_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        this = xl;</div><div class='del'>-        if (!this || !this-&gt;ctx) {</div><div class='del'>-                ret = gf_changelog_init_master ();</div><div class='del'>-                if (ret)</div><div class='del'>-                        return -1;</div><div class='del'>-                this = THIS;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *old_this = NULL;</div><div class='add'>+    gf_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    this = xl;</div><div class='add'>+    if (!this || !this-&gt;ctx) {</div><div class='add'>+        ret = gf_changelog_init_master();</div><div class='add'>+        if (ret)</div><div class='add'>+            return -1;</div><div class='add'>+        this = THIS;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        master-&gt;ctx = this-&gt;ctx;</div><div class='add'>+    master-&gt;ctx = this-&gt;ctx;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;master-&gt;volume_options);</div><div class='del'>-        SAVE_THIS (THIS);</div><div class='add'>+    INIT_LIST_HEAD(&amp;master-&gt;volume_options);</div><div class='add'>+    SAVE_THIS(THIS);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (THIS, gf_changelog_mt_end);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto restore_this;</div><div class='add'>+    ret = xlator_mem_acct_init(THIS, gf_changelog_mt_end);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto restore_this;</div><div class='ctx'> </div><div class='del'>-        priv = gf_changelog_alloc_priv ();</div><div class='del'>-        if (!priv) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto restore_this;</div><div class='del'>-        }</div><div class='add'>+    priv = gf_changelog_alloc_priv();</div><div class='add'>+    if (!priv) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto restore_this;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!xl) {</div><div class='del'>-                /* poller thread */</div><div class='del'>-                ret = gf_thread_create (&amp;priv-&gt;poller,</div><div class='del'>-                                        NULL, changelog_rpc_poller, THIS,</div><div class='del'>-                                        "clogpoll");</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        GF_FREE (priv);</div><div class='del'>-                        gf_msg (master-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_LIB_MSG_THREAD_CREATION_FAILED,</div><div class='del'>-                                "failed to spawn poller thread");</div><div class='del'>-                        goto restore_this;</div><div class='del'>-                }</div><div class='add'>+    if (!xl) {</div><div class='add'>+        /* poller thread */</div><div class='add'>+        ret = gf_thread_create(&amp;priv-&gt;poller, NULL, changelog_rpc_poller, THIS,</div><div class='add'>+                               "clogpoll");</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(priv);</div><div class='add'>+            gf_msg(master-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CHANGELOG_LIB_MSG_THREAD_CREATION_FAILED,</div><div class='add'>+                   "failed to spawn poller thread");</div><div class='add'>+            goto restore_this;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        master-&gt;private = priv;</div><div class='add'>+    master-&gt;private = priv;</div><div class='ctx'> </div><div class='del'>- restore_this:</div><div class='del'>-        RESTORE_THIS ();</div><div class='add'>+restore_this:</div><div class='add'>+    RESTORE_THIS();</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_init (void *xl)</div><div class='add'>+gf_changelog_init(void *xl)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        gf_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        if (master)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        master = calloc (1, sizeof (*master));</div><div class='del'>-        if (!master)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        master-&gt;name = strdup ("gfchangelog");</div><div class='del'>-        if (!master-&gt;name)</div><div class='del'>-                goto dealloc_master;</div><div class='del'>-</div><div class='del'>-        ret = gf_changelog_set_master (master, xl);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_name;</div><div class='del'>-</div><div class='del'>-        priv = master-&gt;private;</div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;connectionjanitor, NULL,</div><div class='del'>-                                gf_changelog_connection_janitor, master,</div><div class='del'>-                                "clogjan");</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                /* TODO: cleanup priv, mutex (poller thread for !xl) */</div><div class='del'>-                goto dealloc_name;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_private_t *priv = NULL;</div><div class='ctx'> </div><div class='add'>+    if (master)</div><div class='ctx'>         return 0;</div><div class='ctx'> </div><div class='del'>- dealloc_name:</div><div class='del'>-        free (master-&gt;name);</div><div class='del'>- dealloc_master:</div><div class='del'>-        free (master);</div><div class='del'>-        master = NULL;</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    master = calloc(1, sizeof(*master));</div><div class='add'>+    if (!master)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    master-&gt;name = strdup("gfchangelog");</div><div class='add'>+    if (!master-&gt;name)</div><div class='add'>+        goto dealloc_master;</div><div class='add'>+</div><div class='add'>+    ret = gf_changelog_set_master(master, xl);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_name;</div><div class='add'>+</div><div class='add'>+    priv = master-&gt;private;</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;connectionjanitor, NULL,</div><div class='add'>+                           gf_changelog_connection_janitor, master, "clogjan");</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        /* TODO: cleanup priv, mutex (poller thread for !xl) */</div><div class='add'>+        goto dealloc_name;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+dealloc_name:</div><div class='add'>+    free(master-&gt;name);</div><div class='add'>+dealloc_master:</div><div class='add'>+    free(master);</div><div class='add'>+    master = NULL;</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_changelog_register_generic (struct gf_brick_spec *bricks, int count,</div><div class='del'>-                               int ordered, char *logfile, int lvl, void *xl)</div><div class='add'>+gf_changelog_register_generic(struct gf_brick_spec *bricks, int count,</div><div class='add'>+                              int ordered, char *logfile, int lvl, void *xl)</div><div class='ctx'> {</div><div class='del'>-        int                   ret        = 0;</div><div class='del'>-        xlator_t             *this       = NULL;</div><div class='del'>-        xlator_t             *old_this   = NULL;</div><div class='del'>-        struct gf_brick_spec *brick      = NULL;</div><div class='del'>-        gf_boolean_t          need_order = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    xlator_t *old_this = NULL;</div><div class='add'>+    struct gf_brick_spec *brick = NULL;</div><div class='add'>+    gf_boolean_t need_order = _gf_false;</div><div class='ctx'> </div><div class='del'>-        SAVE_THIS (xl);</div><div class='add'>+    SAVE_THIS(xl);</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto error_return;</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        ret = gf_changelog_setup_logging (this, logfile, lvl);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        need_order = (ordered) ? _gf_true : _gf_false;</div><div class='del'>-</div><div class='del'>-        brick = bricks;</div><div class='del'>-        while (count--) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                         CHANGELOG_LIB_MSG_NOTIFY_REGISTER_INFO,</div><div class='del'>-                         "Registering brick",</div><div class='del'>-                         "brick=%s", brick-&gt;brick_path,</div><div class='del'>-                         "notify_filter=%d", brick-&gt;filter,</div><div class='del'>-                         NULL);</div><div class='del'>-</div><div class='del'>-                ret = gf_changelog_register_brick (this, brick, need_order, xl);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_LIB_MSG_NOTIFY_REGISTER_FAILED,</div><div class='del'>-                                "Error registering with changelog xlator");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                brick++;</div><div class='add'>+    ret = gf_changelog_setup_logging(this, logfile, lvl);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    need_order = (ordered) ? _gf_true : _gf_false;</div><div class='add'>+</div><div class='add'>+    brick = bricks;</div><div class='add'>+    while (count--) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                CHANGELOG_LIB_MSG_NOTIFY_REGISTER_INFO, "Registering brick",</div><div class='add'>+                "brick=%s", brick-&gt;brick_path, "notify_filter=%d",</div><div class='add'>+                brick-&gt;filter, NULL);</div><div class='add'>+</div><div class='add'>+        ret = gf_changelog_register_brick(this, brick, need_order, xl);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CHANGELOG_LIB_MSG_NOTIFY_REGISTER_FAILED,</div><div class='add'>+                   "Error registering with changelog xlator");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_inited_bricks;</div><div class='add'>+        brick++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        RESTORE_THIS();</div><div class='del'>-        return 0;</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_inited_bricks;</div><div class='ctx'> </div><div class='del'>- cleanup_inited_bricks:</div><div class='del'>-        gf_cleanup_connections (this);</div><div class='del'>- error_return:</div><div class='del'>-        RESTORE_THIS();</div><div class='del'>-        return -1;</div><div class='add'>+    RESTORE_THIS();</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_inited_bricks:</div><div class='add'>+    gf_cleanup_connections(this);</div><div class='add'>+error_return:</div><div class='add'>+    RESTORE_THIS();</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -610,27 +601,29 @@ gf_changelog_register_generic (struct gf_brick_spec *bricks, int count,</div><div class='ctx'>  * For generic API, refer gf_changelog_register_generic().</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_changelog_register (char *brick_path, char *scratch_dir,</div><div class='del'>-                       char *log_file, int log_level, int max_reconnects)</div><div class='add'>+gf_changelog_register(char *brick_path, char *scratch_dir, char *log_file,</div><div class='add'>+                      int log_level, int max_reconnects)</div><div class='ctx'> {</div><div class='del'>-        struct gf_brick_spec brick = {0,};</div><div class='add'>+    struct gf_brick_spec brick = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (master)</div><div class='del'>-                THIS = master;</div><div class='del'>-        else</div><div class='del'>-                return -1;</div><div class='add'>+    if (master)</div><div class='add'>+        THIS = master;</div><div class='add'>+    else</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        brick.brick_path = brick_path;</div><div class='del'>-        brick.filter     = CHANGELOG_OP_TYPE_JOURNAL;</div><div class='add'>+    brick.brick_path = brick_path;</div><div class='add'>+    brick.filter = CHANGELOG_OP_TYPE_JOURNAL;</div><div class='ctx'> </div><div class='del'>-        brick.init         = gf_changelog_journal_init;</div><div class='del'>-        brick.fini         = gf_changelog_journal_fini;</div><div class='del'>-        brick.callback     = gf_changelog_handle_journal;</div><div class='del'>-        brick.connected    = gf_changelog_journal_connect;</div><div class='del'>-        brick.disconnected = gf_changelog_journal_disconnect;</div><div class='add'>+    brick.init = gf_changelog_journal_init;</div><div class='add'>+    brick.fini = gf_changelog_journal_fini;</div><div class='add'>+    brick.callback = gf_changelog_handle_journal;</div><div class='add'>+    brick.connected = gf_changelog_journal_connect;</div><div class='add'>+    brick.disconnected = gf_changelog_journal_disconnect;</div><div class='ctx'> </div><div class='del'>-        brick.ptr = scratch_dir;</div><div class='add'>+    brick.ptr = scratch_dir;</div><div class='ctx'> </div><div class='del'>-        return gf_changelog_register_generic (&amp;brick, 1, 1,</div><div class='del'>-                                              log_file, log_level, NULL);</div><div class='add'>+    return gf_changelog_register_generic(&amp;brick, 1, 1, log_file, log_level,</div><div class='add'>+                                         NULL);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/lib/src/gf-history-changelog.c b/xlators/features/changelog/lib/src/gf-history-changelog.c<br/>index 5259ae3893b..c8a31ebbd73 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-history-changelog.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/lib/src/gf-history-changelog.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/lib/src/gf-history-changelog.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/lib/src/gf-history-changelog.c</a></div><div class='hunk'>@@ -36,62 +36,60 @@</div><div class='ctx'>  *   -1: On error.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_history_changelog_done (char *file)</div><div class='add'>+gf_history_changelog_done(char *file)</div><div class='ctx'> {</div><div class='del'>-        int                     ret               = -1;</div><div class='del'>-        char                   *buffer            = NULL;</div><div class='del'>-        xlator_t               *this              = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl               = NULL;</div><div class='del'>-        gf_changelog_journal_t *hist_jnl          = NULL;</div><div class='del'>-        char                    to_path[PATH_MAX] = {0,};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *hist_jnl = NULL;</div><div class='add'>+    char to_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    errno = EINVAL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    hist_jnl = jnl-&gt;hist_jnl;</div><div class='add'>+    if (!hist_jnl)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!file || !strlen(file))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* make sure 'file' is inside -&gt;jnl_working_dir */</div><div class='add'>+    buffer = realpath(file, NULL);</div><div class='add'>+    if (!buffer)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (strncmp(hist_jnl-&gt;jnl_working_dir, buffer,</div><div class='add'>+                strlen(hist_jnl-&gt;jnl_working_dir)))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    (void)snprintf(to_path, PATH_MAX, "%s%s", hist_jnl-&gt;jnl_processed_dir,</div><div class='add'>+                   basename(buffer));</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "moving %s to processed directory", file);</div><div class='add'>+    ret = sys_rename(buffer, to_path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_LIB_MSG_RENAME_FAILED, "cannot move changelog file",</div><div class='add'>+                "from=%s", file, "to=%s", to_path, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        hist_jnl = jnl-&gt;hist_jnl;</div><div class='del'>-        if (!hist_jnl)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!file || !strlen (file))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* make sure 'file' is inside -&gt;jnl_working_dir */</div><div class='del'>-        buffer = realpath (file, NULL);</div><div class='del'>-        if (!buffer)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (strncmp (hist_jnl-&gt;jnl_working_dir,</div><div class='del'>-                     buffer, strlen (hist_jnl-&gt;jnl_working_dir)))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        (void) snprintf (to_path, PATH_MAX, "%s%s",</div><div class='del'>-                         hist_jnl-&gt;jnl_processed_dir, basename (buffer));</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "moving %s to processed directory", file);</div><div class='del'>-        ret = sys_rename (buffer, to_path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_RENAME_FAILED,</div><div class='del'>-                         "cannot move changelog file",</div><div class='del'>-                         "from=%s", file,</div><div class='del'>-                         "to=%s", to_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        if (buffer)</div><div class='del'>-                free (buffer); /* allocated by realpath() */</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    if (buffer)</div><div class='add'>+        free(buffer); /* allocated by realpath() */</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -105,33 +103,33 @@ gf_history_changelog_done (char *file)</div><div class='ctx'>  *    -1: On error.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_history_changelog_start_fresh ()</div><div class='add'>+gf_history_changelog_start_fresh()</div><div class='ctx'> {</div><div class='del'>-        xlator_t               *this     = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl      = NULL;</div><div class='del'>-        gf_changelog_journal_t *hist_jnl = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *hist_jnl = NULL;</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='add'>+    errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        hist_jnl = jnl-&gt;hist_jnl;</div><div class='del'>-        if (!hist_jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    hist_jnl = jnl-&gt;hist_jnl;</div><div class='add'>+    if (!hist_jnl)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (gf_ftruncate (hist_jnl-&gt;jnl_fd, 0))</div><div class='del'>-                goto out;</div><div class='add'>+    if (gf_ftruncate(hist_jnl-&gt;jnl_fd, 0))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return -1;</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -150,50 +148,52 @@ gf_history_changelog_start_fresh ()</div><div class='ctx'>  *     -1  : On error.</div><div class='ctx'>  */</div><div class='ctx'> ssize_t</div><div class='del'>-gf_history_changelog_next_change (char *bufptr, size_t maxlen)</div><div class='add'>+gf_history_changelog_next_change(char *bufptr, size_t maxlen)</div><div class='ctx'> {</div><div class='del'>-        ssize_t                 size             = -1;</div><div class='del'>-        int                     tracker_fd       = 0;</div><div class='del'>-        xlator_t               *this             = NULL;</div><div class='del'>-        gf_changelog_journal_t *jnl              = NULL;</div><div class='del'>-        gf_changelog_journal_t *hist_jnl         = NULL;</div><div class='del'>-        char                    buffer[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        if (maxlen &gt; PATH_MAX) {</div><div class='del'>-                errno = ENAMETOOLONG;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ssize_t size = -1;</div><div class='add'>+    int tracker_fd = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *hist_jnl = NULL;</div><div class='add'>+    char buffer[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='add'>+    if (maxlen &gt; PATH_MAX) {</div><div class='add'>+        errno = ENAMETOOLONG;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    errno = EINVAL;</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        hist_jnl = jnl-&gt;hist_jnl;</div><div class='del'>-        if (!hist_jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        tracker_fd = hist_jnl-&gt;jnl_fd;</div><div class='add'>+    hist_jnl = jnl-&gt;hist_jnl;</div><div class='add'>+    if (!hist_jnl)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        size = gf_readline (tracker_fd, buffer, maxlen);</div><div class='del'>-        if (size &lt; 0) {</div><div class='del'>-                size = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    tracker_fd = hist_jnl-&gt;jnl_fd;</div><div class='ctx'> </div><div class='del'>-        if (size == 0)</div><div class='del'>-                goto out;</div><div class='add'>+    size = gf_readline(tracker_fd, buffer, maxlen);</div><div class='add'>+    if (size &lt; 0) {</div><div class='add'>+        size = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (bufptr, buffer, size - 1);</div><div class='del'>-        bufptr[size - 1] = '\0';</div><div class='add'>+    if (size == 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    memcpy(bufptr, buffer, size - 1);</div><div class='add'>+    bufptr[size - 1] = '\0';</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return size;</div><div class='add'>+    return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -214,97 +214,100 @@ out:</div><div class='ctx'>  *</div><div class='ctx'>  */</div><div class='ctx'> ssize_t</div><div class='del'>-gf_history_changelog_scan ()</div><div class='add'>+gf_history_changelog_scan()</div><div class='ctx'> {</div><div class='del'>-        int                     tracker_fd   = 0;</div><div class='del'>-        size_t                  off          = 0;</div><div class='del'>-        xlator_t               *this         = NULL;</div><div class='del'>-        size_t                  nr_entries   = 0;</div><div class='del'>-        gf_changelog_journal_t *jnl          = NULL;</div><div class='del'>-        gf_changelog_journal_t *hist_jnl     = NULL;</div><div class='del'>-        struct dirent          *entry        = NULL;</div><div class='del'>-        struct dirent           scratch[2]   = {{0,},};</div><div class='del'>-        char buffer[PATH_MAX]                = {0,};</div><div class='del'>-        static int              is_last_scan;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this)</div><div class='del'>-                goto out;</div><div class='add'>+    int tracker_fd = 0;</div><div class='add'>+    size_t off = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    size_t nr_entries = 0;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *hist_jnl = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    char buffer[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    static int is_last_scan;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl)</div><div class='add'>+        goto out;</div><div class='add'>+    if (JNL_IS_API_DISCONNECTED(jnl)) {</div><div class='add'>+        errno = ENOTCONN;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hist_jnl = jnl-&gt;hist_jnl;</div><div class='add'>+    if (!hist_jnl)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+retry:</div><div class='add'>+    if (is_last_scan == 1)</div><div class='add'>+        return 0;</div><div class='add'>+    if (hist_jnl-&gt;hist_done == 0)</div><div class='add'>+        is_last_scan = 1;</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl)</div><div class='del'>-                goto out;</div><div class='del'>-        if (JNL_IS_API_DISCONNECTED (jnl)) {</div><div class='del'>-                errno = ENOTCONN;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    errno = EINVAL;</div><div class='add'>+    if (hist_jnl-&gt;hist_done == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        hist_jnl = jnl-&gt;hist_jnl;</div><div class='del'>-        if (!hist_jnl)</div><div class='del'>-                goto out;</div><div class='add'>+    tracker_fd = hist_jnl-&gt;jnl_fd;</div><div class='ctx'> </div><div class='del'>- retry:</div><div class='del'>-        if (is_last_scan == 1)</div><div class='del'>-                return 0;</div><div class='del'>-        if (hist_jnl-&gt;hist_done == 0)</div><div class='del'>-                is_last_scan = 1;</div><div class='add'>+    if (gf_ftruncate(tracker_fd, 0))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        errno = EINVAL;</div><div class='del'>-        if (hist_jnl-&gt;hist_done == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    rewinddir(hist_jnl-&gt;jnl_dir);</div><div class='ctx'> </div><div class='del'>-        tracker_fd = hist_jnl-&gt;jnl_fd;</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(hist_jnl-&gt;jnl_dir, scratch);</div><div class='add'>+        if (!entry || errno != 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-        if (gf_ftruncate (tracker_fd, 0))</div><div class='del'>-                goto out;</div><div class='add'>+        if (strcmp(basename(entry-&gt;d_name), ".") == 0 ||</div><div class='add'>+            strcmp(basename(entry-&gt;d_name), "..") == 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        rewinddir (hist_jnl-&gt;jnl_dir);</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (hist_jnl-&gt;jnl_dir, scratch);</div><div class='del'>-                if (!entry || errno != 0)</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                if (strcmp (basename (entry-&gt;d_name), ".") == 0 ||</div><div class='del'>-                    strcmp (basename (entry-&gt;d_name), "..") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                nr_entries++;</div><div class='del'>-</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (hist_jnl-&gt;jnl_processing_dir,</div><div class='del'>-                                          buffer, off,</div><div class='del'>-                                          strlen (hist_jnl-&gt;jnl_processing_dir));</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER (entry-&gt;d_name, buffer,</div><div class='del'>-                                          off, strlen (entry-&gt;d_name));</div><div class='del'>-                GF_CHANGELOG_FILL_BUFFER ("\n", buffer, off, 1);</div><div class='del'>-</div><div class='del'>-                if (gf_changelog_write (tracker_fd, buffer, off) != off) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_LIB_MSG_WRITE_FAILED,</div><div class='del'>-                                "error writing changelog filename"</div><div class='del'>-                                " to tracker file");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-                off = 0;</div><div class='del'>-        }</div><div class='add'>+        nr_entries++;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "hist_done %d, is_last_scan: %d",</div><div class='del'>-                      hist_jnl-&gt;hist_done, is_last_scan);</div><div class='del'>-</div><div class='del'>-        if (!entry) {</div><div class='del'>-                if (gf_lseek (tracker_fd, 0, SEEK_SET) != -1) {</div><div class='del'>-                        if (nr_entries &gt; 0)</div><div class='del'>-                                return nr_entries;</div><div class='del'>-                        else {</div><div class='del'>-                                sleep(1);</div><div class='del'>-                                goto retry;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(hist_jnl-&gt;jnl_processing_dir, buffer, off,</div><div class='add'>+                                 strlen(hist_jnl-&gt;jnl_processing_dir));</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER(entry-&gt;d_name, buffer, off,</div><div class='add'>+                                 strlen(entry-&gt;d_name));</div><div class='add'>+        GF_CHANGELOG_FILL_BUFFER("\n", buffer, off, 1);</div><div class='add'>+</div><div class='add'>+        if (gf_changelog_write(tracker_fd, buffer, off) != off) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_WRITE_FAILED,</div><div class='add'>+                   "error writing changelog filename"</div><div class='add'>+                   " to tracker file");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>- out:</div><div class='del'>-        return -1;</div><div class='add'>+        off = 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "hist_done %d, is_last_scan: %d",</div><div class='add'>+                 hist_jnl-&gt;hist_done, is_last_scan);</div><div class='add'>+</div><div class='add'>+    if (!entry) {</div><div class='add'>+        if (gf_lseek(tracker_fd, 0, SEEK_SET) != -1) {</div><div class='add'>+            if (nr_entries &gt; 0)</div><div class='add'>+                return nr_entries;</div><div class='add'>+            else {</div><div class='add'>+                sleep(1);</div><div class='add'>+                goto retry;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -312,36 +315,36 @@ gf_history_changelog_scan ()</div><div class='ctx'>  * Returns 0 on success(updates given time-stamp), -1 on failure.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_history_get_timestamp (int fd, int index, int len,</div><div class='del'>-                          unsigned long *ts)</div><div class='add'>+gf_history_get_timestamp(int fd, int index, int len, unsigned long *ts)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this             = NULL;</div><div class='del'>-        int             n_read            = -1;</div><div class='del'>-        char            path_buf[PATH_MAX]= {0,};</div><div class='del'>-        char            *iter             = path_buf;</div><div class='del'>-        size_t          offset            = index * (len+1);</div><div class='del'>-        unsigned long   value             = 0;</div><div class='del'>-        int             ret               = 0;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this) {</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        n_read = sys_pread (fd, path_buf, len, offset);</div><div class='del'>-        if (n_read &lt; 0 ) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_READ_ERROR,</div><div class='del'>-                         "could not read from htime file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        iter+= len - TIMESTAMP_LENGTH;</div><div class='del'>-        sscanf (iter, "%lu",&amp;value);</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int n_read = -1;</div><div class='add'>+    char path_buf[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *iter = path_buf;</div><div class='add'>+    size_t offset = index * (len + 1);</div><div class='add'>+    unsigned long value = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this) {</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    n_read = sys_pread(fd, path_buf, len, offset);</div><div class='add'>+    if (n_read &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_READ_ERROR,</div><div class='add'>+               "could not read from htime file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    iter += len - TIMESTAMP_LENGTH;</div><div class='add'>+    sscanf(iter, "%lu", &amp;value);</div><div class='ctx'> out:</div><div class='del'>-        if(ret == 0)</div><div class='del'>-                *ts = value;</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        *ts = value;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -349,38 +352,37 @@ out:</div><div class='ctx'>  * Checks whether @value is there next to @target_index or not</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_history_check ( int fd, int target_index, unsigned long value, int len)</div><div class='add'>+gf_history_check(int fd, int target_index, unsigned long value, int len)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        unsigned long   ts1 = 0;</div><div class='del'>-        unsigned long   ts2 = 0;</div><div class='del'>-</div><div class='del'>-        if (target_index == 0) {</div><div class='del'>-                ret = gf_history_get_timestamp (fd, target_index, len, &amp;ts1);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (value &lt;= ts1)</div><div class='del'>-                        goto out;</div><div class='del'>-                else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned long ts1 = 0;</div><div class='add'>+    unsigned long ts2 = 0;</div><div class='ctx'> </div><div class='del'>-        ret = gf_history_get_timestamp (fd, target_index, len, &amp;ts1);</div><div class='del'>-        if (ret ==-1)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = gf_history_get_timestamp (fd, target_index -1, len, &amp;ts2);</div><div class='del'>-        if (ret ==-1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if ( (value &lt;= ts1) &amp;&amp; (value &gt; ts2) ) {</div><div class='del'>-                goto out;</div><div class='add'>+    if (target_index == 0) {</div><div class='add'>+        ret = gf_history_get_timestamp(fd, target_index, len, &amp;ts1);</div><div class='add'>+        if (ret == -1)</div><div class='add'>+            goto out;</div><div class='add'>+        if (value &lt;= ts1)</div><div class='add'>+            goto out;</div><div class='add'>+        else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        else</div><div class='del'>-                ret = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_history_get_timestamp(fd, target_index, len, &amp;ts1);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = gf_history_get_timestamp(fd, target_index - 1, len, &amp;ts2);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if ((value &lt;= ts1) &amp;&amp; (value &gt; ts2)) {</div><div class='add'>+        goto out;</div><div class='add'>+    } else</div><div class='add'>+        ret = -1;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -400,78 +402,69 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-gf_history_b_search (int fd, unsigned long value,</div><div class='del'>-                     unsigned long from, unsigned long to, int len)</div><div class='add'>+gf_history_b_search(int fd, unsigned long value, unsigned long from,</div><div class='add'>+                    unsigned long to, int len)</div><div class='ctx'> {</div><div class='del'>-        int             m_index   = -1;</div><div class='del'>-        unsigned long   cur_value = 0;</div><div class='del'>-        unsigned long   ts1       = 0;</div><div class='del'>-        int             ret       = 0;</div><div class='del'>-</div><div class='del'>-        m_index = (from + to)/2;</div><div class='del'>-</div><div class='del'>-        if ( (to - from) &lt;=1 ) {</div><div class='del'>-                /* either one or 2 changelogs left */</div><div class='del'>-                if ( to != from ) {</div><div class='del'>-                        /* check if value is less or greater than to</div><div class='del'>-                         * return accordingly</div><div class='del'>-                         */</div><div class='del'>-                        ret = gf_history_get_timestamp (fd, from, len, &amp;ts1);</div><div class='del'>-                        if (ret ==-1)</div><div class='del'>-                                goto out;</div><div class='del'>-                        if ( ts1 &gt;= value) {</div><div class='del'>-                                /* actually compatision should be</div><div class='del'>-                                 * exactly == but considering</div><div class='del'>-                                 *</div><div class='del'>-                                 * case of only 2 changelogs in htime file</div><div class='del'>-                                 */</div><div class='del'>-                                return from;</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                                return to;</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                        return to;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = gf_history_get_timestamp (fd, m_index, len, &amp;cur_value);</div><div class='add'>+    int m_index = -1;</div><div class='add'>+    unsigned long cur_value = 0;</div><div class='add'>+    unsigned long ts1 = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    m_index = (from + to) / 2;</div><div class='add'>+</div><div class='add'>+    if ((to - from) &lt;= 1) {</div><div class='add'>+        /* either one or 2 changelogs left */</div><div class='add'>+        if (to != from) {</div><div class='add'>+            /* check if value is less or greater than to</div><div class='add'>+             * return accordingly</div><div class='add'>+             */</div><div class='add'>+            ret = gf_history_get_timestamp(fd, from, len, &amp;ts1);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                goto out;</div><div class='add'>+            if (ts1 &gt;= value) {</div><div class='add'>+                /* actually compatision should be</div><div class='add'>+                 * exactly == but considering</div><div class='add'>+                 *</div><div class='add'>+                 * case of only 2 changelogs in htime file</div><div class='add'>+                 */</div><div class='add'>+                return from;</div><div class='add'>+            } else</div><div class='add'>+                return to;</div><div class='add'>+        } else</div><div class='add'>+            return to;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gf_history_get_timestamp(fd, m_index, len, &amp;cur_value);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+    if (cur_value == value) {</div><div class='add'>+        return m_index;</div><div class='add'>+    } else if (value &gt; cur_value) {</div><div class='add'>+        ret = gf_history_get_timestamp(fd, m_index + 1, len, &amp;cur_value);</div><div class='ctx'>         if (ret == -1)</div><div class='add'>+            goto out;</div><div class='add'>+        if (value &lt; cur_value)</div><div class='add'>+            return m_index + 1;</div><div class='add'>+        else</div><div class='add'>+            return gf_history_b_search(fd, value, m_index + 1, to, len);</div><div class='add'>+    } else {</div><div class='add'>+        if (m_index == 0) {</div><div class='add'>+            /*  we are sure that values exists</div><div class='add'>+             *  in this htime file</div><div class='add'>+             */</div><div class='add'>+            return 0;</div><div class='add'>+        } else {</div><div class='add'>+            ret = gf_history_get_timestamp(fd, m_index - 1, len, &amp;cur_value);</div><div class='add'>+            if (ret == -1)</div><div class='ctx'>                 goto out;</div><div class='del'>-        if (cur_value == value) {</div><div class='add'>+            if (value &gt; cur_value) {</div><div class='ctx'>                 return m_index;</div><div class='add'>+            } else</div><div class='add'>+                return gf_history_b_search(fd, value, from, m_index - 1, len);</div><div class='ctx'>         }</div><div class='del'>-        else if (value &gt; cur_value) {</div><div class='del'>-                ret = gf_history_get_timestamp (fd, m_index+1, len, &amp;cur_value);</div><div class='del'>-                if (ret == -1)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (value &lt; cur_value)</div><div class='del'>-                        return m_index + 1;</div><div class='del'>-                else</div><div class='del'>-                        return gf_history_b_search (fd, value,</div><div class='del'>-                                                    m_index+1, to, len);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-                if (m_index ==0) {</div><div class='del'>-                       /*  we are sure that values exists</div><div class='del'>-                        *  in this htime file</div><div class='del'>-                        */</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                        ret = gf_history_get_timestamp (fd, m_index-1, len,</div><div class='del'>-                                                        &amp;cur_value);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-                        if (value &gt; cur_value) {</div><div class='del'>-                                return m_index;</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                                return gf_history_b_search (fd, value, from,</div><div class='del'>-                                                            m_index-1, len);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -484,65 +477,60 @@ out:</div><div class='ctx'>  * 0 : No, Not usable ( contains, "changelog")</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_is_changelog_usable (char *cl_path)</div><div class='add'>+gf_is_changelog_usable(char *cl_path)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        const char      low_c[]         = "changelog";</div><div class='del'>-        char            *str_ret        = NULL;</div><div class='del'>-        char            *bname          = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    const char low_c[] = "changelog";</div><div class='add'>+    char *str_ret = NULL;</div><div class='add'>+    char *bname = NULL;</div><div class='ctx'> </div><div class='del'>-        bname = basename (cl_path);</div><div class='add'>+    bname = basename(cl_path);</div><div class='ctx'> </div><div class='del'>-        str_ret = strstr (bname, low_c);</div><div class='add'>+    str_ret = strstr(bname, low_c);</div><div class='ctx'> </div><div class='del'>-        if (str_ret != NULL)</div><div class='del'>-                ret = 0;</div><div class='del'>-        else</div><div class='del'>-                ret = 1;</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (str_ret != NULL)</div><div class='add'>+        ret = 0;</div><div class='add'>+    else</div><div class='add'>+        ret = 1;</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_changelog_consume_wrap (void* data)</div><div class='add'>+gf_changelog_consume_wrap(void *data)</div><div class='ctx'> {</div><div class='del'>-        int                          ret   = -1;</div><div class='del'>-        ssize_t                      nread = 0;</div><div class='del'>-        xlator_t                    *this  = NULL;</div><div class='del'>-        gf_changelog_consume_data_t *ccd   = NULL;</div><div class='del'>-</div><div class='del'>-        ccd = (gf_changelog_consume_data_t *) data;</div><div class='del'>-        this = ccd-&gt;this;</div><div class='del'>-</div><div class='del'>-        ccd-&gt;retval = -1;</div><div class='del'>-</div><div class='del'>-        nread = sys_pread (ccd-&gt;fd, ccd-&gt;changelog, PATH_MAX-1, ccd-&gt;offset);</div><div class='del'>-        if (nread &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_READ_ERROR,</div><div class='del'>-                        "cannot read from history metadata file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: handle short reads and EOF. */</div><div class='del'>-        if (gf_is_changelog_usable (ccd-&gt;changelog) == 1) {</div><div class='del'>-</div><div class='del'>-                ret = gf_changelog_consume (ccd-&gt;this,</div><div class='del'>-                                            ccd-&gt;jnl, ccd-&gt;changelog, _gf_true);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                 0, CHANGELOG_LIB_MSG_PARSE_ERROR,</div><div class='del'>-                                 "could not parse changelog",</div><div class='del'>-                                 "name=%s", ccd-&gt;changelog,</div><div class='del'>-                                 NULL);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ssize_t nread = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_consume_data_t *ccd = NULL;</div><div class='add'>+</div><div class='add'>+    ccd = (gf_changelog_consume_data_t *)data;</div><div class='add'>+    this = ccd-&gt;this;</div><div class='add'>+</div><div class='add'>+    ccd-&gt;retval = -1;</div><div class='add'>+</div><div class='add'>+    nread = sys_pread(ccd-&gt;fd, ccd-&gt;changelog, PATH_MAX - 1, ccd-&gt;offset);</div><div class='add'>+    if (nread &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_READ_ERROR,</div><div class='add'>+               "cannot read from history metadata file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: handle short reads and EOF. */</div><div class='add'>+    if (gf_is_changelog_usable(ccd-&gt;changelog) == 1) {</div><div class='add'>+        ret = gf_changelog_consume(ccd-&gt;this, ccd-&gt;jnl, ccd-&gt;changelog,</div><div class='add'>+                                   _gf_true);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_LIB_MSG_PARSE_ERROR,</div><div class='add'>+                    "could not parse changelog", "name=%s", ccd-&gt;changelog,</div><div class='add'>+                    NULL);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ccd-&gt;retval = 0;</div><div class='add'>+    }</div><div class='add'>+    ccd-&gt;retval = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return NULL;</div><div class='add'>+out:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -551,133 +539,138 @@ gf_changelog_consume_wrap (void* data)</div><div class='ctx'>  * to index "to" in open htime file whose fd is "fd".</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-#define MAX_PARALLELS  10</div><div class='add'>+#define MAX_PARALLELS 10</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-gf_history_consume (void * data)</div><div class='add'>+gf_history_consume(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                    *this              = NULL;</div><div class='del'>-        gf_changelog_journal_t              *jnl               = NULL;</div><div class='del'>-        gf_changelog_journal_t              *hist_jnl          = NULL;</div><div class='del'>-        int                          ret               = 0;</div><div class='del'>-        int                          iter              = 0;</div><div class='del'>-        int                          fd                = -1;</div><div class='del'>-        int                          from              = -1;</div><div class='del'>-        int                          to                = -1;</div><div class='del'>-        int                          len               = -1;</div><div class='del'>-        int                          n_parallel        = 0;</div><div class='del'>-        int                          n_envoked         = 0;</div><div class='del'>-        gf_boolean_t                 publish           = _gf_true;</div><div class='del'>-        pthread_t th_id[MAX_PARALLELS]                 = {0,};</div><div class='del'>-        gf_changelog_history_data_t *hist_data         = NULL;</div><div class='del'>-        gf_changelog_consume_data_t ccd[MAX_PARALLELS] = {{0},};</div><div class='del'>-        gf_changelog_consume_data_t *curr              = NULL;</div><div class='del'>-        char thread_name[GF_THREAD_NAMEMAX]            = {0,};</div><div class='del'>-</div><div class='del'>-        hist_data = (gf_changelog_history_data_t *) data;</div><div class='del'>-        if (hist_data == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *hist_jnl = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int iter = 0;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int from = -1;</div><div class='add'>+    int to = -1;</div><div class='add'>+    int len = -1;</div><div class='add'>+    int n_parallel = 0;</div><div class='add'>+    int n_envoked = 0;</div><div class='add'>+    gf_boolean_t publish = _gf_true;</div><div class='add'>+    pthread_t th_id[MAX_PARALLELS] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_changelog_history_data_t *hist_data = NULL;</div><div class='add'>+    gf_changelog_consume_data_t ccd[MAX_PARALLELS] = {</div><div class='add'>+        {0},</div><div class='add'>+    };</div><div class='add'>+    gf_changelog_consume_data_t *curr = NULL;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    hist_data = (gf_changelog_history_data_t *)data;</div><div class='add'>+    if (hist_data == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = hist_data-&gt;htime_fd;</div><div class='add'>+    from = hist_data-&gt;from;</div><div class='add'>+    to = hist_data-&gt;to;</div><div class='add'>+    len = hist_data-&gt;len;</div><div class='add'>+    n_parallel = hist_data-&gt;n_parallel;</div><div class='add'>+</div><div class='add'>+    THIS = hist_data-&gt;this;</div><div class='add'>+    this = hist_data-&gt;this;</div><div class='add'>+    if (!this) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hist_jnl = jnl-&gt;hist_jnl;</div><div class='add'>+    if (!hist_jnl) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (from &lt;= to) {</div><div class='add'>+        n_envoked = 0;</div><div class='add'>+</div><div class='add'>+        for (iter = 0; (iter &lt; n_parallel) &amp;&amp; (from &lt;= to); iter++) {</div><div class='add'>+            curr = &amp;ccd[iter];</div><div class='add'>+</div><div class='add'>+            curr-&gt;this = this;</div><div class='add'>+            curr-&gt;jnl = hist_jnl;</div><div class='add'>+            curr-&gt;fd = fd;</div><div class='add'>+            curr-&gt;offset = from * (len + 1);</div><div class='add'>+</div><div class='add'>+            curr-&gt;retval = 0;</div><div class='add'>+            memset(curr-&gt;changelog, '\0', PATH_MAX);</div><div class='add'>+            snprintf(thread_name, sizeof(thread_name), "clogc%03hx",</div><div class='add'>+                     ((iter + 1) &amp; 0x3ff));</div><div class='add'>+</div><div class='add'>+            ret = gf_thread_create(&amp;th_id[iter], NULL,</div><div class='add'>+                                   gf_changelog_consume_wrap, curr,</div><div class='add'>+                                   thread_name);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                       CHANGELOG_LIB_MSG_THREAD_CREATION_FAILED,</div><div class='add'>+                       "could not create consume-thread");</div><div class='add'>+                goto sync;</div><div class='add'>+            } else</div><div class='add'>+                n_envoked++;</div><div class='add'>+</div><div class='add'>+            from++;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd         = hist_data-&gt;htime_fd;</div><div class='del'>-        from       = hist_data-&gt;from;</div><div class='del'>-        to         = hist_data-&gt;to;</div><div class='del'>-        len        = hist_data-&gt;len;</div><div class='del'>-        n_parallel = hist_data-&gt;n_parallel;</div><div class='del'>-</div><div class='del'>-        THIS = hist_data-&gt;this;</div><div class='del'>-        this = hist_data-&gt;this;</div><div class='del'>-        if (!this) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    sync:</div><div class='add'>+        for (iter = 0; iter &lt; n_envoked; iter++) {</div><div class='add'>+            ret = pthread_join(th_id[iter], NULL);</div><div class='add'>+            if (ret) {</div><div class='add'>+                publish = _gf_false;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                       CHANGELOG_LIB_MSG_PTHREAD_JOIN_FAILED,</div><div class='add'>+                       "pthread_join() error");</div><div class='add'>+                /* try to join the rest */</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (publish == _gf_false)</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            curr = &amp;ccd[iter];</div><div class='add'>+            if (ccd-&gt;retval) {</div><div class='add'>+                publish = _gf_false;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CHANGELOG_LIB_MSG_PARSE_ERROR,</div><div class='add'>+                       "parsing error, ceased publishing...");</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = gf_changelog_publish(curr-&gt;this, curr-&gt;jnl, curr-&gt;changelog);</div><div class='add'>+            if (ret) {</div><div class='add'>+                publish = _gf_false;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CHANGELOG_LIB_MSG_PUBLISH_ERROR,</div><div class='add'>+                       "publish error, ceased publishing...");</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hist_jnl = jnl-&gt;hist_jnl;</div><div class='del'>-        if (!hist_jnl) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while (from &lt;= to) {</div><div class='del'>-                n_envoked = 0;</div><div class='del'>-</div><div class='del'>-                for (iter = 0 ; (iter &lt; n_parallel) &amp;&amp; (from &lt;= to); iter++) {</div><div class='del'>-                        curr = &amp;ccd[iter];</div><div class='del'>-</div><div class='del'>-                        curr-&gt;this   = this;</div><div class='del'>-                        curr-&gt;jnl    = hist_jnl;</div><div class='del'>-                        curr-&gt;fd     = fd;</div><div class='del'>-                        curr-&gt;offset = from * (len + 1);</div><div class='del'>-</div><div class='del'>-                        curr-&gt;retval = 0;</div><div class='del'>-                        memset (curr-&gt;changelog, '\0', PATH_MAX);</div><div class='del'>-                        snprintf (thread_name, sizeof(thread_name),</div><div class='del'>-                                  "clogc%03hx", ((iter + 1) &amp; 0x3ff));</div><div class='del'>-</div><div class='del'>-                        ret = gf_thread_create (&amp;th_id[iter], NULL,</div><div class='del'>-                                                gf_changelog_consume_wrap, curr,</div><div class='del'>-                                                thread_name);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                                        CHANGELOG_LIB_MSG_THREAD_CREATION_FAILED</div><div class='del'>-                                        , "could not create consume-thread");</div><div class='del'>-                                goto sync;</div><div class='del'>-                        } else</div><div class='del'>-                                n_envoked++;</div><div class='del'>-</div><div class='del'>-                        from++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        sync:</div><div class='del'>-                for (iter = 0; iter &lt; n_envoked; iter++) {</div><div class='del'>-                        ret = pthread_join (th_id[iter], NULL);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                publish = _gf_false;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                                        CHANGELOG_LIB_MSG_PTHREAD_JOIN_FAILED,</div><div class='del'>-                                        "pthread_join() error");</div><div class='del'>-                                /* try to join the rest */</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (publish == _gf_false)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        curr = &amp;ccd[iter];</div><div class='del'>-                        if (ccd-&gt;retval) {</div><div class='del'>-                                publish = _gf_false;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        0, CHANGELOG_LIB_MSG_PARSE_ERROR,</div><div class='del'>-                                        "parsing error, ceased publishing...");</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = gf_changelog_publish (curr-&gt;this,</div><div class='del'>-                                                    curr-&gt;jnl, curr-&gt;changelog);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                publish = _gf_false;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CHANGELOG_LIB_MSG_PUBLISH_ERROR,</div><div class='del'>-                                        "publish error, ceased publishing...");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-       /* informing "parsing done". */</div><div class='del'>-        hist_jnl-&gt;hist_done = (publish == _gf_true) ? 0 : -1;</div><div class='add'>+    /* informing "parsing done". */</div><div class='add'>+    hist_jnl-&gt;hist_done = (publish == _gf_true) ? 0 : -1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (fd != -1)</div><div class='del'>-                (void) sys_close (fd);</div><div class='del'>-        GF_FREE (hist_data);</div><div class='del'>-        return NULL;</div><div class='add'>+    if (fd != -1)</div><div class='add'>+        (void)sys_close(fd);</div><div class='add'>+    GF_FREE(hist_data);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -707,77 +700,73 @@ out:</div><div class='ctx'>  *   -2 : Ignore this metadata file and process next</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_changelog_extract_min_max (const char *dname, const char *htime_dir,</div><div class='del'>-                              int *fd, unsigned long *total,</div><div class='del'>-                              unsigned long *min_ts, unsigned long *max_ts)</div><div class='add'>+gf_changelog_extract_min_max(const char *dname, const char *htime_dir, int *fd,</div><div class='add'>+                             unsigned long *total, unsigned long *min_ts,</div><div class='add'>+                             unsigned long *max_ts)</div><div class='ctx'> {</div><div class='del'>-        int          ret          = -1;</div><div class='del'>-        xlator_t    *this         = NULL;</div><div class='del'>-        char htime_file[PATH_MAX] = {0,};</div><div class='del'>-        struct stat  stbuf        = {0,};</div><div class='del'>-        char        *iter         = NULL;</div><div class='del'>-        char x_value[30]          = {0,};</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        snprintf (htime_file, PATH_MAX, "%s/%s", htime_dir, dname);</div><div class='del'>-</div><div class='del'>-        iter = (htime_file + strlen (htime_file) - TIMESTAMP_LENGTH);</div><div class='del'>-        sscanf (iter ,"%lu",min_ts);</div><div class='del'>-</div><div class='del'>-        ret = sys_stat (htime_file, &amp;stbuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_HTIME_ERROR,</div><div class='del'>-                         "stat() failed on htime file",</div><div class='del'>-                         "path=%s", htime_file,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* ignore everything except regular files */</div><div class='del'>-        if (!S_ISREG (stbuf.st_mode)) {</div><div class='del'>-                ret = -2;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        *fd = open (htime_file, O_RDONLY);</div><div class='del'>-        if (*fd &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_HTIME_ERROR,</div><div class='del'>-                         "open() failed for htime file",</div><div class='del'>-                         "path=%s", htime_file,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Looks good, extract max timestamp */</div><div class='del'>-        ret = sys_fgetxattr (*fd, HTIME_KEY, x_value, sizeof (x_value));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_GET_XATTR_FAILED,</div><div class='del'>-                         "error extracting max timstamp from htime file"</div><div class='del'>-                         "path=%s", htime_file,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    char htime_file[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *iter = NULL;</div><div class='add'>+    char x_value[30] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    snprintf(htime_file, PATH_MAX, "%s/%s", htime_dir, dname);</div><div class='add'>+</div><div class='add'>+    iter = (htime_file + strlen(htime_file) - TIMESTAMP_LENGTH);</div><div class='add'>+    sscanf(iter, "%lu", min_ts);</div><div class='add'>+</div><div class='add'>+    ret = sys_stat(htime_file, &amp;stbuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_HTIME_ERROR,</div><div class='add'>+                "stat() failed on htime file", "path=%s", htime_file, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* ignore everything except regular files */</div><div class='add'>+    if (!S_ISREG(stbuf.st_mode)) {</div><div class='add'>+        ret = -2;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *fd = open(htime_file, O_RDONLY);</div><div class='add'>+    if (*fd &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_HTIME_ERROR,</div><div class='add'>+                "open() failed for htime file", "path=%s", htime_file, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Looks good, extract max timestamp */</div><div class='add'>+    ret = sys_fgetxattr(*fd, HTIME_KEY, x_value, sizeof(x_value));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_LIB_MSG_GET_XATTR_FAILED,</div><div class='add'>+                "error extracting max timstamp from htime file"</div><div class='add'>+                "path=%s",</div><div class='add'>+                htime_file, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sscanf(x_value, "%lu:%lu", max_ts, total);</div><div class='add'>+    gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_LIB_MSG_TOTAL_LOG_INFO,</div><div class='add'>+            "changelogs min max", "min=%lu", *min_ts, "max=%lu", *max_ts,</div><div class='add'>+            "total_changelogs=%lu", *total, NULL);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        sscanf (x_value, "%lu:%lu", max_ts, total);</div><div class='del'>-        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                 CHANGELOG_LIB_MSG_TOTAL_LOG_INFO,</div><div class='del'>-                 "changelogs min max",</div><div class='del'>-                 "min=%lu", *min_ts,</div><div class='del'>-                 "max=%lu", *max_ts,</div><div class='del'>-                 "total_changelogs=%lu", *total,</div><div class='del'>-                 NULL);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* gf_history_changelog returns actual_end and spawns threads to</div><div class='hunk'>@@ -790,275 +779,257 @@ gf_changelog_extract_min_max (const char *dname, const char *htime_dir,</div><div class='ctx'>  *    -1 : On any error</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-gf_history_changelog (char* changelog_dir, unsigned long start,</div><div class='del'>-                      unsigned long end, int n_parallel,</div><div class='del'>-                      unsigned long *actual_end)</div><div class='add'>+gf_history_changelog(char *changelog_dir, unsigned long start,</div><div class='add'>+                     unsigned long end, int n_parallel,</div><div class='add'>+                     unsigned long *actual_end)</div><div class='ctx'> {</div><div class='del'>-        int                             ret                     = 0;</div><div class='del'>-        int                             len                     = -1;</div><div class='del'>-        int                             fd                      = -1;</div><div class='del'>-        int                             n_read                  = -1;</div><div class='del'>-        unsigned long                   min_ts                  = 0;</div><div class='del'>-        unsigned long                   max_ts                  = 0;</div><div class='del'>-        unsigned long                   end2                    = 0;</div><div class='del'>-        unsigned long                   ts1                     = 0;</div><div class='del'>-        unsigned long                   ts2                     = 0;</div><div class='del'>-        unsigned long                   to                      = 0;</div><div class='del'>-        unsigned long                   from                    = 0;</div><div class='del'>-        unsigned long                   total_changelog         = 0;</div><div class='del'>-        xlator_t                       *this                    = NULL;</div><div class='del'>-        gf_changelog_journal_t         *jnl                     = NULL;</div><div class='del'>-        gf_changelog_journal_t         *hist_jnl                = NULL;</div><div class='del'>-        gf_changelog_history_data_t    *hist_data               = NULL;</div><div class='del'>-        DIR                            *dirp                    = NULL;</div><div class='del'>-        struct dirent                  *entry                   = NULL;</div><div class='del'>-        struct dirent                   scratch[2]              = {{0,},};</div><div class='del'>-        pthread_t                       consume_th              = 0;</div><div class='del'>-        char                            htime_dir[PATH_MAX]     = {0,};</div><div class='del'>-        char                            buffer[PATH_MAX]        = {0,};</div><div class='del'>-        gf_boolean_t                    partial_history         = _gf_false;</div><div class='del'>-</div><div class='del'>-        pthread_attr_t attr;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!this) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int len = -1;</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int n_read = -1;</div><div class='add'>+    unsigned long min_ts = 0;</div><div class='add'>+    unsigned long max_ts = 0;</div><div class='add'>+    unsigned long end2 = 0;</div><div class='add'>+    unsigned long ts1 = 0;</div><div class='add'>+    unsigned long ts2 = 0;</div><div class='add'>+    unsigned long to = 0;</div><div class='add'>+    unsigned long from = 0;</div><div class='add'>+    unsigned long total_changelog = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_changelog_journal_t *jnl = NULL;</div><div class='add'>+    gf_changelog_journal_t *hist_jnl = NULL;</div><div class='add'>+    gf_changelog_history_data_t *hist_data = NULL;</div><div class='add'>+    DIR *dirp = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    pthread_t consume_th = 0;</div><div class='add'>+    char htime_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char buffer[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t partial_history = _gf_false;</div><div class='add'>+</div><div class='add'>+    pthread_attr_t attr;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!this) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_attr_init(&amp;attr);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_PTHREAD_ERROR,</div><div class='add'>+               "Pthread init failed");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    jnl = (gf_changelog_journal_t *)GF_CHANGELOG_GET_API_PTR(this);</div><div class='add'>+    if (!jnl) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hist_jnl = (gf_changelog_journal_t *)jnl-&gt;hist_jnl;</div><div class='add'>+    if (!hist_jnl) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_LIB_MSG_TOTAL_LOG_INFO,</div><div class='add'>+            "Requesting historical changelogs", "start=%lu", start, "end=%lu",</div><div class='add'>+            end, NULL);</div><div class='add'>+</div><div class='add'>+    /* basic sanity check */</div><div class='add'>+    if (start &gt; end || n_parallel &lt;= 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_HIST_FAILED,</div><div class='add'>+                "Sanity check failed", "start=%lu", start, "end=%lu", end,</div><div class='add'>+                "thread_count=%d", n_parallel, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* cap parallelism count */</div><div class='add'>+    if (n_parallel &gt; MAX_PARALLELS)</div><div class='add'>+        n_parallel = MAX_PARALLELS;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_HTIME_DIR(changelog_dir, htime_dir);</div><div class='add'>+</div><div class='add'>+    dirp = sys_opendir(htime_dir);</div><div class='add'>+    if (dirp == NULL) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_LIB_MSG_HTIME_ERROR,</div><div class='add'>+                "open dir on htime failed", "path=%s", htime_dir, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+</div><div class='add'>+        entry = sys_readdir(dirp, scratch);</div><div class='add'>+</div><div class='add'>+        if (!entry || errno != 0) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                    CHANGELOG_LIB_MSG_HIST_FAILED,</div><div class='add'>+                    "Requested changelog range is not availbale", "start=%lu",</div><div class='add'>+                    start, "end=%lu", end, NULL);</div><div class='add'>+            ret = -2;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = pthread_attr_init (&amp;attr);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_LIB_MSG_PTHREAD_ERROR,</div><div class='del'>-                        "Pthread init failed");</div><div class='del'>-                return -1;</div><div class='add'>+        ret = gf_changelog_extract_min_max(entry-&gt;d_name, htime_dir, &amp;fd,</div><div class='add'>+                                           &amp;total_changelog, &amp;min_ts, &amp;max_ts);</div><div class='add'>+        if (ret) {</div><div class='add'>+            if (-2 == ret)</div><div class='add'>+                continue;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        jnl = (gf_changelog_journal_t *) GF_CHANGELOG_GET_API_PTR (this);</div><div class='del'>-        if (!jnl) {</div><div class='add'>+        if (start &gt;= min_ts &amp;&amp; start &lt; max_ts) {</div><div class='add'>+            /**</div><div class='add'>+             * TODO: handle short reads later...</div><div class='add'>+             */</div><div class='add'>+            n_read = sys_read(fd, buffer, PATH_MAX);</div><div class='add'>+            if (n_read &lt; 0) {</div><div class='ctx'>                 ret = -1;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                       CHANGELOG_LIB_MSG_READ_ERROR,</div><div class='add'>+                       "unable to read htime file");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            len = strlen(buffer);</div><div class='add'>+</div><div class='add'>+            /**</div><div class='add'>+             * search @start in the htime file returning it's index</div><div class='add'>+             * (@from)</div><div class='add'>+             */</div><div class='add'>+            from = gf_history_b_search(fd, start, 0, total_changelog - 1, len);</div><div class='ctx'> </div><div class='del'>-        hist_jnl = (gf_changelog_journal_t *) jnl-&gt;hist_jnl;</div><div class='del'>-        if (!hist_jnl) {</div><div class='add'>+            /* ensuring correctness of gf_b_search */</div><div class='add'>+            if (gf_history_check(fd, from, start, len) != 0) {</div><div class='ctx'>                 ret = -1;</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                        CHANGELOG_LIB_MSG_GET_TIME_ERROR,</div><div class='add'>+                        "wrong result for start", "start=%lu", start, "idx=%lu",</div><div class='add'>+                        from, NULL);</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                 CHANGELOG_LIB_MSG_TOTAL_LOG_INFO,</div><div class='del'>-                 "Requesting historical changelogs",</div><div class='del'>-                 "start=%lu", start, "end=%lu", end, NULL);</div><div class='del'>-</div><div class='del'>-        /* basic sanity check */</div><div class='del'>-        if (start &gt; end || n_parallel &lt;= 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_HIST_FAILED, "Sanity check failed",</div><div class='del'>-                         "start=%lu", start,</div><div class='del'>-                         "end=%lu", end,</div><div class='del'>-                         "thread_count=%d", n_parallel,</div><div class='del'>-                         NULL);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            end2 = (end &lt;= max_ts) ? end : max_ts;</div><div class='add'>+</div><div class='add'>+            /* Check if end falls out of same HTIME file. The end</div><div class='add'>+             * falling to a different htime file or changelog</div><div class='add'>+             * disable-enable is detected only after 20 seconds.</div><div class='add'>+             * This is required because, applications generally</div><div class='add'>+             * asks historical changelogs till current time and</div><div class='add'>+             * it is possible changelog is not rolled over yet.</div><div class='add'>+             * So, buffer time of default rollover time plus 5</div><div class='add'>+             * seconds is subtracted.  If the application requests</div><div class='add'>+             * the end time with in half a minute of changelog</div><div class='add'>+             * disable, it's not detected as changelog disable and</div><div class='add'>+             * it's application's responsibility to retry after</div><div class='add'>+             * 20 seconds before confirming it as partial history.</div><div class='add'>+             */</div><div class='add'>+            if ((end - 20) &gt; max_ts) {</div><div class='add'>+                partial_history = _gf_true;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /**</div><div class='add'>+             * search @end2 in htime file returning it's index (@to)</div><div class='add'>+             */</div><div class='add'>+            to = gf_history_b_search(fd, end2, 0, total_changelog - 1, len);</div><div class='add'>+</div><div class='add'>+            if (gf_history_check(fd, to, end2, len) != 0) {</div><div class='ctx'>                 ret = -1;</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                        CHANGELOG_LIB_MSG_GET_TIME_ERROR,</div><div class='add'>+                        "wrong result for end", "start=%lu", end2, "idx=%lu",</div><div class='add'>+                        to, NULL);</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        /* cap parallelism count */</div><div class='del'>-        if (n_parallel &gt; MAX_PARALLELS)</div><div class='del'>-                n_parallel = MAX_PARALLELS;</div><div class='add'>+            ret = gf_history_get_timestamp(fd, from, len, &amp;ts1);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_HTIME_DIR (changelog_dir, htime_dir);</div><div class='add'>+            ret = gf_history_get_timestamp(fd, to, len, &amp;ts2);</div><div class='add'>+            if (ret == -1)</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-        dirp = sys_opendir (htime_dir);</div><div class='del'>-        if (dirp == NULL) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_LIB_MSG_HTIME_ERROR,</div><div class='del'>-                         "open dir on htime failed",</div><div class='del'>-                         "path=%s", htime_dir,</div><div class='del'>-                         NULL);</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                    CHANGELOG_LIB_MSG_TOTAL_LOG_INFO, "FINAL", "from=%lu", ts1,</div><div class='add'>+                    "to=%lu", ts2, "changes=%lu", (to - from + 1), NULL);</div><div class='add'>+</div><div class='add'>+            hist_data = GF_CALLOC(1, sizeof(gf_changelog_history_data_t),</div><div class='add'>+                                  gf_changelog_mt_history_data_t);</div><div class='add'>+</div><div class='add'>+            hist_data-&gt;htime_fd = fd;</div><div class='add'>+            hist_data-&gt;from = from;</div><div class='add'>+            hist_data-&gt;to = to;</div><div class='add'>+            hist_data-&gt;len = len;</div><div class='add'>+            hist_data-&gt;n_parallel = n_parallel;</div><div class='add'>+            hist_data-&gt;this = this;</div><div class='add'>+</div><div class='add'>+            ret = pthread_attr_setdetachstate(&amp;attr, PTHREAD_CREATE_DETACHED);</div><div class='add'>+            if (ret != 0) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                       CHANGELOG_LIB_MSG_PTHREAD_ERROR,</div><div class='add'>+                       "unable to sets the detach"</div><div class='add'>+                       " state attribute");</div><div class='ctx'>                 ret = -1;</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* spawn a thread for background parsing &amp; publishing */</div><div class='add'>+            ret = gf_thread_create(&amp;consume_th, &amp;attr, gf_history_consume,</div><div class='add'>+                                   hist_data, "cloghcon");</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ret,</div><div class='add'>+                       CHANGELOG_LIB_MSG_THREAD_CREATION_FAILED,</div><div class='add'>+                       "creation of consume parent-thread"</div><div class='add'>+                       " failed.");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-</div><div class='del'>-                errno = 0;</div><div class='del'>-</div><div class='del'>-                entry = sys_readdir (dirp, scratch);</div><div class='del'>-</div><div class='del'>-                if (!entry || errno != 0) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_LIB_MSG_HIST_FAILED,</div><div class='del'>-                                 "Requested changelog range is not availbale",</div><div class='del'>-                                 "start=%lu", start, "end=%lu", end, NULL);</div><div class='del'>-                        ret = -2;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_changelog_extract_min_max (entry-&gt;d_name, htime_dir,</div><div class='del'>-                                                    &amp;fd, &amp;total_changelog,</div><div class='del'>-                                                    &amp;min_ts, &amp;max_ts);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        if (-2 == ret)</div><div class='del'>-                                continue;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (start &gt;= min_ts &amp;&amp; start &lt; max_ts) {</div><div class='del'>-                        /**</div><div class='del'>-                         * TODO: handle short reads later...</div><div class='del'>-                         */</div><div class='del'>-                        n_read = sys_read (fd, buffer, PATH_MAX);</div><div class='del'>-                        if (n_read &lt; 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                        CHANGELOG_LIB_MSG_READ_ERROR,</div><div class='del'>-                                        "unable to read htime file");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        len = strlen (buffer);</div><div class='del'>-</div><div class='del'>-                        /**</div><div class='del'>-                         * search @start in the htime file returning it's index</div><div class='del'>-                         * (@from)</div><div class='del'>-                         */</div><div class='del'>-                        from = gf_history_b_search (fd, start, 0,</div><div class='del'>-                                                   total_changelog - 1, len);</div><div class='del'>-</div><div class='del'>-                        /* ensuring correctness of gf_b_search */</div><div class='del'>-                        if (gf_history_check (fd, from, start, len) != 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                         CHANGELOG_LIB_MSG_GET_TIME_ERROR,</div><div class='del'>-                                         "wrong result for start",</div><div class='del'>-                                         "start=%lu", start,</div><div class='del'>-                                         "idx=%lu", from,</div><div class='del'>-                                         NULL);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        end2 = (end &lt;= max_ts) ? end : max_ts;</div><div class='del'>-</div><div class='del'>-                        /* Check if end falls out of same HTIME file. The end</div><div class='del'>-                         * falling to a different htime file or changelog</div><div class='del'>-                         * disable-enable is detected only after 20 seconds.</div><div class='del'>-                         * This is required because, applications generally</div><div class='del'>-                         * asks historical changelogs till current time and</div><div class='del'>-                         * it is possible changelog is not rolled over yet.</div><div class='del'>-                         * So, buffer time of default rollover time plus 5</div><div class='del'>-                         * seconds is subtracted.  If the application requests</div><div class='del'>-                         * the end time with in half a minute of changelog</div><div class='del'>-                         * disable, it's not detected as changelog disable and</div><div class='del'>-                         * it's application's responsibility to retry after</div><div class='del'>-                         * 20 seconds before confirming it as partial history.</div><div class='del'>-                         */</div><div class='del'>-                        if ((end - 20) &gt; max_ts) {</div><div class='del'>-                                partial_history = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /**</div><div class='del'>-                         * search @end2 in htime file returning it's index (@to)</div><div class='del'>-                         */</div><div class='del'>-                        to = gf_history_b_search (fd, end2,</div><div class='del'>-                                                  0, total_changelog - 1, len);</div><div class='del'>-</div><div class='del'>-                        if (gf_history_check (fd, to, end2, len) != 0) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                         CHANGELOG_LIB_MSG_GET_TIME_ERROR,</div><div class='del'>-                                         "wrong result for end",</div><div class='del'>-                                         "start=%lu", end2,</div><div class='del'>-                                         "idx=%lu", to,</div><div class='del'>-                                         NULL);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = gf_history_get_timestamp (fd, from, len, &amp;ts1);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        ret = gf_history_get_timestamp (fd, to, len, &amp;ts2);</div><div class='del'>-                        if (ret == -1)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                 CHANGELOG_LIB_MSG_TOTAL_LOG_INFO,</div><div class='del'>-                                 "FINAL",</div><div class='del'>-                                 "from=%lu", ts1,</div><div class='del'>-                                 "to=%lu", ts2,</div><div class='del'>-                                 "changes=%lu", (to - from + 1),</div><div class='del'>-                                 NULL);</div><div class='del'>-</div><div class='del'>-                        hist_data =  GF_CALLOC (1,</div><div class='del'>-                                     sizeof (gf_changelog_history_data_t),</div><div class='del'>-                                     gf_changelog_mt_history_data_t);</div><div class='del'>-</div><div class='del'>-                        hist_data-&gt;htime_fd   = fd;</div><div class='del'>-                        hist_data-&gt;from       = from;</div><div class='del'>-                        hist_data-&gt;to         = to;</div><div class='del'>-                        hist_data-&gt;len        = len;</div><div class='del'>-                        hist_data-&gt;n_parallel = n_parallel;</div><div class='del'>-                        hist_data-&gt;this       = this;</div><div class='del'>-</div><div class='del'>-                        ret = pthread_attr_setdetachstate</div><div class='del'>-                                (&amp;attr, PTHREAD_CREATE_DETACHED);</div><div class='del'>-                        if (ret != 0) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                                        CHANGELOG_LIB_MSG_PTHREAD_ERROR,</div><div class='del'>-                                        "unable to sets the detach"</div><div class='del'>-                                        " state attribute");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* spawn a thread for background parsing &amp; publishing */</div><div class='del'>-                        ret = gf_thread_create (&amp;consume_th, &amp;attr,</div><div class='del'>-                                                gf_history_consume, hist_data,</div><div class='del'>-                                                "cloghcon");</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                                        CHANGELOG_LIB_MSG_THREAD_CREATION_FAILED</div><div class='del'>-                                        , "creation of consume parent-thread"</div><div class='del'>-                                        " failed.");</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                } else {/* end of range check */</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_LIB_MSG_HIST_FAILED,</div><div class='del'>-                                 "Requested changelog range is not "</div><div class='del'>-                                 "available. Retrying next HTIME",</div><div class='del'>-                                 "start=%lu", start,</div><div class='del'>-                                 "end=%lu", end,</div><div class='del'>-                                 "chlog_min=%lu", min_ts,</div><div class='del'>-                                 "chlog_max=%lu", max_ts,</div><div class='del'>-                                 NULL);</div><div class='del'>-                }</div><div class='del'>-        } /* end of readdir() */</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        } else { /* end of range check */</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                    CHANGELOG_LIB_MSG_HIST_FAILED,</div><div class='add'>+                    "Requested changelog range is not "</div><div class='add'>+                    "available. Retrying next HTIME",</div><div class='add'>+                    "start=%lu", start, "end=%lu", end, "chlog_min=%lu", min_ts,</div><div class='add'>+                    "chlog_max=%lu", max_ts, NULL);</div><div class='add'>+        }</div><div class='add'>+    } /* end of readdir() */</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dirp != NULL)</div><div class='del'>-                (void) sys_closedir (dirp);</div><div class='add'>+    if (dirp != NULL)</div><div class='add'>+        (void)sys_closedir(dirp);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (fd != -1)</div><div class='del'>-                        (void) sys_close (fd);</div><div class='del'>-                GF_FREE (hist_data);</div><div class='del'>-                (void) pthread_attr_destroy (&amp;attr);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (fd != -1)</div><div class='add'>+            (void)sys_close(fd);</div><div class='add'>+        GF_FREE(hist_data);</div><div class='add'>+        (void)pthread_attr_destroy(&amp;attr);</div><div class='ctx'> </div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        hist_jnl-&gt;hist_done = 1;</div><div class='del'>-        *actual_end = ts2;</div><div class='add'>+    hist_jnl-&gt;hist_done = 1;</div><div class='add'>+    *actual_end = ts2;</div><div class='ctx'> </div><div class='del'>-        if (partial_history) {</div><div class='del'>-                ret = 1;</div><div class='del'>-        }</div><div class='add'>+    if (partial_history) {</div><div class='add'>+        ret = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-barrier.c b/xlators/features/changelog/src/changelog-barrier.c<br/>index ac1eb0e4397..e8d742404df 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-barrier.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-barrier.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-barrier.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-barrier.c</a></div><div class='hunk'>@@ -14,121 +14,119 @@</div><div class='ctx'> </div><div class='ctx'> /* Enqueue a stub*/</div><div class='ctx'> void</div><div class='del'>-__chlog_barrier_enqueue (xlator_t *this, call_stub_t *stub)</div><div class='add'>+__chlog_barrier_enqueue(xlator_t *this, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv    = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;stub-&gt;list, &amp;priv-&gt;queue);</div><div class='del'>-        priv-&gt;queue_size++;</div><div class='add'>+    list_add_tail(&amp;stub-&gt;list, &amp;priv-&gt;queue);</div><div class='add'>+    priv-&gt;queue_size++;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Dequeue a stub */</div><div class='ctx'> call_stub_t *</div><div class='del'>-__chlog_barrier_dequeue (xlator_t *this, struct list_head *queue)</div><div class='add'>+__chlog_barrier_dequeue(xlator_t *this, struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t      *stub            = NULL;</div><div class='del'>-        changelog_priv_t *priv            = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        if (list_empty (queue))</div><div class='del'>-                goto out;</div><div class='add'>+    if (list_empty(queue))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stub = list_entry (queue-&gt;next, call_stub_t, list);</div><div class='del'>-        list_del_init (&amp;stub-&gt;list);</div><div class='add'>+    stub = list_entry(queue-&gt;next, call_stub_t, list);</div><div class='add'>+    list_del_init(&amp;stub-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Dequeue all the stubs and call corresponding resume functions */</div><div class='ctx'> void</div><div class='del'>-chlog_barrier_dequeue_all (xlator_t *this, struct list_head *queue)</div><div class='add'>+chlog_barrier_dequeue_all(xlator_t *this, struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t            *stub    = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                "Dequeuing all the changelog barriered fops");</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+           "Dequeuing all the changelog barriered fops");</div><div class='ctx'> </div><div class='del'>-        while ((stub = __chlog_barrier_dequeue (this, queue)))</div><div class='del'>-                call_resume (stub);</div><div class='add'>+    while ((stub = __chlog_barrier_dequeue(this, queue)))</div><div class='add'>+        call_resume(stub);</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                "Dequeuing changelog barriered fops is finished");</div><div class='del'>-        return;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+           "Dequeuing changelog barriered fops is finished");</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Function called on changelog barrier timeout */</div><div class='ctx'> void</div><div class='del'>-chlog_barrier_timeout (void *data)</div><div class='add'>+chlog_barrier_timeout(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t               *this    = NULL;</div><div class='del'>-        changelog_priv_t       *priv    = NULL;</div><div class='del'>-        struct list_head        queue   = {0,};</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        this = data;</div><div class='del'>-        THIS = this;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    this = data;</div><div class='add'>+    THIS = this;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                CHANGELOG_MSG_BARRIER_ERROR,</div><div class='del'>-                "Disabling changelog barrier because of the timeout.");</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_BARRIER_ERROR,</div><div class='add'>+           "Disabling changelog barrier because of the timeout.");</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='add'>+    chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Disable changelog barrier enable flag */</div><div class='ctx'> void</div><div class='del'>-__chlog_barrier_disable (xlator_t *this, struct list_head *queue)</div><div class='add'>+__chlog_barrier_disable(xlator_t *this, struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv   = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    changelog_priv_t *priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;timer) {</div><div class='del'>-                gf_timer_call_cancel (this-&gt;ctx, priv-&gt;timer);</div><div class='del'>-                priv-&gt;timer = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;timer) {</div><div class='add'>+        gf_timer_call_cancel(this-&gt;ctx, priv-&gt;timer);</div><div class='add'>+        priv-&gt;timer = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_splice_init (&amp;priv-&gt;queue, queue);</div><div class='del'>-        priv-&gt;queue_size = 0;</div><div class='del'>-        priv-&gt;barrier_enabled = _gf_false;</div><div class='add'>+    list_splice_init(&amp;priv-&gt;queue, queue);</div><div class='add'>+    priv-&gt;queue_size = 0;</div><div class='add'>+    priv-&gt;barrier_enabled = _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Enable chagelog barrier enable with timer */</div><div class='ctx'> int</div><div class='del'>-__chlog_barrier_enable (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+__chlog_barrier_enable(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int             ret     = -1;</div><div class='del'>-</div><div class='del'>-        priv-&gt;timer = gf_timer_call_after (this-&gt;ctx, priv-&gt;timeout,</div><div class='del'>-                                           chlog_barrier_timeout, (void *)this);</div><div class='del'>-        if (!priv-&gt;timer) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_CRITICAL, 0,</div><div class='del'>-                        CHANGELOG_MSG_BARRIER_ERROR,</div><div class='del'>-                        "Couldn't add changelog barrier timeout event.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;barrier_enabled = _gf_true;</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv-&gt;timer = gf_timer_call_after(this-&gt;ctx, priv-&gt;timeout,</div><div class='add'>+                                      chlog_barrier_timeout, (void *)this);</div><div class='add'>+    if (!priv-&gt;timer) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_CRITICAL, 0, CHANGELOG_MSG_BARRIER_ERROR,</div><div class='add'>+               "Couldn't add changelog barrier timeout event.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;barrier_enabled = _gf_true;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-encoders.c b/xlators/features/changelog/src/changelog-encoders.c<br/>index 95030236636..63754516c2e 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-encoders.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-encoders.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-encoders.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-encoders.c</a></div><div class='hunk'>@@ -11,117 +11,117 @@</div><div class='ctx'> #include "changelog-encoders.h"</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-entry_fn (void *data, char *buffer, gf_boolean_t encode)</div><div class='add'>+entry_fn(void *data, char *buffer, gf_boolean_t encode)</div><div class='ctx'> {</div><div class='del'>-        char    *tmpbuf = NULL;</div><div class='del'>-        size_t  bufsz  = 0;</div><div class='del'>-        struct changelog_entry_fields *ce = NULL;</div><div class='del'>-</div><div class='del'>-        ce = (struct changelog_entry_fields *) data;</div><div class='del'>-</div><div class='del'>-        if (encode) {</div><div class='del'>-                tmpbuf = uuid_utoa (ce-&gt;cef_uuid);</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, tmpbuf, strlen (tmpbuf));</div><div class='del'>-        } else {</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz,</div><div class='del'>-                                       ce-&gt;cef_uuid, sizeof (uuid_t));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, bufsz, "/", 1);</div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, bufsz,</div><div class='del'>-                               ce-&gt;cef_bname, strlen (ce-&gt;cef_bname));</div><div class='del'>-        return bufsz;</div><div class='add'>+    char *tmpbuf = NULL;</div><div class='add'>+    size_t bufsz = 0;</div><div class='add'>+    struct changelog_entry_fields *ce = NULL;</div><div class='add'>+</div><div class='add'>+    ce = (struct changelog_entry_fields *)data;</div><div class='add'>+</div><div class='add'>+    if (encode) {</div><div class='add'>+        tmpbuf = uuid_utoa(ce-&gt;cef_uuid);</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, tmpbuf, strlen(tmpbuf));</div><div class='add'>+    } else {</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, ce-&gt;cef_uuid, sizeof(uuid_t));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, bufsz, "/", 1);</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, bufsz, ce-&gt;cef_bname, strlen(ce-&gt;cef_bname));</div><div class='add'>+    return bufsz;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-del_entry_fn (void *data, char *buffer, gf_boolean_t encode)</div><div class='add'>+del_entry_fn(void *data, char *buffer, gf_boolean_t encode)</div><div class='ctx'> {</div><div class='del'>-        char    *tmpbuf = NULL;</div><div class='del'>-        size_t  bufsz  = 0;</div><div class='del'>-        struct changelog_entry_fields *ce = NULL;</div><div class='del'>-</div><div class='del'>-        ce = (struct changelog_entry_fields *) data;</div><div class='del'>-</div><div class='del'>-        if (encode) {</div><div class='del'>-                tmpbuf = uuid_utoa (ce-&gt;cef_uuid);</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, tmpbuf, strlen (tmpbuf));</div><div class='del'>-        } else {</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz,</div><div class='del'>-                                       ce-&gt;cef_uuid, sizeof (uuid_t));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, bufsz, "/", 1);</div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, bufsz,</div><div class='del'>-                               ce-&gt;cef_bname, strlen (ce-&gt;cef_bname));</div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, bufsz, "\0", 1);</div><div class='del'>-</div><div class='del'>-        if (ce-&gt;cef_path[0] == '\0') {</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, "\0", 1);</div><div class='del'>-        } else {</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz,</div><div class='del'>-                                       ce-&gt;cef_path, strlen (ce-&gt;cef_path));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return bufsz;</div><div class='add'>+    char *tmpbuf = NULL;</div><div class='add'>+    size_t bufsz = 0;</div><div class='add'>+    struct changelog_entry_fields *ce = NULL;</div><div class='add'>+</div><div class='add'>+    ce = (struct changelog_entry_fields *)data;</div><div class='add'>+</div><div class='add'>+    if (encode) {</div><div class='add'>+        tmpbuf = uuid_utoa(ce-&gt;cef_uuid);</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, tmpbuf, strlen(tmpbuf));</div><div class='add'>+    } else {</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, ce-&gt;cef_uuid, sizeof(uuid_t));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, bufsz, "/", 1);</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, bufsz, ce-&gt;cef_bname, strlen(ce-&gt;cef_bname));</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, bufsz, "\0", 1);</div><div class='add'>+</div><div class='add'>+    if (ce-&gt;cef_path[0] == '\0') {</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, "\0", 1);</div><div class='add'>+    } else {</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, ce-&gt;cef_path,</div><div class='add'>+                              strlen(ce-&gt;cef_path));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return bufsz;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-fop_fn (void *data, char *buffer, gf_boolean_t encode)</div><div class='add'>+fop_fn(void *data, char *buffer, gf_boolean_t encode)</div><div class='ctx'> {</div><div class='del'>-        char buf[10]          = {0,};</div><div class='del'>-        size_t         bufsz = 0;</div><div class='del'>-        glusterfs_fop_t fop   = 0;</div><div class='add'>+    char buf[10] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t bufsz = 0;</div><div class='add'>+    glusterfs_fop_t fop = 0;</div><div class='ctx'> </div><div class='del'>-        fop = *(glusterfs_fop_t *) data;</div><div class='add'>+    fop = *(glusterfs_fop_t *)data;</div><div class='ctx'> </div><div class='del'>-        if (encode) {</div><div class='del'>-                (void) snprintf (buf, sizeof (buf), "%d", fop);</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, buf, strlen (buf));</div><div class='del'>-        } else</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, &amp;fop, sizeof (fop));</div><div class='add'>+    if (encode) {</div><div class='add'>+        (void)snprintf(buf, sizeof(buf), "%d", fop);</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, buf, strlen(buf));</div><div class='add'>+    } else</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, &amp;fop, sizeof(fop));</div><div class='ctx'> </div><div class='del'>-        return bufsz;</div><div class='add'>+    return bufsz;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-number_fn (void *data, char *buffer, gf_boolean_t encode)</div><div class='add'>+number_fn(void *data, char *buffer, gf_boolean_t encode)</div><div class='ctx'> {</div><div class='del'>-        size_t       bufsz = 0;</div><div class='del'>-        unsigned int nr    = 0;</div><div class='del'>-        char buf[20]       = {0,};</div><div class='add'>+    size_t bufsz = 0;</div><div class='add'>+    unsigned int nr = 0;</div><div class='add'>+    char buf[20] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        nr = *(unsigned int *) data;</div><div class='add'>+    nr = *(unsigned int *)data;</div><div class='ctx'> </div><div class='del'>-        if (encode) {</div><div class='del'>-                (void) snprintf (buf, sizeof (buf), "%u", nr);</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, buf, strlen (buf));</div><div class='del'>-        } else</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, bufsz, &amp;nr, sizeof (unsigned int));</div><div class='add'>+    if (encode) {</div><div class='add'>+        (void)snprintf(buf, sizeof(buf), "%u", nr);</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, buf, strlen(buf));</div><div class='add'>+    } else</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, bufsz, &amp;nr, sizeof(unsigned int));</div><div class='ctx'> </div><div class='del'>-        return bufsz;</div><div class='add'>+    return bufsz;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-entry_free_fn (void *data)</div><div class='add'>+entry_free_fn(void *data)</div><div class='ctx'> {</div><div class='del'>-        changelog_opt_t *co = data;</div><div class='add'>+    changelog_opt_t *co = data;</div><div class='ctx'> </div><div class='del'>-        if (!co)</div><div class='del'>-                return;</div><div class='add'>+    if (!co)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (co-&gt;co_entry.cef_bname);</div><div class='add'>+    GF_FREE(co-&gt;co_entry.cef_bname);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-del_entry_free_fn (void *data)</div><div class='add'>+del_entry_free_fn(void *data)</div><div class='ctx'> {</div><div class='del'>-        changelog_opt_t *co = data;</div><div class='add'>+    changelog_opt_t *co = data;</div><div class='ctx'> </div><div class='del'>-        if (!co)</div><div class='del'>-                return;</div><div class='add'>+    if (!co)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (co-&gt;co_entry.cef_bname);</div><div class='del'>-        GF_FREE (co-&gt;co_entry.cef_path);</div><div class='add'>+    GF_FREE(co-&gt;co_entry.cef_bname);</div><div class='add'>+    GF_FREE(co-&gt;co_entry.cef_path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -129,108 +129,104 @@ del_entry_free_fn (void *data)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_encode_write_xtra (changelog_log_data_t *cld,</div><div class='del'>-                             char *buffer, size_t *off, gf_boolean_t encode)</div><div class='add'>+changelog_encode_write_xtra(changelog_log_data_t *cld, char *buffer,</div><div class='add'>+                            size_t *off, gf_boolean_t encode)</div><div class='ctx'> {</div><div class='del'>-        int              i      = 0;</div><div class='del'>-        size_t           offset = 0;</div><div class='del'>-        void            *data   = NULL;</div><div class='del'>-        changelog_opt_t *co     = NULL;</div><div class='del'>-</div><div class='del'>-        offset = *off;</div><div class='del'>-</div><div class='del'>-        co = (changelog_opt_t *) cld-&gt;cld_ptr;</div><div class='del'>-</div><div class='del'>-        for (; i &lt; cld-&gt;cld_xtra_records; i++, co++) {</div><div class='del'>-                CHANGELOG_FILL_BUFFER (buffer, offset, "\0", 1);</div><div class='del'>-</div><div class='del'>-                switch (co-&gt;co_type) {</div><div class='del'>-                case CHANGELOG_OPT_REC_FOP:</div><div class='del'>-                        data = &amp;co-&gt;co_fop;</div><div class='del'>-                        break;</div><div class='del'>-                case CHANGELOG_OPT_REC_ENTRY:</div><div class='del'>-                        data = &amp;co-&gt;co_entry;</div><div class='del'>-                        break;</div><div class='del'>-                case CHANGELOG_OPT_REC_UINT32:</div><div class='del'>-                        data = &amp;co-&gt;co_uint32;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (co-&gt;co_convert)</div><div class='del'>-                        offset += co-&gt;co_convert (data,</div><div class='del'>-                                                  buffer + offset, encode);</div><div class='del'>-                else /* no coversion: write it out as it is */</div><div class='del'>-                        CHANGELOG_FILL_BUFFER (buffer, offset,</div><div class='del'>-                                               data, co-&gt;co_len);</div><div class='add'>+    int i = 0;</div><div class='add'>+    size_t offset = 0;</div><div class='add'>+    void *data = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+</div><div class='add'>+    offset = *off;</div><div class='add'>+</div><div class='add'>+    co = (changelog_opt_t *)cld-&gt;cld_ptr;</div><div class='add'>+</div><div class='add'>+    for (; i &lt; cld-&gt;cld_xtra_records; i++, co++) {</div><div class='add'>+        CHANGELOG_FILL_BUFFER(buffer, offset, "\0", 1);</div><div class='add'>+</div><div class='add'>+        switch (co-&gt;co_type) {</div><div class='add'>+            case CHANGELOG_OPT_REC_FOP:</div><div class='add'>+                data = &amp;co-&gt;co_fop;</div><div class='add'>+                break;</div><div class='add'>+            case CHANGELOG_OPT_REC_ENTRY:</div><div class='add'>+                data = &amp;co-&gt;co_entry;</div><div class='add'>+                break;</div><div class='add'>+            case CHANGELOG_OPT_REC_UINT32:</div><div class='add'>+                data = &amp;co-&gt;co_uint32;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        *off = offset;</div><div class='add'>+        if (co-&gt;co_convert)</div><div class='add'>+            offset += co-&gt;co_convert(data, buffer + offset, encode);</div><div class='add'>+        else /* no coversion: write it out as it is */</div><div class='add'>+            CHANGELOG_FILL_BUFFER(buffer, offset, data, co-&gt;co_len);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *off = offset;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_encode_ascii (xlator_t *this, changelog_log_data_t *cld)</div><div class='add'>+changelog_encode_ascii(xlator_t *this, changelog_log_data_t *cld)</div><div class='ctx'> {</div><div class='del'>-        size_t            off      = 0;</div><div class='del'>-        size_t            gfid_len = 0;</div><div class='del'>-        char             *gfid_str = NULL;</div><div class='del'>-        char             *buffer   = NULL;</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    size_t off = 0;</div><div class='add'>+    size_t gfid_len = 0;</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gfid_str = uuid_utoa (cld-&gt;cld_gfid);</div><div class='del'>-        gfid_len = strlen (gfid_str);</div><div class='add'>+    gfid_str = uuid_utoa(cld-&gt;cld_gfid);</div><div class='add'>+    gfid_len = strlen(gfid_str);</div><div class='ctx'> </div><div class='del'>-        /* extra bytes for decorations */</div><div class='del'>-        buffer = alloca (gfid_len + cld-&gt;cld_ptr_len + 10);</div><div class='del'>-        CHANGELOG_STORE_ASCII (priv, buffer,</div><div class='del'>-                               off, gfid_str, gfid_len, cld);</div><div class='add'>+    /* extra bytes for decorations */</div><div class='add'>+    buffer = alloca(gfid_len + cld-&gt;cld_ptr_len + 10);</div><div class='add'>+    CHANGELOG_STORE_ASCII(priv, buffer, off, gfid_str, gfid_len, cld);</div><div class='ctx'> </div><div class='del'>-        if (cld-&gt;cld_xtra_records)</div><div class='del'>-                changelog_encode_write_xtra (cld, buffer, &amp;off, _gf_true);</div><div class='add'>+    if (cld-&gt;cld_xtra_records)</div><div class='add'>+        changelog_encode_write_xtra(cld, buffer, &amp;off, _gf_true);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, off, "\0", 1);</div><div class='ctx'> </div><div class='del'>-        return changelog_write_change (priv, buffer, off);</div><div class='add'>+    return changelog_write_change(priv, buffer, off);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_encode_binary (xlator_t *this, changelog_log_data_t *cld)</div><div class='add'>+changelog_encode_binary(xlator_t *this, changelog_log_data_t *cld)</div><div class='ctx'> {</div><div class='del'>-        size_t            off    = 0;</div><div class='del'>-        char             *buffer = NULL;</div><div class='del'>-        changelog_priv_t *priv   = NULL;</div><div class='add'>+    size_t off = 0;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        /* extra bytes for decorations */</div><div class='del'>-        buffer = alloca (sizeof (uuid_t) + cld-&gt;cld_ptr_len + 10);</div><div class='del'>-        CHANGELOG_STORE_BINARY (priv, buffer, off, cld-&gt;cld_gfid, cld);</div><div class='add'>+    /* extra bytes for decorations */</div><div class='add'>+    buffer = alloca(sizeof(uuid_t) + cld-&gt;cld_ptr_len + 10);</div><div class='add'>+    CHANGELOG_STORE_BINARY(priv, buffer, off, cld-&gt;cld_gfid, cld);</div><div class='ctx'> </div><div class='del'>-        if (cld-&gt;cld_xtra_records)</div><div class='del'>-                changelog_encode_write_xtra (cld, buffer, &amp;off, _gf_false);</div><div class='add'>+    if (cld-&gt;cld_xtra_records)</div><div class='add'>+        changelog_encode_write_xtra(cld, buffer, &amp;off, _gf_false);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, off, "\0", 1);</div><div class='ctx'> </div><div class='del'>-        return changelog_write_change (priv, buffer, off);</div><div class='add'>+    return changelog_write_change(priv, buffer, off);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static struct changelog_encoder</div><div class='del'>-cb_encoder[] = {</div><div class='del'>-        [CHANGELOG_ENCODE_BINARY] =</div><div class='add'>+static struct changelog_encoder cb_encoder[] = {</div><div class='add'>+    [CHANGELOG_ENCODE_BINARY] =</div><div class='ctx'>         {</div><div class='del'>-                .encoder = CHANGELOG_ENCODE_BINARY,</div><div class='del'>-                .encode = changelog_encode_binary,</div><div class='add'>+            .encoder = CHANGELOG_ENCODE_BINARY,</div><div class='add'>+            .encode = changelog_encode_binary,</div><div class='ctx'>         },</div><div class='del'>-        [CHANGELOG_ENCODE_ASCII] =</div><div class='add'>+    [CHANGELOG_ENCODE_ASCII] =</div><div class='ctx'>         {</div><div class='del'>-                .encoder = CHANGELOG_ENCODE_ASCII,</div><div class='del'>-                .encode = changelog_encode_ascii,</div><div class='add'>+            .encoder = CHANGELOG_ENCODE_ASCII,</div><div class='add'>+            .encode = changelog_encode_ascii,</div><div class='ctx'>         },</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> changelog_encode_change(changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        priv-&gt;ce = &amp;cb_encoder[priv-&gt;encode_mode];</div><div class='add'>+    priv-&gt;ce = &amp;cb_encoder[priv-&gt;encode_mode];</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-ev-handle.c b/xlators/features/changelog/src/changelog-ev-handle.c<br/>index 46d45fbd778..3ed6ff821d9 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-ev-handle.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-ev-handle.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-ev-handle.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-ev-handle.c</a></div><div class='hunk'>@@ -14,19 +14,19 @@</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_program changelog_ev_program;</div><div class='ctx'> </div><div class='del'>-#define NR_IOVEC  (MAX_IOVEC - 3)</div><div class='add'>+#define NR_IOVEC (MAX_IOVEC - 3)</div><div class='ctx'> struct ev_rpc_vec {</div><div class='del'>-        int count;</div><div class='del'>-        struct iovec vector[NR_IOVEC];</div><div class='add'>+    int count;</div><div class='add'>+    struct iovec vector[NR_IOVEC];</div><div class='ctx'> </div><div class='del'>-        /* sequence number */</div><div class='del'>-        unsigned long seq;</div><div class='add'>+    /* sequence number */</div><div class='add'>+    unsigned long seq;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct ev_rpc {</div><div class='del'>-        rbuf_list_t     *rlist;</div><div class='del'>-        struct rpc_clnt *rpc;</div><div class='del'>-        struct ev_rpc_vec vec;</div><div class='add'>+    rbuf_list_t *rlist;</div><div class='add'>+    struct rpc_clnt *rpc;</div><div class='add'>+    struct ev_rpc_vec vec;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -35,216 +35,215 @@ struct ev_rpc {</div><div class='ctx'>  * intelligence can be built into the server.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_event_dispatch_cbk (struct rpc_req *req,</div><div class='del'>-                              struct iovec *iov, int count, void *myframe)</div><div class='add'>+changelog_event_dispatch_cbk(struct rpc_req *req, struct iovec *iov, int count,</div><div class='add'>+                             void *myframe)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* dispatcher RPC */</div><div class='ctx'> int</div><div class='del'>-changelog_dispatch_vec (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        struct rpc_clnt *rpc, struct ev_rpc_vec *vec)</div><div class='add'>+changelog_dispatch_vec(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                       struct rpc_clnt *rpc, struct ev_rpc_vec *vec)</div><div class='ctx'> {</div><div class='del'>-         struct timeval      tv  = {0,};</div><div class='del'>-         changelog_event_req req = {0,};</div><div class='del'>-</div><div class='del'>-         (void) gettimeofday (&amp;tv, NULL);</div><div class='del'>-</div><div class='del'>-         /**</div><div class='del'>-          * Event dispatch RPC header contains a sequence number for each</div><div class='del'>-          * dispatch. This allows the receiver to order the request before</div><div class='del'>-          * processing.</div><div class='del'>-          */</div><div class='del'>-         req.seq     = vec-&gt;seq;</div><div class='del'>-         req.tv_sec  = tv.tv_sec;</div><div class='del'>-         req.tv_usec = tv.tv_usec;</div><div class='del'>-</div><div class='del'>-         return changelog_rpc_sumbit_req (rpc, (void *)&amp;req,</div><div class='del'>-                                          frame, &amp;changelog_ev_program,</div><div class='del'>-                                          CHANGELOG_REV_PROC_EVENT,</div><div class='del'>-                                          vec-&gt;vector, vec-&gt;count, NULL,</div><div class='del'>-                                          this, changelog_event_dispatch_cbk,</div><div class='del'>-                                          (xdrproc_t) xdr_changelog_event_req);</div><div class='del'>- }</div><div class='del'>-</div><div class='del'>- int</div><div class='del'>- changelog_event_dispatch_rpc (call_frame_t *frame, xlator_t *this, void *data)</div><div class='del'>- {</div><div class='del'>-         int                idx      = 0;</div><div class='del'>-         int                count    = 0;</div><div class='del'>-         int                ret      = 0;</div><div class='del'>-         unsigned long      sequence = 0;</div><div class='del'>-         rbuf_iovec_t      *rvec     = NULL;</div><div class='del'>-         struct ev_rpc     *erpc     = NULL;</div><div class='del'>-         struct rlist_iter  riter    = {{0,},};</div><div class='del'>-</div><div class='del'>-         /* dispatch NR_IOVEC IO vectors at a time. */</div><div class='del'>-</div><div class='del'>-         erpc = data;</div><div class='del'>-         sequence = erpc-&gt;rlist-&gt;seq[0];</div><div class='del'>-</div><div class='del'>-         rlist_iter_init (&amp;riter, erpc-&gt;rlist);</div><div class='del'>-</div><div class='del'>-         rvec_for_each_entry (rvec, &amp;riter) {</div><div class='del'>-                 idx = count % NR_IOVEC;</div><div class='del'>-                 if (++count == NR_IOVEC) {</div><div class='del'>-                         erpc-&gt;vec.vector[idx] = rvec-&gt;iov;</div><div class='del'>-                         erpc-&gt;vec.seq = sequence++;</div><div class='del'>-                         erpc-&gt;vec.count = NR_IOVEC;</div><div class='del'>-</div><div class='del'>-                         ret = changelog_dispatch_vec (frame, this,</div><div class='del'>-                                                       erpc-&gt;rpc, &amp;erpc-&gt;vec);</div><div class='del'>-                         if (ret)</div><div class='del'>-                                 break;</div><div class='del'>-                         count = 0;</div><div class='del'>-                         continue;</div><div class='del'>-                 }</div><div class='del'>-</div><div class='del'>-                 erpc-&gt;vec.vector[idx] = rvec-&gt;iov;</div><div class='del'>-         }</div><div class='del'>-</div><div class='del'>-         if (ret)</div><div class='del'>-                 goto error_return;</div><div class='del'>-</div><div class='del'>-         idx = count % NR_IOVEC;</div><div class='del'>-         if (idx) {</div><div class='del'>-                 erpc-&gt;vec.seq = sequence;</div><div class='del'>-                 erpc-&gt;vec.count = idx;</div><div class='del'>-</div><div class='del'>-                 ret = changelog_dispatch_vec (frame, this,</div><div class='del'>-                                               erpc-&gt;rpc, &amp;erpc-&gt;vec);</div><div class='del'>-         }</div><div class='del'>-</div><div class='del'>- error_return:</div><div class='del'>-         return ret;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_event_req req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    (void)gettimeofday(&amp;tv, NULL);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * Event dispatch RPC header contains a sequence number for each</div><div class='add'>+     * dispatch. This allows the receiver to order the request before</div><div class='add'>+     * processing.</div><div class='add'>+     */</div><div class='add'>+    req.seq = vec-&gt;seq;</div><div class='add'>+    req.tv_sec = tv.tv_sec;</div><div class='add'>+    req.tv_usec = tv.tv_usec;</div><div class='add'>+</div><div class='add'>+    return changelog_rpc_sumbit_req(</div><div class='add'>+        rpc, (void *)&amp;req, frame, &amp;changelog_ev_program,</div><div class='add'>+        CHANGELOG_REV_PROC_EVENT, vec-&gt;vector, vec-&gt;count, NULL, this,</div><div class='add'>+        changelog_event_dispatch_cbk, (xdrproc_t)xdr_changelog_event_req);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_rpc_notify (struct rpc_clnt *rpc,</div><div class='del'>-                      void *mydata, rpc_clnt_event_t event, void *data)</div><div class='add'>+changelog_event_dispatch_rpc(call_frame_t *frame, xlator_t *this, void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t                *this      = NULL;</div><div class='del'>-        changelog_rpc_clnt_t    *crpc      = NULL;</div><div class='del'>-        changelog_clnt_t        *c_clnt    = NULL;</div><div class='del'>-        changelog_priv_t        *priv      = NULL;</div><div class='del'>-        changelog_ev_selector_t *selection = NULL;</div><div class='add'>+    int idx = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned long sequence = 0;</div><div class='add'>+    rbuf_iovec_t *rvec = NULL;</div><div class='add'>+    struct ev_rpc *erpc = NULL;</div><div class='add'>+    struct rlist_iter riter = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    /* dispatch NR_IOVEC IO vectors at a time. */</div><div class='add'>+</div><div class='add'>+    erpc = data;</div><div class='add'>+    sequence = erpc-&gt;rlist-&gt;seq[0];</div><div class='add'>+</div><div class='add'>+    rlist_iter_init(&amp;riter, erpc-&gt;rlist);</div><div class='add'>+</div><div class='add'>+    rvec_for_each_entry(rvec, &amp;riter)</div><div class='add'>+    {</div><div class='add'>+        idx = count % NR_IOVEC;</div><div class='add'>+        if (++count == NR_IOVEC) {</div><div class='add'>+            erpc-&gt;vec.vector[idx] = rvec-&gt;iov;</div><div class='add'>+            erpc-&gt;vec.seq = sequence++;</div><div class='add'>+            erpc-&gt;vec.count = NR_IOVEC;</div><div class='ctx'> </div><div class='del'>-        crpc = mydata;</div><div class='del'>-        this = crpc-&gt;this;</div><div class='del'>-        c_clnt = crpc-&gt;c_clnt;</div><div class='add'>+            ret = changelog_dispatch_vec(frame, this, erpc-&gt;rpc, &amp;erpc-&gt;vec);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='add'>+            count = 0;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        erpc-&gt;vec.vector[idx] = rvec-&gt;iov;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        switch (event) {</div><div class='add'>+    idx = count % NR_IOVEC;</div><div class='add'>+    if (idx) {</div><div class='add'>+        erpc-&gt;vec.seq = sequence;</div><div class='add'>+        erpc-&gt;vec.count = idx;</div><div class='add'>+</div><div class='add'>+        ret = changelog_dispatch_vec(frame, this, erpc-&gt;rpc, &amp;erpc-&gt;vec);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+changelog_rpc_notify(struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,</div><div class='add'>+                     void *data)</div><div class='add'>+{</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+    changelog_clnt_t *c_clnt = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_ev_selector_t *selection = NULL;</div><div class='add'>+</div><div class='add'>+    crpc = mydata;</div><div class='add'>+    this = crpc-&gt;this;</div><div class='add'>+    c_clnt = crpc-&gt;c_clnt;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    switch (event) {</div><div class='ctx'>         case RPC_CLNT_CONNECT:</div><div class='del'>-                selection = &amp;priv-&gt;ev_selection;</div><div class='add'>+            selection = &amp;priv-&gt;ev_selection;</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;c_clnt-&gt;wait_lock);</div><div class='add'>+            LOCK(&amp;c_clnt-&gt;wait_lock);</div><div class='add'>+            {</div><div class='add'>+                LOCK(&amp;c_clnt-&gt;active_lock);</div><div class='ctx'>                 {</div><div class='del'>-                        LOCK (&amp;c_clnt-&gt;active_lock);</div><div class='del'>-                        {</div><div class='del'>-                                changelog_select_event (this, selection,</div><div class='del'>-                                                        crpc-&gt;filter);</div><div class='del'>-                                list_move_tail (&amp;crpc-&gt;list, &amp;c_clnt-&gt;active);</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;c_clnt-&gt;active_lock);</div><div class='add'>+                    changelog_select_event(this, selection, crpc-&gt;filter);</div><div class='add'>+                    list_move_tail(&amp;crpc-&gt;list, &amp;c_clnt-&gt;active);</div><div class='ctx'>                 }</div><div class='del'>-                UNLOCK (&amp;c_clnt-&gt;wait_lock);</div><div class='add'>+                UNLOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;c_clnt-&gt;wait_lock);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case RPC_CLNT_DISCONNECT:</div><div class='del'>-                rpc_clnt_disable (crpc-&gt;rpc);</div><div class='add'>+            rpc_clnt_disable(crpc-&gt;rpc);</div><div class='ctx'> </div><div class='del'>-                /* rpc_clnt_disable doesn't unref the rpc. It just marks</div><div class='del'>-                 * the rpc as disabled and cancels reconnection timer.</div><div class='del'>-                 * Hence unref the rpc object to free it.</div><div class='del'>-                 */</div><div class='del'>-                rpc_clnt_unref (crpc-&gt;rpc);</div><div class='add'>+            /* rpc_clnt_disable doesn't unref the rpc. It just marks</div><div class='add'>+             * the rpc as disabled and cancels reconnection timer.</div><div class='add'>+             * Hence unref the rpc object to free it.</div><div class='add'>+             */</div><div class='add'>+            rpc_clnt_unref(crpc-&gt;rpc);</div><div class='ctx'> </div><div class='del'>-                if (priv)</div><div class='del'>-                        selection = &amp;priv-&gt;ev_selection;</div><div class='add'>+            if (priv)</div><div class='add'>+                selection = &amp;priv-&gt;ev_selection;</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;crpc-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        if (selection)</div><div class='del'>-                                changelog_deselect_event (this, selection,</div><div class='del'>-                                                          crpc-&gt;filter);</div><div class='del'>-                        changelog_set_disconnect_flag (crpc, _gf_true);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;crpc-&gt;lock);</div><div class='add'>+            LOCK(&amp;crpc-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                if (selection)</div><div class='add'>+                    changelog_deselect_event(this, selection, crpc-&gt;filter);</div><div class='add'>+                changelog_set_disconnect_flag(crpc, _gf_true);</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;crpc-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'>         case RPC_CLNT_MSG:</div><div class='ctx'>         case RPC_CLNT_DESTROY:</div><div class='del'>-                /* Free up mydata */</div><div class='del'>-                changelog_rpc_clnt_unref (crpc);</div><div class='del'>-                break;</div><div class='add'>+            /* Free up mydata */</div><div class='add'>+            changelog_rpc_clnt_unref(crpc);</div><div class='add'>+            break;</div><div class='ctx'>         case RPC_CLNT_PING:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-changelog_ev_connector (void *data)</div><div class='add'>+changelog_ev_connector(void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t             *this   = NULL;</div><div class='del'>-        changelog_clnt_t     *c_clnt = NULL;</div><div class='del'>-        changelog_rpc_clnt_t *crpc   = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_clnt_t *c_clnt = NULL;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='ctx'> </div><div class='del'>-        c_clnt = data;</div><div class='del'>-        this = c_clnt-&gt;this;</div><div class='add'>+    c_clnt = data;</div><div class='add'>+    this = c_clnt-&gt;this;</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;c_clnt-&gt;pending_lock);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;c_clnt-&gt;pending))</div><div class='del'>-                                pthread_cond_wait (&amp;c_clnt-&gt;pending_cond,</div><div class='del'>-                                                   &amp;c_clnt-&gt;pending_lock);</div><div class='del'>-                        crpc = list_first_entry (&amp;c_clnt-&gt;pending,</div><div class='del'>-                                                 changelog_rpc_clnt_t, list);</div><div class='del'>-                        crpc-&gt;rpc =</div><div class='del'>-                                changelog_rpc_client_init (this, crpc,</div><div class='del'>-                                                           crpc-&gt;sock,</div><div class='del'>-                                                           changelog_rpc_notify);</div><div class='del'>-                        if (!crpc-&gt;rpc) {</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                         CHANGELOG_MSG_RPC_CONNECT_ERROR,</div><div class='del'>-                                         "failed to connect back",</div><div class='del'>-                                         "path=%s", crpc-&gt;sock,</div><div class='del'>-                                         NULL);</div><div class='del'>-                                crpc-&gt;cleanup (crpc);</div><div class='del'>-                                goto mutex_unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        LOCK (&amp;c_clnt-&gt;wait_lock);</div><div class='del'>-                        {</div><div class='del'>-                                list_move_tail (&amp;crpc-&gt;list, &amp;c_clnt-&gt;waitq);</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;c_clnt-&gt;wait_lock);</div><div class='del'>-                }</div><div class='del'>-        mutex_unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;c_clnt-&gt;pending))</div><div class='add'>+                pthread_cond_wait(&amp;c_clnt-&gt;pending_cond, &amp;c_clnt-&gt;pending_lock);</div><div class='add'>+            crpc = list_first_entry(&amp;c_clnt-&gt;pending, changelog_rpc_clnt_t,</div><div class='add'>+                                    list);</div><div class='add'>+            crpc-&gt;rpc = changelog_rpc_client_init(this, crpc, crpc-&gt;sock,</div><div class='add'>+                                                  changelog_rpc_notify);</div><div class='add'>+            if (!crpc-&gt;rpc) {</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                        CHANGELOG_MSG_RPC_CONNECT_ERROR,</div><div class='add'>+                        "failed to connect back", "path=%s", crpc-&gt;sock, NULL);</div><div class='add'>+                crpc-&gt;cleanup(crpc);</div><div class='add'>+                goto mutex_unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            LOCK(&amp;c_clnt-&gt;wait_lock);</div><div class='add'>+            {</div><div class='add'>+                list_move_tail(&amp;crpc-&gt;list, &amp;c_clnt-&gt;waitq);</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;c_clnt-&gt;wait_lock);</div><div class='ctx'>         }</div><div class='add'>+    mutex_unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_ev_cleanup_connections (xlator_t *this, changelog_clnt_t *c_clnt)</div><div class='add'>+changelog_ev_cleanup_connections(xlator_t *this, changelog_clnt_t *c_clnt)</div><div class='ctx'> {</div><div class='del'>-        changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='ctx'> </div><div class='del'>-        /* cleanup active connections */</div><div class='del'>-        LOCK (&amp;c_clnt-&gt;active_lock);</div><div class='add'>+    /* cleanup active connections */</div><div class='add'>+    LOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(crpc, &amp;c_clnt-&gt;active, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (crpc, &amp;c_clnt-&gt;active, list) {</div><div class='del'>-                        rpc_clnt_disable (crpc-&gt;rpc);</div><div class='del'>-                }</div><div class='add'>+            rpc_clnt_disable(crpc-&gt;rpc);</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;c_clnt-&gt;active_lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;c_clnt-&gt;active_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -255,147 +254,146 @@ changelog_ev_cleanup_connections (xlator_t *this, changelog_clnt_t *c_clnt)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static changelog_rpc_clnt_t *</div><div class='del'>-get_client (changelog_clnt_t *c_clnt, struct list_head **next)</div><div class='add'>+get_client(changelog_clnt_t *c_clnt, struct list_head **next)</div><div class='ctx'> {</div><div class='del'>-        changelog_rpc_clnt_t *crpc = NULL;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;c_clnt-&gt;active_lock);</div><div class='del'>-        {</div><div class='del'>-                if (*next == &amp;c_clnt-&gt;active)</div><div class='del'>-                        goto unblock;</div><div class='del'>-                crpc = list_entry (*next, changelog_rpc_clnt_t, list);</div><div class='del'>-                /* ref rpc as DISCONNECT might unref the rpc asynchronously */</div><div class='del'>-                changelog_rpc_clnt_ref (crpc);</div><div class='del'>-                rpc_clnt_ref (crpc-&gt;rpc);</div><div class='del'>-                *next = (*next)-&gt;next;</div><div class='del'>-        }</div><div class='del'>- unblock:</div><div class='del'>-        UNLOCK (&amp;c_clnt-&gt;active_lock);</div><div class='del'>-</div><div class='del'>-        return crpc;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+    {</div><div class='add'>+        if (*next == &amp;c_clnt-&gt;active)</div><div class='add'>+            goto unblock;</div><div class='add'>+        crpc = list_entry(*next, changelog_rpc_clnt_t, list);</div><div class='add'>+        /* ref rpc as DISCONNECT might unref the rpc asynchronously */</div><div class='add'>+        changelog_rpc_clnt_ref(crpc);</div><div class='add'>+        rpc_clnt_ref(crpc-&gt;rpc);</div><div class='add'>+        *next = (*next)-&gt;next;</div><div class='add'>+    }</div><div class='add'>+unblock:</div><div class='add'>+    UNLOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+</div><div class='add'>+    return crpc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-put_client (changelog_clnt_t *c_clnt, changelog_rpc_clnt_t *crpc)</div><div class='add'>+put_client(changelog_clnt_t *c_clnt, changelog_rpc_clnt_t *crpc)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;c_clnt-&gt;active_lock);</div><div class='del'>-        {</div><div class='del'>-                rpc_clnt_unref (crpc-&gt;rpc);</div><div class='del'>-                changelog_rpc_clnt_unref (crpc);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;c_clnt-&gt;active_lock);</div><div class='add'>+    LOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+    {</div><div class='add'>+        rpc_clnt_unref(crpc-&gt;rpc);</div><div class='add'>+        changelog_rpc_clnt_unref(crpc);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;c_clnt-&gt;active_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_dispatcher (rbuf_list_t *rlist, void *arg)</div><div class='add'>+_dispatcher(rbuf_list_t *rlist, void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t             *this   = NULL;</div><div class='del'>-        changelog_clnt_t     *c_clnt = NULL;</div><div class='del'>-        changelog_rpc_clnt_t *crpc   = NULL;</div><div class='del'>-        struct ev_rpc         erpc   = {0,};</div><div class='del'>-        struct list_head     *next   = NULL;</div><div class='del'>-</div><div class='del'>-        c_clnt = arg;</div><div class='del'>-        this = c_clnt-&gt;this;</div><div class='del'>-</div><div class='del'>-        erpc.rlist = rlist;</div><div class='del'>-        next = c_clnt-&gt;active.next;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                crpc = get_client (c_clnt, &amp;next);</div><div class='del'>-                if (!crpc)</div><div class='del'>-                        break;</div><div class='del'>-                erpc.rpc = crpc-&gt;rpc;</div><div class='del'>-                (void) changelog_invoke_rpc (this, crpc-&gt;rpc,</div><div class='del'>-                                             &amp;changelog_ev_program,</div><div class='del'>-                                             CHANGELOG_REV_PROC_EVENT, &amp;erpc);</div><div class='del'>-                put_client (c_clnt, crpc);</div><div class='del'>-        }</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_clnt_t *c_clnt = NULL;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+    struct ev_rpc erpc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct list_head *next = NULL;</div><div class='add'>+</div><div class='add'>+    c_clnt = arg;</div><div class='add'>+    this = c_clnt-&gt;this;</div><div class='add'>+</div><div class='add'>+    erpc.rlist = rlist;</div><div class='add'>+    next = c_clnt-&gt;active.next;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        crpc = get_client(c_clnt, &amp;next);</div><div class='add'>+        if (!crpc)</div><div class='add'>+            break;</div><div class='add'>+        erpc.rpc = crpc-&gt;rpc;</div><div class='add'>+        (void)changelog_invoke_rpc(this, crpc-&gt;rpc, &amp;changelog_ev_program,</div><div class='add'>+                                   CHANGELOG_REV_PROC_EVENT, &amp;erpc);</div><div class='add'>+        put_client(c_clnt, crpc);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /** this is called under rotbuff's lock */</div><div class='ctx'> void</div><div class='del'>-sequencer (rbuf_list_t *rlist, void *mydata)</div><div class='add'>+sequencer(rbuf_list_t *rlist, void *mydata)</div><div class='ctx'> {</div><div class='del'>-        unsigned long     range  = 0;</div><div class='del'>-        changelog_clnt_t *c_clnt = 0;</div><div class='add'>+    unsigned long range = 0;</div><div class='add'>+    changelog_clnt_t *c_clnt = 0;</div><div class='ctx'> </div><div class='del'>-        c_clnt = mydata;</div><div class='add'>+    c_clnt = mydata;</div><div class='ctx'> </div><div class='del'>-        range = (RLIST_ENTRY_COUNT (rlist)) / NR_IOVEC;</div><div class='del'>-        if ((RLIST_ENTRY_COUNT (rlist)) % NR_IOVEC)</div><div class='del'>-                range++;</div><div class='del'>-        RLIST_STORE_SEQ (rlist, c_clnt-&gt;sequence, range);</div><div class='add'>+    range = (RLIST_ENTRY_COUNT(rlist)) / NR_IOVEC;</div><div class='add'>+    if ((RLIST_ENTRY_COUNT(rlist)) % NR_IOVEC)</div><div class='add'>+        range++;</div><div class='add'>+    RLIST_STORE_SEQ(rlist, c_clnt-&gt;sequence, range);</div><div class='ctx'> </div><div class='del'>-        c_clnt-&gt;sequence += range;</div><div class='add'>+    c_clnt-&gt;sequence += range;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-changelog_ev_dispatch (void *data)</div><div class='add'>+changelog_ev_dispatch(void *data)</div><div class='ctx'> {</div><div class='del'>-        int                   ret    = 0;</div><div class='del'>-        void                 *opaque = NULL;</div><div class='del'>-        xlator_t             *this   = NULL;</div><div class='del'>-        changelog_clnt_t     *c_clnt = NULL;</div><div class='del'>-        struct timeval        tv     = {0,};</div><div class='del'>-</div><div class='del'>-        c_clnt = data;</div><div class='del'>-        this = c_clnt-&gt;this;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                /* TODO: change this to be pthread cond based.. later */</div><div class='del'>-</div><div class='del'>-                tv.tv_sec = 1;</div><div class='del'>-                tv.tv_usec = 0;</div><div class='del'>-                select (0, NULL, NULL, NULL, &amp;tv);</div><div class='del'>-</div><div class='del'>-                ret = rbuf_get_buffer (c_clnt-&gt;rbuf,</div><div class='del'>-                                       &amp;opaque, sequencer, c_clnt);</div><div class='del'>-                if (ret != RBUF_CONSUMABLE) {</div><div class='del'>-                        if (ret != RBUF_EMPTY)</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                         CHANGELOG_MSG_BUFFER_STARVATION_ERROR,</div><div class='del'>-                                         "Failed to get buffer for RPC dispatch",</div><div class='del'>-                                         "rbuf_retval=%d", ret,</div><div class='del'>-                                         NULL);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = rbuf_wait_for_completion (c_clnt-&gt;rbuf,</div><div class='del'>-                                                opaque, _dispatcher, c_clnt);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                CHANGELOG_MSG_PUT_BUFFER_FAILED,</div><div class='del'>-                                "failed to put buffer after consumption");</div><div class='del'>-</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *opaque = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_clnt_t *c_clnt = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    c_clnt = data;</div><div class='add'>+    this = c_clnt-&gt;this;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        /* TODO: change this to be pthread cond based.. later */</div><div class='add'>+</div><div class='add'>+        tv.tv_sec = 1;</div><div class='add'>+        tv.tv_usec = 0;</div><div class='add'>+        select(0, NULL, NULL, NULL, &amp;tv);</div><div class='add'>+</div><div class='add'>+        ret = rbuf_get_buffer(c_clnt-&gt;rbuf, &amp;opaque, sequencer, c_clnt);</div><div class='add'>+        if (ret != RBUF_CONSUMABLE) {</div><div class='add'>+            if (ret != RBUF_EMPTY)</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                        CHANGELOG_MSG_BUFFER_STARVATION_ERROR,</div><div class='add'>+                        "Failed to get buffer for RPC dispatch",</div><div class='add'>+                        "rbuf_retval=%d", ret, NULL);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        ret = rbuf_wait_for_completion(c_clnt-&gt;rbuf, opaque, _dispatcher,</div><div class='add'>+                                       c_clnt);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                   CHANGELOG_MSG_PUT_BUFFER_FAILED,</div><div class='add'>+                   "failed to put buffer after consumption");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_ev_queue_connection (changelog_clnt_t *c_clnt,</div><div class='del'>-                               changelog_rpc_clnt_t *crpc)</div><div class='add'>+changelog_ev_queue_connection(changelog_clnt_t *c_clnt,</div><div class='add'>+                              changelog_rpc_clnt_t *crpc)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;c_clnt-&gt;pending_lock);</div><div class='del'>-        {</div><div class='del'>-                list_add_tail (&amp;crpc-&gt;list, &amp;c_clnt-&gt;pending);</div><div class='del'>-                pthread_cond_signal (&amp;c_clnt-&gt;pending_cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+    pthread_mutex_lock(&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+    {</div><div class='add'>+        list_add_tail(&amp;crpc-&gt;list, &amp;c_clnt-&gt;pending);</div><div class='add'>+        pthread_cond_signal(&amp;c_clnt-&gt;pending_cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;c_clnt-&gt;pending_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_procedure changelog_ev_procs[CHANGELOG_REV_PROC_MAX] = {</div><div class='del'>-        [CHANGELOG_REV_PROC_NULL]  = {"NULL", NULL},</div><div class='del'>-        [CHANGELOG_REV_PROC_EVENT] = {</div><div class='del'>-                "EVENT DISPATCH", changelog_event_dispatch_rpc</div><div class='del'>-        },</div><div class='add'>+    [CHANGELOG_REV_PROC_NULL] = {"NULL", NULL},</div><div class='add'>+    [CHANGELOG_REV_PROC_EVENT] = {"EVENT DISPATCH",</div><div class='add'>+                                  changelog_event_dispatch_rpc},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt_program changelog_ev_program = {</div><div class='del'>-        .progname  = "CHANGELOG EVENT DISPATCHER",</div><div class='del'>-        .prognum   = CHANGELOG_REV_RPC_PROCNUM,</div><div class='del'>-        .progver   = CHANGELOG_REV_RPC_PROCVER,</div><div class='del'>-        .numproc   = CHANGELOG_REV_PROC_MAX,</div><div class='del'>-        .proctable = changelog_ev_procs,</div><div class='add'>+    .progname = "CHANGELOG EVENT DISPATCHER",</div><div class='add'>+    .prognum = CHANGELOG_REV_RPC_PROCNUM,</div><div class='add'>+    .progver = CHANGELOG_REV_RPC_PROCVER,</div><div class='add'>+    .numproc = CHANGELOG_REV_PROC_MAX,</div><div class='add'>+    .proctable = changelog_ev_procs,</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-helpers.c b/xlators/features/changelog/src/changelog-helpers.c<br/>index 28c72a8f9d4..53219bf2d78 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-helpers.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-helpers.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-helpers.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-helpers.c</a></div><div class='hunk'>@@ -24,316 +24,301 @@</div><div class='ctx'> #include &lt;pthread.h&gt;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_cleanup_free_mutex (void *arg_mutex)</div><div class='add'>+changelog_cleanup_free_mutex(void *arg_mutex)</div><div class='ctx'> {</div><div class='del'>-    pthread_mutex_t *p_mutex = (pthread_mutex_t*) arg_mutex;</div><div class='add'>+    pthread_mutex_t *p_mutex = (pthread_mutex_t *)arg_mutex;</div><div class='ctx'> </div><div class='ctx'>     if (p_mutex)</div><div class='del'>-            pthread_mutex_unlock(p_mutex);</div><div class='add'>+        pthread_mutex_unlock(p_mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_thread_cleanup (xlator_t *this, pthread_t thr_id)</div><div class='add'>+changelog_thread_cleanup(xlator_t *this, pthread_t thr_id)</div><div class='ctx'> {</div><div class='del'>-        int   ret    = 0;</div><div class='del'>-        void *retval = NULL;</div><div class='del'>-</div><div class='del'>-        /* send a cancel request to the thread */</div><div class='del'>-        ret = pthread_cancel (thr_id);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_PTHREAD_CANCEL_FAILED,</div><div class='del'>-                        "could not cancel thread");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pthread_join (thr_id, &amp;retval);</div><div class='del'>-        if ((ret != 0) || (retval != PTHREAD_CANCELED)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_PTHREAD_CANCEL_FAILED,</div><div class='del'>-                        "cancel request not adhered as expected");</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *retval = NULL;</div><div class='add'>+</div><div class='add'>+    /* send a cancel request to the thread */</div><div class='add'>+    ret = pthread_cancel(thr_id);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               CHANGELOG_MSG_PTHREAD_CANCEL_FAILED, "could not cancel thread");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pthread_join(thr_id, &amp;retval);</div><div class='add'>+    if ((ret != 0) || (retval != PTHREAD_CANCELED)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               CHANGELOG_MSG_PTHREAD_CANCEL_FAILED,</div><div class='add'>+               "cancel request not adhered as expected");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-changelog_get_usable_buffer (changelog_local_t *local)</div><div class='add'>+changelog_get_usable_buffer(changelog_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        changelog_log_data_t *cld = NULL;</div><div class='add'>+    changelog_log_data_t *cld = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                return NULL;</div><div class='add'>+    if (!local)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        cld = &amp;local-&gt;cld;</div><div class='del'>-        if (!cld-&gt;cld_iobuf)</div><div class='del'>-                return NULL;</div><div class='add'>+    cld = &amp;local-&gt;cld;</div><div class='add'>+    if (!cld-&gt;cld_iobuf)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        return cld-&gt;cld_iobuf-&gt;ptr;</div><div class='add'>+    return cld-&gt;cld_iobuf-&gt;ptr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-changelog_selector_index (unsigned int selector)</div><div class='add'>+changelog_selector_index(unsigned int selector)</div><div class='ctx'> {</div><div class='del'>-        return (ffs (selector) - 1);</div><div class='add'>+    return (ffs(selector) - 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_ev_selected (xlator_t *this,</div><div class='del'>-                       changelog_ev_selector_t *selection,</div><div class='del'>-                       unsigned int selector)</div><div class='add'>+changelog_ev_selected(xlator_t *this, changelog_ev_selector_t *selection,</div><div class='add'>+                      unsigned int selector)</div><div class='ctx'> {</div><div class='del'>-        int idx = 0;</div><div class='del'>-</div><div class='del'>-        idx = changelog_selector_index (selector);</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "selector ref count for %d (idx: %d): %d",</div><div class='del'>-                      selector, idx, selection-&gt;ref[idx]);</div><div class='del'>-        /* this can be lockless */</div><div class='del'>-        return (idx &lt; CHANGELOG_EV_SELECTION_RANGE</div><div class='del'>-                 &amp;&amp; (selection-&gt;ref[idx] &gt; 0));</div><div class='add'>+    int idx = 0;</div><div class='add'>+</div><div class='add'>+    idx = changelog_selector_index(selector);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "selector ref count for %d (idx: %d): %d",</div><div class='add'>+                 selector, idx, selection-&gt;ref[idx]);</div><div class='add'>+    /* this can be lockless */</div><div class='add'>+    return (idx &lt; CHANGELOG_EV_SELECTION_RANGE &amp;&amp; (selection-&gt;ref[idx] &gt; 0));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_select_event (xlator_t *this,</div><div class='del'>-                        changelog_ev_selector_t *selection,</div><div class='del'>-                        unsigned int selector)</div><div class='add'>+changelog_select_event(xlator_t *this, changelog_ev_selector_t *selection,</div><div class='add'>+                       unsigned int selector)</div><div class='ctx'> {</div><div class='del'>-        int idx = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;selection-&gt;reflock);</div><div class='del'>-        {</div><div class='del'>-                while (selector) {</div><div class='del'>-                        idx = changelog_selector_index (selector);</div><div class='del'>-                        if (idx &lt; CHANGELOG_EV_SELECTION_RANGE) {</div><div class='del'>-                                selection-&gt;ref[idx]++;</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "selecting event %d", idx);</div><div class='del'>-                        }</div><div class='del'>-                        selector &amp;= ~(1 &lt;&lt; idx);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;selection-&gt;reflock);</div><div class='add'>+    int idx = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;selection-&gt;reflock);</div><div class='add'>+    {</div><div class='add'>+        while (selector) {</div><div class='add'>+            idx = changelog_selector_index(selector);</div><div class='add'>+            if (idx &lt; CHANGELOG_EV_SELECTION_RANGE) {</div><div class='add'>+                selection-&gt;ref[idx]++;</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "selecting event %d", idx);</div><div class='add'>+            }</div><div class='add'>+            selector &amp;= ~(1 &lt;&lt; idx);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;selection-&gt;reflock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_deselect_event (xlator_t *this,</div><div class='del'>-                          changelog_ev_selector_t *selection,</div><div class='del'>-                          unsigned int selector)</div><div class='add'>+changelog_deselect_event(xlator_t *this, changelog_ev_selector_t *selection,</div><div class='add'>+                         unsigned int selector)</div><div class='ctx'> {</div><div class='del'>-        int idx = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;selection-&gt;reflock);</div><div class='del'>-        {</div><div class='del'>-                while (selector) {</div><div class='del'>-                        idx = changelog_selector_index (selector);</div><div class='del'>-                        if (idx &lt; CHANGELOG_EV_SELECTION_RANGE) {</div><div class='del'>-                                selection-&gt;ref[idx]--;</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                              "de-selecting event %d", idx);</div><div class='del'>-                        }</div><div class='del'>-                        selector &amp;= ~(1 &lt;&lt; idx);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;selection-&gt;reflock);</div><div class='add'>+    int idx = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;selection-&gt;reflock);</div><div class='add'>+    {</div><div class='add'>+        while (selector) {</div><div class='add'>+            idx = changelog_selector_index(selector);</div><div class='add'>+            if (idx &lt; CHANGELOG_EV_SELECTION_RANGE) {</div><div class='add'>+                selection-&gt;ref[idx]--;</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "de-selecting event %d", idx);</div><div class='add'>+            }</div><div class='add'>+            selector &amp;= ~(1 &lt;&lt; idx);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;selection-&gt;reflock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_init_event_selection (xlator_t *this,</div><div class='del'>-                                changelog_ev_selector_t *selection)</div><div class='add'>+changelog_init_event_selection(xlator_t *this,</div><div class='add'>+                               changelog_ev_selector_t *selection)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int j = CHANGELOG_EV_SELECTION_RANGE;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int j = CHANGELOG_EV_SELECTION_RANGE;</div><div class='ctx'> </div><div class='del'>-        ret = LOCK_INIT (&amp;selection-&gt;reflock);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                return -1;</div><div class='add'>+    ret = LOCK_INIT(&amp;selection-&gt;reflock);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;selection-&gt;reflock);</div><div class='del'>-        {</div><div class='del'>-                while (j--) {</div><div class='del'>-                        selection-&gt;ref[j] = 0;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;selection-&gt;reflock);</div><div class='add'>+    {</div><div class='add'>+        while (j--) {</div><div class='add'>+            selection-&gt;ref[j] = 0;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;selection-&gt;reflock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;selection-&gt;reflock);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_cleanup_event_selection (xlator_t *this,</div><div class='del'>-                                   changelog_ev_selector_t *selection)</div><div class='add'>+changelog_cleanup_event_selection(xlator_t *this,</div><div class='add'>+                                  changelog_ev_selector_t *selection)</div><div class='ctx'> {</div><div class='del'>-        int j = CHANGELOG_EV_SELECTION_RANGE;</div><div class='add'>+    int j = CHANGELOG_EV_SELECTION_RANGE;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;selection-&gt;reflock);</div><div class='del'>-        {</div><div class='del'>-                while (j--) {</div><div class='del'>-                        if (selection-&gt;ref[j] &gt; 0)</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                        CHANGELOG_MSG_CLEANUP_ON_ACTIVE_REF,</div><div class='del'>-                                        "changelog event selection cleaning up "</div><div class='del'>-                                        " on active references");</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;selection-&gt;reflock);</div><div class='add'>+    {</div><div class='add'>+        while (j--) {</div><div class='add'>+            if (selection-&gt;ref[j] &gt; 0)</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                       CHANGELOG_MSG_CLEANUP_ON_ACTIVE_REF,</div><div class='add'>+                       "changelog event selection cleaning up "</div><div class='add'>+                       " on active references");</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;selection-&gt;reflock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;selection-&gt;reflock);</div><div class='ctx'> </div><div class='del'>-        return LOCK_DESTROY (&amp;selection-&gt;reflock);</div><div class='add'>+    return LOCK_DESTROY(&amp;selection-&gt;reflock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_perform_dispatch (xlator_t *this,</div><div class='del'>-                            changelog_priv_t *priv, void *mem, size_t size)</div><div class='add'>+changelog_perform_dispatch(xlator_t *this, changelog_priv_t *priv, void *mem,</div><div class='add'>+                           size_t size)</div><div class='ctx'> {</div><div class='del'>-        char *buf    = NULL;</div><div class='del'>-        void *opaque = NULL;</div><div class='del'>-</div><div class='del'>-        buf = rbuf_reserve_write_area (priv-&gt;rbuf, size, &amp;opaque);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                gf_msg_callingfn (this-&gt;name,</div><div class='del'>-                                  GF_LOG_WARNING, 0,</div><div class='del'>-                                  CHANGELOG_MSG_DISPATCH_EVENT_FAILED,</div><div class='del'>-                                  "failed to dispatch event");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    char *buf = NULL;</div><div class='add'>+    void *opaque = NULL;</div><div class='add'>+</div><div class='add'>+    buf = rbuf_reserve_write_area(priv-&gt;rbuf, size, &amp;opaque);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         CHANGELOG_MSG_DISPATCH_EVENT_FAILED,</div><div class='add'>+                         "failed to dispatch event");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        memcpy (buf, mem, size);</div><div class='del'>-        rbuf_write_complete (opaque);</div><div class='add'>+    memcpy(buf, mem, size);</div><div class='add'>+    rbuf_write_complete(opaque);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_dispatch_event (xlator_t *this,</div><div class='del'>-                          changelog_priv_t *priv, changelog_event_t *ev)</div><div class='add'>+changelog_dispatch_event(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                         changelog_event_t *ev)</div><div class='ctx'> {</div><div class='del'>-        changelog_ev_selector_t *selection = NULL;</div><div class='add'>+    changelog_ev_selector_t *selection = NULL;</div><div class='ctx'> </div><div class='del'>-        selection = &amp;priv-&gt;ev_selection;</div><div class='del'>-        if (changelog_ev_selected (this, selection, ev-&gt;ev_type)) {</div><div class='del'>-                changelog_perform_dispatch (this, priv, ev, CHANGELOG_EV_SIZE);</div><div class='del'>-        }</div><div class='add'>+    selection = &amp;priv-&gt;ev_selection;</div><div class='add'>+    if (changelog_ev_selected(this, selection, ev-&gt;ev_type)) {</div><div class='add'>+        changelog_perform_dispatch(this, priv, ev, CHANGELOG_EV_SIZE);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_set_usable_record_and_length (changelog_local_t *local,</div><div class='del'>-                                        size_t len, int xr)</div><div class='add'>+changelog_set_usable_record_and_length(changelog_local_t *local, size_t len,</div><div class='add'>+                                       int xr)</div><div class='ctx'> {</div><div class='del'>-        changelog_log_data_t *cld = NULL;</div><div class='add'>+    changelog_log_data_t *cld = NULL;</div><div class='ctx'> </div><div class='del'>-        cld = &amp;local-&gt;cld;</div><div class='add'>+    cld = &amp;local-&gt;cld;</div><div class='ctx'> </div><div class='del'>-        cld-&gt;cld_ptr_len = len;</div><div class='del'>-        cld-&gt;cld_xtra_records = xr;</div><div class='add'>+    cld-&gt;cld_ptr_len = len;</div><div class='add'>+    cld-&gt;cld_xtra_records = xr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_local_cleanup (xlator_t *xl, changelog_local_t *local)</div><div class='add'>+changelog_local_cleanup(xlator_t *xl, changelog_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int                   i   = 0;</div><div class='del'>-        changelog_opt_t      *co  = NULL;</div><div class='del'>-        changelog_log_data_t *cld = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    changelog_log_data_t *cld = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                return;</div><div class='add'>+    if (!local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        cld = &amp;local-&gt;cld;</div><div class='add'>+    cld = &amp;local-&gt;cld;</div><div class='ctx'> </div><div class='del'>-        /* cleanup dynamic allocation for extra records */</div><div class='del'>-        if (cld-&gt;cld_xtra_records) {</div><div class='del'>-                co = (changelog_opt_t *) cld-&gt;cld_ptr;</div><div class='del'>-                for (; i &lt; cld-&gt;cld_xtra_records; i++, co++)</div><div class='del'>-                        if (co-&gt;co_free)</div><div class='del'>-                                co-&gt;co_free (co);</div><div class='del'>-        }</div><div class='add'>+    /* cleanup dynamic allocation for extra records */</div><div class='add'>+    if (cld-&gt;cld_xtra_records) {</div><div class='add'>+        co = (changelog_opt_t *)cld-&gt;cld_ptr;</div><div class='add'>+        for (; i &lt; cld-&gt;cld_xtra_records; i++, co++)</div><div class='add'>+            if (co-&gt;co_free)</div><div class='add'>+                co-&gt;co_free(co);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_IOBUF_UNREF (cld-&gt;cld_iobuf);</div><div class='add'>+    CHANGELOG_IOBUF_UNREF(cld-&gt;cld_iobuf);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inode)</div><div class='del'>-                inode_unref (local-&gt;inode);</div><div class='add'>+    if (local-&gt;inode)</div><div class='add'>+        inode_unref(local-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        mem_put (local);</div><div class='add'>+    mem_put(local);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_write (int fd, char *buffer, size_t len)</div><div class='add'>+changelog_write(int fd, char *buffer, size_t len)</div><div class='ctx'> {</div><div class='del'>-        ssize_t size = 0;</div><div class='del'>-        size_t written = 0;</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    size_t written = 0;</div><div class='ctx'> </div><div class='del'>-        while (written &lt; len) {</div><div class='del'>-                size = sys_write (fd,</div><div class='del'>-                              buffer + written, len - written);</div><div class='del'>-                if (size &lt;= 0)</div><div class='del'>-                        break;</div><div class='add'>+    while (written &lt; len) {</div><div class='add'>+        size = sys_write(fd, buffer + written, len - written);</div><div class='add'>+        if (size &lt;= 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                written += size;</div><div class='del'>-        }</div><div class='add'>+        written += size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return (written != len);</div><div class='add'>+    return (written != len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-htime_update (xlator_t *this,</div><div class='del'>-              changelog_priv_t *priv, unsigned long ts,</div><div class='del'>-              char * buffer)</div><div class='add'>+htime_update(xlator_t *this, changelog_priv_t *priv, unsigned long ts,</div><div class='add'>+             char *buffer)</div><div class='ctx'> {</div><div class='del'>-        char changelog_path[PATH_MAX+1]   = {0,};</div><div class='del'>-        int len                           = -1;</div><div class='del'>-        char x_value[25]                  = {0,};</div><div class='del'>-        /* time stamp(10) + : (1) + rolltime (12 ) + buffer (2) */</div><div class='del'>-        int ret                           = 0;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;htime_fd ==-1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                        "Htime fd not available for updation");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        len = snprintf(changelog_path, PATH_MAX, "%s", buffer);</div><div class='del'>-        if (len &gt;= PATH_MAX) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (changelog_write (priv-&gt;htime_fd, (void*) changelog_path, len+1 ) &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                        "Htime file content write failed");</div><div class='del'>-                ret =-1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        len = snprintf (x_value, sizeof (x_value), "%lu:%d",</div><div class='del'>-                        ts, priv-&gt;rollover_count);</div><div class='del'>-        if (len &gt;= sizeof (x_value)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (sys_fsetxattr (priv-&gt;htime_fd, HTIME_KEY, x_value,</div><div class='del'>-                           len, XATTR_REPLACE)) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                         "Htime xattr updation failed with XATTR_REPLACE",</div><div class='del'>-                         "changelog=%s", changelog_path,</div><div class='del'>-                         NULL);</div><div class='del'>-</div><div class='del'>-                if (sys_fsetxattr (priv-&gt;htime_fd, HTIME_KEY, x_value,</div><div class='del'>-                                   len, 0)) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                                 "Htime xattr updation failed",</div><div class='del'>-                                 "changelog=%s", changelog_path,</div><div class='del'>-                                 NULL);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;rollover_count +=1;</div><div class='add'>+    char changelog_path[PATH_MAX + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int len = -1;</div><div class='add'>+    char x_value[25] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    /* time stamp(10) + : (1) + rolltime (12 ) + buffer (2) */</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;htime_fd == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+               "Htime fd not available for updation");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    len = snprintf(changelog_path, PATH_MAX, "%s", buffer);</div><div class='add'>+    if (len &gt;= PATH_MAX) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (changelog_write(priv-&gt;htime_fd, (void *)changelog_path, len + 1) &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+               "Htime file content write failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = snprintf(x_value, sizeof(x_value), "%lu:%d", ts,</div><div class='add'>+                   priv-&gt;rollover_count);</div><div class='add'>+    if (len &gt;= sizeof(x_value)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (sys_fsetxattr(priv-&gt;htime_fd, HTIME_KEY, x_value, len, XATTR_REPLACE)) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+                "Htime xattr updation failed with XATTR_REPLACE",</div><div class='add'>+                "changelog=%s", changelog_path, NULL);</div><div class='add'>+</div><div class='add'>+        if (sys_fsetxattr(priv-&gt;htime_fd, HTIME_KEY, x_value, len, 0)) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+                    "Htime xattr updation failed", "changelog=%s",</div><div class='add'>+                    changelog_path, NULL);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;rollover_count += 1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -345,43 +330,45 @@ out:</div><div class='ctx'>  * 0 : If NOT empty, proceed usual.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-cl_is_empty (xlator_t *this, int fd)</div><div class='add'>+cl_is_empty(xlator_t *this, int fd)</div><div class='ctx'> {</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        size_t          elen            = 0;</div><div class='del'>-        int             encoding        = -1;</div><div class='del'>-        char            buffer[1024]    = {0,};</div><div class='del'>-        struct stat     stbuf           = {0,};</div><div class='del'>-        int             major_version   = -1;</div><div class='del'>-        int             minor_version   = -1;</div><div class='del'>-</div><div class='del'>-        ret = sys_fstat (fd, &amp;stbuf);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_FSTAT_OP_FAILED,</div><div class='del'>-                        "Could not stat (CHANGELOG)");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_lseek (fd, 0, SEEK_SET);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_LSEEK_OP_FAILED,</div><div class='del'>-                        "Could not lseek (CHANGELOG)");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_GET_HEADER_INFO (fd, buffer, sizeof (buffer), encoding,</div><div class='del'>-                                   major_version, minor_version, elen);</div><div class='del'>-</div><div class='del'>-        if (elen == stbuf.st_size) {</div><div class='del'>-                ret = 1;</div><div class='del'>-        } else {</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t elen = 0;</div><div class='add'>+    int encoding = -1;</div><div class='add'>+    char buffer[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct stat stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int major_version = -1;</div><div class='add'>+    int minor_version = -1;</div><div class='add'>+</div><div class='add'>+    ret = sys_fstat(fd, &amp;stbuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FSTAT_OP_FAILED,</div><div class='add'>+               "Could not stat (CHANGELOG)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_lseek(fd, 0, SEEK_SET);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_LSEEK_OP_FAILED,</div><div class='add'>+               "Could not lseek (CHANGELOG)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_GET_HEADER_INFO(fd, buffer, sizeof(buffer), encoding,</div><div class='add'>+                              major_version, minor_version, elen);</div><div class='add'>+</div><div class='add'>+    if (elen == stbuf.st_size) {</div><div class='add'>+        ret = 1;</div><div class='add'>+    } else {</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -393,162 +380,156 @@ out:</div><div class='ctx'>  * -1 : Error</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-update_path (xlator_t *this, char *cl_path)</div><div class='add'>+update_path(xlator_t *this, char *cl_path)</div><div class='ctx'> {</div><div class='del'>-        const char low_cl[]     = "changelog";</div><div class='del'>-        const char up_cl[]      = "CHANGELOG";</div><div class='del'>-        char *found       = NULL;</div><div class='del'>-        int  ret          = -1;</div><div class='del'>-</div><div class='del'>-        found = strstr(cl_path, up_cl);</div><div class='del'>-</div><div class='del'>-        if (found == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_LSEEK_OP_FAILED,</div><div class='del'>-                        "Could not find CHANGELOG in changelog path");</div><div class='del'>-                goto out;</div><div class='del'>-        } else {</div><div class='del'>-                memcpy(found, low_cl, sizeof (low_cl) - 1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    const char low_cl[] = "changelog";</div><div class='add'>+    const char up_cl[] = "CHANGELOG";</div><div class='add'>+    char *found = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    found = strstr(cl_path, up_cl);</div><div class='add'>+</div><div class='add'>+    if (found == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_LSEEK_OP_FAILED,</div><div class='add'>+               "Could not find CHANGELOG in changelog path");</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        memcpy(found, low_cl, sizeof(low_cl) - 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-changelog_rollover_changelog (xlator_t *this,</div><div class='del'>-                              changelog_priv_t *priv, unsigned long ts)</div><div class='add'>+changelog_rollover_changelog(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                             unsigned long ts)</div><div class='ctx'> {</div><div class='del'>-        int   ret             = -1;</div><div class='del'>-        int   notify          = 0;</div><div class='del'>-        int   cl_empty_flag   = 0;</div><div class='del'>-        char  ofile[PATH_MAX] = {0,};</div><div class='del'>-        char  nfile[PATH_MAX] = {0,};</div><div class='del'>-        changelog_event_t ev  = {0,};</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;changelog_fd != -1) {</div><div class='del'>-                ret = sys_fsync (priv-&gt;changelog_fd);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='del'>-                                "fsync failed");</div><div class='del'>-                }</div><div class='del'>-                ret = cl_is_empty (this, priv-&gt;changelog_fd);</div><div class='del'>-                if (ret == 1) {</div><div class='del'>-                        cl_empty_flag = 1;</div><div class='del'>-                } else if (ret == -1) {</div><div class='del'>-                        /* Log error but proceed as usual */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                CHANGELOG_MSG_DETECT_EMPTY_CHANGELOG_FAILED,</div><div class='del'>-                                "Error detecting empty changelog");</div><div class='del'>-                }</div><div class='del'>-                sys_close (priv-&gt;changelog_fd);</div><div class='del'>-                priv-&gt;changelog_fd = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int notify = 0;</div><div class='add'>+    int cl_empty_flag = 0;</div><div class='add'>+    char ofile[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char nfile[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_event_t ev = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;changelog_fd != -1) {</div><div class='add'>+        ret = sys_fsync(priv-&gt;changelog_fd);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   CHANGELOG_MSG_FSYNC_OP_FAILED, "fsync failed");</div><div class='add'>+        }</div><div class='add'>+        ret = cl_is_empty(this, priv-&gt;changelog_fd);</div><div class='add'>+        if (ret == 1) {</div><div class='add'>+            cl_empty_flag = 1;</div><div class='add'>+        } else if (ret == -1) {</div><div class='add'>+            /* Log error but proceed as usual */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                   CHANGELOG_MSG_DETECT_EMPTY_CHANGELOG_FAILED,</div><div class='add'>+                   "Error detecting empty changelog");</div><div class='add'>+        }</div><div class='add'>+        sys_close(priv-&gt;changelog_fd);</div><div class='add'>+        priv-&gt;changelog_fd = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)snprintf(ofile, PATH_MAX, "%s/" CHANGELOG_FILE_NAME,</div><div class='add'>+                   priv-&gt;changelog_dir);</div><div class='add'>+    (void)snprintf(nfile, PATH_MAX, "%s/" CHANGELOG_FILE_NAME ".%lu",</div><div class='add'>+                   priv-&gt;changelog_dir, ts);</div><div class='add'>+</div><div class='add'>+    if (cl_empty_flag == 1) {</div><div class='add'>+        ret = sys_unlink(ofile);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                    CHANGELOG_MSG_UNLINK_OP_FAILED,</div><div class='add'>+                    "error unlinking empty changelog", "path=%s", ofile, NULL);</div><div class='add'>+            ret = 0; /* Error in unlinking empty changelog should</div><div class='add'>+                        not break further changelog operation, so</div><div class='add'>+                        reset return value to 0*/</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = sys_rename(ofile, nfile);</div><div class='ctx'> </div><div class='del'>-        (void) snprintf (ofile, PATH_MAX,</div><div class='del'>-                         "%s/"CHANGELOG_FILE_NAME, priv-&gt;changelog_dir);</div><div class='del'>-        (void) snprintf (nfile, PATH_MAX,</div><div class='del'>-                         "%s/"CHANGELOG_FILE_NAME".%lu",</div><div class='del'>-                         priv-&gt;changelog_dir, ts);</div><div class='del'>-</div><div class='del'>-        if (cl_empty_flag == 1) {</div><div class='del'>-                ret = sys_unlink (ofile);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_MSG_UNLINK_OP_FAILED,</div><div class='del'>-                                 "error unlinking empty changelog",</div><div class='del'>-                                 "path=%s", ofile,</div><div class='del'>-                                 NULL);</div><div class='del'>-                        ret = 0;  /* Error in unlinking empty changelog should</div><div class='del'>-                                     not break further changelog operation, so</div><div class='del'>-                                     reset return value to 0*/</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = sys_rename (ofile, nfile);</div><div class='del'>-</div><div class='del'>-                if (ret &amp;&amp; (errno == ENOENT)) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_MSG_RENAME_ERROR,</div><div class='del'>-                                 "error renaming",</div><div class='del'>-                                 "from=%s", ofile,</div><div class='del'>-                                 "to=%s", nfile,</div><div class='del'>-                                 NULL);</div><div class='del'>-                }</div><div class='add'>+        if (ret &amp;&amp; (errno == ENOENT)) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (!ret &amp;&amp; (cl_empty_flag == 0)) {</div><div class='del'>-                        notify = 1;</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_RENAME_ERROR,</div><div class='add'>+                    "error renaming", "from=%s", ofile, "to=%s", nfile, NULL);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                if (cl_empty_flag) {</div><div class='del'>-                        update_path (this, nfile);</div><div class='del'>-                }</div><div class='del'>-                ret = htime_update (this, priv, ts, nfile);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                0, CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                                "could not update htime file");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (!ret &amp;&amp; (cl_empty_flag == 0)) {</div><div class='add'>+        notify = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (notify) {</div><div class='del'>-                ev.ev_type = CHANGELOG_OP_TYPE_JOURNAL;</div><div class='del'>-                memcpy (ev.u.journal.path, nfile, strlen (nfile) + 1);</div><div class='del'>-                changelog_dispatch_event (this, priv, &amp;ev);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        if (cl_empty_flag) {</div><div class='add'>+            update_path(this, nfile);</div><div class='ctx'>         }</div><div class='del'>- out:</div><div class='del'>-        /* If this is explicit rollover initiated by snapshot,</div><div class='del'>-         * wakeup reconfigure thread waiting for changelog to</div><div class='del'>-         * rollover. This should happen even in failure cases as</div><div class='del'>-         * well otherwise snapshot will timeout and fail. Hence</div><div class='del'>-         * moved under out.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;explicit_rollover) {</div><div class='del'>-                priv-&gt;explicit_rollover = _gf_false;</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                priv-&gt;bn.bnotify_error = _gf_true;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CHANGELOG_MSG_EXPLICIT_ROLLOVER_FAILED,</div><div class='del'>-                                        "Fail snapshot because of "</div><div class='del'>-                                        "previous errors");</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                         CHANGELOG_MSG_BNOTIFY_INFO, "Explicit "</div><div class='del'>-                                         "rollover changelog signaling "</div><div class='del'>-                                         "bnotify",</div><div class='del'>-                                         "changelog=%s", nfile,</div><div class='del'>-                                         NULL);</div><div class='del'>-                        }</div><div class='del'>-                        priv-&gt;bn.bnotify = _gf_false;</div><div class='del'>-                        pthread_cond_signal (&amp;priv-&gt;bn.bnotify_cond);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+        ret = htime_update(this, priv, ts, nfile);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+                   "could not update htime file");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (notify) {</div><div class='add'>+        ev.ev_type = CHANGELOG_OP_TYPE_JOURNAL;</div><div class='add'>+        memcpy(ev.u.journal.path, nfile, strlen(nfile) + 1);</div><div class='add'>+        changelog_dispatch_event(this, priv, &amp;ev);</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    /* If this is explicit rollover initiated by snapshot,</div><div class='add'>+     * wakeup reconfigure thread waiting for changelog to</div><div class='add'>+     * rollover. This should happen even in failure cases as</div><div class='add'>+     * well otherwise snapshot will timeout and fail. Hence</div><div class='add'>+     * moved under out.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;explicit_rollover) {</div><div class='add'>+        priv-&gt;explicit_rollover = _gf_false;</div><div class='add'>+</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+        {</div><div class='add'>+            if (ret) {</div><div class='add'>+                priv-&gt;bn.bnotify_error = _gf_true;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CHANGELOG_MSG_EXPLICIT_ROLLOVER_FAILED,</div><div class='add'>+                       "Fail snapshot because of "</div><div class='add'>+                       "previous errors");</div><div class='add'>+            } else {</div><div class='add'>+                gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BNOTIFY_INFO,</div><div class='add'>+                        "Explicit "</div><div class='add'>+                        "rollover changelog signaling "</div><div class='add'>+                        "bnotify",</div><div class='add'>+                        "changelog=%s", nfile, NULL);</div><div class='add'>+            }</div><div class='add'>+            priv-&gt;bn.bnotify = _gf_false;</div><div class='add'>+            pthread_cond_signal(&amp;priv-&gt;bn.bnotify_cond);</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-filter_cur_par_dirs (const struct dirent *entry)</div><div class='add'>+filter_cur_par_dirs(const struct dirent *entry)</div><div class='ctx'> {</div><div class='del'>-        if (entry == NULL)</div><div class='del'>-                return 0;</div><div class='add'>+    if (entry == NULL)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        if ((strcmp(entry-&gt;d_name, ".") == 0) ||</div><div class='del'>-            (strcmp(entry-&gt;d_name, "..") == 0))</div><div class='del'>-                return 0;</div><div class='del'>-        else</div><div class='del'>-                return 1;</div><div class='add'>+    if ((strcmp(entry-&gt;d_name, ".") == 0) || (strcmp(entry-&gt;d_name, "..") == 0))</div><div class='add'>+        return 0;</div><div class='add'>+    else</div><div class='add'>+        return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -561,313 +542,296 @@ filter_cur_par_dirs (const struct dirent *entry)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-find_current_htime (int ht_dir_fd, const char *ht_dir_path, char *ht_file_bname)</div><div class='add'>+find_current_htime(int ht_dir_fd, const char *ht_dir_path, char *ht_file_bname)</div><div class='ctx'> {</div><div class='del'>-        struct dirent       **namelist = NULL;</div><div class='del'>-        int                   ret      = 0;</div><div class='del'>-        int                   cnt      = 0;</div><div class='del'>-        int                   i        = 0;</div><div class='del'>-        xlator_t             *this     = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (ht_dir_path);</div><div class='del'>-</div><div class='del'>-        cnt = scandir (ht_dir_path, &amp;namelist, filter_cur_par_dirs, alphasort);</div><div class='del'>-        if (cnt &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_SCAN_DIR_FAILED,</div><div class='del'>-                        "scandir failed");</div><div class='del'>-        } else if (cnt &gt; 0) {</div><div class='del'>-                if (snprintf (ht_file_bname, NAME_MAX, "%s",</div><div class='del'>-                              namelist[cnt - 1]-&gt;d_name) &gt;= NAME_MAX) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (sys_fsetxattr (ht_dir_fd, HTIME_CURRENT, ht_file_bname,</div><div class='del'>-                    strlen (ht_file_bname), 0)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_MSG_FSETXATTR_FAILED,</div><div class='del'>-                                "fsetxattr failed: HTIME_CURRENT");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    struct dirent **namelist = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(ht_dir_path);</div><div class='add'>+</div><div class='add'>+    cnt = scandir(ht_dir_path, &amp;namelist, filter_cur_par_dirs, alphasort);</div><div class='add'>+    if (cnt &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_SCAN_DIR_FAILED,</div><div class='add'>+               "scandir failed");</div><div class='add'>+    } else if (cnt &gt; 0) {</div><div class='add'>+        if (snprintf(ht_file_bname, NAME_MAX, "%s",</div><div class='add'>+                     namelist[cnt - 1]-&gt;d_name) &gt;= NAME_MAX) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (sys_fsetxattr(ht_dir_fd, HTIME_CURRENT, ht_file_bname,</div><div class='add'>+                          strlen(ht_file_bname), 0)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   CHANGELOG_MSG_FSETXATTR_FAILED,</div><div class='add'>+                   "fsetxattr failed: HTIME_CURRENT");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (sys_fsync(ht_dir_fd) &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   CHANGELOG_MSG_FSYNC_OP_FAILED, "fsync failed");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                if (sys_fsync (ht_dir_fd) &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='del'>-                                "fsync failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='add'>+    for (i = 0; i &lt; cnt; i++)</div><div class='add'>+        free(namelist[i]);</div><div class='add'>+    free(namelist);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        for (i = 0; i &lt; cnt; i++)</div><div class='del'>-                free (namelist[i]);</div><div class='del'>-        free (namelist);</div><div class='add'>+    if (ret)</div><div class='add'>+        cnt = ret;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                cnt = ret;</div><div class='del'>-</div><div class='del'>-        return cnt;</div><div class='add'>+    return cnt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns 0 on successful open of htime file</div><div class='ctx'>  * returns -1 on failure or error</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-htime_open (xlator_t *this,</div><div class='del'>-              changelog_priv_t *priv, unsigned long ts)</div><div class='add'>+htime_open(xlator_t *this, changelog_priv_t *priv, unsigned long ts)</div><div class='ctx'> {</div><div class='del'>-        int ht_file_fd                  = -1;</div><div class='del'>-        int ht_dir_fd                   = -1;</div><div class='del'>-        int ret                         = 0;</div><div class='del'>-        int cnt                         = 0;</div><div class='del'>-        char ht_dir_path[PATH_MAX]      = {0,};</div><div class='del'>-        char ht_file_path[PATH_MAX]     = {0,};</div><div class='del'>-        char ht_file_bname[NAME_MAX]    = {0,};</div><div class='del'>-        char x_value[NAME_MAX]          = {0,};</div><div class='del'>-        int flags                       = 0;</div><div class='del'>-        unsigned long min_ts            = 0;</div><div class='del'>-        unsigned long max_ts            = 0;</div><div class='del'>-        unsigned long total             = 0;</div><div class='del'>-        unsigned long total1            = 0;</div><div class='del'>-        ssize_t size                    = 0;</div><div class='del'>-        struct stat stat_buf            = {0,};</div><div class='del'>-        unsigned long record_len        = 0;</div><div class='del'>-        int32_t len                     = 0;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, ht_dir_path);</div><div class='del'>-</div><div class='del'>-        /* Open htime directory to get HTIME_CURRENT */</div><div class='del'>-        ht_dir_fd = open (ht_dir_path, O_RDONLY);</div><div class='del'>-        if (ht_dir_fd == -1) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_OPEN_FAILED, "open failed",</div><div class='del'>-                         "path=%s", ht_dir_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        size = sys_fgetxattr (ht_dir_fd, HTIME_CURRENT, ht_file_bname,</div><div class='del'>-                             sizeof (ht_file_bname));</div><div class='del'>-        if (size &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_FGETXATTR_FAILED, "Error extracting"</div><div class='del'>-                        " HTIME_CURRENT.");</div><div class='del'>-</div><div class='del'>-                /* If upgrade scenario, find the latest HTIME.TSTAMP file</div><div class='del'>-                 * and use the same. If error, create a new HTIME.TSTAMP</div><div class='del'>-                 * file.</div><div class='del'>-                 */</div><div class='del'>-                cnt = find_current_htime (ht_dir_fd, ht_dir_path,</div><div class='del'>-                                           ht_file_bname);</div><div class='del'>-                if (cnt &lt;= 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, errno,</div><div class='del'>-                                CHANGELOG_MSG_HTIME_INFO,</div><div class='del'>-                                "HTIME_CURRENT not found. Changelog enabled"</div><div class='del'>-                                " before init");</div><div class='del'>-                        sys_close (ht_dir_fd);</div><div class='del'>-                        return htime_create (this, priv, ts);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_HTIME_ERROR, "Error extracting"</div><div class='del'>-                        " HTIME_CURRENT.");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_smsg (this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_HTIME_INFO,</div><div class='del'>-                 "HTIME_CURRENT",</div><div class='del'>-                 "path=%s", ht_file_bname, NULL);</div><div class='del'>-        len = snprintf (ht_file_path, PATH_MAX, "%s/%s", ht_dir_path,</div><div class='del'>-                        ht_file_bname);</div><div class='del'>-        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Open in append mode as existing htime file is used */</div><div class='del'>-        flags |= (O_RDWR | O_SYNC | O_APPEND);</div><div class='del'>-        ht_file_fd = open (ht_file_path, flags,</div><div class='del'>-                        S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (ht_file_fd &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_OPEN_FAILED,</div><div class='del'>-                         "unable to open htime file",</div><div class='del'>-                         "path=%s", ht_file_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* save this htime_fd in priv-&gt;htime_fd */</div><div class='del'>-        priv-&gt;htime_fd = ht_file_fd;</div><div class='del'>-</div><div class='del'>-        ret = sys_fstat (ht_file_fd, &amp;stat_buf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                         "unable to stat htime file",</div><div class='del'>-                         "path=%s", ht_file_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Initialize rollover-number in priv to current number */</div><div class='del'>-        size = sys_fgetxattr (ht_file_fd, HTIME_KEY, x_value, sizeof (x_value));</div><div class='del'>-        if (size &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_FGETXATTR_FAILED, "error extracting max"</div><div class='del'>-                         " timstamp from htime file",</div><div class='del'>-                         "path=%s", ht_file_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sscanf (x_value, "%lu:%lu", &amp;max_ts, &amp;total);</div><div class='del'>-</div><div class='del'>-        /* 22 = 1(/) + 20(CHANGELOG.TIMESTAMP) + 1(\x00) */</div><div class='del'>-        record_len = strlen(priv-&gt;changelog_dir) + 22;</div><div class='del'>-        total1 = stat_buf.st_size/record_len;</div><div class='del'>-        if (total != total1) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                         CHANGELOG_MSG_TOTAL_LOG_INFO,</div><div class='del'>-                         "Mismatch of changelog count. "</div><div class='del'>-                         "INIT CASE",</div><div class='del'>-                         "xattr_total=%lu", total,</div><div class='del'>-                         "size_total=%lu", total1,</div><div class='del'>-                         NULL);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                 CHANGELOG_MSG_TOTAL_LOG_INFO,</div><div class='del'>-                 "INIT CASE",</div><div class='del'>-                 "min=%lu", min_ts,</div><div class='del'>-                 "max=%lu", max_ts,</div><div class='del'>-                 "total_changelogs=%lu", total,</div><div class='del'>-                 NULL);</div><div class='del'>-</div><div class='del'>-        if (total &lt; total1)</div><div class='del'>-                priv-&gt;rollover_count = total1 + 1;</div><div class='del'>-        else</div><div class='del'>-                priv-&gt;rollover_count = total + 1;</div><div class='add'>+    int ht_file_fd = -1;</div><div class='add'>+    int ht_dir_fd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int cnt = 0;</div><div class='add'>+    char ht_dir_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char ht_file_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char ht_file_bname[NAME_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char x_value[NAME_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int flags = 0;</div><div class='add'>+    unsigned long min_ts = 0;</div><div class='add'>+    unsigned long max_ts = 0;</div><div class='add'>+    unsigned long total = 0;</div><div class='add'>+    unsigned long total1 = 0;</div><div class='add'>+    ssize_t size = 0;</div><div class='add'>+    struct stat stat_buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    unsigned long record_len = 0;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, ht_dir_path);</div><div class='add'>+</div><div class='add'>+    /* Open htime directory to get HTIME_CURRENT */</div><div class='add'>+    ht_dir_fd = open(ht_dir_path, O_RDONLY);</div><div class='add'>+    if (ht_dir_fd == -1) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_OPEN_FAILED,</div><div class='add'>+                "open failed", "path=%s", ht_dir_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    size = sys_fgetxattr(ht_dir_fd, HTIME_CURRENT, ht_file_bname,</div><div class='add'>+                         sizeof(ht_file_bname));</div><div class='add'>+    if (size &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FGETXATTR_FAILED,</div><div class='add'>+               "Error extracting"</div><div class='add'>+               " HTIME_CURRENT.");</div><div class='add'>+</div><div class='add'>+        /* If upgrade scenario, find the latest HTIME.TSTAMP file</div><div class='add'>+         * and use the same. If error, create a new HTIME.TSTAMP</div><div class='add'>+         * file.</div><div class='add'>+         */</div><div class='add'>+        cnt = find_current_htime(ht_dir_fd, ht_dir_path, ht_file_bname);</div><div class='add'>+        if (cnt &lt;= 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, errno, CHANGELOG_MSG_HTIME_INFO,</div><div class='add'>+                   "HTIME_CURRENT not found. Changelog enabled"</div><div class='add'>+                   " before init");</div><div class='add'>+            sys_close(ht_dir_fd);</div><div class='add'>+            return htime_create(this, priv, ts);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+               "Error extracting"</div><div class='add'>+               " HTIME_CURRENT.");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_HTIME_INFO,</div><div class='add'>+            "HTIME_CURRENT", "path=%s", ht_file_bname, NULL);</div><div class='add'>+    len = snprintf(ht_file_path, PATH_MAX, "%s/%s", ht_dir_path, ht_file_bname);</div><div class='add'>+    if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Open in append mode as existing htime file is used */</div><div class='add'>+    flags |= (O_RDWR | O_SYNC | O_APPEND);</div><div class='add'>+    ht_file_fd = open(ht_file_path, flags,</div><div class='add'>+                      S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (ht_file_fd &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_OPEN_FAILED,</div><div class='add'>+                "unable to open htime file", "path=%s", ht_file_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* save this htime_fd in priv-&gt;htime_fd */</div><div class='add'>+    priv-&gt;htime_fd = ht_file_fd;</div><div class='add'>+</div><div class='add'>+    ret = sys_fstat(ht_file_fd, &amp;stat_buf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_HTIME_ERROR,</div><div class='add'>+                "unable to stat htime file", "path=%s", ht_file_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Initialize rollover-number in priv to current number */</div><div class='add'>+    size = sys_fgetxattr(ht_file_fd, HTIME_KEY, x_value, sizeof(x_value));</div><div class='add'>+    if (size &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FGETXATTR_FAILED,</div><div class='add'>+                "error extracting max"</div><div class='add'>+                " timstamp from htime file",</div><div class='add'>+                "path=%s", ht_file_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sscanf(x_value, "%lu:%lu", &amp;max_ts, &amp;total);</div><div class='add'>+</div><div class='add'>+    /* 22 = 1(/) + 20(CHANGELOG.TIMESTAMP) + 1(\x00) */</div><div class='add'>+    record_len = strlen(priv-&gt;changelog_dir) + 22;</div><div class='add'>+    total1 = stat_buf.st_size / record_len;</div><div class='add'>+    if (total != total1) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_TOTAL_LOG_INFO,</div><div class='add'>+                "Mismatch of changelog count. "</div><div class='add'>+                "INIT CASE",</div><div class='add'>+                "xattr_total=%lu", total, "size_total=%lu", total1, NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_TOTAL_LOG_INFO,</div><div class='add'>+            "INIT CASE", "min=%lu", min_ts, "max=%lu", max_ts,</div><div class='add'>+            "total_changelogs=%lu", total, NULL);</div><div class='add'>+</div><div class='add'>+    if (total &lt; total1)</div><div class='add'>+        priv-&gt;rollover_count = total1 + 1;</div><div class='add'>+    else</div><div class='add'>+        priv-&gt;rollover_count = total + 1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ht_dir_fd != -1)</div><div class='del'>-                sys_close (ht_dir_fd);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ht_dir_fd != -1)</div><div class='add'>+        sys_close(ht_dir_fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns 0 on successful creation of htime file</div><div class='ctx'>  * returns -1 on failure or error</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-htime_create (xlator_t *this,</div><div class='del'>-              changelog_priv_t *priv, unsigned long ts)</div><div class='add'>+htime_create(xlator_t *this, changelog_priv_t *priv, unsigned long ts)</div><div class='ctx'> {</div><div class='del'>-        int ht_file_fd                      = -1;</div><div class='del'>-        int ht_dir_fd                       = -1;</div><div class='del'>-        int ret                             = 0;</div><div class='del'>-        char ht_dir_path[PATH_MAX]          = {0,};</div><div class='del'>-        char ht_file_path[PATH_MAX]         = {0,};</div><div class='del'>-        char ht_file_bname[NAME_MAX + 1]    = {0,};</div><div class='del'>-        int flags                           = 0;</div><div class='del'>-        int32_t len                         = 0;</div><div class='del'>-</div><div class='del'>-        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                 CHANGELOG_MSG_HTIME_INFO, "Changelog enable: Creating new "</div><div class='del'>-                 "HTIME file",</div><div class='del'>-                 "name=%lu", ts,</div><div class='del'>-                 NULL);</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, ht_dir_path);</div><div class='del'>-</div><div class='del'>-        /* get the htime file name in ht_file_path */</div><div class='del'>-        len = snprintf (ht_file_path, PATH_MAX, "%s/%s.%lu", ht_dir_path,</div><div class='del'>-                        HTIME_FILE_NAME, ts);</div><div class='del'>-        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        flags |= (O_CREAT | O_RDWR | O_SYNC);</div><div class='del'>-        ht_file_fd = open (ht_file_path, flags,</div><div class='del'>-                        S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (ht_file_fd &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_OPEN_FAILED,</div><div class='del'>-                         "unable to create htime file",</div><div class='del'>-                         "path=%s", ht_file_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (sys_fsetxattr (ht_file_fd, HTIME_KEY, HTIME_INITIAL_VALUE,</div><div class='del'>-                       sizeof (HTIME_INITIAL_VALUE)-1,  0)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_FSETXATTR_FAILED,</div><div class='del'>-                        "Htime xattr initialization failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_fsync (ht_file_fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='del'>-                        "fsync failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* save this htime_fd in priv-&gt;htime_fd */</div><div class='del'>-        priv-&gt;htime_fd = ht_file_fd;</div><div class='del'>-</div><div class='del'>-        ht_file_fd = -1;</div><div class='del'>-</div><div class='del'>-        /* Set xattr HTIME_CURRENT on htime directory to htime filename */</div><div class='del'>-        ht_dir_fd = open (ht_dir_path, O_RDONLY);</div><div class='del'>-        if (ht_dir_fd == -1) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_OPEN_FAILED, "open failed",</div><div class='del'>-                         "path=%s", ht_dir_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) snprintf (ht_file_bname, sizeof (ht_file_bname), "%s.%lu",</div><div class='del'>-                         HTIME_FILE_NAME, ts);</div><div class='del'>-        if (sys_fsetxattr (ht_dir_fd, HTIME_CURRENT, ht_file_bname,</div><div class='del'>-            strlen (ht_file_bname), 0)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_FSETXATTR_FAILED, "fsetxattr failed:"</div><div class='del'>-                        " HTIME_CURRENT");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_fsync (ht_dir_fd);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='del'>-                        "fsync failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* initialize rollover-number in priv to 1 */</div><div class='del'>-        priv-&gt;rollover_count = 1;</div><div class='add'>+    int ht_file_fd = -1;</div><div class='add'>+    int ht_dir_fd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char ht_dir_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char ht_file_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char ht_file_bname[NAME_MAX + 1] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int flags = 0;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_HTIME_INFO,</div><div class='add'>+            "Changelog enable: Creating new "</div><div class='add'>+            "HTIME file",</div><div class='add'>+            "name=%lu", ts, NULL);</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, ht_dir_path);</div><div class='add'>+</div><div class='add'>+    /* get the htime file name in ht_file_path */</div><div class='add'>+    len = snprintf(ht_file_path, PATH_MAX, "%s/%s.%lu", ht_dir_path,</div><div class='add'>+                   HTIME_FILE_NAME, ts);</div><div class='add'>+    if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    flags |= (O_CREAT | O_RDWR | O_SYNC);</div><div class='add'>+    ht_file_fd = open(ht_file_path, flags,</div><div class='add'>+                      S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (ht_file_fd &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_OPEN_FAILED,</div><div class='add'>+                "unable to create htime file", "path=%s", ht_file_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (sys_fsetxattr(ht_file_fd, HTIME_KEY, HTIME_INITIAL_VALUE,</div><div class='add'>+                      sizeof(HTIME_INITIAL_VALUE) - 1, 0)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FSETXATTR_FAILED,</div><div class='add'>+               "Htime xattr initialization failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_fsync(ht_file_fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='add'>+               "fsync failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* save this htime_fd in priv-&gt;htime_fd */</div><div class='add'>+    priv-&gt;htime_fd = ht_file_fd;</div><div class='add'>+</div><div class='add'>+    ht_file_fd = -1;</div><div class='add'>+</div><div class='add'>+    /* Set xattr HTIME_CURRENT on htime directory to htime filename */</div><div class='add'>+    ht_dir_fd = open(ht_dir_path, O_RDONLY);</div><div class='add'>+    if (ht_dir_fd == -1) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_OPEN_FAILED,</div><div class='add'>+                "open failed", "path=%s", ht_dir_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)snprintf(ht_file_bname, sizeof(ht_file_bname), "%s.%lu",</div><div class='add'>+                   HTIME_FILE_NAME, ts);</div><div class='add'>+    if (sys_fsetxattr(ht_dir_fd, HTIME_CURRENT, ht_file_bname,</div><div class='add'>+                      strlen(ht_file_bname), 0)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FSETXATTR_FAILED,</div><div class='add'>+               "fsetxattr failed:"</div><div class='add'>+               " HTIME_CURRENT");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_fsync(ht_dir_fd);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='add'>+               "fsync failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* initialize rollover-number in priv to 1 */</div><div class='add'>+    priv-&gt;rollover_count = 1;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ht_dir_fd != -1)</div><div class='del'>-                sys_close (ht_dir_fd);</div><div class='del'>-        if (ht_file_fd != -1)</div><div class='del'>-                sys_close (ht_file_fd);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ht_dir_fd != -1)</div><div class='add'>+        sys_close(ht_dir_fd);</div><div class='add'>+    if (ht_file_fd != -1)</div><div class='add'>+        sys_close(ht_file_fd);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Description:</div><div class='hunk'>@@ -879,53 +843,53 @@ out:</div><div class='ctx'>  *      -1  : On failure.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_snap_open (xlator_t *this,</div><div class='del'>-                         changelog_priv_t *priv)</div><div class='add'>+changelog_snap_open(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int fd                        = -1;</div><div class='del'>-        int ret                       = 0;</div><div class='del'>-        int flags                     = 0;</div><div class='del'>-        char buffer[1024]             = {0,};</div><div class='del'>-        char c_snap_path[PATH_MAX]    = {0,};</div><div class='del'>-        char csnap_dir_path[PATH_MAX] = {0,};</div><div class='del'>-        int32_t len                   = 0;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_CSNAP_DIR(priv-&gt;changelog_dir, csnap_dir_path);</div><div class='del'>-</div><div class='del'>-        len = snprintf (c_snap_path, PATH_MAX, "%s/"CSNAP_FILE_NAME,</div><div class='del'>-                        csnap_dir_path);</div><div class='del'>-        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        flags |= (O_CREAT | O_RDWR | O_TRUNC);</div><div class='del'>-</div><div class='del'>-        fd = open (c_snap_path, flags,</div><div class='del'>-                        S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_OPEN_FAILED, "unable to open file",</div><div class='del'>-                         "path=%s", c_snap_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;c_snap_fd = fd;</div><div class='del'>-</div><div class='del'>-        (void) snprintf (buffer, 1024, CHANGELOG_HEADER,</div><div class='del'>-                        CHANGELOG_VERSION_MAJOR,</div><div class='del'>-                        CHANGELOG_VERSION_MINOR,</div><div class='del'>-                        priv-&gt;ce-&gt;encoder);</div><div class='del'>-        ret = changelog_snap_write_change (priv, buffer, strlen (buffer));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                sys_close (priv-&gt;c_snap_fd);</div><div class='del'>-                priv-&gt;c_snap_fd = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int fd = -1;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    char buffer[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char c_snap_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char csnap_dir_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_CSNAP_DIR(priv-&gt;changelog_dir, csnap_dir_path);</div><div class='add'>+</div><div class='add'>+    len = snprintf(c_snap_path, PATH_MAX, "%s/" CSNAP_FILE_NAME,</div><div class='add'>+                   csnap_dir_path);</div><div class='add'>+    if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    flags |= (O_CREAT | O_RDWR | O_TRUNC);</div><div class='add'>+</div><div class='add'>+    fd = open(c_snap_path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_OPEN_FAILED,</div><div class='add'>+                "unable to open file", "path=%s", c_snap_path, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;c_snap_fd = fd;</div><div class='add'>+</div><div class='add'>+    (void)snprintf(buffer, 1024, CHANGELOG_HEADER, CHANGELOG_VERSION_MAJOR,</div><div class='add'>+                   CHANGELOG_VERSION_MINOR, priv-&gt;ce-&gt;encoder);</div><div class='add'>+    ret = changelog_snap_write_change(priv, buffer, strlen(buffer));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        sys_close(priv-&gt;c_snap_fd);</div><div class='add'>+        priv-&gt;c_snap_fd = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -936,17 +900,15 @@ out:</div><div class='ctx'>  *      -1 : On Failure.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_snap_logging_start (xlator_t *this,</div><div class='del'>-                                  changelog_priv_t *priv)</div><div class='add'>+changelog_snap_logging_start(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = changelog_snap_open (this, priv);</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                        CHANGELOG_MSG_SNAP_INFO,</div><div class='del'>-                        "Now starting to log in call path");</div><div class='add'>+    ret = changelog_snap_open(this, priv);</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_SNAP_INFO,</div><div class='add'>+           "Now starting to log in call path");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -957,120 +919,116 @@ changelog_snap_logging_start (xlator_t *this,</div><div class='ctx'>  *      -1 : On Failure.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_snap_logging_stop (xlator_t *this,</div><div class='del'>-                changelog_priv_t *priv)</div><div class='add'>+changelog_snap_logging_stop(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int ret         = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        sys_close (priv-&gt;c_snap_fd);</div><div class='del'>-        priv-&gt;c_snap_fd = -1;</div><div class='add'>+    sys_close(priv-&gt;c_snap_fd);</div><div class='add'>+    priv-&gt;c_snap_fd = -1;</div><div class='ctx'> </div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                CHANGELOG_MSG_SNAP_INFO,</div><div class='del'>-                "Stopped to log in call path");</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_SNAP_INFO,</div><div class='add'>+           "Stopped to log in call path");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_open_journal (xlator_t *this,</div><div class='del'>-                        changelog_priv_t *priv)</div><div class='add'>+changelog_open_journal(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int fd                        = 0;</div><div class='del'>-        int ret                       = -1;</div><div class='del'>-        int flags                     = 0;</div><div class='del'>-        char buffer[1024]             = {0,};</div><div class='del'>-        char changelog_path[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        (void) snprintf (changelog_path, PATH_MAX,</div><div class='del'>-                         "%s/"CHANGELOG_FILE_NAME,</div><div class='del'>-                         priv-&gt;changelog_dir);</div><div class='del'>-</div><div class='del'>-        flags |= (O_CREAT | O_RDWR);</div><div class='del'>-        if (priv-&gt;fsync_interval == 0)</div><div class='del'>-                flags |= O_SYNC;</div><div class='del'>-</div><div class='del'>-        fd = open (changelog_path, flags,</div><div class='del'>-                   S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_OPEN_FAILED,</div><div class='del'>-                         "unable to open/create changelog file."</div><div class='del'>-                         " change-logging will be"</div><div class='del'>-                         " inactive",</div><div class='del'>-                         "path=%s", changelog_path,</div><div class='del'>-                         NULL);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int flags = 0;</div><div class='add'>+    char buffer[1024] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char changelog_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    (void)snprintf(changelog_path, PATH_MAX, "%s/" CHANGELOG_FILE_NAME,</div><div class='add'>+                   priv-&gt;changelog_dir);</div><div class='add'>+</div><div class='add'>+    flags |= (O_CREAT | O_RDWR);</div><div class='add'>+    if (priv-&gt;fsync_interval == 0)</div><div class='add'>+        flags |= O_SYNC;</div><div class='add'>+</div><div class='add'>+    fd = open(changelog_path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_OPEN_FAILED,</div><div class='add'>+                "unable to open/create changelog file."</div><div class='add'>+                " change-logging will be"</div><div class='add'>+                " inactive",</div><div class='add'>+                "path=%s", changelog_path, NULL);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;changelog_fd = fd;</div><div class='add'>+</div><div class='add'>+    (void)snprintf(buffer, 1024, CHANGELOG_HEADER, CHANGELOG_VERSION_MAJOR,</div><div class='add'>+                   CHANGELOG_VERSION_MINOR, priv-&gt;ce-&gt;encoder);</div><div class='add'>+    ret = changelog_write_change(priv, buffer, strlen(buffer));</div><div class='add'>+    if (ret) {</div><div class='add'>+        sys_close(priv-&gt;changelog_fd);</div><div class='add'>+        priv-&gt;changelog_fd = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;changelog_fd = fd;</div><div class='del'>-</div><div class='del'>-        (void) snprintf (buffer, 1024, CHANGELOG_HEADER,</div><div class='del'>-                         CHANGELOG_VERSION_MAJOR,</div><div class='del'>-                         CHANGELOG_VERSION_MINOR,</div><div class='del'>-                         priv-&gt;ce-&gt;encoder);</div><div class='del'>-        ret = changelog_write_change (priv, buffer, strlen (buffer));</div><div class='del'>-        if (ret) {</div><div class='del'>-                sys_close (priv-&gt;changelog_fd);</div><div class='del'>-                priv-&gt;changelog_fd = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_start_next_change (xlator_t *this,</div><div class='del'>-                             changelog_priv_t *priv,</div><div class='del'>-                             unsigned long ts, gf_boolean_t finale)</div><div class='add'>+changelog_start_next_change(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                            unsigned long ts, gf_boolean_t finale)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = changelog_rollover_changelog (this, priv, ts);</div><div class='add'>+    ret = changelog_rollover_changelog(this, priv, ts);</div><div class='ctx'> </div><div class='del'>-        if (!ret &amp;&amp; !finale)</div><div class='del'>-                ret = changelog_open_journal (this, priv);</div><div class='add'>+    if (!ret &amp;&amp; !finale)</div><div class='add'>+        ret = changelog_open_journal(this, priv);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * return the length of entry</div><div class='ctx'>  */</div><div class='ctx'> size_t</div><div class='del'>-changelog_entry_length ()</div><div class='add'>+changelog_entry_length()</div><div class='ctx'> {</div><div class='del'>-        return sizeof (changelog_log_data_t);</div><div class='add'>+    return sizeof(changelog_log_data_t);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_fill_rollover_data (changelog_log_data_t *cld, gf_boolean_t is_last)</div><div class='add'>+changelog_fill_rollover_data(changelog_log_data_t *cld, gf_boolean_t is_last)</div><div class='ctx'> {</div><div class='del'>-        struct timeval tv = {0,};</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        cld-&gt;cld_type = CHANGELOG_TYPE_ROLLOVER;</div><div class='add'>+    cld-&gt;cld_type = CHANGELOG_TYPE_ROLLOVER;</div><div class='ctx'> </div><div class='del'>-        if (gettimeofday (&amp;tv, NULL))</div><div class='del'>-                return -1;</div><div class='add'>+    if (gettimeofday(&amp;tv, NULL))</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        cld-&gt;cld_roll_time = (unsigned long) tv.tv_sec;</div><div class='del'>-        cld-&gt;cld_finale = is_last;</div><div class='del'>-        return 0;</div><div class='add'>+    cld-&gt;cld_roll_time = (unsigned long)tv.tv_sec;</div><div class='add'>+    cld-&gt;cld_finale = is_last;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_snap_write_change (changelog_priv_t *priv, char *buffer, size_t len)</div><div class='add'>+changelog_snap_write_change(changelog_priv_t *priv, char *buffer, size_t len)</div><div class='ctx'> {</div><div class='del'>-        return changelog_write (priv-&gt;c_snap_fd, buffer, len);</div><div class='add'>+    return changelog_write(priv-&gt;c_snap_fd, buffer, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_write_change (changelog_priv_t *priv, char *buffer, size_t len)</div><div class='add'>+changelog_write_change(changelog_priv_t *priv, char *buffer, size_t len)</div><div class='ctx'> {</div><div class='del'>-        return changelog_write (priv-&gt;changelog_fd, buffer, len);</div><div class='add'>+    return changelog_write(priv-&gt;changelog_fd, buffer, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1083,255 +1041,231 @@ changelog_write_change (changelog_priv_t *priv, char *buffer, size_t len)</div><div class='ctx'>  *     -1 : On Failure.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_snap_handle_ascii_change (xlator_t *this,</div><div class='del'>-                                    changelog_log_data_t *cld)</div><div class='add'>+changelog_snap_handle_ascii_change(xlator_t *this, changelog_log_data_t *cld)</div><div class='ctx'> {</div><div class='del'>-        size_t            off      = 0;</div><div class='del'>-        size_t            gfid_len = 0;</div><div class='del'>-        char             *gfid_str = NULL;</div><div class='del'>-        char             *buffer   = NULL;</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        int               ret      = 0;</div><div class='del'>-</div><div class='del'>-        if (this == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gfid_str = uuid_utoa (cld-&gt;cld_gfid);</div><div class='del'>-        gfid_len = strlen (gfid_str);</div><div class='del'>-</div><div class='del'>-        /*  extra bytes for decorations */</div><div class='del'>-        buffer = alloca (gfid_len + cld-&gt;cld_ptr_len + 10);</div><div class='del'>-        CHANGELOG_STORE_ASCII (priv, buffer,</div><div class='del'>-                        off, gfid_str, gfid_len, cld);</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);</div><div class='del'>-</div><div class='del'>-        ret = changelog_snap_write_change (priv, buffer, off);</div><div class='del'>-</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_WRITE_FAILED,</div><div class='del'>-                        "error writing csnap to disk");</div><div class='del'>-        }</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_SNAP_INFO,</div><div class='del'>-                        "Successfully wrote to csnap");</div><div class='del'>-        ret = 0;</div><div class='add'>+    size_t off = 0;</div><div class='add'>+    size_t gfid_len = 0;</div><div class='add'>+    char *gfid_str = NULL;</div><div class='add'>+    char *buffer = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (this == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gfid_str = uuid_utoa(cld-&gt;cld_gfid);</div><div class='add'>+    gfid_len = strlen(gfid_str);</div><div class='add'>+</div><div class='add'>+    /*  extra bytes for decorations */</div><div class='add'>+    buffer = alloca(gfid_len + cld-&gt;cld_ptr_len + 10);</div><div class='add'>+    CHANGELOG_STORE_ASCII(priv, buffer, off, gfid_str, gfid_len, cld);</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_BUFFER(buffer, off, "\0", 1);</div><div class='add'>+</div><div class='add'>+    ret = changelog_snap_write_change(priv, buffer, off);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_WRITE_FAILED,</div><div class='add'>+               "error writing csnap to disk");</div><div class='add'>+    }</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_SNAP_INFO,</div><div class='add'>+           "Successfully wrote to csnap");</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_handle_change (xlator_t *this,</div><div class='del'>-                         changelog_priv_t *priv, changelog_log_data_t *cld)</div><div class='add'>+changelog_handle_change(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                        changelog_log_data_t *cld)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        if (CHANGELOG_TYPE_IS_ROLLOVER (cld-&gt;cld_type)) {</div><div class='del'>-                changelog_encode_change (priv);</div><div class='del'>-                ret = changelog_start_next_change (this, priv,</div><div class='del'>-                                                   cld-&gt;cld_roll_time,</div><div class='del'>-                                                   cld-&gt;cld_finale);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_MSG_GET_TIME_OP_FAILED,</div><div class='del'>-                                "Problem rolling over changelog(s)");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * case when there is reconfigure done (disabling changelog) and there</div><div class='del'>-         * are still fops that have updates in prgress.</div><div class='del'>-         */</div><div class='del'>-        if (priv-&gt;changelog_fd == -1)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        if (CHANGELOG_TYPE_IS_FSYNC (cld-&gt;cld_type)) {</div><div class='del'>-                ret = sys_fsync (priv-&gt;changelog_fd);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_MSG_FSYNC_OP_FAILED,</div><div class='del'>-                                "fsync failed");</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (CHANGELOG_TYPE_IS_ROLLOVER(cld-&gt;cld_type)) {</div><div class='add'>+        changelog_encode_change(priv);</div><div class='add'>+        ret = changelog_start_next_change(this, priv, cld-&gt;cld_roll_time,</div><div class='add'>+                                          cld-&gt;cld_finale);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CHANGELOG_MSG_GET_TIME_OP_FAILED,</div><div class='add'>+                   "Problem rolling over changelog(s)");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * case when there is reconfigure done (disabling changelog) and there</div><div class='add'>+     * are still fops that have updates in prgress.</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;changelog_fd == -1)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = priv-&gt;ce-&gt;encode (this, cld);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_WRITE_FAILED,</div><div class='del'>-                        "error writing changelog to disk");</div><div class='add'>+    if (CHANGELOG_TYPE_IS_FSYNC(cld-&gt;cld_type)) {</div><div class='add'>+        ret = sys_fsync(priv-&gt;changelog_fd);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   CHANGELOG_MSG_FSYNC_OP_FAILED, "fsync failed");</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    ret = priv-&gt;ce-&gt;encode(this, cld);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_WRITE_FAILED,</div><div class='add'>+               "error writing changelog to disk");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> changelog_local_t *</div><div class='del'>-changelog_local_init (xlator_t *this, inode_t *inode,</div><div class='del'>-                      uuid_t gfid, int xtra_records,</div><div class='del'>-                      gf_boolean_t update_flag)</div><div class='add'>+changelog_local_init(xlator_t *this, inode_t *inode, uuid_t gfid,</div><div class='add'>+                     int xtra_records, gf_boolean_t update_flag)</div><div class='ctx'> {</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='del'>-        struct iobuf      *iobuf = NULL;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * We relax the presence of inode if @update_flag is true.</div><div class='del'>-         * The caller (implementation of the fop) needs to be careful to</div><div class='del'>-         * not blindly use local-&gt;inode.</div><div class='del'>-         */</div><div class='del'>-        if (!update_flag &amp;&amp; !inode) {</div><div class='del'>-                gf_msg_callingfn (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                  CHANGELOG_MSG_INODE_NOT_FOUND,</div><div class='del'>-                                  "inode needed for version checking !!!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * We relax the presence of inode if @update_flag is true.</div><div class='add'>+     * The caller (implementation of the fop) needs to be careful to</div><div class='add'>+     * not blindly use local-&gt;inode.</div><div class='add'>+     */</div><div class='add'>+    if (!update_flag &amp;&amp; !inode) {</div><div class='add'>+        gf_msg_callingfn(this-&gt;name, GF_LOG_WARNING, 0,</div><div class='add'>+                         CHANGELOG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                         "inode needed for version checking !!!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xtra_records) {</div><div class='del'>-                iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool,</div><div class='del'>-                                    xtra_records * CHANGELOG_OPT_RECORD_LEN);</div><div class='del'>-                if (!iobuf)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (xtra_records) {</div><div class='add'>+        iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool,</div><div class='add'>+                           xtra_records * CHANGELOG_OPT_RECORD_LEN);</div><div class='add'>+        if (!iobuf)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local) {</div><div class='del'>-                CHANGELOG_IOBUF_UNREF (iobuf);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local) {</div><div class='add'>+        CHANGELOG_IOBUF_UNREF(iobuf);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;update_no_check = update_flag;</div><div class='add'>+    local-&gt;update_no_check = update_flag;</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (local-&gt;cld.cld_gfid, gfid);</div><div class='add'>+    gf_uuid_copy(local-&gt;cld.cld_gfid, gfid);</div><div class='ctx'> </div><div class='del'>-        local-&gt;cld.cld_iobuf = iobuf;</div><div class='del'>-        local-&gt;cld.cld_xtra_records = 0; /* set by the caller */</div><div class='add'>+    local-&gt;cld.cld_iobuf = iobuf;</div><div class='add'>+    local-&gt;cld.cld_xtra_records = 0; /* set by the caller */</div><div class='ctx'> </div><div class='del'>-        if (inode)</div><div class='del'>-                local-&gt;inode = inode_ref (inode);</div><div class='add'>+    if (inode)</div><div class='add'>+        local-&gt;inode = inode_ref(inode);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return local;</div><div class='add'>+out:</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+changelog_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ctx_addr = 0;</div><div class='del'>-        changelog_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    changelog_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        inode_ctx_del (inode, this, &amp;ctx_addr);</div><div class='del'>-        if (!ctx_addr)</div><div class='del'>-                return 0;</div><div class='add'>+    inode_ctx_del(inode, this, &amp;ctx_addr);</div><div class='add'>+    if (!ctx_addr)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ctx = (changelog_inode_ctx_t *) (long) ctx_addr;</div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    ctx = (changelog_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+    GF_FREE(ctx);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_inject_single_event (xlator_t *this,</div><div class='del'>-                               changelog_priv_t *priv,</div><div class='del'>-                               changelog_log_data_t *cld)</div><div class='add'>+changelog_inject_single_event(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                              changelog_log_data_t *cld)</div><div class='ctx'> {</div><div class='del'>-        return priv-&gt;cd.dispatchfn (this, priv, priv-&gt;cd.cd_data, cld, NULL);</div><div class='add'>+    return priv-&gt;cd.dispatchfn(this, priv, priv-&gt;cd.cd_data, cld, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Wait till all the black fops are drained */</div><div class='ctx'> void</div><div class='del'>-changelog_drain_black_fops (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_drain_black_fops(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        /* clean up framework of pthread_mutex is required here as</div><div class='del'>-         * 'reconfigure' terminates the changelog_rollover thread</div><div class='del'>-         * on graph change.</div><div class='del'>-         */</div><div class='del'>-        pthread_cleanup_push (changelog_cleanup_free_mutex,</div><div class='del'>-                                        &amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-        ret = pthread_mutex_lock (&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_ERROR, "pthread error",</div><div class='del'>-                         "error=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-        while (priv-&gt;dm.black_fop_cnt &gt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Conditional wait on black fops: %ld",</div><div class='del'>-                              priv-&gt;dm.black_fop_cnt);</div><div class='del'>-                priv-&gt;dm.drain_wait_black = _gf_true;</div><div class='del'>-                ret = pthread_cond_wait (&amp;priv-&gt;dm.drain_black_cond,</div><div class='del'>-                                         &amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_MSG_PTHREAD_COND_WAIT_FAILED,</div><div class='del'>-                                 "pthread cond wait failed",</div><div class='del'>-                                 "error=%d", ret,</div><div class='del'>-                                 NULL);</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;dm.drain_wait_black = _gf_false;</div><div class='del'>-        ret = pthread_mutex_unlock (&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* clean up framework of pthread_mutex is required here as</div><div class='add'>+     * 'reconfigure' terminates the changelog_rollover thread</div><div class='add'>+     * on graph change.</div><div class='add'>+     */</div><div class='add'>+    pthread_cleanup_push(changelog_cleanup_free_mutex,</div><div class='add'>+                         &amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+    ret = pthread_mutex_lock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_PTHREAD_ERROR,</div><div class='add'>+                "pthread error", "error=%d", ret, NULL);</div><div class='add'>+    while (priv-&gt;dm.black_fop_cnt &gt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Conditional wait on black fops: %ld",</div><div class='add'>+                     priv-&gt;dm.black_fop_cnt);</div><div class='add'>+        priv-&gt;dm.drain_wait_black = _gf_true;</div><div class='add'>+        ret = pthread_cond_wait(&amp;priv-&gt;dm.drain_black_cond,</div><div class='add'>+                                &amp;priv-&gt;dm.drain_black_mutex);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_ERROR, "pthread error",</div><div class='del'>-                         "error=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-        pthread_cleanup_pop (0);</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "Woke up: Conditional wait on black fops");</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                    CHANGELOG_MSG_PTHREAD_COND_WAIT_FAILED,</div><div class='add'>+                    "pthread cond wait failed", "error=%d", ret, NULL);</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;dm.drain_wait_black = _gf_false;</div><div class='add'>+    ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_PTHREAD_ERROR,</div><div class='add'>+                "pthread error", "error=%d", ret, NULL);</div><div class='add'>+    pthread_cleanup_pop(0);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Woke up: Conditional wait on black fops");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Wait till all the white  fops are drained */</div><div class='ctx'> void</div><div class='del'>-changelog_drain_white_fops (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_drain_white_fops(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        /* clean up framework of pthread_mutex is required here as</div><div class='del'>-         * 'reconfigure' terminates the changelog_rollover thread</div><div class='del'>-         * on graph change.</div><div class='del'>-         */</div><div class='del'>-        pthread_cleanup_push (changelog_cleanup_free_mutex,</div><div class='del'>-                                        &amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-        ret = pthread_mutex_lock (&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* clean up framework of pthread_mutex is required here as</div><div class='add'>+     * 'reconfigure' terminates the changelog_rollover thread</div><div class='add'>+     * on graph change.</div><div class='add'>+     */</div><div class='add'>+    pthread_cleanup_push(changelog_cleanup_free_mutex,</div><div class='add'>+                         &amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+    ret = pthread_mutex_lock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_PTHREAD_ERROR,</div><div class='add'>+                "pthread error", "error=%d", ret, NULL);</div><div class='add'>+    while (priv-&gt;dm.white_fop_cnt &gt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Conditional wait on white fops : %ld",</div><div class='add'>+                     priv-&gt;dm.white_fop_cnt);</div><div class='add'>+        priv-&gt;dm.drain_wait_white = _gf_true;</div><div class='add'>+        ret = pthread_cond_wait(&amp;priv-&gt;dm.drain_white_cond,</div><div class='add'>+                                &amp;priv-&gt;dm.drain_white_mutex);</div><div class='ctx'>         if (ret)</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_ERROR, "pthread error",</div><div class='del'>-                         "error=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-        while (priv-&gt;dm.white_fop_cnt &gt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Conditional wait on white fops : %ld",</div><div class='del'>-                        priv-&gt;dm.white_fop_cnt);</div><div class='del'>-                priv-&gt;dm.drain_wait_white = _gf_true;</div><div class='del'>-                ret = pthread_cond_wait (&amp;priv-&gt;dm.drain_white_cond,</div><div class='del'>-                                         &amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_MSG_PTHREAD_COND_WAIT_FAILED,</div><div class='del'>-                                 "pthread cond wait failed",</div><div class='del'>-                                 "error=%d", ret,</div><div class='del'>-                                 NULL);</div><div class='del'>-        }</div><div class='del'>-        priv-&gt;dm.drain_wait_white = _gf_false;</div><div class='del'>-        ret = pthread_mutex_unlock (&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_ERROR, "pthread error",</div><div class='del'>-                         "error=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-        pthread_cleanup_pop (0);</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                      "Woke up: Conditional wait on white fops");</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                    CHANGELOG_MSG_PTHREAD_COND_WAIT_FAILED,</div><div class='add'>+                    "pthread cond wait failed", "error=%d", ret, NULL);</div><div class='add'>+    }</div><div class='add'>+    priv-&gt;dm.drain_wait_white = _gf_false;</div><div class='add'>+    ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_PTHREAD_ERROR,</div><div class='add'>+                "pthread error", "error=%d", ret, NULL);</div><div class='add'>+    pthread_cleanup_pop(0);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Woke up: Conditional wait on white fops");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1339,193 +1273,201 @@ changelog_drain_white_fops (xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'>  * a certain time etc..). move them into separate routine.</div><div class='ctx'>  */</div><div class='ctx'> void *</div><div class='del'>-changelog_rollover (void *data)</div><div class='add'>+changelog_rollover(void *data)</div><div class='ctx'> {</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        xlator_t               *this            = NULL;</div><div class='del'>-        struct timespec         tv              = {0,};</div><div class='del'>-        changelog_log_data_t    cld             = {0,};</div><div class='del'>-        changelog_time_slice_t *slice           = NULL;</div><div class='del'>-        changelog_priv_t       *priv            = data;</div><div class='del'>-</div><div class='del'>-        this = priv-&gt;cr.this;</div><div class='del'>-        slice = &amp;priv-&gt;slice;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                (void) pthread_testcancel();</div><div class='del'>-</div><div class='del'>-                tv.tv_sec  = time (NULL) + priv-&gt;rollover_time;</div><div class='del'>-                tv.tv_nsec = 0;</div><div class='del'>-                ret = 0; /* Reset ret to zero */</div><div class='del'>-</div><div class='del'>-               /* The race between actual rollover and explicit rollover is</div><div class='del'>-                * handled. If actual rollover is being done and the</div><div class='del'>-                * explicit rollover event comes, the event is not missed.</div><div class='del'>-                * Since explicit rollover sets 'cr.notify' to true, this</div><div class='del'>-                * thread doesn't wait on 'pthread_cond_timedwait'.</div><div class='del'>-                */</div><div class='del'>-                pthread_cleanup_push (changelog_cleanup_free_mutex,</div><div class='del'>-                                      &amp;priv-&gt;cr.lock);</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;cr.lock);</div><div class='del'>-                {</div><div class='del'>-                        while (ret == 0 &amp;&amp; !priv-&gt;cr.notify)</div><div class='del'>-                                ret = pthread_cond_timedwait (&amp;priv-&gt;cr.cond,</div><div class='del'>-                                                              &amp;priv-&gt;cr.lock,</div><div class='del'>-                                                              &amp;tv);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                priv-&gt;cr.notify = _gf_false;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;cr.lock);</div><div class='del'>-                pthread_cleanup_pop (0);</div><div class='del'>-</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                                "Explicit wakeup on barrier notify");</div><div class='del'>-                        priv-&gt;explicit_rollover = _gf_true;</div><div class='del'>-                } else if (ret &amp;&amp; ret != ETIMEDOUT) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CHANGELOG_MSG_SELECT_FAILED,</div><div class='del'>-                                "pthread_cond_timedwait failed");</div><div class='del'>-                        continue;</div><div class='del'>-                } else if (ret &amp;&amp; ret == ETIMEDOUT) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Wokeup on timeout");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-               /* Reading curent_color without lock is fine here</div><div class='del'>-                * as it is only modified here and is next to reading.</div><div class='del'>-                */</div><div class='del'>-                if (priv-&gt;current_color == FOP_COLOR_BLACK) {</div><div class='del'>-                        LOCK(&amp;priv-&gt;lock);</div><div class='del'>-                                priv-&gt;current_color = FOP_COLOR_WHITE;</div><div class='del'>-                        UNLOCK(&amp;priv-&gt;lock);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Black fops"</div><div class='del'>-                                      " to be drained:%ld",</div><div class='del'>-                                      priv-&gt;dm.black_fop_cnt);</div><div class='del'>-                        changelog_drain_black_fops (this, priv);</div><div class='del'>-                } else {</div><div class='del'>-                        LOCK(&amp;priv-&gt;lock);</div><div class='del'>-                                priv-&gt;current_color = FOP_COLOR_BLACK;</div><div class='del'>-                        UNLOCK(&amp;priv-&gt;lock);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "White fops"</div><div class='del'>-                                      " to be drained:%ld",</div><div class='del'>-                                      priv-&gt;dm.white_fop_cnt);</div><div class='del'>-                        changelog_drain_white_fops (this, priv);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Adding delay of 1 second only during explicit rollover:</div><div class='del'>-                 *</div><div class='del'>-                 * Changelog rollover can happen either due to actual</div><div class='del'>-                 * or the explicit rollover during snapshot. Actual</div><div class='del'>-                 * rollover is controlled by tuneable called 'rollover-time'.</div><div class='del'>-                 * The minimum granularity for rollover-time is 1 second.</div><div class='del'>-                 * Explicit rollover is asynchronous in nature and happens</div><div class='del'>-                 * during snapshot.</div><div class='del'>-                 *</div><div class='del'>-                 * Basically, rollover renames the current CHANGELOG file</div><div class='del'>-                 * to CHANGELOG.TIMESTAMP. Let's assume, at time 't1',</div><div class='del'>-                 * actual and explicit rollover raced against  each</div><div class='del'>-                 * other and actual rollover won the race renaming the</div><div class='del'>-                 * CHANGELOG file to CHANGELOG.t1 and opens a new</div><div class='del'>-                 * CHANGELOG file. There is high chance that, an immediate</div><div class='del'>-                 * explicit rollover at time 't1' can happen with in the same</div><div class='del'>-                 * second to rename CHANGELOG file to CHANGELOG.t1 resulting in</div><div class='del'>-                 * purging the earlier CHANGELOG.t1 file created by actual</div><div class='del'>-                 * rollover. So adding a delay of 1 second guarantees unique</div><div class='del'>-                 * CHANGELOG.TIMESTAMP during  explicit rollover.</div><div class='del'>-                 */</div><div class='del'>-                if (priv-&gt;explicit_rollover == _gf_true)</div><div class='del'>-                        sleep (1);</div><div class='del'>-</div><div class='del'>-                ret = changelog_fill_rollover_data (&amp;cld, _gf_false);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_MSG_GET_TIME_OP_FAILED,</div><div class='del'>-                                "failed to fill rollover data");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct timespec tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_log_data_t cld = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_time_slice_t *slice = NULL;</div><div class='add'>+    changelog_priv_t *priv = data;</div><div class='add'>+</div><div class='add'>+    this = priv-&gt;cr.this;</div><div class='add'>+    slice = &amp;priv-&gt;slice;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        (void)pthread_testcancel();</div><div class='add'>+</div><div class='add'>+        tv.tv_sec = time(NULL) + priv-&gt;rollover_time;</div><div class='add'>+        tv.tv_nsec = 0;</div><div class='add'>+        ret = 0; /* Reset ret to zero */</div><div class='add'>+</div><div class='add'>+        /* The race between actual rollover and explicit rollover is</div><div class='add'>+         * handled. If actual rollover is being done and the</div><div class='add'>+         * explicit rollover event comes, the event is not missed.</div><div class='add'>+         * Since explicit rollover sets 'cr.notify' to true, this</div><div class='add'>+         * thread doesn't wait on 'pthread_cond_timedwait'.</div><div class='add'>+         */</div><div class='add'>+        pthread_cleanup_push(changelog_cleanup_free_mutex, &amp;priv-&gt;cr.lock);</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;cr.lock);</div><div class='add'>+        {</div><div class='add'>+            while (ret == 0 &amp;&amp; !priv-&gt;cr.notify)</div><div class='add'>+                ret = pthread_cond_timedwait(&amp;priv-&gt;cr.cond, &amp;priv-&gt;cr.lock,</div><div class='add'>+                                             &amp;tv);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                priv-&gt;cr.notify = _gf_false;</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;cr.lock);</div><div class='add'>+        pthread_cleanup_pop(0);</div><div class='add'>+</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+                   "Explicit wakeup on barrier notify");</div><div class='add'>+            priv-&gt;explicit_rollover = _gf_true;</div><div class='add'>+        } else if (ret &amp;&amp; ret != ETIMEDOUT) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_SELECT_FAILED,</div><div class='add'>+                   "pthread_cond_timedwait failed");</div><div class='add'>+            continue;</div><div class='add'>+        } else if (ret &amp;&amp; ret == ETIMEDOUT) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "Wokeup on timeout");</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* Reading curent_color without lock is fine here</div><div class='add'>+         * as it is only modified here and is next to reading.</div><div class='add'>+         */</div><div class='add'>+        if (priv-&gt;current_color == FOP_COLOR_BLACK) {</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            priv-&gt;current_color = FOP_COLOR_WHITE;</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Black fops"</div><div class='add'>+                         " to be drained:%ld",</div><div class='add'>+                         priv-&gt;dm.black_fop_cnt);</div><div class='add'>+            changelog_drain_black_fops(this, priv);</div><div class='add'>+        } else {</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            priv-&gt;current_color = FOP_COLOR_BLACK;</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "White fops"</div><div class='add'>+                         " to be drained:%ld",</div><div class='add'>+                         priv-&gt;dm.white_fop_cnt);</div><div class='add'>+            changelog_drain_white_fops(this, priv);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* Adding delay of 1 second only during explicit rollover:</div><div class='add'>+         *</div><div class='add'>+         * Changelog rollover can happen either due to actual</div><div class='add'>+         * or the explicit rollover during snapshot. Actual</div><div class='add'>+         * rollover is controlled by tuneable called 'rollover-time'.</div><div class='add'>+         * The minimum granularity for rollover-time is 1 second.</div><div class='add'>+         * Explicit rollover is asynchronous in nature and happens</div><div class='add'>+         * during snapshot.</div><div class='add'>+         *</div><div class='add'>+         * Basically, rollover renames the current CHANGELOG file</div><div class='add'>+         * to CHANGELOG.TIMESTAMP. Let's assume, at time 't1',</div><div class='add'>+         * actual and explicit rollover raced against  each</div><div class='add'>+         * other and actual rollover won the race renaming the</div><div class='add'>+         * CHANGELOG file to CHANGELOG.t1 and opens a new</div><div class='add'>+         * CHANGELOG file. There is high chance that, an immediate</div><div class='add'>+         * explicit rollover at time 't1' can happen with in the same</div><div class='add'>+         * second to rename CHANGELOG file to CHANGELOG.t1 resulting in</div><div class='add'>+         * purging the earlier CHANGELOG.t1 file created by actual</div><div class='add'>+         * rollover. So adding a delay of 1 second guarantees unique</div><div class='add'>+         * CHANGELOG.TIMESTAMP during  explicit rollover.</div><div class='add'>+         */</div><div class='add'>+        if (priv-&gt;explicit_rollover == _gf_true)</div><div class='add'>+            sleep(1);</div><div class='ctx'> </div><div class='del'>-                _mask_cancellation ();</div><div class='add'>+        ret = changelog_fill_rollover_data(&amp;cld, _gf_false);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CHANGELOG_MSG_GET_TIME_OP_FAILED,</div><div class='add'>+                   "failed to fill rollover data");</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        ret = changelog_inject_single_event (this, priv, &amp;cld);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                SLICE_VERSION_UPDATE (slice);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+        _mask_cancellation();</div><div class='ctx'> </div><div class='del'>-                _unmask_cancellation ();</div><div class='add'>+        LOCK(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            ret = changelog_inject_single_event(this, priv, &amp;cld);</div><div class='add'>+            if (!ret)</div><div class='add'>+                SLICE_VERSION_UPDATE(slice);</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        _unmask_cancellation();</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-changelog_fsync_thread (void *data)</div><div class='add'>+changelog_fsync_thread(void *data)</div><div class='ctx'> {</div><div class='del'>-        int                   ret  = 0;</div><div class='del'>-        xlator_t             *this = NULL;</div><div class='del'>-        struct timeval        tv   = {0,};</div><div class='del'>-        changelog_log_data_t  cld  = {0,};</div><div class='del'>-        changelog_priv_t     *priv = data;</div><div class='del'>-</div><div class='del'>-        this = priv-&gt;cf.this;</div><div class='del'>-        cld.cld_type = CHANGELOG_TYPE_FSYNC;</div><div class='del'>-</div><div class='del'>-        while (1) {</div><div class='del'>-                (void) pthread_testcancel();</div><div class='del'>-</div><div class='del'>-                tv.tv_sec  = priv-&gt;fsync_interval;</div><div class='del'>-                tv.tv_usec = 0;</div><div class='del'>-</div><div class='del'>-                ret = select (0, NULL, NULL, NULL, &amp;tv);</div><div class='del'>-                if (ret)</div><div class='del'>-                        continue;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_log_data_t cld = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_priv_t *priv = data;</div><div class='add'>+</div><div class='add'>+    this = priv-&gt;cf.this;</div><div class='add'>+    cld.cld_type = CHANGELOG_TYPE_FSYNC;</div><div class='add'>+</div><div class='add'>+    while (1) {</div><div class='add'>+        (void)pthread_testcancel();</div><div class='add'>+</div><div class='add'>+        tv.tv_sec = priv-&gt;fsync_interval;</div><div class='add'>+        tv.tv_usec = 0;</div><div class='add'>+</div><div class='add'>+        ret = select(0, NULL, NULL, NULL, &amp;tv);</div><div class='add'>+        if (ret)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                _mask_cancellation ();</div><div class='add'>+        _mask_cancellation();</div><div class='ctx'> </div><div class='del'>-                ret = changelog_inject_single_event (this, priv, &amp;cld);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_MSG_INJECT_FSYNC_FAILED,</div><div class='del'>-                                "failed to inject fsync event");</div><div class='add'>+        ret = changelog_inject_single_event(this, priv, &amp;cld);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CHANGELOG_MSG_INJECT_FSYNC_FAILED,</div><div class='add'>+                   "failed to inject fsync event");</div><div class='ctx'> </div><div class='del'>-                _unmask_cancellation ();</div><div class='del'>-        }</div><div class='add'>+        _unmask_cancellation();</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* macros for inode/changelog version checks */</div><div class='ctx'> </div><div class='del'>-#define INODE_VERSION_UPDATE(priv, inode, iver, slice, type) do {       \</div><div class='del'>-                LOCK (&amp;inode-&gt;lock);                                    \</div><div class='del'>-                {                                                       \</div><div class='del'>-                        LOCK (&amp;priv-&gt;lock);                             \</div><div class='del'>-                        {                                               \</div><div class='del'>-                                *iver = slice-&gt;changelog_version[type]; \</div><div class='del'>-                        }                                               \</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;lock);                           \</div><div class='del'>-                }                                                       \</div><div class='del'>-                UNLOCK (&amp;inode-&gt;lock);                                  \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define INODE_VERSION_EQUALS_SLICE(priv, ver, slice, type, upd) do {    \</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);                                     \</div><div class='del'>-                {                                                       \</div><div class='del'>-                        upd = (ver == slice-&gt;changelog_version[type])   \</div><div class='del'>-                                ? _gf_false : _gf_true;                 \</div><div class='del'>-                }                                                       \</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);                                   \</div><div class='del'>-        } while (0)</div><div class='add'>+#define INODE_VERSION_UPDATE(priv, inode, iver, slice, type)                   \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        LOCK(&amp;inode-&gt;lock);                                                    \</div><div class='add'>+        {                                                                      \</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);                                                 \</div><div class='add'>+            {                                                                  \</div><div class='add'>+                *iver = slice-&gt;changelog_version[type];                        \</div><div class='add'>+            }                                                                  \</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);                                               \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        UNLOCK(&amp;inode-&gt;lock);                                                  \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define INODE_VERSION_EQUALS_SLICE(priv, ver, slice, type, upd)                \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        LOCK(&amp;priv-&gt;lock);                                                     \</div><div class='add'>+        {                                                                      \</div><div class='add'>+            upd = (ver == slice-&gt;changelog_version[type]) ? _gf_false          \</div><div class='add'>+                                                          : _gf_true;          \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        UNLOCK(&amp;priv-&gt;lock);                                                   \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__changelog_inode_ctx_set (xlator_t *this,</div><div class='del'>-                           inode_t *inode, changelog_inode_ctx_t *ctx)</div><div class='add'>+__changelog_inode_ctx_set(xlator_t *this, inode_t *inode,</div><div class='add'>+                          changelog_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        uint64_t ctx_addr = (uint64_t) ctx;</div><div class='del'>-        return __inode_ctx_set (inode, this, &amp;ctx_addr);</div><div class='add'>+    uint64_t ctx_addr = (uint64_t)ctx;</div><div class='add'>+    return __inode_ctx_set(inode, this, &amp;ctx_addr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1533,56 +1475,53 @@ __changelog_inode_ctx_set (xlator_t *this,</div><div class='ctx'>  * for a particular type.</div><div class='ctx'>  */</div><div class='ctx'> changelog_inode_ctx_t *</div><div class='del'>-__changelog_inode_ctx_get (xlator_t *this,</div><div class='del'>-                           inode_t *inode, unsigned long **iver,</div><div class='del'>-                           unsigned long *version, changelog_log_type type)</div><div class='add'>+__changelog_inode_ctx_get(xlator_t *this, inode_t *inode, unsigned long **iver,</div><div class='add'>+                          unsigned long *version, changelog_log_type type)</div><div class='ctx'> {</div><div class='del'>-        int                    ret      = 0;</div><div class='del'>-        uint64_t               ctx_addr = 0;</div><div class='del'>-        changelog_inode_ctx_t *ctx      = NULL;</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctx_addr);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                ctx_addr = 0;</div><div class='del'>-        if (ctx_addr != 0) {</div><div class='del'>-                ctx = (changelog_inode_ctx_t *) (long)ctx_addr;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctx = GF_CALLOC (1, sizeof (*ctx), gf_changelog_mt_inode_ctx_t);</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t ctx_addr = 0;</div><div class='add'>+    changelog_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;ctx_addr);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        ctx_addr = 0;</div><div class='add'>+    if (ctx_addr != 0) {</div><div class='add'>+        ctx = (changelog_inode_ctx_t *)(long)ctx_addr;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctx = GF_CALLOC(1, sizeof(*ctx), gf_changelog_mt_inode_ctx_t);</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = __changelog_inode_ctx_set(this, inode, ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(ctx);</div><div class='add'>+        ctx = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = __changelog_inode_ctx_set (this, inode, ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (ctx);</div><div class='del'>-                ctx = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        if (ctx &amp;&amp; iver &amp;&amp; version) {</div><div class='del'>-                *iver = CHANGELOG_INODE_VERSION_TYPE (ctx, type);</div><div class='del'>-                *version = **iver;</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='add'>+    if (ctx &amp;&amp; iver &amp;&amp; version) {</div><div class='add'>+        *iver = CHANGELOG_INODE_VERSION_TYPE(ctx, type);</div><div class='add'>+        *version = **iver;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static changelog_inode_ctx_t *</div><div class='del'>-changelog_inode_ctx_get (xlator_t *this,</div><div class='del'>-                         inode_t *inode, unsigned long **iver,</div><div class='del'>-                         unsigned long *version, changelog_log_type type)</div><div class='add'>+changelog_inode_ctx_get(xlator_t *this, inode_t *inode, unsigned long **iver,</div><div class='add'>+                        unsigned long *version, changelog_log_type type)</div><div class='ctx'> {</div><div class='del'>-        changelog_inode_ctx_t *ctx = NULL;</div><div class='add'>+    changelog_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx = __changelog_inode_ctx_get (this,</div><div class='del'>-                                                 inode, iver, version, type);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx = __changelog_inode_ctx_get(this, inode, iver, version, type);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1686,59 +1625,57 @@ changelog_inode_ctx_get (xlator_t *this,</div><div class='ctx'>  * signifies an update was recorded in the current time slice).</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-changelog_update (xlator_t *this, changelog_priv_t *priv,</div><div class='del'>-                  changelog_local_t *local, changelog_log_type type)</div><div class='add'>+changelog_update(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                 changelog_local_t *local, changelog_log_type type)</div><div class='ctx'> {</div><div class='del'>-        int                     ret        = 0;</div><div class='del'>-        unsigned long          *iver       = NULL;</div><div class='del'>-        unsigned long           version    = 0;</div><div class='del'>-        inode_t                *inode      = NULL;</div><div class='del'>-        changelog_time_slice_t *slice      = NULL;</div><div class='del'>-        changelog_inode_ctx_t  *ctx        = NULL;</div><div class='del'>-        changelog_log_data_t   *cld_0      = NULL;</div><div class='del'>-        changelog_log_data_t   *cld_1      = NULL;</div><div class='del'>-        changelog_local_t      *next_local = NULL;</div><div class='del'>-        gf_boolean_t            need_upd   = _gf_true;</div><div class='del'>-</div><div class='del'>-        slice = &amp;priv-&gt;slice;</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * for fops that do not require inode version checking</div><div class='del'>-         */</div><div class='del'>-        if (local-&gt;update_no_check)</div><div class='del'>-                goto update;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    unsigned long *iver = NULL;</div><div class='add'>+    unsigned long version = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    changelog_time_slice_t *slice = NULL;</div><div class='add'>+    changelog_inode_ctx_t *ctx = NULL;</div><div class='add'>+    changelog_log_data_t *cld_0 = NULL;</div><div class='add'>+    changelog_log_data_t *cld_1 = NULL;</div><div class='add'>+    changelog_local_t *next_local = NULL;</div><div class='add'>+    gf_boolean_t need_upd = _gf_true;</div><div class='ctx'> </div><div class='del'>-        inode = local-&gt;inode;</div><div class='add'>+    slice = &amp;priv-&gt;slice;</div><div class='ctx'> </div><div class='del'>-        ctx = changelog_inode_ctx_get (this,</div><div class='del'>-                                       inode, &amp;iver, &amp;version, type);</div><div class='del'>-        if (!ctx)</div><div class='del'>-                goto update;</div><div class='add'>+    /**</div><div class='add'>+     * for fops that do not require inode version checking</div><div class='add'>+     */</div><div class='add'>+    if (local-&gt;update_no_check)</div><div class='add'>+        goto update;</div><div class='ctx'> </div><div class='del'>-        INODE_VERSION_EQUALS_SLICE (priv, version, slice, type, need_upd);</div><div class='add'>+    inode = local-&gt;inode;</div><div class='ctx'> </div><div class='del'>- update:</div><div class='del'>-        if (need_upd) {</div><div class='del'>-                cld_0 = &amp;local-&gt;cld;</div><div class='del'>-                cld_0-&gt;cld_type = type;</div><div class='add'>+    ctx = changelog_inode_ctx_get(this, inode, &amp;iver, &amp;version, type);</div><div class='add'>+    if (!ctx)</div><div class='add'>+        goto update;</div><div class='ctx'> </div><div class='del'>-                if ( (next_local = local-&gt;prev_entry) != NULL ) {</div><div class='del'>-                        cld_1 = &amp;next_local-&gt;cld;</div><div class='del'>-                        cld_1-&gt;cld_type = type;</div><div class='del'>-                }</div><div class='add'>+    INODE_VERSION_EQUALS_SLICE(priv, version, slice, type, need_upd);</div><div class='ctx'> </div><div class='del'>-                ret = priv-&gt;cd.dispatchfn (this, priv,</div><div class='del'>-                                           priv-&gt;cd.cd_data, cld_0, cld_1);</div><div class='add'>+update:</div><div class='add'>+    if (need_upd) {</div><div class='add'>+        cld_0 = &amp;local-&gt;cld;</div><div class='add'>+        cld_0-&gt;cld_type = type;</div><div class='ctx'> </div><div class='del'>-                /**</div><div class='del'>-                 * update after the dispatcher has successfully done</div><div class='del'>-                 * it's job.</div><div class='del'>-                 */</div><div class='del'>-                if (!local-&gt;update_no_check &amp;&amp; iver &amp;&amp; !ret)</div><div class='del'>-                        INODE_VERSION_UPDATE (priv, inode, iver, slice, type);</div><div class='add'>+        if ((next_local = local-&gt;prev_entry) != NULL) {</div><div class='add'>+            cld_1 = &amp;next_local-&gt;cld;</div><div class='add'>+            cld_1-&gt;cld_type = type;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+        ret = priv-&gt;cd.dispatchfn(this, priv, priv-&gt;cd.cd_data, cld_0, cld_1);</div><div class='add'>+</div><div class='add'>+        /**</div><div class='add'>+         * update after the dispatcher has successfully done</div><div class='add'>+         * it's job.</div><div class='add'>+         */</div><div class='add'>+        if (!local-&gt;update_no_check &amp;&amp; iver &amp;&amp; !ret)</div><div class='add'>+            INODE_VERSION_UPDATE(priv, inode, iver, slice, type);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Begin: Geo-rep snapshot dependency changes */</div><div class='hunk'>@@ -1754,230 +1691,223 @@ changelog_update (xlator_t *this, changelog_priv_t *priv,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_color_fop_and_inc_cnt (xlator_t *this, changelog_priv_t *priv,</div><div class='del'>-                                                 changelog_local_t *local)</div><div class='add'>+changelog_color_fop_and_inc_cnt(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                                changelog_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (!priv || !local)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv || !local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local-&gt;color = priv-&gt;current_color;</div><div class='del'>-                changelog_inc_fop_cnt (this, priv, local);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;color = priv-&gt;current_color;</div><div class='add'>+        changelog_inc_fop_cnt(this, priv, local);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Increments the respective fop counter based on the fop color */</div><div class='ctx'> void</div><div class='del'>-changelog_inc_fop_cnt (xlator_t *this, changelog_priv_t *priv,</div><div class='del'>-                                       changelog_local_t *local)</div><div class='add'>+changelog_inc_fop_cnt(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                      changelog_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;color == FOP_COLOR_BLACK) {</div><div class='del'>-                        ret = pthread_mutex_lock (&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                        {</div><div class='del'>-                                priv-&gt;dm.black_fop_cnt++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = pthread_mutex_lock (&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                        {</div><div class='del'>-                                priv-&gt;dm.white_fop_cnt++;</div><div class='del'>-                        }</div><div class='del'>-                        ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>- out:</div><div class='del'>-        return;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;color == FOP_COLOR_BLACK) {</div><div class='add'>+            ret = pthread_mutex_lock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+            {</div><div class='add'>+                priv-&gt;dm.black_fop_cnt++;</div><div class='add'>+            }</div><div class='add'>+            ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+        } else {</div><div class='add'>+            ret = pthread_mutex_lock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+            {</div><div class='add'>+                priv-&gt;dm.white_fop_cnt++;</div><div class='add'>+            }</div><div class='add'>+            ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Decrements the respective fop counter based on the fop color */</div><div class='ctx'> void</div><div class='del'>-changelog_dec_fop_cnt (xlator_t *this, changelog_priv_t *priv,</div><div class='del'>-                                       changelog_local_t *local)</div><div class='add'>+changelog_dec_fop_cnt(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                      changelog_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;color == FOP_COLOR_BLACK) {</div><div class='del'>-                        ret = pthread_mutex_lock (&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                        {</div><div class='del'>-                                priv-&gt;dm.black_fop_cnt--;</div><div class='del'>-                                if (priv-&gt;dm.black_fop_cnt == 0 &amp;&amp;</div><div class='del'>-                                    priv-&gt;dm.drain_wait_black == _gf_true) {</div><div class='del'>-                                        ret = pthread_cond_signal (</div><div class='del'>-                                                    &amp;priv-&gt;dm.drain_black_cond);</div><div class='del'>-                                        CHANGELOG_PTHREAD_ERROR_HANDLE_2 (ret,</div><div class='del'>-                                                                          out,</div><div class='del'>-                                                  priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                                      "Signalled "</div><div class='del'>-                                                      "draining of black");</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = pthread_mutex_lock (&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-                        {</div><div class='del'>-                                priv-&gt;dm.white_fop_cnt--;</div><div class='del'>-                                if (priv-&gt;dm.white_fop_cnt == 0 &amp;&amp;</div><div class='del'>-                                    priv-&gt;dm.drain_wait_white == _gf_true) {</div><div class='del'>-                                        ret = pthread_cond_signal (</div><div class='del'>-                                                    &amp;priv-&gt;dm.drain_white_cond);</div><div class='del'>-                                        CHANGELOG_PTHREAD_ERROR_HANDLE_2 (ret,</div><div class='del'>-                                                                          out,</div><div class='del'>-                                                  priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                                      "Signalled "</div><div class='del'>-                                                      "draining of white");</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;color == FOP_COLOR_BLACK) {</div><div class='add'>+            ret = pthread_mutex_lock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+            {</div><div class='add'>+                priv-&gt;dm.black_fop_cnt--;</div><div class='add'>+                if (priv-&gt;dm.black_fop_cnt == 0 &amp;&amp;</div><div class='add'>+                    priv-&gt;dm.drain_wait_black == _gf_true) {</div><div class='add'>+                    ret = pthread_cond_signal(&amp;priv-&gt;dm.drain_black_cond);</div><div class='add'>+                    CHANGELOG_PTHREAD_ERROR_HANDLE_2(</div><div class='add'>+                        ret, out, priv-&gt;dm.drain_black_mutex);</div><div class='add'>+                    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                                 "Signalled "</div><div class='add'>+                                 "draining of black");</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+        } else {</div><div class='add'>+            ret = pthread_mutex_lock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+            {</div><div class='add'>+                priv-&gt;dm.white_fop_cnt--;</div><div class='add'>+                if (priv-&gt;dm.white_fop_cnt == 0 &amp;&amp;</div><div class='add'>+                    priv-&gt;dm.drain_wait_white == _gf_true) {</div><div class='add'>+                    ret = pthread_cond_signal(&amp;priv-&gt;dm.drain_white_cond);</div><div class='add'>+                    CHANGELOG_PTHREAD_ERROR_HANDLE_2(</div><div class='add'>+                        ret, out, priv-&gt;dm.drain_white_mutex);</div><div class='add'>+                    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                                 "Signalled "</div><div class='add'>+                                 "draining of white");</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            ret = pthread_mutex_unlock(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+            CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='ctx'>         }</div><div class='del'>- out:</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Write to a pipe setup between changelog main thread and changelog</div><div class='ctx'>  * rollover thread to initiate explicit rollover of changelog journal.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_barrier_notify (changelog_priv_t *priv, char *buf)</div><div class='add'>+changelog_barrier_notify(changelog_priv_t *priv, char *buf)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;cr.lock);</div><div class='del'>-        {</div><div class='del'>-                ret = pthread_cond_signal (&amp;priv-&gt;cr.cond);</div><div class='del'>-                priv-&gt;cr.notify = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;cr.lock);</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;cr.lock);</div><div class='add'>+    {</div><div class='add'>+        ret = pthread_cond_signal(&amp;priv-&gt;cr.cond);</div><div class='add'>+        priv-&gt;cr.notify = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;cr.lock);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Clean up flags set on barrier notification */</div><div class='ctx'> void</div><div class='del'>-changelog_barrier_cleanup (xlator_t *this, changelog_priv_t *priv,</div><div class='del'>-                                                struct list_head *queue)</div><div class='add'>+changelog_barrier_cleanup(xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+                          struct list_head *queue)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-                priv-&gt;bflags.barrier_ext = _gf_false;</div><div class='del'>-        UNLOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_lock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-        {</div><div class='del'>-                priv-&gt;bn.bnotify = _gf_false;</div><div class='del'>-        }</div><div class='del'>-        ret = pthread_mutex_unlock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-        CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret, out);</div><div class='del'>-</div><div class='del'>-        /* Disable changelog barrier and dequeue fops */</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;barrier_enabled == _gf_true)</div><div class='del'>-                        __chlog_barrier_disable (this, queue);</div><div class='del'>-                else</div><div class='del'>-                        ret = -1;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                chlog_barrier_dequeue_all(this, queue);</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+    priv-&gt;bflags.barrier_ext = _gf_false;</div><div class='add'>+    UNLOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_lock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+    CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+    {</div><div class='add'>+        priv-&gt;bn.bnotify = _gf_false;</div><div class='add'>+    }</div><div class='add'>+    ret = pthread_mutex_unlock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+    CHANGELOG_PTHREAD_ERROR_HANDLE_0(ret, out);</div><div class='add'>+</div><div class='add'>+    /* Disable changelog barrier and dequeue fops */</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;barrier_enabled == _gf_true)</div><div class='add'>+            __chlog_barrier_disable(this, queue);</div><div class='add'>+        else</div><div class='add'>+            ret = -1;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        chlog_barrier_dequeue_all(this, queue);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return;</div><div class='add'>+out:</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> /* End: Geo-Rep snapshot dependency changes */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fill_entry_buf (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                          loc_t *loc, changelog_local_t **local)</div><div class='add'>+changelog_fill_entry_buf(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                         changelog_local_t **local)</div><div class='ctx'> {</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='del'>-        char             *dup_path = NULL;</div><div class='del'>-        char             *bname    = NULL;</div><div class='del'>-        inode_t          *parent   = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-</div><div class='del'>-        parent = inode_parent (loc-&gt;inode, 0, 0);</div><div class='del'>-        if (!parent) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_INODE_NOT_FOUND,</div><div class='del'>-                         "Parent inode not found",</div><div class='del'>-                         "gfid=%s", uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                         NULL);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, *local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 5);</div><div class='del'>-        if (!(*local)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_LOCAL_INIT_FAILED, "changelog local"</div><div class='del'>-                        " initiatilization failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (*local);</div><div class='del'>-        if (!co) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                        "Failed to get buffer");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                CHANGLOG_FILL_FOP_NUMBER (co, GF_FOP_MKDIR, fop_fn, xtra_len);</div><div class='del'>-                co++;</div><div class='del'>-                CHANGELOG_FILL_UINT32 (co, S_IFDIR|0755, number_fn, xtra_len);</div><div class='del'>-                co++;</div><div class='del'>-        } else {</div><div class='del'>-                CHANGLOG_FILL_FOP_NUMBER (co, GF_FOP_CREATE, fop_fn, xtra_len);</div><div class='del'>-                co++;</div><div class='del'>-                CHANGELOG_FILL_UINT32 (co, S_IFREG|0644, number_fn, xtra_len);</div><div class='del'>-                co++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    char *dup_path = NULL;</div><div class='add'>+    char *bname = NULL;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    parent = inode_parent(loc-&gt;inode, 0, 0);</div><div class='add'>+    if (!parent) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno, CHANGELOG_MSG_INODE_NOT_FOUND,</div><div class='add'>+                "Parent inode not found", "gfid=%s",</div><div class='add'>+                uuid_utoa(loc-&gt;inode-&gt;gfid), NULL);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, *local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 5);</div><div class='add'>+    if (!(*local)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_LOCAL_INIT_FAILED,</div><div class='add'>+               "changelog local"</div><div class='add'>+               " initiatilization failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(*local);</div><div class='add'>+    if (!co) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+               "Failed to get buffer");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        CHANGLOG_FILL_FOP_NUMBER(co, GF_FOP_MKDIR, fop_fn, xtra_len);</div><div class='ctx'>         co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='add'>+        CHANGELOG_FILL_UINT32(co, S_IFDIR | 0755, number_fn, xtra_len);</div><div class='add'>+        co++;</div><div class='add'>+    } else {</div><div class='add'>+        CHANGLOG_FILL_FOP_NUMBER(co, GF_FOP_CREATE, fop_fn, xtra_len);</div><div class='add'>+        co++;</div><div class='add'>+        CHANGELOG_FILL_UINT32(co, S_IFREG | 0644, number_fn, xtra_len);</div><div class='ctx'>         co++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dup_path = gf_strdup (loc-&gt;path);</div><div class='del'>-        bname = basename (dup_path);</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, parent-&gt;gfid, bname, entry_fn, entry_free_fn,</div><div class='del'>-                              xtra_len, err);</div><div class='del'>-        changelog_set_usable_record_and_length (*local, xtra_len, 5);</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='ctx'> </div><div class='del'>-        if (dup_path)</div><div class='del'>-                GF_FREE (dup_path);</div><div class='del'>-        if (parent)</div><div class='del'>-                inode_unref (parent);</div><div class='del'>-        return 0;</div><div class='add'>+    dup_path = gf_strdup(loc-&gt;path);</div><div class='add'>+    bname = basename(dup_path);</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, parent-&gt;gfid, bname, entry_fn, entry_free_fn,</div><div class='add'>+                         xtra_len, err);</div><div class='add'>+    changelog_set_usable_record_and_length(*local, xtra_len, 5);</div><div class='add'>+</div><div class='add'>+    if (dup_path)</div><div class='add'>+        GF_FREE(dup_path);</div><div class='add'>+    if (parent)</div><div class='add'>+        inode_unref(parent);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (dup_path)</div><div class='del'>-                GF_FREE (dup_path);</div><div class='del'>-        if (parent)</div><div class='del'>-                inode_unref (parent);</div><div class='del'>-        return -1;</div><div class='add'>+    if (dup_path)</div><div class='add'>+        GF_FREE(dup_path);</div><div class='add'>+    if (parent)</div><div class='add'>+        inode_unref(parent);</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -1990,93 +1920,98 @@ err:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-resolve_pargfid_to_path (xlator_t *this, const uuid_t pgfid,</div><div class='del'>-                         char **path, char *bname)</div><div class='add'>+resolve_pargfid_to_path(xlator_t *this, const uuid_t pgfid, char **path,</div><div class='add'>+                        char *bname)</div><div class='ctx'> {</div><div class='del'>-        char             *linkname                  = NULL;</div><div class='del'>-        char             *dir_handle                = NULL;</div><div class='del'>-        char             *pgfidstr                  = NULL;</div><div class='del'>-        char             *saveptr                   = NULL;</div><div class='del'>-        ssize_t           len                       = 0;</div><div class='del'>-        int               ret                       = 0;</div><div class='del'>-        uuid_t            tmp_gfid                  = {0, };</div><div class='del'>-        uuid_t            pargfid                   = {0, };</div><div class='del'>-        changelog_priv_t *priv                      = NULL;</div><div class='del'>-        char              gpath[PATH_MAX]           = {0,};</div><div class='del'>-        char              result[PATH_MAX]          = {0,};</div><div class='del'>-        char             *dir_name                  = NULL;</div><div class='del'>-        char              pre_dir_name[PATH_MAX]    = {0,};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (pargfid, pgfid);</div><div class='del'>-        if (!path || gf_uuid_is_null (pargfid)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (__is_root_gfid (pargfid)) {</div><div class='del'>-                if (bname)</div><div class='del'>-                        *path = gf_strdup (bname);</div><div class='del'>-                else</div><div class='del'>-                        *path = gf_strdup (".");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    char *linkname = NULL;</div><div class='add'>+    char *dir_handle = NULL;</div><div class='add'>+    char *pgfidstr = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    ssize_t len = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uuid_t tmp_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t pargfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    char gpath[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char result[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *dir_name = NULL;</div><div class='add'>+    char pre_dir_name[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(pargfid, pgfid);</div><div class='add'>+    if (!path || gf_uuid_is_null(pargfid)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (__is_root_gfid(pargfid)) {</div><div class='add'>+        if (bname)</div><div class='add'>+            *path = gf_strdup(bname);</div><div class='add'>+        else</div><div class='add'>+            *path = gf_strdup(".");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dir_handle = alloca (PATH_MAX);</div><div class='del'>-        linkname   = alloca (PATH_MAX);</div><div class='del'>-        (void) snprintf (gpath, PATH_MAX, "%s/.glusterfs/",</div><div class='del'>-                         priv-&gt;changelog_brick);</div><div class='del'>-</div><div class='del'>-        while (!(__is_root_gfid (pargfid))) {</div><div class='del'>-                len = snprintf (dir_handle, PATH_MAX, "%s/%02x/%02x/%s", gpath,</div><div class='del'>-                                pargfid[0], pargfid[1], uuid_utoa (pargfid));</div><div class='del'>-                if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    dir_handle = alloca(PATH_MAX);</div><div class='add'>+    linkname = alloca(PATH_MAX);</div><div class='add'>+    (void)snprintf(gpath, PATH_MAX, "%s/.glusterfs/", priv-&gt;changelog_brick);</div><div class='ctx'> </div><div class='del'>-                len = sys_readlink (dir_handle, linkname, PATH_MAX);</div><div class='del'>-                if (len &lt; 0) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                 CHANGELOG_MSG_READLINK_OP_FAILED,</div><div class='del'>-                                 "could not read the "</div><div class='del'>-                                 "link from the gfid handle",</div><div class='del'>-                                 "handle=%s", dir_handle,</div><div class='del'>-                                 NULL);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    while (!(__is_root_gfid(pargfid))) {</div><div class='add'>+        len = snprintf(dir_handle, PATH_MAX, "%s/%02x/%02x/%s", gpath,</div><div class='add'>+                       pargfid[0], pargfid[1], uuid_utoa(pargfid));</div><div class='add'>+        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                linkname[len] = '\0';</div><div class='add'>+        len = sys_readlink(dir_handle, linkname, PATH_MAX);</div><div class='add'>+        if (len &lt; 0) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                    CHANGELOG_MSG_READLINK_OP_FAILED,</div><div class='add'>+                    "could not read the "</div><div class='add'>+                    "link from the gfid handle",</div><div class='add'>+                    "handle=%s", dir_handle, NULL);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                pgfidstr = strtok_r (linkname + strlen("../../00/00/"), "/",</div><div class='del'>-                                     &amp;saveptr);</div><div class='del'>-                dir_name = strtok_r (NULL, "/", &amp;saveptr);</div><div class='add'>+        linkname[len] = '\0';</div><div class='ctx'> </div><div class='del'>-                len = snprintf (result, PATH_MAX, "%s/%s", dir_name,</div><div class='del'>-                                pre_dir_name);</div><div class='del'>-                if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (snprintf (pre_dir_name, len + 1, "%s", result)</div><div class='del'>-		    &gt;= len + 1) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        pgfidstr = strtok_r(linkname + strlen("../../00/00/"), "/", &amp;saveptr);</div><div class='add'>+        dir_name = strtok_r(NULL, "/", &amp;saveptr);</div><div class='ctx'> </div><div class='del'>-                gf_uuid_parse (pgfidstr, tmp_gfid);</div><div class='del'>-                gf_uuid_copy (pargfid, tmp_gfid);</div><div class='add'>+        len = snprintf(result, PATH_MAX, "%s/%s", dir_name, pre_dir_name);</div><div class='add'>+        if ((len &lt; 0) || (len &gt;= PATH_MAX)) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (snprintf(pre_dir_name, len + 1, "%s", result) &gt;= len + 1) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (bname)</div><div class='del'>-                strncat (result, bname, strlen(bname) + 1);</div><div class='add'>+        gf_uuid_parse(pgfidstr, tmp_gfid);</div><div class='add'>+        gf_uuid_copy(pargfid, tmp_gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *path = gf_strdup (result);</div><div class='add'>+    if (bname)</div><div class='add'>+        strncat(result, bname, strlen(bname) + 1);</div><div class='add'>+</div><div class='add'>+    *path = gf_strdup(result);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-rpc-common.c b/xlators/features/changelog/src/changelog-rpc-common.c<br/>index 056519232cf..ce01bf7a133 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-rpc-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-rpc-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-rpc-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-rpc-common.c</a></div><div class='hunk'>@@ -24,65 +24,63 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-changelog_rpc_poller (void *arg)</div><div class='add'>+changelog_rpc_poller(void *arg)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = arg;</div><div class='add'>+    xlator_t *this = arg;</div><div class='ctx'> </div><div class='del'>-        (void) event_dispatch (this-&gt;ctx-&gt;event_pool);</div><div class='del'>-        return NULL;</div><div class='add'>+    (void)event_dispatch(this-&gt;ctx-&gt;event_pool);</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct rpc_clnt *</div><div class='del'>-changelog_rpc_client_init (xlator_t *this, void *cbkdata,</div><div class='del'>-                           char *sockfile, rpc_clnt_notify_t fn)</div><div class='add'>+changelog_rpc_client_init(xlator_t *this, void *cbkdata, char *sockfile,</div><div class='add'>+                          rpc_clnt_notify_t fn)</div><div class='ctx'> {</div><div class='del'>-        int              ret         = 0;</div><div class='del'>-        struct rpc_clnt *rpc         = NULL;</div><div class='del'>-        dict_t          *options     = NULL;</div><div class='del'>-</div><div class='del'>-        if (!cbkdata)</div><div class='del'>-                cbkdata = this;</div><div class='del'>-</div><div class='del'>-        options = dict_new ();</div><div class='del'>-        if (!options)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        ret = rpc_transport_unix_options_build (&amp;options, sockfile, 0);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_RPC_BUILD_ERROR,</div><div class='del'>-                        "failed to build rpc options");</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rpc = rpc_clnt_new (options, this, this-&gt;name, 16);</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_register_notify (rpc, fn, cbkdata);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_NOTIFY_REGISTER_FAILED,</div><div class='del'>-                        "failed to register notify");</div><div class='del'>-                goto dealloc_rpc_clnt;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpc_clnt_start (rpc);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_RPC_START_ERROR,</div><div class='del'>-                        "failed to start rpc");</div><div class='del'>-                goto dealloc_rpc_clnt;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return rpc;</div><div class='del'>-</div><div class='del'>- dealloc_rpc_clnt:</div><div class='del'>-        rpc_clnt_unref (rpc);</div><div class='del'>- dealloc_dict:</div><div class='del'>-        dict_unref (options);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct rpc_clnt *rpc = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+</div><div class='add'>+    if (!cbkdata)</div><div class='add'>+        cbkdata = this;</div><div class='add'>+</div><div class='add'>+    options = dict_new();</div><div class='add'>+    if (!options)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    ret = rpc_transport_unix_options_build(&amp;options, sockfile, 0);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_RPC_BUILD_ERROR,</div><div class='add'>+               "failed to build rpc options");</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    rpc = rpc_clnt_new(options, this, this-&gt;name, 16);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_register_notify(rpc, fn, cbkdata);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CHANGELOG_MSG_NOTIFY_REGISTER_FAILED,</div><div class='add'>+               "failed to register notify");</div><div class='add'>+        goto dealloc_rpc_clnt;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpc_clnt_start(rpc);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_RPC_START_ERROR,</div><div class='add'>+               "failed to start rpc");</div><div class='add'>+        goto dealloc_rpc_clnt;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return rpc;</div><div class='add'>+</div><div class='add'>+dealloc_rpc_clnt:</div><div class='add'>+    rpc_clnt_unref(rpc);</div><div class='add'>+dealloc_dict:</div><div class='add'>+    dict_unref(options);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -90,96 +88,96 @@ changelog_rpc_client_init (xlator_t *this, void *cbkdata,</div><div class='ctx'>  * RPC server.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_rpc_sumbit_req (struct rpc_clnt *rpc, void *req,</div><div class='del'>-                          call_frame_t *frame, rpc_clnt_prog_t *prog,</div><div class='del'>-                          int procnum, struct iovec *payload, int payloadcnt,</div><div class='del'>-                          struct iobref *iobref, xlator_t *this,</div><div class='del'>-                          fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='add'>+changelog_rpc_sumbit_req(struct rpc_clnt *rpc, void *req, call_frame_t *frame,</div><div class='add'>+                         rpc_clnt_prog_t *prog, int procnum,</div><div class='add'>+                         struct iovec *payload, int payloadcnt,</div><div class='add'>+                         struct iobref *iobref, xlator_t *this,</div><div class='add'>+                         fop_cbk_fn_t cbkfn, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        int           ret        = 0;</div><div class='del'>-        int           count      = 0;</div><div class='del'>-        struct iovec  iov        = {0, };</div><div class='del'>-        struct iobuf *iobuf      = NULL;</div><div class='del'>-        char          new_iobref = 0;</div><div class='del'>-        ssize_t       xdr_size   = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+    ssize_t xdr_size = 0;</div><div class='ctx'> </div><div class='del'>-        if (req) {</div><div class='del'>-                xdr_size = xdr_sizeof (xdrproc, req);</div><div class='add'>+    GF_ASSERT(this);</div><div class='ctx'> </div><div class='del'>-                iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='del'>-                if (!iobuf) {</div><div class='del'>-                        goto out;</div><div class='del'>-                };</div><div class='add'>+    if (req) {</div><div class='add'>+        xdr_size = xdr_sizeof(xdrproc, req);</div><div class='ctx'> </div><div class='del'>-                if (!iobref) {</div><div class='del'>-                        iobref = iobref_new ();</div><div class='del'>-                        if (!iobref) {</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+        iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, xdr_size);</div><div class='add'>+        if (!iobuf) {</div><div class='add'>+            goto out;</div><div class='add'>+        };</div><div class='ctx'> </div><div class='del'>-                        new_iobref = 1;</div><div class='del'>-                }</div><div class='add'>+        if (!iobref) {</div><div class='add'>+            iobref = iobref_new();</div><div class='add'>+            if (!iobref) {</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                iobref_add (iobref, iobuf);</div><div class='add'>+            new_iobref = 1;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                iov.iov_base = iobuf-&gt;ptr;</div><div class='del'>-                iov.iov_len  = iobuf_size (iobuf);</div><div class='add'>+        iobref_add(iobref, iobuf);</div><div class='ctx'> </div><div class='del'>-                /* Create the xdr payload */</div><div class='del'>-                ret = xdr_serialize_generic (iov, req, xdrproc);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        iov.iov_base = iobuf-&gt;ptr;</div><div class='add'>+        iov.iov_len = iobuf_size(iobuf);</div><div class='ctx'> </div><div class='del'>-                iov.iov_len = ret;</div><div class='del'>-                count = 1;</div><div class='add'>+        /* Create the xdr payload */</div><div class='add'>+        ret = xdr_serialize_generic(iov, req, xdrproc);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = rpc_clnt_submit (rpc, prog, procnum, cbkfn, &amp;iov, count,</div><div class='del'>-                               payload, payloadcnt, iobref, frame, NULL,</div><div class='del'>-                               0, NULL, 0, NULL);</div><div class='add'>+        iov.iov_len = ret;</div><div class='add'>+        count = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (new_iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = rpc_clnt_submit(rpc, prog, procnum, cbkfn, &amp;iov, count, payload,</div><div class='add'>+                          payloadcnt, iobref, frame, NULL, 0, NULL, 0, NULL);</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    if (new_iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * Entry point to perform a remote procedure call</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-changelog_invoke_rpc (xlator_t *this, struct rpc_clnt *rpc,</div><div class='del'>-                      rpc_clnt_prog_t *prog, int procidx, void *arg)</div><div class='add'>+changelog_invoke_rpc(xlator_t *this, struct rpc_clnt *rpc,</div><div class='add'>+                     rpc_clnt_prog_t *prog, int procidx, void *arg)</div><div class='ctx'> {</div><div class='del'>-        int                   ret   = 0;</div><div class='del'>-        call_frame_t         *frame = NULL;</div><div class='del'>-        rpc_clnt_procedure_t *proc  = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this || !prog)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (!frame) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_CREATE_FRAME_FAILED,</div><div class='del'>-                        "failed to create frame");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    rpc_clnt_procedure_t *proc = NULL;</div><div class='ctx'> </div><div class='del'>-        proc = &amp;prog-&gt;proctable[procidx];</div><div class='del'>-        if (proc-&gt;fn)</div><div class='del'>-                ret = proc-&gt;fn (frame, this, arg);</div><div class='add'>+    if (!this || !prog)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        return ret;</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (!frame) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_CREATE_FRAME_FAILED,</div><div class='add'>+               "failed to create frame");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    proc = &amp;prog-&gt;proctable[procidx];</div><div class='add'>+    if (proc-&gt;fn)</div><div class='add'>+        ret = proc-&gt;fn(frame, this, arg);</div><div class='add'>+</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    return ret;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -189,170 +187,169 @@ changelog_invoke_rpc (xlator_t *this, struct rpc_clnt *rpc,</div><div class='ctx'> */</div><div class='ctx'> </div><div class='ctx'> struct iobuf *</div><div class='del'>-__changelog_rpc_serialize_reply (rpcsvc_request_t *req, void *arg,</div><div class='del'>-                                 struct iovec *outmsg, xdrproc_t xdrproc)</div><div class='add'>+__changelog_rpc_serialize_reply(rpcsvc_request_t *req, void *arg,</div><div class='add'>+                                struct iovec *outmsg, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        struct iobuf *iob      = NULL;</div><div class='del'>-        ssize_t       retlen   = 0;</div><div class='del'>-        ssize_t       rsp_size = 0;</div><div class='add'>+    struct iobuf *iob = NULL;</div><div class='add'>+    ssize_t retlen = 0;</div><div class='add'>+    ssize_t rsp_size = 0;</div><div class='ctx'> </div><div class='del'>-        rsp_size = xdr_sizeof (xdrproc, arg);</div><div class='del'>-        iob = iobuf_get2 (req-&gt;svc-&gt;ctx-&gt;iobuf_pool, rsp_size);</div><div class='del'>-        if (!iob)</div><div class='del'>-                goto error_return;</div><div class='add'>+    rsp_size = xdr_sizeof(xdrproc, arg);</div><div class='add'>+    iob = iobuf_get2(req-&gt;svc-&gt;ctx-&gt;iobuf_pool, rsp_size);</div><div class='add'>+    if (!iob)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        iobuf_to_iovec (iob, outmsg);</div><div class='add'>+    iobuf_to_iovec(iob, outmsg);</div><div class='ctx'> </div><div class='del'>-        retlen = xdr_serialize_generic (*outmsg, arg, xdrproc);</div><div class='del'>-        if (retlen == -1)</div><div class='del'>-                goto unref_iob;</div><div class='add'>+    retlen = xdr_serialize_generic(*outmsg, arg, xdrproc);</div><div class='add'>+    if (retlen == -1)</div><div class='add'>+        goto unref_iob;</div><div class='ctx'> </div><div class='del'>-        outmsg-&gt;iov_len = retlen;</div><div class='del'>-        return iob;</div><div class='add'>+    outmsg-&gt;iov_len = retlen;</div><div class='add'>+    return iob;</div><div class='ctx'> </div><div class='del'>- unref_iob:</div><div class='del'>-        iobuf_unref (iob);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+unref_iob:</div><div class='add'>+    iobuf_unref(iob);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_rpc_sumbit_reply (rpcsvc_request_t *req,</div><div class='del'>-                            void *arg, struct iovec *payload, int payloadcount,</div><div class='del'>-                            struct iobref *iobref, xdrproc_t xdrproc)</div><div class='add'>+changelog_rpc_sumbit_reply(rpcsvc_request_t *req, void *arg,</div><div class='add'>+                           struct iovec *payload, int payloadcount,</div><div class='add'>+                           struct iobref *iobref, xdrproc_t xdrproc)</div><div class='ctx'> {</div><div class='del'>-        int           ret        = -1;</div><div class='del'>-        struct iobuf *iob        = NULL;</div><div class='del'>-        struct iovec  iov        = {0,};</div><div class='del'>-        char          new_iobref = 0;</div><div class='del'>-</div><div class='del'>-        if (!req)</div><div class='del'>-                goto return_ret;</div><div class='del'>-</div><div class='del'>-        if (!iobref) {</div><div class='del'>-                iobref = iobref_new ();</div><div class='del'>-                if (!iobref)</div><div class='del'>-                        goto return_ret;</div><div class='del'>-                new_iobref = 1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iob = __changelog_rpc_serialize_reply (req, arg, &amp;iov, xdrproc);</div><div class='del'>-        if (!iob)</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_RPC_SUBMIT_REPLY_FAILED,</div><div class='del'>-                        "failed to serialize reply");</div><div class='del'>-        else</div><div class='del'>-                iobref_add (iobref, iob);</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_submit_generic (req, &amp;iov,</div><div class='del'>-                                     1, payload, payloadcount, iobref);</div><div class='del'>-</div><div class='del'>-        if (new_iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='del'>-        if (iob)</div><div class='del'>-                iobuf_unref (iob);</div><div class='del'>- return_ret:</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct iobuf *iob = NULL;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char new_iobref = 0;</div><div class='add'>+</div><div class='add'>+    if (!req)</div><div class='add'>+        goto return_ret;</div><div class='add'>+</div><div class='add'>+    if (!iobref) {</div><div class='add'>+        iobref = iobref_new();</div><div class='add'>+        if (!iobref)</div><div class='add'>+            goto return_ret;</div><div class='add'>+        new_iobref = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iob = __changelog_rpc_serialize_reply(req, arg, &amp;iov, xdrproc);</div><div class='add'>+    if (!iob)</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, CHANGELOG_MSG_RPC_SUBMIT_REPLY_FAILED,</div><div class='add'>+               "failed to serialize reply");</div><div class='add'>+    else</div><div class='add'>+        iobref_add(iobref, iob);</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_submit_generic(req, &amp;iov, 1, payload, payloadcount, iobref);</div><div class='add'>+</div><div class='add'>+    if (new_iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='add'>+    if (iob)</div><div class='add'>+        iobuf_unref(iob);</div><div class='add'>+return_ret:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_rpc_server_destroy (xlator_t *this, rpcsvc_t *rpc, char *sockfile,</div><div class='del'>-                              rpcsvc_notify_t fn, struct rpcsvc_program **progs)</div><div class='add'>+changelog_rpc_server_destroy(xlator_t *this, rpcsvc_t *rpc, char *sockfile,</div><div class='add'>+                             rpcsvc_notify_t fn, struct rpcsvc_program **progs)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_listener_t      *listener = NULL;</div><div class='del'>-        rpcsvc_listener_t      *next     = NULL;</div><div class='del'>-        struct rpcsvc_program  *prog     = NULL;</div><div class='del'>-</div><div class='del'>-        while (*progs) {</div><div class='del'>-                prog = *progs;</div><div class='del'>-                (void) rpcsvc_program_unregister (rpc, prog);</div><div class='del'>-                progs++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (listener, next, &amp;rpc-&gt;listeners, list) {</div><div class='del'>-                rpcsvc_listener_destroy (listener);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) rpcsvc_unregister_notify (rpc, fn, this);</div><div class='del'>-        sys_unlink (sockfile);</div><div class='del'>-        if (rpc-&gt;rxpool) {</div><div class='del'>-                mem_pool_destroy (rpc-&gt;rxpool);</div><div class='del'>-                rpc-&gt;rxpool = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO Avoid freeing rpc object in case of brick multiplex</div><div class='del'>-           after freeing rpc object svc-&gt;rpclock corrupted and it takes</div><div class='del'>-           more time to detach a brick</div><div class='del'>-        */</div><div class='del'>-        if (!this-&gt;cleanup_starting)</div><div class='del'>-                GF_FREE (rpc);</div><div class='add'>+    rpcsvc_listener_t *listener = NULL;</div><div class='add'>+    rpcsvc_listener_t *next = NULL;</div><div class='add'>+    struct rpcsvc_program *prog = NULL;</div><div class='add'>+</div><div class='add'>+    while (*progs) {</div><div class='add'>+        prog = *progs;</div><div class='add'>+        (void)rpcsvc_program_unregister(rpc, prog);</div><div class='add'>+        progs++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(listener, next, &amp;rpc-&gt;listeners, list)</div><div class='add'>+    {</div><div class='add'>+        rpcsvc_listener_destroy(listener);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)rpcsvc_unregister_notify(rpc, fn, this);</div><div class='add'>+    sys_unlink(sockfile);</div><div class='add'>+    if (rpc-&gt;rxpool) {</div><div class='add'>+        mem_pool_destroy(rpc-&gt;rxpool);</div><div class='add'>+        rpc-&gt;rxpool = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO Avoid freeing rpc object in case of brick multiplex</div><div class='add'>+       after freeing rpc object svc-&gt;rpclock corrupted and it takes</div><div class='add'>+       more time to detach a brick</div><div class='add'>+    */</div><div class='add'>+    if (!this-&gt;cleanup_starting)</div><div class='add'>+        GF_FREE(rpc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_t *</div><div class='del'>-changelog_rpc_server_init (xlator_t *this, char *sockfile, void *cbkdata,</div><div class='del'>-                           rpcsvc_notify_t fn, struct rpcsvc_program **progs)</div><div class='add'>+changelog_rpc_server_init(xlator_t *this, char *sockfile, void *cbkdata,</div><div class='add'>+                          rpcsvc_notify_t fn, struct rpcsvc_program **progs)</div><div class='ctx'> {</div><div class='del'>-        int                    ret     = 0;</div><div class='del'>-        rpcsvc_t              *rpc     = NULL;</div><div class='del'>-        dict_t                *options = NULL;</div><div class='del'>-        struct rpcsvc_program *prog    = NULL;</div><div class='del'>-</div><div class='del'>-        if (!cbkdata)</div><div class='del'>-                cbkdata = this;</div><div class='del'>-</div><div class='del'>-        options = dict_new ();</div><div class='del'>-        if (!options)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_transport_unix_options_build (&amp;options, sockfile);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-</div><div class='del'>-        rpc = rpcsvc_init (this, this-&gt;ctx, options, 8);</div><div class='del'>-        if (rpc == NULL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_RPC_START_ERROR,</div><div class='del'>-                        "failed to init rpc");</div><div class='del'>-                goto dealloc_dict;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_register_notify (rpc, fn, cbkdata);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    rpcsvc_t *rpc = NULL;</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    struct rpcsvc_program *prog = NULL;</div><div class='add'>+</div><div class='add'>+    if (!cbkdata)</div><div class='add'>+        cbkdata = this;</div><div class='add'>+</div><div class='add'>+    options = dict_new();</div><div class='add'>+    if (!options)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_transport_unix_options_build(&amp;options, sockfile);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+</div><div class='add'>+    rpc = rpcsvc_init(this, this-&gt;ctx, options, 8);</div><div class='add'>+    if (rpc == NULL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_RPC_START_ERROR,</div><div class='add'>+               "failed to init rpc");</div><div class='add'>+        goto dealloc_dict;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_register_notify(rpc, fn, cbkdata);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CHANGELOG_MSG_NOTIFY_REGISTER_FAILED,</div><div class='add'>+               "failed to register notify function");</div><div class='add'>+        goto dealloc_rpc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = rpcsvc_create_listeners(rpc, options, this-&gt;name);</div><div class='add'>+    if (ret != 1) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to create listeners");</div><div class='add'>+        goto dealloc_rpc;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (*progs) {</div><div class='add'>+        prog = *progs;</div><div class='add'>+        ret = rpcsvc_program_register(rpc, prog, _gf_false);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_NOTIFY_REGISTER_FAILED,</div><div class='del'>-                        "failed to register notify function");</div><div class='del'>-                goto dealloc_rpc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = rpcsvc_create_listeners (rpc, options, this-&gt;name);</div><div class='del'>-        if (ret != 1) {</div><div class='del'>-                gf_msg_debug (this-&gt;name,</div><div class='del'>-                              0, "failed to create listeners");</div><div class='del'>-                goto dealloc_rpc;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CHANGELOG_MSG_PROGRAM_NAME_REG_FAILED,</div><div class='add'>+                   "cannot register program "</div><div class='add'>+                   "(name: %s, prognum: %d, pogver: %d)",</div><div class='add'>+                   prog-&gt;progname, prog-&gt;prognum, prog-&gt;progver);</div><div class='add'>+            goto dealloc_rpc;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while (*progs) {</div><div class='del'>-                prog = *progs;</div><div class='del'>-                ret = rpcsvc_program_register (rpc, prog, _gf_false);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_MSG_PROGRAM_NAME_REG_FAILED,</div><div class='del'>-                                "cannot register program "</div><div class='del'>-                                "(name: %s, prognum: %d, pogver: %d)",</div><div class='del'>-                                prog-&gt;progname, prog-&gt;prognum, prog-&gt;progver);</div><div class='del'>-                        goto dealloc_rpc;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                progs++;</div><div class='del'>-        }</div><div class='add'>+        progs++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict_unref (options);</div><div class='del'>-        return rpc;</div><div class='add'>+    dict_unref(options);</div><div class='add'>+    return rpc;</div><div class='ctx'> </div><div class='del'>- dealloc_rpc:</div><div class='del'>-        GF_FREE (rpc);</div><div class='del'>- dealloc_dict:</div><div class='del'>-        dict_unref (options);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+dealloc_rpc:</div><div class='add'>+    GF_FREE(rpc);</div><div class='add'>+dealloc_dict:</div><div class='add'>+    dict_unref(options);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-rpc.c b/xlators/features/changelog/src/changelog-rpc.c<br/>index 9027fe10a2a..828f85e8e45 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-rpc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-rpc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-rpc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-rpc.c</a></div><div class='hunk'>@@ -16,256 +16,246 @@</div><div class='ctx'> struct rpcsvc_program *changelog_programs[];</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_cleanup_dispatchers (xlator_t *this,</div><div class='del'>-                               changelog_priv_t *priv, int count)</div><div class='add'>+changelog_cleanup_dispatchers(xlator_t *this, changelog_priv_t *priv, int count)</div><div class='ctx'> {</div><div class='del'>-        for (count--; count &gt;= 0; count--) {</div><div class='del'>-                (void) changelog_thread_cleanup</div><div class='del'>-                        (this, priv-&gt;ev_dispatcher[count]);</div><div class='del'>-                priv-&gt;ev_dispatcher[count] = 0;</div><div class='del'>-        }</div><div class='add'>+    for (count--; count &gt;= 0; count--) {</div><div class='add'>+        (void)changelog_thread_cleanup(this, priv-&gt;ev_dispatcher[count]);</div><div class='add'>+        priv-&gt;ev_dispatcher[count] = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_cleanup_rpc_threads (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_cleanup_rpc_threads(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        changelog_clnt_t *conn = NULL;</div><div class='del'>-</div><div class='del'>-        conn = &amp;priv-&gt;connections;</div><div class='del'>-        if (!conn)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        /** terminate RPC thread(s) */</div><div class='del'>-        ret = changelog_thread_cleanup (this, priv-&gt;connector);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='del'>-        priv-&gt;connector = 0;</div><div class='del'>-</div><div class='del'>-        /** terminate dispatcher thread(s) */</div><div class='del'>-        changelog_cleanup_dispatchers (this, priv, priv-&gt;nr_dispatchers);</div><div class='del'>-</div><div class='del'>-        /* TODO: what about pending and waiting connections? */</div><div class='del'>-        changelog_ev_cleanup_connections (this, conn);</div><div class='del'>-</div><div class='del'>-        /* destroy locks */</div><div class='del'>-        ret = pthread_mutex_destroy (&amp;conn-&gt;pending_lock);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='del'>-        ret = pthread_cond_destroy (&amp;conn-&gt;pending_cond);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='del'>-        ret = LOCK_DESTROY (&amp;conn-&gt;active_lock);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='del'>-        ret = LOCK_DESTROY (&amp;conn-&gt;wait_lock);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto error_return;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    changelog_clnt_t *conn = NULL;</div><div class='add'>+</div><div class='add'>+    conn = &amp;priv-&gt;connections;</div><div class='add'>+    if (!conn)</div><div class='ctx'>         return 0;</div><div class='ctx'> </div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    /** terminate RPC thread(s) */</div><div class='add'>+    ret = changelog_thread_cleanup(this, priv-&gt;connector);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='add'>+    priv-&gt;connector = 0;</div><div class='add'>+</div><div class='add'>+    /** terminate dispatcher thread(s) */</div><div class='add'>+    changelog_cleanup_dispatchers(this, priv, priv-&gt;nr_dispatchers);</div><div class='add'>+</div><div class='add'>+    /* TODO: what about pending and waiting connections? */</div><div class='add'>+    changelog_ev_cleanup_connections(this, conn);</div><div class='add'>+</div><div class='add'>+    /* destroy locks */</div><div class='add'>+    ret = pthread_mutex_destroy(&amp;conn-&gt;pending_lock);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='add'>+    ret = pthread_cond_destroy(&amp;conn-&gt;pending_cond);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='add'>+    ret = LOCK_DESTROY(&amp;conn-&gt;active_lock);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='add'>+    ret = LOCK_DESTROY(&amp;conn-&gt;wait_lock);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto error_return;</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-changelog_init_rpc_threads (xlator_t *this, changelog_priv_t *priv,</div><div class='del'>-                            rbuf_t *rbuf, int nr_dispatchers)</div><div class='add'>+changelog_init_rpc_threads(xlator_t *this, changelog_priv_t *priv, rbuf_t *rbuf,</div><div class='add'>+                           int nr_dispatchers)</div><div class='ctx'> {</div><div class='del'>-        int               j    = 0;</div><div class='del'>-        int               ret  = 0;</div><div class='del'>-        changelog_clnt_t *conn = NULL;</div><div class='del'>-        char              thread_name[GF_THREAD_NAMEMAX] = {0,};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        conn = &amp;priv-&gt;connections;</div><div class='del'>-</div><div class='del'>-        conn-&gt;this = this;</div><div class='del'>-        conn-&gt;rbuf = rbuf;</div><div class='del'>-        conn-&gt;sequence = 1; /* start with sequence number one */</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;conn-&gt;pending);</div><div class='del'>-        INIT_LIST_HEAD (&amp;conn-&gt;active);</div><div class='del'>-        INIT_LIST_HEAD (&amp;conn-&gt;waitq);</div><div class='del'>-</div><div class='del'>-        ret = pthread_mutex_init (&amp;conn-&gt;pending_lock, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto error_return;</div><div class='del'>-        ret = pthread_cond_init (&amp;conn-&gt;pending_cond, NULL);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_pending_lock;</div><div class='del'>-</div><div class='del'>-        ret = LOCK_INIT (&amp;conn-&gt;active_lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_pending_cond;</div><div class='del'>-        ret = LOCK_INIT (&amp;conn-&gt;wait_lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_active_lock;</div><div class='del'>-</div><div class='del'>-        /* spawn reverse connection thread */</div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;connector,</div><div class='del'>-                                NULL, changelog_ev_connector, conn, "clogecon");</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_wait_lock;</div><div class='del'>-</div><div class='del'>-        /* spawn dispatcher thread(s) */</div><div class='del'>-        priv-&gt;ev_dispatcher = GF_CALLOC (nr_dispatchers, sizeof(pthread_t),</div><div class='del'>-                                         gf_changelog_mt_ev_dispatcher_t);</div><div class='del'>-        if (!priv-&gt;ev_dispatcher)</div><div class='del'>-                goto cleanup_connector;</div><div class='del'>-</div><div class='del'>-        /* spawn dispatcher threads */</div><div class='del'>-        for (; j &lt; nr_dispatchers; j++) {</div><div class='del'>-                snprintf (thread_name, sizeof(thread_name),</div><div class='del'>-                          "clogd%03hx", (j &amp; 0x3ff));</div><div class='del'>-                ret = gf_thread_create (&amp;priv-&gt;ev_dispatcher[j],</div><div class='del'>-                                        NULL, changelog_ev_dispatch, conn,</div><div class='del'>-                                        thread_name);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        changelog_cleanup_dispatchers (this, priv, j);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    int j = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    changelog_clnt_t *conn = NULL;</div><div class='add'>+    char thread_name[GF_THREAD_NAMEMAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    conn = &amp;priv-&gt;connections;</div><div class='add'>+</div><div class='add'>+    conn-&gt;this = this;</div><div class='add'>+    conn-&gt;rbuf = rbuf;</div><div class='add'>+    conn-&gt;sequence = 1; /* start with sequence number one */</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;conn-&gt;pending);</div><div class='add'>+    INIT_LIST_HEAD(&amp;conn-&gt;active);</div><div class='add'>+    INIT_LIST_HEAD(&amp;conn-&gt;waitq);</div><div class='add'>+</div><div class='add'>+    ret = pthread_mutex_init(&amp;conn-&gt;pending_lock, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto error_return;</div><div class='add'>+    ret = pthread_cond_init(&amp;conn-&gt;pending_cond, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_pending_lock;</div><div class='add'>+</div><div class='add'>+    ret = LOCK_INIT(&amp;conn-&gt;active_lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_pending_cond;</div><div class='add'>+    ret = LOCK_INIT(&amp;conn-&gt;wait_lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_active_lock;</div><div class='add'>+</div><div class='add'>+    /* spawn reverse connection thread */</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;connector, NULL, changelog_ev_connector, conn,</div><div class='add'>+                           "clogecon");</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_wait_lock;</div><div class='add'>+</div><div class='add'>+    /* spawn dispatcher thread(s) */</div><div class='add'>+    priv-&gt;ev_dispatcher = GF_CALLOC(nr_dispatchers, sizeof(pthread_t),</div><div class='add'>+                                    gf_changelog_mt_ev_dispatcher_t);</div><div class='add'>+    if (!priv-&gt;ev_dispatcher)</div><div class='add'>+        goto cleanup_connector;</div><div class='add'>+</div><div class='add'>+    /* spawn dispatcher threads */</div><div class='add'>+    for (; j &lt; nr_dispatchers; j++) {</div><div class='add'>+        snprintf(thread_name, sizeof(thread_name), "clogd%03hx", (j &amp; 0x3ff));</div><div class='add'>+        ret = gf_thread_create(&amp;priv-&gt;ev_dispatcher[j], NULL,</div><div class='add'>+                               changelog_ev_dispatch, conn, thread_name);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            changelog_cleanup_dispatchers(this, priv, j);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto cleanup_connector;</div><div class='del'>-</div><div class='del'>-        priv-&gt;nr_dispatchers = nr_dispatchers;</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- cleanup_connector:</div><div class='del'>-        (void) pthread_cancel (priv-&gt;connector);</div><div class='del'>- cleanup_wait_lock:</div><div class='del'>-        LOCK_DESTROY (&amp;conn-&gt;wait_lock);</div><div class='del'>- cleanup_active_lock:</div><div class='del'>-        LOCK_DESTROY (&amp;conn-&gt;active_lock);</div><div class='del'>- cleanup_pending_cond:</div><div class='del'>-        (void) pthread_cond_destroy (&amp;conn-&gt;pending_cond);</div><div class='del'>- cleanup_pending_lock:</div><div class='del'>-        (void) pthread_mutex_destroy (&amp;conn-&gt;pending_lock);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto cleanup_connector;</div><div class='add'>+</div><div class='add'>+    priv-&gt;nr_dispatchers = nr_dispatchers;</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_connector:</div><div class='add'>+    (void)pthread_cancel(priv-&gt;connector);</div><div class='add'>+cleanup_wait_lock:</div><div class='add'>+    LOCK_DESTROY(&amp;conn-&gt;wait_lock);</div><div class='add'>+cleanup_active_lock:</div><div class='add'>+    LOCK_DESTROY(&amp;conn-&gt;active_lock);</div><div class='add'>+cleanup_pending_cond:</div><div class='add'>+    (void)pthread_cond_destroy(&amp;conn-&gt;pending_cond);</div><div class='add'>+cleanup_pending_lock:</div><div class='add'>+    (void)pthread_mutex_destroy(&amp;conn-&gt;pending_lock);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_rpcsvc_notify (rpcsvc_t *rpc,</div><div class='del'>-                         void *xl, rpcsvc_event_t event, void *data)</div><div class='add'>+changelog_rpcsvc_notify(rpcsvc_t *rpc, void *xl, rpcsvc_event_t event,</div><div class='add'>+                        void *data)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_destroy_rpc_listner (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_destroy_rpc_listner(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        char sockfile[UNIX_PATH_MAX] = {0,};</div><div class='del'>-        changelog_clnt_t     *c_clnt  = &amp;priv-&gt;connections;</div><div class='del'>-        changelog_rpc_clnt_t *crpc = NULL;</div><div class='del'>-        int                   nofconn = 0;</div><div class='del'>-</div><div class='del'>-        /* sockfile path could have been saved to avoid this */</div><div class='del'>-        CHANGELOG_MAKE_SOCKET_PATH (priv-&gt;changelog_brick,</div><div class='del'>-                                    sockfile, UNIX_PATH_MAX);</div><div class='del'>-        changelog_rpc_server_destroy (this,</div><div class='del'>-                                      priv-&gt;rpc, sockfile,</div><div class='del'>-                                      changelog_rpcsvc_notify,</div><div class='del'>-                                      changelog_programs);</div><div class='del'>-</div><div class='del'>-        /* TODO Below approach is not perfect to wait for cleanup</div><div class='del'>-           all active connections without this code brick process</div><div class='del'>-           can be crash in case of brick multiplexing if any in-progress</div><div class='del'>-           request process on rpc by changelog xlator after</div><div class='del'>-           cleanup resources</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        if (c_clnt) {</div><div class='del'>-                do {</div><div class='del'>-                        nofconn = 0;</div><div class='del'>-                        LOCK (&amp;c_clnt-&gt;active_lock);</div><div class='del'>-                                list_for_each_entry (crpc, &amp;c_clnt-&gt;active, list) {</div><div class='del'>-                                          nofconn++;</div><div class='del'>-                                }</div><div class='del'>-                        UNLOCK (&amp;c_clnt-&gt;active_lock);</div><div class='del'>-                        LOCK (&amp;c_clnt-&gt;wait_lock);</div><div class='del'>-                                list_for_each_entry (crpc, &amp;c_clnt-&gt;waitq, list) {</div><div class='del'>-                                          nofconn++;</div><div class='del'>-                                }</div><div class='del'>-                        UNLOCK (&amp;c_clnt-&gt;wait_lock);</div><div class='del'>-                        pthread_mutex_lock (&amp;c_clnt-&gt;pending_lock);</div><div class='del'>-                                list_for_each_entry (crpc, &amp;c_clnt-&gt;pending, list) {</div><div class='del'>-                                          nofconn++;</div><div class='del'>-                                }</div><div class='del'>-                        pthread_mutex_unlock (&amp;c_clnt-&gt;pending_lock);</div><div class='del'>-</div><div class='del'>-                } while (nofconn);  /* Wait for all connection cleanup */</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        (void) changelog_cleanup_rpc_threads (this, priv);</div><div class='add'>+    char sockfile[UNIX_PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_clnt_t *c_clnt = &amp;priv-&gt;connections;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+    int nofconn = 0;</div><div class='add'>+</div><div class='add'>+    /* sockfile path could have been saved to avoid this */</div><div class='add'>+    CHANGELOG_MAKE_SOCKET_PATH(priv-&gt;changelog_brick, sockfile, UNIX_PATH_MAX);</div><div class='add'>+    changelog_rpc_server_destroy(this, priv-&gt;rpc, sockfile,</div><div class='add'>+                                 changelog_rpcsvc_notify, changelog_programs);</div><div class='add'>+</div><div class='add'>+    /* TODO Below approach is not perfect to wait for cleanup</div><div class='add'>+       all active connections without this code brick process</div><div class='add'>+       can be crash in case of brick multiplexing if any in-progress</div><div class='add'>+       request process on rpc by changelog xlator after</div><div class='add'>+       cleanup resources</div><div class='add'>+    */</div><div class='add'>+</div><div class='add'>+    if (c_clnt) {</div><div class='add'>+        do {</div><div class='add'>+            nofconn = 0;</div><div class='add'>+            LOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+            list_for_each_entry(crpc, &amp;c_clnt-&gt;active, list) { nofconn++; }</div><div class='add'>+            UNLOCK(&amp;c_clnt-&gt;active_lock);</div><div class='add'>+            LOCK(&amp;c_clnt-&gt;wait_lock);</div><div class='add'>+            list_for_each_entry(crpc, &amp;c_clnt-&gt;waitq, list) { nofconn++; }</div><div class='add'>+            UNLOCK(&amp;c_clnt-&gt;wait_lock);</div><div class='add'>+            pthread_mutex_lock(&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+            list_for_each_entry(crpc, &amp;c_clnt-&gt;pending, list) { nofconn++; }</div><div class='add'>+            pthread_mutex_unlock(&amp;c_clnt-&gt;pending_lock);</div><div class='add'>+</div><div class='add'>+        } while (nofconn); /* Wait for all connection cleanup */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    (void)changelog_cleanup_rpc_threads(this, priv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> rpcsvc_t *</div><div class='del'>-changelog_init_rpc_listener (xlator_t *this, changelog_priv_t *priv,</div><div class='add'>+changelog_init_rpc_listener(xlator_t *this, changelog_priv_t *priv,</div><div class='ctx'>                             rbuf_t *rbuf, int nr_dispatchers)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        char sockfile[UNIX_PATH_MAX] = {0,};</div><div class='del'>-        rpcsvc_t *svcp;</div><div class='del'>-</div><div class='del'>-        ret = changelog_init_rpc_threads (this, priv, rbuf, nr_dispatchers);</div><div class='del'>-        if (ret)</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_MAKE_SOCKET_PATH (priv-&gt;changelog_brick,</div><div class='del'>-                                    sockfile, UNIX_PATH_MAX);</div><div class='del'>-        (void) sys_unlink (sockfile);</div><div class='del'>-        svcp = changelog_rpc_server_init (this, sockfile, NULL,</div><div class='del'>-                                          changelog_rpcsvc_notify,</div><div class='del'>-                                          changelog_programs);</div><div class='del'>-        return svcp;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char sockfile[UNIX_PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    rpcsvc_t *svcp;</div><div class='add'>+</div><div class='add'>+    ret = changelog_init_rpc_threads(this, priv, rbuf, nr_dispatchers);</div><div class='add'>+    if (ret)</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_MAKE_SOCKET_PATH(priv-&gt;changelog_brick, sockfile, UNIX_PATH_MAX);</div><div class='add'>+    (void)sys_unlink(sockfile);</div><div class='add'>+    svcp = changelog_rpc_server_init(</div><div class='add'>+        this, sockfile, NULL, changelog_rpcsvc_notify, changelog_programs);</div><div class='add'>+    return svcp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-changelog_rpc_clnt_cleanup (changelog_rpc_clnt_t *crpc)</div><div class='add'>+changelog_rpc_clnt_cleanup(changelog_rpc_clnt_t *crpc)</div><div class='ctx'> {</div><div class='del'>-        if (!crpc)</div><div class='del'>-                return;</div><div class='del'>-        crpc-&gt;c_clnt = NULL;</div><div class='del'>-        LOCK_DESTROY (&amp;crpc-&gt;lock);</div><div class='del'>-        GF_FREE (crpc);</div><div class='add'>+    if (!crpc)</div><div class='add'>+        return;</div><div class='add'>+    crpc-&gt;c_clnt = NULL;</div><div class='add'>+    LOCK_DESTROY(&amp;crpc-&gt;lock);</div><div class='add'>+    GF_FREE(crpc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static changelog_rpc_clnt_t *</div><div class='del'>-changelog_rpc_clnt_init (xlator_t *this,</div><div class='del'>-                         changelog_probe_req *rpc_req, changelog_clnt_t *c_clnt)</div><div class='add'>+changelog_rpc_clnt_init(xlator_t *this, changelog_probe_req *rpc_req,</div><div class='add'>+                        changelog_clnt_t *c_clnt)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        changelog_rpc_clnt_t *crpc = NULL;</div><div class='del'>-</div><div class='del'>-        crpc = GF_CALLOC (1, sizeof (*crpc), gf_changelog_mt_rpc_clnt_t);</div><div class='del'>-        if (!crpc)</div><div class='del'>-                goto error_return;</div><div class='del'>-        INIT_LIST_HEAD (&amp;crpc-&gt;list);</div><div class='del'>-</div><div class='del'>-        /* Take a ref, the last unref will be on RPC_CLNT_DESTROY</div><div class='del'>-         * which comes as a result of last rpc_clnt_unref.</div><div class='del'>-         */</div><div class='del'>-        GF_ATOMIC_INIT (crpc-&gt;ref, 1);</div><div class='del'>-        changelog_set_disconnect_flag (crpc, _gf_false);</div><div class='del'>-</div><div class='del'>-        crpc-&gt;filter = rpc_req-&gt;filter;</div><div class='del'>-        (void) memcpy (crpc-&gt;sock, rpc_req-&gt;sock, strlen (rpc_req-&gt;sock));</div><div class='del'>-</div><div class='del'>-        crpc-&gt;this = this;</div><div class='del'>-        crpc-&gt;c_clnt = c_clnt;</div><div class='del'>-        crpc-&gt;cleanup = changelog_rpc_clnt_cleanup;</div><div class='del'>-</div><div class='del'>-        ret = LOCK_INIT (&amp;crpc-&gt;lock);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto dealloc_crpc;</div><div class='del'>-        return crpc;</div><div class='del'>-</div><div class='del'>- dealloc_crpc:</div><div class='del'>-        GF_FREE (crpc);</div><div class='del'>- error_return:</div><div class='del'>-        return NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+</div><div class='add'>+    crpc = GF_CALLOC(1, sizeof(*crpc), gf_changelog_mt_rpc_clnt_t);</div><div class='add'>+    if (!crpc)</div><div class='add'>+        goto error_return;</div><div class='add'>+    INIT_LIST_HEAD(&amp;crpc-&gt;list);</div><div class='add'>+</div><div class='add'>+    /* Take a ref, the last unref will be on RPC_CLNT_DESTROY</div><div class='add'>+     * which comes as a result of last rpc_clnt_unref.</div><div class='add'>+     */</div><div class='add'>+    GF_ATOMIC_INIT(crpc-&gt;ref, 1);</div><div class='add'>+    changelog_set_disconnect_flag(crpc, _gf_false);</div><div class='add'>+</div><div class='add'>+    crpc-&gt;filter = rpc_req-&gt;filter;</div><div class='add'>+    (void)memcpy(crpc-&gt;sock, rpc_req-&gt;sock, strlen(rpc_req-&gt;sock));</div><div class='add'>+</div><div class='add'>+    crpc-&gt;this = this;</div><div class='add'>+    crpc-&gt;c_clnt = c_clnt;</div><div class='add'>+    crpc-&gt;cleanup = changelog_rpc_clnt_cleanup;</div><div class='add'>+</div><div class='add'>+    ret = LOCK_INIT(&amp;crpc-&gt;lock);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto dealloc_crpc;</div><div class='add'>+    return crpc;</div><div class='add'>+</div><div class='add'>+dealloc_crpc:</div><div class='add'>+    GF_FREE(crpc);</div><div class='add'>+error_return:</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -279,58 +269,59 @@ changelog_rpc_clnt_init (xlator_t *this,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_handle_probe (rpcsvc_request_t *req)</div><div class='add'>+changelog_handle_probe(rpcsvc_request_t *req)</div><div class='ctx'> {</div><div class='del'>-        int                   ret     = 0;</div><div class='del'>-        xlator_t             *this    = NULL;</div><div class='del'>-        rpcsvc_t             *svc     = NULL;</div><div class='del'>-        changelog_priv_t     *priv    = NULL;</div><div class='del'>-        changelog_clnt_t     *c_clnt  = NULL;</div><div class='del'>-        changelog_rpc_clnt_t *crpc    = NULL;</div><div class='del'>-</div><div class='del'>-        changelog_probe_req   rpc_req = {0,};</div><div class='del'>-        changelog_probe_rsp   rpc_rsp = {0,};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        this = req-&gt;trans-&gt;xl;</div><div class='del'>-        if (this-&gt;cleanup_starting) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_DEBUG, 0,</div><div class='del'>-                        CHANGELOG_MSG_HANDLE_PROBE_ERROR,</div><div class='del'>-                        "cleanup_starting flag is already set for xl");</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = xdr_to_generic (req-&gt;msg[0],</div><div class='del'>-                              &amp;rpc_req, (xdrproc_t)xdr_changelog_probe_req);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg ("", GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_HANDLE_PROBE_ERROR,</div><div class='del'>-                        "xdr decoding error");</div><div class='del'>-                req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='del'>-                goto handle_xdr_error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* -&gt;xl hidden in rpcsvc */</div><div class='del'>-        svc    = rpcsvc_request_service (req);</div><div class='del'>-        this   = svc-&gt;xl;</div><div class='del'>-        priv   = this-&gt;private;</div><div class='del'>-        c_clnt = &amp;priv-&gt;connections;</div><div class='del'>-</div><div class='del'>-        crpc = changelog_rpc_clnt_init (this, &amp;rpc_req, c_clnt);</div><div class='del'>-        if (!crpc)</div><div class='del'>-                goto handle_xdr_error;</div><div class='del'>-</div><div class='del'>-        changelog_ev_queue_connection (c_clnt, crpc);</div><div class='del'>-        rpc_rsp.op_ret = 0;</div><div class='del'>-</div><div class='del'>-        goto submit_rpc;</div><div class='del'>-</div><div class='del'>- handle_xdr_error:</div><div class='del'>-        rpc_rsp.op_ret = -1;</div><div class='del'>- submit_rpc:</div><div class='del'>-        (void) changelog_rpc_sumbit_reply (req, &amp;rpc_rsp, NULL, 0, NULL,</div><div class='del'>-                                           (xdrproc_t)xdr_changelog_probe_rsp);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    rpcsvc_t *svc = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_clnt_t *c_clnt = NULL;</div><div class='add'>+    changelog_rpc_clnt_t *crpc = NULL;</div><div class='add'>+</div><div class='add'>+    changelog_probe_req rpc_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_probe_rsp rpc_rsp = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    this = req-&gt;trans-&gt;xl;</div><div class='add'>+    if (this-&gt;cleanup_starting) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_DEBUG, 0, CHANGELOG_MSG_HANDLE_PROBE_ERROR,</div><div class='add'>+               "cleanup_starting flag is already set for xl");</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = xdr_to_generic(req-&gt;msg[0], &amp;rpc_req,</div><div class='add'>+                         (xdrproc_t)xdr_changelog_probe_req);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg("", GF_LOG_ERROR, 0, CHANGELOG_MSG_HANDLE_PROBE_ERROR,</div><div class='add'>+               "xdr decoding error");</div><div class='add'>+        req-&gt;rpc_err = GARBAGE_ARGS;</div><div class='add'>+        goto handle_xdr_error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* -&gt;xl hidden in rpcsvc */</div><div class='add'>+    svc = rpcsvc_request_service(req);</div><div class='add'>+    this = svc-&gt;xl;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    c_clnt = &amp;priv-&gt;connections;</div><div class='add'>+</div><div class='add'>+    crpc = changelog_rpc_clnt_init(this, &amp;rpc_req, c_clnt);</div><div class='add'>+    if (!crpc)</div><div class='add'>+        goto handle_xdr_error;</div><div class='add'>+</div><div class='add'>+    changelog_ev_queue_connection(c_clnt, crpc);</div><div class='add'>+    rpc_rsp.op_ret = 0;</div><div class='add'>+</div><div class='add'>+    goto submit_rpc;</div><div class='add'>+</div><div class='add'>+handle_xdr_error:</div><div class='add'>+    rpc_rsp.op_ret = -1;</div><div class='add'>+submit_rpc:</div><div class='add'>+    (void)changelog_rpc_sumbit_reply(req, &amp;rpc_rsp, NULL, 0, NULL,</div><div class='add'>+                                     (xdrproc_t)xdr_changelog_probe_rsp);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -338,22 +329,21 @@ changelog_handle_probe (rpcsvc_request_t *req)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> rpcsvc_actor_t changelog_svc_actors[CHANGELOG_RPC_PROC_MAX] = {</div><div class='del'>-        [CHANGELOG_RPC_PROBE_FILTER] = {</div><div class='del'>-                "CHANGELOG PROBE FILTER", CHANGELOG_RPC_PROBE_FILTER,</div><div class='del'>-                changelog_handle_probe, NULL, 0, DRC_NA</div><div class='del'>-        },</div><div class='add'>+    [CHANGELOG_RPC_PROBE_FILTER] = {"CHANGELOG PROBE FILTER",</div><div class='add'>+                                    CHANGELOG_RPC_PROBE_FILTER,</div><div class='add'>+                                    changelog_handle_probe, NULL, 0, DRC_NA},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpcsvc_program changelog_svc_prog = {</div><div class='del'>-        .progname  = CHANGELOG_RPC_PROGNAME,</div><div class='del'>-        .prognum   = CHANGELOG_RPC_PROGNUM,</div><div class='del'>-        .progver   = CHANGELOG_RPC_PROGVER,</div><div class='del'>-        .numactors = CHANGELOG_RPC_PROC_MAX,</div><div class='del'>-        .actors    = changelog_svc_actors,</div><div class='del'>-        .synctask  = _gf_true,</div><div class='add'>+    .progname = CHANGELOG_RPC_PROGNAME,</div><div class='add'>+    .prognum = CHANGELOG_RPC_PROGNUM,</div><div class='add'>+    .progver = CHANGELOG_RPC_PROGVER,</div><div class='add'>+    .numactors = CHANGELOG_RPC_PROC_MAX,</div><div class='add'>+    .actors = changelog_svc_actors,</div><div class='add'>+    .synctask = _gf_true,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct rpcsvc_program *changelog_programs[] = {</div><div class='del'>-        &amp;changelog_svc_prog,</div><div class='del'>-        NULL,</div><div class='add'>+    &amp;changelog_svc_prog,</div><div class='add'>+    NULL,</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog-rt.c b/xlators/features/changelog/src/changelog-rt.c<br/>index c262820c64c..968c76b8b20 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-rt.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog-rt.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog-rt.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog-rt.c</a></div><div class='hunk'>@@ -16,52 +16,51 @@</div><div class='ctx'> #include "changelog-mem-types.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_rt_init (xlator_t *this, changelog_dispatcher_t *cd)</div><div class='add'>+changelog_rt_init(xlator_t *this, changelog_dispatcher_t *cd)</div><div class='ctx'> {</div><div class='del'>-        changelog_rt_t *crt = NULL;</div><div class='add'>+    changelog_rt_t *crt = NULL;</div><div class='ctx'> </div><div class='del'>-        crt = GF_CALLOC (1, sizeof (*crt),</div><div class='del'>-                         gf_changelog_mt_rt_t);</div><div class='del'>-        if (!crt)</div><div class='del'>-                return -1;</div><div class='add'>+    crt = GF_CALLOC(1, sizeof(*crt), gf_changelog_mt_rt_t);</div><div class='add'>+    if (!crt)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;crt-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;crt-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        cd-&gt;cd_data = crt;</div><div class='del'>-        cd-&gt;dispatchfn = &amp;changelog_rt_enqueue;</div><div class='add'>+    cd-&gt;cd_data = crt;</div><div class='add'>+    cd-&gt;dispatchfn = &amp;changelog_rt_enqueue;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_rt_fini (xlator_t *this, changelog_dispatcher_t *cd)</div><div class='add'>+changelog_rt_fini(xlator_t *this, changelog_dispatcher_t *cd)</div><div class='ctx'> {</div><div class='del'>-        changelog_rt_t *crt = NULL;</div><div class='add'>+    changelog_rt_t *crt = NULL;</div><div class='ctx'> </div><div class='del'>-        crt = cd-&gt;cd_data;</div><div class='add'>+    crt = cd-&gt;cd_data;</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;crt-&gt;lock);</div><div class='del'>-        GF_FREE (crt);</div><div class='add'>+    LOCK_DESTROY(&amp;crt-&gt;lock);</div><div class='add'>+    GF_FREE(crt);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_rt_enqueue (xlator_t *this, changelog_priv_t *priv, void *cbatch,</div><div class='del'>-                      changelog_log_data_t *cld_0, changelog_log_data_t *cld_1)</div><div class='add'>+changelog_rt_enqueue(xlator_t *this, changelog_priv_t *priv, void *cbatch,</div><div class='add'>+                     changelog_log_data_t *cld_0, changelog_log_data_t *cld_1)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        changelog_rt_t *crt = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    changelog_rt_t *crt = NULL;</div><div class='ctx'> </div><div class='del'>-        crt = (changelog_rt_t *) cbatch;</div><div class='add'>+    crt = (changelog_rt_t *)cbatch;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;crt-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = changelog_handle_change (this, priv, cld_0);</div><div class='del'>-                if (!ret &amp;&amp; cld_1)</div><div class='del'>-                        ret = changelog_handle_change (this, priv, cld_1);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;crt-&gt;lock);</div><div class='add'>+    LOCK(&amp;crt-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = changelog_handle_change(this, priv, cld_0);</div><div class='add'>+        if (!ret &amp;&amp; cld_1)</div><div class='add'>+            ret = changelog_handle_change(this, priv, cld_1);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;crt-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c<br/>index ab42ad869c0..35a523316ed 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changelog/src/changelog.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changelog/src/changelog.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changelog/src/changelog.c</a></div><div class='hunk'>@@ -26,13 +26,12 @@</div><div class='ctx'> #include "changelog-rpc.h"</div><div class='ctx'> #include "errno.h"</div><div class='ctx'> </div><div class='del'>-static struct changelog_bootstrap</div><div class='del'>-cb_bootstrap[] = {</div><div class='del'>-        {</div><div class='del'>-                .mode = CHANGELOG_MODE_RT,</div><div class='del'>-                .ctor = changelog_rt_init,</div><div class='del'>-                .dtor = changelog_rt_fini,</div><div class='del'>-        },</div><div class='add'>+static struct changelog_bootstrap cb_bootstrap[] = {</div><div class='add'>+    {</div><div class='add'>+        .mode = CHANGELOG_MODE_RT,</div><div class='add'>+        .ctor = changelog_rt_init,</div><div class='add'>+        .dtor = changelog_rt_fini,</div><div class='add'>+    },</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* Entry operations - TYPE III */</div><div class='hunk'>@@ -46,1111 +45,1060 @@ cb_bootstrap[] = {</div><div class='ctx'> /* rmdir */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (rmdir, frame, op_ret, op_errno,</div><div class='del'>-                                preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(rmdir, frame, op_ret, op_errno, preparent,</div><div class='add'>+                           postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_rmdir_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        loc_t *loc, int xflags, dict_t *xdata)</div><div class='add'>+changelog_rmdir_resume(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                       int xflags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeue rmdir");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt (this, priv,</div><div class='del'>-                      frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_rmdir_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, xflags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeue rmdir");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_rmdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, int xflags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        size_t                  xtra_len                = 0;</div><div class='del'>-        changelog_priv_t       *priv                    = NULL;</div><div class='del'>-        changelog_opt_t        *co                      = NULL;</div><div class='del'>-        call_stub_t            *stub                    = NULL;</div><div class='del'>-        struct list_head        queue                   = {0, };</div><div class='del'>-        gf_boolean_t            barrier_enabled         = _gf_false;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local,</div><div class='del'>-                                NULL, loc-&gt;inode-&gt;gfid, 2);</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-</div><div class='del'>-        co++;</div><div class='del'>-        if (priv-&gt;capture_del_path) {</div><div class='del'>-                CHANGELOG_FILL_ENTRY_DIR_PATH (co, loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                                               del_entry_fn, del_entry_free_fn,</div><div class='del'>-                                              xtra_len, wind, _gf_true);</div><div class='add'>+changelog_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, loc-&gt;inode-&gt;gfid, 2);</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+</div><div class='add'>+    co++;</div><div class='add'>+    if (priv-&gt;capture_del_path) {</div><div class='add'>+        CHANGELOG_FILL_ENTRY_DIR_PATH(co, loc-&gt;pargfid, loc-&gt;name, del_entry_fn,</div><div class='add'>+                                      del_entry_free_fn, xtra_len, wind,</div><div class='add'>+                                      _gf_true);</div><div class='add'>+    } else {</div><div class='add'>+        CHANGELOG_FILL_ENTRY_DIR_PATH(co, loc-&gt;pargfid, loc-&gt;name, del_entry_fn,</div><div class='add'>+                                      del_entry_free_fn, xtra_len, wind,</div><div class='add'>+                                      _gf_false);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 2);</div><div class='add'>+</div><div class='add'>+    /* changelog barrier */</div><div class='add'>+    /* Color assignment and increment of fop_cnt for rmdir/unlink/rename</div><div class='add'>+     * should be made with in priv lock if changelog barrier is not enabled.</div><div class='add'>+     * Because if counter is not incremented yet, draining wakes up and</div><div class='add'>+     * publishes the changelog but later these fops might hit the disk and</div><div class='add'>+     * present in snapped volume but where as the intention is these fops</div><div class='add'>+     * should not be present in snapped volume.</div><div class='add'>+     */</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_rmdir_stub(frame, changelog_rmdir_resume, loc, xflags,</div><div class='add'>+                                  xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='ctx'>         } else {</div><div class='del'>-                CHANGELOG_FILL_ENTRY_DIR_PATH (co, loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                                               del_entry_fn, del_entry_free_fn,</div><div class='del'>-                                              xtra_len, wind, _gf_false);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 2);</div><div class='del'>-</div><div class='del'>-/* changelog barrier */</div><div class='del'>-        /* Color assignment and increment of fop_cnt for rmdir/unlink/rename</div><div class='del'>-         * should be made with in priv lock if changelog barrier is not enabled.</div><div class='del'>-         * Because if counter is not incremented yet, draining wakes up and</div><div class='del'>-         * publishes the changelog but later these fops might hit the disk and</div><div class='del'>-         * present in snapped volume but where as the intention is these fops</div><div class='del'>-         * should not be present in snapped volume.</div><div class='del'>-         */</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_rmdir_stub (frame, changelog_rmdir_resume,</div><div class='del'>-                                                loc, xflags, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueue rmdir");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=rmdir",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/* changelog barrier */</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_rmdir_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, xflags, xdata);</div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueue rmdir");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=rmdir", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* changelog barrier */</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* unlink */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                      struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (unlink, frame, op_ret, op_errno,</div><div class='del'>-                                preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(unlink, frame, op_ret, op_errno, preparent,</div><div class='add'>+                           postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_unlink_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         loc_t *loc, int xflags, dict_t *xdata)</div><div class='add'>+changelog_unlink_resume(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                        int xflags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeue unlink");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeue unlink");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_unlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, int xflags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        size_t                       xtra_len        = 0;</div><div class='del'>-        changelog_priv_t             *priv           = NULL;</div><div class='del'>-        changelog_opt_t              *co             = NULL;</div><div class='del'>-        call_stub_t                  *stub           = NULL;</div><div class='del'>-        struct list_head             queue           = {0, };</div><div class='del'>-        gf_boolean_t                 barrier_enabled = _gf_false;</div><div class='del'>-        dht_changelog_rename_info_t  *info           = NULL;</div><div class='del'>-        int                          ret             = 0;</div><div class='del'>-        char                        *old_name        = NULL;</div><div class='del'>-        char                        *new_name        = NULL;</div><div class='del'>-        char                         *nname             = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_bin (xdata, DHT_CHANGELOG_RENAME_OP_KEY, (void **)&amp;info);</div><div class='del'>-        if (!ret) {     /* special case: unlink considered as rename */</div><div class='del'>-                /* 3 == fop + oldloc + newloc */</div><div class='del'>-                old_name = alloca (info-&gt;oldname_len);</div><div class='del'>-                new_name = alloca (info-&gt;newname_len);</div><div class='del'>-                CHANGELOG_INIT_NOCHECK (this, frame-&gt;local,</div><div class='del'>-                                        NULL, loc-&gt;inode-&gt;gfid, 3);</div><div class='del'>-</div><div class='del'>-                co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-                if (!co)</div><div class='del'>-                        goto wind;</div><div class='del'>-</div><div class='del'>-                CHANGLOG_FILL_FOP_NUMBER (co, GF_FOP_RENAME, fop_fn, xtra_len);</div><div class='del'>-</div><div class='del'>-                co++;</div><div class='del'>-                strncpy (old_name, info-&gt;buffer, info-&gt;oldname_len);</div><div class='del'>-                CHANGELOG_FILL_ENTRY (co, info-&gt;old_pargfid, old_name,</div><div class='del'>-                                      entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-                co++;</div><div class='del'>-                /* new name resides just after old name */</div><div class='del'>-                nname = info-&gt;buffer + info-&gt;oldname_len;</div><div class='del'>-                strncpy (new_name, nname, info-&gt;newname_len);</div><div class='del'>-                CHANGELOG_FILL_ENTRY (co, info-&gt;new_pargfid, new_name,</div><div class='del'>-                                      entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-                changelog_set_usable_record_and_length (frame-&gt;local,</div><div class='del'>-                                                        xtra_len, 3);</div><div class='del'>-        } else {        /* default unlink */</div><div class='del'>-                CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, wind);</div><div class='del'>-                CHANGELOG_INIT_NOCHECK (this, frame-&gt;local, NULL,</div><div class='del'>-                                                        loc-&gt;inode-&gt;gfid, 2);</div><div class='del'>-</div><div class='del'>-                co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-                if (!co)</div><div class='del'>-                        goto wind;</div><div class='del'>-</div><div class='del'>-                CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op,</div><div class='del'>-                                                fop_fn, xtra_len);</div><div class='del'>-</div><div class='del'>-                co++;</div><div class='del'>-                if (priv-&gt;capture_del_path) {</div><div class='del'>-                        CHANGELOG_FILL_ENTRY_DIR_PATH (co, loc-&gt;pargfid,</div><div class='del'>-                                     loc-&gt;name, del_entry_fn, del_entry_free_fn,</div><div class='del'>-                                     xtra_len, wind, _gf_true);</div><div class='del'>-                } else {</div><div class='del'>-                        CHANGELOG_FILL_ENTRY_DIR_PATH (co, loc-&gt;pargfid,</div><div class='del'>-                                     loc-&gt;name, del_entry_fn, del_entry_free_fn,</div><div class='del'>-                                     xtra_len, wind, _gf_false);</div><div class='del'>-                }</div><div class='add'>+changelog_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+                 dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+    dht_changelog_rename_info_t *info = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *old_name = NULL;</div><div class='add'>+    char *new_name = NULL;</div><div class='add'>+    char *nname = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_CHANGELOG_RENAME_OP_KEY, (void **)&amp;info);</div><div class='add'>+    if (!ret) { /* special case: unlink considered as rename */</div><div class='add'>+        /* 3 == fop + oldloc + newloc */</div><div class='add'>+        old_name = alloca(info-&gt;oldname_len);</div><div class='add'>+        new_name = alloca(info-&gt;newname_len);</div><div class='add'>+        CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, loc-&gt;inode-&gt;gfid, 3);</div><div class='ctx'> </div><div class='del'>-                changelog_set_usable_record_and_length (frame-&gt;local,</div><div class='del'>-                                                        xtra_len, 2);</div><div class='del'>-        }</div><div class='add'>+        co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+        if (!co)</div><div class='add'>+            goto wind;</div><div class='ctx'> </div><div class='del'>-/* changelog barrier */</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_unlink_stub (frame, changelog_unlink_resume,</div><div class='del'>-                                                loc, xflags, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+        CHANGLOG_FILL_FOP_NUMBER(co, GF_FOP_RENAME, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueue unlink");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=unlink",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='add'>+        co++;</div><div class='add'>+        strncpy(old_name, info-&gt;buffer, info-&gt;oldname_len);</div><div class='add'>+        CHANGELOG_FILL_ENTRY(co, info-&gt;old_pargfid, old_name, entry_fn,</div><div class='add'>+                             entry_free_fn, xtra_len, wind);</div><div class='ctx'> </div><div class='del'>-/* changelog barrier */</div><div class='add'>+        co++;</div><div class='add'>+        /* new name resides just after old name */</div><div class='add'>+        nname = info-&gt;buffer + info-&gt;oldname_len;</div><div class='add'>+        strncpy(new_name, nname, info-&gt;newname_len);</div><div class='add'>+        CHANGELOG_FILL_ENTRY(co, info-&gt;new_pargfid, new_name, entry_fn,</div><div class='add'>+                             entry_free_fn, xtra_len, wind);</div><div class='add'>+</div><div class='add'>+        changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 3);</div><div class='add'>+    } else { /* default unlink */</div><div class='add'>+        CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, wind);</div><div class='add'>+        CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, loc-&gt;inode-&gt;gfid, 2);</div><div class='add'>+</div><div class='add'>+        co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+        if (!co)</div><div class='add'>+            goto wind;</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflags, xdata);</div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+        CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+</div><div class='add'>+        co++;</div><div class='add'>+        if (priv-&gt;capture_del_path) {</div><div class='add'>+            CHANGELOG_FILL_ENTRY_DIR_PATH(co, loc-&gt;pargfid, loc-&gt;name,</div><div class='add'>+                                          del_entry_fn, del_entry_free_fn,</div><div class='add'>+                                          xtra_len, wind, _gf_true);</div><div class='add'>+        } else {</div><div class='add'>+            CHANGELOG_FILL_ENTRY_DIR_PATH(co, loc-&gt;pargfid, loc-&gt;name,</div><div class='add'>+                                          del_entry_fn, del_entry_free_fn,</div><div class='add'>+                                          xtra_len, wind, _gf_false);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 2);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* changelog barrier */</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_unlink_stub(frame, changelog_unlink_resume, loc, xflags,</div><div class='add'>+                                   xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueue unlink");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=unlink", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* changelog barrier */</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflags, xdata);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* rename */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_rename_cbk (call_frame_t *frame,</div><div class='del'>-                      void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      struct iatt *buf, struct iatt *preoldparent,</div><div class='del'>-                      struct iatt *postoldparent, struct iatt *prenewparent,</div><div class='del'>-                      struct iatt *postnewparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        changelog_priv_t                  *priv  = NULL;</div><div class='del'>-        changelog_local_t                 *local = NULL;</div><div class='del'>-</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (rename, frame, op_ret, op_errno,</div><div class='del'>-                                buf, preoldparent, postoldparent,</div><div class='del'>-                                prenewparent, postnewparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+changelog_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                     struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                     struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                     dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                           postoldparent, prenewparent, postnewparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_rename_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+changelog_rename_resume(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+                        loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeue rename");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_rename_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeue rename");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        size_t               xtra_len        = 0;</div><div class='del'>-        changelog_priv_t     *priv           = NULL;</div><div class='del'>-        changelog_opt_t      *co             = NULL;</div><div class='del'>-        call_stub_t          *stub           = NULL;</div><div class='del'>-        struct list_head     queue           = {0, };</div><div class='del'>-        gf_boolean_t         barrier_enabled = _gf_false;</div><div class='del'>-        dht_changelog_rename_info_t  *info   = NULL;</div><div class='del'>-        int                  ret             = 0;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_bin (xdata, DHT_CHANGELOG_RENAME_OP_KEY, (void **)&amp;info);</div><div class='del'>-        if (ret &amp;&amp; oldloc-&gt;inode-&gt;ia_type != IA_IFDIR)  {</div><div class='del'>-                /* xdata "NOT" set for a non-directory,</div><div class='del'>-                 * Special rename =&gt; avoid logging */</div><div class='del'>-               goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* 3 == fop + oldloc + newloc */</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local,</div><div class='del'>-                                NULL, oldloc-&gt;inode-&gt;gfid, 3);</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-</div><div class='del'>-        co++;</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, oldloc-&gt;pargfid, oldloc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-        co++;</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, newloc-&gt;pargfid, newloc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 3);</div><div class='del'>-/* changelog barrier */</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_rename_stub (frame, changelog_rename_resume,</div><div class='del'>-                                                oldloc, newloc, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueue rename");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=rename",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-/* changelog barrier */</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_rename_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>- out:</div><div class='del'>-        return 0;</div><div class='add'>+changelog_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+                 loc_t *newloc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+    dht_changelog_rename_info_t *info = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_bin(xdata, DHT_CHANGELOG_RENAME_OP_KEY, (void **)&amp;info);</div><div class='add'>+    if (ret &amp;&amp; oldloc-&gt;inode-&gt;ia_type != IA_IFDIR) {</div><div class='add'>+        /* xdata "NOT" set for a non-directory,</div><div class='add'>+         * Special rename =&gt; avoid logging */</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* 3 == fop + oldloc + newloc */</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, oldloc-&gt;inode-&gt;gfid, 3);</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+</div><div class='add'>+    co++;</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, oldloc-&gt;pargfid, oldloc-&gt;name, entry_fn,</div><div class='add'>+                         entry_free_fn, xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    co++;</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, newloc-&gt;pargfid, newloc-&gt;name, entry_fn,</div><div class='add'>+                         entry_free_fn, xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 3);</div><div class='add'>+    /* changelog barrier */</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_rename_stub(frame, changelog_rename_resume, oldloc,</div><div class='add'>+                                   newloc, xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueue rename");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=rename", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+    /* changelog barrier */</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+out:</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* link */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_link_cbk (call_frame_t *frame,</div><div class='del'>-                    void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                    int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (link, frame, op_ret, op_errno,</div><div class='del'>-                                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(link, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                           postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_link_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+changelog_link_resume(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+                      loc_t *newloc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this-&gt;fops, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this-&gt;fops, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", frame, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeuing link");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_link_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeuing link");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> int32_t</div><div class='del'>-changelog_link (call_frame_t *frame,</div><div class='del'>-                xlator_t *this, loc_t *oldloc,</div><div class='del'>-                loc_t *newloc, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        size_t            xtra_len         = 0;</div><div class='del'>-        changelog_priv_t *priv             = NULL;</div><div class='del'>-        changelog_opt_t  *co               = NULL;</div><div class='del'>-        call_stub_t      *stub             = NULL;</div><div class='del'>-        struct list_head queue             = {0, };</div><div class='del'>-        gf_boolean_t     barrier_enabled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-        CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, wind);</div><div class='del'>-</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local, NULL, oldloc-&gt;gfid, 2);</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-</div><div class='del'>-        co++;</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, newloc-&gt;pargfid, newloc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 2);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_link_stub (frame, changelog_link_resume,</div><div class='del'>-                                               oldloc, newloc, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueued link");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=link",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_link_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='add'>+changelog_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='add'>+               loc_t *newloc, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+    CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, wind);</div><div class='add'>+</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, oldloc-&gt;gfid, 2);</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+</div><div class='add'>+    co++;</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, newloc-&gt;pargfid, newloc-&gt;name, entry_fn,</div><div class='add'>+                         entry_free_fn, xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 2);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_link_stub(frame, changelog_link_resume, oldloc, newloc,</div><div class='add'>+                                 xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueued link");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=link", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* mkdir */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_mkdir_cbk (call_frame_t *frame,</div><div class='del'>-                     void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                     int32_t op_errno, inode_t *inode,</div><div class='del'>-                     struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (mkdir, frame, op_ret, op_errno,</div><div class='del'>-                                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(mkdir, frame, op_ret, op_errno, inode, buf,</div><div class='add'>+                           preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_mkdir_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        loc_t *loc, mode_t mode,</div><div class='del'>-                        mode_t umask, dict_t *xdata)</div><div class='add'>+changelog_mkdir_resume(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                       mode_t mode, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this-&gt;fops, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this-&gt;fops, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", frame, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeuing mkdir");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_mkdir_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;mkdir,</div><div class='del'>-                    loc, mode, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeuing mkdir");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_mkdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc, mode_t mode, mode_t umask, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int               ret              = -1;</div><div class='del'>-        uuid_t            gfid             = {0,};</div><div class='del'>-        size_t            xtra_len         = 0;</div><div class='del'>-        changelog_priv_t *priv             = NULL;</div><div class='del'>-        changelog_opt_t  *co               = NULL;</div><div class='del'>-        call_stub_t      *stub             = NULL;</div><div class='del'>-        struct list_head queue             = {0, };</div><div class='del'>-        gf_boolean_t     barrier_enabled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_gfuuid (xdata, "gfid-req", &amp;gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "failed to get gfid from dict");</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local, NULL, gfid, 5);</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, S_IFDIR | mode, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 5);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_mkdir_stub (frame, changelog_mkdir_resume,</div><div class='del'>-                                               loc, mode, umask, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueued mkdir");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=mkdir",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_mkdir_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;mkdir,</div><div class='del'>-                    loc, mode, umask, xdata);</div><div class='add'>+changelog_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+                mode_t umask, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_gfuuid(xdata, "gfid-req", &amp;gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to get gfid from dict");</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, gfid, 5);</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, S_IFDIR | mode, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, loc-&gt;pargfid, loc-&gt;name, entry_fn, entry_free_fn,</div><div class='add'>+                         xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 5);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_mkdir_stub(frame, changelog_mkdir_resume, loc, mode,</div><div class='add'>+                                  umask, xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueued mkdir");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=mkdir", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* symlink */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_symlink_cbk (call_frame_t *frame,</div><div class='del'>-                       void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno,</div><div class='del'>-                       inode_t *inode, struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                       struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                      struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                      struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (symlink, frame, op_ret, op_errno,</div><div class='del'>-                                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(symlink, frame, op_ret, op_errno, inode, buf,</div><div class='add'>+                           preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-changelog_symlink_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                          const char *linkname, loc_t *loc,</div><div class='del'>-                          mode_t umask, dict_t *xdata)</div><div class='add'>+changelog_symlink_resume(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                         const char *linkname, loc_t *loc, mode_t umask,</div><div class='add'>+                         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this-&gt;fops, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this-&gt;fops, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", frame, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeuing symlink");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_symlink_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;symlink,</div><div class='del'>-                    linkname, loc, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeuing symlink");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_symlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   const char *linkname, loc_t *loc,</div><div class='del'>-                   mode_t umask, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int               ret              = -1;</div><div class='del'>-        size_t            xtra_len         = 0;</div><div class='del'>-        uuid_t            gfid             = {0,};</div><div class='del'>-        changelog_priv_t *priv             = NULL;</div><div class='del'>-        changelog_opt_t  *co               = NULL;</div><div class='del'>-        call_stub_t      *stub             = NULL;</div><div class='del'>-        struct list_head queue             = {0, };</div><div class='del'>-        gf_boolean_t     barrier_enabled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_gfuuid (xdata, "gfid-req", &amp;gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "failed to get gfid from dict");</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local, NULL, gfid, 2);</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 2);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_symlink_stub (frame,</div><div class='del'>-                                                 changelog_symlink_resume,</div><div class='del'>-                                                 linkname, loc, umask, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueued symlink");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=symlink",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_symlink_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;symlink,</div><div class='del'>-                    linkname, loc, umask, xdata);</div><div class='add'>+changelog_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='add'>+                  loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_gfuuid(xdata, "gfid-req", &amp;gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to get gfid from dict");</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, gfid, 2);</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, loc-&gt;pargfid, loc-&gt;name, entry_fn, entry_free_fn,</div><div class='add'>+                         xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 2);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_symlink_stub(frame, changelog_symlink_resume, linkname,</div><div class='add'>+                                    loc, umask, xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueued symlink");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=symlink", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc, umask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* mknod */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_mknod_cbk (call_frame_t *frame,</div><div class='del'>-                     void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                     struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                     struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                    struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                    struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (mknod, frame, op_ret, op_errno,</div><div class='del'>-                                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(mknod, frame, op_ret, op_errno, inode, buf,</div><div class='add'>+                           preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_mknod_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        loc_t *loc, mode_t mode, dev_t rdev,</div><div class='del'>-                        mode_t umask, dict_t *xdata)</div><div class='add'>+changelog_mknod_resume(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                       mode_t mode, dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this-&gt;fops, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this-&gt;fops, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", frame, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeuing mknod");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_mknod_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, rdev, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeuing mknod");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_mknod (call_frame_t *frame,</div><div class='del'>-                 xlator_t *this, loc_t *loc,</div><div class='del'>-                 mode_t mode, dev_t dev, mode_t umask, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int               ret              = -1;</div><div class='del'>-        uuid_t            gfid             = {0,};</div><div class='del'>-        size_t            xtra_len         = 0;</div><div class='del'>-        changelog_priv_t *priv             = NULL;</div><div class='del'>-        changelog_opt_t  *co               = NULL;</div><div class='del'>-        call_stub_t      *stub             = NULL;</div><div class='del'>-        struct list_head queue             = {0, };</div><div class='del'>-        gf_boolean_t     barrier_enabled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Check whether changelog active */</div><div class='del'>-        if (!(priv-&gt;active))</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        /* Check whether rebalance activity */</div><div class='del'>-        if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_DEFRAG)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        /* If tier-dht linkto is SET, ignore about verifiying :</div><div class='del'>-         * 1. Whether internal fop AND</div><div class='del'>-         * 2. Whether tier rebalance process activity (this will help in</div><div class='del'>-         * recording mknod if tier rebalance process calls this mknod) */</div><div class='del'>-        if (!(dict_get (xdata, "trusted.tier.tier-dht.linkto"))) {</div><div class='del'>-                CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, wind);</div><div class='del'>-                if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_TIER_DEFRAG)</div><div class='del'>-                        goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_gfuuid (xdata, "gfid-req", &amp;gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "failed to get gfid from dict");</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local, NULL, gfid, 5);</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, mode, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='del'>-</div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 5);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_mknod_stub (frame, changelog_mknod_resume,</div><div class='del'>-                                               loc, mode, dev, umask, xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueued mknod");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=mknod",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_mknod_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, dev, umask, xdata);</div><div class='add'>+changelog_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+                dev_t dev, mode_t umask, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Check whether changelog active */</div><div class='add'>+    if (!(priv-&gt;active))</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    /* Check whether rebalance activity */</div><div class='add'>+    if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_DEFRAG)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    /* If tier-dht linkto is SET, ignore about verifiying :</div><div class='add'>+     * 1. Whether internal fop AND</div><div class='add'>+     * 2. Whether tier rebalance process activity (this will help in</div><div class='add'>+     * recording mknod if tier rebalance process calls this mknod) */</div><div class='add'>+    if (!(dict_get(xdata, "trusted.tier.tier-dht.linkto"))) {</div><div class='add'>+        CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, wind);</div><div class='add'>+        if (frame-&gt;root-&gt;pid == GF_CLIENT_PID_TIER_DEFRAG)</div><div class='add'>+            goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_gfuuid(xdata, "gfid-req", &amp;gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to get gfid from dict");</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, gfid, 5);</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, mode, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, loc-&gt;pargfid, loc-&gt;name, entry_fn, entry_free_fn,</div><div class='add'>+                         xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 5);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_mknod_stub(frame, changelog_mknod_resume, loc, mode, dev,</div><div class='add'>+                                  umask, xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueued mknod");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=mknod", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, dev, umask, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* create */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_create_cbk (call_frame_t *frame,</div><div class='del'>-                      void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno,</div><div class='del'>-                      fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='del'>-                      struct iatt *preparent,</div><div class='del'>-                      struct iatt *postparent, dict_t *xdata)</div><div class='add'>+changelog_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                     struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                     struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='del'>-        changelog_event_t  ev    = {0,};</div><div class='del'>-</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='del'>-</div><div class='del'>-        /* fill the event structure.. similar to open() */</div><div class='del'>-        ev.ev_type = CHANGELOG_OP_TYPE_CREATE;</div><div class='del'>-        gf_uuid_copy (ev.u.create.gfid, buf-&gt;ia_gfid);</div><div class='del'>-        ev.u.create.flags = fd-&gt;flags;</div><div class='del'>-        changelog_dispatch_event (this, priv, &amp;ev);</div><div class='del'>-</div><div class='del'>-        if (changelog_ev_selected</div><div class='del'>-                   (this, &amp;priv-&gt;ev_selection, CHANGELOG_OP_TYPE_RELEASE)) {</div><div class='del'>-                ret = fd_ctx_set (fd, this, (uint64_t)(long) 0x1);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                CHANGELOG_MSG_SET_FD_CONTEXT,</div><div class='del'>-                                "could not set fd context (for release cbk)");</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='add'>+    changelog_event_t ev = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (create, frame,</div><div class='del'>-                                op_ret, op_errno, fd, inode,</div><div class='del'>-                                buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-changelog_create_resume (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                         loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-                         mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='add'>+    /* fill the event structure.. similar to open() */</div><div class='add'>+    ev.ev_type = CHANGELOG_OP_TYPE_CREATE;</div><div class='add'>+    gf_uuid_copy(ev.u.create.gfid, buf-&gt;ia_gfid);</div><div class='add'>+    ev.u.create.flags = fd-&gt;flags;</div><div class='add'>+    changelog_dispatch_event(this, priv, &amp;ev);</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this-&gt;fops, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", frame, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    if (changelog_ev_selected(this, &amp;priv-&gt;ev_selection,</div><div class='add'>+                              CHANGELOG_OP_TYPE_RELEASE)) {</div><div class='add'>+        ret = fd_ctx_set(fd, this, (uint64_t)(long)0x1);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, CHANGELOG_MSG_SET_FD_CONTEXT,</div><div class='add'>+                   "could not set fd context (for release cbk)");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Dequeuing create");</div><div class='del'>-                      changelog_color_fop_and_inc_cnt</div><div class='del'>-                      (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_create_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return -1;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                           preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-                  mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int               ret              = -1;</div><div class='del'>-        uuid_t            gfid             = {0,};</div><div class='del'>-        changelog_opt_t  *co               = NULL;</div><div class='del'>-        changelog_priv_t *priv             = NULL;</div><div class='del'>-        size_t            xtra_len         = 0;</div><div class='del'>-        call_stub_t      *stub             = NULL;</div><div class='del'>-        struct list_head queue             = {0, };</div><div class='del'>-        gf_boolean_t     barrier_enabled   = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-</div><div class='del'>-        ret = dict_get_gfuuid (xdata, "gfid-req", &amp;gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "failed to get gfid from dict");</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* init with two extra records */</div><div class='del'>-        CHANGELOG_INIT_NOCHECK (this, frame-&gt;local, NULL, gfid, 5);</div><div class='del'>-        if (!frame-&gt;local)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, mode, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_UINT32 (co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='del'>-        co++;</div><div class='del'>-</div><div class='del'>-        CHANGELOG_FILL_ENTRY (co, loc-&gt;pargfid, loc-&gt;name,</div><div class='del'>-                              entry_fn, entry_free_fn, xtra_len, wind);</div><div class='add'>+changelog_create_resume(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                        int32_t flags, mode_t mode, mode_t umask, fd_t *fd,</div><div class='add'>+                        dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 5);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this-&gt;fops, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", frame, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='del'>-                        stub = fop_create_stub (frame, changelog_create_resume,</div><div class='del'>-                                               loc, flags, mode, umask, fd,</div><div class='del'>-                                               xdata);</div><div class='del'>-                        if (!stub)</div><div class='del'>-                               __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                        else</div><div class='del'>-                               __chlog_barrier_enqueue (this, stub);</div><div class='del'>-                } else {</div><div class='del'>-                        ((changelog_local_t *)frame-&gt;local)-&gt;color</div><div class='del'>-                                                          = priv-&gt;current_color;</div><div class='del'>-                        changelog_inc_fop_cnt (this, priv, frame-&gt;local);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (barrier_enabled &amp;&amp; stub) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Enqueued create");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Dequeuing create");</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        if (barrier_enabled &amp;&amp; !stub) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                         CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                         "Failed to barrier FOPs, disabling changelog barrier",</div><div class='del'>-                         "fop=create",</div><div class='del'>-                         NULL);</div><div class='del'>-                chlog_barrier_dequeue_all (this, &amp;queue);</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='add'>+    return -1;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_create_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='add'>+int32_t</div><div class='add'>+changelog_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+                 mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+</div><div class='add'>+    ret = dict_get_gfuuid(xdata, "gfid-req", &amp;gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to get gfid from dict");</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* init with two extra records */</div><div class='add'>+    CHANGELOG_INIT_NOCHECK(this, frame-&gt;local, NULL, gfid, 5);</div><div class='add'>+    if (!frame-&gt;local)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='add'>+</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, mode, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;uid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_UINT32(co, frame-&gt;root-&gt;gid, number_fn, xtra_len);</div><div class='add'>+    co++;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_ENTRY(co, loc-&gt;pargfid, loc-&gt;name, entry_fn, entry_free_fn,</div><div class='add'>+                         xtra_len, wind);</div><div class='add'>+</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 5);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if ((barrier_enabled = priv-&gt;barrier_enabled)) {</div><div class='add'>+            stub = fop_create_stub(frame, changelog_create_resume, loc, flags,</div><div class='add'>+                                   mode, umask, fd, xdata);</div><div class='add'>+            if (!stub)</div><div class='add'>+                __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+            else</div><div class='add'>+                __chlog_barrier_enqueue(this, stub);</div><div class='add'>+        } else {</div><div class='add'>+            ((changelog_local_t *)frame-&gt;local)-&gt;color = priv-&gt;current_color;</div><div class='add'>+            changelog_inc_fop_cnt(this, priv, frame-&gt;local);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; stub) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "Enqueued create");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (barrier_enabled &amp;&amp; !stub) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+                "Failed to barrier FOPs, disabling changelog barrier",</div><div class='add'>+                "fop=create", NULL);</div><div class='add'>+        chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Metadata modification fops - TYPE II */</div><div class='ctx'> </div><div class='ctx'> /* {{{ */</div><div class='hunk'>@@ -1158,268 +1106,253 @@ out:</div><div class='ctx'> /* {f}setattr */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fsetattr_cbk (call_frame_t *frame,</div><div class='del'>-                        void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                        int32_t op_errno, struct iatt *preop_stbuf,</div><div class='del'>-                        struct iatt *postop_stbuf, dict_t *xdata)</div><div class='add'>+changelog_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno,</div><div class='add'>+                       struct iatt *preop_stbuf, struct iatt *postop_stbuf,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='del'>-</div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (fsetattr, frame, op_ret, op_errno,</div><div class='del'>-                                preop_stbuf, postop_stbuf, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA);</div><div class='ctx'> </div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(fsetattr, frame, op_ret, op_errno, preop_stbuf,</div><div class='add'>+                           postop_stbuf, xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fsetattr (call_frame_t *frame,</div><div class='del'>-                    xlator_t *this, fd_t *fd,</div><div class='del'>-                    struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+changelog_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                   struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='del'>-        if (!frame-&gt;local)</div><div class='del'>-                goto wind;</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    if (!frame-&gt;local)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_fsetattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fsetattr,</div><div class='del'>-                    fd, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_setattr_cbk (call_frame_t *frame,</div><div class='del'>-                       void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                       int32_t op_errno, struct iatt *preop_stbuf,</div><div class='del'>-                       struct iatt *postop_stbuf, dict_t *xdata)</div><div class='add'>+changelog_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno,</div><div class='add'>+                      struct iatt *preop_stbuf, struct iatt *postop_stbuf,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (setattr, frame, op_ret, op_errno,</div><div class='del'>-                                preop_stbuf, postop_stbuf, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(setattr, frame, op_ret, op_errno, preop_stbuf,</div><div class='add'>+                           postop_stbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_setattr (call_frame_t *frame,</div><div class='del'>-                   xlator_t *this, loc_t *loc,</div><div class='del'>-                   struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+changelog_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='del'>-        uuid_t            shard_root_gfid = {0,};</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    uuid_t shard_root_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, wind);</div><div class='add'>+    CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, wind);</div><div class='ctx'> </div><div class='del'>-        /* Do not record META on .shard */</div><div class='del'>-        gf_uuid_parse (SHARD_ROOT_GFID, shard_root_gfid);</div><div class='del'>-        if (gf_uuid_compare (loc-&gt;gfid, shard_root_gfid) == 0) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    /* Do not record META on .shard */</div><div class='add'>+    gf_uuid_parse(SHARD_ROOT_GFID, shard_root_gfid);</div><div class='add'>+    if (gf_uuid_compare(loc-&gt;gfid, shard_root_gfid) == 0) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='del'>-        if (!frame-&gt;local)</div><div class='del'>-                goto wind;</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    if (!frame-&gt;local)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_setattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;setattr,</div><div class='del'>-                    loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {f}removexattr */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fremovexattr_cbk (call_frame_t *frame,</div><div class='del'>-                            void *cookie, xlator_t *this,</div><div class='del'>-                            int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+changelog_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fremovexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+changelog_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                       const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_fremovexattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_removexattr_cbk (call_frame_t *frame,</div><div class='del'>-                           void *cookie, xlator_t *this,</div><div class='del'>-                           int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+changelog_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(removexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                       loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+changelog_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                      const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_removexattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* {f}setxattr */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_setxattr_cbk (call_frame_t *frame,</div><div class='del'>-                        void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+changelog_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* changelog_handle_virtual_xattr:</div><div class='hunk'>@@ -1432,276 +1365,258 @@ changelog_setxattr_cbk (call_frame_t *frame,</div><div class='ctx'>  *           any other value: ENOTSUP is returned.</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-changelog_handle_virtual_xattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                                loc_t *loc, dict_t *dict)</div><div class='add'>+changelog_handle_virtual_xattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                               dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t     *priv         = NULL;</div><div class='del'>-        changelog_local_t    *local        = NULL;</div><div class='del'>-        int32_t               value        = 0;</div><div class='del'>-        int                   ret          = 0;</div><div class='del'>-        int                   dict_ret     = 0;</div><div class='del'>-        gf_boolean_t          valid        = _gf_false;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='add'>+    int32_t value = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int dict_ret = 0;</div><div class='add'>+    gf_boolean_t valid = _gf_false;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        dict_ret = dict_get_int32 (dict, GF_XATTR_TRIGGER_SYNC, &amp;value);</div><div class='add'>+    dict_ret = dict_get_int32(dict, GF_XATTR_TRIGGER_SYNC, &amp;value);</div><div class='ctx'> </div><div class='del'>-        if ((dict_ret == 0 &amp;&amp; value == 1) &amp;&amp; ((loc-&gt;inode-&gt;ia_type == IA_IFDIR)</div><div class='del'>-            || (loc-&gt;inode-&gt;ia_type == IA_IFREG)))</div><div class='del'>-                valid = _gf_true;</div><div class='add'>+    if ((dict_ret == 0 &amp;&amp; value == 1) &amp;&amp; ((loc-&gt;inode-&gt;ia_type == IA_IFDIR) ||</div><div class='add'>+                                          (loc-&gt;inode-&gt;ia_type == IA_IFREG)))</div><div class='add'>+        valid = _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (valid) {</div><div class='del'>-                ret = changelog_fill_entry_buf (frame, this, loc, &amp;local);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_smsg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                 CHANGELOG_MSG_ENTRY_BUF_INFO,</div><div class='del'>-                                 "Entry cannot be"</div><div class='del'>-                                 " captured for gfid, Capturing DATA"</div><div class='del'>-                                 " entry.",</div><div class='del'>-                                 "gfid=%s", uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                                 NULL);</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                changelog_update (this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='del'>-</div><div class='del'>- unwind:</div><div class='del'>-                /* Capture DATA only if it's a file. */</div><div class='del'>-                if (loc-&gt;inode-&gt;ia_type != IA_IFDIR)</div><div class='del'>-                        changelog_update (this, priv, frame-&gt;local,</div><div class='del'>-                                          CHANGELOG_TYPE_DATA);</div><div class='del'>-                /* Assign local to prev_entry, so unwind will take</div><div class='del'>-                 * care of cleanup. */</div><div class='del'>-                ((changelog_local_t *)(frame-&gt;local))-&gt;prev_entry = local;</div><div class='del'>-                CHANGELOG_STACK_UNWIND (setxattr, frame, 0, 0, NULL);</div><div class='del'>-                return;</div><div class='del'>-        } else {</div><div class='del'>-                CHANGELOG_STACK_UNWIND (setxattr, frame, -1, ENOTSUP, NULL);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (valid) {</div><div class='add'>+        ret = changelog_fill_entry_buf(frame, this, loc, &amp;local);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_smsg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_ENTRY_BUF_INFO,</div><div class='add'>+                    "Entry cannot be"</div><div class='add'>+                    " captured for gfid, Capturing DATA"</div><div class='add'>+                    " entry.",</div><div class='add'>+                    "gfid=%s", uuid_utoa(loc-&gt;inode-&gt;gfid), NULL);</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='add'>+        changelog_update(this, priv, local, CHANGELOG_TYPE_ENTRY);</div><div class='add'>+</div><div class='add'>+    unwind:</div><div class='add'>+        /* Capture DATA only if it's a file. */</div><div class='add'>+        if (loc-&gt;inode-&gt;ia_type != IA_IFDIR)</div><div class='add'>+            changelog_update(this, priv, frame-&gt;local, CHANGELOG_TYPE_DATA);</div><div class='add'>+        /* Assign local to prev_entry, so unwind will take</div><div class='add'>+         * care of cleanup. */</div><div class='add'>+        ((changelog_local_t *)(frame-&gt;local))-&gt;prev_entry = local;</div><div class='add'>+        CHANGELOG_STACK_UNWIND(setxattr, frame, 0, 0, NULL);</div><div class='add'>+        return;</div><div class='add'>+    } else {</div><div class='add'>+        CHANGELOG_STACK_UNWIND(setxattr, frame, -1, ENOTSUP, NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_setxattr (call_frame_t *frame,</div><div class='del'>-                    xlator_t *this, loc_t *loc,</div><div class='del'>-                    dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+changelog_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='ctx'> </div><div class='del'>-        /* On setting this virtual xattr on a file, an explicit data</div><div class='del'>-         * sync is triggered from geo-rep as CREATE|DATA entry is</div><div class='del'>-         * recorded in changelog based on xattr value.</div><div class='del'>-         */</div><div class='del'>-        if (dict_get (dict, GF_XATTR_TRIGGER_SYNC)) {</div><div class='del'>-                changelog_handle_virtual_xattr (frame, this, loc, dict);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* On setting this virtual xattr on a file, an explicit data</div><div class='add'>+     * sync is triggered from geo-rep as CREATE|DATA entry is</div><div class='add'>+     * recorded in changelog based on xattr value.</div><div class='add'>+     */</div><div class='add'>+    if (dict_get(dict, GF_XATTR_TRIGGER_SYNC)) {</div><div class='add'>+        changelog_handle_virtual_xattr(frame, this, loc, dict);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_setxattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fsetxattr_cbk (call_frame_t *frame,</div><div class='del'>-                         void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                         int32_t op_errno, dict_t *xdata)</div><div class='add'>+changelog_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fsetxattr (call_frame_t *frame,</div><div class='del'>-                     xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-                     int32_t flags, dict_t *xdata)</div><div class='add'>+changelog_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                    int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv     = NULL;</div><div class='del'>-        changelog_opt_t  *co       = NULL;</div><div class='del'>-        size_t            xtra_len = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-        CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+    CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_xattrop_cbk (call_frame_t *frame,</div><div class='del'>-                       void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                       int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+changelog_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                      dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (xattrop, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(xattrop, frame, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                   gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+changelog_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv      = NULL;</div><div class='del'>-        changelog_opt_t  *co        = NULL;</div><div class='del'>-        size_t            xtra_len  = 0;</div><div class='del'>-        int               ret       = 0;</div><div class='del'>-        void             *size_attr = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    void *size_attr = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-        ret = dict_get_ptr (xattr, GF_XATTR_SHARD_FILE_SIZE, &amp;size_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto wind;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+    ret = dict_get_ptr(xattr, GF_XATTR_SHARD_FILE_SIZE, &amp;size_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 1);</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_xattrop_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;xattrop,</div><div class='del'>-                    loc, optype, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_xattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, optype, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fxattrop_cbk (call_frame_t *frame,</div><div class='del'>-                         void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                         int32_t op_errno, dict_t *xattr, dict_t *xdata)</div><div class='add'>+changelog_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                       dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_METADATA_XATTR);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (fxattrop, frame,</div><div class='del'>-                                op_ret, op_errno, xattr, xdata);</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(fxattrop, frame, op_ret, op_errno, xattr, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_fxattrop (call_frame_t *frame,</div><div class='del'>-                     xlator_t *this, fd_t *fd, gf_xattrop_flags_t optype,</div><div class='del'>-                     dict_t *xattr, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        changelog_priv_t *priv      = NULL;</div><div class='del'>-        changelog_opt_t  *co        = NULL;</div><div class='del'>-        size_t            xtra_len  = 0;</div><div class='del'>-        void             *size_attr = NULL;</div><div class='del'>-        int               ret       = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='del'>-        ret = dict_get_ptr (xattr, GF_XATTR_SHARD_FILE_SIZE, &amp;size_attr);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto wind;</div><div class='add'>+changelog_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                   gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_opt_t *co = NULL;</div><div class='add'>+    size_t xtra_len = 0;</div><div class='add'>+    void *size_attr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='add'>+    ret = dict_get_ptr(xattr, GF_XATTR_SHARD_FILE_SIZE, &amp;size_attr);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);</div><div class='add'>+    CHANGELOG_OP_BOUNDARY_CHECK(frame, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, fd-&gt;inode, fd-&gt;inode-&gt;gfid, 1);</div><div class='ctx'> </div><div class='del'>-        co = changelog_get_usable_buffer (frame-&gt;local);</div><div class='del'>-        if (!co)</div><div class='del'>-                goto wind;</div><div class='add'>+    co = changelog_get_usable_buffer(frame-&gt;local);</div><div class='add'>+    if (!co)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        CHANGLOG_FILL_FOP_NUMBER (co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='add'>+    CHANGLOG_FILL_FOP_NUMBER(co, frame-&gt;root-&gt;op, fop_fn, xtra_len);</div><div class='ctx'> </div><div class='del'>-        changelog_set_usable_record_and_length (frame-&gt;local, xtra_len, 1);</div><div class='add'>+    changelog_set_usable_record_and_length(frame-&gt;local, xtra_len, 1);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_fxattrop_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fxattrop,</div><div class='del'>-                    fd, optype, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_fxattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, optype, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Data modification fops - TYPE I */</div><div class='ctx'> </div><div class='ctx'> /* {{{ */</div><div class='hunk'>@@ -1709,164 +1624,151 @@ changelog_fxattrop (call_frame_t *frame,</div><div class='ctx'> /* {f}truncate() */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_truncate_cbk (call_frame_t *frame,</div><div class='del'>-                        void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                        int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                        struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+changelog_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                       struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_DATA);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_DATA);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (truncate, frame,</div><div class='del'>-                                op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                           xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_truncate (call_frame_t *frame,</div><div class='del'>-                    xlator_t *this, loc_t *loc, off_t offset, dict_t *xdata)</div><div class='add'>+changelog_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        loc-&gt;inode, loc-&gt;inode-&gt;gfid, 0);</div><div class='del'>-        LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;c_snap_fd != -1 &amp;&amp;</div><div class='del'>-                    priv-&gt;barrier_enabled == _gf_true) {</div><div class='del'>-                        changelog_snap_handle_ascii_change (this,</div><div class='del'>-                              &amp;( ((changelog_local_t *)(frame-&gt;local))-&gt;cld));</div><div class='del'>-                }</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, loc-&gt;inode, loc-&gt;inode-&gt;gfid, 0);</div><div class='add'>+    LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;c_snap_fd != -1 &amp;&amp; priv-&gt;barrier_enabled == _gf_true) {</div><div class='add'>+            changelog_snap_handle_ascii_change(</div><div class='add'>+                this, &amp;(((changelog_local_t *)(frame-&gt;local))-&gt;cld));</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_truncate_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_ftruncate_cbk (call_frame_t *frame,</div><div class='del'>-                         void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                         int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                         struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+changelog_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                        struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_DATA);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_DATA);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (ftruncate, frame,</div><div class='del'>-                                op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                           xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_ftruncate (call_frame_t *frame,</div><div class='del'>-                     xlator_t *this, fd_t *fd, off_t offset, dict_t *xdata)</div><div class='add'>+changelog_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        fd-&gt;inode, fd-&gt;inode-&gt;gfid, 0);</div><div class='del'>-        LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;c_snap_fd != -1 &amp;&amp;</div><div class='del'>-                    priv-&gt;barrier_enabled == _gf_true) {</div><div class='del'>-                        changelog_snap_handle_ascii_change (this,</div><div class='del'>-                              &amp;( ((changelog_local_t *)(frame-&gt;local))-&gt;cld));</div><div class='del'>-                }</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, fd-&gt;inode, fd-&gt;inode-&gt;gfid, 0);</div><div class='add'>+    LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;c_snap_fd != -1 &amp;&amp; priv-&gt;barrier_enabled == _gf_true) {</div><div class='add'>+            changelog_snap_handle_ascii_change(</div><div class='add'>+                this, &amp;(((changelog_local_t *)(frame-&gt;local))-&gt;cld));</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_ftruncate_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                    fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* writev() */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+changelog_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t  *priv  = NULL;</div><div class='del'>-        changelog_local_t *local = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        priv  = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt;= 0) || !local), unwind);</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt;= 0) || !local), unwind);</div><div class='ctx'> </div><div class='del'>-        changelog_update (this, priv, local, CHANGELOG_TYPE_DATA);</div><div class='add'>+    changelog_update(this, priv, local, CHANGELOG_TYPE_DATA);</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        changelog_dec_fop_cnt (this, priv, local);</div><div class='del'>-        CHANGELOG_STACK_UNWIND (writev, frame,</div><div class='del'>-                                op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    changelog_dec_fop_cnt(this, priv, local);</div><div class='add'>+    CHANGELOG_STACK_UNWIND(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                           xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_writev (call_frame_t *frame,</div><div class='del'>-                  xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='del'>-                  int32_t count, off_t offset, uint32_t flags,</div><div class='del'>-                  struct iobref *iobref, dict_t *xdata)</div><div class='add'>+changelog_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                 struct iovec *vector, int32_t count, off_t offset,</div><div class='add'>+                 uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_INIT (this, frame-&gt;local,</div><div class='del'>-                        fd-&gt;inode, fd-&gt;inode-&gt;gfid, 0);</div><div class='del'>-        LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-        {</div><div class='del'>-                if (priv-&gt;c_snap_fd != -1 &amp;&amp;</div><div class='del'>-                    priv-&gt;barrier_enabled == _gf_true) {</div><div class='del'>-                        changelog_snap_handle_ascii_change (this,</div><div class='del'>-                              &amp;( ((changelog_local_t *)(frame-&gt;local))-&gt;cld));</div><div class='del'>-                }</div><div class='add'>+    CHANGELOG_INIT(this, frame-&gt;local, fd-&gt;inode, fd-&gt;inode-&gt;gfid, 0);</div><div class='add'>+    LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+    {</div><div class='add'>+        if (priv-&gt;c_snap_fd != -1 &amp;&amp; priv-&gt;barrier_enabled == _gf_true) {</div><div class='add'>+            changelog_snap_handle_ascii_change(</div><div class='add'>+                this, &amp;(((changelog_local_t *)(frame-&gt;local))-&gt;cld));</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        changelog_color_fop_and_inc_cnt (this, priv, frame-&gt;local);</div><div class='del'>-        STACK_WIND (frame, changelog_writev_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;writev, fd, vector,</div><div class='del'>-                    count, offset, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    changelog_color_fop_and_inc_cnt(this, priv, frame-&gt;local);</div><div class='add'>+    STACK_WIND(frame, changelog_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='hunk'>@@ -1875,81 +1777,79 @@ changelog_writev (call_frame_t *frame,</div><div class='ctx'> </div><div class='ctx'> /* {{{ */</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-changelog_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int                ret    = 0;</div><div class='del'>-        changelog_priv_t  *priv   = NULL;</div><div class='del'>-        changelog_event_t  ev     = {0,};</div><div class='del'>-        gf_boolean_t logopen = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (frame-&gt;local) {</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                logopen = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        CHANGELOG_COND_GOTO (priv, ((op_ret &lt; 0) || !logopen), unwind);</div><div class='del'>-</div><div class='del'>-        /* fill the event structure */</div><div class='del'>-        ev.ev_type = CHANGELOG_OP_TYPE_OPEN;</div><div class='del'>-        gf_uuid_copy (ev.u.open.gfid, fd-&gt;inode-&gt;gfid);</div><div class='del'>-        ev.u.open.flags = fd-&gt;flags;</div><div class='del'>-        changelog_dispatch_event (this, priv, &amp;ev);</div><div class='del'>-</div><div class='del'>-        if (changelog_ev_selected</div><div class='del'>-                   (this, &amp;priv-&gt;ev_selection, CHANGELOG_OP_TYPE_RELEASE)) {</div><div class='del'>-                ret = fd_ctx_set (fd, this, (uint64_t)(long) 0x1);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                CHANGELOG_MSG_SET_FD_CONTEXT,</div><div class='del'>-                                "could not set fd context (for release cbk)");</div><div class='del'>-        }</div><div class='add'>+changelog_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_event_t ev = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t logopen = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (frame-&gt;local) {</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        logopen = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    CHANGELOG_COND_GOTO(priv, ((op_ret &lt; 0) || !logopen), unwind);</div><div class='add'>+</div><div class='add'>+    /* fill the event structure */</div><div class='add'>+    ev.ev_type = CHANGELOG_OP_TYPE_OPEN;</div><div class='add'>+    gf_uuid_copy(ev.u.open.gfid, fd-&gt;inode-&gt;gfid);</div><div class='add'>+    ev.u.open.flags = fd-&gt;flags;</div><div class='add'>+    changelog_dispatch_event(this, priv, &amp;ev);</div><div class='add'>+</div><div class='add'>+    if (changelog_ev_selected(this, &amp;priv-&gt;ev_selection,</div><div class='add'>+                              CHANGELOG_OP_TYPE_RELEASE)) {</div><div class='add'>+        ret = fd_ctx_set(fd, this, (uint64_t)(long)0x1);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, CHANGELOG_MSG_SET_FD_CONTEXT,</div><div class='add'>+                   "could not set fd context (for release cbk)");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- unwind:</div><div class='del'>-        CHANGELOG_STACK_UNWIND (open, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+unwind:</div><div class='add'>+    CHANGELOG_STACK_UNWIND(open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-changelog_open (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, int flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+changelog_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+               fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    CHANGELOG_NOT_ACTIVE_THEN_GOTO(frame, priv, wind);</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = (void *)0x1; /* do not dereference in -&gt;cbk */</div><div class='add'>+    frame-&gt;local = (void *)0x1; /* do not dereference in -&gt;cbk */</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, changelog_open_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, changelog_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /* {{{ */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_changelog_generic_dispatcher (dict_t *dict,</div><div class='del'>-                               char *key, data_t *value, void *data)</div><div class='add'>+_changelog_generic_dispatcher(dict_t *dict, char *key, data_t *value,</div><div class='add'>+                              void *data)</div><div class='ctx'> {</div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        this = data;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    this = data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        changelog_dispatch_event (this, priv, (changelog_event_t *)value-&gt;data);</div><div class='del'>-        return 0;</div><div class='add'>+    changelog_dispatch_event(this, priv, (changelog_event_t *)value-&gt;data);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -1958,46 +1858,45 @@ _changelog_generic_dispatcher (dict_t *dict,</div><div class='ctx'>  * traverses the dictionary).</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-changelog_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='add'>+changelog_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (op != GF_IPC_TARGET_CHANGELOG)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (op != GF_IPC_TARGET_CHANGELOG)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        /* it's for us, do the job */</div><div class='del'>-        if (xdata)</div><div class='del'>-                (void) dict_foreach (xdata,</div><div class='del'>-                                     _changelog_generic_dispatcher, this);</div><div class='add'>+    /* it's for us, do the job */</div><div class='add'>+    if (xdata)</div><div class='add'>+        (void)dict_foreach(xdata, _changelog_generic_dispatcher, this);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, 0, 0, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, 0, 0, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, default_ipc_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_ipc_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* {{{ */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-changelog_release (xlator_t *this, fd_t *fd)</div><div class='add'>+changelog_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        changelog_event_t ev = {0,};</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='add'>+    changelog_event_t ev = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ev.ev_type = CHANGELOG_OP_TYPE_RELEASE;</div><div class='del'>-        gf_uuid_copy (ev.u.release.gfid, fd-&gt;inode-&gt;gfid);</div><div class='del'>-        changelog_dispatch_event (this, priv, &amp;ev);</div><div class='add'>+    ev.ev_type = CHANGELOG_OP_TYPE_RELEASE;</div><div class='add'>+    gf_uuid_copy(ev.u.release.gfid, fd-&gt;inode-&gt;gfid);</div><div class='add'>+    changelog_dispatch_event(this, priv, &amp;ev);</div><div class='ctx'> </div><div class='del'>-        (void) fd_ctx_del (fd, this, NULL);</div><div class='add'>+    (void)fd_ctx_del(fd, this, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* }}} */</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -2012,1040 +1911,1002 @@ changelog_release (xlator_t *this, fd_t *fd)</div><div class='ctx'>  * needed if there are more operation modes in the future.</div><div class='ctx'>  */</div><div class='ctx'> static void</div><div class='del'>-changelog_assign_opmode (changelog_priv_t *priv, char *mode)</div><div class='add'>+changelog_assign_opmode(changelog_priv_t *priv, char *mode)</div><div class='ctx'> {</div><div class='del'>-        if ( strncmp (mode, "realtime", 8) == 0 ) {</div><div class='del'>-                priv-&gt;op_mode = CHANGELOG_MODE_RT;</div><div class='del'>-        }</div><div class='add'>+    if (strncmp(mode, "realtime", 8) == 0) {</div><div class='add'>+        priv-&gt;op_mode = CHANGELOG_MODE_RT;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_assign_encoding (changelog_priv_t *priv, char *enc)</div><div class='add'>+changelog_assign_encoding(changelog_priv_t *priv, char *enc)</div><div class='ctx'> {</div><div class='del'>-        if ( strncmp (enc, "binary", 6) == 0 ) {</div><div class='del'>-                priv-&gt;encode_mode = CHANGELOG_ENCODE_BINARY;</div><div class='del'>-        } else if ( strncmp (enc, "ascii", 5) == 0 ) {</div><div class='del'>-                priv-&gt;encode_mode = CHANGELOG_ENCODE_ASCII;</div><div class='del'>-        }</div><div class='add'>+    if (strncmp(enc, "binary", 6) == 0) {</div><div class='add'>+        priv-&gt;encode_mode = CHANGELOG_ENCODE_BINARY;</div><div class='add'>+    } else if (strncmp(enc, "ascii", 5) == 0) {</div><div class='add'>+        priv-&gt;encode_mode = CHANGELOG_ENCODE_ASCII;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> changelog_assign_barrier_timeout(changelog_priv_t *priv, uint32_t timeout)</div><div class='ctx'> {</div><div class='del'>-       LOCK (&amp;priv-&gt;lock);</div><div class='del'>-       {</div><div class='del'>-               priv-&gt;timeout.tv_sec = timeout;</div><div class='del'>-       }</div><div class='del'>-       UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        priv-&gt;timeout.tv_sec = timeout;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* cleanup any helper threads that are running */</div><div class='ctx'> static void</div><div class='del'>-changelog_cleanup_helper_threads (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_cleanup_helper_threads(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        if (priv-&gt;cr.rollover_th) {</div><div class='del'>-                (void) changelog_thread_cleanup (this, priv-&gt;cr.rollover_th);</div><div class='del'>-                priv-&gt;cr.rollover_th = 0;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;cr.rollover_th) {</div><div class='add'>+        (void)changelog_thread_cleanup(this, priv-&gt;cr.rollover_th);</div><div class='add'>+        priv-&gt;cr.rollover_th = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;cf.fsync_th) {</div><div class='del'>-                (void) changelog_thread_cleanup (this, priv-&gt;cf.fsync_th);</div><div class='del'>-                priv-&gt;cf.fsync_th = 0;</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;cf.fsync_th) {</div><div class='add'>+        (void)changelog_thread_cleanup(this, priv-&gt;cf.fsync_th);</div><div class='add'>+        priv-&gt;cf.fsync_th = 0;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* spawn helper thread; cleaning up in case of errors */</div><div class='ctx'> static int</div><div class='del'>-changelog_spawn_helper_threads (xlator_t *this, changelog_priv_t *priv)</div><div class='del'>-{</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        /* Geo-Rep snapshot dependency:</div><div class='del'>-         *</div><div class='del'>-         * To implement explicit rollover of changlog journal on barrier</div><div class='del'>-         * notification, a pipe is created to communicate between</div><div class='del'>-         * 'changelog_rollover' thread and changelog main thread. The select</div><div class='del'>-         * call used to wait till roll-over time in changelog_rollover thread</div><div class='del'>-         * is modified to wait on read end of the pipe. When barrier</div><div class='del'>-         * notification comes (i.e, in 'reconfigure'), select in</div><div class='del'>-         * changelog_rollover thread is woken up explicitly by writing into</div><div class='del'>-         * the write end of the pipe in 'reconfigure'.</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        priv-&gt;cr.notify = _gf_false;</div><div class='del'>-        priv-&gt;cr.this = this;</div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;cr.rollover_th,</div><div class='del'>-                                NULL, changelog_rollover, priv, "clogro");</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;fsync_interval) {</div><div class='del'>-                priv-&gt;cf.this = this;</div><div class='del'>-                ret = gf_thread_create (&amp;priv-&gt;cf.fsync_th,</div><div class='del'>-                                        NULL, changelog_fsync_thread, priv,</div><div class='del'>-                                        "clogfsyn");</div><div class='del'>-        }</div><div class='add'>+changelog_spawn_helper_threads(xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    /* Geo-Rep snapshot dependency:</div><div class='add'>+     *</div><div class='add'>+     * To implement explicit rollover of changlog journal on barrier</div><div class='add'>+     * notification, a pipe is created to communicate between</div><div class='add'>+     * 'changelog_rollover' thread and changelog main thread. The select</div><div class='add'>+     * call used to wait till roll-over time in changelog_rollover thread</div><div class='add'>+     * is modified to wait on read end of the pipe. When barrier</div><div class='add'>+     * notification comes (i.e, in 'reconfigure'), select in</div><div class='add'>+     * changelog_rollover thread is woken up explicitly by writing into</div><div class='add'>+     * the write end of the pipe in 'reconfigure'.</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    priv-&gt;cr.notify = _gf_false;</div><div class='add'>+    priv-&gt;cr.this = this;</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;cr.rollover_th, NULL, changelog_rollover,</div><div class='add'>+                           priv, "clogro");</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;fsync_interval) {</div><div class='add'>+        priv-&gt;cf.this = this;</div><div class='add'>+        ret = gf_thread_create(&amp;priv-&gt;cf.fsync_th, NULL, changelog_fsync_thread,</div><div class='add'>+                               priv, "clogfsyn");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        changelog_cleanup_helper_threads(this, priv);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                changelog_cleanup_helper_threads (this, priv);</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='del'>-{</div><div class='del'>-        changelog_priv_t       *priv            = NULL;</div><div class='del'>-        dict_t                 *dict            = NULL;</div><div class='del'>-        char                    buf[1]          = {1};</div><div class='del'>-        int                     barrier         = DICT_DEFAULT;</div><div class='del'>-        gf_boolean_t            bclean_req      = _gf_false;</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        int                     ret1            = 0;</div><div class='del'>-        struct list_head        queue           = {0, };</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;queue);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='add'>+{</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    char buf[1] = {1};</div><div class='add'>+    int barrier = DICT_DEFAULT;</div><div class='add'>+    gf_boolean_t bclean_req = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int ret1 = 0;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;queue);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (event == GF_EVENT_TRANSLATOR_OP) {</div><div class='add'>+        dict = data;</div><div class='add'>+</div><div class='add'>+        barrier = dict_get_str_boolean(dict, "barrier", DICT_DEFAULT);</div><div class='add'>+</div><div class='add'>+        switch (barrier) {</div><div class='add'>+            case DICT_ERROR:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CHANGELOG_MSG_DICT_GET_FAILED,</div><div class='add'>+                       "Barrier dict_get_str_boolean failed");</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='ctx'> </div><div class='del'>-        if (event == GF_EVENT_TRANSLATOR_OP) {</div><div class='add'>+            case BARRIER_OFF:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+                       "Barrier off notification");</div><div class='ctx'> </div><div class='del'>-                dict = data;</div><div class='del'>-</div><div class='del'>-                barrier = dict_get_str_boolean (dict, "barrier", DICT_DEFAULT);</div><div class='add'>+                CHANGELOG_NOT_ON_THEN_GOTO(priv, ret, out);</div><div class='add'>+                LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+                {</div><div class='add'>+                    changelog_snap_logging_stop(this, priv);</div><div class='add'>+                }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='ctx'> </div><div class='del'>-                switch (barrier) {</div><div class='del'>-                case DICT_ERROR:</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_MSG_DICT_GET_FAILED,</div><div class='del'>-                                "Barrier dict_get_str_boolean failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                case BARRIER_OFF:</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                                "Barrier off notification");</div><div class='del'>-</div><div class='del'>-                        CHANGELOG_NOT_ON_THEN_GOTO(priv, ret, out);</div><div class='del'>-                        LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-                        {</div><div class='del'>-                                changelog_snap_logging_stop (this, priv);</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-</div><div class='del'>-                        LOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-                        {</div><div class='del'>-                                if (priv-&gt;bflags.barrier_ext == _gf_false)</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-</div><div class='del'>-                        if (ret == -1 ) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CHANGELOG_MSG_BARRIER_ERROR,</div><div class='del'>-                                        "Received another barrier off"</div><div class='del'>-                                        " notification while already off");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Stop changelog barrier and dequeue all fops */</div><div class='del'>-                        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                if (priv-&gt;barrier_enabled == _gf_true)</div><div class='del'>-                                        __chlog_barrier_disable (this, &amp;queue);</div><div class='del'>-                                else</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-                        /* If ret = -1, then changelog barrier is already</div><div class='del'>-                         * disabled because of error or timeout.</div><div class='del'>-                         */</div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-                                chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='del'>-                                gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                       CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                                       "Disabled changelog barrier");</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CHANGELOG_MSG_BARRIER_ERROR,</div><div class='del'>-                                        "Changelog barrier already disabled");</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        LOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-                        {</div><div class='del'>-                                priv-&gt;bflags.barrier_ext = _gf_false;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                case BARRIER_ON:</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                                "Barrier on notification");</div><div class='del'>-</div><div class='del'>-                        CHANGELOG_NOT_ON_THEN_GOTO(priv, ret, out);</div><div class='del'>-                        LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-                        {</div><div class='del'>-                                changelog_snap_logging_start (this, priv);</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='del'>-</div><div class='del'>-                        LOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-                        {</div><div class='del'>-                                if (priv-&gt;bflags.barrier_ext == _gf_true)</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                else</div><div class='del'>-                                        priv-&gt;bflags.barrier_ext = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;bflags.lock);</div><div class='del'>-</div><div class='del'>-                        if (ret == -1 ) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CHANGELOG_MSG_BARRIER_ERROR,</div><div class='del'>-                                        "Received another barrier on"</div><div class='del'>-                                        "notification when last one is"</div><div class='del'>-                                        "not served yet");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = pthread_mutex_lock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_1 (ret, out,</div><div class='del'>-                                                                    bclean_req);</div><div class='del'>-                        {</div><div class='del'>-                                priv-&gt;bn.bnotify = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-                        ret = pthread_mutex_unlock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_1 (ret, out,</div><div class='del'>-                                                                    bclean_req);</div><div class='del'>-</div><div class='del'>-                        /* Start changelog barrier */</div><div class='del'>-                        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                        {</div><div class='del'>-                                ret = __chlog_barrier_enable (this, priv);</div><div class='del'>-                        }</div><div class='del'>-                        UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                changelog_barrier_cleanup (this, priv, &amp;queue);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                               CHANGELOG_MSG_BARRIER_INFO,</div><div class='del'>-                               "Enabled changelog barrier");</div><div class='del'>-</div><div class='del'>-                        ret = changelog_barrier_notify(priv, buf);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CHANGELOG_MSG_WRITE_FAILED,</div><div class='del'>-                                        "Explicit roll over: write failed");</div><div class='del'>-                                changelog_barrier_cleanup (this, priv, &amp;queue);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        ret = pthread_mutex_lock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_1 (ret, out,</div><div class='del'>-                                                                    bclean_req);</div><div class='del'>-                        {</div><div class='del'>-                                /* The while condition check is required here to</div><div class='del'>-                                 * handle spurious wakeup of cond wait that can</div><div class='del'>-                                 * happen with pthreads. See man page */</div><div class='del'>-                                while (priv-&gt;bn.bnotify == _gf_true) {</div><div class='del'>-                                        ret = pthread_cond_wait (</div><div class='del'>-                                                       &amp;priv-&gt;bn.bnotify_cond,</div><div class='del'>-                                                       &amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                                        CHANGELOG_PTHREAD_ERROR_HANDLE_1 (ret,</div><div class='del'>-                                                                          out,</div><div class='del'>-                                                                    bclean_req);</div><div class='del'>-                                }</div><div class='del'>-                                if (priv-&gt;bn.bnotify_error == _gf_true) {</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        priv-&gt;bn.bnotify_error = _gf_false;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        ret1 = pthread_mutex_unlock (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                        CHANGELOG_PTHREAD_ERROR_HANDLE_1 (ret1, out,</div><div class='del'>-                                                          bclean_req);</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                CHANGELOG_MSG_BNOTIFY_INFO,</div><div class='del'>-                                "Woke up: bnotify conditional wait");</div><div class='del'>-</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                case DICT_DEFAULT:</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CHANGELOG_MSG_DICT_GET_FAILED,</div><div class='del'>-                                "barrier key not found");</div><div class='add'>+                LOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+                {</div><div class='add'>+                    if (priv-&gt;bflags.barrier_ext == _gf_false)</div><div class='ctx'>                         ret = -1;</div><div class='del'>-                        goto out;</div><div class='add'>+                }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           CHANGELOG_MSG_BARRIER_ERROR,</div><div class='add'>+                           "Received another barrier off"</div><div class='add'>+                           " notification while already off");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-                default:</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                CHANGELOG_MSG_DICT_GET_FAILED,</div><div class='del'>-                                "Something went bad in dict_get_str_boolean");</div><div class='add'>+                /* Stop changelog barrier and dequeue all fops */</div><div class='add'>+                LOCK(&amp;priv-&gt;lock);</div><div class='add'>+                {</div><div class='add'>+                    if (priv-&gt;barrier_enabled == _gf_true)</div><div class='add'>+                        __chlog_barrier_disable(this, &amp;queue);</div><div class='add'>+                    else</div><div class='ctx'>                         ret = -1;</div><div class='del'>-                        goto out;</div><div class='ctx'>                 }</div><div class='del'>-        } else {</div><div class='del'>-                ret = default_notify (this, event, data);</div><div class='del'>-        }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+                /* If ret = -1, then changelog barrier is already</div><div class='add'>+                 * disabled because of error or timeout.</div><div class='add'>+                 */</div><div class='add'>+                if (ret == 0) {</div><div class='add'>+                    chlog_barrier_dequeue_all(this, &amp;queue);</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_INFO, 0,</div><div class='add'>+                           CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+                           "Disabled changelog barrier");</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           CHANGELOG_MSG_BARRIER_ERROR,</div><div class='add'>+                           "Changelog barrier already disabled");</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (bclean_req)</div><div class='del'>-                changelog_barrier_cleanup (this, priv, &amp;queue);</div><div class='add'>+                LOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+                {</div><div class='add'>+                    priv-&gt;bflags.barrier_ext = _gf_false;</div><div class='add'>+                }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;bflags.lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int     ret = -1;</div><div class='add'>+            case BARRIER_ON:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+                       "Barrier on notification");</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+                CHANGELOG_NOT_ON_THEN_GOTO(priv, ret, out);</div><div class='add'>+                LOCK(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+                {</div><div class='add'>+                    changelog_snap_logging_start(this, priv);</div><div class='add'>+                }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;c_snap_lock);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_changelog_mt_end + 1);</div><div class='add'>+                LOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+                {</div><div class='add'>+                    if (priv-&gt;bflags.barrier_ext == _gf_true)</div><div class='add'>+                        ret = -1;</div><div class='add'>+                    else</div><div class='add'>+                        priv-&gt;bflags.barrier_ext = _gf_true;</div><div class='add'>+                }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;bflags.lock);</div><div class='add'>+</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           CHANGELOG_MSG_BARRIER_ERROR,</div><div class='add'>+                           "Received another barrier on"</div><div class='add'>+                           "notification when last one is"</div><div class='add'>+                           "not served yet");</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        CHANGELOG_MSG_NO_MEMORY, "Memory accounting"</div><div class='del'>-                        " init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+                ret = pthread_mutex_lock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+                CHANGELOG_PTHREAD_ERROR_HANDLE_1(ret, out, bclean_req);</div><div class='add'>+                {</div><div class='add'>+                    priv-&gt;bn.bnotify = _gf_true;</div><div class='add'>+                }</div><div class='add'>+                ret = pthread_mutex_unlock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+                CHANGELOG_PTHREAD_ERROR_HANDLE_1(ret, out, bclean_req);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+                /* Start changelog barrier */</div><div class='add'>+                LOCK(&amp;priv-&gt;lock);</div><div class='add'>+                {</div><div class='add'>+                    ret = __chlog_barrier_enable(this, priv);</div><div class='add'>+                }</div><div class='add'>+                UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+                if (ret == -1) {</div><div class='add'>+                    changelog_barrier_cleanup(this, priv, &amp;queue);</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-changelog_init (xlator_t *this, changelog_priv_t *priv)</div><div class='del'>-{</div><div class='del'>-        int                  i   = 0;</div><div class='del'>-        int                  ret = -1;</div><div class='del'>-        struct timeval       tv  = {0,};</div><div class='del'>-        changelog_log_data_t cld = {0,};</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BARRIER_INFO,</div><div class='add'>+                       "Enabled changelog barrier");</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;tv, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CHANGELOG_MSG_GET_TIME_OP_FAILED,</div><div class='del'>-                        "gettimeofday() failure");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+                ret = changelog_barrier_notify(priv, buf);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           CHANGELOG_MSG_WRITE_FAILED,</div><div class='add'>+                           "Explicit roll over: write failed");</div><div class='add'>+                    changelog_barrier_cleanup(this, priv, &amp;queue);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='add'>+                }</div><div class='add'>+</div><div class='add'>+                ret = pthread_mutex_lock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+                CHANGELOG_PTHREAD_ERROR_HANDLE_1(ret, out, bclean_req);</div><div class='add'>+                {</div><div class='add'>+                    /* The while condition check is required here to</div><div class='add'>+                     * handle spurious wakeup of cond wait that can</div><div class='add'>+                     * happen with pthreads. See man page */</div><div class='add'>+                    while (priv-&gt;bn.bnotify == _gf_true) {</div><div class='add'>+                        ret = pthread_cond_wait(&amp;priv-&gt;bn.bnotify_cond,</div><div class='add'>+                                                &amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+                        CHANGELOG_PTHREAD_ERROR_HANDLE_1(ret, out, bclean_req);</div><div class='add'>+                    }</div><div class='add'>+                    if (priv-&gt;bn.bnotify_error == _gf_true) {</div><div class='add'>+                        ret = -1;</div><div class='add'>+                        priv-&gt;bn.bnotify_error = _gf_false;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+                ret1 = pthread_mutex_unlock(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+                CHANGELOG_PTHREAD_ERROR_HANDLE_1(ret1, out, bclean_req);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_BNOTIFY_INFO,</div><div class='add'>+                       "Woke up: bnotify conditional wait");</div><div class='ctx'> </div><div class='del'>-        priv-&gt;slice.tv_start = tv;</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;maps[CHANGELOG_TYPE_DATA]           = "D ";</div><div class='del'>-        priv-&gt;maps[CHANGELOG_TYPE_METADATA]       = "M ";</div><div class='del'>-        priv-&gt;maps[CHANGELOG_TYPE_METADATA_XATTR] = "M ";</div><div class='del'>-        priv-&gt;maps[CHANGELOG_TYPE_ENTRY]          = "E ";</div><div class='add'>+            case DICT_DEFAULT:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CHANGELOG_MSG_DICT_GET_FAILED, "barrier key not found");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='ctx'> </div><div class='del'>-        for (; i &lt; CHANGELOG_MAX_TYPE; i++) {</div><div class='del'>-                /* start with version 1 */</div><div class='del'>-                priv-&gt;slice.changelog_version[i] = 1;</div><div class='add'>+            default:</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+                       CHANGELOG_MSG_DICT_GET_FAILED,</div><div class='add'>+                       "Something went bad in dict_get_str_boolean");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        ret = default_notify(this, event, data);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;active)</div><div class='del'>-                return ret;</div><div class='add'>+out:</div><div class='add'>+    if (bclean_req)</div><div class='add'>+        changelog_barrier_cleanup(this, priv, &amp;queue);</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * start with a fresh changelog file every time. this is done</div><div class='del'>-         * in case there was an encoding change. so... things are kept</div><div class='del'>-         * simple here.</div><div class='del'>-         */</div><div class='del'>-        ret = changelog_fill_rollover_data (&amp;cld, _gf_false);</div><div class='del'>-        if(ret)</div><div class='del'>-                goto out;</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret = htime_open (this, priv, cld.cld_roll_time);</div><div class='del'>-        /* call htime open with cld's rollover_time */</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+int32_t</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = changelog_inject_single_event (this, priv, &amp;cld);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        /* ... and finally spawn the helpers threads */</div><div class='del'>-        ret = changelog_spawn_helper_threads (this, priv);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_changelog_mt_end + 1);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+               "Memory accounting"</div><div class='add'>+               " init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+changelog_init(xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    changelog_log_data_t cld = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;tv, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               CHANGELOG_MSG_GET_TIME_OP_FAILED, "gettimeofday() failure");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;slice.tv_start = tv;</div><div class='add'>+</div><div class='add'>+    priv-&gt;maps[CHANGELOG_TYPE_DATA] = "D ";</div><div class='add'>+    priv-&gt;maps[CHANGELOG_TYPE_METADATA] = "M ";</div><div class='add'>+    priv-&gt;maps[CHANGELOG_TYPE_METADATA_XATTR] = "M ";</div><div class='add'>+    priv-&gt;maps[CHANGELOG_TYPE_ENTRY] = "E ";</div><div class='add'>+</div><div class='add'>+    for (; i &lt; CHANGELOG_MAX_TYPE; i++) {</div><div class='add'>+        /* start with version 1 */</div><div class='add'>+        priv-&gt;slice.changelog_version[i] = 1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;active)</div><div class='add'>+        return ret;</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * start with a fresh changelog file every time. this is done</div><div class='add'>+     * in case there was an encoding change. so... things are kept</div><div class='add'>+     * simple here.</div><div class='add'>+     */</div><div class='add'>+    ret = changelog_fill_rollover_data(&amp;cld, _gf_false);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = htime_open(this, priv, cld.cld_roll_time);</div><div class='add'>+    /* call htime open with cld's rollover_time */</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = changelog_inject_single_event(this, priv, &amp;cld);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* ... and finally spawn the helpers threads */</div><div class='add'>+    ret = changelog_spawn_helper_threads(this, priv);</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='ctx'>  * Init barrier related condition variables and locks</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-changelog_barrier_pthread_init (xlator_t *this, changelog_priv_t *priv)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t    bn_mutex_init         = _gf_false;</div><div class='del'>-        gf_boolean_t    bn_cond_init          = _gf_false;</div><div class='del'>-        gf_boolean_t    dm_mutex_black_init   = _gf_false;</div><div class='del'>-        gf_boolean_t    dm_cond_black_init    = _gf_false;</div><div class='del'>-        gf_boolean_t    dm_mutex_white_init   = _gf_false;</div><div class='del'>-        gf_boolean_t    dm_cond_white_init    = _gf_false;</div><div class='del'>-        gf_boolean_t    cr_mutex_init         = _gf_false;</div><div class='del'>-        gf_boolean_t    cr_cond_init          = _gf_false;</div><div class='del'>-        int             ret                   = 0;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_mutex_init(&amp;priv-&gt;bn.bnotify_mutex, NULL)) != 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='del'>-                         "bnotify pthread_mutex_init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        bn_mutex_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_cond_init(&amp;priv-&gt;bn.bnotify_cond, NULL)) != 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='del'>-                         "bnotify pthread_cond_init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        bn_cond_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_mutex_init(&amp;priv-&gt;dm.drain_black_mutex, NULL)) != 0)</div><div class='del'>-        {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='del'>-                         "drain_black pthread_mutex_init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dm_mutex_black_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_cond_init(&amp;priv-&gt;dm.drain_black_cond, NULL)) != 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='del'>-                         "drain_black pthread_cond_init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dm_cond_black_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_mutex_init(&amp;priv-&gt;dm.drain_white_mutex, NULL)) != 0)</div><div class='del'>-        {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='del'>-                         "drain_white pthread_mutex_init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dm_mutex_white_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_cond_init(&amp;priv-&gt;dm.drain_white_cond, NULL)) != 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='del'>-                         "drain_white pthread_cond_init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        dm_cond_white_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((pthread_mutex_init(&amp;priv-&gt;cr.lock, NULL)) != 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='del'>-                         "changelog_rollover lock init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cr_mutex_init = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((pthread_cond_init(&amp;priv-&gt;cr.cond, NULL)) != 0) {</div><div class='del'>-                gf_smsg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                         CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='del'>-                         "changelog_rollover cond init failed",</div><div class='del'>-                         "ret=%d", ret,</div><div class='del'>-                         NULL);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cr_cond_init = _gf_true;</div><div class='del'>- out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (bn_mutex_init)</div><div class='del'>-                        pthread_mutex_destroy(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-                if (bn_cond_init)</div><div class='del'>-                        pthread_cond_destroy (&amp;priv-&gt;bn.bnotify_cond);</div><div class='del'>-                if (dm_mutex_black_init)</div><div class='del'>-                        pthread_mutex_destroy(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-                if (dm_cond_black_init)</div><div class='del'>-                        pthread_cond_destroy (&amp;priv-&gt;dm.drain_black_cond);</div><div class='del'>-                if (dm_mutex_white_init)</div><div class='del'>-                        pthread_mutex_destroy(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-                if (dm_cond_white_init)</div><div class='del'>-                        pthread_cond_destroy (&amp;priv-&gt;dm.drain_white_cond);</div><div class='del'>-                if (cr_mutex_init)</div><div class='del'>-                        pthread_mutex_destroy(&amp;priv-&gt;cr.lock);</div><div class='del'>-                if (cr_cond_init)</div><div class='del'>-                        pthread_cond_destroy (&amp;priv-&gt;cr.cond);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+changelog_barrier_pthread_init(xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t bn_mutex_init = _gf_false;</div><div class='add'>+    gf_boolean_t bn_cond_init = _gf_false;</div><div class='add'>+    gf_boolean_t dm_mutex_black_init = _gf_false;</div><div class='add'>+    gf_boolean_t dm_cond_black_init = _gf_false;</div><div class='add'>+    gf_boolean_t dm_mutex_white_init = _gf_false;</div><div class='add'>+    gf_boolean_t dm_cond_white_init = _gf_false;</div><div class='add'>+    gf_boolean_t cr_mutex_init = _gf_false;</div><div class='add'>+    gf_boolean_t cr_cond_init = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_mutex_init(&amp;priv-&gt;bn.bnotify_mutex, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='add'>+                "bnotify pthread_mutex_init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    bn_mutex_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_cond_init(&amp;priv-&gt;bn.bnotify_cond, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='add'>+                "bnotify pthread_cond_init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    bn_cond_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_mutex_init(&amp;priv-&gt;dm.drain_black_mutex, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='add'>+                "drain_black pthread_mutex_init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dm_mutex_black_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_cond_init(&amp;priv-&gt;dm.drain_black_cond, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='add'>+                "drain_black pthread_cond_init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dm_cond_black_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_mutex_init(&amp;priv-&gt;dm.drain_white_mutex, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='add'>+                "drain_white pthread_mutex_init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dm_mutex_white_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_cond_init(&amp;priv-&gt;dm.drain_white_cond, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='add'>+                "drain_white pthread_cond_init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    dm_cond_white_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((pthread_mutex_init(&amp;priv-&gt;cr.lock, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_MUTEX_INIT_FAILED,</div><div class='add'>+                "changelog_rollover lock init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cr_mutex_init = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((pthread_cond_init(&amp;priv-&gt;cr.cond, NULL)) != 0) {</div><div class='add'>+        gf_smsg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                CHANGELOG_MSG_PTHREAD_COND_INIT_FAILED,</div><div class='add'>+                "changelog_rollover cond init failed", "ret=%d", ret, NULL);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cr_cond_init = _gf_true;</div><div class='add'>+out:</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (bn_mutex_init)</div><div class='add'>+            pthread_mutex_destroy(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+        if (bn_cond_init)</div><div class='add'>+            pthread_cond_destroy(&amp;priv-&gt;bn.bnotify_cond);</div><div class='add'>+        if (dm_mutex_black_init)</div><div class='add'>+            pthread_mutex_destroy(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+        if (dm_cond_black_init)</div><div class='add'>+            pthread_cond_destroy(&amp;priv-&gt;dm.drain_black_cond);</div><div class='add'>+        if (dm_mutex_white_init)</div><div class='add'>+            pthread_mutex_destroy(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+        if (dm_cond_white_init)</div><div class='add'>+            pthread_cond_destroy(&amp;priv-&gt;dm.drain_white_cond);</div><div class='add'>+        if (cr_mutex_init)</div><div class='add'>+            pthread_mutex_destroy(&amp;priv-&gt;cr.lock);</div><div class='add'>+        if (cr_cond_init)</div><div class='add'>+            pthread_cond_destroy(&amp;priv-&gt;cr.cond);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Destroy barrier related condition variables and locks */</div><div class='ctx'> static void</div><div class='del'>-changelog_barrier_pthread_destroy (changelog_priv_t *priv)</div><div class='add'>+changelog_barrier_pthread_destroy(changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;bn.bnotify_mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;bn.bnotify_cond);</div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;dm.drain_black_mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;dm.drain_black_cond);</div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;dm.drain_white_mutex);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;dm.drain_white_cond);</div><div class='del'>-        pthread_mutex_destroy(&amp;priv-&gt;cr.lock);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;cr.cond);</div><div class='del'>-        LOCK_DESTROY (&amp;priv-&gt;bflags.lock);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;bn.bnotify_mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;bn.bnotify_cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;dm.drain_black_mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;dm.drain_black_cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;dm.drain_white_mutex);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;dm.drain_white_cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;cr.lock);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;cr.cond);</div><div class='add'>+    LOCK_DESTROY(&amp;priv-&gt;bflags.lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='del'>-{</div><div class='del'>-        int                     ret            = 0;</div><div class='del'>-        char                   *tmp            = NULL;</div><div class='del'>-        changelog_priv_t       *priv           = NULL;</div><div class='del'>-        gf_boolean_t            active_earlier = _gf_true;</div><div class='del'>-        gf_boolean_t            active_now     = _gf_true;</div><div class='del'>-        changelog_time_slice_t *slice          = NULL;</div><div class='del'>-        changelog_log_data_t    cld            = {0,};</div><div class='del'>-        char    htime_dir[PATH_MAX]            = {0,};</div><div class='del'>-        char    csnap_dir[PATH_MAX]            = {0,};</div><div class='del'>-        struct timeval          tv             = {0,};</div><div class='del'>-        uint32_t                timeout        = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = -1;</div><div class='del'>-        active_earlier = priv-&gt;active;</div><div class='del'>-</div><div class='del'>-        /* first stop the rollover and the fsync thread */</div><div class='del'>-        changelog_cleanup_helper_threads (this, priv);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("changelog-dir", tmp, options, str, out);</div><div class='del'>-        if (!tmp) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_DIR_OPTIONS_NOT_SET,</div><div class='del'>-                        "\"changelog-dir\" option is not set");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (priv-&gt;changelog_dir);</div><div class='del'>-        priv-&gt;changelog_dir = gf_strdup (tmp);</div><div class='del'>-        if (!priv-&gt;changelog_dir)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = mkdir_p (priv-&gt;changelog_dir, 0600, _gf_true);</div><div class='del'>-</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    gf_boolean_t active_earlier = _gf_true;</div><div class='add'>+    gf_boolean_t active_now = _gf_true;</div><div class='add'>+    changelog_time_slice_t *slice = NULL;</div><div class='add'>+    changelog_log_data_t cld = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char htime_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char csnap_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uint32_t timeout = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = -1;</div><div class='add'>+    active_earlier = priv-&gt;active;</div><div class='add'>+</div><div class='add'>+    /* first stop the rollover and the fsync thread */</div><div class='add'>+    changelog_cleanup_helper_threads(this, priv);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("changelog-dir", tmp, options, str, out);</div><div class='add'>+    if (!tmp) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_DIR_OPTIONS_NOT_SET,</div><div class='add'>+               "\"changelog-dir\" option is not set");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(priv-&gt;changelog_dir);</div><div class='add'>+    priv-&gt;changelog_dir = gf_strdup(tmp);</div><div class='add'>+    if (!priv-&gt;changelog_dir)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = mkdir_p(priv-&gt;changelog_dir, 0600, _gf_true);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, htime_dir);</div><div class='add'>+    ret = mkdir_p(htime_dir, 0600, _gf_true);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    CHANGELOG_FILL_CSNAP_DIR(priv-&gt;changelog_dir, csnap_dir);</div><div class='add'>+    ret = mkdir_p(csnap_dir, 0600, _gf_true);</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("changelog", active_now, options, bool, out);</div><div class='add'>+</div><div class='add'>+    /**</div><div class='add'>+     * changelog_handle_change() handles changes that could possibly</div><div class='add'>+     * have been submit changes before changelog deactivation.</div><div class='add'>+     */</div><div class='add'>+    if (!active_now)</div><div class='add'>+        priv-&gt;active = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("op-mode", tmp, options, str, out);</div><div class='add'>+    changelog_assign_opmode(priv, tmp);</div><div class='add'>+</div><div class='add'>+    tmp = NULL;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("encoding", tmp, options, str, out);</div><div class='add'>+    changelog_assign_encoding(priv, tmp);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("rollover-time", priv-&gt;rollover_time, options, int32, out);</div><div class='add'>+    GF_OPTION_RECONF("fsync-interval", priv-&gt;fsync_interval, options, int32,</div><div class='add'>+                     out);</div><div class='add'>+    GF_OPTION_RECONF("changelog-barrier-timeout", timeout, options, time, out);</div><div class='add'>+    changelog_assign_barrier_timeout(priv, timeout);</div><div class='add'>+</div><div class='add'>+    GF_OPTION_RECONF("capture-del-path", priv-&gt;capture_del_path, options, bool,</div><div class='add'>+                     out);</div><div class='add'>+</div><div class='add'>+    if (active_now || active_earlier) {</div><div class='add'>+        ret = changelog_fill_rollover_data(&amp;cld, !active_now);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, htime_dir);</div><div class='del'>-        ret = mkdir_p (htime_dir, 0600, _gf_true);</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+        slice = &amp;priv-&gt;slice;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_CSNAP_DIR(priv-&gt;changelog_dir, csnap_dir);</div><div class='del'>-        ret = mkdir_p (csnap_dir, 0600, _gf_true);</div><div class='add'>+        LOCK(&amp;priv-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            ret = changelog_inject_single_event(this, priv, &amp;cld);</div><div class='add'>+            if (!ret &amp;&amp; active_now)</div><div class='add'>+                SLICE_VERSION_UPDATE(slice);</div><div class='add'>+        }</div><div class='add'>+        UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("changelog", active_now, options, bool, out);</div><div class='del'>-</div><div class='del'>-        /**</div><div class='del'>-         * changelog_handle_change() handles changes that could possibly</div><div class='del'>-         * have been submit changes before changelog deactivation.</div><div class='del'>-         */</div><div class='del'>-        if (!active_now)</div><div class='del'>-                priv-&gt;active = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("op-mode", tmp, options, str, out);</div><div class='del'>-        changelog_assign_opmode (priv, tmp);</div><div class='del'>-</div><div class='del'>-        tmp = NULL;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("encoding", tmp, options, str, out);</div><div class='del'>-        changelog_assign_encoding (priv, tmp);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("rollover-time",</div><div class='del'>-                          priv-&gt;rollover_time, options, int32, out);</div><div class='del'>-        GF_OPTION_RECONF ("fsync-interval",</div><div class='del'>-                          priv-&gt;fsync_interval, options, int32, out);</div><div class='del'>-        GF_OPTION_RECONF ("changelog-barrier-timeout",</div><div class='del'>-                          timeout, options, time, out);</div><div class='del'>-        changelog_assign_barrier_timeout (priv, timeout);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("capture-del-path", priv-&gt;capture_del_path, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-</div><div class='del'>-        if (active_now || active_earlier) {</div><div class='del'>-                ret = changelog_fill_rollover_data (&amp;cld, !active_now);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                slice = &amp;priv-&gt;slice;</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        ret = changelog_inject_single_event (this, priv, &amp;cld);</div><div class='del'>-                        if (!ret &amp;&amp; active_now)</div><div class='del'>-                                SLICE_VERSION_UPDATE (slice);</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (active_now) {</div><div class='del'>-                        if (!active_earlier) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0,</div><div class='del'>-                                        CHANGELOG_MSG_HTIME_INFO,</div><div class='del'>-                                        "Reconfigure: Changelog Enable");</div><div class='del'>-                                if (gettimeofday(&amp;tv, NULL) ) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                                CHANGELOG_MSG_HTIME_ERROR,</div><div class='del'>-                                                 "unable to fetch htime");</div><div class='del'>-                                        ret = -1;</div><div class='del'>-                                        goto out;</div><div class='del'>-                                }</div><div class='del'>-                                htime_create (this, priv, tv.tv_sec);</div><div class='del'>-                        }</div><div class='del'>-                        ret = changelog_spawn_helper_threads (this, priv);</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if (active_now) {</div><div class='add'>+            if (!active_earlier) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, CHANGELOG_MSG_HTIME_INFO,</div><div class='add'>+                       "Reconfigure: Changelog Enable");</div><div class='add'>+                if (gettimeofday(&amp;tv, NULL)) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                           CHANGELOG_MSG_HTIME_ERROR, "unable to fetch htime");</div><div class='add'>+                    ret = -1;</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+                htime_create(this, priv, tv.tv_sec);</div><div class='add'>+            }</div><div class='add'>+            ret = changelog_spawn_helper_threads(this, priv);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* TODO */</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "changelog reconfigured");</div><div class='del'>-                if (active_now &amp;&amp; priv)</div><div class='del'>-                        priv-&gt;active = _gf_true;</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* TODO */</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "changelog reconfigured");</div><div class='add'>+        if (active_now &amp;&amp; priv)</div><div class='add'>+            priv-&gt;active = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_freeup_options (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_freeup_options(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = priv-&gt;cb-&gt;dtor (this, &amp;priv-&gt;cd);</div><div class='del'>-        if (ret)</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_FREEUP_FAILED,</div><div class='del'>-                        "could not cleanup bootstrapper");</div><div class='del'>-        GF_FREE (priv-&gt;changelog_brick);</div><div class='del'>-        GF_FREE (priv-&gt;changelog_dir);</div><div class='add'>+    ret = priv-&gt;cb-&gt;dtor(this, &amp;priv-&gt;cd);</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_FREEUP_FAILED,</div><div class='add'>+               "could not cleanup bootstrapper");</div><div class='add'>+    GF_FREE(priv-&gt;changelog_brick);</div><div class='add'>+    GF_FREE(priv-&gt;changelog_dir);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-changelog_init_options (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_init_options(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        int       ret            = 0;</div><div class='del'>-        char     *tmp            = NULL;</div><div class='del'>-        uint32_t  timeout        = 0;</div><div class='del'>-        char htime_dir[PATH_MAX] = {0,};</div><div class='del'>-        char csnap_dir[PATH_MAX] = {0,};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+    uint32_t timeout = 0;</div><div class='add'>+    char htime_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char csnap_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("changelog-brick", tmp, str, error_return);</div><div class='del'>-        priv-&gt;changelog_brick = gf_strdup (tmp);</div><div class='del'>-        if (!priv-&gt;changelog_brick)</div><div class='del'>-                goto error_return;</div><div class='add'>+    GF_OPTION_INIT("changelog-brick", tmp, str, error_return);</div><div class='add'>+    priv-&gt;changelog_brick = gf_strdup(tmp);</div><div class='add'>+    if (!priv-&gt;changelog_brick)</div><div class='add'>+        goto error_return;</div><div class='ctx'> </div><div class='del'>-        tmp = NULL;</div><div class='add'>+    tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("changelog-dir", tmp, str, dealloc_1);</div><div class='del'>-        priv-&gt;changelog_dir = gf_strdup (tmp);</div><div class='del'>-        if (!priv-&gt;changelog_dir)</div><div class='del'>-                goto dealloc_1;</div><div class='add'>+    GF_OPTION_INIT("changelog-dir", tmp, str, dealloc_1);</div><div class='add'>+    priv-&gt;changelog_dir = gf_strdup(tmp);</div><div class='add'>+    if (!priv-&gt;changelog_dir)</div><div class='add'>+        goto dealloc_1;</div><div class='ctx'> </div><div class='del'>-        tmp = NULL;</div><div class='add'>+    tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        /**</div><div class='del'>-         * create the directory even if change-logging would be inactive</div><div class='del'>-         * so that consumers can _look_ into it (finding nothing...)</div><div class='del'>-         */</div><div class='del'>-        ret = mkdir_p (priv-&gt;changelog_dir, 0600, _gf_true);</div><div class='add'>+    /**</div><div class='add'>+     * create the directory even if change-logging would be inactive</div><div class='add'>+     * so that consumers can _look_ into it (finding nothing...)</div><div class='add'>+     */</div><div class='add'>+    ret = mkdir_p(priv-&gt;changelog_dir, 0600, _gf_true);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_2;</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_2;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_HTIME_DIR (priv-&gt;changelog_dir, htime_dir);</div><div class='del'>-        ret = mkdir_p (htime_dir, 0600, _gf_true);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_2;</div><div class='add'>+    CHANGELOG_FILL_HTIME_DIR(priv-&gt;changelog_dir, htime_dir);</div><div class='add'>+    ret = mkdir_p(htime_dir, 0600, _gf_true);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_2;</div><div class='ctx'> </div><div class='del'>-        CHANGELOG_FILL_CSNAP_DIR (priv-&gt;changelog_dir, csnap_dir);</div><div class='del'>-        ret = mkdir_p (csnap_dir, 0600, _gf_true);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_2;</div><div class='add'>+    CHANGELOG_FILL_CSNAP_DIR(priv-&gt;changelog_dir, csnap_dir);</div><div class='add'>+    ret = mkdir_p(csnap_dir, 0600, _gf_true);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_2;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("changelog", priv-&gt;active, bool, dealloc_2);</div><div class='del'>-        GF_OPTION_INIT ("capture-del-path", priv-&gt;capture_del_path,</div><div class='del'>-                        bool, dealloc_2);</div><div class='add'>+    GF_OPTION_INIT("changelog", priv-&gt;active, bool, dealloc_2);</div><div class='add'>+    GF_OPTION_INIT("capture-del-path", priv-&gt;capture_del_path, bool, dealloc_2);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("op-mode", tmp, str, dealloc_2);</div><div class='del'>-        changelog_assign_opmode (priv, tmp);</div><div class='add'>+    GF_OPTION_INIT("op-mode", tmp, str, dealloc_2);</div><div class='add'>+    changelog_assign_opmode(priv, tmp);</div><div class='ctx'> </div><div class='del'>-        tmp = NULL;</div><div class='add'>+    tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("encoding", tmp, str, dealloc_2);</div><div class='del'>-        changelog_assign_encoding (priv, tmp);</div><div class='del'>-        changelog_encode_change (priv);</div><div class='add'>+    GF_OPTION_INIT("encoding", tmp, str, dealloc_2);</div><div class='add'>+    changelog_assign_encoding(priv, tmp);</div><div class='add'>+    changelog_encode_change(priv);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("rollover-time",</div><div class='del'>-                        priv-&gt;rollover_time, int32, dealloc_2);</div><div class='add'>+    GF_OPTION_INIT("rollover-time", priv-&gt;rollover_time, int32, dealloc_2);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("fsync-interval",</div><div class='del'>-                        priv-&gt;fsync_interval, int32, dealloc_2);</div><div class='add'>+    GF_OPTION_INIT("fsync-interval", priv-&gt;fsync_interval, int32, dealloc_2);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("changelog-barrier-timeout",</div><div class='del'>-                        timeout, time, dealloc_2);</div><div class='del'>-        changelog_assign_barrier_timeout (priv, timeout);</div><div class='add'>+    GF_OPTION_INIT("changelog-barrier-timeout", timeout, time, dealloc_2);</div><div class='add'>+    changelog_assign_barrier_timeout(priv, timeout);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (cb_bootstrap[priv-&gt;op_mode].mode == priv-&gt;op_mode);</div><div class='del'>-        priv-&gt;cb = &amp;cb_bootstrap[priv-&gt;op_mode];</div><div class='add'>+    GF_ASSERT(cb_bootstrap[priv-&gt;op_mode].mode == priv-&gt;op_mode);</div><div class='add'>+    priv-&gt;cb = &amp;cb_bootstrap[priv-&gt;op_mode];</div><div class='ctx'> </div><div class='del'>-        /* ... now bootstrap the logger */</div><div class='del'>-        ret = priv-&gt;cb-&gt;ctor (this, &amp;priv-&gt;cd);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto dealloc_2;</div><div class='add'>+    /* ... now bootstrap the logger */</div><div class='add'>+    ret = priv-&gt;cb-&gt;ctor(this, &amp;priv-&gt;cd);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto dealloc_2;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;changelog_fd = -1;</div><div class='add'>+    priv-&gt;changelog_fd = -1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- dealloc_2:</div><div class='del'>-        GF_FREE (priv-&gt;changelog_dir);</div><div class='del'>- dealloc_1:</div><div class='del'>-        GF_FREE (priv-&gt;changelog_brick);</div><div class='del'>- error_return:</div><div class='del'>-        return -1;</div><div class='add'>+dealloc_2:</div><div class='add'>+    GF_FREE(priv-&gt;changelog_dir);</div><div class='add'>+dealloc_1:</div><div class='add'>+    GF_FREE(priv-&gt;changelog_brick);</div><div class='add'>+error_return:</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-changelog_cleanup_rpc (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_cleanup_rpc(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        /* terminate rpc server */</div><div class='del'>-        changelog_destroy_rpc_listner (this, priv);</div><div class='add'>+    /* terminate rpc server */</div><div class='add'>+    changelog_destroy_rpc_listner(this, priv);</div><div class='ctx'> </div><div class='del'>-        /* cleanup rot buffs */</div><div class='del'>-        rbuf_dtor (priv-&gt;rbuf);</div><div class='add'>+    /* cleanup rot buffs */</div><div class='add'>+    rbuf_dtor(priv-&gt;rbuf);</div><div class='ctx'> </div><div class='del'>-        /* cleanup poller thread */</div><div class='del'>-        if (priv-&gt;poller)</div><div class='del'>-                (void) changelog_thread_cleanup (this, priv-&gt;poller);</div><div class='add'>+    /* cleanup poller thread */</div><div class='add'>+    if (priv-&gt;poller)</div><div class='add'>+        (void)changelog_thread_cleanup(this, priv-&gt;poller);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-changelog_init_rpc (xlator_t *this, changelog_priv_t *priv)</div><div class='add'>+changelog_init_rpc(xlator_t *this, changelog_priv_t *priv)</div><div class='ctx'> {</div><div class='del'>-        rpcsvc_t  *rpc      = NULL;</div><div class='del'>-        changelog_ev_selector_t *selection = NULL;</div><div class='add'>+    rpcsvc_t *rpc = NULL;</div><div class='add'>+    changelog_ev_selector_t *selection = NULL;</div><div class='ctx'> </div><div class='del'>-        selection = &amp;priv-&gt;ev_selection;</div><div class='add'>+    selection = &amp;priv-&gt;ev_selection;</div><div class='ctx'> </div><div class='del'>-        /* initialize event selection */</div><div class='del'>-        changelog_init_event_selection (this, selection);</div><div class='add'>+    /* initialize event selection */</div><div class='add'>+    changelog_init_event_selection(this, selection);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;rbuf = rbuf_init (NR_ROTT_BUFFS);</div><div class='del'>-        if (!priv-&gt;rbuf)</div><div class='del'>-                goto cleanup_thread;</div><div class='add'>+    priv-&gt;rbuf = rbuf_init(NR_ROTT_BUFFS);</div><div class='add'>+    if (!priv-&gt;rbuf)</div><div class='add'>+        goto cleanup_thread;</div><div class='ctx'> </div><div class='del'>-        rpc = changelog_init_rpc_listener (this, priv,</div><div class='del'>-                                          priv-&gt;rbuf, NR_DISPATCHERS);</div><div class='del'>-        if (!rpc)</div><div class='del'>-                goto cleanup_rbuf;</div><div class='del'>-        priv-&gt;rpc = rpc;</div><div class='add'>+    rpc = changelog_init_rpc_listener(this, priv, priv-&gt;rbuf, NR_DISPATCHERS);</div><div class='add'>+    if (!rpc)</div><div class='add'>+        goto cleanup_rbuf;</div><div class='add'>+    priv-&gt;rpc = rpc;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>- cleanup_rbuf:</div><div class='del'>-        rbuf_dtor (priv-&gt;rbuf);</div><div class='del'>- cleanup_thread:</div><div class='del'>-        if (priv-&gt;poller)</div><div class='del'>-                (void) changelog_thread_cleanup (this, priv-&gt;poller);</div><div class='add'>+cleanup_rbuf:</div><div class='add'>+    rbuf_dtor(priv-&gt;rbuf);</div><div class='add'>+cleanup_thread:</div><div class='add'>+    if (priv-&gt;poller)</div><div class='add'>+        (void)changelog_thread_cleanup(this, priv-&gt;poller);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int               ret  = -1;</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("changelog", this, error_return);</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_CHILD_MISCONFIGURED,</div><div class='del'>-                        "translator needs a single subvolume");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CHANGELOG_MSG_VOL_MISCONFIGURED,</div><div class='del'>-                        "dangling volume. please check volfile");</div><div class='del'>-                goto error_return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_changelog_mt_priv_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto error_return;</div><div class='del'>-</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (changelog_local_t, 64);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        CHANGELOG_MSG_NO_MEMORY,</div><div class='del'>-                        "failed to create local memory pool");</div><div class='del'>-                goto cleanup_priv;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;lock);</div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;c_snap_lock);</div><div class='del'>-</div><div class='del'>-        ret = changelog_init_options (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_mempool;</div><div class='del'>-</div><div class='del'>-        /* snap dependency changes */</div><div class='del'>-        priv-&gt;dm.black_fop_cnt = 0;</div><div class='del'>-        priv-&gt;dm.white_fop_cnt = 0;</div><div class='del'>-        priv-&gt;dm.drain_wait_black = _gf_false;</div><div class='del'>-        priv-&gt;dm.drain_wait_white = _gf_false;</div><div class='del'>-        priv-&gt;current_color = FOP_COLOR_BLACK;</div><div class='del'>-        priv-&gt;explicit_rollover = _gf_false;</div><div class='del'>-</div><div class='del'>-        priv-&gt;cr.notify = _gf_false;</div><div class='del'>-        /* Mutex is not needed as threads are not spawned yet */</div><div class='del'>-        priv-&gt;bn.bnotify = _gf_false;</div><div class='del'>-        priv-&gt;bn.bnotify_error = _gf_false;</div><div class='del'>-        ret = changelog_barrier_pthread_init (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_options;</div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;bflags.lock);</div><div class='del'>-        priv-&gt;bflags.barrier_ext = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* Changelog barrier init */</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;queue);</div><div class='del'>-        priv-&gt;barrier_enabled = _gf_false;</div><div class='del'>-</div><div class='del'>-        /* RPC ball rolling.. */</div><div class='del'>-        ret = changelog_init_rpc (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_barrier;</div><div class='del'>-</div><div class='del'>-        ret = changelog_init (this, priv);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto cleanup_rpc;</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "changelog translator loaded");</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- cleanup_rpc:</div><div class='del'>-        changelog_cleanup_rpc (this, priv);</div><div class='del'>- cleanup_barrier:</div><div class='del'>-        changelog_barrier_pthread_destroy (priv);</div><div class='del'>- cleanup_options:</div><div class='del'>-        changelog_freeup_options (this, priv);</div><div class='del'>- cleanup_mempool:</div><div class='del'>-        mem_pool_destroy (this-&gt;local_pool);</div><div class='del'>- cleanup_priv:</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>- error_return:</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        return -1;</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("changelog", this, error_return);</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_CHILD_MISCONFIGURED,</div><div class='add'>+               "translator needs a single subvolume");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CHANGELOG_MSG_VOL_MISCONFIGURED,</div><div class='add'>+               "dangling volume. please check volfile");</div><div class='add'>+        goto error_return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_changelog_mt_priv_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto error_return;</div><div class='add'>+</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(changelog_local_t, 64);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CHANGELOG_MSG_NO_MEMORY,</div><div class='add'>+               "failed to create local memory pool");</div><div class='add'>+        goto cleanup_priv;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;lock);</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;c_snap_lock);</div><div class='add'>+</div><div class='add'>+    ret = changelog_init_options(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_mempool;</div><div class='add'>+</div><div class='add'>+    /* snap dependency changes */</div><div class='add'>+    priv-&gt;dm.black_fop_cnt = 0;</div><div class='add'>+    priv-&gt;dm.white_fop_cnt = 0;</div><div class='add'>+    priv-&gt;dm.drain_wait_black = _gf_false;</div><div class='add'>+    priv-&gt;dm.drain_wait_white = _gf_false;</div><div class='add'>+    priv-&gt;current_color = FOP_COLOR_BLACK;</div><div class='add'>+    priv-&gt;explicit_rollover = _gf_false;</div><div class='add'>+</div><div class='add'>+    priv-&gt;cr.notify = _gf_false;</div><div class='add'>+    /* Mutex is not needed as threads are not spawned yet */</div><div class='add'>+    priv-&gt;bn.bnotify = _gf_false;</div><div class='add'>+    priv-&gt;bn.bnotify_error = _gf_false;</div><div class='add'>+    ret = changelog_barrier_pthread_init(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_options;</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;bflags.lock);</div><div class='add'>+    priv-&gt;bflags.barrier_ext = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* Changelog barrier init */</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;queue);</div><div class='add'>+    priv-&gt;barrier_enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    /* RPC ball rolling.. */</div><div class='add'>+    ret = changelog_init_rpc(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_barrier;</div><div class='add'>+</div><div class='add'>+    ret = changelog_init(this, priv);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto cleanup_rpc;</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "changelog translator loaded");</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+cleanup_rpc:</div><div class='add'>+    changelog_cleanup_rpc(this, priv);</div><div class='add'>+cleanup_barrier:</div><div class='add'>+    changelog_barrier_pthread_destroy(priv);</div><div class='add'>+cleanup_options:</div><div class='add'>+    changelog_freeup_options(this, priv);</div><div class='add'>+cleanup_mempool:</div><div class='add'>+    mem_pool_destroy(this-&gt;local_pool);</div><div class='add'>+cleanup_priv:</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+error_return:</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        changelog_priv_t *priv = NULL;</div><div class='del'>-        struct list_head  queue = {0, };</div><div class='add'>+    changelog_priv_t *priv = NULL;</div><div class='add'>+    struct list_head queue = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv) {</div><div class='del'>-                /* terminate RPC server/threads */</div><div class='del'>-                changelog_cleanup_rpc (this, priv);</div><div class='add'>+    if (priv) {</div><div class='add'>+        /* terminate RPC server/threads */</div><div class='add'>+        changelog_cleanup_rpc(this, priv);</div><div class='ctx'> </div><div class='del'>-                /* call barrier_disable to cancel timer */</div><div class='del'>-                if (priv-&gt;barrier_enabled)</div><div class='del'>-                        __chlog_barrier_disable (this, &amp;queue);</div><div class='add'>+        /* call barrier_disable to cancel timer */</div><div class='add'>+        if (priv-&gt;barrier_enabled)</div><div class='add'>+            __chlog_barrier_disable(this, &amp;queue);</div><div class='ctx'> </div><div class='del'>-                /* cleanup barrier related objects */</div><div class='del'>-                changelog_barrier_pthread_destroy (priv);</div><div class='add'>+        /* cleanup barrier related objects */</div><div class='add'>+        changelog_barrier_pthread_destroy(priv);</div><div class='ctx'> </div><div class='del'>-                /* cleanup helper threads */</div><div class='del'>-                changelog_cleanup_helper_threads (this, priv);</div><div class='add'>+        /* cleanup helper threads */</div><div class='add'>+        changelog_cleanup_helper_threads(this, priv);</div><div class='ctx'> </div><div class='del'>-                /* cleanup allocated options */</div><div class='del'>-                changelog_freeup_options (this, priv);</div><div class='add'>+        /* cleanup allocated options */</div><div class='add'>+        changelog_freeup_options(this, priv);</div><div class='ctx'> </div><div class='del'>-                /* deallocate mempool */</div><div class='del'>-                mem_pool_destroy (this-&gt;local_pool);</div><div class='add'>+        /* deallocate mempool */</div><div class='add'>+        mem_pool_destroy(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-                if (priv-&gt;htime_fd != -1) {</div><div class='del'>-                        sys_close (priv-&gt;htime_fd);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* finally, dealloac private variable */</div><div class='del'>-                GF_FREE (priv);</div><div class='add'>+        if (priv-&gt;htime_fd != -1) {</div><div class='add'>+            sys_close(priv-&gt;htime_fd);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        this-&gt;local_pool = NULL;</div><div class='add'>+        /* finally, dealloac private variable */</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    this-&gt;local_pool = NULL;</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .open         = changelog_open,</div><div class='del'>-        .mknod        = changelog_mknod,</div><div class='del'>-        .mkdir        = changelog_mkdir,</div><div class='del'>-        .create       = changelog_create,</div><div class='del'>-        .symlink      = changelog_symlink,</div><div class='del'>-        .writev       = changelog_writev,</div><div class='del'>-        .truncate     = changelog_truncate,</div><div class='del'>-        .ftruncate    = changelog_ftruncate,</div><div class='del'>-        .link         = changelog_link,</div><div class='del'>-        .rename       = changelog_rename,</div><div class='del'>-        .unlink       = changelog_unlink,</div><div class='del'>-        .rmdir        = changelog_rmdir,</div><div class='del'>-        .setattr      = changelog_setattr,</div><div class='del'>-        .fsetattr     = changelog_fsetattr,</div><div class='del'>-        .setxattr     = changelog_setxattr,</div><div class='del'>-        .fsetxattr    = changelog_fsetxattr,</div><div class='del'>-        .removexattr  = changelog_removexattr,</div><div class='del'>-        .fremovexattr = changelog_fremovexattr,</div><div class='del'>-        .ipc          = changelog_ipc,</div><div class='del'>-        .xattrop      = changelog_xattrop,</div><div class='del'>-        .fxattrop     = changelog_fxattrop,</div><div class='add'>+    .open = changelog_open,</div><div class='add'>+    .mknod = changelog_mknod,</div><div class='add'>+    .mkdir = changelog_mkdir,</div><div class='add'>+    .create = changelog_create,</div><div class='add'>+    .symlink = changelog_symlink,</div><div class='add'>+    .writev = changelog_writev,</div><div class='add'>+    .truncate = changelog_truncate,</div><div class='add'>+    .ftruncate = changelog_ftruncate,</div><div class='add'>+    .link = changelog_link,</div><div class='add'>+    .rename = changelog_rename,</div><div class='add'>+    .unlink = changelog_unlink,</div><div class='add'>+    .rmdir = changelog_rmdir,</div><div class='add'>+    .setattr = changelog_setattr,</div><div class='add'>+    .fsetattr = changelog_fsetattr,</div><div class='add'>+    .setxattr = changelog_setxattr,</div><div class='add'>+    .fsetxattr = changelog_fsetxattr,</div><div class='add'>+    .removexattr = changelog_removexattr,</div><div class='add'>+    .fremovexattr = changelog_fremovexattr,</div><div class='add'>+    .ipc = changelog_ipc,</div><div class='add'>+    .xattrop = changelog_xattrop,</div><div class='add'>+    .fxattrop = changelog_fxattrop,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget = changelog_forget,</div><div class='del'>-        .release = changelog_release,</div><div class='add'>+    .forget = changelog_forget,</div><div class='add'>+    .release = changelog_release,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        {.key = {"changelog"},</div><div class='del'>-         .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-         .default_value = "off",</div><div class='del'>-         .description = "enable/disable change-logging",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_BASIC,</div><div class='del'>-         .tags = {"journal", "georep", "glusterfind"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"changelog-brick"},</div><div class='del'>-         .type = GF_OPTION_TYPE_PATH,</div><div class='del'>-         .description = "brick path to generate unique socket file name."</div><div class='del'>-                       " should be the export directory of the volume strictly.",</div><div class='del'>-         .default_value = "{{ brick.path }}",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .tags = {"journal"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"changelog-dir"},</div><div class='del'>-         .type = GF_OPTION_TYPE_PATH,</div><div class='del'>-         .description = "directory for the changelog files",</div><div class='del'>-         .default_value = "{{ brick.path }}/.glusterfs/changelogs",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_ADVANCED,</div><div class='del'>-         .tags = {"journal", "georep", "glusterfind"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"op-mode"},</div><div class='del'>-         .type = GF_OPTION_TYPE_STR,</div><div class='del'>-         .default_value = "realtime",</div><div class='del'>-         .value = {"realtime"},</div><div class='del'>-         .description = "operation mode - futuristic operation modes",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .tags = {"journal"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"encoding"},</div><div class='del'>-         .type = GF_OPTION_TYPE_STR,</div><div class='del'>-         .default_value = "ascii",</div><div class='del'>-         .value = {"binary", "ascii"},</div><div class='del'>-         .description = "encoding type for changelogs",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_ADVANCED,</div><div class='del'>-         .tags = {"journal"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"rollover-time"},</div><div class='del'>-         .default_value = "15",</div><div class='del'>-         .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-         .description = "time to switch to a new changelog file (in seconds)",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_ADVANCED,</div><div class='del'>-         .tags = {"journal", "georep", "glusterfind"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"fsync-interval"},</div><div class='del'>-         .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-         .default_value = "5",</div><div class='del'>-         .description = "do not open CHANGELOG file with O_SYNC mode."</div><div class='del'>-                        " instead perform fsync() at specified intervals",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_ADVANCED,</div><div class='del'>-         .tags = {"journal"}</div><div class='del'>-        },</div><div class='del'>-        { .key = {"changelog-barrier-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_TIME,</div><div class='del'>-          .default_value = BARRIER_TIMEOUT,</div><div class='del'>-          .description = "After 'timeout' seconds since the time 'barrier' "</div><div class='del'>-                         "option was set to \"on\", unlink/rmdir/rename  "</div><div class='del'>-                         "operations are no longer blocked and previously "</div><div class='del'>-                         "blocked fops are allowed to go through",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_ADVANCED,</div><div class='del'>-         .tags = {"journal"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {"capture-del-path"},</div><div class='del'>-         .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-         .default_value = "off",</div><div class='del'>-         .description = "enable/disable capturing paths of deleted entries",</div><div class='del'>-         .op_version = {3},</div><div class='del'>-         .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-         .level = OPT_STATUS_BASIC,</div><div class='del'>-         .tags = {"journal", "glusterfind"}</div><div class='del'>-        },</div><div class='del'>-        {.key = {NULL}</div><div class='del'>-        },</div><div class='add'>+    {.key = {"changelog"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "enable/disable change-logging",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .tags = {"journal", "georep", "glusterfind"}},</div><div class='add'>+    {.key = {"changelog-brick"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PATH,</div><div class='add'>+     .description = "brick path to generate unique socket file name."</div><div class='add'>+                    " should be the export directory of the volume strictly.",</div><div class='add'>+     .default_value = "{{ brick.path }}",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .tags = {"journal"}},</div><div class='add'>+    {.key = {"changelog-dir"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PATH,</div><div class='add'>+     .description = "directory for the changelog files",</div><div class='add'>+     .default_value = "{{ brick.path }}/.glusterfs/changelogs",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .tags = {"journal", "georep", "glusterfind"}},</div><div class='add'>+    {.key = {"op-mode"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "realtime",</div><div class='add'>+     .value = {"realtime"},</div><div class='add'>+     .description = "operation mode - futuristic operation modes",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .tags = {"journal"}},</div><div class='add'>+    {.key = {"encoding"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "ascii",</div><div class='add'>+     .value = {"binary", "ascii"},</div><div class='add'>+     .description = "encoding type for changelogs",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .tags = {"journal"}},</div><div class='add'>+    {.key = {"rollover-time"},</div><div class='add'>+     .default_value = "15",</div><div class='add'>+     .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+     .description = "time to switch to a new changelog file (in seconds)",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .tags = {"journal", "georep", "glusterfind"}},</div><div class='add'>+    {.key = {"fsync-interval"},</div><div class='add'>+     .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+     .default_value = "5",</div><div class='add'>+     .description = "do not open CHANGELOG file with O_SYNC mode."</div><div class='add'>+                    " instead perform fsync() at specified intervals",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .tags = {"journal"}},</div><div class='add'>+    {.key = {"changelog-barrier-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_TIME,</div><div class='add'>+     .default_value = BARRIER_TIMEOUT,</div><div class='add'>+     .description = "After 'timeout' seconds since the time 'barrier' "</div><div class='add'>+                    "option was set to \"on\", unlink/rmdir/rename  "</div><div class='add'>+                    "operations are no longer blocked and previously "</div><div class='add'>+                    "blocked fops are allowed to go through",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_ADVANCED,</div><div class='add'>+     .tags = {"journal"}},</div><div class='add'>+    {.key = {"capture-del-path"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "enable/disable capturing paths of deleted entries",</div><div class='add'>+     .op_version = {3},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .level = OPT_STATUS_BASIC,</div><div class='add'>+     .tags = {"journal", "glusterfind"}},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changetimerecorder/src/changetimerecorder.c b/xlators/features/changetimerecorder/src/changetimerecorder.c<br/>index bc87518c0c0..04b89e5a540 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changetimerecorder/src/changetimerecorder.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changetimerecorder/src/changetimerecorder.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changetimerecorder/src/changetimerecorder.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changetimerecorder/src/changetimerecorder.c</a></div><div class='hunk'>@@ -20,10 +20,10 @@</div><div class='ctx'> </div><div class='ctx'> /*******************************inode forget***********************************/</div><div class='ctx'> int</div><div class='del'>-ctr_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+ctr_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        fini_ctr_xlator_ctx (this, inode);</div><div class='del'>-        return 0;</div><div class='add'>+    fini_ctr_xlator_ctx(this, inode);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /************************** Look up heal **************************************/</div><div class='hunk'>@@ -78,125 +78,116 @@ What is pending:</div><div class='ctx'> </div><div class='ctx'> */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This function does not write anything to the db,</div><div class='ctx'>  * just created the local variable</div><div class='ctx'>  * for the frame and sets values for the ctr_db_record */</div><div class='ctx'> static int</div><div class='del'>-ctr_lookup_wind(call_frame_t                    *frame,</div><div class='del'>-                xlator_t                        *this,</div><div class='del'>-                gf_ctr_inode_context_t          *ctr_inode_cx)</div><div class='add'>+ctr_lookup_wind(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                gf_ctr_inode_context_t *ctr_inode_cx)</div><div class='ctx'> {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        gf_ctr_private_t *_priv         = NULL;</div><div class='del'>-        gf_ctr_local_t *ctr_local       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(frame-&gt;root);</div><div class='del'>-        GF_ASSERT(this);</div><div class='del'>-        IS_CTR_INODE_CX_SANE(ctr_inode_cx);</div><div class='del'>-</div><div class='del'>-        _priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (_priv);</div><div class='del'>-</div><div class='del'>-        if (_priv-&gt;ctr_record_wind &amp;&amp; ctr_inode_cx-&gt;ia_type != IA_IFDIR) {</div><div class='del'>-</div><div class='del'>-                frame-&gt;local = init_ctr_local_t (this);</div><div class='del'>-                if (!frame-&gt;local) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_CREATE_CTR_LOCAL_ERROR_WIND,</div><div class='del'>-                                "WIND: Error while creating ctr local");</div><div class='del'>-                        goto out;</div><div class='del'>-                };</div><div class='del'>-                ctr_local = frame-&gt;local;</div><div class='del'>-                /*Definitely no internal fops will reach here*/</div><div class='del'>-                ctr_local-&gt;is_internal_fop = _gf_false;</div><div class='del'>-                /*Don't record counters*/</div><div class='del'>-                CTR_DB_REC(ctr_local).do_record_counters = _gf_false;</div><div class='del'>-                /*Don't record time at all*/</div><div class='del'>-                CTR_DB_REC(ctr_local).do_record_times = _gf_false;</div><div class='del'>-</div><div class='del'>-                /* Copy gfid into db record*/</div><div class='del'>-                gf_uuid_copy (CTR_DB_REC(ctr_local).gfid,</div><div class='del'>-                                *(ctr_inode_cx-&gt;gfid));</div><div class='del'>-</div><div class='del'>-                /* Set fop_path and fop_type, required by libgfdb to make</div><div class='del'>-                * decision while inserting the record */</div><div class='del'>-                CTR_DB_REC(ctr_local).gfdb_fop_path = ctr_inode_cx-&gt;fop_path;</div><div class='del'>-                CTR_DB_REC(ctr_local).gfdb_fop_type = ctr_inode_cx-&gt;fop_type;</div><div class='del'>-</div><div class='del'>-                /* Copy hard link info*/</div><div class='del'>-                gf_uuid_copy (CTR_DB_REC(ctr_local).pargfid,</div><div class='del'>-                        *((NEW_LINK_CX(ctr_inode_cx))-&gt;pargfid));</div><div class='del'>-                if (snprintf (CTR_DB_REC(ctr_local).file_name,</div><div class='del'>-                              sizeof (CTR_DB_REC(ctr_local).file_name), "%s",</div><div class='del'>-                              NEW_LINK_CX(ctr_inode_cx)-&gt;basename) &gt;=</div><div class='del'>-                    sizeof (CTR_DB_REC(ctr_local).file_name)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_CREATE_CTR_LOCAL_ERROR_WIND,</div><div class='del'>-                                "WIND: Error copying filename of ctr local");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* Since we are in lookup we can ignore errors while</div><div class='del'>-                 * Inserting in the DB, because there may be many</div><div class='del'>-                 * to write to the DB attempts for healing.</div><div class='del'>-                 * We don't want to log all failed attempts and</div><div class='del'>-                 * bloat the log*/</div><div class='del'>-                 ctr_local-&gt;gfdb_db_record.ignore_errors = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_private_t *_priv = NULL;</div><div class='add'>+    gf_ctr_local_t *ctr_local = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(frame-&gt;root);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    IS_CTR_INODE_CX_SANE(ctr_inode_cx);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    _priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(_priv);</div><div class='add'>+</div><div class='add'>+    if (_priv-&gt;ctr_record_wind &amp;&amp; ctr_inode_cx-&gt;ia_type != IA_IFDIR) {</div><div class='add'>+        frame-&gt;local = init_ctr_local_t(this);</div><div class='add'>+        if (!frame-&gt;local) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CTR_MSG_CREATE_CTR_LOCAL_ERROR_WIND,</div><div class='add'>+                   "WIND: Error while creating ctr local");</div><div class='add'>+            goto out;</div><div class='add'>+        };</div><div class='add'>+        ctr_local = frame-&gt;local;</div><div class='add'>+        /*Definitely no internal fops will reach here*/</div><div class='add'>+        ctr_local-&gt;is_internal_fop = _gf_false;</div><div class='add'>+        /*Don't record counters*/</div><div class='add'>+        CTR_DB_REC(ctr_local).do_record_counters = _gf_false;</div><div class='add'>+        /*Don't record time at all*/</div><div class='add'>+        CTR_DB_REC(ctr_local).do_record_times = _gf_false;</div><div class='add'>+</div><div class='add'>+        /* Copy gfid into db record*/</div><div class='add'>+        gf_uuid_copy(CTR_DB_REC(ctr_local).gfid, *(ctr_inode_cx-&gt;gfid));</div><div class='add'>+</div><div class='add'>+        /* Set fop_path and fop_type, required by libgfdb to make</div><div class='add'>+         * decision while inserting the record */</div><div class='add'>+        CTR_DB_REC(ctr_local).gfdb_fop_path = ctr_inode_cx-&gt;fop_path;</div><div class='add'>+        CTR_DB_REC(ctr_local).gfdb_fop_type = ctr_inode_cx-&gt;fop_type;</div><div class='add'>+</div><div class='add'>+        /* Copy hard link info*/</div><div class='add'>+        gf_uuid_copy(CTR_DB_REC(ctr_local).pargfid,</div><div class='add'>+                     *((NEW_LINK_CX(ctr_inode_cx))-&gt;pargfid));</div><div class='add'>+        if (snprintf(CTR_DB_REC(ctr_local).file_name,</div><div class='add'>+                     sizeof(CTR_DB_REC(ctr_local).file_name), "%s",</div><div class='add'>+                     NEW_LINK_CX(ctr_inode_cx)-&gt;basename) &gt;=</div><div class='add'>+            sizeof(CTR_DB_REC(ctr_local).file_name)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CTR_MSG_CREATE_CTR_LOCAL_ERROR_WIND,</div><div class='add'>+                   "WIND: Error copying filename of ctr local");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        /* Since we are in lookup we can ignore errors while</div><div class='add'>+         * Inserting in the DB, because there may be many</div><div class='add'>+         * to write to the DB attempts for healing.</div><div class='add'>+         * We don't want to log all failed attempts and</div><div class='add'>+         * bloat the log*/</div><div class='add'>+        ctr_local-&gt;gfdb_db_record.ignore_errors = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                free_ctr_local (ctr_local);</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        free_ctr_local(ctr_local);</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This function inserts the ctr_db_record populated by ctr_lookup_wind</div><div class='ctx'>  * in to the db. It also destroys the frame-&gt;local created by ctr_lookup_wind */</div><div class='ctx'> static int</div><div class='del'>-ctr_lookup_unwind (call_frame_t          *frame,</div><div class='del'>-                   xlator_t              *this)</div><div class='add'>+ctr_lookup_unwind(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_private_t *_priv         = NULL;</div><div class='del'>-        gf_ctr_local_t *ctr_local       = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_private_t *_priv = NULL;</div><div class='add'>+    gf_ctr_local_t *ctr_local = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(this);</div><div class='ctx'> </div><div class='del'>-        _priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (_priv);</div><div class='add'>+    _priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(_priv);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(_priv-&gt;_db_conn);</div><div class='add'>+    GF_ASSERT(_priv-&gt;_db_conn);</div><div class='ctx'> </div><div class='del'>-        ctr_local = frame-&gt;local;</div><div class='add'>+    ctr_local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (ctr_local &amp;&amp; (ctr_local-&gt;ia_inode_type != IA_IFDIR)) {</div><div class='del'>-</div><div class='del'>-                ret = insert_record(_priv-&gt;_db_conn,</div><div class='del'>-                                &amp;ctr_local-&gt;gfdb_db_record);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name,</div><div class='del'>-                                _gfdb_log_level (GF_LOG_ERROR,</div><div class='del'>-                                        ctr_local-&gt;</div><div class='del'>-                                        gfdb_db_record.ignore_errors),</div><div class='del'>-                                0, CTR_MSG_FILL_CTR_LOCAL_ERROR_UNWIND,</div><div class='del'>-                               "UNWIND: Error filling ctr local");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (ctr_local &amp;&amp; (ctr_local-&gt;ia_inode_type != IA_IFDIR)) {</div><div class='add'>+        ret = insert_record(_priv-&gt;_db_conn, &amp;ctr_local-&gt;gfdb_db_record);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_msg(this-&gt;name,</div><div class='add'>+                   _gfdb_log_level(GF_LOG_ERROR,</div><div class='add'>+                                   ctr_local-&gt;gfdb_db_record.ignore_errors),</div><div class='add'>+                   0, CTR_MSG_FILL_CTR_LOCAL_ERROR_UNWIND,</div><div class='add'>+                   "UNWIND: Error filling ctr local");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        free_ctr_local (ctr_local);</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        return ret;</div><div class='add'>+    free_ctr_local(ctr_local);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************</div><div class='hunk'>@@ -207,1488 +198,1378 @@ out:</div><div class='ctx'> </div><div class='ctx'> /****************************LOOKUP********************************************/</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-ctr_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, dict_t *dict, struct iatt *postparent)</div><div class='add'>+ctr_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+               struct iatt *buf, dict_t *dict, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        ctr_xlator_ctx_t *ctr_xlator_ctx        = NULL;</div><div class='del'>-        gf_ctr_local_t *ctr_local               = NULL;</div><div class='del'>-        ctr_heal_ret_val_t  ret_val             = CTR_CTX_ERROR;</div><div class='del'>-        gf_boolean_t    _is_heal_needed         = _gf_false;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-</div><div class='del'>-        /* if the lookup failed lookup don't do anything*/</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "lookup failed with %s",</div><div class='del'>-                              strerror (op_errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Ignore directory lookups */</div><div class='del'>-        if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if frame local was not set by the ctr_lookup()</div><div class='del'>-         * so don't so anything*/</div><div class='del'>-        if (!frame-&gt;local) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if the lookup is for dht link donot record*/</div><div class='del'>-        if (dht_is_linkfile (buf, dict)) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "Ignoring Lookup "</div><div class='del'>-                                "for dht link file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctr_local = frame-&gt;local;</div><div class='del'>-        /*Assign the proper inode type*/</div><div class='del'>-        ctr_local-&gt;ia_inode_type = inode-&gt;ia_type;</div><div class='del'>-</div><div class='del'>-        /* Copy gfid directly from inode */</div><div class='del'>-        gf_uuid_copy (CTR_DB_REC(ctr_local).gfid, inode-&gt;gfid);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='add'>+    gf_ctr_local_t *ctr_local = NULL;</div><div class='add'>+    ctr_heal_ret_val_t ret_val = CTR_CTX_ERROR;</div><div class='add'>+    gf_boolean_t _is_heal_needed = _gf_false;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+</div><div class='add'>+    /* if the lookup failed lookup don't do anything*/</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "lookup failed with %s",</div><div class='add'>+                     strerror(op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Checking if gfid and parent gfid is valid */</div><div class='del'>-        if (gf_uuid_is_null(CTR_DB_REC(ctr_local).gfid) ||</div><div class='del'>-                gf_uuid_is_null(CTR_DB_REC(ctr_local).pargfid)) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                        "Invalid GFID");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Ignore directory lookups */</div><div class='add'>+    if (inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* if its a first entry</div><div class='del'>-         * then mark the ctr_record for create</div><div class='del'>-         * A create will attempt a file and a hard link created in the db*/</div><div class='del'>-        ctr_xlator_ctx = get_ctr_xlator_ctx (this, inode);</div><div class='del'>-        if (!ctr_xlator_ctx) {</div><div class='del'>-                 /* This marks inode heal */</div><div class='del'>-                CTR_DB_REC(ctr_local).gfdb_fop_type = GFDB_FOP_CREATE_WRITE;</div><div class='del'>-                _is_heal_needed = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    /* if frame local was not set by the ctr_lookup()</div><div class='add'>+     * so don't so anything*/</div><div class='add'>+    if (!frame-&gt;local) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Copy the correct gfid from resolved inode */</div><div class='del'>-        gf_uuid_copy (CTR_DB_REC(ctr_local).gfid, inode-&gt;gfid);</div><div class='add'>+    /* if the lookup is for dht link donot record*/</div><div class='add'>+    if (dht_is_linkfile(buf, dict)) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                     "Ignoring Lookup "</div><div class='add'>+                     "for dht link file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Add hard link to the list */</div><div class='del'>-        ret_val = add_hard_link_ctx (frame, this, inode);</div><div class='del'>-        if (ret_val == CTR_CTX_ERROR) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                        "Failed adding hardlink to list");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* If inode needs healing then heal the hardlink also */</div><div class='del'>-        else if (ret_val &amp; CTR_TRY_INODE_HEAL) {</div><div class='del'>-                /* This marks inode heal */</div><div class='del'>-                CTR_DB_REC(ctr_local).gfdb_fop_type = GFDB_FOP_CREATE_WRITE;</div><div class='del'>-                _is_heal_needed = _gf_true;</div><div class='del'>-        }</div><div class='del'>-        /* If hardlink needs healing */</div><div class='del'>-        else if (ret_val &amp; CTR_TRY_HARDLINK_HEAL) {</div><div class='del'>-                _is_heal_needed = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    ctr_local = frame-&gt;local;</div><div class='add'>+    /*Assign the proper inode type*/</div><div class='add'>+    ctr_local-&gt;ia_inode_type = inode-&gt;ia_type;</div><div class='ctx'> </div><div class='del'>-        /* If lookup heal needed */</div><div class='del'>-        if (!_is_heal_needed)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Copy gfid directly from inode */</div><div class='add'>+    gf_uuid_copy(CTR_DB_REC(ctr_local).gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        /* FINALLY HEAL : Inserts the ctr_db_record populated by ctr_lookup_wind</div><div class='del'>-        * in to the db. It also destroys the frame-&gt;local</div><div class='del'>-        * created by ctr_lookup_wind */</div><div class='del'>-        ret = ctr_lookup_unwind(frame, this);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0,</div><div class='del'>-                        "Failed healing/inserting link");</div><div class='del'>-        }</div><div class='add'>+    /* Checking if gfid and parent gfid is valid */</div><div class='add'>+    if (gf_uuid_is_null(CTR_DB_REC(ctr_local).gfid) ||</div><div class='add'>+        gf_uuid_is_null(CTR_DB_REC(ctr_local).pargfid)) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Invalid GFID");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* if its a first entry</div><div class='add'>+     * then mark the ctr_record for create</div><div class='add'>+     * A create will attempt a file and a hard link created in the db*/</div><div class='add'>+    ctr_xlator_ctx = get_ctr_xlator_ctx(this, inode);</div><div class='add'>+    if (!ctr_xlator_ctx) {</div><div class='add'>+        /* This marks inode heal */</div><div class='add'>+        CTR_DB_REC(ctr_local).gfdb_fop_type = GFDB_FOP_CREATE_WRITE;</div><div class='add'>+        _is_heal_needed = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Copy the correct gfid from resolved inode */</div><div class='add'>+    gf_uuid_copy(CTR_DB_REC(ctr_local).gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    /* Add hard link to the list */</div><div class='add'>+    ret_val = add_hard_link_ctx(frame, this, inode);</div><div class='add'>+    if (ret_val == CTR_CTX_ERROR) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Failed adding hardlink to list");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /* If inode needs healing then heal the hardlink also */</div><div class='add'>+    else if (ret_val &amp; CTR_TRY_INODE_HEAL) {</div><div class='add'>+        /* This marks inode heal */</div><div class='add'>+        CTR_DB_REC(ctr_local).gfdb_fop_type = GFDB_FOP_CREATE_WRITE;</div><div class='add'>+        _is_heal_needed = _gf_true;</div><div class='add'>+    }</div><div class='add'>+    /* If hardlink needs healing */</div><div class='add'>+    else if (ret_val &amp; CTR_TRY_HARDLINK_HEAL) {</div><div class='add'>+        _is_heal_needed = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If lookup heal needed */</div><div class='add'>+    if (!_is_heal_needed)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    /* FINALLY HEAL : Inserts the ctr_db_record populated by ctr_lookup_wind</div><div class='add'>+     * in to the db. It also destroys the frame-&gt;local</div><div class='add'>+     * created by ctr_lookup_wind */</div><div class='add'>+    ret = ctr_lookup_unwind(frame, this);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Failed healing/inserting link");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        free_ctr_local ((gf_ctr_local_t *)frame-&gt;local);</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    free_ctr_local((gf_ctr_local_t *)frame-&gt;local);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             dict, postparent);</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, dict,</div><div class='add'>+                        postparent);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-ctr_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, dict_t *xdata)</div><div class='add'>+ctr_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx       = &amp;ctr_inode_cx;</div><div class='del'>-        gf_ctr_link_context_t  ctr_link_cx;</div><div class='del'>-        gf_ctr_link_context_t  *_link_cx        = &amp;ctr_link_cx;</div><div class='del'>-        int ret                                 = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    gf_ctr_link_context_t ctr_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_link_cx = &amp;ctr_link_cx;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(frame-&gt;root);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        /* Don't handle nameless lookups*/</div><div class='del'>-        if (!loc-&gt;parent || !loc-&gt;name)</div><div class='del'>-                goto out;</div><div class='add'>+    /* Don't handle nameless lookups*/</div><div class='add'>+    if (!loc-&gt;parent || !loc-&gt;name)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /*fill ctr link context*/</div><div class='del'>-        FILL_CTR_LINK_CX(_link_cx, loc-&gt;parent-&gt;gfid, loc-&gt;name, out);</div><div class='del'>-</div><div class='del'>-         /* Fill ctr inode context*/</div><div class='del'>-         /* IA_IFREG : We assume its a file in the wind</div><div class='del'>-          * but in the unwind we are sure what the inode is a file</div><div class='del'>-          * or directory</div><div class='del'>-          * gfid: we are just filling loc-&gt;gfid which is not correct.</div><div class='del'>-          * In unwind we fill the correct gfid for successful lookup*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, IA_IFREG,</div><div class='del'>-                loc-&gt;gfid, _link_cx, NULL,</div><div class='del'>-                GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-        /* Create the frame-&gt;local and populate ctr_db_record</div><div class='del'>-         * No writing to the db yet */</div><div class='del'>-        ret = ctr_lookup_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_LINK_WIND_FAILED,</div><div class='del'>-                        "Failed to insert link wind");</div><div class='del'>-        }</div><div class='add'>+    /*fill ctr link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_link_cx, loc-&gt;parent-&gt;gfid, loc-&gt;name, out);</div><div class='add'>+</div><div class='add'>+    /* Fill ctr inode context*/</div><div class='add'>+    /* IA_IFREG : We assume its a file in the wind</div><div class='add'>+     * but in the unwind we are sure what the inode is a file</div><div class='add'>+     * or directory</div><div class='add'>+     * gfid: we are just filling loc-&gt;gfid which is not correct.</div><div class='add'>+     * In unwind we fill the correct gfid for successful lookup*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, IA_IFREG, loc-&gt;gfid, _link_cx, NULL,</div><div class='add'>+                           GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /* Create the frame-&gt;local and populate ctr_db_record</div><div class='add'>+     * No writing to the db yet */</div><div class='add'>+    ret = ctr_lookup_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_LINK_WIND_FAILED,</div><div class='add'>+               "Failed to insert link wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /****************************WRITEV********************************************/</div><div class='ctx'> int32_t</div><div class='del'>-ctr_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                    struct iatt *postbuf,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+ctr_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+               struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO (this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind (frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_WRITEV_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert writev unwind");</div><div class='del'>-        }</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_WRITEV_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert writev unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                        postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-            struct iovec *vector, int32_t count, off_t off,</div><div class='del'>-            uint32_t flags,</div><div class='del'>-            struct iobref *iobref, dict_t *xdata)</div><div class='add'>+ctr_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+           int32_t count, off_t off, uint32_t flags, struct iobref *iobref,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='ctx'> </div><div class='del'>-        /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                                fd-&gt;inode-&gt;gfid, NULL, NULL,</div><div class='del'>-                                GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_WRITEV_WIND_FAILED,</div><div class='del'>-                        "Failed to insert writev wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_WRITEV_WIND_FAILED,</div><div class='add'>+               "Failed to insert writev wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_writev_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count,</div><div class='del'>-                    off, flags, iobref, xdata);</div><div class='add'>+    STACK_WIND(frame, ctr_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, off, flags,</div><div class='add'>+               iobref, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************setattr*****************************************/</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_setattr_cbk (call_frame_t *frame,</div><div class='del'>-                       void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                       int32_t op_errno, struct iatt *preop_stbuf,</div><div class='del'>-                       struct iatt *postop_stbuf, dict_t *xdata)</div><div class='add'>+ctr_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *preop_stbuf,</div><div class='add'>+                struct iatt *postop_stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        int ret = -1;</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='del'>-</div><div class='del'>-        ret = ctr_insert_unwind(frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_SETATTR_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert setattr unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_SETATTR_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert setattr unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (setattr, frame, op_ret, op_errno, preop_stbuf,</div><div class='del'>-                       postop_stbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setattr, frame, op_ret, op_errno, preop_stbuf,</div><div class='add'>+                        postop_stbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_setattr (call_frame_t *frame,</div><div class='del'>-                   xlator_t *this, loc_t *loc,</div><div class='del'>-                   struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+ctr_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+            int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-        CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO (this, out);</div><div class='del'>-</div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                loc-&gt;inode-&gt;gfid, NULL, NULL, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='del'>-                        "Failed to insert setattr wind");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+    CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                           NULL, NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='add'>+               "Failed to insert setattr wind");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, ctr_setattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf,</div><div class='del'>-                    valid, xdata);</div><div class='add'>+    STACK_WIND(frame, ctr_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*************************** fsetattr ***************************************/</div><div class='ctx'> int32_t</div><div class='del'>-ctr_fsetattr_cbk (call_frame_t *frame,</div><div class='del'>-                        void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                        int32_t op_errno, struct iatt *preop_stbuf,</div><div class='del'>-                        struct iatt *postop_stbuf, dict_t *xdata)</div><div class='add'>+ctr_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *preop_stbuf,</div><div class='add'>+                 struct iatt *postop_stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_SETATTR_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert fsetattr unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_SETATTR_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert fsetattr unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsetattr, frame, op_ret, op_errno,</div><div class='del'>-                                preop_stbuf, postop_stbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetattr, frame, op_ret, op_errno, preop_stbuf,</div><div class='add'>+                        postop_stbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-ctr_fsetattr (call_frame_t *frame,</div><div class='del'>-                    xlator_t *this, fd_t *fd,</div><div class='del'>-                    struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+ctr_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='add'>+             int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-        CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO (this, out);</div><div class='del'>-</div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                fd-&gt;inode-&gt;gfid, NULL, NULL, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='del'>-                        "Failed to insert fsetattr wind");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+    CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='add'>+               "Failed to insert fsetattr wind");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_fsetattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fsetattr,</div><div class='del'>-                    fd, stbuf, valid, xdata);</div><div class='add'>+    STACK_WIND(frame, ctr_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> /****************************fremovexattr************************************/</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                          int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+ctr_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FREMOVEXATTR_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert fremovexattr unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_FREMOVEXATTR_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert fremovexattr unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                      const char *name, dict_t *xdata)</div><div class='add'>+ctr_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                 const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-        CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO (this, out);</div><div class='del'>-</div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                fd-&gt;inode-&gt;gfid, NULL, NULL, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FREMOVEXATTR_WIND_FAILED,</div><div class='del'>-                        "Failed to insert fremovexattr wind");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+    CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_FREMOVEXATTR_WIND_FAILED,</div><div class='add'>+               "Failed to insert fremovexattr wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_fremovexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************removexattr*************************************/</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+ctr_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_REMOVEXATTR_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert removexattr unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_REMOVEXATTR_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert removexattr unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                     const char *name, dict_t *xdata)</div><div class='add'>+ctr_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-        CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO (this, out);</div><div class='del'>-</div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                loc-&gt;inode-&gt;gfid, NULL, NULL, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_REMOVEXATTR_WIND_FAILED,</div><div class='del'>-                        "Failed to insert removexattr wind");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+    CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                           NULL, NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_REMOVEXATTR_WIND_FAILED,</div><div class='add'>+               "Failed to insert removexattr wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_removexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************truncate****************************************/</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+ctr_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_TRUNCATE_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert truncate unwind");</div><div class='del'>-        }</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_TRUNCATE_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert truncate unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                      postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  off_t offset, dict_t *xdata)</div><div class='add'>+ctr_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-</div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                loc-&gt;inode-&gt;gfid, NULL, NULL, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_TRUNCATE_WIND_FAILED,</div><div class='del'>-                        "Failed to insert truncate wind");</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                           NULL, NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_TRUNCATE_WIND_FAILED,</div><div class='add'>+               "Failed to insert truncate wind");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_truncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************ftruncate***************************************/</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                       struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+ctr_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                  struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this,</div><div class='del'>-                        GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FTRUNCATE_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert ftruncate unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_FTRUNCATE_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert ftruncate unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                      postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   off_t offset, dict_t *xdata)</div><div class='add'>+ctr_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                fd-&gt;inode-&gt;gfid, NULL, NULL, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FTRUNCATE_WIND_FAILED,</div><div class='del'>-                        "Failed to insert ftruncate wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_INSERT_FTRUNCATE_WIND_FAILED,</div><div class='add'>+               "Failed to insert ftruncate wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_ftruncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                    fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************rename******************************************/</div><div class='ctx'> int32_t</div><div class='del'>-ctr_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                    struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                    struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+ctr_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+               struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+               struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        uint32_t remaining_links        = -1;</div><div class='del'>-        gf_ctr_local_t *ctr_local       = NULL;</div><div class='del'>-        gfdb_fop_type_t fop_type        = GFDB_FOP_INVALID_OP;</div><div class='del'>-        gfdb_fop_path_t fop_path        = GFDB_FOP_INVALID;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(this);</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO (this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='del'>-</div><div class='del'>-        ret = ctr_insert_unwind (frame, this,</div><div class='del'>-                        GFDB_FOP_DENTRY_WRITE, GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_RENAME_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert rename unwind");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='del'>-        /*</div><div class='del'>-         *</div><div class='del'>-         * Extracting GF_RESPONSE_LINK_COUNT_XDATA from POSIX Xlator</div><div class='del'>-         * This is only set when we are overwriting hardlinks.</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        ret = dict_get_uint32 (xdata , GF_RESPONSE_LINK_COUNT_XDATA,</div><div class='del'>-                                &amp;remaining_links);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_GET_CTR_RESPONSE_LINK_COUNT_XDATA_FAILED,</div><div class='del'>-                        "Failed to getting GF_RESPONSE_LINK_COUNT_XDATA");</div><div class='del'>-                remaining_links = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t remaining_links = -1;</div><div class='add'>+    gf_ctr_local_t *ctr_local = NULL;</div><div class='add'>+    gfdb_fop_type_t fop_type = GFDB_FOP_INVALID_OP;</div><div class='add'>+    gfdb_fop_path_t fop_path = GFDB_FOP_INVALID;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='add'>+</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='add'>+                            GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_RENAME_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert rename unwind");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctr_local = frame-&gt;local;</div><div class='del'>-        if (!ctr_local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_NULL_LOCAL,</div><div class='del'>-                        "ctr_local is NULL.");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='add'>+    /*</div><div class='add'>+     *</div><div class='add'>+     * Extracting GF_RESPONSE_LINK_COUNT_XDATA from POSIX Xlator</div><div class='add'>+     * This is only set when we are overwriting hardlinks.</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    ret = dict_get_uint32(xdata, GF_RESPONSE_LINK_COUNT_XDATA,</div><div class='add'>+                          &amp;remaining_links);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_GET_CTR_RESPONSE_LINK_COUNT_XDATA_FAILED,</div><div class='add'>+               "Failed to getting GF_RESPONSE_LINK_COUNT_XDATA");</div><div class='add'>+        remaining_links = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is not the only link */</div><div class='del'>-        if (remaining_links &gt; 1) {</div><div class='del'>-                fop_type = GFDB_FOP_DENTRY_WRITE;</div><div class='del'>-                fop_path = GFDB_FOP_UNDEL;</div><div class='del'>-        }</div><div class='del'>-        /* Last link that was deleted */</div><div class='del'>-        else if (remaining_links == 1) {</div><div class='del'>-                fop_type = GFDB_FOP_DENTRY_WRITE;</div><div class='del'>-                fop_path = GFDB_FOP_UNDEL_ALL;</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_RENAME_UNWIND_FAILED,</div><div class='del'>-                        "Invalid link count from posix");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ctr_local = frame-&gt;local;</div><div class='add'>+    if (!ctr_local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_NULL_LOCAL,</div><div class='add'>+               "ctr_local is NULL.");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is not the only link */</div><div class='add'>+    if (remaining_links &gt; 1) {</div><div class='add'>+        fop_type = GFDB_FOP_DENTRY_WRITE;</div><div class='add'>+        fop_path = GFDB_FOP_UNDEL;</div><div class='add'>+    }</div><div class='add'>+    /* Last link that was deleted */</div><div class='add'>+    else if (remaining_links == 1) {</div><div class='add'>+        fop_type = GFDB_FOP_DENTRY_WRITE;</div><div class='add'>+        fop_path = GFDB_FOP_UNDEL_ALL;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_RENAME_UNWIND_FAILED,</div><div class='add'>+               "Invalid link count from posix");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ctr_delete_hard_link_from_db (this,</div><div class='del'>-                                    CTR_DB_REC(ctr_local).old_gfid,</div><div class='del'>-                                    CTR_DB_REC(ctr_local).pargfid,</div><div class='del'>-                                    CTR_DB_REC(ctr_local).file_name,</div><div class='del'>-                                    fop_type, fop_path);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='del'>-                        "Failed to delete records of %s",</div><div class='del'>-                        CTR_DB_REC(ctr_local).old_file_name);</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_delete_hard_link_from_db(</div><div class='add'>+        this, CTR_DB_REC(ctr_local).old_gfid, CTR_DB_REC(ctr_local).pargfid,</div><div class='add'>+        CTR_DB_REC(ctr_local).file_name, fop_type, fop_path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='add'>+               "Failed to delete records of %s",</div><div class='add'>+               CTR_DB_REC(ctr_local).old_file_name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (rename, frame, op_ret, op_errno, buf,</div><div class='del'>-                             preoldparent, postoldparent, prenewparent,</div><div class='del'>-                             postnewparent,</div><div class='del'>-                             xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                        postoldparent, prenewparent, postnewparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='del'>-                loc_t *newloc, dict_t *xdata)</div><div class='add'>+ctr_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret                                         = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx               = &amp;ctr_inode_cx;</div><div class='del'>-        gf_ctr_link_context_t new_link_cx, old_link_cx;</div><div class='del'>-        gf_ctr_link_context_t *_nlink_cx                = &amp;new_link_cx;</div><div class='del'>-        gf_ctr_link_context_t *_olink_cx                = &amp;old_link_cx;</div><div class='del'>-        int is_dict_created                             = 0;</div><div class='del'>-        ctr_xlator_ctx_t *ctr_xlator_ctx                = NULL;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-</div><div class='del'>-        /*Fill old link context*/</div><div class='del'>-        FILL_CTR_LINK_CX(_olink_cx, oldloc-&gt;pargfid, oldloc-&gt;name, out);</div><div class='del'>-</div><div class='del'>-        /*Fill new link context*/</div><div class='del'>-        FILL_CTR_LINK_CX(_nlink_cx, newloc-&gt;pargfid, newloc-&gt;name, out);</div><div class='del'>-</div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, oldloc-&gt;inode-&gt;ia_type,</div><div class='del'>-                oldloc-&gt;inode-&gt;gfid, _nlink_cx, _olink_cx,</div><div class='del'>-                GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WIND);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* If the rename is a overwrite of hardlink</div><div class='del'>-         * rename ("file1", "file2")</div><div class='del'>-         * file1 is hardlink for gfid say 00000000-0000-0000-0000-00000000000A</div><div class='del'>-         * file2 is hardlink for gfid say 00000000-0000-0000-0000-00000000000B</div><div class='del'>-         * so we are saving file2 gfid in old_gfid so that we delete entries</div><div class='del'>-         * from the db during rename callback if the fop is successful</div><div class='del'>-         * */</div><div class='del'>-        if (newloc-&gt;inode) {</div><div class='del'>-                /* This is the GFID from where the newloc hardlink will be</div><div class='del'>-                 * unlinked */</div><div class='del'>-                _inode_cx-&gt;old_gfid = &amp;newloc-&gt;inode-&gt;gfid;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    gf_ctr_link_context_t new_link_cx, old_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_nlink_cx = &amp;new_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_olink_cx = &amp;old_link_cx;</div><div class='add'>+    int is_dict_created = 0;</div><div class='add'>+    ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+</div><div class='add'>+    /*Fill old link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_olink_cx, oldloc-&gt;pargfid, oldloc-&gt;name, out);</div><div class='add'>+</div><div class='add'>+    /*Fill new link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_nlink_cx, newloc-&gt;pargfid, newloc-&gt;name, out);</div><div class='add'>+</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, oldloc-&gt;inode-&gt;ia_type,</div><div class='add'>+                           oldloc-&gt;inode-&gt;gfid, _nlink_cx, _olink_cx,</div><div class='add'>+                           GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WIND);</div><div class='add'>+</div><div class='add'>+    /* If the rename is a overwrite of hardlink</div><div class='add'>+     * rename ("file1", "file2")</div><div class='add'>+     * file1 is hardlink for gfid say 00000000-0000-0000-0000-00000000000A</div><div class='add'>+     * file2 is hardlink for gfid say 00000000-0000-0000-0000-00000000000B</div><div class='add'>+     * so we are saving file2 gfid in old_gfid so that we delete entries</div><div class='add'>+     * from the db during rename callback if the fop is successful</div><div class='add'>+     * */</div><div class='add'>+    if (newloc-&gt;inode) {</div><div class='add'>+        /* This is the GFID from where the newloc hardlink will be</div><div class='add'>+         * unlinked */</div><div class='add'>+        _inode_cx-&gt;old_gfid = &amp;newloc-&gt;inode-&gt;gfid;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Is a metatdata fop */</div><div class='add'>+    _inode_cx-&gt;is_metadata_fop = _gf_true;</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_RENAME_WIND_FAILED,</div><div class='add'>+               "Failed to insert rename wind");</div><div class='add'>+    } else {</div><div class='add'>+        /* We are doing updation of hard link in inode context in wind</div><div class='add'>+         * As we don't get the "inode" in the call back for rename */</div><div class='add'>+        ret = update_hard_link_ctx(frame, this, oldloc-&gt;inode);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_UPDATE_HARDLINK_FAILED,</div><div class='add'>+                   "Failed "</div><div class='add'>+                   "updating hard link in ctr inode context");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Is a metatdata fop */</div><div class='del'>-        _inode_cx-&gt;is_metadata_fop = _gf_true;</div><div class='del'>-</div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_RENAME_WIND_FAILED,</div><div class='del'>-                        "Failed to insert rename wind");</div><div class='del'>-        } else {</div><div class='del'>-                /* We are doing updation of hard link in inode context in wind</div><div class='del'>-                 * As we don't get the "inode" in the call back for rename */</div><div class='del'>-                ret = update_hard_link_ctx (frame, this, oldloc-&gt;inode);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_UPDATE_HARDLINK_FAILED, "Failed "</div><div class='del'>-                                "updating hard link in ctr inode context");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* If the newloc has an inode. i.e acquiring hardlink of an</div><div class='del'>-                 * exisitng file i.e overwritting a file.</div><div class='del'>-                 * */</div><div class='del'>-                if (newloc-&gt;inode) {</div><div class='del'>-</div><div class='del'>-                        /* Getting the ctr inode context variable for</div><div class='del'>-                         * inode whose hardlink will be acquired during</div><div class='del'>-                         * the rename</div><div class='del'>-                         * */</div><div class='del'>-                        ctr_xlator_ctx = get_ctr_xlator_ctx (this,</div><div class='del'>-                                                                newloc-&gt;inode);</div><div class='del'>-                        if (!ctr_xlator_ctx) {</div><div class='del'>-                                /* Since there is no ctr inode context</div><div class='del'>-                                 * so nothing more to do */</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Deleting hardlink from context variable */</div><div class='del'>-                        ret = ctr_delete_hard_link (this, ctr_xlator_ctx,</div><div class='del'>-                                                newloc-&gt;pargfid, newloc-&gt;name);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CTR_MSG_DELETE_HARDLINK_FAILED,</div><div class='del'>-                                        "Failed to delete hard link");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Requesting for number of hardlinks on the newloc</div><div class='del'>-                         * inode from POSIX.</div><div class='del'>-                         * */</div><div class='del'>-                        is_dict_created = set_posix_link_request (this, &amp;xdata);</div><div class='del'>-                        if (is_dict_created == -1) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        /* If the newloc has an inode. i.e acquiring hardlink of an</div><div class='add'>+         * exisitng file i.e overwritting a file.</div><div class='add'>+         * */</div><div class='add'>+        if (newloc-&gt;inode) {</div><div class='add'>+            /* Getting the ctr inode context variable for</div><div class='add'>+             * inode whose hardlink will be acquired during</div><div class='add'>+             * the rename</div><div class='add'>+             * */</div><div class='add'>+            ctr_xlator_ctx = get_ctr_xlator_ctx(this, newloc-&gt;inode);</div><div class='add'>+            if (!ctr_xlator_ctx) {</div><div class='add'>+                /* Since there is no ctr inode context</div><div class='add'>+                 * so nothing more to do */</div><div class='add'>+                ret = 0;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Deleting hardlink from context variable */</div><div class='add'>+            ret = ctr_delete_hard_link(this, ctr_xlator_ctx, newloc-&gt;pargfid,</div><div class='add'>+                                       newloc-&gt;name);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CTR_MSG_DELETE_HARDLINK_FAILED,</div><div class='add'>+                       "Failed to delete hard link");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* Requesting for number of hardlinks on the newloc</div><div class='add'>+             * inode from POSIX.</div><div class='add'>+             * */</div><div class='add'>+            is_dict_created = set_posix_link_request(this, &amp;xdata);</div><div class='add'>+            if (is_dict_created == -1) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_rename_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='add'>+    STACK_WIND(frame, ctr_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='ctx'> </div><div class='del'>-        if (is_dict_created == 1) {</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        }</div><div class='add'>+    if (is_dict_created == 1) {</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************unlink******************************************/</div><div class='ctx'> int32_t</div><div class='del'>-ctr_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='add'>+ctr_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+               struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        uint32_t remaining_links                = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint32_t remaining_links = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /*</div><div class='del'>-         *</div><div class='del'>-         * Extracting GF_RESPONSE_LINK_COUNT_XDATA from POSIX Xlator</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        ret = dict_get_uint32 (xdata , GF_RESPONSE_LINK_COUNT_XDATA,</div><div class='del'>-                                &amp;remaining_links);</div><div class='add'>+    /*</div><div class='add'>+     *</div><div class='add'>+     * Extracting GF_RESPONSE_LINK_COUNT_XDATA from POSIX Xlator</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    ret = dict_get_uint32(xdata, GF_RESPONSE_LINK_COUNT_XDATA,</div><div class='add'>+                          &amp;remaining_links);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_GET_CTR_RESPONSE_LINK_COUNT_XDATA_FAILED,</div><div class='add'>+               "Failed to getting GF_RESPONSE_LINK_COUNT_XDATA");</div><div class='add'>+        remaining_links = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*This is not the only link*/</div><div class='add'>+    if (remaining_links != 1) {</div><div class='add'>+        ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='add'>+                                GFDB_FOP_UNDEL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_GET_CTR_RESPONSE_LINK_COUNT_XDATA_FAILED,</div><div class='del'>-                        "Failed to getting GF_RESPONSE_LINK_COUNT_XDATA");</div><div class='del'>-                remaining_links = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*This is not the only link*/</div><div class='del'>-        if (remaining_links != 1) {</div><div class='del'>-</div><div class='del'>-                ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='del'>-                                        GFDB_FOP_UNDEL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='del'>-                                "Failed to insert unlink unwind");</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='add'>+                   "Failed to insert unlink unwind");</div><div class='ctx'>         }</div><div class='del'>-        /*Last link that was deleted*/</div><div class='del'>-        else if (remaining_links == 1) {</div><div class='del'>-</div><div class='del'>-                ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='del'>-                                        GFDB_FOP_UNDEL_ALL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='del'>-                                "Failed to insert unlink unwind");</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    /*Last link that was deleted*/</div><div class='add'>+    else if (remaining_links == 1) {</div><div class='add'>+        ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='add'>+                                GFDB_FOP_UNDEL_ALL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='add'>+                   "Failed to insert unlink unwind");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_unlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, int xflag, dict_t *xdata)</div><div class='add'>+ctr_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-        gf_ctr_link_context_t ctr_link_cx;</div><div class='del'>-        gf_ctr_link_context_t *_link_cx = &amp;ctr_link_cx;</div><div class='del'>-        gf_boolean_t is_xdata_created = _gf_false;</div><div class='del'>-        struct iatt dummy_stat        = {0};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (frame);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    gf_ctr_link_context_t ctr_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_link_cx = &amp;ctr_link_cx;</div><div class='add'>+    gf_boolean_t is_xdata_created = _gf_false;</div><div class='add'>+    struct iatt dummy_stat = {0};</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='ctx'> </div><div class='del'>-        /*Fill link context*/</div><div class='del'>-        FILL_CTR_LINK_CX(_link_cx, loc-&gt;pargfid, loc-&gt;name, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                loc-&gt;inode-&gt;gfid, _link_cx, NULL,</div><div class='del'>-                GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WDEL);</div><div class='add'>+    /*Fill link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_link_cx, loc-&gt;pargfid, loc-&gt;name, out);</div><div class='ctx'> </div><div class='del'>-        /*Internal FOP*/</div><div class='del'>-        _inode_cx-&gt;is_internal_fop = is_internal_fop (frame, xdata);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                           _link_cx, NULL, GFDB_FOP_DENTRY_WRITE,</div><div class='add'>+                           GFDB_FOP_WDEL);</div><div class='ctx'> </div><div class='del'>-        /* Is a metadata FOP */</div><div class='del'>-        _inode_cx-&gt;is_metadata_fop = _gf_true;</div><div class='add'>+    /*Internal FOP*/</div><div class='add'>+    _inode_cx-&gt;is_internal_fop = is_internal_fop(frame, xdata);</div><div class='ctx'> </div><div class='del'>-        /* If its a internal FOP and dht link file donot record*/</div><div class='del'>-        if (_inode_cx-&gt;is_internal_fop &amp;&amp;</div><div class='del'>-                        dht_is_linkfile (&amp;dummy_stat, xdata)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Is a metadata FOP */</div><div class='add'>+    _inode_cx-&gt;is_metadata_fop = _gf_true;</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    /* If its a internal FOP and dht link file donot record*/</div><div class='add'>+    if (_inode_cx-&gt;is_internal_fop &amp;&amp; dht_is_linkfile(&amp;dummy_stat, xdata)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert unlink wind");</div><div class='add'>+    } else {</div><div class='add'>+        /* We are doing delete of hard link in inode context in wind</div><div class='add'>+         * As we don't get the "inode" in the call back for rename */</div><div class='add'>+        ret = delete_hard_link_ctx(frame, this, loc-&gt;inode);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_UNLINK_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert unlink wind");</div><div class='del'>-        } else {</div><div class='del'>-                /* We are doing delete of hard link in inode context in wind</div><div class='del'>-                 * As we don't get the "inode" in the call back for rename */</div><div class='del'>-                ret = delete_hard_link_ctx (frame, this, loc-&gt;inode);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_DELETE_HARDLINK_FAILED, "Failed "</div><div class='del'>-                                "deleting hard link from ctr inode context");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         *</div><div class='del'>-         * Sending GF_REQUEST_LINK_COUNT_XDATA</div><div class='del'>-         * to POSIX Xlator to send link count in unwind path</div><div class='del'>-         *</div><div class='del'>-         * */</div><div class='del'>-        /*create xdata if NULL*/</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                xdata = dict_new();</div><div class='del'>-                is_xdata_created = (xdata) ? _gf_true : _gf_false;</div><div class='del'>-        }</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_XDATA_NULL, "xdata is NULL :Cannot send "</div><div class='del'>-                        "GF_REQUEST_LINK_COUNT_XDATA to posix");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_DELETE_HARDLINK_FAILED,</div><div class='add'>+                   "Failed "</div><div class='add'>+                   "deleting hard link from ctr inode context");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     *</div><div class='add'>+     * Sending GF_REQUEST_LINK_COUNT_XDATA</div><div class='add'>+     * to POSIX Xlator to send link count in unwind path</div><div class='add'>+     *</div><div class='add'>+     * */</div><div class='add'>+    /*create xdata if NULL*/</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+        is_xdata_created = (xdata) ? _gf_true : _gf_false;</div><div class='add'>+    }</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_XDATA_NULL,</div><div class='add'>+               "xdata is NULL :Cannot send "</div><div class='add'>+               "GF_REQUEST_LINK_COUNT_XDATA to posix");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, GF_REQUEST_LINK_COUNT_XDATA, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_SET_CTR_RESPONSE_LINK_COUNT_XDATA_FAILED,</div><div class='del'>-                        "Failed setting GF_REQUEST_LINK_COUNT_XDATA");</div><div class='del'>-                if (is_xdata_created) {</div><div class='del'>-                        dict_unref (xdata);</div><div class='del'>-                }</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_set_int32(xdata, GF_REQUEST_LINK_COUNT_XDATA, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_SET_CTR_RESPONSE_LINK_COUNT_XDATA_FAILED,</div><div class='add'>+               "Failed setting GF_REQUEST_LINK_COUNT_XDATA");</div><div class='add'>+        if (is_xdata_created) {</div><div class='add'>+            dict_unref(xdata);</div><div class='ctx'>         }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_unlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflag, xdata);</div><div class='add'>+    STACK_WIND(frame, ctr_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='ctx'> </div><div class='del'>-        if (is_xdata_created)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (is_xdata_created)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************fsync******************************************/</div><div class='ctx'> int32_t</div><div class='del'>-ctr_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+ctr_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FSYNC_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert fsync unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_FSYNC_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert fsync unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsync, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                      xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-               int32_t flags, dict_t *xdata)</div><div class='add'>+ctr_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                fd-&gt;inode-&gt;gfid, NULL, NULL,</div><div class='del'>-                GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FSYNC_WIND_FAILED,</div><div class='del'>-                        "Failed to insert fsync wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_FSYNC_WIND_FAILED,</div><div class='add'>+               "Failed to insert fsync wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_fsync_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsync,</div><div class='del'>-                    fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************setxattr****************************************/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ctr_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+ctr_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FSYNC_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert setxattr unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_FSYNC_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert setxattr unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ctr_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, dict_t *xattr, int flags, dict_t *xdata)</div><div class='add'>+ctr_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr,</div><div class='add'>+             int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-        CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO (this, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+    CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO(this, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                loc-&gt;inode-&gt;gfid, NULL, NULL,</div><div class='del'>-                GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, loc-&gt;inode-&gt;gfid,</div><div class='add'>+                           NULL, NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='del'>-                        "Failed to insert setxattr wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='add'>+               "Failed to insert setxattr wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_setxattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, xattr, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, xattr, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> /**************************** fsetxattr *************************************/</div><div class='ctx'> int32_t</div><div class='del'>-ctr_fsetxattr_cbk (call_frame_t *frame,</div><div class='del'>-                         void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-                         int32_t op_errno, dict_t *xdata)</div><div class='add'>+ctr_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_FSYNC_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert fsetxattr unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_WRITE, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_FSYNC_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert fsetxattr unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ctr_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-               int32_t flags, dict_t *xdata)</div><div class='add'>+ctr_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+              int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-        CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO (this, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+    CTR_RECORD_METADATA_HEAT_IS_DISABLED_THEN_GOTO(this, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                fd-&gt;inode-&gt;gfid, NULL, NULL,</div><div class='del'>-                GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='del'>-                        "Failed to insert fsetxattr wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_SETATTR_WIND_FAILED,</div><div class='add'>+               "Failed to insert fsetxattr wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> /****************************mknod*******************************************/</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-ctr_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                 struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+ctr_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+              struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        ctr_heal_ret_val_t ret_val = CTR_CTX_ERROR;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_heal_ret_val_t ret_val = CTR_CTX_ERROR;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        /* Add hard link to the list */</div><div class='del'>-        ret_val = add_hard_link_ctx (frame, this, inode);</div><div class='del'>-        if (ret_val == CTR_CTX_ERROR) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "Failed adding hard link");</div><div class='del'>-        }</div><div class='add'>+    /* Add hard link to the list */</div><div class='add'>+    ret_val = add_hard_link_ctx(frame, this, inode);</div><div class='add'>+    if (ret_val == CTR_CTX_ERROR) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Failed adding hard link");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_CREATE_WRITE,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_MKNOD_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert mknod unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_CREATE_WRITE,</div><div class='add'>+                            GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_MKNOD_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert mknod unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(mknod, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ctr_mknod (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, mode_t mode, dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+ctr_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+          dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-        gf_ctr_link_context_t  ctr_link_cx;</div><div class='del'>-        gf_ctr_link_context_t  *_link_cx = &amp;ctr_link_cx;</div><div class='del'>-        uuid_t gfid                             = {0,};</div><div class='del'>-        uuid_t *ptr_gfid                        = &amp;gfid;</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(frame-&gt;root);</div><div class='del'>-</div><div class='del'>-        /*get gfid from xdata dict*/</div><div class='del'>-        ret = dict_get_gfuuid (xdata, "gfid-req", &amp;gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "failed to get gfid from dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    gf_ctr_link_context_t ctr_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_link_cx = &amp;ctr_link_cx;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t *ptr_gfid = &amp;gfid;</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(frame-&gt;root);</div><div class='add'>+</div><div class='add'>+    /*get gfid from xdata dict*/</div><div class='add'>+    ret = dict_get_gfuuid(xdata, "gfid-req", &amp;gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "failed to get gfid from dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*fill ctr link context*/</div><div class='del'>-        FILL_CTR_LINK_CX (_link_cx, loc-&gt;pargfid, loc-&gt;name, out);</div><div class='add'>+    /*fill ctr link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_link_cx, loc-&gt;pargfid, loc-&gt;name, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT (_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                *ptr_gfid, _link_cx, NULL,</div><div class='del'>-                GFDB_FOP_CREATE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, *ptr_gfid, _link_cx,</div><div class='add'>+                           NULL, GFDB_FOP_CREATE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_MKNOD_WIND_FAILED,</div><div class='del'>-                        "Failed to insert mknod wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_MKNOD_WIND_FAILED,</div><div class='add'>+               "Failed to insert mknod wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_mknod_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;mknod,</div><div class='del'>-                    loc, mode, rdev, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************create******************************************/</div><div class='ctx'> int</div><div class='del'>-ctr_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int op_ret, int op_errno,</div><div class='del'>-                fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+ctr_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+               int op_errno, fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+               struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = add_hard_link_ctx (frame, this, inode);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_ADD_HARDLINK_FAILED,</div><div class='del'>-                        "Failed adding hard link");</div><div class='del'>-        }</div><div class='add'>+    ret = add_hard_link_ctx(frame, this, inode);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_ADD_HARDLINK_FAILED,</div><div class='add'>+               "Failed adding hard link");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_CREATE_WRITE,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_CREATE_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert create unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_CREATE_WRITE,</div><div class='add'>+                            GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_CREATE_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert create unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode,</div><div class='del'>-                             stbuf,</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, stbuf,</div><div class='ctx'>                         preparent, postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ctr_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-            mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+ctr_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-        gf_ctr_link_context_t  ctr_link_cx;</div><div class='del'>-        gf_ctr_link_context_t  *_link_cx = &amp;ctr_link_cx;</div><div class='del'>-        uuid_t            gfid                  = {0,};</div><div class='del'>-        uuid_t            *ptr_gfid             = &amp;gfid;</div><div class='del'>-        struct iatt dummy_stat                  = {0};</div><div class='del'>-</div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(frame-&gt;root);</div><div class='del'>-</div><div class='del'>-        /*Get GFID from Xdata dict*/</div><div class='del'>-        ret = dict_get_gfuuid (xdata, "gfid-req", &amp;gfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_GET_GFID_FROM_DICT_FAILED,</div><div class='del'>-                        "failed to get gfid from dict");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*fill ctr link context*/</div><div class='del'>-        FILL_CTR_LINK_CX(_link_cx, loc-&gt;pargfid, loc-&gt;name, out);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    gf_ctr_link_context_t ctr_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_link_cx = &amp;ctr_link_cx;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t *ptr_gfid = &amp;gfid;</div><div class='add'>+    struct iatt dummy_stat = {0};</div><div class='add'>+</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(frame-&gt;root);</div><div class='add'>+</div><div class='add'>+    /*Get GFID from Xdata dict*/</div><div class='add'>+    ret = dict_get_gfuuid(xdata, "gfid-req", &amp;gfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_GET_GFID_FROM_DICT_FAILED,</div><div class='add'>+               "failed to get gfid from dict");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type,</div><div class='del'>-                *ptr_gfid, _link_cx, NULL,</div><div class='del'>-                GFDB_FOP_CREATE_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*fill ctr link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_link_cx, loc-&gt;pargfid, loc-&gt;name, out);</div><div class='ctx'> </div><div class='del'>-        /*Internal FOP*/</div><div class='del'>-        _inode_cx-&gt;is_internal_fop = is_internal_fop (frame, xdata);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, loc-&gt;inode-&gt;ia_type, *ptr_gfid, _link_cx,</div><div class='add'>+                           NULL, GFDB_FOP_CREATE_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /* If its a internal FOP and dht link file donot record*/</div><div class='del'>-        if (_inode_cx-&gt;is_internal_fop &amp;&amp;</div><div class='del'>-                        dht_is_linkfile (&amp;dummy_stat, xdata)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /*Internal FOP*/</div><div class='add'>+    _inode_cx-&gt;is_internal_fop = is_internal_fop(frame, xdata);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, &amp;ctr_inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_CREATE_WIND_FAILED,</div><div class='del'>-                        "Failed to insert create wind");</div><div class='del'>-        }</div><div class='add'>+    /* If its a internal FOP and dht link file donot record*/</div><div class='add'>+    if (_inode_cx-&gt;is_internal_fop &amp;&amp; dht_is_linkfile(&amp;dummy_stat, xdata)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, &amp;ctr_inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_CREATE_WIND_FAILED,</div><div class='add'>+               "Failed to insert create wind");</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_create_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /****************************link********************************************/</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ctr_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int op_ret, int op_errno,</div><div class='del'>-              inode_t *inode, struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='add'>+ctr_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+             int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        /* Add hard link to the list */</div><div class='del'>-        ret = add_hard_link_ctx (frame, this, inode);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "Failed adding hard link");</div><div class='del'>-        }</div><div class='add'>+    /* Add hard link to the list */</div><div class='add'>+    ret = add_hard_link_ctx(frame, this, inode);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Failed adding hard link");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_CREATE_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert create unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_DENTRY_WRITE,</div><div class='add'>+                            GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_CREATE_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert create unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, op_ret, op_errno, inode, stbuf,</div><div class='del'>-                       preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ctr_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+ctr_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='del'>-        gf_ctr_link_context_t  ctr_link_cx;</div><div class='del'>-        gf_ctr_link_context_t  *_link_cx = &amp;ctr_link_cx;</div><div class='del'>-        struct iatt dummy_stat          = {0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    gf_ctr_link_context_t ctr_link_cx;</div><div class='add'>+    gf_ctr_link_context_t *_link_cx = &amp;ctr_link_cx;</div><div class='add'>+    struct iatt dummy_stat = {0};</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(frame);</div><div class='del'>-        GF_ASSERT(frame-&gt;root);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='add'>+    GF_ASSERT(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        /*fill ctr link context*/</div><div class='del'>-        FILL_CTR_LINK_CX(_link_cx, newloc-&gt;pargfid, newloc-&gt;name, out);</div><div class='add'>+    /*fill ctr link context*/</div><div class='add'>+    FILL_CTR_LINK_CX(_link_cx, newloc-&gt;pargfid, newloc-&gt;name, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, oldloc-&gt;inode-&gt;ia_type,</div><div class='del'>-                oldloc-&gt;inode-&gt;gfid, _link_cx, NULL,</div><div class='del'>-                GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, oldloc-&gt;inode-&gt;ia_type,</div><div class='add'>+                           oldloc-&gt;inode-&gt;gfid, _link_cx, NULL,</div><div class='add'>+                           GFDB_FOP_DENTRY_WRITE, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*Internal FOP*/</div><div class='del'>-        _inode_cx-&gt;is_internal_fop = is_internal_fop (frame, xdata);</div><div class='add'>+    /*Internal FOP*/</div><div class='add'>+    _inode_cx-&gt;is_internal_fop = is_internal_fop(frame, xdata);</div><div class='ctx'> </div><div class='del'>-        /* Is a metadata fop */</div><div class='del'>-        _inode_cx-&gt;is_metadata_fop = _gf_true;</div><div class='del'>-</div><div class='del'>-        /* If its a internal FOP and dht link file donot record*/</div><div class='del'>-        if (_inode_cx-&gt;is_internal_fop &amp;&amp;</div><div class='del'>-                        dht_is_linkfile (&amp;dummy_stat, xdata)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* Is a metadata fop */</div><div class='add'>+    _inode_cx-&gt;is_metadata_fop = _gf_true;</div><div class='ctx'> </div><div class='add'>+    /* If its a internal FOP and dht link file donot record*/</div><div class='add'>+    if (_inode_cx-&gt;is_internal_fop &amp;&amp; dht_is_linkfile(&amp;dummy_stat, xdata)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_LINK_WIND_FAILED,</div><div class='del'>-                        "Failed to insert link wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_LINK_WIND_FAILED,</div><div class='add'>+               "Failed to insert link wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_link_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************readv*****************************************/</div><div class='del'>-int ctr_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int op_ret, int op_errno,</div><div class='del'>-               struct iovec *vector, int count, struct iatt *stbuf,</div><div class='del'>-               struct iobref *iobref, dict_t *xdata) {</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='add'>+int</div><div class='add'>+ctr_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+              int op_errno, struct iovec *vector, int count, struct iatt *stbuf,</div><div class='add'>+              struct iobref *iobref, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_FOP_FAILED_THEN_GOTO (this, op_ret, op_errno, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_FOP_FAILED_THEN_GOTO(this, op_ret, op_errno, out);</div><div class='ctx'> </div><div class='del'>-        ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_READ,</div><div class='del'>-                                GFDB_FOP_UNWIND);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_CREATE_UNWIND_FAILED,</div><div class='del'>-                        "Failed to insert create unwind");</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_insert_unwind(frame, this, GFDB_FOP_INODE_READ, GFDB_FOP_UNWIND);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_CREATE_UNWIND_FAILED,</div><div class='add'>+               "Failed to insert create unwind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        ctr_free_frame_local (frame);</div><div class='add'>+    ctr_free_frame_local(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno, vector, count,</div><div class='del'>-                                stbuf, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                        iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ctr_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           fd_t *fd, size_t size, off_t off, uint32_t flags, dict_t *xdata)</div><div class='add'>+ctr_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, off_t off,</div><div class='add'>+          uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        gf_ctr_inode_context_t ctr_inode_cx;</div><div class='del'>-        gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_inode_context_t ctr_inode_cx;</div><div class='add'>+    gf_ctr_inode_context_t *_inode_cx = &amp;ctr_inode_cx;</div><div class='ctx'> </div><div class='del'>-        CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='del'>-        CTR_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, out);</div><div class='add'>+    CTR_IS_DISABLED_THEN_GOTO(this, out);</div><div class='add'>+    CTR_IF_INTERNAL_FOP_THEN_GOTO(frame, xdata, out);</div><div class='ctx'> </div><div class='del'>-         /*Fill ctr inode context*/</div><div class='del'>-        FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type,</div><div class='del'>-                fd-&gt;inode-&gt;gfid, NULL, NULL,</div><div class='del'>-                GFDB_FOP_INODE_READ, GFDB_FOP_WIND);</div><div class='add'>+    /*Fill ctr inode context*/</div><div class='add'>+    FILL_CTR_INODE_CONTEXT(_inode_cx, fd-&gt;inode-&gt;ia_type, fd-&gt;inode-&gt;gfid, NULL,</div><div class='add'>+                           NULL, GFDB_FOP_INODE_READ, GFDB_FOP_WIND);</div><div class='ctx'> </div><div class='del'>-        /*record into the database*/</div><div class='del'>-        ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INSERT_READV_WIND_FAILED,</div><div class='del'>-                        "Failed to insert readv wind");</div><div class='del'>-        }</div><div class='add'>+    /*record into the database*/</div><div class='add'>+    ret = ctr_insert_wind(frame, this, _inode_cx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INSERT_READV_WIND_FAILED,</div><div class='add'>+               "Failed to insert readv wind");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, ctr_readv_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;readv,</div><div class='del'>-                    fd, size, off, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ctr_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, off, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*******************************ctr_ipc****************************************/</div><div class='ctx'> </div><div class='ctx'> /*This is the call back function per record/file from data base*/</div><div class='ctx'> static int</div><div class='del'>-ctr_db_query_callback (gfdb_query_record_t *gfdb_query_record,</div><div class='del'>-                        void *args) {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        ctr_query_cbk_args_t *query_cbk_args = args;</div><div class='add'>+ctr_db_query_callback(gfdb_query_record_t *gfdb_query_record, void *args)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_query_cbk_args_t *query_cbk_args = args;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("ctr", query_cbk_args, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("ctr", query_cbk_args, out);</div><div class='ctx'> </div><div class='del'>-        ret = gfdb_write_query_record (query_cbk_args-&gt;query_fd,</div><div class='del'>-                                       gfdb_query_record);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("ctr", GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "Failed to write to query file");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gfdb_write_query_record(query_cbk_args-&gt;query_fd, gfdb_query_record);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("ctr", GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "Failed to write to query file");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        query_cbk_args-&gt;count++;</div><div class='add'>+    query_cbk_args-&gt;count++;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function does all the db queries related to tiering and</div><div class='hunk'>@@ -1703,867 +1584,775 @@ out:</div><div class='ctx'>  * On failure -1</div><div class='ctx'>  * */</div><div class='ctx'> int</div><div class='del'>-ctr_db_query (xlator_t *this,</div><div class='del'>-              void *conn_node,</div><div class='del'>-              char *query_file,</div><div class='del'>-              gfdb_ipc_ctr_params_t *ipc_ctr_params)</div><div class='add'>+ctr_db_query(xlator_t *this, void *conn_node, char *query_file,</div><div class='add'>+             gfdb_ipc_ctr_params_t *ipc_ctr_params)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        ctr_query_cbk_args_t query_cbk_args = {0};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("ctr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, conn_node, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, query_file, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, ipc_ctr_params, out);</div><div class='del'>-</div><div class='del'>-        /*Query for eligible files from db*/</div><div class='del'>-        query_cbk_args.query_fd = open (query_file,</div><div class='del'>-                        O_WRONLY | O_CREAT | O_APPEND,</div><div class='del'>-                        S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='del'>-        if (query_cbk_args.query_fd &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "Failed to open query file %s", query_file);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (!ipc_ctr_params-&gt;is_promote) {</div><div class='del'>-                if (ipc_ctr_params-&gt;emergency_demote) {</div><div class='del'>-                        /* emergency demotion mode */</div><div class='del'>-                        ret = find_all (conn_node,</div><div class='del'>-                                ctr_db_query_callback,</div><div class='del'>-                                (void *)&amp;query_cbk_args,</div><div class='del'>-                                ipc_ctr_params-&gt;query_limit);</div><div class='del'>-                } else {</div><div class='del'>-                        if (ipc_ctr_params-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='del'>-                                ipc_ctr_params-&gt;read_freq_threshold == 0) {</div><div class='del'>-                                ret = find_unchanged_for_time (</div><div class='del'>-                                        conn_node,</div><div class='del'>-                                        ctr_db_query_callback,</div><div class='del'>-                                        (void *)&amp;query_cbk_args,</div><div class='del'>-                                        &amp;ipc_ctr_params-&gt;time_stamp);</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = find_unchanged_for_time_freq (</div><div class='del'>-                                        conn_node,</div><div class='del'>-                                        ctr_db_query_callback,</div><div class='del'>-                                        (void *)&amp;query_cbk_args,</div><div class='del'>-                                        &amp;ipc_ctr_params-&gt;time_stamp,</div><div class='del'>-                                        ipc_ctr_params-&gt;write_freq_threshold,</div><div class='del'>-                                        ipc_ctr_params-&gt;read_freq_threshold,</div><div class='del'>-                                        _gf_false);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_query_cbk_args_t query_cbk_args = {0};</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("ctr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, conn_node, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, query_file, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, ipc_ctr_params, out);</div><div class='add'>+</div><div class='add'>+    /*Query for eligible files from db*/</div><div class='add'>+    query_cbk_args.query_fd = open(query_file, O_WRONLY | O_CREAT | O_APPEND,</div><div class='add'>+                                   S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);</div><div class='add'>+    if (query_cbk_args.query_fd &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "Failed to open query file %s", query_file);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (!ipc_ctr_params-&gt;is_promote) {</div><div class='add'>+        if (ipc_ctr_params-&gt;emergency_demote) {</div><div class='add'>+            /* emergency demotion mode */</div><div class='add'>+            ret = find_all(conn_node, ctr_db_query_callback,</div><div class='add'>+                           (void *)&amp;query_cbk_args,</div><div class='add'>+                           ipc_ctr_params-&gt;query_limit);</div><div class='ctx'>         } else {</div><div class='del'>-                if (ipc_ctr_params-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='del'>-                        ipc_ctr_params-&gt;read_freq_threshold == 0) {</div><div class='del'>-                        ret = find_recently_changed_files (</div><div class='del'>-                                conn_node,</div><div class='del'>-                                ctr_db_query_callback,</div><div class='del'>-                                (void *)&amp;query_cbk_args,</div><div class='del'>-                                &amp;ipc_ctr_params-&gt;time_stamp);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = find_recently_changed_files_freq (</div><div class='del'>-                                conn_node,</div><div class='del'>-                                ctr_db_query_callback,</div><div class='del'>-                                (void *)&amp;query_cbk_args,</div><div class='del'>-                                &amp;ipc_ctr_params-&gt;time_stamp,</div><div class='del'>-                                ipc_ctr_params-&gt;write_freq_threshold,</div><div class='del'>-                                ipc_ctr_params-&gt;read_freq_threshold,</div><div class='del'>-                                _gf_false);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: query from db failed");</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+            if (ipc_ctr_params-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='add'>+                ipc_ctr_params-&gt;read_freq_threshold == 0) {</div><div class='add'>+                ret = find_unchanged_for_time(conn_node, ctr_db_query_callback,</div><div class='add'>+                                              (void *)&amp;query_cbk_args,</div><div class='add'>+                                              &amp;ipc_ctr_params-&gt;time_stamp);</div><div class='add'>+            } else {</div><div class='add'>+                ret = find_unchanged_for_time_freq(</div><div class='add'>+                    conn_node, ctr_db_query_callback, (void *)&amp;query_cbk_args,</div><div class='add'>+                    &amp;ipc_ctr_params-&gt;time_stamp,</div><div class='add'>+                    ipc_ctr_params-&gt;write_freq_threshold,</div><div class='add'>+                    ipc_ctr_params-&gt;read_freq_threshold, _gf_false);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (ipc_ctr_params-&gt;write_freq_threshold == 0 &amp;&amp;</div><div class='add'>+            ipc_ctr_params-&gt;read_freq_threshold == 0) {</div><div class='add'>+            ret = find_recently_changed_files(conn_node, ctr_db_query_callback,</div><div class='add'>+                                              (void *)&amp;query_cbk_args,</div><div class='add'>+                                              &amp;ipc_ctr_params-&gt;time_stamp);</div><div class='add'>+        } else {</div><div class='add'>+            ret = find_recently_changed_files_freq(</div><div class='add'>+                conn_node, ctr_db_query_callback, (void *)&amp;query_cbk_args,</div><div class='add'>+                &amp;ipc_ctr_params-&gt;time_stamp,</div><div class='add'>+                ipc_ctr_params-&gt;write_freq_threshold,</div><div class='add'>+                ipc_ctr_params-&gt;read_freq_threshold, _gf_false);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: query from db failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = clear_files_heat (conn_node);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: Failed to clear db entries");</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = clear_files_heat(conn_node);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: Failed to clear db entries");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (!ret)</div><div class='del'>-                ret = query_cbk_args.count;</div><div class='add'>+    if (!ret)</div><div class='add'>+        ret = query_cbk_args.count;</div><div class='ctx'> </div><div class='del'>-        if (query_cbk_args.query_fd &gt;= 0) {</div><div class='del'>-                sys_close (query_cbk_args.query_fd);</div><div class='del'>-                query_cbk_args.query_fd = -1;</div><div class='del'>-        }</div><div class='add'>+    if (query_cbk_args.query_fd &gt;= 0) {</div><div class='add'>+        sys_close(query_cbk_args.query_fd);</div><div class='add'>+        query_cbk_args.query_fd = -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-ctr_compact_thread (void *args)</div><div class='add'>+ctr_compact_thread(void *args)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        void *db_conn = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    void *db_conn = NULL;</div><div class='ctx'> </div><div class='del'>-        xlator_t *this = NULL;</div><div class='del'>-        gf_ctr_private_t *priv = NULL;</div><div class='del'>-        gf_boolean_t compact_active = _gf_false;</div><div class='del'>-        gf_boolean_t compact_mode_switched = _gf_false;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t compact_active = _gf_false;</div><div class='add'>+    gf_boolean_t compact_mode_switched = _gf_false;</div><div class='ctx'> </div><div class='del'>-        this = (xlator_t *)args;</div><div class='add'>+    this = (xlator_t *)args;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO("ctr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("ctr", this, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        db_conn = priv-&gt;_db_conn;</div><div class='del'>-        compact_active = priv-&gt;compact_active;</div><div class='del'>-        compact_mode_switched = priv-&gt;compact_mode_switched;</div><div class='add'>+    db_conn = priv-&gt;_db_conn;</div><div class='add'>+    compact_active = priv-&gt;compact_active;</div><div class='add'>+    compact_mode_switched = priv-&gt;compact_mode_switched;</div><div class='ctx'> </div><div class='del'>-        gf_msg ("ctr-compact", GF_LOG_INFO, 0, CTR_MSG_SET,</div><div class='del'>-                "Starting compaction");</div><div class='add'>+    gf_msg("ctr-compact", GF_LOG_INFO, 0, CTR_MSG_SET, "Starting compaction");</div><div class='ctx'> </div><div class='del'>-        ret = compact_db(db_conn, compact_active,</div><div class='del'>-                         compact_mode_switched);</div><div class='add'>+    ret = compact_db(db_conn, compact_active, compact_mode_switched);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg ("ctr-compact", GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                        "Failed to perform the compaction");</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg("ctr-compact", GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+               "Failed to perform the compaction");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = pthread_mutex_lock (&amp;priv-&gt;compact_lock);</div><div class='add'>+    ret = pthread_mutex_lock(&amp;priv-&gt;compact_lock);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                        "Failed to acquire lock");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+               "Failed to acquire lock");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* We are done compaction on this brick. Set all flags to false */</div><div class='del'>-        priv-&gt;compact_active = _gf_false;</div><div class='del'>-        priv-&gt;compact_mode_switched = _gf_false;</div><div class='add'>+    /* We are done compaction on this brick. Set all flags to false */</div><div class='add'>+    priv-&gt;compact_active = _gf_false;</div><div class='add'>+    priv-&gt;compact_mode_switched = _gf_false;</div><div class='ctx'> </div><div class='del'>-        ret = pthread_mutex_unlock (&amp;priv-&gt;compact_lock);</div><div class='add'>+    ret = pthread_mutex_unlock(&amp;priv-&gt;compact_lock);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                        "Failed to release lock");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+               "Failed to release lock");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ctr_ipc_helper (xlator_t *this, dict_t *in_dict,</div><div class='del'>-                dict_t *out_dict)</div><div class='add'>+ctr_ipc_helper(xlator_t *this, dict_t *in_dict, dict_t *out_dict)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        char *ctr_ipc_ops = NULL;</div><div class='del'>-        gf_ctr_private_t *priv = NULL;</div><div class='del'>-        char *db_version = NULL;</div><div class='del'>-        char *db_param_key = NULL;</div><div class='del'>-        char *db_param = NULL;</div><div class='del'>-        char *query_file = NULL;</div><div class='del'>-        gfdb_ipc_ctr_params_t *ipc_ctr_params = NULL;</div><div class='del'>-        int result = 0;</div><div class='del'>-        pthread_t compact_thread;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("ctr", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv-&gt;_db_conn, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, in_dict, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, out_dict, out);</div><div class='del'>-</div><div class='del'>-        GET_DB_PARAM_FROM_DICT(this-&gt;name, in_dict, GFDB_IPC_CTR_KEY,</div><div class='del'>-                                ctr_ipc_ops, out);</div><div class='del'>-</div><div class='del'>-        /*if its a db clear operation */</div><div class='del'>-        if (strncmp (ctr_ipc_ops, GFDB_IPC_CTR_CLEAR_OPS,</div><div class='del'>-                        SLEN (GFDB_IPC_CTR_CLEAR_OPS)) == 0) {</div><div class='del'>-</div><div class='del'>-                ret = clear_files_heat (priv-&gt;_db_conn);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-        } /* if its a query operation, in  which case its query + clear db*/</div><div class='del'>-        else if (strncmp (ctr_ipc_ops, GFDB_IPC_CTR_QUERY_OPS,</div><div class='del'>-                                SLEN (GFDB_IPC_CTR_QUERY_OPS)) == 0) {</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (in_dict, GFDB_IPC_CTR_GET_QFILE_PATH,</div><div class='del'>-                                                                &amp;query_file);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                        "Failed extracting query file path");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_bin (in_dict, GFDB_IPC_CTR_GET_QUERY_PARAMS,</div><div class='del'>-                                   (void *)&amp;ipc_ctr_params);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                        "Failed extracting query parameters");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = ctr_db_query (this, priv-&gt;_db_conn, query_file,</div><div class='del'>-                                ipc_ctr_params);</div><div class='del'>-</div><div class='del'>-                ret = dict_set_int32 (out_dict,</div><div class='del'>-                                      GFDB_IPC_CTR_RET_QUERY_COUNT, ret);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                        "Failed setting query reply");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        } /* if its a query for db version */</div><div class='del'>-        else if (strncmp (ctr_ipc_ops, GFDB_IPC_CTR_GET_DB_VERSION_OPS,</div><div class='del'>-                        SLEN (GFDB_IPC_CTR_GET_DB_VERSION_OPS)) == 0) {</div><div class='del'>-</div><div class='del'>-                ret = get_db_version (priv-&gt;_db_conn, &amp;db_version);</div><div class='del'>-                if (ret == -1 || !db_version) {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                        "Failed extracting db version ");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                SET_DB_PARAM_TO_DICT(this-&gt;name, out_dict,</div><div class='del'>-                                        GFDB_IPC_CTR_RET_DB_VERSION,</div><div class='del'>-                                        db_version, ret, error);</div><div class='del'>-</div><div class='del'>-        } /* if its a query for a db setting */</div><div class='del'>-        else if (strncmp (ctr_ipc_ops, GFDB_IPC_CTR_GET_DB_PARAM_OPS,</div><div class='del'>-                                SLEN (GFDB_IPC_CTR_GET_DB_PARAM_OPS)) == 0) {</div><div class='del'>-</div><div class='del'>-                ret = dict_get_str (in_dict, GFDB_IPC_CTR_GET_DB_KEY,</div><div class='del'>-                                &amp;db_param_key);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                        "Failed extracting db param key");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = get_db_params (priv-&gt;_db_conn, db_param_key, &amp;db_param);</div><div class='del'>-                if (ret == -1 || !db_param) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                SET_DB_PARAM_TO_DICT(this-&gt;name, out_dict,</div><div class='del'>-                                        db_param_key,</div><div class='del'>-                                        db_param, ret, error);</div><div class='del'>-        } /* if its an attempt to compact the database */</div><div class='del'>-        else if (strncmp (ctr_ipc_ops, GFDB_IPC_CTR_SET_COMPACT_PRAGMA,</div><div class='del'>-                          SLEN (GFDB_IPC_CTR_SET_COMPACT_PRAGMA)) == 0) {</div><div class='del'>-</div><div class='del'>-                ret = pthread_mutex_lock (&amp;priv-&gt;compact_lock);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                "Failed to acquire lock for compaction");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ((priv-&gt;compact_active || priv-&gt;compact_mode_switched)) {</div><div class='del'>-                        /* Compaction in progress. LEAVE */</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                               "Compaction already in progress.");</div><div class='del'>-                        pthread_mutex_unlock (&amp;priv-&gt;compact_lock);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /* At this point, we should be the only one on the brick */</div><div class='del'>-                /* compacting */</div><div class='del'>-</div><div class='del'>-                /* Grab the arguments from the dictionary */</div><div class='del'>-                ret = dict_get_int32 (in_dict, "compact_active", &amp;result);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                               "Failed to get compaction type");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (result) {</div><div class='del'>-                        priv-&gt;compact_active = _gf_true;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_int32 (in_dict, "compact_mode_switched"</div><div class='del'>-                                     , &amp;result);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                               "Failed to see if compaction switched");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (result) {</div><div class='del'>-                        priv-&gt;compact_mode_switched = _gf_true;</div><div class='del'>-                        gf_msg ("ctr-compact", GF_LOG_TRACE, 0, CTR_MSG_SET,</div><div class='del'>-                                "Pre-thread: Compact mode switch is true");</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg ("ctr-compact", GF_LOG_TRACE, 0, CTR_MSG_SET,</div><div class='del'>-                                "Pre-thread: Compact mode switch is false");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = pthread_mutex_unlock (&amp;priv-&gt;compact_lock);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                "Failed to release lock for compaction");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_thread_create (&amp;compact_thread, NULL,</div><div class='del'>-                                        ctr_compact_thread, (void *)this,</div><div class='del'>-                                        "ctrcomp");</div><div class='del'>-</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                                "Failed to spawn compaction thread");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *ctr_ipc_ops = NULL;</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='add'>+    char *db_version = NULL;</div><div class='add'>+    char *db_param_key = NULL;</div><div class='add'>+    char *db_param = NULL;</div><div class='add'>+    char *query_file = NULL;</div><div class='add'>+    gfdb_ipc_ctr_params_t *ipc_ctr_params = NULL;</div><div class='add'>+    int result = 0;</div><div class='add'>+    pthread_t compact_thread;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("ctr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv-&gt;_db_conn, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, in_dict, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, out_dict, out);</div><div class='add'>+</div><div class='add'>+    GET_DB_PARAM_FROM_DICT(this-&gt;name, in_dict, GFDB_IPC_CTR_KEY, ctr_ipc_ops,</div><div class='add'>+                           out);</div><div class='add'>+</div><div class='add'>+    /*if its a db clear operation */</div><div class='add'>+    if (strncmp(ctr_ipc_ops, GFDB_IPC_CTR_CLEAR_OPS,</div><div class='add'>+                SLEN(GFDB_IPC_CTR_CLEAR_OPS)) == 0) {</div><div class='add'>+        ret = clear_files_heat(priv-&gt;_db_conn);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+    } /* if its a query operation, in  which case its query + clear db*/</div><div class='add'>+    else if (strncmp(ctr_ipc_ops, GFDB_IPC_CTR_QUERY_OPS,</div><div class='add'>+                     SLEN(GFDB_IPC_CTR_QUERY_OPS)) == 0) {</div><div class='add'>+        ret = dict_get_str(in_dict, GFDB_IPC_CTR_GET_QFILE_PATH, &amp;query_file);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed extracting query file path");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        } /* default case */</div><div class='del'>-        else {</div><div class='del'>-                goto out;</div><div class='add'>+        ret = dict_get_bin(in_dict, GFDB_IPC_CTR_GET_QUERY_PARAMS,</div><div class='add'>+                           (void *)&amp;ipc_ctr_params);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed extracting query parameters");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        goto out;</div><div class='del'>-error:</div><div class='del'>-        GF_FREE (db_param_key);</div><div class='del'>-        GF_FREE (db_param);</div><div class='del'>-        GF_FREE (db_version);</div><div class='del'>-out:</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+        ret = ctr_db_query(this, priv-&gt;_db_conn, query_file, ipc_ctr_params);</div><div class='ctx'> </div><div class='add'>+        ret = dict_set_int32(out_dict, GFDB_IPC_CTR_RET_QUERY_COUNT, ret);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed setting query reply");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-/* IPC Call from tier migrator to clear the heat on the DB */</div><div class='del'>-int32_t</div><div class='del'>-ctr_ipc (call_frame_t *frame, xlator_t *this, int32_t op,</div><div class='del'>-        dict_t *in_dict)</div><div class='del'>-{</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        gf_ctr_private_t *priv         = NULL;</div><div class='del'>-        dict_t *out_dict                = NULL;</div><div class='add'>+    } /* if its a query for db version */</div><div class='add'>+    else if (strncmp(ctr_ipc_ops, GFDB_IPC_CTR_GET_DB_VERSION_OPS,</div><div class='add'>+                     SLEN(GFDB_IPC_CTR_GET_DB_VERSION_OPS)) == 0) {</div><div class='add'>+        ret = get_db_version(priv-&gt;_db_conn, &amp;db_version);</div><div class='add'>+        if (ret == -1 || !db_version) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed extracting db version ");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT(this);</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='del'>-        GF_ASSERT(priv-&gt;_db_conn);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, in_dict, wind);</div><div class='add'>+        SET_DB_PARAM_TO_DICT(this-&gt;name, out_dict, GFDB_IPC_CTR_RET_DB_VERSION,</div><div class='add'>+                             db_version, ret, error);</div><div class='ctx'> </div><div class='add'>+    } /* if its a query for a db setting */</div><div class='add'>+    else if (strncmp(ctr_ipc_ops, GFDB_IPC_CTR_GET_DB_PARAM_OPS,</div><div class='add'>+                     SLEN(GFDB_IPC_CTR_GET_DB_PARAM_OPS)) == 0) {</div><div class='add'>+        ret = dict_get_str(in_dict, GFDB_IPC_CTR_GET_DB_KEY, &amp;db_param_key);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed extracting db param key");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (op != GF_IPC_TARGET_CTR)</div><div class='del'>-                goto wind;</div><div class='add'>+        ret = get_db_params(priv-&gt;_db_conn, db_param_key, &amp;db_param);</div><div class='add'>+        if (ret == -1 || !db_param) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        out_dict = dict_new();</div><div class='del'>-        if (!out_dict) {</div><div class='del'>-                goto out;</div><div class='add'>+        SET_DB_PARAM_TO_DICT(this-&gt;name, out_dict, db_param_key, db_param, ret,</div><div class='add'>+                             error);</div><div class='add'>+    } /* if its an attempt to compact the database */</div><div class='add'>+    else if (strncmp(ctr_ipc_ops, GFDB_IPC_CTR_SET_COMPACT_PRAGMA,</div><div class='add'>+                     SLEN(GFDB_IPC_CTR_SET_COMPACT_PRAGMA)) == 0) {</div><div class='add'>+        ret = pthread_mutex_lock(&amp;priv-&gt;compact_lock);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed to acquire lock for compaction");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if ((priv-&gt;compact_active || priv-&gt;compact_mode_switched)) {</div><div class='add'>+            /* Compaction in progress. LEAVE */</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Compaction already in progress.");</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;compact_lock);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        /* At this point, we should be the only one on the brick */</div><div class='add'>+        /* compacting */</div><div class='ctx'> </div><div class='del'>-        ret = ctr_ipc_helper (this, in_dict, out_dict);</div><div class='add'>+        /* Grab the arguments from the dictionary */</div><div class='add'>+        ret = dict_get_int32(in_dict, "compact_active", &amp;result);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='del'>-                "Failed in ctr_ipc_helper");</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed to get compaction type");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (ipc, frame, ret, 0, out_dict);</div><div class='add'>+        if (result) {</div><div class='add'>+            priv-&gt;compact_active = _gf_true;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (out_dict)</div><div class='del'>-                dict_unref(out_dict);</div><div class='add'>+        ret = dict_get_int32(in_dict, "compact_mode_switched", &amp;result);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed to see if compaction switched");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        if (result) {</div><div class='add'>+            priv-&gt;compact_mode_switched = _gf_true;</div><div class='add'>+            gf_msg("ctr-compact", GF_LOG_TRACE, 0, CTR_MSG_SET,</div><div class='add'>+                   "Pre-thread: Compact mode switch is true");</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg("ctr-compact", GF_LOG_TRACE, 0, CTR_MSG_SET,</div><div class='add'>+                   "Pre-thread: Compact mode switch is false");</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>- wind:</div><div class='del'>-        STACK_WIND (frame, default_ipc_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ipc, op, in_dict);</div><div class='add'>+        ret = pthread_mutex_unlock(&amp;priv-&gt;compact_lock);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed to release lock for compaction");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        ret = gf_thread_create(&amp;compact_thread, NULL, ctr_compact_thread,</div><div class='add'>+                               (void *)this, "ctrcomp");</div><div class='ctx'> </div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+                   "Failed to spawn compaction thread");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        goto out;</div><div class='add'>+    } /* default case */</div><div class='add'>+    else {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    ret = 0;</div><div class='add'>+    goto out;</div><div class='add'>+error:</div><div class='add'>+    GF_FREE(db_param_key);</div><div class='add'>+    GF_FREE(db_param);</div><div class='add'>+    GF_FREE(db_version);</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-/* Call to initialize db for ctr xlator while ctr is enabled */</div><div class='add'>+/* IPC Call from tier migrator to clear the heat on the DB */</div><div class='ctx'> int32_t</div><div class='del'>-initialize_ctr_resource (xlator_t *this, gf_ctr_private_t *priv)</div><div class='add'>+ctr_ipc(call_frame_t *frame, xlator_t *this, int32_t op, dict_t *in_dict)</div><div class='ctx'> {</div><div class='del'>-        int ret_db              = -1;</div><div class='del'>-        dict_t *params_dict      = NULL;</div><div class='del'>-</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto error;</div><div class='del'>-</div><div class='del'>-        /* For compaction */</div><div class='del'>-        priv-&gt;compact_active = _gf_false;</div><div class='del'>-        priv-&gt;compact_mode_switched = _gf_false;</div><div class='del'>-        ret_db = pthread_mutex_init (&amp;priv-&gt;compact_lock, NULL);</div><div class='del'>-</div><div class='del'>-        if (ret_db) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: Failed initializing compaction mutex");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='add'>+    dict_t *out_dict = NULL;</div><div class='ctx'> </div><div class='del'>-        params_dict = dict_new ();</div><div class='del'>-        if (!params_dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_INIT_DB_PARAMS_FAILED,</div><div class='del'>-                        "DB Params cannot initialized!");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='add'>+    GF_ASSERT(priv-&gt;_db_conn);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, in_dict, wind);</div><div class='ctx'> </div><div class='del'>-        /*Extract db params options*/</div><div class='del'>-        ret_db = extract_db_params(this, params_dict, priv-&gt;gfdb_db_type);</div><div class='del'>-        if (ret_db) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_EXTRACT_DB_PARAM_OPTIONS_FAILED,</div><div class='del'>-                        "Failed extracting db params options");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    if (op != GF_IPC_TARGET_CTR)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        /*Create a memory pool for ctr xlator*/</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (gf_ctr_local_t, 64);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_CREATE_LOCAL_MEMORY_POOL_FAILED,</div><div class='del'>-                        "failed to create local memory pool");</div><div class='del'>-                ret_db = -1;</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    out_dict = dict_new();</div><div class='add'>+    if (!out_dict) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Initialize Database Connection*/</div><div class='del'>-        priv-&gt;_db_conn = init_db(params_dict, priv-&gt;gfdb_db_type);</div><div class='del'>-        if (!priv-&gt;_db_conn) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: Failed initializing data base");</div><div class='del'>-                ret_db = -1;</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    ret = ctr_ipc_helper(this, in_dict, out_dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_SET,</div><div class='add'>+               "Failed in ctr_ipc_helper");</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='ctx'> </div><div class='del'>-        ret_db = 0;</div><div class='del'>-        goto out;</div><div class='add'>+    STACK_UNWIND_STRICT(ipc, frame, ret, 0, out_dict);</div><div class='add'>+</div><div class='add'>+    if (out_dict)</div><div class='add'>+        dict_unref(out_dict);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_ipc_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ipc, op, in_dict);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* Call to initialize db for ctr xlator while ctr is enabled */</div><div class='add'>+int32_t</div><div class='add'>+initialize_ctr_resource(xlator_t *this, gf_ctr_private_t *priv)</div><div class='add'>+{</div><div class='add'>+    int ret_db = -1;</div><div class='add'>+    dict_t *params_dict = NULL;</div><div class='add'>+</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto error;</div><div class='add'>+</div><div class='add'>+    /* For compaction */</div><div class='add'>+    priv-&gt;compact_active = _gf_false;</div><div class='add'>+    priv-&gt;compact_mode_switched = _gf_false;</div><div class='add'>+    ret_db = pthread_mutex_init(&amp;priv-&gt;compact_lock, NULL);</div><div class='add'>+</div><div class='add'>+    if (ret_db) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: Failed initializing compaction mutex");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    params_dict = dict_new();</div><div class='add'>+    if (!params_dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_INIT_DB_PARAMS_FAILED,</div><div class='add'>+               "DB Params cannot initialized!");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Extract db params options*/</div><div class='add'>+    ret_db = extract_db_params(this, params_dict, priv-&gt;gfdb_db_type);</div><div class='add'>+    if (ret_db) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_EXTRACT_DB_PARAM_OPTIONS_FAILED,</div><div class='add'>+               "Failed extracting db params options");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Create a memory pool for ctr xlator*/</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(gf_ctr_local_t, 64);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_CREATE_LOCAL_MEMORY_POOL_FAILED,</div><div class='add'>+               "failed to create local memory pool");</div><div class='add'>+        ret_db = -1;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Initialize Database Connection*/</div><div class='add'>+    priv-&gt;_db_conn = init_db(params_dict, priv-&gt;gfdb_db_type);</div><div class='add'>+    if (!priv-&gt;_db_conn) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: Failed initializing data base");</div><div class='add'>+        ret_db = -1;</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret_db = 0;</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='ctx'> error:</div><div class='del'>-        if (this)</div><div class='del'>-                mem_pool_destroy (this-&gt;local_pool);</div><div class='add'>+    if (this)</div><div class='add'>+        mem_pool_destroy(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        if (priv) {</div><div class='del'>-                GF_FREE (priv-&gt;ctr_db_path);</div><div class='del'>-        }</div><div class='del'>-        GF_FREE (priv);</div><div class='add'>+    if (priv) {</div><div class='add'>+        GF_FREE(priv-&gt;ctr_db_path);</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (params_dict)</div><div class='del'>-                dict_unref (params_dict);</div><div class='add'>+    if (params_dict)</div><div class='add'>+        dict_unref(params_dict);</div><div class='ctx'> </div><div class='del'>-        return ret_db;</div><div class='add'>+    return ret_db;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /******************************************************************************/</div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        char *temp_str = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-        gf_ctr_private_t *priv = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str(options, "changetimerecorder.frequency",</div><div class='del'>-                         &amp;temp_str)) {</div><div class='del'>-                gf_msg(this-&gt;name, GF_LOG_TRACE, 0, CTR_MSG_SET, "set");</div><div class='del'>-        }</div><div class='add'>+    if (dict_get_str(options, "changetimerecorder.frequency", &amp;temp_str)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_TRACE, 0, CTR_MSG_SET, "set");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("ctr-enabled", priv-&gt;enabled, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-        if (!priv-&gt;enabled) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_INFO, 0,</div><div class='del'>-                        CTR_MSG_XLATOR_DISABLED,</div><div class='del'>-                        "CTR Xlator is not enabled so skip ctr reconfigure");</div><div class='del'>-                goto out;</div><div class='add'>+    GF_OPTION_RECONF("ctr-enabled", priv-&gt;enabled, options, bool, out);</div><div class='add'>+    if (!priv-&gt;enabled) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_INFO, 0, CTR_MSG_XLATOR_DISABLED,</div><div class='add'>+               "CTR Xlator is not enabled so skip ctr reconfigure");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If ctr is enabled after skip init for ctr xlator then call</div><div class='add'>+       initialize_ctr_resource during reconfigure phase to allocate resources</div><div class='add'>+       for xlator</div><div class='add'>+    */</div><div class='add'>+    if (priv-&gt;enabled &amp;&amp; !priv-&gt;_db_conn) {</div><div class='add'>+        ret = initialize_ctr_resource(this, priv);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+                   "FATAL: Failed ctr initialize resource");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* If ctr is enabled after skip init for ctr xlator then call</div><div class='del'>-           initialize_ctr_resource during reconfigure phase to allocate resources for</div><div class='del'>-           xlator</div><div class='del'>-        */</div><div class='del'>-        if (priv-&gt;enabled &amp;&amp; !priv-&gt;_db_conn) {</div><div class='del'>-                ret = initialize_ctr_resource (this, priv);</div><div class='del'>-                if (ret)  {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_FATAL_ERROR,</div><div class='del'>-                                "FATAL: Failed ctr initialize resource");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_RECONF("record-counters", priv-&gt;ctr_record_counter, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("record-counters", priv-&gt;ctr_record_counter, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("ctr-record-metadata-heat",</div><div class='del'>-                          priv-&gt;ctr_record_metadata_heat, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("ctr_link_consistency", priv-&gt;ctr_link_consistency,</div><div class='del'>-                        options, bool, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("ctr_lookupheal_inode_timeout",</div><div class='del'>-                                priv-&gt;ctr_lookupheal_inode_timeout,</div><div class='del'>-                                options, uint64, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("ctr_lookupheal_link_timeout",</div><div class='del'>-                                priv-&gt;ctr_lookupheal_link_timeout,</div><div class='del'>-                                options, uint64, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("record-exit", priv-&gt;ctr_record_unwind, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-</div><div class='del'>-        GF_OPTION_RECONF ("record-entry", priv-&gt;ctr_record_wind, options,</div><div class='del'>-                          bool, out);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        /* If database is sqlite */</div><div class='del'>-        if (priv-&gt;gfdb_db_type == GFDB_SQLITE3) {</div><div class='del'>-</div><div class='del'>-                /* AUTOCHECKPOINT */</div><div class='del'>-                if (dict_get_str (options, GFDB_SQL_PARAM_WAL_AUTOCHECK,</div><div class='del'>-                                &amp;temp_str) == 0) {</div><div class='del'>-                        ret = set_db_params (priv-&gt;_db_conn,</div><div class='del'>-                                        "wal_autocheckpoint", temp_str);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CTR_MSG_SET_VALUE_TO_SQL_PARAM_FAILED,</div><div class='del'>-                                        "Failed  to set %s",</div><div class='del'>-                                        GFDB_SQL_PARAM_WAL_AUTOCHECK);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* CACHE_SIZE */</div><div class='del'>-                if (dict_get_str (options, GFDB_SQL_PARAM_CACHE_SIZE, &amp;temp_str)</div><div class='del'>-                                == 0) {</div><div class='del'>-                        ret = set_db_params (priv-&gt;_db_conn, "cache_size",</div><div class='del'>-                                        temp_str);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        CTR_MSG_SET_VALUE_TO_SQL_PARAM_FAILED,</div><div class='del'>-                                        "Failed  to set %s",</div><div class='del'>-                                        GFDB_SQL_PARAM_CACHE_SIZE);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_RECONF("ctr-record-metadata-heat", priv-&gt;ctr_record_metadata_heat,</div><div class='add'>+                     options, bool, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    GF_OPTION_RECONF("ctr_link_consistency", priv-&gt;ctr_link_consistency,</div><div class='add'>+                     options, bool, out);</div><div class='ctx'> </div><div class='del'>-out:</div><div class='add'>+    GF_OPTION_RECONF("ctr_lookupheal_inode_timeout",</div><div class='add'>+                     priv-&gt;ctr_lookupheal_inode_timeout, options, uint64, out);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='add'>+    GF_OPTION_RECONF("ctr_lookupheal_link_timeout",</div><div class='add'>+                     priv-&gt;ctr_lookupheal_link_timeout, options, uint64, out);</div><div class='ctx'> </div><div class='del'>-/****************************init********************************************/</div><div class='add'>+    GF_OPTION_RECONF("record-exit", priv-&gt;ctr_record_unwind, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        gf_ctr_private_t *priv = NULL;</div><div class='del'>-        int ret_db              = -1;</div><div class='del'>-</div><div class='del'>-        if (!this) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: ctr this is not initialized");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    GF_OPTION_RECONF("record-entry", priv-&gt;ctr_record_wind, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: ctr should have exactly one child");</div><div class='del'>-                return -1;</div><div class='add'>+    /* If database is sqlite */</div><div class='add'>+    if (priv-&gt;gfdb_db_type == GFDB_SQLITE3) {</div><div class='add'>+        /* AUTOCHECKPOINT */</div><div class='add'>+        if (dict_get_str(options, GFDB_SQL_PARAM_WAL_AUTOCHECK, &amp;temp_str) ==</div><div class='add'>+            0) {</div><div class='add'>+            ret = set_db_params(priv-&gt;_db_conn, "wal_autocheckpoint", temp_str);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CTR_MSG_SET_VALUE_TO_SQL_PARAM_FAILED,</div><div class='add'>+                       "Failed  to set %s", GFDB_SQL_PARAM_WAL_AUTOCHECK);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                        CTR_MSG_DANGLING_VOLUME,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='add'>+        /* CACHE_SIZE */</div><div class='add'>+        if (dict_get_str(options, GFDB_SQL_PARAM_CACHE_SIZE, &amp;temp_str) == 0) {</div><div class='add'>+            ret = set_db_params(priv-&gt;_db_conn, "cache_size", temp_str);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                       CTR_MSG_SET_VALUE_TO_SQL_PARAM_FAILED,</div><div class='add'>+                       "Failed  to set %s", GFDB_SQL_PARAM_CACHE_SIZE);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_ctr_mt_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        CTR_MSG_CALLOC_FAILED,</div><div class='del'>-                        "Calloc did not work!!!");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        /*Default values for the translator*/</div><div class='del'>-        priv-&gt;ctr_record_wind          = _gf_true;</div><div class='del'>-        priv-&gt;ctr_record_unwind        = _gf_false;</div><div class='del'>-        priv-&gt;ctr_hot_brick            = _gf_false;</div><div class='del'>-        priv-&gt;gfdb_db_type             = GFDB_SQLITE3;</div><div class='del'>-        priv-&gt;gfdb_sync_type           = GFDB_DB_SYNC;</div><div class='del'>-        priv-&gt;_db_conn                 = NULL;</div><div class='del'>-        priv-&gt;ctr_lookupheal_link_timeout =</div><div class='del'>-                                CTR_DEFAULT_HARDLINK_EXP_PERIOD;</div><div class='del'>-        priv-&gt;ctr_lookupheal_inode_timeout =</div><div class='del'>-                                CTR_DEFAULT_INODE_EXP_PERIOD;</div><div class='del'>-</div><div class='del'>-        /*Extract ctr xlator options*/</div><div class='del'>-        ret_db = extract_ctr_options (this, priv);</div><div class='del'>-        if (ret_db) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_EXTRACT_CTR_XLATOR_OPTIONS_FAILED,</div><div class='del'>-                        "Failed extracting ctr xlator options");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+out:</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;enabled) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_INFO, 0,</div><div class='del'>-                        CTR_MSG_XLATOR_DISABLED,</div><div class='del'>-                        "CTR Xlator is not enabled so skip ctr init");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        ret_db = initialize_ctr_resource (this, priv);</div><div class='del'>-        if (ret_db)  {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_FATAL_ERROR,</div><div class='del'>-                        "FATAL: Failed ctr initialize resource");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+/****************************init********************************************/</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='add'>+    int ret_db = -1;</div><div class='add'>+</div><div class='add'>+    if (!this) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: ctr this is not initialized");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: ctr should have exactly one child");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, CTR_MSG_DANGLING_VOLUME,</div><div class='add'>+               "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_ctr_mt_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CTR_MSG_CALLOC_FAILED,</div><div class='add'>+               "Calloc did not work!!!");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Default values for the translator*/</div><div class='add'>+    priv-&gt;ctr_record_wind = _gf_true;</div><div class='add'>+    priv-&gt;ctr_record_unwind = _gf_false;</div><div class='add'>+    priv-&gt;ctr_hot_brick = _gf_false;</div><div class='add'>+    priv-&gt;gfdb_db_type = GFDB_SQLITE3;</div><div class='add'>+    priv-&gt;gfdb_sync_type = GFDB_DB_SYNC;</div><div class='add'>+    priv-&gt;_db_conn = NULL;</div><div class='add'>+    priv-&gt;ctr_lookupheal_link_timeout = CTR_DEFAULT_HARDLINK_EXP_PERIOD;</div><div class='add'>+    priv-&gt;ctr_lookupheal_inode_timeout = CTR_DEFAULT_INODE_EXP_PERIOD;</div><div class='add'>+</div><div class='add'>+    /*Extract ctr xlator options*/</div><div class='add'>+    ret_db = extract_ctr_options(this, priv);</div><div class='add'>+    if (ret_db) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_EXTRACT_CTR_XLATOR_OPTIONS_FAILED,</div><div class='add'>+               "Failed extracting ctr xlator options");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;enabled) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_INFO, 0, CTR_MSG_XLATOR_DISABLED,</div><div class='add'>+               "CTR Xlator is not enabled so skip ctr init");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret_db = initialize_ctr_resource(this, priv);</div><div class='add'>+    if (ret_db) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_FATAL_ERROR,</div><div class='add'>+               "FATAL: Failed ctr initialize resource");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        this-&gt;private = (void *)priv;</div><div class='del'>-        return 0;</div><div class='add'>+    this-&gt;private = (void *)priv;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-       gf_ctr_private_t *priv = NULL;</div><div class='del'>-       int               ret  = 0;</div><div class='del'>-</div><div class='del'>-       priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-       if (!priv)</div><div class='del'>-               goto out;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-       ret = default_notify (this, event, data);</div><div class='add'>+    ret = default_notify(this, event, data);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-      return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("ctr", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("ctr", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_ctr_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_ctr_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_MEM_ACC_INIT_FAILED, "Memory accounting init"</div><div class='del'>-                        "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_MEM_ACC_INIT_FAILED,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        gf_ctr_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv &amp;&amp; priv-&gt;enabled) {</div><div class='del'>-                if (fini_db (priv-&gt;_db_conn)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                CTR_MSG_CLOSE_DB_CONN_FAILED, "Failed closing "</div><div class='del'>-                                "db connection");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;_db_conn)</div><div class='del'>-                        priv-&gt;_db_conn = NULL;</div><div class='del'>-</div><div class='del'>-                GF_FREE (priv-&gt;ctr_db_path);</div><div class='del'>-                if (pthread_mutex_destroy (&amp;priv-&gt;compact_lock)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                CTR_MSG_CLOSE_DB_CONN_FAILED, "Failed to "</div><div class='del'>-                                "destroy the compaction mutex");</div><div class='del'>-                }</div><div class='add'>+    gf_ctr_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv &amp;&amp; priv-&gt;enabled) {</div><div class='add'>+        if (fini_db(priv-&gt;_db_conn)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, CTR_MSG_CLOSE_DB_CONN_FAILED,</div><div class='add'>+                   "Failed closing "</div><div class='add'>+                   "db connection");</div><div class='ctx'>         }</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>-        mem_pool_destroy (this-&gt;local_pool);</div><div class='del'>-        this-&gt;local_pool = NULL;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+        if (priv-&gt;_db_conn)</div><div class='add'>+            priv-&gt;_db_conn = NULL;</div><div class='add'>+</div><div class='add'>+        GF_FREE(priv-&gt;ctr_db_path);</div><div class='add'>+        if (pthread_mutex_destroy(&amp;priv-&gt;compact_lock)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, CTR_MSG_CLOSE_DB_CONN_FAILED,</div><div class='add'>+                   "Failed to "</div><div class='add'>+                   "destroy the compaction mutex");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+    mem_pool_destroy(this-&gt;local_pool);</div><div class='add'>+    this-&gt;local_pool = NULL;</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        /*lookup*/</div><div class='del'>-        .lookup         = ctr_lookup,</div><div class='del'>-        /*write fops */</div><div class='del'>-        .mknod          = ctr_mknod,</div><div class='del'>-        .create         = ctr_create,</div><div class='del'>-        .truncate       = ctr_truncate,</div><div class='del'>-        .ftruncate      = ctr_ftruncate,</div><div class='del'>-        .setxattr       = ctr_setxattr,</div><div class='del'>-        .fsetxattr      = ctr_fsetxattr,</div><div class='del'>-        .removexattr    = ctr_removexattr,</div><div class='del'>-        .fremovexattr   = ctr_fremovexattr,</div><div class='del'>-        .unlink         = ctr_unlink,</div><div class='del'>-        .link           = ctr_link,</div><div class='del'>-        .rename         = ctr_rename,</div><div class='del'>-        .writev         = ctr_writev,</div><div class='del'>-        .setattr        = ctr_setattr,</div><div class='del'>-        .fsetattr       = ctr_fsetattr,</div><div class='del'>-        /*read fops*/</div><div class='del'>-        .readv          = ctr_readv,</div><div class='del'>-        /* IPC call*/</div><div class='del'>-        .ipc            = ctr_ipc</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .forget = ctr_forget</div><div class='del'>-};</div><div class='add'>+    /*lookup*/</div><div class='add'>+    .lookup = ctr_lookup,</div><div class='add'>+    /*write fops */</div><div class='add'>+    .mknod = ctr_mknod,</div><div class='add'>+    .create = ctr_create,</div><div class='add'>+    .truncate = ctr_truncate,</div><div class='add'>+    .ftruncate = ctr_ftruncate,</div><div class='add'>+    .setxattr = ctr_setxattr,</div><div class='add'>+    .fsetxattr = ctr_fsetxattr,</div><div class='add'>+    .removexattr = ctr_removexattr,</div><div class='add'>+    .fremovexattr = ctr_fremovexattr,</div><div class='add'>+    .unlink = ctr_unlink,</div><div class='add'>+    .link = ctr_link,</div><div class='add'>+    .rename = ctr_rename,</div><div class='add'>+    .writev = ctr_writev,</div><div class='add'>+    .setattr = ctr_setattr,</div><div class='add'>+    .fsetattr = ctr_fsetattr,</div><div class='add'>+    /*read fops*/</div><div class='add'>+    .readv = ctr_readv,</div><div class='add'>+    /* IPC call*/</div><div class='add'>+    .ipc = ctr_ipc};</div><div class='add'>+</div><div class='add'>+struct xlator_cbks cbks = {.forget = ctr_forget};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"ctr-enabled",},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .description = "Enables the CTR",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"record-entry"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "on"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"record-exit"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "off"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"record-counters"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"ctr-record-metadata-heat"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"ctr_link_consistency"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"ctr_lookupheal_link_timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "300",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_2},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"ctr_lookupheal_inode_timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "300",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_2},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"hot-brick"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .value = {"on", "off"},</div><div class='del'>-          .default_value = "off"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"db-type"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"hashfile", "rocksdb", "changelog", "sqlite3",</div><div class='del'>-                    "hyperdex"},</div><div class='del'>-          .default_value = "sqlite3",</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"db-sync"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"sync", "async"},</div><div class='del'>-          .default_value = "sync"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"db-path"},</div><div class='del'>-          .type = GF_OPTION_TYPE_PATH</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"db-name"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR</div><div class='del'>-        },</div><div class='del'>-        { .key  = {GFDB_SQL_PARAM_SYNC},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"off", "normal", "full"},</div><div class='del'>-          .default_value = "normal"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {GFDB_SQL_PARAM_JOURNAL_MODE},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"delete", "truncate", "persist", "memory", "wal", "off"},</div><div class='del'>-          .default_value = "wal",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {GFDB_SQL_PARAM_AUTO_VACUUM},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .value = {"off", "full", "incr"},</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {GFDB_SQL_PARAM_WAL_AUTOCHECK},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "25000",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {GFDB_SQL_PARAM_CACHE_SIZE},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "12500",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {GFDB_SQL_PARAM_PAGE_SIZE},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = "4096",</div><div class='del'>-          .flags       = OPT_FLAG_SETTABLE,</div><div class='del'>-          .op_version  = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .tags = {}</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key =</div><div class='add'>+         {</div><div class='add'>+             "ctr-enabled",</div><div class='add'>+         },</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .description = "Enables the CTR",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE},</div><div class='add'>+    {.key = {"record-entry"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "on"},</div><div class='add'>+    {.key = {"record-exit"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "off"},</div><div class='add'>+    {.key = {"record-counters"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {"ctr-record-metadata-heat"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {"ctr_link_consistency"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {"ctr_lookupheal_link_timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "300",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_2},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {"ctr_lookupheal_inode_timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "300",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_2},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {"hot-brick"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .value = {"on", "off"},</div><div class='add'>+     .default_value = "off"},</div><div class='add'>+    {.key = {"db-type"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"hashfile", "rocksdb", "changelog", "sqlite3", "hyperdex"},</div><div class='add'>+     .default_value = "sqlite3",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {"db-sync"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"sync", "async"},</div><div class='add'>+     .default_value = "sync"},</div><div class='add'>+    {.key = {"db-path"}, .type = GF_OPTION_TYPE_PATH},</div><div class='add'>+    {.key = {"db-name"}, .type = GF_OPTION_TYPE_STR},</div><div class='add'>+    {.key = {GFDB_SQL_PARAM_SYNC},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"off", "normal", "full"},</div><div class='add'>+     .default_value = "normal"},</div><div class='add'>+    {.key = {GFDB_SQL_PARAM_JOURNAL_MODE},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"delete", "truncate", "persist", "memory", "wal", "off"},</div><div class='add'>+     .default_value = "wal",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {GFDB_SQL_PARAM_AUTO_VACUUM},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .value = {"off", "full", "incr"},</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {GFDB_SQL_PARAM_WAL_AUTOCHECK},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "25000",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {GFDB_SQL_PARAM_CACHE_SIZE},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "12500",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {GFDB_SQL_PARAM_PAGE_SIZE},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = "4096",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .tags = {}},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/changetimerecorder/src/ctr-helper.c b/xlators/features/changetimerecorder/src/ctr-helper.c<br/>index 5a409c2b65e..e1e65735cef 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changetimerecorder/src/ctr-helper.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changetimerecorder/src/ctr-helper.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changetimerecorder/src/ctr-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changetimerecorder/src/ctr-helper.c</a></div><div class='hunk'>@@ -18,146 +18,137 @@</div><div class='ctx'>  *</div><div class='ctx'>  ******************************************************************************/</div><div class='ctx'> int</div><div class='del'>-fill_db_record_for_unwind(xlator_t              *this,</div><div class='del'>-                          gf_ctr_local_t        *ctr_local,</div><div class='del'>-                          gfdb_fop_type_t       fop_type,</div><div class='del'>-                          gfdb_fop_path_t       fop_path)</div><div class='add'>+fill_db_record_for_unwind(xlator_t *this, gf_ctr_local_t *ctr_local,</div><div class='add'>+                          gfdb_fop_type_t fop_type, gfdb_fop_path_t fop_path)</div><div class='ctx'> {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        gfdb_time_t *ctr_uwtime         = NULL;</div><div class='del'>-        gf_ctr_private_t *_priv                 = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        _priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (_priv);</div><div class='del'>-</div><div class='del'>-        GF_ASSERT(ctr_local);</div><div class='del'>-</div><div class='del'>-        /*If not unwind path error*/</div><div class='del'>-        if (!isunwindpath(fop_path)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_WRONG_FOP_PATH,</div><div class='del'>-                        "Wrong fop_path. Should be unwind");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctr_uwtime = &amp;CTR_DB_REC(ctr_local).gfdb_unwind_change_time;</div><div class='del'>-        CTR_DB_REC(ctr_local).gfdb_fop_path = fop_path;</div><div class='del'>-        CTR_DB_REC(ctr_local).gfdb_fop_type = fop_type;</div><div class='del'>-</div><div class='del'>-        ret = gettimeofday (ctr_uwtime, NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CTR_MSG_FILL_UNWIND_TIME_REC_ERROR, "Error "</div><div class='del'>-                                "filling unwind time record %s",</div><div class='del'>-                                strerror(errno));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        /* Special case i.e if its a tier rebalance</div><div class='del'>-         * + cold tier brick</div><div class='del'>-         * + its a create/mknod FOP</div><div class='del'>-         * we record unwind time as zero */</div><div class='del'>-        if (ctr_local-&gt;client_pid == GF_CLIENT_PID_TIER_DEFRAG</div><div class='del'>-                &amp;&amp; (!_priv-&gt;ctr_hot_brick)</div><div class='del'>-                &amp;&amp; isdentrycreatefop(fop_type)) {</div><div class='del'>-                memset(ctr_uwtime, 0, sizeof(*ctr_uwtime));</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_time_t *ctr_uwtime = NULL;</div><div class='add'>+    gf_ctr_private_t *_priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    _priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(_priv);</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(ctr_local);</div><div class='add'>+</div><div class='add'>+    /*If not unwind path error*/</div><div class='add'>+    if (!isunwindpath(fop_path)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_WRONG_FOP_PATH,</div><div class='add'>+               "Wrong fop_path. Should be unwind");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctr_uwtime = &amp;CTR_DB_REC(ctr_local).gfdb_unwind_change_time;</div><div class='add'>+    CTR_DB_REC(ctr_local).gfdb_fop_path = fop_path;</div><div class='add'>+    CTR_DB_REC(ctr_local).gfdb_fop_type = fop_type;</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(ctr_uwtime, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               CTR_MSG_FILL_UNWIND_TIME_REC_ERROR,</div><div class='add'>+               "Error "</div><div class='add'>+               "filling unwind time record %s",</div><div class='add'>+               strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Special case i.e if its a tier rebalance</div><div class='add'>+     * + cold tier brick</div><div class='add'>+     * + its a create/mknod FOP</div><div class='add'>+     * we record unwind time as zero */</div><div class='add'>+    if (ctr_local-&gt;client_pid == GF_CLIENT_PID_TIER_DEFRAG &amp;&amp;</div><div class='add'>+        (!_priv-&gt;ctr_hot_brick) &amp;&amp; isdentrycreatefop(fop_type)) {</div><div class='add'>+        memset(ctr_uwtime, 0, sizeof(*ctr_uwtime));</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*******************************************************************************</div><div class='ctx'>  *</div><div class='ctx'>  *                      Fill wind into db record</div><div class='ctx'>  *</div><div class='ctx'>  ******************************************************************************/</div><div class='ctx'> int</div><div class='del'>-fill_db_record_for_wind (xlator_t               *this,</div><div class='del'>-                        gf_ctr_local_t          *ctr_local,</div><div class='del'>-                        gf_ctr_inode_context_t  *ctr_inode_cx)</div><div class='add'>+fill_db_record_for_wind(xlator_t *this, gf_ctr_local_t *ctr_local,</div><div class='add'>+                        gf_ctr_inode_context_t *ctr_inode_cx)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        gfdb_time_t *ctr_wtime                  = NULL;</div><div class='del'>-        gf_ctr_private_t *_priv                 = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        _priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (_priv);</div><div class='del'>-        GF_ASSERT (ctr_local);</div><div class='del'>-        IS_CTR_INODE_CX_SANE (ctr_inode_cx);</div><div class='del'>-</div><div class='del'>-        /*if not wind path error!*/</div><div class='del'>-        if (!iswindpath(ctr_inode_cx-&gt;fop_path)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_WRONG_FOP_PATH,</div><div class='del'>-                        "Wrong fop_path. Should be wind");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ctr_wtime = &amp;CTR_DB_REC(ctr_local).gfdb_wind_change_time;</div><div class='del'>-        CTR_DB_REC(ctr_local).gfdb_fop_path = ctr_inode_cx-&gt;fop_path;</div><div class='del'>-        CTR_DB_REC(ctr_local).gfdb_fop_type = ctr_inode_cx-&gt;fop_type;</div><div class='del'>-        CTR_DB_REC(ctr_local).link_consistency = _priv-&gt;ctr_link_consistency;</div><div class='del'>-</div><div class='del'>-        ret = gettimeofday (ctr_wtime, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                CTR_MSG_FILL_UNWIND_TIME_REC_ERROR,</div><div class='del'>-                                "Error filling wind time record %s",</div><div class='del'>-                                strerror(errno));</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Special case i.e if its a tier rebalance</div><div class='del'>-         * + cold tier brick</div><div class='del'>-         * + its a create/mknod FOP</div><div class='del'>-         * we record wind time as zero */</div><div class='del'>-        if (ctr_local-&gt;client_pid == GF_CLIENT_PID_TIER_DEFRAG</div><div class='del'>-                &amp;&amp; (!_priv-&gt;ctr_hot_brick)</div><div class='del'>-                &amp;&amp; isdentrycreatefop(ctr_inode_cx-&gt;fop_type)) {</div><div class='del'>-                memset(ctr_wtime, 0, sizeof(*ctr_wtime));</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gfdb_time_t *ctr_wtime = NULL;</div><div class='add'>+    gf_ctr_private_t *_priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    _priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(_priv);</div><div class='add'>+    GF_ASSERT(ctr_local);</div><div class='add'>+    IS_CTR_INODE_CX_SANE(ctr_inode_cx);</div><div class='add'>+</div><div class='add'>+    /*if not wind path error!*/</div><div class='add'>+    if (!iswindpath(ctr_inode_cx-&gt;fop_path)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_WRONG_FOP_PATH,</div><div class='add'>+               "Wrong fop_path. Should be wind");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ctr_wtime = &amp;CTR_DB_REC(ctr_local).gfdb_wind_change_time;</div><div class='add'>+    CTR_DB_REC(ctr_local).gfdb_fop_path = ctr_inode_cx-&gt;fop_path;</div><div class='add'>+    CTR_DB_REC(ctr_local).gfdb_fop_type = ctr_inode_cx-&gt;fop_type;</div><div class='add'>+    CTR_DB_REC(ctr_local).link_consistency = _priv-&gt;ctr_link_consistency;</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(ctr_wtime, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               CTR_MSG_FILL_UNWIND_TIME_REC_ERROR,</div><div class='add'>+               "Error filling wind time record %s", strerror(errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Special case i.e if its a tier rebalance</div><div class='add'>+     * + cold tier brick</div><div class='add'>+     * + its a create/mknod FOP</div><div class='add'>+     * we record wind time as zero */</div><div class='add'>+    if (ctr_local-&gt;client_pid == GF_CLIENT_PID_TIER_DEFRAG &amp;&amp;</div><div class='add'>+        (!_priv-&gt;ctr_hot_brick) &amp;&amp; isdentrycreatefop(ctr_inode_cx-&gt;fop_type)) {</div><div class='add'>+        memset(ctr_wtime, 0, sizeof(*ctr_wtime));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Copy gfid into db record */</div><div class='add'>+    gf_uuid_copy(CTR_DB_REC(ctr_local).gfid, *(ctr_inode_cx-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    /* Copy older gfid if any */</div><div class='add'>+    if (ctr_inode_cx-&gt;old_gfid &amp;&amp;</div><div class='add'>+        (!gf_uuid_is_null(*(ctr_inode_cx-&gt;old_gfid)))) {</div><div class='add'>+        gf_uuid_copy(CTR_DB_REC(ctr_local).old_gfid, *(ctr_inode_cx-&gt;old_gfid));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Hard Links*/</div><div class='add'>+    if (isdentryfop(ctr_inode_cx-&gt;fop_type)) {</div><div class='add'>+        /*new link fop*/</div><div class='add'>+        if (NEW_LINK_CX(ctr_inode_cx)) {</div><div class='add'>+            gf_uuid_copy(CTR_DB_REC(ctr_local).pargfid,</div><div class='add'>+                         *((NEW_LINK_CX(ctr_inode_cx))-&gt;pargfid));</div><div class='add'>+            strcpy(CTR_DB_REC(ctr_local).file_name,</div><div class='add'>+                   NEW_LINK_CX(ctr_inode_cx)-&gt;basename);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* Copy gfid into db record */</div><div class='del'>-        gf_uuid_copy (CTR_DB_REC(ctr_local).gfid, *(ctr_inode_cx-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        /* Copy older gfid if any */</div><div class='del'>-        if (ctr_inode_cx-&gt;old_gfid &amp;&amp;</div><div class='del'>-                (!gf_uuid_is_null (*(ctr_inode_cx-&gt;old_gfid)))) {</div><div class='del'>-                gf_uuid_copy (CTR_DB_REC(ctr_local).old_gfid,</div><div class='del'>-                                *(ctr_inode_cx-&gt;old_gfid));</div><div class='add'>+        /*rename fop*/</div><div class='add'>+        if (OLD_LINK_CX(ctr_inode_cx)) {</div><div class='add'>+            gf_uuid_copy(CTR_DB_REC(ctr_local).old_pargfid,</div><div class='add'>+                         *((OLD_LINK_CX(ctr_inode_cx))-&gt;pargfid));</div><div class='add'>+            strcpy(CTR_DB_REC(ctr_local).old_file_name,</div><div class='add'>+                   OLD_LINK_CX(ctr_inode_cx)-&gt;basename);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Hard Links*/</div><div class='del'>-        if (isdentryfop(ctr_inode_cx-&gt;fop_type)) {</div><div class='del'>-                /*new link fop*/</div><div class='del'>-                if (NEW_LINK_CX(ctr_inode_cx)) {</div><div class='del'>-                        gf_uuid_copy (CTR_DB_REC(ctr_local).pargfid,</div><div class='del'>-                                *((NEW_LINK_CX(ctr_inode_cx))-&gt;pargfid));</div><div class='del'>-                        strcpy (CTR_DB_REC(ctr_local).file_name,</div><div class='del'>-                                NEW_LINK_CX(ctr_inode_cx)-&gt;basename);</div><div class='del'>-                }</div><div class='del'>-                /*rename fop*/</div><div class='del'>-                if (OLD_LINK_CX(ctr_inode_cx)) {</div><div class='del'>-                        gf_uuid_copy (CTR_DB_REC(ctr_local).old_pargfid,</div><div class='del'>-                                *((OLD_LINK_CX(ctr_inode_cx))-&gt;pargfid));</div><div class='del'>-                        strcpy (CTR_DB_REC(ctr_local).old_file_name,</div><div class='del'>-                                OLD_LINK_CX(ctr_inode_cx)-&gt;basename);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        /*On error roll back and clean the record*/</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                CLEAR_CTR_DB_RECORD (ctr_local);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    /*On error roll back and clean the record*/</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        CLEAR_CTR_DB_RECORD(ctr_local);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /******************************************************************************</div><div class='ctx'>  *</div><div class='ctx'>  *                      CTR xlator init related functions</div><div class='hunk'>@@ -167,141 +158,136 @@ out:</div><div class='ctx'> static int</div><div class='ctx'> extract_sql_params(xlator_t *this, dict_t *params_dict)</div><div class='ctx'> {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        char *db_path                   = NULL;</div><div class='del'>-        char *db_name                   = NULL;</div><div class='del'>-        char *db_full_path              = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (params_dict);</div><div class='del'>-</div><div class='del'>-        /*Extract the path of the db*/</div><div class='del'>-        db_path = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT_DEFAULT(this-&gt;name, this-&gt;options, "db-path",</div><div class='del'>-                                        db_path, "/var/run/gluster/");</div><div class='del'>-</div><div class='del'>-        /*Extract the name of the db*/</div><div class='del'>-        db_name = NULL;</div><div class='del'>-        GET_DB_PARAM_FROM_DICT_DEFAULT(this-&gt;name, this-&gt;options, "db-name",</div><div class='del'>-                                        db_name, "gf_ctr_db.db");</div><div class='del'>-</div><div class='del'>-        /*Construct full path of the db*/</div><div class='del'>-        ret = gf_asprintf(&amp;db_full_path, "%s/%s", db_path, db_name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_CONSTRUCT_DB_PATH_FAILED,</div><div class='del'>-                        "Construction of full db path failed!");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Setting the SQL DB Path*/</div><div class='del'>-        SET_DB_PARAM_TO_DICT(this-&gt;name, params_dict, GFDB_SQL_PARAM_DBPATH,</div><div class='del'>-                                db_full_path, ret, out);</div><div class='del'>-</div><div class='del'>-        /*Extract rest of the sql params*/</div><div class='del'>-        ret = gfdb_set_sql_params(this-&gt;name, this-&gt;options, params_dict);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_SET_VALUE_TO_SQL_PARAM_FAILED,</div><div class='del'>-                        "Failed setting values to sql param dict!");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *db_path = NULL;</div><div class='add'>+    char *db_name = NULL;</div><div class='add'>+    char *db_full_path = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(params_dict);</div><div class='add'>+</div><div class='add'>+    /*Extract the path of the db*/</div><div class='add'>+    db_path = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(this-&gt;name, this-&gt;options, "db-path",</div><div class='add'>+                                   db_path, "/var/run/gluster/");</div><div class='add'>+</div><div class='add'>+    /*Extract the name of the db*/</div><div class='add'>+    db_name = NULL;</div><div class='add'>+    GET_DB_PARAM_FROM_DICT_DEFAULT(this-&gt;name, this-&gt;options, "db-name",</div><div class='add'>+                                   db_name, "gf_ctr_db.db");</div><div class='add'>+</div><div class='add'>+    /*Construct full path of the db*/</div><div class='add'>+    ret = gf_asprintf(&amp;db_full_path, "%s/%s", db_path, db_name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_CONSTRUCT_DB_PATH_FAILED,</div><div class='add'>+               "Construction of full db path failed!");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Setting the SQL DB Path*/</div><div class='add'>+    SET_DB_PARAM_TO_DICT(this-&gt;name, params_dict, GFDB_SQL_PARAM_DBPATH,</div><div class='add'>+                         db_full_path, ret, out);</div><div class='add'>+</div><div class='add'>+    /*Extract rest of the sql params*/</div><div class='add'>+    ret = gfdb_set_sql_params(this-&gt;name, this-&gt;options, params_dict);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0,</div><div class='add'>+               CTR_MSG_SET_VALUE_TO_SQL_PARAM_FAILED,</div><div class='add'>+               "Failed setting values to sql param dict!");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                GF_FREE (db_full_path);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret)</div><div class='add'>+        GF_FREE(db_full_path);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+int</div><div class='add'>+extract_db_params(xlator_t *this, dict_t *params_dict, gfdb_db_type_t db_type)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(params_dict);</div><div class='ctx'> </div><div class='del'>-int extract_db_params(xlator_t *this, dict_t *params_dict,</div><div class='del'>-                                                gfdb_db_type_t db_type) {</div><div class='del'>-</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (params_dict);</div><div class='del'>-</div><div class='del'>-        switch (db_type) {</div><div class='add'>+    switch (db_type) {</div><div class='ctx'>         case GFDB_SQLITE3:</div><div class='del'>-                ret = extract_sql_params(this, params_dict);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                break;</div><div class='add'>+            ret = extract_sql_params(this, params_dict);</div><div class='add'>+            if (ret)</div><div class='add'>+                goto out;</div><div class='add'>+            break;</div><div class='ctx'>         case GFDB_ROCKS_DB:</div><div class='ctx'>         case GFDB_HYPERDEX:</div><div class='ctx'>         case GFDB_HASH_FILE_STORE:</div><div class='ctx'>         case GFDB_INVALID_DB:</div><div class='ctx'>         case GFDB_DB_END:</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int extract_ctr_options (xlator_t *this, gf_ctr_private_t *_priv) {</div><div class='del'>-        int ret         = -1;</div><div class='del'>-        char *_val_str  = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (_priv);</div><div class='del'>-</div><div class='del'>-        /*Checking if the CTR Translator is enabled. By default its disabled*/</div><div class='del'>-        _priv-&gt;enabled = _gf_false;</div><div class='del'>-        GF_OPTION_INIT ("ctr-enabled", _priv-&gt;enabled, bool, out);</div><div class='del'>-        if (!_priv-&gt;enabled) {</div><div class='del'>-                gf_msg (GFDB_DATA_STORE, GF_LOG_INFO, 0,</div><div class='del'>-                        CTR_MSG_XLATOR_DISABLED,</div><div class='del'>-                        "CTR Xlator is disabled.");</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+int</div><div class='add'>+extract_ctr_options(xlator_t *this, gf_ctr_private_t *_priv)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *_val_str = NULL;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(_priv);</div><div class='add'>+</div><div class='add'>+    /*Checking if the CTR Translator is enabled. By default its disabled*/</div><div class='add'>+    _priv-&gt;enabled = _gf_false;</div><div class='add'>+    GF_OPTION_INIT("ctr-enabled", _priv-&gt;enabled, bool, out);</div><div class='add'>+    if (!_priv-&gt;enabled) {</div><div class='add'>+        gf_msg(GFDB_DATA_STORE, GF_LOG_INFO, 0, CTR_MSG_XLATOR_DISABLED,</div><div class='add'>+               "CTR Xlator is disabled.");</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /*Extract db type*/</div><div class='del'>-        GF_OPTION_INIT ("db-type", _val_str, str, out);</div><div class='del'>-        _priv-&gt;gfdb_db_type = gf_string2gfdbdbtype(_val_str);</div><div class='add'>+    /*Extract db type*/</div><div class='add'>+    GF_OPTION_INIT("db-type", _val_str, str, out);</div><div class='add'>+    _priv-&gt;gfdb_db_type = gf_string2gfdbdbtype(_val_str);</div><div class='ctx'> </div><div class='del'>-        /*Extract flag for record on wind*/</div><div class='del'>-        GF_OPTION_INIT ("record-entry", _priv-&gt;ctr_record_wind, bool, out);</div><div class='add'>+    /*Extract flag for record on wind*/</div><div class='add'>+    GF_OPTION_INIT("record-entry", _priv-&gt;ctr_record_wind, bool, out);</div><div class='ctx'> </div><div class='del'>-        /*Extract flag for record on unwind*/</div><div class='del'>-        GF_OPTION_INIT ("record-exit", _priv-&gt;ctr_record_unwind, bool, out);</div><div class='add'>+    /*Extract flag for record on unwind*/</div><div class='add'>+    GF_OPTION_INIT("record-exit", _priv-&gt;ctr_record_unwind, bool, out);</div><div class='ctx'> </div><div class='del'>-        /*Extract flag for record on counters*/</div><div class='del'>-        GF_OPTION_INIT ("record-counters", _priv-&gt;ctr_record_counter, bool,</div><div class='del'>-                        out);</div><div class='add'>+    /*Extract flag for record on counters*/</div><div class='add'>+    GF_OPTION_INIT("record-counters", _priv-&gt;ctr_record_counter, bool, out);</div><div class='ctx'> </div><div class='del'>-        /* Extract flag for record metadata heat */</div><div class='del'>-        GF_OPTION_INIT ("ctr-record-metadata-heat",</div><div class='del'>-                        _priv-&gt;ctr_record_metadata_heat, bool,</div><div class='del'>-                        out);</div><div class='add'>+    /* Extract flag for record metadata heat */</div><div class='add'>+    GF_OPTION_INIT("ctr-record-metadata-heat", _priv-&gt;ctr_record_metadata_heat,</div><div class='add'>+                   bool, out);</div><div class='ctx'> </div><div class='del'>-        /*Extract flag for link consistency*/</div><div class='del'>-        GF_OPTION_INIT ("ctr_link_consistency", _priv-&gt;ctr_link_consistency,</div><div class='del'>-                        bool, out);</div><div class='add'>+    /*Extract flag for link consistency*/</div><div class='add'>+    GF_OPTION_INIT("ctr_link_consistency", _priv-&gt;ctr_link_consistency, bool,</div><div class='add'>+                   out);</div><div class='ctx'> </div><div class='del'>-        /*Extract ctr_lookupheal_inode_timeout */</div><div class='del'>-        GF_OPTION_INIT ("ctr_lookupheal_inode_timeout",</div><div class='del'>-                        _priv-&gt;ctr_lookupheal_inode_timeout,</div><div class='del'>-                        uint64, out);</div><div class='add'>+    /*Extract ctr_lookupheal_inode_timeout */</div><div class='add'>+    GF_OPTION_INIT("ctr_lookupheal_inode_timeout",</div><div class='add'>+                   _priv-&gt;ctr_lookupheal_inode_timeout, uint64, out);</div><div class='ctx'> </div><div class='del'>-        /*Extract ctr_lookupheal_link_timeout*/</div><div class='del'>-        GF_OPTION_INIT ("ctr_lookupheal_link_timeout",</div><div class='del'>-                        _priv-&gt;ctr_lookupheal_link_timeout,</div><div class='del'>-                        uint64, out);</div><div class='add'>+    /*Extract ctr_lookupheal_link_timeout*/</div><div class='add'>+    GF_OPTION_INIT("ctr_lookupheal_link_timeout",</div><div class='add'>+                   _priv-&gt;ctr_lookupheal_link_timeout, uint64, out);</div><div class='ctx'> </div><div class='del'>-        /*Extract flag for hot tier brick*/</div><div class='del'>-        GF_OPTION_INIT ("hot-brick", _priv-&gt;ctr_hot_brick, bool, out);</div><div class='add'>+    /*Extract flag for hot tier brick*/</div><div class='add'>+    GF_OPTION_INIT("hot-brick", _priv-&gt;ctr_hot_brick, bool, out);</div><div class='ctx'> </div><div class='del'>-        /*Extract flag for sync mode*/</div><div class='del'>-        GF_OPTION_INIT ("db-sync", _val_str, str, out);</div><div class='del'>-        _priv-&gt;gfdb_sync_type = gf_string2gfdbdbsync(_val_str);</div><div class='add'>+    /*Extract flag for sync mode*/</div><div class='add'>+    GF_OPTION_INIT("db-sync", _val_str, str, out);</div><div class='add'>+    _priv-&gt;gfdb_sync_type = gf_string2gfdbdbsync(_val_str);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/changetimerecorder/src/ctr-xlator-ctx.c b/xlators/features/changetimerecorder/src/ctr-xlator-ctx.c<br/>index 7700ad40ba6..b4afe74a31b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/changetimerecorder/src/ctr-xlator-ctx.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/changetimerecorder/src/ctr-xlator-ctx.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/changetimerecorder/src/ctr-xlator-ctx.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/changetimerecorder/src/ctr-xlator-ctx.c</a></div><div class='hunk'>@@ -13,397 +13,350 @@</div><div class='ctx'> #include &lt;time.h&gt;</div><div class='ctx'> #include &lt;sys/time.h&gt;</div><div class='ctx'> </div><div class='del'>-#define IS_THE_ONLY_HARDLINK(ctr_hard_link)\</div><div class='del'>-        (ctr_hard_link-&gt;list.next == ctr_hard_link-&gt;list.prev)</div><div class='del'>-</div><div class='add'>+#define IS_THE_ONLY_HARDLINK(ctr_hard_link)                                    \</div><div class='add'>+    (ctr_hard_link-&gt;list.next == ctr_hard_link-&gt;list.prev)</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-fini_ctr_hard_link (ctr_hard_link_t **ctr_hard_link) {</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (ctr_hard_link);</div><div class='add'>+fini_ctr_hard_link(ctr_hard_link_t **ctr_hard_link)</div><div class='add'>+{</div><div class='add'>+    GF_ASSERT(ctr_hard_link);</div><div class='ctx'> </div><div class='del'>-        if (*ctr_hard_link)</div><div class='del'>-                return;</div><div class='del'>-        GF_FREE ((*ctr_hard_link)-&gt;base_name);</div><div class='del'>-        GF_FREE (*ctr_hard_link);</div><div class='del'>-        *ctr_hard_link = NULL;</div><div class='add'>+    if (*ctr_hard_link)</div><div class='add'>+        return;</div><div class='add'>+    GF_FREE((*ctr_hard_link)-&gt;base_name);</div><div class='add'>+    GF_FREE(*ctr_hard_link);</div><div class='add'>+    *ctr_hard_link = NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Please lock the ctr_xlator_ctx before using this function */</div><div class='ctx'> ctr_hard_link_t *</div><div class='del'>-ctr_search_hard_link_ctx (xlator_t                  *this,</div><div class='del'>-                            ctr_xlator_ctx_t        *ctr_xlator_ctx,</div><div class='del'>-                            uuid_t                  pgfid,</div><div class='del'>-                            const char              *base_name)</div><div class='add'>+ctr_search_hard_link_ctx(xlator_t *this, ctr_xlator_ctx_t *ctr_xlator_ctx,</div><div class='add'>+                         uuid_t pgfid, const char *base_name)</div><div class='ctx'> {</div><div class='del'>-        ctr_hard_link_t *_hard_link             = NULL;</div><div class='del'>-        ctr_hard_link_t *searched_hardlink      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (ctr_xlator_ctx);</div><div class='del'>-</div><div class='del'>-        if (pgfid == NULL || base_name == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /*linear search*/</div><div class='del'>-        list_for_each_entry (_hard_link, &amp;ctr_xlator_ctx-&gt;hardlink_list, list) {</div><div class='del'>-                if (gf_uuid_compare (_hard_link-&gt;pgfid, pgfid) == 0</div><div class='del'>-                        &amp;&amp; _hard_link-&gt;base_name</div><div class='del'>-                        &amp;&amp; strcmp(_hard_link-&gt;base_name, base_name) == 0) {</div><div class='del'>-                        searched_hardlink = _hard_link;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    ctr_hard_link_t *_hard_link = NULL;</div><div class='add'>+    ctr_hard_link_t *searched_hardlink = NULL;</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        return searched_hardlink;</div><div class='del'>-}</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(ctr_xlator_ctx);</div><div class='ctx'> </div><div class='add'>+    if (pgfid == NULL || base_name == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    /*linear search*/</div><div class='add'>+    list_for_each_entry(_hard_link, &amp;ctr_xlator_ctx-&gt;hardlink_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (gf_uuid_compare(_hard_link-&gt;pgfid, pgfid) == 0 &amp;&amp;</div><div class='add'>+            _hard_link-&gt;base_name &amp;&amp;</div><div class='add'>+            strcmp(_hard_link-&gt;base_name, base_name) == 0) {</div><div class='add'>+            searched_hardlink = _hard_link;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+out:</div><div class='add'>+    return searched_hardlink;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> /* Please lock the ctr_xlator_ctx before using this function */</div><div class='ctx'> int</div><div class='del'>-ctr_add_hard_link (xlator_t             *this,</div><div class='del'>-               ctr_xlator_ctx_t         *ctr_xlator_ctx,</div><div class='del'>-               uuid_t                   pgfid,</div><div class='del'>-               const char               *base_name)</div><div class='add'>+ctr_add_hard_link(xlator_t *this, ctr_xlator_ctx_t *ctr_xlator_ctx,</div><div class='add'>+                  uuid_t pgfid, const char *base_name)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        ctr_hard_link_t *ctr_hard_link          = NULL;</div><div class='del'>-        struct timeval  current_time                   = {0};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (ctr_xlator_ctx);</div><div class='del'>-</div><div class='del'>-        if (pgfid == NULL || base_name == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ctr_hard_link = GF_CALLOC (1, sizeof (*ctr_hard_link),</div><div class='del'>-                                        gf_ctr_mt_hard_link_t);</div><div class='del'>-        if (!ctr_hard_link) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM,</div><div class='del'>-                        CTR_MSG_CALLOC_FAILED, "Failed allocating "</div><div class='del'>-                        "ctr_hard_link");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_hard_link_t *ctr_hard_link = NULL;</div><div class='add'>+    struct timeval current_time = {0};</div><div class='ctx'> </div><div class='del'>-        /*Initialize the ctr_hard_link object and</div><div class='del'>-         * Assign the values : parent GFID and basename*/</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctr_hard_link-&gt;list);</div><div class='del'>-        gf_uuid_copy (ctr_hard_link-&gt;pgfid, pgfid);</div><div class='del'>-        ret = gf_asprintf(&amp;ctr_hard_link-&gt;base_name, "%s", base_name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_COPY_FAILED, "Failed copying basename"</div><div class='del'>-                        "to ctr_hard_link");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(ctr_xlator_ctx);</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get current time");</div><div class='del'>-                goto error;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*Add the hard link to the list*/</div><div class='del'>-        list_add_tail (&amp;ctr_hard_link-&gt;list,</div><div class='del'>-                        &amp;ctr_xlator_ctx-&gt;hardlink_list);</div><div class='del'>-</div><div class='del'>-        ctr_hard_link-&gt;hardlink_heal_period = current_time.tv_sec;</div><div class='add'>+    if (pgfid == NULL || base_name == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /*aal izz well!*/</div><div class='del'>-        ret = 0;</div><div class='add'>+    ctr_hard_link = GF_CALLOC(1, sizeof(*ctr_hard_link), gf_ctr_mt_hard_link_t);</div><div class='add'>+    if (!ctr_hard_link) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, CTR_MSG_CALLOC_FAILED,</div><div class='add'>+               "Failed allocating "</div><div class='add'>+               "ctr_hard_link");</div><div class='ctx'>         goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Initialize the ctr_hard_link object and</div><div class='add'>+     * Assign the values : parent GFID and basename*/</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctr_hard_link-&gt;list);</div><div class='add'>+    gf_uuid_copy(ctr_hard_link-&gt;pgfid, pgfid);</div><div class='add'>+    ret = gf_asprintf(&amp;ctr_hard_link-&gt;base_name, "%s", base_name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_COPY_FAILED,</div><div class='add'>+               "Failed copying basename"</div><div class='add'>+               "to ctr_hard_link");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to get current time");</div><div class='add'>+        goto error;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*Add the hard link to the list*/</div><div class='add'>+    list_add_tail(&amp;ctr_hard_link-&gt;list, &amp;ctr_xlator_ctx-&gt;hardlink_list);</div><div class='add'>+</div><div class='add'>+    ctr_hard_link-&gt;hardlink_heal_period = current_time.tv_sec;</div><div class='add'>+</div><div class='add'>+    /*aal izz well!*/</div><div class='add'>+    ret = 0;</div><div class='add'>+    goto out;</div><div class='ctx'> error:</div><div class='del'>-        GF_FREE (ctr_hard_link);</div><div class='add'>+    GF_FREE(ctr_hard_link);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__delete_hard_link_from_list (ctr_hard_link_t  **ctr_hard_link)</div><div class='add'>+__delete_hard_link_from_list(ctr_hard_link_t **ctr_hard_link)</div><div class='ctx'> {</div><div class='del'>-        GF_ASSERT (ctr_hard_link);</div><div class='del'>-        GF_ASSERT (*ctr_hard_link);</div><div class='add'>+    GF_ASSERT(ctr_hard_link);</div><div class='add'>+    GF_ASSERT(*ctr_hard_link);</div><div class='ctx'> </div><div class='del'>-        /*Remove hard link from list*/</div><div class='del'>-        list_del(&amp;(*ctr_hard_link)-&gt;list);</div><div class='del'>-        fini_ctr_hard_link (ctr_hard_link);</div><div class='add'>+    /*Remove hard link from list*/</div><div class='add'>+    list_del(&amp;(*ctr_hard_link)-&gt;list);</div><div class='add'>+    fini_ctr_hard_link(ctr_hard_link);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ctr_delete_hard_link (xlator_t                *this,</div><div class='del'>-                  ctr_xlator_ctx_t      *ctr_xlator_ctx,</div><div class='del'>-                  uuid_t                pgfid,</div><div class='del'>-                  const char            *base_name)</div><div class='add'>+ctr_delete_hard_link(xlator_t *this, ctr_xlator_ctx_t *ctr_xlator_ctx,</div><div class='add'>+                     uuid_t pgfid, const char *base_name)</div><div class='ctx'> {</div><div class='del'>-        int ret                         = -1;</div><div class='del'>-        ctr_hard_link_t *ctr_hard_link     = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_hard_link_t *ctr_hard_link = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (ctr_xlator_ctx);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(ctr_xlator_ctx);</div><div class='ctx'> </div><div class='add'>+    LOCK(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /*Check if the hard link is present */</div><div class='del'>-        ctr_hard_link = ctr_search_hard_link_ctx (this, ctr_xlator_ctx,</div><div class='del'>-                                                        pgfid, base_name);</div><div class='del'>-        if (!ctr_hard_link) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_HARDLINK_MISSING_IN_LIST,</div><div class='del'>-                        "Hard link doesn't exist in the list");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /*Check if the hard link is present */</div><div class='add'>+    ctr_hard_link = ctr_search_hard_link_ctx(this, ctr_xlator_ctx, pgfid,</div><div class='add'>+                                             base_name);</div><div class='add'>+    if (!ctr_hard_link) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_HARDLINK_MISSING_IN_LIST,</div><div class='add'>+               "Hard link doesn't exist in the list");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __delete_hard_link_from_list (&amp;ctr_hard_link);</div><div class='del'>-        ctr_hard_link = NULL;</div><div class='add'>+    __delete_hard_link_from_list(&amp;ctr_hard_link);</div><div class='add'>+    ctr_hard_link = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ctr_update_hard_link (xlator_t                *this,</div><div class='del'>-                  ctr_xlator_ctx_t      *ctr_xlator_ctx,</div><div class='del'>-                  uuid_t                pgfid,</div><div class='del'>-                  const char            *base_name,</div><div class='del'>-                  uuid_t                old_pgfid,</div><div class='del'>-                  const char            *old_base_name)</div><div class='add'>+ctr_update_hard_link(xlator_t *this, ctr_xlator_ctx_t *ctr_xlator_ctx,</div><div class='add'>+                     uuid_t pgfid, const char *base_name, uuid_t old_pgfid,</div><div class='add'>+                     const char *old_base_name)</div><div class='ctx'> {</div><div class='del'>-        int ret                            = -1;</div><div class='del'>-        ctr_hard_link_t *ctr_hard_link     = NULL;</div><div class='del'>-        struct timeval current_time        = {0};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (ctr_xlator_ctx);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /*Check if the hard link is present */</div><div class='del'>-        ctr_hard_link = ctr_search_hard_link_ctx (this, ctr_xlator_ctx,</div><div class='del'>-                                                old_pgfid, old_base_name);</div><div class='del'>-        if (!ctr_hard_link) {</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "Hard link doesn't exist"</div><div class='del'>-                              " in the list");</div><div class='del'>-                /* Since the hard link is not present in the list</div><div class='del'>-                 * we add it to the list */</div><div class='del'>-                ret = ctr_add_hard_link (this, ctr_xlator_ctx,</div><div class='del'>-                                        pgfid, base_name);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                CTR_MSG_ADD_HARDLINK_TO_LIST_FAILED,</div><div class='del'>-                                "Failed adding hard link to the list");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* update the hard link */</div><div class='del'>-        gf_uuid_copy (ctr_hard_link-&gt;pgfid, pgfid);</div><div class='del'>-        GF_FREE (ctr_hard_link-&gt;base_name);</div><div class='del'>-        ret = gf_asprintf(&amp;ctr_hard_link-&gt;base_name, "%s", base_name);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                        CTR_MSG_COPY_FAILED, "Failed copying basename"</div><div class='del'>-                                        "to ctr_hard_link");</div><div class='del'>-                /* delete the corrupted entry */</div><div class='del'>-                __delete_hard_link_from_list (&amp;ctr_hard_link);</div><div class='del'>-                ctr_hard_link = NULL;</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_hard_link_t *ctr_hard_link = NULL;</div><div class='add'>+    struct timeval current_time = {0};</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(ctr_xlator_ctx);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /*Check if the hard link is present */</div><div class='add'>+    ctr_hard_link = ctr_search_hard_link_ctx(this, ctr_xlator_ctx, old_pgfid,</div><div class='add'>+                                             old_base_name);</div><div class='add'>+    if (!ctr_hard_link) {</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                     "Hard link doesn't exist"</div><div class='add'>+                     " in the list");</div><div class='add'>+        /* Since the hard link is not present in the list</div><div class='add'>+         * we add it to the list */</div><div class='add'>+        ret = ctr_add_hard_link(this, ctr_xlator_ctx, pgfid, base_name);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0,</div><div class='add'>+                   CTR_MSG_ADD_HARDLINK_TO_LIST_FAILED,</div><div class='add'>+                   "Failed adding hard link to the list");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* update the hard link */</div><div class='add'>+    gf_uuid_copy(ctr_hard_link-&gt;pgfid, pgfid);</div><div class='add'>+    GF_FREE(ctr_hard_link-&gt;base_name);</div><div class='add'>+    ret = gf_asprintf(&amp;ctr_hard_link-&gt;base_name, "%s", base_name);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, CTR_MSG_COPY_FAILED,</div><div class='add'>+               "Failed copying basename"</div><div class='add'>+               "to ctr_hard_link");</div><div class='add'>+        /* delete the corrupted entry */</div><div class='add'>+        __delete_hard_link_from_list(&amp;ctr_hard_link);</div><div class='add'>+        ctr_hard_link = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Failed to get current time");</div><div class='del'>-                ctr_hard_link-&gt;hardlink_heal_period = 0;</div><div class='del'>-        } else {</div><div class='del'>-                ctr_hard_link-&gt;hardlink_heal_period = current_time.tv_sec;</div><div class='del'>-        }</div><div class='add'>+    ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to get current time");</div><div class='add'>+        ctr_hard_link-&gt;hardlink_heal_period = 0;</div><div class='add'>+    } else {</div><div class='add'>+        ctr_hard_link-&gt;hardlink_heal_period = current_time.tv_sec;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Delete all hardlinks */</div><div class='ctx'> static int</div><div class='del'>-ctr_delete_all_hard_link (xlator_t *this,</div><div class='del'>-                          ctr_xlator_ctx_t *ctr_xlator_ctx)</div><div class='add'>+ctr_delete_all_hard_link(xlator_t *this, ctr_xlator_ctx_t *ctr_xlator_ctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        ctr_hard_link_t *ctr_hard_link     = NULL;</div><div class='del'>-        ctr_hard_link_t *tmp               = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (ctr_xlator_ctx);</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ctr_hard_link_t *ctr_hard_link = NULL;</div><div class='add'>+    ctr_hard_link_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='add'>+    GF_ASSERT(ctr_xlator_ctx);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe(ctr_hard_link, tmp,</div><div class='del'>-                        &amp;ctr_xlator_ctx-&gt;hardlink_list, list)</div><div class='del'>-        {</div><div class='del'>-                /*Remove hard link from list*/</div><div class='del'>-                __delete_hard_link_from_list (&amp;ctr_hard_link);</div><div class='del'>-                ctr_hard_link = NULL;</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    LOCK(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'> </div><div class='add'>+    list_for_each_entry_safe(ctr_hard_link, tmp, &amp;ctr_xlator_ctx-&gt;hardlink_list,</div><div class='add'>+                             list)</div><div class='add'>+    {</div><div class='add'>+        /*Remove hard link from list*/</div><div class='add'>+        __delete_hard_link_from_list(&amp;ctr_hard_link);</div><div class='add'>+        ctr_hard_link = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Please lock the inode before using this function */</div><div class='ctx'> static ctr_xlator_ctx_t *</div><div class='del'>-__get_ctr_xlator_ctx (xlator_t  *this,</div><div class='del'>-                      inode_t   *inode)</div><div class='add'>+__get_ctr_xlator_ctx(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        uint64_t _addr                          = 0;</div><div class='del'>-        ctr_xlator_ctx_t *ctr_xlator_ctx        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (inode);</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;_addr);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                _addr = 0;</div><div class='del'>-        if (_addr != 0) {</div><div class='del'>-                ctr_xlator_ctx = (ctr_xlator_ctx_t *) (long)_addr;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t _addr = 0;</div><div class='add'>+    ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        return ctr_xlator_ctx;</div><div class='del'>-}</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(inode);</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;_addr);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        _addr = 0;</div><div class='add'>+    if (_addr != 0) {</div><div class='add'>+        ctr_xlator_ctx = (ctr_xlator_ctx_t *)(long)_addr;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ctr_xlator_ctx;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> ctr_xlator_ctx_t *</div><div class='del'>-init_ctr_xlator_ctx (xlator_t *this,</div><div class='del'>-                     inode_t *inode)</div><div class='add'>+init_ctr_xlator_ctx(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = -1;</div><div class='del'>-        uint64_t _addr                          = 0;</div><div class='del'>-        ctr_xlator_ctx_t *ctr_xlator_ctx        = NULL;</div><div class='del'>-        struct timeval current_time             = {0};</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (inode);</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctr_xlator_ctx = __get_ctr_xlator_ctx (this, inode);</div><div class='del'>-                if (ctr_xlator_ctx) {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ctr_xlator_ctx = GF_CALLOC (1, sizeof (*ctr_xlator_ctx),</div><div class='del'>-                                                        gf_ctr_mt_xlator_ctx);</div><div class='del'>-                if (!ctr_xlator_ctx)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = LOCK_INIT (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                                CTR_MSG_INIT_LOCK_FAILED,</div><div class='del'>-                                "Failed init lock %s", strerror(ret));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                _addr = (uint64_t) ctr_xlator_ctx;</div><div class='del'>-</div><div class='del'>-                ret = __inode_ctx_set (inode, this, &amp;_addr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;ctr_xlator_ctx-&gt;hardlink_list);</div><div class='del'>-</div><div class='del'>-                ret = gettimeofday (&amp;current_time, NULL);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "Failed to get current time");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ctr_xlator_ctx-&gt;inode_heal_period = current_time.tv_sec;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t _addr = 0;</div><div class='add'>+    ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='add'>+    struct timeval current_time = {0};</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(inode);</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctr_xlator_ctx = __get_ctr_xlator_ctx(this, inode);</div><div class='add'>+        if (ctr_xlator_ctx) {</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        ret = 0;</div><div class='del'>-out:</div><div class='add'>+        ctr_xlator_ctx = GF_CALLOC(1, sizeof(*ctr_xlator_ctx),</div><div class='add'>+                                   gf_ctr_mt_xlator_ctx);</div><div class='add'>+        if (!ctr_xlator_ctx)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = LOCK_INIT(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                GF_FREE (ctr_xlator_ctx);</div><div class='del'>-                ctr_xlator_ctx = NULL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, ret, CTR_MSG_INIT_LOCK_FAILED,</div><div class='add'>+                   "Failed init lock %s", strerror(ret));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        _addr = (uint64_t)ctr_xlator_ctx;</div><div class='ctx'> </div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+        ret = __inode_ctx_set(inode, this, &amp;_addr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        return ctr_xlator_ctx;</div><div class='del'>-}</div><div class='add'>+        INIT_LIST_HEAD(&amp;ctr_xlator_ctx-&gt;hardlink_list);</div><div class='ctx'> </div><div class='add'>+        ret = gettimeofday(&amp;current_time, NULL);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to get current time");</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ctr_xlator_ctx-&gt;inode_heal_period = current_time.tv_sec;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='add'>+out:</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(ctr_xlator_ctx);</div><div class='add'>+        ctr_xlator_ctx = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='add'>+    return ctr_xlator_ctx;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini_ctr_xlator_ctx (xlator_t *this,</div><div class='del'>-                     inode_t *inode)</div><div class='add'>+fini_ctr_xlator_ctx(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int ret                                 = 0;</div><div class='del'>-        uint64_t _addr                          = 0;</div><div class='del'>-        ctr_xlator_ctx_t *ctr_xlator_ctx        = NULL;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        inode_ctx_del (inode, this, &amp;_addr);</div><div class='del'>-        if (!_addr)</div><div class='del'>-                return;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t _addr = 0;</div><div class='add'>+    ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctr_xlator_ctx = (ctr_xlator_ctx_t *) (long) _addr;</div><div class='add'>+    inode_ctx_del(inode, this, &amp;_addr);</div><div class='add'>+    if (!_addr)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = ctr_delete_all_hard_link (this, ctr_xlator_ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING , 0,</div><div class='del'>-                        CTR_MSG_DELETE_HARDLINK_FAILED, "Failed deleting all "</div><div class='del'>-                        "hard links from inode context");</div><div class='del'>-        }</div><div class='add'>+    ctr_xlator_ctx = (ctr_xlator_ctx_t *)(long)_addr;</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;ctr_xlator_ctx-&gt;lock);</div><div class='add'>+    ret = ctr_delete_all_hard_link(this, ctr_xlator_ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, CTR_MSG_DELETE_HARDLINK_FAILED,</div><div class='add'>+               "Failed deleting all "</div><div class='add'>+               "hard links from inode context");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctr_xlator_ctx);</div><div class='add'>+    LOCK_DESTROY(&amp;ctr_xlator_ctx-&gt;lock);</div><div class='ctx'> </div><div class='add'>+    GF_FREE(ctr_xlator_ctx);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> ctr_xlator_ctx_t *</div><div class='del'>-get_ctr_xlator_ctx (xlator_t *this,</div><div class='del'>-                    inode_t *inode)</div><div class='add'>+get_ctr_xlator_ctx(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='add'>+    ctr_xlator_ctx_t *ctr_xlator_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        ctr_xlator_ctx = __get_ctr_xlator_ctx (this, inode);</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    ctr_xlator_ctx = __get_ctr_xlator_ctx(this, inode);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ctr_xlator_ctx;</div><div class='add'>+    return ctr_xlator_ctx;</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/xlators/features/cloudsync/src/cloudsync-common.c b/xlators/features/cloudsync/src/cloudsync-common.c<br/>index d0d00decca3..aee1f06a82a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/cloudsync/src/cloudsync-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/cloudsync/src/cloudsync-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/cloudsync/src/cloudsync-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/cloudsync/src/cloudsync-common.c</a></div><div class='hunk'>@@ -11,34 +11,34 @@</div><div class='ctx'> #include "cloudsync-common.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cs_local_wipe (xlator_t *this, cs_local_t *local)</div><div class='add'>+cs_local_wipe(xlator_t *this, cs_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (!local)</div><div class='del'>-                return;</div><div class='add'>+    if (!local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                fd_unref (local-&gt;fd);</div><div class='del'>-                local-&gt;fd = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='add'>+        local-&gt;fd = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;stub) {</div><div class='del'>-                call_stub_destroy (local-&gt;stub);</div><div class='del'>-                local-&gt;stub = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;stub) {</div><div class='add'>+        call_stub_destroy(local-&gt;stub);</div><div class='add'>+        local-&gt;stub = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr_req)</div><div class='del'>-                dict_unref (local-&gt;xattr_req);</div><div class='add'>+    if (local-&gt;xattr_req)</div><div class='add'>+        dict_unref(local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xattr_rsp)</div><div class='del'>-                dict_unref (local-&gt;xattr_rsp);</div><div class='add'>+    if (local-&gt;xattr_rsp)</div><div class='add'>+        dict_unref(local-&gt;xattr_rsp);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;dlfd)</div><div class='del'>-                fd_unref (local-&gt;dlfd);</div><div class='add'>+    if (local-&gt;dlfd)</div><div class='add'>+        fd_unref(local-&gt;dlfd);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;remotepath)</div><div class='del'>-                GF_FREE (local-&gt;remotepath);</div><div class='add'>+    if (local-&gt;remotepath)</div><div class='add'>+        GF_FREE(local-&gt;remotepath);</div><div class='ctx'> </div><div class='del'>-        mem_put (local);</div><div class='add'>+    mem_put(local);</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c b/xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c<br/>index e36bf71e4ae..dad29fc0e4f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/libcloudsyncs3.c</a></div><div class='hunk'>@@ -23,566 +23,560 @@</div><div class='ctx'> #define RESOURCE_SIZE 4096</div><div class='ctx'> </div><div class='ctx'> store_methods_t store_ops = {</div><div class='del'>-        .fop_download = aws_download_s3,</div><div class='del'>-        .fop_init     = aws_init,</div><div class='del'>-        .fop_reconfigure = aws_reconfigure,</div><div class='del'>-        .fop_fini     = aws_fini,</div><div class='add'>+    .fop_download = aws_download_s3,</div><div class='add'>+    .fop_init = aws_init,</div><div class='add'>+    .fop_reconfigure = aws_reconfigure,</div><div class='add'>+    .fop_fini = aws_fini,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> typedef struct aws_private {</div><div class='del'>-        char *hostname;</div><div class='del'>-        char *bucketid;</div><div class='del'>-        char *awssekey;</div><div class='del'>-        char *awskeyid;</div><div class='del'>-        gf_boolean_t abortdl;</div><div class='del'>-        pthread_spinlock_t lock;</div><div class='add'>+    char *hostname;</div><div class='add'>+    char *bucketid;</div><div class='add'>+    char *awssekey;</div><div class='add'>+    char *awskeyid;</div><div class='add'>+    gf_boolean_t abortdl;</div><div class='add'>+    pthread_spinlock_t lock;</div><div class='ctx'> } aws_private_t;</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-aws_init (xlator_t *this)</div><div class='add'>+aws_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        aws_private_t  *priv = NULL;</div><div class='del'>-        char           *temp_str = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (aws_private_t),</div><div class='del'>-                          gf_libaws_mt_aws_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;abortdl = _gf_false;</div><div class='del'>-</div><div class='del'>-        pthread_spin_init (&amp;priv-&gt;lock, PTHREAD_PROCESS_PRIVATE);</div><div class='del'>-</div><div class='del'>-        pthread_spin_lock (&amp;(priv-&gt;lock));</div><div class='del'>-        {</div><div class='del'>-        if (dict_get_str (this-&gt;options, "s3plugin-seckey",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;awssekey = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;awssekey) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws secret key failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    aws_private_t *priv = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(aws_private_t), gf_libaws_mt_aws_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;abortdl = _gf_false;</div><div class='add'>+</div><div class='add'>+    pthread_spin_init(&amp;priv-&gt;lock, PTHREAD_PROCESS_PRIVATE);</div><div class='add'>+</div><div class='add'>+    pthread_spin_lock(&amp;(priv-&gt;lock));</div><div class='add'>+    {</div><div class='add'>+        if (dict_get_str(this-&gt;options, "s3plugin-seckey", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;awssekey = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;awssekey) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws secret key failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (this-&gt;options, "s3plugin-keyid",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;awskeyid = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;awskeyid) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws key ID failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        if (dict_get_str(this-&gt;options, "s3plugin-keyid", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;awskeyid = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;awskeyid) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws key ID failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (this-&gt;options, "s3plugin-bucketid",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;bucketid = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;bucketid) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws bucketid failed");</div><div class='add'>+        if (dict_get_str(this-&gt;options, "s3plugin-bucketid", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;bucketid = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;bucketid) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws bucketid failed");</div><div class='ctx'> </div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (this-&gt;options, "s3plugin-hostname",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;hostname = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;hostname) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws hostname failed");</div><div class='add'>+        if (dict_get_str(this-&gt;options, "s3plugin-hostname", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;hostname = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;hostname) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws hostname failed");</div><div class='ctx'> </div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name,  0, "stored key: %s id: %s "</div><div class='del'>-                      "bucketid %s hostname: %s", priv-&gt;awssekey,</div><div class='del'>-                      priv-&gt;awskeyid, priv-&gt;bucketid, priv-&gt;hostname);</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "stored key: %s id: %s "</div><div class='add'>+                     "bucketid %s hostname: %s",</div><div class='add'>+                     priv-&gt;awssekey, priv-&gt;awskeyid, priv-&gt;bucketid,</div><div class='add'>+                     priv-&gt;hostname);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_spin_unlock (&amp;(priv-&gt;lock));</div><div class='del'>-</div><div class='del'>-        if (ret  == -1) {</div><div class='del'>-                GF_FREE (priv-&gt;awskeyid);</div><div class='del'>-                GF_FREE (priv-&gt;awssekey);</div><div class='del'>-                GF_FREE (priv-&gt;bucketid);</div><div class='del'>-                GF_FREE (priv-&gt;hostname);</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-                priv = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return (void *)priv;</div><div class='add'>+    pthread_spin_unlock(&amp;(priv-&gt;lock));</div><div class='add'>+</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        GF_FREE(priv-&gt;awskeyid);</div><div class='add'>+        GF_FREE(priv-&gt;awssekey);</div><div class='add'>+        GF_FREE(priv-&gt;bucketid);</div><div class='add'>+        GF_FREE(priv-&gt;hostname);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+        priv = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return (void *)priv;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-aws_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+aws_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        aws_private_t  *priv = NULL;</div><div class='del'>-        char           *temp_str = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        cs_private_t   *cspriv = NULL;</div><div class='del'>-</div><div class='del'>-        cspriv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        priv = cspriv-&gt;stores-&gt;config;</div><div class='del'>-</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "null priv");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_spin_lock (&amp;(priv-&gt;lock));</div><div class='del'>-        {</div><div class='del'>-        if (dict_get_str (options, "s3plugin-seckey",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;awssekey = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;awssekey) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws secret key failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict_get_str (options, "s3plugin-keyid",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;awskeyid = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;awskeyid) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws key ID failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    aws_private_t *priv = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cs_private_t *cspriv = NULL;</div><div class='add'>+</div><div class='add'>+    cspriv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    priv = cspriv-&gt;stores-&gt;config;</div><div class='add'>+</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "null priv");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_spin_lock(&amp;(priv-&gt;lock));</div><div class='add'>+    {</div><div class='add'>+        if (dict_get_str(options, "s3plugin-seckey", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;awssekey = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;awssekey) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws secret key failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (options, "s3plugin-bucketid",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;bucketid = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;bucketid) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws bucketid failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (dict_get_str(options, "s3plugin-keyid", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;awskeyid = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;awskeyid) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws key ID failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (dict_get_str (options, "s3plugin-hostname",</div><div class='del'>-            &amp;temp_str) == 0) {</div><div class='del'>-                priv-&gt;hostname = gf_strdup (temp_str);</div><div class='del'>-                if (!priv-&gt;hostname) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='del'>-                                "initializing aws hostname failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (dict_get_str(options, "s3plugin-bucketid", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;bucketid = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;bucketid) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws bucketid failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        if (dict_get_str(options, "s3plugin-hostname", &amp;temp_str) == 0) {</div><div class='add'>+            priv-&gt;hostname = gf_strdup(temp_str);</div><div class='add'>+            if (!priv-&gt;hostname) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+                       "initializing aws hostname failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        pthread_spin_unlock (&amp;(priv-&gt;lock));</div><div class='add'>+    pthread_spin_unlock(&amp;(priv-&gt;lock));</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name,  0, "stored key: %s id: %s "</div><div class='del'>-                      "bucketid %s hostname: %s", priv-&gt;awssekey,</div><div class='del'>-                      priv-&gt;awskeyid, priv-&gt;bucketid, priv-&gt;hostname);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "stored key: %s id: %s "</div><div class='add'>+                 "bucketid %s hostname: %s",</div><div class='add'>+                 priv-&gt;awssekey, priv-&gt;awskeyid, priv-&gt;bucketid,</div><div class='add'>+                 priv-&gt;hostname);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-aws_fini (void *config)</div><div class='add'>+aws_fini(void *config)</div><div class='ctx'> {</div><div class='del'>-        aws_private_t *priv = NULL;</div><div class='add'>+    aws_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = (aws_private_t *)priv;</div><div class='add'>+    priv = (aws_private_t *)priv;</div><div class='ctx'> </div><div class='del'>-        if (priv) {</div><div class='del'>-                GF_FREE (priv-&gt;hostname);</div><div class='del'>-                GF_FREE (priv-&gt;bucketid);</div><div class='del'>-                GF_FREE (priv-&gt;awssekey);</div><div class='del'>-                GF_FREE (priv-&gt;awskeyid);</div><div class='add'>+    if (priv) {</div><div class='add'>+        GF_FREE(priv-&gt;hostname);</div><div class='add'>+        GF_FREE(priv-&gt;bucketid);</div><div class='add'>+        GF_FREE(priv-&gt;awssekey);</div><div class='add'>+        GF_FREE(priv-&gt;awskeyid);</div><div class='ctx'> </div><div class='del'>-                pthread_spin_destroy (&amp;priv-&gt;lock);</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-        }</div><div class='add'>+        pthread_spin_destroy(&amp;priv-&gt;lock);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("dht", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("dht", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_libaws_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_libaws_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "Memory accounting init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> char *</div><div class='del'>-aws_form_request (char *resource, char **date, char *reqtype, char *bucketid,</div><div class='del'>-                  char *filepath)</div><div class='add'>+aws_form_request(char *resource, char **date, char *reqtype, char *bucketid,</div><div class='add'>+                 char *filepath)</div><div class='ctx'> {</div><div class='del'>-        char            httpdate[256];</div><div class='del'>-        time_t          ctime;</div><div class='del'>-        struct tm      *gtime = NULL;</div><div class='del'>-        char           *sign_req = NULL;</div><div class='del'>-        int             signreq_len = -1;</div><div class='del'>-        int             date_len = -1;</div><div class='del'>-        int             res_len = -1;</div><div class='del'>-</div><div class='del'>-        ctime = time(NULL);</div><div class='del'>-        gtime = gmtime(&amp;ctime);</div><div class='del'>-</div><div class='del'>-        date_len = strftime (httpdate, sizeof(httpdate),</div><div class='del'>-                             "%a, %d %b %Y %H:%M:%S +0000", gtime);</div><div class='del'>-</div><div class='del'>-        *date = gf_strndup (httpdate, date_len);</div><div class='del'>-        if (*date == NULL) {</div><div class='del'>-                gf_msg ("CS", GF_LOG_ERROR, ENOMEM, 0, "memory allocation "</div><div class='del'>-                        "failure for date");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        res_len = snprintf(resource, RESOURCE_SIZE, "%s/%s", bucketid,</div><div class='del'>-                           filepath);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("CS", 0, "resource %s", resource);</div><div class='del'>-</div><div class='del'>-        /* 6 accounts for the 4 new line chars, one forward slash and</div><div class='del'>-         * one null char */</div><div class='del'>-        signreq_len = res_len + date_len + strlen(reqtype) + 6;</div><div class='del'>-</div><div class='del'>-        sign_req = GF_MALLOC (signreq_len, gf_common_mt_char);</div><div class='del'>-        if (sign_req == NULL) {</div><div class='del'>-                gf_msg ("CS", GF_LOG_ERROR, ENOMEM, 0, "memory allocation "</div><div class='del'>-                        "failure for sign_req");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf(sign_req, signreq_len, "%s\n\n%s\n%s\n/%s",</div><div class='del'>-                 reqtype,</div><div class='del'>-                 "",</div><div class='del'>-                 *date,</div><div class='del'>-                 resource);</div><div class='add'>+    char httpdate[256];</div><div class='add'>+    time_t ctime;</div><div class='add'>+    struct tm *gtime = NULL;</div><div class='add'>+    char *sign_req = NULL;</div><div class='add'>+    int signreq_len = -1;</div><div class='add'>+    int date_len = -1;</div><div class='add'>+    int res_len = -1;</div><div class='add'>+</div><div class='add'>+    ctime = time(NULL);</div><div class='add'>+    gtime = gmtime(&amp;ctime);</div><div class='add'>+</div><div class='add'>+    date_len = strftime(httpdate, sizeof(httpdate),</div><div class='add'>+                        "%a, %d %b %Y %H:%M:%S +0000", gtime);</div><div class='add'>+</div><div class='add'>+    *date = gf_strndup(httpdate, date_len);</div><div class='add'>+    if (*date == NULL) {</div><div class='add'>+        gf_msg("CS", GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+               "memory allocation "</div><div class='add'>+               "failure for date");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    res_len = snprintf(resource, RESOURCE_SIZE, "%s/%s", bucketid, filepath);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("CS", 0, "resource %s", resource);</div><div class='add'>+</div><div class='add'>+    /* 6 accounts for the 4 new line chars, one forward slash and</div><div class='add'>+     * one null char */</div><div class='add'>+    signreq_len = res_len + date_len + strlen(reqtype) + 6;</div><div class='add'>+</div><div class='add'>+    sign_req = GF_MALLOC(signreq_len, gf_common_mt_char);</div><div class='add'>+    if (sign_req == NULL) {</div><div class='add'>+        gf_msg("CS", GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+               "memory allocation "</div><div class='add'>+               "failure for sign_req");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(sign_req, signreq_len, "%s\n\n%s\n%s\n/%s", reqtype, "", *date,</div><div class='add'>+             resource);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return sign_req;</div><div class='add'>+    return sign_req;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char*</div><div class='add'>+char *</div><div class='ctx'> aws_b64_encode(const unsigned char *input, int length)</div><div class='ctx'> {</div><div class='del'>-        BIO     *bio, *b64;</div><div class='del'>-        BUF_MEM *bptr;</div><div class='del'>-        char    *buff = NULL;</div><div class='add'>+    BIO *bio, *b64;</div><div class='add'>+    BUF_MEM *bptr;</div><div class='add'>+    char *buff = NULL;</div><div class='ctx'> </div><div class='del'>-        b64 = BIO_new(BIO_f_base64());</div><div class='del'>-        bio = BIO_new(BIO_s_mem());</div><div class='del'>-        b64 = BIO_push(b64, bio);</div><div class='del'>-        BIO_write(b64, input, length);</div><div class='del'>-        BIO_flush(b64);</div><div class='del'>-        BIO_get_mem_ptr(b64, &amp;bptr);</div><div class='add'>+    b64 = BIO_new(BIO_f_base64());</div><div class='add'>+    bio = BIO_new(BIO_s_mem());</div><div class='add'>+    b64 = BIO_push(b64, bio);</div><div class='add'>+    BIO_write(b64, input, length);</div><div class='add'>+    BIO_flush(b64);</div><div class='add'>+    BIO_get_mem_ptr(b64, &amp;bptr);</div><div class='ctx'> </div><div class='del'>-        buff = GF_MALLOC(bptr-&gt;length, gf_common_mt_char);</div><div class='del'>-        memcpy(buff, bptr-&gt;data, bptr-&gt;length - 1);</div><div class='del'>-        buff[bptr-&gt;length - 1] = 0;</div><div class='add'>+    buff = GF_MALLOC(bptr-&gt;length, gf_common_mt_char);</div><div class='add'>+    memcpy(buff, bptr-&gt;data, bptr-&gt;length - 1);</div><div class='add'>+    buff[bptr-&gt;length - 1] = 0;</div><div class='ctx'> </div><div class='del'>-        BIO_free_all(b64);</div><div class='add'>+    BIO_free_all(b64);</div><div class='ctx'> </div><div class='del'>-        return buff;</div><div class='add'>+    return buff;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='ctx'> aws_sign_request(char *const str, char *awssekey)</div><div class='ctx'> {</div><div class='ctx'> #if (OPENSSL_VERSION_NUMBER &lt; 0x1010002f)</div><div class='del'>-        HMAC_CTX  ctx;</div><div class='add'>+    HMAC_CTX ctx;</div><div class='ctx'> #endif</div><div class='del'>-        HMAC_CTX *pctx = NULL;;</div><div class='add'>+    HMAC_CTX *pctx = NULL;</div><div class='add'>+    ;</div><div class='ctx'> </div><div class='del'>-        unsigned char md[256];</div><div class='del'>-        unsigned len;</div><div class='del'>-        char *base64 = NULL;</div><div class='add'>+    unsigned char md[256];</div><div class='add'>+    unsigned len;</div><div class='add'>+    char *base64 = NULL;</div><div class='ctx'> </div><div class='ctx'> #if (OPENSSL_VERSION_NUMBER &lt; 0x1010002f)</div><div class='del'>-        HMAC_CTX_init (&amp;ctx);</div><div class='del'>-        pctx = &amp;ctx;</div><div class='add'>+    HMAC_CTX_init(&amp;ctx);</div><div class='add'>+    pctx = &amp;ctx;</div><div class='ctx'> #else</div><div class='del'>-        pctx = HMAC_CTX_new ();</div><div class='add'>+    pctx = HMAC_CTX_new();</div><div class='ctx'> #endif</div><div class='del'>-        HMAC_Init_ex (pctx, awssekey, strlen(awssekey), EVP_sha1(), NULL);</div><div class='del'>-        HMAC_Update (pctx, (unsigned char *)str, strlen(str));</div><div class='del'>-        HMAC_Final (pctx, (unsigned char *)md, &amp;len);</div><div class='add'>+    HMAC_Init_ex(pctx, awssekey, strlen(awssekey), EVP_sha1(), NULL);</div><div class='add'>+    HMAC_Update(pctx, (unsigned char *)str, strlen(str));</div><div class='add'>+    HMAC_Final(pctx, (unsigned char *)md, &amp;len);</div><div class='ctx'> </div><div class='ctx'> #if (OPENSSL_VERSION_NUMBER &lt; 0x1010002f)</div><div class='del'>-        HMAC_CTX_cleanup (pctx);</div><div class='add'>+    HMAC_CTX_cleanup(pctx);</div><div class='ctx'> #else</div><div class='del'>-        HMAC_CTX_free (pctx);</div><div class='add'>+    HMAC_CTX_free(pctx);</div><div class='ctx'> #endif</div><div class='del'>-        base64 = aws_b64_encode(md, len);</div><div class='add'>+    base64 = aws_b64_encode(md, len);</div><div class='ctx'> </div><div class='del'>-        return base64;</div><div class='add'>+    return base64;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-aws_dlwritev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                 struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+aws_dlwritev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        aws_private_t    *priv = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, op_errno, "write failed "</div><div class='del'>-                        ". Aborting Download");</div><div class='del'>-</div><div class='del'>-                priv = this-&gt;private;</div><div class='del'>-                pthread_spin_lock (&amp;(priv-&gt;lock));</div><div class='del'>-                {</div><div class='del'>-                        priv-&gt;abortdl = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                pthread_spin_unlock (&amp;(priv-&gt;lock));</div><div class='add'>+    aws_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, op_errno,</div><div class='add'>+               "write failed "</div><div class='add'>+               ". Aborting Download");</div><div class='add'>+</div><div class='add'>+        priv = this-&gt;private;</div><div class='add'>+        pthread_spin_lock(&amp;(priv-&gt;lock));</div><div class='add'>+        {</div><div class='add'>+            priv-&gt;abortdl = _gf_true;</div><div class='ctx'>         }</div><div class='add'>+        pthread_spin_unlock(&amp;(priv-&gt;lock));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CS_STACK_DESTROY (frame);</div><div class='add'>+    CS_STACK_DESTROY(frame);</div><div class='ctx'> </div><div class='del'>-        return op_ret;</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> size_t</div><div class='del'>-aws_write_callback (void *dlbuf, size_t size, size_t nitems, void *mainframe)</div><div class='add'>+aws_write_callback(void *dlbuf, size_t size, size_t nitems, void *mainframe)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t            *frame = NULL;</div><div class='del'>-        fd_t                    *dlfd = NULL;</div><div class='del'>-        int                      ret = 0;</div><div class='del'>-        cs_local_t              *local = NULL;</div><div class='del'>-        struct iovec             iov = {0,};</div><div class='del'>-        struct iobref           *iobref = NULL;</div><div class='del'>-        struct iobuf            *iobuf = NULL;</div><div class='del'>-        struct iovec             dliov = {0, };</div><div class='del'>-        size_t                   tsize = 0;</div><div class='del'>-        xlator_t                *this = NULL;</div><div class='del'>-        cs_private_t            *xl_priv = NULL;</div><div class='del'>-        aws_private_t           *priv = NULL;</div><div class='del'>-        call_frame_t            *dlframe = NULL;</div><div class='del'>-</div><div class='del'>-        frame = (call_frame_t *)mainframe;</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-        xl_priv = this-&gt;private;</div><div class='del'>-        priv = xl_priv-&gt;stores-&gt;config;</div><div class='del'>-</div><div class='del'>-        pthread_spin_lock (&amp;(priv-&gt;lock));</div><div class='del'>-        {</div><div class='del'>-                /* returning size other than the size passed from curl will</div><div class='del'>-                 * abort further download*/</div><div class='del'>-                if (priv-&gt;abortdl) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "aborting download");</div><div class='del'>-                        pthread_spin_unlock (&amp;(priv-&gt;lock));</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    fd_t *dlfd = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    struct iovec iov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iobref *iobref = NULL;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='add'>+    struct iovec dliov = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t tsize = 0;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    cs_private_t *xl_priv = NULL;</div><div class='add'>+    aws_private_t *priv = NULL;</div><div class='add'>+    call_frame_t *dlframe = NULL;</div><div class='add'>+</div><div class='add'>+    frame = (call_frame_t *)mainframe;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    xl_priv = this-&gt;private;</div><div class='add'>+    priv = xl_priv-&gt;stores-&gt;config;</div><div class='add'>+</div><div class='add'>+    pthread_spin_lock(&amp;(priv-&gt;lock));</div><div class='add'>+    {</div><div class='add'>+        /* returning size other than the size passed from curl will</div><div class='add'>+         * abort further download*/</div><div class='add'>+        if (priv-&gt;abortdl) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "aborting download");</div><div class='add'>+            pthread_spin_unlock(&amp;(priv-&gt;lock));</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-        pthread_spin_unlock (&amp;(priv-&gt;lock));</div><div class='add'>+    }</div><div class='add'>+    pthread_spin_unlock(&amp;(priv-&gt;lock));</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        dlfd = local-&gt;dlfd;</div><div class='del'>-        tsize = size * nitems;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    dlfd = local-&gt;dlfd;</div><div class='add'>+    tsize = size * nitems;</div><div class='ctx'> </div><div class='del'>-        dliov.iov_base = (void *)dlbuf;</div><div class='del'>-        dliov.iov_len = tsize;</div><div class='add'>+    dliov.iov_base = (void *)dlbuf;</div><div class='add'>+    dliov.iov_len = tsize;</div><div class='ctx'> </div><div class='del'>-        ret = iobuf_copy (this-&gt;ctx-&gt;iobuf_pool, &amp;dliov, 1, &amp;iobref, &amp;iobuf,</div><div class='del'>-                          &amp;iov);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "iobuf_copy failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = iobuf_copy(this-&gt;ctx-&gt;iobuf_pool, &amp;dliov, 1, &amp;iobref, &amp;iobuf, &amp;iov);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "iobuf_copy failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* copy frame */</div><div class='del'>-        dlframe = copy_frame (frame);</div><div class='del'>-        if (!dlframe) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "copy_frame failed");</div><div class='del'>-                tsize = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* copy frame */</div><div class='add'>+    dlframe = copy_frame(frame);</div><div class='add'>+    if (!dlframe) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "copy_frame failed");</div><div class='add'>+        tsize = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (dlframe, aws_dlwritev_cbk,  FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;writev, dlfd,</div><div class='del'>-                    &amp;iov, 1, local-&gt;dloffset, 0, iobref, NULL);</div><div class='add'>+    STACK_WIND(dlframe, aws_dlwritev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, dlfd, &amp;iov, 1, local-&gt;dloffset,</div><div class='add'>+               0, iobref, NULL);</div><div class='ctx'> </div><div class='del'>-        local-&gt;dloffset += tsize;</div><div class='add'>+    local-&gt;dloffset += tsize;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (iobuf)</div><div class='del'>-                iobuf_unref (iobuf);</div><div class='del'>-        if (iobref)</div><div class='del'>-                iobref_unref (iobref);</div><div class='add'>+    if (iobuf)</div><div class='add'>+        iobuf_unref(iobuf);</div><div class='add'>+    if (iobref)</div><div class='add'>+        iobref_unref(iobref);</div><div class='ctx'> </div><div class='del'>-        return tsize;</div><div class='add'>+    return tsize;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-aws_download_s3 (call_frame_t *frame, void *config)</div><div class='add'>+aws_download_s3(call_frame_t *frame, void *config)</div><div class='ctx'> {</div><div class='del'>-        char                   *buf;</div><div class='del'>-        int                     bufsize = -1;</div><div class='del'>-        CURL                   *handle = NULL;</div><div class='del'>-        struct curl_slist      *slist = NULL;</div><div class='del'>-        struct curl_slist      *tmp = NULL;</div><div class='del'>-        xlator_t               *this = NULL;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        int                     debug = 1;</div><div class='del'>-        CURLcode                res;</div><div class='del'>-        char                    errbuf[CURL_ERROR_SIZE];</div><div class='del'>-        size_t                  len = 0;</div><div class='del'>-        long                    responsecode;</div><div class='del'>-        char                    *sign_req       = NULL;</div><div class='del'>-        char                    *date           = NULL;</div><div class='del'>-        char                    *const reqtype  = "GET";</div><div class='del'>-        char                    *signature      = NULL;</div><div class='del'>-        cs_local_t              *local          = NULL;</div><div class='del'>-        char                    resource[RESOURCE_SIZE] = {0,};</div><div class='del'>-        aws_private_t           *priv           = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        priv = (aws_private_t *)config;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;bucketid || !priv-&gt;hostname || !priv-&gt;awssekey ||</div><div class='del'>-            !priv-&gt;awskeyid) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        sign_req = aws_form_request (resource, &amp;date, reqtype, priv-&gt;bucketid,</div><div class='del'>-                                    local-&gt;remotepath);</div><div class='del'>-        if (!sign_req) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "null sign_req, "</div><div class='del'>-                        "aborting download");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    char *buf;</div><div class='add'>+    int bufsize = -1;</div><div class='add'>+    CURL *handle = NULL;</div><div class='add'>+    struct curl_slist *slist = NULL;</div><div class='add'>+    struct curl_slist *tmp = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int debug = 1;</div><div class='add'>+    CURLcode res;</div><div class='add'>+    char errbuf[CURL_ERROR_SIZE];</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    long responsecode;</div><div class='add'>+    char *sign_req = NULL;</div><div class='add'>+    char *date = NULL;</div><div class='add'>+    char *const reqtype = "GET";</div><div class='add'>+    char *signature = NULL;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    char resource[RESOURCE_SIZE] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    aws_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    priv = (aws_private_t *)config;</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;bucketid || !priv-&gt;hostname || !priv-&gt;awssekey ||</div><div class='add'>+        !priv-&gt;awskeyid) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    sign_req = aws_form_request(resource, &amp;date, reqtype, priv-&gt;bucketid,</div><div class='add'>+                                local-&gt;remotepath);</div><div class='add'>+    if (!sign_req) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "null sign_req, "</div><div class='add'>+               "aborting download");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug("CS", 0, "sign_req %s date %s", sign_req, date);</div><div class='add'>+</div><div class='add'>+    signature = aws_sign_request(sign_req, priv-&gt;awssekey);</div><div class='add'>+    if (!signature) {</div><div class='add'>+        gf_msg("CS", GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "null signature, "</div><div class='add'>+               "aborting download");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    handle = curl_easy_init();</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    /* special numbers 6, 20, 10 accounts for static characters in the</div><div class='add'>+     * below snprintf string format arguments*/</div><div class='add'>+    bufsize = strlen(date) + 6 + strlen(priv-&gt;awskeyid) + strlen(signature) +</div><div class='add'>+              20 + strlen(priv-&gt;hostname) + 10;</div><div class='add'>+</div><div class='add'>+    buf = (char *)alloca(bufsize);</div><div class='add'>+    if (!buf) {</div><div class='add'>+        gf_msg("CS", GF_LOG_ERROR, ENOMEM, 0,</div><div class='add'>+               "mem allocation "</div><div class='add'>+               "failed for buf");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(buf, bufsize, "Date: %s", date);</div><div class='add'>+    slist = curl_slist_append(slist, buf);</div><div class='add'>+    snprintf(buf, bufsize, "Authorization: AWS %s:%s", priv-&gt;awskeyid,</div><div class='add'>+             signature);</div><div class='add'>+    slist = curl_slist_append(slist, buf);</div><div class='add'>+    snprintf(buf, bufsize, "https://%s/%s", priv-&gt;hostname, resource);</div><div class='add'>+</div><div class='add'>+    if (gf_log_get_loglevel() &gt;= GF_LOG_DEBUG) {</div><div class='add'>+        tmp = slist;</div><div class='add'>+        while (tmp) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "slist for curl - %s", tmp-&gt;data);</div><div class='add'>+            tmp = tmp-&gt;next;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug ("CS", 0, "sign_req %s date %s", sign_req, date);</div><div class='del'>-</div><div class='del'>-        signature = aws_sign_request (sign_req, priv-&gt;awssekey);</div><div class='del'>-        if (!signature) {</div><div class='del'>-                gf_msg ("CS", GF_LOG_ERROR, 0, 0, "null signature, "</div><div class='del'>-                        "aborting download");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);</div><div class='add'>+    curl_easy_setopt(handle, CURLOPT_URL, buf);</div><div class='add'>+    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, aws_write_callback);</div><div class='add'>+    curl_easy_setopt(handle, CURLOPT_WRITEDATA, frame);</div><div class='add'>+    curl_easy_setopt(handle, CURLOPT_VERBOSE, debug);</div><div class='add'>+    curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errbuf);</div><div class='add'>+</div><div class='add'>+    res = curl_easy_perform(handle);</div><div class='add'>+    if (res != CURLE_OK) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "download failed. err: %s\n",</div><div class='add'>+               curl_easy_strerror(res));</div><div class='add'>+        ret = -1;</div><div class='add'>+        len = strlen(errbuf);</div><div class='add'>+        if (len) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "curl failure %s", errbuf);</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "curl error "</div><div class='add'>+                   "%s\n",</div><div class='add'>+                   curl_easy_strerror(res));</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        handle = curl_easy_init();</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        /* special numbers 6, 20, 10 accounts for static characters in the</div><div class='del'>-         * below snprintf string format arguments*/</div><div class='del'>-        bufsize = strlen(date) + 6 + strlen(priv-&gt;awskeyid) + strlen(signature)</div><div class='del'>-                  + 20 + strlen(priv-&gt;hostname) + 10;</div><div class='del'>-</div><div class='del'>-        buf = (char *)alloca(bufsize);</div><div class='del'>-        if (!buf) {</div><div class='del'>-                gf_msg ("CS", GF_LOG_ERROR, ENOMEM, 0, "mem allocation "</div><div class='del'>-                        "failed for buf");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (res == CURLE_OK) {</div><div class='add'>+        curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &amp;responsecode);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "response code %ld", responsecode);</div><div class='add'>+        if (responsecode != 200) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "curl download failed");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (buf, bufsize, "Date: %s", date);</div><div class='del'>-        slist = curl_slist_append(slist, buf);</div><div class='del'>-        snprintf (buf, bufsize, "Authorization: AWS %s:%s", priv-&gt;awskeyid,</div><div class='del'>-                  signature);</div><div class='del'>-        slist = curl_slist_append(slist, buf);</div><div class='del'>-        snprintf(buf, bufsize, "https://%s/%s", priv-&gt;hostname, resource);</div><div class='del'>-</div><div class='del'>-        if (gf_log_get_loglevel () &gt;= GF_LOG_DEBUG) {</div><div class='del'>-                tmp = slist;</div><div class='del'>-                while (tmp) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "slist for curl - %s",</div><div class='del'>-                                      tmp-&gt;data);</div><div class='del'>-                        tmp = tmp-&gt;next;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        curl_easy_setopt (handle, CURLOPT_HTTPHEADER, slist);</div><div class='del'>-        curl_easy_setopt (handle, CURLOPT_URL, buf);</div><div class='del'>-        curl_easy_setopt (handle, CURLOPT_WRITEFUNCTION, aws_write_callback);</div><div class='del'>-        curl_easy_setopt (handle, CURLOPT_WRITEDATA, frame);</div><div class='del'>-        curl_easy_setopt (handle, CURLOPT_VERBOSE, debug);</div><div class='del'>-        curl_easy_setopt (handle, CURLOPT_ERRORBUFFER, errbuf);</div><div class='del'>-</div><div class='del'>-        res = curl_easy_perform(handle);</div><div class='del'>-        if (res != CURLE_OK) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "download failed. err: %s\n", curl_easy_strerror(res));</div><div class='del'>-                ret = -1;</div><div class='del'>-                len = strlen(errbuf);</div><div class='del'>-                if (len) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "curl failure %s", errbuf);</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "curl error "</div><div class='del'>-                                "%s\n", curl_easy_strerror(res));</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (res == CURLE_OK) {</div><div class='del'>-                curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE,</div><div class='del'>-                                   &amp;responsecode);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "response code %ld", responsecode);</div><div class='del'>-                if (responsecode != 200) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "curl download failed");</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        curl_slist_free_all(slist);</div><div class='del'>-        curl_easy_cleanup(handle);</div><div class='add'>+    curl_slist_free_all(slist);</div><div class='add'>+    curl_easy_cleanup(handle);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (sign_req)</div><div class='del'>-                GF_FREE (sign_req);</div><div class='del'>-        if (date)</div><div class='del'>-                GF_FREE (date);</div><div class='del'>-        if (signature)</div><div class='del'>-                GF_FREE (signature);</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    if (sign_req)</div><div class='add'>+        GF_FREE(sign_req);</div><div class='add'>+    if (date)</div><div class='add'>+        GF_FREE(date);</div><div class='add'>+    if (signature)</div><div class='add'>+        GF_FREE(signature);</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct volume_options cs_options[] = {</div><div class='del'>-        { .key        = {"s3plugin-seckey"},</div><div class='del'>-          .type       =  GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "aws secret key"</div><div class='del'>-        },</div><div class='del'>-        { .key        = {"s3plugin-keyid"},</div><div class='del'>-          .type       =  GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "aws key ID"</div><div class='del'>-</div><div class='del'>-        },</div><div class='del'>-        { .key        = {"s3plugin-bucketid"},</div><div class='del'>-          .type       =  GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "aws bucketid"</div><div class='del'>-        },</div><div class='del'>-        { .key        = {"s3plugin-hostname"},</div><div class='del'>-          .type       =  GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "aws hostname e.g. s3.amazonaws.com"</div><div class='del'>-        },</div><div class='del'>-        { .key         = {NULL} },</div><div class='add'>+    {.key = {"s3plugin-seckey"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "aws secret key"},</div><div class='add'>+    {.key = {"s3plugin-keyid"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "aws key ID"</div><div class='add'>+</div><div class='add'>+    },</div><div class='add'>+    {.key = {"s3plugin-bucketid"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "aws bucketid"},</div><div class='add'>+    {.key = {"s3plugin-hostname"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "aws hostname e.g. s3.amazonaws.com"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/cloudsync/src/cloudsync.c b/xlators/features/cloudsync/src/cloudsync.c<br/>index 3e1cd6a7111..00437aaf80c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/cloudsync/src/cloudsync.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/cloudsync/src/cloudsync.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/cloudsync/src/cloudsync.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/cloudsync/src/cloudsync.c</a></div><div class='hunk'>@@ -19,1713 +19,1647 @@</div><div class='ctx'> #include &lt;dlfcn.h&gt;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cs_cleanup_private (cs_private_t *priv)</div><div class='add'>+cs_cleanup_private(cs_private_t *priv)</div><div class='ctx'> {</div><div class='del'>-        if (priv) {</div><div class='del'>-                if (priv-&gt;stores) {</div><div class='del'>-                        priv-&gt;stores-&gt;fini (priv-&gt;stores-&gt;config);</div><div class='del'>-                        GF_FREE (priv-&gt;stores);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                pthread_spin_destroy (&amp;priv-&gt;lock);</div><div class='del'>-                GF_FREE (priv);</div><div class='add'>+    if (priv) {</div><div class='add'>+        if (priv-&gt;stores) {</div><div class='add'>+            priv-&gt;stores-&gt;fini(priv-&gt;stores-&gt;config);</div><div class='add'>+            GF_FREE(priv-&gt;stores);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+        pthread_spin_destroy(&amp;priv-&gt;lock);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct cs_plugin plugins[] = {</div><div class='del'>-        {</div><div class='del'>-          .name = "cloudsyncs3",</div><div class='del'>-          .library = "cloudsyncs3.so",</div><div class='del'>-          .description = "cloudsync s3 store."</div><div class='del'>-        },</div><div class='add'>+    {.name = "cloudsyncs3",</div><div class='add'>+     .library = "cloudsyncs3.so",</div><div class='add'>+     .description = "cloudsync s3 store."},</div><div class='ctx'> </div><div class='del'>-        {.name = NULL},</div><div class='add'>+    {.name = NULL},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_init (xlator_t *this)</div><div class='add'>+cs_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        cs_private_t            *priv = NULL;</div><div class='del'>-        gf_boolean_t            per_vol = _gf_false;</div><div class='del'>-        int                     ret = 0;</div><div class='del'>-        char                    *libpath = NULL;</div><div class='del'>-        store_methods_t         *store_methods = NULL;</div><div class='del'>-        void                    *handle = NULL;</div><div class='del'>-        char                    *temp_str = NULL;</div><div class='del'>-        int                      index = 0;</div><div class='del'>-        char                    *libname = NULL;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_cs_mt_cs_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='del'>-                goto out;</div><div class='add'>+    cs_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t per_vol = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *libpath = NULL;</div><div class='add'>+    store_methods_t *store_methods = NULL;</div><div class='add'>+    void *handle = NULL;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    int index = 0;</div><div class='add'>+    char *libname = NULL;</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_cs_mt_cs_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;this = this;</div><div class='add'>+</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(cs_local_t, 512);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, ENOMEM, "initialisation failed.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+</div><div class='add'>+    /* temp workaround. Should be configurable through glusterd*/</div><div class='add'>+    per_vol = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (per_vol) {</div><div class='add'>+        if (dict_get_str(this-&gt;options, "cloudsync-storetype", &amp;temp_str) ==</div><div class='add'>+            0) {</div><div class='add'>+            for (index = 0; plugins[index].name; index++) {</div><div class='add'>+                if (!strcmp(temp_str, plugins[index].name)) {</div><div class='add'>+                    libname = plugins[index].library;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        priv-&gt;this = this;</div><div class='del'>-</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (cs_local_t, 512);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, ENOMEM,</div><div class='del'>-                        "initialisation failed.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+        if (!libname) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0, "no plugin enabled");</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-</div><div class='del'>-        /* temp workaround. Should be configurable through glusterd*/</div><div class='del'>-        per_vol = _gf_true;</div><div class='del'>-</div><div class='del'>-        if (per_vol) {</div><div class='del'>-                if (dict_get_str (this-&gt;options, "cloudsync-storetype",</div><div class='del'>-                    &amp;temp_str) == 0) {</div><div class='del'>-                        for (index = 0; plugins[index].name; index++) {</div><div class='del'>-                                if (!strcmp (temp_str, plugins[index].name)) {</div><div class='del'>-                                        libname = plugins[index].library;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!libname) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='del'>-                                "no plugin enabled");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = gf_asprintf (&amp;libpath, "%s/%s", CS_PLUGINDIR, libname);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                handle = dlopen (libpath, RTLD_NOW);</div><div class='del'>-                if (!handle) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0, 0, "could not "</div><div class='del'>-                                "load the required library. %s", dlerror ());</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='del'>-                                "loading library:%s successful", libname);</div><div class='del'>-                }</div><div class='add'>+        ret = gf_asprintf(&amp;libpath, "%s/%s", CS_PLUGINDIR, libname);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='add'>+        handle = dlopen(libpath, RTLD_NOW);</div><div class='add'>+        if (!handle) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='add'>+                   "could not "</div><div class='add'>+                   "load the required library. %s",</div><div class='add'>+                   dlerror());</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+                   "loading library:%s successful", libname);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                priv-&gt;stores = GF_CALLOC (1, sizeof (struct cs_remote_stores),</div><div class='del'>-                                          gf_cs_mt_cs_remote_stores_t);</div><div class='del'>-                if (!priv-&gt;stores) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "Could not "</div><div class='del'>-                                "allocate memory for priv-&gt;stores");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        priv-&gt;stores = GF_CALLOC(1, sizeof(struct cs_remote_stores),</div><div class='add'>+                                 gf_cs_mt_cs_remote_stores_t);</div><div class='add'>+        if (!priv-&gt;stores) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "Could not "</div><div class='add'>+                   "allocate memory for priv-&gt;stores");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                (void) dlerror (); /* clear out previous error string */</div><div class='add'>+        (void)dlerror(); /* clear out previous error string */</div><div class='ctx'> </div><div class='del'>-                /* load library methods */</div><div class='del'>-                store_methods = (store_methods_t *) dlsym (handle, "store_ops");</div><div class='del'>-                if (!store_methods) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "null store_methods %s", dlerror ());</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        /* load library methods */</div><div class='add'>+        store_methods = (store_methods_t *)dlsym(handle, "store_ops");</div><div class='add'>+        if (!store_methods) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "null store_methods %s",</div><div class='add'>+                   dlerror());</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                (void) dlerror ();</div><div class='add'>+        (void)dlerror();</div><div class='ctx'> </div><div class='del'>-                priv-&gt;stores-&gt;dlfop = store_methods-&gt;fop_download;</div><div class='del'>-                if (!priv-&gt;stores-&gt;dlfop) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "failed to get"</div><div class='del'>-                                " download fop %s", dlerror ());</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        priv-&gt;stores-&gt;dlfop = store_methods-&gt;fop_download;</div><div class='add'>+        if (!priv-&gt;stores-&gt;dlfop) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "failed to get"</div><div class='add'>+                   " download fop %s",</div><div class='add'>+                   dlerror());</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                (void) dlerror ();</div><div class='del'>-                priv-&gt;stores-&gt;init = store_methods-&gt;fop_init;</div><div class='del'>-                if (!priv-&gt;stores-&gt;init) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "failed to get"</div><div class='del'>-                                " init fop %s", dlerror ());</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        (void)dlerror();</div><div class='add'>+        priv-&gt;stores-&gt;init = store_methods-&gt;fop_init;</div><div class='add'>+        if (!priv-&gt;stores-&gt;init) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "failed to get"</div><div class='add'>+                   " init fop %s",</div><div class='add'>+                   dlerror());</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                (void) dlerror ();</div><div class='del'>-                priv-&gt;stores-&gt;reconfigure = store_methods-&gt;fop_reconfigure;</div><div class='del'>-                if (!priv-&gt;stores-&gt;reconfigure) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "failed to get"</div><div class='del'>-                                " reconfigure fop %s", dlerror ());</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        (void)dlerror();</div><div class='add'>+        priv-&gt;stores-&gt;reconfigure = store_methods-&gt;fop_reconfigure;</div><div class='add'>+        if (!priv-&gt;stores-&gt;reconfigure) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "failed to get"</div><div class='add'>+                   " reconfigure fop %s",</div><div class='add'>+                   dlerror());</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                priv-&gt;stores-&gt;handle = handle;</div><div class='add'>+        priv-&gt;stores-&gt;handle = handle;</div><div class='ctx'> </div><div class='del'>-                priv-&gt;stores-&gt;config = (void *) ((priv-&gt;stores-&gt;init) (this));</div><div class='del'>-                if (!priv-&gt;stores-&gt;config) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "null config");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        priv-&gt;stores-&gt;config = (void *)((priv-&gt;stores-&gt;init)(this));</div><div class='add'>+        if (!priv-&gt;stores-&gt;config) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "null config");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                if (this-&gt;local_pool)</div><div class='del'>-                        mem_pool_destroy (this-&gt;local_pool);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        if (this-&gt;local_pool)</div><div class='add'>+            mem_pool_destroy(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-                cs_cleanup_private (priv);</div><div class='add'>+        cs_cleanup_private(priv);</div><div class='ctx'> </div><div class='del'>-                if (handle) {</div><div class='del'>-                        dlclose (handle);</div><div class='del'>-                }</div><div class='add'>+        if (handle) {</div><div class='add'>+            dlclose(handle);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (libpath);</div><div class='add'>+    GF_FREE(libpath);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cs_fini (xlator_t *this)</div><div class='add'>+cs_fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        cs_private_t *priv = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    cs_private_t *priv = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        cs_cleanup_private (priv);</div><div class='add'>+    cs_cleanup_private(priv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+cs_reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        cs_private_t    *priv = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='add'>+    cs_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* needed only for per volume configuration*/</div><div class='del'>-        ret = priv-&gt;stores-&gt;reconfigure (this, options);</div><div class='add'>+    /* needed only for per volume configuration*/</div><div class='add'>+    ret = priv-&gt;stores-&gt;reconfigure(this, options);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_mem_acct_init (xlator_t *this)</div><div class='add'>+cs_mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cloudsync", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cloudsync", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_cs_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_cs_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "Memory accounting init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='del'>-out:</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "Memory accounting init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+cs_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t *tmp = NULL;</div><div class='del'>-        char        *sxattr = NULL;</div><div class='del'>-        uint64_t     ia_size = 0;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (tmp, &amp;entries-&gt;list, list) {</div><div class='del'>-                ret = dict_get_str (tmp-&gt;dict, GF_CS_OBJECT_SIZE, &amp;sxattr);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0, "size xattr found");</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ia_size = atoll (sxattr);</div><div class='del'>-                tmp-&gt;d_stat.ia_size = ia_size;</div><div class='add'>+    gf_dirent_t *tmp = NULL;</div><div class='add'>+    char *sxattr = NULL;</div><div class='add'>+    uint64_t ia_size = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(tmp, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        ret = dict_get_str(tmp-&gt;dict, GF_CS_OBJECT_SIZE, &amp;sxattr);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0, "size xattr found");</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno,</div><div class='del'>-                             entries, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        ia_size = atoll(sxattr);</div><div class='add'>+        tmp-&gt;d_stat.ia_size = ia_size;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-             off_t off, dict_t *xdata)</div><div class='add'>+cs_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='ctx'>         if (!xdata) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-                if (!xdata) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, GF_CS_OBJECT_SIZE, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(xdata, GF_CS_OBJECT_SIZE, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, cs_readdirp_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-                    fd, size, off, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cs_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, -1, op_errno,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                 struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+cs_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        uint64_t         val = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        /* Do we need lock here? */</div><div class='del'>-        local-&gt;call_cnt++;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "truncate failed");</div><div class='del'>-                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        if (val == GF_CS_ERROR) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "could not get file state, unwinding");</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                op_errno = EIO;</div><div class='del'>-                                goto unwind;</div><div class='del'>-                        } else {</div><div class='del'>-                                __cs_inode_ctx_update (this, local-&gt;loc.inode,</div><div class='del'>-                                                       val);</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='del'>-                                        " state = %ld", val);</div><div class='del'>-</div><div class='del'>-                                if (local-&gt;call_cnt == 1 &amp;&amp;</div><div class='del'>-                                    (val == GF_CS_REMOTE ||</div><div class='del'>-                                     val == GF_CS_DOWNLOADING))  {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                                0, "will repair and download "</div><div class='del'>-                                                "the file, current state : %ld",</div><div class='del'>-                                                val);</div><div class='del'>-                                        goto repair;</div><div class='del'>-                                } else {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                                "second truncate, Unwinding");</div><div class='del'>-                                        goto unwind;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    /* Do we need lock here? */</div><div class='add'>+    local-&gt;call_cnt++;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "truncate failed");</div><div class='add'>+        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            if (val == GF_CS_ERROR) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                       "could not get file state, unwinding");</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = EIO;</div><div class='add'>+                goto unwind;</div><div class='add'>+            } else {</div><div class='add'>+                __cs_inode_ctx_update(this, local-&gt;loc.inode, val);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0, " state = %ld", val);</div><div class='add'>+</div><div class='add'>+                if (local-&gt;call_cnt == 1 &amp;&amp;</div><div class='add'>+                    (val == GF_CS_REMOTE || val == GF_CS_DOWNLOADING)) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='add'>+                           "will repair and download "</div><div class='add'>+                           "the file, current state : %ld",</div><div class='add'>+                           val);</div><div class='add'>+                    goto repair;</div><div class='ctx'>                 } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "file state "</div><div class='del'>-                                "could not be figured, unwinding");</div><div class='del'>-                        goto unwind;</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                           "second truncate, Unwinding");</div><div class='add'>+                    goto unwind;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                /* successful write =&gt; file is local */</div><div class='del'>-                __cs_inode_ctx_update (this, local-&gt;loc.inode, GF_CS_LOCAL);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "state : GF_CS_LOCAL"</div><div class='del'>-                        ", truncate successful");</div><div class='del'>-</div><div class='del'>-                goto unwind;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "file state "</div><div class='add'>+                   "could not be figured, unwinding");</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        /* successful write =&gt; file is local */</div><div class='add'>+        __cs_inode_ctx_update(this, local-&gt;loc.inode, GF_CS_LOCAL);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "state : GF_CS_LOCAL"</div><div class='add'>+               ", truncate successful");</div><div class='add'>+</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> repair:</div><div class='del'>-        ret = locate_and_execute (frame);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    ret = locate_and_execute(frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        CS_STACK_UNWIND (truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                         xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(truncate, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+cs_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int                     op_errno        = -1;</div><div class='del'>-        cs_local_t             *local           = NULL;</div><div class='del'>-        int                     ret             = 0;</div><div class='del'>-        cs_inode_ctx_t         *ctx             = NULL;</div><div class='del'>-        gf_cs_obj_state            state           = -1;</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-        VALIDATE_OR_GOTO (loc, err);</div><div class='del'>-</div><div class='del'>-        local = cs_local_init (this, frame, loc, NULL, GF_FOP_TRUNCATE);</div><div class='del'>-        if (!local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "local init failed");</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __cs_inode_ctx_get (this, loc-&gt;inode, &amp;ctx);</div><div class='del'>-</div><div class='del'>-        if (ctx)</div><div class='del'>-                state = __cs_get_file_state (this, loc-&gt;inode, ctx);</div><div class='del'>-        else</div><div class='del'>-                state = GF_CS_LOCAL;</div><div class='del'>-</div><div class='del'>-        local-&gt;xattr_req = xdata ? dict_ref (xdata) : (xdata = dict_new ());</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='add'>+    int op_errno = -1;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    cs_inode_ctx_t *ctx = NULL;</div><div class='add'>+    gf_cs_obj_state state = -1;</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='add'>+    VALIDATE_OR_GOTO(loc, err);</div><div class='add'>+</div><div class='add'>+    local = cs_local_init(this, frame, loc, NULL, GF_FOP_TRUNCATE);</div><div class='add'>+    if (!local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "local init failed");</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __cs_inode_ctx_get(this, loc-&gt;inode, &amp;ctx);</div><div class='add'>+</div><div class='add'>+    if (ctx)</div><div class='add'>+        state = __cs_get_file_state(this, loc-&gt;inode, ctx);</div><div class='add'>+    else</div><div class='add'>+        state = GF_CS_LOCAL;</div><div class='add'>+</div><div class='add'>+    local-&gt;xattr_req = xdata ? dict_ref(xdata) : (xdata = dict_new());</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "dict_set failed key:"</div><div class='add'>+               " %s",</div><div class='add'>+               GF_CS_OBJECT_STATUS);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;stub = fop_truncate_stub(frame, cs_resume_truncate, loc, offset,</div><div class='add'>+                                    xdata);</div><div class='add'>+    if (!local-&gt;stub) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (state == GF_CS_LOCAL) {</div><div class='add'>+        STACK_WIND(frame, cs_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+</div><div class='add'>+    } else {</div><div class='add'>+        local-&gt;call_cnt++;</div><div class='add'>+        ret = locate_and_execute(frame);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed key:"</div><div class='del'>-                        " %s", GF_CS_OBJECT_STATUS);</div><div class='del'>-                goto err;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;stub = fop_truncate_stub (frame, cs_resume_truncate, loc, offset,</div><div class='del'>-                                         xdata);</div><div class='del'>-        if (!local-&gt;stub) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (state == GF_CS_LOCAL) {</div><div class='del'>-                STACK_WIND (frame, cs_truncate_cbk,</div><div class='del'>-                            FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='del'>-                            loc, offset, xdata);</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-                local-&gt;call_cnt++;</div><div class='del'>-                ret = locate_and_execute (frame);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        CS_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (statfs, frame, op_ret, op_errno,</div><div class='del'>-                             buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_statfs (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        loc_t *loc,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, cs_statfs_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;statfs,</div><div class='del'>-                    loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cs_statfs_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno,</div><div class='del'>-                             dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        loc_t *loc,</div><div class='del'>-        const char *name,</div><div class='del'>-        dict_t *xattr_req)</div><div class='add'>+cs_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,</div><div class='add'>+            dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, cs_getxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-                    loc, name, xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cs_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+cs_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;locked)</div><div class='del'>-                cs_inodelk_unlock (frame);</div><div class='add'>+    if (local-&gt;locked)</div><div class='add'>+        cs_inodelk_unlock(frame);</div><div class='ctx'> </div><div class='del'>-        CS_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    CS_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='del'>-             int32_t flags, dict_t *xdata)</div><div class='add'>+cs_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+            int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        data_t          *tmp = NULL;</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='add'>+    data_t *tmp = NULL;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        VALIDATE_OR_GOTO (frame, err);</div><div class='del'>-        VALIDATE_OR_GOTO (this, err);</div><div class='del'>-</div><div class='del'>-        local = cs_local_init (this, frame, loc, NULL, GF_FOP_SETXATTR);</div><div class='del'>-        if (!local) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    VALIDATE_OR_GOTO(frame, err);</div><div class='add'>+    VALIDATE_OR_GOTO(this, err);</div><div class='ctx'> </div><div class='del'>-        local-&gt;xattr_req = xdata ? dict_ref (xdata) : (xdata = dict_new ());</div><div class='add'>+    local = cs_local_init(this, frame, loc, NULL, GF_FOP_SETXATTR);</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        tmp = dict_get (dict, GF_CS_OBJECT_UPLOAD_COMPLETE);</div><div class='del'>-        if (tmp) {</div><div class='del'>-                /* Value of key should be the atime */</div><div class='del'>-                local-&gt;stub = fop_setxattr_stub (frame, cs_resume_setxattr,</div><div class='del'>-                                                 loc, dict, flags, xdata);</div><div class='add'>+    local-&gt;xattr_req = xdata ? dict_ref(xdata) : (xdata = dict_new());</div><div class='ctx'> </div><div class='del'>-                if (!local-&gt;stub)</div><div class='del'>-                        goto err;</div><div class='add'>+    tmp = dict_get(dict, GF_CS_OBJECT_UPLOAD_COMPLETE);</div><div class='add'>+    if (tmp) {</div><div class='add'>+        /* Value of key should be the atime */</div><div class='add'>+        local-&gt;stub = fop_setxattr_stub(frame, cs_resume_setxattr, loc, dict,</div><div class='add'>+                                        flags, xdata);</div><div class='ctx'> </div><div class='del'>-                ret = locate_and_execute (frame);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+        if (!local-&gt;stub)</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-                return 0;</div><div class='add'>+        ret = locate_and_execute(frame);</div><div class='add'>+        if (ret) {</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, cs_setxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, dict, flags, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, cs_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        CS_STACK_UNWIND (setxattr, frame, -1, errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(setxattr, frame, -1, errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno,</div><div class='del'>-                             dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+cs_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, cs_fgetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cs_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+cs_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fsetxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        fd_t *fd,</div><div class='del'>-        dict_t *dict,</div><div class='del'>-        int32_t flags,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+             int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, cs_fsetxattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cs_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-        struct iatt *postparent,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_unlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        loc_t *loc,</div><div class='del'>-        int32_t flags,</div><div class='del'>-        dict_t *xattr_req)</div><div class='add'>+cs_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+          dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='del'>-</div><div class='del'>-        local = cs_local_init (this, frame, loc, NULL, GF_FOP_UNLINK);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        local-&gt;xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new ();</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed key:"</div><div class='del'>-                        " %s", GF_CS_OBJECT_STATUS);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        STACK_WIND (frame, cs_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, flags, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = cs_local_init(this, frame, loc, NULL, GF_FOP_UNLINK);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    local-&gt;xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new();</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "dict_set failed key:"</div><div class='add'>+               " %s",</div><div class='add'>+               GF_CS_OBJECT_STATUS);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, cs_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, flags, local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        CS_STACK_UNWIND (unlink, frame, -1, errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(unlink, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        uint64_t         val = 0;</div><div class='del'>-</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        ret = __cs_inode_ctx_update (this, fd-&gt;inode, val);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "ctx update failed");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                cs_inode_ctx_reset (this, fd-&gt;inode);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            ret = __cs_inode_ctx_update(this, fd-&gt;inode, val);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "ctx update failed");</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        cs_inode_ctx_reset(this, fd-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CS_STACK_UNWIND (open, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_open (call_frame_t *frame, xlator_t *this,</div><div class='del'>-        loc_t *loc,</div><div class='del'>-        int32_t flags,</div><div class='del'>-        fd_t *fd,</div><div class='del'>-        dict_t *xattr_req)</div><div class='add'>+cs_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+        fd_t *fd, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='del'>-</div><div class='del'>-        local = cs_local_init (this, frame, NULL, fd, GF_FOP_OPEN);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        local-&gt;xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new ();</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed key:"</div><div class='del'>-                        " %s", GF_CS_OBJECT_STATUS);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, cs_open_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-                    loc, flags, fd, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = cs_local_init(this, frame, NULL, fd, GF_FOP_OPEN);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    local-&gt;xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new();</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "dict_set failed key:"</div><div class='add'>+               " %s",</div><div class='add'>+               GF_CS_OBJECT_STATUS);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, cs_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        CS_STACK_UNWIND (open, frame, -1, errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(open, frame, -1, errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-        int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-        dict_t *xdata)</div><div class='add'>+cs_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        uint64_t         val = 0;</div><div class='del'>-        fd_t            *fd  = NULL;</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        fd = local-&gt;fd;</div><div class='del'>-</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='del'>-                if (!ret) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "state %ld", val);</div><div class='del'>-                        ret = __cs_inode_ctx_update (this, fd-&gt;inode, val);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "ctx update failed");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                cs_inode_ctx_reset (this, fd-&gt;inode);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    fd = local-&gt;fd;</div><div class='add'>+</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='add'>+        if (!ret) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "state %ld", val);</div><div class='add'>+            ret = __cs_inode_ctx_update(this, fd-&gt;inode, val);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "ctx update failed");</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        cs_inode_ctx_reset(this, fd-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        CS_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    CS_STACK_UNWIND(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr_req)</div><div class='add'>+cs_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = cs_local_init (this, frame, NULL, fd, GF_FOP_FSTAT);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='add'>+    local = cs_local_init(this, frame, NULL, fd, GF_FOP_FSTAT);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (fd-&gt;inode-&gt;ia_type == IA_IFDIR)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (fd-&gt;inode-&gt;ia_type == IA_IFDIR)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local-&gt;xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new ();</div><div class='add'>+    local-&gt;xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new();</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed key:"</div><div class='del'>-                        " %s", GF_CS_OBJECT_STATUS);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_uint32(local-&gt;xattr_req, GF_CS_OBJECT_STATUS, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "dict_set failed key:"</div><div class='add'>+               " %s",</div><div class='add'>+               GF_CS_OBJECT_STATUS);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, cs_fstat_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fstat,</div><div class='del'>-                    fd, local-&gt;xattr_req);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cs_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, local-&gt;xattr_req);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        CS_STACK_UNWIND (fstat, frame, -1, errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    CS_STACK_UNWIND(fstat, frame, -1, errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> cs_local_t *</div><div class='del'>-cs_local_init (xlator_t *this, call_frame_t *frame, loc_t *loc, fd_t *fd,</div><div class='del'>-               glusterfs_fop_t fop)</div><div class='add'>+cs_local_init(xlator_t *this, call_frame_t *frame, loc_t *loc, fd_t *fd,</div><div class='add'>+              glusterfs_fop_t fop)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (loc) {</div><div class='del'>-                ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (fd) {</div><div class='del'>-                local-&gt;fd = fd_ref (fd);</div><div class='del'>-        }</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;op_ret   = -1;</div><div class='del'>-        local-&gt;op_errno = EUCLEAN;</div><div class='del'>-        local-&gt;fop      = fop;</div><div class='del'>-        local-&gt;dloffset = 0;</div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;locked = _gf_false;</div><div class='del'>-        local-&gt;call_cnt = 0;</div><div class='add'>+    if (loc) {</div><div class='add'>+        ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd) {</div><div class='add'>+        local-&gt;fd = fd_ref(fd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;op_ret = -1;</div><div class='add'>+    local-&gt;op_errno = EUCLEAN;</div><div class='add'>+    local-&gt;fop = fop;</div><div class='add'>+    local-&gt;dloffset = 0;</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;locked = _gf_false;</div><div class='add'>+    local-&gt;call_cnt = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (local)</div><div class='del'>-                        mem_put (local);</div><div class='del'>-                local = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (local)</div><div class='add'>+            mem_put(local);</div><div class='add'>+        local = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_frame_t *</div><div class='del'>-cs_lock_frame (call_frame_t *parent_frame)</div><div class='add'>+cs_lock_frame(call_frame_t *parent_frame)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *lock_frame = NULL;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        lock_frame = copy_frame (parent_frame);</div><div class='add'>+    lock_frame = copy_frame(parent_frame);</div><div class='ctx'> </div><div class='del'>-        if (lock_frame == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (lock_frame == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        set_lk_owner_from_ptr (&amp;lock_frame-&gt;root-&gt;lk_owner, parent_frame-&gt;root);</div><div class='add'>+    set_lk_owner_from_ptr(&amp;lock_frame-&gt;root-&gt;lk_owner, parent_frame-&gt;root);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lock_frame;</div><div class='del'>-</div><div class='add'>+    return lock_frame;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cs_lock_wipe (call_frame_t *lock_frame)</div><div class='add'>+cs_lock_wipe(call_frame_t *lock_frame)</div><div class='ctx'> {</div><div class='del'>-        CS_STACK_DESTROY (lock_frame);</div><div class='add'>+    CS_STACK_DESTROY(lock_frame);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_inodelk_unlock_cbk (call_frame_t *frame, void *cookie,  xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+cs_inodelk_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        cs_lock_wipe (frame);</div><div class='add'>+    cs_lock_wipe(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_inodelk_unlock (call_frame_t *main_frame)</div><div class='add'>+cs_inodelk_unlock(call_frame_t *main_frame)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this   = NULL;</div><div class='del'>-        struct gf_flock  flock  = {0,};</div><div class='del'>-        call_frame_t    *lock_frame  = NULL;</div><div class='del'>-        cs_local_t      *lock_local  = NULL;</div><div class='del'>-        cs_local_t      *main_local  = NULL;</div><div class='del'>-        int              ret    = 0;</div><div class='del'>-</div><div class='del'>-        this = main_frame-&gt;this;</div><div class='del'>-        main_local = main_frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        lock_frame = cs_lock_frame (main_frame);</div><div class='del'>-        if (!lock_frame)</div><div class='del'>-                goto out;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    cs_local_t *lock_local = NULL;</div><div class='add'>+    cs_local_t *main_local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        lock_local = cs_local_init (this, lock_frame, NULL, NULL, 0);</div><div class='del'>-        if (!lock_local)</div><div class='del'>-                goto out;</div><div class='add'>+    this = main_frame-&gt;this;</div><div class='add'>+    main_local = main_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = cs_build_loc (&amp;lock_local-&gt;loc, main_frame);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    lock_frame = cs_lock_frame(main_frame);</div><div class='add'>+    if (!lock_frame)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        flock.l_type = F_UNLCK;</div><div class='add'>+    lock_local = cs_local_init(this, lock_frame, NULL, NULL, 0);</div><div class='add'>+    if (!lock_local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        main_local-&gt;locked = _gf_false;</div><div class='add'>+    ret = cs_build_loc(&amp;lock_local-&gt;loc, main_frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (lock_frame, cs_inodelk_unlock_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;inodelk, CS_LOCK_DOMAIN,</div><div class='del'>-                    &amp;lock_local-&gt;loc, F_SETLKW, &amp;flock, NULL);</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    main_local-&gt;locked = _gf_false;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(lock_frame, cs_inodelk_unlock_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;inodelk, CS_LOCK_DOMAIN,</div><div class='add'>+               &amp;lock_local-&gt;loc, F_SETLKW, &amp;flock, NULL);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "Stale lock would be found on"</div><div class='del'>-                " server");</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+           "Stale lock would be found on"</div><div class='add'>+           " server");</div><div class='ctx'> </div><div class='del'>-        if (lock_frame)</div><div class='del'>-                cs_lock_wipe (lock_frame);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        cs_lock_wipe(lock_frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-cs_download_task (void *arg)</div><div class='add'>+cs_download_task(void *arg)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *frame          = NULL;</div><div class='del'>-        xlator_t        *this           = NULL;</div><div class='del'>-        cs_private_t    *priv           = NULL;</div><div class='del'>-        int              ret            = -1;</div><div class='del'>-        char            *sign_req       = NULL;</div><div class='del'>-        fd_t            *fd             = NULL;</div><div class='del'>-        cs_local_t      *local          = NULL;</div><div class='del'>-        dict_t          *dict           = NULL;</div><div class='del'>-        int             *retval         = NULL;</div><div class='del'>-</div><div class='del'>-        frame = (call_frame_t *)arg;</div><div class='del'>-</div><div class='del'>-        this = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        retval = GF_CALLOC (1, sizeof(int), gf_common_mt_int);</div><div class='del'>-        if (!retval) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;stores) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "No remote store "</div><div class='del'>-                        "plugins found");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd)</div><div class='del'>-                fd = fd_anonymous (local-&gt;fd-&gt;inode);</div><div class='del'>-        else</div><div class='del'>-                fd = fd_anonymous (local-&gt;loc.inode);</div><div class='del'>-</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_msg ("CS", GF_LOG_ERROR, 0, 0, "fd creation failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    cs_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *sign_req = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    int *retval = NULL;</div><div class='add'>+</div><div class='add'>+    frame = (call_frame_t *)arg;</div><div class='add'>+</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    retval = GF_CALLOC(1, sizeof(int), gf_common_mt_int);</div><div class='add'>+    if (!retval) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "insufficient memory");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!priv-&gt;stores) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "No remote store "</div><div class='add'>+               "plugins found");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd = fd_anonymous(local-&gt;fd-&gt;inode);</div><div class='add'>+    else</div><div class='add'>+        fd = fd_anonymous(local-&gt;loc.inode);</div><div class='add'>+</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_msg("CS", GF_LOG_ERROR, 0, 0, "fd creation failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    local-&gt;dlfd = fd;</div><div class='add'>+    local-&gt;dloffset = 0;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, ENOMEM,</div><div class='add'>+               "failed to create "</div><div class='add'>+               "dict");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(dict, GF_CS_OBJECT_DOWNLOADING, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_fsetxattr(this, local-&gt;fd, dict, 0, NULL, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "fsetxattr failed "</div><div class='add'>+               "key %s",</div><div class='add'>+               GF_CS_OBJECT_DOWNLOADING);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    /*this calling method is for per volume setting */</div><div class='add'>+    ret = priv-&gt;stores-&gt;dlfop(frame, priv-&gt;stores-&gt;config);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "download failed"</div><div class='add'>+               ", remotepath: %s",</div><div class='add'>+               local-&gt;remotepath);</div><div class='add'>+</div><div class='add'>+        /*using dlfd as it is anonymous and have RDWR flag*/</div><div class='add'>+        ret = syncop_ftruncate(FIRST_CHILD(this), local-&gt;dlfd, 0, NULL, NULL,</div><div class='add'>+                               NULL, NULL);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, -ret, "ftruncate failed");</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "ftruncate succeed");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        local-&gt;dlfd = fd;</div><div class='del'>-        local-&gt;dloffset = 0;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, ENOMEM, "failed to create "</div><div class='del'>-                        "dict");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "download success, path"</div><div class='add'>+               " : %s",</div><div class='add'>+               local-&gt;remotepath);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_uint32 (dict, GF_CS_OBJECT_DOWNLOADING, 1);</div><div class='add'>+        ret = syncop_fremovexattr(this, local-&gt;fd, GF_CS_OBJECT_REMOTE, NULL,</div><div class='add'>+                                  NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, -ret,</div><div class='add'>+                   "removexattr failed, remotexattr");</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "fremovexattr success, "</div><div class='add'>+                         "path : %s",</div><div class='add'>+                         local-&gt;remotepath);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_fsetxattr (this, local-&gt;fd, dict, 0, NULL, NULL);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "fsetxattr failed "</div><div class='del'>-                        "key %s", GF_CS_OBJECT_DOWNLOADING);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /*this calling method is for per volume setting */</div><div class='del'>-        ret = priv-&gt;stores-&gt;dlfop (frame, priv-&gt;stores-&gt;config);</div><div class='add'>+        ret = syncop_fremovexattr(this, local-&gt;fd, GF_CS_OBJECT_DOWNLOADING,</div><div class='add'>+                                  NULL, NULL);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                 gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "download failed"</div><div class='del'>-                         ", remotepath: %s", local-&gt;remotepath);</div><div class='del'>-</div><div class='del'>-                 /*using dlfd as it is anonymous and have RDWR flag*/</div><div class='del'>-                 ret = syncop_ftruncate (FIRST_CHILD (this), local-&gt;dlfd, 0,</div><div class='del'>-                                         NULL, NULL, NULL, NULL);</div><div class='del'>-                 if (ret) {</div><div class='del'>-                         gf_msg (this-&gt;name, GF_LOG_ERROR, 0, -ret,</div><div class='del'>-                                 "ftruncate failed");</div><div class='del'>-                 } else {</div><div class='del'>-                         gf_msg_debug (this-&gt;name, 0, "ftruncate succeed");</div><div class='del'>-                 }</div><div class='del'>-</div><div class='del'>-                 ret = -1;</div><div class='del'>-                 goto out;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, -ret,</div><div class='add'>+                   "removexattr failed, downloading xattr, path %s",</div><div class='add'>+                   local-&gt;remotepath);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "download success, path"</div><div class='del'>-                        " : %s", local-&gt;remotepath);</div><div class='del'>-</div><div class='del'>-                ret = syncop_fremovexattr (this, local-&gt;fd,</div><div class='del'>-                                           GF_CS_OBJECT_REMOTE, NULL, NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, -ret,</div><div class='del'>-                                "removexattr failed, remotexattr");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "fremovexattr success, "</div><div class='del'>-                                      "path : %s", local-&gt;remotepath);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = syncop_fremovexattr (this, local-&gt;fd,</div><div class='del'>-                                           GF_CS_OBJECT_DOWNLOADING, NULL,</div><div class='del'>-                                           NULL);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, -ret,</div><div class='del'>-                                "removexattr failed, downloading xattr, path %s"</div><div class='del'>-                                , local-&gt;remotepath);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "fremovexattr success"</div><div class='del'>-                                      " path  %s", local-&gt;remotepath);</div><div class='del'>-                }</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "fremovexattr success"</div><div class='add'>+                         " path  %s",</div><div class='add'>+                         local-&gt;remotepath);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (sign_req);</div><div class='del'>-</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-</div><div class='del'>-        if (fd) {</div><div class='del'>-                fd_unref (fd);</div><div class='del'>-                local-&gt;dlfd = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (retval) {</div><div class='del'>-                *retval = ret;</div><div class='del'>-                pthread_exit (retval);</div><div class='del'>-        } else {</div><div class='del'>-                pthread_exit (&amp;ret);</div><div class='del'>-        }</div><div class='add'>+    GF_FREE(sign_req);</div><div class='add'>+</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+</div><div class='add'>+    if (fd) {</div><div class='add'>+        fd_unref(fd);</div><div class='add'>+        local-&gt;dlfd = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (retval) {</div><div class='add'>+        *retval = ret;</div><div class='add'>+        pthread_exit(retval);</div><div class='add'>+    } else {</div><div class='add'>+        pthread_exit(&amp;ret);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_download (call_frame_t *frame)</div><div class='add'>+cs_download(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int             *retval = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        pthread_t       dthread;</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        xlator_t        *this = NULL;</div><div class='add'>+    int *retval = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    pthread_t dthread;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        this = frame-&gt;this;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    this = frame-&gt;this;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;remotepath) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "remote path not"</div><div class='del'>-                        " available. Check posix logs to resolve");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!local-&gt;remotepath) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "remote path not"</div><div class='add'>+               " available. Check posix logs to resolve");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_thread_create (&amp;dthread, NULL, &amp;cs_download_task,</div><div class='del'>-                                (void *)frame, "downloadthread");</div><div class='add'>+    ret = gf_thread_create(&amp;dthread, NULL, &amp;cs_download_task, (void *)frame,</div><div class='add'>+                           "downloadthread");</div><div class='ctx'> </div><div class='del'>-        pthread_join (dthread, (void **)&amp;retval);</div><div class='add'>+    pthread_join(dthread, (void **)&amp;retval);</div><div class='ctx'> </div><div class='del'>-        ret = *retval;</div><div class='add'>+    ret = *retval;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (retval)</div><div class='del'>-                GF_FREE (retval);</div><div class='add'>+    if (retval)</div><div class='add'>+        GF_FREE(retval);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_stat_check_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *stbuf, dict_t *xdata)</div><div class='add'>+cs_stat_check_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *stbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        call_stub_t     *stub  = NULL;</div><div class='del'>-        char            *filepath = NULL;</div><div class='del'>-        int              ret = 0;</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        uint64_t         val = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                local-&gt;op_ret = op_ret;</div><div class='del'>-                local-&gt;op_errno = op_errno;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, op_errno,</div><div class='del'>-                        "stat check failed");</div><div class='del'>-                goto err;</div><div class='del'>-        } else {</div><div class='del'>-                if (local-&gt;fd)</div><div class='del'>-                        inode = local-&gt;fd-&gt;inode;</div><div class='del'>-                else</div><div class='del'>-                        inode = local-&gt;loc.inode;</div><div class='del'>-</div><div class='del'>-                if (!inode) {</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = EINVAL;</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "null inode "</div><div class='del'>-                                "returned");</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        if (val == GF_CS_ERROR) {</div><div class='del'>-                                cs_inode_ctx_reset (this, inode);</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                local-&gt;op_errno = EIO;</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "status = GF_CS_ERROR. failed to get "</div><div class='del'>-                                        " file state");</div><div class='del'>-                                goto err;</div><div class='del'>-                        } else {</div><div class='del'>-                                ret = __cs_inode_ctx_update (this, inode, val);</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0, "status : %lu",</div><div class='del'>-                                              val);</div><div class='del'>-                                if (ret) {</div><div class='del'>-                                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                                "ctx update failed");</div><div class='del'>-                                        local-&gt;op_ret = -1;</div><div class='del'>-                                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                        goto err;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "status not found in dict");</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = ENOMEM;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    char *filepath = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    uint64_t val = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        local-&gt;op_ret = op_ret;</div><div class='add'>+        local-&gt;op_errno = op_errno;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, op_errno, "stat check failed");</div><div class='add'>+        goto err;</div><div class='add'>+    } else {</div><div class='add'>+        if (local-&gt;fd)</div><div class='add'>+            inode = local-&gt;fd-&gt;inode;</div><div class='add'>+        else</div><div class='add'>+            inode = local-&gt;loc.inode;</div><div class='add'>+</div><div class='add'>+        if (!inode) {</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EINVAL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   "null inode "</div><div class='add'>+                   "returned");</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = dict_get_str (xdata, GF_CS_OBJECT_REMOTE, &amp;filepath);</div><div class='del'>-                if (filepath) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "filepath returned %s",</div><div class='del'>-                                      filepath);</div><div class='del'>-                        local-&gt;remotepath = gf_strdup (filepath);</div><div class='del'>-                        if (!local-&gt;remotepath) {</div><div class='del'>-                                local-&gt;op_ret = -1;</div><div class='del'>-                                local-&gt;op_errno = ENOMEM;</div><div class='del'>-                                goto err;</div><div class='del'>-                        }</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "NULL filepath");</div><div class='add'>+        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &amp;val);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            if (val == GF_CS_ERROR) {</div><div class='add'>+                cs_inode_ctx_reset(this, inode);</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = EIO;</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                       "status = GF_CS_ERROR. failed to get "</div><div class='add'>+                       " file state");</div><div class='add'>+                goto err;</div><div class='add'>+            } else {</div><div class='add'>+                ret = __cs_inode_ctx_update(this, inode, val);</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "status : %lu", val);</div><div class='add'>+                if (ret) {</div><div class='add'>+                    gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "ctx update failed");</div><div class='add'>+                    local-&gt;op_ret = -1;</div><div class='add'>+                    local-&gt;op_errno = ENOMEM;</div><div class='add'>+                    goto err;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "status not found in dict");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = ENOMEM;</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                local-&gt;op_ret = 0;</div><div class='del'>-                local-&gt;xattr_rsp = dict_ref (xdata);</div><div class='del'>-                memcpy (&amp;local-&gt;stbuf, stbuf, sizeof (struct iatt));</div><div class='add'>+        ret = dict_get_str(xdata, GF_CS_OBJECT_REMOTE, &amp;filepath);</div><div class='add'>+        if (filepath) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "filepath returned %s", filepath);</div><div class='add'>+            local-&gt;remotepath = gf_strdup(filepath);</div><div class='add'>+            if (!local-&gt;remotepath) {</div><div class='add'>+                local-&gt;op_ret = -1;</div><div class='add'>+                local-&gt;op_errno = ENOMEM;</div><div class='add'>+                goto err;</div><div class='add'>+            }</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "NULL filepath");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        stub = local-&gt;stub;</div><div class='del'>-        local-&gt;stub = NULL;</div><div class='del'>-        call_resume (stub);</div><div class='add'>+        local-&gt;op_ret = 0;</div><div class='add'>+        local-&gt;xattr_rsp = dict_ref(xdata);</div><div class='add'>+        memcpy(&amp;local-&gt;stbuf, stbuf, sizeof(struct iatt));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    stub = local-&gt;stub;</div><div class='add'>+    local-&gt;stub = NULL;</div><div class='add'>+    call_resume(stub);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        cs_inodelk_unlock (frame);</div><div class='add'>+    cs_inodelk_unlock(frame);</div><div class='ctx'> </div><div class='del'>-        cs_common_cbk (frame);</div><div class='add'>+    cs_common_cbk(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_do_stat_check (call_frame_t *main_frame)</div><div class='add'>+cs_do_stat_check(call_frame_t *main_frame)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t       *local  = NULL;</div><div class='del'>-        xlator_t         *this   = NULL;</div><div class='del'>-        int               ret   = 0;</div><div class='del'>-</div><div class='del'>-        local = main_frame-&gt;local;</div><div class='del'>-        this = main_frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint32 (local-&gt;xattr_req, GF_CS_OBJECT_REPAIR, 256);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                STACK_WIND (main_frame, cs_stat_check_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;fstat, local-&gt;fd,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND (main_frame, cs_stat_check_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;stat, &amp;local-&gt;loc,</div><div class='del'>-                            local-&gt;xattr_req);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = main_frame-&gt;local;</div><div class='add'>+    this = main_frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint32(local-&gt;xattr_req, GF_CS_OBJECT_REPAIR, 256);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "dict_set failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        STACK_WIND(main_frame, cs_stat_check_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;fstat, local-&gt;fd, local-&gt;xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND(main_frame, cs_stat_check_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;stat, &amp;local-&gt;loc,</div><div class='add'>+                   local-&gt;xattr_req);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        cs_inodelk_unlock (main_frame);</div><div class='add'>+    cs_inodelk_unlock(main_frame);</div><div class='ctx'> </div><div class='del'>-        cs_common_cbk (main_frame);</div><div class='add'>+    cs_common_cbk(main_frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-cs_common_cbk (call_frame_t *frame)</div><div class='add'>+cs_common_cbk(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        glusterfs_fop_t fop = -1;</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='add'>+    glusterfs_fop_t fop = -1;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        fop = local-&gt;fop;</div><div class='add'>+    fop = local-&gt;fop;</div><div class='ctx'> </div><div class='del'>-        /*Note: Only the failure case needs to be handled here. Since for</div><div class='del'>-         * successful stat check the fop will resume anyway. The unwind can</div><div class='del'>-         * happen from the fop_cbk and each cbk can unlock the inodelk in case</div><div class='del'>-         * a lock was taken before. The lock status can be stored in frame */</div><div class='add'>+    /*Note: Only the failure case needs to be handled here. Since for</div><div class='add'>+     * successful stat check the fop will resume anyway. The unwind can</div><div class='add'>+     * happen from the fop_cbk and each cbk can unlock the inodelk in case</div><div class='add'>+     * a lock was taken before. The lock status can be stored in frame */</div><div class='ctx'> </div><div class='del'>-        /* for failure case  */</div><div class='add'>+    /* for failure case  */</div><div class='ctx'> </div><div class='del'>-        /*TODO: add other fops*/</div><div class='del'>-        switch (fop) {</div><div class='add'>+    /*TODO: add other fops*/</div><div class='add'>+    switch (fop) {</div><div class='ctx'>         case GF_FOP_WRITE:</div><div class='del'>-                CS_STACK_UNWIND (writev, frame, local-&gt;op_ret,</div><div class='del'>-                                 local-&gt;op_errno, NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='add'>+            CS_STACK_UNWIND(writev, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                            NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_FOP_SETXATTR:</div><div class='del'>-                CS_STACK_UNWIND (setxattr, frame, local-&gt;op_ret,</div><div class='del'>-                                 local-&gt;op_errno, NULL);</div><div class='del'>-                break;</div><div class='add'>+            CS_STACK_UNWIND(setxattr, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            NULL);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_READ:</div><div class='del'>-                CS_STACK_UNWIND (readv, frame, local-&gt;op_ret,</div><div class='del'>-                                 local-&gt;op_errno, NULL, 0, NULL, NULL,</div><div class='del'>-                                 NULL);</div><div class='del'>-                break;</div><div class='add'>+            CS_STACK_UNWIND(readv, frame, local-&gt;op_ret, local-&gt;op_errno, NULL,</div><div class='add'>+                            0, NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'>         case GF_FOP_FTRUNCATE:</div><div class='del'>-                CS_STACK_UNWIND (ftruncate, frame, local-&gt;op_ret,</div><div class='del'>-                                 local-&gt;op_errno, NULL, NULL, NULL);</div><div class='del'>-                break;</div><div class='del'>-</div><div class='add'>+            CS_STACK_UNWIND(ftruncate, frame, local-&gt;op_ret, local-&gt;op_errno,</div><div class='add'>+                            NULL, NULL, NULL);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_blocking_inodelk_cbk (call_frame_t *lock_frame, void *cookie, xlator_t *this,</div><div class='del'>-                         int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+cs_blocking_inodelk_cbk(call_frame_t *lock_frame, void *cookie, xlator_t *this,</div><div class='add'>+                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *main_local = NULL;</div><div class='del'>-        call_frame_t    *main_frame = NULL;</div><div class='del'>-        cs_local_t      *lock_local = NULL;</div><div class='add'>+    cs_local_t *main_local = NULL;</div><div class='add'>+    call_frame_t *main_frame = NULL;</div><div class='add'>+    cs_local_t *lock_local = NULL;</div><div class='ctx'> </div><div class='del'>-        lock_local = lock_frame-&gt;local;</div><div class='add'>+    lock_local = lock_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        main_frame = lock_local-&gt;main_frame;</div><div class='del'>-        main_local = main_frame-&gt;local;</div><div class='add'>+    main_frame = lock_local-&gt;main_frame;</div><div class='add'>+    main_local = main_frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "inodelk failed");</div><div class='del'>-                main_local-&gt;op_errno = op_errno;</div><div class='del'>-                main_local-&gt;op_ret = op_ret;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "inodelk failed");</div><div class='add'>+        main_local-&gt;op_errno = op_errno;</div><div class='add'>+        main_local-&gt;op_ret = op_ret;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        main_local-&gt;locked = _gf_true;</div><div class='add'>+    main_local-&gt;locked = _gf_true;</div><div class='ctx'> </div><div class='del'>-        cs_lock_wipe (lock_frame);</div><div class='add'>+    cs_lock_wipe(lock_frame);</div><div class='ctx'> </div><div class='del'>-        cs_do_stat_check (main_frame);</div><div class='add'>+    cs_do_stat_check(main_frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        cs_common_cbk (main_frame);</div><div class='add'>+    cs_common_cbk(main_frame);</div><div class='ctx'> </div><div class='del'>-        cs_lock_wipe (lock_frame);</div><div class='add'>+    cs_lock_wipe(lock_frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_build_loc (loc_t *loc, call_frame_t *frame)</div><div class='add'>+cs_build_loc(loc_t *loc, call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local  = NULL;</div><div class='del'>-        int              ret    = -1;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd) {</div><div class='del'>-                loc-&gt;inode = inode_ref (local-&gt;fd-&gt;inode);</div><div class='del'>-                if (loc-&gt;inode) {</div><div class='del'>-                        gf_uuid_copy (loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (local-&gt;fd) {</div><div class='add'>+        loc-&gt;inode = inode_ref(local-&gt;fd-&gt;inode);</div><div class='add'>+        if (loc-&gt;inode) {</div><div class='add'>+            gf_uuid_copy(loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         } else {</div><div class='del'>-                loc-&gt;inode = inode_ref (local-&gt;loc.inode);</div><div class='del'>-                if (loc-&gt;inode) {</div><div class='del'>-                        gf_uuid_copy (loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        loc-&gt;inode = inode_ref(local-&gt;loc.inode);</div><div class='add'>+        if (loc-&gt;inode) {</div><div class='add'>+            gf_uuid_copy(loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_blocking_inodelk (call_frame_t *parent_frame)</div><div class='add'>+cs_blocking_inodelk(call_frame_t *parent_frame)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t    *lock_frame = NULL;</div><div class='del'>-        cs_local_t      *lock_local = NULL;</div><div class='del'>-        xlator_t        *this       = NULL;</div><div class='del'>-        struct gf_flock  flock      = {0,};</div><div class='del'>-        int              ret        = 0;</div><div class='del'>-</div><div class='del'>-        lock_frame = cs_lock_frame (parent_frame);</div><div class='del'>-        if (!lock_frame) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "insuffcient memory");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this = parent_frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        lock_local = cs_local_init (this, lock_frame, NULL, NULL, 0);</div><div class='del'>-        if (!lock_local) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "local init failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock_local-&gt;main_frame = parent_frame;</div><div class='del'>-</div><div class='del'>-        flock.l_type = F_WRLCK;</div><div class='del'>-</div><div class='del'>-        ret = cs_build_loc (&amp;lock_local-&gt;loc, parent_frame);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "build_loc failed");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (lock_frame, cs_blocking_inodelk_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;inodelk, CS_LOCK_DOMAIN,</div><div class='del'>-                    &amp;lock_local-&gt;loc, F_SETLKW, &amp;flock, NULL);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    call_frame_t *lock_frame = NULL;</div><div class='add'>+    cs_local_t *lock_local = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    lock_frame = cs_lock_frame(parent_frame);</div><div class='add'>+    if (!lock_frame) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "insuffcient memory");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this = parent_frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    lock_local = cs_local_init(this, lock_frame, NULL, NULL, 0);</div><div class='add'>+    if (!lock_local) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "local init failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock_local-&gt;main_frame = parent_frame;</div><div class='add'>+</div><div class='add'>+    flock.l_type = F_WRLCK;</div><div class='add'>+</div><div class='add'>+    ret = cs_build_loc(&amp;lock_local-&gt;loc, parent_frame);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "build_loc failed");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(lock_frame, cs_blocking_inodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;inodelk, CS_LOCK_DOMAIN,</div><div class='add'>+               &amp;lock_local-&gt;loc, F_SETLKW, &amp;flock, NULL);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        if (lock_frame)</div><div class='del'>-                cs_lock_wipe (lock_frame);</div><div class='add'>+    if (lock_frame)</div><div class='add'>+        cs_lock_wipe(lock_frame);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-locate_and_execute (call_frame_t *frame)</div><div class='add'>+locate_and_execute(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = cs_blocking_inodelk (frame);</div><div class='add'>+    ret = cs_blocking_inodelk(frame);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                return -1;</div><div class='del'>-        else</div><div class='del'>-                return 0;</div><div class='add'>+    if (ret)</div><div class='add'>+        return -1;</div><div class='add'>+    else</div><div class='add'>+        return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cs_resume_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                    off_t offset, dict_t *xattr_req)</div><div class='add'>+cs_resume_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   off_t offset, dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local  = NULL;</div><div class='del'>-        int              ret    = 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = cs_resume_postprocess (this, frame, loc-&gt;inode);</div><div class='del'>-        if (ret) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    ret = cs_resume_postprocess(this, frame, loc-&gt;inode);</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        cs_inodelk_unlock (frame);</div><div class='add'>+    cs_inodelk_unlock(frame);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, cs_truncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, local-&gt;xattr_req);</div><div class='add'>+    STACK_WIND(frame, cs_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset,</div><div class='add'>+               local-&gt;xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        cs_inodelk_unlock (frame);</div><div class='add'>+    cs_inodelk_unlock(frame);</div><div class='ctx'> </div><div class='del'>-        cs_common_cbk (frame);</div><div class='add'>+    cs_common_cbk(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_resume_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                    dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+cs_resume_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        cs_inode_ctx_t  *ctx   = NULL;</div><div class='del'>-        gf_cs_obj_state  state = GF_CS_ERROR;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        __cs_inode_ctx_get (this, loc-&gt;inode, &amp;ctx);</div><div class='del'>-</div><div class='del'>-        state = __cs_get_file_state (this, loc-&gt;inode, ctx);</div><div class='del'>-</div><div class='del'>-        if (state == GF_CS_ERROR) {</div><div class='del'>-                /* file is already remote */</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='del'>-                        "file %s , could not figure file state", loc-&gt;path);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (state == GF_CS_REMOTE) {</div><div class='del'>-                /* file is already remote */</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, EINVAL,</div><div class='del'>-                        "file %s is already remote", loc-&gt;path);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (state == GF_CS_DOWNLOADING) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='del'>-                        " file is in downloading state.");</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EINVAL;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, cs_setxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags,</div><div class='del'>-                    local-&gt;xattr_req);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    cs_inode_ctx_t *ctx = NULL;</div><div class='add'>+    gf_cs_obj_state state = GF_CS_ERROR;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    __cs_inode_ctx_get(this, loc-&gt;inode, &amp;ctx);</div><div class='add'>+</div><div class='add'>+    state = __cs_get_file_state(this, loc-&gt;inode, ctx);</div><div class='add'>+</div><div class='add'>+    if (state == GF_CS_ERROR) {</div><div class='add'>+        /* file is already remote */</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='add'>+               "file %s , could not figure file state", loc-&gt;path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (state == GF_CS_REMOTE) {</div><div class='add'>+        /* file is already remote */</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, EINVAL,</div><div class='add'>+               "file %s is already remote", loc-&gt;path);</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (state == GF_CS_DOWNLOADING) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, 0, 0,</div><div class='add'>+               " file is in downloading state.");</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EINVAL;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, cs_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags,</div><div class='add'>+               local-&gt;xattr_req);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        cs_inodelk_unlock (frame);</div><div class='add'>+    cs_inodelk_unlock(frame);</div><div class='ctx'> </div><div class='del'>-        cs_common_cbk (frame);</div><div class='add'>+    cs_common_cbk(frame);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> gf_cs_obj_state</div><div class='del'>-__cs_get_file_state (xlator_t *this, inode_t *inode, cs_inode_ctx_t *ctx)</div><div class='add'>+__cs_get_file_state(xlator_t *this, inode_t *inode, cs_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        gf_cs_obj_state    state = -1;</div><div class='add'>+    gf_cs_obj_state state = -1;</div><div class='ctx'> </div><div class='del'>-        if (!ctx)</div><div class='del'>-                return GF_CS_ERROR;</div><div class='add'>+    if (!ctx)</div><div class='add'>+        return GF_CS_ERROR;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                state = ctx-&gt;state;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        state = ctx-&gt;state;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return state;</div><div class='add'>+    return state;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__cs_inode_ctx_get (xlator_t *this, inode_t *inode, cs_inode_ctx_t **ctx)</div><div class='add'>+__cs_inode_ctx_get(xlator_t *this, inode_t *inode, cs_inode_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        uint64_t        ctxint = 0;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    uint64_t ctxint = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctxint);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;ctxint);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                *ctx = NULL;</div><div class='del'>-        else</div><div class='del'>-                *ctx = (cs_inode_ctx_t *)ctxint;</div><div class='add'>+    if (ret)</div><div class='add'>+        *ctx = NULL;</div><div class='add'>+    else</div><div class='add'>+        *ctx = (cs_inode_ctx_t *)ctxint;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__cs_inode_ctx_update (xlator_t *this, inode_t *inode, uint64_t val)</div><div class='add'>+__cs_inode_ctx_update(xlator_t *this, inode_t *inode, uint64_t val)</div><div class='ctx'> {</div><div class='del'>-        cs_inode_ctx_t  *ctx = NULL;</div><div class='del'>-        uint64_t         ctxint = 0;</div><div class='del'>-        int              ret = 0;</div><div class='add'>+    cs_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t ctxint = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctxint);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;ctxint);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                ctx = GF_CALLOC (1, sizeof (*ctx), gf_cs_mt_cs_inode_ctx_t);</div><div class='del'>-                if (!ctx) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "ctx allocation failed");</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ctx = GF_CALLOC(1, sizeof(*ctx), gf_cs_mt_cs_inode_ctx_t);</div><div class='add'>+            if (!ctx) {</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "ctx allocation failed");</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                ctx-&gt;state = val;</div><div class='add'>+            ctx-&gt;state = val;</div><div class='ctx'> </div><div class='del'>-                ctxint = (uint64_t) ctx;</div><div class='add'>+            ctxint = (uint64_t)ctx;</div><div class='ctx'> </div><div class='del'>-                ret = __inode_ctx_set (inode, this, &amp;ctxint);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        GF_FREE (ctx);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = __inode_ctx_set(inode, this, &amp;ctxint);</div><div class='add'>+            if (ret) {</div><div class='add'>+                GF_FREE(ctx);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'>         } else {</div><div class='del'>-                ctx = (cs_inode_ctx_t *) ctxint;</div><div class='del'>-</div><div class='del'>-                ctx-&gt;state = val;</div><div class='del'>-        }</div><div class='add'>+            ctx = (cs_inode_ctx_t *)ctxint;</div><div class='ctx'> </div><div class='add'>+            ctx-&gt;state = val;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_inode_ctx_reset (xlator_t *this, inode_t *inode)</div><div class='add'>+cs_inode_ctx_reset(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        cs_inode_ctx_t  *ctx = NULL;</div><div class='del'>-        uint64_t         ctxint = 0;</div><div class='add'>+    cs_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t ctxint = 0;</div><div class='ctx'> </div><div class='del'>-        inode_ctx_del (inode, this, &amp;ctxint);</div><div class='del'>-        if (!ctxint) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    inode_ctx_del(inode, this, &amp;ctxint);</div><div class='add'>+    if (!ctxint) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ctx = (cs_inode_ctx_t *)ctxint;</div><div class='add'>+    ctx = (cs_inode_ctx_t *)ctxint;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctx);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(ctx);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_resume_postprocess (xlator_t *this, call_frame_t *frame, inode_t *inode)</div><div class='add'>+cs_resume_postprocess(xlator_t *this, call_frame_t *frame, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        cs_local_t      *local = NULL;</div><div class='del'>-        gf_cs_obj_state  state = -1;</div><div class='del'>-        cs_inode_ctx_t  *ctx   = NULL;</div><div class='del'>-        int              ret   = 0;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __cs_inode_ctx_get (this, inode, &amp;ctx);</div><div class='del'>-</div><div class='del'>-        state = __cs_get_file_state (this, inode, ctx);</div><div class='del'>-        if (state == GF_CS_ERROR) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "status is GF_CS_ERROR."</div><div class='del'>-                        " Aborting write");</div><div class='del'>-                local-&gt;op_ret = -1;</div><div class='del'>-                local-&gt;op_errno = EREMOTE;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (state == GF_CS_REMOTE || state == GF_CS_DOWNLOADING) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "status is %d", state);</div><div class='del'>-                ret = cs_download (frame);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Winding for Final Write");</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                " download failed, unwinding writev");</div><div class='del'>-                        local-&gt;op_ret = -1;</div><div class='del'>-                        local-&gt;op_errno = EREMOTE;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+    cs_local_t *local = NULL;</div><div class='add'>+    gf_cs_obj_state state = -1;</div><div class='add'>+    cs_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    __cs_inode_ctx_get(this, inode, &amp;ctx);</div><div class='add'>+</div><div class='add'>+    state = __cs_get_file_state(this, inode, ctx);</div><div class='add'>+    if (state == GF_CS_ERROR) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "status is GF_CS_ERROR."</div><div class='add'>+               " Aborting write");</div><div class='add'>+        local-&gt;op_ret = -1;</div><div class='add'>+        local-&gt;op_errno = EREMOTE;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (state == GF_CS_REMOTE || state == GF_CS_DOWNLOADING) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, "status is %d", state);</div><div class='add'>+        ret = cs_download(frame);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, "Winding for Final Write");</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                   " download failed, unwinding writev");</div><div class='add'>+            local-&gt;op_ret = -1;</div><div class='add'>+            local-&gt;op_errno = EREMOTE;</div><div class='add'>+            ret = -1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> int32_t</div><div class='del'>-cs_fdctx_to_dict (xlator_t *this,</div><div class='del'>-        fd_t *fd,</div><div class='del'>-        dict_t *dict)</div><div class='add'>+cs_fdctx_to_dict(xlator_t *this, fd_t *fd, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_inode (xlator_t *this)</div><div class='add'>+cs_inode(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_inode_to_dict (xlator_t *this,</div><div class='del'>-        dict_t *dict)</div><div class='add'>+cs_inode_to_dict(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_history (xlator_t *this)</div><div class='add'>+cs_history(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fd (xlator_t *this)</div><div class='add'>+cs_fd(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fd_to_dict (xlator_t *this,</div><div class='del'>-        dict_t *dict)</div><div class='add'>+cs_fd_to_dict(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_fdctx (xlator_t *this,</div><div class='del'>-        fd_t *fd)</div><div class='add'>+cs_fdctx(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_inodectx (xlator_t *this,</div><div class='del'>-        inode_t *ino)</div><div class='add'>+cs_inodectx(xlator_t *this, inode_t *ino)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_inodectx_to_dict (xlator_t *this,</div><div class='del'>-        inode_t *ino,</div><div class='del'>-        dict_t *dict)</div><div class='add'>+cs_inodectx_to_dict(xlator_t *this, inode_t *ino, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_priv_to_dict (xlator_t *this,</div><div class='del'>-        dict_t *dict, char *brickname)</div><div class='add'>+cs_priv_to_dict(xlator_t *this, dict_t *dict, char *brickname)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-cs_priv (xlator_t *this)</div><div class='add'>+cs_priv(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-cs_notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+cs_notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        return default_notify (this, event, data);</div><div class='add'>+    return default_notify(this, event, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> struct xlator_fops cs_fops = {</div><div class='del'>-        .stat                 = cs_stat,</div><div class='del'>-        .readdirp             = cs_readdirp,</div><div class='del'>-        .truncate             = cs_truncate,</div><div class='del'>-        .seek                 = cs_seek,</div><div class='del'>-        .statfs               = cs_statfs,</div><div class='del'>-        .fallocate            = cs_fallocate,</div><div class='del'>-        .discard              = cs_discard,</div><div class='del'>-        .getxattr             = cs_getxattr,</div><div class='del'>-        .writev               = cs_writev,</div><div class='del'>-        .setxattr             = cs_setxattr,</div><div class='del'>-        .fgetxattr            = cs_fgetxattr,</div><div class='del'>-        .lookup               = cs_lookup,</div><div class='del'>-        .fsetxattr            = cs_fsetxattr,</div><div class='del'>-        .readv                = cs_readv,</div><div class='del'>-        .ftruncate            = cs_ftruncate,</div><div class='del'>-        .rchecksum            = cs_rchecksum,</div><div class='del'>-        .unlink               = cs_unlink,</div><div class='del'>-        .open                 = cs_open,</div><div class='del'>-        .fstat                = cs_fstat,</div><div class='del'>-        .zerofill             = cs_zerofill,</div><div class='add'>+    .stat = cs_stat,</div><div class='add'>+    .readdirp = cs_readdirp,</div><div class='add'>+    .truncate = cs_truncate,</div><div class='add'>+    .seek = cs_seek,</div><div class='add'>+    .statfs = cs_statfs,</div><div class='add'>+    .fallocate = cs_fallocate,</div><div class='add'>+    .discard = cs_discard,</div><div class='add'>+    .getxattr = cs_getxattr,</div><div class='add'>+    .writev = cs_writev,</div><div class='add'>+    .setxattr = cs_setxattr,</div><div class='add'>+    .fgetxattr = cs_fgetxattr,</div><div class='add'>+    .lookup = cs_lookup,</div><div class='add'>+    .fsetxattr = cs_fsetxattr,</div><div class='add'>+    .readv = cs_readv,</div><div class='add'>+    .ftruncate = cs_ftruncate,</div><div class='add'>+    .rchecksum = cs_rchecksum,</div><div class='add'>+    .unlink = cs_unlink,</div><div class='add'>+    .open = cs_open,</div><div class='add'>+    .fstat = cs_fstat,</div><div class='add'>+    .zerofill = cs_zerofill,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cs_cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cs_cbks = {};</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops cs_dumpops = {</div><div class='del'>-        .fdctx_to_dict        = cs_fdctx_to_dict,</div><div class='del'>-        .inode                = cs_inode,</div><div class='del'>-        .inode_to_dict        = cs_inode_to_dict,</div><div class='del'>-        .history              = cs_history,</div><div class='del'>-        .fd                   = cs_fd,</div><div class='del'>-        .fd_to_dict           = cs_fd_to_dict,</div><div class='del'>-        .fdctx                = cs_fdctx,</div><div class='del'>-        .inodectx             = cs_inodectx,</div><div class='del'>-        .inodectx_to_dict     = cs_inodectx_to_dict,</div><div class='del'>-        .priv_to_dict         = cs_priv_to_dict,</div><div class='del'>-        .priv                 = cs_priv,</div><div class='add'>+    .fdctx_to_dict = cs_fdctx_to_dict,</div><div class='add'>+    .inode = cs_inode,</div><div class='add'>+    .inode_to_dict = cs_inode_to_dict,</div><div class='add'>+    .history = cs_history,</div><div class='add'>+    .fd = cs_fd,</div><div class='add'>+    .fd_to_dict = cs_fd_to_dict,</div><div class='add'>+    .fdctx = cs_fdctx,</div><div class='add'>+    .inodectx = cs_inodectx,</div><div class='add'>+    .inodectx_to_dict = cs_inodectx_to_dict,</div><div class='add'>+    .priv_to_dict = cs_priv_to_dict,</div><div class='add'>+    .priv = cs_priv,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options cs_options[] = {</div><div class='del'>-        { .key = {"cloudsync-storetype"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Defines which remote store is enabled"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {"cloudsync-storetype"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "Defines which remote store is enabled"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> xlator_api_t xlator_api = {</div><div class='del'>-        .init           = cs_init,</div><div class='del'>-        .fini           = cs_fini,</div><div class='del'>-        .notify         = cs_notify,</div><div class='del'>-        .reconfigure    = cs_reconfigure,</div><div class='del'>-        .mem_acct_init  = cs_mem_acct_init,</div><div class='del'>-        .dumpops        = &amp;cs_dumpops,</div><div class='del'>-        .fops           = &amp;cs_fops,</div><div class='del'>-        .cbks           = &amp;cs_cbks,</div><div class='del'>-        .options        = cs_options,</div><div class='del'>-        .identifier     = "cloudsync",</div><div class='del'>-        .category       = GF_TECH_PREVIEW,</div><div class='add'>+    .init = cs_init,</div><div class='add'>+    .fini = cs_fini,</div><div class='add'>+    .notify = cs_notify,</div><div class='add'>+    .reconfigure = cs_reconfigure,</div><div class='add'>+    .mem_acct_init = cs_mem_acct_init,</div><div class='add'>+    .dumpops = &amp;cs_dumpops,</div><div class='add'>+    .fops = &amp;cs_fops,</div><div class='add'>+    .cbks = &amp;cs_cbks,</div><div class='add'>+    .options = cs_options,</div><div class='add'>+    .identifier = "cloudsync",</div><div class='add'>+    .category = GF_TECH_PREVIEW,</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/compress/src/cdc-helper.c b/xlators/features/compress/src/cdc-helper.c<br/>index 7baccb0cd3d..71f446d51cd 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/compress/src/cdc-helper.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/compress/src/cdc-helper.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/compress/src/cdc-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/compress/src/cdc-helper.c</a></div><div class='hunk'>@@ -34,118 +34,110 @@</div><div class='ctx'>  * gzip_header is added only during debugging.</div><div class='ctx'>  * Refer to the function cdc_dump_iovec_to_disk</div><div class='ctx'>  */</div><div class='del'>-static const char gzip_header[10] =</div><div class='del'>-        {</div><div class='del'>-                '\037', '\213', Z_DEFLATED, 0,</div><div class='del'>-                0,      0,      0,          0,</div><div class='del'>-                0,      GF_CDC_OS_ID</div><div class='del'>-        };</div><div class='add'>+static const char gzip_header[10] = {'\037', '\213', Z_DEFLATED,  0, 0, 0, 0,</div><div class='add'>+                                     0,      0,      GF_CDC_OS_ID};</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-cdc_next_iovec (xlator_t *this, cdc_info_t *ci)</div><div class='add'>+cdc_next_iovec(xlator_t *this, cdc_info_t *ci)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        ci-&gt;ncount++;</div><div class='del'>-        /* check for iovec overflow -- should not happen */</div><div class='del'>-        if (ci-&gt;ncount == MAX_IOVEC) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Zlib output buffer overflow"</div><div class='del'>-                        " -&gt;ncount (%d) | -&gt;MAX_IOVEC (%d)",</div><div class='del'>-                        ci-&gt;ncount, MAX_IOVEC);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    ci-&gt;ncount++;</div><div class='add'>+    /* check for iovec overflow -- should not happen */</div><div class='add'>+    if (ci-&gt;ncount == MAX_IOVEC) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Zlib output buffer overflow"</div><div class='add'>+               " -&gt;ncount (%d) | -&gt;MAX_IOVEC (%d)",</div><div class='add'>+               ci-&gt;ncount, MAX_IOVEC);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cdc_put_long (unsigned char *string, unsigned long x)</div><div class='add'>+cdc_put_long(unsigned char *string, unsigned long x)</div><div class='ctx'> {</div><div class='del'>-        string[0] = (unsigned char) (x &amp; 0xff);</div><div class='del'>-        string[1] = (unsigned char) ((x &amp; 0xff00) &gt;&gt; 8);</div><div class='del'>-        string[2] = (unsigned char) ((x &amp; 0xff0000) &gt;&gt; 16);</div><div class='del'>-        string[3] = (unsigned char) ((x &amp; 0xff000000) &gt;&gt; 24);</div><div class='add'>+    string[0] = (unsigned char)(x &amp; 0xff);</div><div class='add'>+    string[1] = (unsigned char)((x &amp; 0xff00) &gt;&gt; 8);</div><div class='add'>+    string[2] = (unsigned char)((x &amp; 0xff0000) &gt;&gt; 16);</div><div class='add'>+    string[3] = (unsigned char)((x &amp; 0xff000000) &gt;&gt; 24);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static unsigned long</div><div class='del'>-cdc_get_long (unsigned char *buf)</div><div class='add'>+cdc_get_long(unsigned char *buf)</div><div class='ctx'> {</div><div class='del'>-        return ((unsigned long) buf[0])</div><div class='del'>-                | (((unsigned long) buf[1]) &lt;&lt; 8)</div><div class='del'>-                | (((unsigned long) buf[2]) &lt;&lt; 16)</div><div class='del'>-                | (((unsigned long) buf[3]) &lt;&lt; 24);</div><div class='add'>+    return ((unsigned long)buf[0]) | (((unsigned long)buf[1]) &lt;&lt; 8) |</div><div class='add'>+           (((unsigned long)buf[2]) &lt;&lt; 16) | (((unsigned long)buf[3]) &lt;&lt; 24);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-cdc_init_gzip_trailer (xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci)</div><div class='add'>+cdc_init_gzip_trailer(xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci)</div><div class='ctx'> {</div><div class='del'>-        int   ret = -1;</div><div class='del'>-        char *buf = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *buf = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cdc_next_iovec (this, ci);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cdc_next_iovec(this, ci);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        buf = CURR_VEC(ci).iov_base =</div><div class='del'>-                (char *) GF_CALLOC (1, GF_CDC_VALIDATION_SIZE,</div><div class='del'>-                                    gf_cdc_mt_gzip_trailer_t);</div><div class='add'>+    buf = CURR_VEC(ci).iov_base = (char *)GF_CALLOC(1, GF_CDC_VALIDATION_SIZE,</div><div class='add'>+                                                    gf_cdc_mt_gzip_trailer_t);</div><div class='ctx'> </div><div class='del'>-        if (!CURR_VEC(ci).iov_base)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!CURR_VEC(ci).iov_base)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        CURR_VEC(ci).iov_len = GF_CDC_VALIDATION_SIZE;</div><div class='add'>+    CURR_VEC(ci).iov_len = GF_CDC_VALIDATION_SIZE;</div><div class='ctx'> </div><div class='del'>-        cdc_put_long ((unsigned char *)&amp;buf[0], ci-&gt;crc);</div><div class='del'>-        cdc_put_long ((unsigned char *)&amp;buf[4], ci-&gt;stream.total_in);</div><div class='add'>+    cdc_put_long((unsigned char *)&amp;buf[0], ci-&gt;crc);</div><div class='add'>+    cdc_put_long((unsigned char *)&amp;buf[4], ci-&gt;stream.total_in);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-cdc_alloc_iobuf_and_init_vec (xlator_t *this,</div><div class='del'>-                              cdc_priv_t *priv, cdc_info_t *ci,</div><div class='del'>-                              int size)</div><div class='add'>+cdc_alloc_iobuf_and_init_vec(xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci,</div><div class='add'>+                             int size)</div><div class='ctx'> {</div><div class='del'>-        int           ret       = -1;</div><div class='del'>-        int           alloc_len = 0;</div><div class='del'>-        struct iobuf *iobuf     = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int alloc_len = 0;</div><div class='add'>+    struct iobuf *iobuf = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = cdc_next_iovec (this, ci);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cdc_next_iovec(this, ci);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        alloc_len = size ? size : ci-&gt;buffer_size;</div><div class='add'>+    alloc_len = size ? size : ci-&gt;buffer_size;</div><div class='ctx'> </div><div class='del'>-        iobuf = iobuf_get2 (this-&gt;ctx-&gt;iobuf_pool, alloc_len);</div><div class='del'>-        if (!iobuf)</div><div class='del'>-                goto out;</div><div class='add'>+    iobuf = iobuf_get2(this-&gt;ctx-&gt;iobuf_pool, alloc_len);</div><div class='add'>+    if (!iobuf)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = iobref_add (ci-&gt;iobref, iobuf);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = iobref_add(ci-&gt;iobref, iobuf);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* Initialize this iovec */</div><div class='del'>-        CURR_VEC(ci).iov_base = iobuf-&gt;ptr;</div><div class='del'>-        CURR_VEC(ci).iov_len  = alloc_len;</div><div class='add'>+    /* Initialize this iovec */</div><div class='add'>+    CURR_VEC(ci).iov_base = iobuf-&gt;ptr;</div><div class='add'>+    CURR_VEC(ci).iov_len = alloc_len;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cdc_init_zlib_output_stream (cdc_priv_t *priv, cdc_info_t *ci, int size)</div><div class='add'>+cdc_init_zlib_output_stream(cdc_priv_t *priv, cdc_info_t *ci, int size)</div><div class='ctx'> {</div><div class='del'>-        ci-&gt;stream.next_out  = (unsigned char *) CURR_VEC(ci).iov_base;</div><div class='del'>-        ci-&gt;stream.avail_out = size ? size : ci-&gt;buffer_size;</div><div class='add'>+    ci-&gt;stream.next_out = (unsigned char *)CURR_VEC(ci).iov_base;</div><div class='add'>+    ci-&gt;stream.avail_out = size ? size : ci-&gt;buffer_size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This routine is for testing and debugging only.</div><div class='hunk'>@@ -153,391 +145,383 @@ cdc_init_zlib_output_stream (cdc_priv_t *priv, cdc_info_t *ci, int size)</div><div class='ctx'>  * So each gzip dump file is at least 18 bytes in size.</div><div class='ctx'>  */</div><div class='ctx'> void</div><div class='del'>-cdc_dump_iovec_to_disk (xlator_t *this, cdc_info_t *ci, const char *file)</div><div class='add'>+cdc_dump_iovec_to_disk(xlator_t *this, cdc_info_t *ci, const char *file)</div><div class='ctx'> {</div><div class='del'>-        int    i      = 0;</div><div class='del'>-        int    fd     = 0;</div><div class='del'>-        size_t written = 0;</div><div class='del'>-        size_t total_written = 0;</div><div class='del'>-</div><div class='del'>-        fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0777 );</div><div class='del'>-        if (fd &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Cannot open file: %s", file);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        written = sys_write (fd, (char *) gzip_header, 10);</div><div class='add'>+    int i = 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    size_t written = 0;</div><div class='add'>+    size_t total_written = 0;</div><div class='add'>+</div><div class='add'>+    fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0777);</div><div class='add'>+    if (fd &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Cannot open file: %s", file);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    written = sys_write(fd, (char *)gzip_header, 10);</div><div class='add'>+    total_written += written;</div><div class='add'>+    for (i = 0; i &lt; ci-&gt;ncount; i++) {</div><div class='add'>+        written = sys_write(fd, (char *)ci-&gt;vec[i].iov_base,</div><div class='add'>+                            ci-&gt;vec[i].iov_len);</div><div class='ctx'>         total_written += written;</div><div class='del'>-        for (i = 0; i &lt; ci-&gt;ncount; i++) {</div><div class='del'>-                written = sys_write (fd, (char *) ci-&gt;vec[i].iov_base, ci-&gt;vec[i].iov_len);</div><div class='del'>-                total_written += written;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dump'd %zu bytes to %s", total_written, GF_CDC_DEBUG_DUMP_FILE );</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "dump'd %zu bytes to %s", total_written,</div><div class='add'>+           GF_CDC_DEBUG_DUMP_FILE);</div><div class='ctx'> </div><div class='del'>-        sys_close (fd);</div><div class='add'>+    sys_close(fd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-cdc_flush_libz_buffer (cdc_priv_t *priv, xlator_t *this, cdc_info_t *ci,</div><div class='del'>-                       int (*libz_func)(z_streamp, int),</div><div class='del'>-                       int flush)</div><div class='add'>+cdc_flush_libz_buffer(cdc_priv_t *priv, xlator_t *this, cdc_info_t *ci,</div><div class='add'>+                      int (*libz_func)(z_streamp, int), int flush)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = Z_OK;</div><div class='del'>-        int done = 0;</div><div class='del'>-        unsigned int deflate_len = 0;</div><div class='add'>+    int32_t ret = Z_OK;</div><div class='add'>+    int done = 0;</div><div class='add'>+    unsigned int deflate_len = 0;</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                deflate_len = ci-&gt;buffer_size - ci-&gt;stream.avail_out;</div><div class='add'>+    for (;;) {</div><div class='add'>+        deflate_len = ci-&gt;buffer_size - ci-&gt;stream.avail_out;</div><div class='ctx'> </div><div class='del'>-                if (deflate_len != 0) {</div><div class='del'>-                        CURR_VEC(ci).iov_len = deflate_len;</div><div class='add'>+        if (deflate_len != 0) {</div><div class='add'>+            CURR_VEC(ci).iov_len = deflate_len;</div><div class='ctx'> </div><div class='del'>-                        ret = cdc_alloc_iobuf_and_init_vec (this, priv, ci, 0);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                ret = Z_MEM_ERROR;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='add'>+            ret = cdc_alloc_iobuf_and_init_vec(this, priv, ci, 0);</div><div class='add'>+            if (ret) {</div><div class='add'>+                ret = Z_MEM_ERROR;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        /* Re-position Zlib output buffer */</div><div class='del'>-                        cdc_init_zlib_output_stream (priv, ci, 0);</div><div class='del'>-                }</div><div class='add'>+            /* Re-position Zlib output buffer */</div><div class='add'>+            cdc_init_zlib_output_stream(priv, ci, 0);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (done) {</div><div class='del'>-                        ci-&gt;ncount--;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (done) {</div><div class='add'>+            ci-&gt;ncount--;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = libz_func (&amp;ci-&gt;stream, flush);</div><div class='add'>+        ret = libz_func(&amp;ci-&gt;stream, flush);</div><div class='ctx'> </div><div class='del'>-                if (ret == Z_BUF_ERROR) {</div><div class='del'>-                        ret = Z_OK;</div><div class='del'>-                        ci-&gt;ncount--;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        if (ret == Z_BUF_ERROR) {</div><div class='add'>+            ret = Z_OK;</div><div class='add'>+            ci-&gt;ncount--;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                done = (ci-&gt;stream.avail_out != 0 || ret == Z_STREAM_END);</div><div class='add'>+        done = (ci-&gt;stream.avail_out != 0 || ret == Z_STREAM_END);</div><div class='ctx'> </div><div class='del'>-                if (ret != Z_OK &amp;&amp; ret != Z_STREAM_END)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='add'>+        if (ret != Z_OK &amp;&amp; ret != Z_STREAM_END)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-do_cdc_compress (struct iovec *vec, xlator_t *this, cdc_priv_t *priv,</div><div class='del'>-                 cdc_info_t *ci)</div><div class='add'>+do_cdc_compress(struct iovec *vec, xlator_t *this, cdc_priv_t *priv,</div><div class='add'>+                cdc_info_t *ci)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        /* Initialize defalte */</div><div class='del'>-        ret = deflateInit2 (&amp;ci-&gt;stream, priv-&gt;cdc_level, Z_DEFLATED,</div><div class='del'>-                            priv-&gt;window_size, priv-&gt;mem_level,</div><div class='del'>-                            Z_DEFAULT_STRATEGY);</div><div class='add'>+    /* Initialize defalte */</div><div class='add'>+    ret = deflateInit2(&amp;ci-&gt;stream, priv-&gt;cdc_level, Z_DEFLATED,</div><div class='add'>+                       priv-&gt;window_size, priv-&gt;mem_level, Z_DEFAULT_STRATEGY);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "unable to init Zlib (retval: %d)", ret);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "unable to init Zlib (retval: %d)",</div><div class='add'>+               ret);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = cdc_alloc_iobuf_and_init_vec (this, priv, ci, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = cdc_alloc_iobuf_and_init_vec(this, priv, ci, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        /* setup output buffer */</div><div class='del'>-        cdc_init_zlib_output_stream (priv, ci, 0);</div><div class='add'>+    /* setup output buffer */</div><div class='add'>+    cdc_init_zlib_output_stream(priv, ci, 0);</div><div class='ctx'> </div><div class='del'>-        /* setup input buffer */</div><div class='del'>-        ci-&gt;stream.next_in  = (unsigned char *) vec-&gt;iov_base;</div><div class='del'>-        ci-&gt;stream.avail_in = vec-&gt;iov_len;</div><div class='add'>+    /* setup input buffer */</div><div class='add'>+    ci-&gt;stream.next_in = (unsigned char *)vec-&gt;iov_base;</div><div class='add'>+    ci-&gt;stream.avail_in = vec-&gt;iov_len;</div><div class='ctx'> </div><div class='del'>-        ci-&gt;crc = crc32 (ci-&gt;crc, (const Bytef *) vec-&gt;iov_base, vec-&gt;iov_len);</div><div class='add'>+    ci-&gt;crc = crc32(ci-&gt;crc, (const Bytef *)vec-&gt;iov_base, vec-&gt;iov_len);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "crc=%lu len=%d buffer_size=%d",</div><div class='del'>-                ci-&gt;crc, ci-&gt;stream.avail_in, ci-&gt;buffer_size);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "crc=%lu len=%d buffer_size=%d", ci-&gt;crc,</div><div class='add'>+           ci-&gt;stream.avail_in, ci-&gt;buffer_size);</div><div class='ctx'> </div><div class='del'>-        /* compress !! */</div><div class='del'>-        while (ci-&gt;stream.avail_in != 0) {</div><div class='del'>-                if (ci-&gt;stream.avail_out == 0) {</div><div class='add'>+    /* compress !! */</div><div class='add'>+    while (ci-&gt;stream.avail_in != 0) {</div><div class='add'>+        if (ci-&gt;stream.avail_out == 0) {</div><div class='add'>+            CURR_VEC(ci).iov_len = ci-&gt;buffer_size;</div><div class='ctx'> </div><div class='del'>-                        CURR_VEC(ci).iov_len = ci-&gt;buffer_size;</div><div class='add'>+            ret = cdc_alloc_iobuf_and_init_vec(this, priv, ci, 0);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-                        ret = cdc_alloc_iobuf_and_init_vec (this, priv, ci, 0);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        /* Re-position Zlib output buffer */</div><div class='del'>-                        cdc_init_zlib_output_stream (priv, ci, 0);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = deflate (&amp;ci-&gt;stream, Z_NO_FLUSH);</div><div class='del'>-                if (ret != Z_OK)</div><div class='del'>-                        break;</div><div class='add'>+            /* Re-position Zlib output buffer */</div><div class='add'>+            cdc_init_zlib_output_stream(priv, ci, 0);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+        ret = deflate(&amp;ci-&gt;stream, Z_NO_FLUSH);</div><div class='add'>+        if (ret != Z_OK)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cdc_compress (xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci,</div><div class='del'>-              dict_t **xdata)</div><div class='add'>+cdc_compress(xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci, dict_t **xdata)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int i   = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        ci-&gt;iobref = iobref_new ();</div><div class='del'>-        if (!ci-&gt;iobref)</div><div class='del'>-                goto out;</div><div class='add'>+    ci-&gt;iobref = iobref_new();</div><div class='add'>+    if (!ci-&gt;iobref)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    if (!*xdata) {</div><div class='add'>+        *xdata = dict_new();</div><div class='ctx'>         if (!*xdata) {</div><div class='del'>-                *xdata = dict_new ();</div><div class='del'>-                if (!*xdata) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Cannot allocate xdata"</div><div class='del'>-                                " dict");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* data */</div><div class='del'>-        for (i = 0; i &lt; ci-&gt;count; i++) {</div><div class='del'>-                ret = do_cdc_compress (&amp;ci-&gt;vector[i], this, priv, ci);</div><div class='del'>-                if (ret != Z_OK)</div><div class='del'>-                        goto deflate_cleanup_out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* flush zlib buffer */</div><div class='del'>-        ret = cdc_flush_libz_buffer (priv, this, ci, deflate, Z_FINISH);</div><div class='del'>-        if (!(ret == Z_OK || ret == Z_STREAM_END)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Compression Error: ret (%d)", ret);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto deflate_cleanup_out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* trailer */</div><div class='del'>-        ret = cdc_init_gzip_trailer (this, priv, ci);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto deflate_cleanup_out;</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "Compressed %ld to %ld bytes",</div><div class='del'>-                ci-&gt;stream.total_in, ci-&gt;stream.total_out);</div><div class='del'>-</div><div class='del'>-        ci-&gt;nbytes = ci-&gt;stream.total_out + GF_CDC_VALIDATION_SIZE;</div><div class='del'>-</div><div class='del'>-        /* set deflated canary value for identification */</div><div class='del'>-        ret = dict_set_int32 (*xdata, GF_CDC_DEFLATE_CANARY_VAL, 1);</div><div class='del'>-        if (ret) {</div><div class='del'>-                /* Send uncompressed data if we can't _tell_ the client</div><div class='del'>-                 * that deflated data is on it's way. So, we just log</div><div class='del'>-                 * the failure and continue as usual.</div><div class='del'>-                 */</div><div class='del'>-                 gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                 "Data deflated, but could not set canary"</div><div class='del'>-                 " value in dict for identification");</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Cannot allocate xdata"</div><div class='add'>+                   " dict");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* data */</div><div class='add'>+    for (i = 0; i &lt; ci-&gt;count; i++) {</div><div class='add'>+        ret = do_cdc_compress(&amp;ci-&gt;vector[i], this, priv, ci);</div><div class='add'>+        if (ret != Z_OK)</div><div class='add'>+            goto deflate_cleanup_out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* flush zlib buffer */</div><div class='add'>+    ret = cdc_flush_libz_buffer(priv, this, ci, deflate, Z_FINISH);</div><div class='add'>+    if (!(ret == Z_OK || ret == Z_STREAM_END)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Compression Error: ret (%d)", ret);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto deflate_cleanup_out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* trailer */</div><div class='add'>+    ret = cdc_init_gzip_trailer(this, priv, ci);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto deflate_cleanup_out;</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "Compressed %ld to %ld bytes",</div><div class='add'>+           ci-&gt;stream.total_in, ci-&gt;stream.total_out);</div><div class='add'>+</div><div class='add'>+    ci-&gt;nbytes = ci-&gt;stream.total_out + GF_CDC_VALIDATION_SIZE;</div><div class='add'>+</div><div class='add'>+    /* set deflated canary value for identification */</div><div class='add'>+    ret = dict_set_int32(*xdata, GF_CDC_DEFLATE_CANARY_VAL, 1);</div><div class='add'>+    if (ret) {</div><div class='add'>+        /* Send uncompressed data if we can't _tell_ the client</div><div class='add'>+         * that deflated data is on it's way. So, we just log</div><div class='add'>+         * the failure and continue as usual.</div><div class='add'>+         */</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Data deflated, but could not set canary"</div><div class='add'>+               " value in dict for identification");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is to be used in testing */</div><div class='del'>-        if ( priv-&gt;debug ) {</div><div class='del'>-                cdc_dump_iovec_to_disk (this, ci, GF_CDC_DEBUG_DUMP_FILE );</div><div class='del'>-        }</div><div class='add'>+    /* This is to be used in testing */</div><div class='add'>+    if (priv-&gt;debug) {</div><div class='add'>+        cdc_dump_iovec_to_disk(this, ci, GF_CDC_DEBUG_DUMP_FILE);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- deflate_cleanup_out:</div><div class='del'>-        (void) deflateEnd(&amp;ci-&gt;stream);</div><div class='add'>+deflate_cleanup_out:</div><div class='add'>+    (void)deflateEnd(&amp;ci-&gt;stream);</div><div class='ctx'> </div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* deflate content is checked by the presence of a canary</div><div class='ctx'>  * value in the dict as the key</div><div class='ctx'>  */</div><div class='ctx'> static int32_t</div><div class='del'>-cdc_check_content_for_deflate (dict_t *xdata)</div><div class='add'>+cdc_check_content_for_deflate(dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        return dict_get (xdata, GF_CDC_DEFLATE_CANARY_VAL) ? -1 : 0;</div><div class='add'>+    return dict_get(xdata, GF_CDC_DEFLATE_CANARY_VAL) ? -1 : 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static unsigned long</div><div class='del'>-cdc_extract_crc (char *trailer)</div><div class='add'>+cdc_extract_crc(char *trailer)</div><div class='ctx'> {</div><div class='del'>-        return cdc_get_long ((unsigned char *) &amp;trailer[0]);</div><div class='add'>+    return cdc_get_long((unsigned char *)&amp;trailer[0]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static unsigned long</div><div class='del'>-cdc_extract_size (char *trailer)</div><div class='add'>+cdc_extract_size(char *trailer)</div><div class='ctx'> {</div><div class='del'>-        return cdc_get_long ((unsigned char *) &amp;trailer[4]);</div><div class='add'>+    return cdc_get_long((unsigned char *)&amp;trailer[4]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-cdc_validate_inflate (cdc_info_t *ci, unsigned long crc,</div><div class='del'>-                      unsigned long len)</div><div class='add'>+cdc_validate_inflate(cdc_info_t *ci, unsigned long crc, unsigned long len)</div><div class='ctx'> {</div><div class='del'>-        return !((crc == ci-&gt;crc)</div><div class='del'>-                 /* inflated length is hidden inside</div><div class='del'>-                  * Zlib stream struct */</div><div class='del'>-                 &amp;&amp; (len == ci-&gt;stream.total_out));</div><div class='add'>+    return !((crc == ci-&gt;crc)</div><div class='add'>+             /* inflated length is hidden inside</div><div class='add'>+              * Zlib stream struct */</div><div class='add'>+             &amp;&amp; (len == ci-&gt;stream.total_out));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-do_cdc_decompress (xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci)</div><div class='add'>+do_cdc_decompress(xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci)</div><div class='ctx'> {</div><div class='del'>-        int            ret          = -1;</div><div class='del'>-        int            i            = 0;</div><div class='del'>-        int            len          = 0;</div><div class='del'>-        char          *inflte       = NULL;</div><div class='del'>-        char          *trailer      = NULL;</div><div class='del'>-        struct iovec   vec          = {0,};</div><div class='del'>-        unsigned long  computed_crc = 0;</div><div class='del'>-        unsigned long  computed_len = 0;</div><div class='del'>-</div><div class='del'>-        ret = inflateInit2 (&amp;ci-&gt;stream, priv-&gt;window_size);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Zlib: Unable to initialize inflate");</div><div class='del'>-                goto out;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    int len = 0;</div><div class='add'>+    char *inflte = NULL;</div><div class='add'>+    char *trailer = NULL;</div><div class='add'>+    struct iovec vec = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    unsigned long computed_crc = 0;</div><div class='add'>+    unsigned long computed_len = 0;</div><div class='add'>+</div><div class='add'>+    ret = inflateInit2(&amp;ci-&gt;stream, priv-&gt;window_size);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Zlib: Unable to initialize inflate");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    vec = THIS_VEC(ci, 0);</div><div class='add'>+</div><div class='add'>+    trailer = (char *)(((char *)vec.iov_base) + vec.iov_len -</div><div class='add'>+                       GF_CDC_VALIDATION_SIZE);</div><div class='add'>+</div><div class='add'>+    /* CRC of uncompressed data */</div><div class='add'>+    computed_crc = cdc_extract_crc(trailer);</div><div class='add'>+</div><div class='add'>+    /* size of uncomrpessed data */</div><div class='add'>+    computed_len = cdc_extract_size(trailer);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "crc=%lu len=%lu buffer_size=%d",</div><div class='add'>+           computed_crc, computed_len, ci-&gt;buffer_size);</div><div class='add'>+</div><div class='add'>+    inflte = vec.iov_base;</div><div class='add'>+    len = vec.iov_len - GF_CDC_VALIDATION_SIZE;</div><div class='add'>+</div><div class='add'>+    /* allocate buffer of the original length of the data */</div><div class='add'>+    ret = cdc_alloc_iobuf_and_init_vec(this, priv, ci, 0);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /* setup output buffer */</div><div class='add'>+    cdc_init_zlib_output_stream(priv, ci, 0);</div><div class='add'>+</div><div class='add'>+    /* setup input buffer */</div><div class='add'>+    ci-&gt;stream.next_in = (unsigned char *)inflte;</div><div class='add'>+    ci-&gt;stream.avail_in = len;</div><div class='add'>+</div><div class='add'>+    while (ci-&gt;stream.avail_in != 0) {</div><div class='add'>+        if (ci-&gt;stream.avail_out == 0) {</div><div class='add'>+            CURR_VEC(ci).iov_len = ci-&gt;buffer_size;</div><div class='add'>+</div><div class='add'>+            ret = cdc_alloc_iobuf_and_init_vec(this, priv, ci, 0);</div><div class='add'>+            if (ret)</div><div class='add'>+                break;</div><div class='add'>+</div><div class='add'>+            /* Re-position Zlib output buffer */</div><div class='add'>+            cdc_init_zlib_output_stream(priv, ci, 0);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        vec = THIS_VEC(ci, 0);</div><div class='del'>-</div><div class='del'>-        trailer = (char *) (((char *) vec.iov_base) + vec.iov_len</div><div class='del'>-                - GF_CDC_VALIDATION_SIZE);</div><div class='del'>-</div><div class='del'>-        /* CRC of uncompressed data */</div><div class='del'>-        computed_crc = cdc_extract_crc (trailer);</div><div class='del'>-</div><div class='del'>-        /* size of uncomrpessed data */</div><div class='del'>-        computed_len = cdc_extract_size (trailer);</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "crc=%lu len=%lu buffer_size=%d",</div><div class='del'>-                computed_crc, computed_len, ci-&gt;buffer_size);</div><div class='del'>-</div><div class='del'>-        inflte = vec.iov_base ;</div><div class='del'>-        len = vec.iov_len - GF_CDC_VALIDATION_SIZE;</div><div class='del'>-</div><div class='del'>-        /* allocate buffer of the original length of the data */</div><div class='del'>-        ret = cdc_alloc_iobuf_and_init_vec (this, priv, ci, 0);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /* setup output buffer */</div><div class='del'>-        cdc_init_zlib_output_stream (priv, ci, 0);</div><div class='del'>-</div><div class='del'>-        /* setup input buffer */</div><div class='del'>-        ci-&gt;stream.next_in = (unsigned char *) inflte;</div><div class='del'>-        ci-&gt;stream.avail_in = len;</div><div class='del'>-</div><div class='del'>-        while (ci-&gt;stream.avail_in != 0) {</div><div class='del'>-                if (ci-&gt;stream.avail_out == 0) {</div><div class='del'>-                        CURR_VEC(ci).iov_len = ci-&gt;buffer_size;</div><div class='del'>-</div><div class='del'>-                        ret = cdc_alloc_iobuf_and_init_vec (this, priv, ci, 0);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                break;</div><div class='del'>-</div><div class='del'>-                        /* Re-position Zlib output buffer */</div><div class='del'>-                        cdc_init_zlib_output_stream (priv, ci, 0);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = inflate (&amp;ci-&gt;stream, Z_NO_FLUSH);</div><div class='del'>-                if (ret == Z_STREAM_ERROR)</div><div class='del'>-                        break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* flush zlib buffer */</div><div class='del'>-        ret = cdc_flush_libz_buffer (priv, this, ci, inflate, Z_SYNC_FLUSH);</div><div class='del'>-        if (!(ret == Z_OK || ret == Z_STREAM_END)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Decompression Error: ret (%d)", ret);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* compute CRC of the uncompresses data to check for</div><div class='del'>-         * correctness */</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; ci-&gt;ncount; i++) {</div><div class='del'>-                ci-&gt;crc = crc32 (ci-&gt;crc,</div><div class='del'>-                                 (const Bytef *) ci-&gt;vec[i].iov_base,</div><div class='del'>-                                 ci-&gt;vec[i].iov_len);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* validate inflated data */</div><div class='del'>-        ret = cdc_validate_inflate (ci, computed_crc, computed_len);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Checksum or length mismatched in inflated data");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>- out:</div><div class='del'>-        return ret;</div><div class='add'>+        ret = inflate(&amp;ci-&gt;stream, Z_NO_FLUSH);</div><div class='add'>+        if (ret == Z_STREAM_ERROR)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* flush zlib buffer */</div><div class='add'>+    ret = cdc_flush_libz_buffer(priv, this, ci, inflate, Z_SYNC_FLUSH);</div><div class='add'>+    if (!(ret == Z_OK || ret == Z_STREAM_END)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Decompression Error: ret (%d)", ret);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* compute CRC of the uncompresses data to check for</div><div class='add'>+     * correctness */</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; ci-&gt;ncount; i++) {</div><div class='add'>+        ci-&gt;crc = crc32(ci-&gt;crc, (const Bytef *)ci-&gt;vec[i].iov_base,</div><div class='add'>+                        ci-&gt;vec[i].iov_len);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* validate inflated data */</div><div class='add'>+    ret = cdc_validate_inflate(ci, computed_crc, computed_len);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Checksum or length mismatched in inflated data");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cdc_decompress (xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+cdc_decompress(xlator_t *this, cdc_priv_t *priv, cdc_info_t *ci, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = -1;</div><div class='del'>-</div><div class='del'>-        /* check for deflate content */</div><div class='del'>-        if (!cdc_check_content_for_deflate (xdata)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Content not deflated, passing through ...");</div><div class='del'>-                goto passthrough_out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ci-&gt;iobref = iobref_new ();</div><div class='del'>-        if (!ci-&gt;iobref)</div><div class='del'>-                goto passthrough_out;</div><div class='del'>-</div><div class='del'>-        /* do we need to do this? can we assume that one iovec</div><div class='del'>-         * will hold per request data every time?</div><div class='del'>-         *</div><div class='del'>-         * server/client protocol seems to deal with a single</div><div class='del'>-         * iovec even if op_ret &gt; 1M. So, it looks ok to</div><div class='del'>-         * assume that a single iovec will contain all the</div><div class='del'>-         * data (This saves us a lot from finding the trailer</div><div class='del'>-         * and the data since it could have been split-up onto</div><div class='del'>-         * two adjacent iovec's.</div><div class='del'>-         *</div><div class='del'>-         * But, in case this translator is loaded above quick-read</div><div class='del'>-         * for some reason, then it's entirely possible that we get</div><div class='del'>-         * multiple iovec's...</div><div class='del'>-         *</div><div class='del'>-         * This case (handled below) is not tested. (by loading the</div><div class='del'>-         * xlator below quick-read)</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        /* @@ I_HOPE_THIS_IS_NEVER_HIT */</div><div class='del'>-        if (ci-&gt;count &gt; 1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "unable to handle"</div><div class='del'>-                        " multiple iovecs (%d in number)", ci-&gt;count);</div><div class='del'>-                goto inflate_cleanup_out;</div><div class='del'>-                /* TODO: coallate all iovecs in one */</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = do_cdc_decompress (this, priv, ci);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto inflate_cleanup_out;</div><div class='del'>-</div><div class='del'>-        ci-&gt;nbytes = ci-&gt;stream.total_out;</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "Inflated %ld to %ld bytes",</div><div class='del'>-                ci-&gt;stream.total_in, ci-&gt;stream.total_out);</div><div class='del'>-</div><div class='del'>- inflate_cleanup_out:</div><div class='del'>-        (void) inflateEnd (&amp;ci-&gt;stream);</div><div class='del'>-</div><div class='del'>- passthrough_out:</div><div class='del'>-        return ret;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    /* check for deflate content */</div><div class='add'>+    if (!cdc_check_content_for_deflate(xdata)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "Content not deflated, passing through ...");</div><div class='add'>+        goto passthrough_out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ci-&gt;iobref = iobref_new();</div><div class='add'>+    if (!ci-&gt;iobref)</div><div class='add'>+        goto passthrough_out;</div><div class='add'>+</div><div class='add'>+    /* do we need to do this? can we assume that one iovec</div><div class='add'>+     * will hold per request data every time?</div><div class='add'>+     *</div><div class='add'>+     * server/client protocol seems to deal with a single</div><div class='add'>+     * iovec even if op_ret &gt; 1M. So, it looks ok to</div><div class='add'>+     * assume that a single iovec will contain all the</div><div class='add'>+     * data (This saves us a lot from finding the trailer</div><div class='add'>+     * and the data since it could have been split-up onto</div><div class='add'>+     * two adjacent iovec's.</div><div class='add'>+     *</div><div class='add'>+     * But, in case this translator is loaded above quick-read</div><div class='add'>+     * for some reason, then it's entirely possible that we get</div><div class='add'>+     * multiple iovec's...</div><div class='add'>+     *</div><div class='add'>+     * This case (handled below) is not tested. (by loading the</div><div class='add'>+     * xlator below quick-read)</div><div class='add'>+     */</div><div class='add'>+</div><div class='add'>+    /* @@ I_HOPE_THIS_IS_NEVER_HIT */</div><div class='add'>+    if (ci-&gt;count &gt; 1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "unable to handle"</div><div class='add'>+               " multiple iovecs (%d in number)",</div><div class='add'>+               ci-&gt;count);</div><div class='add'>+        goto inflate_cleanup_out;</div><div class='add'>+        /* TODO: coallate all iovecs in one */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = do_cdc_decompress(this, priv, ci);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto inflate_cleanup_out;</div><div class='add'>+</div><div class='add'>+    ci-&gt;nbytes = ci-&gt;stream.total_out;</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "Inflated %ld to %ld bytes",</div><div class='add'>+           ci-&gt;stream.total_in, ci-&gt;stream.total_out);</div><div class='add'>+</div><div class='add'>+inflate_cleanup_out:</div><div class='add'>+    (void)inflateEnd(&amp;ci-&gt;stream);</div><div class='add'>+</div><div class='add'>+passthrough_out:</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='head'>diff --git a/xlators/features/compress/src/cdc.c b/xlators/features/compress/src/cdc.c<br/>index e33d4efc1a1..25ea6dc1846 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/compress/src/cdc.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/compress/src/cdc.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/compress/src/cdc.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/compress/src/cdc.c</a></div><div class='hunk'>@@ -18,339 +18,316 @@</div><div class='ctx'> #include "cdc-mem-types.h"</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cdc_cleanup_iobref (cdc_info_t *ci)</div><div class='add'>+cdc_cleanup_iobref(cdc_info_t *ci)</div><div class='ctx'> {</div><div class='del'>-        assert(ci-&gt;iobref != NULL);</div><div class='del'>-        iobref_clear (ci-&gt;iobref);</div><div class='add'>+    assert(ci-&gt;iobref != NULL);</div><div class='add'>+    iobref_clear(ci-&gt;iobref);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cdc_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno,</div><div class='del'>-               struct iovec *vector, int32_t count,</div><div class='del'>-               struct iatt *stbuf, struct iobref *iobref,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+cdc_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iovec *vector, int32_t count,</div><div class='add'>+              struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int         ret   = -1;</div><div class='del'>-        cdc_priv_t *priv  = NULL;</div><div class='del'>-        cdc_info_t  ci    = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cdc", this, default_out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, default_out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt;= 0)</div><div class='del'>-                goto default_out;</div><div class='del'>-</div><div class='del'>-        if ( (priv-&gt;min_file_size != 0)</div><div class='del'>-             &amp;&amp; (op_ret &lt; priv-&gt;min_file_size) )</div><div class='del'>-                goto default_out;</div><div class='del'>-</div><div class='del'>-        ci.count       = count;</div><div class='del'>-        ci.ibytes      = op_ret;</div><div class='del'>-        ci.vector      = vector;</div><div class='del'>-        ci.buf         = NULL;</div><div class='del'>-        ci.iobref      = NULL;</div><div class='del'>-        ci.ncount      = 0;</div><div class='del'>-        ci.crc         = 0;</div><div class='del'>-        ci.buffer_size = GF_CDC_DEF_BUFFERSIZE;</div><div class='del'>-</div><div class='del'>-/* A readv compresses on the server side and decompresses on the client side</div><div class='del'>- */</div><div class='del'>-        if (priv-&gt;op_mode == GF_CDC_MODE_SERVER) {</div><div class='del'>-                ret = cdc_compress (this, priv, &amp;ci, &amp;xdata);</div><div class='del'>-        } else if (priv-&gt;op_mode == GF_CDC_MODE_CLIENT) {</div><div class='del'>-                ret = cdc_decompress (this, priv, &amp;ci, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Invalid operation mode (%d)", priv-&gt;op_mode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret)</div><div class='del'>-                goto default_out;</div><div class='del'>-</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, ci.nbytes, op_errno,</div><div class='del'>-                             ci.vec, ci.ncount, stbuf, iobref,</div><div class='del'>-                             xdata);</div><div class='del'>-        cdc_cleanup_iobref (&amp;ci);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- default_out:</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno,</div><div class='del'>-                             vector, count, stbuf, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cdc_priv_t *priv = NULL;</div><div class='add'>+    cdc_info_t ci = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cdc", this, default_out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, default_out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt;= 0)</div><div class='add'>+        goto default_out;</div><div class='add'>+</div><div class='add'>+    if ((priv-&gt;min_file_size != 0) &amp;&amp; (op_ret &lt; priv-&gt;min_file_size))</div><div class='add'>+        goto default_out;</div><div class='add'>+</div><div class='add'>+    ci.count = count;</div><div class='add'>+    ci.ibytes = op_ret;</div><div class='add'>+    ci.vector = vector;</div><div class='add'>+    ci.buf = NULL;</div><div class='add'>+    ci.iobref = NULL;</div><div class='add'>+    ci.ncount = 0;</div><div class='add'>+    ci.crc = 0;</div><div class='add'>+    ci.buffer_size = GF_CDC_DEF_BUFFERSIZE;</div><div class='add'>+</div><div class='add'>+    /* A readv compresses on the server side and decompresses on the client side</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;op_mode == GF_CDC_MODE_SERVER) {</div><div class='add'>+        ret = cdc_compress(this, priv, &amp;ci, &amp;xdata);</div><div class='add'>+    } else if (priv-&gt;op_mode == GF_CDC_MODE_CLIENT) {</div><div class='add'>+        ret = cdc_decompress(this, priv, &amp;ci, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Invalid operation mode (%d)",</div><div class='add'>+               priv-&gt;op_mode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto default_out;</div><div class='add'>+</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, ci.nbytes, op_errno, ci.vec, ci.ncount,</div><div class='add'>+                        stbuf, iobref, xdata);</div><div class='add'>+    cdc_cleanup_iobref(&amp;ci);</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+default_out:</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                        iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cdc_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           fd_t *fd, size_t size, off_t offset, uint32_t flags,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+cdc_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+          off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        fop_readv_cbk_t cbk = NULL;</div><div class='add'>+    fop_readv_cbk_t cbk = NULL;</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_LIB_Z</div><div class='del'>-        cbk = cdc_readv_cbk;</div><div class='add'>+    cbk = cdc_readv_cbk;</div><div class='ctx'> #else</div><div class='del'>-        cbk = default_readv_cbk;</div><div class='add'>+    cbk = default_readv_cbk;</div><div class='ctx'> #endif</div><div class='del'>-        STACK_WIND (frame, cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='del'>-                    fd, size, offset, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, cbk, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='add'>+               fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cdc_writev_cbk (call_frame_t *frame,</div><div class='del'>-                void *cookie,</div><div class='del'>-                xlator_t *this,</div><div class='del'>-                int32_t op_ret,</div><div class='del'>-                int32_t op_errno,</div><div class='del'>-                struct iatt *prebuf,</div><div class='del'>-                struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+cdc_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+               struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-cdc_writev (call_frame_t *frame,</div><div class='del'>-            xlator_t *this,</div><div class='del'>-            fd_t *fd,</div><div class='del'>-            struct iovec *vector,</div><div class='del'>-            int32_t count,</div><div class='del'>-            off_t offset,</div><div class='del'>-            uint32_t flags,</div><div class='del'>-            struct iobref *iobref, dict_t *xdata)</div><div class='add'>+cdc_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+           int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          ret   = -1;</div><div class='del'>-        cdc_priv_t  *priv  = NULL;</div><div class='del'>-        cdc_info_t   ci    = {0,};</div><div class='del'>-        size_t       isize = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cdc", this, default_out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, default_out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        isize =  iov_length(vector, count);</div><div class='del'>-</div><div class='del'>-        if (isize &lt;= 0)</div><div class='del'>-            goto default_out;</div><div class='del'>-</div><div class='del'>-        if ( (priv-&gt;min_file_size != 0) &amp;&amp; (isize &lt; priv-&gt;min_file_size) )</div><div class='del'>-            goto default_out;</div><div class='del'>-</div><div class='del'>-        ci.count       = count;</div><div class='del'>-        ci.ibytes      = isize;</div><div class='del'>-        ci.vector      = vector;</div><div class='del'>-        ci.buf         = NULL;</div><div class='del'>-        ci.iobref      = NULL;</div><div class='del'>-        ci.ncount      = 0;</div><div class='del'>-        ci.crc         = 0;</div><div class='del'>-        ci.buffer_size = GF_CDC_DEF_BUFFERSIZE;</div><div class='del'>-</div><div class='del'>-/* A writev compresses on the client side and decompresses on the server side</div><div class='del'>- */</div><div class='del'>-	    if (priv-&gt;op_mode == GF_CDC_MODE_CLIENT) {</div><div class='del'>-		    ret = cdc_compress (this, priv, &amp;ci, &amp;xdata);</div><div class='del'>-	    } else if (priv-&gt;op_mode == GF_CDC_MODE_SERVER) {</div><div class='del'>-		    ret = cdc_decompress (this, priv, &amp;ci, xdata);</div><div class='del'>-	    } else {</div><div class='del'>-		    gf_log (this-&gt;name, GF_LOG_ERROR, "Invalid operation mode (%d) ", priv-&gt;op_mode);</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    if (ret)</div><div class='del'>-		    goto default_out;</div><div class='del'>-</div><div class='del'>-	    STACK_WIND (frame,</div><div class='del'>-                    cdc_writev_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, ci.vec, ci.ncount, offset, flags,</div><div class='del'>-                    iobref, xdata);</div><div class='del'>-</div><div class='del'>-        cdc_cleanup_iobref (&amp;ci);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- default_out:</div><div class='del'>-        STACK_WIND (frame,</div><div class='del'>-                    cdc_writev_cbk,</div><div class='del'>-                    FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, vector, count, offset, flags,</div><div class='del'>-                    iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    cdc_priv_t *priv = NULL;</div><div class='add'>+    cdc_info_t ci = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    size_t isize = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cdc", this, default_out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, default_out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    isize = iov_length(vector, count);</div><div class='add'>+</div><div class='add'>+    if (isize &lt;= 0)</div><div class='add'>+        goto default_out;</div><div class='add'>+</div><div class='add'>+    if ((priv-&gt;min_file_size != 0) &amp;&amp; (isize &lt; priv-&gt;min_file_size))</div><div class='add'>+        goto default_out;</div><div class='add'>+</div><div class='add'>+    ci.count = count;</div><div class='add'>+    ci.ibytes = isize;</div><div class='add'>+    ci.vector = vector;</div><div class='add'>+    ci.buf = NULL;</div><div class='add'>+    ci.iobref = NULL;</div><div class='add'>+    ci.ncount = 0;</div><div class='add'>+    ci.crc = 0;</div><div class='add'>+    ci.buffer_size = GF_CDC_DEF_BUFFERSIZE;</div><div class='add'>+</div><div class='add'>+    /* A writev compresses on the client side and decompresses on the server</div><div class='add'>+     * side</div><div class='add'>+     */</div><div class='add'>+    if (priv-&gt;op_mode == GF_CDC_MODE_CLIENT) {</div><div class='add'>+        ret = cdc_compress(this, priv, &amp;ci, &amp;xdata);</div><div class='add'>+    } else if (priv-&gt;op_mode == GF_CDC_MODE_SERVER) {</div><div class='add'>+        ret = cdc_decompress(this, priv, &amp;ci, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Invalid operation mode (%d) ",</div><div class='add'>+               priv-&gt;op_mode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret)</div><div class='add'>+        goto default_out;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, cdc_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, ci.vec, ci.ncount, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+</div><div class='add'>+    cdc_cleanup_iobref(&amp;ci);</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+default_out:</div><div class='add'>+    STACK_WIND(frame, cdc_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_cdc_mt_end);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                       "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_cdc_mt_end);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int         ret      = -1;</div><div class='del'>-        char       *temp_str = NULL;</div><div class='del'>-        cdc_priv_t *priv     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("cdc", this, err);</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Need subvolume == 1");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Dangling volume. Check volfile");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_cdc_mt_priv_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Check if debug mode is turned on */</div><div class='del'>-        GF_OPTION_INIT ("debug", priv-&gt;debug, bool, err);</div><div class='del'>-        if( priv-&gt;debug ) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "CDC debug option turned on");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Set Gzip Window Size */</div><div class='del'>-        GF_OPTION_INIT ("window-size", priv-&gt;window_size, int32, err);</div><div class='del'>-        if ( (priv-&gt;window_size &gt; GF_CDC_MAX_WINDOWSIZE)</div><div class='del'>-             || (priv-&gt;window_size &lt; GF_CDC_DEF_WINDOWSIZE) ) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Invalid gzip window size (%d), using default",</div><div class='del'>-                        priv-&gt;window_size);</div><div class='del'>-                priv-&gt;window_size = GF_CDC_DEF_WINDOWSIZE;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Set Gzip (De)Compression Level */</div><div class='del'>-        GF_OPTION_INIT ("compression-level", priv-&gt;cdc_level, int32, err);</div><div class='del'>-        if ( ((priv-&gt;cdc_level &lt; 1) || (priv-&gt;cdc_level &gt; 9))</div><div class='del'>-             &amp;&amp; (priv-&gt;cdc_level != GF_CDC_DEF_COMPRESSION) ) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Invalid gzip (de)compression level (%d),"</div><div class='del'>-                        " using default", priv-&gt;cdc_level);</div><div class='del'>-                priv-&gt;cdc_level = GF_CDC_DEF_COMPRESSION;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Set Gzip Memory Level */</div><div class='del'>-        GF_OPTION_INIT ("mem-level", priv-&gt;mem_level, int32, err);</div><div class='del'>-        if ( (priv-&gt;mem_level &lt; 1) || (priv-&gt;mem_level &gt; 9) ) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Invalid gzip memory level, using the default");</div><div class='del'>-                priv-&gt;mem_level = GF_CDC_DEF_MEMLEVEL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Set min file size to enable compression */</div><div class='del'>-        GF_OPTION_INIT ("min-size", priv-&gt;min_file_size, int32, err);</div><div class='del'>-</div><div class='del'>-        /* Mode of operation - Server/Client */</div><div class='del'>-        ret = dict_get_str (this-&gt;options, "mode", &amp;temp_str);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                        "Operation mode not specified !!");</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (GF_CDC_MODE_IS_CLIENT (temp_str)) {</div><div class='del'>-                priv-&gt;op_mode = GF_CDC_MODE_CLIENT;</div><div class='del'>-        } else if (GF_CDC_MODE_IS_SERVER (temp_str)) {</div><div class='del'>-                priv-&gt;op_mode = GF_CDC_MODE_SERVER;</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                        "Bogus operation mode (%s) specified", temp_str);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "CDC xlator loaded in (%s) mode",temp_str);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>- err:</div><div class='del'>-        if (priv)</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-</div><div class='del'>-        return -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *temp_str = NULL;</div><div class='add'>+    cdc_priv_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("cdc", this, err);</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Need subvolume == 1");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Dangling volume. Check volfile");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_cdc_mt_priv_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Check if debug mode is turned on */</div><div class='add'>+    GF_OPTION_INIT("debug", priv-&gt;debug, bool, err);</div><div class='add'>+    if (priv-&gt;debug) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "CDC debug option turned on");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Set Gzip Window Size */</div><div class='add'>+    GF_OPTION_INIT("window-size", priv-&gt;window_size, int32, err);</div><div class='add'>+    if ((priv-&gt;window_size &gt; GF_CDC_MAX_WINDOWSIZE) ||</div><div class='add'>+        (priv-&gt;window_size &lt; GF_CDC_DEF_WINDOWSIZE)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Invalid gzip window size (%d), using default",</div><div class='add'>+               priv-&gt;window_size);</div><div class='add'>+        priv-&gt;window_size = GF_CDC_DEF_WINDOWSIZE;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Set Gzip (De)Compression Level */</div><div class='add'>+    GF_OPTION_INIT("compression-level", priv-&gt;cdc_level, int32, err);</div><div class='add'>+    if (((priv-&gt;cdc_level &lt; 1) || (priv-&gt;cdc_level &gt; 9)) &amp;&amp;</div><div class='add'>+        (priv-&gt;cdc_level != GF_CDC_DEF_COMPRESSION)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Invalid gzip (de)compression level (%d),"</div><div class='add'>+               " using default",</div><div class='add'>+               priv-&gt;cdc_level);</div><div class='add'>+        priv-&gt;cdc_level = GF_CDC_DEF_COMPRESSION;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Set Gzip Memory Level */</div><div class='add'>+    GF_OPTION_INIT("mem-level", priv-&gt;mem_level, int32, err);</div><div class='add'>+    if ((priv-&gt;mem_level &lt; 1) || (priv-&gt;mem_level &gt; 9)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Invalid gzip memory level, using the default");</div><div class='add'>+        priv-&gt;mem_level = GF_CDC_DEF_MEMLEVEL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Set min file size to enable compression */</div><div class='add'>+    GF_OPTION_INIT("min-size", priv-&gt;min_file_size, int32, err);</div><div class='add'>+</div><div class='add'>+    /* Mode of operation - Server/Client */</div><div class='add'>+    ret = dict_get_str(this-&gt;options, "mode", &amp;temp_str);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_CRITICAL, "Operation mode not specified !!");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (GF_CDC_MODE_IS_CLIENT(temp_str)) {</div><div class='add'>+        priv-&gt;op_mode = GF_CDC_MODE_CLIENT;</div><div class='add'>+    } else if (GF_CDC_MODE_IS_SERVER(temp_str)) {</div><div class='add'>+        priv-&gt;op_mode = GF_CDC_MODE_SERVER;</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+               "Bogus operation mode (%s) specified", temp_str);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "CDC xlator loaded in (%s) mode",</div><div class='add'>+           temp_str);</div><div class='add'>+    return 0;</div><div class='add'>+</div><div class='add'>+err:</div><div class='add'>+    if (priv)</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        cdc_priv_t *priv = this-&gt;private;</div><div class='add'>+    cdc_priv_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv)</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        return;</div><div class='add'>+    if (priv)</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .readv  = cdc_readv,</div><div class='del'>-        .writev = cdc_writev,</div><div class='add'>+    .readv = cdc_readv,</div><div class='add'>+    .writev = cdc_writev,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"window-size"},</div><div class='del'>-          .default_value = "-15",</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .description = "Size of the zlib history buffer."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"mem-level"},</div><div class='del'>-          .default_value = "8",</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .description = "Memory allocated for internal compression state. "</div><div class='del'>-                         "1 uses minimum memory but is slow and reduces "</div><div class='del'>-                         "compression ratio; memLevel=9 uses maximum memory "</div><div class='del'>-                         "for optimal speed. The default value is 8."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"compression-level"},</div><div class='del'>-          .default_value = "-1",</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .description = "Compression levels \n"</div><div class='del'>-                         "0 : no compression, 1 : best speed, \n"</div><div class='del'>-                         "9 : best compression, -1 : default compression "</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"min-size"},</div><div class='del'>-          .default_value = "0",</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .description = "Data is compressed only when its size exceeds this."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"mode"},</div><div class='del'>-          .value = {"server", "client"},</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Set on the basis of where the xlator is loaded. "</div><div class='del'>-                         "This option should NOT be configured by user."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"debug"},</div><div class='del'>-          .default_value = "false",</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .description = "This is used in testing. Will dump compressed data "</div><div class='del'>-                         "to disk as a gzip file."</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL}</div><div class='del'>-        },</div><div class='add'>+    {.key = {"window-size"},</div><div class='add'>+     .default_value = "-15",</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .description = "Size of the zlib history buffer."},</div><div class='add'>+    {.key = {"mem-level"},</div><div class='add'>+     .default_value = "8",</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .description = "Memory allocated for internal compression state. "</div><div class='add'>+                    "1 uses minimum memory but is slow and reduces "</div><div class='add'>+                    "compression ratio; memLevel=9 uses maximum memory "</div><div class='add'>+                    "for optimal speed. The default value is 8."},</div><div class='add'>+    {.key = {"compression-level"},</div><div class='add'>+     .default_value = "-1",</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .description = "Compression levels \n"</div><div class='add'>+                    "0 : no compression, 1 : best speed, \n"</div><div class='add'>+                    "9 : best compression, -1 : default compression "},</div><div class='add'>+    {.key = {"min-size"},</div><div class='add'>+     .default_value = "0",</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .description = "Data is compressed only when its size exceeds this."},</div><div class='add'>+    {.key = {"mode"},</div><div class='add'>+     .value = {"server", "client"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "Set on the basis of where the xlator is loaded. "</div><div class='add'>+                    "This option should NOT be configured by user."},</div><div class='add'>+    {.key = {"debug"},</div><div class='add'>+     .default_value = "false",</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .description = "This is used in testing. Will dump compressed data "</div><div class='add'>+                    "to disk as a gzip file."},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/gfid-access/src/gfid-access.c b/xlators/features/gfid-access/src/gfid-access.c<br/>index 79c2ee911cd..3d5008666f6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/gfid-access/src/gfid-access.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/gfid-access/src/gfid-access.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/gfid-access/src/gfid-access.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/gfid-access/src/gfid-access.c</a></div><div class='hunk'>@@ -12,1418 +12,1399 @@</div><div class='ctx'> #include "byte-order.h"</div><div class='ctx'> #include "statedump.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ga_valid_inode_loc_copy (loc_t *dst, loc_t *src, xlator_t *this)</div><div class='add'>+ga_valid_inode_loc_copy(loc_t *dst, loc_t *src, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int      ret        = 0;</div><div class='del'>-        uint64_t value      = 0;</div><div class='del'>-</div><div class='del'>-        /* if its an entry operation, on the virtual */</div><div class='del'>-        /* directory inode as parent, we need to handle */</div><div class='del'>-        /* it properly */</div><div class='del'>-        ret = loc_copy (dst, src);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Change ALL virtual inodes with real-inodes in loc</div><div class='del'>-         */</div><div class='del'>-        if (dst-&gt;parent) {</div><div class='del'>-                ret = inode_ctx_get (dst-&gt;parent, this, &amp;value);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        ret = 0; //real-inode</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                inode_unref (dst-&gt;parent);</div><div class='del'>-                dst-&gt;parent = inode_ref ((inode_t*)value);</div><div class='del'>-                gf_uuid_copy (dst-&gt;pargfid, dst-&gt;parent-&gt;gfid);</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+</div><div class='add'>+    /* if its an entry operation, on the virtual */</div><div class='add'>+    /* directory inode as parent, we need to handle */</div><div class='add'>+    /* it properly */</div><div class='add'>+    ret = loc_copy(dst, src);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*</div><div class='add'>+     * Change ALL virtual inodes with real-inodes in loc</div><div class='add'>+     */</div><div class='add'>+    if (dst-&gt;parent) {</div><div class='add'>+        ret = inode_ctx_get(dst-&gt;parent, this, &amp;value);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            ret = 0;  // real-inode</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        inode_unref(dst-&gt;parent);</div><div class='add'>+        dst-&gt;parent = inode_ref((inode_t *)value);</div><div class='add'>+        gf_uuid_copy(dst-&gt;pargfid, dst-&gt;parent-&gt;gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dst-&gt;inode) {</div><div class='del'>-                ret = inode_ctx_get (dst-&gt;inode, this, &amp;value);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        ret = 0; //real-inode</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                inode_unref (dst-&gt;inode);</div><div class='del'>-                dst-&gt;inode = inode_ref ((inode_t*)value);</div><div class='del'>-                gf_uuid_copy (dst-&gt;gfid, dst-&gt;inode-&gt;gfid);</div><div class='add'>+    if (dst-&gt;inode) {</div><div class='add'>+        ret = inode_ctx_get(dst-&gt;inode, this, &amp;value);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            ret = 0;  // real-inode</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        inode_unref(dst-&gt;inode);</div><div class='add'>+        dst-&gt;inode = inode_ref((inode_t *)value);</div><div class='add'>+        gf_uuid_copy(dst-&gt;gfid, dst-&gt;inode-&gt;gfid);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-ga_newfile_args_free (ga_newfile_args_t *args)</div><div class='add'>+ga_newfile_args_free(ga_newfile_args_t *args)</div><div class='ctx'> {</div><div class='del'>-        if (!args)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!args)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args-&gt;bname);</div><div class='add'>+    GF_FREE(args-&gt;bname);</div><div class='ctx'> </div><div class='del'>-        if (S_ISLNK (args-&gt;st_mode) &amp;&amp; args-&gt;args.symlink.linkpath) {</div><div class='del'>-                GF_FREE (args-&gt;args.symlink.linkpath);</div><div class='del'>-                args-&gt;args.symlink.linkpath = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (S_ISLNK(args-&gt;st_mode) &amp;&amp; args-&gt;args.symlink.linkpath) {</div><div class='add'>+        GF_FREE(args-&gt;args.symlink.linkpath);</div><div class='add'>+        args-&gt;args.symlink.linkpath = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mem_put (args);</div><div class='add'>+    mem_put(args);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-ga_heal_args_free (ga_heal_args_t *args)</div><div class='add'>+ga_heal_args_free(ga_heal_args_t *args)</div><div class='ctx'> {</div><div class='del'>-        if (!args)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!args)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args-&gt;bname);</div><div class='add'>+    GF_FREE(args-&gt;bname);</div><div class='ctx'> </div><div class='del'>-        mem_put (args);</div><div class='add'>+    mem_put(args);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> ga_newfile_args_t *</div><div class='del'>-ga_newfile_parse_args (xlator_t *this, data_t *data)</div><div class='add'>+ga_newfile_parse_args(xlator_t *this, data_t *data)</div><div class='ctx'> {</div><div class='del'>-        ga_newfile_args_t *args     = NULL;</div><div class='del'>-        ga_private_t      *priv     = NULL;</div><div class='del'>-        int                len      = 0;</div><div class='del'>-        int                blob_len = 0;</div><div class='del'>-        int                min_len  = 0;</div><div class='del'>-        void              *blob     = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        blob = data-&gt;data;</div><div class='del'>-        blob_len = data-&gt;len;</div><div class='del'>-</div><div class='del'>-        min_len = sizeof (args-&gt;uid) + sizeof (args-&gt;gid) + sizeof (args-&gt;gfid)</div><div class='del'>-                + sizeof (args-&gt;st_mode) + 2 + 2;</div><div class='del'>-        if (blob_len &lt; min_len) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Invalid length: Total length is less "</div><div class='del'>-                        "than minimum length.");</div><div class='del'>-                goto err;</div><div class='add'>+    ga_newfile_args_t *args = NULL;</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    int blob_len = 0;</div><div class='add'>+    int min_len = 0;</div><div class='add'>+    void *blob = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    blob = data-&gt;data;</div><div class='add'>+    blob_len = data-&gt;len;</div><div class='add'>+</div><div class='add'>+    min_len = sizeof(args-&gt;uid) + sizeof(args-&gt;gid) + sizeof(args-&gt;gfid) +</div><div class='add'>+              sizeof(args-&gt;st_mode) + 2 + 2;</div><div class='add'>+    if (blob_len &lt; min_len) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Invalid length: Total length is less "</div><div class='add'>+               "than minimum length.");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    args = mem_get0(priv-&gt;newfile_args_pool);</div><div class='add'>+    if (args == NULL)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    args-&gt;uid = ntoh32(*(uint32_t *)blob);</div><div class='add'>+    blob += sizeof(uint32_t);</div><div class='add'>+    blob_len -= sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    args-&gt;gid = ntoh32(*(uint32_t *)blob);</div><div class='add'>+    blob += sizeof(uint32_t);</div><div class='add'>+    blob_len -= sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    memcpy(args-&gt;gfid, blob, sizeof(args-&gt;gfid));</div><div class='add'>+    blob += sizeof(args-&gt;gfid);</div><div class='add'>+    blob_len -= sizeof(args-&gt;gfid);</div><div class='add'>+</div><div class='add'>+    args-&gt;st_mode = ntoh32(*(uint32_t *)blob);</div><div class='add'>+    blob += sizeof(uint32_t);</div><div class='add'>+    blob_len -= sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+    len = strnlen(blob, blob_len);</div><div class='add'>+    if (len == blob_len) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. No null byte present.",</div><div class='add'>+               args-&gt;gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    args-&gt;bname = GF_MALLOC(len + 1, gf_common_mt_char);</div><div class='add'>+    if (args-&gt;bname == NULL)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    memcpy(args-&gt;bname, blob, (len + 1));</div><div class='add'>+    blob += (len + 1);</div><div class='add'>+    blob_len -= (len + 1);</div><div class='add'>+</div><div class='add'>+    if (S_ISDIR(args-&gt;st_mode)) {</div><div class='add'>+        if (blob_len &lt; sizeof(uint32_t)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        args = mem_get0 (priv-&gt;newfile_args_pool);</div><div class='del'>-        if (args == NULL)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        args-&gt;uid = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-        blob += sizeof (uint32_t);</div><div class='del'>-        blob_len -= sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-        args-&gt;gid = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-        blob += sizeof (uint32_t);</div><div class='del'>-        blob_len -= sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-        memcpy (args-&gt;gfid, blob, sizeof (args-&gt;gfid));</div><div class='del'>-        blob += sizeof (args-&gt;gfid);</div><div class='del'>-        blob_len -= sizeof (args-&gt;gfid);</div><div class='del'>-</div><div class='del'>-        args-&gt;st_mode = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-        blob += sizeof (uint32_t);</div><div class='del'>-        blob_len -= sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-        len = strnlen (blob, blob_len);</div><div class='add'>+        args-&gt;args.mkdir.mode = ntoh32(*(uint32_t *)blob);</div><div class='add'>+        blob += sizeof(uint32_t);</div><div class='add'>+        blob_len -= sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+        if (blob_len &lt; sizeof(uint32_t)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        args-&gt;args.mkdir.umask = ntoh32(*(uint32_t *)blob);</div><div class='add'>+        blob_len -= sizeof(uint32_t);</div><div class='add'>+        if (blob_len &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+    } else if (S_ISLNK(args-&gt;st_mode)) {</div><div class='add'>+        len = strnlen(blob, blob_len);</div><div class='ctx'>         if (len == blob_len) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "gfid: %s. No null byte present.",</div><div class='del'>-                        args-&gt;gfid);</div><div class='del'>-                goto err;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+        args-&gt;args.symlink.linkpath = GF_MALLOC(len + 1, gf_common_mt_char);</div><div class='add'>+        if (args-&gt;args.symlink.linkpath == NULL)</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-        args-&gt;bname = GF_MALLOC (len + 1, gf_common_mt_char);</div><div class='del'>-        if (args-&gt;bname == NULL)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        memcpy (args-&gt;bname, blob, (len + 1));</div><div class='del'>-        blob += (len + 1);</div><div class='add'>+        memcpy(args-&gt;args.symlink.linkpath, blob, (len + 1));</div><div class='ctx'>         blob_len -= (len + 1);</div><div class='del'>-</div><div class='del'>-        if (S_ISDIR (args-&gt;st_mode)) {</div><div class='del'>-                if (blob_len &lt; sizeof (uint32_t)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                args-&gt;args.mkdir.mode = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-                blob += sizeof (uint32_t);</div><div class='del'>-                blob_len -= sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-                if (blob_len &lt; sizeof (uint32_t)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                args-&gt;args.mkdir.umask = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-                blob_len -= sizeof (uint32_t);</div><div class='del'>-                if (blob_len &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-        } else if (S_ISLNK (args-&gt;st_mode)) {</div><div class='del'>-                len = strnlen (blob, blob_len);</div><div class='del'>-                if (len == blob_len) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                args-&gt;args.symlink.linkpath = GF_MALLOC (len + 1,</div><div class='del'>-                                                         gf_common_mt_char);</div><div class='del'>-                if (args-&gt;args.symlink.linkpath == NULL)</div><div class='del'>-                        goto err;</div><div class='del'>-</div><div class='del'>-                memcpy (args-&gt;args.symlink.linkpath, blob, (len + 1));</div><div class='del'>-                blob_len -= (len + 1);</div><div class='del'>-        } else {</div><div class='del'>-                if (blob_len &lt; sizeof (uint32_t)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                args-&gt;args.mknod.mode = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-                blob += sizeof (uint32_t);</div><div class='del'>-                blob_len -= sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-                if (blob_len &lt; sizeof (uint32_t)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                args-&gt;args.mknod.rdev = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-                blob += sizeof (uint32_t);</div><div class='del'>-                blob_len -= sizeof (uint32_t);</div><div class='del'>-</div><div class='del'>-                if (blob_len &lt; sizeof (uint32_t)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                "gfid: %s. Invalid length",</div><div class='del'>-                                args-&gt;gfid);</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-                args-&gt;args.mknod.umask = ntoh32 (*(uint32_t *)blob);</div><div class='del'>-                blob_len -= sizeof (uint32_t);</div><div class='add'>+    } else {</div><div class='add'>+        if (blob_len &lt; sizeof(uint32_t)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if (blob_len) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "gfid: %s. Invalid length",</div><div class='del'>-                        args-&gt;gfid);</div><div class='del'>-                goto err;</div><div class='add'>+        args-&gt;args.mknod.mode = ntoh32(*(uint32_t *)blob);</div><div class='add'>+        blob += sizeof(uint32_t);</div><div class='add'>+        blob_len -= sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+        if (blob_len &lt; sizeof(uint32_t)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='add'>+        }</div><div class='add'>+        args-&gt;args.mknod.rdev = ntoh32(*(uint32_t *)blob);</div><div class='add'>+        blob += sizeof(uint32_t);</div><div class='add'>+        blob_len -= sizeof(uint32_t);</div><div class='add'>+</div><div class='add'>+        if (blob_len &lt; sizeof(uint32_t)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+                   args-&gt;gfid);</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='add'>+        args-&gt;args.mknod.umask = ntoh32(*(uint32_t *)blob);</div><div class='add'>+        blob_len -= sizeof(uint32_t);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (blob_len) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "gfid: %s. Invalid length",</div><div class='add'>+               args-&gt;gfid);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return args;</div><div class='add'>+    return args;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (args)</div><div class='del'>-                ga_newfile_args_free (args);</div><div class='add'>+    if (args)</div><div class='add'>+        ga_newfile_args_free(args);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> ga_heal_args_t *</div><div class='del'>-ga_heal_parse_args (xlator_t *this, data_t *data)</div><div class='add'>+ga_heal_parse_args(xlator_t *this, data_t *data)</div><div class='ctx'> {</div><div class='del'>-        ga_heal_args_t *args     = NULL;</div><div class='del'>-        ga_private_t   *priv     = NULL;</div><div class='del'>-        void           *blob     = NULL;</div><div class='del'>-        int             len      = 0;</div><div class='del'>-        int             blob_len = 0;</div><div class='add'>+    ga_heal_args_t *args = NULL;</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='add'>+    void *blob = NULL;</div><div class='add'>+    int len = 0;</div><div class='add'>+    int blob_len = 0;</div><div class='ctx'> </div><div class='del'>-        blob = data-&gt;data;</div><div class='del'>-        blob_len = data-&gt;len;</div><div class='add'>+    blob = data-&gt;data;</div><div class='add'>+    blob_len = data-&gt;len;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        /* bname should at least contain a character */</div><div class='del'>-        if (blob_len &lt; (sizeof (args-&gt;gfid) + 2))</div><div class='del'>-                goto err;</div><div class='add'>+    /* bname should at least contain a character */</div><div class='add'>+    if (blob_len &lt; (sizeof(args-&gt;gfid) + 2))</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        args = mem_get0 (priv-&gt;heal_args_pool);</div><div class='del'>-        if (!args)</div><div class='del'>-                goto err;</div><div class='add'>+    args = mem_get0(priv-&gt;heal_args_pool);</div><div class='add'>+    if (!args)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        memcpy (args-&gt;gfid, blob, sizeof (args-&gt;gfid));</div><div class='del'>-        blob += sizeof (args-&gt;gfid);</div><div class='del'>-        blob_len -= sizeof (args-&gt;gfid);</div><div class='add'>+    memcpy(args-&gt;gfid, blob, sizeof(args-&gt;gfid));</div><div class='add'>+    blob += sizeof(args-&gt;gfid);</div><div class='add'>+    blob_len -= sizeof(args-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        len = strnlen (blob, blob_len);</div><div class='del'>-        if (len == blob_len)</div><div class='del'>-                goto err;</div><div class='add'>+    len = strnlen(blob, blob_len);</div><div class='add'>+    if (len == blob_len)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        args-&gt;bname = GF_MALLOC (len + 1, gf_common_mt_char);</div><div class='del'>-        if (!args-&gt;bname)</div><div class='del'>-                goto err;</div><div class='add'>+    args-&gt;bname = GF_MALLOC(len + 1, gf_common_mt_char);</div><div class='add'>+    if (!args-&gt;bname)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        memcpy (args-&gt;bname, blob, len);</div><div class='del'>-        args-&gt;bname[len] = '\0';</div><div class='del'>-        blob_len -= (len + 1);</div><div class='add'>+    memcpy(args-&gt;bname, blob, len);</div><div class='add'>+    args-&gt;bname[len] = '\0';</div><div class='add'>+    blob_len -= (len + 1);</div><div class='ctx'> </div><div class='del'>-        if (blob_len)</div><div class='del'>-                goto err;</div><div class='add'>+    if (blob_len)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        return args;</div><div class='add'>+    return args;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (args)</div><div class='del'>-                ga_heal_args_free (args);</div><div class='add'>+    if (args)</div><div class='add'>+        ga_heal_args_free(args);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-ga_fill_tmp_loc (loc_t *loc, xlator_t *this, uuid_t gfid,</div><div class='del'>-                 char *bname, dict_t *xdata, loc_t *new_loc)</div><div class='add'>+ga_fill_tmp_loc(loc_t *loc, xlator_t *this, uuid_t gfid, char *bname,</div><div class='add'>+                dict_t *xdata, loc_t *new_loc)</div><div class='ctx'> {</div><div class='del'>-        int       ret    = -1;</div><div class='del'>-        uint64_t  value  = 0;</div><div class='del'>-        inode_t  *parent = NULL;</div><div class='del'>-        unsigned char *gfid_ptr = NULL;</div><div class='del'>-</div><div class='del'>-        parent = loc-&gt;inode;</div><div class='del'>-        ret = inode_ctx_get (loc-&gt;inode, this, &amp;value);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                parent = (void *)value;</div><div class='del'>-                if (gf_uuid_is_null (parent-&gt;gfid))</div><div class='del'>-                        parent = loc-&gt;inode;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* parent itself should be looked up */</div><div class='del'>-        gf_uuid_copy (new_loc-&gt;pargfid, parent-&gt;gfid);</div><div class='del'>-        new_loc-&gt;parent = inode_ref (parent);</div><div class='del'>-</div><div class='del'>-        new_loc-&gt;inode = inode_grep (parent-&gt;table, parent, bname);</div><div class='del'>-        if (!new_loc-&gt;inode) {</div><div class='del'>-                new_loc-&gt;inode = inode_new (parent-&gt;table);</div><div class='del'>-                gf_uuid_copy (new_loc-&gt;inode-&gt;gfid, gfid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        loc_path (new_loc, bname);</div><div class='del'>-        if (new_loc-&gt;path) {</div><div class='del'>-                new_loc-&gt;name = strrchr (new_loc-&gt;path, '/');</div><div class='del'>-                if (new_loc-&gt;name)</div><div class='del'>-                        new_loc-&gt;name++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gfid_ptr = GF_MALLOC (sizeof(uuid_t), gf_common_mt_uuid_t);</div><div class='del'>-        if (!gfid_ptr) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        gf_uuid_copy (gfid_ptr, gfid);</div><div class='del'>-        ret = dict_set_gfuuid (xdata, "gfid-req", gfid_ptr, false);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    unsigned char *gfid_ptr = NULL;</div><div class='add'>+</div><div class='add'>+    parent = loc-&gt;inode;</div><div class='add'>+    ret = inode_ctx_get(loc-&gt;inode, this, &amp;value);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        parent = (void *)value;</div><div class='add'>+        if (gf_uuid_is_null(parent-&gt;gfid))</div><div class='add'>+            parent = loc-&gt;inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* parent itself should be looked up */</div><div class='add'>+    gf_uuid_copy(new_loc-&gt;pargfid, parent-&gt;gfid);</div><div class='add'>+    new_loc-&gt;parent = inode_ref(parent);</div><div class='add'>+</div><div class='add'>+    new_loc-&gt;inode = inode_grep(parent-&gt;table, parent, bname);</div><div class='add'>+    if (!new_loc-&gt;inode) {</div><div class='add'>+        new_loc-&gt;inode = inode_new(parent-&gt;table);</div><div class='add'>+        gf_uuid_copy(new_loc-&gt;inode-&gt;gfid, gfid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    loc_path(new_loc, bname);</div><div class='add'>+    if (new_loc-&gt;path) {</div><div class='add'>+        new_loc-&gt;name = strrchr(new_loc-&gt;path, '/');</div><div class='add'>+        if (new_loc-&gt;name)</div><div class='add'>+            new_loc-&gt;name++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gfid_ptr = GF_MALLOC(sizeof(uuid_t), gf_common_mt_uuid_t);</div><div class='add'>+    if (!gfid_ptr) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    gf_uuid_copy(gfid_ptr, gfid);</div><div class='add'>+    ret = dict_set_gfuuid(xdata, "gfid-req", gfid_ptr, false);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; gfid_ptr)</div><div class='del'>-                GF_FREE (gfid_ptr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &amp;&amp; gfid_ptr)</div><div class='add'>+        GF_FREE(gfid_ptr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__is_gfid_access_dir (uuid_t gfid)</div><div class='add'>+__is_gfid_access_dir(uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        uuid_t  aux_gfid;</div><div class='add'>+    uuid_t aux_gfid;</div><div class='ctx'> </div><div class='del'>-        memset (aux_gfid, 0, 16);</div><div class='del'>-        aux_gfid[15] = GF_AUX_GFID;</div><div class='add'>+    memset(aux_gfid, 0, 16);</div><div class='add'>+    aux_gfid[15] = GF_AUX_GFID;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_compare (gfid, aux_gfid) == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (gf_uuid_compare(gfid, aux_gfid) == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+ga_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        uint64_t  value = 0;</div><div class='del'>-        inode_t  *tmp_inode = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    inode_t *tmp_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_del (inode, this, &amp;value);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = inode_ctx_del(inode, this, &amp;value);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        tmp_inode = (void *)value;</div><div class='del'>-        inode_unref (tmp_inode);</div><div class='add'>+    tmp_inode = (void *)value;</div><div class='add'>+    inode_unref(tmp_inode);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-ga_heal_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno,</div><div class='del'>-             inode_t *inode, struct iatt *stat, dict_t *dict,</div><div class='del'>-             struct iatt *postparent)</div><div class='add'>+ga_heal_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, inode_t *inode, struct iatt *stat, dict_t *dict,</div><div class='add'>+            struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *orig_frame = NULL;</div><div class='add'>+    call_frame_t *orig_frame = NULL;</div><div class='ctx'> </div><div class='del'>-        orig_frame = frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    orig_frame = frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        /* don't worry about inode linking and other stuff. They'll happen on</div><div class='del'>-         * the next lookup.</div><div class='del'>-         */</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='add'>+    /* don't worry about inode linking and other stuff. They'll happen on</div><div class='add'>+     * the next lookup.</div><div class='add'>+     */</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, orig_frame, op_ret, op_errno, dict);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, orig_frame, op_ret, op_errno, dict);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ga_newentry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 inode_t *inode, struct iatt *buf,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+ga_newentry_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ga_local_t *local = NULL;</div><div class='add'>+    ga_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        /* don't worry about inode linking and other stuff. They'll happen on</div><div class='del'>-         * the next lookup.</div><div class='del'>-         */</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='add'>+    /* don't worry about inode linking and other stuff. They'll happen on</div><div class='add'>+     * the next lookup.</div><div class='add'>+     */</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, local-&gt;orig_frame, op_ret,</div><div class='del'>-                             op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, local-&gt;orig_frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        mem_put (local);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    mem_put(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ga_newentry_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                        struct iatt *stat, dict_t *xdata,</div><div class='del'>-                        struct iatt *postparent)</div><div class='add'>+ga_newentry_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                       struct iatt *stat, dict_t *xdata,</div><div class='add'>+                       struct iatt *postparent)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        ga_local_t *local = NULL;</div><div class='add'>+    ga_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if ((op_ret &lt; 0) &amp;&amp; ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE)))</div><div class='del'>-                goto err;</div><div class='add'>+    if ((op_ret &lt; 0) &amp;&amp; ((op_errno != ENOENT) &amp;&amp; (op_errno != ESTALE)))</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, ga_newentry_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mknod, &amp;local-&gt;loc, local-&gt;mode,</div><div class='del'>-                    local-&gt;rdev, local-&gt;umask, local-&gt;xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, ga_newentry_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, &amp;local-&gt;loc, local-&gt;mode,</div><div class='add'>+               local-&gt;rdev, local-&gt;umask, local-&gt;xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, local-&gt;orig_frame, op_ret, op_errno,</div><div class='del'>-                             xdata);</div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        mem_put (local);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, local-&gt;orig_frame, op_ret, op_errno, xdata);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    mem_put(local);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_new_entry (call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *data,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+ga_new_entry(call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *data,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int                ret       = -1;</div><div class='del'>-        ga_newfile_args_t *args      = NULL;</div><div class='del'>-        loc_t              tmp_loc   = {0,};</div><div class='del'>-        call_frame_t      *new_frame = NULL;</div><div class='del'>-        ga_local_t        *local     = NULL;</div><div class='del'>-        uuid_t             gfid      = {0,};</div><div class='del'>-</div><div class='del'>-        args = ga_newfile_parse_args (this, data);</div><div class='del'>-        if (!args)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = gf_uuid_parse (args-&gt;gfid, gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-        } else {</div><div class='del'>-                xdata = dict_ref (xdata);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ga_fill_tmp_loc (loc, this, gfid,</div><div class='del'>-                               args-&gt;bname, xdata, &amp;tmp_loc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        new_frame = copy_frame (frame);</div><div class='del'>-        if (!new_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        local-&gt;orig_frame = frame;</div><div class='del'>-</div><div class='del'>-        loc_copy (&amp;local-&gt;loc, &amp;tmp_loc);</div><div class='del'>-</div><div class='del'>-        new_frame-&gt;local = local;</div><div class='del'>-        new_frame-&gt;root-&gt;uid = args-&gt;uid;</div><div class='del'>-        new_frame-&gt;root-&gt;gid = args-&gt;gid;</div><div class='del'>-</div><div class='del'>-        if (S_ISDIR (args-&gt;st_mode)) {</div><div class='del'>-                STACK_WIND (new_frame, ga_newentry_cbk,</div><div class='del'>-                            FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;mkdir,</div><div class='del'>-                            &amp;tmp_loc, args-&gt;args.mkdir.mode,</div><div class='del'>-                            args-&gt;args.mkdir.umask, xdata);</div><div class='del'>-        } else if (S_ISLNK (args-&gt;st_mode)) {</div><div class='del'>-                STACK_WIND (new_frame, ga_newentry_cbk,</div><div class='del'>-                            FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='del'>-                            args-&gt;args.symlink.linkpath,</div><div class='del'>-                            &amp;tmp_loc, 0, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                /* use 07777 (4 7s) for considering the Sticky bits etc) */</div><div class='del'>-                ((ga_local_t *)new_frame-&gt;local)-&gt;mode =</div><div class='del'>-                     (S_IFMT &amp; args-&gt;st_mode) | (07777 &amp; args-&gt;args.mknod.mode);</div><div class='del'>-</div><div class='del'>-                ((ga_local_t *)new_frame-&gt;local)-&gt;umask =</div><div class='del'>-                                                         args-&gt;args.mknod.umask;</div><div class='del'>-                ((ga_local_t *)new_frame-&gt;local)-&gt;rdev  = args-&gt;args.mknod.rdev;</div><div class='del'>-                ((ga_local_t *)new_frame-&gt;local)-&gt;xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-                /* send a named lookup, so that dht can cleanup up stale linkto</div><div class='del'>-                 * files etc.</div><div class='del'>-                 */</div><div class='del'>-                STACK_WIND (new_frame, ga_newentry_lookup_cbk,</div><div class='del'>-                            FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-                            &amp;tmp_loc, NULL);</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ga_newfile_args_t *args = NULL;</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *new_frame = NULL;</div><div class='add'>+    ga_local_t *local = NULL;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    args = ga_newfile_parse_args(this, data);</div><div class='add'>+    if (!args)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = gf_uuid_parse(args-&gt;gfid, gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+    } else {</div><div class='add'>+        xdata = dict_ref(xdata);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ga_fill_tmp_loc(loc, this, gfid, args-&gt;bname, xdata, &amp;tmp_loc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    new_frame = copy_frame(frame);</div><div class='add'>+    if (!new_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    local-&gt;orig_frame = frame;</div><div class='add'>+</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, &amp;tmp_loc);</div><div class='add'>+</div><div class='add'>+    new_frame-&gt;local = local;</div><div class='add'>+    new_frame-&gt;root-&gt;uid = args-&gt;uid;</div><div class='add'>+    new_frame-&gt;root-&gt;gid = args-&gt;gid;</div><div class='add'>+</div><div class='add'>+    if (S_ISDIR(args-&gt;st_mode)) {</div><div class='add'>+        STACK_WIND(new_frame, ga_newentry_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;mkdir, &amp;tmp_loc,</div><div class='add'>+                   args-&gt;args.mkdir.mode, args-&gt;args.mkdir.umask, xdata);</div><div class='add'>+    } else if (S_ISLNK(args-&gt;st_mode)) {</div><div class='add'>+        STACK_WIND(new_frame, ga_newentry_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='add'>+                   args-&gt;args.symlink.linkpath, &amp;tmp_loc, 0, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        /* use 07777 (4 7s) for considering the Sticky bits etc) */</div><div class='add'>+        ((ga_local_t *)new_frame-&gt;local)-&gt;mode = (S_IFMT &amp; args-&gt;st_mode) |</div><div class='add'>+                                                 (07777 &amp;</div><div class='add'>+                                                  args-&gt;args.mknod.mode);</div><div class='add'>+</div><div class='add'>+        ((ga_local_t *)new_frame-&gt;local)-&gt;umask = args-&gt;args.mknod.umask;</div><div class='add'>+        ((ga_local_t *)new_frame-&gt;local)-&gt;rdev = args-&gt;args.mknod.rdev;</div><div class='add'>+        ((ga_local_t *)new_frame-&gt;local)-&gt;xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+        /* send a named lookup, so that dht can cleanup up stale linkto</div><div class='add'>+         * files etc.</div><div class='add'>+         */</div><div class='add'>+        STACK_WIND(new_frame, ga_newentry_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;lookup, &amp;tmp_loc, NULL);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        ga_newfile_args_free (args);</div><div class='add'>+    ga_newfile_args_free(args);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;tmp_loc);</div><div class='add'>+    loc_wipe(&amp;tmp_loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_heal_entry (call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *data,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+ga_heal_entry(call_frame_t *frame, xlator_t *this, loc_t *loc, data_t *data,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             ret       = -1;</div><div class='del'>-        ga_heal_args_t *args      = NULL;</div><div class='del'>-        loc_t           tmp_loc   = {0,};</div><div class='del'>-        call_frame_t   *new_frame = NULL;</div><div class='del'>-        uuid_t          gfid      = {0,};</div><div class='del'>-</div><div class='del'>-        args = ga_heal_parse_args (this, data);</div><div class='del'>-        if (!args)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = gf_uuid_parse (args-&gt;gfid, gfid);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!xdata)</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-        else</div><div class='del'>-                xdata = dict_ref (xdata);</div><div class='del'>-</div><div class='del'>-        if (!xdata) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = ga_fill_tmp_loc (loc, this, gfid, args-&gt;bname,</div><div class='del'>-                               xdata, &amp;tmp_loc);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        new_frame = copy_frame (frame);</div><div class='del'>-        if (!new_frame)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        new_frame-&gt;local = (void *)frame;</div><div class='del'>-</div><div class='del'>-        STACK_WIND (new_frame, ga_heal_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-                    &amp;tmp_loc, xdata);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    ga_heal_args_t *args = NULL;</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    call_frame_t *new_frame = NULL;</div><div class='add'>+    uuid_t gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    args = ga_heal_parse_args(this, data);</div><div class='add'>+    if (!args)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = gf_uuid_parse(args-&gt;gfid, gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!xdata)</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+    else</div><div class='add'>+        xdata = dict_ref(xdata);</div><div class='add'>+</div><div class='add'>+    if (!xdata) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = ga_fill_tmp_loc(loc, this, gfid, args-&gt;bname, xdata, &amp;tmp_loc);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    new_frame = copy_frame(frame);</div><div class='add'>+    if (!new_frame)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    new_frame-&gt;local = (void *)frame;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(new_frame, ga_heal_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, &amp;tmp_loc, xdata);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (args)</div><div class='del'>-                ga_heal_args_free (args);</div><div class='add'>+    if (args)</div><div class='add'>+        ga_heal_args_free(args);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;tmp_loc);</div><div class='add'>+    loc_wipe(&amp;tmp_loc);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+ga_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='del'>-             int32_t flags, dict_t *xdata)</div><div class='add'>+ga_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+            int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        data_t  *data     = NULL;</div><div class='del'>-        int      op_errno = ENOMEM;</div><div class='del'>-        int      ret      = 0;</div><div class='del'>-        loc_t   ga_loc    = {0, };</div><div class='del'>-</div><div class='del'>-        GFID_ACCESS_INODE_OP_CHECK (loc, op_errno, err);</div><div class='del'>-</div><div class='del'>-        data = dict_get (dict, GF_FUSE_AUX_GFID_NEWFILE);</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = ga_new_entry (frame, this, loc, data, xdata);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GFID_ACCESS_INODE_OP_CHECK(loc, op_errno, err);</div><div class='add'>+</div><div class='add'>+    data = dict_get(dict, GF_FUSE_AUX_GFID_NEWFILE);</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = ga_new_entry(frame, this, loc, data, xdata);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data = dict_get (dict, GF_FUSE_AUX_GFID_HEAL);</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = ga_heal_entry (frame, this, loc, data, xdata);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    data = dict_get(dict, GF_FUSE_AUX_GFID_HEAL);</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = ga_heal_entry(frame, this, loc, data, xdata);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto err;</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        //If the inode is a virtual inode change the inode otherwise perform</div><div class='del'>-        //the operation on same inode</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    // If the inode is a virtual inode change the inode otherwise perform</div><div class='add'>+    // the operation on same inode</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, ga_setxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr, &amp;ga_loc, dict, flags,</div><div class='del'>-                    xdata);</div><div class='add'>+    STACK_WIND(frame, ga_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, &amp;ga_loc, dict, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, -1, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, -1, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-ga_virtual_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                       int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                       struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+ga_virtual_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                      struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        int             ret                     = 0;</div><div class='del'>-        inode_t         *cbk_inode              = NULL;</div><div class='del'>-        inode_t         *true_inode             = NULL;</div><div class='del'>-        uuid_t          random_gfid             = {0,};</div><div class='del'>-        inode_t         *linked_inode           = NULL;</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;local)</div><div class='del'>-                cbk_inode = frame-&gt;local;</div><div class='del'>-        else</div><div class='del'>-                cbk_inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        if (op_ret)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (!IA_ISDIR (buf-&gt;ia_type))</div><div class='add'>+    int ret = 0;</div><div class='add'>+    inode_t *cbk_inode = NULL;</div><div class='add'>+    inode_t *true_inode = NULL;</div><div class='add'>+    uuid_t random_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;local)</div><div class='add'>+        cbk_inode = frame-&gt;local;</div><div class='add'>+    else</div><div class='add'>+        cbk_inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    if (op_ret)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (!IA_ISDIR(buf-&gt;ia_type))</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    /* need to send back a different inode for linking in itable */</div><div class='add'>+    if (cbk_inode == inode) {</div><div class='add'>+        /* check if the inode is in the 'itable' or</div><div class='add'>+           if its just previously discover()'d inode */</div><div class='add'>+        true_inode = inode_find(inode-&gt;table, buf-&gt;ia_gfid);</div><div class='add'>+        if (!true_inode) {</div><div class='add'>+            /* This unref is for 'inode_ref()' done in beginning.</div><div class='add'>+               This is needed as cbk_inode is allocated new inode</div><div class='add'>+               whose unref is taken at the end*/</div><div class='add'>+            inode_unref(cbk_inode);</div><div class='add'>+            cbk_inode = inode_new(inode-&gt;table);</div><div class='add'>+</div><div class='add'>+            if (!cbk_inode) {</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = ENOMEM;</div><div class='ctx'>                 goto unwind;</div><div class='add'>+            }</div><div class='add'>+            /* the inode is not present in itable, ie, the actual</div><div class='add'>+               path is not yet looked up. Use the current inode</div><div class='add'>+               itself for now */</div><div class='ctx'> </div><div class='del'>-        /* need to send back a different inode for linking in itable */</div><div class='del'>-        if (cbk_inode == inode) {</div><div class='del'>-                /* check if the inode is in the 'itable' or</div><div class='del'>-                   if its just previously discover()'d inode */</div><div class='del'>-                true_inode = inode_find (inode-&gt;table, buf-&gt;ia_gfid);</div><div class='del'>-                if (!true_inode) {</div><div class='del'>-                        /* This unref is for 'inode_ref()' done in beginning.</div><div class='del'>-                           This is needed as cbk_inode is allocated new inode</div><div class='del'>-                           whose unref is taken at the end*/</div><div class='del'>-                        inode_unref (cbk_inode);</div><div class='del'>-                        cbk_inode = inode_new (inode-&gt;table);</div><div class='del'>-</div><div class='del'>-                        if (!cbk_inode) {</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                goto unwind;</div><div class='del'>-                        }</div><div class='del'>-                        /* the inode is not present in itable, ie, the actual</div><div class='del'>-                           path is not yet looked up. Use the current inode</div><div class='del'>-                           itself for now */</div><div class='del'>-</div><div class='del'>-                        linked_inode = inode_link (inode, NULL, NULL, buf);</div><div class='del'>-                        inode = linked_inode;</div><div class='del'>-                } else {</div><div class='del'>-                        /* 'inode_ref()' has been done in inode_find() */</div><div class='del'>-                        inode = true_inode;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = inode_ctx_put (cbk_inode, this, (uint64_t)inode);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "failed to set the inode ctx with"</div><div class='del'>-                                "the actual inode");</div><div class='del'>-                        if (inode)</div><div class='del'>-                                inode_unref (inode);</div><div class='del'>-                }</div><div class='del'>-                inode = NULL;</div><div class='add'>+            linked_inode = inode_link(inode, NULL, NULL, buf);</div><div class='add'>+            inode = linked_inode;</div><div class='add'>+        } else {</div><div class='add'>+            /* 'inode_ref()' has been done in inode_find() */</div><div class='add'>+            inode = true_inode;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (!gf_uuid_is_null (cbk_inode-&gt;gfid)) {</div><div class='del'>-                /* if the previous linked inode is used, use the</div><div class='del'>-                   same gfid */</div><div class='del'>-                gf_uuid_copy (random_gfid, cbk_inode-&gt;gfid);</div><div class='del'>-        } else {</div><div class='del'>-                /* replace the buf-&gt;ia_gfid to a random gfid</div><div class='del'>-                   for directory, for files, what we received is fine */</div><div class='del'>-                gf_uuid_generate (random_gfid);</div><div class='add'>+        ret = inode_ctx_put(cbk_inode, this, (uint64_t)inode);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "failed to set the inode ctx with"</div><div class='add'>+                   "the actual inode");</div><div class='add'>+            if (inode)</div><div class='add'>+                inode_unref(inode);</div><div class='ctx'>         }</div><div class='add'>+        inode = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (buf-&gt;ia_gfid, random_gfid);</div><div class='add'>+    if (!gf_uuid_is_null(cbk_inode-&gt;gfid)) {</div><div class='add'>+        /* if the previous linked inode is used, use the</div><div class='add'>+           same gfid */</div><div class='add'>+        gf_uuid_copy(random_gfid, cbk_inode-&gt;gfid);</div><div class='add'>+    } else {</div><div class='add'>+        /* replace the buf-&gt;ia_gfid to a random gfid</div><div class='add'>+           for directory, for files, what we received is fine */</div><div class='add'>+        gf_uuid_generate(random_gfid);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        buf-&gt;ia_ino = gfid_to_ino (buf-&gt;ia_gfid);</div><div class='add'>+    gf_uuid_copy(buf-&gt;ia_gfid, random_gfid);</div><div class='add'>+</div><div class='add'>+    buf-&gt;ia_ino = gfid_to_ino(buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        /* Lookup on non-existing gfid returns ESTALE.</div><div class='del'>-           Convert into ENOENT for virtual lookup*/</div><div class='del'>-        if (op_errno == ESTALE)</div><div class='del'>-               op_errno = ENOENT;</div><div class='add'>+    /* Lookup on non-existing gfid returns ESTALE.</div><div class='add'>+       Convert into ENOENT for virtual lookup*/</div><div class='add'>+    if (op_errno == ESTALE)</div><div class='add'>+        op_errno = ENOENT;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, cbk_inode, buf,</div><div class='del'>-                             xdata, postparent);</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, cbk_inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='ctx'> </div><div class='del'>-        /* Also handles inode_unref of frame-&gt;local if done in ga_lookup */</div><div class='del'>-        if (cbk_inode)</div><div class='del'>-               inode_unref (cbk_inode);</div><div class='add'>+    /* Also handles inode_unref of frame-&gt;local if done in ga_lookup */</div><div class='add'>+    if (cbk_inode)</div><div class='add'>+        inode_unref(cbk_inode);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-               struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+ga_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+              struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        ga_private_t *priv = NULL;</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        /* if the entry in question is not 'root',</div><div class='del'>-           then follow the normal path */</div><div class='del'>-        if (op_ret || !__is_root_gfid(buf-&gt;ia_gfid))</div><div class='del'>-                goto unwind;</div><div class='add'>+    /* if the entry in question is not 'root',</div><div class='add'>+       then follow the normal path */</div><div class='add'>+    if (op_ret || !__is_root_gfid(buf-&gt;ia_gfid))</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        /* do we need to copy root stbuf every time? */</div><div class='del'>-        /* mostly yes, as we want to have the 'stat' info show latest</div><div class='del'>-           in every _cbk() */</div><div class='add'>+    /* do we need to copy root stbuf every time? */</div><div class='add'>+    /* mostly yes, as we want to have the 'stat' info show latest</div><div class='add'>+       in every _cbk() */</div><div class='ctx'> </div><div class='del'>-        /* keep the reference for root stat buf */</div><div class='del'>-        priv-&gt;root_stbuf = *buf;</div><div class='del'>-        priv-&gt;gfiddir_stbuf = priv-&gt;root_stbuf;</div><div class='del'>-        priv-&gt;gfiddir_stbuf.ia_gfid[15] = GF_AUX_GFID;</div><div class='del'>-        priv-&gt;gfiddir_stbuf.ia_ino = GF_AUX_GFID;</div><div class='add'>+    /* keep the reference for root stat buf */</div><div class='add'>+    priv-&gt;root_stbuf = *buf;</div><div class='add'>+    priv-&gt;gfiddir_stbuf = priv-&gt;root_stbuf;</div><div class='add'>+    priv-&gt;gfiddir_stbuf.ia_gfid[15] = GF_AUX_GFID;</div><div class='add'>+    priv-&gt;gfiddir_stbuf.ia_ino = GF_AUX_GFID;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             xdata, postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+ga_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        ga_private_t *priv     = NULL;</div><div class='del'>-        int           ret      = -1;</div><div class='del'>-        uuid_t        tmp_gfid = {0,};</div><div class='del'>-        loc_t         tmp_loc  = {0,};</div><div class='del'>-        uint64_t      value    = 0;</div><div class='del'>-        inode_t      *inode    = NULL;</div><div class='del'>-        inode_t      *true_inode    = NULL;</div><div class='del'>-        int32_t       op_errno = ENOENT;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Handle nameless lookup on ".gfid" */</div><div class='del'>-        if (!loc-&gt;parent &amp;&amp; __is_gfid_access_dir(loc-&gt;gfid)) {</div><div class='del'>-                STACK_UNWIND_STRICT (lookup, frame, 0, 0, loc-&gt;inode,</div><div class='del'>-                                     &amp;priv-&gt;gfiddir_stbuf, xdata,</div><div class='del'>-                                     &amp;priv-&gt;root_stbuf);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if its discover(), no need for any action here */</div><div class='del'>-        if (!loc-&gt;name)</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        /* if its revalidate, and inode is not of type directory,</div><div class='del'>-           proceed with 'wind' */</div><div class='del'>-        if (loc-&gt;inode &amp;&amp; loc-&gt;inode-&gt;ia_type &amp;&amp;</div><div class='del'>-            !IA_ISDIR (loc-&gt;inode-&gt;ia_type)) {</div><div class='del'>-</div><div class='del'>-                /* a revalidate on ".gfid/&lt;dentry&gt;" is possible, check for it */</div><div class='del'>-                if (((loc-&gt;parent &amp;&amp;</div><div class='del'>-                      __is_gfid_access_dir (loc-&gt;parent-&gt;gfid)) ||</div><div class='del'>-                     __is_gfid_access_dir (loc-&gt;pargfid))) {</div><div class='del'>-</div><div class='del'>-                        /* here, just send 'loc-&gt;gfid' and 'loc-&gt;inode' */</div><div class='del'>-                        tmp_loc.inode = inode_ref (loc-&gt;inode);</div><div class='del'>-                        gf_uuid_copy (tmp_loc.gfid, loc-&gt;inode-&gt;gfid);</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uuid_t tmp_gfid = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t tmp_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    inode_t *true_inode = NULL;</div><div class='add'>+    int32_t op_errno = ENOENT;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Handle nameless lookup on ".gfid" */</div><div class='add'>+    if (!loc-&gt;parent &amp;&amp; __is_gfid_access_dir(loc-&gt;gfid)) {</div><div class='add'>+        STACK_UNWIND_STRICT(lookup, frame, 0, 0, loc-&gt;inode,</div><div class='add'>+                            &amp;priv-&gt;gfiddir_stbuf, xdata, &amp;priv-&gt;root_stbuf);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                        STACK_WIND (frame, default_lookup_cbk,</div><div class='del'>-                                    FIRST_CHILD(this),</div><div class='del'>-                                    FIRST_CHILD(this)-&gt;fops-&gt;lookup,</div><div class='del'>-                                    &amp;tmp_loc, xdata);</div><div class='add'>+    /* if its discover(), no need for any action here */</div><div class='add'>+    if (!loc-&gt;name)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-                        inode_unref (tmp_loc.inode);</div><div class='add'>+    /* if its revalidate, and inode is not of type directory,</div><div class='add'>+       proceed with 'wind' */</div><div class='add'>+    if (loc-&gt;inode &amp;&amp; loc-&gt;inode-&gt;ia_type &amp;&amp; !IA_ISDIR(loc-&gt;inode-&gt;ia_type)) {</div><div class='add'>+        /* a revalidate on ".gfid/&lt;dentry&gt;" is possible, check for it */</div><div class='add'>+        if (((loc-&gt;parent &amp;&amp; __is_gfid_access_dir(loc-&gt;parent-&gt;gfid)) ||</div><div class='add'>+             __is_gfid_access_dir(loc-&gt;pargfid))) {</div><div class='add'>+            /* here, just send 'loc-&gt;gfid' and 'loc-&gt;inode' */</div><div class='add'>+            tmp_loc.inode = inode_ref(loc-&gt;inode);</div><div class='add'>+            gf_uuid_copy(tmp_loc.gfid, loc-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+            STACK_WIND(frame, default_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+                       FIRST_CHILD(this)-&gt;fops-&gt;lookup, &amp;tmp_loc, xdata);</div><div class='ctx'> </div><div class='del'>-                /* not something to bother, continue the flow */</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+            inode_unref(tmp_loc.inode);</div><div class='ctx'> </div><div class='del'>-        /* need to check if the lookup is on virtual dir */</div><div class='del'>-        if ((loc-&gt;name &amp;&amp; !strcmp (GF_GFID_DIR, loc-&gt;name)) &amp;&amp;</div><div class='del'>-            ((loc-&gt;parent &amp;&amp; __is_root_gfid (loc-&gt;parent-&gt;gfid)) ||</div><div class='del'>-             __is_root_gfid (loc-&gt;pargfid))) {</div><div class='del'>-                /* this means, the query is on '/.gfid', return the fake stat,</div><div class='del'>-                   and say success */</div><div class='del'>-</div><div class='del'>-                STACK_UNWIND_STRICT (lookup, frame, 0, 0, loc-&gt;inode,</div><div class='del'>-                                     &amp;priv-&gt;gfiddir_stbuf, xdata,</div><div class='del'>-                                     &amp;priv-&gt;root_stbuf);</div><div class='del'>-                return 0;</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* now, check if the lookup() is on an existing entry,</div><div class='del'>-           but on gfid-path */</div><div class='del'>-        if (!((loc-&gt;parent &amp;&amp; __is_gfid_access_dir (loc-&gt;parent-&gt;gfid)) ||</div><div class='del'>-              __is_gfid_access_dir (loc-&gt;pargfid))) {</div><div class='del'>-                if (!loc-&gt;parent)</div><div class='del'>-                        goto wind;</div><div class='del'>-</div><div class='del'>-                ret = inode_ctx_get (loc-&gt;parent, this, &amp;value);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto wind;</div><div class='del'>-</div><div class='del'>-                inode = (inode_t *) value;</div><div class='add'>+        /* not something to bother, continue the flow */</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = loc_copy_overload_parent (&amp;tmp_loc, loc, inode);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto err;</div><div class='add'>+    /* need to check if the lookup is on virtual dir */</div><div class='add'>+    if ((loc-&gt;name &amp;&amp; !strcmp(GF_GFID_DIR, loc-&gt;name)) &amp;&amp;</div><div class='add'>+        ((loc-&gt;parent &amp;&amp; __is_root_gfid(loc-&gt;parent-&gt;gfid)) ||</div><div class='add'>+         __is_root_gfid(loc-&gt;pargfid))) {</div><div class='add'>+        /* this means, the query is on '/.gfid', return the fake stat,</div><div class='add'>+           and say success */</div><div class='ctx'> </div><div class='del'>-                STACK_WIND (frame, ga_lookup_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;lookup, &amp;tmp_loc, xdata);</div><div class='add'>+        STACK_UNWIND_STRICT(lookup, frame, 0, 0, loc-&gt;inode,</div><div class='add'>+                            &amp;priv-&gt;gfiddir_stbuf, xdata, &amp;priv-&gt;root_stbuf);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                loc_wipe (&amp;tmp_loc);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    /* now, check if the lookup() is on an existing entry,</div><div class='add'>+       but on gfid-path */</div><div class='add'>+    if (!((loc-&gt;parent &amp;&amp; __is_gfid_access_dir(loc-&gt;parent-&gt;gfid)) ||</div><div class='add'>+          __is_gfid_access_dir(loc-&gt;pargfid))) {</div><div class='add'>+        if (!loc-&gt;parent)</div><div class='add'>+            goto wind;</div><div class='ctx'> </div><div class='del'>-        /* make sure the 'basename' is actually a 'canonical-gfid',</div><div class='del'>-           otherwise, return error */</div><div class='del'>-        ret = gf_uuid_parse (loc-&gt;name, tmp_gfid);</div><div class='add'>+        ret = inode_ctx_get(loc-&gt;parent, this, &amp;value);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto err;</div><div class='add'>+            goto wind;</div><div class='ctx'> </div><div class='del'>-        /* if its fresh lookup, go ahead and send it down, if not,</div><div class='del'>-           for directory, we need indirection to actual dir inode */</div><div class='del'>-        if (!(loc-&gt;inode &amp;&amp; loc-&gt;inode-&gt;ia_type))</div><div class='del'>-                goto discover;</div><div class='add'>+        inode = (inode_t *)value;</div><div class='ctx'> </div><div class='del'>-        /* revalidate on directory */</div><div class='del'>-        ret = inode_ctx_get (loc-&gt;inode, this, &amp;value);</div><div class='add'>+        ret = loc_copy_overload_parent(&amp;tmp_loc, loc, inode);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        inode = (void *)value;</div><div class='add'>+            goto err;</div><div class='ctx'> </div><div class='del'>-        /* valid inode, already looked up, work on that */</div><div class='del'>-        if (inode-&gt;ia_type)</div><div class='del'>-                goto discover;</div><div class='add'>+        STACK_WIND(frame, ga_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;lookup, &amp;tmp_loc, xdata);</div><div class='ctx'> </div><div class='del'>-        /* check if the inode is in the 'itable' or</div><div class='del'>-           if its just previously discover()'d inode */</div><div class='del'>-        true_inode = inode_find (loc-&gt;inode-&gt;table, tmp_gfid);</div><div class='del'>-        if (true_inode) {</div><div class='del'>-                /* time do another lookup and update the context</div><div class='del'>-                   with proper inode */</div><div class='del'>-                op_errno = ESTALE;</div><div class='del'>-                /* 'inode_ref()' done in inode_find */</div><div class='del'>-                inode_unref (true_inode);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+        loc_wipe(&amp;tmp_loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* make sure the 'basename' is actually a 'canonical-gfid',</div><div class='add'>+       otherwise, return error */</div><div class='add'>+    ret = gf_uuid_parse(loc-&gt;name, tmp_gfid);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    /* if its fresh lookup, go ahead and send it down, if not,</div><div class='add'>+       for directory, we need indirection to actual dir inode */</div><div class='add'>+    if (!(loc-&gt;inode &amp;&amp; loc-&gt;inode-&gt;ia_type))</div><div class='add'>+        goto discover;</div><div class='add'>+</div><div class='add'>+    /* revalidate on directory */</div><div class='add'>+    ret = inode_ctx_get(loc-&gt;inode, this, &amp;value);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    inode = (void *)value;</div><div class='add'>+</div><div class='add'>+    /* valid inode, already looked up, work on that */</div><div class='add'>+    if (inode-&gt;ia_type)</div><div class='add'>+        goto discover;</div><div class='add'>+</div><div class='add'>+    /* check if the inode is in the 'itable' or</div><div class='add'>+       if its just previously discover()'d inode */</div><div class='add'>+    true_inode = inode_find(loc-&gt;inode-&gt;table, tmp_gfid);</div><div class='add'>+    if (true_inode) {</div><div class='add'>+        /* time do another lookup and update the context</div><div class='add'>+           with proper inode */</div><div class='add'>+        op_errno = ESTALE;</div><div class='add'>+        /* 'inode_ref()' done in inode_find */</div><div class='add'>+        inode_unref(true_inode);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> discover:</div><div class='del'>-        /* for the virtual entries, we don't need to send 'gfid-req' key, as</div><div class='del'>-           for these entries, we don't want to 'set' a new gfid */</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_del (xdata, "gfid-req");</div><div class='add'>+    /* for the virtual entries, we don't need to send 'gfid-req' key, as</div><div class='add'>+       for these entries, we don't want to 'set' a new gfid */</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_del(xdata, "gfid-req");</div><div class='ctx'> </div><div class='del'>-        gf_uuid_copy (tmp_loc.gfid, tmp_gfid);</div><div class='add'>+    gf_uuid_copy(tmp_loc.gfid, tmp_gfid);</div><div class='ctx'> </div><div class='del'>-        /* if revalidate, then we need to have the proper reference */</div><div class='del'>-        if (inode) {</div><div class='del'>-                tmp_loc.inode = inode_ref (inode);</div><div class='del'>-                frame-&gt;local = inode_ref (loc-&gt;inode);</div><div class='del'>-        } else {</div><div class='del'>-                tmp_loc.inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        }</div><div class='add'>+    /* if revalidate, then we need to have the proper reference */</div><div class='add'>+    if (inode) {</div><div class='add'>+        tmp_loc.inode = inode_ref(inode);</div><div class='add'>+        frame-&gt;local = inode_ref(loc-&gt;inode);</div><div class='add'>+    } else {</div><div class='add'>+        tmp_loc.inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, ga_virtual_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup, &amp;tmp_loc, xdata);</div><div class='add'>+    STACK_WIND(frame, ga_virtual_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, &amp;tmp_loc, xdata);</div><div class='ctx'> </div><div class='del'>-        inode_unref (tmp_loc.inode);</div><div class='add'>+    inode_unref(tmp_loc.inode);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        /* used for all the normal lookup path */</div><div class='del'>-        STACK_WIND (frame, ga_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    /* used for all the normal lookup path */</div><div class='add'>+    STACK_WIND(frame, ga_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, -1, op_errno, loc-&gt;inode,</div><div class='del'>-                             &amp;priv-&gt;gfiddir_stbuf, xdata,</div><div class='del'>-                             &amp;priv-&gt;root_stbuf);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, -1, op_errno, loc-&gt;inode,</div><div class='add'>+                        &amp;priv-&gt;gfiddir_stbuf, xdata, &amp;priv-&gt;root_stbuf);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ga_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-          mode_t umask, dict_t *xdata)</div><div class='add'>+ga_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_mkdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask,</div><div class='del'>-                    xdata);</div><div class='add'>+    STACK_WIND(frame, default_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (mkdir, frame, -1, op_errno, loc-&gt;inode,</div><div class='del'>-                             NULL, NULL, NULL, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(mkdir, frame, -1, op_errno, loc-&gt;inode, NULL, NULL,</div><div class='add'>+                        NULL, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ga_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-           mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+ga_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+          mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_create_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL, xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ga_symlink (call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='del'>-            loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+ga_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='add'>+           loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_symlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;symlink,</div><div class='del'>-                    linkname, loc, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (symlink, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(symlink, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ga_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-          dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+ga_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_mknod_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev,</div><div class='del'>-                    umask, xdata);</div><div class='add'>+    STACK_WIND(frame, default_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (mknod, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ga_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='del'>-          dict_t *xdata)</div><div class='add'>+ga_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno = ENOMEM;</div><div class='del'>-        int   ret      = -1;</div><div class='del'>-        loc_t ga_loc   = {0, };</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_rmdir_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;rmdir,</div><div class='del'>-                    &amp;ga_loc, flag, xdata);</div><div class='add'>+    STACK_WIND(frame, default_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, &amp;ga_loc, flag, xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (rmdir, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(rmdir, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ga_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t xflag,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+ga_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t xflag,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno = ENOMEM;</div><div class='del'>-        int   ret      = -1;</div><div class='del'>-        loc_t ga_loc   = {0, };</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    &amp;ga_loc, xflag, xdata);</div><div class='add'>+    STACK_WIND(frame, default_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, &amp;ga_loc, xflag, xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-ga_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+ga_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno  = ENOMEM;</div><div class='del'>-        int   ret       = 0;</div><div class='del'>-        loc_t ga_oldloc = {0, };</div><div class='del'>-        loc_t ga_newloc = {0, };</div><div class='del'>-</div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (oldloc, op_errno, err);</div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (newloc, op_errno, err);</div><div class='del'>-</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_oldloc, oldloc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_newloc, newloc, this);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                loc_wipe (&amp;ga_oldloc);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, default_rename_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='del'>-                    &amp;ga_oldloc, &amp;ga_newloc, xdata);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;ga_newloc);</div><div class='del'>-        loc_wipe (&amp;ga_oldloc);</div><div class='del'>-        return 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t ga_oldloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t ga_newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(oldloc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(newloc, op_errno, err);</div><div class='add'>+</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_oldloc, oldloc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_newloc, newloc, this);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        loc_wipe(&amp;ga_oldloc);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, default_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, &amp;ga_oldloc, &amp;ga_newloc, xdata);</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;ga_newloc);</div><div class='add'>+    loc_wipe(&amp;ga_oldloc);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (rename, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(rename, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-ga_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-         loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+ga_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno  = ENOMEM;</div><div class='del'>-        int   ret       = 0;</div><div class='del'>-        loc_t ga_oldloc = {0, };</div><div class='del'>-        loc_t ga_newloc = {0, };</div><div class='del'>-</div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (oldloc, op_errno, err);</div><div class='del'>-        GFID_ACCESS_ENTRY_OP_CHECK (newloc, op_errno, err);</div><div class='del'>-</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_oldloc, oldloc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_newloc, newloc, this);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                loc_wipe (&amp;ga_oldloc);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, default_link_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='del'>-                    &amp;ga_oldloc, &amp;ga_newloc, xdata);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;ga_newloc);</div><div class='del'>-        loc_wipe (&amp;ga_oldloc);</div><div class='del'>-        return 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    loc_t ga_oldloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t ga_newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(oldloc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_ENTRY_OP_CHECK(newloc, op_errno, err);</div><div class='add'>+</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_oldloc, oldloc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_newloc, newloc, this);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        loc_wipe(&amp;ga_oldloc);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, default_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, &amp;ga_oldloc, &amp;ga_newloc, xdata);</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;ga_newloc);</div><div class='add'>+    loc_wipe(&amp;ga_oldloc);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, -1, op_errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, -1, op_errno, NULL, NULL, NULL, NULL,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            fd_t *fd, dict_t *xdata)</div><div class='add'>+ga_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int op_errno = ENOMEM;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_INODE_OP_CHECK (loc, op_errno, err);</div><div class='add'>+    GFID_ACCESS_INODE_OP_CHECK(loc, op_errno, err);</div><div class='ctx'> </div><div class='del'>-        /* also check if the loc-&gt;inode itself is virtual</div><div class='del'>-           inode, if yes, return with failure, mainly because we</div><div class='del'>-           can't handle all the readdirp and other things on it. */</div><div class='del'>-        if (inode_ctx_get (loc-&gt;inode, this, NULL) == 0) {</div><div class='del'>-                op_errno = ENOTSUP;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    /* also check if the loc-&gt;inode itself is virtual</div><div class='add'>+       inode, if yes, return with failure, mainly because we</div><div class='add'>+       can't handle all the readdirp and other things on it. */</div><div class='add'>+    if (inode_ctx_get(loc-&gt;inode, this, NULL) == 0) {</div><div class='add'>+        op_errno = ENOTSUP;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_opendir_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;opendir,</div><div class='del'>-                    loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (opendir, frame, -1, op_errno, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(opendir, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             const char *name, dict_t *xdata)</div><div class='add'>+ga_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno = ENOMEM;</div><div class='del'>-        int   ret      = -1;</div><div class='del'>-        loc_t ga_loc   = {0, };</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_INODE_OP_CHECK (loc, op_errno, err);</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    GFID_ACCESS_INODE_OP_CHECK(loc, op_errno, err);</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_getxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr, &amp;ga_loc, name, xdata);</div><div class='add'>+    STACK_WIND(frame, default_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, &amp;ga_loc, name, xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, -1, op_errno, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_stat (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-         dict_t *xdata)</div><div class='add'>+ga_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int          op_errno = ENOMEM;</div><div class='del'>-        int          ret      = -1;</div><div class='del'>-        loc_t        ga_loc   = {0, };</div><div class='del'>-        ga_private_t *priv    = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        /* If stat is on ".gfid" itself, do not wind further,</div><div class='del'>-         * return fake stat and return success.</div><div class='del'>-         */</div><div class='del'>-        if (__is_gfid_access_dir(loc-&gt;gfid))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, default_stat_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;stat, &amp;ga_loc, xdata);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='del'>-        return 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    /* If stat is on ".gfid" itself, do not wind further,</div><div class='add'>+     * return fake stat and return success.</div><div class='add'>+     */</div><div class='add'>+    if (__is_gfid_access_dir(loc-&gt;gfid))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, default_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, &amp;ga_loc, xdata);</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (stat, frame, -1, op_errno, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(stat, frame, -1, op_errno, NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (stat, frame, 0, 0, &amp;priv-&gt;gfiddir_stbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(stat, frame, 0, 0, &amp;priv-&gt;gfiddir_stbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            struct iatt *stbuf, int32_t valid,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+ga_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+           int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno = ENOMEM;</div><div class='del'>-        int   ret      = -1;</div><div class='del'>-        loc_t ga_loc   = {0, };</div><div class='del'>-</div><div class='del'>-        GFID_ACCESS_INODE_OP_CHECK (loc, op_errno, err);</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, default_setattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;setattr, &amp;ga_loc, stbuf, valid,</div><div class='del'>-                    xdata);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='del'>-        return 0;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GFID_ACCESS_INODE_OP_CHECK(loc, op_errno, err);</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, default_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, &amp;ga_loc, stbuf, valid, xdata);</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (setattr, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setattr, frame, -1, op_errno, NULL, NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                const char *name, dict_t *xdata)</div><div class='add'>+ga_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int   op_errno = ENOMEM;</div><div class='del'>-        int   ret      = -1;</div><div class='del'>-        loc_t ga_loc   = {0, };</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t ga_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GFID_ACCESS_INODE_OP_CHECK (loc, op_errno, err);</div><div class='del'>-        ret = ga_valid_inode_loc_copy (&amp;ga_loc, loc, this);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    GFID_ACCESS_INODE_OP_CHECK(loc, op_errno, err);</div><div class='add'>+    ret = ga_valid_inode_loc_copy(&amp;ga_loc, loc, this);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, default_removexattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr, &amp;ga_loc, name,</div><div class='del'>-                    xdata);</div><div class='add'>+    STACK_WIND(frame, default_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, &amp;ga_loc, name, xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;ga_loc);</div><div class='del'>-        return 0;</div><div class='add'>+    loc_wipe(&amp;ga_loc);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, -1, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, -1, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_gfid_access_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "Memory accounting"</div><div class='del'>-                        " init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_gfid_access_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Memory accounting"</div><div class='add'>+               " init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        ga_private_t *priv = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "not configured with exactly one child. exiting");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* This can be the top of graph in certain cases */</div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "dangling volume. check volfile ");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: define a mem-type structure */</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_gfid_access_mt_priv_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        priv-&gt;newfile_args_pool = mem_pool_new (ga_newfile_args_t, 512);</div><div class='del'>-        if (!priv-&gt;newfile_args_pool)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        priv-&gt;heal_args_pool = mem_pool_new (ga_heal_args_t, 512);</div><div class='del'>-        if (!priv-&gt;heal_args_pool)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (ga_local_t, 16);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to create local_t's memory pool");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "not configured with exactly one child. exiting");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This can be the top of graph in certain cases */</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: define a mem-type structure */</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_gfid_access_mt_priv_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    priv-&gt;newfile_args_pool = mem_pool_new(ga_newfile_args_t, 512);</div><div class='add'>+    if (!priv-&gt;newfile_args_pool)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    priv-&gt;heal_args_pool = mem_pool_new(ga_heal_args_t, 512);</div><div class='add'>+    if (!priv-&gt;heal_args_pool)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(ga_local_t, 16);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to create local_t's memory pool");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; priv) {</div><div class='del'>-                if (priv-&gt;newfile_args_pool)</div><div class='del'>-                        mem_pool_destroy (priv-&gt;newfile_args_pool);</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; priv) {</div><div class='add'>+        if (priv-&gt;newfile_args_pool)</div><div class='add'>+            mem_pool_destroy(priv-&gt;newfile_args_pool);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        ga_private_t *priv = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-</div><div class='del'>-        if (priv) {</div><div class='del'>-                if (priv-&gt;newfile_args_pool)</div><div class='del'>-                        mem_pool_destroy (priv-&gt;newfile_args_pool);</div><div class='del'>-                if (priv-&gt;heal_args_pool)</div><div class='del'>-                        mem_pool_destroy (priv-&gt;heal_args_pool);</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    ga_private_t *priv = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+</div><div class='add'>+    if (priv) {</div><div class='add'>+        if (priv-&gt;newfile_args_pool)</div><div class='add'>+            mem_pool_destroy(priv-&gt;newfile_args_pool);</div><div class='add'>+        if (priv-&gt;heal_args_pool)</div><div class='add'>+            mem_pool_destroy(priv-&gt;heal_args_pool);</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ga_dump_inodectx (xlator_t *this, inode_t *inode)</div><div class='add'>+ga_dump_inodectx(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int       ret = -1;</div><div class='del'>-        uint64_t  value = 0;</div><div class='del'>-        inode_t  *tmp_inode = NULL;</div><div class='del'>-        char      key_prefix[GF_DUMP_MAX_BUF_LEN] = {0, };</div><div class='del'>-</div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;value);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                tmp_inode = (void*) value;</div><div class='del'>-                gf_proc_dump_build_key (key_prefix, this-&gt;name, "inode");</div><div class='del'>-                gf_proc_dump_add_section (key_prefix);</div><div class='del'>-                gf_proc_dump_write ("real-gfid", "%s",</div><div class='del'>-                                    uuid_utoa (tmp_inode-&gt;gfid));</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t value = 0;</div><div class='add'>+    inode_t *tmp_inode = NULL;</div><div class='add'>+    char key_prefix[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;value);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        tmp_inode = (void *)value;</div><div class='add'>+        gf_proc_dump_build_key(key_prefix, this-&gt;name, "inode");</div><div class='add'>+        gf_proc_dump_add_section(key_prefix);</div><div class='add'>+        gf_proc_dump_write("real-gfid", "%s", uuid_utoa(tmp_inode-&gt;gfid));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup = ga_lookup,</div><div class='del'>-</div><div class='del'>-        /* entry fops */</div><div class='del'>-        .mkdir   = ga_mkdir,</div><div class='del'>-        .mknod   = ga_mknod,</div><div class='del'>-        .create  = ga_create,</div><div class='del'>-        .symlink = ga_symlink,</div><div class='del'>-        .link    = ga_link,</div><div class='del'>-        .unlink  = ga_unlink,</div><div class='del'>-        .rmdir   = ga_rmdir,</div><div class='del'>-        .rename  = ga_rename,</div><div class='del'>-</div><div class='del'>-        /* handle any other directory operations here */</div><div class='del'>-        .opendir  = ga_opendir,</div><div class='del'>-        .stat     = ga_stat,</div><div class='del'>-        .setattr  = ga_setattr,</div><div class='del'>-        .getxattr = ga_getxattr,</div><div class='del'>-        .removexattr = ga_removexattr,</div><div class='del'>-</div><div class='del'>-        /* special fop to handle more entry creations */</div><div class='del'>-        .setxattr = ga_setxattr,</div><div class='add'>+    .lookup = ga_lookup,</div><div class='add'>+</div><div class='add'>+    /* entry fops */</div><div class='add'>+    .mkdir = ga_mkdir,</div><div class='add'>+    .mknod = ga_mknod,</div><div class='add'>+    .create = ga_create,</div><div class='add'>+    .symlink = ga_symlink,</div><div class='add'>+    .link = ga_link,</div><div class='add'>+    .unlink = ga_unlink,</div><div class='add'>+    .rmdir = ga_rmdir,</div><div class='add'>+    .rename = ga_rename,</div><div class='add'>+</div><div class='add'>+    /* handle any other directory operations here */</div><div class='add'>+    .opendir = ga_opendir,</div><div class='add'>+    .stat = ga_stat,</div><div class='add'>+    .setattr = ga_setattr,</div><div class='add'>+    .getxattr = ga_getxattr,</div><div class='add'>+    .removexattr = ga_removexattr,</div><div class='add'>+</div><div class='add'>+    /* special fop to handle more entry creations */</div><div class='add'>+    .setxattr = ga_setxattr,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget = ga_forget,</div><div class='add'>+    .forget = ga_forget,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .inodectx       = ga_dump_inodectx,</div><div class='add'>+    .inodectx = ga_dump_inodectx,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        /* This translator doesn't take any options, or provide any options */</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    /* This translator doesn't take any options, or provide any options */</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/glupy/src/glupy.c b/xlators/features/glupy/src/glupy.c<br/>index bacccfef686..d1a111eab4a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/glupy/src/glupy.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/glupy/src/glupy.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/glupy/src/glupy.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/glupy/src/glupy.c</a></div><div class='hunk'>@@ -25,2521 +25,2422 @@</div><div class='ctx'> pthread_key_t gil_init_key;</div><div class='ctx'> </div><div class='ctx'> PyGILState_STATE</div><div class='del'>-glupy_enter (void)</div><div class='add'>+glupy_enter(void)</div><div class='ctx'> {</div><div class='del'>-        if (!pthread_getspecific(gil_init_key)) {</div><div class='del'>-                PyEval_ReleaseLock();</div><div class='del'>-                (void)pthread_setspecific(gil_init_key,(void *)1);</div><div class='del'>-        }</div><div class='add'>+    if (!pthread_getspecific(gil_init_key)) {</div><div class='add'>+        PyEval_ReleaseLock();</div><div class='add'>+        (void)pthread_setspecific(gil_init_key, (void *)1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return PyGILState_Ensure();</div><div class='add'>+    return PyGILState_Ensure();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-glupy_leave (PyGILState_STATE gstate)</div><div class='add'>+glupy_leave(PyGILState_STATE gstate)</div><div class='ctx'> {</div><div class='del'>-        PyGILState_Release(gstate);</div><div class='add'>+    PyGILState_Release(gstate);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: LOOKUP */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+glupy_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_LOOKUP]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_LOOKUP]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_lookup_cbk_t)(priv-&gt;cbks[GLUPY_LOOKUP]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                inode, buf, xdata, postparent);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_lookup_cbk_t)(priv-&gt;cbks[GLUPY_LOOKUP]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, inode, buf, xdata, postparent);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             xdata, postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+glupy_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_LOOKUP]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_LOOKUP]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_lookup_t)(priv-&gt;fops[GLUPY_LOOKUP]))(</div><div class='del'>-                frame, this, loc, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_lookup_t)(priv-&gt;fops[GLUPY_LOOKUP]))(frame, this, loc, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_lookup (call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *xdata)</div><div class='add'>+wind_lookup(call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_lookup_cbk,xl,xl-&gt;fops-&gt;lookup,loc,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_lookup_cbk, xl, xl-&gt;fops-&gt;lookup, loc, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_lookup (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-               struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+unwind_lookup(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+              struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(lookup,frame,op_ret,op_errno,</div><div class='del'>-                            inode,buf,xdata,postparent);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_lookup_fop (long py_this, fop_lookup_t fop)</div><div class='add'>+set_lookup_fop(long py_this, fop_lookup_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_LOOKUP] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_LOOKUP] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_lookup_cbk (long py_this, fop_lookup_cbk_t cbk)</div><div class='add'>+set_lookup_cbk(long py_this, fop_lookup_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_LOOKUP] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_LOOKUP] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: CREATE */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+glupy_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_CREATE]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_CREATE]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_create_cbk_t)(priv-&gt;cbks[GLUPY_CREATE]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                fd, inode, buf, preparent, postparent, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_create_cbk_t)(priv-&gt;cbks[GLUPY_CREATE]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, fd, inode, buf, preparent,</div><div class='add'>+        postparent, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-              mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+glupy_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+             mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_CREATE]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_CREATE]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_create_t)(priv-&gt;fops[GLUPY_CREATE]))(</div><div class='del'>-                frame, this, loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_create_t)(priv-&gt;fops[GLUPY_CREATE]))(frame, this, loc, flags,</div><div class='add'>+                                                     mode, umask, fd, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_create_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_create (call_frame_t *frame, xlator_t *xl, loc_t *loc, int32_t flags,</div><div class='del'>-             mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+wind_create(call_frame_t *frame, xlator_t *xl, loc_t *loc, int32_t flags,</div><div class='add'>+            mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_create_cbk,xl, xl-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_create_cbk, xl, xl-&gt;fops-&gt;create, loc, flags, mode,</div><div class='add'>+               umask, fd, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_create (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-               struct iatt *buf, struct iatt *preparent,</div><div class='del'>-               struct iatt *postparent, dict_t *xdata)</div><div class='add'>+unwind_create(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='add'>+              struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_create_fop (long py_this, fop_create_t fop)</div><div class='add'>+set_create_fop(long py_this, fop_create_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_CREATE] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_CREATE] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_create_cbk (long py_this, fop_create_cbk_t cbk)</div><div class='add'>+set_create_cbk(long py_this, fop_create_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_CREATE] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_CREATE] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: OPEN */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+glupy_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_OPEN]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_OPEN]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_open_cbk_t)(priv-&gt;cbks[GLUPY_OPEN]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                fd, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_open_cbk_t)(priv-&gt;cbks[GLUPY_OPEN]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, fd, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_open (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            int32_t flags, fd_t *fd, dict_t *xdata)</div><div class='add'>+glupy_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+           fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_OPEN]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_OPEN]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_open_t)(priv-&gt;fops[GLUPY_OPEN]))(</div><div class='del'>-                frame, this, loc, flags, fd, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_open_t)(priv-&gt;fops[GLUPY_OPEN]))(frame, this, loc, flags, fd,</div><div class='add'>+                                                 xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_open_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_open (call_frame_t *frame, xlator_t *xl, loc_t *loc, int32_t flags,</div><div class='del'>-           fd_t *fd, dict_t *xdata)</div><div class='add'>+wind_open(call_frame_t *frame, xlator_t *xl, loc_t *loc, int32_t flags,</div><div class='add'>+          fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_open_cbk, xl, xl-&gt;fops-&gt;open, loc, flags,</div><div class='del'>-                    fd, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_open_cbk, xl, xl-&gt;fops-&gt;open, loc, flags, fd,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_open (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+unwind_open(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, fd, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_open_fop (long py_this, fop_open_t fop)</div><div class='add'>+set_open_fop(long py_this, fop_open_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='del'>-        priv-&gt;fops[GLUPY_OPEN] = (long)fop;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    priv-&gt;fops[GLUPY_OPEN] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_open_cbk (long py_this, fop_open_cbk_t cbk)</div><div class='add'>+set_open_cbk(long py_this, fop_open_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='del'>-        priv-&gt;cbks[GLUPY_OPEN] = (long)cbk;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    priv-&gt;cbks[GLUPY_OPEN] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: READV */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-                 int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+glupy_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='add'>+                int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_READV]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_READV]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_readv_cbk_t)(priv-&gt;cbks[GLUPY_READV]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                vector, count, stbuf, iobref, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_readv_cbk_t)(priv-&gt;cbks[GLUPY_READV]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, vector, count, stbuf, iobref,</div><div class='add'>+        xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno, vector,</div><div class='del'>-                             count, stbuf, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                        iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+glupy_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_READV]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_READV]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_readv_t)(priv-&gt;fops[GLUPY_READV]))(</div><div class='del'>-                frame, this, fd, size, offset, flags, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_readv_t)(priv-&gt;fops[GLUPY_READV]))(frame, this, fd, size,</div><div class='add'>+                                                   offset, flags, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_readv_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset,</div><div class='del'>-                    flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_readv (call_frame_t *frame, xlator_t *xl, fd_t *fd, size_t size,</div><div class='del'>-            off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+wind_readv(call_frame_t *frame, xlator_t *xl, fd_t *fd, size_t size,</div><div class='add'>+           off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_readv_cbk, xl, xl-&gt;fops-&gt;readv, fd, size,</div><div class='del'>-                    offset, flags, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_readv_cbk, xl, xl-&gt;fops-&gt;readv, fd, size, offset,</div><div class='add'>+               flags, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_readv (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, struct iovec *vector,</div><div class='del'>-              int32_t count, struct iatt *stbuf, struct iobref *iobref,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+unwind_readv(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iovec *vector, int32_t count,</div><div class='add'>+             struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno, vector,</div><div class='del'>-                             count, stbuf, iobref, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                        iobref, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readv_fop (long py_this, fop_readv_t fop)</div><div class='add'>+set_readv_fop(long py_this, fop_readv_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='del'>-        priv-&gt;fops[GLUPY_READV] = (long)fop;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    priv-&gt;fops[GLUPY_READV] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readv_cbk (long py_this, fop_readv_cbk_t cbk)</div><div class='add'>+set_readv_cbk(long py_this, fop_readv_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='del'>-        priv-&gt;cbks[GLUPY_READV] = (long)cbk;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    priv-&gt;cbks[GLUPY_READV] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: WRITEV */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                  struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+glupy_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_WRITEV]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_WRITEV]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_writev_cbk_t)(priv-&gt;cbks[GLUPY_WRITEV]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                prebuf, postbuf, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_writev_cbk_t)(priv-&gt;cbks[GLUPY_WRITEV]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-              uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+glupy_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+             struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+             struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_WRITEV]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_WRITEV]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_writev_t)(priv-&gt;fops[GLUPY_WRITEV]))(</div><div class='del'>-                frame, this, fd, vector, count, offset, flags,</div><div class='del'>-                iobref, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_writev_t)(priv-&gt;fops[GLUPY_WRITEV]))(</div><div class='add'>+        frame, this, fd, vector, count, offset, flags, iobref, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_writev_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count,</div><div class='del'>-                    offset, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_writev (call_frame_t *frame, xlator_t *xl, fd_t *fd, struct iovec *vector,</div><div class='del'>-             int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+wind_writev(call_frame_t *frame, xlator_t *xl, fd_t *fd, struct iovec *vector,</div><div class='add'>+            int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_writev_cbk, xl, xl-&gt;fops-&gt;writev, fd, vector,</div><div class='del'>-                    count, offset, flags, iobref, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_writev_cbk, xl, xl-&gt;fops-&gt;writev, fd, vector, count,</div><div class='add'>+               offset, flags, iobref, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_writev (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-               struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+unwind_writev(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_writev_fop (long py_this, fop_writev_t fop)</div><div class='add'>+set_writev_fop(long py_this, fop_writev_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='del'>-        priv-&gt;fops[GLUPY_WRITEV] = (long)fop;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    priv-&gt;fops[GLUPY_WRITEV] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_writev_cbk (long py_this, fop_writev_cbk_t cbk)</div><div class='add'>+set_writev_cbk(long py_this, fop_writev_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='del'>-        priv-&gt;cbks[GLUPY_WRITEV] = (long)cbk;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    priv-&gt;cbks[GLUPY_WRITEV] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: OPENDIR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+glupy_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_OPENDIR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_OPENDIR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_opendir_cbk_t)(priv-&gt;cbks[GLUPY_OPENDIR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                fd, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_opendir_cbk_t)(priv-&gt;cbks[GLUPY_OPENDIR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, fd, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-               fd_t *fd, dict_t *xdata)</div><div class='add'>+glupy_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_OPENDIR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_OPENDIR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_opendir_t)(priv-&gt;fops[GLUPY_OPENDIR]))(</div><div class='del'>-                frame, this, loc, fd, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_opendir_t)(priv-&gt;fops[GLUPY_OPENDIR]))(frame, this, loc, fd,</div><div class='add'>+                                                       xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_opendir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_opendir (call_frame_t *frame, xlator_t *xl, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+wind_opendir(call_frame_t *frame, xlator_t *xl, loc_t *loc, fd_t *fd,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_opendir_cbk,xl,xl-&gt;fops-&gt;opendir,loc,fd,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_opendir_cbk, xl, xl-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_opendir (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+unwind_opendir(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+               int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(opendir,frame,op_ret,op_errno,</div><div class='del'>-                            fd,xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(opendir, frame, op_ret, op_errno, fd, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_opendir_fop (long py_this, fop_opendir_t fop)</div><div class='add'>+set_opendir_fop(long py_this, fop_opendir_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_OPENDIR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_OPENDIR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_opendir_cbk (long py_this, fop_opendir_cbk_t cbk)</div><div class='add'>+set_opendir_cbk(long py_this, fop_opendir_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_OPENDIR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_OPENDIR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: READDIR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+glupy_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_READDIR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_READDIR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_readdir_cbk_t)(priv-&gt;cbks[GLUPY_READDIR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                entries,  xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_readdir_cbk_t)(priv-&gt;cbks[GLUPY_READDIR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, entries, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readdir, frame, op_ret, op_errno, entries,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readdir, frame, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-               size_t size, off_t offset, dict_t *xdata)</div><div class='add'>+glupy_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_READDIR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_READDIR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_readdir_t)(priv-&gt;fops[GLUPY_READDIR]))(</div><div class='del'>-                frame, this, fd, size, offset, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_readdir_t)(priv-&gt;fops[GLUPY_READDIR]))(frame, this, fd, size,</div><div class='add'>+                                                       offset, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_readdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdir,fd, size, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_readdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> wind_readdir(call_frame_t *frame, xlator_t *xl, fd_t *fd, size_t size,</div><div class='ctx'>              off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_readdir_cbk,xl,xl-&gt;fops-&gt;readdir,fd,size,offset,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_readdir_cbk, xl, xl-&gt;fops-&gt;readdir, fd, size,</div><div class='add'>+               offset, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_readdir (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+unwind_readdir(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+               int32_t op_errno, gf_dirent_t *entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(readdir,frame,op_ret,op_errno,</div><div class='del'>-                            entries, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readdir, frame, op_ret, op_errno, entries, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readdir_fop (long py_this, fop_readdir_t fop)</div><div class='add'>+set_readdir_fop(long py_this, fop_readdir_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_READDIR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_READDIR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readdir_cbk (long py_this, fop_readdir_cbk_t cbk)</div><div class='add'>+set_readdir_cbk(long py_this, fop_readdir_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_READDIR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_READDIR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: READDIRP */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+glupy_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_READDIRP]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_READDIRP]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_readdirp_cbk_t)(priv-&gt;cbks[GLUPY_READDIRP]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                entries,  xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_readdirp_cbk_t)(priv-&gt;cbks[GLUPY_READDIRP]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, entries, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                size_t size, off_t offset, dict_t *xdata)</div><div class='add'>+glupy_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+               off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_READDIRP]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_READDIRP]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_readdirp_t)(priv-&gt;fops[GLUPY_READDIRP]))(</div><div class='del'>-                frame, this, fd, size, offset, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_readdirp_t)(priv-&gt;fops[GLUPY_READDIRP]))(frame, this, fd, size,</div><div class='add'>+                                                         offset, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_readdirp_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdirp,fd, size, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_readdirp (call_frame_t *frame, xlator_t *xl, fd_t *fd, size_t size,</div><div class='del'>-               off_t offset, dict_t *xdata)</div><div class='add'>+wind_readdirp(call_frame_t *frame, xlator_t *xl, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_readdirp_cbk,xl,xl-&gt;fops-&gt;readdirp,fd,size,offset,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_readdirp_cbk, xl, xl-&gt;fops-&gt;readdirp, fd, size,</div><div class='add'>+               offset, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_readdirp (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+unwind_readdirp(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(readdirp,frame,op_ret,op_errno,</div><div class='del'>-                            entries, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readdirp_fop (long py_this, fop_readdirp_t fop)</div><div class='add'>+set_readdirp_fop(long py_this, fop_readdirp_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_READDIRP] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_READDIRP] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readdirp_cbk (long py_this, fop_readdirp_cbk_t cbk)</div><div class='add'>+set_readdirp_cbk(long py_this, fop_readdirp_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_READDIRP] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_READDIRP] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP:STAT */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+glupy_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_STAT]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_STAT]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_stat_cbk_t)(priv-&gt;cbks[GLUPY_STAT]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                buf, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_stat_cbk_t)(priv-&gt;cbks[GLUPY_STAT]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, buf, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (stat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(stat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_stat (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+glupy_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_STAT]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_STAT]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_stat_t)(priv-&gt;fops[GLUPY_STAT]))(</div><div class='del'>-                frame, this, loc, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_stat_t)(priv-&gt;fops[GLUPY_STAT]))(frame, this, loc, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_stat_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_stat (call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *xdata)</div><div class='add'>+wind_stat(call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_stat_cbk,xl,xl-&gt;fops-&gt;stat,loc,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_stat_cbk, xl, xl-&gt;fops-&gt;stat, loc, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_stat (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+unwind_stat(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(stat,frame,op_ret,op_errno,</div><div class='del'>-                            buf,xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(stat, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_stat_fop (long py_this, fop_stat_t fop)</div><div class='add'>+set_stat_fop(long py_this, fop_stat_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_STAT] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_STAT] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_stat_cbk (long py_this, fop_stat_cbk_t cbk)</div><div class='add'>+set_stat_cbk(long py_this, fop_stat_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_STAT] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_STAT] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: FSTAT */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+glupy_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_FSTAT]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_FSTAT]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_fstat_cbk_t)(priv-&gt;cbks[GLUPY_FSTAT]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                buf, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_fstat_cbk_t)(priv-&gt;cbks[GLUPY_FSTAT]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, buf, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+glupy_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_FSTAT]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_FSTAT]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_fstat_t)(priv-&gt;fops[GLUPY_FSTAT]))(</div><div class='del'>-                frame, this, fd, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_fstat_t)(priv-&gt;fops[GLUPY_FSTAT]))(frame, this, fd, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_fstat_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_fstat (call_frame_t *frame, xlator_t *xl, fd_t *fd, dict_t *xdata)</div><div class='add'>+wind_fstat(call_frame_t *frame, xlator_t *xl, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_fstat_cbk,xl,xl-&gt;fops-&gt;fstat,fd,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_fstat_cbk, xl, xl-&gt;fops-&gt;fstat, fd, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_fstat (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+unwind_fstat(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(fstat,frame,op_ret,op_errno,</div><div class='del'>-                            buf,xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_fstat_fop (long py_this, fop_fstat_t fop)</div><div class='add'>+set_fstat_fop(long py_this, fop_fstat_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_FSTAT] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_FSTAT] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_fstat_cbk (long py_this, fop_fstat_cbk_t cbk)</div><div class='add'>+set_fstat_cbk(long py_this, fop_fstat_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_FSTAT] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_FSTAT] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP:STATFS */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='add'>+glupy_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_STATFS]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_STATFS]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_statfs_cbk_t)(priv-&gt;cbks[GLUPY_STATFS]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                buf, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_statfs_cbk_t)(priv-&gt;cbks[GLUPY_STATFS]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, buf, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+glupy_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_STATFS]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_STATFS]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_statfs_t)(priv-&gt;fops[GLUPY_STATFS]))(</div><div class='del'>-                frame, this, loc, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_statfs_t)(priv-&gt;fops[GLUPY_STATFS]))(frame, this, loc, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_statfs_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_statfs_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_statfs (call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *xdata)</div><div class='add'>+wind_statfs(call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND(frame,glupy_statfs_cbk,xl,xl-&gt;fops-&gt;statfs,loc,xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_statfs_cbk, xl, xl-&gt;fops-&gt;statfs, loc, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_statfs (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+unwind_statfs(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT(statfs,frame,op_ret,op_errno,</div><div class='del'>-                            buf,xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(statfs, frame, op_ret, op_errno, buf, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_statfs_fop (long py_this, fop_statfs_t fop)</div><div class='add'>+set_statfs_fop(long py_this, fop_statfs_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_STATFS] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_STATFS] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_statfs_cbk (long py_this, fop_statfs_cbk_t cbk)</div><div class='add'>+set_statfs_cbk(long py_this, fop_statfs_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_STATFS] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_STATFS] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: SETXATTR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+glupy_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_SETXATTR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_SETXATTR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_setxattr_cbk_t)(priv-&gt;cbks[GLUPY_SETXATTR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_setxattr_cbk_t)(priv-&gt;cbks[GLUPY_SETXATTR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+glupy_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+               int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_SETXATTR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_SETXATTR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_setxattr_t)(priv-&gt;fops[GLUPY_SETXATTR]))(</div><div class='del'>-                frame, this, loc, dict, flags, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_setxattr_t)(priv-&gt;fops[GLUPY_SETXATTR]))(frame, this, loc, dict,</div><div class='add'>+                                                         flags, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_setxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict,</div><div class='del'>-                    flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_setxattr (call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='del'>-               dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+wind_setxattr(call_frame_t *frame, xlator_t *xl, loc_t *loc, dict_t *dict,</div><div class='add'>+              int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_setxattr_cbk, xl, xl-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, dict, flags, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_setxattr_cbk, xl, xl-&gt;fops-&gt;setxattr, loc, dict,</div><div class='add'>+               flags, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-unwind_setxattr (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+unwind_setxattr(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_setxattr_fop (long py_this, fop_setxattr_t fop)</div><div class='add'>+set_setxattr_fop(long py_this, fop_setxattr_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_SETXATTR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_SETXATTR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_setxattr_cbk (long py_this, fop_setxattr_cbk_t cbk)</div><div class='add'>+set_setxattr_cbk(long py_this, fop_setxattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_SETXATTR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_SETXATTR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: GETXATTR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                    dict_t *xdata)</div><div class='add'>+glupy_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                   dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_GETXATTR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_GETXATTR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_getxattr_cbk_t)(priv-&gt;cbks[GLUPY_GETXATTR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno, dict,</div><div class='del'>-                xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_getxattr_cbk_t)(priv-&gt;cbks[GLUPY_GETXATTR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, dict, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                const char *name, dict_t *xdata)</div><div class='add'>+glupy_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_GETXATTR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_GETXATTR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_getxattr_t)(priv-&gt;fops[GLUPY_GETXATTR]))(</div><div class='del'>-                frame, this, loc, name, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_getxattr_t)(priv-&gt;fops[GLUPY_GETXATTR]))(frame, this, loc, name,</div><div class='add'>+                                                         xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_getxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_getxattr (call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='del'>-               const char *name, dict_t *xdata)</div><div class='add'>+wind_getxattr(call_frame_t *frame, xlator_t *xl, loc_t *loc, const char *name,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_getxattr_cbk, xl, xl-&gt;fops-&gt;getxattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_getxattr_cbk, xl, xl-&gt;fops-&gt;getxattr, loc, name,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-unwind_getxattr (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+unwind_getxattr(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict,</div><div class='del'>-                             xdata);</div><div class='del'>-</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-set_getxattr_fop (long py_this, fop_getxattr_t fop)</div><div class='add'>+set_getxattr_fop(long py_this, fop_getxattr_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_GETXATTR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_GETXATTR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-set_getxattr_cbk (long py_this, fop_getxattr_cbk_t cbk)</div><div class='add'>+set_getxattr_cbk(long py_this, fop_getxattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_GETXATTR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_GETXATTR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: FSETXATTR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+glupy_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_FSETXATTR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_FSETXATTR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_fsetxattr_cbk_t)(priv-&gt;cbks[GLUPY_FSETXATTR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_fsetxattr_cbk_t)(priv-&gt;cbks[GLUPY_FSETXATTR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+glupy_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_FSETXATTR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_FSETXATTR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_fsetxattr_t)(priv-&gt;fops[GLUPY_FSETXATTR]))(</div><div class='del'>-                frame, this, fd, dict, flags, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_fsetxattr_t)(priv-&gt;fops[GLUPY_FSETXATTR]))(frame, this, fd,</div><div class='add'>+                                                           dict, flags, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict,</div><div class='del'>-                    flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_fsetxattr (call_frame_t *frame, xlator_t *xl, fd_t *fd,</div><div class='del'>-                dict_t *dict, int32_t flags, dict_t *xdata)</div><div class='add'>+wind_fsetxattr(call_frame_t *frame, xlator_t *xl, fd_t *fd, dict_t *dict,</div><div class='add'>+               int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_fsetxattr_cbk, xl, xl-&gt;fops-&gt;fsetxattr,</div><div class='del'>-                    fd, dict, flags, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_fsetxattr_cbk, xl, xl-&gt;fops-&gt;fsetxattr, fd, dict,</div><div class='add'>+               flags, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-unwind_fsetxattr (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+unwind_fsetxattr(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_fsetxattr_fop (long py_this, fop_fsetxattr_t fop)</div><div class='add'>+set_fsetxattr_fop(long py_this, fop_fsetxattr_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_FSETXATTR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_FSETXATTR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_fsetxattr_cbk (long py_this, fop_fsetxattr_cbk_t cbk)</div><div class='add'>+set_fsetxattr_cbk(long py_this, fop_fsetxattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_FSETXATTR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_FSETXATTR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: FGETXATTR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+glupy_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_FGETXATTR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_FGETXATTR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_fgetxattr_cbk_t)(priv-&gt;cbks[GLUPY_FGETXATTR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno, dict,</div><div class='del'>-                xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_fgetxattr_cbk_t)(priv-&gt;cbks[GLUPY_FGETXATTR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, dict, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, dict,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 const char *name, dict_t *xdata)</div><div class='add'>+glupy_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_FGETXATTR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_FGETXATTR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_fgetxattr_t)(priv-&gt;fops[GLUPY_FGETXATTR]))(</div><div class='del'>-                frame, this, fd, name, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_fgetxattr_t)(priv-&gt;fops[GLUPY_FGETXATTR]))(frame, this, fd,</div><div class='add'>+                                                           name, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_fgetxattr (call_frame_t *frame, xlator_t *xl, fd_t *fd,</div><div class='del'>-                const char *name, dict_t *xdata)</div><div class='add'>+wind_fgetxattr(call_frame_t *frame, xlator_t *xl, fd_t *fd, const char *name,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_fgetxattr_cbk, xl, xl-&gt;fops-&gt;fgetxattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_fgetxattr_cbk, xl, xl-&gt;fops-&gt;fgetxattr, fd, name,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-unwind_fgetxattr (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+unwind_fgetxattr(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, dict,</div><div class='del'>-                             xdata);</div><div class='del'>-</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-set_fgetxattr_fop (long py_this, fop_fgetxattr_t fop)</div><div class='add'>+set_fgetxattr_fop(long py_this, fop_fgetxattr_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_FGETXATTR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_FGETXATTR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-set_fgetxattr_cbk (long py_this, fop_fgetxattr_cbk_t cbk)</div><div class='add'>+set_fgetxattr_cbk(long py_this, fop_fgetxattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_FGETXATTR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_FGETXATTR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP:REMOVEXATTR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+glupy_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_REMOVEXATTR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_REMOVEXATTR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_removexattr_cbk_t)(priv-&gt;cbks[GLUPY_REMOVEXATTR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_removexattr_cbk_t)(priv-&gt;cbks[GLUPY_REMOVEXATTR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                   const char *name, dict_t *xdata)</div><div class='add'>+glupy_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                  const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_REMOVEXATTR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_REMOVEXATTR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_removexattr_t)(priv-&gt;fops[GLUPY_REMOVEXATTR]))(</div><div class='del'>-                frame, this, loc, name, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_removexattr_t)(priv-&gt;fops[GLUPY_REMOVEXATTR]))(frame, this, loc,</div><div class='add'>+                                                               name, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_removexattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_removexattr (call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='del'>-                  const char *name, dict_t *xdata)</div><div class='add'>+wind_removexattr(call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='add'>+                 const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_removexattr_cbk, xl, xl-&gt;fops-&gt;removexattr,</div><div class='del'>-                    loc, name, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_removexattr_cbk, xl, xl-&gt;fops-&gt;removexattr, loc,</div><div class='add'>+               name, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-unwind_removexattr (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+unwind_removexattr(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_removexattr_fop (long py_this, fop_removexattr_t fop)</div><div class='add'>+set_removexattr_fop(long py_this, fop_removexattr_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_REMOVEXATTR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_REMOVEXATTR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_removexattr_cbk (long py_this, fop_removexattr_cbk_t cbk)</div><div class='add'>+set_removexattr_cbk(long py_this, fop_removexattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_REMOVEXATTR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_REMOVEXATTR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP:FREMOVEXATTR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+glupy_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_FREMOVEXATTR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_FREMOVEXATTR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_fremovexattr_cbk_t)(priv-&gt;cbks[GLUPY_FREMOVEXATTR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_fremovexattr_cbk_t)(priv-&gt;cbks[GLUPY_FREMOVEXATTR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+glupy_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='ctx'>                    const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_FREMOVEXATTR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_FREMOVEXATTR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_fremovexattr_t)(priv-&gt;fops[GLUPY_FREMOVEXATTR]))(</div><div class='del'>-                frame, this, fd, name, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_fremovexattr_t)(priv-&gt;fops[GLUPY_FREMOVEXATTR]))(</div><div class='add'>+        frame, this, fd, name, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_fremovexattr (call_frame_t *frame, xlator_t *xl, fd_t *fd,</div><div class='del'>-                   const char *name, dict_t *xdata)</div><div class='add'>+wind_fremovexattr(call_frame_t *frame, xlator_t *xl, fd_t *fd, const char *name,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_fremovexattr_cbk, xl, xl-&gt;fops-&gt;fremovexattr,</div><div class='del'>-                    fd, name, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_fremovexattr_cbk, xl, xl-&gt;fops-&gt;fremovexattr, fd,</div><div class='add'>+               name, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-unwind_fremovexattr (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+unwind_fremovexattr(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(fremovexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_fremovexattr_fop (long py_this, fop_fremovexattr_t fop)</div><div class='add'>+set_fremovexattr_fop(long py_this, fop_fremovexattr_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_FREMOVEXATTR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_FREMOVEXATTR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_fremovexattr_cbk (long py_this, fop_fremovexattr_cbk_t cbk)</div><div class='add'>+set_fremovexattr_cbk(long py_this, fop_fremovexattr_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_FREMOVEXATTR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_FREMOVEXATTR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: LINK*/</div><div class='ctx'> int32_t</div><div class='del'>-glupy_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+glupy_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+               struct iatt *buf, struct iatt *preparent,</div><div class='add'>+               struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_LINK]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_LINK]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_link_cbk_t)(priv-&gt;cbks[GLUPY_LINK]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_link_cbk_t)(priv-&gt;cbks[GLUPY_LINK]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+        postparent, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> glupy_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='ctx'>            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_LINK]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_LINK]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_link_t)(priv-&gt;fops[GLUPY_LINK]))(</div><div class='del'>-                frame, this, oldloc, newloc, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_link_t)(priv-&gt;fops[GLUPY_LINK]))(frame, this, oldloc, newloc,</div><div class='add'>+                                                 xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_link_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_link (call_frame_t *frame, xlator_t *xl, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+wind_link(call_frame_t *frame, xlator_t *xl, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_link_cbk, xl, xl-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_link_cbk, xl, xl-&gt;fops-&gt;link, oldloc, newloc,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_link (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-             struct iatt *buf, struct iatt *preparent,</div><div class='del'>-             struct iatt *postparent, dict_t *xdata)</div><div class='add'>+unwind_link(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+            struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_link_fop (long py_this, fop_link_t fop)</div><div class='add'>+set_link_fop(long py_this, fop_link_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_LINK] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_LINK] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_link_cbk (long py_this, fop_link_cbk_t cbk)</div><div class='add'>+set_link_cbk(long py_this, fop_link_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_LINK] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_LINK] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* FOP: SYMLINK*/</div><div class='ctx'> int32_t</div><div class='del'>-glupy_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+glupy_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_SYMLINK]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_SYMLINK]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_symlink_cbk_t)(priv-&gt;cbks[GLUPY_SYMLINK]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_symlink_cbk_t)(priv-&gt;cbks[GLUPY_SYMLINK]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+        postparent, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(symlink, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> glupy_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='ctx'>               loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_SYMLINK]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_SYMLINK]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_symlink_t)(priv-&gt;fops[GLUPY_SYMLINK]))(</div><div class='del'>-                frame, this, linkname, loc, umask, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_symlink_t)(priv-&gt;fops[GLUPY_SYMLINK]))(frame, this, linkname,</div><div class='add'>+                                                       loc, umask, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_symlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc,</div><div class='del'>-                    umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_symlink (call_frame_t *frame, xlator_t *xl, const char *linkname,</div><div class='del'>-              loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+wind_symlink(call_frame_t *frame, xlator_t *xl, const char *linkname,</div><div class='add'>+             loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_symlink_cbk, xl, xl-&gt;fops-&gt;symlink,</div><div class='del'>-                    linkname, loc, umask, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_symlink_cbk, xl, xl-&gt;fops-&gt;symlink, linkname, loc,</div><div class='add'>+               umask, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_symlink (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+unwind_symlink(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+               int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+               struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(symlink, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_symlink_fop (long py_this, fop_symlink_t fop)</div><div class='add'>+set_symlink_fop(long py_this, fop_symlink_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_SYMLINK] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_SYMLINK] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_symlink_cbk (long py_this, fop_symlink_cbk_t cbk)</div><div class='add'>+set_symlink_cbk(long py_this, fop_symlink_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_SYMLINK] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_SYMLINK] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: READLINK */</div><div class='ctx'> int32_t</div><div class='del'>-glupy_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, const char *path,</div><div class='del'>-                    struct iatt *buf, dict_t *xdata)</div><div class='add'>+glupy_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                   struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_READLINK]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_READLINK]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_readlink_cbk_t)(priv-&gt;cbks[GLUPY_READLINK]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                path, buf, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_readlink_cbk_t)(priv-&gt;cbks[GLUPY_READLINK]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, path, buf, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readlink, frame, op_ret, op_errno, path,</div><div class='del'>-                             buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readlink, frame, op_ret, op_errno, path, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                size_t size, dict_t *xdata)</div><div class='add'>+glupy_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_READLINK]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_READLINK]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_readlink_t)(priv-&gt;fops[GLUPY_READLINK]))(</div><div class='del'>-                frame, this, loc, size, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_readlink_t)(priv-&gt;fops[GLUPY_READLINK]))(frame, this, loc, size,</div><div class='add'>+                                                         xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_readlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc,</div><div class='del'>-                    size, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_readlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_readlink (call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='del'>-               size_t size, dict_t *xdata)</div><div class='add'>+wind_readlink(call_frame_t *frame, xlator_t *xl, loc_t *loc, size_t size,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_readlink_cbk, xl, xl-&gt;fops-&gt;readlink,</div><div class='del'>-                    loc, size, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_readlink_cbk, xl, xl-&gt;fops-&gt;readlink, loc, size,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_readlink (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, const char *path,</div><div class='del'>-                 struct iatt *buf, dict_t *xdata)</div><div class='add'>+unwind_readlink(call_frame_t *frame, long cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (readlink, frame, op_ret, op_errno, path, buf,</div><div class='del'>-                             xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(readlink, frame, op_ret, op_errno, path, buf, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readlink_fop (long py_this, fop_readlink_t fop)</div><div class='add'>+set_readlink_fop(long py_this, fop_readlink_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_READLINK] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_READLINK] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_readlink_cbk (long py_this, fop_readlink_cbk_t cbk)</div><div class='add'>+set_readlink_cbk(long py_this, fop_readlink_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_READLINK] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_READLINK] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: UNLINK */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno,</div><div class='del'>-                  struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+glupy_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_UNLINK]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_UNLINK]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_unlink_cbk_t)(priv-&gt;cbks[GLUPY_UNLINK]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                preparent, postparent, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_unlink_cbk_t)(priv-&gt;cbks[GLUPY_UNLINK]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, preparent, postparent, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-              int xflags, dict_t *xdata)</div><div class='add'>+glupy_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_UNLINK]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_UNLINK]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_unlink_t)(priv-&gt;fops[GLUPY_UNLINK]))(</div><div class='del'>-                frame, this, loc, xflags, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_unlink_t)(priv-&gt;fops[GLUPY_UNLINK]))(frame, this, loc, xflags,</div><div class='add'>+                                                     xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_unlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc,</div><div class='del'>-                    xflags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_unlink (call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='del'>-             int xflags, dict_t *xdata)</div><div class='add'>+wind_unlink(call_frame_t *frame, xlator_t *xl, loc_t *loc, int xflags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_unlink_cbk, xl, xl-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflags, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_unlink_cbk, xl, xl-&gt;fops-&gt;unlink, loc, xflags,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_unlink (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno,</div><div class='del'>-               struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+unwind_unlink(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_unlink_fop (long py_this, fop_unlink_t fop)</div><div class='add'>+set_unlink_fop(long py_this, fop_unlink_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_UNLINK] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_UNLINK] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_unlink_cbk (long py_this, fop_unlink_cbk_t cbk)</div><div class='add'>+set_unlink_cbk(long py_this, fop_unlink_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_UNLINK] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_UNLINK] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: MKDIR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                 struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+glupy_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_MKDIR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_MKDIR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_mkdir_cbk_t)(priv-&gt;cbks[GLUPY_MKDIR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                inode, buf, preparent, postparent, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_mkdir_cbk_t)(priv-&gt;cbks[GLUPY_MKDIR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+        postparent, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(mkdir, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-             mode_t umask, dict_t *xdata)</div><div class='add'>+glupy_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+            mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_MKDIR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_MKDIR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_mkdir_t)(priv-&gt;fops[GLUPY_MKDIR]))(</div><div class='del'>-                frame, this, loc, mode, umask, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_mkdir_t)(priv-&gt;fops[GLUPY_MKDIR]))(frame, this, loc, mode,</div><div class='add'>+                                                   umask, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_mkdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_mkdir (call_frame_t *frame, xlator_t *xl, loc_t *loc, mode_t mode,</div><div class='del'>-            mode_t umask, dict_t *xdata)</div><div class='add'>+wind_mkdir(call_frame_t *frame, xlator_t *xl, loc_t *loc, mode_t mode,</div><div class='add'>+           mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        xlator_t        *this = THIS;</div><div class='del'>-</div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, glupy_mkdir_cbk, xl, xl-&gt;fops-&gt;mkdir,</div><div class='del'>-                    loc, mode, umask, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_mkdir_cbk, xl, xl-&gt;fops-&gt;mkdir, loc, mode, umask,</div><div class='add'>+               xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_mkdir (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-              struct iatt *buf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='add'>+unwind_mkdir(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(mkdir, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_mkdir_fop (long py_this, fop_mkdir_t fop)</div><div class='add'>+set_mkdir_fop(long py_this, fop_mkdir_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_MKDIR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_MKDIR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_mkdir_cbk (long py_this, fop_mkdir_cbk_t cbk)</div><div class='add'>+set_mkdir_cbk(long py_this, fop_mkdir_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_MKDIR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_MKDIR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* FOP: RMDIR */</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+glupy_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;cbks[GLUPY_RMDIR]) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;cbks[GLUPY_RMDIR]) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        ret = ((fop_rmdir_cbk_t)(priv-&gt;cbks[GLUPY_RMDIR]))(</div><div class='del'>-                frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                preparent, postparent, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    ret = ((fop_rmdir_cbk_t)(priv-&gt;cbks[GLUPY_RMDIR]))(</div><div class='add'>+        frame, cookie, this, op_ret, op_errno, preparent, postparent, xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (rmdir, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(rmdir, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-glupy_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             int xflags, dict_t *xdata)</div><div class='add'>+glupy_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-        PyGILState_STATE gstate;</div><div class='del'>-        int32_t ret;</div><div class='del'>-        static long next_id = 0;</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='add'>+    PyGILState_STATE gstate;</div><div class='add'>+    int32_t ret;</div><div class='add'>+    static long next_id = 0;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;fops[GLUPY_RMDIR]) {</div><div class='del'>-                goto wind;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;fops[GLUPY_RMDIR]) {</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gstate = glupy_enter();</div><div class='del'>-        frame-&gt;local = (void *)++next_id;</div><div class='del'>-        ret = ((fop_rmdir_t)(priv-&gt;fops[GLUPY_RMDIR]))(</div><div class='del'>-                frame, this, loc, xflags, xdata);</div><div class='del'>-        glupy_leave(gstate);</div><div class='add'>+    gstate = glupy_enter();</div><div class='add'>+    frame-&gt;local = (void *)++next_id;</div><div class='add'>+    ret = ((fop_rmdir_t)(priv-&gt;fops[GLUPY_RMDIR]))(frame, this, loc, xflags,</div><div class='add'>+                                                   xdata);</div><div class='add'>+    glupy_leave(gstate);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, glupy_rmdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc,</div><div class='del'>-                    xflags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, glupy_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-wind_rmdir (call_frame_t *frame, xlator_t *xl, loc_t *loc,</div><div class='del'>-            int xflags, dict_t *xdata)</div><div class='add'>+wind_rmdir(call_frame_t *frame, xlator_t *xl, loc_t *loc, int xflags,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    xlator_t *this = THIS;</div><div class='ctx'> </div><div class='del'>-        xlator_t        *this = THIS;</div><div class='add'>+    if (!xl || (xl == this)) {</div><div class='add'>+        xl = FIRST_CHILD(this);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!xl || (xl == this)) {</div><div class='del'>-                xl = FIRST_CHILD(this);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        STACK_WIND (frame, glupy_rmdir_cbk, xl, xl-&gt;fops-&gt;rmdir,</div><div class='del'>-                    loc, xflags, xdata);</div><div class='add'>+    STACK_WIND(frame, glupy_rmdir_cbk, xl, xl-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-unwind_rmdir (call_frame_t *frame, long cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno,</div><div class='del'>-              struct iatt *preparent, struct iatt *postparent,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+unwind_rmdir(call_frame_t *frame, long cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (rmdir, frame, op_ret, op_errno,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(rmdir, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_rmdir_fop (long py_this, fop_rmdir_t fop)</div><div class='add'>+set_rmdir_fop(long py_this, fop_rmdir_t fop)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;fops[GLUPY_RMDIR] = (long)fop;</div><div class='add'>+    priv-&gt;fops[GLUPY_RMDIR] = (long)fop;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-set_rmdir_cbk (long py_this, fop_rmdir_cbk_t cbk)</div><div class='add'>+set_rmdir_cbk(long py_this, fop_rmdir_cbk_t cbk)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv   = ((xlator_t *)py_this)-&gt;private;</div><div class='add'>+    glupy_private_t *priv = ((xlator_t *)py_this)-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;cbks[GLUPY_RMDIR] = (long)cbk;</div><div class='add'>+    priv-&gt;cbks[GLUPY_RMDIR] = (long)cbk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* NON-FOP-SPECIFIC CODE */</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> long</div><div class='del'>-get_id (call_frame_t *frame)</div><div class='add'>+get_id(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        return (long)(frame-&gt;local);</div><div class='add'>+    return (long)(frame-&gt;local);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-get_rootunique (call_frame_t *frame)</div><div class='add'>+get_rootunique(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        return frame-&gt;root-&gt;unique;</div><div class='add'>+    return frame-&gt;root-&gt;unique;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_glupy_mt_end);</div><div class='del'>-</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                       " failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_glupy_mt_end);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               " failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> py_error_log(const char *name, PyObject *pystr)</div><div class='ctx'> {</div><div class='ctx'> #if PY_MAJOR_VERSION &gt; 2</div><div class='del'>-        char            scr[256];</div><div class='del'>-        if (PyUnicode_Check(pystr)) {</div><div class='del'>-                PyObject *tmp =</div><div class='del'>-                        PyUnicode_AsEncodedString(pystr, "UTF-8", "strict");</div><div class='del'>-                if (tmp != NULL) {</div><div class='del'>-                        strncpy(scr, PyBytes_AS_STRING(pystr), sizeof(scr));</div><div class='del'>-                        Py_DECREF(tmp);</div><div class='del'>-                } else {</div><div class='del'>-                        strncpy(scr, "string encoding error", sizeof(scr));</div><div class='del'>-                }</div><div class='del'>-        } else if (PyBytes_Check(pystr)) {</div><div class='del'>-                strncpy(scr, PyBytes_AS_STRING(pystr), sizeof(scr));</div><div class='add'>+    char scr[256];</div><div class='add'>+    if (PyUnicode_Check(pystr)) {</div><div class='add'>+        PyObject *tmp = PyUnicode_AsEncodedString(pystr, "UTF-8", "strict");</div><div class='add'>+        if (tmp != NULL) {</div><div class='add'>+            strncpy(scr, PyBytes_AS_STRING(pystr), sizeof(scr));</div><div class='add'>+            Py_DECREF(tmp);</div><div class='ctx'>         } else {</div><div class='del'>-                strncpy(scr, "string encoding error", sizeof(scr));</div><div class='del'>-        }</div><div class='del'>-        gf_log (name, GF_LOG_ERROR, "Python error: %s", scr);</div><div class='add'>+            strncpy(scr, "string encoding error", sizeof(scr));</div><div class='add'>+        }</div><div class='add'>+    } else if (PyBytes_Check(pystr)) {</div><div class='add'>+        strncpy(scr, PyBytes_AS_STRING(pystr), sizeof(scr));</div><div class='add'>+    } else {</div><div class='add'>+        strncpy(scr, "string encoding error", sizeof(scr));</div><div class='add'>+    }</div><div class='add'>+    gf_log(name, GF_LOG_ERROR, "Python error: %s", scr);</div><div class='ctx'> #else</div><div class='del'>-        gf_log (name, GF_LOG_ERROR, "Python error: %s", PyString_AsString(pystr));</div><div class='add'>+    gf_log(name, GF_LOG_ERROR, "Python error: %s", PyString_AsString(pystr));</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static PyObject *</div><div class='del'>-encode (const char *str)</div><div class='add'>+encode(const char *str)</div><div class='ctx'> {</div><div class='ctx'> #if PY_MAJOR_VERSION &gt; 2</div><div class='del'>-        return PyUnicode_FromString(str);</div><div class='add'>+    return PyUnicode_FromString(str);</div><div class='ctx'> #else</div><div class='del'>-        return PyString_FromString(str);</div><div class='add'>+    return PyString_FromString(str);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        glupy_private_t         *priv           = NULL;</div><div class='del'>-        char                    *module_name    = NULL;</div><div class='del'>-        PyObject                *py_mod_name    = NULL;</div><div class='del'>-        PyObject                *py_init_func   = NULL;</div><div class='del'>-        PyObject                *py_args        = NULL;</div><div class='del'>-        PyObject                *syspath        = NULL;</div><div class='del'>-	PyObject                *path           = NULL;</div><div class='del'>-	PyObject                *error_type     = NULL;</div><div class='del'>-	PyObject                *error_msg      = NULL;</div><div class='del'>-	PyObject                *error_bt       = NULL;</div><div class='del'>-	static gf_boolean_t      py_inited      = _gf_false;</div><div class='del'>-        void *                   err_cleanup    = &amp;&amp;err_return;</div><div class='del'>-        char                     libpython[16];</div><div class='del'>-</div><div class='del'>-        if (dict_get_str(this-&gt;options,"module-name",&amp;module_name) != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "missing module-name");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	priv = GF_CALLOC (1, sizeof (glupy_private_t), gf_glupy_mt_priv);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                goto *err_cleanup;</div><div class='del'>-        }</div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        err_cleanup = &amp;&amp;err_free_priv;</div><div class='del'>-</div><div class='del'>-	if (!py_inited) {</div><div class='del'>-                /* FIXME:</div><div class='del'>-                 * This hack is necessary because glusterfs (rightly) loads</div><div class='del'>-                 * glupy.so with RTLD_LOCAL but glupy needs libpython to be</div><div class='del'>-                 * loaded with RTLD_GLOBAL even though glupy is correctly</div><div class='del'>-                 * linked with libpython.</div><div class='del'>-                 * This is needed because one of the internal modules of</div><div class='del'>-                 * python 2.x (lib-dynload/_struct.so) does not explicitly</div><div class='del'>-                 * link with libpython.</div><div class='del'>-                 */</div><div class='del'>-                snprintf(libpython, sizeof(libpython), "libpython%d.%d.so",</div><div class='del'>-                         PY_MAJOR_VERSION, PY_MINOR_VERSION);</div><div class='del'>-                if (!dlopen (libpython, RTLD_NOW|RTLD_GLOBAL)) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0,</div><div class='del'>-                                LG_MSG_DLOPEN_FAILED, "dlopen(%s) failed: %s",</div><div class='del'>-                                libpython, dlerror ());</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-	        /* </div><div class='del'>-                 * This must be done before Py_Initialize(),</div><div class='del'>-                 * because it will duplicate the environment,</div><div class='del'>-                 * and fail to see later environment updates.</div><div class='del'>-                 */</div><div class='del'>-	        setenv("PATH_GLUSTERFS_GLUPY_MODULE",</div><div class='del'>-                       PATH_GLUSTERFS_GLUPY_MODULE, 1);</div><div class='del'>-</div><div class='del'>-                Py_Initialize();</div><div class='del'>-                PyEval_InitThreads();</div><div class='del'>-</div><div class='del'>-                (void)pthread_key_create(&amp;gil_init_key,NULL);</div><div class='del'>-                (void)pthread_setspecific(gil_init_key,(void *)1);</div><div class='del'>-</div><div class='del'>-                /* PyEval_InitThreads takes this "for" us.  No thanks. */</div><div class='del'>-                PyEval_ReleaseLock();</div><div class='del'>-                py_inited = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	/* Adjust python's path */</div><div class='del'>-	syspath = PySys_GetObject("path");</div><div class='del'>-	path = encode(GLUSTER_PYTHON_PATH);</div><div class='del'>-	PyList_Append(syspath, path);</div><div class='del'>-	Py_DECREF(path);</div><div class='del'>-</div><div class='del'>-	py_mod_name = encode(module_name);</div><div class='del'>-        if (!py_mod_name) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "could not create name");</div><div class='del'>-                if (PyErr_Occurred()) {</div><div class='del'>-                        PyErr_Fetch (&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='del'>-                        py_error_log(this-&gt;name, error_msg);</div><div class='del'>-                }</div><div class='del'>-                goto *err_cleanup;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "py_mod_name = %s", module_name);</div><div class='del'>-        priv-&gt;py_module = PyImport_Import(py_mod_name);</div><div class='del'>-        Py_DECREF(py_mod_name);</div><div class='del'>-        if (!priv-&gt;py_module) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Python import of %s failed",</div><div class='del'>-                        module_name);</div><div class='del'>-                if (PyErr_Occurred()) {</div><div class='del'>-                        PyErr_Fetch (&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='del'>-                        py_error_log (this-&gt;name, error_msg);</div><div class='del'>-                }</div><div class='del'>-                goto *err_cleanup;</div><div class='del'>-        }</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "Import of %s succeeded", module_name);</div><div class='del'>-        err_cleanup = &amp;&amp;err_deref_module;</div><div class='del'>-</div><div class='del'>-        py_init_func = PyObject_GetAttrString(priv-&gt;py_module, "xlator");</div><div class='del'>-        if (!py_init_func || !PyCallable_Check(py_init_func)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "missing init func");</div><div class='del'>-                if (PyErr_Occurred()) {</div><div class='del'>-                        PyErr_Fetch (&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='del'>-                        py_error_log (this-&gt;name, error_msg);</div><div class='del'>-                }</div><div class='del'>-                goto *err_cleanup;</div><div class='del'>-        }</div><div class='del'>-        err_cleanup = &amp;&amp;err_deref_init;</div><div class='del'>-</div><div class='del'>-        py_args = PyTuple_New(1);</div><div class='del'>-        if (!py_args) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "could not create args");</div><div class='del'>-                if (PyErr_Occurred()) {</div><div class='del'>-                        PyErr_Fetch (&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='del'>-                        py_error_log (this-&gt;name, error_msg);</div><div class='del'>-                }</div><div class='del'>-                goto *err_cleanup;</div><div class='del'>-        }</div><div class='del'>-        PyTuple_SetItem(py_args,0,PyLong_FromLong((long)this));</div><div class='del'>-</div><div class='del'>-        /* TBD: pass in list of children */</div><div class='del'>-        priv-&gt;py_xlator = PyObject_CallObject(py_init_func, py_args);</div><div class='del'>-        Py_DECREF(py_args);</div><div class='del'>-        if (!priv-&gt;py_xlator) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Python init failed");</div><div class='del'>-                if (PyErr_Occurred()) {</div><div class='del'>-                        PyErr_Fetch (&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='del'>-                        py_error_log (this-&gt;name, error_msg);</div><div class='del'>-                }</div><div class='del'>-                goto *err_cleanup;</div><div class='del'>-        }</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "init returned %p", priv-&gt;py_xlator);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    glupy_private_t *priv = NULL;</div><div class='add'>+    char *module_name = NULL;</div><div class='add'>+    PyObject *py_mod_name = NULL;</div><div class='add'>+    PyObject *py_init_func = NULL;</div><div class='add'>+    PyObject *py_args = NULL;</div><div class='add'>+    PyObject *syspath = NULL;</div><div class='add'>+    PyObject *path = NULL;</div><div class='add'>+    PyObject *error_type = NULL;</div><div class='add'>+    PyObject *error_msg = NULL;</div><div class='add'>+    PyObject *error_bt = NULL;</div><div class='add'>+    static gf_boolean_t py_inited = _gf_false;</div><div class='add'>+    void *err_cleanup = &amp;&amp;err_return;</div><div class='add'>+    char libpython[16];</div><div class='add'>+</div><div class='add'>+    if (dict_get_str(this-&gt;options, "module-name", &amp;module_name) != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "missing module-name");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(glupy_private_t), gf_glupy_mt_priv);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        goto *err_cleanup;</div><div class='add'>+    }</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    err_cleanup = &amp;&amp;err_free_priv;</div><div class='add'>+</div><div class='add'>+    if (!py_inited) {</div><div class='add'>+        /* FIXME:</div><div class='add'>+         * This hack is necessary because glusterfs (rightly) loads</div><div class='add'>+         * glupy.so with RTLD_LOCAL but glupy needs libpython to be</div><div class='add'>+         * loaded with RTLD_GLOBAL even though glupy is correctly</div><div class='add'>+         * linked with libpython.</div><div class='add'>+         * This is needed because one of the internal modules of</div><div class='add'>+         * python 2.x (lib-dynload/_struct.so) does not explicitly</div><div class='add'>+         * link with libpython.</div><div class='add'>+         */</div><div class='add'>+        snprintf(libpython, sizeof(libpython), "libpython%d.%d.so",</div><div class='add'>+                 PY_MAJOR_VERSION, PY_MINOR_VERSION);</div><div class='add'>+        if (!dlopen(libpython, RTLD_NOW | RTLD_GLOBAL)) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, LG_MSG_DLOPEN_FAILED,</div><div class='add'>+                   "dlopen(%s) failed: %s", libpython, dlerror());</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /*</div><div class='add'>+         * This must be done before Py_Initialize(),</div><div class='add'>+         * because it will duplicate the environment,</div><div class='add'>+         * and fail to see later environment updates.</div><div class='add'>+         */</div><div class='add'>+        setenv("PATH_GLUSTERFS_GLUPY_MODULE", PATH_GLUSTERFS_GLUPY_MODULE, 1);</div><div class='add'>+</div><div class='add'>+        Py_Initialize();</div><div class='add'>+        PyEval_InitThreads();</div><div class='add'>+</div><div class='add'>+        (void)pthread_key_create(&amp;gil_init_key, NULL);</div><div class='add'>+        (void)pthread_setspecific(gil_init_key, (void *)1);</div><div class='add'>+</div><div class='add'>+        /* PyEval_InitThreads takes this "for" us.  No thanks. */</div><div class='add'>+        PyEval_ReleaseLock();</div><div class='add'>+        py_inited = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Adjust python's path */</div><div class='add'>+    syspath = PySys_GetObject("path");</div><div class='add'>+    path = encode(GLUSTER_PYTHON_PATH);</div><div class='add'>+    PyList_Append(syspath, path);</div><div class='add'>+    Py_DECREF(path);</div><div class='add'>+</div><div class='add'>+    py_mod_name = encode(module_name);</div><div class='add'>+    if (!py_mod_name) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "could not create name");</div><div class='add'>+        if (PyErr_Occurred()) {</div><div class='add'>+            PyErr_Fetch(&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='add'>+            py_error_log(this-&gt;name, error_msg);</div><div class='add'>+        }</div><div class='add'>+        goto *err_cleanup;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "py_mod_name = %s", module_name);</div><div class='add'>+    priv-&gt;py_module = PyImport_Import(py_mod_name);</div><div class='add'>+    Py_DECREF(py_mod_name);</div><div class='add'>+    if (!priv-&gt;py_module) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Python import of %s failed",</div><div class='add'>+               module_name);</div><div class='add'>+        if (PyErr_Occurred()) {</div><div class='add'>+            PyErr_Fetch(&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='add'>+            py_error_log(this-&gt;name, error_msg);</div><div class='add'>+        }</div><div class='add'>+        goto *err_cleanup;</div><div class='add'>+    }</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "Import of %s succeeded", module_name);</div><div class='add'>+    err_cleanup = &amp;&amp;err_deref_module;</div><div class='add'>+</div><div class='add'>+    py_init_func = PyObject_GetAttrString(priv-&gt;py_module, "xlator");</div><div class='add'>+    if (!py_init_func || !PyCallable_Check(py_init_func)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "missing init func");</div><div class='add'>+        if (PyErr_Occurred()) {</div><div class='add'>+            PyErr_Fetch(&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='add'>+            py_error_log(this-&gt;name, error_msg);</div><div class='add'>+        }</div><div class='add'>+        goto *err_cleanup;</div><div class='add'>+    }</div><div class='add'>+    err_cleanup = &amp;&amp;err_deref_init;</div><div class='add'>+</div><div class='add'>+    py_args = PyTuple_New(1);</div><div class='add'>+    if (!py_args) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "could not create args");</div><div class='add'>+        if (PyErr_Occurred()) {</div><div class='add'>+            PyErr_Fetch(&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='add'>+            py_error_log(this-&gt;name, error_msg);</div><div class='add'>+        }</div><div class='add'>+        goto *err_cleanup;</div><div class='add'>+    }</div><div class='add'>+    PyTuple_SetItem(py_args, 0, PyLong_FromLong((long)this));</div><div class='add'>+</div><div class='add'>+    /* TBD: pass in list of children */</div><div class='add'>+    priv-&gt;py_xlator = PyObject_CallObject(py_init_func, py_args);</div><div class='add'>+    Py_DECREF(py_args);</div><div class='add'>+    if (!priv-&gt;py_xlator) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Python init failed");</div><div class='add'>+        if (PyErr_Occurred()) {</div><div class='add'>+            PyErr_Fetch(&amp;error_type, &amp;error_msg, &amp;error_bt);</div><div class='add'>+            py_error_log(this-&gt;name, error_msg);</div><div class='add'>+        }</div><div class='add'>+        goto *err_cleanup;</div><div class='add'>+    }</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "init returned %p", priv-&gt;py_xlator);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err_deref_init:</div><div class='del'>-        Py_DECREF(py_init_func);</div><div class='add'>+    Py_DECREF(py_init_func);</div><div class='ctx'> err_deref_module:</div><div class='del'>-        Py_DECREF(priv-&gt;py_module);</div><div class='add'>+    Py_DECREF(priv-&gt;py_module);</div><div class='ctx'> err_free_priv:</div><div class='del'>-        GF_FREE(priv);</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> err_return:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        glupy_private_t *priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (!priv)</div><div class='del'>-                return;</div><div class='del'>-        Py_DECREF(priv-&gt;py_xlator);</div><div class='del'>-        Py_DECREF(priv-&gt;py_module);</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        GF_FREE (priv);</div><div class='add'>+    glupy_private_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    if (!priv)</div><div class='ctx'>         return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct xlator_fops fops = {</div><div class='del'>-        .lookup       = glupy_lookup,</div><div class='del'>-        .create       = glupy_create,</div><div class='del'>-        .open         = glupy_open,</div><div class='del'>-        .readv        = glupy_readv,</div><div class='del'>-        .writev       = glupy_writev,</div><div class='del'>-        .opendir      = glupy_opendir,</div><div class='del'>-        .readdir      = glupy_readdir,</div><div class='del'>-        .stat         = glupy_stat,</div><div class='del'>-        .fstat        = glupy_fstat,</div><div class='del'>-        .setxattr     = glupy_setxattr,</div><div class='del'>-        .getxattr     = glupy_getxattr,</div><div class='del'>-        .fsetxattr    = glupy_fsetxattr,</div><div class='del'>-        .fgetxattr    = glupy_fgetxattr,</div><div class='del'>-        .removexattr  = glupy_removexattr,</div><div class='del'>-        .fremovexattr = glupy_fremovexattr,</div><div class='del'>-        .link         = glupy_link,</div><div class='del'>-        .unlink       = glupy_unlink,</div><div class='del'>-        .readlink     = glupy_readlink,</div><div class='del'>-        .symlink      = glupy_symlink,</div><div class='del'>-        .mkdir        = glupy_mkdir,</div><div class='del'>-        .rmdir        = glupy_rmdir,</div><div class='del'>-        .statfs       = glupy_statfs,</div><div class='del'>-        .readdirp     = glupy_readdirp</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-};</div><div class='add'>+    Py_DECREF(priv-&gt;py_xlator);</div><div class='add'>+    Py_DECREF(priv-&gt;py_module);</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+struct xlator_fops fops = {.lookup = glupy_lookup,</div><div class='add'>+                           .create = glupy_create,</div><div class='add'>+                           .open = glupy_open,</div><div class='add'>+                           .readv = glupy_readv,</div><div class='add'>+                           .writev = glupy_writev,</div><div class='add'>+                           .opendir = glupy_opendir,</div><div class='add'>+                           .readdir = glupy_readdir,</div><div class='add'>+                           .stat = glupy_stat,</div><div class='add'>+                           .fstat = glupy_fstat,</div><div class='add'>+                           .setxattr = glupy_setxattr,</div><div class='add'>+                           .getxattr = glupy_getxattr,</div><div class='add'>+                           .fsetxattr = glupy_fsetxattr,</div><div class='add'>+                           .fgetxattr = glupy_fgetxattr,</div><div class='add'>+                           .removexattr = glupy_removexattr,</div><div class='add'>+                           .fremovexattr = glupy_fremovexattr,</div><div class='add'>+                           .link = glupy_link,</div><div class='add'>+                           .unlink = glupy_unlink,</div><div class='add'>+                           .readlink = glupy_readlink,</div><div class='add'>+                           .symlink = glupy_symlink,</div><div class='add'>+                           .mkdir = glupy_mkdir,</div><div class='add'>+                           .rmdir = glupy_rmdir,</div><div class='add'>+                           .statfs = glupy_statfs,</div><div class='add'>+                           .readdirp = glupy_readdirp};</div><div class='add'>+</div><div class='add'>+struct xlator_cbks cbks = {};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/index/src/index.c b/xlators/features/index/src/index.c<br/>index 3a518248c13..08785f21a2a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/index/src/index.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/index/src/index.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/index/src/index.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/index/src/index.c</a></div><div class='hunk'>@@ -23,2583 +23,2567 @@</div><div class='ctx'> #define ENTRY_CHANGES_SUBDIR "entry-changes"</div><div class='ctx'> </div><div class='ctx'> struct index_syncop_args {</div><div class='del'>-        inode_t *parent;</div><div class='del'>-        gf_dirent_t *entries;</div><div class='del'>-        char *path;</div><div class='add'>+    inode_t *parent;</div><div class='add'>+    gf_dirent_t *entries;</div><div class='add'>+    char *path;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> static char *index_vgfid_xattrs[XATTROP_TYPE_END] = {</div><div class='del'>-        [XATTROP] = GF_XATTROP_INDEX_GFID,</div><div class='del'>-        [DIRTY] = GF_XATTROP_DIRTY_GFID,</div><div class='del'>-        [ENTRY_CHANGES] = GF_XATTROP_ENTRY_CHANGES_GFID</div><div class='del'>-};</div><div class='add'>+    [XATTROP] = GF_XATTROP_INDEX_GFID,</div><div class='add'>+    [DIRTY] = GF_XATTROP_DIRTY_GFID,</div><div class='add'>+    [ENTRY_CHANGES] = GF_XATTROP_ENTRY_CHANGES_GFID};</div><div class='ctx'> </div><div class='ctx'> static char *index_subdirs[XATTROP_TYPE_END] = {</div><div class='del'>-        [XATTROP] = XATTROP_SUBDIR,</div><div class='del'>-        [DIRTY] = DIRTY_SUBDIR,</div><div class='del'>-        [ENTRY_CHANGES] = ENTRY_CHANGES_SUBDIR</div><div class='del'>-};</div><div class='add'>+    [XATTROP] = XATTROP_SUBDIR,</div><div class='add'>+    [DIRTY] = DIRTY_SUBDIR,</div><div class='add'>+    [ENTRY_CHANGES] = ENTRY_CHANGES_SUBDIR};</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_get_type_from_vgfid (index_priv_t *priv, uuid_t vgfid)</div><div class='add'>+index_get_type_from_vgfid(index_priv_t *priv, uuid_t vgfid)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; XATTROP_TYPE_END; i++) {</div><div class='del'>-                if (gf_uuid_compare (priv-&gt;internal_vgfid[i], vgfid) == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    for (i = 0; i &lt; XATTROP_TYPE_END; i++) {</div><div class='add'>+        if (gf_uuid_compare(priv-&gt;internal_vgfid[i], vgfid) == 0)</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-index_is_virtual_gfid (index_priv_t *priv, uuid_t vgfid)</div><div class='add'>+index_is_virtual_gfid(index_priv_t *priv, uuid_t vgfid)</div><div class='ctx'> {</div><div class='del'>-        if (index_get_type_from_vgfid (priv, vgfid) &lt; 0)</div><div class='del'>-                return _gf_false;</div><div class='del'>-        return _gf_true;</div><div class='add'>+    if (index_get_type_from_vgfid(priv, vgfid) &lt; 0)</div><div class='add'>+        return _gf_false;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__index_inode_ctx_get (inode_t *inode, xlator_t *this, index_inode_ctx_t **ctx)</div><div class='del'>-{</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        index_inode_ctx_t *ictx = NULL;</div><div class='del'>-        uint64_t          tmpctx = 0;</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;tmpctx);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                ictx = (index_inode_ctx_t *) (long) tmpctx;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ictx = GF_CALLOC (1, sizeof (*ictx), gf_index_inode_ctx_t);</div><div class='del'>-        if (!ictx) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;ictx-&gt;callstubs);</div><div class='del'>-        ret = __inode_ctx_put (inode, this, (uint64_t)ictx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (ictx);</div><div class='del'>-                ictx = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+__index_inode_ctx_get(inode_t *inode, xlator_t *this, index_inode_ctx_t **ctx)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    index_inode_ctx_t *ictx = NULL;</div><div class='add'>+    uint64_t tmpctx = 0;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;tmpctx);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        ictx = (index_inode_ctx_t *)(long)tmpctx;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ictx = GF_CALLOC(1, sizeof(*ictx), gf_index_inode_ctx_t);</div><div class='add'>+    if (!ictx) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;ictx-&gt;callstubs);</div><div class='add'>+    ret = __inode_ctx_put(inode, this, (uint64_t)ictx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(ictx);</div><div class='add'>+        ictx = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (ictx)</div><div class='del'>-                *ctx = ictx;</div><div class='del'>-        return ret;</div><div class='add'>+    if (ictx)</div><div class='add'>+        *ctx = ictx;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-index_inode_ctx_get (inode_t *inode, xlator_t *this, index_inode_ctx_t **ctx)</div><div class='add'>+index_inode_ctx_get(inode_t *inode, xlator_t *this, index_inode_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        int               ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __index_inode_ctx_get (inode, this, ctx);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __index_inode_ctx_get(inode, this, ctx);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-index_is_subdir_of_entry_changes (xlator_t *this, inode_t *inode)</div><div class='add'>+index_is_subdir_of_entry_changes(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        index_inode_ctx_t *ctx  = NULL;</div><div class='del'>-        int               ret   = 0;</div><div class='add'>+    index_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = index_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if ((ret == 0) &amp;&amp; !gf_uuid_is_null (ctx-&gt;virtual_pargfid))</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (!inode)</div><div class='ctx'>         return _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = index_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if ((ret == 0) &amp;&amp; !gf_uuid_is_null(ctx-&gt;virtual_pargfid))</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-index_get_type_from_vgfid_xattr (const char *name)</div><div class='add'>+index_get_type_from_vgfid_xattr(const char *name)</div><div class='ctx'> {</div><div class='del'>-        int i = 0;</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; i &lt; XATTROP_TYPE_END; i++) {</div><div class='del'>-                if (strcmp (name, index_vgfid_xattrs[i]) == 0)</div><div class='del'>-                        return i;</div><div class='del'>-        }</div><div class='del'>-        return -1;</div><div class='add'>+    for (i = 0; i &lt; XATTROP_TYPE_END; i++) {</div><div class='add'>+        if (strcmp(name, index_vgfid_xattrs[i]) == 0)</div><div class='add'>+            return i;</div><div class='add'>+    }</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-index_is_fop_on_internal_inode (xlator_t *this, inode_t *inode, uuid_t gfid)</div><div class='add'>+index_is_fop_on_internal_inode(xlator_t *this, inode_t *inode, uuid_t gfid)</div><div class='ctx'> {</div><div class='del'>-        index_priv_t *priv = this-&gt;private;</div><div class='del'>-        uuid_t       vgfid = {0};</div><div class='add'>+    index_priv_t *priv = this-&gt;private;</div><div class='add'>+    uuid_t vgfid = {0};</div><div class='ctx'> </div><div class='del'>-        if (!inode)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!inode)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (gfid &amp;&amp; !gf_uuid_is_null (gfid))</div><div class='del'>-                gf_uuid_copy (vgfid, gfid);</div><div class='del'>-        else</div><div class='del'>-                gf_uuid_copy (vgfid, inode-&gt;gfid);</div><div class='add'>+    if (gfid &amp;&amp; !gf_uuid_is_null(gfid))</div><div class='add'>+        gf_uuid_copy(vgfid, gfid);</div><div class='add'>+    else</div><div class='add'>+        gf_uuid_copy(vgfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        if (index_is_virtual_gfid (priv, vgfid))</div><div class='del'>-                return _gf_true;</div><div class='del'>-        if (index_is_subdir_of_entry_changes (this, inode))</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (index_is_virtual_gfid(priv, vgfid))</div><div class='add'>+        return _gf_true;</div><div class='add'>+    if (index_is_subdir_of_entry_changes(this, inode))</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-index_is_vgfid_xattr (const char *name)</div><div class='add'>+index_is_vgfid_xattr(const char *name)</div><div class='ctx'> {</div><div class='del'>-        if (index_get_type_from_vgfid_xattr (name) &lt; 0)</div><div class='del'>-                return _gf_false;</div><div class='del'>-        return _gf_true;</div><div class='add'>+    if (index_get_type_from_vgfid_xattr(name) &lt; 0)</div><div class='add'>+        return _gf_false;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> call_stub_t *</div><div class='del'>-__index_dequeue (struct list_head *callstubs)</div><div class='add'>+__index_dequeue(struct list_head *callstubs)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!list_empty (callstubs)) {</div><div class='del'>-                stub = list_entry (callstubs-&gt;next, call_stub_t, list);</div><div class='del'>-                list_del_init (&amp;stub-&gt;list);</div><div class='del'>-        }</div><div class='add'>+    if (!list_empty(callstubs)) {</div><div class='add'>+        stub = list_entry(callstubs-&gt;next, call_stub_t, list);</div><div class='add'>+        list_del_init(&amp;stub-&gt;list);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return stub;</div><div class='add'>+    return stub;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__index_enqueue (struct list_head *callstubs, call_stub_t *stub)</div><div class='add'>+__index_enqueue(struct list_head *callstubs, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        list_add_tail (&amp;stub-&gt;list, callstubs);</div><div class='add'>+    list_add_tail(&amp;stub-&gt;list, callstubs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-worker_enqueue (xlator_t *this, call_stub_t *stub)</div><div class='add'>+worker_enqueue(xlator_t *this, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        index_priv_t    *priv = NULL;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __index_enqueue (&amp;priv-&gt;callstubs, stub);</div><div class='del'>-                pthread_cond_signal (&amp;priv-&gt;cond);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __index_enqueue(&amp;priv-&gt;callstubs, stub);</div><div class='add'>+        pthread_cond_signal(&amp;priv-&gt;cond);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-index_worker (void *data)</div><div class='del'>-{</div><div class='del'>-        index_priv_t     *priv = NULL;</div><div class='del'>-        xlator_t         *this = NULL;</div><div class='del'>-        call_stub_t      *stub = NULL;</div><div class='del'>-        gf_boolean_t      bye = _gf_false;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        THIS = data;</div><div class='del'>-        this = data;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        for (;;) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        while (list_empty (&amp;priv-&gt;callstubs)) {</div><div class='del'>-                                if (priv-&gt;down) {</div><div class='del'>-                                        bye = _gf_true;/*Avoid wait*/</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                                (void) pthread_cond_wait (&amp;priv-&gt;cond,</div><div class='del'>-                                                          &amp;priv-&gt;mutex);</div><div class='del'>-                                if (priv-&gt;down) {</div><div class='del'>-                                        bye = _gf_true;</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        if (!bye)</div><div class='del'>-                                stub = __index_dequeue (&amp;priv-&gt;callstubs);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='add'>+index_worker(void *data)</div><div class='add'>+{</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    gf_boolean_t bye = _gf_false;</div><div class='ctx'> </div><div class='del'>-                if (stub) /* guard against spurious wakeups */</div><div class='del'>-                        call_resume (stub);</div><div class='del'>-                stub = NULL;</div><div class='del'>-                if (bye)</div><div class='del'>-                        break;</div><div class='add'>+    THIS = data;</div><div class='add'>+    this = data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            while (list_empty(&amp;priv-&gt;callstubs)) {</div><div class='add'>+                if (priv-&gt;down) {</div><div class='add'>+                    bye = _gf_true; /*Avoid wait*/</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+                (void)pthread_cond_wait(&amp;priv-&gt;cond, &amp;priv-&gt;mutex);</div><div class='add'>+                if (priv-&gt;down) {</div><div class='add'>+                    bye = _gf_true;</div><div class='add'>+                    break;</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+            if (!bye)</div><div class='add'>+                stub = __index_dequeue(&amp;priv-&gt;callstubs);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+        if (stub) /* guard against spurious wakeups */</div><div class='add'>+            call_resume(stub);</div><div class='add'>+        stub = NULL;</div><div class='add'>+        if (bye)</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-make_index_dir_path (char *base, const char *subdir,</div><div class='del'>-                     char *index_dir, size_t len)</div><div class='add'>+make_index_dir_path(char *base, const char *subdir, char *index_dir, size_t len)</div><div class='ctx'> {</div><div class='del'>-        snprintf (index_dir, len, "%s/%s", base, subdir);</div><div class='add'>+    snprintf(index_dir, len, "%s/%s", base, subdir);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_dir_create (xlator_t *this, const char *subdir)</div><div class='del'>-{</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        struct       stat st = {0};</div><div class='del'>-        char         fullpath[PATH_MAX] = {0};</div><div class='del'>-        char         path[PATH_MAX] = {0};</div><div class='del'>-        char         *dir = NULL;</div><div class='del'>-        index_priv_t *priv = NULL;</div><div class='del'>-        size_t       len = 0;</div><div class='del'>-        size_t       pathlen = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        make_index_dir_path (priv-&gt;index_basepath, subdir, fullpath,</div><div class='del'>-                             sizeof (fullpath));</div><div class='del'>-        ret = sys_stat (fullpath, &amp;st);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                if (!S_ISDIR (st.st_mode))</div><div class='del'>-                        ret = -2;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pathlen = strlen (fullpath);</div><div class='del'>-        if ((pathlen &gt; 1) &amp;&amp; fullpath[pathlen - 1] == '/')</div><div class='del'>-                fullpath[pathlen - 1] = '\0';</div><div class='del'>-        dir = strchr (fullpath, '/');</div><div class='del'>-        while (dir) {</div><div class='del'>-                dir = strchr (dir + 1, '/');</div><div class='del'>-                if (dir)</div><div class='del'>-                        len = pathlen - strlen (dir);</div><div class='del'>-                else</div><div class='del'>-                        len = pathlen;</div><div class='del'>-                strncpy (path, fullpath, len);</div><div class='del'>-                path[len] = '\0';</div><div class='del'>-                ret = sys_mkdir (path, 0600);</div><div class='del'>-                if (ret &amp;&amp; (errno != EEXIST))</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+index_dir_create(xlator_t *this, const char *subdir)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct stat st = {0};</div><div class='add'>+    char fullpath[PATH_MAX] = {0};</div><div class='add'>+    char path[PATH_MAX] = {0};</div><div class='add'>+    char *dir = NULL;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    size_t len = 0;</div><div class='add'>+    size_t pathlen = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    make_index_dir_path(priv-&gt;index_basepath, subdir, fullpath,</div><div class='add'>+                        sizeof(fullpath));</div><div class='add'>+    ret = sys_stat(fullpath, &amp;st);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        if (!S_ISDIR(st.st_mode))</div><div class='add'>+            ret = -2;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pathlen = strlen(fullpath);</div><div class='add'>+    if ((pathlen &gt; 1) &amp;&amp; fullpath[pathlen - 1] == '/')</div><div class='add'>+        fullpath[pathlen - 1] = '\0';</div><div class='add'>+    dir = strchr(fullpath, '/');</div><div class='add'>+    while (dir) {</div><div class='add'>+        dir = strchr(dir + 1, '/');</div><div class='add'>+        if (dir)</div><div class='add'>+            len = pathlen - strlen(dir);</div><div class='add'>+        else</div><div class='add'>+            len = pathlen;</div><div class='add'>+        strncpy(path, fullpath, len);</div><div class='add'>+        path[len] = '\0';</div><div class='add'>+        ret = sys_mkdir(path, 0600);</div><div class='add'>+        if (ret &amp;&amp; (errno != EEXIST))</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        INDEX_MSG_INDEX_DIR_CREATE_FAILED, "%s/%s: Failed to "</div><div class='del'>-                        "create", priv-&gt;index_basepath, subdir);</div><div class='del'>-        } else if (ret == -2) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ENOTDIR,</div><div class='del'>-                        INDEX_MSG_INDEX_DIR_CREATE_FAILED, "%s/%s: Failed to "</div><div class='del'>-                        "create, path exists, not a directory ",</div><div class='del'>-                        priv-&gt;index_basepath, subdir);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               INDEX_MSG_INDEX_DIR_CREATE_FAILED,</div><div class='add'>+               "%s/%s: Failed to "</div><div class='add'>+               "create",</div><div class='add'>+               priv-&gt;index_basepath, subdir);</div><div class='add'>+    } else if (ret == -2) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ENOTDIR,</div><div class='add'>+               INDEX_MSG_INDEX_DIR_CREATE_FAILED,</div><div class='add'>+               "%s/%s: Failed to "</div><div class='add'>+               "create, path exists, not a directory ",</div><div class='add'>+               priv-&gt;index_basepath, subdir);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-index_get_index (index_priv_t *priv, uuid_t index)</div><div class='add'>+index_get_index(index_priv_t *priv, uuid_t index)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                gf_uuid_copy (index, priv-&gt;index);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        gf_uuid_copy(index, priv-&gt;index);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-index_generate_index (index_priv_t *priv, uuid_t index)</div><div class='add'>+index_generate_index(index_priv_t *priv, uuid_t index)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;priv-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                //To prevent duplicate generates.</div><div class='del'>-                //This method fails if number of contending threads is greater</div><div class='del'>-                //than MAX_LINK count of the fs</div><div class='del'>-                if (!gf_uuid_compare (priv-&gt;index, index))</div><div class='del'>-                        gf_uuid_generate (priv-&gt;index);</div><div class='del'>-                gf_uuid_copy (index, priv-&gt;index);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK(&amp;priv-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        // To prevent duplicate generates.</div><div class='add'>+        // This method fails if number of contending threads is greater</div><div class='add'>+        // than MAX_LINK count of the fs</div><div class='add'>+        if (!gf_uuid_compare(priv-&gt;index, index))</div><div class='add'>+            gf_uuid_generate(priv-&gt;index);</div><div class='add'>+        gf_uuid_copy(index, priv-&gt;index);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;priv-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-make_index_path (char *base, const char *subdir, uuid_t index,</div><div class='del'>-                 char *index_path, size_t len)</div><div class='add'>+make_index_path(char *base, const char *subdir, uuid_t index, char *index_path,</div><div class='add'>+                size_t len)</div><div class='ctx'> {</div><div class='del'>-        make_index_dir_path (base, subdir, index_path, len);</div><div class='del'>-        snprintf (index_path + strlen (index_path), len - strlen (index_path),</div><div class='del'>-                  "/%s-%s", subdir, uuid_utoa (index));</div><div class='add'>+    make_index_dir_path(base, subdir, index_path, len);</div><div class='add'>+    snprintf(index_path + strlen(index_path), len - strlen(index_path),</div><div class='add'>+             "/%s-%s", subdir, uuid_utoa(index));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-make_gfid_path (char *base, const char *subdir, uuid_t gfid,</div><div class='del'>-                char *gfid_path, size_t len)</div><div class='add'>+make_gfid_path(char *base, const char *subdir, uuid_t gfid, char *gfid_path,</div><div class='add'>+               size_t len)</div><div class='ctx'> {</div><div class='del'>-        make_index_dir_path (base, subdir, gfid_path, len);</div><div class='del'>-        snprintf (gfid_path + strlen (gfid_path), len - strlen (gfid_path),</div><div class='del'>-                  "/%s", uuid_utoa (gfid));</div><div class='add'>+    make_index_dir_path(base, subdir, gfid_path, len);</div><div class='add'>+    snprintf(gfid_path + strlen(gfid_path), len - strlen(gfid_path), "/%s",</div><div class='add'>+             uuid_utoa(gfid));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-make_file_path (char *base, const char *subdir, const char *filename,</div><div class='del'>-                char *file_path, size_t len)</div><div class='add'>+make_file_path(char *base, const char *subdir, const char *filename,</div><div class='add'>+               char *file_path, size_t len)</div><div class='ctx'> {</div><div class='del'>-        make_index_dir_path (base, subdir, file_path, len);</div><div class='del'>-        snprintf (file_path + strlen (file_path), len - strlen (file_path),</div><div class='del'>-                  "/%s", filename);</div><div class='add'>+    make_index_dir_path(base, subdir, file_path, len);</div><div class='add'>+    snprintf(file_path + strlen(file_path), len - strlen(file_path), "/%s",</div><div class='add'>+             filename);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-is_index_file_current (char *filename, uuid_t priv_index, char *subdir)</div><div class='add'>+is_index_file_current(char *filename, uuid_t priv_index, char *subdir)</div><div class='ctx'> {</div><div class='del'>-        char current_index[GF_UUID_BUF_SIZE + 16] = {0, };</div><div class='add'>+    char current_index[GF_UUID_BUF_SIZE + 16] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        snprintf (current_index, sizeof current_index,</div><div class='del'>-                  "%s-%s", subdir, uuid_utoa(priv_index));</div><div class='del'>-        return (!strcmp(filename, current_index));</div><div class='add'>+    snprintf(current_index, sizeof current_index, "%s-%s", subdir,</div><div class='add'>+             uuid_utoa(priv_index));</div><div class='add'>+    return (!strcmp(filename, current_index));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-check_delete_stale_index_file (xlator_t *this, char *filename, char *subdir)</div><div class='add'>+check_delete_stale_index_file(xlator_t *this, char *filename, char *subdir)</div><div class='ctx'> {</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        struct stat     st = {0};</div><div class='del'>-        char            filepath[PATH_MAX] = {0};</div><div class='del'>-        index_priv_t    *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct stat st = {0};</div><div class='add'>+    char filepath[PATH_MAX] = {0};</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (is_index_file_current (filename, priv-&gt;index, subdir))</div><div class='del'>-                return;</div><div class='add'>+    if (is_index_file_current(filename, priv-&gt;index, subdir))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        make_file_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                        filename, filepath, sizeof (filepath));</div><div class='del'>-        ret = sys_stat (filepath, &amp;st);</div><div class='del'>-        if (!ret &amp;&amp; st.st_nlink == 1)</div><div class='del'>-                sys_unlink (filepath);</div><div class='add'>+    make_file_path(priv-&gt;index_basepath, subdir, filename, filepath,</div><div class='add'>+                   sizeof(filepath));</div><div class='add'>+    ret = sys_stat(filepath, &amp;st);</div><div class='add'>+    if (!ret &amp;&amp; st.st_nlink == 1)</div><div class='add'>+        sys_unlink(filepath);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-index_set_link_count (index_priv_t *priv, int64_t count,</div><div class='del'>-                      index_xattrop_type_t type)</div><div class='add'>+index_set_link_count(index_priv_t *priv, int64_t count,</div><div class='add'>+                     index_xattrop_type_t type)</div><div class='ctx'> {</div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case XATTROP:</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        priv-&gt;pending_count = count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-                break;</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                priv-&gt;pending_count = count;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-index_get_link_count (index_priv_t *priv, int64_t *count,</div><div class='del'>-                      index_xattrop_type_t type)</div><div class='add'>+index_get_link_count(index_priv_t *priv, int64_t *count,</div><div class='add'>+                     index_xattrop_type_t type)</div><div class='ctx'> {</div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case XATTROP:</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        *count = priv-&gt;pending_count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-                break;</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                *count = priv-&gt;pending_count;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-index_dec_link_count (index_priv_t *priv, index_xattrop_type_t type)</div><div class='add'>+index_dec_link_count(index_priv_t *priv, index_xattrop_type_t type)</div><div class='ctx'> {</div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case XATTROP:</div><div class='del'>-                LOCK (&amp;priv-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        priv-&gt;pending_count--;</div><div class='del'>-                        if (priv-&gt;pending_count == 0)</div><div class='del'>-                                priv-&gt;pending_count--;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;priv-&gt;lock);</div><div class='del'>-                break;</div><div class='add'>+            LOCK(&amp;priv-&gt;lock);</div><div class='add'>+            {</div><div class='add'>+                priv-&gt;pending_count--;</div><div class='add'>+                if (priv-&gt;pending_count == 0)</div><div class='add'>+                    priv-&gt;pending_count--;</div><div class='add'>+            }</div><div class='add'>+            UNLOCK(&amp;priv-&gt;lock);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char*</div><div class='del'>-index_get_subdir_from_type (index_xattrop_type_t type)</div><div class='add'>+char *</div><div class='add'>+index_get_subdir_from_type(index_xattrop_type_t type)</div><div class='ctx'> {</div><div class='del'>-        if (type &lt; XATTROP || type &gt;= XATTROP_TYPE_END)</div><div class='del'>-                return NULL;</div><div class='del'>-        return index_subdirs[type];</div><div class='add'>+    if (type &lt; XATTROP || type &gt;= XATTROP_TYPE_END)</div><div class='add'>+        return NULL;</div><div class='add'>+    return index_subdirs[type];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char*</div><div class='del'>-index_get_subdir_from_vgfid (index_priv_t *priv, uuid_t vgfid)</div><div class='add'>+char *</div><div class='add'>+index_get_subdir_from_vgfid(index_priv_t *priv, uuid_t vgfid)</div><div class='ctx'> {</div><div class='del'>-        return index_get_subdir_from_type (index_get_type_from_vgfid (priv,</div><div class='del'>-                                                                vgfid));</div><div class='add'>+    return index_get_subdir_from_type(index_get_type_from_vgfid(priv, vgfid));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-index_fill_readdir (fd_t *fd, index_fd_ctx_t *fctx, DIR *dir, off_t off,</div><div class='del'>-                    size_t size, gf_dirent_t *entries)</div><div class='del'>-{</div><div class='del'>-        off_t           in_case = -1;</div><div class='del'>-        off_t           last_off = 0;</div><div class='del'>-        size_t          filled = 0;</div><div class='del'>-        int             count = 0;</div><div class='del'>-        struct dirent  *entry = NULL;</div><div class='del'>-        struct dirent   scratch[2] = {{0,},};</div><div class='del'>-        int32_t         this_size = -1;</div><div class='del'>-        gf_dirent_t    *this_entry = NULL;</div><div class='del'>-        xlator_t       *this = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-        if (!off) {</div><div class='del'>-                rewinddir (dir);</div><div class='del'>-        } else {</div><div class='del'>-                seekdir (dir, off);</div><div class='add'>+index_fill_readdir(fd_t *fd, index_fd_ctx_t *fctx, DIR *dir, off_t off,</div><div class='add'>+                   size_t size, gf_dirent_t *entries)</div><div class='add'>+{</div><div class='add'>+    off_t in_case = -1;</div><div class='add'>+    off_t last_off = 0;</div><div class='add'>+    size_t filled = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    int32_t this_size = -1;</div><div class='add'>+    gf_dirent_t *this_entry = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+    if (!off) {</div><div class='add'>+        rewinddir(dir);</div><div class='add'>+    } else {</div><div class='add'>+        seekdir(dir, off);</div><div class='ctx'> #ifndef GF_LINUX_HOST_OS</div><div class='del'>-                if ((u_long)telldir(dir) != off &amp;&amp; off != fctx-&gt;dir_eof) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='del'>-                                "seekdir(0x%llx) failed on dir=%p: "</div><div class='del'>-				"Invalid argument (offset reused from "</div><div class='del'>-				"another DIR * structure?)", off, dir);</div><div class='del'>-                        errno = EINVAL;</div><div class='del'>-                        count = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-#endif /* GF_LINUX_HOST_OS */</div><div class='add'>+        if ((u_long)telldir(dir) != off &amp;&amp; off != fctx-&gt;dir_eof) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+                   INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='add'>+                   "seekdir(0x%llx) failed on dir=%p: "</div><div class='add'>+                   "Invalid argument (offset reused from "</div><div class='add'>+                   "another DIR * structure?)",</div><div class='add'>+                   off, dir);</div><div class='add'>+            errno = EINVAL;</div><div class='add'>+            count = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+#endif /* GF_LINUX_HOST_OS */</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        while (filled &lt;= size) {</div><div class='del'>-                in_case = (u_long)telldir (dir);</div><div class='add'>+    while (filled &lt;= size) {</div><div class='add'>+        in_case = (u_long)telldir(dir);</div><div class='ctx'> </div><div class='del'>-                if (in_case == -1) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='del'>-                                "telldir failed on dir=%p", dir);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (in_case == -1) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   INDEX_MSG_INDEX_READDIR_FAILED, "telldir failed on dir=%p",</div><div class='add'>+                   dir);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (dir, scratch);</div><div class='del'>-                if (!entry || errno != 0) {</div><div class='del'>-                        if (errno == EBADF) {</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='del'>-                                        INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='del'>-                                        "readdir failed on dir=%p", dir);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(dir, scratch);</div><div class='add'>+        if (!entry || errno != 0) {</div><div class='add'>+            if (errno == EBADF) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_WARNING, errno,</div><div class='add'>+                       INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='add'>+                       "readdir failed on dir=%p", dir);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!strncmp (entry-&gt;d_name, XATTROP_SUBDIR"-",</div><div class='del'>-                              strlen (XATTROP_SUBDIR"-"))) {</div><div class='del'>-                        check_delete_stale_index_file (this, entry-&gt;d_name,</div><div class='del'>-                                                       XATTROP_SUBDIR);</div><div class='del'>-                        continue;</div><div class='del'>-                } else if (!strncmp (entry-&gt;d_name, DIRTY_SUBDIR"-",</div><div class='del'>-                           strlen (DIRTY_SUBDIR"-"))) {</div><div class='del'>-                        check_delete_stale_index_file (this, entry-&gt;d_name,</div><div class='del'>-                                                       DIRTY_SUBDIR);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+        if (!strncmp(entry-&gt;d_name, XATTROP_SUBDIR "-",</div><div class='add'>+                     strlen(XATTROP_SUBDIR "-"))) {</div><div class='add'>+            check_delete_stale_index_file(this, entry-&gt;d_name, XATTROP_SUBDIR);</div><div class='add'>+            continue;</div><div class='add'>+        } else if (!strncmp(entry-&gt;d_name, DIRTY_SUBDIR "-",</div><div class='add'>+                            strlen(DIRTY_SUBDIR "-"))) {</div><div class='add'>+            check_delete_stale_index_file(this, entry-&gt;d_name, DIRTY_SUBDIR);</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                this_size = max (sizeof (gf_dirent_t),</div><div class='del'>-                                 sizeof (gfs3_dirplist))</div><div class='del'>-                        + strlen (entry-&gt;d_name) + 1;</div><div class='add'>+        this_size = max(sizeof(gf_dirent_t), sizeof(gfs3_dirplist)) +</div><div class='add'>+                    strlen(entry-&gt;d_name) + 1;</div><div class='ctx'> </div><div class='del'>-                if (this_size + filled &gt; size) {</div><div class='del'>-                        seekdir (dir, in_case);</div><div class='add'>+        if (this_size + filled &gt; size) {</div><div class='add'>+            seekdir(dir, in_case);</div><div class='ctx'> #ifndef GF_LINUX_HOST_OS</div><div class='del'>-                        if ((u_long)telldir(dir) != in_case &amp;&amp;</div><div class='del'>-                            in_case != fctx-&gt;dir_eof) {</div><div class='del'>-				gf_msg (THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                        INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='del'>-					"seekdir(0x%llx) failed on dir=%p: "</div><div class='del'>-					"Invalid argument (offset reused from "</div><div class='del'>-					"another DIR * structure?)",</div><div class='del'>-					in_case, dir);</div><div class='del'>-				errno = EINVAL;</div><div class='del'>-				count = -1;</div><div class='del'>-				goto out;</div><div class='del'>-                        }</div><div class='add'>+            if ((u_long)telldir(dir) != in_case &amp;&amp; in_case != fctx-&gt;dir_eof) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+                       INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='add'>+                       "seekdir(0x%llx) failed on dir=%p: "</div><div class='add'>+                       "Invalid argument (offset reused from "</div><div class='add'>+                       "another DIR * structure?)",</div><div class='add'>+                       in_case, dir);</div><div class='add'>+                errno = EINVAL;</div><div class='add'>+                count = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> #endif /* GF_LINUX_HOST_OS */</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                this_entry = gf_dirent_for_name (entry-&gt;d_name);</div><div class='add'>+        this_entry = gf_dirent_for_name(entry-&gt;d_name);</div><div class='ctx'> </div><div class='del'>-                if (!this_entry) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='del'>-                                "could not create gf_dirent for entry %s",</div><div class='del'>-                                entry-&gt;d_name);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                /*</div><div class='del'>-                 * we store the offset of next entry here, which is</div><div class='del'>-                 * probably not intended, but code using syncop_readdir()</div><div class='del'>-                 * (glfs-heal.c, afr-self-heald.c, pump.c) rely on it</div><div class='del'>-                 * for directory read resumption.</div><div class='del'>-                 */</div><div class='del'>-                last_off = (u_long)telldir(dir);</div><div class='del'>-                this_entry-&gt;d_off = last_off;</div><div class='del'>-                this_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='del'>-</div><div class='del'>-                list_add_tail (&amp;this_entry-&gt;list, &amp;entries-&gt;list);</div><div class='del'>-</div><div class='del'>-                filled += this_size;</div><div class='del'>-                count ++;</div><div class='add'>+        if (!this_entry) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+                   INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='add'>+                   "could not create gf_dirent for entry %s", entry-&gt;d_name);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        /*</div><div class='add'>+         * we store the offset of next entry here, which is</div><div class='add'>+         * probably not intended, but code using syncop_readdir()</div><div class='add'>+         * (glfs-heal.c, afr-self-heald.c, pump.c) rely on it</div><div class='add'>+         * for directory read resumption.</div><div class='add'>+         */</div><div class='add'>+        last_off = (u_long)telldir(dir);</div><div class='add'>+        this_entry-&gt;d_off = last_off;</div><div class='add'>+        this_entry-&gt;d_ino = entry-&gt;d_ino;</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='add'>+        list_add_tail(&amp;this_entry-&gt;list, &amp;entries-&gt;list);</div><div class='ctx'> </div><div class='del'>-        if ((!sys_readdir (dir, scratch) &amp;&amp; (errno == 0))) {</div><div class='del'>-                /* Indicate EOF */</div><div class='del'>-                errno = ENOENT;</div><div class='del'>-                /* Remember EOF offset for later detection */</div><div class='del'>-                fctx-&gt;dir_eof = last_off;</div><div class='del'>-        }</div><div class='add'>+        filled += this_size;</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    errno = 0;</div><div class='add'>+</div><div class='add'>+    if ((!sys_readdir(dir, scratch) &amp;&amp; (errno == 0))) {</div><div class='add'>+        /* Indicate EOF */</div><div class='add'>+        errno = ENOENT;</div><div class='add'>+        /* Remember EOF offset for later detection */</div><div class='add'>+        fctx-&gt;dir_eof = last_off;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_link_to_base (xlator_t *this, char *fpath, const char *subdir)</div><div class='del'>-{</div><div class='del'>-        int ret = 0;</div><div class='del'>-        int fd  = 0;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        uuid_t index = {0};</div><div class='del'>-        index_priv_t *priv = this-&gt;private;</div><div class='del'>-        char         base[PATH_MAX] = {0};</div><div class='del'>-</div><div class='del'>-        index_get_index (priv, index);</div><div class='del'>-        make_index_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                         index, base, sizeof (base));</div><div class='del'>-</div><div class='del'>-        ret = sys_link (base, fpath);</div><div class='del'>-        if (!ret || (errno == EEXIST))  {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_errno = errno;</div><div class='del'>-        if (op_errno == ENOENT) {</div><div class='del'>-                ret = index_dir_create (this, subdir);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_errno = errno;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (op_errno == EMLINK) {</div><div class='del'>-                index_generate_index (priv, index);</div><div class='del'>-                make_index_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                                 index, base, sizeof (base));</div><div class='del'>-        } else {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+index_link_to_base(xlator_t *this, char *fpath, const char *subdir)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int fd = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    uuid_t index = {0};</div><div class='add'>+    index_priv_t *priv = this-&gt;private;</div><div class='add'>+    char base[PATH_MAX] = {0};</div><div class='ctx'> </div><div class='del'>-        op_errno = 0;</div><div class='del'>-        fd = sys_creat (base, 0);</div><div class='del'>-        if ((fd &lt; 0) &amp;&amp; (errno != EEXIST)) {</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        INDEX_MSG_INDEX_ADD_FAILED, "%s: Not able to "</div><div class='del'>-                        "create index", fpath);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    index_get_index(priv, index);</div><div class='add'>+    make_index_path(priv-&gt;index_basepath, subdir, index, base, sizeof(base));</div><div class='ctx'> </div><div class='del'>-        if (fd &gt;= 0)</div><div class='del'>-                sys_close (fd);</div><div class='add'>+    ret = sys_link(base, fpath);</div><div class='add'>+    if (!ret || (errno == EEXIST)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = sys_link (base, fpath);</div><div class='del'>-        if (ret &amp;&amp; (errno != EEXIST)) {</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        INDEX_MSG_INDEX_ADD_FAILED, "%s: Not able to "</div><div class='del'>-                        "add to index", fpath);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    op_errno = errno;</div><div class='add'>+    if (op_errno == ENOENT) {</div><div class='add'>+        ret = index_dir_create(this, subdir);</div><div class='add'>+        if (ret) {</div><div class='add'>+            op_errno = errno;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (op_errno == EMLINK) {</div><div class='add'>+        index_generate_index(priv, index);</div><div class='add'>+        make_index_path(priv-&gt;index_basepath, subdir, index, base,</div><div class='add'>+                        sizeof(base));</div><div class='add'>+    } else {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_errno = 0;</div><div class='add'>+    fd = sys_creat(base, 0);</div><div class='add'>+    if ((fd &lt; 0) &amp;&amp; (errno != EEXIST)) {</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, INDEX_MSG_INDEX_ADD_FAILED,</div><div class='add'>+               "%s: Not able to "</div><div class='add'>+               "create index",</div><div class='add'>+               fpath);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (fd &gt;= 0)</div><div class='add'>+        sys_close(fd);</div><div class='add'>+</div><div class='add'>+    ret = sys_link(base, fpath);</div><div class='add'>+    if (ret &amp;&amp; (errno != EEXIST)) {</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, INDEX_MSG_INDEX_ADD_FAILED,</div><div class='add'>+               "%s: Not able to "</div><div class='add'>+               "add to index",</div><div class='add'>+               fpath);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return -op_errno;</div><div class='add'>+    return -op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_add (xlator_t *this, uuid_t gfid, const char *subdir,</div><div class='del'>-           index_xattrop_type_t type)</div><div class='add'>+index_add(xlator_t *this, uuid_t gfid, const char *subdir,</div><div class='add'>+          index_xattrop_type_t type)</div><div class='ctx'> {</div><div class='del'>-        char              gfid_path[PATH_MAX] = {0};</div><div class='del'>-        int               ret = -1;</div><div class='del'>-        index_priv_t      *priv = NULL;</div><div class='del'>-        struct stat       st = {0};</div><div class='add'>+    char gfid_path[PATH_MAX] = {0};</div><div class='add'>+    int ret = -1;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    struct stat st = {0};</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (gfid)) {</div><div class='del'>-                GF_ASSERT (0);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (gf_uuid_is_null(gfid)) {</div><div class='add'>+        GF_ASSERT(0);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        make_gfid_path (priv-&gt;index_basepath, subdir, gfid,</div><div class='del'>-                        gfid_path, sizeof (gfid_path));</div><div class='add'>+    make_gfid_path(priv-&gt;index_basepath, subdir, gfid, gfid_path,</div><div class='add'>+                   sizeof(gfid_path));</div><div class='ctx'> </div><div class='del'>-        ret = sys_stat (gfid_path, &amp;st);</div><div class='del'>-        if (!ret)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = index_link_to_base (this, gfid_path, subdir);</div><div class='add'>+    ret = sys_stat(gfid_path, &amp;st);</div><div class='add'>+    if (!ret)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = index_link_to_base(this, gfid_path, subdir);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_del (xlator_t *this, uuid_t gfid, const char *subdir, int type)</div><div class='del'>-{</div><div class='del'>-        int32_t      op_errno __attribute__((unused)) = 0;</div><div class='del'>-        index_priv_t *priv = NULL;</div><div class='del'>-        int          ret = 0;</div><div class='del'>-        char         gfid_path[PATH_MAX] = {0};</div><div class='del'>-        char         rename_dst[PATH_MAX] = {0,};</div><div class='del'>-        uuid_t uuid;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name, !gf_uuid_is_null (gfid),</div><div class='del'>-                                       out, op_errno, EINVAL);</div><div class='del'>-        make_gfid_path (priv-&gt;index_basepath, subdir, gfid,</div><div class='del'>-                        gfid_path, sizeof (gfid_path));</div><div class='del'>-</div><div class='del'>-        if ((strcmp (subdir, ENTRY_CHANGES_SUBDIR)) == 0) {</div><div class='del'>-                ret = sys_rmdir (gfid_path);</div><div class='del'>-                /* rmdir above could fail with ENOTEMPTY if the indices under</div><div class='del'>-                 * it were created when granular-entry-heal was enabled, whereas</div><div class='del'>-                 * the actual heal that happened was non-granular (or full) in</div><div class='del'>-                 * nature, resulting in name indices getting left out. To</div><div class='del'>-                 * clean up this directory without it affecting the IO path perf,</div><div class='del'>-                 * the directory is renamed to a unique name under</div><div class='del'>-                 * indices/entry-changes. Self-heal will pick up this entry</div><div class='del'>-                 * during crawl and on lookup into the file system figure that</div><div class='del'>-                 * the index is stale and subsequently wipe it out using rmdir().</div><div class='del'>-                 */</div><div class='del'>-                if ((ret) &amp;&amp; (errno == ENOTEMPTY)) {</div><div class='del'>-                        gf_uuid_generate (uuid);</div><div class='del'>-                        make_gfid_path (priv-&gt;index_basepath, subdir, uuid,</div><div class='del'>-                                        rename_dst, sizeof (rename_dst));</div><div class='del'>-                        ret = sys_rename (gfid_path, rename_dst);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = sys_unlink (gfid_path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        INDEX_MSG_INDEX_DEL_FAILED, "%s: failed to delete"</div><div class='del'>-                        " from index", gfid_path);</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        index_dec_link_count (priv, type);</div><div class='del'>-        ret = 0;</div><div class='add'>+index_del(xlator_t *this, uuid_t gfid, const char *subdir, int type)</div><div class='add'>+{</div><div class='add'>+    int32_t op_errno __attribute__((unused)) = 0;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char gfid_path[PATH_MAX] = {0};</div><div class='add'>+    char rename_dst[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    uuid_t uuid;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, !gf_uuid_is_null(gfid), out,</div><div class='add'>+                                  op_errno, EINVAL);</div><div class='add'>+    make_gfid_path(priv-&gt;index_basepath, subdir, gfid, gfid_path,</div><div class='add'>+                   sizeof(gfid_path));</div><div class='add'>+</div><div class='add'>+    if ((strcmp(subdir, ENTRY_CHANGES_SUBDIR)) == 0) {</div><div class='add'>+        ret = sys_rmdir(gfid_path);</div><div class='add'>+        /* rmdir above could fail with ENOTEMPTY if the indices under</div><div class='add'>+         * it were created when granular-entry-heal was enabled, whereas</div><div class='add'>+         * the actual heal that happened was non-granular (or full) in</div><div class='add'>+         * nature, resulting in name indices getting left out. To</div><div class='add'>+         * clean up this directory without it affecting the IO path perf,</div><div class='add'>+         * the directory is renamed to a unique name under</div><div class='add'>+         * indices/entry-changes. Self-heal will pick up this entry</div><div class='add'>+         * during crawl and on lookup into the file system figure that</div><div class='add'>+         * the index is stale and subsequently wipe it out using rmdir().</div><div class='add'>+         */</div><div class='add'>+        if ((ret) &amp;&amp; (errno == ENOTEMPTY)) {</div><div class='add'>+            gf_uuid_generate(uuid);</div><div class='add'>+            make_gfid_path(priv-&gt;index_basepath, subdir, uuid, rename_dst,</div><div class='add'>+                           sizeof(rename_dst));</div><div class='add'>+            ret = sys_rename(gfid_path, rename_dst);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = sys_unlink(gfid_path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno, INDEX_MSG_INDEX_DEL_FAILED,</div><div class='add'>+               "%s: failed to delete"</div><div class='add'>+               " from index",</div><div class='add'>+               gfid_path);</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    index_dec_link_count(priv, type);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-_is_xattr_in_watchlist (dict_t *d, char *k, data_t *v, void *tmp)</div><div class='add'>+_is_xattr_in_watchlist(dict_t *d, char *k, data_t *v, void *tmp)</div><div class='ctx'> {</div><div class='del'>-        if (!strncmp (k, tmp, strlen (k)))</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (!strncmp(k, tmp, strlen(k)))</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-is_xattr_in_watchlist (dict_t *this, char *key, data_t *value, void *matchdata)</div><div class='add'>+is_xattr_in_watchlist(dict_t *this, char *key, data_t *value, void *matchdata)</div><div class='ctx'> {</div><div class='del'>-        int    ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        //matchdata is a list of xattrs</div><div class='del'>-        //key is strncmp'ed with each xattr in matchdata.</div><div class='del'>-        //ret will be 0 if key pattern is not present in the matchdata</div><div class='del'>-        //else ret will be count number of xattrs the key pattern-matches with.</div><div class='del'>-        ret = dict_foreach_match (matchdata, _is_xattr_in_watchlist, key,</div><div class='del'>-                                  dict_null_foreach_fn, NULL);</div><div class='add'>+    // matchdata is a list of xattrs</div><div class='add'>+    // key is strncmp'ed with each xattr in matchdata.</div><div class='add'>+    // ret will be 0 if key pattern is not present in the matchdata</div><div class='add'>+    // else ret will be count number of xattrs the key pattern-matches with.</div><div class='add'>+    ret = dict_foreach_match(matchdata, _is_xattr_in_watchlist, key,</div><div class='add'>+                             dict_null_foreach_fn, NULL);</div><div class='ctx'> </div><div class='del'>-        if (ret &gt; 0)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (ret &gt; 0)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-index_find_xattr_type (dict_t *d, char *k, data_t *v)</div><div class='add'>+index_find_xattr_type(dict_t *d, char *k, data_t *v)</div><div class='ctx'> {</div><div class='del'>-        int             idx  = -1;</div><div class='del'>-        index_priv_t   *priv = THIS-&gt;private;</div><div class='add'>+    int idx = -1;</div><div class='add'>+    index_priv_t *priv = THIS-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;dirty_watchlist &amp;&amp; is_xattr_in_watchlist (d, k, v,</div><div class='del'>-                                            priv-&gt;dirty_watchlist))</div><div class='del'>-                idx = DIRTY;</div><div class='del'>-        else if (priv-&gt;pending_watchlist &amp;&amp; is_xattr_in_watchlist (d, k, v,</div><div class='del'>-                                                  priv-&gt;pending_watchlist))</div><div class='del'>-                idx = XATTROP;</div><div class='add'>+    if (priv-&gt;dirty_watchlist &amp;&amp;</div><div class='add'>+        is_xattr_in_watchlist(d, k, v, priv-&gt;dirty_watchlist))</div><div class='add'>+        idx = DIRTY;</div><div class='add'>+    else if (priv-&gt;pending_watchlist &amp;&amp;</div><div class='add'>+             is_xattr_in_watchlist(d, k, v, priv-&gt;pending_watchlist))</div><div class='add'>+        idx = XATTROP;</div><div class='ctx'> </div><div class='del'>-        return idx;</div><div class='add'>+    return idx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_fill_zero_array (dict_t *d, char *k, data_t *v, void *adata)</div><div class='add'>+index_fill_zero_array(dict_t *d, char *k, data_t *v, void *adata)</div><div class='ctx'> {</div><div class='del'>-        int     idx = -1;</div><div class='del'>-        int     *zfilled = adata;</div><div class='del'>-        //zfilled array contains `state` for all types xattrs.</div><div class='del'>-        //state : whether the gfid file of this file exists in</div><div class='del'>-        //corresponding xattr directory or not.</div><div class='add'>+    int idx = -1;</div><div class='add'>+    int *zfilled = adata;</div><div class='add'>+    // zfilled array contains `state` for all types xattrs.</div><div class='add'>+    // state : whether the gfid file of this file exists in</div><div class='add'>+    // corresponding xattr directory or not.</div><div class='ctx'> </div><div class='del'>-        idx = index_find_xattr_type (d, k, v);</div><div class='del'>-        if (idx == -1)</div><div class='del'>-                return 0;</div><div class='del'>-        zfilled[idx] = 0;</div><div class='add'>+    idx = index_find_xattr_type(d, k, v);</div><div class='add'>+    if (idx == -1)</div><div class='ctx'>         return 0;</div><div class='add'>+    zfilled[idx] = 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_check_key_is_zero_filled (dict_t *d, char *k, data_t *v,</div><div class='del'>-                           void *tmp)</div><div class='add'>+_check_key_is_zero_filled(dict_t *d, char *k, data_t *v, void *tmp)</div><div class='ctx'> {</div><div class='del'>-        int            *zfilled = tmp;</div><div class='del'>-        int             idx = -1;</div><div class='del'>-</div><div class='del'>-        idx = index_find_xattr_type (d, k, v);</div><div class='del'>-        if (idx == -1)</div><div class='del'>-                return 0;</div><div class='add'>+    int *zfilled = tmp;</div><div class='add'>+    int idx = -1;</div><div class='ctx'> </div><div class='del'>-        /* Along with checking that the value of a key is zero filled</div><div class='del'>-         * the key's corresponding index should be assigned</div><div class='del'>-         * appropriate value.</div><div class='del'>-         * zfilled[idx] will be 0(false) if value not zero.</div><div class='del'>-         *              will be 1(true) if value is zero.</div><div class='del'>-         */</div><div class='del'>-        if (mem_0filled ((const char*)v-&gt;data, v-&gt;len)) {</div><div class='del'>-                zfilled[idx] = 0;</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    idx = index_find_xattr_type(d, k, v);</div><div class='add'>+    if (idx == -1)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        /* If zfilled[idx] was previously 0, it means at least</div><div class='del'>-         * one xattr of its "kind" is non-zero. Keep its value</div><div class='del'>-         * the same.</div><div class='del'>-         */</div><div class='del'>-        if (zfilled[idx])</div><div class='del'>-                zfilled[idx] = 1;</div><div class='add'>+    /* Along with checking that the value of a key is zero filled</div><div class='add'>+     * the key's corresponding index should be assigned</div><div class='add'>+     * appropriate value.</div><div class='add'>+     * zfilled[idx] will be 0(false) if value not zero.</div><div class='add'>+     *              will be 1(true) if value is zero.</div><div class='add'>+     */</div><div class='add'>+    if (mem_0filled((const char *)v-&gt;data, v-&gt;len)) {</div><div class='add'>+        zfilled[idx] = 0;</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If zfilled[idx] was previously 0, it means at least</div><div class='add'>+     * one xattr of its "kind" is non-zero. Keep its value</div><div class='add'>+     * the same.</div><div class='add'>+     */</div><div class='add'>+    if (zfilled[idx])</div><div class='add'>+        zfilled[idx] = 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_entry_create (xlator_t *this, inode_t *inode, char *filename)</div><div class='del'>-{</div><div class='del'>-        int                 ret                             = -1;</div><div class='del'>-        int                 op_errno                        = 0;</div><div class='del'>-        char                pgfid_path[PATH_MAX]            = {0};</div><div class='del'>-        char                entry_path[PATH_MAX]            = {0};</div><div class='del'>-        index_priv_t       *priv                            = NULL;</div><div class='del'>-        index_inode_ctx_t  *ctx                             = NULL;</div><div class='del'>-        int32_t             len                             = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name,</div><div class='del'>-                                       !gf_uuid_is_null (inode-&gt;gfid), out,</div><div class='del'>-                                       op_errno, EINVAL);</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name, filename, out, op_errno,</div><div class='del'>-                                       EINVAL);</div><div class='del'>-</div><div class='del'>-        ret = index_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        INDEX_MSG_INODE_CTX_GET_SET_FAILED,</div><div class='del'>-                        "Not able to get inode ctx for %s",</div><div class='del'>-                        uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        make_gfid_path (priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR,</div><div class='del'>-                        inode-&gt;gfid, pgfid_path, sizeof (pgfid_path));</div><div class='del'>-</div><div class='del'>-        if (ctx-&gt;state[ENTRY_CHANGES] != IN) {</div><div class='del'>-                ret = sys_mkdir (pgfid_path, 0600);</div><div class='del'>-                if (ret != 0 &amp;&amp; errno != EEXIST) {</div><div class='del'>-                        op_errno = errno;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ctx-&gt;state[ENTRY_CHANGES] = IN;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        len = snprintf (entry_path, sizeof(entry_path), "%s/%s", pgfid_path,</div><div class='del'>-                        filename);</div><div class='del'>-        if ((len &lt; 0) || (len &gt;= sizeof(entry_path))) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_errno = 0;</div><div class='del'>-</div><div class='del'>-        ret = index_link_to_base (this, entry_path, ENTRY_CHANGES_SUBDIR);</div><div class='add'>+index_entry_create(xlator_t *this, inode_t *inode, char *filename)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    char pgfid_path[PATH_MAX] = {0};</div><div class='add'>+    char entry_path[PATH_MAX] = {0};</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    index_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, !gf_uuid_is_null(inode-&gt;gfid),</div><div class='add'>+                                  out, op_errno, EINVAL);</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, filename, out, op_errno, EINVAL);</div><div class='add'>+</div><div class='add'>+    ret = index_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='add'>+               INDEX_MSG_INODE_CTX_GET_SET_FAILED,</div><div class='add'>+               "Not able to get inode ctx for %s", uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    make_gfid_path(priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR, inode-&gt;gfid,</div><div class='add'>+                   pgfid_path, sizeof(pgfid_path));</div><div class='add'>+</div><div class='add'>+    if (ctx-&gt;state[ENTRY_CHANGES] != IN) {</div><div class='add'>+        ret = sys_mkdir(pgfid_path, 0600);</div><div class='add'>+        if (ret != 0 &amp;&amp; errno != EEXIST) {</div><div class='add'>+            op_errno = errno;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        ctx-&gt;state[ENTRY_CHANGES] = IN;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = snprintf(entry_path, sizeof(entry_path), "%s/%s", pgfid_path,</div><div class='add'>+                   filename);</div><div class='add'>+    if ((len &lt; 0) || (len &gt;= sizeof(entry_path))) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_errno = 0;</div><div class='add'>+</div><div class='add'>+    ret = index_link_to_base(this, entry_path, ENTRY_CHANGES_SUBDIR);</div><div class='ctx'> out:</div><div class='del'>-        if (op_errno)</div><div class='del'>-                ret = -op_errno;</div><div class='del'>-        return ret;</div><div class='add'>+    if (op_errno)</div><div class='add'>+        ret = -op_errno;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_entry_delete (xlator_t *this, uuid_t pgfid, char *filename)</div><div class='del'>-{</div><div class='del'>-        int                 ret                             = 0;</div><div class='del'>-        int                 op_errno                        = 0;</div><div class='del'>-        char                pgfid_path[PATH_MAX]            = {0};</div><div class='del'>-        char                entry_path[PATH_MAX]            = {0};</div><div class='del'>-        index_priv_t       *priv                            = NULL;</div><div class='del'>-        int32_t             len                             = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name, !gf_uuid_is_null (pgfid),</div><div class='del'>-                                       out, op_errno, EINVAL);</div><div class='del'>-        GF_ASSERT_AND_GOTO_WITH_ERROR (this-&gt;name, filename, out, op_errno,</div><div class='del'>-                                       EINVAL);</div><div class='del'>-</div><div class='del'>-        make_gfid_path (priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR, pgfid,</div><div class='del'>-                        pgfid_path, sizeof (pgfid_path));</div><div class='del'>-        len = snprintf (entry_path, sizeof(entry_path), "%s/%s", pgfid_path,</div><div class='del'>-                        filename);</div><div class='del'>-        if ((len &lt; 0) || (len &gt;= sizeof(entry_path))) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = sys_unlink (entry_path);</div><div class='del'>-        if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, op_errno,</div><div class='del'>-                        INDEX_MSG_INDEX_DEL_FAILED,</div><div class='del'>-                        "%s: failed to delete from index/entry-changes",</div><div class='del'>-                        entry_path);</div><div class='del'>-        }</div><div class='add'>+index_entry_delete(xlator_t *this, uuid_t pgfid, char *filename)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    char pgfid_path[PATH_MAX] = {0};</div><div class='add'>+    char entry_path[PATH_MAX] = {0};</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, !gf_uuid_is_null(pgfid), out,</div><div class='add'>+                                  op_errno, EINVAL);</div><div class='add'>+    GF_ASSERT_AND_GOTO_WITH_ERROR(this-&gt;name, filename, out, op_errno, EINVAL);</div><div class='add'>+</div><div class='add'>+    make_gfid_path(priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR, pgfid,</div><div class='add'>+                   pgfid_path, sizeof(pgfid_path));</div><div class='add'>+    len = snprintf(entry_path, sizeof(entry_path), "%s/%s", pgfid_path,</div><div class='add'>+                   filename);</div><div class='add'>+    if ((len &lt; 0) || (len &gt;= sizeof(entry_path))) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = sys_unlink(entry_path);</div><div class='add'>+    if (ret &amp;&amp; (errno != ENOENT)) {</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, op_errno, INDEX_MSG_INDEX_DEL_FAILED,</div><div class='add'>+               "%s: failed to delete from index/entry-changes", entry_path);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return -op_errno;</div><div class='add'>+    return -op_errno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_entry_action (xlator_t *this, inode_t *inode, dict_t *xdata, char *key)</div><div class='add'>+index_entry_action(xlator_t *this, inode_t *inode, dict_t *xdata, char *key)</div><div class='ctx'> {</div><div class='del'>-        int        ret      = 0;</div><div class='del'>-        char      *filename = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *filename = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xdata, key, &amp;filename);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(xdata, key, &amp;filename);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (key, GF_XATTROP_ENTRY_IN_KEY) == 0)</div><div class='del'>-                ret = index_entry_create (this, inode, filename);</div><div class='del'>-        else if (strcmp (key, GF_XATTROP_ENTRY_OUT_KEY) == 0)</div><div class='del'>-                ret = index_entry_delete (this, inode-&gt;gfid, filename);</div><div class='add'>+    if (strcmp(key, GF_XATTROP_ENTRY_IN_KEY) == 0)</div><div class='add'>+        ret = index_entry_create(this, inode, filename);</div><div class='add'>+    else if (strcmp(key, GF_XATTROP_ENTRY_OUT_KEY) == 0)</div><div class='add'>+        ret = index_entry_delete(this, inode-&gt;gfid, filename);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-_index_action (xlator_t *this, inode_t *inode, int *zfilled)</div><div class='del'>-{</div><div class='del'>-        int               ret  = 0;</div><div class='del'>-        int               i    = 0;</div><div class='del'>-        index_inode_ctx_t *ctx = NULL;</div><div class='del'>-        char           *subdir = NULL;</div><div class='del'>-</div><div class='del'>-        ret = index_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        INDEX_MSG_INODE_CTX_GET_SET_FAILED, "Not able to get"</div><div class='del'>-                        " inode context for %s.", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; XATTROP_TYPE_END; i++) {</div><div class='del'>-                subdir = index_get_subdir_from_type (i);</div><div class='del'>-                if (zfilled[i] == 1) {</div><div class='del'>-                        if (ctx-&gt;state[i] == NOTIN)</div><div class='del'>-                                continue;</div><div class='del'>-                        ret = index_del (this, inode-&gt;gfid, subdir, i);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ctx-&gt;state[i] = NOTIN;</div><div class='del'>-                } else if (zfilled[i] == 0){</div><div class='del'>-                        if (ctx-&gt;state[i] == IN)</div><div class='del'>-                                continue;</div><div class='del'>-                        ret = index_add (this, inode-&gt;gfid, subdir, i);</div><div class='del'>-                        if (!ret)</div><div class='del'>-                                ctx-&gt;state[i] = IN;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+_index_action(xlator_t *this, inode_t *inode, int *zfilled)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+    index_inode_ctx_t *ctx = NULL;</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+</div><div class='add'>+    ret = index_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+               INDEX_MSG_INODE_CTX_GET_SET_FAILED,</div><div class='add'>+               "Not able to get"</div><div class='add'>+               " inode context for %s.",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; i &lt; XATTROP_TYPE_END; i++) {</div><div class='add'>+        subdir = index_get_subdir_from_type(i);</div><div class='add'>+        if (zfilled[i] == 1) {</div><div class='add'>+            if (ctx-&gt;state[i] == NOTIN)</div><div class='add'>+                continue;</div><div class='add'>+            ret = index_del(this, inode-&gt;gfid, subdir, i);</div><div class='add'>+            if (!ret)</div><div class='add'>+                ctx-&gt;state[i] = NOTIN;</div><div class='add'>+        } else if (zfilled[i] == 0) {</div><div class='add'>+            if (ctx-&gt;state[i] == IN)</div><div class='add'>+                continue;</div><div class='add'>+            ret = index_add(this, inode-&gt;gfid, subdir, i);</div><div class='add'>+            if (!ret)</div><div class='add'>+                ctx-&gt;state[i] = IN;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-index_init_state (xlator_t *this, inode_t *inode, index_inode_ctx_t *ctx,</div><div class='del'>-                  char *subdir)</div><div class='add'>+index_init_state(xlator_t *this, inode_t *inode, index_inode_ctx_t *ctx,</div><div class='add'>+                 char *subdir)</div><div class='ctx'> {</div><div class='del'>-        int                 ret                             = -1;</div><div class='del'>-        char                pgfid_path[PATH_MAX]            = {0};</div><div class='del'>-        struct stat         st                              = {0};</div><div class='del'>-        index_priv_t       *priv                            = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char pgfid_path[PATH_MAX] = {0};</div><div class='add'>+    struct stat st = {0};</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        make_gfid_path (priv-&gt;index_basepath, subdir, inode-&gt;gfid, pgfid_path,</div><div class='del'>-                        sizeof (pgfid_path));</div><div class='add'>+    make_gfid_path(priv-&gt;index_basepath, subdir, inode-&gt;gfid, pgfid_path,</div><div class='add'>+                   sizeof(pgfid_path));</div><div class='ctx'> </div><div class='del'>-        ret = sys_stat (pgfid_path, &amp;st);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                ctx-&gt;state[ENTRY_CHANGES] = IN;</div><div class='del'>-        else if (ret != 0 &amp;&amp; errno == ENOENT)</div><div class='del'>-                ctx-&gt;state[ENTRY_CHANGES] = NOTIN;</div><div class='add'>+    ret = sys_stat(pgfid_path, &amp;st);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        ctx-&gt;state[ENTRY_CHANGES] = IN;</div><div class='add'>+    else if (ret != 0 &amp;&amp; errno == ENOENT)</div><div class='add'>+        ctx-&gt;state[ENTRY_CHANGES] = NOTIN;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-xattrop_index_action (xlator_t *this, index_local_t *local, dict_t *xattr,</div><div class='del'>-                      dict_match_t match, void *match_data)</div><div class='del'>-{</div><div class='del'>-        int            ret                       = 0;</div><div class='del'>-        int            zfilled[XATTROP_TYPE_END] = {0,};</div><div class='del'>-        int8_t         value                     = 0;</div><div class='del'>-        char          *subdir                    = NULL;</div><div class='del'>-        dict_t        *req_xdata                 = NULL;</div><div class='del'>-        inode_t       *inode                     = NULL;</div><div class='del'>-        index_inode_ctx_t *ctx                   = NULL;</div><div class='del'>-</div><div class='del'>-        inode = local-&gt;inode;</div><div class='del'>-        req_xdata = local-&gt;xdata;</div><div class='del'>-</div><div class='del'>-        memset (zfilled, -1, sizeof (zfilled));</div><div class='del'>-        ret = dict_foreach_match (xattr, match, match_data,</div><div class='del'>-                                  _check_key_is_zero_filled, zfilled);</div><div class='del'>-        _index_action (this, inode, zfilled);</div><div class='del'>-</div><div class='del'>-        if (req_xdata) {</div><div class='del'>-                ret = index_entry_action (this, inode, req_xdata,</div><div class='del'>-                                          GF_XATTROP_ENTRY_OUT_KEY);</div><div class='del'>-</div><div class='del'>-                ret = dict_get_int8 (req_xdata, GF_XATTROP_PURGE_INDEX, &amp;value);</div><div class='del'>-                if ((ret) || (value == 0))</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (zfilled[XATTROP] != 1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (inode-&gt;ia_type != IA_IFDIR)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        subdir = index_get_subdir_from_type (ENTRY_CHANGES);</div><div class='del'>-        ret = index_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if (ctx-&gt;state[ENTRY_CHANGES] == UNKNOWN)</div><div class='del'>-                index_init_state (this, inode, ctx, subdir);</div><div class='del'>-        if (ctx-&gt;state[ENTRY_CHANGES] == IN) {</div><div class='del'>-                ret = index_del (this, inode-&gt;gfid, subdir,</div><div class='del'>-                                 ENTRY_CHANGES);</div><div class='del'>-                ctx-&gt;state[ENTRY_CHANGES] = NOTIN;</div><div class='del'>-        }</div><div class='add'>+xattrop_index_action(xlator_t *this, index_local_t *local, dict_t *xattr,</div><div class='add'>+                     dict_match_t match, void *match_data)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int zfilled[XATTROP_TYPE_END] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int8_t value = 0;</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+    dict_t *req_xdata = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    index_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    inode = local-&gt;inode;</div><div class='add'>+    req_xdata = local-&gt;xdata;</div><div class='add'>+</div><div class='add'>+    memset(zfilled, -1, sizeof(zfilled));</div><div class='add'>+    ret = dict_foreach_match(xattr, match, match_data,</div><div class='add'>+                             _check_key_is_zero_filled, zfilled);</div><div class='add'>+    _index_action(this, inode, zfilled);</div><div class='add'>+</div><div class='add'>+    if (req_xdata) {</div><div class='add'>+        ret = index_entry_action(this, inode, req_xdata,</div><div class='add'>+                                 GF_XATTROP_ENTRY_OUT_KEY);</div><div class='add'>+</div><div class='add'>+        ret = dict_get_int8(req_xdata, GF_XATTROP_PURGE_INDEX, &amp;value);</div><div class='add'>+        if ((ret) || (value == 0))</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (zfilled[XATTROP] != 1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (inode-&gt;ia_type != IA_IFDIR)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    subdir = index_get_subdir_from_type(ENTRY_CHANGES);</div><div class='add'>+    ret = index_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (ctx-&gt;state[ENTRY_CHANGES] == UNKNOWN)</div><div class='add'>+        index_init_state(this, inode, ctx, subdir);</div><div class='add'>+    if (ctx-&gt;state[ENTRY_CHANGES] == IN) {</div><div class='add'>+        ret = index_del(this, inode-&gt;gfid, subdir, ENTRY_CHANGES);</div><div class='add'>+        ctx-&gt;state[ENTRY_CHANGES] = NOTIN;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-index_xattrop_track (xlator_t *this, gf_xattrop_flags_t flags, dict_t *dict)</div><div class='add'>+index_xattrop_track(xlator_t *this, gf_xattrop_flags_t flags, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        index_priv_t *priv = this-&gt;private;</div><div class='add'>+    index_priv_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (flags == GF_XATTROP_ADD_ARRAY)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (flags == GF_XATTROP_ADD_ARRAY)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (flags != GF_XATTROP_ADD_ARRAY64)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (flags != GF_XATTROP_ADD_ARRAY64)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;pending_watchlist)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!priv-&gt;pending_watchlist)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (dict_foreach_match (dict, is_xattr_in_watchlist,</div><div class='del'>-                                priv-&gt;pending_watchlist, dict_null_foreach_fn,</div><div class='del'>-                                NULL) &gt; 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (dict_foreach_match(dict, is_xattr_in_watchlist, priv-&gt;pending_watchlist,</div><div class='add'>+                           dict_null_foreach_fn, NULL) &gt; 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_inode_path (xlator_t *this, inode_t *inode, char *dirpath, size_t len)</div><div class='del'>-{</div><div class='del'>-        char              *subdir = NULL;</div><div class='del'>-        int               ret     = 0;</div><div class='del'>-        index_priv_t      *priv   = NULL;</div><div class='del'>-        index_inode_ctx_t *ictx   = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!index_is_fop_on_internal_inode (this, inode, NULL)) {</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        subdir = index_get_subdir_from_vgfid (priv, inode-&gt;gfid);</div><div class='del'>-        if (subdir) {</div><div class='del'>-                if (len &lt;= strlen (priv-&gt;index_basepath) + 1 /*'/'*/ +</div><div class='del'>-                           strlen (subdir)) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                make_index_dir_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                                     dirpath, len);</div><div class='del'>-        } else {</div><div class='del'>-                ret = index_inode_ctx_get (inode, this, &amp;ictx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-                if (gf_uuid_is_null (ictx-&gt;virtual_pargfid)) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                make_index_dir_path (priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR,</div><div class='del'>-                                     dirpath, len);</div><div class='del'>-                if (len &lt;= strlen (dirpath) + 1 /*'/'*/ + SLEN (UUID0_STR)) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                strcat (dirpath, "/");</div><div class='del'>-                strcat (dirpath, uuid_utoa (ictx-&gt;virtual_pargfid));</div><div class='del'>-        }</div><div class='add'>+index_inode_path(xlator_t *this, inode_t *inode, char *dirpath, size_t len)</div><div class='add'>+{</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    index_inode_ctx_t *ictx = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!index_is_fop_on_internal_inode(this, inode, NULL)) {</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    subdir = index_get_subdir_from_vgfid(priv, inode-&gt;gfid);</div><div class='add'>+    if (subdir) {</div><div class='add'>+        if (len &lt;= strlen(priv-&gt;index_basepath) + 1 /*'/'*/ + strlen(subdir)) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        make_index_dir_path(priv-&gt;index_basepath, subdir, dirpath, len);</div><div class='add'>+    } else {</div><div class='add'>+        ret = index_inode_ctx_get(inode, this, &amp;ictx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+        if (gf_uuid_is_null(ictx-&gt;virtual_pargfid)) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        make_index_dir_path(priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR, dirpath,</div><div class='add'>+                            len);</div><div class='add'>+        if (len &lt;= strlen(dirpath) + 1 /*'/'*/ + SLEN(UUID0_STR)) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        strcat(dirpath, "/");</div><div class='add'>+        strcat(dirpath, uuid_utoa(ictx-&gt;virtual_pargfid));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__index_fd_ctx_get (fd_t *fd, xlator_t *this, index_fd_ctx_t **ctx)</div><div class='add'>+__index_fd_ctx_get(fd_t *fd, xlator_t *this, index_fd_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        index_fd_ctx_t    *fctx = NULL;</div><div class='del'>-        uint64_t          tmpctx = 0;</div><div class='del'>-        char              dirpath[PATH_MAX] = {0};</div><div class='del'>-</div><div class='del'>-        ret = __fd_ctx_get (fd, this, &amp;tmpctx);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                fctx = (index_fd_ctx_t*) (long) tmpctx;</div><div class='del'>-                *ctx = fctx;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    index_fd_ctx_t *fctx = NULL;</div><div class='add'>+    uint64_t tmpctx = 0;</div><div class='add'>+    char dirpath[PATH_MAX] = {0};</div><div class='ctx'> </div><div class='del'>-        ret = index_inode_path (this, fd-&gt;inode, dirpath, sizeof (dirpath));</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fctx = GF_CALLOC (1, sizeof (*fctx), gf_index_fd_ctx_t);</div><div class='del'>-        if (!fctx) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fctx-&gt;dir = sys_opendir (dirpath);</div><div class='del'>-        if (!fctx-&gt;dir) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                GF_FREE (fctx);</div><div class='del'>-                fctx = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        fctx-&gt;dir_eof = -1;</div><div class='del'>-</div><div class='del'>-        ret = __fd_ctx_set (fd, this, (uint64_t)(long)fctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                (void) sys_closedir (fctx-&gt;dir);</div><div class='del'>-                GF_FREE (fctx);</div><div class='del'>-                fctx = NULL;</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = __fd_ctx_get(fd, this, &amp;tmpctx);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        fctx = (index_fd_ctx_t *)(long)tmpctx;</div><div class='ctx'>         *ctx = fctx;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = index_inode_path(this, fd-&gt;inode, dirpath, sizeof(dirpath));</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    fctx = GF_CALLOC(1, sizeof(*fctx), gf_index_fd_ctx_t);</div><div class='add'>+    if (!fctx) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fctx-&gt;dir = sys_opendir(dirpath);</div><div class='add'>+    if (!fctx-&gt;dir) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        GF_FREE(fctx);</div><div class='add'>+        fctx = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    fctx-&gt;dir_eof = -1;</div><div class='add'>+</div><div class='add'>+    ret = __fd_ctx_set(fd, this, (uint64_t)(long)fctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        (void)sys_closedir(fctx-&gt;dir);</div><div class='add'>+        GF_FREE(fctx);</div><div class='add'>+        fctx = NULL;</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    *ctx = fctx;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_fd_ctx_get (fd_t *fd, xlator_t *this, index_fd_ctx_t **ctx)</div><div class='add'>+index_fd_ctx_get(fd_t *fd, xlator_t *this, index_fd_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __index_fd_ctx_get (fd, this, ctx);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __index_fd_ctx_get(fd, this, ctx);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-//new - Not NULL means start a fop</div><div class='del'>-//new - NULL means done processing the fop</div><div class='add'>+// new - Not NULL means start a fop</div><div class='add'>+// new - NULL means done processing the fop</div><div class='ctx'> void</div><div class='del'>-index_queue_process (xlator_t *this, inode_t *inode, call_stub_t *new)</div><div class='add'>+index_queue_process(xlator_t *this, inode_t *inode, call_stub_t *new)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t       *stub = NULL;</div><div class='del'>-        index_inode_ctx_t *ctx = NULL;</div><div class='del'>-        int               ret = 0;</div><div class='del'>-        call_frame_t      *frame = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    index_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __index_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                if (new) {</div><div class='del'>-                        __index_enqueue (&amp;ctx-&gt;callstubs, new);</div><div class='del'>-                        new = NULL;</div><div class='del'>-                } else {</div><div class='del'>-                        ctx-&gt;processing = _gf_false;</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __index_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-                if (!ctx-&gt;processing) {</div><div class='del'>-                        stub = __index_dequeue (&amp;ctx-&gt;callstubs);</div><div class='del'>-                        if (stub)</div><div class='del'>-                                ctx-&gt;processing = _gf_true;</div><div class='del'>-                        else</div><div class='del'>-                                ctx-&gt;processing = _gf_false;</div><div class='del'>-                }</div><div class='add'>+        if (new) {</div><div class='add'>+            __index_enqueue(&amp;ctx-&gt;callstubs, new);</div><div class='add'>+            new = NULL;</div><div class='add'>+        } else {</div><div class='add'>+            ctx-&gt;processing = _gf_false;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        if (!ctx-&gt;processing) {</div><div class='add'>+            stub = __index_dequeue(&amp;ctx-&gt;callstubs);</div><div class='add'>+            if (stub)</div><div class='add'>+                ctx-&gt;processing = _gf_true;</div><div class='add'>+            else</div><div class='add'>+                ctx-&gt;processing = _gf_false;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        if (ret &amp;&amp; new) {</div><div class='del'>-                frame = new-&gt;frame;</div><div class='del'>-                if (new-&gt;fop == GF_FOP_XATTROP) {</div><div class='del'>-                        INDEX_STACK_UNWIND (xattrop, frame, -1, ENOMEM,</div><div class='del'>-                                            NULL, NULL);</div><div class='del'>-                } else if (new-&gt;fop == GF_FOP_FXATTROP) {</div><div class='del'>-                        INDEX_STACK_UNWIND (fxattrop, frame, -1, ENOMEM,</div><div class='del'>-                                            NULL, NULL);</div><div class='del'>-                }</div><div class='del'>-                call_stub_destroy (new);</div><div class='del'>-        } else if (stub) {</div><div class='del'>-                call_resume (stub);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; new) {</div><div class='add'>+        frame = new-&gt;frame;</div><div class='add'>+        if (new-&gt;fop == GF_FOP_XATTROP) {</div><div class='add'>+            INDEX_STACK_UNWIND(xattrop, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+        } else if (new-&gt;fop == GF_FOP_FXATTROP) {</div><div class='add'>+            INDEX_STACK_UNWIND(fxattrop, frame, -1, ENOMEM, NULL, NULL);</div><div class='ctx'>         }</div><div class='del'>-        return;</div><div class='add'>+        call_stub_destroy(new);</div><div class='add'>+    } else if (stub) {</div><div class='add'>+        call_resume(stub);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='del'>-             dict_t *xdata, dict_match_t match, dict_t *matchdata)</div><div class='add'>+xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, dict_t *xattr, dict_t *xdata, dict_match_t match,</div><div class='add'>+            dict_t *matchdata)</div><div class='ctx'> {</div><div class='del'>-        inode_t       *inode = NULL;</div><div class='del'>-        index_local_t *local = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    index_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        inode = inode_ref (local-&gt;inode);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    inode = inode_ref(local-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        xattrop_index_action (this, local, xattr, match, matchdata);</div><div class='add'>+    xattrop_index_action(this, local, xattr, match, matchdata);</div><div class='ctx'> out:</div><div class='del'>-        INDEX_STACK_UNWIND (xattrop, frame, op_ret, op_errno, xattr, xdata);</div><div class='del'>-        index_queue_process (this, inode, NULL);</div><div class='del'>-        inode_unref (inode);</div><div class='add'>+    INDEX_STACK_UNWIND(xattrop, frame, op_ret, op_errno, xattr, xdata);</div><div class='add'>+    index_queue_process(this, inode, NULL);</div><div class='add'>+    inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+index_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        index_priv_t *priv = this-&gt;private;</div><div class='add'>+    index_priv_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        xattrop_cbk (frame, cookie, this, op_ret, op_errno,</div><div class='del'>-                     xattr, xdata, is_xattr_in_watchlist,</div><div class='del'>-                     priv-&gt;complete_watchlist);</div><div class='del'>-        return 0;</div><div class='add'>+    xattrop_cbk(frame, cookie, this, op_ret, op_errno, xattr, xdata,</div><div class='add'>+                is_xattr_in_watchlist, priv-&gt;complete_watchlist);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_xattrop64_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+index_xattrop64_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xattr,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        index_priv_t *priv = this-&gt;private;</div><div class='add'>+    index_priv_t *priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        return xattrop_cbk (frame, cookie, this, op_ret, op_errno, xattr, xdata,</div><div class='del'>-                            is_xattr_in_watchlist, priv-&gt;pending_watchlist);</div><div class='add'>+    return xattrop_cbk(frame, cookie, this, op_ret, op_errno, xattr, xdata,</div><div class='add'>+                       is_xattr_in_watchlist, priv-&gt;pending_watchlist);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-index_xattrop_do (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  fd_t *fd, gf_xattrop_flags_t optype, dict_t *xattr,</div><div class='del'>-                  dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int                ret                       = -1;</div><div class='del'>-        int                zfilled[XATTROP_TYPE_END] = {0,};</div><div class='del'>-        index_local_t     *local                     = NULL;</div><div class='del'>-        fop_xattrop_cbk_t  x_cbk                     = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (optype == GF_XATTROP_ADD_ARRAY)</div><div class='del'>-                x_cbk = index_xattrop_cbk;</div><div class='del'>-        else</div><div class='del'>-                x_cbk = index_xattrop64_cbk;</div><div class='del'>-</div><div class='del'>-        //In wind phase bring the gfid into index. This way if the brick crashes</div><div class='del'>-        //just after posix performs xattrop before _cbk reaches index xlator</div><div class='del'>-        //we will still have the gfid in index.</div><div class='del'>-        memset (zfilled, -1, sizeof (zfilled));</div><div class='del'>-</div><div class='del'>-        /* Foreach xattr, set corresponding index of zfilled to 1</div><div class='del'>-         * zfilled[index] = 1 implies the xattr's value is zero filled</div><div class='del'>-         * and should be added in its corresponding subdir.</div><div class='del'>-         *</div><div class='del'>-         * zfilled should be set to 1 only for those index that</div><div class='del'>-         * exist in xattr variable. This is to distinguish</div><div class='del'>-         * between different types of volumes.</div><div class='del'>-         * For e.g., if the check is not made,</div><div class='del'>-         * zfilled[DIRTY] is set to 1 for EC volumes,</div><div class='del'>-         * index file will be tried to create in indices/dirty dir</div><div class='del'>-         * which doesn't exist for an EC volume.</div><div class='del'>-         */</div><div class='del'>-        ret = dict_foreach (xattr, index_fill_zero_array, zfilled);</div><div class='del'>-</div><div class='del'>-        _index_action (this, local-&gt;inode, zfilled);</div><div class='del'>-        if (xdata)</div><div class='del'>-                ret = index_entry_action (this, local-&gt;inode, xdata,</div><div class='del'>-                                          GF_XATTROP_ENTRY_IN_KEY);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                x_cbk (frame, NULL, this, -1, -ret, NULL, NULL);</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+index_xattrop_do(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+                 gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int zfilled[XATTROP_TYPE_END] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    index_local_t *local = NULL;</div><div class='add'>+    fop_xattrop_cbk_t x_cbk = NULL;</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (optype == GF_XATTROP_ADD_ARRAY)</div><div class='add'>+        x_cbk = index_xattrop_cbk;</div><div class='add'>+    else</div><div class='add'>+        x_cbk = index_xattrop64_cbk;</div><div class='add'>+</div><div class='add'>+    // In wind phase bring the gfid into index. This way if the brick crashes</div><div class='add'>+    // just after posix performs xattrop before _cbk reaches index xlator</div><div class='add'>+    // we will still have the gfid in index.</div><div class='add'>+    memset(zfilled, -1, sizeof(zfilled));</div><div class='add'>+</div><div class='add'>+    /* Foreach xattr, set corresponding index of zfilled to 1</div><div class='add'>+     * zfilled[index] = 1 implies the xattr's value is zero filled</div><div class='add'>+     * and should be added in its corresponding subdir.</div><div class='add'>+     *</div><div class='add'>+     * zfilled should be set to 1 only for those index that</div><div class='add'>+     * exist in xattr variable. This is to distinguish</div><div class='add'>+     * between different types of volumes.</div><div class='add'>+     * For e.g., if the check is not made,</div><div class='add'>+     * zfilled[DIRTY] is set to 1 for EC volumes,</div><div class='add'>+     * index file will be tried to create in indices/dirty dir</div><div class='add'>+     * which doesn't exist for an EC volume.</div><div class='add'>+     */</div><div class='add'>+    ret = dict_foreach(xattr, index_fill_zero_array, zfilled);</div><div class='add'>+</div><div class='add'>+    _index_action(this, local-&gt;inode, zfilled);</div><div class='add'>+    if (xdata)</div><div class='add'>+        ret = index_entry_action(this, local-&gt;inode, xdata,</div><div class='add'>+                                 GF_XATTROP_ENTRY_IN_KEY);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        x_cbk(frame, NULL, this, -1, -ret, NULL, NULL);</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (loc)</div><div class='del'>-                STACK_WIND (frame, x_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;xattrop,</div><div class='del'>-                            loc, optype, xattr, xdata);</div><div class='del'>-        else</div><div class='del'>-                STACK_WIND (frame, x_cbk, FIRST_CHILD (this),</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;fxattrop, fd,</div><div class='del'>-                            optype, xattr, xdata);</div><div class='add'>+    if (loc)</div><div class='add'>+        STACK_WIND(frame, x_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, optype, xattr, xdata);</div><div class='add'>+    else</div><div class='add'>+        STACK_WIND(frame, x_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, optype, xattr, xdata);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_xattrop_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                       gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+index_xattrop_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                      gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        index_xattrop_do (frame, this, loc, NULL, optype, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    index_xattrop_do(frame, this, loc, NULL, optype, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_fxattrop_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                        gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='add'>+index_fxattrop_wrapper(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                       gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        index_xattrop_do (frame, this, NULL, fd, optype, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    index_xattrop_do(frame, this, NULL, fd, optype, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-	       gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+index_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t     *stub  = NULL;</div><div class='del'>-        index_local_t   *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    index_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!index_xattrop_track (this, flags, dict))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!index_xattrop_track(this, flags, dict))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;inode = inode_ref (loc-&gt;inode);</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        stub = fop_xattrop_stub (frame, index_xattrop_wrapper,</div><div class='del'>-                                 loc, flags, dict, xdata);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;inode = inode_ref(loc-&gt;inode);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    stub = fop_xattrop_stub(frame, index_xattrop_wrapper, loc, flags, dict,</div><div class='add'>+                            xdata);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if ((!local) || (!stub)) {</div><div class='del'>-                INDEX_STACK_UNWIND (xattrop, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        index_queue_process (this, loc-&gt;inode, stub);</div><div class='add'>+    if ((!local) || (!stub)) {</div><div class='add'>+        INDEX_STACK_UNWIND(xattrop, frame, -1, ENOMEM, NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    index_queue_process(this, loc-&gt;inode, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, default_xattrop_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, flags, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_xattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-		gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='add'>+index_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               gf_xattrop_flags_t flags, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t     *stub  = NULL;</div><div class='del'>-        index_local_t   *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    index_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!index_xattrop_track (this, flags, dict))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!index_xattrop_track(this, flags, dict))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto err;</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='del'>-        local-&gt;inode = inode_ref (fd-&gt;inode);</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        stub = fop_fxattrop_stub (frame, index_fxattrop_wrapper,</div><div class='del'>-                                  fd, flags, dict, xdata);</div><div class='add'>+    frame-&gt;local = local;</div><div class='add'>+    local-&gt;inode = inode_ref(fd-&gt;inode);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    stub = fop_fxattrop_stub(frame, index_fxattrop_wrapper, fd, flags, dict,</div><div class='add'>+                             xdata);</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if ((!local) || (!stub)) {</div><div class='del'>-                INDEX_STACK_UNWIND (fxattrop, frame, -1, ENOMEM, NULL, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        index_queue_process (this, fd-&gt;inode, stub);</div><div class='add'>+    if ((!local) || (!stub)) {</div><div class='add'>+        INDEX_STACK_UNWIND(fxattrop, frame, -1, ENOMEM, NULL, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    index_queue_process(this, fd-&gt;inode, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, default_fxattrop_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, flags, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_fxattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, flags, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> uint64_t</div><div class='del'>-index_entry_count (xlator_t *this, char *subdir)</div><div class='add'>+index_entry_count(xlator_t *this, char *subdir)</div><div class='ctx'> {</div><div class='del'>-	uint64_t       count      = 0;</div><div class='del'>-	index_priv_t  *priv       = NULL;</div><div class='del'>-	DIR           *dirp       = NULL;</div><div class='del'>-	struct dirent *entry      = NULL;</div><div class='del'>-	struct dirent  scratch[2] = {{0,},};</div><div class='del'>-	char           index_dir[PATH_MAX] = {0,};</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    DIR *dirp = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    char index_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-	priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-	make_index_dir_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-			     index_dir, sizeof (index_dir));</div><div class='add'>+    make_index_dir_path(priv-&gt;index_basepath, subdir, index_dir,</div><div class='add'>+                        sizeof(index_dir));</div><div class='ctx'> </div><div class='del'>-	dirp = sys_opendir (index_dir);</div><div class='del'>-	if (!dirp)</div><div class='del'>-		return 0;</div><div class='add'>+    dirp = sys_opendir(index_dir);</div><div class='add'>+    if (!dirp)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (dirp, scratch);</div><div class='del'>-		if (!entry || errno != 0)</div><div class='del'>-			break;</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(dirp, scratch);</div><div class='add'>+        if (!entry || errno != 0)</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-		if (strcmp (entry-&gt;d_name, ".") == 0 ||</div><div class='del'>-		    strcmp (entry-&gt;d_name, "..") == 0)</div><div class='del'>-			continue;</div><div class='add'>+        if (strcmp(entry-&gt;d_name, ".") == 0 || strcmp(entry-&gt;d_name, "..") == 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (!strncmp (entry-&gt;d_name, subdir, strlen (subdir)))</div><div class='del'>-			continue;</div><div class='add'>+        if (!strncmp(entry-&gt;d_name, subdir, strlen(subdir)))</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-		count++;</div><div class='del'>-	}</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	(void) sys_closedir (dirp);</div><div class='add'>+    (void)sys_closedir(dirp);</div><div class='ctx'> </div><div class='del'>-	return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_getxattr_wrapper (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                        loc_t *loc, const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        index_priv_t    *priv = NULL;</div><div class='del'>-        dict_t          *xattr = NULL;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        int             vgfid_type = 0;</div><div class='del'>-	uint64_t        count = 0;</div><div class='add'>+index_getxattr_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                       const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int vgfid_type = 0;</div><div class='add'>+    uint64_t count = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    vgfid_type = index_get_type_from_vgfid_xattr(name);</div><div class='add'>+    if (vgfid_type &gt;= 0) {</div><div class='add'>+        ret = dict_set_static_bin(xattr, (char *)name,</div><div class='add'>+                                  priv-&gt;internal_vgfid[vgfid_type],</div><div class='add'>+                                  sizeof(priv-&gt;internal_vgfid[vgfid_type]));</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, INDEX_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "xattrop index "</div><div class='add'>+                   "gfid set failed");</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    /* TODO: Need to check what kind of link-counts are needed for</div><div class='add'>+     * ENTRY-CHANGES before refactor of this block with array*/</div><div class='add'>+    if (strcmp(name, GF_XATTROP_INDEX_COUNT) == 0) {</div><div class='add'>+        count = index_entry_count(this, XATTROP_SUBDIR);</div><div class='ctx'> </div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto done;</div><div class='add'>+        ret = dict_set_uint64(xattr, (char *)name, count);</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, INDEX_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "xattrop index "</div><div class='add'>+                   "count set failed");</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='add'>+    } else if (strcmp(name, GF_XATTROP_DIRTY_COUNT) == 0) {</div><div class='add'>+        count = index_entry_count(this, DIRTY_SUBDIR);</div><div class='ctx'> </div><div class='del'>-        vgfid_type = index_get_type_from_vgfid_xattr (name);</div><div class='del'>-        if (vgfid_type &gt;= 0) {</div><div class='del'>-		ret = dict_set_static_bin (xattr, (char *)name,</div><div class='del'>-                                           priv-&gt;internal_vgfid[vgfid_type],</div><div class='del'>-				   sizeof (priv-&gt;internal_vgfid[vgfid_type]));</div><div class='del'>-		if (ret) {</div><div class='del'>-			ret = -EINVAL;</div><div class='del'>-			gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                INDEX_MSG_DICT_SET_FAILED, "xattrop index "</div><div class='del'>-				"gfid set failed");</div><div class='del'>-			goto done;</div><div class='del'>-		}</div><div class='add'>+        ret = dict_set_uint64(xattr, (char *)name, count);</div><div class='add'>+        if (ret) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, -ret, INDEX_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "dirty index "</div><div class='add'>+                   "count set failed");</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        /* TODO: Need to check what kind of link-counts are needed for</div><div class='del'>-         * ENTRY-CHANGES before refactor of this block with array*/</div><div class='del'>-        if (strcmp (name, GF_XATTROP_INDEX_COUNT) == 0) {</div><div class='del'>-		count = index_entry_count (this, XATTROP_SUBDIR);</div><div class='del'>-</div><div class='del'>-		ret = dict_set_uint64 (xattr, (char *)name, count);</div><div class='del'>-		if (ret) {</div><div class='del'>-			ret = -EINVAL;</div><div class='del'>-			gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                INDEX_MSG_DICT_SET_FAILED, "xattrop index "</div><div class='del'>-				"count set failed");</div><div class='del'>-			goto done;</div><div class='del'>-		}</div><div class='del'>-        } else if (strcmp (name, GF_XATTROP_DIRTY_COUNT) == 0) {</div><div class='del'>-		count = index_entry_count (this, DIRTY_SUBDIR);</div><div class='del'>-</div><div class='del'>-		ret = dict_set_uint64 (xattr, (char *)name, count);</div><div class='del'>-		if (ret) {</div><div class='del'>-			ret = -EINVAL;</div><div class='del'>-			gf_msg (this-&gt;name, GF_LOG_ERROR, -ret,</div><div class='del'>-                                INDEX_MSG_DICT_SET_FAILED, "dirty index "</div><div class='del'>-				"count set failed");</div><div class='del'>-			goto done;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='add'>+    }</div><div class='ctx'> done:</div><div class='del'>-        if (ret)</div><div class='del'>-                STACK_UNWIND_STRICT (getxattr, frame, -1, -ret, xattr, NULL);</div><div class='del'>-        else</div><div class='del'>-                STACK_UNWIND_STRICT (getxattr, frame, 0, 0, xattr, NULL);</div><div class='add'>+    if (ret)</div><div class='add'>+        STACK_UNWIND_STRICT(getxattr, frame, -1, -ret, xattr, NULL);</div><div class='add'>+    else</div><div class='add'>+        STACK_UNWIND_STRICT(getxattr, frame, 0, 0, xattr, NULL);</div><div class='ctx'> </div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-index_save_pargfid_for_entry_changes (xlator_t *this, loc_t *loc, char *path)</div><div class='add'>+index_save_pargfid_for_entry_changes(xlator_t *this, loc_t *loc, char *path)</div><div class='ctx'> {</div><div class='del'>-        index_priv_t      *priv = NULL;</div><div class='del'>-        index_inode_ctx_t *ctx  = NULL;</div><div class='del'>-        int               ret   = 0;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    index_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (gf_uuid_compare (loc-&gt;pargfid,</div><div class='del'>-                             priv-&gt;internal_vgfid[ENTRY_CHANGES]))</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        ret = index_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        INDEX_MSG_INODE_CTX_GET_SET_FAILED,</div><div class='del'>-                        "Unable to get inode context for %s", path);</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='del'>-        ret = gf_uuid_parse (loc-&gt;name, ctx-&gt;virtual_pargfid);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        INDEX_MSG_INODE_CTX_GET_SET_FAILED, "Unable to store "</div><div class='del'>-                        "virtual gfid in inode context for %s", path);</div><div class='del'>-                return -EINVAL;</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (gf_uuid_compare(loc-&gt;pargfid, priv-&gt;internal_vgfid[ENTRY_CHANGES]))</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    ret = index_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+               INDEX_MSG_INODE_CTX_GET_SET_FAILED,</div><div class='add'>+               "Unable to get inode context for %s", path);</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+    ret = gf_uuid_parse(loc-&gt;name, ctx-&gt;virtual_pargfid);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='add'>+               INDEX_MSG_INODE_CTX_GET_SET_FAILED,</div><div class='add'>+               "Unable to store "</div><div class='add'>+               "virtual gfid in inode context for %s",</div><div class='add'>+               path);</div><div class='add'>+        return -EINVAL;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_lookup_wrapper (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                      loc_t *loc, dict_t *xattr_req)</div><div class='del'>-{</div><div class='del'>-        index_priv_t    *priv = NULL;</div><div class='del'>-        struct stat     lstatbuf = {0};</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        int32_t         op_errno = EINVAL;</div><div class='del'>-        int32_t         op_ret = -1;</div><div class='del'>-        uint64_t        val = IA_INVAL;</div><div class='del'>-        char            path[PATH_MAX] = {0};</div><div class='del'>-        struct iatt     stbuf        = {0, };</div><div class='del'>-        struct iatt     postparent = {0,};</div><div class='del'>-        dict_t          *xattr = NULL;</div><div class='del'>-        gf_boolean_t    is_dir = _gf_false;</div><div class='del'>-        char            *subdir = NULL;</div><div class='del'>-        loc_t           iloc = {0};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        loc_copy (&amp;iloc, loc);</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (loc, done);</div><div class='del'>-        if (index_is_fop_on_internal_inode (this, loc-&gt;parent, loc-&gt;pargfid)) {</div><div class='del'>-                subdir = index_get_subdir_from_vgfid (priv, loc-&gt;pargfid);</div><div class='del'>-                ret = index_inode_path (this, loc-&gt;parent, path, sizeof (path));</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-                strcat (path, "/");</div><div class='del'>-                strcat (path, (char *)loc-&gt;name);</div><div class='del'>-        } else if (index_is_virtual_gfid (priv, loc-&gt;gfid)) {</div><div class='del'>-                subdir = index_get_subdir_from_vgfid (priv, loc-&gt;gfid);</div><div class='del'>-                make_index_dir_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                                     path, sizeof (path));</div><div class='del'>-                is_dir = _gf_true;</div><div class='del'>-</div><div class='del'>-                if ((xattr_req) &amp;&amp;</div><div class='del'>-                    (dict_get (xattr_req, GF_INDEX_IA_TYPE_GET_REQ))) {</div><div class='del'>-                        if (0 == strcmp (subdir,</div><div class='del'>-                                    index_get_subdir_from_type(ENTRY_CHANGES)))</div><div class='del'>-                                val = IA_IFDIR;</div><div class='del'>-                        else</div><div class='del'>-                                val = IA_IFREG;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                if (!inode_is_linked (loc-&gt;inode)) {</div><div class='del'>-                        inode_unref (iloc.inode);</div><div class='del'>-                        iloc.inode = inode_find (loc-&gt;inode-&gt;table, loc-&gt;gfid);</div><div class='del'>-                }</div><div class='del'>-                ret = index_inode_path (this, iloc.inode, path,</div><div class='del'>-                                        sizeof (path));</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='add'>+index_lookup_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                     dict_t *xattr_req)</div><div class='add'>+{</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    struct stat lstatbuf = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    uint64_t val = IA_INVAL;</div><div class='add'>+    char path[PATH_MAX] = {0};</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt postparent = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *xattr = NULL;</div><div class='add'>+    gf_boolean_t is_dir = _gf_false;</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+    loc_t iloc = {0};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    loc_copy(&amp;iloc, loc);</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(loc, done);</div><div class='add'>+    if (index_is_fop_on_internal_inode(this, loc-&gt;parent, loc-&gt;pargfid)) {</div><div class='add'>+        subdir = index_get_subdir_from_vgfid(priv, loc-&gt;pargfid);</div><div class='add'>+        ret = index_inode_path(this, loc-&gt;parent, path, sizeof(path));</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+        strcat(path, "/");</div><div class='add'>+        strcat(path, (char *)loc-&gt;name);</div><div class='add'>+    } else if (index_is_virtual_gfid(priv, loc-&gt;gfid)) {</div><div class='add'>+        subdir = index_get_subdir_from_vgfid(priv, loc-&gt;gfid);</div><div class='add'>+        make_index_dir_path(priv-&gt;index_basepath, subdir, path, sizeof(path));</div><div class='add'>+        is_dir = _gf_true;</div><div class='add'>+</div><div class='add'>+        if ((xattr_req) &amp;&amp; (dict_get(xattr_req, GF_INDEX_IA_TYPE_GET_REQ))) {</div><div class='add'>+            if (0 == strcmp(subdir, index_get_subdir_from_type(ENTRY_CHANGES)))</div><div class='add'>+                val = IA_IFDIR;</div><div class='add'>+            else</div><div class='add'>+                val = IA_IFREG;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        if (!inode_is_linked(loc-&gt;inode)) {</div><div class='add'>+            inode_unref(iloc.inode);</div><div class='add'>+            iloc.inode = inode_find(loc-&gt;inode-&gt;table, loc-&gt;gfid);</div><div class='add'>+        }</div><div class='add'>+        ret = index_inode_path(this, iloc.inode, path, sizeof(path));</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='del'>-        ret = sys_lstat (path, &amp;lstatbuf);</div><div class='add'>+    }</div><div class='add'>+    ret = sys_lstat(path, &amp;lstatbuf);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, errno, "Stat failed on %s dir ", path);</div><div class='add'>+        op_errno = errno;</div><div class='add'>+        goto done;</div><div class='add'>+    } else if (!S_ISDIR(lstatbuf.st_mode) &amp;&amp; is_dir) {</div><div class='add'>+        op_errno = ENOTDIR;</div><div class='add'>+        gf_msg_debug(this-&gt;name, op_errno,</div><div class='add'>+                     "Stat failed on %s dir, "</div><div class='add'>+                     "not a directory",</div><div class='add'>+                     path);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+    xattr = dict_new();</div><div class='add'>+    if (!xattr) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (val != IA_INVAL) {</div><div class='add'>+        ret = dict_set_uint64(xattr, GF_INDEX_IA_TYPE_GET_RSP, val);</div><div class='ctx'>         if (ret) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, errno, "Stat failed on %s dir ",</div><div class='del'>-                              path);</div><div class='del'>-                op_errno = errno;</div><div class='del'>-                goto done;</div><div class='del'>-        } else if (!S_ISDIR (lstatbuf.st_mode) &amp;&amp; is_dir) {</div><div class='del'>-                op_errno = ENOTDIR;</div><div class='del'>-                gf_msg_debug (this-&gt;name, op_errno, "Stat failed on %s dir, "</div><div class='del'>-                        "not a directory", path);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-        xattr = dict_new ();</div><div class='del'>-        if (!xattr) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (val != IA_INVAL) {</div><div class='del'>-                ret = dict_set_uint64 (xattr, GF_INDEX_IA_TYPE_GET_RSP, val);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        iatt_from_stat (&amp;stbuf, &amp;lstatbuf);</div><div class='del'>-        if (is_dir || inode_is_linked (iloc.inode))</div><div class='del'>-                loc_gfid (&amp;iloc, stbuf.ia_gfid);</div><div class='del'>-        else</div><div class='del'>-                gf_uuid_generate (stbuf.ia_gfid);</div><div class='del'>-</div><div class='del'>-       ret =  index_save_pargfid_for_entry_changes (this, &amp;iloc, path);</div><div class='del'>-       if (ret) {</div><div class='del'>-               op_ret = -1;</div><div class='del'>-               op_errno = -ret;</div><div class='del'>-               goto done;</div><div class='del'>-       }</div><div class='del'>-</div><div class='del'>-        stbuf.ia_ino = -1;</div><div class='del'>-        op_ret = 0;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            goto done;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    iatt_from_stat(&amp;stbuf, &amp;lstatbuf);</div><div class='add'>+    if (is_dir || inode_is_linked(iloc.inode))</div><div class='add'>+        loc_gfid(&amp;iloc, stbuf.ia_gfid);</div><div class='add'>+    else</div><div class='add'>+        gf_uuid_generate(stbuf.ia_gfid);</div><div class='add'>+</div><div class='add'>+    ret = index_save_pargfid_for_entry_changes(this, &amp;iloc, path);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    stbuf.ia_ino = -1;</div><div class='add'>+    op_ret = 0;</div><div class='ctx'> done:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno,</div><div class='del'>-                             loc-&gt;inode, &amp;stbuf, xattr, &amp;postparent);</div><div class='del'>-        if (xattr)</div><div class='del'>-                dict_unref (xattr);</div><div class='del'>-        loc_wipe (&amp;iloc);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, loc-&gt;inode, &amp;stbuf,</div><div class='add'>+                        xattr, &amp;postparent);</div><div class='add'>+    if (xattr)</div><div class='add'>+        dict_unref(xattr);</div><div class='add'>+    loc_wipe(&amp;iloc);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_get_gfid_type (void *opaque)</div><div class='del'>-{</div><div class='del'>-        gf_dirent_t              *entry = NULL;</div><div class='del'>-        xlator_t                 *this  = THIS;</div><div class='del'>-        struct index_syncop_args *args  = opaque;</div><div class='del'>-        loc_t                    loc    = {0};</div><div class='del'>-        struct iatt              iatt   = {0};</div><div class='del'>-        int                      ret    = 0;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (entry, &amp;args-&gt;entries-&gt;list, list) {</div><div class='del'>-                if (strcmp (entry-&gt;d_name, ".") == 0 ||</div><div class='del'>-                    strcmp (entry-&gt;d_name, "..") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-                entry-&gt;d_type = IA_INVAL;</div><div class='del'>-                if (gf_uuid_parse (entry-&gt;d_name, loc.gfid))</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                loc.inode = inode_find (args-&gt;parent-&gt;table, loc.gfid);</div><div class='del'>-                if (loc.inode) {</div><div class='del'>-                        entry-&gt;d_type = loc.inode-&gt;ia_type;</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-                loc.inode = inode_new (args-&gt;parent-&gt;table);</div><div class='del'>-                if (!loc.inode)</div><div class='del'>-                        continue;</div><div class='del'>-                ret = syncop_lookup (FIRST_CHILD (this), &amp;loc, &amp;iatt, 0, 0, 0);</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        entry-&gt;d_type = iatt.ia_type;</div><div class='del'>-        }</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+index_get_gfid_type(void *opaque)</div><div class='add'>+{</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    xlator_t *this = THIS;</div><div class='add'>+    struct index_syncop_args *args = opaque;</div><div class='add'>+    loc_t loc = {0};</div><div class='add'>+    struct iatt iatt = {0};</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, &amp;args-&gt;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if (strcmp(entry-&gt;d_name, ".") == 0 || strcmp(entry-&gt;d_name, "..") == 0)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+        entry-&gt;d_type = IA_INVAL;</div><div class='add'>+        if (gf_uuid_parse(entry-&gt;d_name, loc.gfid))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        loc.inode = inode_find(args-&gt;parent-&gt;table, loc.gfid);</div><div class='add'>+        if (loc.inode) {</div><div class='add'>+            entry-&gt;d_type = loc.inode-&gt;ia_type;</div><div class='add'>+            continue;</div><div class='add'>+        }</div><div class='add'>+        loc.inode = inode_new(args-&gt;parent-&gt;table);</div><div class='add'>+        if (!loc.inode)</div><div class='add'>+            continue;</div><div class='add'>+        ret = syncop_lookup(FIRST_CHILD(this), &amp;loc, &amp;iatt, 0, 0, 0);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            entry-&gt;d_type = iatt.ia_type;</div><div class='add'>+    }</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_readdir_wrapper (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                       fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        index_fd_ctx_t       *fctx           = NULL;</div><div class='del'>-        index_priv_t         *priv           = NULL;</div><div class='del'>-        DIR                  *dir            = NULL;</div><div class='del'>-        int                   ret            = -1;</div><div class='del'>-        int32_t               op_ret         = -1;</div><div class='del'>-        int32_t               op_errno       = 0;</div><div class='del'>-        int                   count          = 0;</div><div class='del'>-        gf_dirent_t           entries;</div><div class='del'>-        struct index_syncop_args args = {0};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        ret = index_fd_ctx_get (fd, this, &amp;fctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        INDEX_MSG_FD_OP_FAILED, "pfd is NULL, fd=%p", fd);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dir = fctx-&gt;dir;</div><div class='del'>-        if (!dir) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='del'>-                        INDEX_MSG_INDEX_READDIR_FAILED,</div><div class='del'>-                        "dir is NULL for fd=%p", fd);</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        count = index_fill_readdir (fd, fctx, dir, off, size, &amp;entries);</div><div class='del'>-</div><div class='del'>-        /* pick ENOENT to indicate EOF */</div><div class='del'>-        op_errno = errno;</div><div class='del'>-        op_ret = count;</div><div class='del'>-        if (index_is_virtual_gfid (priv, fd-&gt;inode-&gt;gfid) &amp;&amp;</div><div class='del'>-            xdata &amp;&amp; dict_get (xdata, "get-gfid-type")) {</div><div class='del'>-                args.parent = fd-&gt;inode;</div><div class='del'>-                args.entries = &amp;entries;</div><div class='del'>-                ret = synctask_new (this-&gt;ctx-&gt;env, index_get_gfid_type,</div><div class='del'>-                                    NULL, NULL, &amp;args);</div><div class='del'>-        }</div><div class='add'>+index_readdir_wrapper(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                      size_t size, off_t off, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    index_fd_ctx_t *fctx = NULL;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    DIR *dir = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int count = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    struct index_syncop_args args = {0};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    ret = index_fd_ctx_get(fd, this, &amp;fctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno, INDEX_MSG_FD_OP_FAILED,</div><div class='add'>+               "pfd is NULL, fd=%p", fd);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dir = fctx-&gt;dir;</div><div class='add'>+    if (!dir) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, op_errno,</div><div class='add'>+               INDEX_MSG_INDEX_READDIR_FAILED, "dir is NULL for fd=%p", fd);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    count = index_fill_readdir(fd, fctx, dir, off, size, &amp;entries);</div><div class='add'>+</div><div class='add'>+    /* pick ENOENT to indicate EOF */</div><div class='add'>+    op_errno = errno;</div><div class='add'>+    op_ret = count;</div><div class='add'>+    if (index_is_virtual_gfid(priv, fd-&gt;inode-&gt;gfid) &amp;&amp; xdata &amp;&amp;</div><div class='add'>+        dict_get(xdata, "get-gfid-type")) {</div><div class='add'>+        args.parent = fd-&gt;inode;</div><div class='add'>+        args.entries = &amp;entries;</div><div class='add'>+        ret = synctask_new(this-&gt;ctx-&gt;env, index_get_gfid_type, NULL, NULL,</div><div class='add'>+                           &amp;args);</div><div class='add'>+    }</div><div class='ctx'> done:</div><div class='del'>-        STACK_UNWIND_STRICT (readdir, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readdir, frame, op_ret, op_errno, &amp;entries, NULL);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-deletion_handler (const char *fpath, const struct stat *sb, int typeflag,</div><div class='del'>-               struct FTW *ftwbuf)</div><div class='add'>+deletion_handler(const char *fpath, const struct stat *sb, int typeflag,</div><div class='add'>+                 struct FTW *ftwbuf)</div><div class='ctx'> {</div><div class='del'>-        ia_type_t    type = IA_INVAL;</div><div class='add'>+    ia_type_t type = IA_INVAL;</div><div class='ctx'> </div><div class='del'>-        switch (sb-&gt;st_mode &amp; S_IFMT) {</div><div class='add'>+    switch (sb-&gt;st_mode &amp; S_IFMT) {</div><div class='ctx'>         case S_IFREG:</div><div class='del'>-                sys_unlink (fpath);</div><div class='del'>-                break;</div><div class='add'>+            sys_unlink(fpath);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case S_IFDIR:</div><div class='del'>-                sys_rmdir (fpath);</div><div class='del'>-                break;</div><div class='add'>+            sys_rmdir(fpath);</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                type = ia_type_from_st_mode (sb-&gt;st_mode);</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                        INDEX_MSG_INVALID_ARGS,</div><div class='del'>-                        "%s neither a regular file nor a directory - type:%s",</div><div class='del'>-                        fpath, gf_inode_type_to_str (type));</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+            type = ia_type_from_st_mode(sb-&gt;st_mode);</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_WARNING, EINVAL, INDEX_MSG_INVALID_ARGS,</div><div class='add'>+                   "%s neither a regular file nor a directory - type:%s", fpath,</div><div class='add'>+                   gf_inode_type_to_str(type));</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-index_wipe_index_subdir (void *opaque)</div><div class='add'>+index_wipe_index_subdir(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        struct index_syncop_args *args  = opaque;</div><div class='add'>+    struct index_syncop_args *args = opaque;</div><div class='ctx'> </div><div class='del'>-        nftw (args-&gt;path, deletion_handler, 1, FTW_DEPTH | FTW_PHYS);</div><div class='del'>-        return 0;</div><div class='add'>+    nftw(args-&gt;path, deletion_handler, 1, FTW_DEPTH | FTW_PHYS);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-index_get_parent_iatt (struct iatt *parent, char *path, loc_t *loc,</div><div class='del'>-                       int32_t *op_ret, int32_t *op_errno)</div><div class='del'>-{</div><div class='del'>-        int         ret      = -1;</div><div class='del'>-        struct stat lstatbuf = {0,};</div><div class='del'>-</div><div class='del'>-        ret = sys_lstat (path, &amp;lstatbuf);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *op_ret = -1;</div><div class='del'>-                *op_errno = errno;</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+index_get_parent_iatt(struct iatt *parent, char *path, loc_t *loc,</div><div class='add'>+                      int32_t *op_ret, int32_t *op_errno)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct stat lstatbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = sys_lstat(path, &amp;lstatbuf);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *op_ret = -1;</div><div class='add'>+        *op_errno = errno;</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        iatt_from_stat (parent, &amp;lstatbuf);</div><div class='del'>-        gf_uuid_copy (parent-&gt;ia_gfid, loc-&gt;pargfid);</div><div class='del'>-        parent-&gt;ia_ino = -1;</div><div class='add'>+    iatt_from_stat(parent, &amp;lstatbuf);</div><div class='add'>+    gf_uuid_copy(parent-&gt;ia_gfid, loc-&gt;pargfid);</div><div class='add'>+    parent-&gt;ia_ino = -1;</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_rmdir_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='del'>-                     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int                        ret                    = 0;</div><div class='del'>-        int32_t                    op_ret                 = 0;</div><div class='del'>-        int32_t                    op_errno               = 0;</div><div class='del'>-        char                      *subdir                 = NULL;</div><div class='del'>-        char                       index_dir[PATH_MAX]    = {0};</div><div class='del'>-        char                       index_subdir[PATH_MAX] = {0};</div><div class='del'>-        uuid_t                     gfid                   = {0};</div><div class='del'>-        struct  iatt               preparent              = {0};</div><div class='del'>-        struct  iatt               postparent             = {0};</div><div class='del'>-        index_priv_t              *priv                   = NULL;</div><div class='del'>-        index_xattrop_type_t       type                   = XATTROP_TYPE_UNSET;</div><div class='del'>-        struct index_syncop_args   args                   = {0,};</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        type = index_get_type_from_vgfid (priv, loc-&gt;pargfid);</div><div class='del'>-        subdir = index_get_subdir_from_vgfid (priv, loc-&gt;pargfid);</div><div class='del'>-        make_index_dir_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                             index_dir, sizeof (index_dir));</div><div class='del'>-</div><div class='del'>-        index_get_parent_iatt (&amp;preparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        gf_uuid_parse (loc-&gt;name, gfid);</div><div class='del'>-        make_gfid_path (priv-&gt;index_basepath, subdir, gfid, index_subdir,</div><div class='del'>-                        sizeof (index_subdir));</div><div class='del'>-</div><div class='del'>-        if (flag == 0) {</div><div class='del'>-                ret = index_del (this, gfid, subdir, type);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        goto done;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                args.path = index_subdir;</div><div class='del'>-                ret = synctask_new (this-&gt;ctx-&gt;env, index_wipe_index_subdir,</div><div class='del'>-                                    NULL, NULL, &amp;args);</div><div class='add'>+index_rmdir_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='add'>+                    dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+    char index_dir[PATH_MAX] = {0};</div><div class='add'>+    char index_subdir[PATH_MAX] = {0};</div><div class='add'>+    uuid_t gfid = {0};</div><div class='add'>+    struct iatt preparent = {0};</div><div class='add'>+    struct iatt postparent = {0};</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    index_xattrop_type_t type = XATTROP_TYPE_UNSET;</div><div class='add'>+    struct index_syncop_args args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    type = index_get_type_from_vgfid(priv, loc-&gt;pargfid);</div><div class='add'>+    subdir = index_get_subdir_from_vgfid(priv, loc-&gt;pargfid);</div><div class='add'>+    make_index_dir_path(priv-&gt;index_basepath, subdir, index_dir,</div><div class='add'>+                        sizeof(index_dir));</div><div class='add'>+</div><div class='add'>+    index_get_parent_iatt(&amp;preparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    gf_uuid_parse(loc-&gt;name, gfid);</div><div class='add'>+    make_gfid_path(priv-&gt;index_basepath, subdir, gfid, index_subdir,</div><div class='add'>+                   sizeof(index_subdir));</div><div class='add'>+</div><div class='add'>+    if (flag == 0) {</div><div class='add'>+        ret = index_del(this, gfid, subdir, type);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = -ret;</div><div class='add'>+            goto done;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        args.path = index_subdir;</div><div class='add'>+        ret = synctask_new(this-&gt;ctx-&gt;env, index_wipe_index_subdir, NULL, NULL,</div><div class='add'>+                           &amp;args);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        index_get_parent_iatt (&amp;postparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='add'>+    index_get_parent_iatt(&amp;postparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        INDEX_STACK_UNWIND (rmdir, frame, op_ret, op_errno, &amp;preparent,</div><div class='del'>-                            &amp;postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    INDEX_STACK_UNWIND(rmdir, frame, op_ret, op_errno, &amp;preparent, &amp;postparent,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_unlink_wrapper (call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='del'>-                      dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        index_priv_t    *priv = NULL;</div><div class='del'>-        index_inode_ctx_t *ictx = NULL;</div><div class='del'>-        int32_t         op_ret = 0;</div><div class='del'>-        int32_t         op_errno = 0;</div><div class='del'>-        int             ret = 0;</div><div class='del'>-        index_xattrop_type_t type = XATTROP_TYPE_UNSET;</div><div class='del'>-        struct  iatt    preparent = {0};</div><div class='del'>-        struct  iatt    postparent = {0};</div><div class='del'>-        char            index_dir[PATH_MAX] = {0};</div><div class='del'>-        char            filepath[PATH_MAX] = {0};</div><div class='del'>-        uuid_t          gfid = {0};</div><div class='del'>-        char            *subdir = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        type = index_get_type_from_vgfid (priv, loc-&gt;pargfid);</div><div class='del'>-        ret = index_inode_path (this, loc-&gt;parent, index_dir,</div><div class='del'>-                                sizeof (index_dir));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        index_get_parent_iatt (&amp;preparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='del'>-        if (type &lt;= XATTROP_TYPE_UNSET) {</div><div class='del'>-                ret = index_inode_ctx_get (loc-&gt;parent, this, &amp;ictx);</div><div class='del'>-                if ((ret == 0) &amp;&amp; gf_uuid_is_null (ictx-&gt;virtual_pargfid)) {</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                }</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        ret = index_entry_delete (this, ictx-&gt;virtual_pargfid,</div><div class='del'>-                                                  (char *)loc-&gt;name);</div><div class='del'>-                }</div><div class='del'>-        } else if (type == ENTRY_CHANGES) {</div><div class='del'>-                make_file_path (priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR,</div><div class='del'>-                                (char *)loc-&gt;name, filepath, sizeof (filepath));</div><div class='del'>-                ret = sys_unlink (filepath);</div><div class='del'>-        } else {</div><div class='del'>-                subdir = index_get_subdir_from_type (type);</div><div class='del'>-                gf_uuid_parse (loc-&gt;name, gfid);</div><div class='del'>-                ret = index_del (this, gfid, subdir, type);</div><div class='del'>-        }</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        index_get_parent_iatt (&amp;postparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto done;</div><div class='add'>+index_unlink_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc, int flag,</div><div class='add'>+                     dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    index_inode_ctx_t *ictx = NULL;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    index_xattrop_type_t type = XATTROP_TYPE_UNSET;</div><div class='add'>+    struct iatt preparent = {0};</div><div class='add'>+    struct iatt postparent = {0};</div><div class='add'>+    char index_dir[PATH_MAX] = {0};</div><div class='add'>+    char filepath[PATH_MAX] = {0};</div><div class='add'>+    uuid_t gfid = {0};</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    type = index_get_type_from_vgfid(priv, loc-&gt;pargfid);</div><div class='add'>+    ret = index_inode_path(this, loc-&gt;parent, index_dir, sizeof(index_dir));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    index_get_parent_iatt(&amp;preparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='add'>+</div><div class='add'>+    if (type &lt;= XATTROP_TYPE_UNSET) {</div><div class='add'>+        ret = index_inode_ctx_get(loc-&gt;parent, this, &amp;ictx);</div><div class='add'>+        if ((ret == 0) &amp;&amp; gf_uuid_is_null(ictx-&gt;virtual_pargfid)) {</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+        }</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            ret = index_entry_delete(this, ictx-&gt;virtual_pargfid,</div><div class='add'>+                                     (char *)loc-&gt;name);</div><div class='add'>+        }</div><div class='add'>+    } else if (type == ENTRY_CHANGES) {</div><div class='add'>+        make_file_path(priv-&gt;index_basepath, ENTRY_CHANGES_SUBDIR,</div><div class='add'>+                       (char *)loc-&gt;name, filepath, sizeof(filepath));</div><div class='add'>+        ret = sys_unlink(filepath);</div><div class='add'>+    } else {</div><div class='add'>+        subdir = index_get_subdir_from_type(type);</div><div class='add'>+        gf_uuid_parse(loc-&gt;name, gfid);</div><div class='add'>+        ret = index_del(this, gfid, subdir, type);</div><div class='add'>+    }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    index_get_parent_iatt(&amp;postparent, index_dir, loc, &amp;op_ret, &amp;op_errno);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto done;</div><div class='ctx'> done:</div><div class='del'>-        INDEX_STACK_UNWIND (unlink, frame, op_ret, op_errno, &amp;preparent,</div><div class='del'>-                            &amp;postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    INDEX_STACK_UNWIND(unlink, frame, op_ret, op_errno, &amp;preparent, &amp;postparent,</div><div class='add'>+                       xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_getxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+index_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t     *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!name || (!index_is_vgfid_xattr (name) &amp;&amp;</div><div class='del'>-		      strcmp (GF_XATTROP_INDEX_COUNT, name) &amp;&amp;</div><div class='del'>-                      strcmp (GF_XATTROP_DIRTY_COUNT, name)))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!name ||</div><div class='add'>+        (!index_is_vgfid_xattr(name) &amp;&amp; strcmp(GF_XATTROP_INDEX_COUNT, name) &amp;&amp;</div><div class='add'>+         strcmp(GF_XATTROP_DIRTY_COUNT, name)))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stub = fop_getxattr_stub (frame, index_getxattr_wrapper, loc, name,</div><div class='del'>-                                  xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                STACK_UNWIND_STRICT (getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        worker_enqueue (this, stub);</div><div class='add'>+    stub = fop_getxattr_stub(frame, index_getxattr_wrapper, loc, name, xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        STACK_UNWIND_STRICT(getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+    worker_enqueue(this, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, default_getxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int64_t</div><div class='del'>-index_fetch_link_count (xlator_t *this, index_xattrop_type_t type)</div><div class='del'>-{</div><div class='del'>-        index_priv_t   *priv       = this-&gt;private;</div><div class='del'>-        char           *subdir     = NULL;</div><div class='del'>-        struct stat     lstatbuf   = {0,};</div><div class='del'>-        int             ret        = -1;</div><div class='del'>-        int64_t         count      = -1;</div><div class='del'>-        DIR            *dirp       = NULL;</div><div class='del'>-        struct dirent  *entry      = NULL;</div><div class='del'>-        struct dirent   scratch[2] = {{0,},};</div><div class='del'>-        char            index_dir[PATH_MAX] = {0,};</div><div class='del'>-        char            index_path[PATH_MAX] = {0,};</div><div class='del'>-</div><div class='del'>-        subdir = index_get_subdir_from_type (type);</div><div class='del'>-        make_index_dir_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                             index_dir, sizeof (index_dir));</div><div class='del'>-</div><div class='del'>-        dirp = sys_opendir (index_dir);</div><div class='del'>-        if (!dirp)</div><div class='del'>-                goto out;</div><div class='add'>+index_fetch_link_count(xlator_t *this, index_xattrop_type_t type)</div><div class='add'>+{</div><div class='add'>+    index_priv_t *priv = this-&gt;private;</div><div class='add'>+    char *subdir = NULL;</div><div class='add'>+    struct stat lstatbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int64_t count = -1;</div><div class='add'>+    DIR *dirp = NULL;</div><div class='add'>+    struct dirent *entry = NULL;</div><div class='add'>+    struct dirent scratch[2] = {</div><div class='add'>+        {</div><div class='add'>+            0,</div><div class='add'>+        },</div><div class='add'>+    };</div><div class='add'>+    char index_dir[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char index_path[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    subdir = index_get_subdir_from_type(type);</div><div class='add'>+    make_index_dir_path(priv-&gt;index_basepath, subdir, index_dir,</div><div class='add'>+                        sizeof(index_dir));</div><div class='add'>+</div><div class='add'>+    dirp = sys_opendir(index_dir);</div><div class='add'>+    if (!dirp)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    for (;;) {</div><div class='add'>+        errno = 0;</div><div class='add'>+        entry = sys_readdir(dirp, scratch);</div><div class='add'>+        if (!entry || errno != 0) {</div><div class='add'>+            if (count == -1)</div><div class='add'>+                count = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        for (;;) {</div><div class='del'>-                errno = 0;</div><div class='del'>-                entry = sys_readdir (dirp, scratch);</div><div class='del'>-                if (!entry || errno != 0) {</div><div class='del'>-                        if (count == -1)</div><div class='del'>-                                count = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (strcmp(entry-&gt;d_name, ".") == 0 || strcmp(entry-&gt;d_name, "..") == 0)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (strcmp (entry-&gt;d_name, ".") == 0 ||</div><div class='del'>-                    strcmp (entry-&gt;d_name, "..") == 0)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                make_file_path (priv-&gt;index_basepath, subdir,</div><div class='del'>-                                entry-&gt;d_name, index_path, sizeof(index_path));</div><div class='del'>-</div><div class='del'>-                ret = sys_lstat (index_path, &amp;lstatbuf);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        count = -2;</div><div class='del'>-                        continue;</div><div class='del'>-                } else {</div><div class='del'>-                        count = lstatbuf.st_nlink - 1;</div><div class='del'>-                        if (count == 0)</div><div class='del'>-                                continue;</div><div class='del'>-                        else</div><div class='del'>-                                break;</div><div class='del'>-                }</div><div class='add'>+        make_file_path(priv-&gt;index_basepath, subdir, entry-&gt;d_name, index_path,</div><div class='add'>+                       sizeof(index_path));</div><div class='add'>+</div><div class='add'>+        ret = sys_lstat(index_path, &amp;lstatbuf);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            count = -2;</div><div class='add'>+            continue;</div><div class='add'>+        } else {</div><div class='add'>+            count = lstatbuf.st_nlink - 1;</div><div class='add'>+            if (count == 0)</div><div class='add'>+                continue;</div><div class='add'>+            else</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        if (dirp)</div><div class='del'>-                (void) sys_closedir (dirp);</div><div class='del'>-        return count;</div><div class='add'>+    if (dirp)</div><div class='add'>+        (void)sys_closedir(dirp);</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-dict_t*</div><div class='del'>-index_fill_link_count (xlator_t *this, dict_t *xdata)</div><div class='add'>+dict_t *</div><div class='add'>+index_fill_link_count(xlator_t *this, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             ret       = -1;</div><div class='del'>-        index_priv_t    *priv     = NULL;</div><div class='del'>-        int64_t         count     = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    int64_t count = -1;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        xdata = (xdata) ? dict_ref (xdata) : dict_new ();</div><div class='del'>-        if (!xdata)</div><div class='del'>-                goto out;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    xdata = (xdata) ? dict_ref(xdata) : dict_new();</div><div class='add'>+    if (!xdata)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        index_get_link_count (priv, &amp;count, XATTROP);</div><div class='del'>-        if (count &lt; 0) {</div><div class='del'>-                count = index_fetch_link_count (this, XATTROP);</div><div class='del'>-                index_set_link_count (priv, count, XATTROP);</div><div class='del'>-        }</div><div class='add'>+    index_get_link_count(priv, &amp;count, XATTROP);</div><div class='add'>+    if (count &lt; 0) {</div><div class='add'>+        count = index_fetch_link_count(this, XATTROP);</div><div class='add'>+        index_set_link_count(priv, count, XATTROP);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (count == 0) {</div><div class='del'>-                ret = dict_set_int8 (xdata, "link-count", 0);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                INDEX_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Unable to set link-count");</div><div class='del'>-        } else {</div><div class='del'>-                ret = dict_set_int8 (xdata, "link-count", 1);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                                INDEX_MSG_DICT_SET_FAILED,</div><div class='del'>-                                "Unable to set link-count");</div><div class='del'>-        }</div><div class='add'>+    if (count == 0) {</div><div class='add'>+        ret = dict_set_int8(xdata, "link-count", 0);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, INDEX_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Unable to set link-count");</div><div class='add'>+    } else {</div><div class='add'>+        ret = dict_set_int8(xdata, "link-count", 1);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, INDEX_MSG_DICT_SET_FAILED,</div><div class='add'>+                   "Unable to set link-count");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return xdata;</div><div class='add'>+    return xdata;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+index_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        xdata = index_fill_link_count (this, xdata);</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             xdata, postparent);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    xdata = index_fill_link_count(this, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                        postparent);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              loc_t *loc, dict_t *xattr_req)</div><div class='del'>-{</div><div class='del'>-        inode_t         *inode = NULL;</div><div class='del'>-        call_stub_t     *stub = NULL;</div><div class='del'>-        char            *flag = NULL;</div><div class='del'>-        int              ret  = -1;</div><div class='del'>-</div><div class='del'>-        if (!index_is_fop_on_internal_inode (this, loc-&gt;parent, loc-&gt;pargfid) &amp;&amp;</div><div class='del'>-            !index_is_fop_on_internal_inode (this, loc-&gt;inode, loc-&gt;gfid)) {</div><div class='del'>-                if (!inode_is_linked (loc-&gt;inode)) {</div><div class='del'>-                        inode = inode_find (loc-&gt;inode-&gt;table, loc-&gt;gfid);</div><div class='del'>-                        if (!index_is_fop_on_internal_inode (this, inode,</div><div class='del'>-                                                            loc-&gt;gfid)) {</div><div class='del'>-                                inode_unref (inode);</div><div class='del'>-                                goto normal;</div><div class='del'>-                        }</div><div class='del'>-                        inode_unref (inode);</div><div class='del'>-                } else {</div><div class='del'>-                        goto normal;</div><div class='del'>-                }</div><div class='add'>+index_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req)</div><div class='add'>+{</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    char *flag = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!index_is_fop_on_internal_inode(this, loc-&gt;parent, loc-&gt;pargfid) &amp;&amp;</div><div class='add'>+        !index_is_fop_on_internal_inode(this, loc-&gt;inode, loc-&gt;gfid)) {</div><div class='add'>+        if (!inode_is_linked(loc-&gt;inode)) {</div><div class='add'>+            inode = inode_find(loc-&gt;inode-&gt;table, loc-&gt;gfid);</div><div class='add'>+            if (!index_is_fop_on_internal_inode(this, inode, loc-&gt;gfid)) {</div><div class='add'>+                inode_unref(inode);</div><div class='add'>+                goto normal;</div><div class='add'>+            }</div><div class='add'>+            inode_unref(inode);</div><div class='add'>+        } else {</div><div class='add'>+            goto normal;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        stub = fop_lookup_stub (frame, index_lookup_wrapper, loc, xattr_req);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                STACK_UNWIND_STRICT (lookup, frame, -1, ENOMEM, loc-&gt;inode,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        worker_enqueue (this, stub);</div><div class='add'>+    stub = fop_lookup_stub(frame, index_lookup_wrapper, loc, xattr_req);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        STACK_UNWIND_STRICT(lookup, frame, -1, ENOMEM, loc-&gt;inode, NULL, NULL,</div><div class='add'>+                            NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+    worker_enqueue(this, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> normal:</div><div class='del'>-        ret = dict_get_str (xattr_req, "link-count", &amp;flag);</div><div class='del'>-        if ((ret == 0) &amp;&amp; (strcmp (flag, GF_XATTROP_INDEX_COUNT) == 0)) {</div><div class='del'>-                STACK_WIND (frame, index_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xattr_req);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND (frame, default_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xattr_req);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(xattr_req, "link-count", &amp;flag);</div><div class='add'>+    if ((ret == 0) &amp;&amp; (strcmp(flag, GF_XATTROP_INDEX_COUNT) == 0)) {</div><div class='add'>+        STACK_WIND(frame, index_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xattr_req);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND(frame, default_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xattr_req);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                 dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        xdata = index_fill_link_count (this, xdata);</div><div class='del'>-        STACK_UNWIND_STRICT (fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+index_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    xdata = index_fill_link_count(this, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fstat, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+index_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int  ret   = -1;</div><div class='del'>-        char *flag = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *flag = NULL;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (xdata, "link-count", &amp;flag);</div><div class='del'>-        if ((ret == 0) &amp;&amp; (strcmp (flag, GF_XATTROP_INDEX_COUNT) == 0)) {</div><div class='del'>-                STACK_WIND (frame, index_fstat_cbk, FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        } else {</div><div class='del'>-                STACK_WIND (frame, default_fstat_cbk, FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_get_str(xdata, "link-count", &amp;flag);</div><div class='add'>+    if ((ret == 0) &amp;&amp; (strcmp(flag, GF_XATTROP_INDEX_COUNT) == 0)) {</div><div class='add'>+        STACK_WIND(frame, index_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    } else {</div><div class='add'>+        STACK_WIND(frame, default_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_opendir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+index_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (!index_is_fop_on_internal_inode (this, fd-&gt;inode, NULL))</div><div class='del'>-                goto normal;</div><div class='add'>+    if (!index_is_fop_on_internal_inode(this, fd-&gt;inode, NULL))</div><div class='add'>+        goto normal;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        STACK_UNWIND_STRICT (opendir, frame, 0, 0, fd, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    STACK_UNWIND_STRICT(opendir, frame, 0, 0, fd, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> normal:</div><div class='del'>-        STACK_WIND (frame, default_opendir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_readdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               fd_t *fd, size_t size, off_t off, dict_t *xdata)</div><div class='add'>+index_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t off, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t       *stub       = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!index_is_fop_on_internal_inode (this, fd-&gt;inode, NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!index_is_fop_on_internal_inode(this, fd-&gt;inode, NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stub = fop_readdir_stub (frame, index_readdir_wrapper, fd, size, off,</div><div class='del'>-                                 xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                STACK_UNWIND_STRICT (readdir, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        worker_enqueue (this, stub);</div><div class='add'>+    stub = fop_readdir_stub(frame, index_readdir_wrapper, fd, size, off, xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        STACK_UNWIND_STRICT(readdir, frame, -1, ENOMEM, NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+    worker_enqueue(this, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, default_readdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, off, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_readdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, off, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+index_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t     *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!index_is_fop_on_internal_inode (this, loc-&gt;parent, NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!index_is_fop_on_internal_inode(this, loc-&gt;parent, NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stub = fop_unlink_stub (frame, index_unlink_wrapper, loc, xflag, xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                STACK_UNWIND_STRICT (unlink, frame, -1, ENOMEM, NULL, NULL,</div><div class='del'>-                                     NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        worker_enqueue (this, stub);</div><div class='add'>+    stub = fop_unlink_stub(frame, index_unlink_wrapper, loc, xflag, xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        STACK_UNWIND_STRICT(unlink, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+    worker_enqueue(this, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, default_unlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+index_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        call_stub_t     *stub = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!index_is_fop_on_internal_inode (this, loc-&gt;parent, NULL))</div><div class='del'>-                goto out;</div><div class='add'>+    if (!index_is_fop_on_internal_inode(this, loc-&gt;parent, NULL))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        stub = fop_rmdir_stub (frame, index_rmdir_wrapper, loc, flags, xdata);</div><div class='del'>-        if (!stub) {</div><div class='del'>-                STACK_UNWIND_STRICT (rmdir, frame, -1, ENOMEM, NULL, NULL,</div><div class='del'>-                                     NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        worker_enqueue (this, stub);</div><div class='add'>+    stub = fop_rmdir_stub(frame, index_rmdir_wrapper, loc, flags, xdata);</div><div class='add'>+    if (!stub) {</div><div class='add'>+        STACK_UNWIND_STRICT(rmdir, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+    worker_enqueue(this, stub);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND_TAIL (frame, FIRST_CHILD(this),</div><div class='del'>-                         FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;rmdir,</div><div class='add'>+                    loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_make_xattrop_watchlist (xlator_t *this, index_priv_t *priv,</div><div class='del'>-                              char *watchlist, index_xattrop_type_t type)</div><div class='del'>-{</div><div class='del'>-        char   *delim         = NULL;</div><div class='del'>-        char   *dup_watchlist = NULL;</div><div class='del'>-        char   *key           = NULL;</div><div class='del'>-        char   *saveptr       = NULL;</div><div class='del'>-        dict_t *xattrs        = NULL;</div><div class='del'>-        data_t *dummy         = NULL;</div><div class='del'>-        int    ret            = 0;</div><div class='del'>-</div><div class='del'>-        if (!watchlist)</div><div class='del'>-                return 0;</div><div class='del'>-</div><div class='del'>-        dup_watchlist = gf_strdup (watchlist);</div><div class='del'>-        if (!dup_watchlist)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        xattrs = dict_new ();</div><div class='del'>-        if (!xattrs) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+index_make_xattrop_watchlist(xlator_t *this, index_priv_t *priv,</div><div class='add'>+                             char *watchlist, index_xattrop_type_t type)</div><div class='add'>+{</div><div class='add'>+    char *delim = NULL;</div><div class='add'>+    char *dup_watchlist = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    data_t *dummy = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!watchlist)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        dummy = int_to_data (1);</div><div class='del'>-        if (!dummy) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dup_watchlist = gf_strdup(watchlist);</div><div class='add'>+    if (!dup_watchlist)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        data_ref (dummy);</div><div class='add'>+    xattrs = dict_new();</div><div class='add'>+    if (!xattrs) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        delim = ",";</div><div class='del'>-        key = strtok_r (dup_watchlist, delim, &amp;saveptr);</div><div class='del'>-        while (key) {</div><div class='del'>-                if (strlen (key) == 0) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    dummy = int_to_data(1);</div><div class='add'>+    if (!dummy) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                ret = dict_set (xattrs, key, dummy);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='add'>+    data_ref(dummy);</div><div class='ctx'> </div><div class='del'>-                key = strtok_r (NULL, delim, &amp;saveptr);</div><div class='add'>+    delim = ",";</div><div class='add'>+    key = strtok_r(dup_watchlist, delim, &amp;saveptr);</div><div class='add'>+    while (key) {</div><div class='add'>+        if (strlen(key) == 0) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='add'>+        ret = dict_set(xattrs, key, dummy);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        key = strtok_r(NULL, delim, &amp;saveptr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case DIRTY:</div><div class='del'>-                priv-&gt;dirty_watchlist = dict_copy_with_ref (xattrs,</div><div class='del'>-                                                         priv-&gt;dirty_watchlist);</div><div class='del'>-                if (!priv-&gt;dirty_watchlist) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            priv-&gt;dirty_watchlist = dict_copy_with_ref(xattrs,</div><div class='add'>+                                                       priv-&gt;dirty_watchlist);</div><div class='add'>+            if (!priv-&gt;dirty_watchlist) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         case XATTROP:</div><div class='del'>-                priv-&gt;pending_watchlist = dict_copy_with_ref (xattrs,</div><div class='del'>-                                                       priv-&gt;pending_watchlist);</div><div class='del'>-                if (!priv-&gt;pending_watchlist) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='add'>+            priv-&gt;pending_watchlist = dict_copy_with_ref(</div><div class='add'>+                xattrs, priv-&gt;pending_watchlist);</div><div class='add'>+            if (!priv-&gt;pending_watchlist) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (dup_watchlist);</div><div class='add'>+    GF_FREE(dup_watchlist);</div><div class='ctx'> </div><div class='del'>-        if (dummy)</div><div class='del'>-                data_unref (dummy);</div><div class='add'>+    if (dummy)</div><div class='add'>+        data_unref(dummy);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_index_mt_end + 1);</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_index_mt_end + 1);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        int i = 0;</div><div class='del'>-        int ret = -1;</div><div class='del'>-        int64_t count = -1;</div><div class='del'>-        index_priv_t *priv = NULL;</div><div class='del'>-        pthread_attr_t  w_attr;</div><div class='del'>-        gf_boolean_t    mutex_inited = _gf_false;</div><div class='del'>-        gf_boolean_t    cond_inited  = _gf_false;</div><div class='del'>-        gf_boolean_t    attr_inited  = _gf_false;</div><div class='del'>-        char            *watchlist = NULL;</div><div class='del'>-        char            *dirtylist = NULL;</div><div class='del'>-        char            *pendinglist = NULL;</div><div class='del'>-        char            *index_base_parent = NULL;</div><div class='del'>-        char            *tmp = NULL;</div><div class='del'>-</div><div class='del'>-	if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        INDEX_MSG_INVALID_GRAPH,</div><div class='del'>-			"'index' not configured with exactly one child");</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!this-&gt;parents) {</div><div class='del'>-		gf_msg (this-&gt;name, GF_LOG_WARNING, EINVAL,</div><div class='del'>-                        INDEX_MSG_INVALID_GRAPH,</div><div class='del'>-			"dangling volume. check volfile ");</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv), gf_index_mt_priv_t);</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;lock);</div><div class='del'>-        if ((ret = pthread_cond_init(&amp;priv-&gt;cond, NULL)) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        INDEX_MSG_INVALID_ARGS,</div><div class='del'>-                        "pthread_cond_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        cond_inited = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_mutex_init(&amp;priv-&gt;mutex, NULL)) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        INDEX_MSG_INVALID_ARGS,</div><div class='del'>-                        "pthread_mutex_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        mutex_inited = _gf_true;</div><div class='del'>-</div><div class='del'>-        if ((ret = pthread_attr_init (&amp;w_attr)) != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, ret,</div><div class='del'>-                        INDEX_MSG_INVALID_ARGS,</div><div class='del'>-                        "pthread_attr_init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        attr_inited = _gf_true;</div><div class='del'>-</div><div class='del'>-        ret = pthread_attr_setstacksize (&amp;w_attr, INDEX_THREAD_STACK_SIZE);</div><div class='del'>-        if (ret == EINVAL) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ret,</div><div class='del'>-                        INDEX_MSG_INVALID_ARGS,</div><div class='del'>-                        "Using default thread stack size");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("index-base", priv-&gt;index_basepath, path, out);</div><div class='del'>-        tmp = gf_strdup(priv-&gt;index_basepath);</div><div class='del'>-        index_base_parent = dirname(tmp);</div><div class='del'>-        if (gf_lstat_dir (index_base_parent, NULL) != 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                        INDEX_MSG_INDEX_DIR_CREATE_FAILED,</div><div class='del'>-                        "Failed to find parent dir (%s) of index basepath %s.",</div><div class='del'>-                        index_base_parent, priv-&gt;index_basepath);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("xattrop64-watchlist", watchlist, str, out);</div><div class='del'>-        ret = index_make_xattrop_watchlist (this, priv, watchlist,</div><div class='del'>-                                            XATTROP);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("xattrop-dirty-watchlist", dirtylist, str, out);</div><div class='del'>-        ret = index_make_xattrop_watchlist (this, priv, dirtylist,</div><div class='del'>-                                            DIRTY);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        GF_OPTION_INIT ("xattrop-pending-watchlist", pendinglist, str, out);</div><div class='del'>-        ret = index_make_xattrop_watchlist (this, priv, pendinglist,</div><div class='del'>-                                            XATTROP);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;dirty_watchlist)</div><div class='del'>-                priv-&gt;complete_watchlist = dict_copy_with_ref (priv-&gt;dirty_watchlist,</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    int i = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int64_t count = -1;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+    pthread_attr_t w_attr;</div><div class='add'>+    gf_boolean_t mutex_inited = _gf_false;</div><div class='add'>+    gf_boolean_t cond_inited = _gf_false;</div><div class='add'>+    gf_boolean_t attr_inited = _gf_false;</div><div class='add'>+    char *watchlist = NULL;</div><div class='add'>+    char *dirtylist = NULL;</div><div class='add'>+    char *pendinglist = NULL;</div><div class='add'>+    char *index_base_parent = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, INDEX_MSG_INVALID_GRAPH,</div><div class='add'>+               "'index' not configured with exactly one child");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, EINVAL, INDEX_MSG_INVALID_GRAPH,</div><div class='add'>+               "dangling volume. check volfile ");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_index_mt_priv_t);</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;lock);</div><div class='add'>+    if ((ret = pthread_cond_init(&amp;priv-&gt;cond, NULL)) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, INDEX_MSG_INVALID_ARGS,</div><div class='add'>+               "pthread_cond_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    cond_inited = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_mutex_init(&amp;priv-&gt;mutex, NULL)) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, INDEX_MSG_INVALID_ARGS,</div><div class='add'>+               "pthread_mutex_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    mutex_inited = _gf_true;</div><div class='add'>+</div><div class='add'>+    if ((ret = pthread_attr_init(&amp;w_attr)) != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, ret, INDEX_MSG_INVALID_ARGS,</div><div class='add'>+               "pthread_attr_init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    attr_inited = _gf_true;</div><div class='add'>+</div><div class='add'>+    ret = pthread_attr_setstacksize(&amp;w_attr, INDEX_THREAD_STACK_SIZE);</div><div class='add'>+    if (ret == EINVAL) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ret, INDEX_MSG_INVALID_ARGS,</div><div class='add'>+               "Using default thread stack size");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("index-base", priv-&gt;index_basepath, path, out);</div><div class='add'>+    tmp = gf_strdup(priv-&gt;index_basepath);</div><div class='add'>+    index_base_parent = dirname(tmp);</div><div class='add'>+    if (gf_lstat_dir(index_base_parent, NULL) != 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, errno,</div><div class='add'>+               INDEX_MSG_INDEX_DIR_CREATE_FAILED,</div><div class='add'>+               "Failed to find parent dir (%s) of index basepath %s.",</div><div class='add'>+               index_base_parent, priv-&gt;index_basepath);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("xattrop64-watchlist", watchlist, str, out);</div><div class='add'>+    ret = index_make_xattrop_watchlist(this, priv, watchlist, XATTROP);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("xattrop-dirty-watchlist", dirtylist, str, out);</div><div class='add'>+    ret = index_make_xattrop_watchlist(this, priv, dirtylist, DIRTY);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    GF_OPTION_INIT("xattrop-pending-watchlist", pendinglist, str, out);</div><div class='add'>+    ret = index_make_xattrop_watchlist(this, priv, pendinglist, XATTROP);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;dirty_watchlist)</div><div class='add'>+        priv-&gt;complete_watchlist = dict_copy_with_ref(priv-&gt;dirty_watchlist,</div><div class='ctx'>                                                       priv-&gt;complete_watchlist);</div><div class='del'>-        if (priv-&gt;pending_watchlist)</div><div class='del'>-                priv-&gt;complete_watchlist = dict_copy_with_ref (priv-&gt;pending_watchlist,</div><div class='add'>+    if (priv-&gt;pending_watchlist)</div><div class='add'>+        priv-&gt;complete_watchlist = dict_copy_with_ref(priv-&gt;pending_watchlist,</div><div class='ctx'>                                                       priv-&gt;complete_watchlist);</div><div class='ctx'> </div><div class='del'>-        gf_uuid_generate (priv-&gt;index);</div><div class='del'>-        for (i = 0; i &lt; XATTROP_TYPE_END; i++)</div><div class='del'>-                gf_uuid_generate (priv-&gt;internal_vgfid[i]);</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;callstubs);</div><div class='add'>+    gf_uuid_generate(priv-&gt;index);</div><div class='add'>+    for (i = 0; i &lt; XATTROP_TYPE_END; i++)</div><div class='add'>+        gf_uuid_generate(priv-&gt;internal_vgfid[i]);</div><div class='ctx'> </div><div class='del'>-        this-&gt;local_pool = mem_pool_new (index_local_t, 64);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;callstubs);</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(index_local_t, 64);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = index_dir_create (this, XATTROP_SUBDIR);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    this-&gt;private = priv;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;dirty_watchlist) {</div><div class='del'>-                ret = index_dir_create (this, DIRTY_SUBDIR);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = index_dir_create(this, XATTROP_SUBDIR);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = index_dir_create (this, ENTRY_CHANGES_SUBDIR);</div><div class='add'>+    if (priv-&gt;dirty_watchlist) {</div><div class='add'>+        ret = index_dir_create(this, DIRTY_SUBDIR);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /*init indices files counts*/</div><div class='del'>-        count = index_fetch_link_count (this, XATTROP);</div><div class='del'>-        index_set_link_count (priv, count, XATTROP);</div><div class='del'>-        priv-&gt;down = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = gf_thread_create (&amp;priv-&gt;thread, &amp;w_attr, index_worker, this,</div><div class='del'>-                                "idxwrker");</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ret,</div><div class='del'>-                        INDEX_MSG_WORKER_THREAD_CREATE_FAILED,</div><div class='del'>-                        "Failed to create worker thread, aborting");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = index_dir_create(this, ENTRY_CHANGES_SUBDIR);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*init indices files counts*/</div><div class='add'>+    count = index_fetch_link_count(this, XATTROP);</div><div class='add'>+    index_set_link_count(priv, count, XATTROP);</div><div class='add'>+    priv-&gt;down = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = gf_thread_create(&amp;priv-&gt;thread, &amp;w_attr, index_worker, this,</div><div class='add'>+                           "idxwrker");</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ret,</div><div class='add'>+               INDEX_MSG_WORKER_THREAD_CREATE_FAILED,</div><div class='add'>+               "Failed to create worker thread, aborting");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE(tmp);</div><div class='del'>-</div><div class='del'>-        if (ret) {</div><div class='del'>-                if (cond_inited)</div><div class='del'>-                        pthread_cond_destroy (&amp;priv-&gt;cond);</div><div class='del'>-                if (mutex_inited)</div><div class='del'>-                        pthread_mutex_destroy (&amp;priv-&gt;mutex);</div><div class='del'>-                if (priv &amp;&amp; priv-&gt;dirty_watchlist)</div><div class='del'>-                        dict_unref (priv-&gt;dirty_watchlist);</div><div class='del'>-                if (priv &amp;&amp; priv-&gt;pending_watchlist)</div><div class='del'>-                        dict_unref (priv-&gt;pending_watchlist);</div><div class='del'>-                if (priv &amp;&amp; priv-&gt;complete_watchlist)</div><div class='del'>-                        dict_unref (priv-&gt;complete_watchlist);</div><div class='del'>-                if (priv)</div><div class='del'>-                        GF_FREE (priv);</div><div class='del'>-                this-&gt;private = NULL;</div><div class='del'>-                mem_pool_destroy (this-&gt;local_pool);</div><div class='del'>-        }</div><div class='add'>+    GF_FREE(tmp);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        if (cond_inited)</div><div class='add'>+            pthread_cond_destroy(&amp;priv-&gt;cond);</div><div class='add'>+        if (mutex_inited)</div><div class='add'>+            pthread_mutex_destroy(&amp;priv-&gt;mutex);</div><div class='add'>+        if (priv &amp;&amp; priv-&gt;dirty_watchlist)</div><div class='add'>+            dict_unref(priv-&gt;dirty_watchlist);</div><div class='add'>+        if (priv &amp;&amp; priv-&gt;pending_watchlist)</div><div class='add'>+            dict_unref(priv-&gt;pending_watchlist);</div><div class='add'>+        if (priv &amp;&amp; priv-&gt;complete_watchlist)</div><div class='add'>+            dict_unref(priv-&gt;complete_watchlist);</div><div class='add'>+        if (priv)</div><div class='add'>+            GF_FREE(priv);</div><div class='add'>+        this-&gt;private = NULL;</div><div class='add'>+        mem_pool_destroy(this-&gt;local_pool);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (attr_inited)</div><div class='del'>-                pthread_attr_destroy (&amp;w_attr);</div><div class='del'>-        return ret;</div><div class='add'>+    if (attr_inited)</div><div class='add'>+        pthread_attr_destroy(&amp;w_attr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        index_priv_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        priv-&gt;down = _gf_true;</div><div class='del'>-        pthread_cond_broadcast (&amp;priv-&gt;cond);</div><div class='del'>-        if (priv-&gt;thread) {</div><div class='del'>-                gf_thread_cleanup_xint (priv-&gt;thread);</div><div class='del'>-                priv-&gt;thread = 0;</div><div class='del'>-        }</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        LOCK_DESTROY (&amp;priv-&gt;lock);</div><div class='del'>-        pthread_cond_destroy (&amp;priv-&gt;cond);</div><div class='del'>-        pthread_mutex_destroy (&amp;priv-&gt;mutex);</div><div class='del'>-        if (priv-&gt;dirty_watchlist)</div><div class='del'>-                dict_unref (priv-&gt;dirty_watchlist);</div><div class='del'>-        if (priv-&gt;pending_watchlist)</div><div class='del'>-                dict_unref (priv-&gt;pending_watchlist);</div><div class='del'>-        if (priv-&gt;complete_watchlist)</div><div class='del'>-                dict_unref (priv-&gt;complete_watchlist);</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>-</div><div class='del'>-        if (this-&gt;local_pool) {</div><div class='del'>-                mem_pool_destroy (this-&gt;local_pool);</div><div class='del'>-                this-&gt;local_pool = NULL;</div><div class='del'>-        }</div><div class='add'>+fini(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    priv-&gt;down = _gf_true;</div><div class='add'>+    pthread_cond_broadcast(&amp;priv-&gt;cond);</div><div class='add'>+    if (priv-&gt;thread) {</div><div class='add'>+        gf_thread_cleanup_xint(priv-&gt;thread);</div><div class='add'>+        priv-&gt;thread = 0;</div><div class='add'>+    }</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    LOCK_DESTROY(&amp;priv-&gt;lock);</div><div class='add'>+    pthread_cond_destroy(&amp;priv-&gt;cond);</div><div class='add'>+    pthread_mutex_destroy(&amp;priv-&gt;mutex);</div><div class='add'>+    if (priv-&gt;dirty_watchlist)</div><div class='add'>+        dict_unref(priv-&gt;dirty_watchlist);</div><div class='add'>+    if (priv-&gt;pending_watchlist)</div><div class='add'>+        dict_unref(priv-&gt;pending_watchlist);</div><div class='add'>+    if (priv-&gt;complete_watchlist)</div><div class='add'>+        dict_unref(priv-&gt;complete_watchlist);</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+</div><div class='add'>+    if (this-&gt;local_pool) {</div><div class='add'>+        mem_pool_destroy(this-&gt;local_pool);</div><div class='add'>+        this-&gt;local_pool = NULL;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-index_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+index_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t tmp_cache = 0;</div><div class='del'>-        if (!inode_ctx_del (inode, this, &amp;tmp_cache))</div><div class='del'>-                GF_FREE ((index_inode_ctx_t*) (long)tmp_cache);</div><div class='add'>+    uint64_t tmp_cache = 0;</div><div class='add'>+    if (!inode_ctx_del(inode, this, &amp;tmp_cache))</div><div class='add'>+        GF_FREE((index_inode_ctx_t *)(long)tmp_cache);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+index_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        index_fd_ctx_t *fctx = NULL;</div><div class='del'>-        uint64_t        ctx = 0;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    index_fd_ctx_t *fctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fctx = (index_fd_ctx_t*) (long) ctx;</div><div class='del'>-        if (fctx-&gt;dir) {</div><div class='del'>-                ret = sys_closedir (fctx-&gt;dir);</div><div class='del'>-                if (ret)</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, errno,</div><div class='del'>-                                INDEX_MSG_FD_OP_FAILED,</div><div class='del'>-                                "closedir error");</div><div class='del'>-        }</div><div class='add'>+    fctx = (index_fd_ctx_t *)(long)ctx;</div><div class='add'>+    if (fctx-&gt;dir) {</div><div class='add'>+        ret = sys_closedir(fctx-&gt;dir);</div><div class='add'>+        if (ret)</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, errno, INDEX_MSG_FD_OP_FAILED,</div><div class='add'>+                   "closedir error");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GF_FREE (fctx);</div><div class='add'>+    GF_FREE(fctx);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-index_release (xlator_t *this, fd_t *fd)</div><div class='add'>+index_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        index_fd_ctx_t *fctx = NULL;</div><div class='del'>-        uint64_t        ctx = 0;</div><div class='del'>-        int             ret = 0;</div><div class='add'>+    index_fd_ctx_t *fctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        fctx = (index_fd_ctx_t*) (long) ctx;</div><div class='del'>-        GF_FREE (fctx);</div><div class='add'>+    fctx = (index_fd_ctx_t *)(long)ctx;</div><div class='add'>+    GF_FREE(fctx);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-notify (xlator_t *this, int event, void *data, ...)</div><div class='add'>+notify(xlator_t *this, int event, void *data, ...)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='del'>-        index_priv_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    index_priv_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return 0;</div><div class='add'>+    if (!this)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                return 0;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        ret = default_notify (this, event, data);</div><div class='del'>-        return ret;</div><div class='add'>+    ret = default_notify(this, event, data);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-	.xattrop     = index_xattrop,</div><div class='del'>-	.fxattrop    = index_fxattrop,</div><div class='del'>-</div><div class='del'>-        //interface functions follow</div><div class='del'>-        .getxattr    = index_getxattr,</div><div class='del'>-        .lookup      = index_lookup,</div><div class='del'>-        .opendir     = index_opendir,</div><div class='del'>-        .readdir     = index_readdir,</div><div class='del'>-        .unlink      = index_unlink,</div><div class='del'>-        .rmdir       = index_rmdir,</div><div class='del'>-        .fstat       = index_fstat,</div><div class='add'>+    .xattrop = index_xattrop,</div><div class='add'>+    .fxattrop = index_fxattrop,</div><div class='add'>+</div><div class='add'>+    // interface functions follow</div><div class='add'>+    .getxattr = index_getxattr,</div><div class='add'>+    .lookup = index_lookup,</div><div class='add'>+    .opendir = index_opendir,</div><div class='add'>+    .readdir = index_readdir,</div><div class='add'>+    .unlink = index_unlink,</div><div class='add'>+    .rmdir = index_rmdir,</div><div class='add'>+    .fstat = index_fstat,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops;</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .forget         = index_forget,</div><div class='del'>-        .release        = index_release,</div><div class='del'>-        .releasedir     = index_releasedir</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.forget = index_forget,</div><div class='add'>+                           .release = index_release,</div><div class='add'>+                           .releasedir = index_releasedir};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"index-base" },</div><div class='del'>-          .type = GF_OPTION_TYPE_PATH,</div><div class='del'>-          .description = "path where the index files need to be stored",</div><div class='del'>-          .default_value = "{{ brick.path }}/.glusterfs/indices"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"xattrop64-watchlist" },</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Comma separated list of xattrs that are watched",</div><div class='del'>-          .default_value = "trusted.ec.dirty"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"xattrop-dirty-watchlist" },</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Comma separated list of xattrs that are watched",</div><div class='del'>-          .default_value = "trusted.afr.dirty"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"xattrop-pending-watchlist" },</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .description = "Comma separated list of xattrs that are watched",</div><div class='del'>-          .default_value = "trusted.afr.{{ volume.name }}"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {NULL} },</div><div class='add'>+    {.key = {"index-base"},</div><div class='add'>+     .type = GF_OPTION_TYPE_PATH,</div><div class='add'>+     .description = "path where the index files need to be stored",</div><div class='add'>+     .default_value = "{{ brick.path }}/.glusterfs/indices"},</div><div class='add'>+    {.key = {"xattrop64-watchlist"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "Comma separated list of xattrs that are watched",</div><div class='add'>+     .default_value = "trusted.ec.dirty"},</div><div class='add'>+    {.key = {"xattrop-dirty-watchlist"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "Comma separated list of xattrs that are watched",</div><div class='add'>+     .default_value = "trusted.afr.dirty"},</div><div class='add'>+    {.key = {"xattrop-pending-watchlist"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .description = "Comma separated list of xattrs that are watched",</div><div class='add'>+     .default_value = "trusted.afr.{{ volume.name }}"},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/leases/src/leases-internal.c b/xlators/features/leases/src/leases-internal.c<br/>index fd0996e3943..f87d93d945b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/leases/src/leases-internal.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/leases/src/leases-internal.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/leases/src/leases-internal.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/leases/src/leases-internal.c</a></div><div class='hunk'>@@ -15,7 +15,6 @@</div><div class='ctx'> </div><div class='ctx'> #include "leases.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Mutex locks used in this xlator and their order of acquisition:</div><div class='ctx'>  * Check lease conflict:</div><div class='ctx'>  *         lease_ctx lock</div><div class='hunk'>@@ -53,22 +52,21 @@</div><div class='ctx'>  * _gf_false - lease lock option disabled</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-is_leases_enabled (xlator_t *this)</div><div class='add'>+is_leases_enabled(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        leases_private_t    *priv       = NULL;</div><div class='del'>-        gf_boolean_t         is_enabled = _gf_false;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    gf_boolean_t is_enabled = _gf_false;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;private) {</div><div class='del'>-                priv = (leases_private_t *)this-&gt;private;</div><div class='del'>-                is_enabled = priv-&gt;leases_enabled;</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;private) {</div><div class='add'>+        priv = (leases_private_t *)this-&gt;private;</div><div class='add'>+        is_enabled = priv-&gt;leases_enabled;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return is_enabled;</div><div class='add'>+    return is_enabled;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Get the recall_leaselk_timeout</div><div class='ctx'>  * Return Value:</div><div class='hunk'>@@ -76,1276 +74,1275 @@ out:</div><div class='ctx'>  * -1 error case</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-get_recall_lease_timeout (xlator_t *this)</div><div class='add'>+get_recall_lease_timeout(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        leases_private_t    *priv       = NULL;</div><div class='del'>-        int32_t              timeout    = -1;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    int32_t timeout = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;private) {</div><div class='del'>-                priv = (leases_private_t *)this-&gt;private;</div><div class='del'>-                timeout = priv-&gt;recall_lease_timeout;</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;private) {</div><div class='add'>+        priv = (leases_private_t *)this-&gt;private;</div><div class='add'>+        timeout = priv-&gt;recall_lease_timeout;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return timeout;</div><div class='add'>+    return timeout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__dump_leases_info (xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='add'>+__dump_leases_info(xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t   *lease_entry     = NULL;</div><div class='del'>-        lease_id_entry_t   *tmp             = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Lease held on this inode, lease_type: %d,"</div><div class='del'>-                      " lease_cnt:%"PRIu64", RD lease:%d, RW lease:%d, "</div><div class='del'>-                      "openfd cnt:%"PRIu64, lease_ctx-&gt;lease_type,</div><div class='del'>-                      lease_ctx-&gt;lease_cnt,</div><div class='del'>-                      lease_ctx-&gt;lease_type_cnt[GF_RD_LEASE],</div><div class='del'>-                      lease_ctx-&gt;lease_type_cnt[GF_RW_LEASE],</div><div class='del'>-                      lease_ctx-&gt;openfd_cnt);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                  &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                  lease_id_list) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Leases held by client: %s, lease "</div><div class='del'>-                              "ID:%s, RD lease:%d, RW lease:%d, lease_type: %d, "</div><div class='del'>-                              "lease_cnt:%"PRIu64, lease_entry-&gt;client_uid,</div><div class='del'>-                              lease_entry-&gt;lease_id,</div><div class='del'>-                              lease_entry-&gt;lease_type_cnt[GF_RD_LEASE],</div><div class='del'>-                              lease_entry-&gt;lease_type_cnt[GF_RW_LEASE],</div><div class='del'>-                              lease_entry-&gt;lease_type, lease_entry-&gt;lease_cnt);</div><div class='del'>-        }</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "Lease held on this inode, lease_type: %d,"</div><div class='add'>+                 " lease_cnt:%" PRIu64</div><div class='add'>+                 ", RD lease:%d, RW lease:%d, "</div><div class='add'>+                 "openfd cnt:%" PRIu64,</div><div class='add'>+                 lease_ctx-&gt;lease_type, lease_ctx-&gt;lease_cnt,</div><div class='add'>+                 lease_ctx-&gt;lease_type_cnt[GF_RD_LEASE],</div><div class='add'>+                 lease_ctx-&gt;lease_type_cnt[GF_RW_LEASE], lease_ctx-&gt;openfd_cnt);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                             lease_id_list)</div><div class='add'>+    {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Leases held by client: %s, lease "</div><div class='add'>+                     "ID:%s, RD lease:%d, RW lease:%d, lease_type: %d, "</div><div class='add'>+                     "lease_cnt:%" PRIu64,</div><div class='add'>+                     lease_entry-&gt;client_uid, lease_entry-&gt;lease_id,</div><div class='add'>+                     lease_entry-&gt;lease_type_cnt[GF_RD_LEASE],</div><div class='add'>+                     lease_entry-&gt;lease_type_cnt[GF_RW_LEASE],</div><div class='add'>+                     lease_entry-&gt;lease_type, lease_entry-&gt;lease_cnt);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__lease_ctx_set (inode_t *inode, xlator_t *this)</div><div class='add'>+__lease_ctx_set(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_ctx_t   *inode_ctx    = NULL;</div><div class='del'>-        int                  ret          = -1;</div><div class='del'>-        uint64_t             ctx          = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if (!ret) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_INVAL_INODE_CTX,</div><div class='del'>-                        "inode_ctx_get failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        inode_ctx = GF_CALLOC (1, sizeof (*inode_ctx),</div><div class='del'>-                               gf_leases_mt_lease_inode_ctx_t);</div><div class='del'>-        GF_CHECK_ALLOC (inode_ctx, ret, out);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_init (&amp;inode_ctx-&gt;lock, NULL);</div><div class='del'>-        INIT_LIST_HEAD (&amp;inode_ctx-&gt;lease_id_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;inode_ctx-&gt;blocked_list);</div><div class='del'>-</div><div class='del'>-        inode_ctx-&gt;lease_cnt = 0;</div><div class='del'>-</div><div class='del'>-        ret = __inode_ctx_set (inode, this, (uint64_t *) inode_ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (inode_ctx);</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, LEASE_MSG_INVAL_INODE_CTX,</div><div class='del'>-                        "failed to set inode ctx (%p)", inode);</div><div class='del'>-        }</div><div class='add'>+    lease_inode_ctx_t *inode_ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (!ret) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_INVAL_INODE_CTX,</div><div class='add'>+               "inode_ctx_get failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    inode_ctx = GF_CALLOC(1, sizeof(*inode_ctx),</div><div class='add'>+                          gf_leases_mt_lease_inode_ctx_t);</div><div class='add'>+    GF_CHECK_ALLOC(inode_ctx, ret, out);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_init(&amp;inode_ctx-&gt;lock, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;inode_ctx-&gt;lease_id_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;inode_ctx-&gt;blocked_list);</div><div class='add'>+</div><div class='add'>+    inode_ctx-&gt;lease_cnt = 0;</div><div class='add'>+</div><div class='add'>+    ret = __inode_ctx_set(inode, this, (uint64_t *)inode_ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(inode_ctx);</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, LEASE_MSG_INVAL_INODE_CTX,</div><div class='add'>+               "failed to set inode ctx (%p)", inode);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static lease_inode_ctx_t *</div><div class='del'>-__lease_ctx_get (inode_t *inode, xlator_t *this)</div><div class='add'>+__lease_ctx_get(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_ctx_t *inode_ctx    = NULL;</div><div class='del'>-        uint64_t           ctx          = 0;</div><div class='del'>-        int                ret          = 0;</div><div class='add'>+    lease_inode_ctx_t *inode_ctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='ctx'> </div><div class='del'>-        ret = __inode_ctx_get (inode, this, &amp;ctx);</div><div class='add'>+    ret = __inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = __lease_ctx_set(inode, this);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;ctx);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                ret = __lease_ctx_set (inode, this);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = __inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_WARNING, 0, LEASE_MSG_INVAL_INODE_CTX,</div><div class='del'>-                                "failed to get inode ctx (%p)", inode);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_WARNING, 0, LEASE_MSG_INVAL_INODE_CTX,</div><div class='add'>+                   "failed to get inode ctx (%p)", inode);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        inode_ctx = (lease_inode_ctx_t *)(long) ctx;</div><div class='add'>+    inode_ctx = (lease_inode_ctx_t *)(long)ctx;</div><div class='ctx'> out:</div><div class='del'>-        return inode_ctx;</div><div class='add'>+    return inode_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> lease_inode_ctx_t *</div><div class='del'>-lease_ctx_get (inode_t *inode, xlator_t *this)</div><div class='add'>+lease_ctx_get(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_ctx_t *inode_ctx = NULL;</div><div class='add'>+    lease_inode_ctx_t *inode_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                inode_ctx = __lease_ctx_get (inode, this);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        inode_ctx = __lease_ctx_get(inode, this);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return inode_ctx;</div><div class='add'>+    return inode_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static lease_id_entry_t *</div><div class='del'>-new_lease_id_entry (call_frame_t *frame, const char *lease_id)</div><div class='add'>+new_lease_id_entry(call_frame_t *frame, const char *lease_id)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_id, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_id, out);</div><div class='ctx'> </div><div class='del'>-        lease_entry = GF_CALLOC (1, sizeof (*lease_entry),</div><div class='del'>-                                  gf_leases_mt_lease_id_entry_t);</div><div class='del'>-        if (!lease_entry) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='del'>-                        "Memory allocation for lease_entry failed");</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;lease_entry-&gt;lease_id_list);</div><div class='del'>-        lease_entry-&gt;lease_type = NONE;</div><div class='del'>-        lease_entry-&gt;lease_cnt = 0;</div><div class='del'>-        lease_entry-&gt;recall_time =</div><div class='del'>-                        get_recall_lease_timeout (frame-&gt;this);</div><div class='del'>-        lease_entry-&gt;client_uid = gf_strdup (frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        if (!lease_entry-&gt;client_uid) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_ERROR, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='del'>-                        "Memory allocation for client_uid failed");</div><div class='del'>-                GF_FREE (lease_entry);</div><div class='del'>-                lease_entry = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        memcpy (lease_entry-&gt;lease_id, lease_id, LEASE_ID_SIZE);</div><div class='add'>+    lease_entry = GF_CALLOC(1, sizeof(*lease_entry),</div><div class='add'>+                            gf_leases_mt_lease_id_entry_t);</div><div class='add'>+    if (!lease_entry) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='add'>+               "Memory allocation for lease_entry failed");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;lease_entry-&gt;lease_id_list);</div><div class='add'>+    lease_entry-&gt;lease_type = NONE;</div><div class='add'>+    lease_entry-&gt;lease_cnt = 0;</div><div class='add'>+    lease_entry-&gt;recall_time = get_recall_lease_timeout(frame-&gt;this);</div><div class='add'>+    lease_entry-&gt;client_uid = gf_strdup(frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    if (!lease_entry-&gt;client_uid) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_ERROR, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='add'>+               "Memory allocation for client_uid failed");</div><div class='add'>+        GF_FREE(lease_entry);</div><div class='add'>+        lease_entry = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    memcpy(lease_entry-&gt;lease_id, lease_id, LEASE_ID_SIZE);</div><div class='ctx'> out:</div><div class='del'>-        return lease_entry;</div><div class='add'>+    return lease_entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__destroy_lease_id_entry (lease_id_entry_t *lease_entry)</div><div class='add'>+__destroy_lease_id_entry(lease_id_entry_t *lease_entry)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_entry, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_entry, out);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;lease_entry-&gt;lease_id_list);</div><div class='del'>-        GF_FREE (lease_entry-&gt;client_uid);</div><div class='del'>-        GF_FREE (lease_entry);</div><div class='add'>+    list_del_init(&amp;lease_entry-&gt;lease_id_list);</div><div class='add'>+    GF_FREE(lease_entry-&gt;client_uid);</div><div class='add'>+    GF_FREE(lease_entry);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static inline gf_boolean_t</div><div class='del'>-__is_same_lease_id (const char *k1, const char *k2)</div><div class='add'>+__is_same_lease_id(const char *k1, const char *k2)</div><div class='ctx'> {</div><div class='del'>-        if (memcmp(k1, k2, strlen(k1)) == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (memcmp(k1, k2, strlen(k1)) == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Checks if there are any leases, other than the leases taken</div><div class='ctx'>  * by the given lease_id</div><div class='ctx'>  */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__another_lease_found (lease_inode_ctx_t *lease_ctx, const char *lease_id)</div><div class='add'>+__another_lease_found(lease_inode_ctx_t *lease_ctx, const char *lease_id)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t   *lease_entry     = NULL;</div><div class='del'>-        lease_id_entry_t   *tmp             = NULL;</div><div class='del'>-        gf_boolean_t        found_lease     = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_id, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                  &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                  lease_id_list) {</div><div class='del'>-</div><div class='del'>-                if (!__is_same_lease_id (lease_id, lease_entry-&gt;lease_id)) {</div><div class='del'>-                        if (lease_entry-&gt;lease_cnt &gt; 0) {</div><div class='del'>-                                found_lease = _gf_true;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='add'>+    gf_boolean_t found_lease = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_id, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                             lease_id_list)</div><div class='add'>+    {</div><div class='add'>+        if (!__is_same_lease_id(lease_id, lease_entry-&gt;lease_id)) {</div><div class='add'>+            if (lease_entry-&gt;lease_cnt &gt; 0) {</div><div class='add'>+                found_lease = _gf_true;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return found_lease;</div><div class='add'>+    return found_lease;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Returns the lease_id_entry for a given lease_id and a given inode.</div><div class='ctx'>  * Return values:</div><div class='ctx'>  * NULL - If no client entry found</div><div class='ctx'>  * lease_id_entry_t* - a pointer to the client entry if found</div><div class='ctx'>  */</div><div class='ctx'> static lease_id_entry_t *</div><div class='del'>-__get_lease_id_entry (lease_inode_ctx_t *lease_ctx, const char *lease_id)</div><div class='add'>+__get_lease_id_entry(lease_inode_ctx_t *lease_ctx, const char *lease_id)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t   *lease_entry    = NULL;</div><div class='del'>-        lease_id_entry_t   *tmp            = NULL;</div><div class='del'>-        lease_id_entry_t   *found          = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_id, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                  &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                  lease_id_list) {</div><div class='del'>-</div><div class='del'>-                if (__is_same_lease_id (lease_id, lease_entry-&gt;lease_id)) {</div><div class='del'>-                        found = lease_entry;</div><div class='del'>-                        gf_msg_debug ("leases", 0, "lease ID entry found "</div><div class='del'>-                                      "Client UID:%s, lease id:%s",</div><div class='del'>-                                      lease_entry-&gt;client_uid,</div><div class='del'>-                                      leaseid_utoa (lease_entry-&gt;lease_id));</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='add'>+    lease_id_entry_t *found = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_id, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                             lease_id_list)</div><div class='add'>+    {</div><div class='add'>+        if (__is_same_lease_id(lease_id, lease_entry-&gt;lease_id)) {</div><div class='add'>+            found = lease_entry;</div><div class='add'>+            gf_msg_debug("leases", 0,</div><div class='add'>+                         "lease ID entry found "</div><div class='add'>+                         "Client UID:%s, lease id:%s",</div><div class='add'>+                         lease_entry-&gt;client_uid,</div><div class='add'>+                         leaseid_utoa(lease_entry-&gt;lease_id));</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Returns the lease_id_entry for a given lease_id and a given inode,</div><div class='ctx'>  * if none found creates one.</div><div class='ctx'>  * Return values:</div><div class='ctx'>  * lease_id_entry_t* - a pointer to the client entry</div><div class='ctx'>  */</div><div class='ctx'> static lease_id_entry_t *</div><div class='del'>-__get_or_new_lease_entry (call_frame_t *frame, const char *lease_id,</div><div class='del'>-                           lease_inode_ctx_t *lease_ctx)</div><div class='add'>+__get_or_new_lease_entry(call_frame_t *frame, const char *lease_id,</div><div class='add'>+                         lease_inode_ctx_t *lease_ctx)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t *lease_entry    = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_id, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-</div><div class='del'>-        lease_entry = __get_lease_id_entry (lease_ctx, lease_id);</div><div class='del'>-        if (!lease_entry) { /* create one */</div><div class='del'>-                lease_entry = new_lease_id_entry (frame, lease_id);</div><div class='del'>-                if (!lease_entry)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                list_add_tail (&amp;lease_entry-&gt;lease_id_list,</div><div class='del'>-                               &amp;lease_ctx-&gt;lease_id_list);</div><div class='del'>-</div><div class='del'>-                gf_msg_debug (frame-&gt;this-&gt;name, 0, "lease ID entry added,"</div><div class='del'>-                              " Client UID:%s, lease id:%s",</div><div class='del'>-                              lease_entry-&gt;client_uid,</div><div class='del'>-                              leaseid_utoa (lease_entry-&gt;lease_id));</div><div class='del'>-        }</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_id, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+</div><div class='add'>+    lease_entry = __get_lease_id_entry(lease_ctx, lease_id);</div><div class='add'>+    if (!lease_entry) { /* create one */</div><div class='add'>+        lease_entry = new_lease_id_entry(frame, lease_id);</div><div class='add'>+        if (!lease_entry)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        list_add_tail(&amp;lease_entry-&gt;lease_id_list, &amp;lease_ctx-&gt;lease_id_list);</div><div class='add'>+</div><div class='add'>+        gf_msg_debug(frame-&gt;this-&gt;name, 0,</div><div class='add'>+                     "lease ID entry added,"</div><div class='add'>+                     " Client UID:%s, lease id:%s",</div><div class='add'>+                     lease_entry-&gt;client_uid,</div><div class='add'>+                     leaseid_utoa(lease_entry-&gt;lease_id));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return lease_entry;</div><div class='add'>+    return lease_entry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static lease_inode_t *</div><div class='del'>-new_lease_inode (inode_t *inode)</div><div class='add'>+new_lease_inode(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_t *l_inode = NULL;</div><div class='add'>+    lease_inode_t *l_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        l_inode = GF_CALLOC (1, sizeof (*l_inode), gf_leases_mt_lease_inode_t);</div><div class='del'>-        if (!l_inode)</div><div class='del'>-                goto out;</div><div class='add'>+    l_inode = GF_CALLOC(1, sizeof(*l_inode), gf_leases_mt_lease_inode_t);</div><div class='add'>+    if (!l_inode)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;l_inode-&gt;list);</div><div class='del'>-        l_inode-&gt;inode = inode_ref (inode);</div><div class='add'>+    INIT_LIST_HEAD(&amp;l_inode-&gt;list);</div><div class='add'>+    l_inode-&gt;inode = inode_ref(inode);</div><div class='ctx'> out:</div><div class='del'>-        return l_inode;</div><div class='add'>+    return l_inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__destroy_lease_inode (lease_inode_t *l_inode)</div><div class='add'>+__destroy_lease_inode(lease_inode_t *l_inode)</div><div class='ctx'> {</div><div class='del'>-        list_del_init (&amp;l_inode-&gt;list);</div><div class='del'>-        inode_unref (l_inode-&gt;inode);</div><div class='del'>-        GF_FREE (l_inode);</div><div class='add'>+    list_del_init(&amp;l_inode-&gt;list);</div><div class='add'>+    inode_unref(l_inode-&gt;inode);</div><div class='add'>+    GF_FREE(l_inode);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static lease_client_t *</div><div class='del'>-new_lease_client (const char *client_uid)</div><div class='add'>+new_lease_client(const char *client_uid)</div><div class='ctx'> {</div><div class='del'>-        lease_client_t  *clnt = NULL;</div><div class='add'>+    lease_client_t *clnt = NULL;</div><div class='ctx'> </div><div class='del'>-        clnt = GF_CALLOC (1, sizeof (*clnt), gf_leases_mt_lease_client_t);</div><div class='del'>-        if (!clnt)</div><div class='del'>-                goto out;</div><div class='add'>+    clnt = GF_CALLOC(1, sizeof(*clnt), gf_leases_mt_lease_client_t);</div><div class='add'>+    if (!clnt)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;clnt-&gt;client_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;clnt-&gt;inode_list);</div><div class='del'>-        clnt-&gt;client_uid = gf_strdup (client_uid);</div><div class='add'>+    INIT_LIST_HEAD(&amp;clnt-&gt;client_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;clnt-&gt;inode_list);</div><div class='add'>+    clnt-&gt;client_uid = gf_strdup(client_uid);</div><div class='ctx'> out:</div><div class='del'>-        return clnt;</div><div class='add'>+    return clnt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__destroy_lease_client (lease_client_t *clnt)</div><div class='add'>+__destroy_lease_client(lease_client_t *clnt)</div><div class='ctx'> {</div><div class='del'>-         list_del_init (&amp;clnt-&gt;inode_list);</div><div class='del'>-         list_del_init (&amp;clnt-&gt;client_list);</div><div class='del'>-         GF_FREE (clnt);</div><div class='add'>+    list_del_init(&amp;clnt-&gt;inode_list);</div><div class='add'>+    list_del_init(&amp;clnt-&gt;client_list);</div><div class='add'>+    GF_FREE(clnt);</div><div class='ctx'> </div><div class='del'>-         return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static lease_client_t *</div><div class='del'>-__get_lease_client (xlator_t *this, leases_private_t *priv,</div><div class='del'>-                    const char *client_uid)</div><div class='add'>+__get_lease_client(xlator_t *this, leases_private_t *priv,</div><div class='add'>+                   const char *client_uid)</div><div class='ctx'> {</div><div class='del'>-        lease_client_t  *clnt  = NULL;</div><div class='del'>-        lease_client_t  *tmp   = NULL;</div><div class='del'>-        lease_client_t  *found = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (clnt, tmp, &amp;priv-&gt;client_list, client_list) {</div><div class='del'>-                if ((strcmp (clnt-&gt;client_uid, client_uid) == 0)) {</div><div class='del'>-                        found = clnt;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Client:%s already found "</div><div class='del'>-                                      "in the cleanup list", client_uid);</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    lease_client_t *clnt = NULL;</div><div class='add'>+    lease_client_t *tmp = NULL;</div><div class='add'>+    lease_client_t *found = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(clnt, tmp, &amp;priv-&gt;client_list, client_list)</div><div class='add'>+    {</div><div class='add'>+        if ((strcmp(clnt-&gt;client_uid, client_uid) == 0)) {</div><div class='add'>+            found = clnt;</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Client:%s already found "</div><div class='add'>+                         "in the cleanup list",</div><div class='add'>+                         client_uid);</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        return found;</div><div class='add'>+    }</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static lease_client_t *</div><div class='del'>-__get_or_new_lease_client (xlator_t *this, leases_private_t *priv,</div><div class='del'>-                           const char *client_uid)</div><div class='add'>+__get_or_new_lease_client(xlator_t *this, leases_private_t *priv,</div><div class='add'>+                          const char *client_uid)</div><div class='ctx'> {</div><div class='del'>-        lease_client_t  *found = NULL;</div><div class='del'>-</div><div class='del'>-        found = __get_lease_client (this, priv, client_uid);</div><div class='del'>-        if (!found) {</div><div class='del'>-                found = new_lease_client (client_uid);</div><div class='del'>-                if (!found)</div><div class='del'>-                        goto out;</div><div class='del'>-                list_add_tail (&amp;found-&gt;client_list, &amp;priv-&gt;client_list);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Adding a new client:%s entry "</div><div class='del'>-                              "to the cleanup list", client_uid);</div><div class='del'>-        }</div><div class='add'>+    lease_client_t *found = NULL;</div><div class='add'>+</div><div class='add'>+    found = __get_lease_client(this, priv, client_uid);</div><div class='add'>+    if (!found) {</div><div class='add'>+        found = new_lease_client(client_uid);</div><div class='add'>+        if (!found)</div><div class='add'>+            goto out;</div><div class='add'>+        list_add_tail(&amp;found-&gt;client_list, &amp;priv-&gt;client_list);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Adding a new client:%s entry "</div><div class='add'>+                     "to the cleanup list",</div><div class='add'>+                     client_uid);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-add_inode_to_client_list (xlator_t *this, inode_t *inode, const char *client_uid)</div><div class='add'>+add_inode_to_client_list(xlator_t *this, inode_t *inode, const char *client_uid)</div><div class='ctx'> {</div><div class='del'>-        int               ret         = 0;</div><div class='del'>-        leases_private_t *priv        = NULL;</div><div class='del'>-        lease_client_t   *clnt        = NULL;</div><div class='del'>-        lease_inode_t    *lease_inode = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                clnt = __get_or_new_lease_client (this, priv, client_uid);</div><div class='del'>-                GF_CHECK_ALLOC (clnt, ret, out);</div><div class='del'>-</div><div class='del'>-                lease_inode = new_lease_inode (inode);</div><div class='del'>-                GF_CHECK_ALLOC (lease_inode, ret, out);</div><div class='del'>-</div><div class='del'>-                list_add_tail (&amp;clnt-&gt;inode_list, &amp;lease_inode-&gt;list);</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                              "Added a new inode:%p to the client(%s) "</div><div class='del'>-                              "cleanup list, gfid(%s)", inode, client_uid,</div><div class='del'>-                              uuid_utoa (inode-&gt;gfid));</div><div class='del'>-        }</div><div class='add'>+    int ret = 0;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    lease_client_t *clnt = NULL;</div><div class='add'>+    lease_inode_t *lease_inode = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        clnt = __get_or_new_lease_client(this, priv, client_uid);</div><div class='add'>+        GF_CHECK_ALLOC(clnt, ret, out);</div><div class='add'>+</div><div class='add'>+        lease_inode = new_lease_inode(inode);</div><div class='add'>+        GF_CHECK_ALLOC(lease_inode, ret, out);</div><div class='add'>+</div><div class='add'>+        list_add_tail(&amp;clnt-&gt;inode_list, &amp;lease_inode-&gt;list);</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Added a new inode:%p to the client(%s) "</div><div class='add'>+                     "cleanup list, gfid(%s)",</div><div class='add'>+                     inode, client_uid, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='del'>-        return ret;</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Add lease entry to the corresponding client entry.</div><div class='ctx'>  * Return values:</div><div class='ctx'>  * 0 Success</div><div class='ctx'>  * -1 Failure</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-__add_lease (call_frame_t *frame, inode_t *inode, lease_inode_ctx_t *lease_ctx,</div><div class='del'>-             const char *client_uid, struct gf_lease *lease)</div><div class='add'>+__add_lease(call_frame_t *frame, inode_t *inode, lease_inode_ctx_t *lease_ctx,</div><div class='add'>+            const char *client_uid, struct gf_lease *lease)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t  *lease_entry  = NULL;</div><div class='del'>-        int                ret          = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", client_uid, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease, out);</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (frame-&gt;this-&gt;name, 0,</div><div class='del'>-                      "Granting lease lock to client %s with lease id %s"</div><div class='del'>-                      " on gfid(%s)", client_uid, leaseid_utoa (lease-&gt;lease_id),</div><div class='del'>-                      uuid_utoa (inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-        lease_entry = __get_or_new_lease_entry (frame, lease-&gt;lease_id, lease_ctx);</div><div class='del'>-        if (!lease_entry) {</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lease_entry-&gt;lease_type_cnt[lease-&gt;lease_type]++;</div><div class='del'>-        lease_entry-&gt;lease_cnt++;</div><div class='del'>-        lease_entry-&gt;lease_type |= lease-&gt;lease_type;</div><div class='del'>-        /* If this is the first lease taken by the client on the file, then</div><div class='del'>-         * add this inode/file to the client disconnect cleanup list</div><div class='del'>-         */</div><div class='del'>-        if (lease_entry-&gt;lease_cnt == 1) {</div><div class='del'>-                add_inode_to_client_list (frame-&gt;this, inode, client_uid);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lease_ctx-&gt;lease_cnt++;</div><div class='del'>-        lease_ctx-&gt;lease_type_cnt[lease-&gt;lease_type]++;</div><div class='del'>-        lease_ctx-&gt;lease_type |= lease-&gt;lease_type;</div><div class='del'>-</div><div class='del'>-        /* Take a ref for the first lock taken on this inode. Corresponding</div><div class='del'>-         * unref when all the leases are unlocked or during DISCONNECT</div><div class='del'>-         * Ref is required because the inode on which lease is acquired should</div><div class='del'>-         * not be deleted when lru cleanup kicks in*/</div><div class='del'>-        if (lease_ctx-&gt;lease_cnt == 1) {</div><div class='del'>-                lease_ctx-&gt;inode = inode_ref (inode);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", client_uid, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease, out);</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(frame-&gt;this-&gt;name, 0,</div><div class='add'>+                 "Granting lease lock to client %s with lease id %s"</div><div class='add'>+                 " on gfid(%s)",</div><div class='add'>+                 client_uid, leaseid_utoa(lease-&gt;lease_id),</div><div class='add'>+                 uuid_utoa(inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    lease_entry = __get_or_new_lease_entry(frame, lease-&gt;lease_id, lease_ctx);</div><div class='add'>+    if (!lease_entry) {</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lease_entry-&gt;lease_type_cnt[lease-&gt;lease_type]++;</div><div class='add'>+    lease_entry-&gt;lease_cnt++;</div><div class='add'>+    lease_entry-&gt;lease_type |= lease-&gt;lease_type;</div><div class='add'>+    /* If this is the first lease taken by the client on the file, then</div><div class='add'>+     * add this inode/file to the client disconnect cleanup list</div><div class='add'>+     */</div><div class='add'>+    if (lease_entry-&gt;lease_cnt == 1) {</div><div class='add'>+        add_inode_to_client_list(frame-&gt;this, inode, client_uid);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lease_ctx-&gt;lease_cnt++;</div><div class='add'>+    lease_ctx-&gt;lease_type_cnt[lease-&gt;lease_type]++;</div><div class='add'>+    lease_ctx-&gt;lease_type |= lease-&gt;lease_type;</div><div class='add'>+</div><div class='add'>+    /* Take a ref for the first lock taken on this inode. Corresponding</div><div class='add'>+     * unref when all the leases are unlocked or during DISCONNECT</div><div class='add'>+     * Ref is required because the inode on which lease is acquired should</div><div class='add'>+     * not be deleted when lru cleanup kicks in*/</div><div class='add'>+    if (lease_ctx-&gt;lease_cnt == 1) {</div><div class='add'>+        lease_ctx-&gt;inode = inode_ref(inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__is_clnt_lease_none (const char *client_uid, lease_inode_ctx_t *lease_ctx)</div><div class='add'>+__is_clnt_lease_none(const char *client_uid, lease_inode_ctx_t *lease_ctx)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t      lease_none  = _gf_true;</div><div class='del'>-        lease_id_entry_t *lease_entry = NULL;</div><div class='del'>-        lease_id_entry_t *tmp         = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                  &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                  lease_id_list) {</div><div class='del'>-                if ((strcmp (client_uid, lease_entry-&gt;client_uid) == 0)</div><div class='del'>-                    &amp;&amp; (lease_entry-&gt;lease_cnt != 0)) {</div><div class='del'>-                        lease_none = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    gf_boolean_t lease_none = _gf_true;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                             lease_id_list)</div><div class='add'>+    {</div><div class='add'>+        if ((strcmp(client_uid, lease_entry-&gt;client_uid) == 0) &amp;&amp;</div><div class='add'>+            (lease_entry-&gt;lease_cnt != 0)) {</div><div class='add'>+            lease_none = _gf_false;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return lease_none;</div><div class='add'>+    return lease_none;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__remove_inode_from_clnt_list (xlator_t *this, lease_client_t *clnt,</div><div class='del'>-                               inode_t *inode)</div><div class='add'>+__remove_inode_from_clnt_list(xlator_t *this, lease_client_t *clnt,</div><div class='add'>+                              inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        int               ret     = -1;</div><div class='del'>-        lease_inode_t    *l_inode = NULL;</div><div class='del'>-        lease_inode_t    *tmp1    = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (l_inode, tmp1,</div><div class='del'>-                                  &amp;clnt-&gt;inode_list,</div><div class='del'>-                                  list) {</div><div class='del'>-                if (l_inode-&gt;inode == inode) {</div><div class='del'>-                        __destroy_lease_inode (l_inode);</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                      "Removed the inode from the client cleanup list");</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    lease_inode_t *l_inode = NULL;</div><div class='add'>+    lease_inode_t *tmp1 = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(l_inode, tmp1, &amp;clnt-&gt;inode_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l_inode-&gt;inode == inode) {</div><div class='add'>+            __destroy_lease_inode(l_inode);</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Removed the inode from the client cleanup list");</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-        /* TODO: Remove the client entry from the cleanup list */</div><div class='add'>+    }</div><div class='add'>+    /* TODO: Remove the client entry from the cleanup list */</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-remove_from_clnt_list (xlator_t *this, const char *client_uid, inode_t *inode)</div><div class='add'>+remove_from_clnt_list(xlator_t *this, const char *client_uid, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        leases_private_t *priv    = NULL;</div><div class='del'>-        int               ret     = -1;</div><div class='del'>-        lease_client_t   *clnt    = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                clnt = __get_lease_client (this, priv, client_uid);</div><div class='del'>-                if (!clnt) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_CLNT_NOTFOUND,</div><div class='del'>-                                "There is no client entry found in the cleanup list");</div><div class='del'>-                        pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                ret = __remove_inode_from_clnt_list (this, clnt, inode);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_INODE_NOTFOUND,</div><div class='del'>-                                "There is no inode entry found in the cleanup list");</div><div class='del'>-                }</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    lease_client_t *clnt = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        clnt = __get_lease_client(this, priv, client_uid);</div><div class='add'>+        if (!clnt) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_CLNT_NOTFOUND,</div><div class='add'>+                   "There is no client entry found in the cleanup list");</div><div class='add'>+            pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='add'>+        ret = __remove_inode_from_clnt_list(this, clnt, inode);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_INODE_NOTFOUND,</div><div class='add'>+                   "There is no inode entry found in the cleanup list");</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Remove lease entry in the corresponding client entry.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-__remove_lease (xlator_t *this, inode_t *inode, lease_inode_ctx_t *lease_ctx,</div><div class='del'>-                const char *client_uid, struct gf_lease *lease)</div><div class='add'>+__remove_lease(xlator_t *this, inode_t *inode, lease_inode_ctx_t *lease_ctx,</div><div class='add'>+               const char *client_uid, struct gf_lease *lease)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t    *lease_entry     = NULL;</div><div class='del'>-        int                  ret             = 0;</div><div class='del'>-        int32_t              lease_type      = 0;</div><div class='del'>-        leases_private_t    *priv            = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease, out);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "Removing lease entry for client: %s, "</div><div class='del'>-                      "lease type:%d, lease id:%s", client_uid, lease-&gt;lease_type,</div><div class='del'>-                      leaseid_utoa (lease-&gt;lease_id));</div><div class='del'>-</div><div class='del'>-        lease_entry = __get_lease_id_entry (lease_ctx, lease-&gt;lease_id);</div><div class='del'>-        if (!lease_entry || !(lease_entry-&gt;lease_type &amp; lease-&gt;lease_type)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, LEASE_MSG_INVAL_UNLK_LEASE,</div><div class='del'>-                        "Got unlock lease request from client:%s, but has no "</div><div class='del'>-                        "corresponding lock", client_uid);</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lease_type = lease-&gt;lease_type;</div><div class='del'>-        lease_entry-&gt;lease_type_cnt[lease_type]--;</div><div class='del'>-        lease_entry-&gt;lease_cnt--;</div><div class='del'>-</div><div class='del'>-        lease_ctx-&gt;lease_type_cnt[lease_type]--;</div><div class='del'>-        lease_ctx-&gt;lease_cnt--;</div><div class='del'>-</div><div class='del'>-        if (lease_entry-&gt;lease_type_cnt[lease_type] == 0)</div><div class='del'>-                lease_entry-&gt;lease_type = lease_entry-&gt;lease_type &amp; (~lease_type);</div><div class='del'>-</div><div class='del'>-        if (lease_ctx-&gt;lease_type_cnt[lease_type] == 0)</div><div class='del'>-                lease_ctx-&gt;lease_type = lease_ctx-&gt;lease_type &amp; (~lease_type);</div><div class='del'>-</div><div class='del'>-        if (lease_entry-&gt;lease_cnt == 0) {</div><div class='del'>-                if (__is_clnt_lease_none (client_uid, lease_ctx)) {</div><div class='del'>-                        gf_msg_trace (this-&gt;name, 0, "Client(%s) has no leases"</div><div class='del'>-                                      " on gfid (%s), hence removing the inode"</div><div class='del'>-                                      " from the client cleanup list",</div><div class='del'>-                                      client_uid, uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        remove_from_clnt_list (this, client_uid, lease_ctx-&gt;inode);</div><div class='del'>-                }</div><div class='del'>-                __destroy_lease_id_entry (lease_entry);</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t lease_type = 0;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease, out);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                 "Removing lease entry for client: %s, "</div><div class='add'>+                 "lease type:%d, lease id:%s",</div><div class='add'>+                 client_uid, lease-&gt;lease_type, leaseid_utoa(lease-&gt;lease_id));</div><div class='add'>+</div><div class='add'>+    lease_entry = __get_lease_id_entry(lease_ctx, lease-&gt;lease_id);</div><div class='add'>+    if (!lease_entry || !(lease_entry-&gt;lease_type &amp; lease-&gt;lease_type)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, LEASE_MSG_INVAL_UNLK_LEASE,</div><div class='add'>+               "Got unlock lease request from client:%s, but has no "</div><div class='add'>+               "corresponding lock",</div><div class='add'>+               client_uid);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lease_type = lease-&gt;lease_type;</div><div class='add'>+    lease_entry-&gt;lease_type_cnt[lease_type]--;</div><div class='add'>+    lease_entry-&gt;lease_cnt--;</div><div class='add'>+</div><div class='add'>+    lease_ctx-&gt;lease_type_cnt[lease_type]--;</div><div class='add'>+    lease_ctx-&gt;lease_cnt--;</div><div class='add'>+</div><div class='add'>+    if (lease_entry-&gt;lease_type_cnt[lease_type] == 0)</div><div class='add'>+        lease_entry-&gt;lease_type = lease_entry-&gt;lease_type &amp; (~lease_type);</div><div class='add'>+</div><div class='add'>+    if (lease_ctx-&gt;lease_type_cnt[lease_type] == 0)</div><div class='add'>+        lease_ctx-&gt;lease_type = lease_ctx-&gt;lease_type &amp; (~lease_type);</div><div class='add'>+</div><div class='add'>+    if (lease_entry-&gt;lease_cnt == 0) {</div><div class='add'>+        if (__is_clnt_lease_none(client_uid, lease_ctx)) {</div><div class='add'>+            gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                         "Client(%s) has no leases"</div><div class='add'>+                         " on gfid (%s), hence removing the inode"</div><div class='add'>+                         " from the client cleanup list",</div><div class='add'>+                         client_uid, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            remove_from_clnt_list(this, client_uid, lease_ctx-&gt;inode);</div><div class='ctx'>         }</div><div class='add'>+        __destroy_lease_id_entry(lease_entry);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (lease_ctx-&gt;lease_cnt == 0 &amp;&amp; lease_ctx-&gt;timer) {</div><div class='del'>-                ret = gf_tw_del_timer (priv-&gt;timer_wheel, lease_ctx-&gt;timer);</div><div class='del'>-                lease_ctx-&gt;recall_in_progress = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if (lease_ctx-&gt;lease_cnt == 0 &amp;&amp; lease_ctx-&gt;timer) {</div><div class='add'>+        ret = gf_tw_del_timer(priv-&gt;timer_wheel, lease_ctx-&gt;timer);</div><div class='add'>+        lease_ctx-&gt;recall_in_progress = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__is_lease_grantable (xlator_t *this, lease_inode_ctx_t *lease_ctx,</div><div class='del'>-                      struct gf_lease *lease, inode_t *inode)</div><div class='add'>+__is_lease_grantable(xlator_t *this, lease_inode_ctx_t *lease_ctx,</div><div class='add'>+                     struct gf_lease *lease, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        fd_count     = 0;</div><div class='del'>-        int32_t         flags        = 0;</div><div class='del'>-        fd_t           *iter_fd      = NULL;</div><div class='del'>-        gf_boolean_t    grant        = _gf_false;</div><div class='del'>-        int             ret          = 0;</div><div class='del'>-        lease_fd_ctx_t *fd_ctx       = NULL;</div><div class='del'>-        uint64_t        ctx          = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-</div><div class='del'>-        if (lease_ctx-&gt;recall_in_progress) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Recall in progress, hence "</div><div class='del'>-                              "failing the lease request");</div><div class='add'>+    uint32_t fd_count = 0;</div><div class='add'>+    int32_t flags = 0;</div><div class='add'>+    fd_t *iter_fd = NULL;</div><div class='add'>+    gf_boolean_t grant = _gf_false;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    lease_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+</div><div class='add'>+    if (lease_ctx-&gt;recall_in_progress) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Recall in progress, hence "</div><div class='add'>+                     "failing the lease request");</div><div class='add'>+        grant = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(iter_fd, &amp;inode-&gt;fd_list, inode_list)</div><div class='add'>+        {</div><div class='add'>+            ret = fd_ctx_get(iter_fd, this, &amp;ctx);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='ctx'>                 grant = _gf_false;</div><div class='add'>+                UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+                gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_INVAL_FD_CTX,</div><div class='add'>+                       "Unable to get fd ctx");</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+            fd_ctx = (lease_fd_ctx_t *)(long)ctx;</div><div class='add'>+</div><div class='add'>+            /* Check for open fd conflict, note that open fds from</div><div class='add'>+             * the same lease id is not checked for conflict, as it is</div><div class='add'>+             * lease id based lease.</div><div class='add'>+             */</div><div class='add'>+            if (fd_ctx-&gt;client_uid != NULL &amp;&amp;</div><div class='add'>+                !__is_same_lease_id(fd_ctx-&gt;lease_id, lease-&gt;lease_id)) {</div><div class='add'>+                fd_count++;</div><div class='add'>+                flags |= iter_fd-&gt;flags;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_for_each_entry (iter_fd, &amp;inode-&gt;fd_list, inode_list) {</div><div class='del'>-                        ret = fd_ctx_get (iter_fd, this, &amp;ctx);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                grant = _gf_false;</div><div class='del'>-                                UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-                                gf_msg (this-&gt;name, GF_LOG_ERROR, 0,</div><div class='del'>-                                        LEASE_MSG_INVAL_FD_CTX,</div><div class='del'>-                                        "Unable to get fd ctx");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        fd_ctx = (lease_fd_ctx_t *)(long) ctx;</div><div class='del'>-</div><div class='del'>-                        /* Check for open fd conflict, note that open fds from</div><div class='del'>-                         * the same lease id is not checked for conflict, as it is</div><div class='del'>-                         * lease id based lease.</div><div class='del'>-                         */</div><div class='del'>-                        if (fd_ctx-&gt;client_uid != NULL</div><div class='del'>-                                        &amp;&amp; !__is_same_lease_id (fd_ctx-&gt;lease_id, lease-&gt;lease_id)) {</div><div class='del'>-                                fd_count++;</div><div class='del'>-                                flags |= iter_fd-&gt;flags;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "open fd count:%d flags:%d",</div><div class='del'>-                      fd_count, flags);</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "open fd count:%d flags:%d", fd_count, flags);</div><div class='ctx'> </div><div class='del'>-        __dump_leases_info (this, lease_ctx);</div><div class='add'>+    __dump_leases_info(this, lease_ctx);</div><div class='ctx'> </div><div class='del'>-        switch (lease-&gt;lease_type) {</div><div class='add'>+    switch (lease-&gt;lease_type) {</div><div class='ctx'>         case GF_RD_LEASE:</div><div class='del'>-                /* check open fd conflict */</div><div class='del'>-                if ((fd_count &gt; 0) &amp;&amp; ((flags &amp; O_WRONLY) || (flags &amp; O_RDWR))) {</div><div class='del'>-                        grant = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* check for conflict with existing leases */</div><div class='del'>-                if (lease_ctx-&gt;lease_type == NONE ||</div><div class='del'>-                    lease_ctx-&gt;lease_type == GF_RD_LEASE ||</div><div class='del'>-                    !(__another_lease_found (lease_ctx, lease-&gt;lease_id)))</div><div class='del'>-                        grant = _gf_true;</div><div class='del'>-                else</div><div class='del'>-                        grant = _gf_false;</div><div class='add'>+            /* check open fd conflict */</div><div class='add'>+            if ((fd_count &gt; 0) &amp;&amp; ((flags &amp; O_WRONLY) || (flags &amp; O_RDWR))) {</div><div class='add'>+                grant = _gf_false;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* check for conflict with existing leases */</div><div class='add'>+            if (lease_ctx-&gt;lease_type == NONE ||</div><div class='add'>+                lease_ctx-&gt;lease_type == GF_RD_LEASE ||</div><div class='add'>+                !(__another_lease_found(lease_ctx, lease-&gt;lease_id)))</div><div class='add'>+                grant = _gf_true;</div><div class='add'>+            else</div><div class='add'>+                grant = _gf_false;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case GF_RW_LEASE:</div><div class='del'>-                /* check open fd conflict; conflict if there are any fds open</div><div class='del'>-                 * other than the client on which the lease is requested. */</div><div class='del'>-                if (fd_count &gt; 0) {</div><div class='del'>-                        grant = _gf_false;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* check existing lease conflict */</div><div class='del'>-                if (lease_ctx-&gt;lease_type == NONE ||</div><div class='del'>-                    !(__another_lease_found (lease_ctx, lease-&gt;lease_id)))</div><div class='del'>-                        grant = _gf_true;</div><div class='del'>-                else</div><div class='del'>-                        grant = _gf_false;</div><div class='add'>+            /* check open fd conflict; conflict if there are any fds open</div><div class='add'>+             * other than the client on which the lease is requested. */</div><div class='add'>+            if (fd_count &gt; 0) {</div><div class='add'>+                grant = _gf_false;</div><div class='ctx'>                 break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            /* check existing lease conflict */</div><div class='add'>+            if (lease_ctx-&gt;lease_type == NONE ||</div><div class='add'>+                !(__another_lease_found(lease_ctx, lease-&gt;lease_id)))</div><div class='add'>+                grant = _gf_true;</div><div class='add'>+            else</div><div class='add'>+                grant = _gf_false;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL, LEASE_MSG_INVAL_LEASE_TYPE,</div><div class='del'>-                        "Invalid lease type specified");</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, LEASE_MSG_INVAL_LEASE_TYPE,</div><div class='add'>+                   "Invalid lease type specified");</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return grant;</div><div class='add'>+    return grant;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-do_blocked_fops (xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='add'>+do_blocked_fops(xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='ctx'> {</div><div class='del'>-        struct list_head   wind_list;</div><div class='del'>-        fop_stub_t        *blk_fop  = NULL;</div><div class='del'>-        fop_stub_t        *tmp      = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;wind_list);</div><div class='add'>+    struct list_head wind_list;</div><div class='add'>+    fop_stub_t *blk_fop = NULL;</div><div class='add'>+    fop_stub_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                list_for_each_entry_safe (blk_fop, tmp,</div><div class='del'>-                                          &amp;lease_ctx-&gt;blocked_list, list) {</div><div class='del'>-                        list_del_init (&amp;blk_fop-&gt;list);</div><div class='del'>-                        list_add_tail (&amp;blk_fop-&gt;list, &amp;wind_list);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "Executing the blocked stubs on gfid(%s)",</div><div class='del'>-                                              uuid_utoa (lease_ctx-&gt;inode-&gt;gfid));</div><div class='del'>-        list_for_each_entry_safe (blk_fop, tmp, &amp;wind_list, list) {</div><div class='del'>-                list_del_init (&amp;blk_fop-&gt;list);</div><div class='del'>-                gf_msg_trace (this-&gt;name, 0, "Executing fop:%d", blk_fop-&gt;stub-&gt;fop);</div><div class='del'>-                call_resume (blk_fop-&gt;stub);</div><div class='del'>-                GF_FREE (blk_fop);</div><div class='del'>-        }</div><div class='add'>+    INIT_LIST_HEAD(&amp;wind_list);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;lease_ctx-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(blk_fop, tmp, &amp;lease_ctx-&gt;blocked_list, list)</div><div class='ctx'>         {</div><div class='del'>-                lease_ctx-&gt;lease_type = NONE;</div><div class='del'>-                inode_unref (lease_ctx-&gt;inode);</div><div class='del'>-                lease_ctx-&gt;inode = NULL;</div><div class='add'>+            list_del_init(&amp;blk_fop-&gt;list);</div><div class='add'>+            list_add_tail(&amp;blk_fop-&gt;list, &amp;wind_list);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "Executing the blocked stubs on gfid(%s)",</div><div class='add'>+                 uuid_utoa(lease_ctx-&gt;inode-&gt;gfid));</div><div class='add'>+    list_for_each_entry_safe(blk_fop, tmp, &amp;wind_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;blk_fop-&gt;list);</div><div class='add'>+        gf_msg_trace(this-&gt;name, 0, "Executing fop:%d", blk_fop-&gt;stub-&gt;fop);</div><div class='add'>+        call_resume(blk_fop-&gt;stub);</div><div class='add'>+        GF_FREE(blk_fop);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        lease_ctx-&gt;lease_type = NONE;</div><div class='add'>+        inode_unref(lease_ctx-&gt;inode);</div><div class='add'>+        lease_ctx-&gt;inode = NULL;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-recall_lease_timer_handler (struct gf_tw_timer_list *timer,</div><div class='del'>-                            void *data, unsigned long calltime)</div><div class='add'>+recall_lease_timer_handler(struct gf_tw_timer_list *timer, void *data,</div><div class='add'>+                           unsigned long calltime)</div><div class='ctx'> {</div><div class='del'>-        inode_t                *inode       = NULL;</div><div class='del'>-        lease_inode_t          *lease_inode = NULL;</div><div class='del'>-        leases_private_t       *priv        = NULL;</div><div class='del'>-        lease_timer_data_t     *timer_data    = NULL;</div><div class='del'>-</div><div class='del'>-        timer_data = data;</div><div class='del'>-</div><div class='del'>-        priv = timer_data-&gt;this-&gt;private;</div><div class='del'>-        inode = timer_data-&gt;inode;</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                lease_inode = new_lease_inode (inode);</div><div class='del'>-                if (!lease_inode) {</div><div class='del'>-                        errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                list_add_tail (&amp;lease_inode-&gt;list, &amp;priv-&gt;recall_list);</div><div class='del'>-                pthread_cond_broadcast (&amp;priv-&gt;cond);</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    lease_inode_t *lease_inode = NULL;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    lease_timer_data_t *timer_data = NULL;</div><div class='add'>+</div><div class='add'>+    timer_data = data;</div><div class='add'>+</div><div class='add'>+    priv = timer_data-&gt;this-&gt;private;</div><div class='add'>+    inode = timer_data-&gt;inode;</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        lease_inode = new_lease_inode(inode);</div><div class='add'>+        if (!lease_inode) {</div><div class='add'>+            errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+        list_add_tail(&amp;lease_inode-&gt;list, &amp;priv-&gt;recall_list);</div><div class='add'>+        pthread_cond_broadcast(&amp;priv-&gt;cond);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (timer);</div><div class='add'>+    GF_FREE(timer);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__recall_lease (xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='add'>+__recall_lease(xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='ctx'> {</div><div class='del'>-        lease_id_entry_t                  *lease_entry   = NULL;</div><div class='del'>-        lease_id_entry_t                  *tmp           = NULL;</div><div class='del'>-        struct gf_upcall                   up_req        = {0,};</div><div class='del'>-        struct gf_upcall_recall_lease      recall_req    = {0,};</div><div class='del'>-        int                                notify_ret    = -1;</div><div class='del'>-        struct gf_tw_timer_list           *timer         = NULL;</div><div class='del'>-        leases_private_t                  *priv          = NULL;</div><div class='del'>-        lease_timer_data_t                *timer_data    = NULL;</div><div class='del'>-</div><div class='del'>-        if (lease_ctx-&gt;recall_in_progress) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Lease recall is already in "</div><div class='del'>-                              "progress, hence not sending another recall");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                  &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                  lease_id_list) {</div><div class='del'>-                gf_uuid_copy (up_req.gfid, lease_ctx-&gt;inode-&gt;gfid);</div><div class='del'>-                up_req.client_uid = lease_entry-&gt;client_uid;</div><div class='del'>-                up_req.event_type = GF_UPCALL_RECALL_LEASE;</div><div class='del'>-                up_req.data = &amp;recall_req;</div><div class='del'>-</div><div class='del'>-                notify_ret = this-&gt;notify (this, GF_EVENT_UPCALL, &amp;up_req);</div><div class='del'>-                if (notify_ret &lt; 0) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_RECALL_FAIL,</div><div class='del'>-                                "Recall notification to client: %s failed",</div><div class='del'>-                                lease_entry-&gt;client_uid);</div><div class='del'>-                        /* Do not return from here, continue registering the timer,</div><div class='del'>-                           this is required mostly o keep replicas in sync*/</div><div class='del'>-                } else {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Recall lease (all)"</div><div class='del'>-                                      "notification sent to client %s",</div><div class='del'>-                                      lease_entry-&gt;client_uid);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                lease_ctx-&gt;recall_in_progress = _gf_true;</div><div class='del'>-                lease_entry-&gt;recall_time = time (NULL);</div><div class='del'>-        }</div><div class='del'>-        timer = GF_CALLOC (1, sizeof (*timer),</div><div class='del'>-                           gf_common_mt_tw_timer_list);</div><div class='del'>-        if (!timer) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        timer_data = GF_MALLOC (sizeof (lease_timer_data_t),</div><div class='del'>-                                gf_leases_mt_timer_data_t);</div><div class='del'>-        if (!timer_data) {</div><div class='del'>-                GF_FREE (timer);</div><div class='del'>-                goto out;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='add'>+    struct gf_upcall up_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct gf_upcall_recall_lease recall_req = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int notify_ret = -1;</div><div class='add'>+    struct gf_tw_timer_list *timer = NULL;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    lease_timer_data_t *timer_data = NULL;</div><div class='add'>+</div><div class='add'>+    if (lease_ctx-&gt;recall_in_progress) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Lease recall is already in "</div><div class='add'>+                     "progress, hence not sending another recall");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                             lease_id_list)</div><div class='add'>+    {</div><div class='add'>+        gf_uuid_copy(up_req.gfid, lease_ctx-&gt;inode-&gt;gfid);</div><div class='add'>+        up_req.client_uid = lease_entry-&gt;client_uid;</div><div class='add'>+        up_req.event_type = GF_UPCALL_RECALL_LEASE;</div><div class='add'>+        up_req.data = &amp;recall_req;</div><div class='add'>+</div><div class='add'>+        notify_ret = this-&gt;notify(this, GF_EVENT_UPCALL, &amp;up_req);</div><div class='add'>+        if (notify_ret &lt; 0) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, LEASE_MSG_RECALL_FAIL,</div><div class='add'>+                   "Recall notification to client: %s failed",</div><div class='add'>+                   lease_entry-&gt;client_uid);</div><div class='add'>+            /* Do not return from here, continue registering the timer,</div><div class='add'>+               this is required mostly o keep replicas in sync*/</div><div class='add'>+        } else {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Recall lease (all)"</div><div class='add'>+                         "notification sent to client %s",</div><div class='add'>+                         lease_entry-&gt;client_uid);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        timer_data-&gt;inode = inode_ref (lease_ctx-&gt;inode);</div><div class='del'>-        timer_data-&gt;this = this;</div><div class='del'>-        timer-&gt;data = timer_data;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;timer-&gt;entry);</div><div class='del'>-        timer-&gt;expires = get_recall_lease_timeout (this);</div><div class='del'>-        timer-&gt;function = recall_lease_timer_handler;</div><div class='del'>-        lease_ctx-&gt;timer = timer;</div><div class='del'>-        gf_tw_add_timer (priv-&gt;timer_wheel, timer);</div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "Registering timer " "%p, after "</div><div class='del'>-                      "sending recall", timer);</div><div class='add'>+        lease_ctx-&gt;recall_in_progress = _gf_true;</div><div class='add'>+        lease_entry-&gt;recall_time = time(NULL);</div><div class='add'>+    }</div><div class='add'>+    timer = GF_CALLOC(1, sizeof(*timer), gf_common_mt_tw_timer_list);</div><div class='add'>+    if (!timer) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    timer_data = GF_MALLOC(sizeof(lease_timer_data_t),</div><div class='add'>+                           gf_leases_mt_timer_data_t);</div><div class='add'>+    if (!timer_data) {</div><div class='add'>+        GF_FREE(timer);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    timer_data-&gt;inode = inode_ref(lease_ctx-&gt;inode);</div><div class='add'>+    timer_data-&gt;this = this;</div><div class='add'>+    timer-&gt;data = timer_data;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;timer-&gt;entry);</div><div class='add'>+    timer-&gt;expires = get_recall_lease_timeout(this);</div><div class='add'>+    timer-&gt;function = recall_lease_timer_handler;</div><div class='add'>+    lease_ctx-&gt;timer = timer;</div><div class='add'>+    gf_tw_add_timer(priv-&gt;timer_wheel, timer);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                 "Registering timer "</div><div class='add'>+                 "%p, after "</div><div class='add'>+                 "sending recall",</div><div class='add'>+                 timer);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* ret = 0; STACK_UNWIND Success</div><div class='ctx'>  * ret = -1; STACK_UNWIND failure</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-process_lease_req (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   inode_t *inode, struct gf_lease *lease)</div><div class='add'>+process_lease_req(call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='add'>+                  struct gf_lease *lease)</div><div class='ctx'> {</div><div class='del'>-        int                 ret             = 0;</div><div class='del'>-        char               *client_uid      = NULL;</div><div class='del'>-        lease_inode_ctx_t  *lease_ctx       = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease, out);</div><div class='del'>-</div><div class='del'>-        client_uid = frame-&gt;root-&gt;client-&gt;client_uid;</div><div class='del'>-</div><div class='del'>-        if (!is_valid_lease_id (lease-&gt;lease_id)) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL,</div><div class='del'>-                        LEASE_MSG_INVAL_LEASE_ID, "Invalid lease id, from"</div><div class='del'>-                        "client:%s", client_uid);</div><div class='del'>-                ret = -EINVAL;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lease_ctx = lease_ctx_get (inode, this);</div><div class='del'>-        if (!lease_ctx) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        LEASE_MSG_NO_MEM, "Unable to create/get inode ctx, "</div><div class='del'>-                        "inode:%p", inode);</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Lease request from client: %s, "</div><div class='del'>-                      "lease type:%d, lease cmd:%d, lease ID:%s, gfid:%s",</div><div class='del'>-                      client_uid, lease-&gt;lease_type, lease-&gt;cmd,</div><div class='del'>-                      leaseid_utoa (lease-&gt;lease_id), uuid_utoa (inode-&gt;gfid));</div><div class='add'>+    int ret = 0;</div><div class='add'>+    char *client_uid = NULL;</div><div class='add'>+    lease_inode_ctx_t *lease_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease, out);</div><div class='add'>+</div><div class='add'>+    client_uid = frame-&gt;root-&gt;client-&gt;client_uid;</div><div class='add'>+</div><div class='add'>+    if (!is_valid_lease_id(lease-&gt;lease_id)) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, LEASE_MSG_INVAL_LEASE_ID,</div><div class='add'>+               "Invalid lease id, from"</div><div class='add'>+               "client:%s",</div><div class='add'>+               client_uid);</div><div class='add'>+        ret = -EINVAL;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lease_ctx = lease_ctx_get(inode, this);</div><div class='add'>+    if (!lease_ctx) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='add'>+               "Unable to create/get inode ctx, "</div><div class='add'>+               "inode:%p",</div><div class='add'>+               inode);</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                 "Lease request from client: %s, "</div><div class='add'>+                 "lease type:%d, lease cmd:%d, lease ID:%s, gfid:%s",</div><div class='add'>+                 client_uid, lease-&gt;lease_type, lease-&gt;cmd,</div><div class='add'>+                 leaseid_utoa(lease-&gt;lease_id), uuid_utoa(inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        switch (lease-&gt;cmd) {</div><div class='add'>+            case GF_GET_LEASE:</div><div class='add'>+                lease-&gt;lease_type = lease_ctx-&gt;lease_type;</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Get lease, existing lease"</div><div class='add'>+                             "type: %d",</div><div class='add'>+                             lease_ctx-&gt;lease_type);</div><div class='add'>+                /*TODO:Should it consider lease id or client_uid?*/</div><div class='add'>+                break;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                switch (lease-&gt;cmd) {</div><div class='del'>-                case GF_GET_LEASE:</div><div class='del'>-                        lease-&gt;lease_type = lease_ctx-&gt;lease_type;</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Get lease, existing lease"</div><div class='del'>-                                      "type: %d", lease_ctx-&gt;lease_type);</div><div class='del'>-                        /*TODO:Should it consider lease id or client_uid?*/</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                case GF_SET_LEASE:</div><div class='del'>-                        if (__is_lease_grantable (this, lease_ctx, lease, inode)) {</div><div class='del'>-                                __add_lease (frame, inode, lease_ctx,</div><div class='del'>-                                             client_uid, lease);</div><div class='del'>-                                ret = 0;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                              "Not granting the conflicting lease"</div><div class='del'>-                                              " request from %s on gfid(%s)",</div><div class='del'>-                                              client_uid, uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                                __recall_lease (this, lease_ctx);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                case GF_UNLK_LEASE:</div><div class='del'>-                        ret = __remove_lease (this, inode, lease_ctx,</div><div class='del'>-                                              client_uid, lease);</div><div class='del'>-                        if ((ret == 0) &amp;&amp; (lease_ctx-&gt;lease_cnt == 0)) {</div><div class='del'>-                                pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-                                goto unblock;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        break;</div><div class='add'>+            case GF_SET_LEASE:</div><div class='add'>+                if (__is_lease_grantable(this, lease_ctx, lease, inode)) {</div><div class='add'>+                    __add_lease(frame, inode, lease_ctx, client_uid, lease);</div><div class='add'>+                    ret = 0;</div><div class='add'>+                } else {</div><div class='add'>+                    gf_msg_debug(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                                 "Not granting the conflicting lease"</div><div class='add'>+                                 " request from %s on gfid(%s)",</div><div class='add'>+                                 client_uid, uuid_utoa(inode-&gt;gfid));</div><div class='add'>+                    __recall_lease(this, lease_ctx);</div><div class='add'>+                    ret = -1;</div><div class='add'>+                }</div><div class='add'>+                break;</div><div class='add'>+            case GF_UNLK_LEASE:</div><div class='add'>+                ret = __remove_lease(this, inode, lease_ctx, client_uid, lease);</div><div class='add'>+                if ((ret == 0) &amp;&amp; (lease_ctx-&gt;lease_cnt == 0)) {</div><div class='add'>+                    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+                    goto unblock;</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                ret = -EINVAL;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unblock:</div><div class='del'>-        do_blocked_fops (this, lease_ctx);</div><div class='add'>+    do_blocked_fops(this, lease_ctx);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* ret = 1 conflict</div><div class='ctx'>  * ret = 0 no conflict</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-__check_lease_conflict (call_frame_t *frame, lease_inode_ctx_t *lease_ctx,</div><div class='del'>-                        const char *lease_id, gf_boolean_t is_write)</div><div class='add'>+__check_lease_conflict(call_frame_t *frame, lease_inode_ctx_t *lease_ctx,</div><div class='add'>+                       const char *lease_id, gf_boolean_t is_write)</div><div class='ctx'> {</div><div class='del'>-        gf_lease_types_t   lease_type      = {0,};</div><div class='del'>-        gf_boolean_t       conflicts       = _gf_false;</div><div class='del'>-        lease_id_entry_t  *lease_entry     = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", lease_id, out);</div><div class='del'>-</div><div class='del'>-        lease_type = lease_ctx-&gt;lease_type;</div><div class='del'>-</div><div class='del'>-        /* If the fop is rename or unlink conflict the lease even if its</div><div class='del'>-         * from the same client??</div><div class='del'>-         */</div><div class='del'>-        if ((frame-&gt;root-&gt;op == GF_FOP_RENAME) ||</div><div class='del'>-            (frame-&gt;root-&gt;op == GF_FOP_UNLINK)) {</div><div class='del'>-                conflicts = _gf_true;</div><div class='del'>-                goto recall;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* TODO: If lease_id is not sent, fall back to client uid conflict check?</div><div class='del'>-         * Or set conflicts = true if lease_id is 0 when there is an existing</div><div class='del'>-         * lease */</div><div class='del'>-        switch (lease_type) {</div><div class='add'>+    gf_lease_types_t lease_type = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t conflicts = _gf_false;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", lease_id, out);</div><div class='add'>+</div><div class='add'>+    lease_type = lease_ctx-&gt;lease_type;</div><div class='add'>+</div><div class='add'>+    /* If the fop is rename or unlink conflict the lease even if its</div><div class='add'>+     * from the same client??</div><div class='add'>+     */</div><div class='add'>+    if ((frame-&gt;root-&gt;op == GF_FOP_RENAME) ||</div><div class='add'>+        (frame-&gt;root-&gt;op == GF_FOP_UNLINK)) {</div><div class='add'>+        conflicts = _gf_true;</div><div class='add'>+        goto recall;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* TODO: If lease_id is not sent, fall back to client uid conflict check?</div><div class='add'>+     * Or set conflicts = true if lease_id is 0 when there is an existing</div><div class='add'>+     * lease */</div><div class='add'>+    switch (lease_type) {</div><div class='ctx'>         case (GF_RW_LEASE | GF_RD_LEASE):</div><div class='ctx'>         case GF_RW_LEASE:</div><div class='del'>-                lease_entry = __get_lease_id_entry (lease_ctx, lease_id);</div><div class='del'>-                if (lease_entry &amp;&amp; (lease_entry-&gt;lease_type &amp; GF_RW_LEASE))</div><div class='del'>-                        conflicts = _gf_false;</div><div class='del'>-                else</div><div class='del'>-                        conflicts = _gf_true;</div><div class='del'>-                break;</div><div class='add'>+            lease_entry = __get_lease_id_entry(lease_ctx, lease_id);</div><div class='add'>+            if (lease_entry &amp;&amp; (lease_entry-&gt;lease_type &amp; GF_RW_LEASE))</div><div class='add'>+                conflicts = _gf_false;</div><div class='add'>+            else</div><div class='add'>+                conflicts = _gf_true;</div><div class='add'>+            break;</div><div class='ctx'>         case GF_RD_LEASE:</div><div class='del'>-                if (is_write &amp;&amp; __another_lease_found(lease_ctx, lease_id))</div><div class='del'>-                        conflicts = _gf_true;</div><div class='del'>-                else</div><div class='del'>-                        conflicts = _gf_false;</div><div class='del'>-                break;</div><div class='add'>+            if (is_write &amp;&amp; __another_lease_found(lease_ctx, lease_id))</div><div class='add'>+                conflicts = _gf_true;</div><div class='add'>+            else</div><div class='add'>+                conflicts = _gf_false;</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> recall:</div><div class='del'>-        /* If there is a conflict found and recall is not already sent to all</div><div class='del'>-         * the clients, then send recall to each of the client holding lease.</div><div class='del'>-         */</div><div class='del'>-        if (conflicts)</div><div class='del'>-                __recall_lease (frame-&gt;this, lease_ctx);</div><div class='add'>+    /* If there is a conflict found and recall is not already sent to all</div><div class='add'>+     * the clients, then send recall to each of the client holding lease.</div><div class='add'>+     */</div><div class='add'>+    if (conflicts)</div><div class='add'>+        __recall_lease(frame-&gt;this, lease_ctx);</div><div class='ctx'> out:</div><div class='del'>-        return conflicts;</div><div class='add'>+    return conflicts;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Return values:</div><div class='ctx'>  * -1 : error, unwind the fop</div><div class='ctx'>  * WIND_FOP: No conflict, wind the fop</div><div class='ctx'>  * BLOCK_FOP: Found a conflicting lease, block the fop</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-check_lease_conflict (call_frame_t *frame, inode_t *inode,</div><div class='del'>-                      const char *lease_id, uint32_t fop_flags)</div><div class='add'>+check_lease_conflict(call_frame_t *frame, inode_t *inode, const char *lease_id,</div><div class='add'>+                     uint32_t fop_flags)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_ctx_t       *lease_ctx  = NULL;</div><div class='del'>-        gf_boolean_t       is_blocking_fop  = _gf_false;</div><div class='del'>-        gf_boolean_t       is_write_fop     = _gf_false;</div><div class='del'>-        gf_boolean_t       conflicts        = _gf_false;</div><div class='del'>-        int                ret              = WIND_FOP;</div><div class='del'>-</div><div class='del'>-        lease_ctx = lease_ctx_get (inode, frame-&gt;this);</div><div class='del'>-        if (!lease_ctx) {</div><div class='del'>-                gf_msg (frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        LEASE_MSG_NO_MEM,</div><div class='del'>-                        "Unable to create/get inode ctx");</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    lease_inode_ctx_t *lease_ctx = NULL;</div><div class='add'>+    gf_boolean_t is_blocking_fop = _gf_false;</div><div class='add'>+    gf_boolean_t is_write_fop = _gf_false;</div><div class='add'>+    gf_boolean_t conflicts = _gf_false;</div><div class='add'>+    int ret = WIND_FOP;</div><div class='add'>+</div><div class='add'>+    lease_ctx = lease_ctx_get(inode, frame-&gt;this);</div><div class='add'>+    if (!lease_ctx) {</div><div class='add'>+        gf_msg(frame-&gt;this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='add'>+               "Unable to create/get inode ctx");</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    is_blocking_fop = ((fop_flags &amp; BLOCKING_FOP) != 0);</div><div class='add'>+    is_write_fop = ((fop_flags &amp; DATA_MODIFY_FOP) != 0);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (lease_ctx-&gt;lease_type == NONE) {</div><div class='add'>+            gf_msg_debug(frame-&gt;this-&gt;name, 0,</div><div class='add'>+                         "No leases found continuing with the"</div><div class='add'>+                         " fop:%s",</div><div class='add'>+                         gf_fop_list[frame-&gt;root-&gt;op]);</div><div class='add'>+            ret = WIND_FOP;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        is_blocking_fop = ((fop_flags &amp; BLOCKING_FOP) != 0);</div><div class='del'>-        is_write_fop = ((fop_flags &amp; DATA_MODIFY_FOP) != 0);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (lease_ctx-&gt;lease_type == NONE) {</div><div class='del'>-                        gf_msg_debug (frame-&gt;this-&gt;name, 0,</div><div class='del'>-                                      "No leases found continuing with the"</div><div class='del'>-                                      " fop:%s", gf_fop_list[frame-&gt;root-&gt;op]);</div><div class='del'>-                        ret = WIND_FOP;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                conflicts = __check_lease_conflict (frame, lease_ctx,</div><div class='del'>-                                lease_id, is_write_fop);</div><div class='del'>-                if (conflicts) {</div><div class='del'>-                        if (is_blocking_fop) {</div><div class='del'>-                                gf_msg_debug (frame-&gt;this-&gt;name, 0, "Fop: %s "</div><div class='del'>-                                              "conflicting existing "</div><div class='del'>-                                              "lease: %d, blocking the"</div><div class='del'>-                                              "fop", gf_fop_list[frame-&gt;root-&gt;op],</div><div class='del'>-                                              lease_ctx-&gt;lease_type);</div><div class='del'>-                                ret = BLOCK_FOP;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg_debug (frame-&gt;this-&gt;name, 0, "Fop: %s "</div><div class='del'>-                                              "conflicting existing "</div><div class='del'>-                                              "lease: %d, sending "</div><div class='del'>-                                              "EAGAIN",</div><div class='del'>-                                              gf_fop_list[frame-&gt;root-&gt;op],</div><div class='del'>-                                              lease_ctx-&gt;lease_type);</div><div class='del'>-                                errno = EAGAIN;</div><div class='del'>-                                ret = -1;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        conflicts = __check_lease_conflict(frame, lease_ctx, lease_id,</div><div class='add'>+                                           is_write_fop);</div><div class='add'>+        if (conflicts) {</div><div class='add'>+            if (is_blocking_fop) {</div><div class='add'>+                gf_msg_debug(frame-&gt;this-&gt;name, 0,</div><div class='add'>+                             "Fop: %s "</div><div class='add'>+                             "conflicting existing "</div><div class='add'>+                             "lease: %d, blocking the"</div><div class='add'>+                             "fop",</div><div class='add'>+                             gf_fop_list[frame-&gt;root-&gt;op],</div><div class='add'>+                             lease_ctx-&gt;lease_type);</div><div class='add'>+                ret = BLOCK_FOP;</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg_debug(frame-&gt;this-&gt;name, 0,</div><div class='add'>+                             "Fop: %s "</div><div class='add'>+                             "conflicting existing "</div><div class='add'>+                             "lease: %d, sending "</div><div class='add'>+                             "EAGAIN",</div><div class='add'>+                             gf_fop_list[frame-&gt;root-&gt;op],</div><div class='add'>+                             lease_ctx-&gt;lease_type);</div><div class='add'>+                errno = EAGAIN;</div><div class='add'>+                ret = -1;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-remove_clnt_leases (const char *client_uid, inode_t *inode, xlator_t *this)</div><div class='add'>+remove_clnt_leases(const char *client_uid, inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_ctx_t  *lease_ctx      = NULL;</div><div class='del'>-        lease_id_entry_t   *lease_entry    = NULL;</div><div class='del'>-        lease_id_entry_t   *tmp            = NULL;</div><div class='del'>-        int                 ret            = 0;</div><div class='del'>-        int                 i              = 0;</div><div class='del'>-</div><div class='del'>-        lease_ctx = lease_ctx_get (inode, this);</div><div class='del'>-        if (!lease_ctx) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        LEASE_MSG_INVAL_INODE_CTX,</div><div class='del'>-                        "Unable to create/get inode ctx");</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;lease_ctx-&gt;lock);</div><div class='add'>+    lease_inode_ctx_t *lease_ctx = NULL;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    lease_ctx = lease_ctx_get(inode, this);</div><div class='add'>+    if (!lease_ctx) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_INVAL_INODE_CTX,</div><div class='add'>+               "Unable to create/get inode ctx");</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                                 lease_id_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                          &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                          lease_id_list) {</div><div class='del'>-                        if (strcmp (client_uid, lease_entry-&gt;client_uid) == 0) {</div><div class='del'>-                                for (i = 0; i &lt; GF_LEASE_MAX_TYPE; i++) {</div><div class='del'>-                                        lease_ctx-&gt;lease_type_cnt[i] -= lease_entry-&gt;lease_type_cnt[i];</div><div class='del'>-                                }</div><div class='del'>-                                lease_ctx-&gt;lease_cnt -= lease_entry-&gt;lease_cnt;</div><div class='del'>-                                __destroy_lease_id_entry (lease_entry);</div><div class='del'>-                                if (lease_ctx-&gt;lease_cnt == 0) {</div><div class='del'>-                                        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-                                        goto unblock;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            if (strcmp(client_uid, lease_entry-&gt;client_uid) == 0) {</div><div class='add'>+                for (i = 0; i &lt; GF_LEASE_MAX_TYPE; i++) {</div><div class='add'>+                    lease_ctx-&gt;lease_type_cnt[i] -= lease_entry</div><div class='add'>+                                                        -&gt;lease_type_cnt[i];</div><div class='add'>+                }</div><div class='add'>+                lease_ctx-&gt;lease_cnt -= lease_entry-&gt;lease_cnt;</div><div class='add'>+                __destroy_lease_id_entry(lease_entry);</div><div class='add'>+                if (lease_ctx-&gt;lease_cnt == 0) {</div><div class='add'>+                    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+                    goto unblock;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> </div><div class='ctx'> unblock:</div><div class='del'>-        do_blocked_fops (this, lease_ctx);</div><div class='del'>-        return ret;</div><div class='add'>+    do_blocked_fops(this, lease_ctx);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-cleanup_client_leases (xlator_t *this, const char *client_uid)</div><div class='add'>+cleanup_client_leases(xlator_t *this, const char *client_uid)</div><div class='ctx'> {</div><div class='del'>-        lease_client_t    *clnt         = NULL;</div><div class='del'>-        lease_client_t    *tmp          = NULL;</div><div class='del'>-        struct list_head   cleanup_list = {0, };</div><div class='del'>-        lease_inode_t     *l_inode      = NULL;</div><div class='del'>-        lease_inode_t     *tmp1         = NULL;</div><div class='del'>-        leases_private_t  *priv         = NULL;</div><div class='del'>-        int                ret          = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;cleanup_list);</div><div class='del'>-        pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='add'>+    lease_client_t *clnt = NULL;</div><div class='add'>+    lease_client_t *tmp = NULL;</div><div class='add'>+    struct list_head cleanup_list = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    lease_inode_t *l_inode = NULL;</div><div class='add'>+    lease_inode_t *tmp1 = NULL;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;cleanup_list);</div><div class='add'>+    pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(clnt, tmp, &amp;priv-&gt;client_list, client_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (clnt, tmp, &amp;priv-&gt;client_list, client_list) {</div><div class='del'>-                        if ((strcmp (clnt-&gt;client_uid, client_uid) == 0)) {</div><div class='del'>-                                list_for_each_entry_safe (l_inode, tmp1,</div><div class='del'>-                                                          &amp;clnt-&gt;inode_list, list) {</div><div class='del'>-                                        list_del_init (&amp;l_inode-&gt;list);</div><div class='del'>-                                        list_add_tail (&amp;l_inode-&gt;list, &amp;cleanup_list);</div><div class='del'>-                                }</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                        __destroy_lease_client (clnt);</div><div class='add'>+            if ((strcmp(clnt-&gt;client_uid, client_uid) == 0)) {</div><div class='add'>+                list_for_each_entry_safe(l_inode, tmp1, &amp;clnt-&gt;inode_list, list)</div><div class='add'>+                {</div><div class='add'>+                    list_del_init(&amp;l_inode-&gt;list);</div><div class='add'>+                    list_add_tail(&amp;l_inode-&gt;list, &amp;cleanup_list);</div><div class='ctx'>                 }</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+            __destroy_lease_client(clnt);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        l_inode = tmp1 = NULL;</div><div class='del'>-        list_for_each_entry_safe (l_inode, tmp1, &amp;cleanup_list, list) {</div><div class='del'>-                remove_clnt_leases (client_uid, l_inode-&gt;inode, this);</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    l_inode = tmp1 = NULL;</div><div class='add'>+    list_for_each_entry_safe(l_inode, tmp1, &amp;cleanup_list, list)</div><div class='add'>+    {</div><div class='add'>+        remove_clnt_leases(client_uid, l_inode-&gt;inode, this);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__remove_all_leases (xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='add'>+__remove_all_leases(xlator_t *this, lease_inode_ctx_t *lease_ctx)</div><div class='ctx'> {</div><div class='del'>-        int                 i              = 0;</div><div class='del'>-        lease_id_entry_t   *lease_entry    = NULL;</div><div class='del'>-        lease_id_entry_t   *tmp            = NULL;</div><div class='del'>-</div><div class='del'>-        __dump_leases_info (this, lease_ctx);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lease_entry, tmp,</div><div class='del'>-                                  &amp;lease_ctx-&gt;lease_id_list,</div><div class='del'>-                                  lease_id_list) {</div><div class='del'>-                lease_entry-&gt;lease_cnt = 0;</div><div class='del'>-                remove_from_clnt_list (this, lease_entry-&gt;client_uid, lease_ctx-&gt;inode);</div><div class='del'>-                __destroy_lease_id_entry (lease_entry);</div><div class='del'>-        }</div><div class='del'>-        INIT_LIST_HEAD (&amp;lease_ctx-&gt;lease_id_list);</div><div class='del'>-        for (i = 0; i &lt;= GF_LEASE_MAX_TYPE; i++)</div><div class='del'>-                lease_ctx-&gt;lease_type_cnt[i] = 0;</div><div class='del'>-        lease_ctx-&gt;lease_type = 0;</div><div class='del'>-        lease_ctx-&gt;lease_cnt = 0;</div><div class='del'>-        lease_ctx-&gt;recall_in_progress = _gf_false;</div><div class='del'>-        inode_unref (lease_ctx-&gt;inode);</div><div class='del'>-        lease_ctx-&gt;timer = NULL;</div><div class='del'>-</div><div class='del'>-        /* TODO:</div><div class='del'>-         * - Mark the corresponding fd bad. Could be done on client side</div><div class='del'>-         * as a result of recall</div><div class='del'>-         * - Free the lease_ctx</div><div class='del'>-         */</div><div class='del'>-        return;</div><div class='del'>-}</div><div class='add'>+    int i = 0;</div><div class='add'>+    lease_id_entry_t *lease_entry = NULL;</div><div class='add'>+    lease_id_entry_t *tmp = NULL;</div><div class='ctx'> </div><div class='add'>+    __dump_leases_info(this, lease_ctx);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lease_entry, tmp, &amp;lease_ctx-&gt;lease_id_list,</div><div class='add'>+                             lease_id_list)</div><div class='add'>+    {</div><div class='add'>+        lease_entry-&gt;lease_cnt = 0;</div><div class='add'>+        remove_from_clnt_list(this, lease_entry-&gt;client_uid, lease_ctx-&gt;inode);</div><div class='add'>+        __destroy_lease_id_entry(lease_entry);</div><div class='add'>+    }</div><div class='add'>+    INIT_LIST_HEAD(&amp;lease_ctx-&gt;lease_id_list);</div><div class='add'>+    for (i = 0; i &lt;= GF_LEASE_MAX_TYPE; i++)</div><div class='add'>+        lease_ctx-&gt;lease_type_cnt[i] = 0;</div><div class='add'>+    lease_ctx-&gt;lease_type = 0;</div><div class='add'>+    lease_ctx-&gt;lease_cnt = 0;</div><div class='add'>+    lease_ctx-&gt;recall_in_progress = _gf_false;</div><div class='add'>+    inode_unref(lease_ctx-&gt;inode);</div><div class='add'>+    lease_ctx-&gt;timer = NULL;</div><div class='add'>+</div><div class='add'>+    /* TODO:</div><div class='add'>+     * - Mark the corresponding fd bad. Could be done on client side</div><div class='add'>+     * as a result of recall</div><div class='add'>+     * - Free the lease_ctx</div><div class='add'>+     */</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-remove_all_leases (xlator_t *this, inode_t *inode)</div><div class='add'>+remove_all_leases(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        lease_inode_ctx_t  *lease_ctx       = NULL;</div><div class='del'>-        int                 ret             = 0;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", inode, out);</div><div class='del'>-</div><div class='del'>-        lease_ctx = lease_ctx_get (inode, this);</div><div class='del'>-        if (!lease_ctx) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM,</div><div class='del'>-                        LEASE_MSG_INVAL_INODE_CTX,</div><div class='del'>-                        "Unable to create/get inode ctx");</div><div class='del'>-                ret = -1;</div><div class='del'>-                errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                __remove_all_leases (this, lease_ctx);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;lease_ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        do_blocked_fops (this, lease_ctx);</div><div class='add'>+    lease_inode_ctx_t *lease_ctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", inode, out);</div><div class='add'>+</div><div class='add'>+    lease_ctx = lease_ctx_get(inode, this);</div><div class='add'>+    if (!lease_ctx) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_INVAL_INODE_CTX,</div><div class='add'>+               "Unable to create/get inode ctx");</div><div class='add'>+        ret = -1;</div><div class='add'>+        errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        __remove_all_leases(this, lease_ctx);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;lease_ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    do_blocked_fops(this, lease_ctx);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void *</div><div class='del'>-expired_recall_cleanup (void *data)</div><div class='add'>+expired_recall_cleanup(void *data)</div><div class='ctx'> {</div><div class='del'>-        struct timespec      sleep_till      = {0, };</div><div class='del'>-        struct list_head     recall_cleanup_list;</div><div class='del'>-        lease_inode_t       *recall_entry    = NULL;</div><div class='del'>-        lease_inode_t       *tmp             = NULL;</div><div class='del'>-        leases_private_t    *priv            = NULL;</div><div class='del'>-        xlator_t            *this            = NULL;</div><div class='add'>+    struct timespec sleep_till = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct list_head recall_cleanup_list;</div><div class='add'>+    lease_inode_t *recall_entry = NULL;</div><div class='add'>+    lease_inode_t *tmp = NULL;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("leases", data, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("leases", data, out);</div><div class='ctx'> </div><div class='del'>-        this = data;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    this = data;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        gf_msg_debug (this-&gt;name, 0, "Started the expired_recall_cleanup thread");</div><div class='add'>+    gf_msg_debug(this-&gt;name, 0, "Started the expired_recall_cleanup thread");</div><div class='ctx'> </div><div class='del'>-        while (1) {</div><div class='del'>-                pthread_mutex_lock (&amp;priv-&gt;mutex);</div><div class='add'>+    while (1) {</div><div class='add'>+        pthread_mutex_lock(&amp;priv-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            if (priv-&gt;fini) {</div><div class='add'>+                pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            INIT_LIST_HEAD(&amp;recall_cleanup_list);</div><div class='add'>+            if (list_empty(&amp;priv-&gt;recall_list)) {</div><div class='add'>+                sleep_till.tv_sec = time(NULL) + 600;</div><div class='add'>+                pthread_cond_timedwait(&amp;priv-&gt;cond, &amp;priv-&gt;mutex, &amp;sleep_till);</div><div class='add'>+            }</div><div class='add'>+            if (!list_empty(&amp;priv-&gt;recall_list)) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0, "Found expired recalls");</div><div class='add'>+                list_for_each_entry_safe(recall_entry, tmp, &amp;priv-&gt;recall_list,</div><div class='add'>+                                         list)</div><div class='ctx'>                 {</div><div class='del'>-                        if (priv-&gt;fini) {</div><div class='del'>-                                pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        INIT_LIST_HEAD (&amp;recall_cleanup_list);</div><div class='del'>-                        if (list_empty (&amp;priv-&gt;recall_list)) {</div><div class='del'>-                                sleep_till.tv_sec = time (NULL) + 600;</div><div class='del'>-                                pthread_cond_timedwait (&amp;priv-&gt;cond, &amp;priv-&gt;mutex,</div><div class='del'>-                                                        &amp;sleep_till);</div><div class='del'>-                        }</div><div class='del'>-                        if (!list_empty (&amp;priv-&gt;recall_list)) {</div><div class='del'>-                                gf_msg_debug (this-&gt;name, 0, "Found expired recalls");</div><div class='del'>-                                list_for_each_entry_safe (recall_entry, tmp,</div><div class='del'>-                                                          &amp;priv-&gt;recall_list, list) {</div><div class='del'>-                                        list_del_init (&amp;recall_entry-&gt;list);</div><div class='del'>-                                        list_add_tail (&amp;recall_entry-&gt;list, &amp;recall_cleanup_list);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;priv-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                recall_entry = tmp = NULL;</div><div class='del'>-                list_for_each_entry_safe (recall_entry, tmp, &amp;recall_cleanup_list, list) {</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0, "Recall lease was sent on"</div><div class='del'>-                                      " inode:%p, recall timer has expired"</div><div class='del'>-                                      " and clients haven't unlocked the lease"</div><div class='del'>-                                      " hence cleaning up leases on the inode",</div><div class='del'>-                                      recall_entry-&gt;inode);</div><div class='del'>-                        remove_all_leases (this, recall_entry-&gt;inode);</div><div class='del'>-                        list_del_init (&amp;recall_entry-&gt;list);</div><div class='add'>+                    list_del_init(&amp;recall_entry-&gt;list);</div><div class='add'>+                    list_add_tail(&amp;recall_entry-&gt;list, &amp;recall_cleanup_list);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+        pthread_mutex_unlock(&amp;priv-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        recall_entry = tmp = NULL;</div><div class='add'>+        list_for_each_entry_safe(recall_entry, tmp, &amp;recall_cleanup_list, list)</div><div class='add'>+        {</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                         "Recall lease was sent on"</div><div class='add'>+                         " inode:%p, recall timer has expired"</div><div class='add'>+                         " and clients haven't unlocked the lease"</div><div class='add'>+                         " hence cleaning up leases on the inode",</div><div class='add'>+                         recall_entry-&gt;inode);</div><div class='add'>+            remove_all_leases(this, recall_entry-&gt;inode);</div><div class='add'>+            list_del_init(&amp;recall_entry-&gt;list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/leases/src/leases.c b/xlators/features/leases/src/leases.c<br/>index 0e1a089ad59..be0f48fd2a2 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/leases/src/leases.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/leases/src/leases.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/leases/src/leases.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/leases/src/leases.c</a></div><div class='hunk'>@@ -16,1176 +16,1122 @@</div><div class='ctx'> #include "leases.h"</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+leases_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, fd, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-leases_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-             fd_t *fd, dict_t *xdata)</div><div class='add'>+leases_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+            fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        int32_t          op_errno        = EINVAL;</div><div class='del'>-        int              ret             = 0;</div><div class='del'>-        lease_fd_ctx_t  *fd_ctx          = NULL;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-</div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='del'>-</div><div class='del'>-        fd_ctx = GF_CALLOC (1, sizeof (*fd_ctx), gf_leases_mt_fd_ctx_t);</div><div class='del'>-        if (!fd_ctx) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd_ctx-&gt;client_uid = gf_strdup (frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        if (!fd_ctx-&gt;client_uid) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, flags);</div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        if (lease_id != NULL)</div><div class='del'>-                memcpy (fd_ctx-&gt;lease_id, lease_id, LEASE_ID_SIZE);</div><div class='del'>-        else</div><div class='del'>-                memset (fd_ctx-&gt;lease_id, 0, LEASE_ID_SIZE);</div><div class='del'>-</div><div class='del'>-        ret = fd_ctx_set (fd, this, (uint64_t)fd_ctx);</div><div class='del'>-        if (ret) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    lease_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='add'>+</div><div class='add'>+    fd_ctx = GF_CALLOC(1, sizeof(*fd_ctx), gf_leases_mt_fd_ctx_t);</div><div class='add'>+    if (!fd_ctx) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd_ctx-&gt;client_uid = gf_strdup(frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    if (!fd_ctx-&gt;client_uid) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    if (lease_id != NULL)</div><div class='add'>+        memcpy(fd_ctx-&gt;lease_id, lease_id, LEASE_ID_SIZE);</div><div class='add'>+    else</div><div class='add'>+        memset(fd_ctx-&gt;lease_id, 0, LEASE_ID_SIZE);</div><div class='add'>+</div><div class='add'>+    ret = fd_ctx_set(fd, this, (uint64_t)fd_ctx);</div><div class='add'>+    if (ret) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, open, frame, this,</div><div class='del'>-                         loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, open, frame, this, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_open_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-                    loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (fd_ctx) {</div><div class='del'>-                GF_FREE (fd_ctx-&gt;client_uid);</div><div class='del'>-                GF_FREE (fd_ctx);</div><div class='del'>-        }</div><div class='add'>+    if (fd_ctx) {</div><div class='add'>+        GF_FREE(fd_ctx-&gt;client_uid);</div><div class='add'>+        GF_FREE(fd_ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, -1, op_errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, -1, op_errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+leases_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno,</div><div class='del'>-                             prebuf, postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-leases_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-               struct iovec *vector, int count, off_t off, uint32_t flags,</div><div class='del'>-               struct iobref *iobref, dict_t *xdata)</div><div class='add'>+leases_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+              struct iovec *vector, int count, off_t off, uint32_t flags,</div><div class='add'>+              struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, writev, frame, this, fd, vector, count,</div><div class='del'>-                         off, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, writev, frame, this, fd, vector, count, off,</div><div class='add'>+                    flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_writev_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, vector, count, off, flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, off, flags,</div><div class='add'>+               iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, -1, errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-leases_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int op_ret, int op_errno,</div><div class='del'>-                  struct iovec *vector, int count, struct iatt *stbuf,</div><div class='del'>-                  struct iobref *iobref, dict_t *xdata)</div><div class='add'>+leases_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                 int op_errno, struct iovec *vector, int count,</div><div class='add'>+                 struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno, vector,</div><div class='del'>-                             count, stbuf, iobref, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                        iobref, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, size_t size, off_t offset,</div><div class='del'>-              uint32_t flags, dict_t *xdata)</div><div class='add'>+leases_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+             off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, readv, frame, this,</div><div class='del'>-                         fd, size, offset, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, readv, frame, this, fd, size, offset, flags,</div><div class='add'>+                    xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_readv_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readv,</div><div class='del'>-                    fd, size, offset, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (readv, frame, -1, errno, NULL, 0,</div><div class='del'>-                             NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readv, frame, -1, errno, NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct gf_flock *lock,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+leases_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct gf_flock *lock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (lk, frame, op_ret, op_errno, lock, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(lk, frame, op_ret, op_errno, lock, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_lk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+leases_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+          struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t        fop_flags        = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS_LK (cmd, flock-&gt;l_type, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS_LK(cmd, flock-&gt;l_type, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, lk, frame, this,</div><div class='del'>-                         fd, cmd, flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, lk, frame, this, fd, cmd, flock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_lk_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lk,</div><div class='del'>-                    fd, cmd, flock, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_lk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lk, fd, cmd, flock, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (lk, frame, -1, errno, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lk, frame, -1, errno, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_lease (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             loc_t *loc, struct gf_lease *lease, dict_t *xdata)</div><div class='add'>+leases_lease(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+             struct gf_lease *lease, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         op_errno         = 0;</div><div class='del'>-        int             ret              = 0;</div><div class='del'>-        struct gf_lease nullease         = {0, };</div><div class='del'>-        int32_t         op_ret           = 0;</div><div class='del'>-</div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='del'>-</div><div class='del'>-        ret = process_lease_req (frame, this, loc-&gt;inode, lease);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_errno = -ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-        }</div><div class='del'>-        goto unwind;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    struct gf_lease nullease = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='add'>+</div><div class='add'>+    ret = process_lease_req(frame, this, loc-&gt;inode, lease);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_errno = -ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+    }</div><div class='add'>+    goto unwind;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_msg (this-&gt;name, GF_LOG_ERROR, EINVAL, LEASE_MSG_NOT_ENABLED,</div><div class='del'>-                "\"features/leases\" translator is not enabled. "</div><div class='del'>-                "You need to enable it for proper functioning of your "</div><div class='del'>-                "application");</div><div class='del'>-        op_errno = ENOSYS;</div><div class='del'>-        op_ret = -1;</div><div class='add'>+    gf_msg(this-&gt;name, GF_LOG_ERROR, EINVAL, LEASE_MSG_NOT_ENABLED,</div><div class='add'>+           "\"features/leases\" translator is not enabled. "</div><div class='add'>+           "You need to enable it for proper functioning of your "</div><div class='add'>+           "application");</div><div class='add'>+    op_errno = ENOSYS;</div><div class='add'>+    op_ret = -1;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (lease, frame, op_ret, op_errno,</div><div class='del'>-                             (op_errno == ENOSYS) ? &amp;nullease : lease, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(lease, frame, op_ret, op_errno,</div><div class='add'>+                        (op_errno == ENOSYS) ? &amp;nullease : lease, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, struct iatt *prebuf,</div><div class='del'>-                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+leases_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno,</div><div class='del'>-                             prebuf, postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+leases_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, 0);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, 0);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, loc-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, loc-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (loc-&gt;inode, truncate, frame, this,</div><div class='del'>-                         loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(loc-&gt;inode, truncate, frame, this, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_truncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;truncate,</div><div class='del'>-                    loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, -1, errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int op_ret, int op_errno, struct iatt *statpre,</div><div class='del'>-                    struct iatt *statpost, dict_t *xdata)</div><div class='add'>+leases_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int op_ret, int op_errno, struct iatt *statpre,</div><div class='add'>+                   struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (setattr, frame, op_ret, op_errno,</div><div class='del'>-                             statpre, statpost, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setattr, frame, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+leases_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, 0);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, 0);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, loc-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, loc-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (loc-&gt;inode, setattr, frame, this,</div><div class='del'>-                         loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(loc-&gt;inode, setattr, frame, this, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_setattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;setattr,</div><div class='del'>-                    loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (setattr, frame, -1, errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(setattr, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='del'>-                   struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                   struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+leases_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *stbuf,</div><div class='add'>+                  struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                  struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (rename, frame, op_ret, op_errno,</div><div class='del'>-                             stbuf, preoldparent, postoldparent,</div><div class='del'>-                             prenewparent, postnewparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(rename, frame, op_ret, op_errno, stbuf, preoldparent,</div><div class='add'>+                        postoldparent, prenewparent, postnewparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+leases_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        /* should the lease be also checked for newloc */</div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, 0);</div><div class='add'>+    /* should the lease be also checked for newloc */</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, 0);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, oldloc-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, oldloc-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (oldloc-&gt;inode, rename, frame, this,</div><div class='del'>-                         oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(oldloc-&gt;inode, rename, frame, this, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_rename_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;rename,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (rename, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(rename, frame, -1, errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+leases_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+leases_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, 0);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, 0);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, loc-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, loc-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (loc-&gt;inode, unlink, frame, this,</div><div class='del'>-                         loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(loc-&gt;inode, unlink, frame, this, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_unlink_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;unlink,</div><div class='del'>-                    loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, -1, errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='del'>-                 struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+leases_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, op_ret, op_errno,</div><div class='del'>-                             inode, stbuf, preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, op_ret, op_errno, inode, stbuf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='del'>-             loc_t *newloc, dict_t *xdata)</div><div class='add'>+leases_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, 0);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, 0);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, oldloc-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, oldloc-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (oldloc-&gt;inode, link, frame, this,</div><div class='del'>-                         oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(oldloc-&gt;inode, link, frame, this, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_link_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;link,</div><div class='del'>-                    oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, -1, errno, NULL, NULL, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int op_ret, int op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-                   struct iatt *stbuf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+leases_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                  int op_errno, fd_t *fd, inode_t *inode, struct iatt *stbuf,</div><div class='add'>+                  struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd,</div><div class='del'>-                             inode, stbuf, preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, stbuf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *loc, int32_t flags, mode_t mode,</div><div class='del'>-               mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+leases_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+              mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, create, frame, this,</div><div class='del'>-                         loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, create, frame, this, loc, flags, mode, umask, fd,</div><div class='add'>+                    xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_create_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, -1, errno, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, -1, errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                  struct iatt *postbuf,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+leases_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                 struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (fsync, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsync, frame, op_ret, op_errno, prebuf, postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              int32_t flags, dict_t *xdata)</div><div class='add'>+leases_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, fsync, frame, this,</div><div class='del'>-                         fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, fsync, frame, this, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_fsync_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (fsync, frame, -1, errno, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsync, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf,</div><div class='del'>-                      dict_t *xdata)</div><div class='add'>+leases_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_ftruncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                  fd_t *fd, off_t offset, dict_t *xdata)</div><div class='add'>+leases_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, 0); /* TODO:fd-&gt;flags?*/</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, 0); /* TODO:fd-&gt;flags?*/</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, ftruncate, frame, this,</div><div class='del'>-                         fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, ftruncate, frame, this, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_ftruncate_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                    fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                     struct iatt *statpost, dict_t *xdata)</div><div class='add'>+leases_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                    struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (fsetattr, frame, op_ret, op_errno,</div><div class='del'>-                             statpre, statpost, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetattr, frame, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 struct iatt  *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+leases_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, fsetattr, frame, this,</div><div class='del'>-                         fd, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, fsetattr, frame, this, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_fsetattr_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fsetattr,</div><div class='del'>-                    fd, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetattr, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetattr, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_fallocate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='del'>-                      struct iatt *post, dict_t *xdata)</div><div class='add'>+leases_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='add'>+                     struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (fallocate, frame, op_ret, op_errno, pre,</div><div class='del'>-                             post, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fallocate, frame, op_ret, op_errno, pre, post, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                  int32_t mode, off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+leases_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='add'>+                 off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, fallocate, frame, this,</div><div class='del'>-                         fd, mode, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, fallocate, frame, this, fd, mode, offset, len,</div><div class='add'>+                    xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_fallocate_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;fallocate,</div><div class='del'>-                    fd, mode, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_fallocate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd, mode, offset, len,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (fallocate, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fallocate, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_discard_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='del'>-                    struct iatt *post, dict_t *xdata)</div><div class='add'>+leases_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='add'>+                   struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (discard, frame, op_ret, op_errno, pre,</div><div class='del'>-                             post, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, pre, post, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_discard (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+leases_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+               size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, discard, frame, this,</div><div class='del'>-                         fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, discard, frame, this, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_discard_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;discard,</div><div class='del'>-                    fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_discard_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (discard, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(discard, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-leases_zerofill_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='del'>-                     struct iatt *post, dict_t *xdata)</div><div class='add'>+leases_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='add'>+                    struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (zerofill, frame, op_ret, op_errno, pre,</div><div class='del'>-                             post, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, pre, post, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-leases_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 off_t offset, off_t len, dict_t *xdata)</div><div class='add'>+leases_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char            *lease_id        = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, zerofill, frame, this,</div><div class='del'>-                         fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, zerofill, frame, this, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_WIND (frame, leases_zerofill_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;zerofill,</div><div class='del'>-                    fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, leases_zerofill_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (zerofill, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(zerofill, frame, -1, errno, NULL, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-leases_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+leases_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (flush, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(flush, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-leases_flush (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, dict_t *xdata)</div><div class='add'>+leases_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        uint32_t         fop_flags       = 0;</div><div class='del'>-        char             *lease_id       = NULL;</div><div class='del'>-        int              ret             = 0;</div><div class='del'>-        lease_fd_ctx_t   *fd_ctx         = NULL;</div><div class='del'>-        uint64_t         ctx             = 0;</div><div class='add'>+    uint32_t fop_flags = 0;</div><div class='add'>+    char *lease_id = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    lease_fd_ctx_t *fd_ctx = NULL;</div><div class='add'>+    uint64_t ctx = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        GET_LEASE_ID (xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        GET_FLAGS (frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='add'>+    GET_LEASE_ID(xdata, lease_id, frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    GET_FLAGS(frame-&gt;root-&gt;op, fd-&gt;flags);</div><div class='ctx'> </div><div class='del'>-        ret = check_lease_conflict (frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-        else if (ret == BLOCK_FOP)</div><div class='del'>-                goto block;</div><div class='del'>-        else if (ret == WIND_FOP)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = check_lease_conflict(frame, fd-&gt;inode, lease_id, fop_flags);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+    else if (ret == BLOCK_FOP)</div><div class='add'>+        goto block;</div><div class='add'>+    else if (ret == WIND_FOP)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> block:</div><div class='del'>-        LEASE_BLOCK_FOP (fd-&gt;inode, flush, frame, this,</div><div class='del'>-                         fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    LEASE_BLOCK_FOP(fd-&gt;inode, flush, frame, this, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /* *</div><div class='del'>-         * currently release is not called after the close fop from the</div><div class='del'>-         * application. Hence lease fd ctx is reset on here.</div><div class='del'>-         * This is actually not the right way, since flush can be called</div><div class='del'>-         * not only from the close op.</div><div class='del'>-         * TODO :</div><div class='del'>-         *     - Either identify the flush is called from close call on fd from</div><div class='del'>-         *     from the application.</div><div class='del'>-         *                      OR</div><div class='del'>-         *     - Find why release is not called post the last close call</div><div class='del'>-         */</div><div class='del'>-        ret = fd_ctx_get (fd, this, &amp;ctx);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                fd_ctx = (lease_fd_ctx_t *)(long)ctx;</div><div class='del'>-                if (fd_ctx-&gt;client_uid) {</div><div class='del'>-                        GF_FREE (fd_ctx-&gt;client_uid);</div><div class='del'>-                        fd_ctx-&gt;client_uid = NULL;</div><div class='del'>-                }</div><div class='del'>-                memset (fd_ctx-&gt;lease_id, 0, LEASE_ID_SIZE);</div><div class='add'>+    /* *</div><div class='add'>+     * currently release is not called after the close fop from the</div><div class='add'>+     * application. Hence lease fd ctx is reset on here.</div><div class='add'>+     * This is actually not the right way, since flush can be called</div><div class='add'>+     * not only from the close op.</div><div class='add'>+     * TODO :</div><div class='add'>+     *     - Either identify the flush is called from close call on fd from</div><div class='add'>+     *     from the application.</div><div class='add'>+     *                      OR</div><div class='add'>+     *     - Find why release is not called post the last close call</div><div class='add'>+     */</div><div class='add'>+    ret = fd_ctx_get(fd, this, &amp;ctx);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        fd_ctx = (lease_fd_ctx_t *)(long)ctx;</div><div class='add'>+        if (fd_ctx-&gt;client_uid) {</div><div class='add'>+            GF_FREE(fd_ctx-&gt;client_uid);</div><div class='add'>+            fd_ctx-&gt;client_uid = NULL;</div><div class='ctx'>         }</div><div class='del'>-        STACK_WIND (frame, leases_flush_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+        memset(fd_ctx-&gt;lease_id, 0, LEASE_ID_SIZE);</div><div class='add'>+    }</div><div class='add'>+    STACK_WIND(frame, leases_flush_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, -1, errno, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, -1, errno, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_leases_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='del'>-                        "mem account init failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_leases_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='add'>+               "mem account init failed");</div><div class='ctx'>         return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-leases_init_priv (xlator_t *this)</div><div class='add'>+leases_init_priv(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int               ret  = 0;</div><div class='del'>-        leases_private_t *priv = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='add'>+    if (!priv-&gt;timer_wheel) {</div><div class='add'>+        priv-&gt;timer_wheel = glusterfs_ctx_tw_get(this-&gt;ctx);</div><div class='ctx'>         if (!priv-&gt;timer_wheel) {</div><div class='del'>-                priv-&gt;timer_wheel = glusterfs_ctx_tw_get (this-&gt;ctx);</div><div class='del'>-                if (!priv-&gt;timer_wheel) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;inited_recall_thr) {</div><div class='del'>-                ret = gf_thread_create (&amp;priv-&gt;recall_thr, NULL,</div><div class='del'>-                                        expired_recall_cleanup, this,</div><div class='del'>-                                        "leasercl");</div><div class='del'>-                if (!ret)</div><div class='del'>-                        priv-&gt;inited_recall_thr = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;inited_recall_thr) {</div><div class='add'>+        ret = gf_thread_create(&amp;priv-&gt;recall_thr, NULL, expired_recall_cleanup,</div><div class='add'>+                               this, "leasercl");</div><div class='add'>+        if (!ret)</div><div class='add'>+            priv-&gt;inited_recall_thr = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        leases_private_t *priv                   = NULL;</div><div class='del'>-        int               ret                    = -1;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='ctx'> </div><div class='del'>-        /* TODO: In case of reconfigure, if its enabling the leases</div><div class='del'>-         * its not an issue, but if its disabling the leases, there</div><div class='del'>-         * is more to it, like recall all the existing leases, wait</div><div class='del'>-         * for unlock of all the leases etc., hence not supporting the</div><div class='del'>-         * reconfigure for now.</div><div class='add'>+    /* TODO: In case of reconfigure, if its enabling the leases</div><div class='add'>+     * its not an issue, but if its disabling the leases, there</div><div class='add'>+     * is more to it, like recall all the existing leases, wait</div><div class='add'>+     * for unlock of all the leases etc., hence not supporting the</div><div class='add'>+     * reconfigure for now.</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("leases", priv-&gt;leases_enabled,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF ("leases", priv-&gt;leases_enabled,</div><div class='add'>+                      options, bool, out);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;leases_enabled) {</div><div class='del'>-                ret = leases_init_priv (this);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-        */</div><div class='add'>+    if (priv-&gt;leases_enabled) {</div><div class='add'>+            ret = leases_init_priv (this);</div><div class='add'>+            if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+    }</div><div class='add'>+    */</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("lease-lock-recall-timeout",</div><div class='del'>-                          priv-&gt;recall_lease_timeout,</div><div class='del'>-                          options, int32, out);</div><div class='add'>+    GF_OPTION_RECONF("lease-lock-recall-timeout", priv-&gt;recall_lease_timeout,</div><div class='add'>+                     options, int32, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int                       ret        = -1;</div><div class='del'>-        leases_private_t         *priv       = NULL;</div><div class='del'>-</div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv),</div><div class='del'>-                          gf_leases_mt_private_t);</div><div class='del'>-        if (!priv) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='del'>-                        "Leases init failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int ret = -1;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("leases", priv-&gt;leases_enabled,</div><div class='del'>-                        bool, out);</div><div class='del'>-        GF_OPTION_INIT ("lease-lock-recall-timeout",</div><div class='del'>-                        priv-&gt;recall_lease_timeout, int32, out);</div><div class='del'>-        pthread_mutex_init (&amp;priv-&gt;mutex, NULL);</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;client_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;priv-&gt;recall_list);</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_leases_mt_private_t);</div><div class='add'>+    if (!priv) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_WARNING, ENOMEM, LEASE_MSG_NO_MEM,</div><div class='add'>+               "Leases init failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='add'>+    GF_OPTION_INIT("leases", priv-&gt;leases_enabled, bool, out);</div><div class='add'>+    GF_OPTION_INIT("lease-lock-recall-timeout", priv-&gt;recall_lease_timeout,</div><div class='add'>+                   int32, out);</div><div class='add'>+    pthread_mutex_init(&amp;priv-&gt;mutex, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;client_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;priv-&gt;recall_list);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;leases_enabled) {</div><div class='del'>-                ret = leases_init_priv (this);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    this-&gt;private = priv;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    if (priv-&gt;leases_enabled) {</div><div class='add'>+        ret = leases_init_priv(this);</div><div class='add'>+        if (ret)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-                this-&gt;private = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+        this-&gt;private = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        leases_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv) {</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-</div><div class='del'>-        priv-&gt;fini = _gf_true;</div><div class='del'>-        pthread_cond_broadcast (&amp;priv-&gt;cond);</div><div class='del'>-        if (priv-&gt;recall_thr) {</div><div class='del'>-                gf_thread_cleanup_xint (priv-&gt;recall_thr);</div><div class='del'>-                priv-&gt;recall_thr = 0;</div><div class='del'>-                priv-&gt;inited_recall_thr = _gf_false;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        GF_FREE (priv);</div><div class='del'>-        if (this-&gt;ctx-&gt;tw) {</div><div class='del'>-                glusterfs_ctx_tw_put (this-&gt;ctx);</div><div class='del'>-                this-&gt;ctx-&gt;tw = NULL;</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    leases_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv) {</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+</div><div class='add'>+    priv-&gt;fini = _gf_true;</div><div class='add'>+    pthread_cond_broadcast(&amp;priv-&gt;cond);</div><div class='add'>+    if (priv-&gt;recall_thr) {</div><div class='add'>+        gf_thread_cleanup_xint(priv-&gt;recall_thr);</div><div class='add'>+        priv-&gt;recall_thr = 0;</div><div class='add'>+        priv-&gt;inited_recall_thr = _gf_false;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+    if (this-&gt;ctx-&gt;tw) {</div><div class='add'>+        glusterfs_ctx_tw_put(this-&gt;ctx);</div><div class='add'>+        this-&gt;ctx-&gt;tw = NULL;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-leases_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+leases_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        /* TODO:leases_cleanup_inode_ctx (this, inode); */</div><div class='del'>-        return 0;</div><div class='add'>+    /* TODO:leases_cleanup_inode_ctx (this, inode); */</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-leases_release (xlator_t *this, fd_t *fd)</div><div class='add'>+leases_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int         ret          = -1;</div><div class='del'>-        uint64_t    tmp          = 0;</div><div class='del'>-        lease_fd_ctx_t *fd_ctx   = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t tmp = 0;</div><div class='add'>+    lease_fd_ctx_t *fd_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                "Releasing all leases with fd %p", fd);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_TRACE, "Releasing all leases with fd %p", fd);</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;tmp);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Could not get fdctx");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;tmp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Could not get fdctx");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd_ctx = (lease_fd_ctx_t *)(long)tmp;</div><div class='del'>-        if (fd_ctx)</div><div class='del'>-                GF_FREE (fd_ctx);</div><div class='add'>+    fd_ctx = (lease_fd_ctx_t *)(long)tmp;</div><div class='add'>+    if (fd_ctx)</div><div class='add'>+        GF_FREE(fd_ctx);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-leases_clnt_disconnect_cbk (xlator_t *this, client_t *client)</div><div class='add'>+leases_clnt_disconnect_cbk(xlator_t *this, client_t *client)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        EXIT_IF_LEASES_OFF (this, out);</div><div class='add'>+    EXIT_IF_LEASES_OFF(this, out);</div><div class='ctx'> </div><div class='del'>-        ret = cleanup_client_leases (this, client-&gt;client_uid);</div><div class='add'>+    ret = cleanup_client_leases(this, client-&gt;client_uid);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        /* Metadata modifying fops */</div><div class='del'>-        .fsetattr    = leases_fsetattr,</div><div class='del'>-        .setattr     = leases_setattr,</div><div class='del'>-</div><div class='del'>-        /* File Data reading fops */</div><div class='del'>-        .open        = leases_open,</div><div class='del'>-        .readv       = leases_readv,</div><div class='del'>-</div><div class='del'>-        /* File Data modifying fops */</div><div class='del'>-        .truncate    = leases_truncate,</div><div class='del'>-        .ftruncate   = leases_ftruncate,</div><div class='del'>-        .writev      = leases_writev,</div><div class='del'>-        .zerofill    = leases_zerofill,</div><div class='del'>-        .fallocate   = leases_fallocate,</div><div class='del'>-        .discard     = leases_discard,</div><div class='del'>-        .lk          = leases_lk,</div><div class='del'>-        .fsync       = leases_fsync,</div><div class='del'>-        .flush       = leases_flush,</div><div class='del'>-        .lease       = leases_lease,</div><div class='del'>-</div><div class='del'>-        /* Directory Data modifying fops */</div><div class='del'>-        .create      = leases_create,</div><div class='del'>-        .rename      = leases_rename,</div><div class='del'>-        .unlink      = leases_unlink,</div><div class='del'>-        .link        = leases_link,</div><div class='add'>+    /* Metadata modifying fops */</div><div class='add'>+    .fsetattr = leases_fsetattr,</div><div class='add'>+    .setattr = leases_setattr,</div><div class='add'>+</div><div class='add'>+    /* File Data reading fops */</div><div class='add'>+    .open = leases_open,</div><div class='add'>+    .readv = leases_readv,</div><div class='add'>+</div><div class='add'>+    /* File Data modifying fops */</div><div class='add'>+    .truncate = leases_truncate,</div><div class='add'>+    .ftruncate = leases_ftruncate,</div><div class='add'>+    .writev = leases_writev,</div><div class='add'>+    .zerofill = leases_zerofill,</div><div class='add'>+    .fallocate = leases_fallocate,</div><div class='add'>+    .discard = leases_discard,</div><div class='add'>+    .lk = leases_lk,</div><div class='add'>+    .fsync = leases_fsync,</div><div class='add'>+    .flush = leases_flush,</div><div class='add'>+    .lease = leases_lease,</div><div class='add'>+</div><div class='add'>+    /* Directory Data modifying fops */</div><div class='add'>+    .create = leases_create,</div><div class='add'>+    .rename = leases_rename,</div><div class='add'>+    .unlink = leases_unlink,</div><div class='add'>+    .link = leases_link,</div><div class='ctx'> </div><div class='ctx'> #ifdef NOT_SUPPORTED</div><div class='del'>-        /* internal lk fops */</div><div class='del'>-        .inodelk     = leases_inodelk,</div><div class='del'>-        .finodelk    = leases_finodelk,</div><div class='del'>-        .entrylk     = leases_entrylk,</div><div class='del'>-        .fentrylk    = leases_fentrylk,</div><div class='del'>-</div><div class='del'>-        /* Internal special fops*/</div><div class='del'>-        .xattrop     = leases_xattrop,</div><div class='del'>-        .fxattrop    = leases_fxattrop,</div><div class='add'>+    /* internal lk fops */</div><div class='add'>+    .inodelk = leases_inodelk,</div><div class='add'>+    .finodelk = leases_finodelk,</div><div class='add'>+    .entrylk = leases_entrylk,</div><div class='add'>+    .fentrylk = leases_fentrylk,</div><div class='add'>+</div><div class='add'>+    /* Internal special fops*/</div><div class='add'>+    .xattrop = leases_xattrop,</div><div class='add'>+    .fxattrop = leases_fxattrop,</div><div class='ctx'> #endif</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget            = leases_forget,</div><div class='del'>-        .release           = leases_release,</div><div class='del'>-        .client_disconnect = leases_clnt_disconnect_cbk,</div><div class='add'>+    .forget = leases_forget,</div><div class='add'>+    .release = leases_release,</div><div class='add'>+    .client_disconnect = leases_clnt_disconnect_cbk,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = {"leases"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_8_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .description = "When \"on\", enables leases support"</div><div class='del'>-        },</div><div class='del'>-        { .key  = {"lease-lock-recall-timeout"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .default_value = RECALL_LEASE_LK_TIMEOUT,</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_8_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .description = "After 'timeout' seconds since the recall_lease"</div><div class='del'>-                         " request has been sent to the client, the lease lock"</div><div class='del'>-                         " will be forcefully purged by the server."</div><div class='del'>-        },</div><div class='del'>-        { .key = {NULL} },</div><div class='add'>+    {.key = {"leases"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_8_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .description = "When \"on\", enables leases support"},</div><div class='add'>+    {.key = {"lease-lock-recall-timeout"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .default_value = RECALL_LEASE_LK_TIMEOUT,</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_8_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .description = "After 'timeout' seconds since the recall_lease"</div><div class='add'>+                    " request has been sent to the client, the lease lock"</div><div class='add'>+                    " will be forcefully purged by the server."},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/locks/src/clear.c b/xlators/features/locks/src/clear.c<br/>index 1609fc416d2..0966ee753d6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/clear.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/src/clear.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/clear.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/clear.c</a></div><div class='hunk'>@@ -24,428 +24,427 @@</div><div class='ctx'> #include "clear.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clrlk_get_kind (char *kind)</div><div class='add'>+clrlk_get_kind(char *kind)</div><div class='ctx'> {</div><div class='del'>-        char  *clrlk_kinds[CLRLK_KIND_MAX] = {"dummy", "blocked", "granted",</div><div class='del'>-                                              "all"};</div><div class='del'>-        int   ret_kind                     = CLRLK_KIND_MAX;</div><div class='del'>-        int   i                            = 0;</div><div class='del'>-</div><div class='del'>-        for (i = CLRLK_BLOCKED; i &lt; CLRLK_KIND_MAX; i++) {</div><div class='del'>-                if (!strcmp (clrlk_kinds[i], kind)) {</div><div class='del'>-                        ret_kind = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    char *clrlk_kinds[CLRLK_KIND_MAX] = {"dummy", "blocked", "granted", "all"};</div><div class='add'>+    int ret_kind = CLRLK_KIND_MAX;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    for (i = CLRLK_BLOCKED; i &lt; CLRLK_KIND_MAX; i++) {</div><div class='add'>+        if (!strcmp(clrlk_kinds[i], kind)) {</div><div class='add'>+            ret_kind = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret_kind;</div><div class='add'>+    return ret_kind;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clrlk_get_type (char *type)</div><div class='add'>+clrlk_get_type(char *type)</div><div class='ctx'> {</div><div class='del'>-        char    *clrlk_types[CLRLK_TYPE_MAX]    = {"inode", "entry", "posix"};</div><div class='del'>-        int     ret_type                        = CLRLK_TYPE_MAX;</div><div class='del'>-        int     i                               = 0;</div><div class='del'>-</div><div class='del'>-        for (i = CLRLK_INODE; i &lt; CLRLK_TYPE_MAX; i++) {</div><div class='del'>-                if (!strcmp (clrlk_types[i], type)) {</div><div class='del'>-                        ret_type = i;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    char *clrlk_types[CLRLK_TYPE_MAX] = {"inode", "entry", "posix"};</div><div class='add'>+    int ret_type = CLRLK_TYPE_MAX;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    for (i = CLRLK_INODE; i &lt; CLRLK_TYPE_MAX; i++) {</div><div class='add'>+        if (!strcmp(clrlk_types[i], type)) {</div><div class='add'>+            ret_type = i;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret_type;</div><div class='add'>+    return ret_type;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clrlk_get_lock_range (char *range_str, struct gf_flock *ulock,</div><div class='del'>-                      gf_boolean_t *chk_range)</div><div class='add'>+clrlk_get_lock_range(char *range_str, struct gf_flock *ulock,</div><div class='add'>+                     gf_boolean_t *chk_range)</div><div class='ctx'> {</div><div class='del'>-        int     ret     =       -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!chk_range)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!range_str) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                *chk_range = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (sscanf (range_str, "%hd,%"PRId64"-""%"PRId64, &amp;ulock-&gt;l_whence,</div><div class='del'>-                    &amp;ulock-&gt;l_start, &amp;ulock-&gt;l_len) != 3) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!chk_range)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    if (!range_str) {</div><div class='ctx'>         ret = 0;</div><div class='del'>-        *chk_range = _gf_true;</div><div class='add'>+        *chk_range = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (sscanf(range_str,</div><div class='add'>+               "%hd,%" PRId64 "-"</div><div class='add'>+               "%" PRId64,</div><div class='add'>+               &amp;ulock-&gt;l_whence, &amp;ulock-&gt;l_start, &amp;ulock-&gt;l_len) != 3) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='add'>+    *chk_range = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clrlk_parse_args (const char* cmd, clrlk_args *args)</div><div class='add'>+clrlk_parse_args(const char *cmd, clrlk_args *args)</div><div class='ctx'> {</div><div class='del'>-        char            *opts           = NULL;</div><div class='del'>-        char            *cur            = NULL;</div><div class='del'>-        char            *tok            = NULL;</div><div class='del'>-        char            *sptr           = NULL;</div><div class='del'>-        char            *free_ptr       = NULL;</div><div class='del'>-        char            kw[KW_MAX]     = {[KW_TYPE]     = 't',</div><div class='del'>-                                          [KW_KIND]     = 'k',</div><div class='del'>-                                          };</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        int             i               = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (cmd);</div><div class='del'>-        free_ptr = opts = GF_CALLOC (1, strlen (cmd), gf_common_mt_char);</div><div class='del'>-        if (!opts)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (sscanf (cmd, GF_XATTR_CLRLK_CMD".%s", opts) &lt; 1) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*clr_lk_prefix.ttype.kkind.args, args - type specific*/</div><div class='del'>-        cur = opts;</div><div class='del'>-        for (i = 0; i &lt; KW_MAX &amp;&amp; (tok = strtok_r (cur, ".", &amp;sptr));</div><div class='del'>-             cur = NULL, i++) {</div><div class='del'>-                if (tok[0] != kw[i]) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (i == KW_TYPE)</div><div class='del'>-                        args-&gt;type = clrlk_get_type (tok+1);</div><div class='del'>-                if (i == KW_KIND)</div><div class='del'>-                        args-&gt;kind = clrlk_get_kind (tok+1);</div><div class='add'>+    char *opts = NULL;</div><div class='add'>+    char *cur = NULL;</div><div class='add'>+    char *tok = NULL;</div><div class='add'>+    char *sptr = NULL;</div><div class='add'>+    char *free_ptr = NULL;</div><div class='add'>+    char kw[KW_MAX] = {</div><div class='add'>+        [KW_TYPE] = 't',</div><div class='add'>+        [KW_KIND] = 'k',</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(cmd);</div><div class='add'>+    free_ptr = opts = GF_CALLOC(1, strlen(cmd), gf_common_mt_char);</div><div class='add'>+    if (!opts)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (sscanf(cmd, GF_XATTR_CLRLK_CMD ".%s", opts) &lt; 1) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /*clr_lk_prefix.ttype.kkind.args, args - type specific*/</div><div class='add'>+    cur = opts;</div><div class='add'>+    for (i = 0; i &lt; KW_MAX &amp;&amp; (tok = strtok_r(cur, ".", &amp;sptr));</div><div class='add'>+         cur = NULL, i++) {</div><div class='add'>+        if (tok[0] != kw[i]) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        if ((args-&gt;type == CLRLK_TYPE_MAX) || (args-&gt;kind == CLRLK_KIND_MAX))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        /*optional args, neither range nor basename can 'legally' contain</div><div class='del'>-         * "/" in them*/</div><div class='del'>-        tok = strtok_r (NULL, "/", &amp;sptr);</div><div class='del'>-        if (tok)</div><div class='del'>-                args-&gt;opts = gf_strdup (tok);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+        if (i == KW_TYPE)</div><div class='add'>+            args-&gt;type = clrlk_get_type(tok + 1);</div><div class='add'>+        if (i == KW_KIND)</div><div class='add'>+            args-&gt;kind = clrlk_get_kind(tok + 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((args-&gt;type == CLRLK_TYPE_MAX) || (args-&gt;kind == CLRLK_KIND_MAX))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    /*optional args, neither range nor basename can 'legally' contain</div><div class='add'>+     * "/" in them*/</div><div class='add'>+    tok = strtok_r(NULL, "/", &amp;sptr);</div><div class='add'>+    if (tok)</div><div class='add'>+        args-&gt;opts = gf_strdup(tok);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (free_ptr);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(free_ptr);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clrlk_clear_posixlk (xlator_t *this, pl_inode_t *pl_inode, clrlk_args *args,</div><div class='del'>-                     int *blkd, int *granted, int *op_errno)</div><div class='add'>+clrlk_clear_posixlk(xlator_t *this, pl_inode_t *pl_inode, clrlk_args *args,</div><div class='add'>+                    int *blkd, int *granted, int *op_errno)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t            *plock          = NULL;</div><div class='del'>-        posix_lock_t            *tmp            = NULL;</div><div class='del'>-        struct gf_flock         ulock           = {0, };</div><div class='del'>-        int                     ret             = -1;</div><div class='del'>-        int                     bcount          = 0;</div><div class='del'>-        int                     gcount          = 0;</div><div class='del'>-        gf_boolean_t            chk_range       = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (clrlk_get_lock_range (args-&gt;opts, &amp;ulock, &amp;chk_range)) {</div><div class='del'>-                *op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    posix_lock_t *plock = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    struct gf_flock ulock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int bcount = 0;</div><div class='add'>+    int gcount = 0;</div><div class='add'>+    gf_boolean_t chk_range = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (clrlk_get_lock_range(args-&gt;opts, &amp;ulock, &amp;chk_range)) {</div><div class='add'>+        *op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(plock, tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (plock, tmp, &amp;pl_inode-&gt;ext_list,</div><div class='del'>-                                          list) {</div><div class='del'>-                        if ((plock-&gt;blocked &amp;&amp;</div><div class='del'>-                             !(args-&gt;kind &amp; CLRLK_BLOCKED)) ||</div><div class='del'>-                            (!plock-&gt;blocked &amp;&amp;</div><div class='del'>-                             !(args-&gt;kind &amp; CLRLK_GRANTED)))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (chk_range &amp;&amp;</div><div class='del'>-                            (plock-&gt;user_flock.l_whence != ulock.l_whence</div><div class='del'>-                            || plock-&gt;user_flock.l_start != ulock.l_start</div><div class='del'>-                            || plock-&gt;user_flock.l_len != ulock.l_len))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        list_del_init (&amp;plock-&gt;list);</div><div class='del'>-                        if (plock-&gt;blocked) {</div><div class='del'>-                                bcount++;</div><div class='del'>-                                pl_trace_out (this, plock-&gt;frame, NULL, NULL,</div><div class='del'>-                                              F_SETLKW, &amp;plock-&gt;user_flock,</div><div class='del'>-                                              -1, EAGAIN, NULL);</div><div class='del'>-</div><div class='del'>-                                STACK_UNWIND_STRICT (lk, plock-&gt;frame, -1, EAGAIN,</div><div class='del'>-                                                     &amp;plock-&gt;user_flock, NULL);</div><div class='del'>-</div><div class='del'>-                        } else {</div><div class='del'>-                                gcount++;</div><div class='del'>-                        }</div><div class='del'>-                        __destroy_lock(plock);</div><div class='del'>-                }</div><div class='add'>+            if ((plock-&gt;blocked &amp;&amp; !(args-&gt;kind &amp; CLRLK_BLOCKED)) ||</div><div class='add'>+                (!plock-&gt;blocked &amp;&amp; !(args-&gt;kind &amp; CLRLK_GRANTED)))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            if (chk_range &amp;&amp; (plock-&gt;user_flock.l_whence != ulock.l_whence ||</div><div class='add'>+                              plock-&gt;user_flock.l_start != ulock.l_start ||</div><div class='add'>+                              plock-&gt;user_flock.l_len != ulock.l_len))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            list_del_init(&amp;plock-&gt;list);</div><div class='add'>+            if (plock-&gt;blocked) {</div><div class='add'>+                bcount++;</div><div class='add'>+                pl_trace_out(this, plock-&gt;frame, NULL, NULL, F_SETLKW,</div><div class='add'>+                             &amp;plock-&gt;user_flock, -1, EAGAIN, NULL);</div><div class='add'>+</div><div class='add'>+                STACK_UNWIND_STRICT(lk, plock-&gt;frame, -1, EAGAIN,</div><div class='add'>+                                    &amp;plock-&gt;user_flock, NULL);</div><div class='add'>+</div><div class='add'>+            } else {</div><div class='add'>+                gcount++;</div><div class='add'>+            }</div><div class='add'>+            __destroy_lock(plock);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        grant_blocked_locks (this, pl_inode);</div><div class='del'>-        ret = 0;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    grant_blocked_locks(this, pl_inode);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        *blkd    = bcount;</div><div class='del'>-        *granted = gcount;</div><div class='del'>-        return ret;</div><div class='add'>+    *blkd = bcount;</div><div class='add'>+    *granted = gcount;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns 0 on success and -1 on failure */</div><div class='ctx'> int</div><div class='del'>-clrlk_clear_inodelk (xlator_t *this, pl_inode_t *pl_inode, pl_dom_list_t *dom,</div><div class='del'>-                     clrlk_args *args, int *blkd, int *granted, int *op_errno)</div><div class='add'>+clrlk_clear_inodelk(xlator_t *this, pl_inode_t *pl_inode, pl_dom_list_t *dom,</div><div class='add'>+                    clrlk_args *args, int *blkd, int *granted, int *op_errno)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t   *priv;</div><div class='del'>-        pl_inode_lock_t         *ilock          = NULL;</div><div class='del'>-        pl_inode_lock_t         *tmp            = NULL;</div><div class='del'>-        struct gf_flock         ulock           = {0, };</div><div class='del'>-        int                     ret             = -1;</div><div class='del'>-        int                     bcount          = 0;</div><div class='del'>-        int                     gcount          = 0;</div><div class='del'>-        gf_boolean_t            chk_range       = _gf_false;</div><div class='del'>-        struct list_head        *pcontend       = NULL;</div><div class='del'>-        struct list_head        released;</div><div class='del'>-        struct list_head        contend;</div><div class='del'>-        struct timespec         now = { };</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;released);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv-&gt;notify_contention) {</div><div class='del'>-                pcontend = &amp;contend;</div><div class='del'>-                INIT_LIST_HEAD (pcontend);</div><div class='del'>-                timespec_now(&amp;now);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (clrlk_get_lock_range (args-&gt;opts, &amp;ulock, &amp;chk_range)) {</div><div class='del'>-                *op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (args-&gt;kind &amp; CLRLK_BLOCKED)</div><div class='del'>-                goto blkd;</div><div class='del'>-</div><div class='del'>-        if (args-&gt;kind &amp; CLRLK_GRANTED)</div><div class='del'>-                goto granted;</div><div class='add'>+    posix_locks_private_t *priv;</div><div class='add'>+    pl_inode_lock_t *ilock = NULL;</div><div class='add'>+    pl_inode_lock_t *tmp = NULL;</div><div class='add'>+    struct gf_flock ulock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int bcount = 0;</div><div class='add'>+    int gcount = 0;</div><div class='add'>+    gf_boolean_t chk_range = _gf_false;</div><div class='add'>+    struct list_head *pcontend = NULL;</div><div class='add'>+    struct list_head released;</div><div class='add'>+    struct list_head contend;</div><div class='add'>+    struct timespec now = {};</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;released);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv-&gt;notify_contention) {</div><div class='add'>+        pcontend = &amp;contend;</div><div class='add'>+        INIT_LIST_HEAD(pcontend);</div><div class='add'>+        timespec_now(&amp;now);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (clrlk_get_lock_range(args-&gt;opts, &amp;ulock, &amp;chk_range)) {</div><div class='add'>+        *op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (args-&gt;kind &amp; CLRLK_BLOCKED)</div><div class='add'>+        goto blkd;</div><div class='add'>+</div><div class='add'>+    if (args-&gt;kind &amp; CLRLK_GRANTED)</div><div class='add'>+        goto granted;</div><div class='ctx'> </div><div class='ctx'> blkd:</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(ilock, tmp, &amp;dom-&gt;blocked_inodelks,</div><div class='add'>+                                 blocked_locks)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (ilock, tmp, &amp;dom-&gt;blocked_inodelks,</div><div class='del'>-                                          blocked_locks) {</div><div class='del'>-                        if (chk_range &amp;&amp;</div><div class='del'>-                            (ilock-&gt;user_flock.l_whence != ulock.l_whence</div><div class='del'>-                            || ilock-&gt;user_flock.l_start != ulock.l_start</div><div class='del'>-                            || ilock-&gt;user_flock.l_len != ulock.l_len))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        bcount++;</div><div class='del'>-                        list_del_init (&amp;ilock-&gt;client_list);</div><div class='del'>-                        list_del_init (&amp;ilock-&gt;blocked_locks);</div><div class='del'>-                        list_add (&amp;ilock-&gt;blocked_locks, &amp;released);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (ilock, tmp, &amp;released, blocked_locks) {</div><div class='del'>-                list_del_init (&amp;ilock-&gt;blocked_locks);</div><div class='del'>-                pl_trace_out (this, ilock-&gt;frame, NULL, NULL, F_SETLKW,</div><div class='del'>-                              &amp;ilock-&gt;user_flock, -1, EAGAIN,</div><div class='del'>-                              ilock-&gt;volume);</div><div class='del'>-                STACK_UNWIND_STRICT (inodelk, ilock-&gt;frame, -1,</div><div class='del'>-                                     EAGAIN, NULL);</div><div class='del'>-                //No need to take lock as the locks are only in one list</div><div class='del'>-                __pl_inodelk_unref (ilock);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!(args-&gt;kind &amp; CLRLK_GRANTED)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='add'>+            if (chk_range &amp;&amp; (ilock-&gt;user_flock.l_whence != ulock.l_whence ||</div><div class='add'>+                              ilock-&gt;user_flock.l_start != ulock.l_start ||</div><div class='add'>+                              ilock-&gt;user_flock.l_len != ulock.l_len))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            bcount++;</div><div class='add'>+            list_del_init(&amp;ilock-&gt;client_list);</div><div class='add'>+            list_del_init(&amp;ilock-&gt;blocked_locks);</div><div class='add'>+            list_add(&amp;ilock-&gt;blocked_locks, &amp;released);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(ilock, tmp, &amp;released, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;ilock-&gt;blocked_locks);</div><div class='add'>+        pl_trace_out(this, ilock-&gt;frame, NULL, NULL, F_SETLKW,</div><div class='add'>+                     &amp;ilock-&gt;user_flock, -1, EAGAIN, ilock-&gt;volume);</div><div class='add'>+        STACK_UNWIND_STRICT(inodelk, ilock-&gt;frame, -1, EAGAIN, NULL);</div><div class='add'>+        // No need to take lock as the locks are only in one list</div><div class='add'>+        __pl_inodelk_unref(ilock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(args-&gt;kind &amp; CLRLK_GRANTED)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> granted:</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(ilock, tmp, &amp;dom-&gt;inodelk_list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (ilock, tmp, &amp;dom-&gt;inodelk_list,</div><div class='del'>-                                          list) {</div><div class='del'>-                        if (chk_range &amp;&amp;</div><div class='del'>-                            (ilock-&gt;user_flock.l_whence != ulock.l_whence</div><div class='del'>-                            || ilock-&gt;user_flock.l_start != ulock.l_start</div><div class='del'>-                            || ilock-&gt;user_flock.l_len != ulock.l_len))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        gcount++;</div><div class='del'>-                        list_del_init (&amp;ilock-&gt;client_list);</div><div class='del'>-                        list_del_init (&amp;ilock-&gt;list);</div><div class='del'>-                        list_add (&amp;ilock-&gt;list, &amp;released);</div><div class='del'>-                }</div><div class='add'>+            if (chk_range &amp;&amp; (ilock-&gt;user_flock.l_whence != ulock.l_whence ||</div><div class='add'>+                              ilock-&gt;user_flock.l_start != ulock.l_start ||</div><div class='add'>+                              ilock-&gt;user_flock.l_len != ulock.l_len))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            gcount++;</div><div class='add'>+            list_del_init(&amp;ilock-&gt;client_list);</div><div class='add'>+            list_del_init(&amp;ilock-&gt;list);</div><div class='add'>+            list_add(&amp;ilock-&gt;list, &amp;released);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (ilock, tmp, &amp;released, list) {</div><div class='del'>-                list_del_init (&amp;ilock-&gt;list);</div><div class='del'>-                //No need to take lock as the locks are only in one list</div><div class='del'>-                __pl_inodelk_unref (ilock);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(ilock, tmp, &amp;released, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;ilock-&gt;list);</div><div class='add'>+        // No need to take lock as the locks are only in one list</div><div class='add'>+        __pl_inodelk_unref(ilock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        grant_blocked_inode_locks (this, pl_inode, dom, &amp;now, pcontend);</div><div class='del'>-        if (pcontend != NULL) {</div><div class='del'>-                inodelk_contention_notify(this, pcontend);</div><div class='del'>-        }</div><div class='del'>-        *blkd    = bcount;</div><div class='del'>-        *granted = gcount;</div><div class='del'>-        return ret;</div><div class='add'>+    grant_blocked_inode_locks(this, pl_inode, dom, &amp;now, pcontend);</div><div class='add'>+    if (pcontend != NULL) {</div><div class='add'>+        inodelk_contention_notify(this, pcontend);</div><div class='add'>+    }</div><div class='add'>+    *blkd = bcount;</div><div class='add'>+    *granted = gcount;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns 0 on success and -1 on failure */</div><div class='ctx'> int</div><div class='del'>-clrlk_clear_entrylk (xlator_t *this, pl_inode_t *pl_inode, pl_dom_list_t *dom,</div><div class='del'>-                     clrlk_args *args, int *blkd, int *granted, int *op_errno)</div><div class='add'>+clrlk_clear_entrylk(xlator_t *this, pl_inode_t *pl_inode, pl_dom_list_t *dom,</div><div class='add'>+                    clrlk_args *args, int *blkd, int *granted, int *op_errno)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t   *priv;</div><div class='del'>-        pl_entry_lock_t         *elock          = NULL;</div><div class='del'>-        pl_entry_lock_t         *tmp            = NULL;</div><div class='del'>-        int                     bcount          = 0;</div><div class='del'>-        int                     gcount          = 0;</div><div class='del'>-        int                     ret             = -1;</div><div class='del'>-        struct list_head        *pcontend       = NULL;</div><div class='del'>-        struct list_head        removed;</div><div class='del'>-        struct list_head        released;</div><div class='del'>-        struct list_head        contend;</div><div class='del'>-        struct timespec         now;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;released);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv-&gt;notify_contention) {</div><div class='del'>-                pcontend = &amp;contend;</div><div class='del'>-                INIT_LIST_HEAD (pcontend);</div><div class='del'>-                timespec_now(&amp;now);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (args-&gt;kind &amp; CLRLK_BLOCKED)</div><div class='del'>-                goto blkd;</div><div class='del'>-</div><div class='del'>-        if (args-&gt;kind &amp; CLRLK_GRANTED)</div><div class='del'>-                goto granted;</div><div class='add'>+    posix_locks_private_t *priv;</div><div class='add'>+    pl_entry_lock_t *elock = NULL;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='add'>+    int bcount = 0;</div><div class='add'>+    int gcount = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    struct list_head *pcontend = NULL;</div><div class='add'>+    struct list_head removed;</div><div class='add'>+    struct list_head released;</div><div class='add'>+    struct list_head contend;</div><div class='add'>+    struct timespec now;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;released);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv-&gt;notify_contention) {</div><div class='add'>+        pcontend = &amp;contend;</div><div class='add'>+        INIT_LIST_HEAD(pcontend);</div><div class='add'>+        timespec_now(&amp;now);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (args-&gt;kind &amp; CLRLK_BLOCKED)</div><div class='add'>+        goto blkd;</div><div class='add'>+</div><div class='add'>+    if (args-&gt;kind &amp; CLRLK_GRANTED)</div><div class='add'>+        goto granted;</div><div class='ctx'> </div><div class='ctx'> blkd:</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(elock, tmp, &amp;dom-&gt;blocked_entrylks,</div><div class='add'>+                                 blocked_locks)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (elock, tmp, &amp;dom-&gt;blocked_entrylks,</div><div class='del'>-                                          blocked_locks) {</div><div class='del'>-                        if (args-&gt;opts) {</div><div class='del'>-                                if (!elock-&gt;basename ||</div><div class='del'>-                                    strcmp (elock-&gt;basename, args-&gt;opts))</div><div class='del'>-                                        continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        bcount++;</div><div class='del'>-</div><div class='del'>-                        list_del_init (&amp;elock-&gt;client_list);</div><div class='del'>-                        list_del_init (&amp;elock-&gt;blocked_locks);</div><div class='del'>-                        list_add_tail (&amp;elock-&gt;blocked_locks, &amp;released);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            if (args-&gt;opts) {</div><div class='add'>+                if (!elock-&gt;basename || strcmp(elock-&gt;basename, args-&gt;opts))</div><div class='add'>+                    continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (elock, tmp, &amp;released, blocked_locks) {</div><div class='del'>-                list_del_init (&amp;elock-&gt;blocked_locks);</div><div class='del'>-                entrylk_trace_out (this, elock-&gt;frame, elock-&gt;volume, NULL, NULL,</div><div class='del'>-                                   elock-&gt;basename, ENTRYLK_LOCK, elock-&gt;type,</div><div class='del'>-                                   -1, EAGAIN);</div><div class='del'>-                STACK_UNWIND_STRICT (entrylk, elock-&gt;frame, -1, EAGAIN, NULL);</div><div class='add'>+            bcount++;</div><div class='ctx'> </div><div class='del'>-		__pl_entrylk_unref (elock);</div><div class='add'>+            list_del_init(&amp;elock-&gt;client_list);</div><div class='add'>+            list_del_init(&amp;elock-&gt;blocked_locks);</div><div class='add'>+            list_add_tail(&amp;elock-&gt;blocked_locks, &amp;released);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (!(args-&gt;kind &amp; CLRLK_GRANTED)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(elock, tmp, &amp;released, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;elock-&gt;blocked_locks);</div><div class='add'>+        entrylk_trace_out(this, elock-&gt;frame, elock-&gt;volume, NULL, NULL,</div><div class='add'>+                          elock-&gt;basename, ENTRYLK_LOCK, elock-&gt;type, -1,</div><div class='add'>+                          EAGAIN);</div><div class='add'>+        STACK_UNWIND_STRICT(entrylk, elock-&gt;frame, -1, EAGAIN, NULL);</div><div class='add'>+</div><div class='add'>+        __pl_entrylk_unref(elock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!(args-&gt;kind &amp; CLRLK_GRANTED)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> granted:</div><div class='del'>-        INIT_LIST_HEAD (&amp;removed);</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    INIT_LIST_HEAD(&amp;removed);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(elock, tmp, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (elock, tmp, &amp;dom-&gt;entrylk_list,</div><div class='del'>-                                          domain_list) {</div><div class='del'>-                        if (args-&gt;opts) {</div><div class='del'>-                                if (!elock-&gt;basename ||</div><div class='del'>-                                    strcmp (elock-&gt;basename, args-&gt;opts))</div><div class='del'>-                                        continue;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        gcount++;</div><div class='del'>-                        list_del_init (&amp;elock-&gt;client_list);</div><div class='del'>-                        list_del_init (&amp;elock-&gt;domain_list);</div><div class='del'>-                        list_add_tail (&amp;elock-&gt;domain_list, &amp;removed);</div><div class='del'>-</div><div class='del'>-                        __pl_entrylk_unref (elock);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            if (args-&gt;opts) {</div><div class='add'>+                if (!elock-&gt;basename || strcmp(elock-&gt;basename, args-&gt;opts))</div><div class='add'>+                    continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        grant_blocked_entry_locks (this, pl_inode, dom, &amp;now, pcontend);</div><div class='del'>-        if (pcontend != NULL) {</div><div class='del'>-                entrylk_contention_notify(this, pcontend);</div><div class='add'>+            gcount++;</div><div class='add'>+            list_del_init(&amp;elock-&gt;client_list);</div><div class='add'>+            list_del_init(&amp;elock-&gt;domain_list);</div><div class='add'>+            list_add_tail(&amp;elock-&gt;domain_list, &amp;removed);</div><div class='add'>+</div><div class='add'>+            __pl_entrylk_unref(elock);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    grant_blocked_entry_locks(this, pl_inode, dom, &amp;now, pcontend);</div><div class='add'>+    if (pcontend != NULL) {</div><div class='add'>+        entrylk_contention_notify(this, pcontend);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        *blkd    = bcount;</div><div class='del'>-        *granted = gcount;</div><div class='del'>-        return ret;</div><div class='add'>+    *blkd = bcount;</div><div class='add'>+    *granted = gcount;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-clrlk_clear_lks_in_all_domains (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                                clrlk_args *args, int *blkd, int *granted,</div><div class='del'>-                                int *op_errno)</div><div class='add'>+clrlk_clear_lks_in_all_domains(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                               clrlk_args *args, int *blkd, int *granted,</div><div class='add'>+                               int *op_errno)</div><div class='ctx'> {</div><div class='del'>-        pl_dom_list_t   *dom            = NULL;</div><div class='del'>-        int             ret             = -1;</div><div class='del'>-        int             tmp_bcount      = 0;</div><div class='del'>-        int             tmp_gcount      = 0;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;dom_list)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int tmp_bcount = 0;</div><div class='add'>+    int tmp_gcount = 0;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (dom, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='del'>-                tmp_bcount = tmp_gcount = 0;</div><div class='del'>-</div><div class='del'>-                switch (args-&gt;type)</div><div class='del'>-                {</div><div class='del'>-                case CLRLK_INODE:</div><div class='del'>-                        ret = clrlk_clear_inodelk (this, pl_inode, dom, args,</div><div class='del'>-                                             &amp;tmp_bcount, &amp;tmp_gcount,</div><div class='del'>-                                             op_errno);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        break;</div><div class='del'>-                case CLRLK_ENTRY:</div><div class='del'>-                        ret = clrlk_clear_entrylk (this, pl_inode, dom, args,</div><div class='del'>-                                             &amp;tmp_bcount, &amp;tmp_gcount,</div><div class='del'>-                                             op_errno);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                *blkd    += tmp_bcount;</div><div class='del'>-                *granted += tmp_gcount;</div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;dom_list)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(dom, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        tmp_bcount = tmp_gcount = 0;</div><div class='add'>+</div><div class='add'>+        switch (args-&gt;type) {</div><div class='add'>+            case CLRLK_INODE:</div><div class='add'>+                ret = clrlk_clear_inodelk(this, pl_inode, dom, args,</div><div class='add'>+                                          &amp;tmp_bcount, &amp;tmp_gcount, op_errno);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                break;</div><div class='add'>+            case CLRLK_ENTRY:</div><div class='add'>+                ret = clrlk_clear_entrylk(this, pl_inode, dom, args,</div><div class='add'>+                                          &amp;tmp_bcount, &amp;tmp_gcount, op_errno);</div><div class='add'>+                if (ret)</div><div class='add'>+                    goto out;</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        *blkd += tmp_bcount;</div><div class='add'>+        *granted += tmp_gcount;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/locks/src/common.c b/xlators/features/locks/src/common.c<br/>index b4d8aa37219..a953e0d1a4a 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/src/common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/common.c</a></div><div class='hunk'>@@ -21,730 +21,701 @@</div><div class='ctx'> #include "locks.h"</div><div class='ctx'> #include "common.h"</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__is_lock_grantable (pl_inode_t *pl_inode, posix_lock_t *lock);</div><div class='add'>+__is_lock_grantable(pl_inode_t *pl_inode, posix_lock_t *lock);</div><div class='ctx'> static void</div><div class='del'>-__insert_and_merge (pl_inode_t *pl_inode, posix_lock_t *lock);</div><div class='add'>+__insert_and_merge(pl_inode_t *pl_inode, posix_lock_t *lock);</div><div class='ctx'> static int</div><div class='del'>-pl_send_prelock_unlock (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                        posix_lock_t *old_lock);</div><div class='add'>+pl_send_prelock_unlock(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                       posix_lock_t *old_lock);</div><div class='ctx'> </div><div class='ctx'> static pl_dom_list_t *</div><div class='del'>-__allocate_domain (const char *volume)</div><div class='add'>+__allocate_domain(const char *volume)</div><div class='ctx'> {</div><div class='del'>-        pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='ctx'> </div><div class='del'>-        dom = GF_CALLOC (1, sizeof (*dom),</div><div class='del'>-                         gf_locks_mt_pl_dom_list_t);</div><div class='del'>-        if (!dom)</div><div class='del'>-                goto out;</div><div class='add'>+    dom = GF_CALLOC(1, sizeof(*dom), gf_locks_mt_pl_dom_list_t);</div><div class='add'>+    if (!dom)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dom-&gt;domain = gf_strdup(volume);</div><div class='del'>-        if (!dom-&gt;domain)</div><div class='del'>-                goto out;</div><div class='add'>+    dom-&gt;domain = gf_strdup(volume);</div><div class='add'>+    if (!dom-&gt;domain)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_log ("posix-locks", GF_LOG_TRACE,</div><div class='del'>-                "New domain allocated: %s", dom-&gt;domain);</div><div class='add'>+    gf_log("posix-locks", GF_LOG_TRACE, "New domain allocated: %s",</div><div class='add'>+           dom-&gt;domain);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;dom-&gt;inode_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;dom-&gt;entrylk_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;dom-&gt;blocked_entrylks);</div><div class='del'>-        INIT_LIST_HEAD (&amp;dom-&gt;inodelk_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;dom-&gt;blocked_inodelks);</div><div class='add'>+    INIT_LIST_HEAD(&amp;dom-&gt;inode_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;dom-&gt;entrylk_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;dom-&gt;blocked_entrylks);</div><div class='add'>+    INIT_LIST_HEAD(&amp;dom-&gt;inodelk_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;dom-&gt;blocked_inodelks);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dom &amp;&amp; (NULL == dom-&gt;domain)) {</div><div class='del'>-                GF_FREE (dom);</div><div class='del'>-                dom = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (dom &amp;&amp; (NULL == dom-&gt;domain)) {</div><div class='add'>+        GF_FREE(dom);</div><div class='add'>+        dom = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return dom;</div><div class='add'>+    return dom;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns domain for the lock. If domain is not present,</div><div class='ctx'>  * allocates a domain and returns it</div><div class='ctx'>  */</div><div class='ctx'> pl_dom_list_t *</div><div class='del'>-get_domain (pl_inode_t *pl_inode, const char *volume)</div><div class='add'>+get_domain(pl_inode_t *pl_inode, const char *volume)</div><div class='ctx'> {</div><div class='del'>-        pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", pl_inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", volume, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", pl_inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", volume, out);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(dom, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (dom, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='del'>-                        if (strcmp (dom-&gt;domain, volume) == 0)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                dom = __allocate_domain (volume);</div><div class='del'>-                if (dom)</div><div class='del'>-                        list_add (&amp;dom-&gt;inode_list, &amp;pl_inode-&gt;dom_list);</div><div class='add'>+            if (strcmp(dom-&gt;domain, volume) == 0)</div><div class='add'>+                goto unlock;</div><div class='ctx'>         }</div><div class='add'>+</div><div class='add'>+        dom = __allocate_domain(volume);</div><div class='add'>+        if (dom)</div><div class='add'>+            list_add(&amp;dom-&gt;inode_list, &amp;pl_inode-&gt;dom_list);</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        if (dom) {</div><div class='del'>-                gf_log ("posix-locks", GF_LOG_TRACE, "Domain %s found", volume);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log ("posix-locks", GF_LOG_TRACE, "Domain %s not found", volume);</div><div class='del'>-        }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    if (dom) {</div><div class='add'>+        gf_log("posix-locks", GF_LOG_TRACE, "Domain %s found", volume);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log("posix-locks", GF_LOG_TRACE, "Domain %s not found", volume);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return dom;</div><div class='add'>+    return dom;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> unsigned long</div><div class='del'>-fd_to_fdnum (fd_t *fd)</div><div class='add'>+fd_to_fdnum(fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        return ((unsigned long) fd);</div><div class='add'>+    return ((unsigned long)fd);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> fd_t *</div><div class='del'>-fd_from_fdnum (posix_lock_t *lock)</div><div class='add'>+fd_from_fdnum(posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        return ((fd_t *) lock-&gt;fd_num);</div><div class='add'>+    return ((fd_t *)lock-&gt;fd_num);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__pl_inode_is_empty (pl_inode_t *pl_inode)</div><div class='add'>+__pl_inode_is_empty(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        return (list_empty (&amp;pl_inode-&gt;ext_list));</div><div class='add'>+    return (list_empty(&amp;pl_inode-&gt;ext_list));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_print_locker (char *str, int size, xlator_t *this, call_frame_t *frame)</div><div class='add'>+pl_print_locker(char *str, int size, xlator_t *this, call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        snprintf (str, size, "Pid=%llu, lk-owner=%s, Client=%p, Frame=%llu",</div><div class='del'>-                  (unsigned long long) frame-&gt;root-&gt;pid,</div><div class='del'>-                  lkowner_utoa (&amp;frame-&gt;root-&gt;lk_owner),</div><div class='del'>-                  frame-&gt;root-&gt;client,</div><div class='del'>-                  (unsigned long long) frame-&gt;root-&gt;unique);</div><div class='add'>+    snprintf(str, size, "Pid=%llu, lk-owner=%s, Client=%p, Frame=%llu",</div><div class='add'>+             (unsigned long long)frame-&gt;root-&gt;pid,</div><div class='add'>+             lkowner_utoa(&amp;frame-&gt;root-&gt;lk_owner), frame-&gt;root-&gt;client,</div><div class='add'>+             (unsigned long long)frame-&gt;root-&gt;unique);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_print_lockee (char *str, int size, fd_t *fd, loc_t *loc)</div><div class='add'>+pl_print_lockee(char *str, int size, fd_t *fd, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        inode_t  *inode = NULL;</div><div class='del'>-        char     *ipath = NULL;</div><div class='del'>-        int       ret = 0;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    char *ipath = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                inode = fd-&gt;inode;</div><div class='del'>-        if (loc)</div><div class='del'>-                inode = loc-&gt;inode;</div><div class='add'>+    if (fd)</div><div class='add'>+        inode = fd-&gt;inode;</div><div class='add'>+    if (loc)</div><div class='add'>+        inode = loc-&gt;inode;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                snprintf (str, size, "&lt;nul&gt;");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        snprintf(str, size, "&lt;nul&gt;");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (loc &amp;&amp; loc-&gt;path) {</div><div class='del'>-                ipath = gf_strdup (loc-&gt;path);</div><div class='del'>-        } else {</div><div class='del'>-                ret = inode_path (inode, NULL, &amp;ipath);</div><div class='del'>-                if (ret &lt;= 0)</div><div class='del'>-                        ipath = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (loc &amp;&amp; loc-&gt;path) {</div><div class='add'>+        ipath = gf_strdup(loc-&gt;path);</div><div class='add'>+    } else {</div><div class='add'>+        ret = inode_path(inode, NULL, &amp;ipath);</div><div class='add'>+        if (ret &lt;= 0)</div><div class='add'>+            ipath = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (str, size, "gfid=%s, fd=%p, path=%s",</div><div class='del'>-                  uuid_utoa (inode-&gt;gfid), fd,</div><div class='del'>-                  ipath ? ipath : "&lt;nul&gt;");</div><div class='add'>+    snprintf(str, size, "gfid=%s, fd=%p, path=%s", uuid_utoa(inode-&gt;gfid), fd,</div><div class='add'>+             ipath ? ipath : "&lt;nul&gt;");</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ipath);</div><div class='add'>+    GF_FREE(ipath);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_print_lock (char *str, int size, int cmd,</div><div class='del'>-               struct gf_flock *flock, gf_lkowner_t *owner)</div><div class='add'>+pl_print_lock(char *str, int size, int cmd, struct gf_flock *flock,</div><div class='add'>+              gf_lkowner_t *owner)</div><div class='ctx'> {</div><div class='del'>-        char *cmd_str = NULL;</div><div class='del'>-        char *type_str = NULL;</div><div class='add'>+    char *cmd_str = NULL;</div><div class='add'>+    char *type_str = NULL;</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'> #if F_GETLK != F_GETLK64</div><div class='ctx'>         case F_GETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_GETLK:</div><div class='del'>-                cmd_str = "GETLK";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "GETLK";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLK != F_SETLK64</div><div class='ctx'>         case F_SETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLK:</div><div class='del'>-                cmd_str = "SETLK";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "SETLK";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLKW != F_SETLKW64</div><div class='ctx'>         case F_SETLKW64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLKW:</div><div class='del'>-                cmd_str = "SETLKW";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "SETLKW";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                cmd_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            cmd_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (flock-&gt;l_type) {</div><div class='add'>+    switch (flock-&gt;l_type) {</div><div class='ctx'>         case F_RDLCK:</div><div class='del'>-                type_str = "READ";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "READ";</div><div class='add'>+            break;</div><div class='ctx'>         case F_WRLCK:</div><div class='del'>-                type_str = "WRITE";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "WRITE";</div><div class='add'>+            break;</div><div class='ctx'>         case F_UNLCK:</div><div class='del'>-                type_str = "UNLOCK";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "UNLOCK";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                type_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (str, size, "lock=FCNTL, cmd=%s, type=%s, "</div><div class='del'>-                  "start=%llu, len=%llu, pid=%llu, lk-owner=%s",</div><div class='del'>-                  cmd_str, type_str, (unsigned long long) flock-&gt;l_start,</div><div class='del'>-                  (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                  (unsigned long long) flock-&gt;l_pid,</div><div class='del'>-                  lkowner_utoa (owner));</div><div class='add'>+            type_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(str, size,</div><div class='add'>+             "lock=FCNTL, cmd=%s, type=%s, "</div><div class='add'>+             "start=%llu, len=%llu, pid=%llu, lk-owner=%s",</div><div class='add'>+             cmd_str, type_str, (unsigned long long)flock-&gt;l_start,</div><div class='add'>+             (unsigned long long)flock-&gt;l_len, (unsigned long long)flock-&gt;l_pid,</div><div class='add'>+             lkowner_utoa(owner));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_trace_in (xlator_t *this, call_frame_t *frame, fd_t *fd, loc_t *loc,</div><div class='del'>-             int cmd, struct gf_flock *flock, const char *domain)</div><div class='add'>+pl_trace_in(xlator_t *this, call_frame_t *frame, fd_t *fd, loc_t *loc, int cmd,</div><div class='add'>+            struct gf_flock *flock, const char *domain)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        char                    pl_lock[256];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    char pl_lock[256];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, loc);</div><div class='del'>-        if (domain)</div><div class='del'>-                pl_print_inodelk (pl_lock, 256, cmd, flock, domain);</div><div class='del'>-        else</div><div class='del'>-                pl_print_lock (pl_lock, 256, cmd, flock, &amp;frame-&gt;root-&gt;lk_owner);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, loc);</div><div class='add'>+    if (domain)</div><div class='add'>+        pl_print_inodelk(pl_lock, 256, cmd, flock, domain);</div><div class='add'>+    else</div><div class='add'>+        pl_print_lock(pl_lock, 256, cmd, flock, &amp;frame-&gt;root-&gt;lk_owner);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[REQUEST] Locker = {%s} Lockee = {%s} Lock = {%s}",</div><div class='del'>-                pl_locker, pl_lockee, pl_lock);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "[REQUEST] Locker = {%s} Lockee = {%s} Lock = {%s}", pl_locker,</div><div class='add'>+           pl_lockee, pl_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_print_verdict (char *str, int size, int op_ret, int op_errno)</div><div class='add'>+pl_print_verdict(char *str, int size, int op_ret, int op_errno)</div><div class='ctx'> {</div><div class='del'>-        char *verdict = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret == 0) {</div><div class='del'>-                verdict = "GRANTED";</div><div class='del'>-        } else {</div><div class='del'>-                switch (op_errno) {</div><div class='del'>-                case EAGAIN:</div><div class='del'>-                        verdict = "TRYAGAIN";</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        verdict = strerror (op_errno);</div><div class='del'>-                }</div><div class='add'>+    char *verdict = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret == 0) {</div><div class='add'>+        verdict = "GRANTED";</div><div class='add'>+    } else {</div><div class='add'>+        switch (op_errno) {</div><div class='add'>+            case EAGAIN:</div><div class='add'>+                verdict = "TRYAGAIN";</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                verdict = strerror(op_errno);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (str, size, "%s", verdict);</div><div class='add'>+    snprintf(str, size, "%s", verdict);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_trace_out (xlator_t *this, call_frame_t *frame, fd_t *fd, loc_t *loc,</div><div class='del'>-              int cmd, struct gf_flock *flock, int op_ret, int op_errno, const char *domain)</div><div class='add'>+pl_trace_out(xlator_t *this, call_frame_t *frame, fd_t *fd, loc_t *loc, int cmd,</div><div class='add'>+             struct gf_flock *flock, int op_ret, int op_errno,</div><div class='add'>+             const char *domain)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        char                    pl_lock[256];</div><div class='del'>-        char                    verdict[32];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    char pl_lock[256];</div><div class='add'>+    char verdict[32];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, loc);</div><div class='del'>-        if (domain)</div><div class='del'>-                pl_print_inodelk (pl_lock, 256, cmd, flock, domain);</div><div class='del'>-        else</div><div class='del'>-                pl_print_lock (pl_lock, 256, cmd, flock, &amp;frame-&gt;root-&gt;lk_owner);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, loc);</div><div class='add'>+    if (domain)</div><div class='add'>+        pl_print_inodelk(pl_lock, 256, cmd, flock, domain);</div><div class='add'>+    else</div><div class='add'>+        pl_print_lock(pl_lock, 256, cmd, flock, &amp;frame-&gt;root-&gt;lk_owner);</div><div class='ctx'> </div><div class='del'>-        pl_print_verdict (verdict, 32, op_ret, op_errno);</div><div class='add'>+    pl_print_verdict(verdict, 32, op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[%s] Locker = {%s} Lockee = {%s} Lock = {%s}",</div><div class='del'>-                verdict, pl_locker, pl_lockee, pl_lock);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "[%s] Locker = {%s} Lockee = {%s} Lock = {%s}", verdict, pl_locker,</div><div class='add'>+           pl_lockee, pl_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_trace_block (xlator_t *this, call_frame_t *frame, fd_t *fd, loc_t *loc,</div><div class='del'>-                int cmd, struct gf_flock *flock, const char *domain)</div><div class='add'>+pl_trace_block(xlator_t *this, call_frame_t *frame, fd_t *fd, loc_t *loc,</div><div class='add'>+               int cmd, struct gf_flock *flock, const char *domain)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        char                    pl_lock[256];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    char pl_lock[256];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, loc);</div><div class='del'>-        if (domain)</div><div class='del'>-                pl_print_inodelk (pl_lock, 256, cmd, flock, domain);</div><div class='del'>-        else</div><div class='del'>-                pl_print_lock (pl_lock, 256, cmd, flock, &amp;frame-&gt;root-&gt;lk_owner);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, loc);</div><div class='add'>+    if (domain)</div><div class='add'>+        pl_print_inodelk(pl_lock, 256, cmd, flock, domain);</div><div class='add'>+    else</div><div class='add'>+        pl_print_lock(pl_lock, 256, cmd, flock, &amp;frame-&gt;root-&gt;lk_owner);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[BLOCKED] Locker = {%s} Lockee = {%s} Lock = {%s}",</div><div class='del'>-                pl_locker, pl_lockee, pl_lock);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "[BLOCKED] Locker = {%s} Lockee = {%s} Lock = {%s}", pl_locker,</div><div class='add'>+           pl_lockee, pl_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_trace_flush (xlator_t *this, call_frame_t *frame, fd_t *fd)</div><div class='add'>+pl_trace_flush(xlator_t *this, call_frame_t *frame, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        pl_inode_t             *pl_inode = NULL;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (pl_inode &amp;&amp; __pl_inode_is_empty (pl_inode))</div><div class='del'>-                return;</div><div class='add'>+    if (pl_inode &amp;&amp; __pl_inode_is_empty(pl_inode))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, NULL);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, NULL);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[FLUSH] Locker = {%s} Lockee = {%s}",</div><div class='del'>-                pl_locker, pl_lockee);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "[FLUSH] Locker = {%s} Lockee = {%s}",</div><div class='add'>+           pl_locker, pl_lockee);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_trace_release (xlator_t *this, fd_t *fd)</div><div class='add'>+pl_trace_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_lockee[256];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_lockee[256];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, NULL);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, NULL);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[RELEASE] Lockee = {%s}", pl_lockee);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO, "[RELEASE] Lockee = {%s}", pl_lockee);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-pl_update_refkeeper (xlator_t *this, inode_t *inode)</div><div class='add'>+pl_update_refkeeper(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t *pl_inode  = NULL;</div><div class='del'>-        int         is_empty  = 0;</div><div class='del'>-        int         need_unref = 0;</div><div class='del'>-        int         need_ref = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    int is_empty = 0;</div><div class='add'>+    int need_unref = 0;</div><div class='add'>+    int need_ref = 0;</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, inode);</div><div class='add'>+    pl_inode = pl_inode_get(this, inode);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                is_empty = __pl_inode_is_empty (pl_inode);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        is_empty = __pl_inode_is_empty(pl_inode);</div><div class='ctx'> </div><div class='del'>-                if (is_empty &amp;&amp; pl_inode-&gt;refkeeper) {</div><div class='del'>-                        need_unref = 1;</div><div class='del'>-                        pl_inode-&gt;refkeeper = NULL;</div><div class='del'>-                }</div><div class='add'>+        if (is_empty &amp;&amp; pl_inode-&gt;refkeeper) {</div><div class='add'>+            need_unref = 1;</div><div class='add'>+            pl_inode-&gt;refkeeper = NULL;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!is_empty &amp;&amp; !pl_inode-&gt;refkeeper) {</div><div class='del'>-                        need_ref = 1;</div><div class='del'>-                        pl_inode-&gt;refkeeper = inode;</div><div class='del'>-                }</div><div class='add'>+        if (!is_empty &amp;&amp; !pl_inode-&gt;refkeeper) {</div><div class='add'>+            need_ref = 1;</div><div class='add'>+            pl_inode-&gt;refkeeper = inode;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (need_unref)</div><div class='del'>-                inode_unref (inode);</div><div class='add'>+    if (need_unref)</div><div class='add'>+        inode_unref(inode);</div><div class='ctx'> </div><div class='del'>-        if (need_ref)</div><div class='del'>-                inode_ref (inode);</div><div class='add'>+    if (need_ref)</div><div class='add'>+        inode_ref(inode);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> pl_inode_t *</div><div class='del'>-pl_inode_get (xlator_t *this, inode_t *inode)</div><div class='add'>+pl_inode_get(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        uint64_t    tmp_pl_inode = 0;</div><div class='del'>-        pl_inode_t *pl_inode = NULL;</div><div class='del'>-        int         ret = 0;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get (inode, this, &amp;tmp_pl_inode);</div><div class='del'>-                if (ret == 0) {</div><div class='del'>-                        pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-                pl_inode = GF_CALLOC (1, sizeof (*pl_inode),</div><div class='del'>-                                      gf_locks_mt_pl_inode_t);</div><div class='del'>-                if (!pl_inode) {</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    uint64_t tmp_pl_inode = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;tmp_pl_inode);</div><div class='add'>+        if (ret == 0) {</div><div class='add'>+            pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='add'>+        pl_inode = GF_CALLOC(1, sizeof(*pl_inode), gf_locks_mt_pl_inode_t);</div><div class='add'>+        if (!pl_inode) {</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "Allocating new pl inode");</div><div class='del'>-</div><div class='del'>-                pthread_mutex_init (&amp;pl_inode-&gt;mutex, NULL);</div><div class='del'>-</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;dom_list);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;ext_list);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;rw_list);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;reservelk_list);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;blocked_reservelks);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;blocked_calls);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;metalk_list);</div><div class='del'>-                INIT_LIST_HEAD (&amp;pl_inode-&gt;queued_locks);</div><div class='del'>-                gf_uuid_copy (pl_inode-&gt;gfid, inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                ret = __inode_ctx_put (inode, this, (uint64_t)(long)(pl_inode));</div><div class='del'>-                if (ret) {</div><div class='del'>-                        pthread_mutex_destroy (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                        GF_FREE (pl_inode);</div><div class='del'>-                        pl_inode = NULL;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "Allocating new pl inode");</div><div class='add'>+</div><div class='add'>+        pthread_mutex_init(&amp;pl_inode-&gt;mutex, NULL);</div><div class='add'>+</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;dom_list);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;ext_list);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;rw_list);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;reservelk_list);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;blocked_reservelks);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;blocked_calls);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;metalk_list);</div><div class='add'>+        INIT_LIST_HEAD(&amp;pl_inode-&gt;queued_locks);</div><div class='add'>+        gf_uuid_copy(pl_inode-&gt;gfid, inode-&gt;gfid);</div><div class='add'>+</div><div class='add'>+        ret = __inode_ctx_put(inode, this, (uint64_t)(long)(pl_inode));</div><div class='add'>+        if (ret) {</div><div class='add'>+            pthread_mutex_destroy(&amp;pl_inode-&gt;mutex);</div><div class='add'>+            GF_FREE(pl_inode);</div><div class='add'>+            pl_inode = NULL;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return pl_inode;</div><div class='add'>+    return pl_inode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Create a new posix_lock_t */</div><div class='ctx'> posix_lock_t *</div><div class='del'>-new_posix_lock (struct gf_flock *flock, client_t *client, pid_t client_pid,</div><div class='del'>-                gf_lkowner_t *owner, fd_t *fd, uint32_t lk_flags, int blocking)</div><div class='add'>+new_posix_lock(struct gf_flock *flock, client_t *client, pid_t client_pid,</div><div class='add'>+               gf_lkowner_t *owner, fd_t *fd, uint32_t lk_flags, int blocking)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *lock = NULL;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", flock, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", client, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", flock, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", client, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", fd, out);</div><div class='ctx'> </div><div class='del'>-        lock = GF_CALLOC (1, sizeof (posix_lock_t),</div><div class='del'>-                          gf_locks_mt_posix_lock_t);</div><div class='del'>-        if (!lock) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    lock = GF_CALLOC(1, sizeof(posix_lock_t), gf_locks_mt_posix_lock_t);</div><div class='add'>+    if (!lock) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock-&gt;fl_start = flock-&gt;l_start;</div><div class='del'>-        lock-&gt;fl_type  = flock-&gt;l_type;</div><div class='add'>+    lock-&gt;fl_start = flock-&gt;l_start;</div><div class='add'>+    lock-&gt;fl_type = flock-&gt;l_type;</div><div class='ctx'> </div><div class='del'>-        if (flock-&gt;l_len == 0)</div><div class='del'>-                lock-&gt;fl_end = LLONG_MAX;</div><div class='del'>-        else</div><div class='del'>-                lock-&gt;fl_end = flock-&gt;l_start + flock-&gt;l_len - 1;</div><div class='add'>+    if (flock-&gt;l_len == 0)</div><div class='add'>+        lock-&gt;fl_end = LLONG_MAX;</div><div class='add'>+    else</div><div class='add'>+        lock-&gt;fl_end = flock-&gt;l_start + flock-&gt;l_len - 1;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;client     = client;</div><div class='add'>+    lock-&gt;client = client;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;client_uid = gf_strdup (client-&gt;client_uid);</div><div class='del'>-        if (lock-&gt;client_uid == NULL) {</div><div class='del'>-                GF_FREE (lock);</div><div class='del'>-                lock = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    lock-&gt;client_uid = gf_strdup(client-&gt;client_uid);</div><div class='add'>+    if (lock-&gt;client_uid == NULL) {</div><div class='add'>+        GF_FREE(lock);</div><div class='add'>+        lock = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock-&gt;fd_num     = fd_to_fdnum (fd);</div><div class='del'>-        lock-&gt;fd         = fd;</div><div class='del'>-        lock-&gt;client_pid = client_pid;</div><div class='del'>-        lock-&gt;owner      = *owner;</div><div class='del'>-        lock-&gt;lk_flags   = lk_flags;</div><div class='add'>+    lock-&gt;fd_num = fd_to_fdnum(fd);</div><div class='add'>+    lock-&gt;fd = fd;</div><div class='add'>+    lock-&gt;client_pid = client_pid;</div><div class='add'>+    lock-&gt;owner = *owner;</div><div class='add'>+    lock-&gt;lk_flags = lk_flags;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;blocking  = blocking;</div><div class='del'>-        memcpy (&amp;lock-&gt;user_flock, flock, sizeof (lock-&gt;user_flock));</div><div class='add'>+    lock-&gt;blocking = blocking;</div><div class='add'>+    memcpy(&amp;lock-&gt;user_flock, flock, sizeof(lock-&gt;user_flock));</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lock;</div><div class='add'>+    return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Delete a lock from the inode's lock list */</div><div class='ctx'> void</div><div class='del'>-__delete_lock (posix_lock_t *lock)</div><div class='add'>+__delete_lock(posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        list_del_init (&amp;lock-&gt;list);</div><div class='add'>+    list_del_init(&amp;lock-&gt;list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Destroy a posix_lock */</div><div class='ctx'> void</div><div class='del'>-__destroy_lock (posix_lock_t *lock)</div><div class='add'>+__destroy_lock(posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        GF_FREE (lock-&gt;client_uid);</div><div class='del'>-        GF_FREE (lock);</div><div class='add'>+    GF_FREE(lock-&gt;client_uid);</div><div class='add'>+    GF_FREE(lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static posix_lock_t *</div><div class='ctx'> __copy_lock(posix_lock_t *src)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *dst;</div><div class='del'>-</div><div class='del'>-        dst = GF_MALLOC(sizeof(posix_lock_t), gf_locks_mt_posix_lock_t);</div><div class='del'>-        if (dst != NULL) {</div><div class='del'>-                memcpy (dst, src, sizeof(posix_lock_t));</div><div class='del'>-                dst-&gt;client_uid = gf_strdup(src-&gt;client_uid);</div><div class='del'>-                if (dst-&gt;client_uid == NULL) {</div><div class='del'>-                        GF_FREE(dst);</div><div class='del'>-                        dst = NULL;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-	if (dst != NULL)</div><div class='del'>-               INIT_LIST_HEAD (&amp;dst-&gt;list);</div><div class='add'>+    posix_lock_t *dst;</div><div class='add'>+</div><div class='add'>+    dst = GF_MALLOC(sizeof(posix_lock_t), gf_locks_mt_posix_lock_t);</div><div class='add'>+    if (dst != NULL) {</div><div class='add'>+        memcpy(dst, src, sizeof(posix_lock_t));</div><div class='add'>+        dst-&gt;client_uid = gf_strdup(src-&gt;client_uid);</div><div class='add'>+        if (dst-&gt;client_uid == NULL) {</div><div class='add'>+            GF_FREE(dst);</div><div class='add'>+            dst = NULL;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return dst;</div><div class='add'>+        if (dst != NULL)</div><div class='add'>+            INIT_LIST_HEAD(&amp;dst-&gt;list);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return dst;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Convert a posix_lock to a struct gf_flock */</div><div class='ctx'> void</div><div class='del'>-posix_lock_to_flock (posix_lock_t *lock, struct gf_flock *flock)</div><div class='add'>+posix_lock_to_flock(posix_lock_t *lock, struct gf_flock *flock)</div><div class='ctx'> {</div><div class='del'>-        flock-&gt;l_pid   = lock-&gt;user_flock.l_pid;</div><div class='del'>-        flock-&gt;l_type  = lock-&gt;fl_type;</div><div class='del'>-        flock-&gt;l_start = lock-&gt;fl_start;</div><div class='del'>-        flock-&gt;l_owner = lock-&gt;owner;</div><div class='del'>-</div><div class='del'>-        if (lock-&gt;fl_end == LLONG_MAX)</div><div class='del'>-                flock-&gt;l_len = 0;</div><div class='del'>-        else</div><div class='del'>-                flock-&gt;l_len = lock-&gt;fl_end - lock-&gt;fl_start + 1;</div><div class='add'>+    flock-&gt;l_pid = lock-&gt;user_flock.l_pid;</div><div class='add'>+    flock-&gt;l_type = lock-&gt;fl_type;</div><div class='add'>+    flock-&gt;l_start = lock-&gt;fl_start;</div><div class='add'>+    flock-&gt;l_owner = lock-&gt;owner;</div><div class='add'>+</div><div class='add'>+    if (lock-&gt;fl_end == LLONG_MAX)</div><div class='add'>+        flock-&gt;l_len = 0;</div><div class='add'>+    else</div><div class='add'>+        flock-&gt;l_len = lock-&gt;fl_end - lock-&gt;fl_start + 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Insert the lock into the inode's lock list */</div><div class='ctx'> static void</div><div class='del'>-__insert_lock (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+__insert_lock(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        if (lock-&gt;blocked)</div><div class='del'>-                gettimeofday (&amp;lock-&gt;blkd_time, NULL);</div><div class='del'>-        else</div><div class='del'>-                gettimeofday (&amp;lock-&gt;granted_time, NULL);</div><div class='add'>+    if (lock-&gt;blocked)</div><div class='add'>+        gettimeofday(&amp;lock-&gt;blkd_time, NULL);</div><div class='add'>+    else</div><div class='add'>+        gettimeofday(&amp;lock-&gt;granted_time, NULL);</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;lock-&gt;list, &amp;pl_inode-&gt;ext_list);</div><div class='add'>+    list_add_tail(&amp;lock-&gt;list, &amp;pl_inode-&gt;ext_list);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Return true if the locks overlap, false otherwise */</div><div class='ctx'> int</div><div class='del'>-locks_overlap (posix_lock_t *l1, posix_lock_t *l2)</div><div class='add'>+locks_overlap(posix_lock_t *l1, posix_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        /*</div><div class='del'>-           Note:</div><div class='del'>-           FUSE always gives us absolute offsets, so no need to worry</div><div class='del'>-           about SEEK_CUR or SEEK_END</div><div class='del'>-        */</div><div class='add'>+    /*</div><div class='add'>+       Note:</div><div class='add'>+       FUSE always gives us absolute offsets, so no need to worry</div><div class='add'>+       about SEEK_CUR or SEEK_END</div><div class='add'>+    */</div><div class='ctx'> </div><div class='del'>-        return ((l1-&gt;fl_end &gt;= l2-&gt;fl_start) &amp;&amp;</div><div class='del'>-                (l2-&gt;fl_end &gt;= l1-&gt;fl_start));</div><div class='add'>+    return ((l1-&gt;fl_end &gt;= l2-&gt;fl_start) &amp;&amp; (l2-&gt;fl_end &gt;= l1-&gt;fl_start));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Return true if the locks have the same owner */</div><div class='ctx'> int</div><div class='del'>-same_owner (posix_lock_t *l1, posix_lock_t *l2)</div><div class='add'>+same_owner(posix_lock_t *l1, posix_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        return (is_same_lkowner (&amp;l1-&gt;owner, &amp;l2-&gt;owner) &amp;&amp;</div><div class='del'>-                (l1-&gt;client == l2-&gt;client));</div><div class='del'>-</div><div class='add'>+    return (is_same_lkowner(&amp;l1-&gt;owner, &amp;l2-&gt;owner) &amp;&amp;</div><div class='add'>+            (l1-&gt;client == l2-&gt;client));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Delete all F_UNLCK locks */</div><div class='ctx'> void</div><div class='del'>-__delete_unlck_locks (pl_inode_t *pl_inode)</div><div class='add'>+__delete_unlck_locks(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='del'>-        posix_lock_t *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (l-&gt;fl_type == F_UNLCK) {</div><div class='del'>-                        __delete_lock (l);</div><div class='del'>-                        __destroy_lock (l);</div><div class='del'>-                }</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l-&gt;fl_type == F_UNLCK) {</div><div class='add'>+            __delete_lock(l);</div><div class='add'>+            __destroy_lock(l);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Add two locks */</div><div class='ctx'> static posix_lock_t *</div><div class='del'>-add_locks (posix_lock_t *l1, posix_lock_t *l2, posix_lock_t *dst)</div><div class='add'>+add_locks(posix_lock_t *l1, posix_lock_t *l2, posix_lock_t *dst)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *sum = NULL;</div><div class='add'>+    posix_lock_t *sum = NULL;</div><div class='ctx'> </div><div class='del'>-        sum = __copy_lock (dst);</div><div class='del'>-        if (!sum)</div><div class='del'>-                return NULL;</div><div class='add'>+    sum = __copy_lock(dst);</div><div class='add'>+    if (!sum)</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        sum-&gt;fl_start = min (l1-&gt;fl_start, l2-&gt;fl_start);</div><div class='del'>-        sum-&gt;fl_end   = max (l1-&gt;fl_end, l2-&gt;fl_end);</div><div class='add'>+    sum-&gt;fl_start = min(l1-&gt;fl_start, l2-&gt;fl_start);</div><div class='add'>+    sum-&gt;fl_end = max(l1-&gt;fl_end, l2-&gt;fl_end);</div><div class='ctx'> </div><div class='del'>-        posix_lock_to_flock (sum, &amp;sum-&gt;user_flock);</div><div class='add'>+    posix_lock_to_flock(sum, &amp;sum-&gt;user_flock);</div><div class='ctx'> </div><div class='del'>-        return sum;</div><div class='add'>+    return sum;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Subtract two locks */</div><div class='ctx'> struct _values {</div><div class='del'>-        posix_lock_t *locks[3];</div><div class='add'>+    posix_lock_t *locks[3];</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> /* {big} must always be contained inside {small} */</div><div class='ctx'> static struct _values</div><div class='del'>-subtract_locks (posix_lock_t *big, posix_lock_t *small)</div><div class='add'>+subtract_locks(posix_lock_t *big, posix_lock_t *small)</div><div class='ctx'> {</div><div class='add'>+    struct _values v = {.locks = {0, 0, 0}};</div><div class='ctx'> </div><div class='del'>-        struct _values v = { .locks = {0, 0, 0} };</div><div class='del'>-</div><div class='del'>-        if ((big-&gt;fl_start == small-&gt;fl_start) &amp;&amp;</div><div class='del'>-            (big-&gt;fl_end   == small-&gt;fl_end)) {</div><div class='del'>-                /* both edges coincide with big */</div><div class='del'>-                v.locks[0] = __copy_lock(big);</div><div class='del'>-                if (!v.locks[0]) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                v.locks[0]-&gt;fl_type = small-&gt;fl_type;</div><div class='del'>-                v.locks[0]-&gt;user_flock.l_type = small-&gt;fl_type;</div><div class='del'>-                goto done;</div><div class='add'>+    if ((big-&gt;fl_start == small-&gt;fl_start) &amp;&amp; (big-&gt;fl_end == small-&gt;fl_end)) {</div><div class='add'>+        /* both edges coincide with big */</div><div class='add'>+        v.locks[0] = __copy_lock(big);</div><div class='add'>+        if (!v.locks[0]) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if ((small-&gt;fl_start &gt; big-&gt;fl_start) &amp;&amp;</div><div class='del'>-            (small-&gt;fl_end   &lt; big-&gt;fl_end)) {</div><div class='del'>-                /* both edges lie inside big */</div><div class='del'>-                v.locks[0] = __copy_lock(big);</div><div class='del'>-                v.locks[1] = __copy_lock(small);</div><div class='del'>-                v.locks[2] = __copy_lock(big);</div><div class='del'>-                if ((v.locks[0] == NULL) || (v.locks[1] == NULL) ||</div><div class='del'>-                    (v.locks[2] == NULL)) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                v.locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='del'>-                v.locks[2]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='del'>-                posix_lock_to_flock (v.locks[0], &amp;v.locks[0]-&gt;user_flock);</div><div class='del'>-                posix_lock_to_flock (v.locks[2], &amp;v.locks[2]-&gt;user_flock);</div><div class='del'>-                goto done;</div><div class='del'>-</div><div class='add'>+        v.locks[0]-&gt;fl_type = small-&gt;fl_type;</div><div class='add'>+        v.locks[0]-&gt;user_flock.l_type = small-&gt;fl_type;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((small-&gt;fl_start &gt; big-&gt;fl_start) &amp;&amp; (small-&gt;fl_end &lt; big-&gt;fl_end)) {</div><div class='add'>+        /* both edges lie inside big */</div><div class='add'>+        v.locks[0] = __copy_lock(big);</div><div class='add'>+        v.locks[1] = __copy_lock(small);</div><div class='add'>+        v.locks[2] = __copy_lock(big);</div><div class='add'>+        if ((v.locks[0] == NULL) || (v.locks[1] == NULL) ||</div><div class='add'>+            (v.locks[2] == NULL)) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* one edge coincides with big */</div><div class='del'>-        if (small-&gt;fl_start == big-&gt;fl_start) {</div><div class='del'>-                v.locks[0] = __copy_lock(big);</div><div class='del'>-                v.locks[1] = __copy_lock(small);</div><div class='del'>-                if ((v.locks[0] == NULL) || (v.locks[1] == NULL)) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                v.locks[0]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='del'>-                posix_lock_to_flock (v.locks[0], &amp;v.locks[0]-&gt;user_flock);</div><div class='del'>-                goto done;</div><div class='add'>+        v.locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='add'>+        v.locks[2]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='add'>+        posix_lock_to_flock(v.locks[0], &amp;v.locks[0]-&gt;user_flock);</div><div class='add'>+        posix_lock_to_flock(v.locks[2], &amp;v.locks[2]-&gt;user_flock);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* one edge coincides with big */</div><div class='add'>+    if (small-&gt;fl_start == big-&gt;fl_start) {</div><div class='add'>+        v.locks[0] = __copy_lock(big);</div><div class='add'>+        v.locks[1] = __copy_lock(small);</div><div class='add'>+        if ((v.locks[0] == NULL) || (v.locks[1] == NULL)) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (small-&gt;fl_end  == big-&gt;fl_end) {</div><div class='del'>-                v.locks[0] = __copy_lock(big);</div><div class='del'>-                v.locks[1] = __copy_lock(small);</div><div class='del'>-                if ((v.locks[0] == NULL) || (v.locks[1] == NULL)) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        v.locks[0]-&gt;fl_start = small-&gt;fl_end + 1;</div><div class='add'>+        posix_lock_to_flock(v.locks[0], &amp;v.locks[0]-&gt;user_flock);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                v.locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='del'>-                posix_lock_to_flock (v.locks[0], &amp;v.locks[0]-&gt;user_flock);</div><div class='del'>-                goto done;</div><div class='add'>+    if (small-&gt;fl_end == big-&gt;fl_end) {</div><div class='add'>+        v.locks[0] = __copy_lock(big);</div><div class='add'>+        v.locks[1] = __copy_lock(small);</div><div class='add'>+        if ((v.locks[0] == NULL) || (v.locks[1] == NULL)) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (0);</div><div class='del'>-        gf_log ("posix-locks", GF_LOG_ERROR, "Unexpected case in subtract_locks");</div><div class='add'>+        v.locks[0]-&gt;fl_end = small-&gt;fl_start - 1;</div><div class='add'>+        posix_lock_to_flock(v.locks[0], &amp;v.locks[0]-&gt;user_flock);</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(0);</div><div class='add'>+    gf_log("posix-locks", GF_LOG_ERROR, "Unexpected case in subtract_locks");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (v.locks[0]) {</div><div class='del'>-                __destroy_lock(v.locks[0]);</div><div class='del'>-                v.locks[0] = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (v.locks[1]) {</div><div class='del'>-                __destroy_lock(v.locks[1]);</div><div class='del'>-                v.locks[1] = NULL;</div><div class='del'>-        }</div><div class='del'>-        if (v.locks[2]) {</div><div class='del'>-                __destroy_lock(v.locks[2]);</div><div class='del'>-                v.locks[2] = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (v.locks[0]) {</div><div class='add'>+        __destroy_lock(v.locks[0]);</div><div class='add'>+        v.locks[0] = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (v.locks[1]) {</div><div class='add'>+        __destroy_lock(v.locks[1]);</div><div class='add'>+        v.locks[1] = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (v.locks[2]) {</div><div class='add'>+        __destroy_lock(v.locks[2]);</div><div class='add'>+        v.locks[2] = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        return v;</div><div class='add'>+    return v;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static posix_lock_t *</div><div class='del'>-first_conflicting_overlap (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+first_conflicting_overlap(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='del'>-        posix_lock_t *conf = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                        if (l-&gt;blocked)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        if (locks_overlap (l, lock)) {</div><div class='del'>-                                if (same_owner (l, lock))</div><div class='del'>-                                        continue;</div><div class='del'>-</div><div class='del'>-                                if ((l-&gt;fl_type == F_WRLCK) ||</div><div class='del'>-                                    (lock-&gt;fl_type == F_WRLCK)) {</div><div class='del'>-                                        conf = l;</div><div class='del'>-                                        goto unlock;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='add'>+            if (l-&gt;blocked)</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            if (locks_overlap(l, lock)) {</div><div class='add'>+                if (same_owner(l, lock))</div><div class='add'>+                    continue;</div><div class='add'>+</div><div class='add'>+                if ((l-&gt;fl_type == F_WRLCK) || (lock-&gt;fl_type == F_WRLCK)) {</div><div class='add'>+                    conf = l;</div><div class='add'>+                    goto unlock;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return conf;</div><div class='add'>+    return conf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -753,364 +724,354 @@ unlock:</div><div class='ctx'>   If {begin} is NULL, then start from the beginning of the list</div><div class='ctx'> */</div><div class='ctx'> static posix_lock_t *</div><div class='del'>-first_overlap (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+first_overlap(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (l-&gt;blocked)</div><div class='del'>-                        continue;</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l-&gt;blocked)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                if (locks_overlap (l, lock))</div><div class='del'>-                        return l;</div><div class='del'>-        }</div><div class='add'>+        if (locks_overlap(l, lock))</div><div class='add'>+            return l;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> /* Return true if lock is grantable */</div><div class='ctx'> static int</div><div class='del'>-__is_lock_grantable (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+__is_lock_grantable(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='del'>-        int           ret = 1;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (!l-&gt;blocked &amp;&amp; locks_overlap (lock, l)) {</div><div class='del'>-                        if (((l-&gt;fl_type == F_WRLCK)</div><div class='del'>-                             || (lock-&gt;fl_type == F_WRLCK))</div><div class='del'>-                            &amp;&amp; (lock-&gt;fl_type != F_UNLCK)</div><div class='del'>-                            &amp;&amp; !same_owner (l, lock)) {</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (!l-&gt;blocked &amp;&amp; locks_overlap(lock, l)) {</div><div class='add'>+            if (((l-&gt;fl_type == F_WRLCK) || (lock-&gt;fl_type == F_WRLCK)) &amp;&amp;</div><div class='add'>+                (lock-&gt;fl_type != F_UNLCK) &amp;&amp; !same_owner(l, lock)) {</div><div class='add'>+                ret = 0;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-extern void do_blocked_rw (pl_inode_t *);</div><div class='del'>-</div><div class='add'>+extern void</div><div class='add'>+do_blocked_rw(pl_inode_t *);</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__insert_and_merge (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+__insert_and_merge(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t  *conf = NULL;</div><div class='del'>-        posix_lock_t  *t = NULL;</div><div class='del'>-        posix_lock_t  *sum = NULL;</div><div class='del'>-        int            i = 0;</div><div class='del'>-        struct _values v = { .locks = {0, 0, 0} };</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (conf, t, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (conf-&gt;blocked)</div><div class='del'>-                        continue;</div><div class='del'>-                if (!locks_overlap (conf, lock))</div><div class='del'>-                        continue;</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='add'>+    posix_lock_t *t = NULL;</div><div class='add'>+    posix_lock_t *sum = NULL;</div><div class='add'>+    int i = 0;</div><div class='add'>+    struct _values v = {.locks = {0, 0, 0}};</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(conf, t, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (conf-&gt;blocked)</div><div class='add'>+            continue;</div><div class='add'>+        if (!locks_overlap(conf, lock))</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        if (same_owner(conf, lock)) {</div><div class='add'>+            if (conf-&gt;fl_type == lock-&gt;fl_type &amp;&amp;</div><div class='add'>+                conf-&gt;lk_flags == lock-&gt;lk_flags) {</div><div class='add'>+                sum = add_locks(lock, conf, lock);</div><div class='add'>+</div><div class='add'>+                __delete_lock(conf);</div><div class='add'>+                __destroy_lock(conf);</div><div class='ctx'> </div><div class='del'>-                if (same_owner (conf, lock)) {</div><div class='del'>-                        if (conf-&gt;fl_type == lock-&gt;fl_type &amp;&amp;</div><div class='del'>-                                        conf-&gt;lk_flags == lock-&gt;lk_flags) {</div><div class='del'>-                                sum = add_locks (lock, conf, lock);</div><div class='del'>-</div><div class='del'>-                                __delete_lock (conf);</div><div class='del'>-                                __destroy_lock (conf);</div><div class='del'>-</div><div class='del'>-                                __destroy_lock (lock);</div><div class='del'>-                                INIT_LIST_HEAD (&amp;sum-&gt;list);</div><div class='del'>-                                posix_lock_to_flock (sum, &amp;sum-&gt;user_flock);</div><div class='del'>-                                __insert_and_merge (pl_inode, sum);</div><div class='del'>-</div><div class='del'>-                                return;</div><div class='del'>-                        } else {</div><div class='del'>-                                sum = add_locks (lock, conf, conf);</div><div class='add'>+                __destroy_lock(lock);</div><div class='add'>+                INIT_LIST_HEAD(&amp;sum-&gt;list);</div><div class='add'>+                posix_lock_to_flock(sum, &amp;sum-&gt;user_flock);</div><div class='add'>+                __insert_and_merge(pl_inode, sum);</div><div class='ctx'> </div><div class='del'>-                                v = subtract_locks (sum, lock);</div><div class='add'>+                return;</div><div class='add'>+            } else {</div><div class='add'>+                sum = add_locks(lock, conf, conf);</div><div class='ctx'> </div><div class='del'>-                                __delete_lock (conf);</div><div class='del'>-                                __destroy_lock (conf);</div><div class='add'>+                v = subtract_locks(sum, lock);</div><div class='ctx'> </div><div class='del'>-                                __delete_lock (lock);</div><div class='del'>-                                __destroy_lock (lock);</div><div class='add'>+                __delete_lock(conf);</div><div class='add'>+                __destroy_lock(conf);</div><div class='ctx'> </div><div class='del'>-                                __destroy_lock (sum);</div><div class='add'>+                __delete_lock(lock);</div><div class='add'>+                __destroy_lock(lock);</div><div class='ctx'> </div><div class='del'>-                                for (i = 0; i &lt; 3; i++) {</div><div class='del'>-                                        if (!v.locks[i])</div><div class='del'>-                                                continue;</div><div class='add'>+                __destroy_lock(sum);</div><div class='ctx'> </div><div class='del'>-                                        __insert_and_merge (pl_inode,</div><div class='del'>-                                                            v.locks[i]);</div><div class='del'>-                                }</div><div class='add'>+                for (i = 0; i &lt; 3; i++) {</div><div class='add'>+                    if (!v.locks[i])</div><div class='add'>+                        continue;</div><div class='ctx'> </div><div class='del'>-                                __delete_unlck_locks (pl_inode);</div><div class='del'>-                                return;</div><div class='del'>-                        }</div><div class='add'>+                    __insert_and_merge(pl_inode, v.locks[i]);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-                if (lock-&gt;fl_type == F_UNLCK) {</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='add'>+                __delete_unlck_locks(pl_inode);</div><div class='add'>+                return;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if ((conf-&gt;fl_type == F_RDLCK) &amp;&amp; (lock-&gt;fl_type == F_RDLCK)) {</div><div class='del'>-                        __insert_lock (pl_inode, lock);</div><div class='del'>-                        return;</div><div class='del'>-                }</div><div class='add'>+        if (lock-&gt;fl_type == F_UNLCK) {</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* no conflicts, so just insert */</div><div class='del'>-        if (lock-&gt;fl_type != F_UNLCK) {</div><div class='del'>-                __insert_lock (pl_inode, lock);</div><div class='del'>-        } else {</div><div class='del'>-                __destroy_lock (lock);</div><div class='add'>+        if ((conf-&gt;fl_type == F_RDLCK) &amp;&amp; (lock-&gt;fl_type == F_RDLCK)) {</div><div class='add'>+            __insert_lock(pl_inode, lock);</div><div class='add'>+            return;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* no conflicts, so just insert */</div><div class='add'>+    if (lock-&gt;fl_type != F_UNLCK) {</div><div class='add'>+        __insert_lock(pl_inode, lock);</div><div class='add'>+    } else {</div><div class='add'>+        __destroy_lock(lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-__grant_blocked_locks (xlator_t *this, pl_inode_t *pl_inode, struct list_head *granted)</div><div class='add'>+__grant_blocked_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                      struct list_head *granted)</div><div class='ctx'> {</div><div class='del'>-        struct list_head  tmp_list;</div><div class='del'>-        posix_lock_t     *l = NULL;</div><div class='del'>-        posix_lock_t     *tmp = NULL;</div><div class='del'>-        posix_lock_t     *conf = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;tmp_list);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (l-&gt;blocked) {</div><div class='del'>-                        conf = first_overlap (pl_inode, l);</div><div class='del'>-                        if (conf)</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        l-&gt;blocked = 0;</div><div class='del'>-                        list_move_tail (&amp;l-&gt;list, &amp;tmp_list);</div><div class='del'>-                }</div><div class='add'>+    struct list_head tmp_list;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;tmp_list);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l-&gt;blocked) {</div><div class='add'>+            conf = first_overlap(pl_inode, l);</div><div class='add'>+            if (conf)</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            l-&gt;blocked = 0;</div><div class='add'>+            list_move_tail(&amp;l-&gt;list, &amp;tmp_list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;tmp_list, list) {</div><div class='del'>-                list_del_init (&amp;l-&gt;list);</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;tmp_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;l-&gt;list);</div><div class='ctx'> </div><div class='del'>-                if (__is_lock_grantable (pl_inode, l)) {</div><div class='del'>-                        conf = GF_CALLOC (1, sizeof (*conf),</div><div class='del'>-                                          gf_locks_mt_posix_lock_t);</div><div class='add'>+        if (__is_lock_grantable(pl_inode, l)) {</div><div class='add'>+            conf = GF_CALLOC(1, sizeof(*conf), gf_locks_mt_posix_lock_t);</div><div class='ctx'> </div><div class='del'>-                        if (!conf) {</div><div class='del'>-                                l-&gt;blocked = 1;</div><div class='del'>-                                __insert_lock (pl_inode, l);</div><div class='del'>-                                continue;</div><div class='del'>-                        }</div><div class='add'>+            if (!conf) {</div><div class='add'>+                l-&gt;blocked = 1;</div><div class='add'>+                __insert_lock(pl_inode, l);</div><div class='add'>+                continue;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        conf-&gt;frame = l-&gt;frame;</div><div class='del'>-                        l-&gt;frame = NULL;</div><div class='add'>+            conf-&gt;frame = l-&gt;frame;</div><div class='add'>+            l-&gt;frame = NULL;</div><div class='ctx'> </div><div class='del'>-                        posix_lock_to_flock (l, &amp;conf-&gt;user_flock);</div><div class='add'>+            posix_lock_to_flock(l, &amp;conf-&gt;user_flock);</div><div class='ctx'> </div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s (pid=%d) lk-owner:%s %"PRId64" - %"PRId64" =&gt; Granted",</div><div class='del'>-                                l-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                l-&gt;client_pid, lkowner_utoa (&amp;l-&gt;owner),</div><div class='del'>-                                l-&gt;user_flock.l_start,</div><div class='del'>-                                l-&gt;user_flock.l_len);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (pid=%d) lk-owner:%s %" PRId64 " - %" PRId64</div><div class='add'>+                   " =&gt; Granted",</div><div class='add'>+                   l-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock", l-&gt;client_pid,</div><div class='add'>+                   lkowner_utoa(&amp;l-&gt;owner), l-&gt;user_flock.l_start,</div><div class='add'>+                   l-&gt;user_flock.l_len);</div><div class='ctx'> </div><div class='del'>-                        __insert_and_merge (pl_inode, l);</div><div class='add'>+            __insert_and_merge(pl_inode, l);</div><div class='ctx'> </div><div class='del'>-                        list_add (&amp;conf-&gt;list, granted);</div><div class='del'>-                } else {</div><div class='del'>-                        l-&gt;blocked = 1;</div><div class='del'>-                        __insert_lock (pl_inode, l);</div><div class='del'>-                }</div><div class='add'>+            list_add(&amp;conf-&gt;list, granted);</div><div class='add'>+        } else {</div><div class='add'>+            l-&gt;blocked = 1;</div><div class='add'>+            __insert_lock(pl_inode, l);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-grant_blocked_locks (xlator_t *this, pl_inode_t *pl_inode)</div><div class='add'>+grant_blocked_locks(xlator_t *this, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        struct list_head granted_list;</div><div class='del'>-        posix_lock_t     *tmp = NULL;</div><div class='del'>-        posix_lock_t     *lock = NULL;</div><div class='add'>+    struct list_head granted_list;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;granted_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;granted_list);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __grant_blocked_locks (this, pl_inode, &amp;granted_list);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __grant_blocked_locks(this, pl_inode, &amp;granted_list);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;granted_list, list) {</div><div class='del'>-                list_del_init (&amp;lock-&gt;list);</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;granted_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;lock-&gt;list);</div><div class='ctx'> </div><div class='del'>-                pl_trace_out (this, lock-&gt;frame, NULL, NULL, F_SETLKW,</div><div class='del'>-                              &amp;lock-&gt;user_flock, 0, 0, NULL);</div><div class='add'>+        pl_trace_out(this, lock-&gt;frame, NULL, NULL, F_SETLKW, &amp;lock-&gt;user_flock,</div><div class='add'>+                     0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (lk, lock-&gt;frame, 0, 0,</div><div class='del'>-                                     &amp;lock-&gt;user_flock, NULL);</div><div class='add'>+        STACK_UNWIND_STRICT(lk, lock-&gt;frame, 0, 0, &amp;lock-&gt;user_flock, NULL);</div><div class='ctx'> </div><div class='del'>-                __destroy_lock(lock);</div><div class='del'>-        }</div><div class='add'>+        __destroy_lock(lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-pl_send_prelock_unlock (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                        posix_lock_t *old_lock)</div><div class='add'>+pl_send_prelock_unlock(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                       posix_lock_t *old_lock)</div><div class='ctx'> {</div><div class='del'>-        struct gf_flock  flock       = {0,};</div><div class='del'>-        posix_lock_t *unlock_lock = NULL;</div><div class='add'>+    struct gf_flock flock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    posix_lock_t *unlock_lock = NULL;</div><div class='ctx'> </div><div class='del'>-        struct list_head granted_list;</div><div class='del'>-        posix_lock_t     *tmp = NULL;</div><div class='del'>-        posix_lock_t     *lock = NULL;</div><div class='add'>+    struct list_head granted_list;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;granted_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;granted_list);</div><div class='ctx'> </div><div class='del'>-        flock.l_type   = F_UNLCK;</div><div class='del'>-        flock.l_whence = old_lock-&gt;user_flock.l_whence;</div><div class='del'>-        flock.l_start  = old_lock-&gt;user_flock.l_start;</div><div class='del'>-        flock.l_len    = old_lock-&gt;user_flock.l_len;</div><div class='del'>-        flock.l_pid    = old_lock-&gt;user_flock.l_pid;</div><div class='add'>+    flock.l_type = F_UNLCK;</div><div class='add'>+    flock.l_whence = old_lock-&gt;user_flock.l_whence;</div><div class='add'>+    flock.l_start = old_lock-&gt;user_flock.l_start;</div><div class='add'>+    flock.l_len = old_lock-&gt;user_flock.l_len;</div><div class='add'>+    flock.l_pid = old_lock-&gt;user_flock.l_pid;</div><div class='ctx'> </div><div class='add'>+    unlock_lock = new_posix_lock(&amp;flock, old_lock-&gt;client, old_lock-&gt;client_pid,</div><div class='add'>+                                 &amp;old_lock-&gt;owner, old_lock-&gt;fd,</div><div class='add'>+                                 old_lock-&gt;lk_flags, 0);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, unlock_lock, out);</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='del'>-        unlock_lock = new_posix_lock (&amp;flock, old_lock-&gt;client,</div><div class='del'>-                                      old_lock-&gt;client_pid, &amp;old_lock-&gt;owner,</div><div class='del'>-                                      old_lock-&gt;fd, old_lock-&gt;lk_flags, 0);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, unlock_lock, out);</div><div class='del'>-        ret = 0;</div><div class='add'>+    __insert_and_merge(pl_inode, unlock_lock);</div><div class='ctx'> </div><div class='del'>-        __insert_and_merge (pl_inode, unlock_lock);</div><div class='add'>+    __grant_blocked_locks(this, pl_inode, &amp;granted_list);</div><div class='ctx'> </div><div class='del'>-        __grant_blocked_locks (this, pl_inode, &amp;granted_list);</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;granted_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;lock-&gt;list);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;granted_list, list) {</div><div class='del'>-                list_del_init (&amp;lock-&gt;list);</div><div class='add'>+        pl_trace_out(this, lock-&gt;frame, NULL, NULL, F_SETLKW, &amp;lock-&gt;user_flock,</div><div class='add'>+                     0, 0, NULL);</div><div class='ctx'> </div><div class='del'>-                pl_trace_out (this, lock-&gt;frame, NULL, NULL, F_SETLKW,</div><div class='del'>-                              &amp;lock-&gt;user_flock, 0, 0, NULL);</div><div class='add'>+        STACK_UNWIND_STRICT(lk, lock-&gt;frame, 0, 0, &amp;lock-&gt;user_flock, NULL);</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (lk, lock-&gt;frame, 0, 0,</div><div class='del'>-                                     &amp;lock-&gt;user_flock, NULL);</div><div class='del'>-</div><div class='del'>-                __destroy_lock(lock);</div><div class='del'>-        }</div><div class='add'>+        __destroy_lock(lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_setlk (xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='del'>-          int can_block)</div><div class='add'>+pl_setlk(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='add'>+         int can_block)</div><div class='ctx'> {</div><div class='del'>-        int              ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        errno = 0;</div><div class='add'>+    errno = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* Send unlock before the actual lock to</div><div class='del'>-                   prevent lock upgrade / downgrade</div><div class='del'>-                   problems only if:</div><div class='del'>-                   - it is a blocking call</div><div class='del'>-                   - it has other conflicting locks</div><div class='del'>-                */</div><div class='del'>-</div><div class='del'>-                if (can_block &amp;&amp;</div><div class='del'>-                    !(__is_lock_grantable (pl_inode, lock))) {</div><div class='del'>-                        ret = pl_send_prelock_unlock (this, pl_inode,</div><div class='del'>-                                                      lock);</div><div class='del'>-                        if (ret)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "Could not send pre-lock "</div><div class='del'>-                                        "unlock");</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* Send unlock before the actual lock to</div><div class='add'>+           prevent lock upgrade / downgrade</div><div class='add'>+           problems only if:</div><div class='add'>+           - it is a blocking call</div><div class='add'>+           - it has other conflicting locks</div><div class='add'>+        */</div><div class='ctx'> </div><div class='del'>-                if (__is_lock_grantable (pl_inode, lock)) {</div><div class='del'>-                        if (pl_metalock_is_active (pl_inode)) {</div><div class='del'>-                                __pl_queue_lock (pl_inode, lock, can_block);</div><div class='del'>-                                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                                ret = -2;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s (pid=%d) lk-owner:%s %"PRId64" - %"PRId64" =&gt; OK",</div><div class='del'>-                                lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                lock-&gt;client_pid,</div><div class='del'>-                                lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                lock-&gt;user_flock.l_start,</div><div class='del'>-                                lock-&gt;user_flock.l_len);</div><div class='del'>-                        __insert_and_merge (pl_inode, lock);</div><div class='del'>-                } else if (can_block) {</div><div class='del'>-                        if (pl_metalock_is_active (pl_inode)) {</div><div class='del'>-                                __pl_queue_lock (pl_inode, lock, can_block);</div><div class='del'>-                                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                                ret = -2;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s (pid=%d) lk-owner:%s %"PRId64" - %"PRId64" =&gt; Blocked",</div><div class='del'>-                                lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                lock-&gt;client_pid,</div><div class='del'>-                                lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                lock-&gt;user_flock.l_start,</div><div class='del'>-                                lock-&gt;user_flock.l_len);</div><div class='del'>-                        lock-&gt;blocked = 1;</div><div class='del'>-                        __insert_lock (pl_inode, lock);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s (pid=%d) lk-owner:%s %"PRId64" - %"PRId64" =&gt; NOK",</div><div class='del'>-                                lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                lock-&gt;client_pid,</div><div class='del'>-                                lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                lock-&gt;user_flock.l_start,</div><div class='del'>-                                lock-&gt;user_flock.l_len);</div><div class='del'>-                        errno = EAGAIN;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                }</div><div class='add'>+        if (can_block &amp;&amp; !(__is_lock_grantable(pl_inode, lock))) {</div><div class='add'>+            ret = pl_send_prelock_unlock(this, pl_inode, lock);</div><div class='add'>+            if (ret)</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                       "Could not send pre-lock "</div><div class='add'>+                       "unlock");</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        grant_blocked_locks (this, pl_inode);</div><div class='add'>+        if (__is_lock_grantable(pl_inode, lock)) {</div><div class='add'>+            if (pl_metalock_is_active(pl_inode)) {</div><div class='add'>+                __pl_queue_lock(pl_inode, lock, can_block);</div><div class='add'>+                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+                ret = -2;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (pid=%d) lk-owner:%s %" PRId64 " - %" PRId64 " =&gt; OK",</div><div class='add'>+                   lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                   lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+                   lock-&gt;user_flock.l_start, lock-&gt;user_flock.l_len);</div><div class='add'>+            __insert_and_merge(pl_inode, lock);</div><div class='add'>+        } else if (can_block) {</div><div class='add'>+            if (pl_metalock_is_active(pl_inode)) {</div><div class='add'>+                __pl_queue_lock(pl_inode, lock, can_block);</div><div class='add'>+                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+                ret = -2;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (pid=%d) lk-owner:%s %" PRId64 " - %" PRId64</div><div class='add'>+                   " =&gt; Blocked",</div><div class='add'>+                   lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                   lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+                   lock-&gt;user_flock.l_start, lock-&gt;user_flock.l_len);</div><div class='add'>+            lock-&gt;blocked = 1;</div><div class='add'>+            __insert_lock(pl_inode, lock);</div><div class='add'>+            ret = -1;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (pid=%d) lk-owner:%s %" PRId64 " - %" PRId64 " =&gt; NOK",</div><div class='add'>+                   lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                   lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+                   lock-&gt;user_flock.l_start, lock-&gt;user_flock.l_len);</div><div class='add'>+            errno = EAGAIN;</div><div class='add'>+            ret = -1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        do_blocked_rw (pl_inode);</div><div class='add'>+    grant_blocked_locks(this, pl_inode);</div><div class='add'>+</div><div class='add'>+    do_blocked_rw(pl_inode);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> posix_lock_t *</div><div class='del'>-pl_getlk (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+pl_getlk(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *conf = NULL;</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        conf = first_conflicting_overlap (pl_inode, lock);</div><div class='add'>+    conf = first_conflicting_overlap(pl_inode, lock);</div><div class='ctx'> </div><div class='del'>-        if (conf == NULL) {</div><div class='del'>-                lock-&gt;fl_type = F_UNLCK;</div><div class='del'>-                return lock;</div><div class='del'>-        }</div><div class='add'>+    if (conf == NULL) {</div><div class='add'>+        lock-&gt;fl_type = F_UNLCK;</div><div class='add'>+        return lock;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return conf;</div><div class='add'>+    return conf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='ctx'> pl_does_monkey_want_stuck_lock()</div><div class='ctx'> {</div><div class='del'>-        long int          monkey_unlock_rand = 0;</div><div class='del'>-        long int          monkey_unlock_rand_rem = 0;</div><div class='del'>-</div><div class='del'>-        /* coverity[DC.WEAK_CRYPTO] */</div><div class='del'>-        monkey_unlock_rand = random ();</div><div class='del'>-        monkey_unlock_rand_rem = monkey_unlock_rand % 100;</div><div class='del'>-        if (monkey_unlock_rand_rem == 0)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    long int monkey_unlock_rand = 0;</div><div class='add'>+    long int monkey_unlock_rand_rem = 0;</div><div class='add'>+</div><div class='add'>+    /* coverity[DC.WEAK_CRYPTO] */</div><div class='add'>+    monkey_unlock_rand = random();</div><div class='add'>+    monkey_unlock_rand_rem = monkey_unlock_rand % 100;</div><div class='add'>+    if (monkey_unlock_rand_rem == 0)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/locks/src/entrylk.c b/xlators/features/locks/src/entrylk.c<br/>index 008d05a34c4..ea78f92d200 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/entrylk.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/src/entrylk.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/entrylk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/entrylk.c</a></div><div class='hunk'>@@ -21,59 +21,56 @@</div><div class='ctx'> #include "pl-messages.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__pl_entrylk_unref (pl_entry_lock_t *lock)</div><div class='add'>+__pl_entrylk_unref(pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;ref--;</div><div class='del'>-        if (!lock-&gt;ref) {</div><div class='del'>-                GF_FREE ((char *)lock-&gt;basename);</div><div class='del'>-                GF_FREE (lock-&gt;connection_id);</div><div class='del'>-                GF_FREE (lock);</div><div class='del'>-        }</div><div class='add'>+    lock-&gt;ref--;</div><div class='add'>+    if (!lock-&gt;ref) {</div><div class='add'>+        GF_FREE((char *)lock-&gt;basename);</div><div class='add'>+        GF_FREE(lock-&gt;connection_id);</div><div class='add'>+        GF_FREE(lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__pl_entrylk_ref (pl_entry_lock_t *lock)</div><div class='add'>+__pl_entrylk_ref(pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;ref++;</div><div class='add'>+    lock-&gt;ref++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static pl_entry_lock_t *</div><div class='del'>-new_entrylk_lock (pl_inode_t *pinode, const char *basename, entrylk_type type,</div><div class='del'>-                  const char *domain, call_frame_t *frame, char *conn_id)</div><div class='add'>+new_entrylk_lock(pl_inode_t *pinode, const char *basename, entrylk_type type,</div><div class='add'>+                 const char *domain, call_frame_t *frame, char *conn_id)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *newlock = NULL;</div><div class='del'>-</div><div class='del'>-        newlock = GF_CALLOC (1, sizeof (pl_entry_lock_t),</div><div class='del'>-                             gf_locks_mt_pl_entry_lock_t);</div><div class='del'>-        if (!newlock) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        newlock-&gt;basename   = basename ? gf_strdup (basename) : NULL;</div><div class='del'>-        newlock-&gt;type       = type;</div><div class='del'>-        newlock-&gt;client     = frame-&gt;root-&gt;client;</div><div class='del'>-        newlock-&gt;client_pid = frame-&gt;root-&gt;pid;</div><div class='del'>-        newlock-&gt;volume     = domain;</div><div class='del'>-        newlock-&gt;owner      = frame-&gt;root-&gt;lk_owner;</div><div class='del'>-        newlock-&gt;frame      = frame;</div><div class='del'>-        newlock-&gt;this       = frame-&gt;this;</div><div class='del'>-</div><div class='del'>-        if (conn_id) {</div><div class='del'>-                newlock-&gt;connection_id = gf_strdup (conn_id);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;newlock-&gt;domain_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newlock-&gt;blocked_locks);</div><div class='del'>-        INIT_LIST_HEAD (&amp;newlock-&gt;client_list);</div><div class='del'>-</div><div class='del'>-        __pl_entrylk_ref (newlock);</div><div class='add'>+    pl_entry_lock_t *newlock = NULL;</div><div class='add'>+</div><div class='add'>+    newlock = GF_CALLOC(1, sizeof(pl_entry_lock_t),</div><div class='add'>+                        gf_locks_mt_pl_entry_lock_t);</div><div class='add'>+    if (!newlock) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newlock-&gt;basename = basename ? gf_strdup(basename) : NULL;</div><div class='add'>+    newlock-&gt;type = type;</div><div class='add'>+    newlock-&gt;client = frame-&gt;root-&gt;client;</div><div class='add'>+    newlock-&gt;client_pid = frame-&gt;root-&gt;pid;</div><div class='add'>+    newlock-&gt;volume = domain;</div><div class='add'>+    newlock-&gt;owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+    newlock-&gt;frame = frame;</div><div class='add'>+    newlock-&gt;this = frame-&gt;this;</div><div class='add'>+</div><div class='add'>+    if (conn_id) {</div><div class='add'>+        newlock-&gt;connection_id = gf_strdup(conn_id);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;newlock-&gt;domain_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newlock-&gt;blocked_locks);</div><div class='add'>+    INIT_LIST_HEAD(&amp;newlock-&gt;client_list);</div><div class='add'>+</div><div class='add'>+    __pl_entrylk_ref(newlock);</div><div class='ctx'> out:</div><div class='del'>-        return newlock;</div><div class='add'>+    return newlock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * all_names - does a basename represent all names?</div><div class='ctx'>  * @basename: name to check</div><div class='hunk'>@@ -88,228 +85,224 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-names_conflict (const char *n1, const char *n2)</div><div class='add'>+names_conflict(const char *n1, const char *n2)</div><div class='ctx'> {</div><div class='del'>-        return all_names (n1) || all_names (n2) || !strcmp (n1, n2);</div><div class='add'>+    return all_names(n1) || all_names(n2) || !strcmp(n1, n2);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-__same_entrylk_owner (pl_entry_lock_t *l1, pl_entry_lock_t *l2)</div><div class='add'>+__same_entrylk_owner(pl_entry_lock_t *l1, pl_entry_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        return (is_same_lkowner (&amp;l1-&gt;owner, &amp;l2-&gt;owner) &amp;&amp;</div><div class='del'>-                (l1-&gt;client  == l2-&gt;client));</div><div class='add'>+    return (is_same_lkowner(&amp;l1-&gt;owner, &amp;l2-&gt;owner) &amp;&amp;</div><div class='add'>+            (l1-&gt;client == l2-&gt;client));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Just as in inodelk, allow conflicting name locks from same (lk_owner, conn)*/</div><div class='ctx'> static int</div><div class='del'>-__conflicting_entrylks (pl_entry_lock_t *l1, pl_entry_lock_t *l2)</div><div class='add'>+__conflicting_entrylks(pl_entry_lock_t *l1, pl_entry_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        if (names_conflict (l1-&gt;basename, l2-&gt;basename)</div><div class='del'>-            &amp;&amp; !__same_entrylk_owner (l1, l2))</div><div class='del'>-                return 1;</div><div class='add'>+    if (names_conflict(l1-&gt;basename, l2-&gt;basename) &amp;&amp;</div><div class='add'>+        !__same_entrylk_owner(l1, l2))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* See comments in inodelk.c for details */</div><div class='ctx'> static inline gf_boolean_t</div><div class='del'>-__stale_entrylk (xlator_t *this, pl_entry_lock_t *candidate_lock,</div><div class='add'>+__stale_entrylk(xlator_t *this, pl_entry_lock_t *candidate_lock,</div><div class='ctx'>                 pl_entry_lock_t *requested_lock, time_t *lock_age_sec)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        struct timeval curr;</div><div class='del'>-        gettimeofday (&amp;curr, NULL);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Question: Should we just prune them all given the</div><div class='del'>-         * chance?  Or just the locks we are attempting to acquire?</div><div class='del'>-         */</div><div class='del'>-        if (names_conflict (candidate_lock-&gt;basename,</div><div class='del'>-                        requested_lock-&gt;basename)) {</div><div class='del'>-                *lock_age_sec = curr.tv_sec -</div><div class='del'>-                        candidate_lock-&gt;granted_time.tv_sec;</div><div class='del'>-                if (*lock_age_sec &gt; priv-&gt;revocation_secs)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    struct timeval curr;</div><div class='add'>+    gettimeofday(&amp;curr, NULL);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Question: Should we just prune them all given the</div><div class='add'>+     * chance?  Or just the locks we are attempting to acquire?</div><div class='add'>+     */</div><div class='add'>+    if (names_conflict(candidate_lock-&gt;basename, requested_lock-&gt;basename)) {</div><div class='add'>+        *lock_age_sec = curr.tv_sec - candidate_lock-&gt;granted_time.tv_sec;</div><div class='add'>+        if (*lock_age_sec &gt; priv-&gt;revocation_secs)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* See comments in inodelk.c for details */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__entrylk_prune_stale (xlator_t *this, pl_inode_t *pinode, pl_dom_list_t *dom,</div><div class='del'>-                 pl_entry_lock_t *lock)</div><div class='add'>+__entrylk_prune_stale(xlator_t *this, pl_inode_t *pinode, pl_dom_list_t *dom,</div><div class='add'>+                      pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        pl_entry_lock_t *tmp = NULL;</div><div class='del'>-        pl_entry_lock_t *lk = NULL;</div><div class='del'>-        gf_boolean_t revoke_lock = _gf_false;</div><div class='del'>-        int bcount = 0;</div><div class='del'>-        int gcount = 0;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        clrlk_args args;</div><div class='del'>-        args.opts = NULL;</div><div class='del'>-        time_t lk_age_sec = 0;</div><div class='del'>-        uint32_t max_blocked = 0;</div><div class='del'>-        char *reason_str = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        args.type = CLRLK_ENTRY;</div><div class='del'>-        if (priv-&gt;revocation_clear_all == _gf_true)</div><div class='del'>-                args.kind = CLRLK_ALL;</div><div class='del'>-        else</div><div class='del'>-                args.kind = CLRLK_GRANTED;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;dom-&gt;entrylk_list))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-        lock-&gt;pinode = pinode;</div><div class='del'>-        list_for_each_entry_safe (lk, tmp, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                if (__stale_entrylk (this, lk, lock, &amp;lk_age_sec) == _gf_true) {</div><div class='del'>-                        revoke_lock = _gf_true;</div><div class='del'>-                        reason_str = "age";</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='add'>+    pl_entry_lock_t *lk = NULL;</div><div class='add'>+    gf_boolean_t revoke_lock = _gf_false;</div><div class='add'>+    int bcount = 0;</div><div class='add'>+    int gcount = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    clrlk_args args;</div><div class='add'>+    args.opts = NULL;</div><div class='add'>+    time_t lk_age_sec = 0;</div><div class='add'>+    uint32_t max_blocked = 0;</div><div class='add'>+    char *reason_str = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    args.type = CLRLK_ENTRY;</div><div class='add'>+    if (priv-&gt;revocation_clear_all == _gf_true)</div><div class='add'>+        args.kind = CLRLK_ALL;</div><div class='add'>+    else</div><div class='add'>+        args.kind = CLRLK_GRANTED;</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;dom-&gt;entrylk_list))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+    lock-&gt;pinode = pinode;</div><div class='add'>+    list_for_each_entry_safe(lk, tmp, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='add'>+    {</div><div class='add'>+        if (__stale_entrylk(this, lk, lock, &amp;lk_age_sec) == _gf_true) {</div><div class='add'>+            revoke_lock = _gf_true;</div><div class='add'>+            reason_str = "age";</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='del'>-        max_blocked = priv-&gt;revocation_max_blocked;</div><div class='del'>-        if (max_blocked != 0 &amp;&amp; revoke_lock == _gf_false) {</div><div class='del'>-                list_for_each_entry_safe (lk, tmp, &amp;dom-&gt;blocked_entrylks,</div><div class='del'>-                                blocked_locks) {</div><div class='del'>-                        max_blocked--;</div><div class='del'>-                        if (max_blocked == 0) {</div><div class='del'>-                                revoke_lock = _gf_true;</div><div class='del'>-                                reason_str = "max blocked";</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    }</div><div class='add'>+    max_blocked = priv-&gt;revocation_max_blocked;</div><div class='add'>+    if (max_blocked != 0 &amp;&amp; revoke_lock == _gf_false) {</div><div class='add'>+        list_for_each_entry_safe(lk, tmp, &amp;dom-&gt;blocked_entrylks, blocked_locks)</div><div class='add'>+        {</div><div class='add'>+            max_blocked--;</div><div class='add'>+            if (max_blocked == 0) {</div><div class='add'>+                revoke_lock = _gf_true;</div><div class='add'>+                reason_str = "max blocked";</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (revoke_lock == _gf_true) {</div><div class='del'>-                clrlk_clear_entrylk (this, pinode, dom, &amp;args, &amp;bcount, &amp;gcount,</div><div class='del'>-                    &amp;op_errno);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Lock revocation [reason: %s; gfid: %s; domain: %s; "</div><div class='del'>-                        "age: %ld sec] - Entry lock revoked:  %d granted &amp; %d "</div><div class='del'>-                        "blocked locks cleared", reason_str,</div><div class='del'>-                        uuid_utoa (pinode-&gt;gfid), dom-&gt;domain, lk_age_sec,</div><div class='del'>-                        gcount, bcount);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return revoke_lock;</div><div class='add'>+    if (revoke_lock == _gf_true) {</div><div class='add'>+        clrlk_clear_entrylk(this, pinode, dom, &amp;args, &amp;bcount, &amp;gcount,</div><div class='add'>+                            &amp;op_errno);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Lock revocation [reason: %s; gfid: %s; domain: %s; "</div><div class='add'>+               "age: %ld sec] - Entry lock revoked:  %d granted &amp; %d "</div><div class='add'>+               "blocked locks cleared",</div><div class='add'>+               reason_str, uuid_utoa(pinode-&gt;gfid), dom-&gt;domain, lk_age_sec,</div><div class='add'>+               gcount, bcount);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return revoke_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> __entrylk_needs_contention_notify(xlator_t *this, pl_entry_lock_t *lock,</div><div class='ctx'>                                   struct timespec *now)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv;</div><div class='del'>-        int64_t elapsed;</div><div class='add'>+    posix_locks_private_t *priv;</div><div class='add'>+    int64_t elapsed;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        /* If this lock is in a list, it means that we are about to send a</div><div class='del'>-         * notification for it, so no need to do anything else. */</div><div class='del'>-        if (!list_empty(&amp;lock-&gt;contend)) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        elapsed = now-&gt;tv_sec;</div><div class='del'>-        elapsed -= lock-&gt;contention_time.tv_sec;</div><div class='del'>-        if (now-&gt;tv_nsec &lt; lock-&gt;contention_time.tv_nsec) {</div><div class='del'>-                elapsed--;</div><div class='del'>-        }</div><div class='del'>-        if (elapsed &lt; priv-&gt;notify_contention_delay) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    /* If this lock is in a list, it means that we are about to send a</div><div class='add'>+     * notification for it, so no need to do anything else. */</div><div class='add'>+    if (!list_empty(&amp;lock-&gt;contend)) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    elapsed = now-&gt;tv_sec;</div><div class='add'>+    elapsed -= lock-&gt;contention_time.tv_sec;</div><div class='add'>+    if (now-&gt;tv_nsec &lt; lock-&gt;contention_time.tv_nsec) {</div><div class='add'>+        elapsed--;</div><div class='add'>+    }</div><div class='add'>+    if (elapsed &lt; priv-&gt;notify_contention_delay) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* All contention notifications will be sent outside of the locked</div><div class='del'>-         * region. This means that currently granted locks might have already</div><div class='del'>-         * been unlocked by that time. To avoid the lock or the inode to be</div><div class='del'>-         * destroyed before we process them, we take an additional reference</div><div class='del'>-         * on both. */</div><div class='del'>-        inode_ref(lock-&gt;pinode-&gt;inode);</div><div class='del'>-        __pl_entrylk_ref(lock);</div><div class='add'>+    /* All contention notifications will be sent outside of the locked</div><div class='add'>+     * region. This means that currently granted locks might have already</div><div class='add'>+     * been unlocked by that time. To avoid the lock or the inode to be</div><div class='add'>+     * destroyed before we process them, we take an additional reference</div><div class='add'>+     * on both. */</div><div class='add'>+    inode_ref(lock-&gt;pinode-&gt;inode);</div><div class='add'>+    __pl_entrylk_ref(lock);</div><div class='ctx'> </div><div class='del'>-        lock-&gt;contention_time = *now;</div><div class='add'>+    lock-&gt;contention_time = *now;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> entrylk_contention_notify(xlator_t *this, struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        struct gf_upcall up;</div><div class='del'>-        struct gf_upcall_entrylk_contention lc;</div><div class='del'>-        pl_entry_lock_t *lock;</div><div class='del'>-        pl_inode_t *pl_inode;</div><div class='del'>-        client_t *client;</div><div class='del'>-        gf_boolean_t notify;</div><div class='del'>-</div><div class='del'>-        while (!list_empty(contend)) {</div><div class='del'>-                lock = list_first_entry(contend, pl_entry_lock_t, contend);</div><div class='del'>-</div><div class='del'>-                pl_inode = lock-&gt;pinode;</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                /* If the lock has already been released, no notification is</div><div class='del'>-                 * sent. We clear the notification time in this case. */</div><div class='del'>-                notify = !list_empty(&amp;lock-&gt;domain_list);</div><div class='del'>-                if (!notify) {</div><div class='del'>-                        lock-&gt;contention_time.tv_sec = 0;</div><div class='del'>-                        lock-&gt;contention_time.tv_nsec = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        lc.type = lock-&gt;type;</div><div class='del'>-                        lc.name = lock-&gt;basename;</div><div class='del'>-                        lc.pid = lock-&gt;client_pid;</div><div class='del'>-                        lc.domain = lock-&gt;volume;</div><div class='del'>-                        lc.xdata = NULL;</div><div class='del'>-</div><div class='del'>-                        gf_uuid_copy(up.gfid, lock-&gt;pinode-&gt;gfid);</div><div class='del'>-                        client = (client_t *)lock-&gt;client;</div><div class='del'>-                        if (client == NULL) {</div><div class='del'>-                                /* A NULL client can be found if the entrylk</div><div class='del'>-                                 * was issued by a server side xlator. */</div><div class='del'>-                                up.client_uid = NULL;</div><div class='del'>-                        } else {</div><div class='del'>-                                up.client_uid = client-&gt;client_uid;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    struct gf_upcall up;</div><div class='add'>+    struct gf_upcall_entrylk_contention lc;</div><div class='add'>+    pl_entry_lock_t *lock;</div><div class='add'>+    pl_inode_t *pl_inode;</div><div class='add'>+    client_t *client;</div><div class='add'>+    gf_boolean_t notify;</div><div class='add'>+</div><div class='add'>+    while (!list_empty(contend)) {</div><div class='add'>+        lock = list_first_entry(contend, pl_entry_lock_t, contend);</div><div class='add'>+</div><div class='add'>+        pl_inode = lock-&gt;pinode;</div><div class='add'>+</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        /* If the lock has already been released, no notification is</div><div class='add'>+         * sent. We clear the notification time in this case. */</div><div class='add'>+        notify = !list_empty(&amp;lock-&gt;domain_list);</div><div class='add'>+        if (!notify) {</div><div class='add'>+            lock-&gt;contention_time.tv_sec = 0;</div><div class='add'>+            lock-&gt;contention_time.tv_nsec = 0;</div><div class='add'>+        } else {</div><div class='add'>+            lc.type = lock-&gt;type;</div><div class='add'>+            lc.name = lock-&gt;basename;</div><div class='add'>+            lc.pid = lock-&gt;client_pid;</div><div class='add'>+            lc.domain = lock-&gt;volume;</div><div class='add'>+            lc.xdata = NULL;</div><div class='add'>+</div><div class='add'>+            gf_uuid_copy(up.gfid, lock-&gt;pinode-&gt;gfid);</div><div class='add'>+            client = (client_t *)lock-&gt;client;</div><div class='add'>+            if (client == NULL) {</div><div class='add'>+                /* A NULL client can be found if the entrylk</div><div class='add'>+                 * was issued by a server side xlator. */</div><div class='add'>+                up.client_uid = NULL;</div><div class='add'>+            } else {</div><div class='add'>+                up.client_uid = client-&gt;client_uid;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                if (notify) {</div><div class='del'>-                        up.event_type = GF_UPCALL_ENTRYLK_CONTENTION;</div><div class='del'>-                        up.data = &amp;lc;</div><div class='del'>-</div><div class='del'>-                        if (this-&gt;notify(this, GF_EVENT_UPCALL, &amp;up) &lt; 0) {</div><div class='del'>-                                gf_msg_debug(this-&gt;name, 0,</div><div class='del'>-                                             "Entrylk contention notification "</div><div class='del'>-                                             "failed");</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg_debug(this-&gt;name, 0,</div><div class='del'>-                                             "Entrylk contention notification "</div><div class='del'>-                                             "sent");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        if (notify) {</div><div class='add'>+            up.event_type = GF_UPCALL_ENTRYLK_CONTENTION;</div><div class='add'>+            up.data = &amp;lc;</div><div class='add'>+</div><div class='add'>+            if (this-&gt;notify(this, GF_EVENT_UPCALL, &amp;up) &lt; 0) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Entrylk contention notification "</div><div class='add'>+                             "failed");</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Entrylk contention notification "</div><div class='add'>+                             "sent");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                list_del_init(&amp;lock-&gt;contend);</div><div class='del'>-                __pl_entrylk_unref(lock);</div><div class='add'>+        list_del_init(&amp;lock-&gt;contend);</div><div class='add'>+        __pl_entrylk_unref(lock);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                inode_unref(pl_inode-&gt;inode);</div><div class='del'>-        }</div><div class='add'>+        inode_unref(pl_inode-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * entrylk_grantable - is this lock grantable?</div><div class='ctx'>  * @inode: inode in which to look</div><div class='hunk'>@@ -317,189 +310,190 @@ entrylk_contention_notify(xlator_t *this, struct list_head *contend)</div><div class='ctx'>  * @type: type of lock</div><div class='ctx'>  */</div><div class='ctx'> static pl_entry_lock_t *</div><div class='del'>-__entrylk_grantable (xlator_t *this, pl_dom_list_t *dom, pl_entry_lock_t *lock,</div><div class='del'>-                     struct timespec *now, struct list_head *contend)</div><div class='add'>+__entrylk_grantable(xlator_t *this, pl_dom_list_t *dom, pl_entry_lock_t *lock,</div><div class='add'>+                    struct timespec *now, struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *tmp = NULL;</div><div class='del'>-        pl_entry_lock_t *ret = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (tmp, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                if (__conflicting_entrylks (tmp, lock)) {</div><div class='del'>-                        if (ret == NULL) {</div><div class='del'>-                                ret = tmp;</div><div class='del'>-                                if (contend == NULL) {</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        if (__entrylk_needs_contention_notify(this, tmp, now)) {</div><div class='del'>-                                list_add_tail(&amp;tmp-&gt;contend, contend);</div><div class='del'>-                        }</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='add'>+    pl_entry_lock_t *ret = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(tmp, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='add'>+    {</div><div class='add'>+        if (__conflicting_entrylks(tmp, lock)) {</div><div class='add'>+            if (ret == NULL) {</div><div class='add'>+                ret = tmp;</div><div class='add'>+                if (contend == NULL) {</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            if (__entrylk_needs_contention_notify(this, tmp, now)) {</div><div class='add'>+                list_add_tail(&amp;tmp-&gt;contend, contend);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static pl_entry_lock_t *</div><div class='del'>-__blocked_entrylk_conflict (pl_dom_list_t *dom, pl_entry_lock_t *lock)</div><div class='add'>+__blocked_entrylk_conflict(pl_dom_list_t *dom, pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *tmp = NULL;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (tmp, &amp;dom-&gt;blocked_entrylks, blocked_locks) {</div><div class='del'>-                if (names_conflict (tmp-&gt;basename, lock-&gt;basename))</div><div class='del'>-                        return lock;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(tmp, &amp;dom-&gt;blocked_entrylks, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        if (names_conflict(tmp-&gt;basename, lock-&gt;basename))</div><div class='add'>+            return lock;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__owner_has_lock (pl_dom_list_t *dom, pl_entry_lock_t *newlock)</div><div class='add'>+__owner_has_lock(pl_dom_list_t *dom, pl_entry_lock_t *newlock)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *lock = NULL;</div><div class='add'>+    pl_entry_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                if (__same_entrylk_owner (lock, newlock))</div><div class='del'>-                        return 1;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='add'>+    {</div><div class='add'>+        if (__same_entrylk_owner(lock, newlock))</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;blocked_entrylks, blocked_locks) {</div><div class='del'>-                if (__same_entrylk_owner (lock, newlock))</div><div class='del'>-                        return 1;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;blocked_entrylks, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        if (__same_entrylk_owner(lock, newlock))</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-names_equal (const char *n1, const char *n2)</div><div class='add'>+names_equal(const char *n1, const char *n2)</div><div class='ctx'> {</div><div class='del'>-        return (n1 == NULL &amp;&amp; n2 == NULL) || (n1 &amp;&amp; n2 &amp;&amp; !strcmp (n1, n2));</div><div class='add'>+    return (n1 == NULL &amp;&amp; n2 == NULL) || (n1 &amp;&amp; n2 &amp;&amp; !strcmp(n1, n2));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_print_entrylk (char *str, int size, entrylk_cmd cmd, entrylk_type type,</div><div class='del'>-                  const char *basename, const char *domain)</div><div class='add'>+pl_print_entrylk(char *str, int size, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+                 const char *basename, const char *domain)</div><div class='ctx'> {</div><div class='del'>-        char *cmd_str = NULL;</div><div class='del'>-        char *type_str = NULL;</div><div class='add'>+    char *cmd_str = NULL;</div><div class='add'>+    char *type_str = NULL;</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case ENTRYLK_LOCK:</div><div class='del'>-                cmd_str = "LOCK";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "LOCK";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ENTRYLK_LOCK_NB:</div><div class='del'>-                cmd_str = "LOCK_NB";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "LOCK_NB";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ENTRYLK_UNLOCK:</div><div class='del'>-                cmd_str = "UNLOCK";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "UNLOCK";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                cmd_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            cmd_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (type) {</div><div class='add'>+    switch (type) {</div><div class='ctx'>         case ENTRYLK_RDLCK:</div><div class='del'>-                type_str = "READ";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "READ";</div><div class='add'>+            break;</div><div class='ctx'>         case ENTRYLK_WRLCK:</div><div class='del'>-                type_str = "WRITE";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "WRITE";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                type_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            type_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        snprintf (str, size, "lock=ENTRYLK, cmd=%s, type=%s, basename=%s, domain: %s",</div><div class='del'>-                  cmd_str, type_str, basename, domain);</div><div class='add'>+    snprintf(str, size,</div><div class='add'>+             "lock=ENTRYLK, cmd=%s, type=%s, basename=%s, domain: %s", cmd_str,</div><div class='add'>+             type_str, basename, domain);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-entrylk_trace_in (xlator_t *this, call_frame_t *frame, const char *domain,</div><div class='del'>-                  fd_t *fd, loc_t *loc, const char *basename,</div><div class='del'>-                  entrylk_cmd cmd, entrylk_type type)</div><div class='add'>+entrylk_trace_in(xlator_t *this, call_frame_t *frame, const char *domain,</div><div class='add'>+                 fd_t *fd, loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                 entrylk_type type)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        char                    pl_entrylk[256];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    char pl_entrylk[256];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, loc);</div><div class='del'>-        pl_print_entrylk (pl_entrylk, 256, cmd, type, basename, domain);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, loc);</div><div class='add'>+    pl_print_entrylk(pl_entrylk, 256, cmd, type, basename, domain);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[REQUEST] Locker = {%s} Lockee = {%s} Lock = {%s}",</div><div class='del'>-                pl_locker, pl_lockee, pl_entrylk);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "[REQUEST] Locker = {%s} Lockee = {%s} Lock = {%s}", pl_locker,</div><div class='add'>+           pl_lockee, pl_entrylk);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-entrylk_trace_out (xlator_t *this, call_frame_t *frame, const char *domain,</div><div class='del'>-                   fd_t *fd, loc_t *loc, const char *basename,</div><div class='del'>-                   entrylk_cmd cmd, entrylk_type type, int op_ret, int op_errno)</div><div class='add'>+entrylk_trace_out(xlator_t *this, call_frame_t *frame, const char *domain,</div><div class='add'>+                  fd_t *fd, loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                  entrylk_type type, int op_ret, int op_errno)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        char                    pl_entrylk[256];</div><div class='del'>-        char                    verdict[32];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    char pl_entrylk[256];</div><div class='add'>+    char verdict[32];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, loc);</div><div class='del'>-        pl_print_entrylk (pl_entrylk, 256, cmd, type, basename, domain);</div><div class='del'>-        pl_print_verdict (verdict, 32, op_ret, op_errno);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, loc);</div><div class='add'>+    pl_print_entrylk(pl_entrylk, 256, cmd, type, basename, domain);</div><div class='add'>+    pl_print_verdict(verdict, 32, op_ret, op_errno);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[%s] Locker = {%s} Lockee = {%s} Lock = {%s}",</div><div class='del'>-                verdict, pl_locker, pl_lockee, pl_entrylk);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "[%s] Locker = {%s} Lockee = {%s} Lock = {%s}", verdict, pl_locker,</div><div class='add'>+           pl_lockee, pl_entrylk);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-entrylk_trace_block (xlator_t *this, call_frame_t *frame, const char *volume,</div><div class='del'>-                     fd_t *fd, loc_t *loc, const char *basename,</div><div class='del'>-                     entrylk_cmd cmd, entrylk_type type)</div><div class='add'>+entrylk_trace_block(xlator_t *this, call_frame_t *frame, const char *volume,</div><div class='add'>+                    fd_t *fd, loc_t *loc, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                    entrylk_type type)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        char                    pl_locker[256];</div><div class='del'>-        char                    pl_lockee[256];</div><div class='del'>-        char                    pl_entrylk[256];</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char pl_locker[256];</div><div class='add'>+    char pl_lockee[256];</div><div class='add'>+    char pl_entrylk[256];</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;trace)</div><div class='del'>-                return;</div><div class='add'>+    if (!priv-&gt;trace)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        pl_print_locker (pl_locker, 256, this, frame);</div><div class='del'>-        pl_print_lockee (pl_lockee, 256, fd, loc);</div><div class='del'>-        pl_print_entrylk (pl_entrylk, 256, cmd, type, basename, volume);</div><div class='add'>+    pl_print_locker(pl_locker, 256, this, frame);</div><div class='add'>+    pl_print_lockee(pl_lockee, 256, fd, loc);</div><div class='add'>+    pl_print_entrylk(pl_entrylk, 256, cmd, type, basename, volume);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO,</div><div class='del'>-                "[BLOCKED] Locker = {%s} Lockee = {%s} Lock = {%s}",</div><div class='del'>-                pl_locker, pl_lockee, pl_entrylk);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "[BLOCKED] Locker = {%s} Lockee = {%s} Lock = {%s}", pl_locker,</div><div class='add'>+           pl_lockee, pl_entrylk);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='del'>- * __find_most_matching_lock - find the lock struct which most matches in order of:</div><div class='del'>- *                           lock on the exact basename ||</div><div class='del'>- *                           an all_names lock</div><div class='add'>+ * __find_most_matching_lock - find the lock struct which most matches in order</div><div class='add'>+ * of: lock on the exact basename || an all_names lock</div><div class='ctx'>  *</div><div class='ctx'>  *</div><div class='ctx'>  * @inode: inode in which to look</div><div class='hunk'>@@ -507,58 +501,59 @@ entrylk_trace_block (xlator_t *this, call_frame_t *frame, const char *volume,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static pl_entry_lock_t *</div><div class='del'>-__find_most_matching_lock (pl_dom_list_t *dom, const char *basename)</div><div class='add'>+__find_most_matching_lock(pl_dom_list_t *dom, const char *basename)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *lock;</div><div class='del'>-        pl_entry_lock_t *all = NULL;</div><div class='del'>-        pl_entry_lock_t *exact = NULL;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;dom-&gt;entrylk_list))</div><div class='del'>-                return NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                if (all_names (lock-&gt;basename))</div><div class='del'>-                        all = lock;</div><div class='del'>-                else if (names_equal (lock-&gt;basename, basename))</div><div class='del'>-                        exact = lock;</div><div class='del'>-        }</div><div class='add'>+    pl_entry_lock_t *lock;</div><div class='add'>+    pl_entry_lock_t *all = NULL;</div><div class='add'>+    pl_entry_lock_t *exact = NULL;</div><div class='ctx'> </div><div class='del'>-        return (exact ? exact : all);</div><div class='add'>+    if (list_empty(&amp;dom-&gt;entrylk_list))</div><div class='add'>+        return NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='add'>+    {</div><div class='add'>+        if (all_names(lock-&gt;basename))</div><div class='add'>+            all = lock;</div><div class='add'>+        else if (names_equal(lock-&gt;basename, basename))</div><div class='add'>+            exact = lock;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return (exact ? exact : all);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static pl_entry_lock_t*</div><div class='del'>-__find_matching_lock (pl_dom_list_t *dom, pl_entry_lock_t *lock)</div><div class='add'>+static pl_entry_lock_t *</div><div class='add'>+__find_matching_lock(pl_dom_list_t *dom, pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (tmp, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                if (names_equal (lock-&gt;basename, tmp-&gt;basename)</div><div class='del'>-                    &amp;&amp; __same_entrylk_owner (lock, tmp)</div><div class='del'>-                    &amp;&amp; (lock-&gt;type == tmp-&gt;type))</div><div class='del'>-                        return tmp;</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(tmp, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='add'>+    {</div><div class='add'>+        if (names_equal(lock-&gt;basename, tmp-&gt;basename) &amp;&amp;</div><div class='add'>+            __same_entrylk_owner(lock, tmp) &amp;&amp; (lock-&gt;type == tmp-&gt;type))</div><div class='add'>+            return tmp;</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> __lock_blocked_add(xlator_t *this, pl_inode_t *pinode, pl_dom_list_t *dom,</div><div class='ctx'>                    pl_entry_lock_t *lock, int nonblock)</div><div class='ctx'> {</div><div class='del'>-        struct timeval now;</div><div class='add'>+    struct timeval now;</div><div class='ctx'> </div><div class='del'>-        gettimeofday(&amp;now, NULL);</div><div class='add'>+    gettimeofday(&amp;now, NULL);</div><div class='ctx'> </div><div class='del'>-        if (nonblock)</div><div class='del'>-                goto out;</div><div class='add'>+    if (nonblock)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;blkd_time = now;</div><div class='del'>-        list_add_tail (&amp;lock-&gt;blocked_locks, &amp;dom-&gt;blocked_entrylks);</div><div class='add'>+    lock-&gt;blkd_time = now;</div><div class='add'>+    list_add_tail(&amp;lock-&gt;blocked_locks, &amp;dom-&gt;blocked_entrylks);</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "Blocking lock: {pinode=%p, basename=%s}",</div><div class='del'>-                      pinode, lock-&gt;basename);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0, "Blocking lock: {pinode=%p, basename=%s}",</div><div class='add'>+                 pinode, lock-&gt;basename);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return -EAGAIN;</div><div class='add'>+    return -EAGAIN;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -573,49 +568,49 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__lock_entrylk (xlator_t *this, pl_inode_t *pinode, pl_entry_lock_t *lock,</div><div class='del'>-                int nonblock, pl_dom_list_t *dom, struct timespec *now,</div><div class='del'>-                struct list_head *contend)</div><div class='add'>+__lock_entrylk(xlator_t *this, pl_inode_t *pinode, pl_entry_lock_t *lock,</div><div class='add'>+               int nonblock, pl_dom_list_t *dom, struct timespec *now,</div><div class='add'>+               struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *conf = NULL;</div><div class='del'>-        int              ret  = -EAGAIN;</div><div class='del'>-</div><div class='del'>-        conf = __entrylk_grantable (this, dom, lock, now, contend);</div><div class='del'>-        if (conf) {</div><div class='del'>-                ret = __lock_blocked_add(this, pinode, dom, lock, nonblock);</div><div class='del'>-                goto out;</div><div class='add'>+    pl_entry_lock_t *conf = NULL;</div><div class='add'>+    int ret = -EAGAIN;</div><div class='add'>+</div><div class='add'>+    conf = __entrylk_grantable(this, dom, lock, now, contend);</div><div class='add'>+    if (conf) {</div><div class='add'>+        ret = __lock_blocked_add(this, pinode, dom, lock, nonblock);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* To prevent blocked locks starvation, check if there are any blocked</div><div class='add'>+     * locks thay may conflict with this lock. If there is then don't grant</div><div class='add'>+     * the lock. BUT grant the lock if the owner already has lock to allow</div><div class='add'>+     * nested locks.</div><div class='add'>+     * Example: SHD from Machine1 takes (gfid, basename=257-length-name)</div><div class='add'>+     * and is granted.</div><div class='add'>+     * SHD from machine2 takes (gfid, basename=NULL) and is blocked.</div><div class='add'>+     * When SHD from Machine1 takes (gfid, basename=NULL) it needs to be</div><div class='add'>+     * granted, without which self-heal can't progress.</div><div class='add'>+     * TODO: Find why 'owner_has_lock' is checked even for blocked locks.</div><div class='add'>+     */</div><div class='add'>+    if (__blocked_entrylk_conflict(dom, lock) &amp;&amp;</div><div class='add'>+        !(__owner_has_lock(dom, lock))) {</div><div class='add'>+        if (nonblock == 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "Lock is grantable, but blocking to prevent "</div><div class='add'>+                   "starvation");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* To prevent blocked locks starvation, check if there are any blocked</div><div class='del'>-         * locks thay may conflict with this lock. If there is then don't grant</div><div class='del'>-         * the lock. BUT grant the lock if the owner already has lock to allow</div><div class='del'>-         * nested locks.</div><div class='del'>-         * Example: SHD from Machine1 takes (gfid, basename=257-length-name)</div><div class='del'>-         * and is granted.</div><div class='del'>-         * SHD from machine2 takes (gfid, basename=NULL) and is blocked.</div><div class='del'>-         * When SHD from Machine1 takes (gfid, basename=NULL) it needs to be</div><div class='del'>-         * granted, without which self-heal can't progress.</div><div class='del'>-         * TODO: Find why 'owner_has_lock' is checked even for blocked locks.</div><div class='del'>-         */</div><div class='del'>-        if (__blocked_entrylk_conflict (dom, lock) &amp;&amp;</div><div class='del'>-            !(__owner_has_lock (dom, lock))) {</div><div class='del'>-                if (nonblock == 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "Lock is grantable, but blocking to prevent "</div><div class='del'>-                                "starvation");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = __lock_blocked_add(this, pinode, dom, lock, nonblock);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        ret = __lock_blocked_add(this, pinode, dom, lock, nonblock);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __pl_entrylk_ref (lock);</div><div class='del'>-        gettimeofday (&amp;lock-&gt;granted_time, NULL);</div><div class='del'>-        list_add (&amp;lock-&gt;domain_list, &amp;dom-&gt;entrylk_list);</div><div class='add'>+    __pl_entrylk_ref(lock);</div><div class='add'>+    gettimeofday(&amp;lock-&gt;granted_time, NULL);</div><div class='add'>+    list_add(&amp;lock-&gt;domain_list, &amp;dom-&gt;entrylk_list);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -626,327 +621,327 @@ out:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> pl_entry_lock_t *</div><div class='del'>-__unlock_entrylk (pl_dom_list_t *dom, pl_entry_lock_t *lock)</div><div class='add'>+__unlock_entrylk(pl_dom_list_t *dom, pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        pl_entry_lock_t *ret_lock = NULL;</div><div class='add'>+    pl_entry_lock_t *ret_lock = NULL;</div><div class='ctx'> </div><div class='del'>-        ret_lock = __find_matching_lock (dom, lock);</div><div class='add'>+    ret_lock = __find_matching_lock(dom, lock);</div><div class='ctx'> </div><div class='del'>-        if (ret_lock) {</div><div class='del'>-                list_del_init (&amp;ret_lock-&gt;domain_list);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log ("locks", GF_LOG_ERROR, "unlock on %s "</div><div class='del'>-                        "(type=ENTRYLK_WRLCK) attempted but no matching lock "</div><div class='del'>-                        "found", lock-&gt;basename);</div><div class='del'>-        }</div><div class='add'>+    if (ret_lock) {</div><div class='add'>+        list_del_init(&amp;ret_lock-&gt;domain_list);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log("locks", GF_LOG_ERROR,</div><div class='add'>+               "unlock on %s "</div><div class='add'>+               "(type=ENTRYLK_WRLCK) attempted but no matching lock "</div><div class='add'>+               "found",</div><div class='add'>+               lock-&gt;basename);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret_lock;</div><div class='add'>+    return ret_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-check_entrylk_on_basename (xlator_t *this, inode_t *parent, char *basename)</div><div class='add'>+check_entrylk_on_basename(xlator_t *this, inode_t *parent, char *basename)</div><div class='ctx'> {</div><div class='del'>-        int32_t         entrylk = 0;</div><div class='del'>-        pl_inode_t      *pinode = 0;</div><div class='del'>-        pl_dom_list_t   *dom = NULL;</div><div class='del'>-        pl_entry_lock_t *conf       = NULL;</div><div class='del'>-</div><div class='del'>-        pinode = pl_inode_get (this, parent);</div><div class='del'>-        if (!pinode)</div><div class='del'>-                goto out;</div><div class='del'>-        pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='add'>+    int32_t entrylk = 0;</div><div class='add'>+    pl_inode_t *pinode = 0;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_entry_lock_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    pinode = pl_inode_get(this, parent);</div><div class='add'>+    if (!pinode)</div><div class='add'>+        goto out;</div><div class='add'>+    pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(dom, &amp;pinode-&gt;dom_list, inode_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (dom, &amp;pinode-&gt;dom_list, inode_list) {</div><div class='del'>-                        conf = __find_most_matching_lock (dom, basename);</div><div class='del'>-                        if (conf &amp;&amp; conf-&gt;basename) {</div><div class='del'>-                                entrylk = 1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            conf = __find_most_matching_lock(dom, basename);</div><div class='add'>+            if (conf &amp;&amp; conf-&gt;basename) {</div><div class='add'>+                entrylk = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return entrylk;</div><div class='add'>+    return entrylk;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__grant_blocked_entry_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                             pl_dom_list_t *dom, struct list_head *granted,</div><div class='del'>-                             struct timespec *now, struct list_head *contend)</div><div class='add'>+__grant_blocked_entry_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                            pl_dom_list_t *dom, struct list_head *granted,</div><div class='add'>+                            struct timespec *now, struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        int              bl_ret = 0;</div><div class='del'>-        pl_entry_lock_t *bl   = NULL;</div><div class='del'>-        pl_entry_lock_t *tmp  = NULL;</div><div class='del'>-</div><div class='del'>-        struct list_head blocked_list;</div><div class='add'>+    int bl_ret = 0;</div><div class='add'>+    pl_entry_lock_t *bl = NULL;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;blocked_list);</div><div class='del'>-        list_splice_init (&amp;dom-&gt;blocked_entrylks, &amp;blocked_list);</div><div class='add'>+    struct list_head blocked_list;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (bl, tmp, &amp;blocked_list, blocked_locks) {</div><div class='add'>+    INIT_LIST_HEAD(&amp;blocked_list);</div><div class='add'>+    list_splice_init(&amp;dom-&gt;blocked_entrylks, &amp;blocked_list);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;bl-&gt;blocked_locks);</div><div class='add'>+    list_for_each_entry_safe(bl, tmp, &amp;blocked_list, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;bl-&gt;blocked_locks);</div><div class='ctx'> </div><div class='del'>-                bl_ret = __lock_entrylk (bl-&gt;this, pl_inode, bl, 0, dom, now,</div><div class='del'>-                                         contend);</div><div class='add'>+        bl_ret = __lock_entrylk(bl-&gt;this, pl_inode, bl, 0, dom, now, contend);</div><div class='ctx'> </div><div class='del'>-                if (bl_ret == 0) {</div><div class='del'>-                        list_add (&amp;bl-&gt;blocked_locks, granted);</div><div class='del'>-                }</div><div class='add'>+        if (bl_ret == 0) {</div><div class='add'>+            list_add(&amp;bl-&gt;blocked_locks, granted);</div><div class='ctx'>         }</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Grants locks if possible which are blocked on a lock */</div><div class='ctx'> void</div><div class='del'>-grant_blocked_entry_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                           pl_dom_list_t *dom, struct timespec *now,</div><div class='del'>-                           struct list_head *contend)</div><div class='add'>+grant_blocked_entry_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                          pl_dom_list_t *dom, struct timespec *now,</div><div class='add'>+                          struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        struct list_head  granted_list;</div><div class='del'>-        pl_entry_lock_t  *tmp = NULL;</div><div class='del'>-        pl_entry_lock_t  *lock = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;granted_list);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    struct list_head granted_list;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='add'>+    pl_entry_lock_t *lock = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;granted_list);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __grant_blocked_entry_locks(this, pl_inode, dom, &amp;granted_list, now,</div><div class='add'>+                                    contend);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;granted_list, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        entrylk_trace_out(this, lock-&gt;frame, NULL, NULL, NULL, lock-&gt;basename,</div><div class='add'>+                          ENTRYLK_LOCK, lock-&gt;type, 0, 0);</div><div class='add'>+</div><div class='add'>+        STACK_UNWIND_STRICT(entrylk, lock-&gt;frame, 0, 0, NULL);</div><div class='add'>+        lock-&gt;frame = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(lock, tmp, &amp;granted_list, blocked_locks)</div><div class='ctx'>         {</div><div class='del'>-                __grant_blocked_entry_locks (this, pl_inode, dom,</div><div class='del'>-                                             &amp;granted_list, now, contend);</div><div class='add'>+            list_del_init(&amp;lock-&gt;blocked_locks);</div><div class='add'>+            __pl_entrylk_unref(lock);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;granted_list, blocked_locks) {</div><div class='del'>-                entrylk_trace_out (this, lock-&gt;frame, NULL, NULL, NULL,</div><div class='del'>-                                   lock-&gt;basename, ENTRYLK_LOCK, lock-&gt;type,</div><div class='del'>-                                   0, 0);</div><div class='del'>-</div><div class='del'>-                STACK_UNWIND_STRICT (entrylk, lock-&gt;frame, 0, 0, NULL);</div><div class='del'>-		lock-&gt;frame = NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-		list_for_each_entry_safe (lock, tmp, &amp;granted_list, blocked_locks) {</div><div class='del'>-			list_del_init (&amp;lock-&gt;blocked_locks);</div><div class='del'>-			__pl_entrylk_unref (lock);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Common entrylk code called by pl_entrylk and pl_fentrylk */</div><div class='ctx'> int</div><div class='del'>-pl_common_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   const char *volume, inode_t *inode, const char *basename,</div><div class='del'>-                   entrylk_cmd cmd, entrylk_type type, loc_t *loc, fd_t *fd,</div><div class='del'>-                   dict_t *xdata)</div><div class='add'>+pl_common_entrylk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                  inode_t *inode, const char *basename, entrylk_cmd cmd,</div><div class='add'>+                  entrylk_type type, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        int32_t          op_ret           = -1;</div><div class='del'>-        int32_t          op_errno         =  0;</div><div class='del'>-        int              ret              = -1;</div><div class='del'>-        char             unwind           =  1;</div><div class='del'>-        GF_UNUSED int    dict_ret         = -1;</div><div class='del'>-        pl_inode_t      *pinode           =  NULL;</div><div class='del'>-        pl_entry_lock_t *reqlock          =  NULL;</div><div class='del'>-        pl_entry_lock_t *unlocked         =  NULL;</div><div class='del'>-        pl_dom_list_t   *dom              =  NULL;</div><div class='del'>-        char            *conn_id          =  NULL;</div><div class='del'>-        pl_ctx_t        *ctx              =  NULL;</div><div class='del'>-	int              nonblock         =  0;</div><div class='del'>-        gf_boolean_t     need_inode_unref =  _gf_false;</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        struct list_head *pcontend = NULL;</div><div class='del'>-        struct list_head contend;</div><div class='del'>-        struct timespec  now = { };</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;notify_contention) {</div><div class='del'>-                pcontend = &amp;contend;</div><div class='del'>-                INIT_LIST_HEAD(pcontend);</div><div class='del'>-                timespec_now(&amp;now);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_ret = dict_get_str (xdata, "connection-id", &amp;conn_id);</div><div class='del'>-</div><div class='del'>-        pinode = pl_inode_get (this, inode);</div><div class='del'>-        if (!pinode) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char unwind = 1;</div><div class='add'>+    GF_UNUSED int dict_ret = -1;</div><div class='add'>+    pl_inode_t *pinode = NULL;</div><div class='add'>+    pl_entry_lock_t *reqlock = NULL;</div><div class='add'>+    pl_entry_lock_t *unlocked = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    char *conn_id = NULL;</div><div class='add'>+    pl_ctx_t *ctx = NULL;</div><div class='add'>+    int nonblock = 0;</div><div class='add'>+    gf_boolean_t need_inode_unref = _gf_false;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    struct list_head *pcontend = NULL;</div><div class='add'>+    struct list_head contend;</div><div class='add'>+    struct timespec now = {};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;notify_contention) {</div><div class='add'>+        pcontend = &amp;contend;</div><div class='add'>+        INIT_LIST_HEAD(pcontend);</div><div class='add'>+        timespec_now(&amp;now);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_ret = dict_get_str(xdata, "connection-id", &amp;conn_id);</div><div class='add'>+</div><div class='add'>+    pinode = pl_inode_get(this, inode);</div><div class='add'>+    if (!pinode) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;client) {</div><div class='add'>+        ctx = pl_ctx_get(frame-&gt;root-&gt;client, this);</div><div class='add'>+        if (!ctx) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "pl_ctx_get() failed");</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-	if (frame-&gt;root-&gt;client) {</div><div class='del'>-		ctx = pl_ctx_get (frame-&gt;root-&gt;client, this);</div><div class='del'>-		if (!ctx) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			gf_log (this-&gt;name, GF_LOG_INFO, "pl_ctx_get() failed");</div><div class='del'>-			goto unwind;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        dom = get_domain (pinode, volume);</div><div class='del'>-        if (!dom){</div><div class='del'>-                op_errno = ENOMEM;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dom = get_domain(pinode, volume);</div><div class='add'>+    if (!dom) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    entrylk_trace_in(this, frame, volume, fd, loc, basename, cmd, type);</div><div class='add'>+</div><div class='add'>+    reqlock = new_entrylk_lock(pinode, basename, type, dom-&gt;domain, frame,</div><div class='add'>+                               conn_id);</div><div class='add'>+    if (!reqlock) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Ideally, AFTER a successful lock (both blocking and non-blocking) or</div><div class='add'>+     * an unsuccessful blocking lock operation, the inode needs to be ref'd.</div><div class='add'>+     *</div><div class='add'>+     * But doing so might give room to a race where the lock-requesting</div><div class='add'>+     * client could send a DISCONNECT just before this thread refs the inode</div><div class='add'>+     * after the locking is done, and the epoll thread could unref the inode</div><div class='add'>+     * in cleanup which means the inode's refcount would come down to 0, and</div><div class='add'>+     * the call to pl_forget() at this point destroys @pinode. Now when</div><div class='add'>+     * the io-thread executing this function tries to access pinode,</div><div class='add'>+     * it could crash on account of illegal memory access.</div><div class='add'>+     *</div><div class='add'>+     * To get around this problem, the inode is ref'd once even before</div><div class='add'>+     * adding the lock into client_list as a precautionary measure.</div><div class='add'>+     * This way even if there are DISCONNECTs, there will always be 1 extra</div><div class='add'>+     * ref on the inode, so @pinode is still alive until after the</div><div class='add'>+     * current stack unwinds.</div><div class='add'>+     */</div><div class='add'>+    pinode-&gt;inode = inode_ref(inode);</div><div class='add'>+    if (priv-&gt;revocation_secs != 0) {</div><div class='add'>+        if (cmd != ENTRYLK_UNLOCK) {</div><div class='add'>+            __entrylk_prune_stale(this, pinode, dom, reqlock);</div><div class='add'>+        } else if (priv-&gt;monkey_unlocking == _gf_true) {</div><div class='add'>+            if (pl_does_monkey_want_stuck_lock()) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "MONKEY LOCKING (forcing stuck lock)!");</div><div class='add'>+                op_ret = 0;</div><div class='add'>+                need_inode_unref = _gf_true;</div><div class='add'>+                pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+                {</div><div class='add'>+                    __pl_entrylk_unref(reqlock);</div><div class='add'>+                }</div><div class='add'>+                pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        entrylk_trace_in (this, frame, volume, fd, loc, basename, cmd, type);</div><div class='add'>+    switch (cmd) {</div><div class='add'>+        case ENTRYLK_LOCK_NB:</div><div class='add'>+            nonblock = 1;</div><div class='add'>+            /* fall through */</div><div class='add'>+        case ENTRYLK_LOCK:</div><div class='add'>+            if (ctx)</div><div class='add'>+                pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+            pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                reqlock-&gt;pinode = pinode;</div><div class='add'>+</div><div class='add'>+                ret = __lock_entrylk(this, pinode, reqlock, nonblock, dom, &amp;now,</div><div class='add'>+                                     pcontend);</div><div class='add'>+                if (ret == 0) {</div><div class='add'>+                    reqlock-&gt;frame = NULL;</div><div class='add'>+                    op_ret = 0;</div><div class='add'>+                } else {</div><div class='add'>+                    op_errno = -ret;</div><div class='add'>+                }</div><div class='ctx'> </div><div class='del'>-        reqlock = new_entrylk_lock (pinode, basename, type, dom-&gt;domain, frame,</div><div class='del'>-				    conn_id);</div><div class='del'>-        if (!reqlock) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+                if (ctx &amp;&amp; (!ret || !nonblock))</div><div class='add'>+                    list_add(&amp;reqlock-&gt;client_list, &amp;ctx-&gt;entrylk_lockers);</div><div class='ctx'> </div><div class='del'>-        /* Ideally, AFTER a successful lock (both blocking and non-blocking) or</div><div class='del'>-         * an unsuccessful blocking lock operation, the inode needs to be ref'd.</div><div class='del'>-         *</div><div class='del'>-         * But doing so might give room to a race where the lock-requesting</div><div class='del'>-         * client could send a DISCONNECT just before this thread refs the inode</div><div class='del'>-         * after the locking is done, and the epoll thread could unref the inode</div><div class='del'>-         * in cleanup which means the inode's refcount would come down to 0, and</div><div class='del'>-         * the call to pl_forget() at this point destroys @pinode. Now when</div><div class='del'>-         * the io-thread executing this function tries to access pinode,</div><div class='del'>-         * it could crash on account of illegal memory access.</div><div class='del'>-         *</div><div class='del'>-         * To get around this problem, the inode is ref'd once even before</div><div class='del'>-         * adding the lock into client_list as a precautionary measure.</div><div class='del'>-         * This way even if there are DISCONNECTs, there will always be 1 extra</div><div class='del'>-         * ref on the inode, so @pinode is still alive until after the</div><div class='del'>-         * current stack unwinds.</div><div class='del'>-         */</div><div class='del'>-        pinode-&gt;inode = inode_ref (inode);</div><div class='del'>-        if (priv-&gt;revocation_secs != 0) {</div><div class='del'>-                if (cmd != ENTRYLK_UNLOCK) {</div><div class='del'>-                        __entrylk_prune_stale (this, pinode, dom, reqlock);</div><div class='del'>-                } else if (priv-&gt;monkey_unlocking == _gf_true) {</div><div class='del'>-                        if (pl_does_monkey_want_stuck_lock ()) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                    "MONKEY LOCKING (forcing stuck lock)!");</div><div class='del'>-                                op_ret = 0;</div><div class='del'>-                                need_inode_unref = _gf_true;</div><div class='del'>-                                pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-                                {</div><div class='del'>-                                        __pl_entrylk_unref (reqlock);</div><div class='del'>-                                }</div><div class='del'>-                                pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+                if (ret == -EAGAIN &amp;&amp; !nonblock) {</div><div class='add'>+                    /* blocked */</div><div class='add'>+                    unwind = 0;</div><div class='add'>+                } else {</div><div class='add'>+                    __pl_entrylk_unref(reqlock);</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='del'>-        case ENTRYLK_LOCK_NB:</div><div class='del'>-		nonblock = 1;</div><div class='del'>-		/* fall through */</div><div class='del'>-	case ENTRYLK_LOCK:</div><div class='del'>-		if (ctx)</div><div class='del'>-			pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='del'>-                pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-			reqlock-&gt;pinode = pinode;</div><div class='del'>-</div><div class='del'>-                        ret = __lock_entrylk (this, pinode, reqlock, nonblock,</div><div class='del'>-                                              dom, &amp;now, pcontend);</div><div class='del'>-			if (ret == 0) {</div><div class='del'>-				reqlock-&gt;frame = NULL;</div><div class='del'>-				op_ret = 0;</div><div class='del'>-			} else {</div><div class='del'>-				op_errno = -ret;</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-			if (ctx &amp;&amp; (!ret || !nonblock))</div><div class='del'>-				list_add (&amp;reqlock-&gt;client_list,</div><div class='del'>-					  &amp;ctx-&gt;entrylk_lockers);</div><div class='del'>-</div><div class='del'>-			if (ret == -EAGAIN &amp;&amp; !nonblock) {</div><div class='del'>-				/* blocked */</div><div class='del'>-				unwind = 0;</div><div class='del'>-			} else {</div><div class='del'>-				__pl_entrylk_unref (reqlock);</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-                        /* For all but the case where a non-blocking lock</div><div class='del'>-                         * attempt fails, the extra ref taken before the switch</div><div class='del'>-                         * block must be negated.</div><div class='del'>-                         */</div><div class='del'>-                        if ((ret == -EAGAIN) &amp;&amp; (nonblock))</div><div class='del'>-                                need_inode_unref = _gf_true;</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='del'>-		if (ctx)</div><div class='del'>-			pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='del'>-		break;</div><div class='add'>+                /* For all but the case where a non-blocking lock</div><div class='add'>+                 * attempt fails, the extra ref taken before the switch</div><div class='add'>+                 * block must be negated.</div><div class='add'>+                 */</div><div class='add'>+                if ((ret == -EAGAIN) &amp;&amp; (nonblock))</div><div class='add'>+                    need_inode_unref = _gf_true;</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='add'>+            if (ctx)</div><div class='add'>+                pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case ENTRYLK_UNLOCK:</div><div class='del'>-		if (ctx)</div><div class='del'>-			pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='del'>-                pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        /* Irrespective of whether unlock succeeds or not,</div><div class='del'>-                         * the extra inode ref that was done before the switch</div><div class='del'>-                         * block must be negated. Towards this,</div><div class='del'>-                         * @need_inode_unref flag is set unconditionally here.</div><div class='del'>-                         */</div><div class='del'>-                        need_inode_unref = _gf_true;</div><div class='del'>-                        unlocked = __unlock_entrylk (dom, reqlock);</div><div class='del'>-			if (unlocked) {</div><div class='del'>-				list_del_init (&amp;unlocked-&gt;client_list);</div><div class='del'>-				__pl_entrylk_unref (unlocked);</div><div class='del'>-				op_ret = 0;</div><div class='del'>-			} else {</div><div class='del'>-				op_errno = EINVAL;</div><div class='del'>-			}</div><div class='del'>-			__pl_entrylk_unref (reqlock);</div><div class='add'>+            if (ctx)</div><div class='add'>+                pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+            pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                /* Irrespective of whether unlock succeeds or not,</div><div class='add'>+                 * the extra inode ref that was done before the switch</div><div class='add'>+                 * block must be negated. Towards this,</div><div class='add'>+                 * @need_inode_unref flag is set unconditionally here.</div><div class='add'>+                 */</div><div class='add'>+                need_inode_unref = _gf_true;</div><div class='add'>+                unlocked = __unlock_entrylk(dom, reqlock);</div><div class='add'>+                if (unlocked) {</div><div class='add'>+                    list_del_init(&amp;unlocked-&gt;client_list);</div><div class='add'>+                    __pl_entrylk_unref(unlocked);</div><div class='add'>+                    op_ret = 0;</div><div class='add'>+                } else {</div><div class='add'>+                    op_errno = EINVAL;</div><div class='ctx'>                 }</div><div class='del'>-                pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='del'>-		if (ctx)</div><div class='del'>-			pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='add'>+                __pl_entrylk_unref(reqlock);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='add'>+            if (ctx)</div><div class='add'>+                pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-		grant_blocked_entry_locks (this, pinode, dom, &amp;now, pcontend);</div><div class='add'>+            grant_blocked_entry_locks(this, pinode, dom, &amp;now, pcontend);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                need_inode_unref = _gf_true;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "Unexpected case in entrylk (cmd=%d). Please file"</div><div class='del'>-                        "a bug report at http://bugs.gluster.com", cmd);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        /* The following (extra) unref corresponds to the ref that</div><div class='del'>-         * was done at the time the lock was granted.</div><div class='del'>-         */</div><div class='del'>-        if ((cmd == ENTRYLK_UNLOCK) &amp;&amp; (op_ret == 0))</div><div class='del'>-                inode_unref (pinode-&gt;inode);</div><div class='add'>+            need_inode_unref = _gf_true;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Unexpected case in entrylk (cmd=%d). Please file"</div><div class='add'>+                   "a bug report at http://bugs.gluster.com",</div><div class='add'>+                   cmd);</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+    /* The following (extra) unref corresponds to the ref that</div><div class='add'>+     * was done at the time the lock was granted.</div><div class='add'>+     */</div><div class='add'>+    if ((cmd == ENTRYLK_UNLOCK) &amp;&amp; (op_ret == 0))</div><div class='add'>+        inode_unref(pinode-&gt;inode);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        if (need_inode_unref)</div><div class='del'>-                inode_unref (pinode-&gt;inode);</div><div class='add'>+    if (need_inode_unref)</div><div class='add'>+        inode_unref(pinode-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (unwind) {</div><div class='del'>-                entrylk_trace_out (this, frame, volume, fd, loc, basename,</div><div class='del'>-                                   cmd, type, op_ret, op_errno);</div><div class='del'>-unwind:</div><div class='del'>-                STACK_UNWIND_STRICT (entrylk, frame, op_ret, op_errno, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                entrylk_trace_block (this, frame, volume, fd, loc, basename,</div><div class='del'>-                                     cmd, type);</div><div class='del'>-        }</div><div class='add'>+    if (unwind) {</div><div class='add'>+        entrylk_trace_out(this, frame, volume, fd, loc, basename, cmd, type,</div><div class='add'>+                          op_ret, op_errno);</div><div class='add'>+    unwind:</div><div class='add'>+        STACK_UNWIND_STRICT(entrylk, frame, op_ret, op_errno, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        entrylk_trace_block(this, frame, volume, fd, loc, basename, cmd, type);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (pcontend != NULL) {</div><div class='del'>-                entrylk_contention_notify(this, pcontend);</div><div class='del'>-        }</div><div class='add'>+    if (pcontend != NULL) {</div><div class='add'>+        entrylk_contention_notify(this, pcontend);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /**</div><div class='hunk'>@@ -956,17 +951,16 @@ unwind:</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            const char *volume, loc_t *loc, const char *basename,</div><div class='del'>-            entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+pl_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_common_entrylk (frame, this, volume, loc-&gt;inode, basename, cmd,</div><div class='del'>-                           type, loc, NULL, xdata);</div><div class='add'>+    pl_common_entrylk(frame, this, volume, loc-&gt;inode, basename, cmd, type, loc,</div><div class='add'>+                      NULL, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /**</div><div class='ctx'>  * pl_fentrylk:</div><div class='ctx'>  *</div><div class='hunk'>@@ -974,191 +968,186 @@ pl_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fentrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *volume, fd_t *fd, const char *basename,</div><div class='del'>-             entrylk_cmd cmd, entrylk_type type, dict_t *xdata)</div><div class='add'>+pl_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+            const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_common_entrylk (frame, this, volume, fd-&gt;inode, basename, cmd,</div><div class='del'>-                           type, NULL, fd, xdata);</div><div class='add'>+    pl_common_entrylk(frame, this, volume, fd-&gt;inode, basename, cmd, type, NULL,</div><div class='add'>+                      fd, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-pl_entrylk_log_cleanup (pl_entry_lock_t *lock)</div><div class='add'>+pl_entrylk_log_cleanup(pl_entry_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-	pl_inode_t *pinode = NULL;</div><div class='add'>+    pl_inode_t *pinode = NULL;</div><div class='ctx'> </div><div class='del'>-	pinode = lock-&gt;pinode;</div><div class='add'>+    pinode = lock-&gt;pinode;</div><div class='ctx'> </div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                "releasing lock on %s held by "</div><div class='del'>-                "{client=%p, pid=%"PRId64" lk-owner=%s}",</div><div class='del'>-                uuid_utoa (pinode-&gt;gfid), lock-&gt;client,</div><div class='del'>-                (uint64_t) lock-&gt;client_pid, lkowner_utoa (&amp;lock-&gt;owner));</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+           "releasing lock on %s held by "</div><div class='add'>+           "{client=%p, pid=%" PRId64 " lk-owner=%s}",</div><div class='add'>+           uuid_utoa(pinode-&gt;gfid), lock-&gt;client, (uint64_t)lock-&gt;client_pid,</div><div class='add'>+           lkowner_utoa(&amp;lock-&gt;owner));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Release all entrylks from this client */</div><div class='ctx'> int</div><div class='del'>-pl_entrylk_client_cleanup (xlator_t *this, pl_ctx_t *ctx)</div><div class='add'>+pl_entrylk_client_cleanup(xlator_t *this, pl_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv;</div><div class='del'>-        pl_entry_lock_t *tmp = NULL;</div><div class='del'>-        pl_entry_lock_t *l = NULL;</div><div class='del'>-        pl_dom_list_t *dom = NULL;</div><div class='del'>-        pl_inode_t *pinode = NULL;</div><div class='del'>-        struct list_head *pcontend = NULL;</div><div class='del'>-        struct list_head released;</div><div class='del'>-        struct list_head unwind;</div><div class='del'>-        struct list_head contend;</div><div class='del'>-        struct timespec now = { };</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;released);</div><div class='del'>-        INIT_LIST_HEAD (&amp;unwind);</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv-&gt;notify_contention) {</div><div class='del'>-                pcontend = &amp;contend;</div><div class='del'>-                INIT_LIST_HEAD (pcontend);</div><div class='del'>-                timespec_now(&amp;now);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='add'>+    posix_locks_private_t *priv;</div><div class='add'>+    pl_entry_lock_t *tmp = NULL;</div><div class='add'>+    pl_entry_lock_t *l = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_inode_t *pinode = NULL;</div><div class='add'>+    struct list_head *pcontend = NULL;</div><div class='add'>+    struct list_head released;</div><div class='add'>+    struct list_head unwind;</div><div class='add'>+    struct list_head contend;</div><div class='add'>+    struct timespec now = {};</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;released);</div><div class='add'>+    INIT_LIST_HEAD(&amp;unwind);</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv-&gt;notify_contention) {</div><div class='add'>+        pcontend = &amp;contend;</div><div class='add'>+        INIT_LIST_HEAD(pcontend);</div><div class='add'>+        timespec_now(&amp;now);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(l, tmp, &amp;ctx-&gt;entrylk_lockers, client_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (l, tmp, &amp;ctx-&gt;entrylk_lockers,</div><div class='del'>-                                          client_list) {</div><div class='del'>-                        pl_entrylk_log_cleanup (l);</div><div class='del'>-</div><div class='del'>-                        pinode = l-&gt;pinode;</div><div class='del'>-</div><div class='del'>-                        pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-                        {</div><div class='del'>-                        /* If the entrylk object is part of granted list but not</div><div class='del'>-                         * blocked list, then perform the following actions:</div><div class='del'>-                         * i.   delete the object from granted list;</div><div class='del'>-                         * ii.  grant other locks (from other clients) that may</div><div class='del'>-                         *      have been blocked on this entrylk; and</div><div class='del'>-                         * iii. unref the object.</div><div class='del'>-                         *</div><div class='del'>-                         * If the entrylk object (L1) is part of both granted</div><div class='del'>-                         * and blocked lists, then this means that a parallel</div><div class='del'>-                         * unlock on another entrylk (L2 say) may have 'granted'</div><div class='del'>-                         * L1 and added it to 'granted' list in</div><div class='del'>-                         * __grant_blocked_entry_locks() (although using the</div><div class='del'>-                         * 'blocked_locks' member). In that case, the cleanup</div><div class='del'>-                         * codepath must try and grant other overlapping</div><div class='del'>-                         * blocked entrylks from other clients, now that L1 is</div><div class='del'>-                         * out of their way and then unref L1 in the end, and</div><div class='del'>-                         * leave it to the other thread (the one executing</div><div class='del'>-                         * unlock codepath) to unwind L1's frame, delete it from</div><div class='del'>-                         * blocked_locks list, and perform the last unref on L1.</div><div class='del'>-                         *</div><div class='del'>-                         * If the entrylk object (L1) is part of blocked list</div><div class='del'>-                         * only, the cleanup code path must:</div><div class='del'>-                         * i.   delete it from the blocked_locks list inside</div><div class='del'>-                         *      this critical section,</div><div class='del'>-                         * ii.  unwind its frame with EAGAIN,</div><div class='del'>-                         * iii. try and grant blocked entry locks from other</div><div class='del'>-                         *      clients that were otherwise grantable, but were</div><div class='del'>-                         *      blocked to avoid leaving L1 to starve forever.</div><div class='del'>-                         * iv.  unref the object.</div><div class='del'>-                         */</div><div class='del'>-                                list_del_init (&amp;l-&gt;client_list);</div><div class='del'>-</div><div class='del'>-                                if (!list_empty (&amp;l-&gt;domain_list)) {</div><div class='del'>-                                        list_del_init (&amp;l-&gt;domain_list);</div><div class='del'>-                                        list_add_tail (&amp;l-&gt;client_list,</div><div class='del'>-                                                       &amp;released);</div><div class='del'>-                                } else {</div><div class='del'>-                                        list_del_init (&amp;l-&gt;blocked_locks);</div><div class='del'>-                                        list_add_tail (&amp;l-&gt;client_list,</div><div class='del'>-                                                       &amp;unwind);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='add'>+            pl_entrylk_log_cleanup(l);</div><div class='add'>+</div><div class='add'>+            pinode = l-&gt;pinode;</div><div class='add'>+</div><div class='add'>+            pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                /* If the entrylk object is part of granted list but not</div><div class='add'>+                 * blocked list, then perform the following actions:</div><div class='add'>+                 * i.   delete the object from granted list;</div><div class='add'>+                 * ii.  grant other locks (from other clients) that may</div><div class='add'>+                 *      have been blocked on this entrylk; and</div><div class='add'>+                 * iii. unref the object.</div><div class='add'>+                 *</div><div class='add'>+                 * If the entrylk object (L1) is part of both granted</div><div class='add'>+                 * and blocked lists, then this means that a parallel</div><div class='add'>+                 * unlock on another entrylk (L2 say) may have 'granted'</div><div class='add'>+                 * L1 and added it to 'granted' list in</div><div class='add'>+                 * __grant_blocked_entry_locks() (although using the</div><div class='add'>+                 * 'blocked_locks' member). In that case, the cleanup</div><div class='add'>+                 * codepath must try and grant other overlapping</div><div class='add'>+                 * blocked entrylks from other clients, now that L1 is</div><div class='add'>+                 * out of their way and then unref L1 in the end, and</div><div class='add'>+                 * leave it to the other thread (the one executing</div><div class='add'>+                 * unlock codepath) to unwind L1's frame, delete it from</div><div class='add'>+                 * blocked_locks list, and perform the last unref on L1.</div><div class='add'>+                 *</div><div class='add'>+                 * If the entrylk object (L1) is part of blocked list</div><div class='add'>+                 * only, the cleanup code path must:</div><div class='add'>+                 * i.   delete it from the blocked_locks list inside</div><div class='add'>+                 *      this critical section,</div><div class='add'>+                 * ii.  unwind its frame with EAGAIN,</div><div class='add'>+                 * iii. try and grant blocked entry locks from other</div><div class='add'>+                 *      clients that were otherwise grantable, but were</div><div class='add'>+                 *      blocked to avoid leaving L1 to starve forever.</div><div class='add'>+                 * iv.  unref the object.</div><div class='add'>+                 */</div><div class='add'>+                list_del_init(&amp;l-&gt;client_list);</div><div class='add'>+</div><div class='add'>+                if (!list_empty(&amp;l-&gt;domain_list)) {</div><div class='add'>+                    list_del_init(&amp;l-&gt;domain_list);</div><div class='add'>+                    list_add_tail(&amp;l-&gt;client_list, &amp;released);</div><div class='add'>+                } else {</div><div class='add'>+                    list_del_init(&amp;l-&gt;blocked_locks);</div><div class='add'>+                    list_add_tail(&amp;l-&gt;client_list, &amp;unwind);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;unwind, client_list) {</div><div class='del'>-                list_del_init (&amp;l-&gt;client_list);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-                if (l-&gt;frame)</div><div class='del'>-                        STACK_UNWIND_STRICT (entrylk, l-&gt;frame, -1, EAGAIN,</div><div class='del'>-                                             NULL);</div><div class='del'>-                list_add_tail (&amp;l-&gt;client_list, &amp;released);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;unwind, client_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;l-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;released, client_list) {</div><div class='del'>-                list_del_init (&amp;l-&gt;client_list);</div><div class='add'>+        if (l-&gt;frame)</div><div class='add'>+            STACK_UNWIND_STRICT(entrylk, l-&gt;frame, -1, EAGAIN, NULL);</div><div class='add'>+        list_add_tail(&amp;l-&gt;client_list, &amp;released);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                pinode = l-&gt;pinode;</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;released, client_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;l-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-                dom = get_domain (pinode, l-&gt;volume);</div><div class='add'>+        pinode = l-&gt;pinode;</div><div class='ctx'> </div><div class='del'>-                grant_blocked_entry_locks (this, pinode, dom, &amp;now, pcontend);</div><div class='add'>+        dom = get_domain(pinode, l-&gt;volume);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        __pl_entrylk_unref (l);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='add'>+        grant_blocked_entry_locks(this, pinode, dom, &amp;now, pcontend);</div><div class='ctx'> </div><div class='del'>-                inode_unref (pinode-&gt;inode);</div><div class='add'>+        pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            __pl_entrylk_unref(l);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        if (pcontend != NULL) {</div><div class='del'>-                entrylk_contention_notify(this, pcontend);</div><div class='del'>-        }</div><div class='add'>+        inode_unref(pinode-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+    if (pcontend != NULL) {</div><div class='add'>+        entrylk_contention_notify(this, pcontend);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-__get_entrylk_count (xlator_t *this, pl_inode_t *pl_inode)</div><div class='add'>+__get_entrylk_count(xlator_t *this, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        int32_t            count = 0;</div><div class='del'>-        pl_entry_lock_t   *lock  = NULL;</div><div class='del'>-        pl_dom_list_t     *dom   = NULL;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    pl_entry_lock_t *lock = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (dom, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='del'>-                list_for_each_entry (lock, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (lock, &amp;dom-&gt;blocked_entrylks, blocked_locks) {</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(dom, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(lock, &amp;dom-&gt;entrylk_list, domain_list) { count++; }</div><div class='ctx'> </div><div class='add'>+        list_for_each_entry(lock, &amp;dom-&gt;blocked_entrylks, blocked_locks)</div><div class='add'>+        {</div><div class='add'>+            count++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-get_entrylk_count (xlator_t *this, inode_t *inode)</div><div class='add'>+get_entrylk_count(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t   *pl_inode = NULL;</div><div class='del'>-        uint64_t      tmp_pl_inode = 0;</div><div class='del'>-        int           ret      = 0;</div><div class='del'>-        int32_t       count    = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    uint64_t tmp_pl_inode = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t count = 0;</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;tmp_pl_inode);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;tmp_pl_inode);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pl_inode = (pl_inode_t *)(long) tmp_pl_inode;</div><div class='add'>+    pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                count = __get_entrylk_count (this, pl_inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        count = __get_entrylk_count(this, pl_inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/locks/src/inodelk.c b/xlators/features/locks/src/inodelk.c<br/>index 890ac8b6d00..eff58a79569 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/inodelk.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/src/inodelk.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/inodelk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/inodelk.c</a></div><div class='hunk'>@@ -21,115 +21,115 @@</div><div class='ctx'> #include "pl-messages.h"</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__delete_inode_lock (pl_inode_lock_t *lock)</div><div class='add'>+__delete_inode_lock(pl_inode_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        list_del_init (&amp;lock-&gt;list);</div><div class='add'>+    list_del_init(&amp;lock-&gt;list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__pl_inodelk_ref (pl_inode_lock_t *lock)</div><div class='add'>+__pl_inodelk_ref(pl_inode_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;ref++;</div><div class='add'>+    lock-&gt;ref++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__pl_inodelk_unref (pl_inode_lock_t *lock)</div><div class='add'>+__pl_inodelk_unref(pl_inode_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;ref--;</div><div class='del'>-        if (!lock-&gt;ref) {</div><div class='del'>-                GF_FREE (lock-&gt;connection_id);</div><div class='del'>-                GF_FREE (lock);</div><div class='del'>-        }</div><div class='add'>+    lock-&gt;ref--;</div><div class='add'>+    if (!lock-&gt;ref) {</div><div class='add'>+        GF_FREE(lock-&gt;connection_id);</div><div class='add'>+        GF_FREE(lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Check if 2 inodelks are conflicting on type. Only 2 shared locks don't conflict */</div><div class='add'>+/* Check if 2 inodelks are conflicting on type. Only 2 shared locks don't</div><div class='add'>+ * conflict */</div><div class='ctx'> static int</div><div class='del'>-inodelk_type_conflict (pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='add'>+inodelk_type_conflict(pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        if (l2-&gt;fl_type == F_WRLCK || l1-&gt;fl_type == F_WRLCK)</div><div class='del'>-                return 1;</div><div class='add'>+    if (l2-&gt;fl_type == F_WRLCK || l1-&gt;fl_type == F_WRLCK)</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_print_inodelk (char *str, int size, int cmd, struct gf_flock *flock, const char *domain)</div><div class='add'>+pl_print_inodelk(char *str, int size, int cmd, struct gf_flock *flock,</div><div class='add'>+                 const char *domain)</div><div class='ctx'> {</div><div class='del'>-        char *cmd_str = NULL;</div><div class='del'>-        char *type_str = NULL;</div><div class='add'>+    char *cmd_str = NULL;</div><div class='add'>+    char *type_str = NULL;</div><div class='ctx'> </div><div class='del'>-        switch (cmd) {</div><div class='add'>+    switch (cmd) {</div><div class='ctx'> #if F_GETLK != F_GETLK64</div><div class='ctx'>         case F_GETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_GETLK:</div><div class='del'>-                cmd_str = "GETLK";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "GETLK";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLK != F_SETLK64</div><div class='ctx'>         case F_SETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLK:</div><div class='del'>-                cmd_str = "SETLK";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "SETLK";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLKW != F_SETLKW64</div><div class='ctx'>         case F_SETLKW64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLKW:</div><div class='del'>-                cmd_str = "SETLKW";</div><div class='del'>-                break;</div><div class='add'>+            cmd_str = "SETLKW";</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                cmd_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='add'>+            cmd_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        switch (flock-&gt;l_type) {</div><div class='add'>+    switch (flock-&gt;l_type) {</div><div class='ctx'>         case F_RDLCK:</div><div class='del'>-                type_str = "READ";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "READ";</div><div class='add'>+            break;</div><div class='ctx'>         case F_WRLCK:</div><div class='del'>-                type_str = "WRITE";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "WRITE";</div><div class='add'>+            break;</div><div class='ctx'>         case F_UNLCK:</div><div class='del'>-                type_str = "UNLOCK";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "UNLOCK";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                type_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        snprintf (str, size, "lock=INODELK, cmd=%s, type=%s, "</div><div class='del'>-                  "domain: %s, start=%llu, len=%llu, pid=%llu",</div><div class='del'>-                  cmd_str, type_str, domain,</div><div class='del'>-                  (unsigned long long) flock-&gt;l_start,</div><div class='del'>-                  (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                  (unsigned long long) flock-&gt;l_pid);</div><div class='add'>+            type_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    snprintf(str, size,</div><div class='add'>+             "lock=INODELK, cmd=%s, type=%s, "</div><div class='add'>+             "domain: %s, start=%llu, len=%llu, pid=%llu",</div><div class='add'>+             cmd_str, type_str, domain, (unsigned long long)flock-&gt;l_start,</div><div class='add'>+             (unsigned long long)flock-&gt;l_len,</div><div class='add'>+             (unsigned long long)flock-&gt;l_pid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Determine if the two inodelks overlap reach other's lock regions */</div><div class='ctx'> static int</div><div class='del'>-inodelk_overlap (pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='add'>+inodelk_overlap(pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        return ((l1-&gt;fl_end &gt;= l2-&gt;fl_start) &amp;&amp;</div><div class='del'>-                (l2-&gt;fl_end &gt;= l1-&gt;fl_start));</div><div class='add'>+    return ((l1-&gt;fl_end &gt;= l2-&gt;fl_start) &amp;&amp; (l2-&gt;fl_end &gt;= l1-&gt;fl_start));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns true if the 2 inodelks have the same owner */</div><div class='ctx'> static int</div><div class='del'>-same_inodelk_owner (pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='add'>+same_inodelk_owner(pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        return (is_same_lkowner (&amp;l1-&gt;owner, &amp;l2-&gt;owner) &amp;&amp;</div><div class='del'>-                (l1-&gt;client == l2-&gt;client));</div><div class='add'>+    return (is_same_lkowner(&amp;l1-&gt;owner, &amp;l2-&gt;owner) &amp;&amp;</div><div class='add'>+            (l1-&gt;client == l2-&gt;client));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns true if the 2 inodelks conflict with each other */</div><div class='ctx'> static int</div><div class='del'>-inodelk_conflict (pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='add'>+inodelk_conflict(pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        return (inodelk_overlap (l1, l2) &amp;&amp;</div><div class='del'>-                inodelk_type_conflict (l1, l2));</div><div class='add'>+    return (inodelk_overlap(l1, l2) &amp;&amp; inodelk_type_conflict(l1, l2));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='hunk'>@@ -138,24 +138,23 @@ inodelk_conflict (pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='ctx'>  * true if it exceeds the configured threshold, false otherwise.</div><div class='ctx'>  */</div><div class='ctx'> static inline gf_boolean_t</div><div class='del'>-__stale_inodelk (xlator_t *this, pl_inode_lock_t *candidate_lock,</div><div class='add'>+__stale_inodelk(xlator_t *this, pl_inode_lock_t *candidate_lock,</div><div class='ctx'>                 pl_inode_lock_t *requested_lock, time_t *lock_age_sec)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        struct timeval curr;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        gettimeofday (&amp;curr, NULL);</div><div class='del'>-        /* Question: Should we just prune them all given the</div><div class='del'>-         * chance?  Or just the locks we are attempting to acquire?</div><div class='del'>-         */</div><div class='del'>-        if (inodelk_conflict (candidate_lock, requested_lock)) {</div><div class='del'>-                *lock_age_sec = curr.tv_sec -</div><div class='del'>-                        candidate_lock-&gt;granted_time.tv_sec;</div><div class='del'>-                if (*lock_age_sec &gt; priv-&gt;revocation_secs)</div><div class='del'>-                        return _gf_true;</div><div class='del'>-        }</div><div class='del'>-        return _gf_false;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    struct timeval curr;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    gettimeofday(&amp;curr, NULL);</div><div class='add'>+    /* Question: Should we just prune them all given the</div><div class='add'>+     * chance?  Or just the locks we are attempting to acquire?</div><div class='add'>+     */</div><div class='add'>+    if (inodelk_conflict(candidate_lock, requested_lock)) {</div><div class='add'>+        *lock_age_sec = curr.tv_sec - candidate_lock-&gt;granted_time.tv_sec;</div><div class='add'>+        if (*lock_age_sec &gt; priv-&gt;revocation_secs)</div><div class='add'>+            return _gf_true;</div><div class='add'>+    }</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Examine any locks held on this inode and potentially revoke the lock</div><div class='hunk'>@@ -167,992 +166,976 @@ __stale_inodelk (xlator_t *this, pl_inode_lock_t *candidate_lock,</div><div class='ctx'>  * are beyond a threshold.</div><div class='ctx'>  */</div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__inodelk_prune_stale (xlator_t *this, pl_inode_t *pinode, pl_dom_list_t *dom,</div><div class='del'>-                       pl_inode_lock_t *lock)</div><div class='add'>+__inodelk_prune_stale(xlator_t *this, pl_inode_t *pinode, pl_dom_list_t *dom,</div><div class='add'>+                      pl_inode_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        pl_inode_lock_t *tmp = NULL;</div><div class='del'>-        pl_inode_lock_t *lk = NULL;</div><div class='del'>-        gf_boolean_t revoke_lock = _gf_false;</div><div class='del'>-        int bcount = 0;</div><div class='del'>-        int gcount = 0;</div><div class='del'>-        int op_errno = 0;</div><div class='del'>-        clrlk_args args;</div><div class='del'>-        args.opts = NULL;</div><div class='del'>-        time_t lk_age_sec = 0;</div><div class='del'>-        uint32_t max_blocked = 0;</div><div class='del'>-        char *reason_str = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        args.type = CLRLK_INODE;</div><div class='del'>-        if (priv-&gt;revocation_clear_all == _gf_true)</div><div class='del'>-                args.kind = CLRLK_ALL;</div><div class='del'>-        else</div><div class='del'>-                args.kind = CLRLK_GRANTED;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;dom-&gt;inodelk_list))</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pinode-&gt;mutex);</div><div class='del'>-        list_for_each_entry_safe (lk, tmp, &amp;dom-&gt;inodelk_list, list) {</div><div class='del'>-                if (__stale_inodelk (this, lk, lock, &amp;lk_age_sec) == _gf_true) {</div><div class='del'>-                        revoke_lock = _gf_true;</div><div class='del'>-                        reason_str = "age";</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    pl_inode_lock_t *tmp = NULL;</div><div class='add'>+    pl_inode_lock_t *lk = NULL;</div><div class='add'>+    gf_boolean_t revoke_lock = _gf_false;</div><div class='add'>+    int bcount = 0;</div><div class='add'>+    int gcount = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    clrlk_args args;</div><div class='add'>+    args.opts = NULL;</div><div class='add'>+    time_t lk_age_sec = 0;</div><div class='add'>+    uint32_t max_blocked = 0;</div><div class='add'>+    char *reason_str = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    args.type = CLRLK_INODE;</div><div class='add'>+    if (priv-&gt;revocation_clear_all == _gf_true)</div><div class='add'>+        args.kind = CLRLK_ALL;</div><div class='add'>+    else</div><div class='add'>+        args.kind = CLRLK_GRANTED;</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;dom-&gt;inodelk_list))</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pinode-&gt;mutex);</div><div class='add'>+    list_for_each_entry_safe(lk, tmp, &amp;dom-&gt;inodelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (__stale_inodelk(this, lk, lock, &amp;lk_age_sec) == _gf_true) {</div><div class='add'>+            revoke_lock = _gf_true;</div><div class='add'>+            reason_str = "age";</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        max_blocked = priv-&gt;revocation_max_blocked;</div><div class='del'>-        if (max_blocked != 0 &amp;&amp; revoke_lock == _gf_false) {</div><div class='del'>-                list_for_each_entry_safe (lk, tmp, &amp;dom-&gt;blocked_inodelks,</div><div class='del'>-                                blocked_locks) {</div><div class='del'>-                        max_blocked--;</div><div class='del'>-                        if (max_blocked == 0) {</div><div class='del'>-                                revoke_lock = _gf_true;</div><div class='del'>-                                reason_str = "max blocked";</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    max_blocked = priv-&gt;revocation_max_blocked;</div><div class='add'>+    if (max_blocked != 0 &amp;&amp; revoke_lock == _gf_false) {</div><div class='add'>+        list_for_each_entry_safe(lk, tmp, &amp;dom-&gt;blocked_inodelks, blocked_locks)</div><div class='add'>+        {</div><div class='add'>+            max_blocked--;</div><div class='add'>+            if (max_blocked == 0) {</div><div class='add'>+                revoke_lock = _gf_true;</div><div class='add'>+                reason_str = "max blocked";</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pinode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pinode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (revoke_lock == _gf_true) {</div><div class='del'>-                clrlk_clear_inodelk (this, pinode, dom, &amp;args, &amp;bcount, &amp;gcount,</div><div class='del'>-                        &amp;op_errno);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Lock revocation [reason: %s; gfid: %s; domain: %s; "</div><div class='del'>-                        "age: %ld sec] - Inode lock revoked:  %d granted &amp; %d "</div><div class='del'>-                        "blocked locks cleared",</div><div class='del'>-                        reason_str, uuid_utoa (pinode-&gt;gfid), dom-&gt;domain,</div><div class='del'>-                        lk_age_sec, gcount, bcount);</div><div class='del'>-        }</div><div class='del'>-        return revoke_lock;</div><div class='add'>+    if (revoke_lock == _gf_true) {</div><div class='add'>+        clrlk_clear_inodelk(this, pinode, dom, &amp;args, &amp;bcount, &amp;gcount,</div><div class='add'>+                            &amp;op_errno);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Lock revocation [reason: %s; gfid: %s; domain: %s; "</div><div class='add'>+               "age: %ld sec] - Inode lock revoked:  %d granted &amp; %d "</div><div class='add'>+               "blocked locks cleared",</div><div class='add'>+               reason_str, uuid_utoa(pinode-&gt;gfid), dom-&gt;domain, lk_age_sec,</div><div class='add'>+               gcount, bcount);</div><div class='add'>+    }</div><div class='add'>+    return revoke_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='ctx'> __inodelk_needs_contention_notify(xlator_t *this, pl_inode_lock_t *lock,</div><div class='ctx'>                                   struct timespec *now)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv;</div><div class='del'>-        int64_t elapsed;</div><div class='add'>+    posix_locks_private_t *priv;</div><div class='add'>+    int64_t elapsed;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        /* If this lock is in a list, it means that we are about to send a</div><div class='del'>-         * notification for it, so no need to do anything else. */</div><div class='del'>-        if (!list_empty(&amp;lock-&gt;contend)) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        elapsed = now-&gt;tv_sec;</div><div class='del'>-        elapsed -= lock-&gt;contention_time.tv_sec;</div><div class='del'>-        if (now-&gt;tv_nsec &lt; lock-&gt;contention_time.tv_nsec) {</div><div class='del'>-                elapsed--;</div><div class='del'>-        }</div><div class='del'>-        if (elapsed &lt; priv-&gt;notify_contention_delay) {</div><div class='del'>-                return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    /* If this lock is in a list, it means that we are about to send a</div><div class='add'>+     * notification for it, so no need to do anything else. */</div><div class='add'>+    if (!list_empty(&amp;lock-&gt;contend)) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    elapsed = now-&gt;tv_sec;</div><div class='add'>+    elapsed -= lock-&gt;contention_time.tv_sec;</div><div class='add'>+    if (now-&gt;tv_nsec &lt; lock-&gt;contention_time.tv_nsec) {</div><div class='add'>+        elapsed--;</div><div class='add'>+    }</div><div class='add'>+    if (elapsed &lt; priv-&gt;notify_contention_delay) {</div><div class='add'>+        return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* All contention notifications will be sent outside of the locked</div><div class='del'>-         * region. This means that currently granted locks might have already</div><div class='del'>-         * been unlocked by that time. To avoid the lock or the inode to be</div><div class='del'>-         * destroyed before we process them, we take an additional reference</div><div class='del'>-         * on both. */</div><div class='del'>-        inode_ref(lock-&gt;pl_inode-&gt;inode);</div><div class='del'>-        __pl_inodelk_ref(lock);</div><div class='add'>+    /* All contention notifications will be sent outside of the locked</div><div class='add'>+     * region. This means that currently granted locks might have already</div><div class='add'>+     * been unlocked by that time. To avoid the lock or the inode to be</div><div class='add'>+     * destroyed before we process them, we take an additional reference</div><div class='add'>+     * on both. */</div><div class='add'>+    inode_ref(lock-&gt;pl_inode-&gt;inode);</div><div class='add'>+    __pl_inodelk_ref(lock);</div><div class='ctx'> </div><div class='del'>-        lock-&gt;contention_time = *now;</div><div class='add'>+    lock-&gt;contention_time = *now;</div><div class='ctx'> </div><div class='del'>-        return _gf_true;</div><div class='add'>+    return _gf_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> inodelk_contention_notify(xlator_t *this, struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        struct gf_upcall up;</div><div class='del'>-        struct gf_upcall_inodelk_contention lc;</div><div class='del'>-        pl_inode_lock_t *lock;</div><div class='del'>-        pl_inode_t *pl_inode;</div><div class='del'>-        client_t *client;</div><div class='del'>-        gf_boolean_t notify;</div><div class='add'>+    struct gf_upcall up;</div><div class='add'>+    struct gf_upcall_inodelk_contention lc;</div><div class='add'>+    pl_inode_lock_t *lock;</div><div class='add'>+    pl_inode_t *pl_inode;</div><div class='add'>+    client_t *client;</div><div class='add'>+    gf_boolean_t notify;</div><div class='ctx'> </div><div class='del'>-        while (!list_empty(contend)) {</div><div class='del'>-                lock = list_first_entry(contend, pl_inode_lock_t, contend);</div><div class='add'>+    while (!list_empty(contend)) {</div><div class='add'>+        lock = list_first_entry(contend, pl_inode_lock_t, contend);</div><div class='ctx'> </div><div class='del'>-                pl_inode = lock-&gt;pl_inode;</div><div class='del'>-</div><div class='del'>-                pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                /* If the lock has already been released, no notification is</div><div class='del'>-                 * sent. We clear the notification time in this case. */</div><div class='del'>-                notify = !list_empty(&amp;lock-&gt;list);</div><div class='del'>-                if (!notify) {</div><div class='del'>-                        lock-&gt;contention_time.tv_sec = 0;</div><div class='del'>-                        lock-&gt;contention_time.tv_nsec = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        memcpy(&amp;lc.flock, &amp;lock-&gt;user_flock, sizeof(lc.flock));</div><div class='del'>-                        lc.pid = lock-&gt;client_pid;</div><div class='del'>-                        lc.domain = lock-&gt;volume;</div><div class='del'>-                        lc.xdata = NULL;</div><div class='del'>-</div><div class='del'>-                        gf_uuid_copy(up.gfid, lock-&gt;pl_inode-&gt;gfid);</div><div class='del'>-                        client = (client_t *)lock-&gt;client;</div><div class='del'>-                        if (client == NULL) {</div><div class='del'>-                                /* A NULL client can be found if the inodelk</div><div class='del'>-                                 * was issued by a server side xlator. */</div><div class='del'>-                                up.client_uid = NULL;</div><div class='del'>-                        } else {</div><div class='del'>-                                up.client_uid = client-&gt;client_uid;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        pl_inode = lock-&gt;pl_inode;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        /* If the lock has already been released, no notification is</div><div class='add'>+         * sent. We clear the notification time in this case. */</div><div class='add'>+        notify = !list_empty(&amp;lock-&gt;list);</div><div class='add'>+        if (!notify) {</div><div class='add'>+            lock-&gt;contention_time.tv_sec = 0;</div><div class='add'>+            lock-&gt;contention_time.tv_nsec = 0;</div><div class='add'>+        } else {</div><div class='add'>+            memcpy(&amp;lc.flock, &amp;lock-&gt;user_flock, sizeof(lc.flock));</div><div class='add'>+            lc.pid = lock-&gt;client_pid;</div><div class='add'>+            lc.domain = lock-&gt;volume;</div><div class='add'>+            lc.xdata = NULL;</div><div class='add'>+</div><div class='add'>+            gf_uuid_copy(up.gfid, lock-&gt;pl_inode-&gt;gfid);</div><div class='add'>+            client = (client_t *)lock-&gt;client;</div><div class='add'>+            if (client == NULL) {</div><div class='add'>+                /* A NULL client can be found if the inodelk</div><div class='add'>+                 * was issued by a server side xlator. */</div><div class='add'>+                up.client_uid = NULL;</div><div class='add'>+            } else {</div><div class='add'>+                up.client_uid = client-&gt;client_uid;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (notify) {</div><div class='del'>-                        up.event_type = GF_UPCALL_INODELK_CONTENTION;</div><div class='del'>-                        up.data = &amp;lc;</div><div class='del'>-</div><div class='del'>-                        if (this-&gt;notify(this, GF_EVENT_UPCALL, &amp;up) &lt; 0) {</div><div class='del'>-                                gf_msg_debug(this-&gt;name, 0,</div><div class='del'>-                                             "Inodelk contention notification "</div><div class='del'>-                                             "failed");</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_msg_debug(this-&gt;name, 0,</div><div class='del'>-                                             "Inodelk contention notification "</div><div class='del'>-                                             "sent");</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        if (notify) {</div><div class='add'>+            up.event_type = GF_UPCALL_INODELK_CONTENTION;</div><div class='add'>+            up.data = &amp;lc;</div><div class='add'>+</div><div class='add'>+            if (this-&gt;notify(this, GF_EVENT_UPCALL, &amp;up) &lt; 0) {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Inodelk contention notification "</div><div class='add'>+                             "failed");</div><div class='add'>+            } else {</div><div class='add'>+                gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                             "Inodelk contention notification "</div><div class='add'>+                             "sent");</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                list_del_init(&amp;lock-&gt;contend);</div><div class='del'>-                __pl_inodelk_unref(lock);</div><div class='add'>+        list_del_init(&amp;lock-&gt;contend);</div><div class='add'>+        __pl_inodelk_unref(lock);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                inode_unref(pl_inode-&gt;inode);</div><div class='del'>-        }</div><div class='add'>+        inode_unref(pl_inode-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Determine if lock is grantable or not */</div><div class='ctx'> static pl_inode_lock_t *</div><div class='del'>-__inodelk_grantable (xlator_t *this, pl_dom_list_t *dom, pl_inode_lock_t *lock,</div><div class='del'>-                     struct timespec *now, struct list_head *contend)</div><div class='add'>+__inodelk_grantable(xlator_t *this, pl_dom_list_t *dom, pl_inode_lock_t *lock,</div><div class='add'>+                    struct timespec *now, struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t *l = NULL;</div><div class='del'>-        pl_inode_lock_t *ret = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (l, &amp;dom-&gt;inodelk_list, list){</div><div class='del'>-                if (inodelk_conflict (lock, l) &amp;&amp;</div><div class='del'>-                    !same_inodelk_owner (lock, l)) {</div><div class='del'>-                        if (ret == NULL) {</div><div class='del'>-                                ret = l;</div><div class='del'>-                                if (contend == NULL) {</div><div class='del'>-                                        break;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        if (__inodelk_needs_contention_notify(this, l, now)) {</div><div class='del'>-                                list_add_tail(&amp;l-&gt;contend, contend);</div><div class='del'>-                        }</div><div class='add'>+    pl_inode_lock_t *l = NULL;</div><div class='add'>+    pl_inode_lock_t *ret = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(l, &amp;dom-&gt;inodelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (inodelk_conflict(lock, l) &amp;&amp; !same_inodelk_owner(lock, l)) {</div><div class='add'>+            if (ret == NULL) {</div><div class='add'>+                ret = l;</div><div class='add'>+                if (contend == NULL) {</div><div class='add'>+                    break;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            if (__inodelk_needs_contention_notify(this, l, now)) {</div><div class='add'>+                list_add_tail(&amp;l-&gt;contend, contend);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static pl_inode_lock_t *</div><div class='del'>-__blocked_lock_conflict (pl_dom_list_t *dom, pl_inode_lock_t *lock)</div><div class='add'>+__blocked_lock_conflict(pl_dom_list_t *dom, pl_inode_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t *l   = NULL;</div><div class='add'>+    pl_inode_lock_t *l = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (l, &amp;dom-&gt;blocked_inodelks, blocked_locks) {</div><div class='del'>-                if (inodelk_conflict (lock, l)) {</div><div class='del'>-                        return l;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(l, &amp;dom-&gt;blocked_inodelks, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        if (inodelk_conflict(lock, l)) {</div><div class='add'>+            return l;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__owner_has_lock (pl_dom_list_t *dom, pl_inode_lock_t *newlock)</div><div class='add'>+__owner_has_lock(pl_dom_list_t *dom, pl_inode_lock_t *newlock)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t *lock = NULL;</div><div class='add'>+    pl_inode_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;inodelk_list, list) {</div><div class='del'>-                if (same_inodelk_owner (lock, newlock))</div><div class='del'>-                        return 1;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;inodelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (same_inodelk_owner(lock, newlock))</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;blocked_inodelks, blocked_locks) {</div><div class='del'>-                if (same_inodelk_owner (lock, newlock))</div><div class='del'>-                        return 1;</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;blocked_inodelks, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        if (same_inodelk_owner(lock, newlock))</div><div class='add'>+            return 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> __lock_blocked_add(xlator_t *this, pl_dom_list_t *dom, pl_inode_lock_t *lock,</div><div class='ctx'>                    int can_block)</div><div class='ctx'> {</div><div class='del'>-        struct timeval now;</div><div class='add'>+    struct timeval now;</div><div class='ctx'> </div><div class='del'>-        gettimeofday(&amp;now, NULL);</div><div class='add'>+    gettimeofday(&amp;now, NULL);</div><div class='ctx'> </div><div class='del'>-        if (can_block == 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (can_block == 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock-&gt;blkd_time = now;</div><div class='del'>-        list_add_tail (&amp;lock-&gt;blocked_locks, &amp;dom-&gt;blocked_inodelks);</div><div class='add'>+    lock-&gt;blkd_time = now;</div><div class='add'>+    list_add_tail(&amp;lock-&gt;blocked_locks, &amp;dom-&gt;blocked_inodelks);</div><div class='ctx'> </div><div class='del'>-        gf_msg_trace (this-&gt;name, 0, "%s (pid=%d) (lk-owner=%s) %"PRId64" - "</div><div class='del'>-                                     "%"PRId64" =&gt; Blocked",</div><div class='del'>-                      lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                      lock-&gt;client_pid, lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                      lock-&gt;user_flock.l_start, lock-&gt;user_flock.l_len);</div><div class='add'>+    gf_msg_trace(this-&gt;name, 0,</div><div class='add'>+                 "%s (pid=%d) (lk-owner=%s) %" PRId64</div><div class='add'>+                 " - "</div><div class='add'>+                 "%" PRId64 " =&gt; Blocked",</div><div class='add'>+                 lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock", lock-&gt;client_pid,</div><div class='add'>+                 lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;user_flock.l_start,</div><div class='add'>+                 lock-&gt;user_flock.l_len);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return -EAGAIN;</div><div class='add'>+    return -EAGAIN;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Determines if lock can be granted and adds the lock. If the lock</div><div class='ctx'>  * is blocking, adds it to the blocked_inodelks list of the domain.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-__lock_inodelk (xlator_t *this, pl_inode_t *pl_inode, pl_inode_lock_t *lock,</div><div class='del'>-                int can_block,  pl_dom_list_t *dom, struct timespec *now,</div><div class='del'>-                struct list_head *contend)</div><div class='add'>+__lock_inodelk(xlator_t *this, pl_inode_t *pl_inode, pl_inode_lock_t *lock,</div><div class='add'>+               int can_block, pl_dom_list_t *dom, struct timespec *now,</div><div class='add'>+               struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t *conf = NULL;</div><div class='del'>-        int ret = -EINVAL;</div><div class='del'>-</div><div class='del'>-        conf = __inodelk_grantable (this, dom, lock, now, contend);</div><div class='del'>-        if (conf) {</div><div class='del'>-                ret = __lock_blocked_add(this, dom, lock, can_block);</div><div class='del'>-                goto out;</div><div class='add'>+    pl_inode_lock_t *conf = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+</div><div class='add'>+    conf = __inodelk_grantable(this, dom, lock, now, contend);</div><div class='add'>+    if (conf) {</div><div class='add'>+        ret = __lock_blocked_add(this, dom, lock, can_block);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* To prevent blocked locks starvation, check if there are any blocked</div><div class='add'>+     * locks thay may conflict with this lock. If there is then don't grant</div><div class='add'>+     * the lock. BUT grant the lock if the owner already has lock to allow</div><div class='add'>+     * nested locks.</div><div class='add'>+     * Example:</div><div class='add'>+     * SHD from Machine1 takes (gfid, 0-infinity) and is granted.</div><div class='add'>+     * SHD from machine2 takes (gfid, 0-infinity) and is blocked.</div><div class='add'>+     * When SHD from Machine1 takes (gfid, 0-128KB) it</div><div class='add'>+     * needs to be granted, without which the earlier lock on 0-infinity</div><div class='add'>+     * will not be unlocked by SHD from Machine1.</div><div class='add'>+     * TODO: Find why 'owner_has_lock' is checked even for blocked locks.</div><div class='add'>+     */</div><div class='add'>+    if (__blocked_lock_conflict(dom, lock) &amp;&amp; !(__owner_has_lock(dom, lock))) {</div><div class='add'>+        if (can_block != 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "Lock is grantable, but blocking to prevent "</div><div class='add'>+                   "starvation");</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* To prevent blocked locks starvation, check if there are any blocked</div><div class='del'>-         * locks thay may conflict with this lock. If there is then don't grant</div><div class='del'>-         * the lock. BUT grant the lock if the owner already has lock to allow</div><div class='del'>-         * nested locks.</div><div class='del'>-         * Example:</div><div class='del'>-         * SHD from Machine1 takes (gfid, 0-infinity) and is granted.</div><div class='del'>-         * SHD from machine2 takes (gfid, 0-infinity) and is blocked.</div><div class='del'>-         * When SHD from Machine1 takes (gfid, 0-128KB) it</div><div class='del'>-         * needs to be granted, without which the earlier lock on 0-infinity</div><div class='del'>-         * will not be unlocked by SHD from Machine1.</div><div class='del'>-         * TODO: Find why 'owner_has_lock' is checked even for blocked locks.</div><div class='del'>-         */</div><div class='del'>-        if (__blocked_lock_conflict (dom, lock) &amp;&amp;</div><div class='del'>-            !(__owner_has_lock (dom, lock))) {</div><div class='del'>-                if (can_block != 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "Lock is grantable, but blocking to prevent "</div><div class='del'>-                                "starvation");</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = __lock_blocked_add(this, dom, lock, can_block);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        __pl_inodelk_ref (lock);</div><div class='del'>-        gettimeofday (&amp;lock-&gt;granted_time, NULL);</div><div class='del'>-        list_add (&amp;lock-&gt;list, &amp;dom-&gt;inodelk_list);</div><div class='add'>+        ret = __lock_blocked_add(this, dom, lock, can_block);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    __pl_inodelk_ref(lock);</div><div class='add'>+    gettimeofday(&amp;lock-&gt;granted_time, NULL);</div><div class='add'>+    list_add(&amp;lock-&gt;list, &amp;dom-&gt;inodelk_list);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Return true if the two inodelks have exactly same lock boundaries */</div><div class='ctx'> static int</div><div class='del'>-inodelks_equal (pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='add'>+inodelks_equal(pl_inode_lock_t *l1, pl_inode_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        if ((l1-&gt;fl_start == l2-&gt;fl_start) &amp;&amp;</div><div class='del'>-            (l1-&gt;fl_end == l2-&gt;fl_end))</div><div class='del'>-                return 1;</div><div class='add'>+    if ((l1-&gt;fl_start == l2-&gt;fl_start) &amp;&amp; (l1-&gt;fl_end == l2-&gt;fl_end))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static pl_inode_lock_t *</div><div class='del'>-find_matching_inodelk (pl_inode_lock_t *lock, pl_dom_list_t *dom)</div><div class='add'>+find_matching_inodelk(pl_inode_lock_t *lock, pl_dom_list_t *dom)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t *l = NULL;</div><div class='del'>-        list_for_each_entry (l, &amp;dom-&gt;inodelk_list, list) {</div><div class='del'>-                if (inodelks_equal (l, lock) &amp;&amp;</div><div class='del'>-                    same_inodelk_owner (l, lock))</div><div class='del'>-                        return l;</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='add'>+    pl_inode_lock_t *l = NULL;</div><div class='add'>+    list_for_each_entry(l, &amp;dom-&gt;inodelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (inodelks_equal(l, lock) &amp;&amp; same_inodelk_owner(l, lock))</div><div class='add'>+            return l;</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Set F_UNLCK removes a lock which has the exact same lock boundaries</div><div class='ctx'>  * as the UNLCK lock specifies. If such a lock is not found, returns invalid</div><div class='ctx'>  */</div><div class='ctx'> static pl_inode_lock_t *</div><div class='del'>-__inode_unlock_lock (xlator_t *this, pl_inode_lock_t *lock, pl_dom_list_t *dom)</div><div class='add'>+__inode_unlock_lock(xlator_t *this, pl_inode_lock_t *lock, pl_dom_list_t *dom)</div><div class='ctx'> {</div><div class='del'>-</div><div class='del'>-        pl_inode_lock_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = find_matching_inodelk (lock, dom);</div><div class='del'>-        if (!conf) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        " Matching lock not found for unlock %llu-%llu, by %s "</div><div class='del'>-                        "on %p", (unsigned long long)lock-&gt;fl_start,</div><div class='del'>-                        (unsigned long long)lock-&gt;fl_end,</div><div class='del'>-                        lkowner_utoa (&amp;lock-&gt;owner), lock-&gt;client);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        __delete_inode_lock (conf);</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                " Matching lock found for unlock %llu-%llu, by %s on %p",</div><div class='del'>-                (unsigned long long)lock-&gt;fl_start,</div><div class='del'>-                (unsigned long long)lock-&gt;fl_end, lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                lock-&gt;client);</div><div class='add'>+    pl_inode_lock_t *conf = NULL;</div><div class='add'>+</div><div class='add'>+    conf = find_matching_inodelk(lock, dom);</div><div class='add'>+    if (!conf) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               " Matching lock not found for unlock %llu-%llu, by %s "</div><div class='add'>+               "on %p",</div><div class='add'>+               (unsigned long long)lock-&gt;fl_start,</div><div class='add'>+               (unsigned long long)lock-&gt;fl_end, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+               lock-&gt;client);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    __delete_inode_lock(conf);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+           " Matching lock found for unlock %llu-%llu, by %s on %p",</div><div class='add'>+           (unsigned long long)lock-&gt;fl_start, (unsigned long long)lock-&gt;fl_end,</div><div class='add'>+           lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;client);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return conf;</div><div class='add'>+    return conf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-__grant_blocked_inode_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                             struct list_head *granted, pl_dom_list_t *dom,</div><div class='del'>-                             struct timespec *now, struct list_head *contend)</div><div class='add'>+__grant_blocked_inode_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                            struct list_head *granted, pl_dom_list_t *dom,</div><div class='add'>+                            struct timespec *now, struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        int              bl_ret = 0;</div><div class='del'>-        pl_inode_lock_t *bl = NULL;</div><div class='del'>-        pl_inode_lock_t *tmp = NULL;</div><div class='add'>+    int bl_ret = 0;</div><div class='add'>+    pl_inode_lock_t *bl = NULL;</div><div class='add'>+    pl_inode_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        struct list_head blocked_list;</div><div class='add'>+    struct list_head blocked_list;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;blocked_list);</div><div class='del'>-        list_splice_init (&amp;dom-&gt;blocked_inodelks, &amp;blocked_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;blocked_list);</div><div class='add'>+    list_splice_init(&amp;dom-&gt;blocked_inodelks, &amp;blocked_list);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (bl, tmp, &amp;blocked_list, blocked_locks) {</div><div class='add'>+    list_for_each_entry_safe(bl, tmp, &amp;blocked_list, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;bl-&gt;blocked_locks);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;bl-&gt;blocked_locks);</div><div class='add'>+        bl_ret = __lock_inodelk(this, pl_inode, bl, 1, dom, now, contend);</div><div class='ctx'> </div><div class='del'>-                bl_ret = __lock_inodelk (this, pl_inode, bl, 1, dom, now,</div><div class='del'>-                                         contend);</div><div class='del'>-</div><div class='del'>-                if (bl_ret == 0) {</div><div class='del'>-                        list_add (&amp;bl-&gt;blocked_locks, granted);</div><div class='del'>-                }</div><div class='add'>+        if (bl_ret == 0) {</div><div class='add'>+            list_add(&amp;bl-&gt;blocked_locks, granted);</div><div class='ctx'>         }</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Grant all inodelks blocked on a lock */</div><div class='ctx'> void</div><div class='del'>-grant_blocked_inode_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                           pl_dom_list_t *dom, struct timespec *now,</div><div class='del'>-                           struct list_head *contend)</div><div class='add'>+grant_blocked_inode_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                          pl_dom_list_t *dom, struct timespec *now,</div><div class='add'>+                          struct list_head *contend)</div><div class='ctx'> {</div><div class='del'>-        struct list_head granted;</div><div class='del'>-        pl_inode_lock_t *lock;</div><div class='del'>-        pl_inode_lock_t *tmp;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;granted);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    struct list_head granted;</div><div class='add'>+    pl_inode_lock_t *lock;</div><div class='add'>+    pl_inode_lock_t *tmp;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;granted);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __grant_blocked_inode_locks(this, pl_inode, &amp;granted, dom, now,</div><div class='add'>+                                    contend);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;granted, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64 " =&gt; Granted",</div><div class='add'>+               lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock", lock-&gt;client_pid,</div><div class='add'>+               lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;user_flock.l_start,</div><div class='add'>+               lock-&gt;user_flock.l_len);</div><div class='add'>+</div><div class='add'>+        pl_trace_out(this, lock-&gt;frame, NULL, NULL, F_SETLKW, &amp;lock-&gt;user_flock,</div><div class='add'>+                     0, 0, lock-&gt;volume);</div><div class='add'>+</div><div class='add'>+        STACK_UNWIND_STRICT(inodelk, lock-&gt;frame, 0, 0, NULL);</div><div class='add'>+        lock-&gt;frame = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(lock, tmp, &amp;granted, blocked_locks)</div><div class='ctx'>         {</div><div class='del'>-                __grant_blocked_inode_locks (this, pl_inode, &amp;granted, dom,</div><div class='del'>-                                             now, contend);</div><div class='add'>+            list_del_init(&amp;lock-&gt;blocked_locks);</div><div class='add'>+            __pl_inodelk_unref(lock);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;granted, blocked_locks) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" =&gt; Granted",</div><div class='del'>-                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                        lock-&gt;client_pid,</div><div class='del'>-                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                        lock-&gt;user_flock.l_start,</div><div class='del'>-                        lock-&gt;user_flock.l_len);</div><div class='del'>-</div><div class='del'>-                pl_trace_out (this, lock-&gt;frame, NULL, NULL, F_SETLKW,</div><div class='del'>-                              &amp;lock-&gt;user_flock, 0, 0, lock-&gt;volume);</div><div class='del'>-</div><div class='del'>-                STACK_UNWIND_STRICT (inodelk, lock-&gt;frame, 0, 0, NULL);</div><div class='del'>-                lock-&gt;frame = NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                list_for_each_entry_safe (lock, tmp, &amp;granted, blocked_locks) {</div><div class='del'>-                        list_del_init (&amp;lock-&gt;blocked_locks);</div><div class='del'>-                        __pl_inodelk_unref (lock);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-pl_inodelk_log_cleanup (pl_inode_lock_t *lock)</div><div class='add'>+pl_inodelk_log_cleanup(pl_inode_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        pl_inode = lock-&gt;pl_inode;</div><div class='add'>+    pl_inode = lock-&gt;pl_inode;</div><div class='ctx'> </div><div class='del'>-        gf_log (THIS-&gt;name, GF_LOG_WARNING, "releasing lock on %s held by "</div><div class='del'>-                "{client=%p, pid=%"PRId64" lk-owner=%s}",</div><div class='del'>-                uuid_utoa (pl_inode-&gt;gfid), lock-&gt;client,</div><div class='del'>-                (uint64_t) lock-&gt;client_pid, lkowner_utoa (&amp;lock-&gt;owner));</div><div class='add'>+    gf_log(THIS-&gt;name, GF_LOG_WARNING,</div><div class='add'>+           "releasing lock on %s held by "</div><div class='add'>+           "{client=%p, pid=%" PRId64 " lk-owner=%s}",</div><div class='add'>+           uuid_utoa(pl_inode-&gt;gfid), lock-&gt;client, (uint64_t)lock-&gt;client_pid,</div><div class='add'>+           lkowner_utoa(&amp;lock-&gt;owner));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Release all inodelks from this client */</div><div class='ctx'> int</div><div class='del'>-pl_inodelk_client_cleanup (xlator_t *this, pl_ctx_t *ctx)</div><div class='add'>+pl_inodelk_client_cleanup(xlator_t *this, pl_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv;</div><div class='del'>-        pl_inode_lock_t *tmp = NULL;</div><div class='del'>-        pl_inode_lock_t *l = NULL;</div><div class='del'>-        pl_dom_list_t *dom = NULL;</div><div class='del'>-        pl_inode_t *pl_inode = NULL;</div><div class='del'>-        struct list_head *pcontend = NULL;</div><div class='del'>-        struct list_head released;</div><div class='del'>-        struct list_head unwind;</div><div class='del'>-        struct list_head contend;</div><div class='del'>-        struct timespec now = { };</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;released);</div><div class='del'>-        INIT_LIST_HEAD (&amp;unwind);</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;notify_contention) {</div><div class='del'>-                pcontend = &amp;contend;</div><div class='del'>-                INIT_LIST_HEAD (pcontend);</div><div class='del'>-                timespec_now(&amp;now);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='add'>+    posix_locks_private_t *priv;</div><div class='add'>+    pl_inode_lock_t *tmp = NULL;</div><div class='add'>+    pl_inode_lock_t *l = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    struct list_head *pcontend = NULL;</div><div class='add'>+    struct list_head released;</div><div class='add'>+    struct list_head unwind;</div><div class='add'>+    struct list_head contend;</div><div class='add'>+    struct timespec now = {};</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;released);</div><div class='add'>+    INIT_LIST_HEAD(&amp;unwind);</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;notify_contention) {</div><div class='add'>+        pcontend = &amp;contend;</div><div class='add'>+        INIT_LIST_HEAD(pcontend);</div><div class='add'>+        timespec_now(&amp;now);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(l, tmp, &amp;ctx-&gt;inodelk_lockers, client_list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (l, tmp, &amp;ctx-&gt;inodelk_lockers,</div><div class='del'>-                                          client_list) {</div><div class='del'>-                        pl_inodelk_log_cleanup (l);</div><div class='del'>-</div><div class='del'>-                        pl_inode = l-&gt;pl_inode;</div><div class='del'>-</div><div class='del'>-                        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                        {</div><div class='del'>-                        /* If the inodelk object is part of granted list but not</div><div class='del'>-                         * blocked list, then perform the following actions:</div><div class='del'>-                         * i.   delete the object from granted list;</div><div class='del'>-                         * ii.  grant other locks (from other clients) that may</div><div class='del'>-                         *      have been blocked on this inodelk; and</div><div class='del'>-                         * iii. unref the object.</div><div class='del'>-                         *</div><div class='del'>-                         * If the inodelk object (L1) is part of both granted</div><div class='del'>-                         * and blocked lists, then this means that a parallel</div><div class='del'>-                         * unlock on another inodelk (L2 say) may have 'granted'</div><div class='del'>-                         * L1 and added it to 'granted' list in</div><div class='del'>-                         * __grant_blocked_node_locks() (although using the</div><div class='del'>-                         * 'blocked_locks' member). In that case, the cleanup</div><div class='del'>-                         * codepath must try and grant other overlapping</div><div class='del'>-                         * blocked inodelks from other clients, now that L1 is</div><div class='del'>-                         * out of their way and then unref L1 in the end, and</div><div class='del'>-                         * leave it to the other thread (the one executing</div><div class='del'>-                         * unlock codepath) to unwind L1's frame, delete it from</div><div class='del'>-                         * blocked_locks list, and perform the last unref on L1.</div><div class='del'>-                         *</div><div class='del'>-                         * If the inodelk object (L1) is part of blocked list</div><div class='del'>-                         * only, the cleanup code path must:</div><div class='del'>-                         * i.   delete it from the blocked_locks list inside</div><div class='del'>-                         *      this critical section,</div><div class='del'>-                         * ii.  unwind its frame with EAGAIN,</div><div class='del'>-                         * iii. try and grant blocked inode locks from other</div><div class='del'>-                         *      clients that were otherwise grantable, but just</div><div class='del'>-                         *      got blocked to avoid leaving L1 to starve</div><div class='del'>-                         *      forever.</div><div class='del'>-                         * iv.  unref the object.</div><div class='del'>-                         */</div><div class='del'>-                                list_del_init (&amp;l-&gt;client_list);</div><div class='del'>-</div><div class='del'>-                                if (!list_empty (&amp;l-&gt;list)) {</div><div class='del'>-                                        __delete_inode_lock (l);</div><div class='del'>-                                        list_add_tail (&amp;l-&gt;client_list,</div><div class='del'>-                                                       &amp;released);</div><div class='del'>-                                } else {</div><div class='del'>-                                        list_del_init(&amp;l-&gt;blocked_locks);</div><div class='del'>-                                        list_add_tail (&amp;l-&gt;client_list,</div><div class='del'>-                                                       &amp;unwind);</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            pl_inodelk_log_cleanup(l);</div><div class='add'>+</div><div class='add'>+            pl_inode = l-&gt;pl_inode;</div><div class='add'>+</div><div class='add'>+            pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                /* If the inodelk object is part of granted list but not</div><div class='add'>+                 * blocked list, then perform the following actions:</div><div class='add'>+                 * i.   delete the object from granted list;</div><div class='add'>+                 * ii.  grant other locks (from other clients) that may</div><div class='add'>+                 *      have been blocked on this inodelk; and</div><div class='add'>+                 * iii. unref the object.</div><div class='add'>+                 *</div><div class='add'>+                 * If the inodelk object (L1) is part of both granted</div><div class='add'>+                 * and blocked lists, then this means that a parallel</div><div class='add'>+                 * unlock on another inodelk (L2 say) may have 'granted'</div><div class='add'>+                 * L1 and added it to 'granted' list in</div><div class='add'>+                 * __grant_blocked_node_locks() (although using the</div><div class='add'>+                 * 'blocked_locks' member). In that case, the cleanup</div><div class='add'>+                 * codepath must try and grant other overlapping</div><div class='add'>+                 * blocked inodelks from other clients, now that L1 is</div><div class='add'>+                 * out of their way and then unref L1 in the end, and</div><div class='add'>+                 * leave it to the other thread (the one executing</div><div class='add'>+                 * unlock codepath) to unwind L1's frame, delete it from</div><div class='add'>+                 * blocked_locks list, and perform the last unref on L1.</div><div class='add'>+                 *</div><div class='add'>+                 * If the inodelk object (L1) is part of blocked list</div><div class='add'>+                 * only, the cleanup code path must:</div><div class='add'>+                 * i.   delete it from the blocked_locks list inside</div><div class='add'>+                 *      this critical section,</div><div class='add'>+                 * ii.  unwind its frame with EAGAIN,</div><div class='add'>+                 * iii. try and grant blocked inode locks from other</div><div class='add'>+                 *      clients that were otherwise grantable, but just</div><div class='add'>+                 *      got blocked to avoid leaving L1 to starve</div><div class='add'>+                 *      forever.</div><div class='add'>+                 * iv.  unref the object.</div><div class='add'>+                 */</div><div class='add'>+                list_del_init(&amp;l-&gt;client_list);</div><div class='add'>+</div><div class='add'>+                if (!list_empty(&amp;l-&gt;list)) {</div><div class='add'>+                    __delete_inode_lock(l);</div><div class='add'>+                    list_add_tail(&amp;l-&gt;client_list, &amp;released);</div><div class='add'>+                } else {</div><div class='add'>+                    list_del_init(&amp;l-&gt;blocked_locks);</div><div class='add'>+                    list_add_tail(&amp;l-&gt;client_list, &amp;unwind);</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;unwind, client_list) {</div><div class='del'>-                list_del_init (&amp;l-&gt;client_list);</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;unwind, client_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;l-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-                if (l-&gt;frame)</div><div class='del'>-                        STACK_UNWIND_STRICT (inodelk, l-&gt;frame, -1, EAGAIN,</div><div class='del'>-                                             NULL);</div><div class='del'>-                list_add_tail (&amp;l-&gt;client_list, &amp;released);</div><div class='del'>-        }</div><div class='add'>+        if (l-&gt;frame)</div><div class='add'>+            STACK_UNWIND_STRICT(inodelk, l-&gt;frame, -1, EAGAIN, NULL);</div><div class='add'>+        list_add_tail(&amp;l-&gt;client_list, &amp;released);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;released, client_list) {</div><div class='del'>-                list_del_init (&amp;l-&gt;client_list);</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;released, client_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;l-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-                pl_inode = l-&gt;pl_inode;</div><div class='add'>+        pl_inode = l-&gt;pl_inode;</div><div class='ctx'> </div><div class='del'>-                dom = get_domain (pl_inode, l-&gt;volume);</div><div class='add'>+        dom = get_domain(pl_inode, l-&gt;volume);</div><div class='ctx'> </div><div class='del'>-                grant_blocked_inode_locks (this, pl_inode, dom, &amp;now,</div><div class='del'>-                                           pcontend);</div><div class='add'>+        grant_blocked_inode_locks(this, pl_inode, dom, &amp;now, pcontend);</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        __pl_inodelk_unref (l);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                inode_unref (pl_inode-&gt;inode);</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            __pl_inodelk_unref(l);</div><div class='ctx'>         }</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        inode_unref(pl_inode-&gt;inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (pcontend != NULL) {</div><div class='del'>-                inodelk_contention_notify(this, pcontend);</div><div class='del'>-        }</div><div class='add'>+    if (pcontend != NULL) {</div><div class='add'>+        inodelk_contention_notify(this, pcontend);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-pl_inode_setlk (xlator_t *this, pl_ctx_t *ctx, pl_inode_t *pl_inode,</div><div class='del'>-                pl_inode_lock_t *lock, int can_block, pl_dom_list_t *dom,</div><div class='del'>-                inode_t *inode)</div><div class='add'>+pl_inode_setlk(xlator_t *this, pl_ctx_t *ctx, pl_inode_t *pl_inode,</div><div class='add'>+               pl_inode_lock_t *lock, int can_block, pl_dom_list_t *dom,</div><div class='add'>+               inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t  *priv = NULL;</div><div class='del'>-        int               ret              = -EINVAL;</div><div class='del'>-        pl_inode_lock_t  *retlock          =  NULL;</div><div class='del'>-        gf_boolean_t      unref            =  _gf_true;</div><div class='del'>-        gf_boolean_t      need_inode_unref =  _gf_false;</div><div class='del'>-        struct list_head *pcontend = NULL;</div><div class='del'>-        struct list_head  contend;</div><div class='del'>-        struct timespec   now = { };</div><div class='del'>-        short             fl_type;</div><div class='del'>-</div><div class='del'>-        lock-&gt;pl_inode = pl_inode;</div><div class='del'>-        fl_type = lock-&gt;fl_type;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* Ideally, AFTER a successful lock (both blocking and non-blocking) or</div><div class='del'>-         * an unsuccessful blocking lock operation, the inode needs to be ref'd.</div><div class='del'>-         *</div><div class='del'>-         * But doing so might give room to a race where the lock-requesting</div><div class='del'>-         * client could send a DISCONNECT just before this thread refs the inode</div><div class='del'>-         * after the locking is done, and the epoll thread could unref the inode</div><div class='del'>-         * in cleanup which means the inode's refcount would come down to 0, and</div><div class='del'>-         * the call to pl_forget() at this point destroys @pl_inode. Now when</div><div class='del'>-         * the io-thread executing this function tries to access pl_inode,</div><div class='del'>-         * it could crash on account of illegal memory access.</div><div class='del'>-         *</div><div class='del'>-         * To get around this problem, the inode is ref'd once even before</div><div class='del'>-         * adding the lock into client_list as a precautionary measure.</div><div class='del'>-         * This way even if there are DISCONNECTs, there will always be 1 extra</div><div class='del'>-         * ref on the inode, so @pl_inode is still alive until after the</div><div class='del'>-         * current stack unwinds.</div><div class='del'>-         */</div><div class='del'>-        pl_inode-&gt;inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;revocation_secs != 0) {</div><div class='del'>-                if (lock-&gt;fl_type != F_UNLCK) {</div><div class='del'>-                        __inodelk_prune_stale (this, pl_inode, dom, lock);</div><div class='del'>-                } else if (priv-&gt;monkey_unlocking == _gf_true) {</div><div class='del'>-                        if (pl_does_monkey_want_stuck_lock ()) {</div><div class='del'>-                                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                                {</div><div class='del'>-                                        __pl_inodelk_unref (lock);</div><div class='del'>-                                }</div><div class='del'>-                                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                                inode_unref (pl_inode-&gt;inode);</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                    "MONKEY LOCKING (forcing stuck lock)!");</div><div class='del'>-                                return 0;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;notify_contention) {</div><div class='del'>-                pcontend = &amp;contend;</div><div class='del'>-                INIT_LIST_HEAD(pcontend);</div><div class='del'>-                timespec_now(&amp;now);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	if (ctx)</div><div class='del'>-		pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (lock-&gt;fl_type != F_UNLCK) {</div><div class='del'>-                        ret = __lock_inodelk (this, pl_inode, lock, can_block,</div><div class='del'>-                                              dom, &amp;now, pcontend);</div><div class='del'>-                        if (ret == 0) {</div><div class='del'>-				lock-&gt;frame = NULL;</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" =&gt; OK",</div><div class='del'>-                                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                        lock-&gt;client_pid,</div><div class='del'>-                                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                        lock-&gt;fl_start,</div><div class='del'>-                                        lock-&gt;fl_end);</div><div class='del'>-                        } else if (ret == -EAGAIN) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" =&gt; NOK",</div><div class='del'>-                                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                        lock-&gt;client_pid,</div><div class='del'>-                                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                        lock-&gt;user_flock.l_start,</div><div class='del'>-                                        lock-&gt;user_flock.l_len);</div><div class='del'>-                                if (can_block)</div><div class='del'>-                                        unref = _gf_false;</div><div class='del'>-                                /* For all but the case where a non-blocking</div><div class='del'>-                                 * lock attempt fails, the extra ref taken at</div><div class='del'>-                                 * the start of this function must be negated.</div><div class='del'>-                                 */</div><div class='del'>-                                else</div><div class='del'>-                                        need_inode_unref = _gf_true;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-			if (ctx &amp;&amp; (!ret || can_block))</div><div class='del'>-				list_add_tail (&amp;lock-&gt;client_list,</div><div class='del'>-					       &amp;ctx-&gt;inodelk_lockers);</div><div class='del'>-                } else {</div><div class='del'>-                        /* Irrespective of whether unlock succeeds or not,</div><div class='del'>-                         * the extra inode ref that was done at the start of</div><div class='del'>-                         * this function must be negated. Towards this,</div><div class='del'>-                         * @need_inode_unref flag is set unconditionally here.</div><div class='del'>-                         */</div><div class='del'>-                        need_inode_unref = _gf_true;</div><div class='del'>-                        retlock = __inode_unlock_lock (this, lock, dom);</div><div class='del'>-                        if (!retlock) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "Bad Unlock issued on Inode lock");</div><div class='del'>-                                ret = -EINVAL;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-			list_del_init (&amp;retlock-&gt;client_list);</div><div class='del'>-			__pl_inodelk_unref (retlock);</div><div class='del'>-</div><div class='del'>-                        ret = 0;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+    pl_inode_lock_t *retlock = NULL;</div><div class='add'>+    gf_boolean_t unref = _gf_true;</div><div class='add'>+    gf_boolean_t need_inode_unref = _gf_false;</div><div class='add'>+    struct list_head *pcontend = NULL;</div><div class='add'>+    struct list_head contend;</div><div class='add'>+    struct timespec now = {};</div><div class='add'>+    short fl_type;</div><div class='add'>+</div><div class='add'>+    lock-&gt;pl_inode = pl_inode;</div><div class='add'>+    fl_type = lock-&gt;fl_type;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* Ideally, AFTER a successful lock (both blocking and non-blocking) or</div><div class='add'>+     * an unsuccessful blocking lock operation, the inode needs to be ref'd.</div><div class='add'>+     *</div><div class='add'>+     * But doing so might give room to a race where the lock-requesting</div><div class='add'>+     * client could send a DISCONNECT just before this thread refs the inode</div><div class='add'>+     * after the locking is done, and the epoll thread could unref the inode</div><div class='add'>+     * in cleanup which means the inode's refcount would come down to 0, and</div><div class='add'>+     * the call to pl_forget() at this point destroys @pl_inode. Now when</div><div class='add'>+     * the io-thread executing this function tries to access pl_inode,</div><div class='add'>+     * it could crash on account of illegal memory access.</div><div class='add'>+     *</div><div class='add'>+     * To get around this problem, the inode is ref'd once even before</div><div class='add'>+     * adding the lock into client_list as a precautionary measure.</div><div class='add'>+     * This way even if there are DISCONNECTs, there will always be 1 extra</div><div class='add'>+     * ref on the inode, so @pl_inode is still alive until after the</div><div class='add'>+     * current stack unwinds.</div><div class='add'>+     */</div><div class='add'>+    pl_inode-&gt;inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;revocation_secs != 0) {</div><div class='add'>+        if (lock-&gt;fl_type != F_UNLCK) {</div><div class='add'>+            __inodelk_prune_stale(this, pl_inode, dom, lock);</div><div class='add'>+        } else if (priv-&gt;monkey_unlocking == _gf_true) {</div><div class='add'>+            if (pl_does_monkey_want_stuck_lock()) {</div><div class='add'>+                pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+                {</div><div class='add'>+                    __pl_inodelk_unref(lock);</div><div class='ctx'>                 }</div><div class='del'>-out:</div><div class='del'>-		if (unref)</div><div class='del'>-			__pl_inodelk_unref (lock);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-	if (ctx)</div><div class='del'>-		pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        /* The following (extra) unref corresponds to the ref that</div><div class='del'>-         * was done at the time the lock was granted.</div><div class='del'>-         */</div><div class='del'>-        if ((fl_type == F_UNLCK) &amp;&amp; (ret == 0)) {</div><div class='del'>-                inode_unref (pl_inode-&gt;inode);</div><div class='del'>-                grant_blocked_inode_locks (this, pl_inode, dom, &amp;now,</div><div class='del'>-                                           pcontend);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (need_inode_unref) {</div><div class='del'>-                inode_unref (pl_inode-&gt;inode);</div><div class='add'>+                pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+                inode_unref(pl_inode-&gt;inode);</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "MONKEY LOCKING (forcing stuck lock)!");</div><div class='add'>+                return 0;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;notify_contention) {</div><div class='add'>+        pcontend = &amp;contend;</div><div class='add'>+        INIT_LIST_HEAD(pcontend);</div><div class='add'>+        timespec_now(&amp;now);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ctx)</div><div class='add'>+        pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (lock-&gt;fl_type != F_UNLCK) {</div><div class='add'>+            ret = __lock_inodelk(this, pl_inode, lock, can_block, dom, &amp;now,</div><div class='add'>+                                 pcontend);</div><div class='add'>+            if (ret == 0) {</div><div class='add'>+                lock-&gt;frame = NULL;</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64</div><div class='add'>+                       " =&gt; OK",</div><div class='add'>+                       lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                       lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+                       lock-&gt;fl_start, lock-&gt;fl_end);</div><div class='add'>+            } else if (ret == -EAGAIN) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64</div><div class='add'>+                       " =&gt; NOK",</div><div class='add'>+                       lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                       lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+                       lock-&gt;user_flock.l_start, lock-&gt;user_flock.l_len);</div><div class='add'>+                if (can_block)</div><div class='add'>+                    unref = _gf_false;</div><div class='add'>+                /* For all but the case where a non-blocking</div><div class='add'>+                 * lock attempt fails, the extra ref taken at</div><div class='add'>+                 * the start of this function must be negated.</div><div class='add'>+                 */</div><div class='add'>+                else</div><div class='add'>+                    need_inode_unref = _gf_true;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (ctx &amp;&amp; (!ret || can_block))</div><div class='add'>+                list_add_tail(&amp;lock-&gt;client_list, &amp;ctx-&gt;inodelk_lockers);</div><div class='add'>+        } else {</div><div class='add'>+            /* Irrespective of whether unlock succeeds or not,</div><div class='add'>+             * the extra inode ref that was done at the start of</div><div class='add'>+             * this function must be negated. Towards this,</div><div class='add'>+             * @need_inode_unref flag is set unconditionally here.</div><div class='add'>+             */</div><div class='add'>+            need_inode_unref = _gf_true;</div><div class='add'>+            retlock = __inode_unlock_lock(this, lock, dom);</div><div class='add'>+            if (!retlock) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                       "Bad Unlock issued on Inode lock");</div><div class='add'>+                ret = -EINVAL;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            list_del_init(&amp;retlock-&gt;client_list);</div><div class='add'>+            __pl_inodelk_unref(retlock);</div><div class='ctx'> </div><div class='del'>-        if (pcontend != NULL) {</div><div class='del'>-                inodelk_contention_notify(this, pcontend);</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+    out:</div><div class='add'>+        if (unref)</div><div class='add'>+            __pl_inodelk_unref(lock);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    if (ctx)</div><div class='add'>+        pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    /* The following (extra) unref corresponds to the ref that</div><div class='add'>+     * was done at the time the lock was granted.</div><div class='add'>+     */</div><div class='add'>+    if ((fl_type == F_UNLCK) &amp;&amp; (ret == 0)) {</div><div class='add'>+        inode_unref(pl_inode-&gt;inode);</div><div class='add'>+        grant_blocked_inode_locks(this, pl_inode, dom, &amp;now, pcontend);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (need_inode_unref) {</div><div class='add'>+        inode_unref(pl_inode-&gt;inode);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (pcontend != NULL) {</div><div class='add'>+        inodelk_contention_notify(this, pcontend);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Create a new inode_lock_t */</div><div class='ctx'> pl_inode_lock_t *</div><div class='del'>-new_inode_lock (struct gf_flock *flock, client_t *client, pid_t client_pid,</div><div class='del'>-                call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='del'>-                char *conn_id)</div><div class='add'>+new_inode_lock(struct gf_flock *flock, client_t *client, pid_t client_pid,</div><div class='add'>+               call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+               char *conn_id)</div><div class='ctx'> </div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t *lock = NULL;</div><div class='del'>-</div><div class='del'>-        lock = GF_CALLOC (1, sizeof (*lock),</div><div class='del'>-                          gf_locks_mt_pl_inode_lock_t);</div><div class='del'>-        if (!lock) {</div><div class='del'>-                return NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        lock-&gt;fl_start = flock-&gt;l_start;</div><div class='del'>-        lock-&gt;fl_type  = flock-&gt;l_type;</div><div class='del'>-</div><div class='del'>-        if (flock-&gt;l_len == 0)</div><div class='del'>-                lock-&gt;fl_end = LLONG_MAX;</div><div class='del'>-        else</div><div class='del'>-                lock-&gt;fl_end = flock-&gt;l_start + flock-&gt;l_len - 1;</div><div class='del'>-</div><div class='del'>-        lock-&gt;client     = client;</div><div class='del'>-        lock-&gt;client_pid = client_pid;</div><div class='del'>-        lock-&gt;volume     = volume;</div><div class='del'>-        lock-&gt;owner      = frame-&gt;root-&gt;lk_owner;</div><div class='del'>-        lock-&gt;frame      = frame;</div><div class='del'>-        lock-&gt;this       = this;</div><div class='del'>-</div><div class='del'>-        if (conn_id) {</div><div class='del'>-                lock-&gt;connection_id = gf_strdup (conn_id);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;blocked_locks);</div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;client_list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;contend);</div><div class='del'>-        __pl_inodelk_ref (lock);</div><div class='add'>+    pl_inode_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        return lock;</div><div class='add'>+    lock = GF_CALLOC(1, sizeof(*lock), gf_locks_mt_pl_inode_lock_t);</div><div class='add'>+    if (!lock) {</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    lock-&gt;fl_start = flock-&gt;l_start;</div><div class='add'>+    lock-&gt;fl_type = flock-&gt;l_type;</div><div class='add'>+</div><div class='add'>+    if (flock-&gt;l_len == 0)</div><div class='add'>+        lock-&gt;fl_end = LLONG_MAX;</div><div class='add'>+    else</div><div class='add'>+        lock-&gt;fl_end = flock-&gt;l_start + flock-&gt;l_len - 1;</div><div class='add'>+</div><div class='add'>+    lock-&gt;client = client;</div><div class='add'>+    lock-&gt;client_pid = client_pid;</div><div class='add'>+    lock-&gt;volume = volume;</div><div class='add'>+    lock-&gt;owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+    lock-&gt;frame = frame;</div><div class='add'>+    lock-&gt;this = this;</div><div class='add'>+</div><div class='add'>+    if (conn_id) {</div><div class='add'>+        lock-&gt;connection_id = gf_strdup(conn_id);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;blocked_locks);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;client_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;contend);</div><div class='add'>+    __pl_inodelk_ref(lock);</div><div class='add'>+</div><div class='add'>+    return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_pl_convert_volume (const char *volume, char **res)</div><div class='add'>+_pl_convert_volume(const char *volume, char **res)</div><div class='ctx'> {</div><div class='del'>-        char    *mdata_vol = NULL;</div><div class='del'>-        int     ret = 0;</div><div class='del'>-</div><div class='del'>-        mdata_vol = strrchr (volume, ':');</div><div class='del'>-        //if the volume already ends with :metadata don't bother</div><div class='del'>-        if (mdata_vol &amp;&amp; (strcmp (mdata_vol, ":metadata") == 0))</div><div class='del'>-                return 0;</div><div class='add'>+    char *mdata_vol = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (res, "%s:metadata", volume);</div><div class='del'>-        if (ret &lt;= 0)</div><div class='del'>-                return ENOMEM;</div><div class='add'>+    mdata_vol = strrchr(volume, ':');</div><div class='add'>+    // if the volume already ends with :metadata don't bother</div><div class='add'>+    if (mdata_vol &amp;&amp; (strcmp(mdata_vol, ":metadata") == 0))</div><div class='ctx'>         return 0;</div><div class='add'>+</div><div class='add'>+    ret = gf_asprintf(res, "%s:metadata", volume);</div><div class='add'>+    if (ret &lt;= 0)</div><div class='add'>+        return ENOMEM;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_pl_convert_volume_for_special_range (struct gf_flock *flock,</div><div class='del'>-                                      const char *volume, char **res)</div><div class='add'>+_pl_convert_volume_for_special_range(struct gf_flock *flock, const char *volume,</div><div class='add'>+                                     char **res)</div><div class='ctx'> {</div><div class='del'>-        int32_t     ret = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        if ((flock-&gt;l_start == LLONG_MAX -1) &amp;&amp;</div><div class='del'>-            (flock-&gt;l_len == 0)) {</div><div class='del'>-                ret = _pl_convert_volume (volume, res);</div><div class='del'>-        }</div><div class='add'>+    if ((flock-&gt;l_start == LLONG_MAX - 1) &amp;&amp; (flock-&gt;l_len == 0)) {</div><div class='add'>+        ret = _pl_convert_volume(volume, res);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Common inodelk code called from pl_inodelk and pl_finodelk */</div><div class='ctx'> int</div><div class='del'>-pl_common_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                   const char *volume, inode_t *inode, int32_t cmd,</div><div class='del'>-                   struct gf_flock *flock, loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+pl_common_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,</div><div class='add'>+                  inode_t *inode, int32_t cmd, struct gf_flock *flock,</div><div class='add'>+                  loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t           op_ret     = -1;</div><div class='del'>-        int32_t           op_errno   = 0;</div><div class='del'>-        int               ret        = -1;</div><div class='del'>-        GF_UNUSED int     dict_ret   = -1;</div><div class='del'>-        int               can_block  = 0;</div><div class='del'>-        pl_inode_t *      pinode     = NULL;</div><div class='del'>-        pl_inode_lock_t * reqlock    = NULL;</div><div class='del'>-        pl_dom_list_t *   dom        = NULL;</div><div class='del'>-        char             *res        = NULL;</div><div class='del'>-        char             *res1       = NULL;</div><div class='del'>-        char             *conn_id    = NULL;</div><div class='del'>-        pl_ctx_t         *ctx        = NULL;</div><div class='del'>-</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_ret = dict_get_str (xdata, "connection-id", &amp;conn_id);</div><div class='del'>-</div><div class='del'>-        VALIDATE_OR_GOTO (frame, out);</div><div class='del'>-        VALIDATE_OR_GOTO (inode, unwind);</div><div class='del'>-        VALIDATE_OR_GOTO (flock, unwind);</div><div class='del'>-</div><div class='del'>-        if ((flock-&gt;l_start &lt; 0) || (flock-&gt;l_len &lt; 0)) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_errno = _pl_convert_volume_for_special_range (flock, volume, &amp;res);</div><div class='del'>-        if (op_errno)</div><div class='del'>-                goto unwind;</div><div class='del'>-        if (res)</div><div class='del'>-                volume = res;</div><div class='del'>-</div><div class='del'>-        pl_trace_in (this, frame, fd, loc, cmd, flock, volume);</div><div class='del'>-</div><div class='del'>-	if (frame-&gt;root-&gt;client) {</div><div class='del'>-		ctx = pl_ctx_get (frame-&gt;root-&gt;client, this);</div><div class='del'>-		if (!ctx) {</div><div class='del'>-			op_errno = ENOMEM;</div><div class='del'>-			gf_log (this-&gt;name, GF_LOG_INFO, "pl_ctx_get() failed");</div><div class='del'>-			goto unwind;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        pinode = pl_inode_get (this, inode);</div><div class='del'>-        if (!pinode) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    GF_UNUSED int dict_ret = -1;</div><div class='add'>+    int can_block = 0;</div><div class='add'>+    pl_inode_t *pinode = NULL;</div><div class='add'>+    pl_inode_lock_t *reqlock = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    char *res = NULL;</div><div class='add'>+    char *res1 = NULL;</div><div class='add'>+    char *conn_id = NULL;</div><div class='add'>+    pl_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_ret = dict_get_str(xdata, "connection-id", &amp;conn_id);</div><div class='add'>+</div><div class='add'>+    VALIDATE_OR_GOTO(frame, out);</div><div class='add'>+    VALIDATE_OR_GOTO(inode, unwind);</div><div class='add'>+    VALIDATE_OR_GOTO(flock, unwind);</div><div class='add'>+</div><div class='add'>+    if ((flock-&gt;l_start &lt; 0) || (flock-&gt;l_len &lt; 0)) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_errno = _pl_convert_volume_for_special_range(flock, volume, &amp;res);</div><div class='add'>+    if (op_errno)</div><div class='add'>+        goto unwind;</div><div class='add'>+    if (res)</div><div class='add'>+        volume = res;</div><div class='add'>+</div><div class='add'>+    pl_trace_in(this, frame, fd, loc, cmd, flock, volume);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;client) {</div><div class='add'>+        ctx = pl_ctx_get(frame-&gt;root-&gt;client, this);</div><div class='add'>+        if (!ctx) {</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_INFO, "pl_ctx_get() failed");</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='del'>-        dom = get_domain (pinode, volume);</div><div class='del'>-        if (!dom) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        reqlock = new_inode_lock (flock, frame-&gt;root-&gt;client, frame-&gt;root-&gt;pid,</div><div class='del'>-                                  frame, this, dom-&gt;domain, conn_id);</div><div class='del'>-</div><div class='del'>-        if (!reqlock) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        switch (cmd) {</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pinode = pl_inode_get(this, inode);</div><div class='add'>+    if (!pinode) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dom = get_domain(pinode, volume);</div><div class='add'>+    if (!dom) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    reqlock = new_inode_lock(flock, frame-&gt;root-&gt;client, frame-&gt;root-&gt;pid,</div><div class='add'>+                             frame, this, dom-&gt;domain, conn_id);</div><div class='add'>+</div><div class='add'>+    if (!reqlock) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case F_SETLKW:</div><div class='del'>-                can_block = 1;</div><div class='add'>+            can_block = 1;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'>         case F_SETLK:</div><div class='del'>-                memcpy (&amp;reqlock-&gt;user_flock, flock, sizeof (struct gf_flock));</div><div class='del'>-                ret = pl_inode_setlk (this, ctx, pinode, reqlock, can_block,</div><div class='del'>-				      dom, inode);</div><div class='del'>-</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        if ((can_block) &amp;&amp; (F_UNLCK != flock-&gt;l_type)) {</div><div class='del'>-                                pl_trace_block (this, frame, fd, loc,</div><div class='del'>-                                                cmd, flock, volume);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE, "returning EAGAIN");</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        goto unwind;</div><div class='add'>+            memcpy(&amp;reqlock-&gt;user_flock, flock, sizeof(struct gf_flock));</div><div class='add'>+            ret = pl_inode_setlk(this, ctx, pinode, reqlock, can_block, dom,</div><div class='add'>+                                 inode);</div><div class='add'>+</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                if ((can_block) &amp;&amp; (F_UNLCK != flock-&gt;l_type)) {</div><div class='add'>+                    pl_trace_block(this, frame, fd, loc, cmd, flock, volume);</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-                break;</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE, "returning EAGAIN");</div><div class='add'>+                op_errno = -ret;</div><div class='add'>+                goto unwind;</div><div class='add'>+            }</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         default:</div><div class='del'>-                op_errno = ENOTSUP;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Lock command F_GETLK not supported for [f]inodelk "</div><div class='del'>-                        "(cmd=%d)",</div><div class='del'>-                        cmd);</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+            op_errno = ENOTSUP;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "Lock command F_GETLK not supported for [f]inodelk "</div><div class='add'>+                   "(cmd=%d)",</div><div class='add'>+                   cmd);</div><div class='add'>+            goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        op_ret = 0;</div><div class='add'>+    op_ret = 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        if (flock != NULL)</div><div class='del'>-                pl_trace_out (this, frame, fd, loc, cmd, flock, op_ret,</div><div class='del'>-                              op_errno, volume);</div><div class='add'>+    if (flock != NULL)</div><div class='add'>+        pl_trace_out(this, frame, fd, loc, cmd, flock, op_ret, op_errno,</div><div class='add'>+                     volume);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (inodelk, frame, op_ret, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(inodelk, frame, op_ret, op_errno, NULL);</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (res);</div><div class='del'>-        GF_FREE (res1);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(res);</div><div class='add'>+    GF_FREE(res1);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *flock,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+pl_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_common_inodelk (frame, this, volume, loc-&gt;inode, cmd, flock,</div><div class='del'>-                           loc, NULL, xdata);</div><div class='add'>+    pl_common_inodelk(frame, this, volume, loc-&gt;inode, cmd, flock, loc, NULL,</div><div class='add'>+                      xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_finodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *flock,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+pl_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+            int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_common_inodelk (frame, this, volume, fd-&gt;inode, cmd, flock,</div><div class='del'>-                           NULL, fd, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    pl_common_inodelk(frame, this, volume, fd-&gt;inode, cmd, flock, NULL, fd,</div><div class='add'>+                      xdata);</div><div class='ctx'> </div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int32_t</div><div class='del'>-__get_inodelk_dom_count (pl_dom_list_t *dom)</div><div class='add'>+__get_inodelk_dom_count(pl_dom_list_t *dom)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_lock_t     *lock   = NULL;</div><div class='del'>-        int32_t             count   = 0;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;inodelk_list, list) {</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-        list_for_each_entry (lock, &amp;dom-&gt;blocked_inodelks, blocked_locks) {</div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-        return count;</div><div class='add'>+    pl_inode_lock_t *lock = NULL;</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;inodelk_list, list) { count++; }</div><div class='add'>+    list_for_each_entry(lock, &amp;dom-&gt;blocked_inodelks, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Returns the no. of locks (blocked/granted) held on a given domain name</div><div class='ctx'>  * If @domname is NULL, returns the no. of locks in all the domains present.</div><div class='ctx'>  * If @domname is non-NULL and non-existent, returns 0 */</div><div class='ctx'> int32_t</div><div class='del'>-__get_inodelk_count (xlator_t *this, pl_inode_t *pl_inode, char *domname)</div><div class='add'>+__get_inodelk_count(xlator_t *this, pl_inode_t *pl_inode, char *domname)</div><div class='ctx'> {</div><div class='del'>-        int32_t            count  = 0;</div><div class='del'>-        pl_dom_list_t     *dom    = NULL;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (dom, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='del'>-                if (domname) {</div><div class='del'>-                        if (strcmp (domname, dom-&gt;domain) == 0) {</div><div class='del'>-                                count = __get_inodelk_dom_count (dom);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                } else {</div><div class='del'>-                    /* Counting locks from all domains */</div><div class='del'>-                        count += __get_inodelk_dom_count (dom);</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(dom, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        if (domname) {</div><div class='add'>+            if (strcmp(domname, dom-&gt;domain) == 0) {</div><div class='add'>+                count = __get_inodelk_dom_count(dom);</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                }</div><div class='add'>+        } else {</div><div class='add'>+            /* Counting locks from all domains */</div><div class='add'>+            count += __get_inodelk_dom_count(dom);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-get_inodelk_count (xlator_t *this, inode_t *inode, char *domname)</div><div class='add'>+get_inodelk_count(xlator_t *this, inode_t *inode, char *domname)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t   *pl_inode = NULL;</div><div class='del'>-        uint64_t      tmp_pl_inode = 0;</div><div class='del'>-        int           ret      = 0;</div><div class='del'>-        int32_t       count    = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    uint64_t tmp_pl_inode = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t count = 0;</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;tmp_pl_inode);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;tmp_pl_inode);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pl_inode = (pl_inode_t *)(long) tmp_pl_inode;</div><div class='add'>+    pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                count = __get_inodelk_count (this, pl_inode, domname);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        count = __get_inodelk_count(this, pl_inode, domname);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c<br/>index 22d5990275d..6b4392ec21d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/posix.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/src/posix.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/posix.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/posix.c</a></div><div class='hunk'>@@ -28,30 +28,35 @@</div><div class='ctx'> </div><div class='ctx'> #ifndef LLONG_MAX</div><div class='ctx'> #define LLONG_MAX LONG_LONG_MAX /* compat with old gcc */</div><div class='del'>-#endif /* LLONG_MAX */</div><div class='add'>+#endif                          /* LLONG_MAX */</div><div class='ctx'> </div><div class='ctx'> /* Forward declarations */</div><div class='ctx'> </div><div class='del'>-void do_blocked_rw (pl_inode_t *);</div><div class='del'>-static int __rw_allowable (pl_inode_t *, posix_lock_t *, glusterfs_fop_t);</div><div class='del'>-static int format_brickname(char *);</div><div class='del'>-int pl_lockinfo_get_brickname (xlator_t *, inode_t *, int32_t *);</div><div class='del'>-static int fetch_pathinfo(xlator_t *, inode_t *, int32_t *, char **);</div><div class='del'>-</div><div class='del'>-#define PL_STACK_UNWIND_AND_FREE(__local, fop, frame, op_ret, params ...)   \</div><div class='del'>-        do {                                                                \</div><div class='del'>-                frame-&gt;local = NULL;                                        \</div><div class='del'>-                STACK_UNWIND_STRICT (fop, frame, op_ret, params);           \</div><div class='del'>-                if (__local) {                                              \</div><div class='del'>-                        if (__local-&gt;inodelk_dom_count_req)                 \</div><div class='del'>-                                data_unref (__local-&gt;inodelk_dom_count_req);\</div><div class='del'>-                        loc_wipe (&amp;__local-&gt;loc[0]);                        \</div><div class='del'>-                        loc_wipe (&amp;__local-&gt;loc[1]);                        \</div><div class='del'>-                        if (__local-&gt;fd)                                    \</div><div class='del'>-                                fd_unref (__local-&gt;fd);                     \</div><div class='del'>-                        mem_put (__local);                                  \</div><div class='del'>-                }                                                           \</div><div class='del'>-        } while (0)</div><div class='add'>+void</div><div class='add'>+do_blocked_rw(pl_inode_t *);</div><div class='add'>+static int</div><div class='add'>+__rw_allowable(pl_inode_t *, posix_lock_t *, glusterfs_fop_t);</div><div class='add'>+static int</div><div class='add'>+format_brickname(char *);</div><div class='add'>+int</div><div class='add'>+pl_lockinfo_get_brickname(xlator_t *, inode_t *, int32_t *);</div><div class='add'>+static int</div><div class='add'>+fetch_pathinfo(xlator_t *, inode_t *, int32_t *, char **);</div><div class='add'>+</div><div class='add'>+#define PL_STACK_UNWIND_AND_FREE(__local, fop, frame, op_ret, params...)       \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        frame-&gt;local = NULL;                                                   \</div><div class='add'>+        STACK_UNWIND_STRICT(fop, frame, op_ret, params);                       \</div><div class='add'>+        if (__local) {                                                         \</div><div class='add'>+            if (__local-&gt;inodelk_dom_count_req)                                \</div><div class='add'>+                data_unref(__local-&gt;inodelk_dom_count_req);                    \</div><div class='add'>+            loc_wipe(&amp;__local-&gt;loc[0]);                                        \</div><div class='add'>+            loc_wipe(&amp;__local-&gt;loc[1]);                                        \</div><div class='add'>+            if (__local-&gt;fd)                                                   \</div><div class='add'>+                fd_unref(__local-&gt;fd);                                         \</div><div class='add'>+            mem_put(__local);                                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * The client is always requesting data, but older</div><div class='hunk'>@@ -63,354 +68,344 @@ static int fetch_pathinfo(xlator_t *, inode_t *, int32_t *, char **);</div><div class='ctx'>  * older clients (making the newer brick to behave as</div><div class='ctx'>  * an old brick).</div><div class='ctx'>  */</div><div class='del'>-#define PL_STACK_UNWIND_FOR_CLIENT(fop, xdata, frame, op_ret, params ...)     \</div><div class='del'>-        do {                                                                  \</div><div class='del'>-                pl_local_t *__local = NULL;                                   \</div><div class='del'>-                if (frame-&gt;root-&gt;client &amp;&amp;                                    \</div><div class='del'>-                    (frame-&gt;root-&gt;client-&gt;opversion &lt; GD_OP_VERSION_3_10_0)) {\</div><div class='del'>-                        __local = frame-&gt;local;                               \</div><div class='del'>-                        PL_STACK_UNWIND_AND_FREE (__local, fop, frame, op_ret, params);\</div><div class='del'>-                } else {                                                      \</div><div class='del'>-                        PL_STACK_UNWIND (fop, xdata, frame, op_ret, params);  \</div><div class='del'>-                }                                                             \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define PL_STACK_UNWIND(fop, xdata, frame, op_ret, params ...)          \</div><div class='del'>-        do {                                                            \</div><div class='del'>-                pl_local_t *__local = NULL;                             \</div><div class='del'>-                inode_t *__parent = NULL;                               \</div><div class='del'>-                inode_t *__inode = NULL;                                \</div><div class='del'>-                char    *__name = NULL;                                 \</div><div class='del'>-                dict_t  *__unref = NULL;                                \</div><div class='del'>-                int __i = 0 ;                                           \</div><div class='del'>-                __local = frame-&gt;local;                                 \</div><div class='del'>-                if (op_ret &gt;= 0 &amp;&amp; pl_needs_xdata_response (frame-&gt;local)) {\</div><div class='del'>-                        if (xdata)                                      \</div><div class='del'>-                                dict_ref (xdata);                       \</div><div class='del'>-                        else                                            \</div><div class='del'>-                                xdata = dict_new();                     \</div><div class='del'>-                        if (xdata) {                                    \</div><div class='del'>-                                __unref = xdata;                        \</div><div class='del'>-                                while (__local-&gt;fd || __local-&gt;loc[__i].inode) {  \</div><div class='del'>-                                        pl_get_xdata_rsp_args (__local,            \</div><div class='del'>-                                              #fop, &amp;__parent, &amp;__inode,           \</div><div class='del'>-                                              &amp;__name, __i);                       \</div><div class='del'>-                                        pl_set_xdata_response (frame-&gt;this,        \</div><div class='del'>-                                               __local, __parent, __inode, __name, \</div><div class='del'>-                                               xdata, __i &gt; 0);                    \</div><div class='del'>-                                        if (__local-&gt;fd || __i == 1)               \</div><div class='del'>-                                                break;                  \</div><div class='del'>-                                        __i++;                          \</div><div class='del'>-                                }                                       \</div><div class='del'>-                        }                                               \</div><div class='del'>-                }                                                       \</div><div class='del'>-                PL_STACK_UNWIND_AND_FREE (__local, fop, frame, op_ret, params);\</div><div class='del'>-                if (__unref)                                            \</div><div class='del'>-                        dict_unref (__unref);                           \</div><div class='del'>-        } while (0)</div><div class='del'>-</div><div class='del'>-#define PL_LOCAL_GET_REQUESTS(frame, this, xdata, __fd, __loc, __newloc)\</div><div class='del'>-        do {                                                            \</div><div class='del'>-                if (pl_has_xdata_requests (xdata)) {                    \</div><div class='del'>-                        frame-&gt;local = mem_get0 (this-&gt;local_pool);     \</div><div class='del'>-                        pl_local_t *__local = frame-&gt;local;             \</div><div class='del'>-                        if (__local) {                                  \</div><div class='del'>-                                if (__fd) {                             \</div><div class='del'>-                                        __local-&gt;fd = fd_ref (__fd);    \</div><div class='del'>-                                } else {                                \</div><div class='del'>-                                        if (__loc)                      \</div><div class='del'>-                                                loc_copy (&amp;__local-&gt;loc[0],\</div><div class='del'>-                                                           __loc);      \</div><div class='del'>-                                        if (__newloc)                   \</div><div class='del'>-                                                 loc_copy (&amp;__local-&gt;loc[1],\</div><div class='del'>-                                                            __newloc);  \</div><div class='del'>-                                }                                       \</div><div class='del'>-                                pl_get_xdata_requests (__local, xdata); \</div><div class='del'>-                        }                                               \</div><div class='del'>-                }                                                       \</div><div class='del'>-        } while (0)</div><div class='add'>+#define PL_STACK_UNWIND_FOR_CLIENT(fop, xdata, frame, op_ret, params...)       \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        pl_local_t *__local = NULL;                                            \</div><div class='add'>+        if (frame-&gt;root-&gt;client &amp;&amp;                                             \</div><div class='add'>+            (frame-&gt;root-&gt;client-&gt;opversion &lt; GD_OP_VERSION_3_10_0)) {         \</div><div class='add'>+            __local = frame-&gt;local;                                            \</div><div class='add'>+            PL_STACK_UNWIND_AND_FREE(__local, fop, frame, op_ret, params);     \</div><div class='add'>+        } else {                                                               \</div><div class='add'>+            PL_STACK_UNWIND(fop, xdata, frame, op_ret, params);                \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define PL_STACK_UNWIND(fop, xdata, frame, op_ret, params...)                  \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        pl_local_t *__local = NULL;                                            \</div><div class='add'>+        inode_t *__parent = NULL;                                              \</div><div class='add'>+        inode_t *__inode = NULL;                                               \</div><div class='add'>+        char *__name = NULL;                                                   \</div><div class='add'>+        dict_t *__unref = NULL;                                                \</div><div class='add'>+        int __i = 0;                                                           \</div><div class='add'>+        __local = frame-&gt;local;                                                \</div><div class='add'>+        if (op_ret &gt;= 0 &amp;&amp; pl_needs_xdata_response(frame-&gt;local)) {            \</div><div class='add'>+            if (xdata)                                                         \</div><div class='add'>+                dict_ref(xdata);                                               \</div><div class='add'>+            else                                                               \</div><div class='add'>+                xdata = dict_new();                                            \</div><div class='add'>+            if (xdata) {                                                       \</div><div class='add'>+                __unref = xdata;                                               \</div><div class='add'>+                while (__local-&gt;fd || __local-&gt;loc[__i].inode) {               \</div><div class='add'>+                    pl_get_xdata_rsp_args(__local, #fop, &amp;__parent, &amp;__inode,  \</div><div class='add'>+                                          &amp;__name, __i);                       \</div><div class='add'>+                    pl_set_xdata_response(frame-&gt;this, __local, __parent,      \</div><div class='add'>+                                          __inode, __name, xdata, __i &gt; 0);    \</div><div class='add'>+                    if (__local-&gt;fd || __i == 1)                               \</div><div class='add'>+                        break;                                                 \</div><div class='add'>+                    __i++;                                                     \</div><div class='add'>+                }                                                              \</div><div class='add'>+            }                                                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+        PL_STACK_UNWIND_AND_FREE(__local, fop, frame, op_ret, params);         \</div><div class='add'>+        if (__unref)                                                           \</div><div class='add'>+            dict_unref(__unref);                                               \</div><div class='add'>+    } while (0)</div><div class='add'>+</div><div class='add'>+#define PL_LOCAL_GET_REQUESTS(frame, this, xdata, __fd, __loc, __newloc)       \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        if (pl_has_xdata_requests(xdata)) {                                    \</div><div class='add'>+            frame-&gt;local = mem_get0(this-&gt;local_pool);                         \</div><div class='add'>+            pl_local_t *__local = frame-&gt;local;                                \</div><div class='add'>+            if (__local) {                                                     \</div><div class='add'>+                if (__fd) {                                                    \</div><div class='add'>+                    __local-&gt;fd = fd_ref(__fd);                                \</div><div class='add'>+                } else {                                                       \</div><div class='add'>+                    if (__loc)                                                 \</div><div class='add'>+                        loc_copy(&amp;__local-&gt;loc[0], __loc);                     \</div><div class='add'>+                    if (__newloc)                                              \</div><div class='add'>+                        loc_copy(&amp;__local-&gt;loc[1], __newloc);                  \</div><div class='add'>+                }                                                              \</div><div class='add'>+                pl_get_xdata_requests(__local, xdata);                         \</div><div class='add'>+            }                                                                  \</div><div class='add'>+        }                                                                      \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-pl_has_xdata_requests (dict_t *xdata)</div><div class='add'>+pl_has_xdata_requests(dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        char *reqs[] = {GLUSTERFS_ENTRYLK_COUNT, GLUSTERFS_INODELK_COUNT,</div><div class='del'>-                        GLUSTERFS_INODELK_DOM_COUNT, GLUSTERFS_POSIXLK_COUNT,</div><div class='del'>-                        GLUSTERFS_PARENT_ENTRYLK, NULL};</div><div class='del'>-        int i = 0;</div><div class='add'>+    char *reqs[] = {GLUSTERFS_ENTRYLK_COUNT,     GLUSTERFS_INODELK_COUNT,</div><div class='add'>+                    GLUSTERFS_INODELK_DOM_COUNT, GLUSTERFS_POSIXLK_COUNT,</div><div class='add'>+                    GLUSTERFS_PARENT_ENTRYLK,    NULL};</div><div class='add'>+    int i = 0;</div><div class='ctx'> </div><div class='del'>-        if (!xdata)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!xdata)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; reqs[i]; i++)</div><div class='del'>-                if (dict_get (xdata, reqs[i]))</div><div class='del'>-                        return _gf_true;</div><div class='add'>+    for (i = 0; reqs[i]; i++)</div><div class='add'>+        if (dict_get(xdata, reqs[i]))</div><div class='add'>+            return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_get_xdata_requests (pl_local_t *local, dict_t *xdata)</div><div class='add'>+pl_get_xdata_requests(pl_local_t *local, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        if (!local || !xdata)</div><div class='del'>-                return;</div><div class='add'>+    if (!local || !xdata)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (dict_get (xdata, GLUSTERFS_ENTRYLK_COUNT)) {</div><div class='del'>-                local-&gt;entrylk_count_req = 1;</div><div class='del'>-                dict_del (xdata, GLUSTERFS_ENTRYLK_COUNT);</div><div class='del'>-        }</div><div class='del'>-        if (dict_get (xdata, GLUSTERFS_INODELK_COUNT)) {</div><div class='del'>-                local-&gt;inodelk_count_req = 1;</div><div class='del'>-                dict_del (xdata, GLUSTERFS_INODELK_COUNT);</div><div class='del'>-        }</div><div class='add'>+    if (dict_get(xdata, GLUSTERFS_ENTRYLK_COUNT)) {</div><div class='add'>+        local-&gt;entrylk_count_req = 1;</div><div class='add'>+        dict_del(xdata, GLUSTERFS_ENTRYLK_COUNT);</div><div class='add'>+    }</div><div class='add'>+    if (dict_get(xdata, GLUSTERFS_INODELK_COUNT)) {</div><div class='add'>+        local-&gt;inodelk_count_req = 1;</div><div class='add'>+        dict_del(xdata, GLUSTERFS_INODELK_COUNT);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;inodelk_dom_count_req = dict_get (xdata, GLUSTERFS_INODELK_DOM_COUNT);</div><div class='del'>-        if (local-&gt;inodelk_dom_count_req) {</div><div class='del'>-                data_ref (local-&gt;inodelk_dom_count_req);</div><div class='del'>-                dict_del (xdata, GLUSTERFS_INODELK_DOM_COUNT);</div><div class='del'>-        }</div><div class='add'>+    local-&gt;inodelk_dom_count_req = dict_get(xdata, GLUSTERFS_INODELK_DOM_COUNT);</div><div class='add'>+    if (local-&gt;inodelk_dom_count_req) {</div><div class='add'>+        data_ref(local-&gt;inodelk_dom_count_req);</div><div class='add'>+        dict_del(xdata, GLUSTERFS_INODELK_DOM_COUNT);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get (xdata, GLUSTERFS_POSIXLK_COUNT)) {</div><div class='del'>-                local-&gt;posixlk_count_req = 1;</div><div class='del'>-                dict_del (xdata, GLUSTERFS_POSIXLK_COUNT);</div><div class='del'>-        }</div><div class='add'>+    if (dict_get(xdata, GLUSTERFS_POSIXLK_COUNT)) {</div><div class='add'>+        local-&gt;posixlk_count_req = 1;</div><div class='add'>+        dict_del(xdata, GLUSTERFS_POSIXLK_COUNT);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (dict_get (xdata, GLUSTERFS_PARENT_ENTRYLK)) {</div><div class='del'>-                local-&gt;parent_entrylk_req = 1;</div><div class='del'>-                dict_del (xdata, GLUSTERFS_PARENT_ENTRYLK);</div><div class='del'>-        }</div><div class='add'>+    if (dict_get(xdata, GLUSTERFS_PARENT_ENTRYLK)) {</div><div class='add'>+        local-&gt;parent_entrylk_req = 1;</div><div class='add'>+        dict_del(xdata, GLUSTERFS_PARENT_ENTRYLK);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-pl_needs_xdata_response (pl_local_t *local)</div><div class='add'>+pl_needs_xdata_response(pl_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (!local)</div><div class='del'>-                return _gf_false;</div><div class='add'>+    if (!local)</div><div class='add'>+        return _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;parent_entrylk_req)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (local-&gt;parent_entrylk_req)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;entrylk_count_req)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (local-&gt;entrylk_count_req)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inodelk_dom_count_req)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (local-&gt;inodelk_dom_count_req)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inodelk_count_req)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (local-&gt;inodelk_count_req)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;posixlk_count_req)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        return _gf_false;</div><div class='add'>+    if (local-&gt;posixlk_count_req)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_get_xdata_rsp_args (pl_local_t *local, char *fop, inode_t **parent,</div><div class='del'>-                       inode_t **inode, char **name, int i)</div><div class='del'>-{</div><div class='del'>-        if (strcmp (fop, "lookup") == 0) {</div><div class='del'>-                *parent = local-&gt;loc[0].parent;</div><div class='del'>-                *inode = local-&gt;loc[0].inode;</div><div class='del'>-                *name = (char *)local-&gt;loc[0].name;</div><div class='add'>+pl_get_xdata_rsp_args(pl_local_t *local, char *fop, inode_t **parent,</div><div class='add'>+                      inode_t **inode, char **name, int i)</div><div class='add'>+{</div><div class='add'>+    if (strcmp(fop, "lookup") == 0) {</div><div class='add'>+        *parent = local-&gt;loc[0].parent;</div><div class='add'>+        *inode = local-&gt;loc[0].inode;</div><div class='add'>+        *name = (char *)local-&gt;loc[0].name;</div><div class='add'>+    } else {</div><div class='add'>+        if (local-&gt;fd) {</div><div class='add'>+            *inode = local-&gt;fd-&gt;inode;</div><div class='ctx'>         } else {</div><div class='del'>-                if (local-&gt;fd) {</div><div class='del'>-                        *inode = local-&gt;fd-&gt;inode;</div><div class='del'>-                } else {</div><div class='del'>-                        *inode = local-&gt;loc[i].parent;</div><div class='del'>-                }</div><div class='add'>+            *inode = local-&gt;loc[i].parent;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-__get_posixlk_count (xlator_t *this, pl_inode_t *pl_inode)</div><div class='add'>+__get_posixlk_count(xlator_t *this, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *lock   = NULL;</div><div class='del'>-        int32_t       count  = 0;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='add'>+    int32_t count = 0;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (lock, &amp;pl_inode-&gt;ext_list, list) {</div><div class='add'>+    list_for_each_entry(lock, &amp;pl_inode-&gt;ext_list, list) { count++; }</div><div class='ctx'> </div><div class='del'>-                count++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-get_posixlk_count (xlator_t *this, inode_t *inode)</div><div class='add'>+get_posixlk_count(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t   *pl_inode = NULL;</div><div class='del'>-        uint64_t      tmp_pl_inode = 0;</div><div class='del'>-        int           ret      = 0;</div><div class='del'>-        int32_t       count    = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    uint64_t tmp_pl_inode = 0;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    int32_t count = 0;</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;tmp_pl_inode);</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;tmp_pl_inode);</div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pl_inode = (pl_inode_t *)(long) tmp_pl_inode;</div><div class='add'>+    pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                count = __get_posixlk_count (this, pl_inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        count = __get_posixlk_count(this, pl_inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return count;</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_parent_entrylk_xattr_fill (xlator_t *this, inode_t *parent,</div><div class='del'>-                              char *basename, dict_t *dict, gf_boolean_t keep_max)</div><div class='del'>-{</div><div class='del'>-        int32_t         entrylk  = 0;</div><div class='del'>-        int32_t         maxcount = -1;</div><div class='del'>-        int             ret      = -1;</div><div class='del'>-</div><div class='del'>-        if (!parent || !basename || !strlen (basename))</div><div class='del'>-                goto out;</div><div class='del'>-        if (keep_max) {</div><div class='del'>-                ret = dict_get_int32 (dict, GLUSTERFS_PARENT_ENTRYLK, &amp;maxcount);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                " Failed to fetch the value for key %s",</div><div class='del'>-                                GLUSTERFS_PARENT_ENTRYLK);</div><div class='del'>-        }</div><div class='del'>-        entrylk = check_entrylk_on_basename (this, parent, basename);</div><div class='del'>-        if (maxcount &gt;= entrylk)</div><div class='del'>-                return;</div><div class='add'>+pl_parent_entrylk_xattr_fill(xlator_t *this, inode_t *parent, char *basename,</div><div class='add'>+                             dict_t *dict, gf_boolean_t keep_max)</div><div class='add'>+{</div><div class='add'>+    int32_t entrylk = 0;</div><div class='add'>+    int32_t maxcount = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (!parent || !basename || !strlen(basename))</div><div class='add'>+        goto out;</div><div class='add'>+    if (keep_max) {</div><div class='add'>+        ret = dict_get_int32(dict, GLUSTERFS_PARENT_ENTRYLK, &amp;maxcount);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, " Failed to fetch the value for key %s",</div><div class='add'>+                         GLUSTERFS_PARENT_ENTRYLK);</div><div class='add'>+    }</div><div class='add'>+    entrylk = check_entrylk_on_basename(this, parent, basename);</div><div class='add'>+    if (maxcount &gt;= entrylk)</div><div class='add'>+        return;</div><div class='ctx'> out:</div><div class='del'>-        ret = dict_set_int32 (dict, GLUSTERFS_PARENT_ENTRYLK, entrylk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                        " dict_set failed on key %s", GLUSTERFS_PARENT_ENTRYLK);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(dict, GLUSTERFS_PARENT_ENTRYLK, entrylk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, " dict_set failed on key %s",</div><div class='add'>+                     GLUSTERFS_PARENT_ENTRYLK);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_entrylk_xattr_fill (xlator_t *this, inode_t *inode,</div><div class='del'>-                       dict_t *dict, gf_boolean_t keep_max)</div><div class='del'>-{</div><div class='del'>-        int32_t     count = 0;</div><div class='del'>-        int32_t     maxcount = -1;</div><div class='del'>-        int         ret   = -1;</div><div class='del'>-</div><div class='del'>-        if (keep_max) {</div><div class='del'>-                ret = dict_get_int32 (dict, GLUSTERFS_ENTRYLK_COUNT, &amp;maxcount);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                " Failed to fetch the value for key %s",</div><div class='del'>-                                GLUSTERFS_ENTRYLK_COUNT);</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        count = get_entrylk_count (this, inode);</div><div class='del'>-        if (maxcount &gt;= count)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, GLUSTERFS_ENTRYLK_COUNT, count);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                        " dict_set failed on key %s", GLUSTERFS_ENTRYLK_COUNT);</div><div class='del'>-        }</div><div class='add'>+pl_entrylk_xattr_fill(xlator_t *this, inode_t *inode, dict_t *dict,</div><div class='add'>+                      gf_boolean_t keep_max)</div><div class='add'>+{</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    int32_t maxcount = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (keep_max) {</div><div class='add'>+        ret = dict_get_int32(dict, GLUSTERFS_ENTRYLK_COUNT, &amp;maxcount);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, " Failed to fetch the value for key %s",</div><div class='add'>+                         GLUSTERFS_ENTRYLK_COUNT);</div><div class='add'>+    }</div><div class='add'>+    count = get_entrylk_count(this, inode);</div><div class='add'>+    if (maxcount &gt;= count)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='add'>+    ret = dict_set_int32(dict, GLUSTERFS_ENTRYLK_COUNT, count);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, " dict_set failed on key %s",</div><div class='add'>+                     GLUSTERFS_ENTRYLK_COUNT);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_inodelk_xattr_fill (xlator_t *this, inode_t *inode, dict_t *dict,</div><div class='del'>-                       char *domname, gf_boolean_t keep_max)</div><div class='del'>-{</div><div class='del'>-        int32_t     count = 0;</div><div class='del'>-        int32_t     maxcount = -1;</div><div class='del'>-        int         ret   = -1;</div><div class='del'>-</div><div class='del'>-        if (keep_max) {</div><div class='del'>-                ret = dict_get_int32 (dict, GLUSTERFS_INODELK_COUNT, &amp;maxcount);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                " Failed to fetch the value for key %s",</div><div class='del'>-                                GLUSTERFS_INODELK_COUNT);</div><div class='del'>-        }</div><div class='del'>-        count = get_inodelk_count (this, inode, domname);</div><div class='del'>-        if (maxcount &gt;= count)</div><div class='del'>-                return;</div><div class='add'>+pl_inodelk_xattr_fill(xlator_t *this, inode_t *inode, dict_t *dict,</div><div class='add'>+                      char *domname, gf_boolean_t keep_max)</div><div class='add'>+{</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    int32_t maxcount = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (keep_max) {</div><div class='add'>+        ret = dict_get_int32(dict, GLUSTERFS_INODELK_COUNT, &amp;maxcount);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, " Failed to fetch the value for key %s",</div><div class='add'>+                         GLUSTERFS_INODELK_COUNT);</div><div class='add'>+    }</div><div class='add'>+    count = get_inodelk_count(this, inode, domname);</div><div class='add'>+    if (maxcount &gt;= count)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (dict, GLUSTERFS_INODELK_COUNT, count);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0, "Failed to set count for "</div><div class='del'>-                        "key %s", GLUSTERFS_INODELK_COUNT);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int32(dict, GLUSTERFS_INODELK_COUNT, count);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0,</div><div class='add'>+                     "Failed to set count for "</div><div class='add'>+                     "key %s",</div><div class='add'>+                     GLUSTERFS_INODELK_COUNT);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_posixlk_xattr_fill (xlator_t *this, inode_t *inode,</div><div class='del'>-                       dict_t *dict, gf_boolean_t keep_max)</div><div class='del'>-{</div><div class='del'>-        int32_t     count = 0;</div><div class='del'>-        int32_t     maxcount = -1;</div><div class='del'>-        int         ret   = -1;</div><div class='del'>-</div><div class='del'>-        if (keep_max) {</div><div class='del'>-                ret = dict_get_int32 (dict, GLUSTERFS_POSIXLK_COUNT, &amp;maxcount);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                                " Failed to fetch the value for key %s",</div><div class='del'>-                                GLUSTERFS_POSIXLK_COUNT);</div><div class='del'>-        }</div><div class='del'>-        count = get_posixlk_count (this, inode);</div><div class='del'>-        if (maxcount &gt;= count)</div><div class='del'>-                return;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int32 (dict, GLUSTERFS_POSIXLK_COUNT, count);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_msg_debug (this-&gt;name, 0,</div><div class='del'>-                        " dict_set failed on key %s", GLUSTERFS_POSIXLK_COUNT);</div><div class='del'>-        }</div><div class='add'>+pl_posixlk_xattr_fill(xlator_t *this, inode_t *inode, dict_t *dict,</div><div class='add'>+                      gf_boolean_t keep_max)</div><div class='add'>+{</div><div class='add'>+    int32_t count = 0;</div><div class='add'>+    int32_t maxcount = -1;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    if (keep_max) {</div><div class='add'>+        ret = dict_get_int32(dict, GLUSTERFS_POSIXLK_COUNT, &amp;maxcount);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_msg_debug(this-&gt;name, 0, " Failed to fetch the value for key %s",</div><div class='add'>+                         GLUSTERFS_POSIXLK_COUNT);</div><div class='add'>+    }</div><div class='add'>+    count = get_posixlk_count(this, inode);</div><div class='add'>+    if (maxcount &gt;= count)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='add'>+    ret = dict_set_int32(dict, GLUSTERFS_POSIXLK_COUNT, count);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_msg_debug(this-&gt;name, 0, " dict_set failed on key %s",</div><div class='add'>+                     GLUSTERFS_POSIXLK_COUNT);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_set_xdata_response (xlator_t *this, pl_local_t *local, inode_t *parent,</div><div class='del'>-                       inode_t *inode, char *name, dict_t *xdata, gf_boolean_t max_lock)</div><div class='add'>+pl_set_xdata_response(xlator_t *this, pl_local_t *local, inode_t *parent,</div><div class='add'>+                      inode_t *inode, char *name, dict_t *xdata,</div><div class='add'>+                      gf_boolean_t max_lock)</div><div class='ctx'> {</div><div class='del'>-        if (!xdata || !local)</div><div class='del'>-                return;</div><div class='add'>+    if (!xdata || !local)</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;parent_entrylk_req &amp;&amp; parent &amp;&amp; name &amp;&amp; strlen (name))</div><div class='del'>-                pl_parent_entrylk_xattr_fill (this, parent, name, xdata, max_lock);</div><div class='add'>+    if (local-&gt;parent_entrylk_req &amp;&amp; parent &amp;&amp; name &amp;&amp; strlen(name))</div><div class='add'>+        pl_parent_entrylk_xattr_fill(this, parent, name, xdata, max_lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;entrylk_count_req &amp;&amp; inode)</div><div class='del'>-                pl_entrylk_xattr_fill (this, inode, xdata, max_lock);</div><div class='add'>+    if (local-&gt;entrylk_count_req &amp;&amp; inode)</div><div class='add'>+        pl_entrylk_xattr_fill(this, inode, xdata, max_lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inodelk_dom_count_req &amp;&amp; inode)</div><div class='del'>-                pl_inodelk_xattr_fill (this, inode, xdata,</div><div class='del'>-                                    data_to_str (local-&gt;inodelk_dom_count_req), max_lock);</div><div class='add'>+    if (local-&gt;inodelk_dom_count_req &amp;&amp; inode)</div><div class='add'>+        pl_inodelk_xattr_fill(this, inode, xdata,</div><div class='add'>+                              data_to_str(local-&gt;inodelk_dom_count_req),</div><div class='add'>+                              max_lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;inodelk_count_req &amp;&amp; inode)</div><div class='del'>-                pl_inodelk_xattr_fill (this, inode, xdata, NULL, max_lock);</div><div class='add'>+    if (local-&gt;inodelk_count_req &amp;&amp; inode)</div><div class='add'>+        pl_inodelk_xattr_fill(this, inode, xdata, NULL, max_lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;posixlk_count_req &amp;&amp; inode)</div><div class='del'>-                pl_posixlk_xattr_fill (this, inode, xdata, max_lock);</div><div class='add'>+    if (local-&gt;posixlk_count_req &amp;&amp; inode)</div><div class='add'>+        pl_posixlk_xattr_fill(this, inode, xdata, max_lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Return true in case we need to ensure mandatory-locking</div><div class='ctx'>  * semnatics under different modes.</div><div class='ctx'>  */</div><div class='ctx'> gf_boolean_t</div><div class='del'>-pl_is_mandatory_locking_enabled (pl_inode_t *pl_inode)</div><div class='add'>+pl_is_mandatory_locking_enabled(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = THIS-&gt;private;</div><div class='add'>+    priv = THIS-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;mandatory_mode == MLK_FILE_BASED &amp;&amp; pl_inode-&gt;mandatory)</div><div class='del'>-                return _gf_true;</div><div class='del'>-        else if (priv-&gt;mandatory_mode == MLK_FORCED ||</div><div class='del'>-                 priv-&gt;mandatory_mode == MLK_OPTIMAL)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (priv-&gt;mandatory_mode == MLK_FILE_BASED &amp;&amp; pl_inode-&gt;mandatory)</div><div class='add'>+        return _gf_true;</div><div class='add'>+    else if (priv-&gt;mandatory_mode == MLK_FORCED ||</div><div class='add'>+             priv-&gt;mandatory_mode == MLK_OPTIMAL)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Checks whether the region where fop is acting upon conflicts</div><div class='hunk'>@@ -419,4165 +414,4037 @@ pl_is_mandatory_locking_enabled (pl_inode_t *pl_inode)</div><div class='ctx'>  * indicate block/fail the fop.</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-pl_is_fop_allowed (pl_inode_t *pl_inode, posix_lock_t *region, fd_t *fd,</div><div class='del'>-                   glusterfs_fop_t op, gf_boolean_t *can_block)</div><div class='del'>-{</div><div class='del'>-        int     ret     = 0;</div><div class='del'>-</div><div class='del'>-        if (!__rw_allowable (pl_inode, region, op)) {</div><div class='del'>-                if ((!fd) || (fd &amp;&amp; (fd-&gt;flags &amp; O_NONBLOCK))) {</div><div class='del'>-                        gf_log ("locks", GF_LOG_TRACE, "returning EAGAIN"</div><div class='del'>-                                                " because fd is O_NONBLOCK");</div><div class='del'>-                        *can_block = _gf_false;</div><div class='del'>-                } else</div><div class='del'>-                        *can_block = _gf_true;</div><div class='add'>+pl_is_fop_allowed(pl_inode_t *pl_inode, posix_lock_t *region, fd_t *fd,</div><div class='add'>+                  glusterfs_fop_t op, gf_boolean_t *can_block)</div><div class='add'>+{</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    if (!__rw_allowable(pl_inode, region, op)) {</div><div class='add'>+        if ((!fd) || (fd &amp;&amp; (fd-&gt;flags &amp; O_NONBLOCK))) {</div><div class='add'>+            gf_log("locks", GF_LOG_TRACE,</div><div class='add'>+                   "returning EAGAIN"</div><div class='add'>+                   " because fd is O_NONBLOCK");</div><div class='add'>+            *can_block = _gf_false;</div><div class='ctx'>         } else</div><div class='del'>-                ret = 1;</div><div class='add'>+            *can_block = _gf_true;</div><div class='add'>+    } else</div><div class='add'>+        ret = 1;</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static pl_fdctx_t *</div><div class='del'>-pl_new_fdctx ()</div><div class='add'>+pl_new_fdctx()</div><div class='ctx'> {</div><div class='del'>-        pl_fdctx_t *fdctx = NULL;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        fdctx = GF_CALLOC (1, sizeof (*fdctx),</div><div class='del'>-                           gf_locks_mt_pl_fdctx_t);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", fdctx, out);</div><div class='add'>+    fdctx = GF_CALLOC(1, sizeof(*fdctx), gf_locks_mt_pl_fdctx_t);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", fdctx, out);</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;fdctx-&gt;locks_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;fdctx-&gt;locks_list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fdctx;</div><div class='add'>+    return fdctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static pl_fdctx_t *</div><div class='del'>-pl_check_n_create_fdctx (xlator_t *this, fd_t *fd)</div><div class='add'>+pl_check_n_create_fdctx(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int         ret   = 0;</div><div class='del'>-        uint64_t    tmp   = 0;</div><div class='del'>-        pl_fdctx_t *fdctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint64_t tmp = 0;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("posix-locks", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, fd, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("posix-locks", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, fd, out);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;fd-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __fd_ctx_get (fd, this, &amp;tmp);</div><div class='del'>-                if ((ret != 0) || (tmp == 0)) {</div><div class='del'>-                        fdctx = pl_new_fdctx ();</div><div class='del'>-                        if (fdctx == NULL) {</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    LOCK(&amp;fd-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __fd_ctx_get(fd, this, &amp;tmp);</div><div class='add'>+        if ((ret != 0) || (tmp == 0)) {</div><div class='add'>+            fdctx = pl_new_fdctx();</div><div class='add'>+            if (fdctx == NULL) {</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                ret = __fd_ctx_set (fd, this, (uint64_t)(long)fdctx);</div><div class='del'>-                if (ret != 0) {</div><div class='del'>-                        GF_FREE (fdctx);</div><div class='del'>-                        fdctx = NULL;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "failed to set fd ctx");</div><div class='del'>-                }</div><div class='add'>+        ret = __fd_ctx_set(fd, this, (uint64_t)(long)fdctx);</div><div class='add'>+        if (ret != 0) {</div><div class='add'>+            GF_FREE(fdctx);</div><div class='add'>+            fdctx = NULL;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "failed to set fd ctx");</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;fd-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;fd-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return fdctx;</div><div class='add'>+    return fdctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_discard_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+pl_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+               struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (discard, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_discard_cont (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                 size_t len, dict_t *xdata)</div><div class='add'>+pl_discard_cont(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, pl_discard_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_discard_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-            size_t len, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t            *pl_inode = NULL;</div><div class='del'>-        pl_rw_req_t           *rw = NULL;</div><div class='del'>-        posix_lock_t           region = {.list = {0, }, };</div><div class='del'>-        gf_boolean_t           enabled = _gf_false;</div><div class='del'>-        gf_boolean_t           can_block = _gf_true;</div><div class='del'>-        int                    op_ret = 0;</div><div class='del'>-        int                    op_errno = 0;</div><div class='del'>-        int                    allowed = 1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+pl_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+           size_t len, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_rw_req_t *rw = NULL;</div><div class='add'>+    posix_lock_t region = {</div><div class='add'>+        .list =</div><div class='add'>+            {</div><div class='add'>+                0,</div><div class='add'>+            },</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t enabled = _gf_false;</div><div class='add'>+    gf_boolean_t can_block = _gf_true;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int allowed = 1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    enabled = pl_is_mandatory_locking_enabled(pl_inode);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='add'>+        enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (enabled) {</div><div class='add'>+        region.fl_start = offset;</div><div class='add'>+        region.fl_end = offset + len - 1;</div><div class='add'>+        region.client = frame-&gt;root-&gt;client;</div><div class='add'>+        region.fd_num = fd_to_fdnum(fd);</div><div class='add'>+        region.client_pid = frame-&gt;root-&gt;pid;</div><div class='add'>+        region.owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            allowed = pl_is_fop_allowed(pl_inode, &amp;region, fd, GF_FOP_DISCARD,</div><div class='add'>+                                        &amp;can_block);</div><div class='add'>+            if (allowed == 1)</div><div class='add'>+                goto unlock;</div><div class='add'>+            else if (!can_block) {</div><div class='add'>+                op_errno = EAGAIN;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        enabled = pl_is_mandatory_locking_enabled (pl_inode);</div><div class='add'>+            rw = GF_CALLOC(1, sizeof(*rw), gf_locks_mt_pl_rw_req_t);</div><div class='add'>+            if (!rw) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='del'>-                enabled = _gf_false;</div><div class='add'>+            rw-&gt;stub = fop_discard_stub(frame, pl_discard_cont, fd, offset, len,</div><div class='add'>+                                        xdata);</div><div class='add'>+            if (!rw-&gt;stub) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                GF_FREE(rw);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (enabled) {</div><div class='del'>-                region.fl_start   = offset;</div><div class='del'>-                region.fl_end     = offset + len - 1;</div><div class='del'>-                region.client     = frame-&gt;root-&gt;client;</div><div class='del'>-                region.fd_num     = fd_to_fdnum(fd);</div><div class='del'>-                region.client_pid = frame-&gt;root-&gt;pid;</div><div class='del'>-                region.owner      = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+            rw-&gt;region = region;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        allowed = pl_is_fop_allowed (pl_inode, &amp;region, fd,</div><div class='del'>-                                                     GF_FOP_DISCARD,</div><div class='del'>-                                                     &amp;can_block);</div><div class='del'>-                        if (allowed == 1)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        else if (!can_block) {</div><div class='del'>-                                op_errno = EAGAIN;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw = GF_CALLOC (1, sizeof (*rw),</div><div class='del'>-                                        gf_locks_mt_pl_rw_req_t);</div><div class='del'>-                        if (!rw) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;stub = fop_discard_stub (frame, pl_discard_cont,</div><div class='del'>-                                                     fd, offset, len, xdata);</div><div class='del'>-                        if (!rw-&gt;stub) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                GF_FREE (rw);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;region = region;</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='del'>-                }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            list_add_tail(&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (allowed == 1)</div><div class='del'>-                STACK_WIND (frame, pl_discard_cbk, FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset,</div><div class='del'>-                            len, xdata);</div><div class='add'>+    if (allowed == 1)</div><div class='add'>+        STACK_WIND(frame, pl_discard_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                STACK_UNWIND_STRICT (discard, frame, op_ret, op_errno,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_zerofill_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                 struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+pl_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (zerofill, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_zerofill_cont (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                  off_t len, dict_t *xdata)</div><div class='add'>+pl_zerofill_cont(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                 off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, pl_zerofill_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_zerofill_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-             off_t len, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t            *pl_inode = NULL;</div><div class='del'>-        pl_rw_req_t           *rw = NULL;</div><div class='del'>-        posix_lock_t           region = {.list = {0, }, };</div><div class='del'>-        gf_boolean_t           enabled = _gf_false;</div><div class='del'>-        gf_boolean_t           can_block = _gf_true;</div><div class='del'>-        int                    op_ret = 0;</div><div class='del'>-        int                    op_errno = 0;</div><div class='del'>-        int                    allowed = 1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+pl_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+            off_t len, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_rw_req_t *rw = NULL;</div><div class='add'>+    posix_lock_t region = {</div><div class='add'>+        .list =</div><div class='add'>+            {</div><div class='add'>+                0,</div><div class='add'>+            },</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t enabled = _gf_false;</div><div class='add'>+    gf_boolean_t can_block = _gf_true;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int allowed = 1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    enabled = pl_is_mandatory_locking_enabled(pl_inode);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='add'>+        enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (enabled) {</div><div class='add'>+        region.fl_start = offset;</div><div class='add'>+        region.fl_end = offset + len - 1;</div><div class='add'>+        region.client = frame-&gt;root-&gt;client;</div><div class='add'>+        region.fd_num = fd_to_fdnum(fd);</div><div class='add'>+        region.client_pid = frame-&gt;root-&gt;pid;</div><div class='add'>+        region.owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            allowed = pl_is_fop_allowed(pl_inode, &amp;region, fd, GF_FOP_ZEROFILL,</div><div class='add'>+                                        &amp;can_block);</div><div class='add'>+            if (allowed == 1)</div><div class='add'>+                goto unlock;</div><div class='add'>+            else if (!can_block) {</div><div class='add'>+                op_errno = EAGAIN;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        enabled = pl_is_mandatory_locking_enabled (pl_inode);</div><div class='add'>+            rw = GF_CALLOC(1, sizeof(*rw), gf_locks_mt_pl_rw_req_t);</div><div class='add'>+            if (!rw) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='del'>-                enabled = _gf_false;</div><div class='add'>+            rw-&gt;stub = fop_zerofill_stub(frame, pl_zerofill_cont, fd, offset,</div><div class='add'>+                                         len, xdata);</div><div class='add'>+            if (!rw-&gt;stub) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                GF_FREE(rw);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (enabled) {</div><div class='del'>-                region.fl_start   = offset;</div><div class='del'>-                region.fl_end     = offset + len - 1;</div><div class='del'>-                region.client     = frame-&gt;root-&gt;client;</div><div class='del'>-                region.fd_num     = fd_to_fdnum(fd);</div><div class='del'>-                region.client_pid = frame-&gt;root-&gt;pid;</div><div class='del'>-                region.owner      = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+            rw-&gt;region = region;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        allowed = pl_is_fop_allowed (pl_inode, &amp;region, fd,</div><div class='del'>-                                                     GF_FOP_ZEROFILL,</div><div class='del'>-                                                     &amp;can_block);</div><div class='del'>-                        if (allowed == 1)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        else if (!can_block) {</div><div class='del'>-                                op_errno = EAGAIN;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw = GF_CALLOC (1, sizeof (*rw),</div><div class='del'>-                                        gf_locks_mt_pl_rw_req_t);</div><div class='del'>-                        if (!rw) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;stub = fop_zerofill_stub (frame, pl_zerofill_cont,</div><div class='del'>-                                                      fd, offset, len, xdata);</div><div class='del'>-                        if (!rw-&gt;stub) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                GF_FREE (rw);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;region = region;</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='del'>-                }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            list_add_tail(&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (allowed == 1)</div><div class='del'>-                STACK_WIND (frame, pl_zerofill_cbk, FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset,</div><div class='del'>-                            len, xdata);</div><div class='add'>+    if (allowed == 1)</div><div class='add'>+        STACK_WIND(frame, pl_zerofill_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                STACK_UNWIND_STRICT (zerofill, frame, op_ret, op_errno,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, NULL, NULL,</div><div class='add'>+                            NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                 struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+pl_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_local_t *local = NULL;</div><div class='add'>+    pl_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='del'>-                loc_wipe (&amp;local-&gt;loc[0]);</div><div class='add'>+    if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='add'>+        loc_wipe(&amp;local-&gt;loc[0]);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='del'>-        if (local-&gt;fd)</div><div class='del'>-                fd_unref (local-&gt;fd);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+    if (local-&gt;fd)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='del'>-                STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno,</div><div class='del'>-                                                prebuf, postbuf, xdata);</div><div class='del'>-        else</div><div class='del'>-                STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno,</div><div class='del'>-                                                prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='add'>+        STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                            xdata);</div><div class='add'>+    else</div><div class='add'>+        STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                            xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_ftruncate_cont (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                   off_t offset, dict_t *xdata)</div><div class='add'>+pl_ftruncate_cont(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                  dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, pl_truncate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_truncate_cont (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  off_t offset, dict_t *xdata)</div><div class='add'>+pl_truncate_cont(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, pl_truncate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-truncate_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                   dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        pl_local_t            *local = NULL;</div><div class='del'>-        inode_t               *inode = NULL;</div><div class='del'>-        pl_inode_t            *pl_inode = NULL;</div><div class='del'>-        pl_rw_req_t           *rw = NULL;</div><div class='del'>-        posix_lock_t           region = {.list = {0, }, };</div><div class='del'>-        gf_boolean_t           enabled = _gf_false;</div><div class='del'>-        gf_boolean_t           can_block = _gf_true;</div><div class='del'>-        int                    allowed = 1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (op_ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "got error (errno=%d, stderror=%s) from child",</div><div class='del'>-                        op_errno, strerror (op_errno));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+truncate_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                  dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    pl_local_t *local = NULL;</div><div class='add'>+    inode_t *inode = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_rw_req_t *rw = NULL;</div><div class='add'>+    posix_lock_t region = {</div><div class='add'>+        .list =</div><div class='add'>+            {</div><div class='add'>+                0,</div><div class='add'>+            },</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t enabled = _gf_false;</div><div class='add'>+    gf_boolean_t can_block = _gf_true;</div><div class='add'>+    int allowed = 1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (op_ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "got error (errno=%d, stderror=%s) from child", op_errno,</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='add'>+        inode = local-&gt;loc[0].inode;</div><div class='add'>+    else</div><div class='add'>+        inode = local-&gt;fd-&gt;inode;</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    enabled = pl_is_mandatory_locking_enabled(pl_inode);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='add'>+        enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (enabled) {</div><div class='add'>+        region.fl_start = local-&gt;offset;</div><div class='add'>+        region.fl_end = LLONG_MAX;</div><div class='add'>+        region.client = frame-&gt;root-&gt;client;</div><div class='add'>+        region.fd_num = fd_to_fdnum(local-&gt;fd);</div><div class='add'>+        region.client_pid = frame-&gt;root-&gt;pid;</div><div class='add'>+        region.owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            allowed = pl_is_fop_allowed(pl_inode, &amp;region, local-&gt;fd, local-&gt;op,</div><div class='add'>+                                        &amp;can_block);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='del'>-                inode = local-&gt;loc[0].inode;</div><div class='del'>-        else</div><div class='del'>-                inode = local-&gt;fd-&gt;inode;</div><div class='add'>+            if (allowed == 1)</div><div class='add'>+                goto unlock;</div><div class='add'>+            else if (!can_block) {</div><div class='add'>+                op_errno = EAGAIN;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_ret   = -1;</div><div class='add'>+            rw = GF_CALLOC(1, sizeof(*rw), gf_locks_mt_pl_rw_req_t);</div><div class='add'>+            if (!rw) {</div><div class='ctx'>                 op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        enabled = pl_is_mandatory_locking_enabled (pl_inode);</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='add'>+                rw-&gt;stub = fop_truncate_stub(frame, pl_truncate_cont,</div><div class='add'>+                                             &amp;local-&gt;loc[0], local-&gt;offset,</div><div class='add'>+                                             local-&gt;xdata);</div><div class='add'>+            else</div><div class='add'>+                rw-&gt;stub = fop_ftruncate_stub(frame, pl_ftruncate_cont,</div><div class='add'>+                                              local-&gt;fd, local-&gt;offset,</div><div class='add'>+                                              local-&gt;xdata);</div><div class='add'>+            if (!rw-&gt;stub) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                GF_FREE(rw);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='del'>-                enabled = _gf_false;</div><div class='add'>+            rw-&gt;region = region;</div><div class='ctx'> </div><div class='del'>-        if (enabled) {</div><div class='del'>-                region.fl_start   = local-&gt;offset;</div><div class='del'>-                region.fl_end     = LLONG_MAX;</div><div class='del'>-                region.client     = frame-&gt;root-&gt;client;</div><div class='del'>-                region.fd_num     = fd_to_fdnum(local-&gt;fd);</div><div class='del'>-                region.client_pid = frame-&gt;root-&gt;pid;</div><div class='del'>-                region.owner      = frame-&gt;root-&gt;lk_owner;</div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        allowed = pl_is_fop_allowed (pl_inode, &amp;region,</div><div class='del'>-                                                     local-&gt;fd, local-&gt;op,</div><div class='del'>-                                                     &amp;can_block);</div><div class='del'>-</div><div class='del'>-                        if (allowed == 1)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        else if (!can_block) {</div><div class='del'>-                                op_errno = EAGAIN;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw = GF_CALLOC (1, sizeof (*rw),</div><div class='del'>-                                        gf_locks_mt_pl_rw_req_t);</div><div class='del'>-                        if (!rw) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='del'>-                                rw-&gt;stub = fop_truncate_stub (frame,</div><div class='del'>-                                                pl_truncate_cont, &amp;local-&gt;loc[0],</div><div class='del'>-                                                local-&gt;offset, local-&gt;xdata);</div><div class='del'>-                        else</div><div class='del'>-                                rw-&gt;stub = fop_ftruncate_stub (frame,</div><div class='del'>-                                                pl_ftruncate_cont, local-&gt;fd,</div><div class='del'>-                                                local-&gt;offset, local-&gt;xdata);</div><div class='del'>-                        if (!rw-&gt;stub) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                GF_FREE (rw);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;region = region;</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='del'>-                }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            list_add_tail(&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (allowed == 1) {</div><div class='del'>-                switch (local-&gt;op) {</div><div class='del'>-                case GF_FOP_TRUNCATE:</div><div class='del'>-                        STACK_WIND (frame, pl_truncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                                    FIRST_CHILD (this)-&gt;fops-&gt;truncate,</div><div class='del'>-                                    &amp;local-&gt;loc[0], local-&gt;offset, local-&gt;xdata);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_FOP_FTRUNCATE:</div><div class='del'>-                        STACK_WIND (frame, pl_truncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                                    FIRST_CHILD (this)-&gt;fops-&gt;ftruncate,</div><div class='del'>-                                    local-&gt;fd, local-&gt;offset, local-&gt;xdata);</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (allowed == 1) {</div><div class='add'>+        switch (local-&gt;op) {</div><div class='add'>+            case GF_FOP_TRUNCATE:</div><div class='add'>+                STACK_WIND(frame, pl_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+                           FIRST_CHILD(this)-&gt;fops-&gt;truncate, &amp;local-&gt;loc[0],</div><div class='add'>+                           local-&gt;offset, local-&gt;xdata);</div><div class='add'>+                break;</div><div class='add'>+            case GF_FOP_FTRUNCATE:</div><div class='add'>+                STACK_WIND(frame, pl_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+                           FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, local-&gt;fd,</div><div class='add'>+                           local-&gt;offset, local-&gt;xdata);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "truncate failed with "</div><div class='del'>-                        "ret: %d, error: %s", op_ret, strerror (op_errno));</div><div class='del'>-                if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='del'>-                        loc_wipe (&amp;local-&gt;loc[0]);</div><div class='del'>-                if (local-&gt;xdata)</div><div class='del'>-                        dict_unref (local-&gt;xdata);</div><div class='del'>-                if (local-&gt;fd)</div><div class='del'>-                        fd_unref (local-&gt;fd);</div><div class='del'>-</div><div class='del'>-                switch (local-&gt;op) {</div><div class='del'>-                case GF_FOP_TRUNCATE:</div><div class='del'>-                        STACK_UNWIND_STRICT (truncate, frame, op_ret,</div><div class='del'>-                                                op_errno, buf, NULL, xdata);</div><div class='del'>-                        break;</div><div class='del'>-                case GF_FOP_FTRUNCATE:</div><div class='del'>-                        STACK_UNWIND_STRICT (ftruncate, frame, op_ret,</div><div class='del'>-                                                op_errno, buf, NULL, xdata);</div><div class='del'>-                        break;</div><div class='del'>-                default:</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "truncate failed with "</div><div class='add'>+               "ret: %d, error: %s",</div><div class='add'>+               op_ret, strerror(op_errno));</div><div class='add'>+        if (local-&gt;op == GF_FOP_TRUNCATE)</div><div class='add'>+            loc_wipe(&amp;local-&gt;loc[0]);</div><div class='add'>+        if (local-&gt;xdata)</div><div class='add'>+            dict_unref(local-&gt;xdata);</div><div class='add'>+        if (local-&gt;fd)</div><div class='add'>+            fd_unref(local-&gt;fd);</div><div class='add'>+</div><div class='add'>+        switch (local-&gt;op) {</div><div class='add'>+            case GF_FOP_TRUNCATE:</div><div class='add'>+                STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, buf,</div><div class='add'>+                                    NULL, xdata);</div><div class='add'>+                break;</div><div class='add'>+            case GF_FOP_FTRUNCATE:</div><div class='add'>+                STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, buf,</div><div class='add'>+                                    NULL, xdata);</div><div class='add'>+                break;</div><div class='add'>+            default:</div><div class='add'>+                break;</div><div class='ctx'>         }</div><div class='del'>-        return 0;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_truncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             loc_t *loc, off_t offset, dict_t *xdata)</div><div class='add'>+pl_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_local_t *local = NULL;</div><div class='del'>-        int         ret   = -1;</div><div class='add'>+    pl_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, unwind);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, unwind);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op         = GF_FOP_TRUNCATE;</div><div class='del'>-        local-&gt;offset     = offset;</div><div class='del'>-        loc_copy (&amp;local-&gt;loc[0], loc);</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_TRUNCATE;</div><div class='add'>+    local-&gt;offset = offset;</div><div class='add'>+    loc_copy(&amp;local-&gt;loc[0], loc);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, truncate_stat_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;stat, loc, NULL);</div><div class='del'>-        ret = 0;</div><div class='add'>+    STACK_WIND(frame, truncate_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, NULL);</div><div class='add'>+    ret = 0;</div><div class='ctx'> unwind:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "truncate on %s failed with"</div><div class='del'>-                        " ret: %d, error: %s", loc-&gt;path, -1,</div><div class='del'>-                        strerror (ENOMEM));</div><div class='del'>-                STACK_UNWIND_STRICT (truncate, frame, -1, ENOMEM,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "truncate on %s failed with"</div><div class='add'>+               " ret: %d, error: %s",</div><div class='add'>+               loc-&gt;path, -1, strerror(ENOMEM));</div><div class='add'>+        STACK_UNWIND_STRICT(truncate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_ftruncate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, off_t offset, dict_t *xdata)</div><div class='add'>+pl_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_local_t *local = NULL;</div><div class='del'>-        int         ret = -1;</div><div class='add'>+    pl_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, unwind);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, unwind);</div><div class='ctx'> </div><div class='del'>-        local-&gt;op         = GF_FOP_FTRUNCATE;</div><div class='del'>-        local-&gt;offset     = offset;</div><div class='del'>-        local-&gt;fd         = fd_ref (fd);</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata = dict_ref (xdata);</div><div class='add'>+    local-&gt;op = GF_FOP_FTRUNCATE;</div><div class='add'>+    local-&gt;offset = offset;</div><div class='add'>+    local-&gt;fd = fd_ref(fd);</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, truncate_stat_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        ret = 0;</div><div class='add'>+    STACK_WIND(frame, truncate_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    ret = 0;</div><div class='ctx'> unwind:</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "ftruncate failed with"</div><div class='del'>-                        " ret: %d, error: %s", -1, strerror (ENOMEM));</div><div class='del'>-                STACK_UNWIND_STRICT (ftruncate, frame, -1, ENOMEM,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "ftruncate failed with"</div><div class='add'>+               " ret: %d, error: %s",</div><div class='add'>+               -1, strerror(ENOMEM));</div><div class='add'>+        STACK_UNWIND_STRICT(ftruncate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_locks_by_fd (pl_inode_t *pl_inode, fd_t *fd)</div><div class='add'>+pl_locks_by_fd(pl_inode_t *pl_inode, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-       posix_lock_t *l = NULL;</div><div class='del'>-       int found = 0;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    int found = 0;</div><div class='ctx'> </div><div class='del'>-       pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-       {</div><div class='del'>-</div><div class='del'>-               list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                       if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='del'>-                               found = 1;</div><div class='del'>-                               break;</div><div class='del'>-                       }</div><div class='del'>-               }</div><div class='del'>-</div><div class='del'>-       }</div><div class='del'>-       pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-       return found;</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+        {</div><div class='add'>+            if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='add'>+                found = 1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-delete_locks_of_fd (xlator_t *this, pl_inode_t *pl_inode, fd_t *fd)</div><div class='add'>+delete_locks_of_fd(xlator_t *this, pl_inode_t *pl_inode, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-       posix_lock_t *tmp = NULL;</div><div class='del'>-       posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='ctx'> </div><div class='del'>-       struct list_head blocked_list;</div><div class='add'>+    struct list_head blocked_list;</div><div class='ctx'> </div><div class='del'>-       INIT_LIST_HEAD (&amp;blocked_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;blocked_list);</div><div class='ctx'> </div><div class='del'>-       pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-       {</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(l, tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+        {</div><div class='add'>+            if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='add'>+                if (l-&gt;blocked) {</div><div class='add'>+                    list_move_tail(&amp;l-&gt;list, &amp;blocked_list);</div><div class='add'>+                    continue;</div><div class='add'>+                }</div><div class='add'>+                __delete_lock(l);</div><div class='add'>+                __destroy_lock(l);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-               list_for_each_entry_safe (l, tmp, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                       if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='del'>-                               if (l-&gt;blocked) {</div><div class='del'>-                                       list_move_tail (&amp;l-&gt;list, &amp;blocked_list);</div><div class='del'>-                                       continue;</div><div class='del'>-                               }</div><div class='del'>-                               __delete_lock (l);</div><div class='del'>-                               __destroy_lock (l);</div><div class='del'>-                       }</div><div class='del'>-               }</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;blocked_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;l-&gt;list);</div><div class='add'>+        STACK_UNWIND_STRICT(lk, l-&gt;frame, -1, EAGAIN, &amp;l-&gt;user_flock, NULL);</div><div class='add'>+        __destroy_lock(l);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-       }</div><div class='del'>-       pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    grant_blocked_locks(this, pl_inode);</div><div class='ctx'> </div><div class='del'>-       list_for_each_entry_safe (l, tmp, &amp;blocked_list, list) {</div><div class='del'>-               list_del_init(&amp;l-&gt;list);</div><div class='del'>-               STACK_UNWIND_STRICT (lk, l-&gt;frame, -1, EAGAIN, &amp;l-&gt;user_flock,</div><div class='del'>-                                    NULL);</div><div class='del'>-               __destroy_lock (l);</div><div class='del'>-       }</div><div class='add'>+    do_blocked_rw(pl_inode);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        grant_blocked_locks (this, pl_inode);</div><div class='add'>+static void</div><div class='add'>+__delete_locks_of_owner(pl_inode_t *pl_inode, client_t *client,</div><div class='add'>+                        gf_lkowner_t *owner)</div><div class='add'>+{</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='ctx'> </div><div class='del'>-        do_blocked_rw (pl_inode);</div><div class='add'>+    /* TODO: what if it is a blocked lock with pending l-&gt;frame */</div><div class='ctx'> </div><div class='del'>-}</div><div class='add'>+    list_for_each_entry_safe(l, tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l-&gt;blocked)</div><div class='add'>+            continue;</div><div class='add'>+        if ((l-&gt;client == client) &amp;&amp; is_same_lkowner(&amp;l-&gt;owner, owner)) {</div><div class='add'>+            gf_log("posix-locks", GF_LOG_TRACE,</div><div class='add'>+                   " Flushing lock"</div><div class='add'>+                   "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64</div><div class='add'>+                   " state: %s",</div><div class='add'>+                   l-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock", l-&gt;client_pid,</div><div class='add'>+                   lkowner_utoa(&amp;l-&gt;owner), l-&gt;user_flock.l_start,</div><div class='add'>+                   l-&gt;user_flock.l_len, l-&gt;blocked == 1 ? "Blocked" : "Active");</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-__delete_locks_of_owner (pl_inode_t *pl_inode,</div><div class='del'>-                         client_t *client, gf_lkowner_t *owner)</div><div class='del'>-{</div><div class='del'>-        posix_lock_t *tmp = NULL;</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='del'>-</div><div class='del'>-        /* TODO: what if it is a blocked lock with pending l-&gt;frame */</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (l, tmp, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (l-&gt;blocked)</div><div class='del'>-                        continue;</div><div class='del'>-                if ((l-&gt;client == client) &amp;&amp;</div><div class='del'>-                    is_same_lkowner (&amp;l-&gt;owner, owner)) {</div><div class='del'>-                        gf_log ("posix-locks", GF_LOG_TRACE,</div><div class='del'>-                                " Flushing lock"</div><div class='del'>-                                "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" state: %s",</div><div class='del'>-                                l-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                l-&gt;client_pid,</div><div class='del'>-                                lkowner_utoa (&amp;l-&gt;owner),</div><div class='del'>-                                l-&gt;user_flock.l_start,</div><div class='del'>-                                l-&gt;user_flock.l_len,</div><div class='del'>-                                l-&gt;blocked == 1 ? "Blocked" : "Active");</div><div class='del'>-</div><div class='del'>-                        __delete_lock (l);</div><div class='del'>-                        __destroy_lock (l);</div><div class='del'>-                }</div><div class='add'>+            __delete_lock(l);</div><div class='add'>+            __destroy_lock(l);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-pl_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+pl_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-             const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t                 op_errno        = EINVAL;</div><div class='del'>-        int                     op_ret          = -1;</div><div class='del'>-        int32_t                 bcount          = 0;</div><div class='del'>-        int32_t                 gcount          = 0;</div><div class='del'>-        char                    key[PATH_MAX]   = {0, };</div><div class='del'>-        char                    *lk_summary     = NULL;</div><div class='del'>-        pl_inode_t              *pl_inode       = NULL;</div><div class='del'>-        dict_t                  *dict           = NULL;</div><div class='del'>-        clrlk_args              args            = {0,};</div><div class='del'>-        char                    *brickname      = NULL;</div><div class='del'>-</div><div class='del'>-        if (!name)</div><div class='del'>-                goto usual;</div><div class='del'>-</div><div class='del'>-        if (strncmp (name, GF_XATTR_CLRLK_CMD, SLEN (GF_XATTR_CLRLK_CMD)))</div><div class='del'>-                goto usual;</div><div class='del'>-</div><div class='del'>-        if (clrlk_parse_args (name, &amp;args)) {</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='add'>+pl_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name,</div><div class='add'>+            dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t op_errno = EINVAL;</div><div class='add'>+    int op_ret = -1;</div><div class='add'>+    int32_t bcount = 0;</div><div class='add'>+    int32_t gcount = 0;</div><div class='add'>+    char key[PATH_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *lk_summary = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    clrlk_args args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *brickname = NULL;</div><div class='add'>+</div><div class='add'>+    if (!name)</div><div class='add'>+        goto usual;</div><div class='add'>+</div><div class='add'>+    if (strncmp(name, GF_XATTR_CLRLK_CMD, SLEN(GF_XATTR_CLRLK_CMD)))</div><div class='add'>+        goto usual;</div><div class='add'>+</div><div class='add'>+    if (clrlk_parse_args(name, &amp;args)) {</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, loc-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    switch (args.type) {</div><div class='add'>+        case CLRLK_INODE:</div><div class='add'>+        case CLRLK_ENTRY:</div><div class='add'>+            op_ret = clrlk_clear_lks_in_all_domains(</div><div class='add'>+                this, pl_inode, &amp;args, &amp;bcount, &amp;gcount, &amp;op_errno);</div><div class='add'>+            if (op_ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, loc-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='add'>+            break;</div><div class='add'>+        case CLRLK_POSIX:</div><div class='add'>+            op_ret = clrlk_clear_posixlk(this, pl_inode, &amp;args, &amp;bcount,</div><div class='add'>+                                         &amp;gcount, &amp;op_errno);</div><div class='add'>+            if (op_ret)</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        switch (args.type) {</div><div class='del'>-                case CLRLK_INODE:</div><div class='del'>-                case CLRLK_ENTRY:</div><div class='del'>-                        op_ret = clrlk_clear_lks_in_all_domains (this, pl_inode,</div><div class='del'>-                                                                 &amp;args, &amp;bcount,</div><div class='del'>-                                                                 &amp;gcount,</div><div class='del'>-                                                                 &amp;op_errno);</div><div class='del'>-                        if (op_ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        break;</div><div class='del'>-                case CLRLK_POSIX:</div><div class='del'>-                        op_ret = clrlk_clear_posixlk (this, pl_inode, &amp;args,</div><div class='del'>-                                                      &amp;bcount, &amp;gcount,</div><div class='del'>-                                                      &amp;op_errno);</div><div class='del'>-                        if (op_ret)</div><div class='del'>-                                goto out;</div><div class='del'>-                        break;</div><div class='del'>-                case CLRLK_TYPE_MAX:</div><div class='del'>-                        op_errno = EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = fetch_pathinfo (this, loc-&gt;inode, &amp;op_errno, &amp;brickname);</div><div class='add'>+            break;</div><div class='add'>+        case CLRLK_TYPE_MAX:</div><div class='add'>+            op_errno = EINVAL;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = fetch_pathinfo(this, loc-&gt;inode, &amp;op_errno, &amp;brickname);</div><div class='add'>+    if (op_ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Couldn't get brickname");</div><div class='add'>+    } else {</div><div class='add'>+        op_ret = format_brickname(brickname);</div><div class='ctx'>         if (op_ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Couldn't get brickname");</div><div class='del'>-        } else {</div><div class='del'>-                op_ret = format_brickname(brickname);</div><div class='del'>-                if (op_ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Couldn't format brickname");</div><div class='del'>-                        GF_FREE(brickname);</div><div class='del'>-                        brickname = NULL;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!gcount &amp;&amp; !bcount) {</div><div class='del'>-                if (gf_asprintf (&amp;lk_summary, "No locks cleared.") == -1) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else if (gf_asprintf (&amp;lk_summary, "%s: %s blocked locks=%d "</div><div class='del'>-                                "granted locks=%d",</div><div class='del'>-                                (brickname == NULL)? this-&gt;name : brickname,</div><div class='del'>-                                (args.type == CLRLK_INODE)? "inode":</div><div class='del'>-                                (args.type == CLRLK_ENTRY)? "entry":</div><div class='del'>-                                (args.type == CLRLK_POSIX)? "posix": " ",</div><div class='del'>-                                bcount, gcount) == -1) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (snprintf (key, sizeof (key), "%s", name) &gt;= sizeof (key)) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (dict_set_dynstr (dict, key, lk_summary)) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = 0;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "Couldn't format brickname");</div><div class='add'>+            GF_FREE(brickname);</div><div class='add'>+            brickname = NULL;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!gcount &amp;&amp; !bcount) {</div><div class='add'>+        if (gf_asprintf(&amp;lk_summary, "No locks cleared.") == -1) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else if (gf_asprintf(</div><div class='add'>+                   &amp;lk_summary,</div><div class='add'>+                   "%s: %s blocked locks=%d "</div><div class='add'>+                   "granted locks=%d",</div><div class='add'>+                   (brickname == NULL) ? this-&gt;name : brickname,</div><div class='add'>+                   (args.type == CLRLK_INODE)</div><div class='add'>+                       ? "inode"</div><div class='add'>+                       : (args.type == CLRLK_ENTRY)</div><div class='add'>+                             ? "entry"</div><div class='add'>+                             : (args.type == CLRLK_POSIX) ? "posix" : " ",</div><div class='add'>+                   bcount, gcount) == -1) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (snprintf(key, sizeof(key), "%s", name) &gt;= sizeof(key)) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (dict_set_dynstr(dict, key, lk_summary)) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE(brickname);</div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    GF_FREE(brickname);</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (args.opts);</div><div class='del'>-        if (op_ret &amp;&amp; lk_summary)</div><div class='del'>-                GF_FREE (lk_summary);</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        return 0;</div><div class='add'>+    GF_FREE(args.opts);</div><div class='add'>+    if (op_ret &amp;&amp; lk_summary)</div><div class='add'>+        GF_FREE(lk_summary);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> usual:</div><div class='del'>-        STACK_WIND (frame, pl_getxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_getxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;getxattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> format_brickname(char *brickname)</div><div class='ctx'> {</div><div class='del'>-       int   ret             = -1;</div><div class='del'>-       char *hostname        = NULL;</div><div class='del'>-       char *volume          = NULL;</div><div class='del'>-       char *saveptr         = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *hostname = NULL;</div><div class='add'>+    char *volume = NULL;</div><div class='add'>+    char *saveptr = NULL;</div><div class='ctx'> </div><div class='del'>-       if (!brickname)</div><div class='del'>-               goto out;</div><div class='add'>+    if (!brickname)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-       strtok_r(brickname, ":", &amp;saveptr);</div><div class='del'>-       hostname = gf_strdup(strtok_r(NULL, ":", &amp;saveptr));</div><div class='del'>-       if (hostname == NULL)</div><div class='del'>-               goto out;</div><div class='del'>-       volume = gf_strdup(strtok_r(NULL, ".", &amp;saveptr));</div><div class='del'>-       if (volume == NULL)</div><div class='del'>-               goto out;</div><div class='add'>+    strtok_r(brickname, ":", &amp;saveptr);</div><div class='add'>+    hostname = gf_strdup(strtok_r(NULL, ":", &amp;saveptr));</div><div class='add'>+    if (hostname == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+    volume = gf_strdup(strtok_r(NULL, ".", &amp;saveptr));</div><div class='add'>+    if (volume == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-       sprintf(brickname, "%s:%s", hostname, volume);</div><div class='add'>+    sprintf(brickname, "%s:%s", hostname, volume);</div><div class='ctx'> </div><div class='del'>-       ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-       GF_FREE(hostname);</div><div class='del'>-       GF_FREE(volume);</div><div class='del'>-       return ret;</div><div class='add'>+    GF_FREE(hostname);</div><div class='add'>+    GF_FREE(volume);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-fetch_pathinfo (xlator_t *this, inode_t *inode, int32_t *op_errno,</div><div class='del'>-                char **brickname)</div><div class='del'>-{</div><div class='del'>-        int                    ret       = -1;</div><div class='del'>-        loc_t                  loc       = {0, };</div><div class='del'>-        dict_t                *dict      = NULL;</div><div class='del'>-</div><div class='del'>-        if (!brickname)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!op_errno)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='del'>-</div><div class='del'>-        ret = syncop_getxattr (FIRST_CHILD(this), &amp;loc, &amp;dict,</div><div class='del'>-                               GF_XATTR_PATHINFO_KEY, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                *op_errno = -ret;</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_get_str (dict, GF_XATTR_PATHINFO_KEY, brickname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        *brickname = gf_strdup(*brickname);</div><div class='del'>-        if (*brickname == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+fetch_pathinfo(xlator_t *this, inode_t *inode, int32_t *op_errno,</div><div class='add'>+               char **brickname)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    if (!brickname)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (!op_errno)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='add'>+</div><div class='add'>+    ret = syncop_getxattr(FIRST_CHILD(this), &amp;loc, &amp;dict, GF_XATTR_PATHINFO_KEY,</div><div class='add'>+                          NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        *op_errno = -ret;</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = dict_get_str(dict, GF_XATTR_PATHINFO_KEY, brickname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    *brickname = gf_strdup(*brickname);</div><div class='add'>+    if (*brickname == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict != NULL) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='del'>-        loc_wipe(&amp;loc);</div><div class='add'>+    if (dict != NULL) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_lockinfo_get_brickname (xlator_t *this, inode_t *inode, int32_t *op_errno)</div><div class='add'>+pl_lockinfo_get_brickname(xlator_t *this, inode_t *inode, int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        int                    ret       = -1;</div><div class='del'>-        posix_locks_private_t *priv      = NULL;</div><div class='del'>-        char                  *brickname = NULL;</div><div class='del'>-        char                  *end       = NULL;</div><div class='del'>-        char                  *tmp       = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char *brickname = NULL;</div><div class='add'>+    char *end = NULL;</div><div class='add'>+    char *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = fetch_pathinfo (this, inode, op_errno, &amp;brickname);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = fetch_pathinfo(this, inode, op_errno, &amp;brickname);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        end = strrchr (brickname, ':');</div><div class='del'>-        if (!end) {</div><div class='del'>-                GF_FREE(brickname);</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tmp = brickname;</div><div class='del'>-        brickname = gf_strndup (brickname, (end - brickname));</div><div class='del'>-        if (brickname == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        priv-&gt;brickname = brickname;</div><div class='del'>-        ret = 0;</div><div class='add'>+    end = strrchr(brickname, ':');</div><div class='add'>+    if (!end) {</div><div class='add'>+        GF_FREE(brickname);</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmp = brickname;</div><div class='add'>+    brickname = gf_strndup(brickname, (end - brickname));</div><div class='add'>+    if (brickname == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv-&gt;brickname = brickname;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        GF_FREE(tmp);</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(tmp);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> char *</div><div class='del'>-pl_lockinfo_key (xlator_t *this, inode_t *inode, int32_t *op_errno)</div><div class='add'>+pl_lockinfo_key(xlator_t *this, inode_t *inode, int32_t *op_errno)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='del'>-        char                  *key  = NULL;</div><div class='del'>-        int                    ret = 0;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;brickname == NULL) {</div><div class='del'>-                ret = pl_lockinfo_get_brickname (this, inode, op_errno);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "cannot get brickname");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;brickname == NULL) {</div><div class='add'>+        ret = pl_lockinfo_get_brickname(this, inode, op_errno);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING, "cannot get brickname");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        key = priv-&gt;brickname;</div><div class='add'>+    key = priv-&gt;brickname;</div><div class='ctx'> out:</div><div class='del'>-        return key;</div><div class='add'>+    return key;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fgetxattr_handle_lockinfo (xlator_t *this, fd_t *fd,</div><div class='del'>-                              dict_t *dict, int32_t *op_errno)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t    *pl_inode = NULL;</div><div class='del'>-        char          *key      = NULL, *buf = NULL;</div><div class='del'>-        int32_t        op_ret   = 0;</div><div class='del'>-        unsigned long  fdnum    = 0;</div><div class='del'>-        int32_t        len      = 0;</div><div class='del'>-        dict_t        *tmp      = NULL;</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "Could not get inode.");</div><div class='del'>-                *op_errno = EBADFD;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!pl_locks_by_fd (pl_inode, fd)) {</div><div class='del'>-                op_ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fdnum = fd_to_fdnum (fd);</div><div class='del'>-</div><div class='del'>-        key = pl_lockinfo_key (this, fd-&gt;inode, op_errno);</div><div class='del'>-        if (key == NULL) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tmp = dict_new ();</div><div class='del'>-        if (tmp == NULL) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = dict_set_uint64 (tmp, key, fdnum);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                *op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "setting lockinfo value "</div><div class='del'>-                        "(%lu) for fd (ptr:%p inode-gfid:%s) failed (%s)",</div><div class='del'>-                        fdnum, fd, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        strerror (*op_errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        len = dict_serialized_length (tmp);</div><div class='del'>-        if (len &lt; 0) {</div><div class='del'>-                *op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dict_serialized_length failed (%s) while handling "</div><div class='del'>-                        "lockinfo for fd (ptr:%p inode-gfid:%s)",</div><div class='del'>-                        strerror (*op_errno), fd, uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = GF_CALLOC (1, len, gf_common_mt_char);</div><div class='del'>-        if (buf == NULL) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = dict_serialize (tmp, buf);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                *op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "dict_serialize failed (%s) while handling lockinfo "</div><div class='del'>-                        "for fd (ptr: %p inode-gfid:%s)", strerror (*op_errno),</div><div class='del'>-                        fd, uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = dict_set_dynptr (dict, GF_XATTR_LOCKINFO_KEY, buf, len);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                *op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "setting lockinfo value "</div><div class='del'>-                        "(%lu) for fd (ptr:%p inode-gfid:%s) failed (%s)",</div><div class='del'>-                        fdnum, fd, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                        strerror (*op_errno));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        buf = NULL;</div><div class='add'>+pl_fgetxattr_handle_lockinfo(xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                             int32_t *op_errno)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    char *key = NULL, *buf = NULL;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    unsigned long fdnum = 0;</div><div class='add'>+    int32_t len = 0;</div><div class='add'>+    dict_t *tmp = NULL;</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Could not get inode.");</div><div class='add'>+        *op_errno = EBADFD;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (!pl_locks_by_fd(pl_inode, fd)) {</div><div class='add'>+        op_ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fdnum = fd_to_fdnum(fd);</div><div class='add'>+</div><div class='add'>+    key = pl_lockinfo_key(this, fd-&gt;inode, op_errno);</div><div class='add'>+    if (key == NULL) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    tmp = dict_new();</div><div class='add'>+    if (tmp == NULL) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = dict_set_uint64(tmp, key, fdnum);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        *op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "setting lockinfo value "</div><div class='add'>+               "(%lu) for fd (ptr:%p inode-gfid:%s) failed (%s)",</div><div class='add'>+               fdnum, fd, uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(*op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    len = dict_serialized_length(tmp);</div><div class='add'>+    if (len &lt; 0) {</div><div class='add'>+        *op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "dict_serialized_length failed (%s) while handling "</div><div class='add'>+               "lockinfo for fd (ptr:%p inode-gfid:%s)",</div><div class='add'>+               strerror(*op_errno), fd, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = GF_CALLOC(1, len, gf_common_mt_char);</div><div class='add'>+    if (buf == NULL) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = dict_serialize(tmp, buf);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        *op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "dict_serialize failed (%s) while handling lockinfo "</div><div class='add'>+               "for fd (ptr: %p inode-gfid:%s)",</div><div class='add'>+               strerror(*op_errno), fd, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = dict_set_dynptr(dict, GF_XATTR_LOCKINFO_KEY, buf, len);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        *op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "setting lockinfo value "</div><div class='add'>+               "(%lu) for fd (ptr:%p inode-gfid:%s) failed (%s)",</div><div class='add'>+               fdnum, fd, uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(*op_errno));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    buf = NULL;</div><div class='ctx'> out:</div><div class='del'>-        if (tmp != NULL) {</div><div class='del'>-                dict_unref (tmp);</div><div class='del'>-        }</div><div class='add'>+    if (tmp != NULL) {</div><div class='add'>+        dict_unref(tmp);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (buf != NULL) {</div><div class='del'>-                GF_FREE (buf);</div><div class='del'>-        }</div><div class='add'>+    if (buf != NULL) {</div><div class='add'>+        GF_FREE(buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return op_ret;</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-pl_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-              const char *name, dict_t *xdata)</div><div class='add'>+pl_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t  op_ret = 0, op_errno = 0;</div><div class='del'>-        dict_t  *dict   = NULL;</div><div class='add'>+    int32_t op_ret = 0, op_errno = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!name) {</div><div class='del'>-                goto usual;</div><div class='del'>-        }</div><div class='add'>+    if (!name) {</div><div class='add'>+        goto usual;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (strcmp (name, GF_XATTR_LOCKINFO_KEY) == 0) {</div><div class='del'>-                dict = dict_new ();</div><div class='del'>-                if (dict == NULL) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                op_ret = pl_fgetxattr_handle_lockinfo (this, fd, dict,</div><div class='del'>-                                                       &amp;op_errno);</div><div class='del'>-                if (op_ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "getting lockinfo on fd (ptr:%p inode-gfid:%s) "</div><div class='del'>-                                "failed (%s)", fd, uuid_utoa (fd-&gt;inode-&gt;gfid),</div><div class='del'>-                                strerror (op_errno));</div><div class='del'>-                }</div><div class='add'>+    if (strcmp(name, GF_XATTR_LOCKINFO_KEY) == 0) {</div><div class='add'>+        dict = dict_new();</div><div class='add'>+        if (dict == NULL) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                goto unwind;</div><div class='del'>-        } else {</div><div class='del'>-                goto usual;</div><div class='add'>+        op_ret = pl_fgetxattr_handle_lockinfo(this, fd, dict, &amp;op_errno);</div><div class='add'>+        if (op_ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "getting lockinfo on fd (ptr:%p inode-gfid:%s) "</div><div class='add'>+                   "failed (%s)",</div><div class='add'>+                   fd, uuid_utoa(fd-&gt;inode-&gt;gfid), strerror(op_errno));</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        goto unwind;</div><div class='add'>+    } else {</div><div class='add'>+        goto usual;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, dict, NULL);</div><div class='del'>-        if (dict != NULL) {</div><div class='del'>-                dict_unref (dict);</div><div class='del'>-        }</div><div class='add'>+    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, NULL);</div><div class='add'>+    if (dict != NULL) {</div><div class='add'>+        dict_unref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> usual:</div><div class='del'>-        STACK_WIND (frame, default_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_migrate_locks (call_frame_t *frame, fd_t *newfd, uint64_t oldfd_num,</div><div class='del'>-                  int32_t *op_errno)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t   *pl_inode  = NULL;</div><div class='del'>-        uint64_t      newfd_num = 0;</div><div class='del'>-        posix_lock_t *l         = NULL;</div><div class='del'>-        int32_t       op_ret    = 0;</div><div class='del'>-</div><div class='del'>-        newfd_num = fd_to_fdnum (newfd);</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (frame-&gt;this, newfd-&gt;inode);</div><div class='del'>-        if (pl_inode == NULL) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                *op_errno = EBADFD;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+pl_migrate_locks(call_frame_t *frame, fd_t *newfd, uint64_t oldfd_num,</div><div class='add'>+                 int32_t *op_errno)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    uint64_t newfd_num = 0;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+</div><div class='add'>+    newfd_num = fd_to_fdnum(newfd);</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(frame-&gt;this, newfd-&gt;inode);</div><div class='add'>+    if (pl_inode == NULL) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        *op_errno = EBADFD;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                        if (l-&gt;fd_num == oldfd_num) {</div><div class='del'>-                                l-&gt;fd_num = newfd_num;</div><div class='del'>-                                l-&gt;client = frame-&gt;root-&gt;client;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (l-&gt;fd_num == oldfd_num) {</div><div class='add'>+                l-&gt;fd_num = newfd_num;</div><div class='add'>+                l-&gt;client = frame-&gt;root-&gt;client;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        op_ret = 0;</div><div class='add'>+    op_ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return op_ret;</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fsetxattr_handle_lockinfo (call_frame_t *frame, fd_t *fd, char *lockinfo_buf,</div><div class='del'>-                              int len, int32_t *op_errno)</div><div class='del'>-{</div><div class='del'>-        int32_t   op_ret    = -1;</div><div class='del'>-        dict_t   *lockinfo  = NULL;</div><div class='del'>-        uint64_t  oldfd_num = 0;</div><div class='del'>-        char     *key       = NULL;</div><div class='del'>-</div><div class='del'>-        lockinfo = dict_new ();</div><div class='del'>-        if (lockinfo == NULL) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                *op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = dict_unserialize (lockinfo_buf, len, &amp;lockinfo);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                *op_errno = -op_ret;</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        key = pl_lockinfo_key (frame-&gt;this, fd-&gt;inode, op_errno);</div><div class='del'>-        if (key == NULL) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = dict_get_uint64 (lockinfo, key, &amp;oldfd_num);</div><div class='del'>-</div><div class='del'>-        if (oldfd_num == 0) {</div><div class='del'>-                op_ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        op_ret = pl_migrate_locks (frame, fd, oldfd_num, op_errno);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_log (frame-&gt;this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "migration of locks from oldfd (ptr:%p) to newfd "</div><div class='del'>-                        "(ptr:%p) (inode-gfid:%s)", (void *)oldfd_num, fd,</div><div class='del'>-                        uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+pl_fsetxattr_handle_lockinfo(call_frame_t *frame, fd_t *fd, char *lockinfo_buf,</div><div class='add'>+                             int len, int32_t *op_errno)</div><div class='add'>+{</div><div class='add'>+    int32_t op_ret = -1;</div><div class='add'>+    dict_t *lockinfo = NULL;</div><div class='add'>+    uint64_t oldfd_num = 0;</div><div class='add'>+    char *key = NULL;</div><div class='add'>+</div><div class='add'>+    lockinfo = dict_new();</div><div class='add'>+    if (lockinfo == NULL) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        *op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = dict_unserialize(lockinfo_buf, len, &amp;lockinfo);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        *op_errno = -op_ret;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    key = pl_lockinfo_key(frame-&gt;this, fd-&gt;inode, op_errno);</div><div class='add'>+    if (key == NULL) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = dict_get_uint64(lockinfo, key, &amp;oldfd_num);</div><div class='add'>+</div><div class='add'>+    if (oldfd_num == 0) {</div><div class='add'>+        op_ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    op_ret = pl_migrate_locks(frame, fd, oldfd_num, op_errno);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(frame-&gt;this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "migration of locks from oldfd (ptr:%p) to newfd "</div><div class='add'>+               "(ptr:%p) (inode-gfid:%s)",</div><div class='add'>+               (void *)oldfd_num, fd, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        dict_unref (lockinfo);</div><div class='add'>+    dict_unref(lockinfo);</div><div class='ctx'> </div><div class='del'>-        return op_ret;</div><div class='add'>+    return op_ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fsetxattr, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fsetxattr, xdata, frame, op_ret, op_errno,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-              int32_t flags, dict_t *xdata)</div><div class='add'>+pl_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+             int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t  op_ret       = 0, op_errno = 0;</div><div class='del'>-        void    *lockinfo_buf = NULL;</div><div class='del'>-        int      len          = 0;</div><div class='add'>+    int32_t op_ret = 0, op_errno = 0;</div><div class='add'>+    void *lockinfo_buf = NULL;</div><div class='add'>+    int len = 0;</div><div class='ctx'> </div><div class='del'>-        op_ret = dict_get_ptr_and_len (dict, GF_XATTR_LOCKINFO_KEY,</div><div class='del'>-                                       &amp;lockinfo_buf, &amp;len);</div><div class='del'>-        if (lockinfo_buf == NULL) {</div><div class='del'>-                goto usual;</div><div class='del'>-        }</div><div class='add'>+    op_ret = dict_get_ptr_and_len(dict, GF_XATTR_LOCKINFO_KEY, &amp;lockinfo_buf,</div><div class='add'>+                                  &amp;len);</div><div class='add'>+    if (lockinfo_buf == NULL) {</div><div class='add'>+        goto usual;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        op_ret = pl_fsetxattr_handle_lockinfo (frame, fd, lockinfo_buf, len,</div><div class='del'>-                                               &amp;op_errno);</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    op_ret = pl_fsetxattr_handle_lockinfo(frame, fd, lockinfo_buf, len,</div><div class='add'>+                                          &amp;op_errno);</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> usual:</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+pl_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_fdctx_t *fdctx = NULL;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        fdctx = pl_check_n_create_fdctx (this, fd);</div><div class='del'>-        if (!fdctx) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    fdctx = pl_check_n_create_fdctx(this, fd);</div><div class='add'>+    if (!fdctx) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        PL_STACK_UNWIND (opendir, xdata, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    PL_STACK_UNWIND(opendir, xdata, frame, op_ret, op_errno, fd, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_opendir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            loc_t *loc, fd_t *fd, dict_t *xdata)</div><div class='add'>+pl_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_opendir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(flush, xdata, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (flush, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_flush (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          fd_t *fd, dict_t *xdata)</div><div class='add'>+pl_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "Could not get inode.");</div><div class='del'>-                STACK_UNWIND_STRICT (flush, frame, -1, EBADFD, NULL);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Could not get inode.");</div><div class='add'>+        STACK_UNWIND_STRICT(flush, frame, -1, EBADFD, NULL);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (pl_inode-&gt;migrated) {</div><div class='del'>-                       pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                       STACK_UNWIND_STRICT (flush, frame, -1, EREMOTE,</div><div class='del'>-                                            NULL);</div><div class='del'>-                       return 0;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (pl_inode-&gt;migrated) {</div><div class='add'>+            pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+            STACK_UNWIND_STRICT(flush, frame, -1, EREMOTE, NULL);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        pl_trace_flush (this, frame, fd);</div><div class='add'>+    pl_trace_flush(this, frame, fd);</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;lk_owner.len == 0) {</div><div class='del'>-                /* Handle special case when protocol/server sets lk-owner to zero.</div><div class='del'>-                 * This usually happens due to a client disconnection. Hence, free</div><div class='del'>-                 * all locks opened with this fd.</div><div class='del'>-                 */</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "Releasing all locks with fd %p", fd);</div><div class='del'>-                delete_locks_of_fd (this, pl_inode, fd);</div><div class='del'>-                goto wind;</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __delete_locks_of_owner (pl_inode, frame-&gt;root-&gt;client,</div><div class='del'>-                                         &amp;frame-&gt;root-&gt;lk_owner);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    if (frame-&gt;root-&gt;lk_owner.len == 0) {</div><div class='add'>+        /* Handle special case when protocol/server sets lk-owner to zero.</div><div class='add'>+         * This usually happens due to a client disconnection. Hence, free</div><div class='add'>+         * all locks opened with this fd.</div><div class='add'>+         */</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "Releasing all locks with fd %p", fd);</div><div class='add'>+        delete_locks_of_fd(this, pl_inode, fd);</div><div class='add'>+        goto wind;</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __delete_locks_of_owner(pl_inode, frame-&gt;root-&gt;client,</div><div class='add'>+                                &amp;frame-&gt;root-&gt;lk_owner);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        grant_blocked_locks (this, pl_inode);</div><div class='add'>+    grant_blocked_locks(this, pl_inode);</div><div class='ctx'> </div><div class='del'>-        do_blocked_rw (pl_inode);</div><div class='add'>+    do_blocked_rw(pl_inode);</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_flush_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_flush_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='add'>+pl_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_fdctx_t *fdctx = NULL;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        fdctx = pl_check_n_create_fdctx (this, fd);</div><div class='del'>-        if (!fdctx) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    fdctx = pl_check_n_create_fdctx(this, fd);</div><div class='add'>+    if (!fdctx) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (open, frame, op_ret, op_errno, fd, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, fd, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-         fd_t *fd, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int                     op_ret         = -1;</div><div class='del'>-        int                     op_errno       = EINVAL;</div><div class='del'>-        pl_inode_t              *pl_inode      = NULL;</div><div class='del'>-        posix_lock_t            *l             = NULL;</div><div class='del'>-        posix_locks_private_t   *priv          = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-</div><div class='del'>-        op_ret = 0, op_errno = 0;</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-</div><div class='del'>-        /* As per design, under forced and file-based mandatory locking modes</div><div class='del'>-         * it doesn't matter whether inodes's lock list contain advisory or</div><div class='del'>-         * mandatory type locks. So we just check whether inode's lock list is</div><div class='del'>-         * empty or not to make sure that no locks are being held for the file.</div><div class='del'>-         * Whereas under optimal mandatory locking mode, we strictly fail open</div><div class='del'>-         * if and only if lock list contain mandatory locks.</div><div class='del'>-         */</div><div class='del'>-        if (((priv-&gt;mandatory_mode == MLK_FILE_BASED) &amp;&amp; pl_inode-&gt;mandatory) ||</div><div class='del'>-                        priv-&gt;mandatory_mode == MLK_FORCED) {</div><div class='del'>-                if (fd-&gt;flags &amp; O_TRUNC) {</div><div class='del'>-                        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                        {</div><div class='del'>-                                if (!list_empty (&amp;pl_inode-&gt;ext_list)) {</div><div class='del'>-                                        op_ret = -1;</div><div class='del'>-                                        op_errno = EAGAIN;</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+pl_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+        fd_t *fd, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int op_ret = -1;</div><div class='add'>+    int op_errno = EINVAL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+</div><div class='add'>+    op_ret = 0, op_errno = 0;</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+</div><div class='add'>+    /* As per design, under forced and file-based mandatory locking modes</div><div class='add'>+     * it doesn't matter whether inodes's lock list contain advisory or</div><div class='add'>+     * mandatory type locks. So we just check whether inode's lock list is</div><div class='add'>+     * empty or not to make sure that no locks are being held for the file.</div><div class='add'>+     * Whereas under optimal mandatory locking mode, we strictly fail open</div><div class='add'>+     * if and only if lock list contain mandatory locks.</div><div class='add'>+     */</div><div class='add'>+    if (((priv-&gt;mandatory_mode == MLK_FILE_BASED) &amp;&amp; pl_inode-&gt;mandatory) ||</div><div class='add'>+        priv-&gt;mandatory_mode == MLK_FORCED) {</div><div class='add'>+        if (fd-&gt;flags &amp; O_TRUNC) {</div><div class='add'>+            pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                if (!list_empty(&amp;pl_inode-&gt;ext_list)) {</div><div class='add'>+                    op_ret = -1;</div><div class='add'>+                    op_errno = EAGAIN;</div><div class='ctx'>                 }</div><div class='del'>-        } else if (priv-&gt;mandatory_mode == MLK_OPTIMAL) {</div><div class='del'>-                if (fd-&gt;flags &amp; O_TRUNC) {</div><div class='del'>-                        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                        {</div><div class='del'>-                                list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                                        if ((l-&gt;lk_flags &amp; GF_LK_MANDATORY)) {</div><div class='del'>-                                                op_ret = -1;</div><div class='del'>-                                                op_errno = EAGAIN;</div><div class='del'>-                                                break;</div><div class='del'>-                                        }</div><div class='del'>-                                }</div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        }</div><div class='add'>+    } else if (priv-&gt;mandatory_mode == MLK_OPTIMAL) {</div><div class='add'>+        if (fd-&gt;flags &amp; O_TRUNC) {</div><div class='add'>+            pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+                {</div><div class='add'>+                    if ((l-&gt;lk_flags &amp; GF_LK_MANDATORY)) {</div><div class='add'>+                        op_ret = -1;</div><div class='add'>+                        op_errno = EAGAIN;</div><div class='add'>+                        break;</div><div class='add'>+                    }</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                STACK_UNWIND_STRICT (open, frame, op_ret, op_errno,</div><div class='del'>-                                                        NULL, NULL);</div><div class='del'>-        else</div><div class='del'>-                STACK_WIND (frame, pl_open_cbk, FIRST_CHILD(this),</div><div class='del'>-                                        FIRST_CHILD(this)-&gt;fops-&gt;open,</div><div class='del'>-                                        loc, flags, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        STACK_UNWIND_STRICT(open, frame, op_ret, op_errno, NULL, NULL);</div><div class='add'>+    else</div><div class='add'>+        STACK_WIND(frame, pl_open_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_create_cbk (call_frame_t *frame, void *cookie,</div><div class='del'>-               xlator_t *this, int32_t op_ret, int32_t op_errno,</div><div class='del'>-               fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='del'>-               struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, fd_t *fd, inode_t *inode, struct iatt *buf,</div><div class='add'>+              struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_fdctx_t *fdctx = NULL;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        fdctx = pl_check_n_create_fdctx (this, fd);</div><div class='del'>-        if (!fdctx) {</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+    fdctx = pl_check_n_create_fdctx(this, fd);</div><div class='add'>+    if (!fdctx) {</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        PL_STACK_UNWIND (create, xdata, frame, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                         preparent, postparent, xdata);</div><div class='add'>+    PL_STACK_UNWIND(create, xdata, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                    preparent, postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_create (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, int32_t flags, mode_t mode, mode_t umask, fd_t *fd,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+pl_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+          mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_create_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;create,</div><div class='del'>-                    loc, flags, mode, umask, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno,</div><div class='del'>-              struct iovec *vector, int32_t count, struct iatt *stbuf,</div><div class='del'>-              struct iobref *iobref, dict_t *xdata)</div><div class='add'>+pl_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iovec *vector, int32_t count,</div><div class='add'>+             struct iatt *stbuf, struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND (readv, xdata, frame, op_ret, op_errno,</div><div class='del'>-                         vector, count, stbuf, iobref, xdata);</div><div class='add'>+    PL_STACK_UNWIND(readv, xdata, frame, op_ret, op_errno, vector, count, stbuf,</div><div class='add'>+                    iobref, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-               struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+pl_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND (writev, xdata, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                         postbuf, xdata);</div><div class='add'>+    PL_STACK_UNWIND(writev, xdata, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                    xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-do_blocked_rw (pl_inode_t *pl_inode)</div><div class='add'>+do_blocked_rw(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        struct list_head  wind_list;</div><div class='del'>-        pl_rw_req_t      *rw = NULL;</div><div class='del'>-        pl_rw_req_t      *tmp = NULL;</div><div class='add'>+    struct list_head wind_list;</div><div class='add'>+    pl_rw_req_t *rw = NULL;</div><div class='add'>+    pl_rw_req_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;wind_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;wind_list);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        list_for_each_entry_safe(rw, tmp, &amp;pl_inode-&gt;rw_list, list)</div><div class='ctx'>         {</div><div class='del'>-                list_for_each_entry_safe (rw, tmp, &amp;pl_inode-&gt;rw_list, list) {</div><div class='del'>-                        if (__rw_allowable (pl_inode, &amp;rw-&gt;region,</div><div class='del'>-                                            rw-&gt;stub-&gt;fop)) {</div><div class='del'>-                                list_del_init (&amp;rw-&gt;list);</div><div class='del'>-                                list_add_tail (&amp;rw-&gt;list, &amp;wind_list);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (__rw_allowable(pl_inode, &amp;rw-&gt;region, rw-&gt;stub-&gt;fop)) {</div><div class='add'>+                list_del_init(&amp;rw-&gt;list);</div><div class='add'>+                list_add_tail(&amp;rw-&gt;list, &amp;wind_list);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (rw, tmp, &amp;wind_list, list) {</div><div class='del'>-                list_del_init (&amp;rw-&gt;list);</div><div class='del'>-                call_resume (rw-&gt;stub);</div><div class='del'>-                GF_FREE (rw);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(rw, tmp, &amp;wind_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;rw-&gt;list);</div><div class='add'>+        call_resume(rw-&gt;stub);</div><div class='add'>+        GF_FREE(rw);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__rw_allowable (pl_inode_t *pl_inode, posix_lock_t *region,</div><div class='del'>-                glusterfs_fop_t op)</div><div class='del'>-{</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='del'>-        int           ret = 1;</div><div class='del'>-</div><div class='del'>-        priv = THIS-&gt;private;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (!l-&gt;blocked &amp;&amp; locks_overlap (l, region)</div><div class='del'>-                                &amp;&amp; !same_owner (l, region)) {</div><div class='del'>-                        if ((op == GF_FOP_READ) &amp;&amp; (l-&gt;fl_type != F_WRLCK))</div><div class='del'>-                                continue;</div><div class='del'>-                        /* Check for mandatory lock under optimal</div><div class='del'>-                         * mandatory-locking mode */</div><div class='del'>-                        if (priv-&gt;mandatory_mode == MLK_OPTIMAL</div><div class='del'>-                                        &amp;&amp; !(l-&gt;lk_flags &amp; GF_LK_MANDATORY))</div><div class='del'>-                                continue;</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+__rw_allowable(pl_inode_t *pl_inode, posix_lock_t *region, glusterfs_fop_t op)</div><div class='add'>+{</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    int ret = 1;</div><div class='add'>+</div><div class='add'>+    priv = THIS-&gt;private;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (!l-&gt;blocked &amp;&amp; locks_overlap(l, region) &amp;&amp; !same_owner(l, region)) {</div><div class='add'>+            if ((op == GF_FOP_READ) &amp;&amp; (l-&gt;fl_type != F_WRLCK))</div><div class='add'>+                continue;</div><div class='add'>+            /* Check for mandatory lock under optimal</div><div class='add'>+             * mandatory-locking mode */</div><div class='add'>+            if (priv-&gt;mandatory_mode == MLK_OPTIMAL &amp;&amp;</div><div class='add'>+                !(l-&gt;lk_flags &amp; GF_LK_MANDATORY))</div><div class='add'>+                continue;</div><div class='add'>+            ret = 0;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_readv_cont (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-               off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+pl_readv_cont(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+              off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, pl_readv_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;readv,</div><div class='del'>-                    fd, size, offset, flags, xdata);</div><div class='add'>+    STACK_WIND(frame, pl_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_readv (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          fd_t *fd, size_t size, off_t offset, uint32_t flags, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t            *pl_inode = NULL;</div><div class='del'>-        pl_rw_req_t           *rw = NULL;</div><div class='del'>-        posix_lock_t           region = {.list = {0, }, };</div><div class='del'>-        gf_boolean_t           enabled = _gf_false;</div><div class='del'>-        gf_boolean_t           can_block = _gf_true;</div><div class='del'>-        int                    op_ret = 0;</div><div class='del'>-        int                    op_errno = 0;</div><div class='del'>-        int                    allowed = 1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+pl_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+         off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_rw_req_t *rw = NULL;</div><div class='add'>+    posix_lock_t region = {</div><div class='add'>+        .list =</div><div class='add'>+            {</div><div class='add'>+                0,</div><div class='add'>+            },</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t enabled = _gf_false;</div><div class='add'>+    gf_boolean_t can_block = _gf_true;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int allowed = 1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    enabled = pl_is_mandatory_locking_enabled(pl_inode);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='add'>+        enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (enabled) {</div><div class='add'>+        region.fl_start = offset;</div><div class='add'>+        region.fl_end = offset + size - 1;</div><div class='add'>+        region.client = frame-&gt;root-&gt;client;</div><div class='add'>+        region.fd_num = fd_to_fdnum(fd);</div><div class='add'>+        region.client_pid = frame-&gt;root-&gt;pid;</div><div class='add'>+        region.owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            allowed = pl_is_fop_allowed(pl_inode, &amp;region, fd, GF_FOP_READ,</div><div class='add'>+                                        &amp;can_block);</div><div class='add'>+            if (allowed == 1)</div><div class='add'>+                goto unlock;</div><div class='add'>+            else if (!can_block) {</div><div class='add'>+                op_errno = EAGAIN;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        enabled = pl_is_mandatory_locking_enabled (pl_inode);</div><div class='add'>+            rw = GF_CALLOC(1, sizeof(*rw), gf_locks_mt_pl_rw_req_t);</div><div class='add'>+            if (!rw) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='del'>-                enabled = _gf_false;</div><div class='add'>+            rw-&gt;stub = fop_readv_stub(frame, pl_readv_cont, fd, size, offset,</div><div class='add'>+                                      flags, xdata);</div><div class='add'>+            if (!rw-&gt;stub) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                GF_FREE(rw);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (enabled) {</div><div class='del'>-                region.fl_start   = offset;</div><div class='del'>-                region.fl_end     = offset + size - 1;</div><div class='del'>-                region.client     = frame-&gt;root-&gt;client;</div><div class='del'>-                region.fd_num     = fd_to_fdnum(fd);</div><div class='del'>-                region.client_pid = frame-&gt;root-&gt;pid;</div><div class='del'>-                region.owner      = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+            rw-&gt;region = region;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        allowed = pl_is_fop_allowed (pl_inode, &amp;region, fd,</div><div class='del'>-                                                     GF_FOP_READ, &amp;can_block);</div><div class='del'>-                        if (allowed == 1)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        else if (!can_block) {</div><div class='del'>-                                op_errno = EAGAIN;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw = GF_CALLOC (1, sizeof (*rw),</div><div class='del'>-                                        gf_locks_mt_pl_rw_req_t);</div><div class='del'>-                        if (!rw) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;stub = fop_readv_stub (frame, pl_readv_cont,</div><div class='del'>-                                                   fd, size, offset, flags,</div><div class='del'>-                                                   xdata);</div><div class='del'>-                        if (!rw-&gt;stub) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                GF_FREE (rw);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;region = region;</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='del'>-                }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            list_add_tail(&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (allowed == 1) {</div><div class='del'>-                STACK_WIND (frame, pl_readv_cbk,</div><div class='del'>-                            FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;readv,</div><div class='del'>-                            fd, size, offset, flags, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (allowed == 1) {</div><div class='add'>+        STACK_WIND(frame, pl_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags,</div><div class='add'>+                   xdata);</div><div class='add'>+    }</div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                STACK_UNWIND_STRICT (readv, frame, op_ret, op_errno,</div><div class='del'>-                                     NULL, 0, NULL, NULL, NULL);</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        STACK_UNWIND_STRICT(readv, frame, op_ret, op_errno, NULL, 0, NULL, NULL,</div><div class='add'>+                            NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_writev_cont (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                struct iovec *vector, int count, off_t offset,</div><div class='del'>-                uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='add'>+pl_writev_cont(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+               struct iovec *vector, int count, off_t offset, uint32_t flags,</div><div class='add'>+               struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        STACK_WIND (frame, pl_writev_cbk,</div><div class='del'>-                    FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;writev,</div><div class='del'>-                    fd, vector, count, offset, flags, iobref, xdata);</div><div class='add'>+    STACK_WIND(frame, pl_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-           struct iovec *vector, int32_t count, off_t offset,</div><div class='del'>-           uint32_t flags, struct iobref *iobref, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t            *pl_inode = NULL;</div><div class='del'>-        pl_rw_req_t           *rw = NULL;</div><div class='del'>-        posix_lock_t           region = {.list = {0, }, };</div><div class='del'>-        gf_boolean_t           enabled = _gf_false;</div><div class='del'>-        gf_boolean_t           can_block = _gf_true;</div><div class='del'>-        int                    op_ret = 0;</div><div class='del'>-        int                    op_errno = 0;</div><div class='del'>-        int                    allowed = 1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("locks", this, unwind);</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_ret   = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='add'>+pl_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+          int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='add'>+          dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    pl_rw_req_t *rw = NULL;</div><div class='add'>+    posix_lock_t region = {</div><div class='add'>+        .list =</div><div class='add'>+            {</div><div class='add'>+                0,</div><div class='add'>+            },</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t enabled = _gf_false;</div><div class='add'>+    gf_boolean_t can_block = _gf_true;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int allowed = 1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("locks", this, unwind);</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    enabled = pl_is_mandatory_locking_enabled(pl_inode);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='add'>+        enabled = _gf_false;</div><div class='add'>+</div><div class='add'>+    if (enabled) {</div><div class='add'>+        region.fl_start = offset;</div><div class='add'>+        region.fl_end = offset + iov_length(vector, count) - 1;</div><div class='add'>+        region.client = frame-&gt;root-&gt;client;</div><div class='add'>+        region.fd_num = fd_to_fdnum(fd);</div><div class='add'>+        region.client_pid = frame-&gt;root-&gt;pid;</div><div class='add'>+        region.owner = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+        {</div><div class='add'>+            allowed = pl_is_fop_allowed(pl_inode, &amp;region, fd, GF_FOP_WRITE,</div><div class='add'>+                                        &amp;can_block);</div><div class='add'>+            if (allowed == 1)</div><div class='add'>+                goto unlock;</div><div class='add'>+            else if (!can_block) {</div><div class='add'>+                op_errno = EAGAIN;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        enabled = pl_is_mandatory_locking_enabled (pl_inode);</div><div class='add'>+            rw = GF_CALLOC(1, sizeof(*rw), gf_locks_mt_pl_rw_req_t);</div><div class='add'>+            if (!rw) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid &lt; 0)</div><div class='del'>-                enabled = _gf_false;</div><div class='add'>+            rw-&gt;stub = fop_writev_stub(frame, pl_writev_cont, fd, vector, count,</div><div class='add'>+                                       offset, flags, iobref, xdata);</div><div class='add'>+            if (!rw-&gt;stub) {</div><div class='add'>+                op_errno = ENOMEM;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                GF_FREE(rw);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (enabled) {</div><div class='del'>-                region.fl_start   = offset;</div><div class='del'>-                region.fl_end     = offset + iov_length (vector, count) - 1;</div><div class='del'>-                region.client     = frame-&gt;root-&gt;client;</div><div class='del'>-                region.fd_num     = fd_to_fdnum(fd);</div><div class='del'>-                region.client_pid = frame-&gt;root-&gt;pid;</div><div class='del'>-                region.owner      = frame-&gt;root-&gt;lk_owner;</div><div class='add'>+            rw-&gt;region = region;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        allowed = pl_is_fop_allowed (pl_inode, &amp;region, fd,</div><div class='del'>-                                                     GF_FOP_WRITE, &amp;can_block);</div><div class='del'>-                        if (allowed == 1)</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        else if (!can_block) {</div><div class='del'>-                                op_errno = EAGAIN;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw = GF_CALLOC (1, sizeof (*rw),</div><div class='del'>-                                        gf_locks_mt_pl_rw_req_t);</div><div class='del'>-                        if (!rw) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;stub = fop_writev_stub (frame, pl_writev_cont,</div><div class='del'>-                                                    fd, vector, count, offset,</div><div class='del'>-                                                    flags, iobref, xdata);</div><div class='del'>-                        if (!rw-&gt;stub) {</div><div class='del'>-                                op_errno = ENOMEM;</div><div class='del'>-                                op_ret = -1;</div><div class='del'>-                                GF_FREE (rw);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        rw-&gt;region = region;</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='del'>-                }</div><div class='del'>-        unlock:</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            list_add_tail(&amp;rw-&gt;list, &amp;pl_inode-&gt;rw_list);</div><div class='ctx'>         }</div><div class='add'>+    unlock:</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (allowed == 1) {</div><div class='del'>-                STACK_WIND (frame, pl_writev_cbk,</div><div class='del'>-                            FIRST_CHILD (this), FIRST_CHILD (this)-&gt;fops-&gt;writev,</div><div class='del'>-                            fd, vector, count, offset, flags, iobref, xdata);</div><div class='del'>-        }</div><div class='add'>+    if (allowed == 1) {</div><div class='add'>+        STACK_WIND(frame, pl_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+                   flags, iobref, xdata);</div><div class='add'>+    }</div><div class='ctx'> unwind:</div><div class='del'>-        if (op_ret == -1)</div><div class='del'>-                STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno,</div><div class='del'>-                                     NULL, NULL, NULL);</div><div class='add'>+    if (op_ret == -1)</div><div class='add'>+        STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__fd_has_locks (pl_inode_t *pl_inode, fd_t *fd)</div><div class='add'>+__fd_has_locks(pl_inode_t *pl_inode, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int           found = 0;</div><div class='del'>-        posix_lock_t *l     = NULL;</div><div class='add'>+    int found = 0;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='del'>-                        found = 1;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='add'>+            found = 1;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return found;</div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static posix_lock_t *</div><div class='del'>-lock_dup (posix_lock_t *lock)</div><div class='add'>+lock_dup(posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *new_lock = NULL;</div><div class='add'>+    posix_lock_t *new_lock = NULL;</div><div class='ctx'> </div><div class='del'>-        new_lock = new_posix_lock (&amp;lock-&gt;user_flock, lock-&gt;client,</div><div class='del'>-                                   lock-&gt;client_pid, &amp;lock-&gt;owner,</div><div class='del'>-                                   (fd_t *)lock-&gt;fd_num, lock-&gt;lk_flags,</div><div class='del'>-                                   lock-&gt;blocking);</div><div class='del'>-        return new_lock;</div><div class='add'>+    new_lock = new_posix_lock(&amp;lock-&gt;user_flock, lock-&gt;client, lock-&gt;client_pid,</div><div class='add'>+                              &amp;lock-&gt;owner, (fd_t *)lock-&gt;fd_num,</div><div class='add'>+                              lock-&gt;lk_flags, lock-&gt;blocking);</div><div class='add'>+    return new_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__dup_locks_to_fdctx (pl_inode_t *pl_inode, fd_t *fd,</div><div class='del'>-                      pl_fdctx_t *fdctx)</div><div class='del'>-{</div><div class='del'>-        posix_lock_t *l        = NULL;</div><div class='del'>-        posix_lock_t *duplock = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-                if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='del'>-                        duplock = lock_dup (l);</div><div class='del'>-                        if (!duplock) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        list_add_tail (&amp;duplock-&gt;list, &amp;fdctx-&gt;locks_list);</div><div class='del'>-                }</div><div class='add'>+__dup_locks_to_fdctx(pl_inode_t *pl_inode, fd_t *fd, pl_fdctx_t *fdctx)</div><div class='add'>+{</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *duplock = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (l-&gt;fd_num == fd_to_fdnum(fd)) {</div><div class='add'>+            duplock = lock_dup(l);</div><div class='add'>+            if (!duplock) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            list_add_tail(&amp;duplock-&gt;list, &amp;fdctx-&gt;locks_list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__copy_locks_to_fdctx (pl_inode_t *pl_inode, fd_t *fd,</div><div class='del'>-                      pl_fdctx_t *fdctx)</div><div class='add'>+__copy_locks_to_fdctx(pl_inode_t *pl_inode, fd_t *fd, pl_fdctx_t *fdctx)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        ret = __dup_locks_to_fdctx (pl_inode, fd, fdctx);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = __dup_locks_to_fdctx(pl_inode, fd, fdctx);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-pl_mark_eol_lock (posix_lock_t *lock)</div><div class='add'>+pl_mark_eol_lock(posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;user_flock.l_type = GF_LK_EOL;</div><div class='del'>-        return;</div><div class='add'>+    lock-&gt;user_flock.l_type = GF_LK_EOL;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static posix_lock_t *</div><div class='del'>-__get_next_fdctx_lock (pl_fdctx_t *fdctx)</div><div class='add'>+__get_next_fdctx_lock(pl_fdctx_t *fdctx)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *lock = NULL;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (fdctx);</div><div class='add'>+    GF_ASSERT(fdctx);</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;fdctx-&gt;locks_list)) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "fdctx lock list empty");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (list_empty(&amp;fdctx-&gt;locks_list)) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_DEBUG, "fdctx lock list empty");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock = list_entry (fdctx-&gt;locks_list.next, typeof (*lock),</div><div class='del'>-                           list);</div><div class='add'>+    lock = list_entry(fdctx-&gt;locks_list.next, typeof(*lock), list);</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (lock);</div><div class='add'>+    GF_ASSERT(lock);</div><div class='ctx'> </div><div class='del'>-        list_del_init (&amp;lock-&gt;list);</div><div class='add'>+    list_del_init(&amp;lock-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lock;</div><div class='add'>+    return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__set_next_lock_fd (pl_fdctx_t *fdctx, posix_lock_t *reqlock)</div><div class='add'>+__set_next_lock_fd(pl_fdctx_t *fdctx, posix_lock_t *reqlock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *lock  = NULL;</div><div class='del'>-        int           ret   = 0;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (fdctx);</div><div class='add'>+    GF_ASSERT(fdctx);</div><div class='ctx'> </div><div class='del'>-        lock = __get_next_fdctx_lock (fdctx);</div><div class='del'>-        if (!lock) {</div><div class='del'>-                gf_log (THIS-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "marking EOL in reqlock");</div><div class='del'>-                pl_mark_eol_lock (reqlock);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    lock = __get_next_fdctx_lock(fdctx);</div><div class='add'>+    if (!lock) {</div><div class='add'>+        gf_log(THIS-&gt;name, GF_LOG_DEBUG, "marking EOL in reqlock");</div><div class='add'>+        pl_mark_eol_lock(reqlock);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        reqlock-&gt;user_flock  = lock-&gt;user_flock;</div><div class='del'>-        reqlock-&gt;fl_start    = lock-&gt;fl_start;</div><div class='del'>-        reqlock-&gt;fl_type     = lock-&gt;fl_type;</div><div class='del'>-        reqlock-&gt;fl_end      = lock-&gt;fl_end;</div><div class='del'>-        reqlock-&gt;owner       = lock-&gt;owner;</div><div class='add'>+    reqlock-&gt;user_flock = lock-&gt;user_flock;</div><div class='add'>+    reqlock-&gt;fl_start = lock-&gt;fl_start;</div><div class='add'>+    reqlock-&gt;fl_type = lock-&gt;fl_type;</div><div class='add'>+    reqlock-&gt;fl_end = lock-&gt;fl_end;</div><div class='add'>+    reqlock-&gt;owner = lock-&gt;owner;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (lock)</div><div class='del'>-                __destroy_lock (lock);</div><div class='add'>+    if (lock)</div><div class='add'>+        __destroy_lock(lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-pl_getlk_fd (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-             fd_t *fd, posix_lock_t *reqlock)</div><div class='add'>+pl_getlk_fd(xlator_t *this, pl_inode_t *pl_inode, fd_t *fd,</div><div class='add'>+            posix_lock_t *reqlock)</div><div class='ctx'> {</div><div class='del'>-        uint64_t    tmp   = 0;</div><div class='del'>-        pl_fdctx_t *fdctx = NULL;</div><div class='del'>-        int         ret   = 0;</div><div class='add'>+    uint64_t tmp = 0;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (!__fd_has_locks (pl_inode, fd)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "fd=%p has no active locks", fd);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!__fd_has_locks(pl_inode, fd)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "fd=%p has no active locks", fd);</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto unlock;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "There are active locks on fd");</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "There are active locks on fd");</div><div class='ctx'> </div><div class='del'>-                ret = fd_ctx_get (fd, this, &amp;tmp);</div><div class='del'>-                fdctx = (pl_fdctx_t *)(long) tmp;</div><div class='add'>+        ret = fd_ctx_get(fd, this, &amp;tmp);</div><div class='add'>+        fdctx = (pl_fdctx_t *)(long)tmp;</div><div class='ctx'> </div><div class='del'>-                if (list_empty (&amp;fdctx-&gt;locks_list)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "no fdctx -&gt; copying all locks on fd");</div><div class='add'>+        if (list_empty(&amp;fdctx-&gt;locks_list)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "no fdctx -&gt; copying all locks on fd");</div><div class='ctx'> </div><div class='del'>-                        ret = __copy_locks_to_fdctx (pl_inode, fd, fdctx);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='add'>+            ret = __copy_locks_to_fdctx(pl_inode, fd, fdctx);</div><div class='add'>+            if (ret) {</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                        ret = __set_next_lock_fd (fdctx, reqlock);</div><div class='add'>+            ret = __set_next_lock_fd(fdctx, reqlock);</div><div class='ctx'> </div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "fdctx present -&gt; returning the next lock");</div><div class='del'>-                        ret = __set_next_lock_fd (fdctx, reqlock);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                        "could not get next lock of fd");</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "fdctx present -&gt; returning the next lock");</div><div class='add'>+            ret = __set_next_lock_fd(fdctx, reqlock);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                       "could not get next lock of fd");</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_metalock_is_active (pl_inode_t *pl_inode)</div><div class='add'>+pl_metalock_is_active(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;metalk_list))</div><div class='del'>-                return 0;</div><div class='del'>-        else</div><div class='del'>-                return 1;</div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;metalk_list))</div><div class='add'>+        return 0;</div><div class='add'>+    else</div><div class='add'>+        return 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-__pl_queue_lock (pl_inode_t *pl_inode, posix_lock_t *reqlock, int can_block)</div><div class='add'>+__pl_queue_lock(pl_inode_t *pl_inode, posix_lock_t *reqlock, int can_block)</div><div class='ctx'> {</div><div class='del'>-        list_add_tail (&amp;reqlock-&gt;list, &amp;pl_inode-&gt;queued_locks);</div><div class='add'>+    list_add_tail(&amp;reqlock-&gt;list, &amp;pl_inode-&gt;queued_locks);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_lk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-       fd_t *fd, int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t   *pl_inode   = NULL;</div><div class='del'>-        int           op_ret     = 0;</div><div class='del'>-        int           op_errno   = 0;</div><div class='del'>-        int           can_block  = 0;</div><div class='del'>-        posix_lock_t *reqlock    = NULL;</div><div class='del'>-        posix_lock_t *conf       = NULL;</div><div class='del'>-        int           ret        = 0;</div><div class='del'>-        uint32_t      lk_flags   = 0;</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_uint32 (xdata, GF_LOCK_MODE, &amp;lk_flags);</div><div class='del'>-        if (ret == 0) {</div><div class='del'>-                if (priv-&gt;mandatory_mode == MLK_NONE)</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG, "Lock flags received "</div><div class='del'>-                                "in a non-mandatory locking environment, "</div><div class='del'>-                                "continuing");</div><div class='del'>-                else</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG, "Lock flags received, "</div><div class='del'>-                                "continuing");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ((flock-&gt;l_start &lt; 0) ||</div><div class='del'>-            ((flock-&gt;l_start + flock-&gt;l_len) &lt; 0)) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* As per 'man 3 fcntl', the value of l_len may be</div><div class='del'>-         * negative. In such cases, lock request should be</div><div class='del'>-         * considered for the range starting at 'l_start+l_len'</div><div class='del'>-         * and ending at 'l_start-1'. Update the fields accordingly.</div><div class='del'>-         */</div><div class='del'>-        if (flock-&gt;l_len &lt; 0) {</div><div class='del'>-                flock-&gt;l_start += flock-&gt;l_len;</div><div class='del'>-                flock-&gt;l_len = labs (flock-&gt;l_len);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, fd-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        reqlock = new_posix_lock (flock, frame-&gt;root-&gt;client, frame-&gt;root-&gt;pid,</div><div class='del'>-                                  &amp;frame-&gt;root-&gt;lk_owner, fd, lk_flags,</div><div class='del'>-                                  can_block);</div><div class='del'>-</div><div class='del'>-        if (!reqlock) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pl_trace_in (this, frame, fd, NULL, cmd, flock, NULL);</div><div class='del'>-</div><div class='del'>-        switch (cmd) {</div><div class='del'>-</div><div class='add'>+pl_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,</div><div class='add'>+      struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int can_block = 0;</div><div class='add'>+    posix_lock_t *reqlock = NULL;</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    uint32_t lk_flags = 0;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_uint32(xdata, GF_LOCK_MODE, &amp;lk_flags);</div><div class='add'>+    if (ret == 0) {</div><div class='add'>+        if (priv-&gt;mandatory_mode == MLK_NONE)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "Lock flags received "</div><div class='add'>+                   "in a non-mandatory locking environment, "</div><div class='add'>+                   "continuing");</div><div class='add'>+        else</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "Lock flags received, "</div><div class='add'>+                   "continuing");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if ((flock-&gt;l_start &lt; 0) || ((flock-&gt;l_start + flock-&gt;l_len) &lt; 0)) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* As per 'man 3 fcntl', the value of l_len may be</div><div class='add'>+     * negative. In such cases, lock request should be</div><div class='add'>+     * considered for the range starting at 'l_start+l_len'</div><div class='add'>+     * and ending at 'l_start-1'. Update the fields accordingly.</div><div class='add'>+     */</div><div class='add'>+    if (flock-&gt;l_len &lt; 0) {</div><div class='add'>+        flock-&gt;l_start += flock-&gt;l_len;</div><div class='add'>+        flock-&gt;l_len = labs(flock-&gt;l_len);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, fd-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    reqlock = new_posix_lock(flock, frame-&gt;root-&gt;client, frame-&gt;root-&gt;pid,</div><div class='add'>+                             &amp;frame-&gt;root-&gt;lk_owner, fd, lk_flags, can_block);</div><div class='add'>+</div><div class='add'>+    if (!reqlock) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pl_trace_in(this, frame, fd, NULL, cmd, flock, NULL);</div><div class='add'>+</div><div class='add'>+    switch (cmd) {</div><div class='ctx'>         case F_RESLK_LCKW:</div><div class='del'>-                can_block = 1;</div><div class='add'>+            can_block = 1;</div><div class='ctx'> </div><div class='del'>-                /* fall through */</div><div class='add'>+            /* fall through */</div><div class='ctx'>         case F_RESLK_LCK:</div><div class='del'>-                reqlock-&gt;frame = frame;</div><div class='del'>-                reqlock-&gt;this = this;</div><div class='add'>+            reqlock-&gt;frame = frame;</div><div class='add'>+            reqlock-&gt;this = this;</div><div class='ctx'> </div><div class='del'>-                ret = pl_reserve_setlk (this, pl_inode, reqlock,</div><div class='del'>-                                        can_block);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        if (can_block)</div><div class='del'>-                                goto out;</div><div class='add'>+            ret = pl_reserve_setlk(this, pl_inode, reqlock, can_block);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                if (can_block)</div><div class='add'>+                    goto out;</div><div class='ctx'> </div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                        __destroy_lock (reqlock);</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='del'>-                /* Finally a getlk and return the call */</div><div class='del'>-                conf = pl_getlk (pl_inode, reqlock);</div><div class='del'>-                if (conf)</div><div class='del'>-                        posix_lock_to_flock (conf, flock);</div><div class='del'>-                break;</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = -ret;</div><div class='add'>+                __destroy_lock(reqlock);</div><div class='add'>+                goto unwind;</div><div class='add'>+            }</div><div class='add'>+            /* Finally a getlk and return the call */</div><div class='add'>+            conf = pl_getlk(pl_inode, reqlock);</div><div class='add'>+            if (conf)</div><div class='add'>+                posix_lock_to_flock(conf, flock);</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case F_RESLK_UNLCK:</div><div class='del'>-                reqlock-&gt;frame = frame;</div><div class='del'>-                reqlock-&gt;this = this;</div><div class='del'>-                ret = pl_reserve_unlock (this, pl_inode, reqlock);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = -ret;</div><div class='del'>-                }</div><div class='del'>-                __destroy_lock (reqlock);</div><div class='del'>-                goto unwind;</div><div class='add'>+            reqlock-&gt;frame = frame;</div><div class='add'>+            reqlock-&gt;this = this;</div><div class='add'>+            ret = pl_reserve_unlock(this, pl_inode, reqlock);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = -ret;</div><div class='add'>+            }</div><div class='add'>+            __destroy_lock(reqlock);</div><div class='add'>+            goto unwind;</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'>         case F_GETLK_FD:</div><div class='del'>-                reqlock-&gt;frame = frame;</div><div class='del'>-                reqlock-&gt;this = this;</div><div class='del'>-                ret = pl_verify_reservelk (this, pl_inode, reqlock, can_block);</div><div class='del'>-                GF_ASSERT (ret &gt;= 0);</div><div class='del'>-</div><div class='del'>-                ret = pl_getlk_fd (this, pl_inode, fd, reqlock);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "getting locks on fd failed");</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOLCK;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+            reqlock-&gt;frame = frame;</div><div class='add'>+            reqlock-&gt;this = this;</div><div class='add'>+            ret = pl_verify_reservelk(this, pl_inode, reqlock, can_block);</div><div class='add'>+            GF_ASSERT(ret &gt;= 0);</div><div class='add'>+</div><div class='add'>+            ret = pl_getlk_fd(this, pl_inode, fd, reqlock);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "getting locks on fd failed");</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = ENOLCK;</div><div class='add'>+                goto unwind;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "Replying with a lock on fd for healing");</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "Replying with a lock on fd for healing");</div><div class='ctx'> </div><div class='del'>-                posix_lock_to_flock (reqlock, flock);</div><div class='del'>-                __destroy_lock (reqlock);</div><div class='add'>+            posix_lock_to_flock(reqlock, flock);</div><div class='add'>+            __destroy_lock(reqlock);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_GETLK != F_GETLK64</div><div class='ctx'>         case F_GETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_GETLK:</div><div class='del'>-                conf = pl_getlk (pl_inode, reqlock);</div><div class='del'>-                posix_lock_to_flock (conf, flock);</div><div class='del'>-                __destroy_lock (reqlock);</div><div class='add'>+            conf = pl_getlk(pl_inode, reqlock);</div><div class='add'>+            posix_lock_to_flock(conf, flock);</div><div class='add'>+            __destroy_lock(reqlock);</div><div class='ctx'> </div><div class='del'>-                break;</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='ctx'> #if F_SETLKW != F_SETLKW64</div><div class='ctx'>         case F_SETLKW64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLKW:</div><div class='del'>-                can_block = 1;</div><div class='del'>-                reqlock-&gt;frame  = frame;</div><div class='del'>-                reqlock-&gt;this   = this;</div><div class='del'>-                reqlock-&gt;blocking = can_block;</div><div class='del'>-                /* fall through */</div><div class='add'>+            can_block = 1;</div><div class='add'>+            reqlock-&gt;frame = frame;</div><div class='add'>+            reqlock-&gt;this = this;</div><div class='add'>+            reqlock-&gt;blocking = can_block;</div><div class='add'>+            /* fall through */</div><div class='ctx'> </div><div class='ctx'> #if F_SETLK != F_SETLK64</div><div class='ctx'>         case F_SETLK64:</div><div class='ctx'> #endif</div><div class='ctx'>         case F_SETLK:</div><div class='del'>-                reqlock-&gt;frame  = frame;</div><div class='del'>-                reqlock-&gt;this   = this;</div><div class='add'>+            reqlock-&gt;frame = frame;</div><div class='add'>+            reqlock-&gt;this = this;</div><div class='ctx'> </div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        if (pl_inode-&gt;migrated) {</div><div class='del'>-                                op_errno = EREMOTE;</div><div class='del'>-                                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                                STACK_UNWIND_STRICT (lk, frame, -1,</div><div class='del'>-                                                     op_errno, flock, xdata);</div><div class='del'>-</div><div class='del'>-                                __destroy_lock (reqlock);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+            {</div><div class='add'>+                if (pl_inode-&gt;migrated) {</div><div class='add'>+                    op_errno = EREMOTE;</div><div class='add'>+                    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+                    STACK_UNWIND_STRICT(lk, frame, -1, op_errno, flock, xdata);</div><div class='ctx'> </div><div class='del'>-                ret = pl_verify_reservelk (this, pl_inode, reqlock, can_block);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "Lock blocked due to conflicting reserve lock");</div><div class='del'>-                        goto out;</div><div class='add'>+                    __destroy_lock(reqlock);</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                ret = pl_setlk (this, pl_inode, reqlock, can_block);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        if ((can_block) &amp;&amp; (F_UNLCK != flock-&gt;l_type)) {</div><div class='del'>-                                pl_trace_block (this, frame, fd, NULL, cmd, flock, NULL);</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG, "returning EAGAIN");</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = EAGAIN;</div><div class='del'>-                        __destroy_lock (reqlock);</div><div class='del'>-                } else if (ret == -2) {</div><div class='del'>-                        goto out;</div><div class='del'>-                } else if ((0 == ret) &amp;&amp; (F_UNLCK == flock-&gt;l_type)) {</div><div class='del'>-                        /* For NLM's last "unlock on fd" detection */</div><div class='del'>-                        if (pl_locks_by_fd (pl_inode, fd))</div><div class='del'>-                                flock-&gt;l_type = F_RDLCK;</div><div class='del'>-                        else</div><div class='del'>-                                flock-&gt;l_type = F_UNLCK;</div><div class='add'>+            ret = pl_verify_reservelk(this, pl_inode, reqlock, can_block);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                       "Lock blocked due to conflicting reserve lock");</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            ret = pl_setlk(this, pl_inode, reqlock, can_block);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                if ((can_block) &amp;&amp; (F_UNLCK != flock-&gt;l_type)) {</div><div class='add'>+                    pl_trace_block(this, frame, fd, NULL, cmd, flock, NULL);</div><div class='add'>+                    goto out;</div><div class='ctx'>                 }</div><div class='del'>-        }</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "returning EAGAIN");</div><div class='add'>+                op_ret = -1;</div><div class='add'>+                op_errno = EAGAIN;</div><div class='add'>+                __destroy_lock(reqlock);</div><div class='add'>+            } else if (ret == -2) {</div><div class='add'>+                goto out;</div><div class='add'>+            } else if ((0 == ret) &amp;&amp; (F_UNLCK == flock-&gt;l_type)) {</div><div class='add'>+                /* For NLM's last "unlock on fd" detection */</div><div class='add'>+                if (pl_locks_by_fd(pl_inode, fd))</div><div class='add'>+                    flock-&gt;l_type = F_RDLCK;</div><div class='add'>+                else</div><div class='add'>+                    flock-&gt;l_type = F_UNLCK;</div><div class='add'>+            }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        pl_trace_out (this, frame, fd, NULL, cmd, flock, op_ret, op_errno, NULL);</div><div class='del'>-        pl_update_refkeeper (this, fd-&gt;inode);</div><div class='del'>-</div><div class='add'>+    pl_trace_out(this, frame, fd, NULL, cmd, flock, op_ret, op_errno, NULL);</div><div class='add'>+    pl_update_refkeeper(this, fd-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (lk, frame, op_ret, op_errno, flock, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(lk, frame, op_ret, op_errno, flock, xdata);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* TODO: this function just logs, no action required?? */</div><div class='ctx'> int</div><div class='del'>-pl_forget (xlator_t *this,</div><div class='del'>-           inode_t *inode)</div><div class='add'>+pl_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t   *pl_inode = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='ctx'> </div><div class='del'>-        posix_lock_t *ext_tmp = NULL;</div><div class='del'>-        posix_lock_t *ext_l   = NULL;</div><div class='del'>-        struct list_head posixlks_released;</div><div class='add'>+    posix_lock_t *ext_tmp = NULL;</div><div class='add'>+    posix_lock_t *ext_l = NULL;</div><div class='add'>+    struct list_head posixlks_released;</div><div class='ctx'> </div><div class='del'>-        pl_inode_lock_t *ino_tmp = NULL;</div><div class='del'>-        pl_inode_lock_t *ino_l   = NULL;</div><div class='del'>-        struct list_head inodelks_released;</div><div class='add'>+    pl_inode_lock_t *ino_tmp = NULL;</div><div class='add'>+    pl_inode_lock_t *ino_l = NULL;</div><div class='add'>+    struct list_head inodelks_released;</div><div class='ctx'> </div><div class='del'>-        pl_rw_req_t *rw_tmp = NULL;</div><div class='del'>-        pl_rw_req_t *rw_req = NULL;</div><div class='add'>+    pl_rw_req_t *rw_tmp = NULL;</div><div class='add'>+    pl_rw_req_t *rw_req = NULL;</div><div class='ctx'> </div><div class='del'>-        pl_entry_lock_t *entry_tmp = NULL;</div><div class='del'>-        pl_entry_lock_t *entry_l   = NULL;</div><div class='del'>-        struct list_head entrylks_released;</div><div class='add'>+    pl_entry_lock_t *entry_tmp = NULL;</div><div class='add'>+    pl_entry_lock_t *entry_l = NULL;</div><div class='add'>+    struct list_head entrylks_released;</div><div class='ctx'> </div><div class='del'>-        pl_dom_list_t *dom = NULL;</div><div class='del'>-        pl_dom_list_t *dom_tmp = NULL;</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_dom_list_t *dom_tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;posixlks_released);</div><div class='del'>-        INIT_LIST_HEAD (&amp;inodelks_released);</div><div class='del'>-        INIT_LIST_HEAD (&amp;entrylks_released);</div><div class='add'>+    INIT_LIST_HEAD(&amp;posixlks_released);</div><div class='add'>+    INIT_LIST_HEAD(&amp;inodelks_released);</div><div class='add'>+    INIT_LIST_HEAD(&amp;entrylks_released);</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, inode);</div><div class='add'>+    pl_inode = pl_inode_get(this, inode);</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (!list_empty(&amp;pl_inode-&gt;rw_list)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Pending R/W requests found, releasing.");</div><div class='ctx'> </div><div class='del'>-                if (!list_empty (&amp;pl_inode-&gt;rw_list)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Pending R/W requests found, releasing.");</div><div class='add'>+            list_for_each_entry_safe(rw_req, rw_tmp, &amp;pl_inode-&gt;rw_list, list)</div><div class='add'>+            {</div><div class='add'>+                list_del(&amp;rw_req-&gt;list);</div><div class='add'>+                call_stub_destroy(rw_req-&gt;stub);</div><div class='add'>+                GF_FREE(rw_req);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        list_for_each_entry_safe (rw_req, rw_tmp, &amp;pl_inode-&gt;rw_list,</div><div class='del'>-                                                  list) {</div><div class='add'>+        if (!list_empty(&amp;pl_inode-&gt;ext_list)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "Pending fcntl locks found, releasing.");</div><div class='ctx'> </div><div class='del'>-                                list_del (&amp;rw_req-&gt;list);</div><div class='del'>-                                call_stub_destroy(rw_req-&gt;stub);</div><div class='del'>-                                GF_FREE (rw_req);</div><div class='del'>-                        }</div><div class='add'>+            list_for_each_entry_safe(ext_l, ext_tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+            {</div><div class='add'>+                __delete_lock(ext_l);</div><div class='add'>+                if (ext_l-&gt;blocked) {</div><div class='add'>+                    list_add_tail(&amp;ext_l-&gt;list, &amp;posixlks_released);</div><div class='add'>+                    continue;</div><div class='ctx'>                 }</div><div class='add'>+                __destroy_lock(ext_l);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                if (!list_empty (&amp;pl_inode-&gt;ext_list)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "Pending fcntl locks found, releasing.");</div><div class='del'>-</div><div class='del'>-                        list_for_each_entry_safe (ext_l, ext_tmp, &amp;pl_inode-&gt;ext_list,</div><div class='del'>-                                                  list) {</div><div class='add'>+        list_for_each_entry_safe(dom, dom_tmp, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='add'>+        {</div><div class='add'>+            if (!list_empty(&amp;dom-&gt;inodelk_list)) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Pending inode locks found, releasing.");</div><div class='ctx'> </div><div class='del'>-                                __delete_lock (ext_l);</div><div class='del'>-                                if (ext_l-&gt;blocked) {</div><div class='del'>-                                        list_add_tail (&amp;ext_l-&gt;list, &amp;posixlks_released);</div><div class='del'>-                                        continue;</div><div class='del'>-                                }</div><div class='del'>-                                __destroy_lock (ext_l);</div><div class='del'>-                        }</div><div class='add'>+                list_for_each_entry_safe(ino_l, ino_tmp, &amp;dom-&gt;inodelk_list,</div><div class='add'>+                                         list)</div><div class='add'>+                {</div><div class='add'>+                    __delete_inode_lock(ino_l);</div><div class='add'>+                    __pl_inodelk_unref(ino_l);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='add'>+                list_splice_init(&amp;dom-&gt;blocked_inodelks, &amp;inodelks_released);</div><div class='add'>+            }</div><div class='add'>+            if (!list_empty(&amp;dom-&gt;entrylk_list)) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "Pending entry locks found, releasing.");</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry_safe (dom, dom_tmp, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='del'>-</div><div class='del'>-                        if (!list_empty (&amp;dom-&gt;inodelk_list)) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Pending inode locks found, releasing.");</div><div class='del'>-</div><div class='del'>-                                list_for_each_entry_safe (ino_l, ino_tmp, &amp;dom-&gt;inodelk_list, list) {</div><div class='del'>-                                        __delete_inode_lock (ino_l);</div><div class='del'>-                                        __pl_inodelk_unref (ino_l);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                list_splice_init (&amp;dom-&gt;blocked_inodelks, &amp;inodelks_released);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-                        }</div><div class='del'>-                        if (!list_empty (&amp;dom-&gt;entrylk_list)) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "Pending entry locks found, releasing.");</div><div class='del'>-</div><div class='del'>-                                list_for_each_entry_safe (entry_l, entry_tmp, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-                                        list_del_init (&amp;entry_l-&gt;domain_list);</div><div class='del'>-</div><div class='del'>-                                        GF_FREE ((char *)entry_l-&gt;basename);</div><div class='del'>-                                        GF_FREE (entry_l-&gt;connection_id);</div><div class='del'>-                                        GF_FREE (entry_l);</div><div class='del'>-                                }</div><div class='del'>-</div><div class='del'>-                                list_splice_init (&amp;dom-&gt;blocked_entrylks, &amp;entrylks_released);</div><div class='del'>-                        }</div><div class='add'>+                list_for_each_entry_safe(entry_l, entry_tmp, &amp;dom-&gt;entrylk_list,</div><div class='add'>+                                         domain_list)</div><div class='add'>+                {</div><div class='add'>+                    list_del_init(&amp;entry_l-&gt;domain_list);</div><div class='ctx'> </div><div class='del'>-                        list_del (&amp;dom-&gt;inode_list);</div><div class='del'>-                        gf_log ("posix-locks", GF_LOG_TRACE,</div><div class='del'>-                                " Cleaning up domain: %s", dom-&gt;domain);</div><div class='del'>-                        GF_FREE ((char *)(dom-&gt;domain));</div><div class='del'>-                        GF_FREE (dom);</div><div class='add'>+                    GF_FREE((char *)entry_l-&gt;basename);</div><div class='add'>+                    GF_FREE(entry_l-&gt;connection_id);</div><div class='add'>+                    GF_FREE(entry_l);</div><div class='ctx'>                 }</div><div class='ctx'> </div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (ext_l, ext_tmp, &amp;posixlks_released, list) {</div><div class='add'>+                list_splice_init(&amp;dom-&gt;blocked_entrylks, &amp;entrylks_released);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (lk, ext_l-&gt;frame, -1, 0,</div><div class='del'>-                                     &amp;ext_l-&gt;user_flock, NULL);</div><div class='del'>-                __destroy_lock (ext_l);</div><div class='add'>+            list_del(&amp;dom-&gt;inode_list);</div><div class='add'>+            gf_log("posix-locks", GF_LOG_TRACE, " Cleaning up domain: %s",</div><div class='add'>+                   dom-&gt;domain);</div><div class='add'>+            GF_FREE((char *)(dom-&gt;domain));</div><div class='add'>+            GF_FREE(dom);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (ino_l, ino_tmp, &amp;inodelks_released, blocked_locks) {</div><div class='add'>+    list_for_each_entry_safe(ext_l, ext_tmp, &amp;posixlks_released, list)</div><div class='add'>+    {</div><div class='add'>+        STACK_UNWIND_STRICT(lk, ext_l-&gt;frame, -1, 0, &amp;ext_l-&gt;user_flock, NULL);</div><div class='add'>+        __destroy_lock(ext_l);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (inodelk, ino_l-&gt;frame, -1, 0, NULL);</div><div class='del'>-                __pl_inodelk_unref (ino_l);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (entry_l, entry_tmp, &amp;entrylks_released, blocked_locks) {</div><div class='add'>+    list_for_each_entry_safe(ino_l, ino_tmp, &amp;inodelks_released, blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        STACK_UNWIND_STRICT(inodelk, ino_l-&gt;frame, -1, 0, NULL);</div><div class='add'>+        __pl_inodelk_unref(ino_l);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (entrylk, entry_l-&gt;frame, -1, 0, NULL);</div><div class='del'>-                GF_FREE ((char *)entry_l-&gt;basename);</div><div class='del'>-                GF_FREE (entry_l-&gt;connection_id);</div><div class='del'>-                GF_FREE (entry_l);</div><div class='del'>-</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(entry_l, entry_tmp, &amp;entrylks_released,</div><div class='add'>+                             blocked_locks)</div><div class='add'>+    {</div><div class='add'>+        STACK_UNWIND_STRICT(entrylk, entry_l-&gt;frame, -1, 0, NULL);</div><div class='add'>+        GF_FREE((char *)entry_l-&gt;basename);</div><div class='add'>+        GF_FREE(entry_l-&gt;connection_id);</div><div class='add'>+        GF_FREE(entry_l);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    pthread_mutex_destroy(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (pl_inode);</div><div class='add'>+    GF_FREE(pl_inode);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_release (xlator_t *this, fd_t *fd)</div><div class='add'>+pl_release(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t *pl_inode     = NULL;</div><div class='del'>-        uint64_t    tmp_pl_inode = 0;</div><div class='del'>-        int         ret          = -1;</div><div class='del'>-        uint64_t    tmp          = 0;</div><div class='del'>-        pl_fdctx_t *fdctx        = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    uint64_t tmp_pl_inode = 0;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t tmp = 0;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (fd-&gt;inode, this, &amp;tmp_pl_inode);</div><div class='del'>-        if (ret != 0)</div><div class='del'>-                goto clean;</div><div class='add'>+    ret = inode_ctx_get(fd-&gt;inode, this, &amp;tmp_pl_inode);</div><div class='add'>+    if (ret != 0)</div><div class='add'>+        goto clean;</div><div class='ctx'> </div><div class='del'>-        pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='add'>+    pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='ctx'> </div><div class='del'>-        pl_trace_release (this, fd);</div><div class='add'>+    pl_trace_release(this, fd);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                "Releasing all locks with fd %p", fd);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_TRACE, "Releasing all locks with fd %p", fd);</div><div class='ctx'> </div><div class='del'>-        delete_locks_of_fd (this, pl_inode, fd);</div><div class='del'>-        pl_update_refkeeper (this, fd-&gt;inode);</div><div class='add'>+    delete_locks_of_fd(this, pl_inode, fd);</div><div class='add'>+    pl_update_refkeeper(this, fd-&gt;inode);</div><div class='ctx'> </div><div class='ctx'> clean:</div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;tmp);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Could not get fdctx");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;tmp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Could not get fdctx");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fdctx = (pl_fdctx_t *)(long)tmp;</div><div class='add'>+    fdctx = (pl_fdctx_t *)(long)tmp;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (fdctx);</div><div class='add'>+    GF_FREE(fdctx);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_releasedir (xlator_t *this, fd_t *fd)</div><div class='add'>+pl_releasedir(xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        int         ret          = -1;</div><div class='del'>-        uint64_t    tmp          = 0;</div><div class='del'>-        pl_fdctx_t *fdctx        = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t tmp = 0;</div><div class='add'>+    pl_fdctx_t *fdctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = fd_ctx_del (fd, this, &amp;tmp);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Could not get fdctx");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = fd_ctx_del(fd, this, &amp;tmp);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "Could not get fdctx");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fdctx = (pl_fdctx_t *)(long)tmp;</div><div class='add'>+    fdctx = (pl_fdctx_t *)(long)tmp;</div><div class='ctx'> </div><div class='del'>-        GF_FREE (fdctx);</div><div class='add'>+    GF_FREE(fdctx);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-               struct iatt *buf, dict_t *xdata, struct iatt *postparent)</div><div class='add'>+pl_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, inode_t *inode, struct iatt *buf, dict_t *xdata,</div><div class='add'>+              struct iatt *postparent)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND (lookup, xdata, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                         xdata, postparent);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND(lookup, xdata, frame, op_ret, op_errno, inode, buf, xdata,</div><div class='add'>+                    postparent);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+pl_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='del'>-              int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='add'>+pl_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND (fstat, xdata, frame, op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND(fstat, xdata, frame, op_ret, op_errno, buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+pl_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fstat_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int op_ret, int op_errno, gf_dirent_t *entries, dict_t *xdata)</div><div class='add'>+pl_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,</div><div class='add'>+                int op_errno, gf_dirent_t *entries, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_local_t *local  = NULL;</div><div class='del'>-        gf_dirent_t *entry = NULL;</div><div class='add'>+    pl_local_t *local = NULL;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt;= 0)</div><div class='del'>-                goto unwind;</div><div class='add'>+    if (op_ret &lt;= 0)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (!local)</div><div class='del'>-                goto unwind;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto unwind;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                pl_set_xdata_response (this, local, local-&gt;fd-&gt;inode,</div><div class='del'>-                                       entry-&gt;inode, entry-&gt;d_name,</div><div class='del'>-                                       entry-&gt;dict, 0);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        pl_set_xdata_response(this, local, local-&gt;fd-&gt;inode, entry-&gt;inode,</div><div class='add'>+                              entry-&gt;d_name, entry-&gt;dict, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        PL_STACK_UNWIND (readdirp, xdata, frame, op_ret, op_errno, entries,</div><div class='del'>-                         xdata);</div><div class='add'>+    PL_STACK_UNWIND(readdirp, xdata, frame, op_ret, op_errno, entries, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-             off_t offset, dict_t *xdata)</div><div class='add'>+pl_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+            off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_readdirp_cbk,</div><div class='del'>-                    FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-                    fd, size, offset, xdata);</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> lock_migration_info_t *</div><div class='del'>-gf_mig_info_for_lock (posix_lock_t *lock)</div><div class='add'>+gf_mig_info_for_lock(posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock_migration_info_t   *new    = NULL;</div><div class='add'>+    lock_migration_info_t *new = NULL;</div><div class='ctx'> </div><div class='del'>-        new = GF_CALLOC (1, sizeof (lock_migration_info_t),</div><div class='del'>-                         gf_common_mt_lock_mig);</div><div class='del'>-        if (new == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    new = GF_CALLOC(1, sizeof(lock_migration_info_t), gf_common_mt_lock_mig);</div><div class='add'>+    if (new == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;new-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;new-&gt;list);</div><div class='ctx'> </div><div class='del'>-        posix_lock_to_flock (lock, &amp;new-&gt;flock);</div><div class='add'>+    posix_lock_to_flock(lock, &amp;new-&gt;flock);</div><div class='ctx'> </div><div class='del'>-        new-&gt;lk_flags = lock-&gt;lk_flags;</div><div class='add'>+    new-&gt;lk_flags = lock-&gt;lk_flags;</div><div class='ctx'> </div><div class='del'>-        new-&gt;client_uid = gf_strdup (lock-&gt;client_uid);</div><div class='add'>+    new-&gt;client_uid = gf_strdup(lock-&gt;client_uid);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return new;</div><div class='add'>+    return new;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fill_active_locks (pl_inode_t *pl_inode, lock_migration_info_t *lmi)</div><div class='add'>+pl_fill_active_locks(pl_inode_t *pl_inode, lock_migration_info_t *lmi)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t            *temp           = NULL;</div><div class='del'>-        lock_migration_info_t   *newlock        = NULL;</div><div class='del'>-        int                      count          = 0;</div><div class='add'>+    posix_lock_t *temp = NULL;</div><div class='add'>+    lock_migration_info_t *newlock = NULL;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (list_empty (&amp;pl_inode-&gt;ext_list)) {</div><div class='del'>-                        count = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (temp, &amp;pl_inode-&gt;ext_list, list) {</div><div class='del'>-</div><div class='del'>-                        if (temp-&gt;blocked)</div><div class='del'>-                                continue;</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (list_empty(&amp;pl_inode-&gt;ext_list)) {</div><div class='add'>+            count = 0;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        newlock = gf_mig_info_for_lock (temp);</div><div class='del'>-                        if (!newlock) {</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "lock_dup failed");</div><div class='del'>-                                count = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='add'>+        list_for_each_entry(temp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+        {</div><div class='add'>+            if (temp-&gt;blocked)</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                        list_add_tail (&amp;newlock-&gt;list, &amp;lmi-&gt;list);</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+            newlock = gf_mig_info_for_lock(temp);</div><div class='add'>+            if (!newlock) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, 0, "lock_dup failed");</div><div class='add'>+                count = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            list_add_tail(&amp;newlock-&gt;list, &amp;lmi-&gt;list);</div><div class='add'>+            count++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        return count;</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    return count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function reads only active locks */</div><div class='ctx'> static int</div><div class='del'>-pl_getactivelk (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+pl_getactivelk(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t             *pl_inode        = NULL;</div><div class='del'>-        lock_migration_info_t   locks;</div><div class='del'>-        int                     op_ret          = 0;</div><div class='del'>-        int                     op_errno        = 0;</div><div class='del'>-        int                     count           = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    lock_migration_info_t locks;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int count = 0;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;locks.list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;locks.list);</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, loc-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "pl_inode_get failed");</div><div class='add'>+    pl_inode = pl_inode_get(this, loc-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "pl_inode_get failed");</div><div class='ctx'> </div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        count = pl_fill_active_locks (pl_inode, &amp;locks);</div><div class='add'>+    count = pl_fill_active_locks(pl_inode, &amp;locks);</div><div class='ctx'> </div><div class='del'>-        op_ret = count;</div><div class='add'>+    op_ret = count;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (getactivelk, frame, op_ret, op_errno, &amp;locks,</div><div class='del'>-                             NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(getactivelk, frame, op_ret, op_errno, &amp;locks, NULL);</div><div class='ctx'> </div><div class='del'>-        gf_free_mig_locks (&amp;locks);</div><div class='add'>+    gf_free_mig_locks(&amp;locks);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_metalk_unref (pl_meta_lock_t *lock)</div><div class='add'>+pl_metalk_unref(pl_meta_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;ref--;</div><div class='del'>-        if (!lock-&gt;ref) {</div><div class='del'>-                GF_FREE (lock-&gt;client_uid);</div><div class='del'>-                GF_FREE (lock);</div><div class='del'>-        }</div><div class='add'>+    lock-&gt;ref--;</div><div class='add'>+    if (!lock-&gt;ref) {</div><div class='add'>+        GF_FREE(lock-&gt;client_uid);</div><div class='add'>+        GF_FREE(lock);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-__pl_metalk_ref (pl_meta_lock_t *lock)</div><div class='add'>+__pl_metalk_ref(pl_meta_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        lock-&gt;ref++;</div><div class='add'>+    lock-&gt;ref++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> pl_meta_lock_t *</div><div class='del'>-new_meta_lock (call_frame_t *frame, xlator_t *this)</div><div class='add'>+new_meta_lock(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        pl_meta_lock_t  *lock   = NULL;</div><div class='add'>+    pl_meta_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        lock = GF_CALLOC (1, sizeof (*lock),</div><div class='del'>-                          gf_locks_mt_pl_meta_lock_t);</div><div class='add'>+    lock = GF_CALLOC(1, sizeof(*lock), gf_locks_mt_pl_meta_lock_t);</div><div class='ctx'> </div><div class='del'>-        if (!lock) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, ENOMEM, "mem allocation"</div><div class='del'>-                        " failed for meta lock");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!lock) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, ENOMEM,</div><div class='add'>+               "mem allocation"</div><div class='add'>+               " failed for meta lock");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;list);</div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;client_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-        lock-&gt;client_uid = gf_strdup (frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='del'>-        if (!lock-&gt;client_uid) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, ENOMEM, "mem allocation"</div><div class='del'>-                        " failed for client_uid");</div><div class='del'>-                GF_FREE (lock);</div><div class='del'>-                lock = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    lock-&gt;client_uid = gf_strdup(frame-&gt;root-&gt;client-&gt;client_uid);</div><div class='add'>+    if (!lock-&gt;client_uid) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, ENOMEM,</div><div class='add'>+               "mem allocation"</div><div class='add'>+               " failed for client_uid");</div><div class='add'>+        GF_FREE(lock);</div><div class='add'>+        lock = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        __pl_metalk_ref (lock);</div><div class='add'>+    __pl_metalk_ref(lock);</div><div class='ctx'> out:</div><div class='del'>-        return lock;</div><div class='add'>+    return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_insert_metalk (pl_inode_t *pl_inode, pl_ctx_t *ctx, pl_meta_lock_t *lock)</div><div class='add'>+pl_insert_metalk(pl_inode_t *pl_inode, pl_ctx_t *ctx, pl_meta_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        int     ret = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        if (!pl_inode || !ctx || !lock) {</div><div class='del'>-                gf_msg (THIS-&gt;name, GF_LOG_INFO, 0, 0, "NULL parameter");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!pl_inode || !ctx || !lock) {</div><div class='add'>+        gf_msg(THIS-&gt;name, GF_LOG_INFO, 0, 0, "NULL parameter");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock-&gt;pl_inode = pl_inode;</div><div class='add'>+    lock-&gt;pl_inode = pl_inode;</div><div class='ctx'> </div><div class='del'>-        /* refer function pl_inode_setlk for more info for this ref.</div><div class='del'>-         * This should be unrefed on meta-unlock triggered by rebalance or</div><div class='del'>-         * in cleanup with client disconnect*/</div><div class='del'>-        /*TODO: unref this in  cleanup code for disconnect and meta-unlock*/</div><div class='del'>-        pl_inode-&gt;inode = inode_ref (pl_inode-&gt;inode);</div><div class='add'>+    /* refer function pl_inode_setlk for more info for this ref.</div><div class='add'>+     * This should be unrefed on meta-unlock triggered by rebalance or</div><div class='add'>+     * in cleanup with client disconnect*/</div><div class='add'>+    /*TODO: unref this in  cleanup code for disconnect and meta-unlock*/</div><div class='add'>+    pl_inode-&gt;inode = inode_ref(pl_inode-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        /* NOTE:In case of a client-server disconnect we need to cleanup metalk.</div><div class='del'>-         * Hence, adding the metalk to pl_ctx_t as well. The mutex lock order</div><div class='del'>-         * should always be on ctx and then on pl_inode*/</div><div class='add'>+    /* NOTE:In case of a client-server disconnect we need to cleanup metalk.</div><div class='add'>+     * Hence, adding the metalk to pl_ctx_t as well. The mutex lock order</div><div class='add'>+     * should always be on ctx and then on pl_inode*/</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'>         {</div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                       list_add_tail (&amp;lock-&gt;list, &amp;pl_inode-&gt;metalk_list);</div><div class='del'>-                }</div><div class='del'>-                pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                list_add_tail (&amp;lock-&gt;client_list, &amp;ctx-&gt;metalk_list);</div><div class='add'>+            list_add_tail(&amp;lock-&gt;list, &amp;pl_inode-&gt;metalk_list);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+        list_add_tail(&amp;lock-&gt;client_list, &amp;ctx-&gt;metalk_list);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_metalk (call_frame_t *frame, xlator_t *this, inode_t *inode)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t      *pl_inode       = NULL;</div><div class='del'>-        int              ret            = 0;</div><div class='del'>-        pl_meta_lock_t  *reqlk          = NULL;</div><div class='del'>-        pl_ctx_t        *ctx            = NULL;</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, ENOMEM,</div><div class='del'>-                        "pl_inode mem allocation failedd");</div><div class='del'>-</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;client) {</div><div class='del'>-                ctx = pl_ctx_get (frame-&gt;root-&gt;client, this);</div><div class='del'>-                if (!ctx) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "pl_ctx_get failed");</div><div class='del'>-</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_INFO, 0, 0, "frame-root-client "</div><div class='del'>-                        "is NULL");</div><div class='del'>-</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        reqlk = new_meta_lock (frame, this);</div><div class='del'>-        if (!reqlk) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = pl_insert_metalk (pl_inode, ctx, reqlk);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                pl_metalk_unref (reqlk);</div><div class='del'>-        }</div><div class='add'>+pl_metalk(call_frame_t *frame, xlator_t *this, inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    pl_meta_lock_t *reqlk = NULL;</div><div class='add'>+    pl_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, ENOMEM,</div><div class='add'>+               "pl_inode mem allocation failedd");</div><div class='add'>+</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;client) {</div><div class='add'>+        ctx = pl_ctx_get(frame-&gt;root-&gt;client, this);</div><div class='add'>+        if (!ctx) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "pl_ctx_get failed");</div><div class='add'>+</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_INFO, 0, 0,</div><div class='add'>+               "frame-root-client "</div><div class='add'>+               "is NULL");</div><div class='add'>+</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    reqlk = new_meta_lock(frame, this);</div><div class='add'>+    if (!reqlk) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = pl_insert_metalk(pl_inode, ctx, reqlk);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        pl_metalk_unref(reqlk);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__unwind_queued_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                       struct list_head *tmp_list)</div><div class='add'>+__unwind_queued_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                      struct list_head *tmp_list)</div><div class='ctx'> {</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;queued_locks))</div><div class='del'>-                return;</div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;queued_locks))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-        list_splice_init (&amp;pl_inode-&gt;queued_locks, tmp_list);</div><div class='add'>+    list_splice_init(&amp;pl_inode-&gt;queued_locks, tmp_list);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__unwind_blocked_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                        struct list_head *tmp_list)</div><div class='add'>+__unwind_blocked_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                       struct list_head *tmp_list)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t    *lock   = NULL;</div><div class='del'>-        posix_lock_t    *tmp    = NULL;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;ext_list))</div><div class='del'>-                return;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;pl_inode-&gt;ext_list, list) {</div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;ext_list))</div><div class='add'>+        return;</div><div class='ctx'> </div><div class='del'>-                if (!lock-&gt;blocking)</div><div class='del'>-                        continue;</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (!lock-&gt;blocking)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;lock-&gt;list);</div><div class='del'>-                list_add_tail (&amp;lock-&gt;list, tmp_list);</div><div class='del'>-        }</div><div class='add'>+        list_del_init(&amp;lock-&gt;list);</div><div class='add'>+        list_add_tail(&amp;lock-&gt;list, tmp_list);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_metaunlock (call_frame_t *frame, xlator_t *this, inode_t *inode,</div><div class='del'>-               dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        pl_inode_t      *pl_inode               = NULL;</div><div class='del'>-        int              ret                    = 0;</div><div class='del'>-        pl_meta_lock_t  *meta_lock              = NULL;</div><div class='del'>-        pl_meta_lock_t  *tmp_metalk             = NULL;</div><div class='del'>-        pl_ctx_t        *ctx                    = NULL;</div><div class='del'>-        posix_lock_t    *posix_lock             = NULL;</div><div class='del'>-        posix_lock_t    *tmp_posixlk            = NULL;</div><div class='del'>-        struct list_head tmp_posixlk_list;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;tmp_posixlk_list);</div><div class='del'>-</div><div class='del'>-        if (frame-&gt;root-&gt;client) {</div><div class='del'>-                ctx = pl_ctx_get (frame-&gt;root-&gt;client, this);</div><div class='del'>-                if (!ctx) {</div><div class='del'>-                        gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "pl_ctx_get failed");</div><div class='del'>-</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0, "frame-root-client is "</div><div class='del'>-                        "NULL");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pl_inode = pl_inode_get (this, inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='add'>+pl_metaunlock(call_frame_t *frame, xlator_t *this, inode_t *inode, dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+    pl_meta_lock_t *meta_lock = NULL;</div><div class='add'>+    pl_meta_lock_t *tmp_metalk = NULL;</div><div class='add'>+    pl_ctx_t *ctx = NULL;</div><div class='add'>+    posix_lock_t *posix_lock = NULL;</div><div class='add'>+    posix_lock_t *tmp_posixlk = NULL;</div><div class='add'>+    struct list_head tmp_posixlk_list;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;tmp_posixlk_list);</div><div class='add'>+</div><div class='add'>+    if (frame-&gt;root-&gt;client) {</div><div class='add'>+        ctx = pl_ctx_get(frame-&gt;root-&gt;client, this);</div><div class='add'>+        if (!ctx) {</div><div class='add'>+            gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "pl_ctx_get failed");</div><div class='add'>+</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+               "frame-root-client is "</div><div class='add'>+               "NULL");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pl_inode = pl_inode_get(this, inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'>         {</div><div class='del'>-                pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-                {</div><div class='del'>-                        /* Unwind queued locks regardless of migration status */</div><div class='del'>-                        __unwind_queued_locks (this, pl_inode,</div><div class='del'>-                                               &amp;tmp_posixlk_list);</div><div class='add'>+            /* Unwind queued locks regardless of migration status */</div><div class='add'>+            __unwind_queued_locks(this, pl_inode, &amp;tmp_posixlk_list);</div><div class='ctx'> </div><div class='del'>-                        /* Unwind blocked locks only for successful migration */</div><div class='del'>-                        if (dict_get (dict, "status")) {</div><div class='add'>+            /* Unwind blocked locks only for successful migration */</div><div class='add'>+            if (dict_get(dict, "status")) {</div><div class='add'>+                /* unwind all blocked locks */</div><div class='add'>+                __unwind_blocked_locks(this, pl_inode, &amp;tmp_posixlk_list);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-                                /* unwind all blocked locks */</div><div class='del'>-                                __unwind_blocked_locks (this, pl_inode,</div><div class='del'>-                                                        &amp;tmp_posixlk_list);</div><div class='del'>-                        }</div><div class='add'>+            /* unlock metalk */</div><div class='add'>+            /* if this list is empty then pl_inode-&gt;metalk_list</div><div class='add'>+             * should be empty too. meta lock should in all cases</div><div class='add'>+             * be added/removed from both pl_ctx_t and pl_inode */</div><div class='ctx'> </div><div class='del'>-                        /* unlock metalk */</div><div class='del'>-                        /* if this list is empty then pl_inode-&gt;metalk_list</div><div class='del'>-                         * should be empty too. meta lock should in all cases</div><div class='del'>-                         * be added/removed from both pl_ctx_t and pl_inode */</div><div class='add'>+            if (list_empty(&amp;ctx-&gt;metalk_list))</div><div class='add'>+                goto unlock;</div><div class='ctx'> </div><div class='del'>-                        if (list_empty (&amp;ctx-&gt;metalk_list))</div><div class='del'>-                               goto unlock;</div><div class='add'>+            list_for_each_entry_safe(meta_lock, tmp_metalk, &amp;ctx-&gt;metalk_list,</div><div class='add'>+                                     client_list)</div><div class='add'>+            {</div><div class='add'>+                list_del_init(&amp;meta_lock-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-                        list_for_each_entry_safe (meta_lock, tmp_metalk,</div><div class='del'>-                                                  &amp;ctx-&gt;metalk_list,</div><div class='del'>-                                                  client_list) {</div><div class='del'>-                                list_del_init (&amp;meta_lock-&gt;client_list);</div><div class='add'>+                pl_inode = meta_lock-&gt;pl_inode;</div><div class='ctx'> </div><div class='del'>-                                pl_inode = meta_lock-&gt;pl_inode;</div><div class='add'>+                list_del_init(&amp;meta_lock-&gt;list);</div><div class='ctx'> </div><div class='del'>-                                list_del_init (&amp;meta_lock-&gt;list);</div><div class='add'>+                pl_metalk_unref(meta_lock);</div><div class='ctx'> </div><div class='del'>-                                pl_metalk_unref (meta_lock);</div><div class='del'>-</div><div class='del'>-                                /* The corresponding ref is taken in</div><div class='del'>-                                 * pl_insert_metalk*/</div><div class='del'>-                                inode_unref (pl_inode-&gt;inode);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if (dict_get (dict, "status"))</div><div class='del'>-                                pl_inode-&gt;migrated = _gf_true;</div><div class='del'>-                        else</div><div class='del'>-                                pl_inode-&gt;migrated = _gf_false;</div><div class='del'>-                }</div><div class='del'>-unlock:</div><div class='del'>-</div><div class='del'>-               pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+                /* The corresponding ref is taken in</div><div class='add'>+                 * pl_insert_metalk*/</div><div class='add'>+                inode_unref(pl_inode-&gt;inode);</div><div class='add'>+            }</div><div class='ctx'> </div><div class='add'>+            if (dict_get(dict, "status"))</div><div class='add'>+                pl_inode-&gt;migrated = _gf_true;</div><div class='add'>+            else</div><div class='add'>+                pl_inode-&gt;migrated = _gf_false;</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='add'>+    unlock:</div><div class='add'>+</div><div class='add'>+        pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        list_for_each_entry_safe (posix_lock, tmp_posixlk, &amp;tmp_posixlk_list,</div><div class='del'>-                                  list) {</div><div class='del'>-                list_del_init (&amp;posix_lock-&gt;list);</div><div class='add'>+    list_for_each_entry_safe(posix_lock, tmp_posixlk, &amp;tmp_posixlk_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;posix_lock-&gt;list);</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (lk, posix_lock-&gt;frame, -1, EREMOTE,</div><div class='del'>-                                     &amp;posix_lock-&gt;user_flock, NULL);</div><div class='add'>+        STACK_UNWIND_STRICT(lk, posix_lock-&gt;frame, -1, EREMOTE,</div><div class='add'>+                            &amp;posix_lock-&gt;user_flock, NULL);</div><div class='ctx'> </div><div class='del'>-                __destroy_lock(posix_lock);</div><div class='del'>-        }</div><div class='add'>+        __destroy_lock(posix_lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (setxattr, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(setxattr, xdata, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_setxattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             loc_t *loc, dict_t *dict, int flags, dict_t *xdata)</div><div class='add'>+pl_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+            int flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int             op_ret          = 0;</div><div class='del'>-        int             op_errno        = 0;</div><div class='del'>-        dict_t          *xdata_rsp      = NULL;</div><div class='del'>-</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    dict_t *xdata_rsp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (dict_get (dict, GF_META_LOCK_KEY)) {</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='ctx'> </div><div class='del'>-                op_ret = pl_metalk (frame, this, loc-&gt;inode);</div><div class='add'>+    if (dict_get(dict, GF_META_LOCK_KEY)) {</div><div class='add'>+        op_ret = pl_metalk(frame, this, loc-&gt;inode);</div><div class='ctx'> </div><div class='del'>-        } else if (dict_get (dict, GF_META_UNLOCK_KEY)) {</div><div class='add'>+    } else if (dict_get(dict, GF_META_UNLOCK_KEY)) {</div><div class='add'>+        op_ret = pl_metaunlock(frame, this, loc-&gt;inode, dict);</div><div class='ctx'> </div><div class='del'>-                op_ret = pl_metaunlock (frame, this, loc-&gt;inode, dict);</div><div class='add'>+    } else {</div><div class='add'>+        goto usual;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        } else {</div><div class='del'>-                goto usual;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (setxattr, xdata_rsp, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata_rsp);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(setxattr, xdata_rsp, frame, op_ret, op_errno,</div><div class='add'>+                               xdata_rsp);</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> usual:</div><div class='del'>-        STACK_WIND (frame, pl_setxattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;setxattr,</div><div class='del'>-                    loc, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-pl_dump_lock (char *str, int size, struct gf_flock *flock,</div><div class='del'>-              gf_lkowner_t *owner, void *trans, char *conn_id,</div><div class='del'>-              time_t *granted_time, time_t *blkd_time, gf_boolean_t active)</div><div class='del'>-{</div><div class='del'>-        char  *type_str    = NULL;</div><div class='del'>-        char   granted[256] = {0,};</div><div class='del'>-        char   blocked[256] = {0,};</div><div class='del'>-</div><div class='del'>-        if (granted_time)</div><div class='del'>-                gf_time_fmt (granted, sizeof (granted), *granted_time,</div><div class='del'>-                             gf_timefmt_FT);</div><div class='del'>-        if (blkd_time)</div><div class='del'>-                gf_time_fmt (blocked, sizeof (blocked), *blkd_time,</div><div class='del'>-                             gf_timefmt_FT);</div><div class='del'>-        switch (flock-&gt;l_type) {</div><div class='add'>+pl_dump_lock(char *str, int size, struct gf_flock *flock, gf_lkowner_t *owner,</div><div class='add'>+             void *trans, char *conn_id, time_t *granted_time,</div><div class='add'>+             time_t *blkd_time, gf_boolean_t active)</div><div class='add'>+{</div><div class='add'>+    char *type_str = NULL;</div><div class='add'>+    char granted[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char blocked[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (granted_time)</div><div class='add'>+        gf_time_fmt(granted, sizeof(granted), *granted_time, gf_timefmt_FT);</div><div class='add'>+    if (blkd_time)</div><div class='add'>+        gf_time_fmt(blocked, sizeof(blocked), *blkd_time, gf_timefmt_FT);</div><div class='add'>+    switch (flock-&gt;l_type) {</div><div class='ctx'>         case F_RDLCK:</div><div class='del'>-                type_str = "READ";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "READ";</div><div class='add'>+            break;</div><div class='ctx'>         case F_WRLCK:</div><div class='del'>-                type_str = "WRITE";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "WRITE";</div><div class='add'>+            break;</div><div class='ctx'>         case F_UNLCK:</div><div class='del'>-                type_str = "UNLOCK";</div><div class='del'>-                break;</div><div class='add'>+            type_str = "UNLOCK";</div><div class='add'>+            break;</div><div class='ctx'>         default:</div><div class='del'>-                type_str = "UNKNOWN";</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (active) {</div><div class='del'>-                if (blkd_time &amp;&amp; *blkd_time == 0) {</div><div class='del'>-                        snprintf (str, size, RANGE_GRNTD_FMT,</div><div class='del'>-                                  type_str, flock-&gt;l_whence,</div><div class='del'>-                                  (unsigned long long) flock-&gt;l_start,</div><div class='del'>-                                  (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                                  (unsigned long long) flock-&gt;l_pid,</div><div class='del'>-                                  lkowner_utoa (owner), trans, conn_id,</div><div class='del'>-                                  granted);</div><div class='del'>-                } else {</div><div class='del'>-                        snprintf (str, size, RANGE_BLKD_GRNTD_FMT,</div><div class='del'>-                                  type_str, flock-&gt;l_whence,</div><div class='del'>-                                  (unsigned long long) flock-&gt;l_start,</div><div class='del'>-                                  (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                                  (unsigned long long) flock-&gt;l_pid,</div><div class='del'>-                                  lkowner_utoa (owner), trans, conn_id,</div><div class='del'>-                                  blocked, granted);</div><div class='del'>-                }</div><div class='add'>+            type_str = "UNKNOWN";</div><div class='add'>+            break;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (active) {</div><div class='add'>+        if (blkd_time &amp;&amp; *blkd_time == 0) {</div><div class='add'>+            snprintf(str, size, RANGE_GRNTD_FMT, type_str, flock-&gt;l_whence,</div><div class='add'>+                     (unsigned long long)flock-&gt;l_start,</div><div class='add'>+                     (unsigned long long)flock-&gt;l_len,</div><div class='add'>+                     (unsigned long long)flock-&gt;l_pid, lkowner_utoa(owner),</div><div class='add'>+                     trans, conn_id, granted);</div><div class='ctx'>         } else {</div><div class='del'>-                snprintf (str, size, RANGE_BLKD_FMT,</div><div class='del'>-                          type_str, flock-&gt;l_whence,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_start,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_len,</div><div class='del'>-                          (unsigned long long) flock-&gt;l_pid,</div><div class='del'>-                          lkowner_utoa (owner), trans, conn_id, blocked);</div><div class='add'>+            snprintf(str, size, RANGE_BLKD_GRNTD_FMT, type_str, flock-&gt;l_whence,</div><div class='add'>+                     (unsigned long long)flock-&gt;l_start,</div><div class='add'>+                     (unsigned long long)flock-&gt;l_len,</div><div class='add'>+                     (unsigned long long)flock-&gt;l_pid, lkowner_utoa(owner),</div><div class='add'>+                     trans, conn_id, blocked, granted);</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    } else {</div><div class='add'>+        snprintf(str, size, RANGE_BLKD_FMT, type_str, flock-&gt;l_whence,</div><div class='add'>+                 (unsigned long long)flock-&gt;l_start,</div><div class='add'>+                 (unsigned long long)flock-&gt;l_len,</div><div class='add'>+                 (unsigned long long)flock-&gt;l_pid, lkowner_utoa(owner), trans,</div><div class='add'>+                 conn_id, blocked);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__dump_entrylks (pl_inode_t *pl_inode)</div><div class='del'>-{</div><div class='del'>-        pl_dom_list_t   *dom  = NULL;</div><div class='del'>-        pl_entry_lock_t *lock = NULL;</div><div class='del'>-        char             blocked[256] = {0,};</div><div class='del'>-        char             granted[256] = {0,};</div><div class='del'>-        int              count = 0;</div><div class='del'>-        char             key[GF_DUMP_MAX_BUF_LEN] = {0,};</div><div class='del'>-        char            *k = "xlator.feature.locks.lock-dump.domain.entrylk";</div><div class='del'>-</div><div class='del'>-        char tmp[4098];</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (dom, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='del'>-</div><div class='del'>-                count = 0;</div><div class='del'>-</div><div class='del'>-                gf_proc_dump_build_key(key,</div><div class='del'>-                                       "lock-dump.domain",</div><div class='del'>-                                       "domain");</div><div class='del'>-                gf_proc_dump_write(key, "%s", dom-&gt;domain);</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (lock, &amp;dom-&gt;entrylk_list, domain_list) {</div><div class='del'>-</div><div class='del'>-                        gf_time_fmt (granted, sizeof (granted),</div><div class='del'>-                                     lock-&gt;granted_time.tv_sec, gf_timefmt_FT);</div><div class='del'>-                        gf_proc_dump_build_key(key, k,</div><div class='del'>-                                               "entrylk[%d](ACTIVE)", count );</div><div class='del'>-                        if (lock-&gt;blkd_time.tv_sec == 0) {</div><div class='del'>-                                snprintf (tmp, sizeof (tmp), ENTRY_GRNTD_FMT,</div><div class='del'>-                                          lock-&gt;type == ENTRYLK_RDLCK ?</div><div class='del'>-                                          "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK",</div><div class='del'>-                                          lock-&gt;basename,</div><div class='del'>-                                          (unsigned long long) lock-&gt;client_pid,</div><div class='del'>-                                          lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                          lock-&gt;client,</div><div class='del'>-                                          lock-&gt;connection_id, granted);</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_time_fmt (blocked, sizeof (blocked),</div><div class='del'>-                                             lock-&gt;blkd_time.tv_sec,</div><div class='del'>-                                             gf_timefmt_FT);</div><div class='del'>-                                snprintf (tmp, sizeof (tmp),</div><div class='del'>-                                          ENTRY_BLKD_GRNTD_FMT,</div><div class='del'>-                                          lock-&gt;type == ENTRYLK_RDLCK ?</div><div class='del'>-                                          "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK",</div><div class='del'>-                                          lock-&gt;basename,</div><div class='del'>-                                          (unsigned long long) lock-&gt;client_pid,</div><div class='del'>-                                          lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                          lock-&gt;client,</div><div class='del'>-                                          lock-&gt;connection_id,</div><div class='del'>-                                          blocked, granted);</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        gf_proc_dump_write(key, tmp);</div><div class='del'>-</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (lock, &amp;dom-&gt;blocked_entrylks,</div><div class='del'>-                                     blocked_locks) {</div><div class='del'>-</div><div class='del'>-                        gf_time_fmt (blocked, sizeof (blocked),</div><div class='del'>-                                     lock-&gt;blkd_time.tv_sec, gf_timefmt_FT);</div><div class='add'>+__dump_entrylks(pl_inode_t *pl_inode)</div><div class='add'>+{</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_entry_lock_t *lock = NULL;</div><div class='add'>+    char blocked[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char granted[256] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int count = 0;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *k = "xlator.feature.locks.lock-dump.domain.entrylk";</div><div class='add'>+</div><div class='add'>+    char tmp[4098];</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(dom, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        count = 0;</div><div class='add'>+</div><div class='add'>+        gf_proc_dump_build_key(key, "lock-dump.domain", "domain");</div><div class='add'>+        gf_proc_dump_write(key, "%s", dom-&gt;domain);</div><div class='add'>+</div><div class='add'>+        list_for_each_entry(lock, &amp;dom-&gt;entrylk_list, domain_list)</div><div class='add'>+        {</div><div class='add'>+            gf_time_fmt(granted, sizeof(granted), lock-&gt;granted_time.tv_sec,</div><div class='add'>+                        gf_timefmt_FT);</div><div class='add'>+            gf_proc_dump_build_key(key, k, "entrylk[%d](ACTIVE)", count);</div><div class='add'>+            if (lock-&gt;blkd_time.tv_sec == 0) {</div><div class='add'>+                snprintf(tmp, sizeof(tmp), ENTRY_GRNTD_FMT,</div><div class='add'>+                         lock-&gt;type == ENTRYLK_RDLCK ? "ENTRYLK_RDLCK"</div><div class='add'>+                                                     : "ENTRYLK_WRLCK",</div><div class='add'>+                         lock-&gt;basename, (unsigned long long)lock-&gt;client_pid,</div><div class='add'>+                         lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;client,</div><div class='add'>+                         lock-&gt;connection_id, granted);</div><div class='add'>+            } else {</div><div class='add'>+                gf_time_fmt(blocked, sizeof(blocked), lock-&gt;blkd_time.tv_sec,</div><div class='add'>+                            gf_timefmt_FT);</div><div class='add'>+                snprintf(tmp, sizeof(tmp), ENTRY_BLKD_GRNTD_FMT,</div><div class='add'>+                         lock-&gt;type == ENTRYLK_RDLCK ? "ENTRYLK_RDLCK"</div><div class='add'>+                                                     : "ENTRYLK_WRLCK",</div><div class='add'>+                         lock-&gt;basename, (unsigned long long)lock-&gt;client_pid,</div><div class='add'>+                         lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;client,</div><div class='add'>+                         lock-&gt;connection_id, blocked, granted);</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            gf_proc_dump_write(key, tmp);</div><div class='add'>+</div><div class='add'>+            count++;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        list_for_each_entry(lock, &amp;dom-&gt;blocked_entrylks, blocked_locks)</div><div class='add'>+        {</div><div class='add'>+            gf_time_fmt(blocked, sizeof(blocked), lock-&gt;blkd_time.tv_sec,</div><div class='add'>+                        gf_timefmt_FT);</div><div class='ctx'> </div><div class='del'>-                        gf_proc_dump_build_key(key, k,</div><div class='del'>-                                               "entrylk[%d](BLOCKED)", count );</div><div class='del'>-                        snprintf (tmp, sizeof (tmp), ENTRY_BLKD_FMT,</div><div class='del'>-                                  lock-&gt;type == ENTRYLK_RDLCK ?</div><div class='del'>-                                  "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK",</div><div class='del'>-                                  lock-&gt;basename,</div><div class='del'>-                                  (unsigned long long) lock-&gt;client_pid,</div><div class='del'>-                                  lkowner_utoa (&amp;lock-&gt;owner), lock-&gt;client,</div><div class='del'>-                                  lock-&gt;connection_id, blocked);</div><div class='add'>+            gf_proc_dump_build_key(key, k, "entrylk[%d](BLOCKED)", count);</div><div class='add'>+            snprintf(</div><div class='add'>+                tmp, sizeof(tmp), ENTRY_BLKD_FMT,</div><div class='add'>+                lock-&gt;type == ENTRYLK_RDLCK ? "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK",</div><div class='add'>+                lock-&gt;basename, (unsigned long long)lock-&gt;client_pid,</div><div class='add'>+                lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;client, lock-&gt;connection_id,</div><div class='add'>+                blocked);</div><div class='ctx'> </div><div class='del'>-                        gf_proc_dump_write(key, tmp);</div><div class='del'>-</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+            gf_proc_dump_write(key, tmp);</div><div class='ctx'> </div><div class='add'>+            count++;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dump_entrylks (pl_inode_t *pl_inode)</div><div class='add'>+dump_entrylks(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __dump_entrylks (pl_inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __dump_entrylks(pl_inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__dump_inodelks (pl_inode_t *pl_inode)</div><div class='add'>+__dump_inodelks(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        pl_dom_list_t   *dom  = NULL;</div><div class='del'>-        pl_inode_lock_t *lock = NULL;</div><div class='del'>-        int             count = 0;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-</div><div class='del'>-        char tmp[4098];</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (dom, &amp;pl_inode-&gt;dom_list, inode_list) {</div><div class='add'>+    pl_dom_list_t *dom = NULL;</div><div class='add'>+    pl_inode_lock_t *lock = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='ctx'> </div><div class='del'>-                count = 0;</div><div class='add'>+    char tmp[4098];</div><div class='ctx'> </div><div class='del'>-                gf_proc_dump_build_key(key,</div><div class='del'>-                                       "lock-dump.domain",</div><div class='del'>-                                       "domain");</div><div class='del'>-                gf_proc_dump_write(key, "%s", dom-&gt;domain);</div><div class='add'>+    list_for_each_entry(dom, &amp;pl_inode-&gt;dom_list, inode_list)</div><div class='add'>+    {</div><div class='add'>+        count = 0;</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry (lock, &amp;dom-&gt;inodelk_list, list) {</div><div class='add'>+        gf_proc_dump_build_key(key, "lock-dump.domain", "domain");</div><div class='add'>+        gf_proc_dump_write(key, "%s", dom-&gt;domain);</div><div class='ctx'> </div><div class='del'>-                        gf_proc_dump_build_key(key,</div><div class='del'>-                                               "inodelk",</div><div class='del'>-                                               "inodelk[%d](ACTIVE)",count );</div><div class='del'>-</div><div class='del'>-                        SET_FLOCK_PID (&amp;lock-&gt;user_flock, lock);</div><div class='del'>-                        pl_dump_lock (tmp, sizeof (tmp), &amp;lock-&gt;user_flock,</div><div class='del'>-                                      &amp;lock-&gt;owner,</div><div class='del'>-                                      lock-&gt;client, lock-&gt;connection_id,</div><div class='del'>-                                      &amp;lock-&gt;granted_time.tv_sec,</div><div class='del'>-                                      &amp;lock-&gt;blkd_time.tv_sec,</div><div class='del'>-                                      _gf_true);</div><div class='del'>-                        gf_proc_dump_write(key, tmp);</div><div class='del'>-</div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+        list_for_each_entry(lock, &amp;dom-&gt;inodelk_list, list)</div><div class='add'>+        {</div><div class='add'>+            gf_proc_dump_build_key(key, "inodelk", "inodelk[%d](ACTIVE)",</div><div class='add'>+                                   count);</div><div class='ctx'> </div><div class='del'>-                list_for_each_entry (lock, &amp;dom-&gt;blocked_inodelks, blocked_locks) {</div><div class='add'>+            SET_FLOCK_PID(&amp;lock-&gt;user_flock, lock);</div><div class='add'>+            pl_dump_lock(tmp, sizeof(tmp), &amp;lock-&gt;user_flock, &amp;lock-&gt;owner,</div><div class='add'>+                         lock-&gt;client, lock-&gt;connection_id,</div><div class='add'>+                         &amp;lock-&gt;granted_time.tv_sec, &amp;lock-&gt;blkd_time.tv_sec,</div><div class='add'>+                         _gf_true);</div><div class='add'>+            gf_proc_dump_write(key, tmp);</div><div class='ctx'> </div><div class='del'>-                        gf_proc_dump_build_key(key,</div><div class='del'>-                                               "inodelk",</div><div class='del'>-                                               "inodelk[%d](BLOCKED)",count );</div><div class='del'>-                        SET_FLOCK_PID (&amp;lock-&gt;user_flock, lock);</div><div class='del'>-                        pl_dump_lock (tmp, sizeof (tmp), &amp;lock-&gt;user_flock,</div><div class='del'>-                                      &amp;lock-&gt;owner,</div><div class='del'>-                                      lock-&gt;client, lock-&gt;connection_id,</div><div class='del'>-                                      0, &amp;lock-&gt;blkd_time.tv_sec,</div><div class='del'>-                                      _gf_false);</div><div class='del'>-                        gf_proc_dump_write(key, tmp);</div><div class='add'>+            count++;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        count++;</div><div class='del'>-                }</div><div class='add'>+        list_for_each_entry(lock, &amp;dom-&gt;blocked_inodelks, blocked_locks)</div><div class='add'>+        {</div><div class='add'>+            gf_proc_dump_build_key(key, "inodelk", "inodelk[%d](BLOCKED)",</div><div class='add'>+                                   count);</div><div class='add'>+            SET_FLOCK_PID(&amp;lock-&gt;user_flock, lock);</div><div class='add'>+            pl_dump_lock(tmp, sizeof(tmp), &amp;lock-&gt;user_flock, &amp;lock-&gt;owner,</div><div class='add'>+                         lock-&gt;client, lock-&gt;connection_id, 0,</div><div class='add'>+                         &amp;lock-&gt;blkd_time.tv_sec, _gf_false);</div><div class='add'>+            gf_proc_dump_write(key, tmp);</div><div class='ctx'> </div><div class='add'>+            count++;</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dump_inodelks (pl_inode_t *pl_inode)</div><div class='add'>+dump_inodelks(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __dump_inodelks (pl_inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __dump_inodelks(pl_inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-__dump_posixlks (pl_inode_t *pl_inode)</div><div class='add'>+__dump_posixlks(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t    *lock = NULL;</div><div class='del'>-        int             count = 0;</div><div class='del'>-        char            key[GF_DUMP_MAX_BUF_LEN];</div><div class='del'>-</div><div class='del'>-        char tmp[4098];</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='add'>+    int count = 0;</div><div class='add'>+    char key[GF_DUMP_MAX_BUF_LEN];</div><div class='ctx'> </div><div class='del'>-      list_for_each_entry (lock, &amp;pl_inode-&gt;ext_list, list) {</div><div class='add'>+    char tmp[4098];</div><div class='ctx'> </div><div class='del'>-              SET_FLOCK_PID (&amp;lock-&gt;user_flock, lock);</div><div class='del'>-              gf_proc_dump_build_key(key,</div><div class='del'>-                                     "posixlk",</div><div class='del'>-                                     "posixlk[%d](%s)",</div><div class='del'>-                                     count,</div><div class='del'>-                                     lock-&gt;blocked ? "BLOCKED" : "ACTIVE");</div><div class='del'>-              pl_dump_lock (tmp, sizeof (tmp), &amp;lock-&gt;user_flock,</div><div class='del'>-                            &amp;lock-&gt;owner, lock-&gt;client, NULL,</div><div class='del'>-                            &amp;lock-&gt;granted_time.tv_sec, &amp;lock-&gt;blkd_time.tv_sec,</div><div class='del'>-                            (lock-&gt;blocked)? _gf_false: _gf_true);</div><div class='del'>-              gf_proc_dump_write(key, tmp);</div><div class='add'>+    list_for_each_entry(lock, &amp;pl_inode-&gt;ext_list, list)</div><div class='add'>+    {</div><div class='add'>+        SET_FLOCK_PID(&amp;lock-&gt;user_flock, lock);</div><div class='add'>+        gf_proc_dump_build_key(key, "posixlk", "posixlk[%d](%s)", count,</div><div class='add'>+                               lock-&gt;blocked ? "BLOCKED" : "ACTIVE");</div><div class='add'>+        pl_dump_lock(tmp, sizeof(tmp), &amp;lock-&gt;user_flock, &amp;lock-&gt;owner,</div><div class='add'>+                     lock-&gt;client, NULL, &amp;lock-&gt;granted_time.tv_sec,</div><div class='add'>+                     &amp;lock-&gt;blkd_time.tv_sec,</div><div class='add'>+                     (lock-&gt;blocked) ? _gf_false : _gf_true);</div><div class='add'>+        gf_proc_dump_write(key, tmp);</div><div class='ctx'> </div><div class='del'>-              count++;</div><div class='del'>-        }</div><div class='add'>+        count++;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-dump_posixlks (pl_inode_t *pl_inode)</div><div class='add'>+dump_posixlks(pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __dump_posixlks (pl_inode);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __dump_posixlks(pl_inode);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_dump_inode_priv (xlator_t *this, inode_t *inode)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-        int             ret = -1;</div><div class='del'>-        uint64_t        tmp_pl_inode = 0;</div><div class='del'>-        pl_inode_t      *pl_inode = NULL;</div><div class='del'>-        char            *pathname = NULL;</div><div class='del'>-        gf_boolean_t    section_added = _gf_false;</div><div class='del'>-</div><div class='del'>-        int count      = 0;</div><div class='del'>-</div><div class='del'>-        if (!inode) {</div><div class='del'>-                errno = EINVAL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = TRY_LOCK (&amp;inode-&gt;lock);</div><div class='add'>+pl_dump_inode_priv(xlator_t *this, inode_t *inode)</div><div class='add'>+{</div><div class='add'>+    int ret = -1;</div><div class='add'>+    uint64_t tmp_pl_inode = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    char *pathname = NULL;</div><div class='add'>+    gf_boolean_t section_added = _gf_false;</div><div class='add'>+</div><div class='add'>+    int count = 0;</div><div class='add'>+</div><div class='add'>+    if (!inode) {</div><div class='add'>+        errno = EINVAL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = TRY_LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;tmp_pl_inode);</div><div class='ctx'>         if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get (inode, this, &amp;tmp_pl_inode);</div><div class='del'>-                if (ret)</div><div class='del'>-                        goto unlock;</div><div class='del'>-        }</div><div class='add'>+            goto unlock;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    pl_inode = (pl_inode_t *)(long)tmp_pl_inode;</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_add_section("xlator.features.locks.%s.inode", this-&gt;name);</div><div class='del'>-        section_added = _gf_true;</div><div class='add'>+    gf_proc_dump_add_section("xlator.features.locks.%s.inode", this-&gt;name);</div><div class='add'>+    section_added = _gf_true;</div><div class='ctx'> </div><div class='del'>-        /*We are safe to call __inode_path since we have the</div><div class='del'>-         * inode-&gt;table-&gt;lock */</div><div class='del'>-        __inode_path (inode, NULL, &amp;pathname);</div><div class='del'>-        if (pathname)</div><div class='del'>-                gf_proc_dump_write ("path", "%s", pathname);</div><div class='add'>+    /*We are safe to call __inode_path since we have the</div><div class='add'>+     * inode-&gt;table-&gt;lock */</div><div class='add'>+    __inode_path(inode, NULL, &amp;pathname);</div><div class='add'>+    if (pathname)</div><div class='add'>+        gf_proc_dump_write("path", "%s", pathname);</div><div class='ctx'> </div><div class='del'>-        gf_proc_dump_write("mandatory", "%d", pl_inode-&gt;mandatory);</div><div class='add'>+    gf_proc_dump_write("mandatory", "%d", pl_inode-&gt;mandatory);</div><div class='ctx'> </div><div class='del'>-        ret = pthread_mutex_trylock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        if (ret)</div><div class='del'>-                goto out;</div><div class='del'>-        {</div><div class='del'>-                count = __get_entrylk_count (this, pl_inode);</div><div class='del'>-                if (count) {</div><div class='del'>-                        gf_proc_dump_write("entrylk-count", "%d", count);</div><div class='del'>-                        __dump_entrylks (pl_inode);</div><div class='del'>-                }</div><div class='add'>+    ret = pthread_mutex_trylock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    if (ret)</div><div class='add'>+        goto out;</div><div class='add'>+    {</div><div class='add'>+        count = __get_entrylk_count(this, pl_inode);</div><div class='add'>+        if (count) {</div><div class='add'>+            gf_proc_dump_write("entrylk-count", "%d", count);</div><div class='add'>+            __dump_entrylks(pl_inode);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                count = __get_inodelk_count (this, pl_inode, NULL);</div><div class='del'>-                if (count) {</div><div class='del'>-                        gf_proc_dump_write("inodelk-count", "%d", count);</div><div class='del'>-                        __dump_inodelks (pl_inode);</div><div class='del'>-                }</div><div class='add'>+        count = __get_inodelk_count(this, pl_inode, NULL);</div><div class='add'>+        if (count) {</div><div class='add'>+            gf_proc_dump_write("inodelk-count", "%d", count);</div><div class='add'>+            __dump_inodelks(pl_inode);</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                count = __get_posixlk_count (this, pl_inode);</div><div class='del'>-                if (count) {</div><div class='del'>-                        gf_proc_dump_write("posixlk-count", "%d", count);</div><div class='del'>-                        __dump_posixlks (pl_inode);</div><div class='del'>-                }</div><div class='add'>+        count = __get_posixlk_count(this, pl_inode);</div><div class='add'>+        if (count) {</div><div class='add'>+            gf_proc_dump_write("posixlk-count", "%d", count);</div><div class='add'>+            __dump_posixlks(pl_inode);</div><div class='ctx'>         }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        GF_FREE (pathname);</div><div class='del'>-</div><div class='del'>-        if (ret &amp;&amp; inode) {</div><div class='del'>-                if (!section_added)</div><div class='del'>-                        gf_proc_dump_add_section ("xlator.features.locks.%s."</div><div class='del'>-                                                  "inode", this-&gt;name);</div><div class='del'>-                gf_proc_dump_write ("Unable to print lock state", "(Lock "</div><div class='del'>-                                    "acquisition failure) %s",</div><div class='del'>-                                    uuid_utoa (inode-&gt;gfid));</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    GF_FREE(pathname);</div><div class='add'>+</div><div class='add'>+    if (ret &amp;&amp; inode) {</div><div class='add'>+        if (!section_added)</div><div class='add'>+            gf_proc_dump_add_section(</div><div class='add'>+                "xlator.features.locks.%s."</div><div class='add'>+                "inode",</div><div class='add'>+                this-&gt;name);</div><div class='add'>+        gf_proc_dump_write("Unable to print lock state",</div><div class='add'>+                           "(Lock "</div><div class='add'>+                           "acquisition failure) %s",</div><div class='add'>+                           uuid_utoa(inode-&gt;gfid));</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_locks_mt_end + 1);</div><div class='del'>-</div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                                "failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_locks_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               "failed");</div><div class='ctx'>         return ret;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-pl_ctx_t*</div><div class='del'>-pl_ctx_get (client_t *client, xlator_t *xlator)</div><div class='add'>+pl_ctx_t *</div><div class='add'>+pl_ctx_get(client_t *client, xlator_t *xlator)</div><div class='ctx'> {</div><div class='del'>-        void *tmp = NULL;</div><div class='del'>-        pl_ctx_t *ctx = NULL;</div><div class='del'>-        pl_ctx_t *setted_ctx = NULL;</div><div class='add'>+    void *tmp = NULL;</div><div class='add'>+    pl_ctx_t *ctx = NULL;</div><div class='add'>+    pl_ctx_t *setted_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        client_ctx_get (client, xlator, &amp;tmp);</div><div class='add'>+    client_ctx_get(client, xlator, &amp;tmp);</div><div class='ctx'> </div><div class='del'>-        ctx = tmp;</div><div class='add'>+    ctx = tmp;</div><div class='ctx'> </div><div class='del'>-        if (ctx != NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ctx != NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ctx = GF_CALLOC (1, sizeof (pl_ctx_t), gf_locks_mt_posix_lock_t);</div><div class='add'>+    ctx = GF_CALLOC(1, sizeof(pl_ctx_t), gf_locks_mt_posix_lock_t);</div><div class='ctx'> </div><div class='del'>-        if (ctx == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ctx == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_init (&amp;ctx-&gt;lock, NULL);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;inodelk_lockers);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;entrylk_lockers);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;metalk_list);</div><div class='add'>+    pthread_mutex_init(&amp;ctx-&gt;lock, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;inodelk_lockers);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;entrylk_lockers);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;metalk_list);</div><div class='ctx'> </div><div class='del'>-        setted_ctx = client_ctx_set (client, xlator, ctx);</div><div class='del'>-        if (ctx != setted_ctx) {</div><div class='del'>-                pthread_mutex_destroy (&amp;ctx-&gt;lock);</div><div class='del'>-                GF_FREE (ctx);</div><div class='del'>-                ctx = setted_ctx;</div><div class='del'>-        }</div><div class='add'>+    setted_ctx = client_ctx_set(client, xlator, ctx);</div><div class='add'>+    if (ctx != setted_ctx) {</div><div class='add'>+        pthread_mutex_destroy(&amp;ctx-&gt;lock);</div><div class='add'>+        GF_FREE(ctx);</div><div class='add'>+        ctx = setted_ctx;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_metalk_client_cleanup (xlator_t *this, pl_ctx_t *ctx)</div><div class='del'>-{</div><div class='del'>-        pl_meta_lock_t  *meta_lock              = NULL;</div><div class='del'>-        pl_meta_lock_t  *tmp_metalk             = NULL;</div><div class='del'>-        pl_inode_t      *pl_inode               = NULL;</div><div class='del'>-        posix_lock_t    *posix_lock             = NULL;</div><div class='del'>-        posix_lock_t    *tmp_posixlk            = NULL;</div><div class='del'>-        struct list_head tmp_posixlk_list;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;tmp_posixlk_list);</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;ctx-&gt;lock);</div><div class='add'>+pl_metalk_client_cleanup(xlator_t *this, pl_ctx_t *ctx)</div><div class='add'>+{</div><div class='add'>+    pl_meta_lock_t *meta_lock = NULL;</div><div class='add'>+    pl_meta_lock_t *tmp_metalk = NULL;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    posix_lock_t *posix_lock = NULL;</div><div class='add'>+    posix_lock_t *tmp_posixlk = NULL;</div><div class='add'>+    struct list_head tmp_posixlk_list;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;tmp_posixlk_list);</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        /* if this list is empty then pl_inode-&gt;metalk_list should be</div><div class='add'>+         * empty too. meta lock should in all cases be added/removed</div><div class='add'>+         * from both pl_ctx_t and pl_inode */</div><div class='add'>+        if (list_empty(&amp;ctx-&gt;metalk_list))</div><div class='add'>+            goto unlock;</div><div class='add'>+</div><div class='add'>+        list_for_each_entry_safe(meta_lock, tmp_metalk, &amp;ctx-&gt;metalk_list,</div><div class='add'>+                                 client_list)</div><div class='ctx'>         {</div><div class='add'>+            list_del_init(&amp;meta_lock-&gt;client_list);</div><div class='ctx'> </div><div class='del'>-                /* if this list is empty then pl_inode-&gt;metalk_list should be</div><div class='del'>-                 * empty too. meta lock should in all cases be added/removed</div><div class='del'>-                 * from both pl_ctx_t and pl_inode */</div><div class='del'>-                if (list_empty (&amp;ctx-&gt;metalk_list))</div><div class='del'>-                       goto unlock;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry_safe (meta_lock, tmp_metalk,</div><div class='del'>-                                          &amp;ctx-&gt;metalk_list, client_list) {</div><div class='del'>-                        list_del_init (&amp;meta_lock-&gt;client_list);</div><div class='del'>-</div><div class='del'>-                        pl_inode = meta_lock-&gt;pl_inode;</div><div class='del'>-</div><div class='del'>-                        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+            pl_inode = meta_lock-&gt;pl_inode;</div><div class='ctx'> </div><div class='del'>-                        {</div><div class='add'>+            pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                                /* Since the migration status is unknown here</div><div class='del'>-                                 * unwind all queued and blocked locks to check</div><div class='del'>-                                 * migration status and find the correct</div><div class='del'>-                                 * destination */</div><div class='del'>-                                __unwind_queued_locks (this, pl_inode,</div><div class='del'>-                                                       &amp;tmp_posixlk_list);</div><div class='add'>+            {</div><div class='add'>+                /* Since the migration status is unknown here</div><div class='add'>+                 * unwind all queued and blocked locks to check</div><div class='add'>+                 * migration status and find the correct</div><div class='add'>+                 * destination */</div><div class='add'>+                __unwind_queued_locks(this, pl_inode, &amp;tmp_posixlk_list);</div><div class='ctx'> </div><div class='del'>-                                __unwind_blocked_locks (this, pl_inode,</div><div class='del'>-                                                        &amp;tmp_posixlk_list);</div><div class='add'>+                __unwind_blocked_locks(this, pl_inode, &amp;tmp_posixlk_list);</div><div class='ctx'> </div><div class='del'>-                                list_del_init (&amp;meta_lock-&gt;list);</div><div class='add'>+                list_del_init(&amp;meta_lock-&gt;list);</div><div class='ctx'> </div><div class='del'>-                                pl_metalk_unref (meta_lock);</div><div class='add'>+                pl_metalk_unref(meta_lock);</div><div class='add'>+            }</div><div class='add'>+            pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-                        }</div><div class='del'>-                        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-                        /* The corresponding ref is taken in</div><div class='del'>-                         * pl_insert_metalk*/</div><div class='del'>-                        inode_unref (pl_inode-&gt;inode);</div><div class='del'>-                }</div><div class='add'>+            /* The corresponding ref is taken in</div><div class='add'>+             * pl_insert_metalk*/</div><div class='add'>+            inode_unref(pl_inode-&gt;inode);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;ctx-&gt;lock);</div><div class='add'>+    pthread_mutex_unlock(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (posix_lock, tmp_posixlk, &amp;tmp_posixlk_list,</div><div class='del'>-                                  list) {</div><div class='del'>-                list_del_init (&amp;posix_lock-&gt;list);</div><div class='add'>+    list_for_each_entry_safe(posix_lock, tmp_posixlk, &amp;tmp_posixlk_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;posix_lock-&gt;list);</div><div class='ctx'> </div><div class='del'>-                STACK_UNWIND_STRICT (lk, posix_lock-&gt;frame, -1, EREMOTE,</div><div class='del'>-                                     &amp;posix_lock-&gt;user_flock, NULL);</div><div class='add'>+        STACK_UNWIND_STRICT(lk, posix_lock-&gt;frame, -1, EREMOTE,</div><div class='add'>+                            &amp;posix_lock-&gt;user_flock, NULL);</div><div class='ctx'> </div><div class='del'>-                __destroy_lock(posix_lock);</div><div class='del'>-        }</div><div class='del'>-        return 0;</div><div class='add'>+        __destroy_lock(posix_lock);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-pl_client_disconnect_cbk (xlator_t *this, client_t *client)</div><div class='add'>+pl_client_disconnect_cbk(xlator_t *this, client_t *client)</div><div class='ctx'> {</div><div class='del'>-        pl_ctx_t *pl_ctx = NULL;</div><div class='add'>+    pl_ctx_t *pl_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        pl_ctx = pl_ctx_get (client, this);</div><div class='add'>+    pl_ctx = pl_ctx_get(client, this);</div><div class='ctx'> </div><div class='del'>-        if (pl_ctx) {</div><div class='del'>-                pl_inodelk_client_cleanup (this, pl_ctx);</div><div class='del'>-                pl_entrylk_client_cleanup (this, pl_ctx);</div><div class='del'>-                pl_metalk_client_cleanup (this, pl_ctx);</div><div class='del'>-        }</div><div class='add'>+    if (pl_ctx) {</div><div class='add'>+        pl_inodelk_client_cleanup(this, pl_ctx);</div><div class='add'>+        pl_entrylk_client_cleanup(this, pl_ctx);</div><div class='add'>+        pl_metalk_client_cleanup(this, pl_ctx);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-pl_client_destroy_cbk (xlator_t *this, client_t *client)</div><div class='add'>+pl_client_destroy_cbk(xlator_t *this, client_t *client)</div><div class='ctx'> {</div><div class='del'>-        void     *tmp    = NULL;</div><div class='del'>-        pl_ctx_t *pl_ctx = NULL;</div><div class='add'>+    void *tmp = NULL;</div><div class='add'>+    pl_ctx_t *pl_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        pl_client_disconnect_cbk (this, client);</div><div class='add'>+    pl_client_disconnect_cbk(this, client);</div><div class='ctx'> </div><div class='del'>-        client_ctx_del (client, this, &amp;tmp);</div><div class='add'>+    client_ctx_del(client, this, &amp;tmp);</div><div class='ctx'> </div><div class='del'>-        if (tmp == NULL)</div><div class='del'>-                return 0;</div><div class='add'>+    if (tmp == NULL)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        pl_ctx = tmp;</div><div class='add'>+    pl_ctx = tmp;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (list_empty(&amp;pl_ctx-&gt;inodelk_lockers));</div><div class='del'>-        GF_ASSERT (list_empty(&amp;pl_ctx-&gt;entrylk_lockers));</div><div class='add'>+    GF_ASSERT(list_empty(&amp;pl_ctx-&gt;inodelk_lockers));</div><div class='add'>+    GF_ASSERT(list_empty(&amp;pl_ctx-&gt;entrylk_lockers));</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_destroy (&amp;pl_ctx-&gt;lock);</div><div class='del'>-        GF_FREE (pl_ctx);</div><div class='add'>+    pthread_mutex_destroy(&amp;pl_ctx-&gt;lock);</div><div class='add'>+    GF_FREE(pl_ctx);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='del'>-        int                   ret = -1;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("trace", priv-&gt;trace, options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("trace", priv-&gt;trace, options, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("monkey-unlocking", priv-&gt;monkey_unlocking, options,</div><div class='del'>-                          bool, out);</div><div class='add'>+    GF_OPTION_RECONF("monkey-unlocking", priv-&gt;monkey_unlocking, options, bool,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("revocation-secs",</div><div class='del'>-                          priv-&gt;revocation_secs, options,</div><div class='del'>-                          uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("revocation-secs", priv-&gt;revocation_secs, options, uint32,</div><div class='add'>+                     out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("revocation-clear-all", priv-&gt;revocation_clear_all,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("revocation-clear-all", priv-&gt;revocation_clear_all,</div><div class='add'>+                     options, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("revocation-max-blocked",</div><div class='del'>-                          priv-&gt;revocation_max_blocked, options,</div><div class='del'>-                          uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("revocation-max-blocked", priv-&gt;revocation_max_blocked,</div><div class='add'>+                     options, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("notify-contention", priv-&gt;notify_contention,</div><div class='del'>-                          options, bool, out);</div><div class='add'>+    GF_OPTION_RECONF("notify-contention", priv-&gt;notify_contention, options,</div><div class='add'>+                     bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_RECONF ("notify-contention-delay",</div><div class='del'>-                          priv-&gt;notify_contention_delay, options, uint32, out);</div><div class='add'>+    GF_OPTION_RECONF("notify-contention-delay", priv-&gt;notify_contention_delay,</div><div class='add'>+                     options, uint32, out);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-init (xlator_t *this)</div><div class='add'>+init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='del'>-        xlator_list_t         *trav = NULL;</div><div class='del'>-        char                  *tmp_str = NULL;</div><div class='del'>-        int                   ret = -1;</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='add'>+    xlator_list_t *trav = NULL;</div><div class='add'>+    char *tmp_str = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                        "FATAL: posix-locks should have exactly one child");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;children || this-&gt;children-&gt;next) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+               "FATAL: posix-locks should have exactly one child");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Volume is dangling. Please check the volume file.");</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Volume is dangling. Please check the volume file.");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        trav = this-&gt;children;</div><div class='del'>-        while (trav-&gt;xlator-&gt;children)</div><div class='del'>-                trav = trav-&gt;xlator-&gt;children;</div><div class='add'>+    trav = this-&gt;children;</div><div class='add'>+    while (trav-&gt;xlator-&gt;children)</div><div class='add'>+        trav = trav-&gt;xlator-&gt;children;</div><div class='ctx'> </div><div class='del'>-        if (strncmp ("storage/", trav-&gt;xlator-&gt;type, 8)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                        "'locks' translator is not loaded over a storage "</div><div class='del'>-                        "translator");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (strncmp("storage/", trav-&gt;xlator-&gt;type, 8)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+               "'locks' translator is not loaded over a storage "</div><div class='add'>+               "translator");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        priv = GF_CALLOC (1, sizeof (*priv),</div><div class='del'>-                          gf_locks_mt_posix_locks_private_t);</div><div class='add'>+    priv = GF_CALLOC(1, sizeof(*priv), gf_locks_mt_posix_locks_private_t);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("mandatory-locking", tmp_str, str, out);</div><div class='del'>-        if (!strcmp (tmp_str, "forced"))</div><div class='del'>-                priv-&gt;mandatory_mode = MLK_FORCED;</div><div class='del'>-        else if (!strcmp (tmp_str, "file"))</div><div class='del'>-                priv-&gt;mandatory_mode = MLK_FILE_BASED;</div><div class='del'>-        else if (!strcmp (tmp_str, "optimal"))</div><div class='del'>-                priv-&gt;mandatory_mode = MLK_OPTIMAL;</div><div class='del'>-        else</div><div class='del'>-                priv-&gt;mandatory_mode = MLK_NONE;</div><div class='del'>-        tmp_str = NULL;</div><div class='add'>+    GF_OPTION_INIT("mandatory-locking", tmp_str, str, out);</div><div class='add'>+    if (!strcmp(tmp_str, "forced"))</div><div class='add'>+        priv-&gt;mandatory_mode = MLK_FORCED;</div><div class='add'>+    else if (!strcmp(tmp_str, "file"))</div><div class='add'>+        priv-&gt;mandatory_mode = MLK_FILE_BASED;</div><div class='add'>+    else if (!strcmp(tmp_str, "optimal"))</div><div class='add'>+        priv-&gt;mandatory_mode = MLK_OPTIMAL;</div><div class='add'>+    else</div><div class='add'>+        priv-&gt;mandatory_mode = MLK_NONE;</div><div class='add'>+    tmp_str = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("trace", priv-&gt;trace, bool, out);</div><div class='add'>+    GF_OPTION_INIT("trace", priv-&gt;trace, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("monkey-unlocking", priv-&gt;monkey_unlocking,</div><div class='del'>-                        bool, out);</div><div class='add'>+    GF_OPTION_INIT("monkey-unlocking", priv-&gt;monkey_unlocking, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("revocation-secs", priv-&gt;revocation_secs,</div><div class='del'>-                        uint32, out);</div><div class='add'>+    GF_OPTION_INIT("revocation-secs", priv-&gt;revocation_secs, uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("revocation-clear-all", priv-&gt;revocation_clear_all,</div><div class='del'>-                        bool, out);</div><div class='add'>+    GF_OPTION_INIT("revocation-clear-all", priv-&gt;revocation_clear_all, bool,</div><div class='add'>+                   out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("revocation-max-blocked", priv-&gt;revocation_max_blocked,</div><div class='del'>-                        uint32, out);</div><div class='add'>+    GF_OPTION_INIT("revocation-max-blocked", priv-&gt;revocation_max_blocked,</div><div class='add'>+                   uint32, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("notify-contention", priv-&gt;notify_contention, bool,</div><div class='del'>-                        out);</div><div class='add'>+    GF_OPTION_INIT("notify-contention", priv-&gt;notify_contention, bool, out);</div><div class='ctx'> </div><div class='del'>-        GF_OPTION_INIT ("notify-contention-delay",</div><div class='del'>-                        priv-&gt;notify_contention_delay, uint32, out);</div><div class='add'>+    GF_OPTION_INIT("notify-contention-delay", priv-&gt;notify_contention_delay,</div><div class='add'>+                   uint32, out);</div><div class='ctx'> </div><div class='del'>-        this-&gt;local_pool = mem_pool_new (pl_local_t, 32);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to create local_t's memory pool");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(pl_local_t, 32);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to create local_t's memory pool");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        this-&gt;private = priv;</div><div class='del'>-        ret = 0;</div><div class='add'>+    this-&gt;private = priv;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (priv);</div><div class='del'>-        }</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(priv);</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        posix_locks_private_t *priv = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (!priv)</div><div class='del'>-                return 0;</div><div class='del'>-        this-&gt;private = NULL;</div><div class='del'>-        GF_FREE (priv-&gt;brickname);</div><div class='del'>-        GF_FREE (priv);</div><div class='add'>+    posix_locks_private_t *priv = NULL;</div><div class='ctx'> </div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (!priv)</div><div class='ctx'>         return 0;</div><div class='add'>+    this-&gt;private = NULL;</div><div class='add'>+    GF_FREE(priv-&gt;brickname);</div><div class='add'>+    GF_FREE(priv);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_inodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *flock,</div><div class='del'>-            dict_t *xdata);</div><div class='add'>+pl_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           int32_t cmd, struct gf_flock *flock, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_finodelk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *flock,</div><div class='del'>-             dict_t *xdata);</div><div class='add'>+pl_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+            int32_t cmd, struct gf_flock *flock, dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_entrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            const char *volume, loc_t *loc, const char *basename,</div><div class='del'>-            entrylk_cmd cmd, entrylk_type type, dict_t *xdata);</div><div class='add'>+pl_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+           dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fentrylk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             const char *volume, fd_t *fd, const char *basename,</div><div class='del'>-             entrylk_cmd cmd, entrylk_type type, dict_t *xdata);</div><div class='add'>+pl_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='add'>+            const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+            dict_t *xdata);</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-               struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-               struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+pl_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *buf, struct iatt *preoldparent,</div><div class='add'>+              struct iatt *postoldparent, struct iatt *prenewparent,</div><div class='add'>+              struct iatt *postnewparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND (rename, xdata, frame, op_ret, op_errno,</div><div class='del'>-                         buf, preoldparent, postoldparent, prenewparent,</div><div class='del'>-                         postnewparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND(rename, xdata, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                    postoldparent, prenewparent, postnewparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_rename (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+pl_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, oldloc,  newloc);</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, oldloc, newloc);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, pl_rename_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc,</div><div class='del'>-                    newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, pl_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> posix_lock_t *</div><div class='del'>-gf_lkmig_info_to_posix_lock (call_frame_t *frame,</div><div class='del'>-                             lock_migration_info_t *lmi)</div><div class='add'>+gf_lkmig_info_to_posix_lock(call_frame_t *frame, lock_migration_info_t *lmi)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t    *lock    = NULL;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='ctx'> </div><div class='del'>-        lock = GF_CALLOC (1, sizeof (posix_lock_t), gf_locks_mt_posix_lock_t);</div><div class='del'>-        if (!lock)</div><div class='del'>-                goto out;</div><div class='add'>+    lock = GF_CALLOC(1, sizeof(posix_lock_t), gf_locks_mt_posix_lock_t);</div><div class='add'>+    if (!lock)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;fl_start = lmi-&gt;flock.l_start;</div><div class='del'>-        lock-&gt;fl_type  = lmi-&gt;flock.l_type;</div><div class='add'>+    lock-&gt;fl_start = lmi-&gt;flock.l_start;</div><div class='add'>+    lock-&gt;fl_type = lmi-&gt;flock.l_type;</div><div class='ctx'> </div><div class='del'>-        if (lmi-&gt;flock.l_len == 0)</div><div class='del'>-                lock-&gt;fl_end = LLONG_MAX;</div><div class='del'>-        else</div><div class='del'>-               lock-&gt;fl_end = lmi-&gt;flock.l_start + lmi-&gt;flock.l_len - 1;</div><div class='add'>+    if (lmi-&gt;flock.l_len == 0)</div><div class='add'>+        lock-&gt;fl_end = LLONG_MAX;</div><div class='add'>+    else</div><div class='add'>+        lock-&gt;fl_end = lmi-&gt;flock.l_start + lmi-&gt;flock.l_len - 1;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;client = frame-&gt;root-&gt;client;</div><div class='add'>+    lock-&gt;client = frame-&gt;root-&gt;client;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;lk_flags = lmi-&gt;lk_flags;</div><div class='add'>+    lock-&gt;lk_flags = lmi-&gt;lk_flags;</div><div class='ctx'> </div><div class='del'>-        lock-&gt;client_uid = gf_strdup (lmi-&gt;client_uid);</div><div class='del'>-        if (lock-&gt;client_uid == NULL) {</div><div class='del'>-                GF_FREE (lock);</div><div class='del'>-                lock = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    lock-&gt;client_uid = gf_strdup(lmi-&gt;client_uid);</div><div class='add'>+    if (lock-&gt;client_uid == NULL) {</div><div class='add'>+        GF_FREE(lock);</div><div class='add'>+        lock = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        lock-&gt;client_pid = lmi-&gt;flock.l_pid;</div><div class='del'>-        lock-&gt;owner      = lmi-&gt;flock.l_owner;</div><div class='add'>+    lock-&gt;client_pid = lmi-&gt;flock.l_pid;</div><div class='add'>+    lock-&gt;owner = lmi-&gt;flock.l_owner;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;lock-&gt;list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;lock-&gt;list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return lock;</div><div class='add'>+    return lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function is supposed to write the active locks from the source brick(in</div><div class='ctx'>  * rebalance context) and write here. Hence, will add the locks directly to the</div><div class='ctx'>  * pl_inode-&gt;ext_list*/</div><div class='ctx'> int</div><div class='del'>-pl_write_active_locks (call_frame_t *frame, pl_inode_t *pl_inode,</div><div class='del'>-                       lock_migration_info_t *locklist)</div><div class='add'>+pl_write_active_locks(call_frame_t *frame, pl_inode_t *pl_inode,</div><div class='add'>+                      lock_migration_info_t *locklist)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t            *newlock        = NULL;</div><div class='del'>-        lock_migration_info_t   *temp           = NULL;</div><div class='del'>-        int                      ret            = 0;</div><div class='add'>+    posix_lock_t *newlock = NULL;</div><div class='add'>+    lock_migration_info_t *temp = NULL;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                /* Just making sure the activelk list is empty. Should not</div><div class='del'>-                 * happen though*/</div><div class='del'>-               if (!list_empty (&amp;pl_inode-&gt;ext_list)) {</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        /* Just making sure the activelk list is empty. Should not</div><div class='add'>+         * happen though*/</div><div class='add'>+        if (!list_empty(&amp;pl_inode-&gt;ext_list)) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, 0, "invalid locks found");</div><div class='ctx'> </div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "invalid locks found");</div><div class='del'>-</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-               }</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                /* This list also should not be empty */</div><div class='del'>-                if (list_empty (&amp;locklist-&gt;list)) {</div><div class='del'>-                        gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                "empty lock list");</div><div class='add'>+        /* This list also should not be empty */</div><div class='add'>+        if (list_empty(&amp;locklist-&gt;list)) {</div><div class='add'>+            gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, 0, "empty lock list");</div><div class='ctx'> </div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (temp, &amp;locklist-&gt;list, list) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-                        newlock = gf_lkmig_info_to_posix_lock (frame, temp);</div><div class='del'>-                        if (!newlock) {</div><div class='del'>-                                gf_msg (THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                                        "mem allocation failed for newlock");</div><div class='add'>+        list_for_each_entry(temp, &amp;locklist-&gt;list, list)</div><div class='add'>+        {</div><div class='add'>+            newlock = gf_lkmig_info_to_posix_lock(frame, temp);</div><div class='add'>+            if (!newlock) {</div><div class='add'>+                gf_msg(THIS-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='add'>+                       "mem allocation failed for newlock");</div><div class='ctx'> </div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        list_add_tail (&amp;newlock-&gt;list, &amp;pl_inode-&gt;ext_list);</div><div class='del'>-                }</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            list_add_tail(&amp;newlock-&gt;list, &amp;pl_inode-&gt;ext_list);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /*TODO: What if few lock add failed with ENOMEM. Should the already</div><div class='del'>-         *      added locks be clearted */</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='add'>+    /*TODO: What if few lock add failed with ENOMEM. Should the already</div><div class='add'>+     *      added locks be clearted */</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-pl_setactivelk (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                  lock_migration_info_t *locklist, dict_t *xdata)</div><div class='add'>+pl_setactivelk(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               lock_migration_info_t *locklist, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        pl_inode_t             *pl_inode        = NULL;</div><div class='del'>-        int                     op_ret          = 0;</div><div class='del'>-        int                     op_errno        = 0;</div><div class='del'>-        int                     ret             = 0;</div><div class='add'>+    pl_inode_t *pl_inode = NULL;</div><div class='add'>+    int op_ret = 0;</div><div class='add'>+    int op_errno = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='del'>-        pl_inode = pl_inode_get (this, loc-&gt;inode);</div><div class='del'>-        if (!pl_inode) {</div><div class='del'>-                gf_msg (this-&gt;name, GF_LOG_ERROR, 0, 0,</div><div class='del'>-                        "pl_inode_get failed");</div><div class='add'>+    pl_inode = pl_inode_get(this, loc-&gt;inode);</div><div class='add'>+    if (!pl_inode) {</div><div class='add'>+        gf_msg(this-&gt;name, GF_LOG_ERROR, 0, 0, "pl_inode_get failed");</div><div class='ctx'> </div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        ret = pl_write_active_locks (frame, pl_inode, locklist);</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = pl_write_active_locks(frame, pl_inode, locklist);</div><div class='ctx'> </div><div class='del'>-        op_ret = ret;</div><div class='add'>+    op_ret = ret;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (setactivelk, frame, op_ret, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(setactivelk, frame, op_ret, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-               struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND (unlink, xdata, frame, op_ret, op_errno, preparent,</div><div class='del'>-                         postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND(unlink, xdata, frame, op_ret, op_errno, preparent,</div><div class='add'>+                    postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+pl_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_unlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-              struct iatt *buf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (mkdir, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(mkdir, xdata, frame, op_ret, op_errno, inode,</div><div class='add'>+                               buf, preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-          mode_t mode, mode_t umask, dict_t *xdata)</div><div class='add'>+pl_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_mkdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode,</div><div class='del'>-                    umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+pl_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (stat, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(stat, xdata, frame, op_ret, op_errno, buf,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_stat (call_frame_t *frame, xlator_t *this,</div><div class='del'>-         loc_t *loc, dict_t *xdata)</div><div class='add'>+pl_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_stat_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-              struct iatt *buf, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+             struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (mknod, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(mknod, xdata, frame, op_ret, op_errno, inode,</div><div class='add'>+                               buf, preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_mknod (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          loc_t *loc, mode_t mode, dev_t rdev,</div><div class='del'>-          mode_t umask, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_mknod_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode,</div><div class='del'>-                    rdev, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+pl_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-              struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *preparent, struct iatt *postparent,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (rmdir, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(rmdir, xdata, frame, op_ret, op_errno, preparent,</div><div class='add'>+                               postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_rmdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          loc_t *loc, int xflags, dict_t *xdata)</div><div class='add'>+pl_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_rmdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc,</div><div class='del'>-                    xflags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+               struct iatt *buf, struct iatt *preparent,</div><div class='add'>+               struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (symlink, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(symlink, xdata, frame, op_ret, op_errno, inode,</div><div class='add'>+                               buf, preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_symlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            const char *linkname, loc_t *loc,</div><div class='del'>-            mode_t umask, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_symlink_cbk,  FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname,</div><div class='del'>-                    loc, umask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+pl_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='add'>+           loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-             struct iatt *buf, struct iatt *preparent,</div><div class='del'>-             struct iatt *postparent, dict_t *xdata)</div><div class='add'>+pl_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, inode_t *inode, struct iatt *buf,</div><div class='add'>+            struct iatt *preparent, struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (link, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    inode, buf, preparent, postparent, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(link, xdata, frame, op_ret, op_errno, inode, buf,</div><div class='add'>+                               preparent, postparent, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_link (call_frame_t *frame, xlator_t *this,</div><div class='del'>-         loc_t *oldloc, loc_t *newloc, dict_t *xdata)</div><div class='add'>+pl_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, oldloc, newloc);</div><div class='del'>-        STACK_WIND (frame, pl_link_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, oldloc, newloc);</div><div class='add'>+    STACK_WIND(frame, pl_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-              int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-              struct iatt *postbuf,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+pl_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+             int32_t op_errno, struct iatt *prebuf, struct iatt *postbuf,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fsync, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    prebuf, postbuf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fsync, xdata, frame, op_ret, op_errno, prebuf,</div><div class='add'>+                               postbuf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fsync (call_frame_t *frame, xlator_t *this,</div><div class='del'>-          fd_t *fd, int32_t datasync, dict_t *xdata)</div><div class='add'>+pl_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fsync_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, datasync, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, datasync, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+pl_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,</div><div class='add'>+               dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (readdir, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    entries, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(readdir, xdata, frame, op_ret, op_errno, entries,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_readdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-            fd_t *fd, size_t size, off_t offset,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+pl_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+           off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_readdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd,</div><div class='del'>-                    size, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_readdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readdir, fd, size, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fsyncdir, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fsyncdir, xdata, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fsyncdir (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             fd_t *fd, int32_t datasync, dict_t *xdata)</div><div class='add'>+pl_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fsyncdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir, fd,</div><div class='del'>-                    datasync, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fsyncdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, struct statvfs *buf,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+pl_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, struct statvfs *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (statfs, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(statfs, xdata, frame, op_ret, op_errno, buf,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_statfs (call_frame_t *frame, xlator_t *this,</div><div class='del'>-           loc_t *loc, dict_t *xdata)</div><div class='add'>+pl_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_statfs_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_statfs_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (removexattr, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(removexattr, xdata, frame, op_ret, op_errno,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_removexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                loc_t *loc, const char *name, dict_t *xdata)</div><div class='add'>+pl_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_removexattr_cbk,  FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fremovexattr, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fremovexattr, xdata, frame, op_ret, op_errno,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fremovexattr (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 fd_t *fd, const char *name, dict_t *xdata)</div><div class='add'>+pl_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fremovexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_rchecksum_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, uint32_t weak_cksum,</div><div class='del'>-                  uint8_t *strong_cksum, dict_t *xdata)</div><div class='add'>+pl_rchecksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, uint32_t weak_cksum,</div><div class='add'>+                 uint8_t *strong_cksum, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (rchecksum, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    weak_cksum, strong_cksum, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(rchecksum, xdata, frame, op_ret, op_errno,</div><div class='add'>+                               weak_cksum, strong_cksum, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_rchecksum (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, off_t offset, int32_t len,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+pl_rchecksum(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_rchecksum_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rchecksum, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_rchecksum_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rchecksum, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+pl_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (xattrop, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(xattrop, xdata, frame, op_ret, op_errno, dict,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            gf_xattrop_flags_t optype, dict_t *xattr,</div><div class='del'>-            dict_t *xdata)</div><div class='add'>+pl_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+           gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_xattrop_cbk,  FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc,</div><div class='del'>-                    optype, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_xattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;xattrop, loc, optype, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+pl_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fxattrop, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fxattrop, xdata, frame, op_ret, op_errno, dict,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             gf_xattrop_flags_t optype, dict_t *xattr,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+pl_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+            gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fxattrop_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd,</div><div class='del'>-                    optype, xattr, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fxattrop_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fxattrop, fd, optype, xattr, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                struct iatt *statpost,</div><div class='del'>-                dict_t *xdata)</div><div class='add'>+pl_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+               int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+               struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (setattr, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    statpre, statpost, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(setattr, xdata, frame, op_ret, op_errno, statpre,</div><div class='add'>+                               statpost, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-            struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+pl_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+           int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_setattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                 struct iatt *statpost, dict_t *xdata)</div><div class='add'>+pl_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fsetattr, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    statpre, statpost, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fsetattr, xdata, frame, op_ret, op_errno,</div><div class='add'>+                               statpre, statpost, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-             struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+pl_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='add'>+            int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fsetattr_cbk,  FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_fallocate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='del'>-                  struct iatt *post, dict_t *xdata)</div><div class='add'>+pl_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *pre,</div><div class='add'>+                 struct iatt *post, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (fallocate, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    pre, post, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(fallocate, xdata, frame, op_ret, op_errno, pre,</div><div class='add'>+                               post, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_fallocate (call_frame_t *frame, xlator_t *this,</div><div class='del'>-              fd_t *fd, int32_t keep_size, off_t offset,</div><div class='del'>-              size_t len, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_fallocate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd,</div><div class='del'>-                    keep_size, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+pl_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t keep_size,</div><div class='add'>+             off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_fallocate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd, keep_size, offset, len,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, const char *path,</div><div class='del'>-                 struct iatt *buf, dict_t *xdata)</div><div class='add'>+pl_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, const char *path,</div><div class='add'>+                struct iatt *buf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (readlink, xdata, frame, op_ret, op_errno,</div><div class='del'>-                                    path, buf, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(readlink, xdata, frame, op_ret, op_errno, path,</div><div class='add'>+                               buf, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_readlink (call_frame_t *frame, xlator_t *this,</div><div class='del'>-             loc_t *loc, size_t size, dict_t *xdata)</div><div class='add'>+pl_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_readlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_readlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-               int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+pl_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+              int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (access, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(access, xdata, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_access (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-           int32_t mask, dict_t *xdata)</div><div class='add'>+pl_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, NULL, loc, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_access_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, NULL, loc, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_access_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_seek_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-             int32_t op_ret, int32_t op_errno, off_t offset,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+pl_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,</div><div class='add'>+            int32_t op_errno, off_t offset, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_STACK_UNWIND_FOR_CLIENT (seek, xdata, frame,</div><div class='del'>-                                    op_ret, op_errno, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_STACK_UNWIND_FOR_CLIENT(seek, xdata, frame, op_ret, op_errno, offset,</div><div class='add'>+                               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-pl_seek (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-         off_t offset, gf_seek_what_t what,</div><div class='del'>-         dict_t *xdata)</div><div class='add'>+pl_seek(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+        gf_seek_what_t what, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        PL_LOCAL_GET_REQUESTS (frame, this, xdata, fd, NULL, NULL);</div><div class='del'>-        STACK_WIND (frame, pl_seek_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;seek, fd, offset, what, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    PL_LOCAL_GET_REQUESTS(frame, this, xdata, fd, NULL, NULL);</div><div class='add'>+    STACK_WIND(frame, pl_seek_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;seek, fd, offset, what, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup      = pl_lookup,</div><div class='del'>-        .create      = pl_create,</div><div class='del'>-        .fstat       = pl_fstat,</div><div class='del'>-        .truncate    = pl_truncate,</div><div class='del'>-        .ftruncate   = pl_ftruncate,</div><div class='del'>-        .discard     = pl_discard,</div><div class='del'>-        .zerofill    = pl_zerofill,</div><div class='del'>-        .open        = pl_open,</div><div class='del'>-        .readv       = pl_readv,</div><div class='del'>-        .writev      = pl_writev,</div><div class='del'>-        .lk          = pl_lk,</div><div class='del'>-        .inodelk     = pl_inodelk,</div><div class='del'>-        .finodelk    = pl_finodelk,</div><div class='del'>-        .entrylk     = pl_entrylk,</div><div class='del'>-        .fentrylk    = pl_fentrylk,</div><div class='del'>-        .flush       = pl_flush,</div><div class='del'>-        .opendir     = pl_opendir,</div><div class='del'>-        .readdirp    = pl_readdirp,</div><div class='del'>-        .setxattr    = pl_setxattr,</div><div class='del'>-        .fsetxattr   = pl_fsetxattr,</div><div class='del'>-        .getxattr    = pl_getxattr,</div><div class='del'>-        .fgetxattr   = pl_fgetxattr,</div><div class='del'>-        .removexattr = pl_removexattr,</div><div class='del'>-        .fremovexattr = pl_fremovexattr,</div><div class='del'>-        .rename      = pl_rename,</div><div class='del'>-        .getactivelk = pl_getactivelk,</div><div class='del'>-        .setactivelk = pl_setactivelk,</div><div class='del'>-        .unlink      = pl_unlink,</div><div class='del'>-        .access      = pl_access,</div><div class='del'>-        .readlink    = pl_readlink,</div><div class='del'>-        .fallocate   = pl_fallocate,</div><div class='del'>-        .fsetattr    = pl_fsetattr,</div><div class='del'>-        .setattr     = pl_setattr,</div><div class='del'>-        .fxattrop    = pl_fxattrop,</div><div class='del'>-        .xattrop     = pl_xattrop,</div><div class='del'>-        .rchecksum   = pl_rchecksum,</div><div class='del'>-        .statfs      = pl_statfs,</div><div class='del'>-        .fsyncdir    = pl_fsyncdir,</div><div class='del'>-        .readdir     = pl_readdir,</div><div class='del'>-        .symlink     = pl_symlink,</div><div class='del'>-        .link        = pl_link,</div><div class='del'>-        .rmdir       = pl_rmdir,</div><div class='del'>-        .mknod       = pl_mknod,</div><div class='del'>-        .stat        = pl_stat,</div><div class='del'>-        .seek        = pl_seek,</div><div class='add'>+    .lookup = pl_lookup,</div><div class='add'>+    .create = pl_create,</div><div class='add'>+    .fstat = pl_fstat,</div><div class='add'>+    .truncate = pl_truncate,</div><div class='add'>+    .ftruncate = pl_ftruncate,</div><div class='add'>+    .discard = pl_discard,</div><div class='add'>+    .zerofill = pl_zerofill,</div><div class='add'>+    .open = pl_open,</div><div class='add'>+    .readv = pl_readv,</div><div class='add'>+    .writev = pl_writev,</div><div class='add'>+    .lk = pl_lk,</div><div class='add'>+    .inodelk = pl_inodelk,</div><div class='add'>+    .finodelk = pl_finodelk,</div><div class='add'>+    .entrylk = pl_entrylk,</div><div class='add'>+    .fentrylk = pl_fentrylk,</div><div class='add'>+    .flush = pl_flush,</div><div class='add'>+    .opendir = pl_opendir,</div><div class='add'>+    .readdirp = pl_readdirp,</div><div class='add'>+    .setxattr = pl_setxattr,</div><div class='add'>+    .fsetxattr = pl_fsetxattr,</div><div class='add'>+    .getxattr = pl_getxattr,</div><div class='add'>+    .fgetxattr = pl_fgetxattr,</div><div class='add'>+    .removexattr = pl_removexattr,</div><div class='add'>+    .fremovexattr = pl_fremovexattr,</div><div class='add'>+    .rename = pl_rename,</div><div class='add'>+    .getactivelk = pl_getactivelk,</div><div class='add'>+    .setactivelk = pl_setactivelk,</div><div class='add'>+    .unlink = pl_unlink,</div><div class='add'>+    .access = pl_access,</div><div class='add'>+    .readlink = pl_readlink,</div><div class='add'>+    .fallocate = pl_fallocate,</div><div class='add'>+    .fsetattr = pl_fsetattr,</div><div class='add'>+    .setattr = pl_setattr,</div><div class='add'>+    .fxattrop = pl_fxattrop,</div><div class='add'>+    .xattrop = pl_xattrop,</div><div class='add'>+    .rchecksum = pl_rchecksum,</div><div class='add'>+    .statfs = pl_statfs,</div><div class='add'>+    .fsyncdir = pl_fsyncdir,</div><div class='add'>+    .readdir = pl_readdir,</div><div class='add'>+    .symlink = pl_symlink,</div><div class='add'>+    .link = pl_link,</div><div class='add'>+    .rmdir = pl_rmdir,</div><div class='add'>+    .mknod = pl_mknod,</div><div class='add'>+    .stat = pl_stat,</div><div class='add'>+    .seek = pl_seek,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_dumpops dumpops = {</div><div class='del'>-        .inodectx    = pl_dump_inode_priv,</div><div class='add'>+    .inodectx = pl_dump_inode_priv,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct xlator_cbks cbks = {</div><div class='del'>-        .forget            = pl_forget,</div><div class='del'>-        .release           = pl_release,</div><div class='del'>-        .releasedir        = pl_releasedir,</div><div class='del'>-        .client_destroy    = pl_client_destroy_cbk,</div><div class='del'>-        .client_disconnect = pl_client_disconnect_cbk,</div><div class='add'>+    .forget = pl_forget,</div><div class='add'>+    .release = pl_release,</div><div class='add'>+    .releasedir = pl_releasedir,</div><div class='add'>+    .client_destroy = pl_client_destroy_cbk,</div><div class='add'>+    .client_disconnect = pl_client_disconnect_cbk,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        { .key  = { "mandatory-locking" },</div><div class='del'>-          .type = GF_OPTION_TYPE_STR,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_8_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags  = {"locks"},</div><div class='del'>-          .description = "Specifies the mandatory-locking mode. Valid options "</div><div class='del'>-                         "are 'file' to use linux style mandatory locks, "</div><div class='del'>-                         "'forced' to use volume strictly under mandatory lock "</div><div class='del'>-                         "semantics only and 'optimal' to treat advisory and "</div><div class='del'>-                         "mandatory locks separately on their own."</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "trace" },</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "off",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_7_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags  = {"locks"},</div><div class='del'>-          .description = "Trace the different lock requests "</div><div class='del'>-                         "to logs."</div><div class='del'>-        },</div><div class='del'>-        { .key  = { "monkey-unlocking" },</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "false",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_9_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE,</div><div class='del'>-          .tags  = {"locks"},</div><div class='del'>-          .description = "Ignore a random number of unlock requests.  Useful "</div><div class='del'>-                         "for testing/creating robust lock recovery mechanisms."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"revocation-secs"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min = 0,</div><div class='del'>-          .max = INT_MAX,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_9_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags  = {"locks"},</div><div class='del'>-          .description = "Maximum time a lock can be taken out, before"</div><div class='del'>-                         "being revoked.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"revocation-clear-all"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "false",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_9_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags  = {"locks"},</div><div class='del'>-          .description = "If set to true, will revoke BOTH granted and blocked "</div><div class='del'>-                         "(pending) lock requests if a revocation threshold is "</div><div class='del'>-                         "hit.",</div><div class='del'>-        },</div><div class='del'>-        { .key = {"revocation-max-blocked"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min = 0,</div><div class='del'>-          .max = INT_MAX,</div><div class='del'>-          .default_value = "0",</div><div class='del'>-          .op_version = {GD_OP_VERSION_3_9_0},</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .tags  = {"locks"},</div><div class='del'>-          .description = "A number of blocked lock requests after which a lock "</div><div class='del'>-                         "will be revoked to allow the others to proceed.  Can "</div><div class='del'>-                         "be used in conjunction w/ revocation-clear-all."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"notify-contention"},</div><div class='del'>-          .type = GF_OPTION_TYPE_BOOL,</div><div class='del'>-          .default_value = "no",</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .op_version = { GD_OP_VERSION_4_0_0 },</div><div class='del'>-          .tags = { "locks", "contention" },</div><div class='del'>-          .description = "When this option is enabled and a lock request "</div><div class='del'>-                         "conflicts with a currently granted lock, an upcall "</div><div class='del'>-                         "notification will be sent to the current owner of "</div><div class='del'>-                         "the lock to request it to be released as soon as "</div><div class='del'>-                         "possible."</div><div class='del'>-        },</div><div class='del'>-        { .key = {"notify-contention-delay"},</div><div class='del'>-          .type = GF_OPTION_TYPE_INT,</div><div class='del'>-          .min = 0, /* An upcall notification is sent every time a conflict is</div><div class='del'>-                     * detected. */</div><div class='del'>-          .max = 60,</div><div class='del'>-          .default_value = "5",</div><div class='del'>-          .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='del'>-          .op_version = { GD_OP_VERSION_4_0_0 },</div><div class='del'>-          .tags = { "locks", "contention", "timeout" },</div><div class='del'>-          .description = "This value determines the minimum amount of time "</div><div class='del'>-                         "(in seconds) between upcall contention notifications "</div><div class='del'>-                         "on the same inode. If multiple lock requests are "</div><div class='del'>-                         "received during this period, only one upcall will "</div><div class='del'>-                         "be sent."</div><div class='del'>-        },</div><div class='del'>-        { .key = {NULL} },</div><div class='add'>+    {.key = {"mandatory-locking"},</div><div class='add'>+     .type = GF_OPTION_TYPE_STR,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_8_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"locks"},</div><div class='add'>+     .description = "Specifies the mandatory-locking mode. Valid options "</div><div class='add'>+                    "are 'file' to use linux style mandatory locks, "</div><div class='add'>+                    "'forced' to use volume strictly under mandatory lock "</div><div class='add'>+                    "semantics only and 'optimal' to treat advisory and "</div><div class='add'>+                    "mandatory locks separately on their own."},</div><div class='add'>+    {.key = {"trace"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "off",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_7_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"locks"},</div><div class='add'>+     .description = "Trace the different lock requests "</div><div class='add'>+                    "to logs."},</div><div class='add'>+    {.key = {"monkey-unlocking"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "false",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE,</div><div class='add'>+     .tags = {"locks"},</div><div class='add'>+     .description = "Ignore a random number of unlock requests.  Useful "</div><div class='add'>+                    "for testing/creating robust lock recovery mechanisms."},</div><div class='add'>+    {</div><div class='add'>+        .key = {"revocation-secs"},</div><div class='add'>+        .type = GF_OPTION_TYPE_INT,</div><div class='add'>+        .min = 0,</div><div class='add'>+        .max = INT_MAX,</div><div class='add'>+        .default_value = "0",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"locks"},</div><div class='add'>+        .description = "Maximum time a lock can be taken out, before"</div><div class='add'>+                       "being revoked.",</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"revocation-clear-all"},</div><div class='add'>+        .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+        .default_value = "false",</div><div class='add'>+        .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+        .tags = {"locks"},</div><div class='add'>+        .description = "If set to true, will revoke BOTH granted and blocked "</div><div class='add'>+                       "(pending) lock requests if a revocation threshold is "</div><div class='add'>+                       "hit.",</div><div class='add'>+    },</div><div class='add'>+    {.key = {"revocation-max-blocked"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 0,</div><div class='add'>+     .max = INT_MAX,</div><div class='add'>+     .default_value = "0",</div><div class='add'>+     .op_version = {GD_OP_VERSION_3_9_0},</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .tags = {"locks"},</div><div class='add'>+     .description = "A number of blocked lock requests after which a lock "</div><div class='add'>+                    "will be revoked to allow the others to proceed.  Can "</div><div class='add'>+                    "be used in conjunction w/ revocation-clear-all."},</div><div class='add'>+    {.key = {"notify-contention"},</div><div class='add'>+     .type = GF_OPTION_TYPE_BOOL,</div><div class='add'>+     .default_value = "no",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .tags = {"locks", "contention"},</div><div class='add'>+     .description = "When this option is enabled and a lock request "</div><div class='add'>+                    "conflicts with a currently granted lock, an upcall "</div><div class='add'>+                    "notification will be sent to the current owner of "</div><div class='add'>+                    "the lock to request it to be released as soon as "</div><div class='add'>+                    "possible."},</div><div class='add'>+    {.key = {"notify-contention-delay"},</div><div class='add'>+     .type = GF_OPTION_TYPE_INT,</div><div class='add'>+     .min = 0, /* An upcall notification is sent every time a conflict is</div><div class='add'>+                * detected. */</div><div class='add'>+     .max = 60,</div><div class='add'>+     .default_value = "5",</div><div class='add'>+     .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,</div><div class='add'>+     .op_version = {GD_OP_VERSION_4_0_0},</div><div class='add'>+     .tags = {"locks", "contention", "timeout"},</div><div class='add'>+     .description = "This value determines the minimum amount of time "</div><div class='add'>+                    "(in seconds) between upcall contention notifications "</div><div class='add'>+                    "on the same inode. If multiple lock requests are "</div><div class='add'>+                    "received during this period, only one upcall will "</div><div class='add'>+                    "be sent."},</div><div class='add'>+    {.key = {NULL}},</div><div class='ctx'> };</div><div class='head'>diff --git a/xlators/features/locks/src/reservelk.c b/xlators/features/locks/src/reservelk.c<br/>index 5c7a5b47f3e..8b080dba030 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/reservelk.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/src/reservelk.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/src/reservelk.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/src/reservelk.c</a></div><div class='hunk'>@@ -19,407 +19,372 @@</div><div class='ctx'> </div><div class='ctx'> /* Return true if the two reservelks have exactly same lock boundaries */</div><div class='ctx'> int</div><div class='del'>-reservelks_equal (posix_lock_t *l1, posix_lock_t *l2)</div><div class='add'>+reservelks_equal(posix_lock_t *l1, posix_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        if ((l1-&gt;fl_start == l2-&gt;fl_start) &amp;&amp;</div><div class='del'>-            (l1-&gt;fl_end == l2-&gt;fl_end))</div><div class='del'>-                return 1;</div><div class='add'>+    if ((l1-&gt;fl_start == l2-&gt;fl_start) &amp;&amp; (l1-&gt;fl_end == l2-&gt;fl_end))</div><div class='add'>+        return 1;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Determine if lock is grantable or not */</div><div class='ctx'> static posix_lock_t *</div><div class='del'>-__reservelk_grantable (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+__reservelk_grantable(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        xlator_t     *this     = NULL;</div><div class='del'>-        posix_lock_t *l        = NULL;</div><div class='del'>-        posix_lock_t *ret_lock = NULL;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;reservelk_list)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "No reservelks in list");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;reservelk_list, list){</div><div class='del'>-                if (reservelks_equal (lock, l)) {</div><div class='del'>-                        ret_lock = l;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *ret_lock = NULL;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;reservelk_list)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "No reservelks in list");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;reservelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (reservelks_equal(lock, l)) {</div><div class='add'>+            ret_lock = l;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret_lock;</div><div class='add'>+    return ret_lock;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__same_owner_reservelk (posix_lock_t *l1, posix_lock_t *l2)</div><div class='add'>+__same_owner_reservelk(posix_lock_t *l1, posix_lock_t *l2)</div><div class='ctx'> {</div><div class='del'>-        return (is_same_lkowner (&amp;l1-&gt;owner, &amp;l2-&gt;owner));</div><div class='del'>-</div><div class='add'>+    return (is_same_lkowner(&amp;l1-&gt;owner, &amp;l2-&gt;owner));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static posix_lock_t *</div><div class='del'>-__matching_reservelk (pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+__matching_reservelk(pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;reservelk_list)) {</div><div class='del'>-            gf_log ("posix-locks", GF_LOG_TRACE,</div><div class='del'>-                    "reservelk list empty");</div><div class='del'>-            return NULL;</div><div class='del'>-        }</div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;reservelk_list)) {</div><div class='add'>+        gf_log("posix-locks", GF_LOG_TRACE, "reservelk list empty");</div><div class='add'>+        return NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;reservelk_list, list) {</div><div class='del'>-                if (reservelks_equal (l, lock)) {</div><div class='del'>-                        gf_log ("posix-locks", GF_LOG_TRACE,</div><div class='del'>-                                "equal reservelk found");</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;reservelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (reservelks_equal(l, lock)) {</div><div class='add'>+            gf_log("posix-locks", GF_LOG_TRACE, "equal reservelk found");</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return l;</div><div class='add'>+    return l;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-__reservelk_conflict (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                      posix_lock_t *lock)</div><div class='add'>+__reservelk_conflict(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *conf = NULL;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        conf = __matching_reservelk (pl_inode, lock);</div><div class='del'>-        if (conf) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "Matching reservelk found");</div><div class='del'>-                if (__same_owner_reservelk (lock, conf)) {</div><div class='del'>-                        list_del_init (&amp;conf-&gt;list);</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "Removing the matching reservelk for setlk to progress");</div><div class='del'>-                        __destroy_lock(conf);</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "Conflicting reservelk found");</div><div class='del'>-                        ret = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    conf = __matching_reservelk(pl_inode, lock);</div><div class='add'>+    if (conf) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "Matching reservelk found");</div><div class='add'>+        if (__same_owner_reservelk(lock, conf)) {</div><div class='add'>+            list_del_init(&amp;conf-&gt;list);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "Removing the matching reservelk for setlk to progress");</div><div class='add'>+            __destroy_lock(conf);</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE, "Conflicting reservelk found");</div><div class='add'>+            ret = 1;</div><div class='ctx'>         }</div><div class='del'>-        return ret;</div><div class='del'>-</div><div class='add'>+    }</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_verify_reservelk (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                     posix_lock_t *lock, int can_block)</div><div class='add'>+pl_verify_reservelk(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='add'>+                    int can_block)</div><div class='ctx'> {</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                if (__reservelk_conflict (this, pl_inode, lock)) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "Found conflicting reservelk. Blocking until reservelk is unlocked.");</div><div class='del'>-                        lock-&gt;blocked = can_block;</div><div class='del'>-                        list_add_tail (&amp;lock-&gt;list, &amp;pl_inode-&gt;blocked_calls);</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto unlock;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "no conflicting reservelk found. Call continuing");</div><div class='del'>-                ret = 0;</div><div class='del'>-</div><div class='add'>+    int ret = 0;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        if (__reservelk_conflict(this, pl_inode, lock)) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "Found conflicting reservelk. Blocking until reservelk is "</div><div class='add'>+                   "unlocked.");</div><div class='add'>+            lock-&gt;blocked = can_block;</div><div class='add'>+            list_add_tail(&amp;lock-&gt;list, &amp;pl_inode-&gt;blocked_calls);</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto unlock;</div><div class='ctx'>         }</div><div class='del'>-unlock:</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "no conflicting reservelk found. Call continuing");</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* Determines if lock can be granted and adds the lock. If the lock</div><div class='ctx'>  * is blocking, adds it to the blocked_reservelks.</div><div class='ctx'>  */</div><div class='ctx'> static int</div><div class='del'>-__lock_reservelk (xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='del'>-                  int can_block)</div><div class='add'>+__lock_reservelk(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='add'>+                 int can_block)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *conf = NULL;</div><div class='del'>-        int ret = -EINVAL;</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='add'>+    int ret = -EINVAL;</div><div class='ctx'> </div><div class='del'>-        conf = __reservelk_grantable (pl_inode, lock);</div><div class='del'>-        if (conf){</div><div class='del'>-                ret = -EAGAIN;</div><div class='del'>-                if (can_block == 0)</div><div class='del'>-                        goto out;</div><div class='add'>+    conf = __reservelk_grantable(pl_inode, lock);</div><div class='add'>+    if (conf) {</div><div class='add'>+        ret = -EAGAIN;</div><div class='add'>+        if (can_block == 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                list_add_tail (&amp;lock-&gt;list, &amp;pl_inode-&gt;blocked_reservelks);</div><div class='add'>+        list_add_tail(&amp;lock-&gt;list, &amp;pl_inode-&gt;blocked_reservelks);</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "%s (pid=%d) lk-owner:%s %"PRId64" - %"PRId64" =&gt; Blocked",</div><div class='del'>-                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                        lock-&gt;client_pid,</div><div class='del'>-                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                        lock-&gt;user_flock.l_start,</div><div class='del'>-                        lock-&gt;user_flock.l_len);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s (pid=%d) lk-owner:%s %" PRId64 " - %" PRId64 " =&gt; Blocked",</div><div class='add'>+               lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock", lock-&gt;client_pid,</div><div class='add'>+               lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;user_flock.l_start,</div><div class='add'>+               lock-&gt;user_flock.l_len);</div><div class='ctx'> </div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    list_add(&amp;lock-&gt;list, &amp;pl_inode-&gt;reservelk_list);</div><div class='ctx'> </div><div class='del'>-        list_add (&amp;lock-&gt;list, &amp;pl_inode-&gt;reservelk_list);</div><div class='del'>-</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static posix_lock_t *</div><div class='del'>-find_matching_reservelk (posix_lock_t *lock, pl_inode_t *pl_inode)</div><div class='add'>+find_matching_reservelk(posix_lock_t *lock, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *l = NULL;</div><div class='del'>-        list_for_each_entry (l, &amp;pl_inode-&gt;reservelk_list, list) {</div><div class='del'>-                if (reservelks_equal (l, lock))</div><div class='del'>-                        return l;</div><div class='del'>-        }</div><div class='del'>-        return NULL;</div><div class='add'>+    posix_lock_t *l = NULL;</div><div class='add'>+    list_for_each_entry(l, &amp;pl_inode-&gt;reservelk_list, list)</div><div class='add'>+    {</div><div class='add'>+        if (reservelks_equal(l, lock))</div><div class='add'>+            return l;</div><div class='add'>+    }</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Set F_UNLCK removes a lock which has the exact same lock boundaries</div><div class='ctx'>  * as the UNLCK lock specifies. If such a lock is not found, returns invalid</div><div class='ctx'>  */</div><div class='ctx'> static posix_lock_t *</div><div class='del'>-__reserve_unlock_lock (xlator_t *this, posix_lock_t *lock, pl_inode_t *pl_inode)</div><div class='add'>+__reserve_unlock_lock(xlator_t *this, posix_lock_t *lock, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='add'>+    posix_lock_t *conf = NULL;</div><div class='ctx'> </div><div class='del'>-        posix_lock_t *conf = NULL;</div><div class='del'>-</div><div class='del'>-        conf = find_matching_reservelk (lock, pl_inode);</div><div class='del'>-        if (!conf) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        " Matching lock not found for unlock");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        __delete_lock(conf);</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                " Matching lock found for unlock");</div><div class='add'>+    conf = find_matching_reservelk(lock, pl_inode);</div><div class='add'>+    if (!conf) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, " Matching lock not found for unlock");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    __delete_lock(conf);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, " Matching lock found for unlock");</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return conf;</div><div class='del'>-</div><div class='del'>-</div><div class='add'>+    return conf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__grant_blocked_reserve_locks (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                               struct list_head *granted)</div><div class='add'>+__grant_blocked_reserve_locks(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                              struct list_head *granted)</div><div class='ctx'> {</div><div class='del'>-        int              bl_ret = 0;</div><div class='del'>-        posix_lock_t *bl = NULL;</div><div class='del'>-        posix_lock_t *tmp = NULL;</div><div class='del'>-</div><div class='del'>-        struct list_head blocked_list;</div><div class='add'>+    int bl_ret = 0;</div><div class='add'>+    posix_lock_t *bl = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;blocked_list);</div><div class='del'>-        list_splice_init (&amp;pl_inode-&gt;blocked_reservelks, &amp;blocked_list);</div><div class='add'>+    struct list_head blocked_list;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (bl, tmp, &amp;blocked_list, list) {</div><div class='add'>+    INIT_LIST_HEAD(&amp;blocked_list);</div><div class='add'>+    list_splice_init(&amp;pl_inode-&gt;blocked_reservelks, &amp;blocked_list);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;bl-&gt;list);</div><div class='add'>+    list_for_each_entry_safe(bl, tmp, &amp;blocked_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;bl-&gt;list);</div><div class='ctx'> </div><div class='del'>-                bl_ret = __lock_reservelk (this, pl_inode, bl, 1);</div><div class='add'>+        bl_ret = __lock_reservelk(this, pl_inode, bl, 1);</div><div class='ctx'> </div><div class='del'>-                if (bl_ret == 0) {</div><div class='del'>-                        list_add (&amp;bl-&gt;list, granted);</div><div class='del'>-                }</div><div class='add'>+        if (bl_ret == 0) {</div><div class='add'>+            list_add(&amp;bl-&gt;list, granted);</div><div class='ctx'>         }</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Grant all reservelks blocked on lock(s) */</div><div class='ctx'> void</div><div class='del'>-grant_blocked_reserve_locks (xlator_t *this, pl_inode_t *pl_inode)</div><div class='add'>+grant_blocked_reserve_locks(xlator_t *this, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        struct list_head granted;</div><div class='del'>-        posix_lock_t *lock = NULL;</div><div class='del'>-        posix_lock_t *tmp = NULL;</div><div class='add'>+    struct list_head granted;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;granted);</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;blocked_reservelks)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "No blocked locks to be granted");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __grant_blocked_reserve_locks (this, pl_inode, &amp;granted);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;granted, list) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" =&gt; Granted",</div><div class='del'>-                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                        lock-&gt;client_pid,</div><div class='del'>-                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                        lock-&gt;user_flock.l_start,</div><div class='del'>-                        lock-&gt;user_flock.l_len);</div><div class='del'>-</div><div class='del'>-                STACK_UNWIND_STRICT (lk, lock-&gt;frame, 0, 0, &amp;lock-&gt;user_flock,</div><div class='del'>-                                     NULL);</div><div class='del'>-        }</div><div class='add'>+    INIT_LIST_HEAD(&amp;granted);</div><div class='ctx'> </div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;blocked_reservelks)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "No blocked locks to be granted");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __grant_blocked_reserve_locks(this, pl_inode, &amp;granted);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;granted, list)</div><div class='add'>+    {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64 " =&gt; Granted",</div><div class='add'>+               lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock", lock-&gt;client_pid,</div><div class='add'>+               lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;user_flock.l_start,</div><div class='add'>+               lock-&gt;user_flock.l_len);</div><div class='add'>+</div><div class='add'>+        STACK_UNWIND_STRICT(lk, lock-&gt;frame, 0, 0, &amp;lock-&gt;user_flock, NULL);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-__grant_blocked_lock_calls (xlator_t *this, pl_inode_t *pl_inode,</div><div class='del'>-                            struct list_head *granted)</div><div class='add'>+__grant_blocked_lock_calls(xlator_t *this, pl_inode_t *pl_inode,</div><div class='add'>+                           struct list_head *granted)</div><div class='ctx'> {</div><div class='del'>-        int              bl_ret = 0;</div><div class='del'>-        posix_lock_t *bl = NULL;</div><div class='del'>-        posix_lock_t *tmp = NULL;</div><div class='add'>+    int bl_ret = 0;</div><div class='add'>+    posix_lock_t *bl = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='ctx'> </div><div class='del'>-        struct list_head blocked_list;</div><div class='add'>+    struct list_head blocked_list;</div><div class='ctx'> </div><div class='del'>-        INIT_LIST_HEAD (&amp;blocked_list);</div><div class='del'>-        list_splice_init (&amp;pl_inode-&gt;blocked_reservelks, &amp;blocked_list);</div><div class='add'>+    INIT_LIST_HEAD(&amp;blocked_list);</div><div class='add'>+    list_splice_init(&amp;pl_inode-&gt;blocked_reservelks, &amp;blocked_list);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (bl, tmp, &amp;blocked_list, list) {</div><div class='add'>+    list_for_each_entry_safe(bl, tmp, &amp;blocked_list, list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;bl-&gt;list);</div><div class='ctx'> </div><div class='del'>-                list_del_init (&amp;bl-&gt;list);</div><div class='add'>+        bl_ret = pl_verify_reservelk(this, pl_inode, bl, bl-&gt;blocked);</div><div class='ctx'> </div><div class='del'>-                bl_ret = pl_verify_reservelk (this, pl_inode, bl, bl-&gt;blocked);</div><div class='del'>-</div><div class='del'>-                if (bl_ret == 0) {</div><div class='del'>-                        list_add_tail (&amp;bl-&gt;list, granted);</div><div class='del'>-                }</div><div class='add'>+        if (bl_ret == 0) {</div><div class='add'>+            list_add_tail(&amp;bl-&gt;list, granted);</div><div class='ctx'>         }</div><div class='del'>-        return;</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-grant_blocked_lock_calls (xlator_t *this, pl_inode_t *pl_inode)</div><div class='add'>+grant_blocked_lock_calls(xlator_t *this, pl_inode_t *pl_inode)</div><div class='ctx'> {</div><div class='del'>-        struct list_head granted;</div><div class='del'>-        posix_lock_t *lock = NULL;</div><div class='del'>-        posix_lock_t *tmp = NULL;</div><div class='del'>-        fd_t         *fd  = NULL;</div><div class='del'>-</div><div class='del'>-        int can_block = 0;</div><div class='del'>-        int32_t cmd = 0;</div><div class='del'>-        int ret = 0;</div><div class='del'>-</div><div class='del'>-        if (list_empty (&amp;pl_inode-&gt;blocked_calls)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "No blocked lock calls to be granted");</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    struct list_head granted;</div><div class='add'>+    posix_lock_t *lock = NULL;</div><div class='add'>+    posix_lock_t *tmp = NULL;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='ctx'> </div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                __grant_blocked_lock_calls (this, pl_inode, &amp;granted);</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-</div><div class='del'>-        list_for_each_entry_safe (lock, tmp, &amp;granted, list) {</div><div class='del'>-                fd = fd_from_fdnum (lock);</div><div class='del'>-</div><div class='del'>-                if (lock-&gt;blocked) {</div><div class='del'>-                        can_block = 1;</div><div class='del'>-                        cmd = F_SETLKW;</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                        cmd = F_SETLK;</div><div class='del'>-</div><div class='del'>-                lock-&gt;blocked = 0;</div><div class='del'>-                ret = pl_setlk (this, pl_inode, lock, can_block);</div><div class='del'>-                if (ret == -1) {</div><div class='del'>-                        if (can_block) {</div><div class='del'>-                                pl_trace_block (this, lock-&gt;frame, fd, NULL,</div><div class='del'>-                                                cmd, &amp;lock-&gt;user_flock, NULL);</div><div class='del'>-                                continue;</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_DEBUG, "returning EAGAIN");</div><div class='del'>-                                pl_trace_out (this, lock-&gt;frame, fd, NULL, cmd,</div><div class='del'>-                                              &amp;lock-&gt;user_flock, -1, EAGAIN, NULL);</div><div class='del'>-                                pl_update_refkeeper (this, fd-&gt;inode);</div><div class='del'>-                                STACK_UNWIND_STRICT (lk, lock-&gt;frame, -1,</div><div class='del'>-                                                     EAGAIN, &amp;lock-&gt;user_flock,</div><div class='del'>-                                                     NULL);</div><div class='del'>-                                __destroy_lock (lock);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+    int can_block = 0;</div><div class='add'>+    int32_t cmd = 0;</div><div class='add'>+    int ret = 0;</div><div class='ctx'> </div><div class='add'>+    if (list_empty(&amp;pl_inode-&gt;blocked_calls)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "No blocked lock calls to be granted");</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        __grant_blocked_lock_calls(this, pl_inode, &amp;granted);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+</div><div class='add'>+    list_for_each_entry_safe(lock, tmp, &amp;granted, list)</div><div class='add'>+    {</div><div class='add'>+        fd = fd_from_fdnum(lock);</div><div class='add'>+</div><div class='add'>+        if (lock-&gt;blocked) {</div><div class='add'>+            can_block = 1;</div><div class='add'>+            cmd = F_SETLKW;</div><div class='add'>+        } else</div><div class='add'>+            cmd = F_SETLK;</div><div class='add'>+</div><div class='add'>+        lock-&gt;blocked = 0;</div><div class='add'>+        ret = pl_setlk(this, pl_inode, lock, can_block);</div><div class='add'>+        if (ret == -1) {</div><div class='add'>+            if (can_block) {</div><div class='add'>+                pl_trace_block(this, lock-&gt;frame, fd, NULL, cmd,</div><div class='add'>+                               &amp;lock-&gt;user_flock, NULL);</div><div class='add'>+                continue;</div><div class='add'>+            } else {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_DEBUG, "returning EAGAIN");</div><div class='add'>+                pl_trace_out(this, lock-&gt;frame, fd, NULL, cmd,</div><div class='add'>+                             &amp;lock-&gt;user_flock, -1, EAGAIN, NULL);</div><div class='add'>+                pl_update_refkeeper(this, fd-&gt;inode);</div><div class='add'>+                STACK_UNWIND_STRICT(lk, lock-&gt;frame, -1, EAGAIN,</div><div class='add'>+                                    &amp;lock-&gt;user_flock, NULL);</div><div class='add'>+                __destroy_lock(lock);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='del'>-</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-pl_reserve_unlock (xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='add'>+pl_reserve_unlock(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock)</div><div class='ctx'> {</div><div class='del'>-        posix_lock_t *retlock = NULL;</div><div class='del'>-        int ret = -1;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-                retlock = __reserve_unlock_lock (this, lock, pl_inode);</div><div class='del'>-                if (!retlock) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "Bad Unlock issued on Inode lock");</div><div class='del'>-                        ret = -EINVAL;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "Reservelk Unlock successful");</div><div class='del'>-                __destroy_lock(retlock);</div><div class='del'>-                ret = 0;</div><div class='add'>+    posix_lock_t *retlock = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        retlock = __reserve_unlock_lock(this, lock, pl_inode);</div><div class='add'>+        if (!retlock) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "Bad Unlock issued on Inode lock");</div><div class='add'>+            ret = -EINVAL;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-out:</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        grant_blocked_reserve_locks (this, pl_inode);</div><div class='del'>-        grant_blocked_lock_calls (this, pl_inode);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "Reservelk Unlock successful");</div><div class='add'>+        __destroy_lock(retlock);</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='add'>+out:</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    grant_blocked_reserve_locks(this, pl_inode);</div><div class='add'>+    grant_blocked_lock_calls(this, pl_inode);</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-pl_reserve_setlk (xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='del'>-                  int can_block)</div><div class='add'>+pl_reserve_setlk(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,</div><div class='add'>+                 int can_block)</div><div class='ctx'> {</div><div class='del'>-        int ret = -EINVAL;</div><div class='del'>-</div><div class='del'>-        pthread_mutex_lock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        {</div><div class='del'>-</div><div class='del'>-                        ret = __lock_reservelk (this, pl_inode, lock, can_block);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" =&gt; NOK",</div><div class='del'>-                                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                        lock-&gt;client_pid,</div><div class='del'>-                                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                        lock-&gt;user_flock.l_start,</div><div class='del'>-                                        lock-&gt;user_flock.l_len);</div><div class='del'>-                        else</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" =&gt; OK",</div><div class='del'>-                                        lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='del'>-                                        lock-&gt;client_pid,</div><div class='del'>-                                        lkowner_utoa (&amp;lock-&gt;owner),</div><div class='del'>-                                        lock-&gt;fl_start,</div><div class='del'>-                                        lock-&gt;fl_end);</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-        pthread_mutex_unlock (&amp;pl_inode-&gt;mutex);</div><div class='del'>-        return ret;</div><div class='add'>+    int ret = -EINVAL;</div><div class='add'>+</div><div class='add'>+    pthread_mutex_lock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    {</div><div class='add'>+        ret = __lock_reservelk(this, pl_inode, lock, can_block);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64 " =&gt; NOK",</div><div class='add'>+                   lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                   lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner),</div><div class='add'>+                   lock-&gt;user_flock.l_start, lock-&gt;user_flock.l_len);</div><div class='add'>+        else</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+                   "%s (pid=%d) (lk-owner=%s) %" PRId64 " - %" PRId64 " =&gt; OK",</div><div class='add'>+                   lock-&gt;fl_type == F_UNLCK ? "Unlock" : "Lock",</div><div class='add'>+                   lock-&gt;client_pid, lkowner_utoa(&amp;lock-&gt;owner), lock-&gt;fl_start,</div><div class='add'>+                   lock-&gt;fl_end);</div><div class='add'>+    }</div><div class='add'>+    pthread_mutex_unlock(&amp;pl_inode-&gt;mutex);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/locks/tests/unit-test.c b/xlators/features/locks/tests/unit-test.c<br/>index 9468f9e1865..c4759bd4a5f 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/tests/unit-test.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/locks/tests/unit-test.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/locks/tests/unit-test.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/locks/tests/unit-test.c</a></div><div class='hunk'>@@ -17,43 +17,61 @@</div><div class='ctx'> #include "locks.h"</div><div class='ctx'> #include "common.h"</div><div class='ctx'> </div><div class='del'>-#define expect(cond) if (!(cond)) { goto out; }</div><div class='add'>+#define expect(cond)                                                           \</div><div class='add'>+    if (!(cond)) {                                                             \</div><div class='add'>+        goto out;                                                              \</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-extern int lock_name (pl_inode_t *, const char *, entrylk_type);</div><div class='del'>-extern int unlock_name (pl_inode_t *, const char *, entrylk_type);</div><div class='add'>+extern int</div><div class='add'>+lock_name(pl_inode_t *, const char *, entrylk_type);</div><div class='add'>+extern int</div><div class='add'>+unlock_name(pl_inode_t *, const char *, entrylk_type);</div><div class='ctx'> </div><div class='del'>-int main (int argc, char **argv)</div><div class='add'>+int</div><div class='add'>+main(int argc, char **argv)</div><div class='ctx'> {</div><div class='del'>-	int ret = 1;</div><div class='del'>-	int r = -1;</div><div class='del'>-</div><div class='del'>-	pl_inode_t *pinode = CALLOC (sizeof (pl_inode_t), 1);</div><div class='del'>-	pthread_mutex_init (&amp;pinode-&gt;dir_lock_mutex, NULL);</div><div class='del'>-	INIT_LIST_HEAD (&amp;pinode-&gt;gf_dir_locks);</div><div class='del'>-</div><div class='del'>-	r = lock_name (pinode, NULL, ENTRYLK_WRLCK); expect (r == 0);</div><div class='del'>-	{</div><div class='del'>-		r = lock_name (pinode, "foo", ENTRYLK_WRLCK); expect (r == -EAGAIN);</div><div class='del'>-	}</div><div class='del'>-	r = unlock_name (pinode, NULL, ENTRYLK_WRLCK); expect (r == 0);</div><div class='del'>-</div><div class='del'>-	r = lock_name (pinode, "foo", ENTRYLK_RDLCK); expect (r == 0);</div><div class='del'>-	{</div><div class='del'>-		r = lock_name (pinode, "foo", ENTRYLK_RDLCK); expect (r == 0);</div><div class='del'>-		{</div><div class='del'>-			r = lock_name (pinode, "foo", ENTRYLK_WRLCK); expect (r == -EAGAIN);</div><div class='del'>-		}</div><div class='del'>-		r = unlock_name (pinode, "foo", ENTRYLK_RDLCK); expect (r == 0);</div><div class='del'>-	}</div><div class='del'>-	r = unlock_name (pinode, "foo", ENTRYLK_RDLCK); expect (r == 0);</div><div class='del'>-	</div><div class='del'>-	r = lock_name (pinode, "foo", ENTRYLK_WRLCK); expect (r == 0);</div><div class='del'>-	r = unlock_name (pinode, "foo", ENTRYLK_WRLCK); expect (r == 0);</div><div class='del'>-</div><div class='del'>-	r = lock_name (pinode, "baz", ENTRYLK_WRLCK); expect (r == 0);</div><div class='del'>-	r = lock_name (pinode, "baz", ENTRYLK_RDLCK); expect (r == -EAGAIN);</div><div class='del'>-</div><div class='del'>-	ret = 0;</div><div class='add'>+    int ret = 1;</div><div class='add'>+    int r = -1;</div><div class='add'>+</div><div class='add'>+    pl_inode_t *pinode = CALLOC(sizeof(pl_inode_t), 1);</div><div class='add'>+    pthread_mutex_init(&amp;pinode-&gt;dir_lock_mutex, NULL);</div><div class='add'>+    INIT_LIST_HEAD(&amp;pinode-&gt;gf_dir_locks);</div><div class='add'>+</div><div class='add'>+    r = lock_name(pinode, NULL, ENTRYLK_WRLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+    {</div><div class='add'>+        r = lock_name(pinode, "foo", ENTRYLK_WRLCK);</div><div class='add'>+        expect(r == -EAGAIN);</div><div class='add'>+    }</div><div class='add'>+    r = unlock_name(pinode, NULL, ENTRYLK_WRLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+</div><div class='add'>+    r = lock_name(pinode, "foo", ENTRYLK_RDLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+    {</div><div class='add'>+        r = lock_name(pinode, "foo", ENTRYLK_RDLCK);</div><div class='add'>+        expect(r == 0);</div><div class='add'>+        {</div><div class='add'>+            r = lock_name(pinode, "foo", ENTRYLK_WRLCK);</div><div class='add'>+            expect(r == -EAGAIN);</div><div class='add'>+        }</div><div class='add'>+        r = unlock_name(pinode, "foo", ENTRYLK_RDLCK);</div><div class='add'>+        expect(r == 0);</div><div class='add'>+    }</div><div class='add'>+    r = unlock_name(pinode, "foo", ENTRYLK_RDLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+</div><div class='add'>+    r = lock_name(pinode, "foo", ENTRYLK_WRLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+    r = unlock_name(pinode, "foo", ENTRYLK_WRLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+</div><div class='add'>+    r = lock_name(pinode, "baz", ENTRYLK_WRLCK);</div><div class='add'>+    expect(r == 0);</div><div class='add'>+    r = lock_name(pinode, "baz", ENTRYLK_RDLCK);</div><div class='add'>+    expect(r == -EAGAIN);</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-	return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/marker/src/marker-common.c b/xlators/features/marker/src/marker-common.c<br/>index 6ec5e3cc8bc..4989efb13d6 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker-common.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/marker/src/marker-common.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker-common.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker-common.c</a></div><div class='hunk'>@@ -11,55 +11,54 @@</div><div class='ctx'> #include "marker-common.h"</div><div class='ctx'> </div><div class='ctx'> marker_inode_ctx_t *</div><div class='del'>-marker_inode_ctx_new ()</div><div class='add'>+marker_inode_ctx_new()</div><div class='ctx'> {</div><div class='del'>-        marker_inode_ctx_t *ctx = NULL;</div><div class='add'>+    marker_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        ctx = GF_CALLOC (1, sizeof (marker_inode_ctx_t),</div><div class='del'>-                         gf_marker_mt_marker_inode_ctx_t);</div><div class='del'>-        if (ctx == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    ctx = GF_CALLOC(1, sizeof(marker_inode_ctx_t),</div><div class='add'>+                    gf_marker_mt_marker_inode_ctx_t);</div><div class='add'>+    if (ctx == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ctx-&gt;quota_ctx = NULL;</div><div class='add'>+    ctx-&gt;quota_ctx = NULL;</div><div class='ctx'> out:</div><div class='del'>-        return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_force_inode_ctx_get (inode_t *inode, xlator_t *this,</div><div class='del'>-                            marker_inode_ctx_t **ctx)</div><div class='add'>+marker_force_inode_ctx_get(inode_t *inode, xlator_t *this,</div><div class='add'>+                           marker_inode_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t  ret     = -1;</div><div class='del'>-        uint64_t ctx_int = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ret = __inode_ctx_get (inode, this, &amp;ctx_int);</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        *ctx = (marker_inode_ctx_t *) (unsigned long)ctx_int;</div><div class='del'>-                else {</div><div class='del'>-                        *ctx = marker_inode_ctx_new ();</div><div class='del'>-                        if (*ctx == NULL)</div><div class='del'>-                                goto unlock;</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ret = __inode_ctx_get(inode, this, &amp;ctx_int);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            *ctx = (marker_inode_ctx_t *)(unsigned long)ctx_int;</div><div class='add'>+        else {</div><div class='add'>+            *ctx = marker_inode_ctx_new();</div><div class='add'>+            if (*ctx == NULL)</div><div class='add'>+                goto unlock;</div><div class='ctx'> </div><div class='del'>-                        ret = __inode_ctx_put (inode, this,</div><div class='del'>-                                               (uint64_t )(unsigned long) *ctx);</div><div class='del'>-                        if (ret == -1) {</div><div class='del'>-                                GF_FREE (*ctx);</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        ret = 0;</div><div class='del'>-                }</div><div class='add'>+            ret = __inode_ctx_put(inode, this, (uint64_t)(unsigned long)*ctx);</div><div class='add'>+            if (ret == -1) {</div><div class='add'>+                GF_FREE(*ctx);</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+            ret = 0;</div><div class='ctx'>         }</div><div class='del'>-unlock: UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+unlock:</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_filter_quota_xattr (dict_t *dict, char *key,</div><div class='del'>-                           data_t *value, void *data)</div><div class='add'>+marker_filter_quota_xattr(dict_t *dict, char *key, data_t *value, void *data)</div><div class='ctx'> {</div><div class='del'>-        dict_del (dict, key);</div><div class='del'>-        return 0;</div><div class='add'>+    dict_del(dict, key);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/marker/src/marker-quota-helper.c b/xlators/features/marker/src/marker-quota-helper.c<br/>index 1fbadcfe9d3..694493c778c 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker-quota-helper.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/marker/src/marker-quota-helper.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker-quota-helper.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker-quota-helper.c</a></div><div class='hunk'>@@ -14,471 +14,460 @@</div><div class='ctx'> #include "marker-mem-types.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_loc_fill (loc_t *loc, inode_t *inode, inode_t *parent, char *path)</div><div class='add'>+mq_loc_fill(loc_t *loc, inode_t *inode, inode_t *parent, char *path)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", path, out);</div><div class='del'>-        /* Not checking for parent because while filling</div><div class='del'>-         * loc of root, parent will be NULL</div><div class='del'>-         */</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", path, out);</div><div class='add'>+    /* Not checking for parent because while filling</div><div class='add'>+     * loc of root, parent will be NULL</div><div class='add'>+     */</div><div class='ctx'> </div><div class='del'>-        if (inode) {</div><div class='del'>-                loc-&gt;inode = inode_ref (inode);</div><div class='del'>-        }</div><div class='add'>+    if (inode) {</div><div class='add'>+        loc-&gt;inode = inode_ref(inode);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                loc-&gt;parent = inode_ref (parent);</div><div class='add'>+    if (parent)</div><div class='add'>+        loc-&gt;parent = inode_ref(parent);</div><div class='ctx'> </div><div class='del'>-        if (!gf_uuid_is_null (inode-&gt;gfid))</div><div class='del'>-                gf_uuid_copy (loc-&gt;gfid, inode-&gt;gfid);</div><div class='add'>+    if (!gf_uuid_is_null(inode-&gt;gfid))</div><div class='add'>+        gf_uuid_copy(loc-&gt;gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        loc-&gt;path = gf_strdup (path);</div><div class='del'>-        if (!loc-&gt;path) {</div><div class='del'>-                gf_log ("loc fill", GF_LOG_ERROR, "strdup failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    loc-&gt;path = gf_strdup(path);</div><div class='add'>+    if (!loc-&gt;path) {</div><div class='add'>+        gf_log("loc fill", GF_LOG_ERROR, "strdup failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc-&gt;name = strrchr (loc-&gt;path, '/');</div><div class='del'>-        if (loc-&gt;name)</div><div class='del'>-                loc-&gt;name++;</div><div class='del'>-        else</div><div class='del'>-                goto out;</div><div class='add'>+    loc-&gt;name = strrchr(loc-&gt;path, '/');</div><div class='add'>+    if (loc-&gt;name)</div><div class='add'>+        loc-&gt;name++;</div><div class='add'>+    else</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                loc_wipe (loc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        loc_wipe(loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mq_inode_loc_fill (const char *parent_gfid, inode_t *inode, loc_t *loc)</div><div class='add'>+mq_inode_loc_fill(const char *parent_gfid, inode_t *inode, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        char                *resolvedpath = NULL;</div><div class='del'>-        inode_t             *parent       = NULL;</div><div class='del'>-        quota_inode_ctx_t   *ctx          = NULL;</div><div class='del'>-        xlator_t            *this         = NULL;</div><div class='del'>-        int                  ret          = -1;</div><div class='del'>-</div><div class='del'>-        this = THIS;</div><div class='del'>-</div><div class='del'>-        if (inode == NULL) {</div><div class='del'>-                gf_log_callingfn ("marker", GF_LOG_ERROR, "loc fill failed, "</div><div class='del'>-                                  "inode is NULL");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    char *resolvedpath = NULL;</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    this = THIS;</div><div class='add'>+</div><div class='add'>+    if (inode == NULL) {</div><div class='add'>+        gf_log_callingfn("marker", GF_LOG_ERROR,</div><div class='add'>+                         "loc fill failed, "</div><div class='add'>+                         "inode is NULL");</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (loc == NULL)</div><div class='del'>-                return ret;</div><div class='add'>+    if (loc == NULL)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if ((inode) &amp;&amp; __is_root_gfid (inode-&gt;gfid)) {</div><div class='del'>-                loc-&gt;parent = NULL;</div><div class='del'>-                goto ignore_parent;</div><div class='del'>-        }</div><div class='add'>+    if ((inode) &amp;&amp; __is_root_gfid(inode-&gt;gfid)) {</div><div class='add'>+        loc-&gt;parent = NULL;</div><div class='add'>+        goto ignore_parent;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (parent_gfid == NULL)</div><div class='del'>-                parent = inode_parent (inode, 0, NULL);</div><div class='del'>-        else</div><div class='del'>-                parent = inode_find (inode-&gt;table,</div><div class='del'>-                                     (unsigned char *) parent_gfid);</div><div class='add'>+    if (parent_gfid == NULL)</div><div class='add'>+        parent = inode_parent(inode, 0, NULL);</div><div class='add'>+    else</div><div class='add'>+        parent = inode_find(inode-&gt;table, (unsigned char *)parent_gfid);</div><div class='ctx'> </div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-                gf_log ("marker", GF_LOG_ERROR, "parent is NULL for %s",</div><div class='del'>-                        uuid_utoa(inode-&gt;gfid));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        gf_log("marker", GF_LOG_ERROR, "parent is NULL for %s",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> ignore_parent:</div><div class='del'>-        ret = inode_path (inode, NULL, &amp;resolvedpath);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log ("marker", GF_LOG_ERROR, "failed to resolve path for %s",</div><div class='del'>-                        uuid_utoa(inode-&gt;gfid));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = mq_loc_fill (loc, inode, parent, resolvedpath);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0 || ctx == NULL)</div><div class='del'>-                ctx = mq_inode_ctx_new (inode, this);</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                        "failed for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = inode_path(inode, NULL, &amp;resolvedpath);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log("marker", GF_LOG_ERROR, "failed to resolve path for %s",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = mq_loc_fill(loc, inode, parent, resolvedpath);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0 || ctx == NULL)</div><div class='add'>+        ctx = mq_inode_ctx_new(inode, this);</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "mq_inode_ctx_new "</div><div class='add'>+               "failed for %s",</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        if (parent)</div><div class='del'>-                inode_unref (parent);</div><div class='add'>+    if (parent)</div><div class='add'>+        inode_unref(parent);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (resolvedpath);</div><div class='add'>+    GF_FREE(resolvedpath);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> quota_inode_ctx_t *</div><div class='del'>-mq_alloc_inode_ctx ()</div><div class='add'>+mq_alloc_inode_ctx()</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret    = -1;</div><div class='del'>-        quota_inode_ctx_t       *ctx    = NULL;</div><div class='del'>-</div><div class='del'>-        QUOTA_ALLOC (ctx, quota_inode_ctx_t, ret);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ctx-&gt;size = 0;</div><div class='del'>-        ctx-&gt;dirty = 0;</div><div class='del'>-        ctx-&gt;updation_status = _gf_false;</div><div class='del'>-        LOCK_INIT (&amp;ctx-&gt;lock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;ctx-&gt;contribution_head);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    QUOTA_ALLOC(ctx, quota_inode_ctx_t, ret);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ctx-&gt;size = 0;</div><div class='add'>+    ctx-&gt;dirty = 0;</div><div class='add'>+    ctx-&gt;updation_status = _gf_false;</div><div class='add'>+    LOCK_INIT(&amp;ctx-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;ctx-&gt;contribution_head);</div><div class='ctx'> out:</div><div class='del'>-        return ctx;</div><div class='add'>+    return ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-mq_contri_fini (inode_contribution_t *contri)</div><div class='add'>+mq_contri_fini(inode_contribution_t *contri)</div><div class='ctx'> {</div><div class='del'>-        LOCK_DESTROY (&amp;contri-&gt;lock);</div><div class='del'>-        GF_FREE (contri);</div><div class='add'>+    LOCK_DESTROY(&amp;contri-&gt;lock);</div><div class='add'>+    GF_FREE(contri);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-inode_contribution_t*</div><div class='del'>-mq_contri_init (inode_t *inode)</div><div class='add'>+inode_contribution_t *</div><div class='add'>+mq_contri_init(inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        inode_contribution_t *contri   = NULL;</div><div class='del'>-        int32_t               ret      = 0;</div><div class='add'>+    inode_contribution_t *contri = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='ctx'> </div><div class='del'>-        QUOTA_ALLOC (contri, inode_contribution_t, ret);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto out;</div><div class='add'>+    QUOTA_ALLOC(contri, inode_contribution_t, ret);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GF_REF_INIT (contri, mq_contri_fini);</div><div class='add'>+    GF_REF_INIT(contri, mq_contri_fini);</div><div class='ctx'> </div><div class='del'>-        contri-&gt;contribution = 0;</div><div class='del'>-        contri-&gt;file_count = 0;</div><div class='del'>-        contri-&gt;dir_count = 0;</div><div class='del'>-        gf_uuid_copy (contri-&gt;gfid, inode-&gt;gfid);</div><div class='add'>+    contri-&gt;contribution = 0;</div><div class='add'>+    contri-&gt;file_count = 0;</div><div class='add'>+    contri-&gt;dir_count = 0;</div><div class='add'>+    gf_uuid_copy(contri-&gt;gfid, inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;contri-&gt;lock);</div><div class='del'>-        INIT_LIST_HEAD (&amp;contri-&gt;contri_list);</div><div class='add'>+    LOCK_INIT(&amp;contri-&gt;lock);</div><div class='add'>+    INIT_LIST_HEAD(&amp;contri-&gt;contri_list);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return contri;</div><div class='add'>+    return contri;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_contribution_t *</div><div class='del'>-mq_get_contribution_node (inode_t *inode, quota_inode_ctx_t *ctx)</div><div class='add'>+mq_get_contribution_node(inode_t *inode, quota_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        inode_contribution_t    *contri = NULL;</div><div class='del'>-        inode_contribution_t    *temp   = NULL;</div><div class='add'>+    inode_contribution_t *contri = NULL;</div><div class='add'>+    inode_contribution_t *temp = NULL;</div><div class='add'>+</div><div class='add'>+    if (!inode || !ctx)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!inode || !ctx)</div><div class='del'>-                goto out;</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (list_empty(&amp;ctx-&gt;contribution_head))</div><div class='add'>+            goto unlock;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='add'>+        list_for_each_entry(temp, &amp;ctx-&gt;contribution_head, contri_list)</div><div class='ctx'>         {</div><div class='del'>-                if (list_empty (&amp;ctx-&gt;contribution_head))</div><div class='del'>-                        goto unlock;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (temp, &amp;ctx-&gt;contribution_head,</div><div class='del'>-                                     contri_list) {</div><div class='del'>-                        if (gf_uuid_compare (temp-&gt;gfid, inode-&gt;gfid) == 0) {</div><div class='del'>-                                contri = temp;</div><div class='del'>-                                GF_REF_GET (contri);</div><div class='del'>-                                break;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='add'>+            if (gf_uuid_compare(temp-&gt;gfid, inode-&gt;gfid) == 0) {</div><div class='add'>+                contri = temp;</div><div class='add'>+                GF_REF_GET(contri);</div><div class='add'>+                break;</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return contri;</div><div class='add'>+    return contri;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> inode_contribution_t *</div><div class='del'>-__mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='del'>-                                loc_t *loc)</div><div class='add'>+__mq_add_new_contribution_node(xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='add'>+                               loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        inode_contribution_t *contribution = NULL;</div><div class='del'>-</div><div class='del'>-        if (!loc-&gt;parent) {</div><div class='del'>-                if (!gf_uuid_is_null (loc-&gt;pargfid))</div><div class='del'>-                        loc-&gt;parent = inode_find (loc-&gt;inode-&gt;table,</div><div class='del'>-                                                  loc-&gt;pargfid);</div><div class='del'>-</div><div class='del'>-                if (!loc-&gt;parent)</div><div class='del'>-                        loc-&gt;parent = inode_parent (loc-&gt;inode, loc-&gt;pargfid,</div><div class='del'>-                                                    loc-&gt;name);</div><div class='del'>-                if (!loc-&gt;parent)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list_for_each_entry (contribution, &amp;ctx-&gt;contribution_head,</div><div class='del'>-                             contri_list) {</div><div class='del'>-                if (loc-&gt;parent &amp;&amp;</div><div class='del'>-                    gf_uuid_compare (contribution-&gt;gfid, loc-&gt;parent-&gt;gfid) == 0) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    inode_contribution_t *contribution = NULL;</div><div class='add'>+</div><div class='add'>+    if (!loc-&gt;parent) {</div><div class='add'>+        if (!gf_uuid_is_null(loc-&gt;pargfid))</div><div class='add'>+            loc-&gt;parent = inode_find(loc-&gt;inode-&gt;table, loc-&gt;pargfid);</div><div class='add'>+</div><div class='add'>+        if (!loc-&gt;parent)</div><div class='add'>+            loc-&gt;parent = inode_parent(loc-&gt;inode, loc-&gt;pargfid, loc-&gt;name);</div><div class='add'>+        if (!loc-&gt;parent)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(contribution, &amp;ctx-&gt;contribution_head, contri_list)</div><div class='add'>+    {</div><div class='add'>+        if (loc-&gt;parent &amp;&amp;</div><div class='add'>+            gf_uuid_compare(contribution-&gt;gfid, loc-&gt;parent-&gt;gfid) == 0) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        contribution = mq_contri_init (loc-&gt;parent);</div><div class='del'>-        if (contribution == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    contribution = mq_contri_init(loc-&gt;parent);</div><div class='add'>+    if (contribution == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        list_add_tail (&amp;contribution-&gt;contri_list, &amp;ctx-&gt;contribution_head);</div><div class='add'>+    list_add_tail(&amp;contribution-&gt;contri_list, &amp;ctx-&gt;contribution_head);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return contribution;</div><div class='add'>+    return contribution;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_contribution_t *</div><div class='del'>-mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='del'>-                              loc_t *loc)</div><div class='add'>+mq_add_new_contribution_node(xlator_t *this, quota_inode_ctx_t *ctx, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        inode_contribution_t *contribution = NULL;</div><div class='add'>+    inode_contribution_t *contribution = NULL;</div><div class='ctx'> </div><div class='del'>-        if ((ctx == NULL) || (loc == NULL))</div><div class='del'>-                return NULL;</div><div class='add'>+    if ((ctx == NULL) || (loc == NULL))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        if (((loc-&gt;path) &amp;&amp; (strcmp (loc-&gt;path, "/") == 0))</div><div class='del'>-            || (!loc-&gt;path &amp;&amp; gf_uuid_is_null (loc-&gt;pargfid)))</div><div class='del'>-                return NULL;</div><div class='add'>+    if (((loc-&gt;path) &amp;&amp; (strcmp(loc-&gt;path, "/") == 0)) ||</div><div class='add'>+        (!loc-&gt;path &amp;&amp; gf_uuid_is_null(loc-&gt;pargfid)))</div><div class='add'>+        return NULL;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                contribution = __mq_add_new_contribution_node (this, ctx, loc);</div><div class='del'>-                if (contribution)</div><div class='del'>-                        GF_REF_GET (contribution);</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        contribution = __mq_add_new_contribution_node(this, ctx, loc);</div><div class='add'>+        if (contribution)</div><div class='add'>+            GF_REF_GET(contribution);</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return contribution;</div><div class='add'>+    return contribution;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mq_dict_set_contribution (xlator_t *this, dict_t *dict, loc_t *loc,</div><div class='del'>-                          uuid_t gfid, char *contri_key)</div><div class='add'>+mq_dict_set_contribution(xlator_t *this, dict_t *dict, loc_t *loc, uuid_t gfid,</div><div class='add'>+                         char *contri_key)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret                  = -1;</div><div class='del'>-        char    key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", dict, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-</div><div class='del'>-        if (gfid &amp;&amp; !gf_uuid_is_null(gfid)) {</div><div class='del'>-                GET_CONTRI_KEY (this, key, gfid, ret);</div><div class='del'>-        } else if (loc-&gt;parent) {</div><div class='del'>-                GET_CONTRI_KEY (this, key, loc-&gt;parent-&gt;gfid, ret);</div><div class='del'>-        } else {</div><div class='del'>-                /* nameless lookup, fetch contributions to all parents */</div><div class='del'>-                GET_CONTRI_KEY (this, key, NULL, ret);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", dict, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+</div><div class='add'>+    if (gfid &amp;&amp; !gf_uuid_is_null(gfid)) {</div><div class='add'>+        GET_CONTRI_KEY(this, key, gfid, ret);</div><div class='add'>+    } else if (loc-&gt;parent) {</div><div class='add'>+        GET_CONTRI_KEY(this, key, loc-&gt;parent-&gt;gfid, ret);</div><div class='add'>+    } else {</div><div class='add'>+        /* nameless lookup, fetch contributions to all parents */</div><div class='add'>+        GET_CONTRI_KEY(this, key, NULL, ret);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    ret = dict_set_int64(dict, key, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    if (contri_key)</div><div class='add'>+        if (snprintf(contri_key, QUOTA_KEY_MAX, "%s", key) &gt;= QUOTA_KEY_MAX) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int64 (dict, key, 0);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (contri_key)</div><div class='del'>-                if (snprintf(contri_key, QUOTA_KEY_MAX, "%s", key)</div><div class='del'>-                    &gt;= QUOTA_KEY_MAX) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_log_callingfn (this ? this-&gt;name : "Marker",</div><div class='del'>-                                  GF_LOG_ERROR, "dict set failed");</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_log_callingfn(this ? this-&gt;name : "Marker", GF_LOG_ERROR,</div><div class='add'>+                         "dict set failed");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mq_inode_ctx_get (inode_t *inode, xlator_t *this,</div><div class='del'>-                  quota_inode_ctx_t **ctx)</div><div class='add'>+mq_inode_ctx_get(inode_t *inode, xlator_t *this, quota_inode_ctx_t **ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t             ret      = -1;</div><div class='del'>-        uint64_t            ctx_int  = 0;</div><div class='del'>-        marker_inode_ctx_t *mark_ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    uint64_t ctx_int = 0;</div><div class='add'>+    marker_inode_ctx_t *mark_ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;ctx_int);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                *ctx = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;ctx_int);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        *ctx = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mark_ctx = (marker_inode_ctx_t *) (unsigned long)ctx_int;</div><div class='del'>-        if (mark_ctx-&gt;quota_ctx == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    mark_ctx = (marker_inode_ctx_t *)(unsigned long)ctx_int;</div><div class='add'>+    if (mark_ctx-&gt;quota_ctx == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *ctx = mark_ctx-&gt;quota_ctx;</div><div class='add'>+    *ctx = mark_ctx-&gt;quota_ctx;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> quota_inode_ctx_t *</div><div class='del'>-__mq_inode_ctx_new (inode_t *inode, xlator_t *this)</div><div class='add'>+__mq_inode_ctx_new(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret        = -1;</div><div class='del'>-        quota_inode_ctx_t    *quota_ctx  = NULL;</div><div class='del'>-        marker_inode_ctx_t   *mark_ctx   = NULL;</div><div class='del'>-</div><div class='del'>-        ret = marker_force_inode_ctx_get (inode, this, &amp;mark_ctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "marker_force_inode_ctx_get() failed");</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *quota_ctx = NULL;</div><div class='add'>+    marker_inode_ctx_t *mark_ctx = NULL;</div><div class='add'>+</div><div class='add'>+    ret = marker_force_inode_ctx_get(inode, this, &amp;mark_ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "marker_force_inode_ctx_get() failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;inode-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        if (mark_ctx-&gt;quota_ctx == NULL) {</div><div class='add'>+            quota_ctx = mq_alloc_inode_ctx();</div><div class='add'>+            if (quota_ctx == NULL) {</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto unlock;</div><div class='add'>+            }</div><div class='add'>+            mark_ctx-&gt;quota_ctx = quota_ctx;</div><div class='add'>+        } else {</div><div class='add'>+            quota_ctx = mark_ctx-&gt;quota_ctx;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;inode-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                if (mark_ctx-&gt;quota_ctx == NULL) {</div><div class='del'>-                        quota_ctx = mq_alloc_inode_ctx ();</div><div class='del'>-                        if (quota_ctx == NULL) {</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto unlock;</div><div class='del'>-                        }</div><div class='del'>-                        mark_ctx-&gt;quota_ctx = quota_ctx;</div><div class='del'>-                } else {</div><div class='del'>-                        quota_ctx = mark_ctx-&gt;quota_ctx;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = 0;</div><div class='del'>-        }</div><div class='add'>+        ret = 0;</div><div class='add'>+    }</div><div class='ctx'> unlock:</div><div class='del'>-        UNLOCK (&amp;inode-&gt;lock);</div><div class='add'>+    UNLOCK(&amp;inode-&gt;lock);</div><div class='ctx'> out:</div><div class='del'>-        return quota_ctx;</div><div class='add'>+    return quota_ctx;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> quota_inode_ctx_t *</div><div class='del'>-mq_inode_ctx_new (inode_t * inode, xlator_t *this)</div><div class='add'>+mq_inode_ctx_new(inode_t *inode, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        return __mq_inode_ctx_new (inode, this);</div><div class='add'>+    return __mq_inode_ctx_new(inode, this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> quota_local_t *</div><div class='del'>-mq_local_new ()</div><div class='add'>+mq_local_new()</div><div class='ctx'> {</div><div class='del'>-        quota_local_t  *local   = NULL;</div><div class='add'>+    quota_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (THIS-&gt;local_pool);</div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    local = mem_get0(THIS-&gt;local_pool);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        local-&gt;ref = 1;</div><div class='del'>-        LOCK_INIT (&amp;local-&gt;lock);</div><div class='add'>+    local-&gt;ref = 1;</div><div class='add'>+    LOCK_INIT(&amp;local-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        local-&gt;ctx = NULL;</div><div class='del'>-        local-&gt;contri = NULL;</div><div class='add'>+    local-&gt;ctx = NULL;</div><div class='add'>+    local-&gt;contri = NULL;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> quota_local_t *</div><div class='del'>-mq_local_ref (quota_local_t *local)</div><div class='add'>+mq_local_ref(quota_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;local-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local-&gt;ref ++;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;lock);</div><div class='add'>+    LOCK(&amp;local-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;ref++;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mq_local_unref (xlator_t *this, quota_local_t *local)</div><div class='add'>+mq_local_unref(xlator_t *this, quota_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int32_t ref = 0;</div><div class='del'>-        if (local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ref = 0;</div><div class='add'>+    if (local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        QUOTA_SAFE_DECREMENT (&amp;local-&gt;lock, local-&gt;ref, ref);</div><div class='add'>+    QUOTA_SAFE_DECREMENT(&amp;local-&gt;lock, local-&gt;ref, ref);</div><div class='ctx'> </div><div class='del'>-        if (ref != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (ref != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;fd != NULL)</div><div class='del'>-                fd_unref (local-&gt;fd);</div><div class='add'>+    if (local-&gt;fd != NULL)</div><div class='add'>+        fd_unref(local-&gt;fd);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;contri)</div><div class='del'>-                GF_REF_PUT (local-&gt;contri);</div><div class='add'>+    if (local-&gt;contri)</div><div class='add'>+        GF_REF_PUT(local-&gt;contri);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;parent_loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;parent_loc);</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;local-&gt;lock);</div><div class='add'>+    LOCK_DESTROY(&amp;local-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        mem_put (local);</div><div class='add'>+    mem_put(local);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> inode_contribution_t *</div><div class='del'>-mq_get_contribution_from_loc (xlator_t *this, loc_t *loc)</div><div class='add'>+mq_get_contribution_from_loc(xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret          = 0;</div><div class='del'>-        quota_inode_ctx_t    *ctx          = NULL;</div><div class='del'>-        inode_contribution_t *contribution = NULL;</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                  "cannot get marker-quota context from inode "</div><div class='del'>-                                  "(gfid:%s, path:%s)",</div><div class='del'>-                                  uuid_utoa (loc-&gt;inode-&gt;gfid), loc-&gt;path);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        contribution = mq_get_contribution_node (loc-&gt;parent, ctx);</div><div class='del'>-        if (contribution == NULL) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                  "inode (gfid:%s, path:%s) has "</div><div class='del'>-                                  "no contribution towards parent (gfid:%s)",</div><div class='del'>-                                  uuid_utoa (loc-&gt;inode-&gt;gfid),</div><div class='del'>-                                  loc-&gt;path, uuid_utoa (loc-&gt;parent-&gt;gfid));</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    inode_contribution_t *contribution = NULL;</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                         "cannot get marker-quota context from inode "</div><div class='add'>+                         "(gfid:%s, path:%s)",</div><div class='add'>+                         uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    contribution = mq_get_contribution_node(loc-&gt;parent, ctx);</div><div class='add'>+    if (contribution == NULL) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                         "inode (gfid:%s, path:%s) has "</div><div class='add'>+                         "no contribution towards parent (gfid:%s)",</div><div class='add'>+                         uuid_utoa(loc-&gt;inode-&gt;gfid), loc-&gt;path,</div><div class='add'>+                         uuid_utoa(loc-&gt;parent-&gt;gfid));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        return contribution;</div><div class='add'>+    return contribution;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c<br/>index 8c8bfe0255a..c680bc9a475 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker-quota.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/marker/src/marker-quota.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker-quota.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker-quota.c</a></div><div class='hunk'>@@ -19,270 +19,264 @@</div><div class='ctx'> #include "quota-common-utils.h"</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_loc_copy (loc_t *dst, loc_t *src)</div><div class='add'>+mq_loc_copy(loc_t *dst, loc_t *src)</div><div class='ctx'> {</div><div class='del'>-        int ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", dst, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", src, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", dst, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", src, out);</div><div class='ctx'> </div><div class='del'>-        if (src-&gt;inode == NULL ||</div><div class='del'>-            ((src-&gt;parent == NULL) &amp;&amp; (gf_uuid_is_null (src-&gt;pargfid))</div><div class='del'>-             &amp;&amp; !__is_root_gfid (src-&gt;inode-&gt;gfid))) {</div><div class='del'>-                gf_log ("marker", GF_LOG_WARNING,</div><div class='del'>-                        "src loc is not valid");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (src-&gt;inode == NULL ||</div><div class='add'>+        ((src-&gt;parent == NULL) &amp;&amp; (gf_uuid_is_null(src-&gt;pargfid)) &amp;&amp;</div><div class='add'>+         !__is_root_gfid(src-&gt;inode-&gt;gfid))) {</div><div class='add'>+        gf_log("marker", GF_LOG_WARNING, "src loc is not valid");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (dst, src);</div><div class='add'>+    ret = loc_copy(dst, src);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-mq_set_ctx_status (quota_inode_ctx_t *ctx, gf_boolean_t *flag,</div><div class='del'>-                   gf_boolean_t status)</div><div class='add'>+mq_set_ctx_status(quota_inode_ctx_t *ctx, gf_boolean_t *flag,</div><div class='add'>+                  gf_boolean_t status)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                *flag = status;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        *flag = status;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-mq_test_and_set_ctx_status (quota_inode_ctx_t *ctx, gf_boolean_t *flag,</div><div class='del'>-                            gf_boolean_t *status)</div><div class='add'>+mq_test_and_set_ctx_status(quota_inode_ctx_t *ctx, gf_boolean_t *flag,</div><div class='add'>+                           gf_boolean_t *status)</div><div class='ctx'> {</div><div class='del'>-        gf_boolean_t    temp    = _gf_false;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                temp = *status;</div><div class='del'>-                *status = *flag;</div><div class='del'>-                *flag = temp;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    gf_boolean_t temp = _gf_false;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        temp = *status;</div><div class='add'>+        *status = *flag;</div><div class='add'>+        *flag = temp;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-mq_get_ctx_status (quota_inode_ctx_t *ctx, gf_boolean_t *flag,</div><div class='del'>-                   gf_boolean_t *status)</div><div class='add'>+mq_get_ctx_status(quota_inode_ctx_t *ctx, gf_boolean_t *flag,</div><div class='add'>+                  gf_boolean_t *status)</div><div class='ctx'> {</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                *status = *flag;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        *status = *flag;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_ctx_updation_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                            gf_boolean_t *status)</div><div class='add'>+mq_get_ctx_updation_status(quota_inode_ctx_t *ctx, gf_boolean_t *status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", status, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", status, out);</div><div class='ctx'> </div><div class='del'>-        mq_get_ctx_status (ctx, &amp;ctx-&gt;updation_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_get_ctx_status(ctx, &amp;ctx-&gt;updation_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_set_ctx_updation_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                            gf_boolean_t status)</div><div class='add'>+mq_set_ctx_updation_status(quota_inode_ctx_t *ctx, gf_boolean_t status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='ctx'> </div><div class='del'>-        mq_set_ctx_status (ctx, &amp;ctx-&gt;updation_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_set_ctx_status(ctx, &amp;ctx-&gt;updation_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_test_and_set_ctx_updation_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                                     gf_boolean_t *status)</div><div class='add'>+mq_test_and_set_ctx_updation_status(quota_inode_ctx_t *ctx,</div><div class='add'>+                                    gf_boolean_t *status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", status, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", status, out);</div><div class='ctx'> </div><div class='del'>-        mq_test_and_set_ctx_status (ctx, &amp;ctx-&gt;updation_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_test_and_set_ctx_status(ctx, &amp;ctx-&gt;updation_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_set_ctx_create_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                          gf_boolean_t status)</div><div class='add'>+mq_set_ctx_create_status(quota_inode_ctx_t *ctx, gf_boolean_t status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='ctx'> </div><div class='del'>-        mq_set_ctx_status (ctx, &amp;ctx-&gt;create_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_set_ctx_status(ctx, &amp;ctx-&gt;create_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_test_and_set_ctx_create_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                                   gf_boolean_t *status)</div><div class='add'>+mq_test_and_set_ctx_create_status(quota_inode_ctx_t *ctx, gf_boolean_t *status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", status, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", status, out);</div><div class='ctx'> </div><div class='del'>-        mq_test_and_set_ctx_status (ctx, &amp;ctx-&gt;create_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_test_and_set_ctx_status(ctx, &amp;ctx-&gt;create_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_set_ctx_dirty_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                         gf_boolean_t status)</div><div class='add'>+mq_set_ctx_dirty_status(quota_inode_ctx_t *ctx, gf_boolean_t status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='ctx'> </div><div class='del'>-        mq_set_ctx_status (ctx, &amp;ctx-&gt;dirty_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_set_ctx_status(ctx, &amp;ctx-&gt;dirty_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_test_and_set_ctx_dirty_status (quota_inode_ctx_t *ctx,</div><div class='del'>-                                  gf_boolean_t *status)</div><div class='add'>+mq_test_and_set_ctx_dirty_status(quota_inode_ctx_t *ctx, gf_boolean_t *status)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", status, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", status, out);</div><div class='ctx'> </div><div class='del'>-        mq_test_and_set_ctx_status (ctx, &amp;ctx-&gt;dirty_status, status);</div><div class='del'>-        return 0;</div><div class='add'>+    mq_test_and_set_ctx_status(ctx, &amp;ctx-&gt;dirty_status, status);</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_build_ancestry (xlator_t *this, loc_t *loc)</div><div class='add'>+mq_build_ancestry(xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret            = -1;</div><div class='del'>-        fd_t                 *fd             = NULL;</div><div class='del'>-        gf_dirent_t           entries;</div><div class='del'>-        gf_dirent_t          *entry          = NULL;</div><div class='del'>-        dict_t               *xdata          = NULL;</div><div class='del'>-        inode_t              *tmp_parent     = NULL;</div><div class='del'>-        inode_t              *tmp_inode      = NULL;</div><div class='del'>-        inode_t              *linked_inode   = NULL;</div><div class='del'>-        quota_inode_ctx_t    *ctx            = NULL;</div><div class='del'>-</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (xdata == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (xdata, GET_ANCESTRY_DENTRY_KEY, 1);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        fd = fd_anonymous (loc-&gt;inode);</div><div class='del'>-        if (fd == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "fd creation failed");</div><div class='del'>-                ret = -ENOMEM;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fd_bind (fd);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    inode_t *tmp_parent = NULL;</div><div class='add'>+    inode_t *tmp_inode = NULL;</div><div class='add'>+    inode_t *linked_inode = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (xdata == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_readdirp (this, fd, 131072, 0, &amp;entries, xdata, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                        ? GF_LOG_DEBUG:GF_LOG_ERROR, "readdirp failed "</div><div class='del'>-                        "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int8(xdata, GET_ANCESTRY_DENTRY_KEY, 1);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (list_empty (&amp;entries.list)) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = fd_anonymous(loc-&gt;inode);</div><div class='add'>+    if (fd == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "fd creation failed");</div><div class='add'>+        ret = -ENOMEM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                if (__is_root_gfid (entry-&gt;inode-&gt;gfid)) {</div><div class='del'>-                        /* The list contains a sub-list for each possible path</div><div class='del'>-                         * to the target inode. Each sub-list starts with the</div><div class='del'>-                         * root entry of the tree and is followed by the child</div><div class='del'>-                         * entries for a particular path to the target entry.</div><div class='del'>-                         * The root entry is an implied sub-list delimiter,</div><div class='del'>-                         * as it denotes we have started processing a new path.</div><div class='del'>-                         * Reset the parent pointer and continue</div><div class='del'>-                         */</div><div class='del'>-</div><div class='del'>-                        tmp_parent = NULL;</div><div class='del'>-                } else {</div><div class='del'>-                        linked_inode = inode_link (entry-&gt;inode, tmp_parent,</div><div class='del'>-                                                   entry-&gt;d_name,</div><div class='del'>-                                                   &amp;entry-&gt;d_stat);</div><div class='del'>-                        if (linked_inode) {</div><div class='del'>-                                tmp_inode = entry-&gt;inode;</div><div class='del'>-                                entry-&gt;inode = linked_inode;</div><div class='del'>-                                inode_unref (tmp_inode);</div><div class='del'>-                        } else {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "inode link failed");</div><div class='del'>-                                ret = -EINVAL;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ctx = mq_inode_ctx_new (entry-&gt;inode, this);</div><div class='del'>-                if (ctx == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s",</div><div class='del'>-                                uuid_utoa (entry-&gt;inode-&gt;gfid));</div><div class='del'>-                        ret = -ENOMEM;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* For non-directory, posix_get_ancestry_non_directory returns</div><div class='del'>-                 * all hard-links that are represented by nodes adjacent to</div><div class='del'>-                 * each other in the dentry-list.</div><div class='del'>-                 * (Unlike the directory case where adjacent nodes either have</div><div class='del'>-                 *  a parent/child relationship or belong to different paths).</div><div class='del'>-                 */</div><div class='del'>-                if (entry-&gt;inode-&gt;ia_type == IA_IFDIR)</div><div class='del'>-                        tmp_parent = entry-&gt;inode;</div><div class='del'>-        }</div><div class='add'>+    fd_bind(fd);</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;parent)</div><div class='del'>-                inode_unref (loc-&gt;parent);</div><div class='add'>+    ret = syncop_readdirp(this, fd, 131072, 0, &amp;entries, xdata, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name,</div><div class='add'>+               (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+               "readdirp failed "</div><div class='add'>+               "for %s: %s",</div><div class='add'>+               loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc-&gt;parent = inode_parent (loc-&gt;inode, 0, NULL);</div><div class='del'>-        if (loc-&gt;parent == NULL) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (list_empty(&amp;entries.list)) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+    {</div><div class='add'>+        if (__is_root_gfid(entry-&gt;inode-&gt;gfid)) {</div><div class='add'>+            /* The list contains a sub-list for each possible path</div><div class='add'>+             * to the target inode. Each sub-list starts with the</div><div class='add'>+             * root entry of the tree and is followed by the child</div><div class='add'>+             * entries for a particular path to the target entry.</div><div class='add'>+             * The root entry is an implied sub-list delimiter,</div><div class='add'>+             * as it denotes we have started processing a new path.</div><div class='add'>+             * Reset the parent pointer and continue</div><div class='add'>+             */</div><div class='add'>+</div><div class='add'>+            tmp_parent = NULL;</div><div class='add'>+        } else {</div><div class='add'>+            linked_inode = inode_link(entry-&gt;inode, tmp_parent, entry-&gt;d_name,</div><div class='add'>+                                      &amp;entry-&gt;d_stat);</div><div class='add'>+            if (linked_inode) {</div><div class='add'>+                tmp_inode = entry-&gt;inode;</div><div class='add'>+                entry-&gt;inode = linked_inode;</div><div class='add'>+                inode_unref(tmp_inode);</div><div class='add'>+            } else {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "inode link failed");</div><div class='add'>+                ret = -EINVAL;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ctx = mq_inode_ctx_new(entry-&gt;inode, this);</div><div class='add'>+        if (ctx == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(entry-&gt;inode-&gt;gfid));</div><div class='add'>+            ret = -ENOMEM;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* For non-directory, posix_get_ancestry_non_directory returns</div><div class='add'>+         * all hard-links that are represented by nodes adjacent to</div><div class='add'>+         * each other in the dentry-list.</div><div class='add'>+         * (Unlike the directory case where adjacent nodes either have</div><div class='add'>+         *  a parent/child relationship or belong to different paths).</div><div class='add'>+         */</div><div class='add'>+        if (entry-&gt;inode-&gt;ia_type == IA_IFDIR)</div><div class='add'>+            tmp_parent = entry-&gt;inode;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (loc-&gt;parent)</div><div class='add'>+        inode_unref(loc-&gt;parent);</div><div class='add'>+</div><div class='add'>+    loc-&gt;parent = inode_parent(loc-&gt;inode, 0, NULL);</div><div class='add'>+    if (loc-&gt;parent == NULL) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* This function should be used only in inspect_directory and inspect_file</div><div class='ctx'>  * function to heal quota xattrs.</div><div class='ctx'>  * Inode quota feature is introduced in 3.7.</div><div class='hunk'>@@ -293,1919 +287,2034 @@ out:</div><div class='ctx'>  * hence no healing performed.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-_quota_dict_get_meta (xlator_t *this, dict_t *dict, char *key,</div><div class='del'>-                      quota_meta_t *meta, ia_type_t ia_type,</div><div class='del'>-                      gf_boolean_t add_delta)</div><div class='add'>+_quota_dict_get_meta(xlator_t *this, dict_t *dict, char *key,</div><div class='add'>+                     quota_meta_t *meta, ia_type_t ia_type,</div><div class='add'>+                     gf_boolean_t add_delta)</div><div class='ctx'> {</div><div class='del'>-        int32_t             ret     = 0;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        ret = quota_dict_get_inode_meta (dict, key, meta);</div><div class='del'>-        if (ret == -2 &amp;&amp; (priv-&gt;feature_enabled &amp; GF_INODE_QUOTA) == 0) {</div><div class='del'>-                /* quota_dict_get_inode_meta returns -2 if</div><div class='del'>-                 * inode quota xattrs are not present.</div><div class='del'>-                 * if inode quota self heal is turned off,</div><div class='del'>-                 * then we should skip healing inode quotas</div><div class='del'>-                 */</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "inode quota disabled. "</div><div class='del'>-                        "inode quota self heal will not be performed");</div><div class='del'>-                ret = 0;</div><div class='del'>-                if (add_delta) {</div><div class='del'>-                        if (ia_type == IA_IFDIR)</div><div class='del'>-                                meta-&gt;dir_count = 1;</div><div class='del'>-                        else</div><div class='del'>-                                meta-&gt;file_count = 1;</div><div class='del'>-                }</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    ret = quota_dict_get_inode_meta(dict, key, meta);</div><div class='add'>+    if (ret == -2 &amp;&amp; (priv-&gt;feature_enabled &amp; GF_INODE_QUOTA) == 0) {</div><div class='add'>+        /* quota_dict_get_inode_meta returns -2 if</div><div class='add'>+         * inode quota xattrs are not present.</div><div class='add'>+         * if inode quota self heal is turned off,</div><div class='add'>+         * then we should skip healing inode quotas</div><div class='add'>+         */</div><div class='add'>+</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "inode quota disabled. "</div><div class='add'>+               "inode quota self heal will not be performed");</div><div class='add'>+        ret = 0;</div><div class='add'>+        if (add_delta) {</div><div class='add'>+            if (ia_type == IA_IFDIR)</div><div class='add'>+                meta-&gt;dir_count = 1;</div><div class='add'>+            else</div><div class='add'>+                meta-&gt;file_count = 1;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-quota_dict_set_size_meta (xlator_t *this, dict_t *dict,</div><div class='del'>-                          const quota_meta_t *meta)</div><div class='add'>+quota_dict_set_size_meta(xlator_t *this, dict_t *dict, const quota_meta_t *meta)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret                        = -ENOMEM;</div><div class='del'>-        quota_meta_t   *value                      = NULL;</div><div class='del'>-        char            size_key[QUOTA_KEY_MAX]    = {0, };</div><div class='del'>-</div><div class='del'>-        value = GF_MALLOC (2 * sizeof (quota_meta_t), gf_common_quota_meta_t);</div><div class='del'>-        if (value == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        value[0].size = hton64 (meta-&gt;size);</div><div class='del'>-        value[0].file_count = hton64 (meta-&gt;file_count);</div><div class='del'>-        value[0].dir_count = hton64 (meta-&gt;dir_count);</div><div class='add'>+    int32_t ret = -ENOMEM;</div><div class='add'>+    quota_meta_t *value = NULL;</div><div class='add'>+    char size_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    value = GF_MALLOC(2 * sizeof(quota_meta_t), gf_common_quota_meta_t);</div><div class='add'>+    if (value == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    value[0].size = hton64(meta-&gt;size);</div><div class='add'>+    value[0].file_count = hton64(meta-&gt;file_count);</div><div class='add'>+    value[0].dir_count = hton64(meta-&gt;dir_count);</div><div class='ctx'> </div><div class='del'>-        value[1].size = 0;</div><div class='del'>-        value[1].file_count = 0;</div><div class='del'>-        value[1].dir_count = hton64 (1);</div><div class='add'>+    value[1].size = 0;</div><div class='add'>+    value[1].file_count = 0;</div><div class='add'>+    value[1].dir_count = hton64(1);</div><div class='ctx'> </div><div class='del'>-        GET_SIZE_KEY (this, size_key, ret);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = dict_set_bin (dict, size_key, value,</div><div class='del'>-                            (sizeof (quota_meta_t) * 2));</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn ("quota", GF_LOG_ERROR, "dict set failed");</div><div class='del'>-                GF_FREE (value);</div><div class='del'>-        }</div><div class='add'>+    GET_SIZE_KEY(this, size_key, ret);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = dict_set_bin(dict, size_key, value, (sizeof(quota_meta_t) * 2));</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn("quota", GF_LOG_ERROR, "dict set failed");</div><div class='add'>+        GF_FREE(value);</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-mq_compute_delta (quota_meta_t *delta, const quota_meta_t *op1,</div><div class='del'>-                  const quota_meta_t *op2)</div><div class='add'>+mq_compute_delta(quota_meta_t *delta, const quota_meta_t *op1,</div><div class='add'>+                 const quota_meta_t *op2)</div><div class='ctx'> {</div><div class='del'>-        delta-&gt;size       = op1-&gt;size - op2-&gt;size;</div><div class='del'>-        delta-&gt;file_count = op1-&gt;file_count - op2-&gt;file_count;</div><div class='del'>-        delta-&gt;dir_count  = op1-&gt;dir_count - op2-&gt;dir_count;</div><div class='add'>+    delta-&gt;size = op1-&gt;size - op2-&gt;size;</div><div class='add'>+    delta-&gt;file_count = op1-&gt;file_count - op2-&gt;file_count;</div><div class='add'>+    delta-&gt;dir_count = op1-&gt;dir_count - op2-&gt;dir_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-mq_add_meta (quota_meta_t *dst, const quota_meta_t *src)</div><div class='add'>+mq_add_meta(quota_meta_t *dst, const quota_meta_t *src)</div><div class='ctx'> {</div><div class='del'>-        dst-&gt;size       += src-&gt;size;</div><div class='del'>-        dst-&gt;file_count += src-&gt;file_count;</div><div class='del'>-        dst-&gt;dir_count  += src-&gt;dir_count;</div><div class='add'>+    dst-&gt;size += src-&gt;size;</div><div class='add'>+    dst-&gt;file_count += src-&gt;file_count;</div><div class='add'>+    dst-&gt;dir_count += src-&gt;dir_count;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-mq_sub_meta (quota_meta_t *dst, const quota_meta_t *src)</div><div class='add'>+mq_sub_meta(quota_meta_t *dst, const quota_meta_t *src)</div><div class='ctx'> {</div><div class='del'>-        if (src == NULL) {</div><div class='del'>-                dst-&gt;size       = -dst-&gt;size;</div><div class='del'>-                dst-&gt;file_count = -dst-&gt;file_count;</div><div class='del'>-                dst-&gt;dir_count  = -dst-&gt;dir_count;</div><div class='del'>-        } else {</div><div class='del'>-                dst-&gt;size       = src-&gt;size - dst-&gt;size;</div><div class='del'>-                dst-&gt;file_count = src-&gt;file_count - dst-&gt;file_count;</div><div class='del'>-                dst-&gt;dir_count  = src-&gt;dir_count - dst-&gt;dir_count;</div><div class='del'>-        }</div><div class='add'>+    if (src == NULL) {</div><div class='add'>+        dst-&gt;size = -dst-&gt;size;</div><div class='add'>+        dst-&gt;file_count = -dst-&gt;file_count;</div><div class='add'>+        dst-&gt;dir_count = -dst-&gt;dir_count;</div><div class='add'>+    } else {</div><div class='add'>+        dst-&gt;size = src-&gt;size - dst-&gt;size;</div><div class='add'>+        dst-&gt;file_count = src-&gt;file_count - dst-&gt;file_count;</div><div class='add'>+        dst-&gt;dir_count = src-&gt;dir_count - dst-&gt;dir_count;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_are_xattrs_set (xlator_t *this, loc_t *loc, gf_boolean_t *contri_set,</div><div class='del'>-                   gf_boolean_t *size_set)</div><div class='add'>+mq_are_xattrs_set(xlator_t *this, loc_t *loc, gf_boolean_t *contri_set,</div><div class='add'>+                  gf_boolean_t *size_set)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret                         = -1;</div><div class='del'>-        char           contri_key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-        char           size_key[QUOTA_KEY_MAX]     = {0, };</div><div class='del'>-        quota_meta_t   meta                        = {0, };</div><div class='del'>-        struct iatt    stbuf                       = {0,};</div><div class='del'>-        dict_t        *dict                        = NULL;</div><div class='del'>-        dict_t        *rsp_dict                    = NULL;</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (dict == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char size_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t meta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (dict == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_req_xattr (this, loc, dict, contri_key, size_key);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_req_xattr(this, loc, dict, contri_key, size_key);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (FIRST_CHILD(this), loc, &amp;stbuf, NULL,</div><div class='del'>-                             dict, &amp;rsp_dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "lookup failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_lookup(FIRST_CHILD(this), loc, &amp;stbuf, NULL, dict, &amp;rsp_dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "lookup failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (rsp_dict == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (rsp_dict == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *contri_set = _gf_true;</div><div class='del'>-        *size_set = _gf_true;</div><div class='del'>-        if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                ret = quota_dict_get_inode_meta (rsp_dict, size_key, &amp;meta);</div><div class='del'>-                if (ret &lt; 0 || meta.dir_count == 0)</div><div class='del'>-                        *size_set = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    *contri_set = _gf_true;</div><div class='add'>+    *size_set = _gf_true;</div><div class='add'>+    if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        ret = quota_dict_get_inode_meta(rsp_dict, size_key, &amp;meta);</div><div class='add'>+        if (ret &lt; 0 || meta.dir_count == 0)</div><div class='add'>+            *size_set = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!loc_is_root(loc)) {</div><div class='del'>-                ret = quota_dict_get_inode_meta (rsp_dict, contri_key, &amp;meta);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        *contri_set = _gf_false;</div><div class='del'>-        }</div><div class='add'>+    if (!loc_is_root(loc)) {</div><div class='add'>+        ret = quota_dict_get_inode_meta(rsp_dict, contri_key, &amp;meta);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            *contri_set = _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_create_size_xattrs (xlator_t *this, quota_inode_ctx_t *ctx, loc_t *loc)</div><div class='add'>+mq_create_size_xattrs(xlator_t *this, quota_inode_ctx_t *ctx, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int32_t                ret                  = -1;</div><div class='del'>-        quota_meta_t           size                 = {0, };</div><div class='del'>-        dict_t                *dict                 = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;inode-&gt;ia_type != IA_IFDIR) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (loc-&gt;inode-&gt;ia_type != IA_IFDIR) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = quota_dict_set_size_meta (this, dict, &amp;size);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_xattrop (FIRST_CHILD(this), loc,</div><div class='del'>-                              GF_XATTROP_ADD_ARRAY64_WITH_DEFAULT, dict, NULL,</div><div class='del'>-                              NULL, NULL);</div><div class='add'>+    ret = quota_dict_set_size_meta(this, dict, &amp;size);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "xattrop failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_xattrop(FIRST_CHILD(this), loc,</div><div class='add'>+                         GF_XATTROP_ADD_ARRAY64_WITH_DEFAULT, dict, NULL, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "xattrop failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_lock (xlator_t *this, loc_t *loc, short l_type)</div><div class='add'>+mq_lock(xlator_t *this, loc_t *loc, short l_type)</div><div class='ctx'> {</div><div class='del'>-        struct gf_flock  lock  = {0, };</div><div class='del'>-        int32_t          ret   = -1;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "set lock type %d on %s",</div><div class='del'>-                l_type, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = l_type;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-</div><div class='del'>-        ret = syncop_inodelk (FIRST_CHILD(this), this-&gt;name, loc, F_SETLKW,</div><div class='del'>-                              &amp;lock, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "inodelk failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "set lock type %d on %s", l_type,</div><div class='add'>+           loc-&gt;path);</div><div class='add'>+</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = l_type;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+</div><div class='add'>+    ret = syncop_inodelk(FIRST_CHILD(this), this-&gt;name, loc, F_SETLKW, &amp;lock,</div><div class='add'>+                         NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "inodelk failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_dirty (xlator_t *this, loc_t *loc, int32_t *dirty)</div><div class='add'>+mq_get_dirty(xlator_t *this, loc_t *loc, int32_t *dirty)</div><div class='ctx'> {</div><div class='del'>-        int32_t        ret              = -1;</div><div class='del'>-        int8_t         value            = 0;</div><div class='del'>-        dict_t        *dict             = NULL;</div><div class='del'>-        dict_t        *rsp_dict         = NULL;</div><div class='del'>-        struct iatt    stbuf            = {0,};</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (dict == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int64 (dict, QUOTA_DIRTY_KEY, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "dict set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int8_t value = 0;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (dict == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (FIRST_CHILD(this), loc, &amp;stbuf, NULL,</div><div class='del'>-                             dict, &amp;rsp_dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "lookup failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int64(dict, QUOTA_DIRTY_KEY, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "dict set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(FIRST_CHILD(this), loc, &amp;stbuf, NULL, dict, &amp;rsp_dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "lookup failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_int8 (rsp_dict, QUOTA_DIRTY_KEY, &amp;value);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = dict_get_int8(rsp_dict, QUOTA_DIRTY_KEY, &amp;value);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        *dirty = value;</div><div class='add'>+    *dirty = value;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_set_dirty (xlator_t *this, loc_t *loc, int32_t dirty,</div><div class='del'>-                  int32_t *prev_dirty)</div><div class='add'>+mq_get_set_dirty(xlator_t *this, loc_t *loc, int32_t dirty, int32_t *prev_dirty)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret              = -1;</div><div class='del'>-        int8_t               value            = 0;</div><div class='del'>-        quota_inode_ctx_t   *ctx              = NULL;</div><div class='del'>-        dict_t              *dict             = NULL;</div><div class='del'>-        dict_t              *rsp_dict         = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", prev_dirty, out);</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to get inode ctx for "</div><div class='del'>-                        "%s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_int8 (dict, QUOTA_DIRTY_KEY, dirty);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_xattrop (FIRST_CHILD(this), loc, GF_XATTROP_GET_AND_SET,</div><div class='del'>-                              dict, NULL, NULL, &amp;rsp_dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                          ? GF_LOG_DEBUG:GF_LOG_ERROR, "xattrop failed "</div><div class='del'>-                          "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int8_t value = 0;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", prev_dirty, out);</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get inode ctx for "</div><div class='add'>+               "%s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        *prev_dirty = 0;</div><div class='del'>-        if (rsp_dict) {</div><div class='del'>-                ret = dict_get_int8 (rsp_dict, QUOTA_DIRTY_KEY, &amp;value);</div><div class='del'>-                if (ret == 0)</div><div class='del'>-                        *prev_dirty = value;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx-&gt;dirty = dirty;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = dict_set_int8(dict, QUOTA_DIRTY_KEY, dirty);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_xattrop(FIRST_CHILD(this), loc, GF_XATTROP_GET_AND_SET, dict,</div><div class='add'>+                         NULL, NULL, &amp;rsp_dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "xattrop failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    *prev_dirty = 0;</div><div class='add'>+    if (rsp_dict) {</div><div class='add'>+        ret = dict_get_int8(rsp_dict, QUOTA_DIRTY_KEY, &amp;value);</div><div class='add'>+        if (ret == 0)</div><div class='add'>+            *prev_dirty = value;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx-&gt;dirty = dirty;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_mark_dirty (xlator_t *this, loc_t *loc, int32_t dirty)</div><div class='add'>+mq_mark_dirty(xlator_t *this, loc_t *loc, int32_t dirty)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret      = -1;</div><div class='del'>-        dict_t            *dict     = NULL;</div><div class='del'>-        quota_inode_ctx_t *ctx      = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to get inode ctx for "</div><div class='del'>-                        "%s", loc-&gt;path);</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get inode ctx for "</div><div class='add'>+               "%s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int8 (dict, QUOTA_DIRTY_KEY, dirty);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_setxattr (FIRST_CHILD(this), loc, dict, 0, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                        ? GF_LOG_DEBUG:GF_LOG_ERROR, "setxattr dirty = %d "</div><div class='del'>-                        "failed for %s: %s", dirty, loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int8(dict, QUOTA_DIRTY_KEY, dirty);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_setxattr(FIRST_CHILD(this), loc, dict, 0, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "setxattr dirty = %d "</div><div class='add'>+            "failed for %s: %s",</div><div class='add'>+            dirty, loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx-&gt;dirty = dirty;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx-&gt;dirty = dirty;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-_mq_get_metadata (xlator_t *this, loc_t *loc, quota_meta_t *contri,</div><div class='del'>-                  quota_meta_t *size, uuid_t contri_gfid)</div><div class='add'>+_mq_get_metadata(xlator_t *this, loc_t *loc, quota_meta_t *contri,</div><div class='add'>+                 quota_meta_t *size, uuid_t contri_gfid)</div><div class='ctx'> {</div><div class='del'>-        int32_t            ret                         = -1;</div><div class='del'>-        quota_meta_t       meta                        = {0, };</div><div class='del'>-        char               contri_key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-        char               size_key[QUOTA_KEY_MAX]     = {0, };</div><div class='del'>-        dict_t            *dict                        = NULL;</div><div class='del'>-        dict_t            *rsp_dict                    = NULL;</div><div class='del'>-        struct iatt        stbuf                       = {0,};</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-</div><div class='del'>-        if (size == NULL &amp;&amp; contri == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_meta_t meta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char size_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    dict_t *rsp_dict = NULL;</div><div class='add'>+    struct iatt stbuf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+</div><div class='add'>+    if (size == NULL &amp;&amp; contri == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (dict == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (dict == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (size &amp;&amp; loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                GET_SIZE_KEY (this, size_key, ret);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                ret = dict_set_int64 (dict, size_key, 0);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "dict_set failed.");</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (size &amp;&amp; loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        GET_SIZE_KEY(this, size_key, ret);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        ret = dict_set_int64(dict, size_key, 0);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR, "dict_set failed.");</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (contri &amp;&amp; !loc_is_root(loc)) {</div><div class='del'>-                ret = mq_dict_set_contribution (this, dict, loc, contri_gfid,</div><div class='del'>-                                                contri_key);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (contri &amp;&amp; !loc_is_root(loc)) {</div><div class='add'>+        ret = mq_dict_set_contribution(this, dict, loc, contri_gfid,</div><div class='add'>+                                       contri_key);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_lookup(FIRST_CHILD(this), loc, &amp;stbuf, NULL, dict, &amp;rsp_dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "lookup failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_lookup (FIRST_CHILD(this), loc, &amp;stbuf, NULL,</div><div class='del'>-                             dict, &amp;rsp_dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "lookup failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='add'>+    if (size) {</div><div class='add'>+        if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+            ret = quota_dict_get_meta(rsp_dict, size_key, &amp;meta);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR, "dict_get failed.");</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='add'>+            }</div><div class='ctx'> </div><div class='del'>-        if (size) {</div><div class='del'>-                if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                        ret = quota_dict_get_meta (rsp_dict, size_key,</div><div class='del'>-                                                   &amp;meta);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                        "dict_get failed.");</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        size-&gt;size = meta.size;</div><div class='del'>-                        size-&gt;file_count = meta.file_count;</div><div class='del'>-                        size-&gt;dir_count = meta.dir_count;</div><div class='del'>-                } else {</div><div class='del'>-                        size-&gt;size = stbuf.ia_blocks * 512;</div><div class='del'>-                        size-&gt;file_count = 1;</div><div class='del'>-                        size-&gt;dir_count = 0;</div><div class='del'>-                }</div><div class='add'>+            size-&gt;size = meta.size;</div><div class='add'>+            size-&gt;file_count = meta.file_count;</div><div class='add'>+            size-&gt;dir_count = meta.dir_count;</div><div class='add'>+        } else {</div><div class='add'>+            size-&gt;size = stbuf.ia_blocks * 512;</div><div class='add'>+            size-&gt;file_count = 1;</div><div class='add'>+            size-&gt;dir_count = 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (contri &amp;&amp; !loc_is_root(loc)) {</div><div class='del'>-                ret = quota_dict_get_meta (rsp_dict, contri_key, &amp;meta);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        contri-&gt;size = 0;</div><div class='del'>-                        contri-&gt;file_count = 0;</div><div class='del'>-                        contri-&gt;dir_count = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        contri-&gt;size = meta.size;</div><div class='del'>-                        contri-&gt;file_count = meta.file_count;</div><div class='del'>-                        contri-&gt;dir_count = meta.dir_count;</div><div class='del'>-                }</div><div class='add'>+    if (contri &amp;&amp; !loc_is_root(loc)) {</div><div class='add'>+        ret = quota_dict_get_meta(rsp_dict, contri_key, &amp;meta);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            contri-&gt;size = 0;</div><div class='add'>+            contri-&gt;file_count = 0;</div><div class='add'>+            contri-&gt;dir_count = 0;</div><div class='add'>+        } else {</div><div class='add'>+            contri-&gt;size = meta.size;</div><div class='add'>+            contri-&gt;file_count = meta.file_count;</div><div class='add'>+            contri-&gt;dir_count = meta.dir_count;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        if (rsp_dict)</div><div class='del'>-                dict_unref (rsp_dict);</div><div class='add'>+    if (rsp_dict)</div><div class='add'>+        dict_unref(rsp_dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_metadata (xlator_t *this, loc_t *loc, quota_meta_t *contri,</div><div class='del'>-                 quota_meta_t *size, quota_inode_ctx_t *ctx,</div><div class='del'>-                 inode_contribution_t *contribution)</div><div class='add'>+mq_get_metadata(xlator_t *this, loc_t *loc, quota_meta_t *contri,</div><div class='add'>+                quota_meta_t *size, quota_inode_ctx_t *ctx,</div><div class='add'>+                inode_contribution_t *contribution)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret      = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", contribution, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", contribution, out);</div><div class='ctx'> </div><div class='del'>-        if (size == NULL &amp;&amp; contri == NULL) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (size == NULL &amp;&amp; contri == NULL) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = _mq_get_metadata (this, loc, contri, size, contribution-&gt;gfid);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = _mq_get_metadata(this, loc, contri, size, contribution-&gt;gfid);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (size) {</div><div class='del'>-                LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        ctx-&gt;size = size-&gt;size;</div><div class='del'>-                        ctx-&gt;file_count = size-&gt;file_count;</div><div class='del'>-                        ctx-&gt;dir_count = size-&gt;dir_count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK  (&amp;ctx-&gt;lock);</div><div class='add'>+    if (size) {</div><div class='add'>+        LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            ctx-&gt;size = size-&gt;size;</div><div class='add'>+            ctx-&gt;file_count = size-&gt;file_count;</div><div class='add'>+            ctx-&gt;dir_count = size-&gt;dir_count;</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (contri) {</div><div class='del'>-                LOCK (&amp;contribution-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        contribution-&gt;contribution = contri-&gt;size;</div><div class='del'>-                        contribution-&gt;file_count = contri-&gt;file_count;</div><div class='del'>-                        contribution-&gt;dir_count = contri-&gt;dir_count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;contribution-&gt;lock);</div><div class='add'>+    if (contri) {</div><div class='add'>+        LOCK(&amp;contribution-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            contribution-&gt;contribution = contri-&gt;size;</div><div class='add'>+            contribution-&gt;file_count = contri-&gt;file_count;</div><div class='add'>+            contribution-&gt;dir_count = contri-&gt;dir_count;</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;contribution-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_size (xlator_t *this, loc_t *loc, quota_meta_t *size)</div><div class='add'>+mq_get_size(xlator_t *this, loc_t *loc, quota_meta_t *size)</div><div class='ctx'> {</div><div class='del'>-        return _mq_get_metadata (this, loc, NULL, size, 0);</div><div class='add'>+    return _mq_get_metadata(this, loc, NULL, size, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_contri (xlator_t *this, loc_t *loc, quota_meta_t *contri,</div><div class='del'>-               uuid_t contri_gfid)</div><div class='add'>+mq_get_contri(xlator_t *this, loc_t *loc, quota_meta_t *contri,</div><div class='add'>+              uuid_t contri_gfid)</div><div class='ctx'> {</div><div class='del'>-        return _mq_get_metadata (this, loc, contri, NULL, contri_gfid);</div><div class='add'>+    return _mq_get_metadata(this, loc, contri, NULL, contri_gfid);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_get_delta (xlator_t *this, loc_t *loc, quota_meta_t *delta,</div><div class='del'>-              quota_inode_ctx_t *ctx, inode_contribution_t *contribution)</div><div class='add'>+mq_get_delta(xlator_t *this, loc_t *loc, quota_meta_t *delta,</div><div class='add'>+             quota_inode_ctx_t *ctx, inode_contribution_t *contribution)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret      = -1;</div><div class='del'>-        quota_meta_t    size     = {0, };</div><div class='del'>-        quota_meta_t    contri   = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", contribution, out);</div><div class='del'>-</div><div class='del'>-        ret = mq_get_metadata (this, loc, &amp;contri, &amp;size, ctx, contribution);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t contri = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", contribution, out);</div><div class='add'>+</div><div class='add'>+    ret = mq_get_metadata(this, loc, &amp;contri, &amp;size, ctx, contribution);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        mq_compute_delta (delta, &amp;size, &amp;contri);</div><div class='add'>+    mq_compute_delta(delta, &amp;size, &amp;contri);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_remove_contri (xlator_t *this, loc_t *loc, quota_inode_ctx_t *ctx,</div><div class='del'>-                  inode_contribution_t *contri, quota_meta_t *delta,</div><div class='del'>-                  uint32_t nlink)</div><div class='add'>+mq_remove_contri(xlator_t *this, loc_t *loc, quota_inode_ctx_t *ctx,</div><div class='add'>+                 inode_contribution_t *contri, quota_meta_t *delta,</div><div class='add'>+                 uint32_t nlink)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret                         = -1;</div><div class='del'>-        char                 contri_key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-</div><div class='del'>-        if (nlink == 1) {</div><div class='del'>-                /*File was a last link and has been deleted */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto done;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GET_CONTRI_KEY (this, contri_key, contri-&gt;gfid, ret);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "get contri_key "</div><div class='del'>-                        "failed for %s", uuid_utoa(contri-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = syncop_removexattr (FIRST_CHILD(this), loc, contri_key, 0, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                if (-ret == ENOENT || -ret == ESTALE || -ret == ENODATA ||</div><div class='del'>-                    -ret == ENOATTR) {</div><div class='del'>-                        /* Remove contri in done when unlink operation is</div><div class='del'>-                         * performed, so return success on ENOENT/ESTSLE</div><div class='del'>-                         * rename operation removes xattr earlier,</div><div class='del'>-                         * so return success on ENODATA</div><div class='del'>-                         */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        gf_log_callingfn (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                                          "removexattr %s failed for %s: %s",</div><div class='del'>-                                          contri_key, loc-&gt;path,</div><div class='del'>-                                          strerror (-ret));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (nlink == 1) {</div><div class='add'>+        /*File was a last link and has been deleted */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto done;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GET_CONTRI_KEY(this, contri_key, contri-&gt;gfid, ret);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "get contri_key "</div><div class='add'>+               "failed for %s",</div><div class='add'>+               uuid_utoa(contri-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_removexattr(FIRST_CHILD(this), loc, contri_key, 0, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        if (-ret == ENOENT || -ret == ESTALE || -ret == ENODATA ||</div><div class='add'>+            -ret == ENOATTR) {</div><div class='add'>+            /* Remove contri in done when unlink operation is</div><div class='add'>+             * performed, so return success on ENOENT/ESTSLE</div><div class='add'>+             * rename operation removes xattr earlier,</div><div class='add'>+             * so return success on ENODATA</div><div class='add'>+             */</div><div class='add'>+            ret = 0;</div><div class='add'>+        } else {</div><div class='add'>+            gf_log_callingfn(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                             "removexattr %s failed for %s: %s", contri_key,</div><div class='add'>+                             loc-&gt;path, strerror(-ret));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> done:</div><div class='del'>-        LOCK (&amp;contri-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                contri-&gt;contribution += delta-&gt;size;</div><div class='del'>-                contri-&gt;file_count += delta-&gt;file_count;</div><div class='del'>-                contri-&gt;dir_count += delta-&gt;dir_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;contri-&gt;lock);</div><div class='add'>+    LOCK(&amp;contri-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        contri-&gt;contribution += delta-&gt;size;</div><div class='add'>+        contri-&gt;file_count += delta-&gt;file_count;</div><div class='add'>+        contri-&gt;dir_count += delta-&gt;dir_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;contri-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        QUOTA_FREE_CONTRIBUTION_NODE (ctx, contri);</div><div class='add'>+    QUOTA_FREE_CONTRIBUTION_NODE(ctx, contri);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_update_contri (xlator_t *this, loc_t *loc, inode_contribution_t *contri,</div><div class='del'>-                  quota_meta_t *delta)</div><div class='add'>+mq_update_contri(xlator_t *this, loc_t *loc, inode_contribution_t *contri,</div><div class='add'>+                 quota_meta_t *delta)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret                         = -1;</div><div class='del'>-        char                 contri_key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-        dict_t              *dict                        = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", delta, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", contri, out);</div><div class='del'>-</div><div class='del'>-        if (quota_meta_is_null (delta)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", delta, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", contri, out);</div><div class='add'>+</div><div class='add'>+    if (quota_meta_is_null(delta)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GET_CONTRI_KEY (this, contri_key, contri-&gt;gfid, ret);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "get contri_key "</div><div class='del'>-                        "failed for %s", uuid_utoa(contri-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GET_CONTRI_KEY(this, contri_key, contri-&gt;gfid, ret);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "get contri_key "</div><div class='add'>+               "failed for %s",</div><div class='add'>+               uuid_utoa(contri-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = quota_dict_set_meta (dict, contri_key, delta,</div><div class='del'>-                                   loc-&gt;inode-&gt;ia_type);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = quota_dict_set_meta(dict, contri_key, delta, loc-&gt;inode-&gt;ia_type);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_xattrop(FIRST_CHILD(this), loc, GF_XATTROP_ADD_ARRAY64,</div><div class='del'>-                             dict, NULL, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "xattrop failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_xattrop(FIRST_CHILD(this), loc, GF_XATTROP_ADD_ARRAY64, dict,</div><div class='add'>+                         NULL, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "xattrop failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;contri-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                contri-&gt;contribution += delta-&gt;size;</div><div class='del'>-                contri-&gt;file_count += delta-&gt;file_count;</div><div class='del'>-                contri-&gt;dir_count += delta-&gt;dir_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;contri-&gt;lock);</div><div class='add'>+    LOCK(&amp;contri-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        contri-&gt;contribution += delta-&gt;size;</div><div class='add'>+        contri-&gt;file_count += delta-&gt;file_count;</div><div class='add'>+        contri-&gt;dir_count += delta-&gt;dir_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;contri-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_update_size (xlator_t *this, loc_t *loc, quota_meta_t *delta)</div><div class='add'>+mq_update_size(xlator_t *this, loc_t *loc, quota_meta_t *delta)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret              = -1;</div><div class='del'>-        quota_inode_ctx_t   *ctx              = NULL;</div><div class='del'>-        dict_t              *dict             = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", delta, out);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (quota_meta_is_null (delta)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "failed to get inode ctx for "</div><div class='del'>-                        "%s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", delta, out);</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='del'>-        if (!dict) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (quota_meta_is_null(delta)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to get inode ctx for "</div><div class='add'>+               "%s",</div><div class='add'>+               loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = quota_dict_set_size_meta (this, dict, delta);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    dict = dict_new();</div><div class='add'>+    if (!dict) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_xattrop(FIRST_CHILD(this), loc,</div><div class='del'>-                             GF_XATTROP_ADD_ARRAY64_WITH_DEFAULT, dict, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                  ? GF_LOG_DEBUG:GF_LOG_ERROR, "xattrop failed "</div><div class='del'>-                                  "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = quota_dict_set_size_meta(this, dict, delta);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx-&gt;size += delta-&gt;size;</div><div class='del'>-                ctx-&gt;file_count += delta-&gt;file_count;</div><div class='del'>-                if (ctx-&gt;dir_count == 0)</div><div class='del'>-                        ctx-&gt;dir_count += delta-&gt;dir_count + 1;</div><div class='del'>-                else</div><div class='del'>-                        ctx-&gt;dir_count += delta-&gt;dir_count;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+    ret = syncop_xattrop(FIRST_CHILD(this), loc,</div><div class='add'>+                         GF_XATTROP_ADD_ARRAY64_WITH_DEFAULT, dict, NULL, NULL,</div><div class='add'>+                         NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(</div><div class='add'>+            this-&gt;name,</div><div class='add'>+            (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+            "xattrop failed "</div><div class='add'>+            "for %s: %s",</div><div class='add'>+            loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx-&gt;size += delta-&gt;size;</div><div class='add'>+        ctx-&gt;file_count += delta-&gt;file_count;</div><div class='add'>+        if (ctx-&gt;dir_count == 0)</div><div class='add'>+            ctx-&gt;dir_count += delta-&gt;dir_count + 1;</div><div class='add'>+        else</div><div class='add'>+            ctx-&gt;dir_count += delta-&gt;dir_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_synctask_cleanup (int ret, call_frame_t *frame, void *opaque)</div><div class='add'>+mq_synctask_cleanup(int ret, call_frame_t *frame, void *opaque)</div><div class='ctx'> {</div><div class='del'>-        quota_synctask_t       *args         = NULL;</div><div class='add'>+    quota_synctask_t *args = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (opaque);</div><div class='add'>+    GF_ASSERT(opaque);</div><div class='ctx'> </div><div class='del'>-        args = (quota_synctask_t *) opaque;</div><div class='del'>-        loc_wipe (&amp;args-&gt;loc);</div><div class='add'>+    args = (quota_synctask_t *)opaque;</div><div class='add'>+    loc_wipe(&amp;args-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (args-&gt;stub)</div><div class='del'>-                call_resume (args-&gt;stub);</div><div class='add'>+    if (args-&gt;stub)</div><div class='add'>+        call_resume(args-&gt;stub);</div><div class='ctx'> </div><div class='del'>-        if (!args-&gt;is_static)</div><div class='del'>-                GF_FREE (args);</div><div class='add'>+    if (!args-&gt;is_static)</div><div class='add'>+        GF_FREE(args);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_synctask1 (xlator_t *this, synctask_fn_t task, gf_boolean_t spawn,</div><div class='del'>-              loc_t *loc, quota_meta_t *contri, uint32_t nlink,</div><div class='del'>-              call_stub_t *stub)</div><div class='add'>+mq_synctask1(xlator_t *this, synctask_fn_t task, gf_boolean_t spawn, loc_t *loc,</div><div class='add'>+             quota_meta_t *contri, uint32_t nlink, call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        int32_t              ret         = -1;</div><div class='del'>-        quota_synctask_t    *args        = NULL;</div><div class='del'>-        quota_synctask_t     static_args = {0, };</div><div class='del'>-</div><div class='del'>-        if (spawn) {</div><div class='del'>-                QUOTA_ALLOC_OR_GOTO (args, quota_synctask_t, ret, out);</div><div class='del'>-                args-&gt;is_static = _gf_false;</div><div class='del'>-        } else {</div><div class='del'>-                args = &amp;static_args;</div><div class='del'>-                args-&gt;is_static = _gf_true;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        args-&gt;this = this;</div><div class='del'>-        args-&gt;stub = stub;</div><div class='del'>-        loc_copy (&amp;args-&gt;loc, loc);</div><div class='del'>-        args-&gt;ia_nlink = nlink;</div><div class='del'>-</div><div class='del'>-        if (contri) {</div><div class='del'>-                args-&gt;contri = *contri;</div><div class='del'>-        } else {</div><div class='del'>-                args-&gt;contri.size = -1;</div><div class='del'>-                args-&gt;contri.file_count = -1;</div><div class='del'>-                args-&gt;contri.dir_count = -1;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (spawn) {</div><div class='del'>-                ret = synctask_new1 (this-&gt;ctx-&gt;env, 1024 * 16, task,</div><div class='del'>-                                      mq_synctask_cleanup, NULL, args);</div><div class='del'>-                if (ret) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to spawn "</div><div class='del'>-                                "new synctask");</div><div class='del'>-                        mq_synctask_cleanup (ret, NULL, args);</div><div class='del'>-                }</div><div class='del'>-        } else {</div><div class='del'>-                ret = task (args);</div><div class='del'>-                mq_synctask_cleanup (ret, NULL, args);</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_synctask_t *args = NULL;</div><div class='add'>+    quota_synctask_t static_args = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    if (spawn) {</div><div class='add'>+        QUOTA_ALLOC_OR_GOTO(args, quota_synctask_t, ret, out);</div><div class='add'>+        args-&gt;is_static = _gf_false;</div><div class='add'>+    } else {</div><div class='add'>+        args = &amp;static_args;</div><div class='add'>+        args-&gt;is_static = _gf_true;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    args-&gt;this = this;</div><div class='add'>+    args-&gt;stub = stub;</div><div class='add'>+    loc_copy(&amp;args-&gt;loc, loc);</div><div class='add'>+    args-&gt;ia_nlink = nlink;</div><div class='add'>+</div><div class='add'>+    if (contri) {</div><div class='add'>+        args-&gt;contri = *contri;</div><div class='add'>+    } else {</div><div class='add'>+        args-&gt;contri.size = -1;</div><div class='add'>+        args-&gt;contri.file_count = -1;</div><div class='add'>+        args-&gt;contri.dir_count = -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (spawn) {</div><div class='add'>+        ret = synctask_new1(this-&gt;ctx-&gt;env, 1024 * 16, task,</div><div class='add'>+                            mq_synctask_cleanup, NULL, args);</div><div class='add'>+        if (ret) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Failed to spawn "</div><div class='add'>+                   "new synctask");</div><div class='add'>+            mq_synctask_cleanup(ret, NULL, args);</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        ret = task(args);</div><div class='add'>+        mq_synctask_cleanup(ret, NULL, args);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_synctask (xlator_t *this, synctask_fn_t task, gf_boolean_t spawn, loc_t *loc)</div><div class='add'>+mq_synctask(xlator_t *this, synctask_fn_t task, gf_boolean_t spawn, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        return mq_synctask1 (this, task, spawn, loc, NULL, -1, NULL);</div><div class='add'>+    return mq_synctask1(this, task, spawn, loc, NULL, -1, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_prevalidate_txn (xlator_t *this, loc_t *origin_loc, loc_t *loc,</div><div class='del'>-                    quota_inode_ctx_t **ctx, struct iatt *buf)</div><div class='add'>+mq_prevalidate_txn(xlator_t *this, loc_t *origin_loc, loc_t *loc,</div><div class='add'>+                   quota_inode_ctx_t **ctx, struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret     = -1;</div><div class='del'>-        quota_inode_ctx_t    *ctxtmp  = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *ctxtmp = NULL;</div><div class='ctx'> </div><div class='del'>-        if (buf) {</div><div class='del'>-                if (buf-&gt;ia_type == IA_IFREG &amp;&amp; IS_DHT_LINKFILE_MODE(buf))</div><div class='del'>-                        goto out;</div><div class='add'>+    if (buf) {</div><div class='add'>+        if (buf-&gt;ia_type == IA_IFREG &amp;&amp; IS_DHT_LINKFILE_MODE(buf))</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (buf-&gt;ia_type != IA_IFREG &amp;&amp; buf-&gt;ia_type != IA_IFLNK &amp;&amp;</div><div class='del'>-                    buf-&gt;ia_type != IA_IFDIR)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+        if (buf-&gt;ia_type != IA_IFREG &amp;&amp; buf-&gt;ia_type != IA_IFLNK &amp;&amp;</div><div class='add'>+            buf-&gt;ia_type != IA_IFDIR)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (origin_loc == NULL || origin_loc-&gt;inode == NULL ||</div><div class='del'>-            gf_uuid_is_null(origin_loc-&gt;inode-&gt;gfid))</div><div class='del'>-                goto out;</div><div class='add'>+    if (origin_loc == NULL || origin_loc-&gt;inode == NULL ||</div><div class='add'>+        gf_uuid_is_null(origin_loc-&gt;inode-&gt;gfid))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        loc_copy (loc, origin_loc);</div><div class='add'>+    loc_copy(loc, origin_loc);</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (loc-&gt;gfid))</div><div class='del'>-                gf_uuid_copy (loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='add'>+    if (gf_uuid_is_null(loc-&gt;gfid))</div><div class='add'>+        gf_uuid_copy(loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        if (!loc_is_root(loc) &amp;&amp; loc-&gt;parent == NULL)</div><div class='del'>-                loc-&gt;parent = inode_parent (loc-&gt;inode, 0, NULL);</div><div class='add'>+    if (!loc_is_root(loc) &amp;&amp; loc-&gt;parent == NULL)</div><div class='add'>+        loc-&gt;parent = inode_parent(loc-&gt;inode, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctxtmp);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log_callingfn (this-&gt;name, GF_LOG_WARNING, "inode ctx for "</div><div class='del'>-                                  "is NULL for %s", loc-&gt;path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-        if (ctx)</div><div class='del'>-                *ctx = ctxtmp;</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctxtmp);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log_callingfn(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                         "inode ctx for "</div><div class='add'>+                         "is NULL for %s",</div><div class='add'>+                         loc-&gt;path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    if (ctx)</div><div class='add'>+        *ctx = ctxtmp;</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_create_xattrs_task (void *opaque)</div><div class='add'>+mq_create_xattrs_task(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret        = -1;</div><div class='del'>-        gf_boolean_t             locked     = _gf_false;</div><div class='del'>-        gf_boolean_t             contri_set = _gf_false;</div><div class='del'>-        gf_boolean_t             size_set   = _gf_false;</div><div class='del'>-        gf_boolean_t             need_txn   = _gf_false;</div><div class='del'>-        quota_synctask_t        *args       = NULL;</div><div class='del'>-        quota_inode_ctx_t       *ctx        = NULL;</div><div class='del'>-        xlator_t                *this       = NULL;</div><div class='del'>-        loc_t                   *loc        = NULL;</div><div class='del'>-        gf_boolean_t             status     = _gf_false;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (opaque);</div><div class='del'>-</div><div class='del'>-        args = (quota_synctask_t *) opaque;</div><div class='del'>-        loc = &amp;args-&gt;loc;</div><div class='del'>-        this = args-&gt;this;</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "Failed to"</div><div class='del'>-                        "get inode ctx, aborting quota create txn");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t locked = _gf_false;</div><div class='add'>+    gf_boolean_t contri_set = _gf_false;</div><div class='add'>+    gf_boolean_t size_set = _gf_false;</div><div class='add'>+    gf_boolean_t need_txn = _gf_false;</div><div class='add'>+    quota_synctask_t *args = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    gf_boolean_t status = _gf_false;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(opaque);</div><div class='add'>+</div><div class='add'>+    args = (quota_synctask_t *)opaque;</div><div class='add'>+    loc = &amp;args-&gt;loc;</div><div class='add'>+    this = args-&gt;this;</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "Failed to"</div><div class='add'>+               "get inode ctx, aborting quota create txn");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='del'>-                /* lock not required for files */</div><div class='del'>-                ret = mq_lock (this, loc, F_WRLCK);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                locked = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (loc-&gt;inode-&gt;ia_type == IA_IFDIR) {</div><div class='add'>+        /* lock not required for files */</div><div class='add'>+        ret = mq_lock(this, loc, F_WRLCK);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        locked = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_are_xattrs_set (this, loc, &amp;contri_set, &amp;size_set);</div><div class='del'>-        if (ret &lt; 0 || (contri_set &amp;&amp; size_set))</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_are_xattrs_set(this, loc, &amp;contri_set, &amp;size_set);</div><div class='add'>+    if (ret &lt; 0 || (contri_set &amp;&amp; size_set))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        mq_set_ctx_create_status (ctx, _gf_false);</div><div class='del'>-        status = _gf_true;</div><div class='add'>+    mq_set_ctx_create_status(ctx, _gf_false);</div><div class='add'>+    status = _gf_true;</div><div class='ctx'> </div><div class='del'>-        if (loc-&gt;inode-&gt;ia_type == IA_IFDIR &amp;&amp; size_set == _gf_false) {</div><div class='del'>-                ret = mq_create_size_xattrs (this, ctx, loc);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (loc-&gt;inode-&gt;ia_type == IA_IFDIR &amp;&amp; size_set == _gf_false) {</div><div class='add'>+        ret = mq_create_size_xattrs(this, ctx, loc);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        need_txn = _gf_true;</div><div class='add'>+    need_txn = _gf_true;</div><div class='ctx'> out:</div><div class='del'>-        if (locked)</div><div class='del'>-                ret = mq_lock (this, loc, F_UNLCK);</div><div class='add'>+    if (locked)</div><div class='add'>+        ret = mq_lock(this, loc, F_UNLCK);</div><div class='ctx'> </div><div class='del'>-        if (status == _gf_false)</div><div class='del'>-                mq_set_ctx_create_status (ctx, _gf_false);</div><div class='add'>+    if (status == _gf_false)</div><div class='add'>+        mq_set_ctx_create_status(ctx, _gf_false);</div><div class='ctx'> </div><div class='del'>-        if (need_txn)</div><div class='del'>-                ret = mq_initiate_quota_blocking_txn (this, loc, NULL);</div><div class='add'>+    if (need_txn)</div><div class='add'>+        ret = mq_initiate_quota_blocking_txn(this, loc, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-_mq_create_xattrs_txn (xlator_t *this, loc_t *origin_loc, struct iatt *buf,</div><div class='del'>-                       gf_boolean_t spawn)</div><div class='add'>+_mq_create_xattrs_txn(xlator_t *this, loc_t *origin_loc, struct iatt *buf,</div><div class='add'>+                      gf_boolean_t spawn)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret          = -1;</div><div class='del'>-        quota_inode_ctx_t       *ctx          = NULL;</div><div class='del'>-        gf_boolean_t             status       = _gf_true;</div><div class='del'>-        loc_t                    loc          = {0, };</div><div class='del'>-        inode_contribution_t    *contribution = NULL;</div><div class='del'>-</div><div class='del'>-        ret = mq_prevalidate_txn (this, origin_loc, &amp;loc, &amp;ctx, buf);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    gf_boolean_t status = _gf_true;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_contribution_t *contribution = NULL;</div><div class='add'>+</div><div class='add'>+    ret = mq_prevalidate_txn(this, origin_loc, &amp;loc, &amp;ctx, buf);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mq_test_and_set_ctx_create_status (ctx, &amp;status);</div><div class='del'>-        if (ret &lt; 0 || status == _gf_true)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_test_and_set_ctx_create_status(ctx, &amp;status);</div><div class='add'>+    if (ret &lt; 0 || status == _gf_true)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (!loc_is_root(&amp;loc) &amp;&amp; loc.parent) {</div><div class='del'>-                contribution = mq_add_new_contribution_node (this, ctx, &amp;loc);</div><div class='del'>-                if (contribution == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "cannot add a new contribution node "</div><div class='del'>-                                "(%s)", uuid_utoa (loc.gfid));</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                } else {</div><div class='del'>-                        GF_REF_PUT (contribution);</div><div class='del'>-                }</div><div class='add'>+    if (!loc_is_root(&amp;loc) &amp;&amp; loc.parent) {</div><div class='add'>+        contribution = mq_add_new_contribution_node(this, ctx, &amp;loc);</div><div class='add'>+        if (contribution == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "cannot add a new contribution node "</div><div class='add'>+                   "(%s)",</div><div class='add'>+                   uuid_utoa(loc.gfid));</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        } else {</div><div class='add'>+            GF_REF_PUT(contribution);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_synctask (this, mq_create_xattrs_task, spawn, &amp;loc);</div><div class='add'>+    ret = mq_synctask(this, mq_create_xattrs_task, spawn, &amp;loc);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; status == _gf_false)</div><div class='del'>-                mq_set_ctx_create_status (ctx, _gf_false);</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; status == _gf_false)</div><div class='add'>+        mq_set_ctx_create_status(ctx, _gf_false);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_create_xattrs_txn (xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='add'>+mq_create_xattrs_txn(xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret        = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = _mq_create_xattrs_txn (this, loc, buf, _gf_true);</div><div class='add'>+    ret = _mq_create_xattrs_txn(this, loc, buf, _gf_true);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_create_xattrs_blocking_txn (xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='add'>+mq_create_xattrs_blocking_txn(xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret        = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = _mq_create_xattrs_txn (this, loc, buf, _gf_false);</div><div class='add'>+    ret = _mq_create_xattrs_txn(this, loc, buf, _gf_false);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_reduce_parent_size_task (void *opaque)</div><div class='add'>+mq_reduce_parent_size_task(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret           = -1;</div><div class='del'>-        int32_t                  prev_dirty    = 0;</div><div class='del'>-        quota_inode_ctx_t       *ctx           = NULL;</div><div class='del'>-        quota_inode_ctx_t       *parent_ctx    = NULL;</div><div class='del'>-        inode_contribution_t    *contribution  = NULL;</div><div class='del'>-        quota_meta_t             delta         = {0, };</div><div class='del'>-        quota_meta_t             contri        = {0, };</div><div class='del'>-        loc_t                    parent_loc    = {0,};</div><div class='del'>-        gf_boolean_t             locked        = _gf_false;</div><div class='del'>-        gf_boolean_t             dirty         = _gf_false;</div><div class='del'>-        quota_synctask_t        *args          = NULL;</div><div class='del'>-        xlator_t                *this          = NULL;</div><div class='del'>-        loc_t                   *loc           = NULL;</div><div class='del'>-        gf_boolean_t             remove_xattr  = _gf_true;</div><div class='del'>-        uint32_t                 nlink         = 0;</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (opaque);</div><div class='del'>-</div><div class='del'>-        args = (quota_synctask_t *) opaque;</div><div class='del'>-        loc = &amp;args-&gt;loc;</div><div class='del'>-        contri = args-&gt;contri;</div><div class='del'>-        nlink = args-&gt;ia_nlink;</div><div class='del'>-        this = args-&gt;this;</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_loc_fill (NULL, loc-&gt;parent, &amp;parent_loc);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t prev_dirty = 0;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    quota_inode_ctx_t *parent_ctx = NULL;</div><div class='add'>+    inode_contribution_t *contribution = NULL;</div><div class='add'>+    quota_meta_t delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t contri = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t parent_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t locked = _gf_false;</div><div class='add'>+    gf_boolean_t dirty = _gf_false;</div><div class='add'>+    quota_synctask_t *args = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    gf_boolean_t remove_xattr = _gf_true;</div><div class='add'>+    uint32_t nlink = 0;</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(opaque);</div><div class='add'>+</div><div class='add'>+    args = (quota_synctask_t *)opaque;</div><div class='add'>+    loc = &amp;args-&gt;loc;</div><div class='add'>+    contri = args-&gt;contri;</div><div class='add'>+    nlink = args-&gt;ia_nlink;</div><div class='add'>+    this = args-&gt;this;</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_loc_fill(NULL, loc-&gt;parent, &amp;parent_loc);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "parent_loc fill failed for "</div><div class='add'>+               "child inode %s: ",</div><div class='add'>+               uuid_utoa(loc-&gt;inode-&gt;gfid));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = mq_lock(this, &amp;parent_loc, F_WRLCK);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    locked = _gf_true;</div><div class='add'>+</div><div class='add'>+    if (contri.size &gt;= 0) {</div><div class='add'>+        /* contri parameter is supplied only for rename operation.</div><div class='add'>+         * remove xattr is alreday performed, we need to skip</div><div class='add'>+         * removexattr for rename operation</div><div class='add'>+         */</div><div class='add'>+        remove_xattr = _gf_false;</div><div class='add'>+        delta.size = contri.size;</div><div class='add'>+        delta.file_count = contri.file_count;</div><div class='add'>+        delta.dir_count = contri.dir_count;</div><div class='add'>+    } else {</div><div class='add'>+        remove_xattr = _gf_true;</div><div class='add'>+</div><div class='add'>+        ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "parent_loc fill failed for "</div><div class='del'>-                        "child inode %s: ", uuid_utoa (loc-&gt;inode-&gt;gfid));</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log_callingfn(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                             "ctx for"</div><div class='add'>+                             " the node %s is NULL",</div><div class='add'>+                             loc-&gt;path);</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = mq_lock (this, &amp;parent_loc, F_WRLCK);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        locked = _gf_true;</div><div class='add'>+        contribution = mq_get_contribution_node(loc-&gt;parent, ctx);</div><div class='add'>+        if (contribution == NULL) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "contribution for the node %s is NULL", loc-&gt;path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='ctx'> </div><div class='del'>-        if (contri.size &gt;= 0) {</div><div class='del'>-                /* contri parameter is supplied only for rename operation.</div><div class='del'>-                 * remove xattr is alreday performed, we need to skip</div><div class='del'>-                 * removexattr for rename operation</div><div class='del'>-                 */</div><div class='del'>-                remove_xattr = _gf_false;</div><div class='del'>-                delta.size = contri.size;</div><div class='del'>-                delta.file_count = contri.file_count;</div><div class='del'>-                delta.dir_count = contri.dir_count;</div><div class='del'>-        } else {</div><div class='del'>-                remove_xattr = _gf_true;</div><div class='del'>-</div><div class='del'>-                ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log_callingfn (this-&gt;name, GF_LOG_WARNING, "ctx for"</div><div class='del'>-                                          " the node %s is NULL", loc-&gt;path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                contribution = mq_get_contribution_node (loc-&gt;parent, ctx);</div><div class='del'>-                if (contribution == NULL) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "contribution for the node %s is NULL",</div><div class='del'>-                                loc-&gt;path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;contribution-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        delta.size = contribution-&gt;contribution;</div><div class='del'>-                        delta.file_count = contribution-&gt;file_count;</div><div class='del'>-                        delta.dir_count = contribution-&gt;dir_count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;contribution-&gt;lock);</div><div class='add'>+        LOCK(&amp;contribution-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            delta.size = contribution-&gt;contribution;</div><div class='add'>+            delta.file_count = contribution-&gt;file_count;</div><div class='add'>+            delta.dir_count = contribution-&gt;dir_count;</div><div class='ctx'>         }</div><div class='add'>+        UNLOCK(&amp;contribution-&gt;lock);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_get_set_dirty (this, &amp;parent_loc, 1, &amp;prev_dirty);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        dirty = _gf_true;</div><div class='add'>+    ret = mq_get_set_dirty(this, &amp;parent_loc, 1, &amp;prev_dirty);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    dirty = _gf_true;</div><div class='ctx'> </div><div class='del'>-        mq_sub_meta (&amp;delta, NULL);</div><div class='add'>+    mq_sub_meta(&amp;delta, NULL);</div><div class='ctx'> </div><div class='del'>-        if (remove_xattr) {</div><div class='del'>-                ret = mq_remove_contri (this, loc, ctx, contribution, &amp;delta,</div><div class='del'>-                                        nlink);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    if (remove_xattr) {</div><div class='add'>+        ret = mq_remove_contri(this, loc, ctx, contribution, &amp;delta, nlink);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (quota_meta_is_null (&amp;delta))</div><div class='del'>-                goto out;</div><div class='add'>+    if (quota_meta_is_null(&amp;delta))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mq_update_size (this, &amp;parent_loc, &amp;delta);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_update_size(this, &amp;parent_loc, &amp;delta);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dirty) {</div><div class='del'>-                if (ret &lt; 0 || prev_dirty) {</div><div class='del'>-                        /* On failure clear dirty status flag.</div><div class='del'>-                         * In the next lookup inspect_directory_xattr</div><div class='del'>-                         * can set the status flag and fix the</div><div class='del'>-                         * dirty directory.</div><div class='del'>-                         * Do the same if dir was dirty before</div><div class='del'>-                         * the txn</div><div class='del'>-                         */</div><div class='del'>-                        ret = mq_inode_ctx_get (parent_loc.inode, this,</div><div class='del'>-                                                &amp;parent_ctx);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                mq_set_ctx_dirty_status (parent_ctx, _gf_false);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = mq_mark_dirty (this, &amp;parent_loc, 0);</div><div class='del'>-                }</div><div class='add'>+    if (dirty) {</div><div class='add'>+        if (ret &lt; 0 || prev_dirty) {</div><div class='add'>+            /* On failure clear dirty status flag.</div><div class='add'>+             * In the next lookup inspect_directory_xattr</div><div class='add'>+             * can set the status flag and fix the</div><div class='add'>+             * dirty directory.</div><div class='add'>+             * Do the same if dir was dirty before</div><div class='add'>+             * the txn</div><div class='add'>+             */</div><div class='add'>+            ret = mq_inode_ctx_get(parent_loc.inode, this, &amp;parent_ctx);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                mq_set_ctx_dirty_status(parent_ctx, _gf_false);</div><div class='add'>+        } else {</div><div class='add'>+            ret = mq_mark_dirty(this, &amp;parent_loc, 0);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (locked)</div><div class='del'>-                ret = mq_lock (this, &amp;parent_loc, F_UNLCK);</div><div class='add'>+    if (locked)</div><div class='add'>+        ret = mq_lock(this, &amp;parent_loc, F_UNLCK);</div><div class='ctx'> </div><div class='del'>-        if (ret &gt;= 0)</div><div class='del'>-                ret = mq_initiate_quota_blocking_txn (this, &amp;parent_loc, NULL);</div><div class='add'>+    if (ret &gt;= 0)</div><div class='add'>+        ret = mq_initiate_quota_blocking_txn(this, &amp;parent_loc, NULL);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;parent_loc);</div><div class='add'>+    loc_wipe(&amp;parent_loc);</div><div class='ctx'> </div><div class='del'>-        if (contribution)</div><div class='del'>-                GF_REF_PUT (contribution);</div><div class='add'>+    if (contribution)</div><div class='add'>+        GF_REF_PUT(contribution);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_reduce_parent_size_txn (xlator_t *this, loc_t *origin_loc,</div><div class='del'>-                           quota_meta_t *contri, uint32_t nlink,</div><div class='del'>-                           call_stub_t *stub)</div><div class='add'>+mq_reduce_parent_size_txn(xlator_t *this, loc_t *origin_loc,</div><div class='add'>+                          quota_meta_t *contri, uint32_t nlink,</div><div class='add'>+                          call_stub_t *stub)</div><div class='ctx'> {</div><div class='del'>-        int32_t                  ret           = -1;</div><div class='del'>-        loc_t                    loc           = {0, };</div><div class='del'>-        gf_boolean_t             resume_stub   = _gf_true;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t resume_stub = _gf_true;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", origin_loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", origin_loc, out);</div><div class='ctx'> </div><div class='del'>-        ret = mq_prevalidate_txn (this, origin_loc, &amp;loc, NULL, NULL);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_prevalidate_txn(this, origin_loc, &amp;loc, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (loc_is_root(&amp;loc)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (loc_is_root(&amp;loc)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        resume_stub = _gf_false;</div><div class='del'>-        ret = mq_synctask1 (this, mq_reduce_parent_size_task, _gf_true, &amp;loc,</div><div class='del'>-                            contri, nlink, stub);</div><div class='add'>+    resume_stub = _gf_false;</div><div class='add'>+    ret = mq_synctask1(this, mq_reduce_parent_size_task, _gf_true, &amp;loc, contri,</div><div class='add'>+                       nlink, stub);</div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (resume_stub &amp;&amp; stub)</div><div class='del'>-                call_resume (stub);</div><div class='add'>+    if (resume_stub &amp;&amp; stub)</div><div class='add'>+        call_resume(stub);</div><div class='ctx'> </div><div class='del'>-        if (ret)</div><div class='del'>-                gf_log_callingfn (this ? this-&gt;name : "Marker", GF_LOG_ERROR,</div><div class='del'>-                                  "mq_reduce_parent_size_txn failed");</div><div class='add'>+    if (ret)</div><div class='add'>+        gf_log_callingfn(this ? this-&gt;name : "Marker", GF_LOG_ERROR,</div><div class='add'>+                         "mq_reduce_parent_size_txn failed");</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_initiate_quota_task (void *opaque)</div><div class='add'>+mq_initiate_quota_task(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int32_t                ret        = -1;</div><div class='del'>-        int32_t                prev_dirty = 0;</div><div class='del'>-        loc_t                  child_loc  = {0,};</div><div class='del'>-        loc_t                  parent_loc = {0,};</div><div class='del'>-        gf_boolean_t           locked     = _gf_false;</div><div class='del'>-        gf_boolean_t           dirty      = _gf_false;</div><div class='del'>-        gf_boolean_t           status     = _gf_false;</div><div class='del'>-        quota_meta_t           delta      = {0, };</div><div class='del'>-        quota_synctask_t      *args       = NULL;</div><div class='del'>-        xlator_t              *this       = NULL;</div><div class='del'>-        loc_t                 *loc        = NULL;</div><div class='del'>-        inode_contribution_t  *contri     = NULL;</div><div class='del'>-        quota_inode_ctx_t     *ctx        = NULL;</div><div class='del'>-        quota_inode_ctx_t     *parent_ctx = NULL;</div><div class='del'>-        inode_t               *tmp_parent = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", opaque, out);</div><div class='del'>-</div><div class='del'>-        args = (quota_synctask_t *) opaque;</div><div class='del'>-        loc = &amp;args-&gt;loc;</div><div class='del'>-        this = args-&gt;this;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        THIS = this;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, loc-&gt;inode, out);</div><div class='del'>-</div><div class='del'>-        ret = mq_loc_copy (&amp;child_loc, loc);</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t prev_dirty = 0;</div><div class='add'>+    loc_t child_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t parent_loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t locked = _gf_false;</div><div class='add'>+    gf_boolean_t dirty = _gf_false;</div><div class='add'>+    gf_boolean_t status = _gf_false;</div><div class='add'>+    quota_meta_t delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_synctask_t *args = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    inode_contribution_t *contri = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    quota_inode_ctx_t *parent_ctx = NULL;</div><div class='add'>+    inode_t *tmp_parent = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", opaque, out);</div><div class='add'>+</div><div class='add'>+    args = (quota_synctask_t *)opaque;</div><div class='add'>+    loc = &amp;args-&gt;loc;</div><div class='add'>+    this = args-&gt;this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    THIS = this;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, loc-&gt;inode, out);</div><div class='add'>+</div><div class='add'>+    ret = mq_loc_copy(&amp;child_loc, loc);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "loc copy failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    while (!__is_root_gfid(child_loc.gfid)) {</div><div class='add'>+        ret = mq_inode_ctx_get(child_loc.inode, this, &amp;ctx);</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "loc copy failed");</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "inode ctx get failed for %s, "</div><div class='add'>+                   "aborting update txn",</div><div class='add'>+                   child_loc.path);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        /* To improve performance, abort current transaction</div><div class='add'>+         * if one is already in progress for same inode</div><div class='add'>+         */</div><div class='add'>+        if (status == _gf_true) {</div><div class='add'>+            /* status will already set before txn start,</div><div class='add'>+             * so it should not be set in first</div><div class='add'>+             * loop iteration</div><div class='add'>+             */</div><div class='add'>+            ret = mq_test_and_set_ctx_updation_status(ctx, &amp;status);</div><div class='add'>+            if (ret &lt; 0 || status == _gf_true)</div><div class='add'>+                goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (child_loc.parent == NULL) {</div><div class='add'>+            ret = mq_build_ancestry(this, &amp;child_loc);</div><div class='add'>+            if (ret &lt; 0 || child_loc.parent == NULL) {</div><div class='add'>+                /* If application performs parallel remove</div><div class='add'>+                 * operations on same set of files/directories</div><div class='add'>+                 * then we may get ENOENT/ESTALE</div><div class='add'>+                 */</div><div class='add'>+                gf_log(this-&gt;name,</div><div class='add'>+                       (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG</div><div class='add'>+                                                          : GF_LOG_ERROR,</div><div class='add'>+                       "build ancestry failed for inode %s",</div><div class='add'>+                       uuid_utoa(child_loc.inode-&gt;gfid));</div><div class='add'>+                ret = -1;</div><div class='ctx'>                 goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = mq_inode_loc_fill(NULL, child_loc.parent, &amp;parent_loc);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "parent_loc fill "</div><div class='add'>+                   "failed for child inode %s: ",</div><div class='add'>+                   uuid_utoa(child_loc.inode-&gt;gfid));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        while (!__is_root_gfid (child_loc.gfid)) {</div><div class='add'>+        ret = mq_lock(this, &amp;parent_loc, F_WRLCK);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        locked = _gf_true;</div><div class='ctx'> </div><div class='del'>-                ret = mq_inode_ctx_get (child_loc.inode, this, &amp;ctx);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                "inode ctx get failed for %s, "</div><div class='del'>-                                "aborting update txn", child_loc.path);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        mq_set_ctx_updation_status(ctx, _gf_false);</div><div class='add'>+        status = _gf_true;</div><div class='ctx'> </div><div class='del'>-                /* To improve performance, abort current transaction</div><div class='del'>-                 * if one is already in progress for same inode</div><div class='add'>+        /* Contribution node can be NULL in below scenarios and</div><div class='add'>+           create if needed:</div><div class='add'>+</div><div class='add'>+           Scenario 1)</div><div class='add'>+           In this case create a new contribution node</div><div class='add'>+           Suppose hard link for a file f1 present in a directory d1 is</div><div class='add'>+           created in the directory d2 (as f2). Now, since d2's</div><div class='add'>+           contribution is not there in f1's inode ctx, d2's</div><div class='add'>+           contribution xattr won't be created and will create problems</div><div class='add'>+           for quota operations.</div><div class='add'>+</div><div class='add'>+           Don't create contribution if parent has been changed after</div><div class='add'>+           taking a lock, this can happen when rename is performed</div><div class='add'>+           and writes is still in-progress for the same file</div><div class='add'>+</div><div class='add'>+           Scenario 2)</div><div class='add'>+           When a rename operation is performed, contribution node</div><div class='add'>+           for olp path will be removed.</div><div class='add'>+</div><div class='add'>+           Create contribution node only if oldparent is same as</div><div class='add'>+           newparent.</div><div class='add'>+           Consider below example</div><div class='add'>+           1) rename FOP invoked on file 'x'</div><div class='add'>+           2) write is still in progress for file 'x'</div><div class='add'>+           3) rename takes a lock on old-parent</div><div class='add'>+           4) write-update txn blocked on old-parent to acquire lock</div><div class='add'>+           5) in rename_cbk, contri xattrs are removed and contribution</div><div class='add'>+              is deleted and lock is released</div><div class='add'>+           6) now write-update txn gets the lock and updates the</div><div class='add'>+              wrong parent as it was holding lock on old parent</div><div class='add'>+              so validate parent once the lock is acquired</div><div class='add'>+</div><div class='add'>+             For more information on this problem, please see</div><div class='add'>+             doc for marker_rename in file marker.c</div><div class='add'>+        */</div><div class='add'>+        contri = mq_get_contribution_node(child_loc.parent, ctx);</div><div class='add'>+        if (contri == NULL) {</div><div class='add'>+            tmp_parent = inode_parent(child_loc.inode, 0, NULL);</div><div class='add'>+            if (tmp_parent == NULL) {</div><div class='add'>+                /* This can happen if application performs</div><div class='add'>+                 * parallel remove operations on same set</div><div class='add'>+                 * of files/directories</div><div class='ctx'>                  */</div><div class='del'>-                if (status == _gf_true) {</div><div class='del'>-                        /* status will already set before txn start,</div><div class='del'>-                         * so it should not be set in first</div><div class='del'>-                         * loop iteration</div><div class='del'>-                         */</div><div class='del'>-                        ret = mq_test_and_set_ctx_updation_status (ctx,</div><div class='del'>-                                                                   &amp;status);</div><div class='del'>-                        if (ret &lt; 0 || status == _gf_true)</div><div class='del'>-                                goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (child_loc.parent == NULL) {</div><div class='del'>-                        ret = mq_build_ancestry (this, &amp;child_loc);</div><div class='del'>-                        if (ret &lt; 0 || child_loc.parent == NULL) {</div><div class='del'>-                                /* If application performs parallel remove</div><div class='del'>-                                 * operations on same set of files/directories</div><div class='del'>-                                 * then we may get ENOENT/ESTALE</div><div class='del'>-                                 */</div><div class='del'>-                                gf_log (this-&gt;name,</div><div class='del'>-                                        (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                        ? GF_LOG_DEBUG:GF_LOG_ERROR,</div><div class='del'>-                                        "build ancestry failed for inode %s",</div><div class='del'>-                                        uuid_utoa (child_loc.inode-&gt;gfid));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = mq_inode_loc_fill (NULL, child_loc.parent, &amp;parent_loc);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "parent_loc fill "</div><div class='del'>-                                "failed for child inode %s: ",</div><div class='del'>-                                uuid_utoa (child_loc.inode-&gt;gfid));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = mq_lock (this, &amp;parent_loc, F_WRLCK);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                locked = _gf_true;</div><div class='del'>-</div><div class='del'>-                mq_set_ctx_updation_status (ctx, _gf_false);</div><div class='del'>-                status = _gf_true;</div><div class='del'>-</div><div class='del'>-                /* Contribution node can be NULL in below scenarios and</div><div class='del'>-                   create if needed:</div><div class='del'>-</div><div class='del'>-                   Scenario 1)</div><div class='del'>-                   In this case create a new contribution node</div><div class='del'>-                   Suppose hard link for a file f1 present in a directory d1 is</div><div class='del'>-                   created in the directory d2 (as f2). Now, since d2's</div><div class='del'>-                   contribution is not there in f1's inode ctx, d2's</div><div class='del'>-                   contribution xattr won't be created and will create problems</div><div class='del'>-                   for quota operations.</div><div class='del'>-</div><div class='del'>-                   Don't create contribution if parent has been changed after</div><div class='del'>-                   taking a lock, this can happen when rename is performed</div><div class='del'>-                   and writes is still in-progress for the same file</div><div class='del'>-</div><div class='del'>-                   Scenario 2)</div><div class='del'>-                   When a rename operation is performed, contribution node</div><div class='del'>-                   for olp path will be removed.</div><div class='del'>-</div><div class='del'>-                   Create contribution node only if oldparent is same as</div><div class='del'>-                   newparent.</div><div class='del'>-                   Consider below example</div><div class='del'>-                   1) rename FOP invoked on file 'x'</div><div class='del'>-                   2) write is still in progress for file 'x'</div><div class='del'>-                   3) rename takes a lock on old-parent</div><div class='del'>-                   4) write-update txn blocked on old-parent to acquire lock</div><div class='del'>-                   5) in rename_cbk, contri xattrs are removed and contribution</div><div class='del'>-                      is deleted and lock is released</div><div class='del'>-                   6) now write-update txn gets the lock and updates the</div><div class='del'>-                      wrong parent as it was holding lock on old parent</div><div class='del'>-                      so validate parent once the lock is acquired</div><div class='del'>-</div><div class='del'>-                     For more information on this problem, please see</div><div class='del'>-                     doc for marker_rename in file marker.c</div><div class='del'>-                */</div><div class='del'>-                contri = mq_get_contribution_node (child_loc.parent, ctx);</div><div class='del'>-                if (contri == NULL) {</div><div class='del'>-                        tmp_parent = inode_parent (child_loc.inode, 0, NULL);</div><div class='del'>-                        if (tmp_parent == NULL) {</div><div class='del'>-                                /* This can happen if application performs</div><div class='del'>-                                 * parallel remove operations on same set</div><div class='del'>-                                 * of files/directories</div><div class='del'>-                                 */</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING, "parent is "</div><div class='del'>-                                        "NULL for inode %s",</div><div class='del'>-                                        uuid_utoa (child_loc.inode-&gt;gfid));</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                        if (gf_uuid_compare(tmp_parent-&gt;gfid,</div><div class='del'>-                                            parent_loc.gfid)) {</div><div class='del'>-                                /* abort txn if parent has changed */</div><div class='del'>-                                ret = 0;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        inode_unref (tmp_parent);</div><div class='del'>-                        tmp_parent = NULL;</div><div class='del'>-</div><div class='del'>-                        contri = mq_add_new_contribution_node (this, ctx,</div><div class='del'>-                                                               &amp;child_loc);</div><div class='del'>-                        if (contri == NULL) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to "</div><div class='del'>-                                        "create contribution node for %s, "</div><div class='del'>-                                        "abort update txn", child_loc.path);</div><div class='del'>-                                ret = -1;</div><div class='del'>-                                goto out;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ret = mq_get_delta (this, &amp;child_loc, &amp;delta, ctx, contri);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (quota_meta_is_null (&amp;delta))</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = mq_get_set_dirty (this, &amp;parent_loc, 1, &amp;prev_dirty);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-                dirty = _gf_true;</div><div class='del'>-</div><div class='del'>-                ret = mq_update_contri (this, &amp;child_loc, contri, &amp;delta);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = mq_update_size (this, &amp;parent_loc, &amp;delta);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG, "rollback "</div><div class='del'>-                                "contri updation");</div><div class='del'>-                        mq_sub_meta (&amp;delta, NULL);</div><div class='del'>-                        mq_update_contri (this, &amp;child_loc, contri, &amp;delta);</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (prev_dirty == 0) {</div><div class='del'>-                        ret = mq_mark_dirty (this, &amp;parent_loc, 0);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = mq_inode_ctx_get (parent_loc.inode, this,</div><div class='del'>-                                                &amp;parent_ctx);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                mq_set_ctx_dirty_status (parent_ctx, _gf_false);</div><div class='del'>-                }</div><div class='del'>-                dirty = _gf_false;</div><div class='del'>-                prev_dirty = 0;</div><div class='del'>-</div><div class='del'>-                ret = mq_lock (this, &amp;parent_loc, F_UNLCK);</div><div class='del'>-                locked = _gf_false;</div><div class='del'>-</div><div class='del'>-                if (__is_root_gfid (parent_loc.gfid))</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                /* Repeate above steps upwards till the root */</div><div class='del'>-                loc_wipe (&amp;child_loc);</div><div class='del'>-                ret = mq_loc_copy (&amp;child_loc, &amp;parent_loc);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                loc_wipe (&amp;parent_loc);</div><div class='del'>-                GF_REF_PUT (contri);</div><div class='del'>-                contri = NULL;</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "parent is "</div><div class='add'>+                       "NULL for inode %s",</div><div class='add'>+                       uuid_utoa(child_loc.inode-&gt;gfid));</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+            if (gf_uuid_compare(tmp_parent-&gt;gfid, parent_loc.gfid)) {</div><div class='add'>+                /* abort txn if parent has changed */</div><div class='add'>+                ret = 0;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+</div><div class='add'>+            inode_unref(tmp_parent);</div><div class='add'>+            tmp_parent = NULL;</div><div class='add'>+</div><div class='add'>+            contri = mq_add_new_contribution_node(this, ctx, &amp;child_loc);</div><div class='add'>+            if (contri == NULL) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                       "Failed to "</div><div class='add'>+                       "create contribution node for %s, "</div><div class='add'>+                       "abort update txn",</div><div class='add'>+                       child_loc.path);</div><div class='add'>+                ret = -1;</div><div class='add'>+                goto out;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        ret = mq_get_delta(this, &amp;child_loc, &amp;delta, ctx, contri);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if (quota_meta_is_null(&amp;delta))</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = mq_get_set_dirty(this, &amp;parent_loc, 1, &amp;prev_dirty);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+        dirty = _gf_true;</div><div class='add'>+</div><div class='add'>+        ret = mq_update_contri(this, &amp;child_loc, contri, &amp;delta);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = mq_update_size(this, &amp;parent_loc, &amp;delta);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+                   "rollback "</div><div class='add'>+                   "contri updation");</div><div class='add'>+            mq_sub_meta(&amp;delta, NULL);</div><div class='add'>+            mq_update_contri(this, &amp;child_loc, contri, &amp;delta);</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        if (prev_dirty == 0) {</div><div class='add'>+            ret = mq_mark_dirty(this, &amp;parent_loc, 0);</div><div class='add'>+        } else {</div><div class='add'>+            ret = mq_inode_ctx_get(parent_loc.inode, this, &amp;parent_ctx);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                mq_set_ctx_dirty_status(parent_ctx, _gf_false);</div><div class='ctx'>         }</div><div class='add'>+        dirty = _gf_false;</div><div class='add'>+        prev_dirty = 0;</div><div class='add'>+</div><div class='add'>+        ret = mq_lock(this, &amp;parent_loc, F_UNLCK);</div><div class='add'>+        locked = _gf_false;</div><div class='add'>+</div><div class='add'>+        if (__is_root_gfid(parent_loc.gfid))</div><div class='add'>+            break;</div><div class='add'>+</div><div class='add'>+        /* Repeate above steps upwards till the root */</div><div class='add'>+        loc_wipe(&amp;child_loc);</div><div class='add'>+        ret = mq_loc_copy(&amp;child_loc, &amp;parent_loc);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        loc_wipe(&amp;parent_loc);</div><div class='add'>+        GF_REF_PUT(contri);</div><div class='add'>+        contri = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dirty) {</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        /* On failure clear dirty status flag.</div><div class='del'>-                         * In the next lookup inspect_directory_xattr</div><div class='del'>-                         * can set the status flag and fix the</div><div class='del'>-                         * dirty directory.</div><div class='del'>-                         * Do the same if the dir was dirty before</div><div class='del'>-                         * txn</div><div class='del'>-                         */</div><div class='del'>-                        ret = mq_inode_ctx_get (parent_loc.inode, this,</div><div class='del'>-                                                &amp;parent_ctx);</div><div class='del'>-                        if (ret == 0)</div><div class='del'>-                                mq_set_ctx_dirty_status (parent_ctx, _gf_false);</div><div class='del'>-                } else {</div><div class='del'>-                        ret = mq_mark_dirty (this, &amp;parent_loc, 0);</div><div class='del'>-                }</div><div class='add'>+    if (dirty) {</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            /* On failure clear dirty status flag.</div><div class='add'>+             * In the next lookup inspect_directory_xattr</div><div class='add'>+             * can set the status flag and fix the</div><div class='add'>+             * dirty directory.</div><div class='add'>+             * Do the same if the dir was dirty before</div><div class='add'>+             * txn</div><div class='add'>+             */</div><div class='add'>+            ret = mq_inode_ctx_get(parent_loc.inode, this, &amp;parent_ctx);</div><div class='add'>+            if (ret == 0)</div><div class='add'>+                mq_set_ctx_dirty_status(parent_ctx, _gf_false);</div><div class='add'>+        } else {</div><div class='add'>+            ret = mq_mark_dirty(this, &amp;parent_loc, 0);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (locked)</div><div class='del'>-                ret = mq_lock (this, &amp;parent_loc, F_UNLCK);</div><div class='add'>+    if (locked)</div><div class='add'>+        ret = mq_lock(this, &amp;parent_loc, F_UNLCK);</div><div class='ctx'> </div><div class='del'>-        if (ctx &amp;&amp; status == _gf_false)</div><div class='del'>-                mq_set_ctx_updation_status (ctx, _gf_false);</div><div class='add'>+    if (ctx &amp;&amp; status == _gf_false)</div><div class='add'>+        mq_set_ctx_updation_status(ctx, _gf_false);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;child_loc);</div><div class='del'>-        loc_wipe (&amp;parent_loc);</div><div class='add'>+    loc_wipe(&amp;child_loc);</div><div class='add'>+    loc_wipe(&amp;parent_loc);</div><div class='ctx'> </div><div class='del'>-        if (tmp_parent)</div><div class='del'>-                inode_unref (tmp_parent);</div><div class='add'>+    if (tmp_parent)</div><div class='add'>+        inode_unref(tmp_parent);</div><div class='ctx'> </div><div class='del'>-        if (contri)</div><div class='del'>-                GF_REF_PUT (contri);</div><div class='add'>+    if (contri)</div><div class='add'>+        GF_REF_PUT(contri);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_mq_initiate_quota_txn (xlator_t *this, loc_t *origin_loc, struct iatt *buf,</div><div class='del'>-                        gf_boolean_t spawn)</div><div class='add'>+_mq_initiate_quota_txn(xlator_t *this, loc_t *origin_loc, struct iatt *buf,</div><div class='add'>+                       gf_boolean_t spawn)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret          = -1;</div><div class='del'>-        quota_inode_ctx_t      *ctx          = NULL;</div><div class='del'>-        gf_boolean_t            status       = _gf_true;</div><div class='del'>-        loc_t                   loc          = {0,};</div><div class='del'>-</div><div class='del'>-        ret = mq_prevalidate_txn (this, origin_loc, &amp;loc, &amp;ctx, buf);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    gf_boolean_t status = _gf_true;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    ret = mq_prevalidate_txn(this, origin_loc, &amp;loc, &amp;ctx, buf);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (loc_is_root(&amp;loc)) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (loc_is_root(&amp;loc)) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_test_and_set_ctx_updation_status (ctx, &amp;status);</div><div class='del'>-        if (ret &lt; 0 || status == _gf_true)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_test_and_set_ctx_updation_status(ctx, &amp;status);</div><div class='add'>+    if (ret &lt; 0 || status == _gf_true)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mq_synctask (this, mq_initiate_quota_task, spawn, &amp;loc);</div><div class='add'>+    ret = mq_synctask(this, mq_initiate_quota_task, spawn, &amp;loc);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; status == _gf_false)</div><div class='del'>-                mq_set_ctx_updation_status (ctx, _gf_false);</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; status == _gf_false)</div><div class='add'>+        mq_set_ctx_updation_status(ctx, _gf_false);</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='del'>-        return ret;</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_initiate_quota_txn (xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='add'>+mq_initiate_quota_txn(xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret          = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = _mq_initiate_quota_txn (this, loc, buf, _gf_true);</div><div class='add'>+    ret = _mq_initiate_quota_txn(this, loc, buf, _gf_true);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_initiate_quota_blocking_txn (xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='add'>+mq_initiate_quota_blocking_txn(xlator_t *this, loc_t *loc, struct iatt *buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t                 ret          = -1;</div><div class='add'>+    int32_t ret = -1;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = _mq_initiate_quota_txn (this, loc, buf, _gf_false);</div><div class='add'>+    ret = _mq_initiate_quota_txn(this, loc, buf, _gf_false);</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-mq_update_dirty_inode_task (void *opaque)</div><div class='add'>+mq_update_dirty_inode_task(void *opaque)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret                         = -1;</div><div class='del'>-        fd_t                 *fd                          = NULL;</div><div class='del'>-        off_t                 offset                      = 0;</div><div class='del'>-        gf_dirent_t           entries;</div><div class='del'>-        gf_dirent_t          *entry                       = NULL;</div><div class='del'>-        gf_boolean_t          locked                      = _gf_false;</div><div class='del'>-        gf_boolean_t          updated                     = _gf_false;</div><div class='del'>-        int32_t               dirty                       = 0;</div><div class='del'>-        quota_meta_t          contri                      = {0, };</div><div class='del'>-        quota_meta_t          size                        = {0, };</div><div class='del'>-        quota_meta_t          contri_sum                  = {0, };</div><div class='del'>-        quota_meta_t          delta                       = {0, };</div><div class='del'>-        quota_synctask_t     *args                        = NULL;</div><div class='del'>-        xlator_t             *this                        = NULL;</div><div class='del'>-        loc_t                *loc                         = NULL;</div><div class='del'>-        quota_inode_ctx_t    *ctx                         = NULL;</div><div class='del'>-        dict_t               *xdata                       = NULL;</div><div class='del'>-        char                  contri_key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-</div><div class='del'>-        GF_ASSERT (opaque);</div><div class='del'>-</div><div class='del'>-        args = (quota_synctask_t *) opaque;</div><div class='del'>-        loc = &amp;args-&gt;loc;</div><div class='del'>-        this = args-&gt;this;</div><div class='del'>-        THIS = this;</div><div class='del'>-        INIT_LIST_HEAD (&amp;entries.list);</div><div class='del'>-</div><div class='del'>-        ret = mq_inode_ctx_get (loc-&gt;inode, this, &amp;ctx);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    fd_t *fd = NULL;</div><div class='add'>+    off_t offset = 0;</div><div class='add'>+    gf_dirent_t entries;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    gf_boolean_t locked = _gf_false;</div><div class='add'>+    gf_boolean_t updated = _gf_false;</div><div class='add'>+    int32_t dirty = 0;</div><div class='add'>+    quota_meta_t contri = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t contri_sum = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_synctask_t *args = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    loc_t *loc = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    GF_ASSERT(opaque);</div><div class='add'>+</div><div class='add'>+    args = (quota_synctask_t *)opaque;</div><div class='add'>+    loc = &amp;args-&gt;loc;</div><div class='add'>+    this = args-&gt;this;</div><div class='add'>+    THIS = this;</div><div class='add'>+    INIT_LIST_HEAD(&amp;entries.list);</div><div class='add'>+</div><div class='add'>+    ret = mq_inode_ctx_get(loc-&gt;inode, this, &amp;ctx);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        GET_CONTRI_KEY (this, contri_key, loc-&gt;gfid, ret);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    GET_CONTRI_KEY(this, contri_key, loc-&gt;gfid, ret);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        xdata = dict_new ();</div><div class='del'>-        if (xdata == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    xdata = dict_new();</div><div class='add'>+    if (xdata == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_new failed");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int64 (xdata, contri_key, 0);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "dict_set failed");</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_int64(xdata, contri_key, 0);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "dict_set failed");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_lock (this, loc, F_WRLCK);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        locked = _gf_true;</div><div class='add'>+    ret = mq_lock(this, loc, F_WRLCK);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    locked = _gf_true;</div><div class='ctx'> </div><div class='del'>-        ret = mq_get_dirty (this, loc, &amp;dirty);</div><div class='del'>-        if (ret &lt; 0 || dirty == 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = mq_get_dirty(this, loc, &amp;dirty);</div><div class='add'>+    if (ret &lt; 0 || dirty == 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        fd = fd_create (loc-&gt;inode, 0);</div><div class='del'>-        if (!fd) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to create fd");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    fd = fd_create(loc-&gt;inode, 0);</div><div class='add'>+    if (!fd) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Failed to create fd");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_opendir(this, loc, fd, NULL, NULL);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name,</div><div class='add'>+               (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG : GF_LOG_ERROR,</div><div class='add'>+               "opendir failed "</div><div class='add'>+               "for %s: %s",</div><div class='add'>+               loc-&gt;path, strerror(-ret));</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = syncop_opendir (this, loc, fd, NULL, NULL);</div><div class='add'>+    fd_bind(fd);</div><div class='add'>+    while ((ret = syncop_readdirp(this, fd, 131072, offset, &amp;entries, xdata,</div><div class='add'>+                                  NULL)) != 0) {</div><div class='ctx'>         if (ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                        ? GF_LOG_DEBUG:GF_LOG_ERROR, "opendir failed "</div><div class='del'>-                        "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                goto out;</div><div class='add'>+            gf_log(this-&gt;name,</div><div class='add'>+                   (-ret == ENOENT || -ret == ESTALE) ? GF_LOG_DEBUG</div><div class='add'>+                                                      : GF_LOG_ERROR,</div><div class='add'>+                   "readdirp failed "</div><div class='add'>+                   "for %s: %s",</div><div class='add'>+                   loc-&gt;path, strerror(-ret));</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        fd_bind (fd);</div><div class='del'>-        while ((ret = syncop_readdirp (this, fd, 131072, offset, &amp;entries,</div><div class='del'>-                                       xdata, NULL)) != 0) {</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, (-ret == ENOENT || -ret == ESTALE)</div><div class='del'>-                                ? GF_LOG_DEBUG:GF_LOG_ERROR, "readdirp failed "</div><div class='del'>-                                "for %s: %s", loc-&gt;path, strerror (-ret));</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+        if (list_empty(&amp;entries.list))</div><div class='add'>+            break;</div><div class='ctx'> </div><div class='del'>-                if (list_empty (&amp;entries.list))</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                list_for_each_entry (entry, &amp;entries.list, list) {</div><div class='del'>-                        offset = entry-&gt;d_off;</div><div class='del'>-</div><div class='del'>-                        if (!strcmp (entry-&gt;d_name, ".") ||</div><div class='del'>-                            !strcmp (entry-&gt;d_name, ".."))</div><div class='del'>-                                continue;</div><div class='add'>+        list_for_each_entry(entry, &amp;entries.list, list)</div><div class='add'>+        {</div><div class='add'>+            offset = entry-&gt;d_off;</div><div class='ctx'> </div><div class='del'>-                        memset (&amp;contri, 0, sizeof (contri));</div><div class='del'>-                        quota_dict_get_meta (entry-&gt;dict, contri_key, &amp;contri);</div><div class='del'>-                        if (quota_meta_is_null (&amp;contri))</div><div class='del'>-                                continue;</div><div class='add'>+            if (!strcmp(entry-&gt;d_name, ".") || !strcmp(entry-&gt;d_name, ".."))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                        mq_add_meta (&amp;contri_sum, &amp;contri);</div><div class='del'>-                }</div><div class='add'>+            memset(&amp;contri, 0, sizeof(contri));</div><div class='add'>+            quota_dict_get_meta(entry-&gt;dict, contri_key, &amp;contri);</div><div class='add'>+            if (quota_meta_is_null(&amp;contri))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-                gf_dirent_free (&amp;entries);</div><div class='add'>+            mq_add_meta(&amp;contri_sum, &amp;contri);</div><div class='ctx'>         }</div><div class='del'>-        /* Inculde for self */</div><div class='del'>-        contri_sum.dir_count++;</div><div class='ctx'> </div><div class='del'>-        ret = mq_get_size (this, loc, &amp;size);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+        gf_dirent_free(&amp;entries);</div><div class='add'>+    }</div><div class='add'>+    /* Inculde for self */</div><div class='add'>+    contri_sum.dir_count++;</div><div class='ctx'> </div><div class='del'>-        mq_compute_delta (&amp;delta, &amp;contri_sum, &amp;size);</div><div class='add'>+    ret = mq_get_size(this, loc, &amp;size);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (quota_meta_is_null (&amp;delta))</div><div class='del'>-                goto out;</div><div class='add'>+    mq_compute_delta(&amp;delta, &amp;contri_sum, &amp;size);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "calculated size = %"PRId64</div><div class='del'>-                ", original size = %"PRIu64 ", diff = %"PRIu64</div><div class='del'>-                ", path = %s ", contri_sum.size, size.size, delta.size,</div><div class='del'>-                loc-&gt;path);</div><div class='add'>+    if (quota_meta_is_null(&amp;delta))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "calculated f_count = %"PRId64</div><div class='del'>-                ", original f_count = %"PRIu64 ", diff = %"PRIu64</div><div class='del'>-                ", path = %s ", contri_sum.file_count, size.file_count,</div><div class='del'>-                delta.file_count, loc-&gt;path);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "calculated size = %" PRId64 ", original size = %" PRIu64</div><div class='add'>+           ", diff = %" PRIu64 ", path = %s ",</div><div class='add'>+           contri_sum.size, size.size, delta.size, loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_INFO, "calculated d_count = %"PRId64</div><div class='del'>-                ", original d_count = %"PRIu64 ", diff = %"PRIu64</div><div class='del'>-                ", path = %s ", contri_sum.dir_count, size.dir_count,</div><div class='del'>-                delta.dir_count, loc-&gt;path);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "calculated f_count = %" PRId64 ", original f_count = %" PRIu64</div><div class='add'>+           ", diff = %" PRIu64 ", path = %s ",</div><div class='add'>+           contri_sum.file_count, size.file_count, delta.file_count, loc-&gt;path);</div><div class='ctx'> </div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_INFO,</div><div class='add'>+           "calculated d_count = %" PRId64 ", original d_count = %" PRIu64</div><div class='add'>+           ", diff = %" PRIu64 ", path = %s ",</div><div class='add'>+           contri_sum.dir_count, size.dir_count, delta.dir_count, loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        ret = mq_update_size (this, loc, &amp;delta);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_update_size(this, loc, &amp;delta);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        updated = _gf_true;</div><div class='add'>+    updated = _gf_true;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        gf_dirent_free (&amp;entries);</div><div class='add'>+    gf_dirent_free(&amp;entries);</div><div class='ctx'> </div><div class='del'>-        if (fd)</div><div class='del'>-                fd_unref (fd);</div><div class='add'>+    if (fd)</div><div class='add'>+        fd_unref(fd);</div><div class='ctx'> </div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* On failure clear dirty status flag.</div><div class='del'>-                 * In the next lookup inspect_directory_xattr</div><div class='del'>-                 * can set the status flag and fix the</div><div class='del'>-                 * dirty directory</div><div class='del'>-                 */</div><div class='del'>-                if (ctx)</div><div class='del'>-                        mq_set_ctx_dirty_status (ctx, _gf_false);</div><div class='del'>-        } else if (dirty) {</div><div class='del'>-                mq_mark_dirty (this, loc, 0);</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* On failure clear dirty status flag.</div><div class='add'>+         * In the next lookup inspect_directory_xattr</div><div class='add'>+         * can set the status flag and fix the</div><div class='add'>+         * dirty directory</div><div class='add'>+         */</div><div class='add'>+        if (ctx)</div><div class='add'>+            mq_set_ctx_dirty_status(ctx, _gf_false);</div><div class='add'>+    } else if (dirty) {</div><div class='add'>+        mq_mark_dirty(this, loc, 0);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (locked)</div><div class='del'>-                mq_lock (this, loc, F_UNLCK);</div><div class='add'>+    if (locked)</div><div class='add'>+        mq_lock(this, loc, F_UNLCK);</div><div class='ctx'> </div><div class='del'>-        if (updated)</div><div class='del'>-                mq_initiate_quota_blocking_txn (this, loc, NULL);</div><div class='add'>+    if (updated)</div><div class='add'>+        mq_initiate_quota_blocking_txn(this, loc, NULL);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_update_dirty_inode_txn (xlator_t *this, loc_t *loc, quota_inode_ctx_t *ctx)</div><div class='add'>+mq_update_dirty_inode_txn(xlator_t *this, loc_t *loc, quota_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret        = -1;</div><div class='del'>-        gf_boolean_t     status     = _gf_true;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    gf_boolean_t status = _gf_true;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc-&gt;inode, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc-&gt;inode, out);</div><div class='ctx'> </div><div class='del'>-        ret = mq_test_and_set_ctx_dirty_status (ctx, &amp;status);</div><div class='del'>-        if (ret &lt; 0 || status == _gf_true)</div><div class='del'>-                goto out;</div><div class='add'>+    ret = mq_test_and_set_ctx_dirty_status(ctx, &amp;status);</div><div class='add'>+    if (ret &lt; 0 || status == _gf_true)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mq_synctask (this, mq_update_dirty_inode_task, _gf_true, loc);</div><div class='add'>+    ret = mq_synctask(this, mq_update_dirty_inode_task, _gf_true, loc);</div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0 &amp;&amp; status == _gf_false)</div><div class='del'>-                mq_set_ctx_dirty_status (ctx, _gf_false);</div><div class='add'>+    if (ret &lt; 0 &amp;&amp; status == _gf_false)</div><div class='add'>+        mq_set_ctx_dirty_status(ctx, _gf_false);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_inspect_directory_xattr (xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='del'>-                            inode_contribution_t *contribution, loc_t *loc,</div><div class='del'>-                            dict_t *dict, struct iatt buf)</div><div class='add'>+mq_inspect_directory_xattr(xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='add'>+                           inode_contribution_t *contribution, loc_t *loc,</div><div class='add'>+                           dict_t *dict, struct iatt buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret                          = -1;</div><div class='del'>-        int8_t                dirty                        = -1;</div><div class='del'>-        quota_meta_t          size                         = {0, };</div><div class='del'>-        quota_meta_t          contri                       = {0, };</div><div class='del'>-        quota_meta_t          delta                        = {0, };</div><div class='del'>-        char                  contri_key[QUOTA_KEY_MAX]    = {0, };</div><div class='del'>-        char                  size_key[QUOTA_KEY_MAX]      = {0, };</div><div class='del'>-        gf_boolean_t          status                       = _gf_false;</div><div class='del'>-</div><div class='del'>-        ret = dict_get_int8 (dict, QUOTA_DIRTY_KEY, &amp;dirty);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                /* dirty is set only on the first file write operation</div><div class='del'>-                 * so ignore this error</div><div class='del'>-                 */</div><div class='del'>-                ret = 0;</div><div class='del'>-                dirty = 0;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int8_t dirty = -1;</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t contri = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char size_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t status = _gf_false;</div><div class='add'>+</div><div class='add'>+    ret = dict_get_int8(dict, QUOTA_DIRTY_KEY, &amp;dirty);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        /* dirty is set only on the first file write operation</div><div class='add'>+         * so ignore this error</div><div class='add'>+         */</div><div class='add'>+        ret = 0;</div><div class='add'>+        dirty = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        GET_SIZE_KEY (this, size_key, ret);</div><div class='add'>+    GET_SIZE_KEY(this, size_key, ret);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    ret = _quota_dict_get_meta(this, dict, size_key, &amp;size, IA_IFDIR,</div><div class='add'>+                               _gf_false);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto create_xattr;</div><div class='add'>+</div><div class='add'>+    if (!loc_is_root(loc)) {</div><div class='add'>+        GET_CONTRI_KEY(this, contri_key, contribution-&gt;gfid, ret);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        ret = _quota_dict_get_meta (this, dict, size_key, &amp;size,</div><div class='del'>-                                    IA_IFDIR, _gf_false);</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        ret = _quota_dict_get_meta(this, dict, contri_key, &amp;contri, IA_IFDIR,</div><div class='add'>+                                   _gf_false);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto create_xattr;</div><div class='del'>-</div><div class='del'>-        if (!loc_is_root(loc)) {</div><div class='del'>-                GET_CONTRI_KEY (this, contri_key, contribution-&gt;gfid, ret);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                ret = _quota_dict_get_meta (this, dict, contri_key, &amp;contri,</div><div class='del'>-                                            IA_IFDIR, _gf_false);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto create_xattr;</div><div class='del'>-</div><div class='del'>-                LOCK (&amp;contribution-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        contribution-&gt;contribution = contri.size;</div><div class='del'>-                        contribution-&gt;file_count = contri.file_count;</div><div class='del'>-                        contribution-&gt;dir_count = contri.dir_count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;contribution-&gt;lock);</div><div class='del'>-        }</div><div class='add'>+            goto create_xattr;</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='add'>+        LOCK(&amp;contribution-&gt;lock);</div><div class='ctx'>         {</div><div class='del'>-                ctx-&gt;size = size.size;</div><div class='del'>-                ctx-&gt;file_count = size.file_count;</div><div class='del'>-                ctx-&gt;dir_count = size.dir_count;</div><div class='del'>-                ctx-&gt;dirty = dirty;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='del'>-</div><div class='del'>-        ret = mq_get_ctx_updation_status (ctx, &amp;status);</div><div class='del'>-        if (ret &lt; 0 || status == _gf_true) {</div><div class='del'>-                /* If the update txn is in progress abort inspection */</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+            contribution-&gt;contribution = contri.size;</div><div class='add'>+            contribution-&gt;file_count = contri.file_count;</div><div class='add'>+            contribution-&gt;dir_count = contri.dir_count;</div><div class='add'>+        }</div><div class='add'>+        UNLOCK(&amp;contribution-&gt;lock);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx-&gt;size = size.size;</div><div class='add'>+        ctx-&gt;file_count = size.file_count;</div><div class='add'>+        ctx-&gt;dir_count = size.dir_count;</div><div class='add'>+        ctx-&gt;dirty = dirty;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    ret = mq_get_ctx_updation_status(ctx, &amp;status);</div><div class='add'>+    if (ret &lt; 0 || status == _gf_true) {</div><div class='add'>+        /* If the update txn is in progress abort inspection */</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mq_compute_delta (&amp;delta, &amp;size, &amp;contri);</div><div class='add'>+    mq_compute_delta(&amp;delta, &amp;size, &amp;contri);</div><div class='ctx'> </div><div class='del'>-        if (dirty) {</div><div class='del'>-                ret = mq_update_dirty_inode_txn (this, loc, ctx);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dirty) {</div><div class='add'>+        ret = mq_update_dirty_inode_txn(this, loc, ctx);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (!loc_is_root(loc) &amp;&amp;</div><div class='del'>-            !quota_meta_is_null (&amp;delta))</div><div class='del'>-                mq_initiate_quota_txn (this, loc, NULL);</div><div class='add'>+    if (!loc_is_root(loc) &amp;&amp; !quota_meta_is_null(&amp;delta))</div><div class='add'>+        mq_initiate_quota_txn(this, loc, NULL);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='del'>-        goto out;</div><div class='add'>+    ret = 0;</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='ctx'> create_xattr:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                ret = mq_create_xattrs_txn (this, loc, NULL);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        ret = mq_create_xattrs_txn(this, loc, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_inspect_file_xattr (xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='del'>-                       inode_contribution_t *contribution, loc_t *loc,</div><div class='del'>-                       dict_t *dict, struct iatt buf)</div><div class='add'>+mq_inspect_file_xattr(xlator_t *this, quota_inode_ctx_t *ctx,</div><div class='add'>+                      inode_contribution_t *contribution, loc_t *loc,</div><div class='add'>+                      dict_t *dict, struct iatt buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret                          = -1;</div><div class='del'>-        quota_meta_t          size                         = {0, };</div><div class='del'>-        quota_meta_t          contri                       = {0, };</div><div class='del'>-        quota_meta_t          delta                        = {0, };</div><div class='del'>-        char                  contri_key[QUOTA_KEY_MAX]    = {0, };</div><div class='del'>-        gf_boolean_t          status                       = _gf_false;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;ctx-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                ctx-&gt;size = 512 * buf.ia_blocks;</div><div class='del'>-                ctx-&gt;file_count = 1;</div><div class='del'>-                ctx-&gt;dir_count = 0;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_meta_t size = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t contri = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    quota_meta_t delta = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    gf_boolean_t status = _gf_false;</div><div class='add'>+</div><div class='add'>+    LOCK(&amp;ctx-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        ctx-&gt;size = 512 * buf.ia_blocks;</div><div class='add'>+        ctx-&gt;file_count = 1;</div><div class='add'>+        ctx-&gt;dir_count = 0;</div><div class='add'>+</div><div class='add'>+        size.size = ctx-&gt;size;</div><div class='add'>+        size.file_count = ctx-&gt;file_count;</div><div class='add'>+        size.dir_count = ctx-&gt;dir_count;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;ctx-&gt;lock);</div><div class='add'>+</div><div class='add'>+    GET_CONTRI_KEY(this, contri_key, contribution-&gt;gfid, ret);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-                size.size = ctx-&gt;size;</div><div class='del'>-                size.file_count = ctx-&gt;file_count;</div><div class='del'>-                size.dir_count = ctx-&gt;dir_count;</div><div class='add'>+    ret = _quota_dict_get_meta(this, dict, contri_key, &amp;contri, IA_IFREG,</div><div class='add'>+                               _gf_true);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = mq_create_xattrs_txn(this, loc, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        LOCK(&amp;contribution-&gt;lock);</div><div class='add'>+        {</div><div class='add'>+            contribution-&gt;contribution = contri.size;</div><div class='add'>+            contribution-&gt;file_count = contri.file_count;</div><div class='add'>+            contribution-&gt;dir_count = contri.dir_count;</div><div class='ctx'>         }</div><div class='del'>-        UNLOCK (&amp;ctx-&gt;lock);</div><div class='add'>+        UNLOCK(&amp;contribution-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GET_CONTRI_KEY (this, contri_key, contribution-&gt;gfid, ret);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        ret = _quota_dict_get_meta (this, dict, contri_key, &amp;contri,</div><div class='del'>-                                    IA_IFREG, _gf_true);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = mq_create_xattrs_txn (this, loc, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                LOCK (&amp;contribution-&gt;lock);</div><div class='del'>-                {</div><div class='del'>-                        contribution-&gt;contribution = contri.size;</div><div class='del'>-                        contribution-&gt;file_count = contri.file_count;</div><div class='del'>-                        contribution-&gt;dir_count = contri.dir_count;</div><div class='del'>-                }</div><div class='del'>-                UNLOCK (&amp;contribution-&gt;lock);</div><div class='del'>-</div><div class='del'>-                ret = mq_get_ctx_updation_status (ctx, &amp;status);</div><div class='del'>-                if (ret &lt; 0 || status == _gf_true) {</div><div class='del'>-                        /* If the update txn is in progress abort inspection */</div><div class='del'>-                        ret = 0;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                mq_compute_delta (&amp;delta, &amp;size, &amp;contri);</div><div class='del'>-                if (!quota_meta_is_null (&amp;delta))</div><div class='del'>-                        mq_initiate_quota_txn (this, loc, NULL);</div><div class='add'>+        ret = mq_get_ctx_updation_status(ctx, &amp;status);</div><div class='add'>+        if (ret &lt; 0 || status == _gf_true) {</div><div class='add'>+            /* If the update txn is in progress abort inspection */</div><div class='add'>+            ret = 0;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='del'>-        /* TODO: revist this code when fixing hardlinks */</div><div class='add'>+</div><div class='add'>+        mq_compute_delta(&amp;delta, &amp;size, &amp;contri);</div><div class='add'>+        if (!quota_meta_is_null(&amp;delta))</div><div class='add'>+            mq_initiate_quota_txn(this, loc, NULL);</div><div class='add'>+    }</div><div class='add'>+    /* TODO: revist this code when fixing hardlinks */</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_xattr_state (xlator_t *this, loc_t *origin_loc, dict_t *dict,</div><div class='del'>-                struct iatt buf)</div><div class='add'>+mq_xattr_state(xlator_t *this, loc_t *origin_loc, dict_t *dict, struct iatt buf)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret             = -1;</div><div class='del'>-        quota_inode_ctx_t    *ctx             = NULL;</div><div class='del'>-        loc_t                 loc             = {0, };</div><div class='del'>-        inode_contribution_t *contribution    = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_contribution_t *contribution = NULL;</div><div class='add'>+</div><div class='add'>+    ret = mq_prevalidate_txn(this, origin_loc, &amp;loc, &amp;ctx, &amp;buf);</div><div class='add'>+    if (ret &lt; 0 || loc.parent == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = mq_prevalidate_txn (this, origin_loc, &amp;loc, &amp;ctx, &amp;buf);</div><div class='del'>-        if (ret &lt; 0 || loc.parent == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        if (!loc_is_root(&amp;loc)) {</div><div class='del'>-                contribution = mq_add_new_contribution_node (this, ctx, &amp;loc);</div><div class='del'>-                if (contribution == NULL) {</div><div class='del'>-                        if (!gf_uuid_is_null (loc.inode-&gt;gfid))</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "cannot add a new contribution node "</div><div class='del'>-                                        "(%s)", uuid_utoa (loc.gfid));</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (buf.ia_type == IA_IFDIR)</div><div class='del'>-                        mq_inspect_directory_xattr (this, ctx, contribution,</div><div class='del'>-                                                    &amp;loc, dict, buf);</div><div class='del'>-                else</div><div class='del'>-                        mq_inspect_file_xattr (this, ctx, contribution,</div><div class='del'>-                                               &amp;loc, dict, buf);</div><div class='del'>-        } else {</div><div class='del'>-                mq_inspect_directory_xattr (this, ctx, 0, &amp;loc, dict,</div><div class='del'>-                                            buf);</div><div class='del'>-        }</div><div class='add'>+    if (!loc_is_root(&amp;loc)) {</div><div class='add'>+        contribution = mq_add_new_contribution_node(this, ctx, &amp;loc);</div><div class='add'>+        if (contribution == NULL) {</div><div class='add'>+            if (!gf_uuid_is_null(loc.inode-&gt;gfid))</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "cannot add a new contribution node "</div><div class='add'>+                       "(%s)",</div><div class='add'>+                       uuid_utoa(loc.gfid));</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (buf.ia_type == IA_IFDIR)</div><div class='add'>+            mq_inspect_directory_xattr(this, ctx, contribution, &amp;loc, dict,</div><div class='add'>+                                       buf);</div><div class='add'>+        else</div><div class='add'>+            mq_inspect_file_xattr(this, ctx, contribution, &amp;loc, dict, buf);</div><div class='add'>+    } else {</div><div class='add'>+        mq_inspect_directory_xattr(this, ctx, 0, &amp;loc, dict, buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        loc_wipe (&amp;loc);</div><div class='add'>+    loc_wipe(&amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (contribution)</div><div class='del'>-                GF_REF_PUT (contribution);</div><div class='add'>+    if (contribution)</div><div class='add'>+        GF_REF_PUT(contribution);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mq_req_xattr (xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='del'>-              char *contri_key, char *size_key)</div><div class='add'>+mq_req_xattr(xlator_t *this, loc_t *loc, dict_t *dict, char *contri_key,</div><div class='add'>+             char *size_key)</div><div class='ctx'> {</div><div class='del'>-        int32_t               ret                = -1;</div><div class='del'>-        char                  key[QUOTA_KEY_MAX] = {0, };</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", loc, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", dict, out);</div><div class='del'>-</div><div class='del'>-        if (!loc_is_root(loc)) {</div><div class='del'>-                ret = mq_dict_set_contribution (this, dict, loc, NULL,</div><div class='del'>-                                                contri_key);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='del'>-        }</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    char key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        GET_SIZE_KEY (this, key, ret);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='del'>-        if (size_key)</div><div class='del'>-                if (snprintf (size_key, QUOTA_KEY_MAX, "%s", key)</div><div class='del'>-                    &gt;= QUOTA_KEY_MAX) {</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-        ret = dict_set_uint64 (dict, key, 0);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", loc, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", dict, out);</div><div class='add'>+</div><div class='add'>+    if (!loc_is_root(loc)) {</div><div class='add'>+        ret = mq_dict_set_contribution(this, dict, loc, NULL, contri_key);</div><div class='ctx'>         if (ret &lt; 0)</div><div class='del'>-                goto out;</div><div class='add'>+            goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GET_SIZE_KEY(this, key, ret);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+    if (size_key)</div><div class='add'>+        if (snprintf(size_key, QUOTA_KEY_MAX, "%s", key) &gt;= QUOTA_KEY_MAX) {</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+    ret = dict_set_uint64(dict, key, 0);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int8 (dict, QUOTA_DIRTY_KEY, 0);</div><div class='add'>+    ret = dict_set_int8(dict, QUOTA_DIRTY_KEY, 0);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                gf_log_callingfn (this ? this-&gt;name : "Marker",</div><div class='del'>-				  GF_LOG_ERROR, "dict set failed");</div><div class='del'>-        return ret;</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        gf_log_callingfn(this ? this-&gt;name : "Marker", GF_LOG_ERROR,</div><div class='add'>+                         "dict set failed");</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-mq_forget (xlator_t *this, quota_inode_ctx_t *ctx)</div><div class='add'>+mq_forget(xlator_t *this, quota_inode_ctx_t *ctx)</div><div class='ctx'> {</div><div class='del'>-        inode_contribution_t *contri = NULL;</div><div class='del'>-        inode_contribution_t *next   = NULL;</div><div class='add'>+    inode_contribution_t *contri = NULL;</div><div class='add'>+    inode_contribution_t *next = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", ctx, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", ctx, out);</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry_safe (contri, next, &amp;ctx-&gt;contribution_head,</div><div class='del'>-                                  contri_list) {</div><div class='del'>-                list_del_init (&amp;contri-&gt;contri_list);</div><div class='del'>-                GF_REF_PUT (contri);</div><div class='del'>-        }</div><div class='add'>+    list_for_each_entry_safe(contri, next, &amp;ctx-&gt;contribution_head, contri_list)</div><div class='add'>+    {</div><div class='add'>+        list_del_init(&amp;contri-&gt;contri_list);</div><div class='add'>+        GF_REF_PUT(contri);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;ctx-&gt;lock);</div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    LOCK_DESTROY(&amp;ctx-&gt;lock);</div><div class='add'>+    GF_FREE(ctx);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='head'>diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c<br/>index 57f47ddec97..d3abd4b0b5b 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/marker/src/marker.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/marker/src/marker.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/marker/src/marker.c</a></div><div class='hunk'>@@ -24,17 +24,17 @@</div><div class='ctx'> #define _GF_UID_GID_CHANGED 1</div><div class='ctx'> </div><div class='ctx'> static char *mq_ext_xattrs[] = {</div><div class='del'>-        QUOTA_SIZE_KEY,</div><div class='del'>-        QUOTA_LIMIT_KEY,</div><div class='del'>-        QUOTA_LIMIT_OBJECTS_KEY,</div><div class='del'>-        NULL,</div><div class='add'>+    QUOTA_SIZE_KEY,</div><div class='add'>+    QUOTA_LIMIT_KEY,</div><div class='add'>+    QUOTA_LIMIT_OBJECTS_KEY,</div><div class='add'>+    NULL,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this);</div><div class='add'>+fini(xlator_t *this);</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_start_setxattr (call_frame_t *, xlator_t *);</div><div class='add'>+marker_start_setxattr(call_frame_t *, xlator_t *);</div><div class='ctx'> </div><div class='ctx'> /* When client/quotad request for quota xattrs,</div><div class='ctx'>  * replace the key-name by adding the version number</div><div class='hunk'>@@ -46,1579 +46,1577 @@ marker_start_setxattr (call_frame_t *, xlator_t *);</div><div class='ctx'>  * version for the key-name</div><div class='ctx'>  */</div><div class='ctx'> int</div><div class='del'>-marker_key_replace_with_ver (xlator_t *this, dict_t *dict)</div><div class='add'>+marker_key_replace_with_ver(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int                ret                     = -1;</div><div class='del'>-        int                i                       = 0;</div><div class='del'>-        marker_conf_t     *priv                    = NULL;</div><div class='del'>-        char               key[QUOTA_KEY_MAX]      = {0, };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = 0;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    char key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (dict == NULL || priv-&gt;version &lt;= 0) {</div><div class='del'>-                ret = 0;</div><div class='add'>+    if (dict == NULL || priv-&gt;version &lt;= 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='add'>+        if (dict_get(dict, mq_ext_xattrs[i])) {</div><div class='add'>+            GET_QUOTA_KEY(this, key, mq_ext_xattrs[i], ret);</div><div class='add'>+            if (ret &lt; 0)</div><div class='ctx'>                 goto out;</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='del'>-                if (dict_get (dict, mq_ext_xattrs[i])) {</div><div class='del'>-                        GET_QUOTA_KEY (this, key, mq_ext_xattrs[i], ret);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        ret = dict_set (dict, key,</div><div class='del'>-                                        dict_get (dict, mq_ext_xattrs[i]));</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-</div><div class='del'>-                        dict_del (dict, mq_ext_xattrs[i]);</div><div class='del'>-                }</div><div class='add'>+            ret = dict_set(dict, key, dict_get(dict, mq_ext_xattrs[i]));</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto out;</div><div class='add'>+</div><div class='add'>+            dict_del(dict, mq_ext_xattrs[i]);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_key_set_ver (xlator_t *this, dict_t *dict)</div><div class='add'>+marker_key_set_ver(xlator_t *this, dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int              ret                     = -1;</div><div class='del'>-        int              i                       = -1;</div><div class='del'>-        marker_conf_t   *priv                    = NULL;</div><div class='del'>-        char             key[QUOTA_KEY_MAX]      = {0, };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    int i = -1;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    char key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (dict == NULL || priv-&gt;version &lt;= 0) {</div><div class='del'>-                ret = 0;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (dict == NULL || priv-&gt;version &lt;= 0) {</div><div class='add'>+        ret = 0;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='del'>-                GET_QUOTA_KEY (this, key, mq_ext_xattrs[i], ret);</div><div class='del'>-                if (ret &lt; 0)</div><div class='del'>-                        goto out;</div><div class='add'>+    for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='add'>+        GET_QUOTA_KEY(this, key, mq_ext_xattrs[i], ret);</div><div class='add'>+        if (ret &lt; 0)</div><div class='add'>+            goto out;</div><div class='ctx'> </div><div class='del'>-                if (dict_get (dict, key))</div><div class='del'>-                        dict_set (dict, mq_ext_xattrs[i], dict_get (dict, key));</div><div class='del'>-        }</div><div class='add'>+        if (dict_get(dict, key))</div><div class='add'>+            dict_set(dict, mq_ext_xattrs[i], dict_get(dict, key));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> marker_local_t *</div><div class='del'>-marker_local_ref (marker_local_t *local)</div><div class='add'>+marker_local_ref(marker_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", local, err);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", local, err);</div><div class='ctx'> </div><div class='del'>-        LOCK (&amp;local-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                local-&gt;ref++;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;lock);</div><div class='add'>+    LOCK(&amp;local-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        local-&gt;ref++;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> err:</div><div class='del'>-        return NULL;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_loc_fill (loc_t *loc, inode_t *inode, inode_t *parent, char *path)</div><div class='add'>+marker_loc_fill(loc_t *loc, inode_t *inode, inode_t *parent, char *path)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!loc)</div><div class='del'>-                return ret;</div><div class='add'>+    if (!loc)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (inode) {</div><div class='del'>-                loc-&gt;inode = inode_ref (inode);</div><div class='del'>-                if (gf_uuid_is_null (loc-&gt;gfid)) {</div><div class='del'>-                        gf_uuid_copy (loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='del'>-                }</div><div class='add'>+    if (inode) {</div><div class='add'>+        loc-&gt;inode = inode_ref(inode);</div><div class='add'>+        if (gf_uuid_is_null(loc-&gt;gfid)) {</div><div class='add'>+            gf_uuid_copy(loc-&gt;gfid, loc-&gt;inode-&gt;gfid);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (parent)</div><div class='del'>-                loc-&gt;parent = inode_ref (parent);</div><div class='del'>-</div><div class='del'>-        if (path) {</div><div class='del'>-                loc-&gt;path = gf_strdup (path);</div><div class='del'>-                if (!loc-&gt;path) {</div><div class='del'>-                        gf_log ("loc fill", GF_LOG_ERROR, "strdup failed");</div><div class='del'>-                        goto loc_wipe;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                loc-&gt;name = strrchr (loc-&gt;path, '/');</div><div class='del'>-                if (loc-&gt;name)</div><div class='del'>-                        loc-&gt;name++;</div><div class='add'>+    if (parent)</div><div class='add'>+        loc-&gt;parent = inode_ref(parent);</div><div class='add'>+</div><div class='add'>+    if (path) {</div><div class='add'>+        loc-&gt;path = gf_strdup(path);</div><div class='add'>+        if (!loc-&gt;path) {</div><div class='add'>+            gf_log("loc fill", GF_LOG_ERROR, "strdup failed");</div><div class='add'>+            goto loc_wipe;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+        loc-&gt;name = strrchr(loc-&gt;path, '/');</div><div class='add'>+        if (loc-&gt;name)</div><div class='add'>+            loc-&gt;name++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = 0;</div><div class='ctx'> loc_wipe:</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                loc_wipe (loc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        loc_wipe(loc);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-_marker_inode_loc_fill (inode_t *inode, inode_t *parent, char *name, loc_t *loc)</div><div class='add'>+_marker_inode_loc_fill(inode_t *inode, inode_t *parent, char *name, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        char            *resolvedpath = NULL;</div><div class='del'>-        int              ret          = -1;</div><div class='del'>-        gf_boolean_t     free_parent  = _gf_false;</div><div class='add'>+    char *resolvedpath = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    gf_boolean_t free_parent = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if ((!inode) || (!loc))</div><div class='del'>-                return ret;</div><div class='add'>+    if ((!inode) || (!loc))</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (parent &amp;&amp; name)</div><div class='del'>-                ret = inode_path (parent, name, &amp;resolvedpath);</div><div class='del'>-        else</div><div class='del'>-                ret = inode_path (inode, NULL, &amp;resolvedpath);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    if (parent &amp;&amp; name)</div><div class='add'>+        ret = inode_path(parent, name, &amp;resolvedpath);</div><div class='add'>+    else</div><div class='add'>+        ret = inode_path(inode, NULL, &amp;resolvedpath);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (parent == NULL) {</div><div class='del'>-	        parent = inode_parent (inode, NULL, NULL);</div><div class='del'>-                free_parent = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (parent == NULL) {</div><div class='add'>+        parent = inode_parent(inode, NULL, NULL);</div><div class='add'>+        free_parent = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = marker_loc_fill (loc, inode, parent, resolvedpath);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = marker_loc_fill(loc, inode, parent, resolvedpath);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-	if (free_parent)</div><div class='del'>-		inode_unref (parent);</div><div class='add'>+    if (free_parent)</div><div class='add'>+        inode_unref(parent);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (resolvedpath);</div><div class='add'>+    GF_FREE(resolvedpath);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_inode_loc_fill (inode_t *inode, loc_t *loc)</div><div class='add'>+marker_inode_loc_fill(inode_t *inode, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        return _marker_inode_loc_fill (inode, NULL, NULL, loc);</div><div class='add'>+    return _marker_inode_loc_fill(inode, NULL, NULL, loc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_trav_parent (marker_local_t *local)</div><div class='add'>+marker_trav_parent(marker_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int32_t ret = 0;</div><div class='del'>-        loc_t   loc = {0, };</div><div class='del'>-        inode_t *parent = NULL;</div><div class='del'>-        int8_t  need_unref = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    inode_t *parent = NULL;</div><div class='add'>+    int8_t need_unref = 0;</div><div class='ctx'> </div><div class='del'>-        if (!local-&gt;loc.parent) {</div><div class='del'>-                parent = inode_parent (local-&gt;loc.inode, NULL, NULL);</div><div class='del'>-                if (parent)</div><div class='del'>-                        need_unref = 1;</div><div class='del'>-        } else</div><div class='del'>-                parent = local-&gt;loc.parent;</div><div class='add'>+    if (!local-&gt;loc.parent) {</div><div class='add'>+        parent = inode_parent(local-&gt;loc.inode, NULL, NULL);</div><div class='add'>+        if (parent)</div><div class='add'>+            need_unref = 1;</div><div class='add'>+    } else</div><div class='add'>+        parent = local-&gt;loc.parent;</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (parent, &amp;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(parent, &amp;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        local-&gt;loc = loc;</div><div class='add'>+    local-&gt;loc = loc;</div><div class='ctx'> out:</div><div class='del'>-        if (need_unref)</div><div class='del'>-                inode_unref (parent);</div><div class='add'>+    if (need_unref)</div><div class='add'>+        inode_unref(parent);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_error_handler (xlator_t *this, marker_local_t *local, int32_t op_errno)</div><div class='add'>+marker_error_handler(xlator_t *this, marker_local_t *local, int32_t op_errno)</div><div class='ctx'> {</div><div class='del'>-         marker_conf_t *priv = NULL;</div><div class='del'>-         const char    *path = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    const char *path = NULL;</div><div class='ctx'> </div><div class='del'>-         priv = (marker_conf_t *) this-&gt;private;</div><div class='del'>-         path = local</div><div class='del'>-                 ? (local-&gt;loc.path</div><div class='del'>-                    ? local-&gt;loc.path : uuid_utoa(local-&gt;loc.gfid))</div><div class='add'>+    priv = (marker_conf_t *)this-&gt;private;</div><div class='add'>+    path = local ? (local-&gt;loc.path ? local-&gt;loc.path</div><div class='add'>+                                    : uuid_utoa(local-&gt;loc.gfid))</div><div class='ctx'>                  : "&lt;nul&gt;";</div><div class='ctx'> </div><div class='del'>-         gf_log (this-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                 "Indexing gone corrupt at %s (reason: %s)."</div><div class='del'>-                 " Geo-replication slave content needs to be revalidated",</div><div class='del'>-                 path, strerror (op_errno));</div><div class='del'>-        sys_unlink (priv-&gt;timestamp_file);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+           "Indexing gone corrupt at %s (reason: %s)."</div><div class='add'>+           " Geo-replication slave content needs to be revalidated",</div><div class='add'>+           path, strerror(op_errno));</div><div class='add'>+    sys_unlink(priv-&gt;timestamp_file);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_local_unref (marker_local_t *local)</div><div class='add'>+marker_local_unref(marker_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        int32_t   var = 0;</div><div class='del'>-</div><div class='del'>-        if (local == NULL)</div><div class='del'>-                return -1;</div><div class='del'>-</div><div class='del'>-        LOCK (&amp;local-&gt;lock);</div><div class='del'>-        {</div><div class='del'>-                var = --local-&gt;ref;</div><div class='del'>-        }</div><div class='del'>-        UNLOCK (&amp;local-&gt;lock);</div><div class='add'>+    int32_t var = 0;</div><div class='ctx'> </div><div class='del'>-        if (var != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (local == NULL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        loc_wipe (&amp;local-&gt;parent_loc);</div><div class='del'>-        if (local-&gt;xdata)</div><div class='del'>-                dict_unref (local-&gt;xdata);</div><div class='add'>+    LOCK(&amp;local-&gt;lock);</div><div class='add'>+    {</div><div class='add'>+        var = --local-&gt;ref;</div><div class='add'>+    }</div><div class='add'>+    UNLOCK(&amp;local-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;lk_frame) {</div><div class='del'>-                STACK_DESTROY (local-&gt;lk_frame-&gt;root);</div><div class='del'>-                local-&gt;lk_frame = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (var != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;oplocal) {</div><div class='del'>-                marker_local_unref (local-&gt;oplocal);</div><div class='del'>-                local-&gt;oplocal = NULL;</div><div class='del'>-        }</div><div class='del'>-        mem_put (local);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    loc_wipe(&amp;local-&gt;parent_loc);</div><div class='add'>+    if (local-&gt;xdata)</div><div class='add'>+        dict_unref(local-&gt;xdata);</div><div class='add'>+</div><div class='add'>+    if (local-&gt;lk_frame) {</div><div class='add'>+        STACK_DESTROY(local-&gt;lk_frame-&gt;root);</div><div class='add'>+        local-&gt;lk_frame = NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (local-&gt;oplocal) {</div><div class='add'>+        marker_local_unref(local-&gt;oplocal);</div><div class='add'>+        local-&gt;oplocal = NULL;</div><div class='add'>+    }</div><div class='add'>+    mem_put(local);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-stat_stampfile (xlator_t *this, marker_conf_t *priv,</div><div class='del'>-                struct volume_mark **status)</div><div class='add'>+stat_stampfile(xlator_t *this, marker_conf_t *priv, struct volume_mark **status)</div><div class='ctx'> {</div><div class='del'>-        struct stat          buf      = {0, };</div><div class='del'>-        struct volume_mark  *vol_mark = NULL;</div><div class='add'>+    struct stat buf = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    struct volume_mark *vol_mark = NULL;</div><div class='ctx'> </div><div class='del'>-        vol_mark = GF_CALLOC (sizeof (struct volume_mark), 1,</div><div class='del'>-                              gf_marker_mt_volume_mark);</div><div class='add'>+    vol_mark = GF_CALLOC(sizeof(struct volume_mark), 1,</div><div class='add'>+                         gf_marker_mt_volume_mark);</div><div class='ctx'> </div><div class='del'>-        vol_mark-&gt;major = 1;</div><div class='del'>-        vol_mark-&gt;minor = 0;</div><div class='add'>+    vol_mark-&gt;major = 1;</div><div class='add'>+    vol_mark-&gt;minor = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (sizeof (priv-&gt;volume_uuid_bin) == 16);</div><div class='del'>-        memcpy (vol_mark-&gt;uuid, priv-&gt;volume_uuid_bin, 16);</div><div class='add'>+    GF_ASSERT(sizeof(priv-&gt;volume_uuid_bin) == 16);</div><div class='add'>+    memcpy(vol_mark-&gt;uuid, priv-&gt;volume_uuid_bin, 16);</div><div class='ctx'> </div><div class='del'>-        if (sys_stat (priv-&gt;timestamp_file, &amp;buf) != -1) {</div><div class='del'>-                vol_mark-&gt;retval = 0;</div><div class='del'>-                vol_mark-&gt;sec = htonl (buf.st_mtime);</div><div class='del'>-                vol_mark-&gt;usec = htonl (ST_MTIM_NSEC (&amp;buf)/1000);</div><div class='del'>-        } else</div><div class='del'>-                vol_mark-&gt;retval = 1;</div><div class='add'>+    if (sys_stat(priv-&gt;timestamp_file, &amp;buf) != -1) {</div><div class='add'>+        vol_mark-&gt;retval = 0;</div><div class='add'>+        vol_mark-&gt;sec = htonl(buf.st_mtime);</div><div class='add'>+        vol_mark-&gt;usec = htonl(ST_MTIM_NSEC(&amp;buf) / 1000);</div><div class='add'>+    } else</div><div class='add'>+        vol_mark-&gt;retval = 1;</div><div class='ctx'> </div><div class='del'>-        *status = vol_mark;</div><div class='add'>+    *status = vol_mark;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_getxattr_stampfile_cbk (call_frame_t *frame, xlator_t *this,</div><div class='del'>-                               const char *name, struct volume_mark *vol_mark,</div><div class='del'>-                               dict_t *xdata)</div><div class='add'>+marker_getxattr_stampfile_cbk(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                              const char *name, struct volume_mark *vol_mark,</div><div class='add'>+                              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t   ret  = -1;</div><div class='del'>-        dict_t   *dict = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='ctx'> </div><div class='del'>-        if (vol_mark == NULL){</div><div class='del'>-                STACK_UNWIND_STRICT (getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+    if (vol_mark == NULL) {</div><div class='add'>+        STACK_UNWIND_STRICT(getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_bin (dict, (char *)name, vol_mark,</div><div class='del'>-                            sizeof (struct volume_mark));</div><div class='del'>-        if (ret) {</div><div class='del'>-                GF_FREE (vol_mark);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "failed to set key %s",</div><div class='del'>-                        name);</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_bin(dict, (char *)name, vol_mark,</div><div class='add'>+                       sizeof(struct volume_mark));</div><div class='add'>+    if (ret) {</div><div class='add'>+        GF_FREE(vol_mark);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set key %s", name);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (getxattr, frame, 0, 0, dict, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(getxattr, frame, 0, 0, dict, xdata);</div><div class='ctx'> </div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> gf_boolean_t</div><div class='del'>-call_from_special_client (call_frame_t *frame, xlator_t *this, const char *name)</div><div class='add'>+call_from_special_client(call_frame_t *frame, xlator_t *this, const char *name)</div><div class='ctx'> {</div><div class='del'>-        struct volume_mark     *vol_mark   = NULL;</div><div class='del'>-        marker_conf_t          *priv       = NULL;</div><div class='del'>-        gf_boolean_t           is_true     = _gf_true;</div><div class='add'>+    struct volume_mark *vol_mark = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    gf_boolean_t is_true = _gf_true;</div><div class='ctx'> </div><div class='del'>-        priv = (marker_conf_t *)this-&gt;private;</div><div class='add'>+    priv = (marker_conf_t *)this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_GSYNCD || name == NULL ||</div><div class='del'>-            strcmp (name, MARKER_XATTR_PREFIX "." VOLUME_MARK) != 0) {</div><div class='del'>-                is_true = _gf_false;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_GSYNCD || name == NULL ||</div><div class='add'>+        strcmp(name, MARKER_XATTR_PREFIX "." VOLUME_MARK) != 0) {</div><div class='add'>+        is_true = _gf_false;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        stat_stampfile (this, priv, &amp;vol_mark);</div><div class='add'>+    stat_stampfile(this, priv, &amp;vol_mark);</div><div class='ctx'> </div><div class='del'>-        marker_getxattr_stampfile_cbk (frame, this, name, vol_mark, NULL);</div><div class='add'>+    marker_getxattr_stampfile_cbk(frame, this, name, vol_mark, NULL);</div><div class='ctx'> out:</div><div class='del'>-        return is_true;</div><div class='add'>+    return is_true;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-_is_quota_internal_xattr (dict_t *d, char *k, data_t *v, void *data)</div><div class='add'>+_is_quota_internal_xattr(dict_t *d, char *k, data_t *v, void *data)</div><div class='ctx'> {</div><div class='del'>-        int     i = 0;</div><div class='del'>-        char    **external_xattrs = data;</div><div class='add'>+    int i = 0;</div><div class='add'>+    char **external_xattrs = data;</div><div class='ctx'> </div><div class='del'>-        for (i = 0; external_xattrs &amp;&amp; external_xattrs[i]; i++) {</div><div class='del'>-                if (strcmp (k, external_xattrs[i]) == 0)</div><div class='del'>-                        return _gf_false;</div><div class='del'>-        }</div><div class='add'>+    for (i = 0; external_xattrs &amp;&amp; external_xattrs[i]; i++) {</div><div class='add'>+        if (strcmp(k, external_xattrs[i]) == 0)</div><div class='add'>+            return _gf_false;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (fnmatch ("trusted.glusterfs.quota*", k, 0) == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (fnmatch("trusted.glusterfs.quota*", k, 0) == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        /* It would be nice if posix filters pgfid xattrs. But since marker</div><div class='del'>-         * also takes up responsibility to clean these up, adding the filtering</div><div class='del'>-         * here (Check 'quota_xattr_cleaner')</div><div class='del'>-         */</div><div class='del'>-        if (fnmatch (PGFID_XATTR_KEY_PREFIX"*", k, 0) == 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    /* It would be nice if posix filters pgfid xattrs. But since marker</div><div class='add'>+     * also takes up responsibility to clean these up, adding the filtering</div><div class='add'>+     * here (Check 'quota_xattr_cleaner')</div><div class='add'>+     */</div><div class='add'>+    if (fnmatch(PGFID_XATTR_KEY_PREFIX "*", k, 0) == 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-marker_filter_internal_xattrs (xlator_t *this, dict_t *xattrs)</div><div class='add'>+marker_filter_internal_xattrs(xlator_t *this, dict_t *xattrs)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t *priv   = NULL;</div><div class='del'>-        char         **ext    = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    char **ext = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                ext = mq_ext_xattrs;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        ext = mq_ext_xattrs;</div><div class='ctx'> </div><div class='del'>-        dict_foreach_match (xattrs, _is_quota_internal_xattr, ext,</div><div class='del'>-                            dict_remove_foreach_fn, NULL);</div><div class='add'>+    dict_foreach_match(xattrs, _is_quota_internal_xattr, ext,</div><div class='add'>+                       dict_remove_foreach_fn, NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-marker_filter_gsyncd_xattrs (call_frame_t *frame,</div><div class='del'>-                               xlator_t *this, dict_t *xattrs)</div><div class='add'>+marker_filter_gsyncd_xattrs(call_frame_t *frame, xlator_t *this, dict_t *xattrs)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t *priv   = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        GF_ASSERT (priv);</div><div class='del'>-        GF_ASSERT (frame);</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    GF_ASSERT(priv);</div><div class='add'>+    GF_ASSERT(frame);</div><div class='ctx'> </div><div class='del'>-        if (xattrs &amp;&amp; frame-&gt;root-&gt;pid != GF_CLIENT_PID_GSYNCD) {</div><div class='del'>-                GF_REMOVE_INTERNAL_XATTR (GF_XATTR_XTIME_PATTERN, xattrs);</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='add'>+    if (xattrs &amp;&amp; frame-&gt;root-&gt;pid != GF_CLIENT_PID_GSYNCD) {</div><div class='add'>+        GF_REMOVE_INTERNAL_XATTR(GF_XATTR_XTIME_PATTERN, xattrs);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t     ret  = -1;</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        ret = marker_key_set_ver (this, dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (cookie) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "Filtering the quota extended attributes");</div><div class='del'>-</div><div class='del'>-                /* If the getxattr is from a non special client, then do not</div><div class='del'>-                   copy the quota related xattrs (except the quota limit key</div><div class='del'>-                   i.e trusted.glusterfs.quota.limit-set which has been set by</div><div class='del'>-                   glusterd on the directory on which quota limit is set.) for</div><div class='del'>-                   directories. Let the healing of xattrs happen upon lookup.</div><div class='del'>-                   NOTE: setting of trusted.glusterfs.quota.limit-set as of now</div><div class='del'>-                   happens from glusterd. It should be moved to quotad. Also</div><div class='del'>-                   trusted.glusterfs.quota.limit-set is set on directory which</div><div class='del'>-                   is permanent till quota is removed on that directory or limit</div><div class='del'>-                   is changed. So let that xattr be healed by other xlators</div><div class='del'>-                   properly whenever directory healing is done.</div><div class='del'>-                */</div><div class='del'>-                /*</div><div class='del'>-                 * Except limit-set xattr, rest of the xattrs are maintained</div><div class='del'>-                 * by quota xlator. Don't expose them to other xlators.</div><div class='del'>-                 * This filter makes sure quota xattrs are not healed as part of</div><div class='del'>-                 * metadata self-heal</div><div class='del'>-                 */</div><div class='del'>-                marker_filter_internal_xattrs (frame-&gt;this, dict);</div><div class='del'>-        }</div><div class='add'>+marker_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                    dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    ret = marker_key_set_ver(this, dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (cookie) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "Filtering the quota extended attributes");</div><div class='add'>+</div><div class='add'>+        /* If the getxattr is from a non special client, then do not</div><div class='add'>+           copy the quota related xattrs (except the quota limit key</div><div class='add'>+           i.e trusted.glusterfs.quota.limit-set which has been set by</div><div class='add'>+           glusterd on the directory on which quota limit is set.) for</div><div class='add'>+           directories. Let the healing of xattrs happen upon lookup.</div><div class='add'>+           NOTE: setting of trusted.glusterfs.quota.limit-set as of now</div><div class='add'>+           happens from glusterd. It should be moved to quotad. Also</div><div class='add'>+           trusted.glusterfs.quota.limit-set is set on directory which</div><div class='add'>+           is permanent till quota is removed on that directory or limit</div><div class='add'>+           is changed. So let that xattr be healed by other xlators</div><div class='add'>+           properly whenever directory healing is done.</div><div class='add'>+        */</div><div class='add'>+        /*</div><div class='add'>+         * Except limit-set xattr, rest of the xattrs are maintained</div><div class='add'>+         * by quota xlator. Don't expose them to other xlators.</div><div class='add'>+         * This filter makes sure quota xattrs are not healed as part of</div><div class='add'>+         * metadata self-heal</div><div class='add'>+         */</div><div class='add'>+        marker_filter_internal_xattrs(frame-&gt;this, dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Filter gsyncd xtime xattr for non gsyncd clients */</div><div class='del'>-        marker_filter_gsyncd_xattrs (frame, frame-&gt;this, dict);</div><div class='add'>+    /* Filter gsyncd xtime xattr for non gsyncd clients */</div><div class='add'>+    marker_filter_gsyncd_xattrs(frame, frame-&gt;this, dict);</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        MARKER_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    MARKER_STACK_UNWIND(getxattr, frame, op_ret, op_errno, dict, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                 const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        gf_boolean_t     is_true  = _gf_false;</div><div class='del'>-        marker_conf_t   *priv                       = NULL;</div><div class='del'>-        unsigned long    cookie                     = 0;</div><div class='del'>-        marker_local_t  *local                      = NULL;</div><div class='del'>-        char             key[QUOTA_KEY_MAX]         = {0, };</div><div class='del'>-        int32_t          ret                        = -1;</div><div class='del'>-        int32_t          i                          = 0;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (name) {</div><div class='del'>-                for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='del'>-                        if (strcmp (name, mq_ext_xattrs[i]))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        GET_QUOTA_KEY (this, key, mq_ext_xattrs[i], ret);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto out;</div><div class='del'>-                        name = key;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+marker_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    gf_boolean_t is_true = _gf_false;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    unsigned long cookie = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    char key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (name) {</div><div class='add'>+        for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='add'>+            if (strcmp(name, mq_ext_xattrs[i]))</div><div class='add'>+                continue;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        if (local == NULL)</div><div class='add'>+            GET_QUOTA_KEY(this, key, mq_ext_xattrs[i], ret);</div><div class='add'>+            if (ret &lt; 0)</div><div class='ctx'>                 goto out;</div><div class='add'>+            name = key;</div><div class='add'>+            break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    if (local == NULL)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='del'>-</div><div class='del'>-        if ((loc_copy (&amp;local-&gt;loc, loc)) &lt; 0)</div><div class='del'>-		goto out;</div><div class='del'>-</div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG, "USER:PID = %d", frame-&gt;root-&gt;pid);</div><div class='del'>-</div><div class='del'>-        if (priv &amp;&amp; priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                is_true = call_from_special_client (frame, this, name);</div><div class='del'>-</div><div class='del'>-        if (is_true == _gf_false) {</div><div class='del'>-                if (name == NULL) {</div><div class='del'>-                        /* Signifies that marker translator</div><div class='del'>-                         * has to filter the quota's xattr's,</div><div class='del'>-                         * this is to prevent afr from performing</div><div class='del'>-                         * self healing on marker-quota xattrs'</div><div class='del'>-                         */</div><div class='del'>-                        cookie = 1;</div><div class='del'>-                }</div><div class='del'>-                STACK_WIND_COOKIE (frame, marker_getxattr_cbk,</div><div class='del'>-				   (void *)cookie,</div><div class='del'>-                                   FIRST_CHILD(this),</div><div class='del'>-                                   FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-				   loc, name, xdata);</div><div class='add'>+    if ((loc_copy(&amp;local-&gt;loc, loc)) &lt; 0)</div><div class='add'>+        goto out;</div><div class='add'>+</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "USER:PID = %d", frame-&gt;root-&gt;pid);</div><div class='add'>+</div><div class='add'>+    if (priv &amp;&amp; priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        is_true = call_from_special_client(frame, this, name);</div><div class='add'>+</div><div class='add'>+    if (is_true == _gf_false) {</div><div class='add'>+        if (name == NULL) {</div><div class='add'>+            /* Signifies that marker translator</div><div class='add'>+             * has to filter the quota's xattr's,</div><div class='add'>+             * this is to prevent afr from performing</div><div class='add'>+             * self healing on marker-quota xattrs'</div><div class='add'>+             */</div><div class='add'>+            cookie = 1;</div><div class='ctx'>         }</div><div class='add'>+        STACK_WIND_COOKIE(frame, marker_getxattr_cbk, (void *)cookie,</div><div class='add'>+                          FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='add'>+                          loc, name, xdata);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> out:</div><div class='del'>-        MARKER_STACK_UNWIND (getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    MARKER_STACK_UNWIND(getxattr, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_setxattr_done (call_frame_t *frame)</div><div class='add'>+marker_setxattr_done(call_frame_t *frame)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t *local = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_DESTROY (frame-&gt;root);</div><div class='add'>+    STACK_DESTROY(frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_specific_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                              int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+marker_specific_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                             int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret   = 0;</div><div class='del'>-        int32_t         done  = 0;</div><div class='del'>-        marker_local_t *local = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    int32_t done = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t*) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 &amp;&amp; op_errno == ENOSPC) {</div><div class='del'>-                marker_error_handler (this, local, op_errno);</div><div class='del'>-                done = 1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1 &amp;&amp; op_errno == ENOSPC) {</div><div class='add'>+        marker_error_handler(this, local, op_errno);</div><div class='add'>+        done = 1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local) {</div><div class='del'>-                if (local-&gt;loc.path &amp;&amp; strcmp (local-&gt;loc.path, "/") == 0) {</div><div class='del'>-                        done = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-                if (__is_root_gfid (local-&gt;loc.gfid)) {</div><div class='del'>-                        done = 1;</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='add'>+    if (local) {</div><div class='add'>+        if (local-&gt;loc.path &amp;&amp; strcmp(local-&gt;loc.path, "/") == 0) {</div><div class='add'>+            done = 1;</div><div class='add'>+            goto out;</div><div class='add'>+        }</div><div class='add'>+        if (__is_root_gfid(local-&gt;loc.gfid)) {</div><div class='add'>+            done = 1;</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = (local) ? marker_trav_parent (local) : -1;</div><div class='add'>+    ret = (local) ? marker_trav_parent(local) : -1;</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "Error occurred "</div><div class='del'>-                        "while traversing to the parent, stopping marker");</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "Error occurred "</div><div class='add'>+               "while traversing to the parent, stopping marker");</div><div class='ctx'> </div><div class='del'>-                done = 1;</div><div class='add'>+        done = 1;</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        marker_start_setxattr (frame, this);</div><div class='add'>+    marker_start_setxattr(frame, this);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (done) {</div><div class='del'>-                marker_setxattr_done (frame);</div><div class='del'>-        }</div><div class='add'>+    if (done) {</div><div class='add'>+        marker_setxattr_done(frame);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_start_setxattr (call_frame_t *frame, xlator_t *this)</div><div class='add'>+marker_start_setxattr(call_frame_t *frame, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = -1;</div><div class='del'>-        dict_t          *dict  = NULL;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    dict_t *dict = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t*) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        if (!local)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        dict = dict_new ();</div><div class='add'>+    dict = dict_new();</div><div class='ctx'> </div><div class='del'>-        if (!dict)</div><div class='del'>-                goto out;</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.inode &amp;&amp; gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='add'>+    if (local-&gt;loc.inode &amp;&amp; gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, local-&gt;loc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        GF_UUID_ASSERT (local-&gt;loc.gfid);</div><div class='add'>+    GF_UUID_ASSERT(local-&gt;loc.gfid);</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_static_bin (dict, priv-&gt;marker_xattr,</div><div class='del'>-                                   (void *)local-&gt;timebuf, 8);</div><div class='del'>-        if (ret) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "failed to set marker xattr (%s)", local-&gt;loc.path);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_set_static_bin(dict, priv-&gt;marker_xattr, (void *)local-&gt;timebuf,</div><div class='add'>+                              8);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "failed to set marker xattr (%s)",</div><div class='add'>+               local-&gt;loc.path);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, marker_specific_setxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr, &amp;local-&gt;loc, dict, 0,</div><div class='del'>-                    NULL);</div><div class='add'>+    STACK_WIND(frame, marker_specific_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, &amp;local-&gt;loc, dict, 0, NULL);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (dict)</div><div class='del'>-                dict_unref (dict);</div><div class='add'>+    if (dict)</div><div class='add'>+        dict_unref(dict);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-marker_gettimeofday (marker_local_t *local)</div><div class='add'>+marker_gettimeofday(marker_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        struct timeval tv = {0, };</div><div class='add'>+    struct timeval tv = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        gettimeofday (&amp;tv, NULL);</div><div class='add'>+    gettimeofday(&amp;tv, NULL);</div><div class='ctx'> </div><div class='del'>-        local-&gt;timebuf [0] = htonl (tv.tv_sec);</div><div class='del'>-        local-&gt;timebuf [1] = htonl (tv.tv_usec);</div><div class='add'>+    local-&gt;timebuf[0] = htonl(tv.tv_sec);</div><div class='add'>+    local-&gt;timebuf[1] = htonl(tv.tv_usec);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_create_frame (xlator_t *this, marker_local_t *local)</div><div class='add'>+marker_create_frame(xlator_t *this, marker_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        call_frame_t *frame = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='ctx'> </div><div class='del'>-        frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='ctx'> </div><div class='del'>-        if (!frame)</div><div class='del'>-                return -1;</div><div class='add'>+    if (!frame)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = (void *) local;</div><div class='add'>+    frame-&gt;local = (void *)local;</div><div class='ctx'> </div><div class='del'>-        marker_start_setxattr (frame, this);</div><div class='add'>+    marker_start_setxattr(frame, this);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_xtime_update_marks (xlator_t *this, marker_local_t *local)</div><div class='add'>+marker_xtime_update_marks(xlator_t *this, marker_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t *priv = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if ((local-&gt;pid == GF_CLIENT_PID_GSYNCD</div><div class='del'>-             &amp;&amp; !(priv-&gt;feature_enabled &amp; GF_XTIME_GSYNC_FORCE))</div><div class='del'>-            || (local-&gt;pid == GF_CLIENT_PID_DEFRAG))</div><div class='del'>-                goto out;</div><div class='add'>+    if ((local-&gt;pid == GF_CLIENT_PID_GSYNCD &amp;&amp;</div><div class='add'>+         !(priv-&gt;feature_enabled &amp; GF_XTIME_GSYNC_FORCE)) ||</div><div class='add'>+        (local-&gt;pid == GF_CLIENT_PID_DEFRAG))</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        marker_gettimeofday (local);</div><div class='add'>+    marker_gettimeofday(local);</div><div class='ctx'> </div><div class='del'>-        marker_local_ref (local);</div><div class='add'>+    marker_local_ref(local);</div><div class='ctx'> </div><div class='del'>-        marker_create_frame (this, local);</div><div class='add'>+    marker_create_frame(this, local);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+marker_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx     = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "error occurred "</div><div class='del'>-                        "while creating directory %s", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "error occurred "</div><div class='add'>+               "while creating directory %s",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                ctx = mq_inode_ctx_new (inode, this);</div><div class='del'>-                if (ctx == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        ctx = mq_inode_ctx_new(inode, this);</div><div class='add'>+        if (ctx == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode,</div><div class='del'>-                             buf, preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(mkdir, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                mq_create_xattrs_txn (this, &amp;local-&gt;loc, NULL);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        mq_create_xattrs_txn(this, &amp;local-&gt;loc, NULL);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-              mode_t umask, dict_t *xdata)</div><div class='add'>+marker_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+             mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_mkdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    STACK_WIND(frame, marker_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (mkdir, frame, -1, ENOMEM, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(mkdir, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+marker_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx     = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "error occurred "</div><div class='del'>-                        "while creating file %s", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "error occurred "</div><div class='add'>+               "while creating file %s",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                ctx = mq_inode_ctx_new (inode, this);</div><div class='del'>-                if (ctx == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        ctx = mq_inode_ctx_new(inode, this);</div><div class='add'>+        if (ctx == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(create, frame, op_ret, op_errno, fd, inode, buf,</div><div class='add'>+                        preparent, postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                mq_create_xattrs_txn (this, &amp;local-&gt;loc, buf);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        mq_create_xattrs_txn(this, &amp;local-&gt;loc, buf);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-               mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+marker_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+              mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_create_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask,</div><div class='del'>-                    fd, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (create, frame, -1, ENOMEM, NULL, NULL, NULL, NULL,</div><div class='del'>-                             NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(create, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+marker_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                  struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "error occurred "</div><div class='del'>-                        "while write, %s", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "error occurred "</div><div class='add'>+               "while write, %s",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='del'>-                             xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(writev, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                mq_initiate_quota_txn (this, &amp;local-&gt;loc, postbuf);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        mq_initiate_quota_txn(this, &amp;local-&gt;loc, postbuf);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_writev (call_frame_t *frame,</div><div class='del'>-               xlator_t *this,</div><div class='del'>-               fd_t *fd,</div><div class='del'>-               struct iovec *vector,</div><div class='del'>-               int32_t count,</div><div class='del'>-               off_t offset, uint32_t flags,</div><div class='del'>-               struct iobref *iobref, dict_t *xdata)</div><div class='add'>+marker_writev(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+              struct iovec *vector, int32_t count, off_t offset, uint32_t flags,</div><div class='add'>+              struct iobref *iobref, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_writev_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='del'>-                    flags, iobref, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (writev, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(writev, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+marker_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        call_stub_t        *stub    = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "error occurred "</div><div class='del'>-                        "rmdir %s", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "error occurred "</div><div class='add'>+               "rmdir %s",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                /* If a 'rm -rf' is performed by a client, rmdir can be faster</div><div class='del'>-                   than marker background mq_reduce_parent_size_txn.</div><div class='del'>-                   In this case, as part of rmdir parent child association</div><div class='del'>-                   will be removed in the server protocol.</div><div class='del'>-                   This can lead to mq_reduce_parent_size_txn failures.</div><div class='del'>-</div><div class='del'>-                   So perform mq_reduce_parent_size_txn in foreground</div><div class='del'>-                   and unwind to server once txn is complete</div><div class='del'>-                 */</div><div class='del'>-</div><div class='del'>-                stub = fop_rmdir_cbk_stub (frame, default_rmdir_cbk, op_ret,</div><div class='del'>-                                           op_errno, preparent, postparent,</div><div class='del'>-                                           xdata);</div><div class='del'>-                mq_reduce_parent_size_txn (this, &amp;local-&gt;loc, NULL, 1, stub);</div><div class='del'>-</div><div class='del'>-                if (stub) {</div><div class='del'>-                        marker_local_unref (local);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        /* If a 'rm -rf' is performed by a client, rmdir can be faster</div><div class='add'>+           than marker background mq_reduce_parent_size_txn.</div><div class='add'>+           In this case, as part of rmdir parent child association</div><div class='add'>+           will be removed in the server protocol.</div><div class='add'>+           This can lead to mq_reduce_parent_size_txn failures.</div><div class='add'>+</div><div class='add'>+           So perform mq_reduce_parent_size_txn in foreground</div><div class='add'>+           and unwind to server once txn is complete</div><div class='add'>+         */</div><div class='add'>+</div><div class='add'>+        stub = fop_rmdir_cbk_stub(frame, default_rmdir_cbk, op_ret, op_errno,</div><div class='add'>+                                  preparent, postparent, xdata);</div><div class='add'>+        mq_reduce_parent_size_txn(this, &amp;local-&gt;loc, NULL, 1, stub);</div><div class='add'>+</div><div class='add'>+        if (stub) {</div><div class='add'>+            marker_local_unref(local);</div><div class='add'>+            return 0;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (rmdir, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(rmdir, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+marker_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,</div><div class='add'>+             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_rmdir_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (rmdir, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(rmdir, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='del'>-                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+marker_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *preparent,</div><div class='add'>+                  struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        uint32_t            nlink   = -1;</div><div class='del'>-        GF_UNUSED int32_t   ret     = 0;</div><div class='del'>-        call_stub_t        *stub    = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    uint32_t nlink = -1;</div><div class='add'>+    GF_UNUSED int32_t ret = 0;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "%s occurred in unlink", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "%s occurred in unlink",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                if (local-&gt;skip_txn)</div><div class='del'>-                        goto out;</div><div class='del'>-</div><div class='del'>-                if (xdata) {</div><div class='del'>-                        ret = dict_get_uint32 (xdata,</div><div class='del'>-                                GF_RESPONSE_LINK_COUNT_XDATA, &amp;nlink);</div><div class='del'>-                        if (ret) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                        "dict get failed %s ",</div><div class='del'>-                                        strerror (-ret));</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* If a 'rm -rf' is performed by a client, unlink can be faster</div><div class='del'>-                   than marker background mq_reduce_parent_size_txn.</div><div class='del'>-                   In this case, as part of unlink parent child association</div><div class='del'>-                   will be removed in the server protocol.</div><div class='del'>-                   This can lead to mq_reduce_parent_size_txn failures.</div><div class='del'>-</div><div class='del'>-                  So perform mq_reduce_parent_size_txn in foreground</div><div class='del'>-                  and unwind to server once txn is complete</div><div class='del'>-                */</div><div class='del'>-</div><div class='del'>-                stub = fop_unlink_cbk_stub (frame, default_unlink_cbk, op_ret,</div><div class='del'>-                                            op_errno, preparent, postparent,</div><div class='del'>-                                            xdata);</div><div class='del'>-                mq_reduce_parent_size_txn (this, &amp;local-&gt;loc, NULL, nlink,</div><div class='del'>-                                           stub);</div><div class='del'>-</div><div class='del'>-                if (stub) {</div><div class='del'>-                        marker_local_unref (local);</div><div class='del'>-                        return 0;</div><div class='del'>-                }</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        if (local-&gt;skip_txn)</div><div class='add'>+            goto out;</div><div class='add'>+</div><div class='add'>+        if (xdata) {</div><div class='add'>+            ret = dict_get_uint32(xdata, GF_RESPONSE_LINK_COUNT_XDATA, &amp;nlink);</div><div class='add'>+            if (ret) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_TRACE, "dict get failed %s ",</div><div class='add'>+                       strerror(-ret));</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        /* If a 'rm -rf' is performed by a client, unlink can be faster</div><div class='add'>+           than marker background mq_reduce_parent_size_txn.</div><div class='add'>+           In this case, as part of unlink parent child association</div><div class='add'>+           will be removed in the server protocol.</div><div class='add'>+           This can lead to mq_reduce_parent_size_txn failures.</div><div class='add'>+</div><div class='add'>+          So perform mq_reduce_parent_size_txn in foreground</div><div class='add'>+          and unwind to server once txn is complete</div><div class='add'>+        */</div><div class='add'>+</div><div class='add'>+        stub = fop_unlink_cbk_stub(frame, default_unlink_cbk, op_ret, op_errno,</div><div class='add'>+                                   preparent, postparent, xdata);</div><div class='add'>+        mq_reduce_parent_size_txn(this, &amp;local-&gt;loc, NULL, nlink, stub);</div><div class='add'>+</div><div class='add'>+        if (stub) {</div><div class='add'>+            marker_local_unref(local);</div><div class='add'>+            return 0;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,</div><div class='del'>-                             postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='del'>-               dict_t *xdata)</div><div class='add'>+marker_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflag,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='del'>-        gf_boolean_t     dict_free = _gf_false;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    gf_boolean_t dict_free = _gf_false;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto unlink_wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto unlink_wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        local-&gt;xflag = xflag;</div><div class='del'>-        if (xdata)</div><div class='del'>-                local-&gt;xdata = dict_ref (xdata);</div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    local-&gt;xflag = xflag;</div><div class='add'>+    if (xdata)</div><div class='add'>+        local-&gt;xdata = dict_ref(xdata);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (xdata &amp;&amp; dict_get (xdata, GLUSTERFS_MARKER_DONT_ACCOUNT_KEY)) {</div><div class='del'>-                local-&gt;skip_txn = 1;</div><div class='del'>-                goto unlink_wind;</div><div class='del'>-        }</div><div class='add'>+    if (xdata &amp;&amp; dict_get(xdata, GLUSTERFS_MARKER_DONT_ACCOUNT_KEY)) {</div><div class='add'>+        local-&gt;skip_txn = 1;</div><div class='add'>+        goto unlink_wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (xdata == NULL) {</div><div class='del'>-                xdata = dict_new ();</div><div class='del'>-                dict_free = _gf_true;</div><div class='del'>-        }</div><div class='add'>+    if (xdata == NULL) {</div><div class='add'>+        xdata = dict_new();</div><div class='add'>+        dict_free = _gf_true;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = dict_set_int32 (xdata, GF_REQUEST_LINK_COUNT_XDATA, 1);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = dict_set_int32(xdata, GF_REQUEST_LINK_COUNT_XDATA, 1);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='ctx'> unlink_wind:</div><div class='del'>-        STACK_WIND (frame, marker_unlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='del'>-        goto out;</div><div class='add'>+    STACK_WIND(frame, marker_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflag, xdata);</div><div class='add'>+    goto out;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (unlink, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(unlink, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        if (dict_free)</div><div class='del'>-                dict_unref (xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    if (dict_free)</div><div class='add'>+        dict_unref(xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                 struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                 struct iatt *postparent, dict_t *xdata)</div><div class='add'>+marker_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred while "</div><div class='del'>-                        "linking a file ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "linking a file ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (link, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(link, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                if (!local-&gt;skip_txn)</div><div class='del'>-                        mq_create_xattrs_txn (this, &amp;local-&gt;loc, buf);</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        if (!local-&gt;skip_txn)</div><div class='add'>+            mq_create_xattrs_txn(this, &amp;local-&gt;loc, buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+marker_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, newloc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, newloc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (xdata &amp;&amp; dict_get (xdata, GLUSTERFS_MARKER_DONT_ACCOUNT_KEY))</div><div class='del'>-                local-&gt;skip_txn = 1;</div><div class='add'>+    if (xdata &amp;&amp; dict_get(xdata, GLUSTERFS_MARKER_DONT_ACCOUNT_KEY))</div><div class='add'>+        local-&gt;skip_txn = 1;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_link_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (link, frame, -1, ENOMEM, NULL, NULL, NULL, NULL,</div><div class='del'>-                             NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(link, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_rename_done (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+marker_rename_done(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t *local  = NULL, *oplocal = NULL;</div><div class='del'>-        loc_t           newloc = {0, };</div><div class='del'>-        marker_conf_t  *priv   = NULL;</div><div class='del'>-</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        oplocal = local-&gt;oplocal;</div><div class='add'>+    marker_local_t *local = NULL, *oplocal = NULL;</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    oplocal = local-&gt;oplocal;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "inodelk (UNLOCK) failed on path:%s (gfid:%s) (%s)",</div><div class='del'>-                        oplocal-&gt;parent_loc.path,</div><div class='del'>-                        uuid_utoa (oplocal-&gt;parent_loc.inode-&gt;gfid),</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;err != 0)</div><div class='del'>-                goto err;</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "inodelk (UNLOCK) failed on path:%s (gfid:%s) (%s)",</div><div class='add'>+               oplocal-&gt;parent_loc.path,</div><div class='add'>+               uuid_utoa(oplocal-&gt;parent_loc.inode-&gt;gfid), strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mq_reduce_parent_size_txn (this, &amp;oplocal-&gt;loc, &amp;oplocal-&gt;contribution,</div><div class='del'>-                                   -1, NULL);</div><div class='add'>+    if (local-&gt;err != 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (local-&gt;loc.inode != NULL) {</div><div class='del'>-                /* If destination file exits before rename, it would have</div><div class='del'>-                 * been unlinked while renaming a file</div><div class='del'>-                 */</div><div class='del'>-                mq_reduce_parent_size_txn (this, &amp;local-&gt;loc, NULL,</div><div class='del'>-                                           local-&gt;ia_nlink, NULL);</div><div class='del'>-        }</div><div class='add'>+    mq_reduce_parent_size_txn(this, &amp;oplocal-&gt;loc, &amp;oplocal-&gt;contribution, -1,</div><div class='add'>+                              NULL);</div><div class='ctx'> </div><div class='del'>-        newloc.inode = inode_ref (oplocal-&gt;loc.inode);</div><div class='del'>-        newloc.path = gf_strdup (local-&gt;loc.path);</div><div class='del'>-        newloc.name = strrchr (newloc.path, '/');</div><div class='del'>-        if (newloc.name)</div><div class='del'>-                newloc.name++;</div><div class='del'>-        newloc.parent = inode_ref (local-&gt;loc.parent);</div><div class='del'>-</div><div class='del'>-        mq_create_xattrs_txn (this, &amp;newloc, &amp;local-&gt;buf);</div><div class='del'>-</div><div class='del'>-        loc_wipe (&amp;newloc);</div><div class='del'>-</div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME) {</div><div class='del'>-                if (!local-&gt;loc.inode)</div><div class='del'>-                        local-&gt;loc.inode = inode_ref (oplocal-&gt;loc.inode);</div><div class='del'>-                //update marks on oldpath</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='del'>-                marker_xtime_update_marks (this, oplocal);</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='del'>-        }</div><div class='add'>+    if (local-&gt;loc.inode != NULL) {</div><div class='add'>+        /* If destination file exits before rename, it would have</div><div class='add'>+         * been unlinked while renaming a file</div><div class='add'>+         */</div><div class='add'>+        mq_reduce_parent_size_txn(this, &amp;local-&gt;loc, NULL, local-&gt;ia_nlink,</div><div class='add'>+                                  NULL);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newloc.inode = inode_ref(oplocal-&gt;loc.inode);</div><div class='add'>+    newloc.path = gf_strdup(local-&gt;loc.path);</div><div class='add'>+    newloc.name = strrchr(newloc.path, '/');</div><div class='add'>+    if (newloc.name)</div><div class='add'>+        newloc.name++;</div><div class='add'>+    newloc.parent = inode_ref(local-&gt;loc.parent);</div><div class='add'>+</div><div class='add'>+    mq_create_xattrs_txn(this, &amp;newloc, &amp;local-&gt;buf);</div><div class='add'>+</div><div class='add'>+    loc_wipe(&amp;newloc);</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME) {</div><div class='add'>+        if (!local-&gt;loc.inode)</div><div class='add'>+            local-&gt;loc.inode = inode_ref(oplocal-&gt;loc.inode);</div><div class='add'>+        // update marks on oldpath</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='add'>+        marker_xtime_update_marks(this, oplocal);</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        marker_local_unref (local);</div><div class='del'>-        marker_local_unref (oplocal);</div><div class='add'>+    marker_local_unref(local);</div><div class='add'>+    marker_local_unref(oplocal);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> void</div><div class='del'>-marker_rename_release_oldp_lock (marker_local_t *local, xlator_t *this)</div><div class='add'>+marker_rename_release_oldp_lock(marker_local_t *local, xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t        *oplocal  = NULL;</div><div class='del'>-        call_frame_t          *lk_frame = NULL;</div><div class='del'>-        struct gf_flock        lock     = {0, };</div><div class='add'>+    marker_local_t *oplocal = NULL;</div><div class='add'>+    call_frame_t *lk_frame = NULL;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        oplocal = local-&gt;oplocal;</div><div class='del'>-        lk_frame = local-&gt;lk_frame;</div><div class='add'>+    oplocal = local-&gt;oplocal;</div><div class='add'>+    lk_frame = local-&gt;lk_frame;</div><div class='ctx'> </div><div class='del'>-        if (lk_frame == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    if (lk_frame == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        lock.l_type   = F_UNLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_pid    = 0;</div><div class='add'>+    lock.l_type = F_UNLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_pid = 0;</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (lk_frame,</div><div class='del'>-                    marker_rename_done,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;inodelk,</div><div class='del'>-                    this-&gt;name, &amp;oplocal-&gt;parent_loc, F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    STACK_WIND(lk_frame, marker_rename_done, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;inodelk, this-&gt;name,</div><div class='add'>+               &amp;oplocal-&gt;parent_loc, F_SETLKW, &amp;lock, NULL);</div><div class='ctx'> </div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> </div><div class='ctx'> err:</div><div class='del'>-        marker_local_unref (local);</div><div class='del'>-        marker_local_unref (oplocal);</div><div class='add'>+    marker_local_unref(local);</div><div class='add'>+    marker_local_unref(oplocal);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_rename_unwind (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+marker_rename_unwind(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t       *local    = NULL;</div><div class='del'>-        marker_local_t       *oplocal  = NULL;</div><div class='del'>-        quota_inode_ctx_t    *ctx      = NULL;</div><div class='del'>-        inode_contribution_t *contri   = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_local_t *oplocal = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    inode_contribution_t *contri = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        oplocal = local-&gt;oplocal;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    oplocal = local-&gt;oplocal;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        //Reset frame uid and gid if set.</div><div class='del'>-        if (cookie == (void *) _GF_UID_GID_CHANGED)</div><div class='del'>-                MARKER_RESET_UID_GID (frame, frame-&gt;root, local);</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0)</div><div class='del'>-                local-&gt;err =  op_errno ? op_errno : EINVAL;</div><div class='del'>-</div><div class='del'>-        if (local-&gt;stub != NULL) {</div><div class='del'>-                /* Remove contribution node from in-memory even if</div><div class='del'>-                 * remove-xattr has failed as the rename is already performed</div><div class='del'>-                 * if local-&gt;stub is set, which means rename was successful</div><div class='del'>-                 */</div><div class='del'>-                (void) mq_inode_ctx_get (oplocal-&gt;loc.inode, this, &amp;ctx);</div><div class='del'>-                if (ctx) {</div><div class='del'>-                        contri = mq_get_contribution_node (oplocal-&gt;loc.parent,</div><div class='del'>-                                                           ctx);</div><div class='del'>-                        if (contri) {</div><div class='del'>-                                QUOTA_FREE_CONTRIBUTION_NODE (ctx, contri);</div><div class='del'>-                                GF_REF_PUT (contri);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                call_resume (local-&gt;stub);</div><div class='del'>-                local-&gt;stub = NULL;</div><div class='del'>-                local-&gt;err = 0;</div><div class='del'>-        } else if (local-&gt;err != 0) {</div><div class='del'>-                STACK_UNWIND_STRICT (rename, frame, -1, local-&gt;err, NULL, NULL,</div><div class='del'>-                                     NULL, NULL, NULL, NULL);</div><div class='del'>-        } else {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_CRITICAL,</div><div class='del'>-                        "continuation stub to unwind the call is absent, hence "</div><div class='del'>-                        "call will be hung (call-stack id = %"PRIu64")",</div><div class='del'>-                        frame-&gt;root-&gt;unique);</div><div class='del'>-        }</div><div class='add'>+    // Reset frame uid and gid if set.</div><div class='add'>+    if (cookie == (void *)_GF_UID_GID_CHANGED)</div><div class='add'>+        MARKER_RESET_UID_GID(frame, frame-&gt;root, local);</div><div class='ctx'> </div><div class='del'>-        /* If there are in-progress writes on old-path when during rename</div><div class='del'>-         * operation, update txn will update the wrong path if lock</div><div class='del'>-         * is released before rename unwind.</div><div class='del'>-         * So release lock only after rename unwind</div><div class='del'>-         */</div><div class='del'>-        marker_rename_release_oldp_lock (local, this);</div><div class='add'>+    if (op_ret &lt; 0)</div><div class='add'>+        local-&gt;err = op_errno ? op_errno : EINVAL;</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    if (local-&gt;stub != NULL) {</div><div class='add'>+        /* Remove contribution node from in-memory even if</div><div class='add'>+         * remove-xattr has failed as the rename is already performed</div><div class='add'>+         * if local-&gt;stub is set, which means rename was successful</div><div class='add'>+         */</div><div class='add'>+        (void)mq_inode_ctx_get(oplocal-&gt;loc.inode, this, &amp;ctx);</div><div class='add'>+        if (ctx) {</div><div class='add'>+            contri = mq_get_contribution_node(oplocal-&gt;loc.parent, ctx);</div><div class='add'>+            if (contri) {</div><div class='add'>+                QUOTA_FREE_CONTRIBUTION_NODE(ctx, contri);</div><div class='add'>+                GF_REF_PUT(contri);</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        call_resume(local-&gt;stub);</div><div class='add'>+        local-&gt;stub = NULL;</div><div class='add'>+        local-&gt;err = 0;</div><div class='add'>+    } else if (local-&gt;err != 0) {</div><div class='add'>+        STACK_UNWIND_STRICT(rename, frame, -1, local-&gt;err, NULL, NULL, NULL,</div><div class='add'>+                            NULL, NULL, NULL);</div><div class='add'>+    } else {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_CRITICAL,</div><div class='add'>+               "continuation stub to unwind the call is absent, hence "</div><div class='add'>+               "call will be hung (call-stack id = %" PRIu64 ")",</div><div class='add'>+               frame-&gt;root-&gt;unique);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* If there are in-progress writes on old-path when during rename</div><div class='add'>+     * operation, update txn will update the wrong path if lock</div><div class='add'>+     * is released before rename unwind.</div><div class='add'>+     * So release lock only after rename unwind</div><div class='add'>+     */</div><div class='add'>+    marker_rename_release_oldp_lock(local, this);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='del'>-                   struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='del'>-                   struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='del'>-                   dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        marker_conf_t  *priv                            = NULL;</div><div class='del'>-        marker_local_t *local                           = NULL;</div><div class='del'>-        marker_local_t *oplocal                         = NULL;</div><div class='del'>-        call_stub_t    *stub                            = NULL;</div><div class='del'>-        int32_t         ret                             = 0;</div><div class='del'>-        char            contri_key[QUOTA_KEY_MAX]       = {0, };</div><div class='del'>-        loc_t           newloc                          = {0, };</div><div class='del'>-</div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+marker_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, struct iatt *buf,</div><div class='add'>+                  struct iatt *preoldparent, struct iatt *postoldparent,</div><div class='add'>+                  struct iatt *prenewparent, struct iatt *postnewparent,</div><div class='add'>+                  dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_local_t *oplocal = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    loc_t newloc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (local != NULL) {</div><div class='add'>+        oplocal = local-&gt;oplocal;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='ctx'>         if (local != NULL) {</div><div class='del'>-                oplocal = local-&gt;oplocal;</div><div class='add'>+            local-&gt;err = op_errno;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "renaming a file ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                if (local != NULL) {</div><div class='del'>-                        local-&gt;err = op_errno;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred while "</div><div class='del'>-                        "renaming a file ", strerror (op_errno));</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        if ((op_ret &lt; 0) || (local == NULL)) {</div><div class='add'>+            goto quota_err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                if ((op_ret &lt; 0) || (local == NULL)) {</div><div class='del'>-                        goto quota_err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;ia_nlink = 0;</div><div class='del'>-                if (xdata)</div><div class='del'>-                        ret = dict_get_uint32 (xdata,</div><div class='del'>-                                               GF_RESPONSE_LINK_COUNT_XDATA,</div><div class='del'>-                                               &amp;local-&gt;ia_nlink);</div><div class='del'>-</div><div class='del'>-                local-&gt;buf = *buf;</div><div class='del'>-                stub = fop_rename_cbk_stub (frame, default_rename_cbk, op_ret,</div><div class='del'>-                                            op_errno, buf, preoldparent,</div><div class='del'>-                                            postoldparent, prenewparent,</div><div class='del'>-                                            postnewparent, xdata);</div><div class='del'>-                if (stub == NULL) {</div><div class='del'>-                        local-&gt;err = ENOMEM;</div><div class='del'>-                        goto quota_err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                local-&gt;stub = stub;</div><div class='del'>-</div><div class='del'>-                GET_CONTRI_KEY (this, contri_key, oplocal-&gt;loc.parent-&gt;gfid,</div><div class='del'>-                                ret);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        local-&gt;err = ENOMEM;</div><div class='del'>-                        goto quota_err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* Removexattr requires uid and gid to be 0,</div><div class='del'>-                 * reset them in the callback.</div><div class='del'>-                 */</div><div class='del'>-                MARKER_SET_UID_GID (frame, local, frame-&gt;root);</div><div class='del'>-</div><div class='del'>-                newloc.inode = inode_ref (oplocal-&gt;loc.inode);</div><div class='del'>-                newloc.path = gf_strdup (local-&gt;loc.path);</div><div class='del'>-                newloc.name = strrchr (newloc.path, '/');</div><div class='del'>-                if (newloc.name)</div><div class='del'>-                        newloc.name++;</div><div class='del'>-                newloc.parent = inode_ref (local-&gt;loc.parent);</div><div class='del'>-                gf_uuid_copy (newloc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='del'>-</div><div class='del'>-                STACK_WIND_COOKIE (frame, marker_rename_unwind,</div><div class='del'>-                                   frame-&gt;cookie, FIRST_CHILD(this),</div><div class='del'>-                                   FIRST_CHILD(this)-&gt;fops-&gt;removexattr,</div><div class='del'>-                                   &amp;newloc, contri_key, NULL);</div><div class='del'>-</div><div class='del'>-                loc_wipe (&amp;newloc);</div><div class='del'>-        } else {</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-</div><div class='del'>-                STACK_UNWIND_STRICT (rename, frame, op_ret, op_errno, buf,</div><div class='del'>-                                     preoldparent, postoldparent, prenewparent,</div><div class='del'>-                                     postnewparent, xdata);</div><div class='del'>-</div><div class='del'>-                if ((op_ret &lt; 0) || (local == NULL)) {</div><div class='del'>-                        goto out;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (priv-&gt;feature_enabled &amp; GF_XTIME) {</div><div class='del'>-                        //update marks on oldpath</div><div class='del'>-                        if (!local-&gt;loc.inode)</div><div class='del'>-                                local-&gt;loc.inode = inode_ref (oplocal-&gt;loc.inode);</div><div class='del'>-                        gf_uuid_copy (local-&gt;loc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='del'>-                        marker_xtime_update_marks (this, oplocal);</div><div class='del'>-                        marker_xtime_update_marks (this, local);</div><div class='del'>-                }</div><div class='add'>+        local-&gt;ia_nlink = 0;</div><div class='add'>+        if (xdata)</div><div class='add'>+            ret = dict_get_uint32(xdata, GF_RESPONSE_LINK_COUNT_XDATA,</div><div class='add'>+                                  &amp;local-&gt;ia_nlink);</div><div class='add'>+</div><div class='add'>+        local-&gt;buf = *buf;</div><div class='add'>+        stub = fop_rename_cbk_stub(frame, default_rename_cbk, op_ret, op_errno,</div><div class='add'>+                                   buf, preoldparent, postoldparent,</div><div class='add'>+                                   prenewparent, postnewparent, xdata);</div><div class='add'>+        if (stub == NULL) {</div><div class='add'>+            local-&gt;err = ENOMEM;</div><div class='add'>+            goto quota_err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-out:</div><div class='del'>-        if (!(priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                marker_local_unref (local);</div><div class='del'>-                marker_local_unref (oplocal);</div><div class='add'>+        local-&gt;stub = stub;</div><div class='add'>+</div><div class='add'>+        GET_CONTRI_KEY(this, contri_key, oplocal-&gt;loc.parent-&gt;gfid, ret);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            local-&gt;err = ENOMEM;</div><div class='add'>+            goto quota_err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+        /* Removexattr requires uid and gid to be 0,</div><div class='add'>+         * reset them in the callback.</div><div class='add'>+         */</div><div class='add'>+        MARKER_SET_UID_GID(frame, local, frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-quota_err:</div><div class='del'>-        marker_rename_unwind (frame, NULL, this, 0, 0, NULL);</div><div class='del'>-        return 0;</div><div class='del'>-}</div><div class='add'>+        newloc.inode = inode_ref(oplocal-&gt;loc.inode);</div><div class='add'>+        newloc.path = gf_strdup(local-&gt;loc.path);</div><div class='add'>+        newloc.name = strrchr(newloc.path, '/');</div><div class='add'>+        if (newloc.name)</div><div class='add'>+            newloc.name++;</div><div class='add'>+        newloc.parent = inode_ref(local-&gt;loc.parent);</div><div class='add'>+        gf_uuid_copy(newloc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='add'>+        STACK_WIND_COOKIE(</div><div class='add'>+            frame, marker_rename_unwind, frame-&gt;cookie, FIRST_CHILD(this),</div><div class='add'>+            FIRST_CHILD(this)-&gt;fops-&gt;removexattr, &amp;newloc, contri_key, NULL);</div><div class='ctx'> </div><div class='del'>-int32_t</div><div class='del'>-marker_do_rename (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        marker_local_t       *local                      = NULL;</div><div class='del'>-        marker_local_t       *oplocal                    = NULL;</div><div class='del'>-        char                  contri_key[QUOTA_KEY_MAX]  = {0, };</div><div class='del'>-        int32_t               ret                        = 0;</div><div class='del'>-        quota_meta_t          contribution               = {0, };</div><div class='add'>+        loc_wipe(&amp;newloc);</div><div class='add'>+    } else {</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-        oplocal = local-&gt;oplocal;</div><div class='add'>+        STACK_UNWIND_STRICT(rename, frame, op_ret, op_errno, buf, preoldparent,</div><div class='add'>+                            postoldparent, prenewparent, postnewparent, xdata);</div><div class='ctx'> </div><div class='del'>-        //Reset frame uid and gid if set.</div><div class='del'>-        if (cookie == (void *) _GF_UID_GID_CHANGED)</div><div class='del'>-                MARKER_RESET_UID_GID (frame, frame-&gt;root, local);</div><div class='del'>-</div><div class='del'>-        if ((op_ret &lt; 0) &amp;&amp; (op_errno != ENOATTR) &amp;&amp; (op_errno != ENODATA)) {</div><div class='del'>-                local-&gt;err = op_errno ? op_errno : EINVAL;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "fetching contribution values from %s (gfid:%s) "</div><div class='del'>-                        "failed (%s)", oplocal-&gt;loc.path,</div><div class='del'>-                        uuid_utoa (oplocal-&gt;loc.inode-&gt;gfid),</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-                goto err;</div><div class='add'>+        if ((op_ret &lt; 0) || (local == NULL)) {</div><div class='add'>+            goto out;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        GET_CONTRI_KEY (this, contri_key, oplocal-&gt;loc.parent-&gt;gfid, ret);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;err = errno ? errno : ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+        if (priv-&gt;feature_enabled &amp; GF_XTIME) {</div><div class='add'>+            // update marks on oldpath</div><div class='add'>+            if (!local-&gt;loc.inode)</div><div class='add'>+                local-&gt;loc.inode = inode_ref(oplocal-&gt;loc.inode);</div><div class='add'>+            gf_uuid_copy(local-&gt;loc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='add'>+            marker_xtime_update_marks(this, oplocal);</div><div class='add'>+            marker_xtime_update_marks(this, local);</div><div class='ctx'>         }</div><div class='del'>-        quota_dict_get_meta (dict, contri_key, &amp;contribution);</div><div class='del'>-        oplocal-&gt;contribution = contribution;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (frame, marker_rename_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rename, &amp;oplocal-&gt;loc,</div><div class='del'>-                    &amp;local-&gt;loc, local-&gt;xdata);</div><div class='add'>+out:</div><div class='add'>+    if (!(priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        marker_local_unref(local);</div><div class='add'>+        marker_local_unref(oplocal);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-err:</div><div class='del'>-        marker_rename_unwind (frame, NULL, this, 0, 0, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+quota_err:</div><div class='add'>+    marker_rename_unwind(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_get_oldpath_contribution (call_frame_t *lk_frame, void *cookie,</div><div class='del'>-                                 xlator_t *this, int32_t op_ret,</div><div class='del'>-                                 int32_t op_errno, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        call_frame_t    *frame                      = NULL;</div><div class='del'>-        marker_local_t  *local                      = NULL;</div><div class='del'>-        marker_local_t  *oplocal                    = NULL;</div><div class='del'>-        char             contri_key[QUOTA_KEY_MAX]  = {0, };</div><div class='del'>-        int32_t          ret                        = 0;</div><div class='add'>+marker_do_rename(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_local_t *oplocal = NULL;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    quota_meta_t contribution = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+    oplocal = local-&gt;oplocal;</div><div class='add'>+</div><div class='add'>+    // Reset frame uid and gid if set.</div><div class='add'>+    if (cookie == (void *)_GF_UID_GID_CHANGED)</div><div class='add'>+        MARKER_RESET_UID_GID(frame, frame-&gt;root, local);</div><div class='add'>+</div><div class='add'>+    if ((op_ret &lt; 0) &amp;&amp; (op_errno != ENOATTR) &amp;&amp; (op_errno != ENODATA)) {</div><div class='add'>+        local-&gt;err = op_errno ? op_errno : EINVAL;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "fetching contribution values from %s (gfid:%s) "</div><div class='add'>+               "failed (%s)",</div><div class='add'>+               oplocal-&gt;loc.path, uuid_utoa(oplocal-&gt;loc.inode-&gt;gfid),</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    GET_CONTRI_KEY(this, contri_key, oplocal-&gt;loc.parent-&gt;gfid, ret);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;err = errno ? errno : ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+    quota_dict_get_meta(dict, contri_key, &amp;contribution);</div><div class='add'>+    oplocal-&gt;contribution = contribution;</div><div class='add'>+</div><div class='add'>+    STACK_WIND(frame, marker_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, &amp;oplocal-&gt;loc, &amp;local-&gt;loc,</div><div class='add'>+               local-&gt;xdata);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='del'>-        local = lk_frame-&gt;local;</div><div class='del'>-        oplocal = local-&gt;oplocal;</div><div class='del'>-        frame = local-&gt;frame;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt; 0) {</div><div class='del'>-                local-&gt;err = op_errno ? op_errno : EINVAL;</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "cannot hold inodelk on %s (gfid:%s) (%s)",</div><div class='del'>-                        oplocal-&gt;loc.path, uuid_utoa (oplocal-&gt;loc.inode-&gt;gfid),</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-                if (local-&gt;lk_frame) {</div><div class='del'>-                        STACK_DESTROY (local-&gt;lk_frame-&gt;root);</div><div class='del'>-                        local-&gt;lk_frame = NULL;</div><div class='del'>-                }</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+err:</div><div class='add'>+    marker_rename_unwind(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-        GET_CONTRI_KEY (this, contri_key, oplocal-&gt;loc.parent-&gt;gfid, ret);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                local-&gt;err = errno ? errno : ENOMEM;</div><div class='del'>-                goto err;</div><div class='add'>+int32_t</div><div class='add'>+marker_get_oldpath_contribution(call_frame_t *lk_frame, void *cookie,</div><div class='add'>+                                xlator_t *this, int32_t op_ret,</div><div class='add'>+                                int32_t op_errno, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_local_t *oplocal = NULL;</div><div class='add'>+    char contri_key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+</div><div class='add'>+    local = lk_frame-&gt;local;</div><div class='add'>+    oplocal = local-&gt;oplocal;</div><div class='add'>+    frame = local-&gt;frame;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt; 0) {</div><div class='add'>+        local-&gt;err = op_errno ? op_errno : EINVAL;</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "cannot hold inodelk on %s (gfid:%s) (%s)", oplocal-&gt;loc.path,</div><div class='add'>+               uuid_utoa(oplocal-&gt;loc.inode-&gt;gfid), strerror(op_errno));</div><div class='add'>+        if (local-&gt;lk_frame) {</div><div class='add'>+            STACK_DESTROY(local-&gt;lk_frame-&gt;root);</div><div class='add'>+            local-&gt;lk_frame = NULL;</div><div class='ctx'>         }</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* getxattr requires uid and gid to be 0,</div><div class='del'>-         * reset them in the callback.</div><div class='del'>-         */</div><div class='del'>-        MARKER_SET_UID_GID (frame, local, frame-&gt;root);</div><div class='add'>+    GET_CONTRI_KEY(this, contri_key, oplocal-&gt;loc.parent-&gt;gfid, ret);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        local-&gt;err = errno ? errno : ENOMEM;</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (oplocal-&gt;loc.gfid))</div><div class='del'>-                        gf_uuid_copy (oplocal-&gt;loc.gfid,</div><div class='del'>-                                   oplocal-&gt;loc.inode-&gt;gfid);</div><div class='add'>+    /* getxattr requires uid and gid to be 0,</div><div class='add'>+     * reset them in the callback.</div><div class='add'>+     */</div><div class='add'>+    MARKER_SET_UID_GID(frame, local, frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        GF_UUID_ASSERT (oplocal-&gt;loc.gfid);</div><div class='add'>+    if (gf_uuid_is_null(oplocal-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(oplocal-&gt;loc.gfid, oplocal-&gt;loc.inode-&gt;gfid);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND_COOKIE (frame, marker_do_rename,</div><div class='del'>-                           frame-&gt;cookie, FIRST_CHILD(this),</div><div class='del'>-                           FIRST_CHILD(this)-&gt;fops-&gt;getxattr,</div><div class='del'>-                           &amp;oplocal-&gt;loc, contri_key, NULL);</div><div class='add'>+    GF_UUID_ASSERT(oplocal-&gt;loc.gfid);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND_COOKIE(frame, marker_do_rename, frame-&gt;cookie, FIRST_CHILD(this),</div><div class='add'>+                      FIRST_CHILD(this)-&gt;fops-&gt;getxattr, &amp;oplocal-&gt;loc,</div><div class='add'>+                      contri_key, NULL);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        marker_rename_unwind (frame, NULL, this, 0, 0, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    marker_rename_unwind(frame, NULL, this, 0, 0, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* For a marker_rename FOP, following is the algorithm used for Quota</div><div class='ctx'>  * accounting. The use-case considered is:</div><div class='ctx'>  * 1. rename (src, dst)</div><div class='hunk'>@@ -1704,628 +1702,631 @@ err:</div><div class='ctx'>  * 10) create contribution xattr to dst-parent on src-inode.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-marker_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,</div><div class='del'>-               loc_t *newloc, dict_t *xdata)</div><div class='add'>+marker_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret              = 0;</div><div class='del'>-        marker_local_t *local            = NULL;</div><div class='del'>-        marker_local_t *oplocal          = NULL;</div><div class='del'>-        marker_conf_t  *priv             = NULL;</div><div class='del'>-        struct gf_flock lock             = {0, };</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_local_t *oplocal = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    struct gf_flock lock = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto rename_wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto rename_wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        oplocal = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    oplocal = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, oplocal);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, oplocal);</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = local;</div><div class='add'>+    frame-&gt;local = local;</div><div class='ctx'> </div><div class='del'>-        local-&gt;oplocal = marker_local_ref (oplocal);</div><div class='add'>+    local-&gt;oplocal = marker_local_ref(oplocal);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, newloc);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, newloc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;oplocal-&gt;loc, oldloc);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = loc_copy(&amp;oplocal-&gt;loc, oldloc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (!(priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                goto rename_wind;</div><div class='del'>-        }</div><div class='add'>+    if (!(priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        goto rename_wind;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = mq_inode_loc_fill (NULL, newloc-&gt;parent, &amp;local-&gt;parent_loc);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = mq_inode_loc_fill(NULL, newloc-&gt;parent, &amp;local-&gt;parent_loc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = mq_inode_loc_fill (NULL, oldloc-&gt;parent, &amp;oplocal-&gt;parent_loc);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = mq_inode_loc_fill(NULL, oldloc-&gt;parent, &amp;oplocal-&gt;parent_loc);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        lock.l_len    = 0;</div><div class='del'>-        lock.l_start  = 0;</div><div class='del'>-        lock.l_type   = F_WRLCK;</div><div class='del'>-        lock.l_whence = SEEK_SET;</div><div class='add'>+    lock.l_len = 0;</div><div class='add'>+    lock.l_start = 0;</div><div class='add'>+    lock.l_type = F_WRLCK;</div><div class='add'>+    lock.l_whence = SEEK_SET;</div><div class='ctx'> </div><div class='del'>-        local-&gt;xdata = xdata ? dict_ref (xdata) : dict_new ();</div><div class='del'>-        ret = dict_set_int32 (local-&gt;xdata, GF_REQUEST_LINK_COUNT_XDATA, 1);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    local-&gt;xdata = xdata ? dict_ref(xdata) : dict_new();</div><div class='add'>+    ret = dict_set_int32(local-&gt;xdata, GF_REQUEST_LINK_COUNT_XDATA, 1);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;frame = frame;</div><div class='del'>-        local-&gt;lk_frame = create_frame (this, this-&gt;ctx-&gt;pool);</div><div class='del'>-        if (local-&gt;lk_frame == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    local-&gt;frame = frame;</div><div class='add'>+    local-&gt;lk_frame = create_frame(this, this-&gt;ctx-&gt;pool);</div><div class='add'>+    if (local-&gt;lk_frame == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        local-&gt;lk_frame-&gt;root-&gt;uid = 0;</div><div class='del'>-        local-&gt;lk_frame-&gt;root-&gt;gid = 0;</div><div class='del'>-        local-&gt;lk_frame-&gt;local = local;</div><div class='del'>-        set_lk_owner_from_ptr (&amp;local-&gt;lk_frame-&gt;root-&gt;lk_owner,</div><div class='del'>-                               local-&gt;lk_frame-&gt;root);</div><div class='add'>+    local-&gt;lk_frame-&gt;root-&gt;uid = 0;</div><div class='add'>+    local-&gt;lk_frame-&gt;root-&gt;gid = 0;</div><div class='add'>+    local-&gt;lk_frame-&gt;local = local;</div><div class='add'>+    set_lk_owner_from_ptr(&amp;local-&gt;lk_frame-&gt;root-&gt;lk_owner,</div><div class='add'>+                          local-&gt;lk_frame-&gt;root);</div><div class='ctx'> </div><div class='del'>-        STACK_WIND (local-&gt;lk_frame,</div><div class='del'>-                    marker_get_oldpath_contribution,</div><div class='del'>-                    FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;inodelk,</div><div class='del'>-                    this-&gt;name, &amp;oplocal-&gt;parent_loc,</div><div class='del'>-                    F_SETLKW, &amp;lock, NULL);</div><div class='add'>+    STACK_WIND(local-&gt;lk_frame, marker_get_oldpath_contribution,</div><div class='add'>+               FIRST_CHILD(this), FIRST_CHILD(this)-&gt;fops-&gt;inodelk, this-&gt;name,</div><div class='add'>+               &amp;oplocal-&gt;parent_loc, F_SETLKW, &amp;lock, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> </div><div class='ctx'> rename_wind:</div><div class='del'>-        STACK_WIND (frame, marker_rename_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    STACK_WIND(frame, marker_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (rename, frame, -1, ENOMEM, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL, NULL);</div><div class='del'>-        marker_local_unref (oplocal);</div><div class='add'>+    MARKER_STACK_UNWIND(rename, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='add'>+    marker_local_unref(oplocal);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                     struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+marker_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred while "</div><div class='del'>-                        "truncating a file ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "truncating a file ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    STACK_UNWIND_STRICT(truncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                /* DHT Rebalance process, at the end of migration will</div><div class='del'>-                 * first make the src file as a linkto file and then</div><div class='del'>-                 * truncate the file. By doing a truncate after making the</div><div class='del'>-                 * src file as linkto file, the contri which is already</div><div class='del'>-                 * accounted is left over.</div><div class='del'>-                 * So, we need to account for the linkto file when a truncate</div><div class='del'>-                 * happens, thereby updating the contri properly.</div><div class='del'>-                 * By passing NULL for postbuf, mq_prevalidate does not check</div><div class='del'>-                 * for linkto file.</div><div class='del'>-                 * Same happens with ftruncate as well.</div><div class='del'>-                 */</div><div class='del'>-                if (postbuf &amp;&amp; IS_DHT_LINKFILE_MODE (postbuf))</div><div class='del'>-                        mq_initiate_quota_txn (this, &amp;local-&gt;loc, NULL);</div><div class='del'>-                else</div><div class='del'>-                        mq_initiate_quota_txn (this, &amp;local-&gt;loc, postbuf);</div><div class='del'>-        }</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        /* DHT Rebalance process, at the end of migration will</div><div class='add'>+         * first make the src file as a linkto file and then</div><div class='add'>+         * truncate the file. By doing a truncate after making the</div><div class='add'>+         * src file as linkto file, the contri which is already</div><div class='add'>+         * accounted is left over.</div><div class='add'>+         * So, we need to account for the linkto file when a truncate</div><div class='add'>+         * happens, thereby updating the contri properly.</div><div class='add'>+         * By passing NULL for postbuf, mq_prevalidate does not check</div><div class='add'>+         * for linkto file.</div><div class='add'>+         * Same happens with ftruncate as well.</div><div class='add'>+         */</div><div class='add'>+        if (postbuf &amp;&amp; IS_DHT_LINKFILE_MODE(postbuf))</div><div class='add'>+            mq_initiate_quota_txn(this, &amp;local-&gt;loc, NULL);</div><div class='add'>+        else</div><div class='add'>+            mq_initiate_quota_txn(this, &amp;local-&gt;loc, postbuf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='del'>-                 dict_t *xdata)</div><div class='add'>+marker_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_truncate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (truncate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(truncate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+marker_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred while "</div><div class='del'>-                        "truncating a file ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "truncating a file ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(ftruncate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                if (postbuf &amp;&amp; IS_DHT_LINKFILE_MODE (postbuf))</div><div class='del'>-                        mq_initiate_quota_txn (this, &amp;local-&gt;loc, NULL);</div><div class='del'>-                else</div><div class='del'>-                        mq_initiate_quota_txn (this, &amp;local-&gt;loc, postbuf);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        if (postbuf &amp;&amp; IS_DHT_LINKFILE_MODE(postbuf))</div><div class='add'>+            mq_initiate_quota_txn(this, &amp;local-&gt;loc, NULL);</div><div class='add'>+        else</div><div class='add'>+            mq_initiate_quota_txn(this, &amp;local-&gt;loc, postbuf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-                  dict_t *xdata)</div><div class='add'>+marker_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+                 dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_ftruncate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (ftruncate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(ftruncate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                    struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                    struct iatt *postparent, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx     = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred while "</div><div class='del'>-                        "creating symlinks ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+marker_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                   struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                   struct iatt *postparent, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "creating symlinks ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                ctx = mq_inode_ctx_new (inode, this);</div><div class='del'>-                if (ctx == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        ctx = mq_inode_ctx_new(inode, this);</div><div class='add'>+        if (ctx == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(symlink, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                mq_create_xattrs_txn (this, &amp;local-&gt;loc, buf);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        mq_create_xattrs_txn(this, &amp;local-&gt;loc, buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='del'>-                loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+marker_symlink(call_frame_t *frame, xlator_t *this, const char *linkpath,</div><div class='add'>+               loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_symlink_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkpath, loc, umask,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkpath, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (symlink, frame, -1, ENOMEM, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(symlink, frame, -1, ENOMEM, NULL, NULL, NULL, NULL,</div><div class='add'>+                        NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                  struct iatt *buf, struct iatt *preparent,</div><div class='del'>-                  struct iatt *postparent, dict_t *xdata)</div><div class='add'>+marker_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                 int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                 struct iatt *buf, struct iatt *preparent,</div><div class='add'>+                 struct iatt *postparent, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx     = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred with "</div><div class='del'>-                        "mknod ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred with "</div><div class='add'>+               "mknod ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                ctx = mq_inode_ctx_new (inode, this);</div><div class='del'>-                if (ctx == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        ctx = mq_inode_ctx_new(inode, this);</div><div class='add'>+        if (ctx == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, inode,</div><div class='del'>-                             buf, preparent, postparent, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(mknod, frame, op_ret, op_errno, inode, buf, preparent,</div><div class='add'>+                        postparent, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 ||  local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-        if ((priv-&gt;feature_enabled &amp; GF_QUOTA) &amp;&amp; (S_ISREG (local-&gt;mode))) {</div><div class='del'>-                mq_create_xattrs_txn (this, &amp;local-&gt;loc, buf);</div><div class='del'>-        }</div><div class='add'>+    if ((priv-&gt;feature_enabled &amp; GF_QUOTA) &amp;&amp; (S_ISREG(local-&gt;mode))) {</div><div class='add'>+        mq_create_xattrs_txn(this, &amp;local-&gt;loc, buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-              dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='add'>+marker_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+             dev_t rdev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        local-&gt;mode = mode;</div><div class='add'>+    local-&gt;mode = mode;</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_mknod_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask,</div><div class='del'>-                    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, rdev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (mknod, frame, -1, ENOMEM, NULL,</div><div class='del'>-                             NULL, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(mknod, frame, -1, ENOMEM, NULL, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_fallocate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                      struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+marker_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                     struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred while "</div><div class='del'>-                        "fallocating a file ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "fallocating a file ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fallocate, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fallocate, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                mq_initiate_quota_txn (this, &amp;local-&gt;loc, postbuf);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        mq_initiate_quota_txn(this, &amp;local-&gt;loc, postbuf);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> marker_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,</div><div class='del'>-		 off_t offset, size_t len, dict_t *xdata)</div><div class='add'>+                 off_t offset, size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_fallocate_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd, mode, offset, len,</div><div class='del'>-		    xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_fallocate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fallocate, fd, mode, offset, len,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (fallocate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(fallocate, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='ctx'> marker_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='ctx'>                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='ctx'>                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred during discard",</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "%s occurred during discard",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (discard, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(discard, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                mq_initiate_quota_txn (this, &amp;local-&gt;loc, postbuf);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        mq_initiate_quota_txn(this, &amp;local-&gt;loc, postbuf);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> marker_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-	       size_t len, dict_t *xdata)</div><div class='add'>+               size_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_discard_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_discard_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;discard, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (discard, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(discard, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> marker_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='del'>-                   struct iatt *postbuf, dict_t *xdata)</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf,</div><div class='add'>+                    struct iatt *postbuf, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred during zerofill",</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "%s occurred during zerofill",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (zerofill, frame, op_ret, op_errno, prebuf,</div><div class='del'>-                             postbuf, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(zerofill, frame, op_ret, op_errno, prebuf, postbuf,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='del'>-                mq_initiate_quota_txn (this, &amp;local-&gt;loc, postbuf);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA)</div><div class='add'>+        mq_initiate_quota_txn(this, &amp;local-&gt;loc, postbuf);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='ctx'> marker_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-               off_t len, dict_t *xdata)</div><div class='add'>+                off_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_zerofill_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_zerofill_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;zerofill, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (zerofill, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(zerofill, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /* when a call from the special client is received on</div><div class='ctx'>  * key trusted.glusterfs.volume-mark with value "RESET"</div><div class='ctx'>  * or if the value is 0length, update the change the</div><div class='hunk'>@@ -2333,1225 +2334,1233 @@ err:</div><div class='ctx'>  * timestamp file.</div><div class='ctx'>  */</div><div class='ctx'> int32_t</div><div class='del'>-call_from_sp_client_to_reset_tmfile (call_frame_t *frame,</div><div class='del'>-                                     xlator_t     *this,</div><div class='del'>-                                     dict_t       *dict)</div><div class='add'>+call_from_sp_client_to_reset_tmfile(call_frame_t *frame, xlator_t *this,</div><div class='add'>+                                    dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        int32_t          fd       = 0;</div><div class='del'>-        int32_t          op_ret   = 0;</div><div class='del'>-        int32_t          op_errno = 0;</div><div class='del'>-        data_t          *data     = NULL;</div><div class='del'>-        marker_conf_t   *priv     = NULL;</div><div class='add'>+    int32_t fd = 0;</div><div class='add'>+    int32_t op_ret = 0;</div><div class='add'>+    int32_t op_errno = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+</div><div class='add'>+    if (frame == NULL || this == NULL || dict == NULL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        if (frame == NULL || this == NULL || dict == NULL)</div><div class='del'>-                return -1;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    data = dict_get(dict, "trusted.glusterfs.volume-mark");</div><div class='add'>+    if (data == NULL)</div><div class='add'>+        return -1;</div><div class='ctx'> </div><div class='del'>-        data = dict_get (dict, "trusted.glusterfs.volume-mark");</div><div class='del'>-        if (data == NULL)</div><div class='del'>-                return -1;</div><div class='add'>+    if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_GSYNCD) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EPERM;</div><div class='ctx'> </div><div class='del'>-        if (frame-&gt;root-&gt;pid != GF_CLIENT_PID_GSYNCD) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EPERM;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='add'>+    if (data-&gt;len == 0 ||</div><div class='add'>+        (data-&gt;len == 5 &amp;&amp; memcmp(data-&gt;data, "RESET", 5) == 0)) {</div><div class='add'>+        fd = open(priv-&gt;timestamp_file, O_WRONLY | O_TRUNC);</div><div class='add'>+        if (fd != -1) {</div><div class='add'>+            /* TODO check  whether the O_TRUNC would update the</div><div class='add'>+             * timestamps on a zero length file on all machies.</div><div class='add'>+             */</div><div class='add'>+            sys_close(fd);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        if (data-&gt;len == 0 || (data-&gt;len == 5 &amp;&amp;</div><div class='del'>-                               memcmp (data-&gt;data, "RESET", 5) == 0)) {</div><div class='del'>-                fd = open (priv-&gt;timestamp_file, O_WRONLY|O_TRUNC);</div><div class='del'>-                if (fd != -1) {</div><div class='del'>-                        /* TODO check  whether the O_TRUNC would update the</div><div class='del'>-                         * timestamps on a zero length file on all machies.</div><div class='del'>-                         */</div><div class='del'>-                        sys_close (fd);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (fd != -1 || errno == ENOENT) {</div><div class='del'>-                        op_ret = 0;</div><div class='del'>-                        op_errno = 0;</div><div class='del'>-                } else {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = errno;</div><div class='del'>-                }</div><div class='add'>+        if (fd != -1 || errno == ENOENT) {</div><div class='add'>+            op_ret = 0;</div><div class='add'>+            op_errno = 0;</div><div class='ctx'>         } else {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = EINVAL;</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = errno;</div><div class='ctx'>         }</div><div class='add'>+    } else {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = EINVAL;</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, NULL);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+marker_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred in "</div><div class='del'>-                        "setxattr ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred in "</div><div class='add'>+               "setxattr ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-remove_quota_keys (dict_t *dict, char *k, data_t *v, void *data)</div><div class='del'>-{</div><div class='del'>-        call_frame_t    *frame              = data;</div><div class='del'>-        marker_local_t  *local              = frame-&gt;local;</div><div class='del'>-        xlator_t        *this               = frame-&gt;this;</div><div class='del'>-        marker_conf_t   *priv               = NULL;</div><div class='del'>-        char             ver_str[NAME_MAX]  = {0,};</div><div class='del'>-        char            *dot                = NULL;</div><div class='del'>-        int              ret                = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        /* If quota is enabled immediately after disable.</div><div class='del'>-         * quota healing starts creating new xattrs</div><div class='del'>-         * before completing the cleanup operation.</div><div class='del'>-         * So we should check if the xattr is the new.</div><div class='del'>-         * Do not remove xattr if its xattr</div><div class='del'>-         * version is same as current version</div><div class='del'>-         */</div><div class='del'>-        if ((priv-&gt;feature_enabled &amp; GF_QUOTA) &amp;&amp; priv-&gt;version &gt; 0) {</div><div class='del'>-                snprintf (ver_str, sizeof (ver_str), ".%d", priv-&gt;version);</div><div class='del'>-                dot = strrchr (k, '.');</div><div class='del'>-                if (dot &amp;&amp; !strcmp(dot, ver_str))</div><div class='del'>-                        return 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	ret = syncop_removexattr (FIRST_CHILD (this), &amp;local-&gt;loc, k, 0, NULL);</div><div class='del'>-	if (ret) {</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_ERROR, "%s: Failed to remove "</div><div class='del'>-			"extended attribute: %s", local-&gt;loc.path, k);</div><div class='del'>-                return -1;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+remove_quota_keys(dict_t *dict, char *k, data_t *v, void *data)</div><div class='add'>+{</div><div class='add'>+    call_frame_t *frame = data;</div><div class='add'>+    marker_local_t *local = frame-&gt;local;</div><div class='add'>+    xlator_t *this = frame-&gt;this;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    char ver_str[NAME_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    char *dot = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    /* If quota is enabled immediately after disable.</div><div class='add'>+     * quota healing starts creating new xattrs</div><div class='add'>+     * before completing the cleanup operation.</div><div class='add'>+     * So we should check if the xattr is the new.</div><div class='add'>+     * Do not remove xattr if its xattr</div><div class='add'>+     * version is same as current version</div><div class='add'>+     */</div><div class='add'>+    if ((priv-&gt;feature_enabled &amp; GF_QUOTA) &amp;&amp; priv-&gt;version &gt; 0) {</div><div class='add'>+        snprintf(ver_str, sizeof(ver_str), ".%d", priv-&gt;version);</div><div class='add'>+        dot = strrchr(k, '.');</div><div class='add'>+        if (dot &amp;&amp; !strcmp(dot, ver_str))</div><div class='add'>+            return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = syncop_removexattr(FIRST_CHILD(this), &amp;local-&gt;loc, k, 0, NULL);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "%s: Failed to remove "</div><div class='add'>+               "extended attribute: %s",</div><div class='add'>+               local-&gt;loc.path, k);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-quota_xattr_cleaner_cbk (int ret, call_frame_t *frame, void *args)</div><div class='add'>+quota_xattr_cleaner_cbk(int ret, call_frame_t *frame, void *args)</div><div class='ctx'> {</div><div class='del'>-        dict_t *xdata = args;</div><div class='del'>-        int op_ret = -1;</div><div class='del'>-        int op_errno = 0;</div><div class='add'>+    dict_t *xdata = args;</div><div class='add'>+    int op_ret = -1;</div><div class='add'>+    int op_errno = 0;</div><div class='ctx'> </div><div class='del'>-        op_ret   = (ret &lt; 0)? -1: 0;</div><div class='del'>-        op_errno = -ret;</div><div class='add'>+    op_ret = (ret &lt; 0) ? -1 : 0;</div><div class='add'>+    op_errno = -ret;</div><div class='ctx'> </div><div class='del'>-        MARKER_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata);</div><div class='del'>-        return ret;</div><div class='add'>+    MARKER_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-quota_xattr_cleaner (void *args)</div><div class='add'>+quota_xattr_cleaner(void *args)</div><div class='ctx'> {</div><div class='del'>-        struct synctask *task  = NULL;</div><div class='del'>-        call_frame_t    *frame = NULL;</div><div class='del'>-        xlator_t        *this  = NULL;</div><div class='del'>-        marker_local_t   *local = NULL;</div><div class='del'>-        dict_t          *xdata = NULL;</div><div class='del'>-        int             ret    = -1;</div><div class='add'>+    struct synctask *task = NULL;</div><div class='add'>+    call_frame_t *frame = NULL;</div><div class='add'>+    xlator_t *this = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    dict_t *xdata = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        task = synctask_get ();</div><div class='del'>-        if (!task)</div><div class='del'>-                goto out;</div><div class='add'>+    task = synctask_get();</div><div class='add'>+    if (!task)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        frame = task-&gt;frame;</div><div class='del'>-        this  = frame-&gt;this;</div><div class='del'>-        local = frame-&gt;local;</div><div class='add'>+    frame = task-&gt;frame;</div><div class='add'>+    this = frame-&gt;this;</div><div class='add'>+    local = frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        ret = syncop_listxattr (FIRST_CHILD(this), &amp;local-&gt;loc, &amp;xdata, NULL,</div><div class='del'>-                                NULL);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = syncop_listxattr(FIRST_CHILD(this), &amp;local-&gt;loc, &amp;xdata, NULL, NULL);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	ret = dict_foreach_fnmatch (xdata, "trusted.glusterfs.quota.*",</div><div class='del'>-                                    remove_quota_keys, frame);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='del'>-	ret = dict_foreach_fnmatch (xdata, PGFID_XATTR_KEY_PREFIX"*",</div><div class='del'>-                                    remove_quota_keys, frame);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                ret = -errno;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = dict_foreach_fnmatch(xdata, "trusted.glusterfs.quota.*",</div><div class='add'>+                               remove_quota_keys, frame);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+    ret = dict_foreach_fnmatch(xdata, PGFID_XATTR_KEY_PREFIX "*",</div><div class='add'>+                               remove_quota_keys, frame);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        ret = -errno;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (xdata)</div><div class='del'>-                dict_unref (xdata);</div><div class='add'>+    if (xdata)</div><div class='add'>+        dict_unref(xdata);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_do_xattr_cleanup (call_frame_t *frame, xlator_t *this, dict_t *xdata,</div><div class='add'>+marker_do_xattr_cleanup(call_frame_t *frame, xlator_t *this, dict_t *xdata,</div><div class='ctx'>                         loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        int           ret       = -1;</div><div class='del'>-        marker_local_t *local    = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-	if (!local)</div><div class='del'>-		goto out;</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (!local)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        ret = synctask_new (this-&gt;ctx-&gt;env, quota_xattr_cleaner,</div><div class='del'>-			    quota_xattr_cleaner_cbk, frame, xdata);</div><div class='del'>-        if (ret) {</div><div class='del'>-		gf_log (this-&gt;name, GF_LOG_ERROR, "Failed to create synctask "</div><div class='del'>-			"for cleaning up quota extended attributes");</div><div class='del'>-                goto out;</div><div class='del'>-	}</div><div class='add'>+    loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = synctask_new(this-&gt;ctx-&gt;env, quota_xattr_cleaner,</div><div class='add'>+                       quota_xattr_cleaner_cbk, frame, xdata);</div><div class='add'>+    if (ret) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Failed to create synctask "</div><div class='add'>+               "for cleaning up quota extended attributes");</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret)</div><div class='del'>-                MARKER_STACK_UNWIND (setxattr, frame, -1, ENOMEM, xdata);</div><div class='add'>+    if (ret)</div><div class='add'>+        MARKER_STACK_UNWIND(setxattr, frame, -1, ENOMEM, xdata);</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-marker_xattr_cleanup_cmd (dict_t *dict)</div><div class='add'>+marker_xattr_cleanup_cmd(dict_t *dict)</div><div class='ctx'> {</div><div class='del'>-        return (dict_get (dict, VIRTUAL_QUOTA_XATTR_CLEANUP_KEY) != NULL);</div><div class='add'>+    return (dict_get(dict, VIRTUAL_QUOTA_XATTR_CLEANUP_KEY) != NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='del'>-                 int32_t flags, dict_t *xdata)</div><div class='add'>+marker_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+                int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret            = 0;</div><div class='del'>-        marker_local_t  *local          = NULL;</div><div class='del'>-        marker_conf_t   *priv           = NULL;</div><div class='del'>-        int              op_errno       = ENOMEM;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (marker_xattr_cleanup_cmd (dict)) {</div><div class='del'>-                if (frame-&gt;root-&gt;uid != 0 || frame-&gt;root-&gt;gid != 0) {</div><div class='del'>-                        op_errno = EPERM;</div><div class='del'>-                        ret = -1;</div><div class='del'>-                        goto err;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /* The following function does the cleanup and then unwinds the</div><div class='del'>-                 * corresponding call*/</div><div class='del'>-                loc_path (loc, NULL);</div><div class='del'>-                marker_do_xattr_cleanup (frame, this, xdata, loc);</div><div class='del'>-                return 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    int op_errno = ENOMEM;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (marker_xattr_cleanup_cmd(dict)) {</div><div class='add'>+        if (frame-&gt;root-&gt;uid != 0 || frame-&gt;root-&gt;gid != 0) {</div><div class='add'>+            op_errno = EPERM;</div><div class='add'>+            ret = -1;</div><div class='add'>+            goto err;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        ret = marker_key_replace_with_ver (this, dict);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+        /* The following function does the cleanup and then unwinds the</div><div class='add'>+         * corresponding call*/</div><div class='add'>+        loc_path(loc, NULL);</div><div class='add'>+        marker_do_xattr_cleanup(frame, this, xdata, loc);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    ret = marker_key_replace_with_ver(this, dict);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = call_from_sp_client_to_reset_tmfile (frame, this, dict);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    ret = call_from_sp_client_to_reset_tmfile(frame, this, dict);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_setxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                      int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+marker_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                     int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred in "</div><div class='del'>-                        "fsetxattr", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred in "</div><div class='add'>+               "fsetxattr",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-                  int32_t flags, dict_t *xdata)</div><div class='add'>+marker_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='add'>+                 int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        ret = call_from_sp_client_to_reset_tmfile (frame, this, dict);</div><div class='del'>-        if (ret == 0)</div><div class='del'>-                return 0;</div><div class='add'>+    ret = call_from_sp_client_to_reset_tmfile(frame, this, dict);</div><div class='add'>+    if (ret == 0)</div><div class='add'>+        return 0;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (fsetxattr, frame, -1, ENOMEM, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(fsetxattr, frame, -1, ENOMEM, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                     struct iatt *statpost, dict_t *xdata)</div><div class='add'>+marker_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                    struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "%s occurred in "</div><div class='del'>-                        "fsetattr ", strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred in "</div><div class='add'>+               "fsetattr ",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (fsetattr, frame, op_ret, op_errno, statpre,</div><div class='del'>-                             statpost, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(fsetattr, frame, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+marker_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='add'>+                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = marker_inode_loc_fill (fd-&gt;inode, &amp;local-&gt;loc);</div><div class='add'>+    ret = marker_inode_loc_fill(fd-&gt;inode, &amp;local-&gt;loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_fsetattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (fsetattr, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(fsetattr, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                    int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='del'>-                    struct iatt *statpost, dict_t *xdata)</div><div class='add'>+marker_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                   int32_t op_ret, int32_t op_errno, struct iatt *statpre,</div><div class='add'>+                   struct iatt *statpost, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                        "%s occurred during setattr of %s",</div><div class='del'>-                        strerror (op_errno),</div><div class='del'>-                        (local ? local-&gt;loc.path : "&lt;nul&gt;"));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "%s occurred during setattr of %s",</div><div class='add'>+               strerror(op_errno), (local ? local-&gt;loc.path : "&lt;nul&gt;"));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (setattr, frame, op_ret, op_errno, statpre,</div><div class='del'>-                             statpost, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(setattr, frame, op_ret, op_errno, statpre, statpost,</div><div class='add'>+                        xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='add'>+marker_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               struct iatt *stbuf, int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret   = 0;</div><div class='del'>-        marker_local_t  *local = NULL;</div><div class='del'>-        marker_conf_t   *priv  = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_setattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (setattr, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(setattr, frame, -1, ENOMEM, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-marker_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                        int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='add'>+marker_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                       int32_t op_ret, int32_t op_errno, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        marker_local_t     *local   = NULL;</div><div class='del'>-        marker_conf_t      *priv    = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE,</div><div class='del'>-                                "%s occurred while "</div><div class='del'>-                                "removing extended attribute",</div><div class='del'>-                                     strerror (op_errno));</div><div class='del'>-        }</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE,</div><div class='add'>+               "%s occurred while "</div><div class='add'>+               "removing extended attribute",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='ctx'> </div><div class='del'>-        frame-&gt;local = NULL;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='ctx'> </div><div class='del'>-        STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno, xdata);</div><div class='add'>+    STACK_UNWIND_STRICT(removexattr, frame, op_ret, op_errno, xdata);</div><div class='ctx'> </div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='del'>-                marker_xtime_update_marks (this, local);</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_XTIME)</div><div class='add'>+        marker_xtime_update_marks(this, local);</div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='add'>+    marker_local_unref(local);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                    const char *name, dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        int32_t          ret                  = -1;</div><div class='del'>-        int32_t          i                    = 0;</div><div class='del'>-        marker_local_t  *local                = NULL;</div><div class='del'>-        marker_conf_t   *priv                 = NULL;</div><div class='del'>-        char             key[QUOTA_KEY_MAX]   = {0, };</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        if (name) {</div><div class='del'>-                for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='del'>-                        if (strcmp (name, mq_ext_xattrs[i]))</div><div class='del'>-                                continue;</div><div class='del'>-</div><div class='del'>-                        GET_QUOTA_KEY (this, key, mq_ext_xattrs[i], ret);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto err;</div><div class='del'>-                        name = key;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='add'>+marker_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+                   const char *name, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    int32_t i = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    char key[QUOTA_KEY_MAX] = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    if (name) {</div><div class='add'>+        for (i = 0; mq_ext_xattrs[i]; i++) {</div><div class='add'>+            if (strcmp(name, mq_ext_xattrs[i]))</div><div class='add'>+                continue;</div><div class='add'>+</div><div class='add'>+            GET_QUOTA_KEY(this, key, mq_ext_xattrs[i], ret);</div><div class='add'>+            if (ret &lt; 0)</div><div class='add'>+                goto err;</div><div class='add'>+            name = key;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_removexattr_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, marker_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (removexattr, frame, -1, ENOMEM, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(removexattr, frame, -1, ENOMEM, NULL);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static gf_boolean_t</div><div class='del'>-__has_quota_xattrs (dict_t *xattrs)</div><div class='add'>+__has_quota_xattrs(dict_t *xattrs)</div><div class='ctx'> {</div><div class='del'>-        if (dict_foreach_match (xattrs, _is_quota_internal_xattr, NULL,</div><div class='del'>-                                dict_null_foreach_fn, NULL) &gt; 0)</div><div class='del'>-                return _gf_true;</div><div class='add'>+    if (dict_foreach_match(xattrs, _is_quota_internal_xattr, NULL,</div><div class='add'>+                           dict_null_foreach_fn, NULL) &gt; 0)</div><div class='add'>+        return _gf_true;</div><div class='ctx'> </div><div class='del'>-        return _gf_false;</div><div class='add'>+    return _gf_false;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                   int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='del'>-                   struct iatt *buf, dict_t *dict, struct iatt *postparent)</div><div class='del'>-{</div><div class='del'>-        marker_conf_t      *priv                       = NULL;</div><div class='del'>-        marker_local_t     *local                      = NULL;</div><div class='del'>-        dict_t             *xattrs                     = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx                        = NULL;</div><div class='del'>-        int32_t             ret                        = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = (marker_local_t *) frame-&gt;local;</div><div class='del'>-        frame-&gt;local = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_TRACE, "lookup failed with %s",</div><div class='del'>-                        strerror (op_errno));</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ret = marker_key_set_ver (this, dict);</div><div class='del'>-        if (ret &lt; 0) {</div><div class='del'>-                op_ret = -1;</div><div class='del'>-                op_errno = ENOMEM;</div><div class='del'>-                goto unwind;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (dict &amp;&amp; __has_quota_xattrs (dict)) {</div><div class='del'>-                xattrs = dict_copy_with_ref (dict, NULL);</div><div class='del'>-                if (!xattrs) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                } else {</div><div class='del'>-                        marker_filter_internal_xattrs (this, xattrs);</div><div class='del'>-                }</div><div class='del'>-        } else if (dict) {</div><div class='del'>-                xattrs = dict_ref (dict);</div><div class='add'>+marker_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                  int32_t op_ret, int32_t op_errno, inode_t *inode,</div><div class='add'>+                  struct iatt *buf, dict_t *dict, struct iatt *postparent)</div><div class='add'>+{</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    dict_t *xattrs = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = (marker_local_t *)frame-&gt;local;</div><div class='add'>+    frame-&gt;local = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_TRACE, "lookup failed with %s",</div><div class='add'>+               strerror(op_errno));</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    ret = marker_key_set_ver(this, dict);</div><div class='add'>+    if (ret &lt; 0) {</div><div class='add'>+        op_ret = -1;</div><div class='add'>+        op_errno = ENOMEM;</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (dict &amp;&amp; __has_quota_xattrs(dict)) {</div><div class='add'>+        xattrs = dict_copy_with_ref(dict, NULL);</div><div class='add'>+        if (!xattrs) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+        } else {</div><div class='add'>+            marker_filter_internal_xattrs(this, xattrs);</div><div class='ctx'>         }</div><div class='add'>+    } else if (dict) {</div><div class='add'>+        xattrs = dict_ref(dict);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='del'>-                ctx = mq_inode_ctx_new (inode, this);</div><div class='del'>-                if (ctx == NULL) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s", uuid_utoa (inode-&gt;gfid));</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                }</div><div class='add'>+    if (op_ret &gt;= 0 &amp;&amp; inode &amp;&amp; (priv-&gt;feature_enabled &amp; GF_QUOTA)) {</div><div class='add'>+        ctx = mq_inode_ctx_new(inode, this);</div><div class='add'>+        if (ctx == NULL) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(inode-&gt;gfid));</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,</div><div class='del'>-                             xattrs, postparent);</div><div class='del'>-</div><div class='del'>-        if (op_ret == -1 || local == NULL)</div><div class='del'>-                goto out;</div><div class='add'>+    STACK_UNWIND_STRICT(lookup, frame, op_ret, op_errno, inode, buf, xattrs,</div><div class='add'>+                        postparent);</div><div class='ctx'> </div><div class='del'>-        /* copy the gfid from the stat structure instead of inode,</div><div class='del'>-         * since if the lookup is fresh lookup, then the inode</div><div class='del'>-         * would have not yet linked to the inode table which happens</div><div class='del'>-         * in protocol/server.</div><div class='del'>-         */</div><div class='del'>-        if (gf_uuid_is_null (local-&gt;loc.gfid))</div><div class='del'>-                gf_uuid_copy (local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='add'>+    if (op_ret == -1 || local == NULL)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='add'>+    /* copy the gfid from the stat structure instead of inode,</div><div class='add'>+     * since if the lookup is fresh lookup, then the inode</div><div class='add'>+     * would have not yet linked to the inode table which happens</div><div class='add'>+     * in protocol/server.</div><div class='add'>+     */</div><div class='add'>+    if (gf_uuid_is_null(local-&gt;loc.gfid))</div><div class='add'>+        gf_uuid_copy(local-&gt;loc.gfid, buf-&gt;ia_gfid);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                mq_xattr_state (this, &amp;local-&gt;loc, dict, *buf);</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+        mq_xattr_state(this, &amp;local-&gt;loc, dict, *buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        marker_local_unref (local);</div><div class='del'>-        if (xattrs)</div><div class='del'>-                dict_unref (xattrs);</div><div class='add'>+    marker_local_unref(local);</div><div class='add'>+    if (xattrs)</div><div class='add'>+        dict_unref(xattrs);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_lookup (call_frame_t *frame, xlator_t *this,</div><div class='del'>-               loc_t *loc, dict_t *xattr_req)</div><div class='add'>+marker_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+              dict_t *xattr_req)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret                     = 0;</div><div class='del'>-        marker_local_t *local                   = NULL;</div><div class='del'>-        marker_conf_t  *priv                    = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new ();</div><div class='del'>-        if (!xattr_req)</div><div class='del'>-                goto err;</div><div class='add'>+    xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new();</div><div class='add'>+    if (!xattr_req)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        ret = marker_key_replace_with_ver (this, xattr_req);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = marker_key_replace_with_ver(this, xattr_req);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled == 0)</div><div class='del'>-                goto wind;</div><div class='add'>+    if (priv-&gt;feature_enabled == 0)</div><div class='add'>+        goto wind;</div><div class='ctx'> </div><div class='del'>-        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-        if (local == NULL)</div><div class='del'>-                goto err;</div><div class='add'>+    local = mem_get0(this-&gt;local_pool);</div><div class='add'>+    if (local == NULL)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+    MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-        ret = loc_copy (&amp;local-&gt;loc, loc);</div><div class='del'>-        if (ret == -1)</div><div class='del'>-                goto err;</div><div class='add'>+    ret = loc_copy(&amp;local-&gt;loc, loc);</div><div class='add'>+    if (ret == -1)</div><div class='add'>+        goto err;</div><div class='ctx'> </div><div class='del'>-        if ((priv-&gt;feature_enabled &amp; GF_QUOTA))</div><div class='del'>-                mq_req_xattr (this, loc, xattr_req, NULL, NULL);</div><div class='add'>+    if ((priv-&gt;feature_enabled &amp; GF_QUOTA))</div><div class='add'>+        mq_req_xattr(this, loc, xattr_req, NULL, NULL);</div><div class='ctx'> </div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, marker_lookup_cbk, FIRST_CHILD(this),</div><div class='del'>-                    FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xattr_req);</div><div class='add'>+    STACK_WIND(frame, marker_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xattr_req);</div><div class='ctx'> </div><div class='del'>-        dict_unref (xattr_req);</div><div class='add'>+    dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        MARKER_STACK_UNWIND (lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL);</div><div class='add'>+    MARKER_STACK_UNWIND(lookup, frame, -1, ENOMEM, NULL, NULL, NULL, NULL);</div><div class='ctx'> </div><div class='del'>-        if (xattr_req)</div><div class='del'>-                dict_unref (xattr_req);</div><div class='add'>+    if (xattr_req)</div><div class='add'>+        dict_unref(xattr_req);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int</div><div class='del'>-marker_build_ancestry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                           int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='del'>-                           dict_t *xdata)</div><div class='add'>+marker_build_ancestry_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                          int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='add'>+                          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        gf_dirent_t        *entry  = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx    = NULL;</div><div class='del'>-        int                 ret    = -1;</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if ((op_ret &lt;= 0) || (entries == NULL)) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if ((op_ret &lt;= 0) || (entries == NULL)) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if (entry-&gt;inode == NULL)</div><div class='add'>+            continue;</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                if (entry-&gt;inode == NULL)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                ret = marker_key_set_ver (this, entry-&gt;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        break;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                ctx = mq_inode_ctx_new (entry-&gt;inode, this);</div><div class='del'>-                if (ctx == NULL)</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s",</div><div class='del'>-                                uuid_utoa (entry-&gt;inode-&gt;gfid));</div><div class='add'>+        ret = marker_key_set_ver(this, entry-&gt;dict);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            break;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='add'>+        ctx = mq_inode_ctx_new(entry-&gt;inode, this);</div><div class='add'>+        if (ctx == NULL)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(entry-&gt;inode-&gt;gfid));</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'> out:</div><div class='del'>-        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='del'>-                     dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        gf_dirent_t        *entry         = NULL;</div><div class='del'>-        marker_conf_t      *priv          = NULL;</div><div class='del'>-        marker_local_t     *local         = NULL;</div><div class='del'>-        loc_t               loc           = {0, };</div><div class='del'>-        int                 ret           = -1;</div><div class='del'>-        char               *resolvedpath  = NULL;</div><div class='del'>-        quota_inode_ctx_t  *ctx           = NULL;</div><div class='del'>-</div><div class='del'>-        if (op_ret &lt;= 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        if (!(priv-&gt;feature_enabled &amp; GF_QUOTA) || (local == NULL)) {</div><div class='del'>-                goto unwind;</div><div class='add'>+marker_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int op_ret, int op_errno, gf_dirent_t *entries,</div><div class='add'>+                    dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    gf_dirent_t *entry = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    int ret = -1;</div><div class='add'>+    char *resolvedpath = NULL;</div><div class='add'>+    quota_inode_ctx_t *ctx = NULL;</div><div class='add'>+</div><div class='add'>+    if (op_ret &lt;= 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    if (!(priv-&gt;feature_enabled &amp; GF_QUOTA) || (local == NULL)) {</div><div class='add'>+        goto unwind;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    list_for_each_entry(entry, &amp;entries-&gt;list, list)</div><div class='add'>+    {</div><div class='add'>+        if ((strcmp(entry-&gt;d_name, ".") == 0) ||</div><div class='add'>+            (strcmp(entry-&gt;d_name, "..") == 0) || entry-&gt;inode == NULL)</div><div class='add'>+            continue;</div><div class='add'>+</div><div class='add'>+        loc.parent = inode_ref(local-&gt;loc.inode);</div><div class='add'>+        loc.inode = inode_ref(entry-&gt;inode);</div><div class='add'>+        ret = inode_path(loc.parent, entry-&gt;d_name, &amp;resolvedpath);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "failed to get the "</div><div class='add'>+                   "path for the entry %s",</div><div class='add'>+                   entry-&gt;d_name);</div><div class='add'>+            loc_wipe(&amp;loc);</div><div class='add'>+            continue;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        list_for_each_entry (entry, &amp;entries-&gt;list, list) {</div><div class='del'>-                if ((strcmp (entry-&gt;d_name, ".") == 0)  ||</div><div class='del'>-                    (strcmp (entry-&gt;d_name, "..") == 0) ||</div><div class='del'>-                    entry-&gt;inode == NULL)</div><div class='del'>-                        continue;</div><div class='del'>-</div><div class='del'>-                loc.parent = inode_ref (local-&gt;loc.inode);</div><div class='del'>-                loc.inode = inode_ref (entry-&gt;inode);</div><div class='del'>-                ret = inode_path (loc.parent, entry-&gt;d_name, &amp;resolvedpath);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "failed to get the "</div><div class='del'>-                                "path for the entry %s", entry-&gt;d_name);</div><div class='del'>-                        loc_wipe (&amp;loc);</div><div class='del'>-                        continue;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                loc.path = resolvedpath;</div><div class='del'>-                resolvedpath = NULL;</div><div class='del'>-</div><div class='del'>-                ctx = mq_inode_ctx_new (loc.inode, this);</div><div class='del'>-                if (ctx == NULL)</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_WARNING, "mq_inode_ctx_new "</div><div class='del'>-                                "failed for %s", uuid_utoa (loc.inode-&gt;gfid));</div><div class='del'>-</div><div class='del'>-                mq_xattr_state (this, &amp;loc, entry-&gt;dict, entry-&gt;d_stat);</div><div class='del'>-                loc_wipe (&amp;loc);</div><div class='del'>-</div><div class='del'>-                ret = marker_key_set_ver (this, entry-&gt;dict);</div><div class='del'>-                if (ret &lt; 0) {</div><div class='del'>-                        op_ret = -1;</div><div class='del'>-                        op_errno = ENOMEM;</div><div class='del'>-                        goto unwind;</div><div class='del'>-                }</div><div class='add'>+        loc.path = resolvedpath;</div><div class='add'>+        resolvedpath = NULL;</div><div class='add'>+</div><div class='add'>+        ctx = mq_inode_ctx_new(loc.inode, this);</div><div class='add'>+        if (ctx == NULL)</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                   "mq_inode_ctx_new "</div><div class='add'>+                   "failed for %s",</div><div class='add'>+                   uuid_utoa(loc.inode-&gt;gfid));</div><div class='add'>+</div><div class='add'>+        mq_xattr_state(this, &amp;loc, entry-&gt;dict, entry-&gt;d_stat);</div><div class='add'>+        loc_wipe(&amp;loc);</div><div class='add'>+</div><div class='add'>+        ret = marker_key_set_ver(this, entry-&gt;dict);</div><div class='add'>+        if (ret &lt; 0) {</div><div class='add'>+            op_ret = -1;</div><div class='add'>+            op_errno = ENOMEM;</div><div class='add'>+            goto unwind;</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> unwind:</div><div class='del'>-        MARKER_STACK_UNWIND (readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='add'>+    MARKER_STACK_UNWIND(readdirp, frame, op_ret, op_errno, entries, xdata);</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-marker_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-                 off_t offset, dict_t *dict)</div><div class='del'>-{</div><div class='del'>-        marker_conf_t  *priv  = NULL;</div><div class='del'>-        loc_t           loc   = {0, };</div><div class='del'>-        marker_local_t *local = NULL;</div><div class='del'>-        int             ret   = -1;</div><div class='del'>-</div><div class='del'>-        priv = this-&gt;private;</div><div class='del'>-</div><div class='del'>-        dict = dict ? dict_ref(dict) : dict_new();</div><div class='del'>-        if (!dict)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        ret = marker_key_replace_with_ver (this, dict);</div><div class='del'>-        if (ret &lt; 0)</div><div class='del'>-                goto unwind;</div><div class='del'>-</div><div class='del'>-        if (dict_get (dict, GET_ANCESTRY_DENTRY_KEY)) {</div><div class='del'>-                STACK_WIND (frame, marker_build_ancestry_cbk,</div><div class='del'>-                            FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-                            fd, size, offset, dict);</div><div class='del'>-        } else {</div><div class='del'>-                if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='del'>-                        local = mem_get0 (this-&gt;local_pool);</div><div class='del'>-</div><div class='del'>-                        MARKER_INIT_LOCAL (frame, local);</div><div class='add'>+marker_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+                off_t offset, dict_t *dict)</div><div class='add'>+{</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='add'>+    marker_local_t *local = NULL;</div><div class='add'>+    int ret = -1;</div><div class='add'>+</div><div class='add'>+    priv = this-&gt;private;</div><div class='add'>+</div><div class='add'>+    dict = dict ? dict_ref(dict) : dict_new();</div><div class='add'>+    if (!dict)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    ret = marker_key_replace_with_ver(this, dict);</div><div class='add'>+    if (ret &lt; 0)</div><div class='add'>+        goto unwind;</div><div class='add'>+</div><div class='add'>+    if (dict_get(dict, GET_ANCESTRY_DENTRY_KEY)) {</div><div class='add'>+        STACK_WIND(frame, marker_build_ancestry_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, dict);</div><div class='add'>+    } else {</div><div class='add'>+        if (priv-&gt;feature_enabled &amp; GF_QUOTA) {</div><div class='add'>+            local = mem_get0(this-&gt;local_pool);</div><div class='ctx'> </div><div class='del'>-                        loc.parent = local-&gt;loc.inode = inode_ref (fd-&gt;inode);</div><div class='add'>+            MARKER_INIT_LOCAL(frame, local);</div><div class='ctx'> </div><div class='del'>-                        mq_req_xattr (this, &amp;loc, dict, NULL, NULL);</div><div class='del'>-                }</div><div class='add'>+            loc.parent = local-&gt;loc.inode = inode_ref(fd-&gt;inode);</div><div class='ctx'> </div><div class='del'>-                STACK_WIND (frame, marker_readdirp_cbk,</div><div class='del'>-                            FIRST_CHILD(this),</div><div class='del'>-                            FIRST_CHILD(this)-&gt;fops-&gt;readdirp,</div><div class='del'>-                            fd, size, offset, dict);</div><div class='add'>+            mq_req_xattr(this, &amp;loc, dict, NULL, NULL);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        dict_unref (dict);</div><div class='del'>-        return 0;</div><div class='add'>+        STACK_WIND(frame, marker_readdirp_cbk, FIRST_CHILD(this),</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;readdirp, fd, size, offset, dict);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    dict_unref(dict);</div><div class='add'>+    return 0;</div><div class='ctx'> unwind:</div><div class='del'>-        MARKER_STACK_UNWIND (readdirp, frame, -1, ENOMEM, NULL, NULL);</div><div class='del'>-        return 0;</div><div class='add'>+    MARKER_STACK_UNWIND(readdirp, frame, -1, ENOMEM, NULL, NULL);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-mem_acct_init (xlator_t *this)</div><div class='add'>+mem_acct_init(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        int     ret = -1;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!this)</div><div class='del'>-                return ret;</div><div class='del'>-</div><div class='del'>-        ret = xlator_mem_acct_init (this, gf_marker_mt_end + 1);</div><div class='add'>+    if (!this)</div><div class='add'>+        return ret;</div><div class='ctx'> </div><div class='del'>-        if (ret != 0) {</div><div class='del'>-                gf_log(this-&gt;name, GF_LOG_ERROR, "Memory accounting init"</div><div class='del'>-                       " failed");</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    ret = xlator_mem_acct_init(this, gf_marker_mt_end + 1);</div><div class='ctx'> </div><div class='add'>+    if (ret != 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "Memory accounting init"</div><div class='add'>+               " failed");</div><div class='ctx'>         return ret;</div><div class='del'>-}</div><div class='add'>+    }</div><div class='ctx'> </div><div class='add'>+    return ret;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-init_xtime_priv (xlator_t *this, dict_t *options)</div><div class='add'>+init_xtime_priv(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int32_t          ret     = -1;</div><div class='del'>-        marker_conf_t   *priv    = NULL;</div><div class='del'>-        char            *tmp_opt = NULL;</div><div class='add'>+    int32_t ret = -1;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    char *tmp_opt = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, options, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, this-&gt;private, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, options, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, this-&gt;private, out);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "volume-uuid", &amp;tmp_opt);</div><div class='add'>+    ret = dict_get_str(options, "volume-uuid", &amp;tmp_opt);</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                priv-&gt;volume_uuid = NULL;</div><div class='del'>-                tmp_opt = "";</div><div class='add'>+    if (ret) {</div><div class='add'>+        priv-&gt;volume_uuid = NULL;</div><div class='add'>+        tmp_opt = "";</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "please specify the volume-uuid"</div><div class='del'>-                        "in the translator options");</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "please specify the volume-uuid"</div><div class='add'>+               "in the translator options");</div><div class='ctx'> </div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='del'>-        gf_asprintf (&amp;priv-&gt;volume_uuid, "%s", tmp_opt);</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='add'>+    gf_asprintf(&amp;priv-&gt;volume_uuid, "%s", tmp_opt);</div><div class='ctx'> </div><div class='del'>-        ret = gf_uuid_parse (priv-&gt;volume_uuid, priv-&gt;volume_uuid_bin);</div><div class='add'>+    ret = gf_uuid_parse(priv-&gt;volume_uuid, priv-&gt;volume_uuid_bin);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "invalid volume uuid %s", priv-&gt;volume_uuid);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "invalid volume uuid %s",</div><div class='add'>+               priv-&gt;volume_uuid);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;(priv-&gt;marker_xattr), "%s.%s.%s",</div><div class='del'>-                           MARKER_XATTR_PREFIX, priv-&gt;volume_uuid,</div><div class='del'>-                           XTIME);</div><div class='add'>+    ret = gf_asprintf(&amp;(priv-&gt;marker_xattr), "%s.%s.%s", MARKER_XATTR_PREFIX,</div><div class='add'>+                      priv-&gt;volume_uuid, XTIME);</div><div class='ctx'> </div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                priv-&gt;marker_xattr = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        priv-&gt;marker_xattr = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "volume-uuid = %s", priv-&gt;volume_uuid);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "volume-uuid = %s", priv-&gt;volume_uuid);</div><div class='ctx'> </div><div class='del'>-        ret = dict_get_str (options, "timestamp-file", &amp;tmp_opt);</div><div class='del'>-        if (ret) {</div><div class='del'>-                priv-&gt;timestamp_file = NULL;</div><div class='del'>-                tmp_opt = "";</div><div class='add'>+    ret = dict_get_str(options, "timestamp-file", &amp;tmp_opt);</div><div class='add'>+    if (ret) {</div><div class='add'>+        priv-&gt;timestamp_file = NULL;</div><div class='add'>+        tmp_opt = "";</div><div class='ctx'> </div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "please specify the timestamp-file"</div><div class='del'>-                        "in the translator options");</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "please specify the timestamp-file"</div><div class='add'>+               "in the translator options");</div><div class='ctx'> </div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = gf_asprintf (&amp;priv-&gt;timestamp_file, "%s", tmp_opt);</div><div class='del'>-        if (ret == -1) {</div><div class='del'>-                priv-&gt;timestamp_file = NULL;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = gf_asprintf(&amp;priv-&gt;timestamp_file, "%s", tmp_opt);</div><div class='add'>+    if (ret == -1) {</div><div class='add'>+        priv-&gt;timestamp_file = NULL;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                "the timestamp-file is = %s", priv-&gt;timestamp_file);</div><div class='add'>+    gf_log(this-&gt;name, GF_LOG_DEBUG, "the timestamp-file is = %s",</div><div class='add'>+           priv-&gt;timestamp_file);</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-marker_xtime_priv_cleanup (xlator_t *this)</div><div class='add'>+marker_xtime_priv_cleanup(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t *priv = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='ctx'> </div><div class='del'>-        priv = (marker_conf_t *) this-&gt;private;</div><div class='add'>+    priv = (marker_conf_t *)this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (priv-&gt;volume_uuid);</div><div class='add'>+    GF_FREE(priv-&gt;volume_uuid);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (priv-&gt;timestamp_file);</div><div class='add'>+    GF_FREE(priv-&gt;timestamp_file);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (priv-&gt;marker_xattr);</div><div class='add'>+    GF_FREE(priv-&gt;marker_xattr);</div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-marker_priv_cleanup (xlator_t *this)</div><div class='add'>+marker_priv_cleanup(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        marker_conf_t *priv = NULL;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO ("marker", this, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO("marker", this, out);</div><div class='ctx'> </div><div class='del'>-        priv = (marker_conf_t *) this-&gt;private;</div><div class='add'>+    priv = (marker_conf_t *)this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, priv, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, priv, out);</div><div class='ctx'> </div><div class='del'>-        marker_xtime_priv_cleanup (this);</div><div class='add'>+    marker_xtime_priv_cleanup(this);</div><div class='ctx'> </div><div class='del'>-        LOCK_DESTROY (&amp;priv-&gt;lock);</div><div class='add'>+    LOCK_DESTROY(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (priv);</div><div class='add'>+    GF_FREE(priv);</div><div class='ctx'> </div><div class='del'>-        if (this-&gt;local_pool) {</div><div class='del'>-                mem_pool_destroy (this-&gt;local_pool);</div><div class='del'>-                this-&gt;local_pool = NULL;</div><div class='del'>-        }</div><div class='add'>+    if (this-&gt;local_pool) {</div><div class='add'>+        mem_pool_destroy(this-&gt;local_pool);</div><div class='add'>+        this-&gt;local_pool = NULL;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return;</div><div class='add'>+    return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-reconfigure (xlator_t *this, dict_t *options)</div><div class='add'>+reconfigure(xlator_t *this, dict_t *options)</div><div class='ctx'> {</div><div class='del'>-        int32_t         ret     = 0;</div><div class='del'>-        data_t         *data    = NULL;</div><div class='del'>-        gf_boolean_t    flag    = _gf_false;</div><div class='del'>-        marker_conf_t  *priv    = NULL;</div><div class='del'>-        int32_t         version = 0;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    gf_boolean_t flag = _gf_false;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='add'>+    int32_t version = 0;</div><div class='ctx'> </div><div class='del'>-        GF_ASSERT (this);</div><div class='del'>-        GF_ASSERT (this-&gt;private);</div><div class='add'>+    GF_ASSERT(this);</div><div class='add'>+    GF_ASSERT(this-&gt;private);</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        priv-&gt;feature_enabled = 0;</div><div class='add'>+    priv-&gt;feature_enabled = 0;</div><div class='ctx'> </div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, options, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, options, out);</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "quota");</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='del'>-                        priv-&gt;feature_enabled |= GF_QUOTA;</div><div class='del'>-        }</div><div class='add'>+    data = dict_get(options, "quota");</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+        if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='add'>+            priv-&gt;feature_enabled |= GF_QUOTA;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "inode-quota");</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='del'>-                        priv-&gt;feature_enabled |= GF_INODE_QUOTA;</div><div class='del'>-        }</div><div class='add'>+    data = dict_get(options, "inode-quota");</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+        if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='add'>+            priv-&gt;feature_enabled |= GF_INODE_QUOTA;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "quota-version");</div><div class='del'>-        if (data)</div><div class='del'>-                ret = gf_string2int32 (data-&gt;data, &amp;version);</div><div class='add'>+    data = dict_get(options, "quota-version");</div><div class='add'>+    if (data)</div><div class='add'>+        ret = gf_string2int32(data-&gt;data, &amp;version);</div><div class='ctx'> </div><div class='del'>-        if (priv-&gt;feature_enabled) {</div><div class='del'>-                if (version &gt;= 0)</div><div class='del'>-                        priv-&gt;version = version;</div><div class='del'>-                else</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR, "Invalid quota "</div><div class='del'>-                                "version %d", priv-&gt;version);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        data = dict_get (options, "xtime");</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                if (ret == 0 &amp;&amp; flag == _gf_true) {</div><div class='del'>-                        marker_xtime_priv_cleanup (this);</div><div class='del'>-</div><div class='del'>-                        ret = init_xtime_priv (this, options);</div><div class='del'>-                        if (ret &lt; 0) {</div><div class='del'>-                                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                                        "failed to initialize xtime private, "</div><div class='del'>-                                        "xtime updation will fail");</div><div class='del'>-                        } else {</div><div class='del'>-                                priv-&gt;feature_enabled |= GF_XTIME;</div><div class='del'>-                                data = dict_get (options, "gsync-force-xtime");</div><div class='del'>-                                if (!data)</div><div class='del'>-                                        goto out;</div><div class='del'>-                                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                                if (ret == 0 &amp;&amp; flag)</div><div class='del'>-                                        priv-&gt;feature_enabled |= GF_XTIME_GSYNC_FORCE;</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if (priv-&gt;feature_enabled) {</div><div class='add'>+        if (version &gt;= 0)</div><div class='add'>+            priv-&gt;version = version;</div><div class='add'>+        else</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+                   "Invalid quota "</div><div class='add'>+                   "version %d",</div><div class='add'>+                   priv-&gt;version);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    data = dict_get(options, "xtime");</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+        if (ret == 0 &amp;&amp; flag == _gf_true) {</div><div class='add'>+            marker_xtime_priv_cleanup(this);</div><div class='add'>+</div><div class='add'>+            ret = init_xtime_priv(this, options);</div><div class='add'>+            if (ret &lt; 0) {</div><div class='add'>+                gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+                       "failed to initialize xtime private, "</div><div class='add'>+                       "xtime updation will fail");</div><div class='add'>+            } else {</div><div class='add'>+                priv-&gt;feature_enabled |= GF_XTIME;</div><div class='add'>+                data = dict_get(options, "gsync-force-xtime");</div><div class='add'>+                if (!data)</div><div class='add'>+                    goto out;</div><div class='add'>+                ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+                if (ret == 0 &amp;&amp; flag)</div><div class='add'>+                    priv-&gt;feature_enabled |= GF_XTIME_GSYNC_FORCE;</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> int32_t</div><div class='del'>-init (xlator_t *this)</div><div class='del'>-{</div><div class='del'>-        dict_t        *options = NULL;</div><div class='del'>-        data_t        *data    = NULL;</div><div class='del'>-        int32_t        ret     = 0;</div><div class='del'>-        gf_boolean_t   flag    = _gf_false;</div><div class='del'>-        marker_conf_t *priv    = NULL;</div><div class='del'>-</div><div class='del'>-        if (!this-&gt;children) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "marker translator needs subvolume defined.");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+init(xlator_t *this)</div><div class='add'>+{</div><div class='add'>+    dict_t *options = NULL;</div><div class='add'>+    data_t *data = NULL;</div><div class='add'>+    int32_t ret = 0;</div><div class='add'>+    gf_boolean_t flag = _gf_false;</div><div class='add'>+    marker_conf_t *priv = NULL;</div><div class='ctx'> </div><div class='del'>-        if (!this-&gt;parents) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "Volume is dangling.");</div><div class='del'>-                return -1;</div><div class='del'>-        }</div><div class='add'>+    if (!this-&gt;children) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "marker translator needs subvolume defined.");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        options = this-&gt;options;</div><div class='add'>+    if (!this-&gt;parents) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "Volume is dangling.");</div><div class='add'>+        return -1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ALLOCATE_OR_GOTO (this-&gt;private, marker_conf_t, err);</div><div class='add'>+    options = this-&gt;options;</div><div class='ctx'> </div><div class='del'>-        priv = this-&gt;private;</div><div class='add'>+    ALLOCATE_OR_GOTO(this-&gt;private, marker_conf_t, err);</div><div class='ctx'> </div><div class='del'>-        priv-&gt;feature_enabled = 0;</div><div class='del'>-        priv-&gt;version = 0;</div><div class='add'>+    priv = this-&gt;private;</div><div class='ctx'> </div><div class='del'>-        LOCK_INIT (&amp;priv-&gt;lock);</div><div class='add'>+    priv-&gt;feature_enabled = 0;</div><div class='add'>+    priv-&gt;version = 0;</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "quota");</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='del'>-                        priv-&gt;feature_enabled |= GF_QUOTA;</div><div class='del'>-        }</div><div class='add'>+    LOCK_INIT(&amp;priv-&gt;lock);</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "inode-quota");</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='del'>-                        priv-&gt;feature_enabled |= GF_INODE_QUOTA;</div><div class='del'>-        }</div><div class='add'>+    data = dict_get(options, "quota");</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+        if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='add'>+            priv-&gt;feature_enabled |= GF_QUOTA;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "quota-version");</div><div class='del'>-        if (data)</div><div class='del'>-                ret = gf_string2int32 (data-&gt;data, &amp;priv-&gt;version);</div><div class='add'>+    data = dict_get(options, "inode-quota");</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+        if (ret == 0 &amp;&amp; flag == _gf_true)</div><div class='add'>+            priv-&gt;feature_enabled |= GF_INODE_QUOTA;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if ((ret == 0) &amp;&amp; priv-&gt;feature_enabled &amp;&amp; priv-&gt;version &lt; 0) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR, "Invalid quota version %d",</div><div class='del'>-                        priv-&gt;version);</div><div class='del'>-                goto err;</div><div class='del'>-        }</div><div class='add'>+    data = dict_get(options, "quota-version");</div><div class='add'>+    if (data)</div><div class='add'>+        ret = gf_string2int32(data-&gt;data, &amp;priv-&gt;version);</div><div class='ctx'> </div><div class='del'>-        data = dict_get (options, "xtime");</div><div class='del'>-        if (data) {</div><div class='del'>-                ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                if (ret == 0 &amp;&amp; flag == _gf_true) {</div><div class='del'>-                        ret = init_xtime_priv (this, options);</div><div class='del'>-                        if (ret &lt; 0)</div><div class='del'>-                                goto err;</div><div class='del'>-</div><div class='del'>-                        priv-&gt;feature_enabled |= GF_XTIME;</div><div class='del'>-                        data = dict_get (options, "gsync-force-xtime");</div><div class='del'>-                        if (!data)</div><div class='del'>-                                goto cont;</div><div class='del'>-                        ret = gf_string2boolean (data-&gt;data, &amp;flag);</div><div class='del'>-                        if (ret == 0 &amp;&amp; flag)</div><div class='del'>-                                priv-&gt;feature_enabled |= GF_XTIME_GSYNC_FORCE;</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    if ((ret == 0) &amp;&amp; priv-&gt;feature_enabled &amp;&amp; priv-&gt;version &lt; 0) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR, "Invalid quota version %d",</div><div class='add'>+               priv-&gt;version);</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>- cont:</div><div class='del'>-        this-&gt;local_pool = mem_pool_new (marker_local_t, 128);</div><div class='del'>-        if (!this-&gt;local_pool) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_ERROR,</div><div class='del'>-                        "failed to create local_t's memory pool");</div><div class='add'>+    data = dict_get(options, "xtime");</div><div class='add'>+    if (data) {</div><div class='add'>+        ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+        if (ret == 0 &amp;&amp; flag == _gf_true) {</div><div class='add'>+            ret = init_xtime_priv(this, options);</div><div class='add'>+            if (ret &lt; 0)</div><div class='ctx'>                 goto err;</div><div class='del'>-        }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+            priv-&gt;feature_enabled |= GF_XTIME;</div><div class='add'>+            data = dict_get(options, "gsync-force-xtime");</div><div class='add'>+            if (!data)</div><div class='add'>+                goto cont;</div><div class='add'>+            ret = gf_string2boolean(data-&gt;data, &amp;flag);</div><div class='add'>+            if (ret == 0 &amp;&amp; flag)</div><div class='add'>+                priv-&gt;feature_enabled |= GF_XTIME_GSYNC_FORCE;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+cont:</div><div class='add'>+    this-&gt;local_pool = mem_pool_new(marker_local_t, 128);</div><div class='add'>+    if (!this-&gt;local_pool) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_ERROR,</div><div class='add'>+               "failed to create local_t's memory pool");</div><div class='add'>+        goto err;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='ctx'> err:</div><div class='del'>-        marker_priv_cleanup (this);</div><div class='add'>+    marker_priv_cleanup(this);</div><div class='ctx'> </div><div class='del'>-        return -1;</div><div class='add'>+    return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-marker_forget (xlator_t *this, inode_t *inode)</div><div class='add'>+marker_forget(xlator_t *this, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        marker_inode_ctx_t *ctx   = NULL;</div><div class='del'>-        uint64_t            value = 0;</div><div class='add'>+    marker_inode_ctx_t *ctx = NULL;</div><div class='add'>+    uint64_t value = 0;</div><div class='ctx'> </div><div class='del'>-        if (inode_ctx_del (inode, this, &amp;value) != 0)</div><div class='del'>-                goto out;</div><div class='add'>+    if (inode_ctx_del(inode, this, &amp;value) != 0)</div><div class='add'>+        goto out;</div><div class='ctx'> </div><div class='del'>-        ctx = (marker_inode_ctx_t *)(unsigned long)value;</div><div class='del'>-        if (ctx == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ctx = (marker_inode_ctx_t *)(unsigned long)value;</div><div class='add'>+    if (ctx == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        mq_forget (this, ctx-&gt;quota_ctx);</div><div class='add'>+    mq_forget(this, ctx-&gt;quota_ctx);</div><div class='ctx'> </div><div class='del'>-        GF_FREE (ctx);</div><div class='add'>+    GF_FREE(ctx);</div><div class='ctx'> out:</div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-fini (xlator_t *this)</div><div class='add'>+fini(xlator_t *this)</div><div class='ctx'> {</div><div class='del'>-        marker_priv_cleanup (this);</div><div class='add'>+    marker_priv_cleanup(this);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct xlator_fops fops = {</div><div class='del'>-        .lookup      = marker_lookup,</div><div class='del'>-        .create      = marker_create,</div><div class='del'>-        .mkdir       = marker_mkdir,</div><div class='del'>-        .writev      = marker_writev,</div><div class='del'>-        .truncate    = marker_truncate,</div><div class='del'>-        .ftruncate   = marker_ftruncate,</div><div class='del'>-        .symlink     = marker_symlink,</div><div class='del'>-        .link        = marker_link,</div><div class='del'>-        .unlink      = marker_unlink,</div><div class='del'>-        .rmdir       = marker_rmdir,</div><div class='del'>-        .rename      = marker_rename,</div><div class='del'>-        .mknod       = marker_mknod,</div><div class='del'>-        .setxattr    = marker_setxattr,</div><div class='del'>-        .fsetxattr   = marker_fsetxattr,</div><div class='del'>-        .setattr     = marker_setattr,</div><div class='del'>-        .fsetattr    = marker_fsetattr,</div><div class='del'>-        .removexattr = marker_removexattr,</div><div class='del'>-        .getxattr    = marker_getxattr,</div><div class='del'>-        .readdirp    = marker_readdirp,</div><div class='del'>-	.fallocate   = marker_fallocate,</div><div class='del'>-	.discard     = marker_discard,</div><div class='del'>-        .zerofill    = marker_zerofill,</div><div class='add'>+    .lookup = marker_lookup,</div><div class='add'>+    .create = marker_create,</div><div class='add'>+    .mkdir = marker_mkdir,</div><div class='add'>+    .writev = marker_writev,</div><div class='add'>+    .truncate = marker_truncate,</div><div class='add'>+    .ftruncate = marker_ftruncate,</div><div class='add'>+    .symlink = marker_symlink,</div><div class='add'>+    .link = marker_link,</div><div class='add'>+    .unlink = marker_unlink,</div><div class='add'>+    .rmdir = marker_rmdir,</div><div class='add'>+    .rename = marker_rename,</div><div class='add'>+    .mknod = marker_mknod,</div><div class='add'>+    .setxattr = marker_setxattr,</div><div class='add'>+    .fsetxattr = marker_fsetxattr,</div><div class='add'>+    .setattr = marker_setattr,</div><div class='add'>+    .fsetattr = marker_fsetattr,</div><div class='add'>+    .removexattr = marker_removexattr,</div><div class='add'>+    .getxattr = marker_getxattr,</div><div class='add'>+    .readdirp = marker_readdirp,</div><div class='add'>+    .fallocate = marker_fallocate,</div><div class='add'>+    .discard = marker_discard,</div><div class='add'>+    .zerofill = marker_zerofill,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-struct xlator_cbks cbks = {</div><div class='del'>-        .forget = marker_forget</div><div class='del'>-};</div><div class='add'>+struct xlator_cbks cbks = {.forget = marker_forget};</div><div class='ctx'> </div><div class='ctx'> struct volume_options options[] = {</div><div class='del'>-        {.key = {"volume-uuid"},</div><div class='del'>-         .default_value = "{{ volume.id }}"},</div><div class='del'>-        {.key = {"timestamp-file"}},</div><div class='del'>-        {.key = {"quota"},</div><div class='del'>-	 .op_version = {1},</div><div class='del'>-	 .flags = OPT_FLAG_NONE,</div><div class='del'>-	 .tags = {},</div><div class='del'>-	},</div><div class='del'>-        {.key = {"inode-quota"},</div><div class='del'>-	 .op_version = {1},</div><div class='del'>-	 .flags = OPT_FLAG_NONE,</div><div class='del'>-	 .tags = {},</div><div class='del'>-	},</div><div class='del'>-        {.key = {"xtime"},</div><div class='del'>-	 .op_version = {1},</div><div class='del'>-	 .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='del'>-	 .tags = {},</div><div class='del'>-	},</div><div class='del'>-        {.key = {"gsync-force-xtime"},</div><div class='del'>-	 .op_version = {2},</div><div class='del'>-	 .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='del'>-	 .tags = {},</div><div class='del'>-	},</div><div class='del'>-        {.key = {"quota-version"},</div><div class='del'>-         .flags = OPT_FLAG_NONE,</div><div class='del'>-        },</div><div class='del'>-        {.key = {NULL}}</div><div class='del'>-};</div><div class='add'>+    {.key = {"volume-uuid"}, .default_value = "{{ volume.id }}"},</div><div class='add'>+    {.key = {"timestamp-file"}},</div><div class='add'>+    {</div><div class='add'>+        .key = {"quota"},</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_NONE,</div><div class='add'>+        .tags = {},</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"inode-quota"},</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_NONE,</div><div class='add'>+        .tags = {},</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"xtime"},</div><div class='add'>+        .op_version = {1},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='add'>+        .tags = {},</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"gsync-force-xtime"},</div><div class='add'>+        .op_version = {2},</div><div class='add'>+        .flags = OPT_FLAG_SETTABLE | OPT_FLAG_FORCE,</div><div class='add'>+        .tags = {},</div><div class='add'>+    },</div><div class='add'>+    {</div><div class='add'>+        .key = {"quota-version"},</div><div class='add'>+        .flags = OPT_FLAG_NONE,</div><div class='add'>+    },</div><div class='add'>+    {.key = {NULL}}};</div><div class='head'>diff --git a/xlators/features/namespace/src/namespace.c b/xlators/features/namespace/src/namespace.c<br/>index b1c61c912fc..581b470381d 100644<br/>--- a/<a href='/cgit/glusterfs.git/tree/xlators/features/namespace/src/namespace.c?h=v5.0rc0&amp;id=45a71c0548b6fd2c757aa2e7b7671a1411948894'>xlators/features/namespace/src/namespace.c</a><br/>+++ b/<a href='/cgit/glusterfs.git/tree/xlators/features/namespace/src/namespace.c?h=v5.0rc0&amp;id=e16868dede6455cab644805af6fe1ac312775e13'>xlators/features/namespace/src/namespace.c</a></div><div class='hunk'>@@ -23,9 +23,9 @@</div><div class='ctx'> </div><div class='ctx'> /* Return codes for common path parsing functions. */</div><div class='ctx'> enum _path_parse_result {</div><div class='del'>-        PATH_PARSE_RESULT_NO_PATH = 0,</div><div class='del'>-        PATH_PARSE_RESULT_FOUND   = 1,</div><div class='del'>-        PATH_PARSE_RESULT_IS_GFID = 2,</div><div class='add'>+    PATH_PARSE_RESULT_NO_PATH = 0,</div><div class='add'>+    PATH_PARSE_RESULT_FOUND = 1,</div><div class='add'>+    PATH_PARSE_RESULT_IS_GFID = 2,</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> typedef enum _path_parse_result path_parse_result_t;</div><div class='hunk'>@@ -33,48 +33,50 @@ typedef enum _path_parse_result path_parse_result_t;</div><div class='ctx'> /* Clean up an ns_local struct. Wipe a loc (its inode is ref'd, so we're good.)</div><div class='ctx'>  */</div><div class='ctx'> static inline void</div><div class='del'>-ns_local_cleanup (ns_local_t *local)</div><div class='add'>+ns_local_cleanup(ns_local_t *local)</div><div class='ctx'> {</div><div class='del'>-        if (!local) {</div><div class='del'>-                return;</div><div class='del'>-        }</div><div class='add'>+    if (!local) {</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        loc_wipe (&amp;local-&gt;loc);</div><div class='del'>-        GF_FREE (local);</div><div class='add'>+    loc_wipe(&amp;local-&gt;loc);</div><div class='add'>+    GF_FREE(local);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Create a new ns_local. We ref the inode, fake a new loc struct, and stash</div><div class='ctx'>  * the stub given to us. */</div><div class='ctx'> static inline ns_local_t *</div><div class='del'>-ns_local_new (call_stub_t *stub, inode_t *inode)</div><div class='add'>+ns_local_new(call_stub_t *stub, inode_t *inode)</div><div class='ctx'> {</div><div class='del'>-        ns_local_t *local = NULL;</div><div class='del'>-        loc_t       loc   = {0, };</div><div class='add'>+    ns_local_t *local = NULL;</div><div class='add'>+    loc_t loc = {</div><div class='add'>+        0,</div><div class='add'>+    };</div><div class='ctx'> </div><div class='del'>-        if (!stub || !inode) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!stub || !inode) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local = GF_CALLOC (1, sizeof (ns_local_t), 0);</div><div class='del'>-        if (local == NULL) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    local = GF_CALLOC(1, sizeof(ns_local_t), 0);</div><div class='add'>+    if (local == NULL) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* Set up a fake loc_t struct to give to the getxattr call. */</div><div class='del'>-        gf_uuid_copy (loc.gfid, inode-&gt;gfid);</div><div class='del'>-        loc.inode = inode_ref (inode);</div><div class='add'>+    /* Set up a fake loc_t struct to give to the getxattr call. */</div><div class='add'>+    gf_uuid_copy(loc.gfid, inode-&gt;gfid);</div><div class='add'>+    loc.inode = inode_ref(inode);</div><div class='ctx'> </div><div class='del'>-        /* If for some reason inode_ref() fails, then just give up. */</div><div class='del'>-        if (!loc.inode) {</div><div class='del'>-                GF_FREE (local);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    /* If for some reason inode_ref() fails, then just give up. */</div><div class='add'>+    if (!loc.inode) {</div><div class='add'>+        GF_FREE(local);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        local-&gt;stub = stub;</div><div class='del'>-        local-&gt;loc = loc;</div><div class='add'>+    local-&gt;stub = stub;</div><div class='add'>+    local-&gt;loc = loc;</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return local;</div><div class='add'>+    return local;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Try parsing a path string. If the path string is a GFID, then return</div><div class='hunk'>@@ -82,110 +84,109 @@ out:</div><div class='ctx'>  * return PATH_PARSE_RESULT_NO_PATH and set the hash to 1. Otherwise, hash the</div><div class='ctx'>  * namespace and store it in the info struct. */</div><div class='ctx'> static path_parse_result_t</div><div class='del'>-parse_path (ns_info_t *info, const char *path)</div><div class='add'>+parse_path(ns_info_t *info, const char *path)</div><div class='ctx'> {</div><div class='del'>-        int         len      = 0;</div><div class='del'>-        const char *ns_begin = path;</div><div class='del'>-        const char *ns_end   = NULL;</div><div class='del'>-</div><div class='del'>-        if (!path || strlen (path) == 0) {</div><div class='del'>-                return PATH_PARSE_RESULT_NO_PATH;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (path[0] == '&lt;') {</div><div class='del'>-                return PATH_PARSE_RESULT_IS_GFID;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Right now we only want the top-level directory, so</div><div class='del'>-         * skip the initial '/' and read until the next '/'. */</div><div class='del'>-        while (*ns_begin == '/') {</div><div class='del'>-                ns_begin++;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* ns_end will point to the next '/' or NULL if there is no delimiting</div><div class='del'>-         * '/' (i.e. "/directory" or the top level "/") */</div><div class='del'>-        ns_end = strchr (ns_begin, '/');</div><div class='del'>-        len = ns_end ? (ns_end - ns_begin) : strlen (ns_begin);</div><div class='del'>-</div><div class='del'>-        if (len != 0) {</div><div class='del'>-                info-&gt;hash = SuperFastHash (ns_begin, len);</div><div class='del'>-        } else {</div><div class='del'>-                /* If our substring is empty, then we can hash '/' instead.</div><div class='del'>-                 * '/' is used in the namespace config for the top-level</div><div class='del'>-                 * namespace. */</div><div class='del'>-                info-&gt;hash = SuperFastHash ("/", 1);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        info-&gt;found = _gf_true;</div><div class='del'>-        return PATH_PARSE_RESULT_FOUND;</div><div class='add'>+    int len = 0;</div><div class='add'>+    const char *ns_begin = path;</div><div class='add'>+    const char *ns_end = NULL;</div><div class='add'>+</div><div class='add'>+    if (!path || strlen(path) == 0) {</div><div class='add'>+        return PATH_PARSE_RESULT_NO_PATH;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (path[0] == '&lt;') {</div><div class='add'>+        return PATH_PARSE_RESULT_IS_GFID;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Right now we only want the top-level directory, so</div><div class='add'>+     * skip the initial '/' and read until the next '/'. */</div><div class='add'>+    while (*ns_begin == '/') {</div><div class='add'>+        ns_begin++;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* ns_end will point to the next '/' or NULL if there is no delimiting</div><div class='add'>+     * '/' (i.e. "/directory" or the top level "/") */</div><div class='add'>+    ns_end = strchr(ns_begin, '/');</div><div class='add'>+    len = ns_end ? (ns_end - ns_begin) : strlen(ns_begin);</div><div class='add'>+</div><div class='add'>+    if (len != 0) {</div><div class='add'>+        info-&gt;hash = SuperFastHash(ns_begin, len);</div><div class='add'>+    } else {</div><div class='add'>+        /* If our substring is empty, then we can hash '/' instead.</div><div class='add'>+         * '/' is used in the namespace config for the top-level</div><div class='add'>+         * namespace. */</div><div class='add'>+        info-&gt;hash = SuperFastHash("/", 1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    info-&gt;found = _gf_true;</div><div class='add'>+    return PATH_PARSE_RESULT_FOUND;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Cache namespace info stored in the stack (info) into the inode. */</div><div class='ctx'> static int</div><div class='del'>-ns_inode_ctx_put (inode_t *inode, xlator_t *this, ns_info_t *info)</div><div class='add'>+ns_inode_ctx_put(inode_t *inode, xlator_t *this, ns_info_t *info)</div><div class='ctx'> {</div><div class='del'>-        ns_info_t *cached_ns_info = NULL;</div><div class='del'>-        uint64_t   ns_as_64       = 0;</div><div class='del'>-        int        ret            = -1;</div><div class='del'>-</div><div class='del'>-        if (!inode || !this) {</div><div class='del'>-                gf_log (this ? this-&gt;name : "namespace", GF_LOG_WARNING,</div><div class='del'>-                        "Need a valid inode and xlator to cache ns_info.");</div><div class='del'>-                ret = -1;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ns_info_t *cached_ns_info = NULL;</div><div class='add'>+    uint64_t ns_as_64 = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        cached_ns_info = GF_CALLOC (1, sizeof (ns_info_t), 0);</div><div class='add'>+    if (!inode || !this) {</div><div class='add'>+        gf_log(this ? this-&gt;name : "namespace", GF_LOG_WARNING,</div><div class='add'>+               "Need a valid inode and xlator to cache ns_info.");</div><div class='add'>+        ret = -1;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* If we've run out of memory, then return ENOMEM. */</div><div class='del'>-        if (cached_ns_info == NULL) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "No memory to cache ns_info.");</div><div class='del'>-                ret = -(ENOMEM);</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    cached_ns_info = GF_CALLOC(1, sizeof(ns_info_t), 0);</div><div class='ctx'> </div><div class='del'>-        *cached_ns_info = *info;</div><div class='del'>-        ns_as_64 = (uint64_t)cached_ns_info;</div><div class='add'>+    /* If we've run out of memory, then return ENOMEM. */</div><div class='add'>+    if (cached_ns_info == NULL) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "No memory to cache ns_info.");</div><div class='add'>+        ret = -(ENOMEM);</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_put (inode, this, ns_as_64);</div><div class='add'>+    *cached_ns_info = *info;</div><div class='add'>+    ns_as_64 = (uint64_t)cached_ns_info;</div><div class='ctx'> </div><div class='del'>-        if (ret) {</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    ret = inode_ctx_put(inode, this, ns_as_64);</div><div class='add'>+</div><div class='add'>+    if (ret) {</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = 0;</div><div class='add'>+    ret = 0;</div><div class='ctx'> out:</div><div class='del'>-        if (ret &amp;&amp; cached_ns_info) {</div><div class='del'>-                GF_FREE (cached_ns_info);</div><div class='del'>-        }</div><div class='add'>+    if (ret &amp;&amp; cached_ns_info) {</div><div class='add'>+        GF_FREE(cached_ns_info);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* Retrieve namespace info cached in the inode into the stack for use in later</div><div class='ctx'>  * translators. */</div><div class='ctx'> static int</div><div class='del'>-ns_inode_ctx_get (inode_t *inode, xlator_t *this, ns_info_t *info)</div><div class='add'>+ns_inode_ctx_get(inode_t *inode, xlator_t *this, ns_info_t *info)</div><div class='ctx'> {</div><div class='del'>-        ns_info_t *cached_ns_info = NULL;</div><div class='del'>-        uint64_t   ns_as_64       = 0;</div><div class='del'>-        int        ret            = -1;</div><div class='add'>+    ns_info_t *cached_ns_info = NULL;</div><div class='add'>+    uint64_t ns_as_64 = 0;</div><div class='add'>+    int ret = -1;</div><div class='ctx'> </div><div class='del'>-        if (!inode) {</div><div class='del'>-                ret = -ENOENT;</div><div class='del'>-                goto out;</div><div class='del'>-        }</div><div class='add'>+    if (!inode) {</div><div class='add'>+        ret = -ENOENT;</div><div class='add'>+        goto out;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        ret = inode_ctx_get (inode, this, &amp;ns_as_64);</div><div class='add'>+    ret = inode_ctx_get(inode, this, &amp;ns_as_64);</div><div class='ctx'> </div><div class='del'>-        if (!ret) {</div><div class='del'>-                cached_ns_info = (ns_info_t *)ns_as_64;</div><div class='del'>-                *info = *cached_ns_info;</div><div class='del'>-        }</div><div class='add'>+    if (!ret) {</div><div class='add'>+        cached_ns_info = (ns_info_t *)ns_as_64;</div><div class='add'>+        *info = *cached_ns_info;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        return ret;</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This callback is the top of the unwind path of our attempt to get the path</div><div class='hunk'>@@ -194,76 +195,75 @@ out:</div><div class='ctx'>  * default stub that we provide in the local, since there's nothing else to do</div><div class='ctx'>  * once we've gotten the namespace hash. */</div><div class='ctx'> int32_t</div><div class='del'>-get_path_resume_cbk (call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='del'>-                     int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='del'>-                     dict_t *xdata)</div><div class='add'>+get_path_resume_cbk(call_frame_t *frame, void *cookie, xlator_t *this,</div><div class='add'>+                    int32_t op_ret, int32_t op_errno, dict_t *dict,</div><div class='add'>+                    dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t  ret          = PATH_PARSE_RESULT_NO_PATH;</div><div class='del'>-        call_frame_t        *resume_frame = NULL;</div><div class='del'>-        ns_local_t          *local        = NULL;</div><div class='del'>-        call_stub_t         *stub         = NULL;</div><div class='del'>-        ns_info_t           *info         = NULL;</div><div class='del'>-        char                *path         = NULL;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, frame, out);</div><div class='del'>-        local = frame-&gt;local;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, local, out);</div><div class='del'>-        stub = local-&gt;stub;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, stub, out);</div><div class='del'>-        /* Get the ns_info from the frame that we will eventually resume,</div><div class='del'>-         * not the frame that we're going to destroy (frame). */</div><div class='del'>-        resume_frame = stub-&gt;frame;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, resume_frame, out);</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, resume_frame-&gt;root, out);</div><div class='del'>-        info = &amp;resume_frame-&gt;root-&gt;ns_info;</div><div class='del'>-</div><div class='del'>-        GF_VALIDATE_OR_GOTO (this-&gt;name, dict, out);</div><div class='del'>-</div><div class='del'>-        /* If we get a value back for the GET_ANCESTRY_PATH_KEY, then we</div><div class='del'>-         * try to access it and parse it like a path. */</div><div class='del'>-        if (!op_ret &amp;&amp; !dict_get_str (dict, GET_ANCESTRY_PATH_KEY, &amp;path)) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "G&gt;P %s retrieved path %s",</div><div class='del'>-                        uuid_utoa (local-&gt;loc.gfid), path);</div><div class='del'>-                /* Now let's parse a path, finally. */</div><div class='del'>-                ret = parse_path (info, path);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='del'>-                /* If we finally found namespace, then stash it. */</div><div class='del'>-                ns_inode_ctx_put (local-&gt;loc.inode, this, info);</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "G&gt;P %s %10u namespace found %s",</div><div class='del'>-                        uuid_utoa (local-&gt;loc.inode-&gt;gfid), info-&gt;hash, path);</div><div class='del'>-        } else if (ret == PATH_PARSE_RESULT_NO_PATH) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "G&gt;P %s has no path",</div><div class='del'>-                        uuid_utoa (local-&gt;loc.inode-&gt;gfid));</div><div class='del'>-        } else if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING,</div><div class='del'>-                        "G&gt;P %s winding failed, still have gfid",</div><div class='del'>-                        uuid_utoa (local-&gt;loc.inode-&gt;gfid));</div><div class='del'>-        }</div><div class='add'>+    path_parse_result_t ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='add'>+    call_frame_t *resume_frame = NULL;</div><div class='add'>+    ns_local_t *local = NULL;</div><div class='add'>+    call_stub_t *stub = NULL;</div><div class='add'>+    ns_info_t *info = NULL;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, frame, out);</div><div class='add'>+    local = frame-&gt;local;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, local, out);</div><div class='add'>+    stub = local-&gt;stub;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, stub, out);</div><div class='add'>+    /* Get the ns_info from the frame that we will eventually resume,</div><div class='add'>+     * not the frame that we're going to destroy (frame). */</div><div class='add'>+    resume_frame = stub-&gt;frame;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, resume_frame, out);</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, resume_frame-&gt;root, out);</div><div class='add'>+    info = &amp;resume_frame-&gt;root-&gt;ns_info;</div><div class='add'>+</div><div class='add'>+    GF_VALIDATE_OR_GOTO(this-&gt;name, dict, out);</div><div class='add'>+</div><div class='add'>+    /* If we get a value back for the GET_ANCESTRY_PATH_KEY, then we</div><div class='add'>+     * try to access it and parse it like a path. */</div><div class='add'>+    if (!op_ret &amp;&amp; !dict_get_str(dict, GET_ANCESTRY_PATH_KEY, &amp;path)) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "G&gt;P %s retrieved path %s",</div><div class='add'>+               uuid_utoa(local-&gt;loc.gfid), path);</div><div class='add'>+        /* Now let's parse a path, finally. */</div><div class='add'>+        ret = parse_path(info, path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='add'>+        /* If we finally found namespace, then stash it. */</div><div class='add'>+        ns_inode_ctx_put(local-&gt;loc.inode, this, info);</div><div class='add'>+</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "G&gt;P %s %10u namespace found %s",</div><div class='add'>+               uuid_utoa(local-&gt;loc.inode-&gt;gfid), info-&gt;hash, path);</div><div class='add'>+    } else if (ret == PATH_PARSE_RESULT_NO_PATH) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "G&gt;P %s has no path",</div><div class='add'>+               uuid_utoa(local-&gt;loc.inode-&gt;gfid));</div><div class='add'>+    } else if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING,</div><div class='add'>+               "G&gt;P %s winding failed, still have gfid",</div><div class='add'>+               uuid_utoa(local-&gt;loc.inode-&gt;gfid));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'> out:</div><div class='del'>-        /* Make sure to clean up local finally. */</div><div class='add'>+    /* Make sure to clean up local finally. */</div><div class='ctx'> </div><div class='del'>-        if (frame) {</div><div class='del'>-                frame-&gt;local = NULL;</div><div class='del'>-                STACK_DESTROY (frame-&gt;root);</div><div class='del'>-        }</div><div class='add'>+    if (frame) {</div><div class='add'>+        frame-&gt;local = NULL;</div><div class='add'>+        STACK_DESTROY(frame-&gt;root);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (local) {</div><div class='del'>-                ns_local_cleanup (local);</div><div class='del'>-        }</div><div class='add'>+    if (local) {</div><div class='add'>+        ns_local_cleanup(local);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        if (stub) {</div><div class='del'>-                call_resume (stub);</div><div class='del'>-        }</div><div class='add'>+    if (stub) {</div><div class='add'>+        call_resume(stub);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return 0;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function tries first to set a namespace based on the information that</div><div class='hunk'>@@ -271,133 +271,129 @@ out:</div><div class='ctx'>  * namespace in the inode, then trying to parse the path string in the `loc_t`</div><div class='ctx'>  * struct. If this fails, then it will try to call inode_path. */</div><div class='ctx'> static path_parse_result_t</div><div class='del'>-set_ns_from_loc (const char *fn, call_frame_t *frame, xlator_t *this,</div><div class='del'>-                 loc_t *loc)</div><div class='add'>+set_ns_from_loc(const char *fn, call_frame_t *frame, xlator_t *this, loc_t *loc)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='del'>-        ns_private_t *priv      = (ns_private_t *)this-&gt;private;</div><div class='del'>-        ns_info_t *info         = &amp;frame-&gt;root-&gt;ns_info;</div><div class='del'>-        char *path              = NULL;</div><div class='add'>+    path_parse_result_t ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='add'>+    ns_private_t *priv = (ns_private_t *)this-&gt;private;</div><div class='add'>+    ns_info_t *info = &amp;frame-&gt;root-&gt;ns_info;</div><div class='add'>+    char *path = NULL;</div><div class='add'>+</div><div class='add'>+    info-&gt;hash = 0;</div><div class='add'>+    info-&gt;found = _gf_false;</div><div class='ctx'> </div><div class='del'>-        info-&gt;hash = 0;</div><div class='del'>-        info-&gt;found = _gf_false;</div><div class='add'>+    if (!priv-&gt;tag_namespaces) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is our first pass at trying to get a path. Try getting</div><div class='add'>+     * from the inode context, then from the loc's path itself. */</div><div class='add'>+    if (!loc || !loc-&gt;path || !loc-&gt;inode) {</div><div class='add'>+        ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='add'>+    } else if (!ns_inode_ctx_get(loc-&gt;inode, this, info)) {</div><div class='add'>+        ret = PATH_PARSE_RESULT_FOUND;</div><div class='add'>+    } else {</div><div class='add'>+        ret = parse_path(info, loc-&gt;path);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s: LOC retrieved path %s", fn,</div><div class='add'>+               loc-&gt;path);</div><div class='ctx'> </div><div class='del'>-        if (!priv-&gt;tag_namespaces) {</div><div class='del'>-                return ret;</div><div class='add'>+        if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='add'>+            ns_inode_ctx_put(loc-&gt;inode, this, info);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        /* This is our first pass at trying to get a path. Try getting</div><div class='del'>-         * from the inode context, then from the loc's path itself. */</div><div class='del'>-        if (!loc || !loc-&gt;path || !loc-&gt;inode) {</div><div class='del'>-                ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='del'>-        } else if (!ns_inode_ctx_get (loc-&gt;inode, this, info)) {</div><div class='del'>-                ret = PATH_PARSE_RESULT_FOUND;</div><div class='del'>-        } else {</div><div class='del'>-                ret = parse_path (info, loc-&gt;path);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s: LOC retrieved path %s",</div><div class='del'>-                        fn, loc-&gt;path);</div><div class='del'>-</div><div class='del'>-                if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='del'>-                        ns_inode_ctx_put (loc-&gt;inode, this, info);</div><div class='del'>-                }</div><div class='add'>+    /* Keep trying by calling inode_path next, making sure to copy</div><div class='add'>+    the loc's gfid into its inode if necessary. */</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        if (gf_uuid_is_null(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+            gf_uuid_copy(loc-&gt;inode-&gt;gfid, loc-&gt;gfid);</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Keep trying by calling inode_path next, making sure to copy</div><div class='del'>-        the loc's gfid into its inode if necessary. */</div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                if (gf_uuid_is_null (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-                        gf_uuid_copy (loc-&gt;inode-&gt;gfid, loc-&gt;gfid);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (inode_path (loc-&gt;inode, NULL, &amp;path) &gt;= 0 &amp;&amp; path) {</div><div class='del'>-                        ret = parse_path (info, loc-&gt;path);</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                                "%s: LOC retrieved path %s", fn, path);</div><div class='del'>-</div><div class='del'>-                        if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='del'>-                                ns_inode_ctx_put (loc-&gt;inode, this, info);</div><div class='del'>-                        }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (path) {</div><div class='del'>-                        GF_FREE (path);</div><div class='del'>-                }</div><div class='add'>+        if (inode_path(loc-&gt;inode, NULL, &amp;path) &gt;= 0 &amp;&amp; path) {</div><div class='add'>+            ret = parse_path(info, loc-&gt;path);</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_DEBUG, "%s: LOC retrieved path %s", fn,</div><div class='add'>+                   path);</div><div class='add'>+</div><div class='add'>+            if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='add'>+                ns_inode_ctx_put(loc-&gt;inode, this, info);</div><div class='add'>+            }</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        /* Report our status, and if we have a GFID, we'll eventually try a</div><div class='del'>-         * GET_ANCESTRY_PATH_KEY wind when we return from this function. */</div><div class='del'>-        if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "%s: LOC %s %10u namespace found for %s", fn,</div><div class='del'>-                        uuid_utoa (loc-&gt;inode-&gt;gfid), info-&gt;hash, loc-&gt;path);</div><div class='del'>-        } else if (ret == PATH_PARSE_RESULT_NO_PATH) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "%s: LOC has no path", fn);</div><div class='del'>-        } else if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                /* Make sure to copy the inode's gfid for the eventual wind. */</div><div class='del'>-                if (gf_uuid_is_null (loc-&gt;inode-&gt;gfid)) {</div><div class='del'>-                        gf_uuid_copy (loc-&gt;inode-&gt;gfid, loc-&gt;gfid);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "%s: LOC %s winding, looking for path", fn,</div><div class='del'>-                        uuid_utoa (loc-&gt;inode-&gt;gfid));</div><div class='add'>+        if (path) {</div><div class='add'>+            GF_FREE(path);</div><div class='ctx'>         }</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-        return ret;</div><div class='add'>+    /* Report our status, and if we have a GFID, we'll eventually try a</div><div class='add'>+     * GET_ANCESTRY_PATH_KEY wind when we return from this function. */</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG,</div><div class='add'>+               "%s: LOC %s %10u namespace found for %s", fn,</div><div class='add'>+               uuid_utoa(loc-&gt;inode-&gt;gfid), info-&gt;hash, loc-&gt;path);</div><div class='add'>+    } else if (ret == PATH_PARSE_RESULT_NO_PATH) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "%s: LOC has no path", fn);</div><div class='add'>+    } else if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        /* Make sure to copy the inode's gfid for the eventual wind. */</div><div class='add'>+        if (gf_uuid_is_null(loc-&gt;inode-&gt;gfid)) {</div><div class='add'>+            gf_uuid_copy(loc-&gt;inode-&gt;gfid, loc-&gt;gfid);</div><div class='add'>+        }</div><div class='add'>+</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s: LOC %s winding, looking for path",</div><div class='add'>+               fn, uuid_utoa(loc-&gt;inode-&gt;gfid));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This function tries first to set a namespace based on the information that</div><div class='ctx'>  * it can retrieve from an `fd_t`. This includes first looking for a cached</div><div class='ctx'>  * namespace in the inode, then trying to call inode_path manually. */</div><div class='ctx'> static path_parse_result_t</div><div class='del'>-set_ns_from_fd (const char *fn, call_frame_t *frame, xlator_t *this, fd_t *fd)</div><div class='add'>+set_ns_from_fd(const char *fn, call_frame_t *frame, xlator_t *this, fd_t *fd)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t  ret  = PATH_PARSE_RESULT_NO_PATH;</div><div class='del'>-        ns_private_t        *priv = (ns_private_t *)this-&gt;private;</div><div class='del'>-        ns_info_t           *info = &amp;frame-&gt;root-&gt;ns_info;</div><div class='del'>-        char                *path = NULL;</div><div class='del'>-</div><div class='del'>-        info-&gt;hash = 0;</div><div class='del'>-        info-&gt;found = _gf_false;</div><div class='del'>-</div><div class='del'>-        if (!priv-&gt;tag_namespaces) {</div><div class='del'>-                return ret;</div><div class='del'>-        }</div><div class='add'>+    path_parse_result_t ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='add'>+    ns_private_t *priv = (ns_private_t *)this-&gt;private;</div><div class='add'>+    ns_info_t *info = &amp;frame-&gt;root-&gt;ns_info;</div><div class='add'>+    char *path = NULL;</div><div class='ctx'> </div><div class='del'>-        /* This is our first pass at trying to get a path. Try getting</div><div class='del'>-         * from the inode context, then inode_path. */</div><div class='del'>-        if (!fd || !fd-&gt;inode) {</div><div class='del'>-                ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='del'>-        } else if (!ns_inode_ctx_get (fd-&gt;inode, this, info)) {</div><div class='del'>-                ret = PATH_PARSE_RESULT_FOUND;</div><div class='del'>-        } else if (inode_path (fd-&gt;inode, NULL, &amp;path) &gt;= 0 &amp;&amp; path) {</div><div class='del'>-                ret = parse_path (info, path);</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s: FD  retrieved path %s",</div><div class='del'>-                        fn, path);</div><div class='del'>-</div><div class='del'>-                if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='del'>-                        ns_inode_ctx_put (fd-&gt;inode, this, info);</div><div class='del'>-                }</div><div class='del'>-        }</div><div class='add'>+    info-&gt;hash = 0;</div><div class='add'>+    info-&gt;found = _gf_false;</div><div class='ctx'> </div><div class='del'>-        if (path) {</div><div class='del'>-                GF_FREE (path);</div><div class='del'>-        }</div><div class='add'>+    if (!priv-&gt;tag_namespaces) {</div><div class='add'>+        return ret;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* This is our first pass at trying to get a path. Try getting</div><div class='add'>+     * from the inode context, then inode_path. */</div><div class='add'>+    if (!fd || !fd-&gt;inode) {</div><div class='add'>+        ret = PATH_PARSE_RESULT_NO_PATH;</div><div class='add'>+    } else if (!ns_inode_ctx_get(fd-&gt;inode, this, info)) {</div><div class='add'>+        ret = PATH_PARSE_RESULT_FOUND;</div><div class='add'>+    } else if (inode_path(fd-&gt;inode, NULL, &amp;path) &gt;= 0 &amp;&amp; path) {</div><div class='add'>+        ret = parse_path(info, path);</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s: FD  retrieved path %s", fn, path);</div><div class='ctx'> </div><div class='del'>-        /* Report our status, and if we have a GFID, we'll eventually try a</div><div class='del'>-         * GET_ANCESTRY_PATH_KEY wind when we return from this function. */</div><div class='ctx'>         if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG, "%s: FD  %s %10u namespace found",</div><div class='del'>-                        fn, uuid_utoa (fd-&gt;inode-&gt;gfid), info-&gt;hash);</div><div class='del'>-        } else if (ret == PATH_PARSE_RESULT_NO_PATH) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_WARNING, "%s: FD  has no path", fn);</div><div class='del'>-        } else if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,</div><div class='del'>-                        "%s: FD  %s winding, looking for path",</div><div class='del'>-                        fn, uuid_utoa (fd-&gt;inode-&gt;gfid));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return ret;</div><div class='add'>+            ns_inode_ctx_put(fd-&gt;inode, this, info);</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (path) {</div><div class='add'>+        GF_FREE(path);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* Report our status, and if we have a GFID, we'll eventually try a</div><div class='add'>+     * GET_ANCESTRY_PATH_KEY wind when we return from this function. */</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_FOUND) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s: FD  %s %10u namespace found", fn,</div><div class='add'>+               uuid_utoa(fd-&gt;inode-&gt;gfid), info-&gt;hash);</div><div class='add'>+    } else if (ret == PATH_PARSE_RESULT_NO_PATH) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_WARNING, "%s: FD  has no path", fn);</div><div class='add'>+    } else if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "%s: FD  %s winding, looking for path",</div><div class='add'>+               fn, uuid_utoa(fd-&gt;inode-&gt;gfid));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* This macro does the work of winding down a call of `getxattr` in the case</div><div class='hunk'>@@ -405,963 +401,933 @@ set_ns_from_fd (const char *fn, call_frame_t *frame, xlator_t *this, fd_t *fd)</div><div class='ctx'>  * called `wind` and the existence of several basic variables (frame, this),</div><div class='ctx'>  * but otherwise is general enough for any fop (fd- or loc-based.) */</div><div class='ctx'> #define GET_ANCESTRY_PATH_WIND(fop, inode, args...)                            \</div><div class='del'>-        do {                                                                   \</div><div class='del'>-                ns_info_t *info         = &amp;frame-&gt;root-&gt;ns_info;               \</div><div class='del'>-                call_frame_t *new_frame = NULL;                                \</div><div class='del'>-                ns_local_t *local       = NULL;                                \</div><div class='del'>-                call_stub_t *stub       = NULL;                                \</div><div class='add'>+    do {                                                                       \</div><div class='add'>+        ns_info_t *info = &amp;frame-&gt;root-&gt;ns_info;                               \</div><div class='add'>+        call_frame_t *new_frame = NULL;                                        \</div><div class='add'>+        ns_local_t *local = NULL;                                              \</div><div class='add'>+        call_stub_t *stub = NULL;                                              \</div><div class='ctx'>                                                                                \</div><div class='del'>-                gf_log (this-&gt;name, GF_LOG_DEBUG,                              \</div><div class='del'>-                        "    %s winding, looking for path",                    \</div><div class='del'>-                        uuid_utoa (inode-&gt;gfid));                              \</div><div class='add'>+        gf_log(this-&gt;name, GF_LOG_DEBUG, "    %s winding, looking for path",   \</div><div class='add'>+               uuid_utoa(inode-&gt;gfid));                                        \</div><div class='ctx'>                                                                                \</div><div class='del'>-                new_frame = create_frame (this, this-&gt;ctx-&gt;pool);              \</div><div class='del'>-                if (!new_frame) {                                              \</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,                      \</div><div class='del'>-                                "Cannot allocate new call frame.");            \</div><div class='del'>-                        goto wind;                                             \</div><div class='del'>-                }                                                              \</div><div class='add'>+        new_frame = create_frame(this, this-&gt;ctx-&gt;pool);                       \</div><div class='add'>+        if (!new_frame) {                                                      \</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,                                   \</div><div class='add'>+                   "Cannot allocate new call frame.");                         \</div><div class='add'>+            goto wind;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='ctx'>                                                                                \</div><div class='del'>-                stub = fop_##fop##_stub (frame, default_##fop, args);          \</div><div class='del'>-                if (!stub) {                                                   \</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,                      \</div><div class='del'>-                                "Cannot allocate function stub.");             \</div><div class='del'>-                        goto wind;                                             \</div><div class='del'>-                }                                                              \</div><div class='add'>+        stub = fop_##fop##_stub(frame, default_##fop, args);                   \</div><div class='add'>+        if (!stub) {                                                           \</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,                                   \</div><div class='add'>+                   "Cannot allocate function stub.");                          \</div><div class='add'>+            goto wind;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='ctx'>                                                                                \</div><div class='del'>-                new_frame-&gt;root-&gt;uid = 0;                                      \</div><div class='del'>-                new_frame-&gt;root-&gt;gid = 0;                                      \</div><div class='del'>-                /* Put a phony "not found" NS info into this call. */          \</div><div class='del'>-                new_frame-&gt;root-&gt;ns_info = *info;                              \</div><div class='add'>+        new_frame-&gt;root-&gt;uid = 0;                                              \</div><div class='add'>+        new_frame-&gt;root-&gt;gid = 0;                                              \</div><div class='add'>+        /* Put a phony "not found" NS info into this call. */                  \</div><div class='add'>+        new_frame-&gt;root-&gt;ns_info = *info;                                      \</div><div class='ctx'>                                                                                \</div><div class='del'>-                local = ns_local_new (stub, inode);                            \</div><div class='del'>-                if (!local) {                                                  \</div><div class='del'>-                        gf_log (this-&gt;name, GF_LOG_ERROR,                      \</div><div class='del'>-                                "Cannot allocate function local.");            \</div><div class='del'>-                        goto wind;                                             \</div><div class='del'>-                }                                                              \</div><div class='add'>+        local = ns_local_new(stub, inode);                                     \</div><div class='add'>+        if (!local) {                                                          \</div><div class='add'>+            gf_log(this-&gt;name, GF_LOG_ERROR,                                   \</div><div class='add'>+                   "Cannot allocate function local.");                         \</div><div class='add'>+            goto wind;                                                         \</div><div class='add'>+        }                                                                      \</div><div class='ctx'>                                                                                \</div><div class='del'>-                new_frame-&gt;local = local;                                      \</div><div class='del'>-                /* After allocating a new frame, a call stub (to               \</div><div class='del'>-                 * resume our current fop), and a local variables              \</div><div class='del'>-                 * struct (for our loc to getxattr and our resume              \</div><div class='del'>-                 * stub), call getxattr and unwind to get_path_resume_cbk.     \</div><div class='del'>-                 */                                                            \</div><div class='del'>-                STACK_WIND (new_frame, get_path_resume_cbk,                    \</div><div class='del'>-                            FIRST_CHILD (this),                                \</div><div class='del'>-                            FIRST_CHILD (this)-&gt;fops-&gt;getxattr, &amp;local-&gt;loc,   \</div><div class='del'>-                            GET_ANCESTRY_PATH_KEY, NULL);                      \</div><div class='del'>-        } while (0)</div><div class='add'>+        new_frame-&gt;local = local;                                              \</div><div class='add'>+        /* After allocating a new frame, a call stub (to                       \</div><div class='add'>+         * resume our current fop), and a local variables                      \</div><div class='add'>+         * struct (for our loc to getxattr and our resume                      \</div><div class='add'>+         * stub), call getxattr and unwind to get_path_resume_cbk.             \</div><div class='add'>+         */                                                                    \</div><div class='add'>+        STACK_WIND(new_frame, get_path_resume_cbk, FIRST_CHILD(this),          \</div><div class='add'>+                   FIRST_CHILD(this)-&gt;fops-&gt;getxattr, &amp;local-&gt;loc,             \</div><div class='add'>+                   GET_ANCESTRY_PATH_KEY, NULL);                               \</div><div class='add'>+    } while (0)</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='del'>-          dict_t *xdata)</div><div class='add'>+ns_rmdir(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (rmdir, loc-&gt;inode, loc, xflags, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_rmdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(rmdir, loc-&gt;inode, loc, xflags, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_rmdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rmdir, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+ns_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int xflags,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (unlink, loc-&gt;inode, loc, xflags, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_unlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;unlink, loc, xflags, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(unlink, loc-&gt;inode, loc, xflags, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_unlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;unlink, loc, xflags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+ns_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, newloc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this,</div><div class='add'>+                                              newloc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (rename, newloc-&gt;inode, oldloc, newloc,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_rename_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(rename, newloc-&gt;inode, oldloc, newloc, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_rename_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rename, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='del'>-         dict_t *xdata)</div><div class='add'>+ns_link(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc,</div><div class='add'>+        dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, newloc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this,</div><div class='add'>+                                              newloc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (link, newloc-&gt;inode, oldloc, newloc,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_link_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(link, newloc-&gt;inode, oldloc, newloc, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_link_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;link, oldloc, newloc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-          mode_t umask, dict_t *xdata)</div><div class='add'>+ns_mkdir(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (mkdir, loc-&gt;inode, loc, mode, umask,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_mkdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(mkdir, loc-&gt;inode, loc, mode, umask, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_mkdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mkdir, loc, mode, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_symlink (call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='del'>-            loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='add'>+ns_symlink(call_frame_t *frame, xlator_t *this, const char *linkname,</div><div class='add'>+           loc_t *loc, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (symlink, loc-&gt;inode, linkname, loc,</div><div class='del'>-                                        umask, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_symlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;symlink, linkname, loc, umask,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(symlink, loc-&gt;inode, linkname, loc, umask,</div><div class='add'>+                               xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_symlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;symlink, linkname, loc, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='del'>-          dev_t dev, mode_t umask, dict_t *xdata)</div><div class='add'>+ns_mknod(call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,</div><div class='add'>+         dev_t dev, mode_t umask, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (mknod, loc-&gt;inode, loc, mode, dev,</div><div class='del'>-                                        umask, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_mknod_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;mknod, loc, mode, dev, umask,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(mknod, loc-&gt;inode, loc, mode, dev, umask, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_mknod_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;mknod, loc, mode, dev, umask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-           mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='add'>+ns_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+          mode_t mode, mode_t umask, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (create, loc-&gt;inode, loc, flags, mode,</div><div class='del'>-                                        umask, fd, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_create_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;create, loc, flags, mode, umask,</div><div class='del'>-                    fd, xdata);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(create, loc-&gt;inode, loc, flags, mode, umask, fd,</div><div class='add'>+                               xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_create_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;create, loc, flags, mode, umask, fd,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='del'>-             int32_t valid, dict_t *xdata)</div><div class='add'>+ns_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,</div><div class='add'>+            int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fsetattr, fd-&gt;inode, fd, stbuf, valid,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fsetattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fsetattr, fd-&gt;inode, fd, stbuf, valid, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fsetattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetattr, fd, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='del'>-            int32_t valid, dict_t *xdata)</div><div class='add'>+ns_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *stbuf,</div><div class='add'>+           int32_t valid, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (setattr, loc-&gt;inode, loc, stbuf, valid,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_setattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;setattr, loc, stbuf, valid,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(setattr, loc-&gt;inode, loc, stbuf, valid, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_setattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setattr, loc, stbuf, valid, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd,</div><div class='del'>-                 const char *name, dict_t *xdata)</div><div class='add'>+ns_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='add'>+                dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fremovexattr, fd-&gt;inode, fd, name,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fremovexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fremovexattr, fd-&gt;inode, fd, name, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fremovexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fremovexattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='del'>-                const char *name, dict_t *xdata)</div><div class='add'>+ns_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc,</div><div class='add'>+               const char *name, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (removexattr, loc-&gt;inode, loc, name,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(removexattr, loc-&gt;inode, loc, name, xdata);</div><div class='add'>+        return 0;</div><div class='add'>+    }</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, default_removexattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    STACK_WIND(frame, default_removexattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;removexattr, loc, name, xdata);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int32_t</div><div class='add'>+ns_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+            int32_t flags, dict_t *xdata)</div><div class='add'>+{</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='add'>+</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(setxattr, loc-&gt;inode, loc, dict, flags, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_setxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;setxattr, loc, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,</div><div class='add'>+ns_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='ctx'>              int32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (setxattr, loc-&gt;inode, loc, dict, flags,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_setxattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;setxattr, loc, dict, flags,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fsetxattr, fd-&gt;inode, fd, dict, flags, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fsetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsetxattr, fd, dict, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,</div><div class='del'>-              int32_t flags, dict_t *xdata)</div><div class='add'>+ns_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fsetxattr, fd-&gt;inode, fd, dict, flags,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fsetxattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsetxattr, fd, dict, flags,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(truncate, loc-&gt;inode, loc, offset, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_truncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset,</div><div class='add'>+ns_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='ctx'>              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (truncate, loc-&gt;inode, loc, offset,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_truncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;truncate, loc, offset, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(ftruncate, fd-&gt;inode, fd, offset, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_ftruncate_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-              dict_t *xdata)</div><div class='add'>+ns_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='add'>+          int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (ftruncate, fd-&gt;inode, fd, offset,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_ftruncate_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;ftruncate, fd, offset, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(writev, fd-&gt;inode, fd, vector, count, offset,</div><div class='add'>+                               flags, iobref, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_writev_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='add'>+               flags, iobref, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector,</div><div class='del'>-           int32_t count, off_t offset, uint32_t flags, struct iobref *iobref,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+ns_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (writev, fd-&gt;inode, fd, vector, count,</div><div class='del'>-                                        offset, flags, iobref, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_writev_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;writev, fd, vector, count, offset,</div><div class='del'>-                    flags, iobref, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(lookup, loc-&gt;inode, loc, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_lookup_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+ns_stat(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (lookup, loc-&gt;inode, loc, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_lookup_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;lookup, loc, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(stat, loc-&gt;inode, loc, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_stat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+ns_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (stat, loc-&gt;inode, loc, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_stat_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;stat, loc, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fstat, fd-&gt;inode, fd, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fstat_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+ns_readlink(call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='add'>+            dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fstat, fd-&gt;inode, fd, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fstat_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fstat, fd, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(readlink, loc-&gt;inode, loc, size, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_readlink_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_readlink (call_frame_t *frame, xlator_t *this, loc_t *loc, size_t size,</div><div class='del'>-             dict_t *xdata)</div><div class='add'>+ns_access(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='add'>+          dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (readlink, loc-&gt;inode, loc, size, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_readlink_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;readlink, loc, size, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(access, loc-&gt;inode, loc, mask, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_access_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t mask,</div><div class='del'>-           dict_t *xdata)</div><div class='add'>+ns_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='add'>+        fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (access, loc-&gt;inode, loc, mask, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_access_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;access, loc, mask, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(open, fd-&gt;inode, loc, flags, fd, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_open_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,</div><div class='del'>-         fd_t *fd, dict_t *xdata)</div><div class='add'>+ns_readv(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='add'>+         off_t offset, uint32_t flags, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (open, fd-&gt;inode, loc, flags, fd, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_open_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;open, loc, flags, fd, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(readv, fd-&gt;inode, fd, size, offset, flags,</div><div class='add'>+                               xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_readv_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;readv, fd, size, offset, flags, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,</div><div class='del'>-          off_t offset, uint32_t flags, dict_t *xdata)</div><div class='add'>+ns_flush(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (readv, fd-&gt;inode, fd, size, offset,</div><div class='del'>-                                        flags, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_readv_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;readv, fd, size, offset, flags,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(flush, fd-&gt;inode, fd, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_flush_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)</div><div class='add'>+ns_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='add'>+         dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (flush, fd-&gt;inode, fd, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_flush_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;flush, fd, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fsync, fd-&gt;inode, fd, datasync, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fsync_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsync, fd, datasync, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='del'>-          dict_t *xdata)</div><div class='add'>+ns_opendir(call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fsync, fd-&gt;inode, fd, datasync, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fsync_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsync, fd, datasync, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(opendir, loc-&gt;inode, loc, fd, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_opendir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,</div><div class='add'>+ns_fsyncdir(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='ctx'>             dict_t *xdata)</div><div class='add'>+</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (opendir, loc-&gt;inode, loc, fd, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_opendir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;opendir, loc, fd, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fsyncdir, fd-&gt;inode, fd, datasync, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fsyncdir_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync,</div><div class='del'>-             dict_t *xdata)</div><div class='del'>-</div><div class='add'>+ns_rchecksum(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='add'>+             int32_t len, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fsyncdir, fd-&gt;inode, fd, datasync,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fsyncdir_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fsyncdir, fd, datasync, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(rchecksum, fd-&gt;inode, fd, offset, len, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_rchecksum_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;rchecksum, fd, offset, len, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_rchecksum (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,</div><div class='del'>-              int32_t len, dict_t *xdata)</div><div class='add'>+ns_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (rchecksum, fd-&gt;inode, fd, offset, len,</div><div class='del'>-                                        xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_rchecksum_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;rchecksum, fd, offset, len,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(statfs, loc-&gt;inode, loc, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_statfs_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)</div><div class='add'>+ns_inodelk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (statfs, loc-&gt;inode, loc, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_statfs_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;statfs, loc, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(inodelk, loc-&gt;inode, volume, loc, cmd, flock,</div><div class='add'>+                               xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_inodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;inodelk, volume, loc, cmd, flock,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_inodelk (call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+ns_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='ctx'>             int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (inodelk, loc-&gt;inode, volume, loc, cmd,</div><div class='del'>-                                        flock, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_inodelk_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;inodelk, volume, loc, cmd, flock,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(finodelk, fd-&gt;inode, volume, fd, cmd, flock,</div><div class='add'>+                               xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_finodelk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;finodelk, volume, fd, cmd, flock,</div><div class='add'>+               xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_finodelk (call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='del'>-             int32_t cmd, struct gf_flock *flock, dict_t *xdata)</div><div class='add'>+ns_entrylk(call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+           const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+           dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_loc(__FUNCTION__, frame, this, loc);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (finodelk, fd-&gt;inode, volume, fd, cmd,</div><div class='del'>-                                        flock, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_finodelk_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;finodelk, volume, fd, cmd, flock,</div><div class='del'>-                    xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(entrylk, loc-&gt;inode, volume, loc, basename, cmd,</div><div class='add'>+                               type, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_entrylk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;entrylk, volume, loc, basename, cmd,</div><div class='add'>+               type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_entrylk (call_frame_t *frame, xlator_t *this, const char *volume, loc_t *loc,</div><div class='add'>+ns_fentrylk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='ctx'>             const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='ctx'>             dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_loc (__FUNCTION__, frame, this, loc);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (entrylk, loc-&gt;inode, volume, loc,</div><div class='del'>-                                        basename, cmd, type, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_entrylk_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;entrylk, volume, loc, basename,</div><div class='del'>-                    cmd, type, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fentrylk, fd-&gt;inode, volume, fd, basename, cmd,</div><div class='add'>+                               type, xdata);</div><div class='ctx'>         return 0;</div><div class='add'>+    }</div><div class='add'>+wind:</div><div class='add'>+    STACK_WIND(frame, default_fentrylk_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fentrylk, volume, fd, basename, cmd,</div><div class='add'>+               type, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>-ns_fentrylk (call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd,</div><div class='del'>-             const char *basename, entrylk_cmd cmd, entrylk_type type,</div><div class='add'>+ns_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='ctx'>              dict_t *xdata)</div><div class='ctx'> {</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='add'>+    path_parse_result_t ret = set_ns_from_fd(__FUNCTION__, frame, this, fd);</div><div class='ctx'> </div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fentrylk, fd-&gt;inode, volume, fd,</div><div class='del'>-                                        basename, cmd, type, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='del'>-wind:</div><div class='del'>-        STACK_WIND (frame, default_fentrylk_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fentrylk, volume, fd, basename,</div><div class='del'>-                    cmd, type, xdata);</div><div class='add'>+    if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='add'>+        GET_ANCESTRY_PATH_WIND(fgetxattr, fd-&gt;inode, fd, name, xdata);</div><div class='ctx'>         return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int32_t</div><div class='del'>-ns_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name,</div><div class='del'>-              dict_t *xdata)</div><div class='del'>-{</div><div class='del'>-        path_parse_result_t ret = set_ns_from_fd (__FUNCTION__, frame, this, fd);</div><div class='del'>-</div><div class='del'>-        if (ret == PATH_PARSE_RESULT_IS_GFID) {</div><div class='del'>-                GET_ANCESTRY_PATH_WIND (fgetxattr, fd-&gt;inode, fd, name, xdata);</div><div class='del'>-                return 0;</div><div class='del'>-        }</div><div class='add'>+    }</div><div class='ctx'> wind:</div><div class='del'>-        STACK_WIND (frame, default_fgetxattr_cbk, FIRST_CHILD (this),</div><div class='del'>-                    FIRST_CHILD (this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='del'>-        return 0;</div><div class='add'>+    STACK_WIND(frame, default_fgetxattr_cbk, FIRST_CHILD(this),</div><div class='add'>+               FIRST_CHILD(this)-&gt;fops-&gt;fgetxattr, fd, name, xdata);</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> int32_t</div><div class='del'>